{
  "version": 3,
  "sources": ["../src/grammar/tag.js", "../node_modules/entities/lib/maps/entities.json", "../node_modules/markdown-it/lib/common/entities.js", "../node_modules/uc.micro/categories/P/regex.js", "../node_modules/mdurl/encode.js", "../node_modules/mdurl/decode.js", "../node_modules/mdurl/format.js", "../node_modules/mdurl/parse.js", "../node_modules/mdurl/index.js", "../node_modules/uc.micro/properties/Any/regex.js", "../node_modules/uc.micro/categories/Cc/regex.js", "../node_modules/uc.micro/categories/Cf/regex.js", "../node_modules/uc.micro/categories/Z/regex.js", "../node_modules/uc.micro/index.js", "../node_modules/markdown-it/lib/common/utils.js", "../node_modules/markdown-it/lib/helpers/parse_link_label.js", "../node_modules/markdown-it/lib/helpers/parse_link_destination.js", "../node_modules/markdown-it/lib/helpers/parse_link_title.js", "../node_modules/markdown-it/lib/helpers/index.js", "../node_modules/markdown-it/lib/renderer.js", "../node_modules/markdown-it/lib/ruler.js", "../node_modules/markdown-it/lib/rules_core/normalize.js", "../node_modules/markdown-it/lib/rules_core/block.js", "../node_modules/markdown-it/lib/rules_core/inline.js", "../node_modules/markdown-it/lib/rules_core/linkify.js", "../node_modules/markdown-it/lib/rules_core/replacements.js", "../node_modules/markdown-it/lib/rules_core/smartquotes.js", "../node_modules/markdown-it/lib/token.js", "../node_modules/markdown-it/lib/rules_core/state_core.js", "../node_modules/markdown-it/lib/parser_core.js", "../node_modules/markdown-it/lib/rules_block/table.js", "../node_modules/markdown-it/lib/rules_block/code.js", "../node_modules/markdown-it/lib/rules_block/fence.js", "../node_modules/markdown-it/lib/rules_block/blockquote.js", "../node_modules/markdown-it/lib/rules_block/hr.js", "../node_modules/markdown-it/lib/rules_block/list.js", "../node_modules/markdown-it/lib/rules_block/reference.js", "../node_modules/markdown-it/lib/common/html_blocks.js", "../node_modules/markdown-it/lib/common/html_re.js", "../node_modules/markdown-it/lib/rules_block/html_block.js", "../node_modules/markdown-it/lib/rules_block/heading.js", "../node_modules/markdown-it/lib/rules_block/lheading.js", "../node_modules/markdown-it/lib/rules_block/paragraph.js", "../node_modules/markdown-it/lib/rules_block/state_block.js", "../node_modules/markdown-it/lib/parser_block.js", "../node_modules/markdown-it/lib/rules_inline/text.js", "../node_modules/markdown-it/lib/rules_inline/newline.js", "../node_modules/markdown-it/lib/rules_inline/escape.js", "../node_modules/markdown-it/lib/rules_inline/backticks.js", "../node_modules/markdown-it/lib/rules_inline/strikethrough.js", "../node_modules/markdown-it/lib/rules_inline/emphasis.js", "../node_modules/markdown-it/lib/rules_inline/link.js", "../node_modules/markdown-it/lib/rules_inline/image.js", "../node_modules/markdown-it/lib/rules_inline/autolink.js", "../node_modules/markdown-it/lib/rules_inline/html_inline.js", "../node_modules/markdown-it/lib/rules_inline/entity.js", "../node_modules/markdown-it/lib/rules_inline/balance_pairs.js", "../node_modules/markdown-it/lib/rules_inline/text_collapse.js", "../node_modules/markdown-it/lib/rules_inline/state_inline.js", "../node_modules/markdown-it/lib/parser_inline.js", "../node_modules/linkify-it/lib/re.js", "../node_modules/linkify-it/index.js", "../node_modules/punycode/punycode.js", "../node_modules/markdown-it/lib/presets/default.js", "../node_modules/markdown-it/lib/presets/zero.js", "../node_modules/markdown-it/lib/presets/commonmark.js", "../node_modules/markdown-it/lib/index.js", "../node_modules/markdown-it/index.js", "../src/ast/base.ts", "../src/tag.ts", "../src/schema-types/class.ts", "../src/schema-types/id.ts", "../src/utils.ts", "../src/ast/variable.ts", "../src/ast/function.ts", "../src/transformer.ts", "../src/ast/node.ts", "../src/ast/index.ts", "../src/formatter.ts", "../src/schema-types/conditional.ts", "../src/tags/conditional.ts", "../src/functions/index.ts", "../src/transforms/table.ts", "../src/transforms/index.ts", "../src/parser.ts", "../src/schema.ts", "../src/renderers/html.ts", "../src/renderers/react/react.ts", "../src/renderers/react/static.ts", "../src/renderers/index.ts", "../src/tags/partial.ts", "../src/tags/table.ts", "../src/tags/slot.ts", "../src/tags/index.ts", "../src/tokenizer/index.ts", "../src/tokenizer/plugins/annotations.ts", "../src/tokenizer/plugins/frontmatter.ts", "../src/tokenizer/plugins/comments.ts", "../src/validator.ts", "../index.ts"],
  "sourcesContent": ["// Generated by PEG.js v0.11.0-master.b7b87ea, https://pegjs.org/\n\n'use strict';\n\nfunction peg$subclass(child, parent) {\n  function C() {\n    this.constructor = child;\n  }\n  C.prototype = parent.prototype;\n  child.prototype = new C();\n}\n\nfunction peg$SyntaxError(message, expected, found, location) {\n  this.message = message;\n  this.expected = expected;\n  this.found = found;\n  this.location = location;\n  this.name = 'SyntaxError';\n\n  // istanbul ignore next\n  if (typeof Error.captureStackTrace === 'function') {\n    Error.captureStackTrace(this, peg$SyntaxError);\n  }\n}\n\npeg$subclass(peg$SyntaxError, Error);\n\npeg$SyntaxError.buildMessage = function (expected, found, location) {\n  var DESCRIBE_EXPECTATION_FNS = {\n    literal: function (expectation) {\n      return '\"' + literalEscape(expectation.text) + '\"';\n    },\n\n    class: function (expectation) {\n      var escapedParts = expectation.parts.map(function (part) {\n        return Array.isArray(part)\n          ? classEscape(part[0]) + '-' + classEscape(part[1])\n          : classEscape(part);\n      });\n\n      return '[' + (expectation.inverted ? '^' : '') + escapedParts + ']';\n    },\n\n    any: function () {\n      return 'any character';\n    },\n\n    end: function () {\n      return 'end of input';\n    },\n\n    other: function (expectation) {\n      return expectation.description;\n    },\n\n    not: function (expectation) {\n      return 'not ' + describeExpectation(expectation.expected);\n    },\n  };\n\n  function hex(ch) {\n    return ch.charCodeAt(0).toString(16).toUpperCase();\n  }\n\n  function literalEscape(s) {\n    return s\n      .replace(/\\\\/g, '\\\\\\\\')\n      .replace(/\"/g, '\\\\\"')\n      .replace(/\\0/g, '\\\\0')\n      .replace(/\\t/g, '\\\\t')\n      .replace(/\\n/g, '\\\\n')\n      .replace(/\\r/g, '\\\\r')\n      .replace(/[\\x00-\\x0F]/g, function (ch) {\n        return '\\\\x0' + hex(ch);\n      })\n      .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function (ch) {\n        return '\\\\x' + hex(ch);\n      });\n  }\n\n  function classEscape(s) {\n    return s\n      .replace(/\\\\/g, '\\\\\\\\')\n      .replace(/\\]/g, '\\\\]')\n      .replace(/\\^/g, '\\\\^')\n      .replace(/-/g, '\\\\-')\n      .replace(/\\0/g, '\\\\0')\n      .replace(/\\t/g, '\\\\t')\n      .replace(/\\n/g, '\\\\n')\n      .replace(/\\r/g, '\\\\r')\n      .replace(/[\\x00-\\x0F]/g, function (ch) {\n        return '\\\\x0' + hex(ch);\n      })\n      .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function (ch) {\n        return '\\\\x' + hex(ch);\n      });\n  }\n\n  function describeExpectation(expectation) {\n    return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n  }\n\n  function describeExpected(expected) {\n    var descriptions = expected.map(describeExpectation);\n    var i, j;\n\n    descriptions.sort();\n\n    if (descriptions.length > 0) {\n      for (i = 1, j = 1; i < descriptions.length; i++) {\n        if (descriptions[i - 1] !== descriptions[i]) {\n          descriptions[j] = descriptions[i];\n          j++;\n        }\n      }\n      descriptions.length = j;\n    }\n\n    switch (descriptions.length) {\n      case 1:\n        return descriptions[0];\n\n      case 2:\n        return descriptions[0] + ' or ' + descriptions[1];\n\n      default:\n        return (\n          descriptions.slice(0, -1).join(', ') +\n          ', or ' +\n          descriptions[descriptions.length - 1]\n        );\n    }\n  }\n\n  function describeFound(found) {\n    return found ? '\"' + literalEscape(found) + '\"' : 'end of input';\n  }\n\n  return (\n    'Expected ' +\n    describeExpected(expected) +\n    ' but ' +\n    describeFound(found) +\n    ' found.'\n  );\n};\n\nfunction peg$parse(input, options) {\n  options = options !== undefined ? options : {};\n\n  var peg$FAILED = {};\n\n  var peg$startRuleFunctions = { Top: peg$parseTop };\n  var peg$startRuleFunction = peg$parseTop;\n\n  var peg$c0 = '/';\n  var peg$c1 = '.';\n  var peg$c2 = '#';\n  var peg$c3 = '=';\n  var peg$c4 = '(';\n  var peg$c5 = ')';\n  var peg$c6 = ',';\n  var peg$c7 = '[';\n  var peg$c8 = ']';\n  var peg$c9 = 'null';\n  var peg$c10 = 'true';\n  var peg$c11 = 'false';\n  var peg$c12 = '{';\n  var peg$c13 = '}';\n  var peg$c14 = ':';\n  var peg$c15 = '-';\n  var peg$c16 = '\"';\n  var peg$c17 = '\\\\';\n  var peg$c18 = 'n';\n  var peg$c19 = 'r';\n  var peg$c20 = 't';\n\n  var peg$r0 = /^[$@]/;\n  var peg$r1 = /^[0-9]/;\n  var peg$r2 = /^[^\\0-\\x1F\"\\\\]/;\n  var peg$r3 = /^[a-zA-Z0-9_\\-]/;\n  var peg$r4 = /^[ \\n\\t]/;\n\n  var peg$e0 = peg$literalExpectation('/', false);\n  var peg$e1 = peg$otherExpectation('tag name');\n  var peg$e2 = peg$otherExpectation('class');\n  var peg$e3 = peg$otherExpectation('id');\n  var peg$e4 = peg$literalExpectation('=', false);\n  var peg$e5 = peg$literalExpectation('(', false);\n  var peg$e6 = peg$literalExpectation(')', false);\n  var peg$e7 = peg$literalExpectation(',', false);\n  var peg$e8 = peg$otherExpectation('variable');\n  var peg$e9 = peg$otherExpectation('null');\n  var peg$e10 = peg$otherExpectation('boolean');\n  var peg$e11 = peg$literalExpectation('[', false);\n  var peg$e12 = peg$literalExpectation(']', false);\n  var peg$e13 = peg$literalExpectation('{', false);\n  var peg$e14 = peg$literalExpectation('}', false);\n  var peg$e15 = peg$literalExpectation(':', false);\n  var peg$e16 = peg$otherExpectation('number');\n  var peg$e17 = peg$otherExpectation('string');\n  var peg$e18 = peg$otherExpectation('identifier');\n  var peg$e19 = peg$otherExpectation('whitespace');\n\n  var peg$f0 = function (variable) {\n    return { type: 'variable', meta: { variable } };\n  };\n  var peg$f1 = function (attributes) {\n    return { type: 'annotation', meta: { attributes } };\n  };\n  var peg$f2 = function (tag, value) {\n    return value;\n  };\n  var peg$f3 = function (tag, primary, attributes, close) {\n    if (primary) {\n      attributes = attributes || [];\n      attributes.unshift({\n        type: 'attribute',\n        name: 'primary',\n        value: primary,\n      });\n    }\n\n    const [type, nesting] = close ? ['tag', 0] : ['tag_open', 1];\n    return { type, nesting, meta: { tag, attributes } };\n  };\n  var peg$f4 = function (tag) {\n    return { type: 'tag_close', nesting: -1, meta: { tag } };\n  };\n  var peg$f5 = function (head, tail) {\n    return !head ? [] : [head, ...tail];\n  };\n  var peg$f6 = function (item) {\n    return item;\n  };\n  var peg$f7 = function (ids) {\n    return ids;\n  };\n  var peg$f8 = function (classes) {\n    return classes;\n  };\n  var peg$f9 = function (attribute) {\n    return attribute;\n  };\n  var peg$f10 = function (name) {\n    return { type: 'class', name, value: true };\n  };\n  var peg$f11 = function (value) {\n    return { type: 'attribute', name: 'id', value };\n  };\n  var peg$f12 = function (name, value) {\n    return { type: 'attribute', name, value };\n  };\n  var peg$f13 = function (name, head, tail) {\n    return head ? [head, ...tail] : [];\n  };\n  var peg$f14 = function (name, params) {\n    let parameters = {};\n    for (let [index, { name, value }] of params.entries())\n      parameters[name || index] = value;\n    return new Function(name, parameters);\n  };\n  var peg$f15 = function (name) {\n    return name;\n  };\n  var peg$f16 = function (name, value) {\n    return { name, value };\n  };\n  var peg$f17 = function (value) {\n    return value;\n  };\n  var peg$f18 = function (prefix, head, tail) {\n    if (prefix === '@') return [head, ...tail];\n    return new Variable([head, ...tail]);\n  };\n  var peg$f19 = function () {\n    return null;\n  };\n  var peg$f20 = function () {\n    return true;\n  };\n  var peg$f21 = function () {\n    return false;\n  };\n  var peg$f22 = function (head, tail) {\n    return [head, ...tail];\n  };\n  var peg$f23 = function (value) {\n    return value || [];\n  };\n  var peg$f24 = function (head, tail) {\n    return Object.assign(head, ...tail);\n  };\n  var peg$f25 = function (value) {\n    return value || {};\n  };\n  var peg$f26 = function (key, value) {\n    return key === '$$mdtype' ? {} : { [key]: value };\n  };\n  var peg$f27 = function () {\n    return parseFloat(text());\n  };\n  var peg$f28 = function (value) {\n    return value.join('');\n  };\n  var peg$f29 = function () {\n    return '\\n';\n  };\n  var peg$f30 = function () {\n    return '\\r';\n  };\n  var peg$f31 = function () {\n    return '\\t';\n  };\n  var peg$f32 = function (sequence) {\n    return sequence;\n  };\n\n  var peg$currPos = 0;\n  var peg$savedPos = 0;\n  var peg$posDetailsCache = [{ line: 1, column: 1 }];\n  var peg$expected = [];\n  var peg$silentFails = 0;\n\n  var peg$result;\n\n  if ('startRule' in options) {\n    if (!(options.startRule in peg$startRuleFunctions)) {\n      throw new Error(\n        'Can\\'t start parsing from rule \"' + options.startRule + '\".'\n      );\n    }\n\n    peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n  }\n\n  function text() {\n    return input.substring(peg$savedPos, peg$currPos);\n  }\n\n  function offset() {\n    return peg$savedPos;\n  }\n\n  function range() {\n    return [peg$savedPos, peg$currPos];\n  }\n\n  function location() {\n    return peg$computeLocation(peg$savedPos, peg$currPos);\n  }\n\n  function expected(description, location) {\n    location =\n      location !== undefined\n        ? location\n        : peg$computeLocation(peg$savedPos, peg$currPos);\n\n    throw peg$buildStructuredError(\n      [peg$otherExpectation(description)],\n      input.substring(peg$savedPos, peg$currPos),\n      location\n    );\n  }\n\n  function error(message, location) {\n    location =\n      location !== undefined\n        ? location\n        : peg$computeLocation(peg$savedPos, peg$currPos);\n\n    throw peg$buildSimpleError(message, location);\n  }\n\n  function peg$literalExpectation(text, ignoreCase) {\n    return { type: 'literal', text: text, ignoreCase: ignoreCase };\n  }\n\n  function peg$classExpectation(parts, inverted, ignoreCase) {\n    return {\n      type: 'class',\n      parts: parts,\n      inverted: inverted,\n      ignoreCase: ignoreCase,\n    };\n  }\n\n  function peg$anyExpectation() {\n    return { type: 'any' };\n  }\n\n  function peg$endExpectation() {\n    return { type: 'end' };\n  }\n\n  function peg$otherExpectation(description) {\n    return { type: 'other', description: description };\n  }\n\n  function peg$computePosDetails(pos) {\n    var details = peg$posDetailsCache[pos];\n    var p;\n\n    if (details) {\n      return details;\n    } else {\n      p = pos - 1;\n      while (!peg$posDetailsCache[p]) {\n        p--;\n      }\n\n      details = peg$posDetailsCache[p];\n      details = {\n        line: details.line,\n        column: details.column,\n      };\n\n      while (p < pos) {\n        if (input.charCodeAt(p) === 10) {\n          details.line++;\n          details.column = 1;\n        } else {\n          details.column++;\n        }\n\n        p++;\n      }\n\n      peg$posDetailsCache[pos] = details;\n\n      return details;\n    }\n  }\n\n  var peg$VALIDFILENAME =\n    typeof options.filename === 'string' && options.filename.length > 0;\n  function peg$computeLocation(startPos, endPos) {\n    var loc = {};\n\n    if (peg$VALIDFILENAME) loc.filename = options.filename;\n\n    var startPosDetails = peg$computePosDetails(startPos);\n    loc.start = {\n      offset: startPos,\n      line: startPosDetails.line,\n      column: startPosDetails.column,\n    };\n\n    var endPosDetails = peg$computePosDetails(endPos);\n    loc.end = {\n      offset: endPos,\n      line: endPosDetails.line,\n      column: endPosDetails.column,\n    };\n\n    return loc;\n  }\n\n  function peg$begin() {\n    peg$expected.push({ pos: peg$currPos, variants: [] });\n  }\n\n  function peg$expect(expected) {\n    var top = peg$expected[peg$expected.length - 1];\n\n    if (peg$currPos < top.pos) {\n      return;\n    }\n\n    if (peg$currPos > top.pos) {\n      top.pos = peg$currPos;\n      top.variants = [];\n    }\n\n    top.variants.push(expected);\n  }\n\n  function peg$end(invert) {\n    var expected = peg$expected.pop();\n    var top = peg$expected[peg$expected.length - 1];\n    var variants = expected.variants;\n\n    if (top.pos !== expected.pos) {\n      return;\n    }\n\n    if (invert) {\n      variants = variants.map(function (e) {\n        return e.type === 'not' ? e.expected : { type: 'not', expected: e };\n      });\n    }\n\n    Array.prototype.push.apply(top.variants, variants);\n  }\n\n  function peg$buildSimpleError(message, location) {\n    return new peg$SyntaxError(message, null, null, location);\n  }\n\n  function peg$buildStructuredError(expected, found, location) {\n    return new peg$SyntaxError(\n      peg$SyntaxError.buildMessage(expected, found, location),\n      expected,\n      found,\n      location\n    );\n  }\n\n  function peg$buildError() {\n    var expected = peg$expected[0];\n    var failPos = expected.pos;\n\n    return peg$buildStructuredError(\n      expected.variants,\n      failPos < input.length ? input.charAt(failPos) : null,\n      failPos < input.length\n        ? peg$computeLocation(failPos, failPos + 1)\n        : peg$computeLocation(failPos, failPos)\n    );\n  }\n\n  function peg$parseTop() {\n    var s0;\n\n    var rule$expects = function (expected) {\n      if (peg$silentFails === 0) peg$expect(expected);\n    };\n\n    s0 = peg$parseTopLevelValue();\n    if (s0 === peg$FAILED) {\n      s0 = peg$parseAnnotation();\n      if (s0 === peg$FAILED) {\n        s0 = peg$parseTagOpen();\n        if (s0 === peg$FAILED) {\n          s0 = peg$parseTagClose();\n        }\n      }\n    }\n\n    return s0;\n  }\n\n  function peg$parseTopLevelValue() {\n    var s0, s1;\n\n    var rule$expects = function (expected) {\n      if (peg$silentFails === 0) peg$expect(expected);\n    };\n\n    s0 = peg$currPos;\n    s1 = peg$parseVariable();\n    if (s1 === peg$FAILED) {\n      s1 = peg$parseFunction();\n    }\n    if (s1 !== peg$FAILED) {\n      peg$savedPos = s0;\n      s1 = peg$f0(s1);\n    }\n    s0 = s1;\n\n    return s0;\n  }\n\n  function peg$parseAnnotation() {\n    var s0, s1, s2, s3;\n\n    var rule$expects = function (expected) {\n      if (peg$silentFails === 0) peg$expect(expected);\n    };\n\n    s0 = peg$currPos;\n    s1 = peg$parseTagAttributes();\n    if (s1 !== peg$FAILED) {\n      s2 = [];\n      s3 = peg$parse_();\n      while (s3 !== peg$FAILED) {\n        s2.push(s3);\n        s3 = peg$parse_();\n      }\n      peg$savedPos = s0;\n      s0 = peg$f1(s1);\n    } else {\n      peg$currPos = s0;\n      s0 = peg$FAILED;\n    }\n\n    return s0;\n  }\n\n  function peg$parseTagOpen() {\n    var s0, s1, s2, s3, s4, s5, s6;\n\n    var rule$expects = function (expected) {\n      if (peg$silentFails === 0) peg$expect(expected);\n    };\n\n    s0 = peg$currPos;\n    s1 = peg$parseTagName();\n    if (s1 !== peg$FAILED) {\n      s2 = [];\n      s3 = peg$parse_();\n      while (s3 !== peg$FAILED) {\n        s2.push(s3);\n        s3 = peg$parse_();\n      }\n      s3 = peg$currPos;\n      s4 = peg$parseValue();\n      if (s4 !== peg$FAILED) {\n        s5 = peg$parse_();\n        if (s5 === peg$FAILED) {\n          s5 = null;\n        }\n        peg$savedPos = s3;\n        s3 = peg$f2(s1, s4);\n      } else {\n        peg$currPos = s3;\n        s3 = peg$FAILED;\n      }\n      if (s3 === peg$FAILED) {\n        s3 = null;\n      }\n      s4 = peg$parseTagAttributes();\n      if (s4 === peg$FAILED) {\n        s4 = null;\n      }\n      s5 = [];\n      s6 = peg$parse_();\n      while (s6 !== peg$FAILED) {\n        s5.push(s6);\n        s6 = peg$parse_();\n      }\n      rule$expects(peg$e0);\n      if (input.charCodeAt(peg$currPos) === 47) {\n        s6 = peg$c0;\n        peg$currPos++;\n      } else {\n        s6 = peg$FAILED;\n      }\n      if (s6 === peg$FAILED) {\n        s6 = null;\n      }\n      peg$savedPos = s0;\n      s0 = peg$f3(s1, s3, s4, s6);\n    } else {\n      peg$currPos = s0;\n      s0 = peg$FAILED;\n    }\n\n    return s0;\n  }\n\n  function peg$parseTagClose() {\n    var s0, s1, s2;\n\n    var rule$expects = function (expected) {\n      if (peg$silentFails === 0) peg$expect(expected);\n    };\n\n    s0 = peg$currPos;\n    rule$expects(peg$e0);\n    if (input.charCodeAt(peg$currPos) === 47) {\n      s1 = peg$c0;\n      peg$currPos++;\n    } else {\n      s1 = peg$FAILED;\n    }\n    if (s1 !== peg$FAILED) {\n      s2 = peg$parseTagName();\n      if (s2 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s0 = peg$f4(s2);\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n    } else {\n      peg$currPos = s0;\n      s0 = peg$FAILED;\n    }\n\n    return s0;\n  }\n\n  function peg$parseTagName() {\n    var s0;\n\n    var rule$expects = function (expected) {\n      if (peg$silentFails === 0) peg$expect(expected);\n    };\n\n    rule$expects(peg$e1);\n    peg$silentFails++;\n    s0 = peg$parseIdentifier();\n    peg$silentFails--;\n\n    return s0;\n  }\n\n  function peg$parseTagAttributes() {\n    var s0, s1, s2, s3;\n\n    var rule$expects = function (expected) {\n      if (peg$silentFails === 0) peg$expect(expected);\n    };\n\n    s0 = peg$currPos;\n    s1 = peg$parseTagAttributesItem();\n    if (s1 !== peg$FAILED) {\n      s2 = [];\n      s3 = peg$parseTagAttributesTail();\n      while (s3 !== peg$FAILED) {\n        s2.push(s3);\n        s3 = peg$parseTagAttributesTail();\n      }\n      peg$savedPos = s0;\n      s0 = peg$f5(s1, s2);\n    } else {\n      peg$currPos = s0;\n      s0 = peg$FAILED;\n    }\n\n    return s0;\n  }\n\n  function peg$parseTagAttributesTail() {\n    var s0, s1, s2;\n\n    var rule$expects = function (expected) {\n      if (peg$silentFails === 0) peg$expect(expected);\n    };\n\n    s0 = peg$currPos;\n    s1 = [];\n    s2 = peg$parse_();\n    if (s2 !== peg$FAILED) {\n      while (s2 !== peg$FAILED) {\n        s1.push(s2);\n        s2 = peg$parse_();\n      }\n    } else {\n      s1 = peg$FAILED;\n    }\n    if (s1 !== peg$FAILED) {\n      s2 = peg$parseTagAttributesItem();\n      if (s2 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s0 = peg$f6(s2);\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n    } else {\n      peg$currPos = s0;\n      s0 = peg$FAILED;\n    }\n\n    return s0;\n  }\n\n  function peg$parseTagAttributesItem() {\n    var s0, s1;\n\n    var rule$expects = function (expected) {\n      if (peg$silentFails === 0) peg$expect(expected);\n    };\n\n    s0 = peg$currPos;\n    s1 = peg$parseTagShortcutId();\n    if (s1 !== peg$FAILED) {\n      peg$savedPos = s0;\n      s1 = peg$f7(s1);\n    }\n    s0 = s1;\n    if (s0 === peg$FAILED) {\n      s0 = peg$currPos;\n      s1 = peg$parseTagShortcutClass();\n      if (s1 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s1 = peg$f8(s1);\n      }\n      s0 = s1;\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        s1 = peg$parseTagAttribute();\n        if (s1 !== peg$FAILED) {\n          peg$savedPos = s0;\n          s1 = peg$f9(s1);\n        }\n        s0 = s1;\n      }\n    }\n\n    return s0;\n  }\n\n  function peg$parseTagShortcutClass() {\n    var s0, s1, s2;\n\n    var rule$expects = function (expected) {\n      if (peg$silentFails === 0) peg$expect(expected);\n    };\n\n    rule$expects(peg$e2);\n    peg$silentFails++;\n    s0 = peg$currPos;\n    if (input.charCodeAt(peg$currPos) === 46) {\n      s1 = peg$c1;\n      peg$currPos++;\n    } else {\n      s1 = peg$FAILED;\n    }\n    if (s1 !== peg$FAILED) {\n      s2 = peg$parseIdentifier();\n      if (s2 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s0 = peg$f10(s2);\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n    } else {\n      peg$currPos = s0;\n      s0 = peg$FAILED;\n    }\n    peg$silentFails--;\n\n    return s0;\n  }\n\n  function peg$parseTagShortcutId() {\n    var s0, s1, s2;\n\n    var rule$expects = function (expected) {\n      if (peg$silentFails === 0) peg$expect(expected);\n    };\n\n    rule$expects(peg$e3);\n    peg$silentFails++;\n    s0 = peg$currPos;\n    if (input.charCodeAt(peg$currPos) === 35) {\n      s1 = peg$c2;\n      peg$currPos++;\n    } else {\n      s1 = peg$FAILED;\n    }\n    if (s1 !== peg$FAILED) {\n      s2 = peg$parseIdentifier();\n      if (s2 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s0 = peg$f11(s2);\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n    } else {\n      peg$currPos = s0;\n      s0 = peg$FAILED;\n    }\n    peg$silentFails--;\n\n    return s0;\n  }\n\n  function peg$parseTagAttribute() {\n    var s0, s1, s2, s3;\n\n    var rule$expects = function (expected) {\n      if (peg$silentFails === 0) peg$expect(expected);\n    };\n\n    s0 = peg$currPos;\n    s1 = peg$parseIdentifier();\n    if (s1 !== peg$FAILED) {\n      rule$expects(peg$e4);\n      if (input.charCodeAt(peg$currPos) === 61) {\n        s2 = peg$c3;\n        peg$currPos++;\n      } else {\n        s2 = peg$FAILED;\n      }\n      if (s2 !== peg$FAILED) {\n        s3 = peg$parseValue();\n        if (s3 !== peg$FAILED) {\n          peg$savedPos = s0;\n          s0 = peg$f12(s1, s3);\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n    } else {\n      peg$currPos = s0;\n      s0 = peg$FAILED;\n    }\n\n    return s0;\n  }\n\n  function peg$parseFunction() {\n    var s0, s1, s2, s3, s4, s5, s6, s7;\n\n    var rule$expects = function (expected) {\n      if (peg$silentFails === 0) peg$expect(expected);\n    };\n\n    s0 = peg$currPos;\n    s1 = peg$parseIdentifier();\n    if (s1 !== peg$FAILED) {\n      rule$expects(peg$e5);\n      if (input.charCodeAt(peg$currPos) === 40) {\n        s2 = peg$c4;\n        peg$currPos++;\n      } else {\n        s2 = peg$FAILED;\n      }\n      if (s2 !== peg$FAILED) {\n        s3 = [];\n        s4 = peg$parse_();\n        while (s4 !== peg$FAILED) {\n          s3.push(s4);\n          s4 = peg$parse_();\n        }\n        s4 = peg$currPos;\n        s5 = peg$parseFunctionParameter();\n        if (s5 === peg$FAILED) {\n          s5 = null;\n        }\n        s6 = [];\n        s7 = peg$parseFunctionParameterTail();\n        while (s7 !== peg$FAILED) {\n          s6.push(s7);\n          s7 = peg$parseFunctionParameterTail();\n        }\n        peg$savedPos = s4;\n        s4 = peg$f13(s1, s5, s6);\n        rule$expects(peg$e6);\n        if (input.charCodeAt(peg$currPos) === 41) {\n          s5 = peg$c5;\n          peg$currPos++;\n        } else {\n          s5 = peg$FAILED;\n        }\n        if (s5 !== peg$FAILED) {\n          peg$savedPos = s0;\n          s0 = peg$f14(s1, s4);\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n    } else {\n      peg$currPos = s0;\n      s0 = peg$FAILED;\n    }\n\n    return s0;\n  }\n\n  function peg$parseFunctionParameter() {\n    var s0, s1, s2, s3;\n\n    var rule$expects = function (expected) {\n      if (peg$silentFails === 0) peg$expect(expected);\n    };\n\n    s0 = peg$currPos;\n    s1 = peg$currPos;\n    s2 = peg$parseIdentifier();\n    if (s2 !== peg$FAILED) {\n      rule$expects(peg$e4);\n      if (input.charCodeAt(peg$currPos) === 61) {\n        s3 = peg$c3;\n        peg$currPos++;\n      } else {\n        s3 = peg$FAILED;\n      }\n      if (s3 !== peg$FAILED) {\n        peg$savedPos = s1;\n        s1 = peg$f15(s2);\n      } else {\n        peg$currPos = s1;\n        s1 = peg$FAILED;\n      }\n    } else {\n      peg$currPos = s1;\n      s1 = peg$FAILED;\n    }\n    if (s1 === peg$FAILED) {\n      s1 = null;\n    }\n    s2 = peg$parseValue();\n    if (s2 !== peg$FAILED) {\n      peg$savedPos = s0;\n      s0 = peg$f16(s1, s2);\n    } else {\n      peg$currPos = s0;\n      s0 = peg$FAILED;\n    }\n\n    return s0;\n  }\n\n  function peg$parseFunctionParameterTail() {\n    var s0, s1, s2, s3, s4;\n\n    var rule$expects = function (expected) {\n      if (peg$silentFails === 0) peg$expect(expected);\n    };\n\n    s0 = peg$currPos;\n    s1 = [];\n    s2 = peg$parse_();\n    while (s2 !== peg$FAILED) {\n      s1.push(s2);\n      s2 = peg$parse_();\n    }\n    rule$expects(peg$e7);\n    if (input.charCodeAt(peg$currPos) === 44) {\n      s2 = peg$c6;\n      peg$currPos++;\n    } else {\n      s2 = peg$FAILED;\n    }\n    if (s2 !== peg$FAILED) {\n      s3 = [];\n      s4 = peg$parse_();\n      while (s4 !== peg$FAILED) {\n        s3.push(s4);\n        s4 = peg$parse_();\n      }\n      s4 = peg$parseFunctionParameter();\n      if (s4 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s0 = peg$f17(s4);\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n    } else {\n      peg$currPos = s0;\n      s0 = peg$FAILED;\n    }\n\n    return s0;\n  }\n\n  function peg$parseTrailingComma() {\n    var s0, s1, s2;\n\n    var rule$expects = function (expected) {\n      if (peg$silentFails === 0) peg$expect(expected);\n    };\n\n    s0 = peg$currPos;\n    s1 = [];\n    s2 = peg$parse_();\n    while (s2 !== peg$FAILED) {\n      s1.push(s2);\n      s2 = peg$parse_();\n    }\n    rule$expects(peg$e7);\n    if (input.charCodeAt(peg$currPos) === 44) {\n      s2 = peg$c6;\n      peg$currPos++;\n    } else {\n      s2 = peg$FAILED;\n    }\n    if (s2 !== peg$FAILED) {\n      s1 = [s1, s2];\n      s0 = s1;\n    } else {\n      peg$currPos = s0;\n      s0 = peg$FAILED;\n    }\n    if (s0 === peg$FAILED) {\n      s0 = null;\n    }\n\n    return s0;\n  }\n\n  function peg$parseVariable() {\n    var s0, s1, s2, s3, s4;\n\n    var rule$expects = function (expected) {\n      if (peg$silentFails === 0) peg$expect(expected);\n    };\n\n    rule$expects(peg$e8);\n    peg$silentFails++;\n    s0 = peg$currPos;\n    if (peg$r0.test(input.charAt(peg$currPos))) {\n      s1 = input.charAt(peg$currPos);\n      peg$currPos++;\n    } else {\n      s1 = peg$FAILED;\n    }\n    if (s1 !== peg$FAILED) {\n      s2 = peg$parseIdentifier();\n      if (s2 !== peg$FAILED) {\n        s3 = [];\n        s4 = peg$parseVariableTail();\n        while (s4 !== peg$FAILED) {\n          s3.push(s4);\n          s4 = peg$parseVariableTail();\n        }\n        peg$savedPos = s0;\n        s0 = peg$f18(s1, s2, s3);\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n    } else {\n      peg$currPos = s0;\n      s0 = peg$FAILED;\n    }\n    peg$silentFails--;\n\n    return s0;\n  }\n\n  function peg$parseVariableTail() {\n    var s0, s1, s2, s3;\n\n    var rule$expects = function (expected) {\n      if (peg$silentFails === 0) peg$expect(expected);\n    };\n\n    s0 = peg$currPos;\n    if (input.charCodeAt(peg$currPos) === 46) {\n      s1 = peg$c1;\n      peg$currPos++;\n    } else {\n      s1 = peg$FAILED;\n    }\n    if (s1 !== peg$FAILED) {\n      s2 = peg$parseIdentifier();\n      if (s2 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s0 = peg$f15(s2);\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n    } else {\n      peg$currPos = s0;\n      s0 = peg$FAILED;\n    }\n    if (s0 === peg$FAILED) {\n      s0 = peg$currPos;\n      if (input.charCodeAt(peg$currPos) === 91) {\n        s1 = peg$c7;\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parseValueNumber();\n        if (s2 === peg$FAILED) {\n          s2 = peg$parseValueString();\n        }\n        if (s2 !== peg$FAILED) {\n          if (input.charCodeAt(peg$currPos) === 93) {\n            s3 = peg$c8;\n            peg$currPos++;\n          } else {\n            s3 = peg$FAILED;\n          }\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s0 = peg$f17(s2);\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n    }\n\n    return s0;\n  }\n\n  function peg$parseValue() {\n    var s0;\n\n    var rule$expects = function (expected) {\n      if (peg$silentFails === 0) peg$expect(expected);\n    };\n\n    s0 = peg$parseValueNull();\n    if (s0 === peg$FAILED) {\n      s0 = peg$parseValueBoolean();\n      if (s0 === peg$FAILED) {\n        s0 = peg$parseValueString();\n        if (s0 === peg$FAILED) {\n          s0 = peg$parseValueNumber();\n          if (s0 === peg$FAILED) {\n            s0 = peg$parseValueArray();\n            if (s0 === peg$FAILED) {\n              s0 = peg$parseValueHash();\n              if (s0 === peg$FAILED) {\n                s0 = peg$parseFunction();\n                if (s0 === peg$FAILED) {\n                  s0 = peg$parseVariable();\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n\n    return s0;\n  }\n\n  function peg$parseValueNull() {\n    var s0, s1;\n\n    var rule$expects = function (expected) {\n      if (peg$silentFails === 0) peg$expect(expected);\n    };\n\n    rule$expects(peg$e9);\n    peg$silentFails++;\n    s0 = peg$currPos;\n    if (input.substr(peg$currPos, 4) === peg$c9) {\n      s1 = peg$c9;\n      peg$currPos += 4;\n    } else {\n      s1 = peg$FAILED;\n    }\n    if (s1 !== peg$FAILED) {\n      peg$savedPos = s0;\n      s1 = peg$f19();\n    }\n    s0 = s1;\n    peg$silentFails--;\n\n    return s0;\n  }\n\n  function peg$parseValueBoolean() {\n    var s0, s1;\n\n    var rule$expects = function (expected) {\n      if (peg$silentFails === 0) peg$expect(expected);\n    };\n\n    rule$expects(peg$e10);\n    peg$silentFails++;\n    s0 = peg$currPos;\n    if (input.substr(peg$currPos, 4) === peg$c10) {\n      s1 = peg$c10;\n      peg$currPos += 4;\n    } else {\n      s1 = peg$FAILED;\n    }\n    if (s1 !== peg$FAILED) {\n      peg$savedPos = s0;\n      s1 = peg$f20();\n    }\n    s0 = s1;\n    if (s0 === peg$FAILED) {\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 5) === peg$c11) {\n        s1 = peg$c11;\n        peg$currPos += 5;\n      } else {\n        s1 = peg$FAILED;\n      }\n      if (s1 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s1 = peg$f21();\n      }\n      s0 = s1;\n    }\n    peg$silentFails--;\n\n    return s0;\n  }\n\n  function peg$parseValueArray() {\n    var s0, s1, s2, s3, s4, s5, s6;\n\n    var rule$expects = function (expected) {\n      if (peg$silentFails === 0) peg$expect(expected);\n    };\n\n    s0 = peg$currPos;\n    rule$expects(peg$e11);\n    if (input.charCodeAt(peg$currPos) === 91) {\n      s1 = peg$c7;\n      peg$currPos++;\n    } else {\n      s1 = peg$FAILED;\n    }\n    if (s1 !== peg$FAILED) {\n      s2 = [];\n      s3 = peg$parse_();\n      while (s3 !== peg$FAILED) {\n        s2.push(s3);\n        s3 = peg$parse_();\n      }\n      s3 = peg$currPos;\n      s4 = peg$parseValue();\n      if (s4 !== peg$FAILED) {\n        s5 = [];\n        s6 = peg$parseValueArrayTail();\n        while (s6 !== peg$FAILED) {\n          s5.push(s6);\n          s6 = peg$parseValueArrayTail();\n        }\n        s6 = peg$parseTrailingComma();\n        peg$savedPos = s3;\n        s3 = peg$f22(s4, s5);\n      } else {\n        peg$currPos = s3;\n        s3 = peg$FAILED;\n      }\n      if (s3 === peg$FAILED) {\n        s3 = null;\n      }\n      s4 = [];\n      s5 = peg$parse_();\n      while (s5 !== peg$FAILED) {\n        s4.push(s5);\n        s5 = peg$parse_();\n      }\n      rule$expects(peg$e12);\n      if (input.charCodeAt(peg$currPos) === 93) {\n        s5 = peg$c8;\n        peg$currPos++;\n      } else {\n        s5 = peg$FAILED;\n      }\n      if (s5 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s0 = peg$f23(s3);\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n    } else {\n      peg$currPos = s0;\n      s0 = peg$FAILED;\n    }\n\n    return s0;\n  }\n\n  function peg$parseValueArrayTail() {\n    var s0, s1, s2, s3, s4;\n\n    var rule$expects = function (expected) {\n      if (peg$silentFails === 0) peg$expect(expected);\n    };\n\n    s0 = peg$currPos;\n    s1 = [];\n    s2 = peg$parse_();\n    while (s2 !== peg$FAILED) {\n      s1.push(s2);\n      s2 = peg$parse_();\n    }\n    rule$expects(peg$e7);\n    if (input.charCodeAt(peg$currPos) === 44) {\n      s2 = peg$c6;\n      peg$currPos++;\n    } else {\n      s2 = peg$FAILED;\n    }\n    if (s2 !== peg$FAILED) {\n      s3 = [];\n      s4 = peg$parse_();\n      while (s4 !== peg$FAILED) {\n        s3.push(s4);\n        s4 = peg$parse_();\n      }\n      s4 = peg$parseValue();\n      if (s4 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s0 = peg$f17(s4);\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n    } else {\n      peg$currPos = s0;\n      s0 = peg$FAILED;\n    }\n\n    return s0;\n  }\n\n  function peg$parseValueHash() {\n    var s0, s1, s2, s3, s4, s5, s6;\n\n    var rule$expects = function (expected) {\n      if (peg$silentFails === 0) peg$expect(expected);\n    };\n\n    s0 = peg$currPos;\n    rule$expects(peg$e13);\n    if (input.charCodeAt(peg$currPos) === 123) {\n      s1 = peg$c12;\n      peg$currPos++;\n    } else {\n      s1 = peg$FAILED;\n    }\n    if (s1 !== peg$FAILED) {\n      s2 = [];\n      s3 = peg$parse_();\n      while (s3 !== peg$FAILED) {\n        s2.push(s3);\n        s3 = peg$parse_();\n      }\n      s3 = peg$currPos;\n      s4 = peg$parseValueHashItem();\n      if (s4 !== peg$FAILED) {\n        s5 = [];\n        s6 = peg$parseValueHashTail();\n        while (s6 !== peg$FAILED) {\n          s5.push(s6);\n          s6 = peg$parseValueHashTail();\n        }\n        s6 = peg$parseTrailingComma();\n        peg$savedPos = s3;\n        s3 = peg$f24(s4, s5);\n      } else {\n        peg$currPos = s3;\n        s3 = peg$FAILED;\n      }\n      if (s3 === peg$FAILED) {\n        s3 = null;\n      }\n      s4 = [];\n      s5 = peg$parse_();\n      while (s5 !== peg$FAILED) {\n        s4.push(s5);\n        s5 = peg$parse_();\n      }\n      rule$expects(peg$e14);\n      if (input.charCodeAt(peg$currPos) === 125) {\n        s5 = peg$c13;\n        peg$currPos++;\n      } else {\n        s5 = peg$FAILED;\n      }\n      if (s5 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s0 = peg$f25(s3);\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n    } else {\n      peg$currPos = s0;\n      s0 = peg$FAILED;\n    }\n\n    return s0;\n  }\n\n  function peg$parseValueHashTail() {\n    var s0, s1, s2, s3, s4;\n\n    var rule$expects = function (expected) {\n      if (peg$silentFails === 0) peg$expect(expected);\n    };\n\n    s0 = peg$currPos;\n    s1 = [];\n    s2 = peg$parse_();\n    while (s2 !== peg$FAILED) {\n      s1.push(s2);\n      s2 = peg$parse_();\n    }\n    rule$expects(peg$e7);\n    if (input.charCodeAt(peg$currPos) === 44) {\n      s2 = peg$c6;\n      peg$currPos++;\n    } else {\n      s2 = peg$FAILED;\n    }\n    if (s2 !== peg$FAILED) {\n      s3 = [];\n      s4 = peg$parse_();\n      while (s4 !== peg$FAILED) {\n        s3.push(s4);\n        s4 = peg$parse_();\n      }\n      s4 = peg$parseValueHashItem();\n      if (s4 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s0 = peg$f6(s4);\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n    } else {\n      peg$currPos = s0;\n      s0 = peg$FAILED;\n    }\n\n    return s0;\n  }\n\n  function peg$parseValueHashItem() {\n    var s0, s1, s2, s3, s4;\n\n    var rule$expects = function (expected) {\n      if (peg$silentFails === 0) peg$expect(expected);\n    };\n\n    s0 = peg$currPos;\n    s1 = peg$parseIdentifier();\n    if (s1 === peg$FAILED) {\n      s1 = peg$parseValueString();\n    }\n    if (s1 !== peg$FAILED) {\n      rule$expects(peg$e15);\n      if (input.charCodeAt(peg$currPos) === 58) {\n        s2 = peg$c14;\n        peg$currPos++;\n      } else {\n        s2 = peg$FAILED;\n      }\n      if (s2 !== peg$FAILED) {\n        s3 = [];\n        s4 = peg$parse_();\n        while (s4 !== peg$FAILED) {\n          s3.push(s4);\n          s4 = peg$parse_();\n        }\n        s4 = peg$parseValue();\n        if (s4 !== peg$FAILED) {\n          peg$savedPos = s0;\n          s0 = peg$f26(s1, s4);\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n    } else {\n      peg$currPos = s0;\n      s0 = peg$FAILED;\n    }\n\n    return s0;\n  }\n\n  function peg$parseValueNumber() {\n    var s0, s1, s2, s3, s4, s5, s6;\n\n    var rule$expects = function (expected) {\n      if (peg$silentFails === 0) peg$expect(expected);\n    };\n\n    rule$expects(peg$e16);\n    peg$silentFails++;\n    s0 = peg$currPos;\n    if (input.charCodeAt(peg$currPos) === 45) {\n      s1 = peg$c15;\n      peg$currPos++;\n    } else {\n      s1 = peg$FAILED;\n    }\n    if (s1 === peg$FAILED) {\n      s1 = null;\n    }\n    s2 = [];\n    if (peg$r1.test(input.charAt(peg$currPos))) {\n      s3 = input.charAt(peg$currPos);\n      peg$currPos++;\n    } else {\n      s3 = peg$FAILED;\n    }\n    if (s3 !== peg$FAILED) {\n      while (s3 !== peg$FAILED) {\n        s2.push(s3);\n        if (peg$r1.test(input.charAt(peg$currPos))) {\n          s3 = input.charAt(peg$currPos);\n          peg$currPos++;\n        } else {\n          s3 = peg$FAILED;\n        }\n      }\n    } else {\n      s2 = peg$FAILED;\n    }\n    if (s2 !== peg$FAILED) {\n      s3 = peg$currPos;\n      if (input.charCodeAt(peg$currPos) === 46) {\n        s4 = peg$c1;\n        peg$currPos++;\n      } else {\n        s4 = peg$FAILED;\n      }\n      if (s4 !== peg$FAILED) {\n        s5 = [];\n        if (peg$r1.test(input.charAt(peg$currPos))) {\n          s6 = input.charAt(peg$currPos);\n          peg$currPos++;\n        } else {\n          s6 = peg$FAILED;\n        }\n        if (s6 !== peg$FAILED) {\n          while (s6 !== peg$FAILED) {\n            s5.push(s6);\n            if (peg$r1.test(input.charAt(peg$currPos))) {\n              s6 = input.charAt(peg$currPos);\n              peg$currPos++;\n            } else {\n              s6 = peg$FAILED;\n            }\n          }\n        } else {\n          s5 = peg$FAILED;\n        }\n        if (s5 !== peg$FAILED) {\n          s4 = [s4, s5];\n          s3 = s4;\n        } else {\n          peg$currPos = s3;\n          s3 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s3;\n        s3 = peg$FAILED;\n      }\n      if (s3 === peg$FAILED) {\n        s3 = null;\n      }\n      peg$savedPos = s0;\n      s0 = peg$f27();\n    } else {\n      peg$currPos = s0;\n      s0 = peg$FAILED;\n    }\n    peg$silentFails--;\n\n    return s0;\n  }\n\n  function peg$parseValueString() {\n    var s0, s1, s2, s3;\n\n    var rule$expects = function (expected) {\n      if (peg$silentFails === 0) peg$expect(expected);\n    };\n\n    rule$expects(peg$e17);\n    peg$silentFails++;\n    s0 = peg$currPos;\n    if (input.charCodeAt(peg$currPos) === 34) {\n      s1 = peg$c16;\n      peg$currPos++;\n    } else {\n      s1 = peg$FAILED;\n    }\n    if (s1 !== peg$FAILED) {\n      s2 = [];\n      s3 = peg$parseValueStringChars();\n      while (s3 !== peg$FAILED) {\n        s2.push(s3);\n        s3 = peg$parseValueStringChars();\n      }\n      if (input.charCodeAt(peg$currPos) === 34) {\n        s3 = peg$c16;\n        peg$currPos++;\n      } else {\n        s3 = peg$FAILED;\n      }\n      if (s3 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s0 = peg$f28(s2);\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n    } else {\n      peg$currPos = s0;\n      s0 = peg$FAILED;\n    }\n    peg$silentFails--;\n\n    return s0;\n  }\n\n  function peg$parseValueStringChars() {\n    var s0;\n\n    var rule$expects = function (expected) {\n      if (peg$silentFails === 0) peg$expect(expected);\n    };\n\n    if (peg$r2.test(input.charAt(peg$currPos))) {\n      s0 = input.charAt(peg$currPos);\n      peg$currPos++;\n    } else {\n      s0 = peg$FAILED;\n    }\n    if (s0 === peg$FAILED) {\n      s0 = peg$parseValueStringEscapes();\n    }\n\n    return s0;\n  }\n\n  function peg$parseValueStringEscapes() {\n    var s0, s1, s2, s3;\n\n    var rule$expects = function (expected) {\n      if (peg$silentFails === 0) peg$expect(expected);\n    };\n\n    s0 = peg$currPos;\n    if (input.charCodeAt(peg$currPos) === 92) {\n      s1 = peg$c17;\n      peg$currPos++;\n    } else {\n      s1 = peg$FAILED;\n    }\n    if (s1 !== peg$FAILED) {\n      if (input.charCodeAt(peg$currPos) === 34) {\n        s2 = peg$c16;\n        peg$currPos++;\n      } else {\n        s2 = peg$FAILED;\n      }\n      if (s2 === peg$FAILED) {\n        if (input.charCodeAt(peg$currPos) === 92) {\n          s2 = peg$c17;\n          peg$currPos++;\n        } else {\n          s2 = peg$FAILED;\n        }\n        if (s2 === peg$FAILED) {\n          s2 = peg$currPos;\n          if (input.charCodeAt(peg$currPos) === 110) {\n            s3 = peg$c18;\n            peg$currPos++;\n          } else {\n            s3 = peg$FAILED;\n          }\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s2;\n            s3 = peg$f29();\n          }\n          s2 = s3;\n          if (s2 === peg$FAILED) {\n            s2 = peg$currPos;\n            if (input.charCodeAt(peg$currPos) === 114) {\n              s3 = peg$c19;\n              peg$currPos++;\n            } else {\n              s3 = peg$FAILED;\n            }\n            if (s3 !== peg$FAILED) {\n              peg$savedPos = s2;\n              s3 = peg$f30();\n            }\n            s2 = s3;\n            if (s2 === peg$FAILED) {\n              s2 = peg$currPos;\n              if (input.charCodeAt(peg$currPos) === 116) {\n                s3 = peg$c20;\n                peg$currPos++;\n              } else {\n                s3 = peg$FAILED;\n              }\n              if (s3 !== peg$FAILED) {\n                peg$savedPos = s2;\n                s3 = peg$f31();\n              }\n              s2 = s3;\n            }\n          }\n        }\n      }\n      if (s2 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s0 = peg$f32(s2);\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n    } else {\n      peg$currPos = s0;\n      s0 = peg$FAILED;\n    }\n\n    return s0;\n  }\n\n  function peg$parseIdentifier() {\n    var s0, s1, s2;\n\n    var rule$expects = function (expected) {\n      if (peg$silentFails === 0) peg$expect(expected);\n    };\n\n    rule$expects(peg$e18);\n    peg$silentFails++;\n    s0 = peg$currPos;\n    s1 = [];\n    if (peg$r3.test(input.charAt(peg$currPos))) {\n      s2 = input.charAt(peg$currPos);\n      peg$currPos++;\n    } else {\n      s2 = peg$FAILED;\n    }\n    if (s2 !== peg$FAILED) {\n      while (s2 !== peg$FAILED) {\n        s1.push(s2);\n        if (peg$r3.test(input.charAt(peg$currPos))) {\n          s2 = input.charAt(peg$currPos);\n          peg$currPos++;\n        } else {\n          s2 = peg$FAILED;\n        }\n      }\n    } else {\n      s1 = peg$FAILED;\n    }\n    if (s1 !== peg$FAILED) {\n      s0 = input.substring(s0, peg$currPos);\n    } else {\n      s0 = s1;\n    }\n    peg$silentFails--;\n\n    return s0;\n  }\n\n  function peg$parse_() {\n    var s0;\n\n    var rule$expects = function (expected) {\n      if (peg$silentFails === 0) peg$expect(expected);\n    };\n\n    rule$expects(peg$e19);\n    peg$silentFails++;\n    if (peg$r4.test(input.charAt(peg$currPos))) {\n      s0 = input.charAt(peg$currPos);\n      peg$currPos++;\n    } else {\n      s0 = peg$FAILED;\n    }\n    peg$silentFails--;\n\n    return s0;\n  }\n\n  const { Variable, Function } = options;\n\n  peg$begin();\n  peg$result = peg$startRuleFunction();\n\n  if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n    return peg$result;\n  } else {\n    if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n      peg$expect(peg$endExpectation());\n    }\n\n    throw peg$buildError();\n  }\n}\n\nmodule.exports = {\n  SyntaxError: peg$SyntaxError,\n  parse: peg$parse,\n};\n", "{\"Aacute\":\"\u00C1\",\"aacute\":\"\u00E1\",\"Abreve\":\"\u0102\",\"abreve\":\"\u0103\",\"ac\":\"\u223E\",\"acd\":\"\u223F\",\"acE\":\"\u223E\u0333\",\"Acirc\":\"\u00C2\",\"acirc\":\"\u00E2\",\"acute\":\"\u00B4\",\"Acy\":\"\u0410\",\"acy\":\"\u0430\",\"AElig\":\"\u00C6\",\"aelig\":\"\u00E6\",\"af\":\"\u2061\",\"Afr\":\"\uD835\uDD04\",\"afr\":\"\uD835\uDD1E\",\"Agrave\":\"\u00C0\",\"agrave\":\"\u00E0\",\"alefsym\":\"\u2135\",\"aleph\":\"\u2135\",\"Alpha\":\"\u0391\",\"alpha\":\"\u03B1\",\"Amacr\":\"\u0100\",\"amacr\":\"\u0101\",\"amalg\":\"\u2A3F\",\"amp\":\"&\",\"AMP\":\"&\",\"andand\":\"\u2A55\",\"And\":\"\u2A53\",\"and\":\"\u2227\",\"andd\":\"\u2A5C\",\"andslope\":\"\u2A58\",\"andv\":\"\u2A5A\",\"ang\":\"\u2220\",\"ange\":\"\u29A4\",\"angle\":\"\u2220\",\"angmsdaa\":\"\u29A8\",\"angmsdab\":\"\u29A9\",\"angmsdac\":\"\u29AA\",\"angmsdad\":\"\u29AB\",\"angmsdae\":\"\u29AC\",\"angmsdaf\":\"\u29AD\",\"angmsdag\":\"\u29AE\",\"angmsdah\":\"\u29AF\",\"angmsd\":\"\u2221\",\"angrt\":\"\u221F\",\"angrtvb\":\"\u22BE\",\"angrtvbd\":\"\u299D\",\"angsph\":\"\u2222\",\"angst\":\"\u00C5\",\"angzarr\":\"\u237C\",\"Aogon\":\"\u0104\",\"aogon\":\"\u0105\",\"Aopf\":\"\uD835\uDD38\",\"aopf\":\"\uD835\uDD52\",\"apacir\":\"\u2A6F\",\"ap\":\"\u2248\",\"apE\":\"\u2A70\",\"ape\":\"\u224A\",\"apid\":\"\u224B\",\"apos\":\"'\",\"ApplyFunction\":\"\u2061\",\"approx\":\"\u2248\",\"approxeq\":\"\u224A\",\"Aring\":\"\u00C5\",\"aring\":\"\u00E5\",\"Ascr\":\"\uD835\uDC9C\",\"ascr\":\"\uD835\uDCB6\",\"Assign\":\"\u2254\",\"ast\":\"*\",\"asymp\":\"\u2248\",\"asympeq\":\"\u224D\",\"Atilde\":\"\u00C3\",\"atilde\":\"\u00E3\",\"Auml\":\"\u00C4\",\"auml\":\"\u00E4\",\"awconint\":\"\u2233\",\"awint\":\"\u2A11\",\"backcong\":\"\u224C\",\"backepsilon\":\"\u03F6\",\"backprime\":\"\u2035\",\"backsim\":\"\u223D\",\"backsimeq\":\"\u22CD\",\"Backslash\":\"\u2216\",\"Barv\":\"\u2AE7\",\"barvee\":\"\u22BD\",\"barwed\":\"\u2305\",\"Barwed\":\"\u2306\",\"barwedge\":\"\u2305\",\"bbrk\":\"\u23B5\",\"bbrktbrk\":\"\u23B6\",\"bcong\":\"\u224C\",\"Bcy\":\"\u0411\",\"bcy\":\"\u0431\",\"bdquo\":\"\u201E\",\"becaus\":\"\u2235\",\"because\":\"\u2235\",\"Because\":\"\u2235\",\"bemptyv\":\"\u29B0\",\"bepsi\":\"\u03F6\",\"bernou\":\"\u212C\",\"Bernoullis\":\"\u212C\",\"Beta\":\"\u0392\",\"beta\":\"\u03B2\",\"beth\":\"\u2136\",\"between\":\"\u226C\",\"Bfr\":\"\uD835\uDD05\",\"bfr\":\"\uD835\uDD1F\",\"bigcap\":\"\u22C2\",\"bigcirc\":\"\u25EF\",\"bigcup\":\"\u22C3\",\"bigodot\":\"\u2A00\",\"bigoplus\":\"\u2A01\",\"bigotimes\":\"\u2A02\",\"bigsqcup\":\"\u2A06\",\"bigstar\":\"\u2605\",\"bigtriangledown\":\"\u25BD\",\"bigtriangleup\":\"\u25B3\",\"biguplus\":\"\u2A04\",\"bigvee\":\"\u22C1\",\"bigwedge\":\"\u22C0\",\"bkarow\":\"\u290D\",\"blacklozenge\":\"\u29EB\",\"blacksquare\":\"\u25AA\",\"blacktriangle\":\"\u25B4\",\"blacktriangledown\":\"\u25BE\",\"blacktriangleleft\":\"\u25C2\",\"blacktriangleright\":\"\u25B8\",\"blank\":\"\u2423\",\"blk12\":\"\u2592\",\"blk14\":\"\u2591\",\"blk34\":\"\u2593\",\"block\":\"\u2588\",\"bne\":\"=\u20E5\",\"bnequiv\":\"\u2261\u20E5\",\"bNot\":\"\u2AED\",\"bnot\":\"\u2310\",\"Bopf\":\"\uD835\uDD39\",\"bopf\":\"\uD835\uDD53\",\"bot\":\"\u22A5\",\"bottom\":\"\u22A5\",\"bowtie\":\"\u22C8\",\"boxbox\":\"\u29C9\",\"boxdl\":\"\u2510\",\"boxdL\":\"\u2555\",\"boxDl\":\"\u2556\",\"boxDL\":\"\u2557\",\"boxdr\":\"\u250C\",\"boxdR\":\"\u2552\",\"boxDr\":\"\u2553\",\"boxDR\":\"\u2554\",\"boxh\":\"\u2500\",\"boxH\":\"\u2550\",\"boxhd\":\"\u252C\",\"boxHd\":\"\u2564\",\"boxhD\":\"\u2565\",\"boxHD\":\"\u2566\",\"boxhu\":\"\u2534\",\"boxHu\":\"\u2567\",\"boxhU\":\"\u2568\",\"boxHU\":\"\u2569\",\"boxminus\":\"\u229F\",\"boxplus\":\"\u229E\",\"boxtimes\":\"\u22A0\",\"boxul\":\"\u2518\",\"boxuL\":\"\u255B\",\"boxUl\":\"\u255C\",\"boxUL\":\"\u255D\",\"boxur\":\"\u2514\",\"boxuR\":\"\u2558\",\"boxUr\":\"\u2559\",\"boxUR\":\"\u255A\",\"boxv\":\"\u2502\",\"boxV\":\"\u2551\",\"boxvh\":\"\u253C\",\"boxvH\":\"\u256A\",\"boxVh\":\"\u256B\",\"boxVH\":\"\u256C\",\"boxvl\":\"\u2524\",\"boxvL\":\"\u2561\",\"boxVl\":\"\u2562\",\"boxVL\":\"\u2563\",\"boxvr\":\"\u251C\",\"boxvR\":\"\u255E\",\"boxVr\":\"\u255F\",\"boxVR\":\"\u2560\",\"bprime\":\"\u2035\",\"breve\":\"\u02D8\",\"Breve\":\"\u02D8\",\"brvbar\":\"\u00A6\",\"bscr\":\"\uD835\uDCB7\",\"Bscr\":\"\u212C\",\"bsemi\":\"\u204F\",\"bsim\":\"\u223D\",\"bsime\":\"\u22CD\",\"bsolb\":\"\u29C5\",\"bsol\":\"\\\\\",\"bsolhsub\":\"\u27C8\",\"bull\":\"\u2022\",\"bullet\":\"\u2022\",\"bump\":\"\u224E\",\"bumpE\":\"\u2AAE\",\"bumpe\":\"\u224F\",\"Bumpeq\":\"\u224E\",\"bumpeq\":\"\u224F\",\"Cacute\":\"\u0106\",\"cacute\":\"\u0107\",\"capand\":\"\u2A44\",\"capbrcup\":\"\u2A49\",\"capcap\":\"\u2A4B\",\"cap\":\"\u2229\",\"Cap\":\"\u22D2\",\"capcup\":\"\u2A47\",\"capdot\":\"\u2A40\",\"CapitalDifferentialD\":\"\u2145\",\"caps\":\"\u2229\uFE00\",\"caret\":\"\u2041\",\"caron\":\"\u02C7\",\"Cayleys\":\"\u212D\",\"ccaps\":\"\u2A4D\",\"Ccaron\":\"\u010C\",\"ccaron\":\"\u010D\",\"Ccedil\":\"\u00C7\",\"ccedil\":\"\u00E7\",\"Ccirc\":\"\u0108\",\"ccirc\":\"\u0109\",\"Cconint\":\"\u2230\",\"ccups\":\"\u2A4C\",\"ccupssm\":\"\u2A50\",\"Cdot\":\"\u010A\",\"cdot\":\"\u010B\",\"cedil\":\"\u00B8\",\"Cedilla\":\"\u00B8\",\"cemptyv\":\"\u29B2\",\"cent\":\"\u00A2\",\"centerdot\":\"\u00B7\",\"CenterDot\":\"\u00B7\",\"cfr\":\"\uD835\uDD20\",\"Cfr\":\"\u212D\",\"CHcy\":\"\u0427\",\"chcy\":\"\u0447\",\"check\":\"\u2713\",\"checkmark\":\"\u2713\",\"Chi\":\"\u03A7\",\"chi\":\"\u03C7\",\"circ\":\"\u02C6\",\"circeq\":\"\u2257\",\"circlearrowleft\":\"\u21BA\",\"circlearrowright\":\"\u21BB\",\"circledast\":\"\u229B\",\"circledcirc\":\"\u229A\",\"circleddash\":\"\u229D\",\"CircleDot\":\"\u2299\",\"circledR\":\"\u00AE\",\"circledS\":\"\u24C8\",\"CircleMinus\":\"\u2296\",\"CirclePlus\":\"\u2295\",\"CircleTimes\":\"\u2297\",\"cir\":\"\u25CB\",\"cirE\":\"\u29C3\",\"cire\":\"\u2257\",\"cirfnint\":\"\u2A10\",\"cirmid\":\"\u2AEF\",\"cirscir\":\"\u29C2\",\"ClockwiseContourIntegral\":\"\u2232\",\"CloseCurlyDoubleQuote\":\"\u201D\",\"CloseCurlyQuote\":\"\u2019\",\"clubs\":\"\u2663\",\"clubsuit\":\"\u2663\",\"colon\":\":\",\"Colon\":\"\u2237\",\"Colone\":\"\u2A74\",\"colone\":\"\u2254\",\"coloneq\":\"\u2254\",\"comma\":\",\",\"commat\":\"@\",\"comp\":\"\u2201\",\"compfn\":\"\u2218\",\"complement\":\"\u2201\",\"complexes\":\"\u2102\",\"cong\":\"\u2245\",\"congdot\":\"\u2A6D\",\"Congruent\":\"\u2261\",\"conint\":\"\u222E\",\"Conint\":\"\u222F\",\"ContourIntegral\":\"\u222E\",\"copf\":\"\uD835\uDD54\",\"Copf\":\"\u2102\",\"coprod\":\"\u2210\",\"Coproduct\":\"\u2210\",\"copy\":\"\u00A9\",\"COPY\":\"\u00A9\",\"copysr\":\"\u2117\",\"CounterClockwiseContourIntegral\":\"\u2233\",\"crarr\":\"\u21B5\",\"cross\":\"\u2717\",\"Cross\":\"\u2A2F\",\"Cscr\":\"\uD835\uDC9E\",\"cscr\":\"\uD835\uDCB8\",\"csub\":\"\u2ACF\",\"csube\":\"\u2AD1\",\"csup\":\"\u2AD0\",\"csupe\":\"\u2AD2\",\"ctdot\":\"\u22EF\",\"cudarrl\":\"\u2938\",\"cudarrr\":\"\u2935\",\"cuepr\":\"\u22DE\",\"cuesc\":\"\u22DF\",\"cularr\":\"\u21B6\",\"cularrp\":\"\u293D\",\"cupbrcap\":\"\u2A48\",\"cupcap\":\"\u2A46\",\"CupCap\":\"\u224D\",\"cup\":\"\u222A\",\"Cup\":\"\u22D3\",\"cupcup\":\"\u2A4A\",\"cupdot\":\"\u228D\",\"cupor\":\"\u2A45\",\"cups\":\"\u222A\uFE00\",\"curarr\":\"\u21B7\",\"curarrm\":\"\u293C\",\"curlyeqprec\":\"\u22DE\",\"curlyeqsucc\":\"\u22DF\",\"curlyvee\":\"\u22CE\",\"curlywedge\":\"\u22CF\",\"curren\":\"\u00A4\",\"curvearrowleft\":\"\u21B6\",\"curvearrowright\":\"\u21B7\",\"cuvee\":\"\u22CE\",\"cuwed\":\"\u22CF\",\"cwconint\":\"\u2232\",\"cwint\":\"\u2231\",\"cylcty\":\"\u232D\",\"dagger\":\"\u2020\",\"Dagger\":\"\u2021\",\"daleth\":\"\u2138\",\"darr\":\"\u2193\",\"Darr\":\"\u21A1\",\"dArr\":\"\u21D3\",\"dash\":\"\u2010\",\"Dashv\":\"\u2AE4\",\"dashv\":\"\u22A3\",\"dbkarow\":\"\u290F\",\"dblac\":\"\u02DD\",\"Dcaron\":\"\u010E\",\"dcaron\":\"\u010F\",\"Dcy\":\"\u0414\",\"dcy\":\"\u0434\",\"ddagger\":\"\u2021\",\"ddarr\":\"\u21CA\",\"DD\":\"\u2145\",\"dd\":\"\u2146\",\"DDotrahd\":\"\u2911\",\"ddotseq\":\"\u2A77\",\"deg\":\"\u00B0\",\"Del\":\"\u2207\",\"Delta\":\"\u0394\",\"delta\":\"\u03B4\",\"demptyv\":\"\u29B1\",\"dfisht\":\"\u297F\",\"Dfr\":\"\uD835\uDD07\",\"dfr\":\"\uD835\uDD21\",\"dHar\":\"\u2965\",\"dharl\":\"\u21C3\",\"dharr\":\"\u21C2\",\"DiacriticalAcute\":\"\u00B4\",\"DiacriticalDot\":\"\u02D9\",\"DiacriticalDoubleAcute\":\"\u02DD\",\"DiacriticalGrave\":\"`\",\"DiacriticalTilde\":\"\u02DC\",\"diam\":\"\u22C4\",\"diamond\":\"\u22C4\",\"Diamond\":\"\u22C4\",\"diamondsuit\":\"\u2666\",\"diams\":\"\u2666\",\"die\":\"\u00A8\",\"DifferentialD\":\"\u2146\",\"digamma\":\"\u03DD\",\"disin\":\"\u22F2\",\"div\":\"\u00F7\",\"divide\":\"\u00F7\",\"divideontimes\":\"\u22C7\",\"divonx\":\"\u22C7\",\"DJcy\":\"\u0402\",\"djcy\":\"\u0452\",\"dlcorn\":\"\u231E\",\"dlcrop\":\"\u230D\",\"dollar\":\"$\",\"Dopf\":\"\uD835\uDD3B\",\"dopf\":\"\uD835\uDD55\",\"Dot\":\"\u00A8\",\"dot\":\"\u02D9\",\"DotDot\":\"\u20DC\",\"doteq\":\"\u2250\",\"doteqdot\":\"\u2251\",\"DotEqual\":\"\u2250\",\"dotminus\":\"\u2238\",\"dotplus\":\"\u2214\",\"dotsquare\":\"\u22A1\",\"doublebarwedge\":\"\u2306\",\"DoubleContourIntegral\":\"\u222F\",\"DoubleDot\":\"\u00A8\",\"DoubleDownArrow\":\"\u21D3\",\"DoubleLeftArrow\":\"\u21D0\",\"DoubleLeftRightArrow\":\"\u21D4\",\"DoubleLeftTee\":\"\u2AE4\",\"DoubleLongLeftArrow\":\"\u27F8\",\"DoubleLongLeftRightArrow\":\"\u27FA\",\"DoubleLongRightArrow\":\"\u27F9\",\"DoubleRightArrow\":\"\u21D2\",\"DoubleRightTee\":\"\u22A8\",\"DoubleUpArrow\":\"\u21D1\",\"DoubleUpDownArrow\":\"\u21D5\",\"DoubleVerticalBar\":\"\u2225\",\"DownArrowBar\":\"\u2913\",\"downarrow\":\"\u2193\",\"DownArrow\":\"\u2193\",\"Downarrow\":\"\u21D3\",\"DownArrowUpArrow\":\"\u21F5\",\"DownBreve\":\"\u0311\",\"downdownarrows\":\"\u21CA\",\"downharpoonleft\":\"\u21C3\",\"downharpoonright\":\"\u21C2\",\"DownLeftRightVector\":\"\u2950\",\"DownLeftTeeVector\":\"\u295E\",\"DownLeftVectorBar\":\"\u2956\",\"DownLeftVector\":\"\u21BD\",\"DownRightTeeVector\":\"\u295F\",\"DownRightVectorBar\":\"\u2957\",\"DownRightVector\":\"\u21C1\",\"DownTeeArrow\":\"\u21A7\",\"DownTee\":\"\u22A4\",\"drbkarow\":\"\u2910\",\"drcorn\":\"\u231F\",\"drcrop\":\"\u230C\",\"Dscr\":\"\uD835\uDC9F\",\"dscr\":\"\uD835\uDCB9\",\"DScy\":\"\u0405\",\"dscy\":\"\u0455\",\"dsol\":\"\u29F6\",\"Dstrok\":\"\u0110\",\"dstrok\":\"\u0111\",\"dtdot\":\"\u22F1\",\"dtri\":\"\u25BF\",\"dtrif\":\"\u25BE\",\"duarr\":\"\u21F5\",\"duhar\":\"\u296F\",\"dwangle\":\"\u29A6\",\"DZcy\":\"\u040F\",\"dzcy\":\"\u045F\",\"dzigrarr\":\"\u27FF\",\"Eacute\":\"\u00C9\",\"eacute\":\"\u00E9\",\"easter\":\"\u2A6E\",\"Ecaron\":\"\u011A\",\"ecaron\":\"\u011B\",\"Ecirc\":\"\u00CA\",\"ecirc\":\"\u00EA\",\"ecir\":\"\u2256\",\"ecolon\":\"\u2255\",\"Ecy\":\"\u042D\",\"ecy\":\"\u044D\",\"eDDot\":\"\u2A77\",\"Edot\":\"\u0116\",\"edot\":\"\u0117\",\"eDot\":\"\u2251\",\"ee\":\"\u2147\",\"efDot\":\"\u2252\",\"Efr\":\"\uD835\uDD08\",\"efr\":\"\uD835\uDD22\",\"eg\":\"\u2A9A\",\"Egrave\":\"\u00C8\",\"egrave\":\"\u00E8\",\"egs\":\"\u2A96\",\"egsdot\":\"\u2A98\",\"el\":\"\u2A99\",\"Element\":\"\u2208\",\"elinters\":\"\u23E7\",\"ell\":\"\u2113\",\"els\":\"\u2A95\",\"elsdot\":\"\u2A97\",\"Emacr\":\"\u0112\",\"emacr\":\"\u0113\",\"empty\":\"\u2205\",\"emptyset\":\"\u2205\",\"EmptySmallSquare\":\"\u25FB\",\"emptyv\":\"\u2205\",\"EmptyVerySmallSquare\":\"\u25AB\",\"emsp13\":\"\u2004\",\"emsp14\":\"\u2005\",\"emsp\":\"\u2003\",\"ENG\":\"\u014A\",\"eng\":\"\u014B\",\"ensp\":\"\u2002\",\"Eogon\":\"\u0118\",\"eogon\":\"\u0119\",\"Eopf\":\"\uD835\uDD3C\",\"eopf\":\"\uD835\uDD56\",\"epar\":\"\u22D5\",\"eparsl\":\"\u29E3\",\"eplus\":\"\u2A71\",\"epsi\":\"\u03B5\",\"Epsilon\":\"\u0395\",\"epsilon\":\"\u03B5\",\"epsiv\":\"\u03F5\",\"eqcirc\":\"\u2256\",\"eqcolon\":\"\u2255\",\"eqsim\":\"\u2242\",\"eqslantgtr\":\"\u2A96\",\"eqslantless\":\"\u2A95\",\"Equal\":\"\u2A75\",\"equals\":\"=\",\"EqualTilde\":\"\u2242\",\"equest\":\"\u225F\",\"Equilibrium\":\"\u21CC\",\"equiv\":\"\u2261\",\"equivDD\":\"\u2A78\",\"eqvparsl\":\"\u29E5\",\"erarr\":\"\u2971\",\"erDot\":\"\u2253\",\"escr\":\"\u212F\",\"Escr\":\"\u2130\",\"esdot\":\"\u2250\",\"Esim\":\"\u2A73\",\"esim\":\"\u2242\",\"Eta\":\"\u0397\",\"eta\":\"\u03B7\",\"ETH\":\"\u00D0\",\"eth\":\"\u00F0\",\"Euml\":\"\u00CB\",\"euml\":\"\u00EB\",\"euro\":\"\u20AC\",\"excl\":\"!\",\"exist\":\"\u2203\",\"Exists\":\"\u2203\",\"expectation\":\"\u2130\",\"exponentiale\":\"\u2147\",\"ExponentialE\":\"\u2147\",\"fallingdotseq\":\"\u2252\",\"Fcy\":\"\u0424\",\"fcy\":\"\u0444\",\"female\":\"\u2640\",\"ffilig\":\"\uFB03\",\"fflig\":\"\uFB00\",\"ffllig\":\"\uFB04\",\"Ffr\":\"\uD835\uDD09\",\"ffr\":\"\uD835\uDD23\",\"filig\":\"\uFB01\",\"FilledSmallSquare\":\"\u25FC\",\"FilledVerySmallSquare\":\"\u25AA\",\"fjlig\":\"fj\",\"flat\":\"\u266D\",\"fllig\":\"\uFB02\",\"fltns\":\"\u25B1\",\"fnof\":\"\u0192\",\"Fopf\":\"\uD835\uDD3D\",\"fopf\":\"\uD835\uDD57\",\"forall\":\"\u2200\",\"ForAll\":\"\u2200\",\"fork\":\"\u22D4\",\"forkv\":\"\u2AD9\",\"Fouriertrf\":\"\u2131\",\"fpartint\":\"\u2A0D\",\"frac12\":\"\u00BD\",\"frac13\":\"\u2153\",\"frac14\":\"\u00BC\",\"frac15\":\"\u2155\",\"frac16\":\"\u2159\",\"frac18\":\"\u215B\",\"frac23\":\"\u2154\",\"frac25\":\"\u2156\",\"frac34\":\"\u00BE\",\"frac35\":\"\u2157\",\"frac38\":\"\u215C\",\"frac45\":\"\u2158\",\"frac56\":\"\u215A\",\"frac58\":\"\u215D\",\"frac78\":\"\u215E\",\"frasl\":\"\u2044\",\"frown\":\"\u2322\",\"fscr\":\"\uD835\uDCBB\",\"Fscr\":\"\u2131\",\"gacute\":\"\u01F5\",\"Gamma\":\"\u0393\",\"gamma\":\"\u03B3\",\"Gammad\":\"\u03DC\",\"gammad\":\"\u03DD\",\"gap\":\"\u2A86\",\"Gbreve\":\"\u011E\",\"gbreve\":\"\u011F\",\"Gcedil\":\"\u0122\",\"Gcirc\":\"\u011C\",\"gcirc\":\"\u011D\",\"Gcy\":\"\u0413\",\"gcy\":\"\u0433\",\"Gdot\":\"\u0120\",\"gdot\":\"\u0121\",\"ge\":\"\u2265\",\"gE\":\"\u2267\",\"gEl\":\"\u2A8C\",\"gel\":\"\u22DB\",\"geq\":\"\u2265\",\"geqq\":\"\u2267\",\"geqslant\":\"\u2A7E\",\"gescc\":\"\u2AA9\",\"ges\":\"\u2A7E\",\"gesdot\":\"\u2A80\",\"gesdoto\":\"\u2A82\",\"gesdotol\":\"\u2A84\",\"gesl\":\"\u22DB\uFE00\",\"gesles\":\"\u2A94\",\"Gfr\":\"\uD835\uDD0A\",\"gfr\":\"\uD835\uDD24\",\"gg\":\"\u226B\",\"Gg\":\"\u22D9\",\"ggg\":\"\u22D9\",\"gimel\":\"\u2137\",\"GJcy\":\"\u0403\",\"gjcy\":\"\u0453\",\"gla\":\"\u2AA5\",\"gl\":\"\u2277\",\"glE\":\"\u2A92\",\"glj\":\"\u2AA4\",\"gnap\":\"\u2A8A\",\"gnapprox\":\"\u2A8A\",\"gne\":\"\u2A88\",\"gnE\":\"\u2269\",\"gneq\":\"\u2A88\",\"gneqq\":\"\u2269\",\"gnsim\":\"\u22E7\",\"Gopf\":\"\uD835\uDD3E\",\"gopf\":\"\uD835\uDD58\",\"grave\":\"`\",\"GreaterEqual\":\"\u2265\",\"GreaterEqualLess\":\"\u22DB\",\"GreaterFullEqual\":\"\u2267\",\"GreaterGreater\":\"\u2AA2\",\"GreaterLess\":\"\u2277\",\"GreaterSlantEqual\":\"\u2A7E\",\"GreaterTilde\":\"\u2273\",\"Gscr\":\"\uD835\uDCA2\",\"gscr\":\"\u210A\",\"gsim\":\"\u2273\",\"gsime\":\"\u2A8E\",\"gsiml\":\"\u2A90\",\"gtcc\":\"\u2AA7\",\"gtcir\":\"\u2A7A\",\"gt\":\">\",\"GT\":\">\",\"Gt\":\"\u226B\",\"gtdot\":\"\u22D7\",\"gtlPar\":\"\u2995\",\"gtquest\":\"\u2A7C\",\"gtrapprox\":\"\u2A86\",\"gtrarr\":\"\u2978\",\"gtrdot\":\"\u22D7\",\"gtreqless\":\"\u22DB\",\"gtreqqless\":\"\u2A8C\",\"gtrless\":\"\u2277\",\"gtrsim\":\"\u2273\",\"gvertneqq\":\"\u2269\uFE00\",\"gvnE\":\"\u2269\uFE00\",\"Hacek\":\"\u02C7\",\"hairsp\":\"\u200A\",\"half\":\"\u00BD\",\"hamilt\":\"\u210B\",\"HARDcy\":\"\u042A\",\"hardcy\":\"\u044A\",\"harrcir\":\"\u2948\",\"harr\":\"\u2194\",\"hArr\":\"\u21D4\",\"harrw\":\"\u21AD\",\"Hat\":\"^\",\"hbar\":\"\u210F\",\"Hcirc\":\"\u0124\",\"hcirc\":\"\u0125\",\"hearts\":\"\u2665\",\"heartsuit\":\"\u2665\",\"hellip\":\"\u2026\",\"hercon\":\"\u22B9\",\"hfr\":\"\uD835\uDD25\",\"Hfr\":\"\u210C\",\"HilbertSpace\":\"\u210B\",\"hksearow\":\"\u2925\",\"hkswarow\":\"\u2926\",\"hoarr\":\"\u21FF\",\"homtht\":\"\u223B\",\"hookleftarrow\":\"\u21A9\",\"hookrightarrow\":\"\u21AA\",\"hopf\":\"\uD835\uDD59\",\"Hopf\":\"\u210D\",\"horbar\":\"\u2015\",\"HorizontalLine\":\"\u2500\",\"hscr\":\"\uD835\uDCBD\",\"Hscr\":\"\u210B\",\"hslash\":\"\u210F\",\"Hstrok\":\"\u0126\",\"hstrok\":\"\u0127\",\"HumpDownHump\":\"\u224E\",\"HumpEqual\":\"\u224F\",\"hybull\":\"\u2043\",\"hyphen\":\"\u2010\",\"Iacute\":\"\u00CD\",\"iacute\":\"\u00ED\",\"ic\":\"\u2063\",\"Icirc\":\"\u00CE\",\"icirc\":\"\u00EE\",\"Icy\":\"\u0418\",\"icy\":\"\u0438\",\"Idot\":\"\u0130\",\"IEcy\":\"\u0415\",\"iecy\":\"\u0435\",\"iexcl\":\"\u00A1\",\"iff\":\"\u21D4\",\"ifr\":\"\uD835\uDD26\",\"Ifr\":\"\u2111\",\"Igrave\":\"\u00CC\",\"igrave\":\"\u00EC\",\"ii\":\"\u2148\",\"iiiint\":\"\u2A0C\",\"iiint\":\"\u222D\",\"iinfin\":\"\u29DC\",\"iiota\":\"\u2129\",\"IJlig\":\"\u0132\",\"ijlig\":\"\u0133\",\"Imacr\":\"\u012A\",\"imacr\":\"\u012B\",\"image\":\"\u2111\",\"ImaginaryI\":\"\u2148\",\"imagline\":\"\u2110\",\"imagpart\":\"\u2111\",\"imath\":\"\u0131\",\"Im\":\"\u2111\",\"imof\":\"\u22B7\",\"imped\":\"\u01B5\",\"Implies\":\"\u21D2\",\"incare\":\"\u2105\",\"in\":\"\u2208\",\"infin\":\"\u221E\",\"infintie\":\"\u29DD\",\"inodot\":\"\u0131\",\"intcal\":\"\u22BA\",\"int\":\"\u222B\",\"Int\":\"\u222C\",\"integers\":\"\u2124\",\"Integral\":\"\u222B\",\"intercal\":\"\u22BA\",\"Intersection\":\"\u22C2\",\"intlarhk\":\"\u2A17\",\"intprod\":\"\u2A3C\",\"InvisibleComma\":\"\u2063\",\"InvisibleTimes\":\"\u2062\",\"IOcy\":\"\u0401\",\"iocy\":\"\u0451\",\"Iogon\":\"\u012E\",\"iogon\":\"\u012F\",\"Iopf\":\"\uD835\uDD40\",\"iopf\":\"\uD835\uDD5A\",\"Iota\":\"\u0399\",\"iota\":\"\u03B9\",\"iprod\":\"\u2A3C\",\"iquest\":\"\u00BF\",\"iscr\":\"\uD835\uDCBE\",\"Iscr\":\"\u2110\",\"isin\":\"\u2208\",\"isindot\":\"\u22F5\",\"isinE\":\"\u22F9\",\"isins\":\"\u22F4\",\"isinsv\":\"\u22F3\",\"isinv\":\"\u2208\",\"it\":\"\u2062\",\"Itilde\":\"\u0128\",\"itilde\":\"\u0129\",\"Iukcy\":\"\u0406\",\"iukcy\":\"\u0456\",\"Iuml\":\"\u00CF\",\"iuml\":\"\u00EF\",\"Jcirc\":\"\u0134\",\"jcirc\":\"\u0135\",\"Jcy\":\"\u0419\",\"jcy\":\"\u0439\",\"Jfr\":\"\uD835\uDD0D\",\"jfr\":\"\uD835\uDD27\",\"jmath\":\"\u0237\",\"Jopf\":\"\uD835\uDD41\",\"jopf\":\"\uD835\uDD5B\",\"Jscr\":\"\uD835\uDCA5\",\"jscr\":\"\uD835\uDCBF\",\"Jsercy\":\"\u0408\",\"jsercy\":\"\u0458\",\"Jukcy\":\"\u0404\",\"jukcy\":\"\u0454\",\"Kappa\":\"\u039A\",\"kappa\":\"\u03BA\",\"kappav\":\"\u03F0\",\"Kcedil\":\"\u0136\",\"kcedil\":\"\u0137\",\"Kcy\":\"\u041A\",\"kcy\":\"\u043A\",\"Kfr\":\"\uD835\uDD0E\",\"kfr\":\"\uD835\uDD28\",\"kgreen\":\"\u0138\",\"KHcy\":\"\u0425\",\"khcy\":\"\u0445\",\"KJcy\":\"\u040C\",\"kjcy\":\"\u045C\",\"Kopf\":\"\uD835\uDD42\",\"kopf\":\"\uD835\uDD5C\",\"Kscr\":\"\uD835\uDCA6\",\"kscr\":\"\uD835\uDCC0\",\"lAarr\":\"\u21DA\",\"Lacute\":\"\u0139\",\"lacute\":\"\u013A\",\"laemptyv\":\"\u29B4\",\"lagran\":\"\u2112\",\"Lambda\":\"\u039B\",\"lambda\":\"\u03BB\",\"lang\":\"\u27E8\",\"Lang\":\"\u27EA\",\"langd\":\"\u2991\",\"langle\":\"\u27E8\",\"lap\":\"\u2A85\",\"Laplacetrf\":\"\u2112\",\"laquo\":\"\u00AB\",\"larrb\":\"\u21E4\",\"larrbfs\":\"\u291F\",\"larr\":\"\u2190\",\"Larr\":\"\u219E\",\"lArr\":\"\u21D0\",\"larrfs\":\"\u291D\",\"larrhk\":\"\u21A9\",\"larrlp\":\"\u21AB\",\"larrpl\":\"\u2939\",\"larrsim\":\"\u2973\",\"larrtl\":\"\u21A2\",\"latail\":\"\u2919\",\"lAtail\":\"\u291B\",\"lat\":\"\u2AAB\",\"late\":\"\u2AAD\",\"lates\":\"\u2AAD\uFE00\",\"lbarr\":\"\u290C\",\"lBarr\":\"\u290E\",\"lbbrk\":\"\u2772\",\"lbrace\":\"{\",\"lbrack\":\"[\",\"lbrke\":\"\u298B\",\"lbrksld\":\"\u298F\",\"lbrkslu\":\"\u298D\",\"Lcaron\":\"\u013D\",\"lcaron\":\"\u013E\",\"Lcedil\":\"\u013B\",\"lcedil\":\"\u013C\",\"lceil\":\"\u2308\",\"lcub\":\"{\",\"Lcy\":\"\u041B\",\"lcy\":\"\u043B\",\"ldca\":\"\u2936\",\"ldquo\":\"\u201C\",\"ldquor\":\"\u201E\",\"ldrdhar\":\"\u2967\",\"ldrushar\":\"\u294B\",\"ldsh\":\"\u21B2\",\"le\":\"\u2264\",\"lE\":\"\u2266\",\"LeftAngleBracket\":\"\u27E8\",\"LeftArrowBar\":\"\u21E4\",\"leftarrow\":\"\u2190\",\"LeftArrow\":\"\u2190\",\"Leftarrow\":\"\u21D0\",\"LeftArrowRightArrow\":\"\u21C6\",\"leftarrowtail\":\"\u21A2\",\"LeftCeiling\":\"\u2308\",\"LeftDoubleBracket\":\"\u27E6\",\"LeftDownTeeVector\":\"\u2961\",\"LeftDownVectorBar\":\"\u2959\",\"LeftDownVector\":\"\u21C3\",\"LeftFloor\":\"\u230A\",\"leftharpoondown\":\"\u21BD\",\"leftharpoonup\":\"\u21BC\",\"leftleftarrows\":\"\u21C7\",\"leftrightarrow\":\"\u2194\",\"LeftRightArrow\":\"\u2194\",\"Leftrightarrow\":\"\u21D4\",\"leftrightarrows\":\"\u21C6\",\"leftrightharpoons\":\"\u21CB\",\"leftrightsquigarrow\":\"\u21AD\",\"LeftRightVector\":\"\u294E\",\"LeftTeeArrow\":\"\u21A4\",\"LeftTee\":\"\u22A3\",\"LeftTeeVector\":\"\u295A\",\"leftthreetimes\":\"\u22CB\",\"LeftTriangleBar\":\"\u29CF\",\"LeftTriangle\":\"\u22B2\",\"LeftTriangleEqual\":\"\u22B4\",\"LeftUpDownVector\":\"\u2951\",\"LeftUpTeeVector\":\"\u2960\",\"LeftUpVectorBar\":\"\u2958\",\"LeftUpVector\":\"\u21BF\",\"LeftVectorBar\":\"\u2952\",\"LeftVector\":\"\u21BC\",\"lEg\":\"\u2A8B\",\"leg\":\"\u22DA\",\"leq\":\"\u2264\",\"leqq\":\"\u2266\",\"leqslant\":\"\u2A7D\",\"lescc\":\"\u2AA8\",\"les\":\"\u2A7D\",\"lesdot\":\"\u2A7F\",\"lesdoto\":\"\u2A81\",\"lesdotor\":\"\u2A83\",\"lesg\":\"\u22DA\uFE00\",\"lesges\":\"\u2A93\",\"lessapprox\":\"\u2A85\",\"lessdot\":\"\u22D6\",\"lesseqgtr\":\"\u22DA\",\"lesseqqgtr\":\"\u2A8B\",\"LessEqualGreater\":\"\u22DA\",\"LessFullEqual\":\"\u2266\",\"LessGreater\":\"\u2276\",\"lessgtr\":\"\u2276\",\"LessLess\":\"\u2AA1\",\"lesssim\":\"\u2272\",\"LessSlantEqual\":\"\u2A7D\",\"LessTilde\":\"\u2272\",\"lfisht\":\"\u297C\",\"lfloor\":\"\u230A\",\"Lfr\":\"\uD835\uDD0F\",\"lfr\":\"\uD835\uDD29\",\"lg\":\"\u2276\",\"lgE\":\"\u2A91\",\"lHar\":\"\u2962\",\"lhard\":\"\u21BD\",\"lharu\":\"\u21BC\",\"lharul\":\"\u296A\",\"lhblk\":\"\u2584\",\"LJcy\":\"\u0409\",\"ljcy\":\"\u0459\",\"llarr\":\"\u21C7\",\"ll\":\"\u226A\",\"Ll\":\"\u22D8\",\"llcorner\":\"\u231E\",\"Lleftarrow\":\"\u21DA\",\"llhard\":\"\u296B\",\"lltri\":\"\u25FA\",\"Lmidot\":\"\u013F\",\"lmidot\":\"\u0140\",\"lmoustache\":\"\u23B0\",\"lmoust\":\"\u23B0\",\"lnap\":\"\u2A89\",\"lnapprox\":\"\u2A89\",\"lne\":\"\u2A87\",\"lnE\":\"\u2268\",\"lneq\":\"\u2A87\",\"lneqq\":\"\u2268\",\"lnsim\":\"\u22E6\",\"loang\":\"\u27EC\",\"loarr\":\"\u21FD\",\"lobrk\":\"\u27E6\",\"longleftarrow\":\"\u27F5\",\"LongLeftArrow\":\"\u27F5\",\"Longleftarrow\":\"\u27F8\",\"longleftrightarrow\":\"\u27F7\",\"LongLeftRightArrow\":\"\u27F7\",\"Longleftrightarrow\":\"\u27FA\",\"longmapsto\":\"\u27FC\",\"longrightarrow\":\"\u27F6\",\"LongRightArrow\":\"\u27F6\",\"Longrightarrow\":\"\u27F9\",\"looparrowleft\":\"\u21AB\",\"looparrowright\":\"\u21AC\",\"lopar\":\"\u2985\",\"Lopf\":\"\uD835\uDD43\",\"lopf\":\"\uD835\uDD5D\",\"loplus\":\"\u2A2D\",\"lotimes\":\"\u2A34\",\"lowast\":\"\u2217\",\"lowbar\":\"_\",\"LowerLeftArrow\":\"\u2199\",\"LowerRightArrow\":\"\u2198\",\"loz\":\"\u25CA\",\"lozenge\":\"\u25CA\",\"lozf\":\"\u29EB\",\"lpar\":\"(\",\"lparlt\":\"\u2993\",\"lrarr\":\"\u21C6\",\"lrcorner\":\"\u231F\",\"lrhar\":\"\u21CB\",\"lrhard\":\"\u296D\",\"lrm\":\"\u200E\",\"lrtri\":\"\u22BF\",\"lsaquo\":\"\u2039\",\"lscr\":\"\uD835\uDCC1\",\"Lscr\":\"\u2112\",\"lsh\":\"\u21B0\",\"Lsh\":\"\u21B0\",\"lsim\":\"\u2272\",\"lsime\":\"\u2A8D\",\"lsimg\":\"\u2A8F\",\"lsqb\":\"[\",\"lsquo\":\"\u2018\",\"lsquor\":\"\u201A\",\"Lstrok\":\"\u0141\",\"lstrok\":\"\u0142\",\"ltcc\":\"\u2AA6\",\"ltcir\":\"\u2A79\",\"lt\":\"<\",\"LT\":\"<\",\"Lt\":\"\u226A\",\"ltdot\":\"\u22D6\",\"lthree\":\"\u22CB\",\"ltimes\":\"\u22C9\",\"ltlarr\":\"\u2976\",\"ltquest\":\"\u2A7B\",\"ltri\":\"\u25C3\",\"ltrie\":\"\u22B4\",\"ltrif\":\"\u25C2\",\"ltrPar\":\"\u2996\",\"lurdshar\":\"\u294A\",\"luruhar\":\"\u2966\",\"lvertneqq\":\"\u2268\uFE00\",\"lvnE\":\"\u2268\uFE00\",\"macr\":\"\u00AF\",\"male\":\"\u2642\",\"malt\":\"\u2720\",\"maltese\":\"\u2720\",\"Map\":\"\u2905\",\"map\":\"\u21A6\",\"mapsto\":\"\u21A6\",\"mapstodown\":\"\u21A7\",\"mapstoleft\":\"\u21A4\",\"mapstoup\":\"\u21A5\",\"marker\":\"\u25AE\",\"mcomma\":\"\u2A29\",\"Mcy\":\"\u041C\",\"mcy\":\"\u043C\",\"mdash\":\"\u2014\",\"mDDot\":\"\u223A\",\"measuredangle\":\"\u2221\",\"MediumSpace\":\"\u205F\",\"Mellintrf\":\"\u2133\",\"Mfr\":\"\uD835\uDD10\",\"mfr\":\"\uD835\uDD2A\",\"mho\":\"\u2127\",\"micro\":\"\u00B5\",\"midast\":\"*\",\"midcir\":\"\u2AF0\",\"mid\":\"\u2223\",\"middot\":\"\u00B7\",\"minusb\":\"\u229F\",\"minus\":\"\u2212\",\"minusd\":\"\u2238\",\"minusdu\":\"\u2A2A\",\"MinusPlus\":\"\u2213\",\"mlcp\":\"\u2ADB\",\"mldr\":\"\u2026\",\"mnplus\":\"\u2213\",\"models\":\"\u22A7\",\"Mopf\":\"\uD835\uDD44\",\"mopf\":\"\uD835\uDD5E\",\"mp\":\"\u2213\",\"mscr\":\"\uD835\uDCC2\",\"Mscr\":\"\u2133\",\"mstpos\":\"\u223E\",\"Mu\":\"\u039C\",\"mu\":\"\u03BC\",\"multimap\":\"\u22B8\",\"mumap\":\"\u22B8\",\"nabla\":\"\u2207\",\"Nacute\":\"\u0143\",\"nacute\":\"\u0144\",\"nang\":\"\u2220\u20D2\",\"nap\":\"\u2249\",\"napE\":\"\u2A70\u0338\",\"napid\":\"\u224B\u0338\",\"napos\":\"\u0149\",\"napprox\":\"\u2249\",\"natural\":\"\u266E\",\"naturals\":\"\u2115\",\"natur\":\"\u266E\",\"nbsp\":\"\u00A0\",\"nbump\":\"\u224E\u0338\",\"nbumpe\":\"\u224F\u0338\",\"ncap\":\"\u2A43\",\"Ncaron\":\"\u0147\",\"ncaron\":\"\u0148\",\"Ncedil\":\"\u0145\",\"ncedil\":\"\u0146\",\"ncong\":\"\u2247\",\"ncongdot\":\"\u2A6D\u0338\",\"ncup\":\"\u2A42\",\"Ncy\":\"\u041D\",\"ncy\":\"\u043D\",\"ndash\":\"\u2013\",\"nearhk\":\"\u2924\",\"nearr\":\"\u2197\",\"neArr\":\"\u21D7\",\"nearrow\":\"\u2197\",\"ne\":\"\u2260\",\"nedot\":\"\u2250\u0338\",\"NegativeMediumSpace\":\"\u200B\",\"NegativeThickSpace\":\"\u200B\",\"NegativeThinSpace\":\"\u200B\",\"NegativeVeryThinSpace\":\"\u200B\",\"nequiv\":\"\u2262\",\"nesear\":\"\u2928\",\"nesim\":\"\u2242\u0338\",\"NestedGreaterGreater\":\"\u226B\",\"NestedLessLess\":\"\u226A\",\"NewLine\":\"\\n\",\"nexist\":\"\u2204\",\"nexists\":\"\u2204\",\"Nfr\":\"\uD835\uDD11\",\"nfr\":\"\uD835\uDD2B\",\"ngE\":\"\u2267\u0338\",\"nge\":\"\u2271\",\"ngeq\":\"\u2271\",\"ngeqq\":\"\u2267\u0338\",\"ngeqslant\":\"\u2A7E\u0338\",\"nges\":\"\u2A7E\u0338\",\"nGg\":\"\u22D9\u0338\",\"ngsim\":\"\u2275\",\"nGt\":\"\u226B\u20D2\",\"ngt\":\"\u226F\",\"ngtr\":\"\u226F\",\"nGtv\":\"\u226B\u0338\",\"nharr\":\"\u21AE\",\"nhArr\":\"\u21CE\",\"nhpar\":\"\u2AF2\",\"ni\":\"\u220B\",\"nis\":\"\u22FC\",\"nisd\":\"\u22FA\",\"niv\":\"\u220B\",\"NJcy\":\"\u040A\",\"njcy\":\"\u045A\",\"nlarr\":\"\u219A\",\"nlArr\":\"\u21CD\",\"nldr\":\"\u2025\",\"nlE\":\"\u2266\u0338\",\"nle\":\"\u2270\",\"nleftarrow\":\"\u219A\",\"nLeftarrow\":\"\u21CD\",\"nleftrightarrow\":\"\u21AE\",\"nLeftrightarrow\":\"\u21CE\",\"nleq\":\"\u2270\",\"nleqq\":\"\u2266\u0338\",\"nleqslant\":\"\u2A7D\u0338\",\"nles\":\"\u2A7D\u0338\",\"nless\":\"\u226E\",\"nLl\":\"\u22D8\u0338\",\"nlsim\":\"\u2274\",\"nLt\":\"\u226A\u20D2\",\"nlt\":\"\u226E\",\"nltri\":\"\u22EA\",\"nltrie\":\"\u22EC\",\"nLtv\":\"\u226A\u0338\",\"nmid\":\"\u2224\",\"NoBreak\":\"\u2060\",\"NonBreakingSpace\":\"\u00A0\",\"nopf\":\"\uD835\uDD5F\",\"Nopf\":\"\u2115\",\"Not\":\"\u2AEC\",\"not\":\"\u00AC\",\"NotCongruent\":\"\u2262\",\"NotCupCap\":\"\u226D\",\"NotDoubleVerticalBar\":\"\u2226\",\"NotElement\":\"\u2209\",\"NotEqual\":\"\u2260\",\"NotEqualTilde\":\"\u2242\u0338\",\"NotExists\":\"\u2204\",\"NotGreater\":\"\u226F\",\"NotGreaterEqual\":\"\u2271\",\"NotGreaterFullEqual\":\"\u2267\u0338\",\"NotGreaterGreater\":\"\u226B\u0338\",\"NotGreaterLess\":\"\u2279\",\"NotGreaterSlantEqual\":\"\u2A7E\u0338\",\"NotGreaterTilde\":\"\u2275\",\"NotHumpDownHump\":\"\u224E\u0338\",\"NotHumpEqual\":\"\u224F\u0338\",\"notin\":\"\u2209\",\"notindot\":\"\u22F5\u0338\",\"notinE\":\"\u22F9\u0338\",\"notinva\":\"\u2209\",\"notinvb\":\"\u22F7\",\"notinvc\":\"\u22F6\",\"NotLeftTriangleBar\":\"\u29CF\u0338\",\"NotLeftTriangle\":\"\u22EA\",\"NotLeftTriangleEqual\":\"\u22EC\",\"NotLess\":\"\u226E\",\"NotLessEqual\":\"\u2270\",\"NotLessGreater\":\"\u2278\",\"NotLessLess\":\"\u226A\u0338\",\"NotLessSlantEqual\":\"\u2A7D\u0338\",\"NotLessTilde\":\"\u2274\",\"NotNestedGreaterGreater\":\"\u2AA2\u0338\",\"NotNestedLessLess\":\"\u2AA1\u0338\",\"notni\":\"\u220C\",\"notniva\":\"\u220C\",\"notnivb\":\"\u22FE\",\"notnivc\":\"\u22FD\",\"NotPrecedes\":\"\u2280\",\"NotPrecedesEqual\":\"\u2AAF\u0338\",\"NotPrecedesSlantEqual\":\"\u22E0\",\"NotReverseElement\":\"\u220C\",\"NotRightTriangleBar\":\"\u29D0\u0338\",\"NotRightTriangle\":\"\u22EB\",\"NotRightTriangleEqual\":\"\u22ED\",\"NotSquareSubset\":\"\u228F\u0338\",\"NotSquareSubsetEqual\":\"\u22E2\",\"NotSquareSuperset\":\"\u2290\u0338\",\"NotSquareSupersetEqual\":\"\u22E3\",\"NotSubset\":\"\u2282\u20D2\",\"NotSubsetEqual\":\"\u2288\",\"NotSucceeds\":\"\u2281\",\"NotSucceedsEqual\":\"\u2AB0\u0338\",\"NotSucceedsSlantEqual\":\"\u22E1\",\"NotSucceedsTilde\":\"\u227F\u0338\",\"NotSuperset\":\"\u2283\u20D2\",\"NotSupersetEqual\":\"\u2289\",\"NotTilde\":\"\u2241\",\"NotTildeEqual\":\"\u2244\",\"NotTildeFullEqual\":\"\u2247\",\"NotTildeTilde\":\"\u2249\",\"NotVerticalBar\":\"\u2224\",\"nparallel\":\"\u2226\",\"npar\":\"\u2226\",\"nparsl\":\"\u2AFD\u20E5\",\"npart\":\"\u2202\u0338\",\"npolint\":\"\u2A14\",\"npr\":\"\u2280\",\"nprcue\":\"\u22E0\",\"nprec\":\"\u2280\",\"npreceq\":\"\u2AAF\u0338\",\"npre\":\"\u2AAF\u0338\",\"nrarrc\":\"\u2933\u0338\",\"nrarr\":\"\u219B\",\"nrArr\":\"\u21CF\",\"nrarrw\":\"\u219D\u0338\",\"nrightarrow\":\"\u219B\",\"nRightarrow\":\"\u21CF\",\"nrtri\":\"\u22EB\",\"nrtrie\":\"\u22ED\",\"nsc\":\"\u2281\",\"nsccue\":\"\u22E1\",\"nsce\":\"\u2AB0\u0338\",\"Nscr\":\"\uD835\uDCA9\",\"nscr\":\"\uD835\uDCC3\",\"nshortmid\":\"\u2224\",\"nshortparallel\":\"\u2226\",\"nsim\":\"\u2241\",\"nsime\":\"\u2244\",\"nsimeq\":\"\u2244\",\"nsmid\":\"\u2224\",\"nspar\":\"\u2226\",\"nsqsube\":\"\u22E2\",\"nsqsupe\":\"\u22E3\",\"nsub\":\"\u2284\",\"nsubE\":\"\u2AC5\u0338\",\"nsube\":\"\u2288\",\"nsubset\":\"\u2282\u20D2\",\"nsubseteq\":\"\u2288\",\"nsubseteqq\":\"\u2AC5\u0338\",\"nsucc\":\"\u2281\",\"nsucceq\":\"\u2AB0\u0338\",\"nsup\":\"\u2285\",\"nsupE\":\"\u2AC6\u0338\",\"nsupe\":\"\u2289\",\"nsupset\":\"\u2283\u20D2\",\"nsupseteq\":\"\u2289\",\"nsupseteqq\":\"\u2AC6\u0338\",\"ntgl\":\"\u2279\",\"Ntilde\":\"\u00D1\",\"ntilde\":\"\u00F1\",\"ntlg\":\"\u2278\",\"ntriangleleft\":\"\u22EA\",\"ntrianglelefteq\":\"\u22EC\",\"ntriangleright\":\"\u22EB\",\"ntrianglerighteq\":\"\u22ED\",\"Nu\":\"\u039D\",\"nu\":\"\u03BD\",\"num\":\"#\",\"numero\":\"\u2116\",\"numsp\":\"\u2007\",\"nvap\":\"\u224D\u20D2\",\"nvdash\":\"\u22AC\",\"nvDash\":\"\u22AD\",\"nVdash\":\"\u22AE\",\"nVDash\":\"\u22AF\",\"nvge\":\"\u2265\u20D2\",\"nvgt\":\">\u20D2\",\"nvHarr\":\"\u2904\",\"nvinfin\":\"\u29DE\",\"nvlArr\":\"\u2902\",\"nvle\":\"\u2264\u20D2\",\"nvlt\":\"<\u20D2\",\"nvltrie\":\"\u22B4\u20D2\",\"nvrArr\":\"\u2903\",\"nvrtrie\":\"\u22B5\u20D2\",\"nvsim\":\"\u223C\u20D2\",\"nwarhk\":\"\u2923\",\"nwarr\":\"\u2196\",\"nwArr\":\"\u21D6\",\"nwarrow\":\"\u2196\",\"nwnear\":\"\u2927\",\"Oacute\":\"\u00D3\",\"oacute\":\"\u00F3\",\"oast\":\"\u229B\",\"Ocirc\":\"\u00D4\",\"ocirc\":\"\u00F4\",\"ocir\":\"\u229A\",\"Ocy\":\"\u041E\",\"ocy\":\"\u043E\",\"odash\":\"\u229D\",\"Odblac\":\"\u0150\",\"odblac\":\"\u0151\",\"odiv\":\"\u2A38\",\"odot\":\"\u2299\",\"odsold\":\"\u29BC\",\"OElig\":\"\u0152\",\"oelig\":\"\u0153\",\"ofcir\":\"\u29BF\",\"Ofr\":\"\uD835\uDD12\",\"ofr\":\"\uD835\uDD2C\",\"ogon\":\"\u02DB\",\"Ograve\":\"\u00D2\",\"ograve\":\"\u00F2\",\"ogt\":\"\u29C1\",\"ohbar\":\"\u29B5\",\"ohm\":\"\u03A9\",\"oint\":\"\u222E\",\"olarr\":\"\u21BA\",\"olcir\":\"\u29BE\",\"olcross\":\"\u29BB\",\"oline\":\"\u203E\",\"olt\":\"\u29C0\",\"Omacr\":\"\u014C\",\"omacr\":\"\u014D\",\"Omega\":\"\u03A9\",\"omega\":\"\u03C9\",\"Omicron\":\"\u039F\",\"omicron\":\"\u03BF\",\"omid\":\"\u29B6\",\"ominus\":\"\u2296\",\"Oopf\":\"\uD835\uDD46\",\"oopf\":\"\uD835\uDD60\",\"opar\":\"\u29B7\",\"OpenCurlyDoubleQuote\":\"\u201C\",\"OpenCurlyQuote\":\"\u2018\",\"operp\":\"\u29B9\",\"oplus\":\"\u2295\",\"orarr\":\"\u21BB\",\"Or\":\"\u2A54\",\"or\":\"\u2228\",\"ord\":\"\u2A5D\",\"order\":\"\u2134\",\"orderof\":\"\u2134\",\"ordf\":\"\u00AA\",\"ordm\":\"\u00BA\",\"origof\":\"\u22B6\",\"oror\":\"\u2A56\",\"orslope\":\"\u2A57\",\"orv\":\"\u2A5B\",\"oS\":\"\u24C8\",\"Oscr\":\"\uD835\uDCAA\",\"oscr\":\"\u2134\",\"Oslash\":\"\u00D8\",\"oslash\":\"\u00F8\",\"osol\":\"\u2298\",\"Otilde\":\"\u00D5\",\"otilde\":\"\u00F5\",\"otimesas\":\"\u2A36\",\"Otimes\":\"\u2A37\",\"otimes\":\"\u2297\",\"Ouml\":\"\u00D6\",\"ouml\":\"\u00F6\",\"ovbar\":\"\u233D\",\"OverBar\":\"\u203E\",\"OverBrace\":\"\u23DE\",\"OverBracket\":\"\u23B4\",\"OverParenthesis\":\"\u23DC\",\"para\":\"\u00B6\",\"parallel\":\"\u2225\",\"par\":\"\u2225\",\"parsim\":\"\u2AF3\",\"parsl\":\"\u2AFD\",\"part\":\"\u2202\",\"PartialD\":\"\u2202\",\"Pcy\":\"\u041F\",\"pcy\":\"\u043F\",\"percnt\":\"%\",\"period\":\".\",\"permil\":\"\u2030\",\"perp\":\"\u22A5\",\"pertenk\":\"\u2031\",\"Pfr\":\"\uD835\uDD13\",\"pfr\":\"\uD835\uDD2D\",\"Phi\":\"\u03A6\",\"phi\":\"\u03C6\",\"phiv\":\"\u03D5\",\"phmmat\":\"\u2133\",\"phone\":\"\u260E\",\"Pi\":\"\u03A0\",\"pi\":\"\u03C0\",\"pitchfork\":\"\u22D4\",\"piv\":\"\u03D6\",\"planck\":\"\u210F\",\"planckh\":\"\u210E\",\"plankv\":\"\u210F\",\"plusacir\":\"\u2A23\",\"plusb\":\"\u229E\",\"pluscir\":\"\u2A22\",\"plus\":\"+\",\"plusdo\":\"\u2214\",\"plusdu\":\"\u2A25\",\"pluse\":\"\u2A72\",\"PlusMinus\":\"\u00B1\",\"plusmn\":\"\u00B1\",\"plussim\":\"\u2A26\",\"plustwo\":\"\u2A27\",\"pm\":\"\u00B1\",\"Poincareplane\":\"\u210C\",\"pointint\":\"\u2A15\",\"popf\":\"\uD835\uDD61\",\"Popf\":\"\u2119\",\"pound\":\"\u00A3\",\"prap\":\"\u2AB7\",\"Pr\":\"\u2ABB\",\"pr\":\"\u227A\",\"prcue\":\"\u227C\",\"precapprox\":\"\u2AB7\",\"prec\":\"\u227A\",\"preccurlyeq\":\"\u227C\",\"Precedes\":\"\u227A\",\"PrecedesEqual\":\"\u2AAF\",\"PrecedesSlantEqual\":\"\u227C\",\"PrecedesTilde\":\"\u227E\",\"preceq\":\"\u2AAF\",\"precnapprox\":\"\u2AB9\",\"precneqq\":\"\u2AB5\",\"precnsim\":\"\u22E8\",\"pre\":\"\u2AAF\",\"prE\":\"\u2AB3\",\"precsim\":\"\u227E\",\"prime\":\"\u2032\",\"Prime\":\"\u2033\",\"primes\":\"\u2119\",\"prnap\":\"\u2AB9\",\"prnE\":\"\u2AB5\",\"prnsim\":\"\u22E8\",\"prod\":\"\u220F\",\"Product\":\"\u220F\",\"profalar\":\"\u232E\",\"profline\":\"\u2312\",\"profsurf\":\"\u2313\",\"prop\":\"\u221D\",\"Proportional\":\"\u221D\",\"Proportion\":\"\u2237\",\"propto\":\"\u221D\",\"prsim\":\"\u227E\",\"prurel\":\"\u22B0\",\"Pscr\":\"\uD835\uDCAB\",\"pscr\":\"\uD835\uDCC5\",\"Psi\":\"\u03A8\",\"psi\":\"\u03C8\",\"puncsp\":\"\u2008\",\"Qfr\":\"\uD835\uDD14\",\"qfr\":\"\uD835\uDD2E\",\"qint\":\"\u2A0C\",\"qopf\":\"\uD835\uDD62\",\"Qopf\":\"\u211A\",\"qprime\":\"\u2057\",\"Qscr\":\"\uD835\uDCAC\",\"qscr\":\"\uD835\uDCC6\",\"quaternions\":\"\u210D\",\"quatint\":\"\u2A16\",\"quest\":\"?\",\"questeq\":\"\u225F\",\"quot\":\"\\\"\",\"QUOT\":\"\\\"\",\"rAarr\":\"\u21DB\",\"race\":\"\u223D\u0331\",\"Racute\":\"\u0154\",\"racute\":\"\u0155\",\"radic\":\"\u221A\",\"raemptyv\":\"\u29B3\",\"rang\":\"\u27E9\",\"Rang\":\"\u27EB\",\"rangd\":\"\u2992\",\"range\":\"\u29A5\",\"rangle\":\"\u27E9\",\"raquo\":\"\u00BB\",\"rarrap\":\"\u2975\",\"rarrb\":\"\u21E5\",\"rarrbfs\":\"\u2920\",\"rarrc\":\"\u2933\",\"rarr\":\"\u2192\",\"Rarr\":\"\u21A0\",\"rArr\":\"\u21D2\",\"rarrfs\":\"\u291E\",\"rarrhk\":\"\u21AA\",\"rarrlp\":\"\u21AC\",\"rarrpl\":\"\u2945\",\"rarrsim\":\"\u2974\",\"Rarrtl\":\"\u2916\",\"rarrtl\":\"\u21A3\",\"rarrw\":\"\u219D\",\"ratail\":\"\u291A\",\"rAtail\":\"\u291C\",\"ratio\":\"\u2236\",\"rationals\":\"\u211A\",\"rbarr\":\"\u290D\",\"rBarr\":\"\u290F\",\"RBarr\":\"\u2910\",\"rbbrk\":\"\u2773\",\"rbrace\":\"}\",\"rbrack\":\"]\",\"rbrke\":\"\u298C\",\"rbrksld\":\"\u298E\",\"rbrkslu\":\"\u2990\",\"Rcaron\":\"\u0158\",\"rcaron\":\"\u0159\",\"Rcedil\":\"\u0156\",\"rcedil\":\"\u0157\",\"rceil\":\"\u2309\",\"rcub\":\"}\",\"Rcy\":\"\u0420\",\"rcy\":\"\u0440\",\"rdca\":\"\u2937\",\"rdldhar\":\"\u2969\",\"rdquo\":\"\u201D\",\"rdquor\":\"\u201D\",\"rdsh\":\"\u21B3\",\"real\":\"\u211C\",\"realine\":\"\u211B\",\"realpart\":\"\u211C\",\"reals\":\"\u211D\",\"Re\":\"\u211C\",\"rect\":\"\u25AD\",\"reg\":\"\u00AE\",\"REG\":\"\u00AE\",\"ReverseElement\":\"\u220B\",\"ReverseEquilibrium\":\"\u21CB\",\"ReverseUpEquilibrium\":\"\u296F\",\"rfisht\":\"\u297D\",\"rfloor\":\"\u230B\",\"rfr\":\"\uD835\uDD2F\",\"Rfr\":\"\u211C\",\"rHar\":\"\u2964\",\"rhard\":\"\u21C1\",\"rharu\":\"\u21C0\",\"rharul\":\"\u296C\",\"Rho\":\"\u03A1\",\"rho\":\"\u03C1\",\"rhov\":\"\u03F1\",\"RightAngleBracket\":\"\u27E9\",\"RightArrowBar\":\"\u21E5\",\"rightarrow\":\"\u2192\",\"RightArrow\":\"\u2192\",\"Rightarrow\":\"\u21D2\",\"RightArrowLeftArrow\":\"\u21C4\",\"rightarrowtail\":\"\u21A3\",\"RightCeiling\":\"\u2309\",\"RightDoubleBracket\":\"\u27E7\",\"RightDownTeeVector\":\"\u295D\",\"RightDownVectorBar\":\"\u2955\",\"RightDownVector\":\"\u21C2\",\"RightFloor\":\"\u230B\",\"rightharpoondown\":\"\u21C1\",\"rightharpoonup\":\"\u21C0\",\"rightleftarrows\":\"\u21C4\",\"rightleftharpoons\":\"\u21CC\",\"rightrightarrows\":\"\u21C9\",\"rightsquigarrow\":\"\u219D\",\"RightTeeArrow\":\"\u21A6\",\"RightTee\":\"\u22A2\",\"RightTeeVector\":\"\u295B\",\"rightthreetimes\":\"\u22CC\",\"RightTriangleBar\":\"\u29D0\",\"RightTriangle\":\"\u22B3\",\"RightTriangleEqual\":\"\u22B5\",\"RightUpDownVector\":\"\u294F\",\"RightUpTeeVector\":\"\u295C\",\"RightUpVectorBar\":\"\u2954\",\"RightUpVector\":\"\u21BE\",\"RightVectorBar\":\"\u2953\",\"RightVector\":\"\u21C0\",\"ring\":\"\u02DA\",\"risingdotseq\":\"\u2253\",\"rlarr\":\"\u21C4\",\"rlhar\":\"\u21CC\",\"rlm\":\"\u200F\",\"rmoustache\":\"\u23B1\",\"rmoust\":\"\u23B1\",\"rnmid\":\"\u2AEE\",\"roang\":\"\u27ED\",\"roarr\":\"\u21FE\",\"robrk\":\"\u27E7\",\"ropar\":\"\u2986\",\"ropf\":\"\uD835\uDD63\",\"Ropf\":\"\u211D\",\"roplus\":\"\u2A2E\",\"rotimes\":\"\u2A35\",\"RoundImplies\":\"\u2970\",\"rpar\":\")\",\"rpargt\":\"\u2994\",\"rppolint\":\"\u2A12\",\"rrarr\":\"\u21C9\",\"Rrightarrow\":\"\u21DB\",\"rsaquo\":\"\u203A\",\"rscr\":\"\uD835\uDCC7\",\"Rscr\":\"\u211B\",\"rsh\":\"\u21B1\",\"Rsh\":\"\u21B1\",\"rsqb\":\"]\",\"rsquo\":\"\u2019\",\"rsquor\":\"\u2019\",\"rthree\":\"\u22CC\",\"rtimes\":\"\u22CA\",\"rtri\":\"\u25B9\",\"rtrie\":\"\u22B5\",\"rtrif\":\"\u25B8\",\"rtriltri\":\"\u29CE\",\"RuleDelayed\":\"\u29F4\",\"ruluhar\":\"\u2968\",\"rx\":\"\u211E\",\"Sacute\":\"\u015A\",\"sacute\":\"\u015B\",\"sbquo\":\"\u201A\",\"scap\":\"\u2AB8\",\"Scaron\":\"\u0160\",\"scaron\":\"\u0161\",\"Sc\":\"\u2ABC\",\"sc\":\"\u227B\",\"sccue\":\"\u227D\",\"sce\":\"\u2AB0\",\"scE\":\"\u2AB4\",\"Scedil\":\"\u015E\",\"scedil\":\"\u015F\",\"Scirc\":\"\u015C\",\"scirc\":\"\u015D\",\"scnap\":\"\u2ABA\",\"scnE\":\"\u2AB6\",\"scnsim\":\"\u22E9\",\"scpolint\":\"\u2A13\",\"scsim\":\"\u227F\",\"Scy\":\"\u0421\",\"scy\":\"\u0441\",\"sdotb\":\"\u22A1\",\"sdot\":\"\u22C5\",\"sdote\":\"\u2A66\",\"searhk\":\"\u2925\",\"searr\":\"\u2198\",\"seArr\":\"\u21D8\",\"searrow\":\"\u2198\",\"sect\":\"\u00A7\",\"semi\":\";\",\"seswar\":\"\u2929\",\"setminus\":\"\u2216\",\"setmn\":\"\u2216\",\"sext\":\"\u2736\",\"Sfr\":\"\uD835\uDD16\",\"sfr\":\"\uD835\uDD30\",\"sfrown\":\"\u2322\",\"sharp\":\"\u266F\",\"SHCHcy\":\"\u0429\",\"shchcy\":\"\u0449\",\"SHcy\":\"\u0428\",\"shcy\":\"\u0448\",\"ShortDownArrow\":\"\u2193\",\"ShortLeftArrow\":\"\u2190\",\"shortmid\":\"\u2223\",\"shortparallel\":\"\u2225\",\"ShortRightArrow\":\"\u2192\",\"ShortUpArrow\":\"\u2191\",\"shy\":\"\u00AD\",\"Sigma\":\"\u03A3\",\"sigma\":\"\u03C3\",\"sigmaf\":\"\u03C2\",\"sigmav\":\"\u03C2\",\"sim\":\"\u223C\",\"simdot\":\"\u2A6A\",\"sime\":\"\u2243\",\"simeq\":\"\u2243\",\"simg\":\"\u2A9E\",\"simgE\":\"\u2AA0\",\"siml\":\"\u2A9D\",\"simlE\":\"\u2A9F\",\"simne\":\"\u2246\",\"simplus\":\"\u2A24\",\"simrarr\":\"\u2972\",\"slarr\":\"\u2190\",\"SmallCircle\":\"\u2218\",\"smallsetminus\":\"\u2216\",\"smashp\":\"\u2A33\",\"smeparsl\":\"\u29E4\",\"smid\":\"\u2223\",\"smile\":\"\u2323\",\"smt\":\"\u2AAA\",\"smte\":\"\u2AAC\",\"smtes\":\"\u2AAC\uFE00\",\"SOFTcy\":\"\u042C\",\"softcy\":\"\u044C\",\"solbar\":\"\u233F\",\"solb\":\"\u29C4\",\"sol\":\"/\",\"Sopf\":\"\uD835\uDD4A\",\"sopf\":\"\uD835\uDD64\",\"spades\":\"\u2660\",\"spadesuit\":\"\u2660\",\"spar\":\"\u2225\",\"sqcap\":\"\u2293\",\"sqcaps\":\"\u2293\uFE00\",\"sqcup\":\"\u2294\",\"sqcups\":\"\u2294\uFE00\",\"Sqrt\":\"\u221A\",\"sqsub\":\"\u228F\",\"sqsube\":\"\u2291\",\"sqsubset\":\"\u228F\",\"sqsubseteq\":\"\u2291\",\"sqsup\":\"\u2290\",\"sqsupe\":\"\u2292\",\"sqsupset\":\"\u2290\",\"sqsupseteq\":\"\u2292\",\"square\":\"\u25A1\",\"Square\":\"\u25A1\",\"SquareIntersection\":\"\u2293\",\"SquareSubset\":\"\u228F\",\"SquareSubsetEqual\":\"\u2291\",\"SquareSuperset\":\"\u2290\",\"SquareSupersetEqual\":\"\u2292\",\"SquareUnion\":\"\u2294\",\"squarf\":\"\u25AA\",\"squ\":\"\u25A1\",\"squf\":\"\u25AA\",\"srarr\":\"\u2192\",\"Sscr\":\"\uD835\uDCAE\",\"sscr\":\"\uD835\uDCC8\",\"ssetmn\":\"\u2216\",\"ssmile\":\"\u2323\",\"sstarf\":\"\u22C6\",\"Star\":\"\u22C6\",\"star\":\"\u2606\",\"starf\":\"\u2605\",\"straightepsilon\":\"\u03F5\",\"straightphi\":\"\u03D5\",\"strns\":\"\u00AF\",\"sub\":\"\u2282\",\"Sub\":\"\u22D0\",\"subdot\":\"\u2ABD\",\"subE\":\"\u2AC5\",\"sube\":\"\u2286\",\"subedot\":\"\u2AC3\",\"submult\":\"\u2AC1\",\"subnE\":\"\u2ACB\",\"subne\":\"\u228A\",\"subplus\":\"\u2ABF\",\"subrarr\":\"\u2979\",\"subset\":\"\u2282\",\"Subset\":\"\u22D0\",\"subseteq\":\"\u2286\",\"subseteqq\":\"\u2AC5\",\"SubsetEqual\":\"\u2286\",\"subsetneq\":\"\u228A\",\"subsetneqq\":\"\u2ACB\",\"subsim\":\"\u2AC7\",\"subsub\":\"\u2AD5\",\"subsup\":\"\u2AD3\",\"succapprox\":\"\u2AB8\",\"succ\":\"\u227B\",\"succcurlyeq\":\"\u227D\",\"Succeeds\":\"\u227B\",\"SucceedsEqual\":\"\u2AB0\",\"SucceedsSlantEqual\":\"\u227D\",\"SucceedsTilde\":\"\u227F\",\"succeq\":\"\u2AB0\",\"succnapprox\":\"\u2ABA\",\"succneqq\":\"\u2AB6\",\"succnsim\":\"\u22E9\",\"succsim\":\"\u227F\",\"SuchThat\":\"\u220B\",\"sum\":\"\u2211\",\"Sum\":\"\u2211\",\"sung\":\"\u266A\",\"sup1\":\"\u00B9\",\"sup2\":\"\u00B2\",\"sup3\":\"\u00B3\",\"sup\":\"\u2283\",\"Sup\":\"\u22D1\",\"supdot\":\"\u2ABE\",\"supdsub\":\"\u2AD8\",\"supE\":\"\u2AC6\",\"supe\":\"\u2287\",\"supedot\":\"\u2AC4\",\"Superset\":\"\u2283\",\"SupersetEqual\":\"\u2287\",\"suphsol\":\"\u27C9\",\"suphsub\":\"\u2AD7\",\"suplarr\":\"\u297B\",\"supmult\":\"\u2AC2\",\"supnE\":\"\u2ACC\",\"supne\":\"\u228B\",\"supplus\":\"\u2AC0\",\"supset\":\"\u2283\",\"Supset\":\"\u22D1\",\"supseteq\":\"\u2287\",\"supseteqq\":\"\u2AC6\",\"supsetneq\":\"\u228B\",\"supsetneqq\":\"\u2ACC\",\"supsim\":\"\u2AC8\",\"supsub\":\"\u2AD4\",\"supsup\":\"\u2AD6\",\"swarhk\":\"\u2926\",\"swarr\":\"\u2199\",\"swArr\":\"\u21D9\",\"swarrow\":\"\u2199\",\"swnwar\":\"\u292A\",\"szlig\":\"\u00DF\",\"Tab\":\"\\t\",\"target\":\"\u2316\",\"Tau\":\"\u03A4\",\"tau\":\"\u03C4\",\"tbrk\":\"\u23B4\",\"Tcaron\":\"\u0164\",\"tcaron\":\"\u0165\",\"Tcedil\":\"\u0162\",\"tcedil\":\"\u0163\",\"Tcy\":\"\u0422\",\"tcy\":\"\u0442\",\"tdot\":\"\u20DB\",\"telrec\":\"\u2315\",\"Tfr\":\"\uD835\uDD17\",\"tfr\":\"\uD835\uDD31\",\"there4\":\"\u2234\",\"therefore\":\"\u2234\",\"Therefore\":\"\u2234\",\"Theta\":\"\u0398\",\"theta\":\"\u03B8\",\"thetasym\":\"\u03D1\",\"thetav\":\"\u03D1\",\"thickapprox\":\"\u2248\",\"thicksim\":\"\u223C\",\"ThickSpace\":\"\u205F\u200A\",\"ThinSpace\":\"\u2009\",\"thinsp\":\"\u2009\",\"thkap\":\"\u2248\",\"thksim\":\"\u223C\",\"THORN\":\"\u00DE\",\"thorn\":\"\u00FE\",\"tilde\":\"\u02DC\",\"Tilde\":\"\u223C\",\"TildeEqual\":\"\u2243\",\"TildeFullEqual\":\"\u2245\",\"TildeTilde\":\"\u2248\",\"timesbar\":\"\u2A31\",\"timesb\":\"\u22A0\",\"times\":\"\u00D7\",\"timesd\":\"\u2A30\",\"tint\":\"\u222D\",\"toea\":\"\u2928\",\"topbot\":\"\u2336\",\"topcir\":\"\u2AF1\",\"top\":\"\u22A4\",\"Topf\":\"\uD835\uDD4B\",\"topf\":\"\uD835\uDD65\",\"topfork\":\"\u2ADA\",\"tosa\":\"\u2929\",\"tprime\":\"\u2034\",\"trade\":\"\u2122\",\"TRADE\":\"\u2122\",\"triangle\":\"\u25B5\",\"triangledown\":\"\u25BF\",\"triangleleft\":\"\u25C3\",\"trianglelefteq\":\"\u22B4\",\"triangleq\":\"\u225C\",\"triangleright\":\"\u25B9\",\"trianglerighteq\":\"\u22B5\",\"tridot\":\"\u25EC\",\"trie\":\"\u225C\",\"triminus\":\"\u2A3A\",\"TripleDot\":\"\u20DB\",\"triplus\":\"\u2A39\",\"trisb\":\"\u29CD\",\"tritime\":\"\u2A3B\",\"trpezium\":\"\u23E2\",\"Tscr\":\"\uD835\uDCAF\",\"tscr\":\"\uD835\uDCC9\",\"TScy\":\"\u0426\",\"tscy\":\"\u0446\",\"TSHcy\":\"\u040B\",\"tshcy\":\"\u045B\",\"Tstrok\":\"\u0166\",\"tstrok\":\"\u0167\",\"twixt\":\"\u226C\",\"twoheadleftarrow\":\"\u219E\",\"twoheadrightarrow\":\"\u21A0\",\"Uacute\":\"\u00DA\",\"uacute\":\"\u00FA\",\"uarr\":\"\u2191\",\"Uarr\":\"\u219F\",\"uArr\":\"\u21D1\",\"Uarrocir\":\"\u2949\",\"Ubrcy\":\"\u040E\",\"ubrcy\":\"\u045E\",\"Ubreve\":\"\u016C\",\"ubreve\":\"\u016D\",\"Ucirc\":\"\u00DB\",\"ucirc\":\"\u00FB\",\"Ucy\":\"\u0423\",\"ucy\":\"\u0443\",\"udarr\":\"\u21C5\",\"Udblac\":\"\u0170\",\"udblac\":\"\u0171\",\"udhar\":\"\u296E\",\"ufisht\":\"\u297E\",\"Ufr\":\"\uD835\uDD18\",\"ufr\":\"\uD835\uDD32\",\"Ugrave\":\"\u00D9\",\"ugrave\":\"\u00F9\",\"uHar\":\"\u2963\",\"uharl\":\"\u21BF\",\"uharr\":\"\u21BE\",\"uhblk\":\"\u2580\",\"ulcorn\":\"\u231C\",\"ulcorner\":\"\u231C\",\"ulcrop\":\"\u230F\",\"ultri\":\"\u25F8\",\"Umacr\":\"\u016A\",\"umacr\":\"\u016B\",\"uml\":\"\u00A8\",\"UnderBar\":\"_\",\"UnderBrace\":\"\u23DF\",\"UnderBracket\":\"\u23B5\",\"UnderParenthesis\":\"\u23DD\",\"Union\":\"\u22C3\",\"UnionPlus\":\"\u228E\",\"Uogon\":\"\u0172\",\"uogon\":\"\u0173\",\"Uopf\":\"\uD835\uDD4C\",\"uopf\":\"\uD835\uDD66\",\"UpArrowBar\":\"\u2912\",\"uparrow\":\"\u2191\",\"UpArrow\":\"\u2191\",\"Uparrow\":\"\u21D1\",\"UpArrowDownArrow\":\"\u21C5\",\"updownarrow\":\"\u2195\",\"UpDownArrow\":\"\u2195\",\"Updownarrow\":\"\u21D5\",\"UpEquilibrium\":\"\u296E\",\"upharpoonleft\":\"\u21BF\",\"upharpoonright\":\"\u21BE\",\"uplus\":\"\u228E\",\"UpperLeftArrow\":\"\u2196\",\"UpperRightArrow\":\"\u2197\",\"upsi\":\"\u03C5\",\"Upsi\":\"\u03D2\",\"upsih\":\"\u03D2\",\"Upsilon\":\"\u03A5\",\"upsilon\":\"\u03C5\",\"UpTeeArrow\":\"\u21A5\",\"UpTee\":\"\u22A5\",\"upuparrows\":\"\u21C8\",\"urcorn\":\"\u231D\",\"urcorner\":\"\u231D\",\"urcrop\":\"\u230E\",\"Uring\":\"\u016E\",\"uring\":\"\u016F\",\"urtri\":\"\u25F9\",\"Uscr\":\"\uD835\uDCB0\",\"uscr\":\"\uD835\uDCCA\",\"utdot\":\"\u22F0\",\"Utilde\":\"\u0168\",\"utilde\":\"\u0169\",\"utri\":\"\u25B5\",\"utrif\":\"\u25B4\",\"uuarr\":\"\u21C8\",\"Uuml\":\"\u00DC\",\"uuml\":\"\u00FC\",\"uwangle\":\"\u29A7\",\"vangrt\":\"\u299C\",\"varepsilon\":\"\u03F5\",\"varkappa\":\"\u03F0\",\"varnothing\":\"\u2205\",\"varphi\":\"\u03D5\",\"varpi\":\"\u03D6\",\"varpropto\":\"\u221D\",\"varr\":\"\u2195\",\"vArr\":\"\u21D5\",\"varrho\":\"\u03F1\",\"varsigma\":\"\u03C2\",\"varsubsetneq\":\"\u228A\uFE00\",\"varsubsetneqq\":\"\u2ACB\uFE00\",\"varsupsetneq\":\"\u228B\uFE00\",\"varsupsetneqq\":\"\u2ACC\uFE00\",\"vartheta\":\"\u03D1\",\"vartriangleleft\":\"\u22B2\",\"vartriangleright\":\"\u22B3\",\"vBar\":\"\u2AE8\",\"Vbar\":\"\u2AEB\",\"vBarv\":\"\u2AE9\",\"Vcy\":\"\u0412\",\"vcy\":\"\u0432\",\"vdash\":\"\u22A2\",\"vDash\":\"\u22A8\",\"Vdash\":\"\u22A9\",\"VDash\":\"\u22AB\",\"Vdashl\":\"\u2AE6\",\"veebar\":\"\u22BB\",\"vee\":\"\u2228\",\"Vee\":\"\u22C1\",\"veeeq\":\"\u225A\",\"vellip\":\"\u22EE\",\"verbar\":\"|\",\"Verbar\":\"\u2016\",\"vert\":\"|\",\"Vert\":\"\u2016\",\"VerticalBar\":\"\u2223\",\"VerticalLine\":\"|\",\"VerticalSeparator\":\"\u2758\",\"VerticalTilde\":\"\u2240\",\"VeryThinSpace\":\"\u200A\",\"Vfr\":\"\uD835\uDD19\",\"vfr\":\"\uD835\uDD33\",\"vltri\":\"\u22B2\",\"vnsub\":\"\u2282\u20D2\",\"vnsup\":\"\u2283\u20D2\",\"Vopf\":\"\uD835\uDD4D\",\"vopf\":\"\uD835\uDD67\",\"vprop\":\"\u221D\",\"vrtri\":\"\u22B3\",\"Vscr\":\"\uD835\uDCB1\",\"vscr\":\"\uD835\uDCCB\",\"vsubnE\":\"\u2ACB\uFE00\",\"vsubne\":\"\u228A\uFE00\",\"vsupnE\":\"\u2ACC\uFE00\",\"vsupne\":\"\u228B\uFE00\",\"Vvdash\":\"\u22AA\",\"vzigzag\":\"\u299A\",\"Wcirc\":\"\u0174\",\"wcirc\":\"\u0175\",\"wedbar\":\"\u2A5F\",\"wedge\":\"\u2227\",\"Wedge\":\"\u22C0\",\"wedgeq\":\"\u2259\",\"weierp\":\"\u2118\",\"Wfr\":\"\uD835\uDD1A\",\"wfr\":\"\uD835\uDD34\",\"Wopf\":\"\uD835\uDD4E\",\"wopf\":\"\uD835\uDD68\",\"wp\":\"\u2118\",\"wr\":\"\u2240\",\"wreath\":\"\u2240\",\"Wscr\":\"\uD835\uDCB2\",\"wscr\":\"\uD835\uDCCC\",\"xcap\":\"\u22C2\",\"xcirc\":\"\u25EF\",\"xcup\":\"\u22C3\",\"xdtri\":\"\u25BD\",\"Xfr\":\"\uD835\uDD1B\",\"xfr\":\"\uD835\uDD35\",\"xharr\":\"\u27F7\",\"xhArr\":\"\u27FA\",\"Xi\":\"\u039E\",\"xi\":\"\u03BE\",\"xlarr\":\"\u27F5\",\"xlArr\":\"\u27F8\",\"xmap\":\"\u27FC\",\"xnis\":\"\u22FB\",\"xodot\":\"\u2A00\",\"Xopf\":\"\uD835\uDD4F\",\"xopf\":\"\uD835\uDD69\",\"xoplus\":\"\u2A01\",\"xotime\":\"\u2A02\",\"xrarr\":\"\u27F6\",\"xrArr\":\"\u27F9\",\"Xscr\":\"\uD835\uDCB3\",\"xscr\":\"\uD835\uDCCD\",\"xsqcup\":\"\u2A06\",\"xuplus\":\"\u2A04\",\"xutri\":\"\u25B3\",\"xvee\":\"\u22C1\",\"xwedge\":\"\u22C0\",\"Yacute\":\"\u00DD\",\"yacute\":\"\u00FD\",\"YAcy\":\"\u042F\",\"yacy\":\"\u044F\",\"Ycirc\":\"\u0176\",\"ycirc\":\"\u0177\",\"Ycy\":\"\u042B\",\"ycy\":\"\u044B\",\"yen\":\"\u00A5\",\"Yfr\":\"\uD835\uDD1C\",\"yfr\":\"\uD835\uDD36\",\"YIcy\":\"\u0407\",\"yicy\":\"\u0457\",\"Yopf\":\"\uD835\uDD50\",\"yopf\":\"\uD835\uDD6A\",\"Yscr\":\"\uD835\uDCB4\",\"yscr\":\"\uD835\uDCCE\",\"YUcy\":\"\u042E\",\"yucy\":\"\u044E\",\"yuml\":\"\u00FF\",\"Yuml\":\"\u0178\",\"Zacute\":\"\u0179\",\"zacute\":\"\u017A\",\"Zcaron\":\"\u017D\",\"zcaron\":\"\u017E\",\"Zcy\":\"\u0417\",\"zcy\":\"\u0437\",\"Zdot\":\"\u017B\",\"zdot\":\"\u017C\",\"zeetrf\":\"\u2128\",\"ZeroWidthSpace\":\"\u200B\",\"Zeta\":\"\u0396\",\"zeta\":\"\u03B6\",\"zfr\":\"\uD835\uDD37\",\"Zfr\":\"\u2128\",\"ZHcy\":\"\u0416\",\"zhcy\":\"\u0436\",\"zigrarr\":\"\u21DD\",\"zopf\":\"\uD835\uDD6B\",\"Zopf\":\"\u2124\",\"Zscr\":\"\uD835\uDCB5\",\"zscr\":\"\uD835\uDCCF\",\"zwj\":\"\u200D\",\"zwnj\":\"\u200C\"}\n", "// HTML5 entities map: { name -> utf16string }\n//\n'use strict';\n\n/*eslint quotes:0*/\nmodule.exports = require('entities/lib/maps/entities.json');\n", "module.exports=/[!-#%-\\*,-\\/:;\\?@\\[-\\]_\\{\\}\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u09FD\\u0A76\\u0AF0\\u0C84\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E4E\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD803[\\uDF55-\\uDF59]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC8\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDC4B-\\uDC4F\\uDC5B\\uDC5D\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDE60-\\uDE6C\\uDF3C-\\uDF3E]|\\uD806[\\uDC3B\\uDE3F-\\uDE46\\uDE9A-\\uDE9C\\uDE9E-\\uDEA2]|\\uD807[\\uDC41-\\uDC45\\uDC70\\uDC71\\uDEF7\\uDEF8]|\\uD809[\\uDC70-\\uDC74]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD81B[\\uDE97-\\uDE9A]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B]|\\uD83A[\\uDD5E\\uDD5F]/", "\n'use strict';\n\n\nvar encodeCache = {};\n\n\n// Create a lookup array where anything but characters in `chars` string\n// and alphanumeric chars is percent-encoded.\n//\nfunction getEncodeCache(exclude) {\n  var i, ch, cache = encodeCache[exclude];\n  if (cache) { return cache; }\n\n  cache = encodeCache[exclude] = [];\n\n  for (i = 0; i < 128; i++) {\n    ch = String.fromCharCode(i);\n\n    if (/^[0-9a-z]$/i.test(ch)) {\n      // always allow unencoded alphanumeric characters\n      cache.push(ch);\n    } else {\n      cache.push('%' + ('0' + i.toString(16).toUpperCase()).slice(-2));\n    }\n  }\n\n  for (i = 0; i < exclude.length; i++) {\n    cache[exclude.charCodeAt(i)] = exclude[i];\n  }\n\n  return cache;\n}\n\n\n// Encode unsafe characters with percent-encoding, skipping already\n// encoded sequences.\n//\n//  - string       - string to encode\n//  - exclude      - list of characters to ignore (in addition to a-zA-Z0-9)\n//  - keepEscaped  - don't encode '%' in a correct escape sequence (default: true)\n//\nfunction encode(string, exclude, keepEscaped) {\n  var i, l, code, nextCode, cache,\n      result = '';\n\n  if (typeof exclude !== 'string') {\n    // encode(string, keepEscaped)\n    keepEscaped  = exclude;\n    exclude = encode.defaultChars;\n  }\n\n  if (typeof keepEscaped === 'undefined') {\n    keepEscaped = true;\n  }\n\n  cache = getEncodeCache(exclude);\n\n  for (i = 0, l = string.length; i < l; i++) {\n    code = string.charCodeAt(i);\n\n    if (keepEscaped && code === 0x25 /* % */ && i + 2 < l) {\n      if (/^[0-9a-f]{2}$/i.test(string.slice(i + 1, i + 3))) {\n        result += string.slice(i, i + 3);\n        i += 2;\n        continue;\n      }\n    }\n\n    if (code < 128) {\n      result += cache[code];\n      continue;\n    }\n\n    if (code >= 0xD800 && code <= 0xDFFF) {\n      if (code >= 0xD800 && code <= 0xDBFF && i + 1 < l) {\n        nextCode = string.charCodeAt(i + 1);\n        if (nextCode >= 0xDC00 && nextCode <= 0xDFFF) {\n          result += encodeURIComponent(string[i] + string[i + 1]);\n          i++;\n          continue;\n        }\n      }\n      result += '%EF%BF%BD';\n      continue;\n    }\n\n    result += encodeURIComponent(string[i]);\n  }\n\n  return result;\n}\n\nencode.defaultChars   = \";/?:@&=+$,-_.!~*'()#\";\nencode.componentChars = \"-_.!~*'()\";\n\n\nmodule.exports = encode;\n", "\n'use strict';\n\n\n/* eslint-disable no-bitwise */\n\nvar decodeCache = {};\n\nfunction getDecodeCache(exclude) {\n  var i, ch, cache = decodeCache[exclude];\n  if (cache) { return cache; }\n\n  cache = decodeCache[exclude] = [];\n\n  for (i = 0; i < 128; i++) {\n    ch = String.fromCharCode(i);\n    cache.push(ch);\n  }\n\n  for (i = 0; i < exclude.length; i++) {\n    ch = exclude.charCodeAt(i);\n    cache[ch] = '%' + ('0' + ch.toString(16).toUpperCase()).slice(-2);\n  }\n\n  return cache;\n}\n\n\n// Decode percent-encoded string.\n//\nfunction decode(string, exclude) {\n  var cache;\n\n  if (typeof exclude !== 'string') {\n    exclude = decode.defaultChars;\n  }\n\n  cache = getDecodeCache(exclude);\n\n  return string.replace(/(%[a-f0-9]{2})+/gi, function(seq) {\n    var i, l, b1, b2, b3, b4, chr,\n        result = '';\n\n    for (i = 0, l = seq.length; i < l; i += 3) {\n      b1 = parseInt(seq.slice(i + 1, i + 3), 16);\n\n      if (b1 < 0x80) {\n        result += cache[b1];\n        continue;\n      }\n\n      if ((b1 & 0xE0) === 0xC0 && (i + 3 < l)) {\n        // 110xxxxx 10xxxxxx\n        b2 = parseInt(seq.slice(i + 4, i + 6), 16);\n\n        if ((b2 & 0xC0) === 0x80) {\n          chr = ((b1 << 6) & 0x7C0) | (b2 & 0x3F);\n\n          if (chr < 0x80) {\n            result += '\\ufffd\\ufffd';\n          } else {\n            result += String.fromCharCode(chr);\n          }\n\n          i += 3;\n          continue;\n        }\n      }\n\n      if ((b1 & 0xF0) === 0xE0 && (i + 6 < l)) {\n        // 1110xxxx 10xxxxxx 10xxxxxx\n        b2 = parseInt(seq.slice(i + 4, i + 6), 16);\n        b3 = parseInt(seq.slice(i + 7, i + 9), 16);\n\n        if ((b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80) {\n          chr = ((b1 << 12) & 0xF000) | ((b2 << 6) & 0xFC0) | (b3 & 0x3F);\n\n          if (chr < 0x800 || (chr >= 0xD800 && chr <= 0xDFFF)) {\n            result += '\\ufffd\\ufffd\\ufffd';\n          } else {\n            result += String.fromCharCode(chr);\n          }\n\n          i += 6;\n          continue;\n        }\n      }\n\n      if ((b1 & 0xF8) === 0xF0 && (i + 9 < l)) {\n        // 111110xx 10xxxxxx 10xxxxxx 10xxxxxx\n        b2 = parseInt(seq.slice(i + 4, i + 6), 16);\n        b3 = parseInt(seq.slice(i + 7, i + 9), 16);\n        b4 = parseInt(seq.slice(i + 10, i + 12), 16);\n\n        if ((b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80 && (b4 & 0xC0) === 0x80) {\n          chr = ((b1 << 18) & 0x1C0000) | ((b2 << 12) & 0x3F000) | ((b3 << 6) & 0xFC0) | (b4 & 0x3F);\n\n          if (chr < 0x10000 || chr > 0x10FFFF) {\n            result += '\\ufffd\\ufffd\\ufffd\\ufffd';\n          } else {\n            chr -= 0x10000;\n            result += String.fromCharCode(0xD800 + (chr >> 10), 0xDC00 + (chr & 0x3FF));\n          }\n\n          i += 9;\n          continue;\n        }\n      }\n\n      result += '\\ufffd';\n    }\n\n    return result;\n  });\n}\n\n\ndecode.defaultChars   = ';/?:@&=+$,#';\ndecode.componentChars = '';\n\n\nmodule.exports = decode;\n", "\n'use strict';\n\n\nmodule.exports = function format(url) {\n  var result = '';\n\n  result += url.protocol || '';\n  result += url.slashes ? '//' : '';\n  result += url.auth ? url.auth + '@' : '';\n\n  if (url.hostname && url.hostname.indexOf(':') !== -1) {\n    // ipv6 address\n    result += '[' + url.hostname + ']';\n  } else {\n    result += url.hostname || '';\n  }\n\n  result += url.port ? ':' + url.port : '';\n  result += url.pathname || '';\n  result += url.search || '';\n  result += url.hash || '';\n\n  return result;\n};\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n//\n// Changes from joyent/node:\n//\n// 1. No leading slash in paths,\n//    e.g. in `url.parse('http://foo?bar')` pathname is ``, not `/`\n//\n// 2. Backslashes are not replaced with slashes,\n//    so `http:\\\\example.org\\` is treated like a relative path\n//\n// 3. Trailing colon is treated like a part of the path,\n//    i.e. in `http://example.org:foo` pathname is `:foo`\n//\n// 4. Nothing is URL-encoded in the resulting object,\n//    (in joyent/node some chars in auth and paths are encoded)\n//\n// 5. `url.parse()` does not have `parseQueryString` argument\n//\n// 6. Removed extraneous result properties: `host`, `path`, `query`, etc.,\n//    which can be constructed using other parts of the url.\n//\n\n\nfunction Url() {\n  this.protocol = null;\n  this.slashes = null;\n  this.auth = null;\n  this.port = null;\n  this.hostname = null;\n  this.hash = null;\n  this.search = null;\n  this.pathname = null;\n}\n\n// Reference: RFC 3986, RFC 1808, RFC 2396\n\n// define these here so at least they only have to be\n// compiled once on the first module load.\nvar protocolPattern = /^([a-z0-9.+-]+:)/i,\n    portPattern = /:[0-9]*$/,\n\n    // Special case for a simple path URL\n    simplePathPattern = /^(\\/\\/?(?!\\/)[^\\?\\s]*)(\\?[^\\s]*)?$/,\n\n    // RFC 2396: characters reserved for delimiting URLs.\n    // We actually just auto-escape these.\n    delims = [ '<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t' ],\n\n    // RFC 2396: characters not allowed for various reasons.\n    unwise = [ '{', '}', '|', '\\\\', '^', '`' ].concat(delims),\n\n    // Allowed by RFCs, but cause of XSS attacks.  Always escape these.\n    autoEscape = [ '\\'' ].concat(unwise),\n    // Characters that are never ever allowed in a hostname.\n    // Note that any invalid chars are also handled, but these\n    // are the ones that are *expected* to be seen, so we fast-path\n    // them.\n    nonHostChars = [ '%', '/', '?', ';', '#' ].concat(autoEscape),\n    hostEndingChars = [ '/', '?', '#' ],\n    hostnameMaxLen = 255,\n    hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/,\n    hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/,\n    // protocols that can allow \"unsafe\" and \"unwise\" chars.\n    /* eslint-disable no-script-url */\n    // protocols that never have a hostname.\n    hostlessProtocol = {\n      'javascript': true,\n      'javascript:': true\n    },\n    // protocols that always contain a // bit.\n    slashedProtocol = {\n      'http': true,\n      'https': true,\n      'ftp': true,\n      'gopher': true,\n      'file': true,\n      'http:': true,\n      'https:': true,\n      'ftp:': true,\n      'gopher:': true,\n      'file:': true\n    };\n    /* eslint-enable no-script-url */\n\nfunction urlParse(url, slashesDenoteHost) {\n  if (url && url instanceof Url) { return url; }\n\n  var u = new Url();\n  u.parse(url, slashesDenoteHost);\n  return u;\n}\n\nUrl.prototype.parse = function(url, slashesDenoteHost) {\n  var i, l, lowerProto, hec, slashes,\n      rest = url;\n\n  // trim before proceeding.\n  // This is to support parse stuff like \"  http://foo.com  \\n\"\n  rest = rest.trim();\n\n  if (!slashesDenoteHost && url.split('#').length === 1) {\n    // Try fast path regexp\n    var simplePath = simplePathPattern.exec(rest);\n    if (simplePath) {\n      this.pathname = simplePath[1];\n      if (simplePath[2]) {\n        this.search = simplePath[2];\n      }\n      return this;\n    }\n  }\n\n  var proto = protocolPattern.exec(rest);\n  if (proto) {\n    proto = proto[0];\n    lowerProto = proto.toLowerCase();\n    this.protocol = proto;\n    rest = rest.substr(proto.length);\n  }\n\n  // figure out if it's got a host\n  // user@server is *always* interpreted as a hostname, and url\n  // resolution will treat //foo/bar as host=foo,path=bar because that's\n  // how the browser resolves relative URLs.\n  if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)) {\n    slashes = rest.substr(0, 2) === '//';\n    if (slashes && !(proto && hostlessProtocol[proto])) {\n      rest = rest.substr(2);\n      this.slashes = true;\n    }\n  }\n\n  if (!hostlessProtocol[proto] &&\n      (slashes || (proto && !slashedProtocol[proto]))) {\n\n    // there's a hostname.\n    // the first instance of /, ?, ;, or # ends the host.\n    //\n    // If there is an @ in the hostname, then non-host chars *are* allowed\n    // to the left of the last @ sign, unless some host-ending character\n    // comes *before* the @-sign.\n    // URLs are obnoxious.\n    //\n    // ex:\n    // http://a@b@c/ => user:a@b host:c\n    // http://a@b?@c => user:a host:c path:/?@c\n\n    // v0.12 TODO(isaacs): This is not quite how Chrome does things.\n    // Review our test case against browsers more comprehensively.\n\n    // find the first instance of any hostEndingChars\n    var hostEnd = -1;\n    for (i = 0; i < hostEndingChars.length; i++) {\n      hec = rest.indexOf(hostEndingChars[i]);\n      if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) {\n        hostEnd = hec;\n      }\n    }\n\n    // at this point, either we have an explicit point where the\n    // auth portion cannot go past, or the last @ char is the decider.\n    var auth, atSign;\n    if (hostEnd === -1) {\n      // atSign can be anywhere.\n      atSign = rest.lastIndexOf('@');\n    } else {\n      // atSign must be in auth portion.\n      // http://a@b/c@d => host:b auth:a path:/c@d\n      atSign = rest.lastIndexOf('@', hostEnd);\n    }\n\n    // Now we have a portion which is definitely the auth.\n    // Pull that off.\n    if (atSign !== -1) {\n      auth = rest.slice(0, atSign);\n      rest = rest.slice(atSign + 1);\n      this.auth = auth;\n    }\n\n    // the host is the remaining to the left of the first non-host char\n    hostEnd = -1;\n    for (i = 0; i < nonHostChars.length; i++) {\n      hec = rest.indexOf(nonHostChars[i]);\n      if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) {\n        hostEnd = hec;\n      }\n    }\n    // if we still have not hit it, then the entire thing is a host.\n    if (hostEnd === -1) {\n      hostEnd = rest.length;\n    }\n\n    if (rest[hostEnd - 1] === ':') { hostEnd--; }\n    var host = rest.slice(0, hostEnd);\n    rest = rest.slice(hostEnd);\n\n    // pull out port.\n    this.parseHost(host);\n\n    // we've indicated that there is a hostname,\n    // so even if it's empty, it has to be present.\n    this.hostname = this.hostname || '';\n\n    // if hostname begins with [ and ends with ]\n    // assume that it's an IPv6 address.\n    var ipv6Hostname = this.hostname[0] === '[' &&\n        this.hostname[this.hostname.length - 1] === ']';\n\n    // validate a little.\n    if (!ipv6Hostname) {\n      var hostparts = this.hostname.split(/\\./);\n      for (i = 0, l = hostparts.length; i < l; i++) {\n        var part = hostparts[i];\n        if (!part) { continue; }\n        if (!part.match(hostnamePartPattern)) {\n          var newpart = '';\n          for (var j = 0, k = part.length; j < k; j++) {\n            if (part.charCodeAt(j) > 127) {\n              // we replace non-ASCII char with a temporary placeholder\n              // we need this to make sure size of hostname is not\n              // broken by replacing non-ASCII by nothing\n              newpart += 'x';\n            } else {\n              newpart += part[j];\n            }\n          }\n          // we test again with ASCII char only\n          if (!newpart.match(hostnamePartPattern)) {\n            var validParts = hostparts.slice(0, i);\n            var notHost = hostparts.slice(i + 1);\n            var bit = part.match(hostnamePartStart);\n            if (bit) {\n              validParts.push(bit[1]);\n              notHost.unshift(bit[2]);\n            }\n            if (notHost.length) {\n              rest = notHost.join('.') + rest;\n            }\n            this.hostname = validParts.join('.');\n            break;\n          }\n        }\n      }\n    }\n\n    if (this.hostname.length > hostnameMaxLen) {\n      this.hostname = '';\n    }\n\n    // strip [ and ] from the hostname\n    // the host field still retains them, though\n    if (ipv6Hostname) {\n      this.hostname = this.hostname.substr(1, this.hostname.length - 2);\n    }\n  }\n\n  // chop off from the tail first.\n  var hash = rest.indexOf('#');\n  if (hash !== -1) {\n    // got a fragment string.\n    this.hash = rest.substr(hash);\n    rest = rest.slice(0, hash);\n  }\n  var qm = rest.indexOf('?');\n  if (qm !== -1) {\n    this.search = rest.substr(qm);\n    rest = rest.slice(0, qm);\n  }\n  if (rest) { this.pathname = rest; }\n  if (slashedProtocol[lowerProto] &&\n      this.hostname && !this.pathname) {\n    this.pathname = '';\n  }\n\n  return this;\n};\n\nUrl.prototype.parseHost = function(host) {\n  var port = portPattern.exec(host);\n  if (port) {\n    port = port[0];\n    if (port !== ':') {\n      this.port = port.substr(1);\n    }\n    host = host.substr(0, host.length - port.length);\n  }\n  if (host) { this.hostname = host; }\n};\n\nmodule.exports = urlParse;\n", "'use strict';\n\n\nmodule.exports.encode = require('./encode');\nmodule.exports.decode = require('./decode');\nmodule.exports.format = require('./format');\nmodule.exports.parse  = require('./parse');\n", "module.exports=/[\\0-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/", "module.exports=/[\\0-\\x1F\\x7F-\\x9F]/", "module.exports=/[\\xAD\\u0600-\\u0605\\u061C\\u06DD\\u070F\\u08E2\\u180E\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\uFEFF\\uFFF9-\\uFFFB]|\\uD804[\\uDCBD\\uDCCD]|\\uD82F[\\uDCA0-\\uDCA3]|\\uD834[\\uDD73-\\uDD7A]|\\uDB40[\\uDC01\\uDC20-\\uDC7F]/", "module.exports=/[ \\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]/", "'use strict';\n\nexports.Any = require('./properties/Any/regex');\nexports.Cc  = require('./categories/Cc/regex');\nexports.Cf  = require('./categories/Cf/regex');\nexports.P   = require('./categories/P/regex');\nexports.Z   = require('./categories/Z/regex');\n", "// Utilities\n//\n'use strict';\n\n\nfunction _class(obj) { return Object.prototype.toString.call(obj); }\n\nfunction isString(obj) { return _class(obj) === '[object String]'; }\n\nvar _hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction has(object, key) {\n  return _hasOwnProperty.call(object, key);\n}\n\n// Merge objects\n//\nfunction assign(obj /*from1, from2, from3, ...*/) {\n  var sources = Array.prototype.slice.call(arguments, 1);\n\n  sources.forEach(function (source) {\n    if (!source) { return; }\n\n    if (typeof source !== 'object') {\n      throw new TypeError(source + 'must be object');\n    }\n\n    Object.keys(source).forEach(function (key) {\n      obj[key] = source[key];\n    });\n  });\n\n  return obj;\n}\n\n// Remove element from array and put another array at those position.\n// Useful for some operations with tokens\nfunction arrayReplaceAt(src, pos, newElements) {\n  return [].concat(src.slice(0, pos), newElements, src.slice(pos + 1));\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nfunction isValidEntityCode(c) {\n  /*eslint no-bitwise:0*/\n  // broken sequence\n  if (c >= 0xD800 && c <= 0xDFFF) { return false; }\n  // never used\n  if (c >= 0xFDD0 && c <= 0xFDEF) { return false; }\n  if ((c & 0xFFFF) === 0xFFFF || (c & 0xFFFF) === 0xFFFE) { return false; }\n  // control codes\n  if (c >= 0x00 && c <= 0x08) { return false; }\n  if (c === 0x0B) { return false; }\n  if (c >= 0x0E && c <= 0x1F) { return false; }\n  if (c >= 0x7F && c <= 0x9F) { return false; }\n  // out of range\n  if (c > 0x10FFFF) { return false; }\n  return true;\n}\n\nfunction fromCodePoint(c) {\n  /*eslint no-bitwise:0*/\n  if (c > 0xffff) {\n    c -= 0x10000;\n    var surrogate1 = 0xd800 + (c >> 10),\n        surrogate2 = 0xdc00 + (c & 0x3ff);\n\n    return String.fromCharCode(surrogate1, surrogate2);\n  }\n  return String.fromCharCode(c);\n}\n\n\nvar UNESCAPE_MD_RE  = /\\\\([!\"#$%&'()*+,\\-.\\/:;<=>?@[\\\\\\]^_`{|}~])/g;\nvar ENTITY_RE       = /&([a-z#][a-z0-9]{1,31});/gi;\nvar UNESCAPE_ALL_RE = new RegExp(UNESCAPE_MD_RE.source + '|' + ENTITY_RE.source, 'gi');\n\nvar DIGITAL_ENTITY_TEST_RE = /^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))/i;\n\nvar entities = require('./entities');\n\nfunction replaceEntityPattern(match, name) {\n  var code = 0;\n\n  if (has(entities, name)) {\n    return entities[name];\n  }\n\n  if (name.charCodeAt(0) === 0x23/* # */ && DIGITAL_ENTITY_TEST_RE.test(name)) {\n    code = name[1].toLowerCase() === 'x' ?\n      parseInt(name.slice(2), 16) : parseInt(name.slice(1), 10);\n\n    if (isValidEntityCode(code)) {\n      return fromCodePoint(code);\n    }\n  }\n\n  return match;\n}\n\n/*function replaceEntities(str) {\n  if (str.indexOf('&') < 0) { return str; }\n\n  return str.replace(ENTITY_RE, replaceEntityPattern);\n}*/\n\nfunction unescapeMd(str) {\n  if (str.indexOf('\\\\') < 0) { return str; }\n  return str.replace(UNESCAPE_MD_RE, '$1');\n}\n\nfunction unescapeAll(str) {\n  if (str.indexOf('\\\\') < 0 && str.indexOf('&') < 0) { return str; }\n\n  return str.replace(UNESCAPE_ALL_RE, function (match, escaped, entity) {\n    if (escaped) { return escaped; }\n    return replaceEntityPattern(match, entity);\n  });\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nvar HTML_ESCAPE_TEST_RE = /[&<>\"]/;\nvar HTML_ESCAPE_REPLACE_RE = /[&<>\"]/g;\nvar HTML_REPLACEMENTS = {\n  '&': '&amp;',\n  '<': '&lt;',\n  '>': '&gt;',\n  '\"': '&quot;'\n};\n\nfunction replaceUnsafeChar(ch) {\n  return HTML_REPLACEMENTS[ch];\n}\n\nfunction escapeHtml(str) {\n  if (HTML_ESCAPE_TEST_RE.test(str)) {\n    return str.replace(HTML_ESCAPE_REPLACE_RE, replaceUnsafeChar);\n  }\n  return str;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nvar REGEXP_ESCAPE_RE = /[.?*+^$[\\]\\\\(){}|-]/g;\n\nfunction escapeRE(str) {\n  return str.replace(REGEXP_ESCAPE_RE, '\\\\$&');\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nfunction isSpace(code) {\n  switch (code) {\n    case 0x09:\n    case 0x20:\n      return true;\n  }\n  return false;\n}\n\n// Zs (unicode class) || [\\t\\f\\v\\r\\n]\nfunction isWhiteSpace(code) {\n  if (code >= 0x2000 && code <= 0x200A) { return true; }\n  switch (code) {\n    case 0x09: // \\t\n    case 0x0A: // \\n\n    case 0x0B: // \\v\n    case 0x0C: // \\f\n    case 0x0D: // \\r\n    case 0x20:\n    case 0xA0:\n    case 0x1680:\n    case 0x202F:\n    case 0x205F:\n    case 0x3000:\n      return true;\n  }\n  return false;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\n/*eslint-disable max-len*/\nvar UNICODE_PUNCT_RE = require('uc.micro/categories/P/regex');\n\n// Currently without astral characters support.\nfunction isPunctChar(ch) {\n  return UNICODE_PUNCT_RE.test(ch);\n}\n\n\n// Markdown ASCII punctuation characters.\n//\n// !, \", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @, [, \\, ], ^, _, `, {, |, }, or ~\n// http://spec.commonmark.org/0.15/#ascii-punctuation-character\n//\n// Don't confuse with unicode punctuation !!! It lacks some chars in ascii range.\n//\nfunction isMdAsciiPunct(ch) {\n  switch (ch) {\n    case 0x21/* ! */:\n    case 0x22/* \" */:\n    case 0x23/* # */:\n    case 0x24/* $ */:\n    case 0x25/* % */:\n    case 0x26/* & */:\n    case 0x27/* ' */:\n    case 0x28/* ( */:\n    case 0x29/* ) */:\n    case 0x2A/* * */:\n    case 0x2B/* + */:\n    case 0x2C/* , */:\n    case 0x2D/* - */:\n    case 0x2E/* . */:\n    case 0x2F/* / */:\n    case 0x3A/* : */:\n    case 0x3B/* ; */:\n    case 0x3C/* < */:\n    case 0x3D/* = */:\n    case 0x3E/* > */:\n    case 0x3F/* ? */:\n    case 0x40/* @ */:\n    case 0x5B/* [ */:\n    case 0x5C/* \\ */:\n    case 0x5D/* ] */:\n    case 0x5E/* ^ */:\n    case 0x5F/* _ */:\n    case 0x60/* ` */:\n    case 0x7B/* { */:\n    case 0x7C/* | */:\n    case 0x7D/* } */:\n    case 0x7E/* ~ */:\n      return true;\n    default:\n      return false;\n  }\n}\n\n// Hepler to unify [reference labels].\n//\nfunction normalizeReference(str) {\n  // Trim and collapse whitespace\n  //\n  str = str.trim().replace(/\\s+/g, ' ');\n\n  // In node v10 '\u1E9E'.toLowerCase() === '\u1E7E', which is presumed to be a bug\n  // fixed in v12 (couldn't find any details).\n  //\n  // So treat this one as a special case\n  // (remove this when node v10 is no longer supported).\n  //\n  if ('\u1E9E'.toLowerCase() === '\u1E7E') {\n    str = str.replace(/\u1E9E/g, '\u00DF');\n  }\n\n  // .toLowerCase().toUpperCase() should get rid of all differences\n  // between letter variants.\n  //\n  // Simple .toLowerCase() doesn't normalize 125 code points correctly,\n  // and .toUpperCase doesn't normalize 6 of them (list of exceptions:\n  // \u0130, \u03F4, \u1E9E, \u2126, \u212A, \u212B - those are already uppercased, but have differently\n  // uppercased versions).\n  //\n  // Here's an example showing how it happens. Lets take greek letter omega:\n  // uppercase U+0398 (\u0398), U+03f4 (\u03F4) and lowercase U+03b8 (\u03B8), U+03d1 (\u03D1)\n  //\n  // Unicode entries:\n  // 0398;GREEK CAPITAL LETTER THETA;Lu;0;L;;;;;N;;;;03B8;\n  // 03B8;GREEK SMALL LETTER THETA;Ll;0;L;;;;;N;;;0398;;0398\n  // 03D1;GREEK THETA SYMBOL;Ll;0;L;<compat> 03B8;;;;N;GREEK SMALL LETTER SCRIPT THETA;;0398;;0398\n  // 03F4;GREEK CAPITAL THETA SYMBOL;Lu;0;L;<compat> 0398;;;;N;;;;03B8;\n  //\n  // Case-insensitive comparison should treat all of them as equivalent.\n  //\n  // But .toLowerCase() doesn't change \u03D1 (it's already lowercase),\n  // and .toUpperCase() doesn't change \u03F4 (already uppercase).\n  //\n  // Applying first lower then upper case normalizes any character:\n  // '\\u0398\\u03f4\\u03b8\\u03d1'.toLowerCase().toUpperCase() === '\\u0398\\u0398\\u0398\\u0398'\n  //\n  // Note: this is equivalent to unicode case folding; unicode normalization\n  // is a different step that is not required here.\n  //\n  // Final result should be uppercased, because it's later stored in an object\n  // (this avoid a conflict with Object.prototype members,\n  // most notably, `__proto__`)\n  //\n  return str.toLowerCase().toUpperCase();\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\n// Re-export libraries commonly used in both markdown-it and its plugins,\n// so plugins won't have to depend on them explicitly, which reduces their\n// bundled size (e.g. a browser build).\n//\nexports.lib                 = {};\nexports.lib.mdurl           = require('mdurl');\nexports.lib.ucmicro         = require('uc.micro');\n\nexports.assign              = assign;\nexports.isString            = isString;\nexports.has                 = has;\nexports.unescapeMd          = unescapeMd;\nexports.unescapeAll         = unescapeAll;\nexports.isValidEntityCode   = isValidEntityCode;\nexports.fromCodePoint       = fromCodePoint;\n// exports.replaceEntities     = replaceEntities;\nexports.escapeHtml          = escapeHtml;\nexports.arrayReplaceAt      = arrayReplaceAt;\nexports.isSpace             = isSpace;\nexports.isWhiteSpace        = isWhiteSpace;\nexports.isMdAsciiPunct      = isMdAsciiPunct;\nexports.isPunctChar         = isPunctChar;\nexports.escapeRE            = escapeRE;\nexports.normalizeReference  = normalizeReference;\n", "// Parse link label\n//\n// this function assumes that first character (\"[\") already matches;\n// returns the end of the label\n//\n'use strict';\n\nmodule.exports = function parseLinkLabel(state, start, disableNested) {\n  var level, found, marker, prevPos,\n      labelEnd = -1,\n      max = state.posMax,\n      oldPos = state.pos;\n\n  state.pos = start + 1;\n  level = 1;\n\n  while (state.pos < max) {\n    marker = state.src.charCodeAt(state.pos);\n    if (marker === 0x5D /* ] */) {\n      level--;\n      if (level === 0) {\n        found = true;\n        break;\n      }\n    }\n\n    prevPos = state.pos;\n    state.md.inline.skipToken(state);\n    if (marker === 0x5B /* [ */) {\n      if (prevPos === state.pos - 1) {\n        // increase level if we find text `[`, which is not a part of any token\n        level++;\n      } else if (disableNested) {\n        state.pos = oldPos;\n        return -1;\n      }\n    }\n  }\n\n  if (found) {\n    labelEnd = state.pos;\n  }\n\n  // restore old state\n  state.pos = oldPos;\n\n  return labelEnd;\n};\n", "// Parse link destination\n//\n'use strict';\n\n\nvar unescapeAll = require('../common/utils').unescapeAll;\n\n\nmodule.exports = function parseLinkDestination(str, pos, max) {\n  var code, level,\n      lines = 0,\n      start = pos,\n      result = {\n        ok: false,\n        pos: 0,\n        lines: 0,\n        str: ''\n      };\n\n  if (str.charCodeAt(pos) === 0x3C /* < */) {\n    pos++;\n    while (pos < max) {\n      code = str.charCodeAt(pos);\n      if (code === 0x0A /* \\n */) { return result; }\n      if (code === 0x3C /* < */) { return result; }\n      if (code === 0x3E /* > */) {\n        result.pos = pos + 1;\n        result.str = unescapeAll(str.slice(start + 1, pos));\n        result.ok = true;\n        return result;\n      }\n      if (code === 0x5C /* \\ */ && pos + 1 < max) {\n        pos += 2;\n        continue;\n      }\n\n      pos++;\n    }\n\n    // no closing '>'\n    return result;\n  }\n\n  // this should be ... } else { ... branch\n\n  level = 0;\n  while (pos < max) {\n    code = str.charCodeAt(pos);\n\n    if (code === 0x20) { break; }\n\n    // ascii control characters\n    if (code < 0x20 || code === 0x7F) { break; }\n\n    if (code === 0x5C /* \\ */ && pos + 1 < max) {\n      if (str.charCodeAt(pos + 1) === 0x20) { break; }\n      pos += 2;\n      continue;\n    }\n\n    if (code === 0x28 /* ( */) {\n      level++;\n      if (level > 32) { return result; }\n    }\n\n    if (code === 0x29 /* ) */) {\n      if (level === 0) { break; }\n      level--;\n    }\n\n    pos++;\n  }\n\n  if (start === pos) { return result; }\n  if (level !== 0) { return result; }\n\n  result.str = unescapeAll(str.slice(start, pos));\n  result.lines = lines;\n  result.pos = pos;\n  result.ok = true;\n  return result;\n};\n", "// Parse link title\n//\n'use strict';\n\n\nvar unescapeAll = require('../common/utils').unescapeAll;\n\n\nmodule.exports = function parseLinkTitle(str, pos, max) {\n  var code,\n      marker,\n      lines = 0,\n      start = pos,\n      result = {\n        ok: false,\n        pos: 0,\n        lines: 0,\n        str: ''\n      };\n\n  if (pos >= max) { return result; }\n\n  marker = str.charCodeAt(pos);\n\n  if (marker !== 0x22 /* \" */ && marker !== 0x27 /* ' */ && marker !== 0x28 /* ( */) { return result; }\n\n  pos++;\n\n  // if opening marker is \"(\", switch it to closing marker \")\"\n  if (marker === 0x28) { marker = 0x29; }\n\n  while (pos < max) {\n    code = str.charCodeAt(pos);\n    if (code === marker) {\n      result.pos = pos + 1;\n      result.lines = lines;\n      result.str = unescapeAll(str.slice(start + 1, pos));\n      result.ok = true;\n      return result;\n    } else if (code === 0x28 /* ( */ && marker === 0x29 /* ) */) {\n      return result;\n    } else if (code === 0x0A) {\n      lines++;\n    } else if (code === 0x5C /* \\ */ && pos + 1 < max) {\n      pos++;\n      if (str.charCodeAt(pos) === 0x0A) {\n        lines++;\n      }\n    }\n\n    pos++;\n  }\n\n  return result;\n};\n", "// Just a shortcut for bulk export\n'use strict';\n\n\nexports.parseLinkLabel       = require('./parse_link_label');\nexports.parseLinkDestination = require('./parse_link_destination');\nexports.parseLinkTitle       = require('./parse_link_title');\n", "/**\n * class Renderer\n *\n * Generates HTML from parsed token stream. Each instance has independent\n * copy of rules. Those can be rewritten with ease. Also, you can add new\n * rules if you create plugin and adds new token types.\n **/\n'use strict';\n\n\nvar assign          = require('./common/utils').assign;\nvar unescapeAll     = require('./common/utils').unescapeAll;\nvar escapeHtml      = require('./common/utils').escapeHtml;\n\n\n////////////////////////////////////////////////////////////////////////////////\n\nvar default_rules = {};\n\n\ndefault_rules.code_inline = function (tokens, idx, options, env, slf) {\n  var token = tokens[idx];\n\n  return  '<code' + slf.renderAttrs(token) + '>' +\n          escapeHtml(tokens[idx].content) +\n          '</code>';\n};\n\n\ndefault_rules.code_block = function (tokens, idx, options, env, slf) {\n  var token = tokens[idx];\n\n  return  '<pre' + slf.renderAttrs(token) + '><code>' +\n          escapeHtml(tokens[idx].content) +\n          '</code></pre>\\n';\n};\n\n\ndefault_rules.fence = function (tokens, idx, options, env, slf) {\n  var token = tokens[idx],\n      info = token.info ? unescapeAll(token.info).trim() : '',\n      langName = '',\n      langAttrs = '',\n      highlighted, i, arr, tmpAttrs, tmpToken;\n\n  if (info) {\n    arr = info.split(/(\\s+)/g);\n    langName = arr[0];\n    langAttrs = arr.slice(2).join('');\n  }\n\n  if (options.highlight) {\n    highlighted = options.highlight(token.content, langName, langAttrs) || escapeHtml(token.content);\n  } else {\n    highlighted = escapeHtml(token.content);\n  }\n\n  if (highlighted.indexOf('<pre') === 0) {\n    return highlighted + '\\n';\n  }\n\n  // If language exists, inject class gently, without modifying original token.\n  // May be, one day we will add .deepClone() for token and simplify this part, but\n  // now we prefer to keep things local.\n  if (info) {\n    i        = token.attrIndex('class');\n    tmpAttrs = token.attrs ? token.attrs.slice() : [];\n\n    if (i < 0) {\n      tmpAttrs.push([ 'class', options.langPrefix + langName ]);\n    } else {\n      tmpAttrs[i] = tmpAttrs[i].slice();\n      tmpAttrs[i][1] += ' ' + options.langPrefix + langName;\n    }\n\n    // Fake token just to render attributes\n    tmpToken = {\n      attrs: tmpAttrs\n    };\n\n    return  '<pre><code' + slf.renderAttrs(tmpToken) + '>'\n          + highlighted\n          + '</code></pre>\\n';\n  }\n\n\n  return  '<pre><code' + slf.renderAttrs(token) + '>'\n        + highlighted\n        + '</code></pre>\\n';\n};\n\n\ndefault_rules.image = function (tokens, idx, options, env, slf) {\n  var token = tokens[idx];\n\n  // \"alt\" attr MUST be set, even if empty. Because it's mandatory and\n  // should be placed on proper position for tests.\n  //\n  // Replace content with actual value\n\n  token.attrs[token.attrIndex('alt')][1] =\n    slf.renderInlineAsText(token.children, options, env);\n\n  return slf.renderToken(tokens, idx, options);\n};\n\n\ndefault_rules.hardbreak = function (tokens, idx, options /*, env */) {\n  return options.xhtmlOut ? '<br />\\n' : '<br>\\n';\n};\ndefault_rules.softbreak = function (tokens, idx, options /*, env */) {\n  return options.breaks ? (options.xhtmlOut ? '<br />\\n' : '<br>\\n') : '\\n';\n};\n\n\ndefault_rules.text = function (tokens, idx /*, options, env */) {\n  return escapeHtml(tokens[idx].content);\n};\n\n\ndefault_rules.html_block = function (tokens, idx /*, options, env */) {\n  return tokens[idx].content;\n};\ndefault_rules.html_inline = function (tokens, idx /*, options, env */) {\n  return tokens[idx].content;\n};\n\n\n/**\n * new Renderer()\n *\n * Creates new [[Renderer]] instance and fill [[Renderer#rules]] with defaults.\n **/\nfunction Renderer() {\n\n  /**\n   * Renderer#rules -> Object\n   *\n   * Contains render rules for tokens. Can be updated and extended.\n   *\n   * ##### Example\n   *\n   * ```javascript\n   * var md = require('markdown-it')();\n   *\n   * md.renderer.rules.strong_open  = function () { return '<b>'; };\n   * md.renderer.rules.strong_close = function () { return '</b>'; };\n   *\n   * var result = md.renderInline(...);\n   * ```\n   *\n   * Each rule is called as independent static function with fixed signature:\n   *\n   * ```javascript\n   * function my_token_render(tokens, idx, options, env, renderer) {\n   *   // ...\n   *   return renderedHTML;\n   * }\n   * ```\n   *\n   * See [source code](https://github.com/markdown-it/markdown-it/blob/master/lib/renderer.js)\n   * for more details and examples.\n   **/\n  this.rules = assign({}, default_rules);\n}\n\n\n/**\n * Renderer.renderAttrs(token) -> String\n *\n * Render token attributes to string.\n **/\nRenderer.prototype.renderAttrs = function renderAttrs(token) {\n  var i, l, result;\n\n  if (!token.attrs) { return ''; }\n\n  result = '';\n\n  for (i = 0, l = token.attrs.length; i < l; i++) {\n    result += ' ' + escapeHtml(token.attrs[i][0]) + '=\"' + escapeHtml(token.attrs[i][1]) + '\"';\n  }\n\n  return result;\n};\n\n\n/**\n * Renderer.renderToken(tokens, idx, options) -> String\n * - tokens (Array): list of tokens\n * - idx (Numbed): token index to render\n * - options (Object): params of parser instance\n *\n * Default token renderer. Can be overriden by custom function\n * in [[Renderer#rules]].\n **/\nRenderer.prototype.renderToken = function renderToken(tokens, idx, options) {\n  var nextToken,\n      result = '',\n      needLf = false,\n      token = tokens[idx];\n\n  // Tight list paragraphs\n  if (token.hidden) {\n    return '';\n  }\n\n  // Insert a newline between hidden paragraph and subsequent opening\n  // block-level tag.\n  //\n  // For example, here we should insert a newline before blockquote:\n  //  - a\n  //    >\n  //\n  if (token.block && token.nesting !== -1 && idx && tokens[idx - 1].hidden) {\n    result += '\\n';\n  }\n\n  // Add token name, e.g. `<img`\n  result += (token.nesting === -1 ? '</' : '<') + token.tag;\n\n  // Encode attributes, e.g. `<img src=\"foo\"`\n  result += this.renderAttrs(token);\n\n  // Add a slash for self-closing tags, e.g. `<img src=\"foo\" /`\n  if (token.nesting === 0 && options.xhtmlOut) {\n    result += ' /';\n  }\n\n  // Check if we need to add a newline after this tag\n  if (token.block) {\n    needLf = true;\n\n    if (token.nesting === 1) {\n      if (idx + 1 < tokens.length) {\n        nextToken = tokens[idx + 1];\n\n        if (nextToken.type === 'inline' || nextToken.hidden) {\n          // Block-level tag containing an inline tag.\n          //\n          needLf = false;\n\n        } else if (nextToken.nesting === -1 && nextToken.tag === token.tag) {\n          // Opening tag + closing tag of the same type. E.g. `<li></li>`.\n          //\n          needLf = false;\n        }\n      }\n    }\n  }\n\n  result += needLf ? '>\\n' : '>';\n\n  return result;\n};\n\n\n/**\n * Renderer.renderInline(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to render\n * - options (Object): params of parser instance\n * - env (Object): additional data from parsed input (references, for example)\n *\n * The same as [[Renderer.render]], but for single token of `inline` type.\n **/\nRenderer.prototype.renderInline = function (tokens, options, env) {\n  var type,\n      result = '',\n      rules = this.rules;\n\n  for (var i = 0, len = tokens.length; i < len; i++) {\n    type = tokens[i].type;\n\n    if (typeof rules[type] !== 'undefined') {\n      result += rules[type](tokens, i, options, env, this);\n    } else {\n      result += this.renderToken(tokens, i, options);\n    }\n  }\n\n  return result;\n};\n\n\n/** internal\n * Renderer.renderInlineAsText(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to render\n * - options (Object): params of parser instance\n * - env (Object): additional data from parsed input (references, for example)\n *\n * Special kludge for image `alt` attributes to conform CommonMark spec.\n * Don't try to use it! Spec requires to show `alt` content with stripped markup,\n * instead of simple escaping.\n **/\nRenderer.prototype.renderInlineAsText = function (tokens, options, env) {\n  var result = '';\n\n  for (var i = 0, len = tokens.length; i < len; i++) {\n    if (tokens[i].type === 'text') {\n      result += tokens[i].content;\n    } else if (tokens[i].type === 'image') {\n      result += this.renderInlineAsText(tokens[i].children, options, env);\n    } else if (tokens[i].type === 'softbreak') {\n      result += '\\n';\n    }\n  }\n\n  return result;\n};\n\n\n/**\n * Renderer.render(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to render\n * - options (Object): params of parser instance\n * - env (Object): additional data from parsed input (references, for example)\n *\n * Takes token stream and generates HTML. Probably, you will never need to call\n * this method directly.\n **/\nRenderer.prototype.render = function (tokens, options, env) {\n  var i, len, type,\n      result = '',\n      rules = this.rules;\n\n  for (i = 0, len = tokens.length; i < len; i++) {\n    type = tokens[i].type;\n\n    if (type === 'inline') {\n      result += this.renderInline(tokens[i].children, options, env);\n    } else if (typeof rules[type] !== 'undefined') {\n      result += rules[tokens[i].type](tokens, i, options, env, this);\n    } else {\n      result += this.renderToken(tokens, i, options, env);\n    }\n  }\n\n  return result;\n};\n\nmodule.exports = Renderer;\n", "/**\n * class Ruler\n *\n * Helper class, used by [[MarkdownIt#core]], [[MarkdownIt#block]] and\n * [[MarkdownIt#inline]] to manage sequences of functions (rules):\n *\n * - keep rules in defined order\n * - assign the name to each rule\n * - enable/disable rules\n * - add/replace rules\n * - allow assign rules to additional named chains (in the same)\n * - cacheing lists of active rules\n *\n * You will not need use this class directly until write plugins. For simple\n * rules control use [[MarkdownIt.disable]], [[MarkdownIt.enable]] and\n * [[MarkdownIt.use]].\n **/\n'use strict';\n\n\n/**\n * new Ruler()\n **/\nfunction Ruler() {\n  // List of added rules. Each element is:\n  //\n  // {\n  //   name: XXX,\n  //   enabled: Boolean,\n  //   fn: Function(),\n  //   alt: [ name2, name3 ]\n  // }\n  //\n  this.__rules__ = [];\n\n  // Cached rule chains.\n  //\n  // First level - chain name, '' for default.\n  // Second level - diginal anchor for fast filtering by charcodes.\n  //\n  this.__cache__ = null;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Helper methods, should not be used directly\n\n\n// Find rule index by name\n//\nRuler.prototype.__find__ = function (name) {\n  for (var i = 0; i < this.__rules__.length; i++) {\n    if (this.__rules__[i].name === name) {\n      return i;\n    }\n  }\n  return -1;\n};\n\n\n// Build rules lookup cache\n//\nRuler.prototype.__compile__ = function () {\n  var self = this;\n  var chains = [ '' ];\n\n  // collect unique names\n  self.__rules__.forEach(function (rule) {\n    if (!rule.enabled) { return; }\n\n    rule.alt.forEach(function (altName) {\n      if (chains.indexOf(altName) < 0) {\n        chains.push(altName);\n      }\n    });\n  });\n\n  self.__cache__ = {};\n\n  chains.forEach(function (chain) {\n    self.__cache__[chain] = [];\n    self.__rules__.forEach(function (rule) {\n      if (!rule.enabled) { return; }\n\n      if (chain && rule.alt.indexOf(chain) < 0) { return; }\n\n      self.__cache__[chain].push(rule.fn);\n    });\n  });\n};\n\n\n/**\n * Ruler.at(name, fn [, options])\n * - name (String): rule name to replace.\n * - fn (Function): new rule function.\n * - options (Object): new rule options (not mandatory).\n *\n * Replace rule by name with new function & options. Throws error if name not\n * found.\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * Replace existing typographer replacement rule with new one:\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.core.ruler.at('replacements', function replace(state) {\n *   //...\n * });\n * ```\n **/\nRuler.prototype.at = function (name, fn, options) {\n  var index = this.__find__(name);\n  var opt = options || {};\n\n  if (index === -1) { throw new Error('Parser rule not found: ' + name); }\n\n  this.__rules__[index].fn = fn;\n  this.__rules__[index].alt = opt.alt || [];\n  this.__cache__ = null;\n};\n\n\n/**\n * Ruler.before(beforeName, ruleName, fn [, options])\n * - beforeName (String): new rule will be added before this one.\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Add new rule to chain before one with given name. See also\n * [[Ruler.after]], [[Ruler.push]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.block.ruler.before('paragraph', 'my_rule', function replace(state) {\n *   //...\n * });\n * ```\n **/\nRuler.prototype.before = function (beforeName, ruleName, fn, options) {\n  var index = this.__find__(beforeName);\n  var opt = options || {};\n\n  if (index === -1) { throw new Error('Parser rule not found: ' + beforeName); }\n\n  this.__rules__.splice(index, 0, {\n    name: ruleName,\n    enabled: true,\n    fn: fn,\n    alt: opt.alt || []\n  });\n\n  this.__cache__ = null;\n};\n\n\n/**\n * Ruler.after(afterName, ruleName, fn [, options])\n * - afterName (String): new rule will be added after this one.\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Add new rule to chain after one with given name. See also\n * [[Ruler.before]], [[Ruler.push]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.inline.ruler.after('text', 'my_rule', function replace(state) {\n *   //...\n * });\n * ```\n **/\nRuler.prototype.after = function (afterName, ruleName, fn, options) {\n  var index = this.__find__(afterName);\n  var opt = options || {};\n\n  if (index === -1) { throw new Error('Parser rule not found: ' + afterName); }\n\n  this.__rules__.splice(index + 1, 0, {\n    name: ruleName,\n    enabled: true,\n    fn: fn,\n    alt: opt.alt || []\n  });\n\n  this.__cache__ = null;\n};\n\n/**\n * Ruler.push(ruleName, fn [, options])\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Push new rule to the end of chain. See also\n * [[Ruler.before]], [[Ruler.after]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.core.ruler.push('my_rule', function replace(state) {\n *   //...\n * });\n * ```\n **/\nRuler.prototype.push = function (ruleName, fn, options) {\n  var opt = options || {};\n\n  this.__rules__.push({\n    name: ruleName,\n    enabled: true,\n    fn: fn,\n    alt: opt.alt || []\n  });\n\n  this.__cache__ = null;\n};\n\n\n/**\n * Ruler.enable(list [, ignoreInvalid]) -> Array\n * - list (String|Array): list of rule names to enable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable rules with given names. If any rule name not found - throw Error.\n * Errors can be disabled by second param.\n *\n * Returns list of found rule names (if no exception happened).\n *\n * See also [[Ruler.disable]], [[Ruler.enableOnly]].\n **/\nRuler.prototype.enable = function (list, ignoreInvalid) {\n  if (!Array.isArray(list)) { list = [ list ]; }\n\n  var result = [];\n\n  // Search by name and enable\n  list.forEach(function (name) {\n    var idx = this.__find__(name);\n\n    if (idx < 0) {\n      if (ignoreInvalid) { return; }\n      throw new Error('Rules manager: invalid rule name ' + name);\n    }\n    this.__rules__[idx].enabled = true;\n    result.push(name);\n  }, this);\n\n  this.__cache__ = null;\n  return result;\n};\n\n\n/**\n * Ruler.enableOnly(list [, ignoreInvalid])\n * - list (String|Array): list of rule names to enable (whitelist).\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable rules with given names, and disable everything else. If any rule name\n * not found - throw Error. Errors can be disabled by second param.\n *\n * See also [[Ruler.disable]], [[Ruler.enable]].\n **/\nRuler.prototype.enableOnly = function (list, ignoreInvalid) {\n  if (!Array.isArray(list)) { list = [ list ]; }\n\n  this.__rules__.forEach(function (rule) { rule.enabled = false; });\n\n  this.enable(list, ignoreInvalid);\n};\n\n\n/**\n * Ruler.disable(list [, ignoreInvalid]) -> Array\n * - list (String|Array): list of rule names to disable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Disable rules with given names. If any rule name not found - throw Error.\n * Errors can be disabled by second param.\n *\n * Returns list of found rule names (if no exception happened).\n *\n * See also [[Ruler.enable]], [[Ruler.enableOnly]].\n **/\nRuler.prototype.disable = function (list, ignoreInvalid) {\n  if (!Array.isArray(list)) { list = [ list ]; }\n\n  var result = [];\n\n  // Search by name and disable\n  list.forEach(function (name) {\n    var idx = this.__find__(name);\n\n    if (idx < 0) {\n      if (ignoreInvalid) { return; }\n      throw new Error('Rules manager: invalid rule name ' + name);\n    }\n    this.__rules__[idx].enabled = false;\n    result.push(name);\n  }, this);\n\n  this.__cache__ = null;\n  return result;\n};\n\n\n/**\n * Ruler.getRules(chainName) -> Array\n *\n * Return array of active functions (rules) for given chain name. It analyzes\n * rules configuration, compiles caches if not exists and returns result.\n *\n * Default chain name is `''` (empty string). It can't be skipped. That's\n * done intentionally, to keep signature monomorphic for high speed.\n **/\nRuler.prototype.getRules = function (chainName) {\n  if (this.__cache__ === null) {\n    this.__compile__();\n  }\n\n  // Chain can be empty, if rules disabled. But we still have to return Array.\n  return this.__cache__[chainName] || [];\n};\n\nmodule.exports = Ruler;\n", "// Normalize input string\n\n'use strict';\n\n\n// https://spec.commonmark.org/0.29/#line-ending\nvar NEWLINES_RE  = /\\r\\n?|\\n/g;\nvar NULL_RE      = /\\0/g;\n\n\nmodule.exports = function normalize(state) {\n  var str;\n\n  // Normalize newlines\n  str = state.src.replace(NEWLINES_RE, '\\n');\n\n  // Replace NULL characters\n  str = str.replace(NULL_RE, '\\uFFFD');\n\n  state.src = str;\n};\n", "'use strict';\n\n\nmodule.exports = function block(state) {\n  var token;\n\n  if (state.inlineMode) {\n    token          = new state.Token('inline', '', 0);\n    token.content  = state.src;\n    token.map      = [ 0, 1 ];\n    token.children = [];\n    state.tokens.push(token);\n  } else {\n    state.md.block.parse(state.src, state.md, state.env, state.tokens);\n  }\n};\n", "'use strict';\n\nmodule.exports = function inline(state) {\n  var tokens = state.tokens, tok, i, l;\n\n  // Parse inlines\n  for (i = 0, l = tokens.length; i < l; i++) {\n    tok = tokens[i];\n    if (tok.type === 'inline') {\n      state.md.inline.parse(tok.content, state.md, state.env, tok.children);\n    }\n  }\n};\n", "// Replace link-like texts with link nodes.\n//\n// Currently restricted by `md.validateLink()` to http/https/ftp\n//\n'use strict';\n\n\nvar arrayReplaceAt = require('../common/utils').arrayReplaceAt;\n\n\nfunction isLinkOpen(str) {\n  return /^<a[>\\s]/i.test(str);\n}\nfunction isLinkClose(str) {\n  return /^<\\/a\\s*>/i.test(str);\n}\n\n\nmodule.exports = function linkify(state) {\n  var i, j, l, tokens, token, currentToken, nodes, ln, text, pos, lastPos,\n      level, htmlLinkLevel, url, fullUrl, urlText,\n      blockTokens = state.tokens,\n      links;\n\n  if (!state.md.options.linkify) { return; }\n\n  for (j = 0, l = blockTokens.length; j < l; j++) {\n    if (blockTokens[j].type !== 'inline' ||\n        !state.md.linkify.pretest(blockTokens[j].content)) {\n      continue;\n    }\n\n    tokens = blockTokens[j].children;\n\n    htmlLinkLevel = 0;\n\n    // We scan from the end, to keep position when new tags added.\n    // Use reversed logic in links start/end match\n    for (i = tokens.length - 1; i >= 0; i--) {\n      currentToken = tokens[i];\n\n      // Skip content of markdown links\n      if (currentToken.type === 'link_close') {\n        i--;\n        while (tokens[i].level !== currentToken.level && tokens[i].type !== 'link_open') {\n          i--;\n        }\n        continue;\n      }\n\n      // Skip content of html tag links\n      if (currentToken.type === 'html_inline') {\n        if (isLinkOpen(currentToken.content) && htmlLinkLevel > 0) {\n          htmlLinkLevel--;\n        }\n        if (isLinkClose(currentToken.content)) {\n          htmlLinkLevel++;\n        }\n      }\n      if (htmlLinkLevel > 0) { continue; }\n\n      if (currentToken.type === 'text' && state.md.linkify.test(currentToken.content)) {\n\n        text = currentToken.content;\n        links = state.md.linkify.match(text);\n\n        // Now split string to nodes\n        nodes = [];\n        level = currentToken.level;\n        lastPos = 0;\n\n        for (ln = 0; ln < links.length; ln++) {\n\n          url = links[ln].url;\n          fullUrl = state.md.normalizeLink(url);\n          if (!state.md.validateLink(fullUrl)) { continue; }\n\n          urlText = links[ln].text;\n\n          // Linkifier might send raw hostnames like \"example.com\", where url\n          // starts with domain name. So we prepend http:// in those cases,\n          // and remove it afterwards.\n          //\n          if (!links[ln].schema) {\n            urlText = state.md.normalizeLinkText('http://' + urlText).replace(/^http:\\/\\//, '');\n          } else if (links[ln].schema === 'mailto:' && !/^mailto:/i.test(urlText)) {\n            urlText = state.md.normalizeLinkText('mailto:' + urlText).replace(/^mailto:/, '');\n          } else {\n            urlText = state.md.normalizeLinkText(urlText);\n          }\n\n          pos = links[ln].index;\n\n          if (pos > lastPos) {\n            token         = new state.Token('text', '', 0);\n            token.content = text.slice(lastPos, pos);\n            token.level   = level;\n            nodes.push(token);\n          }\n\n          token         = new state.Token('link_open', 'a', 1);\n          token.attrs   = [ [ 'href', fullUrl ] ];\n          token.level   = level++;\n          token.markup  = 'linkify';\n          token.info    = 'auto';\n          nodes.push(token);\n\n          token         = new state.Token('text', '', 0);\n          token.content = urlText;\n          token.level   = level;\n          nodes.push(token);\n\n          token         = new state.Token('link_close', 'a', -1);\n          token.level   = --level;\n          token.markup  = 'linkify';\n          token.info    = 'auto';\n          nodes.push(token);\n\n          lastPos = links[ln].lastIndex;\n        }\n        if (lastPos < text.length) {\n          token         = new state.Token('text', '', 0);\n          token.content = text.slice(lastPos);\n          token.level   = level;\n          nodes.push(token);\n        }\n\n        // replace current node\n        blockTokens[j].children = tokens = arrayReplaceAt(tokens, i, nodes);\n      }\n    }\n  }\n};\n", "// Simple typographic replacements\n//\n// (c) (C) \u2192 \u00A9\n// (tm) (TM) \u2192 \u2122\n// (r) (R) \u2192 \u00AE\n// +- \u2192 \u00B1\n// (p) (P) -> \u00A7\n// ... \u2192 \u2026 (also ?.... \u2192 ?.., !.... \u2192 !..)\n// ???????? \u2192 ???, !!!!! \u2192 !!!, `,,` \u2192 `,`\n// -- \u2192 &ndash;, --- \u2192 &mdash;\n//\n'use strict';\n\n// TODO:\n// - fractionals 1/2, 1/4, 3/4 -> \u00BD, \u00BC, \u00BE\n// - miltiplication 2 x 4 -> 2 \u00D7 4\n\nvar RARE_RE = /\\+-|\\.\\.|\\?\\?\\?\\?|!!!!|,,|--/;\n\n// Workaround for phantomjs - need regex without /g flag,\n// or root check will fail every second time\nvar SCOPED_ABBR_TEST_RE = /\\((c|tm|r|p)\\)/i;\n\nvar SCOPED_ABBR_RE = /\\((c|tm|r|p)\\)/ig;\nvar SCOPED_ABBR = {\n  c: '\u00A9',\n  r: '\u00AE',\n  p: '\u00A7',\n  tm: '\u2122'\n};\n\nfunction replaceFn(match, name) {\n  return SCOPED_ABBR[name.toLowerCase()];\n}\n\nfunction replace_scoped(inlineTokens) {\n  var i, token, inside_autolink = 0;\n\n  for (i = inlineTokens.length - 1; i >= 0; i--) {\n    token = inlineTokens[i];\n\n    if (token.type === 'text' && !inside_autolink) {\n      token.content = token.content.replace(SCOPED_ABBR_RE, replaceFn);\n    }\n\n    if (token.type === 'link_open' && token.info === 'auto') {\n      inside_autolink--;\n    }\n\n    if (token.type === 'link_close' && token.info === 'auto') {\n      inside_autolink++;\n    }\n  }\n}\n\nfunction replace_rare(inlineTokens) {\n  var i, token, inside_autolink = 0;\n\n  for (i = inlineTokens.length - 1; i >= 0; i--) {\n    token = inlineTokens[i];\n\n    if (token.type === 'text' && !inside_autolink) {\n      if (RARE_RE.test(token.content)) {\n        token.content = token.content\n          .replace(/\\+-/g, '\u00B1')\n          // .., ..., ....... -> \u2026\n          // but ?..... & !..... -> ?.. & !..\n          .replace(/\\.{2,}/g, '\u2026').replace(/([?!])\u2026/g, '$1..')\n          .replace(/([?!]){4,}/g, '$1$1$1').replace(/,{2,}/g, ',')\n          // em-dash\n          .replace(/(^|[^-])---(?=[^-]|$)/mg, '$1\\u2014')\n          // en-dash\n          .replace(/(^|\\s)--(?=\\s|$)/mg, '$1\\u2013')\n          .replace(/(^|[^-\\s])--(?=[^-\\s]|$)/mg, '$1\\u2013');\n      }\n    }\n\n    if (token.type === 'link_open' && token.info === 'auto') {\n      inside_autolink--;\n    }\n\n    if (token.type === 'link_close' && token.info === 'auto') {\n      inside_autolink++;\n    }\n  }\n}\n\n\nmodule.exports = function replace(state) {\n  var blkIdx;\n\n  if (!state.md.options.typographer) { return; }\n\n  for (blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {\n\n    if (state.tokens[blkIdx].type !== 'inline') { continue; }\n\n    if (SCOPED_ABBR_TEST_RE.test(state.tokens[blkIdx].content)) {\n      replace_scoped(state.tokens[blkIdx].children);\n    }\n\n    if (RARE_RE.test(state.tokens[blkIdx].content)) {\n      replace_rare(state.tokens[blkIdx].children);\n    }\n\n  }\n};\n", "// Convert straight quotation marks to typographic ones\n//\n'use strict';\n\n\nvar isWhiteSpace   = require('../common/utils').isWhiteSpace;\nvar isPunctChar    = require('../common/utils').isPunctChar;\nvar isMdAsciiPunct = require('../common/utils').isMdAsciiPunct;\n\nvar QUOTE_TEST_RE = /['\"]/;\nvar QUOTE_RE = /['\"]/g;\nvar APOSTROPHE = '\\u2019'; /* \u2019 */\n\n\nfunction replaceAt(str, index, ch) {\n  return str.substr(0, index) + ch + str.substr(index + 1);\n}\n\nfunction process_inlines(tokens, state) {\n  var i, token, text, t, pos, max, thisLevel, item, lastChar, nextChar,\n      isLastPunctChar, isNextPunctChar, isLastWhiteSpace, isNextWhiteSpace,\n      canOpen, canClose, j, isSingle, stack, openQuote, closeQuote;\n\n  stack = [];\n\n  for (i = 0; i < tokens.length; i++) {\n    token = tokens[i];\n\n    thisLevel = tokens[i].level;\n\n    for (j = stack.length - 1; j >= 0; j--) {\n      if (stack[j].level <= thisLevel) { break; }\n    }\n    stack.length = j + 1;\n\n    if (token.type !== 'text') { continue; }\n\n    text = token.content;\n    pos = 0;\n    max = text.length;\n\n    /*eslint no-labels:0,block-scoped-var:0*/\n    OUTER:\n    while (pos < max) {\n      QUOTE_RE.lastIndex = pos;\n      t = QUOTE_RE.exec(text);\n      if (!t) { break; }\n\n      canOpen = canClose = true;\n      pos = t.index + 1;\n      isSingle = (t[0] === \"'\");\n\n      // Find previous character,\n      // default to space if it's the beginning of the line\n      //\n      lastChar = 0x20;\n\n      if (t.index - 1 >= 0) {\n        lastChar = text.charCodeAt(t.index - 1);\n      } else {\n        for (j = i - 1; j >= 0; j--) {\n          if (tokens[j].type === 'softbreak' || tokens[j].type === 'hardbreak') break; // lastChar defaults to 0x20\n          if (!tokens[j].content) continue; // should skip all tokens except 'text', 'html_inline' or 'code_inline'\n\n          lastChar = tokens[j].content.charCodeAt(tokens[j].content.length - 1);\n          break;\n        }\n      }\n\n      // Find next character,\n      // default to space if it's the end of the line\n      //\n      nextChar = 0x20;\n\n      if (pos < max) {\n        nextChar = text.charCodeAt(pos);\n      } else {\n        for (j = i + 1; j < tokens.length; j++) {\n          if (tokens[j].type === 'softbreak' || tokens[j].type === 'hardbreak') break; // nextChar defaults to 0x20\n          if (!tokens[j].content) continue; // should skip all tokens except 'text', 'html_inline' or 'code_inline'\n\n          nextChar = tokens[j].content.charCodeAt(0);\n          break;\n        }\n      }\n\n      isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctChar(String.fromCharCode(lastChar));\n      isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctChar(String.fromCharCode(nextChar));\n\n      isLastWhiteSpace = isWhiteSpace(lastChar);\n      isNextWhiteSpace = isWhiteSpace(nextChar);\n\n      if (isNextWhiteSpace) {\n        canOpen = false;\n      } else if (isNextPunctChar) {\n        if (!(isLastWhiteSpace || isLastPunctChar)) {\n          canOpen = false;\n        }\n      }\n\n      if (isLastWhiteSpace) {\n        canClose = false;\n      } else if (isLastPunctChar) {\n        if (!(isNextWhiteSpace || isNextPunctChar)) {\n          canClose = false;\n        }\n      }\n\n      if (nextChar === 0x22 /* \" */ && t[0] === '\"') {\n        if (lastChar >= 0x30 /* 0 */ && lastChar <= 0x39 /* 9 */) {\n          // special case: 1\"\" - count first quote as an inch\n          canClose = canOpen = false;\n        }\n      }\n\n      if (canOpen && canClose) {\n        // Replace quotes in the middle of punctuation sequence, but not\n        // in the middle of the words, i.e.:\n        //\n        // 1. foo \" bar \" baz - not replaced\n        // 2. foo-\"-bar-\"-baz - replaced\n        // 3. foo\"bar\"baz     - not replaced\n        //\n        canOpen = isLastPunctChar;\n        canClose = isNextPunctChar;\n      }\n\n      if (!canOpen && !canClose) {\n        // middle of word\n        if (isSingle) {\n          token.content = replaceAt(token.content, t.index, APOSTROPHE);\n        }\n        continue;\n      }\n\n      if (canClose) {\n        // this could be a closing quote, rewind the stack to get a match\n        for (j = stack.length - 1; j >= 0; j--) {\n          item = stack[j];\n          if (stack[j].level < thisLevel) { break; }\n          if (item.single === isSingle && stack[j].level === thisLevel) {\n            item = stack[j];\n\n            if (isSingle) {\n              openQuote = state.md.options.quotes[2];\n              closeQuote = state.md.options.quotes[3];\n            } else {\n              openQuote = state.md.options.quotes[0];\n              closeQuote = state.md.options.quotes[1];\n            }\n\n            // replace token.content *before* tokens[item.token].content,\n            // because, if they are pointing at the same token, replaceAt\n            // could mess up indices when quote length != 1\n            token.content = replaceAt(token.content, t.index, closeQuote);\n            tokens[item.token].content = replaceAt(\n              tokens[item.token].content, item.pos, openQuote);\n\n            pos += closeQuote.length - 1;\n            if (item.token === i) { pos += openQuote.length - 1; }\n\n            text = token.content;\n            max = text.length;\n\n            stack.length = j;\n            continue OUTER;\n          }\n        }\n      }\n\n      if (canOpen) {\n        stack.push({\n          token: i,\n          pos: t.index,\n          single: isSingle,\n          level: thisLevel\n        });\n      } else if (canClose && isSingle) {\n        token.content = replaceAt(token.content, t.index, APOSTROPHE);\n      }\n    }\n  }\n}\n\n\nmodule.exports = function smartquotes(state) {\n  /*eslint max-depth:0*/\n  var blkIdx;\n\n  if (!state.md.options.typographer) { return; }\n\n  for (blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {\n\n    if (state.tokens[blkIdx].type !== 'inline' ||\n        !QUOTE_TEST_RE.test(state.tokens[blkIdx].content)) {\n      continue;\n    }\n\n    process_inlines(state.tokens[blkIdx].children, state);\n  }\n};\n", "// Token class\n\n'use strict';\n\n\n/**\n * class Token\n **/\n\n/**\n * new Token(type, tag, nesting)\n *\n * Create new token and fill passed properties.\n **/\nfunction Token(type, tag, nesting) {\n  /**\n   * Token#type -> String\n   *\n   * Type of the token (string, e.g. \"paragraph_open\")\n   **/\n  this.type     = type;\n\n  /**\n   * Token#tag -> String\n   *\n   * html tag name, e.g. \"p\"\n   **/\n  this.tag      = tag;\n\n  /**\n   * Token#attrs -> Array\n   *\n   * Html attributes. Format: `[ [ name1, value1 ], [ name2, value2 ] ]`\n   **/\n  this.attrs    = null;\n\n  /**\n   * Token#map -> Array\n   *\n   * Source map info. Format: `[ line_begin, line_end ]`\n   **/\n  this.map      = null;\n\n  /**\n   * Token#nesting -> Number\n   *\n   * Level change (number in {-1, 0, 1} set), where:\n   *\n   * -  `1` means the tag is opening\n   * -  `0` means the tag is self-closing\n   * - `-1` means the tag is closing\n   **/\n  this.nesting  = nesting;\n\n  /**\n   * Token#level -> Number\n   *\n   * nesting level, the same as `state.level`\n   **/\n  this.level    = 0;\n\n  /**\n   * Token#children -> Array\n   *\n   * An array of child nodes (inline and img tokens)\n   **/\n  this.children = null;\n\n  /**\n   * Token#content -> String\n   *\n   * In a case of self-closing tag (code, html, fence, etc.),\n   * it has contents of this tag.\n   **/\n  this.content  = '';\n\n  /**\n   * Token#markup -> String\n   *\n   * '*' or '_' for emphasis, fence string for fence, etc.\n   **/\n  this.markup   = '';\n\n  /**\n   * Token#info -> String\n   *\n   * Additional information:\n   *\n   * - Info string for \"fence\" tokens\n   * - The value \"auto\" for autolink \"link_open\" and \"link_close\" tokens\n   * - The string value of the item marker for ordered-list \"list_item_open\" tokens\n   **/\n  this.info     = '';\n\n  /**\n   * Token#meta -> Object\n   *\n   * A place for plugins to store an arbitrary data\n   **/\n  this.meta     = null;\n\n  /**\n   * Token#block -> Boolean\n   *\n   * True for block-level tokens, false for inline tokens.\n   * Used in renderer to calculate line breaks\n   **/\n  this.block    = false;\n\n  /**\n   * Token#hidden -> Boolean\n   *\n   * If it's true, ignore this element when rendering. Used for tight lists\n   * to hide paragraphs.\n   **/\n  this.hidden   = false;\n}\n\n\n/**\n * Token.attrIndex(name) -> Number\n *\n * Search attribute index by name.\n **/\nToken.prototype.attrIndex = function attrIndex(name) {\n  var attrs, i, len;\n\n  if (!this.attrs) { return -1; }\n\n  attrs = this.attrs;\n\n  for (i = 0, len = attrs.length; i < len; i++) {\n    if (attrs[i][0] === name) { return i; }\n  }\n  return -1;\n};\n\n\n/**\n * Token.attrPush(attrData)\n *\n * Add `[ name, value ]` attribute to list. Init attrs if necessary\n **/\nToken.prototype.attrPush = function attrPush(attrData) {\n  if (this.attrs) {\n    this.attrs.push(attrData);\n  } else {\n    this.attrs = [ attrData ];\n  }\n};\n\n\n/**\n * Token.attrSet(name, value)\n *\n * Set `name` attribute to `value`. Override old value if exists.\n **/\nToken.prototype.attrSet = function attrSet(name, value) {\n  var idx = this.attrIndex(name),\n      attrData = [ name, value ];\n\n  if (idx < 0) {\n    this.attrPush(attrData);\n  } else {\n    this.attrs[idx] = attrData;\n  }\n};\n\n\n/**\n * Token.attrGet(name)\n *\n * Get the value of attribute `name`, or null if it does not exist.\n **/\nToken.prototype.attrGet = function attrGet(name) {\n  var idx = this.attrIndex(name), value = null;\n  if (idx >= 0) {\n    value = this.attrs[idx][1];\n  }\n  return value;\n};\n\n\n/**\n * Token.attrJoin(name, value)\n *\n * Join value to existing attribute via space. Or create new attribute if not\n * exists. Useful to operate with token classes.\n **/\nToken.prototype.attrJoin = function attrJoin(name, value) {\n  var idx = this.attrIndex(name);\n\n  if (idx < 0) {\n    this.attrPush([ name, value ]);\n  } else {\n    this.attrs[idx][1] = this.attrs[idx][1] + ' ' + value;\n  }\n};\n\n\nmodule.exports = Token;\n", "// Core state object\n//\n'use strict';\n\nvar Token = require('../token');\n\n\nfunction StateCore(src, md, env) {\n  this.src = src;\n  this.env = env;\n  this.tokens = [];\n  this.inlineMode = false;\n  this.md = md; // link to parser instance\n}\n\n// re-export Token class to use in core rules\nStateCore.prototype.Token = Token;\n\n\nmodule.exports = StateCore;\n", "/** internal\n * class Core\n *\n * Top-level rules executor. Glues block/inline parsers and does intermediate\n * transformations.\n **/\n'use strict';\n\n\nvar Ruler  = require('./ruler');\n\n\nvar _rules = [\n  [ 'normalize',      require('./rules_core/normalize')      ],\n  [ 'block',          require('./rules_core/block')          ],\n  [ 'inline',         require('./rules_core/inline')         ],\n  [ 'linkify',        require('./rules_core/linkify')        ],\n  [ 'replacements',   require('./rules_core/replacements')   ],\n  [ 'smartquotes',    require('./rules_core/smartquotes')    ]\n];\n\n\n/**\n * new Core()\n **/\nfunction Core() {\n  /**\n   * Core#ruler -> Ruler\n   *\n   * [[Ruler]] instance. Keep configuration of core rules.\n   **/\n  this.ruler = new Ruler();\n\n  for (var i = 0; i < _rules.length; i++) {\n    this.ruler.push(_rules[i][0], _rules[i][1]);\n  }\n}\n\n\n/**\n * Core.process(state)\n *\n * Executes core chain rules.\n **/\nCore.prototype.process = function (state) {\n  var i, l, rules;\n\n  rules = this.ruler.getRules('');\n\n  for (i = 0, l = rules.length; i < l; i++) {\n    rules[i](state);\n  }\n};\n\nCore.prototype.State = require('./rules_core/state_core');\n\n\nmodule.exports = Core;\n", "// GFM table, https://github.github.com/gfm/#tables-extension-\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nfunction getLine(state, line) {\n  var pos = state.bMarks[line] + state.tShift[line],\n      max = state.eMarks[line];\n\n  return state.src.substr(pos, max - pos);\n}\n\nfunction escapedSplit(str) {\n  var result = [],\n      pos = 0,\n      max = str.length,\n      ch,\n      isEscaped = false,\n      lastPos = 0,\n      current = '';\n\n  ch  = str.charCodeAt(pos);\n\n  while (pos < max) {\n    if (ch === 0x7c/* | */) {\n      if (!isEscaped) {\n        // pipe separating cells, '|'\n        result.push(current + str.substring(lastPos, pos));\n        current = '';\n        lastPos = pos + 1;\n      } else {\n        // escaped pipe, '\\|'\n        current += str.substring(lastPos, pos - 1);\n        lastPos = pos;\n      }\n    }\n\n    isEscaped = (ch === 0x5c/* \\ */);\n    pos++;\n\n    ch = str.charCodeAt(pos);\n  }\n\n  result.push(current + str.substring(lastPos));\n\n  return result;\n}\n\n\nmodule.exports = function table(state, startLine, endLine, silent) {\n  var ch, lineText, pos, i, l, nextLine, columns, columnCount, token,\n      aligns, t, tableLines, tbodyLines, oldParentType, terminate,\n      terminatorRules, firstCh, secondCh;\n\n  // should have at least two lines\n  if (startLine + 2 > endLine) { return false; }\n\n  nextLine = startLine + 1;\n\n  if (state.sCount[nextLine] < state.blkIndent) { return false; }\n\n  // if it's indented more than 3 spaces, it should be a code block\n  if (!state.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent >= 4) { return false; }\n\n  // first character of the second line should be '|', '-', ':',\n  // and no other characters are allowed but spaces;\n  // basically, this is the equivalent of /^[-:|][-:|\\s]*$/ regexp\n\n  pos = state.bMarks[nextLine] + state.tShift[nextLine];\n  if (pos >= state.eMarks[nextLine]) { return false; }\n\n  firstCh = state.src.charCodeAt(pos++);\n  if (firstCh !== 0x7C/* | */ && firstCh !== 0x2D/* - */ && firstCh !== 0x3A/* : */) { return false; }\n\n  if (pos >= state.eMarks[nextLine]) { return false; }\n\n  secondCh = state.src.charCodeAt(pos++);\n  if (secondCh !== 0x7C/* | */ && secondCh !== 0x2D/* - */ && secondCh !== 0x3A/* : */ && !isSpace(secondCh)) {\n    return false;\n  }\n\n  // if first character is '-', then second character must not be a space\n  // (due to parsing ambiguity with list)\n  if (firstCh === 0x2D/* - */ && isSpace(secondCh)) { return false; }\n\n  while (pos < state.eMarks[nextLine]) {\n    ch = state.src.charCodeAt(pos);\n\n    if (ch !== 0x7C/* | */ && ch !== 0x2D/* - */ && ch !== 0x3A/* : */ && !isSpace(ch)) { return false; }\n\n    pos++;\n  }\n\n  lineText = getLine(state, startLine + 1);\n\n  columns = lineText.split('|');\n  aligns = [];\n  for (i = 0; i < columns.length; i++) {\n    t = columns[i].trim();\n    if (!t) {\n      // allow empty columns before and after table, but not in between columns;\n      // e.g. allow ` |---| `, disallow ` ---||--- `\n      if (i === 0 || i === columns.length - 1) {\n        continue;\n      } else {\n        return false;\n      }\n    }\n\n    if (!/^:?-+:?$/.test(t)) { return false; }\n    if (t.charCodeAt(t.length - 1) === 0x3A/* : */) {\n      aligns.push(t.charCodeAt(0) === 0x3A/* : */ ? 'center' : 'right');\n    } else if (t.charCodeAt(0) === 0x3A/* : */) {\n      aligns.push('left');\n    } else {\n      aligns.push('');\n    }\n  }\n\n  lineText = getLine(state, startLine).trim();\n  if (lineText.indexOf('|') === -1) { return false; }\n  if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n  columns = escapedSplit(lineText);\n  if (columns.length && columns[0] === '') columns.shift();\n  if (columns.length && columns[columns.length - 1] === '') columns.pop();\n\n  // header row will define an amount of columns in the entire table,\n  // and align row should be exactly the same (the rest of the rows can differ)\n  columnCount = columns.length;\n  if (columnCount === 0 || columnCount !== aligns.length) { return false; }\n\n  if (silent) { return true; }\n\n  oldParentType = state.parentType;\n  state.parentType = 'table';\n\n  // use 'blockquote' lists for termination because it's\n  // the most similar to tables\n  terminatorRules = state.md.block.ruler.getRules('blockquote');\n\n  token     = state.push('table_open', 'table', 1);\n  token.map = tableLines = [ startLine, 0 ];\n\n  token     = state.push('thead_open', 'thead', 1);\n  token.map = [ startLine, startLine + 1 ];\n\n  token     = state.push('tr_open', 'tr', 1);\n  token.map = [ startLine, startLine + 1 ];\n\n  for (i = 0; i < columns.length; i++) {\n    token          = state.push('th_open', 'th', 1);\n    if (aligns[i]) {\n      token.attrs  = [ [ 'style', 'text-align:' + aligns[i] ] ];\n    }\n\n    token          = state.push('inline', '', 0);\n    token.content  = columns[i].trim();\n    token.children = [];\n\n    token          = state.push('th_close', 'th', -1);\n  }\n\n  token     = state.push('tr_close', 'tr', -1);\n  token     = state.push('thead_close', 'thead', -1);\n\n  for (nextLine = startLine + 2; nextLine < endLine; nextLine++) {\n    if (state.sCount[nextLine] < state.blkIndent) { break; }\n\n    terminate = false;\n    for (i = 0, l = terminatorRules.length; i < l; i++) {\n      if (terminatorRules[i](state, nextLine, endLine, true)) {\n        terminate = true;\n        break;\n      }\n    }\n\n    if (terminate) { break; }\n    lineText = getLine(state, nextLine).trim();\n    if (!lineText) { break; }\n    if (!state.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent >= 4) { break; }\n    columns = escapedSplit(lineText);\n    if (columns.length && columns[0] === '') columns.shift();\n    if (columns.length && columns[columns.length - 1] === '') columns.pop();\n\n    if (nextLine === startLine + 2) {\n      token     = state.push('tbody_open', 'tbody', 1);\n      token.map = tbodyLines = [ startLine + 2, 0 ];\n    }\n\n    token     = state.push('tr_open', 'tr', 1);\n    token.map = [ nextLine, nextLine + 1 ];\n\n    for (i = 0; i < columnCount; i++) {\n      token          = state.push('td_open', 'td', 1);\n      if (aligns[i]) {\n        token.attrs  = [ [ 'style', 'text-align:' + aligns[i] ] ];\n      }\n\n      token          = state.push('inline', '', 0);\n      token.content  = columns[i] ? columns[i].trim() : '';\n      token.children = [];\n\n      token          = state.push('td_close', 'td', -1);\n    }\n    token = state.push('tr_close', 'tr', -1);\n  }\n\n  if (tbodyLines) {\n    token = state.push('tbody_close', 'tbody', -1);\n    tbodyLines[1] = nextLine;\n  }\n\n  token = state.push('table_close', 'table', -1);\n  tableLines[1] = nextLine;\n\n  state.parentType = oldParentType;\n  state.line = nextLine;\n  return true;\n};\n", "// Code block (4 spaces padded)\n\n'use strict';\n\n\nmodule.exports = function code(state, startLine, endLine/*, silent*/) {\n  if (state.md.options.allowIndentation) { return false; }\n\n  var nextLine, last, token;\n\n  if (state.sCount[startLine] - state.blkIndent < 4) { return false; }\n\n  last = nextLine = startLine + 1;\n\n  while (nextLine < endLine) {\n    if (state.isEmpty(nextLine)) {\n      nextLine++;\n      continue;\n    }\n\n    if (state.sCount[nextLine] - state.blkIndent >= 4) {\n      nextLine++;\n      last = nextLine;\n      continue;\n    }\n    break;\n  }\n\n  state.line = last;\n\n  token         = state.push('code_block', 'code', 0);\n  token.content = state.getLines(startLine, last, 4 + state.blkIndent, false) + '\\n';\n  token.map     = [ startLine, state.line ];\n\n  return true;\n};\n", "// fences (``` lang, ~~~ lang)\n\n'use strict';\n\n\nmodule.exports = function fence(state, startLine, endLine, silent) {\n  var marker, len, params, nextLine, mem, token, markup,\n      haveEndMarker = false,\n      pos = state.bMarks[startLine] + state.tShift[startLine],\n      max = state.eMarks[startLine];\n\n  // if it's indented more than 3 spaces, it should be a code block\n  if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n  if (pos + 3 > max) { return false; }\n\n  marker = state.src.charCodeAt(pos);\n\n  if (marker !== 0x7E/* ~ */ && marker !== 0x60 /* ` */) {\n    return false;\n  }\n\n  // scan marker length\n  mem = pos;\n  pos = state.skipChars(pos, marker);\n\n  len = pos - mem;\n\n  if (len < 3) { return false; }\n\n  markup = state.src.slice(mem, pos);\n  params = state.src.slice(pos, max);\n\n  if (marker === 0x60 /* ` */) {\n    if (params.indexOf(String.fromCharCode(marker)) >= 0) {\n      return false;\n    }\n  }\n\n  // Since start is found, we can report success here in validation mode\n  if (silent) { return true; }\n\n  // search end of block\n  nextLine = startLine;\n\n  for (;;) {\n    nextLine++;\n    if (nextLine >= endLine) {\n      // unclosed block should be autoclosed by end of document.\n      // also block seems to be autoclosed by end of parent\n      break;\n    }\n\n    pos = mem = state.bMarks[nextLine] + state.tShift[nextLine];\n    max = state.eMarks[nextLine];\n\n    if (pos < max && state.sCount[nextLine] < state.blkIndent) {\n      // non-empty line with negative indent should stop the list:\n      // - ```\n      //  test\n      break;\n    }\n\n    if (state.src.charCodeAt(pos) !== marker) { continue; }\n\n    if (!state.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent >= 4) {\n      // closing fence should be indented less than 4 spaces\n      continue;\n    }\n\n    pos = state.skipChars(pos, marker);\n\n    // closing code fence must be at least as long as the opening one\n    if (pos - mem < len) { continue; }\n\n    // make sure tail has spaces only\n    pos = state.skipSpaces(pos);\n\n    if (pos < max) { continue; }\n\n    haveEndMarker = true;\n    // found!\n    break;\n  }\n\n  // If a fence has heading spaces, they should be removed from its inner block\n  len = state.sCount[startLine];\n\n  state.line = nextLine + (haveEndMarker ? 1 : 0);\n\n  token         = state.push('fence', 'code', 0);\n  token.info    = params;\n  token.content = state.getLines(startLine + 1, nextLine, len, true);\n  token.markup  = markup;\n  token.map     = [ startLine, state.line ];\n\n  return true;\n};\n", "// Block quotes\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function blockquote(state, startLine, endLine, silent) {\n  var adjustTab,\n      ch,\n      i,\n      initial,\n      l,\n      lastLineEmpty,\n      lines,\n      nextLine,\n      offset,\n      oldBMarks,\n      oldBSCount,\n      oldIndent,\n      oldParentType,\n      oldSCount,\n      oldTShift,\n      spaceAfterMarker,\n      terminate,\n      terminatorRules,\n      token,\n      isOutdented,\n      oldLineMax = state.lineMax,\n      pos = state.bMarks[startLine] + state.tShift[startLine],\n      max = state.eMarks[startLine];\n\n  // if it's indented more than 3 spaces, it should be a code block\n  if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n  // check the block quote marker\n  if (state.src.charCodeAt(pos++) !== 0x3E/* > */) { return false; }\n\n  // we know that it's going to be a valid blockquote,\n  // so no point trying to find the end of it in silent mode\n  if (silent) { return true; }\n\n  // set offset past spaces and \">\"\n  initial = offset = state.sCount[startLine] + 1;\n\n  // skip one optional space after '>'\n  if (state.src.charCodeAt(pos) === 0x20 /* space */) {\n    // ' >   test '\n    //     ^ -- position start of line here:\n    pos++;\n    initial++;\n    offset++;\n    adjustTab = false;\n    spaceAfterMarker = true;\n  } else if (state.src.charCodeAt(pos) === 0x09 /* tab */) {\n    spaceAfterMarker = true;\n\n    if ((state.bsCount[startLine] + offset) % 4 === 3) {\n      // '  >\\t  test '\n      //       ^ -- position start of line here (tab has width===1)\n      pos++;\n      initial++;\n      offset++;\n      adjustTab = false;\n    } else {\n      // ' >\\t  test '\n      //    ^ -- position start of line here + shift bsCount slightly\n      //         to make extra space appear\n      adjustTab = true;\n    }\n  } else {\n    spaceAfterMarker = false;\n  }\n\n  oldBMarks = [ state.bMarks[startLine] ];\n  state.bMarks[startLine] = pos;\n\n  while (pos < max) {\n    ch = state.src.charCodeAt(pos);\n\n    if (isSpace(ch)) {\n      if (ch === 0x09) {\n        offset += 4 - (offset + state.bsCount[startLine] + (adjustTab ? 1 : 0)) % 4;\n      } else {\n        offset++;\n      }\n    } else {\n      break;\n    }\n\n    pos++;\n  }\n\n  oldBSCount = [ state.bsCount[startLine] ];\n  state.bsCount[startLine] = state.sCount[startLine] + 1 + (spaceAfterMarker ? 1 : 0);\n\n  lastLineEmpty = pos >= max;\n\n  oldSCount = [ state.sCount[startLine] ];\n  state.sCount[startLine] = offset - initial;\n\n  oldTShift = [ state.tShift[startLine] ];\n  state.tShift[startLine] = pos - state.bMarks[startLine];\n\n  terminatorRules = state.md.block.ruler.getRules('blockquote');\n\n  oldParentType = state.parentType;\n  state.parentType = 'blockquote';\n\n  // Search the end of the block\n  //\n  // Block ends with either:\n  //  1. an empty line outside:\n  //     ```\n  //     > test\n  //\n  //     ```\n  //  2. an empty line inside:\n  //     ```\n  //     >\n  //     test\n  //     ```\n  //  3. another tag:\n  //     ```\n  //     > test\n  //      - - -\n  //     ```\n  for (nextLine = startLine + 1; nextLine < endLine; nextLine++) {\n    // check if it's outdented, i.e. it's inside list item and indented\n    // less than said list item:\n    //\n    // ```\n    // 1. anything\n    //    > current blockquote\n    // 2. checking this line\n    // ```\n    isOutdented = state.sCount[nextLine] < state.blkIndent;\n\n    pos = state.bMarks[nextLine] + state.tShift[nextLine];\n    max = state.eMarks[nextLine];\n\n    if (pos >= max) {\n      // Case 1: line is not inside the blockquote, and this line is empty.\n      break;\n    }\n\n    if (state.src.charCodeAt(pos++) === 0x3E/* > */ && !isOutdented) {\n      // This line is inside the blockquote.\n\n      // set offset past spaces and \">\"\n      initial = offset = state.sCount[nextLine] + 1;\n\n      // skip one optional space after '>'\n      if (state.src.charCodeAt(pos) === 0x20 /* space */) {\n        // ' >   test '\n        //     ^ -- position start of line here:\n        pos++;\n        initial++;\n        offset++;\n        adjustTab = false;\n        spaceAfterMarker = true;\n      } else if (state.src.charCodeAt(pos) === 0x09 /* tab */) {\n        spaceAfterMarker = true;\n\n        if ((state.bsCount[nextLine] + offset) % 4 === 3) {\n          // '  >\\t  test '\n          //       ^ -- position start of line here (tab has width===1)\n          pos++;\n          initial++;\n          offset++;\n          adjustTab = false;\n        } else {\n          // ' >\\t  test '\n          //    ^ -- position start of line here + shift bsCount slightly\n          //         to make extra space appear\n          adjustTab = true;\n        }\n      } else {\n        spaceAfterMarker = false;\n      }\n\n      oldBMarks.push(state.bMarks[nextLine]);\n      state.bMarks[nextLine] = pos;\n\n      while (pos < max) {\n        ch = state.src.charCodeAt(pos);\n\n        if (isSpace(ch)) {\n          if (ch === 0x09) {\n            offset += 4 - (offset + state.bsCount[nextLine] + (adjustTab ? 1 : 0)) % 4;\n          } else {\n            offset++;\n          }\n        } else {\n          break;\n        }\n\n        pos++;\n      }\n\n      lastLineEmpty = pos >= max;\n\n      oldBSCount.push(state.bsCount[nextLine]);\n      state.bsCount[nextLine] = state.sCount[nextLine] + 1 + (spaceAfterMarker ? 1 : 0);\n\n      oldSCount.push(state.sCount[nextLine]);\n      state.sCount[nextLine] = offset - initial;\n\n      oldTShift.push(state.tShift[nextLine]);\n      state.tShift[nextLine] = pos - state.bMarks[nextLine];\n      continue;\n    }\n\n    // Case 2: line is not inside the blockquote, and the last line was empty.\n    if (lastLineEmpty) { break; }\n\n    // Case 3: another tag found.\n    terminate = false;\n    for (i = 0, l = terminatorRules.length; i < l; i++) {\n      if (terminatorRules[i](state, nextLine, endLine, true)) {\n        terminate = true;\n        break;\n      }\n    }\n\n    if (terminate) {\n      // Quirk to enforce \"hard termination mode\" for paragraphs;\n      // normally if you call `tokenize(state, startLine, nextLine)`,\n      // paragraphs will look below nextLine for paragraph continuation,\n      // but if blockquote is terminated by another tag, they shouldn't\n      state.lineMax = nextLine;\n\n      if (state.blkIndent !== 0) {\n        // state.blkIndent was non-zero, we now set it to zero,\n        // so we need to re-calculate all offsets to appear as\n        // if indent wasn't changed\n        oldBMarks.push(state.bMarks[nextLine]);\n        oldBSCount.push(state.bsCount[nextLine]);\n        oldTShift.push(state.tShift[nextLine]);\n        oldSCount.push(state.sCount[nextLine]);\n        state.sCount[nextLine] -= state.blkIndent;\n      }\n\n      break;\n    }\n\n    oldBMarks.push(state.bMarks[nextLine]);\n    oldBSCount.push(state.bsCount[nextLine]);\n    oldTShift.push(state.tShift[nextLine]);\n    oldSCount.push(state.sCount[nextLine]);\n\n    // A negative indentation means that this is a paragraph continuation\n    //\n    state.sCount[nextLine] = -1;\n  }\n\n  oldIndent = state.blkIndent;\n  state.blkIndent = 0;\n\n  token        = state.push('blockquote_open', 'blockquote', 1);\n  token.markup = '>';\n  token.map    = lines = [ startLine, 0 ];\n\n  state.md.block.tokenize(state, startLine, nextLine);\n\n  token        = state.push('blockquote_close', 'blockquote', -1);\n  token.markup = '>';\n\n  state.lineMax = oldLineMax;\n  state.parentType = oldParentType;\n  lines[1] = state.line;\n\n  // Restore original tShift; this might not be necessary since the parser\n  // has already been here, but just to make sure we can do that.\n  for (i = 0; i < oldTShift.length; i++) {\n    state.bMarks[i + startLine] = oldBMarks[i];\n    state.tShift[i + startLine] = oldTShift[i];\n    state.sCount[i + startLine] = oldSCount[i];\n    state.bsCount[i + startLine] = oldBSCount[i];\n  }\n  state.blkIndent = oldIndent;\n\n  return true;\n};\n", "// Horizontal rule\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function hr(state, startLine, endLine, silent) {\n  var marker, cnt, ch, token,\n      pos = state.bMarks[startLine] + state.tShift[startLine],\n      max = state.eMarks[startLine];\n\n  // if it's indented more than 3 spaces, it should be a code block\n  if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n  marker = state.src.charCodeAt(pos++);\n\n  // Check hr marker\n  if (marker !== 0x2A/* * */ &&\n      marker !== 0x2D/* - */ &&\n      marker !== 0x5F/* _ */) {\n    return false;\n  }\n\n  // markers can be mixed with spaces, but there should be at least 3 of them\n\n  cnt = 1;\n  while (pos < max) {\n    ch = state.src.charCodeAt(pos++);\n    if (ch !== marker && !isSpace(ch)) { return false; }\n    if (ch === marker) { cnt++; }\n  }\n\n  if (cnt < 3) { return false; }\n\n  if (silent) { return true; }\n\n  state.line = startLine + 1;\n\n  token        = state.push('hr', 'hr', 0);\n  token.map    = [ startLine, state.line ];\n  token.markup = Array(cnt + 1).join(String.fromCharCode(marker));\n\n  return true;\n};\n", "// Lists\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\n// Search `[-+*][\\n ]`, returns next pos after marker on success\n// or -1 on fail.\nfunction skipBulletListMarker(state, startLine) {\n  var marker, pos, max, ch;\n\n  pos = state.bMarks[startLine] + state.tShift[startLine];\n  max = state.eMarks[startLine];\n\n  marker = state.src.charCodeAt(pos++);\n  // Check bullet\n  if (marker !== 0x2A/* * */ &&\n      marker !== 0x2D/* - */ &&\n      marker !== 0x2B/* + */) {\n    return -1;\n  }\n\n  if (pos < max) {\n    ch = state.src.charCodeAt(pos);\n\n    if (!isSpace(ch)) {\n      // \" -test \" - is not a list item\n      return -1;\n    }\n  }\n\n  return pos;\n}\n\n// Search `\\d+[.)][\\n ]`, returns next pos after marker on success\n// or -1 on fail.\nfunction skipOrderedListMarker(state, startLine) {\n  var ch,\n      start = state.bMarks[startLine] + state.tShift[startLine],\n      pos = start,\n      max = state.eMarks[startLine];\n\n  // List marker should have at least 2 chars (digit + dot)\n  if (pos + 1 >= max) { return -1; }\n\n  ch = state.src.charCodeAt(pos++);\n\n  if (ch < 0x30/* 0 */ || ch > 0x39/* 9 */) { return -1; }\n\n  for (;;) {\n    // EOL -> fail\n    if (pos >= max) { return -1; }\n\n    ch = state.src.charCodeAt(pos++);\n\n    if (ch >= 0x30/* 0 */ && ch <= 0x39/* 9 */) {\n\n      // List marker should have no more than 9 digits\n      // (prevents integer overflow in browsers)\n      if (pos - start >= 10) { return -1; }\n\n      continue;\n    }\n\n    // found valid marker\n    if (ch === 0x29/* ) */ || ch === 0x2e/* . */) {\n      break;\n    }\n\n    return -1;\n  }\n\n\n  if (pos < max) {\n    ch = state.src.charCodeAt(pos);\n\n    if (!isSpace(ch)) {\n      // \" 1.test \" - is not a list item\n      return -1;\n    }\n  }\n  return pos;\n}\n\nfunction markTightParagraphs(state, idx) {\n  var i, l,\n      level = state.level + 2;\n\n  for (i = idx + 2, l = state.tokens.length - 2; i < l; i++) {\n    if (state.tokens[i].level === level && state.tokens[i].type === 'paragraph_open') {\n      state.tokens[i + 2].hidden = true;\n      state.tokens[i].hidden = true;\n      i += 2;\n    }\n  }\n}\n\n\nmodule.exports = function list(state, startLine, endLine, silent) {\n  var ch,\n      contentStart,\n      i,\n      indent,\n      indentAfterMarker,\n      initial,\n      isOrdered,\n      itemLines,\n      l,\n      listLines,\n      listTokIdx,\n      markerCharCode,\n      markerValue,\n      max,\n      nextLine,\n      offset,\n      oldListIndent,\n      oldParentType,\n      oldSCount,\n      oldTShift,\n      oldTight,\n      pos,\n      posAfterMarker,\n      prevEmptyEnd,\n      start,\n      terminate,\n      terminatorRules,\n      token,\n      isTerminatingParagraph = false,\n      tight = true;\n\n  // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n  // Special case:\n  //  - item 1\n  //   - item 2\n  //    - item 3\n  //     - item 4\n  //      - this one is a paragraph continuation\n  if (!state.md.options.allowIndentation &&\n      state.listIndent >= 0 &&\n      state.sCount[startLine] - state.listIndent >= 4 &&\n      state.sCount[startLine] < state.blkIndent) {\n    return false;\n  }\n\n  // limit conditions when list can interrupt\n  // a paragraph (validation mode only)\n  if (silent && state.parentType === 'paragraph') {\n    // Next list item should still terminate previous list item;\n    //\n    // This code can fail if plugins use blkIndent as well as lists,\n    // but I hope the spec gets fixed long before that happens.\n    //\n    if (state.sCount[startLine] >= state.blkIndent) {\n      isTerminatingParagraph = true;\n    }\n  }\n\n  // Detect list type and position after marker\n  if ((posAfterMarker = skipOrderedListMarker(state, startLine)) >= 0) {\n    isOrdered = true;\n    start = state.bMarks[startLine] + state.tShift[startLine];\n    markerValue = Number(state.src.slice(start, posAfterMarker - 1));\n\n    // If we're starting a new ordered list right after\n    // a paragraph, it should start with 1.\n    if (isTerminatingParagraph && markerValue !== 1) return false;\n\n  } else if ((posAfterMarker = skipBulletListMarker(state, startLine)) >= 0) {\n    isOrdered = false;\n\n  } else {\n    return false;\n  }\n\n  // If we're starting a new unordered list right after\n  // a paragraph, first line should not be empty.\n  if (isTerminatingParagraph) {\n    if (state.skipSpaces(posAfterMarker) >= state.eMarks[startLine]) return false;\n  }\n\n  // We should terminate list on style change. Remember first one to compare.\n  markerCharCode = state.src.charCodeAt(posAfterMarker - 1);\n\n  // For validation mode we can terminate immediately\n  if (silent) { return true; }\n\n  // Start list\n  listTokIdx = state.tokens.length;\n\n  if (isOrdered) {\n    token       = state.push('ordered_list_open', 'ol', 1);\n    if (markerValue !== 1) {\n      token.attrs = [ [ 'start', markerValue ] ];\n    }\n\n  } else {\n    token       = state.push('bullet_list_open', 'ul', 1);\n  }\n\n  token.map    = listLines = [ startLine, 0 ];\n  token.markup = String.fromCharCode(markerCharCode);\n\n  //\n  // Iterate list items\n  //\n\n  nextLine = startLine;\n  prevEmptyEnd = false;\n  terminatorRules = state.md.block.ruler.getRules('list');\n\n  oldParentType = state.parentType;\n  state.parentType = 'list';\n\n  while (nextLine < endLine) {\n    pos = posAfterMarker;\n    max = state.eMarks[nextLine];\n\n    initial = offset = state.sCount[nextLine] + posAfterMarker - (state.bMarks[startLine] + state.tShift[startLine]);\n\n    while (pos < max) {\n      ch = state.src.charCodeAt(pos);\n\n      if (ch === 0x09) {\n        offset += 4 - (offset + state.bsCount[nextLine]) % 4;\n      } else if (ch === 0x20) {\n        offset++;\n      } else {\n        break;\n      }\n\n      pos++;\n    }\n\n    contentStart = pos;\n\n    if (contentStart >= max) {\n      // trimming space in \"-    \\n  3\" case, indent is 1 here\n      indentAfterMarker = 1;\n    } else {\n      indentAfterMarker = offset - initial;\n    }\n\n    // If we have more than 4 spaces, the indent is 1\n    // (the rest is just indented code block)\n    if (!state.md.options.allowIndentation && indentAfterMarker > 4) { indentAfterMarker = 1; }\n\n    // \"  -  test\"\n    //  ^^^^^ - calculating total length of this thing\n    indent = initial + indentAfterMarker;\n\n    // Run subparser & write tokens\n    token        = state.push('list_item_open', 'li', 1);\n    token.markup = String.fromCharCode(markerCharCode);\n    token.map    = itemLines = [ startLine, 0 ];\n    if (isOrdered) {\n      token.info = state.src.slice(start, posAfterMarker - 1);\n    }\n\n    // change current state, then restore it after parser subcall\n    oldTight = state.tight;\n    oldTShift = state.tShift[startLine];\n    oldSCount = state.sCount[startLine];\n\n    //  - example list\n    // ^ listIndent position will be here\n    //   ^ blkIndent position will be here\n    //\n    oldListIndent = state.listIndent;\n    state.listIndent = state.blkIndent;\n    state.blkIndent = indent;\n\n    state.tight = true;\n    state.tShift[startLine] = contentStart - state.bMarks[startLine];\n    state.sCount[startLine] = offset;\n\n    if (contentStart >= max && state.isEmpty(startLine + 1)) {\n      // workaround for this case\n      // (list item is empty, list terminates before \"foo\"):\n      // ~~~~~~~~\n      //   -\n      //\n      //     foo\n      // ~~~~~~~~\n      state.line = Math.min(state.line + 2, endLine);\n    } else {\n      state.md.block.tokenize(state, startLine, endLine, true);\n    }\n\n    // If any of list item is tight, mark list as tight\n    if (!state.tight || prevEmptyEnd) {\n      tight = false;\n    }\n    // Item become loose if finish with empty line,\n    // but we should filter last element, because it means list finish\n    prevEmptyEnd = (state.line - startLine) > 1 && state.isEmpty(state.line - 1);\n\n    state.blkIndent = state.listIndent;\n    state.listIndent = oldListIndent;\n    state.tShift[startLine] = oldTShift;\n    state.sCount[startLine] = oldSCount;\n    state.tight = oldTight;\n\n    token        = state.push('list_item_close', 'li', -1);\n    token.markup = String.fromCharCode(markerCharCode);\n\n    nextLine = startLine = state.line;\n    itemLines[1] = nextLine;\n    contentStart = state.bMarks[startLine];\n\n    if (nextLine >= endLine) { break; }\n\n    //\n    // Try to check if list is terminated or continued.\n    //\n    if (state.sCount[nextLine] < state.blkIndent) { break; }\n\n    // if it's indented more than 3 spaces, it should be a code block\n    if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { break; }\n\n    // fail if terminating block found\n    terminate = false;\n    for (i = 0, l = terminatorRules.length; i < l; i++) {\n      if (terminatorRules[i](state, nextLine, endLine, true)) {\n        terminate = true;\n        break;\n      }\n    }\n    if (terminate) { break; }\n\n    // fail if list has another type\n    if (isOrdered) {\n      posAfterMarker = skipOrderedListMarker(state, nextLine);\n      if (posAfterMarker < 0) { break; }\n      start = state.bMarks[nextLine] + state.tShift[nextLine];\n    } else {\n      posAfterMarker = skipBulletListMarker(state, nextLine);\n      if (posAfterMarker < 0) { break; }\n    }\n\n    if (markerCharCode !== state.src.charCodeAt(posAfterMarker - 1)) { break; }\n  }\n\n  // Finalize list\n  if (isOrdered) {\n    token = state.push('ordered_list_close', 'ol', -1);\n  } else {\n    token = state.push('bullet_list_close', 'ul', -1);\n  }\n  token.markup = String.fromCharCode(markerCharCode);\n\n  listLines[1] = nextLine;\n  state.line = nextLine;\n\n  state.parentType = oldParentType;\n\n  // mark paragraphs tight if needed\n  if (tight) {\n    markTightParagraphs(state, listTokIdx);\n  }\n\n  return true;\n};\n", "'use strict';\n\n\nvar normalizeReference   = require('../common/utils').normalizeReference;\nvar isSpace              = require('../common/utils').isSpace;\n\n\nmodule.exports = function reference(state, startLine, _endLine, silent) {\n  var ch,\n      destEndPos,\n      destEndLineNo,\n      endLine,\n      href,\n      i,\n      l,\n      label,\n      labelEnd,\n      oldParentType,\n      res,\n      start,\n      str,\n      terminate,\n      terminatorRules,\n      title,\n      lines = 0,\n      pos = state.bMarks[startLine] + state.tShift[startLine],\n      max = state.eMarks[startLine],\n      nextLine = startLine + 1;\n\n  // if it's indented more than 3 spaces, it should be a code block\n  if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n  if (state.src.charCodeAt(pos) !== 0x5B/* [ */) { return false; }\n\n  // Simple check to quickly interrupt scan on [link](url) at the start of line.\n  // Can be useful on practice: https://github.com/markdown-it/markdown-it/issues/54\n  while (++pos < max) {\n    if (state.src.charCodeAt(pos) === 0x5D /* ] */ &&\n        state.src.charCodeAt(pos - 1) !== 0x5C/* \\ */) {\n      if (pos + 1 === max) { return false; }\n      if (state.src.charCodeAt(pos + 1) !== 0x3A/* : */) { return false; }\n      break;\n    }\n  }\n\n  endLine = state.lineMax;\n\n  // jump line-by-line until empty one or EOF\n  terminatorRules = state.md.block.ruler.getRules('reference');\n\n  oldParentType = state.parentType;\n  state.parentType = 'reference';\n\n  for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n    // this would be a code block normally, but after paragraph\n    // it's considered a lazy continuation regardless of what's there\n    if (!state.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent > 3) { continue; }\n\n    // quirk for blockquotes, this line should already be checked by that rule\n    if (state.sCount[nextLine] < 0) { continue; }\n\n    // Some tags can terminate paragraph without empty line.\n    terminate = false;\n    for (i = 0, l = terminatorRules.length; i < l; i++) {\n      if (terminatorRules[i](state, nextLine, endLine, true)) {\n        terminate = true;\n        break;\n      }\n    }\n    if (terminate) { break; }\n  }\n\n  str = state.getLines(startLine, nextLine, state.blkIndent, false).trim();\n  max = str.length;\n\n  for (pos = 1; pos < max; pos++) {\n    ch = str.charCodeAt(pos);\n    if (ch === 0x5B /* [ */) {\n      return false;\n    } else if (ch === 0x5D /* ] */) {\n      labelEnd = pos;\n      break;\n    } else if (ch === 0x0A /* \\n */) {\n      lines++;\n    } else if (ch === 0x5C /* \\ */) {\n      pos++;\n      if (pos < max && str.charCodeAt(pos) === 0x0A) {\n        lines++;\n      }\n    }\n  }\n\n  if (labelEnd < 0 || str.charCodeAt(labelEnd + 1) !== 0x3A/* : */) { return false; }\n\n  // [label]:   destination   'title'\n  //         ^^^ skip optional whitespace here\n  for (pos = labelEnd + 2; pos < max; pos++) {\n    ch = str.charCodeAt(pos);\n    if (ch === 0x0A) {\n      lines++;\n    } else if (isSpace(ch)) {\n      /*eslint no-empty:0*/\n    } else {\n      break;\n    }\n  }\n\n  // [label]:   destination   'title'\n  //            ^^^^^^^^^^^ parse this\n  res = state.md.helpers.parseLinkDestination(str, pos, max);\n  if (!res.ok) { return false; }\n\n  href = state.md.normalizeLink(res.str);\n  if (!state.md.validateLink(href)) { return false; }\n\n  pos = res.pos;\n  lines += res.lines;\n\n  // save cursor state, we could require to rollback later\n  destEndPos = pos;\n  destEndLineNo = lines;\n\n  // [label]:   destination   'title'\n  //                       ^^^ skipping those spaces\n  start = pos;\n  for (; pos < max; pos++) {\n    ch = str.charCodeAt(pos);\n    if (ch === 0x0A) {\n      lines++;\n    } else if (isSpace(ch)) {\n      /*eslint no-empty:0*/\n    } else {\n      break;\n    }\n  }\n\n  // [label]:   destination   'title'\n  //                          ^^^^^^^ parse this\n  res = state.md.helpers.parseLinkTitle(str, pos, max);\n  if (pos < max && start !== pos && res.ok) {\n    title = res.str;\n    pos = res.pos;\n    lines += res.lines;\n  } else {\n    title = '';\n    pos = destEndPos;\n    lines = destEndLineNo;\n  }\n\n  // skip trailing spaces until the rest of the line\n  while (pos < max) {\n    ch = str.charCodeAt(pos);\n    if (!isSpace(ch)) { break; }\n    pos++;\n  }\n\n  if (pos < max && str.charCodeAt(pos) !== 0x0A) {\n    if (title) {\n      // garbage at the end of the line after title,\n      // but it could still be a valid reference if we roll back\n      title = '';\n      pos = destEndPos;\n      lines = destEndLineNo;\n      while (pos < max) {\n        ch = str.charCodeAt(pos);\n        if (!isSpace(ch)) { break; }\n        pos++;\n      }\n    }\n  }\n\n  if (pos < max && str.charCodeAt(pos) !== 0x0A) {\n    // garbage at the end of the line\n    return false;\n  }\n\n  label = normalizeReference(str.slice(1, labelEnd));\n  if (!label) {\n    // CommonMark 0.20 disallows empty labels\n    return false;\n  }\n\n  // Reference can not terminate anything. This check is for safety only.\n  /*istanbul ignore if*/\n  if (silent) { return true; }\n\n  if (typeof state.env.references === 'undefined') {\n    state.env.references = {};\n  }\n  if (typeof state.env.references[label] === 'undefined') {\n    state.env.references[label] = { title: title, href: href };\n  }\n\n  state.parentType = oldParentType;\n\n  state.line = startLine + lines + 1;\n  return true;\n};\n", "// List of valid html blocks names, accorting to commonmark spec\n// http://jgm.github.io/CommonMark/spec.html#html-blocks\n\n'use strict';\n\n\nmodule.exports = [\n  'address',\n  'article',\n  'aside',\n  'base',\n  'basefont',\n  'blockquote',\n  'body',\n  'caption',\n  'center',\n  'col',\n  'colgroup',\n  'dd',\n  'details',\n  'dialog',\n  'dir',\n  'div',\n  'dl',\n  'dt',\n  'fieldset',\n  'figcaption',\n  'figure',\n  'footer',\n  'form',\n  'frame',\n  'frameset',\n  'h1',\n  'h2',\n  'h3',\n  'h4',\n  'h5',\n  'h6',\n  'head',\n  'header',\n  'hr',\n  'html',\n  'iframe',\n  'legend',\n  'li',\n  'link',\n  'main',\n  'menu',\n  'menuitem',\n  'nav',\n  'noframes',\n  'ol',\n  'optgroup',\n  'option',\n  'p',\n  'param',\n  'section',\n  'source',\n  'summary',\n  'table',\n  'tbody',\n  'td',\n  'tfoot',\n  'th',\n  'thead',\n  'title',\n  'tr',\n  'track',\n  'ul'\n];\n", "// Regexps to match html elements\n\n'use strict';\n\nvar attr_name     = '[a-zA-Z_:][a-zA-Z0-9:._-]*';\n\nvar unquoted      = '[^\"\\'=<>`\\\\x00-\\\\x20]+';\nvar single_quoted = \"'[^']*'\";\nvar double_quoted = '\"[^\"]*\"';\n\nvar attr_value  = '(?:' + unquoted + '|' + single_quoted + '|' + double_quoted + ')';\n\nvar attribute   = '(?:\\\\s+' + attr_name + '(?:\\\\s*=\\\\s*' + attr_value + ')?)';\n\nvar open_tag    = '<[A-Za-z][A-Za-z0-9\\\\-]*' + attribute + '*\\\\s*\\\\/?>';\n\nvar close_tag   = '<\\\\/[A-Za-z][A-Za-z0-9\\\\-]*\\\\s*>';\nvar comment     = '<!---->|<!--(?:-?[^>-])(?:-?[^-])*-->';\nvar processing  = '<[?][\\\\s\\\\S]*?[?]>';\nvar declaration = '<![A-Z]+\\\\s+[^>]*>';\nvar cdata       = '<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>';\n\nvar HTML_TAG_RE = new RegExp('^(?:' + open_tag + '|' + close_tag + '|' + comment +\n                        '|' + processing + '|' + declaration + '|' + cdata + ')');\nvar HTML_OPEN_CLOSE_TAG_RE = new RegExp('^(?:' + open_tag + '|' + close_tag + ')');\n\nmodule.exports.HTML_TAG_RE = HTML_TAG_RE;\nmodule.exports.HTML_OPEN_CLOSE_TAG_RE = HTML_OPEN_CLOSE_TAG_RE;\n", "// HTML block\n\n'use strict';\n\n\nvar block_names = require('../common/html_blocks');\nvar HTML_OPEN_CLOSE_TAG_RE = require('../common/html_re').HTML_OPEN_CLOSE_TAG_RE;\n\n// An array of opening and corresponding closing sequences for html tags,\n// last argument defines whether it can terminate a paragraph or not\n//\nvar HTML_SEQUENCES = [\n  [ /^<(script|pre|style|textarea)(?=(\\s|>|$))/i, /<\\/(script|pre|style|textarea)>/i, true ],\n  [ /^<!--/,        /-->/,   true ],\n  [ /^<\\?/,         /\\?>/,   true ],\n  [ /^<![A-Z]/,     />/,     true ],\n  [ /^<!\\[CDATA\\[/, /\\]\\]>/, true ],\n  [ new RegExp('^</?(' + block_names.join('|') + ')(?=(\\\\s|/?>|$))', 'i'), /^$/, true ],\n  [ new RegExp(HTML_OPEN_CLOSE_TAG_RE.source + '\\\\s*$'),  /^$/, false ]\n];\n\n\nmodule.exports = function html_block(state, startLine, endLine, silent) {\n  var i, nextLine, token, lineText,\n      pos = state.bMarks[startLine] + state.tShift[startLine],\n      max = state.eMarks[startLine];\n\n  // if it's indented more than 3 spaces, it should be a code block\n  if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n  if (!state.md.options.html) { return false; }\n\n  if (state.src.charCodeAt(pos) !== 0x3C/* < */) { return false; }\n\n  lineText = state.src.slice(pos, max);\n\n  for (i = 0; i < HTML_SEQUENCES.length; i++) {\n    if (HTML_SEQUENCES[i][0].test(lineText)) { break; }\n  }\n\n  if (i === HTML_SEQUENCES.length) { return false; }\n\n  if (silent) {\n    // true if this sequence can be a terminator, false otherwise\n    return HTML_SEQUENCES[i][2];\n  }\n\n  nextLine = startLine + 1;\n\n  // If we are here - we detected HTML block.\n  // Let's roll down till block end.\n  if (!HTML_SEQUENCES[i][1].test(lineText)) {\n    for (; nextLine < endLine; nextLine++) {\n      if (state.sCount[nextLine] < state.blkIndent) { break; }\n\n      pos = state.bMarks[nextLine] + state.tShift[nextLine];\n      max = state.eMarks[nextLine];\n      lineText = state.src.slice(pos, max);\n\n      if (HTML_SEQUENCES[i][1].test(lineText)) {\n        if (lineText.length !== 0) { nextLine++; }\n        break;\n      }\n    }\n  }\n\n  state.line = nextLine;\n\n  token         = state.push('html_block', '', 0);\n  token.map     = [ startLine, nextLine ];\n  token.content = state.getLines(startLine, nextLine, state.blkIndent, true);\n\n  return true;\n};\n", "// heading (#, ##, ...)\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function heading(state, startLine, endLine, silent) {\n  var ch, level, tmp, token,\n      pos = state.bMarks[startLine] + state.tShift[startLine],\n      max = state.eMarks[startLine];\n\n  // if it's indented more than 3 spaces, it should be a code block\n  if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n  ch  = state.src.charCodeAt(pos);\n\n  if (ch !== 0x23/* # */ || pos >= max) { return false; }\n\n  // count heading level\n  level = 1;\n  ch = state.src.charCodeAt(++pos);\n  while (ch === 0x23/* # */ && pos < max && level <= 6) {\n    level++;\n    ch = state.src.charCodeAt(++pos);\n  }\n\n  if (level > 6 || (pos < max && !isSpace(ch))) { return false; }\n\n  if (silent) { return true; }\n\n  // Let's cut tails like '    ###  ' from the end of string\n\n  max = state.skipSpacesBack(max, pos);\n  tmp = state.skipCharsBack(max, 0x23, pos); // #\n  if (tmp > pos && isSpace(state.src.charCodeAt(tmp - 1))) {\n    max = tmp;\n  }\n\n  state.line = startLine + 1;\n\n  token        = state.push('heading_open', 'h' + String(level), 1);\n  token.markup = '########'.slice(0, level);\n  token.map    = [ startLine, state.line ];\n\n  token          = state.push('inline', '', 0);\n  token.content  = state.src.slice(pos, max).trim();\n  token.map      = [ startLine, state.line ];\n  token.children = [];\n\n  token        = state.push('heading_close', 'h' + String(level), -1);\n  token.markup = '########'.slice(0, level);\n\n  return true;\n};\n", "// lheading (---, ===)\n\n'use strict';\n\n\nmodule.exports = function lheading(state, startLine, endLine/*, silent*/) {\n  var content, terminate, i, l, token, pos, max, level, marker,\n      nextLine = startLine + 1, oldParentType,\n      terminatorRules = state.md.block.ruler.getRules('paragraph');\n\n  // if it's indented more than 3 spaces, it should be a code block\n  if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n  oldParentType = state.parentType;\n  state.parentType = 'paragraph'; // use paragraph to match terminatorRules\n\n  // jump line-by-line until empty one or EOF\n  for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n    // this would be a code block normally, but after paragraph\n    // it's considered a lazy continuation regardless of what's there\n    if (!state.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent > 3) { continue; }\n\n    //\n    // Check for underline in setext header\n    //\n    if (state.sCount[nextLine] >= state.blkIndent) {\n      pos = state.bMarks[nextLine] + state.tShift[nextLine];\n      max = state.eMarks[nextLine];\n\n      if (pos < max) {\n        marker = state.src.charCodeAt(pos);\n\n        if (marker === 0x2D/* - */ || marker === 0x3D/* = */) {\n          pos = state.skipChars(pos, marker);\n          pos = state.skipSpaces(pos);\n\n          if (pos >= max) {\n            level = (marker === 0x3D/* = */ ? 1 : 2);\n            break;\n          }\n        }\n      }\n    }\n\n    // quirk for blockquotes, this line should already be checked by that rule\n    if (state.sCount[nextLine] < 0) { continue; }\n\n    // Some tags can terminate paragraph without empty line.\n    terminate = false;\n    for (i = 0, l = terminatorRules.length; i < l; i++) {\n      if (terminatorRules[i](state, nextLine, endLine, true)) {\n        terminate = true;\n        break;\n      }\n    }\n    if (terminate) { break; }\n  }\n\n  if (!level) {\n    // Didn't find valid underline\n    return false;\n  }\n\n  content = state.getLines(startLine, nextLine, state.blkIndent, false).trim();\n\n  state.line = nextLine + 1;\n\n  token          = state.push('heading_open', 'h' + String(level), 1);\n  token.markup   = String.fromCharCode(marker);\n  token.map      = [ startLine, state.line ];\n\n  token          = state.push('inline', '', 0);\n  token.content  = content;\n  token.map      = [ startLine, state.line - 1 ];\n  token.children = [];\n\n  token          = state.push('heading_close', 'h' + String(level), -1);\n  token.markup   = String.fromCharCode(marker);\n\n  state.parentType = oldParentType;\n\n  return true;\n};\n", "// Paragraph\n\n'use strict';\n\n\nmodule.exports = function paragraph(state, startLine/*, endLine*/) {\n  var content, terminate, i, l, token, oldParentType,\n      nextLine = startLine + 1,\n      terminatorRules = state.md.block.ruler.getRules('paragraph'),\n      endLine = state.lineMax;\n\n  oldParentType = state.parentType;\n  state.parentType = 'paragraph';\n\n  // jump line-by-line until empty one or EOF\n  for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n    // this would be a code block normally, but after paragraph\n    // it's considered a lazy continuation regardless of what's there\n    if (!state.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent > 3) { continue; }\n\n    // quirk for blockquotes, this line should already be checked by that rule\n    if (state.sCount[nextLine] < 0) { continue; }\n\n    // Some tags can terminate paragraph without empty line.\n    terminate = false;\n    for (i = 0, l = terminatorRules.length; i < l; i++) {\n      if (terminatorRules[i](state, nextLine, endLine, true)) {\n        terminate = true;\n        break;\n      }\n    }\n    if (terminate) { break; }\n  }\n\n  content = state.getLines(startLine, nextLine, state.blkIndent, false).trim();\n\n  state.line = nextLine;\n\n  token          = state.push('paragraph_open', 'p', 1);\n  token.map      = [ startLine, state.line ];\n\n  token          = state.push('inline', '', 0);\n  token.content  = content;\n  token.map      = [ startLine, state.line ];\n  token.children = [];\n\n  token          = state.push('paragraph_close', 'p', -1);\n\n  state.parentType = oldParentType;\n\n  return true;\n};\n", "// Parser state class\n\n'use strict';\n\nvar Token = require('../token');\nvar isSpace = require('../common/utils').isSpace;\n\n\nfunction StateBlock(src, md, env, tokens) {\n  var ch, s, start, pos, len, indent, offset, indent_found;\n\n  this.src = src;\n\n  // link to parser instance\n  this.md     = md;\n\n  this.env = env;\n\n  //\n  // Internal state vartiables\n  //\n\n  this.tokens = tokens;\n\n  this.bMarks = [];  // line begin offsets for fast jumps\n  this.eMarks = [];  // line end offsets for fast jumps\n  this.tShift = [];  // offsets of the first non-space characters (tabs not expanded)\n  this.sCount = [];  // indents for each line (tabs expanded)\n\n  // An amount of virtual spaces (tabs expanded) between beginning\n  // of each line (bMarks) and real beginning of that line.\n  //\n  // It exists only as a hack because blockquotes override bMarks\n  // losing information in the process.\n  //\n  // It's used only when expanding tabs, you can think about it as\n  // an initial tab length, e.g. bsCount=21 applied to string `\\t123`\n  // means first tab should be expanded to 4-21%4 === 3 spaces.\n  //\n  this.bsCount = [];\n\n  // block parser variables\n  this.blkIndent  = 0; // required block content indent (for example, if we are\n                       // inside a list, it would be positioned after list marker)\n  this.line       = 0; // line index in src\n  this.lineMax    = 0; // lines count\n  this.tight      = false;  // loose/tight mode for lists\n  this.ddIndent   = -1; // indent of the current dd block (-1 if there isn't any)\n  this.listIndent = -1; // indent of the current list block (-1 if there isn't any)\n\n  // can be 'blockquote', 'list', 'root', 'paragraph' or 'reference'\n  // used in lists to determine if they interrupt a paragraph\n  this.parentType = 'root';\n\n  this.level = 0;\n\n  // renderer\n  this.result = '';\n\n  // Create caches\n  // Generate markers.\n  s = this.src;\n  indent_found = false;\n\n  for (start = pos = indent = offset = 0, len = s.length; pos < len; pos++) {\n    ch = s.charCodeAt(pos);\n\n    if (!indent_found) {\n      if (isSpace(ch)) {\n        indent++;\n\n        if (ch === 0x09) {\n          offset += 4 - offset % 4;\n        } else {\n          offset++;\n        }\n        continue;\n      } else {\n        indent_found = true;\n      }\n    }\n\n    if (ch === 0x0A || pos === len - 1) {\n      if (ch !== 0x0A) { pos++; }\n      this.bMarks.push(start);\n      this.eMarks.push(pos);\n      this.tShift.push(indent);\n      this.sCount.push(offset);\n      this.bsCount.push(0);\n\n      indent_found = false;\n      indent = 0;\n      offset = 0;\n      start = pos + 1;\n    }\n  }\n\n  // Push fake entry to simplify cache bounds checks\n  this.bMarks.push(s.length);\n  this.eMarks.push(s.length);\n  this.tShift.push(0);\n  this.sCount.push(0);\n  this.bsCount.push(0);\n\n  this.lineMax = this.bMarks.length - 1; // don't count last fake line\n}\n\n// Push new token to \"stream\".\n//\nStateBlock.prototype.push = function (type, tag, nesting) {\n  var token = new Token(type, tag, nesting);\n  token.block = true;\n\n  if (nesting < 0) this.level--; // closing tag\n  token.level = this.level;\n  if (nesting > 0) this.level++; // opening tag\n\n  this.tokens.push(token);\n  return token;\n};\n\nStateBlock.prototype.isEmpty = function isEmpty(line) {\n  return this.bMarks[line] + this.tShift[line] >= this.eMarks[line];\n};\n\nStateBlock.prototype.skipEmptyLines = function skipEmptyLines(from) {\n  for (var max = this.lineMax; from < max; from++) {\n    if (this.bMarks[from] + this.tShift[from] < this.eMarks[from]) {\n      break;\n    }\n  }\n  return from;\n};\n\n// Skip spaces from given position.\nStateBlock.prototype.skipSpaces = function skipSpaces(pos) {\n  var ch;\n\n  for (var max = this.src.length; pos < max; pos++) {\n    ch = this.src.charCodeAt(pos);\n    if (!isSpace(ch)) { break; }\n  }\n  return pos;\n};\n\n// Skip spaces from given position in reverse.\nStateBlock.prototype.skipSpacesBack = function skipSpacesBack(pos, min) {\n  if (pos <= min) { return pos; }\n\n  while (pos > min) {\n    if (!isSpace(this.src.charCodeAt(--pos))) { return pos + 1; }\n  }\n  return pos;\n};\n\n// Skip char codes from given position\nStateBlock.prototype.skipChars = function skipChars(pos, code) {\n  for (var max = this.src.length; pos < max; pos++) {\n    if (this.src.charCodeAt(pos) !== code) { break; }\n  }\n  return pos;\n};\n\n// Skip char codes reverse from given position - 1\nStateBlock.prototype.skipCharsBack = function skipCharsBack(pos, code, min) {\n  if (pos <= min) { return pos; }\n\n  while (pos > min) {\n    if (code !== this.src.charCodeAt(--pos)) { return pos + 1; }\n  }\n  return pos;\n};\n\n// cut lines range from source.\nStateBlock.prototype.getLines = function getLines(begin, end, indent, keepLastLF) {\n  var i, lineIndent, ch, first, last, queue, lineStart,\n      line = begin;\n\n  if (begin >= end) {\n    return '';\n  }\n\n  queue = new Array(end - begin);\n\n  for (i = 0; line < end; line++, i++) {\n    lineIndent = 0;\n    lineStart = first = this.bMarks[line];\n\n    if (line + 1 < end || keepLastLF) {\n      // No need for bounds check because we have fake entry on tail.\n      last = this.eMarks[line] + 1;\n    } else {\n      last = this.eMarks[line];\n    }\n\n    while (first < last && lineIndent < indent) {\n      ch = this.src.charCodeAt(first);\n\n      if (isSpace(ch)) {\n        if (ch === 0x09) {\n          lineIndent += 4 - (lineIndent + this.bsCount[line]) % 4;\n        } else {\n          lineIndent++;\n        }\n      } else if (first - lineStart < this.tShift[line]) {\n        // patched tShift masked characters to look like spaces (blockquotes, list markers)\n        lineIndent++;\n      } else {\n        break;\n      }\n\n      first++;\n    }\n\n    if (lineIndent > indent) {\n      // partially expanding tabs in code blocks, e.g '\\t\\tfoobar'\n      // with indent=2 becomes '  \\tfoobar'\n      queue[i] = new Array(lineIndent - indent + 1).join(' ') + this.src.slice(first, last);\n    } else {\n      queue[i] = this.src.slice(first, last);\n    }\n  }\n\n  return queue.join('');\n};\n\n// re-export Token class to use in block rules\nStateBlock.prototype.Token = Token;\n\n\nmodule.exports = StateBlock;\n", "/** internal\n * class ParserBlock\n *\n * Block-level tokenizer.\n **/\n'use strict';\n\n\nvar Ruler           = require('./ruler');\n\n\nvar _rules = [\n  // First 2 params - rule name & source. Secondary array - list of rules,\n  // which can be terminated by this one.\n  [ 'table',      require('./rules_block/table'),      [ 'paragraph', 'reference' ] ],\n  [ 'code',       require('./rules_block/code') ],\n  [ 'fence',      require('./rules_block/fence'),      [ 'paragraph', 'reference', 'blockquote', 'list' ] ],\n  [ 'blockquote', require('./rules_block/blockquote'), [ 'paragraph', 'reference', 'blockquote', 'list' ] ],\n  [ 'hr',         require('./rules_block/hr'),         [ 'paragraph', 'reference', 'blockquote', 'list' ] ],\n  [ 'list',       require('./rules_block/list'),       [ 'paragraph', 'reference', 'blockquote' ] ],\n  [ 'reference',  require('./rules_block/reference') ],\n  [ 'html_block', require('./rules_block/html_block'), [ 'paragraph', 'reference', 'blockquote' ] ],\n  [ 'heading',    require('./rules_block/heading'),    [ 'paragraph', 'reference', 'blockquote' ] ],\n  [ 'lheading',   require('./rules_block/lheading') ],\n  [ 'paragraph',  require('./rules_block/paragraph') ]\n];\n\n\n/**\n * new ParserBlock()\n **/\nfunction ParserBlock() {\n  /**\n   * ParserBlock#ruler -> Ruler\n   *\n   * [[Ruler]] instance. Keep configuration of block rules.\n   **/\n  this.ruler = new Ruler();\n\n  for (var i = 0; i < _rules.length; i++) {\n    this.ruler.push(_rules[i][0], _rules[i][1], { alt: (_rules[i][2] || []).slice() });\n  }\n}\n\n\n// Generate tokens for input range\n//\nParserBlock.prototype.tokenize = function (state, startLine, endLine) {\n  var ok, i,\n      rules = this.ruler.getRules(''),\n      len = rules.length,\n      line = startLine,\n      hasEmptyLines = false,\n      maxNesting = state.md.options.maxNesting;\n\n  while (line < endLine) {\n    state.line = line = state.skipEmptyLines(line);\n    if (line >= endLine) { break; }\n\n    // Termination condition for nested calls.\n    // Nested calls currently used for blockquotes & lists\n    if (state.sCount[line] < state.blkIndent) { break; }\n\n    // If nesting level exceeded - skip tail to the end. That's not ordinary\n    // situation and we should not care about content.\n    if (state.level >= maxNesting) {\n      state.line = endLine;\n      break;\n    }\n\n    // Try all possible rules.\n    // On success, rule should:\n    //\n    // - update `state.line`\n    // - update `state.tokens`\n    // - return true\n\n    for (i = 0; i < len; i++) {\n      ok = rules[i](state, line, endLine, false);\n      if (ok) { break; }\n    }\n\n    // set state.tight if we had an empty line before current tag\n    // i.e. latest empty line should not count\n    state.tight = !hasEmptyLines;\n\n    // paragraph might \"eat\" one newline after it in nested lists\n    if (state.isEmpty(state.line - 1)) {\n      hasEmptyLines = true;\n    }\n\n    line = state.line;\n\n    if (line < endLine && state.isEmpty(line)) {\n      hasEmptyLines = true;\n      line++;\n      state.line = line;\n    }\n  }\n};\n\n\n/**\n * ParserBlock.parse(str, md, env, outTokens)\n *\n * Process input string and push block tokens into `outTokens`\n **/\nParserBlock.prototype.parse = function (src, md, env, outTokens) {\n  var state;\n\n  if (!src) { return; }\n\n  state = new this.State(src, md, env, outTokens);\n\n  this.tokenize(state, state.line, state.lineMax);\n};\n\n\nParserBlock.prototype.State = require('./rules_block/state_block');\n\n\nmodule.exports = ParserBlock;\n", "// Skip text characters for text token, place those to pending buffer\n// and increment current pos\n\n'use strict';\n\n\n// Rule to skip pure text\n// '{}$%@~+=:' reserved for extentions\n\n// !, \", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @, [, \\, ], ^, _, `, {, |, }, or ~\n\n// !!!! Don't confuse with \"Markdown ASCII Punctuation\" chars\n// http://spec.commonmark.org/0.15/#ascii-punctuation-character\nfunction isTerminatorChar(ch) {\n  switch (ch) {\n    case 0x0A/* \\n */:\n    case 0x21/* ! */:\n    case 0x23/* # */:\n    case 0x24/* $ */:\n    case 0x25/* % */:\n    case 0x26/* & */:\n    case 0x2A/* * */:\n    case 0x2B/* + */:\n    case 0x2D/* - */:\n    case 0x3A/* : */:\n    case 0x3C/* < */:\n    case 0x3D/* = */:\n    case 0x3E/* > */:\n    case 0x40/* @ */:\n    case 0x5B/* [ */:\n    case 0x5C/* \\ */:\n    case 0x5D/* ] */:\n    case 0x5E/* ^ */:\n    case 0x5F/* _ */:\n    case 0x60/* ` */:\n    case 0x7B/* { */:\n    case 0x7D/* } */:\n    case 0x7E/* ~ */:\n      return true;\n    default:\n      return false;\n  }\n}\n\nmodule.exports = function text(state, silent) {\n  var pos = state.pos;\n\n  while (pos < state.posMax && !isTerminatorChar(state.src.charCodeAt(pos))) {\n    pos++;\n  }\n\n  if (pos === state.pos) { return false; }\n\n  if (!silent) { state.pending += state.src.slice(state.pos, pos); }\n\n  state.pos = pos;\n\n  return true;\n};\n\n// Alternative implementation, for memory.\n//\n// It costs 10% of performance, but allows extend terminators list, if place it\n// to `ParcerInline` property. Probably, will switch to it sometime, such\n// flexibility required.\n\n/*\nvar TERMINATOR_RE = /[\\n!#$%&*+\\-:<=>@[\\\\\\]^_`{}~]/;\n\nmodule.exports = function text(state, silent) {\n  var pos = state.pos,\n      idx = state.src.slice(pos).search(TERMINATOR_RE);\n\n  // first char is terminator -> empty text\n  if (idx === 0) { return false; }\n\n  // no terminator -> text till end of string\n  if (idx < 0) {\n    if (!silent) { state.pending += state.src.slice(pos); }\n    state.pos = state.src.length;\n    return true;\n  }\n\n  if (!silent) { state.pending += state.src.slice(pos, pos + idx); }\n\n  state.pos += idx;\n\n  return true;\n};*/\n", "// Proceess '\\n'\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function newline(state, silent) {\n  var pmax, max, ws, pos = state.pos;\n\n  if (state.src.charCodeAt(pos) !== 0x0A/* \\n */) { return false; }\n\n  pmax = state.pending.length - 1;\n  max = state.posMax;\n\n  // '  \\n' -> hardbreak\n  // Lookup in pending chars is bad practice! Don't copy to other rules!\n  // Pending string is stored in concat mode, indexed lookups will cause\n  // convertion to flat mode.\n  if (!silent) {\n    if (pmax >= 0 && state.pending.charCodeAt(pmax) === 0x20) {\n      if (pmax >= 1 && state.pending.charCodeAt(pmax - 1) === 0x20) {\n        // Find whitespaces tail of pending chars.\n        ws = pmax - 1;\n        while (ws >= 1 && state.pending.charCodeAt(ws - 1) === 0x20) ws--;\n\n        state.pending = state.pending.slice(0, ws);\n        state.push('hardbreak', 'br', 0);\n      } else {\n        state.pending = state.pending.slice(0, -1);\n        state.push('softbreak', 'br', 0);\n      }\n\n    } else {\n      state.push('softbreak', 'br', 0);\n    }\n  }\n\n  pos++;\n\n  // skip heading spaces for next line\n  while (pos < max && isSpace(state.src.charCodeAt(pos))) { pos++; }\n\n  state.pos = pos;\n  return true;\n};\n", "// Process escaped chars and hardbreaks\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\nvar ESCAPED = [];\n\nfor (var i = 0; i < 256; i++) { ESCAPED.push(0); }\n\n'\\\\!\"#$%&\\'()*+,./:;<=>?@[]^_`{|}~-'\n  .split('').forEach(function (ch) { ESCAPED[ch.charCodeAt(0)] = 1; });\n\n\nmodule.exports = function escape(state, silent) {\n  var ch, pos = state.pos, max = state.posMax;\n\n  if (state.src.charCodeAt(pos) !== 0x5C/* \\ */) { return false; }\n\n  pos++;\n\n  if (pos < max) {\n    ch = state.src.charCodeAt(pos);\n\n    if (ch < 256 && ESCAPED[ch] !== 0) {\n      if (!silent) { state.pending += state.src[pos]; }\n      state.pos += 2;\n      return true;\n    }\n\n    if (ch === 0x0A) {\n      if (!silent) {\n        state.push('hardbreak', 'br', 0);\n      }\n\n      pos++;\n      // skip leading whitespaces from next line\n      while (pos < max) {\n        ch = state.src.charCodeAt(pos);\n        if (!isSpace(ch)) { break; }\n        pos++;\n      }\n\n      state.pos = pos;\n      return true;\n    }\n  }\n\n  if (!silent) { state.pending += '\\\\'; }\n  state.pos++;\n  return true;\n};\n", "// Parse backticks\n\n'use strict';\n\n\nmodule.exports = function backtick(state, silent) {\n  var start, max, marker, token, matchStart, matchEnd, openerLength, closerLength,\n      pos = state.pos,\n      ch = state.src.charCodeAt(pos);\n\n  if (ch !== 0x60/* ` */) { return false; }\n\n  start = pos;\n  pos++;\n  max = state.posMax;\n\n  // scan marker length\n  while (pos < max && state.src.charCodeAt(pos) === 0x60/* ` */) { pos++; }\n\n  marker = state.src.slice(start, pos);\n  openerLength = marker.length;\n\n  if (state.backticksScanned && (state.backticks[openerLength] || 0) <= start) {\n    if (!silent) state.pending += marker;\n    state.pos += openerLength;\n    return true;\n  }\n\n  matchStart = matchEnd = pos;\n\n  // Nothing found in the cache, scan until the end of the line (or until marker is found)\n  while ((matchStart = state.src.indexOf('`', matchEnd)) !== -1) {\n    matchEnd = matchStart + 1;\n\n    // scan marker length\n    while (matchEnd < max && state.src.charCodeAt(matchEnd) === 0x60/* ` */) { matchEnd++; }\n\n    closerLength = matchEnd - matchStart;\n\n    if (closerLength === openerLength) {\n      // Found matching closer length.\n      if (!silent) {\n        token     = state.push('code_inline', 'code', 0);\n        token.markup  = marker;\n        token.content = state.src.slice(pos, matchStart)\n          .replace(/\\n/g, ' ')\n          .replace(/^ (.+) $/, '$1');\n      }\n      state.pos = matchEnd;\n      return true;\n    }\n\n    // Some different length found, put it in cache as upper limit of where closer can be found\n    state.backticks[closerLength] = matchStart;\n  }\n\n  // Scanned through the end, didn't find anything\n  state.backticksScanned = true;\n\n  if (!silent) state.pending += marker;\n  state.pos += openerLength;\n  return true;\n};\n", "// ~~strike through~~\n//\n'use strict';\n\n\n// Insert each marker as a separate text token, and add it to delimiter list\n//\nmodule.exports.tokenize = function strikethrough(state, silent) {\n  var i, scanned, token, len, ch,\n      start = state.pos,\n      marker = state.src.charCodeAt(start);\n\n  if (silent) { return false; }\n\n  if (marker !== 0x7E/* ~ */) { return false; }\n\n  scanned = state.scanDelims(state.pos, true);\n  len = scanned.length;\n  ch = String.fromCharCode(marker);\n\n  if (len < 2) { return false; }\n\n  if (len % 2) {\n    token         = state.push('text', '', 0);\n    token.content = ch;\n    len--;\n  }\n\n  for (i = 0; i < len; i += 2) {\n    token         = state.push('text', '', 0);\n    token.content = ch + ch;\n\n    state.delimiters.push({\n      marker: marker,\n      length: 0,     // disable \"rule of 3\" length checks meant for emphasis\n      token:  state.tokens.length - 1,\n      end:    -1,\n      open:   scanned.can_open,\n      close:  scanned.can_close\n    });\n  }\n\n  state.pos += scanned.length;\n\n  return true;\n};\n\n\nfunction postProcess(state, delimiters) {\n  var i, j,\n      startDelim,\n      endDelim,\n      token,\n      loneMarkers = [],\n      max = delimiters.length;\n\n  for (i = 0; i < max; i++) {\n    startDelim = delimiters[i];\n\n    if (startDelim.marker !== 0x7E/* ~ */) {\n      continue;\n    }\n\n    if (startDelim.end === -1) {\n      continue;\n    }\n\n    endDelim = delimiters[startDelim.end];\n\n    token         = state.tokens[startDelim.token];\n    token.type    = 's_open';\n    token.tag     = 's';\n    token.nesting = 1;\n    token.markup  = '~~';\n    token.content = '';\n\n    token         = state.tokens[endDelim.token];\n    token.type    = 's_close';\n    token.tag     = 's';\n    token.nesting = -1;\n    token.markup  = '~~';\n    token.content = '';\n\n    if (state.tokens[endDelim.token - 1].type === 'text' &&\n        state.tokens[endDelim.token - 1].content === '~') {\n\n      loneMarkers.push(endDelim.token - 1);\n    }\n  }\n\n  // If a marker sequence has an odd number of characters, it's splitted\n  // like this: `~~~~~` -> `~` + `~~` + `~~`, leaving one marker at the\n  // start of the sequence.\n  //\n  // So, we have to move all those markers after subsequent s_close tags.\n  //\n  while (loneMarkers.length) {\n    i = loneMarkers.pop();\n    j = i + 1;\n\n    while (j < state.tokens.length && state.tokens[j].type === 's_close') {\n      j++;\n    }\n\n    j--;\n\n    if (i !== j) {\n      token = state.tokens[j];\n      state.tokens[j] = state.tokens[i];\n      state.tokens[i] = token;\n    }\n  }\n}\n\n\n// Walk through delimiter list and replace text tokens with tags\n//\nmodule.exports.postProcess = function strikethrough(state) {\n  var curr,\n      tokens_meta = state.tokens_meta,\n      max = state.tokens_meta.length;\n\n  postProcess(state, state.delimiters);\n\n  for (curr = 0; curr < max; curr++) {\n    if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n      postProcess(state, tokens_meta[curr].delimiters);\n    }\n  }\n};\n", "// Process *this* and _that_\n//\n'use strict';\n\n\n// Insert each marker as a separate text token, and add it to delimiter list\n//\nmodule.exports.tokenize = function emphasis(state, silent) {\n  var i, scanned, token,\n      start = state.pos,\n      marker = state.src.charCodeAt(start);\n\n  if (silent) { return false; }\n\n  if (marker !== 0x5F /* _ */ && marker !== 0x2A /* * */) { return false; }\n\n  scanned = state.scanDelims(state.pos, marker === 0x2A);\n\n  for (i = 0; i < scanned.length; i++) {\n    token         = state.push('text', '', 0);\n    token.content = String.fromCharCode(marker);\n\n    state.delimiters.push({\n      // Char code of the starting marker (number).\n      //\n      marker: marker,\n\n      // Total length of these series of delimiters.\n      //\n      length: scanned.length,\n\n      // A position of the token this delimiter corresponds to.\n      //\n      token:  state.tokens.length - 1,\n\n      // If this delimiter is matched as a valid opener, `end` will be\n      // equal to its position, otherwise it's `-1`.\n      //\n      end:    -1,\n\n      // Boolean flags that determine if this delimiter could open or close\n      // an emphasis.\n      //\n      open:   scanned.can_open,\n      close:  scanned.can_close\n    });\n  }\n\n  state.pos += scanned.length;\n\n  return true;\n};\n\n\nfunction postProcess(state, delimiters) {\n  var i,\n      startDelim,\n      endDelim,\n      token,\n      ch,\n      isStrong,\n      max = delimiters.length;\n\n  for (i = max - 1; i >= 0; i--) {\n    startDelim = delimiters[i];\n\n    if (startDelim.marker !== 0x5F/* _ */ && startDelim.marker !== 0x2A/* * */) {\n      continue;\n    }\n\n    // Process only opening markers\n    if (startDelim.end === -1) {\n      continue;\n    }\n\n    endDelim = delimiters[startDelim.end];\n\n    // If the previous delimiter has the same marker and is adjacent to this one,\n    // merge those into one strong delimiter.\n    //\n    // `<em><em>whatever</em></em>` -> `<strong>whatever</strong>`\n    //\n    isStrong = i > 0 &&\n               delimiters[i - 1].end === startDelim.end + 1 &&\n               // check that first two markers match and adjacent\n               delimiters[i - 1].marker === startDelim.marker &&\n               delimiters[i - 1].token === startDelim.token - 1 &&\n               // check that last two markers are adjacent (we can safely assume they match)\n               delimiters[startDelim.end + 1].token === endDelim.token + 1;\n\n    ch = String.fromCharCode(startDelim.marker);\n\n    token         = state.tokens[startDelim.token];\n    token.type    = isStrong ? 'strong_open' : 'em_open';\n    token.tag     = isStrong ? 'strong' : 'em';\n    token.nesting = 1;\n    token.markup  = isStrong ? ch + ch : ch;\n    token.content = '';\n\n    token         = state.tokens[endDelim.token];\n    token.type    = isStrong ? 'strong_close' : 'em_close';\n    token.tag     = isStrong ? 'strong' : 'em';\n    token.nesting = -1;\n    token.markup  = isStrong ? ch + ch : ch;\n    token.content = '';\n\n    if (isStrong) {\n      state.tokens[delimiters[i - 1].token].content = '';\n      state.tokens[delimiters[startDelim.end + 1].token].content = '';\n      i--;\n    }\n  }\n}\n\n\n// Walk through delimiter list and replace text tokens with tags\n//\nmodule.exports.postProcess = function emphasis(state) {\n  var curr,\n      tokens_meta = state.tokens_meta,\n      max = state.tokens_meta.length;\n\n  postProcess(state, state.delimiters);\n\n  for (curr = 0; curr < max; curr++) {\n    if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n      postProcess(state, tokens_meta[curr].delimiters);\n    }\n  }\n};\n", "// Process [link](<to> \"stuff\")\n\n'use strict';\n\nvar normalizeReference   = require('../common/utils').normalizeReference;\nvar isSpace              = require('../common/utils').isSpace;\n\n\nmodule.exports = function link(state, silent) {\n  var attrs,\n      code,\n      label,\n      labelEnd,\n      labelStart,\n      pos,\n      res,\n      ref,\n      token,\n      href = '',\n      title = '',\n      oldPos = state.pos,\n      max = state.posMax,\n      start = state.pos,\n      parseReference = true;\n\n  if (state.src.charCodeAt(state.pos) !== 0x5B/* [ */) { return false; }\n\n  labelStart = state.pos + 1;\n  labelEnd = state.md.helpers.parseLinkLabel(state, state.pos, true);\n\n  // parser failed to find ']', so it's not a valid link\n  if (labelEnd < 0) { return false; }\n\n  pos = labelEnd + 1;\n  if (pos < max && state.src.charCodeAt(pos) === 0x28/* ( */) {\n    //\n    // Inline link\n    //\n\n    // might have found a valid shortcut link, disable reference parsing\n    parseReference = false;\n\n    // [link](  <href>  \"title\"  )\n    //        ^^ skipping these spaces\n    pos++;\n    for (; pos < max; pos++) {\n      code = state.src.charCodeAt(pos);\n      if (!isSpace(code) && code !== 0x0A) { break; }\n    }\n    if (pos >= max) { return false; }\n\n    // [link](  <href>  \"title\"  )\n    //          ^^^^^^ parsing link destination\n    start = pos;\n    res = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax);\n    if (res.ok) {\n      href = state.md.normalizeLink(res.str);\n      if (state.md.validateLink(href)) {\n        pos = res.pos;\n      } else {\n        href = '';\n      }\n\n      // [link](  <href>  \"title\"  )\n      //                ^^ skipping these spaces\n      start = pos;\n      for (; pos < max; pos++) {\n        code = state.src.charCodeAt(pos);\n        if (!isSpace(code) && code !== 0x0A) { break; }\n      }\n\n      // [link](  <href>  \"title\"  )\n      //                  ^^^^^^^ parsing link title\n      res = state.md.helpers.parseLinkTitle(state.src, pos, state.posMax);\n      if (pos < max && start !== pos && res.ok) {\n        title = res.str;\n        pos = res.pos;\n\n        // [link](  <href>  \"title\"  )\n        //                         ^^ skipping these spaces\n        for (; pos < max; pos++) {\n          code = state.src.charCodeAt(pos);\n          if (!isSpace(code) && code !== 0x0A) { break; }\n        }\n      }\n    }\n\n    if (pos >= max || state.src.charCodeAt(pos) !== 0x29/* ) */) {\n      // parsing a valid shortcut link failed, fallback to reference\n      parseReference = true;\n    }\n    pos++;\n  }\n\n  if (parseReference) {\n    //\n    // Link reference\n    //\n    if (typeof state.env.references === 'undefined') { return false; }\n\n    if (pos < max && state.src.charCodeAt(pos) === 0x5B/* [ */) {\n      start = pos + 1;\n      pos = state.md.helpers.parseLinkLabel(state, pos);\n      if (pos >= 0) {\n        label = state.src.slice(start, pos++);\n      } else {\n        pos = labelEnd + 1;\n      }\n    } else {\n      pos = labelEnd + 1;\n    }\n\n    // covers label === '' and label === undefined\n    // (collapsed reference link and shortcut reference link respectively)\n    if (!label) { label = state.src.slice(labelStart, labelEnd); }\n\n    ref = state.env.references[normalizeReference(label)];\n    if (!ref) {\n      state.pos = oldPos;\n      return false;\n    }\n    href = ref.href;\n    title = ref.title;\n  }\n\n  //\n  // We found the end of the link, and know for a fact it's a valid link;\n  // so all that's left to do is to call tokenizer.\n  //\n  if (!silent) {\n    state.pos = labelStart;\n    state.posMax = labelEnd;\n\n    token        = state.push('link_open', 'a', 1);\n    token.attrs  = attrs = [ [ 'href', href ] ];\n    if (title) {\n      attrs.push([ 'title', title ]);\n    }\n\n    state.md.inline.tokenize(state);\n\n    token        = state.push('link_close', 'a', -1);\n  }\n\n  state.pos = pos;\n  state.posMax = max;\n  return true;\n};\n", "// Process ![image](<src> \"title\")\n\n'use strict';\n\nvar normalizeReference   = require('../common/utils').normalizeReference;\nvar isSpace              = require('../common/utils').isSpace;\n\n\nmodule.exports = function image(state, silent) {\n  var attrs,\n      code,\n      content,\n      label,\n      labelEnd,\n      labelStart,\n      pos,\n      ref,\n      res,\n      title,\n      token,\n      tokens,\n      start,\n      href = '',\n      oldPos = state.pos,\n      max = state.posMax;\n\n  if (state.src.charCodeAt(state.pos) !== 0x21/* ! */) { return false; }\n  if (state.src.charCodeAt(state.pos + 1) !== 0x5B/* [ */) { return false; }\n\n  labelStart = state.pos + 2;\n  labelEnd = state.md.helpers.parseLinkLabel(state, state.pos + 1, false);\n\n  // parser failed to find ']', so it's not a valid link\n  if (labelEnd < 0) { return false; }\n\n  pos = labelEnd + 1;\n  if (pos < max && state.src.charCodeAt(pos) === 0x28/* ( */) {\n    //\n    // Inline link\n    //\n\n    // [link](  <href>  \"title\"  )\n    //        ^^ skipping these spaces\n    pos++;\n    for (; pos < max; pos++) {\n      code = state.src.charCodeAt(pos);\n      if (!isSpace(code) && code !== 0x0A) { break; }\n    }\n    if (pos >= max) { return false; }\n\n    // [link](  <href>  \"title\"  )\n    //          ^^^^^^ parsing link destination\n    start = pos;\n    res = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax);\n    if (res.ok) {\n      href = state.md.normalizeLink(res.str);\n      if (state.md.validateLink(href)) {\n        pos = res.pos;\n      } else {\n        href = '';\n      }\n    }\n\n    // [link](  <href>  \"title\"  )\n    //                ^^ skipping these spaces\n    start = pos;\n    for (; pos < max; pos++) {\n      code = state.src.charCodeAt(pos);\n      if (!isSpace(code) && code !== 0x0A) { break; }\n    }\n\n    // [link](  <href>  \"title\"  )\n    //                  ^^^^^^^ parsing link title\n    res = state.md.helpers.parseLinkTitle(state.src, pos, state.posMax);\n    if (pos < max && start !== pos && res.ok) {\n      title = res.str;\n      pos = res.pos;\n\n      // [link](  <href>  \"title\"  )\n      //                         ^^ skipping these spaces\n      for (; pos < max; pos++) {\n        code = state.src.charCodeAt(pos);\n        if (!isSpace(code) && code !== 0x0A) { break; }\n      }\n    } else {\n      title = '';\n    }\n\n    if (pos >= max || state.src.charCodeAt(pos) !== 0x29/* ) */) {\n      state.pos = oldPos;\n      return false;\n    }\n    pos++;\n  } else {\n    //\n    // Link reference\n    //\n    if (typeof state.env.references === 'undefined') { return false; }\n\n    if (pos < max && state.src.charCodeAt(pos) === 0x5B/* [ */) {\n      start = pos + 1;\n      pos = state.md.helpers.parseLinkLabel(state, pos);\n      if (pos >= 0) {\n        label = state.src.slice(start, pos++);\n      } else {\n        pos = labelEnd + 1;\n      }\n    } else {\n      pos = labelEnd + 1;\n    }\n\n    // covers label === '' and label === undefined\n    // (collapsed reference link and shortcut reference link respectively)\n    if (!label) { label = state.src.slice(labelStart, labelEnd); }\n\n    ref = state.env.references[normalizeReference(label)];\n    if (!ref) {\n      state.pos = oldPos;\n      return false;\n    }\n    href = ref.href;\n    title = ref.title;\n  }\n\n  //\n  // We found the end of the link, and know for a fact it's a valid link;\n  // so all that's left to do is to call tokenizer.\n  //\n  if (!silent) {\n    content = state.src.slice(labelStart, labelEnd);\n\n    state.md.inline.parse(\n      content,\n      state.md,\n      state.env,\n      tokens = []\n    );\n\n    token          = state.push('image', 'img', 0);\n    token.attrs    = attrs = [ [ 'src', href ], [ 'alt', '' ] ];\n    token.children = tokens;\n    token.content  = content;\n\n    if (title) {\n      attrs.push([ 'title', title ]);\n    }\n  }\n\n  state.pos = pos;\n  state.posMax = max;\n  return true;\n};\n", "// Process autolinks '<protocol:...>'\n\n'use strict';\n\n\n/*eslint max-len:0*/\nvar EMAIL_RE    = /^([a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)$/;\nvar AUTOLINK_RE = /^([a-zA-Z][a-zA-Z0-9+.\\-]{1,31}):([^<>\\x00-\\x20]*)$/;\n\n\nmodule.exports = function autolink(state, silent) {\n  var url, fullUrl, token, ch, start, max,\n      pos = state.pos;\n\n  if (state.src.charCodeAt(pos) !== 0x3C/* < */) { return false; }\n\n  start = state.pos;\n  max = state.posMax;\n\n  for (;;) {\n    if (++pos >= max) return false;\n\n    ch = state.src.charCodeAt(pos);\n\n    if (ch === 0x3C /* < */) return false;\n    if (ch === 0x3E /* > */) break;\n  }\n\n  url = state.src.slice(start + 1, pos);\n\n  if (AUTOLINK_RE.test(url)) {\n    fullUrl = state.md.normalizeLink(url);\n    if (!state.md.validateLink(fullUrl)) { return false; }\n\n    if (!silent) {\n      token         = state.push('link_open', 'a', 1);\n      token.attrs   = [ [ 'href', fullUrl ] ];\n      token.markup  = 'autolink';\n      token.info    = 'auto';\n\n      token         = state.push('text', '', 0);\n      token.content = state.md.normalizeLinkText(url);\n\n      token         = state.push('link_close', 'a', -1);\n      token.markup  = 'autolink';\n      token.info    = 'auto';\n    }\n\n    state.pos += url.length + 2;\n    return true;\n  }\n\n  if (EMAIL_RE.test(url)) {\n    fullUrl = state.md.normalizeLink('mailto:' + url);\n    if (!state.md.validateLink(fullUrl)) { return false; }\n\n    if (!silent) {\n      token         = state.push('link_open', 'a', 1);\n      token.attrs   = [ [ 'href', fullUrl ] ];\n      token.markup  = 'autolink';\n      token.info    = 'auto';\n\n      token         = state.push('text', '', 0);\n      token.content = state.md.normalizeLinkText(url);\n\n      token         = state.push('link_close', 'a', -1);\n      token.markup  = 'autolink';\n      token.info    = 'auto';\n    }\n\n    state.pos += url.length + 2;\n    return true;\n  }\n\n  return false;\n};\n", "// Process html tags\n\n'use strict';\n\n\nvar HTML_TAG_RE = require('../common/html_re').HTML_TAG_RE;\n\n\nfunction isLetter(ch) {\n  /*eslint no-bitwise:0*/\n  var lc = ch | 0x20; // to lower case\n  return (lc >= 0x61/* a */) && (lc <= 0x7a/* z */);\n}\n\n\nmodule.exports = function html_inline(state, silent) {\n  var ch, match, max, token,\n      pos = state.pos;\n\n  if (!state.md.options.html) { return false; }\n\n  // Check start\n  max = state.posMax;\n  if (state.src.charCodeAt(pos) !== 0x3C/* < */ ||\n      pos + 2 >= max) {\n    return false;\n  }\n\n  // Quick fail on second char\n  ch = state.src.charCodeAt(pos + 1);\n  if (ch !== 0x21/* ! */ &&\n      ch !== 0x3F/* ? */ &&\n      ch !== 0x2F/* / */ &&\n      !isLetter(ch)) {\n    return false;\n  }\n\n  match = state.src.slice(pos).match(HTML_TAG_RE);\n  if (!match) { return false; }\n\n  if (!silent) {\n    token         = state.push('html_inline', '', 0);\n    token.content = state.src.slice(pos, pos + match[0].length);\n  }\n  state.pos += match[0].length;\n  return true;\n};\n", "// Process html entity - &#123;, &#xAF;, &quot;, ...\n\n'use strict';\n\nvar entities          = require('../common/entities');\nvar has               = require('../common/utils').has;\nvar isValidEntityCode = require('../common/utils').isValidEntityCode;\nvar fromCodePoint     = require('../common/utils').fromCodePoint;\n\n\nvar DIGITAL_RE = /^&#((?:x[a-f0-9]{1,6}|[0-9]{1,7}));/i;\nvar NAMED_RE   = /^&([a-z][a-z0-9]{1,31});/i;\n\n\nmodule.exports = function entity(state, silent) {\n  var ch, code, match, pos = state.pos, max = state.posMax;\n\n  if (state.src.charCodeAt(pos) !== 0x26/* & */) { return false; }\n\n  if (pos + 1 < max) {\n    ch = state.src.charCodeAt(pos + 1);\n\n    if (ch === 0x23 /* # */) {\n      match = state.src.slice(pos).match(DIGITAL_RE);\n      if (match) {\n        if (!silent) {\n          code = match[1][0].toLowerCase() === 'x' ? parseInt(match[1].slice(1), 16) : parseInt(match[1], 10);\n          state.pending += isValidEntityCode(code) ? fromCodePoint(code) : fromCodePoint(0xFFFD);\n        }\n        state.pos += match[0].length;\n        return true;\n      }\n    } else {\n      match = state.src.slice(pos).match(NAMED_RE);\n      if (match) {\n        if (has(entities, match[1])) {\n          if (!silent) { state.pending += entities[match[1]]; }\n          state.pos += match[0].length;\n          return true;\n        }\n      }\n    }\n  }\n\n  if (!silent) { state.pending += '&'; }\n  state.pos++;\n  return true;\n};\n", "// For each opening emphasis-like marker find a matching closing one\n//\n'use strict';\n\n\nfunction processDelimiters(state, delimiters) {\n  var closerIdx, openerIdx, closer, opener, minOpenerIdx, newMinOpenerIdx,\n      isOddMatch, lastJump,\n      openersBottom = {},\n      max = delimiters.length;\n\n  if (!max) return;\n\n  // headerIdx is the first delimiter of the current (where closer is) delimiter run\n  var headerIdx = 0;\n  var lastTokenIdx = -2; // needs any value lower than -1\n  var jumps = [];\n\n  for (closerIdx = 0; closerIdx < max; closerIdx++) {\n    closer = delimiters[closerIdx];\n\n    jumps.push(0);\n\n    // markers belong to same delimiter run if:\n    //  - they have adjacent tokens\n    //  - AND markers are the same\n    //\n    if (delimiters[headerIdx].marker !== closer.marker || lastTokenIdx !== closer.token - 1) {\n      headerIdx = closerIdx;\n    }\n\n    lastTokenIdx = closer.token;\n\n    // Length is only used for emphasis-specific \"rule of 3\",\n    // if it's not defined (in strikethrough or 3rd party plugins),\n    // we can default it to 0 to disable those checks.\n    //\n    closer.length = closer.length || 0;\n\n    if (!closer.close) continue;\n\n    // Previously calculated lower bounds (previous fails)\n    // for each marker, each delimiter length modulo 3,\n    // and for whether this closer can be an opener;\n    // https://github.com/commonmark/cmark/commit/34250e12ccebdc6372b8b49c44fab57c72443460\n    if (!openersBottom.hasOwnProperty(closer.marker)) {\n      openersBottom[closer.marker] = [ -1, -1, -1, -1, -1, -1 ];\n    }\n\n    minOpenerIdx = openersBottom[closer.marker][(closer.open ? 3 : 0) + (closer.length % 3)];\n\n    openerIdx = headerIdx - jumps[headerIdx] - 1;\n\n    newMinOpenerIdx = openerIdx;\n\n    for (; openerIdx > minOpenerIdx; openerIdx -= jumps[openerIdx] + 1) {\n      opener = delimiters[openerIdx];\n\n      if (opener.marker !== closer.marker) continue;\n\n      if (opener.open && opener.end < 0) {\n\n        isOddMatch = false;\n\n        // from spec:\n        //\n        // If one of the delimiters can both open and close emphasis, then the\n        // sum of the lengths of the delimiter runs containing the opening and\n        // closing delimiters must not be a multiple of 3 unless both lengths\n        // are multiples of 3.\n        //\n        if (opener.close || closer.open) {\n          if ((opener.length + closer.length) % 3 === 0) {\n            if (opener.length % 3 !== 0 || closer.length % 3 !== 0) {\n              isOddMatch = true;\n            }\n          }\n        }\n\n        if (!isOddMatch) {\n          // If previous delimiter cannot be an opener, we can safely skip\n          // the entire sequence in future checks. This is required to make\n          // sure algorithm has linear complexity (see *_*_*_*_*_... case).\n          //\n          lastJump = openerIdx > 0 && !delimiters[openerIdx - 1].open ?\n            jumps[openerIdx - 1] + 1 :\n            0;\n\n          jumps[closerIdx] = closerIdx - openerIdx + lastJump;\n          jumps[openerIdx] = lastJump;\n\n          closer.open  = false;\n          opener.end   = closerIdx;\n          opener.close = false;\n          newMinOpenerIdx = -1;\n          // treat next token as start of run,\n          // it optimizes skips in **<...>**a**<...>** pathological case\n          lastTokenIdx = -2;\n          break;\n        }\n      }\n    }\n\n    if (newMinOpenerIdx !== -1) {\n      // If match for this delimiter run failed, we want to set lower bound for\n      // future lookups. This is required to make sure algorithm has linear\n      // complexity.\n      //\n      // See details here:\n      // https://github.com/commonmark/cmark/issues/178#issuecomment-270417442\n      //\n      openersBottom[closer.marker][(closer.open ? 3 : 0) + ((closer.length || 0) % 3)] = newMinOpenerIdx;\n    }\n  }\n}\n\n\nmodule.exports = function link_pairs(state) {\n  var curr,\n      tokens_meta = state.tokens_meta,\n      max = state.tokens_meta.length;\n\n  processDelimiters(state, state.delimiters);\n\n  for (curr = 0; curr < max; curr++) {\n    if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n      processDelimiters(state, tokens_meta[curr].delimiters);\n    }\n  }\n};\n", "// Clean up tokens after emphasis and strikethrough postprocessing:\n// merge adjacent text nodes into one and re-calculate all token levels\n//\n// This is necessary because initially emphasis delimiter markers (*, _, ~)\n// are treated as their own separate text tokens. Then emphasis rule either\n// leaves them as text (needed to merge with adjacent text) or turns them\n// into opening/closing tags (which messes up levels inside).\n//\n'use strict';\n\n\nmodule.exports = function text_collapse(state) {\n  var curr, last,\n      level = 0,\n      tokens = state.tokens,\n      max = state.tokens.length;\n\n  for (curr = last = 0; curr < max; curr++) {\n    // re-calculate levels after emphasis/strikethrough turns some text nodes\n    // into opening/closing tags\n    if (tokens[curr].nesting < 0) level--; // closing tag\n    tokens[curr].level = level;\n    if (tokens[curr].nesting > 0) level++; // opening tag\n\n    if (tokens[curr].type === 'text' &&\n        curr + 1 < max &&\n        tokens[curr + 1].type === 'text') {\n\n      // collapse two adjacent text nodes\n      tokens[curr + 1].content = tokens[curr].content + tokens[curr + 1].content;\n    } else {\n      if (curr !== last) { tokens[last] = tokens[curr]; }\n\n      last++;\n    }\n  }\n\n  if (curr !== last) {\n    tokens.length = last;\n  }\n};\n", "// Inline parser state\n\n'use strict';\n\n\nvar Token          = require('../token');\nvar isWhiteSpace   = require('../common/utils').isWhiteSpace;\nvar isPunctChar    = require('../common/utils').isPunctChar;\nvar isMdAsciiPunct = require('../common/utils').isMdAsciiPunct;\n\n\nfunction StateInline(src, md, env, outTokens) {\n  this.src = src;\n  this.env = env;\n  this.md = md;\n  this.tokens = outTokens;\n  this.tokens_meta = Array(outTokens.length);\n\n  this.pos = 0;\n  this.posMax = this.src.length;\n  this.level = 0;\n  this.pending = '';\n  this.pendingLevel = 0;\n\n  // Stores { start: end } pairs. Useful for backtrack\n  // optimization of pairs parse (emphasis, strikes).\n  this.cache = {};\n\n  // List of emphasis-like delimiters for current tag\n  this.delimiters = [];\n\n  // Stack of delimiter lists for upper level tags\n  this._prev_delimiters = [];\n\n  // backtick length => last seen position\n  this.backticks = {};\n  this.backticksScanned = false;\n}\n\n\n// Flush pending text\n//\nStateInline.prototype.pushPending = function () {\n  var token = new Token('text', '', 0);\n  token.content = this.pending;\n  token.level = this.pendingLevel;\n  this.tokens.push(token);\n  this.pending = '';\n  return token;\n};\n\n\n// Push new token to \"stream\".\n// If pending text exists - flush it as text token\n//\nStateInline.prototype.push = function (type, tag, nesting) {\n  if (this.pending) {\n    this.pushPending();\n  }\n\n  var token = new Token(type, tag, nesting);\n  var token_meta = null;\n\n  if (nesting < 0) {\n    // closing tag\n    this.level--;\n    this.delimiters = this._prev_delimiters.pop();\n  }\n\n  token.level = this.level;\n\n  if (nesting > 0) {\n    // opening tag\n    this.level++;\n    this._prev_delimiters.push(this.delimiters);\n    this.delimiters = [];\n    token_meta = { delimiters: this.delimiters };\n  }\n\n  this.pendingLevel = this.level;\n  this.tokens.push(token);\n  this.tokens_meta.push(token_meta);\n  return token;\n};\n\n\n// Scan a sequence of emphasis-like markers, and determine whether\n// it can start an emphasis sequence or end an emphasis sequence.\n//\n//  - start - position to scan from (it should point at a valid marker);\n//  - canSplitWord - determine if these markers can be found inside a word\n//\nStateInline.prototype.scanDelims = function (start, canSplitWord) {\n  var pos = start, lastChar, nextChar, count, can_open, can_close,\n      isLastWhiteSpace, isLastPunctChar,\n      isNextWhiteSpace, isNextPunctChar,\n      left_flanking = true,\n      right_flanking = true,\n      max = this.posMax,\n      marker = this.src.charCodeAt(start);\n\n  // treat beginning of the line as a whitespace\n  lastChar = start > 0 ? this.src.charCodeAt(start - 1) : 0x20;\n\n  while (pos < max && this.src.charCodeAt(pos) === marker) { pos++; }\n\n  count = pos - start;\n\n  // treat end of the line as a whitespace\n  nextChar = pos < max ? this.src.charCodeAt(pos) : 0x20;\n\n  isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctChar(String.fromCharCode(lastChar));\n  isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctChar(String.fromCharCode(nextChar));\n\n  isLastWhiteSpace = isWhiteSpace(lastChar);\n  isNextWhiteSpace = isWhiteSpace(nextChar);\n\n  if (isNextWhiteSpace) {\n    left_flanking = false;\n  } else if (isNextPunctChar) {\n    if (!(isLastWhiteSpace || isLastPunctChar)) {\n      left_flanking = false;\n    }\n  }\n\n  if (isLastWhiteSpace) {\n    right_flanking = false;\n  } else if (isLastPunctChar) {\n    if (!(isNextWhiteSpace || isNextPunctChar)) {\n      right_flanking = false;\n    }\n  }\n\n  if (!canSplitWord) {\n    can_open  = left_flanking  && (!right_flanking || isLastPunctChar);\n    can_close = right_flanking && (!left_flanking  || isNextPunctChar);\n  } else {\n    can_open  = left_flanking;\n    can_close = right_flanking;\n  }\n\n  return {\n    can_open:  can_open,\n    can_close: can_close,\n    length:    count\n  };\n};\n\n\n// re-export Token class to use in block rules\nStateInline.prototype.Token = Token;\n\n\nmodule.exports = StateInline;\n", "/** internal\n * class ParserInline\n *\n * Tokenizes paragraph content.\n **/\n'use strict';\n\n\nvar Ruler           = require('./ruler');\n\n\n////////////////////////////////////////////////////////////////////////////////\n// Parser rules\n\nvar _rules = [\n  [ 'text',            require('./rules_inline/text') ],\n  [ 'newline',         require('./rules_inline/newline') ],\n  [ 'escape',          require('./rules_inline/escape') ],\n  [ 'backticks',       require('./rules_inline/backticks') ],\n  [ 'strikethrough',   require('./rules_inline/strikethrough').tokenize ],\n  [ 'emphasis',        require('./rules_inline/emphasis').tokenize ],\n  [ 'link',            require('./rules_inline/link') ],\n  [ 'image',           require('./rules_inline/image') ],\n  [ 'autolink',        require('./rules_inline/autolink') ],\n  [ 'html_inline',     require('./rules_inline/html_inline') ],\n  [ 'entity',          require('./rules_inline/entity') ]\n];\n\nvar _rules2 = [\n  [ 'balance_pairs',   require('./rules_inline/balance_pairs') ],\n  [ 'strikethrough',   require('./rules_inline/strikethrough').postProcess ],\n  [ 'emphasis',        require('./rules_inline/emphasis').postProcess ],\n  [ 'text_collapse',   require('./rules_inline/text_collapse') ]\n];\n\n\n/**\n * new ParserInline()\n **/\nfunction ParserInline() {\n  var i;\n\n  /**\n   * ParserInline#ruler -> Ruler\n   *\n   * [[Ruler]] instance. Keep configuration of inline rules.\n   **/\n  this.ruler = new Ruler();\n\n  for (i = 0; i < _rules.length; i++) {\n    this.ruler.push(_rules[i][0], _rules[i][1]);\n  }\n\n  /**\n   * ParserInline#ruler2 -> Ruler\n   *\n   * [[Ruler]] instance. Second ruler used for post-processing\n   * (e.g. in emphasis-like rules).\n   **/\n  this.ruler2 = new Ruler();\n\n  for (i = 0; i < _rules2.length; i++) {\n    this.ruler2.push(_rules2[i][0], _rules2[i][1]);\n  }\n}\n\n\n// Skip single token by running all rules in validation mode;\n// returns `true` if any rule reported success\n//\nParserInline.prototype.skipToken = function (state) {\n  var ok, i, pos = state.pos,\n      rules = this.ruler.getRules(''),\n      len = rules.length,\n      maxNesting = state.md.options.maxNesting,\n      cache = state.cache;\n\n\n  if (typeof cache[pos] !== 'undefined') {\n    state.pos = cache[pos];\n    return;\n  }\n\n  if (state.level < maxNesting) {\n    for (i = 0; i < len; i++) {\n      // Increment state.level and decrement it later to limit recursion.\n      // It's harmless to do here, because no tokens are created. But ideally,\n      // we'd need a separate private state variable for this purpose.\n      //\n      state.level++;\n      ok = rules[i](state, true);\n      state.level--;\n\n      if (ok) { break; }\n    }\n  } else {\n    // Too much nesting, just skip until the end of the paragraph.\n    //\n    // NOTE: this will cause links to behave incorrectly in the following case,\n    //       when an amount of `[` is exactly equal to `maxNesting + 1`:\n    //\n    //       [[[[[[[[[[[[[[[[[[[[[foo]()\n    //\n    // TODO: remove this workaround when CM standard will allow nested links\n    //       (we can replace it by preventing links from being parsed in\n    //       validation mode)\n    //\n    state.pos = state.posMax;\n  }\n\n  if (!ok) { state.pos++; }\n  cache[pos] = state.pos;\n};\n\n\n// Generate tokens for input range\n//\nParserInline.prototype.tokenize = function (state) {\n  var ok, i,\n      rules = this.ruler.getRules(''),\n      len = rules.length,\n      end = state.posMax,\n      maxNesting = state.md.options.maxNesting;\n\n  while (state.pos < end) {\n    // Try all possible rules.\n    // On success, rule should:\n    //\n    // - update `state.pos`\n    // - update `state.tokens`\n    // - return true\n\n    if (state.level < maxNesting) {\n      for (i = 0; i < len; i++) {\n        ok = rules[i](state, false);\n        if (ok) { break; }\n      }\n    }\n\n    if (ok) {\n      if (state.pos >= end) { break; }\n      continue;\n    }\n\n    state.pending += state.src[state.pos++];\n  }\n\n  if (state.pending) {\n    state.pushPending();\n  }\n};\n\n\n/**\n * ParserInline.parse(str, md, env, outTokens)\n *\n * Process input string and push inline tokens into `outTokens`\n **/\nParserInline.prototype.parse = function (str, md, env, outTokens) {\n  var i, rules, len;\n  var state = new this.State(str, md, env, outTokens);\n\n  this.tokenize(state);\n\n  rules = this.ruler2.getRules('');\n  len = rules.length;\n\n  for (i = 0; i < len; i++) {\n    rules[i](state);\n  }\n};\n\n\nParserInline.prototype.State = require('./rules_inline/state_inline');\n\n\nmodule.exports = ParserInline;\n", "'use strict';\n\n\nmodule.exports = function (opts) {\n  var re = {};\n\n  // Use direct extract instead of `regenerate` to reduse browserified size\n  re.src_Any = require('uc.micro/properties/Any/regex').source;\n  re.src_Cc  = require('uc.micro/categories/Cc/regex').source;\n  re.src_Z   = require('uc.micro/categories/Z/regex').source;\n  re.src_P   = require('uc.micro/categories/P/regex').source;\n\n  // \\p{\\Z\\P\\Cc\\CF} (white spaces + control + format + punctuation)\n  re.src_ZPCc = [ re.src_Z, re.src_P, re.src_Cc ].join('|');\n\n  // \\p{\\Z\\Cc} (white spaces + control)\n  re.src_ZCc = [ re.src_Z, re.src_Cc ].join('|');\n\n  // Experimental. List of chars, completely prohibited in links\n  // because can separate it from other part of text\n  var text_separators = '[><\\uff5c]';\n\n  // All possible word characters (everything without punctuation, spaces & controls)\n  // Defined via punctuation & spaces to save space\n  // Should be something like \\p{\\L\\N\\S\\M} (\\w but without `_`)\n  re.src_pseudo_letter       = '(?:(?!' + text_separators + '|' + re.src_ZPCc + ')' + re.src_Any + ')';\n  // The same as abothe but without [0-9]\n  // var src_pseudo_letter_non_d = '(?:(?![0-9]|' + src_ZPCc + ')' + src_Any + ')';\n\n  ////////////////////////////////////////////////////////////////////////////////\n\n  re.src_ip4 =\n\n    '(?:(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)';\n\n  // Prohibit any of \"@/[]()\" in user/pass to avoid wrong domain fetch.\n  re.src_auth    = '(?:(?:(?!' + re.src_ZCc + '|[@/\\\\[\\\\]()]).)+@)?';\n\n  re.src_port =\n\n    '(?::(?:6(?:[0-4]\\\\d{3}|5(?:[0-4]\\\\d{2}|5(?:[0-2]\\\\d|3[0-5])))|[1-5]?\\\\d{1,4}))?';\n\n  re.src_host_terminator =\n\n    '(?=$|' + text_separators + '|' + re.src_ZPCc + ')(?!-|_|:\\\\d|\\\\.-|\\\\.(?!$|' + re.src_ZPCc + '))';\n\n  re.src_path =\n\n    '(?:' +\n      '[/?#]' +\n        '(?:' +\n          '(?!' + re.src_ZCc + '|' + text_separators + '|[()[\\\\]{}.,\"\\'?!\\\\-;]).|' +\n          '\\\\[(?:(?!' + re.src_ZCc + '|\\\\]).)*\\\\]|' +\n          '\\\\((?:(?!' + re.src_ZCc + '|[)]).)*\\\\)|' +\n          '\\\\{(?:(?!' + re.src_ZCc + '|[}]).)*\\\\}|' +\n          '\\\\\"(?:(?!' + re.src_ZCc + '|[\"]).)+\\\\\"|' +\n          \"\\\\'(?:(?!\" + re.src_ZCc + \"|[']).)+\\\\'|\" +\n          \"\\\\'(?=\" + re.src_pseudo_letter + '|[-]).|' +  // allow `I'm_king` if no pair found\n          '\\\\.{2,}[a-zA-Z0-9%/&]|' + // google has many dots in \"google search\" links (#66, #81).\n                                     // github has ... in commit range links,\n                                     // Restrict to\n                                     // - english\n                                     // - percent-encoded\n                                     // - parts of file path\n                                     // - params separator\n                                     // until more examples found.\n          '\\\\.(?!' + re.src_ZCc + '|[.]).|' +\n          (opts && opts['---'] ?\n            '\\\\-(?!--(?:[^-]|$))(?:-*)|' // `---` => long dash, terminate\n            :\n            '\\\\-+|'\n          ) +\n          ',(?!' + re.src_ZCc + ').|' +       // allow `,,,` in paths\n          ';(?!' + re.src_ZCc + ').|' +       // allow `;` if not followed by space-like char\n          '\\\\!+(?!' + re.src_ZCc + '|[!]).|' +  // allow `!!!` in paths, but not at the end\n          '\\\\?(?!' + re.src_ZCc + '|[?]).' +\n        ')+' +\n      '|\\\\/' +\n    ')?';\n\n  // Allow anything in markdown spec, forbid quote (\") at the first position\n  // because emails enclosed in quotes are far more common\n  re.src_email_name =\n\n    '[\\\\-;:&=\\\\+\\\\$,\\\\.a-zA-Z0-9_][\\\\-;:&=\\\\+\\\\$,\\\\\"\\\\.a-zA-Z0-9_]*';\n\n  re.src_xn =\n\n    'xn--[a-z0-9\\\\-]{1,59}';\n\n  // More to read about domain names\n  // http://serverfault.com/questions/638260/\n\n  re.src_domain_root =\n\n    // Allow letters & digits (http://test1)\n    '(?:' +\n      re.src_xn +\n      '|' +\n      re.src_pseudo_letter + '{1,63}' +\n    ')';\n\n  re.src_domain =\n\n    '(?:' +\n      re.src_xn +\n      '|' +\n      '(?:' + re.src_pseudo_letter + ')' +\n      '|' +\n      '(?:' + re.src_pseudo_letter + '(?:-|' + re.src_pseudo_letter + '){0,61}' + re.src_pseudo_letter + ')' +\n    ')';\n\n  re.src_host =\n\n    '(?:' +\n    // Don't need IP check, because digits are already allowed in normal domain names\n    //   src_ip4 +\n    // '|' +\n      '(?:(?:(?:' + re.src_domain + ')\\\\.)*' + re.src_domain/*_root*/ + ')' +\n    ')';\n\n  re.tpl_host_fuzzy =\n\n    '(?:' +\n      re.src_ip4 +\n    '|' +\n      '(?:(?:(?:' + re.src_domain + ')\\\\.)+(?:%TLDS%))' +\n    ')';\n\n  re.tpl_host_no_ip_fuzzy =\n\n    '(?:(?:(?:' + re.src_domain + ')\\\\.)+(?:%TLDS%))';\n\n  re.src_host_strict =\n\n    re.src_host + re.src_host_terminator;\n\n  re.tpl_host_fuzzy_strict =\n\n    re.tpl_host_fuzzy + re.src_host_terminator;\n\n  re.src_host_port_strict =\n\n    re.src_host + re.src_port + re.src_host_terminator;\n\n  re.tpl_host_port_fuzzy_strict =\n\n    re.tpl_host_fuzzy + re.src_port + re.src_host_terminator;\n\n  re.tpl_host_port_no_ip_fuzzy_strict =\n\n    re.tpl_host_no_ip_fuzzy + re.src_port + re.src_host_terminator;\n\n\n  ////////////////////////////////////////////////////////////////////////////////\n  // Main rules\n\n  // Rude test fuzzy links by host, for quick deny\n  re.tpl_host_fuzzy_test =\n\n    'localhost|www\\\\.|\\\\.\\\\d{1,3}\\\\.|(?:\\\\.(?:%TLDS%)(?:' + re.src_ZPCc + '|>|$))';\n\n  re.tpl_email_fuzzy =\n\n      '(^|' + text_separators + '|\"|\\\\(|' + re.src_ZCc + ')' +\n      '(' + re.src_email_name + '@' + re.tpl_host_fuzzy_strict + ')';\n\n  re.tpl_link_fuzzy =\n      // Fuzzy link can't be prepended with .:/\\- and non punctuation.\n      // but can start with > (markdown blockquote)\n      '(^|(?![.:/\\\\-_@])(?:[$+<=>^`|\\uff5c]|' + re.src_ZPCc + '))' +\n      '((?![$+<=>^`|\\uff5c])' + re.tpl_host_port_fuzzy_strict + re.src_path + ')';\n\n  re.tpl_link_no_ip_fuzzy =\n      // Fuzzy link can't be prepended with .:/\\- and non punctuation.\n      // but can start with > (markdown blockquote)\n      '(^|(?![.:/\\\\-_@])(?:[$+<=>^`|\\uff5c]|' + re.src_ZPCc + '))' +\n      '((?![$+<=>^`|\\uff5c])' + re.tpl_host_port_no_ip_fuzzy_strict + re.src_path + ')';\n\n  return re;\n};\n", "'use strict';\n\n\n////////////////////////////////////////////////////////////////////////////////\n// Helpers\n\n// Merge objects\n//\nfunction assign(obj /*from1, from2, from3, ...*/) {\n  var sources = Array.prototype.slice.call(arguments, 1);\n\n  sources.forEach(function (source) {\n    if (!source) { return; }\n\n    Object.keys(source).forEach(function (key) {\n      obj[key] = source[key];\n    });\n  });\n\n  return obj;\n}\n\nfunction _class(obj) { return Object.prototype.toString.call(obj); }\nfunction isString(obj) { return _class(obj) === '[object String]'; }\nfunction isObject(obj) { return _class(obj) === '[object Object]'; }\nfunction isRegExp(obj) { return _class(obj) === '[object RegExp]'; }\nfunction isFunction(obj) { return _class(obj) === '[object Function]'; }\n\n\nfunction escapeRE(str) { return str.replace(/[.?*+^$[\\]\\\\(){}|-]/g, '\\\\$&'); }\n\n////////////////////////////////////////////////////////////////////////////////\n\n\nvar defaultOptions = {\n  fuzzyLink: true,\n  fuzzyEmail: true,\n  fuzzyIP: false\n};\n\n\nfunction isOptionsObj(obj) {\n  return Object.keys(obj || {}).reduce(function (acc, k) {\n    return acc || defaultOptions.hasOwnProperty(k);\n  }, false);\n}\n\n\nvar defaultSchemas = {\n  'http:': {\n    validate: function (text, pos, self) {\n      var tail = text.slice(pos);\n\n      if (!self.re.http) {\n        // compile lazily, because \"host\"-containing variables can change on tlds update.\n        self.re.http =  new RegExp(\n          '^\\\\/\\\\/' + self.re.src_auth + self.re.src_host_port_strict + self.re.src_path, 'i'\n        );\n      }\n      if (self.re.http.test(tail)) {\n        return tail.match(self.re.http)[0].length;\n      }\n      return 0;\n    }\n  },\n  'https:':  'http:',\n  'ftp:':    'http:',\n  '//':      {\n    validate: function (text, pos, self) {\n      var tail = text.slice(pos);\n\n      if (!self.re.no_http) {\n      // compile lazily, because \"host\"-containing variables can change on tlds update.\n        self.re.no_http =  new RegExp(\n          '^' +\n          self.re.src_auth +\n          // Don't allow single-level domains, because of false positives like '//test'\n          // with code comments\n          '(?:localhost|(?:(?:' + self.re.src_domain + ')\\\\.)+' + self.re.src_domain_root + ')' +\n          self.re.src_port +\n          self.re.src_host_terminator +\n          self.re.src_path,\n\n          'i'\n        );\n      }\n\n      if (self.re.no_http.test(tail)) {\n        // should not be `://` & `///`, that protects from errors in protocol name\n        if (pos >= 3 && text[pos - 3] === ':') { return 0; }\n        if (pos >= 3 && text[pos - 3] === '/') { return 0; }\n        return tail.match(self.re.no_http)[0].length;\n      }\n      return 0;\n    }\n  },\n  'mailto:': {\n    validate: function (text, pos, self) {\n      var tail = text.slice(pos);\n\n      if (!self.re.mailto) {\n        self.re.mailto =  new RegExp(\n          '^' + self.re.src_email_name + '@' + self.re.src_host_strict, 'i'\n        );\n      }\n      if (self.re.mailto.test(tail)) {\n        return tail.match(self.re.mailto)[0].length;\n      }\n      return 0;\n    }\n  }\n};\n\n/*eslint-disable max-len*/\n\n// RE pattern for 2-character tlds (autogenerated by ./support/tlds_2char_gen.js)\nvar tlds_2ch_src_re = 'a[cdefgilmnoqrstuwxz]|b[abdefghijmnorstvwyz]|c[acdfghiklmnoruvwxyz]|d[ejkmoz]|e[cegrstu]|f[ijkmor]|g[abdefghilmnpqrstuwy]|h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|m[acdeghklmnopqrstuvwxyz]|n[acefgilopruz]|om|p[aefghklmnrstwy]|qa|r[eosuw]|s[abcdeghijklmnortuvxyz]|t[cdfghjklmnortvwz]|u[agksyz]|v[aceginu]|w[fs]|y[et]|z[amw]';\n\n// DON'T try to make PRs with changes. Extend TLDs with LinkifyIt.tlds() instead\nvar tlds_default = 'biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|\u0440\u0444'.split('|');\n\n/*eslint-enable max-len*/\n\n////////////////////////////////////////////////////////////////////////////////\n\nfunction resetScanCache(self) {\n  self.__index__ = -1;\n  self.__text_cache__   = '';\n}\n\nfunction createValidator(re) {\n  return function (text, pos) {\n    var tail = text.slice(pos);\n\n    if (re.test(tail)) {\n      return tail.match(re)[0].length;\n    }\n    return 0;\n  };\n}\n\nfunction createNormalizer() {\n  return function (match, self) {\n    self.normalize(match);\n  };\n}\n\n// Schemas compiler. Build regexps.\n//\nfunction compile(self) {\n\n  // Load & clone RE patterns.\n  var re = self.re = require('./lib/re')(self.__opts__);\n\n  // Define dynamic patterns\n  var tlds = self.__tlds__.slice();\n\n  self.onCompile();\n\n  if (!self.__tlds_replaced__) {\n    tlds.push(tlds_2ch_src_re);\n  }\n  tlds.push(re.src_xn);\n\n  re.src_tlds = tlds.join('|');\n\n  function untpl(tpl) { return tpl.replace('%TLDS%', re.src_tlds); }\n\n  re.email_fuzzy      = RegExp(untpl(re.tpl_email_fuzzy), 'i');\n  re.link_fuzzy       = RegExp(untpl(re.tpl_link_fuzzy), 'i');\n  re.link_no_ip_fuzzy = RegExp(untpl(re.tpl_link_no_ip_fuzzy), 'i');\n  re.host_fuzzy_test  = RegExp(untpl(re.tpl_host_fuzzy_test), 'i');\n\n  //\n  // Compile each schema\n  //\n\n  var aliases = [];\n\n  self.__compiled__ = {}; // Reset compiled data\n\n  function schemaError(name, val) {\n    throw new Error('(LinkifyIt) Invalid schema \"' + name + '\": ' + val);\n  }\n\n  Object.keys(self.__schemas__).forEach(function (name) {\n    var val = self.__schemas__[name];\n\n    // skip disabled methods\n    if (val === null) { return; }\n\n    var compiled = { validate: null, link: null };\n\n    self.__compiled__[name] = compiled;\n\n    if (isObject(val)) {\n      if (isRegExp(val.validate)) {\n        compiled.validate = createValidator(val.validate);\n      } else if (isFunction(val.validate)) {\n        compiled.validate = val.validate;\n      } else {\n        schemaError(name, val);\n      }\n\n      if (isFunction(val.normalize)) {\n        compiled.normalize = val.normalize;\n      } else if (!val.normalize) {\n        compiled.normalize = createNormalizer();\n      } else {\n        schemaError(name, val);\n      }\n\n      return;\n    }\n\n    if (isString(val)) {\n      aliases.push(name);\n      return;\n    }\n\n    schemaError(name, val);\n  });\n\n  //\n  // Compile postponed aliases\n  //\n\n  aliases.forEach(function (alias) {\n    if (!self.__compiled__[self.__schemas__[alias]]) {\n      // Silently fail on missed schemas to avoid errons on disable.\n      // schemaError(alias, self.__schemas__[alias]);\n      return;\n    }\n\n    self.__compiled__[alias].validate =\n      self.__compiled__[self.__schemas__[alias]].validate;\n    self.__compiled__[alias].normalize =\n      self.__compiled__[self.__schemas__[alias]].normalize;\n  });\n\n  //\n  // Fake record for guessed links\n  //\n  self.__compiled__[''] = { validate: null, normalize: createNormalizer() };\n\n  //\n  // Build schema condition\n  //\n  var slist = Object.keys(self.__compiled__)\n                      .filter(function (name) {\n                        // Filter disabled & fake schemas\n                        return name.length > 0 && self.__compiled__[name];\n                      })\n                      .map(escapeRE)\n                      .join('|');\n  // (?!_) cause 1.5x slowdown\n  self.re.schema_test   = RegExp('(^|(?!_)(?:[><\\uff5c]|' + re.src_ZPCc + '))(' + slist + ')', 'i');\n  self.re.schema_search = RegExp('(^|(?!_)(?:[><\\uff5c]|' + re.src_ZPCc + '))(' + slist + ')', 'ig');\n\n  self.re.pretest = RegExp(\n    '(' + self.re.schema_test.source + ')|(' + self.re.host_fuzzy_test.source + ')|@',\n    'i'\n  );\n\n  //\n  // Cleanup\n  //\n\n  resetScanCache(self);\n}\n\n/**\n * class Match\n *\n * Match result. Single element of array, returned by [[LinkifyIt#match]]\n **/\nfunction Match(self, shift) {\n  var start = self.__index__,\n      end   = self.__last_index__,\n      text  = self.__text_cache__.slice(start, end);\n\n  /**\n   * Match#schema -> String\n   *\n   * Prefix (protocol) for matched string.\n   **/\n  this.schema    = self.__schema__.toLowerCase();\n  /**\n   * Match#index -> Number\n   *\n   * First position of matched string.\n   **/\n  this.index     = start + shift;\n  /**\n   * Match#lastIndex -> Number\n   *\n   * Next position after matched string.\n   **/\n  this.lastIndex = end + shift;\n  /**\n   * Match#raw -> String\n   *\n   * Matched string.\n   **/\n  this.raw       = text;\n  /**\n   * Match#text -> String\n   *\n   * Notmalized text of matched string.\n   **/\n  this.text      = text;\n  /**\n   * Match#url -> String\n   *\n   * Normalized url of matched string.\n   **/\n  this.url       = text;\n}\n\nfunction createMatch(self, shift) {\n  var match = new Match(self, shift);\n\n  self.__compiled__[match.schema].normalize(match, self);\n\n  return match;\n}\n\n\n/**\n * class LinkifyIt\n **/\n\n/**\n * new LinkifyIt(schemas, options)\n * - schemas (Object): Optional. Additional schemas to validate (prefix/validator)\n * - options (Object): { fuzzyLink|fuzzyEmail|fuzzyIP: true|false }\n *\n * Creates new linkifier instance with optional additional schemas.\n * Can be called without `new` keyword for convenience.\n *\n * By default understands:\n *\n * - `http(s)://...` , `ftp://...`, `mailto:...` & `//...` links\n * - \"fuzzy\" links and emails (example.com, foo@bar.com).\n *\n * `schemas` is an object, where each key/value describes protocol/rule:\n *\n * - __key__ - link prefix (usually, protocol name with `:` at the end, `skype:`\n *   for example). `linkify-it` makes shure that prefix is not preceeded with\n *   alphanumeric char and symbols. Only whitespaces and punctuation allowed.\n * - __value__ - rule to check tail after link prefix\n *   - _String_ - just alias to existing rule\n *   - _Object_\n *     - _validate_ - validator function (should return matched length on success),\n *       or `RegExp`.\n *     - _normalize_ - optional function to normalize text & url of matched result\n *       (for example, for @twitter mentions).\n *\n * `options`:\n *\n * - __fuzzyLink__ - recognige URL-s without `http(s):` prefix. Default `true`.\n * - __fuzzyIP__ - allow IPs in fuzzy links above. Can conflict with some texts\n *   like version numbers. Default `false`.\n * - __fuzzyEmail__ - recognize emails without `mailto:` prefix.\n *\n **/\nfunction LinkifyIt(schemas, options) {\n  if (!(this instanceof LinkifyIt)) {\n    return new LinkifyIt(schemas, options);\n  }\n\n  if (!options) {\n    if (isOptionsObj(schemas)) {\n      options = schemas;\n      schemas = {};\n    }\n  }\n\n  this.__opts__           = assign({}, defaultOptions, options);\n\n  // Cache last tested result. Used to skip repeating steps on next `match` call.\n  this.__index__          = -1;\n  this.__last_index__     = -1; // Next scan position\n  this.__schema__         = '';\n  this.__text_cache__     = '';\n\n  this.__schemas__        = assign({}, defaultSchemas, schemas);\n  this.__compiled__       = {};\n\n  this.__tlds__           = tlds_default;\n  this.__tlds_replaced__  = false;\n\n  this.re = {};\n\n  compile(this);\n}\n\n\n/** chainable\n * LinkifyIt#add(schema, definition)\n * - schema (String): rule name (fixed pattern prefix)\n * - definition (String|RegExp|Object): schema definition\n *\n * Add new rule definition. See constructor description for details.\n **/\nLinkifyIt.prototype.add = function add(schema, definition) {\n  this.__schemas__[schema] = definition;\n  compile(this);\n  return this;\n};\n\n\n/** chainable\n * LinkifyIt#set(options)\n * - options (Object): { fuzzyLink|fuzzyEmail|fuzzyIP: true|false }\n *\n * Set recognition options for links without schema.\n **/\nLinkifyIt.prototype.set = function set(options) {\n  this.__opts__ = assign(this.__opts__, options);\n  return this;\n};\n\n\n/**\n * LinkifyIt#test(text) -> Boolean\n *\n * Searches linkifiable pattern and returns `true` on success or `false` on fail.\n **/\nLinkifyIt.prototype.test = function test(text) {\n  // Reset scan cache\n  this.__text_cache__ = text;\n  this.__index__      = -1;\n\n  if (!text.length) { return false; }\n\n  var m, ml, me, len, shift, next, re, tld_pos, at_pos;\n\n  // try to scan for link with schema - that's the most simple rule\n  if (this.re.schema_test.test(text)) {\n    re = this.re.schema_search;\n    re.lastIndex = 0;\n    while ((m = re.exec(text)) !== null) {\n      len = this.testSchemaAt(text, m[2], re.lastIndex);\n      if (len) {\n        this.__schema__     = m[2];\n        this.__index__      = m.index + m[1].length;\n        this.__last_index__ = m.index + m[0].length + len;\n        break;\n      }\n    }\n  }\n\n  if (this.__opts__.fuzzyLink && this.__compiled__['http:']) {\n    // guess schemaless links\n    tld_pos = text.search(this.re.host_fuzzy_test);\n    if (tld_pos >= 0) {\n      // if tld is located after found link - no need to check fuzzy pattern\n      if (this.__index__ < 0 || tld_pos < this.__index__) {\n        if ((ml = text.match(this.__opts__.fuzzyIP ? this.re.link_fuzzy : this.re.link_no_ip_fuzzy)) !== null) {\n\n          shift = ml.index + ml[1].length;\n\n          if (this.__index__ < 0 || shift < this.__index__) {\n            this.__schema__     = '';\n            this.__index__      = shift;\n            this.__last_index__ = ml.index + ml[0].length;\n          }\n        }\n      }\n    }\n  }\n\n  if (this.__opts__.fuzzyEmail && this.__compiled__['mailto:']) {\n    // guess schemaless emails\n    at_pos = text.indexOf('@');\n    if (at_pos >= 0) {\n      // We can't skip this check, because this cases are possible:\n      // 192.168.1.1@gmail.com, my.in@example.com\n      if ((me = text.match(this.re.email_fuzzy)) !== null) {\n\n        shift = me.index + me[1].length;\n        next  = me.index + me[0].length;\n\n        if (this.__index__ < 0 || shift < this.__index__ ||\n            (shift === this.__index__ && next > this.__last_index__)) {\n          this.__schema__     = 'mailto:';\n          this.__index__      = shift;\n          this.__last_index__ = next;\n        }\n      }\n    }\n  }\n\n  return this.__index__ >= 0;\n};\n\n\n/**\n * LinkifyIt#pretest(text) -> Boolean\n *\n * Very quick check, that can give false positives. Returns true if link MAY BE\n * can exists. Can be used for speed optimization, when you need to check that\n * link NOT exists.\n **/\nLinkifyIt.prototype.pretest = function pretest(text) {\n  return this.re.pretest.test(text);\n};\n\n\n/**\n * LinkifyIt#testSchemaAt(text, name, position) -> Number\n * - text (String): text to scan\n * - name (String): rule (schema) name\n * - position (Number): text offset to check from\n *\n * Similar to [[LinkifyIt#test]] but checks only specific protocol tail exactly\n * at given position. Returns length of found pattern (0 on fail).\n **/\nLinkifyIt.prototype.testSchemaAt = function testSchemaAt(text, schema, pos) {\n  // If not supported schema check requested - terminate\n  if (!this.__compiled__[schema.toLowerCase()]) {\n    return 0;\n  }\n  return this.__compiled__[schema.toLowerCase()].validate(text, pos, this);\n};\n\n\n/**\n * LinkifyIt#match(text) -> Array|null\n *\n * Returns array of found link descriptions or `null` on fail. We strongly\n * recommend to use [[LinkifyIt#test]] first, for best speed.\n *\n * ##### Result match description\n *\n * - __schema__ - link schema, can be empty for fuzzy links, or `//` for\n *   protocol-neutral  links.\n * - __index__ - offset of matched text\n * - __lastIndex__ - index of next char after mathch end\n * - __raw__ - matched text\n * - __text__ - normalized text\n * - __url__ - link, generated from matched text\n **/\nLinkifyIt.prototype.match = function match(text) {\n  var shift = 0, result = [];\n\n  // Try to take previous element from cache, if .test() called before\n  if (this.__index__ >= 0 && this.__text_cache__ === text) {\n    result.push(createMatch(this, shift));\n    shift = this.__last_index__;\n  }\n\n  // Cut head if cache was used\n  var tail = shift ? text.slice(shift) : text;\n\n  // Scan string until end reached\n  while (this.test(tail)) {\n    result.push(createMatch(this, shift));\n\n    tail = tail.slice(this.__last_index__);\n    shift += this.__last_index__;\n  }\n\n  if (result.length) {\n    return result;\n  }\n\n  return null;\n};\n\n\n/** chainable\n * LinkifyIt#tlds(list [, keepOld]) -> this\n * - list (Array): list of tlds\n * - keepOld (Boolean): merge with current list if `true` (`false` by default)\n *\n * Load (or merge) new tlds list. Those are user for fuzzy links (without prefix)\n * to avoid false positives. By default this algorythm used:\n *\n * - hostname with any 2-letter root zones are ok.\n * - biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|\u0440\u0444\n *   are ok.\n * - encoded (`xn--...`) root zones are ok.\n *\n * If list is replaced, then exact match for 2-chars root zones will be checked.\n **/\nLinkifyIt.prototype.tlds = function tlds(list, keepOld) {\n  list = Array.isArray(list) ? list : [ list ];\n\n  if (!keepOld) {\n    this.__tlds__ = list.slice();\n    this.__tlds_replaced__ = true;\n    compile(this);\n    return this;\n  }\n\n  this.__tlds__ = this.__tlds__.concat(list)\n                                  .sort()\n                                  .filter(function (el, idx, arr) {\n                                    return el !== arr[idx - 1];\n                                  })\n                                  .reverse();\n\n  compile(this);\n  return this;\n};\n\n/**\n * LinkifyIt#normalize(match)\n *\n * Default normalizer (if schema does not define it's own).\n **/\nLinkifyIt.prototype.normalize = function normalize(match) {\n\n  // Do minimal possible changes by default. Need to collect feedback prior\n  // to move forward https://github.com/markdown-it/linkify-it/issues/1\n\n  if (!match.schema) { match.url = 'http://' + match.url; }\n\n  if (match.schema === 'mailto:' && !/^mailto:/i.test(match.url)) {\n    match.url = 'mailto:' + match.url;\n  }\n};\n\n\n/**\n * LinkifyIt#onCompile()\n *\n * Override to modify basic RegExp-s.\n **/\nLinkifyIt.prototype.onCompile = function onCompile() {\n};\n\n\nmodule.exports = LinkifyIt;\n", "'use strict';\n\n/** Highest positive signed 32-bit float value */\nconst maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\n\n/** Bootstring parameters */\nconst base = 36;\nconst tMin = 1;\nconst tMax = 26;\nconst skew = 38;\nconst damp = 700;\nconst initialBias = 72;\nconst initialN = 128; // 0x80\nconst delimiter = '-'; // '\\x2D'\n\n/** Regular expressions */\nconst regexPunycode = /^xn--/;\nconst regexNonASCII = /[^\\0-\\x7F]/; // Note: U+007F DEL is excluded too.\nconst regexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\n\n/** Error messages */\nconst errors = {\n\t'overflow': 'Overflow: input needs wider integers to process',\n\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t'invalid-input': 'Invalid input'\n};\n\n/** Convenience shortcuts */\nconst baseMinusTMin = base - tMin;\nconst floor = Math.floor;\nconst stringFromCharCode = String.fromCharCode;\n\n/*--------------------------------------------------------------------------*/\n\n/**\n * A generic error utility function.\n * @private\n * @param {String} type The error type.\n * @returns {Error} Throws a `RangeError` with the applicable error message.\n */\nfunction error(type) {\n\tthrow new RangeError(errors[type]);\n}\n\n/**\n * A generic `Array#map` utility function.\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} callback The function that gets called for every array\n * item.\n * @returns {Array} A new array of values returned by the callback function.\n */\nfunction map(array, callback) {\n\tconst result = [];\n\tlet length = array.length;\n\twhile (length--) {\n\t\tresult[length] = callback(array[length]);\n\t}\n\treturn result;\n}\n\n/**\n * A simple `Array#map`-like wrapper to work with domain name strings or email\n * addresses.\n * @private\n * @param {String} domain The domain name or email address.\n * @param {Function} callback The function that gets called for every\n * character.\n * @returns {String} A new string of characters returned by the callback\n * function.\n */\nfunction mapDomain(domain, callback) {\n\tconst parts = domain.split('@');\n\tlet result = '';\n\tif (parts.length > 1) {\n\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t// the local part (i.e. everything up to `@`) intact.\n\t\tresult = parts[0] + '@';\n\t\tdomain = parts[1];\n\t}\n\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\tdomain = domain.replace(regexSeparators, '\\x2E');\n\tconst labels = domain.split('.');\n\tconst encoded = map(labels, callback).join('.');\n\treturn result + encoded;\n}\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n * @see `punycode.ucs2.encode`\n * @see <https://mathiasbynens.be/notes/javascript-encoding>\n * @memberOf punycode.ucs2\n * @name decode\n * @param {String} string The Unicode input string (UCS-2).\n * @returns {Array} The new array of code points.\n */\nfunction ucs2decode(string) {\n\tconst output = [];\n\tlet counter = 0;\n\tconst length = string.length;\n\twhile (counter < length) {\n\t\tconst value = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// It's a high surrogate, and there is a next character.\n\t\t\tconst extra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// It's an unmatched surrogate; only append this code unit, in case the\n\t\t\t\t// next code unit is the high surrogate of a surrogate pair.\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n/**\n * Creates a string based on an array of numeric code points.\n * @see `punycode.ucs2.decode`\n * @memberOf punycode.ucs2\n * @name encode\n * @param {Array} codePoints The array of numeric code points.\n * @returns {String} The new Unicode string (UCS-2).\n */\nconst ucs2encode = codePoints => String.fromCodePoint(...codePoints);\n\n/**\n * Converts a basic code point into a digit/integer.\n * @see `digitToBasic()`\n * @private\n * @param {Number} codePoint The basic numeric code point value.\n * @returns {Number} The numeric value of a basic code point (for use in\n * representing integers) in the range `0` to `base - 1`, or `base` if\n * the code point does not represent a value.\n */\nconst basicToDigit = function(codePoint) {\n\tif (codePoint >= 0x30 && codePoint < 0x3A) {\n\t\treturn 26 + (codePoint - 0x30);\n\t}\n\tif (codePoint >= 0x41 && codePoint < 0x5B) {\n\t\treturn codePoint - 0x41;\n\t}\n\tif (codePoint >= 0x61 && codePoint < 0x7B) {\n\t\treturn codePoint - 0x61;\n\t}\n\treturn base;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n * @see `basicToDigit()`\n * @private\n * @param {Number} digit The numeric value of a basic code point.\n * @returns {Number} The basic code point whose value (when used for\n * representing integers) is `digit`, which needs to be in the range\n * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n * used; else, the lowercase form is used. The behavior is undefined\n * if `flag` is non-zero and `digit` has no uppercase form.\n */\nconst digitToBasic = function(digit, flag) {\n\t//  0..25 map to ASCII a..z or A..Z\n\t// 26..35 map to ASCII 0..9\n\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n * @private\n */\nconst adapt = function(delta, numPoints, firstTime) {\n\tlet k = 0;\n\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\tdelta += floor(delta / numPoints);\n\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\tdelta = floor(delta / baseMinusTMin);\n\t}\n\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n * symbols.\n * @memberOf punycode\n * @param {String} input The Punycode string of ASCII-only symbols.\n * @returns {String} The resulting string of Unicode symbols.\n */\nconst decode = function(input) {\n\t// Don't use UCS-2.\n\tconst output = [];\n\tconst inputLength = input.length;\n\tlet i = 0;\n\tlet n = initialN;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points: let `basic` be the number of input code\n\t// points before the last delimiter, or `0` if there is none, then copy\n\t// the first basic code points to the output.\n\n\tlet basic = input.lastIndexOf(delimiter);\n\tif (basic < 0) {\n\t\tbasic = 0;\n\t}\n\n\tfor (let j = 0; j < basic; ++j) {\n\t\t// if it's not a basic code point\n\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\terror('not-basic');\n\t\t}\n\t\toutput.push(input.charCodeAt(j));\n\t}\n\n\t// Main decoding loop: start just after the last delimiter if any basic code\n\t// points were copied; start at the beginning otherwise.\n\n\tfor (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t// `index` is the index of the next character to be consumed.\n\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t// which gets added to `i`. The overflow checking is easier\n\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t// value at the end to obtain `delta`.\n\t\tconst oldi = i;\n\t\tfor (let w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\tif (index >= inputLength) {\n\t\t\t\terror('invalid-input');\n\t\t\t}\n\n\t\t\tconst digit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\tif (digit >= base) {\n\t\t\t\terror('invalid-input');\n\t\t\t}\n\t\t\tif (digit > floor((maxInt - i) / w)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\ti += digit * w;\n\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\tif (digit < t) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst baseMinusT = base - t;\n\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tw *= baseMinusT;\n\n\t\t}\n\n\t\tconst out = output.length + 1;\n\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t// incrementing `n` each time, so we'll fix that now:\n\t\tif (floor(i / out) > maxInt - n) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tn += floor(i / out);\n\t\ti %= out;\n\n\t\t// Insert `n` at position `i` of the output.\n\t\toutput.splice(i++, 0, n);\n\n\t}\n\n\treturn String.fromCodePoint(...output);\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n * @memberOf punycode\n * @param {String} input The string of Unicode symbols.\n * @returns {String} The resulting Punycode string of ASCII-only symbols.\n */\nconst encode = function(input) {\n\tconst output = [];\n\n\t// Convert the input in UCS-2 to an array of Unicode code points.\n\tinput = ucs2decode(input);\n\n\t// Cache the length.\n\tconst inputLength = input.length;\n\n\t// Initialize the state.\n\tlet n = initialN;\n\tlet delta = 0;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points.\n\tfor (const currentValue of input) {\n\t\tif (currentValue < 0x80) {\n\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t}\n\t}\n\n\tconst basicLength = output.length;\n\tlet handledCPCount = basicLength;\n\n\t// `handledCPCount` is the number of code points that have been handled;\n\t// `basicLength` is the number of basic code points.\n\n\t// Finish the basic string with a delimiter unless it's empty.\n\tif (basicLength) {\n\t\toutput.push(delimiter);\n\t}\n\n\t// Main encoding loop:\n\twhile (handledCPCount < inputLength) {\n\n\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t// larger one:\n\t\tlet m = maxInt;\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\tm = currentValue;\n\t\t\t}\n\t\t}\n\n\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t// but guard against overflow.\n\t\tconst handledCPCountPlusOne = handledCPCount + 1;\n\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\tn = m;\n\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\t\t\tif (currentValue === n) {\n\t\t\t\t// Represent delta as a generalized variable-length integer.\n\t\t\t\tlet q = delta;\n\t\t\t\tfor (let k = base; /* no condition */; k += base) {\n\t\t\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tconst qMinusT = q - t;\n\t\t\t\t\tconst baseMinusT = base - t;\n\t\t\t\t\toutput.push(\n\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t);\n\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t}\n\n\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount === basicLength);\n\t\t\t\tdelta = 0;\n\t\t\t\t++handledCPCount;\n\t\t\t}\n\t\t}\n\n\t\t++delta;\n\t\t++n;\n\n\t}\n\treturn output.join('');\n};\n\n/**\n * Converts a Punycode string representing a domain name or an email address\n * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n * it doesn't matter if you call it on a string that has already been\n * converted to Unicode.\n * @memberOf punycode\n * @param {String} input The Punycoded domain name or email address to\n * convert to Unicode.\n * @returns {String} The Unicode representation of the given Punycode\n * string.\n */\nconst toUnicode = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexPunycode.test(string)\n\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t: string;\n\t});\n};\n\n/**\n * Converts a Unicode string representing a domain name or an email address to\n * Punycode. Only the non-ASCII parts of the domain name will be converted,\n * i.e. it doesn't matter if you call it with a domain that's already in\n * ASCII.\n * @memberOf punycode\n * @param {String} input The domain name or email address to convert, as a\n * Unicode string.\n * @returns {String} The Punycode representation of the given domain name or\n * email address.\n */\nconst toASCII = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexNonASCII.test(string)\n\t\t\t? 'xn--' + encode(string)\n\t\t\t: string;\n\t});\n};\n\n/*--------------------------------------------------------------------------*/\n\n/** Define the public API */\nconst punycode = {\n\t/**\n\t * A string representing the current Punycode.js version number.\n\t * @memberOf punycode\n\t * @type String\n\t */\n\t'version': '2.3.1',\n\t/**\n\t * An object of methods to convert from JavaScript's internal character\n\t * representation (UCS-2) to Unicode code points, and back.\n\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t * @memberOf punycode\n\t * @type Object\n\t */\n\t'ucs2': {\n\t\t'decode': ucs2decode,\n\t\t'encode': ucs2encode\n\t},\n\t'decode': decode,\n\t'encode': encode,\n\t'toASCII': toASCII,\n\t'toUnicode': toUnicode\n};\n\nmodule.exports = punycode;\n", "// markdown-it default options\n\n'use strict';\n\n\nmodule.exports = {\n  options: {\n    html:         false,        // Enable HTML tags in source\n    xhtmlOut:     false,        // Use '/' to close single tags (<br />)\n    breaks:       false,        // Convert '\\n' in paragraphs into <br>\n    langPrefix:   'language-',  // CSS language prefix for fenced blocks\n    linkify:      false,        // autoconvert URL-like texts to links\n\n    // Enable some language-neutral replacements + quotes beautification\n    typographer:  false,\n\n    // Double + single quotes replacement pairs, when typographer enabled,\n    // and smartquotes on. Could be either a String or an Array.\n    //\n    // For example, you can use '\u00AB\u00BB\u201E\u201C' for Russian, '\u201E\u201C\u201A\u2018' for German,\n    // and ['\u00AB\\xA0', '\\xA0\u00BB', '\u2039\\xA0', '\\xA0\u203A'] for French (including nbsp).\n    quotes: '\\u201c\\u201d\\u2018\\u2019', /* \u201C\u201D\u2018\u2019 */\n\n    // Highlighter function. Should return escaped HTML,\n    // or '' if the source string is not changed and should be escaped externaly.\n    // If result starts with <pre... internal wrapper is skipped.\n    //\n    // function (/*str, lang*/) { return ''; }\n    //\n    highlight: null,\n\n    maxNesting:   100            // Internal protection, recursion limit\n  },\n\n  components: {\n\n    core: {},\n    block: {},\n    inline: {}\n  }\n};\n", "// \"Zero\" preset, with nothing enabled. Useful for manual configuring of simple\n// modes. For example, to parse bold/italic only.\n\n'use strict';\n\n\nmodule.exports = {\n  options: {\n    html:         false,        // Enable HTML tags in source\n    xhtmlOut:     false,        // Use '/' to close single tags (<br />)\n    breaks:       false,        // Convert '\\n' in paragraphs into <br>\n    langPrefix:   'language-',  // CSS language prefix for fenced blocks\n    linkify:      false,        // autoconvert URL-like texts to links\n\n    // Enable some language-neutral replacements + quotes beautification\n    typographer:  false,\n\n    // Double + single quotes replacement pairs, when typographer enabled,\n    // and smartquotes on. Could be either a String or an Array.\n    //\n    // For example, you can use '\u00AB\u00BB\u201E\u201C' for Russian, '\u201E\u201C\u201A\u2018' for German,\n    // and ['\u00AB\\xA0', '\\xA0\u00BB', '\u2039\\xA0', '\\xA0\u203A'] for French (including nbsp).\n    quotes: '\\u201c\\u201d\\u2018\\u2019', /* \u201C\u201D\u2018\u2019 */\n\n    // Highlighter function. Should return escaped HTML,\n    // or '' if the source string is not changed and should be escaped externaly.\n    // If result starts with <pre... internal wrapper is skipped.\n    //\n    // function (/*str, lang*/) { return ''; }\n    //\n    highlight: null,\n\n    maxNesting:   20            // Internal protection, recursion limit\n  },\n\n  components: {\n\n    core: {\n      rules: [\n        'normalize',\n        'block',\n        'inline'\n      ]\n    },\n\n    block: {\n      rules: [\n        'paragraph'\n      ]\n    },\n\n    inline: {\n      rules: [\n        'text'\n      ],\n      rules2: [\n        'balance_pairs',\n        'text_collapse'\n      ]\n    }\n  }\n};\n", "// Commonmark default options\n\n'use strict';\n\n\nmodule.exports = {\n  options: {\n    html:         true,         // Enable HTML tags in source\n    xhtmlOut:     true,         // Use '/' to close single tags (<br />)\n    breaks:       false,        // Convert '\\n' in paragraphs into <br>\n    langPrefix:   'language-',  // CSS language prefix for fenced blocks\n    linkify:      false,        // autoconvert URL-like texts to links\n\n    // Enable some language-neutral replacements + quotes beautification\n    typographer:  false,\n\n    // Double + single quotes replacement pairs, when typographer enabled,\n    // and smartquotes on. Could be either a String or an Array.\n    //\n    // For example, you can use '\u00AB\u00BB\u201E\u201C' for Russian, '\u201E\u201C\u201A\u2018' for German,\n    // and ['\u00AB\\xA0', '\\xA0\u00BB', '\u2039\\xA0', '\\xA0\u203A'] for French (including nbsp).\n    quotes: '\\u201c\\u201d\\u2018\\u2019', /* \u201C\u201D\u2018\u2019 */\n\n    // Highlighter function. Should return escaped HTML,\n    // or '' if the source string is not changed and should be escaped externaly.\n    // If result starts with <pre... internal wrapper is skipped.\n    //\n    // function (/*str, lang*/) { return ''; }\n    //\n    highlight: null,\n\n    maxNesting:   20            // Internal protection, recursion limit\n  },\n\n  components: {\n\n    core: {\n      rules: [\n        'normalize',\n        'block',\n        'inline'\n      ]\n    },\n\n    block: {\n      rules: [\n        'blockquote',\n        'code',\n        'fence',\n        'heading',\n        'hr',\n        'html_block',\n        'lheading',\n        'list',\n        'reference',\n        'paragraph'\n      ]\n    },\n\n    inline: {\n      rules: [\n        'autolink',\n        'backticks',\n        'emphasis',\n        'entity',\n        'escape',\n        'html_inline',\n        'image',\n        'link',\n        'newline',\n        'text'\n      ],\n      rules2: [\n        'balance_pairs',\n        'emphasis',\n        'text_collapse'\n      ]\n    }\n  }\n};\n", "// Main parser class\n\n'use strict';\n\n\nvar utils        = require('./common/utils');\nvar helpers      = require('./helpers');\nvar Renderer     = require('./renderer');\nvar ParserCore   = require('./parser_core');\nvar ParserBlock  = require('./parser_block');\nvar ParserInline = require('./parser_inline');\nvar LinkifyIt    = require('linkify-it');\nvar mdurl        = require('mdurl');\nvar punycode     = require('punycode');\n\n\nvar config = {\n  default: require('./presets/default'),\n  zero: require('./presets/zero'),\n  commonmark: require('./presets/commonmark')\n};\n\n////////////////////////////////////////////////////////////////////////////////\n//\n// This validator can prohibit more than really needed to prevent XSS. It's a\n// tradeoff to keep code simple and to be secure by default.\n//\n// If you need different setup - override validator method as you wish. Or\n// replace it with dummy function and use external sanitizer.\n//\n\nvar BAD_PROTO_RE = /^(vbscript|javascript|file|data):/;\nvar GOOD_DATA_RE = /^data:image\\/(gif|png|jpeg|webp);/;\n\nfunction validateLink(url) {\n  // url should be normalized at this point, and existing entities are decoded\n  var str = url.trim().toLowerCase();\n\n  return BAD_PROTO_RE.test(str) ? (GOOD_DATA_RE.test(str) ? true : false) : true;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\n\nvar RECODE_HOSTNAME_FOR = [ 'http:', 'https:', 'mailto:' ];\n\nfunction normalizeLink(url) {\n  var parsed = mdurl.parse(url, true);\n\n  if (parsed.hostname) {\n    // Encode hostnames in urls like:\n    // `http://host/`, `https://host/`, `mailto:user@host`, `//host/`\n    //\n    // We don't encode unknown schemas, because it's likely that we encode\n    // something we shouldn't (e.g. `skype:name` treated as `skype:host`)\n    //\n    if (!parsed.protocol || RECODE_HOSTNAME_FOR.indexOf(parsed.protocol) >= 0) {\n      try {\n        parsed.hostname = punycode.toASCII(parsed.hostname);\n      } catch (er) { /**/ }\n    }\n  }\n\n  return mdurl.encode(mdurl.format(parsed));\n}\n\nfunction normalizeLinkText(url) {\n  var parsed = mdurl.parse(url, true);\n\n  if (parsed.hostname) {\n    // Encode hostnames in urls like:\n    // `http://host/`, `https://host/`, `mailto:user@host`, `//host/`\n    //\n    // We don't encode unknown schemas, because it's likely that we encode\n    // something we shouldn't (e.g. `skype:name` treated as `skype:host`)\n    //\n    if (!parsed.protocol || RECODE_HOSTNAME_FOR.indexOf(parsed.protocol) >= 0) {\n      try {\n        parsed.hostname = punycode.toUnicode(parsed.hostname);\n      } catch (er) { /**/ }\n    }\n  }\n\n  // add '%' to exclude list because of https://github.com/markdown-it/markdown-it/issues/720\n  return mdurl.decode(mdurl.format(parsed), mdurl.decode.defaultChars + '%');\n}\n\n\n/**\n * class MarkdownIt\n *\n * Main parser/renderer class.\n *\n * ##### Usage\n *\n * ```javascript\n * // node.js, \"classic\" way:\n * var MarkdownIt = require('markdown-it'),\n *     md = new MarkdownIt();\n * var result = md.render('# markdown-it rulezz!');\n *\n * // node.js, the same, but with sugar:\n * var md = require('markdown-it')();\n * var result = md.render('# markdown-it rulezz!');\n *\n * // browser without AMD, added to \"window\" on script load\n * // Note, there are no dash.\n * var md = window.markdownit();\n * var result = md.render('# markdown-it rulezz!');\n * ```\n *\n * Single line rendering, without paragraph wrap:\n *\n * ```javascript\n * var md = require('markdown-it')();\n * var result = md.renderInline('__markdown-it__ rulezz!');\n * ```\n **/\n\n/**\n * new MarkdownIt([presetName, options])\n * - presetName (String): optional, `commonmark` / `zero`\n * - options (Object)\n *\n * Creates parser instanse with given config. Can be called without `new`.\n *\n * ##### presetName\n *\n * MarkdownIt provides named presets as a convenience to quickly\n * enable/disable active syntax rules and options for common use cases.\n *\n * - [\"commonmark\"](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/commonmark.js) -\n *   configures parser to strict [CommonMark](http://commonmark.org/) mode.\n * - [default](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/default.js) -\n *   similar to GFM, used when no preset name given. Enables all available rules,\n *   but still without html, typographer & autolinker.\n * - [\"zero\"](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/zero.js) -\n *   all rules disabled. Useful to quickly setup your config via `.enable()`.\n *   For example, when you need only `bold` and `italic` markup and nothing else.\n *\n * ##### options:\n *\n * - __html__ - `false`. Set `true` to enable HTML tags in source. Be careful!\n *   That's not safe! You may need external sanitizer to protect output from XSS.\n *   It's better to extend features via plugins, instead of enabling HTML.\n * - __xhtmlOut__ - `false`. Set `true` to add '/' when closing single tags\n *   (`<br />`). This is needed only for full CommonMark compatibility. In real\n *   world you will need HTML output.\n * - __breaks__ - `false`. Set `true` to convert `\\n` in paragraphs into `<br>`.\n * - __langPrefix__ - `language-`. CSS language class prefix for fenced blocks.\n *   Can be useful for external highlighters.\n * - __linkify__ - `false`. Set `true` to autoconvert URL-like text to links.\n * - __typographer__  - `false`. Set `true` to enable [some language-neutral\n *   replacement](https://github.com/markdown-it/markdown-it/blob/master/lib/rules_core/replacements.js) +\n *   quotes beautification (smartquotes).\n * - __quotes__ - `\u201C\u201D\u2018\u2019`, String or Array. Double + single quotes replacement\n *   pairs, when typographer enabled and smartquotes on. For example, you can\n *   use `'\u00AB\u00BB\u201E\u201C'` for Russian, `'\u201E\u201C\u201A\u2018'` for German, and\n *   `['\u00AB\\xA0', '\\xA0\u00BB', '\u2039\\xA0', '\\xA0\u203A']` for French (including nbsp).\n * - __highlight__ - `null`. Highlighter function for fenced code blocks.\n *   Highlighter `function (str, lang)` should return escaped HTML. It can also\n *   return empty string if the source was not changed and should be escaped\n *   externaly. If result starts with <pre... internal wrapper is skipped.\n *\n * ##### Example\n *\n * ```javascript\n * // commonmark mode\n * var md = require('markdown-it')('commonmark');\n *\n * // default mode\n * var md = require('markdown-it')();\n *\n * // enable everything\n * var md = require('markdown-it')({\n *   html: true,\n *   linkify: true,\n *   typographer: true\n * });\n * ```\n *\n * ##### Syntax highlighting\n *\n * ```js\n * var hljs = require('highlight.js') // https://highlightjs.org/\n *\n * var md = require('markdown-it')({\n *   highlight: function (str, lang) {\n *     if (lang && hljs.getLanguage(lang)) {\n *       try {\n *         return hljs.highlight(str, { language: lang, ignoreIllegals: true }).value;\n *       } catch (__) {}\n *     }\n *\n *     return ''; // use external default escaping\n *   }\n * });\n * ```\n *\n * Or with full wrapper override (if you need assign class to `<pre>`):\n *\n * ```javascript\n * var hljs = require('highlight.js') // https://highlightjs.org/\n *\n * // Actual default values\n * var md = require('markdown-it')({\n *   highlight: function (str, lang) {\n *     if (lang && hljs.getLanguage(lang)) {\n *       try {\n *         return '<pre class=\"hljs\"><code>' +\n *                hljs.highlight(str, { language: lang, ignoreIllegals: true }).value +\n *                '</code></pre>';\n *       } catch (__) {}\n *     }\n *\n *     return '<pre class=\"hljs\"><code>' + md.utils.escapeHtml(str) + '</code></pre>';\n *   }\n * });\n * ```\n *\n **/\nfunction MarkdownIt(presetName, options) {\n  if (!(this instanceof MarkdownIt)) {\n    return new MarkdownIt(presetName, options);\n  }\n\n  if (!options) {\n    if (!utils.isString(presetName)) {\n      options = presetName || {};\n      presetName = 'default';\n    }\n  }\n\n  /**\n   * MarkdownIt#inline -> ParserInline\n   *\n   * Instance of [[ParserInline]]. You may need it to add new rules when\n   * writing plugins. For simple rules control use [[MarkdownIt.disable]] and\n   * [[MarkdownIt.enable]].\n   **/\n  this.inline = new ParserInline();\n\n  /**\n   * MarkdownIt#block -> ParserBlock\n   *\n   * Instance of [[ParserBlock]]. You may need it to add new rules when\n   * writing plugins. For simple rules control use [[MarkdownIt.disable]] and\n   * [[MarkdownIt.enable]].\n   **/\n  this.block = new ParserBlock();\n\n  /**\n   * MarkdownIt#core -> Core\n   *\n   * Instance of [[Core]] chain executor. You may need it to add new rules when\n   * writing plugins. For simple rules control use [[MarkdownIt.disable]] and\n   * [[MarkdownIt.enable]].\n   **/\n  this.core = new ParserCore();\n\n  /**\n   * MarkdownIt#renderer -> Renderer\n   *\n   * Instance of [[Renderer]]. Use it to modify output look. Or to add rendering\n   * rules for new token types, generated by plugins.\n   *\n   * ##### Example\n   *\n   * ```javascript\n   * var md = require('markdown-it')();\n   *\n   * function myToken(tokens, idx, options, env, self) {\n   *   //...\n   *   return result;\n   * };\n   *\n   * md.renderer.rules['my_token'] = myToken\n   * ```\n   *\n   * See [[Renderer]] docs and [source code](https://github.com/markdown-it/markdown-it/blob/master/lib/renderer.js).\n   **/\n  this.renderer = new Renderer();\n\n  /**\n   * MarkdownIt#linkify -> LinkifyIt\n   *\n   * [linkify-it](https://github.com/markdown-it/linkify-it) instance.\n   * Used by [linkify](https://github.com/markdown-it/markdown-it/blob/master/lib/rules_core/linkify.js)\n   * rule.\n   **/\n  this.linkify = new LinkifyIt();\n\n  /**\n   * MarkdownIt#validateLink(url) -> Boolean\n   *\n   * Link validation function. CommonMark allows too much in links. By default\n   * we disable `javascript:`, `vbscript:`, `file:` schemas, and almost all `data:...` schemas\n   * except some embedded image types.\n   *\n   * You can change this behaviour:\n   *\n   * ```javascript\n   * var md = require('markdown-it')();\n   * // enable everything\n   * md.validateLink = function () { return true; }\n   * ```\n   **/\n  this.validateLink = validateLink;\n\n  /**\n   * MarkdownIt#normalizeLink(url) -> String\n   *\n   * Function used to encode link url to a machine-readable format,\n   * which includes url-encoding, punycode, etc.\n   **/\n  this.normalizeLink = normalizeLink;\n\n  /**\n   * MarkdownIt#normalizeLinkText(url) -> String\n   *\n   * Function used to decode link url to a human-readable format`\n   **/\n  this.normalizeLinkText = normalizeLinkText;\n\n\n  // Expose utils & helpers for easy acces from plugins\n\n  /**\n   * MarkdownIt#utils -> utils\n   *\n   * Assorted utility functions, useful to write plugins. See details\n   * [here](https://github.com/markdown-it/markdown-it/blob/master/lib/common/utils.js).\n   **/\n  this.utils = utils;\n\n  /**\n   * MarkdownIt#helpers -> helpers\n   *\n   * Link components parser functions, useful to write plugins. See details\n   * [here](https://github.com/markdown-it/markdown-it/blob/master/lib/helpers).\n   **/\n  this.helpers = utils.assign({}, helpers);\n\n\n  this.options = {};\n  this.configure(presetName);\n\n  if (options) { this.set(options); }\n}\n\n\n/** chainable\n * MarkdownIt.set(options)\n *\n * Set parser options (in the same format as in constructor). Probably, you\n * will never need it, but you can change options after constructor call.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')()\n *             .set({ html: true, breaks: true })\n *             .set({ typographer, true });\n * ```\n *\n * __Note:__ To achieve the best possible performance, don't modify a\n * `markdown-it` instance options on the fly. If you need multiple configurations\n * it's best to create multiple instances and initialize each with separate\n * config.\n **/\nMarkdownIt.prototype.set = function (options) {\n  utils.assign(this.options, options);\n  return this;\n};\n\n\n/** chainable, internal\n * MarkdownIt.configure(presets)\n *\n * Batch load of all options and compenent settings. This is internal method,\n * and you probably will not need it. But if you will - see available presets\n * and data structure [here](https://github.com/markdown-it/markdown-it/tree/master/lib/presets)\n *\n * We strongly recommend to use presets instead of direct config loads. That\n * will give better compatibility with next versions.\n **/\nMarkdownIt.prototype.configure = function (presets) {\n  var self = this, presetName;\n\n  if (utils.isString(presets)) {\n    presetName = presets;\n    presets = config[presetName];\n    if (!presets) { throw new Error('Wrong `markdown-it` preset \"' + presetName + '\", check name'); }\n  }\n\n  if (!presets) { throw new Error('Wrong `markdown-it` preset, can\\'t be empty'); }\n\n  if (presets.options) { self.set(presets.options); }\n\n  if (presets.components) {\n    Object.keys(presets.components).forEach(function (name) {\n      if (presets.components[name].rules) {\n        self[name].ruler.enableOnly(presets.components[name].rules);\n      }\n      if (presets.components[name].rules2) {\n        self[name].ruler2.enableOnly(presets.components[name].rules2);\n      }\n    });\n  }\n  return this;\n};\n\n\n/** chainable\n * MarkdownIt.enable(list, ignoreInvalid)\n * - list (String|Array): rule name or list of rule names to enable\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable list or rules. It will automatically find appropriate components,\n * containing rules with given names. If rule not found, and `ignoreInvalid`\n * not set - throws exception.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')()\n *             .enable(['sub', 'sup'])\n *             .disable('smartquotes');\n * ```\n **/\nMarkdownIt.prototype.enable = function (list, ignoreInvalid) {\n  var result = [];\n\n  if (!Array.isArray(list)) { list = [ list ]; }\n\n  [ 'core', 'block', 'inline' ].forEach(function (chain) {\n    result = result.concat(this[chain].ruler.enable(list, true));\n  }, this);\n\n  result = result.concat(this.inline.ruler2.enable(list, true));\n\n  var missed = list.filter(function (name) { return result.indexOf(name) < 0; });\n\n  if (missed.length && !ignoreInvalid) {\n    throw new Error('MarkdownIt. Failed to enable unknown rule(s): ' + missed);\n  }\n\n  return this;\n};\n\n\n/** chainable\n * MarkdownIt.disable(list, ignoreInvalid)\n * - list (String|Array): rule name or list of rule names to disable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * The same as [[MarkdownIt.enable]], but turn specified rules off.\n **/\nMarkdownIt.prototype.disable = function (list, ignoreInvalid) {\n  var result = [];\n\n  if (!Array.isArray(list)) { list = [ list ]; }\n\n  [ 'core', 'block', 'inline' ].forEach(function (chain) {\n    result = result.concat(this[chain].ruler.disable(list, true));\n  }, this);\n\n  result = result.concat(this.inline.ruler2.disable(list, true));\n\n  var missed = list.filter(function (name) { return result.indexOf(name) < 0; });\n\n  if (missed.length && !ignoreInvalid) {\n    throw new Error('MarkdownIt. Failed to disable unknown rule(s): ' + missed);\n  }\n  return this;\n};\n\n\n/** chainable\n * MarkdownIt.use(plugin, params)\n *\n * Load specified plugin with given params into current parser instance.\n * It's just a sugar to call `plugin(md, params)` with curring.\n *\n * ##### Example\n *\n * ```javascript\n * var iterator = require('markdown-it-for-inline');\n * var md = require('markdown-it')()\n *             .use(iterator, 'foo_replace', 'text', function (tokens, idx) {\n *               tokens[idx].content = tokens[idx].content.replace(/foo/g, 'bar');\n *             });\n * ```\n **/\nMarkdownIt.prototype.use = function (plugin /*, params, ... */) {\n  var args = [ this ].concat(Array.prototype.slice.call(arguments, 1));\n  plugin.apply(plugin, args);\n  return this;\n};\n\n\n/** internal\n * MarkdownIt.parse(src, env) -> Array\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * Parse input string and return list of block tokens (special token type\n * \"inline\" will contain list of inline tokens). You should not call this\n * method directly, until you write custom renderer (for example, to produce\n * AST).\n *\n * `env` is used to pass data between \"distributed\" rules and return additional\n * metadata like reference info, needed for the renderer. It also can be used to\n * inject data in specific cases. Usually, you will be ok to pass `{}`,\n * and then pass updated object to renderer.\n **/\nMarkdownIt.prototype.parse = function (src, env) {\n  if (typeof src !== 'string') {\n    throw new Error('Input data should be a String');\n  }\n\n  var state = new this.core.State(src, this, env);\n\n  this.core.process(state);\n\n  return state.tokens;\n};\n\n\n/**\n * MarkdownIt.render(src [, env]) -> String\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * Render markdown string into html. It does all magic for you :).\n *\n * `env` can be used to inject additional metadata (`{}` by default).\n * But you will not need it with high probability. See also comment\n * in [[MarkdownIt.parse]].\n **/\nMarkdownIt.prototype.render = function (src, env) {\n  env = env || {};\n\n  return this.renderer.render(this.parse(src, env), this.options, env);\n};\n\n\n/** internal\n * MarkdownIt.parseInline(src, env) -> Array\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * The same as [[MarkdownIt.parse]] but skip all block rules. It returns the\n * block tokens list with the single `inline` element, containing parsed inline\n * tokens in `children` property. Also updates `env` object.\n **/\nMarkdownIt.prototype.parseInline = function (src, env) {\n  var state = new this.core.State(src, this, env);\n\n  state.inlineMode = true;\n  this.core.process(state);\n\n  return state.tokens;\n};\n\n\n/**\n * MarkdownIt.renderInline(src [, env]) -> String\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * Similar to [[MarkdownIt.render]] but for single paragraph content. Result\n * will NOT be wrapped into `<p>` tags.\n **/\nMarkdownIt.prototype.renderInline = function (src, env) {\n  env = env || {};\n\n  return this.renderer.render(this.parseInline(src, env), this.options, env);\n};\n\n\nmodule.exports = MarkdownIt;\n", "'use strict';\n\n\nmodule.exports = require('./lib/');\n", "import type {\n  AstType,\n  Config,\n  Function as AstFunction,\n  Scalar,\n  Variable as AstVariable,\n} from '../types';\n\nexport function isAst(value?: any): value is AstType {\n  return !!value?.$$mdtype;\n}\n\nexport function isFunction(value?: any): value is AstFunction {\n  return !!(value?.$$mdtype === 'Function');\n}\n\nexport function isVariable(value?: any): value is AstVariable {\n  return !!(value?.$$mdtype === 'Variable');\n}\n\nexport function* getAstValues(value: any): Generator<AstType, void, unknown> {\n  if (value == null || typeof value !== 'object') return;\n\n  if (Array.isArray(value)) for (const v of value) yield* getAstValues(v);\n\n  if (isAst(value)) yield value;\n\n  if (Object.getPrototypeOf(value) !== Object.prototype) return;\n\n  for (const v of Object.values(value)) yield* getAstValues(v);\n}\n\nexport function resolve(value: any, config: Config = {}): any {\n  if (value == null || typeof value !== 'object') return value;\n\n  if (Array.isArray(value)) return value.map((item) => resolve(item, config));\n\n  if (isAst(value) && value?.resolve instanceof Function)\n    return value.resolve(config);\n\n  if (Object.getPrototypeOf(value) !== Object.prototype) return value;\n\n  const output: Record<string, Scalar> = {};\n  for (const [k, v] of Object.entries(value)) output[k] = resolve(v, config);\n  return output;\n}\n", "import type { RenderableTreeNode } from './types';\n\nexport default class Tag<\n  N extends string = string,\n  A extends Record<string, any> = Record<string, any>\n> {\n  readonly $$mdtype = 'Tag' as const;\n\n  static isTag = (tag: any): tag is Tag => {\n    return !!(tag?.$$mdtype === 'Tag');\n  };\n\n  name: N;\n  attributes: A;\n  children: RenderableTreeNode[];\n\n  constructor(\n    name = 'div' as N,\n    attributes = {} as A,\n    children: RenderableTreeNode[] = []\n  ) {\n    this.name = name;\n    this.attributes = attributes;\n    this.children = children;\n  }\n}\n", "import {\n  Config,\n  CustomAttributeTypeInterface,\n  ValidationError,\n} from '../types';\n\nexport class Class implements CustomAttributeTypeInterface {\n  validate(value: any, _config: Config, key: string): ValidationError[] {\n    if (typeof value === 'string' || typeof value === 'object') return [];\n\n    return [\n      {\n        id: 'attribute-type-invalid',\n        level: 'error',\n        message: `Attribute '${key}' must be type 'string | object'`,\n      },\n    ];\n  }\n\n  transform(value: any) {\n    if (!value || typeof value === 'string') return value;\n\n    const classes = [];\n    for (const [k, v] of Object.entries(value ?? {})) if (v) classes.push(k);\n    return classes.join(' ');\n  }\n}\n", "import type { CustomAttributeTypeInterface, ValidationError } from '../types';\n\nexport class Id implements CustomAttributeTypeInterface {\n  validate(value: any): ValidationError[] {\n    if (typeof value === 'string' && value.match(/^[a-zA-Z]/)) return [];\n\n    return [\n      {\n        id: 'attribute-value-invalid',\n        level: 'error',\n        message: \"The 'id' attribute must start with a letter\",\n      },\n    ];\n  }\n}\n", "import { parse, SyntaxError } from './grammar/tag';\nimport Variable from './ast/variable';\nimport Function from './ast/function';\n\nimport type Token from 'markdown-it/lib/token';\n\nenum STATES {\n  normal,\n  string,\n  escape,\n}\n\nexport const OPEN = '{%';\nexport const CLOSE = '%}';\n\nexport const IDENTIFIER_REGEX = /^[a-zA-Z0-9_-]+$/;\n\nexport function isIdentifier(s: any): s is string {\n  return typeof s === 'string' && IDENTIFIER_REGEX.test(s);\n}\n\nexport function isPromise(a: any): a is Promise<any> {\n  return a && typeof a === 'object' && typeof a.then === 'function';\n}\n\nexport function findTagEnd(content: string, start = 0) {\n  let state = STATES.normal;\n  for (let pos = start; pos < content.length; pos++) {\n    const char = content[pos];\n\n    switch (state) {\n      case STATES.string:\n        switch (char) {\n          case '\"':\n            state = STATES.normal;\n            break;\n          case '\\\\':\n            state = STATES.escape;\n            break;\n        }\n        break;\n      case STATES.escape:\n        state = STATES.string;\n        break;\n      case STATES.normal:\n        if (char === '\"') state = STATES.string;\n        else if (content.startsWith(CLOSE, pos)) return pos;\n    }\n  }\n\n  return null;\n}\n\nfunction parseTag(content: string, line: number, contentStart: number) {\n  try {\n    return parse(content, { Variable, Function });\n  } catch (error) {\n    if (!(error instanceof SyntaxError)) throw error;\n    const {\n      message,\n      location: { start, end },\n    } = error as SyntaxError;\n    const location = {\n      start: { line, character: start.offset + contentStart },\n      end: { line: line + 1, character: end.offset + contentStart },\n    };\n\n    return { type: 'error', meta: { error: { message, location } } };\n  }\n}\n\nexport function parseTags(content: string, firstLine = 0): Token[] {\n  let line = firstLine + 1;\n  const output = [];\n  let start = 0;\n\n  for (let pos = 0; pos < content.length; pos++) {\n    if (content[pos] === '\\n') {\n      line++;\n      continue;\n    }\n\n    if (!content.startsWith(OPEN, pos)) continue;\n\n    const end = findTagEnd(content, pos);\n\n    if (end == null) {\n      // If we cannot find the closing tag, we skip over it\n      pos = pos + OPEN.length;\n      continue;\n    }\n\n    const text = content.slice(pos, end + CLOSE.length);\n    const inner = content.slice(pos + OPEN.length, end);\n    const lineStart = content.lastIndexOf('\\n', pos);\n    const lineEnd = content.indexOf('\\n', end);\n    const lineContent = content.slice(lineStart, lineEnd);\n    const tag = parseTag(inner.trim(), line, pos - lineStart);\n\n    // Throw away excess whitespace introduced by block-level tags\n    const precedingTextEnd = lineContent.trim() === text ? lineStart : pos;\n    const precedingText = content.slice(start, precedingTextEnd);\n\n    output.push({\n      type: 'text',\n      start,\n      end: pos - 1,\n      content: precedingText,\n    });\n\n    output.push({\n      map: [line, line + 1],\n      position: {\n        start: pos - lineStart,\n        end: pos - lineStart + text.length,\n      },\n      start: pos,\n      end: pos + text.length - 1,\n      info: text,\n      ...tag,\n    });\n\n    start = end + CLOSE.length;\n    pos = start - 1;\n  }\n\n  output.push({\n    type: 'text',\n    start,\n    end: content.length - 1,\n    content: content.slice(start),\n  });\n\n  return output;\n}\n", "import type { Config, AstType } from '../types';\n\nexport default class Variable implements AstType {\n  readonly $$mdtype = 'Variable';\n\n  path;\n\n  constructor(path: (string | number)[] = []) {\n    this.path = path;\n  }\n\n  resolve({ variables }: Config = {}) {\n    return variables instanceof Function\n      ? variables(this.path)\n      : this.path.reduce((obj = {}, key) => obj[key], variables);\n  }\n}\n", "import { resolve } from './base';\nimport type { Config, AstType } from '../types';\n\nexport default class Function implements AstType {\n  readonly $$mdtype = 'Function';\n\n  name;\n  parameters;\n\n  constructor(name: string, parameters: Record<string, any>) {\n    this.name = name;\n    this.parameters = parameters;\n  }\n\n  resolve(config: Config = {}) {\n    const fn = config?.functions?.[this.name];\n    if (!fn) return null;\n\n    const parameters = resolve(this.parameters, config);\n    return fn.transform?.(parameters, config);\n  }\n}\n", "import Tag from './tag';\nimport { Class } from './schema-types/class';\nimport { Id } from './schema-types/id';\nimport { isPromise } from './utils';\nimport type {\n  Config,\n  MaybePromise,\n  Node,\n  NodeType,\n  RenderableTreeNodes,\n  Schema,\n  Transformer,\n} from './types';\n\ntype AttributesSchema = Schema['attributes'];\n\nexport const globalAttributes: AttributesSchema = {\n  class: { type: Class, render: true },\n  id: { type: Id, render: true },\n};\n\nexport default {\n  findSchema(node: Node, { nodes = {}, tags = {} }: Config = {}) {\n    return node.tag ? tags[node.tag] : nodes[node.type as NodeType];\n  },\n\n  attributes(node: Node, config: Config = {}) {\n    const schema = this.findSchema(node, config) ?? {};\n    const output: Record<string, any> = {};\n\n    const attrs = { ...globalAttributes, ...schema.attributes };\n    for (const [key, attr] of Object.entries(attrs)) {\n      if (attr.render == false) continue;\n\n      const name = typeof attr.render === 'string' ? attr.render : key;\n\n      let value = node.attributes[key];\n      if (typeof attr.type === 'function') {\n        const instance: any = new attr.type();\n        if (instance.transform) {\n          value = instance.transform(value, config);\n        }\n      }\n      value = value === undefined ? attr.default : value;\n\n      if (value === undefined) continue;\n      output[name] = value;\n    }\n\n    if (schema.slots) {\n      for (const [key, slot] of Object.entries(schema.slots)) {\n        if (slot.render === false) continue;\n        const name = typeof slot.render === 'string' ? slot.render : key;\n        if (node.slots[key]) output[name] = this.node(node.slots[key], config);\n      }\n    }\n\n    return output;\n  },\n\n  children(node: Node, config: Config = {}) {\n    const children = node.children.flatMap<MaybePromise<RenderableTreeNodes>>(\n      (child) => this.node(child, config)\n    );\n    if (children.some(isPromise)) {\n      return Promise.all(children);\n    }\n    return children;\n  },\n\n  node(node: Node, config: Config = {}) {\n    const schema = this.findSchema(node, config) ?? {};\n    if (schema && schema.transform instanceof Function)\n      return schema.transform(node, config);\n\n    const children = this.children(node, config);\n    if (!schema || !schema.render) return children;\n\n    const attributes = this.attributes(node, config);\n\n    if (isPromise(attributes) || isPromise(children)) {\n      return Promise.all([attributes, children]).then(\n        (values) => new Tag(schema.render, ...values)\n      );\n    }\n\n    return new Tag(schema.render, attributes, children);\n  },\n} as Transformer;\n", "import { resolve } from './base';\nimport transformer from '../transformer';\nimport type {\n  AstType,\n  AttributeValue,\n  Config,\n  Location,\n  MaybePromise,\n  NodeType,\n  RenderableTreeNode,\n  RenderableTreeNodes,\n  Schema,\n  ValidationError,\n} from '../types';\n\nexport default class Node implements AstType {\n  readonly $$mdtype = 'Node';\n\n  attributes: Record<string, any>;\n  slots: Record<string, Node>;\n  children: Node[];\n  errors: ValidationError[] = [];\n  lines: number[] = [];\n  type: NodeType;\n  tag?: string;\n  annotations: AttributeValue[];\n\n  inline = false;\n  location?: Location;\n\n  constructor(\n    type: NodeType = 'node',\n    attributes: Record<string, any> = {},\n    children: Node[] = [],\n    tag?: string\n  ) {\n    this.attributes = attributes;\n    this.children = children;\n    this.type = type;\n    this.tag = tag;\n    this.annotations = [];\n    this.slots = {};\n  }\n\n  *walk(): Generator<Node, void, unknown> {\n    for (const child of [...Object.values(this.slots), ...this.children]) {\n      yield child;\n      yield* child.walk();\n    }\n  }\n\n  push(node: Node) {\n    this.children.push(node);\n  }\n\n  resolve(config: Config = {}): Node {\n    return Object.assign(new Node(), this, {\n      children: this.children.map((child) => child.resolve(config)),\n      attributes: resolve(this.attributes, config),\n      slots: Object.fromEntries(\n        Object.entries(this.slots).map(([name, slot]) => [\n          name,\n          slot.resolve(config),\n        ])\n      ),\n    });\n  }\n\n  findSchema(config: Config = {}): Schema | undefined {\n    return transformer.findSchema(this, config);\n  }\n\n  transformAttributes(config: Config = {}) {\n    return transformer.attributes(this, config);\n  }\n\n  transformChildren(config: Config): RenderableTreeNode[] {\n    return transformer.children(this, config);\n  }\n\n  transform(config: Config): MaybePromise<RenderableTreeNodes> {\n    return transformer.node(this, config);\n  }\n}\n", "import Node from './node';\nimport Function from './function';\nimport Variable from './variable';\nimport * as base from './base';\n\nimport type { AstType } from '../types';\n\nconst AstTypes = {\n  Function,\n  Node,\n  Variable,\n};\n\nfunction reviver(_: string, value: AstType): any {\n  if (!value) return value;\n  const klass = AstTypes[value.$$mdtype] as any;\n  return klass ? Object.assign(new klass(), value) : value;\n}\n\nfunction fromJSON(text: string): Node | Node[] {\n  return JSON.parse(text, reviver);\n}\n\nexport default {\n  ...AstTypes,\n  ...base,\n  fromJSON,\n};\n", "import Ast from './ast';\nimport { OPEN, CLOSE, isIdentifier } from './utils';\nimport type { AttributeValue, Function, Node, Value, Variable } from './types';\n\ntype Options = {\n  allowIndentation?: boolean;\n  maxTagOpeningWidth?: number;\n  orderedListMode?: 'increment' | 'repeat';\n  parent?: Node;\n  indent?: number;\n};\n\nconst SPACE = ' ';\nconst SEP = ', '; // Value separator\nconst NL = '\\n'; //  Newline\nconst OL = '.'; // Ordered list\nconst UL = '-'; //  Unordered list\n\nconst MAX_TAG_OPENING_WIDTH = 80;\n\nconst WRAPPING_TYPES = ['strong', 'em', 's'];\n\nconst max = (a: number, b: number) => Math.max(a, b);\nconst increment = (o: Options, n = 2) => ({\n  ...o,\n  indent: (o.indent || 0) + n,\n});\n\nfunction* formatChildren(a: Node, options: Options) {\n  for (const child of a.children) {\n    yield* formatValue(child, options);\n  }\n}\n\nfunction* formatInline(g: Generator<string>) {\n  yield [...g].join('').trim();\n}\n\nfunction* formatTableRow(items: Array<string>) {\n  yield `| ${items.join(' | ')} |`;\n}\n\nfunction formatScalar(v: Value): string | undefined {\n  if (v === undefined) {\n    return undefined;\n  }\n  if (Ast.isAst(v)) {\n    return format(v);\n  }\n  if (v === null) {\n    return 'null';\n  }\n  if (Array.isArray(v)) {\n    return '[' + v.map(formatScalar).join(SEP) + ']';\n  }\n  if (typeof v === 'object') {\n    return (\n      '{' +\n      Object.entries(v)\n        .map(\n          ([key, value]) =>\n            `${isIdentifier(key) ? key : `\"${key}\"`}: ${formatScalar(value)}`\n        )\n        .join(SEP) +\n      '}'\n    );\n  }\n  return JSON.stringify(v);\n}\n\nfunction formatAnnotationValue(a: AttributeValue): string | undefined {\n  const formattedValue = formatScalar(a.value);\n\n  if (formattedValue === undefined) return undefined;\n  if (a.name === 'primary') return formattedValue;\n  if (a.name === 'id' && typeof a.value === 'string' && isIdentifier(a.value))\n    return '#' + a.value;\n  if (a.type === 'class' && isIdentifier(a.name)) return '.' + a.name;\n\n  return `${a.name}=${formattedValue}`;\n}\n\nfunction* formatAttributes(n: Node) {\n  for (const [key, value] of Object.entries(n.attributes)) {\n    /**\n     * In cases where the class attribute is not a valid identifer, we treat it as a\n     * regular attribute without the '.' sigil\n     */\n    if (key === 'class' && typeof value === 'object' && !Ast.isAst(value))\n      for (const name of Object.keys(value)) {\n        yield formatAnnotationValue({ type: 'class', name, value });\n      }\n    else yield formatAnnotationValue({ type: 'attribute', name: key, value });\n  }\n}\n\nfunction* formatAnnotations(n: Node) {\n  if (n.annotations.length) {\n    yield OPEN + SPACE;\n    yield n.annotations.map(formatAnnotationValue).join(SPACE);\n    yield SPACE + CLOSE;\n  }\n}\n\nfunction* formatVariable(v: Variable) {\n  yield '$';\n  yield v.path\n    .map((p, i) => {\n      if (i === 0) return p;\n      if (isIdentifier(p)) return '.' + p;\n      if (typeof p === 'number') return `[${p}]`;\n      return `[\"${p}\"]`;\n    })\n    .join('');\n}\n\nfunction* formatFunction(f: Function) {\n  yield f.name;\n  yield '(';\n  yield Object.values(f.parameters).map(formatScalar).join(SEP);\n  yield ')';\n}\n\nfunction* trimStart(g: Generator<string>) {\n  let n;\n  do {\n    const { value, done } = g.next();\n    if (done) return;\n    n = value.trimStart();\n  } while (!n.length);\n  yield n;\n  yield* g;\n}\n\nfunction* escapeMarkdownCharacters(s: string, characters: RegExp) {\n  yield s\n    .replace(characters, '\\\\$&')\n    // TODO keep &nbsp; as entity in the AST?\n    // Non-breaking space (0xA0)\n    .replace(new RegExp('\\xa0', 'g'), '&nbsp;');\n}\n\nfunction* formatNode(n: Node, o: Options = {}) {\n  const no = { ...o, parent: n };\n  const indent = SPACE.repeat(no.indent || 0);\n\n  switch (n.type) {\n    case 'document': {\n      if (n.attributes.frontmatter && n.attributes.frontmatter.length) {\n        yield '---' + NL + n.attributes.frontmatter + NL + '---' + NL + NL;\n      }\n      yield* trimStart(formatChildren(n, no));\n      break;\n    }\n    case 'heading': {\n      yield NL;\n      yield indent;\n      yield '#'.repeat(n.attributes.level || 1);\n      yield SPACE;\n      yield* trimStart(formatChildren(n, no));\n      yield* formatAnnotations(n);\n      yield NL;\n      break;\n    }\n    case 'paragraph': {\n      yield NL;\n      yield* formatChildren(n, no);\n      yield* formatAnnotations(n);\n      yield NL;\n      break;\n    }\n    case 'inline': {\n      yield indent;\n      yield* formatChildren(n, no);\n      break;\n    }\n    case 'image': {\n      yield '!';\n      yield '[';\n      yield* formatValue(n.attributes.alt, no);\n      yield ']';\n      yield '(';\n      yield* typeof n.attributes.src === 'string'\n        ? escapeMarkdownCharacters(n.attributes.src, /[()]/g)\n        : formatValue(n.attributes.src, no);\n      if (n.attributes.title) {\n        yield SPACE + `\"${n.attributes.title}\"`;\n      }\n      yield ')';\n      break;\n    }\n    case 'link': {\n      const children = [...formatChildren(n, no)].join('');\n\n      // https://spec.commonmark.org/0.31.2/#autolinks\n      if (children === n.attributes.href && !n.attributes.title) {\n        yield `<${n.attributes.href}>`;\n        break;\n      }\n\n      yield '[';\n      yield children;\n      yield ']';\n      yield '(';\n      yield* typeof n.attributes.href === 'string'\n        ? escapeMarkdownCharacters(n.attributes.href, /[()]/g)\n        : formatValue(n.attributes.href, no);\n      if (n.attributes.title) {\n        yield SPACE + `\"${n.attributes.title}\"`;\n      }\n      yield ')';\n      break;\n    }\n    case 'text': {\n      const { content } = n.attributes;\n\n      if (Ast.isAst(content)) {\n        yield OPEN + SPACE;\n        yield* formatValue(content, no);\n        yield SPACE + CLOSE;\n      } else {\n        if (o.parent && WRAPPING_TYPES.includes(o.parent.type)) {\n          // Escape **strong**, _em_, and ~~s~~\n          yield* escapeMarkdownCharacters(content, /[*_~]/g);\n        } else {\n          // Escape > blockquote, * list item, and heading\n          yield* escapeMarkdownCharacters(content, /^\\*|#+\\s|^>/);\n        }\n      }\n\n      break;\n    }\n    case 'blockquote': {\n      const prefix = '>' + SPACE;\n      yield n.children\n        .map((child) => format(child, no).trimStart())\n        .map((d) => NL + indent + prefix + d)\n        .join(indent + prefix);\n      break;\n    }\n    case 'hr': {\n      yield NL;\n      yield indent;\n      yield '---';\n      yield NL;\n      break;\n    }\n    case 'fence': {\n      yield NL;\n      yield indent;\n\n      const innerFence = n.attributes.content.match(/`{3,}/g) || [];\n\n      const innerFenceLength = innerFence\n        .map((s: string) => s.length)\n        .reduce(max, 0);\n\n      const boundary = '`'.repeat(innerFenceLength ? innerFenceLength + 1 : 3);\n      const needsNlBeforeEndBoundary = !n.attributes.content.endsWith(NL);\n\n      yield boundary;\n      if (n.attributes.language) yield n.attributes.language;\n      if (n.annotations.length) yield SPACE;\n      yield* formatAnnotations(n);\n      yield NL;\n      yield indent;\n      yield n.attributes.content.split(NL).join(NL + indent); // yield* formatChildren(n, no);\n      if (needsNlBeforeEndBoundary) {\n        yield NL;\n      }\n      yield boundary;\n      yield NL;\n      break;\n    }\n    case 'tag': {\n      if (!n.inline) {\n        yield NL;\n        yield indent;\n      }\n      const open = OPEN + SPACE;\n      const attributes = [...formatAttributes(n)].filter(\n        (v) => v !== undefined\n      );\n      const tag = [open + n.tag, ...attributes];\n      const inlineTag = tag.join(SPACE);\n\n      const isLongTagOpening =\n        inlineTag.length + open.length * 2 >\n        (o.maxTagOpeningWidth || MAX_TAG_OPENING_WIDTH);\n\n      // {% tag attributes={...} %}\n      yield (!n.inline && isLongTagOpening\n        ? tag.join(NL + SPACE.repeat(open.length) + indent)\n        : inlineTag) +\n        SPACE +\n        (n.children.length ? '' : '/') +\n        CLOSE;\n\n      if (n.children.length) {\n        yield* formatChildren(n, no.allowIndentation ? increment(no) : no);\n        if (!n.inline) {\n          yield indent;\n        }\n        // {% /tag %}\n        yield OPEN + SPACE + '/' + n.tag + SPACE + CLOSE;\n      }\n      if (!n.inline) {\n        yield NL;\n      }\n      break;\n    }\n    case 'list': {\n      const isLoose = n.children.some((n) =>\n        n.children.some((c) => c.type === 'paragraph')\n      );\n\n      for (let i = 0; i < n.children.length; i++) {\n        const prefix = (() => {\n          if (!n.attributes.ordered) return n.attributes.marker ?? UL;\n\n          // Must be an ordered list now\n          let number = '1';\n          const startNumber = n.attributes.start ?? 1;\n          if (i === 0) number = startNumber.toString();\n\n          if (o.orderedListMode === 'increment') {\n            number = (parseInt(startNumber) + i).toString();\n          }\n\n          return `${number}${n.attributes.marker ?? OL}`;\n        })();\n        let d = format(n.children[i], increment(no, prefix.length + 1));\n\n        if (!isLoose || i === n.children.length - 1) {\n          d = d.trim();\n        }\n\n        yield NL + indent + prefix + ' ' + d;\n      }\n      yield NL;\n      break;\n    }\n    case 'item': {\n      for (let i = 0; i < n.children.length; i++) {\n        yield* formatValue(n.children[i], no);\n        if (i === 0) yield* formatAnnotations(n);\n      }\n      break;\n    }\n    case 'strong': {\n      yield n.attributes.marker ?? '**';\n      yield* formatInline(formatChildren(n, no));\n      yield n.attributes.marker ?? '**';\n      break;\n    }\n    case 'em': {\n      yield n.attributes.marker ?? '*';\n      yield* formatInline(formatChildren(n, no));\n      yield n.attributes.marker ?? '*';\n      break;\n    }\n    case 'code': {\n      yield '`';\n      yield* formatInline(formatValue(n.attributes.content, no));\n      yield '`';\n      break;\n    }\n    case 's': {\n      yield '~~';\n      yield* formatInline(formatChildren(n, no));\n      yield '~~';\n      break;\n    }\n    case 'hardbreak': {\n      yield '\\\\' + NL;\n      yield indent;\n      break;\n    }\n    case 'softbreak': {\n      yield NL;\n      yield indent;\n      break;\n    }\n    case 'table': {\n      const table = [...formatChildren(n, increment(no))] as any as any[];\n      if (o.parent && o.parent.type === 'tag' && o.parent.tag === 'table') {\n        for (let i = 0; i < table.length; i++) {\n          const row = table[i];\n          // format tags like \"if\" in the middle of a table list\n          if (typeof row === 'string') {\n            if (row.trim().length) {\n              yield NL;\n              yield row;\n            }\n          } else {\n            if (i !== 0) {\n              yield NL;\n              yield indent + '---';\n            }\n            for (const d of row) {\n              yield NL + indent + UL + ' ' + d;\n            }\n          }\n        }\n        yield NL;\n      } else {\n        const widths: number[] = [];\n\n        for (const row of table) {\n          for (let i = 0; i < row.length; i++) {\n            widths[i] = widths[i]\n              ? Math.max(widths[i], row[i].length)\n              : row[i].length;\n          }\n        }\n\n        const [head, ...rows] = table as string[][];\n\n        yield NL;\n        yield* formatTableRow(\n          head.map((cell, i) => cell + SPACE.repeat(widths[i] - cell.length))\n        );\n        yield NL;\n        yield* formatTableRow(head.map((cell, i) => '-'.repeat(widths[i])));\n        yield NL;\n        for (const row of rows) {\n          yield* formatTableRow(\n            row.map((cell, i) => cell + SPACE.repeat(widths[i] - cell.length))\n          );\n          yield NL;\n        }\n      }\n      break;\n    }\n    case 'thead': {\n      const [head] = [...formatChildren(n, no)];\n      yield head || [];\n      break;\n    }\n    case 'tr': {\n      yield [...formatChildren(n, no)];\n      break;\n    }\n    case 'td':\n    case 'th': {\n      yield [...formatChildren(n, no), ...formatAnnotations(n)].join('').trim();\n      break;\n    }\n    case 'tbody': {\n      yield* formatChildren(n, no);\n      break;\n    }\n    case 'comment': {\n      yield '<!-- ' + n.attributes.content + ' -->\\n';\n      break;\n    }\n    case 'error':\n    case 'node':\n      break;\n  }\n}\n\nfunction* formatValue(\n  v: Value | Value[],\n  o: Options = {}\n): Generator<string, void, unknown> {\n  switch (typeof v) {\n    case 'undefined':\n      break;\n    case 'boolean':\n    case 'number':\n    case 'string': {\n      yield v.toString();\n      break;\n    }\n    case 'object': {\n      if (v === null) break;\n      if (Array.isArray(v)) {\n        for (const n of v) yield* formatValue(n, o);\n        break;\n      }\n      switch (v.$$mdtype) {\n        case 'Function': {\n          yield* formatFunction(v as Function);\n          break;\n        }\n        case 'Node':\n          yield* formatNode(v as Node, o);\n          break;\n        case 'Variable': {\n          yield* formatVariable(v as Variable);\n          break;\n        }\n        default:\n          throw new Error(`Unimplemented: \"${v.$$mdtype}\"`);\n      }\n      break;\n    }\n  }\n}\n\nexport default function format(v: Value | Value[], options?: Options): string {\n  let doc = '';\n  for (const s of formatValue(v, options)) doc += s;\n  return doc.trimStart();\n}\n", "import {\n  Config,\n  CustomAttributeTypeInterface,\n  ValidationError,\n} from '../types';\n\n/**\n * Conditional attribute type for Markdoc {% if /%} and {% else /%} tags.\n *\n * Acceptable values are:\n * - `boolean` (true or false)\n * - `null` or `undefined` (in case of using variable that's not defined)\n * - `object`\n */\nexport class ConditionalAttributeType implements CustomAttributeTypeInterface {\n  validate(value: any, _config: Config, key: string): ValidationError[] {\n    if (\n      typeof value === 'boolean' ||\n      value === null ||\n      value === undefined ||\n      typeof value === 'object'\n    ) {\n      return [];\n    }\n\n    return [\n      {\n        id: 'attribute-type-invalid',\n        level: 'error',\n        message: `Attribute '${key}' must be type 'boolean | object' (null or undefined are also allowed)`,\n      },\n    ];\n  }\n}\n", "import { isPromise } from '../utils';\n\nimport {\n  MaybePromise,\n  Node,\n  RenderableTreeNode,\n  RenderableTreeNodes,\n  Schema,\n  Value,\n} from '../types';\nimport { ConditionalAttributeType } from '../schema-types/conditional';\n\ntype Condition = { condition: Value; children: Node[] };\n\nexport function truthy(value: any) {\n  return value !== false && value !== undefined && value !== null;\n}\n\nfunction renderConditions(node: Node) {\n  const conditions: Condition[] = [\n    { condition: node.attributes.primary, children: [] },\n  ];\n  for (const child of node.children) {\n    if (child.type === 'tag' && child.tag === 'else')\n      conditions.push({\n        condition:\n          'primary' in child.attributes ? child.attributes.primary : true,\n        children: [],\n      });\n    else conditions[conditions.length - 1].children.push(child);\n  }\n\n  return conditions;\n}\n\nexport const tagIf: Schema = {\n  attributes: {\n    primary: { type: ConditionalAttributeType, render: false },\n  },\n\n  transform(node, config) {\n    const conditions = renderConditions(node);\n    for (const { condition, children } of conditions)\n      if (truthy(condition)) {\n        const nodes = children.flatMap<MaybePromise<RenderableTreeNodes>>(\n          (child) => child.transform(config)\n        );\n        if (nodes.some(isPromise)) {\n          return Promise.all(nodes).then((nodes) => nodes.flat());\n        }\n        return nodes as RenderableTreeNode[];\n      }\n    return [];\n  },\n};\n\nexport const tagElse: Schema = {\n  selfClosing: true,\n  attributes: {\n    primary: { type: ConditionalAttributeType, render: false },\n  },\n};\n", "import type { ConfigFunction } from '../types';\nimport { truthy } from '../tags/conditional';\n\nconst and: ConfigFunction = {\n  transform(parameters) {\n    return Object.values(parameters).every((x) => truthy(x));\n  },\n};\n\nconst or: ConfigFunction = {\n  transform(parameters) {\n    return Object.values(parameters).find((x) => truthy(x)) !== undefined;\n  },\n};\n\nconst not: ConfigFunction = {\n  parameters: {\n    0: { required: true },\n  },\n\n  transform(parameters) {\n    return !truthy(parameters[0]);\n  },\n};\n\nconst equals: ConfigFunction = {\n  transform(parameters) {\n    const values = Object.values(parameters);\n    return values.every((v) => v === values[0]);\n  },\n};\n\nconst debug: ConfigFunction = {\n  transform(parameters) {\n    return JSON.stringify(parameters[0], null, 2);\n  },\n};\n\nconst defaultFn: ConfigFunction = {\n  transform(parameters) {\n    return parameters[0] === undefined ? parameters[1] : parameters[0];\n  },\n};\n\nexport default { and, or, not, equals, default: defaultFn, debug };\n", "import Ast from '../ast/index';\n\nimport type { Node, NodeType, ValidationError } from '../types';\n\nfunction convertToRow(node: Node, cellType: NodeType = 'td') {\n  node.type = 'tr';\n  node.attributes = {};\n\n  for (const cell of node.children) cell.type = cellType;\n\n  return node;\n}\n\nfunction isConditionalTag(node: Node, conditionalTags: string[]) {\n  return (\n    node.type === 'tag' && !!node.tag && conditionalTags.includes(node.tag)\n  );\n}\n\nfunction isComment(node: Node) {\n  return (\n    node.type === 'comment' || (node.type === 'tag' && node.tag === 'comment')\n  );\n}\n\nfunction unexpectedNodeError(node: Node): ValidationError {\n  return {\n    id: 'table-syntax',\n    level: 'critical',\n    message: `Found ${node.type}${\n      node.tag ? ` ${node.tag}` : ''\n    } where a list was expected. Make sure all content inside table cells is indented.`,\n    location: node.location,\n  };\n}\n\nexport default function transform(\n  document: Node,\n  conditionalTags: string[] = ['if']\n) {\n  for (const node of document.walk()) {\n    if (node.type !== 'tag' || node.tag !== 'table') continue;\n\n    const [first, ...rest] = node.children;\n    if (!first || first.type === 'table') continue;\n\n    const table = new Ast.Node('table', node.attributes, [\n      new Ast.Node('thead'),\n      new Ast.Node('tbody'),\n    ]);\n\n    const [thead, tbody] = table.children;\n\n    if (first.type === 'list') thead.push(convertToRow(first, 'th'));\n\n    for (const row of rest) {\n      // Convert lists to rows with special-case support for conditionals\n      // When a conditional is encountered, convert all of its top-level lists to rows\n      if (row.type === 'list') convertToRow(row);\n      else if (isConditionalTag(row, conditionalTags)) {\n        const children = [];\n\n        for (const child of row.children) {\n          // Replace children and skip HRs in order to support conditionals with multiple rows\n          if (child.type === 'hr') continue;\n          if (child.type === 'list') convertToRow(child);\n          else if (\n            isComment(child) ||\n            child.tag === 'else' ||\n            isConditionalTag(child, conditionalTags)\n          ) {\n            // Allow structural tags: else, nested conditionals, and comments\n          } else {\n            row.errors.push(unexpectedNodeError(child));\n            continue;\n          }\n          children.push(child);\n        }\n\n        row.children = children;\n      } else if (row.type !== 'hr' && !isComment(row)) {\n        node.errors.push(unexpectedNodeError(row));\n        continue;\n      } else continue;\n      tbody.push(row);\n    }\n\n    node.children = [table];\n  }\n}\n", "import table from './table';\nexport default [table];\n", "import Node from './ast/node';\nimport transforms from './transforms/index';\nimport { OPEN } from './utils';\n\nimport type { AttributeValue, ParserArgs } from './types';\n\nimport type Token from 'markdown-it/lib/token';\n\nconst mappings: Record<string, string> = {\n  ordered_list: 'list',\n  bullet_list: 'list',\n  code_inline: 'code',\n  list_item: 'item',\n  variable: 'text',\n};\n\nfunction annotate(node: Node, attributes: AttributeValue[]) {\n  for (const attribute of attributes) {\n    node.annotations.push(attribute);\n\n    const { name, value, type } = attribute;\n    if (type === 'attribute') {\n      if (node.attributes[name] !== undefined)\n        node.errors.push({\n          id: 'duplicate-attribute',\n          level: 'warning',\n          message: `Attribute '${name}' already set`,\n        });\n      node.attributes[name] = value;\n    } else if (type === 'class')\n      if (node.attributes.class) node.attributes.class[name] = value;\n      else node.attributes.class = { [name]: value };\n  }\n}\n\nfunction handleAttrs(token: Token, type: string) {\n  switch (type) {\n    case 'heading':\n      return { level: Number(token.tag.replace('h', '')) };\n    case 'list': {\n      const attrs = token.attrs ? Object.fromEntries(token.attrs) : undefined;\n      const ordered = token.type.startsWith('ordered');\n      return ordered && attrs?.start\n        ? { ordered: true, start: attrs.start, marker: token.markup }\n        : { ordered, marker: token.markup };\n    }\n    case 'link': {\n      const attrs = Object.fromEntries(token.attrs);\n      return attrs.title\n        ? { href: attrs.href, title: attrs.title }\n        : { href: attrs.href };\n    }\n    case 'image': {\n      const attrs = Object.fromEntries(token.attrs);\n      return attrs.title\n        ? { alt: token.content, src: attrs.src, title: attrs.title }\n        : { alt: token.content, src: attrs.src };\n    }\n    case 'em':\n    case 'strong':\n      return { marker: token.markup };\n    case 'text':\n    case 'code':\n    case 'comment':\n      return { content: (token.meta || {}).variable || token.content };\n    case 'fence': {\n      const [language] = token.info.split(' ', 1);\n      return language === '' || language === OPEN\n        ? { content: token.content }\n        : { content: token.content, language };\n    }\n    case 'td':\n    case 'th': {\n      if (token.attrs) {\n        const attrs = Object.fromEntries(token.attrs);\n\n        let align;\n        if (attrs.style) {\n          if (attrs.style.includes('left')) {\n            align = 'left';\n          } else if (attrs.style.includes('center')) {\n            align = 'center';\n          } else if (attrs.style.includes('right')) {\n            align = 'right';\n          }\n        }\n\n        if (align) {\n          return { align };\n        }\n      }\n      return {};\n    }\n    default:\n      return {};\n  }\n}\n\nfunction handleToken(\n  token: Token,\n  nodes: Node[],\n  file?: string,\n  handleSlots?: boolean,\n  addLocation?: boolean,\n  inlineParent?: Node\n) {\n  if (token.type === 'frontmatter') {\n    nodes[0].attributes.frontmatter = token.content;\n    return;\n  }\n\n  if (token.hidden || (token.type === 'text' && token.content === '')) return;\n\n  const errors = token.errors || [];\n  const parent = nodes[nodes.length - 1];\n  const { tag, attributes, error } = token.meta || {};\n\n  if (token.type === 'annotation') {\n    if (inlineParent) return annotate(inlineParent, attributes);\n\n    return parent.errors.push({\n      id: 'no-inline-annotations',\n      level: 'error',\n      message: `Can't apply inline annotations to '${parent.type}'`,\n    });\n  }\n\n  let typeName = token.type.replace(/_(open|close)$/, '');\n  if (mappings[typeName]) typeName = mappings[typeName];\n\n  if (typeName === 'error') {\n    const { message, location } = error;\n    errors.push({ id: 'parse-error', level: 'critical', message, location });\n  }\n\n  if (token.nesting < 0) {\n    if (parent.type === typeName && parent.tag === tag) {\n      if (parent.lines && token.map) parent.lines.push(...token.map);\n      return nodes.pop();\n    }\n\n    errors.push({\n      id: 'missing-opening',\n      level: 'critical',\n      message: `Node '${typeName}' is missing opening`,\n    });\n  }\n\n  const attrs = handleAttrs(token, typeName);\n  const node = new Node(typeName, attrs, undefined, tag || undefined);\n  const { position = {} } = token;\n\n  node.errors = errors;\n  if (addLocation !== false) {\n    node.lines = token.map || parent.lines || [];\n    node.location = {\n      file,\n      start: {\n        line: node.lines[0],\n        character: position.start,\n      },\n      end: {\n        line: node.lines[1],\n        character: position.end,\n      },\n    };\n  }\n\n  if (inlineParent) node.inline = true;\n\n  if (attributes && ['tag', 'fence', 'image'].includes(typeName))\n    annotate(node, attributes);\n\n  if (\n    handleSlots &&\n    tag === 'slot' &&\n    typeof node.attributes.primary === 'string'\n  )\n    parent.slots[node.attributes.primary] = node;\n  else parent.push(node);\n\n  if (token.nesting > 0) nodes.push(node);\n\n  if (!Array.isArray(token.children)) return;\n\n  if (node.type === 'inline') inlineParent = parent;\n\n  nodes.push(node);\n\n  const isLeafNode = typeName === 'image';\n  if (!isLeafNode) {\n    for (const child of token.children)\n      handleToken(child, nodes, file, handleSlots, addLocation, inlineParent);\n  }\n\n  nodes.pop();\n}\n\nexport default function parser(tokens: Token[], args?: string | ParserArgs) {\n  const doc = new Node('document');\n  const nodes = [doc];\n\n  if (typeof args === 'string') args = { file: args };\n\n  for (const token of tokens)\n    handleToken(token, nodes, args?.file, args?.slots, args?.location);\n\n  if (nodes.length > 1)\n    for (const node of nodes.slice(1))\n      node.errors.push({\n        id: 'missing-closing',\n        level: 'critical',\n        message: `Node '${node.tag || node.type}' is missing closing`,\n      });\n\n  for (const transform of transforms) transform(doc, args?.conditionalTags);\n\n  return doc;\n}\n", "import type { Schema } from './types';\nimport Tag from './tag';\n\nexport const document: Schema = {\n  render: 'article',\n  children: [\n    'heading',\n    'paragraph',\n    'image',\n    'table',\n    'tag',\n    'fence',\n    'blockquote',\n    'comment',\n    'list',\n    'hr',\n  ],\n  attributes: {\n    frontmatter: { render: false },\n  },\n};\n\nexport const heading: Schema = {\n  children: ['inline'],\n  attributes: {\n    level: { type: Number, render: false, required: true },\n  },\n  transform(node, config) {\n    return new Tag(\n      `h${node.attributes['level']}`,\n      node.transformAttributes(config),\n      node.transformChildren(config)\n    );\n  },\n};\n\nexport const paragraph: Schema = {\n  render: 'p',\n  children: ['inline'],\n};\n\nexport const image: Schema = {\n  render: 'img',\n  attributes: {\n    src: { type: String, required: true },\n    alt: { type: String },\n    title: { type: String },\n    // width/height attributes will need to be to be implemented as an extension to markdown-it\n  },\n};\n\nexport const fence: Schema = {\n  render: 'pre',\n  attributes: {\n    content: { type: String, render: false, required: true },\n    language: { type: String, render: 'data-language' },\n    process: { type: Boolean, render: false, default: true },\n  },\n  transform(node, config) {\n    const attributes = node.transformAttributes(config);\n    const children = node.children.length\n      ? node.transformChildren(config)\n      : [node.attributes.content];\n\n    return new Tag('pre', attributes, children);\n  },\n};\n\nexport const blockquote: Schema = {\n  render: 'blockquote',\n  children: [\n    'heading',\n    'paragraph',\n    'image',\n    'table',\n    'tag',\n    'fence',\n    'blockquote',\n    'list',\n    'hr',\n  ],\n};\n\nexport const item: Schema = {\n  render: 'li',\n  children: [\n    'inline',\n    'heading',\n    'paragraph',\n    'image',\n    'table',\n    'tag',\n    'fence',\n    'blockquote',\n    'list',\n    'hr',\n  ],\n};\n\nexport const list: Schema = {\n  children: ['item'],\n  attributes: {\n    ordered: { type: Boolean, render: false, required: true },\n    start: { type: Number },\n    marker: { type: String, render: false },\n  },\n  transform(node, config) {\n    return new Tag(\n      node.attributes.ordered ? 'ol' : 'ul',\n      node.transformAttributes(config),\n      node.transformChildren(config)\n    );\n  },\n};\n\nexport const hr: Schema = {\n  render: 'hr',\n};\n\nexport const table: Schema = {\n  render: 'table',\n};\n\nexport const td: Schema = {\n  render: 'td',\n  children: [\n    'inline',\n    'heading',\n    'paragraph',\n    'image',\n    'table',\n    'tag',\n    'fence',\n    'blockquote',\n    'list',\n    'hr',\n  ],\n  attributes: {\n    align: { type: String },\n    colspan: { type: Number, render: 'colSpan' },\n    rowspan: { type: Number, render: 'rowSpan' },\n  },\n};\n\nexport const th: Schema = {\n  render: 'th',\n  attributes: {\n    width: { type: String },\n    align: { type: String },\n    colspan: { type: Number, render: 'colSpan' },\n    rowspan: { type: Number, render: 'rowSpan' },\n  },\n};\n\nexport const tr: Schema = {\n  render: 'tr',\n  children: ['th', 'td'],\n};\n\nexport const tbody: Schema = {\n  render: 'tbody',\n  children: ['tr', 'tag'],\n};\n\nexport const thead: Schema = {\n  render: 'thead',\n  children: ['tr'],\n};\n\nexport const strong: Schema = {\n  render: 'strong',\n  children: ['em', 's', 'link', 'code', 'text', 'tag'],\n  attributes: {\n    marker: { type: String, render: false },\n  },\n};\n\nexport const em: Schema = {\n  render: 'em',\n  children: ['strong', 's', 'link', 'code', 'text', 'tag'],\n  attributes: {\n    marker: { type: String, render: false },\n  },\n};\n\nexport const s: Schema = {\n  render: 's',\n  children: ['strong', 'em', 'link', 'code', 'text', 'tag'],\n};\n\nexport const inline: Schema = {\n  children: [\n    'strong',\n    'em',\n    's',\n    'code',\n    'text',\n    'tag',\n    'link',\n    'image',\n    'hardbreak',\n    'softbreak',\n    'comment',\n  ],\n};\n\nexport const link: Schema = {\n  render: 'a',\n  children: ['strong', 'em', 's', 'code', 'text', 'tag'],\n  attributes: {\n    href: { type: String, required: true },\n    title: { type: String },\n  },\n};\n\nexport const code: Schema = {\n  render: 'code',\n  attributes: {\n    content: { type: String, render: false, required: true },\n  },\n  transform(node, config) {\n    const attributes = node.transformAttributes(config);\n    return new Tag('code', attributes, [node.attributes.content]);\n  },\n};\n\nexport const text: Schema = {\n  attributes: {\n    content: { type: String, required: true },\n  },\n  transform(node) {\n    return node.attributes.content;\n  },\n};\n\nexport const hardbreak: Schema = {\n  render: 'br',\n};\n\nexport const softbreak: Schema = {\n  transform() {\n    return ' ';\n  },\n};\n\nexport const comment = {\n  attributes: {\n    content: { type: String, required: true },\n  },\n};\n\nexport const error = {};\nexport const node = {};\n", "import MarkdownIt from 'markdown-it';\nimport Tag from '../tag';\nimport type { RenderableTreeNodes } from '../types';\nconst { escapeHtml } = MarkdownIt().utils;\n\n// HTML elements that do not have a matching close tag\n// Defined in the HTML standard: https://html.spec.whatwg.org/#void-elements\nconst voidElements = new Set([\n  'area',\n  'base',\n  'br',\n  'col',\n  'embed',\n  'hr',\n  'img',\n  'input',\n  'link',\n  'meta',\n  'param',\n  'source',\n  'track',\n  'wbr',\n]);\n\nexport default function render(node: RenderableTreeNodes): string {\n  if (typeof node === 'string' || typeof node === 'number')\n    return escapeHtml(String(node));\n\n  if (Array.isArray(node)) return node.map(render).join('');\n\n  if (node === null || typeof node !== 'object' || !Tag.isTag(node)) return '';\n\n  const { name, attributes, children = [] } = node;\n\n  if (!name) return render(children);\n\n  let output = `<${name}`;\n  for (const [k, v] of Object.entries(attributes ?? {}))\n    output += ` ${k.toLowerCase()}=\"${escapeHtml(String(v))}\"`;\n  output += '>';\n\n  if (voidElements.has(name)) return output;\n\n  if (children.length) output += render(children);\n  output += `</${name}>`;\n\n  return output;\n}\n", "import Tag from '../../tag';\nimport { RenderableTreeNodes, Scalar } from '../../types';\n\nimport type { createElement, ComponentType, Fragment, ReactNode } from 'react';\n\ntype ReactShape = Readonly<{\n  createElement: typeof createElement;\n  Fragment: typeof Fragment;\n}>;\n\ntype Component = ComponentType<any>;\n\nfunction tagName(\n  name: string,\n  components: Record<string, Component> | ((string: string) => Component)\n): string | Component {\n  return typeof name !== 'string'\n    ? name // This can be an object, e.g. when React.forwardRef is used\n    : name[0] !== name[0].toUpperCase()\n    ? name\n    : components instanceof Function\n    ? components(name)\n    : components[name];\n}\n\nexport type RenderOpts = {\n  components?: Record<string, Component> | ((string: string) => Component);\n  resolveTagName?: typeof tagName;\n};\nexport default function dynamic(\n  node: RenderableTreeNodes,\n  React: ReactShape,\n  { components = {}, resolveTagName = tagName }: RenderOpts = {}\n) {\n  function deepRender(value: any): any {\n    if (value == null || typeof value !== 'object') return value;\n\n    if (Array.isArray(value)) return value.map((item) => deepRender(item));\n\n    if (value.$$mdtype === 'Tag') return render(value);\n\n    if (typeof value !== 'object') return value;\n\n    const output: Record<string, Scalar> = {};\n    for (const [k, v] of Object.entries(value)) output[k] = deepRender(v);\n    return output;\n  }\n\n  function render(node: RenderableTreeNodes): ReactNode {\n    if (Array.isArray(node))\n      return React.createElement(React.Fragment, null, ...node.map(render));\n\n    if (node === null || typeof node !== 'object' || !Tag.isTag(node))\n      return node;\n\n    const {\n      name,\n      attributes: { class: className, ...attrs } = {},\n      children = [],\n    } = node;\n\n    if (className) attrs.className = className;\n\n    return React.createElement(\n      resolveTagName(name, components),\n      Object.keys(attrs).length == 0 ? null : deepRender(attrs),\n      ...children.map(render)\n    );\n  }\n\n  return render(node);\n}\n", "import Tag from '../../tag';\nimport { RenderableTreeNode, RenderableTreeNodes } from '../../types';\n\nimport type { ComponentType } from 'react';\n\ntype Component = ComponentType<unknown>;\n\nfunction tagName(\n  name: string,\n  components: Record<string, Component> | ((string: string) => Component)\n): string | Component {\n  return typeof name !== 'string'\n    ? 'Fragment'\n    : name[0] !== name[0].toUpperCase()\n    ? name\n    : components instanceof Function\n    ? components(name)\n    : components[name];\n}\n\nfunction renderArray(children: RenderableTreeNode[]): string {\n  return children.map(render).join(', ');\n}\n\nfunction deepRender(value: any): any {\n  if (value == null || typeof value !== 'object') return JSON.stringify(value);\n\n  if (Array.isArray(value))\n    return `[${value.map((item) => deepRender(item)).join(', ')}]`;\n\n  if (value.$$mdtype === 'Tag') return render(value);\n\n  if (typeof value !== 'object') return JSON.stringify(value);\n\n  const object = Object.entries(value)\n    .map(([k, v]) => [JSON.stringify(k), deepRender(v)].join(': '))\n    .join(', ');\n\n  return `{${object}}`;\n}\n\nfunction render(node: RenderableTreeNodes): string {\n  if (Array.isArray(node))\n    return `React.createElement(React.Fragment, null, ${renderArray(node)})`;\n\n  if (node === null || typeof node !== 'object' || !Tag.isTag(node))\n    return JSON.stringify(node);\n\n  const {\n    name,\n    attributes: { class: className, ...attrs } = {},\n    children = [],\n  } = node;\n\n  if (className) attrs.className = className;\n\n  return `React.createElement(\n    tagName(${JSON.stringify(name)}, components),\n    ${Object.keys(attrs).length == 0 ? 'null' : deepRender(attrs)},\n    ${renderArray(children)})`;\n}\n\nexport default function reactStatic(\n  node: RenderableTreeNodes,\n  { resolveTagName = tagName }: { resolveTagName?: typeof tagName } = {}\n): string {\n  // the resolveTagName function *must* be called tagName\n  // throw an error if it does not\n  if (resolveTagName.name !== 'tagName') {\n    throw new Error('resolveTagName must be named tagName');\n  }\n  return `\n  (({components = {}} = {}) => {\n    ${resolveTagName}\n    return ${render(node)};\n  })\n`;\n}\n", "import html from './html';\nimport react from './react/react';\nimport reactStatic from './react/static';\n\nexport default { html, react, reactStatic };\n", "import type { Node, Config, Schema, ValidationError } from '../types';\n\nclass PartialFile {\n  validate(file: any, config: Config): ValidationError[] {\n    const { partials = {} } = config;\n    const partial = partials[file];\n\n    if (!partial)\n      return [\n        {\n          id: 'attribute-value-invalid',\n          level: 'error',\n          message: `Partial \\`${file}\\` not found. The 'file' attribute must be set in \\`config.partials\\``,\n        },\n      ];\n\n    return [];\n  }\n}\n\nexport const partial: Schema = {\n  inline: false,\n  selfClosing: true,\n  attributes: {\n    file: { type: PartialFile, render: false, required: true },\n    variables: { type: Object, render: false },\n  },\n  transform(node: Node, config: Config) {\n    const { partials = {} } = config;\n    const { file, variables } = node.attributes;\n    const partial: Node | Node[] = partials[file];\n\n    if (!partial) return null;\n\n    const scopedConfig = {\n      ...config,\n      variables: {\n        ...config.variables,\n        ...variables,\n        ['$$partial:filename']: file,\n      },\n    };\n\n    const transformChildren = (part: Node) =>\n      part.resolve(scopedConfig).transformChildren(scopedConfig);\n\n    return Array.isArray(partial)\n      ? partial.flatMap(transformChildren)\n      : transformChildren(partial);\n  },\n};\n", "import type { Schema } from '../types';\n\nexport const table: Schema = {\n  children: ['table'],\n  inline: false,\n};\n", "import type { Schema } from '../types';\n\nexport const slot: Schema = {\n  attributes: {\n    primary: { type: String, required: true },\n  },\n};\n", "import { tagIf, tagElse } from './conditional';\nimport { partial } from './partial';\nimport { table } from './table';\nimport { slot } from './slot';\n\nexport default {\n  else: tagElse,\n  if: tagIf,\n  partial,\n  slot,\n  table,\n};\n", "import MarkdownIt from 'markdown-it/lib';\nimport annotations from './plugins/annotations';\nimport frontmatter from './plugins/frontmatter';\nimport comments from './plugins/comments';\nimport type Token from 'markdown-it/lib/token';\n\nexport default class Tokenizer {\n  private parser: MarkdownIt;\n\n  constructor(\n    config: MarkdownIt.Options & {\n      allowIndentation?: boolean;\n      allowComments?: boolean;\n    } = {}\n  ) {\n    this.parser = new MarkdownIt(config);\n    this.parser.use(annotations, 'annotations', {});\n    this.parser.use(frontmatter, 'frontmatter', {});\n    this.parser.disable([\n      'lheading',\n      // Disable indented `code_block` support https://spec.commonmark.org/0.30/#indented-code-block\n      'code',\n    ]);\n\n    if (config.allowComments) this.parser.use(comments, 'comments', {});\n  }\n\n  tokenize(content: string): Token[] {\n    return this.parser.parse(content.toString(), {});\n  }\n}\n", "import { findTagEnd, parseTags } from '../../utils';\nimport { parse, SyntaxError } from '../../grammar/tag';\nimport Variable from '../../ast/variable';\nimport Function from '../../ast/function';\n\nimport type { AttributeValue } from '../../types';\nimport type MarkdownIt from 'markdown-it/lib';\nimport type StateCore from 'markdown-it/lib/rules_core/state_core';\nimport type StateInline from 'markdown-it/lib/rules_inline/state_inline';\nimport type StateBlock from 'markdown-it/lib/rules_block/state_block';\nimport type Token from 'markdown-it/lib/token';\n\nimport { OPEN, CLOSE } from '../../utils';\n\nfunction createToken(\n  state: StateBlock | StateInline,\n  content: string,\n  contentStart?: number\n): Token {\n  try {\n    const { type, meta, nesting = 0 } = parse(content, { Variable, Function });\n    const token = state.push(type, '', nesting);\n    token.info = content;\n    token.meta = meta;\n\n    if (!state.delimiters) {\n      state.delimiters = [];\n    }\n\n    return token;\n  } catch (error) {\n    if (!(error instanceof SyntaxError)) throw error;\n\n    const {\n      message,\n      location: { start, end },\n    } = error as SyntaxError;\n    const location = contentStart\n      ? {\n          start: { offset: start.offset + contentStart },\n          end: { offset: end.offset + contentStart },\n        }\n      : null;\n\n    const token = state.push('error', '', 0);\n    token.meta = { error: { message, location } };\n    return token;\n  }\n}\n\nfunction block(\n  state: StateBlock,\n  startLine: number,\n  endLine: number,\n  silent: boolean\n): boolean {\n  const start = state.bMarks[startLine] + state.tShift[startLine];\n  const finish = state.eMarks[startLine];\n\n  if (!state.src.startsWith(OPEN, start)) return false;\n\n  const tagEnd = findTagEnd(state.src, start);\n  const lastPossible = state.src.slice(0, finish).trim().length;\n\n  if (!tagEnd || tagEnd < lastPossible - CLOSE.length) return false;\n\n  const contentStart = start + OPEN.length;\n  const content = state.src.slice(contentStart, tagEnd).trim();\n  const lines = state.src\n    .slice(start, tagEnd + CLOSE.length)\n    .split('\\n').length;\n\n  if (content[0] === '$') return false;\n\n  if (silent) return true;\n\n  const token = createToken(state, content, contentStart);\n  token.map = [startLine, startLine + lines];\n  state.line += lines;\n  return true;\n}\n\nfunction inline(state: StateInline, silent: boolean): boolean {\n  if (!state.src.startsWith(OPEN, state.pos)) return false;\n\n  const tagEnd = findTagEnd(state.src, state.pos);\n  if (!tagEnd) return false;\n\n  const content = state.src.slice(state.pos + OPEN.length, tagEnd);\n  if (!silent) createToken(state, content.trim());\n\n  state.pos = tagEnd + CLOSE.length;\n  return true;\n}\n\nfunction core(state: StateCore) {\n  let token: Token;\n  for (token of state.tokens) {\n    if (token.type !== 'fence') continue;\n\n    if (token.info.includes(OPEN)) {\n      const start = token.info.indexOf(OPEN);\n      const end = findTagEnd(token.info, start);\n      const content = token.info.slice(start + OPEN.length, end);\n\n      try {\n        const { meta } = parse(content.trim(), { Variable, Function });\n        token.meta = meta;\n      } catch (error) {\n        if (!(error instanceof SyntaxError)) throw error;\n        if (!token.errors) token.errors = [];\n        token.errors.push({\n          id: 'fence-tag-error',\n          level: 'error',\n          message: `Syntax error in fence tag: ${\n            (error as SyntaxError).message\n          }`,\n        });\n      }\n    }\n\n    if (\n      token?.meta?.attributes?.find(\n        (attr: AttributeValue) => attr.name === 'process' && !attr.value\n      )\n    )\n      continue;\n\n    token.children = parseTags(token.content, token.map[0]);\n  }\n}\n\nexport default function plugin(md: MarkdownIt /* options */) {\n  md.block.ruler.before('paragraph', 'annotations', block, {\n    alt: ['paragraph', 'blockquote'],\n  });\n  md.inline.ruler.push('containers', inline);\n  md.core.ruler.push('annotations', core);\n}\n", "import type MarkdownIt from 'markdown-it/lib';\nimport type StateBlock from 'markdown-it/lib/rules_block/state_block';\n\nconst fence = '---';\n\nfunction getLine(state: StateBlock, n: number) {\n  return state.src.slice(state.bMarks[n], state.eMarks[n]).trim();\n}\n\nfunction findClose(state: StateBlock, endLine: number) {\n  for (let line = 1; line < endLine; line++)\n    if (getLine(state, line) === fence) return line;\n}\n\nfunction block(\n  state: StateBlock,\n  startLine: number,\n  endLine: number,\n  silent: boolean\n): boolean {\n  if (startLine != 0 || getLine(state, 0) != fence) return false;\n\n  const close = findClose(state, endLine);\n\n  if (!close) return false;\n  if (silent) return true;\n\n  const token = state.push('frontmatter', '', 0);\n  token.content = state.src.slice(state.eMarks[0], state.bMarks[close]).trim();\n  token.map = [0, close];\n  token.hidden = true;\n\n  state.line = close + 1;\n  return true;\n}\n\nexport default function plugin(md: MarkdownIt /* options */) {\n  md.block.ruler.before('hr', 'frontmatter', block);\n}\n", "import type MarkdownIt from 'markdown-it/lib';\nimport type StateBlock from 'markdown-it/lib/rules_block/state_block';\nimport type StateInline from 'markdown-it/lib/rules_inline/state_inline';\n\nconst OPEN = '<!--';\nconst CLOSE = '-->';\n\nfunction block(\n  state: StateBlock,\n  startLine: number,\n  endLine: number,\n  silent: boolean\n): boolean {\n  const start = state.bMarks[startLine] + state.tShift[startLine];\n  if (!state.src.startsWith(OPEN, start)) return false;\n\n  const close = state.src.indexOf(CLOSE, start);\n\n  if (close === -1) return false;\n  if (silent) return true;\n\n  const content = state.src.slice(start + OPEN.length, close);\n  const lines = content.split('\\n').length;\n  const token = state.push('comment', '', 0);\n  token.content = content.trim();\n  token.map = [startLine, startLine + lines];\n  state.line += lines;\n\n  return true;\n}\n\nfunction inline(state: StateInline, silent: boolean): boolean {\n  if (!state.src.startsWith(OPEN, state.pos)) return false;\n\n  const close = state.src.indexOf(CLOSE, state.pos);\n\n  if (close === -1) return false;\n  if (silent) return true;\n\n  const content = state.src.slice(state.pos + OPEN.length, close);\n  const token = state.push('comment', '', 0);\n  token.content = content.trim();\n  state.pos = close + CLOSE.length;\n\n  return true;\n}\n\nexport default function plugin(md: MarkdownIt) {\n  md.block.ruler.before('table', 'comment', block, { alt: ['paragraph'] });\n  md.inline.ruler.push('comment', inline);\n}\n", "import { globalAttributes } from './transformer';\nimport Ast from './ast/index';\nimport { isPromise } from './utils';\n\nimport type {\n  Location,\n  Node,\n  Function,\n  Config,\n  SchemaAttribute,\n  ValidateError,\n  ValidationError,\n  Value,\n} from './types';\n\nconst TypeMappings = {\n  String: String,\n  Number: Number,\n  Array: Array,\n  Object: Object,\n  Boolean: Boolean,\n} as const;\n\ntype TypeParam = NonNullable<SchemaAttribute['type']>;\n\nexport function validateType(\n  type: TypeParam,\n  value: Value,\n  config: Config,\n  key: string\n): boolean | ValidationError[] {\n  if (!type) return true;\n\n  if (Ast.isFunction(value) && config.validation?.validateFunctions) {\n    const schema = config.functions?.[value.name];\n    return !schema?.returns\n      ? true\n      : Array.isArray(schema.returns)\n      ? schema.returns.find((t) => t === type) !== undefined\n      : schema.returns === type;\n  }\n\n  if (Ast.isAst(value)) return true;\n\n  if (Array.isArray(type))\n    return type.some((t) => validateType(t, value, config, key));\n\n  if (typeof type === 'string') type = TypeMappings[type];\n\n  if (typeof type === 'function') {\n    const instance: any = new type();\n    if (instance.validate) {\n      return instance.validate(value, config, key);\n    }\n  }\n\n  return value != null && value.constructor === type;\n}\n\nfunction typeToString(type: TypeParam): string {\n  if (typeof type === 'string') return type;\n\n  if (Array.isArray(type)) return type.map(typeToString).join(' | ');\n\n  return type.name;\n}\n\nfunction validateFunction(fn: Function, config: Config): ValidationError[] {\n  const schema = config.functions?.[fn.name];\n  const errors: ValidationError[] = [];\n\n  if (!schema)\n    return [\n      {\n        id: 'function-undefined',\n        level: 'critical',\n        message: `Undefined function: '${fn.name}'`,\n      },\n    ];\n\n  if (schema.validate) errors.push(...schema.validate(fn, config));\n\n  if (schema.parameters) {\n    for (const [key, value] of Object.entries(fn.parameters)) {\n      const param = schema.parameters?.[key];\n\n      if (!param) {\n        errors.push({\n          id: 'parameter-undefined',\n          level: 'error',\n          message: `Invalid parameter: '${key}'`,\n        });\n\n        continue;\n      }\n\n      if (Ast.isAst(value) && !Ast.isFunction(value)) continue;\n\n      if (param.type) {\n        const valid = validateType(param.type, value, config, key);\n        if (valid === false) {\n          errors.push({\n            id: 'parameter-type-invalid',\n            level: 'error',\n            message: `Parameter '${key}' of '${\n              fn.name\n            }' must be type of '${typeToString(param.type)}'`,\n          });\n        } else if (Array.isArray(valid)) {\n          errors.push(...valid);\n        }\n      }\n    }\n  }\n\n  for (const [key, { required }] of Object.entries(schema.parameters ?? {}))\n    if (required && fn.parameters[key] === undefined)\n      errors.push({\n        id: 'parameter-missing-required',\n        level: 'error',\n        message: `Missing required parameter: '${key}'`,\n      });\n\n  return errors;\n}\n\nfunction displayMatches(matches: any[], n: number) {\n  if (matches.length <= n) return JSON.stringify(matches);\n  const items = matches.slice(0, n).map((item) => JSON.stringify(item));\n  return `[${items.join(',')}, ... ${matches.length - n} more]`;\n}\n\nexport default function validator(node: Node, config: Config) {\n  const schema = node.findSchema(config);\n  const errors: ValidationError[] = [...(node.errors || [])];\n\n  if (!schema) {\n    errors.push({\n      id: node.tag ? 'tag-undefined' : 'node-undefined',\n      level: 'critical',\n      message: node.tag\n        ? `Undefined tag: '${node.tag}'`\n        : `Undefined node: '${node.type}'`,\n    });\n\n    return errors;\n  }\n\n  if (schema.inline != undefined && node.inline !== schema.inline)\n    errors.push({\n      id: 'tag-placement-invalid',\n      level: 'critical',\n      message: `'${node.tag}' tag should be ${\n        schema.inline ? 'inline' : 'block'\n      }`,\n    });\n\n  if (schema.selfClosing && node.children.length > 0)\n    errors.push({\n      id: 'tag-selfclosing-has-children',\n      level: 'critical',\n      message: `'${node.tag}' tag should be self-closing`,\n    });\n\n  const attributes = {\n    ...globalAttributes,\n    ...schema.attributes,\n  };\n\n  for (const key of Object.keys(node.slots)) {\n    const slot = schema.slots?.[key];\n    if (!slot)\n      errors.push({\n        id: 'slot-undefined',\n        level: 'error',\n        message: `Invalid slot: '${key}'`,\n      });\n  }\n\n  for (let [key, value] of Object.entries(node.attributes)) {\n    const attrib = attributes[key];\n\n    if (!attrib) {\n      errors.push({\n        id: 'attribute-undefined',\n        level: 'error',\n        message: `Invalid attribute: '${key}'`,\n      });\n\n      continue;\n    }\n\n    let { type, matches, errorLevel } = attrib;\n\n    if (Ast.isAst(value)) {\n      if (Ast.isFunction(value) && config.validation?.validateFunctions)\n        errors.push(...validateFunction(value, config));\n      else if (Ast.isVariable(value) && config.variables) {\n        let missing = false;\n        let variables = config.variables;\n\n        for (const key of value.path) {\n          if (!Object.prototype.hasOwnProperty.call(variables, key)) {\n            missing = true;\n            break;\n          }\n          variables = variables[key];\n        }\n\n        if (missing) {\n          errors.push({\n            id: 'variable-undefined',\n            level: 'error',\n            message: `Undefined variable: '${value.path.join('.')}'`,\n          });\n        }\n      } else continue;\n    }\n\n    value = value as string;\n\n    if (type) {\n      const valid = validateType(type, value, config, key);\n      if (valid === false) {\n        errors.push({\n          id: 'attribute-type-invalid',\n          level: errorLevel || 'error',\n          message: `Attribute '${key}' must be type of '${typeToString(type)}'`,\n        });\n      }\n      if (Array.isArray(valid)) {\n        errors.push(...valid);\n      }\n    }\n\n    if (typeof matches === 'function') matches = matches(config);\n\n    if (Array.isArray(matches) && !matches.includes(value))\n      errors.push({\n        id: 'attribute-value-invalid',\n        level: errorLevel || 'error',\n        message: `Attribute '${key}' must match one of ${displayMatches(\n          matches,\n          8\n        )}. Got '${value}' instead.`,\n      });\n\n    if (matches instanceof RegExp && !matches.test(value))\n      errors.push({\n        id: 'attribute-value-invalid',\n        level: errorLevel || 'error',\n        message: `Attribute '${key}' must match ${matches}. Got '${value}' instead.`,\n      });\n\n    if (typeof attrib.validate === 'function') {\n      const attribErrors = attrib.validate(value, config, key);\n      if (Array.isArray(attribErrors)) errors.push(...attribErrors);\n    }\n  }\n\n  for (const [key, { required }] of Object.entries(attributes))\n    if (required && node.attributes[key] === undefined)\n      errors.push({\n        id: 'attribute-missing-required',\n        level: 'error',\n        message: `Missing required attribute: '${key}'`,\n      });\n\n  if (schema.slots)\n    for (const [key, { required }] of Object.entries(schema.slots))\n      if (required && node.slots[key] === undefined)\n        errors.push({\n          id: 'slot-missing-required',\n          level: 'error',\n          message: `Missing required slot: '${key}'`,\n        });\n\n  for (const { type } of node.children) {\n    if (schema.children && type !== 'error' && !schema.children.includes(type))\n      errors.push({\n        id: 'child-invalid',\n        level: 'warning',\n        message: `Can't nest '${type}' in '${node.tag || node.type}'`,\n      });\n  }\n\n  if (schema.validate) {\n    const schemaErrors = schema.validate(node, config);\n    if (isPromise(schemaErrors)) {\n      return schemaErrors.then((e) => errors.concat(e));\n    }\n\n    errors.push(...schemaErrors);\n  }\n\n  return errors;\n}\n\nexport function* walkWithParents(\n  node: Node,\n  parents: Node[] = []\n): Generator<[Node, Node[]]> {\n  yield [node, parents];\n  for (const child of [...Object.values(node.slots), ...node.children])\n    yield* walkWithParents(child, [...parents, node]);\n}\n\nfunction hasValidLocation(\n  error: ValidationError\n): error is ValidationError & { location: Location } {\n  const loc = error.location;\n  return (\n    loc != null &&\n    typeof loc.start?.line === 'number' &&\n    typeof loc.end?.line === 'number' &&\n    (loc.file === undefined || typeof loc.file === 'string')\n  );\n}\n\nfunction toValidateError(\n  node: { type: string; lines: number[]; location?: Location },\n  error: ValidationError\n): ValidateError {\n  if (hasValidLocation(error)) {\n    return {\n      type: node.type,\n      lines: [error.location.start.line, error.location.end.line],\n      location: { file: node.location?.file, ...error.location },\n      error,\n    };\n  }\n  return { type: node.type, lines: node.lines, location: node.location, error };\n}\n\nexport function validateTree(content: Node, config: Config) {\n  const output = [...walkWithParents(content)].map(([node, parents]) => {\n    const updatedConfig = {\n      ...config,\n      validation: { ...config.validation, parents },\n    };\n    const errors = validator(node, updatedConfig);\n\n    if (isPromise(errors)) {\n      return errors.then((e) => e.map((error) => toValidateError(node, error)));\n    }\n\n    return errors.map((error) => toValidateError(node, error));\n  });\n\n  if (output.some(isPromise)) {\n    return Promise.all(output).then((o) => o.flat());\n  }\n\n  return output.flat();\n}\n", "import Ast from './src/ast';\nimport Node from './src/ast/node';\nimport format from './src/formatter';\nimport functions from './src/functions';\nimport parser from './src/parser';\nimport * as nodes from './src/schema';\nimport renderers from './src/renderers';\nimport Tag from './src/tag';\nimport tags from './src/tags';\nimport { truthy } from './src/tags/conditional';\nimport Tokenizer from './src/tokenizer';\nimport transformer, { globalAttributes } from './src/transformer';\nimport transforms from './src/transforms';\nimport { parseTags } from './src/utils';\nimport validator, { validateTree } from './src/validator';\n\nimport type { ParserArgs } from './src/types';\nimport type Token from 'markdown-it/lib/token';\nimport type { Config, RenderableTreeNode, ValidateError } from './src/types';\n\nexport * from './src/types';\n\nconst tokenizer = new Tokenizer();\n\nfunction mergeConfig(config: Config = {}): Config {\n  return {\n    ...config,\n    tags: {\n      ...tags,\n      ...config.tags,\n    },\n    nodes: {\n      ...nodes,\n      ...config.nodes,\n    },\n    functions: {\n      ...functions,\n      ...config.functions,\n    },\n  };\n}\n\nexport function parse(\n  content: string | Token[],\n  args?: string | ParserArgs\n): Node {\n  if (typeof content === 'string') content = tokenizer.tokenize(content);\n  return parser(content, args);\n}\n\nexport function resolve<C extends Config = Config>(\n  content: Node,\n  config: C\n): Node;\nexport function resolve<C extends Config = Config>(\n  content: Node[],\n  config: C\n): Node[];\nexport function resolve<C extends Config = Config>(\n  content: any,\n  config: C\n): any {\n  if (Array.isArray(content))\n    return content.flatMap((child) => child.resolve(config));\n\n  return content.resolve(config);\n}\n\nexport function transform<C extends Config = Config>(\n  node: Node,\n  config?: C\n): RenderableTreeNode;\nexport function transform<C extends Config = Config>(\n  nodes: Node[],\n  config?: C\n): RenderableTreeNode[];\nexport function transform<C extends Config = Config>(\n  nodes: any,\n  options?: C\n): any {\n  const config = mergeConfig(options);\n  const content = resolve(nodes, config);\n\n  if (Array.isArray(content))\n    return content.flatMap((child) => child.transform(config));\n  return content.transform(config);\n}\n\nexport function validate<C extends Config = Config>(\n  node: Node,\n  options?: C\n): ValidateError[];\nexport function validate<C extends Config = Config>(\n  content: any,\n  options?: C\n): any {\n  const config = mergeConfig(options);\n  return validateTree(content, config);\n}\n\nexport function createElement(\n  name: string | { key?: string | number },\n  attributes = {},\n  ...children: any[]\n) {\n  return { name, attributes, children };\n}\n\nexport {\n  nodes,\n  tags,\n  functions,\n  globalAttributes,\n  transforms,\n  renderers,\n  Ast,\n  Node,\n  Tag,\n  Tokenizer,\n  parseTags,\n  transformer,\n  validator,\n  truthy,\n  format,\n};\n\nexport default class Markdoc {\n  static nodes = nodes;\n  static tags = tags;\n  static functions = functions;\n  static globalAttributes = globalAttributes;\n  static renderers = renderers;\n  static transforms = transforms;\n  static Ast = Ast;\n  static Tag = Tag;\n  static Tokenizer = Tokenizer;\n  static parseTags = parseTags;\n  static transformer = transformer;\n  static validator = validator;\n  static parse = parse;\n  static transform = transform;\n  static validate = validate;\n  static createElement = createElement;\n  static truthy = truthy;\n  static format = format;\n\n  config;\n  constructor(config: Config) {\n    this.config = config;\n  }\n\n  parse = parse;\n  resolve = (content: Parameters<typeof resolve>[0]) =>\n    resolve(content, this.config);\n  transform = (content: Parameters<typeof transform>[0]) =>\n    transform(content, this.config);\n  validate = (content: Parameters<typeof validate>[0]) =>\n    validate(content, this.config);\n}\n"],
  "mappings": "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",
  "names": ["s", "expected", "found", "item", "name", "Function", "Variable", "text", "location", "error", "require_entities", "code", "format", "require_regex", "require_regex", "require_regex", "require_regex", "code", "escapeHtml", "max", "max", "code", "max", "code", "escapeHtml", "list", "block", "inline", "text", "text", "max", "item", "getLine", "max", "table", "code", "fence", "max", "blockquote", "max", "hr", "max", "max", "list", "max", "comment", "max", "heading", "max", "max", "paragraph", "s", "max", "code", "text", "max", "max", "max", "max", "max", "link", "code", "max", "image", "code", "max", "max", "max", "code", "max", "max", "max", "max", "isFunction", "text", "list", "error", "MarkdownIt", "list", "plugin", "item", "Function", "s", "Function", "error", "text", "node", "slot", "node", "slot", "Function", "text", "s", "n", "table", "node", "nodes", "node", "document", "table", "thead", "tbody", "node", "error", "transform", "node", "MarkdownIt", "node", "node", "deepRender", "item", "render", "tagName", "render", "item", "node", "partial", "node", "table", "table", "import_tag", "Function", "error", "inline", "fence", "block", "plugin", "OPEN", "CLOSE", "block", "inline", "plugin", "MarkdownIt", "plugin", "item", "node", "slot", "key", "error", "parse", "resolve", "transform", "parse", "resolve", "transform"]
}
