From c540073b6600a832bf4481a78973786a25146a69 Mon Sep 17 00:00:00 2001 From: evilchili Date: Thu, 27 Nov 2025 01:57:25 -0800 Subject: [PATCH] reimplemented editor --- src/ttfrog/themes/default/base.html | 1 + src/ttfrog/themes/default/page.html | 20 +- .../default/static/editor/commonmark.js | 10207 ++++++++++++++++ .../themes/default/static/editor/editor.css | 114 +- .../themes/default/static/editor/editor.js | 622 +- .../static/editor/toastui-editor-all.min.js | 24 - .../static/editor/toastui-editor.min.css | 6 - .../static/editor/turndown-plugin-gfm.js | 165 + .../themes/default/static/editor/turndown.js | 976 ++ src/ttfrog/themes/default/static/site.css | 135 +- 10 files changed, 11780 insertions(+), 490 deletions(-) create mode 100644 src/ttfrog/themes/default/static/editor/commonmark.js delete mode 100644 src/ttfrog/themes/default/static/editor/toastui-editor-all.min.js delete mode 100644 src/ttfrog/themes/default/static/editor/toastui-editor.min.css create mode 100644 src/ttfrog/themes/default/static/editor/turndown-plugin-gfm.js create mode 100644 src/ttfrog/themes/default/static/editor/turndown.js diff --git a/src/ttfrog/themes/default/base.html b/src/ttfrog/themes/default/base.html index bd4baa4..7b54c83 100644 --- a/src/ttfrog/themes/default/base.html +++ b/src/ttfrog/themes/default/base.html @@ -36,6 +36,7 @@ {% endblock %} + {% block scripts %}{% endblock %} diff --git a/src/ttfrog/themes/default/page.html b/src/ttfrog/themes/default/page.html index db4dae9..073ae20 100644 --- a/src/ttfrog/themes/default/page.html +++ b/src/ttfrog/themes/default/page.html @@ -1,26 +1,20 @@ {% extends "base.html" %} {% block styles %} -{% if user.can_write(page) %} -{% else %} - -{% endif %} {% endblock %} {% block content %} -
+
+{{ page.body }} +
{% endblock %} {% block scripts %} - {% if user.can_write(page) %} - - - - {% else %} - - - {% endif %} + + + + {% endblock %} diff --git a/src/ttfrog/themes/default/static/editor/commonmark.js b/src/ttfrog/themes/default/static/editor/commonmark.js new file mode 100644 index 0000000..80f409c --- /dev/null +++ b/src/ttfrog/themes/default/static/editor/commonmark.js @@ -0,0 +1,10207 @@ +/* commonmark 0.31.2 https://github.com/commonmark/commonmark.js @license BSD3 */ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : + typeof define === 'function' && define.amd ? define(['exports'], factory) : + (global = global || self, factory(global.commonmark = {})); +}(this, (function (exports) { 'use strict'; + + function isContainer(node) { + switch (node._type) { + case "document": + case "block_quote": + case "list": + case "item": + case "paragraph": + case "heading": + case "emph": + case "strong": + case "link": + case "image": + case "custom_inline": + case "custom_block": + return true; + default: + return false; + } + } + + var resumeAt = function(node, entering) { + this.current = node; + this.entering = entering === true; + }; + + var next = function() { + var cur = this.current; + var entering = this.entering; + + if (cur === null) { + return null; + } + + var container = isContainer(cur); + + if (entering && container) { + if (cur._firstChild) { + this.current = cur._firstChild; + this.entering = true; + } else { + // stay on node but exit + this.entering = false; + } + } else if (cur === this.root) { + this.current = null; + } else if (cur._next === null) { + this.current = cur._parent; + this.entering = false; + } else { + this.current = cur._next; + this.entering = true; + } + + return { entering: entering, node: cur }; + }; + + var NodeWalker = function(root) { + return { + current: root, + root: root, + entering: true, + next: next, + resumeAt: resumeAt + }; + }; + + var Node = function(nodeType, sourcepos) { + this._type = nodeType; + this._parent = null; + this._firstChild = null; + this._lastChild = null; + this._prev = null; + this._next = null; + this._sourcepos = sourcepos; + this._open = true; + this._string_content = null; + this._literal = null; + this._listData = {}; + this._info = null; + this._destination = null; + this._title = null; + this._isFenced = false; + this._fenceChar = null; + this._fenceLength = 0; + this._fenceOffset = null; + this._level = null; + this._onEnter = null; + this._onExit = null; + }; + + var proto = Node.prototype; + + Object.defineProperty(proto, "isContainer", { + get: function() { + return isContainer(this); + } + }); + + Object.defineProperty(proto, "type", { + get: function() { + return this._type; + } + }); + + Object.defineProperty(proto, "firstChild", { + get: function() { + return this._firstChild; + } + }); + + Object.defineProperty(proto, "lastChild", { + get: function() { + return this._lastChild; + } + }); + + Object.defineProperty(proto, "next", { + get: function() { + return this._next; + } + }); + + Object.defineProperty(proto, "prev", { + get: function() { + return this._prev; + } + }); + + Object.defineProperty(proto, "parent", { + get: function() { + return this._parent; + } + }); + + Object.defineProperty(proto, "sourcepos", { + get: function() { + return this._sourcepos; + } + }); + + Object.defineProperty(proto, "literal", { + get: function() { + return this._literal; + }, + set: function(s) { + this._literal = s; + } + }); + + Object.defineProperty(proto, "destination", { + get: function() { + return this._destination; + }, + set: function(s) { + this._destination = s; + } + }); + + Object.defineProperty(proto, "title", { + get: function() { + return this._title; + }, + set: function(s) { + this._title = s; + } + }); + + Object.defineProperty(proto, "info", { + get: function() { + return this._info; + }, + set: function(s) { + this._info = s; + } + }); + + Object.defineProperty(proto, "level", { + get: function() { + return this._level; + }, + set: function(s) { + this._level = s; + } + }); + + Object.defineProperty(proto, "listType", { + get: function() { + return this._listData.type; + }, + set: function(t) { + this._listData.type = t; + } + }); + + Object.defineProperty(proto, "listTight", { + get: function() { + return this._listData.tight; + }, + set: function(t) { + this._listData.tight = t; + } + }); + + Object.defineProperty(proto, "listStart", { + get: function() { + return this._listData.start; + }, + set: function(n) { + this._listData.start = n; + } + }); + + Object.defineProperty(proto, "listDelimiter", { + get: function() { + return this._listData.delimiter; + }, + set: function(delim) { + this._listData.delimiter = delim; + } + }); + + Object.defineProperty(proto, "onEnter", { + get: function() { + return this._onEnter; + }, + set: function(s) { + this._onEnter = s; + } + }); + + Object.defineProperty(proto, "onExit", { + get: function() { + return this._onExit; + }, + set: function(s) { + this._onExit = s; + } + }); + + Node.prototype.appendChild = function(child) { + child.unlink(); + child._parent = this; + if (this._lastChild) { + this._lastChild._next = child; + child._prev = this._lastChild; + this._lastChild = child; + } else { + this._firstChild = child; + this._lastChild = child; + } + }; + + Node.prototype.prependChild = function(child) { + child.unlink(); + child._parent = this; + if (this._firstChild) { + this._firstChild._prev = child; + child._next = this._firstChild; + this._firstChild = child; + } else { + this._firstChild = child; + this._lastChild = child; + } + }; + + Node.prototype.unlink = function() { + if (this._prev) { + this._prev._next = this._next; + } else if (this._parent) { + this._parent._firstChild = this._next; + } + if (this._next) { + this._next._prev = this._prev; + } else if (this._parent) { + this._parent._lastChild = this._prev; + } + this._parent = null; + this._next = null; + this._prev = null; + }; + + Node.prototype.insertAfter = function(sibling) { + sibling.unlink(); + sibling._next = this._next; + if (sibling._next) { + sibling._next._prev = sibling; + } + sibling._prev = this; + this._next = sibling; + sibling._parent = this._parent; + if (!sibling._next) { + sibling._parent._lastChild = sibling; + } + }; + + Node.prototype.insertBefore = function(sibling) { + sibling.unlink(); + sibling._prev = this._prev; + if (sibling._prev) { + sibling._prev._next = sibling; + } + sibling._next = this; + this._prev = sibling; + sibling._parent = this._parent; + if (!sibling._prev) { + sibling._parent._firstChild = sibling; + } + }; + + Node.prototype.walker = function() { + var walker = new NodeWalker(this); + return walker; + }; + + /* Example of use of walker: + + var walker = w.walker(); + var event; + + while (event = walker.next()) { + console.log(event.entering, event.node.type); + } + + */ + + var encodeCache = {}; + + + // Create a lookup array where anything but characters in `chars` string + // and alphanumeric chars is percent-encoded. + // + function getEncodeCache(exclude) { + var i, ch, cache = encodeCache[exclude]; + if (cache) { return cache; } + + cache = encodeCache[exclude] = []; + + for (i = 0; i < 128; i++) { + ch = String.fromCharCode(i); + + if (/^[0-9a-z]$/i.test(ch)) { + // always allow unencoded alphanumeric characters + cache.push(ch); + } else { + cache.push('%' + ('0' + i.toString(16).toUpperCase()).slice(-2)); + } + } + + for (i = 0; i < exclude.length; i++) { + cache[exclude.charCodeAt(i)] = exclude[i]; + } + + return cache; + } + + + // Encode unsafe characters with percent-encoding, skipping already + // encoded sequences. + // + // - string - string to encode + // - exclude - list of characters to ignore (in addition to a-zA-Z0-9) + // - keepEscaped - don't encode '%' in a correct escape sequence (default: true) + // + function encode(string, exclude, keepEscaped) { + var i, l, code, nextCode, cache, + result = ''; + + if (typeof exclude !== 'string') { + // encode(string, keepEscaped) + keepEscaped = exclude; + exclude = encode.defaultChars; + } + + if (typeof keepEscaped === 'undefined') { + keepEscaped = true; + } + + cache = getEncodeCache(exclude); + + for (i = 0, l = string.length; i < l; i++) { + code = string.charCodeAt(i); + + if (keepEscaped && code === 0x25 /* % */ && i + 2 < l) { + if (/^[0-9a-f]{2}$/i.test(string.slice(i + 1, i + 3))) { + result += string.slice(i, i + 3); + i += 2; + continue; + } + } + + if (code < 128) { + result += cache[code]; + continue; + } + + if (code >= 0xD800 && code <= 0xDFFF) { + if (code >= 0xD800 && code <= 0xDBFF && i + 1 < l) { + nextCode = string.charCodeAt(i + 1); + if (nextCode >= 0xDC00 && nextCode <= 0xDFFF) { + result += encodeURIComponent(string[i] + string[i + 1]); + i++; + continue; + } + } + result += '%EF%BF%BD'; + continue; + } + + result += encodeURIComponent(string[i]); + } + + return result; + } + + encode.defaultChars = ";/?:@&=+$,-_.!~*'()#"; + encode.componentChars = "-_.!~*'()"; + + + var encode_1 = encode; + + var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; + + function unwrapExports (x) { + return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x; + } + + function createCommonjsModule(fn, module) { + return module = { exports: {} }, fn(module, module.exports), module.exports; + } + + function getCjsExportFromNamespace (n) { + return n && n['default'] || n; + } + + var decodeDataHtml = createCommonjsModule(function (module, exports) { + Object.defineProperty(exports, "__esModule", { value: true }); + // Generated using scripts/write-decode-map.ts + // prettier-ignore + exports.default = new Uint16Array([14866, 60, 237, 340, 721, 1312, 1562, 1654, 1838, 1957, 2183, 2239, 2301, 2958, 3037, 3893, 4123, 4298, 4330, 4801, 5191, 5395, 5752, 5903, 5943, 5972, 6050, 0, 0, 0, 0, 0, 0, 6135, 6565, 7422, 8183, 8738, 9242, 9503, 9938, 10189, 10573, 10637, 10715, 11950, 12246, 13539, 13950, 14445, 14533, 15364, 16514, 16980, 17390, 17763, 17849, 18036, 18125, 4096, 69, 77, 97, 98, 99, 102, 103, 108, 109, 110, 111, 112, 114, 115, 116, 117, 92, 100, 106, 115, 122, 137, 142, 151, 157, 163, 167, 182, 196, 204, 220, 229, 108, 105, 103, 33024, 198, 59, 32768, 198, 80, 33024, 38, 59, 32768, 38, 99, 117, 116, 101, 33024, 193, 59, 32768, 193, 114, 101, 118, 101, 59, 32768, 258, 512, 105, 121, 127, 134, 114, 99, 33024, 194, 59, 32768, 194, 59, 32768, 1040, 114, 59, 32896, 55349, 56580, 114, 97, 118, 101, 33024, 192, 59, 32768, 192, 112, 104, 97, 59, 32768, 913, 97, 99, 114, 59, 32768, 256, 100, 59, 32768, 10835, 512, 103, 112, 172, 177, 111, 110, 59, 32768, 260, 102, 59, 32896, 55349, 56632, 112, 108, 121, 70, 117, 110, 99, 116, 105, 111, 110, 59, 32768, 8289, 105, 110, 103, 33024, 197, 59, 32768, 197, 512, 99, 115, 209, 214, 114, 59, 32896, 55349, 56476, 105, 103, 110, 59, 32768, 8788, 105, 108, 100, 101, 33024, 195, 59, 32768, 195, 109, 108, 33024, 196, 59, 32768, 196, 2048, 97, 99, 101, 102, 111, 114, 115, 117, 253, 278, 282, 310, 315, 321, 327, 332, 512, 99, 114, 258, 267, 107, 115, 108, 97, 115, 104, 59, 32768, 8726, 583, 271, 274, 59, 32768, 10983, 101, 100, 59, 32768, 8966, 121, 59, 32768, 1041, 768, 99, 114, 116, 289, 296, 306, 97, 117, 115, 101, 59, 32768, 8757, 110, 111, 117, 108, 108, 105, 115, 59, 32768, 8492, 97, 59, 32768, 914, 114, 59, 32896, 55349, 56581, 112, 102, 59, 32896, 55349, 56633, 101, 118, 101, 59, 32768, 728, 99, 114, 59, 32768, 8492, 109, 112, 101, 113, 59, 32768, 8782, 3584, 72, 79, 97, 99, 100, 101, 102, 104, 105, 108, 111, 114, 115, 117, 368, 373, 380, 426, 461, 466, 487, 491, 495, 533, 593, 695, 701, 707, 99, 121, 59, 32768, 1063, 80, 89, 33024, 169, 59, 32768, 169, 768, 99, 112, 121, 387, 393, 419, 117, 116, 101, 59, 32768, 262, 512, 59, 105, 398, 400, 32768, 8914, 116, 97, 108, 68, 105, 102, 102, 101, 114, 101, 110, 116, 105, 97, 108, 68, 59, 32768, 8517, 108, 101, 121, 115, 59, 32768, 8493, 1024, 97, 101, 105, 111, 435, 441, 449, 454, 114, 111, 110, 59, 32768, 268, 100, 105, 108, 33024, 199, 59, 32768, 199, 114, 99, 59, 32768, 264, 110, 105, 110, 116, 59, 32768, 8752, 111, 116, 59, 32768, 266, 512, 100, 110, 471, 478, 105, 108, 108, 97, 59, 32768, 184, 116, 101, 114, 68, 111, 116, 59, 32768, 183, 114, 59, 32768, 8493, 105, 59, 32768, 935, 114, 99, 108, 101, 1024, 68, 77, 80, 84, 508, 513, 520, 526, 111, 116, 59, 32768, 8857, 105, 110, 117, 115, 59, 32768, 8854, 108, 117, 115, 59, 32768, 8853, 105, 109, 101, 115, 59, 32768, 8855, 111, 512, 99, 115, 539, 562, 107, 119, 105, 115, 101, 67, 111, 110, 116, 111, 117, 114, 73, 110, 116, 101, 103, 114, 97, 108, 59, 32768, 8754, 101, 67, 117, 114, 108, 121, 512, 68, 81, 573, 586, 111, 117, 98, 108, 101, 81, 117, 111, 116, 101, 59, 32768, 8221, 117, 111, 116, 101, 59, 32768, 8217, 1024, 108, 110, 112, 117, 602, 614, 648, 664, 111, 110, 512, 59, 101, 609, 611, 32768, 8759, 59, 32768, 10868, 768, 103, 105, 116, 621, 629, 634, 114, 117, 101, 110, 116, 59, 32768, 8801, 110, 116, 59, 32768, 8751, 111, 117, 114, 73, 110, 116, 101, 103, 114, 97, 108, 59, 32768, 8750, 512, 102, 114, 653, 656, 59, 32768, 8450, 111, 100, 117, 99, 116, 59, 32768, 8720, 110, 116, 101, 114, 67, 108, 111, 99, 107, 119, 105, 115, 101, 67, 111, 110, 116, 111, 117, 114, 73, 110, 116, 101, 103, 114, 97, 108, 59, 32768, 8755, 111, 115, 115, 59, 32768, 10799, 99, 114, 59, 32896, 55349, 56478, 112, 512, 59, 67, 713, 715, 32768, 8915, 97, 112, 59, 32768, 8781, 2816, 68, 74, 83, 90, 97, 99, 101, 102, 105, 111, 115, 743, 758, 763, 768, 773, 795, 809, 821, 826, 910, 1295, 512, 59, 111, 748, 750, 32768, 8517, 116, 114, 97, 104, 100, 59, 32768, 10513, 99, 121, 59, 32768, 1026, 99, 121, 59, 32768, 1029, 99, 121, 59, 32768, 1039, 768, 103, 114, 115, 780, 786, 790, 103, 101, 114, 59, 32768, 8225, 114, 59, 32768, 8609, 104, 118, 59, 32768, 10980, 512, 97, 121, 800, 806, 114, 111, 110, 59, 32768, 270, 59, 32768, 1044, 108, 512, 59, 116, 815, 817, 32768, 8711, 97, 59, 32768, 916, 114, 59, 32896, 55349, 56583, 512, 97, 102, 831, 897, 512, 99, 109, 836, 891, 114, 105, 116, 105, 99, 97, 108, 1024, 65, 68, 71, 84, 852, 859, 877, 884, 99, 117, 116, 101, 59, 32768, 180, 111, 581, 864, 867, 59, 32768, 729, 98, 108, 101, 65, 99, 117, 116, 101, 59, 32768, 733, 114, 97, 118, 101, 59, 32768, 96, 105, 108, 100, 101, 59, 32768, 732, 111, 110, 100, 59, 32768, 8900, 102, 101, 114, 101, 110, 116, 105, 97, 108, 68, 59, 32768, 8518, 2113, 920, 0, 0, 0, 925, 946, 0, 1139, 102, 59, 32896, 55349, 56635, 768, 59, 68, 69, 931, 933, 938, 32768, 168, 111, 116, 59, 32768, 8412, 113, 117, 97, 108, 59, 32768, 8784, 98, 108, 101, 1536, 67, 68, 76, 82, 85, 86, 961, 978, 996, 1080, 1101, 1125, 111, 110, 116, 111, 117, 114, 73, 110, 116, 101, 103, 114, 97, 108, 59, 32768, 8751, 111, 1093, 985, 0, 0, 988, 59, 32768, 168, 110, 65, 114, 114, 111, 119, 59, 32768, 8659, 512, 101, 111, 1001, 1034, 102, 116, 768, 65, 82, 84, 1010, 1017, 1029, 114, 114, 111, 119, 59, 32768, 8656, 105, 103, 104, 116, 65, 114, 114, 111, 119, 59, 32768, 8660, 101, 101, 59, 32768, 10980, 110, 103, 512, 76, 82, 1041, 1068, 101, 102, 116, 512, 65, 82, 1049, 1056, 114, 114, 111, 119, 59, 32768, 10232, 105, 103, 104, 116, 65, 114, 114, 111, 119, 59, 32768, 10234, 105, 103, 104, 116, 65, 114, 114, 111, 119, 59, 32768, 10233, 105, 103, 104, 116, 512, 65, 84, 1089, 1096, 114, 114, 111, 119, 59, 32768, 8658, 101, 101, 59, 32768, 8872, 112, 1042, 1108, 0, 0, 1115, 114, 114, 111, 119, 59, 32768, 8657, 111, 119, 110, 65, 114, 114, 111, 119, 59, 32768, 8661, 101, 114, 116, 105, 99, 97, 108, 66, 97, 114, 59, 32768, 8741, 110, 1536, 65, 66, 76, 82, 84, 97, 1152, 1179, 1186, 1236, 1272, 1288, 114, 114, 111, 119, 768, 59, 66, 85, 1163, 1165, 1170, 32768, 8595, 97, 114, 59, 32768, 10515, 112, 65, 114, 114, 111, 119, 59, 32768, 8693, 114, 101, 118, 101, 59, 32768, 785, 101, 102, 116, 1315, 1196, 0, 1209, 0, 1220, 105, 103, 104, 116, 86, 101, 99, 116, 111, 114, 59, 32768, 10576, 101, 101, 86, 101, 99, 116, 111, 114, 59, 32768, 10590, 101, 99, 116, 111, 114, 512, 59, 66, 1229, 1231, 32768, 8637, 97, 114, 59, 32768, 10582, 105, 103, 104, 116, 805, 1245, 0, 1256, 101, 101, 86, 101, 99, 116, 111, 114, 59, 32768, 10591, 101, 99, 116, 111, 114, 512, 59, 66, 1265, 1267, 32768, 8641, 97, 114, 59, 32768, 10583, 101, 101, 512, 59, 65, 1279, 1281, 32768, 8868, 114, 114, 111, 119, 59, 32768, 8615, 114, 114, 111, 119, 59, 32768, 8659, 512, 99, 116, 1300, 1305, 114, 59, 32896, 55349, 56479, 114, 111, 107, 59, 32768, 272, 4096, 78, 84, 97, 99, 100, 102, 103, 108, 109, 111, 112, 113, 115, 116, 117, 120, 1344, 1348, 1354, 1363, 1386, 1391, 1396, 1405, 1413, 1460, 1475, 1483, 1514, 1527, 1531, 1538, 71, 59, 32768, 330, 72, 33024, 208, 59, 32768, 208, 99, 117, 116, 101, 33024, 201, 59, 32768, 201, 768, 97, 105, 121, 1370, 1376, 1383, 114, 111, 110, 59, 32768, 282, 114, 99, 33024, 202, 59, 32768, 202, 59, 32768, 1069, 111, 116, 59, 32768, 278, 114, 59, 32896, 55349, 56584, 114, 97, 118, 101, 33024, 200, 59, 32768, 200, 101, 109, 101, 110, 116, 59, 32768, 8712, 512, 97, 112, 1418, 1423, 99, 114, 59, 32768, 274, 116, 121, 1060, 1431, 0, 0, 1444, 109, 97, 108, 108, 83, 113, 117, 97, 114, 101, 59, 32768, 9723, 101, 114, 121, 83, 109, 97, 108, 108, 83, 113, 117, 97, 114, 101, 59, 32768, 9643, 512, 103, 112, 1465, 1470, 111, 110, 59, 32768, 280, 102, 59, 32896, 55349, 56636, 115, 105, 108, 111, 110, 59, 32768, 917, 117, 512, 97, 105, 1489, 1504, 108, 512, 59, 84, 1495, 1497, 32768, 10869, 105, 108, 100, 101, 59, 32768, 8770, 108, 105, 98, 114, 105, 117, 109, 59, 32768, 8652, 512, 99, 105, 1519, 1523, 114, 59, 32768, 8496, 109, 59, 32768, 10867, 97, 59, 32768, 919, 109, 108, 33024, 203, 59, 32768, 203, 512, 105, 112, 1543, 1549, 115, 116, 115, 59, 32768, 8707, 111, 110, 101, 110, 116, 105, 97, 108, 69, 59, 32768, 8519, 1280, 99, 102, 105, 111, 115, 1572, 1576, 1581, 1620, 1648, 121, 59, 32768, 1060, 114, 59, 32896, 55349, 56585, 108, 108, 101, 100, 1060, 1591, 0, 0, 1604, 109, 97, 108, 108, 83, 113, 117, 97, 114, 101, 59, 32768, 9724, 101, 114, 121, 83, 109, 97, 108, 108, 83, 113, 117, 97, 114, 101, 59, 32768, 9642, 1601, 1628, 0, 1633, 0, 0, 1639, 102, 59, 32896, 55349, 56637, 65, 108, 108, 59, 32768, 8704, 114, 105, 101, 114, 116, 114, 102, 59, 32768, 8497, 99, 114, 59, 32768, 8497, 3072, 74, 84, 97, 98, 99, 100, 102, 103, 111, 114, 115, 116, 1678, 1683, 1688, 1701, 1708, 1729, 1734, 1739, 1742, 1748, 1828, 1834, 99, 121, 59, 32768, 1027, 33024, 62, 59, 32768, 62, 109, 109, 97, 512, 59, 100, 1696, 1698, 32768, 915, 59, 32768, 988, 114, 101, 118, 101, 59, 32768, 286, 768, 101, 105, 121, 1715, 1721, 1726, 100, 105, 108, 59, 32768, 290, 114, 99, 59, 32768, 284, 59, 32768, 1043, 111, 116, 59, 32768, 288, 114, 59, 32896, 55349, 56586, 59, 32768, 8921, 112, 102, 59, 32896, 55349, 56638, 101, 97, 116, 101, 114, 1536, 69, 70, 71, 76, 83, 84, 1766, 1783, 1794, 1803, 1809, 1821, 113, 117, 97, 108, 512, 59, 76, 1775, 1777, 32768, 8805, 101, 115, 115, 59, 32768, 8923, 117, 108, 108, 69, 113, 117, 97, 108, 59, 32768, 8807, 114, 101, 97, 116, 101, 114, 59, 32768, 10914, 101, 115, 115, 59, 32768, 8823, 108, 97, 110, 116, 69, 113, 117, 97, 108, 59, 32768, 10878, 105, 108, 100, 101, 59, 32768, 8819, 99, 114, 59, 32896, 55349, 56482, 59, 32768, 8811, 2048, 65, 97, 99, 102, 105, 111, 115, 117, 1854, 1861, 1874, 1880, 1884, 1897, 1919, 1934, 82, 68, 99, 121, 59, 32768, 1066, 512, 99, 116, 1866, 1871, 101, 107, 59, 32768, 711, 59, 32768, 94, 105, 114, 99, 59, 32768, 292, 114, 59, 32768, 8460, 108, 98, 101, 114, 116, 83, 112, 97, 99, 101, 59, 32768, 8459, 833, 1902, 0, 1906, 102, 59, 32768, 8461, 105, 122, 111, 110, 116, 97, 108, 76, 105, 110, 101, 59, 32768, 9472, 512, 99, 116, 1924, 1928, 114, 59, 32768, 8459, 114, 111, 107, 59, 32768, 294, 109, 112, 533, 1940, 1950, 111, 119, 110, 72, 117, 109, 112, 59, 32768, 8782, 113, 117, 97, 108, 59, 32768, 8783, 3584, 69, 74, 79, 97, 99, 100, 102, 103, 109, 110, 111, 115, 116, 117, 1985, 1990, 1996, 2001, 2010, 2025, 2030, 2034, 2043, 2077, 2134, 2155, 2160, 2167, 99, 121, 59, 32768, 1045, 108, 105, 103, 59, 32768, 306, 99, 121, 59, 32768, 1025, 99, 117, 116, 101, 33024, 205, 59, 32768, 205, 512, 105, 121, 2015, 2022, 114, 99, 33024, 206, 59, 32768, 206, 59, 32768, 1048, 111, 116, 59, 32768, 304, 114, 59, 32768, 8465, 114, 97, 118, 101, 33024, 204, 59, 32768, 204, 768, 59, 97, 112, 2050, 2052, 2070, 32768, 8465, 512, 99, 103, 2057, 2061, 114, 59, 32768, 298, 105, 110, 97, 114, 121, 73, 59, 32768, 8520, 108, 105, 101, 115, 59, 32768, 8658, 837, 2082, 0, 2110, 512, 59, 101, 2086, 2088, 32768, 8748, 512, 103, 114, 2093, 2099, 114, 97, 108, 59, 32768, 8747, 115, 101, 99, 116, 105, 111, 110, 59, 32768, 8898, 105, 115, 105, 98, 108, 101, 512, 67, 84, 2120, 2127, 111, 109, 109, 97, 59, 32768, 8291, 105, 109, 101, 115, 59, 32768, 8290, 768, 103, 112, 116, 2141, 2146, 2151, 111, 110, 59, 32768, 302, 102, 59, 32896, 55349, 56640, 97, 59, 32768, 921, 99, 114, 59, 32768, 8464, 105, 108, 100, 101, 59, 32768, 296, 828, 2172, 0, 2177, 99, 121, 59, 32768, 1030, 108, 33024, 207, 59, 32768, 207, 1280, 99, 102, 111, 115, 117, 2193, 2206, 2211, 2217, 2232, 512, 105, 121, 2198, 2203, 114, 99, 59, 32768, 308, 59, 32768, 1049, 114, 59, 32896, 55349, 56589, 112, 102, 59, 32896, 55349, 56641, 820, 2222, 0, 2227, 114, 59, 32896, 55349, 56485, 114, 99, 121, 59, 32768, 1032, 107, 99, 121, 59, 32768, 1028, 1792, 72, 74, 97, 99, 102, 111, 115, 2253, 2258, 2263, 2269, 2283, 2288, 2294, 99, 121, 59, 32768, 1061, 99, 121, 59, 32768, 1036, 112, 112, 97, 59, 32768, 922, 512, 101, 121, 2274, 2280, 100, 105, 108, 59, 32768, 310, 59, 32768, 1050, 114, 59, 32896, 55349, 56590, 112, 102, 59, 32896, 55349, 56642, 99, 114, 59, 32896, 55349, 56486, 2816, 74, 84, 97, 99, 101, 102, 108, 109, 111, 115, 116, 2323, 2328, 2333, 2374, 2396, 2775, 2780, 2797, 2804, 2934, 2954, 99, 121, 59, 32768, 1033, 33024, 60, 59, 32768, 60, 1280, 99, 109, 110, 112, 114, 2344, 2350, 2356, 2360, 2370, 117, 116, 101, 59, 32768, 313, 98, 100, 97, 59, 32768, 923, 103, 59, 32768, 10218, 108, 97, 99, 101, 116, 114, 102, 59, 32768, 8466, 114, 59, 32768, 8606, 768, 97, 101, 121, 2381, 2387, 2393, 114, 111, 110, 59, 32768, 317, 100, 105, 108, 59, 32768, 315, 59, 32768, 1051, 512, 102, 115, 2401, 2702, 116, 2560, 65, 67, 68, 70, 82, 84, 85, 86, 97, 114, 2423, 2470, 2479, 2530, 2537, 2561, 2618, 2666, 2683, 2690, 512, 110, 114, 2428, 2441, 103, 108, 101, 66, 114, 97, 99, 107, 101, 116, 59, 32768, 10216, 114, 111, 119, 768, 59, 66, 82, 2451, 2453, 2458, 32768, 8592, 97, 114, 59, 32768, 8676, 105, 103, 104, 116, 65, 114, 114, 111, 119, 59, 32768, 8646, 101, 105, 108, 105, 110, 103, 59, 32768, 8968, 111, 838, 2485, 0, 2498, 98, 108, 101, 66, 114, 97, 99, 107, 101, 116, 59, 32768, 10214, 110, 805, 2503, 0, 2514, 101, 101, 86, 101, 99, 116, 111, 114, 59, 32768, 10593, 101, 99, 116, 111, 114, 512, 59, 66, 2523, 2525, 32768, 8643, 97, 114, 59, 32768, 10585, 108, 111, 111, 114, 59, 32768, 8970, 105, 103, 104, 116, 512, 65, 86, 2546, 2553, 114, 114, 111, 119, 59, 32768, 8596, 101, 99, 116, 111, 114, 59, 32768, 10574, 512, 101, 114, 2566, 2591, 101, 768, 59, 65, 86, 2574, 2576, 2583, 32768, 8867, 114, 114, 111, 119, 59, 32768, 8612, 101, 99, 116, 111, 114, 59, 32768, 10586, 105, 97, 110, 103, 108, 101, 768, 59, 66, 69, 2604, 2606, 2611, 32768, 8882, 97, 114, 59, 32768, 10703, 113, 117, 97, 108, 59, 32768, 8884, 112, 768, 68, 84, 86, 2626, 2638, 2649, 111, 119, 110, 86, 101, 99, 116, 111, 114, 59, 32768, 10577, 101, 101, 86, 101, 99, 116, 111, 114, 59, 32768, 10592, 101, 99, 116, 111, 114, 512, 59, 66, 2659, 2661, 32768, 8639, 97, 114, 59, 32768, 10584, 101, 99, 116, 111, 114, 512, 59, 66, 2676, 2678, 32768, 8636, 97, 114, 59, 32768, 10578, 114, 114, 111, 119, 59, 32768, 8656, 105, 103, 104, 116, 97, 114, 114, 111, 119, 59, 32768, 8660, 115, 1536, 69, 70, 71, 76, 83, 84, 2716, 2730, 2741, 2750, 2756, 2768, 113, 117, 97, 108, 71, 114, 101, 97, 116, 101, 114, 59, 32768, 8922, 117, 108, 108, 69, 113, 117, 97, 108, 59, 32768, 8806, 114, 101, 97, 116, 101, 114, 59, 32768, 8822, 101, 115, 115, 59, 32768, 10913, 108, 97, 110, 116, 69, 113, 117, 97, 108, 59, 32768, 10877, 105, 108, 100, 101, 59, 32768, 8818, 114, 59, 32896, 55349, 56591, 512, 59, 101, 2785, 2787, 32768, 8920, 102, 116, 97, 114, 114, 111, 119, 59, 32768, 8666, 105, 100, 111, 116, 59, 32768, 319, 768, 110, 112, 119, 2811, 2899, 2904, 103, 1024, 76, 82, 108, 114, 2821, 2848, 2860, 2887, 101, 102, 116, 512, 65, 82, 2829, 2836, 114, 114, 111, 119, 59, 32768, 10229, 105, 103, 104, 116, 65, 114, 114, 111, 119, 59, 32768, 10231, 105, 103, 104, 116, 65, 114, 114, 111, 119, 59, 32768, 10230, 101, 102, 116, 512, 97, 114, 2868, 2875, 114, 114, 111, 119, 59, 32768, 10232, 105, 103, 104, 116, 97, 114, 114, 111, 119, 59, 32768, 10234, 105, 103, 104, 116, 97, 114, 114, 111, 119, 59, 32768, 10233, 102, 59, 32896, 55349, 56643, 101, 114, 512, 76, 82, 2911, 2922, 101, 102, 116, 65, 114, 114, 111, 119, 59, 32768, 8601, 105, 103, 104, 116, 65, 114, 114, 111, 119, 59, 32768, 8600, 768, 99, 104, 116, 2941, 2945, 2948, 114, 59, 32768, 8466, 59, 32768, 8624, 114, 111, 107, 59, 32768, 321, 59, 32768, 8810, 2048, 97, 99, 101, 102, 105, 111, 115, 117, 2974, 2978, 2982, 3007, 3012, 3022, 3028, 3033, 112, 59, 32768, 10501, 121, 59, 32768, 1052, 512, 100, 108, 2987, 2998, 105, 117, 109, 83, 112, 97, 99, 101, 59, 32768, 8287, 108, 105, 110, 116, 114, 102, 59, 32768, 8499, 114, 59, 32896, 55349, 56592, 110, 117, 115, 80, 108, 117, 115, 59, 32768, 8723, 112, 102, 59, 32896, 55349, 56644, 99, 114, 59, 32768, 8499, 59, 32768, 924, 2304, 74, 97, 99, 101, 102, 111, 115, 116, 117, 3055, 3060, 3067, 3089, 3201, 3206, 3874, 3880, 3889, 99, 121, 59, 32768, 1034, 99, 117, 116, 101, 59, 32768, 323, 768, 97, 101, 121, 3074, 3080, 3086, 114, 111, 110, 59, 32768, 327, 100, 105, 108, 59, 32768, 325, 59, 32768, 1053, 768, 103, 115, 119, 3096, 3160, 3194, 97, 116, 105, 118, 101, 768, 77, 84, 86, 3108, 3121, 3145, 101, 100, 105, 117, 109, 83, 112, 97, 99, 101, 59, 32768, 8203, 104, 105, 512, 99, 110, 3128, 3137, 107, 83, 112, 97, 99, 101, 59, 32768, 8203, 83, 112, 97, 99, 101, 59, 32768, 8203, 101, 114, 121, 84, 104, 105, 110, 83, 112, 97, 99, 101, 59, 32768, 8203, 116, 101, 100, 512, 71, 76, 3168, 3184, 114, 101, 97, 116, 101, 114, 71, 114, 101, 97, 116, 101, 114, 59, 32768, 8811, 101, 115, 115, 76, 101, 115, 115, 59, 32768, 8810, 76, 105, 110, 101, 59, 32768, 10, 114, 59, 32896, 55349, 56593, 1024, 66, 110, 112, 116, 3215, 3222, 3238, 3242, 114, 101, 97, 107, 59, 32768, 8288, 66, 114, 101, 97, 107, 105, 110, 103, 83, 112, 97, 99, 101, 59, 32768, 160, 102, 59, 32768, 8469, 3328, 59, 67, 68, 69, 71, 72, 76, 78, 80, 82, 83, 84, 86, 3269, 3271, 3293, 3312, 3352, 3430, 3455, 3551, 3589, 3625, 3678, 3821, 3861, 32768, 10988, 512, 111, 117, 3276, 3286, 110, 103, 114, 117, 101, 110, 116, 59, 32768, 8802, 112, 67, 97, 112, 59, 32768, 8813, 111, 117, 98, 108, 101, 86, 101, 114, 116, 105, 99, 97, 108, 66, 97, 114, 59, 32768, 8742, 768, 108, 113, 120, 3319, 3327, 3345, 101, 109, 101, 110, 116, 59, 32768, 8713, 117, 97, 108, 512, 59, 84, 3335, 3337, 32768, 8800, 105, 108, 100, 101, 59, 32896, 8770, 824, 105, 115, 116, 115, 59, 32768, 8708, 114, 101, 97, 116, 101, 114, 1792, 59, 69, 70, 71, 76, 83, 84, 3373, 3375, 3382, 3394, 3404, 3410, 3423, 32768, 8815, 113, 117, 97, 108, 59, 32768, 8817, 117, 108, 108, 69, 113, 117, 97, 108, 59, 32896, 8807, 824, 114, 101, 97, 116, 101, 114, 59, 32896, 8811, 824, 101, 115, 115, 59, 32768, 8825, 108, 97, 110, 116, 69, 113, 117, 97, 108, 59, 32896, 10878, 824, 105, 108, 100, 101, 59, 32768, 8821, 117, 109, 112, 533, 3437, 3448, 111, 119, 110, 72, 117, 109, 112, 59, 32896, 8782, 824, 113, 117, 97, 108, 59, 32896, 8783, 824, 101, 512, 102, 115, 3461, 3492, 116, 84, 114, 105, 97, 110, 103, 108, 101, 768, 59, 66, 69, 3477, 3479, 3485, 32768, 8938, 97, 114, 59, 32896, 10703, 824, 113, 117, 97, 108, 59, 32768, 8940, 115, 1536, 59, 69, 71, 76, 83, 84, 3506, 3508, 3515, 3524, 3531, 3544, 32768, 8814, 113, 117, 97, 108, 59, 32768, 8816, 114, 101, 97, 116, 101, 114, 59, 32768, 8824, 101, 115, 115, 59, 32896, 8810, 824, 108, 97, 110, 116, 69, 113, 117, 97, 108, 59, 32896, 10877, 824, 105, 108, 100, 101, 59, 32768, 8820, 101, 115, 116, 101, 100, 512, 71, 76, 3561, 3578, 114, 101, 97, 116, 101, 114, 71, 114, 101, 97, 116, 101, 114, 59, 32896, 10914, 824, 101, 115, 115, 76, 101, 115, 115, 59, 32896, 10913, 824, 114, 101, 99, 101, 100, 101, 115, 768, 59, 69, 83, 3603, 3605, 3613, 32768, 8832, 113, 117, 97, 108, 59, 32896, 10927, 824, 108, 97, 110, 116, 69, 113, 117, 97, 108, 59, 32768, 8928, 512, 101, 105, 3630, 3645, 118, 101, 114, 115, 101, 69, 108, 101, 109, 101, 110, 116, 59, 32768, 8716, 103, 104, 116, 84, 114, 105, 97, 110, 103, 108, 101, 768, 59, 66, 69, 3663, 3665, 3671, 32768, 8939, 97, 114, 59, 32896, 10704, 824, 113, 117, 97, 108, 59, 32768, 8941, 512, 113, 117, 3683, 3732, 117, 97, 114, 101, 83, 117, 512, 98, 112, 3694, 3712, 115, 101, 116, 512, 59, 69, 3702, 3705, 32896, 8847, 824, 113, 117, 97, 108, 59, 32768, 8930, 101, 114, 115, 101, 116, 512, 59, 69, 3722, 3725, 32896, 8848, 824, 113, 117, 97, 108, 59, 32768, 8931, 768, 98, 99, 112, 3739, 3757, 3801, 115, 101, 116, 512, 59, 69, 3747, 3750, 32896, 8834, 8402, 113, 117, 97, 108, 59, 32768, 8840, 99, 101, 101, 100, 115, 1024, 59, 69, 83, 84, 3771, 3773, 3781, 3793, 32768, 8833, 113, 117, 97, 108, 59, 32896, 10928, 824, 108, 97, 110, 116, 69, 113, 117, 97, 108, 59, 32768, 8929, 105, 108, 100, 101, 59, 32896, 8831, 824, 101, 114, 115, 101, 116, 512, 59, 69, 3811, 3814, 32896, 8835, 8402, 113, 117, 97, 108, 59, 32768, 8841, 105, 108, 100, 101, 1024, 59, 69, 70, 84, 3834, 3836, 3843, 3854, 32768, 8769, 113, 117, 97, 108, 59, 32768, 8772, 117, 108, 108, 69, 113, 117, 97, 108, 59, 32768, 8775, 105, 108, 100, 101, 59, 32768, 8777, 101, 114, 116, 105, 99, 97, 108, 66, 97, 114, 59, 32768, 8740, 99, 114, 59, 32896, 55349, 56489, 105, 108, 100, 101, 33024, 209, 59, 32768, 209, 59, 32768, 925, 3584, 69, 97, 99, 100, 102, 103, 109, 111, 112, 114, 115, 116, 117, 118, 3921, 3927, 3936, 3951, 3958, 3963, 3972, 3996, 4002, 4034, 4037, 4055, 4071, 4078, 108, 105, 103, 59, 32768, 338, 99, 117, 116, 101, 33024, 211, 59, 32768, 211, 512, 105, 121, 3941, 3948, 114, 99, 33024, 212, 59, 32768, 212, 59, 32768, 1054, 98, 108, 97, 99, 59, 32768, 336, 114, 59, 32896, 55349, 56594, 114, 97, 118, 101, 33024, 210, 59, 32768, 210, 768, 97, 101, 105, 3979, 3984, 3989, 99, 114, 59, 32768, 332, 103, 97, 59, 32768, 937, 99, 114, 111, 110, 59, 32768, 927, 112, 102, 59, 32896, 55349, 56646, 101, 110, 67, 117, 114, 108, 121, 512, 68, 81, 4014, 4027, 111, 117, 98, 108, 101, 81, 117, 111, 116, 101, 59, 32768, 8220, 117, 111, 116, 101, 59, 32768, 8216, 59, 32768, 10836, 512, 99, 108, 4042, 4047, 114, 59, 32896, 55349, 56490, 97, 115, 104, 33024, 216, 59, 32768, 216, 105, 573, 4060, 4067, 100, 101, 33024, 213, 59, 32768, 213, 101, 115, 59, 32768, 10807, 109, 108, 33024, 214, 59, 32768, 214, 101, 114, 512, 66, 80, 4085, 4109, 512, 97, 114, 4090, 4094, 114, 59, 32768, 8254, 97, 99, 512, 101, 107, 4101, 4104, 59, 32768, 9182, 101, 116, 59, 32768, 9140, 97, 114, 101, 110, 116, 104, 101, 115, 105, 115, 59, 32768, 9180, 2304, 97, 99, 102, 104, 105, 108, 111, 114, 115, 4141, 4150, 4154, 4159, 4163, 4166, 4176, 4198, 4284, 114, 116, 105, 97, 108, 68, 59, 32768, 8706, 121, 59, 32768, 1055, 114, 59, 32896, 55349, 56595, 105, 59, 32768, 934, 59, 32768, 928, 117, 115, 77, 105, 110, 117, 115, 59, 32768, 177, 512, 105, 112, 4181, 4194, 110, 99, 97, 114, 101, 112, 108, 97, 110, 101, 59, 32768, 8460, 102, 59, 32768, 8473, 1024, 59, 101, 105, 111, 4207, 4209, 4251, 4256, 32768, 10939, 99, 101, 100, 101, 115, 1024, 59, 69, 83, 84, 4223, 4225, 4232, 4244, 32768, 8826, 113, 117, 97, 108, 59, 32768, 10927, 108, 97, 110, 116, 69, 113, 117, 97, 108, 59, 32768, 8828, 105, 108, 100, 101, 59, 32768, 8830, 109, 101, 59, 32768, 8243, 512, 100, 112, 4261, 4267, 117, 99, 116, 59, 32768, 8719, 111, 114, 116, 105, 111, 110, 512, 59, 97, 4278, 4280, 32768, 8759, 108, 59, 32768, 8733, 512, 99, 105, 4289, 4294, 114, 59, 32896, 55349, 56491, 59, 32768, 936, 1024, 85, 102, 111, 115, 4306, 4313, 4318, 4323, 79, 84, 33024, 34, 59, 32768, 34, 114, 59, 32896, 55349, 56596, 112, 102, 59, 32768, 8474, 99, 114, 59, 32896, 55349, 56492, 3072, 66, 69, 97, 99, 101, 102, 104, 105, 111, 114, 115, 117, 4354, 4360, 4366, 4395, 4417, 4473, 4477, 4481, 4743, 4764, 4776, 4788, 97, 114, 114, 59, 32768, 10512, 71, 33024, 174, 59, 32768, 174, 768, 99, 110, 114, 4373, 4379, 4383, 117, 116, 101, 59, 32768, 340, 103, 59, 32768, 10219, 114, 512, 59, 116, 4389, 4391, 32768, 8608, 108, 59, 32768, 10518, 768, 97, 101, 121, 4402, 4408, 4414, 114, 111, 110, 59, 32768, 344, 100, 105, 108, 59, 32768, 342, 59, 32768, 1056, 512, 59, 118, 4422, 4424, 32768, 8476, 101, 114, 115, 101, 512, 69, 85, 4433, 4458, 512, 108, 113, 4438, 4446, 101, 109, 101, 110, 116, 59, 32768, 8715, 117, 105, 108, 105, 98, 114, 105, 117, 109, 59, 32768, 8651, 112, 69, 113, 117, 105, 108, 105, 98, 114, 105, 117, 109, 59, 32768, 10607, 114, 59, 32768, 8476, 111, 59, 32768, 929, 103, 104, 116, 2048, 65, 67, 68, 70, 84, 85, 86, 97, 4501, 4547, 4556, 4607, 4614, 4671, 4719, 4736, 512, 110, 114, 4506, 4519, 103, 108, 101, 66, 114, 97, 99, 107, 101, 116, 59, 32768, 10217, 114, 111, 119, 768, 59, 66, 76, 4529, 4531, 4536, 32768, 8594, 97, 114, 59, 32768, 8677, 101, 102, 116, 65, 114, 114, 111, 119, 59, 32768, 8644, 101, 105, 108, 105, 110, 103, 59, 32768, 8969, 111, 838, 4562, 0, 4575, 98, 108, 101, 66, 114, 97, 99, 107, 101, 116, 59, 32768, 10215, 110, 805, 4580, 0, 4591, 101, 101, 86, 101, 99, 116, 111, 114, 59, 32768, 10589, 101, 99, 116, 111, 114, 512, 59, 66, 4600, 4602, 32768, 8642, 97, 114, 59, 32768, 10581, 108, 111, 111, 114, 59, 32768, 8971, 512, 101, 114, 4619, 4644, 101, 768, 59, 65, 86, 4627, 4629, 4636, 32768, 8866, 114, 114, 111, 119, 59, 32768, 8614, 101, 99, 116, 111, 114, 59, 32768, 10587, 105, 97, 110, 103, 108, 101, 768, 59, 66, 69, 4657, 4659, 4664, 32768, 8883, 97, 114, 59, 32768, 10704, 113, 117, 97, 108, 59, 32768, 8885, 112, 768, 68, 84, 86, 4679, 4691, 4702, 111, 119, 110, 86, 101, 99, 116, 111, 114, 59, 32768, 10575, 101, 101, 86, 101, 99, 116, 111, 114, 59, 32768, 10588, 101, 99, 116, 111, 114, 512, 59, 66, 4712, 4714, 32768, 8638, 97, 114, 59, 32768, 10580, 101, 99, 116, 111, 114, 512, 59, 66, 4729, 4731, 32768, 8640, 97, 114, 59, 32768, 10579, 114, 114, 111, 119, 59, 32768, 8658, 512, 112, 117, 4748, 4752, 102, 59, 32768, 8477, 110, 100, 73, 109, 112, 108, 105, 101, 115, 59, 32768, 10608, 105, 103, 104, 116, 97, 114, 114, 111, 119, 59, 32768, 8667, 512, 99, 104, 4781, 4785, 114, 59, 32768, 8475, 59, 32768, 8625, 108, 101, 68, 101, 108, 97, 121, 101, 100, 59, 32768, 10740, 3328, 72, 79, 97, 99, 102, 104, 105, 109, 111, 113, 115, 116, 117, 4827, 4842, 4849, 4856, 4889, 4894, 4949, 4955, 4967, 4973, 5059, 5065, 5070, 512, 67, 99, 4832, 4838, 72, 99, 121, 59, 32768, 1065, 121, 59, 32768, 1064, 70, 84, 99, 121, 59, 32768, 1068, 99, 117, 116, 101, 59, 32768, 346, 1280, 59, 97, 101, 105, 121, 4867, 4869, 4875, 4881, 4886, 32768, 10940, 114, 111, 110, 59, 32768, 352, 100, 105, 108, 59, 32768, 350, 114, 99, 59, 32768, 348, 59, 32768, 1057, 114, 59, 32896, 55349, 56598, 111, 114, 116, 1024, 68, 76, 82, 85, 4906, 4917, 4928, 4940, 111, 119, 110, 65, 114, 114, 111, 119, 59, 32768, 8595, 101, 102, 116, 65, 114, 114, 111, 119, 59, 32768, 8592, 105, 103, 104, 116, 65, 114, 114, 111, 119, 59, 32768, 8594, 112, 65, 114, 114, 111, 119, 59, 32768, 8593, 103, 109, 97, 59, 32768, 931, 97, 108, 108, 67, 105, 114, 99, 108, 101, 59, 32768, 8728, 112, 102, 59, 32896, 55349, 56650, 1091, 4979, 0, 0, 4983, 116, 59, 32768, 8730, 97, 114, 101, 1024, 59, 73, 83, 85, 4994, 4996, 5010, 5052, 32768, 9633, 110, 116, 101, 114, 115, 101, 99, 116, 105, 111, 110, 59, 32768, 8851, 117, 512, 98, 112, 5016, 5033, 115, 101, 116, 512, 59, 69, 5024, 5026, 32768, 8847, 113, 117, 97, 108, 59, 32768, 8849, 101, 114, 115, 101, 116, 512, 59, 69, 5043, 5045, 32768, 8848, 113, 117, 97, 108, 59, 32768, 8850, 110, 105, 111, 110, 59, 32768, 8852, 99, 114, 59, 32896, 55349, 56494, 97, 114, 59, 32768, 8902, 1024, 98, 99, 109, 112, 5079, 5102, 5155, 5158, 512, 59, 115, 5084, 5086, 32768, 8912, 101, 116, 512, 59, 69, 5093, 5095, 32768, 8912, 113, 117, 97, 108, 59, 32768, 8838, 512, 99, 104, 5107, 5148, 101, 101, 100, 115, 1024, 59, 69, 83, 84, 5120, 5122, 5129, 5141, 32768, 8827, 113, 117, 97, 108, 59, 32768, 10928, 108, 97, 110, 116, 69, 113, 117, 97, 108, 59, 32768, 8829, 105, 108, 100, 101, 59, 32768, 8831, 84, 104, 97, 116, 59, 32768, 8715, 59, 32768, 8721, 768, 59, 101, 115, 5165, 5167, 5185, 32768, 8913, 114, 115, 101, 116, 512, 59, 69, 5176, 5178, 32768, 8835, 113, 117, 97, 108, 59, 32768, 8839, 101, 116, 59, 32768, 8913, 2816, 72, 82, 83, 97, 99, 102, 104, 105, 111, 114, 115, 5213, 5221, 5227, 5241, 5252, 5274, 5279, 5323, 5362, 5368, 5378, 79, 82, 78, 33024, 222, 59, 32768, 222, 65, 68, 69, 59, 32768, 8482, 512, 72, 99, 5232, 5237, 99, 121, 59, 32768, 1035, 121, 59, 32768, 1062, 512, 98, 117, 5246, 5249, 59, 32768, 9, 59, 32768, 932, 768, 97, 101, 121, 5259, 5265, 5271, 114, 111, 110, 59, 32768, 356, 100, 105, 108, 59, 32768, 354, 59, 32768, 1058, 114, 59, 32896, 55349, 56599, 512, 101, 105, 5284, 5300, 835, 5289, 0, 5297, 101, 102, 111, 114, 101, 59, 32768, 8756, 97, 59, 32768, 920, 512, 99, 110, 5305, 5315, 107, 83, 112, 97, 99, 101, 59, 32896, 8287, 8202, 83, 112, 97, 99, 101, 59, 32768, 8201, 108, 100, 101, 1024, 59, 69, 70, 84, 5335, 5337, 5344, 5355, 32768, 8764, 113, 117, 97, 108, 59, 32768, 8771, 117, 108, 108, 69, 113, 117, 97, 108, 59, 32768, 8773, 105, 108, 100, 101, 59, 32768, 8776, 112, 102, 59, 32896, 55349, 56651, 105, 112, 108, 101, 68, 111, 116, 59, 32768, 8411, 512, 99, 116, 5383, 5388, 114, 59, 32896, 55349, 56495, 114, 111, 107, 59, 32768, 358, 5426, 5417, 5444, 5458, 5473, 0, 5480, 5485, 0, 0, 0, 0, 0, 5494, 5500, 5564, 5579, 0, 5726, 5732, 5738, 5745, 512, 99, 114, 5421, 5429, 117, 116, 101, 33024, 218, 59, 32768, 218, 114, 512, 59, 111, 5435, 5437, 32768, 8607, 99, 105, 114, 59, 32768, 10569, 114, 820, 5449, 0, 5453, 121, 59, 32768, 1038, 118, 101, 59, 32768, 364, 512, 105, 121, 5462, 5469, 114, 99, 33024, 219, 59, 32768, 219, 59, 32768, 1059, 98, 108, 97, 99, 59, 32768, 368, 114, 59, 32896, 55349, 56600, 114, 97, 118, 101, 33024, 217, 59, 32768, 217, 97, 99, 114, 59, 32768, 362, 512, 100, 105, 5504, 5548, 101, 114, 512, 66, 80, 5511, 5535, 512, 97, 114, 5516, 5520, 114, 59, 32768, 95, 97, 99, 512, 101, 107, 5527, 5530, 59, 32768, 9183, 101, 116, 59, 32768, 9141, 97, 114, 101, 110, 116, 104, 101, 115, 105, 115, 59, 32768, 9181, 111, 110, 512, 59, 80, 5555, 5557, 32768, 8899, 108, 117, 115, 59, 32768, 8846, 512, 103, 112, 5568, 5573, 111, 110, 59, 32768, 370, 102, 59, 32896, 55349, 56652, 2048, 65, 68, 69, 84, 97, 100, 112, 115, 5595, 5624, 5635, 5648, 5664, 5671, 5682, 5712, 114, 114, 111, 119, 768, 59, 66, 68, 5606, 5608, 5613, 32768, 8593, 97, 114, 59, 32768, 10514, 111, 119, 110, 65, 114, 114, 111, 119, 59, 32768, 8645, 111, 119, 110, 65, 114, 114, 111, 119, 59, 32768, 8597, 113, 117, 105, 108, 105, 98, 114, 105, 117, 109, 59, 32768, 10606, 101, 101, 512, 59, 65, 5655, 5657, 32768, 8869, 114, 114, 111, 119, 59, 32768, 8613, 114, 114, 111, 119, 59, 32768, 8657, 111, 119, 110, 97, 114, 114, 111, 119, 59, 32768, 8661, 101, 114, 512, 76, 82, 5689, 5700, 101, 102, 116, 65, 114, 114, 111, 119, 59, 32768, 8598, 105, 103, 104, 116, 65, 114, 114, 111, 119, 59, 32768, 8599, 105, 512, 59, 108, 5718, 5720, 32768, 978, 111, 110, 59, 32768, 933, 105, 110, 103, 59, 32768, 366, 99, 114, 59, 32896, 55349, 56496, 105, 108, 100, 101, 59, 32768, 360, 109, 108, 33024, 220, 59, 32768, 220, 2304, 68, 98, 99, 100, 101, 102, 111, 115, 118, 5770, 5776, 5781, 5785, 5798, 5878, 5883, 5889, 5895, 97, 115, 104, 59, 32768, 8875, 97, 114, 59, 32768, 10987, 121, 59, 32768, 1042, 97, 115, 104, 512, 59, 108, 5793, 5795, 32768, 8873, 59, 32768, 10982, 512, 101, 114, 5803, 5806, 59, 32768, 8897, 768, 98, 116, 121, 5813, 5818, 5866, 97, 114, 59, 32768, 8214, 512, 59, 105, 5823, 5825, 32768, 8214, 99, 97, 108, 1024, 66, 76, 83, 84, 5837, 5842, 5848, 5859, 97, 114, 59, 32768, 8739, 105, 110, 101, 59, 32768, 124, 101, 112, 97, 114, 97, 116, 111, 114, 59, 32768, 10072, 105, 108, 100, 101, 59, 32768, 8768, 84, 104, 105, 110, 83, 112, 97, 99, 101, 59, 32768, 8202, 114, 59, 32896, 55349, 56601, 112, 102, 59, 32896, 55349, 56653, 99, 114, 59, 32896, 55349, 56497, 100, 97, 115, 104, 59, 32768, 8874, 1280, 99, 101, 102, 111, 115, 5913, 5919, 5925, 5930, 5936, 105, 114, 99, 59, 32768, 372, 100, 103, 101, 59, 32768, 8896, 114, 59, 32896, 55349, 56602, 112, 102, 59, 32896, 55349, 56654, 99, 114, 59, 32896, 55349, 56498, 1024, 102, 105, 111, 115, 5951, 5956, 5959, 5965, 114, 59, 32896, 55349, 56603, 59, 32768, 926, 112, 102, 59, 32896, 55349, 56655, 99, 114, 59, 32896, 55349, 56499, 2304, 65, 73, 85, 97, 99, 102, 111, 115, 117, 5990, 5995, 6000, 6005, 6014, 6027, 6032, 6038, 6044, 99, 121, 59, 32768, 1071, 99, 121, 59, 32768, 1031, 99, 121, 59, 32768, 1070, 99, 117, 116, 101, 33024, 221, 59, 32768, 221, 512, 105, 121, 6019, 6024, 114, 99, 59, 32768, 374, 59, 32768, 1067, 114, 59, 32896, 55349, 56604, 112, 102, 59, 32896, 55349, 56656, 99, 114, 59, 32896, 55349, 56500, 109, 108, 59, 32768, 376, 2048, 72, 97, 99, 100, 101, 102, 111, 115, 6066, 6071, 6078, 6092, 6097, 6119, 6123, 6128, 99, 121, 59, 32768, 1046, 99, 117, 116, 101, 59, 32768, 377, 512, 97, 121, 6083, 6089, 114, 111, 110, 59, 32768, 381, 59, 32768, 1047, 111, 116, 59, 32768, 379, 835, 6102, 0, 6116, 111, 87, 105, 100, 116, 104, 83, 112, 97, 99, 101, 59, 32768, 8203, 97, 59, 32768, 918, 114, 59, 32768, 8488, 112, 102, 59, 32768, 8484, 99, 114, 59, 32896, 55349, 56501, 5938, 6159, 6168, 6175, 0, 6214, 6222, 6233, 0, 0, 0, 0, 6242, 6267, 6290, 6429, 6444, 0, 6495, 6503, 6531, 6540, 0, 6547, 99, 117, 116, 101, 33024, 225, 59, 32768, 225, 114, 101, 118, 101, 59, 32768, 259, 1536, 59, 69, 100, 105, 117, 121, 6187, 6189, 6193, 6196, 6203, 6210, 32768, 8766, 59, 32896, 8766, 819, 59, 32768, 8767, 114, 99, 33024, 226, 59, 32768, 226, 116, 101, 33024, 180, 59, 32768, 180, 59, 32768, 1072, 108, 105, 103, 33024, 230, 59, 32768, 230, 512, 59, 114, 6226, 6228, 32768, 8289, 59, 32896, 55349, 56606, 114, 97, 118, 101, 33024, 224, 59, 32768, 224, 512, 101, 112, 6246, 6261, 512, 102, 112, 6251, 6257, 115, 121, 109, 59, 32768, 8501, 104, 59, 32768, 8501, 104, 97, 59, 32768, 945, 512, 97, 112, 6271, 6284, 512, 99, 108, 6276, 6280, 114, 59, 32768, 257, 103, 59, 32768, 10815, 33024, 38, 59, 32768, 38, 1077, 6295, 0, 0, 6326, 1280, 59, 97, 100, 115, 118, 6305, 6307, 6312, 6315, 6322, 32768, 8743, 110, 100, 59, 32768, 10837, 59, 32768, 10844, 108, 111, 112, 101, 59, 32768, 10840, 59, 32768, 10842, 1792, 59, 101, 108, 109, 114, 115, 122, 6340, 6342, 6345, 6349, 6391, 6410, 6422, 32768, 8736, 59, 32768, 10660, 101, 59, 32768, 8736, 115, 100, 512, 59, 97, 6356, 6358, 32768, 8737, 2098, 6368, 6371, 6374, 6377, 6380, 6383, 6386, 6389, 59, 32768, 10664, 59, 32768, 10665, 59, 32768, 10666, 59, 32768, 10667, 59, 32768, 10668, 59, 32768, 10669, 59, 32768, 10670, 59, 32768, 10671, 116, 512, 59, 118, 6397, 6399, 32768, 8735, 98, 512, 59, 100, 6405, 6407, 32768, 8894, 59, 32768, 10653, 512, 112, 116, 6415, 6419, 104, 59, 32768, 8738, 59, 32768, 197, 97, 114, 114, 59, 32768, 9084, 512, 103, 112, 6433, 6438, 111, 110, 59, 32768, 261, 102, 59, 32896, 55349, 56658, 1792, 59, 69, 97, 101, 105, 111, 112, 6458, 6460, 6463, 6469, 6472, 6476, 6480, 32768, 8776, 59, 32768, 10864, 99, 105, 114, 59, 32768, 10863, 59, 32768, 8778, 100, 59, 32768, 8779, 115, 59, 32768, 39, 114, 111, 120, 512, 59, 101, 6488, 6490, 32768, 8776, 113, 59, 32768, 8778, 105, 110, 103, 33024, 229, 59, 32768, 229, 768, 99, 116, 121, 6509, 6514, 6517, 114, 59, 32896, 55349, 56502, 59, 32768, 42, 109, 112, 512, 59, 101, 6524, 6526, 32768, 8776, 113, 59, 32768, 8781, 105, 108, 100, 101, 33024, 227, 59, 32768, 227, 109, 108, 33024, 228, 59, 32768, 228, 512, 99, 105, 6551, 6559, 111, 110, 105, 110, 116, 59, 32768, 8755, 110, 116, 59, 32768, 10769, 4096, 78, 97, 98, 99, 100, 101, 102, 105, 107, 108, 110, 111, 112, 114, 115, 117, 6597, 6602, 6673, 6688, 6701, 6707, 6768, 6773, 6891, 6898, 6999, 7023, 7309, 7316, 7334, 7383, 111, 116, 59, 32768, 10989, 512, 99, 114, 6607, 6652, 107, 1024, 99, 101, 112, 115, 6617, 6623, 6632, 6639, 111, 110, 103, 59, 32768, 8780, 112, 115, 105, 108, 111, 110, 59, 32768, 1014, 114, 105, 109, 101, 59, 32768, 8245, 105, 109, 512, 59, 101, 6646, 6648, 32768, 8765, 113, 59, 32768, 8909, 583, 6656, 6661, 101, 101, 59, 32768, 8893, 101, 100, 512, 59, 103, 6667, 6669, 32768, 8965, 101, 59, 32768, 8965, 114, 107, 512, 59, 116, 6680, 6682, 32768, 9141, 98, 114, 107, 59, 32768, 9142, 512, 111, 121, 6693, 6698, 110, 103, 59, 32768, 8780, 59, 32768, 1073, 113, 117, 111, 59, 32768, 8222, 1280, 99, 109, 112, 114, 116, 6718, 6731, 6738, 6743, 6749, 97, 117, 115, 512, 59, 101, 6726, 6728, 32768, 8757, 59, 32768, 8757, 112, 116, 121, 118, 59, 32768, 10672, 115, 105, 59, 32768, 1014, 110, 111, 117, 59, 32768, 8492, 768, 97, 104, 119, 6756, 6759, 6762, 59, 32768, 946, 59, 32768, 8502, 101, 101, 110, 59, 32768, 8812, 114, 59, 32896, 55349, 56607, 103, 1792, 99, 111, 115, 116, 117, 118, 119, 6789, 6809, 6834, 6850, 6872, 6879, 6884, 768, 97, 105, 117, 6796, 6800, 6805, 112, 59, 32768, 8898, 114, 99, 59, 32768, 9711, 112, 59, 32768, 8899, 768, 100, 112, 116, 6816, 6821, 6827, 111, 116, 59, 32768, 10752, 108, 117, 115, 59, 32768, 10753, 105, 109, 101, 115, 59, 32768, 10754, 1090, 6840, 0, 0, 6846, 99, 117, 112, 59, 32768, 10758, 97, 114, 59, 32768, 9733, 114, 105, 97, 110, 103, 108, 101, 512, 100, 117, 6862, 6868, 111, 119, 110, 59, 32768, 9661, 112, 59, 32768, 9651, 112, 108, 117, 115, 59, 32768, 10756, 101, 101, 59, 32768, 8897, 101, 100, 103, 101, 59, 32768, 8896, 97, 114, 111, 119, 59, 32768, 10509, 768, 97, 107, 111, 6905, 6976, 6994, 512, 99, 110, 6910, 6972, 107, 768, 108, 115, 116, 6918, 6927, 6935, 111, 122, 101, 110, 103, 101, 59, 32768, 10731, 113, 117, 97, 114, 101, 59, 32768, 9642, 114, 105, 97, 110, 103, 108, 101, 1024, 59, 100, 108, 114, 6951, 6953, 6959, 6965, 32768, 9652, 111, 119, 110, 59, 32768, 9662, 101, 102, 116, 59, 32768, 9666, 105, 103, 104, 116, 59, 32768, 9656, 107, 59, 32768, 9251, 770, 6981, 0, 6991, 771, 6985, 0, 6988, 59, 32768, 9618, 59, 32768, 9617, 52, 59, 32768, 9619, 99, 107, 59, 32768, 9608, 512, 101, 111, 7004, 7019, 512, 59, 113, 7009, 7012, 32896, 61, 8421, 117, 105, 118, 59, 32896, 8801, 8421, 116, 59, 32768, 8976, 1024, 112, 116, 119, 120, 7032, 7037, 7049, 7055, 102, 59, 32896, 55349, 56659, 512, 59, 116, 7042, 7044, 32768, 8869, 111, 109, 59, 32768, 8869, 116, 105, 101, 59, 32768, 8904, 3072, 68, 72, 85, 86, 98, 100, 104, 109, 112, 116, 117, 118, 7080, 7101, 7126, 7147, 7182, 7187, 7208, 7233, 7240, 7246, 7253, 7274, 1024, 76, 82, 108, 114, 7089, 7092, 7095, 7098, 59, 32768, 9559, 59, 32768, 9556, 59, 32768, 9558, 59, 32768, 9555, 1280, 59, 68, 85, 100, 117, 7112, 7114, 7117, 7120, 7123, 32768, 9552, 59, 32768, 9574, 59, 32768, 9577, 59, 32768, 9572, 59, 32768, 9575, 1024, 76, 82, 108, 114, 7135, 7138, 7141, 7144, 59, 32768, 9565, 59, 32768, 9562, 59, 32768, 9564, 59, 32768, 9561, 1792, 59, 72, 76, 82, 104, 108, 114, 7162, 7164, 7167, 7170, 7173, 7176, 7179, 32768, 9553, 59, 32768, 9580, 59, 32768, 9571, 59, 32768, 9568, 59, 32768, 9579, 59, 32768, 9570, 59, 32768, 9567, 111, 120, 59, 32768, 10697, 1024, 76, 82, 108, 114, 7196, 7199, 7202, 7205, 59, 32768, 9557, 59, 32768, 9554, 59, 32768, 9488, 59, 32768, 9484, 1280, 59, 68, 85, 100, 117, 7219, 7221, 7224, 7227, 7230, 32768, 9472, 59, 32768, 9573, 59, 32768, 9576, 59, 32768, 9516, 59, 32768, 9524, 105, 110, 117, 115, 59, 32768, 8863, 108, 117, 115, 59, 32768, 8862, 105, 109, 101, 115, 59, 32768, 8864, 1024, 76, 82, 108, 114, 7262, 7265, 7268, 7271, 59, 32768, 9563, 59, 32768, 9560, 59, 32768, 9496, 59, 32768, 9492, 1792, 59, 72, 76, 82, 104, 108, 114, 7289, 7291, 7294, 7297, 7300, 7303, 7306, 32768, 9474, 59, 32768, 9578, 59, 32768, 9569, 59, 32768, 9566, 59, 32768, 9532, 59, 32768, 9508, 59, 32768, 9500, 114, 105, 109, 101, 59, 32768, 8245, 512, 101, 118, 7321, 7326, 118, 101, 59, 32768, 728, 98, 97, 114, 33024, 166, 59, 32768, 166, 1024, 99, 101, 105, 111, 7343, 7348, 7353, 7364, 114, 59, 32896, 55349, 56503, 109, 105, 59, 32768, 8271, 109, 512, 59, 101, 7359, 7361, 32768, 8765, 59, 32768, 8909, 108, 768, 59, 98, 104, 7372, 7374, 7377, 32768, 92, 59, 32768, 10693, 115, 117, 98, 59, 32768, 10184, 573, 7387, 7399, 108, 512, 59, 101, 7392, 7394, 32768, 8226, 116, 59, 32768, 8226, 112, 768, 59, 69, 101, 7406, 7408, 7411, 32768, 8782, 59, 32768, 10926, 512, 59, 113, 7416, 7418, 32768, 8783, 59, 32768, 8783, 6450, 7448, 0, 7523, 7571, 7576, 7613, 0, 7618, 7647, 0, 0, 7764, 0, 0, 7779, 0, 0, 7899, 7914, 7949, 7955, 0, 8158, 0, 8176, 768, 99, 112, 114, 7454, 7460, 7509, 117, 116, 101, 59, 32768, 263, 1536, 59, 97, 98, 99, 100, 115, 7473, 7475, 7480, 7487, 7500, 7505, 32768, 8745, 110, 100, 59, 32768, 10820, 114, 99, 117, 112, 59, 32768, 10825, 512, 97, 117, 7492, 7496, 112, 59, 32768, 10827, 112, 59, 32768, 10823, 111, 116, 59, 32768, 10816, 59, 32896, 8745, 65024, 512, 101, 111, 7514, 7518, 116, 59, 32768, 8257, 110, 59, 32768, 711, 1024, 97, 101, 105, 117, 7531, 7544, 7552, 7557, 833, 7536, 0, 7540, 115, 59, 32768, 10829, 111, 110, 59, 32768, 269, 100, 105, 108, 33024, 231, 59, 32768, 231, 114, 99, 59, 32768, 265, 112, 115, 512, 59, 115, 7564, 7566, 32768, 10828, 109, 59, 32768, 10832, 111, 116, 59, 32768, 267, 768, 100, 109, 110, 7582, 7589, 7596, 105, 108, 33024, 184, 59, 32768, 184, 112, 116, 121, 118, 59, 32768, 10674, 116, 33280, 162, 59, 101, 7603, 7605, 32768, 162, 114, 100, 111, 116, 59, 32768, 183, 114, 59, 32896, 55349, 56608, 768, 99, 101, 105, 7624, 7628, 7643, 121, 59, 32768, 1095, 99, 107, 512, 59, 109, 7635, 7637, 32768, 10003, 97, 114, 107, 59, 32768, 10003, 59, 32768, 967, 114, 1792, 59, 69, 99, 101, 102, 109, 115, 7662, 7664, 7667, 7742, 7745, 7752, 7757, 32768, 9675, 59, 32768, 10691, 768, 59, 101, 108, 7674, 7676, 7680, 32768, 710, 113, 59, 32768, 8791, 101, 1074, 7687, 0, 0, 7709, 114, 114, 111, 119, 512, 108, 114, 7695, 7701, 101, 102, 116, 59, 32768, 8634, 105, 103, 104, 116, 59, 32768, 8635, 1280, 82, 83, 97, 99, 100, 7719, 7722, 7725, 7730, 7736, 59, 32768, 174, 59, 32768, 9416, 115, 116, 59, 32768, 8859, 105, 114, 99, 59, 32768, 8858, 97, 115, 104, 59, 32768, 8861, 59, 32768, 8791, 110, 105, 110, 116, 59, 32768, 10768, 105, 100, 59, 32768, 10991, 99, 105, 114, 59, 32768, 10690, 117, 98, 115, 512, 59, 117, 7771, 7773, 32768, 9827, 105, 116, 59, 32768, 9827, 1341, 7785, 7804, 7850, 0, 7871, 111, 110, 512, 59, 101, 7791, 7793, 32768, 58, 512, 59, 113, 7798, 7800, 32768, 8788, 59, 32768, 8788, 1086, 7809, 0, 0, 7820, 97, 512, 59, 116, 7814, 7816, 32768, 44, 59, 32768, 64, 768, 59, 102, 108, 7826, 7828, 7832, 32768, 8705, 110, 59, 32768, 8728, 101, 512, 109, 120, 7838, 7844, 101, 110, 116, 59, 32768, 8705, 101, 115, 59, 32768, 8450, 824, 7854, 0, 7866, 512, 59, 100, 7858, 7860, 32768, 8773, 111, 116, 59, 32768, 10861, 110, 116, 59, 32768, 8750, 768, 102, 114, 121, 7877, 7881, 7886, 59, 32896, 55349, 56660, 111, 100, 59, 32768, 8720, 33280, 169, 59, 115, 7892, 7894, 32768, 169, 114, 59, 32768, 8471, 512, 97, 111, 7903, 7908, 114, 114, 59, 32768, 8629, 115, 115, 59, 32768, 10007, 512, 99, 117, 7918, 7923, 114, 59, 32896, 55349, 56504, 512, 98, 112, 7928, 7938, 512, 59, 101, 7933, 7935, 32768, 10959, 59, 32768, 10961, 512, 59, 101, 7943, 7945, 32768, 10960, 59, 32768, 10962, 100, 111, 116, 59, 32768, 8943, 1792, 100, 101, 108, 112, 114, 118, 119, 7969, 7983, 7996, 8009, 8057, 8147, 8152, 97, 114, 114, 512, 108, 114, 7977, 7980, 59, 32768, 10552, 59, 32768, 10549, 1089, 7989, 0, 0, 7993, 114, 59, 32768, 8926, 99, 59, 32768, 8927, 97, 114, 114, 512, 59, 112, 8004, 8006, 32768, 8630, 59, 32768, 10557, 1536, 59, 98, 99, 100, 111, 115, 8022, 8024, 8031, 8044, 8049, 8053, 32768, 8746, 114, 99, 97, 112, 59, 32768, 10824, 512, 97, 117, 8036, 8040, 112, 59, 32768, 10822, 112, 59, 32768, 10826, 111, 116, 59, 32768, 8845, 114, 59, 32768, 10821, 59, 32896, 8746, 65024, 1024, 97, 108, 114, 118, 8066, 8078, 8116, 8123, 114, 114, 512, 59, 109, 8073, 8075, 32768, 8631, 59, 32768, 10556, 121, 768, 101, 118, 119, 8086, 8104, 8109, 113, 1089, 8093, 0, 0, 8099, 114, 101, 99, 59, 32768, 8926, 117, 99, 99, 59, 32768, 8927, 101, 101, 59, 32768, 8910, 101, 100, 103, 101, 59, 32768, 8911, 101, 110, 33024, 164, 59, 32768, 164, 101, 97, 114, 114, 111, 119, 512, 108, 114, 8134, 8140, 101, 102, 116, 59, 32768, 8630, 105, 103, 104, 116, 59, 32768, 8631, 101, 101, 59, 32768, 8910, 101, 100, 59, 32768, 8911, 512, 99, 105, 8162, 8170, 111, 110, 105, 110, 116, 59, 32768, 8754, 110, 116, 59, 32768, 8753, 108, 99, 116, 121, 59, 32768, 9005, 4864, 65, 72, 97, 98, 99, 100, 101, 102, 104, 105, 106, 108, 111, 114, 115, 116, 117, 119, 122, 8221, 8226, 8231, 8267, 8282, 8296, 8327, 8351, 8366, 8379, 8466, 8471, 8487, 8621, 8647, 8676, 8697, 8712, 8720, 114, 114, 59, 32768, 8659, 97, 114, 59, 32768, 10597, 1024, 103, 108, 114, 115, 8240, 8246, 8252, 8256, 103, 101, 114, 59, 32768, 8224, 101, 116, 104, 59, 32768, 8504, 114, 59, 32768, 8595, 104, 512, 59, 118, 8262, 8264, 32768, 8208, 59, 32768, 8867, 572, 8271, 8278, 97, 114, 111, 119, 59, 32768, 10511, 97, 99, 59, 32768, 733, 512, 97, 121, 8287, 8293, 114, 111, 110, 59, 32768, 271, 59, 32768, 1076, 768, 59, 97, 111, 8303, 8305, 8320, 32768, 8518, 512, 103, 114, 8310, 8316, 103, 101, 114, 59, 32768, 8225, 114, 59, 32768, 8650, 116, 115, 101, 113, 59, 32768, 10871, 768, 103, 108, 109, 8334, 8339, 8344, 33024, 176, 59, 32768, 176, 116, 97, 59, 32768, 948, 112, 116, 121, 118, 59, 32768, 10673, 512, 105, 114, 8356, 8362, 115, 104, 116, 59, 32768, 10623, 59, 32896, 55349, 56609, 97, 114, 512, 108, 114, 8373, 8376, 59, 32768, 8643, 59, 32768, 8642, 1280, 97, 101, 103, 115, 118, 8390, 8418, 8421, 8428, 8433, 109, 768, 59, 111, 115, 8398, 8400, 8415, 32768, 8900, 110, 100, 512, 59, 115, 8407, 8409, 32768, 8900, 117, 105, 116, 59, 32768, 9830, 59, 32768, 9830, 59, 32768, 168, 97, 109, 109, 97, 59, 32768, 989, 105, 110, 59, 32768, 8946, 768, 59, 105, 111, 8440, 8442, 8461, 32768, 247, 100, 101, 33280, 247, 59, 111, 8450, 8452, 32768, 247, 110, 116, 105, 109, 101, 115, 59, 32768, 8903, 110, 120, 59, 32768, 8903, 99, 121, 59, 32768, 1106, 99, 1088, 8478, 0, 0, 8483, 114, 110, 59, 32768, 8990, 111, 112, 59, 32768, 8973, 1280, 108, 112, 116, 117, 119, 8498, 8504, 8509, 8556, 8570, 108, 97, 114, 59, 32768, 36, 102, 59, 32896, 55349, 56661, 1280, 59, 101, 109, 112, 115, 8520, 8522, 8535, 8542, 8548, 32768, 729, 113, 512, 59, 100, 8528, 8530, 32768, 8784, 111, 116, 59, 32768, 8785, 105, 110, 117, 115, 59, 32768, 8760, 108, 117, 115, 59, 32768, 8724, 113, 117, 97, 114, 101, 59, 32768, 8865, 98, 108, 101, 98, 97, 114, 119, 101, 100, 103, 101, 59, 32768, 8966, 110, 768, 97, 100, 104, 8578, 8585, 8597, 114, 114, 111, 119, 59, 32768, 8595, 111, 119, 110, 97, 114, 114, 111, 119, 115, 59, 32768, 8650, 97, 114, 112, 111, 111, 110, 512, 108, 114, 8608, 8614, 101, 102, 116, 59, 32768, 8643, 105, 103, 104, 116, 59, 32768, 8642, 563, 8625, 8633, 107, 97, 114, 111, 119, 59, 32768, 10512, 1088, 8638, 0, 0, 8643, 114, 110, 59, 32768, 8991, 111, 112, 59, 32768, 8972, 768, 99, 111, 116, 8654, 8666, 8670, 512, 114, 121, 8659, 8663, 59, 32896, 55349, 56505, 59, 32768, 1109, 108, 59, 32768, 10742, 114, 111, 107, 59, 32768, 273, 512, 100, 114, 8681, 8686, 111, 116, 59, 32768, 8945, 105, 512, 59, 102, 8692, 8694, 32768, 9663, 59, 32768, 9662, 512, 97, 104, 8702, 8707, 114, 114, 59, 32768, 8693, 97, 114, 59, 32768, 10607, 97, 110, 103, 108, 101, 59, 32768, 10662, 512, 99, 105, 8725, 8729, 121, 59, 32768, 1119, 103, 114, 97, 114, 114, 59, 32768, 10239, 4608, 68, 97, 99, 100, 101, 102, 103, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 120, 8774, 8788, 8807, 8844, 8849, 8852, 8866, 8895, 8929, 8977, 8989, 9004, 9046, 9136, 9151, 9171, 9184, 9199, 512, 68, 111, 8779, 8784, 111, 116, 59, 32768, 10871, 116, 59, 32768, 8785, 512, 99, 115, 8793, 8801, 117, 116, 101, 33024, 233, 59, 32768, 233, 116, 101, 114, 59, 32768, 10862, 1024, 97, 105, 111, 121, 8816, 8822, 8835, 8841, 114, 111, 110, 59, 32768, 283, 114, 512, 59, 99, 8828, 8830, 32768, 8790, 33024, 234, 59, 32768, 234, 108, 111, 110, 59, 32768, 8789, 59, 32768, 1101, 111, 116, 59, 32768, 279, 59, 32768, 8519, 512, 68, 114, 8857, 8862, 111, 116, 59, 32768, 8786, 59, 32896, 55349, 56610, 768, 59, 114, 115, 8873, 8875, 8883, 32768, 10906, 97, 118, 101, 33024, 232, 59, 32768, 232, 512, 59, 100, 8888, 8890, 32768, 10902, 111, 116, 59, 32768, 10904, 1024, 59, 105, 108, 115, 8904, 8906, 8914, 8917, 32768, 10905, 110, 116, 101, 114, 115, 59, 32768, 9191, 59, 32768, 8467, 512, 59, 100, 8922, 8924, 32768, 10901, 111, 116, 59, 32768, 10903, 768, 97, 112, 115, 8936, 8941, 8960, 99, 114, 59, 32768, 275, 116, 121, 768, 59, 115, 118, 8950, 8952, 8957, 32768, 8709, 101, 116, 59, 32768, 8709, 59, 32768, 8709, 112, 512, 49, 59, 8966, 8975, 516, 8970, 8973, 59, 32768, 8196, 59, 32768, 8197, 32768, 8195, 512, 103, 115, 8982, 8985, 59, 32768, 331, 112, 59, 32768, 8194, 512, 103, 112, 8994, 8999, 111, 110, 59, 32768, 281, 102, 59, 32896, 55349, 56662, 768, 97, 108, 115, 9011, 9023, 9028, 114, 512, 59, 115, 9017, 9019, 32768, 8917, 108, 59, 32768, 10723, 117, 115, 59, 32768, 10865, 105, 768, 59, 108, 118, 9036, 9038, 9043, 32768, 949, 111, 110, 59, 32768, 949, 59, 32768, 1013, 1024, 99, 115, 117, 118, 9055, 9071, 9099, 9128, 512, 105, 111, 9060, 9065, 114, 99, 59, 32768, 8790, 108, 111, 110, 59, 32768, 8789, 1082, 9077, 0, 0, 9081, 109, 59, 32768, 8770, 97, 110, 116, 512, 103, 108, 9088, 9093, 116, 114, 59, 32768, 10902, 101, 115, 115, 59, 32768, 10901, 768, 97, 101, 105, 9106, 9111, 9116, 108, 115, 59, 32768, 61, 115, 116, 59, 32768, 8799, 118, 512, 59, 68, 9122, 9124, 32768, 8801, 68, 59, 32768, 10872, 112, 97, 114, 115, 108, 59, 32768, 10725, 512, 68, 97, 9141, 9146, 111, 116, 59, 32768, 8787, 114, 114, 59, 32768, 10609, 768, 99, 100, 105, 9158, 9162, 9167, 114, 59, 32768, 8495, 111, 116, 59, 32768, 8784, 109, 59, 32768, 8770, 512, 97, 104, 9176, 9179, 59, 32768, 951, 33024, 240, 59, 32768, 240, 512, 109, 114, 9189, 9195, 108, 33024, 235, 59, 32768, 235, 111, 59, 32768, 8364, 768, 99, 105, 112, 9206, 9210, 9215, 108, 59, 32768, 33, 115, 116, 59, 32768, 8707, 512, 101, 111, 9220, 9230, 99, 116, 97, 116, 105, 111, 110, 59, 32768, 8496, 110, 101, 110, 116, 105, 97, 108, 101, 59, 32768, 8519, 4914, 9262, 0, 9276, 0, 9280, 9287, 0, 0, 9318, 9324, 0, 9331, 0, 9352, 9357, 9386, 0, 9395, 9497, 108, 108, 105, 110, 103, 100, 111, 116, 115, 101, 113, 59, 32768, 8786, 121, 59, 32768, 1092, 109, 97, 108, 101, 59, 32768, 9792, 768, 105, 108, 114, 9293, 9299, 9313, 108, 105, 103, 59, 32768, 64259, 1082, 9305, 0, 0, 9309, 103, 59, 32768, 64256, 105, 103, 59, 32768, 64260, 59, 32896, 55349, 56611, 108, 105, 103, 59, 32768, 64257, 108, 105, 103, 59, 32896, 102, 106, 768, 97, 108, 116, 9337, 9341, 9346, 116, 59, 32768, 9837, 105, 103, 59, 32768, 64258, 110, 115, 59, 32768, 9649, 111, 102, 59, 32768, 402, 833, 9361, 0, 9366, 102, 59, 32896, 55349, 56663, 512, 97, 107, 9370, 9375, 108, 108, 59, 32768, 8704, 512, 59, 118, 9380, 9382, 32768, 8916, 59, 32768, 10969, 97, 114, 116, 105, 110, 116, 59, 32768, 10765, 512, 97, 111, 9399, 9491, 512, 99, 115, 9404, 9487, 1794, 9413, 9443, 9453, 9470, 9474, 0, 9484, 1795, 9421, 9426, 9429, 9434, 9437, 0, 9440, 33024, 189, 59, 32768, 189, 59, 32768, 8531, 33024, 188, 59, 32768, 188, 59, 32768, 8533, 59, 32768, 8537, 59, 32768, 8539, 772, 9447, 0, 9450, 59, 32768, 8532, 59, 32768, 8534, 1285, 9459, 9464, 0, 0, 9467, 33024, 190, 59, 32768, 190, 59, 32768, 8535, 59, 32768, 8540, 53, 59, 32768, 8536, 775, 9478, 0, 9481, 59, 32768, 8538, 59, 32768, 8541, 56, 59, 32768, 8542, 108, 59, 32768, 8260, 119, 110, 59, 32768, 8994, 99, 114, 59, 32896, 55349, 56507, 4352, 69, 97, 98, 99, 100, 101, 102, 103, 105, 106, 108, 110, 111, 114, 115, 116, 118, 9537, 9547, 9575, 9582, 9595, 9600, 9679, 9684, 9694, 9700, 9705, 9725, 9773, 9779, 9785, 9810, 9917, 512, 59, 108, 9542, 9544, 32768, 8807, 59, 32768, 10892, 768, 99, 109, 112, 9554, 9560, 9572, 117, 116, 101, 59, 32768, 501, 109, 97, 512, 59, 100, 9567, 9569, 32768, 947, 59, 32768, 989, 59, 32768, 10886, 114, 101, 118, 101, 59, 32768, 287, 512, 105, 121, 9587, 9592, 114, 99, 59, 32768, 285, 59, 32768, 1075, 111, 116, 59, 32768, 289, 1024, 59, 108, 113, 115, 9609, 9611, 9614, 9633, 32768, 8805, 59, 32768, 8923, 768, 59, 113, 115, 9621, 9623, 9626, 32768, 8805, 59, 32768, 8807, 108, 97, 110, 116, 59, 32768, 10878, 1024, 59, 99, 100, 108, 9642, 9644, 9648, 9667, 32768, 10878, 99, 59, 32768, 10921, 111, 116, 512, 59, 111, 9655, 9657, 32768, 10880, 512, 59, 108, 9662, 9664, 32768, 10882, 59, 32768, 10884, 512, 59, 101, 9672, 9675, 32896, 8923, 65024, 115, 59, 32768, 10900, 114, 59, 32896, 55349, 56612, 512, 59, 103, 9689, 9691, 32768, 8811, 59, 32768, 8921, 109, 101, 108, 59, 32768, 8503, 99, 121, 59, 32768, 1107, 1024, 59, 69, 97, 106, 9714, 9716, 9719, 9722, 32768, 8823, 59, 32768, 10898, 59, 32768, 10917, 59, 32768, 10916, 1024, 69, 97, 101, 115, 9734, 9737, 9751, 9768, 59, 32768, 8809, 112, 512, 59, 112, 9743, 9745, 32768, 10890, 114, 111, 120, 59, 32768, 10890, 512, 59, 113, 9756, 9758, 32768, 10888, 512, 59, 113, 9763, 9765, 32768, 10888, 59, 32768, 8809, 105, 109, 59, 32768, 8935, 112, 102, 59, 32896, 55349, 56664, 97, 118, 101, 59, 32768, 96, 512, 99, 105, 9790, 9794, 114, 59, 32768, 8458, 109, 768, 59, 101, 108, 9802, 9804, 9807, 32768, 8819, 59, 32768, 10894, 59, 32768, 10896, 34304, 62, 59, 99, 100, 108, 113, 114, 9824, 9826, 9838, 9843, 9849, 9856, 32768, 62, 512, 99, 105, 9831, 9834, 59, 32768, 10919, 114, 59, 32768, 10874, 111, 116, 59, 32768, 8919, 80, 97, 114, 59, 32768, 10645, 117, 101, 115, 116, 59, 32768, 10876, 1280, 97, 100, 101, 108, 115, 9867, 9882, 9887, 9906, 9912, 833, 9872, 0, 9879, 112, 114, 111, 120, 59, 32768, 10886, 114, 59, 32768, 10616, 111, 116, 59, 32768, 8919, 113, 512, 108, 113, 9893, 9899, 101, 115, 115, 59, 32768, 8923, 108, 101, 115, 115, 59, 32768, 10892, 101, 115, 115, 59, 32768, 8823, 105, 109, 59, 32768, 8819, 512, 101, 110, 9922, 9932, 114, 116, 110, 101, 113, 113, 59, 32896, 8809, 65024, 69, 59, 32896, 8809, 65024, 2560, 65, 97, 98, 99, 101, 102, 107, 111, 115, 121, 9958, 9963, 10015, 10020, 10026, 10060, 10065, 10085, 10147, 10171, 114, 114, 59, 32768, 8660, 1024, 105, 108, 109, 114, 9972, 9978, 9982, 9988, 114, 115, 112, 59, 32768, 8202, 102, 59, 32768, 189, 105, 108, 116, 59, 32768, 8459, 512, 100, 114, 9993, 9998, 99, 121, 59, 32768, 1098, 768, 59, 99, 119, 10005, 10007, 10012, 32768, 8596, 105, 114, 59, 32768, 10568, 59, 32768, 8621, 97, 114, 59, 32768, 8463, 105, 114, 99, 59, 32768, 293, 768, 97, 108, 114, 10033, 10048, 10054, 114, 116, 115, 512, 59, 117, 10041, 10043, 32768, 9829, 105, 116, 59, 32768, 9829, 108, 105, 112, 59, 32768, 8230, 99, 111, 110, 59, 32768, 8889, 114, 59, 32896, 55349, 56613, 115, 512, 101, 119, 10071, 10078, 97, 114, 111, 119, 59, 32768, 10533, 97, 114, 111, 119, 59, 32768, 10534, 1280, 97, 109, 111, 112, 114, 10096, 10101, 10107, 10136, 10141, 114, 114, 59, 32768, 8703, 116, 104, 116, 59, 32768, 8763, 107, 512, 108, 114, 10113, 10124, 101, 102, 116, 97, 114, 114, 111, 119, 59, 32768, 8617, 105, 103, 104, 116, 97, 114, 114, 111, 119, 59, 32768, 8618, 102, 59, 32896, 55349, 56665, 98, 97, 114, 59, 32768, 8213, 768, 99, 108, 116, 10154, 10159, 10165, 114, 59, 32896, 55349, 56509, 97, 115, 104, 59, 32768, 8463, 114, 111, 107, 59, 32768, 295, 512, 98, 112, 10176, 10182, 117, 108, 108, 59, 32768, 8259, 104, 101, 110, 59, 32768, 8208, 5426, 10211, 0, 10220, 0, 10239, 10255, 10267, 0, 10276, 10312, 0, 0, 10318, 10371, 10458, 10485, 10491, 0, 10500, 10545, 10558, 99, 117, 116, 101, 33024, 237, 59, 32768, 237, 768, 59, 105, 121, 10226, 10228, 10235, 32768, 8291, 114, 99, 33024, 238, 59, 32768, 238, 59, 32768, 1080, 512, 99, 120, 10243, 10247, 121, 59, 32768, 1077, 99, 108, 33024, 161, 59, 32768, 161, 512, 102, 114, 10259, 10262, 59, 32768, 8660, 59, 32896, 55349, 56614, 114, 97, 118, 101, 33024, 236, 59, 32768, 236, 1024, 59, 105, 110, 111, 10284, 10286, 10300, 10306, 32768, 8520, 512, 105, 110, 10291, 10296, 110, 116, 59, 32768, 10764, 116, 59, 32768, 8749, 102, 105, 110, 59, 32768, 10716, 116, 97, 59, 32768, 8489, 108, 105, 103, 59, 32768, 307, 768, 97, 111, 112, 10324, 10361, 10365, 768, 99, 103, 116, 10331, 10335, 10357, 114, 59, 32768, 299, 768, 101, 108, 112, 10342, 10345, 10351, 59, 32768, 8465, 105, 110, 101, 59, 32768, 8464, 97, 114, 116, 59, 32768, 8465, 104, 59, 32768, 305, 102, 59, 32768, 8887, 101, 100, 59, 32768, 437, 1280, 59, 99, 102, 111, 116, 10381, 10383, 10389, 10403, 10409, 32768, 8712, 97, 114, 101, 59, 32768, 8453, 105, 110, 512, 59, 116, 10396, 10398, 32768, 8734, 105, 101, 59, 32768, 10717, 100, 111, 116, 59, 32768, 305, 1280, 59, 99, 101, 108, 112, 10420, 10422, 10427, 10444, 10451, 32768, 8747, 97, 108, 59, 32768, 8890, 512, 103, 114, 10432, 10438, 101, 114, 115, 59, 32768, 8484, 99, 97, 108, 59, 32768, 8890, 97, 114, 104, 107, 59, 32768, 10775, 114, 111, 100, 59, 32768, 10812, 1024, 99, 103, 112, 116, 10466, 10470, 10475, 10480, 121, 59, 32768, 1105, 111, 110, 59, 32768, 303, 102, 59, 32896, 55349, 56666, 97, 59, 32768, 953, 114, 111, 100, 59, 32768, 10812, 117, 101, 115, 116, 33024, 191, 59, 32768, 191, 512, 99, 105, 10504, 10509, 114, 59, 32896, 55349, 56510, 110, 1280, 59, 69, 100, 115, 118, 10521, 10523, 10526, 10531, 10541, 32768, 8712, 59, 32768, 8953, 111, 116, 59, 32768, 8949, 512, 59, 118, 10536, 10538, 32768, 8948, 59, 32768, 8947, 59, 32768, 8712, 512, 59, 105, 10549, 10551, 32768, 8290, 108, 100, 101, 59, 32768, 297, 828, 10562, 0, 10567, 99, 121, 59, 32768, 1110, 108, 33024, 239, 59, 32768, 239, 1536, 99, 102, 109, 111, 115, 117, 10585, 10598, 10603, 10609, 10615, 10630, 512, 105, 121, 10590, 10595, 114, 99, 59, 32768, 309, 59, 32768, 1081, 114, 59, 32896, 55349, 56615, 97, 116, 104, 59, 32768, 567, 112, 102, 59, 32896, 55349, 56667, 820, 10620, 0, 10625, 114, 59, 32896, 55349, 56511, 114, 99, 121, 59, 32768, 1112, 107, 99, 121, 59, 32768, 1108, 2048, 97, 99, 102, 103, 104, 106, 111, 115, 10653, 10666, 10680, 10685, 10692, 10697, 10702, 10708, 112, 112, 97, 512, 59, 118, 10661, 10663, 32768, 954, 59, 32768, 1008, 512, 101, 121, 10671, 10677, 100, 105, 108, 59, 32768, 311, 59, 32768, 1082, 114, 59, 32896, 55349, 56616, 114, 101, 101, 110, 59, 32768, 312, 99, 121, 59, 32768, 1093, 99, 121, 59, 32768, 1116, 112, 102, 59, 32896, 55349, 56668, 99, 114, 59, 32896, 55349, 56512, 5888, 65, 66, 69, 72, 97, 98, 99, 100, 101, 102, 103, 104, 106, 108, 109, 110, 111, 112, 114, 115, 116, 117, 118, 10761, 10783, 10789, 10799, 10804, 10957, 11011, 11047, 11094, 11349, 11372, 11382, 11409, 11414, 11451, 11478, 11526, 11698, 11711, 11755, 11823, 11910, 11929, 768, 97, 114, 116, 10768, 10773, 10777, 114, 114, 59, 32768, 8666, 114, 59, 32768, 8656, 97, 105, 108, 59, 32768, 10523, 97, 114, 114, 59, 32768, 10510, 512, 59, 103, 10794, 10796, 32768, 8806, 59, 32768, 10891, 97, 114, 59, 32768, 10594, 4660, 10824, 0, 10830, 0, 10838, 0, 0, 0, 0, 0, 10844, 10850, 0, 10867, 10870, 10877, 0, 10933, 117, 116, 101, 59, 32768, 314, 109, 112, 116, 121, 118, 59, 32768, 10676, 114, 97, 110, 59, 32768, 8466, 98, 100, 97, 59, 32768, 955, 103, 768, 59, 100, 108, 10857, 10859, 10862, 32768, 10216, 59, 32768, 10641, 101, 59, 32768, 10216, 59, 32768, 10885, 117, 111, 33024, 171, 59, 32768, 171, 114, 2048, 59, 98, 102, 104, 108, 112, 115, 116, 10894, 10896, 10907, 10911, 10915, 10919, 10923, 10928, 32768, 8592, 512, 59, 102, 10901, 10903, 32768, 8676, 115, 59, 32768, 10527, 115, 59, 32768, 10525, 107, 59, 32768, 8617, 112, 59, 32768, 8619, 108, 59, 32768, 10553, 105, 109, 59, 32768, 10611, 108, 59, 32768, 8610, 768, 59, 97, 101, 10939, 10941, 10946, 32768, 10923, 105, 108, 59, 32768, 10521, 512, 59, 115, 10951, 10953, 32768, 10925, 59, 32896, 10925, 65024, 768, 97, 98, 114, 10964, 10969, 10974, 114, 114, 59, 32768, 10508, 114, 107, 59, 32768, 10098, 512, 97, 107, 10979, 10991, 99, 512, 101, 107, 10985, 10988, 59, 32768, 123, 59, 32768, 91, 512, 101, 115, 10996, 10999, 59, 32768, 10635, 108, 512, 100, 117, 11005, 11008, 59, 32768, 10639, 59, 32768, 10637, 1024, 97, 101, 117, 121, 11020, 11026, 11040, 11044, 114, 111, 110, 59, 32768, 318, 512, 100, 105, 11031, 11036, 105, 108, 59, 32768, 316, 108, 59, 32768, 8968, 98, 59, 32768, 123, 59, 32768, 1083, 1024, 99, 113, 114, 115, 11056, 11060, 11072, 11090, 97, 59, 32768, 10550, 117, 111, 512, 59, 114, 11067, 11069, 32768, 8220, 59, 32768, 8222, 512, 100, 117, 11077, 11083, 104, 97, 114, 59, 32768, 10599, 115, 104, 97, 114, 59, 32768, 10571, 104, 59, 32768, 8626, 1280, 59, 102, 103, 113, 115, 11105, 11107, 11228, 11231, 11250, 32768, 8804, 116, 1280, 97, 104, 108, 114, 116, 11119, 11136, 11157, 11169, 11216, 114, 114, 111, 119, 512, 59, 116, 11128, 11130, 32768, 8592, 97, 105, 108, 59, 32768, 8610, 97, 114, 112, 111, 111, 110, 512, 100, 117, 11147, 11153, 111, 119, 110, 59, 32768, 8637, 112, 59, 32768, 8636, 101, 102, 116, 97, 114, 114, 111, 119, 115, 59, 32768, 8647, 105, 103, 104, 116, 768, 97, 104, 115, 11180, 11194, 11204, 114, 114, 111, 119, 512, 59, 115, 11189, 11191, 32768, 8596, 59, 32768, 8646, 97, 114, 112, 111, 111, 110, 115, 59, 32768, 8651, 113, 117, 105, 103, 97, 114, 114, 111, 119, 59, 32768, 8621, 104, 114, 101, 101, 116, 105, 109, 101, 115, 59, 32768, 8907, 59, 32768, 8922, 768, 59, 113, 115, 11238, 11240, 11243, 32768, 8804, 59, 32768, 8806, 108, 97, 110, 116, 59, 32768, 10877, 1280, 59, 99, 100, 103, 115, 11261, 11263, 11267, 11286, 11298, 32768, 10877, 99, 59, 32768, 10920, 111, 116, 512, 59, 111, 11274, 11276, 32768, 10879, 512, 59, 114, 11281, 11283, 32768, 10881, 59, 32768, 10883, 512, 59, 101, 11291, 11294, 32896, 8922, 65024, 115, 59, 32768, 10899, 1280, 97, 100, 101, 103, 115, 11309, 11317, 11322, 11339, 11344, 112, 112, 114, 111, 120, 59, 32768, 10885, 111, 116, 59, 32768, 8918, 113, 512, 103, 113, 11328, 11333, 116, 114, 59, 32768, 8922, 103, 116, 114, 59, 32768, 10891, 116, 114, 59, 32768, 8822, 105, 109, 59, 32768, 8818, 768, 105, 108, 114, 11356, 11362, 11368, 115, 104, 116, 59, 32768, 10620, 111, 111, 114, 59, 32768, 8970, 59, 32896, 55349, 56617, 512, 59, 69, 11377, 11379, 32768, 8822, 59, 32768, 10897, 562, 11386, 11405, 114, 512, 100, 117, 11391, 11394, 59, 32768, 8637, 512, 59, 108, 11399, 11401, 32768, 8636, 59, 32768, 10602, 108, 107, 59, 32768, 9604, 99, 121, 59, 32768, 1113, 1280, 59, 97, 99, 104, 116, 11425, 11427, 11432, 11440, 11446, 32768, 8810, 114, 114, 59, 32768, 8647, 111, 114, 110, 101, 114, 59, 32768, 8990, 97, 114, 100, 59, 32768, 10603, 114, 105, 59, 32768, 9722, 512, 105, 111, 11456, 11462, 100, 111, 116, 59, 32768, 320, 117, 115, 116, 512, 59, 97, 11470, 11472, 32768, 9136, 99, 104, 101, 59, 32768, 9136, 1024, 69, 97, 101, 115, 11487, 11490, 11504, 11521, 59, 32768, 8808, 112, 512, 59, 112, 11496, 11498, 32768, 10889, 114, 111, 120, 59, 32768, 10889, 512, 59, 113, 11509, 11511, 32768, 10887, 512, 59, 113, 11516, 11518, 32768, 10887, 59, 32768, 8808, 105, 109, 59, 32768, 8934, 2048, 97, 98, 110, 111, 112, 116, 119, 122, 11543, 11556, 11561, 11616, 11640, 11660, 11667, 11680, 512, 110, 114, 11548, 11552, 103, 59, 32768, 10220, 114, 59, 32768, 8701, 114, 107, 59, 32768, 10214, 103, 768, 108, 109, 114, 11569, 11596, 11604, 101, 102, 116, 512, 97, 114, 11577, 11584, 114, 114, 111, 119, 59, 32768, 10229, 105, 103, 104, 116, 97, 114, 114, 111, 119, 59, 32768, 10231, 97, 112, 115, 116, 111, 59, 32768, 10236, 105, 103, 104, 116, 97, 114, 114, 111, 119, 59, 32768, 10230, 112, 97, 114, 114, 111, 119, 512, 108, 114, 11627, 11633, 101, 102, 116, 59, 32768, 8619, 105, 103, 104, 116, 59, 32768, 8620, 768, 97, 102, 108, 11647, 11651, 11655, 114, 59, 32768, 10629, 59, 32896, 55349, 56669, 117, 115, 59, 32768, 10797, 105, 109, 101, 115, 59, 32768, 10804, 562, 11671, 11676, 115, 116, 59, 32768, 8727, 97, 114, 59, 32768, 95, 768, 59, 101, 102, 11687, 11689, 11695, 32768, 9674, 110, 103, 101, 59, 32768, 9674, 59, 32768, 10731, 97, 114, 512, 59, 108, 11705, 11707, 32768, 40, 116, 59, 32768, 10643, 1280, 97, 99, 104, 109, 116, 11722, 11727, 11735, 11747, 11750, 114, 114, 59, 32768, 8646, 111, 114, 110, 101, 114, 59, 32768, 8991, 97, 114, 512, 59, 100, 11742, 11744, 32768, 8651, 59, 32768, 10605, 59, 32768, 8206, 114, 105, 59, 32768, 8895, 1536, 97, 99, 104, 105, 113, 116, 11768, 11774, 11779, 11782, 11798, 11817, 113, 117, 111, 59, 32768, 8249, 114, 59, 32896, 55349, 56513, 59, 32768, 8624, 109, 768, 59, 101, 103, 11790, 11792, 11795, 32768, 8818, 59, 32768, 10893, 59, 32768, 10895, 512, 98, 117, 11803, 11806, 59, 32768, 91, 111, 512, 59, 114, 11812, 11814, 32768, 8216, 59, 32768, 8218, 114, 111, 107, 59, 32768, 322, 34816, 60, 59, 99, 100, 104, 105, 108, 113, 114, 11841, 11843, 11855, 11860, 11866, 11872, 11878, 11885, 32768, 60, 512, 99, 105, 11848, 11851, 59, 32768, 10918, 114, 59, 32768, 10873, 111, 116, 59, 32768, 8918, 114, 101, 101, 59, 32768, 8907, 109, 101, 115, 59, 32768, 8905, 97, 114, 114, 59, 32768, 10614, 117, 101, 115, 116, 59, 32768, 10875, 512, 80, 105, 11890, 11895, 97, 114, 59, 32768, 10646, 768, 59, 101, 102, 11902, 11904, 11907, 32768, 9667, 59, 32768, 8884, 59, 32768, 9666, 114, 512, 100, 117, 11916, 11923, 115, 104, 97, 114, 59, 32768, 10570, 104, 97, 114, 59, 32768, 10598, 512, 101, 110, 11934, 11944, 114, 116, 110, 101, 113, 113, 59, 32896, 8808, 65024, 69, 59, 32896, 8808, 65024, 3584, 68, 97, 99, 100, 101, 102, 104, 105, 108, 110, 111, 112, 115, 117, 11978, 11984, 12061, 12075, 12081, 12095, 12100, 12104, 12170, 12181, 12188, 12204, 12207, 12223, 68, 111, 116, 59, 32768, 8762, 1024, 99, 108, 112, 114, 11993, 11999, 12019, 12055, 114, 33024, 175, 59, 32768, 175, 512, 101, 116, 12004, 12007, 59, 32768, 9794, 512, 59, 101, 12012, 12014, 32768, 10016, 115, 101, 59, 32768, 10016, 512, 59, 115, 12024, 12026, 32768, 8614, 116, 111, 1024, 59, 100, 108, 117, 12037, 12039, 12045, 12051, 32768, 8614, 111, 119, 110, 59, 32768, 8615, 101, 102, 116, 59, 32768, 8612, 112, 59, 32768, 8613, 107, 101, 114, 59, 32768, 9646, 512, 111, 121, 12066, 12072, 109, 109, 97, 59, 32768, 10793, 59, 32768, 1084, 97, 115, 104, 59, 32768, 8212, 97, 115, 117, 114, 101, 100, 97, 110, 103, 108, 101, 59, 32768, 8737, 114, 59, 32896, 55349, 56618, 111, 59, 32768, 8487, 768, 99, 100, 110, 12111, 12118, 12146, 114, 111, 33024, 181, 59, 32768, 181, 1024, 59, 97, 99, 100, 12127, 12129, 12134, 12139, 32768, 8739, 115, 116, 59, 32768, 42, 105, 114, 59, 32768, 10992, 111, 116, 33024, 183, 59, 32768, 183, 117, 115, 768, 59, 98, 100, 12155, 12157, 12160, 32768, 8722, 59, 32768, 8863, 512, 59, 117, 12165, 12167, 32768, 8760, 59, 32768, 10794, 564, 12174, 12178, 112, 59, 32768, 10971, 114, 59, 32768, 8230, 112, 108, 117, 115, 59, 32768, 8723, 512, 100, 112, 12193, 12199, 101, 108, 115, 59, 32768, 8871, 102, 59, 32896, 55349, 56670, 59, 32768, 8723, 512, 99, 116, 12212, 12217, 114, 59, 32896, 55349, 56514, 112, 111, 115, 59, 32768, 8766, 768, 59, 108, 109, 12230, 12232, 12240, 32768, 956, 116, 105, 109, 97, 112, 59, 32768, 8888, 97, 112, 59, 32768, 8888, 6144, 71, 76, 82, 86, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 108, 109, 111, 112, 114, 115, 116, 117, 118, 119, 12294, 12315, 12364, 12376, 12393, 12472, 12496, 12547, 12553, 12636, 12641, 12703, 12725, 12747, 12752, 12876, 12881, 12957, 13033, 13089, 13294, 13359, 13384, 13499, 512, 103, 116, 12299, 12303, 59, 32896, 8921, 824, 512, 59, 118, 12308, 12311, 32896, 8811, 8402, 59, 32896, 8811, 824, 768, 101, 108, 116, 12322, 12348, 12352, 102, 116, 512, 97, 114, 12329, 12336, 114, 114, 111, 119, 59, 32768, 8653, 105, 103, 104, 116, 97, 114, 114, 111, 119, 59, 32768, 8654, 59, 32896, 8920, 824, 512, 59, 118, 12357, 12360, 32896, 8810, 8402, 59, 32896, 8810, 824, 105, 103, 104, 116, 97, 114, 114, 111, 119, 59, 32768, 8655, 512, 68, 100, 12381, 12387, 97, 115, 104, 59, 32768, 8879, 97, 115, 104, 59, 32768, 8878, 1280, 98, 99, 110, 112, 116, 12404, 12409, 12415, 12420, 12452, 108, 97, 59, 32768, 8711, 117, 116, 101, 59, 32768, 324, 103, 59, 32896, 8736, 8402, 1280, 59, 69, 105, 111, 112, 12431, 12433, 12437, 12442, 12446, 32768, 8777, 59, 32896, 10864, 824, 100, 59, 32896, 8779, 824, 115, 59, 32768, 329, 114, 111, 120, 59, 32768, 8777, 117, 114, 512, 59, 97, 12459, 12461, 32768, 9838, 108, 512, 59, 115, 12467, 12469, 32768, 9838, 59, 32768, 8469, 836, 12477, 0, 12483, 112, 33024, 160, 59, 32768, 160, 109, 112, 512, 59, 101, 12489, 12492, 32896, 8782, 824, 59, 32896, 8783, 824, 1280, 97, 101, 111, 117, 121, 12507, 12519, 12525, 12540, 12544, 833, 12512, 0, 12515, 59, 32768, 10819, 111, 110, 59, 32768, 328, 100, 105, 108, 59, 32768, 326, 110, 103, 512, 59, 100, 12532, 12534, 32768, 8775, 111, 116, 59, 32896, 10861, 824, 112, 59, 32768, 10818, 59, 32768, 1085, 97, 115, 104, 59, 32768, 8211, 1792, 59, 65, 97, 100, 113, 115, 120, 12568, 12570, 12575, 12596, 12602, 12608, 12623, 32768, 8800, 114, 114, 59, 32768, 8663, 114, 512, 104, 114, 12581, 12585, 107, 59, 32768, 10532, 512, 59, 111, 12590, 12592, 32768, 8599, 119, 59, 32768, 8599, 111, 116, 59, 32896, 8784, 824, 117, 105, 118, 59, 32768, 8802, 512, 101, 105, 12613, 12618, 97, 114, 59, 32768, 10536, 109, 59, 32896, 8770, 824, 105, 115, 116, 512, 59, 115, 12631, 12633, 32768, 8708, 59, 32768, 8708, 114, 59, 32896, 55349, 56619, 1024, 69, 101, 115, 116, 12650, 12654, 12688, 12693, 59, 32896, 8807, 824, 768, 59, 113, 115, 12661, 12663, 12684, 32768, 8817, 768, 59, 113, 115, 12670, 12672, 12676, 32768, 8817, 59, 32896, 8807, 824, 108, 97, 110, 116, 59, 32896, 10878, 824, 59, 32896, 10878, 824, 105, 109, 59, 32768, 8821, 512, 59, 114, 12698, 12700, 32768, 8815, 59, 32768, 8815, 768, 65, 97, 112, 12710, 12715, 12720, 114, 114, 59, 32768, 8654, 114, 114, 59, 32768, 8622, 97, 114, 59, 32768, 10994, 768, 59, 115, 118, 12732, 12734, 12744, 32768, 8715, 512, 59, 100, 12739, 12741, 32768, 8956, 59, 32768, 8954, 59, 32768, 8715, 99, 121, 59, 32768, 1114, 1792, 65, 69, 97, 100, 101, 115, 116, 12767, 12772, 12776, 12781, 12785, 12853, 12858, 114, 114, 59, 32768, 8653, 59, 32896, 8806, 824, 114, 114, 59, 32768, 8602, 114, 59, 32768, 8229, 1024, 59, 102, 113, 115, 12794, 12796, 12821, 12842, 32768, 8816, 116, 512, 97, 114, 12802, 12809, 114, 114, 111, 119, 59, 32768, 8602, 105, 103, 104, 116, 97, 114, 114, 111, 119, 59, 32768, 8622, 768, 59, 113, 115, 12828, 12830, 12834, 32768, 8816, 59, 32896, 8806, 824, 108, 97, 110, 116, 59, 32896, 10877, 824, 512, 59, 115, 12847, 12850, 32896, 10877, 824, 59, 32768, 8814, 105, 109, 59, 32768, 8820, 512, 59, 114, 12863, 12865, 32768, 8814, 105, 512, 59, 101, 12871, 12873, 32768, 8938, 59, 32768, 8940, 105, 100, 59, 32768, 8740, 512, 112, 116, 12886, 12891, 102, 59, 32896, 55349, 56671, 33536, 172, 59, 105, 110, 12899, 12901, 12936, 32768, 172, 110, 1024, 59, 69, 100, 118, 12911, 12913, 12917, 12923, 32768, 8713, 59, 32896, 8953, 824, 111, 116, 59, 32896, 8949, 824, 818, 12928, 12931, 12934, 59, 32768, 8713, 59, 32768, 8951, 59, 32768, 8950, 105, 512, 59, 118, 12942, 12944, 32768, 8716, 818, 12949, 12952, 12955, 59, 32768, 8716, 59, 32768, 8958, 59, 32768, 8957, 768, 97, 111, 114, 12964, 12992, 12999, 114, 1024, 59, 97, 115, 116, 12974, 12976, 12983, 12988, 32768, 8742, 108, 108, 101, 108, 59, 32768, 8742, 108, 59, 32896, 11005, 8421, 59, 32896, 8706, 824, 108, 105, 110, 116, 59, 32768, 10772, 768, 59, 99, 101, 13006, 13008, 13013, 32768, 8832, 117, 101, 59, 32768, 8928, 512, 59, 99, 13018, 13021, 32896, 10927, 824, 512, 59, 101, 13026, 13028, 32768, 8832, 113, 59, 32896, 10927, 824, 1024, 65, 97, 105, 116, 13042, 13047, 13066, 13077, 114, 114, 59, 32768, 8655, 114, 114, 768, 59, 99, 119, 13056, 13058, 13062, 32768, 8603, 59, 32896, 10547, 824, 59, 32896, 8605, 824, 103, 104, 116, 97, 114, 114, 111, 119, 59, 32768, 8603, 114, 105, 512, 59, 101, 13084, 13086, 32768, 8939, 59, 32768, 8941, 1792, 99, 104, 105, 109, 112, 113, 117, 13104, 13128, 13151, 13169, 13174, 13179, 13194, 1024, 59, 99, 101, 114, 13113, 13115, 13120, 13124, 32768, 8833, 117, 101, 59, 32768, 8929, 59, 32896, 10928, 824, 59, 32896, 55349, 56515, 111, 114, 116, 1086, 13137, 0, 0, 13142, 105, 100, 59, 32768, 8740, 97, 114, 97, 108, 108, 101, 108, 59, 32768, 8742, 109, 512, 59, 101, 13157, 13159, 32768, 8769, 512, 59, 113, 13164, 13166, 32768, 8772, 59, 32768, 8772, 105, 100, 59, 32768, 8740, 97, 114, 59, 32768, 8742, 115, 117, 512, 98, 112, 13186, 13190, 101, 59, 32768, 8930, 101, 59, 32768, 8931, 768, 98, 99, 112, 13201, 13241, 13254, 1024, 59, 69, 101, 115, 13210, 13212, 13216, 13219, 32768, 8836, 59, 32896, 10949, 824, 59, 32768, 8840, 101, 116, 512, 59, 101, 13226, 13229, 32896, 8834, 8402, 113, 512, 59, 113, 13235, 13237, 32768, 8840, 59, 32896, 10949, 824, 99, 512, 59, 101, 13247, 13249, 32768, 8833, 113, 59, 32896, 10928, 824, 1024, 59, 69, 101, 115, 13263, 13265, 13269, 13272, 32768, 8837, 59, 32896, 10950, 824, 59, 32768, 8841, 101, 116, 512, 59, 101, 13279, 13282, 32896, 8835, 8402, 113, 512, 59, 113, 13288, 13290, 32768, 8841, 59, 32896, 10950, 824, 1024, 103, 105, 108, 114, 13303, 13307, 13315, 13319, 108, 59, 32768, 8825, 108, 100, 101, 33024, 241, 59, 32768, 241, 103, 59, 32768, 8824, 105, 97, 110, 103, 108, 101, 512, 108, 114, 13330, 13344, 101, 102, 116, 512, 59, 101, 13338, 13340, 32768, 8938, 113, 59, 32768, 8940, 105, 103, 104, 116, 512, 59, 101, 13353, 13355, 32768, 8939, 113, 59, 32768, 8941, 512, 59, 109, 13364, 13366, 32768, 957, 768, 59, 101, 115, 13373, 13375, 13380, 32768, 35, 114, 111, 59, 32768, 8470, 112, 59, 32768, 8199, 2304, 68, 72, 97, 100, 103, 105, 108, 114, 115, 13403, 13409, 13415, 13420, 13426, 13439, 13446, 13476, 13493, 97, 115, 104, 59, 32768, 8877, 97, 114, 114, 59, 32768, 10500, 112, 59, 32896, 8781, 8402, 97, 115, 104, 59, 32768, 8876, 512, 101, 116, 13431, 13435, 59, 32896, 8805, 8402, 59, 32896, 62, 8402, 110, 102, 105, 110, 59, 32768, 10718, 768, 65, 101, 116, 13453, 13458, 13462, 114, 114, 59, 32768, 10498, 59, 32896, 8804, 8402, 512, 59, 114, 13467, 13470, 32896, 60, 8402, 105, 101, 59, 32896, 8884, 8402, 512, 65, 116, 13481, 13486, 114, 114, 59, 32768, 10499, 114, 105, 101, 59, 32896, 8885, 8402, 105, 109, 59, 32896, 8764, 8402, 768, 65, 97, 110, 13506, 13511, 13532, 114, 114, 59, 32768, 8662, 114, 512, 104, 114, 13517, 13521, 107, 59, 32768, 10531, 512, 59, 111, 13526, 13528, 32768, 8598, 119, 59, 32768, 8598, 101, 97, 114, 59, 32768, 10535, 9252, 13576, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13579, 0, 13596, 13617, 13653, 13659, 13673, 13695, 13708, 0, 0, 13713, 13750, 0, 13788, 13794, 0, 13815, 13890, 13913, 13937, 13944, 59, 32768, 9416, 512, 99, 115, 13583, 13591, 117, 116, 101, 33024, 243, 59, 32768, 243, 116, 59, 32768, 8859, 512, 105, 121, 13600, 13613, 114, 512, 59, 99, 13606, 13608, 32768, 8858, 33024, 244, 59, 32768, 244, 59, 32768, 1086, 1280, 97, 98, 105, 111, 115, 13627, 13632, 13638, 13642, 13646, 115, 104, 59, 32768, 8861, 108, 97, 99, 59, 32768, 337, 118, 59, 32768, 10808, 116, 59, 32768, 8857, 111, 108, 100, 59, 32768, 10684, 108, 105, 103, 59, 32768, 339, 512, 99, 114, 13663, 13668, 105, 114, 59, 32768, 10687, 59, 32896, 55349, 56620, 1600, 13680, 0, 0, 13684, 0, 13692, 110, 59, 32768, 731, 97, 118, 101, 33024, 242, 59, 32768, 242, 59, 32768, 10689, 512, 98, 109, 13699, 13704, 97, 114, 59, 32768, 10677, 59, 32768, 937, 110, 116, 59, 32768, 8750, 1024, 97, 99, 105, 116, 13721, 13726, 13741, 13746, 114, 114, 59, 32768, 8634, 512, 105, 114, 13731, 13735, 114, 59, 32768, 10686, 111, 115, 115, 59, 32768, 10683, 110, 101, 59, 32768, 8254, 59, 32768, 10688, 768, 97, 101, 105, 13756, 13761, 13766, 99, 114, 59, 32768, 333, 103, 97, 59, 32768, 969, 768, 99, 100, 110, 13773, 13779, 13782, 114, 111, 110, 59, 32768, 959, 59, 32768, 10678, 117, 115, 59, 32768, 8854, 112, 102, 59, 32896, 55349, 56672, 768, 97, 101, 108, 13800, 13804, 13809, 114, 59, 32768, 10679, 114, 112, 59, 32768, 10681, 117, 115, 59, 32768, 8853, 1792, 59, 97, 100, 105, 111, 115, 118, 13829, 13831, 13836, 13869, 13875, 13879, 13886, 32768, 8744, 114, 114, 59, 32768, 8635, 1024, 59, 101, 102, 109, 13845, 13847, 13859, 13864, 32768, 10845, 114, 512, 59, 111, 13853, 13855, 32768, 8500, 102, 59, 32768, 8500, 33024, 170, 59, 32768, 170, 33024, 186, 59, 32768, 186, 103, 111, 102, 59, 32768, 8886, 114, 59, 32768, 10838, 108, 111, 112, 101, 59, 32768, 10839, 59, 32768, 10843, 768, 99, 108, 111, 13896, 13900, 13908, 114, 59, 32768, 8500, 97, 115, 104, 33024, 248, 59, 32768, 248, 108, 59, 32768, 8856, 105, 573, 13917, 13924, 100, 101, 33024, 245, 59, 32768, 245, 101, 115, 512, 59, 97, 13930, 13932, 32768, 8855, 115, 59, 32768, 10806, 109, 108, 33024, 246, 59, 32768, 246, 98, 97, 114, 59, 32768, 9021, 5426, 13972, 0, 14013, 0, 14017, 14053, 0, 14058, 14086, 0, 0, 14107, 14199, 0, 14202, 0, 0, 14229, 14425, 0, 14438, 114, 1024, 59, 97, 115, 116, 13981, 13983, 13997, 14009, 32768, 8741, 33280, 182, 59, 108, 13989, 13991, 32768, 182, 108, 101, 108, 59, 32768, 8741, 1082, 14003, 0, 0, 14007, 109, 59, 32768, 10995, 59, 32768, 11005, 59, 32768, 8706, 121, 59, 32768, 1087, 114, 1280, 99, 105, 109, 112, 116, 14028, 14033, 14038, 14043, 14046, 110, 116, 59, 32768, 37, 111, 100, 59, 32768, 46, 105, 108, 59, 32768, 8240, 59, 32768, 8869, 101, 110, 107, 59, 32768, 8241, 114, 59, 32896, 55349, 56621, 768, 105, 109, 111, 14064, 14074, 14080, 512, 59, 118, 14069, 14071, 32768, 966, 59, 32768, 981, 109, 97, 116, 59, 32768, 8499, 110, 101, 59, 32768, 9742, 768, 59, 116, 118, 14092, 14094, 14103, 32768, 960, 99, 104, 102, 111, 114, 107, 59, 32768, 8916, 59, 32768, 982, 512, 97, 117, 14111, 14132, 110, 512, 99, 107, 14117, 14128, 107, 512, 59, 104, 14123, 14125, 32768, 8463, 59, 32768, 8462, 118, 59, 32768, 8463, 115, 2304, 59, 97, 98, 99, 100, 101, 109, 115, 116, 14152, 14154, 14160, 14163, 14168, 14179, 14182, 14188, 14193, 32768, 43, 99, 105, 114, 59, 32768, 10787, 59, 32768, 8862, 105, 114, 59, 32768, 10786, 512, 111, 117, 14173, 14176, 59, 32768, 8724, 59, 32768, 10789, 59, 32768, 10866, 110, 33024, 177, 59, 32768, 177, 105, 109, 59, 32768, 10790, 119, 111, 59, 32768, 10791, 59, 32768, 177, 768, 105, 112, 117, 14208, 14216, 14221, 110, 116, 105, 110, 116, 59, 32768, 10773, 102, 59, 32896, 55349, 56673, 110, 100, 33024, 163, 59, 32768, 163, 2560, 59, 69, 97, 99, 101, 105, 110, 111, 115, 117, 14249, 14251, 14254, 14258, 14263, 14336, 14348, 14367, 14413, 14418, 32768, 8826, 59, 32768, 10931, 112, 59, 32768, 10935, 117, 101, 59, 32768, 8828, 512, 59, 99, 14268, 14270, 32768, 10927, 1536, 59, 97, 99, 101, 110, 115, 14283, 14285, 14293, 14302, 14306, 14331, 32768, 8826, 112, 112, 114, 111, 120, 59, 32768, 10935, 117, 114, 108, 121, 101, 113, 59, 32768, 8828, 113, 59, 32768, 10927, 768, 97, 101, 115, 14313, 14321, 14326, 112, 112, 114, 111, 120, 59, 32768, 10937, 113, 113, 59, 32768, 10933, 105, 109, 59, 32768, 8936, 105, 109, 59, 32768, 8830, 109, 101, 512, 59, 115, 14343, 14345, 32768, 8242, 59, 32768, 8473, 768, 69, 97, 115, 14355, 14358, 14362, 59, 32768, 10933, 112, 59, 32768, 10937, 105, 109, 59, 32768, 8936, 768, 100, 102, 112, 14374, 14377, 14402, 59, 32768, 8719, 768, 97, 108, 115, 14384, 14390, 14396, 108, 97, 114, 59, 32768, 9006, 105, 110, 101, 59, 32768, 8978, 117, 114, 102, 59, 32768, 8979, 512, 59, 116, 14407, 14409, 32768, 8733, 111, 59, 32768, 8733, 105, 109, 59, 32768, 8830, 114, 101, 108, 59, 32768, 8880, 512, 99, 105, 14429, 14434, 114, 59, 32896, 55349, 56517, 59, 32768, 968, 110, 99, 115, 112, 59, 32768, 8200, 1536, 102, 105, 111, 112, 115, 117, 14457, 14462, 14467, 14473, 14480, 14486, 114, 59, 32896, 55349, 56622, 110, 116, 59, 32768, 10764, 112, 102, 59, 32896, 55349, 56674, 114, 105, 109, 101, 59, 32768, 8279, 99, 114, 59, 32896, 55349, 56518, 768, 97, 101, 111, 14493, 14513, 14526, 116, 512, 101, 105, 14499, 14508, 114, 110, 105, 111, 110, 115, 59, 32768, 8461, 110, 116, 59, 32768, 10774, 115, 116, 512, 59, 101, 14520, 14522, 32768, 63, 113, 59, 32768, 8799, 116, 33024, 34, 59, 32768, 34, 5376, 65, 66, 72, 97, 98, 99, 100, 101, 102, 104, 105, 108, 109, 110, 111, 112, 114, 115, 116, 117, 120, 14575, 14597, 14603, 14608, 14775, 14829, 14865, 14901, 14943, 14966, 15000, 15139, 15159, 15176, 15182, 15236, 15261, 15267, 15309, 15352, 15360, 768, 97, 114, 116, 14582, 14587, 14591, 114, 114, 59, 32768, 8667, 114, 59, 32768, 8658, 97, 105, 108, 59, 32768, 10524, 97, 114, 114, 59, 32768, 10511, 97, 114, 59, 32768, 10596, 1792, 99, 100, 101, 110, 113, 114, 116, 14623, 14637, 14642, 14650, 14672, 14679, 14751, 512, 101, 117, 14628, 14632, 59, 32896, 8765, 817, 116, 101, 59, 32768, 341, 105, 99, 59, 32768, 8730, 109, 112, 116, 121, 118, 59, 32768, 10675, 103, 1024, 59, 100, 101, 108, 14660, 14662, 14665, 14668, 32768, 10217, 59, 32768, 10642, 59, 32768, 10661, 101, 59, 32768, 10217, 117, 111, 33024, 187, 59, 32768, 187, 114, 2816, 59, 97, 98, 99, 102, 104, 108, 112, 115, 116, 119, 14703, 14705, 14709, 14720, 14723, 14727, 14731, 14735, 14739, 14744, 14748, 32768, 8594, 112, 59, 32768, 10613, 512, 59, 102, 14714, 14716, 32768, 8677, 115, 59, 32768, 10528, 59, 32768, 10547, 115, 59, 32768, 10526, 107, 59, 32768, 8618, 112, 59, 32768, 8620, 108, 59, 32768, 10565, 105, 109, 59, 32768, 10612, 108, 59, 32768, 8611, 59, 32768, 8605, 512, 97, 105, 14756, 14761, 105, 108, 59, 32768, 10522, 111, 512, 59, 110, 14767, 14769, 32768, 8758, 97, 108, 115, 59, 32768, 8474, 768, 97, 98, 114, 14782, 14787, 14792, 114, 114, 59, 32768, 10509, 114, 107, 59, 32768, 10099, 512, 97, 107, 14797, 14809, 99, 512, 101, 107, 14803, 14806, 59, 32768, 125, 59, 32768, 93, 512, 101, 115, 14814, 14817, 59, 32768, 10636, 108, 512, 100, 117, 14823, 14826, 59, 32768, 10638, 59, 32768, 10640, 1024, 97, 101, 117, 121, 14838, 14844, 14858, 14862, 114, 111, 110, 59, 32768, 345, 512, 100, 105, 14849, 14854, 105, 108, 59, 32768, 343, 108, 59, 32768, 8969, 98, 59, 32768, 125, 59, 32768, 1088, 1024, 99, 108, 113, 115, 14874, 14878, 14885, 14897, 97, 59, 32768, 10551, 100, 104, 97, 114, 59, 32768, 10601, 117, 111, 512, 59, 114, 14892, 14894, 32768, 8221, 59, 32768, 8221, 104, 59, 32768, 8627, 768, 97, 99, 103, 14908, 14934, 14938, 108, 1024, 59, 105, 112, 115, 14918, 14920, 14925, 14931, 32768, 8476, 110, 101, 59, 32768, 8475, 97, 114, 116, 59, 32768, 8476, 59, 32768, 8477, 116, 59, 32768, 9645, 33024, 174, 59, 32768, 174, 768, 105, 108, 114, 14950, 14956, 14962, 115, 104, 116, 59, 32768, 10621, 111, 111, 114, 59, 32768, 8971, 59, 32896, 55349, 56623, 512, 97, 111, 14971, 14990, 114, 512, 100, 117, 14977, 14980, 59, 32768, 8641, 512, 59, 108, 14985, 14987, 32768, 8640, 59, 32768, 10604, 512, 59, 118, 14995, 14997, 32768, 961, 59, 32768, 1009, 768, 103, 110, 115, 15007, 15123, 15127, 104, 116, 1536, 97, 104, 108, 114, 115, 116, 15022, 15039, 15060, 15086, 15099, 15111, 114, 114, 111, 119, 512, 59, 116, 15031, 15033, 32768, 8594, 97, 105, 108, 59, 32768, 8611, 97, 114, 112, 111, 111, 110, 512, 100, 117, 15050, 15056, 111, 119, 110, 59, 32768, 8641, 112, 59, 32768, 8640, 101, 102, 116, 512, 97, 104, 15068, 15076, 114, 114, 111, 119, 115, 59, 32768, 8644, 97, 114, 112, 111, 111, 110, 115, 59, 32768, 8652, 105, 103, 104, 116, 97, 114, 114, 111, 119, 115, 59, 32768, 8649, 113, 117, 105, 103, 97, 114, 114, 111, 119, 59, 32768, 8605, 104, 114, 101, 101, 116, 105, 109, 101, 115, 59, 32768, 8908, 103, 59, 32768, 730, 105, 110, 103, 100, 111, 116, 115, 101, 113, 59, 32768, 8787, 768, 97, 104, 109, 15146, 15151, 15156, 114, 114, 59, 32768, 8644, 97, 114, 59, 32768, 8652, 59, 32768, 8207, 111, 117, 115, 116, 512, 59, 97, 15168, 15170, 32768, 9137, 99, 104, 101, 59, 32768, 9137, 109, 105, 100, 59, 32768, 10990, 1024, 97, 98, 112, 116, 15191, 15204, 15209, 15229, 512, 110, 114, 15196, 15200, 103, 59, 32768, 10221, 114, 59, 32768, 8702, 114, 107, 59, 32768, 10215, 768, 97, 102, 108, 15216, 15220, 15224, 114, 59, 32768, 10630, 59, 32896, 55349, 56675, 117, 115, 59, 32768, 10798, 105, 109, 101, 115, 59, 32768, 10805, 512, 97, 112, 15241, 15253, 114, 512, 59, 103, 15247, 15249, 32768, 41, 116, 59, 32768, 10644, 111, 108, 105, 110, 116, 59, 32768, 10770, 97, 114, 114, 59, 32768, 8649, 1024, 97, 99, 104, 113, 15276, 15282, 15287, 15290, 113, 117, 111, 59, 32768, 8250, 114, 59, 32896, 55349, 56519, 59, 32768, 8625, 512, 98, 117, 15295, 15298, 59, 32768, 93, 111, 512, 59, 114, 15304, 15306, 32768, 8217, 59, 32768, 8217, 768, 104, 105, 114, 15316, 15322, 15328, 114, 101, 101, 59, 32768, 8908, 109, 101, 115, 59, 32768, 8906, 105, 1024, 59, 101, 102, 108, 15338, 15340, 15343, 15346, 32768, 9657, 59, 32768, 8885, 59, 32768, 9656, 116, 114, 105, 59, 32768, 10702, 108, 117, 104, 97, 114, 59, 32768, 10600, 59, 32768, 8478, 6706, 15391, 15398, 15404, 15499, 15516, 15592, 0, 15606, 15660, 0, 0, 15752, 15758, 0, 15827, 15863, 15886, 16000, 16006, 16038, 16086, 0, 16467, 0, 0, 16506, 99, 117, 116, 101, 59, 32768, 347, 113, 117, 111, 59, 32768, 8218, 2560, 59, 69, 97, 99, 101, 105, 110, 112, 115, 121, 15424, 15426, 15429, 15441, 15446, 15458, 15463, 15482, 15490, 15495, 32768, 8827, 59, 32768, 10932, 833, 15434, 0, 15437, 59, 32768, 10936, 111, 110, 59, 32768, 353, 117, 101, 59, 32768, 8829, 512, 59, 100, 15451, 15453, 32768, 10928, 105, 108, 59, 32768, 351, 114, 99, 59, 32768, 349, 768, 69, 97, 115, 15470, 15473, 15477, 59, 32768, 10934, 112, 59, 32768, 10938, 105, 109, 59, 32768, 8937, 111, 108, 105, 110, 116, 59, 32768, 10771, 105, 109, 59, 32768, 8831, 59, 32768, 1089, 111, 116, 768, 59, 98, 101, 15507, 15509, 15512, 32768, 8901, 59, 32768, 8865, 59, 32768, 10854, 1792, 65, 97, 99, 109, 115, 116, 120, 15530, 15535, 15556, 15562, 15566, 15572, 15587, 114, 114, 59, 32768, 8664, 114, 512, 104, 114, 15541, 15545, 107, 59, 32768, 10533, 512, 59, 111, 15550, 15552, 32768, 8600, 119, 59, 32768, 8600, 116, 33024, 167, 59, 32768, 167, 105, 59, 32768, 59, 119, 97, 114, 59, 32768, 10537, 109, 512, 105, 110, 15578, 15584, 110, 117, 115, 59, 32768, 8726, 59, 32768, 8726, 116, 59, 32768, 10038, 114, 512, 59, 111, 15597, 15600, 32896, 55349, 56624, 119, 110, 59, 32768, 8994, 1024, 97, 99, 111, 121, 15614, 15619, 15632, 15654, 114, 112, 59, 32768, 9839, 512, 104, 121, 15624, 15629, 99, 121, 59, 32768, 1097, 59, 32768, 1096, 114, 116, 1086, 15640, 0, 0, 15645, 105, 100, 59, 32768, 8739, 97, 114, 97, 108, 108, 101, 108, 59, 32768, 8741, 33024, 173, 59, 32768, 173, 512, 103, 109, 15664, 15681, 109, 97, 768, 59, 102, 118, 15673, 15675, 15678, 32768, 963, 59, 32768, 962, 59, 32768, 962, 2048, 59, 100, 101, 103, 108, 110, 112, 114, 15698, 15700, 15705, 15715, 15725, 15735, 15739, 15745, 32768, 8764, 111, 116, 59, 32768, 10858, 512, 59, 113, 15710, 15712, 32768, 8771, 59, 32768, 8771, 512, 59, 69, 15720, 15722, 32768, 10910, 59, 32768, 10912, 512, 59, 69, 15730, 15732, 32768, 10909, 59, 32768, 10911, 101, 59, 32768, 8774, 108, 117, 115, 59, 32768, 10788, 97, 114, 114, 59, 32768, 10610, 97, 114, 114, 59, 32768, 8592, 1024, 97, 101, 105, 116, 15766, 15788, 15796, 15808, 512, 108, 115, 15771, 15783, 108, 115, 101, 116, 109, 105, 110, 117, 115, 59, 32768, 8726, 104, 112, 59, 32768, 10803, 112, 97, 114, 115, 108, 59, 32768, 10724, 512, 100, 108, 15801, 15804, 59, 32768, 8739, 101, 59, 32768, 8995, 512, 59, 101, 15813, 15815, 32768, 10922, 512, 59, 115, 15820, 15822, 32768, 10924, 59, 32896, 10924, 65024, 768, 102, 108, 112, 15833, 15839, 15857, 116, 99, 121, 59, 32768, 1100, 512, 59, 98, 15844, 15846, 32768, 47, 512, 59, 97, 15851, 15853, 32768, 10692, 114, 59, 32768, 9023, 102, 59, 32896, 55349, 56676, 97, 512, 100, 114, 15868, 15882, 101, 115, 512, 59, 117, 15875, 15877, 32768, 9824, 105, 116, 59, 32768, 9824, 59, 32768, 8741, 768, 99, 115, 117, 15892, 15921, 15977, 512, 97, 117, 15897, 15909, 112, 512, 59, 115, 15903, 15905, 32768, 8851, 59, 32896, 8851, 65024, 112, 512, 59, 115, 15915, 15917, 32768, 8852, 59, 32896, 8852, 65024, 117, 512, 98, 112, 15927, 15952, 768, 59, 101, 115, 15934, 15936, 15939, 32768, 8847, 59, 32768, 8849, 101, 116, 512, 59, 101, 15946, 15948, 32768, 8847, 113, 59, 32768, 8849, 768, 59, 101, 115, 15959, 15961, 15964, 32768, 8848, 59, 32768, 8850, 101, 116, 512, 59, 101, 15971, 15973, 32768, 8848, 113, 59, 32768, 8850, 768, 59, 97, 102, 15984, 15986, 15996, 32768, 9633, 114, 566, 15991, 15994, 59, 32768, 9633, 59, 32768, 9642, 59, 32768, 9642, 97, 114, 114, 59, 32768, 8594, 1024, 99, 101, 109, 116, 16014, 16019, 16025, 16031, 114, 59, 32896, 55349, 56520, 116, 109, 110, 59, 32768, 8726, 105, 108, 101, 59, 32768, 8995, 97, 114, 102, 59, 32768, 8902, 512, 97, 114, 16042, 16053, 114, 512, 59, 102, 16048, 16050, 32768, 9734, 59, 32768, 9733, 512, 97, 110, 16058, 16081, 105, 103, 104, 116, 512, 101, 112, 16067, 16076, 112, 115, 105, 108, 111, 110, 59, 32768, 1013, 104, 105, 59, 32768, 981, 115, 59, 32768, 175, 1280, 98, 99, 109, 110, 112, 16096, 16221, 16288, 16291, 16295, 2304, 59, 69, 100, 101, 109, 110, 112, 114, 115, 16115, 16117, 16120, 16125, 16137, 16143, 16154, 16160, 16166, 32768, 8834, 59, 32768, 10949, 111, 116, 59, 32768, 10941, 512, 59, 100, 16130, 16132, 32768, 8838, 111, 116, 59, 32768, 10947, 117, 108, 116, 59, 32768, 10945, 512, 69, 101, 16148, 16151, 59, 32768, 10955, 59, 32768, 8842, 108, 117, 115, 59, 32768, 10943, 97, 114, 114, 59, 32768, 10617, 768, 101, 105, 117, 16173, 16206, 16210, 116, 768, 59, 101, 110, 16181, 16183, 16194, 32768, 8834, 113, 512, 59, 113, 16189, 16191, 32768, 8838, 59, 32768, 10949, 101, 113, 512, 59, 113, 16201, 16203, 32768, 8842, 59, 32768, 10955, 109, 59, 32768, 10951, 512, 98, 112, 16215, 16218, 59, 32768, 10965, 59, 32768, 10963, 99, 1536, 59, 97, 99, 101, 110, 115, 16235, 16237, 16245, 16254, 16258, 16283, 32768, 8827, 112, 112, 114, 111, 120, 59, 32768, 10936, 117, 114, 108, 121, 101, 113, 59, 32768, 8829, 113, 59, 32768, 10928, 768, 97, 101, 115, 16265, 16273, 16278, 112, 112, 114, 111, 120, 59, 32768, 10938, 113, 113, 59, 32768, 10934, 105, 109, 59, 32768, 8937, 105, 109, 59, 32768, 8831, 59, 32768, 8721, 103, 59, 32768, 9834, 3328, 49, 50, 51, 59, 69, 100, 101, 104, 108, 109, 110, 112, 115, 16322, 16327, 16332, 16337, 16339, 16342, 16356, 16368, 16382, 16388, 16394, 16405, 16411, 33024, 185, 59, 32768, 185, 33024, 178, 59, 32768, 178, 33024, 179, 59, 32768, 179, 32768, 8835, 59, 32768, 10950, 512, 111, 115, 16347, 16351, 116, 59, 32768, 10942, 117, 98, 59, 32768, 10968, 512, 59, 100, 16361, 16363, 32768, 8839, 111, 116, 59, 32768, 10948, 115, 512, 111, 117, 16374, 16378, 108, 59, 32768, 10185, 98, 59, 32768, 10967, 97, 114, 114, 59, 32768, 10619, 117, 108, 116, 59, 32768, 10946, 512, 69, 101, 16399, 16402, 59, 32768, 10956, 59, 32768, 8843, 108, 117, 115, 59, 32768, 10944, 768, 101, 105, 117, 16418, 16451, 16455, 116, 768, 59, 101, 110, 16426, 16428, 16439, 32768, 8835, 113, 512, 59, 113, 16434, 16436, 32768, 8839, 59, 32768, 10950, 101, 113, 512, 59, 113, 16446, 16448, 32768, 8843, 59, 32768, 10956, 109, 59, 32768, 10952, 512, 98, 112, 16460, 16463, 59, 32768, 10964, 59, 32768, 10966, 768, 65, 97, 110, 16473, 16478, 16499, 114, 114, 59, 32768, 8665, 114, 512, 104, 114, 16484, 16488, 107, 59, 32768, 10534, 512, 59, 111, 16493, 16495, 32768, 8601, 119, 59, 32768, 8601, 119, 97, 114, 59, 32768, 10538, 108, 105, 103, 33024, 223, 59, 32768, 223, 5938, 16538, 16552, 16557, 16579, 16584, 16591, 0, 16596, 16692, 0, 0, 0, 0, 0, 16731, 16780, 0, 16787, 16908, 0, 0, 0, 16938, 1091, 16543, 0, 0, 16549, 103, 101, 116, 59, 32768, 8982, 59, 32768, 964, 114, 107, 59, 32768, 9140, 768, 97, 101, 121, 16563, 16569, 16575, 114, 111, 110, 59, 32768, 357, 100, 105, 108, 59, 32768, 355, 59, 32768, 1090, 111, 116, 59, 32768, 8411, 108, 114, 101, 99, 59, 32768, 8981, 114, 59, 32896, 55349, 56625, 1024, 101, 105, 107, 111, 16604, 16641, 16670, 16684, 835, 16609, 0, 16624, 101, 512, 52, 102, 16614, 16617, 59, 32768, 8756, 111, 114, 101, 59, 32768, 8756, 97, 768, 59, 115, 118, 16631, 16633, 16638, 32768, 952, 121, 109, 59, 32768, 977, 59, 32768, 977, 512, 99, 110, 16646, 16665, 107, 512, 97, 115, 16652, 16660, 112, 112, 114, 111, 120, 59, 32768, 8776, 105, 109, 59, 32768, 8764, 115, 112, 59, 32768, 8201, 512, 97, 115, 16675, 16679, 112, 59, 32768, 8776, 105, 109, 59, 32768, 8764, 114, 110, 33024, 254, 59, 32768, 254, 829, 16696, 16701, 16727, 100, 101, 59, 32768, 732, 101, 115, 33536, 215, 59, 98, 100, 16710, 16712, 16723, 32768, 215, 512, 59, 97, 16717, 16719, 32768, 8864, 114, 59, 32768, 10801, 59, 32768, 10800, 116, 59, 32768, 8749, 768, 101, 112, 115, 16737, 16741, 16775, 97, 59, 32768, 10536, 1024, 59, 98, 99, 102, 16750, 16752, 16757, 16762, 32768, 8868, 111, 116, 59, 32768, 9014, 105, 114, 59, 32768, 10993, 512, 59, 111, 16767, 16770, 32896, 55349, 56677, 114, 107, 59, 32768, 10970, 97, 59, 32768, 10537, 114, 105, 109, 101, 59, 32768, 8244, 768, 97, 105, 112, 16793, 16798, 16899, 100, 101, 59, 32768, 8482, 1792, 97, 100, 101, 109, 112, 115, 116, 16813, 16868, 16873, 16876, 16883, 16889, 16893, 110, 103, 108, 101, 1280, 59, 100, 108, 113, 114, 16828, 16830, 16836, 16850, 16853, 32768, 9653, 111, 119, 110, 59, 32768, 9663, 101, 102, 116, 512, 59, 101, 16844, 16846, 32768, 9667, 113, 59, 32768, 8884, 59, 32768, 8796, 105, 103, 104, 116, 512, 59, 101, 16862, 16864, 32768, 9657, 113, 59, 32768, 8885, 111, 116, 59, 32768, 9708, 59, 32768, 8796, 105, 110, 117, 115, 59, 32768, 10810, 108, 117, 115, 59, 32768, 10809, 98, 59, 32768, 10701, 105, 109, 101, 59, 32768, 10811, 101, 122, 105, 117, 109, 59, 32768, 9186, 768, 99, 104, 116, 16914, 16926, 16931, 512, 114, 121, 16919, 16923, 59, 32896, 55349, 56521, 59, 32768, 1094, 99, 121, 59, 32768, 1115, 114, 111, 107, 59, 32768, 359, 512, 105, 111, 16942, 16947, 120, 116, 59, 32768, 8812, 104, 101, 97, 100, 512, 108, 114, 16956, 16967, 101, 102, 116, 97, 114, 114, 111, 119, 59, 32768, 8606, 105, 103, 104, 116, 97, 114, 114, 111, 119, 59, 32768, 8608, 4608, 65, 72, 97, 98, 99, 100, 102, 103, 104, 108, 109, 111, 112, 114, 115, 116, 117, 119, 17016, 17021, 17026, 17043, 17057, 17072, 17095, 17110, 17119, 17139, 17172, 17187, 17202, 17290, 17330, 17336, 17365, 17381, 114, 114, 59, 32768, 8657, 97, 114, 59, 32768, 10595, 512, 99, 114, 17031, 17039, 117, 116, 101, 33024, 250, 59, 32768, 250, 114, 59, 32768, 8593, 114, 820, 17049, 0, 17053, 121, 59, 32768, 1118, 118, 101, 59, 32768, 365, 512, 105, 121, 17062, 17069, 114, 99, 33024, 251, 59, 32768, 251, 59, 32768, 1091, 768, 97, 98, 104, 17079, 17084, 17090, 114, 114, 59, 32768, 8645, 108, 97, 99, 59, 32768, 369, 97, 114, 59, 32768, 10606, 512, 105, 114, 17100, 17106, 115, 104, 116, 59, 32768, 10622, 59, 32896, 55349, 56626, 114, 97, 118, 101, 33024, 249, 59, 32768, 249, 562, 17123, 17135, 114, 512, 108, 114, 17128, 17131, 59, 32768, 8639, 59, 32768, 8638, 108, 107, 59, 32768, 9600, 512, 99, 116, 17144, 17167, 1088, 17150, 0, 0, 17163, 114, 110, 512, 59, 101, 17156, 17158, 32768, 8988, 114, 59, 32768, 8988, 111, 112, 59, 32768, 8975, 114, 105, 59, 32768, 9720, 512, 97, 108, 17177, 17182, 99, 114, 59, 32768, 363, 33024, 168, 59, 32768, 168, 512, 103, 112, 17192, 17197, 111, 110, 59, 32768, 371, 102, 59, 32896, 55349, 56678, 1536, 97, 100, 104, 108, 115, 117, 17215, 17222, 17233, 17257, 17262, 17280, 114, 114, 111, 119, 59, 32768, 8593, 111, 119, 110, 97, 114, 114, 111, 119, 59, 32768, 8597, 97, 114, 112, 111, 111, 110, 512, 108, 114, 17244, 17250, 101, 102, 116, 59, 32768, 8639, 105, 103, 104, 116, 59, 32768, 8638, 117, 115, 59, 32768, 8846, 105, 768, 59, 104, 108, 17270, 17272, 17275, 32768, 965, 59, 32768, 978, 111, 110, 59, 32768, 965, 112, 97, 114, 114, 111, 119, 115, 59, 32768, 8648, 768, 99, 105, 116, 17297, 17320, 17325, 1088, 17303, 0, 0, 17316, 114, 110, 512, 59, 101, 17309, 17311, 32768, 8989, 114, 59, 32768, 8989, 111, 112, 59, 32768, 8974, 110, 103, 59, 32768, 367, 114, 105, 59, 32768, 9721, 99, 114, 59, 32896, 55349, 56522, 768, 100, 105, 114, 17343, 17348, 17354, 111, 116, 59, 32768, 8944, 108, 100, 101, 59, 32768, 361, 105, 512, 59, 102, 17360, 17362, 32768, 9653, 59, 32768, 9652, 512, 97, 109, 17370, 17375, 114, 114, 59, 32768, 8648, 108, 33024, 252, 59, 32768, 252, 97, 110, 103, 108, 101, 59, 32768, 10663, 3840, 65, 66, 68, 97, 99, 100, 101, 102, 108, 110, 111, 112, 114, 115, 122, 17420, 17425, 17437, 17443, 17613, 17617, 17623, 17667, 17672, 17678, 17693, 17699, 17705, 17711, 17754, 114, 114, 59, 32768, 8661, 97, 114, 512, 59, 118, 17432, 17434, 32768, 10984, 59, 32768, 10985, 97, 115, 104, 59, 32768, 8872, 512, 110, 114, 17448, 17454, 103, 114, 116, 59, 32768, 10652, 1792, 101, 107, 110, 112, 114, 115, 116, 17469, 17478, 17485, 17494, 17515, 17526, 17578, 112, 115, 105, 108, 111, 110, 59, 32768, 1013, 97, 112, 112, 97, 59, 32768, 1008, 111, 116, 104, 105, 110, 103, 59, 32768, 8709, 768, 104, 105, 114, 17501, 17505, 17508, 105, 59, 32768, 981, 59, 32768, 982, 111, 112, 116, 111, 59, 32768, 8733, 512, 59, 104, 17520, 17522, 32768, 8597, 111, 59, 32768, 1009, 512, 105, 117, 17531, 17537, 103, 109, 97, 59, 32768, 962, 512, 98, 112, 17542, 17560, 115, 101, 116, 110, 101, 113, 512, 59, 113, 17553, 17556, 32896, 8842, 65024, 59, 32896, 10955, 65024, 115, 101, 116, 110, 101, 113, 512, 59, 113, 17571, 17574, 32896, 8843, 65024, 59, 32896, 10956, 65024, 512, 104, 114, 17583, 17589, 101, 116, 97, 59, 32768, 977, 105, 97, 110, 103, 108, 101, 512, 108, 114, 17600, 17606, 101, 102, 116, 59, 32768, 8882, 105, 103, 104, 116, 59, 32768, 8883, 121, 59, 32768, 1074, 97, 115, 104, 59, 32768, 8866, 768, 101, 108, 114, 17630, 17648, 17654, 768, 59, 98, 101, 17637, 17639, 17644, 32768, 8744, 97, 114, 59, 32768, 8891, 113, 59, 32768, 8794, 108, 105, 112, 59, 32768, 8942, 512, 98, 116, 17659, 17664, 97, 114, 59, 32768, 124, 59, 32768, 124, 114, 59, 32896, 55349, 56627, 116, 114, 105, 59, 32768, 8882, 115, 117, 512, 98, 112, 17685, 17689, 59, 32896, 8834, 8402, 59, 32896, 8835, 8402, 112, 102, 59, 32896, 55349, 56679, 114, 111, 112, 59, 32768, 8733, 116, 114, 105, 59, 32768, 8883, 512, 99, 117, 17716, 17721, 114, 59, 32896, 55349, 56523, 512, 98, 112, 17726, 17740, 110, 512, 69, 101, 17732, 17736, 59, 32896, 10955, 65024, 59, 32896, 8842, 65024, 110, 512, 69, 101, 17746, 17750, 59, 32896, 10956, 65024, 59, 32896, 8843, 65024, 105, 103, 122, 97, 103, 59, 32768, 10650, 1792, 99, 101, 102, 111, 112, 114, 115, 17777, 17783, 17815, 17820, 17826, 17829, 17842, 105, 114, 99, 59, 32768, 373, 512, 100, 105, 17788, 17809, 512, 98, 103, 17793, 17798, 97, 114, 59, 32768, 10847, 101, 512, 59, 113, 17804, 17806, 32768, 8743, 59, 32768, 8793, 101, 114, 112, 59, 32768, 8472, 114, 59, 32896, 55349, 56628, 112, 102, 59, 32896, 55349, 56680, 59, 32768, 8472, 512, 59, 101, 17834, 17836, 32768, 8768, 97, 116, 104, 59, 32768, 8768, 99, 114, 59, 32896, 55349, 56524, 5428, 17871, 17891, 0, 17897, 0, 17902, 17917, 0, 0, 17920, 17935, 17940, 17945, 0, 0, 17977, 17992, 0, 18008, 18024, 18029, 768, 97, 105, 117, 17877, 17881, 17886, 112, 59, 32768, 8898, 114, 99, 59, 32768, 9711, 112, 59, 32768, 8899, 116, 114, 105, 59, 32768, 9661, 114, 59, 32896, 55349, 56629, 512, 65, 97, 17906, 17911, 114, 114, 59, 32768, 10234, 114, 114, 59, 32768, 10231, 59, 32768, 958, 512, 65, 97, 17924, 17929, 114, 114, 59, 32768, 10232, 114, 114, 59, 32768, 10229, 97, 112, 59, 32768, 10236, 105, 115, 59, 32768, 8955, 768, 100, 112, 116, 17951, 17956, 17970, 111, 116, 59, 32768, 10752, 512, 102, 108, 17961, 17965, 59, 32896, 55349, 56681, 117, 115, 59, 32768, 10753, 105, 109, 101, 59, 32768, 10754, 512, 65, 97, 17981, 17986, 114, 114, 59, 32768, 10233, 114, 114, 59, 32768, 10230, 512, 99, 113, 17996, 18001, 114, 59, 32896, 55349, 56525, 99, 117, 112, 59, 32768, 10758, 512, 112, 116, 18012, 18018, 108, 117, 115, 59, 32768, 10756, 114, 105, 59, 32768, 9651, 101, 101, 59, 32768, 8897, 101, 100, 103, 101, 59, 32768, 8896, 2048, 97, 99, 101, 102, 105, 111, 115, 117, 18052, 18068, 18081, 18087, 18092, 18097, 18103, 18109, 99, 512, 117, 121, 18058, 18065, 116, 101, 33024, 253, 59, 32768, 253, 59, 32768, 1103, 512, 105, 121, 18073, 18078, 114, 99, 59, 32768, 375, 59, 32768, 1099, 110, 33024, 165, 59, 32768, 165, 114, 59, 32896, 55349, 56630, 99, 121, 59, 32768, 1111, 112, 102, 59, 32896, 55349, 56682, 99, 114, 59, 32896, 55349, 56526, 512, 99, 109, 18114, 18118, 121, 59, 32768, 1102, 108, 33024, 255, 59, 32768, 255, 2560, 97, 99, 100, 101, 102, 104, 105, 111, 115, 119, 18145, 18152, 18166, 18171, 18186, 18191, 18196, 18204, 18210, 18216, 99, 117, 116, 101, 59, 32768, 378, 512, 97, 121, 18157, 18163, 114, 111, 110, 59, 32768, 382, 59, 32768, 1079, 111, 116, 59, 32768, 380, 512, 101, 116, 18176, 18182, 116, 114, 102, 59, 32768, 8488, 97, 59, 32768, 950, 114, 59, 32896, 55349, 56631, 99, 121, 59, 32768, 1078, 103, 114, 97, 114, 114, 59, 32768, 8669, 112, 102, 59, 32896, 55349, 56683, 99, 114, 59, 32896, 55349, 56527, 512, 106, 110, 18221, 18224, 59, 32768, 8205, 106, 59, 32768, 8204]); + }); + + unwrapExports(decodeDataHtml); + + var decodeDataXml = createCommonjsModule(function (module, exports) { + Object.defineProperty(exports, "__esModule", { value: true }); + // Generated using scripts/write-decode-map.ts + // prettier-ignore + exports.default = new Uint16Array([1024, 97, 103, 108, 113, 9, 23, 27, 31, 1086, 15, 0, 0, 19, 112, 59, 32768, 38, 111, 115, 59, 32768, 39, 116, 59, 32768, 62, 116, 59, 32768, 60, 117, 111, 116, 59, 32768, 34]); + }); + + unwrapExports(decodeDataXml); + + var decode_codepoint = createCommonjsModule(function (module, exports) { + // Adapted from https://github.com/mathiasbynens/he/blob/36afe179392226cf1b6ccdb16ebbb7a5a844d93a/src/he.js#L106-L134 + Object.defineProperty(exports, "__esModule", { value: true }); + var decodeMap = new Map([ + [0, 65533], + [128, 8364], + [130, 8218], + [131, 402], + [132, 8222], + [133, 8230], + [134, 8224], + [135, 8225], + [136, 710], + [137, 8240], + [138, 352], + [139, 8249], + [140, 338], + [142, 381], + [145, 8216], + [146, 8217], + [147, 8220], + [148, 8221], + [149, 8226], + [150, 8211], + [151, 8212], + [152, 732], + [153, 8482], + [154, 353], + [155, 8250], + [156, 339], + [158, 382], + [159, 376], + ]); + var fromCodePoint = + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, node/no-unsupported-features/es-builtins + String.fromCodePoint || + function (codePoint) { + var output = ""; + if (codePoint > 0xffff) { + codePoint -= 0x10000; + output += String.fromCharCode(((codePoint >>> 10) & 0x3ff) | 0xd800); + codePoint = 0xdc00 | (codePoint & 0x3ff); + } + output += String.fromCharCode(codePoint); + return output; + }; + function decodeCodePoint(codePoint) { + var _a; + if ((codePoint >= 0xd800 && codePoint <= 0xdfff) || codePoint > 0x10ffff) { + return "\uFFFD"; + } + return fromCodePoint((_a = decodeMap.get(codePoint)) !== null && _a !== void 0 ? _a : codePoint); + } + exports.default = decodeCodePoint; + }); + + unwrapExports(decode_codepoint); + + var decode = createCommonjsModule(function (module, exports) { + var __importDefault = (commonjsGlobal && commonjsGlobal.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; + }; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.decodeXML = exports.decodeHTMLStrict = exports.decodeHTML = exports.determineBranch = exports.JUMP_OFFSET_BASE = exports.BinTrieFlags = exports.xmlDecodeTree = exports.htmlDecodeTree = void 0; + var decode_data_html_1 = __importDefault(decodeDataHtml); + exports.htmlDecodeTree = decode_data_html_1.default; + var decode_data_xml_1 = __importDefault(decodeDataXml); + exports.xmlDecodeTree = decode_data_xml_1.default; + var decode_codepoint_1 = __importDefault(decode_codepoint); + var BinTrieFlags; + (function (BinTrieFlags) { + BinTrieFlags[BinTrieFlags["HAS_VALUE"] = 32768] = "HAS_VALUE"; + BinTrieFlags[BinTrieFlags["BRANCH_LENGTH"] = 32512] = "BRANCH_LENGTH"; + BinTrieFlags[BinTrieFlags["MULTI_BYTE"] = 128] = "MULTI_BYTE"; + BinTrieFlags[BinTrieFlags["JUMP_TABLE"] = 127] = "JUMP_TABLE"; + })(BinTrieFlags = exports.BinTrieFlags || (exports.BinTrieFlags = {})); + exports.JUMP_OFFSET_BASE = 48 /* ZERO */ - 1; + function getDecoder(decodeTree) { + return function decodeHTMLBinary(str, strict) { + var ret = ""; + var lastIdx = 0; + var strIdx = 0; + while ((strIdx = str.indexOf("&", strIdx)) >= 0) { + ret += str.slice(lastIdx, strIdx); + lastIdx = strIdx; + // Skip the "&" + strIdx += 1; + // If we have a numeric entity, handle this separately. + if (str.charCodeAt(strIdx) === 35 /* NUM */) { + // Skip the leading "&#". For hex entities, also skip the leading "x". + var start = strIdx + 1; + var base = 10; + var cp = str.charCodeAt(start); + if ((cp | 32 /* To_LOWER_BIT */) === 120 /* LOWER_X */) { + base = 16; + strIdx += 1; + start += 1; + } + while (((cp = str.charCodeAt(++strIdx)) >= 48 /* ZERO */ && + cp <= 57 /* NINE */) || + (base === 16 && + (cp | 32 /* To_LOWER_BIT */) >= 97 /* LOWER_A */ && + (cp | 32 /* To_LOWER_BIT */) <= 102 /* LOWER_F */)) + ; + if (start !== strIdx) { + var entity = str.substring(start, strIdx); + var parsed = parseInt(entity, base); + if (str.charCodeAt(strIdx) === 59 /* SEMI */) { + strIdx += 1; + } + else if (strict) { + continue; + } + ret += decode_codepoint_1.default(parsed); + lastIdx = strIdx; + } + continue; + } + var result = null; + var excess = 1; + var treeIdx = 0; + var current = decodeTree[treeIdx]; + for (; strIdx < str.length; strIdx++, excess++) { + treeIdx = determineBranch(decodeTree, current, treeIdx + 1, str.charCodeAt(strIdx)); + if (treeIdx < 0) + break; + current = decodeTree[treeIdx]; + // If the branch is a value, store it and continue + if (current & BinTrieFlags.HAS_VALUE) { + // If we have a legacy entity while parsing strictly, just skip the number of bytes + if (strict && str.charCodeAt(strIdx) !== 59 /* SEMI */) { + // No need to consider multi-byte values, as the legacy entity is always a single byte + treeIdx += 1; + } + else { + // If this is a surrogate pair, combine the higher bits from the node with the next byte + result = + current & BinTrieFlags.MULTI_BYTE + ? String.fromCharCode(decodeTree[++treeIdx], decodeTree[++treeIdx]) + : String.fromCharCode(decodeTree[++treeIdx]); + excess = 0; + } + } + } + if (result != null) { + ret += result; + lastIdx = strIdx - excess + 1; + } + } + return ret + str.slice(lastIdx); + }; + } + function determineBranch(decodeTree, current, nodeIdx, char) { + if (current <= 128) { + return char === current ? nodeIdx : -1; + } + var branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 8; + if (branchCount === 0) { + return -1; + } + if (branchCount === 1) { + return char === decodeTree[nodeIdx] ? nodeIdx + 1 : -1; + } + var jumpOffset = current & BinTrieFlags.JUMP_TABLE; + if (jumpOffset) { + var value = char - exports.JUMP_OFFSET_BASE - jumpOffset; + return value < 0 || value > branchCount + ? -1 + : decodeTree[nodeIdx + value] - 1; + } + // Binary search for the character. + var lo = nodeIdx; + var hi = lo + branchCount - 1; + while (lo <= hi) { + var mid = (lo + hi) >>> 1; + var midVal = decodeTree[mid]; + if (midVal < char) { + lo = mid + 1; + } + else if (midVal > char) { + hi = mid - 1; + } + else { + return decodeTree[mid + branchCount]; + } + } + return -1; + } + exports.determineBranch = determineBranch; + var htmlDecoder = getDecoder(decode_data_html_1.default); + var xmlDecoder = getDecoder(decode_data_xml_1.default); + function decodeHTML(str) { + return htmlDecoder(str, false); + } + exports.decodeHTML = decodeHTML; + function decodeHTMLStrict(str) { + return htmlDecoder(str, true); + } + exports.decodeHTMLStrict = decodeHTMLStrict; + function decodeXML(str) { + return xmlDecoder(str, true); + } + exports.decodeXML = decodeXML; + }); + + unwrapExports(decode); + var decode_1 = decode.decodeXML; + var decode_2 = decode.decodeHTMLStrict; + var decode_3 = decode.decodeHTML; + var decode_4 = decode.determineBranch; + var decode_5 = decode.JUMP_OFFSET_BASE; + var decode_6 = decode.BinTrieFlags; + var decode_7 = decode.xmlDecodeTree; + var decode_8 = decode.htmlDecodeTree; + + var amp = "&"; + var apos = "'"; + var gt = ">"; + var lt = "<"; + var quot = "\""; + var xml = { + amp: amp, + apos: apos, + gt: gt, + lt: lt, + quot: quot + }; + + var xml$1 = /*#__PURE__*/Object.freeze({ + __proto__: null, + amp: amp, + apos: apos, + gt: gt, + lt: lt, + quot: quot, + 'default': xml + }); + + var Aacute = "Á"; + var aacute = "á"; + var Abreve = "Ă"; + var abreve = "ă"; + var ac = "∾"; + var acd = "∿"; + var acE = "∾̳"; + var Acirc = "Â"; + var acirc = "â"; + var acute = "´"; + var Acy = "А"; + var acy = "а"; + var AElig = "Æ"; + var aelig = "æ"; + var af = "⁡"; + var Afr = "𝔄"; + var afr = "𝔞"; + var Agrave = "À"; + var agrave = "à"; + var alefsym = "ℵ"; + var aleph = "ℵ"; + var Alpha = "Α"; + var alpha = "α"; + var Amacr = "Ā"; + var amacr = "ā"; + var amalg = "⨿"; + var amp$1 = "&"; + var AMP = "&"; + var andand = "⩕"; + var And = "⩓"; + var and = "∧"; + var andd = "⩜"; + var andslope = "⩘"; + var andv = "⩚"; + var ang = "∠"; + var ange = "⦤"; + var angle = "∠"; + var angmsdaa = "⦨"; + var angmsdab = "⦩"; + var angmsdac = "⦪"; + var angmsdad = "⦫"; + var angmsdae = "⦬"; + var angmsdaf = "⦭"; + var angmsdag = "⦮"; + var angmsdah = "⦯"; + var angmsd = "∡"; + var angrt = "∟"; + var angrtvb = "⊾"; + var angrtvbd = "⦝"; + var angsph = "∢"; + var angst = "Å"; + var angzarr = "⍼"; + var Aogon = "Ą"; + var aogon = "ą"; + var Aopf = "𝔸"; + var aopf = "𝕒"; + var apacir = "⩯"; + var ap = "≈"; + var apE = "⩰"; + var ape = "≊"; + var apid = "≋"; + var apos$1 = "'"; + var ApplyFunction = "⁡"; + var approx = "≈"; + var approxeq = "≊"; + var Aring = "Å"; + var aring = "å"; + var Ascr = "𝒜"; + var ascr = "𝒶"; + var Assign = "≔"; + var ast = "*"; + var asymp = "≈"; + var asympeq = "≍"; + var Atilde = "Ã"; + var atilde = "ã"; + var Auml = "Ä"; + var auml = "ä"; + var awconint = "∳"; + var awint = "⨑"; + var backcong = "≌"; + var backepsilon = "϶"; + var backprime = "‵"; + var backsim = "∽"; + var backsimeq = "⋍"; + var Backslash = "∖"; + var Barv = "⫧"; + var barvee = "⊽"; + var barwed = "⌅"; + var Barwed = "⌆"; + var barwedge = "⌅"; + var bbrk = "⎵"; + var bbrktbrk = "⎶"; + var bcong = "≌"; + var Bcy = "Б"; + var bcy = "б"; + var bdquo = "„"; + var becaus = "∵"; + var because = "∵"; + var Because = "∵"; + var bemptyv = "⦰"; + var bepsi = "϶"; + var bernou = "ℬ"; + var Bernoullis = "ℬ"; + var Beta = "Β"; + var beta = "β"; + var beth = "ℶ"; + var between = "≬"; + var Bfr = "𝔅"; + var bfr = "𝔟"; + var bigcap = "⋂"; + var bigcirc = "◯"; + var bigcup = "⋃"; + var bigodot = "⨀"; + var bigoplus = "⨁"; + var bigotimes = "⨂"; + var bigsqcup = "⨆"; + var bigstar = "★"; + var bigtriangledown = "▽"; + var bigtriangleup = "△"; + var biguplus = "⨄"; + var bigvee = "⋁"; + var bigwedge = "⋀"; + var bkarow = "⤍"; + var blacklozenge = "⧫"; + var blacksquare = "▪"; + var blacktriangle = "▴"; + var blacktriangledown = "▾"; + var blacktriangleleft = "◂"; + var blacktriangleright = "▸"; + var blank = "␣"; + var blk12 = "▒"; + var blk14 = "░"; + var blk34 = "▓"; + var block = "█"; + var bne = "=⃥"; + var bnequiv = "≡⃥"; + var bNot = "⫭"; + var bnot = "⌐"; + var Bopf = "𝔹"; + var bopf = "𝕓"; + var bot = "⊥"; + var bottom = "⊥"; + var bowtie = "⋈"; + var boxbox = "⧉"; + var boxdl = "┐"; + var boxdL = "╕"; + var boxDl = "╖"; + var boxDL = "╗"; + var boxdr = "┌"; + var boxdR = "╒"; + var boxDr = "╓"; + var boxDR = "╔"; + var boxh = "─"; + var boxH = "═"; + var boxhd = "┬"; + var boxHd = "╤"; + var boxhD = "╥"; + var boxHD = "╦"; + var boxhu = "┴"; + var boxHu = "╧"; + var boxhU = "╨"; + var boxHU = "╩"; + var boxminus = "⊟"; + var boxplus = "⊞"; + var boxtimes = "⊠"; + var boxul = "┘"; + var boxuL = "╛"; + var boxUl = "╜"; + var boxUL = "╝"; + var boxur = "└"; + var boxuR = "╘"; + var boxUr = "╙"; + var boxUR = "╚"; + var boxv = "│"; + var boxV = "║"; + var boxvh = "┼"; + var boxvH = "╪"; + var boxVh = "╫"; + var boxVH = "╬"; + var boxvl = "┤"; + var boxvL = "╡"; + var boxVl = "╢"; + var boxVL = "╣"; + var boxvr = "├"; + var boxvR = "╞"; + var boxVr = "╟"; + var boxVR = "╠"; + var bprime = "‵"; + var breve = "˘"; + var Breve = "˘"; + var brvbar = "¦"; + var bscr = "𝒷"; + var Bscr = "ℬ"; + var bsemi = "⁏"; + var bsim = "∽"; + var bsime = "⋍"; + var bsolb = "⧅"; + var bsol = "\\"; + var bsolhsub = "⟈"; + var bull = "•"; + var bullet = "•"; + var bump = "≎"; + var bumpE = "⪮"; + var bumpe = "≏"; + var Bumpeq = "≎"; + var bumpeq = "≏"; + var Cacute = "Ć"; + var cacute = "ć"; + var capand = "⩄"; + var capbrcup = "⩉"; + var capcap = "⩋"; + var cap = "∩"; + var Cap = "⋒"; + var capcup = "⩇"; + var capdot = "⩀"; + var CapitalDifferentialD = "ⅅ"; + var caps = "∩︀"; + var caret = "⁁"; + var caron = "ˇ"; + var Cayleys = "ℭ"; + var ccaps = "⩍"; + var Ccaron = "Č"; + var ccaron = "č"; + var Ccedil = "Ç"; + var ccedil = "ç"; + var Ccirc = "Ĉ"; + var ccirc = "ĉ"; + var Cconint = "∰"; + var ccups = "⩌"; + var ccupssm = "⩐"; + var Cdot = "Ċ"; + var cdot = "ċ"; + var cedil = "¸"; + var Cedilla = "¸"; + var cemptyv = "⦲"; + var cent = "¢"; + var centerdot = "·"; + var CenterDot = "·"; + var cfr = "𝔠"; + var Cfr = "ℭ"; + var CHcy = "Ч"; + var chcy = "ч"; + var check = "✓"; + var checkmark = "✓"; + var Chi = "Χ"; + var chi = "χ"; + var circ = "ˆ"; + var circeq = "≗"; + var circlearrowleft = "↺"; + var circlearrowright = "↻"; + var circledast = "⊛"; + var circledcirc = "⊚"; + var circleddash = "⊝"; + var CircleDot = "⊙"; + var circledR = "®"; + var circledS = "Ⓢ"; + var CircleMinus = "⊖"; + var CirclePlus = "⊕"; + var CircleTimes = "⊗"; + var cir = "○"; + var cirE = "⧃"; + var cire = "≗"; + var cirfnint = "⨐"; + var cirmid = "⫯"; + var cirscir = "⧂"; + var ClockwiseContourIntegral = "∲"; + var CloseCurlyDoubleQuote = "”"; + var CloseCurlyQuote = "’"; + var clubs = "♣"; + var clubsuit = "♣"; + var colon = ":"; + var Colon = "∷"; + var Colone = "⩴"; + var colone = "≔"; + var coloneq = "≔"; + var comma = ","; + var commat = "@"; + var comp = "∁"; + var compfn = "∘"; + var complement = "∁"; + var complexes = "ℂ"; + var cong = "≅"; + var congdot = "⩭"; + var Congruent = "≡"; + var conint = "∮"; + var Conint = "∯"; + var ContourIntegral = "∮"; + var copf = "𝕔"; + var Copf = "ℂ"; + var coprod = "∐"; + var Coproduct = "∐"; + var copy = "©"; + var COPY = "©"; + var copysr = "℗"; + var CounterClockwiseContourIntegral = "∳"; + var crarr = "↵"; + var cross = "✗"; + var Cross = "⨯"; + var Cscr = "𝒞"; + var cscr = "𝒸"; + var csub = "⫏"; + var csube = "⫑"; + var csup = "⫐"; + var csupe = "⫒"; + var ctdot = "⋯"; + var cudarrl = "⤸"; + var cudarrr = "⤵"; + var cuepr = "⋞"; + var cuesc = "⋟"; + var cularr = "↶"; + var cularrp = "⤽"; + var cupbrcap = "⩈"; + var cupcap = "⩆"; + var CupCap = "≍"; + var cup = "∪"; + var Cup = "⋓"; + var cupcup = "⩊"; + var cupdot = "⊍"; + var cupor = "⩅"; + var cups = "∪︀"; + var curarr = "↷"; + var curarrm = "⤼"; + var curlyeqprec = "⋞"; + var curlyeqsucc = "⋟"; + var curlyvee = "⋎"; + var curlywedge = "⋏"; + var curren = "¤"; + var curvearrowleft = "↶"; + var curvearrowright = "↷"; + var cuvee = "⋎"; + var cuwed = "⋏"; + var cwconint = "∲"; + var cwint = "∱"; + var cylcty = "⌭"; + var dagger = "†"; + var Dagger = "‡"; + var daleth = "ℸ"; + var darr = "↓"; + var Darr = "↡"; + var dArr = "⇓"; + var dash = "‐"; + var Dashv = "⫤"; + var dashv = "⊣"; + var dbkarow = "⤏"; + var dblac = "˝"; + var Dcaron = "Ď"; + var dcaron = "ď"; + var Dcy = "Д"; + var dcy = "д"; + var ddagger = "‡"; + var ddarr = "⇊"; + var DD = "ⅅ"; + var dd = "ⅆ"; + var DDotrahd = "⤑"; + var ddotseq = "⩷"; + var deg = "°"; + var Del = "∇"; + var Delta = "Δ"; + var delta = "δ"; + var demptyv = "⦱"; + var dfisht = "⥿"; + var Dfr = "𝔇"; + var dfr = "𝔡"; + var dHar = "⥥"; + var dharl = "⇃"; + var dharr = "⇂"; + var DiacriticalAcute = "´"; + var DiacriticalDot = "˙"; + var DiacriticalDoubleAcute = "˝"; + var DiacriticalGrave = "`"; + var DiacriticalTilde = "˜"; + var diam = "⋄"; + var diamond = "⋄"; + var Diamond = "⋄"; + var diamondsuit = "♦"; + var diams = "♦"; + var die = "¨"; + var DifferentialD = "ⅆ"; + var digamma = "ϝ"; + var disin = "⋲"; + var div = "÷"; + var divide = "÷"; + var divideontimes = "⋇"; + var divonx = "⋇"; + var DJcy = "Ђ"; + var djcy = "ђ"; + var dlcorn = "⌞"; + var dlcrop = "⌍"; + var dollar = "$"; + var Dopf = "𝔻"; + var dopf = "𝕕"; + var Dot = "¨"; + var dot = "˙"; + var DotDot = "⃜"; + var doteq = "≐"; + var doteqdot = "≑"; + var DotEqual = "≐"; + var dotminus = "∸"; + var dotplus = "∔"; + var dotsquare = "⊡"; + var doublebarwedge = "⌆"; + var DoubleContourIntegral = "∯"; + var DoubleDot = "¨"; + var DoubleDownArrow = "⇓"; + var DoubleLeftArrow = "⇐"; + var DoubleLeftRightArrow = "⇔"; + var DoubleLeftTee = "⫤"; + var DoubleLongLeftArrow = "⟸"; + var DoubleLongLeftRightArrow = "⟺"; + var DoubleLongRightArrow = "⟹"; + var DoubleRightArrow = "⇒"; + var DoubleRightTee = "⊨"; + var DoubleUpArrow = "⇑"; + var DoubleUpDownArrow = "⇕"; + var DoubleVerticalBar = "∥"; + var DownArrowBar = "⤓"; + var downarrow = "↓"; + var DownArrow = "↓"; + var Downarrow = "⇓"; + var DownArrowUpArrow = "⇵"; + var DownBreve = "̑"; + var downdownarrows = "⇊"; + var downharpoonleft = "⇃"; + var downharpoonright = "⇂"; + var DownLeftRightVector = "⥐"; + var DownLeftTeeVector = "⥞"; + var DownLeftVectorBar = "⥖"; + var DownLeftVector = "↽"; + var DownRightTeeVector = "⥟"; + var DownRightVectorBar = "⥗"; + var DownRightVector = "⇁"; + var DownTeeArrow = "↧"; + var DownTee = "⊤"; + var drbkarow = "⤐"; + var drcorn = "⌟"; + var drcrop = "⌌"; + var Dscr = "𝒟"; + var dscr = "𝒹"; + var DScy = "Ѕ"; + var dscy = "ѕ"; + var dsol = "⧶"; + var Dstrok = "Đ"; + var dstrok = "đ"; + var dtdot = "⋱"; + var dtri = "▿"; + var dtrif = "▾"; + var duarr = "⇵"; + var duhar = "⥯"; + var dwangle = "⦦"; + var DZcy = "Џ"; + var dzcy = "џ"; + var dzigrarr = "⟿"; + var Eacute = "É"; + var eacute = "é"; + var easter = "⩮"; + var Ecaron = "Ě"; + var ecaron = "ě"; + var Ecirc = "Ê"; + var ecirc = "ê"; + var ecir = "≖"; + var ecolon = "≕"; + var Ecy = "Э"; + var ecy = "э"; + var eDDot = "⩷"; + var Edot = "Ė"; + var edot = "ė"; + var eDot = "≑"; + var ee = "ⅇ"; + var efDot = "≒"; + var Efr = "𝔈"; + var efr = "𝔢"; + var eg = "⪚"; + var Egrave = "È"; + var egrave = "è"; + var egs = "⪖"; + var egsdot = "⪘"; + var el = "⪙"; + var Element = "∈"; + var elinters = "⏧"; + var ell = "ℓ"; + var els = "⪕"; + var elsdot = "⪗"; + var Emacr = "Ē"; + var emacr = "ē"; + var empty = "∅"; + var emptyset = "∅"; + var EmptySmallSquare = "◻"; + var emptyv = "∅"; + var EmptyVerySmallSquare = "▫"; + var emsp13 = " "; + var emsp14 = " "; + var emsp = " "; + var ENG = "Ŋ"; + var eng = "ŋ"; + var ensp = " "; + var Eogon = "Ę"; + var eogon = "ę"; + var Eopf = "𝔼"; + var eopf = "𝕖"; + var epar = "⋕"; + var eparsl = "⧣"; + var eplus = "⩱"; + var epsi = "ε"; + var Epsilon = "Ε"; + var epsilon = "ε"; + var epsiv = "ϵ"; + var eqcirc = "≖"; + var eqcolon = "≕"; + var eqsim = "≂"; + var eqslantgtr = "⪖"; + var eqslantless = "⪕"; + var Equal = "⩵"; + var equals = "="; + var EqualTilde = "≂"; + var equest = "≟"; + var Equilibrium = "⇌"; + var equiv = "≡"; + var equivDD = "⩸"; + var eqvparsl = "⧥"; + var erarr = "⥱"; + var erDot = "≓"; + var escr = "ℯ"; + var Escr = "ℰ"; + var esdot = "≐"; + var Esim = "⩳"; + var esim = "≂"; + var Eta = "Η"; + var eta = "η"; + var ETH = "Ð"; + var eth = "ð"; + var Euml = "Ë"; + var euml = "ë"; + var euro = "€"; + var excl = "!"; + var exist = "∃"; + var Exists = "∃"; + var expectation = "ℰ"; + var exponentiale = "ⅇ"; + var ExponentialE = "ⅇ"; + var fallingdotseq = "≒"; + var Fcy = "Ф"; + var fcy = "ф"; + var female = "♀"; + var ffilig = "ffi"; + var fflig = "ff"; + var ffllig = "ffl"; + var Ffr = "𝔉"; + var ffr = "𝔣"; + var filig = "fi"; + var FilledSmallSquare = "◼"; + var FilledVerySmallSquare = "▪"; + var fjlig = "fj"; + var flat = "♭"; + var fllig = "fl"; + var fltns = "▱"; + var fnof = "ƒ"; + var Fopf = "𝔽"; + var fopf = "𝕗"; + var forall = "∀"; + var ForAll = "∀"; + var fork = "⋔"; + var forkv = "⫙"; + var Fouriertrf = "ℱ"; + var fpartint = "⨍"; + var frac12 = "½"; + var frac13 = "⅓"; + var frac14 = "¼"; + var frac15 = "⅕"; + var frac16 = "⅙"; + var frac18 = "⅛"; + var frac23 = "⅔"; + var frac25 = "⅖"; + var frac34 = "¾"; + var frac35 = "⅗"; + var frac38 = "⅜"; + var frac45 = "⅘"; + var frac56 = "⅚"; + var frac58 = "⅝"; + var frac78 = "⅞"; + var frasl = "⁄"; + var frown = "⌢"; + var fscr = "𝒻"; + var Fscr = "ℱ"; + var gacute = "ǵ"; + var Gamma = "Γ"; + var gamma = "γ"; + var Gammad = "Ϝ"; + var gammad = "ϝ"; + var gap = "⪆"; + var Gbreve = "Ğ"; + var gbreve = "ğ"; + var Gcedil = "Ģ"; + var Gcirc = "Ĝ"; + var gcirc = "ĝ"; + var Gcy = "Г"; + var gcy = "г"; + var Gdot = "Ġ"; + var gdot = "ġ"; + var ge = "≥"; + var gE = "≧"; + var gEl = "⪌"; + var gel = "⋛"; + var geq = "≥"; + var geqq = "≧"; + var geqslant = "⩾"; + var gescc = "⪩"; + var ges = "⩾"; + var gesdot = "⪀"; + var gesdoto = "⪂"; + var gesdotol = "⪄"; + var gesl = "⋛︀"; + var gesles = "⪔"; + var Gfr = "𝔊"; + var gfr = "𝔤"; + var gg = "≫"; + var Gg = "⋙"; + var ggg = "⋙"; + var gimel = "ℷ"; + var GJcy = "Ѓ"; + var gjcy = "ѓ"; + var gla = "⪥"; + var gl = "≷"; + var glE = "⪒"; + var glj = "⪤"; + var gnap = "⪊"; + var gnapprox = "⪊"; + var gne = "⪈"; + var gnE = "≩"; + var gneq = "⪈"; + var gneqq = "≩"; + var gnsim = "⋧"; + var Gopf = "𝔾"; + var gopf = "𝕘"; + var grave = "`"; + var GreaterEqual = "≥"; + var GreaterEqualLess = "⋛"; + var GreaterFullEqual = "≧"; + var GreaterGreater = "⪢"; + var GreaterLess = "≷"; + var GreaterSlantEqual = "⩾"; + var GreaterTilde = "≳"; + var Gscr = "𝒢"; + var gscr = "ℊ"; + var gsim = "≳"; + var gsime = "⪎"; + var gsiml = "⪐"; + var gtcc = "⪧"; + var gtcir = "⩺"; + var gt$1 = ">"; + var GT = ">"; + var Gt = "≫"; + var gtdot = "⋗"; + var gtlPar = "⦕"; + var gtquest = "⩼"; + var gtrapprox = "⪆"; + var gtrarr = "⥸"; + var gtrdot = "⋗"; + var gtreqless = "⋛"; + var gtreqqless = "⪌"; + var gtrless = "≷"; + var gtrsim = "≳"; + var gvertneqq = "≩︀"; + var gvnE = "≩︀"; + var Hacek = "ˇ"; + var hairsp = " "; + var half = "½"; + var hamilt = "ℋ"; + var HARDcy = "Ъ"; + var hardcy = "ъ"; + var harrcir = "⥈"; + var harr = "↔"; + var hArr = "⇔"; + var harrw = "↭"; + var Hat = "^"; + var hbar = "ℏ"; + var Hcirc = "Ĥ"; + var hcirc = "ĥ"; + var hearts = "♥"; + var heartsuit = "♥"; + var hellip = "…"; + var hercon = "⊹"; + var hfr = "𝔥"; + var Hfr = "ℌ"; + var HilbertSpace = "ℋ"; + var hksearow = "⤥"; + var hkswarow = "⤦"; + var hoarr = "⇿"; + var homtht = "∻"; + var hookleftarrow = "↩"; + var hookrightarrow = "↪"; + var hopf = "𝕙"; + var Hopf = "ℍ"; + var horbar = "―"; + var HorizontalLine = "─"; + var hscr = "𝒽"; + var Hscr = "ℋ"; + var hslash = "ℏ"; + var Hstrok = "Ħ"; + var hstrok = "ħ"; + var HumpDownHump = "≎"; + var HumpEqual = "≏"; + var hybull = "⁃"; + var hyphen = "‐"; + var Iacute = "Í"; + var iacute = "í"; + var ic = "⁣"; + var Icirc = "Î"; + var icirc = "î"; + var Icy = "И"; + var icy = "и"; + var Idot = "İ"; + var IEcy = "Е"; + var iecy = "е"; + var iexcl = "¡"; + var iff = "⇔"; + var ifr = "𝔦"; + var Ifr = "ℑ"; + var Igrave = "Ì"; + var igrave = "ì"; + var ii = "ⅈ"; + var iiiint = "⨌"; + var iiint = "∭"; + var iinfin = "⧜"; + var iiota = "℩"; + var IJlig = "IJ"; + var ijlig = "ij"; + var Imacr = "Ī"; + var imacr = "ī"; + var image = "ℑ"; + var ImaginaryI = "ⅈ"; + var imagline = "ℐ"; + var imagpart = "ℑ"; + var imath = "ı"; + var Im = "ℑ"; + var imof = "⊷"; + var imped = "Ƶ"; + var Implies = "⇒"; + var incare = "℅"; + var infin = "∞"; + var infintie = "⧝"; + var inodot = "ı"; + var intcal = "⊺"; + var int = "∫"; + var Int = "∬"; + var integers = "ℤ"; + var Integral = "∫"; + var intercal = "⊺"; + var Intersection = "⋂"; + var intlarhk = "⨗"; + var intprod = "⨼"; + var InvisibleComma = "⁣"; + var InvisibleTimes = "⁢"; + var IOcy = "Ё"; + var iocy = "ё"; + var Iogon = "Į"; + var iogon = "į"; + var Iopf = "𝕀"; + var iopf = "𝕚"; + var Iota = "Ι"; + var iota = "ι"; + var iprod = "⨼"; + var iquest = "¿"; + var iscr = "𝒾"; + var Iscr = "ℐ"; + var isin = "∈"; + var isindot = "⋵"; + var isinE = "⋹"; + var isins = "⋴"; + var isinsv = "⋳"; + var isinv = "∈"; + var it = "⁢"; + var Itilde = "Ĩ"; + var itilde = "ĩ"; + var Iukcy = "І"; + var iukcy = "і"; + var Iuml = "Ï"; + var iuml = "ï"; + var Jcirc = "Ĵ"; + var jcirc = "ĵ"; + var Jcy = "Й"; + var jcy = "й"; + var Jfr = "𝔍"; + var jfr = "𝔧"; + var jmath = "ȷ"; + var Jopf = "𝕁"; + var jopf = "𝕛"; + var Jscr = "𝒥"; + var jscr = "𝒿"; + var Jsercy = "Ј"; + var jsercy = "ј"; + var Jukcy = "Є"; + var jukcy = "є"; + var Kappa = "Κ"; + var kappa = "κ"; + var kappav = "ϰ"; + var Kcedil = "Ķ"; + var kcedil = "ķ"; + var Kcy = "К"; + var kcy = "к"; + var Kfr = "𝔎"; + var kfr = "𝔨"; + var kgreen = "ĸ"; + var KHcy = "Х"; + var khcy = "х"; + var KJcy = "Ќ"; + var kjcy = "ќ"; + var Kopf = "𝕂"; + var kopf = "𝕜"; + var Kscr = "𝒦"; + var kscr = "𝓀"; + var lAarr = "⇚"; + var Lacute = "Ĺ"; + var lacute = "ĺ"; + var laemptyv = "⦴"; + var lagran = "ℒ"; + var Lambda = "Λ"; + var lambda = "λ"; + var lang = "⟨"; + var Lang = "⟪"; + var langd = "⦑"; + var langle = "⟨"; + var lap = "⪅"; + var Laplacetrf = "ℒ"; + var laquo = "«"; + var larrb = "⇤"; + var larrbfs = "⤟"; + var larr = "←"; + var Larr = "↞"; + var lArr = "⇐"; + var larrfs = "⤝"; + var larrhk = "↩"; + var larrlp = "↫"; + var larrpl = "⤹"; + var larrsim = "⥳"; + var larrtl = "↢"; + var latail = "⤙"; + var lAtail = "⤛"; + var lat = "⪫"; + var late = "⪭"; + var lates = "⪭︀"; + var lbarr = "⤌"; + var lBarr = "⤎"; + var lbbrk = "❲"; + var lbrace = "{"; + var lbrack = "["; + var lbrke = "⦋"; + var lbrksld = "⦏"; + var lbrkslu = "⦍"; + var Lcaron = "Ľ"; + var lcaron = "ľ"; + var Lcedil = "Ļ"; + var lcedil = "ļ"; + var lceil = "⌈"; + var lcub = "{"; + var Lcy = "Л"; + var lcy = "л"; + var ldca = "⤶"; + var ldquo = "“"; + var ldquor = "„"; + var ldrdhar = "⥧"; + var ldrushar = "⥋"; + var ldsh = "↲"; + var le = "≤"; + var lE = "≦"; + var LeftAngleBracket = "⟨"; + var LeftArrowBar = "⇤"; + var leftarrow = "←"; + var LeftArrow = "←"; + var Leftarrow = "⇐"; + var LeftArrowRightArrow = "⇆"; + var leftarrowtail = "↢"; + var LeftCeiling = "⌈"; + var LeftDoubleBracket = "⟦"; + var LeftDownTeeVector = "⥡"; + var LeftDownVectorBar = "⥙"; + var LeftDownVector = "⇃"; + var LeftFloor = "⌊"; + var leftharpoondown = "↽"; + var leftharpoonup = "↼"; + var leftleftarrows = "⇇"; + var leftrightarrow = "↔"; + var LeftRightArrow = "↔"; + var Leftrightarrow = "⇔"; + var leftrightarrows = "⇆"; + var leftrightharpoons = "⇋"; + var leftrightsquigarrow = "↭"; + var LeftRightVector = "⥎"; + var LeftTeeArrow = "↤"; + var LeftTee = "⊣"; + var LeftTeeVector = "⥚"; + var leftthreetimes = "⋋"; + var LeftTriangleBar = "⧏"; + var LeftTriangle = "⊲"; + var LeftTriangleEqual = "⊴"; + var LeftUpDownVector = "⥑"; + var LeftUpTeeVector = "⥠"; + var LeftUpVectorBar = "⥘"; + var LeftUpVector = "↿"; + var LeftVectorBar = "⥒"; + var LeftVector = "↼"; + var lEg = "⪋"; + var leg = "⋚"; + var leq = "≤"; + var leqq = "≦"; + var leqslant = "⩽"; + var lescc = "⪨"; + var les = "⩽"; + var lesdot = "⩿"; + var lesdoto = "⪁"; + var lesdotor = "⪃"; + var lesg = "⋚︀"; + var lesges = "⪓"; + var lessapprox = "⪅"; + var lessdot = "⋖"; + var lesseqgtr = "⋚"; + var lesseqqgtr = "⪋"; + var LessEqualGreater = "⋚"; + var LessFullEqual = "≦"; + var LessGreater = "≶"; + var lessgtr = "≶"; + var LessLess = "⪡"; + var lesssim = "≲"; + var LessSlantEqual = "⩽"; + var LessTilde = "≲"; + var lfisht = "⥼"; + var lfloor = "⌊"; + var Lfr = "𝔏"; + var lfr = "𝔩"; + var lg = "≶"; + var lgE = "⪑"; + var lHar = "⥢"; + var lhard = "↽"; + var lharu = "↼"; + var lharul = "⥪"; + var lhblk = "▄"; + var LJcy = "Љ"; + var ljcy = "љ"; + var llarr = "⇇"; + var ll = "≪"; + var Ll = "⋘"; + var llcorner = "⌞"; + var Lleftarrow = "⇚"; + var llhard = "⥫"; + var lltri = "◺"; + var Lmidot = "Ŀ"; + var lmidot = "ŀ"; + var lmoustache = "⎰"; + var lmoust = "⎰"; + var lnap = "⪉"; + var lnapprox = "⪉"; + var lne = "⪇"; + var lnE = "≨"; + var lneq = "⪇"; + var lneqq = "≨"; + var lnsim = "⋦"; + var loang = "⟬"; + var loarr = "⇽"; + var lobrk = "⟦"; + var longleftarrow = "⟵"; + var LongLeftArrow = "⟵"; + var Longleftarrow = "⟸"; + var longleftrightarrow = "⟷"; + var LongLeftRightArrow = "⟷"; + var Longleftrightarrow = "⟺"; + var longmapsto = "⟼"; + var longrightarrow = "⟶"; + var LongRightArrow = "⟶"; + var Longrightarrow = "⟹"; + var looparrowleft = "↫"; + var looparrowright = "↬"; + var lopar = "⦅"; + var Lopf = "𝕃"; + var lopf = "𝕝"; + var loplus = "⨭"; + var lotimes = "⨴"; + var lowast = "∗"; + var lowbar = "_"; + var LowerLeftArrow = "↙"; + var LowerRightArrow = "↘"; + var loz = "◊"; + var lozenge = "◊"; + var lozf = "⧫"; + var lpar = "("; + var lparlt = "⦓"; + var lrarr = "⇆"; + var lrcorner = "⌟"; + var lrhar = "⇋"; + var lrhard = "⥭"; + var lrm = "‎"; + var lrtri = "⊿"; + var lsaquo = "‹"; + var lscr = "𝓁"; + var Lscr = "ℒ"; + var lsh = "↰"; + var Lsh = "↰"; + var lsim = "≲"; + var lsime = "⪍"; + var lsimg = "⪏"; + var lsqb = "["; + var lsquo = "‘"; + var lsquor = "‚"; + var Lstrok = "Ł"; + var lstrok = "ł"; + var ltcc = "⪦"; + var ltcir = "⩹"; + var lt$1 = "<"; + var LT = "<"; + var Lt = "≪"; + var ltdot = "⋖"; + var lthree = "⋋"; + var ltimes = "⋉"; + var ltlarr = "⥶"; + var ltquest = "⩻"; + var ltri = "◃"; + var ltrie = "⊴"; + var ltrif = "◂"; + var ltrPar = "⦖"; + var lurdshar = "⥊"; + var luruhar = "⥦"; + var lvertneqq = "≨︀"; + var lvnE = "≨︀"; + var macr = "¯"; + var male = "♂"; + var malt = "✠"; + var maltese = "✠"; + var map = "↦"; + var mapsto = "↦"; + var mapstodown = "↧"; + var mapstoleft = "↤"; + var mapstoup = "↥"; + var marker = "▮"; + var mcomma = "⨩"; + var Mcy = "М"; + var mcy = "м"; + var mdash = "—"; + var mDDot = "∺"; + var measuredangle = "∡"; + var MediumSpace = " "; + var Mellintrf = "ℳ"; + var Mfr = "𝔐"; + var mfr = "𝔪"; + var mho = "℧"; + var micro = "µ"; + var midast = "*"; + var midcir = "⫰"; + var mid = "∣"; + var middot = "·"; + var minusb = "⊟"; + var minus = "−"; + var minusd = "∸"; + var minusdu = "⨪"; + var MinusPlus = "∓"; + var mlcp = "⫛"; + var mldr = "…"; + var mnplus = "∓"; + var models = "⊧"; + var Mopf = "𝕄"; + var mopf = "𝕞"; + var mp = "∓"; + var mscr = "𝓂"; + var Mscr = "ℳ"; + var mstpos = "∾"; + var Mu = "Μ"; + var mu = "μ"; + var multimap = "⊸"; + var mumap = "⊸"; + var nabla = "∇"; + var Nacute = "Ń"; + var nacute = "ń"; + var nang = "∠⃒"; + var nap = "≉"; + var napE = "⩰̸"; + var napid = "≋̸"; + var napos = "ʼn"; + var napprox = "≉"; + var natural = "♮"; + var naturals = "ℕ"; + var natur = "♮"; + var nbsp = " "; + var nbump = "≎̸"; + var nbumpe = "≏̸"; + var ncap = "⩃"; + var Ncaron = "Ň"; + var ncaron = "ň"; + var Ncedil = "Ņ"; + var ncedil = "ņ"; + var ncong = "≇"; + var ncongdot = "⩭̸"; + var ncup = "⩂"; + var Ncy = "Н"; + var ncy = "н"; + var ndash = "–"; + var nearhk = "⤤"; + var nearr = "↗"; + var neArr = "⇗"; + var nearrow = "↗"; + var ne = "≠"; + var nedot = "≐̸"; + var NegativeMediumSpace = "​"; + var NegativeThickSpace = "​"; + var NegativeThinSpace = "​"; + var NegativeVeryThinSpace = "​"; + var nequiv = "≢"; + var nesear = "⤨"; + var nesim = "≂̸"; + var NestedGreaterGreater = "≫"; + var NestedLessLess = "≪"; + var NewLine = "\n"; + var nexist = "∄"; + var nexists = "∄"; + var Nfr = "𝔑"; + var nfr = "𝔫"; + var ngE = "≧̸"; + var nge = "≱"; + var ngeq = "≱"; + var ngeqq = "≧̸"; + var ngeqslant = "⩾̸"; + var nges = "⩾̸"; + var nGg = "⋙̸"; + var ngsim = "≵"; + var nGt = "≫⃒"; + var ngt = "≯"; + var ngtr = "≯"; + var nGtv = "≫̸"; + var nharr = "↮"; + var nhArr = "⇎"; + var nhpar = "⫲"; + var ni = "∋"; + var nis = "⋼"; + var nisd = "⋺"; + var niv = "∋"; + var NJcy = "Њ"; + var njcy = "њ"; + var nlarr = "↚"; + var nlArr = "⇍"; + var nldr = "‥"; + var nlE = "≦̸"; + var nle = "≰"; + var nleftarrow = "↚"; + var nLeftarrow = "⇍"; + var nleftrightarrow = "↮"; + var nLeftrightarrow = "⇎"; + var nleq = "≰"; + var nleqq = "≦̸"; + var nleqslant = "⩽̸"; + var nles = "⩽̸"; + var nless = "≮"; + var nLl = "⋘̸"; + var nlsim = "≴"; + var nLt = "≪⃒"; + var nlt = "≮"; + var nltri = "⋪"; + var nltrie = "⋬"; + var nLtv = "≪̸"; + var nmid = "∤"; + var NoBreak = "⁠"; + var NonBreakingSpace = " "; + var nopf = "𝕟"; + var Nopf = "ℕ"; + var Not = "⫬"; + var not = "¬"; + var NotCongruent = "≢"; + var NotCupCap = "≭"; + var NotDoubleVerticalBar = "∦"; + var NotElement = "∉"; + var NotEqual = "≠"; + var NotEqualTilde = "≂̸"; + var NotExists = "∄"; + var NotGreater = "≯"; + var NotGreaterEqual = "≱"; + var NotGreaterFullEqual = "≧̸"; + var NotGreaterGreater = "≫̸"; + var NotGreaterLess = "≹"; + var NotGreaterSlantEqual = "⩾̸"; + var NotGreaterTilde = "≵"; + var NotHumpDownHump = "≎̸"; + var NotHumpEqual = "≏̸"; + var notin = "∉"; + var notindot = "⋵̸"; + var notinE = "⋹̸"; + var notinva = "∉"; + var notinvb = "⋷"; + var notinvc = "⋶"; + var NotLeftTriangleBar = "⧏̸"; + var NotLeftTriangle = "⋪"; + var NotLeftTriangleEqual = "⋬"; + var NotLess = "≮"; + var NotLessEqual = "≰"; + var NotLessGreater = "≸"; + var NotLessLess = "≪̸"; + var NotLessSlantEqual = "⩽̸"; + var NotLessTilde = "≴"; + var NotNestedGreaterGreater = "⪢̸"; + var NotNestedLessLess = "⪡̸"; + var notni = "∌"; + var notniva = "∌"; + var notnivb = "⋾"; + var notnivc = "⋽"; + var NotPrecedes = "⊀"; + var NotPrecedesEqual = "⪯̸"; + var NotPrecedesSlantEqual = "⋠"; + var NotReverseElement = "∌"; + var NotRightTriangleBar = "⧐̸"; + var NotRightTriangle = "⋫"; + var NotRightTriangleEqual = "⋭"; + var NotSquareSubset = "⊏̸"; + var NotSquareSubsetEqual = "⋢"; + var NotSquareSuperset = "⊐̸"; + var NotSquareSupersetEqual = "⋣"; + var NotSubset = "⊂⃒"; + var NotSubsetEqual = "⊈"; + var NotSucceeds = "⊁"; + var NotSucceedsEqual = "⪰̸"; + var NotSucceedsSlantEqual = "⋡"; + var NotSucceedsTilde = "≿̸"; + var NotSuperset = "⊃⃒"; + var NotSupersetEqual = "⊉"; + var NotTilde = "≁"; + var NotTildeEqual = "≄"; + var NotTildeFullEqual = "≇"; + var NotTildeTilde = "≉"; + var NotVerticalBar = "∤"; + var nparallel = "∦"; + var npar = "∦"; + var nparsl = "⫽⃥"; + var npart = "∂̸"; + var npolint = "⨔"; + var npr = "⊀"; + var nprcue = "⋠"; + var nprec = "⊀"; + var npreceq = "⪯̸"; + var npre = "⪯̸"; + var nrarrc = "⤳̸"; + var nrarr = "↛"; + var nrArr = "⇏"; + var nrarrw = "↝̸"; + var nrightarrow = "↛"; + var nRightarrow = "⇏"; + var nrtri = "⋫"; + var nrtrie = "⋭"; + var nsc = "⊁"; + var nsccue = "⋡"; + var nsce = "⪰̸"; + var Nscr = "𝒩"; + var nscr = "𝓃"; + var nshortmid = "∤"; + var nshortparallel = "∦"; + var nsim = "≁"; + var nsime = "≄"; + var nsimeq = "≄"; + var nsmid = "∤"; + var nspar = "∦"; + var nsqsube = "⋢"; + var nsqsupe = "⋣"; + var nsub = "⊄"; + var nsubE = "⫅̸"; + var nsube = "⊈"; + var nsubset = "⊂⃒"; + var nsubseteq = "⊈"; + var nsubseteqq = "⫅̸"; + var nsucc = "⊁"; + var nsucceq = "⪰̸"; + var nsup = "⊅"; + var nsupE = "⫆̸"; + var nsupe = "⊉"; + var nsupset = "⊃⃒"; + var nsupseteq = "⊉"; + var nsupseteqq = "⫆̸"; + var ntgl = "≹"; + var Ntilde = "Ñ"; + var ntilde = "ñ"; + var ntlg = "≸"; + var ntriangleleft = "⋪"; + var ntrianglelefteq = "⋬"; + var ntriangleright = "⋫"; + var ntrianglerighteq = "⋭"; + var Nu = "Ν"; + var nu = "ν"; + var num = "#"; + var numero = "№"; + var numsp = " "; + var nvap = "≍⃒"; + var nvdash = "⊬"; + var nvDash = "⊭"; + var nVdash = "⊮"; + var nVDash = "⊯"; + var nvge = "≥⃒"; + var nvgt = ">⃒"; + var nvHarr = "⤄"; + var nvinfin = "⧞"; + var nvlArr = "⤂"; + var nvle = "≤⃒"; + var nvlt = "<⃒"; + var nvltrie = "⊴⃒"; + var nvrArr = "⤃"; + var nvrtrie = "⊵⃒"; + var nvsim = "∼⃒"; + var nwarhk = "⤣"; + var nwarr = "↖"; + var nwArr = "⇖"; + var nwarrow = "↖"; + var nwnear = "⤧"; + var Oacute = "Ó"; + var oacute = "ó"; + var oast = "⊛"; + var Ocirc = "Ô"; + var ocirc = "ô"; + var ocir = "⊚"; + var Ocy = "О"; + var ocy = "о"; + var odash = "⊝"; + var Odblac = "Ő"; + var odblac = "ő"; + var odiv = "⨸"; + var odot = "⊙"; + var odsold = "⦼"; + var OElig = "Œ"; + var oelig = "œ"; + var ofcir = "⦿"; + var Ofr = "𝔒"; + var ofr = "𝔬"; + var ogon = "˛"; + var Ograve = "Ò"; + var ograve = "ò"; + var ogt = "⧁"; + var ohbar = "⦵"; + var ohm = "Ω"; + var oint = "∮"; + var olarr = "↺"; + var olcir = "⦾"; + var olcross = "⦻"; + var oline = "‾"; + var olt = "⧀"; + var Omacr = "Ō"; + var omacr = "ō"; + var Omega = "Ω"; + var omega = "ω"; + var Omicron = "Ο"; + var omicron = "ο"; + var omid = "⦶"; + var ominus = "⊖"; + var Oopf = "𝕆"; + var oopf = "𝕠"; + var opar = "⦷"; + var OpenCurlyDoubleQuote = "“"; + var OpenCurlyQuote = "‘"; + var operp = "⦹"; + var oplus = "⊕"; + var orarr = "↻"; + var Or = "⩔"; + var or = "∨"; + var ord = "⩝"; + var order = "ℴ"; + var orderof = "ℴ"; + var ordf = "ª"; + var ordm = "º"; + var origof = "⊶"; + var oror = "⩖"; + var orslope = "⩗"; + var orv = "⩛"; + var oS = "Ⓢ"; + var Oscr = "𝒪"; + var oscr = "ℴ"; + var Oslash = "Ø"; + var oslash = "ø"; + var osol = "⊘"; + var Otilde = "Õ"; + var otilde = "õ"; + var otimesas = "⨶"; + var Otimes = "⨷"; + var otimes = "⊗"; + var Ouml = "Ö"; + var ouml = "ö"; + var ovbar = "⌽"; + var OverBar = "‾"; + var OverBrace = "⏞"; + var OverBracket = "⎴"; + var OverParenthesis = "⏜"; + var para = "¶"; + var parallel = "∥"; + var par = "∥"; + var parsim = "⫳"; + var parsl = "⫽"; + var part = "∂"; + var PartialD = "∂"; + var Pcy = "П"; + var pcy = "п"; + var percnt = "%"; + var period = "."; + var permil = "‰"; + var perp = "⊥"; + var pertenk = "‱"; + var Pfr = "𝔓"; + var pfr = "𝔭"; + var Phi = "Φ"; + var phi = "φ"; + var phiv = "ϕ"; + var phmmat = "ℳ"; + var phone = "☎"; + var Pi = "Π"; + var pi = "π"; + var pitchfork = "⋔"; + var piv = "ϖ"; + var planck = "ℏ"; + var planckh = "ℎ"; + var plankv = "ℏ"; + var plusacir = "⨣"; + var plusb = "⊞"; + var pluscir = "⨢"; + var plus = "+"; + var plusdo = "∔"; + var plusdu = "⨥"; + var pluse = "⩲"; + var PlusMinus = "±"; + var plusmn = "±"; + var plussim = "⨦"; + var plustwo = "⨧"; + var pm = "±"; + var Poincareplane = "ℌ"; + var pointint = "⨕"; + var popf = "𝕡"; + var Popf = "ℙ"; + var pound = "£"; + var prap = "⪷"; + var Pr = "⪻"; + var pr = "≺"; + var prcue = "≼"; + var precapprox = "⪷"; + var prec = "≺"; + var preccurlyeq = "≼"; + var Precedes = "≺"; + var PrecedesEqual = "⪯"; + var PrecedesSlantEqual = "≼"; + var PrecedesTilde = "≾"; + var preceq = "⪯"; + var precnapprox = "⪹"; + var precneqq = "⪵"; + var precnsim = "⋨"; + var pre = "⪯"; + var prE = "⪳"; + var precsim = "≾"; + var prime = "′"; + var Prime = "″"; + var primes = "ℙ"; + var prnap = "⪹"; + var prnE = "⪵"; + var prnsim = "⋨"; + var prod = "∏"; + var Product = "∏"; + var profalar = "⌮"; + var profline = "⌒"; + var profsurf = "⌓"; + var prop = "∝"; + var Proportional = "∝"; + var Proportion = "∷"; + var propto = "∝"; + var prsim = "≾"; + var prurel = "⊰"; + var Pscr = "𝒫"; + var pscr = "𝓅"; + var Psi = "Ψ"; + var psi = "ψ"; + var puncsp = " "; + var Qfr = "𝔔"; + var qfr = "𝔮"; + var qint = "⨌"; + var qopf = "𝕢"; + var Qopf = "ℚ"; + var qprime = "⁗"; + var Qscr = "𝒬"; + var qscr = "𝓆"; + var quaternions = "ℍ"; + var quatint = "⨖"; + var quest = "?"; + var questeq = "≟"; + var quot$1 = "\""; + var QUOT = "\""; + var rAarr = "⇛"; + var race = "∽̱"; + var Racute = "Ŕ"; + var racute = "ŕ"; + var radic = "√"; + var raemptyv = "⦳"; + var rang = "⟩"; + var Rang = "⟫"; + var rangd = "⦒"; + var range = "⦥"; + var rangle = "⟩"; + var raquo = "»"; + var rarrap = "⥵"; + var rarrb = "⇥"; + var rarrbfs = "⤠"; + var rarrc = "⤳"; + var rarr = "→"; + var Rarr = "↠"; + var rArr = "⇒"; + var rarrfs = "⤞"; + var rarrhk = "↪"; + var rarrlp = "↬"; + var rarrpl = "⥅"; + var rarrsim = "⥴"; + var Rarrtl = "⤖"; + var rarrtl = "↣"; + var rarrw = "↝"; + var ratail = "⤚"; + var rAtail = "⤜"; + var ratio = "∶"; + var rationals = "ℚ"; + var rbarr = "⤍"; + var rBarr = "⤏"; + var RBarr = "⤐"; + var rbbrk = "❳"; + var rbrace = "}"; + var rbrack = "]"; + var rbrke = "⦌"; + var rbrksld = "⦎"; + var rbrkslu = "⦐"; + var Rcaron = "Ř"; + var rcaron = "ř"; + var Rcedil = "Ŗ"; + var rcedil = "ŗ"; + var rceil = "⌉"; + var rcub = "}"; + var Rcy = "Р"; + var rcy = "р"; + var rdca = "⤷"; + var rdldhar = "⥩"; + var rdquo = "”"; + var rdquor = "”"; + var rdsh = "↳"; + var real = "ℜ"; + var realine = "ℛ"; + var realpart = "ℜ"; + var reals = "ℝ"; + var Re = "ℜ"; + var rect = "▭"; + var reg = "®"; + var REG = "®"; + var ReverseElement = "∋"; + var ReverseEquilibrium = "⇋"; + var ReverseUpEquilibrium = "⥯"; + var rfisht = "⥽"; + var rfloor = "⌋"; + var rfr = "𝔯"; + var Rfr = "ℜ"; + var rHar = "⥤"; + var rhard = "⇁"; + var rharu = "⇀"; + var rharul = "⥬"; + var Rho = "Ρ"; + var rho = "ρ"; + var rhov = "ϱ"; + var RightAngleBracket = "⟩"; + var RightArrowBar = "⇥"; + var rightarrow = "→"; + var RightArrow = "→"; + var Rightarrow = "⇒"; + var RightArrowLeftArrow = "⇄"; + var rightarrowtail = "↣"; + var RightCeiling = "⌉"; + var RightDoubleBracket = "⟧"; + var RightDownTeeVector = "⥝"; + var RightDownVectorBar = "⥕"; + var RightDownVector = "⇂"; + var RightFloor = "⌋"; + var rightharpoondown = "⇁"; + var rightharpoonup = "⇀"; + var rightleftarrows = "⇄"; + var rightleftharpoons = "⇌"; + var rightrightarrows = "⇉"; + var rightsquigarrow = "↝"; + var RightTeeArrow = "↦"; + var RightTee = "⊢"; + var RightTeeVector = "⥛"; + var rightthreetimes = "⋌"; + var RightTriangleBar = "⧐"; + var RightTriangle = "⊳"; + var RightTriangleEqual = "⊵"; + var RightUpDownVector = "⥏"; + var RightUpTeeVector = "⥜"; + var RightUpVectorBar = "⥔"; + var RightUpVector = "↾"; + var RightVectorBar = "⥓"; + var RightVector = "⇀"; + var ring = "˚"; + var risingdotseq = "≓"; + var rlarr = "⇄"; + var rlhar = "⇌"; + var rlm = "‏"; + var rmoustache = "⎱"; + var rmoust = "⎱"; + var rnmid = "⫮"; + var roang = "⟭"; + var roarr = "⇾"; + var robrk = "⟧"; + var ropar = "⦆"; + var ropf = "𝕣"; + var Ropf = "ℝ"; + var roplus = "⨮"; + var rotimes = "⨵"; + var RoundImplies = "⥰"; + var rpar = ")"; + var rpargt = "⦔"; + var rppolint = "⨒"; + var rrarr = "⇉"; + var Rrightarrow = "⇛"; + var rsaquo = "›"; + var rscr = "𝓇"; + var Rscr = "ℛ"; + var rsh = "↱"; + var Rsh = "↱"; + var rsqb = "]"; + var rsquo = "’"; + var rsquor = "’"; + var rthree = "⋌"; + var rtimes = "⋊"; + var rtri = "▹"; + var rtrie = "⊵"; + var rtrif = "▸"; + var rtriltri = "⧎"; + var RuleDelayed = "⧴"; + var ruluhar = "⥨"; + var rx = "℞"; + var Sacute = "Ś"; + var sacute = "ś"; + var sbquo = "‚"; + var scap = "⪸"; + var Scaron = "Š"; + var scaron = "š"; + var Sc = "⪼"; + var sc = "≻"; + var sccue = "≽"; + var sce = "⪰"; + var scE = "⪴"; + var Scedil = "Ş"; + var scedil = "ş"; + var Scirc = "Ŝ"; + var scirc = "ŝ"; + var scnap = "⪺"; + var scnE = "⪶"; + var scnsim = "⋩"; + var scpolint = "⨓"; + var scsim = "≿"; + var Scy = "С"; + var scy = "с"; + var sdotb = "⊡"; + var sdot = "⋅"; + var sdote = "⩦"; + var searhk = "⤥"; + var searr = "↘"; + var seArr = "⇘"; + var searrow = "↘"; + var sect = "§"; + var semi = ";"; + var seswar = "⤩"; + var setminus = "∖"; + var setmn = "∖"; + var sext = "✶"; + var Sfr = "𝔖"; + var sfr = "𝔰"; + var sfrown = "⌢"; + var sharp = "♯"; + var SHCHcy = "Щ"; + var shchcy = "щ"; + var SHcy = "Ш"; + var shcy = "ш"; + var ShortDownArrow = "↓"; + var ShortLeftArrow = "←"; + var shortmid = "∣"; + var shortparallel = "∥"; + var ShortRightArrow = "→"; + var ShortUpArrow = "↑"; + var shy = "­"; + var Sigma = "Σ"; + var sigma = "σ"; + var sigmaf = "ς"; + var sigmav = "ς"; + var sim = "∼"; + var simdot = "⩪"; + var sime = "≃"; + var simeq = "≃"; + var simg = "⪞"; + var simgE = "⪠"; + var siml = "⪝"; + var simlE = "⪟"; + var simne = "≆"; + var simplus = "⨤"; + var simrarr = "⥲"; + var slarr = "←"; + var SmallCircle = "∘"; + var smallsetminus = "∖"; + var smashp = "⨳"; + var smeparsl = "⧤"; + var smid = "∣"; + var smile = "⌣"; + var smt = "⪪"; + var smte = "⪬"; + var smtes = "⪬︀"; + var SOFTcy = "Ь"; + var softcy = "ь"; + var solbar = "⌿"; + var solb = "⧄"; + var sol = "/"; + var Sopf = "𝕊"; + var sopf = "𝕤"; + var spades = "♠"; + var spadesuit = "♠"; + var spar = "∥"; + var sqcap = "⊓"; + var sqcaps = "⊓︀"; + var sqcup = "⊔"; + var sqcups = "⊔︀"; + var Sqrt = "√"; + var sqsub = "⊏"; + var sqsube = "⊑"; + var sqsubset = "⊏"; + var sqsubseteq = "⊑"; + var sqsup = "⊐"; + var sqsupe = "⊒"; + var sqsupset = "⊐"; + var sqsupseteq = "⊒"; + var square = "□"; + var Square = "□"; + var SquareIntersection = "⊓"; + var SquareSubset = "⊏"; + var SquareSubsetEqual = "⊑"; + var SquareSuperset = "⊐"; + var SquareSupersetEqual = "⊒"; + var SquareUnion = "⊔"; + var squarf = "▪"; + var squ = "□"; + var squf = "▪"; + var srarr = "→"; + var Sscr = "𝒮"; + var sscr = "𝓈"; + var ssetmn = "∖"; + var ssmile = "⌣"; + var sstarf = "⋆"; + var Star = "⋆"; + var star = "☆"; + var starf = "★"; + var straightepsilon = "ϵ"; + var straightphi = "ϕ"; + var strns = "¯"; + var sub = "⊂"; + var Sub = "⋐"; + var subdot = "⪽"; + var subE = "⫅"; + var sube = "⊆"; + var subedot = "⫃"; + var submult = "⫁"; + var subnE = "⫋"; + var subne = "⊊"; + var subplus = "⪿"; + var subrarr = "⥹"; + var subset = "⊂"; + var Subset = "⋐"; + var subseteq = "⊆"; + var subseteqq = "⫅"; + var SubsetEqual = "⊆"; + var subsetneq = "⊊"; + var subsetneqq = "⫋"; + var subsim = "⫇"; + var subsub = "⫕"; + var subsup = "⫓"; + var succapprox = "⪸"; + var succ = "≻"; + var succcurlyeq = "≽"; + var Succeeds = "≻"; + var SucceedsEqual = "⪰"; + var SucceedsSlantEqual = "≽"; + var SucceedsTilde = "≿"; + var succeq = "⪰"; + var succnapprox = "⪺"; + var succneqq = "⪶"; + var succnsim = "⋩"; + var succsim = "≿"; + var SuchThat = "∋"; + var sum = "∑"; + var Sum = "∑"; + var sung = "♪"; + var sup1 = "¹"; + var sup2 = "²"; + var sup3 = "³"; + var sup = "⊃"; + var Sup = "⋑"; + var supdot = "⪾"; + var supdsub = "⫘"; + var supE = "⫆"; + var supe = "⊇"; + var supedot = "⫄"; + var Superset = "⊃"; + var SupersetEqual = "⊇"; + var suphsol = "⟉"; + var suphsub = "⫗"; + var suplarr = "⥻"; + var supmult = "⫂"; + var supnE = "⫌"; + var supne = "⊋"; + var supplus = "⫀"; + var supset = "⊃"; + var Supset = "⋑"; + var supseteq = "⊇"; + var supseteqq = "⫆"; + var supsetneq = "⊋"; + var supsetneqq = "⫌"; + var supsim = "⫈"; + var supsub = "⫔"; + var supsup = "⫖"; + var swarhk = "⤦"; + var swarr = "↙"; + var swArr = "⇙"; + var swarrow = "↙"; + var swnwar = "⤪"; + var szlig = "ß"; + var Tab = "\t"; + var target = "⌖"; + var Tau = "Τ"; + var tau = "τ"; + var tbrk = "⎴"; + var Tcaron = "Ť"; + var tcaron = "ť"; + var Tcedil = "Ţ"; + var tcedil = "ţ"; + var Tcy = "Т"; + var tcy = "т"; + var tdot = "⃛"; + var telrec = "⌕"; + var Tfr = "𝔗"; + var tfr = "𝔱"; + var there4 = "∴"; + var therefore = "∴"; + var Therefore = "∴"; + var Theta = "Θ"; + var theta = "θ"; + var thetasym = "ϑ"; + var thetav = "ϑ"; + var thickapprox = "≈"; + var thicksim = "∼"; + var ThickSpace = "  "; + var ThinSpace = " "; + var thinsp = " "; + var thkap = "≈"; + var thksim = "∼"; + var THORN = "Þ"; + var thorn = "þ"; + var tilde = "˜"; + var Tilde = "∼"; + var TildeEqual = "≃"; + var TildeFullEqual = "≅"; + var TildeTilde = "≈"; + var timesbar = "⨱"; + var timesb = "⊠"; + var times = "×"; + var timesd = "⨰"; + var tint = "∭"; + var toea = "⤨"; + var topbot = "⌶"; + var topcir = "⫱"; + var top = "⊤"; + var Topf = "𝕋"; + var topf = "𝕥"; + var topfork = "⫚"; + var tosa = "⤩"; + var tprime = "‴"; + var trade = "™"; + var TRADE = "™"; + var triangle = "▵"; + var triangledown = "▿"; + var triangleleft = "◃"; + var trianglelefteq = "⊴"; + var triangleq = "≜"; + var triangleright = "▹"; + var trianglerighteq = "⊵"; + var tridot = "◬"; + var trie = "≜"; + var triminus = "⨺"; + var TripleDot = "⃛"; + var triplus = "⨹"; + var trisb = "⧍"; + var tritime = "⨻"; + var trpezium = "⏢"; + var Tscr = "𝒯"; + var tscr = "𝓉"; + var TScy = "Ц"; + var tscy = "ц"; + var TSHcy = "Ћ"; + var tshcy = "ћ"; + var Tstrok = "Ŧ"; + var tstrok = "ŧ"; + var twixt = "≬"; + var twoheadleftarrow = "↞"; + var twoheadrightarrow = "↠"; + var Uacute = "Ú"; + var uacute = "ú"; + var uarr = "↑"; + var Uarr = "↟"; + var uArr = "⇑"; + var Uarrocir = "⥉"; + var Ubrcy = "Ў"; + var ubrcy = "ў"; + var Ubreve = "Ŭ"; + var ubreve = "ŭ"; + var Ucirc = "Û"; + var ucirc = "û"; + var Ucy = "У"; + var ucy = "у"; + var udarr = "⇅"; + var Udblac = "Ű"; + var udblac = "ű"; + var udhar = "⥮"; + var ufisht = "⥾"; + var Ufr = "𝔘"; + var ufr = "𝔲"; + var Ugrave = "Ù"; + var ugrave = "ù"; + var uHar = "⥣"; + var uharl = "↿"; + var uharr = "↾"; + var uhblk = "▀"; + var ulcorn = "⌜"; + var ulcorner = "⌜"; + var ulcrop = "⌏"; + var ultri = "◸"; + var Umacr = "Ū"; + var umacr = "ū"; + var uml = "¨"; + var UnderBar = "_"; + var UnderBrace = "⏟"; + var UnderBracket = "⎵"; + var UnderParenthesis = "⏝"; + var Union = "⋃"; + var UnionPlus = "⊎"; + var Uogon = "Ų"; + var uogon = "ų"; + var Uopf = "𝕌"; + var uopf = "𝕦"; + var UpArrowBar = "⤒"; + var uparrow = "↑"; + var UpArrow = "↑"; + var Uparrow = "⇑"; + var UpArrowDownArrow = "⇅"; + var updownarrow = "↕"; + var UpDownArrow = "↕"; + var Updownarrow = "⇕"; + var UpEquilibrium = "⥮"; + var upharpoonleft = "↿"; + var upharpoonright = "↾"; + var uplus = "⊎"; + var UpperLeftArrow = "↖"; + var UpperRightArrow = "↗"; + var upsi = "υ"; + var Upsi = "ϒ"; + var upsih = "ϒ"; + var Upsilon = "Υ"; + var upsilon = "υ"; + var UpTeeArrow = "↥"; + var UpTee = "⊥"; + var upuparrows = "⇈"; + var urcorn = "⌝"; + var urcorner = "⌝"; + var urcrop = "⌎"; + var Uring = "Ů"; + var uring = "ů"; + var urtri = "◹"; + var Uscr = "𝒰"; + var uscr = "𝓊"; + var utdot = "⋰"; + var Utilde = "Ũ"; + var utilde = "ũ"; + var utri = "▵"; + var utrif = "▴"; + var uuarr = "⇈"; + var Uuml = "Ü"; + var uuml = "ü"; + var uwangle = "⦧"; + var vangrt = "⦜"; + var varepsilon = "ϵ"; + var varkappa = "ϰ"; + var varnothing = "∅"; + var varphi = "ϕ"; + var varpi = "ϖ"; + var varpropto = "∝"; + var varr = "↕"; + var vArr = "⇕"; + var varrho = "ϱ"; + var varsigma = "ς"; + var varsubsetneq = "⊊︀"; + var varsubsetneqq = "⫋︀"; + var varsupsetneq = "⊋︀"; + var varsupsetneqq = "⫌︀"; + var vartheta = "ϑ"; + var vartriangleleft = "⊲"; + var vartriangleright = "⊳"; + var vBar = "⫨"; + var Vbar = "⫫"; + var vBarv = "⫩"; + var Vcy = "В"; + var vcy = "в"; + var vdash = "⊢"; + var vDash = "⊨"; + var Vdash = "⊩"; + var VDash = "⊫"; + var Vdashl = "⫦"; + var veebar = "⊻"; + var vee = "∨"; + var Vee = "⋁"; + var veeeq = "≚"; + var vellip = "⋮"; + var verbar = "|"; + var Verbar = "‖"; + var vert = "|"; + var Vert = "‖"; + var VerticalBar = "∣"; + var VerticalLine = "|"; + var VerticalSeparator = "❘"; + var VerticalTilde = "≀"; + var VeryThinSpace = " "; + var Vfr = "𝔙"; + var vfr = "𝔳"; + var vltri = "⊲"; + var vnsub = "⊂⃒"; + var vnsup = "⊃⃒"; + var Vopf = "𝕍"; + var vopf = "𝕧"; + var vprop = "∝"; + var vrtri = "⊳"; + var Vscr = "𝒱"; + var vscr = "𝓋"; + var vsubnE = "⫋︀"; + var vsubne = "⊊︀"; + var vsupnE = "⫌︀"; + var vsupne = "⊋︀"; + var Vvdash = "⊪"; + var vzigzag = "⦚"; + var Wcirc = "Ŵ"; + var wcirc = "ŵ"; + var wedbar = "⩟"; + var wedge = "∧"; + var Wedge = "⋀"; + var wedgeq = "≙"; + var weierp = "℘"; + var Wfr = "𝔚"; + var wfr = "𝔴"; + var Wopf = "𝕎"; + var wopf = "𝕨"; + var wp = "℘"; + var wr = "≀"; + var wreath = "≀"; + var Wscr = "𝒲"; + var wscr = "𝓌"; + var xcap = "⋂"; + var xcirc = "◯"; + var xcup = "⋃"; + var xdtri = "▽"; + var Xfr = "𝔛"; + var xfr = "𝔵"; + var xharr = "⟷"; + var xhArr = "⟺"; + var Xi = "Ξ"; + var xi = "ξ"; + var xlarr = "⟵"; + var xlArr = "⟸"; + var xmap = "⟼"; + var xnis = "⋻"; + var xodot = "⨀"; + var Xopf = "𝕏"; + var xopf = "𝕩"; + var xoplus = "⨁"; + var xotime = "⨂"; + var xrarr = "⟶"; + var xrArr = "⟹"; + var Xscr = "𝒳"; + var xscr = "𝓍"; + var xsqcup = "⨆"; + var xuplus = "⨄"; + var xutri = "△"; + var xvee = "⋁"; + var xwedge = "⋀"; + var Yacute = "Ý"; + var yacute = "ý"; + var YAcy = "Я"; + var yacy = "я"; + var Ycirc = "Ŷ"; + var ycirc = "ŷ"; + var Ycy = "Ы"; + var ycy = "ы"; + var yen = "¥"; + var Yfr = "𝔜"; + var yfr = "𝔶"; + var YIcy = "Ї"; + var yicy = "ї"; + var Yopf = "𝕐"; + var yopf = "𝕪"; + var Yscr = "𝒴"; + var yscr = "𝓎"; + var YUcy = "Ю"; + var yucy = "ю"; + var yuml = "ÿ"; + var Yuml = "Ÿ"; + var Zacute = "Ź"; + var zacute = "ź"; + var Zcaron = "Ž"; + var zcaron = "ž"; + var Zcy = "З"; + var zcy = "з"; + var Zdot = "Ż"; + var zdot = "ż"; + var zeetrf = "ℨ"; + var ZeroWidthSpace = "​"; + var Zeta = "Ζ"; + var zeta = "ζ"; + var zfr = "𝔷"; + var Zfr = "ℨ"; + var ZHcy = "Ж"; + var zhcy = "ж"; + var zigrarr = "⇝"; + var zopf = "𝕫"; + var Zopf = "ℤ"; + var Zscr = "𝒵"; + var zscr = "𝓏"; + var zwj = "‍"; + var zwnj = "‌"; + var entities = { + Aacute: Aacute, + aacute: aacute, + Abreve: Abreve, + abreve: abreve, + ac: ac, + acd: acd, + acE: acE, + Acirc: Acirc, + acirc: acirc, + acute: acute, + Acy: Acy, + acy: acy, + AElig: AElig, + aelig: aelig, + af: af, + Afr: Afr, + afr: afr, + Agrave: Agrave, + agrave: agrave, + alefsym: alefsym, + aleph: aleph, + Alpha: Alpha, + alpha: alpha, + Amacr: Amacr, + amacr: amacr, + amalg: amalg, + amp: amp$1, + AMP: AMP, + andand: andand, + And: And, + and: and, + andd: andd, + andslope: andslope, + andv: andv, + ang: ang, + ange: ange, + angle: angle, + angmsdaa: angmsdaa, + angmsdab: angmsdab, + angmsdac: angmsdac, + angmsdad: angmsdad, + angmsdae: angmsdae, + angmsdaf: angmsdaf, + angmsdag: angmsdag, + angmsdah: angmsdah, + angmsd: angmsd, + angrt: angrt, + angrtvb: angrtvb, + angrtvbd: angrtvbd, + angsph: angsph, + angst: angst, + angzarr: angzarr, + Aogon: Aogon, + aogon: aogon, + Aopf: Aopf, + aopf: aopf, + apacir: apacir, + ap: ap, + apE: apE, + ape: ape, + apid: apid, + apos: apos$1, + ApplyFunction: ApplyFunction, + approx: approx, + approxeq: approxeq, + Aring: Aring, + aring: aring, + Ascr: Ascr, + ascr: ascr, + Assign: Assign, + ast: ast, + asymp: asymp, + asympeq: asympeq, + Atilde: Atilde, + atilde: atilde, + Auml: Auml, + auml: auml, + awconint: awconint, + awint: awint, + backcong: backcong, + backepsilon: backepsilon, + backprime: backprime, + backsim: backsim, + backsimeq: backsimeq, + Backslash: Backslash, + Barv: Barv, + barvee: barvee, + barwed: barwed, + Barwed: Barwed, + barwedge: barwedge, + bbrk: bbrk, + bbrktbrk: bbrktbrk, + bcong: bcong, + Bcy: Bcy, + bcy: bcy, + bdquo: bdquo, + becaus: becaus, + because: because, + Because: Because, + bemptyv: bemptyv, + bepsi: bepsi, + bernou: bernou, + Bernoullis: Bernoullis, + Beta: Beta, + beta: beta, + beth: beth, + between: between, + Bfr: Bfr, + bfr: bfr, + bigcap: bigcap, + bigcirc: bigcirc, + bigcup: bigcup, + bigodot: bigodot, + bigoplus: bigoplus, + bigotimes: bigotimes, + bigsqcup: bigsqcup, + bigstar: bigstar, + bigtriangledown: bigtriangledown, + bigtriangleup: bigtriangleup, + biguplus: biguplus, + bigvee: bigvee, + bigwedge: bigwedge, + bkarow: bkarow, + blacklozenge: blacklozenge, + blacksquare: blacksquare, + blacktriangle: blacktriangle, + blacktriangledown: blacktriangledown, + blacktriangleleft: blacktriangleleft, + blacktriangleright: blacktriangleright, + blank: blank, + blk12: blk12, + blk14: blk14, + blk34: blk34, + block: block, + bne: bne, + bnequiv: bnequiv, + bNot: bNot, + bnot: bnot, + Bopf: Bopf, + bopf: bopf, + bot: bot, + bottom: bottom, + bowtie: bowtie, + boxbox: boxbox, + boxdl: boxdl, + boxdL: boxdL, + boxDl: boxDl, + boxDL: boxDL, + boxdr: boxdr, + boxdR: boxdR, + boxDr: boxDr, + boxDR: boxDR, + boxh: boxh, + boxH: boxH, + boxhd: boxhd, + boxHd: boxHd, + boxhD: boxhD, + boxHD: boxHD, + boxhu: boxhu, + boxHu: boxHu, + boxhU: boxhU, + boxHU: boxHU, + boxminus: boxminus, + boxplus: boxplus, + boxtimes: boxtimes, + boxul: boxul, + boxuL: boxuL, + boxUl: boxUl, + boxUL: boxUL, + boxur: boxur, + boxuR: boxuR, + boxUr: boxUr, + boxUR: boxUR, + boxv: boxv, + boxV: boxV, + boxvh: boxvh, + boxvH: boxvH, + boxVh: boxVh, + boxVH: boxVH, + boxvl: boxvl, + boxvL: boxvL, + boxVl: boxVl, + boxVL: boxVL, + boxvr: boxvr, + boxvR: boxvR, + boxVr: boxVr, + boxVR: boxVR, + bprime: bprime, + breve: breve, + Breve: Breve, + brvbar: brvbar, + bscr: bscr, + Bscr: Bscr, + bsemi: bsemi, + bsim: bsim, + bsime: bsime, + bsolb: bsolb, + bsol: bsol, + bsolhsub: bsolhsub, + bull: bull, + bullet: bullet, + bump: bump, + bumpE: bumpE, + bumpe: bumpe, + Bumpeq: Bumpeq, + bumpeq: bumpeq, + Cacute: Cacute, + cacute: cacute, + capand: capand, + capbrcup: capbrcup, + capcap: capcap, + cap: cap, + Cap: Cap, + capcup: capcup, + capdot: capdot, + CapitalDifferentialD: CapitalDifferentialD, + caps: caps, + caret: caret, + caron: caron, + Cayleys: Cayleys, + ccaps: ccaps, + Ccaron: Ccaron, + ccaron: ccaron, + Ccedil: Ccedil, + ccedil: ccedil, + Ccirc: Ccirc, + ccirc: ccirc, + Cconint: Cconint, + ccups: ccups, + ccupssm: ccupssm, + Cdot: Cdot, + cdot: cdot, + cedil: cedil, + Cedilla: Cedilla, + cemptyv: cemptyv, + cent: cent, + centerdot: centerdot, + CenterDot: CenterDot, + cfr: cfr, + Cfr: Cfr, + CHcy: CHcy, + chcy: chcy, + check: check, + checkmark: checkmark, + Chi: Chi, + chi: chi, + circ: circ, + circeq: circeq, + circlearrowleft: circlearrowleft, + circlearrowright: circlearrowright, + circledast: circledast, + circledcirc: circledcirc, + circleddash: circleddash, + CircleDot: CircleDot, + circledR: circledR, + circledS: circledS, + CircleMinus: CircleMinus, + CirclePlus: CirclePlus, + CircleTimes: CircleTimes, + cir: cir, + cirE: cirE, + cire: cire, + cirfnint: cirfnint, + cirmid: cirmid, + cirscir: cirscir, + ClockwiseContourIntegral: ClockwiseContourIntegral, + CloseCurlyDoubleQuote: CloseCurlyDoubleQuote, + CloseCurlyQuote: CloseCurlyQuote, + clubs: clubs, + clubsuit: clubsuit, + colon: colon, + Colon: Colon, + Colone: Colone, + colone: colone, + coloneq: coloneq, + comma: comma, + commat: commat, + comp: comp, + compfn: compfn, + complement: complement, + complexes: complexes, + cong: cong, + congdot: congdot, + Congruent: Congruent, + conint: conint, + Conint: Conint, + ContourIntegral: ContourIntegral, + copf: copf, + Copf: Copf, + coprod: coprod, + Coproduct: Coproduct, + copy: copy, + COPY: COPY, + copysr: copysr, + CounterClockwiseContourIntegral: CounterClockwiseContourIntegral, + crarr: crarr, + cross: cross, + Cross: Cross, + Cscr: Cscr, + cscr: cscr, + csub: csub, + csube: csube, + csup: csup, + csupe: csupe, + ctdot: ctdot, + cudarrl: cudarrl, + cudarrr: cudarrr, + cuepr: cuepr, + cuesc: cuesc, + cularr: cularr, + cularrp: cularrp, + cupbrcap: cupbrcap, + cupcap: cupcap, + CupCap: CupCap, + cup: cup, + Cup: Cup, + cupcup: cupcup, + cupdot: cupdot, + cupor: cupor, + cups: cups, + curarr: curarr, + curarrm: curarrm, + curlyeqprec: curlyeqprec, + curlyeqsucc: curlyeqsucc, + curlyvee: curlyvee, + curlywedge: curlywedge, + curren: curren, + curvearrowleft: curvearrowleft, + curvearrowright: curvearrowright, + cuvee: cuvee, + cuwed: cuwed, + cwconint: cwconint, + cwint: cwint, + cylcty: cylcty, + dagger: dagger, + Dagger: Dagger, + daleth: daleth, + darr: darr, + Darr: Darr, + dArr: dArr, + dash: dash, + Dashv: Dashv, + dashv: dashv, + dbkarow: dbkarow, + dblac: dblac, + Dcaron: Dcaron, + dcaron: dcaron, + Dcy: Dcy, + dcy: dcy, + ddagger: ddagger, + ddarr: ddarr, + DD: DD, + dd: dd, + DDotrahd: DDotrahd, + ddotseq: ddotseq, + deg: deg, + Del: Del, + Delta: Delta, + delta: delta, + demptyv: demptyv, + dfisht: dfisht, + Dfr: Dfr, + dfr: dfr, + dHar: dHar, + dharl: dharl, + dharr: dharr, + DiacriticalAcute: DiacriticalAcute, + DiacriticalDot: DiacriticalDot, + DiacriticalDoubleAcute: DiacriticalDoubleAcute, + DiacriticalGrave: DiacriticalGrave, + DiacriticalTilde: DiacriticalTilde, + diam: diam, + diamond: diamond, + Diamond: Diamond, + diamondsuit: diamondsuit, + diams: diams, + die: die, + DifferentialD: DifferentialD, + digamma: digamma, + disin: disin, + div: div, + divide: divide, + divideontimes: divideontimes, + divonx: divonx, + DJcy: DJcy, + djcy: djcy, + dlcorn: dlcorn, + dlcrop: dlcrop, + dollar: dollar, + Dopf: Dopf, + dopf: dopf, + Dot: Dot, + dot: dot, + DotDot: DotDot, + doteq: doteq, + doteqdot: doteqdot, + DotEqual: DotEqual, + dotminus: dotminus, + dotplus: dotplus, + dotsquare: dotsquare, + doublebarwedge: doublebarwedge, + DoubleContourIntegral: DoubleContourIntegral, + DoubleDot: DoubleDot, + DoubleDownArrow: DoubleDownArrow, + DoubleLeftArrow: DoubleLeftArrow, + DoubleLeftRightArrow: DoubleLeftRightArrow, + DoubleLeftTee: DoubleLeftTee, + DoubleLongLeftArrow: DoubleLongLeftArrow, + DoubleLongLeftRightArrow: DoubleLongLeftRightArrow, + DoubleLongRightArrow: DoubleLongRightArrow, + DoubleRightArrow: DoubleRightArrow, + DoubleRightTee: DoubleRightTee, + DoubleUpArrow: DoubleUpArrow, + DoubleUpDownArrow: DoubleUpDownArrow, + DoubleVerticalBar: DoubleVerticalBar, + DownArrowBar: DownArrowBar, + downarrow: downarrow, + DownArrow: DownArrow, + Downarrow: Downarrow, + DownArrowUpArrow: DownArrowUpArrow, + DownBreve: DownBreve, + downdownarrows: downdownarrows, + downharpoonleft: downharpoonleft, + downharpoonright: downharpoonright, + DownLeftRightVector: DownLeftRightVector, + DownLeftTeeVector: DownLeftTeeVector, + DownLeftVectorBar: DownLeftVectorBar, + DownLeftVector: DownLeftVector, + DownRightTeeVector: DownRightTeeVector, + DownRightVectorBar: DownRightVectorBar, + DownRightVector: DownRightVector, + DownTeeArrow: DownTeeArrow, + DownTee: DownTee, + drbkarow: drbkarow, + drcorn: drcorn, + drcrop: drcrop, + Dscr: Dscr, + dscr: dscr, + DScy: DScy, + dscy: dscy, + dsol: dsol, + Dstrok: Dstrok, + dstrok: dstrok, + dtdot: dtdot, + dtri: dtri, + dtrif: dtrif, + duarr: duarr, + duhar: duhar, + dwangle: dwangle, + DZcy: DZcy, + dzcy: dzcy, + dzigrarr: dzigrarr, + Eacute: Eacute, + eacute: eacute, + easter: easter, + Ecaron: Ecaron, + ecaron: ecaron, + Ecirc: Ecirc, + ecirc: ecirc, + ecir: ecir, + ecolon: ecolon, + Ecy: Ecy, + ecy: ecy, + eDDot: eDDot, + Edot: Edot, + edot: edot, + eDot: eDot, + ee: ee, + efDot: efDot, + Efr: Efr, + efr: efr, + eg: eg, + Egrave: Egrave, + egrave: egrave, + egs: egs, + egsdot: egsdot, + el: el, + Element: Element, + elinters: elinters, + ell: ell, + els: els, + elsdot: elsdot, + Emacr: Emacr, + emacr: emacr, + empty: empty, + emptyset: emptyset, + EmptySmallSquare: EmptySmallSquare, + emptyv: emptyv, + EmptyVerySmallSquare: EmptyVerySmallSquare, + emsp13: emsp13, + emsp14: emsp14, + emsp: emsp, + ENG: ENG, + eng: eng, + ensp: ensp, + Eogon: Eogon, + eogon: eogon, + Eopf: Eopf, + eopf: eopf, + epar: epar, + eparsl: eparsl, + eplus: eplus, + epsi: epsi, + Epsilon: Epsilon, + epsilon: epsilon, + epsiv: epsiv, + eqcirc: eqcirc, + eqcolon: eqcolon, + eqsim: eqsim, + eqslantgtr: eqslantgtr, + eqslantless: eqslantless, + Equal: Equal, + equals: equals, + EqualTilde: EqualTilde, + equest: equest, + Equilibrium: Equilibrium, + equiv: equiv, + equivDD: equivDD, + eqvparsl: eqvparsl, + erarr: erarr, + erDot: erDot, + escr: escr, + Escr: Escr, + esdot: esdot, + Esim: Esim, + esim: esim, + Eta: Eta, + eta: eta, + ETH: ETH, + eth: eth, + Euml: Euml, + euml: euml, + euro: euro, + excl: excl, + exist: exist, + Exists: Exists, + expectation: expectation, + exponentiale: exponentiale, + ExponentialE: ExponentialE, + fallingdotseq: fallingdotseq, + Fcy: Fcy, + fcy: fcy, + female: female, + ffilig: ffilig, + fflig: fflig, + ffllig: ffllig, + Ffr: Ffr, + ffr: ffr, + filig: filig, + FilledSmallSquare: FilledSmallSquare, + FilledVerySmallSquare: FilledVerySmallSquare, + fjlig: fjlig, + flat: flat, + fllig: fllig, + fltns: fltns, + fnof: fnof, + Fopf: Fopf, + fopf: fopf, + forall: forall, + ForAll: ForAll, + fork: fork, + forkv: forkv, + Fouriertrf: Fouriertrf, + fpartint: fpartint, + frac12: frac12, + frac13: frac13, + frac14: frac14, + frac15: frac15, + frac16: frac16, + frac18: frac18, + frac23: frac23, + frac25: frac25, + frac34: frac34, + frac35: frac35, + frac38: frac38, + frac45: frac45, + frac56: frac56, + frac58: frac58, + frac78: frac78, + frasl: frasl, + frown: frown, + fscr: fscr, + Fscr: Fscr, + gacute: gacute, + Gamma: Gamma, + gamma: gamma, + Gammad: Gammad, + gammad: gammad, + gap: gap, + Gbreve: Gbreve, + gbreve: gbreve, + Gcedil: Gcedil, + Gcirc: Gcirc, + gcirc: gcirc, + Gcy: Gcy, + gcy: gcy, + Gdot: Gdot, + gdot: gdot, + ge: ge, + gE: gE, + gEl: gEl, + gel: gel, + geq: geq, + geqq: geqq, + geqslant: geqslant, + gescc: gescc, + ges: ges, + gesdot: gesdot, + gesdoto: gesdoto, + gesdotol: gesdotol, + gesl: gesl, + gesles: gesles, + Gfr: Gfr, + gfr: gfr, + gg: gg, + Gg: Gg, + ggg: ggg, + gimel: gimel, + GJcy: GJcy, + gjcy: gjcy, + gla: gla, + gl: gl, + glE: glE, + glj: glj, + gnap: gnap, + gnapprox: gnapprox, + gne: gne, + gnE: gnE, + gneq: gneq, + gneqq: gneqq, + gnsim: gnsim, + Gopf: Gopf, + gopf: gopf, + grave: grave, + GreaterEqual: GreaterEqual, + GreaterEqualLess: GreaterEqualLess, + GreaterFullEqual: GreaterFullEqual, + GreaterGreater: GreaterGreater, + GreaterLess: GreaterLess, + GreaterSlantEqual: GreaterSlantEqual, + GreaterTilde: GreaterTilde, + Gscr: Gscr, + gscr: gscr, + gsim: gsim, + gsime: gsime, + gsiml: gsiml, + gtcc: gtcc, + gtcir: gtcir, + gt: gt$1, + GT: GT, + Gt: Gt, + gtdot: gtdot, + gtlPar: gtlPar, + gtquest: gtquest, + gtrapprox: gtrapprox, + gtrarr: gtrarr, + gtrdot: gtrdot, + gtreqless: gtreqless, + gtreqqless: gtreqqless, + gtrless: gtrless, + gtrsim: gtrsim, + gvertneqq: gvertneqq, + gvnE: gvnE, + Hacek: Hacek, + hairsp: hairsp, + half: half, + hamilt: hamilt, + HARDcy: HARDcy, + hardcy: hardcy, + harrcir: harrcir, + harr: harr, + hArr: hArr, + harrw: harrw, + Hat: Hat, + hbar: hbar, + Hcirc: Hcirc, + hcirc: hcirc, + hearts: hearts, + heartsuit: heartsuit, + hellip: hellip, + hercon: hercon, + hfr: hfr, + Hfr: Hfr, + HilbertSpace: HilbertSpace, + hksearow: hksearow, + hkswarow: hkswarow, + hoarr: hoarr, + homtht: homtht, + hookleftarrow: hookleftarrow, + hookrightarrow: hookrightarrow, + hopf: hopf, + Hopf: Hopf, + horbar: horbar, + HorizontalLine: HorizontalLine, + hscr: hscr, + Hscr: Hscr, + hslash: hslash, + Hstrok: Hstrok, + hstrok: hstrok, + HumpDownHump: HumpDownHump, + HumpEqual: HumpEqual, + hybull: hybull, + hyphen: hyphen, + Iacute: Iacute, + iacute: iacute, + ic: ic, + Icirc: Icirc, + icirc: icirc, + Icy: Icy, + icy: icy, + Idot: Idot, + IEcy: IEcy, + iecy: iecy, + iexcl: iexcl, + iff: iff, + ifr: ifr, + Ifr: Ifr, + Igrave: Igrave, + igrave: igrave, + ii: ii, + iiiint: iiiint, + iiint: iiint, + iinfin: iinfin, + iiota: iiota, + IJlig: IJlig, + ijlig: ijlig, + Imacr: Imacr, + imacr: imacr, + image: image, + ImaginaryI: ImaginaryI, + imagline: imagline, + imagpart: imagpart, + imath: imath, + Im: Im, + imof: imof, + imped: imped, + Implies: Implies, + incare: incare, + "in": "∈", + infin: infin, + infintie: infintie, + inodot: inodot, + intcal: intcal, + int: int, + Int: Int, + integers: integers, + Integral: Integral, + intercal: intercal, + Intersection: Intersection, + intlarhk: intlarhk, + intprod: intprod, + InvisibleComma: InvisibleComma, + InvisibleTimes: InvisibleTimes, + IOcy: IOcy, + iocy: iocy, + Iogon: Iogon, + iogon: iogon, + Iopf: Iopf, + iopf: iopf, + Iota: Iota, + iota: iota, + iprod: iprod, + iquest: iquest, + iscr: iscr, + Iscr: Iscr, + isin: isin, + isindot: isindot, + isinE: isinE, + isins: isins, + isinsv: isinsv, + isinv: isinv, + it: it, + Itilde: Itilde, + itilde: itilde, + Iukcy: Iukcy, + iukcy: iukcy, + Iuml: Iuml, + iuml: iuml, + Jcirc: Jcirc, + jcirc: jcirc, + Jcy: Jcy, + jcy: jcy, + Jfr: Jfr, + jfr: jfr, + jmath: jmath, + Jopf: Jopf, + jopf: jopf, + Jscr: Jscr, + jscr: jscr, + Jsercy: Jsercy, + jsercy: jsercy, + Jukcy: Jukcy, + jukcy: jukcy, + Kappa: Kappa, + kappa: kappa, + kappav: kappav, + Kcedil: Kcedil, + kcedil: kcedil, + Kcy: Kcy, + kcy: kcy, + Kfr: Kfr, + kfr: kfr, + kgreen: kgreen, + KHcy: KHcy, + khcy: khcy, + KJcy: KJcy, + kjcy: kjcy, + Kopf: Kopf, + kopf: kopf, + Kscr: Kscr, + kscr: kscr, + lAarr: lAarr, + Lacute: Lacute, + lacute: lacute, + laemptyv: laemptyv, + lagran: lagran, + Lambda: Lambda, + lambda: lambda, + lang: lang, + Lang: Lang, + langd: langd, + langle: langle, + lap: lap, + Laplacetrf: Laplacetrf, + laquo: laquo, + larrb: larrb, + larrbfs: larrbfs, + larr: larr, + Larr: Larr, + lArr: lArr, + larrfs: larrfs, + larrhk: larrhk, + larrlp: larrlp, + larrpl: larrpl, + larrsim: larrsim, + larrtl: larrtl, + latail: latail, + lAtail: lAtail, + lat: lat, + late: late, + lates: lates, + lbarr: lbarr, + lBarr: lBarr, + lbbrk: lbbrk, + lbrace: lbrace, + lbrack: lbrack, + lbrke: lbrke, + lbrksld: lbrksld, + lbrkslu: lbrkslu, + Lcaron: Lcaron, + lcaron: lcaron, + Lcedil: Lcedil, + lcedil: lcedil, + lceil: lceil, + lcub: lcub, + Lcy: Lcy, + lcy: lcy, + ldca: ldca, + ldquo: ldquo, + ldquor: ldquor, + ldrdhar: ldrdhar, + ldrushar: ldrushar, + ldsh: ldsh, + le: le, + lE: lE, + LeftAngleBracket: LeftAngleBracket, + LeftArrowBar: LeftArrowBar, + leftarrow: leftarrow, + LeftArrow: LeftArrow, + Leftarrow: Leftarrow, + LeftArrowRightArrow: LeftArrowRightArrow, + leftarrowtail: leftarrowtail, + LeftCeiling: LeftCeiling, + LeftDoubleBracket: LeftDoubleBracket, + LeftDownTeeVector: LeftDownTeeVector, + LeftDownVectorBar: LeftDownVectorBar, + LeftDownVector: LeftDownVector, + LeftFloor: LeftFloor, + leftharpoondown: leftharpoondown, + leftharpoonup: leftharpoonup, + leftleftarrows: leftleftarrows, + leftrightarrow: leftrightarrow, + LeftRightArrow: LeftRightArrow, + Leftrightarrow: Leftrightarrow, + leftrightarrows: leftrightarrows, + leftrightharpoons: leftrightharpoons, + leftrightsquigarrow: leftrightsquigarrow, + LeftRightVector: LeftRightVector, + LeftTeeArrow: LeftTeeArrow, + LeftTee: LeftTee, + LeftTeeVector: LeftTeeVector, + leftthreetimes: leftthreetimes, + LeftTriangleBar: LeftTriangleBar, + LeftTriangle: LeftTriangle, + LeftTriangleEqual: LeftTriangleEqual, + LeftUpDownVector: LeftUpDownVector, + LeftUpTeeVector: LeftUpTeeVector, + LeftUpVectorBar: LeftUpVectorBar, + LeftUpVector: LeftUpVector, + LeftVectorBar: LeftVectorBar, + LeftVector: LeftVector, + lEg: lEg, + leg: leg, + leq: leq, + leqq: leqq, + leqslant: leqslant, + lescc: lescc, + les: les, + lesdot: lesdot, + lesdoto: lesdoto, + lesdotor: lesdotor, + lesg: lesg, + lesges: lesges, + lessapprox: lessapprox, + lessdot: lessdot, + lesseqgtr: lesseqgtr, + lesseqqgtr: lesseqqgtr, + LessEqualGreater: LessEqualGreater, + LessFullEqual: LessFullEqual, + LessGreater: LessGreater, + lessgtr: lessgtr, + LessLess: LessLess, + lesssim: lesssim, + LessSlantEqual: LessSlantEqual, + LessTilde: LessTilde, + lfisht: lfisht, + lfloor: lfloor, + Lfr: Lfr, + lfr: lfr, + lg: lg, + lgE: lgE, + lHar: lHar, + lhard: lhard, + lharu: lharu, + lharul: lharul, + lhblk: lhblk, + LJcy: LJcy, + ljcy: ljcy, + llarr: llarr, + ll: ll, + Ll: Ll, + llcorner: llcorner, + Lleftarrow: Lleftarrow, + llhard: llhard, + lltri: lltri, + Lmidot: Lmidot, + lmidot: lmidot, + lmoustache: lmoustache, + lmoust: lmoust, + lnap: lnap, + lnapprox: lnapprox, + lne: lne, + lnE: lnE, + lneq: lneq, + lneqq: lneqq, + lnsim: lnsim, + loang: loang, + loarr: loarr, + lobrk: lobrk, + longleftarrow: longleftarrow, + LongLeftArrow: LongLeftArrow, + Longleftarrow: Longleftarrow, + longleftrightarrow: longleftrightarrow, + LongLeftRightArrow: LongLeftRightArrow, + Longleftrightarrow: Longleftrightarrow, + longmapsto: longmapsto, + longrightarrow: longrightarrow, + LongRightArrow: LongRightArrow, + Longrightarrow: Longrightarrow, + looparrowleft: looparrowleft, + looparrowright: looparrowright, + lopar: lopar, + Lopf: Lopf, + lopf: lopf, + loplus: loplus, + lotimes: lotimes, + lowast: lowast, + lowbar: lowbar, + LowerLeftArrow: LowerLeftArrow, + LowerRightArrow: LowerRightArrow, + loz: loz, + lozenge: lozenge, + lozf: lozf, + lpar: lpar, + lparlt: lparlt, + lrarr: lrarr, + lrcorner: lrcorner, + lrhar: lrhar, + lrhard: lrhard, + lrm: lrm, + lrtri: lrtri, + lsaquo: lsaquo, + lscr: lscr, + Lscr: Lscr, + lsh: lsh, + Lsh: Lsh, + lsim: lsim, + lsime: lsime, + lsimg: lsimg, + lsqb: lsqb, + lsquo: lsquo, + lsquor: lsquor, + Lstrok: Lstrok, + lstrok: lstrok, + ltcc: ltcc, + ltcir: ltcir, + lt: lt$1, + LT: LT, + Lt: Lt, + ltdot: ltdot, + lthree: lthree, + ltimes: ltimes, + ltlarr: ltlarr, + ltquest: ltquest, + ltri: ltri, + ltrie: ltrie, + ltrif: ltrif, + ltrPar: ltrPar, + lurdshar: lurdshar, + luruhar: luruhar, + lvertneqq: lvertneqq, + lvnE: lvnE, + macr: macr, + male: male, + malt: malt, + maltese: maltese, + "Map": "⤅", + map: map, + mapsto: mapsto, + mapstodown: mapstodown, + mapstoleft: mapstoleft, + mapstoup: mapstoup, + marker: marker, + mcomma: mcomma, + Mcy: Mcy, + mcy: mcy, + mdash: mdash, + mDDot: mDDot, + measuredangle: measuredangle, + MediumSpace: MediumSpace, + Mellintrf: Mellintrf, + Mfr: Mfr, + mfr: mfr, + mho: mho, + micro: micro, + midast: midast, + midcir: midcir, + mid: mid, + middot: middot, + minusb: minusb, + minus: minus, + minusd: minusd, + minusdu: minusdu, + MinusPlus: MinusPlus, + mlcp: mlcp, + mldr: mldr, + mnplus: mnplus, + models: models, + Mopf: Mopf, + mopf: mopf, + mp: mp, + mscr: mscr, + Mscr: Mscr, + mstpos: mstpos, + Mu: Mu, + mu: mu, + multimap: multimap, + mumap: mumap, + nabla: nabla, + Nacute: Nacute, + nacute: nacute, + nang: nang, + nap: nap, + napE: napE, + napid: napid, + napos: napos, + napprox: napprox, + natural: natural, + naturals: naturals, + natur: natur, + nbsp: nbsp, + nbump: nbump, + nbumpe: nbumpe, + ncap: ncap, + Ncaron: Ncaron, + ncaron: ncaron, + Ncedil: Ncedil, + ncedil: ncedil, + ncong: ncong, + ncongdot: ncongdot, + ncup: ncup, + Ncy: Ncy, + ncy: ncy, + ndash: ndash, + nearhk: nearhk, + nearr: nearr, + neArr: neArr, + nearrow: nearrow, + ne: ne, + nedot: nedot, + NegativeMediumSpace: NegativeMediumSpace, + NegativeThickSpace: NegativeThickSpace, + NegativeThinSpace: NegativeThinSpace, + NegativeVeryThinSpace: NegativeVeryThinSpace, + nequiv: nequiv, + nesear: nesear, + nesim: nesim, + NestedGreaterGreater: NestedGreaterGreater, + NestedLessLess: NestedLessLess, + NewLine: NewLine, + nexist: nexist, + nexists: nexists, + Nfr: Nfr, + nfr: nfr, + ngE: ngE, + nge: nge, + ngeq: ngeq, + ngeqq: ngeqq, + ngeqslant: ngeqslant, + nges: nges, + nGg: nGg, + ngsim: ngsim, + nGt: nGt, + ngt: ngt, + ngtr: ngtr, + nGtv: nGtv, + nharr: nharr, + nhArr: nhArr, + nhpar: nhpar, + ni: ni, + nis: nis, + nisd: nisd, + niv: niv, + NJcy: NJcy, + njcy: njcy, + nlarr: nlarr, + nlArr: nlArr, + nldr: nldr, + nlE: nlE, + nle: nle, + nleftarrow: nleftarrow, + nLeftarrow: nLeftarrow, + nleftrightarrow: nleftrightarrow, + nLeftrightarrow: nLeftrightarrow, + nleq: nleq, + nleqq: nleqq, + nleqslant: nleqslant, + nles: nles, + nless: nless, + nLl: nLl, + nlsim: nlsim, + nLt: nLt, + nlt: nlt, + nltri: nltri, + nltrie: nltrie, + nLtv: nLtv, + nmid: nmid, + NoBreak: NoBreak, + NonBreakingSpace: NonBreakingSpace, + nopf: nopf, + Nopf: Nopf, + Not: Not, + not: not, + NotCongruent: NotCongruent, + NotCupCap: NotCupCap, + NotDoubleVerticalBar: NotDoubleVerticalBar, + NotElement: NotElement, + NotEqual: NotEqual, + NotEqualTilde: NotEqualTilde, + NotExists: NotExists, + NotGreater: NotGreater, + NotGreaterEqual: NotGreaterEqual, + NotGreaterFullEqual: NotGreaterFullEqual, + NotGreaterGreater: NotGreaterGreater, + NotGreaterLess: NotGreaterLess, + NotGreaterSlantEqual: NotGreaterSlantEqual, + NotGreaterTilde: NotGreaterTilde, + NotHumpDownHump: NotHumpDownHump, + NotHumpEqual: NotHumpEqual, + notin: notin, + notindot: notindot, + notinE: notinE, + notinva: notinva, + notinvb: notinvb, + notinvc: notinvc, + NotLeftTriangleBar: NotLeftTriangleBar, + NotLeftTriangle: NotLeftTriangle, + NotLeftTriangleEqual: NotLeftTriangleEqual, + NotLess: NotLess, + NotLessEqual: NotLessEqual, + NotLessGreater: NotLessGreater, + NotLessLess: NotLessLess, + NotLessSlantEqual: NotLessSlantEqual, + NotLessTilde: NotLessTilde, + NotNestedGreaterGreater: NotNestedGreaterGreater, + NotNestedLessLess: NotNestedLessLess, + notni: notni, + notniva: notniva, + notnivb: notnivb, + notnivc: notnivc, + NotPrecedes: NotPrecedes, + NotPrecedesEqual: NotPrecedesEqual, + NotPrecedesSlantEqual: NotPrecedesSlantEqual, + NotReverseElement: NotReverseElement, + NotRightTriangleBar: NotRightTriangleBar, + NotRightTriangle: NotRightTriangle, + NotRightTriangleEqual: NotRightTriangleEqual, + NotSquareSubset: NotSquareSubset, + NotSquareSubsetEqual: NotSquareSubsetEqual, + NotSquareSuperset: NotSquareSuperset, + NotSquareSupersetEqual: NotSquareSupersetEqual, + NotSubset: NotSubset, + NotSubsetEqual: NotSubsetEqual, + NotSucceeds: NotSucceeds, + NotSucceedsEqual: NotSucceedsEqual, + NotSucceedsSlantEqual: NotSucceedsSlantEqual, + NotSucceedsTilde: NotSucceedsTilde, + NotSuperset: NotSuperset, + NotSupersetEqual: NotSupersetEqual, + NotTilde: NotTilde, + NotTildeEqual: NotTildeEqual, + NotTildeFullEqual: NotTildeFullEqual, + NotTildeTilde: NotTildeTilde, + NotVerticalBar: NotVerticalBar, + nparallel: nparallel, + npar: npar, + nparsl: nparsl, + npart: npart, + npolint: npolint, + npr: npr, + nprcue: nprcue, + nprec: nprec, + npreceq: npreceq, + npre: npre, + nrarrc: nrarrc, + nrarr: nrarr, + nrArr: nrArr, + nrarrw: nrarrw, + nrightarrow: nrightarrow, + nRightarrow: nRightarrow, + nrtri: nrtri, + nrtrie: nrtrie, + nsc: nsc, + nsccue: nsccue, + nsce: nsce, + Nscr: Nscr, + nscr: nscr, + nshortmid: nshortmid, + nshortparallel: nshortparallel, + nsim: nsim, + nsime: nsime, + nsimeq: nsimeq, + nsmid: nsmid, + nspar: nspar, + nsqsube: nsqsube, + nsqsupe: nsqsupe, + nsub: nsub, + nsubE: nsubE, + nsube: nsube, + nsubset: nsubset, + nsubseteq: nsubseteq, + nsubseteqq: nsubseteqq, + nsucc: nsucc, + nsucceq: nsucceq, + nsup: nsup, + nsupE: nsupE, + nsupe: nsupe, + nsupset: nsupset, + nsupseteq: nsupseteq, + nsupseteqq: nsupseteqq, + ntgl: ntgl, + Ntilde: Ntilde, + ntilde: ntilde, + ntlg: ntlg, + ntriangleleft: ntriangleleft, + ntrianglelefteq: ntrianglelefteq, + ntriangleright: ntriangleright, + ntrianglerighteq: ntrianglerighteq, + Nu: Nu, + nu: nu, + num: num, + numero: numero, + numsp: numsp, + nvap: nvap, + nvdash: nvdash, + nvDash: nvDash, + nVdash: nVdash, + nVDash: nVDash, + nvge: nvge, + nvgt: nvgt, + nvHarr: nvHarr, + nvinfin: nvinfin, + nvlArr: nvlArr, + nvle: nvle, + nvlt: nvlt, + nvltrie: nvltrie, + nvrArr: nvrArr, + nvrtrie: nvrtrie, + nvsim: nvsim, + nwarhk: nwarhk, + nwarr: nwarr, + nwArr: nwArr, + nwarrow: nwarrow, + nwnear: nwnear, + Oacute: Oacute, + oacute: oacute, + oast: oast, + Ocirc: Ocirc, + ocirc: ocirc, + ocir: ocir, + Ocy: Ocy, + ocy: ocy, + odash: odash, + Odblac: Odblac, + odblac: odblac, + odiv: odiv, + odot: odot, + odsold: odsold, + OElig: OElig, + oelig: oelig, + ofcir: ofcir, + Ofr: Ofr, + ofr: ofr, + ogon: ogon, + Ograve: Ograve, + ograve: ograve, + ogt: ogt, + ohbar: ohbar, + ohm: ohm, + oint: oint, + olarr: olarr, + olcir: olcir, + olcross: olcross, + oline: oline, + olt: olt, + Omacr: Omacr, + omacr: omacr, + Omega: Omega, + omega: omega, + Omicron: Omicron, + omicron: omicron, + omid: omid, + ominus: ominus, + Oopf: Oopf, + oopf: oopf, + opar: opar, + OpenCurlyDoubleQuote: OpenCurlyDoubleQuote, + OpenCurlyQuote: OpenCurlyQuote, + operp: operp, + oplus: oplus, + orarr: orarr, + Or: Or, + or: or, + ord: ord, + order: order, + orderof: orderof, + ordf: ordf, + ordm: ordm, + origof: origof, + oror: oror, + orslope: orslope, + orv: orv, + oS: oS, + Oscr: Oscr, + oscr: oscr, + Oslash: Oslash, + oslash: oslash, + osol: osol, + Otilde: Otilde, + otilde: otilde, + otimesas: otimesas, + Otimes: Otimes, + otimes: otimes, + Ouml: Ouml, + ouml: ouml, + ovbar: ovbar, + OverBar: OverBar, + OverBrace: OverBrace, + OverBracket: OverBracket, + OverParenthesis: OverParenthesis, + para: para, + parallel: parallel, + par: par, + parsim: parsim, + parsl: parsl, + part: part, + PartialD: PartialD, + Pcy: Pcy, + pcy: pcy, + percnt: percnt, + period: period, + permil: permil, + perp: perp, + pertenk: pertenk, + Pfr: Pfr, + pfr: pfr, + Phi: Phi, + phi: phi, + phiv: phiv, + phmmat: phmmat, + phone: phone, + Pi: Pi, + pi: pi, + pitchfork: pitchfork, + piv: piv, + planck: planck, + planckh: planckh, + plankv: plankv, + plusacir: plusacir, + plusb: plusb, + pluscir: pluscir, + plus: plus, + plusdo: plusdo, + plusdu: plusdu, + pluse: pluse, + PlusMinus: PlusMinus, + plusmn: plusmn, + plussim: plussim, + plustwo: plustwo, + pm: pm, + Poincareplane: Poincareplane, + pointint: pointint, + popf: popf, + Popf: Popf, + pound: pound, + prap: prap, + Pr: Pr, + pr: pr, + prcue: prcue, + precapprox: precapprox, + prec: prec, + preccurlyeq: preccurlyeq, + Precedes: Precedes, + PrecedesEqual: PrecedesEqual, + PrecedesSlantEqual: PrecedesSlantEqual, + PrecedesTilde: PrecedesTilde, + preceq: preceq, + precnapprox: precnapprox, + precneqq: precneqq, + precnsim: precnsim, + pre: pre, + prE: prE, + precsim: precsim, + prime: prime, + Prime: Prime, + primes: primes, + prnap: prnap, + prnE: prnE, + prnsim: prnsim, + prod: prod, + Product: Product, + profalar: profalar, + profline: profline, + profsurf: profsurf, + prop: prop, + Proportional: Proportional, + Proportion: Proportion, + propto: propto, + prsim: prsim, + prurel: prurel, + Pscr: Pscr, + pscr: pscr, + Psi: Psi, + psi: psi, + puncsp: puncsp, + Qfr: Qfr, + qfr: qfr, + qint: qint, + qopf: qopf, + Qopf: Qopf, + qprime: qprime, + Qscr: Qscr, + qscr: qscr, + quaternions: quaternions, + quatint: quatint, + quest: quest, + questeq: questeq, + quot: quot$1, + QUOT: QUOT, + rAarr: rAarr, + race: race, + Racute: Racute, + racute: racute, + radic: radic, + raemptyv: raemptyv, + rang: rang, + Rang: Rang, + rangd: rangd, + range: range, + rangle: rangle, + raquo: raquo, + rarrap: rarrap, + rarrb: rarrb, + rarrbfs: rarrbfs, + rarrc: rarrc, + rarr: rarr, + Rarr: Rarr, + rArr: rArr, + rarrfs: rarrfs, + rarrhk: rarrhk, + rarrlp: rarrlp, + rarrpl: rarrpl, + rarrsim: rarrsim, + Rarrtl: Rarrtl, + rarrtl: rarrtl, + rarrw: rarrw, + ratail: ratail, + rAtail: rAtail, + ratio: ratio, + rationals: rationals, + rbarr: rbarr, + rBarr: rBarr, + RBarr: RBarr, + rbbrk: rbbrk, + rbrace: rbrace, + rbrack: rbrack, + rbrke: rbrke, + rbrksld: rbrksld, + rbrkslu: rbrkslu, + Rcaron: Rcaron, + rcaron: rcaron, + Rcedil: Rcedil, + rcedil: rcedil, + rceil: rceil, + rcub: rcub, + Rcy: Rcy, + rcy: rcy, + rdca: rdca, + rdldhar: rdldhar, + rdquo: rdquo, + rdquor: rdquor, + rdsh: rdsh, + real: real, + realine: realine, + realpart: realpart, + reals: reals, + Re: Re, + rect: rect, + reg: reg, + REG: REG, + ReverseElement: ReverseElement, + ReverseEquilibrium: ReverseEquilibrium, + ReverseUpEquilibrium: ReverseUpEquilibrium, + rfisht: rfisht, + rfloor: rfloor, + rfr: rfr, + Rfr: Rfr, + rHar: rHar, + rhard: rhard, + rharu: rharu, + rharul: rharul, + Rho: Rho, + rho: rho, + rhov: rhov, + RightAngleBracket: RightAngleBracket, + RightArrowBar: RightArrowBar, + rightarrow: rightarrow, + RightArrow: RightArrow, + Rightarrow: Rightarrow, + RightArrowLeftArrow: RightArrowLeftArrow, + rightarrowtail: rightarrowtail, + RightCeiling: RightCeiling, + RightDoubleBracket: RightDoubleBracket, + RightDownTeeVector: RightDownTeeVector, + RightDownVectorBar: RightDownVectorBar, + RightDownVector: RightDownVector, + RightFloor: RightFloor, + rightharpoondown: rightharpoondown, + rightharpoonup: rightharpoonup, + rightleftarrows: rightleftarrows, + rightleftharpoons: rightleftharpoons, + rightrightarrows: rightrightarrows, + rightsquigarrow: rightsquigarrow, + RightTeeArrow: RightTeeArrow, + RightTee: RightTee, + RightTeeVector: RightTeeVector, + rightthreetimes: rightthreetimes, + RightTriangleBar: RightTriangleBar, + RightTriangle: RightTriangle, + RightTriangleEqual: RightTriangleEqual, + RightUpDownVector: RightUpDownVector, + RightUpTeeVector: RightUpTeeVector, + RightUpVectorBar: RightUpVectorBar, + RightUpVector: RightUpVector, + RightVectorBar: RightVectorBar, + RightVector: RightVector, + ring: ring, + risingdotseq: risingdotseq, + rlarr: rlarr, + rlhar: rlhar, + rlm: rlm, + rmoustache: rmoustache, + rmoust: rmoust, + rnmid: rnmid, + roang: roang, + roarr: roarr, + robrk: robrk, + ropar: ropar, + ropf: ropf, + Ropf: Ropf, + roplus: roplus, + rotimes: rotimes, + RoundImplies: RoundImplies, + rpar: rpar, + rpargt: rpargt, + rppolint: rppolint, + rrarr: rrarr, + Rrightarrow: Rrightarrow, + rsaquo: rsaquo, + rscr: rscr, + Rscr: Rscr, + rsh: rsh, + Rsh: Rsh, + rsqb: rsqb, + rsquo: rsquo, + rsquor: rsquor, + rthree: rthree, + rtimes: rtimes, + rtri: rtri, + rtrie: rtrie, + rtrif: rtrif, + rtriltri: rtriltri, + RuleDelayed: RuleDelayed, + ruluhar: ruluhar, + rx: rx, + Sacute: Sacute, + sacute: sacute, + sbquo: sbquo, + scap: scap, + Scaron: Scaron, + scaron: scaron, + Sc: Sc, + sc: sc, + sccue: sccue, + sce: sce, + scE: scE, + Scedil: Scedil, + scedil: scedil, + Scirc: Scirc, + scirc: scirc, + scnap: scnap, + scnE: scnE, + scnsim: scnsim, + scpolint: scpolint, + scsim: scsim, + Scy: Scy, + scy: scy, + sdotb: sdotb, + sdot: sdot, + sdote: sdote, + searhk: searhk, + searr: searr, + seArr: seArr, + searrow: searrow, + sect: sect, + semi: semi, + seswar: seswar, + setminus: setminus, + setmn: setmn, + sext: sext, + Sfr: Sfr, + sfr: sfr, + sfrown: sfrown, + sharp: sharp, + SHCHcy: SHCHcy, + shchcy: shchcy, + SHcy: SHcy, + shcy: shcy, + ShortDownArrow: ShortDownArrow, + ShortLeftArrow: ShortLeftArrow, + shortmid: shortmid, + shortparallel: shortparallel, + ShortRightArrow: ShortRightArrow, + ShortUpArrow: ShortUpArrow, + shy: shy, + Sigma: Sigma, + sigma: sigma, + sigmaf: sigmaf, + sigmav: sigmav, + sim: sim, + simdot: simdot, + sime: sime, + simeq: simeq, + simg: simg, + simgE: simgE, + siml: siml, + simlE: simlE, + simne: simne, + simplus: simplus, + simrarr: simrarr, + slarr: slarr, + SmallCircle: SmallCircle, + smallsetminus: smallsetminus, + smashp: smashp, + smeparsl: smeparsl, + smid: smid, + smile: smile, + smt: smt, + smte: smte, + smtes: smtes, + SOFTcy: SOFTcy, + softcy: softcy, + solbar: solbar, + solb: solb, + sol: sol, + Sopf: Sopf, + sopf: sopf, + spades: spades, + spadesuit: spadesuit, + spar: spar, + sqcap: sqcap, + sqcaps: sqcaps, + sqcup: sqcup, + sqcups: sqcups, + Sqrt: Sqrt, + sqsub: sqsub, + sqsube: sqsube, + sqsubset: sqsubset, + sqsubseteq: sqsubseteq, + sqsup: sqsup, + sqsupe: sqsupe, + sqsupset: sqsupset, + sqsupseteq: sqsupseteq, + square: square, + Square: Square, + SquareIntersection: SquareIntersection, + SquareSubset: SquareSubset, + SquareSubsetEqual: SquareSubsetEqual, + SquareSuperset: SquareSuperset, + SquareSupersetEqual: SquareSupersetEqual, + SquareUnion: SquareUnion, + squarf: squarf, + squ: squ, + squf: squf, + srarr: srarr, + Sscr: Sscr, + sscr: sscr, + ssetmn: ssetmn, + ssmile: ssmile, + sstarf: sstarf, + Star: Star, + star: star, + starf: starf, + straightepsilon: straightepsilon, + straightphi: straightphi, + strns: strns, + sub: sub, + Sub: Sub, + subdot: subdot, + subE: subE, + sube: sube, + subedot: subedot, + submult: submult, + subnE: subnE, + subne: subne, + subplus: subplus, + subrarr: subrarr, + subset: subset, + Subset: Subset, + subseteq: subseteq, + subseteqq: subseteqq, + SubsetEqual: SubsetEqual, + subsetneq: subsetneq, + subsetneqq: subsetneqq, + subsim: subsim, + subsub: subsub, + subsup: subsup, + succapprox: succapprox, + succ: succ, + succcurlyeq: succcurlyeq, + Succeeds: Succeeds, + SucceedsEqual: SucceedsEqual, + SucceedsSlantEqual: SucceedsSlantEqual, + SucceedsTilde: SucceedsTilde, + succeq: succeq, + succnapprox: succnapprox, + succneqq: succneqq, + succnsim: succnsim, + succsim: succsim, + SuchThat: SuchThat, + sum: sum, + Sum: Sum, + sung: sung, + sup1: sup1, + sup2: sup2, + sup3: sup3, + sup: sup, + Sup: Sup, + supdot: supdot, + supdsub: supdsub, + supE: supE, + supe: supe, + supedot: supedot, + Superset: Superset, + SupersetEqual: SupersetEqual, + suphsol: suphsol, + suphsub: suphsub, + suplarr: suplarr, + supmult: supmult, + supnE: supnE, + supne: supne, + supplus: supplus, + supset: supset, + Supset: Supset, + supseteq: supseteq, + supseteqq: supseteqq, + supsetneq: supsetneq, + supsetneqq: supsetneqq, + supsim: supsim, + supsub: supsub, + supsup: supsup, + swarhk: swarhk, + swarr: swarr, + swArr: swArr, + swarrow: swarrow, + swnwar: swnwar, + szlig: szlig, + Tab: Tab, + target: target, + Tau: Tau, + tau: tau, + tbrk: tbrk, + Tcaron: Tcaron, + tcaron: tcaron, + Tcedil: Tcedil, + tcedil: tcedil, + Tcy: Tcy, + tcy: tcy, + tdot: tdot, + telrec: telrec, + Tfr: Tfr, + tfr: tfr, + there4: there4, + therefore: therefore, + Therefore: Therefore, + Theta: Theta, + theta: theta, + thetasym: thetasym, + thetav: thetav, + thickapprox: thickapprox, + thicksim: thicksim, + ThickSpace: ThickSpace, + ThinSpace: ThinSpace, + thinsp: thinsp, + thkap: thkap, + thksim: thksim, + THORN: THORN, + thorn: thorn, + tilde: tilde, + Tilde: Tilde, + TildeEqual: TildeEqual, + TildeFullEqual: TildeFullEqual, + TildeTilde: TildeTilde, + timesbar: timesbar, + timesb: timesb, + times: times, + timesd: timesd, + tint: tint, + toea: toea, + topbot: topbot, + topcir: topcir, + top: top, + Topf: Topf, + topf: topf, + topfork: topfork, + tosa: tosa, + tprime: tprime, + trade: trade, + TRADE: TRADE, + triangle: triangle, + triangledown: triangledown, + triangleleft: triangleleft, + trianglelefteq: trianglelefteq, + triangleq: triangleq, + triangleright: triangleright, + trianglerighteq: trianglerighteq, + tridot: tridot, + trie: trie, + triminus: triminus, + TripleDot: TripleDot, + triplus: triplus, + trisb: trisb, + tritime: tritime, + trpezium: trpezium, + Tscr: Tscr, + tscr: tscr, + TScy: TScy, + tscy: tscy, + TSHcy: TSHcy, + tshcy: tshcy, + Tstrok: Tstrok, + tstrok: tstrok, + twixt: twixt, + twoheadleftarrow: twoheadleftarrow, + twoheadrightarrow: twoheadrightarrow, + Uacute: Uacute, + uacute: uacute, + uarr: uarr, + Uarr: Uarr, + uArr: uArr, + Uarrocir: Uarrocir, + Ubrcy: Ubrcy, + ubrcy: ubrcy, + Ubreve: Ubreve, + ubreve: ubreve, + Ucirc: Ucirc, + ucirc: ucirc, + Ucy: Ucy, + ucy: ucy, + udarr: udarr, + Udblac: Udblac, + udblac: udblac, + udhar: udhar, + ufisht: ufisht, + Ufr: Ufr, + ufr: ufr, + Ugrave: Ugrave, + ugrave: ugrave, + uHar: uHar, + uharl: uharl, + uharr: uharr, + uhblk: uhblk, + ulcorn: ulcorn, + ulcorner: ulcorner, + ulcrop: ulcrop, + ultri: ultri, + Umacr: Umacr, + umacr: umacr, + uml: uml, + UnderBar: UnderBar, + UnderBrace: UnderBrace, + UnderBracket: UnderBracket, + UnderParenthesis: UnderParenthesis, + Union: Union, + UnionPlus: UnionPlus, + Uogon: Uogon, + uogon: uogon, + Uopf: Uopf, + uopf: uopf, + UpArrowBar: UpArrowBar, + uparrow: uparrow, + UpArrow: UpArrow, + Uparrow: Uparrow, + UpArrowDownArrow: UpArrowDownArrow, + updownarrow: updownarrow, + UpDownArrow: UpDownArrow, + Updownarrow: Updownarrow, + UpEquilibrium: UpEquilibrium, + upharpoonleft: upharpoonleft, + upharpoonright: upharpoonright, + uplus: uplus, + UpperLeftArrow: UpperLeftArrow, + UpperRightArrow: UpperRightArrow, + upsi: upsi, + Upsi: Upsi, + upsih: upsih, + Upsilon: Upsilon, + upsilon: upsilon, + UpTeeArrow: UpTeeArrow, + UpTee: UpTee, + upuparrows: upuparrows, + urcorn: urcorn, + urcorner: urcorner, + urcrop: urcrop, + Uring: Uring, + uring: uring, + urtri: urtri, + Uscr: Uscr, + uscr: uscr, + utdot: utdot, + Utilde: Utilde, + utilde: utilde, + utri: utri, + utrif: utrif, + uuarr: uuarr, + Uuml: Uuml, + uuml: uuml, + uwangle: uwangle, + vangrt: vangrt, + varepsilon: varepsilon, + varkappa: varkappa, + varnothing: varnothing, + varphi: varphi, + varpi: varpi, + varpropto: varpropto, + varr: varr, + vArr: vArr, + varrho: varrho, + varsigma: varsigma, + varsubsetneq: varsubsetneq, + varsubsetneqq: varsubsetneqq, + varsupsetneq: varsupsetneq, + varsupsetneqq: varsupsetneqq, + vartheta: vartheta, + vartriangleleft: vartriangleleft, + vartriangleright: vartriangleright, + vBar: vBar, + Vbar: Vbar, + vBarv: vBarv, + Vcy: Vcy, + vcy: vcy, + vdash: vdash, + vDash: vDash, + Vdash: Vdash, + VDash: VDash, + Vdashl: Vdashl, + veebar: veebar, + vee: vee, + Vee: Vee, + veeeq: veeeq, + vellip: vellip, + verbar: verbar, + Verbar: Verbar, + vert: vert, + Vert: Vert, + VerticalBar: VerticalBar, + VerticalLine: VerticalLine, + VerticalSeparator: VerticalSeparator, + VerticalTilde: VerticalTilde, + VeryThinSpace: VeryThinSpace, + Vfr: Vfr, + vfr: vfr, + vltri: vltri, + vnsub: vnsub, + vnsup: vnsup, + Vopf: Vopf, + vopf: vopf, + vprop: vprop, + vrtri: vrtri, + Vscr: Vscr, + vscr: vscr, + vsubnE: vsubnE, + vsubne: vsubne, + vsupnE: vsupnE, + vsupne: vsupne, + Vvdash: Vvdash, + vzigzag: vzigzag, + Wcirc: Wcirc, + wcirc: wcirc, + wedbar: wedbar, + wedge: wedge, + Wedge: Wedge, + wedgeq: wedgeq, + weierp: weierp, + Wfr: Wfr, + wfr: wfr, + Wopf: Wopf, + wopf: wopf, + wp: wp, + wr: wr, + wreath: wreath, + Wscr: Wscr, + wscr: wscr, + xcap: xcap, + xcirc: xcirc, + xcup: xcup, + xdtri: xdtri, + Xfr: Xfr, + xfr: xfr, + xharr: xharr, + xhArr: xhArr, + Xi: Xi, + xi: xi, + xlarr: xlarr, + xlArr: xlArr, + xmap: xmap, + xnis: xnis, + xodot: xodot, + Xopf: Xopf, + xopf: xopf, + xoplus: xoplus, + xotime: xotime, + xrarr: xrarr, + xrArr: xrArr, + Xscr: Xscr, + xscr: xscr, + xsqcup: xsqcup, + xuplus: xuplus, + xutri: xutri, + xvee: xvee, + xwedge: xwedge, + Yacute: Yacute, + yacute: yacute, + YAcy: YAcy, + yacy: yacy, + Ycirc: Ycirc, + ycirc: ycirc, + Ycy: Ycy, + ycy: ycy, + yen: yen, + Yfr: Yfr, + yfr: yfr, + YIcy: YIcy, + yicy: yicy, + Yopf: Yopf, + yopf: yopf, + Yscr: Yscr, + yscr: yscr, + YUcy: YUcy, + yucy: yucy, + yuml: yuml, + Yuml: Yuml, + Zacute: Zacute, + zacute: zacute, + Zcaron: Zcaron, + zcaron: zcaron, + Zcy: Zcy, + zcy: zcy, + Zdot: Zdot, + zdot: zdot, + zeetrf: zeetrf, + ZeroWidthSpace: ZeroWidthSpace, + Zeta: Zeta, + zeta: zeta, + zfr: zfr, + Zfr: Zfr, + ZHcy: ZHcy, + zhcy: zhcy, + zigrarr: zigrarr, + zopf: zopf, + Zopf: Zopf, + Zscr: Zscr, + zscr: zscr, + zwj: zwj, + zwnj: zwnj + }; + + var entities$1 = /*#__PURE__*/Object.freeze({ + __proto__: null, + Aacute: Aacute, + aacute: aacute, + Abreve: Abreve, + abreve: abreve, + ac: ac, + acd: acd, + acE: acE, + Acirc: Acirc, + acirc: acirc, + acute: acute, + Acy: Acy, + acy: acy, + AElig: AElig, + aelig: aelig, + af: af, + Afr: Afr, + afr: afr, + Agrave: Agrave, + agrave: agrave, + alefsym: alefsym, + aleph: aleph, + Alpha: Alpha, + alpha: alpha, + Amacr: Amacr, + amacr: amacr, + amalg: amalg, + amp: amp$1, + AMP: AMP, + andand: andand, + And: And, + and: and, + andd: andd, + andslope: andslope, + andv: andv, + ang: ang, + ange: ange, + angle: angle, + angmsdaa: angmsdaa, + angmsdab: angmsdab, + angmsdac: angmsdac, + angmsdad: angmsdad, + angmsdae: angmsdae, + angmsdaf: angmsdaf, + angmsdag: angmsdag, + angmsdah: angmsdah, + angmsd: angmsd, + angrt: angrt, + angrtvb: angrtvb, + angrtvbd: angrtvbd, + angsph: angsph, + angst: angst, + angzarr: angzarr, + Aogon: Aogon, + aogon: aogon, + Aopf: Aopf, + aopf: aopf, + apacir: apacir, + ap: ap, + apE: apE, + ape: ape, + apid: apid, + apos: apos$1, + ApplyFunction: ApplyFunction, + approx: approx, + approxeq: approxeq, + Aring: Aring, + aring: aring, + Ascr: Ascr, + ascr: ascr, + Assign: Assign, + ast: ast, + asymp: asymp, + asympeq: asympeq, + Atilde: Atilde, + atilde: atilde, + Auml: Auml, + auml: auml, + awconint: awconint, + awint: awint, + backcong: backcong, + backepsilon: backepsilon, + backprime: backprime, + backsim: backsim, + backsimeq: backsimeq, + Backslash: Backslash, + Barv: Barv, + barvee: barvee, + barwed: barwed, + Barwed: Barwed, + barwedge: barwedge, + bbrk: bbrk, + bbrktbrk: bbrktbrk, + bcong: bcong, + Bcy: Bcy, + bcy: bcy, + bdquo: bdquo, + becaus: becaus, + because: because, + Because: Because, + bemptyv: bemptyv, + bepsi: bepsi, + bernou: bernou, + Bernoullis: Bernoullis, + Beta: Beta, + beta: beta, + beth: beth, + between: between, + Bfr: Bfr, + bfr: bfr, + bigcap: bigcap, + bigcirc: bigcirc, + bigcup: bigcup, + bigodot: bigodot, + bigoplus: bigoplus, + bigotimes: bigotimes, + bigsqcup: bigsqcup, + bigstar: bigstar, + bigtriangledown: bigtriangledown, + bigtriangleup: bigtriangleup, + biguplus: biguplus, + bigvee: bigvee, + bigwedge: bigwedge, + bkarow: bkarow, + blacklozenge: blacklozenge, + blacksquare: blacksquare, + blacktriangle: blacktriangle, + blacktriangledown: blacktriangledown, + blacktriangleleft: blacktriangleleft, + blacktriangleright: blacktriangleright, + blank: blank, + blk12: blk12, + blk14: blk14, + blk34: blk34, + block: block, + bne: bne, + bnequiv: bnequiv, + bNot: bNot, + bnot: bnot, + Bopf: Bopf, + bopf: bopf, + bot: bot, + bottom: bottom, + bowtie: bowtie, + boxbox: boxbox, + boxdl: boxdl, + boxdL: boxdL, + boxDl: boxDl, + boxDL: boxDL, + boxdr: boxdr, + boxdR: boxdR, + boxDr: boxDr, + boxDR: boxDR, + boxh: boxh, + boxH: boxH, + boxhd: boxhd, + boxHd: boxHd, + boxhD: boxhD, + boxHD: boxHD, + boxhu: boxhu, + boxHu: boxHu, + boxhU: boxhU, + boxHU: boxHU, + boxminus: boxminus, + boxplus: boxplus, + boxtimes: boxtimes, + boxul: boxul, + boxuL: boxuL, + boxUl: boxUl, + boxUL: boxUL, + boxur: boxur, + boxuR: boxuR, + boxUr: boxUr, + boxUR: boxUR, + boxv: boxv, + boxV: boxV, + boxvh: boxvh, + boxvH: boxvH, + boxVh: boxVh, + boxVH: boxVH, + boxvl: boxvl, + boxvL: boxvL, + boxVl: boxVl, + boxVL: boxVL, + boxvr: boxvr, + boxvR: boxvR, + boxVr: boxVr, + boxVR: boxVR, + bprime: bprime, + breve: breve, + Breve: Breve, + brvbar: brvbar, + bscr: bscr, + Bscr: Bscr, + bsemi: bsemi, + bsim: bsim, + bsime: bsime, + bsolb: bsolb, + bsol: bsol, + bsolhsub: bsolhsub, + bull: bull, + bullet: bullet, + bump: bump, + bumpE: bumpE, + bumpe: bumpe, + Bumpeq: Bumpeq, + bumpeq: bumpeq, + Cacute: Cacute, + cacute: cacute, + capand: capand, + capbrcup: capbrcup, + capcap: capcap, + cap: cap, + Cap: Cap, + capcup: capcup, + capdot: capdot, + CapitalDifferentialD: CapitalDifferentialD, + caps: caps, + caret: caret, + caron: caron, + Cayleys: Cayleys, + ccaps: ccaps, + Ccaron: Ccaron, + ccaron: ccaron, + Ccedil: Ccedil, + ccedil: ccedil, + Ccirc: Ccirc, + ccirc: ccirc, + Cconint: Cconint, + ccups: ccups, + ccupssm: ccupssm, + Cdot: Cdot, + cdot: cdot, + cedil: cedil, + Cedilla: Cedilla, + cemptyv: cemptyv, + cent: cent, + centerdot: centerdot, + CenterDot: CenterDot, + cfr: cfr, + Cfr: Cfr, + CHcy: CHcy, + chcy: chcy, + check: check, + checkmark: checkmark, + Chi: Chi, + chi: chi, + circ: circ, + circeq: circeq, + circlearrowleft: circlearrowleft, + circlearrowright: circlearrowright, + circledast: circledast, + circledcirc: circledcirc, + circleddash: circleddash, + CircleDot: CircleDot, + circledR: circledR, + circledS: circledS, + CircleMinus: CircleMinus, + CirclePlus: CirclePlus, + CircleTimes: CircleTimes, + cir: cir, + cirE: cirE, + cire: cire, + cirfnint: cirfnint, + cirmid: cirmid, + cirscir: cirscir, + ClockwiseContourIntegral: ClockwiseContourIntegral, + CloseCurlyDoubleQuote: CloseCurlyDoubleQuote, + CloseCurlyQuote: CloseCurlyQuote, + clubs: clubs, + clubsuit: clubsuit, + colon: colon, + Colon: Colon, + Colone: Colone, + colone: colone, + coloneq: coloneq, + comma: comma, + commat: commat, + comp: comp, + compfn: compfn, + complement: complement, + complexes: complexes, + cong: cong, + congdot: congdot, + Congruent: Congruent, + conint: conint, + Conint: Conint, + ContourIntegral: ContourIntegral, + copf: copf, + Copf: Copf, + coprod: coprod, + Coproduct: Coproduct, + copy: copy, + COPY: COPY, + copysr: copysr, + CounterClockwiseContourIntegral: CounterClockwiseContourIntegral, + crarr: crarr, + cross: cross, + Cross: Cross, + Cscr: Cscr, + cscr: cscr, + csub: csub, + csube: csube, + csup: csup, + csupe: csupe, + ctdot: ctdot, + cudarrl: cudarrl, + cudarrr: cudarrr, + cuepr: cuepr, + cuesc: cuesc, + cularr: cularr, + cularrp: cularrp, + cupbrcap: cupbrcap, + cupcap: cupcap, + CupCap: CupCap, + cup: cup, + Cup: Cup, + cupcup: cupcup, + cupdot: cupdot, + cupor: cupor, + cups: cups, + curarr: curarr, + curarrm: curarrm, + curlyeqprec: curlyeqprec, + curlyeqsucc: curlyeqsucc, + curlyvee: curlyvee, + curlywedge: curlywedge, + curren: curren, + curvearrowleft: curvearrowleft, + curvearrowright: curvearrowright, + cuvee: cuvee, + cuwed: cuwed, + cwconint: cwconint, + cwint: cwint, + cylcty: cylcty, + dagger: dagger, + Dagger: Dagger, + daleth: daleth, + darr: darr, + Darr: Darr, + dArr: dArr, + dash: dash, + Dashv: Dashv, + dashv: dashv, + dbkarow: dbkarow, + dblac: dblac, + Dcaron: Dcaron, + dcaron: dcaron, + Dcy: Dcy, + dcy: dcy, + ddagger: ddagger, + ddarr: ddarr, + DD: DD, + dd: dd, + DDotrahd: DDotrahd, + ddotseq: ddotseq, + deg: deg, + Del: Del, + Delta: Delta, + delta: delta, + demptyv: demptyv, + dfisht: dfisht, + Dfr: Dfr, + dfr: dfr, + dHar: dHar, + dharl: dharl, + dharr: dharr, + DiacriticalAcute: DiacriticalAcute, + DiacriticalDot: DiacriticalDot, + DiacriticalDoubleAcute: DiacriticalDoubleAcute, + DiacriticalGrave: DiacriticalGrave, + DiacriticalTilde: DiacriticalTilde, + diam: diam, + diamond: diamond, + Diamond: Diamond, + diamondsuit: diamondsuit, + diams: diams, + die: die, + DifferentialD: DifferentialD, + digamma: digamma, + disin: disin, + div: div, + divide: divide, + divideontimes: divideontimes, + divonx: divonx, + DJcy: DJcy, + djcy: djcy, + dlcorn: dlcorn, + dlcrop: dlcrop, + dollar: dollar, + Dopf: Dopf, + dopf: dopf, + Dot: Dot, + dot: dot, + DotDot: DotDot, + doteq: doteq, + doteqdot: doteqdot, + DotEqual: DotEqual, + dotminus: dotminus, + dotplus: dotplus, + dotsquare: dotsquare, + doublebarwedge: doublebarwedge, + DoubleContourIntegral: DoubleContourIntegral, + DoubleDot: DoubleDot, + DoubleDownArrow: DoubleDownArrow, + DoubleLeftArrow: DoubleLeftArrow, + DoubleLeftRightArrow: DoubleLeftRightArrow, + DoubleLeftTee: DoubleLeftTee, + DoubleLongLeftArrow: DoubleLongLeftArrow, + DoubleLongLeftRightArrow: DoubleLongLeftRightArrow, + DoubleLongRightArrow: DoubleLongRightArrow, + DoubleRightArrow: DoubleRightArrow, + DoubleRightTee: DoubleRightTee, + DoubleUpArrow: DoubleUpArrow, + DoubleUpDownArrow: DoubleUpDownArrow, + DoubleVerticalBar: DoubleVerticalBar, + DownArrowBar: DownArrowBar, + downarrow: downarrow, + DownArrow: DownArrow, + Downarrow: Downarrow, + DownArrowUpArrow: DownArrowUpArrow, + DownBreve: DownBreve, + downdownarrows: downdownarrows, + downharpoonleft: downharpoonleft, + downharpoonright: downharpoonright, + DownLeftRightVector: DownLeftRightVector, + DownLeftTeeVector: DownLeftTeeVector, + DownLeftVectorBar: DownLeftVectorBar, + DownLeftVector: DownLeftVector, + DownRightTeeVector: DownRightTeeVector, + DownRightVectorBar: DownRightVectorBar, + DownRightVector: DownRightVector, + DownTeeArrow: DownTeeArrow, + DownTee: DownTee, + drbkarow: drbkarow, + drcorn: drcorn, + drcrop: drcrop, + Dscr: Dscr, + dscr: dscr, + DScy: DScy, + dscy: dscy, + dsol: dsol, + Dstrok: Dstrok, + dstrok: dstrok, + dtdot: dtdot, + dtri: dtri, + dtrif: dtrif, + duarr: duarr, + duhar: duhar, + dwangle: dwangle, + DZcy: DZcy, + dzcy: dzcy, + dzigrarr: dzigrarr, + Eacute: Eacute, + eacute: eacute, + easter: easter, + Ecaron: Ecaron, + ecaron: ecaron, + Ecirc: Ecirc, + ecirc: ecirc, + ecir: ecir, + ecolon: ecolon, + Ecy: Ecy, + ecy: ecy, + eDDot: eDDot, + Edot: Edot, + edot: edot, + eDot: eDot, + ee: ee, + efDot: efDot, + Efr: Efr, + efr: efr, + eg: eg, + Egrave: Egrave, + egrave: egrave, + egs: egs, + egsdot: egsdot, + el: el, + Element: Element, + elinters: elinters, + ell: ell, + els: els, + elsdot: elsdot, + Emacr: Emacr, + emacr: emacr, + empty: empty, + emptyset: emptyset, + EmptySmallSquare: EmptySmallSquare, + emptyv: emptyv, + EmptyVerySmallSquare: EmptyVerySmallSquare, + emsp13: emsp13, + emsp14: emsp14, + emsp: emsp, + ENG: ENG, + eng: eng, + ensp: ensp, + Eogon: Eogon, + eogon: eogon, + Eopf: Eopf, + eopf: eopf, + epar: epar, + eparsl: eparsl, + eplus: eplus, + epsi: epsi, + Epsilon: Epsilon, + epsilon: epsilon, + epsiv: epsiv, + eqcirc: eqcirc, + eqcolon: eqcolon, + eqsim: eqsim, + eqslantgtr: eqslantgtr, + eqslantless: eqslantless, + Equal: Equal, + equals: equals, + EqualTilde: EqualTilde, + equest: equest, + Equilibrium: Equilibrium, + equiv: equiv, + equivDD: equivDD, + eqvparsl: eqvparsl, + erarr: erarr, + erDot: erDot, + escr: escr, + Escr: Escr, + esdot: esdot, + Esim: Esim, + esim: esim, + Eta: Eta, + eta: eta, + ETH: ETH, + eth: eth, + Euml: Euml, + euml: euml, + euro: euro, + excl: excl, + exist: exist, + Exists: Exists, + expectation: expectation, + exponentiale: exponentiale, + ExponentialE: ExponentialE, + fallingdotseq: fallingdotseq, + Fcy: Fcy, + fcy: fcy, + female: female, + ffilig: ffilig, + fflig: fflig, + ffllig: ffllig, + Ffr: Ffr, + ffr: ffr, + filig: filig, + FilledSmallSquare: FilledSmallSquare, + FilledVerySmallSquare: FilledVerySmallSquare, + fjlig: fjlig, + flat: flat, + fllig: fllig, + fltns: fltns, + fnof: fnof, + Fopf: Fopf, + fopf: fopf, + forall: forall, + ForAll: ForAll, + fork: fork, + forkv: forkv, + Fouriertrf: Fouriertrf, + fpartint: fpartint, + frac12: frac12, + frac13: frac13, + frac14: frac14, + frac15: frac15, + frac16: frac16, + frac18: frac18, + frac23: frac23, + frac25: frac25, + frac34: frac34, + frac35: frac35, + frac38: frac38, + frac45: frac45, + frac56: frac56, + frac58: frac58, + frac78: frac78, + frasl: frasl, + frown: frown, + fscr: fscr, + Fscr: Fscr, + gacute: gacute, + Gamma: Gamma, + gamma: gamma, + Gammad: Gammad, + gammad: gammad, + gap: gap, + Gbreve: Gbreve, + gbreve: gbreve, + Gcedil: Gcedil, + Gcirc: Gcirc, + gcirc: gcirc, + Gcy: Gcy, + gcy: gcy, + Gdot: Gdot, + gdot: gdot, + ge: ge, + gE: gE, + gEl: gEl, + gel: gel, + geq: geq, + geqq: geqq, + geqslant: geqslant, + gescc: gescc, + ges: ges, + gesdot: gesdot, + gesdoto: gesdoto, + gesdotol: gesdotol, + gesl: gesl, + gesles: gesles, + Gfr: Gfr, + gfr: gfr, + gg: gg, + Gg: Gg, + ggg: ggg, + gimel: gimel, + GJcy: GJcy, + gjcy: gjcy, + gla: gla, + gl: gl, + glE: glE, + glj: glj, + gnap: gnap, + gnapprox: gnapprox, + gne: gne, + gnE: gnE, + gneq: gneq, + gneqq: gneqq, + gnsim: gnsim, + Gopf: Gopf, + gopf: gopf, + grave: grave, + GreaterEqual: GreaterEqual, + GreaterEqualLess: GreaterEqualLess, + GreaterFullEqual: GreaterFullEqual, + GreaterGreater: GreaterGreater, + GreaterLess: GreaterLess, + GreaterSlantEqual: GreaterSlantEqual, + GreaterTilde: GreaterTilde, + Gscr: Gscr, + gscr: gscr, + gsim: gsim, + gsime: gsime, + gsiml: gsiml, + gtcc: gtcc, + gtcir: gtcir, + gt: gt$1, + GT: GT, + Gt: Gt, + gtdot: gtdot, + gtlPar: gtlPar, + gtquest: gtquest, + gtrapprox: gtrapprox, + gtrarr: gtrarr, + gtrdot: gtrdot, + gtreqless: gtreqless, + gtreqqless: gtreqqless, + gtrless: gtrless, + gtrsim: gtrsim, + gvertneqq: gvertneqq, + gvnE: gvnE, + Hacek: Hacek, + hairsp: hairsp, + half: half, + hamilt: hamilt, + HARDcy: HARDcy, + hardcy: hardcy, + harrcir: harrcir, + harr: harr, + hArr: hArr, + harrw: harrw, + Hat: Hat, + hbar: hbar, + Hcirc: Hcirc, + hcirc: hcirc, + hearts: hearts, + heartsuit: heartsuit, + hellip: hellip, + hercon: hercon, + hfr: hfr, + Hfr: Hfr, + HilbertSpace: HilbertSpace, + hksearow: hksearow, + hkswarow: hkswarow, + hoarr: hoarr, + homtht: homtht, + hookleftarrow: hookleftarrow, + hookrightarrow: hookrightarrow, + hopf: hopf, + Hopf: Hopf, + horbar: horbar, + HorizontalLine: HorizontalLine, + hscr: hscr, + Hscr: Hscr, + hslash: hslash, + Hstrok: Hstrok, + hstrok: hstrok, + HumpDownHump: HumpDownHump, + HumpEqual: HumpEqual, + hybull: hybull, + hyphen: hyphen, + Iacute: Iacute, + iacute: iacute, + ic: ic, + Icirc: Icirc, + icirc: icirc, + Icy: Icy, + icy: icy, + Idot: Idot, + IEcy: IEcy, + iecy: iecy, + iexcl: iexcl, + iff: iff, + ifr: ifr, + Ifr: Ifr, + Igrave: Igrave, + igrave: igrave, + ii: ii, + iiiint: iiiint, + iiint: iiint, + iinfin: iinfin, + iiota: iiota, + IJlig: IJlig, + ijlig: ijlig, + Imacr: Imacr, + imacr: imacr, + image: image, + ImaginaryI: ImaginaryI, + imagline: imagline, + imagpart: imagpart, + imath: imath, + Im: Im, + imof: imof, + imped: imped, + Implies: Implies, + incare: incare, + infin: infin, + infintie: infintie, + inodot: inodot, + intcal: intcal, + int: int, + Int: Int, + integers: integers, + Integral: Integral, + intercal: intercal, + Intersection: Intersection, + intlarhk: intlarhk, + intprod: intprod, + InvisibleComma: InvisibleComma, + InvisibleTimes: InvisibleTimes, + IOcy: IOcy, + iocy: iocy, + Iogon: Iogon, + iogon: iogon, + Iopf: Iopf, + iopf: iopf, + Iota: Iota, + iota: iota, + iprod: iprod, + iquest: iquest, + iscr: iscr, + Iscr: Iscr, + isin: isin, + isindot: isindot, + isinE: isinE, + isins: isins, + isinsv: isinsv, + isinv: isinv, + it: it, + Itilde: Itilde, + itilde: itilde, + Iukcy: Iukcy, + iukcy: iukcy, + Iuml: Iuml, + iuml: iuml, + Jcirc: Jcirc, + jcirc: jcirc, + Jcy: Jcy, + jcy: jcy, + Jfr: Jfr, + jfr: jfr, + jmath: jmath, + Jopf: Jopf, + jopf: jopf, + Jscr: Jscr, + jscr: jscr, + Jsercy: Jsercy, + jsercy: jsercy, + Jukcy: Jukcy, + jukcy: jukcy, + Kappa: Kappa, + kappa: kappa, + kappav: kappav, + Kcedil: Kcedil, + kcedil: kcedil, + Kcy: Kcy, + kcy: kcy, + Kfr: Kfr, + kfr: kfr, + kgreen: kgreen, + KHcy: KHcy, + khcy: khcy, + KJcy: KJcy, + kjcy: kjcy, + Kopf: Kopf, + kopf: kopf, + Kscr: Kscr, + kscr: kscr, + lAarr: lAarr, + Lacute: Lacute, + lacute: lacute, + laemptyv: laemptyv, + lagran: lagran, + Lambda: Lambda, + lambda: lambda, + lang: lang, + Lang: Lang, + langd: langd, + langle: langle, + lap: lap, + Laplacetrf: Laplacetrf, + laquo: laquo, + larrb: larrb, + larrbfs: larrbfs, + larr: larr, + Larr: Larr, + lArr: lArr, + larrfs: larrfs, + larrhk: larrhk, + larrlp: larrlp, + larrpl: larrpl, + larrsim: larrsim, + larrtl: larrtl, + latail: latail, + lAtail: lAtail, + lat: lat, + late: late, + lates: lates, + lbarr: lbarr, + lBarr: lBarr, + lbbrk: lbbrk, + lbrace: lbrace, + lbrack: lbrack, + lbrke: lbrke, + lbrksld: lbrksld, + lbrkslu: lbrkslu, + Lcaron: Lcaron, + lcaron: lcaron, + Lcedil: Lcedil, + lcedil: lcedil, + lceil: lceil, + lcub: lcub, + Lcy: Lcy, + lcy: lcy, + ldca: ldca, + ldquo: ldquo, + ldquor: ldquor, + ldrdhar: ldrdhar, + ldrushar: ldrushar, + ldsh: ldsh, + le: le, + lE: lE, + LeftAngleBracket: LeftAngleBracket, + LeftArrowBar: LeftArrowBar, + leftarrow: leftarrow, + LeftArrow: LeftArrow, + Leftarrow: Leftarrow, + LeftArrowRightArrow: LeftArrowRightArrow, + leftarrowtail: leftarrowtail, + LeftCeiling: LeftCeiling, + LeftDoubleBracket: LeftDoubleBracket, + LeftDownTeeVector: LeftDownTeeVector, + LeftDownVectorBar: LeftDownVectorBar, + LeftDownVector: LeftDownVector, + LeftFloor: LeftFloor, + leftharpoondown: leftharpoondown, + leftharpoonup: leftharpoonup, + leftleftarrows: leftleftarrows, + leftrightarrow: leftrightarrow, + LeftRightArrow: LeftRightArrow, + Leftrightarrow: Leftrightarrow, + leftrightarrows: leftrightarrows, + leftrightharpoons: leftrightharpoons, + leftrightsquigarrow: leftrightsquigarrow, + LeftRightVector: LeftRightVector, + LeftTeeArrow: LeftTeeArrow, + LeftTee: LeftTee, + LeftTeeVector: LeftTeeVector, + leftthreetimes: leftthreetimes, + LeftTriangleBar: LeftTriangleBar, + LeftTriangle: LeftTriangle, + LeftTriangleEqual: LeftTriangleEqual, + LeftUpDownVector: LeftUpDownVector, + LeftUpTeeVector: LeftUpTeeVector, + LeftUpVectorBar: LeftUpVectorBar, + LeftUpVector: LeftUpVector, + LeftVectorBar: LeftVectorBar, + LeftVector: LeftVector, + lEg: lEg, + leg: leg, + leq: leq, + leqq: leqq, + leqslant: leqslant, + lescc: lescc, + les: les, + lesdot: lesdot, + lesdoto: lesdoto, + lesdotor: lesdotor, + lesg: lesg, + lesges: lesges, + lessapprox: lessapprox, + lessdot: lessdot, + lesseqgtr: lesseqgtr, + lesseqqgtr: lesseqqgtr, + LessEqualGreater: LessEqualGreater, + LessFullEqual: LessFullEqual, + LessGreater: LessGreater, + lessgtr: lessgtr, + LessLess: LessLess, + lesssim: lesssim, + LessSlantEqual: LessSlantEqual, + LessTilde: LessTilde, + lfisht: lfisht, + lfloor: lfloor, + Lfr: Lfr, + lfr: lfr, + lg: lg, + lgE: lgE, + lHar: lHar, + lhard: lhard, + lharu: lharu, + lharul: lharul, + lhblk: lhblk, + LJcy: LJcy, + ljcy: ljcy, + llarr: llarr, + ll: ll, + Ll: Ll, + llcorner: llcorner, + Lleftarrow: Lleftarrow, + llhard: llhard, + lltri: lltri, + Lmidot: Lmidot, + lmidot: lmidot, + lmoustache: lmoustache, + lmoust: lmoust, + lnap: lnap, + lnapprox: lnapprox, + lne: lne, + lnE: lnE, + lneq: lneq, + lneqq: lneqq, + lnsim: lnsim, + loang: loang, + loarr: loarr, + lobrk: lobrk, + longleftarrow: longleftarrow, + LongLeftArrow: LongLeftArrow, + Longleftarrow: Longleftarrow, + longleftrightarrow: longleftrightarrow, + LongLeftRightArrow: LongLeftRightArrow, + Longleftrightarrow: Longleftrightarrow, + longmapsto: longmapsto, + longrightarrow: longrightarrow, + LongRightArrow: LongRightArrow, + Longrightarrow: Longrightarrow, + looparrowleft: looparrowleft, + looparrowright: looparrowright, + lopar: lopar, + Lopf: Lopf, + lopf: lopf, + loplus: loplus, + lotimes: lotimes, + lowast: lowast, + lowbar: lowbar, + LowerLeftArrow: LowerLeftArrow, + LowerRightArrow: LowerRightArrow, + loz: loz, + lozenge: lozenge, + lozf: lozf, + lpar: lpar, + lparlt: lparlt, + lrarr: lrarr, + lrcorner: lrcorner, + lrhar: lrhar, + lrhard: lrhard, + lrm: lrm, + lrtri: lrtri, + lsaquo: lsaquo, + lscr: lscr, + Lscr: Lscr, + lsh: lsh, + Lsh: Lsh, + lsim: lsim, + lsime: lsime, + lsimg: lsimg, + lsqb: lsqb, + lsquo: lsquo, + lsquor: lsquor, + Lstrok: Lstrok, + lstrok: lstrok, + ltcc: ltcc, + ltcir: ltcir, + lt: lt$1, + LT: LT, + Lt: Lt, + ltdot: ltdot, + lthree: lthree, + ltimes: ltimes, + ltlarr: ltlarr, + ltquest: ltquest, + ltri: ltri, + ltrie: ltrie, + ltrif: ltrif, + ltrPar: ltrPar, + lurdshar: lurdshar, + luruhar: luruhar, + lvertneqq: lvertneqq, + lvnE: lvnE, + macr: macr, + male: male, + malt: malt, + maltese: maltese, + map: map, + mapsto: mapsto, + mapstodown: mapstodown, + mapstoleft: mapstoleft, + mapstoup: mapstoup, + marker: marker, + mcomma: mcomma, + Mcy: Mcy, + mcy: mcy, + mdash: mdash, + mDDot: mDDot, + measuredangle: measuredangle, + MediumSpace: MediumSpace, + Mellintrf: Mellintrf, + Mfr: Mfr, + mfr: mfr, + mho: mho, + micro: micro, + midast: midast, + midcir: midcir, + mid: mid, + middot: middot, + minusb: minusb, + minus: minus, + minusd: minusd, + minusdu: minusdu, + MinusPlus: MinusPlus, + mlcp: mlcp, + mldr: mldr, + mnplus: mnplus, + models: models, + Mopf: Mopf, + mopf: mopf, + mp: mp, + mscr: mscr, + Mscr: Mscr, + mstpos: mstpos, + Mu: Mu, + mu: mu, + multimap: multimap, + mumap: mumap, + nabla: nabla, + Nacute: Nacute, + nacute: nacute, + nang: nang, + nap: nap, + napE: napE, + napid: napid, + napos: napos, + napprox: napprox, + natural: natural, + naturals: naturals, + natur: natur, + nbsp: nbsp, + nbump: nbump, + nbumpe: nbumpe, + ncap: ncap, + Ncaron: Ncaron, + ncaron: ncaron, + Ncedil: Ncedil, + ncedil: ncedil, + ncong: ncong, + ncongdot: ncongdot, + ncup: ncup, + Ncy: Ncy, + ncy: ncy, + ndash: ndash, + nearhk: nearhk, + nearr: nearr, + neArr: neArr, + nearrow: nearrow, + ne: ne, + nedot: nedot, + NegativeMediumSpace: NegativeMediumSpace, + NegativeThickSpace: NegativeThickSpace, + NegativeThinSpace: NegativeThinSpace, + NegativeVeryThinSpace: NegativeVeryThinSpace, + nequiv: nequiv, + nesear: nesear, + nesim: nesim, + NestedGreaterGreater: NestedGreaterGreater, + NestedLessLess: NestedLessLess, + NewLine: NewLine, + nexist: nexist, + nexists: nexists, + Nfr: Nfr, + nfr: nfr, + ngE: ngE, + nge: nge, + ngeq: ngeq, + ngeqq: ngeqq, + ngeqslant: ngeqslant, + nges: nges, + nGg: nGg, + ngsim: ngsim, + nGt: nGt, + ngt: ngt, + ngtr: ngtr, + nGtv: nGtv, + nharr: nharr, + nhArr: nhArr, + nhpar: nhpar, + ni: ni, + nis: nis, + nisd: nisd, + niv: niv, + NJcy: NJcy, + njcy: njcy, + nlarr: nlarr, + nlArr: nlArr, + nldr: nldr, + nlE: nlE, + nle: nle, + nleftarrow: nleftarrow, + nLeftarrow: nLeftarrow, + nleftrightarrow: nleftrightarrow, + nLeftrightarrow: nLeftrightarrow, + nleq: nleq, + nleqq: nleqq, + nleqslant: nleqslant, + nles: nles, + nless: nless, + nLl: nLl, + nlsim: nlsim, + nLt: nLt, + nlt: nlt, + nltri: nltri, + nltrie: nltrie, + nLtv: nLtv, + nmid: nmid, + NoBreak: NoBreak, + NonBreakingSpace: NonBreakingSpace, + nopf: nopf, + Nopf: Nopf, + Not: Not, + not: not, + NotCongruent: NotCongruent, + NotCupCap: NotCupCap, + NotDoubleVerticalBar: NotDoubleVerticalBar, + NotElement: NotElement, + NotEqual: NotEqual, + NotEqualTilde: NotEqualTilde, + NotExists: NotExists, + NotGreater: NotGreater, + NotGreaterEqual: NotGreaterEqual, + NotGreaterFullEqual: NotGreaterFullEqual, + NotGreaterGreater: NotGreaterGreater, + NotGreaterLess: NotGreaterLess, + NotGreaterSlantEqual: NotGreaterSlantEqual, + NotGreaterTilde: NotGreaterTilde, + NotHumpDownHump: NotHumpDownHump, + NotHumpEqual: NotHumpEqual, + notin: notin, + notindot: notindot, + notinE: notinE, + notinva: notinva, + notinvb: notinvb, + notinvc: notinvc, + NotLeftTriangleBar: NotLeftTriangleBar, + NotLeftTriangle: NotLeftTriangle, + NotLeftTriangleEqual: NotLeftTriangleEqual, + NotLess: NotLess, + NotLessEqual: NotLessEqual, + NotLessGreater: NotLessGreater, + NotLessLess: NotLessLess, + NotLessSlantEqual: NotLessSlantEqual, + NotLessTilde: NotLessTilde, + NotNestedGreaterGreater: NotNestedGreaterGreater, + NotNestedLessLess: NotNestedLessLess, + notni: notni, + notniva: notniva, + notnivb: notnivb, + notnivc: notnivc, + NotPrecedes: NotPrecedes, + NotPrecedesEqual: NotPrecedesEqual, + NotPrecedesSlantEqual: NotPrecedesSlantEqual, + NotReverseElement: NotReverseElement, + NotRightTriangleBar: NotRightTriangleBar, + NotRightTriangle: NotRightTriangle, + NotRightTriangleEqual: NotRightTriangleEqual, + NotSquareSubset: NotSquareSubset, + NotSquareSubsetEqual: NotSquareSubsetEqual, + NotSquareSuperset: NotSquareSuperset, + NotSquareSupersetEqual: NotSquareSupersetEqual, + NotSubset: NotSubset, + NotSubsetEqual: NotSubsetEqual, + NotSucceeds: NotSucceeds, + NotSucceedsEqual: NotSucceedsEqual, + NotSucceedsSlantEqual: NotSucceedsSlantEqual, + NotSucceedsTilde: NotSucceedsTilde, + NotSuperset: NotSuperset, + NotSupersetEqual: NotSupersetEqual, + NotTilde: NotTilde, + NotTildeEqual: NotTildeEqual, + NotTildeFullEqual: NotTildeFullEqual, + NotTildeTilde: NotTildeTilde, + NotVerticalBar: NotVerticalBar, + nparallel: nparallel, + npar: npar, + nparsl: nparsl, + npart: npart, + npolint: npolint, + npr: npr, + nprcue: nprcue, + nprec: nprec, + npreceq: npreceq, + npre: npre, + nrarrc: nrarrc, + nrarr: nrarr, + nrArr: nrArr, + nrarrw: nrarrw, + nrightarrow: nrightarrow, + nRightarrow: nRightarrow, + nrtri: nrtri, + nrtrie: nrtrie, + nsc: nsc, + nsccue: nsccue, + nsce: nsce, + Nscr: Nscr, + nscr: nscr, + nshortmid: nshortmid, + nshortparallel: nshortparallel, + nsim: nsim, + nsime: nsime, + nsimeq: nsimeq, + nsmid: nsmid, + nspar: nspar, + nsqsube: nsqsube, + nsqsupe: nsqsupe, + nsub: nsub, + nsubE: nsubE, + nsube: nsube, + nsubset: nsubset, + nsubseteq: nsubseteq, + nsubseteqq: nsubseteqq, + nsucc: nsucc, + nsucceq: nsucceq, + nsup: nsup, + nsupE: nsupE, + nsupe: nsupe, + nsupset: nsupset, + nsupseteq: nsupseteq, + nsupseteqq: nsupseteqq, + ntgl: ntgl, + Ntilde: Ntilde, + ntilde: ntilde, + ntlg: ntlg, + ntriangleleft: ntriangleleft, + ntrianglelefteq: ntrianglelefteq, + ntriangleright: ntriangleright, + ntrianglerighteq: ntrianglerighteq, + Nu: Nu, + nu: nu, + num: num, + numero: numero, + numsp: numsp, + nvap: nvap, + nvdash: nvdash, + nvDash: nvDash, + nVdash: nVdash, + nVDash: nVDash, + nvge: nvge, + nvgt: nvgt, + nvHarr: nvHarr, + nvinfin: nvinfin, + nvlArr: nvlArr, + nvle: nvle, + nvlt: nvlt, + nvltrie: nvltrie, + nvrArr: nvrArr, + nvrtrie: nvrtrie, + nvsim: nvsim, + nwarhk: nwarhk, + nwarr: nwarr, + nwArr: nwArr, + nwarrow: nwarrow, + nwnear: nwnear, + Oacute: Oacute, + oacute: oacute, + oast: oast, + Ocirc: Ocirc, + ocirc: ocirc, + ocir: ocir, + Ocy: Ocy, + ocy: ocy, + odash: odash, + Odblac: Odblac, + odblac: odblac, + odiv: odiv, + odot: odot, + odsold: odsold, + OElig: OElig, + oelig: oelig, + ofcir: ofcir, + Ofr: Ofr, + ofr: ofr, + ogon: ogon, + Ograve: Ograve, + ograve: ograve, + ogt: ogt, + ohbar: ohbar, + ohm: ohm, + oint: oint, + olarr: olarr, + olcir: olcir, + olcross: olcross, + oline: oline, + olt: olt, + Omacr: Omacr, + omacr: omacr, + Omega: Omega, + omega: omega, + Omicron: Omicron, + omicron: omicron, + omid: omid, + ominus: ominus, + Oopf: Oopf, + oopf: oopf, + opar: opar, + OpenCurlyDoubleQuote: OpenCurlyDoubleQuote, + OpenCurlyQuote: OpenCurlyQuote, + operp: operp, + oplus: oplus, + orarr: orarr, + Or: Or, + or: or, + ord: ord, + order: order, + orderof: orderof, + ordf: ordf, + ordm: ordm, + origof: origof, + oror: oror, + orslope: orslope, + orv: orv, + oS: oS, + Oscr: Oscr, + oscr: oscr, + Oslash: Oslash, + oslash: oslash, + osol: osol, + Otilde: Otilde, + otilde: otilde, + otimesas: otimesas, + Otimes: Otimes, + otimes: otimes, + Ouml: Ouml, + ouml: ouml, + ovbar: ovbar, + OverBar: OverBar, + OverBrace: OverBrace, + OverBracket: OverBracket, + OverParenthesis: OverParenthesis, + para: para, + parallel: parallel, + par: par, + parsim: parsim, + parsl: parsl, + part: part, + PartialD: PartialD, + Pcy: Pcy, + pcy: pcy, + percnt: percnt, + period: period, + permil: permil, + perp: perp, + pertenk: pertenk, + Pfr: Pfr, + pfr: pfr, + Phi: Phi, + phi: phi, + phiv: phiv, + phmmat: phmmat, + phone: phone, + Pi: Pi, + pi: pi, + pitchfork: pitchfork, + piv: piv, + planck: planck, + planckh: planckh, + plankv: plankv, + plusacir: plusacir, + plusb: plusb, + pluscir: pluscir, + plus: plus, + plusdo: plusdo, + plusdu: plusdu, + pluse: pluse, + PlusMinus: PlusMinus, + plusmn: plusmn, + plussim: plussim, + plustwo: plustwo, + pm: pm, + Poincareplane: Poincareplane, + pointint: pointint, + popf: popf, + Popf: Popf, + pound: pound, + prap: prap, + Pr: Pr, + pr: pr, + prcue: prcue, + precapprox: precapprox, + prec: prec, + preccurlyeq: preccurlyeq, + Precedes: Precedes, + PrecedesEqual: PrecedesEqual, + PrecedesSlantEqual: PrecedesSlantEqual, + PrecedesTilde: PrecedesTilde, + preceq: preceq, + precnapprox: precnapprox, + precneqq: precneqq, + precnsim: precnsim, + pre: pre, + prE: prE, + precsim: precsim, + prime: prime, + Prime: Prime, + primes: primes, + prnap: prnap, + prnE: prnE, + prnsim: prnsim, + prod: prod, + Product: Product, + profalar: profalar, + profline: profline, + profsurf: profsurf, + prop: prop, + Proportional: Proportional, + Proportion: Proportion, + propto: propto, + prsim: prsim, + prurel: prurel, + Pscr: Pscr, + pscr: pscr, + Psi: Psi, + psi: psi, + puncsp: puncsp, + Qfr: Qfr, + qfr: qfr, + qint: qint, + qopf: qopf, + Qopf: Qopf, + qprime: qprime, + Qscr: Qscr, + qscr: qscr, + quaternions: quaternions, + quatint: quatint, + quest: quest, + questeq: questeq, + quot: quot$1, + QUOT: QUOT, + rAarr: rAarr, + race: race, + Racute: Racute, + racute: racute, + radic: radic, + raemptyv: raemptyv, + rang: rang, + Rang: Rang, + rangd: rangd, + range: range, + rangle: rangle, + raquo: raquo, + rarrap: rarrap, + rarrb: rarrb, + rarrbfs: rarrbfs, + rarrc: rarrc, + rarr: rarr, + Rarr: Rarr, + rArr: rArr, + rarrfs: rarrfs, + rarrhk: rarrhk, + rarrlp: rarrlp, + rarrpl: rarrpl, + rarrsim: rarrsim, + Rarrtl: Rarrtl, + rarrtl: rarrtl, + rarrw: rarrw, + ratail: ratail, + rAtail: rAtail, + ratio: ratio, + rationals: rationals, + rbarr: rbarr, + rBarr: rBarr, + RBarr: RBarr, + rbbrk: rbbrk, + rbrace: rbrace, + rbrack: rbrack, + rbrke: rbrke, + rbrksld: rbrksld, + rbrkslu: rbrkslu, + Rcaron: Rcaron, + rcaron: rcaron, + Rcedil: Rcedil, + rcedil: rcedil, + rceil: rceil, + rcub: rcub, + Rcy: Rcy, + rcy: rcy, + rdca: rdca, + rdldhar: rdldhar, + rdquo: rdquo, + rdquor: rdquor, + rdsh: rdsh, + real: real, + realine: realine, + realpart: realpart, + reals: reals, + Re: Re, + rect: rect, + reg: reg, + REG: REG, + ReverseElement: ReverseElement, + ReverseEquilibrium: ReverseEquilibrium, + ReverseUpEquilibrium: ReverseUpEquilibrium, + rfisht: rfisht, + rfloor: rfloor, + rfr: rfr, + Rfr: Rfr, + rHar: rHar, + rhard: rhard, + rharu: rharu, + rharul: rharul, + Rho: Rho, + rho: rho, + rhov: rhov, + RightAngleBracket: RightAngleBracket, + RightArrowBar: RightArrowBar, + rightarrow: rightarrow, + RightArrow: RightArrow, + Rightarrow: Rightarrow, + RightArrowLeftArrow: RightArrowLeftArrow, + rightarrowtail: rightarrowtail, + RightCeiling: RightCeiling, + RightDoubleBracket: RightDoubleBracket, + RightDownTeeVector: RightDownTeeVector, + RightDownVectorBar: RightDownVectorBar, + RightDownVector: RightDownVector, + RightFloor: RightFloor, + rightharpoondown: rightharpoondown, + rightharpoonup: rightharpoonup, + rightleftarrows: rightleftarrows, + rightleftharpoons: rightleftharpoons, + rightrightarrows: rightrightarrows, + rightsquigarrow: rightsquigarrow, + RightTeeArrow: RightTeeArrow, + RightTee: RightTee, + RightTeeVector: RightTeeVector, + rightthreetimes: rightthreetimes, + RightTriangleBar: RightTriangleBar, + RightTriangle: RightTriangle, + RightTriangleEqual: RightTriangleEqual, + RightUpDownVector: RightUpDownVector, + RightUpTeeVector: RightUpTeeVector, + RightUpVectorBar: RightUpVectorBar, + RightUpVector: RightUpVector, + RightVectorBar: RightVectorBar, + RightVector: RightVector, + ring: ring, + risingdotseq: risingdotseq, + rlarr: rlarr, + rlhar: rlhar, + rlm: rlm, + rmoustache: rmoustache, + rmoust: rmoust, + rnmid: rnmid, + roang: roang, + roarr: roarr, + robrk: robrk, + ropar: ropar, + ropf: ropf, + Ropf: Ropf, + roplus: roplus, + rotimes: rotimes, + RoundImplies: RoundImplies, + rpar: rpar, + rpargt: rpargt, + rppolint: rppolint, + rrarr: rrarr, + Rrightarrow: Rrightarrow, + rsaquo: rsaquo, + rscr: rscr, + Rscr: Rscr, + rsh: rsh, + Rsh: Rsh, + rsqb: rsqb, + rsquo: rsquo, + rsquor: rsquor, + rthree: rthree, + rtimes: rtimes, + rtri: rtri, + rtrie: rtrie, + rtrif: rtrif, + rtriltri: rtriltri, + RuleDelayed: RuleDelayed, + ruluhar: ruluhar, + rx: rx, + Sacute: Sacute, + sacute: sacute, + sbquo: sbquo, + scap: scap, + Scaron: Scaron, + scaron: scaron, + Sc: Sc, + sc: sc, + sccue: sccue, + sce: sce, + scE: scE, + Scedil: Scedil, + scedil: scedil, + Scirc: Scirc, + scirc: scirc, + scnap: scnap, + scnE: scnE, + scnsim: scnsim, + scpolint: scpolint, + scsim: scsim, + Scy: Scy, + scy: scy, + sdotb: sdotb, + sdot: sdot, + sdote: sdote, + searhk: searhk, + searr: searr, + seArr: seArr, + searrow: searrow, + sect: sect, + semi: semi, + seswar: seswar, + setminus: setminus, + setmn: setmn, + sext: sext, + Sfr: Sfr, + sfr: sfr, + sfrown: sfrown, + sharp: sharp, + SHCHcy: SHCHcy, + shchcy: shchcy, + SHcy: SHcy, + shcy: shcy, + ShortDownArrow: ShortDownArrow, + ShortLeftArrow: ShortLeftArrow, + shortmid: shortmid, + shortparallel: shortparallel, + ShortRightArrow: ShortRightArrow, + ShortUpArrow: ShortUpArrow, + shy: shy, + Sigma: Sigma, + sigma: sigma, + sigmaf: sigmaf, + sigmav: sigmav, + sim: sim, + simdot: simdot, + sime: sime, + simeq: simeq, + simg: simg, + simgE: simgE, + siml: siml, + simlE: simlE, + simne: simne, + simplus: simplus, + simrarr: simrarr, + slarr: slarr, + SmallCircle: SmallCircle, + smallsetminus: smallsetminus, + smashp: smashp, + smeparsl: smeparsl, + smid: smid, + smile: smile, + smt: smt, + smte: smte, + smtes: smtes, + SOFTcy: SOFTcy, + softcy: softcy, + solbar: solbar, + solb: solb, + sol: sol, + Sopf: Sopf, + sopf: sopf, + spades: spades, + spadesuit: spadesuit, + spar: spar, + sqcap: sqcap, + sqcaps: sqcaps, + sqcup: sqcup, + sqcups: sqcups, + Sqrt: Sqrt, + sqsub: sqsub, + sqsube: sqsube, + sqsubset: sqsubset, + sqsubseteq: sqsubseteq, + sqsup: sqsup, + sqsupe: sqsupe, + sqsupset: sqsupset, + sqsupseteq: sqsupseteq, + square: square, + Square: Square, + SquareIntersection: SquareIntersection, + SquareSubset: SquareSubset, + SquareSubsetEqual: SquareSubsetEqual, + SquareSuperset: SquareSuperset, + SquareSupersetEqual: SquareSupersetEqual, + SquareUnion: SquareUnion, + squarf: squarf, + squ: squ, + squf: squf, + srarr: srarr, + Sscr: Sscr, + sscr: sscr, + ssetmn: ssetmn, + ssmile: ssmile, + sstarf: sstarf, + Star: Star, + star: star, + starf: starf, + straightepsilon: straightepsilon, + straightphi: straightphi, + strns: strns, + sub: sub, + Sub: Sub, + subdot: subdot, + subE: subE, + sube: sube, + subedot: subedot, + submult: submult, + subnE: subnE, + subne: subne, + subplus: subplus, + subrarr: subrarr, + subset: subset, + Subset: Subset, + subseteq: subseteq, + subseteqq: subseteqq, + SubsetEqual: SubsetEqual, + subsetneq: subsetneq, + subsetneqq: subsetneqq, + subsim: subsim, + subsub: subsub, + subsup: subsup, + succapprox: succapprox, + succ: succ, + succcurlyeq: succcurlyeq, + Succeeds: Succeeds, + SucceedsEqual: SucceedsEqual, + SucceedsSlantEqual: SucceedsSlantEqual, + SucceedsTilde: SucceedsTilde, + succeq: succeq, + succnapprox: succnapprox, + succneqq: succneqq, + succnsim: succnsim, + succsim: succsim, + SuchThat: SuchThat, + sum: sum, + Sum: Sum, + sung: sung, + sup1: sup1, + sup2: sup2, + sup3: sup3, + sup: sup, + Sup: Sup, + supdot: supdot, + supdsub: supdsub, + supE: supE, + supe: supe, + supedot: supedot, + Superset: Superset, + SupersetEqual: SupersetEqual, + suphsol: suphsol, + suphsub: suphsub, + suplarr: suplarr, + supmult: supmult, + supnE: supnE, + supne: supne, + supplus: supplus, + supset: supset, + Supset: Supset, + supseteq: supseteq, + supseteqq: supseteqq, + supsetneq: supsetneq, + supsetneqq: supsetneqq, + supsim: supsim, + supsub: supsub, + supsup: supsup, + swarhk: swarhk, + swarr: swarr, + swArr: swArr, + swarrow: swarrow, + swnwar: swnwar, + szlig: szlig, + Tab: Tab, + target: target, + Tau: Tau, + tau: tau, + tbrk: tbrk, + Tcaron: Tcaron, + tcaron: tcaron, + Tcedil: Tcedil, + tcedil: tcedil, + Tcy: Tcy, + tcy: tcy, + tdot: tdot, + telrec: telrec, + Tfr: Tfr, + tfr: tfr, + there4: there4, + therefore: therefore, + Therefore: Therefore, + Theta: Theta, + theta: theta, + thetasym: thetasym, + thetav: thetav, + thickapprox: thickapprox, + thicksim: thicksim, + ThickSpace: ThickSpace, + ThinSpace: ThinSpace, + thinsp: thinsp, + thkap: thkap, + thksim: thksim, + THORN: THORN, + thorn: thorn, + tilde: tilde, + Tilde: Tilde, + TildeEqual: TildeEqual, + TildeFullEqual: TildeFullEqual, + TildeTilde: TildeTilde, + timesbar: timesbar, + timesb: timesb, + times: times, + timesd: timesd, + tint: tint, + toea: toea, + topbot: topbot, + topcir: topcir, + top: top, + Topf: Topf, + topf: topf, + topfork: topfork, + tosa: tosa, + tprime: tprime, + trade: trade, + TRADE: TRADE, + triangle: triangle, + triangledown: triangledown, + triangleleft: triangleleft, + trianglelefteq: trianglelefteq, + triangleq: triangleq, + triangleright: triangleright, + trianglerighteq: trianglerighteq, + tridot: tridot, + trie: trie, + triminus: triminus, + TripleDot: TripleDot, + triplus: triplus, + trisb: trisb, + tritime: tritime, + trpezium: trpezium, + Tscr: Tscr, + tscr: tscr, + TScy: TScy, + tscy: tscy, + TSHcy: TSHcy, + tshcy: tshcy, + Tstrok: Tstrok, + tstrok: tstrok, + twixt: twixt, + twoheadleftarrow: twoheadleftarrow, + twoheadrightarrow: twoheadrightarrow, + Uacute: Uacute, + uacute: uacute, + uarr: uarr, + Uarr: Uarr, + uArr: uArr, + Uarrocir: Uarrocir, + Ubrcy: Ubrcy, + ubrcy: ubrcy, + Ubreve: Ubreve, + ubreve: ubreve, + Ucirc: Ucirc, + ucirc: ucirc, + Ucy: Ucy, + ucy: ucy, + udarr: udarr, + Udblac: Udblac, + udblac: udblac, + udhar: udhar, + ufisht: ufisht, + Ufr: Ufr, + ufr: ufr, + Ugrave: Ugrave, + ugrave: ugrave, + uHar: uHar, + uharl: uharl, + uharr: uharr, + uhblk: uhblk, + ulcorn: ulcorn, + ulcorner: ulcorner, + ulcrop: ulcrop, + ultri: ultri, + Umacr: Umacr, + umacr: umacr, + uml: uml, + UnderBar: UnderBar, + UnderBrace: UnderBrace, + UnderBracket: UnderBracket, + UnderParenthesis: UnderParenthesis, + Union: Union, + UnionPlus: UnionPlus, + Uogon: Uogon, + uogon: uogon, + Uopf: Uopf, + uopf: uopf, + UpArrowBar: UpArrowBar, + uparrow: uparrow, + UpArrow: UpArrow, + Uparrow: Uparrow, + UpArrowDownArrow: UpArrowDownArrow, + updownarrow: updownarrow, + UpDownArrow: UpDownArrow, + Updownarrow: Updownarrow, + UpEquilibrium: UpEquilibrium, + upharpoonleft: upharpoonleft, + upharpoonright: upharpoonright, + uplus: uplus, + UpperLeftArrow: UpperLeftArrow, + UpperRightArrow: UpperRightArrow, + upsi: upsi, + Upsi: Upsi, + upsih: upsih, + Upsilon: Upsilon, + upsilon: upsilon, + UpTeeArrow: UpTeeArrow, + UpTee: UpTee, + upuparrows: upuparrows, + urcorn: urcorn, + urcorner: urcorner, + urcrop: urcrop, + Uring: Uring, + uring: uring, + urtri: urtri, + Uscr: Uscr, + uscr: uscr, + utdot: utdot, + Utilde: Utilde, + utilde: utilde, + utri: utri, + utrif: utrif, + uuarr: uuarr, + Uuml: Uuml, + uuml: uuml, + uwangle: uwangle, + vangrt: vangrt, + varepsilon: varepsilon, + varkappa: varkappa, + varnothing: varnothing, + varphi: varphi, + varpi: varpi, + varpropto: varpropto, + varr: varr, + vArr: vArr, + varrho: varrho, + varsigma: varsigma, + varsubsetneq: varsubsetneq, + varsubsetneqq: varsubsetneqq, + varsupsetneq: varsupsetneq, + varsupsetneqq: varsupsetneqq, + vartheta: vartheta, + vartriangleleft: vartriangleleft, + vartriangleright: vartriangleright, + vBar: vBar, + Vbar: Vbar, + vBarv: vBarv, + Vcy: Vcy, + vcy: vcy, + vdash: vdash, + vDash: vDash, + Vdash: Vdash, + VDash: VDash, + Vdashl: Vdashl, + veebar: veebar, + vee: vee, + Vee: Vee, + veeeq: veeeq, + vellip: vellip, + verbar: verbar, + Verbar: Verbar, + vert: vert, + Vert: Vert, + VerticalBar: VerticalBar, + VerticalLine: VerticalLine, + VerticalSeparator: VerticalSeparator, + VerticalTilde: VerticalTilde, + VeryThinSpace: VeryThinSpace, + Vfr: Vfr, + vfr: vfr, + vltri: vltri, + vnsub: vnsub, + vnsup: vnsup, + Vopf: Vopf, + vopf: vopf, + vprop: vprop, + vrtri: vrtri, + Vscr: Vscr, + vscr: vscr, + vsubnE: vsubnE, + vsubne: vsubne, + vsupnE: vsupnE, + vsupne: vsupne, + Vvdash: Vvdash, + vzigzag: vzigzag, + Wcirc: Wcirc, + wcirc: wcirc, + wedbar: wedbar, + wedge: wedge, + Wedge: Wedge, + wedgeq: wedgeq, + weierp: weierp, + Wfr: Wfr, + wfr: wfr, + Wopf: Wopf, + wopf: wopf, + wp: wp, + wr: wr, + wreath: wreath, + Wscr: Wscr, + wscr: wscr, + xcap: xcap, + xcirc: xcirc, + xcup: xcup, + xdtri: xdtri, + Xfr: Xfr, + xfr: xfr, + xharr: xharr, + xhArr: xhArr, + Xi: Xi, + xi: xi, + xlarr: xlarr, + xlArr: xlArr, + xmap: xmap, + xnis: xnis, + xodot: xodot, + Xopf: Xopf, + xopf: xopf, + xoplus: xoplus, + xotime: xotime, + xrarr: xrarr, + xrArr: xrArr, + Xscr: Xscr, + xscr: xscr, + xsqcup: xsqcup, + xuplus: xuplus, + xutri: xutri, + xvee: xvee, + xwedge: xwedge, + Yacute: Yacute, + yacute: yacute, + YAcy: YAcy, + yacy: yacy, + Ycirc: Ycirc, + ycirc: ycirc, + Ycy: Ycy, + ycy: ycy, + yen: yen, + Yfr: Yfr, + yfr: yfr, + YIcy: YIcy, + yicy: yicy, + Yopf: Yopf, + yopf: yopf, + Yscr: Yscr, + yscr: yscr, + YUcy: YUcy, + yucy: yucy, + yuml: yuml, + Yuml: Yuml, + Zacute: Zacute, + zacute: zacute, + Zcaron: Zcaron, + zcaron: zcaron, + Zcy: Zcy, + zcy: zcy, + Zdot: Zdot, + zdot: zdot, + zeetrf: zeetrf, + ZeroWidthSpace: ZeroWidthSpace, + Zeta: Zeta, + zeta: zeta, + zfr: zfr, + Zfr: Zfr, + ZHcy: ZHcy, + zhcy: zhcy, + zigrarr: zigrarr, + zopf: zopf, + Zopf: Zopf, + Zscr: Zscr, + zscr: zscr, + zwj: zwj, + zwnj: zwnj, + 'default': entities + }); + + var require$$1 = getCjsExportFromNamespace(entities$1); + + var encodeTrie = createCommonjsModule(function (module, exports) { + var __importDefault = (commonjsGlobal && commonjsGlobal.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; + }; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.getTrie = exports.encodeHTMLTrieRe = exports.getCodePoint = void 0; + var entities_json_1 = __importDefault(require$$1); + function isHighSurrugate(c) { + return (c & 64512 /* Mask */) === 55296 /* High */; + } + // For compatibility with node < 4, we wrap `codePointAt` + exports.getCodePoint = + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition + String.prototype.codePointAt != null + ? function (str, index) { return str.codePointAt(index); } + : // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae + function (c, index) { + return isHighSurrugate(c.charCodeAt(index)) + ? (c.charCodeAt(index) - 55296 /* High */) * 0x400 + + c.charCodeAt(index + 1) - + 0xdc00 + + 0x10000 + : c.charCodeAt(index); + }; + var htmlTrie = getTrie(entities_json_1.default); + function encodeHTMLTrieRe(regExp, str) { + var _a; + var ret = ""; + var lastIdx = 0; + var match; + while ((match = regExp.exec(str)) !== null) { + var i = match.index; + var char = str.charCodeAt(i); + var next = htmlTrie.get(char); + if (next) { + if (next.next != null && i + 1 < str.length) { + var value = (_a = next.next.get(str.charCodeAt(i + 1))) === null || _a === void 0 ? void 0 : _a.value; + if (value != null) { + ret += str.substring(lastIdx, i) + value; + regExp.lastIndex += 1; + lastIdx = i + 2; + continue; + } + } + ret += str.substring(lastIdx, i) + next.value; + lastIdx = i + 1; + } + else { + ret += str.substring(lastIdx, i) + "&#x" + exports.getCodePoint(str, i).toString(16) + ";"; + // Increase by 1 if we have a surrogate pair + lastIdx = regExp.lastIndex += Number(isHighSurrugate(char)); + } + } + return ret + str.substr(lastIdx); + } + exports.encodeHTMLTrieRe = encodeHTMLTrieRe; + function getTrie(map) { + var _a, _b, _c, _d; + var trie = new Map(); + for (var _i = 0, _e = Object.keys(map); _i < _e.length; _i++) { + var value = _e[_i]; + var key = map[value]; + // Resolve the key + var lastMap = trie; + for (var i = 0; i < key.length - 1; i++) { + var char = key.charCodeAt(i); + var next = (_a = lastMap.get(char)) !== null && _a !== void 0 ? _a : {}; + lastMap.set(char, next); + lastMap = (_b = next.next) !== null && _b !== void 0 ? _b : (next.next = new Map()); + } + var val = (_c = lastMap.get(key.charCodeAt(key.length - 1))) !== null && _c !== void 0 ? _c : {}; + (_d = val.value) !== null && _d !== void 0 ? _d : (val.value = "&" + value + ";"); + lastMap.set(key.charCodeAt(key.length - 1), val); + } + return trie; + } + exports.getTrie = getTrie; + }); + + unwrapExports(encodeTrie); + var encodeTrie_1 = encodeTrie.getTrie; + var encodeTrie_2 = encodeTrie.encodeHTMLTrieRe; + var encodeTrie_3 = encodeTrie.getCodePoint; + + var require$$0 = getCjsExportFromNamespace(xml$1); + + var encode$1 = createCommonjsModule(function (module, exports) { + var __importDefault = (commonjsGlobal && commonjsGlobal.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; + }; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.escapeUTF8 = exports.escape = exports.encodeNonAsciiHTML = exports.encodeHTML = exports.encodeXML = void 0; + var xml_json_1 = __importDefault(require$$0); + + var entities_json_1 = __importDefault(require$$1); + var htmlReplacer = getCharRegExp(entities_json_1.default, true); + var xmlReplacer = getCharRegExp(xml_json_1.default, true); + var xmlInvalidChars = getCharRegExp(xml_json_1.default, false); + var xmlCodeMap = new Map(Object.keys(xml_json_1.default).map(function (k) { return [ + xml_json_1.default[k].charCodeAt(0), + "&" + k + ";", + ]; })); + /** + * Encodes all non-ASCII characters, as well as characters not valid in XML + * documents using XML entities. + * + * If a character has no equivalent entity, a + * numeric hexadecimal reference (eg. `ü`) will be used. + */ + function encodeXML(str) { + var ret = ""; + var lastIdx = 0; + var match; + while ((match = xmlReplacer.exec(str)) !== null) { + var i = match.index; + var char = str.charCodeAt(i); + var next = xmlCodeMap.get(char); + if (next) { + ret += str.substring(lastIdx, i) + next; + lastIdx = i + 1; + } + else { + ret += str.substring(lastIdx, i) + "&#x" + encodeTrie.getCodePoint(str, i).toString(16) + ";"; + // Increase by 1 if we have a surrogate pair + lastIdx = xmlReplacer.lastIndex += Number((char & 65408) === 0xd800); + } + } + return ret + str.substr(lastIdx); + } + exports.encodeXML = encodeXML; + /** + * Encodes all entities and non-ASCII characters in the input. + * + * This includes characters that are valid ASCII characters in HTML documents. + * For example `#` will be encoded as `#`. To get a more compact output, + * consider using the `encodeNonAsciiHTML` function. + * + * If a character has no equivalent entity, a + * numeric hexadecimal reference (eg. `ü`) will be used. + */ + function encodeHTML(data) { + return encodeTrie.encodeHTMLTrieRe(htmlReplacer, data); + } + exports.encodeHTML = encodeHTML; + /** + * Encodes all non-ASCII characters, as well as characters not valid in HTML + * documents using HTML entities. + * + * If a character has no equivalent entity, a + * numeric hexadecimal reference (eg. `ü`) will be used. + */ + function encodeNonAsciiHTML(data) { + return encodeTrie.encodeHTMLTrieRe(xmlReplacer, data); + } + exports.encodeNonAsciiHTML = encodeNonAsciiHTML; + function getCharRegExp(map, nonAscii) { + // Collect the start characters of all entities + var chars = Object.keys(map) + .map(function (k) { return "\\" + map[k].charAt(0); }) + .filter(function (v) { return !nonAscii || v.charCodeAt(1) < 128; }) + .sort(function (a, b) { return a.charCodeAt(1) - b.charCodeAt(1); }) + // Remove duplicates + .filter(function (v, i, a) { return v !== a[i + 1]; }); + // Add ranges to single characters. + for (var start = 0; start < chars.length - 1; start++) { + // Find the end of a run of characters + var end = start; + while (end < chars.length - 1 && + chars[end].charCodeAt(1) + 1 === chars[end + 1].charCodeAt(1)) { + end += 1; + } + var count = 1 + end - start; + // We want to replace at least three characters + if (count < 3) + continue; + chars.splice(start, count, chars[start] + "-" + chars[end]); + } + return new RegExp("[" + chars.join("") + (nonAscii ? "\\x80-\\uFFFF" : "") + "]", "g"); + } + /** + * Encodes all non-ASCII characters, as well as characters not valid in XML + * documents using numeric hexadecimal reference (eg. `ü`). + * + * Have a look at `escapeUTF8` if you want a more concise output at the expense + * of reduced transportability. + * + * @param data String to escape. + */ + exports.escape = encodeXML; + /** + * Encodes all characters not valid in XML documents using XML entities. + * + * Note that the output will be character-set dependent. + * + * @param data String to escape. + */ + function escapeUTF8(data) { + var match; + var lastIdx = 0; + var result = ""; + while ((match = xmlInvalidChars.exec(data))) { + if (lastIdx !== match.index) { + result += data.substring(lastIdx, match.index); + } + // We know that this chararcter will be in `inverseXML` + result += xmlCodeMap.get(match[0].charCodeAt(0)); + // Every match will be of length 1 + lastIdx = match.index + 1; + } + return result + data.substring(lastIdx); + } + exports.escapeUTF8 = escapeUTF8; + }); + + unwrapExports(encode$1); + var encode_1$1 = encode$1.escapeUTF8; + var encode_2 = encode$1.escape; + var encode_3 = encode$1.encodeNonAsciiHTML; + var encode_4 = encode$1.encodeHTML; + var encode_5 = encode$1.encodeXML; + + var lib = createCommonjsModule(function (module, exports) { + Object.defineProperty(exports, "__esModule", { value: true }); + exports.decodeXMLStrict = exports.decodeHTML5Strict = exports.decodeHTML4Strict = exports.decodeHTML5 = exports.decodeHTML4 = exports.decodeHTMLStrict = exports.decodeHTML = exports.decodeXML = exports.encodeHTML5 = exports.encodeHTML4 = exports.escapeUTF8 = exports.escape = exports.encodeNonAsciiHTML = exports.encodeHTML = exports.encodeXML = exports.encode = exports.decodeStrict = exports.decode = exports.EncodingMode = exports.DecodingMode = exports.EntityLevel = void 0; + + + /** The level of entities to support. */ + var EntityLevel; + (function (EntityLevel) { + /** Support only XML entities. */ + EntityLevel[EntityLevel["XML"] = 0] = "XML"; + /** Support HTML entities, which are a superset of XML entities. */ + EntityLevel[EntityLevel["HTML"] = 1] = "HTML"; + })(EntityLevel = exports.EntityLevel || (exports.EntityLevel = {})); + /** Determines whether some entities are allowed to be written without a trailing `;`. */ + var DecodingMode; + (function (DecodingMode) { + /** Support legacy HTML entities. */ + DecodingMode[DecodingMode["Legacy"] = 0] = "Legacy"; + /** Do not support legacy HTML entities. */ + DecodingMode[DecodingMode["Strict"] = 1] = "Strict"; + })(DecodingMode = exports.DecodingMode || (exports.DecodingMode = {})); + var EncodingMode; + (function (EncodingMode) { + /** + * The output is UTF-8 encoded. Only characters that need escaping within + * HTML will be escaped. + */ + EncodingMode[EncodingMode["UTF8"] = 0] = "UTF8"; + /** + * The output consists only of ASCII characters. Characters that need + * escaping within HTML, and characters that aren't ASCII characters will + * be escaped. + */ + EncodingMode[EncodingMode["ASCII"] = 1] = "ASCII"; + /** + * Encode all characters that have an equivalent entity, as well as all + * characters that are not ASCII characters. + */ + EncodingMode[EncodingMode["Extensive"] = 2] = "Extensive"; + })(EncodingMode = exports.EncodingMode || (exports.EncodingMode = {})); + /** + * Decodes a string with entities. + * + * @param data String to decode. + * @param options Decoding options. + */ + function decode$1(data, options) { + if (options === void 0) { options = EntityLevel.XML; } + var opts = typeof options === "number" ? { level: options } : options; + if (opts.level === EntityLevel.HTML) { + if (opts.mode === DecodingMode.Strict) { + return decode.decodeHTMLStrict(data); + } + return decode.decodeHTML(data); + } + return decode.decodeXML(data); + } + exports.decode = decode$1; + /** + * Decodes a string with entities. Does not allow missing trailing semicolons for entities. + * + * @param data String to decode. + * @param options Decoding options. + * @deprecated Use `decode` with the `mode` set to `Strict`. + */ + function decodeStrict(data, options) { + if (options === void 0) { options = EntityLevel.XML; } + var opts = typeof options === "number" ? { level: options } : options; + if (opts.level === EntityLevel.HTML) { + if (opts.mode === DecodingMode.Legacy) { + return decode.decodeHTML(data); + } + return decode.decodeHTMLStrict(data); + } + return decode.decodeXML(data); + } + exports.decodeStrict = decodeStrict; + /** + * Encodes a string with entities. + * + * @param data String to encode. + * @param options Encoding options. + */ + function encode(data, options) { + if (options === void 0) { options = EntityLevel.XML; } + var opts = typeof options === "number" ? { level: options } : options; + // Mode `UTF8` just escapes XML entities + if (opts.mode === EncodingMode.UTF8) + return encode$1.escapeUTF8(data); + if (opts.level === EntityLevel.HTML) { + if (opts.mode === EncodingMode.ASCII) { + return encode$1.encodeNonAsciiHTML(data); + } + return encode$1.encodeHTML(data); + } + // ASCII and Extensive are equivalent + return encode$1.encodeXML(data); + } + exports.encode = encode; + var encode_2 = encode$1; + Object.defineProperty(exports, "encodeXML", { enumerable: true, get: function () { return encode_2.encodeXML; } }); + Object.defineProperty(exports, "encodeHTML", { enumerable: true, get: function () { return encode_2.encodeHTML; } }); + Object.defineProperty(exports, "encodeNonAsciiHTML", { enumerable: true, get: function () { return encode_2.encodeNonAsciiHTML; } }); + Object.defineProperty(exports, "escape", { enumerable: true, get: function () { return encode_2.escape; } }); + Object.defineProperty(exports, "escapeUTF8", { enumerable: true, get: function () { return encode_2.escapeUTF8; } }); + // Legacy aliases (deprecated) + Object.defineProperty(exports, "encodeHTML4", { enumerable: true, get: function () { return encode_2.encodeHTML; } }); + Object.defineProperty(exports, "encodeHTML5", { enumerable: true, get: function () { return encode_2.encodeHTML; } }); + var decode_2 = decode; + Object.defineProperty(exports, "decodeXML", { enumerable: true, get: function () { return decode_2.decodeXML; } }); + Object.defineProperty(exports, "decodeHTML", { enumerable: true, get: function () { return decode_2.decodeHTML; } }); + Object.defineProperty(exports, "decodeHTMLStrict", { enumerable: true, get: function () { return decode_2.decodeHTMLStrict; } }); + // Legacy aliases (deprecated) + Object.defineProperty(exports, "decodeHTML4", { enumerable: true, get: function () { return decode_2.decodeHTML; } }); + Object.defineProperty(exports, "decodeHTML5", { enumerable: true, get: function () { return decode_2.decodeHTML; } }); + Object.defineProperty(exports, "decodeHTML4Strict", { enumerable: true, get: function () { return decode_2.decodeHTMLStrict; } }); + Object.defineProperty(exports, "decodeHTML5Strict", { enumerable: true, get: function () { return decode_2.decodeHTMLStrict; } }); + Object.defineProperty(exports, "decodeXMLStrict", { enumerable: true, get: function () { return decode_2.decodeXML; } }); + }); + + unwrapExports(lib); + var lib_1 = lib.decodeXMLStrict; + var lib_2 = lib.decodeHTML5Strict; + var lib_3 = lib.decodeHTML4Strict; + var lib_4 = lib.decodeHTML5; + var lib_5 = lib.decodeHTML4; + var lib_6 = lib.decodeHTMLStrict; + var lib_7 = lib.decodeHTML; + var lib_8 = lib.decodeXML; + var lib_9 = lib.encodeHTML5; + var lib_10 = lib.encodeHTML4; + var lib_11 = lib.escapeUTF8; + var lib_12 = lib.escape; + var lib_13 = lib.encodeNonAsciiHTML; + var lib_14 = lib.encodeHTML; + var lib_15 = lib.encodeXML; + var lib_16 = lib.encode; + var lib_17 = lib.decodeStrict; + var lib_18 = lib.decode; + var lib_19 = lib.EncodingMode; + var lib_20 = lib.DecodingMode; + var lib_21 = lib.EntityLevel; + + var C_BACKSLASH = 92; + + var ENTITY = "&(?:#x[a-f0-9]{1,6}|#[0-9]{1,7}|[a-z][a-z0-9]{1,31});"; + + var TAGNAME = "[A-Za-z][A-Za-z0-9-]*"; + var ATTRIBUTENAME = "[a-zA-Z_:][a-zA-Z0-9:._-]*"; + var UNQUOTEDVALUE = "[^\"'=<>`\\x00-\\x20]+"; + var SINGLEQUOTEDVALUE = "'[^']*'"; + var DOUBLEQUOTEDVALUE = '"[^"]*"'; + var ATTRIBUTEVALUE = + "(?:" + + UNQUOTEDVALUE + + "|" + + SINGLEQUOTEDVALUE + + "|" + + DOUBLEQUOTEDVALUE + + ")"; + var ATTRIBUTEVALUESPEC = "(?:" + "\\s*=" + "\\s*" + ATTRIBUTEVALUE + ")"; + var ATTRIBUTE = "(?:" + "\\s+" + ATTRIBUTENAME + ATTRIBUTEVALUESPEC + "?)"; + var OPENTAG = "<" + TAGNAME + ATTRIBUTE + "*" + "\\s*/?>"; + var CLOSETAG = "]"; + var HTMLCOMMENT = "||"; + var PROCESSINGINSTRUCTION = "[<][?][\\s\\S]*?[?][>]"; + var DECLARATION = "]*>"; + var CDATA = ""; + var HTMLTAG = + "(?:" + + OPENTAG + + "|" + + CLOSETAG + + "|" + + HTMLCOMMENT + + "|" + + PROCESSINGINSTRUCTION + + "|" + + DECLARATION + + "|" + + CDATA + + ")"; + var reHtmlTag = new RegExp("^" + HTMLTAG); + + var reBackslashOrAmp = /[\\&]/; + + var ESCAPABLE = "[!\"#$%&'()*+,./:;<=>?@[\\\\\\]^_`{|}~-]"; + + var reEntityOrEscapedChar = new RegExp("\\\\" + ESCAPABLE + "|" + ENTITY, "gi"); + + var XMLSPECIAL = '[&<>"]'; + + var reXmlSpecial = new RegExp(XMLSPECIAL, "g"); + + var unescapeChar = function(s) { + if (s.charCodeAt(0) === C_BACKSLASH) { + return s.charAt(1); + } else { + return lib_6(s); + } + }; + + // Replace entities and backslash escapes with literal characters. + var unescapeString = function(s) { + if (reBackslashOrAmp.test(s)) { + return s.replace(reEntityOrEscapedChar, unescapeChar); + } else { + return s; + } + }; + + var normalizeURI = function(uri) { + try { + return encode_1(uri); + } catch (err) { + return uri; + } + }; + + var replaceUnsafeChar = function(s) { + switch (s) { + case "&": + return "&"; + case "<": + return "<"; + case ">": + return ">"; + case '"': + return """; + default: + return s; + } + }; + + var escapeXml = function(s) { + if (reXmlSpecial.test(s)) { + return s.replace(reXmlSpecial, replaceUnsafeChar); + } else { + return s; + } + }; + + // derived from https://github.com/mathiasbynens/String.fromCodePoint + /*! http://mths.be/fromcodepoint v0.2.1 by @mathias */ + + var _fromCodePoint; + + function fromCodePoint(_) { + return _fromCodePoint(_); + } + + if (String.fromCodePoint) { + _fromCodePoint = function(_) { + try { + return String.fromCodePoint(_); + } catch (e) { + if (e instanceof RangeError) { + return String.fromCharCode(0xfffd); + } + throw e; + } + }; + } else { + var stringFromCharCode = String.fromCharCode; + var floor = Math.floor; + _fromCodePoint = function() { + var MAX_SIZE = 0x4000; + var codeUnits = []; + var highSurrogate; + var lowSurrogate; + var index = -1; + var length = arguments.length; + if (!length) { + return ""; + } + var result = ""; + while (++index < length) { + var codePoint = Number(arguments[index]); + if ( + !isFinite(codePoint) || // `NaN`, `+Infinity`, or `-Infinity` + codePoint < 0 || // not a valid Unicode code point + codePoint > 0x10ffff || // not a valid Unicode code point + floor(codePoint) !== codePoint // not an integer + ) { + return String.fromCharCode(0xfffd); + } + if (codePoint <= 0xffff) { + // BMP code point + codeUnits.push(codePoint); + } else { + // Astral code point; split in surrogate halves + // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae + codePoint -= 0x10000; + highSurrogate = (codePoint >> 10) + 0xd800; + lowSurrogate = (codePoint % 0x400) + 0xdc00; + codeUnits.push(highSurrogate, lowSurrogate); + } + if (index + 1 === length || codeUnits.length > MAX_SIZE) { + result += stringFromCharCode.apply(null, codeUnits); + codeUnits.length = 0; + } + } + return result; + }; + } + + var normalizeURI$1 = normalizeURI; + var unescapeString$1 = unescapeString; + + // Constants for character codes: + + var C_NEWLINE = 10; + var C_ASTERISK = 42; + var C_UNDERSCORE = 95; + var C_BACKTICK = 96; + var C_OPEN_BRACKET = 91; + var C_CLOSE_BRACKET = 93; + var C_LESSTHAN = 60; + var C_BANG = 33; + var C_BACKSLASH$1 = 92; + var C_AMPERSAND = 38; + var C_OPEN_PAREN = 40; + var C_CLOSE_PAREN = 41; + var C_COLON = 58; + var C_SINGLEQUOTE = 39; + var C_DOUBLEQUOTE = 34; + + // Some regexps used in inline parser: + + var ESCAPABLE$1 = ESCAPABLE; + var ESCAPED_CHAR = "\\\\" + ESCAPABLE$1; + + var ENTITY$1 = ENTITY; + var reHtmlTag$1 = reHtmlTag; + + var rePunctuation = new RegExp( + /^[!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~\p{P}\p{S}]/u); + + var reLinkTitle = new RegExp( + '^(?:"(' + + ESCAPED_CHAR + + '|\\\\[^\\\\]' + + '|[^\\\\"\\x00])*"' + + "|" + + "'(" + + ESCAPED_CHAR + + '|\\\\[^\\\\]' + + "|[^\\\\'\\x00])*'" + + "|" + + "\\((" + + ESCAPED_CHAR + + '|\\\\[^\\\\]' + + "|[^\\\\()\\x00])*\\))" + ); + + var reLinkDestinationBraces = /^(?:<(?:[^<>\n\\\x00]|\\.)*>)/; + + var reEscapable = new RegExp("^" + ESCAPABLE$1); + + var reEntityHere = new RegExp("^" + ENTITY$1, "i"); + + var reTicks = /`+/; + + var reTicksHere = /^`+/; + + var reEllipses = /\.\.\./g; + + var reDash = /--+/g; + + var reEmailAutolink = /^<([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])?)*)>/; + + var reAutolink = /^<[A-Za-z][A-Za-z0-9.+-]{1,31}:[^<>\x00-\x20]*>/i; + + var reSpnl = /^ *(?:\n *)?/; + + var reWhitespaceChar = /^[ \t\n\x0b\x0c\x0d]/; + + var reUnicodeWhitespaceChar = /^\s/; + + var reFinalSpace = / *$/; + + var reInitialSpace = /^ */; + + var reSpaceAtEndOfLine = /^ *(?:\n|$)/; + + var reLinkLabel = /^\[(?:[^\\\[\]]|\\.){0,1000}\]/s; + + // Matches a string of non-special characters. + var reMain = /^[^\n`\[\]\\!<&*_'"]+/m; + + var text = function(s) { + var node = new Node("text"); + node._literal = s; + return node; + }; + + // normalize a reference in reference link (remove []s, trim, + // collapse internal space, unicode case fold. + // See commonmark/commonmark.js#168. + var normalizeReference = function(string) { + return string + .slice(1, string.length - 1) + .trim() + .replace(/[ \t\r\n]+/g, " ") + .toLowerCase() + .toUpperCase(); + }; + + // INLINE PARSER + + // These are methods of an InlineParser object, defined below. + // An InlineParser keeps track of a subject (a string to be + // parsed) and a position in that subject. + + // If re matches at current position in the subject, advance + // position in subject and return the match; otherwise return null. + var match = function(re) { + var m = re.exec(this.subject.slice(this.pos)); + if (m === null) { + return null; + } else { + this.pos += m.index + m[0].length; + return m[0]; + } + }; + + // Returns the code for the character at the current subject position, or -1 + // there are no more characters. + var peek = function() { + if (this.pos < this.subject.length) { + return this.subject.charCodeAt(this.pos); + } else { + return -1; + } + }; + + // Parse zero or more space characters, including at most one newline + var spnl = function() { + this.match(reSpnl); + return true; + }; + + // All of the parsers below try to match something at the current position + // in the subject. If they succeed in matching anything, they + // return the inline matched, advancing the subject. + + // Attempt to parse backticks, adding either a backtick code span or a + // literal sequence of backticks. + var parseBackticks = function(block) { + var ticks = this.match(reTicksHere); + if (ticks === null) { + return false; + } + var afterOpenTicks = this.pos; + var matched; + var node; + var contents; + while ((matched = this.match(reTicks)) !== null) { + if (matched === ticks) { + node = new Node("code"); + contents = this.subject + .slice(afterOpenTicks, this.pos - ticks.length) + .replace(/\n/gm, " "); + if ( + contents.length > 0 && + contents.match(/[^ ]/) !== null && + contents[0] == " " && + contents[contents.length - 1] == " " + ) { + node._literal = contents.slice(1, contents.length - 1); + } else { + node._literal = contents; + } + block.appendChild(node); + return true; + } + } + // If we got here, we didn't match a closing backtick sequence. + this.pos = afterOpenTicks; + block.appendChild(text(ticks)); + return true; + }; + + // Parse a backslash-escaped special character, adding either the escaped + // character, a hard line break (if the backslash is followed by a newline), + // or a literal backslash to the block's children. Assumes current character + // is a backslash. + var parseBackslash = function(block) { + var subj = this.subject; + var node; + this.pos += 1; + if (this.peek() === C_NEWLINE) { + this.pos += 1; + node = new Node("linebreak"); + block.appendChild(node); + } else if (reEscapable.test(subj.charAt(this.pos))) { + block.appendChild(text(subj.charAt(this.pos))); + this.pos += 1; + } else { + block.appendChild(text("\\")); + } + return true; + }; + + // Attempt to parse an autolink (URL or email in pointy brackets). + var parseAutolink = function(block) { + var m; + var dest; + var node; + if ((m = this.match(reEmailAutolink))) { + dest = m.slice(1, m.length - 1); + node = new Node("link"); + node._destination = normalizeURI$1("mailto:" + dest); + node._title = ""; + node.appendChild(text(dest)); + block.appendChild(node); + return true; + } else if ((m = this.match(reAutolink))) { + dest = m.slice(1, m.length - 1); + node = new Node("link"); + node._destination = normalizeURI$1(dest); + node._title = ""; + node.appendChild(text(dest)); + block.appendChild(node); + return true; + } else { + return false; + } + }; + + // Attempt to parse a raw HTML tag. + var parseHtmlTag = function(block) { + var m = this.match(reHtmlTag$1); + if (m === null) { + return false; + } else { + var node = new Node("html_inline"); + node._literal = m; + block.appendChild(node); + return true; + } + }; + + // Scan a sequence of characters with code cc, and return information about + // the number of delimiters and whether they are positioned such that + // they can open and/or close emphasis or strong emphasis. A utility + // function for strong/emph parsing. + var scanDelims = function(cc) { + var numdelims = 0; + var char_before, char_after, cc_after; + var startpos = this.pos; + var left_flanking, right_flanking, can_open, can_close; + var after_is_whitespace, + after_is_punctuation, + before_is_whitespace, + before_is_punctuation; + + if (cc === C_SINGLEQUOTE || cc === C_DOUBLEQUOTE) { + numdelims++; + this.pos++; + } else { + while (this.peek() === cc) { + numdelims++; + this.pos++; + } + } + + if (numdelims === 0) { + return null; + } + + char_before = startpos === 0 ? "\n" : this.subject.charAt(startpos - 1); + + cc_after = this.peek(); + if (cc_after === -1) { + char_after = "\n"; + } else { + char_after = fromCodePoint(cc_after); + } + + after_is_whitespace = reUnicodeWhitespaceChar.test(char_after); + after_is_punctuation = rePunctuation.test(char_after); + before_is_whitespace = reUnicodeWhitespaceChar.test(char_before); + before_is_punctuation = rePunctuation.test(char_before); + + left_flanking = + !after_is_whitespace && + (!after_is_punctuation || + before_is_whitespace || + before_is_punctuation); + right_flanking = + !before_is_whitespace && + (!before_is_punctuation || after_is_whitespace || after_is_punctuation); + if (cc === C_UNDERSCORE) { + can_open = left_flanking && (!right_flanking || before_is_punctuation); + can_close = right_flanking && (!left_flanking || after_is_punctuation); + } else if (cc === C_SINGLEQUOTE || cc === C_DOUBLEQUOTE) { + can_open = left_flanking && !right_flanking; + can_close = right_flanking; + } else { + can_open = left_flanking; + can_close = right_flanking; + } + this.pos = startpos; + return { numdelims: numdelims, can_open: can_open, can_close: can_close }; + }; + + // Handle a delimiter marker for emphasis or a quote. + var handleDelim = function(cc, block) { + var res = this.scanDelims(cc); + if (!res) { + return false; + } + var numdelims = res.numdelims; + var startpos = this.pos; + var contents; + + this.pos += numdelims; + if (cc === C_SINGLEQUOTE) { + contents = "\u2019"; + } else if (cc === C_DOUBLEQUOTE) { + contents = "\u201C"; + } else { + contents = this.subject.slice(startpos, this.pos); + } + var node = text(contents); + block.appendChild(node); + + // Add entry to stack for this opener + if ( + (res.can_open || res.can_close) && + (this.options.smart || (cc !== C_SINGLEQUOTE && cc !== C_DOUBLEQUOTE)) + ) { + this.delimiters = { + cc: cc, + numdelims: numdelims, + origdelims: numdelims, + node: node, + previous: this.delimiters, + next: null, + can_open: res.can_open, + can_close: res.can_close + }; + if (this.delimiters.previous !== null) { + this.delimiters.previous.next = this.delimiters; + } + } + + return true; + }; + + var removeDelimiter = function(delim) { + if (delim.previous !== null) { + delim.previous.next = delim.next; + } + if (delim.next === null) { + // top of stack + this.delimiters = delim.previous; + } else { + delim.next.previous = delim.previous; + } + }; + + var removeDelimitersBetween = function(bottom, top) { + if (bottom.next !== top) { + bottom.next = top; + top.previous = bottom; + } + }; + + var processEmphasis = function(stack_bottom) { + var opener, closer, old_closer; + var opener_inl, closer_inl; + var tempstack; + var use_delims; + var tmp, next; + var opener_found; + var openers_bottom = []; + var openers_bottom_index; + var odd_match = false; + + for (var i = 0; i < 14; i++) { + openers_bottom[i] = stack_bottom; + } + // find first closer above stack_bottom: + closer = this.delimiters; + while (closer !== null && closer.previous !== stack_bottom) { + closer = closer.previous; + } + // move forward, looking for closers, and handling each + while (closer !== null) { + var closercc = closer.cc; + if (!closer.can_close) { + closer = closer.next; + } else { + // found emphasis closer. now look back for first matching opener: + opener = closer.previous; + opener_found = false; + switch (closercc) { + case C_SINGLEQUOTE: + openers_bottom_index = 0; + break; + case C_DOUBLEQUOTE: + openers_bottom_index = 1; + break; + case C_UNDERSCORE: + openers_bottom_index = 2 + (closer.can_open ? 3 : 0) + + (closer.origdelims % 3); + break; + case C_ASTERISK: + openers_bottom_index = 8 + (closer.can_open ? 3 : 0) + + (closer.origdelims % 3); + break; + } + while ( + opener !== null && + opener !== stack_bottom && + opener !== openers_bottom[openers_bottom_index] + ) { + odd_match = + (closer.can_open || opener.can_close) && + closer.origdelims % 3 !== 0 && + (opener.origdelims + closer.origdelims) % 3 === 0; + if (opener.cc === closer.cc && opener.can_open && !odd_match) { + opener_found = true; + break; + } + opener = opener.previous; + } + old_closer = closer; + + if (closercc === C_ASTERISK || closercc === C_UNDERSCORE) { + if (!opener_found) { + closer = closer.next; + } else { + // calculate actual number of delimiters used from closer + use_delims = + closer.numdelims >= 2 && opener.numdelims >= 2 ? 2 : 1; + + opener_inl = opener.node; + closer_inl = closer.node; + + // remove used delimiters from stack elts and inlines + opener.numdelims -= use_delims; + closer.numdelims -= use_delims; + opener_inl._literal = opener_inl._literal.slice( + 0, + opener_inl._literal.length - use_delims + ); + closer_inl._literal = closer_inl._literal.slice( + 0, + closer_inl._literal.length - use_delims + ); + + // build contents for new emph element + var emph = new Node(use_delims === 1 ? "emph" : "strong"); + + tmp = opener_inl._next; + while (tmp && tmp !== closer_inl) { + next = tmp._next; + tmp.unlink(); + emph.appendChild(tmp); + tmp = next; + } + + opener_inl.insertAfter(emph); + + // remove elts between opener and closer in delimiters stack + removeDelimitersBetween(opener, closer); + + // if opener has 0 delims, remove it and the inline + if (opener.numdelims === 0) { + opener_inl.unlink(); + this.removeDelimiter(opener); + } + + if (closer.numdelims === 0) { + closer_inl.unlink(); + tempstack = closer.next; + this.removeDelimiter(closer); + closer = tempstack; + } + } + } else if (closercc === C_SINGLEQUOTE) { + closer.node._literal = "\u2019"; + if (opener_found) { + opener.node._literal = "\u2018"; + } + closer = closer.next; + } else if (closercc === C_DOUBLEQUOTE) { + closer.node._literal = "\u201D"; + if (opener_found) { + opener.node.literal = "\u201C"; + } + closer = closer.next; + } + if (!opener_found) { + // Set lower bound for future searches for openers: + openers_bottom[openers_bottom_index] = + old_closer.previous; + if (!old_closer.can_open) { + // We can remove a closer that can't be an opener, + // once we've seen there's no matching opener: + this.removeDelimiter(old_closer); + } + } + } + } + + // remove all delimiters + while (this.delimiters !== null && this.delimiters !== stack_bottom) { + this.removeDelimiter(this.delimiters); + } + }; + + // Attempt to parse link title (sans quotes), returning the string + // or null if no match. + var parseLinkTitle = function() { + var title = this.match(reLinkTitle); + if (title === null) { + return null; + } else { + // chop off quotes from title and unescape: + return unescapeString$1(title.slice(1, -1)); + } + }; + + // Attempt to parse link destination, returning the string or + // null if no match. + var parseLinkDestination = function() { + var res = this.match(reLinkDestinationBraces); + if (res === null) { + if (this.peek() === C_LESSTHAN) { + return null; + } + // TODO handrolled parser; res should be null or the string + var savepos = this.pos; + var openparens = 0; + var c; + while ((c = this.peek()) !== -1) { + if ( + c === C_BACKSLASH$1 && + reEscapable.test(this.subject.charAt(this.pos + 1)) + ) { + this.pos += 1; + if (this.peek() !== -1) { + this.pos += 1; + } + } else if (c === C_OPEN_PAREN) { + this.pos += 1; + openparens += 1; + } else if (c === C_CLOSE_PAREN) { + if (openparens < 1) { + break; + } else { + this.pos += 1; + openparens -= 1; + } + } else if (reWhitespaceChar.exec(fromCodePoint(c)) !== null) { + break; + } else { + this.pos += 1; + } + } + if (this.pos === savepos && c !== C_CLOSE_PAREN) { + return null; + } + if (openparens !== 0) { + return null; + } + res = this.subject.slice(savepos, this.pos); + return normalizeURI$1(unescapeString$1(res)); + } else { + // chop off surrounding <..>: + return normalizeURI$1(unescapeString$1(res.slice(1, -1))); + } + }; + + // Attempt to parse a link label, returning number of characters parsed. + var parseLinkLabel = function() { + var m = this.match(reLinkLabel); + if (m === null || m.length > 1001) { + return 0; + } else { + return m.length; + } + }; + + // Add open bracket to delimiter stack and add a text node to block's children. + var parseOpenBracket = function(block) { + var startpos = this.pos; + this.pos += 1; + + var node = text("["); + block.appendChild(node); + + // Add entry to stack for this opener + this.addBracket(node, startpos, false); + return true; + }; + + // IF next character is [, and ! delimiter to delimiter stack and + // add a text node to block's children. Otherwise just add a text node. + var parseBang = function(block) { + var startpos = this.pos; + this.pos += 1; + if (this.peek() === C_OPEN_BRACKET) { + this.pos += 1; + + var node = text("!["); + block.appendChild(node); + + // Add entry to stack for this opener + this.addBracket(node, startpos + 1, true); + } else { + block.appendChild(text("!")); + } + return true; + }; + + // Try to match close bracket against an opening in the delimiter + // stack. Add either a link or image, or a plain [ character, + // to block's children. If there is a matching delimiter, + // remove it from the delimiter stack. + var parseCloseBracket = function(block) { + var startpos; + var is_image; + var dest; + var title; + var matched = false; + var reflabel; + var opener; + + this.pos += 1; + startpos = this.pos; + + // get last [ or ![ + opener = this.brackets; + + if (opener === null) { + // no matched opener, just return a literal + block.appendChild(text("]")); + return true; + } + + if (!opener.active) { + // no matched opener, just return a literal + block.appendChild(text("]")); + // take opener off brackets stack + this.removeBracket(); + return true; + } + + // If we got here, open is a potential opener + is_image = opener.image; + + // Check to see if we have a link/image + + var savepos = this.pos; + + // Inline link? + if (this.peek() === C_OPEN_PAREN) { + this.pos++; + if ( + this.spnl() && + (dest = this.parseLinkDestination()) !== null && + this.spnl() && + // make sure there's a space before the title: + ((reWhitespaceChar.test(this.subject.charAt(this.pos - 1)) && + (title = this.parseLinkTitle())) || + true) && + this.spnl() && + this.peek() === C_CLOSE_PAREN + ) { + this.pos += 1; + matched = true; + } else { + this.pos = savepos; + } + } + + if (!matched) { + // Next, see if there's a link label + var beforelabel = this.pos; + var n = this.parseLinkLabel(); + if (n > 2) { + reflabel = this.subject.slice(beforelabel, beforelabel + n); + } else if (!opener.bracketAfter) { + // Empty or missing second label means to use the first label as the reference. + // The reference must not contain a bracket. If we know there's a bracket, we don't even bother checking it. + reflabel = this.subject.slice(opener.index, startpos); + } + if (n === 0) { + // If shortcut reference link, rewind before spaces we skipped. + this.pos = savepos; + } + + if (reflabel) { + // lookup rawlabel in refmap + var link = this.refmap[normalizeReference(reflabel)]; + if (link) { + dest = link.destination; + title = link.title; + matched = true; + } + } + } + + if (matched) { + var node = new Node(is_image ? "image" : "link"); + node._destination = dest; + node._title = title || ""; + + var tmp, next; + tmp = opener.node._next; + while (tmp) { + next = tmp._next; + tmp.unlink(); + node.appendChild(tmp); + tmp = next; + } + block.appendChild(node); + this.processEmphasis(opener.previousDelimiter); + this.removeBracket(); + opener.node.unlink(); + + // We remove this bracket and processEmphasis will remove later delimiters. + // Now, for a link, we also deactivate earlier link openers. + // (no links in links) + if (!is_image) { + opener = this.brackets; + while (opener !== null) { + if (!opener.image) { + opener.active = false; // deactivate this opener + } + opener = opener.previous; + } + } + + return true; + } else { + // no match + + this.removeBracket(); // remove this opener from stack + this.pos = startpos; + block.appendChild(text("]")); + return true; + } + }; + + var addBracket = function(node, index, image) { + if (this.brackets !== null) { + this.brackets.bracketAfter = true; + } + this.brackets = { + node: node, + previous: this.brackets, + previousDelimiter: this.delimiters, + index: index, + image: image, + active: true + }; + }; + + var removeBracket = function() { + this.brackets = this.brackets.previous; + }; + + // Attempt to parse an entity. + var parseEntity = function(block) { + var m; + if ((m = this.match(reEntityHere))) { + block.appendChild(text(lib_6(m))); + return true; + } else { + return false; + } + }; + + // Parse a run of ordinary characters, or a single character with + // a special meaning in markdown, as a plain string. + var parseString = function(block) { + var m; + if ((m = this.match(reMain))) { + if (this.options.smart) { + block.appendChild( + text( + m + .replace(reEllipses, "\u2026") + .replace(reDash, function(chars) { + var enCount = 0; + var emCount = 0; + if (chars.length % 3 === 0) { + // If divisible by 3, use all em dashes + emCount = chars.length / 3; + } else if (chars.length % 2 === 0) { + // If divisible by 2, use all en dashes + enCount = chars.length / 2; + } else if (chars.length % 3 === 2) { + // If 2 extra dashes, use en dash for last 2; em dashes for rest + enCount = 1; + emCount = (chars.length - 2) / 3; + } else { + // Use en dashes for last 4 hyphens; em dashes for rest + enCount = 2; + emCount = (chars.length - 4) / 3; + } + return ( + "\u2014".repeat(emCount) + + "\u2013".repeat(enCount) + ); + }) + ) + ); + } else { + block.appendChild(text(m)); + } + return true; + } else { + return false; + } + }; + + // Parse a newline. If it was preceded by two spaces, return a hard + // line break; otherwise a soft line break. + var parseNewline = function(block) { + this.pos += 1; // assume we're at a \n + // check previous node for trailing spaces + var lastc = block._lastChild; + if ( + lastc && + lastc.type === "text" && + lastc._literal[lastc._literal.length - 1] === " " + ) { + var hardbreak = lastc._literal[lastc._literal.length - 2] === " "; + lastc._literal = lastc._literal.replace(reFinalSpace, ""); + block.appendChild(new Node(hardbreak ? "linebreak" : "softbreak")); + } else { + block.appendChild(new Node("softbreak")); + } + this.match(reInitialSpace); // gobble leading spaces in next line + return true; + }; + + // Attempt to parse a link reference, modifying refmap. + var parseReference = function(s, refmap) { + this.subject = s; + this.pos = 0; + var rawlabel; + var dest; + var title; + var matchChars; + var startpos = this.pos; + + // label: + matchChars = this.parseLinkLabel(); + if (matchChars === 0) { + return 0; + } else { + rawlabel = this.subject.slice(0, matchChars); + } + + // colon: + if (this.peek() === C_COLON) { + this.pos++; + } else { + this.pos = startpos; + return 0; + } + + // link url + this.spnl(); + + dest = this.parseLinkDestination(); + if (dest === null) { + this.pos = startpos; + return 0; + } + + var beforetitle = this.pos; + this.spnl(); + if (this.pos !== beforetitle) { + title = this.parseLinkTitle(); + } + if (title === null) { + // rewind before spaces + this.pos = beforetitle; + } + + // make sure we're at line end: + var atLineEnd = true; + if (this.match(reSpaceAtEndOfLine) === null) { + if (title === null) { + atLineEnd = false; + } else { + // the potential title we found is not at the line end, + // but it could still be a legal link reference if we + // discard the title + title = null; + // rewind before spaces + this.pos = beforetitle; + // and instead check if the link URL is at the line end + atLineEnd = this.match(reSpaceAtEndOfLine) !== null; + } + } + + if (!atLineEnd) { + this.pos = startpos; + return 0; + } + + var normlabel = normalizeReference(rawlabel); + if (normlabel === "") { + // label must contain non-whitespace characters + this.pos = startpos; + return 0; + } + + if (!refmap[normlabel]) { + refmap[normlabel] = { destination: dest, title: title === null ? "" : title }; + } + return this.pos - startpos; + }; + + // Parse the next inline element in subject, advancing subject position. + // On success, add the result to block's children and return true. + // On failure, return false. + var parseInline = function(block) { + var res = false; + var c = this.peek(); + if (c === -1) { + return false; + } + switch (c) { + case C_NEWLINE: + res = this.parseNewline(block); + break; + case C_BACKSLASH$1: + res = this.parseBackslash(block); + break; + case C_BACKTICK: + res = this.parseBackticks(block); + break; + case C_ASTERISK: + case C_UNDERSCORE: + res = this.handleDelim(c, block); + break; + case C_SINGLEQUOTE: + case C_DOUBLEQUOTE: + res = this.options.smart && this.handleDelim(c, block); + break; + case C_OPEN_BRACKET: + res = this.parseOpenBracket(block); + break; + case C_BANG: + res = this.parseBang(block); + break; + case C_CLOSE_BRACKET: + res = this.parseCloseBracket(block); + break; + case C_LESSTHAN: + res = this.parseAutolink(block) || this.parseHtmlTag(block); + break; + case C_AMPERSAND: + res = this.parseEntity(block); + break; + default: + res = this.parseString(block); + break; + } + if (!res) { + this.pos += 1; + block.appendChild(text(fromCodePoint(c))); + } + + return true; + }; + + // Parse string content in block into inline children, + // using refmap to resolve references. + var parseInlines = function(block) { + this.subject = block._string_content.trim(); + this.pos = 0; + this.delimiters = null; + this.brackets = null; + while (this.parseInline(block)) {} + block._string_content = null; // allow raw string to be garbage collected + this.processEmphasis(null); + }; + + // The InlineParser object. + function InlineParser(options) { + return { + subject: "", + delimiters: null, // used by handleDelim method + brackets: null, + pos: 0, + refmap: {}, + match: match, + peek: peek, + spnl: spnl, + parseBackticks: parseBackticks, + parseBackslash: parseBackslash, + parseAutolink: parseAutolink, + parseHtmlTag: parseHtmlTag, + scanDelims: scanDelims, + handleDelim: handleDelim, + parseLinkTitle: parseLinkTitle, + parseLinkDestination: parseLinkDestination, + parseLinkLabel: parseLinkLabel, + parseOpenBracket: parseOpenBracket, + parseBang: parseBang, + parseCloseBracket: parseCloseBracket, + addBracket: addBracket, + removeBracket: removeBracket, + parseEntity: parseEntity, + parseString: parseString, + parseNewline: parseNewline, + parseReference: parseReference, + parseInline: parseInline, + processEmphasis: processEmphasis, + removeDelimiter: removeDelimiter, + options: options || {}, + parse: parseInlines + }; + } + + var CODE_INDENT = 4; + + var C_TAB = 9; + var C_NEWLINE$1 = 10; + var C_GREATERTHAN = 62; + var C_LESSTHAN$1 = 60; + var C_SPACE = 32; + var C_OPEN_BRACKET$1 = 91; + + var reHtmlBlockOpen = [ + /./, // dummy for 0 + /^<(?:script|pre|textarea|style)(?:\s|>|$)/i, + /^/, + /\?>/, + />/, + /\]\]>/ + ]; + + var reThematicBreak = /^(?:\*[ \t]*){3,}$|^(?:_[ \t]*){3,}$|^(?:-[ \t]*){3,}$/; + + var reMaybeSpecial = /^[#`~*+_=<>0-9-]/; + + var reNonSpace = /[^ \t\f\v\r\n]/; + + var reBulletListMarker = /^[*+-]/; + + var reOrderedListMarker = /^(\d{1,9})([.)])/; + + var reATXHeadingMarker = /^#{1,6}(?:[ \t]+|$)/; + + var reCodeFence = /^`{3,}(?!.*`)|^~{3,}/; + + var reClosingCodeFence = /^(?:`{3,}|~{3,})(?=[ \t]*$)/; + + var reSetextHeadingLine = /^(?:=+|-+)[ \t]*$/; + + var reLineEnding = /\r\n|\n|\r/; + + // Returns true if string contains only space characters. + var isBlank = function(s) { + return !reNonSpace.test(s); + }; + + var isSpaceOrTab = function(c) { + return c === C_SPACE || c === C_TAB; + }; + + var peek$1 = function(ln, pos) { + if (pos < ln.length) { + return ln.charCodeAt(pos); + } else { + return -1; + } + }; + + // DOC PARSER + + // These are methods of a Parser object, defined below. + + // Returns true if block ends with a blank line. + var endsWithBlankLine = function(block) { + return block.next && + block.sourcepos[1][0] !== block.next.sourcepos[0][0] - 1; + }; + + // Add a line to the block at the tip. We assume the tip + // can accept lines -- that check should be done before calling this. + var addLine = function() { + if (this.partiallyConsumedTab) { + this.offset += 1; // skip over tab + // add space characters: + var charsToTab = 4 - (this.column % 4); + this.tip._string_content += " ".repeat(charsToTab); + } + this.tip._string_content += this.currentLine.slice(this.offset) + "\n"; + }; + + // Add block of type tag as a child of the tip. If the tip can't + // accept children, close and finalize it and try its parent, + // and so on til we find a block that can accept children. + var addChild = function(tag, offset) { + while (!this.blocks[this.tip.type].canContain(tag)) { + this.finalize(this.tip, this.lineNumber - 1); + } + + var column_number = offset + 1; // offset 0 = column 1 + var newBlock = new Node(tag, [ + [this.lineNumber, column_number], + [0, 0] + ]); + newBlock._string_content = ""; + this.tip.appendChild(newBlock); + this.tip = newBlock; + return newBlock; + }; + + // Parse a list marker and return data on the marker (type, + // start, delimiter, bullet character, padding) or null. + var parseListMarker = function(parser, container) { + var rest = parser.currentLine.slice(parser.nextNonspace); + var match; + var nextc; + var spacesStartCol; + var spacesStartOffset; + var data = { + type: null, + tight: true, // lists are tight by default + bulletChar: null, + start: null, + delimiter: null, + padding: null, + markerOffset: parser.indent + }; + if (parser.indent >= 4) { + return null; + } + if ((match = rest.match(reBulletListMarker))) { + data.type = "bullet"; + data.bulletChar = match[0][0]; + } else if ( + (match = rest.match(reOrderedListMarker)) && + (container.type !== "paragraph" || match[1] == 1) + ) { + data.type = "ordered"; + data.start = parseInt(match[1]); + data.delimiter = match[2]; + } else { + return null; + } + // make sure we have spaces after + nextc = peek$1(parser.currentLine, parser.nextNonspace + match[0].length); + if (!(nextc === -1 || nextc === C_TAB || nextc === C_SPACE)) { + return null; + } + + // if it interrupts paragraph, make sure first line isn't blank + if ( + container.type === "paragraph" && + !parser.currentLine + .slice(parser.nextNonspace + match[0].length) + .match(reNonSpace) + ) { + return null; + } + + // we've got a match! advance offset and calculate padding + parser.advanceNextNonspace(); // to start of marker + parser.advanceOffset(match[0].length, true); // to end of marker + spacesStartCol = parser.column; + spacesStartOffset = parser.offset; + do { + parser.advanceOffset(1, true); + nextc = peek$1(parser.currentLine, parser.offset); + } while (parser.column - spacesStartCol < 5 && isSpaceOrTab(nextc)); + var blank_item = peek$1(parser.currentLine, parser.offset) === -1; + var spaces_after_marker = parser.column - spacesStartCol; + if (spaces_after_marker >= 5 || spaces_after_marker < 1 || blank_item) { + data.padding = match[0].length + 1; + parser.column = spacesStartCol; + parser.offset = spacesStartOffset; + if (isSpaceOrTab(peek$1(parser.currentLine, parser.offset))) { + parser.advanceOffset(1, true); + } + } else { + data.padding = match[0].length + spaces_after_marker; + } + return data; + }; + + // Returns true if the two list items are of the same type, + // with the same delimiter and bullet character. This is used + // in agglomerating list items into lists. + var listsMatch = function(list_data, item_data) { + return ( + list_data.type === item_data.type && + list_data.delimiter === item_data.delimiter && + list_data.bulletChar === item_data.bulletChar + ); + }; + + // Finalize and close any unmatched blocks. + var closeUnmatchedBlocks = function() { + if (!this.allClosed) { + // finalize any blocks not matched + while (this.oldtip !== this.lastMatchedContainer) { + var parent = this.oldtip._parent; + this.finalize(this.oldtip, this.lineNumber - 1); + this.oldtip = parent; + } + this.allClosed = true; + } + }; + + // Remove link reference definitions from given tree. + var removeLinkReferenceDefinitions = function(parser, tree) { + var event, node; + var walker = tree.walker(); + var emptyNodes = []; + + while ((event = walker.next())) { + node = event.node; + if (event.entering && node.type === "paragraph") { + var pos; + var hasReferenceDefs = false; + + // Try parsing the beginning as link reference definitions; + // Note that link reference definitions must be the beginning of a + // paragraph node since link reference definitions cannot interrupt + // paragraphs. + while ( + peek$1(node._string_content, 0) === C_OPEN_BRACKET$1 && + (pos = parser.inlineParser.parseReference( + node._string_content, + parser.refmap + )) + ) { + const removedText = node._string_content.slice(0, pos); + + node._string_content = node._string_content.slice(pos); + hasReferenceDefs = true; + + const lines = removedText.split("\n"); + + // -1 for final newline. + node.sourcepos[0][0] += lines.length - 1; + } + if (hasReferenceDefs && isBlank(node._string_content)) { + emptyNodes.push(node); + } + } + } + + for (node of emptyNodes) { + node.unlink(); + } + }; + + // 'finalize' is run when the block is closed. + // 'continue' is run to check whether the block is continuing + // at a certain line and offset (e.g. whether a block quote + // contains a `>`. It returns 0 for matched, 1 for not matched, + // and 2 for "we've dealt with this line completely, go to next." + var blocks = { + document: { + continue: function() { + return 0; + }, + finalize: function(parser, block) { + removeLinkReferenceDefinitions(parser, block); + return; + }, + canContain: function(t) { + return t !== "item"; + }, + acceptsLines: false + }, + list: { + continue: function() { + return 0; + }, + finalize: function(parser, block) { + var item = block._firstChild; + while (item) { + // check for non-final list item ending with blank line: + if (item._next && endsWithBlankLine(item)) { + block._listData.tight = false; + break; + } + // recurse into children of list item, to see if there are + // spaces between any of them: + var subitem = item._firstChild; + while (subitem) { + if ( + subitem._next && + endsWithBlankLine(subitem) + ) { + block._listData.tight = false; + break; + } + subitem = subitem._next; + } + item = item._next; + } + block.sourcepos[1] = block._lastChild.sourcepos[1]; + }, + canContain: function(t) { + return t === "item"; + }, + acceptsLines: false + }, + block_quote: { + continue: function(parser) { + var ln = parser.currentLine; + if ( + !parser.indented && + peek$1(ln, parser.nextNonspace) === C_GREATERTHAN + ) { + parser.advanceNextNonspace(); + parser.advanceOffset(1, false); + if (isSpaceOrTab(peek$1(ln, parser.offset))) { + parser.advanceOffset(1, true); + } + } else { + return 1; + } + return 0; + }, + finalize: function() { + return; + }, + canContain: function(t) { + return t !== "item"; + }, + acceptsLines: false + }, + item: { + continue: function(parser, container) { + if (parser.blank) { + if (container._firstChild == null) { + // Blank line after empty list item + return 1; + } else { + parser.advanceNextNonspace(); + } + } else if ( + parser.indent >= + container._listData.markerOffset + container._listData.padding + ) { + parser.advanceOffset( + container._listData.markerOffset + + container._listData.padding, + true + ); + } else { + return 1; + } + return 0; + }, + finalize: function(parser, block) { + if (block._lastChild) { + block.sourcepos[1] = block._lastChild.sourcepos[1]; + } else { + // Empty list item + block.sourcepos[1][0] = block.sourcepos[0][0]; + block.sourcepos[1][1] = + block._listData.markerOffset + block._listData.padding; + } + + return; + }, + canContain: function(t) { + return t !== "item"; + }, + acceptsLines: false + }, + heading: { + continue: function() { + // a heading can never container > 1 line, so fail to match: + return 1; + }, + finalize: function() { + return; + }, + canContain: function() { + return false; + }, + acceptsLines: false + }, + thematic_break: { + continue: function() { + // a thematic break can never container > 1 line, so fail to match: + return 1; + }, + finalize: function() { + return; + }, + canContain: function() { + return false; + }, + acceptsLines: false + }, + code_block: { + continue: function(parser, container) { + var ln = parser.currentLine; + var indent = parser.indent; + if (container._isFenced) { + // fenced + var match = + indent <= 3 && + ln.charAt(parser.nextNonspace) === container._fenceChar && + ln.slice(parser.nextNonspace).match(reClosingCodeFence); + if (match && match[0].length >= container._fenceLength) { + // closing fence - we're at end of line, so we can return + parser.lastLineLength = + parser.offset + indent + match[0].length; + parser.finalize(container, parser.lineNumber); + return 2; + } else { + // skip optional spaces of fence offset + var i = container._fenceOffset; + while (i > 0 && isSpaceOrTab(peek$1(ln, parser.offset))) { + parser.advanceOffset(1, true); + i--; + } + } + } else { + // indented + if (indent >= CODE_INDENT) { + parser.advanceOffset(CODE_INDENT, true); + } else if (parser.blank) { + parser.advanceNextNonspace(); + } else { + return 1; + } + } + return 0; + }, + finalize: function(parser, block) { + if (block._isFenced) { + // fenced + // first line becomes info string + var content = block._string_content; + var newlinePos = content.indexOf("\n"); + var firstLine = content.slice(0, newlinePos); + var rest = content.slice(newlinePos + 1); + block.info = unescapeString(firstLine.trim()); + block._literal = rest; + } else { + // indented + var lines = block._string_content.split("\n"); + // Note that indented code block cannot be empty, so + // lines.length cannot be zero. + while (/^[ \t]*$/.test(lines[lines.length - 1])) { + lines.pop(); + } + block._literal = lines.join("\n") + "\n"; + block.sourcepos[1][0] = + block.sourcepos[0][0] + lines.length - 1; + block.sourcepos[1][1] = + block.sourcepos[0][1] + lines[lines.length - 1].length - 1; + } + block._string_content = null; // allow GC + }, + canContain: function() { + return false; + }, + acceptsLines: true + }, + html_block: { + continue: function(parser, container) { + return parser.blank && + (container._htmlBlockType === 6 || + container._htmlBlockType === 7) + ? 1 + : 0; + }, + finalize: function(parser, block) { + block._literal = block._string_content.replace(/\n$/, ''); + block._string_content = null; // allow GC + }, + canContain: function() { + return false; + }, + acceptsLines: true + }, + paragraph: { + continue: function(parser) { + return parser.blank ? 1 : 0; + }, + finalize: function() { + return; + }, + canContain: function() { + return false; + }, + acceptsLines: true + } + }; + + // block start functions. Return values: + // 0 = no match + // 1 = matched container, keep going + // 2 = matched leaf, no more block starts + var blockStarts = [ + // block quote + function(parser) { + if ( + !parser.indented && + peek$1(parser.currentLine, parser.nextNonspace) === C_GREATERTHAN + ) { + parser.advanceNextNonspace(); + parser.advanceOffset(1, false); + // optional following space + if (isSpaceOrTab(peek$1(parser.currentLine, parser.offset))) { + parser.advanceOffset(1, true); + } + parser.closeUnmatchedBlocks(); + parser.addChild("block_quote", parser.nextNonspace); + return 1; + } else { + return 0; + } + }, + + // ATX heading + function(parser) { + var match; + if ( + !parser.indented && + (match = parser.currentLine + .slice(parser.nextNonspace) + .match(reATXHeadingMarker)) + ) { + parser.advanceNextNonspace(); + parser.advanceOffset(match[0].length, false); + parser.closeUnmatchedBlocks(); + var container = parser.addChild("heading", parser.nextNonspace); + container.level = match[0].trim().length; // number of #s + // remove trailing ###s: + container._string_content = parser.currentLine + .slice(parser.offset) + .replace(/^[ \t]*#+[ \t]*$/, "") + .replace(/[ \t]+#+[ \t]*$/, ""); + parser.advanceOffset(parser.currentLine.length - parser.offset); + return 2; + } else { + return 0; + } + }, + + // Fenced code block + function(parser) { + var match; + if ( + !parser.indented && + (match = parser.currentLine + .slice(parser.nextNonspace) + .match(reCodeFence)) + ) { + var fenceLength = match[0].length; + parser.closeUnmatchedBlocks(); + var container = parser.addChild("code_block", parser.nextNonspace); + container._isFenced = true; + container._fenceLength = fenceLength; + container._fenceChar = match[0][0]; + container._fenceOffset = parser.indent; + parser.advanceNextNonspace(); + parser.advanceOffset(fenceLength, false); + return 2; + } else { + return 0; + } + }, + + // HTML block + function(parser, container) { + if ( + !parser.indented && + peek$1(parser.currentLine, parser.nextNonspace) === C_LESSTHAN$1 + ) { + var s = parser.currentLine.slice(parser.nextNonspace); + var blockType; + + for (blockType = 1; blockType <= 7; blockType++) { + if ( + reHtmlBlockOpen[blockType].test(s) && + (blockType < 7 || (container.type !== "paragraph" && + !(!parser.allClosed && !parser.blank && + parser.tip.type === "paragraph") // maybe lazy + )) + ) { + parser.closeUnmatchedBlocks(); + // We don't adjust parser.offset; + // spaces are part of the HTML block: + var b = parser.addChild("html_block", parser.offset); + b._htmlBlockType = blockType; + return 2; + } + } + } + + return 0; + }, + + // Setext heading + function(parser, container) { + var match; + if ( + !parser.indented && + container.type === "paragraph" && + (match = parser.currentLine + .slice(parser.nextNonspace) + .match(reSetextHeadingLine)) + ) { + parser.closeUnmatchedBlocks(); + // resolve reference link definitiosn + var pos; + while ( + peek$1(container._string_content, 0) === C_OPEN_BRACKET$1 && + (pos = parser.inlineParser.parseReference( + container._string_content, + parser.refmap + )) + ) { + container._string_content = container._string_content.slice( + pos + ); + } + if (container._string_content.length > 0) { + var heading = new Node("heading", container.sourcepos); + heading.level = match[0][0] === "=" ? 1 : 2; + heading._string_content = container._string_content; + container.insertAfter(heading); + container.unlink(); + parser.tip = heading; + parser.advanceOffset( + parser.currentLine.length - parser.offset, + false + ); + return 2; + } else { + return 0; + } + } else { + return 0; + } + }, + + // thematic break + function(parser) { + if ( + !parser.indented && + reThematicBreak.test(parser.currentLine.slice(parser.nextNonspace)) + ) { + parser.closeUnmatchedBlocks(); + parser.addChild("thematic_break", parser.nextNonspace); + parser.advanceOffset( + parser.currentLine.length - parser.offset, + false + ); + return 2; + } else { + return 0; + } + }, + + // list item + function(parser, container) { + var data; + + if ( + (!parser.indented || container.type === "list") && + (data = parseListMarker(parser, container)) + ) { + parser.closeUnmatchedBlocks(); + + // add the list if needed + if ( + parser.tip.type !== "list" || + !listsMatch(container._listData, data) + ) { + container = parser.addChild("list", parser.nextNonspace); + container._listData = data; + } + + // add the list item + container = parser.addChild("item", parser.nextNonspace); + container._listData = data; + return 1; + } else { + return 0; + } + }, + + // indented code block + function(parser) { + if ( + parser.indented && + parser.tip.type !== "paragraph" && + !parser.blank + ) { + // indented code + parser.advanceOffset(CODE_INDENT, true); + parser.closeUnmatchedBlocks(); + parser.addChild("code_block", parser.offset); + return 2; + } else { + return 0; + } + } + ]; + + var advanceOffset = function(count, columns) { + var currentLine = this.currentLine; + var charsToTab, charsToAdvance; + var c; + while (count > 0 && (c = currentLine[this.offset])) { + if (c === "\t") { + charsToTab = 4 - (this.column % 4); + if (columns) { + this.partiallyConsumedTab = charsToTab > count; + charsToAdvance = charsToTab > count ? count : charsToTab; + this.column += charsToAdvance; + this.offset += this.partiallyConsumedTab ? 0 : 1; + count -= charsToAdvance; + } else { + this.partiallyConsumedTab = false; + this.column += charsToTab; + this.offset += 1; + count -= 1; + } + } else { + this.partiallyConsumedTab = false; + this.offset += 1; + this.column += 1; // assume ascii; block starts are ascii + count -= 1; + } + } + }; + + var advanceNextNonspace = function() { + this.offset = this.nextNonspace; + this.column = this.nextNonspaceColumn; + this.partiallyConsumedTab = false; + }; + + var findNextNonspace = function() { + var currentLine = this.currentLine; + var i = this.offset; + var cols = this.column; + var c; + + while ((c = currentLine.charAt(i)) !== "") { + if (c === " ") { + i++; + cols++; + } else if (c === "\t") { + i++; + cols += 4 - (cols % 4); + } else { + break; + } + } + this.blank = c === "\n" || c === "\r" || c === ""; + this.nextNonspace = i; + this.nextNonspaceColumn = cols; + this.indent = this.nextNonspaceColumn - this.column; + this.indented = this.indent >= CODE_INDENT; + }; + + // Analyze a line of text and update the document appropriately. + // We parse markdown text by calling this on each line of input, + // then finalizing the document. + var incorporateLine = function(ln) { + var all_matched = true; + var t; + + var container = this.doc; + this.oldtip = this.tip; + this.offset = 0; + this.column = 0; + this.blank = false; + this.partiallyConsumedTab = false; + this.lineNumber += 1; + + // replace NUL characters for security + if (ln.indexOf("\u0000") !== -1) { + ln = ln.replace(/\0/g, "\uFFFD"); + } + + this.currentLine = ln; + + // For each containing block, try to parse the associated line start. + // Bail out on failure: container will point to the last matching block. + // Set all_matched to false if not all containers match. + var lastChild; + while ((lastChild = container._lastChild) && lastChild._open) { + container = lastChild; + + this.findNextNonspace(); + + switch (this.blocks[container.type].continue(this, container)) { + case 0: // we've matched, keep going + break; + case 1: // we've failed to match a block + all_matched = false; + break; + case 2: // we've hit end of line for fenced code close and can return + return; + default: + throw "continue returned illegal value, must be 0, 1, or 2"; + } + if (!all_matched) { + container = container._parent; // back up to last matching block + break; + } + } + + this.allClosed = container === this.oldtip; + this.lastMatchedContainer = container; + + var matchedLeaf = + container.type !== "paragraph" && blocks[container.type].acceptsLines; + var starts = this.blockStarts; + var startsLen = starts.length; + // Unless last matched container is a code block, try new container starts, + // adding children to the last matched container: + while (!matchedLeaf) { + this.findNextNonspace(); + + // this is a little performance optimization: + if ( + !this.indented && + !reMaybeSpecial.test(ln.slice(this.nextNonspace)) + ) { + this.advanceNextNonspace(); + break; + } + + var i = 0; + while (i < startsLen) { + var res = starts[i](this, container); + if (res === 1) { + container = this.tip; + break; + } else if (res === 2) { + container = this.tip; + matchedLeaf = true; + break; + } else { + i++; + } + } + + if (i === startsLen) { + // nothing matched + this.advanceNextNonspace(); + break; + } + } + + // What remains at the offset is a text line. Add the text to the + // appropriate container. + + // First check for a lazy paragraph continuation: + if (!this.allClosed && !this.blank && this.tip.type === "paragraph") { + // lazy paragraph continuation + this.addLine(); + } else { + // not a lazy continuation + + // finalize any blocks not matched + this.closeUnmatchedBlocks(); + + t = container.type; + + if (this.blocks[t].acceptsLines) { + this.addLine(); + // if HtmlBlock, check for end condition + if ( + t === "html_block" && + container._htmlBlockType >= 1 && + container._htmlBlockType <= 5 && + reHtmlBlockClose[container._htmlBlockType].test( + this.currentLine.slice(this.offset) + ) + ) { + this.lastLineLength = ln.length; + this.finalize(container, this.lineNumber); + } + } else if (this.offset < ln.length && !this.blank) { + // create paragraph container for line + container = this.addChild("paragraph", this.offset); + this.advanceNextNonspace(); + this.addLine(); + } + } + this.lastLineLength = ln.length; + }; + + // Finalize a block. Close it and do any necessary postprocessing, + // e.g. creating string_content from strings, setting the 'tight' + // or 'loose' status of a list, and parsing the beginnings + // of paragraphs for reference definitions. Reset the tip to the + // parent of the closed block. + var finalize = function(block, lineNumber) { + var above = block._parent; + block._open = false; + block.sourcepos[1] = [lineNumber, this.lastLineLength]; + + this.blocks[block.type].finalize(this, block); + + this.tip = above; + }; + + // Walk through a block & children recursively, parsing string content + // into inline content where appropriate. + var processInlines = function(block) { + var node, event, t; + var walker = block.walker(); + this.inlineParser.refmap = this.refmap; + this.inlineParser.options = this.options; + while ((event = walker.next())) { + node = event.node; + t = node.type; + if (!event.entering && (t === "paragraph" || t === "heading")) { + this.inlineParser.parse(node); + } + } + }; + + var Document = function() { + var doc = new Node("document", [ + [1, 1], + [0, 0] + ]); + return doc; + }; + + // The main parsing function. Returns a parsed document AST. + var parse = function(input) { + this.doc = new Document(); + this.tip = this.doc; + this.refmap = {}; + this.lineNumber = 0; + this.lastLineLength = 0; + this.offset = 0; + this.column = 0; + this.lastMatchedContainer = this.doc; + this.currentLine = ""; + if (this.options.time) { + console.time("preparing input"); + } + var lines = input.split(reLineEnding); + var len = lines.length; + if (input.charCodeAt(input.length - 1) === C_NEWLINE$1) { + // ignore last blank line created by final newline + len -= 1; + } + if (this.options.time) { + console.timeEnd("preparing input"); + } + if (this.options.time) { + console.time("block parsing"); + } + for (var i = 0; i < len; i++) { + this.incorporateLine(lines[i]); + } + while (this.tip) { + this.finalize(this.tip, len); + } + if (this.options.time) { + console.timeEnd("block parsing"); + } + if (this.options.time) { + console.time("inline parsing"); + } + this.processInlines(this.doc); + if (this.options.time) { + console.timeEnd("inline parsing"); + } + return this.doc; + }; + + // The Parser object. + function Parser(options) { + return { + doc: new Document(), + blocks: blocks, + blockStarts: blockStarts, + tip: this.doc, + oldtip: this.doc, + currentLine: "", + lineNumber: 0, + offset: 0, + column: 0, + nextNonspace: 0, + nextNonspaceColumn: 0, + indent: 0, + indented: false, + blank: false, + partiallyConsumedTab: false, + allClosed: true, + lastMatchedContainer: this.doc, + refmap: {}, + lastLineLength: 0, + inlineParser: new InlineParser(options), + findNextNonspace: findNextNonspace, + advanceOffset: advanceOffset, + advanceNextNonspace: advanceNextNonspace, + addLine: addLine, + addChild: addChild, + incorporateLine: incorporateLine, + finalize: finalize, + processInlines: processInlines, + closeUnmatchedBlocks: closeUnmatchedBlocks, + parse: parse, + options: options || {} + }; + } + + function Renderer() {} + + /** + * Walks the AST and calls member methods for each Node type. + * + * @param ast {Node} The root of the abstract syntax tree. + */ + function render(ast) { + var walker = ast.walker(), + event, + type; + + this.buffer = ""; + this.lastOut = "\n"; + + while ((event = walker.next())) { + type = event.node.type; + if (this[type]) { + this[type](event.node, event.entering); + } + } + return this.buffer; + } + + /** + * Concatenate a literal string to the buffer. + * + * @param str {String} The string to concatenate. + */ + function lit(str) { + this.buffer += str; + this.lastOut = str; + } + + /** + * Output a newline to the buffer. + */ + function cr() { + if (this.lastOut !== "\n") { + this.lit("\n"); + } + } + + /** + * Concatenate a string to the buffer possibly escaping the content. + * + * Concrete renderer implementations should override this method. + * + * @param str {String} The string to concatenate. + */ + function out(str) { + this.lit(str); + } + + /** + * Escape a string for the target renderer. + * + * Abstract function that should be implemented by concrete + * renderer implementations. + * + * @param str {String} The string to escape. + */ + function esc(str) { + return str; + } + + Renderer.prototype.render = render; + Renderer.prototype.out = out; + Renderer.prototype.lit = lit; + Renderer.prototype.cr = cr; + Renderer.prototype.esc = esc; + + var reUnsafeProtocol = /^javascript:|vbscript:|file:|data:/i; + var reSafeDataProtocol = /^data:image\/(?:png|gif|jpeg|webp)/i; + + var potentiallyUnsafe = function(url) { + return reUnsafeProtocol.test(url) && !reSafeDataProtocol.test(url); + }; + + // Helper function to produce an HTML tag. + function tag(name, attrs, selfclosing) { + if (this.disableTags > 0) { + return; + } + this.buffer += "<" + name; + if (attrs && attrs.length > 0) { + var i = 0; + var attrib; + while ((attrib = attrs[i]) !== undefined) { + this.buffer += " " + attrib[0] + '="' + attrib[1] + '"'; + i++; + } + } + if (selfclosing) { + this.buffer += " /"; + } + this.buffer += ">"; + this.lastOut = ">"; + } + + function HtmlRenderer(options) { + options = options || {}; + // by default, soft breaks are rendered as newlines in HTML + options.softbreak = options.softbreak || "\n"; + // set to "
" to make them hard breaks + // set to " " if you want to ignore line wrapping in source + this.esc = options.esc || escapeXml; + // escape html with a custom function + // else use escapeXml + + this.disableTags = 0; + this.lastOut = "\n"; + this.options = options; + } + + /* Node methods */ + + function text$1(node) { + this.out(node.literal); + } + + function softbreak() { + this.lit(this.options.softbreak); + } + + function linebreak() { + this.tag("br", [], true); + this.cr(); + } + + function link(node, entering) { + var attrs = this.attrs(node); + if (entering) { + if (!(this.options.safe && potentiallyUnsafe(node.destination))) { + attrs.push(["href", this.esc(node.destination)]); + } + if (node.title) { + attrs.push(["title", this.esc(node.title)]); + } + this.tag("a", attrs); + } else { + this.tag("/a"); + } + } + + function image$1(node, entering) { + if (entering) { + if (this.disableTags === 0) { + if (this.options.safe && potentiallyUnsafe(node.destination)) { + this.lit('');
+                } else {
+                    this.lit('<img src='); + } + } + } + + function emph(node, entering) { + this.tag(entering ? "em" : "/em"); + } + + function strong(node, entering) { + this.tag(entering ? "strong" : "/strong"); + } + + function paragraph(node, entering) { + var grandparent = node.parent.parent, + attrs = this.attrs(node); + if (grandparent !== null && grandparent.type === "list") { + if (grandparent.listTight) { + return; + } + } + if (entering) { + this.cr(); + this.tag("p", attrs); + } else { + this.tag("/p"); + this.cr(); + } + } + + function heading(node, entering) { + var tagname = "h" + node.level, + attrs = this.attrs(node); + if (entering) { + this.cr(); + this.tag(tagname, attrs); + } else { + this.tag("/" + tagname); + this.cr(); + } + } + + function code(node) { + this.tag("code"); + this.out(node.literal); + this.tag("/code"); + } + + function code_block(node) { + var info_words = node.info ? node.info.split(/\s+/) : [], + attrs = this.attrs(node); + if (info_words.length > 0 && info_words[0].length > 0) { + var cls = this.esc(info_words[0]); + if (!/^language-/.exec(cls)) { + cls = "language-" + cls; + } + attrs.push(["class", cls]); + } + this.cr(); + this.tag("pre"); + this.tag("code", attrs); + this.out(node.literal); + this.tag("/code"); + this.tag("/pre"); + this.cr(); + } + + function thematic_break(node) { + var attrs = this.attrs(node); + this.cr(); + this.tag("hr", attrs, true); + this.cr(); + } + + function block_quote(node, entering) { + var attrs = this.attrs(node); + if (entering) { + this.cr(); + this.tag("blockquote", attrs); + this.cr(); + } else { + this.cr(); + this.tag("/blockquote"); + this.cr(); + } + } + + function list(node, entering) { + var tagname = node.listType === "bullet" ? "ul" : "ol", + attrs = this.attrs(node); + + if (entering) { + var start = node.listStart; + if (start !== null && start !== 1) { + attrs.push(["start", start.toString()]); + } + this.cr(); + this.tag(tagname, attrs); + this.cr(); + } else { + this.cr(); + this.tag("/" + tagname); + this.cr(); + } + } + + function item(node, entering) { + var attrs = this.attrs(node); + if (entering) { + this.tag("li", attrs); + } else { + this.tag("/li"); + this.cr(); + } + } + + function html_inline(node) { + if (this.options.safe) { + this.lit(""); + } else { + this.lit(node.literal); + } + } + + function html_block(node) { + this.cr(); + if (this.options.safe) { + this.lit(""); + } else { + this.lit(node.literal); + } + this.cr(); + } + + function custom_inline(node, entering) { + if (entering && node.onEnter) { + this.lit(node.onEnter); + } else if (!entering && node.onExit) { + this.lit(node.onExit); + } + } + + function custom_block(node, entering) { + this.cr(); + if (entering && node.onEnter) { + this.lit(node.onEnter); + } else if (!entering && node.onExit) { + this.lit(node.onExit); + } + this.cr(); + } + + /* Helper methods */ + + function out$1(s) { + this.lit(this.esc(s)); + } + + function attrs(node) { + var att = []; + if (this.options.sourcepos) { + var pos = node.sourcepos; + if (pos) { + att.push([ + "data-sourcepos", + String(pos[0][0]) + + ":" + + String(pos[0][1]) + + "-" + + String(pos[1][0]) + + ":" + + String(pos[1][1]) + ]); + } + } + return att; + } + + // quick browser-compatible inheritance + HtmlRenderer.prototype = Object.create(Renderer.prototype); + + HtmlRenderer.prototype.text = text$1; + HtmlRenderer.prototype.html_inline = html_inline; + HtmlRenderer.prototype.html_block = html_block; + HtmlRenderer.prototype.softbreak = softbreak; + HtmlRenderer.prototype.linebreak = linebreak; + HtmlRenderer.prototype.link = link; + HtmlRenderer.prototype.image = image$1; + HtmlRenderer.prototype.emph = emph; + HtmlRenderer.prototype.strong = strong; + HtmlRenderer.prototype.paragraph = paragraph; + HtmlRenderer.prototype.heading = heading; + HtmlRenderer.prototype.code = code; + HtmlRenderer.prototype.code_block = code_block; + HtmlRenderer.prototype.thematic_break = thematic_break; + HtmlRenderer.prototype.block_quote = block_quote; + HtmlRenderer.prototype.list = list; + HtmlRenderer.prototype.item = item; + HtmlRenderer.prototype.custom_inline = custom_inline; + HtmlRenderer.prototype.custom_block = custom_block; + + HtmlRenderer.prototype.esc = escapeXml; + + HtmlRenderer.prototype.out = out$1; + HtmlRenderer.prototype.tag = tag; + HtmlRenderer.prototype.attrs = attrs; + + var reXMLTag = /\<[^>]*\>/; + + function toTagName(s) { + return s.replace(/([a-z])([A-Z])/g, "$1_$2").toLowerCase(); + } + + function XmlRenderer(options) { + options = options || {}; + + this.disableTags = 0; + this.lastOut = "\n"; + + this.indentLevel = 0; + this.indent = " "; + + this.esc = options.esc || escapeXml; + // escape html with a custom function + // else use escapeXml + + this.options = options; + } + + function render$1(ast) { + this.buffer = ""; + + var attrs; + var tagname; + var walker = ast.walker(); + var event, node, entering; + var container; + var selfClosing; + var nodetype; + + var options = this.options; + + if (options.time) { + console.time("rendering"); + } + + this.buffer += '\n'; + this.buffer += '\n'; + + while ((event = walker.next())) { + entering = event.entering; + node = event.node; + nodetype = node.type; + + container = node.isContainer; + + selfClosing = + nodetype === "thematic_break" || + nodetype === "linebreak" || + nodetype === "softbreak"; + + tagname = toTagName(nodetype); + + if (entering) { + attrs = []; + + switch (nodetype) { + case "document": + attrs.push(["xmlns", "http://commonmark.org/xml/1.0"]); + break; + case "list": + if (node.listType !== null) { + attrs.push(["type", node.listType.toLowerCase()]); + } + if (node.listStart !== null) { + attrs.push(["start", String(node.listStart)]); + } + if (node.listTight !== null) { + attrs.push([ + "tight", + node.listTight ? "true" : "false" + ]); + } + var delim = node.listDelimiter; + if (delim !== null) { + var delimword = ""; + if (delim === ".") { + delimword = "period"; + } else { + delimword = "paren"; + } + attrs.push(["delimiter", delimword]); + } + break; + case "code_block": + if (node.info) { + attrs.push(["info", node.info]); + } + break; + case "heading": + attrs.push(["level", String(node.level)]); + break; + case "link": + case "image": + attrs.push(["destination", node.destination]); + attrs.push(["title", node.title]); + break; + case "custom_inline": + case "custom_block": + attrs.push(["on_enter", node.onEnter]); + attrs.push(["on_exit", node.onExit]); + break; + } + if (options.sourcepos) { + var pos = node.sourcepos; + if (pos) { + attrs.push([ + "sourcepos", + String(pos[0][0]) + + ":" + + String(pos[0][1]) + + "-" + + String(pos[1][0]) + + ":" + + String(pos[1][1]) + ]); + } + } + + this.cr(); + this.out(this.tag(tagname, attrs, selfClosing)); + if (container) { + this.indentLevel += 1; + } else if (!container && !selfClosing) { + var lit = node.literal; + if (lit) { + this.out(this.esc(lit)); + } + this.out(this.tag("/" + tagname)); + } + } else { + this.indentLevel -= 1; + this.cr(); + this.out(this.tag("/" + tagname)); + } + } + if (options.time) { + console.timeEnd("rendering"); + } + this.buffer += "\n"; + return this.buffer; + } + + function out$2(s) { + if (this.disableTags > 0) { + this.buffer += s.replace(reXMLTag, ""); + } else { + this.buffer += s; + } + this.lastOut = s; + } + + function cr$1() { + if (this.lastOut !== "\n") { + this.buffer += "\n"; + this.lastOut = "\n"; + for (var i = this.indentLevel; i > 0; i--) { + this.buffer += this.indent; + } + } + } + + // Helper function to produce an XML tag. + function tag$1(name, attrs, selfclosing) { + var result = "<" + name; + if (attrs && attrs.length > 0) { + var i = 0; + var attrib; + while ((attrib = attrs[i]) !== undefined) { + result += " " + attrib[0] + '="' + this.esc(attrib[1]) + '"'; + i++; + } + } + if (selfclosing) { + result += " /"; + } + result += ">"; + return result; + } + + // quick browser-compatible inheritance + XmlRenderer.prototype = Object.create(Renderer.prototype); + + XmlRenderer.prototype.render = render$1; + XmlRenderer.prototype.out = out$2; + XmlRenderer.prototype.cr = cr$1; + XmlRenderer.prototype.tag = tag$1; + XmlRenderer.prototype.esc = escapeXml; + + exports.HtmlRenderer = HtmlRenderer; + exports.Node = Node; + exports.Parser = Parser; + exports.Renderer = Renderer; + exports.XmlRenderer = XmlRenderer; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}))); diff --git a/src/ttfrog/themes/default/static/editor/editor.css b/src/ttfrog/themes/default/static/editor/editor.css index 1bb28d9..68c9852 100644 --- a/src/ttfrog/themes/default/static/editor/editor.css +++ b/src/ttfrog/themes/default/static/editor/editor.css @@ -1,106 +1,22 @@ -@import 'toastui-editor.min.css'; - #editor { - display: inline; -} - -.toastui-editor-defaultUI-toolbar { - padding: 0px !important; - margin: 0px !important; - border: 0px !important; - background: transparent !important; -} - -.toastui-editor-toolbar { - box-shadow: 0px 3px 5px #CCC; - margin-bottom: 20px !important; -} - -.toastui-editor-main-container { - display: contents; -} - -.toastui-editor, -.toastui-editor-main, -.toastui-editor-md-container, -.toastui-editor-defaultUI, -.toastui-editor-contents, -.toastui-editor-ww-mode, -.toastui-editor-md-preview, -.toastui-editor-md, -.ProseMirror { - border: 0px !important; - padding: 0px !important; - margin: 0px !important; - font-size: var(--default-font-size) !important; - font-family: var(--default-font-family) !important; -} - -#editor .toastui-editor-md-container > div > div, -#editor .toastui-editor-ww-container > div > div { - border: 1px dotted #ccc; -} - -#editor .toastui-editor-defaultUI-toolbar { - margin-bottom: 20px; -} - -#editor .toastui-editor-toolbar { - position: sticky !important; - top: 0 !important; - z-index: 99 !important; - width: 100% !important; - background: #FFF !important; -} - -/* applied to #editor */ -.read-only { -} - -#editor.read-only .toastui-editor-toolbar { - box-shadow: none; -} - -#editor.read-only .toastui-editor-ww-container > div > div { - background: #FFF; -} - -div.toastui-editor-md-splitter, -div.toastui-editor-md-preview { - display: none !Important; -} - -div.toastui-editor.md-mode { - width: 100% !important; -} - -#editor button.toastui-editor-toolbar-icons { - filter:unset; - pointer-events: all; - opacity: 1.0; -} - -#editor.read-only button.toastui-editor-toolbar-icons { - filter:saturate(0) !Important; - pointer-events: none; - opacity: 0.3; -} - -#editor button.actions { - background-image: none; - margin: 0; -} - -#editor.read-only button.actions { display: none; } -#editor.read-only #toggleButton { - display: block !important; +#editor.loaded { + display: block; } - -.toastui-editor-defaultUI-toolbar > div:nth-child(5) { - flex: auto; - justify-content: flex-end; +#editor.view { +} + +#editor.edit { + font-family: monospace; + white-space: pre; +} + +#editor.wysiwyg { +} + +#editor.wysiwyg .md { + opacity: 0.5; } diff --git a/src/ttfrog/themes/default/static/editor/editor.js b/src/ttfrog/themes/default/static/editor/editor.js index 62a3516..c4fe78f 100644 --- a/src/ttfrog/themes/default/static/editor/editor.js +++ b/src/ttfrog/themes/default/static/editor/editor.js @@ -1,295 +1,343 @@ -var editor = document.querySelector("#editor"); +class Editor { -var toolBar = null; -var contents = null; -var pageContent = null; -var saveButton = null; -var editorUI = null; -var VIEW_URI = null;; - -APIv1 = { - get: function(doc_id, callback) { - (async () => { - const raw = await fetch('/_/v1/get/' + doc_id, { - method: 'GET', - headers: { - 'Accept': 'application/json', - 'Content-Type': 'application/json' - } - }); - const res = await raw.json(); - if (res['code'] != 200) { - console.error("APIv1 error: ", res) - } - callback(res); - })(); - }, - - put: function(data, callback) { - (async () => { - const raw = await fetch('/_/v1/put/' + window.location.pathname, { - method: 'POST', - headers: { - 'Accept': 'application/json', - 'Content-Type': 'application/json' - }, - body: JSON.stringify({ - 'body': data - }), - }); - const res = await raw.json(); - if (res['code'] != 200) { - console.error("APIv1 error: ", res) - } - callback(res); - })(); - }, - - search: function(space, query, callback) { - (async () => { - const raw = await fetch('/_/v1/search/' + space, { - method: 'POST', - headers: { - 'Accept': 'application/json', - 'Content-Type': 'application/json' - }, - body: JSON.stringify({ - 'body': query - }), - }); - const res = await raw.json(); - if (res['code'] != 200) { - console.error("APIv1 error: ", res) - } - callback(res); - })(); - }, -}; - -isReadOnly = function() { - if (editor) { - return editor.className == 'read-only'; + #states = { + VIEW: 'view', + EDIT: 'edit', + WYSIWYG: 'wysiwyg' } - return undefined; -} -setReadOnly = function() { - pageContent.innerHTML = editorUI.getHTML(); - editorUI.changeMode('wysiwig'); - editorUI.blur(); - editor.classList.add('read-only'); - pageContent.contentEditable = false; -} - -setEditable = function() { - editor.classList.remove('read-only'); - pageContent.contentEditable = true; - editorUI.moveCursorToStart(); - editorUI.focus(); -} - -makeMarkdownButton = function() { - - button = document.createElement('button'); - button.classList.add("toastui-editor-toolbar-icons"); - button.classList.add("last"); - button.ariaLabel = "Toggle Markdown"; - button.style.backgroundImage = 'none'; - button.innerHTML = 'MD'; - button.style.margin = '0'; - button.addEventListener('click', () => { - if (editorUI.isMarkdownMode()) { - editorUI.changeMode("wysiwig"); - } else { - editorUI.changeMode("markdown"); - } - }); - return button; -}; - -makeSaveButton = function() { - const button = document.createElement('button'); - button.className = 'actions'; - button.innerHTML = 'save'; - button.id = 'saveButton'; - button.style.border = "1px solid black"; - button.addEventListener('click', () => { - APIv1.put({ - 'body': editorUI.getMarkdown() - }, (res) => { - if (res['code'] == 200) { - button.style.border = "1px solid green"; - } else { - button.style.border = "1px solid red"; - } - }); - }); - saveButton = button; - return button; -}; - -toggleButton = function() { - const button = document.createElement('button'); - button.className = 'actions'; - button.id = 'toggleButton'; - button.innerHTML = 'edit'; - button.addEventListener('click', () => { - if (isReadOnly()) { - setEditable(); - } else { - setReadOnly(); - } - }); - return button; -} - -handleContentChange = function() { -} - -autoComplete = function(search_string, matches, callback) { - id = `_ac_${search_string}`; - el = document.getElementById(id); - var addEl = false; - if (!el) { - el = document.createElement("ul"); - el.id = id; - addEl = true; - } - el.className = 'autocomplete'; - el.innerHTML = ""; - el.addEventListener("keyup", function(e) { - // do navigation / selection - }); - - matches.forEach(match => { - var text = match.uri; - for (pos = 0; pos < match.uri.length - search_string.length; pos++) { - var substr = match.name.substring(pos, search_string.length); - if (substr.toLowerCase() == search_string.toLowerCase()) { - text = match.name.substring(0, pos) + "" + substr + "" + match.name.substr(pos + substr.length); - break; - } - } - var option = document.createElement("li"); - option.innerHTML = text; - option.addEventListener("click", function(e) { - // do selection - }); - el.appendChild(option); - }); - if (addEl) { - var selection = window.getSelection(); - if (selection.rangeCount > 0) { - var range = selection.getRangeAt(0); - range.insertNode(el); - } - } -} - - -initialize = function(base_uri) { - - const macro_rule = /@(\S{3,})/; - - VIEW_URI = base_uri; - - const ed = new toastui.Editor({ - el: editor, - initialEditType: 'wysiwyg', - initialValue: "", - hideModeSwitch : true, - previewStyle: 'vertical', - usageStatistics: false, - autofocus: false, - toolbarItems: [ - ['heading', 'bold', 'italic' ], - ['ul', 'ol', 'indent', 'outdent'], - ['table', 'image', 'link'], - [ - { el: makeMarkdownButton(), tooltip: 'Toggle MD' }, - ], - [ - { el: makeSaveButton(), command: 'save', tooltip: 'Save Changes' }, - { el: toggleButton(), tooltip: 'Toggle Edit Mode' } - ], - ], - widgetRules: [ ], + commonmark = null; + turndown = null; + #cachedHTML = null; + #cachedMarkdown = null; + #state = null; + #changed = false; + constructor(settings) { /* - { - rule: macro_rule, toDOM(text) { - const matched = text.match(macro_rule); - const search_string = matched[1]; - - var replacement = ""; - - }); - console.log(replacement); - return replacement; - }, - }, - ], - */ - events: { - 'loadUI': function(e) { - editorUI = e; - pageContent = document.querySelector(".toastui-editor-ww-container > div > div"); - toolBar = document.querySelector('.toastui-editor-toolbar'); - - e.setMarkdown(document.getElementById("data_form__body").value); - setReadOnly(); - - }, - 'changeMode': function() { - if (editor && Array(editor.classList).includes('read-only')) { - setReadOnly(); - } - }, - 'change': handleContentChange, - } - }); - - var searchPos = null; - ed.on('keyup', (editorType, ev) => { - const [start, end] = editorUI.getSelection(); - console.log(start, end); - if (ev.key === '@') { - searchPos = start; - console.log(`Setting search position to ${searchPos}`); - return; - } - if (searchPos === null) { - return; - } - - var range = window.getSelection().getRangeAt(0); - range.selectNodeContents(editor); - range.setStart(editor, 0); - range.setEnd(editor, end); - var search_string = range.toString(); - console.log(search_string); - - - - /* - APIv1.search("", search_string, (res) => { - if (res.code == 404) { - return; - } - const matches = res.response; - if (matches.length == 1) { - replacement = document.createElement('span'); - replacement.innerHTML = `${matches[0].name}`; - return; - } - - autoComplete(search_string, matches, (selection) => { - console.log(`Selected ${selection}`); - document.remove(options.id); - }); + * Create a new Editor instance. + */ + this.element = document.getElementById(settings.editorId || 'editor'); + this.source = this.element.innerHTML; + this.commonmark = { + reader: new commonmark.Parser(), + writer: new commonmark.HtmlRenderer(), }; - */ - }); + this.turndown = new TurndownService({ + headingStyle: 'atx', + codeBlockStyle: 'fenced', + }); - return ed; + this.plugins = {}; + settings.plugins.forEach(plugin => { + this.plugins[plugin.name] = new plugin({name: plugin.name, editor: this}); + }); + this.#bindEvents(); + this.getHTML(); + this.element.classList.add("loaded"); + } + + #bindEvents() { + this.element.addEventListener('keydown', (evt) => { + if (this.#state === this.#states.VIEW) { + return; + } + + if (event.key === 'Enter') { + if (this.#state === this.#states.EDIT) { + evt.preventDefault(); + this.insertAtCursor(document.createTextNode("\n")); + } + } + + if (this.#cachedMarkdown != this.element.innerHTML) { + this.#changed = true; + this.#cachedMarkdown = this.element.innerHTML; + } + }); + }; + + + getState() { + return this.#state; + } + + setState(newState) { + this.#state = newState; + Object.values(this.#states).forEach(state => { + if (state == newState) { + this.element.classList.add(state); + } else { + this.element.classList.remove(state); + } + }); + } + + getHTML() { + /* + * Convert the markdown source to HTML. + */ + if (this.#changed || !this.#cachedHTML) { + var md = this.getMarkdown(); + var parsed = this.commonmark.reader.parse(md); + var html = this.commonmark.writer.render(parsed); + Object.values(this.plugins).forEach(plugin => { + html = plugin.toHTML(html); + }); + this.#cachedHTML = html; + + } + return this.#cachedHTML; + } + + getMarkdown() { + /* + * Return the current markdown. + */ + if (this.getState() === this.#states.EDIT) { + this.#cachedMarkdown = this.element.innerHTML; + } else if (this.getState() === this.#states.WYSIWYG) { + var md = this.element.innerHTML; + Object.values(this.plugins).forEach(plugin => { + md = plugin.toMarkdown(md); + }); + this.#cachedMarkdown = this.turndown.turndown(md); + } else if (!this.#cachedMarkdown) { + this.#cachedMarkdown = this.source; + } + this.#cachedMarkdown = this.#cachedMarkdown.replaceAll(/^>/mg, '>'); + return this.#cachedMarkdown; + } + + reset() { + /* + * Discard any unsaved edits and reset the editor to its initial state. + */ + this.#cachedHTML = null; + this.#cachedMarkdown = null; + this.view(); + } + + view() { + /* + * Convert the editor read-only mode and display the current HTML. + */ + if (this.getState() === this.#states.VIEW) { + return; + } + this.element.innerHTML = this.getHTML(); + this.setState(this.#states.VIEW); + } + + wysiwyg() { + /* + * Put the editor in WYSIWYG editing mode. + */ + if (this.getState() === this.#states.WYSIWYG) { + return; + } + this.#changed = false; + this.element.contentEditable = true; + this.element.innerHTML = this.getHTML(); + this.setState(this.#states.WYSIWYG); + } + + edit() { + /* + * Put the editor into source editing mode. + */ + if (this.#state === this.#states.EDIT) { + return; + } + + this.#changed = false; + this.element.contentEditable = true; + this.element.innerHTML = this.getMarkdown(); + this.setState(this.#states.EDIT); + } + + insertAtCursor(node) { + var sel, range, html; + sel = window.getSelection(); + range = sel.getRangeAt(0); + range.deleteContents(); + range.insertNode(node); + range.setStartAfter(node); + this.element.focus(); + sel.removeAllRanges(); + sel.addRange(range); + } + +} + + +class EditorPlugin { + constructor(settings) { + this.name = settings.name; + this.editor = settings.editor; + }; + + cleanAttribute(attribute) { + return attribute ? attribute.replace(/(\n+\s*)+/g, '\n') : '' + } + + toMarkdown(html) { + return html; + }; + + toHTML(md) { + return md; + }; }; + + +class TablePlugin extends EditorPlugin { + constructor(settings) { + super(settings); + this.editor.turndown.use(turndownPluginGfm.tables); + this.pattern = /(?(?:\|[^|]+?)+\|[\s\n]*)(?:<|$)/gims; + this.dividerPattern = /\|\s*\-+\s*\|/; + } + + toHTML(md) { + md.matchAll(this.pattern).forEach(matched => { + var html = ''; + var cellTag = 'th'; + matched.groups.contents.split("\n").forEach(line => { + if (this.dividerPattern.test(line)) { + html += ""; + cellTag = 'td'; + } else { + html += ""; + var cells = line.split("|"); + html += "<" + cellTag + ">" + cells.slice(1, cells.length - 1).join("<" + cellTag + ">") + ""; + html += ""; + } + }); + html += "
"; + md = md.replaceAll(matched[1], html); + }); + return md; + } +} + +class MacroPlugin extends EditorPlugin { + + macros = { + // image: {} + // toc {} + // widget {} + // + html: { + toHTML: (settings) => { + var html = settings.block.replaceAll(">", ">").replaceAll("<", "<"); + return html; + }, + toMarkdown: (node) => { + const utf8encoder = new TextEncoder(); + return "{{html\n" + b64decode(node.dataset.block) + "\n}}"; + } + }, + user: { + toHTML: (settings) => { + return document.querySelector("nav > ul > li.user > a:first-child").outerHTML; + }, + }, + npc: { + toHTML: (settings) => { + var name = camelCase(settings.keywords).join(" "); + var target = name.replaceAll(" ", ""); + return `👤 ${name}`; + }, + toMarkdown: (node) => { + return `{{npc ${node.firstChild.dataset.npcName}}}`; + }, + }, + spell: { + toHTML: (settings) => { + var name = camelCase(settings.keywords).join(" "); + var target = name.replaceAll(" ", ""); + return `✨ ${name}`; + }, + toMarkdown: (node) => { + return `{{spell ${node.firstChild.dataset.spellName}}}`; + }, + }, + } + + constructor(settings) { + super(settings); + this.pattern = /(?{{(?\w+)(?(?:\s*\w+)*)(?(?:\s+\w+="[^"]*")*?)(?\b.*?)?}})/gms; + this.paramPattern = /\b(?[^=]+)="(?[^"]*?)"\b/gm; + + var plugin = this; + this.editor.turndown.addRule('macros', { + filter: ['span'], + replacement: function (content, node, options) { + const parser = plugin.macros[node.getAttribute('data-macro-name')].toMarkdown; + if (parser) { + return parser(node); + } + + var md = '{{' + node.getAttribute('data-macro-name'); + for (var param in node.getAttributeNames()) { + var val = node.getAttribute(param); + if (val) { + md += val + (param == 'data-macro-name' ? " " : `="${node.getAttribute(param)}" `); + } + } + md += '}}'; + return md; + }, + }); + } + + toHTML(md) { + const utf8encoder = new TextEncoder(); + var output = md; + output.matchAll(this.pattern).forEach(matched => { + var macroName = matched.groups.name; + var html = ` { + settings.params[param.groups.name] = param.groups.value; + html += ` data-param-${param.groups.name}="${param.groups.value}"`; + }); + html += ` data-block="${b64encode(matched.groups.block)}"`; + html += '>'; + html += this.macros[macroName].toHTML(settings); + html += ''; + output = output.replaceAll(matched[1], html); + }); + return output; + } +} + +function camelCase(words) { + var output = []; + words.trim().split(/\s+/g).forEach(word => { + var lcWord = word.toLowerCase(); + output.push(lcWord.charAt(0).toUpperCase() + lcWord.slice(1)); + }); + return output; +} + +function b64encode(input) { + const utf8encoder = new TextEncoder(); + return utf8encoder.encode(input).toBase64(); +} + +function b64decode(input) { + const utf8encoder = new TextEncoder(); + return utf8encoder.decode(input.fromBase64()); +} + + +editor = new Editor({ + plugins: [TablePlugin, MacroPlugin] +}); +editor.view(); diff --git a/src/ttfrog/themes/default/static/editor/toastui-editor-all.min.js b/src/ttfrog/themes/default/static/editor/toastui-editor-all.min.js deleted file mode 100644 index 178581e..0000000 --- a/src/ttfrog/themes/default/static/editor/toastui-editor-all.min.js +++ /dev/null @@ -1,24 +0,0 @@ -/*! - * @toast-ui/editor - * @version 3.2.2 | Fri Feb 17 2023 - * @author NHN Cloud FE Development Lab - * @license MIT - */ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.toastui=t():(e.toastui=e.toastui||{},e.toastui.Editor=t())}(self,(function(){return function(){var e={368:function(e){ -/*! @license DOMPurify 2.3.3 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/2.3.3/LICENSE */ -e.exports=function(){"use strict";function e(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1?n-1:0),o=1;o/gm),q=a(/^data-[\-\w.\u00B7-\uFFFF]/),V=a(/^aria-[\-\w]+$/),j=a(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),$=a(/^(?:\w+script|data):/i),_=a(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),U="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};function W(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0&&void 0!==arguments[0]?arguments[0]:J(),t=function(e){return K(e)};if(t.version="2.3.3",t.removed=[],!e||!e.document||9!==e.document.nodeType)return t.isSupported=!1,t;var n=e.document,r=e.document,o=e.DocumentFragment,i=e.HTMLTemplateElement,a=e.Node,l=e.Element,c=e.NodeFilter,u=e.NamedNodeMap,d=void 0===u?e.NamedNodeMap||e.MozNamedAttrMap:u,x=e.Text,C=e.Comment,Z=e.DOMParser,X=e.trustedTypes,Q=l.prototype,Y=S(Q,"cloneNode"),ee=S(Q,"nextSibling"),te=S(Q,"childNodes"),ne=S(Q,"parentNode");if("function"==typeof i){var re=r.createElement("template");re.content&&re.content.ownerDocument&&(r=re.content.ownerDocument)}var oe=G(X,n),ie=oe&&Fe?oe.createHTML(""):"",se=r,ae=se.implementation,le=se.createNodeIterator,ce=se.createDocumentFragment,ue=se.getElementsByTagName,de=n.importNode,pe={};try{pe=M(r).documentMode?r.documentMode:{}}catch(e){}var he={};t.isSupported="function"==typeof ne&&ae&&void 0!==ae.createHTMLDocument&&9!==pe;var fe=H,me=z,ge=q,ve=V,ye=$,be=_,we=j,ke=null,xe=T({},[].concat(W(E),W(N),W(O),W(A),W(I))),Ce=null,Te=T({},[].concat(W(R),W(P),W(B),W(F))),Me=null,Se=null,Ee=!0,Ne=!0,Oe=!1,De=!1,Ae=!1,Le=!1,Ie=!1,Re=!1,Pe=!1,Be=!0,Fe=!1,He=!0,ze=!0,qe=!1,Ve={},je=null,$e=T({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]),_e=null,Ue=T({},["audio","video","img","source","image","track"]),We=null,Je=T({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),Ge="http://www.w3.org/1998/Math/MathML",Ke="http://www.w3.org/2000/svg",Ze="http://www.w3.org/1999/xhtml",Xe=Ze,Qe=!1,Ye=void 0,et=["application/xhtml+xml","text/html"],tt="text/html",nt=void 0,rt=null,ot=r.createElement("form"),it=function(e){rt&&rt===e||(e&&"object"===(void 0===e?"undefined":U(e))||(e={}),e=M(e),ke="ALLOWED_TAGS"in e?T({},e.ALLOWED_TAGS):xe,Ce="ALLOWED_ATTR"in e?T({},e.ALLOWED_ATTR):Te,We="ADD_URI_SAFE_ATTR"in e?T(M(Je),e.ADD_URI_SAFE_ATTR):Je,_e="ADD_DATA_URI_TAGS"in e?T(M(Ue),e.ADD_DATA_URI_TAGS):Ue,je="FORBID_CONTENTS"in e?T({},e.FORBID_CONTENTS):$e,Me="FORBID_TAGS"in e?T({},e.FORBID_TAGS):{},Se="FORBID_ATTR"in e?T({},e.FORBID_ATTR):{},Ve="USE_PROFILES"in e&&e.USE_PROFILES,Ee=!1!==e.ALLOW_ARIA_ATTR,Ne=!1!==e.ALLOW_DATA_ATTR,Oe=e.ALLOW_UNKNOWN_PROTOCOLS||!1,De=e.SAFE_FOR_TEMPLATES||!1,Ae=e.WHOLE_DOCUMENT||!1,Re=e.RETURN_DOM||!1,Pe=e.RETURN_DOM_FRAGMENT||!1,Be=!1!==e.RETURN_DOM_IMPORT,Fe=e.RETURN_TRUSTED_TYPE||!1,Ie=e.FORCE_BODY||!1,He=!1!==e.SANITIZE_DOM,ze=!1!==e.KEEP_CONTENT,qe=e.IN_PLACE||!1,we=e.ALLOWED_URI_REGEXP||we,Xe=e.NAMESPACE||Ze,Ye=Ye=-1===et.indexOf(e.PARSER_MEDIA_TYPE)?tt:e.PARSER_MEDIA_TYPE,nt="application/xhtml+xml"===Ye?function(e){return e}:m,De&&(Ne=!1),Pe&&(Re=!0),Ve&&(ke=T({},[].concat(W(I))),Ce=[],!0===Ve.html&&(T(ke,E),T(Ce,R)),!0===Ve.svg&&(T(ke,N),T(Ce,P),T(Ce,F)),!0===Ve.svgFilters&&(T(ke,O),T(Ce,P),T(Ce,F)),!0===Ve.mathMl&&(T(ke,A),T(Ce,B),T(Ce,F))),e.ADD_TAGS&&(ke===xe&&(ke=M(ke)),T(ke,e.ADD_TAGS)),e.ADD_ATTR&&(Ce===Te&&(Ce=M(Ce)),T(Ce,e.ADD_ATTR)),e.ADD_URI_SAFE_ATTR&&T(We,e.ADD_URI_SAFE_ATTR),e.FORBID_CONTENTS&&(je===$e&&(je=M(je)),T(je,e.FORBID_CONTENTS)),ze&&(ke["#text"]=!0),Ae&&T(ke,["html","head","body"]),ke.table&&(T(ke,["tbody"]),delete Me.tbody),s&&s(e),rt=e)},st=T({},["mi","mo","mn","ms","mtext"]),at=T({},["foreignobject","desc","title","annotation-xml"]),lt=T({},N);T(lt,O),T(lt,D);var ct=T({},A);T(ct,L);var ut=function(e){var t=ne(e);t&&t.tagName||(t={namespaceURI:Ze,tagName:"template"});var n=m(e.tagName),r=m(t.tagName);if(e.namespaceURI===Ke)return t.namespaceURI===Ze?"svg"===n:t.namespaceURI===Ge?"svg"===n&&("annotation-xml"===r||st[r]):Boolean(lt[n]);if(e.namespaceURI===Ge)return t.namespaceURI===Ze?"math"===n:t.namespaceURI===Ke?"math"===n&&at[r]:Boolean(ct[n]);if(e.namespaceURI===Ze){if(t.namespaceURI===Ke&&!at[r])return!1;if(t.namespaceURI===Ge&&!st[r])return!1;var o=T({},["title","style","font","a","script"]);return!ct[n]&&(o[n]||!lt[n])}return!1},dt=function(e){f(t.removed,{element:e});try{e.parentNode.removeChild(e)}catch(t){try{e.outerHTML=ie}catch(t){e.remove()}}},pt=function(e,n){try{f(t.removed,{attribute:n.getAttributeNode(e),from:n})}catch(e){f(t.removed,{attribute:null,from:n})}if(n.removeAttribute(e),"is"===e&&!Ce[e])if(Re||Pe)try{dt(n)}catch(e){}else try{n.setAttribute(e,"")}catch(e){}},ht=function(e){var t=void 0,n=void 0;if(Ie)e=""+e;else{var o=g(e,/^[\r\n\t ]+/);n=o&&o[0]}"application/xhtml+xml"===Ye&&(e=''+e+"");var i=oe?oe.createHTML(e):e;if(Xe===Ze)try{t=(new Z).parseFromString(i,Ye)}catch(e){}if(!t||!t.documentElement){t=ae.createDocument(Xe,"template",null);try{t.documentElement.innerHTML=Qe?"":i}catch(e){}}var s=t.body||t.documentElement;return e&&n&&s.insertBefore(r.createTextNode(n),s.childNodes[0]||null),Xe===Ze?ue.call(t,Ae?"html":"body")[0]:Ae?t.documentElement:s},ft=function(e){return le.call(e.ownerDocument||e,e,c.SHOW_ELEMENT|c.SHOW_COMMENT|c.SHOW_TEXT,null,!1)},mt=function(e){return!(e instanceof x||e instanceof C||"string"==typeof e.nodeName&&"string"==typeof e.textContent&&"function"==typeof e.removeChild&&e.attributes instanceof d&&"function"==typeof e.removeAttribute&&"function"==typeof e.setAttribute&&"string"==typeof e.namespaceURI&&"function"==typeof e.insertBefore)},gt=function(e){return"object"===(void 0===a?"undefined":U(a))?e instanceof a:e&&"object"===(void 0===e?"undefined":U(e))&&"number"==typeof e.nodeType&&"string"==typeof e.nodeName},vt=function(e,n,r){he[e]&&p(he[e],(function(e){e.call(t,n,r,rt)}))},yt=function(e){var n=void 0;if(vt("beforeSanitizeElements",e,null),mt(e))return dt(e),!0;if(g(e.nodeName,/[\u0080-\uFFFF]/))return dt(e),!0;var r=nt(e.nodeName);if(vt("uponSanitizeElement",e,{tagName:r,allowedTags:ke}),!gt(e.firstElementChild)&&(!gt(e.content)||!gt(e.content.firstElementChild))&&w(/<[/\w]/g,e.innerHTML)&&w(/<[/\w]/g,e.textContent))return dt(e),!0;if("select"===r&&w(/