var V = {}, M = {};
function Lr(e, r, t) {
  if (t === void 0 && (t = Array.prototype), e && typeof t.find == "function")
    return t.find.call(e, r);
  for (var n = 0; n < e.length; n++)
    if (Object.prototype.hasOwnProperty.call(e, n)) {
      var a = e[n];
      if (r.call(void 0, a, n, e))
        return a;
    }
}
function De(e, r) {
  return r === void 0 && (r = Object), r && typeof r.freeze == "function" ? r.freeze(e) : e;
}
function Or(e, r) {
  if (e === null || typeof e != "object")
    throw new TypeError("target is not an object");
  for (var t in r)
    Object.prototype.hasOwnProperty.call(r, t) && (e[t] = r[t]);
  return e;
}
var We = De({
  /**
   * `text/html`, the only mime type that triggers treating an XML document as HTML.
   *
   * @see DOMParser.SupportedType.isHTML
   * @see https://www.iana.org/assignments/media-types/text/html IANA MimeType registration
   * @see https://en.wikipedia.org/wiki/HTML Wikipedia
   * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString MDN
   * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-domparser-parsefromstring WHATWG HTML Spec
   */
  HTML: "text/html",
  /**
   * Helper method to check a mime type if it indicates an HTML document
   *
   * @param {string} [value]
   * @returns {boolean}
   *
   * @see https://www.iana.org/assignments/media-types/text/html IANA MimeType registration
   * @see https://en.wikipedia.org/wiki/HTML Wikipedia
   * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString MDN
   * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-domparser-parsefromstring 	 */
  isHTML: function(e) {
    return e === We.HTML;
  },
  /**
   * `application/xml`, the standard mime type for XML documents.
   *
   * @see https://www.iana.org/assignments/media-types/application/xml IANA MimeType registration
   * @see https://tools.ietf.org/html/rfc7303#section-9.1 RFC 7303
   * @see https://en.wikipedia.org/wiki/XML_and_MIME Wikipedia
   */
  XML_APPLICATION: "application/xml",
  /**
   * `text/html`, an alias for `application/xml`.
   *
   * @see https://tools.ietf.org/html/rfc7303#section-9.2 RFC 7303
   * @see https://www.iana.org/assignments/media-types/text/xml IANA MimeType registration
   * @see https://en.wikipedia.org/wiki/XML_and_MIME Wikipedia
   */
  XML_TEXT: "text/xml",
  /**
   * `application/xhtml+xml`, indicates an XML document that has the default HTML namespace,
   * but is parsed as an XML document.
   *
   * @see https://www.iana.org/assignments/media-types/application/xhtml+xml IANA MimeType registration
   * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocument WHATWG DOM Spec
   * @see https://en.wikipedia.org/wiki/XHTML Wikipedia
   */
  XML_XHTML_APPLICATION: "application/xhtml+xml",
  /**
   * `image/svg+xml`,
   *
   * @see https://www.iana.org/assignments/media-types/image/svg+xml IANA MimeType registration
   * @see https://www.w3.org/TR/SVG11/ W3C SVG 1.1
   * @see https://en.wikipedia.org/wiki/Scalable_Vector_Graphics Wikipedia
   */
  XML_SVG_IMAGE: "image/svg+xml"
}), Ke = De({
  /**
   * The XHTML namespace.
   *
   * @see http://www.w3.org/1999/xhtml
   */
  HTML: "http://www.w3.org/1999/xhtml",
  /**
   * Checks if `uri` equals `NAMESPACE.HTML`.
   *
   * @param {string} [uri]
   *
   * @see NAMESPACE.HTML
   */
  isHTML: function(e) {
    return e === Ke.HTML;
  },
  /**
   * The SVG namespace.
   *
   * @see http://www.w3.org/2000/svg
   */
  SVG: "http://www.w3.org/2000/svg",
  /**
   * The `xml:` namespace.
   *
   * @see http://www.w3.org/XML/1998/namespace
   */
  XML: "http://www.w3.org/XML/1998/namespace",
  /**
   * The `xmlns:` namespace
   *
   * @see https://www.w3.org/2000/xmlns/
   */
  XMLNS: "http://www.w3.org/2000/xmlns/"
});
M.assign = Or;
M.find = Lr;
M.freeze = De;
M.MIME_TYPE = We;
M.NAMESPACE = Ke;
var Qe = M, R = Qe.find, Q = Qe.NAMESPACE;
function Rr(e) {
  return e !== "";
}
function Cr(e) {
  return e ? e.split(/[\t\n\f\r ]+/).filter(Rr) : [];
}
function Ir(e, r) {
  return e.hasOwnProperty(r) || (e[r] = !0), e;
}
function Ue(e) {
  if (!e) return [];
  var r = Cr(e);
  return Object.keys(r.reduce(Ir, {}));
}
function kr(e) {
  return function(r) {
    return e && e.indexOf(r) !== -1;
  };
}
function ne(e, r) {
  for (var t in e)
    Object.prototype.hasOwnProperty.call(e, t) && (r[t] = e[t]);
}
function T(e, r) {
  var t = e.prototype;
  if (!(t instanceof r)) {
    let n = function() {
    };
    n.prototype = r.prototype, n = new n(), ne(t, n), e.prototype = t = n;
  }
  t.constructor != e && (typeof e != "function" && console.error("unknown Class:" + e), t.constructor = e);
}
var q = {}, L = q.ELEMENT_NODE = 1, X = q.ATTRIBUTE_NODE = 2, ce = q.TEXT_NODE = 3, er = q.CDATA_SECTION_NODE = 4, rr = q.ENTITY_REFERENCE_NODE = 5, _r = q.ENTITY_NODE = 6, tr = q.PROCESSING_INSTRUCTION_NODE = 7, nr = q.COMMENT_NODE = 8, ar = q.DOCUMENT_NODE = 9, or = q.DOCUMENT_TYPE_NODE = 10, k = q.DOCUMENT_FRAGMENT_NODE = 11, Mr = q.NOTATION_NODE = 12, y = {}, N = {};
y.INDEX_SIZE_ERR = (N[1] = "Index size error", 1);
y.DOMSTRING_SIZE_ERR = (N[2] = "DOMString size error", 2);
var D = y.HIERARCHY_REQUEST_ERR = (N[3] = "Hierarchy request error", 3);
y.WRONG_DOCUMENT_ERR = (N[4] = "Wrong document", 4);
y.INVALID_CHARACTER_ERR = (N[5] = "Invalid character", 5);
y.NO_DATA_ALLOWED_ERR = (N[6] = "No data allowed", 6);
y.NO_MODIFICATION_ALLOWED_ERR = (N[7] = "No modification allowed", 7);
var ir = y.NOT_FOUND_ERR = (N[8] = "Not found", 8);
y.NOT_SUPPORTED_ERR = (N[9] = "Not supported", 9);
var Pe = y.INUSE_ATTRIBUTE_ERR = (N[10] = "Attribute in use", 10);
y.INVALID_STATE_ERR = (N[11] = "Invalid state", 11);
y.SYNTAX_ERR = (N[12] = "Syntax error", 12);
y.INVALID_MODIFICATION_ERR = (N[13] = "Invalid modification", 13);
y.NAMESPACE_ERR = (N[14] = "Invalid namespace", 14);
y.INVALID_ACCESS_ERR = (N[15] = "Invalid access", 15);
function b(e, r) {
  if (r instanceof Error)
    var t = r;
  else
    t = this, Error.call(this, N[e]), this.message = N[e], Error.captureStackTrace && Error.captureStackTrace(this, b);
  return t.code = e, r && (this.message = this.message + ": " + r), t;
}
b.prototype = Error.prototype;
ne(y, b);
function I() {
}
I.prototype = {
  /**
   * The number of nodes in the list. The range of valid child node indices is 0 to length-1 inclusive.
   * @standard level1
   */
  length: 0,
  /**
   * Returns the indexth item in the collection. If index is greater than or equal to the number of nodes in the list, this returns null.
   * @standard level1
   * @param index  unsigned long
   *   Index into the collection.
   * @return Node
   * 	The node at the indexth position in the NodeList, or null if that is not a valid index.
   */
  item: function(e) {
    return e >= 0 && e < this.length ? this[e] : null;
  },
  toString: function(e, r) {
    for (var t = [], n = 0; n < this.length; n++)
      F(this[n], t, e, r);
    return t.join("");
  },
  /**
   * @private
   * @param {function (Node):boolean} predicate
   * @returns {Node[]}
   */
  filter: function(e) {
    return Array.prototype.filter.call(this, e);
  },
  /**
   * @private
   * @param {Node} item
   * @returns {number}
   */
  indexOf: function(e) {
    return Array.prototype.indexOf.call(this, e);
  }
};
function $(e, r) {
  this._node = e, this._refresh = r, Te(this);
}
function Te(e) {
  var r = e._node._inc || e._node.ownerDocument._inc;
  if (e._inc !== r) {
    var t = e._refresh(e._node);
    if (vr(e, "length", t.length), !e.$$length || t.length < e.$$length)
      for (var n = t.length; n in e; n++)
        Object.prototype.hasOwnProperty.call(e, n) && delete e[n];
    ne(t, e), e._inc = r;
  }
}
$.prototype.item = function(e) {
  return Te(this), this[e] || null;
};
T($, I);
function ue() {
}
function sr(e, r) {
  for (var t = e.length; t--; )
    if (e[t] === r)
      return t;
}
function Ve(e, r, t, n) {
  if (n ? r[sr(r, n)] = t : r[r.length++] = t, e) {
    t.ownerElement = e;
    var a = e.ownerDocument;
    a && (n && ur(a, e, n), Ur(a, e, t));
  }
}
function Be(e, r, t) {
  var n = sr(r, t);
  if (n >= 0) {
    for (var a = r.length - 1; n < a; )
      r[n] = r[++n];
    if (r.length = a, e) {
      var o = e.ownerDocument;
      o && (ur(o, e, t), t.ownerElement = null);
    }
  } else
    throw new b(ir, new Error(e.tagName + "@" + t));
}
ue.prototype = {
  length: 0,
  item: I.prototype.item,
  getNamedItem: function(e) {
    for (var r = this.length; r--; ) {
      var t = this[r];
      if (t.nodeName == e)
        return t;
    }
  },
  setNamedItem: function(e) {
    var r = e.ownerElement;
    if (r && r != this._ownerElement)
      throw new b(Pe);
    var t = this.getNamedItem(e.nodeName);
    return Ve(this._ownerElement, this, e, t), t;
  },
  /* returns Node */
  setNamedItemNS: function(e) {
    var r = e.ownerElement, t;
    if (r && r != this._ownerElement)
      throw new b(Pe);
    return t = this.getNamedItemNS(e.namespaceURI, e.localName), Ve(this._ownerElement, this, e, t), t;
  },
  /* returns Node */
  removeNamedItem: function(e) {
    var r = this.getNamedItem(e);
    return Be(this._ownerElement, this, r), r;
  },
  // raises: NOT_FOUND_ERR,NO_MODIFICATION_ALLOWED_ERR
  //for level2
  removeNamedItemNS: function(e, r) {
    var t = this.getNamedItemNS(e, r);
    return Be(this._ownerElement, this, t), t;
  },
  getNamedItemNS: function(e, r) {
    for (var t = this.length; t--; ) {
      var n = this[t];
      if (n.localName == r && n.namespaceURI == e)
        return n;
    }
    return null;
  }
};
function lr() {
}
lr.prototype = {
  /**
   * The DOMImplementation.hasFeature() method returns a Boolean flag indicating if a given feature is supported.
   * The different implementations fairly diverged in what kind of features were reported.
   * The latest version of the spec settled to force this method to always return true, where the functionality was accurate and in use.
   *
   * @deprecated It is deprecated and modern browsers return true in all cases.
   *
   * @param {string} feature
   * @param {string} [version]
   * @returns {boolean} always true
   *
   * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/hasFeature MDN
   * @see https://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-5CED94D7 DOM Level 1 Core
   * @see https://dom.spec.whatwg.org/#dom-domimplementation-hasfeature DOM Living Standard
   */
  hasFeature: function(e, r) {
    return !0;
  },
  /**
   * Creates an XML Document object of the specified type with its document element.
   *
   * __It behaves slightly different from the description in the living standard__:
   * - There is no interface/class `XMLDocument`, it returns a `Document` instance.
   * - `contentType`, `encoding`, `mode`, `origin`, `url` fields are currently not declared.
   * - this implementation is not validating names or qualified names
   *   (when parsing XML strings, the SAX parser takes care of that)
   *
   * @param {string|null} namespaceURI
   * @param {string} qualifiedName
   * @param {DocumentType=null} doctype
   * @returns {Document}
   *
   * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/createDocument MDN
   * @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#Level-2-Core-DOM-createDocument DOM Level 2 Core (initial)
   * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocument  DOM Level 2 Core
   *
   * @see https://dom.spec.whatwg.org/#validate-and-extract DOM: Validate and extract
   * @see https://www.w3.org/TR/xml/#NT-NameStartChar XML Spec: Names
   * @see https://www.w3.org/TR/xml-names/#ns-qualnames XML Namespaces: Qualified names
   */
  createDocument: function(e, r, t) {
    var n = new ae();
    if (n.implementation = this, n.childNodes = new I(), n.doctype = t || null, t && n.appendChild(t), r) {
      var a = n.createElementNS(e, r);
      n.appendChild(a);
    }
    return n;
  },
  /**
   * Returns a doctype, with the given `qualifiedName`, `publicId`, and `systemId`.
   *
   * __This behavior is slightly different from the in the specs__:
   * - this implementation is not validating names or qualified names
   *   (when parsing XML strings, the SAX parser takes care of that)
   *
   * @param {string} qualifiedName
   * @param {string} [publicId]
   * @param {string} [systemId]
   * @returns {DocumentType} which can either be used with `DOMImplementation.createDocument` upon document creation
   * 				  or can be put into the document via methods like `Node.insertBefore()` or `Node.replaceChild()`
   *
   * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/createDocumentType MDN
   * @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#Level-2-Core-DOM-createDocType DOM Level 2 Core
   * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocumenttype DOM Living Standard
   *
   * @see https://dom.spec.whatwg.org/#validate-and-extract DOM: Validate and extract
   * @see https://www.w3.org/TR/xml/#NT-NameStartChar XML Spec: Names
   * @see https://www.w3.org/TR/xml-names/#ns-qualnames XML Namespaces: Qualified names
   */
  createDocumentType: function(e, r, t) {
    var n = new fe();
    return n.name = e, n.nodeName = e, n.publicId = r || "", n.systemId = t || "", n;
  }
};
function d() {
}
d.prototype = {
  firstChild: null,
  lastChild: null,
  previousSibling: null,
  nextSibling: null,
  attributes: null,
  parentNode: null,
  childNodes: null,
  ownerDocument: null,
  nodeValue: null,
  namespaceURI: null,
  prefix: null,
  localName: null,
  // Modified in DOM Level 2:
  insertBefore: function(e, r) {
    return pe(this, e, r);
  },
  replaceChild: function(e, r) {
    pe(this, e, r, dr), r && this.removeChild(r);
  },
  removeChild: function(e) {
    return pr(this, e);
  },
  appendChild: function(e) {
    return this.insertBefore(e, null);
  },
  hasChildNodes: function() {
    return this.firstChild != null;
  },
  cloneNode: function(e) {
    return Ne(this.ownerDocument || this, this, e);
  },
  // Modified in DOM Level 2:
  normalize: function() {
    for (var e = this.firstChild; e; ) {
      var r = e.nextSibling;
      r && r.nodeType == ce && e.nodeType == ce ? (this.removeChild(r), e.appendData(r.data)) : (e.normalize(), e = r);
    }
  },
  // Introduced in DOM Level 2:
  isSupported: function(e, r) {
    return this.ownerDocument.implementation.hasFeature(e, r);
  },
  // Introduced in DOM Level 2:
  hasAttributes: function() {
    return this.attributes.length > 0;
  },
  /**
   * Look up the prefix associated to the given namespace URI, starting from this node.
   * **The default namespace declarations are ignored by this method.**
   * See Namespace Prefix Lookup for details on the algorithm used by this method.
   *
   * _Note: The implementation seems to be incomplete when compared to the algorithm described in the specs._
   *
   * @param {string | null} namespaceURI
   * @returns {string | null}
   * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-lookupNamespacePrefix
   * @see https://www.w3.org/TR/DOM-Level-3-Core/namespaces-algorithms.html#lookupNamespacePrefixAlgo
   * @see https://dom.spec.whatwg.org/#dom-node-lookupprefix
   * @see https://github.com/xmldom/xmldom/issues/322
   */
  lookupPrefix: function(e) {
    for (var r = this; r; ) {
      var t = r._nsMap;
      if (t) {
        for (var n in t)
          if (Object.prototype.hasOwnProperty.call(t, n) && t[n] === e)
            return n;
      }
      r = r.nodeType == X ? r.ownerDocument : r.parentNode;
    }
    return null;
  },
  // Introduced in DOM Level 3:
  lookupNamespaceURI: function(e) {
    for (var r = this; r; ) {
      var t = r._nsMap;
      if (t && Object.prototype.hasOwnProperty.call(t, e))
        return t[e];
      r = r.nodeType == X ? r.ownerDocument : r.parentNode;
    }
    return null;
  },
  // Introduced in DOM Level 3:
  isDefaultNamespace: function(e) {
    var r = this.lookupPrefix(e);
    return r == null;
  }
};
function cr(e) {
  return e == "<" && "&lt;" || e == ">" && "&gt;" || e == "&" && "&amp;" || e == '"' && "&quot;" || "&#" + e.charCodeAt() + ";";
}
ne(q, d);
ne(q, d.prototype);
function ee(e, r) {
  if (r(e))
    return !0;
  if (e = e.firstChild)
    do
      if (ee(e, r))
        return !0;
    while (e = e.nextSibling);
}
function ae() {
  this.ownerDocument = this;
}
function Ur(e, r, t) {
  e && e._inc++;
  var n = t.namespaceURI;
  n === Q.XMLNS && (r._nsMap[t.prefix ? t.localName : ""] = t.value);
}
function ur(e, r, t, n) {
  e && e._inc++;
  var a = t.namespaceURI;
  a === Q.XMLNS && delete r._nsMap[t.prefix ? t.localName : ""];
}
function qe(e, r, t) {
  if (e && e._inc) {
    e._inc++;
    var n = r.childNodes;
    if (t)
      n[n.length++] = t;
    else {
      for (var a = r.firstChild, o = 0; a; )
        n[o++] = a, a = a.nextSibling;
      n.length = o, delete n[n.length];
    }
  }
}
function pr(e, r) {
  var t = r.previousSibling, n = r.nextSibling;
  return t ? t.nextSibling = n : e.firstChild = n, n ? n.previousSibling = t : e.lastChild = t, r.parentNode = null, r.previousSibling = null, r.nextSibling = null, qe(e.ownerDocument, e), r;
}
function Pr(e) {
  return e && (e.nodeType === d.DOCUMENT_NODE || e.nodeType === d.DOCUMENT_FRAGMENT_NODE || e.nodeType === d.ELEMENT_NODE);
}
function Vr(e) {
  return e && (C(e) || xe(e) || _(e) || e.nodeType === d.DOCUMENT_FRAGMENT_NODE || e.nodeType === d.COMMENT_NODE || e.nodeType === d.PROCESSING_INSTRUCTION_NODE);
}
function _(e) {
  return e && e.nodeType === d.DOCUMENT_TYPE_NODE;
}
function C(e) {
  return e && e.nodeType === d.ELEMENT_NODE;
}
function xe(e) {
  return e && e.nodeType === d.TEXT_NODE;
}
function He(e, r) {
  var t = e.childNodes || [];
  if (R(t, C) || _(r))
    return !1;
  var n = R(t, _);
  return !(r && n && t.indexOf(n) > t.indexOf(r));
}
function Ge(e, r) {
  var t = e.childNodes || [];
  function n(o) {
    return C(o) && o !== r;
  }
  if (R(t, n))
    return !1;
  var a = R(t, _);
  return !(r && a && t.indexOf(a) > t.indexOf(r));
}
function Br(e, r, t) {
  if (!Pr(e))
    throw new b(D, "Unexpected parent node type " + e.nodeType);
  if (t && t.parentNode !== e)
    throw new b(ir, "child not in parent");
  if (
    // 4. If `node` is not a DocumentFragment, DocumentType, Element, or CharacterData node, then throw a "HierarchyRequestError" DOMException.
    !Vr(r) || // 5. If either `node` is a Text node and `parent` is a document,
    // the sax parser currently adds top level text nodes, this will be fixed in 0.9.0
    // || (node.nodeType === Node.TEXT_NODE && parent.nodeType === Node.DOCUMENT_NODE)
    // or `node` is a doctype and `parent` is not a document, then throw a "HierarchyRequestError" DOMException.
    _(r) && e.nodeType !== d.DOCUMENT_NODE
  )
    throw new b(
      D,
      "Unexpected node type " + r.nodeType + " for parent node type " + e.nodeType
    );
}
function Hr(e, r, t) {
  var n = e.childNodes || [], a = r.childNodes || [];
  if (r.nodeType === d.DOCUMENT_FRAGMENT_NODE) {
    var o = a.filter(C);
    if (o.length > 1 || R(a, xe))
      throw new b(D, "More than one element or text in fragment");
    if (o.length === 1 && !He(e, t))
      throw new b(D, "Element in fragment can not be inserted before doctype");
  }
  if (C(r) && !He(e, t))
    throw new b(D, "Only one element can be added and only after doctype");
  if (_(r)) {
    if (R(n, _))
      throw new b(D, "Only one doctype is allowed");
    var i = R(n, C);
    if (t && n.indexOf(i) < n.indexOf(t))
      throw new b(D, "Doctype can only be inserted before an element");
    if (!t && i)
      throw new b(D, "Doctype can not be appended since element is present");
  }
}
function dr(e, r, t) {
  var n = e.childNodes || [], a = r.childNodes || [];
  if (r.nodeType === d.DOCUMENT_FRAGMENT_NODE) {
    var o = a.filter(C);
    if (o.length > 1 || R(a, xe))
      throw new b(D, "More than one element or text in fragment");
    if (o.length === 1 && !Ge(e, t))
      throw new b(D, "Element in fragment can not be inserted before doctype");
  }
  if (C(r) && !Ge(e, t))
    throw new b(D, "Only one element can be added and only after doctype");
  if (_(r)) {
    if (R(n, function(s) {
      return _(s) && s !== t;
    }))
      throw new b(D, "Only one doctype is allowed");
    var i = R(n, C);
    if (t && n.indexOf(i) < n.indexOf(t))
      throw new b(D, "Doctype can only be inserted before an element");
  }
}
function pe(e, r, t, n) {
  Br(e, r, t), e.nodeType === d.DOCUMENT_NODE && (n || Hr)(e, r, t);
  var a = r.parentNode;
  if (a && a.removeChild(r), r.nodeType === k) {
    var o = r.firstChild;
    if (o == null)
      return r;
    var i = r.lastChild;
  } else
    o = i = r;
  var s = t ? t.previousSibling : e.lastChild;
  o.previousSibling = s, i.nextSibling = t, s ? s.nextSibling = o : e.firstChild = o, t == null ? e.lastChild = i : t.previousSibling = i;
  do {
    o.parentNode = e;
    var u = e.ownerDocument || e;
    re(o, u);
  } while (o !== i && (o = o.nextSibling));
  return qe(e.ownerDocument || e, e), r.nodeType == k && (r.firstChild = r.lastChild = null), r;
}
function re(e, r) {
  if (e.ownerDocument !== r) {
    if (e.ownerDocument = r, e.nodeType === L && e.attributes)
      for (var t = 0; t < e.attributes.length; t++) {
        var n = e.attributes.item(t);
        n && (n.ownerDocument = r);
      }
    for (var a = e.firstChild; a; )
      re(a, r), a = a.nextSibling;
  }
}
function Gr(e, r) {
  r.parentNode && r.parentNode.removeChild(r), r.parentNode = e, r.previousSibling = e.lastChild, r.nextSibling = null, r.previousSibling ? r.previousSibling.nextSibling = r : e.firstChild = r, e.lastChild = r, qe(e.ownerDocument, e, r);
  var t = e.ownerDocument || e;
  return re(r, t), r;
}
ae.prototype = {
  //implementation : null,
  nodeName: "#document",
  nodeType: ar,
  /**
   * The DocumentType node of the document.
   *
   * @readonly
   * @type DocumentType
   */
  doctype: null,
  documentElement: null,
  _inc: 1,
  insertBefore: function(e, r) {
    if (e.nodeType == k) {
      for (var t = e.firstChild; t; ) {
        var n = t.nextSibling;
        this.insertBefore(t, r), t = n;
      }
      return e;
    }
    return pe(this, e, r), re(e, this), this.documentElement === null && e.nodeType === L && (this.documentElement = e), e;
  },
  removeChild: function(e) {
    return this.documentElement == e && (this.documentElement = null), pr(this, e);
  },
  replaceChild: function(e, r) {
    pe(this, e, r, dr), re(e, this), r && this.removeChild(r), C(e) && (this.documentElement = e);
  },
  // Introduced in DOM Level 2:
  importNode: function(e, r) {
    return br(this, e, r);
  },
  // Introduced in DOM Level 2:
  getElementById: function(e) {
    var r = null;
    return ee(this.documentElement, function(t) {
      if (t.nodeType == L && t.getAttribute("id") == e)
        return r = t, !0;
    }), r;
  },
  /**
   * The `getElementsByClassName` method of `Document` interface returns an array-like object
   * of all child elements which have **all** of the given class name(s).
   *
   * Returns an empty list if `classeNames` is an empty string or only contains HTML white space characters.
   *
   *
   * Warning: This is a live LiveNodeList.
   * Changes in the DOM will reflect in the array as the changes occur.
   * If an element selected by this array no longer qualifies for the selector,
   * it will automatically be removed. Be aware of this for iteration purposes.
   *
   * @param {string} classNames is a string representing the class name(s) to match; multiple class names are separated by (ASCII-)whitespace
   *
   * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/getElementsByClassName
   * @see https://dom.spec.whatwg.org/#concept-getelementsbyclassname
   */
  getElementsByClassName: function(e) {
    var r = Ue(e);
    return new $(this, function(t) {
      var n = [];
      return r.length > 0 && ee(t.documentElement, function(a) {
        if (a !== t && a.nodeType === L) {
          var o = a.getAttribute("class");
          if (o) {
            var i = e === o;
            if (!i) {
              var s = Ue(o);
              i = r.every(kr(s));
            }
            i && n.push(a);
          }
        }
      }), n;
    });
  },
  //document factory method:
  createElement: function(e) {
    var r = new B();
    r.ownerDocument = this, r.nodeName = e, r.tagName = e, r.localName = e, r.childNodes = new I();
    var t = r.attributes = new ue();
    return t._ownerElement = r, r;
  },
  createDocumentFragment: function() {
    var e = new he();
    return e.ownerDocument = this, e.childNodes = new I(), e;
  },
  createTextNode: function(e) {
    var r = new Se();
    return r.ownerDocument = this, r.appendData(e), r;
  },
  createComment: function(e) {
    var r = new Ae();
    return r.ownerDocument = this, r.appendData(e), r;
  },
  createCDATASection: function(e) {
    var r = new Le();
    return r.ownerDocument = this, r.appendData(e), r;
  },
  createProcessingInstruction: function(e, r) {
    var t = new Re();
    return t.ownerDocument = this, t.tagName = t.nodeName = t.target = e, t.nodeValue = t.data = r, t;
  },
  createAttribute: function(e) {
    var r = new de();
    return r.ownerDocument = this, r.name = e, r.nodeName = e, r.localName = e, r.specified = !0, r;
  },
  createEntityReference: function(e) {
    var r = new Oe();
    return r.ownerDocument = this, r.nodeName = e, r;
  },
  // Introduced in DOM Level 2:
  createElementNS: function(e, r) {
    var t = new B(), n = r.split(":"), a = t.attributes = new ue();
    return t.childNodes = new I(), t.ownerDocument = this, t.nodeName = r, t.tagName = r, t.namespaceURI = e, n.length == 2 ? (t.prefix = n[0], t.localName = n[1]) : t.localName = r, a._ownerElement = t, t;
  },
  // Introduced in DOM Level 2:
  createAttributeNS: function(e, r) {
    var t = new de(), n = r.split(":");
    return t.ownerDocument = this, t.nodeName = r, t.name = r, t.namespaceURI = e, t.specified = !0, n.length == 2 ? (t.prefix = n[0], t.localName = n[1]) : t.localName = r, t;
  }
};
T(ae, d);
function B() {
  this._nsMap = {};
}
B.prototype = {
  nodeType: L,
  hasAttribute: function(e) {
    return this.getAttributeNode(e) != null;
  },
  getAttribute: function(e) {
    var r = this.getAttributeNode(e);
    return r && r.value || "";
  },
  getAttributeNode: function(e) {
    return this.attributes.getNamedItem(e);
  },
  setAttribute: function(e, r) {
    var t = this.ownerDocument.createAttribute(e);
    t.value = t.nodeValue = "" + r, this.setAttributeNode(t);
  },
  removeAttribute: function(e) {
    var r = this.getAttributeNode(e);
    r && this.removeAttributeNode(r);
  },
  //four real opeartion method
  appendChild: function(e) {
    return e.nodeType === k ? this.insertBefore(e, null) : Gr(this, e);
  },
  setAttributeNode: function(e) {
    return this.attributes.setNamedItem(e);
  },
  setAttributeNodeNS: function(e) {
    return this.attributes.setNamedItemNS(e);
  },
  removeAttributeNode: function(e) {
    return this.attributes.removeNamedItem(e.nodeName);
  },
  //get real attribute name,and remove it by removeAttributeNode
  removeAttributeNS: function(e, r) {
    var t = this.getAttributeNodeNS(e, r);
    t && this.removeAttributeNode(t);
  },
  hasAttributeNS: function(e, r) {
    return this.getAttributeNodeNS(e, r) != null;
  },
  getAttributeNS: function(e, r) {
    var t = this.getAttributeNodeNS(e, r);
    return t && t.value || "";
  },
  setAttributeNS: function(e, r, t) {
    var n = this.ownerDocument.createAttributeNS(e, r);
    n.value = n.nodeValue = "" + t, this.setAttributeNode(n);
  },
  getAttributeNodeNS: function(e, r) {
    return this.attributes.getNamedItemNS(e, r);
  },
  getElementsByTagName: function(e) {
    return new $(this, function(r) {
      var t = [];
      return ee(r, function(n) {
        n !== r && n.nodeType == L && (e === "*" || n.tagName == e) && t.push(n);
      }), t;
    });
  },
  getElementsByTagNameNS: function(e, r) {
    return new $(this, function(t) {
      var n = [];
      return ee(t, function(a) {
        a !== t && a.nodeType === L && (e === "*" || a.namespaceURI === e) && (r === "*" || a.localName == r) && n.push(a);
      }), n;
    });
  }
};
ae.prototype.getElementsByTagName = B.prototype.getElementsByTagName;
ae.prototype.getElementsByTagNameNS = B.prototype.getElementsByTagNameNS;
T(B, d);
function de() {
}
de.prototype.nodeType = X;
T(de, d);
function oe() {
}
oe.prototype = {
  data: "",
  substringData: function(e, r) {
    return this.data.substring(e, e + r);
  },
  appendData: function(e) {
    e = this.data + e, this.nodeValue = this.data = e, this.length = e.length;
  },
  insertData: function(e, r) {
    this.replaceData(e, 0, r);
  },
  appendChild: function(e) {
    throw new Error(N[D]);
  },
  deleteData: function(e, r) {
    this.replaceData(e, r, "");
  },
  replaceData: function(e, r, t) {
    var n = this.data.substring(0, e), a = this.data.substring(e + r);
    t = n + t + a, this.nodeValue = this.data = t, this.length = t.length;
  }
};
T(oe, d);
function Se() {
}
Se.prototype = {
  nodeName: "#text",
  nodeType: ce,
  splitText: function(e) {
    var r = this.data, t = r.substring(e);
    r = r.substring(0, e), this.data = this.nodeValue = r, this.length = r.length;
    var n = this.ownerDocument.createTextNode(t);
    return this.parentNode && this.parentNode.insertBefore(n, this.nextSibling), n;
  }
};
T(Se, oe);
function Ae() {
}
Ae.prototype = {
  nodeName: "#comment",
  nodeType: nr
};
T(Ae, oe);
function Le() {
}
Le.prototype = {
  nodeName: "#cdata-section",
  nodeType: er
};
T(Le, oe);
function fe() {
}
fe.prototype.nodeType = or;
T(fe, d);
function fr() {
}
fr.prototype.nodeType = Mr;
T(fr, d);
function hr() {
}
hr.prototype.nodeType = _r;
T(hr, d);
function Oe() {
}
Oe.prototype.nodeType = rr;
T(Oe, d);
function he() {
}
he.prototype.nodeName = "#document-fragment";
he.prototype.nodeType = k;
T(he, d);
function Re() {
}
Re.prototype.nodeType = tr;
T(Re, d);
function mr() {
}
mr.prototype.serializeToString = function(e, r, t) {
  return gr.call(e, r, t);
};
d.prototype.toString = gr;
function gr(e, r) {
  var t = [], n = this.nodeType == 9 && this.documentElement || this, a = n.prefix, o = n.namespaceURI;
  if (o && a == null) {
    var a = n.lookupPrefix(o);
    if (a == null)
      var i = [
        { namespace: o, prefix: null }
        //{namespace:uri,prefix:''}
      ];
  }
  return F(this, t, e, r, i), t.join("");
}
function je(e, r, t) {
  var n = e.prefix || "", a = e.namespaceURI;
  if (!a || n === "xml" && a === Q.XML || a === Q.XMLNS)
    return !1;
  for (var o = t.length; o--; ) {
    var i = t[o];
    if (i.prefix === n)
      return i.namespace !== a;
  }
  return !0;
}
function we(e, r, t) {
  e.push(" ", r, '="', t.replace(/[<>&"\t\n\r]/g, cr), '"');
}
function F(e, r, t, n, a) {
  if (a || (a = []), n)
    if (e = n(e), e) {
      if (typeof e == "string") {
        r.push(e);
        return;
      }
    } else
      return;
  switch (e.nodeType) {
    case L:
      var o = e.attributes, i = o.length, s = e.firstChild, u = e.tagName;
      t = Q.isHTML(e.namespaceURI) || t;
      var l = u;
      if (!t && !e.prefix && e.namespaceURI) {
        for (var c, m = 0; m < o.length; m++)
          if (o.item(m).name === "xmlns") {
            c = o.item(m).value;
            break;
          }
        if (!c)
          for (var p = a.length - 1; p >= 0; p--) {
            var v = a[p];
            if (v.prefix === "" && v.namespace === e.namespaceURI) {
              c = v.namespace;
              break;
            }
          }
        if (c !== e.namespaceURI)
          for (var p = a.length - 1; p >= 0; p--) {
            var v = a[p];
            if (v.namespace === e.namespaceURI) {
              v.prefix && (l = v.prefix + ":" + u);
              break;
            }
          }
      }
      r.push("<", l);
      for (var O = 0; O < i; O++) {
        var h = o.item(O);
        h.prefix == "xmlns" ? a.push({ prefix: h.localName, namespace: h.value }) : h.nodeName == "xmlns" && a.push({ prefix: "", namespace: h.value });
      }
      for (var O = 0; O < i; O++) {
        var h = o.item(O);
        if (je(h, t, a)) {
          var f = h.prefix || "", U = h.namespaceURI;
          we(r, f ? "xmlns:" + f : "xmlns", U), a.push({ prefix: f, namespace: U });
        }
        F(h, r, t, n, a);
      }
      if (u === l && je(e, t, a)) {
        var f = e.prefix || "", U = e.namespaceURI;
        we(r, f ? "xmlns:" + f : "xmlns", U), a.push({ prefix: f, namespace: U });
      }
      if (s || t && !/^(?:meta|link|img|br|hr|input)$/i.test(u)) {
        if (r.push(">"), t && /^script$/i.test(u))
          for (; s; )
            s.data ? r.push(s.data) : F(s, r, t, n, a.slice()), s = s.nextSibling;
        else
          for (; s; )
            F(s, r, t, n, a.slice()), s = s.nextSibling;
        r.push("</", l, ">");
      } else
        r.push("/>");
      return;
    case ar:
    case k:
      for (var s = e.firstChild; s; )
        F(s, r, t, n, a.slice()), s = s.nextSibling;
      return;
    case X:
      return we(r, e.name, e.value);
    case ce:
      return r.push(
        e.data.replace(/[<&>]/g, cr)
      );
    case er:
      return r.push("<![CDATA[", e.data, "]]>");
    case nr:
      return r.push("<!--", e.data, "-->");
    case or:
      var Z = e.publicId, w = e.systemId;
      if (r.push("<!DOCTYPE ", e.name), Z)
        r.push(" PUBLIC ", Z), w && w != "." && r.push(" ", w), r.push(">");
      else if (w && w != ".")
        r.push(" SYSTEM ", w, ">");
      else {
        var S = e.internalSubset;
        S && r.push(" [", S, "]"), r.push(">");
      }
      return;
    case tr:
      return r.push("<?", e.target, " ", e.data, "?>");
    case rr:
      return r.push("&", e.nodeName, ";");
    default:
      r.push("??", e.nodeName);
  }
}
function br(e, r, t) {
  var n;
  switch (r.nodeType) {
    case L:
      n = r.cloneNode(!1), n.ownerDocument = e;
    case k:
      break;
    case X:
      t = !0;
      break;
  }
  if (n || (n = r.cloneNode(!1)), n.ownerDocument = e, n.parentNode = null, t)
    for (var a = r.firstChild; a; )
      n.appendChild(br(e, a, t)), a = a.nextSibling;
  return n;
}
function Ne(e, r, t) {
  var n = new r.constructor();
  for (var a in r)
    if (Object.prototype.hasOwnProperty.call(r, a)) {
      var o = r[a];
      typeof o != "object" && o != n[a] && (n[a] = o);
    }
  switch (r.childNodes && (n.childNodes = new I()), n.ownerDocument = e, n.nodeType) {
    case L:
      var i = r.attributes, s = n.attributes = new ue(), u = i.length;
      s._ownerElement = n;
      for (var l = 0; l < u; l++)
        n.setAttributeNode(Ne(e, i.item(l), !0));
      break;
    case X:
      t = !0;
  }
  if (t)
    for (var c = r.firstChild; c; )
      n.appendChild(Ne(e, c, t)), c = c.nextSibling;
  return n;
}
function vr(e, r, t) {
  e[r] = t;
}
try {
  if (Object.defineProperty) {
    let e = function(r) {
      switch (r.nodeType) {
        case L:
        case k:
          var t = [];
          for (r = r.firstChild; r; )
            r.nodeType !== 7 && r.nodeType !== 8 && t.push(e(r)), r = r.nextSibling;
          return t.join("");
        default:
          return r.nodeValue;
      }
    };
    Object.defineProperty($.prototype, "length", {
      get: function() {
        return Te(this), this.$$length;
      }
    }), Object.defineProperty(d.prototype, "textContent", {
      get: function() {
        return e(this);
      },
      set: function(r) {
        switch (this.nodeType) {
          case L:
          case k:
            for (; this.firstChild; )
              this.removeChild(this.firstChild);
            (r || String(r)) && this.appendChild(this.ownerDocument.createTextNode(r));
            break;
          default:
            this.data = r, this.value = r, this.nodeValue = r;
        }
      }
    }), vr = function(r, t, n) {
      r["$$" + t] = n;
    };
  }
} catch {
}
V.DocumentType = fe;
V.DOMException = b;
V.DOMImplementation = lr;
V.Element = B;
V.Node = d;
V.NodeList = I;
V.XMLSerializer = mr;
var me = {}, wr = {};
(function(e) {
  var r = M.freeze;
  e.XML_ENTITIES = r({
    amp: "&",
    apos: "'",
    gt: ">",
    lt: "<",
    quot: '"'
  }), e.HTML_ENTITIES = r({
    Aacute: "Á",
    aacute: "á",
    Abreve: "Ă",
    abreve: "ă",
    ac: "∾",
    acd: "∿",
    acE: "∾̳",
    Acirc: "Â",
    acirc: "â",
    acute: "´",
    Acy: "А",
    acy: "а",
    AElig: "Æ",
    aelig: "æ",
    af: "⁡",
    Afr: "𝔄",
    afr: "𝔞",
    Agrave: "À",
    agrave: "à",
    alefsym: "ℵ",
    aleph: "ℵ",
    Alpha: "Α",
    alpha: "α",
    Amacr: "Ā",
    amacr: "ā",
    amalg: "⨿",
    AMP: "&",
    amp: "&",
    And: "⩓",
    and: "∧",
    andand: "⩕",
    andd: "⩜",
    andslope: "⩘",
    andv: "⩚",
    ang: "∠",
    ange: "⦤",
    angle: "∠",
    angmsd: "∡",
    angmsdaa: "⦨",
    angmsdab: "⦩",
    angmsdac: "⦪",
    angmsdad: "⦫",
    angmsdae: "⦬",
    angmsdaf: "⦭",
    angmsdag: "⦮",
    angmsdah: "⦯",
    angrt: "∟",
    angrtvb: "⊾",
    angrtvbd: "⦝",
    angsph: "∢",
    angst: "Å",
    angzarr: "⍼",
    Aogon: "Ą",
    aogon: "ą",
    Aopf: "𝔸",
    aopf: "𝕒",
    ap: "≈",
    apacir: "⩯",
    apE: "⩰",
    ape: "≊",
    apid: "≋",
    apos: "'",
    ApplyFunction: "⁡",
    approx: "≈",
    approxeq: "≊",
    Aring: "Å",
    aring: "å",
    Ascr: "𝒜",
    ascr: "𝒶",
    Assign: "≔",
    ast: "*",
    asymp: "≈",
    asympeq: "≍",
    Atilde: "Ã",
    atilde: "ã",
    Auml: "Ä",
    auml: "ä",
    awconint: "∳",
    awint: "⨑",
    backcong: "≌",
    backepsilon: "϶",
    backprime: "‵",
    backsim: "∽",
    backsimeq: "⋍",
    Backslash: "∖",
    Barv: "⫧",
    barvee: "⊽",
    Barwed: "⌆",
    barwed: "⌅",
    barwedge: "⌅",
    bbrk: "⎵",
    bbrktbrk: "⎶",
    bcong: "≌",
    Bcy: "Б",
    bcy: "б",
    bdquo: "„",
    becaus: "∵",
    Because: "∵",
    because: "∵",
    bemptyv: "⦰",
    bepsi: "϶",
    bernou: "ℬ",
    Bernoullis: "ℬ",
    Beta: "Β",
    beta: "β",
    beth: "ℶ",
    between: "≬",
    Bfr: "𝔅",
    bfr: "𝔟",
    bigcap: "⋂",
    bigcirc: "◯",
    bigcup: "⋃",
    bigodot: "⨀",
    bigoplus: "⨁",
    bigotimes: "⨂",
    bigsqcup: "⨆",
    bigstar: "★",
    bigtriangledown: "▽",
    bigtriangleup: "△",
    biguplus: "⨄",
    bigvee: "⋁",
    bigwedge: "⋀",
    bkarow: "⤍",
    blacklozenge: "⧫",
    blacksquare: "▪",
    blacktriangle: "▴",
    blacktriangledown: "▾",
    blacktriangleleft: "◂",
    blacktriangleright: "▸",
    blank: "␣",
    blk12: "▒",
    blk14: "░",
    blk34: "▓",
    block: "█",
    bne: "=⃥",
    bnequiv: "≡⃥",
    bNot: "⫭",
    bnot: "⌐",
    Bopf: "𝔹",
    bopf: "𝕓",
    bot: "⊥",
    bottom: "⊥",
    bowtie: "⋈",
    boxbox: "⧉",
    boxDL: "╗",
    boxDl: "╖",
    boxdL: "╕",
    boxdl: "┐",
    boxDR: "╔",
    boxDr: "╓",
    boxdR: "╒",
    boxdr: "┌",
    boxH: "═",
    boxh: "─",
    boxHD: "╦",
    boxHd: "╤",
    boxhD: "╥",
    boxhd: "┬",
    boxHU: "╩",
    boxHu: "╧",
    boxhU: "╨",
    boxhu: "┴",
    boxminus: "⊟",
    boxplus: "⊞",
    boxtimes: "⊠",
    boxUL: "╝",
    boxUl: "╜",
    boxuL: "╛",
    boxul: "┘",
    boxUR: "╚",
    boxUr: "╙",
    boxuR: "╘",
    boxur: "└",
    boxV: "║",
    boxv: "│",
    boxVH: "╬",
    boxVh: "╫",
    boxvH: "╪",
    boxvh: "┼",
    boxVL: "╣",
    boxVl: "╢",
    boxvL: "╡",
    boxvl: "┤",
    boxVR: "╠",
    boxVr: "╟",
    boxvR: "╞",
    boxvr: "├",
    bprime: "‵",
    Breve: "˘",
    breve: "˘",
    brvbar: "¦",
    Bscr: "ℬ",
    bscr: "𝒷",
    bsemi: "⁏",
    bsim: "∽",
    bsime: "⋍",
    bsol: "\\",
    bsolb: "⧅",
    bsolhsub: "⟈",
    bull: "•",
    bullet: "•",
    bump: "≎",
    bumpE: "⪮",
    bumpe: "≏",
    Bumpeq: "≎",
    bumpeq: "≏",
    Cacute: "Ć",
    cacute: "ć",
    Cap: "⋒",
    cap: "∩",
    capand: "⩄",
    capbrcup: "⩉",
    capcap: "⩋",
    capcup: "⩇",
    capdot: "⩀",
    CapitalDifferentialD: "ⅅ",
    caps: "∩︀",
    caret: "⁁",
    caron: "ˇ",
    Cayleys: "ℭ",
    ccaps: "⩍",
    Ccaron: "Č",
    ccaron: "č",
    Ccedil: "Ç",
    ccedil: "ç",
    Ccirc: "Ĉ",
    ccirc: "ĉ",
    Cconint: "∰",
    ccups: "⩌",
    ccupssm: "⩐",
    Cdot: "Ċ",
    cdot: "ċ",
    cedil: "¸",
    Cedilla: "¸",
    cemptyv: "⦲",
    cent: "¢",
    CenterDot: "·",
    centerdot: "·",
    Cfr: "ℭ",
    cfr: "𝔠",
    CHcy: "Ч",
    chcy: "ч",
    check: "✓",
    checkmark: "✓",
    Chi: "Χ",
    chi: "χ",
    cir: "○",
    circ: "ˆ",
    circeq: "≗",
    circlearrowleft: "↺",
    circlearrowright: "↻",
    circledast: "⊛",
    circledcirc: "⊚",
    circleddash: "⊝",
    CircleDot: "⊙",
    circledR: "®",
    circledS: "Ⓢ",
    CircleMinus: "⊖",
    CirclePlus: "⊕",
    CircleTimes: "⊗",
    cirE: "⧃",
    cire: "≗",
    cirfnint: "⨐",
    cirmid: "⫯",
    cirscir: "⧂",
    ClockwiseContourIntegral: "∲",
    CloseCurlyDoubleQuote: "”",
    CloseCurlyQuote: "’",
    clubs: "♣",
    clubsuit: "♣",
    Colon: "∷",
    colon: ":",
    Colone: "⩴",
    colone: "≔",
    coloneq: "≔",
    comma: ",",
    commat: "@",
    comp: "∁",
    compfn: "∘",
    complement: "∁",
    complexes: "ℂ",
    cong: "≅",
    congdot: "⩭",
    Congruent: "≡",
    Conint: "∯",
    conint: "∮",
    ContourIntegral: "∮",
    Copf: "ℂ",
    copf: "𝕔",
    coprod: "∐",
    Coproduct: "∐",
    COPY: "©",
    copy: "©",
    copysr: "℗",
    CounterClockwiseContourIntegral: "∳",
    crarr: "↵",
    Cross: "⨯",
    cross: "✗",
    Cscr: "𝒞",
    cscr: "𝒸",
    csub: "⫏",
    csube: "⫑",
    csup: "⫐",
    csupe: "⫒",
    ctdot: "⋯",
    cudarrl: "⤸",
    cudarrr: "⤵",
    cuepr: "⋞",
    cuesc: "⋟",
    cularr: "↶",
    cularrp: "⤽",
    Cup: "⋓",
    cup: "∪",
    cupbrcap: "⩈",
    CupCap: "≍",
    cupcap: "⩆",
    cupcup: "⩊",
    cupdot: "⊍",
    cupor: "⩅",
    cups: "∪︀",
    curarr: "↷",
    curarrm: "⤼",
    curlyeqprec: "⋞",
    curlyeqsucc: "⋟",
    curlyvee: "⋎",
    curlywedge: "⋏",
    curren: "¤",
    curvearrowleft: "↶",
    curvearrowright: "↷",
    cuvee: "⋎",
    cuwed: "⋏",
    cwconint: "∲",
    cwint: "∱",
    cylcty: "⌭",
    Dagger: "‡",
    dagger: "†",
    daleth: "ℸ",
    Darr: "↡",
    dArr: "⇓",
    darr: "↓",
    dash: "‐",
    Dashv: "⫤",
    dashv: "⊣",
    dbkarow: "⤏",
    dblac: "˝",
    Dcaron: "Ď",
    dcaron: "ď",
    Dcy: "Д",
    dcy: "д",
    DD: "ⅅ",
    dd: "ⅆ",
    ddagger: "‡",
    ddarr: "⇊",
    DDotrahd: "⤑",
    ddotseq: "⩷",
    deg: "°",
    Del: "∇",
    Delta: "Δ",
    delta: "δ",
    demptyv: "⦱",
    dfisht: "⥿",
    Dfr: "𝔇",
    dfr: "𝔡",
    dHar: "⥥",
    dharl: "⇃",
    dharr: "⇂",
    DiacriticalAcute: "´",
    DiacriticalDot: "˙",
    DiacriticalDoubleAcute: "˝",
    DiacriticalGrave: "`",
    DiacriticalTilde: "˜",
    diam: "⋄",
    Diamond: "⋄",
    diamond: "⋄",
    diamondsuit: "♦",
    diams: "♦",
    die: "¨",
    DifferentialD: "ⅆ",
    digamma: "ϝ",
    disin: "⋲",
    div: "÷",
    divide: "÷",
    divideontimes: "⋇",
    divonx: "⋇",
    DJcy: "Ђ",
    djcy: "ђ",
    dlcorn: "⌞",
    dlcrop: "⌍",
    dollar: "$",
    Dopf: "𝔻",
    dopf: "𝕕",
    Dot: "¨",
    dot: "˙",
    DotDot: "⃜",
    doteq: "≐",
    doteqdot: "≑",
    DotEqual: "≐",
    dotminus: "∸",
    dotplus: "∔",
    dotsquare: "⊡",
    doublebarwedge: "⌆",
    DoubleContourIntegral: "∯",
    DoubleDot: "¨",
    DoubleDownArrow: "⇓",
    DoubleLeftArrow: "⇐",
    DoubleLeftRightArrow: "⇔",
    DoubleLeftTee: "⫤",
    DoubleLongLeftArrow: "⟸",
    DoubleLongLeftRightArrow: "⟺",
    DoubleLongRightArrow: "⟹",
    DoubleRightArrow: "⇒",
    DoubleRightTee: "⊨",
    DoubleUpArrow: "⇑",
    DoubleUpDownArrow: "⇕",
    DoubleVerticalBar: "∥",
    DownArrow: "↓",
    Downarrow: "⇓",
    downarrow: "↓",
    DownArrowBar: "⤓",
    DownArrowUpArrow: "⇵",
    DownBreve: "̑",
    downdownarrows: "⇊",
    downharpoonleft: "⇃",
    downharpoonright: "⇂",
    DownLeftRightVector: "⥐",
    DownLeftTeeVector: "⥞",
    DownLeftVector: "↽",
    DownLeftVectorBar: "⥖",
    DownRightTeeVector: "⥟",
    DownRightVector: "⇁",
    DownRightVectorBar: "⥗",
    DownTee: "⊤",
    DownTeeArrow: "↧",
    drbkarow: "⤐",
    drcorn: "⌟",
    drcrop: "⌌",
    Dscr: "𝒟",
    dscr: "𝒹",
    DScy: "Ѕ",
    dscy: "ѕ",
    dsol: "⧶",
    Dstrok: "Đ",
    dstrok: "đ",
    dtdot: "⋱",
    dtri: "▿",
    dtrif: "▾",
    duarr: "⇵",
    duhar: "⥯",
    dwangle: "⦦",
    DZcy: "Џ",
    dzcy: "џ",
    dzigrarr: "⟿",
    Eacute: "É",
    eacute: "é",
    easter: "⩮",
    Ecaron: "Ě",
    ecaron: "ě",
    ecir: "≖",
    Ecirc: "Ê",
    ecirc: "ê",
    ecolon: "≕",
    Ecy: "Э",
    ecy: "э",
    eDDot: "⩷",
    Edot: "Ė",
    eDot: "≑",
    edot: "ė",
    ee: "ⅇ",
    efDot: "≒",
    Efr: "𝔈",
    efr: "𝔢",
    eg: "⪚",
    Egrave: "È",
    egrave: "è",
    egs: "⪖",
    egsdot: "⪘",
    el: "⪙",
    Element: "∈",
    elinters: "⏧",
    ell: "ℓ",
    els: "⪕",
    elsdot: "⪗",
    Emacr: "Ē",
    emacr: "ē",
    empty: "∅",
    emptyset: "∅",
    EmptySmallSquare: "◻",
    emptyv: "∅",
    EmptyVerySmallSquare: "▫",
    emsp: " ",
    emsp13: " ",
    emsp14: " ",
    ENG: "Ŋ",
    eng: "ŋ",
    ensp: " ",
    Eogon: "Ę",
    eogon: "ę",
    Eopf: "𝔼",
    eopf: "𝕖",
    epar: "⋕",
    eparsl: "⧣",
    eplus: "⩱",
    epsi: "ε",
    Epsilon: "Ε",
    epsilon: "ε",
    epsiv: "ϵ",
    eqcirc: "≖",
    eqcolon: "≕",
    eqsim: "≂",
    eqslantgtr: "⪖",
    eqslantless: "⪕",
    Equal: "⩵",
    equals: "=",
    EqualTilde: "≂",
    equest: "≟",
    Equilibrium: "⇌",
    equiv: "≡",
    equivDD: "⩸",
    eqvparsl: "⧥",
    erarr: "⥱",
    erDot: "≓",
    Escr: "ℰ",
    escr: "ℯ",
    esdot: "≐",
    Esim: "⩳",
    esim: "≂",
    Eta: "Η",
    eta: "η",
    ETH: "Ð",
    eth: "ð",
    Euml: "Ë",
    euml: "ë",
    euro: "€",
    excl: "!",
    exist: "∃",
    Exists: "∃",
    expectation: "ℰ",
    ExponentialE: "ⅇ",
    exponentiale: "ⅇ",
    fallingdotseq: "≒",
    Fcy: "Ф",
    fcy: "ф",
    female: "♀",
    ffilig: "ﬃ",
    fflig: "ﬀ",
    ffllig: "ﬄ",
    Ffr: "𝔉",
    ffr: "𝔣",
    filig: "ﬁ",
    FilledSmallSquare: "◼",
    FilledVerySmallSquare: "▪",
    fjlig: "fj",
    flat: "♭",
    fllig: "ﬂ",
    fltns: "▱",
    fnof: "ƒ",
    Fopf: "𝔽",
    fopf: "𝕗",
    ForAll: "∀",
    forall: "∀",
    fork: "⋔",
    forkv: "⫙",
    Fouriertrf: "ℱ",
    fpartint: "⨍",
    frac12: "½",
    frac13: "⅓",
    frac14: "¼",
    frac15: "⅕",
    frac16: "⅙",
    frac18: "⅛",
    frac23: "⅔",
    frac25: "⅖",
    frac34: "¾",
    frac35: "⅗",
    frac38: "⅜",
    frac45: "⅘",
    frac56: "⅚",
    frac58: "⅝",
    frac78: "⅞",
    frasl: "⁄",
    frown: "⌢",
    Fscr: "ℱ",
    fscr: "𝒻",
    gacute: "ǵ",
    Gamma: "Γ",
    gamma: "γ",
    Gammad: "Ϝ",
    gammad: "ϝ",
    gap: "⪆",
    Gbreve: "Ğ",
    gbreve: "ğ",
    Gcedil: "Ģ",
    Gcirc: "Ĝ",
    gcirc: "ĝ",
    Gcy: "Г",
    gcy: "г",
    Gdot: "Ġ",
    gdot: "ġ",
    gE: "≧",
    ge: "≥",
    gEl: "⪌",
    gel: "⋛",
    geq: "≥",
    geqq: "≧",
    geqslant: "⩾",
    ges: "⩾",
    gescc: "⪩",
    gesdot: "⪀",
    gesdoto: "⪂",
    gesdotol: "⪄",
    gesl: "⋛︀",
    gesles: "⪔",
    Gfr: "𝔊",
    gfr: "𝔤",
    Gg: "⋙",
    gg: "≫",
    ggg: "⋙",
    gimel: "ℷ",
    GJcy: "Ѓ",
    gjcy: "ѓ",
    gl: "≷",
    gla: "⪥",
    glE: "⪒",
    glj: "⪤",
    gnap: "⪊",
    gnapprox: "⪊",
    gnE: "≩",
    gne: "⪈",
    gneq: "⪈",
    gneqq: "≩",
    gnsim: "⋧",
    Gopf: "𝔾",
    gopf: "𝕘",
    grave: "`",
    GreaterEqual: "≥",
    GreaterEqualLess: "⋛",
    GreaterFullEqual: "≧",
    GreaterGreater: "⪢",
    GreaterLess: "≷",
    GreaterSlantEqual: "⩾",
    GreaterTilde: "≳",
    Gscr: "𝒢",
    gscr: "ℊ",
    gsim: "≳",
    gsime: "⪎",
    gsiml: "⪐",
    Gt: "≫",
    GT: ">",
    gt: ">",
    gtcc: "⪧",
    gtcir: "⩺",
    gtdot: "⋗",
    gtlPar: "⦕",
    gtquest: "⩼",
    gtrapprox: "⪆",
    gtrarr: "⥸",
    gtrdot: "⋗",
    gtreqless: "⋛",
    gtreqqless: "⪌",
    gtrless: "≷",
    gtrsim: "≳",
    gvertneqq: "≩︀",
    gvnE: "≩︀",
    Hacek: "ˇ",
    hairsp: " ",
    half: "½",
    hamilt: "ℋ",
    HARDcy: "Ъ",
    hardcy: "ъ",
    hArr: "⇔",
    harr: "↔",
    harrcir: "⥈",
    harrw: "↭",
    Hat: "^",
    hbar: "ℏ",
    Hcirc: "Ĥ",
    hcirc: "ĥ",
    hearts: "♥",
    heartsuit: "♥",
    hellip: "…",
    hercon: "⊹",
    Hfr: "ℌ",
    hfr: "𝔥",
    HilbertSpace: "ℋ",
    hksearow: "⤥",
    hkswarow: "⤦",
    hoarr: "⇿",
    homtht: "∻",
    hookleftarrow: "↩",
    hookrightarrow: "↪",
    Hopf: "ℍ",
    hopf: "𝕙",
    horbar: "―",
    HorizontalLine: "─",
    Hscr: "ℋ",
    hscr: "𝒽",
    hslash: "ℏ",
    Hstrok: "Ħ",
    hstrok: "ħ",
    HumpDownHump: "≎",
    HumpEqual: "≏",
    hybull: "⁃",
    hyphen: "‐",
    Iacute: "Í",
    iacute: "í",
    ic: "⁣",
    Icirc: "Î",
    icirc: "î",
    Icy: "И",
    icy: "и",
    Idot: "İ",
    IEcy: "Е",
    iecy: "е",
    iexcl: "¡",
    iff: "⇔",
    Ifr: "ℑ",
    ifr: "𝔦",
    Igrave: "Ì",
    igrave: "ì",
    ii: "ⅈ",
    iiiint: "⨌",
    iiint: "∭",
    iinfin: "⧜",
    iiota: "℩",
    IJlig: "Ĳ",
    ijlig: "ĳ",
    Im: "ℑ",
    Imacr: "Ī",
    imacr: "ī",
    image: "ℑ",
    ImaginaryI: "ⅈ",
    imagline: "ℐ",
    imagpart: "ℑ",
    imath: "ı",
    imof: "⊷",
    imped: "Ƶ",
    Implies: "⇒",
    in: "∈",
    incare: "℅",
    infin: "∞",
    infintie: "⧝",
    inodot: "ı",
    Int: "∬",
    int: "∫",
    intcal: "⊺",
    integers: "ℤ",
    Integral: "∫",
    intercal: "⊺",
    Intersection: "⋂",
    intlarhk: "⨗",
    intprod: "⨼",
    InvisibleComma: "⁣",
    InvisibleTimes: "⁢",
    IOcy: "Ё",
    iocy: "ё",
    Iogon: "Į",
    iogon: "į",
    Iopf: "𝕀",
    iopf: "𝕚",
    Iota: "Ι",
    iota: "ι",
    iprod: "⨼",
    iquest: "¿",
    Iscr: "ℐ",
    iscr: "𝒾",
    isin: "∈",
    isindot: "⋵",
    isinE: "⋹",
    isins: "⋴",
    isinsv: "⋳",
    isinv: "∈",
    it: "⁢",
    Itilde: "Ĩ",
    itilde: "ĩ",
    Iukcy: "І",
    iukcy: "і",
    Iuml: "Ï",
    iuml: "ï",
    Jcirc: "Ĵ",
    jcirc: "ĵ",
    Jcy: "Й",
    jcy: "й",
    Jfr: "𝔍",
    jfr: "𝔧",
    jmath: "ȷ",
    Jopf: "𝕁",
    jopf: "𝕛",
    Jscr: "𝒥",
    jscr: "𝒿",
    Jsercy: "Ј",
    jsercy: "ј",
    Jukcy: "Є",
    jukcy: "є",
    Kappa: "Κ",
    kappa: "κ",
    kappav: "ϰ",
    Kcedil: "Ķ",
    kcedil: "ķ",
    Kcy: "К",
    kcy: "к",
    Kfr: "𝔎",
    kfr: "𝔨",
    kgreen: "ĸ",
    KHcy: "Х",
    khcy: "х",
    KJcy: "Ќ",
    kjcy: "ќ",
    Kopf: "𝕂",
    kopf: "𝕜",
    Kscr: "𝒦",
    kscr: "𝓀",
    lAarr: "⇚",
    Lacute: "Ĺ",
    lacute: "ĺ",
    laemptyv: "⦴",
    lagran: "ℒ",
    Lambda: "Λ",
    lambda: "λ",
    Lang: "⟪",
    lang: "⟨",
    langd: "⦑",
    langle: "⟨",
    lap: "⪅",
    Laplacetrf: "ℒ",
    laquo: "«",
    Larr: "↞",
    lArr: "⇐",
    larr: "←",
    larrb: "⇤",
    larrbfs: "⤟",
    larrfs: "⤝",
    larrhk: "↩",
    larrlp: "↫",
    larrpl: "⤹",
    larrsim: "⥳",
    larrtl: "↢",
    lat: "⪫",
    lAtail: "⤛",
    latail: "⤙",
    late: "⪭",
    lates: "⪭︀",
    lBarr: "⤎",
    lbarr: "⤌",
    lbbrk: "❲",
    lbrace: "{",
    lbrack: "[",
    lbrke: "⦋",
    lbrksld: "⦏",
    lbrkslu: "⦍",
    Lcaron: "Ľ",
    lcaron: "ľ",
    Lcedil: "Ļ",
    lcedil: "ļ",
    lceil: "⌈",
    lcub: "{",
    Lcy: "Л",
    lcy: "л",
    ldca: "⤶",
    ldquo: "“",
    ldquor: "„",
    ldrdhar: "⥧",
    ldrushar: "⥋",
    ldsh: "↲",
    lE: "≦",
    le: "≤",
    LeftAngleBracket: "⟨",
    LeftArrow: "←",
    Leftarrow: "⇐",
    leftarrow: "←",
    LeftArrowBar: "⇤",
    LeftArrowRightArrow: "⇆",
    leftarrowtail: "↢",
    LeftCeiling: "⌈",
    LeftDoubleBracket: "⟦",
    LeftDownTeeVector: "⥡",
    LeftDownVector: "⇃",
    LeftDownVectorBar: "⥙",
    LeftFloor: "⌊",
    leftharpoondown: "↽",
    leftharpoonup: "↼",
    leftleftarrows: "⇇",
    LeftRightArrow: "↔",
    Leftrightarrow: "⇔",
    leftrightarrow: "↔",
    leftrightarrows: "⇆",
    leftrightharpoons: "⇋",
    leftrightsquigarrow: "↭",
    LeftRightVector: "⥎",
    LeftTee: "⊣",
    LeftTeeArrow: "↤",
    LeftTeeVector: "⥚",
    leftthreetimes: "⋋",
    LeftTriangle: "⊲",
    LeftTriangleBar: "⧏",
    LeftTriangleEqual: "⊴",
    LeftUpDownVector: "⥑",
    LeftUpTeeVector: "⥠",
    LeftUpVector: "↿",
    LeftUpVectorBar: "⥘",
    LeftVector: "↼",
    LeftVectorBar: "⥒",
    lEg: "⪋",
    leg: "⋚",
    leq: "≤",
    leqq: "≦",
    leqslant: "⩽",
    les: "⩽",
    lescc: "⪨",
    lesdot: "⩿",
    lesdoto: "⪁",
    lesdotor: "⪃",
    lesg: "⋚︀",
    lesges: "⪓",
    lessapprox: "⪅",
    lessdot: "⋖",
    lesseqgtr: "⋚",
    lesseqqgtr: "⪋",
    LessEqualGreater: "⋚",
    LessFullEqual: "≦",
    LessGreater: "≶",
    lessgtr: "≶",
    LessLess: "⪡",
    lesssim: "≲",
    LessSlantEqual: "⩽",
    LessTilde: "≲",
    lfisht: "⥼",
    lfloor: "⌊",
    Lfr: "𝔏",
    lfr: "𝔩",
    lg: "≶",
    lgE: "⪑",
    lHar: "⥢",
    lhard: "↽",
    lharu: "↼",
    lharul: "⥪",
    lhblk: "▄",
    LJcy: "Љ",
    ljcy: "љ",
    Ll: "⋘",
    ll: "≪",
    llarr: "⇇",
    llcorner: "⌞",
    Lleftarrow: "⇚",
    llhard: "⥫",
    lltri: "◺",
    Lmidot: "Ŀ",
    lmidot: "ŀ",
    lmoust: "⎰",
    lmoustache: "⎰",
    lnap: "⪉",
    lnapprox: "⪉",
    lnE: "≨",
    lne: "⪇",
    lneq: "⪇",
    lneqq: "≨",
    lnsim: "⋦",
    loang: "⟬",
    loarr: "⇽",
    lobrk: "⟦",
    LongLeftArrow: "⟵",
    Longleftarrow: "⟸",
    longleftarrow: "⟵",
    LongLeftRightArrow: "⟷",
    Longleftrightarrow: "⟺",
    longleftrightarrow: "⟷",
    longmapsto: "⟼",
    LongRightArrow: "⟶",
    Longrightarrow: "⟹",
    longrightarrow: "⟶",
    looparrowleft: "↫",
    looparrowright: "↬",
    lopar: "⦅",
    Lopf: "𝕃",
    lopf: "𝕝",
    loplus: "⨭",
    lotimes: "⨴",
    lowast: "∗",
    lowbar: "_",
    LowerLeftArrow: "↙",
    LowerRightArrow: "↘",
    loz: "◊",
    lozenge: "◊",
    lozf: "⧫",
    lpar: "(",
    lparlt: "⦓",
    lrarr: "⇆",
    lrcorner: "⌟",
    lrhar: "⇋",
    lrhard: "⥭",
    lrm: "‎",
    lrtri: "⊿",
    lsaquo: "‹",
    Lscr: "ℒ",
    lscr: "𝓁",
    Lsh: "↰",
    lsh: "↰",
    lsim: "≲",
    lsime: "⪍",
    lsimg: "⪏",
    lsqb: "[",
    lsquo: "‘",
    lsquor: "‚",
    Lstrok: "Ł",
    lstrok: "ł",
    Lt: "≪",
    LT: "<",
    lt: "<",
    ltcc: "⪦",
    ltcir: "⩹",
    ltdot: "⋖",
    lthree: "⋋",
    ltimes: "⋉",
    ltlarr: "⥶",
    ltquest: "⩻",
    ltri: "◃",
    ltrie: "⊴",
    ltrif: "◂",
    ltrPar: "⦖",
    lurdshar: "⥊",
    luruhar: "⥦",
    lvertneqq: "≨︀",
    lvnE: "≨︀",
    macr: "¯",
    male: "♂",
    malt: "✠",
    maltese: "✠",
    Map: "⤅",
    map: "↦",
    mapsto: "↦",
    mapstodown: "↧",
    mapstoleft: "↤",
    mapstoup: "↥",
    marker: "▮",
    mcomma: "⨩",
    Mcy: "М",
    mcy: "м",
    mdash: "—",
    mDDot: "∺",
    measuredangle: "∡",
    MediumSpace: " ",
    Mellintrf: "ℳ",
    Mfr: "𝔐",
    mfr: "𝔪",
    mho: "℧",
    micro: "µ",
    mid: "∣",
    midast: "*",
    midcir: "⫰",
    middot: "·",
    minus: "−",
    minusb: "⊟",
    minusd: "∸",
    minusdu: "⨪",
    MinusPlus: "∓",
    mlcp: "⫛",
    mldr: "…",
    mnplus: "∓",
    models: "⊧",
    Mopf: "𝕄",
    mopf: "𝕞",
    mp: "∓",
    Mscr: "ℳ",
    mscr: "𝓂",
    mstpos: "∾",
    Mu: "Μ",
    mu: "μ",
    multimap: "⊸",
    mumap: "⊸",
    nabla: "∇",
    Nacute: "Ń",
    nacute: "ń",
    nang: "∠⃒",
    nap: "≉",
    napE: "⩰̸",
    napid: "≋̸",
    napos: "ŉ",
    napprox: "≉",
    natur: "♮",
    natural: "♮",
    naturals: "ℕ",
    nbsp: " ",
    nbump: "≎̸",
    nbumpe: "≏̸",
    ncap: "⩃",
    Ncaron: "Ň",
    ncaron: "ň",
    Ncedil: "Ņ",
    ncedil: "ņ",
    ncong: "≇",
    ncongdot: "⩭̸",
    ncup: "⩂",
    Ncy: "Н",
    ncy: "н",
    ndash: "–",
    ne: "≠",
    nearhk: "⤤",
    neArr: "⇗",
    nearr: "↗",
    nearrow: "↗",
    nedot: "≐̸",
    NegativeMediumSpace: "​",
    NegativeThickSpace: "​",
    NegativeThinSpace: "​",
    NegativeVeryThinSpace: "​",
    nequiv: "≢",
    nesear: "⤨",
    nesim: "≂̸",
    NestedGreaterGreater: "≫",
    NestedLessLess: "≪",
    NewLine: `
`,
    nexist: "∄",
    nexists: "∄",
    Nfr: "𝔑",
    nfr: "𝔫",
    ngE: "≧̸",
    nge: "≱",
    ngeq: "≱",
    ngeqq: "≧̸",
    ngeqslant: "⩾̸",
    nges: "⩾̸",
    nGg: "⋙̸",
    ngsim: "≵",
    nGt: "≫⃒",
    ngt: "≯",
    ngtr: "≯",
    nGtv: "≫̸",
    nhArr: "⇎",
    nharr: "↮",
    nhpar: "⫲",
    ni: "∋",
    nis: "⋼",
    nisd: "⋺",
    niv: "∋",
    NJcy: "Њ",
    njcy: "њ",
    nlArr: "⇍",
    nlarr: "↚",
    nldr: "‥",
    nlE: "≦̸",
    nle: "≰",
    nLeftarrow: "⇍",
    nleftarrow: "↚",
    nLeftrightarrow: "⇎",
    nleftrightarrow: "↮",
    nleq: "≰",
    nleqq: "≦̸",
    nleqslant: "⩽̸",
    nles: "⩽̸",
    nless: "≮",
    nLl: "⋘̸",
    nlsim: "≴",
    nLt: "≪⃒",
    nlt: "≮",
    nltri: "⋪",
    nltrie: "⋬",
    nLtv: "≪̸",
    nmid: "∤",
    NoBreak: "⁠",
    NonBreakingSpace: " ",
    Nopf: "ℕ",
    nopf: "𝕟",
    Not: "⫬",
    not: "¬",
    NotCongruent: "≢",
    NotCupCap: "≭",
    NotDoubleVerticalBar: "∦",
    NotElement: "∉",
    NotEqual: "≠",
    NotEqualTilde: "≂̸",
    NotExists: "∄",
    NotGreater: "≯",
    NotGreaterEqual: "≱",
    NotGreaterFullEqual: "≧̸",
    NotGreaterGreater: "≫̸",
    NotGreaterLess: "≹",
    NotGreaterSlantEqual: "⩾̸",
    NotGreaterTilde: "≵",
    NotHumpDownHump: "≎̸",
    NotHumpEqual: "≏̸",
    notin: "∉",
    notindot: "⋵̸",
    notinE: "⋹̸",
    notinva: "∉",
    notinvb: "⋷",
    notinvc: "⋶",
    NotLeftTriangle: "⋪",
    NotLeftTriangleBar: "⧏̸",
    NotLeftTriangleEqual: "⋬",
    NotLess: "≮",
    NotLessEqual: "≰",
    NotLessGreater: "≸",
    NotLessLess: "≪̸",
    NotLessSlantEqual: "⩽̸",
    NotLessTilde: "≴",
    NotNestedGreaterGreater: "⪢̸",
    NotNestedLessLess: "⪡̸",
    notni: "∌",
    notniva: "∌",
    notnivb: "⋾",
    notnivc: "⋽",
    NotPrecedes: "⊀",
    NotPrecedesEqual: "⪯̸",
    NotPrecedesSlantEqual: "⋠",
    NotReverseElement: "∌",
    NotRightTriangle: "⋫",
    NotRightTriangleBar: "⧐̸",
    NotRightTriangleEqual: "⋭",
    NotSquareSubset: "⊏̸",
    NotSquareSubsetEqual: "⋢",
    NotSquareSuperset: "⊐̸",
    NotSquareSupersetEqual: "⋣",
    NotSubset: "⊂⃒",
    NotSubsetEqual: "⊈",
    NotSucceeds: "⊁",
    NotSucceedsEqual: "⪰̸",
    NotSucceedsSlantEqual: "⋡",
    NotSucceedsTilde: "≿̸",
    NotSuperset: "⊃⃒",
    NotSupersetEqual: "⊉",
    NotTilde: "≁",
    NotTildeEqual: "≄",
    NotTildeFullEqual: "≇",
    NotTildeTilde: "≉",
    NotVerticalBar: "∤",
    npar: "∦",
    nparallel: "∦",
    nparsl: "⫽⃥",
    npart: "∂̸",
    npolint: "⨔",
    npr: "⊀",
    nprcue: "⋠",
    npre: "⪯̸",
    nprec: "⊀",
    npreceq: "⪯̸",
    nrArr: "⇏",
    nrarr: "↛",
    nrarrc: "⤳̸",
    nrarrw: "↝̸",
    nRightarrow: "⇏",
    nrightarrow: "↛",
    nrtri: "⋫",
    nrtrie: "⋭",
    nsc: "⊁",
    nsccue: "⋡",
    nsce: "⪰̸",
    Nscr: "𝒩",
    nscr: "𝓃",
    nshortmid: "∤",
    nshortparallel: "∦",
    nsim: "≁",
    nsime: "≄",
    nsimeq: "≄",
    nsmid: "∤",
    nspar: "∦",
    nsqsube: "⋢",
    nsqsupe: "⋣",
    nsub: "⊄",
    nsubE: "⫅̸",
    nsube: "⊈",
    nsubset: "⊂⃒",
    nsubseteq: "⊈",
    nsubseteqq: "⫅̸",
    nsucc: "⊁",
    nsucceq: "⪰̸",
    nsup: "⊅",
    nsupE: "⫆̸",
    nsupe: "⊉",
    nsupset: "⊃⃒",
    nsupseteq: "⊉",
    nsupseteqq: "⫆̸",
    ntgl: "≹",
    Ntilde: "Ñ",
    ntilde: "ñ",
    ntlg: "≸",
    ntriangleleft: "⋪",
    ntrianglelefteq: "⋬",
    ntriangleright: "⋫",
    ntrianglerighteq: "⋭",
    Nu: "Ν",
    nu: "ν",
    num: "#",
    numero: "№",
    numsp: " ",
    nvap: "≍⃒",
    nVDash: "⊯",
    nVdash: "⊮",
    nvDash: "⊭",
    nvdash: "⊬",
    nvge: "≥⃒",
    nvgt: ">⃒",
    nvHarr: "⤄",
    nvinfin: "⧞",
    nvlArr: "⤂",
    nvle: "≤⃒",
    nvlt: "<⃒",
    nvltrie: "⊴⃒",
    nvrArr: "⤃",
    nvrtrie: "⊵⃒",
    nvsim: "∼⃒",
    nwarhk: "⤣",
    nwArr: "⇖",
    nwarr: "↖",
    nwarrow: "↖",
    nwnear: "⤧",
    Oacute: "Ó",
    oacute: "ó",
    oast: "⊛",
    ocir: "⊚",
    Ocirc: "Ô",
    ocirc: "ô",
    Ocy: "О",
    ocy: "о",
    odash: "⊝",
    Odblac: "Ő",
    odblac: "ő",
    odiv: "⨸",
    odot: "⊙",
    odsold: "⦼",
    OElig: "Œ",
    oelig: "œ",
    ofcir: "⦿",
    Ofr: "𝔒",
    ofr: "𝔬",
    ogon: "˛",
    Ograve: "Ò",
    ograve: "ò",
    ogt: "⧁",
    ohbar: "⦵",
    ohm: "Ω",
    oint: "∮",
    olarr: "↺",
    olcir: "⦾",
    olcross: "⦻",
    oline: "‾",
    olt: "⧀",
    Omacr: "Ō",
    omacr: "ō",
    Omega: "Ω",
    omega: "ω",
    Omicron: "Ο",
    omicron: "ο",
    omid: "⦶",
    ominus: "⊖",
    Oopf: "𝕆",
    oopf: "𝕠",
    opar: "⦷",
    OpenCurlyDoubleQuote: "“",
    OpenCurlyQuote: "‘",
    operp: "⦹",
    oplus: "⊕",
    Or: "⩔",
    or: "∨",
    orarr: "↻",
    ord: "⩝",
    order: "ℴ",
    orderof: "ℴ",
    ordf: "ª",
    ordm: "º",
    origof: "⊶",
    oror: "⩖",
    orslope: "⩗",
    orv: "⩛",
    oS: "Ⓢ",
    Oscr: "𝒪",
    oscr: "ℴ",
    Oslash: "Ø",
    oslash: "ø",
    osol: "⊘",
    Otilde: "Õ",
    otilde: "õ",
    Otimes: "⨷",
    otimes: "⊗",
    otimesas: "⨶",
    Ouml: "Ö",
    ouml: "ö",
    ovbar: "⌽",
    OverBar: "‾",
    OverBrace: "⏞",
    OverBracket: "⎴",
    OverParenthesis: "⏜",
    par: "∥",
    para: "¶",
    parallel: "∥",
    parsim: "⫳",
    parsl: "⫽",
    part: "∂",
    PartialD: "∂",
    Pcy: "П",
    pcy: "п",
    percnt: "%",
    period: ".",
    permil: "‰",
    perp: "⊥",
    pertenk: "‱",
    Pfr: "𝔓",
    pfr: "𝔭",
    Phi: "Φ",
    phi: "φ",
    phiv: "ϕ",
    phmmat: "ℳ",
    phone: "☎",
    Pi: "Π",
    pi: "π",
    pitchfork: "⋔",
    piv: "ϖ",
    planck: "ℏ",
    planckh: "ℎ",
    plankv: "ℏ",
    plus: "+",
    plusacir: "⨣",
    plusb: "⊞",
    pluscir: "⨢",
    plusdo: "∔",
    plusdu: "⨥",
    pluse: "⩲",
    PlusMinus: "±",
    plusmn: "±",
    plussim: "⨦",
    plustwo: "⨧",
    pm: "±",
    Poincareplane: "ℌ",
    pointint: "⨕",
    Popf: "ℙ",
    popf: "𝕡",
    pound: "£",
    Pr: "⪻",
    pr: "≺",
    prap: "⪷",
    prcue: "≼",
    prE: "⪳",
    pre: "⪯",
    prec: "≺",
    precapprox: "⪷",
    preccurlyeq: "≼",
    Precedes: "≺",
    PrecedesEqual: "⪯",
    PrecedesSlantEqual: "≼",
    PrecedesTilde: "≾",
    preceq: "⪯",
    precnapprox: "⪹",
    precneqq: "⪵",
    precnsim: "⋨",
    precsim: "≾",
    Prime: "″",
    prime: "′",
    primes: "ℙ",
    prnap: "⪹",
    prnE: "⪵",
    prnsim: "⋨",
    prod: "∏",
    Product: "∏",
    profalar: "⌮",
    profline: "⌒",
    profsurf: "⌓",
    prop: "∝",
    Proportion: "∷",
    Proportional: "∝",
    propto: "∝",
    prsim: "≾",
    prurel: "⊰",
    Pscr: "𝒫",
    pscr: "𝓅",
    Psi: "Ψ",
    psi: "ψ",
    puncsp: " ",
    Qfr: "𝔔",
    qfr: "𝔮",
    qint: "⨌",
    Qopf: "ℚ",
    qopf: "𝕢",
    qprime: "⁗",
    Qscr: "𝒬",
    qscr: "𝓆",
    quaternions: "ℍ",
    quatint: "⨖",
    quest: "?",
    questeq: "≟",
    QUOT: '"',
    quot: '"',
    rAarr: "⇛",
    race: "∽̱",
    Racute: "Ŕ",
    racute: "ŕ",
    radic: "√",
    raemptyv: "⦳",
    Rang: "⟫",
    rang: "⟩",
    rangd: "⦒",
    range: "⦥",
    rangle: "⟩",
    raquo: "»",
    Rarr: "↠",
    rArr: "⇒",
    rarr: "→",
    rarrap: "⥵",
    rarrb: "⇥",
    rarrbfs: "⤠",
    rarrc: "⤳",
    rarrfs: "⤞",
    rarrhk: "↪",
    rarrlp: "↬",
    rarrpl: "⥅",
    rarrsim: "⥴",
    Rarrtl: "⤖",
    rarrtl: "↣",
    rarrw: "↝",
    rAtail: "⤜",
    ratail: "⤚",
    ratio: "∶",
    rationals: "ℚ",
    RBarr: "⤐",
    rBarr: "⤏",
    rbarr: "⤍",
    rbbrk: "❳",
    rbrace: "}",
    rbrack: "]",
    rbrke: "⦌",
    rbrksld: "⦎",
    rbrkslu: "⦐",
    Rcaron: "Ř",
    rcaron: "ř",
    Rcedil: "Ŗ",
    rcedil: "ŗ",
    rceil: "⌉",
    rcub: "}",
    Rcy: "Р",
    rcy: "р",
    rdca: "⤷",
    rdldhar: "⥩",
    rdquo: "”",
    rdquor: "”",
    rdsh: "↳",
    Re: "ℜ",
    real: "ℜ",
    realine: "ℛ",
    realpart: "ℜ",
    reals: "ℝ",
    rect: "▭",
    REG: "®",
    reg: "®",
    ReverseElement: "∋",
    ReverseEquilibrium: "⇋",
    ReverseUpEquilibrium: "⥯",
    rfisht: "⥽",
    rfloor: "⌋",
    Rfr: "ℜ",
    rfr: "𝔯",
    rHar: "⥤",
    rhard: "⇁",
    rharu: "⇀",
    rharul: "⥬",
    Rho: "Ρ",
    rho: "ρ",
    rhov: "ϱ",
    RightAngleBracket: "⟩",
    RightArrow: "→",
    Rightarrow: "⇒",
    rightarrow: "→",
    RightArrowBar: "⇥",
    RightArrowLeftArrow: "⇄",
    rightarrowtail: "↣",
    RightCeiling: "⌉",
    RightDoubleBracket: "⟧",
    RightDownTeeVector: "⥝",
    RightDownVector: "⇂",
    RightDownVectorBar: "⥕",
    RightFloor: "⌋",
    rightharpoondown: "⇁",
    rightharpoonup: "⇀",
    rightleftarrows: "⇄",
    rightleftharpoons: "⇌",
    rightrightarrows: "⇉",
    rightsquigarrow: "↝",
    RightTee: "⊢",
    RightTeeArrow: "↦",
    RightTeeVector: "⥛",
    rightthreetimes: "⋌",
    RightTriangle: "⊳",
    RightTriangleBar: "⧐",
    RightTriangleEqual: "⊵",
    RightUpDownVector: "⥏",
    RightUpTeeVector: "⥜",
    RightUpVector: "↾",
    RightUpVectorBar: "⥔",
    RightVector: "⇀",
    RightVectorBar: "⥓",
    ring: "˚",
    risingdotseq: "≓",
    rlarr: "⇄",
    rlhar: "⇌",
    rlm: "‏",
    rmoust: "⎱",
    rmoustache: "⎱",
    rnmid: "⫮",
    roang: "⟭",
    roarr: "⇾",
    robrk: "⟧",
    ropar: "⦆",
    Ropf: "ℝ",
    ropf: "𝕣",
    roplus: "⨮",
    rotimes: "⨵",
    RoundImplies: "⥰",
    rpar: ")",
    rpargt: "⦔",
    rppolint: "⨒",
    rrarr: "⇉",
    Rrightarrow: "⇛",
    rsaquo: "›",
    Rscr: "ℛ",
    rscr: "𝓇",
    Rsh: "↱",
    rsh: "↱",
    rsqb: "]",
    rsquo: "’",
    rsquor: "’",
    rthree: "⋌",
    rtimes: "⋊",
    rtri: "▹",
    rtrie: "⊵",
    rtrif: "▸",
    rtriltri: "⧎",
    RuleDelayed: "⧴",
    ruluhar: "⥨",
    rx: "℞",
    Sacute: "Ś",
    sacute: "ś",
    sbquo: "‚",
    Sc: "⪼",
    sc: "≻",
    scap: "⪸",
    Scaron: "Š",
    scaron: "š",
    sccue: "≽",
    scE: "⪴",
    sce: "⪰",
    Scedil: "Ş",
    scedil: "ş",
    Scirc: "Ŝ",
    scirc: "ŝ",
    scnap: "⪺",
    scnE: "⪶",
    scnsim: "⋩",
    scpolint: "⨓",
    scsim: "≿",
    Scy: "С",
    scy: "с",
    sdot: "⋅",
    sdotb: "⊡",
    sdote: "⩦",
    searhk: "⤥",
    seArr: "⇘",
    searr: "↘",
    searrow: "↘",
    sect: "§",
    semi: ";",
    seswar: "⤩",
    setminus: "∖",
    setmn: "∖",
    sext: "✶",
    Sfr: "𝔖",
    sfr: "𝔰",
    sfrown: "⌢",
    sharp: "♯",
    SHCHcy: "Щ",
    shchcy: "щ",
    SHcy: "Ш",
    shcy: "ш",
    ShortDownArrow: "↓",
    ShortLeftArrow: "←",
    shortmid: "∣",
    shortparallel: "∥",
    ShortRightArrow: "→",
    ShortUpArrow: "↑",
    shy: "­",
    Sigma: "Σ",
    sigma: "σ",
    sigmaf: "ς",
    sigmav: "ς",
    sim: "∼",
    simdot: "⩪",
    sime: "≃",
    simeq: "≃",
    simg: "⪞",
    simgE: "⪠",
    siml: "⪝",
    simlE: "⪟",
    simne: "≆",
    simplus: "⨤",
    simrarr: "⥲",
    slarr: "←",
    SmallCircle: "∘",
    smallsetminus: "∖",
    smashp: "⨳",
    smeparsl: "⧤",
    smid: "∣",
    smile: "⌣",
    smt: "⪪",
    smte: "⪬",
    smtes: "⪬︀",
    SOFTcy: "Ь",
    softcy: "ь",
    sol: "/",
    solb: "⧄",
    solbar: "⌿",
    Sopf: "𝕊",
    sopf: "𝕤",
    spades: "♠",
    spadesuit: "♠",
    spar: "∥",
    sqcap: "⊓",
    sqcaps: "⊓︀",
    sqcup: "⊔",
    sqcups: "⊔︀",
    Sqrt: "√",
    sqsub: "⊏",
    sqsube: "⊑",
    sqsubset: "⊏",
    sqsubseteq: "⊑",
    sqsup: "⊐",
    sqsupe: "⊒",
    sqsupset: "⊐",
    sqsupseteq: "⊒",
    squ: "□",
    Square: "□",
    square: "□",
    SquareIntersection: "⊓",
    SquareSubset: "⊏",
    SquareSubsetEqual: "⊑",
    SquareSuperset: "⊐",
    SquareSupersetEqual: "⊒",
    SquareUnion: "⊔",
    squarf: "▪",
    squf: "▪",
    srarr: "→",
    Sscr: "𝒮",
    sscr: "𝓈",
    ssetmn: "∖",
    ssmile: "⌣",
    sstarf: "⋆",
    Star: "⋆",
    star: "☆",
    starf: "★",
    straightepsilon: "ϵ",
    straightphi: "ϕ",
    strns: "¯",
    Sub: "⋐",
    sub: "⊂",
    subdot: "⪽",
    subE: "⫅",
    sube: "⊆",
    subedot: "⫃",
    submult: "⫁",
    subnE: "⫋",
    subne: "⊊",
    subplus: "⪿",
    subrarr: "⥹",
    Subset: "⋐",
    subset: "⊂",
    subseteq: "⊆",
    subseteqq: "⫅",
    SubsetEqual: "⊆",
    subsetneq: "⊊",
    subsetneqq: "⫋",
    subsim: "⫇",
    subsub: "⫕",
    subsup: "⫓",
    succ: "≻",
    succapprox: "⪸",
    succcurlyeq: "≽",
    Succeeds: "≻",
    SucceedsEqual: "⪰",
    SucceedsSlantEqual: "≽",
    SucceedsTilde: "≿",
    succeq: "⪰",
    succnapprox: "⪺",
    succneqq: "⪶",
    succnsim: "⋩",
    succsim: "≿",
    SuchThat: "∋",
    Sum: "∑",
    sum: "∑",
    sung: "♪",
    Sup: "⋑",
    sup: "⊃",
    sup1: "¹",
    sup2: "²",
    sup3: "³",
    supdot: "⪾",
    supdsub: "⫘",
    supE: "⫆",
    supe: "⊇",
    supedot: "⫄",
    Superset: "⊃",
    SupersetEqual: "⊇",
    suphsol: "⟉",
    suphsub: "⫗",
    suplarr: "⥻",
    supmult: "⫂",
    supnE: "⫌",
    supne: "⊋",
    supplus: "⫀",
    Supset: "⋑",
    supset: "⊃",
    supseteq: "⊇",
    supseteqq: "⫆",
    supsetneq: "⊋",
    supsetneqq: "⫌",
    supsim: "⫈",
    supsub: "⫔",
    supsup: "⫖",
    swarhk: "⤦",
    swArr: "⇙",
    swarr: "↙",
    swarrow: "↙",
    swnwar: "⤪",
    szlig: "ß",
    Tab: "	",
    target: "⌖",
    Tau: "Τ",
    tau: "τ",
    tbrk: "⎴",
    Tcaron: "Ť",
    tcaron: "ť",
    Tcedil: "Ţ",
    tcedil: "ţ",
    Tcy: "Т",
    tcy: "т",
    tdot: "⃛",
    telrec: "⌕",
    Tfr: "𝔗",
    tfr: "𝔱",
    there4: "∴",
    Therefore: "∴",
    therefore: "∴",
    Theta: "Θ",
    theta: "θ",
    thetasym: "ϑ",
    thetav: "ϑ",
    thickapprox: "≈",
    thicksim: "∼",
    ThickSpace: "  ",
    thinsp: " ",
    ThinSpace: " ",
    thkap: "≈",
    thksim: "∼",
    THORN: "Þ",
    thorn: "þ",
    Tilde: "∼",
    tilde: "˜",
    TildeEqual: "≃",
    TildeFullEqual: "≅",
    TildeTilde: "≈",
    times: "×",
    timesb: "⊠",
    timesbar: "⨱",
    timesd: "⨰",
    tint: "∭",
    toea: "⤨",
    top: "⊤",
    topbot: "⌶",
    topcir: "⫱",
    Topf: "𝕋",
    topf: "𝕥",
    topfork: "⫚",
    tosa: "⤩",
    tprime: "‴",
    TRADE: "™",
    trade: "™",
    triangle: "▵",
    triangledown: "▿",
    triangleleft: "◃",
    trianglelefteq: "⊴",
    triangleq: "≜",
    triangleright: "▹",
    trianglerighteq: "⊵",
    tridot: "◬",
    trie: "≜",
    triminus: "⨺",
    TripleDot: "⃛",
    triplus: "⨹",
    trisb: "⧍",
    tritime: "⨻",
    trpezium: "⏢",
    Tscr: "𝒯",
    tscr: "𝓉",
    TScy: "Ц",
    tscy: "ц",
    TSHcy: "Ћ",
    tshcy: "ћ",
    Tstrok: "Ŧ",
    tstrok: "ŧ",
    twixt: "≬",
    twoheadleftarrow: "↞",
    twoheadrightarrow: "↠",
    Uacute: "Ú",
    uacute: "ú",
    Uarr: "↟",
    uArr: "⇑",
    uarr: "↑",
    Uarrocir: "⥉",
    Ubrcy: "Ў",
    ubrcy: "ў",
    Ubreve: "Ŭ",
    ubreve: "ŭ",
    Ucirc: "Û",
    ucirc: "û",
    Ucy: "У",
    ucy: "у",
    udarr: "⇅",
    Udblac: "Ű",
    udblac: "ű",
    udhar: "⥮",
    ufisht: "⥾",
    Ufr: "𝔘",
    ufr: "𝔲",
    Ugrave: "Ù",
    ugrave: "ù",
    uHar: "⥣",
    uharl: "↿",
    uharr: "↾",
    uhblk: "▀",
    ulcorn: "⌜",
    ulcorner: "⌜",
    ulcrop: "⌏",
    ultri: "◸",
    Umacr: "Ū",
    umacr: "ū",
    uml: "¨",
    UnderBar: "_",
    UnderBrace: "⏟",
    UnderBracket: "⎵",
    UnderParenthesis: "⏝",
    Union: "⋃",
    UnionPlus: "⊎",
    Uogon: "Ų",
    uogon: "ų",
    Uopf: "𝕌",
    uopf: "𝕦",
    UpArrow: "↑",
    Uparrow: "⇑",
    uparrow: "↑",
    UpArrowBar: "⤒",
    UpArrowDownArrow: "⇅",
    UpDownArrow: "↕",
    Updownarrow: "⇕",
    updownarrow: "↕",
    UpEquilibrium: "⥮",
    upharpoonleft: "↿",
    upharpoonright: "↾",
    uplus: "⊎",
    UpperLeftArrow: "↖",
    UpperRightArrow: "↗",
    Upsi: "ϒ",
    upsi: "υ",
    upsih: "ϒ",
    Upsilon: "Υ",
    upsilon: "υ",
    UpTee: "⊥",
    UpTeeArrow: "↥",
    upuparrows: "⇈",
    urcorn: "⌝",
    urcorner: "⌝",
    urcrop: "⌎",
    Uring: "Ů",
    uring: "ů",
    urtri: "◹",
    Uscr: "𝒰",
    uscr: "𝓊",
    utdot: "⋰",
    Utilde: "Ũ",
    utilde: "ũ",
    utri: "▵",
    utrif: "▴",
    uuarr: "⇈",
    Uuml: "Ü",
    uuml: "ü",
    uwangle: "⦧",
    vangrt: "⦜",
    varepsilon: "ϵ",
    varkappa: "ϰ",
    varnothing: "∅",
    varphi: "ϕ",
    varpi: "ϖ",
    varpropto: "∝",
    vArr: "⇕",
    varr: "↕",
    varrho: "ϱ",
    varsigma: "ς",
    varsubsetneq: "⊊︀",
    varsubsetneqq: "⫋︀",
    varsupsetneq: "⊋︀",
    varsupsetneqq: "⫌︀",
    vartheta: "ϑ",
    vartriangleleft: "⊲",
    vartriangleright: "⊳",
    Vbar: "⫫",
    vBar: "⫨",
    vBarv: "⫩",
    Vcy: "В",
    vcy: "в",
    VDash: "⊫",
    Vdash: "⊩",
    vDash: "⊨",
    vdash: "⊢",
    Vdashl: "⫦",
    Vee: "⋁",
    vee: "∨",
    veebar: "⊻",
    veeeq: "≚",
    vellip: "⋮",
    Verbar: "‖",
    verbar: "|",
    Vert: "‖",
    vert: "|",
    VerticalBar: "∣",
    VerticalLine: "|",
    VerticalSeparator: "❘",
    VerticalTilde: "≀",
    VeryThinSpace: " ",
    Vfr: "𝔙",
    vfr: "𝔳",
    vltri: "⊲",
    vnsub: "⊂⃒",
    vnsup: "⊃⃒",
    Vopf: "𝕍",
    vopf: "𝕧",
    vprop: "∝",
    vrtri: "⊳",
    Vscr: "𝒱",
    vscr: "𝓋",
    vsubnE: "⫋︀",
    vsubne: "⊊︀",
    vsupnE: "⫌︀",
    vsupne: "⊋︀",
    Vvdash: "⊪",
    vzigzag: "⦚",
    Wcirc: "Ŵ",
    wcirc: "ŵ",
    wedbar: "⩟",
    Wedge: "⋀",
    wedge: "∧",
    wedgeq: "≙",
    weierp: "℘",
    Wfr: "𝔚",
    wfr: "𝔴",
    Wopf: "𝕎",
    wopf: "𝕨",
    wp: "℘",
    wr: "≀",
    wreath: "≀",
    Wscr: "𝒲",
    wscr: "𝓌",
    xcap: "⋂",
    xcirc: "◯",
    xcup: "⋃",
    xdtri: "▽",
    Xfr: "𝔛",
    xfr: "𝔵",
    xhArr: "⟺",
    xharr: "⟷",
    Xi: "Ξ",
    xi: "ξ",
    xlArr: "⟸",
    xlarr: "⟵",
    xmap: "⟼",
    xnis: "⋻",
    xodot: "⨀",
    Xopf: "𝕏",
    xopf: "𝕩",
    xoplus: "⨁",
    xotime: "⨂",
    xrArr: "⟹",
    xrarr: "⟶",
    Xscr: "𝒳",
    xscr: "𝓍",
    xsqcup: "⨆",
    xuplus: "⨄",
    xutri: "△",
    xvee: "⋁",
    xwedge: "⋀",
    Yacute: "Ý",
    yacute: "ý",
    YAcy: "Я",
    yacy: "я",
    Ycirc: "Ŷ",
    ycirc: "ŷ",
    Ycy: "Ы",
    ycy: "ы",
    yen: "¥",
    Yfr: "𝔜",
    yfr: "𝔶",
    YIcy: "Ї",
    yicy: "ї",
    Yopf: "𝕐",
    yopf: "𝕪",
    Yscr: "𝒴",
    yscr: "𝓎",
    YUcy: "Ю",
    yucy: "ю",
    Yuml: "Ÿ",
    yuml: "ÿ",
    Zacute: "Ź",
    zacute: "ź",
    Zcaron: "Ž",
    zcaron: "ž",
    Zcy: "З",
    zcy: "з",
    Zdot: "Ż",
    zdot: "ż",
    zeetrf: "ℨ",
    ZeroWidthSpace: "​",
    Zeta: "Ζ",
    zeta: "ζ",
    Zfr: "ℨ",
    zfr: "𝔷",
    ZHcy: "Ж",
    zhcy: "ж",
    zigrarr: "⇝",
    Zopf: "ℤ",
    zopf: "𝕫",
    Zscr: "𝒵",
    zscr: "𝓏",
    zwj: "‍",
    zwnj: "‌"
  }), e.entityMap = e.HTML_ENTITIES;
})(wr);
var Ce = {}, te = M.NAMESPACE, ye = /[A-Z_a-z\xC0-\xD6\xD8-\xF6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/, ze = new RegExp("[\\-\\.0-9" + ye.source.slice(1, -1) + "\\u00B7\\u0300-\\u036F\\u203F-\\u2040]"), Fe = new RegExp("^" + ye.source + ze.source + "*(?::" + ye.source + ze.source + "*)?$"), J = 0, P = 1, H = 2, W = 3, G = 4, j = 5, K = 6, se = 7;
function Y(e, r) {
  this.message = e, this.locator = r, Error.captureStackTrace && Error.captureStackTrace(this, Y);
}
Y.prototype = new Error();
Y.prototype.name = Y.name;
function Nr() {
}
Nr.prototype = {
  parse: function(e, r, t) {
    var n = this.domBuilder;
    n.startDocument(), yr(r, r = {}), jr(
      e,
      r,
      t,
      n,
      this.errorHandler
    ), n.endDocument();
  }
};
function jr(e, r, t, n, a) {
  function o(g) {
    if (g > 65535) {
      g -= 65536;
      var A = 55296 + (g >> 10), Ar = 56320 + (g & 1023);
      return String.fromCharCode(A, Ar);
    } else
      return String.fromCharCode(g);
  }
  function i(g) {
    var A = g.slice(1, -1);
    return Object.hasOwnProperty.call(t, A) ? t[A] : A.charAt(0) === "#" ? o(parseInt(A.substr(1).replace("x", "0x"))) : (a.error("entity not found:" + g), g);
  }
  function s(g) {
    if (g > h) {
      var A = e.substring(h, g).replace(/&#?\w+;/g, i);
      p && u(h), n.characters(A, 0, g - h), h = g;
    }
  }
  function u(g, A) {
    for (; g >= c && (A = m.exec(e)); )
      l = A.index, c = l + A[0].length, p.lineNumber++;
    p.columnNumber = g - l + 1;
  }
  for (var l = 0, c = 0, m = /.*(?:\r\n?|\n)|.*$/g, p = n.locator, v = [{ currentNSMap: r }], O = {}, h = 0; ; ) {
    try {
      var f = e.indexOf("<", h);
      if (f < 0) {
        if (!e.substr(h).match(/^\s*$/)) {
          var U = n.doc, Z = U.createTextNode(e.substr(h));
          U.appendChild(Z), n.currentElement = Z;
        }
        return;
      }
      switch (f > h && s(f), e.charAt(f + 1)) {
        case "/":
          var E = e.indexOf(">", f + 3), w = e.substring(f + 2, E).replace(/[ \t\n\r]+$/g, ""), S = v.pop();
          E < 0 ? (w = e.substring(f + 2).replace(/[\s<].*/, ""), a.error("end tag name: " + w + " is not complete:" + S.tagName), E = f + 1 + w.length) : w.match(/\s</) && (w = w.replace(/[\s<].*/, ""), a.error("end tag name: " + w + " maybe not complete"), E = f + 1 + w.length);
          var ge = S.localNSMap, Ie = S.tagName == w, xr = Ie || S.tagName && S.tagName.toLowerCase() == w.toLowerCase();
          if (xr) {
            if (n.endElement(S.uri, S.localName, w), ge)
              for (var ke in ge)
                Object.prototype.hasOwnProperty.call(ge, ke) && n.endPrefixMapping(ke);
            Ie || a.fatalError("end tag name: " + w + " is not match the current start tagName:" + S.tagName);
          } else
            v.push(S);
          E++;
          break;
        case "?":
          p && u(f), E = Yr(e, f, n);
          break;
        case "!":
          p && u(f), E = $r(e, f, n, a);
          break;
        default:
          p && u(f);
          var x = new Er(), be = v[v.length - 1].currentNSMap, E = zr(e, f, x, be, i, a), _e = x.length;
          if (!x.closed && Xr(e, E, x.tagName, O) && (x.closed = !0, t.nbsp || a.warning("unclosed xml attribute")), p && _e) {
            for (var Sr = Xe(p, {}), ve = 0; ve < _e; ve++) {
              var Me = x[ve];
              u(Me.offset), Me.locator = Xe(p, {});
            }
            n.locator = Sr, $e(x, n, be) && v.push(x), n.locator = p;
          } else
            $e(x, n, be) && v.push(x);
          te.isHTML(x.uri) && !x.closed ? E = Fr(e, E, x.tagName, i, n) : E++;
      }
    } catch (g) {
      if (g instanceof Y)
        throw g;
      a.error("element parse error: " + g), E = -1;
    }
    E > h ? h = E : s(Math.max(f, h) + 1);
  }
}
function Xe(e, r) {
  return r.lineNumber = e.lineNumber, r.columnNumber = e.columnNumber, r;
}
function zr(e, r, t, n, a, o) {
  function i(p, v, O) {
    t.attributeNames.hasOwnProperty(p) && o.fatalError("Attribute " + p + " redefined"), t.addValue(
      p,
      // @see https://www.w3.org/TR/xml/#AVNormalize
      // since the xmldom sax parser does not "interpret" DTD the following is not implemented:
      // - recursive replacement of (DTD) entity references
      // - trimming and collapsing multiple spaces into a single one for attributes that are not of type CDATA
      v.replace(/[\t\n\r]/g, " ").replace(/&#?\w+;/g, a),
      O
    );
  }
  for (var s, u, l = ++r, c = J; ; ) {
    var m = e.charAt(l);
    switch (m) {
      case "=":
        if (c === P)
          s = e.slice(r, l), c = W;
        else if (c === H)
          c = W;
        else
          throw new Error("attribute equal must after attrName");
        break;
      case "'":
      case '"':
        if (c === W || c === P)
          if (c === P && (o.warning('attribute value must after "="'), s = e.slice(r, l)), r = l + 1, l = e.indexOf(m, r), l > 0)
            u = e.slice(r, l), i(s, u, r - 1), c = j;
          else
            throw new Error("attribute value no end '" + m + "' match");
        else if (c == G)
          u = e.slice(r, l), i(s, u, r), o.warning('attribute "' + s + '" missed start quot(' + m + ")!!"), r = l + 1, c = j;
        else
          throw new Error('attribute value must after "="');
        break;
      case "/":
        switch (c) {
          case J:
            t.setTagName(e.slice(r, l));
          case j:
          case K:
          case se:
            c = se, t.closed = !0;
          case G:
          case P:
            break;
          case H:
            t.closed = !0;
            break;
          default:
            throw new Error("attribute invalid close char('/')");
        }
        break;
      case "":
        return o.error("unexpected end of input"), c == J && t.setTagName(e.slice(r, l)), l;
      case ">":
        switch (c) {
          case J:
            t.setTagName(e.slice(r, l));
          case j:
          case K:
          case se:
            break;
          case G:
          case P:
            u = e.slice(r, l), u.slice(-1) === "/" && (t.closed = !0, u = u.slice(0, -1));
          case H:
            c === H && (u = s), c == G ? (o.warning('attribute "' + u + '" missed quot(")!'), i(s, u, r)) : ((!te.isHTML(n[""]) || !u.match(/^(?:disabled|checked|selected)$/i)) && o.warning('attribute "' + u + '" missed value!! "' + u + '" instead!!'), i(u, u, r));
            break;
          case W:
            throw new Error("attribute value missed!!");
        }
        return l;
      case "":
        m = " ";
      default:
        if (m <= " ")
          switch (c) {
            case J:
              t.setTagName(e.slice(r, l)), c = K;
              break;
            case P:
              s = e.slice(r, l), c = H;
              break;
            case G:
              var u = e.slice(r, l);
              o.warning('attribute "' + u + '" missed quot(")!!'), i(s, u, r);
            case j:
              c = K;
              break;
          }
        else
          switch (c) {
            case H:
              t.tagName, (!te.isHTML(n[""]) || !s.match(/^(?:disabled|checked|selected)$/i)) && o.warning('attribute "' + s + '" missed value!! "' + s + '" instead2!!'), i(s, s, r), r = l, c = P;
              break;
            case j:
              o.warning('attribute space is required"' + s + '"!!');
            case K:
              c = P, r = l;
              break;
            case W:
              c = G, r = l;
              break;
            case se:
              throw new Error("elements closed character '/' and '>' must be connected to");
          }
    }
    l++;
  }
}
function $e(e, r, t) {
  for (var n = e.tagName, a = null, o = e.length; o--; ) {
    var i = e[o], s = i.qName, u = i.value, p = s.indexOf(":");
    if (p > 0)
      var l = i.prefix = s.slice(0, p), c = s.slice(p + 1), m = l === "xmlns" && c;
    else
      c = s, l = null, m = s === "xmlns" && "";
    i.localName = c, m !== !1 && (a == null && (a = {}, yr(t, t = {})), t[m] = a[m] = u, i.uri = te.XMLNS, r.startPrefixMapping(m, u));
  }
  for (var o = e.length; o--; ) {
    i = e[o];
    var l = i.prefix;
    l && (l === "xml" && (i.uri = te.XML), l !== "xmlns" && (i.uri = t[l || ""]));
  }
  var p = n.indexOf(":");
  p > 0 ? (l = e.prefix = n.slice(0, p), c = e.localName = n.slice(p + 1)) : (l = null, c = e.localName = n);
  var v = e.uri = t[l || ""];
  if (r.startElement(v, c, n, e), e.closed) {
    if (r.endElement(v, c, n), a)
      for (l in a)
        Object.prototype.hasOwnProperty.call(a, l) && r.endPrefixMapping(l);
  } else
    return e.currentNSMap = t, e.localNSMap = a, !0;
}
function Fr(e, r, t, n, a) {
  if (/^(?:script|textarea)$/i.test(t)) {
    var o = e.indexOf("</" + t + ">", r), i = e.substring(r + 1, o);
    if (/[&<]/.test(i))
      return /^script$/i.test(t) ? (a.characters(i, 0, i.length), o) : (i = i.replace(/&#?\w+;/g, n), a.characters(i, 0, i.length), o);
  }
  return r + 1;
}
function Xr(e, r, t, n) {
  var a = n[t];
  return a == null && (a = e.lastIndexOf("</" + t + ">"), a < r && (a = e.lastIndexOf("</" + t)), n[t] = a), a < r;
}
function yr(e, r) {
  for (var t in e)
    Object.prototype.hasOwnProperty.call(e, t) && (r[t] = e[t]);
}
function $r(e, r, t, n) {
  var a = e.charAt(r + 2);
  switch (a) {
    case "-":
      if (e.charAt(r + 3) === "-") {
        var o = e.indexOf("-->", r + 4);
        return o > r ? (t.comment(e, r + 4, o - r - 4), o + 3) : (n.error("Unclosed comment"), -1);
      } else
        return -1;
    default:
      if (e.substr(r + 3, 6) == "CDATA[") {
        var o = e.indexOf("]]>", r + 9);
        return t.startCDATA(), t.characters(e, r + 9, o - r - 9), t.endCDATA(), o + 3;
      }
      var i = Zr(e, r), s = i.length;
      if (s > 1 && /!doctype/i.test(i[0][0])) {
        var u = i[1][0], l = !1, c = !1;
        s > 3 && (/^public$/i.test(i[2][0]) ? (l = i[3][0], c = s > 4 && i[4][0]) : /^system$/i.test(i[2][0]) && (c = i[3][0]));
        var m = i[s - 1];
        return t.startDTD(u, l, c), t.endDTD(), m.index + m[0].length;
      }
  }
  return -1;
}
function Yr(e, r, t) {
  var n = e.indexOf("?>", r);
  if (n) {
    var a = e.substring(r, n).match(/^<\?(\S*)\s*([\s\S]*?)\s*$/);
    return a ? (a[0].length, t.processingInstruction(a[1], a[2]), n + 2) : -1;
  }
  return -1;
}
function Er() {
  this.attributeNames = {};
}
Er.prototype = {
  setTagName: function(e) {
    if (!Fe.test(e))
      throw new Error("invalid tagName:" + e);
    this.tagName = e;
  },
  addValue: function(e, r, t) {
    if (!Fe.test(e))
      throw new Error("invalid attribute:" + e);
    this.attributeNames[e] = this.length, this[this.length++] = { qName: e, value: r, offset: t };
  },
  length: 0,
  getLocalName: function(e) {
    return this[e].localName;
  },
  getLocator: function(e) {
    return this[e].locator;
  },
  getQName: function(e) {
    return this[e].qName;
  },
  getURI: function(e) {
    return this[e].uri;
  },
  getValue: function(e) {
    return this[e].value;
  }
  //	,getIndex:function(uri, localName)){
  //		if(localName){
  //
  //		}else{
  //			var qName = uri
  //		}
  //	},
  //	getValue:function(){return this.getValue(this.getIndex.apply(this,arguments))},
  //	getType:function(uri,localName){}
  //	getType:function(i){},
};
function Zr(e, r) {
  var t, n = [], a = /'[^']+'|"[^"]+"|[^\s<>\/=]+=?|(\/?\s*>|<)/g;
  for (a.lastIndex = r, a.exec(e); t = a.exec(e); )
    if (n.push(t), t[1]) return n;
}
Ce.XMLReader = Nr;
Ce.ParseError = Y;
var Jr = M, Wr = V, Ye = wr, Dr = Ce, Kr = Wr.DOMImplementation, Ze = Jr.NAMESPACE, Qr = Dr.ParseError, et = Dr.XMLReader;
function Tr(e) {
  return e.replace(/\r[\n\u0085]/g, `
`).replace(/[\r\u0085\u2028]/g, `
`);
}
function qr(e) {
  this.options = e || { locator: {} };
}
qr.prototype.parseFromString = function(e, r) {
  var t = this.options, n = new et(), a = t.domBuilder || new ie(), o = t.errorHandler, i = t.locator, s = t.xmlns || {}, u = /\/x?html?$/.test(r), l = u ? Ye.HTML_ENTITIES : Ye.XML_ENTITIES;
  i && a.setDocumentLocator(i), n.errorHandler = rt(o, a, i), n.domBuilder = t.domBuilder || a, u && (s[""] = Ze.HTML), s.xml = s.xml || Ze.XML;
  var c = t.normalizeLineEndings || Tr;
  return e && typeof e == "string" ? n.parse(
    c(e),
    s,
    l
  ) : n.errorHandler.error("invalid doc source"), a.doc;
};
function rt(e, r, t) {
  if (!e) {
    if (r instanceof ie)
      return r;
    e = r;
  }
  var n = {}, a = e instanceof Function;
  t = t || {};
  function o(i) {
    var s = e[i];
    !s && a && (s = e.length == 2 ? function(u) {
      e(i, u);
    } : e), n[i] = s && function(u) {
      s("[xmldom " + i + "]	" + u + Ee(t));
    } || function() {
    };
  }
  return o("warning"), o("error"), o("fatalError"), n;
}
function ie() {
  this.cdata = !1;
}
function z(e, r) {
  r.lineNumber = e.lineNumber, r.columnNumber = e.columnNumber;
}
ie.prototype = {
  startDocument: function() {
    this.doc = new Kr().createDocument(null, null, null), this.locator && (this.doc.documentURI = this.locator.systemId);
  },
  startElement: function(e, r, t, n) {
    var a = this.doc, o = a.createElementNS(e, t || r), i = n.length;
    le(this, o), this.currentElement = o, this.locator && z(this.locator, o);
    for (var s = 0; s < i; s++) {
      var e = n.getURI(s), u = n.getValue(s), t = n.getQName(s), l = a.createAttributeNS(e, t);
      this.locator && z(n.getLocator(s), l), l.value = l.nodeValue = u, o.setAttributeNode(l);
    }
  },
  endElement: function(e, r, t) {
    var n = this.currentElement;
    n.tagName, this.currentElement = n.parentNode;
  },
  startPrefixMapping: function(e, r) {
  },
  endPrefixMapping: function(e) {
  },
  processingInstruction: function(e, r) {
    var t = this.doc.createProcessingInstruction(e, r);
    this.locator && z(this.locator, t), le(this, t);
  },
  ignorableWhitespace: function(e, r, t) {
  },
  characters: function(e, r, t) {
    if (e = Je.apply(this, arguments), e) {
      if (this.cdata)
        var n = this.doc.createCDATASection(e);
      else
        var n = this.doc.createTextNode(e);
      this.currentElement ? this.currentElement.appendChild(n) : /^\s*$/.test(e) && this.doc.appendChild(n), this.locator && z(this.locator, n);
    }
  },
  skippedEntity: function(e) {
  },
  endDocument: function() {
    this.doc.normalize();
  },
  setDocumentLocator: function(e) {
    (this.locator = e) && (e.lineNumber = 0);
  },
  //LexicalHandler
  comment: function(e, r, t) {
    e = Je.apply(this, arguments);
    var n = this.doc.createComment(e);
    this.locator && z(this.locator, n), le(this, n);
  },
  startCDATA: function() {
    this.cdata = !0;
  },
  endCDATA: function() {
    this.cdata = !1;
  },
  startDTD: function(e, r, t) {
    var n = this.doc.implementation;
    if (n && n.createDocumentType) {
      var a = n.createDocumentType(e, r, t);
      this.locator && z(this.locator, a), le(this, a), this.doc.doctype = a;
    }
  },
  /**
   * @see org.xml.sax.ErrorHandler
   * @link http://www.saxproject.org/apidoc/org/xml/sax/ErrorHandler.html
   */
  warning: function(e) {
    console.warn("[xmldom warning]	" + e, Ee(this.locator));
  },
  error: function(e) {
    console.error("[xmldom error]	" + e, Ee(this.locator));
  },
  fatalError: function(e) {
    throw new Qr(e, this.locator);
  }
};
function Ee(e) {
  if (e)
    return `
@` + (e.systemId || "") + "#[line:" + e.lineNumber + ",col:" + e.columnNumber + "]";
}
function Je(e, r, t) {
  return typeof e == "string" ? e.substr(r, t) : e.length >= r + t || r ? new java.lang.String(e, r, t) + "" : e;
}
"endDTD,startEntity,endEntity,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,resolveEntity,getExternalSubset,notationDecl,unparsedEntityDecl".replace(/\w+/g, function(e) {
  ie.prototype[e] = function() {
    return null;
  };
});
function le(e, r) {
  e.currentElement ? e.currentElement.appendChild(r) : e.doc.appendChild(r);
}
me.__DOMHandler = ie;
me.normalizeLineEndings = Tr;
me.DOMParser = qr;
var tt = me.DOMParser;
const nt = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
  __proto__: null,
  DOMParser: tt
}, Symbol.toStringTag, { value: "Module" }));
export {
  tt as D,
  nt as i
};
