[ Index ]

PHP Cross Reference of WordPress

title

Body

[close]

/js/dist/ -> blocks.js (source)

   1  this["wp"] = this["wp"] || {}; this["wp"]["blocks"] =
   2  /******/ (function(modules) { // webpackBootstrap
   3  /******/     // The module cache
   4  /******/     var installedModules = {};
   5  /******/
   6  /******/     // The require function
   7  /******/ 	function __webpack_require__(moduleId) {
   8  /******/
   9  /******/         // Check if module is in cache
  10  /******/         if(installedModules[moduleId]) {
  11  /******/             return installedModules[moduleId].exports;
  12  /******/         }
  13  /******/         // Create a new module (and put it into the cache)
  14  /******/         var module = installedModules[moduleId] = {
  15  /******/             i: moduleId,
  16  /******/             l: false,
  17  /******/             exports: {}
  18  /******/         };
  19  /******/
  20  /******/         // Execute the module function
  21  /******/         modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
  22  /******/
  23  /******/         // Flag the module as loaded
  24  /******/         module.l = true;
  25  /******/
  26  /******/         // Return the exports of the module
  27  /******/         return module.exports;
  28  /******/     }
  29  /******/
  30  /******/
  31  /******/     // expose the modules object (__webpack_modules__)
  32  /******/     __webpack_require__.m = modules;
  33  /******/
  34  /******/     // expose the module cache
  35  /******/     __webpack_require__.c = installedModules;
  36  /******/
  37  /******/     // define getter function for harmony exports
  38  /******/     __webpack_require__.d = function(exports, name, getter) {
  39  /******/         if(!__webpack_require__.o(exports, name)) {
  40  /******/             Object.defineProperty(exports, name, { enumerable: true, get: getter });
  41  /******/         }
  42  /******/     };
  43  /******/
  44  /******/     // define __esModule on exports
  45  /******/     __webpack_require__.r = function(exports) {
  46  /******/         if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
  47  /******/             Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
  48  /******/         }
  49  /******/         Object.defineProperty(exports, '__esModule', { value: true });
  50  /******/     };
  51  /******/
  52  /******/     // create a fake namespace object
  53  /******/     // mode & 1: value is a module id, require it
  54  /******/     // mode & 2: merge all properties of value into the ns
  55  /******/     // mode & 4: return value when already ns object
  56  /******/     // mode & 8|1: behave like require
  57  /******/     __webpack_require__.t = function(value, mode) {
  58  /******/         if(mode & 1) value = __webpack_require__(value);
  59  /******/         if(mode & 8) return value;
  60  /******/         if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
  61  /******/         var ns = Object.create(null);
  62  /******/         __webpack_require__.r(ns);
  63  /******/         Object.defineProperty(ns, 'default', { enumerable: true, value: value });
  64  /******/         if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
  65  /******/         return ns;
  66  /******/     };
  67  /******/
  68  /******/     // getDefaultExport function for compatibility with non-harmony modules
  69  /******/     __webpack_require__.n = function(module) {
  70  /******/         var getter = module && module.__esModule ?
  71  /******/ 			function getDefault() { return module['default']; } :
  72  /******/ 			function getModuleExports() { return module; };
  73  /******/         __webpack_require__.d(getter, 'a', getter);
  74  /******/         return getter;
  75  /******/     };
  76  /******/
  77  /******/     // Object.prototype.hasOwnProperty.call
  78  /******/     __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
  79  /******/
  80  /******/     // __webpack_public_path__
  81  /******/     __webpack_require__.p = "";
  82  /******/
  83  /******/
  84  /******/     // Load entry module and return exports
  85  /******/     return __webpack_require__(__webpack_require__.s = "./node_modules/@wordpress/blocks/build-module/index.js");
  86  /******/ })
  87  /************************************************************************/
  88  /******/ ({
  89  
  90  /***/ "./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js":
  91  /*!*******************************************************************!*\
  92    !*** ./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js ***!
  93    \*******************************************************************/
  94  /*! exports provided: default */
  95  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  96  
  97  "use strict";
  98  __webpack_require__.r(__webpack_exports__);
  99  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return _arrayWithHoles; });
 100  function _arrayWithHoles(arr) {
 101    if (Array.isArray(arr)) return arr;
 102  }
 103  
 104  /***/ }),
 105  
 106  /***/ "./node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js":
 107  /*!**********************************************************************!*\
 108    !*** ./node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js ***!
 109    \**********************************************************************/
 110  /*! exports provided: default */
 111  /***/ (function(module, __webpack_exports__, __webpack_require__) {
 112  
 113  "use strict";
 114  __webpack_require__.r(__webpack_exports__);
 115  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return _arrayWithoutHoles; });
 116  function _arrayWithoutHoles(arr) {
 117    if (Array.isArray(arr)) {
 118      for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) {
 119        arr2[i] = arr[i];
 120      }
 121  
 122      return arr2;
 123    }
 124  }
 125  
 126  /***/ }),
 127  
 128  /***/ "./node_modules/@babel/runtime/helpers/esm/defineProperty.js":
 129  /*!*******************************************************************!*\
 130    !*** ./node_modules/@babel/runtime/helpers/esm/defineProperty.js ***!
 131    \*******************************************************************/
 132  /*! exports provided: default */
 133  /***/ (function(module, __webpack_exports__, __webpack_require__) {
 134  
 135  "use strict";
 136  __webpack_require__.r(__webpack_exports__);
 137  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return _defineProperty; });
 138  function _defineProperty(obj, key, value) {
 139    if (key in obj) {
 140      Object.defineProperty(obj, key, {
 141        value: value,
 142        enumerable: true,
 143        configurable: true,
 144        writable: true
 145      });
 146    } else {
 147      obj[key] = value;
 148    }
 149  
 150    return obj;
 151  }
 152  
 153  /***/ }),
 154  
 155  /***/ "./node_modules/@babel/runtime/helpers/esm/extends.js":
 156  /*!************************************************************!*\
 157    !*** ./node_modules/@babel/runtime/helpers/esm/extends.js ***!
 158    \************************************************************/
 159  /*! exports provided: default */
 160  /***/ (function(module, __webpack_exports__, __webpack_require__) {
 161  
 162  "use strict";
 163  __webpack_require__.r(__webpack_exports__);
 164  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return _extends; });
 165  function _extends() {
 166    _extends = Object.assign || function (target) {
 167      for (var i = 1; i < arguments.length; i++) {
 168        var source = arguments[i];
 169  
 170        for (var key in source) {
 171          if (Object.prototype.hasOwnProperty.call(source, key)) {
 172            target[key] = source[key];
 173          }
 174        }
 175      }
 176  
 177      return target;
 178    };
 179  
 180    return _extends.apply(this, arguments);
 181  }
 182  
 183  /***/ }),
 184  
 185  /***/ "./node_modules/@babel/runtime/helpers/esm/iterableToArray.js":
 186  /*!********************************************************************!*\
 187    !*** ./node_modules/@babel/runtime/helpers/esm/iterableToArray.js ***!
 188    \********************************************************************/
 189  /*! exports provided: default */
 190  /***/ (function(module, __webpack_exports__, __webpack_require__) {
 191  
 192  "use strict";
 193  __webpack_require__.r(__webpack_exports__);
 194  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return _iterableToArray; });
 195  function _iterableToArray(iter) {
 196    if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter);
 197  }
 198  
 199  /***/ }),
 200  
 201  /***/ "./node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js":
 202  /*!*************************************************************************!*\
 203    !*** ./node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js ***!
 204    \*************************************************************************/
 205  /*! exports provided: default */
 206  /***/ (function(module, __webpack_exports__, __webpack_require__) {
 207  
 208  "use strict";
 209  __webpack_require__.r(__webpack_exports__);
 210  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return _iterableToArrayLimit; });
 211  function _iterableToArrayLimit(arr, i) {
 212    var _arr = [];
 213    var _n = true;
 214    var _d = false;
 215    var _e = undefined;
 216  
 217    try {
 218      for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {
 219        _arr.push(_s.value);
 220  
 221        if (i && _arr.length === i) break;
 222      }
 223    } catch (err) {
 224      _d = true;
 225      _e = err;
 226    } finally {
 227      try {
 228        if (!_n && _i["return"] != null) _i["return"]();
 229      } finally {
 230        if (_d) throw _e;
 231      }
 232    }
 233  
 234    return _arr;
 235  }
 236  
 237  /***/ }),
 238  
 239  /***/ "./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js":
 240  /*!********************************************************************!*\
 241    !*** ./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js ***!
 242    \********************************************************************/
 243  /*! exports provided: default */
 244  /***/ (function(module, __webpack_exports__, __webpack_require__) {
 245  
 246  "use strict";
 247  __webpack_require__.r(__webpack_exports__);
 248  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return _nonIterableRest; });
 249  function _nonIterableRest() {
 250    throw new TypeError("Invalid attempt to destructure non-iterable instance");
 251  }
 252  
 253  /***/ }),
 254  
 255  /***/ "./node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js":
 256  /*!**********************************************************************!*\
 257    !*** ./node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js ***!
 258    \**********************************************************************/
 259  /*! exports provided: default */
 260  /***/ (function(module, __webpack_exports__, __webpack_require__) {
 261  
 262  "use strict";
 263  __webpack_require__.r(__webpack_exports__);
 264  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return _nonIterableSpread; });
 265  function _nonIterableSpread() {
 266    throw new TypeError("Invalid attempt to spread non-iterable instance");
 267  }
 268  
 269  /***/ }),
 270  
 271  /***/ "./node_modules/@babel/runtime/helpers/esm/objectSpread.js":
 272  /*!*****************************************************************!*\
 273    !*** ./node_modules/@babel/runtime/helpers/esm/objectSpread.js ***!
 274    \*****************************************************************/
 275  /*! exports provided: default */
 276  /***/ (function(module, __webpack_exports__, __webpack_require__) {
 277  
 278  "use strict";
 279  __webpack_require__.r(__webpack_exports__);
 280  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return _objectSpread; });
 281  /* harmony import */ var _defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./defineProperty */ "./node_modules/@babel/runtime/helpers/esm/defineProperty.js");
 282  
 283  function _objectSpread(target) {
 284    for (var i = 1; i < arguments.length; i++) {
 285      var source = arguments[i] != null ? arguments[i] : {};
 286      var ownKeys = Object.keys(source);
 287  
 288      if (typeof Object.getOwnPropertySymbols === 'function') {
 289        ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {
 290          return Object.getOwnPropertyDescriptor(source, sym).enumerable;
 291        }));
 292      }
 293  
 294      ownKeys.forEach(function (key) {
 295        Object(_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])(target, key, source[key]);
 296      });
 297    }
 298  
 299    return target;
 300  }
 301  
 302  /***/ }),
 303  
 304  /***/ "./node_modules/@babel/runtime/helpers/esm/slicedToArray.js":
 305  /*!******************************************************************!*\
 306    !*** ./node_modules/@babel/runtime/helpers/esm/slicedToArray.js ***!
 307    \******************************************************************/
 308  /*! exports provided: default */
 309  /***/ (function(module, __webpack_exports__, __webpack_require__) {
 310  
 311  "use strict";
 312  __webpack_require__.r(__webpack_exports__);
 313  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return _slicedToArray; });
 314  /* harmony import */ var _arrayWithHoles__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./arrayWithHoles */ "./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js");
 315  /* harmony import */ var _iterableToArrayLimit__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./iterableToArrayLimit */ "./node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js");
 316  /* harmony import */ var _nonIterableRest__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./nonIterableRest */ "./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js");
 317  
 318  
 319  
 320  function _slicedToArray(arr, i) {
 321    return Object(_arrayWithHoles__WEBPACK_IMPORTED_MODULE_0__["default"])(arr) || Object(_iterableToArrayLimit__WEBPACK_IMPORTED_MODULE_1__["default"])(arr, i) || Object(_nonIterableRest__WEBPACK_IMPORTED_MODULE_2__["default"])();
 322  }
 323  
 324  /***/ }),
 325  
 326  /***/ "./node_modules/@babel/runtime/helpers/esm/toArray.js":
 327  /*!************************************************************!*\
 328    !*** ./node_modules/@babel/runtime/helpers/esm/toArray.js ***!
 329    \************************************************************/
 330  /*! exports provided: default */
 331  /***/ (function(module, __webpack_exports__, __webpack_require__) {
 332  
 333  "use strict";
 334  __webpack_require__.r(__webpack_exports__);
 335  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return _toArray; });
 336  /* harmony import */ var _arrayWithHoles__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./arrayWithHoles */ "./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js");
 337  /* harmony import */ var _iterableToArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./iterableToArray */ "./node_modules/@babel/runtime/helpers/esm/iterableToArray.js");
 338  /* harmony import */ var _nonIterableRest__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./nonIterableRest */ "./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js");
 339  
 340  
 341  
 342  function _toArray(arr) {
 343    return Object(_arrayWithHoles__WEBPACK_IMPORTED_MODULE_0__["default"])(arr) || Object(_iterableToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(arr) || Object(_nonIterableRest__WEBPACK_IMPORTED_MODULE_2__["default"])();
 344  }
 345  
 346  /***/ }),
 347  
 348  /***/ "./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js":
 349  /*!**********************************************************************!*\
 350    !*** ./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js ***!
 351    \**********************************************************************/
 352  /*! exports provided: default */
 353  /***/ (function(module, __webpack_exports__, __webpack_require__) {
 354  
 355  "use strict";
 356  __webpack_require__.r(__webpack_exports__);
 357  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return _toConsumableArray; });
 358  /* harmony import */ var _arrayWithoutHoles__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./arrayWithoutHoles */ "./node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js");
 359  /* harmony import */ var _iterableToArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./iterableToArray */ "./node_modules/@babel/runtime/helpers/esm/iterableToArray.js");
 360  /* harmony import */ var _nonIterableSpread__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./nonIterableSpread */ "./node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js");
 361  
 362  
 363  
 364  function _toConsumableArray(arr) {
 365    return Object(_arrayWithoutHoles__WEBPACK_IMPORTED_MODULE_0__["default"])(arr) || Object(_iterableToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(arr) || Object(_nonIterableSpread__WEBPACK_IMPORTED_MODULE_2__["default"])();
 366  }
 367  
 368  /***/ }),
 369  
 370  /***/ "./node_modules/@wordpress/blocks/build-module/api/categories.js":
 371  /*!***********************************************************************!*\
 372    !*** ./node_modules/@wordpress/blocks/build-module/api/categories.js ***!
 373    \***********************************************************************/
 374  /*! exports provided: getCategories, setCategories */
 375  /***/ (function(module, __webpack_exports__, __webpack_require__) {
 376  
 377  "use strict";
 378  __webpack_require__.r(__webpack_exports__);
 379  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getCategories", function() { return getCategories; });
 380  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setCategories", function() { return setCategories; });
 381  /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/data */ "@wordpress/data");
 382  /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_0__);
 383  /**
 384   * WordPress dependencies
 385   */
 386  
 387  /**
 388   * Returns all the block categories.
 389   *
 390   * @return {Object[]} Block categories.
 391   */
 392  
 393  function getCategories() {
 394    return Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_0__["select"])('core/blocks').getCategories();
 395  }
 396  /**
 397   * Sets the block categories.
 398   *
 399   * @param {Object[]} categories Block categories.
 400   */
 401  
 402  function setCategories(categories) {
 403    Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_0__["dispatch"])('core/blocks').setCategories(categories);
 404  }
 405  
 406  
 407  /***/ }),
 408  
 409  /***/ "./node_modules/@wordpress/blocks/build-module/api/children.js":
 410  /*!*********************************************************************!*\
 411    !*** ./node_modules/@wordpress/blocks/build-module/api/children.js ***!
 412    \*********************************************************************/
 413  /*! exports provided: getSerializeCapableElement, concat, fromDOM, toHTML, matcher, default */
 414  /***/ (function(module, __webpack_exports__, __webpack_require__) {
 415  
 416  "use strict";
 417  __webpack_require__.r(__webpack_exports__);
 418  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getSerializeCapableElement", function() { return getSerializeCapableElement; });
 419  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "concat", function() { return concat; });
 420  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fromDOM", function() { return fromDOM; });
 421  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "toHTML", function() { return toHTML; });
 422  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "matcher", function() { return matcher; });
 423  /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash */ "lodash");
 424  /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_0__);
 425  /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
 426  /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__);
 427  /* harmony import */ var _node__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node */ "./node_modules/@wordpress/blocks/build-module/api/node.js");
 428  /**
 429   * External dependencies
 430   */
 431  
 432  /**
 433   * WordPress dependencies
 434   */
 435  
 436  
 437  /**
 438   * Internal dependencies
 439   */
 440  
 441  
 442  /**
 443   * A representation of a block's rich text value.
 444   *
 445   * @typedef {WPBlockNode[]} WPBlockChildren
 446   */
 447  
 448  /**
 449   * Given block children, returns a serialize-capable WordPress element.
 450   *
 451   * @param {WPBlockChildren} children Block children object to convert.
 452   *
 453   * @return {WPElement} A serialize-capable element.
 454   */
 455  
 456  function getSerializeCapableElement(children) {
 457    // The fact that block children are compatible with the element serializer is
 458    // merely an implementation detail that currently serves to be true, but
 459    // should not be mistaken as being a guarantee on the external API. The
 460    // public API only offers guarantees to work with strings (toHTML) and DOM
 461    // elements (fromDOM), and should provide utilities to manipulate the value
 462    // rather than expect consumers to inspect or construct its shape (concat).
 463    return children;
 464  }
 465  /**
 466   * Given block children, returns an array of block nodes.
 467   *
 468   * @param {WPBlockChildren} children Block children object to convert.
 469   *
 470   * @return {Array<WPBlockNode>} An array of individual block nodes.
 471   */
 472  
 473  function getChildrenArray(children) {
 474    // The fact that block children are compatible with the element serializer
 475    // is merely an implementation detail that currently serves to be true, but
 476    // should not be mistaken as being a guarantee on the external API.
 477    return children;
 478  }
 479  /**
 480   * Given two or more block nodes, returns a new block node representing a
 481   * concatenation of its values.
 482   *
 483   * @param {...WPBlockChildren} blockNodes Block nodes to concatenate.
 484   *
 485   * @return {WPBlockChildren} Concatenated block node.
 486   */
 487  
 488  
 489  function concat() {
 490    var result = [];
 491  
 492    for (var i = 0; i < arguments.length; i++) {
 493      var blockNode = Object(lodash__WEBPACK_IMPORTED_MODULE_0__["castArray"])(i < 0 || arguments.length <= i ? undefined : arguments[i]);
 494  
 495      for (var j = 0; j < blockNode.length; j++) {
 496        var child = blockNode[j];
 497        var canConcatToPreviousString = typeof child === 'string' && typeof result[result.length - 1] === 'string';
 498  
 499        if (canConcatToPreviousString) {
 500          result[result.length - 1] += child;
 501        } else {
 502          result.push(child);
 503        }
 504      }
 505    }
 506  
 507    return result;
 508  }
 509  /**
 510   * Given an iterable set of DOM nodes, returns equivalent block children.
 511   * Ignores any non-element/text nodes included in set.
 512   *
 513   * @param {Iterable.<Node>} domNodes Iterable set of DOM nodes to convert.
 514   *
 515   * @return {WPBlockChildren} Block children equivalent to DOM nodes.
 516   */
 517  
 518  function fromDOM(domNodes) {
 519    var result = [];
 520  
 521    for (var i = 0; i < domNodes.length; i++) {
 522      try {
 523        result.push(_node__WEBPACK_IMPORTED_MODULE_2__["fromDOM"](domNodes[i]));
 524      } catch (error) {// Simply ignore if DOM node could not be converted.
 525      }
 526    }
 527  
 528    return result;
 529  }
 530  /**
 531   * Given a block node, returns its HTML string representation.
 532   *
 533   * @param {WPBlockChildren} children Block node(s) to convert to string.
 534   *
 535   * @return {string} String HTML representation of block node.
 536   */
 537  
 538  function toHTML(children) {
 539    var element = getSerializeCapableElement(children);
 540    return Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["renderToString"])(element);
 541  }
 542  /**
 543   * Given a selector, returns an hpq matcher generating a WPBlockChildren value
 544   * matching the selector result.
 545   *
 546   * @param {string} selector DOM selector.
 547   *
 548   * @return {Function} hpq matcher.
 549   */
 550  
 551  function matcher(selector) {
 552    return function (domNode) {
 553      var match = domNode;
 554  
 555      if (selector) {
 556        match = domNode.querySelector(selector);
 557      }
 558  
 559      if (match) {
 560        return fromDOM(match.childNodes);
 561      }
 562  
 563      return [];
 564    };
 565  }
 566  /* harmony default export */ __webpack_exports__["default"] = ({
 567    concat: concat,
 568    getChildrenArray: getChildrenArray,
 569    fromDOM: fromDOM,
 570    toHTML: toHTML,
 571    matcher: matcher
 572  });
 573  
 574  
 575  /***/ }),
 576  
 577  /***/ "./node_modules/@wordpress/blocks/build-module/api/factory.js":
 578  /*!********************************************************************!*\
 579    !*** ./node_modules/@wordpress/blocks/build-module/api/factory.js ***!
 580    \********************************************************************/
 581  /*! exports provided: createBlock, cloneBlock, getPossibleBlockTransformations, findTransform, getBlockTransforms, switchToBlockType */
 582  /***/ (function(module, __webpack_exports__, __webpack_require__) {
 583  
 584  "use strict";
 585  __webpack_require__.r(__webpack_exports__);
 586  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createBlock", function() { return createBlock; });
 587  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cloneBlock", function() { return cloneBlock; });
 588  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getPossibleBlockTransformations", function() { return getPossibleBlockTransformations; });
 589  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "findTransform", function() { return findTransform; });
 590  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getBlockTransforms", function() { return getBlockTransforms; });
 591  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "switchToBlockType", function() { return switchToBlockType; });
 592  /* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ "./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js");
 593  /* harmony import */ var _babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread */ "./node_modules/@babel/runtime/helpers/esm/objectSpread.js");
 594  /* harmony import */ var uuid_v4__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! uuid/v4 */ "./node_modules/uuid/v4.js");
 595  /* harmony import */ var uuid_v4__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(uuid_v4__WEBPACK_IMPORTED_MODULE_2__);
 596  /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lodash */ "lodash");
 597  /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_3__);
 598  /* harmony import */ var _wordpress_hooks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/hooks */ "@wordpress/hooks");
 599  /* harmony import */ var _wordpress_hooks__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_hooks__WEBPACK_IMPORTED_MODULE_4__);
 600  /* harmony import */ var _registration__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./registration */ "./node_modules/@wordpress/blocks/build-module/api/registration.js");
 601  
 602  
 603  
 604  /**
 605   * External dependencies
 606   */
 607  
 608  
 609  /**
 610   * WordPress dependencies
 611   */
 612  
 613  
 614  /**
 615   * Internal dependencies
 616   */
 617  
 618  
 619  /**
 620   * Returns a block object given its type and attributes.
 621   *
 622   * @param {string} name            Block name.
 623   * @param {Object} blockAttributes Block attributes.
 624   * @param {?Array} innerBlocks     Nested blocks.
 625   *
 626   * @return {Object} Block object.
 627   */
 628  
 629  function createBlock(name) {
 630    var blockAttributes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
 631    var innerBlocks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
 632    // Get the type definition associated with a registered block.
 633    var blockType = Object(_registration__WEBPACK_IMPORTED_MODULE_5__["getBlockType"])(name); // Ensure attributes contains only values defined by block type, and merge
 634    // default values for missing attributes.
 635  
 636    var attributes = Object(lodash__WEBPACK_IMPORTED_MODULE_3__["reduce"])(blockType.attributes, function (result, schema, key) {
 637      var value = blockAttributes[key];
 638  
 639      if (undefined !== value) {
 640        result[key] = value;
 641      } else if (schema.hasOwnProperty('default')) {
 642        result[key] = schema.default;
 643      }
 644  
 645      if (['node', 'children'].indexOf(schema.source) !== -1) {
 646        // Ensure value passed is always an array, which we're expecting in
 647        // the RichText component to handle the deprecated value.
 648        if (typeof result[key] === 'string') {
 649          result[key] = [result[key]];
 650        } else if (!Array.isArray(result[key])) {
 651          result[key] = [];
 652        }
 653      }
 654  
 655      return result;
 656    }, {});
 657    var clientId = uuid_v4__WEBPACK_IMPORTED_MODULE_2___default()(); // Blocks are stored with a unique ID, the assigned type name, the block
 658    // attributes, and their inner blocks.
 659  
 660    return {
 661      clientId: clientId,
 662      name: name,
 663      isValid: true,
 664      attributes: attributes,
 665      innerBlocks: innerBlocks
 666    };
 667  }
 668  /**
 669   * Given a block object, returns a copy of the block object, optionally merging
 670   * new attributes and/or replacing its inner blocks.
 671   *
 672   * @param {Object} block              Block object.
 673   * @param {Object} mergeAttributes    Block attributes.
 674   * @param {?Array} newInnerBlocks     Nested blocks.
 675   *
 676   * @return {Object} A cloned block.
 677   */
 678  
 679  function cloneBlock(block) {
 680    var mergeAttributes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
 681    var newInnerBlocks = arguments.length > 2 ? arguments[2] : undefined;
 682    var clientId = uuid_v4__WEBPACK_IMPORTED_MODULE_2___default()();
 683    return Object(_babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_1__["default"])({}, block, {
 684      clientId: clientId,
 685      attributes: Object(_babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_1__["default"])({}, block.attributes, mergeAttributes),
 686      innerBlocks: newInnerBlocks || block.innerBlocks.map(function (innerBlock) {
 687        return cloneBlock(innerBlock);
 688      })
 689    });
 690  }
 691  /**
 692   * Returns a boolean indicating whether a transform is possible based on
 693   * various bits of context.
 694   *
 695   * @param {Object} transform The transform object to validate.
 696   * @param {string} direction Is this a 'from' or 'to' transform.
 697   * @param {Array} blocks The blocks to transform from.
 698   * @param {boolean} isMultiBlock Have multiple blocks been selected?
 699   *
 700   * @return {boolean} Is the transform possible?
 701   */
 702  
 703  var isPossibleTransformForSource = function isPossibleTransformForSource(transform, direction, blocks) {
 704    if (Object(lodash__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(blocks)) {
 705      return false;
 706    }
 707  
 708    var isMultiBlock = blocks.length > 1;
 709    var sourceBlock = Object(lodash__WEBPACK_IMPORTED_MODULE_3__["first"])(blocks); // If multiple blocks are selected, only multi block transforms are allowed.
 710  
 711    var isValidForMultiBlocks = !isMultiBlock || transform.isMultiBlock;
 712  
 713    if (!isValidForMultiBlocks) {
 714      return false;
 715    } // Only consider 'block' type transforms as valid.
 716  
 717  
 718    var isBlockType = transform.type === 'block';
 719  
 720    if (!isBlockType) {
 721      return false;
 722    } // Check if the transform's block name matches the source block only if this is a transform 'from'.
 723  
 724  
 725    var hasMatchingName = direction !== 'from' || transform.blocks.indexOf(sourceBlock.name) !== -1;
 726  
 727    if (!hasMatchingName) {
 728      return false;
 729    } // If the transform has a `isMatch` function specified, check that it returns true.
 730  
 731  
 732    if (Object(lodash__WEBPACK_IMPORTED_MODULE_3__["isFunction"])(transform.isMatch)) {
 733      var attributes = transform.isMultiBlock ? blocks.map(function (block) {
 734        return block.attributes;
 735      }) : sourceBlock.attributes;
 736  
 737      if (!transform.isMatch(attributes)) {
 738        return false;
 739      }
 740    }
 741  
 742    return true;
 743  };
 744  /**
 745   * Returns block types that the 'blocks' can be transformed into, based on
 746   * 'from' transforms on other blocks.
 747   *
 748   * @param {Array}  blocks  The blocks to transform from.
 749   * @param {boolean} isMultiBlock Have multiple blocks been selected?
 750   *
 751   * @return {Array} Block types that the blocks can be transformed into.
 752   */
 753  
 754  
 755  var getBlockTypesForPossibleFromTransforms = function getBlockTypesForPossibleFromTransforms(blocks) {
 756    if (Object(lodash__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(blocks)) {
 757      return [];
 758    }
 759  
 760    var allBlockTypes = Object(_registration__WEBPACK_IMPORTED_MODULE_5__["getBlockTypes"])(); // filter all blocks to find those with a 'from' transform.
 761  
 762    var blockTypesWithPossibleFromTransforms = Object(lodash__WEBPACK_IMPORTED_MODULE_3__["filter"])(allBlockTypes, function (blockType) {
 763      var fromTransforms = getBlockTransforms('from', blockType.name);
 764      return !!findTransform(fromTransforms, function (transform) {
 765        return isPossibleTransformForSource(transform, 'from', blocks);
 766      });
 767    });
 768    return blockTypesWithPossibleFromTransforms;
 769  };
 770  /**
 771   * Returns block types that the 'blocks' can be transformed into, based on
 772   * the source block's own 'to' transforms.
 773   *
 774   * @param {Array} blocks The blocks to transform from.
 775   * @param {boolean} isMultiBlock Have multiple blocks been selected?
 776   *
 777   * @return {Array} Block types that the source can be transformed into.
 778   */
 779  
 780  
 781  var getBlockTypesForPossibleToTransforms = function getBlockTypesForPossibleToTransforms(blocks) {
 782    if (Object(lodash__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(blocks)) {
 783      return [];
 784    }
 785  
 786    var sourceBlock = Object(lodash__WEBPACK_IMPORTED_MODULE_3__["first"])(blocks);
 787    var blockType = Object(_registration__WEBPACK_IMPORTED_MODULE_5__["getBlockType"])(sourceBlock.name);
 788    var transformsTo = getBlockTransforms('to', blockType.name); // filter all 'to' transforms to find those that are possible.
 789  
 790    var possibleTransforms = Object(lodash__WEBPACK_IMPORTED_MODULE_3__["filter"])(transformsTo, function (transform) {
 791      return isPossibleTransformForSource(transform, 'to', blocks);
 792    }); // Build a list of block names using the possible 'to' transforms.
 793  
 794    var blockNames = Object(lodash__WEBPACK_IMPORTED_MODULE_3__["flatMap"])(possibleTransforms, function (transformation) {
 795      return transformation.blocks;
 796    }); // Map block names to block types.
 797  
 798    return blockNames.map(function (name) {
 799      return Object(_registration__WEBPACK_IMPORTED_MODULE_5__["getBlockType"])(name);
 800    });
 801  };
 802  /**
 803   * Returns an array of block types that the set of blocks received as argument
 804   * can be transformed into.
 805   *
 806   * @param {Array} blocks Blocks array.
 807   *
 808   * @return {Array} Block types that the blocks argument can be transformed to.
 809   */
 810  
 811  
 812  function getPossibleBlockTransformations(blocks) {
 813    if (Object(lodash__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(blocks)) {
 814      return [];
 815    }
 816  
 817    var sourceBlock = Object(lodash__WEBPACK_IMPORTED_MODULE_3__["first"])(blocks);
 818    var isMultiBlock = blocks.length > 1;
 819  
 820    if (isMultiBlock && !Object(lodash__WEBPACK_IMPORTED_MODULE_3__["every"])(blocks, {
 821      name: sourceBlock.name
 822    })) {
 823      return [];
 824    }
 825  
 826    var blockTypesForFromTransforms = getBlockTypesForPossibleFromTransforms(blocks);
 827    var blockTypesForToTransforms = getBlockTypesForPossibleToTransforms(blocks);
 828    return Object(lodash__WEBPACK_IMPORTED_MODULE_3__["uniq"])(Object(_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__["default"])(blockTypesForFromTransforms).concat(Object(_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__["default"])(blockTypesForToTransforms)));
 829  }
 830  /**
 831   * Given an array of transforms, returns the highest-priority transform where
 832   * the predicate function returns a truthy value. A higher-priority transform
 833   * is one with a lower priority value (i.e. first in priority order). Returns
 834   * null if the transforms set is empty or the predicate function returns a
 835   * falsey value for all entries.
 836   *
 837   * @param {Object[]} transforms Transforms to search.
 838   * @param {Function} predicate  Function returning true on matching transform.
 839   *
 840   * @return {?Object} Highest-priority transform candidate.
 841   */
 842  
 843  function findTransform(transforms, predicate) {
 844    // The hooks library already has built-in mechanisms for managing priority
 845    // queue, so leverage via locally-defined instance.
 846    var hooks = Object(_wordpress_hooks__WEBPACK_IMPORTED_MODULE_4__["createHooks"])();
 847  
 848    var _loop = function _loop(i) {
 849      var candidate = transforms[i];
 850  
 851      if (predicate(candidate)) {
 852        hooks.addFilter('transform', 'transform/' + i.toString(), function (result) {
 853          return result ? result : candidate;
 854        }, candidate.priority);
 855      }
 856    };
 857  
 858    for (var i = 0; i < transforms.length; i++) {
 859      _loop(i);
 860    } // Filter name is arbitrarily chosen but consistent with above aggregation.
 861  
 862  
 863    return hooks.applyFilters('transform', null);
 864  }
 865  /**
 866   * Returns normal block transforms for a given transform direction, optionally
 867   * for a specific block by name, or an empty array if there are no transforms.
 868   * If no block name is provided, returns transforms for all blocks. A normal
 869   * transform object includes `blockName` as a property.
 870   *
 871   * @param {string}  direction Transform direction ("to", "from").
 872   * @param {?string} blockName Optional block name.
 873   *
 874   * @return {Array} Block transforms for direction.
 875   */
 876  
 877  function getBlockTransforms(direction, blockName) {
 878    // When retrieving transforms for all block types, recurse into self.
 879    if (blockName === undefined) {
 880      return Object(lodash__WEBPACK_IMPORTED_MODULE_3__["flatMap"])(Object(_registration__WEBPACK_IMPORTED_MODULE_5__["getBlockTypes"])(), function (_ref) {
 881        var name = _ref.name;
 882        return getBlockTransforms(direction, name);
 883      });
 884    } // Validate that block type exists and has array of direction.
 885  
 886  
 887    var _ref2 = Object(_registration__WEBPACK_IMPORTED_MODULE_5__["getBlockType"])(blockName) || {},
 888        transforms = _ref2.transforms;
 889  
 890    if (!transforms || !Array.isArray(transforms[direction])) {
 891      return [];
 892    } // Map transforms to normal form.
 893  
 894  
 895    return transforms[direction].map(function (transform) {
 896      return Object(_babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_1__["default"])({}, transform, {
 897        blockName: blockName
 898      });
 899    });
 900  }
 901  /**
 902   * Switch one or more blocks into one or more blocks of the new block type.
 903   *
 904   * @param {Array|Object} blocks Blocks array or block object.
 905   * @param {string}       name   Block name.
 906   *
 907   * @return {Array} Array of blocks.
 908   */
 909  
 910  function switchToBlockType(blocks, name) {
 911    var blocksArray = Object(lodash__WEBPACK_IMPORTED_MODULE_3__["castArray"])(blocks);
 912    var isMultiBlock = blocksArray.length > 1;
 913    var firstBlock = blocksArray[0];
 914    var sourceName = firstBlock.name;
 915  
 916    if (isMultiBlock && !Object(lodash__WEBPACK_IMPORTED_MODULE_3__["every"])(blocksArray, function (block) {
 917      return block.name === sourceName;
 918    })) {
 919      return null;
 920    } // Find the right transformation by giving priority to the "to"
 921    // transformation.
 922  
 923  
 924    var transformationsFrom = getBlockTransforms('from', name);
 925    var transformationsTo = getBlockTransforms('to', sourceName);
 926    var transformation = findTransform(transformationsTo, function (t) {
 927      return t.type === 'block' && t.blocks.indexOf(name) !== -1 && (!isMultiBlock || t.isMultiBlock);
 928    }) || findTransform(transformationsFrom, function (t) {
 929      return t.type === 'block' && t.blocks.indexOf(sourceName) !== -1 && (!isMultiBlock || t.isMultiBlock);
 930    }); // Stop if there is no valid transformation.
 931  
 932    if (!transformation) {
 933      return null;
 934    }
 935  
 936    var transformationResults;
 937  
 938    if (transformation.isMultiBlock) {
 939      transformationResults = transformation.transform(blocksArray.map(function (currentBlock) {
 940        return currentBlock.attributes;
 941      }));
 942    } else {
 943      transformationResults = transformation.transform(firstBlock.attributes);
 944    } // Ensure that the transformation function returned an object or an array
 945    // of objects.
 946  
 947  
 948    if (!Object(lodash__WEBPACK_IMPORTED_MODULE_3__["isObjectLike"])(transformationResults)) {
 949      return null;
 950    } // If the transformation function returned a single object, we want to work
 951    // with an array instead.
 952  
 953  
 954    transformationResults = Object(lodash__WEBPACK_IMPORTED_MODULE_3__["castArray"])(transformationResults); // Ensure that every block object returned by the transformation has a
 955    // valid block type.
 956  
 957    if (transformationResults.some(function (result) {
 958      return !Object(_registration__WEBPACK_IMPORTED_MODULE_5__["getBlockType"])(result.name);
 959    })) {
 960      return null;
 961    }
 962  
 963    var firstSwitchedBlock = Object(lodash__WEBPACK_IMPORTED_MODULE_3__["findIndex"])(transformationResults, function (result) {
 964      return result.name === name;
 965    }); // Ensure that at least one block object returned by the transformation has
 966    // the expected "destination" block type.
 967  
 968    if (firstSwitchedBlock < 0) {
 969      return null;
 970    }
 971  
 972    return transformationResults.map(function (result, index) {
 973      var transformedBlock = Object(_babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_1__["default"])({}, result, {
 974        // The first transformed block whose type matches the "destination"
 975        // type gets to keep the existing client ID of the first block.
 976        clientId: index === firstSwitchedBlock ? firstBlock.clientId : result.clientId
 977      });
 978      /**
 979       * Filters an individual transform result from block transformation.
 980       * All of the original blocks are passed, since transformations are
 981       * many-to-many, not one-to-one.
 982       *
 983       * @param {Object}   transformedBlock The transformed block.
 984       * @param {Object[]} blocks           Original blocks transformed.
 985       */
 986  
 987  
 988      return Object(_wordpress_hooks__WEBPACK_IMPORTED_MODULE_4__["applyFilters"])('blocks.switchToBlockType.transformedBlock', transformedBlock, blocks);
 989    });
 990  }
 991  
 992  
 993  /***/ }),
 994  
 995  /***/ "./node_modules/@wordpress/blocks/build-module/api/index.js":
 996  /*!******************************************************************!*\
 997    !*** ./node_modules/@wordpress/blocks/build-module/api/index.js ***!
 998    \******************************************************************/
 999  /*! exports provided: createBlock, cloneBlock, getPossibleBlockTransformations, switchToBlockType, getBlockTransforms, findTransform, parse, getBlockAttributes, parseWithAttributeSchema, rawHandler, getPhrasingContentSchema, serialize, getBlockContent, getBlockDefaultClassName, getBlockMenuDefaultClassName, getSaveElement, getSaveContent, isValidBlock, getCategories, setCategories, registerBlockType, unregisterBlockType, setUnknownTypeHandlerName, getUnknownTypeHandlerName, setFreeformContentHandlerName, getFreeformContentHandlerName, setUnregisteredTypeHandlerName, getUnregisteredTypeHandlerName, setDefaultBlockName, getDefaultBlockName, getBlockType, getBlockTypes, getBlockSupport, hasBlockSupport, isReusableBlock, getChildBlockNames, hasChildBlocks, hasChildBlocksWithInserterSupport, unstable__bootstrapServerSideBlockDefinitions, registerBlockStyle, isUnmodifiedDefaultBlock, normalizeIconObject, isValidIcon, doBlocksMatchTemplate, synchronizeBlocksWithTemplate, children, node */
1000  /***/ (function(module, __webpack_exports__, __webpack_require__) {
1001  
1002  "use strict";
1003  __webpack_require__.r(__webpack_exports__);
1004  /* harmony import */ var _factory__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./factory */ "./node_modules/@wordpress/blocks/build-module/api/factory.js");
1005  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "createBlock", function() { return _factory__WEBPACK_IMPORTED_MODULE_0__["createBlock"]; });
1006  
1007  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "cloneBlock", function() { return _factory__WEBPACK_IMPORTED_MODULE_0__["cloneBlock"]; });
1008  
1009  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getPossibleBlockTransformations", function() { return _factory__WEBPACK_IMPORTED_MODULE_0__["getPossibleBlockTransformations"]; });
1010  
1011  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "switchToBlockType", function() { return _factory__WEBPACK_IMPORTED_MODULE_0__["switchToBlockType"]; });
1012  
1013  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getBlockTransforms", function() { return _factory__WEBPACK_IMPORTED_MODULE_0__["getBlockTransforms"]; });
1014  
1015  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "findTransform", function() { return _factory__WEBPACK_IMPORTED_MODULE_0__["findTransform"]; });
1016  
1017  /* harmony import */ var _parser__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./parser */ "./node_modules/@wordpress/blocks/build-module/api/parser.js");
1018  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "parse", function() { return _parser__WEBPACK_IMPORTED_MODULE_1__["default"]; });
1019  
1020  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getBlockAttributes", function() { return _parser__WEBPACK_IMPORTED_MODULE_1__["getBlockAttributes"]; });
1021  
1022  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "parseWithAttributeSchema", function() { return _parser__WEBPACK_IMPORTED_MODULE_1__["parseWithAttributeSchema"]; });
1023  
1024  /* harmony import */ var _raw_handling__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./raw-handling */ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/index.js");
1025  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "rawHandler", function() { return _raw_handling__WEBPACK_IMPORTED_MODULE_2__["default"]; });
1026  
1027  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getPhrasingContentSchema", function() { return _raw_handling__WEBPACK_IMPORTED_MODULE_2__["getPhrasingContentSchema"]; });
1028  
1029  /* harmony import */ var _serializer__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./serializer */ "./node_modules/@wordpress/blocks/build-module/api/serializer.js");
1030  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "serialize", function() { return _serializer__WEBPACK_IMPORTED_MODULE_3__["default"]; });
1031  
1032  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getBlockContent", function() { return _serializer__WEBPACK_IMPORTED_MODULE_3__["getBlockContent"]; });
1033  
1034  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getBlockDefaultClassName", function() { return _serializer__WEBPACK_IMPORTED_MODULE_3__["getBlockDefaultClassName"]; });
1035  
1036  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getBlockMenuDefaultClassName", function() { return _serializer__WEBPACK_IMPORTED_MODULE_3__["getBlockMenuDefaultClassName"]; });
1037  
1038  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getSaveElement", function() { return _serializer__WEBPACK_IMPORTED_MODULE_3__["getSaveElement"]; });
1039  
1040  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getSaveContent", function() { return _serializer__WEBPACK_IMPORTED_MODULE_3__["getSaveContent"]; });
1041  
1042  /* harmony import */ var _validation__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./validation */ "./node_modules/@wordpress/blocks/build-module/api/validation.js");
1043  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isValidBlock", function() { return _validation__WEBPACK_IMPORTED_MODULE_4__["isValidBlock"]; });
1044  
1045  /* harmony import */ var _categories__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./categories */ "./node_modules/@wordpress/blocks/build-module/api/categories.js");
1046  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getCategories", function() { return _categories__WEBPACK_IMPORTED_MODULE_5__["getCategories"]; });
1047  
1048  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setCategories", function() { return _categories__WEBPACK_IMPORTED_MODULE_5__["setCategories"]; });
1049  
1050  /* harmony import */ var _registration__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./registration */ "./node_modules/@wordpress/blocks/build-module/api/registration.js");
1051  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "registerBlockType", function() { return _registration__WEBPACK_IMPORTED_MODULE_6__["registerBlockType"]; });
1052  
1053  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "unregisterBlockType", function() { return _registration__WEBPACK_IMPORTED_MODULE_6__["unregisterBlockType"]; });
1054  
1055  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setUnknownTypeHandlerName", function() { return _registration__WEBPACK_IMPORTED_MODULE_6__["setUnknownTypeHandlerName"]; });
1056  
1057  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getUnknownTypeHandlerName", function() { return _registration__WEBPACK_IMPORTED_MODULE_6__["getUnknownTypeHandlerName"]; });
1058  
1059  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setFreeformContentHandlerName", function() { return _registration__WEBPACK_IMPORTED_MODULE_6__["setFreeformContentHandlerName"]; });
1060  
1061  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getFreeformContentHandlerName", function() { return _registration__WEBPACK_IMPORTED_MODULE_6__["getFreeformContentHandlerName"]; });
1062  
1063  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setUnregisteredTypeHandlerName", function() { return _registration__WEBPACK_IMPORTED_MODULE_6__["setUnregisteredTypeHandlerName"]; });
1064  
1065  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getUnregisteredTypeHandlerName", function() { return _registration__WEBPACK_IMPORTED_MODULE_6__["getUnregisteredTypeHandlerName"]; });
1066  
1067  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setDefaultBlockName", function() { return _registration__WEBPACK_IMPORTED_MODULE_6__["setDefaultBlockName"]; });
1068  
1069  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getDefaultBlockName", function() { return _registration__WEBPACK_IMPORTED_MODULE_6__["getDefaultBlockName"]; });
1070  
1071  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getBlockType", function() { return _registration__WEBPACK_IMPORTED_MODULE_6__["getBlockType"]; });
1072  
1073  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getBlockTypes", function() { return _registration__WEBPACK_IMPORTED_MODULE_6__["getBlockTypes"]; });
1074  
1075  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getBlockSupport", function() { return _registration__WEBPACK_IMPORTED_MODULE_6__["getBlockSupport"]; });
1076  
1077  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "hasBlockSupport", function() { return _registration__WEBPACK_IMPORTED_MODULE_6__["hasBlockSupport"]; });
1078  
1079  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isReusableBlock", function() { return _registration__WEBPACK_IMPORTED_MODULE_6__["isReusableBlock"]; });
1080  
1081  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getChildBlockNames", function() { return _registration__WEBPACK_IMPORTED_MODULE_6__["getChildBlockNames"]; });
1082  
1083  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "hasChildBlocks", function() { return _registration__WEBPACK_IMPORTED_MODULE_6__["hasChildBlocks"]; });
1084  
1085  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "hasChildBlocksWithInserterSupport", function() { return _registration__WEBPACK_IMPORTED_MODULE_6__["hasChildBlocksWithInserterSupport"]; });
1086  
1087  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "unstable__bootstrapServerSideBlockDefinitions", function() { return _registration__WEBPACK_IMPORTED_MODULE_6__["unstable__bootstrapServerSideBlockDefinitions"]; });
1088  
1089  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "registerBlockStyle", function() { return _registration__WEBPACK_IMPORTED_MODULE_6__["registerBlockStyle"]; });
1090  
1091  /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./utils */ "./node_modules/@wordpress/blocks/build-module/api/utils.js");
1092  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isUnmodifiedDefaultBlock", function() { return _utils__WEBPACK_IMPORTED_MODULE_7__["isUnmodifiedDefaultBlock"]; });
1093  
1094  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "normalizeIconObject", function() { return _utils__WEBPACK_IMPORTED_MODULE_7__["normalizeIconObject"]; });
1095  
1096  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isValidIcon", function() { return _utils__WEBPACK_IMPORTED_MODULE_7__["isValidIcon"]; });
1097  
1098  /* harmony import */ var _templates__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./templates */ "./node_modules/@wordpress/blocks/build-module/api/templates.js");
1099  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "doBlocksMatchTemplate", function() { return _templates__WEBPACK_IMPORTED_MODULE_8__["doBlocksMatchTemplate"]; });
1100  
1101  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "synchronizeBlocksWithTemplate", function() { return _templates__WEBPACK_IMPORTED_MODULE_8__["synchronizeBlocksWithTemplate"]; });
1102  
1103  /* harmony import */ var _children__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./children */ "./node_modules/@wordpress/blocks/build-module/api/children.js");
1104  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "children", function() { return _children__WEBPACK_IMPORTED_MODULE_9__["default"]; });
1105  
1106  /* harmony import */ var _node__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./node */ "./node_modules/@wordpress/blocks/build-module/api/node.js");
1107  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "node", function() { return _node__WEBPACK_IMPORTED_MODULE_10__["default"]; });
1108  
1109  
1110  
1111  
1112  
1113  
1114  
1115  
1116  
1117  
1118  
1119  
1120  
1121  
1122  /***/ }),
1123  
1124  /***/ "./node_modules/@wordpress/blocks/build-module/api/matchers.js":
1125  /*!*********************************************************************!*\
1126    !*** ./node_modules/@wordpress/blocks/build-module/api/matchers.js ***!
1127    \*********************************************************************/
1128  /*! exports provided: attr, prop, text, query, node, children, html */
1129  /***/ (function(module, __webpack_exports__, __webpack_require__) {
1130  
1131  "use strict";
1132  __webpack_require__.r(__webpack_exports__);
1133  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "html", function() { return html; });
1134  /* harmony import */ var hpq__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! hpq */ "./node_modules/hpq/es/index.js");
1135  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "attr", function() { return hpq__WEBPACK_IMPORTED_MODULE_0__["attr"]; });
1136  
1137  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "prop", function() { return hpq__WEBPACK_IMPORTED_MODULE_0__["prop"]; });
1138  
1139  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "text", function() { return hpq__WEBPACK_IMPORTED_MODULE_0__["text"]; });
1140  
1141  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "query", function() { return hpq__WEBPACK_IMPORTED_MODULE_0__["query"]; });
1142  
1143  /* harmony import */ var _node__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./node */ "./node_modules/@wordpress/blocks/build-module/api/node.js");
1144  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "node", function() { return _node__WEBPACK_IMPORTED_MODULE_1__["matcher"]; });
1145  
1146  /* harmony import */ var _children__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./children */ "./node_modules/@wordpress/blocks/build-module/api/children.js");
1147  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "children", function() { return _children__WEBPACK_IMPORTED_MODULE_2__["matcher"]; });
1148  
1149  /**
1150   * External dependencies
1151   */
1152  
1153  /**
1154   * Internal dependencies
1155   */
1156  
1157  
1158  
1159  function html(selector, multilineTag) {
1160    return function (domNode) {
1161      var match = domNode;
1162  
1163      if (selector) {
1164        match = domNode.querySelector(selector);
1165      }
1166  
1167      if (!match) {
1168        return '';
1169      }
1170  
1171      if (multilineTag) {
1172        var value = '';
1173        var length = match.children.length;
1174  
1175        for (var index = 0; index < length; index++) {
1176          var child = match.children[index];
1177  
1178          if (child.nodeName.toLowerCase() !== multilineTag) {
1179            continue;
1180          }
1181  
1182          value += child.outerHTML;
1183        }
1184  
1185        return value;
1186      }
1187  
1188      return match.innerHTML;
1189    };
1190  }
1191  
1192  
1193  /***/ }),
1194  
1195  /***/ "./node_modules/@wordpress/blocks/build-module/api/node.js":
1196  /*!*****************************************************************!*\
1197    !*** ./node_modules/@wordpress/blocks/build-module/api/node.js ***!
1198    \*****************************************************************/
1199  /*! exports provided: getNamedNodeMapAsObject, fromDOM, toHTML, matcher, default */
1200  /***/ (function(module, __webpack_exports__, __webpack_require__) {
1201  
1202  "use strict";
1203  __webpack_require__.r(__webpack_exports__);
1204  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getNamedNodeMapAsObject", function() { return getNamedNodeMapAsObject; });
1205  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fromDOM", function() { return fromDOM; });
1206  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "toHTML", function() { return toHTML; });
1207  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "matcher", function() { return matcher; });
1208  /* harmony import */ var _babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread */ "./node_modules/@babel/runtime/helpers/esm/objectSpread.js");
1209  /* harmony import */ var _children__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./children */ "./node_modules/@wordpress/blocks/build-module/api/children.js");
1210  
1211  
1212  /**
1213   * Internal dependencies
1214   */
1215  
1216  /**
1217   * Browser dependencies
1218   */
1219  
1220  var _window$Node = window.Node,
1221      TEXT_NODE = _window$Node.TEXT_NODE,
1222      ELEMENT_NODE = _window$Node.ELEMENT_NODE;
1223  /**
1224   * A representation of a single node within a block's rich text value. If
1225   * representing a text node, the value is simply a string of the node value.
1226   * As representing an element node, it is an object of:
1227   *
1228   * 1. `type` (string): Tag name.
1229   * 2. `props` (object): Attributes and children array of WPBlockNode.
1230   *
1231   * @typedef {string|Object} WPBlockNode
1232   */
1233  
1234  /**
1235   * Given a single node and a node type (e.g. `'br'`), returns true if the node
1236   * corresponds to that type, false otherwise.
1237   *
1238   * @param {WPBlockNode} node Block node to test
1239   * @param {string} type      Node to type to test against.
1240   *
1241   * @return {boolean} Whether node is of intended type.
1242   */
1243  
1244  function isNodeOfType(node, type) {
1245    return node && node.type === type;
1246  }
1247  /**
1248   * Given an object implementing the NamedNodeMap interface, returns a plain
1249   * object equivalent value of name, value key-value pairs.
1250   *
1251   * @see https://dom.spec.whatwg.org/#interface-namednodemap
1252   *
1253   * @param {NamedNodeMap} nodeMap NamedNodeMap to convert to object.
1254   *
1255   * @return {Object} Object equivalent value of NamedNodeMap.
1256   */
1257  
1258  
1259  function getNamedNodeMapAsObject(nodeMap) {
1260    var result = {};
1261  
1262    for (var i = 0; i < nodeMap.length; i++) {
1263      var _nodeMap$i = nodeMap[i],
1264          name = _nodeMap$i.name,
1265          value = _nodeMap$i.value;
1266      result[name] = value;
1267    }
1268  
1269    return result;
1270  }
1271  /**
1272   * Given a DOM Element or Text node, returns an equivalent block node. Throws
1273   * if passed any node type other than element or text.
1274   *
1275   * @throws {TypeError} If non-element/text node is passed.
1276   *
1277   * @param {Node} domNode DOM node to convert.
1278   *
1279   * @return {WPBlockNode} Block node equivalent to DOM node.
1280   */
1281  
1282  function fromDOM(domNode) {
1283    if (domNode.nodeType === TEXT_NODE) {
1284      return domNode.nodeValue;
1285    }
1286  
1287    if (domNode.nodeType !== ELEMENT_NODE) {
1288      throw new TypeError('A block node can only be created from a node of type text or ' + 'element.');
1289    }
1290  
1291    return {
1292      type: domNode.nodeName.toLowerCase(),
1293      props: Object(_babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_0__["default"])({}, getNamedNodeMapAsObject(domNode.attributes), {
1294        children: _children__WEBPACK_IMPORTED_MODULE_1__["fromDOM"](domNode.childNodes)
1295      })
1296    };
1297  }
1298  /**
1299   * Given a block node, returns its HTML string representation.
1300   *
1301   * @param {WPBlockNode} node Block node to convert to string.
1302   *
1303   * @return {string} String HTML representation of block node.
1304   */
1305  
1306  function toHTML(node) {
1307    return _children__WEBPACK_IMPORTED_MODULE_1__["toHTML"]([node]);
1308  }
1309  /**
1310   * Given a selector, returns an hpq matcher generating a WPBlockNode value
1311   * matching the selector result.
1312   *
1313   * @param {string} selector DOM selector.
1314   *
1315   * @return {Function} hpq matcher.
1316   */
1317  
1318  function matcher(selector) {
1319    return function (domNode) {
1320      var match = domNode;
1321  
1322      if (selector) {
1323        match = domNode.querySelector(selector);
1324      }
1325  
1326      try {
1327        return fromDOM(match);
1328      } catch (error) {
1329        return null;
1330      }
1331    };
1332  }
1333  /* harmony default export */ __webpack_exports__["default"] = ({
1334    isNodeOfType: isNodeOfType,
1335    fromDOM: fromDOM,
1336    toHTML: toHTML,
1337    matcher: matcher
1338  });
1339  
1340  
1341  /***/ }),
1342  
1343  /***/ "./node_modules/@wordpress/blocks/build-module/api/parser.js":
1344  /*!*******************************************************************!*\
1345    !*** ./node_modules/@wordpress/blocks/build-module/api/parser.js ***!
1346    \*******************************************************************/
1347  /*! exports provided: toBooleanAttributeMatcher, isOfType, isOfTypes, isAmbiguousStringSource, asType, matcherFromSource, parseWithAttributeSchema, getBlockAttribute, getBlockAttributes, getMigratedBlock, createBlockWithFallback, parseWithGrammar, default */
1348  /***/ (function(module, __webpack_exports__, __webpack_require__) {
1349  
1350  "use strict";
1351  __webpack_require__.r(__webpack_exports__);
1352  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "toBooleanAttributeMatcher", function() { return toBooleanAttributeMatcher; });
1353  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isOfType", function() { return isOfType; });
1354  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isOfTypes", function() { return isOfTypes; });
1355  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isAmbiguousStringSource", function() { return isAmbiguousStringSource; });
1356  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "asType", function() { return asType; });
1357  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "matcherFromSource", function() { return matcherFromSource; });
1358  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "parseWithAttributeSchema", function() { return parseWithAttributeSchema; });
1359  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getBlockAttribute", function() { return getBlockAttribute; });
1360  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getBlockAttributes", function() { return getBlockAttributes; });
1361  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getMigratedBlock", function() { return getMigratedBlock; });
1362  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createBlockWithFallback", function() { return createBlockWithFallback; });
1363  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "parseWithGrammar", function() { return parseWithGrammar; });
1364  /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "./node_modules/@babel/runtime/helpers/esm/slicedToArray.js");
1365  /* harmony import */ var _babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread */ "./node_modules/@babel/runtime/helpers/esm/objectSpread.js");
1366  /* harmony import */ var hpq__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! hpq */ "./node_modules/hpq/es/index.js");
1367  /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lodash */ "lodash");
1368  /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_3__);
1369  /* harmony import */ var _wordpress_autop__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/autop */ "@wordpress/autop");
1370  /* harmony import */ var _wordpress_autop__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_autop__WEBPACK_IMPORTED_MODULE_4__);
1371  /* harmony import */ var _wordpress_hooks__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @wordpress/hooks */ "@wordpress/hooks");
1372  /* harmony import */ var _wordpress_hooks__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_wordpress_hooks__WEBPACK_IMPORTED_MODULE_5__);
1373  /* harmony import */ var _wordpress_block_serialization_default_parser__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @wordpress/block-serialization-default-parser */ "@wordpress/block-serialization-default-parser");
1374  /* harmony import */ var _wordpress_block_serialization_default_parser__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_wordpress_block_serialization_default_parser__WEBPACK_IMPORTED_MODULE_6__);
1375  /* harmony import */ var _wordpress_deprecated__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @wordpress/deprecated */ "@wordpress/deprecated");
1376  /* harmony import */ var _wordpress_deprecated__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_wordpress_deprecated__WEBPACK_IMPORTED_MODULE_7__);
1377  /* harmony import */ var _registration__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./registration */ "./node_modules/@wordpress/blocks/build-module/api/registration.js");
1378  /* harmony import */ var _factory__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./factory */ "./node_modules/@wordpress/blocks/build-module/api/factory.js");
1379  /* harmony import */ var _validation__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./validation */ "./node_modules/@wordpress/blocks/build-module/api/validation.js");
1380  /* harmony import */ var _serializer__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./serializer */ "./node_modules/@wordpress/blocks/build-module/api/serializer.js");
1381  /* harmony import */ var _matchers__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./matchers */ "./node_modules/@wordpress/blocks/build-module/api/matchers.js");
1382  
1383  
1384  
1385  /**
1386   * External dependencies
1387   */
1388  
1389  
1390  /**
1391   * WordPress dependencies
1392   */
1393  
1394  
1395  
1396  
1397  
1398  /**
1399   * Internal dependencies
1400   */
1401  
1402  
1403  
1404  
1405  
1406  
1407  /**
1408   * Sources which are guaranteed to return a string value.
1409   *
1410   * @type {Set}
1411   */
1412  
1413  var STRING_SOURCES = new Set(['attribute', 'html', 'text', 'tag']);
1414  /**
1415   * Higher-order hpq matcher which enhances an attribute matcher to return true
1416   * or false depending on whether the original matcher returns undefined. This
1417   * is useful for boolean attributes (e.g. disabled) whose attribute values may
1418   * be technically falsey (empty string), though their mere presence should be
1419   * enough to infer as true.
1420   *
1421   * @param {Function} matcher Original hpq matcher.
1422   *
1423   * @return {Function} Enhanced hpq matcher.
1424   */
1425  
1426  var toBooleanAttributeMatcher = function toBooleanAttributeMatcher(matcher) {
1427    return Object(lodash__WEBPACK_IMPORTED_MODULE_3__["flow"])([matcher, // Expected values from `attr( 'disabled' )`:
1428    //
1429    // <input>
1430    // - Value:       `undefined`
1431    // - Transformed: `false`
1432    //
1433    // <input disabled>
1434    // - Value:       `''`
1435    // - Transformed: `true`
1436    //
1437    // <input disabled="disabled">
1438    // - Value:       `'disabled'`
1439    // - Transformed: `true`
1440    function (value) {
1441      return value !== undefined;
1442    }]);
1443  };
1444  /**
1445   * Returns true if value is of the given JSON schema type, or false otherwise.
1446   *
1447   * @see http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.25
1448   *
1449   * @param {*}      value Value to test.
1450   * @param {string} type  Type to test.
1451   *
1452   * @return {boolean} Whether value is of type.
1453   */
1454  
1455  function isOfType(value, type) {
1456    switch (type) {
1457      case 'string':
1458        return typeof value === 'string';
1459  
1460      case 'boolean':
1461        return typeof value === 'boolean';
1462  
1463      case 'object':
1464        return !!value && value.constructor === Object;
1465  
1466      case 'null':
1467        return value === null;
1468  
1469      case 'array':
1470        return Array.isArray(value);
1471  
1472      case 'integer':
1473      case 'number':
1474        return typeof value === 'number';
1475    }
1476  
1477    return true;
1478  }
1479  /**
1480   * Returns true if value is of an array of given JSON schema types, or false
1481   * otherwise.
1482   *
1483   * @see http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.25
1484   *
1485   * @param {*}        value Value to test.
1486   * @param {string[]} types Types to test.
1487   *
1488   * @return {boolean} Whether value is of types.
1489   */
1490  
1491  function isOfTypes(value, types) {
1492    return types.some(function (type) {
1493      return isOfType(value, type);
1494    });
1495  }
1496  /**
1497   * Returns true if the given attribute schema describes a value which may be
1498   * an ambiguous string.
1499   *
1500   * Some sources are ambiguously serialized as strings, for which value casting
1501   * is enabled. This is only possible when a singular type is assigned to the
1502   * attribute schema, since the string ambiguity makes it impossible to know the
1503   * correct type of multiple to which to cast.
1504   *
1505   * @param {Object} attributeSchema Attribute's schema.
1506   *
1507   * @return {boolean} Whether attribute schema defines an ambiguous string
1508   *                   source.
1509   */
1510  
1511  function isAmbiguousStringSource(attributeSchema) {
1512    var source = attributeSchema.source,
1513        type = attributeSchema.type;
1514    var isStringSource = STRING_SOURCES.has(source);
1515    var isSingleType = typeof type === 'string';
1516    return isStringSource && isSingleType;
1517  }
1518  /**
1519   * Returns value coerced to the specified JSON schema type string.
1520   *
1521   * @see http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.25
1522   *
1523   * @param {*}      value Original value.
1524   * @param {string} type  Type to coerce.
1525   *
1526   * @return {*} Coerced value.
1527   */
1528  
1529  function asType(value, type) {
1530    switch (type) {
1531      case 'string':
1532        return String(value);
1533  
1534      case 'boolean':
1535        return Boolean(value);
1536  
1537      case 'object':
1538        return Object(value);
1539  
1540      case 'null':
1541        return null;
1542  
1543      case 'array':
1544        if (Array.isArray(value)) {
1545          return value;
1546        }
1547  
1548        return Array.from(value);
1549  
1550      case 'integer':
1551      case 'number':
1552        return Number(value);
1553    }
1554  
1555    return value;
1556  }
1557  /**
1558   * Returns an hpq matcher given a source object.
1559   *
1560   * @param {Object} sourceConfig Attribute Source object.
1561   *
1562   * @return {Function} A hpq Matcher.
1563   */
1564  
1565  function matcherFromSource(sourceConfig) {
1566    switch (sourceConfig.source) {
1567      case 'attribute':
1568        var matcher = Object(_matchers__WEBPACK_IMPORTED_MODULE_12__["attr"])(sourceConfig.selector, sourceConfig.attribute);
1569  
1570        if (sourceConfig.type === 'boolean') {
1571          matcher = toBooleanAttributeMatcher(matcher);
1572        }
1573  
1574        return matcher;
1575  
1576      case 'html':
1577        return Object(_matchers__WEBPACK_IMPORTED_MODULE_12__["html"])(sourceConfig.selector, sourceConfig.multiline);
1578  
1579      case 'text':
1580        return Object(_matchers__WEBPACK_IMPORTED_MODULE_12__["text"])(sourceConfig.selector);
1581  
1582      case 'children':
1583        return Object(_matchers__WEBPACK_IMPORTED_MODULE_12__["children"])(sourceConfig.selector);
1584  
1585      case 'node':
1586        return Object(_matchers__WEBPACK_IMPORTED_MODULE_12__["node"])(sourceConfig.selector);
1587  
1588      case 'query':
1589        var subMatchers = Object(lodash__WEBPACK_IMPORTED_MODULE_3__["mapValues"])(sourceConfig.query, matcherFromSource);
1590        return Object(_matchers__WEBPACK_IMPORTED_MODULE_12__["query"])(sourceConfig.selector, subMatchers);
1591  
1592      case 'tag':
1593        return Object(lodash__WEBPACK_IMPORTED_MODULE_3__["flow"])([Object(_matchers__WEBPACK_IMPORTED_MODULE_12__["prop"])(sourceConfig.selector, 'nodeName'), function (value) {
1594          return value.toLowerCase();
1595        }]);
1596  
1597      default:
1598        // eslint-disable-next-line no-console
1599        console.error("Unknown source type \"".concat(sourceConfig.source, "\""));
1600    }
1601  }
1602  /**
1603   * Given a block's raw content and an attribute's schema returns the attribute's
1604   * value depending on its source.
1605   *
1606   * @param {string} innerHTML         Block's raw content.
1607   * @param {Object} attributeSchema   Attribute's schema.
1608   *
1609   * @return {*} Attribute value.
1610   */
1611  
1612  function parseWithAttributeSchema(innerHTML, attributeSchema) {
1613    return Object(hpq__WEBPACK_IMPORTED_MODULE_2__["parse"])(innerHTML, matcherFromSource(attributeSchema));
1614  }
1615  /**
1616   * Given an attribute key, an attribute's schema, a block's raw content and the
1617   * commentAttributes returns the attribute value depending on its source
1618   * definition of the given attribute key.
1619   *
1620   * @param {string} attributeKey      Attribute key.
1621   * @param {Object} attributeSchema   Attribute's schema.
1622   * @param {string} innerHTML         Block's raw content.
1623   * @param {Object} commentAttributes Block's comment attributes.
1624   *
1625   * @return {*} Attribute value.
1626   */
1627  
1628  function getBlockAttribute(attributeKey, attributeSchema, innerHTML, commentAttributes) {
1629    var type = attributeSchema.type;
1630    var value;
1631  
1632    switch (attributeSchema.source) {
1633      // undefined source means that it's an attribute serialized to the block's "comment"
1634      case undefined:
1635        value = commentAttributes ? commentAttributes[attributeKey] : undefined;
1636        break;
1637  
1638      case 'attribute':
1639      case 'property':
1640      case 'html':
1641      case 'text':
1642      case 'children':
1643      case 'node':
1644      case 'query':
1645      case 'tag':
1646        value = parseWithAttributeSchema(innerHTML, attributeSchema);
1647        break;
1648    }
1649  
1650    if (value !== undefined) {
1651      if (isAmbiguousStringSource(attributeSchema)) {
1652        if (!isOfTypes(value, Object(lodash__WEBPACK_IMPORTED_MODULE_3__["castArray"])(type))) {
1653          _wordpress_deprecated__WEBPACK_IMPORTED_MODULE_7___default()('Attribute type coercion', {
1654            plugin: 'Gutenberg',
1655            version: '4.2',
1656            hint: 'Omit the source to preserve type via serialized ' + 'comment demarcation.'
1657          });
1658          value = asType(value, type);
1659        }
1660      } else if (type !== undefined && !isOfTypes(value, Object(lodash__WEBPACK_IMPORTED_MODULE_3__["castArray"])(type))) {
1661        // Reject the value if it is not valid of type. Reverting to the
1662        // undefined value ensures the default is restored, if applicable.
1663        value = undefined;
1664      }
1665    }
1666  
1667    if (value === undefined) {
1668      return attributeSchema.default;
1669    }
1670  
1671    return value;
1672  }
1673  /**
1674   * Returns the block attributes of a registered block node given its type.
1675   *
1676   * @param {?Object} blockType  Block type.
1677   * @param {string}  innerHTML  Raw block content.
1678   * @param {?Object} attributes Known block attributes (from delimiters).
1679   *
1680   * @return {Object} All block attributes.
1681   */
1682  
1683  function getBlockAttributes(blockType, innerHTML, attributes) {
1684    var blockAttributes = Object(lodash__WEBPACK_IMPORTED_MODULE_3__["mapValues"])(blockType.attributes, function (attributeSchema, attributeKey) {
1685      return getBlockAttribute(attributeKey, attributeSchema, innerHTML, attributes);
1686    });
1687    return Object(_wordpress_hooks__WEBPACK_IMPORTED_MODULE_5__["applyFilters"])('blocks.getBlockAttributes', blockAttributes, blockType, innerHTML, attributes);
1688  }
1689  /**
1690   * Given a block object, returns a new copy of the block with any applicable
1691   * deprecated migrations applied, or the original block if it was both valid
1692   * and no eligible migrations exist.
1693   *
1694   * @param {WPBlock} block Original block object.
1695   *
1696   * @return {WPBlock} Migrated block object.
1697   */
1698  
1699  function getMigratedBlock(block) {
1700    var blockType = Object(_registration__WEBPACK_IMPORTED_MODULE_8__["getBlockType"])(block.name);
1701    var deprecatedDefinitions = blockType.deprecated;
1702  
1703    if (!deprecatedDefinitions || !deprecatedDefinitions.length) {
1704      return block;
1705    }
1706  
1707    var _block = block,
1708        originalContent = _block.originalContent,
1709        attributes = _block.attributes,
1710        innerBlocks = _block.innerBlocks;
1711  
1712    for (var i = 0; i < deprecatedDefinitions.length; i++) {
1713      // A block can opt into a migration even if the block is valid by
1714      // defining isEligible on its deprecation. If the block is both valid
1715      // and does not opt to migrate, skip.
1716      var _deprecatedDefinition = deprecatedDefinitions[i].isEligible,
1717          isEligible = _deprecatedDefinition === void 0 ? lodash__WEBPACK_IMPORTED_MODULE_3__["stubFalse"] : _deprecatedDefinition;
1718  
1719      if (block.isValid && !isEligible(attributes, innerBlocks)) {
1720        continue;
1721      } // Block type properties which could impact either serialization or
1722      // parsing are not considered in the deprecated block type by default,
1723      // and must be explicitly provided.
1724  
1725  
1726      var deprecatedBlockType = Object.assign(Object(lodash__WEBPACK_IMPORTED_MODULE_3__["omit"])(blockType, ['attributes', 'save', 'supports']), deprecatedDefinitions[i]);
1727      var migratedAttributes = getBlockAttributes(deprecatedBlockType, originalContent, attributes); // Ignore the deprecation if it produces a block which is not valid.
1728  
1729      var isValid = Object(_validation__WEBPACK_IMPORTED_MODULE_10__["isValidBlock"])(originalContent, deprecatedBlockType, migratedAttributes);
1730  
1731      if (!isValid) {
1732        continue;
1733      }
1734  
1735      block = Object(_babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_1__["default"])({}, block, {
1736        isValid: true
1737      });
1738      var migratedInnerBlocks = innerBlocks; // A block may provide custom behavior to assign new attributes and/or
1739      // inner blocks.
1740  
1741      var migrate = deprecatedBlockType.migrate;
1742  
1743      if (migrate) {
1744        var _castArray = Object(lodash__WEBPACK_IMPORTED_MODULE_3__["castArray"])(migrate(migratedAttributes, innerBlocks));
1745  
1746        var _castArray2 = Object(_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__["default"])(_castArray, 2);
1747  
1748        var _castArray2$ = _castArray2[0];
1749        migratedAttributes = _castArray2$ === void 0 ? attributes : _castArray2$;
1750        var _castArray2$2 = _castArray2[1];
1751        migratedInnerBlocks = _castArray2$2 === void 0 ? innerBlocks : _castArray2$2;
1752      }
1753  
1754      block.attributes = migratedAttributes;
1755      block.innerBlocks = migratedInnerBlocks;
1756    }
1757  
1758    return block;
1759  }
1760  /**
1761   * Creates a block with fallback to the unknown type handler.
1762   *
1763   * @param {Object} blockNode Parsed block node.
1764   *
1765   * @return {?Object} An initialized block object (if possible).
1766   */
1767  
1768  function createBlockWithFallback(blockNode) {
1769    var originalName = blockNode.blockName;
1770    var attributes = blockNode.attrs,
1771        _blockNode$innerBlock = blockNode.innerBlocks,
1772        innerBlocks = _blockNode$innerBlock === void 0 ? [] : _blockNode$innerBlock,
1773        innerHTML = blockNode.innerHTML;
1774    var freeformContentFallbackBlock = Object(_registration__WEBPACK_IMPORTED_MODULE_8__["getFreeformContentHandlerName"])();
1775    var unregisteredFallbackBlock = Object(_registration__WEBPACK_IMPORTED_MODULE_8__["getUnregisteredTypeHandlerName"])() || freeformContentFallbackBlock;
1776    attributes = attributes || {}; // Trim content to avoid creation of intermediary freeform segments.
1777  
1778    var originalUndelimitedContent = innerHTML = innerHTML.trim(); // Use type from block content if available. Otherwise, default to the
1779    // freeform content fallback.
1780  
1781    var name = originalName || freeformContentFallbackBlock; // Convert 'core/text' blocks in existing content to 'core/paragraph'.
1782  
1783    if ('core/text' === name || 'core/cover-text' === name) {
1784      name = 'core/paragraph';
1785    } // Fallback content may be upgraded from classic editor expecting implicit
1786    // automatic paragraphs, so preserve them. Assumes wpautop is idempotent,
1787    // meaning there are no negative consequences to repeated autop calls.
1788  
1789  
1790    if (name === freeformContentFallbackBlock) {
1791      innerHTML = Object(_wordpress_autop__WEBPACK_IMPORTED_MODULE_4__["autop"])(innerHTML).trim();
1792    } // Try finding the type for known block name, else fall back again.
1793  
1794  
1795    var blockType = Object(_registration__WEBPACK_IMPORTED_MODULE_8__["getBlockType"])(name);
1796  
1797    if (!blockType) {
1798      // If detected as a block which is not registered, preserve comment
1799      // delimiters in content of unregistered type handler.
1800      if (name) {
1801        innerHTML = Object(_serializer__WEBPACK_IMPORTED_MODULE_11__["getCommentDelimitedContent"])(name, attributes, innerHTML);
1802      }
1803  
1804      name = unregisteredFallbackBlock;
1805      attributes = {
1806        originalName: originalName,
1807        originalUndelimitedContent: originalUndelimitedContent
1808      };
1809      blockType = Object(_registration__WEBPACK_IMPORTED_MODULE_8__["getBlockType"])(name);
1810    } // Coerce inner blocks from parsed form to canonical form.
1811  
1812  
1813    innerBlocks = innerBlocks.map(createBlockWithFallback);
1814    var isFallbackBlock = name === freeformContentFallbackBlock || name === unregisteredFallbackBlock; // Include in set only if type was determined.
1815  
1816    if (!blockType || !innerHTML && isFallbackBlock) {
1817      return;
1818    }
1819  
1820    var block = Object(_factory__WEBPACK_IMPORTED_MODULE_9__["createBlock"])(name, getBlockAttributes(blockType, innerHTML, attributes), innerBlocks); // Block validation assumes an idempotent operation from source block to serialized block
1821    // provided there are no changes in attributes. The validation procedure thus compares the
1822    // provided source value with the serialized output before there are any modifications to
1823    // the block. When both match, the block is marked as valid.
1824  
1825    if (!isFallbackBlock) {
1826      block.isValid = Object(_validation__WEBPACK_IMPORTED_MODULE_10__["isValidBlock"])(innerHTML, blockType, block.attributes);
1827    } // Preserve original content for future use in case the block is parsed as
1828    // invalid, or future serialization attempt results in an error.
1829  
1830  
1831    block.originalContent = innerHTML;
1832    block = getMigratedBlock(block);
1833    return block;
1834  }
1835  /**
1836   * Creates a parse implementation for the post content which returns a list of blocks.
1837   *
1838   * @param {Function} parseImplementation Parse implementation.
1839   *
1840   * @return {Function} An implementation which parses the post content.
1841   */
1842  
1843  var createParse = function createParse(parseImplementation) {
1844    return function (content) {
1845      return parseImplementation(content).reduce(function (memo, blockNode) {
1846        var block = createBlockWithFallback(blockNode);
1847  
1848        if (block) {
1849          memo.push(block);
1850        }
1851  
1852        return memo;
1853      }, []);
1854    };
1855  };
1856  /**
1857   * Parses the post content with a PegJS grammar and returns a list of blocks.
1858   *
1859   * @param {string} content The post content.
1860   *
1861   * @return {Array} Block list.
1862   */
1863  
1864  
1865  var parseWithGrammar = createParse(_wordpress_block_serialization_default_parser__WEBPACK_IMPORTED_MODULE_6__["parse"]);
1866  /* harmony default export */ __webpack_exports__["default"] = (parseWithGrammar);
1867  
1868  
1869  /***/ }),
1870  
1871  /***/ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/blockquote-normaliser.js":
1872  /*!***********************************************************************************************!*\
1873    !*** ./node_modules/@wordpress/blocks/build-module/api/raw-handling/blockquote-normaliser.js ***!
1874    \***********************************************************************************************/
1875  /*! exports provided: default */
1876  /***/ (function(module, __webpack_exports__, __webpack_require__) {
1877  
1878  "use strict";
1879  __webpack_require__.r(__webpack_exports__);
1880  /* harmony import */ var _normalise_blocks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./normalise-blocks */ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/normalise-blocks.js");
1881  /**
1882   * Internal dependencies
1883   */
1884  
1885  /* harmony default export */ __webpack_exports__["default"] = (function (node) {
1886    if (node.nodeName !== 'BLOCKQUOTE') {
1887      return;
1888    }
1889  
1890    node.innerHTML = Object(_normalise_blocks__WEBPACK_IMPORTED_MODULE_0__["default"])(node.innerHTML);
1891  });
1892  
1893  
1894  /***/ }),
1895  
1896  /***/ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/figure-content-reducer.js":
1897  /*!************************************************************************************************!*\
1898    !*** ./node_modules/@wordpress/blocks/build-module/api/raw-handling/figure-content-reducer.js ***!
1899    \************************************************************************************************/
1900  /*! exports provided: default */
1901  /***/ (function(module, __webpack_exports__, __webpack_require__) {
1902  
1903  "use strict";
1904  __webpack_require__.r(__webpack_exports__);
1905  /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash */ "lodash");
1906  /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_0__);
1907  /* harmony import */ var _phrasing_content__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./phrasing-content */ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/phrasing-content.js");
1908  /**
1909   * External dependencies
1910   */
1911  
1912  /**
1913   * Internal dependencies
1914   */
1915  
1916  
1917  /**
1918   * Whether or not the given node is figure content.
1919   *
1920   * @param {Node}   node   The node to check.
1921   * @param {Object} schema The schema to use.
1922   *
1923   * @return {boolean} True if figure content, false if not.
1924   */
1925  
1926  function isFigureContent(node, schema) {
1927    var tag = node.nodeName.toLowerCase(); // We are looking for tags that can be a child of the figure tag, excluding
1928    // `figcaption` and any phrasing content.
1929  
1930    if (tag === 'figcaption' || Object(_phrasing_content__WEBPACK_IMPORTED_MODULE_1__["isPhrasingContent"])(node)) {
1931      return false;
1932    }
1933  
1934    return Object(lodash__WEBPACK_IMPORTED_MODULE_0__["has"])(schema, ['figure', 'children', tag]);
1935  }
1936  /**
1937   * Whether or not the given node can have an anchor.
1938   *
1939   * @param {Node}   node   The node to check.
1940   * @param {Object} schema The schema to use.
1941   *
1942   * @return {boolean} True if it can, false if not.
1943   */
1944  
1945  
1946  function canHaveAnchor(node, schema) {
1947    var tag = node.nodeName.toLowerCase();
1948    return Object(lodash__WEBPACK_IMPORTED_MODULE_0__["has"])(schema, ['figure', 'children', 'a', 'children', tag]);
1949  }
1950  /**
1951   * This filter takes figure content out of paragraphs, wraps it in a figure
1952   * element, and moves any anchors with it if needed.
1953   *
1954   * @param {Node}     node   The node to filter.
1955   * @param {Document} doc    The document of the node.
1956   * @param {Object}   schema The schema to use.
1957   *
1958   * @return {void}
1959   */
1960  
1961  
1962  /* harmony default export */ __webpack_exports__["default"] = (function (node, doc, schema) {
1963    if (!isFigureContent(node, schema)) {
1964      return;
1965    }
1966  
1967    var nodeToInsert = node;
1968    var parentNode = node.parentNode; // If the figure content can have an anchor and its parent is an anchor with
1969    // only the figure content, take the anchor out instead of just the content.
1970  
1971    if (canHaveAnchor(node, schema) && parentNode.nodeName === 'A' && parentNode.childNodes.length === 1) {
1972      nodeToInsert = node.parentNode;
1973    }
1974  
1975    var wrapper = nodeToInsert;
1976  
1977    while (wrapper && wrapper.nodeName !== 'P') {
1978      wrapper = wrapper.parentElement;
1979    }
1980  
1981    var figure = doc.createElement('figure');
1982  
1983    if (wrapper) {
1984      wrapper.parentNode.insertBefore(figure, wrapper);
1985    } else {
1986      nodeToInsert.parentNode.insertBefore(figure, nodeToInsert);
1987    }
1988  
1989    figure.appendChild(nodeToInsert);
1990  });
1991  
1992  
1993  /***/ }),
1994  
1995  /***/ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/head-remover.js":
1996  /*!**************************************************************************************!*\
1997    !*** ./node_modules/@wordpress/blocks/build-module/api/raw-handling/head-remover.js ***!
1998    \**************************************************************************************/
1999  /*! exports provided: default */
2000  /***/ (function(module, __webpack_exports__, __webpack_require__) {
2001  
2002  "use strict";
2003  __webpack_require__.r(__webpack_exports__);
2004  /* harmony default export */ __webpack_exports__["default"] = (function (node) {
2005    if (node.nodeName !== 'SCRIPT' && node.nodeName !== 'NOSCRIPT' && node.nodeName !== 'TEMPLATE' && node.nodeName !== 'STYLE') {
2006      return;
2007    }
2008  
2009    node.parentNode.removeChild(node);
2010  });
2011  
2012  
2013  /***/ }),
2014  
2015  /***/ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/iframe-remover.js":
2016  /*!****************************************************************************************!*\
2017    !*** ./node_modules/@wordpress/blocks/build-module/api/raw-handling/iframe-remover.js ***!
2018    \****************************************************************************************/
2019  /*! exports provided: default */
2020  /***/ (function(module, __webpack_exports__, __webpack_require__) {
2021  
2022  "use strict";
2023  __webpack_require__.r(__webpack_exports__);
2024  /* harmony import */ var _wordpress_dom__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/dom */ "@wordpress/dom");
2025  /* harmony import */ var _wordpress_dom__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_dom__WEBPACK_IMPORTED_MODULE_0__);
2026  /**
2027   * WordPress dependencies
2028   */
2029  
2030  /**
2031   * Removes iframes.
2032   *
2033   * @param {Node} node The node to check.
2034   *
2035   * @return {void}
2036   */
2037  
2038  /* harmony default export */ __webpack_exports__["default"] = (function (node) {
2039    if (node.nodeName === 'IFRAME') {
2040      Object(_wordpress_dom__WEBPACK_IMPORTED_MODULE_0__["remove"])(node);
2041    }
2042  });
2043  
2044  
2045  /***/ }),
2046  
2047  /***/ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/image-corrector.js":
2048  /*!*****************************************************************************************!*\
2049    !*** ./node_modules/@wordpress/blocks/build-module/api/raw-handling/image-corrector.js ***!
2050    \*****************************************************************************************/
2051  /*! exports provided: default */
2052  /***/ (function(module, __webpack_exports__, __webpack_require__) {
2053  
2054  "use strict";
2055  __webpack_require__.r(__webpack_exports__);
2056  /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "./node_modules/@babel/runtime/helpers/esm/slicedToArray.js");
2057  /* harmony import */ var _wordpress_blob__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/blob */ "@wordpress/blob");
2058  /* harmony import */ var _wordpress_blob__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_blob__WEBPACK_IMPORTED_MODULE_1__);
2059  
2060  
2061  /**
2062   * WordPress dependencies
2063   */
2064  
2065  /**
2066   * Browser dependencies
2067   */
2068  
2069  var _window = window,
2070      atob = _window.atob,
2071      File = _window.File;
2072  /* harmony default export */ __webpack_exports__["default"] = (function (node) {
2073    if (node.nodeName !== 'IMG') {
2074      return;
2075    }
2076  
2077    if (node.src.indexOf('file:') === 0) {
2078      node.src = '';
2079    } // This piece cannot be tested outside a browser env.
2080  
2081  
2082    if (node.src.indexOf('data:') === 0) {
2083      var _node$src$split = node.src.split(','),
2084          _node$src$split2 = Object(_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__["default"])(_node$src$split, 2),
2085          properties = _node$src$split2[0],
2086          data = _node$src$split2[1];
2087  
2088      var _properties$slice$spl = properties.slice(5).split(';'),
2089          _properties$slice$spl2 = Object(_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__["default"])(_properties$slice$spl, 1),
2090          type = _properties$slice$spl2[0];
2091  
2092      if (!data || !type) {
2093        node.src = '';
2094        return;
2095      }
2096  
2097      var decoded; // Can throw DOMException!
2098  
2099      try {
2100        decoded = atob(data);
2101      } catch (e) {
2102        node.src = '';
2103        return;
2104      }
2105  
2106      var uint8Array = new Uint8Array(decoded.length);
2107  
2108      for (var i = 0; i < uint8Array.length; i++) {
2109        uint8Array[i] = decoded.charCodeAt(i);
2110      }
2111  
2112      var name = type.replace('/', '.');
2113      var file = new File([uint8Array], name, {
2114        type: type
2115      });
2116      node.src = Object(_wordpress_blob__WEBPACK_IMPORTED_MODULE_1__["createBlobURL"])(file);
2117    } // Remove trackers and hardly visible images.
2118  
2119  
2120    if (node.height === 1 || node.width === 1) {
2121      node.parentNode.removeChild(node);
2122    }
2123  });
2124  
2125  
2126  /***/ }),
2127  
2128  /***/ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/index.js":
2129  /*!*******************************************************************************!*\
2130    !*** ./node_modules/@wordpress/blocks/build-module/api/raw-handling/index.js ***!
2131    \*******************************************************************************/
2132  /*! exports provided: getPhrasingContentSchema, default */
2133  /***/ (function(module, __webpack_exports__, __webpack_require__) {
2134  
2135  "use strict";
2136  __webpack_require__.r(__webpack_exports__);
2137  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return rawHandler; });
2138  /* harmony import */ var _babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread */ "./node_modules/@babel/runtime/helpers/esm/objectSpread.js");
2139  /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash */ "lodash");
2140  /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_1__);
2141  /* harmony import */ var _factory__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../factory */ "./node_modules/@wordpress/blocks/build-module/api/factory.js");
2142  /* harmony import */ var _registration__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../registration */ "./node_modules/@wordpress/blocks/build-module/api/registration.js");
2143  /* harmony import */ var _parser__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../parser */ "./node_modules/@wordpress/blocks/build-module/api/parser.js");
2144  /* harmony import */ var _normalise_blocks__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./normalise-blocks */ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/normalise-blocks.js");
2145  /* harmony import */ var _special_comment_converter__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./special-comment-converter */ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/special-comment-converter.js");
2146  /* harmony import */ var _is_inline_content__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./is-inline-content */ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/is-inline-content.js");
2147  /* harmony import */ var _phrasing_content_reducer__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./phrasing-content-reducer */ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/phrasing-content-reducer.js");
2148  /* harmony import */ var _head_remover__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./head-remover */ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/head-remover.js");
2149  /* harmony import */ var _ms_list_converter__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./ms-list-converter */ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/ms-list-converter.js");
2150  /* harmony import */ var _list_reducer__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./list-reducer */ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/list-reducer.js");
2151  /* harmony import */ var _image_corrector__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./image-corrector */ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/image-corrector.js");
2152  /* harmony import */ var _blockquote_normaliser__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./blockquote-normaliser */ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/blockquote-normaliser.js");
2153  /* harmony import */ var _figure_content_reducer__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./figure-content-reducer */ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/figure-content-reducer.js");
2154  /* harmony import */ var _shortcode_converter__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./shortcode-converter */ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/shortcode-converter.js");
2155  /* harmony import */ var _markdown_converter__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./markdown-converter */ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/markdown-converter.js");
2156  /* harmony import */ var _iframe_remover__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./iframe-remover */ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/iframe-remover.js");
2157  /* harmony import */ var _phrasing_content__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./phrasing-content */ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/phrasing-content.js");
2158  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getPhrasingContentSchema", function() { return _phrasing_content__WEBPACK_IMPORTED_MODULE_18__["getPhrasingContentSchema"]; });
2159  
2160  /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./utils */ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/utils.js");
2161  
2162  
2163  /**
2164   * External dependencies
2165   */
2166  
2167  /**
2168   * Internal dependencies
2169   */
2170  
2171  
2172  
2173  
2174  
2175  
2176  
2177  
2178  
2179  
2180  
2181  
2182  
2183  
2184  
2185  
2186  
2187  
2188  
2189  /**
2190   * Browser dependencies
2191   */
2192  
2193  var _window = window,
2194      console = _window.console;
2195  
2196  /**
2197   * Filters HTML to only contain phrasing content.
2198   *
2199   * @param {string} HTML The HTML to filter.
2200   *
2201   * @return {string} HTML only containing phrasing content.
2202   */
2203  
2204  function filterInlineHTML(HTML) {
2205    HTML = Object(_utils__WEBPACK_IMPORTED_MODULE_19__["deepFilterHTML"])(HTML, [_phrasing_content_reducer__WEBPACK_IMPORTED_MODULE_8__["default"]]);
2206    HTML = Object(_utils__WEBPACK_IMPORTED_MODULE_19__["removeInvalidHTML"])(HTML, Object(_phrasing_content__WEBPACK_IMPORTED_MODULE_18__["getPhrasingContentSchema"])(), {
2207      inline: true
2208    }); // Allows us to ask for this information when we get a report.
2209  
2210    console.log('Processed inline HTML:\n\n', HTML);
2211    return HTML;
2212  }
2213  
2214  function getRawTransformations() {
2215    return Object(lodash__WEBPACK_IMPORTED_MODULE_1__["filter"])(Object(_factory__WEBPACK_IMPORTED_MODULE_2__["getBlockTransforms"])('from'), {
2216      type: 'raw'
2217    }).map(function (transform) {
2218      return transform.isMatch ? transform : Object(_babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_0__["default"])({}, transform, {
2219        isMatch: function isMatch(node) {
2220          return transform.selector && node.matches(transform.selector);
2221        }
2222      });
2223    });
2224  }
2225  /**
2226   * Converts an HTML string to known blocks. Strips everything else.
2227   *
2228   * @param {string}  [options.HTML]                     The HTML to convert.
2229   * @param {string}  [options.plainText]                Plain text version.
2230   * @param {string}  [options.mode]                     Handle content as blocks or inline content.
2231   *                                                     * 'AUTO': Decide based on the content passed.
2232   *                                                     * 'INLINE': Always handle as inline content, and return string.
2233   *                                                     * 'BLOCKS': Always handle as blocks, and return array of blocks.
2234   * @param {Array}   [options.tagName]                  The tag into which content will be inserted.
2235   * @param {boolean} [options.canUserUseUnfilteredHTML] Whether or not the user can use unfiltered HTML.
2236   *
2237   * @return {Array|string} A list of blocks or a string, depending on `handlerMode`.
2238   */
2239  
2240  
2241  function rawHandler(_ref) {
2242    var _ref$HTML = _ref.HTML,
2243        HTML = _ref$HTML === void 0 ? '' : _ref$HTML,
2244        _ref$plainText = _ref.plainText,
2245        plainText = _ref$plainText === void 0 ? '' : _ref$plainText,
2246        _ref$mode = _ref.mode,
2247        mode = _ref$mode === void 0 ? 'AUTO' : _ref$mode,
2248        tagName = _ref.tagName,
2249        _ref$canUserUseUnfilt = _ref.canUserUseUnfilteredHTML,
2250        canUserUseUnfilteredHTML = _ref$canUserUseUnfilt === void 0 ? false : _ref$canUserUseUnfilt;
2251    // First of all, strip any meta tags.
2252    HTML = HTML.replace(/<meta[^>]+>/, ''); // If we detect block delimiters, parse entirely as blocks.
2253  
2254    if (mode !== 'INLINE' && HTML.indexOf('<!-- wp:') !== -1) {
2255      return Object(_parser__WEBPACK_IMPORTED_MODULE_4__["parseWithGrammar"])(HTML);
2256    } // Normalize unicode to use composed characters.
2257    // This is unsupported in IE 11 but it's a nice-to-have feature, not mandatory.
2258    // Not normalizing the content will only affect older browsers and won't
2259    // entirely break the app.
2260    // See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize
2261    // See: https://core.trac.wordpress.org/ticket/30130
2262    // See: https://github.com/WordPress/gutenberg/pull/6983#pullrequestreview-125151075
2263  
2264  
2265    if (String.prototype.normalize) {
2266      HTML = HTML.normalize();
2267    } // Parse Markdown (and encoded HTML) if:
2268    // * There is a plain text version.
2269    // * There is no HTML version, or it has no formatting.
2270  
2271  
2272    if (plainText && (!HTML || Object(_utils__WEBPACK_IMPORTED_MODULE_19__["isPlain"])(HTML))) {
2273      HTML = Object(_markdown_converter__WEBPACK_IMPORTED_MODULE_16__["default"])(plainText); // Switch to inline mode if:
2274      // * The current mode is AUTO.
2275      // * The original plain text had no line breaks.
2276      // * The original plain text was not an HTML paragraph.
2277      // * The converted text is just a paragraph.
2278  
2279      if (mode === 'AUTO' && plainText.indexOf('\n') === -1 && plainText.indexOf('<p>') !== 0 && HTML.indexOf('<p>') === 0) {
2280        mode = 'INLINE';
2281      }
2282    }
2283  
2284    if (mode === 'INLINE') {
2285      return filterInlineHTML(HTML);
2286    } // An array of HTML strings and block objects. The blocks replace matched
2287    // shortcodes.
2288  
2289  
2290    var pieces = Object(_shortcode_converter__WEBPACK_IMPORTED_MODULE_15__["default"])(HTML); // The call to shortcodeConverter will always return more than one element
2291    // if shortcodes are matched. The reason is when shortcodes are matched
2292    // empty HTML strings are included.
2293  
2294    var hasShortcodes = pieces.length > 1;
2295  
2296    if (mode === 'AUTO' && !hasShortcodes && Object(_is_inline_content__WEBPACK_IMPORTED_MODULE_7__["default"])(HTML, tagName)) {
2297      return filterInlineHTML(HTML);
2298    }
2299  
2300    var rawTransformations = getRawTransformations();
2301    var phrasingContentSchema = Object(_phrasing_content__WEBPACK_IMPORTED_MODULE_18__["getPhrasingContentSchema"])();
2302    var blockContentSchema = Object(_utils__WEBPACK_IMPORTED_MODULE_19__["getBlockContentSchema"])(rawTransformations);
2303    return Object(lodash__WEBPACK_IMPORTED_MODULE_1__["compact"])(Object(lodash__WEBPACK_IMPORTED_MODULE_1__["flatMap"])(pieces, function (piece) {
2304      // Already a block from shortcode.
2305      if (typeof piece !== 'string') {
2306        return piece;
2307      }
2308  
2309      var filters = [_ms_list_converter__WEBPACK_IMPORTED_MODULE_10__["default"], _head_remover__WEBPACK_IMPORTED_MODULE_9__["default"], _list_reducer__WEBPACK_IMPORTED_MODULE_11__["default"], _image_corrector__WEBPACK_IMPORTED_MODULE_12__["default"], _phrasing_content_reducer__WEBPACK_IMPORTED_MODULE_8__["default"], _special_comment_converter__WEBPACK_IMPORTED_MODULE_6__["default"], _figure_content_reducer__WEBPACK_IMPORTED_MODULE_14__["default"], _blockquote_normaliser__WEBPACK_IMPORTED_MODULE_13__["default"]];
2310  
2311      if (!canUserUseUnfilteredHTML) {
2312        // Should run before `figureContentReducer`.
2313        filters.unshift(_iframe_remover__WEBPACK_IMPORTED_MODULE_17__["default"]);
2314      }
2315  
2316      var schema = Object(_babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_0__["default"])({}, blockContentSchema, phrasingContentSchema);
2317  
2318      piece = Object(_utils__WEBPACK_IMPORTED_MODULE_19__["deepFilterHTML"])(piece, filters, blockContentSchema);
2319      piece = Object(_utils__WEBPACK_IMPORTED_MODULE_19__["removeInvalidHTML"])(piece, schema);
2320      piece = Object(_normalise_blocks__WEBPACK_IMPORTED_MODULE_5__["default"])(piece); // Allows us to ask for this information when we get a report.
2321  
2322      console.log('Processed HTML piece:\n\n', piece);
2323      var doc = document.implementation.createHTMLDocument('');
2324      doc.body.innerHTML = piece;
2325      return Array.from(doc.body.children).map(function (node) {
2326        var rawTransformation = Object(_factory__WEBPACK_IMPORTED_MODULE_2__["findTransform"])(rawTransformations, function (_ref2) {
2327          var isMatch = _ref2.isMatch;
2328          return isMatch(node);
2329        });
2330  
2331        if (!rawTransformation) {
2332          console.warn('A block registered a raw transformation schema for `' + node.nodeName + '` but did not match it. ' + 'Make sure there is a `selector` or `isMatch` property that can match the schema.\n' + 'Sanitized HTML: `' + node.outerHTML + '`');
2333          return;
2334        }
2335  
2336        var transform = rawTransformation.transform,
2337            blockName = rawTransformation.blockName;
2338  
2339        if (transform) {
2340          return transform(node);
2341        }
2342  
2343        return Object(_factory__WEBPACK_IMPORTED_MODULE_2__["createBlock"])(blockName, Object(_parser__WEBPACK_IMPORTED_MODULE_4__["getBlockAttributes"])(Object(_registration__WEBPACK_IMPORTED_MODULE_3__["getBlockType"])(blockName), node.outerHTML));
2344      });
2345    }));
2346  }
2347  
2348  
2349  /***/ }),
2350  
2351  /***/ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/is-inline-content.js":
2352  /*!*******************************************************************************************!*\
2353    !*** ./node_modules/@wordpress/blocks/build-module/api/raw-handling/is-inline-content.js ***!
2354    \*******************************************************************************************/
2355  /*! exports provided: default */
2356  /***/ (function(module, __webpack_exports__, __webpack_require__) {
2357  
2358  "use strict";
2359  __webpack_require__.r(__webpack_exports__);
2360  /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash */ "lodash");
2361  /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_0__);
2362  /* harmony import */ var _phrasing_content__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./phrasing-content */ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/phrasing-content.js");
2363  /**
2364   * External dependencies
2365   */
2366  
2367  /**
2368   * Internal dependencies
2369   */
2370  
2371  
2372  /**
2373   * Checks if the given node should be considered inline content, optionally
2374   * depending on a context tag.
2375   *
2376   * @param {Node}   node       Node name.
2377   * @param {string} contextTag Tag name.
2378   *
2379   * @return {boolean} True if the node is inline content, false if nohe.
2380   */
2381  
2382  function isInline(node, contextTag) {
2383    if (Object(_phrasing_content__WEBPACK_IMPORTED_MODULE_1__["isPhrasingContent"])(node)) {
2384      return true;
2385    }
2386  
2387    if (!contextTag) {
2388      return false;
2389    }
2390  
2391    var tag = node.nodeName.toLowerCase();
2392    var inlineWhitelistTagGroups = [['ul', 'li', 'ol'], ['h1', 'h2', 'h3', 'h4', 'h5', 'h6']];
2393    return inlineWhitelistTagGroups.some(function (tagGroup) {
2394      return Object(lodash__WEBPACK_IMPORTED_MODULE_0__["difference"])([tag, contextTag], tagGroup).length === 0;
2395    });
2396  }
2397  
2398  function deepCheck(nodes, contextTag) {
2399    return nodes.every(function (node) {
2400      return isInline(node, contextTag) && deepCheck(Array.from(node.children), contextTag);
2401    });
2402  }
2403  
2404  function isDoubleBR(node) {
2405    return node.nodeName === 'BR' && node.previousSibling && node.previousSibling.nodeName === 'BR';
2406  }
2407  
2408  /* harmony default export */ __webpack_exports__["default"] = (function (HTML, contextTag) {
2409    var doc = document.implementation.createHTMLDocument('');
2410    doc.body.innerHTML = HTML;
2411    var nodes = Array.from(doc.body.children);
2412    return !nodes.some(isDoubleBR) && deepCheck(nodes, contextTag);
2413  });
2414  
2415  
2416  /***/ }),
2417  
2418  /***/ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/list-reducer.js":
2419  /*!**************************************************************************************!*\
2420    !*** ./node_modules/@wordpress/blocks/build-module/api/raw-handling/list-reducer.js ***!
2421    \**************************************************************************************/
2422  /*! exports provided: default */
2423  /***/ (function(module, __webpack_exports__, __webpack_require__) {
2424  
2425  "use strict";
2426  __webpack_require__.r(__webpack_exports__);
2427  /* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ "./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js");
2428  /* harmony import */ var _wordpress_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/dom */ "@wordpress/dom");
2429  /* harmony import */ var _wordpress_dom__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_dom__WEBPACK_IMPORTED_MODULE_1__);
2430  
2431  
2432  /**
2433   * WordPress dependencies
2434   */
2435  
2436  
2437  function isList(node) {
2438    return node.nodeName === 'OL' || node.nodeName === 'UL';
2439  }
2440  
2441  function shallowTextContent(element) {
2442    return Object(_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__["default"])(element.childNodes).map(function (_ref) {
2443      var _ref$nodeValue = _ref.nodeValue,
2444          nodeValue = _ref$nodeValue === void 0 ? '' : _ref$nodeValue;
2445      return nodeValue;
2446    }).join('');
2447  }
2448  
2449  /* harmony default export */ __webpack_exports__["default"] = (function (node) {
2450    if (!isList(node)) {
2451      return;
2452    }
2453  
2454    var list = node;
2455    var prevElement = node.previousElementSibling; // Merge with previous list if:
2456    // * There is a previous list of the same type.
2457    // * There is only one list item.
2458  
2459    if (prevElement && prevElement.nodeName === node.nodeName && list.children.length === 1) {
2460      prevElement.appendChild(list.firstChild);
2461      list.parentNode.removeChild(list);
2462    }
2463  
2464    var parentElement = node.parentNode; // Nested list with empty parent item.
2465  
2466    if (parentElement && parentElement.nodeName === 'LI' && parentElement.children.length === 1 && !/\S/.test(shallowTextContent(parentElement))) {
2467      var parentListItem = parentElement;
2468      var prevListItem = parentListItem.previousElementSibling;
2469      var parentList = parentListItem.parentNode;
2470  
2471      if (prevListItem) {
2472        prevListItem.appendChild(list);
2473        parentList.removeChild(parentListItem);
2474      } else {
2475        parentList.parentNode.insertBefore(list, parentList);
2476        parentList.parentNode.removeChild(parentList);
2477      }
2478    } // Invalid: OL/UL > OL/UL.
2479  
2480  
2481    if (parentElement && isList(parentElement)) {
2482      var _prevListItem = node.previousElementSibling;
2483  
2484      if (_prevListItem) {
2485        _prevListItem.appendChild(node);
2486      } else {
2487        Object(_wordpress_dom__WEBPACK_IMPORTED_MODULE_1__["unwrap"])(node);
2488      }
2489    }
2490  });
2491  
2492  
2493  /***/ }),
2494  
2495  /***/ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/markdown-converter.js":
2496  /*!********************************************************************************************!*\
2497    !*** ./node_modules/@wordpress/blocks/build-module/api/raw-handling/markdown-converter.js ***!
2498    \********************************************************************************************/
2499  /*! exports provided: default */
2500  /***/ (function(module, __webpack_exports__, __webpack_require__) {
2501  
2502  "use strict";
2503  __webpack_require__.r(__webpack_exports__);
2504  /* harmony import */ var showdown__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! showdown */ "./node_modules/showdown/dist/showdown.js");
2505  /* harmony import */ var showdown__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(showdown__WEBPACK_IMPORTED_MODULE_0__);
2506  /**
2507   * External dependencies
2508   */
2509   // Reuse the same showdown converter.
2510  
2511  var converter = new showdown__WEBPACK_IMPORTED_MODULE_0___default.a.Converter({
2512    noHeaderId: true,
2513    tables: true,
2514    literalMidWordUnderscores: true,
2515    omitExtraWLInCodeBlocks: true,
2516    simpleLineBreaks: true,
2517    strikethrough: true
2518  });
2519  /**
2520   * Corrects the Slack Markdown variant of the code block.
2521   * If uncorrected, it will be converted to inline code.
2522   *
2523   * @see https://get.slack.help/hc/en-us/articles/202288908-how-can-i-add-formatting-to-my-messages-#code-blocks
2524   *
2525   * @param {string} text The potential Markdown text to correct.
2526   *
2527   * @return {string} The corrected Markdown.
2528   */
2529  
2530  function slackMarkdownVariantCorrector(text) {
2531    return text.replace(/((?:^|\n)```)([^\n`]+)(```(?:$|\n))/, function (match, p1, p2, p3) {
2532      return "".concat(p1, "\n").concat(p2, "\n").concat(p3);
2533    });
2534  }
2535  /**
2536   * Converts a piece of text into HTML based on any Markdown present.
2537   * Also decodes any encoded HTML.
2538   *
2539   * @param {string} text The plain text to convert.
2540   *
2541   * @return {string} HTML.
2542   */
2543  
2544  
2545  /* harmony default export */ __webpack_exports__["default"] = (function (text) {
2546    return converter.makeHtml(slackMarkdownVariantCorrector(text));
2547  });
2548  
2549  
2550  /***/ }),
2551  
2552  /***/ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/ms-list-converter.js":
2553  /*!*******************************************************************************************!*\
2554    !*** ./node_modules/@wordpress/blocks/build-module/api/raw-handling/ms-list-converter.js ***!
2555    \*******************************************************************************************/
2556  /*! exports provided: default */
2557  /***/ (function(module, __webpack_exports__, __webpack_require__) {
2558  
2559  "use strict";
2560  __webpack_require__.r(__webpack_exports__);
2561  /**
2562   * Browser dependencies
2563   */
2564  var _window = window,
2565      parseInt = _window.parseInt;
2566  
2567  function isList(node) {
2568    return node.nodeName === 'OL' || node.nodeName === 'UL';
2569  }
2570  
2571  /* harmony default export */ __webpack_exports__["default"] = (function (node, doc) {
2572    if (node.nodeName !== 'P') {
2573      return;
2574    }
2575  
2576    var style = node.getAttribute('style');
2577  
2578    if (!style) {
2579      return;
2580    } // Quick check.
2581  
2582  
2583    if (style.indexOf('mso-list') === -1) {
2584      return;
2585    }
2586  
2587    var matches = /mso-list\s*:[^;]+level([0-9]+)/i.exec(style);
2588  
2589    if (!matches) {
2590      return;
2591    }
2592  
2593    var level = parseInt(matches[1], 10) - 1 || 0;
2594    var prevNode = node.previousElementSibling; // Add new list if no previous.
2595  
2596    if (!prevNode || !isList(prevNode)) {
2597      // See https://html.spec.whatwg.org/multipage/grouping-content.html#attr-ol-type.
2598      var type = node.textContent.trim().slice(0, 1);
2599      var isNumeric = /[1iIaA]/.test(type);
2600      var newListNode = doc.createElement(isNumeric ? 'ol' : 'ul');
2601  
2602      if (isNumeric) {
2603        newListNode.setAttribute('type', type);
2604      }
2605  
2606      node.parentNode.insertBefore(newListNode, node);
2607    }
2608  
2609    var listNode = node.previousElementSibling;
2610    var listType = listNode.nodeName;
2611    var listItem = doc.createElement('li');
2612    var receivingNode = listNode; // Remove the first span with list info.
2613  
2614    node.removeChild(node.firstElementChild); // Add content.
2615  
2616    while (node.firstChild) {
2617      listItem.appendChild(node.firstChild);
2618    } // Change pointer depending on indentation level.
2619  
2620  
2621    while (level--) {
2622      receivingNode = receivingNode.lastElementChild || receivingNode; // If it's a list, move pointer to the last item.
2623  
2624      if (isList(receivingNode)) {
2625        receivingNode = receivingNode.lastElementChild || receivingNode;
2626      }
2627    } // Make sure we append to a list.
2628  
2629  
2630    if (!isList(receivingNode)) {
2631      receivingNode = receivingNode.appendChild(doc.createElement(listType));
2632    } // Append the list item to the list.
2633  
2634  
2635    receivingNode.appendChild(listItem); // Remove the wrapper paragraph.
2636  
2637    node.parentNode.removeChild(node);
2638  });
2639  
2640  
2641  /***/ }),
2642  
2643  /***/ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/normalise-blocks.js":
2644  /*!******************************************************************************************!*\
2645    !*** ./node_modules/@wordpress/blocks/build-module/api/raw-handling/normalise-blocks.js ***!
2646    \******************************************************************************************/
2647  /*! exports provided: default */
2648  /***/ (function(module, __webpack_exports__, __webpack_require__) {
2649  
2650  "use strict";
2651  __webpack_require__.r(__webpack_exports__);
2652  /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils */ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/utils.js");
2653  /* harmony import */ var _phrasing_content__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./phrasing-content */ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/phrasing-content.js");
2654  /**
2655   * Internal dependencies
2656   */
2657  
2658  
2659  /**
2660   * Browser dependencies
2661   */
2662  
2663  var _window$Node = window.Node,
2664      ELEMENT_NODE = _window$Node.ELEMENT_NODE,
2665      TEXT_NODE = _window$Node.TEXT_NODE;
2666  /* harmony default export */ __webpack_exports__["default"] = (function (HTML) {
2667    var decuDoc = document.implementation.createHTMLDocument('');
2668    var accuDoc = document.implementation.createHTMLDocument('');
2669    var decu = decuDoc.body;
2670    var accu = accuDoc.body;
2671    decu.innerHTML = HTML;
2672  
2673    while (decu.firstChild) {
2674      var node = decu.firstChild; // Text nodes: wrap in a paragraph, or append to previous.
2675  
2676      if (node.nodeType === TEXT_NODE) {
2677        if (!node.nodeValue.trim()) {
2678          decu.removeChild(node);
2679        } else {
2680          if (!accu.lastChild || accu.lastChild.nodeName !== 'P') {
2681            accu.appendChild(accuDoc.createElement('P'));
2682          }
2683  
2684          accu.lastChild.appendChild(node);
2685        } // Element nodes.
2686  
2687      } else if (node.nodeType === ELEMENT_NODE) {
2688        // BR nodes: create a new paragraph on double, or append to previous.
2689        if (node.nodeName === 'BR') {
2690          if (node.nextSibling && node.nextSibling.nodeName === 'BR') {
2691            accu.appendChild(accuDoc.createElement('P'));
2692            decu.removeChild(node.nextSibling);
2693          } // Don't append to an empty paragraph.
2694  
2695  
2696          if (accu.lastChild && accu.lastChild.nodeName === 'P' && accu.lastChild.hasChildNodes()) {
2697            accu.lastChild.appendChild(node);
2698          } else {
2699            decu.removeChild(node);
2700          }
2701        } else if (node.nodeName === 'P') {
2702          // Only append non-empty paragraph nodes.
2703          if (Object(_utils__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(node)) {
2704            decu.removeChild(node);
2705          } else {
2706            accu.appendChild(node);
2707          }
2708        } else if (Object(_phrasing_content__WEBPACK_IMPORTED_MODULE_1__["isPhrasingContent"])(node)) {
2709          if (!accu.lastChild || accu.lastChild.nodeName !== 'P') {
2710            accu.appendChild(accuDoc.createElement('P'));
2711          }
2712  
2713          accu.lastChild.appendChild(node);
2714        } else {
2715          accu.appendChild(node);
2716        }
2717      } else {
2718        decu.removeChild(node);
2719      }
2720    }
2721  
2722    return accu.innerHTML;
2723  });
2724  
2725  
2726  /***/ }),
2727  
2728  /***/ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/phrasing-content-reducer.js":
2729  /*!**************************************************************************************************!*\
2730    !*** ./node_modules/@wordpress/blocks/build-module/api/raw-handling/phrasing-content-reducer.js ***!
2731    \**************************************************************************************************/
2732  /*! exports provided: default */
2733  /***/ (function(module, __webpack_exports__, __webpack_require__) {
2734  
2735  "use strict";
2736  __webpack_require__.r(__webpack_exports__);
2737  /* harmony import */ var _wordpress_dom__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/dom */ "@wordpress/dom");
2738  /* harmony import */ var _wordpress_dom__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_dom__WEBPACK_IMPORTED_MODULE_0__);
2739  /* harmony import */ var _phrasing_content__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./phrasing-content */ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/phrasing-content.js");
2740  /**
2741   * WordPress dependencies
2742   */
2743  
2744  /**
2745   * Internal dependencies
2746   */
2747  
2748  
2749  
2750  function isBlockContent(node) {
2751    var schema = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
2752    return schema.hasOwnProperty(node.nodeName.toLowerCase());
2753  }
2754  
2755  /* harmony default export */ __webpack_exports__["default"] = (function (node, doc, schema) {
2756    if (node.nodeName === 'SPAN') {
2757      var _node$style = node.style,
2758          fontWeight = _node$style.fontWeight,
2759          fontStyle = _node$style.fontStyle;
2760  
2761      if (fontWeight === 'bold' || fontWeight === '700') {
2762        node = Object(_wordpress_dom__WEBPACK_IMPORTED_MODULE_0__["replaceTag"])(node, 'strong', doc);
2763      } else if (fontStyle === 'italic') {
2764        node = Object(_wordpress_dom__WEBPACK_IMPORTED_MODULE_0__["replaceTag"])(node, 'em', doc);
2765      }
2766    } else if (node.nodeName === 'B') {
2767      node = Object(_wordpress_dom__WEBPACK_IMPORTED_MODULE_0__["replaceTag"])(node, 'strong', doc);
2768    } else if (node.nodeName === 'I') {
2769      node = Object(_wordpress_dom__WEBPACK_IMPORTED_MODULE_0__["replaceTag"])(node, 'em', doc);
2770    } else if (node.nodeName === 'A') {
2771      if (node.target.toLowerCase() === '_blank') {
2772        node.rel = 'noreferrer noopener';
2773      } else {
2774        node.removeAttribute('target');
2775        node.removeAttribute('rel');
2776      }
2777    }
2778  
2779    if (Object(_phrasing_content__WEBPACK_IMPORTED_MODULE_1__["isPhrasingContent"])(node) && node.hasChildNodes() && Array.from(node.childNodes).some(function (child) {
2780      return isBlockContent(child, schema);
2781    })) {
2782      Object(_wordpress_dom__WEBPACK_IMPORTED_MODULE_0__["unwrap"])(node);
2783    }
2784  });
2785  
2786  
2787  /***/ }),
2788  
2789  /***/ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/phrasing-content.js":
2790  /*!******************************************************************************************!*\
2791    !*** ./node_modules/@wordpress/blocks/build-module/api/raw-handling/phrasing-content.js ***!
2792    \******************************************************************************************/
2793  /*! exports provided: getPhrasingContentSchema, isPhrasingContent */
2794  /***/ (function(module, __webpack_exports__, __webpack_require__) {
2795  
2796  "use strict";
2797  __webpack_require__.r(__webpack_exports__);
2798  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getPhrasingContentSchema", function() { return getPhrasingContentSchema; });
2799  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isPhrasingContent", function() { return isPhrasingContent; });
2800  /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash */ "lodash");
2801  /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_0__);
2802  /**
2803   * External dependencies
2804   */
2805  
2806  var phrasingContentSchema = {
2807    strong: {},
2808    em: {},
2809    del: {},
2810    ins: {},
2811    a: {
2812      attributes: ['href', 'target', 'rel']
2813    },
2814    code: {},
2815    abbr: {
2816      attributes: ['title']
2817    },
2818    sub: {},
2819    sup: {},
2820    br: {},
2821    '#text': {}
2822  }; // Recursion is needed.
2823  // Possible: strong > em > strong.
2824  // Impossible: strong > strong.
2825  
2826  ['strong', 'em', 'del', 'ins', 'a', 'code', 'abbr', 'sub', 'sup'].forEach(function (tag) {
2827    phrasingContentSchema[tag].children = Object(lodash__WEBPACK_IMPORTED_MODULE_0__["omit"])(phrasingContentSchema, tag);
2828  });
2829  /**
2830   * Get schema of possible paths for phrasing content.
2831   *
2832   * @see https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Content_categories#Phrasing_content
2833   *
2834   * @return {Object} Schema.
2835   */
2836  
2837  function getPhrasingContentSchema() {
2838    return phrasingContentSchema;
2839  }
2840  /**
2841   * Find out whether or not the given node is phrasing content.
2842   *
2843   * @see https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Content_categories#Phrasing_content
2844   *
2845   * @param {Element} node The node to test.
2846   *
2847   * @return {boolean} True if phrasing content, false if not.
2848   */
2849  
2850  function isPhrasingContent(node) {
2851    var tag = node.nodeName.toLowerCase();
2852    return getPhrasingContentSchema().hasOwnProperty(tag) || tag === 'span';
2853  }
2854  
2855  
2856  /***/ }),
2857  
2858  /***/ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/shortcode-converter.js":
2859  /*!*********************************************************************************************!*\
2860    !*** ./node_modules/@wordpress/blocks/build-module/api/raw-handling/shortcode-converter.js ***!
2861    \*********************************************************************************************/
2862  /*! exports provided: default */
2863  /***/ (function(module, __webpack_exports__, __webpack_require__) {
2864  
2865  "use strict";
2866  __webpack_require__.r(__webpack_exports__);
2867  /* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ "./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js");
2868  /* harmony import */ var _babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread */ "./node_modules/@babel/runtime/helpers/esm/objectSpread.js");
2869  /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash */ "lodash");
2870  /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_2__);
2871  /* harmony import */ var _wordpress_shortcode__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/shortcode */ "@wordpress/shortcode");
2872  /* harmony import */ var _wordpress_shortcode__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_shortcode__WEBPACK_IMPORTED_MODULE_3__);
2873  /* harmony import */ var _factory__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../factory */ "./node_modules/@wordpress/blocks/build-module/api/factory.js");
2874  /* harmony import */ var _registration__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../registration */ "./node_modules/@wordpress/blocks/build-module/api/registration.js");
2875  /* harmony import */ var _parser__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../parser */ "./node_modules/@wordpress/blocks/build-module/api/parser.js");
2876  
2877  
2878  
2879  /**
2880   * External dependencies
2881   */
2882  
2883  /**
2884   * WordPress dependencies
2885   */
2886  
2887  
2888  /**
2889   * Internal dependencies
2890   */
2891  
2892  
2893  
2894  
2895  
2896  function segmentHTMLToShortcodeBlock(HTML) {
2897    var lastIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
2898    // Get all matches.
2899    var transformsFrom = Object(_factory__WEBPACK_IMPORTED_MODULE_4__["getBlockTransforms"])('from');
2900    var transformation = Object(_factory__WEBPACK_IMPORTED_MODULE_4__["findTransform"])(transformsFrom, function (transform) {
2901      return transform.type === 'shortcode' && Object(lodash__WEBPACK_IMPORTED_MODULE_2__["some"])(Object(lodash__WEBPACK_IMPORTED_MODULE_2__["castArray"])(transform.tag), function (tag) {
2902        return Object(_wordpress_shortcode__WEBPACK_IMPORTED_MODULE_3__["regexp"])(tag).test(HTML);
2903      });
2904    });
2905  
2906    if (!transformation) {
2907      return [HTML];
2908    }
2909  
2910    var transformTags = Object(lodash__WEBPACK_IMPORTED_MODULE_2__["castArray"])(transformation.tag);
2911    var transformTag = Object(lodash__WEBPACK_IMPORTED_MODULE_2__["first"])(transformTags);
2912    var match;
2913  
2914    if (match = Object(_wordpress_shortcode__WEBPACK_IMPORTED_MODULE_3__["next"])(transformTag, HTML, lastIndex)) {
2915      var beforeHTML = HTML.substr(0, match.index);
2916      lastIndex = match.index + match.content.length; // If the shortcode content does not contain HTML and the shortcode is
2917      // not on a new line (or in paragraph from Markdown converter),
2918      // consider the shortcode as inline text, and thus skip conversion for
2919      // this segment.
2920  
2921      if (!Object(lodash__WEBPACK_IMPORTED_MODULE_2__["includes"])(match.shortcode.content || '', '<') && !/(\n|<p>)\s*$/.test(beforeHTML)) {
2922        return segmentHTMLToShortcodeBlock(HTML, lastIndex);
2923      }
2924  
2925      var attributes = Object(lodash__WEBPACK_IMPORTED_MODULE_2__["mapValues"])(Object(lodash__WEBPACK_IMPORTED_MODULE_2__["pickBy"])(transformation.attributes, function (schema) {
2926        return schema.shortcode;
2927      }), // Passing all of `match` as second argument is intentionally broad
2928      // but shouldn't be too relied upon.
2929      //
2930      // See: https://github.com/WordPress/gutenberg/pull/3610#discussion_r152546926
2931      function (schema) {
2932        return schema.shortcode(match.shortcode.attrs, match);
2933      });
2934      var block = Object(_factory__WEBPACK_IMPORTED_MODULE_4__["createBlock"])(transformation.blockName, Object(_parser__WEBPACK_IMPORTED_MODULE_6__["getBlockAttributes"])(Object(_babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_1__["default"])({}, Object(_registration__WEBPACK_IMPORTED_MODULE_5__["getBlockType"])(transformation.blockName), {
2935        attributes: transformation.attributes
2936      }), match.shortcode.content, attributes));
2937      return [beforeHTML, block].concat(Object(_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__["default"])(segmentHTMLToShortcodeBlock(HTML.substr(lastIndex))));
2938    }
2939  
2940    return [HTML];
2941  }
2942  
2943  /* harmony default export */ __webpack_exports__["default"] = (segmentHTMLToShortcodeBlock);
2944  
2945  
2946  /***/ }),
2947  
2948  /***/ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/special-comment-converter.js":
2949  /*!***************************************************************************************************!*\
2950    !*** ./node_modules/@wordpress/blocks/build-module/api/raw-handling/special-comment-converter.js ***!
2951    \***************************************************************************************************/
2952  /*! exports provided: default */
2953  /***/ (function(module, __webpack_exports__, __webpack_require__) {
2954  
2955  "use strict";
2956  __webpack_require__.r(__webpack_exports__);
2957  /* harmony import */ var _wordpress_dom__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/dom */ "@wordpress/dom");
2958  /* harmony import */ var _wordpress_dom__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_dom__WEBPACK_IMPORTED_MODULE_0__);
2959  /**
2960   * WordPress dependencies
2961   */
2962  
2963  /**
2964   * Browser dependencies
2965   */
2966  
2967  var COMMENT_NODE = window.Node.COMMENT_NODE;
2968  /**
2969   * Looks for `<!--nextpage-->` and `<!--more-->` comments, as well as the
2970   * `<!--more Some text-->` variant and its `<!--noteaser-->` companion,
2971   * and replaces them with a custom element representing a future block.
2972   *
2973   * The custom element is a way to bypass the rest of the `raw-handling`
2974   * transforms, which would eliminate other kinds of node with which to carry
2975   * `<!--more-->`'s data: nodes with `data` attributes, empty paragraphs, etc.
2976   *
2977   * The custom element is then expected to be recognized by any registered
2978   * block's `raw` transform.
2979   *
2980   * @param {Node}     node The node to be processed.
2981   * @param {Document} doc  The document of the node.
2982   * @return {void}
2983   */
2984  
2985  /* harmony default export */ __webpack_exports__["default"] = (function (node, doc) {
2986    if (node.nodeType !== COMMENT_NODE) {
2987      return;
2988    }
2989  
2990    if (node.nodeValue === 'nextpage') {
2991      Object(_wordpress_dom__WEBPACK_IMPORTED_MODULE_0__["replace"])(node, createNextpage(doc));
2992      return;
2993    }
2994  
2995    if (node.nodeValue.indexOf('more') === 0) {
2996      // Grab any custom text in the comment.
2997      var customText = node.nodeValue.slice(4).trim();
2998      /*
2999       * When a `<!--more-->` comment is found, we need to look for any
3000       * `<!--noteaser-->` sibling, but it may not be a direct sibling
3001       * (whitespace typically lies in between)
3002       */
3003  
3004      var sibling = node;
3005      var noTeaser = false;
3006  
3007      while (sibling = sibling.nextSibling) {
3008        if (sibling.nodeType === COMMENT_NODE && sibling.nodeValue === 'noteaser') {
3009          noTeaser = true;
3010          Object(_wordpress_dom__WEBPACK_IMPORTED_MODULE_0__["remove"])(sibling);
3011          break;
3012        }
3013      }
3014  
3015      Object(_wordpress_dom__WEBPACK_IMPORTED_MODULE_0__["replace"])(node, createMore(customText, noTeaser, doc));
3016    }
3017  });
3018  
3019  function createMore(customText, noTeaser, doc) {
3020    var node = doc.createElement('wp-block');
3021    node.dataset.block = 'core/more';
3022  
3023    if (customText) {
3024      node.dataset.customText = customText;
3025    }
3026  
3027    if (noTeaser) {
3028      // "Boolean" data attribute
3029      node.dataset.noTeaser = '';
3030    }
3031  
3032    return node;
3033  }
3034  
3035  function createNextpage(doc) {
3036    var node = doc.createElement('wp-block');
3037    node.dataset.block = 'core/nextpage';
3038    return node;
3039  }
3040  
3041  
3042  /***/ }),
3043  
3044  /***/ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/utils.js":
3045  /*!*******************************************************************************!*\
3046    !*** ./node_modules/@wordpress/blocks/build-module/api/raw-handling/utils.js ***!
3047    \*******************************************************************************/
3048  /*! exports provided: getBlockContentSchema, isEmpty, isPlain, deepFilterNodeList, deepFilterHTML, removeInvalidHTML */
3049  /***/ (function(module, __webpack_exports__, __webpack_require__) {
3050  
3051  "use strict";
3052  __webpack_require__.r(__webpack_exports__);
3053  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getBlockContentSchema", function() { return getBlockContentSchema; });
3054  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isEmpty", function() { return isEmpty; });
3055  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isPlain", function() { return isPlain; });
3056  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "deepFilterNodeList", function() { return deepFilterNodeList; });
3057  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "deepFilterHTML", function() { return deepFilterHTML; });
3058  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeInvalidHTML", function() { return removeInvalidHTML; });
3059  /* harmony import */ var _babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread */ "./node_modules/@babel/runtime/helpers/esm/objectSpread.js");
3060  /* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ "./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js");
3061  /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash */ "lodash");
3062  /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_2__);
3063  /* harmony import */ var _wordpress_dom__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/dom */ "@wordpress/dom");
3064  /* harmony import */ var _wordpress_dom__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_dom__WEBPACK_IMPORTED_MODULE_3__);
3065  /* harmony import */ var ___WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! .. */ "./node_modules/@wordpress/blocks/build-module/api/index.js");
3066  /* harmony import */ var _phrasing_content__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./phrasing-content */ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/phrasing-content.js");
3067  
3068  
3069  
3070  /**
3071   * External dependencies
3072   */
3073  
3074  /**
3075   * WordPress dependencies
3076   */
3077  
3078  
3079  
3080  /**
3081   * Internal dependencies
3082   */
3083  
3084  
3085  /**
3086   * Browser dependencies
3087   */
3088  
3089  var _window$Node = window.Node,
3090      ELEMENT_NODE = _window$Node.ELEMENT_NODE,
3091      TEXT_NODE = _window$Node.TEXT_NODE;
3092  /**
3093   * Given raw transforms from blocks, merges all schemas into one.
3094   *
3095   * @param {Array} transforms Block transforms, of the `raw` type.
3096   *
3097   * @return {Object} A complete block content schema.
3098   */
3099  
3100  function getBlockContentSchema(transforms) {
3101    var schemas = transforms.map(function (_ref) {
3102      var blockName = _ref.blockName,
3103          schema = _ref.schema;
3104  
3105      // If the block supports the "anchor" functionality, it needs to keep its ID attribute.
3106      if (Object(___WEBPACK_IMPORTED_MODULE_4__["hasBlockSupport"])(blockName, 'anchor')) {
3107        for (var tag in schema) {
3108          if (!schema[tag].attributes) {
3109            schema[tag].attributes = [];
3110          }
3111  
3112          schema[tag].attributes.push('id');
3113        }
3114      }
3115  
3116      return schema;
3117    });
3118    return lodash__WEBPACK_IMPORTED_MODULE_2__["mergeWith"].apply(void 0, [{}].concat(Object(_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__["default"])(schemas), [function (objValue, srcValue, key) {
3119      if (key === 'children') {
3120        if (objValue === '*' || srcValue === '*') {
3121          return '*';
3122        }
3123  
3124        return Object(_babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_0__["default"])({}, objValue, srcValue);
3125      } else if (key === 'attributes' || key === 'require') {
3126        return Object(_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__["default"])(objValue || []).concat(Object(_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__["default"])(srcValue || []));
3127      }
3128    }]));
3129  }
3130  /**
3131   * Recursively checks if an element is empty. An element is not empty if it
3132   * contains text or contains elements with attributes such as images.
3133   *
3134   * @param {Element} element The element to check.
3135   *
3136   * @return {boolean} Wether or not the element is empty.
3137   */
3138  
3139  function isEmpty(element) {
3140    if (!element.hasChildNodes()) {
3141      return true;
3142    }
3143  
3144    return Array.from(element.childNodes).every(function (node) {
3145      if (node.nodeType === TEXT_NODE) {
3146        return !node.nodeValue.trim();
3147      }
3148  
3149      if (node.nodeType === ELEMENT_NODE) {
3150        if (node.nodeName === 'BR') {
3151          return true;
3152        } else if (node.hasAttributes()) {
3153          return false;
3154        }
3155  
3156        return isEmpty(node);
3157      }
3158  
3159      return true;
3160    });
3161  }
3162  /**
3163   * Checks wether HTML can be considered plain text. That is, it does not contain
3164   * any elements that are not line breaks.
3165   *
3166   * @param {string} HTML The HTML to check.
3167   *
3168   * @return {boolean} Wether the HTML can be considered plain text.
3169   */
3170  
3171  function isPlain(HTML) {
3172    return !/<(?!br[ />])/i.test(HTML);
3173  }
3174  /**
3175   * Given node filters, deeply filters and mutates a NodeList.
3176   *
3177   * @param {NodeList} nodeList The nodeList to filter.
3178   * @param {Array}    filters  An array of functions that can mutate with the provided node.
3179   * @param {Document} doc      The document of the nodeList.
3180   * @param {Object}   schema   The schema to use.
3181   */
3182  
3183  function deepFilterNodeList(nodeList, filters, doc, schema) {
3184    Array.from(nodeList).forEach(function (node) {
3185      deepFilterNodeList(node.childNodes, filters, doc, schema);
3186      filters.forEach(function (item) {
3187        // Make sure the node is still attached to the document.
3188        if (!doc.contains(node)) {
3189          return;
3190        }
3191  
3192        item(node, doc, schema);
3193      });
3194    });
3195  }
3196  /**
3197   * Given node filters, deeply filters HTML tags.
3198   * Filters from the deepest nodes to the top.
3199   *
3200   * @param {string} HTML    The HTML to filter.
3201   * @param {Array}  filters An array of functions that can mutate with the provided node.
3202   * @param {Object} schema  The schema to use.
3203   *
3204   * @return {string} The filtered HTML.
3205   */
3206  
3207  function deepFilterHTML(HTML) {
3208    var filters = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
3209    var schema = arguments.length > 2 ? arguments[2] : undefined;
3210    var doc = document.implementation.createHTMLDocument('');
3211    doc.body.innerHTML = HTML;
3212    deepFilterNodeList(doc.body.childNodes, filters, doc, schema);
3213    return doc.body.innerHTML;
3214  }
3215  /**
3216   * Given a schema, unwraps or removes nodes, attributes and classes on a node
3217   * list.
3218   *
3219   * @param {NodeList} nodeList The nodeList to filter.
3220   * @param {Document} doc      The document of the nodeList.
3221   * @param {Object}   schema   An array of functions that can mutate with the provided node.
3222   * @param {Object}   inline   Whether to clean for inline mode.
3223   */
3224  
3225  function cleanNodeList(nodeList, doc, schema, inline) {
3226    Array.from(nodeList).forEach(function (node) {
3227      var tag = node.nodeName.toLowerCase(); // It's a valid child.
3228  
3229      if (schema.hasOwnProperty(tag)) {
3230        if (node.nodeType === ELEMENT_NODE) {
3231          var _schema$tag = schema[tag],
3232              _schema$tag$attribute = _schema$tag.attributes,
3233              attributes = _schema$tag$attribute === void 0 ? [] : _schema$tag$attribute,
3234              _schema$tag$classes = _schema$tag.classes,
3235              classes = _schema$tag$classes === void 0 ? [] : _schema$tag$classes,
3236              children = _schema$tag.children,
3237              _schema$tag$require = _schema$tag.require,
3238              require = _schema$tag$require === void 0 ? [] : _schema$tag$require; // If the node is empty and it's supposed to have children,
3239          // remove the node.
3240  
3241  
3242          if (isEmpty(node) && children) {
3243            Object(_wordpress_dom__WEBPACK_IMPORTED_MODULE_3__["remove"])(node);
3244            return;
3245          }
3246  
3247          if (node.hasAttributes()) {
3248            // Strip invalid attributes.
3249            Array.from(node.attributes).forEach(function (_ref2) {
3250              var name = _ref2.name;
3251  
3252              if (name !== 'class' && !Object(lodash__WEBPACK_IMPORTED_MODULE_2__["includes"])(attributes, name)) {
3253                node.removeAttribute(name);
3254              }
3255            }); // Strip invalid classes.
3256  
3257            if (node.classList.length) {
3258              var mattchers = classes.map(function (item) {
3259                if (typeof item === 'string') {
3260                  return function (className) {
3261                    return className === item;
3262                  };
3263                } else if (item instanceof RegExp) {
3264                  return function (className) {
3265                    return item.test(className);
3266                  };
3267                }
3268  
3269                return lodash__WEBPACK_IMPORTED_MODULE_2__["noop"];
3270              });
3271              Array.from(node.classList).forEach(function (name) {
3272                if (!mattchers.some(function (isMatch) {
3273                  return isMatch(name);
3274                })) {
3275                  node.classList.remove(name);
3276                }
3277              });
3278  
3279              if (!node.classList.length) {
3280                node.removeAttribute('class');
3281              }
3282            }
3283          }
3284  
3285          if (node.hasChildNodes()) {
3286            // Do not filter any content.
3287            if (children === '*') {
3288              return;
3289            } // Continue if the node is supposed to have children.
3290  
3291  
3292            if (children) {
3293              // If a parent requires certain children, but it does
3294              // not have them, drop the parent and continue.
3295              if (require.length && !node.querySelector(require.join(','))) {
3296                cleanNodeList(node.childNodes, doc, schema, inline);
3297                Object(_wordpress_dom__WEBPACK_IMPORTED_MODULE_3__["unwrap"])(node);
3298              }
3299  
3300              cleanNodeList(node.childNodes, doc, children, inline); // Remove children if the node is not supposed to have any.
3301            } else {
3302              while (node.firstChild) {
3303                Object(_wordpress_dom__WEBPACK_IMPORTED_MODULE_3__["remove"])(node.firstChild);
3304              }
3305            }
3306          }
3307        } // Invalid child. Continue with schema at the same place and unwrap.
3308  
3309      } else {
3310        cleanNodeList(node.childNodes, doc, schema, inline); // For inline mode, insert a line break when unwrapping nodes that
3311        // are not phrasing content.
3312  
3313        if (inline && !Object(_phrasing_content__WEBPACK_IMPORTED_MODULE_5__["isPhrasingContent"])(node) && node.nextElementSibling) {
3314          Object(_wordpress_dom__WEBPACK_IMPORTED_MODULE_3__["insertAfter"])(doc.createElement('br'), node);
3315        }
3316  
3317        Object(_wordpress_dom__WEBPACK_IMPORTED_MODULE_3__["unwrap"])(node);
3318      }
3319    });
3320  }
3321  /**
3322   * Given a schema, unwraps or removes nodes, attributes and classes on HTML.
3323   *
3324   * @param {string} HTML   The HTML to clean up.
3325   * @param {Object} schema Schema for the HTML.
3326   * @param {Object} inline Whether to clean for inline mode.
3327   *
3328   * @return {string} The cleaned up HTML.
3329   */
3330  
3331  
3332  function removeInvalidHTML(HTML, schema, inline) {
3333    var doc = document.implementation.createHTMLDocument('');
3334    doc.body.innerHTML = HTML;
3335    cleanNodeList(doc.body.childNodes, doc, schema, inline);
3336    return doc.body.innerHTML;
3337  }
3338  
3339  
3340  /***/ }),
3341  
3342  /***/ "./node_modules/@wordpress/blocks/build-module/api/registration.js":
3343  /*!*************************************************************************!*\
3344    !*** ./node_modules/@wordpress/blocks/build-module/api/registration.js ***!
3345    \*************************************************************************/
3346  /*! exports provided: unstable__bootstrapServerSideBlockDefinitions, registerBlockType, unregisterBlockType, setUnknownTypeHandlerName, getUnknownTypeHandlerName, setFreeformContentHandlerName, getFreeformContentHandlerName, setUnregisteredTypeHandlerName, getUnregisteredTypeHandlerName, setDefaultBlockName, getDefaultBlockName, getBlockType, getBlockTypes, getBlockSupport, hasBlockSupport, isReusableBlock, getChildBlockNames, hasChildBlocks, hasChildBlocksWithInserterSupport, registerBlockStyle */
3347  /***/ (function(module, __webpack_exports__, __webpack_require__) {
3348  
3349  "use strict";
3350  __webpack_require__.r(__webpack_exports__);
3351  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "unstable__bootstrapServerSideBlockDefinitions", function() { return unstable__bootstrapServerSideBlockDefinitions; });
3352  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "registerBlockType", function() { return registerBlockType; });
3353  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "unregisterBlockType", function() { return unregisterBlockType; });
3354  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setUnknownTypeHandlerName", function() { return setUnknownTypeHandlerName; });
3355  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getUnknownTypeHandlerName", function() { return getUnknownTypeHandlerName; });
3356  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setFreeformContentHandlerName", function() { return setFreeformContentHandlerName; });
3357  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getFreeformContentHandlerName", function() { return getFreeformContentHandlerName; });
3358  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setUnregisteredTypeHandlerName", function() { return setUnregisteredTypeHandlerName; });
3359  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getUnregisteredTypeHandlerName", function() { return getUnregisteredTypeHandlerName; });
3360  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setDefaultBlockName", function() { return setDefaultBlockName; });
3361  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getDefaultBlockName", function() { return getDefaultBlockName; });
3362  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getBlockType", function() { return getBlockType; });
3363  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getBlockTypes", function() { return getBlockTypes; });
3364  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getBlockSupport", function() { return getBlockSupport; });
3365  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "hasBlockSupport", function() { return hasBlockSupport; });
3366  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isReusableBlock", function() { return isReusableBlock; });
3367  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getChildBlockNames", function() { return getChildBlockNames; });
3368  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "hasChildBlocks", function() { return hasChildBlocks; });
3369  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "hasChildBlocksWithInserterSupport", function() { return hasChildBlocksWithInserterSupport; });
3370  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "registerBlockStyle", function() { return registerBlockStyle; });
3371  /* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ "./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js");
3372  /* harmony import */ var _babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread */ "./node_modules/@babel/runtime/helpers/esm/objectSpread.js");
3373  /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash */ "lodash");
3374  /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_2__);
3375  /* harmony import */ var _wordpress_hooks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/hooks */ "@wordpress/hooks");
3376  /* harmony import */ var _wordpress_hooks__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_hooks__WEBPACK_IMPORTED_MODULE_3__);
3377  /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/data */ "@wordpress/data");
3378  /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_4__);
3379  /* harmony import */ var _wordpress_deprecated__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @wordpress/deprecated */ "@wordpress/deprecated");
3380  /* harmony import */ var _wordpress_deprecated__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_wordpress_deprecated__WEBPACK_IMPORTED_MODULE_5__);
3381  /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./utils */ "./node_modules/@wordpress/blocks/build-module/api/utils.js");
3382  
3383  
3384  
3385  /* eslint no-console: [ 'error', { allow: [ 'error' ] } ] */
3386  
3387  /**
3388   * External dependencies
3389   */
3390  
3391  /**
3392   * WordPress dependencies
3393   */
3394  
3395  
3396  
3397  
3398  /**
3399   * Internal dependencies
3400   */
3401  
3402  
3403  /**
3404   * Defined behavior of a block type.
3405   *
3406   * @typedef {WPBlockType}
3407   *
3408   * @property {string}                    name       Block's namespaced name.
3409   * @property {string}                    title      Human-readable label for a block.
3410   *                                                  Shown in the block inserter.
3411   * @property {string}                    category   Category classification of block,
3412   *                                                  impacting where block is shown in
3413   *                                                  inserter results.
3414   * @property {(Object|string|WPElement)} icon       Slug of the Dashicon to be shown
3415   *                                                  as the icon for the block in the
3416   *                                                  inserter, or element or an object describing the icon.
3417   * @property {?string[]}                 keywords   Additional keywords to produce
3418   *                                                  block as inserter search result.
3419   * @property {?Object}                   attributes Block attributes.
3420   * @property {Function}                  save       Serialize behavior of a block,
3421   *                                                  returning an element describing
3422   *                                                  structure of the block's post
3423   *                                                  content markup.
3424   * @property {WPComponent}               edit       Component rendering element to be
3425   *                                                  interacted with in an editor.
3426   */
3427  
3428  var serverSideBlockDefinitions = {};
3429  /**
3430   * Set the server side block definition of blocks.
3431   *
3432   * @param {Object} definitions Server-side block definitions
3433   */
3434  
3435  function unstable__bootstrapServerSideBlockDefinitions(definitions) {
3436    // eslint-disable-line camelcase
3437    serverSideBlockDefinitions = definitions;
3438  }
3439  /**
3440   * Registers a new block provided a unique name and an object defining its
3441   * behavior. Once registered, the block is made available as an option to any
3442   * editor interface where blocks are implemented.
3443   *
3444   * @param {string} name     Block name.
3445   * @param {Object} settings Block settings.
3446   *
3447   * @return {?WPBlock} The block, if it has been successfully registered;
3448   *                     otherwise `undefined`.
3449   */
3450  
3451  function registerBlockType(name, settings) {
3452    settings = Object(_babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_1__["default"])({
3453      name: name
3454    }, Object(lodash__WEBPACK_IMPORTED_MODULE_2__["get"])(serverSideBlockDefinitions, name), settings);
3455  
3456    if (typeof name !== 'string') {
3457      console.error('Block names must be strings.');
3458      return;
3459    }
3460  
3461    if (!/^[a-z][a-z0-9-]*\/[a-z][a-z0-9-]*$/.test(name)) {
3462      console.error('Block names must contain a namespace prefix, include only lowercase alphanumeric characters or dashes, and start with a letter. Example: my-plugin/my-custom-block');
3463      return;
3464    }
3465  
3466    if (Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_4__["select"])('core/blocks').getBlockType(name)) {
3467      console.error('Block "' + name + '" is already registered.');
3468      return;
3469    }
3470  
3471    settings = Object(_wordpress_hooks__WEBPACK_IMPORTED_MODULE_3__["applyFilters"])('blocks.registerBlockType', settings, name);
3472  
3473    if (!settings || !Object(lodash__WEBPACK_IMPORTED_MODULE_2__["isFunction"])(settings.save)) {
3474      console.error('The "save" property must be specified and must be a valid function.');
3475      return;
3476    }
3477  
3478    if ('edit' in settings && !Object(lodash__WEBPACK_IMPORTED_MODULE_2__["isFunction"])(settings.edit)) {
3479      console.error('The "edit" property must be a valid function.');
3480      return;
3481    }
3482  
3483    if ('keywords' in settings && settings.keywords.length > 3) {
3484      console.error('The block "' + name + '" can have a maximum of 3 keywords.');
3485      return;
3486    }
3487  
3488    if (!('category' in settings)) {
3489      console.error('The block "' + name + '" must have a category.');
3490      return;
3491    }
3492  
3493    if ('category' in settings && !Object(lodash__WEBPACK_IMPORTED_MODULE_2__["some"])(Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_4__["select"])('core/blocks').getCategories(), {
3494      slug: settings.category
3495    })) {
3496      console.error('The block "' + name + '" must have a registered category.');
3497      return;
3498    }
3499  
3500    if (!('title' in settings) || settings.title === '') {
3501      console.error('The block "' + name + '" must have a title.');
3502      return;
3503    }
3504  
3505    if (typeof settings.title !== 'string') {
3506      console.error('Block titles must be strings.');
3507      return;
3508    }
3509  
3510    settings.icon = Object(_utils__WEBPACK_IMPORTED_MODULE_6__["normalizeIconObject"])(settings.icon);
3511  
3512    if (!Object(_utils__WEBPACK_IMPORTED_MODULE_6__["isValidIcon"])(settings.icon.src)) {
3513      console.error('The icon passed is invalid. ' + 'The icon should be a string, an element, a function, or an object following the specifications documented in https://wordpress.org/gutenberg/handbook/block-api/#icon-optional');
3514      return;
3515    }
3516  
3517    Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_4__["dispatch"])('core/blocks').addBlockTypes(settings);
3518    return settings;
3519  }
3520  /**
3521   * Unregisters a block.
3522   *
3523   * @param {string} name Block name.
3524   *
3525   * @return {?WPBlock} The previous block value, if it has been successfully
3526   *                     unregistered; otherwise `undefined`.
3527   */
3528  
3529  function unregisterBlockType(name) {
3530    var oldBlock = Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_4__["select"])('core/blocks').getBlockType(name);
3531  
3532    if (!oldBlock) {
3533      console.error('Block "' + name + '" is not registered.');
3534      return;
3535    }
3536  
3537    Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_4__["dispatch"])('core/blocks').removeBlockTypes(name);
3538    return oldBlock;
3539  }
3540  /**
3541   * Assigns name of block handling unknown block types.
3542   *
3543   * @param {string} name Block name.
3544   */
3545  
3546  function setUnknownTypeHandlerName(name) {
3547    _wordpress_deprecated__WEBPACK_IMPORTED_MODULE_5___default()('setUnknownTypeHandlerName', {
3548      plugin: 'Gutenberg',
3549      version: '4.2',
3550      alternative: 'setFreeformContentHandlerName and setUnregisteredTypeHandlerName'
3551    });
3552    setFreeformContentHandlerName(name);
3553  }
3554  /**
3555   * Retrieves name of block handling unknown block types, or undefined if no
3556   * handler has been defined.
3557   *
3558   * @return {?string} Blog name.
3559   */
3560  
3561  function getUnknownTypeHandlerName() {
3562    _wordpress_deprecated__WEBPACK_IMPORTED_MODULE_5___default()('getUnknownTypeHandlerName', {
3563      plugin: 'Gutenberg',
3564      version: '4.2',
3565      alternative: 'getFreeformContentHandlerName and getUnregisteredTypeHandlerName'
3566    });
3567    return getFreeformContentHandlerName();
3568  }
3569  /**
3570   * Assigns name of block for handling non-block content.
3571   *
3572   * @param {string} name Block name.
3573   */
3574  
3575  function setFreeformContentHandlerName(name) {
3576    Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_4__["dispatch"])('core/blocks').setFreeformFallbackBlockName(name);
3577  }
3578  /**
3579   * Retrieves name of block handling non-block content, or undefined if no
3580   * handler has been defined.
3581   *
3582   * @return {?string} Blog name.
3583   */
3584  
3585  function getFreeformContentHandlerName() {
3586    return Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_4__["select"])('core/blocks').getFreeformFallbackBlockName();
3587  }
3588  /**
3589   * Assigns name of block handling unregistered block types.
3590   *
3591   * @param {string} name Block name.
3592   */
3593  
3594  function setUnregisteredTypeHandlerName(name) {
3595    Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_4__["dispatch"])('core/blocks').setUnregisteredFallbackBlockName(name);
3596  }
3597  /**
3598   * Retrieves name of block handling unregistered block types, or undefined if no
3599   * handler has been defined.
3600   *
3601   * @return {?string} Blog name.
3602   */
3603  
3604  function getUnregisteredTypeHandlerName() {
3605    return Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_4__["select"])('core/blocks').getUnregisteredFallbackBlockName();
3606  }
3607  /**
3608   * Assigns the default block name.
3609   *
3610   * @param {string} name Block name.
3611   */
3612  
3613  function setDefaultBlockName(name) {
3614    Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_4__["dispatch"])('core/blocks').setDefaultBlockName(name);
3615  }
3616  /**
3617   * Retrieves the default block name.
3618   *
3619   * @return {?string} Block name.
3620   */
3621  
3622  function getDefaultBlockName() {
3623    return Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_4__["select"])('core/blocks').getDefaultBlockName();
3624  }
3625  /**
3626   * Returns a registered block type.
3627   *
3628   * @param {string} name Block name.
3629   *
3630   * @return {?Object} Block type.
3631   */
3632  
3633  function getBlockType(name) {
3634    return Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_4__["select"])('core/blocks').getBlockType(name);
3635  }
3636  /**
3637   * Returns all registered blocks.
3638   *
3639   * @return {Array} Block settings.
3640   */
3641  
3642  function getBlockTypes() {
3643    return Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_4__["select"])('core/blocks').getBlockTypes();
3644  }
3645  /**
3646   * Returns the block support value for a feature, if defined.
3647   *
3648   * @param  {(string|Object)} nameOrType      Block name or type object
3649   * @param  {string}          feature         Feature to retrieve
3650   * @param  {*}               defaultSupports Default value to return if not
3651   *                                           explicitly defined
3652   *
3653   * @return {?*} Block support value
3654   */
3655  
3656  function getBlockSupport(nameOrType, feature, defaultSupports) {
3657    return Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_4__["select"])('core/blocks').getBlockSupport(nameOrType, feature, defaultSupports);
3658  }
3659  /**
3660   * Returns true if the block defines support for a feature, or false otherwise.
3661   *
3662   * @param {(string|Object)} nameOrType      Block name or type object.
3663   * @param {string}          feature         Feature to test.
3664   * @param {boolean}         defaultSupports Whether feature is supported by
3665   *                                          default if not explicitly defined.
3666   *
3667   * @return {boolean} Whether block supports feature.
3668   */
3669  
3670  function hasBlockSupport(nameOrType, feature, defaultSupports) {
3671    return Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_4__["select"])('core/blocks').hasBlockSupport(nameOrType, feature, defaultSupports);
3672  }
3673  /**
3674   * Determines whether or not the given block is a reusable block. This is a
3675   * special block type that is used to point to a global block stored via the
3676   * API.
3677   *
3678   * @param {Object} blockOrType Block or Block Type to test.
3679   *
3680   * @return {boolean} Whether the given block is a reusable block.
3681   */
3682  
3683  function isReusableBlock(blockOrType) {
3684    return blockOrType.name === 'core/block';
3685  }
3686  /**
3687   * Returns an array with the child blocks of a given block.
3688   *
3689   * @param {string} blockName Name of block (example: “latest-posts”).
3690   *
3691   * @return {Array} Array of child block names.
3692   */
3693  
3694  var getChildBlockNames = function getChildBlockNames(blockName) {
3695    return Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_4__["select"])('core/blocks').getChildBlockNames(blockName);
3696  };
3697  /**
3698   * Returns a boolean indicating if a block has child blocks or not.
3699   *
3700   * @param {string} blockName Name of block (example: “latest-posts”).
3701   *
3702   * @return {boolean} True if a block contains child blocks and false otherwise.
3703   */
3704  
3705  var hasChildBlocks = function hasChildBlocks(blockName) {
3706    return Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_4__["select"])('core/blocks').hasChildBlocks(blockName);
3707  };
3708  /**
3709   * Returns a boolean indicating if a block has at least one child block with inserter support.
3710   *
3711   * @param {string} blockName Block type name.
3712   *
3713   * @return {boolean} True if a block contains at least one child blocks with inserter support
3714   *                   and false otherwise.
3715   */
3716  
3717  var hasChildBlocksWithInserterSupport = function hasChildBlocksWithInserterSupport(blockName) {
3718    return Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_4__["select"])('core/blocks').hasChildBlocksWithInserterSupport(blockName);
3719  };
3720  /**
3721   * Registers a new block style variation for the given block.
3722   *
3723   * @param {string} blockName      Name of block (example: “core/latest-posts”).
3724   * @param {Object} styleVariation Object containing `name` which is the class name applied to the block and `label` which identifies the variation to the user.
3725   */
3726  
3727  var registerBlockStyle = function registerBlockStyle(blockName, styleVariation) {
3728    Object(_wordpress_hooks__WEBPACK_IMPORTED_MODULE_3__["addFilter"])('blocks.registerBlockType', "".concat(blockName, "/").concat(styleVariation.name), function (settings, name) {
3729      if (blockName !== name) {
3730        return settings;
3731      }
3732  
3733      return Object(_babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_1__["default"])({}, settings, {
3734        styles: Object(_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__["default"])(Object(lodash__WEBPACK_IMPORTED_MODULE_2__["get"])(settings, ['styles'], [])).concat([styleVariation])
3735      });
3736    });
3737  };
3738  
3739  
3740  /***/ }),
3741  
3742  /***/ "./node_modules/@wordpress/blocks/build-module/api/serializer.js":
3743  /*!***********************************************************************!*\
3744    !*** ./node_modules/@wordpress/blocks/build-module/api/serializer.js ***!
3745    \***********************************************************************/
3746  /*! exports provided: getBlockDefaultClassName, getBlockMenuDefaultClassName, getSaveElement, getSaveContent, getCommentAttributes, serializeAttributes, getBlockContent, getCommentDelimitedContent, serializeBlock, default */
3747  /***/ (function(module, __webpack_exports__, __webpack_require__) {
3748  
3749  "use strict";
3750  __webpack_require__.r(__webpack_exports__);
3751  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getBlockDefaultClassName", function() { return getBlockDefaultClassName; });
3752  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getBlockMenuDefaultClassName", function() { return getBlockMenuDefaultClassName; });
3753  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getSaveElement", function() { return getSaveElement; });
3754  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getSaveContent", function() { return getSaveContent; });
3755  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getCommentAttributes", function() { return getCommentAttributes; });
3756  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "serializeAttributes", function() { return serializeAttributes; });
3757  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getBlockContent", function() { return getBlockContent; });
3758  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getCommentDelimitedContent", function() { return getCommentDelimitedContent; });
3759  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "serializeBlock", function() { return serializeBlock; });
3760  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return serialize; });
3761  /* harmony import */ var _babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread */ "./node_modules/@babel/runtime/helpers/esm/objectSpread.js");
3762  /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
3763  /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__);
3764  /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash */ "lodash");
3765  /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_2__);
3766  /* harmony import */ var _wordpress_hooks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/hooks */ "@wordpress/hooks");
3767  /* harmony import */ var _wordpress_hooks__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_hooks__WEBPACK_IMPORTED_MODULE_3__);
3768  /* harmony import */ var _wordpress_is_shallow_equal__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/is-shallow-equal */ "@wordpress/is-shallow-equal");
3769  /* harmony import */ var _wordpress_is_shallow_equal__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_is_shallow_equal__WEBPACK_IMPORTED_MODULE_4__);
3770  /* harmony import */ var _registration__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./registration */ "./node_modules/@wordpress/blocks/build-module/api/registration.js");
3771  /* harmony import */ var _block_content_provider__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../block-content-provider */ "./node_modules/@wordpress/blocks/build-module/block-content-provider/index.js");
3772  
3773  
3774  
3775  /**
3776   * External dependencies
3777   */
3778  
3779  /**
3780   * WordPress dependencies
3781   */
3782  
3783  
3784  
3785  
3786  /**
3787   * Internal dependencies
3788   */
3789  
3790  
3791  
3792  /**
3793   * Returns the block's default classname from its name.
3794   *
3795   * @param {string} blockName The block name.
3796   *
3797   * @return {string} The block's default class.
3798   */
3799  
3800  function getBlockDefaultClassName(blockName) {
3801    // Generated HTML classes for blocks follow the `wp-block-{name}` nomenclature.
3802    // Blocks provided by WordPress drop the prefixes 'core/' or 'core-' (used in 'core-embed/').
3803    var className = 'wp-block-' + blockName.replace(/\//, '-').replace(/^core-/, '');
3804    return Object(_wordpress_hooks__WEBPACK_IMPORTED_MODULE_3__["applyFilters"])('blocks.getBlockDefaultClassName', className, blockName);
3805  }
3806  /**
3807   * Returns the block's default menu item classname from its name.
3808   *
3809   * @param {string} blockName The block name.
3810   *
3811   * @return {string} The block's default menu item class.
3812   */
3813  
3814  function getBlockMenuDefaultClassName(blockName) {
3815    // Generated HTML classes for blocks follow the `editor-block-list-item-{name}` nomenclature.
3816    // Blocks provided by WordPress drop the prefixes 'core/' or 'core-' (used in 'core-embed/').
3817    var className = 'editor-block-list-item-' + blockName.replace(/\//, '-').replace(/^core-/, '');
3818    return Object(_wordpress_hooks__WEBPACK_IMPORTED_MODULE_3__["applyFilters"])('blocks.getBlockMenuDefaultClassName', className, blockName);
3819  }
3820  /**
3821   * Given a block type containing a save render implementation and attributes, returns the
3822   * enhanced element to be saved or string when raw HTML expected.
3823   *
3824   * @param {Object} blockType   Block type.
3825   * @param {Object} attributes  Block attributes.
3826   * @param {?Array} innerBlocks Nested blocks.
3827   *
3828   * @return {Object|string} Save element or raw HTML string.
3829   */
3830  
3831  function getSaveElement(blockType, attributes) {
3832    var innerBlocks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
3833    var save = blockType.save; // Component classes are unsupported for save since serialization must
3834    // occur synchronously. For improved interoperability with higher-order
3835    // components which often return component class, emulate basic support.
3836  
3837    if (save.prototype instanceof _wordpress_element__WEBPACK_IMPORTED_MODULE_1__["Component"]) {
3838      var instance = new save({
3839        attributes: attributes
3840      });
3841      save = instance.render.bind(instance);
3842    }
3843  
3844    var element = save({
3845      attributes: attributes,
3846      innerBlocks: innerBlocks
3847    });
3848  
3849    if (Object(lodash__WEBPACK_IMPORTED_MODULE_2__["isObject"])(element) && Object(_wordpress_hooks__WEBPACK_IMPORTED_MODULE_3__["hasFilter"])('blocks.getSaveContent.extraProps')) {
3850      /**
3851       * Filters the props applied to the block save result element.
3852       *
3853       * @param {Object}      props      Props applied to save element.
3854       * @param {WPBlockType} blockType  Block type definition.
3855       * @param {Object}      attributes Block attributes.
3856       */
3857      var props = Object(_wordpress_hooks__WEBPACK_IMPORTED_MODULE_3__["applyFilters"])('blocks.getSaveContent.extraProps', Object(_babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_0__["default"])({}, element.props), blockType, attributes);
3858  
3859      if (!_wordpress_is_shallow_equal__WEBPACK_IMPORTED_MODULE_4___default()(props, element.props)) {
3860        element = Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["cloneElement"])(element, props);
3861      }
3862    }
3863    /**
3864     * Filters the save result of a block during serialization.
3865     *
3866     * @param {WPElement}   element    Block save result.
3867     * @param {WPBlockType} blockType  Block type definition.
3868     * @param {Object}      attributes Block attributes.
3869     */
3870  
3871  
3872    element = Object(_wordpress_hooks__WEBPACK_IMPORTED_MODULE_3__["applyFilters"])('blocks.getSaveElement', element, blockType, attributes);
3873    return Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["createElement"])(_block_content_provider__WEBPACK_IMPORTED_MODULE_6__["default"], {
3874      innerBlocks: innerBlocks
3875    }, element);
3876  }
3877  /**
3878   * Given a block type containing a save render implementation and attributes, returns the
3879   * static markup to be saved.
3880   *
3881   * @param {Object} blockType   Block type.
3882   * @param {Object} attributes  Block attributes.
3883   * @param {?Array} innerBlocks Nested blocks.
3884   *
3885   * @return {string} Save content.
3886   */
3887  
3888  function getSaveContent(blockType, attributes, innerBlocks) {
3889    return Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["renderToString"])(getSaveElement(blockType, attributes, innerBlocks));
3890  }
3891  /**
3892   * Returns attributes which are to be saved and serialized into the block
3893   * comment delimiter.
3894   *
3895   * When a block exists in memory it contains as its attributes both those
3896   * parsed the block comment delimiter _and_ those which matched from the
3897   * contents of the block.
3898   *
3899   * This function returns only those attributes which are needed to persist and
3900   * which cannot be matched from the block content.
3901   *
3902   * @param {Object<string,*>} allAttributes Attributes from in-memory block data.
3903   * @param {Object<string,*>} blockType     Block type.
3904   *
3905   * @return {Object<string,*>} Subset of attributes for comment serialization.
3906   */
3907  
3908  function getCommentAttributes(allAttributes, blockType) {
3909    var attributes = Object(lodash__WEBPACK_IMPORTED_MODULE_2__["reduce"])(blockType.attributes, function (result, attributeSchema, key) {
3910      var value = allAttributes[key]; // Ignore undefined values.
3911  
3912      if (undefined === value) {
3913        return result;
3914      } // Ignore all attributes but the ones with an "undefined" source
3915      // "undefined" source refers to attributes saved in the block comment.
3916  
3917  
3918      if (attributeSchema.source !== undefined) {
3919        return result;
3920      } // Ignore default value.
3921  
3922  
3923      if ('default' in attributeSchema && attributeSchema.default === value) {
3924        return result;
3925      } // Otherwise, include in comment set.
3926  
3927  
3928      result[key] = value;
3929      return result;
3930    }, {});
3931    return attributes;
3932  }
3933  /**
3934   * Given an attributes object, returns a string in the serialized attributes
3935   * format prepared for post content.
3936   *
3937   * @param {Object} attributes Attributes object.
3938   *
3939   * @return {string} Serialized attributes.
3940   */
3941  
3942  function serializeAttributes(attributes) {
3943    return JSON.stringify(attributes) // Don't break HTML comments.
3944    .replace(/--/g, "\\u002d\\u002d") // Don't break non-standard-compliant tools.
3945    .replace(/</g, "\\u003c").replace(/>/g, "\\u003e").replace(/&/g, "\\u0026") // Bypass server stripslashes behavior which would unescape stringify's
3946    // escaping of quotation mark.
3947    //
3948    // See: https://developer.wordpress.org/reference/functions/wp_kses_stripslashes/
3949    .replace(/\\"/g, "\\u0022");
3950  }
3951  /**
3952   * Given a block object, returns the Block's Inner HTML markup.
3953   *
3954   * @param {Object} block Block Object.
3955   *
3956   * @return {string} HTML.
3957   */
3958  
3959  function getBlockContent(block) {
3960    // @todo why not getBlockInnerHtml?
3961    var blockType = Object(_registration__WEBPACK_IMPORTED_MODULE_5__["getBlockType"])(block.name); // If block was parsed as invalid or encounters an error while generating
3962    // save content, use original content instead to avoid content loss. If a
3963    // block contains nested content, exempt it from this condition because we
3964    // otherwise have no access to its original content and content loss would
3965    // still occur.
3966  
3967    var saveContent = block.originalContent;
3968  
3969    if (block.isValid || block.innerBlocks.length) {
3970      try {
3971        saveContent = getSaveContent(blockType, block.attributes, block.innerBlocks);
3972      } catch (error) {}
3973    }
3974  
3975    return saveContent;
3976  }
3977  /**
3978   * Returns the content of a block, including comment delimiters.
3979   *
3980   * @param {string} rawBlockName Block name.
3981   * @param {Object} attributes   Block attributes.
3982   * @param {string} content      Block save content.
3983   *
3984   * @return {string} Comment-delimited block content.
3985   */
3986  
3987  function getCommentDelimitedContent(rawBlockName, attributes, content) {
3988    var serializedAttributes = !Object(lodash__WEBPACK_IMPORTED_MODULE_2__["isEmpty"])(attributes) ? serializeAttributes(attributes) + ' ' : ''; // Strip core blocks of their namespace prefix.
3989  
3990    var blockName = Object(lodash__WEBPACK_IMPORTED_MODULE_2__["startsWith"])(rawBlockName, 'core/') ? rawBlockName.slice(5) : rawBlockName; // @todo make the `wp:` prefix potentially configurable.
3991  
3992    if (!content) {
3993      return "<!-- wp:".concat(blockName, " ").concat(serializedAttributes, "/-->");
3994    }
3995  
3996    return "<!-- wp:".concat(blockName, " ").concat(serializedAttributes, "-->\n") + content + "\n<!-- /wp:".concat(blockName, " -->");
3997  }
3998  /**
3999   * Returns the content of a block, including comment delimiters, determining
4000   * serialized attributes and content form from the current state of the block.
4001   *
4002   * @param {Object} block Block instance.
4003   *
4004   * @return {string} Serialized block.
4005   */
4006  
4007  function serializeBlock(block) {
4008    var blockName = block.name;
4009    var blockType = Object(_registration__WEBPACK_IMPORTED_MODULE_5__["getBlockType"])(blockName);
4010    var saveContent = getBlockContent(block);
4011    var saveAttributes = getCommentAttributes(block.attributes, blockType);
4012  
4013    switch (blockName) {
4014      case Object(_registration__WEBPACK_IMPORTED_MODULE_5__["getFreeformContentHandlerName"])():
4015      case Object(_registration__WEBPACK_IMPORTED_MODULE_5__["getUnregisteredTypeHandlerName"])():
4016        return saveContent;
4017  
4018      default:
4019        return getCommentDelimitedContent(blockName, saveAttributes, saveContent);
4020    }
4021  }
4022  /**
4023   * Takes a block or set of blocks and returns the serialized post content.
4024   *
4025   * @param {Array} blocks Block(s) to serialize.
4026   *
4027   * @return {string} The post content.
4028   */
4029  
4030  function serialize(blocks) {
4031    return Object(lodash__WEBPACK_IMPORTED_MODULE_2__["castArray"])(blocks).map(serializeBlock).join('\n\n');
4032  }
4033  
4034  
4035  /***/ }),
4036  
4037  /***/ "./node_modules/@wordpress/blocks/build-module/api/templates.js":
4038  /*!**********************************************************************!*\
4039    !*** ./node_modules/@wordpress/blocks/build-module/api/templates.js ***!
4040    \**********************************************************************/
4041  /*! exports provided: doBlocksMatchTemplate, synchronizeBlocksWithTemplate */
4042  /***/ (function(module, __webpack_exports__, __webpack_require__) {
4043  
4044  "use strict";
4045  __webpack_require__.r(__webpack_exports__);
4046  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "doBlocksMatchTemplate", function() { return doBlocksMatchTemplate; });
4047  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "synchronizeBlocksWithTemplate", function() { return synchronizeBlocksWithTemplate; });
4048  /* harmony import */ var _babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread */ "./node_modules/@babel/runtime/helpers/esm/objectSpread.js");
4049  /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "./node_modules/@babel/runtime/helpers/esm/slicedToArray.js");
4050  /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash */ "lodash");
4051  /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_2__);
4052  /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
4053  /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_3__);
4054  /* harmony import */ var _factory__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./factory */ "./node_modules/@wordpress/blocks/build-module/api/factory.js");
4055  /* harmony import */ var _registration__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./registration */ "./node_modules/@wordpress/blocks/build-module/api/registration.js");
4056  
4057  
4058  
4059  /**
4060   * External dependencies
4061   */
4062  
4063  /**
4064   * WordPress dependencies
4065   */
4066  
4067  
4068  /**
4069   * Internal dependencies
4070   */
4071  
4072  
4073  
4074  /**
4075   * Checks whether a list of blocks matches a template by comparing the block names.
4076   *
4077   * @param {Array} blocks    Block list.
4078   * @param {Array} template  Block template.
4079   *
4080   * @return {boolean}        Whether the list of blocks matches a templates
4081   */
4082  
4083  function doBlocksMatchTemplate() {
4084    var blocks = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
4085    var template = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
4086    return blocks.length === template.length && Object(lodash__WEBPACK_IMPORTED_MODULE_2__["every"])(template, function (_ref, index) {
4087      var _ref2 = Object(_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(_ref, 3),
4088          name = _ref2[0],
4089          innerBlocksTemplate = _ref2[2];
4090  
4091      var block = blocks[index];
4092      return name === block.name && doBlocksMatchTemplate(block.innerBlocks, innerBlocksTemplate);
4093    });
4094  }
4095  /**
4096   * Synchronize a block list with a block template.
4097   *
4098   * Synchronizing a block list with a block template means that we loop over the blocks
4099   * keep the block as is if it matches the block at the same position in the template
4100   * (If it has the same name) and if doesn't match, we create a new block based on the template.
4101   * Extra blocks not present in the template are removed.
4102   *
4103   * @param {Array} blocks    Block list.
4104   * @param {Array} template  Block template.
4105   *
4106   * @return {Array}          Updated Block list.
4107   */
4108  
4109  function synchronizeBlocksWithTemplate() {
4110    var blocks = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
4111    var template = arguments.length > 1 ? arguments[1] : undefined;
4112  
4113    // If no template is provided, return blocks unmodified.
4114    if (!template) {
4115      return blocks;
4116    }
4117  
4118    return Object(lodash__WEBPACK_IMPORTED_MODULE_2__["map"])(template, function (_ref3, index) {
4119      var _ref4 = Object(_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(_ref3, 3),
4120          name = _ref4[0],
4121          attributes = _ref4[1],
4122          innerBlocksTemplate = _ref4[2];
4123  
4124      var block = blocks[index];
4125  
4126      if (block && block.name === name) {
4127        var innerBlocks = synchronizeBlocksWithTemplate(block.innerBlocks, innerBlocksTemplate);
4128        return Object(_babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_0__["default"])({}, block, {
4129          innerBlocks: innerBlocks
4130        });
4131      } // To support old templates that were using the "children" format
4132      // for the attributes using "html" strings now, we normalize the template attributes
4133      // before creating the blocks.
4134  
4135  
4136      var blockType = Object(_registration__WEBPACK_IMPORTED_MODULE_5__["getBlockType"])(name);
4137  
4138      var isHTMLAttribute = function isHTMLAttribute(attributeDefinition) {
4139        return Object(lodash__WEBPACK_IMPORTED_MODULE_2__["get"])(attributeDefinition, ['source']) === 'html';
4140      };
4141  
4142      var isQueryAttribute = function isQueryAttribute(attributeDefinition) {
4143        return Object(lodash__WEBPACK_IMPORTED_MODULE_2__["get"])(attributeDefinition, ['source']) === 'query';
4144      };
4145  
4146      var normalizeAttributes = function normalizeAttributes(schema, values) {
4147        return Object(lodash__WEBPACK_IMPORTED_MODULE_2__["mapValues"])(values, function (value, key) {
4148          return normalizeAttribute(schema[key], value);
4149        });
4150      };
4151  
4152      var normalizeAttribute = function normalizeAttribute(definition, value) {
4153        if (isHTMLAttribute(definition) && Object(lodash__WEBPACK_IMPORTED_MODULE_2__["isArray"])(value)) {
4154          // Introduce a deprecated call at this point
4155          // When we're confident that "children" format should be removed from the templates.
4156          return Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_3__["renderToString"])(value);
4157        }
4158  
4159        if (isQueryAttribute(definition) && value) {
4160          return value.map(function (subValues) {
4161            return normalizeAttributes(definition.query, subValues);
4162          });
4163        }
4164  
4165        return value;
4166      };
4167  
4168      var normalizedAttributes = normalizeAttributes(Object(lodash__WEBPACK_IMPORTED_MODULE_2__["get"])(blockType, ['attributes'], {}), attributes);
4169      return Object(_factory__WEBPACK_IMPORTED_MODULE_4__["createBlock"])(name, normalizedAttributes, synchronizeBlocksWithTemplate([], innerBlocksTemplate));
4170    });
4171  }
4172  
4173  
4174  /***/ }),
4175  
4176  /***/ "./node_modules/@wordpress/blocks/build-module/api/utils.js":
4177  /*!******************************************************************!*\
4178    !*** ./node_modules/@wordpress/blocks/build-module/api/utils.js ***!
4179    \******************************************************************/
4180  /*! exports provided: isUnmodifiedDefaultBlock, isValidIcon, normalizeIconObject */
4181  /***/ (function(module, __webpack_exports__, __webpack_require__) {
4182  
4183  "use strict";
4184  __webpack_require__.r(__webpack_exports__);
4185  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isUnmodifiedDefaultBlock", function() { return isUnmodifiedDefaultBlock; });
4186  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isValidIcon", function() { return isValidIcon; });
4187  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "normalizeIconObject", function() { return normalizeIconObject; });
4188  /* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ "./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js");
4189  /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
4190  /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__);
4191  /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash */ "lodash");
4192  /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_2__);
4193  /* harmony import */ var tinycolor2__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! tinycolor2 */ "./node_modules/tinycolor2/tinycolor.js");
4194  /* harmony import */ var tinycolor2__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(tinycolor2__WEBPACK_IMPORTED_MODULE_3__);
4195  /* harmony import */ var _wordpress_hooks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/hooks */ "@wordpress/hooks");
4196  /* harmony import */ var _wordpress_hooks__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_hooks__WEBPACK_IMPORTED_MODULE_4__);
4197  /* harmony import */ var _registration__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./registration */ "./node_modules/@wordpress/blocks/build-module/api/registration.js");
4198  /* harmony import */ var _factory__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./factory */ "./node_modules/@wordpress/blocks/build-module/api/factory.js");
4199  
4200  
4201  
4202  /**
4203   * External dependencies
4204   */
4205  
4206  
4207  /**
4208   * WordPress dependencies
4209   */
4210  
4211  
4212  
4213  /**
4214   * Internal dependencies
4215   */
4216  
4217  
4218  
4219  /**
4220   * Array of icon colors containing a color to be used if the icon color
4221   * was not explicitly set but the icon background color was.
4222   *
4223   * @type {Object}
4224   */
4225  
4226  var ICON_COLORS = ['#191e23', '#f8f9f9'];
4227  /**
4228   * Determines whether the block is a default block
4229   * and its attributes are equal to the default attributes
4230   * which means the block is unmodified.
4231   *
4232   * @param  {WPBlock} block Block Object
4233   *
4234   * @return {boolean}       Whether the block is an unmodified default block
4235   */
4236  
4237  function isUnmodifiedDefaultBlock(block) {
4238    var defaultBlockName = Object(_registration__WEBPACK_IMPORTED_MODULE_5__["getDefaultBlockName"])();
4239  
4240    if (block.name !== defaultBlockName) {
4241      return false;
4242    }
4243  
4244    var newDefaultBlock = Object(_factory__WEBPACK_IMPORTED_MODULE_6__["createBlock"])(defaultBlockName);
4245    var attributeKeys = Object(_wordpress_hooks__WEBPACK_IMPORTED_MODULE_4__["applyFilters"])('blocks.isUnmodifiedDefaultBlock.attributes', Object(_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__["default"])(Object(lodash__WEBPACK_IMPORTED_MODULE_2__["keys"])(newDefaultBlock.attributes)).concat(Object(_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__["default"])(Object(lodash__WEBPACK_IMPORTED_MODULE_2__["keys"])(block.attributes))));
4246    return Object(lodash__WEBPACK_IMPORTED_MODULE_2__["every"])(attributeKeys, function (key) {
4247      return Object(lodash__WEBPACK_IMPORTED_MODULE_2__["isEqual"])(newDefaultBlock.attributes[key], block.attributes[key]);
4248    });
4249  }
4250  /**
4251   * Function that checks if the parameter is a valid icon.
4252   *
4253   * @param {*} icon  Parameter to be checked.
4254   *
4255   * @return {boolean} True if the parameter is a valid icon and false otherwise.
4256   */
4257  
4258  function isValidIcon(icon) {
4259    return !!icon && (Object(lodash__WEBPACK_IMPORTED_MODULE_2__["isString"])(icon) || Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["isValidElement"])(icon) || Object(lodash__WEBPACK_IMPORTED_MODULE_2__["isFunction"])(icon) || icon instanceof _wordpress_element__WEBPACK_IMPORTED_MODULE_1__["Component"]);
4260  }
4261  /**
4262   * Function that receives an icon as set by the blocks during the registration
4263   * and returns a new icon object that is normalized so we can rely on just on possible icon structure
4264   * in the codebase.
4265   *
4266   * @param {(Object|string|WPElement)} icon  Slug of the Dashicon to be shown
4267   *                                          as the icon for the block in the
4268   *                                          inserter, or element or an object describing the icon.
4269   *
4270   * @return {Object} Object describing the icon.
4271   */
4272  
4273  function normalizeIconObject(icon) {
4274    if (!icon) {
4275      return {
4276        src: Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["createElement"])("svg", {
4277          xmlns: "http://www.w3.org/2000/svg",
4278          viewBox: "0 0 24 24"
4279        }, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["createElement"])("path", {
4280          d: "M19 7h-1V5h-4v2h-4V5H6v2H5c-1.1 0-2 .9-2 2v10h18V9c0-1.1-.9-2-2-2zm0 10H5V9h14v8z"
4281        }))
4282      };
4283    }
4284  
4285    if (isValidIcon(icon)) {
4286      return {
4287        src: icon
4288      };
4289    }
4290  
4291    if (icon.background) {
4292      var tinyBgColor = tinycolor2__WEBPACK_IMPORTED_MODULE_3___default()(icon.background);
4293  
4294      if (!icon.foreground) {
4295        var foreground = Object(tinycolor2__WEBPACK_IMPORTED_MODULE_3__["mostReadable"])(tinyBgColor, ICON_COLORS, {
4296          includeFallbackColors: true,
4297          level: 'AA',
4298          size: 'large'
4299        }).toHexString();
4300        icon.foreground = foreground;
4301      }
4302  
4303      icon.shadowColor = tinyBgColor.setAlpha(0.3).toRgbString();
4304    }
4305  
4306    return icon;
4307  }
4308  
4309  
4310  /***/ }),
4311  
4312  /***/ "./node_modules/@wordpress/blocks/build-module/api/validation.js":
4313  /*!***********************************************************************!*\
4314    !*** ./node_modules/@wordpress/blocks/build-module/api/validation.js ***!
4315    \***********************************************************************/
4316  /*! exports provided: getTextPiecesSplitOnWhitespace, getTextWithCollapsedWhitespace, getMeaningfulAttributePairs, isEqualTextTokensWithCollapsedWhitespace, getNormalizedStyleValue, getStyleProperties, isEqualAttributesOfName, isEqualTagAttributePairs, isEqualTokensOfType, getNextNonWhitespaceToken, isEquivalentHTML, isValidBlock */
4317  /***/ (function(module, __webpack_exports__, __webpack_require__) {
4318  
4319  "use strict";
4320  __webpack_require__.r(__webpack_exports__);
4321  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getTextPiecesSplitOnWhitespace", function() { return getTextPiecesSplitOnWhitespace; });
4322  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getTextWithCollapsedWhitespace", function() { return getTextWithCollapsedWhitespace; });
4323  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getMeaningfulAttributePairs", function() { return getMeaningfulAttributePairs; });
4324  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isEqualTextTokensWithCollapsedWhitespace", function() { return isEqualTextTokensWithCollapsedWhitespace; });
4325  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getNormalizedStyleValue", function() { return getNormalizedStyleValue; });
4326  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getStyleProperties", function() { return getStyleProperties; });
4327  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isEqualAttributesOfName", function() { return isEqualAttributesOfName; });
4328  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isEqualTagAttributePairs", function() { return isEqualTagAttributePairs; });
4329  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isEqualTokensOfType", function() { return isEqualTokensOfType; });
4330  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getNextNonWhitespaceToken", function() { return getNextNonWhitespaceToken; });
4331  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isEquivalentHTML", function() { return isEquivalentHTML; });
4332  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isValidBlock", function() { return isValidBlock; });
4333  /* harmony import */ var _babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread */ "./node_modules/@babel/runtime/helpers/esm/objectSpread.js");
4334  /* harmony import */ var _babel_runtime_helpers_esm_toArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toArray */ "./node_modules/@babel/runtime/helpers/esm/toArray.js");
4335  /* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ "./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js");
4336  /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "./node_modules/@babel/runtime/helpers/esm/slicedToArray.js");
4337  /* harmony import */ var simple_html_tokenizer__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! simple-html-tokenizer */ "./node_modules/simple-html-tokenizer/dist/es6/index.js");
4338  /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! lodash */ "lodash");
4339  /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_5__);
4340  /* harmony import */ var _serializer__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./serializer */ "./node_modules/@wordpress/blocks/build-module/api/serializer.js");
4341  
4342  
4343  
4344  
4345  
4346  /**
4347   * External dependencies
4348   */
4349  
4350  
4351  /**
4352   * Internal dependencies
4353   */
4354  
4355  
4356  /**
4357   * Globally matches any consecutive whitespace
4358   *
4359   * @type {RegExp}
4360   */
4361  
4362  var REGEXP_WHITESPACE = /[\t\n\r\v\f ]+/g;
4363  /**
4364   * Matches a string containing only whitespace
4365   *
4366   * @type {RegExp}
4367   */
4368  
4369  var REGEXP_ONLY_WHITESPACE = /^[\t\n\r\v\f ]*$/;
4370  /**
4371   * Matches a CSS URL type value
4372   *
4373   * @type {RegExp}
4374   */
4375  
4376  var REGEXP_STYLE_URL_TYPE = /^url\s*\(['"\s]*(.*?)['"\s]*\)$/;
4377  /**
4378   * Boolean attributes are attributes whose presence as being assigned is
4379   * meaningful, even if only empty.
4380   *
4381   * See: https://html.spec.whatwg.org/multipage/common-microsyntaxes.html#boolean-attributes
4382   * Extracted from: https://html.spec.whatwg.org/multipage/indices.html#attributes-3
4383   *
4384   * Object.keys( [ ...document.querySelectorAll( '#attributes-1 > tbody > tr' ) ]
4385   *     .filter( ( tr ) => tr.lastChild.textContent.indexOf( 'Boolean attribute' ) !== -1 )
4386   *     .reduce( ( result, tr ) => Object.assign( result, {
4387   *         [ tr.firstChild.textContent.trim() ]: true
4388   *     } ), {} ) ).sort();
4389   *
4390   * @type {Array}
4391   */
4392  
4393  var BOOLEAN_ATTRIBUTES = ['allowfullscreen', 'allowpaymentrequest', 'allowusermedia', 'async', 'autofocus', 'autoplay', 'checked', 'controls', 'default', 'defer', 'disabled', 'formnovalidate', 'hidden', 'ismap', 'itemscope', 'loop', 'multiple', 'muted', 'nomodule', 'novalidate', 'open', 'playsinline', 'readonly', 'required', 'reversed', 'selected', 'typemustmatch'];
4394  /**
4395   * Enumerated attributes are attributes which must be of a specific value form.
4396   * Like boolean attributes, these are meaningful if specified, even if not of a
4397   * valid enumerated value.
4398   *
4399   * See: https://html.spec.whatwg.org/multipage/common-microsyntaxes.html#enumerated-attribute
4400   * Extracted from: https://html.spec.whatwg.org/multipage/indices.html#attributes-3
4401   *
4402   * Object.keys( [ ...document.querySelectorAll( '#attributes-1 > tbody > tr' ) ]
4403   *     .filter( ( tr ) => /^("(.+?)";?\s*)+/.test( tr.lastChild.textContent.trim() ) )
4404   *     .reduce( ( result, tr ) => Object.assign( result, {
4405   *         [ tr.firstChild.textContent.trim() ]: true
4406   *     } ), {} ) ).sort();
4407   *
4408   * @type {Array}
4409   */
4410  
4411  var ENUMERATED_ATTRIBUTES = ['autocapitalize', 'autocomplete', 'charset', 'contenteditable', 'crossorigin', 'decoding', 'dir', 'draggable', 'enctype', 'formenctype', 'formmethod', 'http-equiv', 'inputmode', 'kind', 'method', 'preload', 'scope', 'shape', 'spellcheck', 'translate', 'type', 'wrap'];
4412  /**
4413   * Meaningful attributes are those who cannot be safely ignored when omitted in
4414   * one HTML markup string and not another.
4415   *
4416   * @type {Array}
4417   */
4418  
4419  var MEANINGFUL_ATTRIBUTES = BOOLEAN_ATTRIBUTES.concat(ENUMERATED_ATTRIBUTES);
4420  /**
4421   * Object of logger functions.
4422   */
4423  
4424  var log = function () {
4425    /**
4426     * Creates a logger with block validation prefix.
4427     *
4428     * @param {Function} logger Original logger function.
4429     *
4430     * @return {Function} Augmented logger function.
4431     */
4432    function createLogger(logger) {
4433      // In test environments, pre-process the sprintf message to improve
4434      // readability of error messages. We'd prefer to avoid pulling in this
4435      // dependency in runtime environments, and it can be dropped by a combo
4436      // of Webpack env substitution + UglifyJS dead code elimination.
4437      if (false) {}
4438  
4439      return function (message) {
4440        for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
4441          args[_key - 1] = arguments[_key];
4442        }
4443  
4444        return logger.apply(void 0, ['Block validation: ' + message].concat(args));
4445      };
4446    }
4447  
4448    return {
4449      /* eslint-disable no-console */
4450      error: createLogger(console.error),
4451      warning: createLogger(console.warn)
4452      /* eslint-enable no-console */
4453  
4454    };
4455  }();
4456  /**
4457   * Given a specified string, returns an array of strings split by consecutive
4458   * whitespace, ignoring leading or trailing whitespace.
4459   *
4460   * @param {string} text Original text.
4461   *
4462   * @return {string[]} Text pieces split on whitespace.
4463   */
4464  
4465  
4466  function getTextPiecesSplitOnWhitespace(text) {
4467    return text.trim().split(REGEXP_WHITESPACE);
4468  }
4469  /**
4470   * Given a specified string, returns a new trimmed string where all consecutive
4471   * whitespace is collapsed to a single space.
4472   *
4473   * @param {string} text Original text.
4474   *
4475   * @return {string} Trimmed text with consecutive whitespace collapsed.
4476   */
4477  
4478  function getTextWithCollapsedWhitespace(text) {
4479    return getTextPiecesSplitOnWhitespace(text).join(' ');
4480  }
4481  /**
4482   * Returns attribute pairs of the given StartTag token, including only pairs
4483   * where the value is non-empty or the attribute is a boolean attribute, an
4484   * enumerated attribute, or a custom data- attribute.
4485   *
4486   * @see MEANINGFUL_ATTRIBUTES
4487   *
4488   * @param {Object} token StartTag token.
4489   *
4490   * @return {Array[]} Attribute pairs.
4491   */
4492  
4493  function getMeaningfulAttributePairs(token) {
4494    return token.attributes.filter(function (pair) {
4495      var _pair = Object(_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__["default"])(pair, 2),
4496          key = _pair[0],
4497          value = _pair[1];
4498  
4499      return value || key.indexOf('data-') === 0 || Object(lodash__WEBPACK_IMPORTED_MODULE_5__["includes"])(MEANINGFUL_ATTRIBUTES, key);
4500    });
4501  }
4502  /**
4503   * Returns true if two text tokens (with `chars` property) are equivalent, or
4504   * false otherwise.
4505   *
4506   * @param {Object} actual   Actual token.
4507   * @param {Object} expected Expected token.
4508   *
4509   * @return {boolean} Whether two text tokens are equivalent.
4510   */
4511  
4512  function isEqualTextTokensWithCollapsedWhitespace(actual, expected) {
4513    // This is an overly simplified whitespace comparison. The specification is
4514    // more prescriptive of whitespace behavior in inline and block contexts.
4515    //
4516    // See: https://medium.com/@patrickbrosset/when-does-white-space-matter-in-html-b90e8a7cdd33
4517    var isEquivalentText = lodash__WEBPACK_IMPORTED_MODULE_5__["isEqual"].apply(void 0, Object(_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_2__["default"])([actual.chars, expected.chars].map(getTextWithCollapsedWhitespace)));
4518  
4519    if (!isEquivalentText) {
4520      log.warning('Expected text `%s`, saw `%s`.', expected.chars, actual.chars);
4521    }
4522  
4523    return isEquivalentText;
4524  }
4525  /**
4526   * Given a style value, returns a normalized style value for strict equality
4527   * comparison.
4528   *
4529   * @param {string} value Style value.
4530   *
4531   * @return {string} Normalized style value.
4532   */
4533  
4534  function getNormalizedStyleValue(value) {
4535    return value // Normalize URL type to omit whitespace or quotes
4536    .replace(REGEXP_STYLE_URL_TYPE, 'url($1)');
4537  }
4538  /**
4539   * Given a style attribute string, returns an object of style properties.
4540   *
4541   * @param {string} text Style attribute.
4542   *
4543   * @return {Object} Style properties.
4544   */
4545  
4546  function getStyleProperties(text) {
4547    var pairs = text // Trim ending semicolon (avoid including in split)
4548    .replace(/;?\s*$/, '') // Split on property assignment
4549    .split(';') // For each property assignment...
4550    .map(function (style) {
4551      // ...split further into key-value pairs
4552      var _style$split = style.split(':'),
4553          _style$split2 = Object(_babel_runtime_helpers_esm_toArray__WEBPACK_IMPORTED_MODULE_1__["default"])(_style$split),
4554          key = _style$split2[0],
4555          valueParts = _style$split2.slice(1);
4556  
4557      var value = valueParts.join(':');
4558      return [key.trim(), getNormalizedStyleValue(value.trim())];
4559    });
4560    return Object(lodash__WEBPACK_IMPORTED_MODULE_5__["fromPairs"])(pairs);
4561  }
4562  /**
4563   * Attribute-specific equality handlers
4564   *
4565   * @type {Object}
4566   */
4567  
4568  var isEqualAttributesOfName = Object(_babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_0__["default"])({
4569    class: function _class(actual, expected) {
4570      // Class matches if members are the same, even if out of order or
4571      // superfluous whitespace between.
4572      return !lodash__WEBPACK_IMPORTED_MODULE_5__["xor"].apply(void 0, Object(_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_2__["default"])([actual, expected].map(getTextPiecesSplitOnWhitespace))).length;
4573    },
4574    style: function style(actual, expected) {
4575      return lodash__WEBPACK_IMPORTED_MODULE_5__["isEqual"].apply(void 0, Object(_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_2__["default"])([actual, expected].map(getStyleProperties)));
4576    }
4577  }, Object(lodash__WEBPACK_IMPORTED_MODULE_5__["fromPairs"])(BOOLEAN_ATTRIBUTES.map(function (attribute) {
4578    return [attribute, lodash__WEBPACK_IMPORTED_MODULE_5__["stubTrue"]];
4579  })));
4580  /**
4581   * Given two sets of attribute tuples, returns true if the attribute sets are
4582   * equivalent.
4583   *
4584   * @param {Array[]} actual   Actual attributes tuples.
4585   * @param {Array[]} expected Expected attributes tuples.
4586   *
4587   * @return {boolean} Whether attributes are equivalent.
4588   */
4589  
4590  function isEqualTagAttributePairs(actual, expected) {
4591    // Attributes is tokenized as tuples. Their lengths should match. This also
4592    // avoids us needing to check both attributes sets, since if A has any keys
4593    // which do not exist in B, we know the sets to be different.
4594    if (actual.length !== expected.length) {
4595      log.warning('Expected attributes %o, instead saw %o.', expected, actual);
4596      return false;
4597    } // Convert tuples to object for ease of lookup
4598  
4599  
4600    var _map = [actual, expected].map(lodash__WEBPACK_IMPORTED_MODULE_5__["fromPairs"]),
4601        _map2 = Object(_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__["default"])(_map, 2),
4602        actualAttributes = _map2[0],
4603        expectedAttributes = _map2[1];
4604  
4605    for (var name in actualAttributes) {
4606      // As noted above, if missing member in B, assume different
4607      if (!expectedAttributes.hasOwnProperty(name)) {
4608        log.warning('Encountered unexpected attribute `%s`.', name);
4609        return false;
4610      }
4611  
4612      var actualValue = actualAttributes[name];
4613      var expectedValue = expectedAttributes[name];
4614      var isEqualAttributes = isEqualAttributesOfName[name];
4615  
4616      if (isEqualAttributes) {
4617        // Defer custom attribute equality handling
4618        if (!isEqualAttributes(actualValue, expectedValue)) {
4619          log.warning('Expected attribute `%s` of value `%s`, saw `%s`.', name, expectedValue, actualValue);
4620          return false;
4621        }
4622      } else if (actualValue !== expectedValue) {
4623        // Otherwise strict inequality should bail
4624        log.warning('Expected attribute `%s` of value `%s`, saw `%s`.', name, expectedValue, actualValue);
4625        return false;
4626      }
4627    }
4628  
4629    return true;
4630  }
4631  /**
4632   * Token-type-specific equality handlers
4633   *
4634   * @type {Object}
4635   */
4636  
4637  var isEqualTokensOfType = {
4638    StartTag: function StartTag(actual, expected) {
4639      if (actual.tagName !== expected.tagName) {
4640        log.warning('Expected tag name `%s`, instead saw `%s`.', expected.tagName, actual.tagName);
4641        return false;
4642      }
4643  
4644      return isEqualTagAttributePairs.apply(void 0, Object(_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_2__["default"])([actual, expected].map(getMeaningfulAttributePairs)));
4645    },
4646    Chars: isEqualTextTokensWithCollapsedWhitespace,
4647    Comment: isEqualTextTokensWithCollapsedWhitespace
4648  };
4649  /**
4650   * Given an array of tokens, returns the first token which is not purely
4651   * whitespace.
4652   *
4653   * Mutates the tokens array.
4654   *
4655   * @param {Object[]} tokens Set of tokens to search.
4656   *
4657   * @return {Object} Next non-whitespace token.
4658   */
4659  
4660  function getNextNonWhitespaceToken(tokens) {
4661    var token;
4662  
4663    while (token = tokens.shift()) {
4664      if (token.type !== 'Chars') {
4665        return token;
4666      }
4667  
4668      if (!REGEXP_ONLY_WHITESPACE.test(token.chars)) {
4669        return token;
4670      }
4671    }
4672  }
4673  /**
4674   * Tokenize an HTML string, gracefully handling any errors thrown during
4675   * underlying tokenization.
4676   *
4677   * @param {string} html HTML string to tokenize.
4678   *
4679   * @return {Object[]|null} Array of valid tokenized HTML elements, or null on error
4680   */
4681  
4682  function getHTMLTokens(html) {
4683    try {
4684      return Object(simple_html_tokenizer__WEBPACK_IMPORTED_MODULE_4__["tokenize"])(html);
4685    } catch (e) {
4686      log.warning('Malformed HTML detected: %s', html);
4687    }
4688  
4689    return null;
4690  }
4691  /**
4692   * Returns true if the given HTML strings are effectively equivalent, or
4693   * false otherwise. Invalid HTML is not considered equivalent, even if the
4694   * strings directly match.
4695   *
4696   * @param {string} actual Actual HTML string.
4697   * @param {string} expected Expected HTML string.
4698   *
4699   * @return {boolean} Whether HTML strings are equivalent.
4700   */
4701  
4702  
4703  function isEquivalentHTML(actual, expected) {
4704    // Tokenize input content and reserialized save content
4705    var _map3 = [actual, expected].map(getHTMLTokens),
4706        _map4 = Object(_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__["default"])(_map3, 2),
4707        actualTokens = _map4[0],
4708        expectedTokens = _map4[1]; // If either is malformed then stop comparing - the strings are not equivalent
4709  
4710  
4711    if (!actualTokens || !expectedTokens) {
4712      return false;
4713    }
4714  
4715    var actualToken, expectedToken;
4716  
4717    while (actualToken = getNextNonWhitespaceToken(actualTokens)) {
4718      expectedToken = getNextNonWhitespaceToken(expectedTokens); // Inequal if exhausted all expected tokens
4719  
4720      if (!expectedToken) {
4721        log.warning('Expected end of content, instead saw %o.', actualToken);
4722        return false;
4723      } // Inequal if next non-whitespace token of each set are not same type
4724  
4725  
4726      if (actualToken.type !== expectedToken.type) {
4727        log.warning('Expected token of type `%s` (%o), instead saw `%s` (%o).', expectedToken.type, expectedToken, actualToken.type, actualToken);
4728        return false;
4729      } // Defer custom token type equality handling, otherwise continue and
4730      // assume as equal
4731  
4732  
4733      var isEqualTokens = isEqualTokensOfType[actualToken.type];
4734  
4735      if (isEqualTokens && !isEqualTokens(actualToken, expectedToken)) {
4736        return false;
4737      }
4738    }
4739  
4740    if (expectedToken = getNextNonWhitespaceToken(expectedTokens)) {
4741      // If any non-whitespace tokens remain in expected token set, this
4742      // indicates inequality
4743      log.warning('Expected %o, instead saw end of content.', expectedToken);
4744      return false;
4745    }
4746  
4747    return true;
4748  }
4749  /**
4750   * Returns true if the parsed block is valid given the input content. A block
4751   * is considered valid if, when serialized with assumed attributes, the content
4752   * matches the original value.
4753   *
4754   * Logs to console in development environments when invalid.
4755   *
4756   * @param {string} innerHTML  Original block content.
4757   * @param {string} blockType  Block type.
4758   * @param {Object} attributes Parsed block attributes.
4759   *
4760   * @return {boolean} Whether block is valid.
4761   */
4762  
4763  function isValidBlock(innerHTML, blockType, attributes) {
4764    var saveContent;
4765  
4766    try {
4767      saveContent = Object(_serializer__WEBPACK_IMPORTED_MODULE_6__["getSaveContent"])(blockType, attributes);
4768    } catch (error) {
4769      log.error('Block validation failed because an error occurred while generating block content:\n\n%s', error.toString());
4770      return false;
4771    }
4772  
4773    var isValid = isEquivalentHTML(innerHTML, saveContent);
4774  
4775    if (!isValid) {
4776      log.error('Block validation failed for `%s` (%o).\n\nExpected:\n\n%s\n\nActual:\n\n%s', blockType.name, blockType, saveContent, innerHTML);
4777    }
4778  
4779    return isValid;
4780  }
4781  
4782  
4783  /***/ }),
4784  
4785  /***/ "./node_modules/@wordpress/blocks/build-module/block-content-provider/index.js":
4786  /*!*************************************************************************************!*\
4787    !*** ./node_modules/@wordpress/blocks/build-module/block-content-provider/index.js ***!
4788    \*************************************************************************************/
4789  /*! exports provided: withBlockContentContext, default */
4790  /***/ (function(module, __webpack_exports__, __webpack_require__) {
4791  
4792  "use strict";
4793  __webpack_require__.r(__webpack_exports__);
4794  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "withBlockContentContext", function() { return withBlockContentContext; });
4795  /* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "./node_modules/@babel/runtime/helpers/esm/extends.js");
4796  /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
4797  /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__);
4798  /* harmony import */ var _wordpress_compose__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/compose */ "@wordpress/compose");
4799  /* harmony import */ var _wordpress_compose__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_compose__WEBPACK_IMPORTED_MODULE_2__);
4800  /* harmony import */ var _api__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../api */ "./node_modules/@wordpress/blocks/build-module/api/index.js");
4801  
4802  
4803  
4804  /**
4805   * WordPress dependencies
4806   */
4807  
4808  
4809  /**
4810   * Internal dependencies
4811   */
4812  
4813  
4814  
4815  var _createContext = Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["createContext"])(function () {}),
4816      Consumer = _createContext.Consumer,
4817      Provider = _createContext.Provider;
4818  /**
4819   * An internal block component used in block content serialization to inject
4820   * nested block content within the `save` implementation of the ancestor
4821   * component in which it is nested. The component provides a pre-bound
4822   * `BlockContent` component via context, which is used by the developer-facing
4823   * `InnerBlocks.Content` component to render block content.
4824   *
4825   * @example
4826   *
4827   * ```jsx
4828   * <BlockContentProvider innerBlocks={ innerBlocks }>
4829   *     { blockSaveElement }
4830   * </BlockContentProvider>
4831   * ```
4832   *
4833   * @return {WPElement} Element with BlockContent injected via context.
4834   */
4835  
4836  
4837  var BlockContentProvider = function BlockContentProvider(_ref) {
4838    var children = _ref.children,
4839        innerBlocks = _ref.innerBlocks;
4840  
4841    var BlockContent = function BlockContent() {
4842      // Value is an array of blocks, so defer to block serializer
4843      var html = Object(_api__WEBPACK_IMPORTED_MODULE_3__["serialize"])(innerBlocks); // Use special-cased raw HTML tag to avoid default escaping
4844  
4845      return Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["createElement"])(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["RawHTML"], null, html);
4846    };
4847  
4848    return Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["createElement"])(Provider, {
4849      value: BlockContent
4850    }, children);
4851  };
4852  /**
4853   * A Higher Order Component used to inject BlockContent using context to the
4854   * wrapped component.
4855   *
4856   * @return {Component} Enhanced component with injected BlockContent as prop.
4857   */
4858  
4859  
4860  var withBlockContentContext = Object(_wordpress_compose__WEBPACK_IMPORTED_MODULE_2__["createHigherOrderComponent"])(function (OriginalComponent) {
4861    return function (props) {
4862      return Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["createElement"])(Consumer, null, function (context) {
4863        return Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["createElement"])(OriginalComponent, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, props, {
4864          BlockContent: context
4865        }));
4866      });
4867    };
4868  }, 'withBlockContentContext');
4869  /* harmony default export */ __webpack_exports__["default"] = (BlockContentProvider);
4870  
4871  
4872  /***/ }),
4873  
4874  /***/ "./node_modules/@wordpress/blocks/build-module/index.js":
4875  /*!**************************************************************!*\
4876    !*** ./node_modules/@wordpress/blocks/build-module/index.js ***!
4877    \**************************************************************/
4878  /*! exports provided: withBlockContentContext, createBlock, cloneBlock, getPossibleBlockTransformations, switchToBlockType, getBlockTransforms, findTransform, parse, getBlockAttributes, parseWithAttributeSchema, rawHandler, getPhrasingContentSchema, serialize, getBlockContent, getBlockDefaultClassName, getBlockMenuDefaultClassName, getSaveElement, getSaveContent, isValidBlock, getCategories, setCategories, registerBlockType, unregisterBlockType, setUnknownTypeHandlerName, getUnknownTypeHandlerName, setFreeformContentHandlerName, getFreeformContentHandlerName, setUnregisteredTypeHandlerName, getUnregisteredTypeHandlerName, setDefaultBlockName, getDefaultBlockName, getBlockType, getBlockTypes, getBlockSupport, hasBlockSupport, isReusableBlock, getChildBlockNames, hasChildBlocks, hasChildBlocksWithInserterSupport, unstable__bootstrapServerSideBlockDefinitions, registerBlockStyle, isUnmodifiedDefaultBlock, normalizeIconObject, isValidIcon, doBlocksMatchTemplate, synchronizeBlocksWithTemplate, children, node */
4879  /***/ (function(module, __webpack_exports__, __webpack_require__) {
4880  
4881  "use strict";
4882  __webpack_require__.r(__webpack_exports__);
4883  /* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./store */ "./node_modules/@wordpress/blocks/build-module/store/index.js");
4884  /* harmony import */ var _api__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./api */ "./node_modules/@wordpress/blocks/build-module/api/index.js");
4885  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "createBlock", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["createBlock"]; });
4886  
4887  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "cloneBlock", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["cloneBlock"]; });
4888  
4889  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getPossibleBlockTransformations", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["getPossibleBlockTransformations"]; });
4890  
4891  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "switchToBlockType", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["switchToBlockType"]; });
4892  
4893  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getBlockTransforms", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["getBlockTransforms"]; });
4894  
4895  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "findTransform", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["findTransform"]; });
4896  
4897  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "parse", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["parse"]; });
4898  
4899  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getBlockAttributes", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["getBlockAttributes"]; });
4900  
4901  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "parseWithAttributeSchema", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["parseWithAttributeSchema"]; });
4902  
4903  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "rawHandler", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["rawHandler"]; });
4904  
4905  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getPhrasingContentSchema", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["getPhrasingContentSchema"]; });
4906  
4907  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "serialize", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["serialize"]; });
4908  
4909  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getBlockContent", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["getBlockContent"]; });
4910  
4911  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getBlockDefaultClassName", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["getBlockDefaultClassName"]; });
4912  
4913  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getBlockMenuDefaultClassName", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["getBlockMenuDefaultClassName"]; });
4914  
4915  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getSaveElement", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["getSaveElement"]; });
4916  
4917  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getSaveContent", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["getSaveContent"]; });
4918  
4919  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isValidBlock", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["isValidBlock"]; });
4920  
4921  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getCategories", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["getCategories"]; });
4922  
4923  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setCategories", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["setCategories"]; });
4924  
4925  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "registerBlockType", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["registerBlockType"]; });
4926  
4927  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "unregisterBlockType", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["unregisterBlockType"]; });
4928  
4929  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setUnknownTypeHandlerName", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["setUnknownTypeHandlerName"]; });
4930  
4931  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getUnknownTypeHandlerName", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["getUnknownTypeHandlerName"]; });
4932  
4933  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setFreeformContentHandlerName", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["setFreeformContentHandlerName"]; });
4934  
4935  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getFreeformContentHandlerName", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["getFreeformContentHandlerName"]; });
4936  
4937  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setUnregisteredTypeHandlerName", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["setUnregisteredTypeHandlerName"]; });
4938  
4939  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getUnregisteredTypeHandlerName", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["getUnregisteredTypeHandlerName"]; });
4940  
4941  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setDefaultBlockName", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["setDefaultBlockName"]; });
4942  
4943  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getDefaultBlockName", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["getDefaultBlockName"]; });
4944  
4945  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getBlockType", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["getBlockType"]; });
4946  
4947  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getBlockTypes", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["getBlockTypes"]; });
4948  
4949  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getBlockSupport", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["getBlockSupport"]; });
4950  
4951  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "hasBlockSupport", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["hasBlockSupport"]; });
4952  
4953  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isReusableBlock", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["isReusableBlock"]; });
4954  
4955  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getChildBlockNames", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["getChildBlockNames"]; });
4956  
4957  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "hasChildBlocks", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["hasChildBlocks"]; });
4958  
4959  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "hasChildBlocksWithInserterSupport", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["hasChildBlocksWithInserterSupport"]; });
4960  
4961  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "unstable__bootstrapServerSideBlockDefinitions", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["unstable__bootstrapServerSideBlockDefinitions"]; });
4962  
4963  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "registerBlockStyle", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["registerBlockStyle"]; });
4964  
4965  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isUnmodifiedDefaultBlock", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["isUnmodifiedDefaultBlock"]; });
4966  
4967  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "normalizeIconObject", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["normalizeIconObject"]; });
4968  
4969  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isValidIcon", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["isValidIcon"]; });
4970  
4971  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "doBlocksMatchTemplate", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["doBlocksMatchTemplate"]; });
4972  
4973  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "synchronizeBlocksWithTemplate", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["synchronizeBlocksWithTemplate"]; });
4974  
4975  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "children", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["children"]; });
4976  
4977  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "node", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["node"]; });
4978  
4979  /* harmony import */ var _block_content_provider__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./block-content-provider */ "./node_modules/@wordpress/blocks/build-module/block-content-provider/index.js");
4980  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "withBlockContentContext", function() { return _block_content_provider__WEBPACK_IMPORTED_MODULE_2__["withBlockContentContext"]; });
4981  
4982  // A "block" is the abstract term used to describe units of markup that,
4983  // when composed together, form the content or layout of a page.
4984  // The API for blocks is exposed via `wp.blocks`.
4985  //
4986  // Supported blocks are registered by calling `registerBlockType`. Once registered,
4987  // the block is made available as an option to the editor interface.
4988  //
4989  // Blocks are inferred from the HTML source of a post through a parsing mechanism
4990  // and then stored as objects in state, from which it is then rendered for editing.
4991  
4992  
4993  
4994  
4995  
4996  /***/ }),
4997  
4998  /***/ "./node_modules/@wordpress/blocks/build-module/store/actions.js":
4999  /*!**********************************************************************!*\
5000    !*** ./node_modules/@wordpress/blocks/build-module/store/actions.js ***!
5001    \**********************************************************************/
5002  /*! exports provided: addBlockTypes, removeBlockTypes, setDefaultBlockName, setFallbackBlockName, setFreeformFallbackBlockName, setUnregisteredFallbackBlockName, setCategories */
5003  /***/ (function(module, __webpack_exports__, __webpack_require__) {
5004  
5005  "use strict";
5006  __webpack_require__.r(__webpack_exports__);
5007  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addBlockTypes", function() { return addBlockTypes; });
5008  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeBlockTypes", function() { return removeBlockTypes; });
5009  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setDefaultBlockName", function() { return setDefaultBlockName; });
5010  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setFallbackBlockName", function() { return setFallbackBlockName; });
5011  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setFreeformFallbackBlockName", function() { return setFreeformFallbackBlockName; });
5012  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setUnregisteredFallbackBlockName", function() { return setUnregisteredFallbackBlockName; });
5013  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setCategories", function() { return setCategories; });
5014  /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash */ "lodash");
5015  /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_0__);
5016  /* harmony import */ var _wordpress_deprecated__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/deprecated */ "@wordpress/deprecated");
5017  /* harmony import */ var _wordpress_deprecated__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_deprecated__WEBPACK_IMPORTED_MODULE_1__);
5018  /**
5019   * External dependencies
5020   */
5021  
5022  /**
5023   * WordPress dependencies
5024   */
5025  
5026  
5027  /**
5028   * Returns an action object used in signalling that block types have been added.
5029   *
5030   * @param {Array|Object} blockTypes Block types received.
5031   *
5032   * @return {Object} Action object.
5033   */
5034  
5035  function addBlockTypes(blockTypes) {
5036    return {
5037      type: 'ADD_BLOCK_TYPES',
5038      blockTypes: Object(lodash__WEBPACK_IMPORTED_MODULE_0__["castArray"])(blockTypes)
5039    };
5040  }
5041  /**
5042   * Returns an action object used to remove a registered block type.
5043   *
5044   * @param {string|Array} names Block name.
5045   *
5046   * @return {Object} Action object.
5047   */
5048  
5049  function removeBlockTypes(names) {
5050    return {
5051      type: 'REMOVE_BLOCK_TYPES',
5052      names: Object(lodash__WEBPACK_IMPORTED_MODULE_0__["castArray"])(names)
5053    };
5054  }
5055  /**
5056   * Returns an action object used to set the default block name.
5057   *
5058   * @param {string} name Block name.
5059   *
5060   * @return {Object} Action object.
5061   */
5062  
5063  function setDefaultBlockName(name) {
5064    return {
5065      type: 'SET_DEFAULT_BLOCK_NAME',
5066      name: name
5067    };
5068  }
5069  /**
5070   * Returns an action object used to set the name of the block used as a fallback
5071   * for non-block content.
5072   *
5073   * @param {string} name Block name.
5074   *
5075   * @return {Object} Action object.
5076   */
5077  
5078  function setFallbackBlockName(name) {
5079    _wordpress_deprecated__WEBPACK_IMPORTED_MODULE_1___default()('setFallbackBlockName', {
5080      plugin: 'Gutenberg',
5081      version: '4.2',
5082      alternative: 'setFreeformFallbackBlockName and setUnregisteredFallbackBlockName'
5083    });
5084    return setFreeformFallbackBlockName(name);
5085  }
5086  /**
5087   * Returns an action object used to set the name of the block used as a fallback
5088   * for non-block content.
5089   *
5090   * @param {string} name Block name.
5091   *
5092   * @return {Object} Action object.
5093   */
5094  
5095  function setFreeformFallbackBlockName(name) {
5096    return {
5097      type: 'SET_FREEFORM_FALLBACK_BLOCK_NAME',
5098      name: name
5099    };
5100  }
5101  /**
5102   * Returns an action object used to set the name of the block used as a fallback
5103   * for unregistered blocks.
5104   *
5105   * @param {string} name Block name.
5106   *
5107   * @return {Object} Action object.
5108   */
5109  
5110  function setUnregisteredFallbackBlockName(name) {
5111    return {
5112      type: 'SET_UNREGISTERED_FALLBACK_BLOCK_NAME',
5113      name: name
5114    };
5115  }
5116  /**
5117   * Returns an action object used to set block categories.
5118   *
5119   * @param {Object[]} categories Block categories.
5120   *
5121   * @return {Object} Action object.
5122   */
5123  
5124  function setCategories(categories) {
5125    return {
5126      type: 'SET_CATEGORIES',
5127      categories: categories
5128    };
5129  }
5130  
5131  
5132  /***/ }),
5133  
5134  /***/ "./node_modules/@wordpress/blocks/build-module/store/index.js":
5135  /*!********************************************************************!*\
5136    !*** ./node_modules/@wordpress/blocks/build-module/store/index.js ***!
5137    \********************************************************************/
5138  /*! no exports provided */
5139  /***/ (function(module, __webpack_exports__, __webpack_require__) {
5140  
5141  "use strict";
5142  __webpack_require__.r(__webpack_exports__);
5143  /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/data */ "@wordpress/data");
5144  /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_0__);
5145  /* harmony import */ var _reducer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./reducer */ "./node_modules/@wordpress/blocks/build-module/store/reducer.js");
5146  /* harmony import */ var _selectors__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./selectors */ "./node_modules/@wordpress/blocks/build-module/store/selectors.js");
5147  /* harmony import */ var _actions__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./actions */ "./node_modules/@wordpress/blocks/build-module/store/actions.js");
5148  /**
5149   * WordPress dependencies
5150   */
5151  
5152  /**
5153   * Internal dependencies
5154   */
5155  
5156  
5157  
5158  
5159  Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_0__["registerStore"])('core/blocks', {
5160    reducer: _reducer__WEBPACK_IMPORTED_MODULE_1__["default"],
5161    selectors: _selectors__WEBPACK_IMPORTED_MODULE_2__,
5162    actions: _actions__WEBPACK_IMPORTED_MODULE_3__
5163  });
5164  
5165  
5166  /***/ }),
5167  
5168  /***/ "./node_modules/@wordpress/blocks/build-module/store/reducer.js":
5169  /*!**********************************************************************!*\
5170    !*** ./node_modules/@wordpress/blocks/build-module/store/reducer.js ***!
5171    \**********************************************************************/
5172  /*! exports provided: DEFAULT_CATEGORIES, blockTypes, createBlockNameSetterReducer, defaultBlockName, freeformFallbackBlockName, unregisteredFallbackBlockName, categories, default */
5173  /***/ (function(module, __webpack_exports__, __webpack_require__) {
5174  
5175  "use strict";
5176  __webpack_require__.r(__webpack_exports__);
5177  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DEFAULT_CATEGORIES", function() { return DEFAULT_CATEGORIES; });
5178  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "blockTypes", function() { return blockTypes; });
5179  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createBlockNameSetterReducer", function() { return createBlockNameSetterReducer; });
5180  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "defaultBlockName", function() { return defaultBlockName; });
5181  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "freeformFallbackBlockName", function() { return freeformFallbackBlockName; });
5182  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "unregisteredFallbackBlockName", function() { return unregisteredFallbackBlockName; });
5183  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "categories", function() { return categories; });
5184  /* harmony import */ var _babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread */ "./node_modules/@babel/runtime/helpers/esm/objectSpread.js");
5185  /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash */ "lodash");
5186  /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_1__);
5187  /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/data */ "@wordpress/data");
5188  /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_2__);
5189  /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
5190  /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__);
5191  
5192  
5193  /**
5194   * External dependencies
5195   */
5196  
5197  /**
5198   * WordPress dependencies
5199   */
5200  
5201  
5202  
5203  /**
5204   * Module Constants
5205   */
5206  
5207  var DEFAULT_CATEGORIES = [{
5208    slug: 'common',
5209    title: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__["__"])('Common Blocks')
5210  }, {
5211    slug: 'formatting',
5212    title: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__["__"])('Formatting')
5213  }, {
5214    slug: 'layout',
5215    title: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__["__"])('Layout Elements')
5216  }, {
5217    slug: 'widgets',
5218    title: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__["__"])('Widgets')
5219  }, {
5220    slug: 'embed',
5221    title: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__["__"])('Embeds')
5222  }, {
5223    slug: 'reusable',
5224    title: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__["__"])('Reusable Blocks')
5225  }];
5226  /**
5227   * Reducer managing the block types
5228   *
5229   * @param {Object} state  Current state.
5230   * @param {Object} action Dispatched action.
5231   *
5232   * @return {Object} Updated state.
5233   */
5234  
5235  function blockTypes() {
5236    var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
5237    var action = arguments.length > 1 ? arguments[1] : undefined;
5238  
5239    switch (action.type) {
5240      case 'ADD_BLOCK_TYPES':
5241        return Object(_babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_0__["default"])({}, state, Object(lodash__WEBPACK_IMPORTED_MODULE_1__["keyBy"])(action.blockTypes, 'name'));
5242  
5243      case 'REMOVE_BLOCK_TYPES':
5244        return Object(lodash__WEBPACK_IMPORTED_MODULE_1__["omit"])(state, action.names);
5245    }
5246  
5247    return state;
5248  }
5249  /**
5250   * Higher-order Reducer creating a reducer keeping track of given block name.
5251   *
5252   * @param {string} setActionType  Action type.
5253   *
5254   * @return {function} Reducer.
5255   */
5256  
5257  function createBlockNameSetterReducer(setActionType) {
5258    return function () {
5259      var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
5260      var action = arguments.length > 1 ? arguments[1] : undefined;
5261  
5262      switch (action.type) {
5263        case 'REMOVE_BLOCK_TYPES':
5264          if (action.names.indexOf(state) !== -1) {
5265            return null;
5266          }
5267  
5268          return state;
5269  
5270        case setActionType:
5271          return action.name || null;
5272      }
5273  
5274      return state;
5275    };
5276  }
5277  var defaultBlockName = createBlockNameSetterReducer('SET_DEFAULT_BLOCK_NAME');
5278  var freeformFallbackBlockName = createBlockNameSetterReducer('SET_FREEFORM_FALLBACK_BLOCK_NAME');
5279  var unregisteredFallbackBlockName = createBlockNameSetterReducer('SET_UNREGISTERED_FALLBACK_BLOCK_NAME');
5280  /**
5281   * Reducer managing the categories
5282   *
5283   * @param {Object} state  Current state.
5284   * @param {Object} action Dispatched action.
5285   *
5286   * @return {Object} Updated state.
5287   */
5288  
5289  function categories() {
5290    var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_CATEGORIES;
5291    var action = arguments.length > 1 ? arguments[1] : undefined;
5292  
5293    if (action.type === 'SET_CATEGORIES') {
5294      return action.categories || [];
5295    }
5296  
5297    return state;
5298  }
5299  /* harmony default export */ __webpack_exports__["default"] = (Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_2__["combineReducers"])({
5300    blockTypes: blockTypes,
5301    defaultBlockName: defaultBlockName,
5302    freeformFallbackBlockName: freeformFallbackBlockName,
5303    unregisteredFallbackBlockName: unregisteredFallbackBlockName,
5304    categories: categories
5305  }));
5306  
5307  
5308  /***/ }),
5309  
5310  /***/ "./node_modules/@wordpress/blocks/build-module/store/selectors.js":
5311  /*!************************************************************************!*\
5312    !*** ./node_modules/@wordpress/blocks/build-module/store/selectors.js ***!
5313    \************************************************************************/
5314  /*! exports provided: getBlockTypes, getBlockType, getCategories, getDefaultBlockName, getFallbackBlockName, getFreeformFallbackBlockName, getUnregisteredFallbackBlockName, getChildBlockNames, getBlockSupport, hasBlockSupport, hasChildBlocks, hasChildBlocksWithInserterSupport */
5315  /***/ (function(module, __webpack_exports__, __webpack_require__) {
5316  
5317  "use strict";
5318  __webpack_require__.r(__webpack_exports__);
5319  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getBlockTypes", function() { return getBlockTypes; });
5320  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getBlockType", function() { return getBlockType; });
5321  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getCategories", function() { return getCategories; });
5322  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getDefaultBlockName", function() { return getDefaultBlockName; });
5323  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getFallbackBlockName", function() { return getFallbackBlockName; });
5324  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getFreeformFallbackBlockName", function() { return getFreeformFallbackBlockName; });
5325  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getUnregisteredFallbackBlockName", function() { return getUnregisteredFallbackBlockName; });
5326  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getChildBlockNames", function() { return getChildBlockNames; });
5327  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getBlockSupport", function() { return getBlockSupport; });
5328  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "hasBlockSupport", function() { return hasBlockSupport; });
5329  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "hasChildBlocks", function() { return hasChildBlocks; });
5330  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "hasChildBlocksWithInserterSupport", function() { return hasChildBlocksWithInserterSupport; });
5331  /* harmony import */ var rememo__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rememo */ "./node_modules/rememo/es/rememo.js");
5332  /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash */ "lodash");
5333  /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_1__);
5334  /* harmony import */ var _wordpress_deprecated__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/deprecated */ "@wordpress/deprecated");
5335  /* harmony import */ var _wordpress_deprecated__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_deprecated__WEBPACK_IMPORTED_MODULE_2__);
5336  /**
5337   * External dependencies
5338   */
5339  
5340  
5341  /**
5342   * WordPress dependencies
5343   */
5344  
5345  
5346  /**
5347   * Returns all the available block types.
5348   *
5349   * @param {Object} state Data state.
5350   *
5351   * @return {Array} Block Types.
5352   */
5353  
5354  var getBlockTypes = Object(rememo__WEBPACK_IMPORTED_MODULE_0__["default"])(function (state) {
5355    return Object.values(state.blockTypes);
5356  }, function (state) {
5357    return [state.blockTypes];
5358  });
5359  /**
5360   * Returns a block type by name.
5361   *
5362   * @param {Object} state Data state.
5363   * @param {string} name Block type name.
5364   *
5365   * @return {Object?} Block Type.
5366   */
5367  
5368  function getBlockType(state, name) {
5369    return state.blockTypes[name];
5370  }
5371  /**
5372   * Returns all the available categories.
5373   *
5374   * @param {Object} state Data state.
5375   *
5376   * @return {Array} Categories list.
5377   */
5378  
5379  function getCategories(state) {
5380    return state.categories;
5381  }
5382  /**
5383   * Returns the name of the default block name.
5384   *
5385   * @param {Object} state Data state.
5386   *
5387   * @return {string?} Default block name.
5388   */
5389  
5390  function getDefaultBlockName(state) {
5391    return state.defaultBlockName;
5392  }
5393  /**
5394   * Returns the name of the fallback block name.
5395   *
5396   * @param {Object} state Data state.
5397   *
5398   * @return {string?} Fallback block name.
5399   */
5400  
5401  function getFallbackBlockName(state) {
5402    _wordpress_deprecated__WEBPACK_IMPORTED_MODULE_2___default()('getFallbackBlockName', {
5403      plugin: 'Gutenberg',
5404      version: '4.2',
5405      alternative: 'getFreeformFallbackBlockName and getUnregisteredFallbackBlockName'
5406    });
5407    return getFreeformFallbackBlockName(state);
5408  }
5409  /**
5410   * Returns the name of the block for handling non-block content.
5411   *
5412   * @param {Object} state Data state.
5413   *
5414   * @return {string?} Name of the block for handling non-block content.
5415   */
5416  
5417  function getFreeformFallbackBlockName(state) {
5418    return state.freeformFallbackBlockName;
5419  }
5420  /**
5421   * Returns the name of the block for handling unregistered blocks.
5422   *
5423   * @param {Object} state Data state.
5424   *
5425   * @return {string?} Name of the block for handling unregistered blocks.
5426   */
5427  
5428  function getUnregisteredFallbackBlockName(state) {
5429    return state.unregisteredFallbackBlockName;
5430  }
5431  /**
5432   * Returns an array with the child blocks of a given block.
5433   *
5434   * @param {Object} state     Data state.
5435   * @param {string} blockName Block type name.
5436   *
5437   * @return {Array} Array of child block names.
5438   */
5439  
5440  var getChildBlockNames = Object(rememo__WEBPACK_IMPORTED_MODULE_0__["default"])(function (state, blockName) {
5441    return Object(lodash__WEBPACK_IMPORTED_MODULE_1__["map"])(Object(lodash__WEBPACK_IMPORTED_MODULE_1__["filter"])(state.blockTypes, function (blockType) {
5442      return Object(lodash__WEBPACK_IMPORTED_MODULE_1__["includes"])(blockType.parent, blockName);
5443    }), function (_ref) {
5444      var name = _ref.name;
5445      return name;
5446    });
5447  }, function (state) {
5448    return [state.blockTypes];
5449  });
5450  /**
5451   * Returns the block support value for a feature, if defined.
5452   *
5453   * @param  {Object}          state           Data state.
5454   * @param  {(string|Object)} nameOrType      Block name or type object
5455   * @param  {string}          feature         Feature to retrieve
5456   * @param  {*}               defaultSupports Default value to return if not
5457   *                                           explicitly defined
5458   *
5459   * @return {?*} Block support value
5460   */
5461  
5462  var getBlockSupport = function getBlockSupport(state, nameOrType, feature, defaultSupports) {
5463    var blockType = 'string' === typeof nameOrType ? getBlockType(state, nameOrType) : nameOrType;
5464    return Object(lodash__WEBPACK_IMPORTED_MODULE_1__["get"])(blockType, ['supports', feature], defaultSupports);
5465  };
5466  /**
5467   * Returns true if the block defines support for a feature, or false otherwise.
5468   *
5469   * @param  {Object}         state           Data state.
5470   * @param {(string|Object)} nameOrType      Block name or type object.
5471   * @param {string}          feature         Feature to test.
5472   * @param {boolean}         defaultSupports Whether feature is supported by
5473   *                                          default if not explicitly defined.
5474   *
5475   * @return {boolean} Whether block supports feature.
5476   */
5477  
5478  function hasBlockSupport(state, nameOrType, feature, defaultSupports) {
5479    return !!getBlockSupport(state, nameOrType, feature, defaultSupports);
5480  }
5481  /**
5482   * Returns a boolean indicating if a block has child blocks or not.
5483   *
5484   * @param {Object} state     Data state.
5485   * @param {string} blockName Block type name.
5486   *
5487   * @return {boolean} True if a block contains child blocks and false otherwise.
5488   */
5489  
5490  var hasChildBlocks = function hasChildBlocks(state, blockName) {
5491    return getChildBlockNames(state, blockName).length > 0;
5492  };
5493  /**
5494   * Returns a boolean indicating if a block has at least one child block with inserter support.
5495   *
5496   * @param {Object} state     Data state.
5497   * @param {string} blockName Block type name.
5498   *
5499   * @return {boolean} True if a block contains at least one child blocks with inserter support
5500   *                   and false otherwise.
5501   */
5502  
5503  var hasChildBlocksWithInserterSupport = function hasChildBlocksWithInserterSupport(state, blockName) {
5504    return Object(lodash__WEBPACK_IMPORTED_MODULE_1__["some"])(getChildBlockNames(state, blockName), function (childBlockName) {
5505      return hasBlockSupport(state, childBlockName, 'inserter', true);
5506    });
5507  };
5508  
5509  
5510  /***/ }),
5511  
5512  /***/ "./node_modules/hpq/es/get-path.js":
5513  /*!*****************************************!*\
5514    !*** ./node_modules/hpq/es/get-path.js ***!
5515    \*****************************************/
5516  /*! exports provided: default */
5517  /***/ (function(module, __webpack_exports__, __webpack_require__) {
5518  
5519  "use strict";
5520  __webpack_require__.r(__webpack_exports__);
5521  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return getPath; });
5522  /**
5523   * Given object and string of dot-delimited path segments, returns value at
5524   * path or undefined if path cannot be resolved.
5525   *
5526   * @param  {Object} object Lookup object
5527   * @param  {string} path   Path to resolve
5528   * @return {?*}            Resolved value
5529   */
5530  function getPath(object, path) {
5531    var segments = path.split('.');
5532    var segment;
5533  
5534    while (segment = segments.shift()) {
5535      if (!(segment in object)) {
5536        return;
5537      }
5538  
5539      object = object[segment];
5540    }
5541  
5542    return object;
5543  }
5544  
5545  /***/ }),
5546  
5547  /***/ "./node_modules/hpq/es/index.js":
5548  /*!**************************************!*\
5549    !*** ./node_modules/hpq/es/index.js ***!
5550    \**************************************/
5551  /*! exports provided: parse, prop, attr, html, text, query */
5552  /***/ (function(module, __webpack_exports__, __webpack_require__) {
5553  
5554  "use strict";
5555  __webpack_require__.r(__webpack_exports__);
5556  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "parse", function() { return parse; });
5557  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "prop", function() { return prop; });
5558  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "attr", function() { return attr; });
5559  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "html", function() { return html; });
5560  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "text", function() { return text; });
5561  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "query", function() { return query; });
5562  /* harmony import */ var _get_path__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./get-path */ "./node_modules/hpq/es/get-path.js");
5563  /**
5564   * Internal dependencies
5565   */
5566  
5567  /**
5568   * Function returning a DOM document created by `createHTMLDocument`. The same
5569   * document is returned between invocations.
5570   *
5571   * @return {Document} DOM document.
5572   */
5573  
5574  var getDocument = function () {
5575    var doc;
5576    return function () {
5577      if (!doc) {
5578        doc = document.implementation.createHTMLDocument('');
5579      }
5580  
5581      return doc;
5582    };
5583  }();
5584  /**
5585   * Given a markup string or DOM element, creates an object aligning with the
5586   * shape of the matchers object, or the value returned by the matcher.
5587   *
5588   * @param  {(string|Element)}  source   Source content
5589   * @param  {(Object|Function)} matchers Matcher function or object of matchers
5590   * @return {(Object|*)}                 Matched value(s), shaped by object
5591   */
5592  
5593  
5594  function parse(source, matchers) {
5595    if (!matchers) {
5596      return;
5597    } // Coerce to element
5598  
5599  
5600    if ('string' === typeof source) {
5601      var doc = getDocument();
5602      doc.body.innerHTML = source;
5603      source = doc.body;
5604    } // Return singular value
5605  
5606  
5607    if ('function' === typeof matchers) {
5608      return matchers(source);
5609    } // Bail if we can't handle matchers
5610  
5611  
5612    if (Object !== matchers.constructor) {
5613      return;
5614    } // Shape result by matcher object
5615  
5616  
5617    return Object.keys(matchers).reduce(function (memo, key) {
5618      memo[key] = parse(source, matchers[key]);
5619      return memo;
5620    }, {});
5621  }
5622  /**
5623   * Generates a function which matches node of type selector, returning an
5624   * attribute by property if the attribute exists. If no selector is passed,
5625   * returns property of the query element.
5626   *
5627   * @param  {?string} selector Optional selector
5628   * @param  {string}  name     Property name
5629   * @return {*}                Property value
5630   */
5631  
5632  function prop(selector, name) {
5633    if (1 === arguments.length) {
5634      name = selector;
5635      selector = undefined;
5636    }
5637  
5638    return function (node) {
5639      var match = node;
5640  
5641      if (selector) {
5642        match = node.querySelector(selector);
5643      }
5644  
5645      if (match) {
5646        return Object(_get_path__WEBPACK_IMPORTED_MODULE_0__["default"])(match, name);
5647      }
5648    };
5649  }
5650  /**
5651   * Generates a function which matches node of type selector, returning an
5652   * attribute by name if the attribute exists. If no selector is passed,
5653   * returns attribute of the query element.
5654   *
5655   * @param  {?string} selector Optional selector
5656   * @param  {string}  name     Attribute name
5657   * @return {?string}          Attribute value
5658   */
5659  
5660  function attr(selector, name) {
5661    if (1 === arguments.length) {
5662      name = selector;
5663      selector = undefined;
5664    }
5665  
5666    return function (node) {
5667      var attributes = prop(selector, 'attributes')(node);
5668  
5669      if (attributes && attributes.hasOwnProperty(name)) {
5670        return attributes[name].value;
5671      }
5672    };
5673  }
5674  /**
5675   * Convenience for `prop( selector, 'innerHTML' )`.
5676   *
5677   * @see prop()
5678   *
5679   * @param  {?string} selector Optional selector
5680   * @return {string}           Inner HTML
5681   */
5682  
5683  function html(selector) {
5684    return prop(selector, 'innerHTML');
5685  }
5686  /**
5687   * Convenience for `prop( selector, 'textContent' )`.
5688   *
5689   * @see prop()
5690   *
5691   * @param  {?string} selector Optional selector
5692   * @return {string}           Text content
5693   */
5694  
5695  function text(selector) {
5696    return prop(selector, 'textContent');
5697  }
5698  /**
5699   * Creates a new matching context by first finding elements matching selector
5700   * using querySelectorAll before then running another `parse` on `matchers`
5701   * scoped to the matched elements.
5702   *
5703   * @see parse()
5704   *
5705   * @param  {string}            selector Selector to match
5706   * @param  {(Object|Function)} matchers Matcher function or object of matchers
5707   * @return {Array.<*,Object>}           Array of matched value(s)
5708   */
5709  
5710  function query(selector, matchers) {
5711    return function (node) {
5712      var matches = node.querySelectorAll(selector);
5713      return [].map.call(matches, function (match) {
5714        return parse(match, matchers);
5715      });
5716    };
5717  }
5718  
5719  /***/ }),
5720  
5721  /***/ "./node_modules/rememo/es/rememo.js":
5722  /*!******************************************!*\
5723    !*** ./node_modules/rememo/es/rememo.js ***!
5724    \******************************************/
5725  /*! exports provided: default */
5726  /***/ (function(module, __webpack_exports__, __webpack_require__) {
5727  
5728  "use strict";
5729  __webpack_require__.r(__webpack_exports__);
5730  
5731  
5732  var LEAF_KEY, hasWeakMap;
5733  
5734  /**
5735   * Arbitrary value used as key for referencing cache object in WeakMap tree.
5736   *
5737   * @type {Object}
5738   */
5739  LEAF_KEY = {};
5740  
5741  /**
5742   * Whether environment supports WeakMap.
5743   *
5744   * @type {boolean}
5745   */
5746  hasWeakMap = typeof WeakMap !== 'undefined';
5747  
5748  /**
5749   * Returns the first argument as the sole entry in an array.
5750   *
5751   * @param {*} value Value to return.
5752   *
5753   * @return {Array} Value returned as entry in array.
5754   */
5755  function arrayOf( value ) {
5756      return [ value ];
5757  }
5758  
5759  /**
5760   * Returns true if the value passed is object-like, or false otherwise. A value
5761   * is object-like if it can support property assignment, e.g. object or array.
5762   *
5763   * @param {*} value Value to test.
5764   *
5765   * @return {boolean} Whether value is object-like.
5766   */
5767  function isObjectLike( value ) {
5768      return !! value && 'object' === typeof value;
5769  }
5770  
5771  /**
5772   * Creates and returns a new cache object.
5773   *
5774   * @return {Object} Cache object.
5775   */
5776  function createCache() {
5777      var cache = {
5778          clear: function() {
5779              cache.head = null;
5780          },
5781      };
5782  
5783      return cache;
5784  }
5785  
5786  /**
5787   * Returns true if entries within the two arrays are strictly equal by
5788   * reference from a starting index.
5789   *
5790   * @param {Array}  a         First array.
5791   * @param {Array}  b         Second array.
5792   * @param {number} fromIndex Index from which to start comparison.
5793   *
5794   * @return {boolean} Whether arrays are shallowly equal.
5795   */
5796  function isShallowEqual( a, b, fromIndex ) {
5797      var i;
5798  
5799      if ( a.length !== b.length ) {
5800          return false;
5801      }
5802  
5803      for ( i = fromIndex; i < a.length; i++ ) {
5804          if ( a[ i ] !== b[ i ] ) {
5805              return false;
5806          }
5807      }
5808  
5809      return true;
5810  }
5811  
5812  /**
5813   * Returns a memoized selector function. The getDependants function argument is
5814   * called before the memoized selector and is expected to return an immutable
5815   * reference or array of references on which the selector depends for computing
5816   * its own return value. The memoize cache is preserved only as long as those
5817   * dependant references remain the same. If getDependants returns a different
5818   * reference(s), the cache is cleared and the selector value regenerated.
5819   *
5820   * @param {Function} selector      Selector function.
5821   * @param {Function} getDependants Dependant getter returning an immutable
5822   *                                 reference or array of reference used in
5823   *                                 cache bust consideration.
5824   *
5825   * @return {Function} Memoized selector.
5826   */
5827  /* harmony default export */ __webpack_exports__["default"] = (function( selector, getDependants ) {
5828      var rootCache, getCache;
5829  
5830      // Use object source as dependant if getter not provided
5831      if ( ! getDependants ) {
5832          getDependants = arrayOf;
5833      }
5834  
5835      /**
5836       * Returns the root cache. If WeakMap is supported, this is assigned to the
5837       * root WeakMap cache set, otherwise it is a shared instance of the default
5838       * cache object.
5839       *
5840       * @return {(WeakMap|Object)} Root cache object.
5841       */
5842  	function getRootCache() {
5843          return rootCache;
5844      }
5845  
5846      /**
5847       * Returns the cache for a given dependants array. When possible, a WeakMap
5848       * will be used to create a unique cache for each set of dependants. This
5849       * is feasible due to the nature of WeakMap in allowing garbage collection
5850       * to occur on entries where the key object is no longer referenced. Since
5851       * WeakMap requires the key to be an object, this is only possible when the
5852       * dependant is object-like. The root cache is created as a hierarchy where
5853       * each top-level key is the first entry in a dependants set, the value a
5854       * WeakMap where each key is the next dependant, and so on. This continues
5855       * so long as the dependants are object-like. If no dependants are object-
5856       * like, then the cache is shared across all invocations.
5857       *
5858       * @see isObjectLike
5859       *
5860       * @param {Array} dependants Selector dependants.
5861       *
5862       * @return {Object} Cache object.
5863       */
5864  	function getWeakMapCache( dependants ) {
5865          var caches = rootCache,
5866              isUniqueByDependants = true,
5867              i, dependant, map, cache;
5868  
5869          for ( i = 0; i < dependants.length; i++ ) {
5870              dependant = dependants[ i ];
5871  
5872              // Can only compose WeakMap from object-like key.
5873              if ( ! isObjectLike( dependant ) ) {
5874                  isUniqueByDependants = false;
5875                  break;
5876              }
5877  
5878              // Does current segment of cache already have a WeakMap?
5879              if ( caches.has( dependant ) ) {
5880                  // Traverse into nested WeakMap.
5881                  caches = caches.get( dependant );
5882              } else {
5883                  // Create, set, and traverse into a new one.
5884                  map = new WeakMap();
5885                  caches.set( dependant, map );
5886                  caches = map;
5887              }
5888          }
5889  
5890          // We use an arbitrary (but consistent) object as key for the last item
5891          // in the WeakMap to serve as our running cache.
5892          if ( ! caches.has( LEAF_KEY ) ) {
5893              cache = createCache();
5894              cache.isUniqueByDependants = isUniqueByDependants;
5895              caches.set( LEAF_KEY, cache );
5896          }
5897  
5898          return caches.get( LEAF_KEY );
5899      }
5900  
5901      // Assign cache handler by availability of WeakMap
5902      getCache = hasWeakMap ? getWeakMapCache : getRootCache;
5903  
5904      /**
5905       * Resets root memoization cache.
5906       */
5907  	function clear() {
5908          rootCache = hasWeakMap ? new WeakMap() : createCache();
5909      }
5910  
5911      // eslint-disable-next-line jsdoc/check-param-names
5912      /**
5913       * The augmented selector call, considering first whether dependants have
5914       * changed before passing it to underlying memoize function.
5915       *
5916       * @param {Object} source    Source object for derivation.
5917       * @param {...*}   extraArgs Additional arguments to pass to selector.
5918       *
5919       * @return {*} Selector result.
5920       */
5921  	function callSelector( /* source, ...extraArgs */ ) {
5922          var len = arguments.length,
5923              cache, node, i, args, dependants;
5924  
5925          // Create copy of arguments (avoid leaking deoptimization).
5926          args = new Array( len );
5927          for ( i = 0; i < len; i++ ) {
5928              args[ i ] = arguments[ i ];
5929          }
5930  
5931          dependants = getDependants.apply( null, args );
5932          cache = getCache( dependants );
5933  
5934          // If not guaranteed uniqueness by dependants (primitive type or lack
5935          // of WeakMap support), shallow compare against last dependants and, if
5936          // references have changed, destroy cache to recalculate result.
5937          if ( ! cache.isUniqueByDependants ) {
5938              if ( cache.lastDependants && ! isShallowEqual( dependants, cache.lastDependants, 0 ) ) {
5939                  cache.clear();
5940              }
5941  
5942              cache.lastDependants = dependants;
5943          }
5944  
5945          node = cache.head;
5946          while ( node ) {
5947              // Check whether node arguments match arguments
5948              if ( ! isShallowEqual( node.args, args, 1 ) ) {
5949                  node = node.next;
5950                  continue;
5951              }
5952  
5953              // At this point we can assume we've found a match
5954  
5955              // Surface matched node to head if not already
5956              if ( node !== cache.head ) {
5957                  // Adjust siblings to point to each other.
5958                  node.prev.next = node.next;
5959                  if ( node.next ) {
5960                      node.next.prev = node.prev;
5961                  }
5962  
5963                  node.next = cache.head;
5964                  node.prev = null;
5965                  cache.head.prev = node;
5966                  cache.head = node;
5967              }
5968  
5969              // Return immediately
5970              return node.val;
5971          }
5972  
5973          // No cached value found. Continue to insertion phase:
5974  
5975          node = {
5976              // Generate the result from original function
5977              val: selector.apply( null, args ),
5978          };
5979  
5980          // Avoid including the source object in the cache.
5981          args[ 0 ] = null;
5982          node.args = args;
5983  
5984          // Don't need to check whether node is already head, since it would
5985          // have been returned above already if it was
5986  
5987          // Shift existing head down list
5988          if ( cache.head ) {
5989              cache.head.prev = node;
5990              node.next = cache.head;
5991          }
5992  
5993          cache.head = node;
5994  
5995          return node.val;
5996      }
5997  
5998      callSelector.getDependants = getDependants;
5999      callSelector.clear = clear;
6000      clear();
6001  
6002      return callSelector;
6003  });
6004  
6005  
6006  /***/ }),
6007  
6008  /***/ "./node_modules/showdown/dist/showdown.js":
6009  /*!************************************************!*\
6010    !*** ./node_modules/showdown/dist/showdown.js ***!
6011    \************************************************/
6012  /*! no static exports found */
6013  /***/ (function(module, exports, __webpack_require__) {
6014  
6015  var __WEBPACK_AMD_DEFINE_RESULT__;;/*! showdown v 1.9.0 - 10-11-2018 */
6016  (function(){
6017  /**
6018   * Created by Tivie on 13-07-2015.
6019   */
6020  
6021  function getDefaultOpts (simple) {
6022    'use strict';
6023  
6024    var defaultOptions = {
6025      omitExtraWLInCodeBlocks: {
6026        defaultValue: false,
6027        describe: 'Omit the default extra whiteline added to code blocks',
6028        type: 'boolean'
6029      },
6030      noHeaderId: {
6031        defaultValue: false,
6032        describe: 'Turn on/off generated header id',
6033        type: 'boolean'
6034      },
6035      prefixHeaderId: {
6036        defaultValue: false,
6037        describe: 'Add a prefix to the generated header ids. Passing a string will prefix that string to the header id. Setting to true will add a generic \'section-\' prefix',
6038        type: 'string'
6039      },
6040      rawPrefixHeaderId: {
6041        defaultValue: false,
6042        describe: 'Setting this option to true will prevent showdown from modifying the prefix. This might result in malformed IDs (if, for instance, the " char is used in the prefix)',
6043        type: 'boolean'
6044      },
6045      ghCompatibleHeaderId: {
6046        defaultValue: false,
6047        describe: 'Generate header ids compatible with github style (spaces are replaced with dashes, a bunch of non alphanumeric chars are removed)',
6048        type: 'boolean'
6049      },
6050      rawHeaderId: {
6051        defaultValue: false,
6052        describe: 'Remove only spaces, \' and " from generated header ids (including prefixes), replacing them with dashes (-). WARNING: This might result in malformed ids',
6053        type: 'boolean'
6054      },
6055      headerLevelStart: {
6056        defaultValue: false,
6057        describe: 'The header blocks level start',
6058        type: 'integer'
6059      },
6060      parseImgDimensions: {
6061        defaultValue: false,
6062        describe: 'Turn on/off image dimension parsing',
6063        type: 'boolean'
6064      },
6065      simplifiedAutoLink: {
6066        defaultValue: false,
6067        describe: 'Turn on/off GFM autolink style',
6068        type: 'boolean'
6069      },
6070      excludeTrailingPunctuationFromURLs: {
6071        defaultValue: false,
6072        describe: 'Excludes trailing punctuation from links generated with autoLinking',
6073        type: 'boolean'
6074      },
6075      literalMidWordUnderscores: {
6076        defaultValue: false,
6077        describe: 'Parse midword underscores as literal underscores',
6078        type: 'boolean'
6079      },
6080      literalMidWordAsterisks: {
6081        defaultValue: false,
6082        describe: 'Parse midword asterisks as literal asterisks',
6083        type: 'boolean'
6084      },
6085      strikethrough: {
6086        defaultValue: false,
6087        describe: 'Turn on/off strikethrough support',
6088        type: 'boolean'
6089      },
6090      tables: {
6091        defaultValue: false,
6092        describe: 'Turn on/off tables support',
6093        type: 'boolean'
6094      },
6095      tablesHeaderId: {
6096        defaultValue: false,
6097        describe: 'Add an id to table headers',
6098        type: 'boolean'
6099      },
6100      ghCodeBlocks: {
6101        defaultValue: true,
6102        describe: 'Turn on/off GFM fenced code blocks support',
6103        type: 'boolean'
6104      },
6105      tasklists: {
6106        defaultValue: false,
6107        describe: 'Turn on/off GFM tasklist support',
6108        type: 'boolean'
6109      },
6110      smoothLivePreview: {
6111        defaultValue: false,
6112        describe: 'Prevents weird effects in live previews due to incomplete input',
6113        type: 'boolean'
6114      },
6115      smartIndentationFix: {
6116        defaultValue: false,
6117        description: 'Tries to smartly fix indentation in es6 strings',
6118        type: 'boolean'
6119      },
6120      disableForced4SpacesIndentedSublists: {
6121        defaultValue: false,
6122        description: 'Disables the requirement of indenting nested sublists by 4 spaces',
6123        type: 'boolean'
6124      },
6125      simpleLineBreaks: {
6126        defaultValue: false,
6127        description: 'Parses simple line breaks as <br> (GFM Style)',
6128        type: 'boolean'
6129      },
6130      requireSpaceBeforeHeadingText: {
6131        defaultValue: false,
6132        description: 'Makes adding a space between `#` and the header text mandatory (GFM Style)',
6133        type: 'boolean'
6134      },
6135      ghMentions: {
6136        defaultValue: false,
6137        description: 'Enables github @mentions',
6138        type: 'boolean'
6139      },
6140      ghMentionsLink: {
6141        defaultValue: 'https://github.com/{u}',
6142        description: 'Changes the link generated by @mentions. Only applies if ghMentions option is enabled.',
6143        type: 'string'
6144      },
6145      encodeEmails: {
6146        defaultValue: true,
6147        description: 'Encode e-mail addresses through the use of Character Entities, transforming ASCII e-mail addresses into its equivalent decimal entities',
6148        type: 'boolean'
6149      },
6150      openLinksInNewWindow: {
6151        defaultValue: false,
6152        description: 'Open all links in new windows',
6153        type: 'boolean'
6154      },
6155      backslashEscapesHTMLTags: {
6156        defaultValue: false,
6157        description: 'Support for HTML Tag escaping. ex: \<div>foo\</div>',
6158        type: 'boolean'
6159      },
6160      emoji: {
6161        defaultValue: false,
6162        description: 'Enable emoji support. Ex: `this is a :smile: emoji`',
6163        type: 'boolean'
6164      },
6165      underline: {
6166        defaultValue: false,
6167        description: 'Enable support for underline. Syntax is double or triple underscores: `__underline word__`. With this option enabled, underscores no longer parses into `<em>` and `<strong>`',
6168        type: 'boolean'
6169      },
6170      completeHTMLDocument: {
6171        defaultValue: false,
6172        description: 'Outputs a complete html document, including `<html>`, `<head>` and `<body>` tags',
6173        type: 'boolean'
6174      },
6175      metadata: {
6176        defaultValue: false,
6177        description: 'Enable support for document metadata (defined at the top of the document between `«««` and `»»»` or between `---` and `---`).',
6178        type: 'boolean'
6179      },
6180      splitAdjacentBlockquotes: {
6181        defaultValue: false,
6182        description: 'Split adjacent blockquote blocks',
6183        type: 'boolean'
6184      }
6185    };
6186    if (simple === false) {
6187      return JSON.parse(JSON.stringify(defaultOptions));
6188    }
6189    var ret = {};
6190    for (var opt in defaultOptions) {
6191      if (defaultOptions.hasOwnProperty(opt)) {
6192        ret[opt] = defaultOptions[opt].defaultValue;
6193      }
6194    }
6195    return ret;
6196  }
6197  
6198  function allOptionsOn () {
6199    'use strict';
6200    var options = getDefaultOpts(true),
6201        ret = {};
6202    for (var opt in options) {
6203      if (options.hasOwnProperty(opt)) {
6204        ret[opt] = true;
6205      }
6206    }
6207    return ret;
6208  }
6209  
6210  /**
6211   * Created by Tivie on 06-01-2015.
6212   */
6213  
6214  // Private properties
6215  var showdown = {},
6216      parsers = {},
6217      extensions = {},
6218      globalOptions = getDefaultOpts(true),
6219      setFlavor = 'vanilla',
6220      flavor = {
6221        github: {
6222          omitExtraWLInCodeBlocks:              true,
6223          simplifiedAutoLink:                   true,
6224          excludeTrailingPunctuationFromURLs:   true,
6225          literalMidWordUnderscores:            true,
6226          strikethrough:                        true,
6227          tables:                               true,
6228          tablesHeaderId:                       true,
6229          ghCodeBlocks:                         true,
6230          tasklists:                            true,
6231          disableForced4SpacesIndentedSublists: true,
6232          simpleLineBreaks:                     true,
6233          requireSpaceBeforeHeadingText:        true,
6234          ghCompatibleHeaderId:                 true,
6235          ghMentions:                           true,
6236          backslashEscapesHTMLTags:             true,
6237          emoji:                                true,
6238          splitAdjacentBlockquotes:             true
6239        },
6240        original: {
6241          noHeaderId:                           true,
6242          ghCodeBlocks:                         false
6243        },
6244        ghost: {
6245          omitExtraWLInCodeBlocks:              true,
6246          parseImgDimensions:                   true,
6247          simplifiedAutoLink:                   true,
6248          excludeTrailingPunctuationFromURLs:   true,
6249          literalMidWordUnderscores:            true,
6250          strikethrough:                        true,
6251          tables:                               true,
6252          tablesHeaderId:                       true,
6253          ghCodeBlocks:                         true,
6254          tasklists:                            true,
6255          smoothLivePreview:                    true,
6256          simpleLineBreaks:                     true,
6257          requireSpaceBeforeHeadingText:        true,
6258          ghMentions:                           false,
6259          encodeEmails:                         true
6260        },
6261        vanilla: getDefaultOpts(true),
6262        allOn: allOptionsOn()
6263      };
6264  
6265  /**
6266   * helper namespace
6267   * @type {{}}
6268   */
6269  showdown.helper = {};
6270  
6271  /**
6272   * TODO LEGACY SUPPORT CODE
6273   * @type {{}}
6274   */
6275  showdown.extensions = {};
6276  
6277  /**
6278   * Set a global option
6279   * @static
6280   * @param {string} key
6281   * @param {*} value
6282   * @returns {showdown}
6283   */
6284  showdown.setOption = function (key, value) {
6285    'use strict';
6286    globalOptions[key] = value;
6287    return this;
6288  };
6289  
6290  /**
6291   * Get a global option
6292   * @static
6293   * @param {string} key
6294   * @returns {*}
6295   */
6296  showdown.getOption = function (key) {
6297    'use strict';
6298    return globalOptions[key];
6299  };
6300  
6301  /**
6302   * Get the global options
6303   * @static
6304   * @returns {{}}
6305   */
6306  showdown.getOptions = function () {
6307    'use strict';
6308    return globalOptions;
6309  };
6310  
6311  /**
6312   * Reset global options to the default values
6313   * @static
6314   */
6315  showdown.resetOptions = function () {
6316    'use strict';
6317    globalOptions = getDefaultOpts(true);
6318  };
6319  
6320  /**
6321   * Set the flavor showdown should use as default
6322   * @param {string} name
6323   */
6324  showdown.setFlavor = function (name) {
6325    'use strict';
6326    if (!flavor.hasOwnProperty(name)) {
6327      throw Error(name + ' flavor was not found');
6328    }
6329    showdown.resetOptions();
6330    var preset = flavor[name];
6331    setFlavor = name;
6332    for (var option in preset) {
6333      if (preset.hasOwnProperty(option)) {
6334        globalOptions[option] = preset[option];
6335      }
6336    }
6337  };
6338  
6339  /**
6340   * Get the currently set flavor
6341   * @returns {string}
6342   */
6343  showdown.getFlavor = function () {
6344    'use strict';
6345    return setFlavor;
6346  };
6347  
6348  /**
6349   * Get the options of a specified flavor. Returns undefined if the flavor was not found
6350   * @param {string} name Name of the flavor
6351   * @returns {{}|undefined}
6352   */
6353  showdown.getFlavorOptions = function (name) {
6354    'use strict';
6355    if (flavor.hasOwnProperty(name)) {
6356      return flavor[name];
6357    }
6358  };
6359  
6360  /**
6361   * Get the default options
6362   * @static
6363   * @param {boolean} [simple=true]
6364   * @returns {{}}
6365   */
6366  showdown.getDefaultOptions = function (simple) {
6367    'use strict';
6368    return getDefaultOpts(simple);
6369  };
6370  
6371  /**
6372   * Get or set a subParser
6373   *
6374   * subParser(name)       - Get a registered subParser
6375   * subParser(name, func) - Register a subParser
6376   * @static
6377   * @param {string} name
6378   * @param {function} [func]
6379   * @returns {*}
6380   */
6381  showdown.subParser = function (name, func) {
6382    'use strict';
6383    if (showdown.helper.isString(name)) {
6384      if (typeof func !== 'undefined') {
6385        parsers[name] = func;
6386      } else {
6387        if (parsers.hasOwnProperty(name)) {
6388          return parsers[name];
6389        } else {
6390          throw Error('SubParser named ' + name + ' not registered!');
6391        }
6392      }
6393    }
6394  };
6395  
6396  /**
6397   * Gets or registers an extension
6398   * @static
6399   * @param {string} name
6400   * @param {object|function=} ext
6401   * @returns {*}
6402   */
6403  showdown.extension = function (name, ext) {
6404    'use strict';
6405  
6406    if (!showdown.helper.isString(name)) {
6407      throw Error('Extension \'name\' must be a string');
6408    }
6409  
6410    name = showdown.helper.stdExtName(name);
6411  
6412    // Getter
6413    if (showdown.helper.isUndefined(ext)) {
6414      if (!extensions.hasOwnProperty(name)) {
6415        throw Error('Extension named ' + name + ' is not registered!');
6416      }
6417      return extensions[name];
6418  
6419      // Setter
6420    } else {
6421      // Expand extension if it's wrapped in a function
6422      if (typeof ext === 'function') {
6423        ext = ext();
6424      }
6425  
6426      // Ensure extension is an array
6427      if (!showdown.helper.isArray(ext)) {
6428        ext = [ext];
6429      }
6430  
6431      var validExtension = validate(ext, name);
6432  
6433      if (validExtension.valid) {
6434        extensions[name] = ext;
6435      } else {
6436        throw Error(validExtension.error);
6437      }
6438    }
6439  };
6440  
6441  /**
6442   * Gets all extensions registered
6443   * @returns {{}}
6444   */
6445  showdown.getAllExtensions = function () {
6446    'use strict';
6447    return extensions;
6448  };
6449  
6450  /**
6451   * Remove an extension
6452   * @param {string} name
6453   */
6454  showdown.removeExtension = function (name) {
6455    'use strict';
6456    delete extensions[name];
6457  };
6458  
6459  /**
6460   * Removes all extensions
6461   */
6462  showdown.resetExtensions = function () {
6463    'use strict';
6464    extensions = {};
6465  };
6466  
6467  /**
6468   * Validate extension
6469   * @param {array} extension
6470   * @param {string} name
6471   * @returns {{valid: boolean, error: string}}
6472   */
6473  function validate (extension, name) {
6474    'use strict';
6475  
6476    var errMsg = (name) ? 'Error in ' + name + ' extension->' : 'Error in unnamed extension',
6477        ret = {
6478          valid: true,
6479          error: ''
6480        };
6481  
6482    if (!showdown.helper.isArray(extension)) {
6483      extension = [extension];
6484    }
6485  
6486    for (var i = 0; i < extension.length; ++i) {
6487      var baseMsg = errMsg + ' sub-extension ' + i + ': ',
6488          ext = extension[i];
6489      if (typeof ext !== 'object') {
6490        ret.valid = false;
6491        ret.error = baseMsg + 'must be an object, but ' + typeof ext + ' given';
6492        return ret;
6493      }
6494  
6495      if (!showdown.helper.isString(ext.type)) {
6496        ret.valid = false;
6497        ret.error = baseMsg + 'property "type" must be a string, but ' + typeof ext.type + ' given';
6498        return ret;
6499      }
6500  
6501      var type = ext.type = ext.type.toLowerCase();
6502  
6503      // normalize extension type
6504      if (type === 'language') {
6505        type = ext.type = 'lang';
6506      }
6507  
6508      if (type === 'html') {
6509        type = ext.type = 'output';
6510      }
6511  
6512      if (type !== 'lang' && type !== 'output' && type !== 'listener') {
6513        ret.valid = false;
6514        ret.error = baseMsg + 'type ' + type + ' is not recognized. Valid values: "lang/language", "output/html" or "listener"';
6515        return ret;
6516      }
6517  
6518      if (type === 'listener') {
6519        if (showdown.helper.isUndefined(ext.listeners)) {
6520          ret.valid = false;
6521          ret.error = baseMsg + '. Extensions of type "listener" must have a property called "listeners"';
6522          return ret;
6523        }
6524      } else {
6525        if (showdown.helper.isUndefined(ext.filter) && showdown.helper.isUndefined(ext.regex)) {
6526          ret.valid = false;
6527          ret.error = baseMsg + type + ' extensions must define either a "regex" property or a "filter" method';
6528          return ret;
6529        }
6530      }
6531  
6532      if (ext.listeners) {
6533        if (typeof ext.listeners !== 'object') {
6534          ret.valid = false;
6535          ret.error = baseMsg + '"listeners" property must be an object but ' + typeof ext.listeners + ' given';
6536          return ret;
6537        }
6538        for (var ln in ext.listeners) {
6539          if (ext.listeners.hasOwnProperty(ln)) {
6540            if (typeof ext.listeners[ln] !== 'function') {
6541              ret.valid = false;
6542              ret.error = baseMsg + '"listeners" property must be an hash of [event name]: [callback]. listeners.' + ln +
6543                ' must be a function but ' + typeof ext.listeners[ln] + ' given';
6544              return ret;
6545            }
6546          }
6547        }
6548      }
6549  
6550      if (ext.filter) {
6551        if (typeof ext.filter !== 'function') {
6552          ret.valid = false;
6553          ret.error = baseMsg + '"filter" must be a function, but ' + typeof ext.filter + ' given';
6554          return ret;
6555        }
6556      } else if (ext.regex) {
6557        if (showdown.helper.isString(ext.regex)) {
6558          ext.regex = new RegExp(ext.regex, 'g');
6559        }
6560        if (!(ext.regex instanceof RegExp)) {
6561          ret.valid = false;
6562          ret.error = baseMsg + '"regex" property must either be a string or a RegExp object, but ' + typeof ext.regex + ' given';
6563          return ret;
6564        }
6565        if (showdown.helper.isUndefined(ext.replace)) {
6566          ret.valid = false;
6567          ret.error = baseMsg + '"regex" extensions must implement a replace string or function';
6568          return ret;
6569        }
6570      }
6571    }
6572    return ret;
6573  }
6574  
6575  /**
6576   * Validate extension
6577   * @param {object} ext
6578   * @returns {boolean}
6579   */
6580  showdown.validateExtension = function (ext) {
6581    'use strict';
6582  
6583    var validateExtension = validate(ext, null);
6584    if (!validateExtension.valid) {
6585      console.warn(validateExtension.error);
6586      return false;
6587    }
6588    return true;
6589  };
6590  
6591  /**
6592   * showdownjs helper functions
6593   */
6594  
6595  if (!showdown.hasOwnProperty('helper')) {
6596    showdown.helper = {};
6597  }
6598  
6599  /**
6600   * Check if var is string
6601   * @static
6602   * @param {string} a
6603   * @returns {boolean}
6604   */
6605  showdown.helper.isString = function (a) {
6606    'use strict';
6607    return (typeof a === 'string' || a instanceof String);
6608  };
6609  
6610  /**
6611   * Check if var is a function
6612   * @static
6613   * @param {*} a
6614   * @returns {boolean}
6615   */
6616  showdown.helper.isFunction = function (a) {
6617    'use strict';
6618    var getType = {};
6619    return a && getType.toString.call(a) === '[object Function]';
6620  };
6621  
6622  /**
6623   * isArray helper function
6624   * @static
6625   * @param {*} a
6626   * @returns {boolean}
6627   */
6628  showdown.helper.isArray = function (a) {
6629    'use strict';
6630    return Array.isArray(a);
6631  };
6632  
6633  /**
6634   * Check if value is undefined
6635   * @static
6636   * @param {*} value The value to check.
6637   * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.
6638   */
6639  showdown.helper.isUndefined = function (value) {
6640    'use strict';
6641    return typeof value === 'undefined';
6642  };
6643  
6644  /**
6645   * ForEach helper function
6646   * Iterates over Arrays and Objects (own properties only)
6647   * @static
6648   * @param {*} obj
6649   * @param {function} callback Accepts 3 params: 1. value, 2. key, 3. the original array/object
6650   */
6651  showdown.helper.forEach = function (obj, callback) {
6652    'use strict';
6653    // check if obj is defined
6654    if (showdown.helper.isUndefined(obj)) {
6655      throw new Error('obj param is required');
6656    }
6657  
6658    if (showdown.helper.isUndefined(callback)) {
6659      throw new Error('callback param is required');
6660    }
6661  
6662    if (!showdown.helper.isFunction(callback)) {
6663      throw new Error('callback param must be a function/closure');
6664    }
6665  
6666    if (typeof obj.forEach === 'function') {
6667      obj.forEach(callback);
6668    } else if (showdown.helper.isArray(obj)) {
6669      for (var i = 0; i < obj.length; i++) {
6670        callback(obj[i], i, obj);
6671      }
6672    } else if (typeof (obj) === 'object') {
6673      for (var prop in obj) {
6674        if (obj.hasOwnProperty(prop)) {
6675          callback(obj[prop], prop, obj);
6676        }
6677      }
6678    } else {
6679      throw new Error('obj does not seem to be an array or an iterable object');
6680    }
6681  };
6682  
6683  /**
6684   * Standardidize extension name
6685   * @static
6686   * @param {string} s extension name
6687   * @returns {string}
6688   */
6689  showdown.helper.stdExtName = function (s) {
6690    'use strict';
6691    return s.replace(/[_?*+\/\\.^-]/g, '').replace(/\s/g, '').toLowerCase();
6692  };
6693  
6694  function escapeCharactersCallback (wholeMatch, m1) {
6695    'use strict';
6696    var charCodeToEscape = m1.charCodeAt(0);
6697    return '¨E' + charCodeToEscape + 'E';
6698  }
6699  
6700  /**
6701   * Callback used to escape characters when passing through String.replace
6702   * @static
6703   * @param {string} wholeMatch
6704   * @param {string} m1
6705   * @returns {string}
6706   */
6707  showdown.helper.escapeCharactersCallback = escapeCharactersCallback;
6708  
6709  /**
6710   * Escape characters in a string
6711   * @static
6712   * @param {string} text
6713   * @param {string} charsToEscape
6714   * @param {boolean} afterBackslash
6715   * @returns {XML|string|void|*}
6716   */
6717  showdown.helper.escapeCharacters = function (text, charsToEscape, afterBackslash) {
6718    'use strict';
6719    // First we have to escape the escape characters so that
6720    // we can build a character class out of them
6721    var regexString = '([' + charsToEscape.replace(/([\[\]\\])/g, '\\$1') + '])';
6722  
6723    if (afterBackslash) {
6724      regexString = '\\\\' + regexString;
6725    }
6726  
6727    var regex = new RegExp(regexString, 'g');
6728    text = text.replace(regex, escapeCharactersCallback);
6729  
6730    return text;
6731  };
6732  
6733  /**
6734   * Unescape HTML entities
6735   * @param txt
6736   * @returns {string}
6737   */
6738  showdown.helper.unescapeHTMLEntities = function (txt) {
6739    'use strict';
6740  
6741    return txt
6742      .replace(/&quot;/g, '"')
6743      .replace(/&lt;/g, '<')
6744      .replace(/&gt;/g, '>')
6745      .replace(/&amp;/g, '&');
6746  };
6747  
6748  var rgxFindMatchPos = function (str, left, right, flags) {
6749    'use strict';
6750    var f = flags || '',
6751        g = f.indexOf('g') > -1,
6752        x = new RegExp(left + '|' + right, 'g' + f.replace(/g/g, '')),
6753        l = new RegExp(left, f.replace(/g/g, '')),
6754        pos = [],
6755        t, s, m, start, end;
6756  
6757    do {
6758      t = 0;
6759      while ((m = x.exec(str))) {
6760        if (l.test(m[0])) {
6761          if (!(t++)) {
6762            s = x.lastIndex;
6763            start = s - m[0].length;
6764          }
6765        } else if (t) {
6766          if (!--t) {
6767            end = m.index + m[0].length;
6768            var obj = {
6769              left: {start: start, end: s},
6770              match: {start: s, end: m.index},
6771              right: {start: m.index, end: end},
6772              wholeMatch: {start: start, end: end}
6773            };
6774            pos.push(obj);
6775            if (!g) {
6776              return pos;
6777            }
6778          }
6779        }
6780      }
6781    } while (t && (x.lastIndex = s));
6782  
6783    return pos;
6784  };
6785  
6786  /**
6787   * matchRecursiveRegExp
6788   *
6789   * (c) 2007 Steven Levithan <stevenlevithan.com>
6790   * MIT License
6791   *
6792   * Accepts a string to search, a left and right format delimiter
6793   * as regex patterns, and optional regex flags. Returns an array
6794   * of matches, allowing nested instances of left/right delimiters.
6795   * Use the "g" flag to return all matches, otherwise only the
6796   * first is returned. Be careful to ensure that the left and
6797   * right format delimiters produce mutually exclusive matches.
6798   * Backreferences are not supported within the right delimiter
6799   * due to how it is internally combined with the left delimiter.
6800   * When matching strings whose format delimiters are unbalanced
6801   * to the left or right, the output is intentionally as a
6802   * conventional regex library with recursion support would
6803   * produce, e.g. "<<x>" and "<x>>" both produce ["x"] when using
6804   * "<" and ">" as the delimiters (both strings contain a single,
6805   * balanced instance of "<x>").
6806   *
6807   * examples:
6808   * matchRecursiveRegExp("test", "\\(", "\\)")
6809   * returns: []
6810   * matchRecursiveRegExp("<t<<e>><s>>t<>", "<", ">", "g")
6811   * returns: ["t<<e>><s>", ""]
6812   * matchRecursiveRegExp("<div id=\"x\">test</div>", "<div\\b[^>]*>", "</div>", "gi")
6813   * returns: ["test"]
6814   */
6815  showdown.helper.matchRecursiveRegExp = function (str, left, right, flags) {
6816    'use strict';
6817  
6818    var matchPos = rgxFindMatchPos (str, left, right, flags),
6819        results = [];
6820  
6821    for (var i = 0; i < matchPos.length; ++i) {
6822      results.push([
6823        str.slice(matchPos[i].wholeMatch.start, matchPos[i].wholeMatch.end),
6824        str.slice(matchPos[i].match.start, matchPos[i].match.end),
6825        str.slice(matchPos[i].left.start, matchPos[i].left.end),
6826        str.slice(matchPos[i].right.start, matchPos[i].right.end)
6827      ]);
6828    }
6829    return results;
6830  };
6831  
6832  /**
6833   *
6834   * @param {string} str
6835   * @param {string|function} replacement
6836   * @param {string} left
6837   * @param {string} right
6838   * @param {string} flags
6839   * @returns {string}
6840   */
6841  showdown.helper.replaceRecursiveRegExp = function (str, replacement, left, right, flags) {
6842    'use strict';
6843  
6844    if (!showdown.helper.isFunction(replacement)) {
6845      var repStr = replacement;
6846      replacement = function () {
6847        return repStr;
6848      };
6849    }
6850  
6851    var matchPos = rgxFindMatchPos(str, left, right, flags),
6852        finalStr = str,
6853        lng = matchPos.length;
6854  
6855    if (lng > 0) {
6856      var bits = [];
6857      if (matchPos[0].wholeMatch.start !== 0) {
6858        bits.push(str.slice(0, matchPos[0].wholeMatch.start));
6859      }
6860      for (var i = 0; i < lng; ++i) {
6861        bits.push(
6862          replacement(
6863            str.slice(matchPos[i].wholeMatch.start, matchPos[i].wholeMatch.end),
6864            str.slice(matchPos[i].match.start, matchPos[i].match.end),
6865            str.slice(matchPos[i].left.start, matchPos[i].left.end),
6866            str.slice(matchPos[i].right.start, matchPos[i].right.end)
6867          )
6868        );
6869        if (i < lng - 1) {
6870          bits.push(str.slice(matchPos[i].wholeMatch.end, matchPos[i + 1].wholeMatch.start));
6871        }
6872      }
6873      if (matchPos[lng - 1].wholeMatch.end < str.length) {
6874        bits.push(str.slice(matchPos[lng - 1].wholeMatch.end));
6875      }
6876      finalStr = bits.join('');
6877    }
6878    return finalStr;
6879  };
6880  
6881  /**
6882   * Returns the index within the passed String object of the first occurrence of the specified regex,
6883   * starting the search at fromIndex. Returns -1 if the value is not found.
6884   *
6885   * @param {string} str string to search
6886   * @param {RegExp} regex Regular expression to search
6887   * @param {int} [fromIndex = 0] Index to start the search
6888   * @returns {Number}
6889   * @throws InvalidArgumentError
6890   */
6891  showdown.helper.regexIndexOf = function (str, regex, fromIndex) {
6892    'use strict';
6893    if (!showdown.helper.isString(str)) {
6894      throw 'InvalidArgumentError: first parameter of showdown.helper.regexIndexOf function must be a string';
6895    }
6896    if (regex instanceof RegExp === false) {
6897      throw 'InvalidArgumentError: second parameter of showdown.helper.regexIndexOf function must be an instance of RegExp';
6898    }
6899    var indexOf = str.substring(fromIndex || 0).search(regex);
6900    return (indexOf >= 0) ? (indexOf + (fromIndex || 0)) : indexOf;
6901  };
6902  
6903  /**
6904   * Splits the passed string object at the defined index, and returns an array composed of the two substrings
6905   * @param {string} str string to split
6906   * @param {int} index index to split string at
6907   * @returns {[string,string]}
6908   * @throws InvalidArgumentError
6909   */
6910  showdown.helper.splitAtIndex = function (str, index) {
6911    'use strict';
6912    if (!showdown.helper.isString(str)) {
6913      throw 'InvalidArgumentError: first parameter of showdown.helper.regexIndexOf function must be a string';
6914    }
6915    return [str.substring(0, index), str.substring(index)];
6916  };
6917  
6918  /**
6919   * Obfuscate an e-mail address through the use of Character Entities,
6920   * transforming ASCII characters into their equivalent decimal or hex entities.
6921   *
6922   * Since it has a random component, subsequent calls to this function produce different results
6923   *
6924   * @param {string} mail
6925   * @returns {string}
6926   */
6927  showdown.helper.encodeEmailAddress = function (mail) {
6928    'use strict';
6929    var encode = [
6930      function (ch) {
6931        return '&#' + ch.charCodeAt(0) + ';';
6932      },
6933      function (ch) {
6934        return '&#x' + ch.charCodeAt(0).toString(16) + ';';
6935      },
6936      function (ch) {
6937        return ch;
6938      }
6939    ];
6940  
6941    mail = mail.replace(/./g, function (ch) {
6942      if (ch === '@') {
6943        // this *must* be encoded. I insist.
6944        ch = encode[Math.floor(Math.random() * 2)](ch);
6945      } else {
6946        var r = Math.random();
6947        // roughly 10% raw, 45% hex, 45% dec
6948        ch = (
6949          r > 0.9 ? encode[2](ch) : r > 0.45 ? encode[1](ch) : encode[0](ch)
6950        );
6951      }
6952      return ch;
6953    });
6954  
6955    return mail;
6956  };
6957  
6958  /**
6959   *
6960   * @param str
6961   * @param targetLength
6962   * @param padString
6963   * @returns {string}
6964   */
6965  showdown.helper.padEnd = function padEnd (str, targetLength, padString) {
6966    'use strict';
6967    /*jshint bitwise: false*/
6968    // eslint-disable-next-line space-infix-ops
6969    targetLength = targetLength>>0; //floor if number or convert non-number to 0;
6970    /*jshint bitwise: true*/
6971    padString = String(padString || ' ');
6972    if (str.length > targetLength) {
6973      return String(str);
6974    } else {
6975      targetLength = targetLength - str.length;
6976      if (targetLength > padString.length) {
6977        padString += padString.repeat(targetLength / padString.length); //append to original to ensure we are longer than needed
6978      }
6979      return String(str) + padString.slice(0,targetLength);
6980    }
6981  };
6982  
6983  /**
6984   * POLYFILLS
6985   */
6986  // use this instead of builtin is undefined for IE8 compatibility
6987  if (typeof(console) === 'undefined') {
6988    console = {
6989      warn: function (msg) {
6990        'use strict';
6991        alert(msg);
6992      },
6993      log: function (msg) {
6994        'use strict';
6995        alert(msg);
6996      },
6997      error: function (msg) {
6998        'use strict';
6999        throw msg;
7000      }
7001    };
7002  }
7003  
7004  /**
7005   * Common regexes.
7006   * We declare some common regexes to improve performance
7007   */
7008  showdown.helper.regexes = {
7009    asteriskDashAndColon: /([*_:~])/g
7010  };
7011  
7012  /**
7013   * EMOJIS LIST
7014   */
7015  showdown.helper.emojis = {
7016    '+1':'\ud83d\udc4d',
7017    '-1':'\ud83d\udc4e',
7018    '100':'\ud83d\udcaf',
7019    '1234':'\ud83d\udd22',
7020    '1st_place_medal':'\ud83e\udd47',
7021    '2nd_place_medal':'\ud83e\udd48',
7022    '3rd_place_medal':'\ud83e\udd49',
7023    '8ball':'\ud83c\udfb1',
7024    'a':'\ud83c\udd70\ufe0f',
7025    'ab':'\ud83c\udd8e',
7026    'abc':'\ud83d\udd24',
7027    'abcd':'\ud83d\udd21',
7028    'accept':'\ud83c\ude51',
7029    'aerial_tramway':'\ud83d\udea1',
7030    'airplane':'\u2708\ufe0f',
7031    'alarm_clock':'\u23f0',
7032    'alembic':'\u2697\ufe0f',
7033    'alien':'\ud83d\udc7d',
7034    'ambulance':'\ud83d\ude91',
7035    'amphora':'\ud83c\udffa',
7036    'anchor':'\u2693\ufe0f',
7037    'angel':'\ud83d\udc7c',
7038    'anger':'\ud83d\udca2',
7039    'angry':'\ud83d\ude20',
7040    'anguished':'\ud83d\ude27',
7041    'ant':'\ud83d\udc1c',
7042    'apple':'\ud83c\udf4e',
7043    'aquarius':'\u2652\ufe0f',
7044    'aries':'\u2648\ufe0f',
7045    'arrow_backward':'\u25c0\ufe0f',
7046    'arrow_double_down':'\u23ec',
7047    'arrow_double_up':'\u23eb',
7048    'arrow_down':'\u2b07\ufe0f',
7049    'arrow_down_small':'\ud83d\udd3d',
7050    'arrow_forward':'\u25b6\ufe0f',
7051    'arrow_heading_down':'\u2935\ufe0f',
7052    'arrow_heading_up':'\u2934\ufe0f',
7053    'arrow_left':'\u2b05\ufe0f',
7054    'arrow_lower_left':'\u2199\ufe0f',
7055    'arrow_lower_right':'\u2198\ufe0f',
7056    'arrow_right':'\u27a1\ufe0f',
7057    'arrow_right_hook':'\u21aa\ufe0f',
7058    'arrow_up':'\u2b06\ufe0f',
7059    'arrow_up_down':'\u2195\ufe0f',
7060    'arrow_up_small':'\ud83d\udd3c',
7061    'arrow_upper_left':'\u2196\ufe0f',
7062    'arrow_upper_right':'\u2197\ufe0f',
7063    'arrows_clockwise':'\ud83d\udd03',
7064    'arrows_counterclockwise':'\ud83d\udd04',
7065    'art':'\ud83c\udfa8',
7066    'articulated_lorry':'\ud83d\ude9b',
7067    'artificial_satellite':'\ud83d\udef0',
7068    'astonished':'\ud83d\ude32',
7069    'athletic_shoe':'\ud83d\udc5f',
7070    'atm':'\ud83c\udfe7',
7071    'atom_symbol':'\u269b\ufe0f',
7072    'avocado':'\ud83e\udd51',
7073    'b':'\ud83c\udd71\ufe0f',
7074    'baby':'\ud83d\udc76',
7075    'baby_bottle':'\ud83c\udf7c',
7076    'baby_chick':'\ud83d\udc24',
7077    'baby_symbol':'\ud83d\udebc',
7078    'back':'\ud83d\udd19',
7079    'bacon':'\ud83e\udd53',
7080    'badminton':'\ud83c\udff8',
7081    'baggage_claim':'\ud83d\udec4',
7082    'baguette_bread':'\ud83e\udd56',
7083    'balance_scale':'\u2696\ufe0f',
7084    'balloon':'\ud83c\udf88',
7085    'ballot_box':'\ud83d\uddf3',
7086    'ballot_box_with_check':'\u2611\ufe0f',
7087    'bamboo':'\ud83c\udf8d',
7088    'banana':'\ud83c\udf4c',
7089    'bangbang':'\u203c\ufe0f',
7090    'bank':'\ud83c\udfe6',
7091    'bar_chart':'\ud83d\udcca',
7092    'barber':'\ud83d\udc88',
7093    'baseball':'\u26be\ufe0f',
7094    'basketball':'\ud83c\udfc0',
7095    'basketball_man':'\u26f9\ufe0f',
7096    'basketball_woman':'\u26f9\ufe0f&zwj;\u2640\ufe0f',
7097    'bat':'\ud83e\udd87',
7098    'bath':'\ud83d\udec0',
7099    'bathtub':'\ud83d\udec1',
7100    'battery':'\ud83d\udd0b',
7101    'beach_umbrella':'\ud83c\udfd6',
7102    'bear':'\ud83d\udc3b',
7103    'bed':'\ud83d\udecf',
7104    'bee':'\ud83d\udc1d',
7105    'beer':'\ud83c\udf7a',
7106    'beers':'\ud83c\udf7b',
7107    'beetle':'\ud83d\udc1e',
7108    'beginner':'\ud83d\udd30',
7109    'bell':'\ud83d\udd14',
7110    'bellhop_bell':'\ud83d\udece',
7111    'bento':'\ud83c\udf71',
7112    'biking_man':'\ud83d\udeb4',
7113    'bike':'\ud83d\udeb2',
7114    'biking_woman':'\ud83d\udeb4&zwj;\u2640\ufe0f',
7115    'bikini':'\ud83d\udc59',
7116    'biohazard':'\u2623\ufe0f',
7117    'bird':'\ud83d\udc26',
7118    'birthday':'\ud83c\udf82',
7119    'black_circle':'\u26ab\ufe0f',
7120    'black_flag':'\ud83c\udff4',
7121    'black_heart':'\ud83d\udda4',
7122    'black_joker':'\ud83c\udccf',
7123    'black_large_square':'\u2b1b\ufe0f',
7124    'black_medium_small_square':'\u25fe\ufe0f',
7125    'black_medium_square':'\u25fc\ufe0f',
7126    'black_nib':'\u2712\ufe0f',
7127    'black_small_square':'\u25aa\ufe0f',
7128    'black_square_button':'\ud83d\udd32',
7129    'blonde_man':'\ud83d\udc71',
7130    'blonde_woman':'\ud83d\udc71&zwj;\u2640\ufe0f',
7131    'blossom':'\ud83c\udf3c',
7132    'blowfish':'\ud83d\udc21',
7133    'blue_book':'\ud83d\udcd8',
7134    'blue_car':'\ud83d\ude99',
7135    'blue_heart':'\ud83d\udc99',
7136    'blush':'\ud83d\ude0a',
7137    'boar':'\ud83d\udc17',
7138    'boat':'\u26f5\ufe0f',
7139    'bomb':'\ud83d\udca3',
7140    'book':'\ud83d\udcd6',
7141    'bookmark':'\ud83d\udd16',
7142    'bookmark_tabs':'\ud83d\udcd1',
7143    'books':'\ud83d\udcda',
7144    'boom':'\ud83d\udca5',
7145    'boot':'\ud83d\udc62',
7146    'bouquet':'\ud83d\udc90',
7147    'bowing_man':'\ud83d\ude47',
7148    'bow_and_arrow':'\ud83c\udff9',
7149    'bowing_woman':'\ud83d\ude47&zwj;\u2640\ufe0f',
7150    'bowling':'\ud83c\udfb3',
7151    'boxing_glove':'\ud83e\udd4a',
7152    'boy':'\ud83d\udc66',
7153    'bread':'\ud83c\udf5e',
7154    'bride_with_veil':'\ud83d\udc70',
7155    'bridge_at_night':'\ud83c\udf09',
7156    'briefcase':'\ud83d\udcbc',
7157    'broken_heart':'\ud83d\udc94',
7158    'bug':'\ud83d\udc1b',
7159    'building_construction':'\ud83c\udfd7',
7160    'bulb':'\ud83d\udca1',
7161    'bullettrain_front':'\ud83d\ude85',
7162    'bullettrain_side':'\ud83d\ude84',
7163    'burrito':'\ud83c\udf2f',
7164    'bus':'\ud83d\ude8c',
7165    'business_suit_levitating':'\ud83d\udd74',
7166    'busstop':'\ud83d\ude8f',
7167    'bust_in_silhouette':'\ud83d\udc64',
7168    'busts_in_silhouette':'\ud83d\udc65',
7169    'butterfly':'\ud83e\udd8b',
7170    'cactus':'\ud83c\udf35',
7171    'cake':'\ud83c\udf70',
7172    'calendar':'\ud83d\udcc6',
7173    'call_me_hand':'\ud83e\udd19',
7174    'calling':'\ud83d\udcf2',
7175    'camel':'\ud83d\udc2b',
7176    'camera':'\ud83d\udcf7',
7177    'camera_flash':'\ud83d\udcf8',
7178    'camping':'\ud83c\udfd5',
7179    'cancer':'\u264b\ufe0f',
7180    'candle':'\ud83d\udd6f',
7181    'candy':'\ud83c\udf6c',
7182    'canoe':'\ud83d\udef6',
7183    'capital_abcd':'\ud83d\udd20',
7184    'capricorn':'\u2651\ufe0f',
7185    'car':'\ud83d\ude97',
7186    'card_file_box':'\ud83d\uddc3',
7187    'card_index':'\ud83d\udcc7',
7188    'card_index_dividers':'\ud83d\uddc2',
7189    'carousel_horse':'\ud83c\udfa0',
7190    'carrot':'\ud83e\udd55',
7191    'cat':'\ud83d\udc31',
7192    'cat2':'\ud83d\udc08',
7193    'cd':'\ud83d\udcbf',
7194    'chains':'\u26d3',
7195    'champagne':'\ud83c\udf7e',
7196    'chart':'\ud83d\udcb9',
7197    'chart_with_downwards_trend':'\ud83d\udcc9',
7198    'chart_with_upwards_trend':'\ud83d\udcc8',
7199    'checkered_flag':'\ud83c\udfc1',
7200    'cheese':'\ud83e\uddc0',
7201    'cherries':'\ud83c\udf52',
7202    'cherry_blossom':'\ud83c\udf38',
7203    'chestnut':'\ud83c\udf30',
7204    'chicken':'\ud83d\udc14',
7205    'children_crossing':'\ud83d\udeb8',
7206    'chipmunk':'\ud83d\udc3f',
7207    'chocolate_bar':'\ud83c\udf6b',
7208    'christmas_tree':'\ud83c\udf84',
7209    'church':'\u26ea\ufe0f',
7210    'cinema':'\ud83c\udfa6',
7211    'circus_tent':'\ud83c\udfaa',
7212    'city_sunrise':'\ud83c\udf07',
7213    'city_sunset':'\ud83c\udf06',
7214    'cityscape':'\ud83c\udfd9',
7215    'cl':'\ud83c\udd91',
7216    'clamp':'\ud83d\udddc',
7217    'clap':'\ud83d\udc4f',
7218    'clapper':'\ud83c\udfac',
7219    'classical_building':'\ud83c\udfdb',
7220    'clinking_glasses':'\ud83e\udd42',
7221    'clipboard':'\ud83d\udccb',
7222    'clock1':'\ud83d\udd50',
7223    'clock10':'\ud83d\udd59',
7224    'clock1030':'\ud83d\udd65',
7225    'clock11':'\ud83d\udd5a',
7226    'clock1130':'\ud83d\udd66',
7227    'clock12':'\ud83d\udd5b',
7228    'clock1230':'\ud83d\udd67',
7229    'clock130':'\ud83d\udd5c',
7230    'clock2':'\ud83d\udd51',
7231    'clock230':'\ud83d\udd5d',
7232    'clock3':'\ud83d\udd52',
7233    'clock330':'\ud83d\udd5e',
7234    'clock4':'\ud83d\udd53',
7235    'clock430':'\ud83d\udd5f',
7236    'clock5':'\ud83d\udd54',
7237    'clock530':'\ud83d\udd60',
7238    'clock6':'\ud83d\udd55',
7239    'clock630':'\ud83d\udd61',
7240    'clock7':'\ud83d\udd56',
7241    'clock730':'\ud83d\udd62',
7242    'clock8':'\ud83d\udd57',
7243    'clock830':'\ud83d\udd63',
7244    'clock9':'\ud83d\udd58',
7245    'clock930':'\ud83d\udd64',
7246    'closed_book':'\ud83d\udcd5',
7247    'closed_lock_with_key':'\ud83d\udd10',
7248    'closed_umbrella':'\ud83c\udf02',
7249    'cloud':'\u2601\ufe0f',
7250    'cloud_with_lightning':'\ud83c\udf29',
7251    'cloud_with_lightning_and_rain':'\u26c8',
7252    'cloud_with_rain':'\ud83c\udf27',
7253    'cloud_with_snow':'\ud83c\udf28',
7254    'clown_face':'\ud83e\udd21',
7255    'clubs':'\u2663\ufe0f',
7256    'cocktail':'\ud83c\udf78',
7257    'coffee':'\u2615\ufe0f',
7258    'coffin':'\u26b0\ufe0f',
7259    'cold_sweat':'\ud83d\ude30',
7260    'comet':'\u2604\ufe0f',
7261    'computer':'\ud83d\udcbb',
7262    'computer_mouse':'\ud83d\uddb1',
7263    'confetti_ball':'\ud83c\udf8a',
7264    'confounded':'\ud83d\ude16',
7265    'confused':'\ud83d\ude15',
7266    'congratulations':'\u3297\ufe0f',
7267    'construction':'\ud83d\udea7',
7268    'construction_worker_man':'\ud83d\udc77',
7269    'construction_worker_woman':'\ud83d\udc77&zwj;\u2640\ufe0f',
7270    'control_knobs':'\ud83c\udf9b',
7271    'convenience_store':'\ud83c\udfea',
7272    'cookie':'\ud83c\udf6a',
7273    'cool':'\ud83c\udd92',
7274    'policeman':'\ud83d\udc6e',
7275    'copyright':'\u00a9\ufe0f',
7276    'corn':'\ud83c\udf3d',
7277    'couch_and_lamp':'\ud83d\udecb',
7278    'couple':'\ud83d\udc6b',
7279    'couple_with_heart_woman_man':'\ud83d\udc91',
7280    'couple_with_heart_man_man':'\ud83d\udc68&zwj;\u2764\ufe0f&zwj;\ud83d\udc68',
7281    'couple_with_heart_woman_woman':'\ud83d\udc69&zwj;\u2764\ufe0f&zwj;\ud83d\udc69',
7282    'couplekiss_man_man':'\ud83d\udc68&zwj;\u2764\ufe0f&zwj;\ud83d\udc8b&zwj;\ud83d\udc68',
7283    'couplekiss_man_woman':'\ud83d\udc8f',
7284    'couplekiss_woman_woman':'\ud83d\udc69&zwj;\u2764\ufe0f&zwj;\ud83d\udc8b&zwj;\ud83d\udc69',
7285    'cow':'\ud83d\udc2e',
7286    'cow2':'\ud83d\udc04',
7287    'cowboy_hat_face':'\ud83e\udd20',
7288    'crab':'\ud83e\udd80',
7289    'crayon':'\ud83d\udd8d',
7290    'credit_card':'\ud83d\udcb3',
7291    'crescent_moon':'\ud83c\udf19',
7292    'cricket':'\ud83c\udfcf',
7293    'crocodile':'\ud83d\udc0a',
7294    'croissant':'\ud83e\udd50',
7295    'crossed_fingers':'\ud83e\udd1e',
7296    'crossed_flags':'\ud83c\udf8c',
7297    'crossed_swords':'\u2694\ufe0f',
7298    'crown':'\ud83d\udc51',
7299    'cry':'\ud83d\ude22',
7300    'crying_cat_face':'\ud83d\ude3f',
7301    'crystal_ball':'\ud83d\udd2e',
7302    'cucumber':'\ud83e\udd52',
7303    'cupid':'\ud83d\udc98',
7304    'curly_loop':'\u27b0',
7305    'currency_exchange':'\ud83d\udcb1',
7306    'curry':'\ud83c\udf5b',
7307    'custard':'\ud83c\udf6e',
7308    'customs':'\ud83d\udec3',
7309    'cyclone':'\ud83c\udf00',
7310    'dagger':'\ud83d\udde1',
7311    'dancer':'\ud83d\udc83',
7312    'dancing_women':'\ud83d\udc6f',
7313    'dancing_men':'\ud83d\udc6f&zwj;\u2642\ufe0f',
7314    'dango':'\ud83c\udf61',
7315    'dark_sunglasses':'\ud83d\udd76',
7316    'dart':'\ud83c\udfaf',
7317    'dash':'\ud83d\udca8',
7318    'date':'\ud83d\udcc5',
7319    'deciduous_tree':'\ud83c\udf33',
7320    'deer':'\ud83e\udd8c',
7321    'department_store':'\ud83c\udfec',
7322    'derelict_house':'\ud83c\udfda',
7323    'desert':'\ud83c\udfdc',
7324    'desert_island':'\ud83c\udfdd',
7325    'desktop_computer':'\ud83d\udda5',
7326    'male_detective':'\ud83d\udd75\ufe0f',
7327    'diamond_shape_with_a_dot_inside':'\ud83d\udca0',
7328    'diamonds':'\u2666\ufe0f',
7329    'disappointed':'\ud83d\ude1e',
7330    'disappointed_relieved':'\ud83d\ude25',
7331    'dizzy':'\ud83d\udcab',
7332    'dizzy_face':'\ud83d\ude35',
7333    'do_not_litter':'\ud83d\udeaf',
7334    'dog':'\ud83d\udc36',
7335    'dog2':'\ud83d\udc15',
7336    'dollar':'\ud83d\udcb5',
7337    'dolls':'\ud83c\udf8e',
7338    'dolphin':'\ud83d\udc2c',
7339    'door':'\ud83d\udeaa',
7340    'doughnut':'\ud83c\udf69',
7341    'dove':'\ud83d\udd4a',
7342    'dragon':'\ud83d\udc09',
7343    'dragon_face':'\ud83d\udc32',
7344    'dress':'\ud83d\udc57',
7345    'dromedary_camel':'\ud83d\udc2a',
7346    'drooling_face':'\ud83e\udd24',
7347    'droplet':'\ud83d\udca7',
7348    'drum':'\ud83e\udd41',
7349    'duck':'\ud83e\udd86',
7350    'dvd':'\ud83d\udcc0',
7351    'e-mail':'\ud83d\udce7',
7352    'eagle':'\ud83e\udd85',
7353    'ear':'\ud83d\udc42',
7354    'ear_of_rice':'\ud83c\udf3e',
7355    'earth_africa':'\ud83c\udf0d',
7356    'earth_americas':'\ud83c\udf0e',
7357    'earth_asia':'\ud83c\udf0f',
7358    'egg':'\ud83e\udd5a',
7359    'eggplant':'\ud83c\udf46',
7360    'eight_pointed_black_star':'\u2734\ufe0f',
7361    'eight_spoked_asterisk':'\u2733\ufe0f',
7362    'electric_plug':'\ud83d\udd0c',
7363    'elephant':'\ud83d\udc18',
7364    'email':'\u2709\ufe0f',
7365    'end':'\ud83d\udd1a',
7366    'envelope_with_arrow':'\ud83d\udce9',
7367    'euro':'\ud83d\udcb6',
7368    'european_castle':'\ud83c\udff0',
7369    'european_post_office':'\ud83c\udfe4',
7370    'evergreen_tree':'\ud83c\udf32',
7371    'exclamation':'\u2757\ufe0f',
7372    'expressionless':'\ud83d\ude11',
7373    'eye':'\ud83d\udc41',
7374    'eye_speech_bubble':'\ud83d\udc41&zwj;\ud83d\udde8',
7375    'eyeglasses':'\ud83d\udc53',
7376    'eyes':'\ud83d\udc40',
7377    'face_with_head_bandage':'\ud83e\udd15',
7378    'face_with_thermometer':'\ud83e\udd12',
7379    'fist_oncoming':'\ud83d\udc4a',
7380    'factory':'\ud83c\udfed',
7381    'fallen_leaf':'\ud83c\udf42',
7382    'family_man_woman_boy':'\ud83d\udc6a',
7383    'family_man_boy':'\ud83d\udc68&zwj;\ud83d\udc66',
7384    'family_man_boy_boy':'\ud83d\udc68&zwj;\ud83d\udc66&zwj;\ud83d\udc66',
7385    'family_man_girl':'\ud83d\udc68&zwj;\ud83d\udc67',
7386    'family_man_girl_boy':'\ud83d\udc68&zwj;\ud83d\udc67&zwj;\ud83d\udc66',
7387    'family_man_girl_girl':'\ud83d\udc68&zwj;\ud83d\udc67&zwj;\ud83d\udc67',
7388    'family_man_man_boy':'\ud83d\udc68&zwj;\ud83d\udc68&zwj;\ud83d\udc66',
7389    'family_man_man_boy_boy':'\ud83d\udc68&zwj;\ud83d\udc68&zwj;\ud83d\udc66&zwj;\ud83d\udc66',
7390    'family_man_man_girl':'\ud83d\udc68&zwj;\ud83d\udc68&zwj;\ud83d\udc67',
7391    'family_man_man_girl_boy':'\ud83d\udc68&zwj;\ud83d\udc68&zwj;\ud83d\udc67&zwj;\ud83d\udc66',
7392    'family_man_man_girl_girl':'\ud83d\udc68&zwj;\ud83d\udc68&zwj;\ud83d\udc67&zwj;\ud83d\udc67',
7393    'family_man_woman_boy_boy':'\ud83d\udc68&zwj;\ud83d\udc69&zwj;\ud83d\udc66&zwj;\ud83d\udc66',
7394    'family_man_woman_girl':'\ud83d\udc68&zwj;\ud83d\udc69&zwj;\ud83d\udc67',
7395    'family_man_woman_girl_boy':'\ud83d\udc68&zwj;\ud83d\udc69&zwj;\ud83d\udc67&zwj;\ud83d\udc66',
7396    'family_man_woman_girl_girl':'\ud83d\udc68&zwj;\ud83d\udc69&zwj;\ud83d\udc67&zwj;\ud83d\udc67',
7397    'family_woman_boy':'\ud83d\udc69&zwj;\ud83d\udc66',
7398    'family_woman_boy_boy':'\ud83d\udc69&zwj;\ud83d\udc66&zwj;\ud83d\udc66',
7399    'family_woman_girl':'\ud83d\udc69&zwj;\ud83d\udc67',
7400    'family_woman_girl_boy':'\ud83d\udc69&zwj;\ud83d\udc67&zwj;\ud83d\udc66',
7401    'family_woman_girl_girl':'\ud83d\udc69&zwj;\ud83d\udc67&zwj;\ud83d\udc67',
7402    'family_woman_woman_boy':'\ud83d\udc69&zwj;\ud83d\udc69&zwj;\ud83d\udc66',
7403    'family_woman_woman_boy_boy':'\ud83d\udc69&zwj;\ud83d\udc69&zwj;\ud83d\udc66&zwj;\ud83d\udc66',
7404    'family_woman_woman_girl':'\ud83d\udc69&zwj;\ud83d\udc69&zwj;\ud83d\udc67',
7405    'family_woman_woman_girl_boy':'\ud83d\udc69&zwj;\ud83d\udc69&zwj;\ud83d\udc67&zwj;\ud83d\udc66',
7406    'family_woman_woman_girl_girl':'\ud83d\udc69&zwj;\ud83d\udc69&zwj;\ud83d\udc67&zwj;\ud83d\udc67',
7407    'fast_forward':'\u23e9',
7408    'fax':'\ud83d\udce0',
7409    'fearful':'\ud83d\ude28',
7410    'feet':'\ud83d\udc3e',
7411    'female_detective':'\ud83d\udd75\ufe0f&zwj;\u2640\ufe0f',
7412    'ferris_wheel':'\ud83c\udfa1',
7413    'ferry':'\u26f4',
7414    'field_hockey':'\ud83c\udfd1',
7415    'file_cabinet':'\ud83d\uddc4',
7416    'file_folder':'\ud83d\udcc1',
7417    'film_projector':'\ud83d\udcfd',
7418    'film_strip':'\ud83c\udf9e',
7419    'fire':'\ud83d\udd25',
7420    'fire_engine':'\ud83d\ude92',
7421    'fireworks':'\ud83c\udf86',
7422    'first_quarter_moon':'\ud83c\udf13',
7423    'first_quarter_moon_with_face':'\ud83c\udf1b',
7424    'fish':'\ud83d\udc1f',
7425    'fish_cake':'\ud83c\udf65',
7426    'fishing_pole_and_fish':'\ud83c\udfa3',
7427    'fist_raised':'\u270a',
7428    'fist_left':'\ud83e\udd1b',
7429    'fist_right':'\ud83e\udd1c',
7430    'flags':'\ud83c\udf8f',
7431    'flashlight':'\ud83d\udd26',
7432    'fleur_de_lis':'\u269c\ufe0f',
7433    'flight_arrival':'\ud83d\udeec',
7434    'flight_departure':'\ud83d\udeeb',
7435    'floppy_disk':'\ud83d\udcbe',
7436    'flower_playing_cards':'\ud83c\udfb4',
7437    'flushed':'\ud83d\ude33',
7438    'fog':'\ud83c\udf2b',
7439    'foggy':'\ud83c\udf01',
7440    'football':'\ud83c\udfc8',
7441    'footprints':'\ud83d\udc63',
7442    'fork_and_knife':'\ud83c\udf74',
7443    'fountain':'\u26f2\ufe0f',
7444    'fountain_pen':'\ud83d\udd8b',
7445    'four_leaf_clover':'\ud83c\udf40',
7446    'fox_face':'\ud83e\udd8a',
7447    'framed_picture':'\ud83d\uddbc',
7448    'free':'\ud83c\udd93',
7449    'fried_egg':'\ud83c\udf73',
7450    'fried_shrimp':'\ud83c\udf64',
7451    'fries':'\ud83c\udf5f',
7452    'frog':'\ud83d\udc38',
7453    'frowning':'\ud83d\ude26',
7454    'frowning_face':'\u2639\ufe0f',
7455    'frowning_man':'\ud83d\ude4d&zwj;\u2642\ufe0f',
7456    'frowning_woman':'\ud83d\ude4d',
7457    'middle_finger':'\ud83d\udd95',
7458    'fuelpump':'\u26fd\ufe0f',
7459    'full_moon':'\ud83c\udf15',
7460    'full_moon_with_face':'\ud83c\udf1d',
7461    'funeral_urn':'\u26b1\ufe0f',
7462    'game_die':'\ud83c\udfb2',
7463    'gear':'\u2699\ufe0f',
7464    'gem':'\ud83d\udc8e',
7465    'gemini':'\u264a\ufe0f',
7466    'ghost':'\ud83d\udc7b',
7467    'gift':'\ud83c\udf81',
7468    'gift_heart':'\ud83d\udc9d',
7469    'girl':'\ud83d\udc67',
7470    'globe_with_meridians':'\ud83c\udf10',
7471    'goal_net':'\ud83e\udd45',
7472    'goat':'\ud83d\udc10',
7473    'golf':'\u26f3\ufe0f',
7474    'golfing_man':'\ud83c\udfcc\ufe0f',
7475    'golfing_woman':'\ud83c\udfcc\ufe0f&zwj;\u2640\ufe0f',
7476    'gorilla':'\ud83e\udd8d',
7477    'grapes':'\ud83c\udf47',
7478    'green_apple':'\ud83c\udf4f',
7479    'green_book':'\ud83d\udcd7',
7480    'green_heart':'\ud83d\udc9a',
7481    'green_salad':'\ud83e\udd57',
7482    'grey_exclamation':'\u2755',
7483    'grey_question':'\u2754',
7484    'grimacing':'\ud83d\ude2c',
7485    'grin':'\ud83d\ude01',
7486    'grinning':'\ud83d\ude00',
7487    'guardsman':'\ud83d\udc82',
7488    'guardswoman':'\ud83d\udc82&zwj;\u2640\ufe0f',
7489    'guitar':'\ud83c\udfb8',
7490    'gun':'\ud83d\udd2b',
7491    'haircut_woman':'\ud83d\udc87',
7492    'haircut_man':'\ud83d\udc87&zwj;\u2642\ufe0f',
7493    'hamburger':'\ud83c\udf54',
7494    'hammer':'\ud83d\udd28',
7495    'hammer_and_pick':'\u2692',
7496    'hammer_and_wrench':'\ud83d\udee0',
7497    'hamster':'\ud83d\udc39',
7498    'hand':'\u270b',
7499    'handbag':'\ud83d\udc5c',
7500    'handshake':'\ud83e\udd1d',
7501    'hankey':'\ud83d\udca9',
7502    'hatched_chick':'\ud83d\udc25',
7503    'hatching_chick':'\ud83d\udc23',
7504    'headphones':'\ud83c\udfa7',
7505    'hear_no_evil':'\ud83d\ude49',
7506    'heart':'\u2764\ufe0f',
7507    'heart_decoration':'\ud83d\udc9f',
7508    'heart_eyes':'\ud83d\ude0d',
7509    'heart_eyes_cat':'\ud83d\ude3b',
7510    'heartbeat':'\ud83d\udc93',
7511    'heartpulse':'\ud83d\udc97',
7512    'hearts':'\u2665\ufe0f',
7513    'heavy_check_mark':'\u2714\ufe0f',
7514    'heavy_division_sign':'\u2797',
7515    'heavy_dollar_sign':'\ud83d\udcb2',
7516    'heavy_heart_exclamation':'\u2763\ufe0f',
7517    'heavy_minus_sign':'\u2796',
7518    'heavy_multiplication_x':'\u2716\ufe0f',
7519    'heavy_plus_sign':'\u2795',
7520    'helicopter':'\ud83d\ude81',
7521    'herb':'\ud83c\udf3f',
7522    'hibiscus':'\ud83c\udf3a',
7523    'high_brightness':'\ud83d\udd06',
7524    'high_heel':'\ud83d\udc60',
7525    'hocho':'\ud83d\udd2a',
7526    'hole':'\ud83d\udd73',
7527    'honey_pot':'\ud83c\udf6f',
7528    'horse':'\ud83d\udc34',
7529    'horse_racing':'\ud83c\udfc7',
7530    'hospital':'\ud83c\udfe5',
7531    'hot_pepper':'\ud83c\udf36',
7532    'hotdog':'\ud83c\udf2d',
7533    'hotel':'\ud83c\udfe8',
7534    'hotsprings':'\u2668\ufe0f',
7535    'hourglass':'\u231b\ufe0f',
7536    'hourglass_flowing_sand':'\u23f3',
7537    'house':'\ud83c\udfe0',
7538    'house_with_garden':'\ud83c\udfe1',
7539    'houses':'\ud83c\udfd8',
7540    'hugs':'\ud83e\udd17',
7541    'hushed':'\ud83d\ude2f',
7542    'ice_cream':'\ud83c\udf68',
7543    'ice_hockey':'\ud83c\udfd2',
7544    'ice_skate':'\u26f8',
7545    'icecream':'\ud83c\udf66',
7546    'id':'\ud83c\udd94',
7547    'ideograph_advantage':'\ud83c\ude50',
7548    'imp':'\ud83d\udc7f',
7549    'inbox_tray':'\ud83d\udce5',
7550    'incoming_envelope':'\ud83d\udce8',
7551    'tipping_hand_woman':'\ud83d\udc81',
7552    'information_source':'\u2139\ufe0f',
7553    'innocent':'\ud83d\ude07',
7554    'interrobang':'\u2049\ufe0f',
7555    'iphone':'\ud83d\udcf1',
7556    'izakaya_lantern':'\ud83c\udfee',
7557    'jack_o_lantern':'\ud83c\udf83',
7558    'japan':'\ud83d\uddfe',
7559    'japanese_castle':'\ud83c\udfef',
7560    'japanese_goblin':'\ud83d\udc7a',
7561    'japanese_ogre':'\ud83d\udc79',
7562    'jeans':'\ud83d\udc56',
7563    'joy':'\ud83d\ude02',
7564    'joy_cat':'\ud83d\ude39',
7565    'joystick':'\ud83d\udd79',
7566    'kaaba':'\ud83d\udd4b',
7567    'key':'\ud83d\udd11',
7568    'keyboard':'\u2328\ufe0f',
7569    'keycap_ten':'\ud83d\udd1f',
7570    'kick_scooter':'\ud83d\udef4',
7571    'kimono':'\ud83d\udc58',
7572    'kiss':'\ud83d\udc8b',
7573    'kissing':'\ud83d\ude17',
7574    'kissing_cat':'\ud83d\ude3d',
7575    'kissing_closed_eyes':'\ud83d\ude1a',
7576    'kissing_heart':'\ud83d\ude18',
7577    'kissing_smiling_eyes':'\ud83d\ude19',
7578    'kiwi_fruit':'\ud83e\udd5d',
7579    'koala':'\ud83d\udc28',
7580    'koko':'\ud83c\ude01',
7581    'label':'\ud83c\udff7',
7582    'large_blue_circle':'\ud83d\udd35',
7583    'large_blue_diamond':'\ud83d\udd37',
7584    'large_orange_diamond':'\ud83d\udd36',
7585    'last_quarter_moon':'\ud83c\udf17',
7586    'last_quarter_moon_with_face':'\ud83c\udf1c',
7587    'latin_cross':'\u271d\ufe0f',
7588    'laughing':'\ud83d\ude06',
7589    'leaves':'\ud83c\udf43',
7590    'ledger':'\ud83d\udcd2',
7591    'left_luggage':'\ud83d\udec5',
7592    'left_right_arrow':'\u2194\ufe0f',
7593    'leftwards_arrow_with_hook':'\u21a9\ufe0f',
7594    'lemon':'\ud83c\udf4b',
7595    'leo':'\u264c\ufe0f',
7596    'leopard':'\ud83d\udc06',
7597    'level_slider':'\ud83c\udf9a',
7598    'libra':'\u264e\ufe0f',
7599    'light_rail':'\ud83d\ude88',
7600    'link':'\ud83d\udd17',
7601    'lion':'\ud83e\udd81',
7602    'lips':'\ud83d\udc44',
7603    'lipstick':'\ud83d\udc84',
7604    'lizard':'\ud83e\udd8e',
7605    'lock':'\ud83d\udd12',
7606    'lock_with_ink_pen':'\ud83d\udd0f',
7607    'lollipop':'\ud83c\udf6d',
7608    'loop':'\u27bf',
7609    'loud_sound':'\ud83d\udd0a',
7610    'loudspeaker':'\ud83d\udce2',
7611    'love_hotel':'\ud83c\udfe9',
7612    'love_letter':'\ud83d\udc8c',
7613    'low_brightness':'\ud83d\udd05',
7614    'lying_face':'\ud83e\udd25',
7615    'm':'\u24c2\ufe0f',
7616    'mag':'\ud83d\udd0d',
7617    'mag_right':'\ud83d\udd0e',
7618    'mahjong':'\ud83c\udc04\ufe0f',
7619    'mailbox':'\ud83d\udceb',
7620    'mailbox_closed':'\ud83d\udcea',
7621    'mailbox_with_mail':'\ud83d\udcec',
7622    'mailbox_with_no_mail':'\ud83d\udced',
7623    'man':'\ud83d\udc68',
7624    'man_artist':'\ud83d\udc68&zwj;\ud83c\udfa8',
7625    'man_astronaut':'\ud83d\udc68&zwj;\ud83d\ude80',
7626    'man_cartwheeling':'\ud83e\udd38&zwj;\u2642\ufe0f',
7627    'man_cook':'\ud83d\udc68&zwj;\ud83c\udf73',
7628    'man_dancing':'\ud83d\udd7a',
7629    'man_facepalming':'\ud83e\udd26&zwj;\u2642\ufe0f',
7630    'man_factory_worker':'\ud83d\udc68&zwj;\ud83c\udfed',
7631    'man_farmer':'\ud83d\udc68&zwj;\ud83c\udf3e',
7632    'man_firefighter':'\ud83d\udc68&zwj;\ud83d\ude92',
7633    'man_health_worker':'\ud83d\udc68&zwj;\u2695\ufe0f',
7634    'man_in_tuxedo':'\ud83e\udd35',
7635    'man_judge':'\ud83d\udc68&zwj;\u2696\ufe0f',
7636    'man_juggling':'\ud83e\udd39&zwj;\u2642\ufe0f',
7637    'man_mechanic':'\ud83d\udc68&zwj;\ud83d\udd27',
7638    'man_office_worker':'\ud83d\udc68&zwj;\ud83d\udcbc',
7639    'man_pilot':'\ud83d\udc68&zwj;\u2708\ufe0f',
7640    'man_playing_handball':'\ud83e\udd3e&zwj;\u2642\ufe0f',
7641    'man_playing_water_polo':'\ud83e\udd3d&zwj;\u2642\ufe0f',
7642    'man_scientist':'\ud83d\udc68&zwj;\ud83d\udd2c',
7643    'man_shrugging':'\ud83e\udd37&zwj;\u2642\ufe0f',
7644    'man_singer':'\ud83d\udc68&zwj;\ud83c\udfa4',
7645    'man_student':'\ud83d\udc68&zwj;\ud83c\udf93',
7646    'man_teacher':'\ud83d\udc68&zwj;\ud83c\udfeb',
7647    'man_technologist':'\ud83d\udc68&zwj;\ud83d\udcbb',
7648    'man_with_gua_pi_mao':'\ud83d\udc72',
7649    'man_with_turban':'\ud83d\udc73',
7650    'tangerine':'\ud83c\udf4a',
7651    'mans_shoe':'\ud83d\udc5e',
7652    'mantelpiece_clock':'\ud83d\udd70',
7653    'maple_leaf':'\ud83c\udf41',
7654    'martial_arts_uniform':'\ud83e\udd4b',
7655    'mask':'\ud83d\ude37',
7656    'massage_woman':'\ud83d\udc86',
7657    'massage_man':'\ud83d\udc86&zwj;\u2642\ufe0f',
7658    'meat_on_bone':'\ud83c\udf56',
7659    'medal_military':'\ud83c\udf96',
7660    'medal_sports':'\ud83c\udfc5',
7661    'mega':'\ud83d\udce3',
7662    'melon':'\ud83c\udf48',
7663    'memo':'\ud83d\udcdd',
7664    'men_wrestling':'\ud83e\udd3c&zwj;\u2642\ufe0f',
7665    'menorah':'\ud83d\udd4e',
7666    'mens':'\ud83d\udeb9',
7667    'metal':'\ud83e\udd18',
7668    'metro':'\ud83d\ude87',
7669    'microphone':'\ud83c\udfa4',
7670    'microscope':'\ud83d\udd2c',
7671    'milk_glass':'\ud83e\udd5b',
7672    'milky_way':'\ud83c\udf0c',
7673    'minibus':'\ud83d\ude90',
7674    'minidisc':'\ud83d\udcbd',
7675    'mobile_phone_off':'\ud83d\udcf4',
7676    'money_mouth_face':'\ud83e\udd11',
7677    'money_with_wings':'\ud83d\udcb8',
7678    'moneybag':'\ud83d\udcb0',
7679    'monkey':'\ud83d\udc12',
7680    'monkey_face':'\ud83d\udc35',
7681    'monorail':'\ud83d\ude9d',
7682    'moon':'\ud83c\udf14',
7683    'mortar_board':'\ud83c\udf93',
7684    'mosque':'\ud83d\udd4c',
7685    'motor_boat':'\ud83d\udee5',
7686    'motor_scooter':'\ud83d\udef5',
7687    'motorcycle':'\ud83c\udfcd',
7688    'motorway':'\ud83d\udee3',
7689    'mount_fuji':'\ud83d\uddfb',
7690    'mountain':'\u26f0',
7691    'mountain_biking_man':'\ud83d\udeb5',
7692    'mountain_biking_woman':'\ud83d\udeb5&zwj;\u2640\ufe0f',
7693    'mountain_cableway':'\ud83d\udea0',
7694    'mountain_railway':'\ud83d\ude9e',
7695    'mountain_snow':'\ud83c\udfd4',
7696    'mouse':'\ud83d\udc2d',
7697    'mouse2':'\ud83d\udc01',
7698    'movie_camera':'\ud83c\udfa5',
7699    'moyai':'\ud83d\uddff',
7700    'mrs_claus':'\ud83e\udd36',
7701    'muscle':'\ud83d\udcaa',
7702    'mushroom':'\ud83c\udf44',
7703    'musical_keyboard':'\ud83c\udfb9',
7704    'musical_note':'\ud83c\udfb5',
7705    'musical_score':'\ud83c\udfbc',
7706    'mute':'\ud83d\udd07',
7707    'nail_care':'\ud83d\udc85',
7708    'name_badge':'\ud83d\udcdb',
7709    'national_park':'\ud83c\udfde',
7710    'nauseated_face':'\ud83e\udd22',
7711    'necktie':'\ud83d\udc54',
7712    'negative_squared_cross_mark':'\u274e',
7713    'nerd_face':'\ud83e\udd13',
7714    'neutral_face':'\ud83d\ude10',
7715    'new':'\ud83c\udd95',
7716    'new_moon':'\ud83c\udf11',
7717    'new_moon_with_face':'\ud83c\udf1a',
7718    'newspaper':'\ud83d\udcf0',
7719    'newspaper_roll':'\ud83d\uddde',
7720    'next_track_button':'\u23ed',
7721    'ng':'\ud83c\udd96',
7722    'no_good_man':'\ud83d\ude45&zwj;\u2642\ufe0f',
7723    'no_good_woman':'\ud83d\ude45',
7724    'night_with_stars':'\ud83c\udf03',
7725    'no_bell':'\ud83d\udd15',
7726    'no_bicycles':'\ud83d\udeb3',
7727    'no_entry':'\u26d4\ufe0f',
7728    'no_entry_sign':'\ud83d\udeab',
7729    'no_mobile_phones':'\ud83d\udcf5',
7730    'no_mouth':'\ud83d\ude36',
7731    'no_pedestrians':'\ud83d\udeb7',
7732    'no_smoking':'\ud83d\udead',
7733    'non-potable_water':'\ud83d\udeb1',
7734    'nose':'\ud83d\udc43',
7735    'notebook':'\ud83d\udcd3',
7736    'notebook_with_decorative_cover':'\ud83d\udcd4',
7737    'notes':'\ud83c\udfb6',
7738    'nut_and_bolt':'\ud83d\udd29',
7739    'o':'\u2b55\ufe0f',
7740    'o2':'\ud83c\udd7e\ufe0f',
7741    'ocean':'\ud83c\udf0a',
7742    'octopus':'\ud83d\udc19',
7743    'oden':'\ud83c\udf62',
7744    'office':'\ud83c\udfe2',
7745    'oil_drum':'\ud83d\udee2',
7746    'ok':'\ud83c\udd97',
7747    'ok_hand':'\ud83d\udc4c',
7748    'ok_man':'\ud83d\ude46&zwj;\u2642\ufe0f',
7749    'ok_woman':'\ud83d\ude46',
7750    'old_key':'\ud83d\udddd',
7751    'older_man':'\ud83d\udc74',
7752    'older_woman':'\ud83d\udc75',
7753    'om':'\ud83d\udd49',
7754    'on':'\ud83d\udd1b',
7755    'oncoming_automobile':'\ud83d\ude98',
7756    'oncoming_bus':'\ud83d\ude8d',
7757    'oncoming_police_car':'\ud83d\ude94',
7758    'oncoming_taxi':'\ud83d\ude96',
7759    'open_file_folder':'\ud83d\udcc2',
7760    'open_hands':'\ud83d\udc50',
7761    'open_mouth':'\ud83d\ude2e',
7762    'open_umbrella':'\u2602\ufe0f',
7763    'ophiuchus':'\u26ce',
7764    'orange_book':'\ud83d\udcd9',
7765    'orthodox_cross':'\u2626\ufe0f',
7766    'outbox_tray':'\ud83d\udce4',
7767    'owl':'\ud83e\udd89',
7768    'ox':'\ud83d\udc02',
7769    'package':'\ud83d\udce6',
7770    'page_facing_up':'\ud83d\udcc4',
7771    'page_with_curl':'\ud83d\udcc3',
7772    'pager':'\ud83d\udcdf',
7773    'paintbrush':'\ud83d\udd8c',
7774    'palm_tree':'\ud83c\udf34',
7775    'pancakes':'\ud83e\udd5e',
7776    'panda_face':'\ud83d\udc3c',
7777    'paperclip':'\ud83d\udcce',
7778    'paperclips':'\ud83d\udd87',
7779    'parasol_on_ground':'\u26f1',
7780    'parking':'\ud83c\udd7f\ufe0f',
7781    'part_alternation_mark':'\u303d\ufe0f',
7782    'partly_sunny':'\u26c5\ufe0f',
7783    'passenger_ship':'\ud83d\udef3',
7784    'passport_control':'\ud83d\udec2',
7785    'pause_button':'\u23f8',
7786    'peace_symbol':'\u262e\ufe0f',
7787    'peach':'\ud83c\udf51',
7788    'peanuts':'\ud83e\udd5c',
7789    'pear':'\ud83c\udf50',
7790    'pen':'\ud83d\udd8a',
7791    'pencil2':'\u270f\ufe0f',
7792    'penguin':'\ud83d\udc27',
7793    'pensive':'\ud83d\ude14',
7794    'performing_arts':'\ud83c\udfad',
7795    'persevere':'\ud83d\ude23',
7796    'person_fencing':'\ud83e\udd3a',
7797    'pouting_woman':'\ud83d\ude4e',
7798    'phone':'\u260e\ufe0f',
7799    'pick':'\u26cf',
7800    'pig':'\ud83d\udc37',
7801    'pig2':'\ud83d\udc16',
7802    'pig_nose':'\ud83d\udc3d',
7803    'pill':'\ud83d\udc8a',
7804    'pineapple':'\ud83c\udf4d',
7805    'ping_pong':'\ud83c\udfd3',
7806    'pisces':'\u2653\ufe0f',
7807    'pizza':'\ud83c\udf55',
7808    'place_of_worship':'\ud83d\uded0',
7809    'plate_with_cutlery':'\ud83c\udf7d',
7810    'play_or_pause_button':'\u23ef',
7811    'point_down':'\ud83d\udc47',
7812    'point_left':'\ud83d\udc48',
7813    'point_right':'\ud83d\udc49',
7814    'point_up':'\u261d\ufe0f',
7815    'point_up_2':'\ud83d\udc46',
7816    'police_car':'\ud83d\ude93',
7817    'policewoman':'\ud83d\udc6e&zwj;\u2640\ufe0f',
7818    'poodle':'\ud83d\udc29',
7819    'popcorn':'\ud83c\udf7f',
7820    'post_office':'\ud83c\udfe3',
7821    'postal_horn':'\ud83d\udcef',
7822    'postbox':'\ud83d\udcee',
7823    'potable_water':'\ud83d\udeb0',
7824    'potato':'\ud83e\udd54',
7825    'pouch':'\ud83d\udc5d',
7826    'poultry_leg':'\ud83c\udf57',
7827    'pound':'\ud83d\udcb7',
7828    'rage':'\ud83d\ude21',
7829    'pouting_cat':'\ud83d\ude3e',
7830    'pouting_man':'\ud83d\ude4e&zwj;\u2642\ufe0f',
7831    'pray':'\ud83d\ude4f',
7832    'prayer_beads':'\ud83d\udcff',
7833    'pregnant_woman':'\ud83e\udd30',
7834    'previous_track_button':'\u23ee',
7835    'prince':'\ud83e\udd34',
7836    'princess':'\ud83d\udc78',
7837    'printer':'\ud83d\udda8',
7838    'purple_heart':'\ud83d\udc9c',
7839    'purse':'\ud83d\udc5b',
7840    'pushpin':'\ud83d\udccc',
7841    'put_litter_in_its_place':'\ud83d\udeae',
7842    'question':'\u2753',
7843    'rabbit':'\ud83d\udc30',
7844    'rabbit2':'\ud83d\udc07',
7845    'racehorse':'\ud83d\udc0e',
7846    'racing_car':'\ud83c\udfce',
7847    'radio':'\ud83d\udcfb',
7848    'radio_button':'\ud83d\udd18',
7849    'radioactive':'\u2622\ufe0f',
7850    'railway_car':'\ud83d\ude83',
7851    'railway_track':'\ud83d\udee4',
7852    'rainbow':'\ud83c\udf08',
7853    'rainbow_flag':'\ud83c\udff3\ufe0f&zwj;\ud83c\udf08',
7854    'raised_back_of_hand':'\ud83e\udd1a',
7855    'raised_hand_with_fingers_splayed':'\ud83d\udd90',
7856    'raised_hands':'\ud83d\ude4c',
7857    'raising_hand_woman':'\ud83d\ude4b',
7858    'raising_hand_man':'\ud83d\ude4b&zwj;\u2642\ufe0f',
7859    'ram':'\ud83d\udc0f',
7860    'ramen':'\ud83c\udf5c',
7861    'rat':'\ud83d\udc00',
7862    'record_button':'\u23fa',
7863    'recycle':'\u267b\ufe0f',
7864    'red_circle':'\ud83d\udd34',
7865    'registered':'\u00ae\ufe0f',
7866    'relaxed':'\u263a\ufe0f',
7867    'relieved':'\ud83d\ude0c',
7868    'reminder_ribbon':'\ud83c\udf97',
7869    'repeat':'\ud83d\udd01',
7870    'repeat_one':'\ud83d\udd02',
7871    'rescue_worker_helmet':'\u26d1',
7872    'restroom':'\ud83d\udebb',
7873    'revolving_hearts':'\ud83d\udc9e',
7874    'rewind':'\u23ea',
7875    'rhinoceros':'\ud83e\udd8f',
7876    'ribbon':'\ud83c\udf80',
7877    'rice':'\ud83c\udf5a',
7878    'rice_ball':'\ud83c\udf59',
7879    'rice_cracker':'\ud83c\udf58',
7880    'rice_scene':'\ud83c\udf91',
7881    'right_anger_bubble':'\ud83d\uddef',
7882    'ring':'\ud83d\udc8d',
7883    'robot':'\ud83e\udd16',
7884    'rocket':'\ud83d\ude80',
7885    'rofl':'\ud83e\udd23',
7886    'roll_eyes':'\ud83d\ude44',
7887    'roller_coaster':'\ud83c\udfa2',
7888    'rooster':'\ud83d\udc13',
7889    'rose':'\ud83c\udf39',
7890    'rosette':'\ud83c\udff5',
7891    'rotating_light':'\ud83d\udea8',
7892    'round_pushpin':'\ud83d\udccd',
7893    'rowing_man':'\ud83d\udea3',
7894    'rowing_woman':'\ud83d\udea3&zwj;\u2640\ufe0f',
7895    'rugby_football':'\ud83c\udfc9',
7896    'running_man':'\ud83c\udfc3',
7897    'running_shirt_with_sash':'\ud83c\udfbd',
7898    'running_woman':'\ud83c\udfc3&zwj;\u2640\ufe0f',
7899    'sa':'\ud83c\ude02\ufe0f',
7900    'sagittarius':'\u2650\ufe0f',
7901    'sake':'\ud83c\udf76',
7902    'sandal':'\ud83d\udc61',
7903    'santa':'\ud83c\udf85',
7904    'satellite':'\ud83d\udce1',
7905    'saxophone':'\ud83c\udfb7',
7906    'school':'\ud83c\udfeb',
7907    'school_satchel':'\ud83c\udf92',
7908    'scissors':'\u2702\ufe0f',
7909    'scorpion':'\ud83e\udd82',
7910    'scorpius':'\u264f\ufe0f',
7911    'scream':'\ud83d\ude31',
7912    'scream_cat':'\ud83d\ude40',
7913    'scroll':'\ud83d\udcdc',
7914    'seat':'\ud83d\udcba',
7915    'secret':'\u3299\ufe0f',
7916    'see_no_evil':'\ud83d\ude48',
7917    'seedling':'\ud83c\udf31',
7918    'selfie':'\ud83e\udd33',
7919    'shallow_pan_of_food':'\ud83e\udd58',
7920    'shamrock':'\u2618\ufe0f',
7921    'shark':'\ud83e\udd88',
7922    'shaved_ice':'\ud83c\udf67',
7923    'sheep':'\ud83d\udc11',
7924    'shell':'\ud83d\udc1a',
7925    'shield':'\ud83d\udee1',
7926    'shinto_shrine':'\u26e9',
7927    'ship':'\ud83d\udea2',
7928    'shirt':'\ud83d\udc55',
7929    'shopping':'\ud83d\udecd',
7930    'shopping_cart':'\ud83d\uded2',
7931    'shower':'\ud83d\udebf',
7932    'shrimp':'\ud83e\udd90',
7933    'signal_strength':'\ud83d\udcf6',
7934    'six_pointed_star':'\ud83d\udd2f',
7935    'ski':'\ud83c\udfbf',
7936    'skier':'\u26f7',
7937    'skull':'\ud83d\udc80',
7938    'skull_and_crossbones':'\u2620\ufe0f',
7939    'sleeping':'\ud83d\ude34',
7940    'sleeping_bed':'\ud83d\udecc',
7941    'sleepy':'\ud83d\ude2a',
7942    'slightly_frowning_face':'\ud83d\ude41',
7943    'slightly_smiling_face':'\ud83d\ude42',
7944    'slot_machine':'\ud83c\udfb0',
7945    'small_airplane':'\ud83d\udee9',
7946    'small_blue_diamond':'\ud83d\udd39',
7947    'small_orange_diamond':'\ud83d\udd38',
7948    'small_red_triangle':'\ud83d\udd3a',
7949    'small_red_triangle_down':'\ud83d\udd3b',
7950    'smile':'\ud83d\ude04',
7951    'smile_cat':'\ud83d\ude38',
7952    'smiley':'\ud83d\ude03',
7953    'smiley_cat':'\ud83d\ude3a',
7954    'smiling_imp':'\ud83d\ude08',
7955    'smirk':'\ud83d\ude0f',
7956    'smirk_cat':'\ud83d\ude3c',
7957    'smoking':'\ud83d\udeac',
7958    'snail':'\ud83d\udc0c',
7959    'snake':'\ud83d\udc0d',
7960    'sneezing_face':'\ud83e\udd27',
7961    'snowboarder':'\ud83c\udfc2',
7962    'snowflake':'\u2744\ufe0f',
7963    'snowman':'\u26c4\ufe0f',
7964    'snowman_with_snow':'\u2603\ufe0f',
7965    'sob':'\ud83d\ude2d',
7966    'soccer':'\u26bd\ufe0f',
7967    'soon':'\ud83d\udd1c',
7968    'sos':'\ud83c\udd98',
7969    'sound':'\ud83d\udd09',
7970    'space_invader':'\ud83d\udc7e',
7971    'spades':'\u2660\ufe0f',
7972    'spaghetti':'\ud83c\udf5d',
7973    'sparkle':'\u2747\ufe0f',
7974    'sparkler':'\ud83c\udf87',
7975    'sparkles':'\u2728',
7976    'sparkling_heart':'\ud83d\udc96',
7977    'speak_no_evil':'\ud83d\ude4a',
7978    'speaker':'\ud83d\udd08',
7979    'speaking_head':'\ud83d\udde3',
7980    'speech_balloon':'\ud83d\udcac',
7981    'speedboat':'\ud83d\udea4',
7982    'spider':'\ud83d\udd77',
7983    'spider_web':'\ud83d\udd78',
7984    'spiral_calendar':'\ud83d\uddd3',
7985    'spiral_notepad':'\ud83d\uddd2',
7986    'spoon':'\ud83e\udd44',
7987    'squid':'\ud83e\udd91',
7988    'stadium':'\ud83c\udfdf',
7989    'star':'\u2b50\ufe0f',
7990    'star2':'\ud83c\udf1f',
7991    'star_and_crescent':'\u262a\ufe0f',
7992    'star_of_david':'\u2721\ufe0f',
7993    'stars':'\ud83c\udf20',
7994    'station':'\ud83d\ude89',
7995    'statue_of_liberty':'\ud83d\uddfd',
7996    'steam_locomotive':'\ud83d\ude82',
7997    'stew':'\ud83c\udf72',
7998    'stop_button':'\u23f9',
7999    'stop_sign':'\ud83d\uded1',
8000    'stopwatch':'\u23f1',
8001    'straight_ruler':'\ud83d\udccf',
8002    'strawberry':'\ud83c\udf53',
8003    'stuck_out_tongue':'\ud83d\ude1b',
8004    'stuck_out_tongue_closed_eyes':'\ud83d\ude1d',
8005    'stuck_out_tongue_winking_eye':'\ud83d\ude1c',
8006    'studio_microphone':'\ud83c\udf99',
8007    'stuffed_flatbread':'\ud83e\udd59',
8008    'sun_behind_large_cloud':'\ud83c\udf25',
8009    'sun_behind_rain_cloud':'\ud83c\udf26',
8010    'sun_behind_small_cloud':'\ud83c\udf24',
8011    'sun_with_face':'\ud83c\udf1e',
8012    'sunflower':'\ud83c\udf3b',
8013    'sunglasses':'\ud83d\ude0e',
8014    'sunny':'\u2600\ufe0f',
8015    'sunrise':'\ud83c\udf05',
8016    'sunrise_over_mountains':'\ud83c\udf04',
8017    'surfing_man':'\ud83c\udfc4',
8018    'surfing_woman':'\ud83c\udfc4&zwj;\u2640\ufe0f',
8019    'sushi':'\ud83c\udf63',
8020    'suspension_railway':'\ud83d\ude9f',
8021    'sweat':'\ud83d\ude13',
8022    'sweat_drops':'\ud83d\udca6',
8023    'sweat_smile':'\ud83d\ude05',
8024    'sweet_potato':'\ud83c\udf60',
8025    'swimming_man':'\ud83c\udfca',
8026    'swimming_woman':'\ud83c\udfca&zwj;\u2640\ufe0f',
8027    'symbols':'\ud83d\udd23',
8028    'synagogue':'\ud83d\udd4d',
8029    'syringe':'\ud83d\udc89',
8030    'taco':'\ud83c\udf2e',
8031    'tada':'\ud83c\udf89',
8032    'tanabata_tree':'\ud83c\udf8b',
8033    'taurus':'\u2649\ufe0f',
8034    'taxi':'\ud83d\ude95',
8035    'tea':'\ud83c\udf75',
8036    'telephone_receiver':'\ud83d\udcde',
8037    'telescope':'\ud83d\udd2d',
8038    'tennis':'\ud83c\udfbe',
8039    'tent':'\u26fa\ufe0f',
8040    'thermometer':'\ud83c\udf21',
8041    'thinking':'\ud83e\udd14',
8042    'thought_balloon':'\ud83d\udcad',
8043    'ticket':'\ud83c\udfab',
8044    'tickets':'\ud83c\udf9f',
8045    'tiger':'\ud83d\udc2f',
8046    'tiger2':'\ud83d\udc05',
8047    'timer_clock':'\u23f2',
8048    'tipping_hand_man':'\ud83d\udc81&zwj;\u2642\ufe0f',
8049    'tired_face':'\ud83d\ude2b',
8050    'tm':'\u2122\ufe0f',
8051    'toilet':'\ud83d\udebd',
8052    'tokyo_tower':'\ud83d\uddfc',
8053    'tomato':'\ud83c\udf45',
8054    'tongue':'\ud83d\udc45',
8055    'top':'\ud83d\udd1d',
8056    'tophat':'\ud83c\udfa9',
8057    'tornado':'\ud83c\udf2a',
8058    'trackball':'\ud83d\uddb2',
8059    'tractor':'\ud83d\ude9c',
8060    'traffic_light':'\ud83d\udea5',
8061    'train':'\ud83d\ude8b',
8062    'train2':'\ud83d\ude86',
8063    'tram':'\ud83d\ude8a',
8064    'triangular_flag_on_post':'\ud83d\udea9',
8065    'triangular_ruler':'\ud83d\udcd0',
8066    'trident':'\ud83d\udd31',
8067    'triumph':'\ud83d\ude24',
8068    'trolleybus':'\ud83d\ude8e',
8069    'trophy':'\ud83c\udfc6',
8070    'tropical_drink':'\ud83c\udf79',
8071    'tropical_fish':'\ud83d\udc20',
8072    'truck':'\ud83d\ude9a',
8073    'trumpet':'\ud83c\udfba',
8074    'tulip':'\ud83c\udf37',
8075    'tumbler_glass':'\ud83e\udd43',
8076    'turkey':'\ud83e\udd83',
8077    'turtle':'\ud83d\udc22',
8078    'tv':'\ud83d\udcfa',
8079    'twisted_rightwards_arrows':'\ud83d\udd00',
8080    'two_hearts':'\ud83d\udc95',
8081    'two_men_holding_hands':'\ud83d\udc6c',
8082    'two_women_holding_hands':'\ud83d\udc6d',
8083    'u5272':'\ud83c\ude39',
8084    'u5408':'\ud83c\ude34',
8085    'u55b6':'\ud83c\ude3a',
8086    'u6307':'\ud83c\ude2f\ufe0f',
8087    'u6708':'\ud83c\ude37\ufe0f',
8088    'u6709':'\ud83c\ude36',
8089    'u6e80':'\ud83c\ude35',
8090    'u7121':'\ud83c\ude1a\ufe0f',
8091    'u7533':'\ud83c\ude38',
8092    'u7981':'\ud83c\ude32',
8093    'u7a7a':'\ud83c\ude33',
8094    'umbrella':'\u2614\ufe0f',
8095    'unamused':'\ud83d\ude12',
8096    'underage':'\ud83d\udd1e',
8097    'unicorn':'\ud83e\udd84',
8098    'unlock':'\ud83d\udd13',
8099    'up':'\ud83c\udd99',
8100    'upside_down_face':'\ud83d\ude43',
8101    'v':'\u270c\ufe0f',
8102    'vertical_traffic_light':'\ud83d\udea6',
8103    'vhs':'\ud83d\udcfc',
8104    'vibration_mode':'\ud83d\udcf3',
8105    'video_camera':'\ud83d\udcf9',
8106    'video_game':'\ud83c\udfae',
8107    'violin':'\ud83c\udfbb',
8108    'virgo':'\u264d\ufe0f',
8109    'volcano':'\ud83c\udf0b',
8110    'volleyball':'\ud83c\udfd0',
8111    'vs':'\ud83c\udd9a',
8112    'vulcan_salute':'\ud83d\udd96',
8113    'walking_man':'\ud83d\udeb6',
8114    'walking_woman':'\ud83d\udeb6&zwj;\u2640\ufe0f',
8115    'waning_crescent_moon':'\ud83c\udf18',
8116    'waning_gibbous_moon':'\ud83c\udf16',
8117    'warning':'\u26a0\ufe0f',
8118    'wastebasket':'\ud83d\uddd1',
8119    'watch':'\u231a\ufe0f',
8120    'water_buffalo':'\ud83d\udc03',
8121    'watermelon':'\ud83c\udf49',
8122    'wave':'\ud83d\udc4b',
8123    'wavy_dash':'\u3030\ufe0f',
8124    'waxing_crescent_moon':'\ud83c\udf12',
8125    'wc':'\ud83d\udebe',
8126    'weary':'\ud83d\ude29',
8127    'wedding':'\ud83d\udc92',
8128    'weight_lifting_man':'\ud83c\udfcb\ufe0f',
8129    'weight_lifting_woman':'\ud83c\udfcb\ufe0f&zwj;\u2640\ufe0f',
8130    'whale':'\ud83d\udc33',
8131    'whale2':'\ud83d\udc0b',
8132    'wheel_of_dharma':'\u2638\ufe0f',
8133    'wheelchair':'\u267f\ufe0f',
8134    'white_check_mark':'\u2705',
8135    'white_circle':'\u26aa\ufe0f',
8136    'white_flag':'\ud83c\udff3\ufe0f',
8137    'white_flower':'\ud83d\udcae',
8138    'white_large_square':'\u2b1c\ufe0f',
8139    'white_medium_small_square':'\u25fd\ufe0f',
8140    'white_medium_square':'\u25fb\ufe0f',
8141    'white_small_square':'\u25ab\ufe0f',
8142    'white_square_button':'\ud83d\udd33',
8143    'wilted_flower':'\ud83e\udd40',
8144    'wind_chime':'\ud83c\udf90',
8145    'wind_face':'\ud83c\udf2c',
8146    'wine_glass':'\ud83c\udf77',
8147    'wink':'\ud83d\ude09',
8148    'wolf':'\ud83d\udc3a',
8149    'woman':'\ud83d\udc69',
8150    'woman_artist':'\ud83d\udc69&zwj;\ud83c\udfa8',
8151    'woman_astronaut':'\ud83d\udc69&zwj;\ud83d\ude80',
8152    'woman_cartwheeling':'\ud83e\udd38&zwj;\u2640\ufe0f',
8153    'woman_cook':'\ud83d\udc69&zwj;\ud83c\udf73',
8154    'woman_facepalming':'\ud83e\udd26&zwj;\u2640\ufe0f',
8155    'woman_factory_worker':'\ud83d\udc69&zwj;\ud83c\udfed',
8156    'woman_farmer':'\ud83d\udc69&zwj;\ud83c\udf3e',
8157    'woman_firefighter':'\ud83d\udc69&zwj;\ud83d\ude92',
8158    'woman_health_worker':'\ud83d\udc69&zwj;\u2695\ufe0f',
8159    'woman_judge':'\ud83d\udc69&zwj;\u2696\ufe0f',
8160    'woman_juggling':'\ud83e\udd39&zwj;\u2640\ufe0f',
8161    'woman_mechanic':'\ud83d\udc69&zwj;\ud83d\udd27',
8162    'woman_office_worker':'\ud83d\udc69&zwj;\ud83d\udcbc',
8163    'woman_pilot':'\ud83d\udc69&zwj;\u2708\ufe0f',
8164    'woman_playing_handball':'\ud83e\udd3e&zwj;\u2640\ufe0f',
8165    'woman_playing_water_polo':'\ud83e\udd3d&zwj;\u2640\ufe0f',
8166    'woman_scientist':'\ud83d\udc69&zwj;\ud83d\udd2c',
8167    'woman_shrugging':'\ud83e\udd37&zwj;\u2640\ufe0f',
8168    'woman_singer':'\ud83d\udc69&zwj;\ud83c\udfa4',
8169    'woman_student':'\ud83d\udc69&zwj;\ud83c\udf93',
8170    'woman_teacher':'\ud83d\udc69&zwj;\ud83c\udfeb',
8171    'woman_technologist':'\ud83d\udc69&zwj;\ud83d\udcbb',
8172    'woman_with_turban':'\ud83d\udc73&zwj;\u2640\ufe0f',
8173    'womans_clothes':'\ud83d\udc5a',
8174    'womans_hat':'\ud83d\udc52',
8175    'women_wrestling':'\ud83e\udd3c&zwj;\u2640\ufe0f',
8176    'womens':'\ud83d\udeba',
8177    'world_map':'\ud83d\uddfa',
8178    'worried':'\ud83d\ude1f',
8179    'wrench':'\ud83d\udd27',
8180    'writing_hand':'\u270d\ufe0f',
8181    'x':'\u274c',
8182    'yellow_heart':'\ud83d\udc9b',
8183    'yen':'\ud83d\udcb4',
8184    'yin_yang':'\u262f\ufe0f',
8185    'yum':'\ud83d\ude0b',
8186    'zap':'\u26a1\ufe0f',
8187    'zipper_mouth_face':'\ud83e\udd10',
8188    'zzz':'\ud83d\udca4',
8189  
8190    /* special emojis :P */
8191    'octocat':  '<img alt=":octocat:" height="20" width="20" align="absmiddle" src="https://assets-cdn.github.com/images/icons/emoji/octocat.png">',
8192    'showdown': '<span style="font-family: \'Anonymous Pro\', monospace; text-decoration: underline; text-decoration-style: dashed; text-decoration-color: #3e8b8a;text-underline-position: under;">S</span>'
8193  };
8194  
8195  /**
8196   * Created by Estevao on 31-05-2015.
8197   */
8198  
8199  /**
8200   * Showdown Converter class
8201   * @class
8202   * @param {object} [converterOptions]
8203   * @returns {Converter}
8204   */
8205  showdown.Converter = function (converterOptions) {
8206    'use strict';
8207  
8208    var
8209        /**
8210         * Options used by this converter
8211         * @private
8212         * @type {{}}
8213         */
8214        options = {},
8215  
8216        /**
8217         * Language extensions used by this converter
8218         * @private
8219         * @type {Array}
8220         */
8221        langExtensions = [],
8222  
8223        /**
8224         * Output modifiers extensions used by this converter
8225         * @private
8226         * @type {Array}
8227         */
8228        outputModifiers = [],
8229  
8230        /**
8231         * Event listeners
8232         * @private
8233         * @type {{}}
8234         */
8235        listeners = {},
8236  
8237        /**
8238         * The flavor set in this converter
8239         */
8240        setConvFlavor = setFlavor,
8241  
8242      /**
8243       * Metadata of the document
8244       * @type {{parsed: {}, raw: string, format: string}}
8245       */
8246        metadata = {
8247          parsed: {},
8248          raw: '',
8249          format: ''
8250        };
8251  
8252    _constructor();
8253  
8254    /**
8255     * Converter constructor
8256     * @private
8257     */
8258    function _constructor () {
8259      converterOptions = converterOptions || {};
8260  
8261      for (var gOpt in globalOptions) {
8262        if (globalOptions.hasOwnProperty(gOpt)) {
8263          options[gOpt] = globalOptions[gOpt];
8264        }
8265      }
8266  
8267      // Merge options
8268      if (typeof converterOptions === 'object') {
8269        for (var opt in converterOptions) {
8270          if (converterOptions.hasOwnProperty(opt)) {
8271            options[opt] = converterOptions[opt];
8272          }
8273        }
8274      } else {
8275        throw Error('Converter expects the passed parameter to be an object, but ' + typeof converterOptions +
8276        ' was passed instead.');
8277      }
8278  
8279      if (options.extensions) {
8280        showdown.helper.forEach(options.extensions, _parseExtension);
8281      }
8282    }
8283  
8284    /**
8285     * Parse extension
8286     * @param {*} ext
8287     * @param {string} [name='']
8288     * @private
8289     */
8290    function _parseExtension (ext, name) {
8291  
8292      name = name || null;
8293      // If it's a string, the extension was previously loaded
8294      if (showdown.helper.isString(ext)) {
8295        ext = showdown.helper.stdExtName(ext);
8296        name = ext;
8297  
8298        // LEGACY_SUPPORT CODE
8299        if (showdown.extensions[ext]) {
8300          console.warn('DEPRECATION WARNING: ' + ext + ' is an old extension that uses a deprecated loading method.' +
8301            'Please inform the developer that the extension should be updated!');
8302          legacyExtensionLoading(showdown.extensions[ext], ext);
8303          return;
8304        // END LEGACY SUPPORT CODE
8305  
8306        } else if (!showdown.helper.isUndefined(extensions[ext])) {
8307          ext = extensions[ext];
8308  
8309        } else {
8310          throw Error('Extension "' + ext + '" could not be loaded. It was either not found or is not a valid extension.');
8311        }
8312      }
8313  
8314      if (typeof ext === 'function') {
8315        ext = ext();
8316      }
8317  
8318      if (!showdown.helper.isArray(ext)) {
8319        ext = [ext];
8320      }
8321  
8322      var validExt = validate(ext, name);
8323      if (!validExt.valid) {
8324        throw Error(validExt.error);
8325      }
8326  
8327      for (var i = 0; i < ext.length; ++i) {
8328        switch (ext[i].type) {
8329  
8330          case 'lang':
8331            langExtensions.push(ext[i]);
8332            break;
8333  
8334          case 'output':
8335            outputModifiers.push(ext[i]);
8336            break;
8337        }
8338        if (ext[i].hasOwnProperty('listeners')) {
8339          for (var ln in ext[i].listeners) {
8340            if (ext[i].listeners.hasOwnProperty(ln)) {
8341              listen(ln, ext[i].listeners[ln]);
8342            }
8343          }
8344        }
8345      }
8346  
8347    }
8348  
8349    /**
8350     * LEGACY_SUPPORT
8351     * @param {*} ext
8352     * @param {string} name
8353     */
8354    function legacyExtensionLoading (ext, name) {
8355      if (typeof ext === 'function') {
8356        ext = ext(new showdown.Converter());
8357      }
8358      if (!showdown.helper.isArray(ext)) {
8359        ext = [ext];
8360      }
8361      var valid = validate(ext, name);
8362  
8363      if (!valid.valid) {
8364        throw Error(valid.error);
8365      }
8366  
8367      for (var i = 0; i < ext.length; ++i) {
8368        switch (ext[i].type) {
8369          case 'lang':
8370            langExtensions.push(ext[i]);
8371            break;
8372          case 'output':
8373            outputModifiers.push(ext[i]);
8374            break;
8375          default:// should never reach here
8376            throw Error('Extension loader error: Type unrecognized!!!');
8377        }
8378      }
8379    }
8380  
8381    /**
8382     * Listen to an event
8383     * @param {string} name
8384     * @param {function} callback
8385     */
8386    function listen (name, callback) {
8387      if (!showdown.helper.isString(name)) {
8388        throw Error('Invalid argument in converter.listen() method: name must be a string, but ' + typeof name + ' given');
8389      }
8390  
8391      if (typeof callback !== 'function') {
8392        throw Error('Invalid argument in converter.listen() method: callback must be a function, but ' + typeof callback + ' given');
8393      }
8394  
8395      if (!listeners.hasOwnProperty(name)) {
8396        listeners[name] = [];
8397      }
8398      listeners[name].push(callback);
8399    }
8400  
8401    function rTrimInputText (text) {
8402      var rsp = text.match(/^\s*/)[0].length,
8403          rgx = new RegExp('^\\s{0,' + rsp + '}', 'gm');
8404      return text.replace(rgx, '');
8405    }
8406  
8407    /**
8408     * Dispatch an event
8409     * @private
8410     * @param {string} evtName Event name
8411     * @param {string} text Text
8412     * @param {{}} options Converter Options
8413     * @param {{}} globals
8414     * @returns {string}
8415     */
8416    this._dispatch = function dispatch (evtName, text, options, globals) {
8417      if (listeners.hasOwnProperty(evtName)) {
8418        for (var ei = 0; ei < listeners[evtName].length; ++ei) {
8419          var nText = listeners[evtName][ei](evtName, text, this, options, globals);
8420          if (nText && typeof nText !== 'undefined') {
8421            text = nText;
8422          }
8423        }
8424      }
8425      return text;
8426    };
8427  
8428    /**
8429     * Listen to an event
8430     * @param {string} name
8431     * @param {function} callback
8432     * @returns {showdown.Converter}
8433     */
8434    this.listen = function (name, callback) {
8435      listen(name, callback);
8436      return this;
8437    };
8438  
8439    /**
8440     * Converts a markdown string into HTML
8441     * @param {string} text
8442     * @returns {*}
8443     */
8444    this.makeHtml = function (text) {
8445      //check if text is not falsy
8446      if (!text) {
8447        return text;
8448      }
8449  
8450      var globals = {
8451        gHtmlBlocks:     [],
8452        gHtmlMdBlocks:   [],
8453        gHtmlSpans:      [],
8454        gUrls:           {},
8455        gTitles:         {},
8456        gDimensions:     {},
8457        gListLevel:      0,
8458        hashLinkCounts:  {},
8459        langExtensions:  langExtensions,
8460        outputModifiers: outputModifiers,
8461        converter:       this,
8462        ghCodeBlocks:    [],
8463        metadata: {
8464          parsed: {},
8465          raw: '',
8466          format: ''
8467        }
8468      };
8469  
8470      // This lets us use ¨ trema as an escape char to avoid md5 hashes
8471      // The choice of character is arbitrary; anything that isn't
8472      // magic in Markdown will work.
8473      text = text.replace(/¨/g, '¨T');
8474  
8475      // Replace $ with ¨D
8476      // RegExp interprets $ as a special character
8477      // when it's in a replacement string
8478      text = text.replace(/\$/g, '¨D');
8479  
8480      // Standardize line endings
8481      text = text.replace(/\r\n/g, '\n'); // DOS to Unix
8482      text = text.replace(/\r/g, '\n'); // Mac to Unix
8483  
8484      // Stardardize line spaces
8485      text = text.replace(/\u00A0/g, '&nbsp;');
8486  
8487      if (options.smartIndentationFix) {
8488        text = rTrimInputText(text);
8489      }
8490  
8491      // Make sure text begins and ends with a couple of newlines:
8492      text = '\n\n' + text + '\n\n';
8493  
8494      // detab
8495      text = showdown.subParser('detab')(text, options, globals);
8496  
8497      /**
8498       * Strip any lines consisting only of spaces and tabs.
8499       * This makes subsequent regexs easier to write, because we can
8500       * match consecutive blank lines with /\n+/ instead of something
8501       * contorted like /[ \t]*\n+/
8502       */
8503      text = text.replace(/^[ \t]+$/mg, '');
8504  
8505      //run languageExtensions
8506      showdown.helper.forEach(langExtensions, function (ext) {
8507        text = showdown.subParser('runExtension')(ext, text, options, globals);
8508      });
8509  
8510      // run the sub parsers
8511      text = showdown.subParser('metadata')(text, options, globals);
8512      text = showdown.subParser('hashPreCodeTags')(text, options, globals);
8513      text = showdown.subParser('githubCodeBlocks')(text, options, globals);
8514      text = showdown.subParser('hashHTMLBlocks')(text, options, globals);
8515      text = showdown.subParser('hashCodeTags')(text, options, globals);
8516      text = showdown.subParser('stripLinkDefinitions')(text, options, globals);
8517      text = showdown.subParser('blockGamut')(text, options, globals);
8518      text = showdown.subParser('unhashHTMLSpans')(text, options, globals);
8519      text = showdown.subParser('unescapeSpecialChars')(text, options, globals);
8520  
8521      // attacklab: Restore dollar signs
8522      text = text.replace(/¨D/g, '$$');
8523  
8524      // attacklab: Restore tremas
8525      text = text.replace(/¨T/g, '¨');
8526  
8527      // render a complete html document instead of a partial if the option is enabled
8528      text = showdown.subParser('completeHTMLDocument')(text, options, globals);
8529  
8530      // Run output modifiers
8531      showdown.helper.forEach(outputModifiers, function (ext) {
8532        text = showdown.subParser('runExtension')(ext, text, options, globals);
8533      });
8534  
8535      // update metadata
8536      metadata = globals.metadata;
8537      return text;
8538    };
8539  
8540    /**
8541     * Converts an HTML string into a markdown string
8542     * @param src
8543     * @param [HTMLParser] A WHATWG DOM and HTML parser, such as JSDOM. If none is supplied, window.document will be used.
8544     * @returns {string}
8545     */
8546    this.makeMarkdown = this.makeMd = function (src, HTMLParser) {
8547  
8548      // replace \r\n with \n
8549      src = src.replace(/\r\n/g, '\n');
8550      src = src.replace(/\r/g, '\n'); // old macs
8551  
8552      // due to an edge case, we need to find this: > <
8553      // to prevent removing of non silent white spaces
8554      // ex: <em>this is</em> <strong>sparta</strong>
8555      src = src.replace(/>[ \t]+</, '>¨NBSP;<');
8556  
8557      if (!HTMLParser) {
8558        if (window && window.document) {
8559          HTMLParser = window.document;
8560        } else {
8561          throw new Error('HTMLParser is undefined. If in a webworker or nodejs environment, you need to provide a WHATWG DOM and HTML such as JSDOM');
8562        }
8563      }
8564  
8565      var doc = HTMLParser.createElement('div');
8566      doc.innerHTML = src;
8567  
8568      var globals = {
8569        preList: substitutePreCodeTags(doc)
8570      };
8571  
8572      // remove all newlines and collapse spaces
8573      clean(doc);
8574  
8575      // some stuff, like accidental reference links must now be escaped
8576      // TODO
8577      // doc.innerHTML = doc.innerHTML.replace(/\[[\S\t ]]/);
8578  
8579      var nodes = doc.childNodes,
8580          mdDoc = '';
8581  
8582      for (var i = 0; i < nodes.length; i++) {
8583        mdDoc += showdown.subParser('makeMarkdown.node')(nodes[i], globals);
8584      }
8585  
8586      function clean (node) {
8587        for (var n = 0; n < node.childNodes.length; ++n) {
8588          var child = node.childNodes[n];
8589          if (child.nodeType === 3) {
8590            if (!/\S/.test(child.nodeValue)) {
8591              node.removeChild(child);
8592              --n;
8593            } else {
8594              child.nodeValue = child.nodeValue.split('\n').join(' ');
8595              child.nodeValue = child.nodeValue.replace(/(\s)+/g, '$1');
8596            }
8597          } else if (child.nodeType === 1) {
8598            clean(child);
8599          }
8600        }
8601      }
8602  
8603      // find all pre tags and replace contents with placeholder
8604      // we need this so that we can remove all indentation from html
8605      // to ease up parsing
8606      function substitutePreCodeTags (doc) {
8607  
8608        var pres = doc.querySelectorAll('pre'),
8609            presPH = [];
8610  
8611        for (var i = 0; i < pres.length; ++i) {
8612  
8613          if (pres[i].childElementCount === 1 && pres[i].firstChild.tagName.toLowerCase() === 'code') {
8614            var content = pres[i].firstChild.innerHTML.trim(),
8615                language = pres[i].firstChild.getAttribute('data-language') || '';
8616  
8617            // if data-language attribute is not defined, then we look for class language-*
8618            if (language === '') {
8619              var classes = pres[i].firstChild.className.split(' ');
8620              for (var c = 0; c < classes.length; ++c) {
8621                var matches = classes[c].match(/^language-(.+)$/);
8622                if (matches !== null) {
8623                  language = matches[1];
8624                  break;
8625                }
8626              }
8627            }
8628  
8629            // unescape html entities in content
8630            content = showdown.helper.unescapeHTMLEntities(content);
8631  
8632            presPH.push(content);
8633            pres[i].outerHTML = '<precode language="' + language + '" precodenum="' + i.toString() + '"></precode>';
8634          } else {
8635            presPH.push(pres[i].innerHTML);
8636            pres[i].innerHTML = '';
8637            pres[i].setAttribute('prenum', i.toString());
8638          }
8639        }
8640        return presPH;
8641      }
8642  
8643      return mdDoc;
8644    };
8645  
8646    /**
8647     * Set an option of this Converter instance
8648     * @param {string} key
8649     * @param {*} value
8650     */
8651    this.setOption = function (key, value) {
8652      options[key] = value;
8653    };
8654  
8655    /**
8656     * Get the option of this Converter instance
8657     * @param {string} key
8658     * @returns {*}
8659     */
8660    this.getOption = function (key) {
8661      return options[key];
8662    };
8663  
8664    /**
8665     * Get the options of this Converter instance
8666     * @returns {{}}
8667     */
8668    this.getOptions = function () {
8669      return options;
8670    };
8671  
8672    /**
8673     * Add extension to THIS converter
8674     * @param {{}} extension
8675     * @param {string} [name=null]
8676     */
8677    this.addExtension = function (extension, name) {
8678      name = name || null;
8679      _parseExtension(extension, name);
8680    };
8681  
8682    /**
8683     * Use a global registered extension with THIS converter
8684     * @param {string} extensionName Name of the previously registered extension
8685     */
8686    this.useExtension = function (extensionName) {
8687      _parseExtension(extensionName);
8688    };
8689  
8690    /**
8691     * Set the flavor THIS converter should use
8692     * @param {string} name
8693     */
8694    this.setFlavor = function (name) {
8695      if (!flavor.hasOwnProperty(name)) {
8696        throw Error(name + ' flavor was not found');
8697      }
8698      var preset = flavor[name];
8699      setConvFlavor = name;
8700      for (var option in preset) {
8701        if (preset.hasOwnProperty(option)) {
8702          options[option] = preset[option];
8703        }
8704      }
8705    };
8706  
8707    /**
8708     * Get the currently set flavor of this converter
8709     * @returns {string}
8710     */
8711    this.getFlavor = function () {
8712      return setConvFlavor;
8713    };
8714  
8715    /**
8716     * Remove an extension from THIS converter.
8717     * Note: This is a costly operation. It's better to initialize a new converter
8718     * and specify the extensions you wish to use
8719     * @param {Array} extension
8720     */
8721    this.removeExtension = function (extension) {
8722      if (!showdown.helper.isArray(extension)) {
8723        extension = [extension];
8724      }
8725      for (var a = 0; a < extension.length; ++a) {
8726        var ext = extension[a];
8727        for (var i = 0; i < langExtensions.length; ++i) {
8728          if (langExtensions[i] === ext) {
8729            langExtensions[i].splice(i, 1);
8730          }
8731        }
8732        for (var ii = 0; ii < outputModifiers.length; ++i) {
8733          if (outputModifiers[ii] === ext) {
8734            outputModifiers[ii].splice(i, 1);
8735          }
8736        }
8737      }
8738    };
8739  
8740    /**
8741     * Get all extension of THIS converter
8742     * @returns {{language: Array, output: Array}}
8743     */
8744    this.getAllExtensions = function () {
8745      return {
8746        language: langExtensions,
8747        output: outputModifiers
8748      };
8749    };
8750  
8751    /**
8752     * Get the metadata of the previously parsed document
8753     * @param raw
8754     * @returns {string|{}}
8755     */
8756    this.getMetadata = function (raw) {
8757      if (raw) {
8758        return metadata.raw;
8759      } else {
8760        return metadata.parsed;
8761      }
8762    };
8763  
8764    /**
8765     * Get the metadata format of the previously parsed document
8766     * @returns {string}
8767     */
8768    this.getMetadataFormat = function () {
8769      return metadata.format;
8770    };
8771  
8772    /**
8773     * Private: set a single key, value metadata pair
8774     * @param {string} key
8775     * @param {string} value
8776     */
8777    this._setMetadataPair = function (key, value) {
8778      metadata.parsed[key] = value;
8779    };
8780  
8781    /**
8782     * Private: set metadata format
8783     * @param {string} format
8784     */
8785    this._setMetadataFormat = function (format) {
8786      metadata.format = format;
8787    };
8788  
8789    /**
8790     * Private: set metadata raw text
8791     * @param {string} raw
8792     */
8793    this._setMetadataRaw = function (raw) {
8794      metadata.raw = raw;
8795    };
8796  };
8797  
8798  /**
8799   * Turn Markdown link shortcuts into XHTML <a> tags.
8800   */
8801  showdown.subParser('anchors', function (text, options, globals) {
8802    'use strict';
8803  
8804    text = globals.converter._dispatch('anchors.before', text, options, globals);
8805  
8806    var writeAnchorTag = function (wholeMatch, linkText, linkId, url, m5, m6, title) {
8807      if (showdown.helper.isUndefined(title)) {
8808        title = '';
8809      }
8810      linkId = linkId.toLowerCase();
8811  
8812      // Special case for explicit empty url
8813      if (wholeMatch.search(/\(<?\s*>? ?(['"].*['"])?\)$/m) > -1) {
8814        url = '';
8815      } else if (!url) {
8816        if (!linkId) {
8817          // lower-case and turn embedded newlines into spaces
8818          linkId = linkText.toLowerCase().replace(/ ?\n/g, ' ');
8819        }
8820        url = '#' + linkId;
8821  
8822        if (!showdown.helper.isUndefined(globals.gUrls[linkId])) {
8823          url = globals.gUrls[linkId];
8824          if (!showdown.helper.isUndefined(globals.gTitles[linkId])) {
8825            title = globals.gTitles[linkId];
8826          }
8827        } else {
8828          return wholeMatch;
8829        }
8830      }
8831  
8832      //url = showdown.helper.escapeCharacters(url, '*_', false); // replaced line to improve performance
8833      url = url.replace(showdown.helper.regexes.asteriskDashAndColon, showdown.helper.escapeCharactersCallback);
8834  
8835      var result = '<a href="' + url + '"';
8836  
8837      if (title !== '' && title !== null) {
8838        title = title.replace(/"/g, '&quot;');
8839        //title = showdown.helper.escapeCharacters(title, '*_', false); // replaced line to improve performance
8840        title = title.replace(showdown.helper.regexes.asteriskDashAndColon, showdown.helper.escapeCharactersCallback);
8841        result += ' title="' + title + '"';
8842      }
8843  
8844      // optionLinksInNewWindow only applies
8845      // to external links. Hash links (#) open in same page
8846      if (options.openLinksInNewWindow && !/^#/.test(url)) {
8847        // escaped _
8848        result += ' target="¨E95Eblank"';
8849      }
8850  
8851      result += '>' + linkText + '</a>';
8852  
8853      return result;
8854    };
8855  
8856    // First, handle reference-style links: [link text] [id]
8857    text = text.replace(/\[((?:\[[^\]]*]|[^\[\]])*)] ?(?:\n *)?\[(.*?)]()()()()/g, writeAnchorTag);
8858  
8859    // Next, inline-style links: [link text](url "optional title")
8860    // cases with crazy urls like ./image/cat1).png
8861    text = text.replace(/\[((?:\[[^\]]*]|[^\[\]])*)]()[ \t]*\([ \t]?<([^>]*)>(?:[ \t]*((["'])([^"]*?)\5))?[ \t]?\)/g,
8862      writeAnchorTag);
8863  
8864    // normal cases
8865    text = text.replace(/\[((?:\[[^\]]*]|[^\[\]])*)]()[ \t]*\([ \t]?<?([\S]+?(?:\([\S]*?\)[\S]*?)?)>?(?:[ \t]*((["'])([^"]*?)\5))?[ \t]?\)/g,
8866                        writeAnchorTag);
8867  
8868    // handle reference-style shortcuts: [link text]
8869    // These must come last in case you've also got [link test][1]
8870    // or [link test](/foo)
8871    text = text.replace(/\[([^\[\]]+)]()()()()()/g, writeAnchorTag);
8872  
8873    // Lastly handle GithubMentions if option is enabled
8874    if (options.ghMentions) {
8875      text = text.replace(/(^|\s)(\\)?(@([a-z\d]+(?:[a-z\d.-]+?[a-z\d]+)*))/gmi, function (wm, st, escape, mentions, username) {
8876        if (escape === '\\') {
8877          return st + mentions;
8878        }
8879  
8880        //check if options.ghMentionsLink is a string
8881        if (!showdown.helper.isString(options.ghMentionsLink)) {
8882          throw new Error('ghMentionsLink option must be a string');
8883        }
8884        var lnk = options.ghMentionsLink.replace(/\{u}/g, username),
8885            target = '';
8886        if (options.openLinksInNewWindow) {
8887          target = ' target="¨E95Eblank"';
8888        }
8889        return st + '<a href="' + lnk + '"' + target + '>' + mentions + '</a>';
8890      });
8891    }
8892  
8893    text = globals.converter._dispatch('anchors.after', text, options, globals);
8894    return text;
8895  });
8896  
8897  // url allowed chars [a-z\d_.~:/?#[]@!$&'()*+,;=-]
8898  
8899  var simpleURLRegex  = /([*~_]+|\b)(((https?|ftp|dict):\/\/|www\.)[^'">\s]+?\.[^'">\s]+?)()(\1)?(?=\s|$)(?!["<>])/gi,
8900      simpleURLRegex2 = /([*~_]+|\b)(((https?|ftp|dict):\/\/|www\.)[^'">\s]+\.[^'">\s]+?)([.!?,()\[\]])?(\1)?(?=\s|$)(?!["<>])/gi,
8901      delimUrlRegex   = /()<(((https?|ftp|dict):\/\/|www\.)[^'">\s]+)()>()/gi,
8902      simpleMailRegex = /(^|\s)(?:mailto:)?([A-Za-z0-9!#$%&'*+-/=?^_`{|}~.]+@[-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+)(?=$|\s)/gmi,
8903      delimMailRegex  = /<()(?:mailto:)?([-.\w]+@[-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+)>/gi,
8904  
8905      replaceLink = function (options) {
8906        'use strict';
8907        return function (wm, leadingMagicChars, link, m2, m3, trailingPunctuation, trailingMagicChars) {
8908          link = link.replace(showdown.helper.regexes.asteriskDashAndColon, showdown.helper.escapeCharactersCallback);
8909          var lnkTxt = link,
8910              append = '',
8911              target = '',
8912              lmc    = leadingMagicChars || '',
8913              tmc    = trailingMagicChars || '';
8914          if (/^www\./i.test(link)) {
8915            link = link.replace(/^www\./i, 'http://www.');
8916          }
8917          if (options.excludeTrailingPunctuationFromURLs && trailingPunctuation) {
8918            append = trailingPunctuation;
8919          }
8920          if (options.openLinksInNewWindow) {
8921            target = ' target="¨E95Eblank"';
8922          }
8923          return lmc + '<a href="' + link + '"' + target + '>' + lnkTxt + '</a>' + append + tmc;
8924        };
8925      },
8926  
8927      replaceMail = function (options, globals) {
8928        'use strict';
8929        return function (wholeMatch, b, mail) {
8930          var href = 'mailto:';
8931          b = b || '';
8932          mail = showdown.subParser('unescapeSpecialChars')(mail, options, globals);
8933          if (options.encodeEmails) {
8934            href = showdown.helper.encodeEmailAddress(href + mail);
8935            mail = showdown.helper.encodeEmailAddress(mail);
8936          } else {
8937            href = href + mail;
8938          }
8939          return b + '<a href="' + href + '">' + mail + '</a>';
8940        };
8941      };
8942  
8943  showdown.subParser('autoLinks', function (text, options, globals) {
8944    'use strict';
8945  
8946    text = globals.converter._dispatch('autoLinks.before', text, options, globals);
8947  
8948    text = text.replace(delimUrlRegex, replaceLink(options));
8949    text = text.replace(delimMailRegex, replaceMail(options, globals));
8950  
8951    text = globals.converter._dispatch('autoLinks.after', text, options, globals);
8952  
8953    return text;
8954  });
8955  
8956  showdown.subParser('simplifiedAutoLinks', function (text, options, globals) {
8957    'use strict';
8958  
8959    if (!options.simplifiedAutoLink) {
8960      return text;
8961    }
8962  
8963    text = globals.converter._dispatch('simplifiedAutoLinks.before', text, options, globals);
8964  
8965    if (options.excludeTrailingPunctuationFromURLs) {
8966      text = text.replace(simpleURLRegex2, replaceLink(options));
8967    } else {
8968      text = text.replace(simpleURLRegex, replaceLink(options));
8969    }
8970    text = text.replace(simpleMailRegex, replaceMail(options, globals));
8971  
8972    text = globals.converter._dispatch('simplifiedAutoLinks.after', text, options, globals);
8973  
8974    return text;
8975  });
8976  
8977  /**
8978   * These are all the transformations that form block-level
8979   * tags like paragraphs, headers, and list items.
8980   */
8981  showdown.subParser('blockGamut', function (text, options, globals) {
8982    'use strict';
8983  
8984    text = globals.converter._dispatch('blockGamut.before', text, options, globals);
8985  
8986    // we parse blockquotes first so that we can have headings and hrs
8987    // inside blockquotes
8988    text = showdown.subParser('blockQuotes')(text, options, globals);
8989    text = showdown.subParser('headers')(text, options, globals);
8990  
8991    // Do Horizontal Rules:
8992    text = showdown.subParser('horizontalRule')(text, options, globals);
8993  
8994    text = showdown.subParser('lists')(text, options, globals);
8995    text = showdown.subParser('codeBlocks')(text, options, globals);
8996    text = showdown.subParser('tables')(text, options, globals);
8997  
8998    // We already ran _HashHTMLBlocks() before, in Markdown(), but that
8999    // was to escape raw HTML in the original Markdown source. This time,
9000    // we're escaping the markup we've just created, so that we don't wrap
9001    // <p> tags around block-level tags.
9002    text = showdown.subParser('hashHTMLBlocks')(text, options, globals);
9003    text = showdown.subParser('paragraphs')(text, options, globals);
9004  
9005    text = globals.converter._dispatch('blockGamut.after', text, options, globals);
9006  
9007    return text;
9008  });
9009  
9010  showdown.subParser('blockQuotes', function (text, options, globals) {
9011    'use strict';
9012  
9013    text = globals.converter._dispatch('blockQuotes.before', text, options, globals);
9014  
9015    // add a couple extra lines after the text and endtext mark
9016    text = text + '\n\n';
9017  
9018    var rgx = /(^ {0,3}>[ \t]?.+\n(.+\n)*\n*)+/gm;
9019  
9020    if (options.splitAdjacentBlockquotes) {
9021      rgx = /^ {0,3}>[\s\S]*?(?:\n\n)/gm;
9022    }
9023  
9024    text = text.replace(rgx, function (bq) {
9025      // attacklab: hack around Konqueror 3.5.4 bug:
9026      // "----------bug".replace(/^-/g,"") == "bug"
9027      bq = bq.replace(/^[ \t]*>[ \t]?/gm, ''); // trim one level of quoting
9028  
9029      // attacklab: clean up hack
9030      bq = bq.replace(/¨0/g, '');
9031  
9032      bq = bq.replace(/^[ \t]+$/gm, ''); // trim whitespace-only lines
9033      bq = showdown.subParser('githubCodeBlocks')(bq, options, globals);
9034      bq = showdown.subParser('blockGamut')(bq, options, globals); // recurse
9035  
9036      bq = bq.replace(/(^|\n)/g, '$1  ');
9037      // These leading spaces screw with <pre> content, so we need to fix that:
9038      bq = bq.replace(/(\s*<pre>[^\r]+?<\/pre>)/gm, function (wholeMatch, m1) {
9039        var pre = m1;
9040        // attacklab: hack around Konqueror 3.5.4 bug:
9041        pre = pre.replace(/^  /mg, '¨0');
9042        pre = pre.replace(/¨0/g, '');
9043        return pre;
9044      });
9045  
9046      return showdown.subParser('hashBlock')('<blockquote>\n' + bq + '\n</blockquote>', options, globals);
9047    });
9048  
9049    text = globals.converter._dispatch('blockQuotes.after', text, options, globals);
9050    return text;
9051  });
9052  
9053  /**
9054   * Process Markdown `<pre><code>` blocks.
9055   */
9056  showdown.subParser('codeBlocks', function (text, options, globals) {
9057    'use strict';
9058  
9059    text = globals.converter._dispatch('codeBlocks.before', text, options, globals);
9060  
9061    // sentinel workarounds for lack of \A and \Z, safari\khtml bug
9062    text += '¨0';
9063  
9064    var pattern = /(?:\n\n|^)((?:(?:[ ]{4}|\t).*\n+)+)(\n*[ ]{0,3}[^ \t\n]|(?=¨0))/g;
9065    text = text.replace(pattern, function (wholeMatch, m1, m2) {
9066      var codeblock = m1,
9067          nextChar = m2,
9068          end = '\n';
9069  
9070      codeblock = showdown.subParser('outdent')(codeblock, options, globals);
9071      codeblock = showdown.subParser('encodeCode')(codeblock, options, globals);
9072      codeblock = showdown.subParser('detab')(codeblock, options, globals);
9073      codeblock = codeblock.replace(/^\n+/g, ''); // trim leading newlines
9074      codeblock = codeblock.replace(/\n+$/g, ''); // trim trailing newlines
9075  
9076      if (options.omitExtraWLInCodeBlocks) {
9077        end = '';
9078      }
9079  
9080      codeblock = '<pre><code>' + codeblock + end + '</code></pre>';
9081  
9082      return showdown.subParser('hashBlock')(codeblock, options, globals) + nextChar;
9083    });
9084  
9085    // strip sentinel
9086    text = text.replace(/¨0/, '');
9087  
9088    text = globals.converter._dispatch('codeBlocks.after', text, options, globals);
9089    return text;
9090  });
9091  
9092  /**
9093   *
9094   *   *  Backtick quotes are used for <code></code> spans.
9095   *
9096   *   *  You can use multiple backticks as the delimiters if you want to
9097   *     include literal backticks in the code span. So, this input:
9098   *
9099   *         Just type ``foo `bar` baz`` at the prompt.
9100   *
9101   *       Will translate to:
9102   *
9103   *         <p>Just type <code>foo `bar` baz</code> at the prompt.</p>
9104   *
9105   *    There's no arbitrary limit to the number of backticks you
9106   *    can use as delimters. If you need three consecutive backticks
9107   *    in your code, use four for delimiters, etc.
9108   *
9109   *  *  You can use spaces to get literal backticks at the edges:
9110   *
9111   *         ... type `` `bar` `` ...
9112   *
9113   *       Turns to:
9114   *
9115   *         ... type <code>`bar`</code> ...
9116   */
9117  showdown.subParser('codeSpans', function (text, options, globals) {
9118    'use strict';
9119  
9120    text = globals.converter._dispatch('codeSpans.before', text, options, globals);
9121  
9122    if (typeof(text) === 'undefined') {
9123      text = '';
9124    }
9125    text = text.replace(/(^|[^\\])(`+)([^\r]*?[^`])\2(?!`)/gm,
9126      function (wholeMatch, m1, m2, m3) {
9127        var c = m3;
9128        c = c.replace(/^([ \t]*)/g, '');    // leading whitespace
9129        c = c.replace(/[ \t]*$/g, '');    // trailing whitespace
9130        c = showdown.subParser('encodeCode')(c, options, globals);
9131        c = m1 + '<code>' + c + '</code>';
9132        c = showdown.subParser('hashHTMLSpans')(c, options, globals);
9133        return c;
9134      }
9135    );
9136  
9137    text = globals.converter._dispatch('codeSpans.after', text, options, globals);
9138    return text;
9139  });
9140  
9141  /**
9142   * Create a full HTML document from the processed markdown
9143   */
9144  showdown.subParser('completeHTMLDocument', function (text, options, globals) {
9145    'use strict';
9146  
9147    if (!options.completeHTMLDocument) {
9148      return text;
9149    }
9150  
9151    text = globals.converter._dispatch('completeHTMLDocument.before', text, options, globals);
9152  
9153    var doctype = 'html',
9154        doctypeParsed = '<!DOCTYPE HTML>\n',
9155        title = '',
9156        charset = '<meta charset="utf-8">\n',
9157        lang = '',
9158        metadata = '';
9159  
9160    if (typeof globals.metadata.parsed.doctype !== 'undefined') {
9161      doctypeParsed = '<!DOCTYPE ' +  globals.metadata.parsed.doctype + '>\n';
9162      doctype = globals.metadata.parsed.doctype.toString().toLowerCase();
9163      if (doctype === 'html' || doctype === 'html5') {
9164        charset = '<meta charset="utf-8">';
9165      }
9166    }
9167  
9168    for (var meta in globals.metadata.parsed) {
9169      if (globals.metadata.parsed.hasOwnProperty(meta)) {
9170        switch (meta.toLowerCase()) {
9171          case 'doctype':
9172            break;
9173  
9174          case 'title':
9175            title = '<title>' +  globals.metadata.parsed.title + '</title>\n';
9176            break;
9177  
9178          case 'charset':
9179            if (doctype === 'html' || doctype === 'html5') {
9180              charset = '<meta charset="' + globals.metadata.parsed.charset + '">\n';
9181            } else {
9182              charset = '<meta name="charset" content="' + globals.metadata.parsed.charset + '">\n';
9183            }
9184            break;
9185  
9186          case 'language':
9187          case 'lang':
9188            lang = ' lang="' + globals.metadata.parsed[meta] + '"';
9189            metadata += '<meta name="' + meta + '" content="' + globals.metadata.parsed[meta] + '">\n';
9190            break;
9191  
9192          default:
9193            metadata += '<meta name="' + meta + '" content="' + globals.metadata.parsed[meta] + '">\n';
9194        }
9195      }
9196    }
9197  
9198    text = doctypeParsed + '<html' + lang + '>\n<head>\n' + title + charset + metadata + '</head>\n<body>\n' + text.trim() + '\n</body>\n</html>';
9199  
9200    text = globals.converter._dispatch('completeHTMLDocument.after', text, options, globals);
9201    return text;
9202  });
9203  
9204  /**
9205   * Convert all tabs to spaces
9206   */
9207  showdown.subParser('detab', function (text, options, globals) {
9208    'use strict';
9209    text = globals.converter._dispatch('detab.before', text, options, globals);
9210  
9211    // expand first n-1 tabs
9212    text = text.replace(/\t(?=\t)/g, '    '); // g_tab_width
9213  
9214    // replace the nth with two sentinels
9215    text = text.replace(/\t/g, '¨A¨B');
9216  
9217    // use the sentinel to anchor our regex so it doesn't explode
9218    text = text.replace(/¨B(.+?)¨A/g, function (wholeMatch, m1) {
9219      var leadingText = m1,
9220          numSpaces = 4 - leadingText.length % 4;  // g_tab_width
9221  
9222      // there *must* be a better way to do this:
9223      for (var i = 0; i < numSpaces; i++) {
9224        leadingText += ' ';
9225      }
9226  
9227      return leadingText;
9228    });
9229  
9230    // clean up sentinels
9231    text = text.replace(/¨A/g, '    ');  // g_tab_width
9232    text = text.replace(/¨B/g, '');
9233  
9234    text = globals.converter._dispatch('detab.after', text, options, globals);
9235    return text;
9236  });
9237  
9238  showdown.subParser('ellipsis', function (text, options, globals) {
9239    'use strict';
9240  
9241    text = globals.converter._dispatch('ellipsis.before', text, options, globals);
9242  
9243    text = text.replace(/\.\.\./g, '…');
9244  
9245    text = globals.converter._dispatch('ellipsis.after', text, options, globals);
9246  
9247    return text;
9248  });
9249  
9250  /**
9251   * Turn emoji codes into emojis
9252   *
9253   * List of supported emojis: https://github.com/showdownjs/showdown/wiki/Emojis
9254   */
9255  showdown.subParser('emoji', function (text, options, globals) {
9256    'use strict';
9257  
9258    if (!options.emoji) {
9259      return text;
9260    }
9261  
9262    text = globals.converter._dispatch('emoji.before', text, options, globals);
9263  
9264    var emojiRgx = /:([\S]+?):/g;
9265  
9266    text = text.replace(emojiRgx, function (wm, emojiCode) {
9267      if (showdown.helper.emojis.hasOwnProperty(emojiCode)) {
9268        return showdown.helper.emojis[emojiCode];
9269      }
9270      return wm;
9271    });
9272  
9273    text = globals.converter._dispatch('emoji.after', text, options, globals);
9274  
9275    return text;
9276  });
9277  
9278  /**
9279   * Smart processing for ampersands and angle brackets that need to be encoded.
9280   */
9281  showdown.subParser('encodeAmpsAndAngles', function (text, options, globals) {
9282    'use strict';
9283    text = globals.converter._dispatch('encodeAmpsAndAngles.before', text, options, globals);
9284  
9285    // Ampersand-encoding based entirely on Nat Irons's Amputator MT plugin:
9286    // http://bumppo.net/projects/amputator/
9287    text = text.replace(/&(?!#?[xX]?(?:[0-9a-fA-F]+|\w+);)/g, '&amp;');
9288  
9289    // Encode naked <'s
9290    text = text.replace(/<(?![a-z\/?$!])/gi, '&lt;');
9291  
9292    // Encode <
9293    text = text.replace(/</g, '&lt;');
9294  
9295    // Encode >
9296    text = text.replace(/>/g, '&gt;');
9297  
9298    text = globals.converter._dispatch('encodeAmpsAndAngles.after', text, options, globals);
9299    return text;
9300  });
9301  
9302  /**
9303   * Returns the string, with after processing the following backslash escape sequences.
9304   *
9305   * attacklab: The polite way to do this is with the new escapeCharacters() function:
9306   *
9307   *    text = escapeCharacters(text,"\\",true);
9308   *    text = escapeCharacters(text,"`*_{}[]()>#+-.!",true);
9309   *
9310   * ...but we're sidestepping its use of the (slow) RegExp constructor
9311   * as an optimization for Firefox.  This function gets called a LOT.
9312   */
9313  showdown.subParser('encodeBackslashEscapes', function (text, options, globals) {
9314    'use strict';
9315    text = globals.converter._dispatch('encodeBackslashEscapes.before', text, options, globals);
9316  
9317    text = text.replace(/\\(\\)/g, showdown.helper.escapeCharactersCallback);
9318    text = text.replace(/\\([`*_{}\[\]()>#+.!~=|-])/g, showdown.helper.escapeCharactersCallback);
9319  
9320    text = globals.converter._dispatch('encodeBackslashEscapes.after', text, options, globals);
9321    return text;
9322  });
9323  
9324  /**
9325   * Encode/escape certain characters inside Markdown code runs.
9326   * The point is that in code, these characters are literals,
9327   * and lose their special Markdown meanings.
9328   */
9329  showdown.subParser('encodeCode', function (text, options, globals) {
9330    'use strict';
9331  
9332    text = globals.converter._dispatch('encodeCode.before', text, options, globals);
9333  
9334    // Encode all ampersands; HTML entities are not
9335    // entities within a Markdown code span.
9336    text = text
9337      .replace(/&/g, '&amp;')
9338    // Do the angle bracket song and dance:
9339      .replace(/</g, '&lt;')
9340      .replace(/>/g, '&gt;')
9341    // Now, escape characters that are magic in Markdown:
9342      .replace(/([*_{}\[\]\\=~-])/g, showdown.helper.escapeCharactersCallback);
9343  
9344    text = globals.converter._dispatch('encodeCode.after', text, options, globals);
9345    return text;
9346  });
9347  
9348  /**
9349   * Within tags -- meaning between < and > -- encode [\ ` * _ ~ =] so they
9350   * don't conflict with their use in Markdown for code, italics and strong.
9351   */
9352  showdown.subParser('escapeSpecialCharsWithinTagAttributes', function (text, options, globals) {
9353    'use strict';
9354    text = globals.converter._dispatch('escapeSpecialCharsWithinTagAttributes.before', text, options, globals);
9355  
9356    // Build a regex to find HTML tags.
9357    var tags     = /<\/?[a-z\d_:-]+(?:[\s]+[\s\S]+?)?>/gi,
9358        comments = /<!(--(?:(?:[^>-]|-[^>])(?:[^-]|-[^-])*)--)>/gi;
9359  
9360    text = text.replace(tags, function (wholeMatch) {
9361      return wholeMatch
9362        .replace(/(.)<\/?code>(?=.)/g, '$1`')
9363        .replace(/([\\`*_~=|])/g, showdown.helper.escapeCharactersCallback);
9364    });
9365  
9366    text = text.replace(comments, function (wholeMatch) {
9367      return wholeMatch
9368        .replace(/([\\`*_~=|])/g, showdown.helper.escapeCharactersCallback);
9369    });
9370  
9371    text = globals.converter._dispatch('escapeSpecialCharsWithinTagAttributes.after', text, options, globals);
9372    return text;
9373  });
9374  
9375  /**
9376   * Handle github codeblocks prior to running HashHTML so that
9377   * HTML contained within the codeblock gets escaped properly
9378   * Example:
9379   * ```ruby
9380   *     def hello_world(x)
9381   *       puts "Hello, #{x}"
9382   *     end
9383   * ```
9384   */
9385  showdown.subParser('githubCodeBlocks', function (text, options, globals) {
9386    'use strict';
9387  
9388    // early exit if option is not enabled
9389    if (!options.ghCodeBlocks) {
9390      return text;
9391    }
9392  
9393    text = globals.converter._dispatch('githubCodeBlocks.before', text, options, globals);
9394  
9395    text += '¨0';
9396  
9397    text = text.replace(/(?:^|\n)(?: {0,3})(```+|~~~+)(?: *)([^\s`~]*)\n([\s\S]*?)\n(?: {0,3})\1/g, function (wholeMatch, delim, language, codeblock) {
9398      var end = (options.omitExtraWLInCodeBlocks) ? '' : '\n';
9399  
9400      // First parse the github code block
9401      codeblock = showdown.subParser('encodeCode')(codeblock, options, globals);
9402      codeblock = showdown.subParser('detab')(codeblock, options, globals);
9403      codeblock = codeblock.replace(/^\n+/g, ''); // trim leading newlines
9404      codeblock = codeblock.replace(/\n+$/g, ''); // trim trailing whitespace
9405  
9406      codeblock = '<pre><code' + (language ? ' class="' + language + ' language-' + language + '"' : '') + '>' + codeblock + end + '</code></pre>';
9407  
9408      codeblock = showdown.subParser('hashBlock')(codeblock, options, globals);
9409  
9410      // Since GHCodeblocks can be false positives, we need to
9411      // store the primitive text and the parsed text in a global var,
9412      // and then return a token
9413      return '\n\n¨G' + (globals.ghCodeBlocks.push({text: wholeMatch, codeblock: codeblock}) - 1) + 'G\n\n';
9414    });
9415  
9416    // attacklab: strip sentinel
9417    text = text.replace(/¨0/, '');
9418  
9419    return globals.converter._dispatch('githubCodeBlocks.after', text, options, globals);
9420  });
9421  
9422  showdown.subParser('hashBlock', function (text, options, globals) {
9423    'use strict';
9424    text = globals.converter._dispatch('hashBlock.before', text, options, globals);
9425    text = text.replace(/(^\n+|\n+$)/g, '');
9426    text = '\n\n¨K' + (globals.gHtmlBlocks.push(text) - 1) + 'K\n\n';
9427    text = globals.converter._dispatch('hashBlock.after', text, options, globals);
9428    return text;
9429  });
9430  
9431  /**
9432   * Hash and escape <code> elements that should not be parsed as markdown
9433   */
9434  showdown.subParser('hashCodeTags', function (text, options, globals) {
9435    'use strict';
9436    text = globals.converter._dispatch('hashCodeTags.before', text, options, globals);
9437  
9438    var repFunc = function (wholeMatch, match, left, right) {
9439      var codeblock = left + showdown.subParser('encodeCode')(match, options, globals) + right;
9440      return '¨C' + (globals.gHtmlSpans.push(codeblock) - 1) + 'C';
9441    };
9442  
9443    // Hash naked <code>
9444    text = showdown.helper.replaceRecursiveRegExp(text, repFunc, '<code\\b[^>]*>', '</code>', 'gim');
9445  
9446    text = globals.converter._dispatch('hashCodeTags.after', text, options, globals);
9447    return text;
9448  });
9449  
9450  showdown.subParser('hashElement', function (text, options, globals) {
9451    'use strict';
9452  
9453    return function (wholeMatch, m1) {
9454      var blockText = m1;
9455  
9456      // Undo double lines
9457      blockText = blockText.replace(/\n\n/g, '\n');
9458      blockText = blockText.replace(/^\n/, '');
9459  
9460      // strip trailing blank lines
9461      blockText = blockText.replace(/\n+$/g, '');
9462  
9463      // Replace the element text with a marker ("¨KxK" where x is its key)
9464      blockText = '\n\n¨K' + (globals.gHtmlBlocks.push(blockText) - 1) + 'K\n\n';
9465  
9466      return blockText;
9467    };
9468  });
9469  
9470  showdown.subParser('hashHTMLBlocks', function (text, options, globals) {
9471    'use strict';
9472    text = globals.converter._dispatch('hashHTMLBlocks.before', text, options, globals);
9473  
9474    var blockTags = [
9475          'pre',
9476          'div',
9477          'h1',
9478          'h2',
9479          'h3',
9480          'h4',
9481          'h5',
9482          'h6',
9483          'blockquote',
9484          'table',
9485          'dl',
9486          'ol',
9487          'ul',
9488          'script',
9489          'noscript',
9490          'form',
9491          'fieldset',
9492          'iframe',
9493          'math',
9494          'style',
9495          'section',
9496          'header',
9497          'footer',
9498          'nav',
9499          'article',
9500          'aside',
9501          'address',
9502          'audio',
9503          'canvas',
9504          'figure',
9505          'hgroup',
9506          'output',
9507          'video',
9508          'p'
9509        ],
9510        repFunc = function (wholeMatch, match, left, right) {
9511          var txt = wholeMatch;
9512          // check if this html element is marked as markdown
9513          // if so, it's contents should be parsed as markdown
9514          if (left.search(/\bmarkdown\b/) !== -1) {
9515            txt = left + globals.converter.makeHtml(match) + right;
9516          }
9517          return '\n\n¨K' + (globals.gHtmlBlocks.push(txt) - 1) + 'K\n\n';
9518        };
9519  
9520    if (options.backslashEscapesHTMLTags) {
9521      // encode backslash escaped HTML tags
9522      text = text.replace(/\\<(\/?[^>]+?)>/g, function (wm, inside) {
9523        return '&lt;' + inside + '&gt;';
9524      });
9525    }
9526  
9527    // hash HTML Blocks
9528    for (var i = 0; i < blockTags.length; ++i) {
9529  
9530      var opTagPos,
9531          rgx1     = new RegExp('^ {0,3}(<' + blockTags[i] + '\\b[^>]*>)', 'im'),
9532          patLeft  = '<' + blockTags[i] + '\\b[^>]*>',
9533          patRight = '</' + blockTags[i] + '>';
9534      // 1. Look for the first position of the first opening HTML tag in the text
9535      while ((opTagPos = showdown.helper.regexIndexOf(text, rgx1)) !== -1) {
9536  
9537        // if the HTML tag is \ escaped, we need to escape it and break
9538  
9539  
9540        //2. Split the text in that position
9541        var subTexts = showdown.helper.splitAtIndex(text, opTagPos),
9542        //3. Match recursively
9543            newSubText1 = showdown.helper.replaceRecursiveRegExp(subTexts[1], repFunc, patLeft, patRight, 'im');
9544  
9545        // prevent an infinite loop
9546        if (newSubText1 === subTexts[1]) {
9547          break;
9548        }
9549        text = subTexts[0].concat(newSubText1);
9550      }
9551    }
9552    // HR SPECIAL CASE
9553    text = text.replace(/(\n {0,3}(<(hr)\b([^<>])*?\/?>)[ \t]*(?=\n{2,}))/g,
9554      showdown.subParser('hashElement')(text, options, globals));
9555  
9556    // Special case for standalone HTML comments
9557    text = showdown.helper.replaceRecursiveRegExp(text, function (txt) {
9558      return '\n\n¨K' + (globals.gHtmlBlocks.push(txt) - 1) + 'K\n\n';
9559    }, '^ {0,3}<!--', '-->', 'gm');
9560  
9561    // PHP and ASP-style processor instructions (<?...?> and <%...%>)
9562    text = text.replace(/(?:\n\n)( {0,3}(?:<([?%])[^\r]*?\2>)[ \t]*(?=\n{2,}))/g,
9563      showdown.subParser('hashElement')(text, options, globals));
9564  
9565    text = globals.converter._dispatch('hashHTMLBlocks.after', text, options, globals);
9566    return text;
9567  });
9568  
9569  /**
9570   * Hash span elements that should not be parsed as markdown
9571   */
9572  showdown.subParser('hashHTMLSpans', function (text, options, globals) {
9573    'use strict';
9574    text = globals.converter._dispatch('hashHTMLSpans.before', text, options, globals);
9575  
9576    function hashHTMLSpan (html) {
9577      return '¨C' + (globals.gHtmlSpans.push(html) - 1) + 'C';
9578    }
9579  
9580    // Hash Self Closing tags
9581    text = text.replace(/<[^>]+?\/>/gi, function (wm) {
9582      return hashHTMLSpan(wm);
9583    });
9584  
9585    // Hash tags without properties
9586    text = text.replace(/<([^>]+?)>[\s\S]*?<\/\1>/g, function (wm) {
9587      return hashHTMLSpan(wm);
9588    });
9589  
9590    // Hash tags with properties
9591    text = text.replace(/<([^>]+?)\s[^>]+?>[\s\S]*?<\/\1>/g, function (wm) {
9592      return hashHTMLSpan(wm);
9593    });
9594  
9595    // Hash self closing tags without />
9596    text = text.replace(/<[^>]+?>/gi, function (wm) {
9597      return hashHTMLSpan(wm);
9598    });
9599  
9600    /*showdown.helper.matchRecursiveRegExp(text, '<code\\b[^>]*>', '</code>', 'gi');*/
9601  
9602    text = globals.converter._dispatch('hashHTMLSpans.after', text, options, globals);
9603    return text;
9604  });
9605  
9606  /**
9607   * Unhash HTML spans
9608   */
9609  showdown.subParser('unhashHTMLSpans', function (text, options, globals) {
9610    'use strict';
9611    text = globals.converter._dispatch('unhashHTMLSpans.before', text, options, globals);
9612  
9613    for (var i = 0; i < globals.gHtmlSpans.length; ++i) {
9614      var repText = globals.gHtmlSpans[i],
9615          // limiter to prevent infinite loop (assume 10 as limit for recurse)
9616          limit = 0;
9617  
9618      while (/¨C(\d+)C/.test(repText)) {
9619        var num = RegExp.$1;
9620        repText = repText.replace('¨C' + num + 'C', globals.gHtmlSpans[num]);
9621        if (limit === 10) {
9622          console.error('maximum nesting of 10 spans reached!!!');
9623          break;
9624        }
9625        ++limit;
9626      }
9627      text = text.replace('¨C' + i + 'C', repText);
9628    }
9629  
9630    text = globals.converter._dispatch('unhashHTMLSpans.after', text, options, globals);
9631    return text;
9632  });
9633  
9634  /**
9635   * Hash and escape <pre><code> elements that should not be parsed as markdown
9636   */
9637  showdown.subParser('hashPreCodeTags', function (text, options, globals) {
9638    'use strict';
9639    text = globals.converter._dispatch('hashPreCodeTags.before', text, options, globals);
9640  
9641    var repFunc = function (wholeMatch, match, left, right) {
9642      // encode html entities
9643      var codeblock = left + showdown.subParser('encodeCode')(match, options, globals) + right;
9644      return '\n\n¨G' + (globals.ghCodeBlocks.push({text: wholeMatch, codeblock: codeblock}) - 1) + 'G\n\n';
9645    };
9646  
9647    // Hash <pre><code>
9648    text = showdown.helper.replaceRecursiveRegExp(text, repFunc, '^ {0,3}<pre\\b[^>]*>\\s*<code\\b[^>]*>', '^ {0,3}</code>\\s*</pre>', 'gim');
9649  
9650    text = globals.converter._dispatch('hashPreCodeTags.after', text, options, globals);
9651    return text;
9652  });
9653  
9654  showdown.subParser('headers', function (text, options, globals) {
9655    'use strict';
9656  
9657    text = globals.converter._dispatch('headers.before', text, options, globals);
9658  
9659    var headerLevelStart = (isNaN(parseInt(options.headerLevelStart))) ? 1 : parseInt(options.headerLevelStart),
9660  
9661    // Set text-style headers:
9662    //    Header 1
9663    //    ========
9664    //
9665    //    Header 2
9666    //    --------
9667    //
9668        setextRegexH1 = (options.smoothLivePreview) ? /^(.+)[ \t]*\n={2,}[ \t]*\n+/gm : /^(.+)[ \t]*\n=+[ \t]*\n+/gm,
9669        setextRegexH2 = (options.smoothLivePreview) ? /^(.+)[ \t]*\n-{2,}[ \t]*\n+/gm : /^(.+)[ \t]*\n-+[ \t]*\n+/gm;
9670  
9671    text = text.replace(setextRegexH1, function (wholeMatch, m1) {
9672  
9673      var spanGamut = showdown.subParser('spanGamut')(m1, options, globals),
9674          hID = (options.noHeaderId) ? '' : ' id="' + headerId(m1) + '"',
9675          hLevel = headerLevelStart,
9676          hashBlock = '<h' + hLevel + hID + '>' + spanGamut + '</h' + hLevel + '>';
9677      return showdown.subParser('hashBlock')(hashBlock, options, globals);
9678    });
9679  
9680    text = text.replace(setextRegexH2, function (matchFound, m1) {
9681      var spanGamut = showdown.subParser('spanGamut')(m1, options, globals),
9682          hID = (options.noHeaderId) ? '' : ' id="' + headerId(m1) + '"',
9683          hLevel = headerLevelStart + 1,
9684          hashBlock = '<h' + hLevel + hID + '>' + spanGamut + '</h' + hLevel + '>';
9685      return showdown.subParser('hashBlock')(hashBlock, options, globals);
9686    });
9687  
9688    // atx-style headers:
9689    //  # Header 1
9690    //  ## Header 2
9691    //  ## Header 2 with closing hashes ##
9692    //  ...
9693    //  ###### Header 6
9694    //
9695    var atxStyle = (options.requireSpaceBeforeHeadingText) ? /^(#{1,6})[ \t]+(.+?)[ \t]*#*\n+/gm : /^(#{1,6})[ \t]*(.+?)[ \t]*#*\n+/gm;
9696  
9697    text = text.replace(atxStyle, function (wholeMatch, m1, m2) {
9698      var hText = m2;
9699      if (options.customizedHeaderId) {
9700        hText = m2.replace(/\s?\{([^{]+?)}\s*$/, '');
9701      }
9702  
9703      var span = showdown.subParser('spanGamut')(hText, options, globals),
9704          hID = (options.noHeaderId) ? '' : ' id="' + headerId(m2) + '"',
9705          hLevel = headerLevelStart - 1 + m1.length,
9706          header = '<h' + hLevel + hID + '>' + span + '</h' + hLevel + '>';
9707  
9708      return showdown.subParser('hashBlock')(header, options, globals);
9709    });
9710  
9711    function headerId (m) {
9712      var title,
9713          prefix;
9714  
9715      // It is separate from other options to allow combining prefix and customized
9716      if (options.customizedHeaderId) {
9717        var match = m.match(/\{([^{]+?)}\s*$/);
9718        if (match && match[1]) {
9719          m = match[1];
9720        }
9721      }
9722  
9723      title = m;
9724  
9725      // Prefix id to prevent causing inadvertent pre-existing style matches.
9726      if (showdown.helper.isString(options.prefixHeaderId)) {
9727        prefix = options.prefixHeaderId;
9728      } else if (options.prefixHeaderId === true) {
9729        prefix = 'section-';
9730      } else {
9731        prefix = '';
9732      }
9733  
9734      if (!options.rawPrefixHeaderId) {
9735        title = prefix + title;
9736      }
9737  
9738      if (options.ghCompatibleHeaderId) {
9739        title = title
9740          .replace(/ /g, '-')
9741          // replace previously escaped chars (&, ¨ and $)
9742          .replace(/&amp;/g, '')
9743          .replace(/¨T/g, '')
9744          .replace(/¨D/g, '')
9745          // replace rest of the chars (&~$ are repeated as they might have been escaped)
9746          // borrowed from github's redcarpet (some they should produce similar results)
9747          .replace(/[&+$,\/:;=?@"#{}|^¨~\[\]`\\*)(%.!'<>]/g, '')
9748          .toLowerCase();
9749      } else if (options.rawHeaderId) {
9750        title = title
9751          .replace(/ /g, '-')
9752          // replace previously escaped chars (&, ¨ and $)
9753          .replace(/&amp;/g, '&')
9754          .replace(/¨T/g, '¨')
9755          .replace(/¨D/g, '$')
9756          // replace " and '
9757          .replace(/["']/g, '-')
9758          .toLowerCase();
9759      } else {
9760        title = title
9761          .replace(/[^\w]/g, '')
9762          .toLowerCase();
9763      }
9764  
9765      if (options.rawPrefixHeaderId) {
9766        title = prefix + title;
9767      }
9768  
9769      if (globals.hashLinkCounts[title]) {
9770        title = title + '-' + (globals.hashLinkCounts[title]++);
9771      } else {
9772        globals.hashLinkCounts[title] = 1;
9773      }
9774      return title;
9775    }
9776  
9777    text = globals.converter._dispatch('headers.after', text, options, globals);
9778    return text;
9779  });
9780  
9781  /**
9782   * Turn Markdown link shortcuts into XHTML <a> tags.
9783   */
9784  showdown.subParser('horizontalRule', function (text, options, globals) {
9785    'use strict';
9786    text = globals.converter._dispatch('horizontalRule.before', text, options, globals);
9787  
9788    var key = showdown.subParser('hashBlock')('<hr />', options, globals);
9789    text = text.replace(/^ {0,2}( ?-){3,}[ \t]*$/gm, key);
9790    text = text.replace(/^ {0,2}( ?\*){3,}[ \t]*$/gm, key);
9791    text = text.replace(/^ {0,2}( ?_){3,}[ \t]*$/gm, key);
9792  
9793    text = globals.converter._dispatch('horizontalRule.after', text, options, globals);
9794    return text;
9795  });
9796  
9797  /**
9798   * Turn Markdown image shortcuts into <img> tags.
9799   */
9800  showdown.subParser('images', function (text, options, globals) {
9801    'use strict';
9802  
9803    text = globals.converter._dispatch('images.before', text, options, globals);
9804  
9805    var inlineRegExp      = /!\[([^\]]*?)][ \t]*()\([ \t]?<?([\S]+?(?:\([\S]*?\)[\S]*?)?)>?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*(?:(["'])([^"]*?)\6)?[ \t]?\)/g,
9806        crazyRegExp       = /!\[([^\]]*?)][ \t]*()\([ \t]?<([^>]*)>(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*(?:(?:(["'])([^"]*?)\6))?[ \t]?\)/g,
9807        base64RegExp      = /!\[([^\]]*?)][ \t]*()\([ \t]?<?(data:.+?\/.+?;base64,[A-Za-z0-9+/=\n]+?)>?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*(?:(["'])([^"]*?)\6)?[ \t]?\)/g,
9808        referenceRegExp   = /!\[([^\]]*?)] ?(?:\n *)?\[([\s\S]*?)]()()()()()/g,
9809        refShortcutRegExp = /!\[([^\[\]]+)]()()()()()/g;
9810  
9811    function writeImageTagBase64 (wholeMatch, altText, linkId, url, width, height, m5, title) {
9812      url = url.replace(/\s/g, '');
9813      return writeImageTag (wholeMatch, altText, linkId, url, width, height, m5, title);
9814    }
9815  
9816    function writeImageTag (wholeMatch, altText, linkId, url, width, height, m5, title) {
9817  
9818      var gUrls   = globals.gUrls,
9819          gTitles = globals.gTitles,
9820          gDims   = globals.gDimensions;
9821  
9822      linkId = linkId.toLowerCase();
9823  
9824      if (!title) {
9825        title = '';
9826      }
9827      // Special case for explicit empty url
9828      if (wholeMatch.search(/\(<?\s*>? ?(['"].*['"])?\)$/m) > -1) {
9829        url = '';
9830  
9831      } else if (url === '' || url === null) {
9832        if (linkId === '' || linkId === null) {
9833          // lower-case and turn embedded newlines into spaces
9834          linkId = altText.toLowerCase().replace(/ ?\n/g, ' ');
9835        }
9836        url = '#' + linkId;
9837  
9838        if (!showdown.helper.isUndefined(gUrls[linkId])) {
9839          url = gUrls[linkId];
9840          if (!showdown.helper.isUndefined(gTitles[linkId])) {
9841            title = gTitles[linkId];
9842          }
9843          if (!showdown.helper.isUndefined(gDims[linkId])) {
9844            width = gDims[linkId].width;
9845            height = gDims[linkId].height;
9846          }
9847        } else {
9848          return wholeMatch;
9849        }
9850      }
9851  
9852      altText = altText
9853        .replace(/"/g, '&quot;')
9854      //altText = showdown.helper.escapeCharacters(altText, '*_', false);
9855        .replace(showdown.helper.regexes.asteriskDashAndColon, showdown.helper.escapeCharactersCallback);
9856      //url = showdown.helper.escapeCharacters(url, '*_', false);
9857      url = url.replace(showdown.helper.regexes.asteriskDashAndColon, showdown.helper.escapeCharactersCallback);
9858      var result = '<img src="' + url + '" alt="' + altText + '"';
9859  
9860      if (title && showdown.helper.isString(title)) {
9861        title = title
9862          .replace(/"/g, '&quot;')
9863        //title = showdown.helper.escapeCharacters(title, '*_', false);
9864          .replace(showdown.helper.regexes.asteriskDashAndColon, showdown.helper.escapeCharactersCallback);
9865        result += ' title="' + title + '"';
9866      }
9867  
9868      if (width && height) {
9869        width  = (width === '*') ? 'auto' : width;
9870        height = (height === '*') ? 'auto' : height;
9871  
9872        result += ' width="' + width + '"';
9873        result += ' height="' + height + '"';
9874      }
9875  
9876      result += ' />';
9877  
9878      return result;
9879    }
9880  
9881    // First, handle reference-style labeled images: ![alt text][id]
9882    text = text.replace(referenceRegExp, writeImageTag);
9883  
9884    // Next, handle inline images:  ![alt text](url =<width>x<height> "optional title")
9885  
9886    // base64 encoded images
9887    text = text.replace(base64RegExp, writeImageTagBase64);
9888  
9889    // cases with crazy urls like ./image/cat1).png
9890    text = text.replace(crazyRegExp, writeImageTag);
9891  
9892    // normal cases
9893    text = text.replace(inlineRegExp, writeImageTag);
9894  
9895    // handle reference-style shortcuts: ![img text]
9896    text = text.replace(refShortcutRegExp, writeImageTag);
9897  
9898    text = globals.converter._dispatch('images.after', text, options, globals);
9899    return text;
9900  });
9901  
9902  showdown.subParser('italicsAndBold', function (text, options, globals) {
9903    'use strict';
9904  
9905    text = globals.converter._dispatch('italicsAndBold.before', text, options, globals);
9906  
9907    // it's faster to have 3 separate regexes for each case than have just one
9908    // because of backtracing, in some cases, it could lead to an exponential effect
9909    // called "catastrophic backtrace". Ominous!
9910  
9911    function parseInside (txt, left, right) {
9912      /*
9913      if (options.simplifiedAutoLink) {
9914        txt = showdown.subParser('simplifiedAutoLinks')(txt, options, globals);
9915      }
9916      */
9917      return left + txt + right;
9918    }
9919  
9920    // Parse underscores
9921    if (options.literalMidWordUnderscores) {
9922      text = text.replace(/\b___(\S[\s\S]*?)___\b/g, function (wm, txt) {
9923        return parseInside (txt, '<strong><em>', '</em></strong>');
9924      });
9925      text = text.replace(/\b__(\S[\s\S]*?)__\b/g, function (wm, txt) {
9926        return parseInside (txt, '<strong>', '</strong>');
9927      });
9928      text = text.replace(/\b_(\S[\s\S]*?)_\b/g, function (wm, txt) {
9929        return parseInside (txt, '<em>', '</em>');
9930      });
9931    } else {
9932      text = text.replace(/___(\S[\s\S]*?)___/g, function (wm, m) {
9933        return (/\S$/.test(m)) ? parseInside (m, '<strong><em>', '</em></strong>') : wm;
9934      });
9935      text = text.replace(/__(\S[\s\S]*?)__/g, function (wm, m) {
9936        return (/\S$/.test(m)) ? parseInside (m, '<strong>', '</strong>') : wm;
9937      });
9938      text = text.replace(/_([^\s_][\s\S]*?)_/g, function (wm, m) {
9939        // !/^_[^_]/.test(m) - test if it doesn't start with __ (since it seems redundant, we removed it)
9940        return (/\S$/.test(m)) ? parseInside (m, '<em>', '</em>') : wm;
9941      });
9942    }
9943  
9944    // Now parse asterisks
9945    if (options.literalMidWordAsterisks) {
9946      text = text.replace(/([^*]|^)\B\*\*\*(\S[\s\S]*?)\*\*\*\B(?!\*)/g, function (wm, lead, txt) {
9947        return parseInside (txt, lead + '<strong><em>', '</em></strong>');
9948      });
9949      text = text.replace(/([^*]|^)\B\*\*(\S[\s\S]*?)\*\*\B(?!\*)/g, function (wm, lead, txt) {
9950        return parseInside (txt, lead + '<strong>', '</strong>');
9951      });
9952      text = text.replace(/([^*]|^)\B\*(\S[\s\S]*?)\*\B(?!\*)/g, function (wm, lead, txt) {
9953        return parseInside (txt, lead + '<em>', '</em>');
9954      });
9955    } else {
9956      text = text.replace(/\*\*\*(\S[\s\S]*?)\*\*\*/g, function (wm, m) {
9957        return (/\S$/.test(m)) ? parseInside (m, '<strong><em>', '</em></strong>') : wm;
9958      });
9959      text = text.replace(/\*\*(\S[\s\S]*?)\*\*/g, function (wm, m) {
9960        return (/\S$/.test(m)) ? parseInside (m, '<strong>', '</strong>') : wm;
9961      });
9962      text = text.replace(/\*([^\s*][\s\S]*?)\*/g, function (wm, m) {
9963        // !/^\*[^*]/.test(m) - test if it doesn't start with ** (since it seems redundant, we removed it)
9964        return (/\S$/.test(m)) ? parseInside (m, '<em>', '</em>') : wm;
9965      });
9966    }
9967  
9968  
9969    text = globals.converter._dispatch('italicsAndBold.after', text, options, globals);
9970    return text;
9971  });
9972  
9973  /**
9974   * Form HTML ordered (numbered) and unordered (bulleted) lists.
9975   */
9976  showdown.subParser('lists', function (text, options, globals) {
9977    'use strict';
9978  
9979    /**
9980     * Process the contents of a single ordered or unordered list, splitting it
9981     * into individual list items.
9982     * @param {string} listStr
9983     * @param {boolean} trimTrailing
9984     * @returns {string}
9985     */
9986    function processListItems (listStr, trimTrailing) {
9987      // The $g_list_level global keeps track of when we're inside a list.
9988      // Each time we enter a list, we increment it; when we leave a list,
9989      // we decrement. If it's zero, we're not in a list anymore.
9990      //
9991      // We do this because when we're not inside a list, we want to treat
9992      // something like this:
9993      //
9994      //    I recommend upgrading to version
9995      //    8. Oops, now this line is treated
9996      //    as a sub-list.
9997      //
9998      // As a single paragraph, despite the fact that the second line starts
9999      // with a digit-period-space sequence.
10000      //
10001      // Whereas when we're inside a list (or sub-list), that line will be
10002      // treated as the start of a sub-list. What a kludge, huh? This is
10003      // an aspect of Markdown's syntax that's hard to parse perfectly
10004      // without resorting to mind-reading. Perhaps the solution is to
10005      // change the syntax rules such that sub-lists must start with a
10006      // starting cardinal number; e.g. "1." or "a.".
10007      globals.gListLevel++;
10008  
10009      // trim trailing blank lines:
10010      listStr = listStr.replace(/\n{2,}$/, '\n');
10011  
10012      // attacklab: add sentinel to emulate \z
10013      listStr += '¨0';
10014  
10015      var rgx = /(\n)?(^ {0,3})([*+-]|\d+[.])[ \t]+((\[(x|X| )?])?[ \t]*[^\r]+?(\n{1,2}))(?=\n*(¨0| {0,3}([*+-]|\d+[.])[ \t]+))/gm,
10016          isParagraphed = (/\n[ \t]*\n(?!¨0)/.test(listStr));
10017  
10018      // Since version 1.5, nesting sublists requires 4 spaces (or 1 tab) indentation,
10019      // which is a syntax breaking change
10020      // activating this option reverts to old behavior
10021      if (options.disableForced4SpacesIndentedSublists) {
10022        rgx = /(\n)?(^ {0,3})([*+-]|\d+[.])[ \t]+((\[(x|X| )?])?[ \t]*[^\r]+?(\n{1,2}))(?=\n*(¨0|\2([*+-]|\d+[.])[ \t]+))/gm;
10023      }
10024  
10025      listStr = listStr.replace(rgx, function (wholeMatch, m1, m2, m3, m4, taskbtn, checked) {
10026        checked = (checked && checked.trim() !== '');
10027  
10028        var item = showdown.subParser('outdent')(m4, options, globals),
10029            bulletStyle = '';
10030  
10031        // Support for github tasklists
10032        if (taskbtn && options.tasklists) {
10033          bulletStyle = ' class="task-list-item" style="list-style-type: none;"';
10034          item = item.replace(/^[ \t]*\[(x|X| )?]/m, function () {
10035            var otp = '<input type="checkbox" disabled style="margin: 0px 0.35em 0.25em -1.6em; vertical-align: middle;"';
10036            if (checked) {
10037              otp += ' checked';
10038            }
10039            otp += '>';
10040            return otp;
10041          });
10042        }
10043  
10044        // ISSUE #312
10045        // This input: - - - a
10046        // causes trouble to the parser, since it interprets it as:
10047        // <ul><li><li><li>a</li></li></li></ul>
10048        // instead of:
10049        // <ul><li>- - a</li></ul>
10050        // So, to prevent it, we will put a marker (¨A)in the beginning of the line
10051        // Kind of hackish/monkey patching, but seems more effective than overcomplicating the list parser
10052        item = item.replace(/^([-*+]|\d\.)[ \t]+[\S\n ]*/g, function (wm2) {
10053          return '¨A' + wm2;
10054        });
10055  
10056        // m1 - Leading line or
10057        // Has a double return (multi paragraph) or
10058        // Has sublist
10059        if (m1 || (item.search(/\n{2,}/) > -1)) {
10060          item = showdown.subParser('githubCodeBlocks')(item, options, globals);
10061          item = showdown.subParser('blockGamut')(item, options, globals);
10062        } else {
10063          // Recursion for sub-lists:
10064          item = showdown.subParser('lists')(item, options, globals);
10065          item = item.replace(/\n$/, ''); // chomp(item)
10066          item = showdown.subParser('hashHTMLBlocks')(item, options, globals);
10067  
10068          // Colapse double linebreaks
10069          item = item.replace(/\n\n+/g, '\n\n');
10070          if (isParagraphed) {
10071            item = showdown.subParser('paragraphs')(item, options, globals);
10072          } else {
10073            item = showdown.subParser('spanGamut')(item, options, globals);
10074          }
10075        }
10076  
10077        // now we need to remove the marker (¨A)
10078        item = item.replace('¨A', '');
10079        // we can finally wrap the line in list item tags
10080        item =  '<li' + bulletStyle + '>' + item + '</li>\n';
10081  
10082        return item;
10083      });
10084  
10085      // attacklab: strip sentinel
10086      listStr = listStr.replace(/¨0/g, '');
10087  
10088      globals.gListLevel--;
10089  
10090      if (trimTrailing) {
10091        listStr = listStr.replace(/\s+$/, '');
10092      }
10093  
10094      return listStr;
10095    }
10096  
10097    function styleStartNumber (list, listType) {
10098      // check if ol and starts by a number different than 1
10099      if (listType === 'ol') {
10100        var res = list.match(/^ *(\d+)\./);
10101        if (res && res[1] !== '1') {
10102          return ' start="' + res[1] + '"';
10103        }
10104      }
10105      return '';
10106    }
10107  
10108    /**
10109     * Check and parse consecutive lists (better fix for issue #142)
10110     * @param {string} list
10111     * @param {string} listType
10112     * @param {boolean} trimTrailing
10113     * @returns {string}
10114     */
10115    function parseConsecutiveLists (list, listType, trimTrailing) {
10116      // check if we caught 2 or more consecutive lists by mistake
10117      // we use the counterRgx, meaning if listType is UL we look for OL and vice versa
10118      var olRgx = (options.disableForced4SpacesIndentedSublists) ? /^ ?\d+\.[ \t]/gm : /^ {0,3}\d+\.[ \t]/gm,
10119          ulRgx = (options.disableForced4SpacesIndentedSublists) ? /^ ?[*+-][ \t]/gm : /^ {0,3}[*+-][ \t]/gm,
10120          counterRxg = (listType === 'ul') ? olRgx : ulRgx,
10121          result = '';
10122  
10123      if (list.search(counterRxg) !== -1) {
10124        (function parseCL (txt) {
10125          var pos = txt.search(counterRxg),
10126              style = styleStartNumber(list, listType);
10127          if (pos !== -1) {
10128            // slice
10129            result += '\n\n<' + listType + style + '>\n' + processListItems(txt.slice(0, pos), !!trimTrailing) + '</' + listType + '>\n';
10130  
10131            // invert counterType and listType
10132            listType = (listType === 'ul') ? 'ol' : 'ul';
10133            counterRxg = (listType === 'ul') ? olRgx : ulRgx;
10134  
10135            //recurse
10136            parseCL(txt.slice(pos));
10137          } else {
10138            result += '\n\n<' + listType + style + '>\n' + processListItems(txt, !!trimTrailing) + '</' + listType + '>\n';
10139          }
10140        })(list);
10141      } else {
10142        var style = styleStartNumber(list, listType);
10143        result = '\n\n<' + listType + style + '>\n' + processListItems(list, !!trimTrailing) + '</' + listType + '>\n';
10144      }
10145  
10146      return result;
10147    }
10148  
10149    /** Start of list parsing **/
10150    text = globals.converter._dispatch('lists.before', text, options, globals);
10151    // add sentinel to hack around khtml/safari bug:
10152    // http://bugs.webkit.org/show_bug.cgi?id=11231
10153    text += '¨0';
10154  
10155    if (globals.gListLevel) {
10156      text = text.replace(/^(( {0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(¨0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/gm,
10157        function (wholeMatch, list, m2) {
10158          var listType = (m2.search(/[*+-]/g) > -1) ? 'ul' : 'ol';
10159          return parseConsecutiveLists(list, listType, true);
10160        }
10161      );
10162    } else {
10163      text = text.replace(/(\n\n|^\n?)(( {0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(¨0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/gm,
10164        function (wholeMatch, m1, list, m3) {
10165          var listType = (m3.search(/[*+-]/g) > -1) ? 'ul' : 'ol';
10166          return parseConsecutiveLists(list, listType, false);
10167        }
10168      );
10169    }
10170  
10171    // strip sentinel
10172    text = text.replace(/¨0/, '');
10173    text = globals.converter._dispatch('lists.after', text, options, globals);
10174    return text;
10175  });
10176  
10177  /**
10178   * Parse metadata at the top of the document
10179   */
10180  showdown.subParser('metadata', function (text, options, globals) {
10181    'use strict';
10182  
10183    if (!options.metadata) {
10184      return text;
10185    }
10186  
10187    text = globals.converter._dispatch('metadata.before', text, options, globals);
10188  
10189    function parseMetadataContents (content) {
10190      // raw is raw so it's not changed in any way
10191      globals.metadata.raw = content;
10192  
10193      // escape chars forbidden in html attributes
10194      // double quotes
10195      content = content
10196        // ampersand first
10197        .replace(/&/g, '&amp;')
10198        // double quotes
10199        .replace(/"/g, '&quot;');
10200  
10201      content = content.replace(/\n {4}/g, ' ');
10202      content.replace(/^([\S ]+): +([\s\S]+?)$/gm, function (wm, key, value) {
10203        globals.metadata.parsed[key] = value;
10204        return '';
10205      });
10206    }
10207  
10208    text = text.replace(/^\s*«««+(\S*?)\n([\s\S]+?)\n»»»+\n/, function (wholematch, format, content) {
10209      parseMetadataContents(content);
10210      return '¨M';
10211    });
10212  
10213    text = text.replace(/^\s*---+(\S*?)\n([\s\S]+?)\n---+\n/, function (wholematch, format, content) {
10214      if (format) {
10215        globals.metadata.format = format;
10216      }
10217      parseMetadataContents(content);
10218      return '¨M';
10219    });
10220  
10221    text = text.replace(/¨M/g, '');
10222  
10223    text = globals.converter._dispatch('metadata.after', text, options, globals);
10224    return text;
10225  });
10226  
10227  /**
10228   * Remove one level of line-leading tabs or spaces
10229   */
10230  showdown.subParser('outdent', function (text, options, globals) {
10231    'use strict';
10232    text = globals.converter._dispatch('outdent.before', text, options, globals);
10233  
10234    // attacklab: hack around Konqueror 3.5.4 bug:
10235    // "----------bug".replace(/^-/g,"") == "bug"
10236    text = text.replace(/^(\t|[ ]{1,4})/gm, '¨0'); // attacklab: g_tab_width
10237  
10238    // attacklab: clean up hack
10239    text = text.replace(/¨0/g, '');
10240  
10241    text = globals.converter._dispatch('outdent.after', text, options, globals);
10242    return text;
10243  });
10244  
10245  /**
10246   *
10247   */
10248  showdown.subParser('paragraphs', function (text, options, globals) {
10249    'use strict';
10250  
10251    text = globals.converter._dispatch('paragraphs.before', text, options, globals);
10252    // Strip leading and trailing lines:
10253    text = text.replace(/^\n+/g, '');
10254    text = text.replace(/\n+$/g, '');
10255  
10256    var grafs = text.split(/\n{2,}/g),
10257        grafsOut = [],
10258        end = grafs.length; // Wrap <p> tags
10259  
10260    for (var i = 0; i < end; i++) {
10261      var str = grafs[i];
10262      // if this is an HTML marker, copy it
10263      if (str.search(/¨(K|G)(\d+)\1/g) >= 0) {
10264        grafsOut.push(str);
10265  
10266      // test for presence of characters to prevent empty lines being parsed
10267      // as paragraphs (resulting in undesired extra empty paragraphs)
10268      } else if (str.search(/\S/) >= 0) {
10269        str = showdown.subParser('spanGamut')(str, options, globals);
10270        str = str.replace(/^([ \t]*)/g, '<p>');
10271        str += '</p>';
10272        grafsOut.push(str);
10273      }
10274    }
10275  
10276    /** Unhashify HTML blocks */
10277    end = grafsOut.length;
10278    for (i = 0; i < end; i++) {
10279      var blockText = '',
10280          grafsOutIt = grafsOut[i],
10281          codeFlag = false;
10282      // if this is a marker for an html block...
10283      // use RegExp.test instead of string.search because of QML bug
10284      while (/¨(K|G)(\d+)\1/.test(grafsOutIt)) {
10285        var delim = RegExp.$1,
10286            num   = RegExp.$2;
10287  
10288        if (delim === 'K') {
10289          blockText = globals.gHtmlBlocks[num];
10290        } else {
10291          // we need to check if ghBlock is a false positive
10292          if (codeFlag) {
10293            // use encoded version of all text
10294            blockText = showdown.subParser('encodeCode')(globals.ghCodeBlocks[num].text, options, globals);
10295          } else {
10296            blockText = globals.ghCodeBlocks[num].codeblock;
10297          }
10298        }
10299        blockText = blockText.replace(/\$/g, '$$$$'); // Escape any dollar signs
10300  
10301        grafsOutIt = grafsOutIt.replace(/(\n\n)?¨(K|G)\d+\2(\n\n)?/, blockText);
10302        // Check if grafsOutIt is a pre->code
10303        if (/^<pre\b[^>]*>\s*<code\b[^>]*>/.test(grafsOutIt)) {
10304          codeFlag = true;
10305        }
10306      }
10307      grafsOut[i] = grafsOutIt;
10308    }
10309    text = grafsOut.join('\n');
10310    // Strip leading and trailing lines:
10311    text = text.replace(/^\n+/g, '');
10312    text = text.replace(/\n+$/g, '');
10313    return globals.converter._dispatch('paragraphs.after', text, options, globals);
10314  });
10315  
10316  /**
10317   * Run extension
10318   */
10319  showdown.subParser('runExtension', function (ext, text, options, globals) {
10320    'use strict';
10321  
10322    if (ext.filter) {
10323      text = ext.filter(text, globals.converter, options);
10324  
10325    } else if (ext.regex) {
10326      // TODO remove this when old extension loading mechanism is deprecated
10327      var re = ext.regex;
10328      if (!(re instanceof RegExp)) {
10329        re = new RegExp(re, 'g');
10330      }
10331      text = text.replace(re, ext.replace);
10332    }
10333  
10334    return text;
10335  });
10336  
10337  /**
10338   * These are all the transformations that occur *within* block-level
10339   * tags like paragraphs, headers, and list items.
10340   */
10341  showdown.subParser('spanGamut', function (text, options, globals) {
10342    'use strict';
10343  
10344    text = globals.converter._dispatch('spanGamut.before', text, options, globals);
10345    text = showdown.subParser('codeSpans')(text, options, globals);
10346    text = showdown.subParser('escapeSpecialCharsWithinTagAttributes')(text, options, globals);
10347    text = showdown.subParser('encodeBackslashEscapes')(text, options, globals);
10348  
10349    // Process anchor and image tags. Images must come first,
10350    // because ![foo][f] looks like an anchor.
10351    text = showdown.subParser('images')(text, options, globals);
10352    text = showdown.subParser('anchors')(text, options, globals);
10353  
10354    // Make links out of things like `<http://example.com/>`
10355    // Must come after anchors, because you can use < and >
10356    // delimiters in inline links like [this](<url>).
10357    text = showdown.subParser('autoLinks')(text, options, globals);
10358    text = showdown.subParser('simplifiedAutoLinks')(text, options, globals);
10359    text = showdown.subParser('emoji')(text, options, globals);
10360    text = showdown.subParser('underline')(text, options, globals);
10361    text = showdown.subParser('italicsAndBold')(text, options, globals);
10362    text = showdown.subParser('strikethrough')(text, options, globals);
10363    text = showdown.subParser('ellipsis')(text, options, globals);
10364  
10365    // we need to hash HTML tags inside spans
10366    text = showdown.subParser('hashHTMLSpans')(text, options, globals);
10367  
10368    // now we encode amps and angles
10369    text = showdown.subParser('encodeAmpsAndAngles')(text, options, globals);
10370  
10371    // Do hard breaks
10372    if (options.simpleLineBreaks) {
10373      // GFM style hard breaks
10374      // only add line breaks if the text does not contain a block (special case for lists)
10375      if (!/\n\n¨K/.test(text)) {
10376        text = text.replace(/\n+/g, '<br />\n');
10377      }
10378    } else {
10379      // Vanilla hard breaks
10380      text = text.replace(/  +\n/g, '<br />\n');
10381    }
10382  
10383    text = globals.converter._dispatch('spanGamut.after', text, options, globals);
10384    return text;
10385  });
10386  
10387  showdown.subParser('strikethrough', function (text, options, globals) {
10388    'use strict';
10389  
10390    function parseInside (txt) {
10391      if (options.simplifiedAutoLink) {
10392        txt = showdown.subParser('simplifiedAutoLinks')(txt, options, globals);
10393      }
10394      return '<del>' + txt + '</del>';
10395    }
10396  
10397    if (options.strikethrough) {
10398      text = globals.converter._dispatch('strikethrough.before', text, options, globals);
10399      text = text.replace(/(?:~){2}([\s\S]+?)(?:~){2}/g, function (wm, txt) { return parseInside(txt); });
10400      text = globals.converter._dispatch('strikethrough.after', text, options, globals);
10401    }
10402  
10403    return text;
10404  });
10405  
10406  /**
10407   * Strips link definitions from text, stores the URLs and titles in
10408   * hash references.
10409   * Link defs are in the form: ^[id]: url "optional title"
10410   */
10411  showdown.subParser('stripLinkDefinitions', function (text, options, globals) {
10412    'use strict';
10413  
10414    var regex       = /^ {0,3}\[(.+)]:[ \t]*\n?[ \t]*<?([^>\s]+)>?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*\n?[ \t]*(?:(\n*)["|'(](.+?)["|')][ \t]*)?(?:\n+|(?=¨0))/gm,
10415        base64Regex = /^ {0,3}\[(.+)]:[ \t]*\n?[ \t]*<?(data:.+?\/.+?;base64,[A-Za-z0-9+/=\n]+?)>?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*\n?[ \t]*(?:(\n*)["|'(](.+?)["|')][ \t]*)?(?:\n\n|(?=¨0)|(?=\n\[))/gm;
10416  
10417    // attacklab: sentinel workarounds for lack of \A and \Z, safari\khtml bug
10418    text += '¨0';
10419  
10420    var replaceFunc = function (wholeMatch, linkId, url, width, height, blankLines, title) {
10421      linkId = linkId.toLowerCase();
10422      if (url.match(/^data:.+?\/.+?;base64,/)) {
10423        // remove newlines
10424        globals.gUrls[linkId] = url.replace(/\s/g, '');
10425      } else {
10426        globals.gUrls[linkId] = showdown.subParser('encodeAmpsAndAngles')(url, options, globals);  // Link IDs are case-insensitive
10427      }
10428  
10429      if (blankLines) {
10430        // Oops, found blank lines, so it's not a title.
10431        // Put back the parenthetical statement we stole.
10432        return blankLines + title;
10433  
10434      } else {
10435        if (title) {
10436          globals.gTitles[linkId] = title.replace(/"|'/g, '&quot;');
10437        }
10438        if (options.parseImgDimensions && width && height) {
10439          globals.gDimensions[linkId] = {
10440            width:  width,
10441            height: height
10442          };
10443        }
10444      }
10445      // Completely remove the definition from the text
10446      return '';
10447    };
10448  
10449    // first we try to find base64 link references
10450    text = text.replace(base64Regex, replaceFunc);
10451  
10452    text = text.replace(regex, replaceFunc);
10453  
10454    // attacklab: strip sentinel
10455    text = text.replace(/¨0/, '');
10456  
10457    return text;
10458  });
10459  
10460  showdown.subParser('tables', function (text, options, globals) {
10461    'use strict';
10462  
10463    if (!options.tables) {
10464      return text;
10465    }
10466  
10467    var tableRgx       = /^ {0,3}\|?.+\|.+\n {0,3}\|?[ \t]*:?[ \t]*(?:[-=]){2,}[ \t]*:?[ \t]*\|[ \t]*:?[ \t]*(?:[-=]){2,}[\s\S]+?(?:\n\n|¨0)/gm,
10468      //singeColTblRgx = /^ {0,3}\|.+\|\n {0,3}\|[ \t]*:?[ \t]*(?:[-=]){2,}[ \t]*:?[ \t]*\|[ \t]*\n(?: {0,3}\|.+\|\n)+(?:\n\n|¨0)/gm;
10469        singeColTblRgx = /^ {0,3}\|.+\|[ \t]*\n {0,3}\|[ \t]*:?[ \t]*(?:[-=]){2,}[ \t]*:?[ \t]*\|[ \t]*\n( {0,3}\|.+\|[ \t]*\n)*(?:\n|¨0)/gm;
10470  
10471    function parseStyles (sLine) {
10472      if (/^:[ \t]*--*$/.test(sLine)) {
10473        return ' style="text-align:left;"';
10474      } else if (/^--*[ \t]*:[ \t]*$/.test(sLine)) {
10475        return ' style="text-align:right;"';
10476      } else if (/^:[ \t]*--*[ \t]*:$/.test(sLine)) {
10477        return ' style="text-align:center;"';
10478      } else {
10479        return '';
10480      }
10481    }
10482  
10483    function parseHeaders (header, style) {
10484      var id = '';
10485      header = header.trim();
10486      // support both tablesHeaderId and tableHeaderId due to error in documentation so we don't break backwards compatibility
10487      if (options.tablesHeaderId || options.tableHeaderId) {
10488        id = ' id="' + header.replace(/ /g, '_').toLowerCase() + '"';
10489      }
10490      header = showdown.subParser('spanGamut')(header, options, globals);
10491  
10492      return '<th' + id + style + '>' + header + '</th>\n';
10493    }
10494  
10495    function parseCells (cell, style) {
10496      var subText = showdown.subParser('spanGamut')(cell, options, globals);
10497      return '<td' + style + '>' + subText + '</td>\n';
10498    }
10499  
10500    function buildTable (headers, cells) {
10501      var tb = '<table>\n<thead>\n<tr>\n',
10502          tblLgn = headers.length;
10503  
10504      for (var i = 0; i < tblLgn; ++i) {
10505        tb += headers[i];
10506      }
10507      tb += '</tr>\n</thead>\n<tbody>\n';
10508  
10509      for (i = 0; i < cells.length; ++i) {
10510        tb += '<tr>\n';
10511        for (var ii = 0; ii < tblLgn; ++ii) {
10512          tb += cells[i][ii];
10513        }
10514        tb += '</tr>\n';
10515      }
10516      tb += '</tbody>\n</table>\n';
10517      return tb;
10518    }
10519  
10520    function parseTable (rawTable) {
10521      var i, tableLines = rawTable.split('\n');
10522  
10523      for (i = 0; i < tableLines.length; ++i) {
10524        // strip wrong first and last column if wrapped tables are used
10525        if (/^ {0,3}\|/.test(tableLines[i])) {
10526          tableLines[i] = tableLines[i].replace(/^ {0,3}\|/, '');
10527        }
10528        if (/\|[ \t]*$/.test(tableLines[i])) {
10529          tableLines[i] = tableLines[i].replace(/\|[ \t]*$/, '');
10530        }
10531        // parse code spans first, but we only support one line code spans
10532        tableLines[i] = showdown.subParser('codeSpans')(tableLines[i], options, globals);
10533      }
10534  
10535      var rawHeaders = tableLines[0].split('|').map(function (s) { return s.trim();}),
10536          rawStyles = tableLines[1].split('|').map(function (s) { return s.trim();}),
10537          rawCells = [],
10538          headers = [],
10539          styles = [],
10540          cells = [];
10541  
10542      tableLines.shift();
10543      tableLines.shift();
10544  
10545      for (i = 0; i < tableLines.length; ++i) {
10546        if (tableLines[i].trim() === '') {
10547          continue;
10548        }
10549        rawCells.push(
10550          tableLines[i]
10551            .split('|')
10552            .map(function (s) {
10553              return s.trim();
10554            })
10555        );
10556      }
10557  
10558      if (rawHeaders.length < rawStyles.length) {
10559        return rawTable;
10560      }
10561  
10562      for (i = 0; i < rawStyles.length; ++i) {
10563        styles.push(parseStyles(rawStyles[i]));
10564      }
10565  
10566      for (i = 0; i < rawHeaders.length; ++i) {
10567        if (showdown.helper.isUndefined(styles[i])) {
10568          styles[i] = '';
10569        }
10570        headers.push(parseHeaders(rawHeaders[i], styles[i]));
10571      }
10572  
10573      for (i = 0; i < rawCells.length; ++i) {
10574        var row = [];
10575        for (var ii = 0; ii < headers.length; ++ii) {
10576          if (showdown.helper.isUndefined(rawCells[i][ii])) {
10577  
10578          }
10579          row.push(parseCells(rawCells[i][ii], styles[ii]));
10580        }
10581        cells.push(row);
10582      }
10583  
10584      return buildTable(headers, cells);
10585    }
10586  
10587    text = globals.converter._dispatch('tables.before', text, options, globals);
10588  
10589    // find escaped pipe characters
10590    text = text.replace(/\\(\|)/g, showdown.helper.escapeCharactersCallback);
10591  
10592    // parse multi column tables
10593    text = text.replace(tableRgx, parseTable);
10594  
10595    // parse one column tables
10596    text = text.replace(singeColTblRgx, parseTable);
10597  
10598    text = globals.converter._dispatch('tables.after', text, options, globals);
10599  
10600    return text;
10601  });
10602  
10603  showdown.subParser('underline', function (text, options, globals) {
10604    'use strict';
10605  
10606    if (!options.underline) {
10607      return text;
10608    }
10609  
10610    text = globals.converter._dispatch('underline.before', text, options, globals);
10611  
10612    if (options.literalMidWordUnderscores) {
10613      text = text.replace(/\b___(\S[\s\S]*?)___\b/g, function (wm, txt) {
10614        return '<u>' + txt + '</u>';
10615      });
10616      text = text.replace(/\b__(\S[\s\S]*?)__\b/g, function (wm, txt) {
10617        return '<u>' + txt + '</u>';
10618      });
10619    } else {
10620      text = text.replace(/___(\S[\s\S]*?)___/g, function (wm, m) {
10621        return (/\S$/.test(m)) ? '<u>' + m + '</u>' : wm;
10622      });
10623      text = text.replace(/__(\S[\s\S]*?)__/g, function (wm, m) {
10624        return (/\S$/.test(m)) ? '<u>' + m + '</u>' : wm;
10625      });
10626    }
10627  
10628    // escape remaining underscores to prevent them being parsed by italic and bold
10629    text = text.replace(/(_)/g, showdown.helper.escapeCharactersCallback);
10630  
10631    text = globals.converter._dispatch('underline.after', text, options, globals);
10632  
10633    return text;
10634  });
10635  
10636  /**
10637   * Swap back in all the special characters we've hidden.
10638   */
10639  showdown.subParser('unescapeSpecialChars', function (text, options, globals) {
10640    'use strict';
10641    text = globals.converter._dispatch('unescapeSpecialChars.before', text, options, globals);
10642  
10643    text = text.replace(/¨E(\d+)E/g, function (wholeMatch, m1) {
10644      var charCodeToReplace = parseInt(m1);
10645      return String.fromCharCode(charCodeToReplace);
10646    });
10647  
10648    text = globals.converter._dispatch('unescapeSpecialChars.after', text, options, globals);
10649    return text;
10650  });
10651  
10652  showdown.subParser('makeMarkdown.blockquote', function (node, globals) {
10653    'use strict';
10654  
10655    var txt = '';
10656    if (node.hasChildNodes()) {
10657      var children = node.childNodes,
10658          childrenLength = children.length;
10659  
10660      for (var i = 0; i < childrenLength; ++i) {
10661        var innerTxt = showdown.subParser('makeMarkdown.node')(children[i], globals);
10662  
10663        if (innerTxt === '') {
10664          continue;
10665        }
10666        txt += innerTxt;
10667      }
10668    }
10669    // cleanup
10670    txt = txt.trim();
10671    txt = '> ' + txt.split('\n').join('\n> ');
10672    return txt;
10673  });
10674  
10675  showdown.subParser('makeMarkdown.codeBlock', function (node, globals) {
10676    'use strict';
10677  
10678    var lang = node.getAttribute('language'),
10679        num  = node.getAttribute('precodenum');
10680    return '```' + lang + '\n' + globals.preList[num] + '\n```';
10681  });
10682  
10683  showdown.subParser('makeMarkdown.codeSpan', function (node) {
10684    'use strict';
10685  
10686    return '`' + node.innerHTML + '`';
10687  });
10688  
10689  showdown.subParser('makeMarkdown.emphasis', function (node, globals) {
10690    'use strict';
10691  
10692    var txt = '';
10693    if (node.hasChildNodes()) {
10694      txt += '*';
10695      var children = node.childNodes,
10696          childrenLength = children.length;
10697      for (var i = 0; i < childrenLength; ++i) {
10698        txt += showdown.subParser('makeMarkdown.node')(children[i], globals);
10699      }
10700      txt += '*';
10701    }
10702    return txt;
10703  });
10704  
10705  showdown.subParser('makeMarkdown.header', function (node, globals, headerLevel) {
10706    'use strict';
10707  
10708    var headerMark = new Array(headerLevel + 1).join('#'),
10709        txt = '';
10710  
10711    if (node.hasChildNodes()) {
10712      txt = headerMark + ' ';
10713      var children = node.childNodes,
10714          childrenLength = children.length;
10715  
10716      for (var i = 0; i < childrenLength; ++i) {
10717        txt += showdown.subParser('makeMarkdown.node')(children[i], globals);
10718      }
10719    }
10720    return txt;
10721  });
10722  
10723  showdown.subParser('makeMarkdown.hr', function () {
10724    'use strict';
10725  
10726    return '---';
10727  });
10728  
10729  showdown.subParser('makeMarkdown.image', function (node) {
10730    'use strict';
10731  
10732    var txt = '';
10733    if (node.hasAttribute('src')) {
10734      txt += '![' + node.getAttribute('alt') + '](';
10735      txt += '<' + node.getAttribute('src') + '>';
10736      if (node.hasAttribute('width') && node.hasAttribute('height')) {
10737        txt += ' =' + node.getAttribute('width') + 'x' + node.getAttribute('height');
10738      }
10739  
10740      if (node.hasAttribute('title')) {
10741        txt += ' "' + node.getAttribute('title') + '"';
10742      }
10743      txt += ')';
10744    }
10745    return txt;
10746  });
10747  
10748  showdown.subParser('makeMarkdown.links', function (node, globals) {
10749    'use strict';
10750  
10751    var txt = '';
10752    if (node.hasChildNodes() && node.hasAttribute('href')) {
10753      var children = node.childNodes,
10754          childrenLength = children.length;
10755      txt = '[';
10756      for (var i = 0; i < childrenLength; ++i) {
10757        txt += showdown.subParser('makeMarkdown.node')(children[i], globals);
10758      }
10759      txt += '](';
10760      txt += '<' + node.getAttribute('href') + '>';
10761      if (node.hasAttribute('title')) {
10762        txt += ' "' + node.getAttribute('title') + '"';
10763      }
10764      txt += ')';
10765    }
10766    return txt;
10767  });
10768  
10769  showdown.subParser('makeMarkdown.list', function (node, globals, type) {
10770    'use strict';
10771  
10772    var txt = '';
10773    if (!node.hasChildNodes()) {
10774      return '';
10775    }
10776    var listItems       = node.childNodes,
10777        listItemsLenght = listItems.length,
10778        listNum = node.getAttribute('start') || 1;
10779  
10780    for (var i = 0; i < listItemsLenght; ++i) {
10781      if (typeof listItems[i].tagName === 'undefined' || listItems[i].tagName.toLowerCase() !== 'li') {
10782        continue;
10783      }
10784  
10785      // define the bullet to use in list
10786      var bullet = '';
10787      if (type === 'ol') {
10788        bullet = listNum.toString() + '. ';
10789      } else {
10790        bullet = '- ';
10791      }
10792  
10793      // parse list item
10794      txt += bullet + showdown.subParser('makeMarkdown.listItem')(listItems[i], globals);
10795      ++listNum;
10796    }
10797  
10798    // add comment at the end to prevent consecutive lists to be parsed as one
10799    txt += '\n<!-- -->\n';
10800    return txt.trim();
10801  });
10802  
10803  showdown.subParser('makeMarkdown.listItem', function (node, globals) {
10804    'use strict';
10805  
10806    var listItemTxt = '';
10807  
10808    var children = node.childNodes,
10809        childrenLenght = children.length;
10810  
10811    for (var i = 0; i < childrenLenght; ++i) {
10812      listItemTxt += showdown.subParser('makeMarkdown.node')(children[i], globals);
10813    }
10814    // if it's only one liner, we need to add a newline at the end
10815    if (!/\n$/.test(listItemTxt)) {
10816      listItemTxt += '\n';
10817    } else {
10818      // it's multiparagraph, so we need to indent
10819      listItemTxt = listItemTxt
10820        .split('\n')
10821        .join('\n    ')
10822        .replace(/^ {4}$/gm, '')
10823        .replace(/\n\n+/g, '\n\n');
10824    }
10825  
10826    return listItemTxt;
10827  });
10828  
10829  
10830  
10831  showdown.subParser('makeMarkdown.node', function (node, globals, spansOnly) {
10832    'use strict';
10833  
10834    spansOnly = spansOnly || false;
10835  
10836    var txt = '';
10837  
10838    // edge case of text without wrapper paragraph
10839    if (node.nodeType === 3) {
10840      return showdown.subParser('makeMarkdown.txt')(node, globals);
10841    }
10842  
10843    // HTML comment
10844    if (node.nodeType === 8) {
10845      return '<!--' + node.data + '-->\n\n';
10846    }
10847  
10848    // process only node elements
10849    if (node.nodeType !== 1) {
10850      return '';
10851    }
10852  
10853    var tagName = node.tagName.toLowerCase();
10854  
10855    switch (tagName) {
10856  
10857      //
10858      // BLOCKS
10859      //
10860      case 'h1':
10861        if (!spansOnly) { txt = showdown.subParser('makeMarkdown.header')(node, globals, 1) + '\n\n'; }
10862        break;
10863      case 'h2':
10864        if (!spansOnly) { txt = showdown.subParser('makeMarkdown.header')(node, globals, 2) + '\n\n'; }
10865        break;
10866      case 'h3':
10867        if (!spansOnly) { txt = showdown.subParser('makeMarkdown.header')(node, globals, 3) + '\n\n'; }
10868        break;
10869      case 'h4':
10870        if (!spansOnly) { txt = showdown.subParser('makeMarkdown.header')(node, globals, 4) + '\n\n'; }
10871        break;
10872      case 'h5':
10873        if (!spansOnly) { txt = showdown.subParser('makeMarkdown.header')(node, globals, 5) + '\n\n'; }
10874        break;
10875      case 'h6':
10876        if (!spansOnly) { txt = showdown.subParser('makeMarkdown.header')(node, globals, 6) + '\n\n'; }
10877        break;
10878  
10879      case 'p':
10880        if (!spansOnly) { txt = showdown.subParser('makeMarkdown.paragraph')(node, globals) + '\n\n'; }
10881        break;
10882  
10883      case 'blockquote':
10884        if (!spansOnly) { txt = showdown.subParser('makeMarkdown.blockquote')(node, globals) + '\n\n'; }
10885        break;
10886  
10887      case 'hr':
10888        if (!spansOnly) { txt = showdown.subParser('makeMarkdown.hr')(node, globals) + '\n\n'; }
10889        break;
10890  
10891      case 'ol':
10892        if (!spansOnly) { txt = showdown.subParser('makeMarkdown.list')(node, globals, 'ol') + '\n\n'; }
10893        break;
10894  
10895      case 'ul':
10896        if (!spansOnly) { txt = showdown.subParser('makeMarkdown.list')(node, globals, 'ul') + '\n\n'; }
10897        break;
10898  
10899      case 'precode':
10900        if (!spansOnly) { txt = showdown.subParser('makeMarkdown.codeBlock')(node, globals) + '\n\n'; }
10901        break;
10902  
10903      case 'pre':
10904        if (!spansOnly) { txt = showdown.subParser('makeMarkdown.pre')(node, globals) + '\n\n'; }
10905        break;
10906  
10907      case 'table':
10908        if (!spansOnly) { txt = showdown.subParser('makeMarkdown.table')(node, globals) + '\n\n'; }
10909        break;
10910  
10911      //
10912      // SPANS
10913      //
10914      case 'code':
10915        txt = showdown.subParser('makeMarkdown.codeSpan')(node, globals);
10916        break;
10917  
10918      case 'em':
10919      case 'i':
10920        txt = showdown.subParser('makeMarkdown.emphasis')(node, globals);
10921        break;
10922  
10923      case 'strong':
10924      case 'b':
10925        txt = showdown.subParser('makeMarkdown.strong')(node, globals);
10926        break;
10927  
10928      case 'del':
10929        txt = showdown.subParser('makeMarkdown.strikethrough')(node, globals);
10930        break;
10931  
10932      case 'a':
10933        txt = showdown.subParser('makeMarkdown.links')(node, globals);
10934        break;
10935  
10936      case 'img':
10937        txt = showdown.subParser('makeMarkdown.image')(node, globals);
10938        break;
10939  
10940      default:
10941        txt = node.outerHTML + '\n\n';
10942    }
10943  
10944    // common normalization
10945    // TODO eventually
10946  
10947    return txt;
10948  });
10949  
10950  showdown.subParser('makeMarkdown.paragraph', function (node, globals) {
10951    'use strict';
10952  
10953    var txt = '';
10954    if (node.hasChildNodes()) {
10955      var children = node.childNodes,
10956          childrenLength = children.length;
10957      for (var i = 0; i < childrenLength; ++i) {
10958        txt += showdown.subParser('makeMarkdown.node')(children[i], globals);
10959      }
10960    }
10961  
10962    // some text normalization
10963    txt = txt.trim();
10964  
10965    return txt;
10966  });
10967  
10968  showdown.subParser('makeMarkdown.pre', function (node, globals) {
10969    'use strict';
10970  
10971    var num  = node.getAttribute('prenum');
10972    return '<pre>' + globals.preList[num] + '</pre>';
10973  });
10974  
10975  showdown.subParser('makeMarkdown.strikethrough', function (node, globals) {
10976    'use strict';
10977  
10978    var txt = '';
10979    if (node.hasChildNodes()) {
10980      txt += '~~';
10981      var children = node.childNodes,
10982          childrenLength = children.length;
10983      for (var i = 0; i < childrenLength; ++i) {
10984        txt += showdown.subParser('makeMarkdown.node')(children[i], globals);
10985      }
10986      txt += '~~';
10987    }
10988    return txt;
10989  });
10990  
10991  showdown.subParser('makeMarkdown.strong', function (node, globals) {
10992    'use strict';
10993  
10994    var txt = '';
10995    if (node.hasChildNodes()) {
10996      txt += '**';
10997      var children = node.childNodes,
10998          childrenLength = children.length;
10999      for (var i = 0; i < childrenLength; ++i) {
11000        txt += showdown.subParser('makeMarkdown.node')(children[i], globals);
11001      }
11002      txt += '**';
11003    }
11004    return txt;
11005  });
11006  
11007  showdown.subParser('makeMarkdown.table', function (node, globals) {
11008    'use strict';
11009  
11010    var txt = '',
11011        tableArray = [[], []],
11012        headings   = node.querySelectorAll('thead>tr>th'),
11013        rows       = node.querySelectorAll('tbody>tr'),
11014        i, ii;
11015    for (i = 0; i < headings.length; ++i) {
11016      var headContent = showdown.subParser('makeMarkdown.tableCell')(headings[i], globals),
11017          allign = '---';
11018  
11019      if (headings[i].hasAttribute('style')) {
11020        var style = headings[i].getAttribute('style').toLowerCase().replace(/\s/g, '');
11021        switch (style) {
11022          case 'text-align:left;':
11023            allign = ':---';
11024            break;
11025          case 'text-align:right;':
11026            allign = '---:';
11027            break;
11028          case 'text-align:center;':
11029            allign = ':---:';
11030            break;
11031        }
11032      }
11033      tableArray[0][i] = headContent.trim();
11034      tableArray[1][i] = allign;
11035    }
11036  
11037    for (i = 0; i < rows.length; ++i) {
11038      var r = tableArray.push([]) - 1,
11039          cols = rows[i].getElementsByTagName('td');
11040  
11041      for (ii = 0; ii < headings.length; ++ii) {
11042        var cellContent = ' ';
11043        if (typeof cols[ii] !== 'undefined') {
11044          cellContent = showdown.subParser('makeMarkdown.tableCell')(cols[ii], globals);
11045        }
11046        tableArray[r].push(cellContent);
11047      }
11048    }
11049  
11050    var cellSpacesCount = 3;
11051    for (i = 0; i < tableArray.length; ++i) {
11052      for (ii = 0; ii < tableArray[i].length; ++ii) {
11053        var strLen = tableArray[i][ii].length;
11054        if (strLen > cellSpacesCount) {
11055          cellSpacesCount = strLen;
11056        }
11057      }
11058    }
11059  
11060    for (i = 0; i < tableArray.length; ++i) {
11061      for (ii = 0; ii < tableArray[i].length; ++ii) {
11062        if (i === 1) {
11063          if (tableArray[i][ii].slice(-1) === ':') {
11064            tableArray[i][ii] = showdown.helper.padEnd(tableArray[i][ii].slice(-1), cellSpacesCount - 1, '-') + ':';
11065          } else {
11066            tableArray[i][ii] = showdown.helper.padEnd(tableArray[i][ii], cellSpacesCount, '-');
11067          }
11068        } else {
11069          tableArray[i][ii] = showdown.helper.padEnd(tableArray[i][ii], cellSpacesCount);
11070        }
11071      }
11072      txt += '| ' + tableArray[i].join(' | ') + ' |\n';
11073    }
11074  
11075    return txt.trim();
11076  });
11077  
11078  showdown.subParser('makeMarkdown.tableCell', function (node, globals) {
11079    'use strict';
11080  
11081    var txt = '';
11082    if (!node.hasChildNodes()) {
11083      return '';
11084    }
11085    var children = node.childNodes,
11086        childrenLength = children.length;
11087  
11088    for (var i = 0; i < childrenLength; ++i) {
11089      txt += showdown.subParser('makeMarkdown.node')(children[i], globals, true);
11090    }
11091    return txt.trim();
11092  });
11093  
11094  showdown.subParser('makeMarkdown.txt', function (node) {
11095    'use strict';
11096  
11097    var txt = node.nodeValue;
11098  
11099    // multiple spaces are collapsed
11100    txt = txt.replace(/ +/g, ' ');
11101  
11102    // replace the custom ¨NBSP; with a space
11103    txt = txt.replace(/¨NBSP;/g, ' ');
11104  
11105    // ", <, > and & should replace escaped html entities
11106    txt = showdown.helper.unescapeHTMLEntities(txt);
11107  
11108    // escape markdown magic characters
11109    // emphasis, strong and strikethrough - can appear everywhere
11110    // we also escape pipe (|) because of tables
11111    // and escape ` because of code blocks and spans
11112    txt = txt.replace(/([*_~|`])/g, '\\$1');
11113  
11114    // escape > because of blockquotes
11115    txt = txt.replace(/^(\s*)>/g, '\\$1>');
11116  
11117    // hash character, only troublesome at the beginning of a line because of headers
11118    txt = txt.replace(/^#/gm, '\\#');
11119  
11120    // horizontal rules
11121    txt = txt.replace(/^(\s*)([-=]{3,})(\s*)$/, '$1\\$2$3');
11122  
11123    // dot, because of ordered lists, only troublesome at the beginning of a line when preceded by an integer
11124    txt = txt.replace(/^( {0,3}\d+)\./gm, '$1\\.');
11125  
11126    // +, * and -, at the beginning of a line becomes a list, so we need to escape them also (asterisk was already escaped)
11127    txt = txt.replace(/^( {0,3})([+-])/gm, '$1\\$2');
11128  
11129    // images and links, ] followed by ( is problematic, so we escape it
11130    txt = txt.replace(/]([\s]*)\(/g, '\\]$1\\(');
11131  
11132    // reference URIs must also be escaped
11133    txt = txt.replace(/^ {0,3}\[([\S \t]*?)]:/gm, '\\[$1]:');
11134  
11135    return txt;
11136  });
11137  
11138  var root = this;
11139  
11140  // AMD Loader
11141  if (true) {
11142    !(__WEBPACK_AMD_DEFINE_RESULT__ = (function () {
11143      'use strict';
11144      return showdown;
11145    }).call(exports, __webpack_require__, exports, module),
11146                  __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
11147  
11148  // CommonJS/nodeJS Loader
11149  } else {}
11150  }).call(this);
11151  
11152  
11153  
11154  /***/ }),
11155  
11156  /***/ "./node_modules/simple-html-tokenizer/dist/es6/entity-parser.js":
11157  /*!**********************************************************************!*\
11158    !*** ./node_modules/simple-html-tokenizer/dist/es6/entity-parser.js ***!
11159    \**********************************************************************/
11160  /*! exports provided: default */
11161  /***/ (function(module, __webpack_exports__, __webpack_require__) {
11162  
11163  "use strict";
11164  __webpack_require__.r(__webpack_exports__);
11165  var HEXCHARCODE = /^#[xX]([A-Fa-f0-9]+)$/;
11166  var CHARCODE = /^#([0-9]+)$/;
11167  var NAMED = /^([A-Za-z0-9]+)$/;
11168  var EntityParser = /** @class */ (function () {
11169      function EntityParser(named) {
11170          this.named = named;
11171      }
11172      EntityParser.prototype.parse = function (entity) {
11173          if (!entity) {
11174              return;
11175          }
11176          var matches = entity.match(HEXCHARCODE);
11177          if (matches) {
11178              return String.fromCharCode(parseInt(matches[1], 16));
11179          }
11180          matches = entity.match(CHARCODE);
11181          if (matches) {
11182              return String.fromCharCode(parseInt(matches[1], 10));
11183          }
11184          matches = entity.match(NAMED);
11185          if (matches) {
11186              return this.named[matches[1]];
11187          }
11188      };
11189      return EntityParser;
11190  }());
11191  /* harmony default export */ __webpack_exports__["default"] = (EntityParser);
11192  
11193  
11194  /***/ }),
11195  
11196  /***/ "./node_modules/simple-html-tokenizer/dist/es6/evented-tokenizer.js":
11197  /*!**************************************************************************!*\
11198    !*** ./node_modules/simple-html-tokenizer/dist/es6/evented-tokenizer.js ***!
11199    \**************************************************************************/
11200  /*! exports provided: default */
11201  /***/ (function(module, __webpack_exports__, __webpack_require__) {
11202  
11203  "use strict";
11204  __webpack_require__.r(__webpack_exports__);
11205  /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils */ "./node_modules/simple-html-tokenizer/dist/es6/utils.js");
11206  
11207  var EventedTokenizer = /** @class */ (function () {
11208      function EventedTokenizer(delegate, entityParser) {
11209          this.delegate = delegate;
11210          this.entityParser = entityParser;
11211          this.state = null;
11212          this.input = null;
11213          this.index = -1;
11214          this.tagLine = -1;
11215          this.tagColumn = -1;
11216          this.line = -1;
11217          this.column = -1;
11218          this.states = {
11219              beforeData: function () {
11220                  var char = this.peek();
11221                  if (char === "<") {
11222                      this.state = 'tagOpen';
11223                      this.markTagStart();
11224                      this.consume();
11225                  }
11226                  else {
11227                      this.state = 'data';
11228                      this.delegate.beginData();
11229                  }
11230              },
11231              data: function () {
11232                  var char = this.peek();
11233                  if (char === "<") {
11234                      this.delegate.finishData();
11235                      this.state = 'tagOpen';
11236                      this.markTagStart();
11237                      this.consume();
11238                  }
11239                  else if (char === "&") {
11240                      this.consume();
11241                      this.delegate.appendToData(this.consumeCharRef() || "&");
11242                  }
11243                  else {
11244                      this.consume();
11245                      this.delegate.appendToData(char);
11246                  }
11247              },
11248              tagOpen: function () {
11249                  var char = this.consume();
11250                  if (char === "!") {
11251                      this.state = 'markupDeclaration';
11252                  }
11253                  else if (char === "/") {
11254                      this.state = 'endTagOpen';
11255                  }
11256                  else if (Object(_utils__WEBPACK_IMPORTED_MODULE_0__["isAlpha"])(char)) {
11257                      this.state = 'tagName';
11258                      this.delegate.beginStartTag();
11259                      this.delegate.appendToTagName(char.toLowerCase());
11260                  }
11261              },
11262              markupDeclaration: function () {
11263                  var char = this.consume();
11264                  if (char === "-" && this.input.charAt(this.index) === "-") {
11265                      this.consume();
11266                      this.state = 'commentStart';
11267                      this.delegate.beginComment();
11268                  }
11269              },
11270              commentStart: function () {
11271                  var char = this.consume();
11272                  if (char === "-") {
11273                      this.state = 'commentStartDash';
11274                  }
11275                  else if (char === ">") {
11276                      this.delegate.finishComment();
11277                      this.state = 'beforeData';
11278                  }
11279                  else {
11280                      this.delegate.appendToCommentData(char);
11281                      this.state = 'comment';
11282                  }
11283              },
11284              commentStartDash: function () {
11285                  var char = this.consume();
11286                  if (char === "-") {
11287                      this.state = 'commentEnd';
11288                  }
11289                  else if (char === ">") {
11290                      this.delegate.finishComment();
11291                      this.state = 'beforeData';
11292                  }
11293                  else {
11294                      this.delegate.appendToCommentData("-");
11295                      this.state = 'comment';
11296                  }
11297              },
11298              comment: function () {
11299                  var char = this.consume();
11300                  if (char === "-") {
11301                      this.state = 'commentEndDash';
11302                  }
11303                  else {
11304                      this.delegate.appendToCommentData(char);
11305                  }
11306              },
11307              commentEndDash: function () {
11308                  var char = this.consume();
11309                  if (char === "-") {
11310                      this.state = 'commentEnd';
11311                  }
11312                  else {
11313                      this.delegate.appendToCommentData("-" + char);
11314                      this.state = 'comment';
11315                  }
11316              },
11317              commentEnd: function () {
11318                  var char = this.consume();
11319                  if (char === ">") {
11320                      this.delegate.finishComment();
11321                      this.state = 'beforeData';
11322                  }
11323                  else {
11324                      this.delegate.appendToCommentData("--" + char);
11325                      this.state = 'comment';
11326                  }
11327              },
11328              tagName: function () {
11329                  var char = this.consume();
11330                  if (Object(_utils__WEBPACK_IMPORTED_MODULE_0__["isSpace"])(char)) {
11331                      this.state = 'beforeAttributeName';
11332                  }
11333                  else if (char === "/") {
11334                      this.state = 'selfClosingStartTag';
11335                  }
11336                  else if (char === ">") {
11337                      this.delegate.finishTag();
11338                      this.state = 'beforeData';
11339                  }
11340                  else {
11341                      this.delegate.appendToTagName(char);
11342                  }
11343              },
11344              beforeAttributeName: function () {
11345                  var char = this.peek();
11346                  if (Object(_utils__WEBPACK_IMPORTED_MODULE_0__["isSpace"])(char)) {
11347                      this.consume();
11348                      return;
11349                  }
11350                  else if (char === "/") {
11351                      this.state = 'selfClosingStartTag';
11352                      this.consume();
11353                  }
11354                  else if (char === ">") {
11355                      this.consume();
11356                      this.delegate.finishTag();
11357                      this.state = 'beforeData';
11358                  }
11359                  else if (char === '=') {
11360                      this.delegate.reportSyntaxError("attribute name cannot start with equals sign");
11361                      this.state = 'attributeName';
11362                      this.delegate.beginAttribute();
11363                      this.consume();
11364                      this.delegate.appendToAttributeName(char);
11365                  }
11366                  else {
11367                      this.state = 'attributeName';
11368                      this.delegate.beginAttribute();
11369                  }
11370              },
11371              attributeName: function () {
11372                  var char = this.peek();
11373                  if (Object(_utils__WEBPACK_IMPORTED_MODULE_0__["isSpace"])(char)) {
11374                      this.state = 'afterAttributeName';
11375                      this.consume();
11376                  }
11377                  else if (char === "/") {
11378                      this.delegate.beginAttributeValue(false);
11379                      this.delegate.finishAttributeValue();
11380                      this.consume();
11381                      this.state = 'selfClosingStartTag';
11382                  }
11383                  else if (char === "=") {
11384                      this.state = 'beforeAttributeValue';
11385                      this.consume();
11386                  }
11387                  else if (char === ">") {
11388                      this.delegate.beginAttributeValue(false);
11389                      this.delegate.finishAttributeValue();
11390                      this.consume();
11391                      this.delegate.finishTag();
11392                      this.state = 'beforeData';
11393                  }
11394                  else if (char === '"' || char === "'" || char === '<') {
11395                      this.delegate.reportSyntaxError(char + " is not a valid character within attribute names");
11396                      this.consume();
11397                      this.delegate.appendToAttributeName(char);
11398                  }
11399                  else {
11400                      this.consume();
11401                      this.delegate.appendToAttributeName(char);
11402                  }
11403              },
11404              afterAttributeName: function () {
11405                  var char = this.peek();
11406                  if (Object(_utils__WEBPACK_IMPORTED_MODULE_0__["isSpace"])(char)) {
11407                      this.consume();
11408                      return;
11409                  }
11410                  else if (char === "/") {
11411                      this.delegate.beginAttributeValue(false);
11412                      this.delegate.finishAttributeValue();
11413                      this.consume();
11414                      this.state = 'selfClosingStartTag';
11415                  }
11416                  else if (char === "=") {
11417                      this.consume();
11418                      this.state = 'beforeAttributeValue';
11419                  }
11420                  else if (char === ">") {
11421                      this.delegate.beginAttributeValue(false);
11422                      this.delegate.finishAttributeValue();
11423                      this.consume();
11424                      this.delegate.finishTag();
11425                      this.state = 'beforeData';
11426                  }
11427                  else {
11428                      this.delegate.beginAttributeValue(false);
11429                      this.delegate.finishAttributeValue();
11430                      this.consume();
11431                      this.state = 'attributeName';
11432                      this.delegate.beginAttribute();
11433                      this.delegate.appendToAttributeName(char);
11434                  }
11435              },
11436              beforeAttributeValue: function () {
11437                  var char = this.peek();
11438                  if (Object(_utils__WEBPACK_IMPORTED_MODULE_0__["isSpace"])(char)) {
11439                      this.consume();
11440                  }
11441                  else if (char === '"') {
11442                      this.state = 'attributeValueDoubleQuoted';
11443                      this.delegate.beginAttributeValue(true);
11444                      this.consume();
11445                  }
11446                  else if (char === "'") {
11447                      this.state = 'attributeValueSingleQuoted';
11448                      this.delegate.beginAttributeValue(true);
11449                      this.consume();
11450                  }
11451                  else if (char === ">") {
11452                      this.delegate.beginAttributeValue(false);
11453                      this.delegate.finishAttributeValue();
11454                      this.consume();
11455                      this.delegate.finishTag();
11456                      this.state = 'beforeData';
11457                  }
11458                  else {
11459                      this.state = 'attributeValueUnquoted';
11460                      this.delegate.beginAttributeValue(false);
11461                      this.consume();
11462                      this.delegate.appendToAttributeValue(char);
11463                  }
11464              },
11465              attributeValueDoubleQuoted: function () {
11466                  var char = this.consume();
11467                  if (char === '"') {
11468                      this.delegate.finishAttributeValue();
11469                      this.state = 'afterAttributeValueQuoted';
11470                  }
11471                  else if (char === "&") {
11472                      this.delegate.appendToAttributeValue(this.consumeCharRef('"') || "&");
11473                  }
11474                  else {
11475                      this.delegate.appendToAttributeValue(char);
11476                  }
11477              },
11478              attributeValueSingleQuoted: function () {
11479                  var char = this.consume();
11480                  if (char === "'") {
11481                      this.delegate.finishAttributeValue();
11482                      this.state = 'afterAttributeValueQuoted';
11483                  }
11484                  else if (char === "&") {
11485                      this.delegate.appendToAttributeValue(this.consumeCharRef("'") || "&");
11486                  }
11487                  else {
11488                      this.delegate.appendToAttributeValue(char);
11489                  }
11490              },
11491              attributeValueUnquoted: function () {
11492                  var char = this.peek();
11493                  if (Object(_utils__WEBPACK_IMPORTED_MODULE_0__["isSpace"])(char)) {
11494                      this.delegate.finishAttributeValue();
11495                      this.consume();
11496                      this.state = 'beforeAttributeName';
11497                  }
11498                  else if (char === "&") {
11499                      this.consume();
11500                      this.delegate.appendToAttributeValue(this.consumeCharRef(">") || "&");
11501                  }
11502                  else if (char === ">") {
11503                      this.delegate.finishAttributeValue();
11504                      this.consume();
11505                      this.delegate.finishTag();
11506                      this.state = 'beforeData';
11507                  }
11508                  else {
11509                      this.consume();
11510                      this.delegate.appendToAttributeValue(char);
11511                  }
11512              },
11513              afterAttributeValueQuoted: function () {
11514                  var char = this.peek();
11515                  if (Object(_utils__WEBPACK_IMPORTED_MODULE_0__["isSpace"])(char)) {
11516                      this.consume();
11517                      this.state = 'beforeAttributeName';
11518                  }
11519                  else if (char === "/") {
11520                      this.consume();
11521                      this.state = 'selfClosingStartTag';
11522                  }
11523                  else if (char === ">") {
11524                      this.consume();
11525                      this.delegate.finishTag();
11526                      this.state = 'beforeData';
11527                  }
11528                  else {
11529                      this.state = 'beforeAttributeName';
11530                  }
11531              },
11532              selfClosingStartTag: function () {
11533                  var char = this.peek();
11534                  if (char === ">") {
11535                      this.consume();
11536                      this.delegate.markTagAsSelfClosing();
11537                      this.delegate.finishTag();
11538                      this.state = 'beforeData';
11539                  }
11540                  else {
11541                      this.state = 'beforeAttributeName';
11542                  }
11543              },
11544              endTagOpen: function () {
11545                  var char = this.consume();
11546                  if (Object(_utils__WEBPACK_IMPORTED_MODULE_0__["isAlpha"])(char)) {
11547                      this.state = 'tagName';
11548                      this.delegate.beginEndTag();
11549                      this.delegate.appendToTagName(char.toLowerCase());
11550                  }
11551              }
11552          };
11553          this.reset();
11554      }
11555      EventedTokenizer.prototype.reset = function () {
11556          this.state = 'beforeData';
11557          this.input = '';
11558          this.index = 0;
11559          this.line = 1;
11560          this.column = 0;
11561          this.tagLine = -1;
11562          this.tagColumn = -1;
11563          this.delegate.reset();
11564      };
11565      EventedTokenizer.prototype.tokenize = function (input) {
11566          this.reset();
11567          this.tokenizePart(input);
11568          this.tokenizeEOF();
11569      };
11570      EventedTokenizer.prototype.tokenizePart = function (input) {
11571          this.input += Object(_utils__WEBPACK_IMPORTED_MODULE_0__["preprocessInput"])(input);
11572          while (this.index < this.input.length) {
11573              this.states[this.state].call(this);
11574          }
11575      };
11576      EventedTokenizer.prototype.tokenizeEOF = function () {
11577          this.flushData();
11578      };
11579      EventedTokenizer.prototype.flushData = function () {
11580          if (this.state === 'data') {
11581              this.delegate.finishData();
11582              this.state = 'beforeData';
11583          }
11584      };
11585      EventedTokenizer.prototype.peek = function () {
11586          return this.input.charAt(this.index);
11587      };
11588      EventedTokenizer.prototype.consume = function () {
11589          var char = this.peek();
11590          this.index++;
11591          if (char === "\n") {
11592              this.line++;
11593              this.column = 0;
11594          }
11595          else {
11596              this.column++;
11597          }
11598          return char;
11599      };
11600      EventedTokenizer.prototype.consumeCharRef = function () {
11601          var endIndex = this.input.indexOf(';', this.index);
11602          if (endIndex === -1) {
11603              return;
11604          }
11605          var entity = this.input.slice(this.index, endIndex);
11606          var chars = this.entityParser.parse(entity);
11607          if (chars) {
11608              var count = entity.length;
11609              // consume the entity chars
11610              while (count) {
11611                  this.consume();
11612                  count--;
11613              }
11614              // consume the `;`
11615              this.consume();
11616              return chars;
11617          }
11618      };
11619      EventedTokenizer.prototype.markTagStart = function () {
11620          // these properties to be removed in next major bump
11621          this.tagLine = this.line;
11622          this.tagColumn = this.column;
11623          if (this.delegate.tagOpen) {
11624              this.delegate.tagOpen();
11625          }
11626      };
11627      return EventedTokenizer;
11628  }());
11629  /* harmony default export */ __webpack_exports__["default"] = (EventedTokenizer);
11630  
11631  
11632  /***/ }),
11633  
11634  /***/ "./node_modules/simple-html-tokenizer/dist/es6/html5-named-char-refs.js":
11635  /*!******************************************************************************!*\
11636    !*** ./node_modules/simple-html-tokenizer/dist/es6/html5-named-char-refs.js ***!
11637    \******************************************************************************/
11638  /*! exports provided: default */
11639  /***/ (function(module, __webpack_exports__, __webpack_require__) {
11640  
11641  "use strict";
11642  __webpack_require__.r(__webpack_exports__);
11643  /* harmony default export */ __webpack_exports__["default"] = ({
11644      Aacute: "Á", aacute: "á", Abreve: "Ă", abreve: "ă", ac: "∾", acd: "∿", acE: "∾̳", Acirc: "Â", acirc: "â", acute: "´", Acy: "А", acy: "а", AElig: "Æ", aelig: "æ", af: "\u2061", Afr: "𝔄", afr: "𝔞", Agrave: "À", agrave: "à", alefsym: "ℵ", aleph: "ℵ", Alpha: "Α", alpha: "α", Amacr: "Ā", amacr: "ā", amalg: "⨿", AMP: "&", amp: "&", And: "⩓", and: "∧", andand: "⩕", andd: "⩜", andslope: "⩘", andv: "⩚", ang: "∠", ange: "⦤", angle: "∠", angmsd: "∡", angmsdaa: "⦨", angmsdab: "⦩", angmsdac: "⦪", angmsdad: "⦫", angmsdae: "⦬", angmsdaf: "⦭", angmsdag: "⦮", angmsdah: "⦯", angrt: "∟", angrtvb: "⊾", angrtvbd: "⦝", angsph: "∢", angst: "Å", angzarr: "⍼", Aogon: "Ą", aogon: "ą", Aopf: "𝔸", aopf: "𝕒", ap: "≈", apacir: "⩯", apE: "⩰", ape: "≊", apid: "≋", apos: "'", ApplyFunction: "\u2061", approx: "≈", approxeq: "≊", Aring: "Å", aring: "å", Ascr: "𝒜", ascr: "𝒶", Assign: "≔", ast: "*", asymp: "≈", asympeq: "≍", Atilde: "Ã", atilde: "ã", Auml: "Ä", auml: "ä", awconint: "∳", awint: "⨑", backcong: "≌", backepsilon: "϶", backprime: "‵", backsim: "∽", backsimeq: "⋍", Backslash: "∖", Barv: "⫧", barvee: "⊽", Barwed: "⌆", barwed: "⌅", barwedge: "⌅", bbrk: "⎵", bbrktbrk: "⎶", bcong: "≌", Bcy: "Б", bcy: "б", bdquo: "„", becaus: "∵", Because: "∵", because: "∵", bemptyv: "⦰", bepsi: "϶", bernou: "ℬ", Bernoullis: "ℬ", Beta: "Β", beta: "β", beth: "ℶ", between: "≬", Bfr: "𝔅", bfr: "𝔟", bigcap: "⋂", bigcirc: "◯", bigcup: "⋃", bigodot: "⨀", bigoplus: "⨁", bigotimes: "⨂", bigsqcup: "⨆", bigstar: "★", bigtriangledown: "▽", bigtriangleup: "△", biguplus: "⨄", bigvee: "⋁", bigwedge: "⋀", bkarow: "⤍", blacklozenge: "⧫", blacksquare: "▪", blacktriangle: "▴", blacktriangledown: "▾", blacktriangleleft: "◂", blacktriangleright: "▸", blank: "␣", blk12: "▒", blk14: "░", blk34: "▓", block: "█", bne: "=⃥", bnequiv: "≡⃥", bNot: "⫭", bnot: "⌐", Bopf: "𝔹", bopf: "𝕓", bot: "⊥", bottom: "⊥", bowtie: "⋈", boxbox: "⧉", boxDL: "╗", boxDl: "╖", boxdL: "╕", boxdl: "┐", boxDR: "╔", boxDr: "╓", boxdR: "╒", boxdr: "┌", boxH: "═", boxh: "─", boxHD: "╦", boxHd: "╤", boxhD: "╥", boxhd: "┬", boxHU: "╩", boxHu: "╧", boxhU: "╨", boxhu: "┴", boxminus: "⊟", boxplus: "⊞", boxtimes: "⊠", boxUL: "╝", boxUl: "╜", boxuL: "╛", boxul: "┘", boxUR: "╚", boxUr: "╙", boxuR: "╘", boxur: "└", boxV: "║", boxv: "│", boxVH: "╬", boxVh: "╫", boxvH: "╪", boxvh: "┼", boxVL: "╣", boxVl: "╢", boxvL: "╡", boxvl: "┤", boxVR: "╠", boxVr: "╟", boxvR: "╞", boxvr: "├", bprime: "‵", Breve: "˘", breve: "˘", brvbar: "¦", Bscr: "ℬ", bscr: "𝒷", bsemi: "⁏", bsim: "∽", bsime: "⋍", bsol: "\\", bsolb: "⧅", bsolhsub: "⟈", bull: "•", bullet: "•", bump: "≎", bumpE: "⪮", bumpe: "≏", Bumpeq: "≎", bumpeq: "≏", Cacute: "Ć", cacute: "ć", Cap: "⋒", cap: "∩", capand: "⩄", capbrcup: "⩉", capcap: "⩋", capcup: "⩇", capdot: "⩀", CapitalDifferentialD: "ⅅ", caps: "∩︀", caret: "⁁", caron: "ˇ", Cayleys: "ℭ", ccaps: "⩍", Ccaron: "Č", ccaron: "č", Ccedil: "Ç", ccedil: "ç", Ccirc: "Ĉ", ccirc: "ĉ", Cconint: "∰", ccups: "⩌", ccupssm: "⩐", Cdot: "Ċ", cdot: "ċ", cedil: "¸", Cedilla: "¸", cemptyv: "⦲", cent: "¢", CenterDot: "·", centerdot: "·", Cfr: "ℭ", cfr: "𝔠", CHcy: "Ч", chcy: "ч", check: "✓", checkmark: "✓", Chi: "Χ", chi: "χ", cir: "○", circ: "ˆ", circeq: "≗", circlearrowleft: "↺", circlearrowright: "↻", circledast: "⊛", circledcirc: "⊚", circleddash: "⊝", CircleDot: "⊙", circledR: "®", circledS: "Ⓢ", CircleMinus: "⊖", CirclePlus: "⊕", CircleTimes: "⊗", cirE: "⧃", cire: "≗", cirfnint: "⨐", cirmid: "⫯", cirscir: "⧂", ClockwiseContourIntegral: "∲", CloseCurlyDoubleQuote: "”", CloseCurlyQuote: "’", clubs: "♣", clubsuit: "♣", Colon: "∷", colon: ":", Colone: "⩴", colone: "≔", coloneq: "≔", comma: ",", commat: "@", comp: "∁", compfn: "∘", complement: "∁", complexes: "ℂ", cong: "≅", congdot: "⩭", Congruent: "≡", Conint: "∯", conint: "∮", ContourIntegral: "∮", Copf: "ℂ", copf: "𝕔", coprod: "∐", Coproduct: "∐", COPY: "©", copy: "©", copysr: "℗", CounterClockwiseContourIntegral: "∳", crarr: "↵", Cross: "⨯", cross: "✗", Cscr: "𝒞", cscr: "𝒸", csub: "⫏", csube: "⫑", csup: "⫐", csupe: "⫒", ctdot: "⋯", cudarrl: "⤸", cudarrr: "⤵", cuepr: "⋞", cuesc: "⋟", cularr: "↶", cularrp: "⤽", Cup: "⋓", cup: "∪", cupbrcap: "⩈", CupCap: "≍", cupcap: "⩆", cupcup: "⩊", cupdot: "⊍", cupor: "⩅", cups: "∪︀", curarr: "↷", curarrm: "⤼", curlyeqprec: "⋞", curlyeqsucc: "⋟", curlyvee: "⋎", curlywedge: "⋏", curren: "¤", curvearrowleft: "↶", curvearrowright: "↷", cuvee: "⋎", cuwed: "⋏", cwconint: "∲", cwint: "∱", cylcty: "⌭", Dagger: "‡", dagger: "†", daleth: "ℸ", Darr: "↡", dArr: "⇓", darr: "↓", dash: "‐", Dashv: "⫤", dashv: "⊣", dbkarow: "⤏", dblac: "˝", Dcaron: "Ď", dcaron: "ď", Dcy: "Д", dcy: "д", DD: "ⅅ", dd: "ⅆ", ddagger: "‡", ddarr: "⇊", DDotrahd: "⤑", ddotseq: "⩷", deg: "°", Del: "∇", Delta: "Δ", delta: "δ", demptyv: "⦱", dfisht: "⥿", Dfr: "𝔇", dfr: "𝔡", dHar: "⥥", dharl: "⇃", dharr: "⇂", DiacriticalAcute: "´", DiacriticalDot: "˙", DiacriticalDoubleAcute: "˝", DiacriticalGrave: "`", DiacriticalTilde: "˜", diam: "⋄", Diamond: "⋄", diamond: "⋄", diamondsuit: "♦", diams: "♦", die: "¨", DifferentialD: "ⅆ", digamma: "ϝ", disin: "⋲", div: "÷", divide: "÷", divideontimes: "⋇", divonx: "⋇", DJcy: "Ђ", djcy: "ђ", dlcorn: "⌞", dlcrop: "⌍", dollar: "$", Dopf: "𝔻", dopf: "𝕕", Dot: "¨", dot: "˙", DotDot: "⃜", doteq: "≐", doteqdot: "≑", DotEqual: "≐", dotminus: "∸", dotplus: "∔", dotsquare: "⊡", doublebarwedge: "⌆", DoubleContourIntegral: "∯", DoubleDot: "¨", DoubleDownArrow: "⇓", DoubleLeftArrow: "⇐", DoubleLeftRightArrow: "⇔", DoubleLeftTee: "⫤", DoubleLongLeftArrow: "⟸", DoubleLongLeftRightArrow: "⟺", DoubleLongRightArrow: "⟹", DoubleRightArrow: "⇒", DoubleRightTee: "⊨", DoubleUpArrow: "⇑", DoubleUpDownArrow: "⇕", DoubleVerticalBar: "∥", DownArrow: "↓", Downarrow: "⇓", downarrow: "↓", DownArrowBar: "⤓", DownArrowUpArrow: "⇵", DownBreve: "̑", downdownarrows: "⇊", downharpoonleft: "⇃", downharpoonright: "⇂", DownLeftRightVector: "⥐", DownLeftTeeVector: "⥞", DownLeftVector: "↽", DownLeftVectorBar: "⥖", DownRightTeeVector: "⥟", DownRightVector: "⇁", DownRightVectorBar: "⥗", DownTee: "⊤", DownTeeArrow: "↧", drbkarow: "⤐", drcorn: "⌟", drcrop: "⌌", Dscr: "𝒟", dscr: "𝒹", DScy: "Ѕ", dscy: "ѕ", dsol: "⧶", Dstrok: "Đ", dstrok: "đ", dtdot: "⋱", dtri: "▿", dtrif: "▾", duarr: "⇵", duhar: "⥯", dwangle: "⦦", DZcy: "Џ", dzcy: "џ", dzigrarr: "⟿", Eacute: "É", eacute: "é", easter: "⩮", Ecaron: "Ě", ecaron: "ě", ecir: "≖", Ecirc: "Ê", ecirc: "ê", ecolon: "≕", Ecy: "Э", ecy: "э", eDDot: "⩷", Edot: "Ė", eDot: "≑", edot: "ė", ee: "ⅇ", efDot: "≒", Efr: "𝔈", efr: "𝔢", eg: "⪚", Egrave: "È", egrave: "è", egs: "⪖", egsdot: "⪘", el: "⪙", Element: "∈", elinters: "⏧", ell: "ℓ", els: "⪕", elsdot: "⪗", Emacr: "Ē", emacr: "ē", empty: "∅", emptyset: "∅", EmptySmallSquare: "◻", emptyv: "∅", EmptyVerySmallSquare: "▫", emsp: " ", emsp13: " ", emsp14: " ", ENG: "Ŋ", eng: "ŋ", ensp: " ", Eogon: "Ę", eogon: "ę", Eopf: "𝔼", eopf: "𝕖", epar: "⋕", eparsl: "⧣", eplus: "⩱", epsi: "ε", Epsilon: "Ε", epsilon: "ε", epsiv: "ϵ", eqcirc: "≖", eqcolon: "≕", eqsim: "≂", eqslantgtr: "⪖", eqslantless: "⪕", Equal: "⩵", equals: "=", EqualTilde: "≂", equest: "≟", Equilibrium: "⇌", equiv: "≡", equivDD: "⩸", eqvparsl: "⧥", erarr: "⥱", erDot: "≓", Escr: "ℰ", escr: "ℯ", esdot: "≐", Esim: "⩳", esim: "≂", Eta: "Η", eta: "η", ETH: "Ð", eth: "ð", Euml: "Ë", euml: "ë", euro: "€", excl: "!", exist: "∃", Exists: "∃", expectation: "ℰ", ExponentialE: "ⅇ", exponentiale: "ⅇ", fallingdotseq: "≒", Fcy: "Ф", fcy: "ф", female: "♀", ffilig: "ffi", fflig: "ff", ffllig: "ffl", Ffr: "𝔉", ffr: "𝔣", filig: "fi", FilledSmallSquare: "◼", FilledVerySmallSquare: "▪", fjlig: "fj", flat: "♭", fllig: "fl", fltns: "▱", fnof: "ƒ", Fopf: "𝔽", fopf: "𝕗", ForAll: "∀", forall: "∀", fork: "⋔", forkv: "⫙", Fouriertrf: "ℱ", fpartint: "⨍", frac12: "½", frac13: "⅓", frac14: "¼", frac15: "⅕", frac16: "⅙", frac18: "⅛", frac23: "⅔", frac25: "⅖", frac34: "¾", frac35: "⅗", frac38: "⅜", frac45: "⅘", frac56: "⅚", frac58: "⅝", frac78: "⅞", frasl: "⁄", frown: "⌢", Fscr: "ℱ", fscr: "𝒻", gacute: "ǵ", Gamma: "Γ", gamma: "γ", Gammad: "Ϝ", gammad: "ϝ", gap: "⪆", Gbreve: "Ğ", gbreve: "ğ", Gcedil: "Ģ", Gcirc: "Ĝ", gcirc: "ĝ", Gcy: "Г", gcy: "г", Gdot: "Ġ", gdot: "ġ", gE: "≧", ge: "≥", gEl: "⪌", gel: "⋛", geq: "≥", geqq: "≧", geqslant: "⩾", ges: "⩾", gescc: "⪩", gesdot: "⪀", gesdoto: "⪂", gesdotol: "⪄", gesl: "⋛︀", gesles: "⪔", Gfr: "𝔊", gfr: "𝔤", Gg: "⋙", gg: "≫", ggg: "⋙", gimel: "ℷ", GJcy: "Ѓ", gjcy: "ѓ", gl: "≷", gla: "⪥", glE: "⪒", glj: "⪤", gnap: "⪊", gnapprox: "⪊", gnE: "≩", gne: "⪈", gneq: "⪈", gneqq: "≩", gnsim: "⋧", Gopf: "𝔾", gopf: "𝕘", grave: "`", GreaterEqual: "≥", GreaterEqualLess: "⋛", GreaterFullEqual: "≧", GreaterGreater: "⪢", GreaterLess: "≷", GreaterSlantEqual: "⩾", GreaterTilde: "≳", Gscr: "𝒢", gscr: "ℊ", gsim: "≳", gsime: "⪎", gsiml: "⪐", GT: ">", Gt: "≫", gt: ">", gtcc: "⪧", gtcir: "⩺", gtdot: "⋗", gtlPar: "⦕", gtquest: "⩼", gtrapprox: "⪆", gtrarr: "⥸", gtrdot: "⋗", gtreqless: "⋛", gtreqqless: "⪌", gtrless: "≷", gtrsim: "≳", gvertneqq: "≩︀", gvnE: "≩︀", Hacek: "ˇ", hairsp: " ", half: "½", hamilt: "ℋ", HARDcy: "Ъ", hardcy: "ъ", hArr: "⇔", harr: "↔", harrcir: "⥈", harrw: "↭", Hat: "^", hbar: "ℏ", Hcirc: "Ĥ", hcirc: "ĥ", hearts: "♥", heartsuit: "♥", hellip: "…", hercon: "⊹", Hfr: "ℌ", hfr: "𝔥", HilbertSpace: "ℋ", hksearow: "⤥", hkswarow: "⤦", hoarr: "⇿", homtht: "∻", hookleftarrow: "↩", hookrightarrow: "↪", Hopf: "ℍ", hopf: "𝕙", horbar: "―", HorizontalLine: "─", Hscr: "ℋ", hscr: "𝒽", hslash: "ℏ", Hstrok: "Ħ", hstrok: "ħ", HumpDownHump: "≎", HumpEqual: "≏", hybull: "⁃", hyphen: "‐", Iacute: "Í", iacute: "í", ic: "\u2063", Icirc: "Î", icirc: "î", Icy: "И", icy: "и", Idot: "İ", IEcy: "Е", iecy: "е", iexcl: "¡", iff: "⇔", Ifr: "ℑ", ifr: "𝔦", Igrave: "Ì", igrave: "ì", ii: "ⅈ", iiiint: "⨌", iiint: "∭", iinfin: "⧜", iiota: "℩", IJlig: "IJ", ijlig: "ij", Im: "ℑ", Imacr: "Ī", imacr: "ī", image: "ℑ", ImaginaryI: "ⅈ", imagline: "ℐ", imagpart: "ℑ", imath: "ı", imof: "⊷", imped: "Ƶ", Implies: "⇒", in: "∈", incare: "℅", infin: "∞", infintie: "⧝", inodot: "ı", Int: "∬", int: "∫", intcal: "⊺", integers: "ℤ", Integral: "∫", intercal: "⊺", Intersection: "⋂", intlarhk: "⨗", intprod: "⨼", InvisibleComma: "\u2063", InvisibleTimes: "\u2062", IOcy: "Ё", iocy: "ё", Iogon: "Į", iogon: "į", Iopf: "𝕀", iopf: "𝕚", Iota: "Ι", iota: "ι", iprod: "⨼", iquest: "¿", Iscr: "ℐ", iscr: "𝒾", isin: "∈", isindot: "⋵", isinE: "⋹", isins: "⋴", isinsv: "⋳", isinv: "∈", it: "\u2062", Itilde: "Ĩ", itilde: "ĩ", Iukcy: "І", iukcy: "і", Iuml: "Ï", iuml: "ï", Jcirc: "Ĵ", jcirc: "ĵ", Jcy: "Й", jcy: "й", Jfr: "𝔍", jfr: "𝔧", jmath: "ȷ", Jopf: "𝕁", jopf: "𝕛", Jscr: "𝒥", jscr: "𝒿", Jsercy: "Ј", jsercy: "ј", Jukcy: "Є", jukcy: "є", Kappa: "Κ", kappa: "κ", kappav: "ϰ", Kcedil: "Ķ", kcedil: "ķ", Kcy: "К", kcy: "к", Kfr: "𝔎", kfr: "𝔨", kgreen: "ĸ", KHcy: "Х", khcy: "х", KJcy: "Ќ", kjcy: "ќ", Kopf: "𝕂", kopf: "𝕜", Kscr: "𝒦", kscr: "𝓀", lAarr: "⇚", Lacute: "Ĺ", lacute: "ĺ", laemptyv: "⦴", lagran: "ℒ", Lambda: "Λ", lambda: "λ", Lang: "⟪", lang: "⟨", langd: "⦑", langle: "⟨", lap: "⪅", Laplacetrf: "ℒ", laquo: "«", Larr: "↞", lArr: "⇐", larr: "←", larrb: "⇤", larrbfs: "⤟", larrfs: "⤝", larrhk: "↩", larrlp: "↫", larrpl: "⤹", larrsim: "⥳", larrtl: "↢", lat: "⪫", lAtail: "⤛", latail: "⤙", late: "⪭", lates: "⪭︀", lBarr: "⤎", lbarr: "⤌", lbbrk: "❲", lbrace: "{", lbrack: "[", lbrke: "⦋", lbrksld: "⦏", lbrkslu: "⦍", Lcaron: "Ľ", lcaron: "ľ", Lcedil: "Ļ", lcedil: "ļ", lceil: "⌈", lcub: "{", Lcy: "Л", lcy: "л", ldca: "⤶", ldquo: "“", ldquor: "„", ldrdhar: "⥧", ldrushar: "⥋", ldsh: "↲", lE: "≦", le: "≤", LeftAngleBracket: "⟨", LeftArrow: "←", Leftarrow: "⇐", leftarrow: "←", LeftArrowBar: "⇤", LeftArrowRightArrow: "⇆", leftarrowtail: "↢", LeftCeiling: "⌈", LeftDoubleBracket: "⟦", LeftDownTeeVector: "⥡", LeftDownVector: "⇃", LeftDownVectorBar: "⥙", LeftFloor: "⌊", leftharpoondown: "↽", leftharpoonup: "↼", leftleftarrows: "⇇", LeftRightArrow: "↔", Leftrightarrow: "⇔", leftrightarrow: "↔", leftrightarrows: "⇆", leftrightharpoons: "⇋", leftrightsquigarrow: "↭", LeftRightVector: "⥎", LeftTee: "⊣", LeftTeeArrow: "↤", LeftTeeVector: "⥚", leftthreetimes: "⋋", LeftTriangle: "⊲", LeftTriangleBar: "⧏", LeftTriangleEqual: "⊴", LeftUpDownVector: "⥑", LeftUpTeeVector: "⥠", LeftUpVector: "↿", LeftUpVectorBar: "⥘", LeftVector: "↼", LeftVectorBar: "⥒", lEg: "⪋", leg: "⋚", leq: "≤", leqq: "≦", leqslant: "⩽", les: "⩽", lescc: "⪨", lesdot: "⩿", lesdoto: "⪁", lesdotor: "⪃", lesg: "⋚︀", lesges: "⪓", lessapprox: "⪅", lessdot: "⋖", lesseqgtr: "⋚", lesseqqgtr: "⪋", LessEqualGreater: "⋚", LessFullEqual: "≦", LessGreater: "≶", lessgtr: "≶", LessLess: "⪡", lesssim: "≲", LessSlantEqual: "⩽", LessTilde: "≲", lfisht: "⥼", lfloor: "⌊", Lfr: "𝔏", lfr: "𝔩", lg: "≶", lgE: "⪑", lHar: "⥢", lhard: "↽", lharu: "↼", lharul: "⥪", lhblk: "▄", LJcy: "Љ", ljcy: "љ", Ll: "⋘", ll: "≪", llarr: "⇇", llcorner: "⌞", Lleftarrow: "⇚", llhard: "⥫", lltri: "◺", Lmidot: "Ŀ", lmidot: "ŀ", lmoust: "⎰", lmoustache: "⎰", lnap: "⪉", lnapprox: "⪉", lnE: "≨", lne: "⪇", lneq: "⪇", lneqq: "≨", lnsim: "⋦", loang: "⟬", loarr: "⇽", lobrk: "⟦", LongLeftArrow: "⟵", Longleftarrow: "⟸", longleftarrow: "⟵", LongLeftRightArrow: "⟷", Longleftrightarrow: "⟺", longleftrightarrow: "⟷", longmapsto: "⟼", LongRightArrow: "⟶", Longrightarrow: "⟹", longrightarrow: "⟶", looparrowleft: "↫", looparrowright: "↬", lopar: "⦅", Lopf: "𝕃", lopf: "𝕝", loplus: "⨭", lotimes: "⨴", lowast: "∗", lowbar: "_", LowerLeftArrow: "↙", LowerRightArrow: "↘", loz: "◊", lozenge: "◊", lozf: "⧫", lpar: "(", lparlt: "⦓", lrarr: "⇆", lrcorner: "⌟", lrhar: "⇋", lrhard: "⥭", lrm: "\u200e", lrtri: "⊿", lsaquo: "‹", Lscr: "ℒ", lscr: "𝓁", Lsh: "↰", lsh: "↰", lsim: "≲", lsime: "⪍", lsimg: "⪏", lsqb: "[", lsquo: "‘", lsquor: "‚", Lstrok: "Ł", lstrok: "ł", LT: "<", Lt: "≪", lt: "<", ltcc: "⪦", ltcir: "⩹", ltdot: "⋖", lthree: "⋋", ltimes: "⋉", ltlarr: "⥶", ltquest: "⩻", ltri: "◃", ltrie: "⊴", ltrif: "◂", ltrPar: "⦖", lurdshar: "⥊", luruhar: "⥦", lvertneqq: "≨︀", lvnE: "≨︀", macr: "¯", male: "♂", malt: "✠", maltese: "✠", Map: "⤅", map: "↦", mapsto: "↦", mapstodown: "↧", mapstoleft: "↤", mapstoup: "↥", marker: "▮", mcomma: "⨩", Mcy: "М", mcy: "м", mdash: "—", mDDot: "∺", measuredangle: "∡", MediumSpace: " ", Mellintrf: "ℳ", Mfr: "𝔐", mfr: "𝔪", mho: "℧", micro: "µ", mid: "∣", midast: "*", midcir: "⫰", middot: "·", minus: "−", minusb: "⊟", minusd: "∸", minusdu: "⨪", MinusPlus: "∓", mlcp: "⫛", mldr: "…", mnplus: "∓", models: "⊧", Mopf: "𝕄", mopf: "𝕞", mp: "∓", Mscr: "ℳ", mscr: "𝓂", mstpos: "∾", Mu: "Μ", mu: "μ", multimap: "⊸", mumap: "⊸", nabla: "∇", Nacute: "Ń", nacute: "ń", nang: "∠⃒", nap: "≉", napE: "⩰̸", napid: "≋̸", napos: "ʼn", napprox: "≉", natur: "♮", natural: "♮", naturals: "ℕ", nbsp: " ", nbump: "≎̸", nbumpe: "≏̸", ncap: "⩃", Ncaron: "Ň", ncaron: "ň", Ncedil: "Ņ", ncedil: "ņ", ncong: "≇", ncongdot: "⩭̸", ncup: "⩂", Ncy: "Н", ncy: "н", ndash: "–", ne: "≠", nearhk: "⤤", neArr: "⇗", nearr: "↗", nearrow: "↗", nedot: "≐̸", NegativeMediumSpace: "​", NegativeThickSpace: "​", NegativeThinSpace: "​", NegativeVeryThinSpace: "​", nequiv: "≢", nesear: "⤨", nesim: "≂̸", NestedGreaterGreater: "≫", NestedLessLess: "≪", NewLine: "\u000a", nexist: "∄", nexists: "∄", Nfr: "𝔑", nfr: "𝔫", ngE: "≧̸", nge: "≱", ngeq: "≱", ngeqq: "≧̸", ngeqslant: "⩾̸", nges: "⩾̸", nGg: "⋙̸", ngsim: "≵", nGt: "≫⃒", ngt: "≯", ngtr: "≯", nGtv: "≫̸", nhArr: "⇎", nharr: "↮", nhpar: "⫲", ni: "∋", nis: "⋼", nisd: "⋺", niv: "∋", NJcy: "Њ", njcy: "њ", nlArr: "⇍", nlarr: "↚", nldr: "‥", nlE: "≦̸", nle: "≰", nLeftarrow: "⇍", nleftarrow: "↚", nLeftrightarrow: "⇎", nleftrightarrow: "↮", nleq: "≰", nleqq: "≦̸", nleqslant: "⩽̸", nles: "⩽̸", nless: "≮", nLl: "⋘̸", nlsim: "≴", nLt: "≪⃒", nlt: "≮", nltri: "⋪", nltrie: "⋬", nLtv: "≪̸", nmid: "∤", NoBreak: "\u2060", NonBreakingSpace: " ", Nopf: "ℕ", nopf: "𝕟", Not: "⫬", not: "¬", NotCongruent: "≢", NotCupCap: "≭", NotDoubleVerticalBar: "∦", NotElement: "∉", NotEqual: "≠", NotEqualTilde: "≂̸", NotExists: "∄", NotGreater: "≯", NotGreaterEqual: "≱", NotGreaterFullEqual: "≧̸", NotGreaterGreater: "≫̸", NotGreaterLess: "≹", NotGreaterSlantEqual: "⩾̸", NotGreaterTilde: "≵", NotHumpDownHump: "≎̸", NotHumpEqual: "≏̸", notin: "∉", notindot: "⋵̸", notinE: "⋹̸", notinva: "∉", notinvb: "⋷", notinvc: "⋶", NotLeftTriangle: "⋪", NotLeftTriangleBar: "⧏̸", NotLeftTriangleEqual: "⋬", NotLess: "≮", NotLessEqual: "≰", NotLessGreater: "≸", NotLessLess: "≪̸", NotLessSlantEqual: "⩽̸", NotLessTilde: "≴", NotNestedGreaterGreater: "⪢̸", NotNestedLessLess: "⪡̸", notni: "∌", notniva: "∌", notnivb: "⋾", notnivc: "⋽", NotPrecedes: "⊀", NotPrecedesEqual: "⪯̸", NotPrecedesSlantEqual: "⋠", NotReverseElement: "∌", NotRightTriangle: "⋫", NotRightTriangleBar: "⧐̸", NotRightTriangleEqual: "⋭", NotSquareSubset: "⊏̸", NotSquareSubsetEqual: "⋢", NotSquareSuperset: "⊐̸", NotSquareSupersetEqual: "⋣", NotSubset: "⊂⃒", NotSubsetEqual: "⊈", NotSucceeds: "⊁", NotSucceedsEqual: "⪰̸", NotSucceedsSlantEqual: "⋡", NotSucceedsTilde: "≿̸", NotSuperset: "⊃⃒", NotSupersetEqual: "⊉", NotTilde: "≁", NotTildeEqual: "≄", NotTildeFullEqual: "≇", NotTildeTilde: "≉", NotVerticalBar: "∤", npar: "∦", nparallel: "∦", nparsl: "⫽⃥", npart: "∂̸", npolint: "⨔", npr: "⊀", nprcue: "⋠", npre: "⪯̸", nprec: "⊀", npreceq: "⪯̸", nrArr: "⇏", nrarr: "↛", nrarrc: "⤳̸", nrarrw: "↝̸", nRightarrow: "⇏", nrightarrow: "↛", nrtri: "⋫", nrtrie: "⋭", nsc: "⊁", nsccue: "⋡", nsce: "⪰̸", Nscr: "𝒩", nscr: "𝓃", nshortmid: "∤", nshortparallel: "∦", nsim: "≁", nsime: "≄", nsimeq: "≄", nsmid: "∤", nspar: "∦", nsqsube: "⋢", nsqsupe: "⋣", nsub: "⊄", nsubE: "⫅̸", nsube: "⊈", nsubset: "⊂⃒", nsubseteq: "⊈", nsubseteqq: "⫅̸", nsucc: "⊁", nsucceq: "⪰̸", nsup: "⊅", nsupE: "⫆̸", nsupe: "⊉", nsupset: "⊃⃒", nsupseteq: "⊉", nsupseteqq: "⫆̸", ntgl: "≹", Ntilde: "Ñ", ntilde: "ñ", ntlg: "≸", ntriangleleft: "⋪", ntrianglelefteq: "⋬", ntriangleright: "⋫", ntrianglerighteq: "⋭", Nu: "Ν", nu: "ν", num: "#", numero: "№", numsp: " ", nvap: "≍⃒", nVDash: "⊯", nVdash: "⊮", nvDash: "⊭", nvdash: "⊬", nvge: "≥⃒", nvgt: ">⃒", nvHarr: "⤄", nvinfin: "⧞", nvlArr: "⤂", nvle: "≤⃒", nvlt: "<⃒", nvltrie: "⊴⃒", nvrArr: "⤃", nvrtrie: "⊵⃒", nvsim: "∼⃒", nwarhk: "⤣", nwArr: "⇖", nwarr: "↖", nwarrow: "↖", nwnear: "⤧", Oacute: "Ó", oacute: "ó", oast: "⊛", ocir: "⊚", Ocirc: "Ô", ocirc: "ô", Ocy: "О", ocy: "о", odash: "⊝", Odblac: "Ő", odblac: "ő", odiv: "⨸", odot: "⊙", odsold: "⦼", OElig: "Œ", oelig: "œ", ofcir: "⦿", Ofr: "𝔒", ofr: "𝔬", ogon: "˛", Ograve: "Ò", ograve: "ò", ogt: "⧁", ohbar: "⦵", ohm: "Ω", oint: "∮", olarr: "↺", olcir: "⦾", olcross: "⦻", oline: "‾", olt: "⧀", Omacr: "Ō", omacr: "ō", Omega: "Ω", omega: "ω", Omicron: "Ο", omicron: "ο", omid: "⦶", ominus: "⊖", Oopf: "𝕆", oopf: "𝕠", opar: "⦷", OpenCurlyDoubleQuote: "“", OpenCurlyQuote: "‘", operp: "⦹", oplus: "⊕", Or: "⩔", or: "∨", orarr: "↻", ord: "⩝", order: "ℴ", orderof: "ℴ", ordf: "ª", ordm: "º", origof: "⊶", oror: "⩖", orslope: "⩗", orv: "⩛", oS: "Ⓢ", Oscr: "𝒪", oscr: "ℴ", Oslash: "Ø", oslash: "ø", osol: "⊘", Otilde: "Õ", otilde: "õ", Otimes: "⨷", otimes: "⊗", otimesas: "⨶", Ouml: "Ö", ouml: "ö", ovbar: "⌽", OverBar: "‾", OverBrace: "⏞", OverBracket: "⎴", OverParenthesis: "⏜", par: "∥", para: "¶", parallel: "∥", parsim: "⫳", parsl: "⫽", part: "∂", PartialD: "∂", Pcy: "П", pcy: "п", percnt: "%", period: ".", permil: "‰", perp: "⊥", pertenk: "‱", Pfr: "𝔓", pfr: "𝔭", Phi: "Φ", phi: "φ", phiv: "ϕ", phmmat: "ℳ", phone: "☎", Pi: "Π", pi: "π", pitchfork: "⋔", piv: "ϖ", planck: "ℏ", planckh: "ℎ", plankv: "ℏ", plus: "+", plusacir: "⨣", plusb: "⊞", pluscir: "⨢", plusdo: "∔", plusdu: "⨥", pluse: "⩲", PlusMinus: "±", plusmn: "±", plussim: "⨦", plustwo: "⨧", pm: "±", Poincareplane: "ℌ", pointint: "⨕", Popf: "ℙ", popf: "𝕡", pound: "£", Pr: "⪻", pr: "≺", prap: "⪷", prcue: "≼", prE: "⪳", pre: "⪯", prec: "≺", precapprox: "⪷", preccurlyeq: "≼", Precedes: "≺", PrecedesEqual: "⪯", PrecedesSlantEqual: "≼", PrecedesTilde: "≾", preceq: "⪯", precnapprox: "⪹", precneqq: "⪵", precnsim: "⋨", precsim: "≾", Prime: "″", prime: "′", primes: "ℙ", prnap: "⪹", prnE: "⪵", prnsim: "⋨", prod: "∏", Product: "∏", profalar: "⌮", profline: "⌒", profsurf: "⌓", prop: "∝", Proportion: "∷", Proportional: "∝", propto: "∝", prsim: "≾", prurel: "⊰", Pscr: "𝒫", pscr: "𝓅", Psi: "Ψ", psi: "ψ", puncsp: " ", Qfr: "𝔔", qfr: "𝔮", qint: "⨌", Qopf: "ℚ", qopf: "𝕢", qprime: "⁗", Qscr: "𝒬", qscr: "𝓆", quaternions: "ℍ", quatint: "⨖", quest: "?", questeq: "≟", QUOT: "\"", quot: "\"", rAarr: "⇛", race: "∽̱", Racute: "Ŕ", racute: "ŕ", radic: "√", raemptyv: "⦳", Rang: "⟫", rang: "⟩", rangd: "⦒", range: "⦥", rangle: "⟩", raquo: "»", Rarr: "↠", rArr: "⇒", rarr: "→", rarrap: "⥵", rarrb: "⇥", rarrbfs: "⤠", rarrc: "⤳", rarrfs: "⤞", rarrhk: "↪", rarrlp: "↬", rarrpl: "⥅", rarrsim: "⥴", Rarrtl: "⤖", rarrtl: "↣", rarrw: "↝", rAtail: "⤜", ratail: "⤚", ratio: "∶", rationals: "ℚ", RBarr: "⤐", rBarr: "⤏", rbarr: "⤍", rbbrk: "❳", rbrace: "}", rbrack: "]", rbrke: "⦌", rbrksld: "⦎", rbrkslu: "⦐", Rcaron: "Ř", rcaron: "ř", Rcedil: "Ŗ", rcedil: "ŗ", rceil: "⌉", rcub: "}", Rcy: "Р", rcy: "р", rdca: "⤷", rdldhar: "⥩", rdquo: "”", rdquor: "”", rdsh: "↳", Re: "ℜ", real: "ℜ", realine: "ℛ", realpart: "ℜ", reals: "ℝ", rect: "▭", REG: "®", reg: "®", ReverseElement: "∋", ReverseEquilibrium: "⇋", ReverseUpEquilibrium: "⥯", rfisht: "⥽", rfloor: "⌋", Rfr: "ℜ", rfr: "𝔯", rHar: "⥤", rhard: "⇁", rharu: "⇀", rharul: "⥬", Rho: "Ρ", rho: "ρ", rhov: "ϱ", RightAngleBracket: "⟩", RightArrow: "→", Rightarrow: "⇒", rightarrow: "→", RightArrowBar: "⇥", RightArrowLeftArrow: "⇄", rightarrowtail: "↣", RightCeiling: "⌉", RightDoubleBracket: "⟧", RightDownTeeVector: "⥝", RightDownVector: "⇂", RightDownVectorBar: "⥕", RightFloor: "⌋", rightharpoondown: "⇁", rightharpoonup: "⇀", rightleftarrows: "⇄", rightleftharpoons: "⇌", rightrightarrows: "⇉", rightsquigarrow: "↝", RightTee: "⊢", RightTeeArrow: "↦", RightTeeVector: "⥛", rightthreetimes: "⋌", RightTriangle: "⊳", RightTriangleBar: "⧐", RightTriangleEqual: "⊵", RightUpDownVector: "⥏", RightUpTeeVector: "⥜", RightUpVector: "↾", RightUpVectorBar: "⥔", RightVector: "⇀", RightVectorBar: "⥓", ring: "˚", risingdotseq: "≓", rlarr: "⇄", rlhar: "⇌", rlm: "\u200f", rmoust: "⎱", rmoustache: "⎱", rnmid: "⫮", roang: "⟭", roarr: "⇾", robrk: "⟧", ropar: "⦆", Ropf: "ℝ", ropf: "𝕣", roplus: "⨮", rotimes: "⨵", RoundImplies: "⥰", rpar: ")", rpargt: "⦔", rppolint: "⨒", rrarr: "⇉", Rrightarrow: "⇛", rsaquo: "›", Rscr: "ℛ", rscr: "𝓇", Rsh: "↱", rsh: "↱", rsqb: "]", rsquo: "’", rsquor: "’", rthree: "⋌", rtimes: "⋊", rtri: "▹", rtrie: "⊵", rtrif: "▸", rtriltri: "⧎", RuleDelayed: "⧴", ruluhar: "⥨", rx: "℞", Sacute: "Ś", sacute: "ś", sbquo: "‚", Sc: "⪼", sc: "≻", scap: "⪸", Scaron: "Š", scaron: "š", sccue: "≽", scE: "⪴", sce: "⪰", Scedil: "Ş", scedil: "ş", Scirc: "Ŝ", scirc: "ŝ", scnap: "⪺", scnE: "⪶", scnsim: "⋩", scpolint: "⨓", scsim: "≿", Scy: "С", scy: "с", sdot: "⋅", sdotb: "⊡", sdote: "⩦", searhk: "⤥", seArr: "⇘", searr: "↘", searrow: "↘", sect: "§", semi: ";", seswar: "⤩", setminus: "∖", setmn: "∖", sext: "✶", Sfr: "𝔖", sfr: "𝔰", sfrown: "⌢", sharp: "♯", SHCHcy: "Щ", shchcy: "щ", SHcy: "Ш", shcy: "ш", ShortDownArrow: "↓", ShortLeftArrow: "←", shortmid: "∣", shortparallel: "∥", ShortRightArrow: "→", ShortUpArrow: "↑", shy: "\u00ad", Sigma: "Σ", sigma: "σ", sigmaf: "ς", sigmav: "ς", sim: "∼", simdot: "⩪", sime: "≃", simeq: "≃", simg: "⪞", simgE: "⪠", siml: "⪝", simlE: "⪟", simne: "≆", simplus: "⨤", simrarr: "⥲", slarr: "←", SmallCircle: "∘", smallsetminus: "∖", smashp: "⨳", smeparsl: "⧤", smid: "∣", smile: "⌣", smt: "⪪", smte: "⪬", smtes: "⪬︀", SOFTcy: "Ь", softcy: "ь", sol: "/", solb: "⧄", solbar: "⌿", Sopf: "𝕊", sopf: "𝕤", spades: "♠", spadesuit: "♠", spar: "∥", sqcap: "⊓", sqcaps: "⊓︀", sqcup: "⊔", sqcups: "⊔︀", Sqrt: "√", sqsub: "⊏", sqsube: "⊑", sqsubset: "⊏", sqsubseteq: "⊑", sqsup: "⊐", sqsupe: "⊒", sqsupset: "⊐", sqsupseteq: "⊒", squ: "□", Square: "□", square: "□", SquareIntersection: "⊓", SquareSubset: "⊏", SquareSubsetEqual: "⊑", SquareSuperset: "⊐", SquareSupersetEqual: "⊒", SquareUnion: "⊔", squarf: "▪", squf: "▪", srarr: "→", Sscr: "𝒮", sscr: "𝓈", ssetmn: "∖", ssmile: "⌣", sstarf: "⋆", Star: "⋆", star: "☆", starf: "★", straightepsilon: "ϵ", straightphi: "ϕ", strns: "¯", Sub: "⋐", sub: "⊂", subdot: "⪽", subE: "⫅", sube: "⊆", subedot: "⫃", submult: "⫁", subnE: "⫋", subne: "⊊", subplus: "⪿", subrarr: "⥹", Subset: "⋐", subset: "⊂", subseteq: "⊆", subseteqq: "⫅", SubsetEqual: "⊆", subsetneq: "⊊", subsetneqq: "⫋", subsim: "⫇", subsub: "⫕", subsup: "⫓", succ: "≻", succapprox: "⪸", succcurlyeq: "≽", Succeeds: "≻", SucceedsEqual: "⪰", SucceedsSlantEqual: "≽", SucceedsTilde: "≿", succeq: "⪰", succnapprox: "⪺", succneqq: "⪶", succnsim: "⋩", succsim: "≿", SuchThat: "∋", Sum: "∑", sum: "∑", sung: "♪", Sup: "⋑", sup: "⊃", sup1: "¹", sup2: "²", sup3: "³", supdot: "⪾", supdsub: "⫘", supE: "⫆", supe: "⊇", supedot: "⫄", Superset: "⊃", SupersetEqual: "⊇", suphsol: "⟉", suphsub: "⫗", suplarr: "⥻", supmult: "⫂", supnE: "⫌", supne: "⊋", supplus: "⫀", Supset: "⋑", supset: "⊃", supseteq: "⊇", supseteqq: "⫆", supsetneq: "⊋", supsetneqq: "⫌", supsim: "⫈", supsub: "⫔", supsup: "⫖", swarhk: "⤦", swArr: "⇙", swarr: "↙", swarrow: "↙", swnwar: "⤪", szlig: "ß", Tab: "\u0009", target: "⌖", Tau: "Τ", tau: "τ", tbrk: "⎴", Tcaron: "Ť", tcaron: "ť", Tcedil: "Ţ", tcedil: "ţ", Tcy: "Т", tcy: "т", tdot: "⃛", telrec: "⌕", Tfr: "𝔗", tfr: "𝔱", there4: "∴", Therefore: "∴", therefore: "∴", Theta: "Θ", theta: "θ", thetasym: "ϑ", thetav: "ϑ", thickapprox: "≈", thicksim: "∼", ThickSpace: "  ", thinsp: " ", ThinSpace: " ", thkap: "≈", thksim: "∼", THORN: "Þ", thorn: "þ", Tilde: "∼", tilde: "˜", TildeEqual: "≃", TildeFullEqual: "≅", TildeTilde: "≈", times: "×", timesb: "⊠", timesbar: "⨱", timesd: "⨰", tint: "∭", toea: "⤨", top: "⊤", topbot: "⌶", topcir: "⫱", Topf: "𝕋", topf: "𝕥", topfork: "⫚", tosa: "⤩", tprime: "‴", TRADE: "™", trade: "™", triangle: "▵", triangledown: "▿", triangleleft: "◃", trianglelefteq: "⊴", triangleq: "≜", triangleright: "▹", trianglerighteq: "⊵", tridot: "◬", trie: "≜", triminus: "⨺", TripleDot: "⃛", triplus: "⨹", trisb: "⧍", tritime: "⨻", trpezium: "⏢", Tscr: "𝒯", tscr: "𝓉", TScy: "Ц", tscy: "ц", TSHcy: "Ћ", tshcy: "ћ", Tstrok: "Ŧ", tstrok: "ŧ", twixt: "≬", twoheadleftarrow: "↞", twoheadrightarrow: "↠", Uacute: "Ú", uacute: "ú", Uarr: "↟", uArr: "⇑", uarr: "↑", Uarrocir: "⥉", Ubrcy: "Ў", ubrcy: "ў", Ubreve: "Ŭ", ubreve: "ŭ", Ucirc: "Û", ucirc: "û", Ucy: "У", ucy: "у", udarr: "⇅", Udblac: "Ű", udblac: "ű", udhar: "⥮", ufisht: "⥾", Ufr: "𝔘", ufr: "𝔲", Ugrave: "Ù", ugrave: "ù", uHar: "⥣", uharl: "↿", uharr: "↾", uhblk: "▀", ulcorn: "⌜", ulcorner: "⌜", ulcrop: "⌏", ultri: "◸", Umacr: "Ū", umacr: "ū", uml: "¨", UnderBar: "_", UnderBrace: "⏟", UnderBracket: "⎵", UnderParenthesis: "⏝", Union: "⋃", UnionPlus: "⊎", Uogon: "Ų", uogon: "ų", Uopf: "𝕌", uopf: "𝕦", UpArrow: "↑", Uparrow: "⇑", uparrow: "↑", UpArrowBar: "⤒", UpArrowDownArrow: "⇅", UpDownArrow: "↕", Updownarrow: "⇕", updownarrow: "↕", UpEquilibrium: "⥮", upharpoonleft: "↿", upharpoonright: "↾", uplus: "⊎", UpperLeftArrow: "↖", UpperRightArrow: "↗", Upsi: "ϒ", upsi: "υ", upsih: "ϒ", Upsilon: "Υ", upsilon: "υ", UpTee: "⊥", UpTeeArrow: "↥", upuparrows: "⇈", urcorn: "⌝", urcorner: "⌝", urcrop: "⌎", Uring: "Ů", uring: "ů", urtri: "◹", Uscr: "𝒰", uscr: "𝓊", utdot: "⋰", Utilde: "Ũ", utilde: "ũ", utri: "▵", utrif: "▴", uuarr: "⇈", Uuml: "Ü", uuml: "ü", uwangle: "⦧", vangrt: "⦜", varepsilon: "ϵ", varkappa: "ϰ", varnothing: "∅", varphi: "ϕ", varpi: "ϖ", varpropto: "∝", vArr: "⇕", varr: "↕", varrho: "ϱ", varsigma: "ς", varsubsetneq: "⊊︀", varsubsetneqq: "⫋︀", varsupsetneq: "⊋︀", varsupsetneqq: "⫌︀", vartheta: "ϑ", vartriangleleft: "⊲", vartriangleright: "⊳", Vbar: "⫫", vBar: "⫨", vBarv: "⫩", Vcy: "В", vcy: "в", VDash: "⊫", Vdash: "⊩", vDash: "⊨", vdash: "⊢", Vdashl: "⫦", Vee: "⋁", vee: "∨", veebar: "⊻", veeeq: "≚", vellip: "⋮", Verbar: "‖", verbar: "|", Vert: "‖", vert: "|", VerticalBar: "∣", VerticalLine: "|", VerticalSeparator: "❘", VerticalTilde: "≀", VeryThinSpace: " ", Vfr: "𝔙", vfr: "𝔳", vltri: "⊲", vnsub: "⊂⃒", vnsup: "⊃⃒", Vopf: "𝕍", vopf: "𝕧", vprop: "∝", vrtri: "⊳", Vscr: "𝒱", vscr: "𝓋", vsubnE: "⫋︀", vsubne: "⊊︀", vsupnE: "⫌︀", vsupne: "⊋︀", Vvdash: "⊪", vzigzag: "⦚", Wcirc: "Ŵ", wcirc: "ŵ", wedbar: "⩟", Wedge: "⋀", wedge: "∧", wedgeq: "≙", weierp: "℘", Wfr: "𝔚", wfr: "𝔴", Wopf: "𝕎", wopf: "𝕨", wp: "℘", wr: "≀", wreath: "≀", Wscr: "𝒲", wscr: "𝓌", xcap: "⋂", xcirc: "◯", xcup: "⋃", xdtri: "▽", Xfr: "𝔛", xfr: "𝔵", xhArr: "⟺", xharr: "⟷", Xi: "Ξ", xi: "ξ", xlArr: "⟸", xlarr: "⟵", xmap: "⟼", xnis: "⋻", xodot: "⨀", Xopf: "𝕏", xopf: "𝕩", xoplus: "⨁", xotime: "⨂", xrArr: "⟹", xrarr: "⟶", Xscr: "𝒳", xscr: "𝓍", xsqcup: "⨆", xuplus: "⨄", xutri: "△", xvee: "⋁", xwedge: "⋀", Yacute: "Ý", yacute: "ý", YAcy: "Я", yacy: "я", Ycirc: "Ŷ", ycirc: "ŷ", Ycy: "Ы", ycy: "ы", yen: "¥", Yfr: "𝔜", yfr: "𝔶", YIcy: "Ї", yicy: "ї", Yopf: "𝕐", yopf: "𝕪", Yscr: "𝒴", yscr: "𝓎", YUcy: "Ю", yucy: "ю", Yuml: "Ÿ", yuml: "ÿ", Zacute: "Ź", zacute: "ź", Zcaron: "Ž", zcaron: "ž", Zcy: "З", zcy: "з", Zdot: "Ż", zdot: "ż", zeetrf: "ℨ", ZeroWidthSpace: "​", Zeta: "Ζ", zeta: "ζ", Zfr: "ℨ", zfr: "𝔷", ZHcy: "Ж", zhcy: "ж", zigrarr: "⇝", Zopf: "ℤ", zopf: "𝕫", Zscr: "𝒵", zscr: "𝓏", zwj: "\u200d", zwnj: "\u200c"
11645  });
11646  
11647  
11648  /***/ }),
11649  
11650  /***/ "./node_modules/simple-html-tokenizer/dist/es6/index.js":
11651  /*!**************************************************************!*\
11652    !*** ./node_modules/simple-html-tokenizer/dist/es6/index.js ***!
11653    \**************************************************************/
11654  /*! exports provided: HTML5NamedCharRefs, EntityParser, EventedTokenizer, Tokenizer, tokenize */
11655  /***/ (function(module, __webpack_exports__, __webpack_require__) {
11656  
11657  "use strict";
11658  __webpack_require__.r(__webpack_exports__);
11659  /* harmony import */ var _html5_named_char_refs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./html5-named-char-refs */ "./node_modules/simple-html-tokenizer/dist/es6/html5-named-char-refs.js");
11660  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "HTML5NamedCharRefs", function() { return _html5_named_char_refs__WEBPACK_IMPORTED_MODULE_0__["default"]; });
11661  
11662  /* harmony import */ var _entity_parser__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./entity-parser */ "./node_modules/simple-html-tokenizer/dist/es6/entity-parser.js");
11663  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "EntityParser", function() { return _entity_parser__WEBPACK_IMPORTED_MODULE_1__["default"]; });
11664  
11665  /* harmony import */ var _evented_tokenizer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./evented-tokenizer */ "./node_modules/simple-html-tokenizer/dist/es6/evented-tokenizer.js");
11666  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "EventedTokenizer", function() { return _evented_tokenizer__WEBPACK_IMPORTED_MODULE_2__["default"]; });
11667  
11668  /* harmony import */ var _tokenizer__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tokenizer */ "./node_modules/simple-html-tokenizer/dist/es6/tokenizer.js");
11669  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Tokenizer", function() { return _tokenizer__WEBPACK_IMPORTED_MODULE_3__["default"]; });
11670  
11671  /* harmony import */ var _tokenize__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tokenize */ "./node_modules/simple-html-tokenizer/dist/es6/tokenize.js");
11672  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "tokenize", function() { return _tokenize__WEBPACK_IMPORTED_MODULE_4__["default"]; });
11673  
11674  
11675  
11676  
11677  
11678  
11679  
11680  
11681  /***/ }),
11682  
11683  /***/ "./node_modules/simple-html-tokenizer/dist/es6/tokenize.js":
11684  /*!*****************************************************************!*\
11685    !*** ./node_modules/simple-html-tokenizer/dist/es6/tokenize.js ***!
11686    \*****************************************************************/
11687  /*! exports provided: default */
11688  /***/ (function(module, __webpack_exports__, __webpack_require__) {
11689  
11690  "use strict";
11691  __webpack_require__.r(__webpack_exports__);
11692  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return tokenize; });
11693  /* harmony import */ var _tokenizer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./tokenizer */ "./node_modules/simple-html-tokenizer/dist/es6/tokenizer.js");
11694  /* harmony import */ var _entity_parser__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./entity-parser */ "./node_modules/simple-html-tokenizer/dist/es6/entity-parser.js");
11695  /* harmony import */ var _html5_named_char_refs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./html5-named-char-refs */ "./node_modules/simple-html-tokenizer/dist/es6/html5-named-char-refs.js");
11696  
11697  
11698  
11699  function tokenize(input, options) {
11700      var tokenizer = new _tokenizer__WEBPACK_IMPORTED_MODULE_0__["default"](new _entity_parser__WEBPACK_IMPORTED_MODULE_1__["default"](_html5_named_char_refs__WEBPACK_IMPORTED_MODULE_2__["default"]), options);
11701      return tokenizer.tokenize(input);
11702  }
11703  
11704  
11705  /***/ }),
11706  
11707  /***/ "./node_modules/simple-html-tokenizer/dist/es6/tokenizer.js":
11708  /*!******************************************************************!*\
11709    !*** ./node_modules/simple-html-tokenizer/dist/es6/tokenizer.js ***!
11710    \******************************************************************/
11711  /*! exports provided: default */
11712  /***/ (function(module, __webpack_exports__, __webpack_require__) {
11713  
11714  "use strict";
11715  __webpack_require__.r(__webpack_exports__);
11716  /* harmony import */ var _evented_tokenizer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./evented-tokenizer */ "./node_modules/simple-html-tokenizer/dist/es6/evented-tokenizer.js");
11717  /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils */ "./node_modules/simple-html-tokenizer/dist/es6/utils.js");
11718  
11719  
11720  ;
11721  var Tokenizer = /** @class */ (function () {
11722      function Tokenizer(entityParser, options) {
11723          if (options === void 0) { options = {}; }
11724          this.options = options;
11725          this._token = null;
11726          this.startLine = 1;
11727          this.startColumn = 0;
11728          this.tokens = [];
11729          this.currentAttribute = null;
11730          this.tokenizer = new _evented_tokenizer__WEBPACK_IMPORTED_MODULE_0__["default"](this, entityParser);
11731      }
11732      Object.defineProperty(Tokenizer.prototype, "token", {
11733          get: function () {
11734              return Object(_utils__WEBPACK_IMPORTED_MODULE_1__["unwrap"])(this._token);
11735          },
11736          set: function (value) {
11737              this._token = value;
11738          },
11739          enumerable: true,
11740          configurable: true
11741      });
11742      Tokenizer.prototype.tokenize = function (input) {
11743          this.tokens = [];
11744          this.tokenizer.tokenize(input);
11745          return this.tokens;
11746      };
11747      Tokenizer.prototype.tokenizePart = function (input) {
11748          this.tokens = [];
11749          this.tokenizer.tokenizePart(input);
11750          return this.tokens;
11751      };
11752      Tokenizer.prototype.tokenizeEOF = function () {
11753          this.tokens = [];
11754          this.tokenizer.tokenizeEOF();
11755          return this.tokens[0];
11756      };
11757      Tokenizer.prototype.reset = function () {
11758          this._token = null;
11759          this.startLine = 1;
11760          this.startColumn = 0;
11761      };
11762      Tokenizer.prototype.addLocInfo = function () {
11763          if (this.options.loc) {
11764              this.token.loc = {
11765                  start: {
11766                      line: this.startLine,
11767                      column: this.startColumn
11768                  },
11769                  end: {
11770                      line: this.tokenizer.line,
11771                      column: this.tokenizer.column
11772                  }
11773              };
11774          }
11775          this.startLine = this.tokenizer.line;
11776          this.startColumn = this.tokenizer.column;
11777      };
11778      // Data
11779      Tokenizer.prototype.beginData = function () {
11780          this.token = {
11781              type: 'Chars',
11782              chars: ''
11783          };
11784          this.tokens.push(this.token);
11785      };
11786      Tokenizer.prototype.appendToData = function (char) {
11787          this.token.chars += char;
11788      };
11789      Tokenizer.prototype.finishData = function () {
11790          this.addLocInfo();
11791      };
11792      // Comment
11793      Tokenizer.prototype.beginComment = function () {
11794          this.token = {
11795              type: 'Comment',
11796              chars: ''
11797          };
11798          this.tokens.push(this.token);
11799      };
11800      Tokenizer.prototype.appendToCommentData = function (char) {
11801          this.token.chars += char;
11802      };
11803      Tokenizer.prototype.finishComment = function () {
11804          this.addLocInfo();
11805      };
11806      // Tags - basic
11807      Tokenizer.prototype.beginStartTag = function () {
11808          this.token = {
11809              type: 'StartTag',
11810              tagName: '',
11811              attributes: [],
11812              selfClosing: false
11813          };
11814          this.tokens.push(this.token);
11815      };
11816      Tokenizer.prototype.beginEndTag = function () {
11817          this.token = {
11818              type: 'EndTag',
11819              tagName: ''
11820          };
11821          this.tokens.push(this.token);
11822      };
11823      Tokenizer.prototype.finishTag = function () {
11824          this.addLocInfo();
11825      };
11826      Tokenizer.prototype.markTagAsSelfClosing = function () {
11827          this.token.selfClosing = true;
11828      };
11829      // Tags - name
11830      Tokenizer.prototype.appendToTagName = function (char) {
11831          this.token.tagName += char;
11832      };
11833      // Tags - attributes
11834      Tokenizer.prototype.beginAttribute = function () {
11835          var attributes = Object(_utils__WEBPACK_IMPORTED_MODULE_1__["unwrap"])(this.token.attributes, "current token's attributs");
11836          this.currentAttribute = ["", "", false];
11837          attributes.push(this.currentAttribute);
11838      };
11839      Tokenizer.prototype.appendToAttributeName = function (char) {
11840          var currentAttribute = Object(_utils__WEBPACK_IMPORTED_MODULE_1__["unwrap"])(this.currentAttribute);
11841          currentAttribute[0] += char;
11842      };
11843      Tokenizer.prototype.beginAttributeValue = function (isQuoted) {
11844          var currentAttribute = Object(_utils__WEBPACK_IMPORTED_MODULE_1__["unwrap"])(this.currentAttribute);
11845          currentAttribute[2] = isQuoted;
11846      };
11847      Tokenizer.prototype.appendToAttributeValue = function (char) {
11848          var currentAttribute = Object(_utils__WEBPACK_IMPORTED_MODULE_1__["unwrap"])(this.currentAttribute);
11849          currentAttribute[1] = currentAttribute[1] || "";
11850          currentAttribute[1] += char;
11851      };
11852      Tokenizer.prototype.finishAttributeValue = function () {
11853      };
11854      Tokenizer.prototype.reportSyntaxError = function (message) {
11855          this.token.syntaxError = message;
11856      };
11857      return Tokenizer;
11858  }());
11859  /* harmony default export */ __webpack_exports__["default"] = (Tokenizer);
11860  
11861  
11862  /***/ }),
11863  
11864  /***/ "./node_modules/simple-html-tokenizer/dist/es6/utils.js":
11865  /*!**************************************************************!*\
11866    !*** ./node_modules/simple-html-tokenizer/dist/es6/utils.js ***!
11867    \**************************************************************/
11868  /*! exports provided: isSpace, isAlpha, preprocessInput, unwrap, or */
11869  /***/ (function(module, __webpack_exports__, __webpack_require__) {
11870  
11871  "use strict";
11872  __webpack_require__.r(__webpack_exports__);
11873  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isSpace", function() { return isSpace; });
11874  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isAlpha", function() { return isAlpha; });
11875  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "preprocessInput", function() { return preprocessInput; });
11876  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "unwrap", function() { return unwrap; });
11877  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "or", function() { return or; });
11878  var WSP = /[\t\n\f ]/;
11879  var ALPHA = /[A-Za-z]/;
11880  var CRLF = /\r\n?/g;
11881  function isSpace(char) {
11882      return WSP.test(char);
11883  }
11884  function isAlpha(char) {
11885      return ALPHA.test(char);
11886  }
11887  function preprocessInput(input) {
11888      return input.replace(CRLF, "\n");
11889  }
11890  function unwrap(maybe, msg) {
11891      if (!maybe)
11892          throw new Error((msg || 'value') + " was null");
11893      return maybe;
11894  }
11895  function or(maybe, otherwise) {
11896      return maybe || otherwise;
11897  }
11898  
11899  
11900  /***/ }),
11901  
11902  /***/ "./node_modules/tinycolor2/tinycolor.js":
11903  /*!**********************************************!*\
11904    !*** ./node_modules/tinycolor2/tinycolor.js ***!
11905    \**********************************************/
11906  /*! no static exports found */
11907  /***/ (function(module, exports, __webpack_require__) {
11908  
11909  var __WEBPACK_AMD_DEFINE_RESULT__;// TinyColor v1.4.1
11910  // https://github.com/bgrins/TinyColor
11911  // Brian Grinstead, MIT License
11912  
11913  (function(Math) {
11914  
11915  var trimLeft = /^\s+/,
11916      trimRight = /\s+$/,
11917      tinyCounter = 0,
11918      mathRound = Math.round,
11919      mathMin = Math.min,
11920      mathMax = Math.max,
11921      mathRandom = Math.random;
11922  
11923  function tinycolor (color, opts) {
11924  
11925      color = (color) ? color : '';
11926      opts = opts || { };
11927  
11928      // If input is already a tinycolor, return itself
11929      if (color instanceof tinycolor) {
11930         return color;
11931      }
11932      // If we are called as a function, call using new instead
11933      if (!(this instanceof tinycolor)) {
11934          return new tinycolor(color, opts);
11935      }
11936  
11937      var rgb = inputToRGB(color);
11938      this._originalInput = color,
11939      this._r = rgb.r,
11940      this._g = rgb.g,
11941      this._b = rgb.b,
11942      this._a = rgb.a,
11943      this._roundA = mathRound(100*this._a) / 100,
11944      this._format = opts.format || rgb.format;
11945      this._gradientType = opts.gradientType;
11946  
11947      // Don't let the range of [0,255] come back in [0,1].
11948      // Potentially lose a little bit of precision here, but will fix issues where
11949      // .5 gets interpreted as half of the total, instead of half of 1
11950      // If it was supposed to be 128, this was already taken care of by `inputToRgb`
11951      if (this._r < 1) { this._r = mathRound(this._r); }
11952      if (this._g < 1) { this._g = mathRound(this._g); }
11953      if (this._b < 1) { this._b = mathRound(this._b); }
11954  
11955      this._ok = rgb.ok;
11956      this._tc_id = tinyCounter++;
11957  }
11958  
11959  tinycolor.prototype = {
11960      isDark: function() {
11961          return this.getBrightness() < 128;
11962      },
11963      isLight: function() {
11964          return !this.isDark();
11965      },
11966      isValid: function() {
11967          return this._ok;
11968      },
11969      getOriginalInput: function() {
11970        return this._originalInput;
11971      },
11972      getFormat: function() {
11973          return this._format;
11974      },
11975      getAlpha: function() {
11976          return this._a;
11977      },
11978      getBrightness: function() {
11979          //http://www.w3.org/TR/AERT#color-contrast
11980          var rgb = this.toRgb();
11981          return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1000;
11982      },
11983      getLuminance: function() {
11984          //http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef
11985          var rgb = this.toRgb();
11986          var RsRGB, GsRGB, BsRGB, R, G, B;
11987          RsRGB = rgb.r/255;
11988          GsRGB = rgb.g/255;
11989          BsRGB = rgb.b/255;
11990  
11991          if (RsRGB <= 0.03928) {R = RsRGB / 12.92;} else {R = Math.pow(((RsRGB + 0.055) / 1.055), 2.4);}
11992          if (GsRGB <= 0.03928) {G = GsRGB / 12.92;} else {G = Math.pow(((GsRGB + 0.055) / 1.055), 2.4);}
11993          if (BsRGB <= 0.03928) {B = BsRGB / 12.92;} else {B = Math.pow(((BsRGB + 0.055) / 1.055), 2.4);}
11994          return (0.2126 * R) + (0.7152 * G) + (0.0722 * B);
11995      },
11996      setAlpha: function(value) {
11997          this._a = boundAlpha(value);
11998          this._roundA = mathRound(100*this._a) / 100;
11999          return this;
12000      },
12001      toHsv: function() {
12002          var hsv = rgbToHsv(this._r, this._g, this._b);
12003          return { h: hsv.h * 360, s: hsv.s, v: hsv.v, a: this._a };
12004      },
12005      toHsvString: function() {
12006          var hsv = rgbToHsv(this._r, this._g, this._b);
12007          var h = mathRound(hsv.h * 360), s = mathRound(hsv.s * 100), v = mathRound(hsv.v * 100);
12008          return (this._a == 1) ?
12009            "hsv("  + h + ", " + s + "%, " + v + "%)" :
12010            "hsva(" + h + ", " + s + "%, " + v + "%, "+ this._roundA + ")";
12011      },
12012      toHsl: function() {
12013          var hsl = rgbToHsl(this._r, this._g, this._b);
12014          return { h: hsl.h * 360, s: hsl.s, l: hsl.l, a: this._a };
12015      },
12016      toHslString: function() {
12017          var hsl = rgbToHsl(this._r, this._g, this._b);
12018          var h = mathRound(hsl.h * 360), s = mathRound(hsl.s * 100), l = mathRound(hsl.l * 100);
12019          return (this._a == 1) ?
12020            "hsl("  + h + ", " + s + "%, " + l + "%)" :
12021            "hsla(" + h + ", " + s + "%, " + l + "%, "+ this._roundA + ")";
12022      },
12023      toHex: function(allow3Char) {
12024          return rgbToHex(this._r, this._g, this._b, allow3Char);
12025      },
12026      toHexString: function(allow3Char) {
12027          return '#' + this.toHex(allow3Char);
12028      },
12029      toHex8: function(allow4Char) {
12030          return rgbaToHex(this._r, this._g, this._b, this._a, allow4Char);
12031      },
12032      toHex8String: function(allow4Char) {
12033          return '#' + this.toHex8(allow4Char);
12034      },
12035      toRgb: function() {
12036          return { r: mathRound(this._r), g: mathRound(this._g), b: mathRound(this._b), a: this._a };
12037      },
12038      toRgbString: function() {
12039          return (this._a == 1) ?
12040            "rgb("  + mathRound(this._r) + ", " + mathRound(this._g) + ", " + mathRound(this._b) + ")" :
12041            "rgba(" + mathRound(this._r) + ", " + mathRound(this._g) + ", " + mathRound(this._b) + ", " + this._roundA + ")";
12042      },
12043      toPercentageRgb: function() {
12044          return { r: mathRound(bound01(this._r, 255) * 100) + "%", g: mathRound(bound01(this._g, 255) * 100) + "%", b: mathRound(bound01(this._b, 255) * 100) + "%", a: this._a };
12045      },
12046      toPercentageRgbString: function() {
12047          return (this._a == 1) ?
12048            "rgb("  + mathRound(bound01(this._r, 255) * 100) + "%, " + mathRound(bound01(this._g, 255) * 100) + "%, " + mathRound(bound01(this._b, 255) * 100) + "%)" :
12049            "rgba(" + mathRound(bound01(this._r, 255) * 100) + "%, " + mathRound(bound01(this._g, 255) * 100) + "%, " + mathRound(bound01(this._b, 255) * 100) + "%, " + this._roundA + ")";
12050      },
12051      toName: function() {
12052          if (this._a === 0) {
12053              return "transparent";
12054          }
12055  
12056          if (this._a < 1) {
12057              return false;
12058          }
12059  
12060          return hexNames[rgbToHex(this._r, this._g, this._b, true)] || false;
12061      },
12062      toFilter: function(secondColor) {
12063          var hex8String = '#' + rgbaToArgbHex(this._r, this._g, this._b, this._a);
12064          var secondHex8String = hex8String;
12065          var gradientType = this._gradientType ? "GradientType = 1, " : "";
12066  
12067          if (secondColor) {
12068              var s = tinycolor(secondColor);
12069              secondHex8String = '#' + rgbaToArgbHex(s._r, s._g, s._b, s._a);
12070          }
12071  
12072          return "progid:DXImageTransform.Microsoft.gradient("+gradientType+"startColorstr="+hex8String+",endColorstr="+secondHex8String+")";
12073      },
12074      toString: function(format) {
12075          var formatSet = !!format;
12076          format = format || this._format;
12077  
12078          var formattedString = false;
12079          var hasAlpha = this._a < 1 && this._a >= 0;
12080          var needsAlphaFormat = !formatSet && hasAlpha && (format === "hex" || format === "hex6" || format === "hex3" || format === "hex4" || format === "hex8" || format === "name");
12081  
12082          if (needsAlphaFormat) {
12083              // Special case for "transparent", all other non-alpha formats
12084              // will return rgba when there is transparency.
12085              if (format === "name" && this._a === 0) {
12086                  return this.toName();
12087              }
12088              return this.toRgbString();
12089          }
12090          if (format === "rgb") {
12091              formattedString = this.toRgbString();
12092          }
12093          if (format === "prgb") {
12094              formattedString = this.toPercentageRgbString();
12095          }
12096          if (format === "hex" || format === "hex6") {
12097              formattedString = this.toHexString();
12098          }
12099          if (format === "hex3") {
12100              formattedString = this.toHexString(true);
12101          }
12102          if (format === "hex4") {
12103              formattedString = this.toHex8String(true);
12104          }
12105          if (format === "hex8") {
12106              formattedString = this.toHex8String();
12107          }
12108          if (format === "name") {
12109              formattedString = this.toName();
12110          }
12111          if (format === "hsl") {
12112              formattedString = this.toHslString();
12113          }
12114          if (format === "hsv") {
12115              formattedString = this.toHsvString();
12116          }
12117  
12118          return formattedString || this.toHexString();
12119      },
12120      clone: function() {
12121          return tinycolor(this.toString());
12122      },
12123  
12124      _applyModification: function(fn, args) {
12125          var color = fn.apply(null, [this].concat([].slice.call(args)));
12126          this._r = color._r;
12127          this._g = color._g;
12128          this._b = color._b;
12129          this.setAlpha(color._a);
12130          return this;
12131      },
12132      lighten: function() {
12133          return this._applyModification(lighten, arguments);
12134      },
12135      brighten: function() {
12136          return this._applyModification(brighten, arguments);
12137      },
12138      darken: function() {
12139          return this._applyModification(darken, arguments);
12140      },
12141      desaturate: function() {
12142          return this._applyModification(desaturate, arguments);
12143      },
12144      saturate: function() {
12145          return this._applyModification(saturate, arguments);
12146      },
12147      greyscale: function() {
12148          return this._applyModification(greyscale, arguments);
12149      },
12150      spin: function() {
12151          return this._applyModification(spin, arguments);
12152      },
12153  
12154      _applyCombination: function(fn, args) {
12155          return fn.apply(null, [this].concat([].slice.call(args)));
12156      },
12157      analogous: function() {
12158          return this._applyCombination(analogous, arguments);
12159      },
12160      complement: function() {
12161          return this._applyCombination(complement, arguments);
12162      },
12163      monochromatic: function() {
12164          return this._applyCombination(monochromatic, arguments);
12165      },
12166      splitcomplement: function() {
12167          return this._applyCombination(splitcomplement, arguments);
12168      },
12169      triad: function() {
12170          return this._applyCombination(triad, arguments);
12171      },
12172      tetrad: function() {
12173          return this._applyCombination(tetrad, arguments);
12174      }
12175  };
12176  
12177  // If input is an object, force 1 into "1.0" to handle ratios properly
12178  // String input requires "1.0" as input, so 1 will be treated as 1
12179  tinycolor.fromRatio = function(color, opts) {
12180      if (typeof color == "object") {
12181          var newColor = {};
12182          for (var i in color) {
12183              if (color.hasOwnProperty(i)) {
12184                  if (i === "a") {
12185                      newColor[i] = color[i];
12186                  }
12187                  else {
12188                      newColor[i] = convertToPercentage(color[i]);
12189                  }
12190              }
12191          }
12192          color = newColor;
12193      }
12194  
12195      return tinycolor(color, opts);
12196  };
12197  
12198  // Given a string or object, convert that input to RGB
12199  // Possible string inputs:
12200  //
12201  //     "red"
12202  //     "#f00" or "f00"
12203  //     "#ff0000" or "ff0000"
12204  //     "#ff000000" or "ff000000"
12205  //     "rgb 255 0 0" or "rgb (255, 0, 0)"
12206  //     "rgb 1.0 0 0" or "rgb (1, 0, 0)"
12207  //     "rgba (255, 0, 0, 1)" or "rgba 255, 0, 0, 1"
12208  //     "rgba (1.0, 0, 0, 1)" or "rgba 1.0, 0, 0, 1"
12209  //     "hsl(0, 100%, 50%)" or "hsl 0 100% 50%"
12210  //     "hsla(0, 100%, 50%, 1)" or "hsla 0 100% 50%, 1"
12211  //     "hsv(0, 100%, 100%)" or "hsv 0 100% 100%"
12212  //
12213  function inputToRGB(color) {
12214  
12215      var rgb = { r: 0, g: 0, b: 0 };
12216      var a = 1;
12217      var s = null;
12218      var v = null;
12219      var l = null;
12220      var ok = false;
12221      var format = false;
12222  
12223      if (typeof color == "string") {
12224          color = stringInputToObject(color);
12225      }
12226  
12227      if (typeof color == "object") {
12228          if (isValidCSSUnit(color.r) && isValidCSSUnit(color.g) && isValidCSSUnit(color.b)) {
12229              rgb = rgbToRgb(color.r, color.g, color.b);
12230              ok = true;
12231              format = String(color.r).substr(-1) === "%" ? "prgb" : "rgb";
12232          }
12233          else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.v)) {
12234              s = convertToPercentage(color.s);
12235              v = convertToPercentage(color.v);
12236              rgb = hsvToRgb(color.h, s, v);
12237              ok = true;
12238              format = "hsv";
12239          }
12240          else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.l)) {
12241              s = convertToPercentage(color.s);
12242              l = convertToPercentage(color.l);
12243              rgb = hslToRgb(color.h, s, l);
12244              ok = true;
12245              format = "hsl";
12246          }
12247  
12248          if (color.hasOwnProperty("a")) {
12249              a = color.a;
12250          }
12251      }
12252  
12253      a = boundAlpha(a);
12254  
12255      return {
12256          ok: ok,
12257          format: color.format || format,
12258          r: mathMin(255, mathMax(rgb.r, 0)),
12259          g: mathMin(255, mathMax(rgb.g, 0)),
12260          b: mathMin(255, mathMax(rgb.b, 0)),
12261          a: a
12262      };
12263  }
12264  
12265  
12266  // Conversion Functions
12267  // --------------------
12268  
12269  // `rgbToHsl`, `rgbToHsv`, `hslToRgb`, `hsvToRgb` modified from:
12270  // <http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript>
12271  
12272  // `rgbToRgb`
12273  // Handle bounds / percentage checking to conform to CSS color spec
12274  // <http://www.w3.org/TR/css3-color/>
12275  // *Assumes:* r, g, b in [0, 255] or [0, 1]
12276  // *Returns:* { r, g, b } in [0, 255]
12277  function rgbToRgb(r, g, b){
12278      return {
12279          r: bound01(r, 255) * 255,
12280          g: bound01(g, 255) * 255,
12281          b: bound01(b, 255) * 255
12282      };
12283  }
12284  
12285  // `rgbToHsl`
12286  // Converts an RGB color value to HSL.
12287  // *Assumes:* r, g, and b are contained in [0, 255] or [0, 1]
12288  // *Returns:* { h, s, l } in [0,1]
12289  function rgbToHsl(r, g, b) {
12290  
12291      r = bound01(r, 255);
12292      g = bound01(g, 255);
12293      b = bound01(b, 255);
12294  
12295      var max = mathMax(r, g, b), min = mathMin(r, g, b);
12296      var h, s, l = (max + min) / 2;
12297  
12298      if(max == min) {
12299          h = s = 0; // achromatic
12300      }
12301      else {
12302          var d = max - min;
12303          s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
12304          switch(max) {
12305              case r: h = (g - b) / d + (g < b ? 6 : 0); break;
12306              case g: h = (b - r) / d + 2; break;
12307              case b: h = (r - g) / d + 4; break;
12308          }
12309  
12310          h /= 6;
12311      }
12312  
12313      return { h: h, s: s, l: l };
12314  }
12315  
12316  // `hslToRgb`
12317  // Converts an HSL color value to RGB.
12318  // *Assumes:* h is contained in [0, 1] or [0, 360] and s and l are contained [0, 1] or [0, 100]
12319  // *Returns:* { r, g, b } in the set [0, 255]
12320  function hslToRgb(h, s, l) {
12321      var r, g, b;
12322  
12323      h = bound01(h, 360);
12324      s = bound01(s, 100);
12325      l = bound01(l, 100);
12326  
12327      function hue2rgb(p, q, t) {
12328          if(t < 0) t += 1;
12329          if(t > 1) t -= 1;
12330          if(t < 1/6) return p + (q - p) * 6 * t;
12331          if(t < 1/2) return q;
12332          if(t < 2/3) return p + (q - p) * (2/3 - t) * 6;
12333          return p;
12334      }
12335  
12336      if(s === 0) {
12337          r = g = b = l; // achromatic
12338      }
12339      else {
12340          var q = l < 0.5 ? l * (1 + s) : l + s - l * s;
12341          var p = 2 * l - q;
12342          r = hue2rgb(p, q, h + 1/3);
12343          g = hue2rgb(p, q, h);
12344          b = hue2rgb(p, q, h - 1/3);
12345      }
12346  
12347      return { r: r * 255, g: g * 255, b: b * 255 };
12348  }
12349  
12350  // `rgbToHsv`
12351  // Converts an RGB color value to HSV
12352  // *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1]
12353  // *Returns:* { h, s, v } in [0,1]
12354  function rgbToHsv(r, g, b) {
12355  
12356      r = bound01(r, 255);
12357      g = bound01(g, 255);
12358      b = bound01(b, 255);
12359  
12360      var max = mathMax(r, g, b), min = mathMin(r, g, b);
12361      var h, s, v = max;
12362  
12363      var d = max - min;
12364      s = max === 0 ? 0 : d / max;
12365  
12366      if(max == min) {
12367          h = 0; // achromatic
12368      }
12369      else {
12370          switch(max) {
12371              case r: h = (g - b) / d + (g < b ? 6 : 0); break;
12372              case g: h = (b - r) / d + 2; break;
12373              case b: h = (r - g) / d + 4; break;
12374          }
12375          h /= 6;
12376      }
12377      return { h: h, s: s, v: v };
12378  }
12379  
12380  // `hsvToRgb`
12381  // Converts an HSV color value to RGB.
12382  // *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100]
12383  // *Returns:* { r, g, b } in the set [0, 255]
12384   function hsvToRgb(h, s, v) {
12385  
12386      h = bound01(h, 360) * 6;
12387      s = bound01(s, 100);
12388      v = bound01(v, 100);
12389  
12390      var i = Math.floor(h),
12391          f = h - i,
12392          p = v * (1 - s),
12393          q = v * (1 - f * s),
12394          t = v * (1 - (1 - f) * s),
12395          mod = i % 6,
12396          r = [v, q, p, p, t, v][mod],
12397          g = [t, v, v, q, p, p][mod],
12398          b = [p, p, t, v, v, q][mod];
12399  
12400      return { r: r * 255, g: g * 255, b: b * 255 };
12401  }
12402  
12403  // `rgbToHex`
12404  // Converts an RGB color to hex
12405  // Assumes r, g, and b are contained in the set [0, 255]
12406  // Returns a 3 or 6 character hex
12407  function rgbToHex(r, g, b, allow3Char) {
12408  
12409      var hex = [
12410          pad2(mathRound(r).toString(16)),
12411          pad2(mathRound(g).toString(16)),
12412          pad2(mathRound(b).toString(16))
12413      ];
12414  
12415      // Return a 3 character hex if possible
12416      if (allow3Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1)) {
12417          return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0);
12418      }
12419  
12420      return hex.join("");
12421  }
12422  
12423  // `rgbaToHex`
12424  // Converts an RGBA color plus alpha transparency to hex
12425  // Assumes r, g, b are contained in the set [0, 255] and
12426  // a in [0, 1]. Returns a 4 or 8 character rgba hex
12427  function rgbaToHex(r, g, b, a, allow4Char) {
12428  
12429      var hex = [
12430          pad2(mathRound(r).toString(16)),
12431          pad2(mathRound(g).toString(16)),
12432          pad2(mathRound(b).toString(16)),
12433          pad2(convertDecimalToHex(a))
12434      ];
12435  
12436      // Return a 4 character hex if possible
12437      if (allow4Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1) && hex[3].charAt(0) == hex[3].charAt(1)) {
12438          return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0) + hex[3].charAt(0);
12439      }
12440  
12441      return hex.join("");
12442  }
12443  
12444  // `rgbaToArgbHex`
12445  // Converts an RGBA color to an ARGB Hex8 string
12446  // Rarely used, but required for "toFilter()"
12447  function rgbaToArgbHex(r, g, b, a) {
12448  
12449      var hex = [
12450          pad2(convertDecimalToHex(a)),
12451          pad2(mathRound(r).toString(16)),
12452          pad2(mathRound(g).toString(16)),
12453          pad2(mathRound(b).toString(16))
12454      ];
12455  
12456      return hex.join("");
12457  }
12458  
12459  // `equals`
12460  // Can be called with any tinycolor input
12461  tinycolor.equals = function (color1, color2) {
12462      if (!color1 || !color2) { return false; }
12463      return tinycolor(color1).toRgbString() == tinycolor(color2).toRgbString();
12464  };
12465  
12466  tinycolor.random = function() {
12467      return tinycolor.fromRatio({
12468          r: mathRandom(),
12469          g: mathRandom(),
12470          b: mathRandom()
12471      });
12472  };
12473  
12474  
12475  // Modification Functions
12476  // ----------------------
12477  // Thanks to less.js for some of the basics here
12478  // <https://github.com/cloudhead/less.js/blob/master/lib/less/functions.js>
12479  
12480  function desaturate(color, amount) {
12481      amount = (amount === 0) ? 0 : (amount || 10);
12482      var hsl = tinycolor(color).toHsl();
12483      hsl.s -= amount / 100;
12484      hsl.s = clamp01(hsl.s);
12485      return tinycolor(hsl);
12486  }
12487  
12488  function saturate(color, amount) {
12489      amount = (amount === 0) ? 0 : (amount || 10);
12490      var hsl = tinycolor(color).toHsl();
12491      hsl.s += amount / 100;
12492      hsl.s = clamp01(hsl.s);
12493      return tinycolor(hsl);
12494  }
12495  
12496  function greyscale(color) {
12497      return tinycolor(color).desaturate(100);
12498  }
12499  
12500  function lighten (color, amount) {
12501      amount = (amount === 0) ? 0 : (amount || 10);
12502      var hsl = tinycolor(color).toHsl();
12503      hsl.l += amount / 100;
12504      hsl.l = clamp01(hsl.l);
12505      return tinycolor(hsl);
12506  }
12507  
12508  function brighten(color, amount) {
12509      amount = (amount === 0) ? 0 : (amount || 10);
12510      var rgb = tinycolor(color).toRgb();
12511      rgb.r = mathMax(0, mathMin(255, rgb.r - mathRound(255 * - (amount / 100))));
12512      rgb.g = mathMax(0, mathMin(255, rgb.g - mathRound(255 * - (amount / 100))));
12513      rgb.b = mathMax(0, mathMin(255, rgb.b - mathRound(255 * - (amount / 100))));
12514      return tinycolor(rgb);
12515  }
12516  
12517  function darken (color, amount) {
12518      amount = (amount === 0) ? 0 : (amount || 10);
12519      var hsl = tinycolor(color).toHsl();
12520      hsl.l -= amount / 100;
12521      hsl.l = clamp01(hsl.l);
12522      return tinycolor(hsl);
12523  }
12524  
12525  // Spin takes a positive or negative amount within [-360, 360] indicating the change of hue.
12526  // Values outside of this range will be wrapped into this range.
12527  function spin(color, amount) {
12528      var hsl = tinycolor(color).toHsl();
12529      var hue = (hsl.h + amount) % 360;
12530      hsl.h = hue < 0 ? 360 + hue : hue;
12531      return tinycolor(hsl);
12532  }
12533  
12534  // Combination Functions
12535  // ---------------------
12536  // Thanks to jQuery xColor for some of the ideas behind these
12537  // <https://github.com/infusion/jQuery-xcolor/blob/master/jquery.xcolor.js>
12538  
12539  function complement(color) {
12540      var hsl = tinycolor(color).toHsl();
12541      hsl.h = (hsl.h + 180) % 360;
12542      return tinycolor(hsl);
12543  }
12544  
12545  function triad(color) {
12546      var hsl = tinycolor(color).toHsl();
12547      var h = hsl.h;
12548      return [
12549          tinycolor(color),
12550          tinycolor({ h: (h + 120) % 360, s: hsl.s, l: hsl.l }),
12551          tinycolor({ h: (h + 240) % 360, s: hsl.s, l: hsl.l })
12552      ];
12553  }
12554  
12555  function tetrad(color) {
12556      var hsl = tinycolor(color).toHsl();
12557      var h = hsl.h;
12558      return [
12559          tinycolor(color),
12560          tinycolor({ h: (h + 90) % 360, s: hsl.s, l: hsl.l }),
12561          tinycolor({ h: (h + 180) % 360, s: hsl.s, l: hsl.l }),
12562          tinycolor({ h: (h + 270) % 360, s: hsl.s, l: hsl.l })
12563      ];
12564  }
12565  
12566  function splitcomplement(color) {
12567      var hsl = tinycolor(color).toHsl();
12568      var h = hsl.h;
12569      return [
12570          tinycolor(color),
12571          tinycolor({ h: (h + 72) % 360, s: hsl.s, l: hsl.l}),
12572          tinycolor({ h: (h + 216) % 360, s: hsl.s, l: hsl.l})
12573      ];
12574  }
12575  
12576  function analogous(color, results, slices) {
12577      results = results || 6;
12578      slices = slices || 30;
12579  
12580      var hsl = tinycolor(color).toHsl();
12581      var part = 360 / slices;
12582      var ret = [tinycolor(color)];
12583  
12584      for (hsl.h = ((hsl.h - (part * results >> 1)) + 720) % 360; --results; ) {
12585          hsl.h = (hsl.h + part) % 360;
12586          ret.push(tinycolor(hsl));
12587      }
12588      return ret;
12589  }
12590  
12591  function monochromatic(color, results) {
12592      results = results || 6;
12593      var hsv = tinycolor(color).toHsv();
12594      var h = hsv.h, s = hsv.s, v = hsv.v;
12595      var ret = [];
12596      var modification = 1 / results;
12597  
12598      while (results--) {
12599          ret.push(tinycolor({ h: h, s: s, v: v}));
12600          v = (v + modification) % 1;
12601      }
12602  
12603      return ret;
12604  }
12605  
12606  // Utility Functions
12607  // ---------------------
12608  
12609  tinycolor.mix = function(color1, color2, amount) {
12610      amount = (amount === 0) ? 0 : (amount || 50);
12611  
12612      var rgb1 = tinycolor(color1).toRgb();
12613      var rgb2 = tinycolor(color2).toRgb();
12614  
12615      var p = amount / 100;
12616  
12617      var rgba = {
12618          r: ((rgb2.r - rgb1.r) * p) + rgb1.r,
12619          g: ((rgb2.g - rgb1.g) * p) + rgb1.g,
12620          b: ((rgb2.b - rgb1.b) * p) + rgb1.b,
12621          a: ((rgb2.a - rgb1.a) * p) + rgb1.a
12622      };
12623  
12624      return tinycolor(rgba);
12625  };
12626  
12627  
12628  // Readability Functions
12629  // ---------------------
12630  // <http://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef (WCAG Version 2)
12631  
12632  // `contrast`
12633  // Analyze the 2 colors and returns the color contrast defined by (WCAG Version 2)
12634  tinycolor.readability = function(color1, color2) {
12635      var c1 = tinycolor(color1);
12636      var c2 = tinycolor(color2);
12637      return (Math.max(c1.getLuminance(),c2.getLuminance())+0.05) / (Math.min(c1.getLuminance(),c2.getLuminance())+0.05);
12638  };
12639  
12640  // `isReadable`
12641  // Ensure that foreground and background color combinations meet WCAG2 guidelines.
12642  // The third argument is an optional Object.
12643  //      the 'level' property states 'AA' or 'AAA' - if missing or invalid, it defaults to 'AA';
12644  //      the 'size' property states 'large' or 'small' - if missing or invalid, it defaults to 'small'.
12645  // If the entire object is absent, isReadable defaults to {level:"AA",size:"small"}.
12646  
12647  // *Example*
12648  //    tinycolor.isReadable("#000", "#111") => false
12649  //    tinycolor.isReadable("#000", "#111",{level:"AA",size:"large"}) => false
12650  tinycolor.isReadable = function(color1, color2, wcag2) {
12651      var readability = tinycolor.readability(color1, color2);
12652      var wcag2Parms, out;
12653  
12654      out = false;
12655  
12656      wcag2Parms = validateWCAG2Parms(wcag2);
12657      switch (wcag2Parms.level + wcag2Parms.size) {
12658          case "AAsmall":
12659          case "AAAlarge":
12660              out = readability >= 4.5;
12661              break;
12662          case "AAlarge":
12663              out = readability >= 3;
12664              break;
12665          case "AAAsmall":
12666              out = readability >= 7;
12667              break;
12668      }
12669      return out;
12670  
12671  };
12672  
12673  // `mostReadable`
12674  // Given a base color and a list of possible foreground or background
12675  // colors for that base, returns the most readable color.
12676  // Optionally returns Black or White if the most readable color is unreadable.
12677  // *Example*
12678  //    tinycolor.mostReadable(tinycolor.mostReadable("#123", ["#124", "#125"],{includeFallbackColors:false}).toHexString(); // "#112255"
12679  //    tinycolor.mostReadable(tinycolor.mostReadable("#123", ["#124", "#125"],{includeFallbackColors:true}).toHexString();  // "#ffffff"
12680  //    tinycolor.mostReadable("#a8015a", ["#faf3f3"],{includeFallbackColors:true,level:"AAA",size:"large"}).toHexString(); // "#faf3f3"
12681  //    tinycolor.mostReadable("#a8015a", ["#faf3f3"],{includeFallbackColors:true,level:"AAA",size:"small"}).toHexString(); // "#ffffff"
12682  tinycolor.mostReadable = function(baseColor, colorList, args) {
12683      var bestColor = null;
12684      var bestScore = 0;
12685      var readability;
12686      var includeFallbackColors, level, size ;
12687      args = args || {};
12688      includeFallbackColors = args.includeFallbackColors ;
12689      level = args.level;
12690      size = args.size;
12691  
12692      for (var i= 0; i < colorList.length ; i++) {
12693          readability = tinycolor.readability(baseColor, colorList[i]);
12694          if (readability > bestScore) {
12695              bestScore = readability;
12696              bestColor = tinycolor(colorList[i]);
12697          }
12698      }
12699  
12700      if (tinycolor.isReadable(baseColor, bestColor, {"level":level,"size":size}) || !includeFallbackColors) {
12701          return bestColor;
12702      }
12703      else {
12704          args.includeFallbackColors=false;
12705          return tinycolor.mostReadable(baseColor,["#fff", "#000"],args);
12706      }
12707  };
12708  
12709  
12710  // Big List of Colors
12711  // ------------------
12712  // <http://www.w3.org/TR/css3-color/#svg-color>
12713  var names = tinycolor.names = {
12714      aliceblue: "f0f8ff",
12715      antiquewhite: "faebd7",
12716      aqua: "0ff",
12717      aquamarine: "7fffd4",
12718      azure: "f0ffff",
12719      beige: "f5f5dc",
12720      bisque: "ffe4c4",
12721      black: "000",
12722      blanchedalmond: "ffebcd",
12723      blue: "00f",
12724      blueviolet: "8a2be2",
12725      brown: "a52a2a",
12726      burlywood: "deb887",
12727      burntsienna: "ea7e5d",
12728      cadetblue: "5f9ea0",
12729      chartreuse: "7fff00",
12730      chocolate: "d2691e",
12731      coral: "ff7f50",
12732      cornflowerblue: "6495ed",
12733      cornsilk: "fff8dc",
12734      crimson: "dc143c",
12735      cyan: "0ff",
12736      darkblue: "00008b",
12737      darkcyan: "008b8b",
12738      darkgoldenrod: "b8860b",
12739      darkgray: "a9a9a9",
12740      darkgreen: "006400",
12741      darkgrey: "a9a9a9",
12742      darkkhaki: "bdb76b",
12743      darkmagenta: "8b008b",
12744      darkolivegreen: "556b2f",
12745      darkorange: "ff8c00",
12746      darkorchid: "9932cc",
12747      darkred: "8b0000",
12748      darksalmon: "e9967a",
12749      darkseagreen: "8fbc8f",
12750      darkslateblue: "483d8b",
12751      darkslategray: "2f4f4f",
12752      darkslategrey: "2f4f4f",
12753      darkturquoise: "00ced1",
12754      darkviolet: "9400d3",
12755      deeppink: "ff1493",
12756      deepskyblue: "00bfff",
12757      dimgray: "696969",
12758      dimgrey: "696969",
12759      dodgerblue: "1e90ff",
12760      firebrick: "b22222",
12761      floralwhite: "fffaf0",
12762      forestgreen: "228b22",
12763      fuchsia: "f0f",
12764      gainsboro: "dcdcdc",
12765      ghostwhite: "f8f8ff",
12766      gold: "ffd700",
12767      goldenrod: "daa520",
12768      gray: "808080",
12769      green: "008000",
12770      greenyellow: "adff2f",
12771      grey: "808080",
12772      honeydew: "f0fff0",
12773      hotpink: "ff69b4",
12774      indianred: "cd5c5c",
12775      indigo: "4b0082",
12776      ivory: "fffff0",
12777      khaki: "f0e68c",
12778      lavender: "e6e6fa",
12779      lavenderblush: "fff0f5",
12780      lawngreen: "7cfc00",
12781      lemonchiffon: "fffacd",
12782      lightblue: "add8e6",
12783      lightcoral: "f08080",
12784      lightcyan: "e0ffff",
12785      lightgoldenrodyellow: "fafad2",
12786      lightgray: "d3d3d3",
12787      lightgreen: "90ee90",
12788      lightgrey: "d3d3d3",
12789      lightpink: "ffb6c1",
12790      lightsalmon: "ffa07a",
12791      lightseagreen: "20b2aa",
12792      lightskyblue: "87cefa",
12793      lightslategray: "789",
12794      lightslategrey: "789",
12795      lightsteelblue: "b0c4de",
12796      lightyellow: "ffffe0",
12797      lime: "0f0",
12798      limegreen: "32cd32",
12799      linen: "faf0e6",
12800      magenta: "f0f",
12801      maroon: "800000",
12802      mediumaquamarine: "66cdaa",
12803      mediumblue: "0000cd",
12804      mediumorchid: "ba55d3",
12805      mediumpurple: "9370db",
12806      mediumseagreen: "3cb371",
12807      mediumslateblue: "7b68ee",
12808      mediumspringgreen: "00fa9a",
12809      mediumturquoise: "48d1cc",
12810      mediumvioletred: "c71585",
12811      midnightblue: "191970",
12812      mintcream: "f5fffa",
12813      mistyrose: "ffe4e1",
12814      moccasin: "ffe4b5",
12815      navajowhite: "ffdead",
12816      navy: "000080",
12817      oldlace: "fdf5e6",
12818      olive: "808000",
12819      olivedrab: "6b8e23",
12820      orange: "ffa500",
12821      orangered: "ff4500",
12822      orchid: "da70d6",
12823      palegoldenrod: "eee8aa",
12824      palegreen: "98fb98",
12825      paleturquoise: "afeeee",
12826      palevioletred: "db7093",
12827      papayawhip: "ffefd5",
12828      peachpuff: "ffdab9",
12829      peru: "cd853f",
12830      pink: "ffc0cb",
12831      plum: "dda0dd",
12832      powderblue: "b0e0e6",
12833      purple: "800080",
12834      rebeccapurple: "663399",
12835      red: "f00",
12836      rosybrown: "bc8f8f",
12837      royalblue: "4169e1",
12838      saddlebrown: "8b4513",
12839      salmon: "fa8072",
12840      sandybrown: "f4a460",
12841      seagreen: "2e8b57",
12842      seashell: "fff5ee",
12843      sienna: "a0522d",
12844      silver: "c0c0c0",
12845      skyblue: "87ceeb",
12846      slateblue: "6a5acd",
12847      slategray: "708090",
12848      slategrey: "708090",
12849      snow: "fffafa",
12850      springgreen: "00ff7f",
12851      steelblue: "4682b4",
12852      tan: "d2b48c",
12853      teal: "008080",
12854      thistle: "d8bfd8",
12855      tomato: "ff6347",
12856      turquoise: "40e0d0",
12857      violet: "ee82ee",
12858      wheat: "f5deb3",
12859      white: "fff",
12860      whitesmoke: "f5f5f5",
12861      yellow: "ff0",
12862      yellowgreen: "9acd32"
12863  };
12864  
12865  // Make it easy to access colors via `hexNames[hex]`
12866  var hexNames = tinycolor.hexNames = flip(names);
12867  
12868  
12869  // Utilities
12870  // ---------
12871  
12872  // `{ 'name1': 'val1' }` becomes `{ 'val1': 'name1' }`
12873  function flip(o) {
12874      var flipped = { };
12875      for (var i in o) {
12876          if (o.hasOwnProperty(i)) {
12877              flipped[o[i]] = i;
12878          }
12879      }
12880      return flipped;
12881  }
12882  
12883  // Return a valid alpha value [0,1] with all invalid values being set to 1
12884  function boundAlpha(a) {
12885      a = parseFloat(a);
12886  
12887      if (isNaN(a) || a < 0 || a > 1) {
12888          a = 1;
12889      }
12890  
12891      return a;
12892  }
12893  
12894  // Take input from [0, n] and return it as [0, 1]
12895  function bound01(n, max) {
12896      if (isOnePointZero(n)) { n = "100%"; }
12897  
12898      var processPercent = isPercentage(n);
12899      n = mathMin(max, mathMax(0, parseFloat(n)));
12900  
12901      // Automatically convert percentage into number
12902      if (processPercent) {
12903          n = parseInt(n * max, 10) / 100;
12904      }
12905  
12906      // Handle floating point rounding errors
12907      if ((Math.abs(n - max) < 0.000001)) {
12908          return 1;
12909      }
12910  
12911      // Convert into [0, 1] range if it isn't already
12912      return (n % max) / parseFloat(max);
12913  }
12914  
12915  // Force a number between 0 and 1
12916  function clamp01(val) {
12917      return mathMin(1, mathMax(0, val));
12918  }
12919  
12920  // Parse a base-16 hex value into a base-10 integer
12921  function parseIntFromHex(val) {
12922      return parseInt(val, 16);
12923  }
12924  
12925  // Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1
12926  // <http://stackoverflow.com/questions/7422072/javascript-how-to-detect-number-as-a-decimal-including-1-0>
12927  function isOnePointZero(n) {
12928      return typeof n == "string" && n.indexOf('.') != -1 && parseFloat(n) === 1;
12929  }
12930  
12931  // Check to see if string passed in is a percentage
12932  function isPercentage(n) {
12933      return typeof n === "string" && n.indexOf('%') != -1;
12934  }
12935  
12936  // Force a hex value to have 2 characters
12937  function pad2(c) {
12938      return c.length == 1 ? '0' + c : '' + c;
12939  }
12940  
12941  // Replace a decimal with it's percentage value
12942  function convertToPercentage(n) {
12943      if (n <= 1) {
12944          n = (n * 100) + "%";
12945      }
12946  
12947      return n;
12948  }
12949  
12950  // Converts a decimal to a hex value
12951  function convertDecimalToHex(d) {
12952      return Math.round(parseFloat(d) * 255).toString(16);
12953  }
12954  // Converts a hex value to a decimal
12955  function convertHexToDecimal(h) {
12956      return (parseIntFromHex(h) / 255);
12957  }
12958  
12959  var matchers = (function() {
12960  
12961      // <http://www.w3.org/TR/css3-values/#integers>
12962      var CSS_INTEGER = "[-\\+]?\\d+%?";
12963  
12964      // <http://www.w3.org/TR/css3-values/#number-value>
12965      var CSS_NUMBER = "[-\\+]?\\d*\\.\\d+%?";
12966  
12967      // Allow positive/negative integer/number.  Don't capture the either/or, just the entire outcome.
12968      var CSS_UNIT = "(?:" + CSS_NUMBER + ")|(?:" + CSS_INTEGER + ")";
12969  
12970      // Actual matching.
12971      // Parentheses and commas are optional, but not required.
12972      // Whitespace can take the place of commas or opening paren
12973      var PERMISSIVE_MATCH3 = "[\\s|\\(]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")\\s*\\)?";
12974      var PERMISSIVE_MATCH4 = "[\\s|\\(]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")\\s*\\)?";
12975  
12976      return {
12977          CSS_UNIT: new RegExp(CSS_UNIT),
12978          rgb: new RegExp("rgb" + PERMISSIVE_MATCH3),
12979          rgba: new RegExp("rgba" + PERMISSIVE_MATCH4),
12980          hsl: new RegExp("hsl" + PERMISSIVE_MATCH3),
12981          hsla: new RegExp("hsla" + PERMISSIVE_MATCH4),
12982          hsv: new RegExp("hsv" + PERMISSIVE_MATCH3),
12983          hsva: new RegExp("hsva" + PERMISSIVE_MATCH4),
12984          hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,
12985          hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,
12986          hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,
12987          hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/
12988      };
12989  })();
12990  
12991  // `isValidCSSUnit`
12992  // Take in a single string / number and check to see if it looks like a CSS unit
12993  // (see `matchers` above for definition).
12994  function isValidCSSUnit(color) {
12995      return !!matchers.CSS_UNIT.exec(color);
12996  }
12997  
12998  // `stringInputToObject`
12999  // Permissive string parsing.  Take in a number of formats, and output an object
13000  // based on detected format.  Returns `{ r, g, b }` or `{ h, s, l }` or `{ h, s, v}`
13001  function stringInputToObject(color) {
13002  
13003      color = color.replace(trimLeft,'').replace(trimRight, '').toLowerCase();
13004      var named = false;
13005      if (names[color]) {
13006          color = names[color];
13007          named = true;
13008      }
13009      else if (color == 'transparent') {
13010          return { r: 0, g: 0, b: 0, a: 0, format: "name" };
13011      }
13012  
13013      // Try to match string input using regular expressions.
13014      // Keep most of the number bounding out of this function - don't worry about [0,1] or [0,100] or [0,360]
13015      // Just return an object and let the conversion functions handle that.
13016      // This way the result will be the same whether the tinycolor is initialized with string or object.
13017      var match;
13018      if ((match = matchers.rgb.exec(color))) {
13019          return { r: match[1], g: match[2], b: match[3] };
13020      }
13021      if ((match = matchers.rgba.exec(color))) {
13022          return { r: match[1], g: match[2], b: match[3], a: match[4] };
13023      }
13024      if ((match = matchers.hsl.exec(color))) {
13025          return { h: match[1], s: match[2], l: match[3] };
13026      }
13027      if ((match = matchers.hsla.exec(color))) {
13028          return { h: match[1], s: match[2], l: match[3], a: match[4] };
13029      }
13030      if ((match = matchers.hsv.exec(color))) {
13031          return { h: match[1], s: match[2], v: match[3] };
13032      }
13033      if ((match = matchers.hsva.exec(color))) {
13034          return { h: match[1], s: match[2], v: match[3], a: match[4] };
13035      }
13036      if ((match = matchers.hex8.exec(color))) {
13037          return {
13038              r: parseIntFromHex(match[1]),
13039              g: parseIntFromHex(match[2]),
13040              b: parseIntFromHex(match[3]),
13041              a: convertHexToDecimal(match[4]),
13042              format: named ? "name" : "hex8"
13043          };
13044      }
13045      if ((match = matchers.hex6.exec(color))) {
13046          return {
13047              r: parseIntFromHex(match[1]),
13048              g: parseIntFromHex(match[2]),
13049              b: parseIntFromHex(match[3]),
13050              format: named ? "name" : "hex"
13051          };
13052      }
13053      if ((match = matchers.hex4.exec(color))) {
13054          return {
13055              r: parseIntFromHex(match[1] + '' + match[1]),
13056              g: parseIntFromHex(match[2] + '' + match[2]),
13057              b: parseIntFromHex(match[3] + '' + match[3]),
13058              a: convertHexToDecimal(match[4] + '' + match[4]),
13059              format: named ? "name" : "hex8"
13060          };
13061      }
13062      if ((match = matchers.hex3.exec(color))) {
13063          return {
13064              r: parseIntFromHex(match[1] + '' + match[1]),
13065              g: parseIntFromHex(match[2] + '' + match[2]),
13066              b: parseIntFromHex(match[3] + '' + match[3]),
13067              format: named ? "name" : "hex"
13068          };
13069      }
13070  
13071      return false;
13072  }
13073  
13074  function validateWCAG2Parms(parms) {
13075      // return valid WCAG2 parms for isReadable.
13076      // If input parms are invalid, return {"level":"AA", "size":"small"}
13077      var level, size;
13078      parms = parms || {"level":"AA", "size":"small"};
13079      level = (parms.level || "AA").toUpperCase();
13080      size = (parms.size || "small").toLowerCase();
13081      if (level !== "AA" && level !== "AAA") {
13082          level = "AA";
13083      }
13084      if (size !== "small" && size !== "large") {
13085          size = "small";
13086      }
13087      return {"level":level, "size":size};
13088  }
13089  
13090  // Node: Export function
13091  if ( true && module.exports) {
13092      module.exports = tinycolor;
13093  }
13094  // AMD/requirejs: Define the module
13095  else if (true) {
13096      !(__WEBPACK_AMD_DEFINE_RESULT__ = (function () {return tinycolor;}).call(exports, __webpack_require__, exports, module),
13097                  __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
13098  }
13099  // Browser: Expose to window
13100  else {}
13101  
13102  })(Math);
13103  
13104  
13105  /***/ }),
13106  
13107  /***/ "./node_modules/uuid/lib/bytesToUuid.js":
13108  /*!**********************************************!*\
13109    !*** ./node_modules/uuid/lib/bytesToUuid.js ***!
13110    \**********************************************/
13111  /*! no static exports found */
13112  /***/ (function(module, exports) {
13113  
13114  /**
13115   * Convert array of 16 byte values to UUID string format of the form:
13116   * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
13117   */
13118  var byteToHex = [];
13119  for (var i = 0; i < 256; ++i) {
13120    byteToHex[i] = (i + 0x100).toString(16).substr(1);
13121  }
13122  
13123  function bytesToUuid(buf, offset) {
13124    var i = offset || 0;
13125    var bth = byteToHex;
13126    // join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4
13127    return ([bth[buf[i++]], bth[buf[i++]], 
13128      bth[buf[i++]], bth[buf[i++]], '-',
13129      bth[buf[i++]], bth[buf[i++]], '-',
13130      bth[buf[i++]], bth[buf[i++]], '-',
13131      bth[buf[i++]], bth[buf[i++]], '-',
13132      bth[buf[i++]], bth[buf[i++]],
13133      bth[buf[i++]], bth[buf[i++]],
13134      bth[buf[i++]], bth[buf[i++]]]).join('');
13135  }
13136  
13137  module.exports = bytesToUuid;
13138  
13139  
13140  /***/ }),
13141  
13142  /***/ "./node_modules/uuid/lib/rng-browser.js":
13143  /*!**********************************************!*\
13144    !*** ./node_modules/uuid/lib/rng-browser.js ***!
13145    \**********************************************/
13146  /*! no static exports found */
13147  /***/ (function(module, exports) {
13148  
13149  // Unique ID creation requires a high quality random # generator.  In the
13150  // browser this is a little complicated due to unknown quality of Math.random()
13151  // and inconsistent support for the `crypto` API.  We do the best we can via
13152  // feature-detection
13153  
13154  // getRandomValues needs to be invoked in a context where "this" is a Crypto
13155  // implementation. Also, find the complete implementation of crypto on IE11.
13156  var getRandomValues = (typeof(crypto) != 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto)) ||
13157                        (typeof(msCrypto) != 'undefined' && typeof window.msCrypto.getRandomValues == 'function' && msCrypto.getRandomValues.bind(msCrypto));
13158  
13159  if (getRandomValues) {
13160    // WHATWG crypto RNG - http://wiki.whatwg.org/wiki/Crypto
13161    var rnds8 = new Uint8Array(16); // eslint-disable-line no-undef
13162  
13163    module.exports = function whatwgRNG() {
13164      getRandomValues(rnds8);
13165      return rnds8;
13166    };
13167  } else {
13168    // Math.random()-based (RNG)
13169    //
13170    // If all else fails, use Math.random().  It's fast, but is of unspecified
13171    // quality.
13172    var rnds = new Array(16);
13173  
13174    module.exports = function mathRNG() {
13175      for (var i = 0, r; i < 16; i++) {
13176        if ((i & 0x03) === 0) r = Math.random() * 0x100000000;
13177        rnds[i] = r >>> ((i & 0x03) << 3) & 0xff;
13178      }
13179  
13180      return rnds;
13181    };
13182  }
13183  
13184  
13185  /***/ }),
13186  
13187  /***/ "./node_modules/uuid/v4.js":
13188  /*!*********************************!*\
13189    !*** ./node_modules/uuid/v4.js ***!
13190    \*********************************/
13191  /*! no static exports found */
13192  /***/ (function(module, exports, __webpack_require__) {
13193  
13194  var rng = __webpack_require__(/*! ./lib/rng */ "./node_modules/uuid/lib/rng-browser.js");
13195  var bytesToUuid = __webpack_require__(/*! ./lib/bytesToUuid */ "./node_modules/uuid/lib/bytesToUuid.js");
13196  
13197  function v4(options, buf, offset) {
13198    var i = buf && offset || 0;
13199  
13200    if (typeof(options) == 'string') {
13201      buf = options === 'binary' ? new Array(16) : null;
13202      options = null;
13203    }
13204    options = options || {};
13205  
13206    var rnds = options.random || (options.rng || rng)();
13207  
13208    // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`
13209    rnds[6] = (rnds[6] & 0x0f) | 0x40;
13210    rnds[8] = (rnds[8] & 0x3f) | 0x80;
13211  
13212    // Copy bytes to buffer, if provided
13213    if (buf) {
13214      for (var ii = 0; ii < 16; ++ii) {
13215        buf[i + ii] = rnds[ii];
13216      }
13217    }
13218  
13219    return buf || bytesToUuid(rnds);
13220  }
13221  
13222  module.exports = v4;
13223  
13224  
13225  /***/ }),
13226  
13227  /***/ "@wordpress/autop":
13228  /*!****************************************!*\
13229    !*** external {"this":["wp","autop"]} ***!
13230    \****************************************/
13231  /*! no static exports found */
13232  /***/ (function(module, exports) {
13233  
13234  (function() { module.exports = this["wp"]["autop"]; }());
13235  
13236  /***/ }),
13237  
13238  /***/ "@wordpress/blob":
13239  /*!***************************************!*\
13240    !*** external {"this":["wp","blob"]} ***!
13241    \***************************************/
13242  /*! no static exports found */
13243  /***/ (function(module, exports) {
13244  
13245  (function() { module.exports = this["wp"]["blob"]; }());
13246  
13247  /***/ }),
13248  
13249  /***/ "@wordpress/block-serialization-default-parser":
13250  /*!******************************************************************!*\
13251    !*** external {"this":["wp","blockSerializationDefaultParser"]} ***!
13252    \******************************************************************/
13253  /*! no static exports found */
13254  /***/ (function(module, exports) {
13255  
13256  (function() { module.exports = this["wp"]["blockSerializationDefaultParser"]; }());
13257  
13258  /***/ }),
13259  
13260  /***/ "@wordpress/compose":
13261  /*!******************************************!*\
13262    !*** external {"this":["wp","compose"]} ***!
13263    \******************************************/
13264  /*! no static exports found */
13265  /***/ (function(module, exports) {
13266  
13267  (function() { module.exports = this["wp"]["compose"]; }());
13268  
13269  /***/ }),
13270  
13271  /***/ "@wordpress/data":
13272  /*!***************************************!*\
13273    !*** external {"this":["wp","data"]} ***!
13274    \***************************************/
13275  /*! no static exports found */
13276  /***/ (function(module, exports) {
13277  
13278  (function() { module.exports = this["wp"]["data"]; }());
13279  
13280  /***/ }),
13281  
13282  /***/ "@wordpress/deprecated":
13283  /*!*********************************************!*\
13284    !*** external {"this":["wp","deprecated"]} ***!
13285    \*********************************************/
13286  /*! no static exports found */
13287  /***/ (function(module, exports) {
13288  
13289  (function() { module.exports = this["wp"]["deprecated"]; }());
13290  
13291  /***/ }),
13292  
13293  /***/ "@wordpress/dom":
13294  /*!**************************************!*\
13295    !*** external {"this":["wp","dom"]} ***!
13296    \**************************************/
13297  /*! no static exports found */
13298  /***/ (function(module, exports) {
13299  
13300  (function() { module.exports = this["wp"]["dom"]; }());
13301  
13302  /***/ }),
13303  
13304  /***/ "@wordpress/element":
13305  /*!******************************************!*\
13306    !*** external {"this":["wp","element"]} ***!
13307    \******************************************/
13308  /*! no static exports found */
13309  /***/ (function(module, exports) {
13310  
13311  (function() { module.exports = this["wp"]["element"]; }());
13312  
13313  /***/ }),
13314  
13315  /***/ "@wordpress/hooks":
13316  /*!****************************************!*\
13317    !*** external {"this":["wp","hooks"]} ***!
13318    \****************************************/
13319  /*! no static exports found */
13320  /***/ (function(module, exports) {
13321  
13322  (function() { module.exports = this["wp"]["hooks"]; }());
13323  
13324  /***/ }),
13325  
13326  /***/ "@wordpress/i18n":
13327  /*!***************************************!*\
13328    !*** external {"this":["wp","i18n"]} ***!
13329    \***************************************/
13330  /*! no static exports found */
13331  /***/ (function(module, exports) {
13332  
13333  (function() { module.exports = this["wp"]["i18n"]; }());
13334  
13335  /***/ }),
13336  
13337  /***/ "@wordpress/is-shallow-equal":
13338  /*!*************************************************!*\
13339    !*** external {"this":["wp","isShallowEqual"]} ***!
13340    \*************************************************/
13341  /*! no static exports found */
13342  /***/ (function(module, exports) {
13343  
13344  (function() { module.exports = this["wp"]["isShallowEqual"]; }());
13345  
13346  /***/ }),
13347  
13348  /***/ "@wordpress/shortcode":
13349  /*!********************************************!*\
13350    !*** external {"this":["wp","shortcode"]} ***!
13351    \********************************************/
13352  /*! no static exports found */
13353  /***/ (function(module, exports) {
13354  
13355  (function() { module.exports = this["wp"]["shortcode"]; }());
13356  
13357  /***/ }),
13358  
13359  /***/ "lodash":
13360  /*!*************************!*\
13361    !*** external "lodash" ***!
13362    \*************************/
13363  /*! no static exports found */
13364  /***/ (function(module, exports) {
13365  
13366  (function() { module.exports = this["lodash"]; }());
13367  
13368  /***/ })
13369  
13370  /******/ });
13371  //# sourceMappingURL=blocks.js.map


Generated: Mon Jan 7 01:00:05 2019 Cross-referenced by PHPXref 0.7.1