From c1aa09097556c30a755bb138b7989e4efb65cac0 Mon Sep 17 00:00:00 2001 From: Zane Meyers Date: Tue, 2 Jun 2026 07:51:02 -0400 Subject: [PATCH] vault backup: 2026-06-02 07:51:02 --- .obsidian/community-plugins.json | 6 +- .../obsidian-citation-plugin/data.json | 9 + .../plugins/obsidian-citation-plugin/main.js | 85891 ++++++++++++++++ .../obsidian-citation-plugin/manifest.json | 10 + .../obsidian-citation-plugin/styles.css | 114 + bibliography.bib | 358 + timestamped/2026-06-01_23-33-13.md | 17 + 7 files changed, 86401 insertions(+), 4 deletions(-) create mode 100644 .obsidian/plugins/obsidian-citation-plugin/data.json create mode 100644 .obsidian/plugins/obsidian-citation-plugin/main.js create mode 100644 .obsidian/plugins/obsidian-citation-plugin/manifest.json create mode 100644 .obsidian/plugins/obsidian-citation-plugin/styles.css create mode 100644 bibliography.bib create mode 100644 timestamped/2026-06-01_23-33-13.md diff --git a/.obsidian/community-plugins.json b/.obsidian/community-plugins.json index 18e91b9..aea9ca0 100644 --- a/.obsidian/community-plugins.json +++ b/.obsidian/community-plugins.json @@ -26,8 +26,6 @@ "cmdr", "sheets", "tabout", - "inline-spoilers", - "obsidian-quiet-outline", - "tasknotes", - "daily-notes-editor" + "obsidian-tidy-footnotes", + "obsidian-citation-plugin" ] \ No newline at end of file diff --git a/.obsidian/plugins/obsidian-citation-plugin/data.json b/.obsidian/plugins/obsidian-citation-plugin/data.json new file mode 100644 index 0000000..b9257dd --- /dev/null +++ b/.obsidian/plugins/obsidian-citation-plugin/data.json @@ -0,0 +1,9 @@ +{ + "citationExportFormat": "biblatex", + "literatureNoteTitleTemplate": "@{{citekey}}", + "literatureNoteFolder": "", + "literatureNoteContentTemplate": "---\ntitle: {{title}}\nauthors: {{authorString}}\nyear: {{year}}\n---\n\n", + "markdownCitationTemplate": "[@{{citekey}}]", + "alternativeMarkdownCitationTemplate": "@{{citekey}}", + "citationExportPath": "bibliography.bib" +} \ No newline at end of file diff --git a/.obsidian/plugins/obsidian-citation-plugin/main.js b/.obsidian/plugins/obsidian-citation-plugin/main.js new file mode 100644 index 0000000..bf0fc0f --- /dev/null +++ b/.obsidian/plugins/obsidian-citation-plugin/main.js @@ -0,0 +1,85891 @@ +'use strict'; + +var obsidian = require('obsidian'); +var sysPath = require('path'); +var require$$0$4 = require('events'); +var require$$0$2 = require('util'); +var fs$3 = require('fs'); +var require$$0$3 = require('stream'); +var require$$1$1 = require('os'); + +function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } + +var sysPath__default = /*#__PURE__*/_interopDefaultLegacy(sysPath); +var require$$0__default$2 = /*#__PURE__*/_interopDefaultLegacy(require$$0$4); +var require$$0__default = /*#__PURE__*/_interopDefaultLegacy(require$$0$2); +var fs__default = /*#__PURE__*/_interopDefaultLegacy(fs$3); +var require$$0__default$1 = /*#__PURE__*/_interopDefaultLegacy(require$$0$3); +var require$$1__default = /*#__PURE__*/_interopDefaultLegacy(require$$1$1); + +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +***************************************************************************** */ +/* global Reflect, Promise */ + +var extendStatics = function(d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); +}; + +function __extends(d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); +} + +var __assign = function() { + __assign = Object.assign || function __assign(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; + +function __awaiter(thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +} + +function __generator(thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +} + +var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; + +function createCommonjsModule(fn, basedir, module) { + return module = { + path: basedir, + exports: {}, + require: function (path, base) { + return commonjsRequire(path, (base === undefined || base === null) ? module.path : base); + } + }, fn(module, module.exports), module.exports; +} + +function commonjsRequire () { + throw new Error('Dynamic requires are not currently supported by @rollup/plugin-commonjs'); +} + +const WIN_SLASH = '\\\\/'; +const WIN_NO_SLASH = `[^${WIN_SLASH}]`; + +/** + * Posix glob regex + */ + +const DOT_LITERAL = '\\.'; +const PLUS_LITERAL = '\\+'; +const QMARK_LITERAL = '\\?'; +const SLASH_LITERAL = '\\/'; +const ONE_CHAR = '(?=.)'; +const QMARK = '[^/]'; +const END_ANCHOR = `(?:${SLASH_LITERAL}|$)`; +const START_ANCHOR = `(?:^|${SLASH_LITERAL})`; +const DOTS_SLASH = `${DOT_LITERAL}{1,2}${END_ANCHOR}`; +const NO_DOT = `(?!${DOT_LITERAL})`; +const NO_DOTS = `(?!${START_ANCHOR}${DOTS_SLASH})`; +const NO_DOT_SLASH = `(?!${DOT_LITERAL}{0,1}${END_ANCHOR})`; +const NO_DOTS_SLASH = `(?!${DOTS_SLASH})`; +const QMARK_NO_DOT = `[^.${SLASH_LITERAL}]`; +const STAR = `${QMARK}*?`; + +const POSIX_CHARS = { + DOT_LITERAL, + PLUS_LITERAL, + QMARK_LITERAL, + SLASH_LITERAL, + ONE_CHAR, + QMARK, + END_ANCHOR, + DOTS_SLASH, + NO_DOT, + NO_DOTS, + NO_DOT_SLASH, + NO_DOTS_SLASH, + QMARK_NO_DOT, + STAR, + START_ANCHOR +}; + +/** + * Windows glob regex + */ + +const WINDOWS_CHARS = { + ...POSIX_CHARS, + + SLASH_LITERAL: `[${WIN_SLASH}]`, + QMARK: WIN_NO_SLASH, + STAR: `${WIN_NO_SLASH}*?`, + DOTS_SLASH: `${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$)`, + NO_DOT: `(?!${DOT_LITERAL})`, + NO_DOTS: `(?!(?:^|[${WIN_SLASH}])${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`, + NO_DOT_SLASH: `(?!${DOT_LITERAL}{0,1}(?:[${WIN_SLASH}]|$))`, + NO_DOTS_SLASH: `(?!${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`, + QMARK_NO_DOT: `[^.${WIN_SLASH}]`, + START_ANCHOR: `(?:^|[${WIN_SLASH}])`, + END_ANCHOR: `(?:[${WIN_SLASH}]|$)` +}; + +/** + * POSIX Bracket Regex + */ + +const POSIX_REGEX_SOURCE = { + alnum: 'a-zA-Z0-9', + alpha: 'a-zA-Z', + ascii: '\\x00-\\x7F', + blank: ' \\t', + cntrl: '\\x00-\\x1F\\x7F', + digit: '0-9', + graph: '\\x21-\\x7E', + lower: 'a-z', + print: '\\x20-\\x7E ', + punct: '\\-!"#$%&\'()\\*+,./:;<=>?@[\\]^_`{|}~', + space: ' \\t\\r\\n\\v\\f', + upper: 'A-Z', + word: 'A-Za-z0-9_', + xdigit: 'A-Fa-f0-9' +}; + +var constants = { + MAX_LENGTH: 1024 * 64, + POSIX_REGEX_SOURCE, + + // regular expressions + REGEX_BACKSLASH: /\\(?![*+?^${}(|)[\]])/g, + REGEX_NON_SPECIAL_CHARS: /^[^@![\].,$*+?^{}()|\\/]+/, + REGEX_SPECIAL_CHARS: /[-*+?.^${}(|)[\]]/, + REGEX_SPECIAL_CHARS_BACKREF: /(\\?)((\W)(\3*))/g, + REGEX_SPECIAL_CHARS_GLOBAL: /([-*+?.^${}(|)[\]])/g, + REGEX_REMOVE_BACKSLASH: /(?:\[.*?[^\\]\]|\\(?=.))/g, + + // Replace globs with equivalent patterns to reduce parsing time. + REPLACEMENTS: { + '***': '*', + '**/**': '**', + '**/**/**': '**' + }, + + // Digits + CHAR_0: 48, /* 0 */ + CHAR_9: 57, /* 9 */ + + // Alphabet chars. + CHAR_UPPERCASE_A: 65, /* A */ + CHAR_LOWERCASE_A: 97, /* a */ + CHAR_UPPERCASE_Z: 90, /* Z */ + CHAR_LOWERCASE_Z: 122, /* z */ + + CHAR_LEFT_PARENTHESES: 40, /* ( */ + CHAR_RIGHT_PARENTHESES: 41, /* ) */ + + CHAR_ASTERISK: 42, /* * */ + + // Non-alphabetic chars. + CHAR_AMPERSAND: 38, /* & */ + CHAR_AT: 64, /* @ */ + CHAR_BACKWARD_SLASH: 92, /* \ */ + CHAR_CARRIAGE_RETURN: 13, /* \r */ + CHAR_CIRCUMFLEX_ACCENT: 94, /* ^ */ + CHAR_COLON: 58, /* : */ + CHAR_COMMA: 44, /* , */ + CHAR_DOT: 46, /* . */ + CHAR_DOUBLE_QUOTE: 34, /* " */ + CHAR_EQUAL: 61, /* = */ + CHAR_EXCLAMATION_MARK: 33, /* ! */ + CHAR_FORM_FEED: 12, /* \f */ + CHAR_FORWARD_SLASH: 47, /* / */ + CHAR_GRAVE_ACCENT: 96, /* ` */ + CHAR_HASH: 35, /* # */ + CHAR_HYPHEN_MINUS: 45, /* - */ + CHAR_LEFT_ANGLE_BRACKET: 60, /* < */ + CHAR_LEFT_CURLY_BRACE: 123, /* { */ + CHAR_LEFT_SQUARE_BRACKET: 91, /* [ */ + CHAR_LINE_FEED: 10, /* \n */ + CHAR_NO_BREAK_SPACE: 160, /* \u00A0 */ + CHAR_PERCENT: 37, /* % */ + CHAR_PLUS: 43, /* + */ + CHAR_QUESTION_MARK: 63, /* ? */ + CHAR_RIGHT_ANGLE_BRACKET: 62, /* > */ + CHAR_RIGHT_CURLY_BRACE: 125, /* } */ + CHAR_RIGHT_SQUARE_BRACKET: 93, /* ] */ + CHAR_SEMICOLON: 59, /* ; */ + CHAR_SINGLE_QUOTE: 39, /* ' */ + CHAR_SPACE: 32, /* */ + CHAR_TAB: 9, /* \t */ + CHAR_UNDERSCORE: 95, /* _ */ + CHAR_VERTICAL_LINE: 124, /* | */ + CHAR_ZERO_WIDTH_NOBREAK_SPACE: 65279, /* \uFEFF */ + + SEP: sysPath__default['default'].sep, + + /** + * Create EXTGLOB_CHARS + */ + + extglobChars(chars) { + return { + '!': { type: 'negate', open: '(?:(?!(?:', close: `))${chars.STAR})` }, + '?': { type: 'qmark', open: '(?:', close: ')?' }, + '+': { type: 'plus', open: '(?:', close: ')+' }, + '*': { type: 'star', open: '(?:', close: ')*' }, + '@': { type: 'at', open: '(?:', close: ')' } + }; + }, + + /** + * Create GLOB_CHARS + */ + + globChars(win32) { + return win32 === true ? WINDOWS_CHARS : POSIX_CHARS; + } +}; + +var utils = createCommonjsModule(function (module, exports) { + + +const win32 = process.platform === 'win32'; +const { + REGEX_BACKSLASH, + REGEX_REMOVE_BACKSLASH, + REGEX_SPECIAL_CHARS, + REGEX_SPECIAL_CHARS_GLOBAL +} = constants; + +exports.isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val); +exports.hasRegexChars = str => REGEX_SPECIAL_CHARS.test(str); +exports.isRegexChar = str => str.length === 1 && exports.hasRegexChars(str); +exports.escapeRegex = str => str.replace(REGEX_SPECIAL_CHARS_GLOBAL, '\\$1'); +exports.toPosixSlashes = str => str.replace(REGEX_BACKSLASH, '/'); + +exports.removeBackslashes = str => { + return str.replace(REGEX_REMOVE_BACKSLASH, match => { + return match === '\\' ? '' : match; + }); +}; + +exports.supportsLookbehinds = () => { + const segs = process.version.slice(1).split('.').map(Number); + if (segs.length === 3 && segs[0] >= 9 || (segs[0] === 8 && segs[1] >= 10)) { + return true; + } + return false; +}; + +exports.isWindows = options => { + if (options && typeof options.windows === 'boolean') { + return options.windows; + } + return win32 === true || sysPath__default['default'].sep === '\\'; +}; + +exports.escapeLast = (input, char, lastIdx) => { + const idx = input.lastIndexOf(char, lastIdx); + if (idx === -1) return input; + if (input[idx - 1] === '\\') return exports.escapeLast(input, char, idx - 1); + return `${input.slice(0, idx)}\\${input.slice(idx)}`; +}; + +exports.removePrefix = (input, state = {}) => { + let output = input; + if (output.startsWith('./')) { + output = output.slice(2); + state.prefix = './'; + } + return output; +}; + +exports.wrapOutput = (input, state = {}, options = {}) => { + const prepend = options.contains ? '' : '^'; + const append = options.contains ? '' : '$'; + + let output = `${prepend}(?:${input})${append}`; + if (state.negated === true) { + output = `(?:^(?!${output}).*$)`; + } + return output; +}; +}); + +const { + CHAR_ASTERISK, /* * */ + CHAR_AT, /* @ */ + CHAR_BACKWARD_SLASH, /* \ */ + CHAR_COMMA, /* , */ + CHAR_DOT, /* . */ + CHAR_EXCLAMATION_MARK, /* ! */ + CHAR_FORWARD_SLASH, /* / */ + CHAR_LEFT_CURLY_BRACE, /* { */ + CHAR_LEFT_PARENTHESES, /* ( */ + CHAR_LEFT_SQUARE_BRACKET, /* [ */ + CHAR_PLUS, /* + */ + CHAR_QUESTION_MARK, /* ? */ + CHAR_RIGHT_CURLY_BRACE, /* } */ + CHAR_RIGHT_PARENTHESES, /* ) */ + CHAR_RIGHT_SQUARE_BRACKET /* ] */ +} = constants; + +const isPathSeparator = code => { + return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH; +}; + +const depth = token => { + if (token.isPrefix !== true) { + token.depth = token.isGlobstar ? Infinity : 1; + } +}; + +/** + * Quickly scans a glob pattern and returns an object with a handful of + * useful properties, like `isGlob`, `path` (the leading non-glob, if it exists), + * `glob` (the actual pattern), and `negated` (true if the path starts with `!`). + * + * ```js + * const pm = require('picomatch'); + * console.log(pm.scan('foo/bar/*.js')); + * { isGlob: true, input: 'foo/bar/*.js', base: 'foo/bar', glob: '*.js' } + * ``` + * @param {String} `str` + * @param {Object} `options` + * @return {Object} Returns an object with tokens and regex source string. + * @api public + */ + +const scan = (input, options) => { + const opts = options || {}; + + const length = input.length - 1; + const scanToEnd = opts.parts === true || opts.scanToEnd === true; + const slashes = []; + const tokens = []; + const parts = []; + + let str = input; + let index = -1; + let start = 0; + let lastIndex = 0; + let isBrace = false; + let isBracket = false; + let isGlob = false; + let isExtglob = false; + let isGlobstar = false; + let braceEscaped = false; + let backslashes = false; + let negated = false; + let finished = false; + let braces = 0; + let prev; + let code; + let token = { value: '', depth: 0, isGlob: false }; + + const eos = () => index >= length; + const peek = () => str.charCodeAt(index + 1); + const advance = () => { + prev = code; + return str.charCodeAt(++index); + }; + + while (index < length) { + code = advance(); + let next; + + if (code === CHAR_BACKWARD_SLASH) { + backslashes = token.backslashes = true; + code = advance(); + + if (code === CHAR_LEFT_CURLY_BRACE) { + braceEscaped = true; + } + continue; + } + + if (braceEscaped === true || code === CHAR_LEFT_CURLY_BRACE) { + braces++; + + while (eos() !== true && (code = advance())) { + if (code === CHAR_BACKWARD_SLASH) { + backslashes = token.backslashes = true; + advance(); + continue; + } + + if (code === CHAR_LEFT_CURLY_BRACE) { + braces++; + continue; + } + + if (braceEscaped !== true && code === CHAR_DOT && (code = advance()) === CHAR_DOT) { + isBrace = token.isBrace = true; + isGlob = token.isGlob = true; + finished = true; + + if (scanToEnd === true) { + continue; + } + + break; + } + + if (braceEscaped !== true && code === CHAR_COMMA) { + isBrace = token.isBrace = true; + isGlob = token.isGlob = true; + finished = true; + + if (scanToEnd === true) { + continue; + } + + break; + } + + if (code === CHAR_RIGHT_CURLY_BRACE) { + braces--; + + if (braces === 0) { + braceEscaped = false; + isBrace = token.isBrace = true; + finished = true; + break; + } + } + } + + if (scanToEnd === true) { + continue; + } + + break; + } + + if (code === CHAR_FORWARD_SLASH) { + slashes.push(index); + tokens.push(token); + token = { value: '', depth: 0, isGlob: false }; + + if (finished === true) continue; + if (prev === CHAR_DOT && index === (start + 1)) { + start += 2; + continue; + } + + lastIndex = index + 1; + continue; + } + + if (opts.noext !== true) { + const isExtglobChar = code === CHAR_PLUS + || code === CHAR_AT + || code === CHAR_ASTERISK + || code === CHAR_QUESTION_MARK + || code === CHAR_EXCLAMATION_MARK; + + if (isExtglobChar === true && peek() === CHAR_LEFT_PARENTHESES) { + isGlob = token.isGlob = true; + isExtglob = token.isExtglob = true; + finished = true; + + if (scanToEnd === true) { + while (eos() !== true && (code = advance())) { + if (code === CHAR_BACKWARD_SLASH) { + backslashes = token.backslashes = true; + code = advance(); + continue; + } + + if (code === CHAR_RIGHT_PARENTHESES) { + isGlob = token.isGlob = true; + finished = true; + break; + } + } + continue; + } + break; + } + } + + if (code === CHAR_ASTERISK) { + if (prev === CHAR_ASTERISK) isGlobstar = token.isGlobstar = true; + isGlob = token.isGlob = true; + finished = true; + + if (scanToEnd === true) { + continue; + } + break; + } + + if (code === CHAR_QUESTION_MARK) { + isGlob = token.isGlob = true; + finished = true; + + if (scanToEnd === true) { + continue; + } + break; + } + + if (code === CHAR_LEFT_SQUARE_BRACKET) { + while (eos() !== true && (next = advance())) { + if (next === CHAR_BACKWARD_SLASH) { + backslashes = token.backslashes = true; + advance(); + continue; + } + + if (next === CHAR_RIGHT_SQUARE_BRACKET) { + isBracket = token.isBracket = true; + isGlob = token.isGlob = true; + finished = true; + + if (scanToEnd === true) { + continue; + } + break; + } + } + } + + if (opts.nonegate !== true && code === CHAR_EXCLAMATION_MARK && index === start) { + negated = token.negated = true; + start++; + continue; + } + + if (opts.noparen !== true && code === CHAR_LEFT_PARENTHESES) { + isGlob = token.isGlob = true; + + if (scanToEnd === true) { + while (eos() !== true && (code = advance())) { + if (code === CHAR_LEFT_PARENTHESES) { + backslashes = token.backslashes = true; + code = advance(); + continue; + } + + if (code === CHAR_RIGHT_PARENTHESES) { + finished = true; + break; + } + } + continue; + } + break; + } + + if (isGlob === true) { + finished = true; + + if (scanToEnd === true) { + continue; + } + + break; + } + } + + if (opts.noext === true) { + isExtglob = false; + isGlob = false; + } + + let base = str; + let prefix = ''; + let glob = ''; + + if (start > 0) { + prefix = str.slice(0, start); + str = str.slice(start); + lastIndex -= start; + } + + if (base && isGlob === true && lastIndex > 0) { + base = str.slice(0, lastIndex); + glob = str.slice(lastIndex); + } else if (isGlob === true) { + base = ''; + glob = str; + } else { + base = str; + } + + if (base && base !== '' && base !== '/' && base !== str) { + if (isPathSeparator(base.charCodeAt(base.length - 1))) { + base = base.slice(0, -1); + } + } + + if (opts.unescape === true) { + if (glob) glob = utils.removeBackslashes(glob); + + if (base && backslashes === true) { + base = utils.removeBackslashes(base); + } + } + + const state = { + prefix, + input, + start, + base, + glob, + isBrace, + isBracket, + isGlob, + isExtglob, + isGlobstar, + negated + }; + + if (opts.tokens === true) { + state.maxDepth = 0; + if (!isPathSeparator(code)) { + tokens.push(token); + } + state.tokens = tokens; + } + + if (opts.parts === true || opts.tokens === true) { + let prevIndex; + + for (let idx = 0; idx < slashes.length; idx++) { + const n = prevIndex ? prevIndex + 1 : start; + const i = slashes[idx]; + const value = input.slice(n, i); + if (opts.tokens) { + if (idx === 0 && start !== 0) { + tokens[idx].isPrefix = true; + tokens[idx].value = prefix; + } else { + tokens[idx].value = value; + } + depth(tokens[idx]); + state.maxDepth += tokens[idx].depth; + } + if (idx !== 0 || value !== '') { + parts.push(value); + } + prevIndex = i; + } + + if (prevIndex && prevIndex + 1 < input.length) { + const value = input.slice(prevIndex + 1); + parts.push(value); + + if (opts.tokens) { + tokens[tokens.length - 1].value = value; + depth(tokens[tokens.length - 1]); + state.maxDepth += tokens[tokens.length - 1].depth; + } + } + + state.slashes = slashes; + state.parts = parts; + } + + return state; +}; + +var scan_1 = scan; + +/** + * Constants + */ + +const { + MAX_LENGTH, + POSIX_REGEX_SOURCE: POSIX_REGEX_SOURCE$1, + REGEX_NON_SPECIAL_CHARS, + REGEX_SPECIAL_CHARS_BACKREF, + REPLACEMENTS +} = constants; + +/** + * Helpers + */ + +const expandRange = (args, options) => { + if (typeof options.expandRange === 'function') { + return options.expandRange(...args, options); + } + + args.sort(); + const value = `[${args.join('-')}]`; + + try { + /* eslint-disable-next-line no-new */ + new RegExp(value); + } catch (ex) { + return args.map(v => utils.escapeRegex(v)).join('..'); + } + + return value; +}; + +/** + * Create the message for a syntax error + */ + +const syntaxError = (type, char) => { + return `Missing ${type}: "${char}" - use "\\\\${char}" to match literal characters`; +}; + +/** + * Parse the given input string. + * @param {String} input + * @param {Object} options + * @return {Object} + */ + +const parse = (input, options) => { + if (typeof input !== 'string') { + throw new TypeError('Expected a string'); + } + + input = REPLACEMENTS[input] || input; + + const opts = { ...options }; + const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH; + + let len = input.length; + if (len > max) { + throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`); + } + + const bos = { type: 'bos', value: '', output: opts.prepend || '' }; + const tokens = [bos]; + + const capture = opts.capture ? '' : '?:'; + const win32 = utils.isWindows(options); + + // create constants based on platform, for windows or posix + const PLATFORM_CHARS = constants.globChars(win32); + const EXTGLOB_CHARS = constants.extglobChars(PLATFORM_CHARS); + + const { + DOT_LITERAL, + PLUS_LITERAL, + SLASH_LITERAL, + ONE_CHAR, + DOTS_SLASH, + NO_DOT, + NO_DOT_SLASH, + NO_DOTS_SLASH, + QMARK, + QMARK_NO_DOT, + STAR, + START_ANCHOR + } = PLATFORM_CHARS; + + const globstar = (opts) => { + return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`; + }; + + const nodot = opts.dot ? '' : NO_DOT; + const qmarkNoDot = opts.dot ? QMARK : QMARK_NO_DOT; + let star = opts.bash === true ? globstar(opts) : STAR; + + if (opts.capture) { + star = `(${star})`; + } + + // minimatch options support + if (typeof opts.noext === 'boolean') { + opts.noextglob = opts.noext; + } + + const state = { + input, + index: -1, + start: 0, + dot: opts.dot === true, + consumed: '', + output: '', + prefix: '', + backtrack: false, + negated: false, + brackets: 0, + braces: 0, + parens: 0, + quotes: 0, + globstar: false, + tokens + }; + + input = utils.removePrefix(input, state); + len = input.length; + + const extglobs = []; + const braces = []; + const stack = []; + let prev = bos; + let value; + + /** + * Tokenizing helpers + */ + + const eos = () => state.index === len - 1; + const peek = state.peek = (n = 1) => input[state.index + n]; + const advance = state.advance = () => input[++state.index]; + const remaining = () => input.slice(state.index + 1); + const consume = (value = '', num = 0) => { + state.consumed += value; + state.index += num; + }; + const append = token => { + state.output += token.output != null ? token.output : token.value; + consume(token.value); + }; + + const negate = () => { + let count = 1; + + while (peek() === '!' && (peek(2) !== '(' || peek(3) === '?')) { + advance(); + state.start++; + count++; + } + + if (count % 2 === 0) { + return false; + } + + state.negated = true; + state.start++; + return true; + }; + + const increment = type => { + state[type]++; + stack.push(type); + }; + + const decrement = type => { + state[type]--; + stack.pop(); + }; + + /** + * Push tokens onto the tokens array. This helper speeds up + * tokenizing by 1) helping us avoid backtracking as much as possible, + * and 2) helping us avoid creating extra tokens when consecutive + * characters are plain text. This improves performance and simplifies + * lookbehinds. + */ + + const push = tok => { + if (prev.type === 'globstar') { + const isBrace = state.braces > 0 && (tok.type === 'comma' || tok.type === 'brace'); + const isExtglob = tok.extglob === true || (extglobs.length && (tok.type === 'pipe' || tok.type === 'paren')); + + if (tok.type !== 'slash' && tok.type !== 'paren' && !isBrace && !isExtglob) { + state.output = state.output.slice(0, -prev.output.length); + prev.type = 'star'; + prev.value = '*'; + prev.output = star; + state.output += prev.output; + } + } + + if (extglobs.length && tok.type !== 'paren' && !EXTGLOB_CHARS[tok.value]) { + extglobs[extglobs.length - 1].inner += tok.value; + } + + if (tok.value || tok.output) append(tok); + if (prev && prev.type === 'text' && tok.type === 'text') { + prev.value += tok.value; + prev.output = (prev.output || '') + tok.value; + return; + } + + tok.prev = prev; + tokens.push(tok); + prev = tok; + }; + + const extglobOpen = (type, value) => { + const token = { ...EXTGLOB_CHARS[value], conditions: 1, inner: '' }; + + token.prev = prev; + token.parens = state.parens; + token.output = state.output; + const output = (opts.capture ? '(' : '') + token.open; + + increment('parens'); + push({ type, value, output: state.output ? '' : ONE_CHAR }); + push({ type: 'paren', extglob: true, value: advance(), output }); + extglobs.push(token); + }; + + const extglobClose = token => { + let output = token.close + (opts.capture ? ')' : ''); + + if (token.type === 'negate') { + let extglobStar = star; + + if (token.inner && token.inner.length > 1 && token.inner.includes('/')) { + extglobStar = globstar(opts); + } + + if (extglobStar !== star || eos() || /^\)+$/.test(remaining())) { + output = token.close = `)$))${extglobStar}`; + } + + if (token.prev.type === 'bos' && eos()) { + state.negatedExtglob = true; + } + } + + push({ type: 'paren', extglob: true, value, output }); + decrement('parens'); + }; + + /** + * Fast paths + */ + + if (opts.fastpaths !== false && !/(^[*!]|[/()[\]{}"])/.test(input)) { + let backslashes = false; + + let output = input.replace(REGEX_SPECIAL_CHARS_BACKREF, (m, esc, chars, first, rest, index) => { + if (first === '\\') { + backslashes = true; + return m; + } + + if (first === '?') { + if (esc) { + return esc + first + (rest ? QMARK.repeat(rest.length) : ''); + } + if (index === 0) { + return qmarkNoDot + (rest ? QMARK.repeat(rest.length) : ''); + } + return QMARK.repeat(chars.length); + } + + if (first === '.') { + return DOT_LITERAL.repeat(chars.length); + } + + if (first === '*') { + if (esc) { + return esc + first + (rest ? star : ''); + } + return star; + } + return esc ? m : `\\${m}`; + }); + + if (backslashes === true) { + if (opts.unescape === true) { + output = output.replace(/\\/g, ''); + } else { + output = output.replace(/\\+/g, m => { + return m.length % 2 === 0 ? '\\\\' : (m ? '\\' : ''); + }); + } + } + + if (output === input && opts.contains === true) { + state.output = input; + return state; + } + + state.output = utils.wrapOutput(output, state, options); + return state; + } + + /** + * Tokenize input until we reach end-of-string + */ + + while (!eos()) { + value = advance(); + + if (value === '\u0000') { + continue; + } + + /** + * Escaped characters + */ + + if (value === '\\') { + const next = peek(); + + if (next === '/' && opts.bash !== true) { + continue; + } + + if (next === '.' || next === ';') { + continue; + } + + if (!next) { + value += '\\'; + push({ type: 'text', value }); + continue; + } + + // collapse slashes to reduce potential for exploits + const match = /^\\+/.exec(remaining()); + let slashes = 0; + + if (match && match[0].length > 2) { + slashes = match[0].length; + state.index += slashes; + if (slashes % 2 !== 0) { + value += '\\'; + } + } + + if (opts.unescape === true) { + value = advance() || ''; + } else { + value += advance() || ''; + } + + if (state.brackets === 0) { + push({ type: 'text', value }); + continue; + } + } + + /** + * If we're inside a regex character class, continue + * until we reach the closing bracket. + */ + + if (state.brackets > 0 && (value !== ']' || prev.value === '[' || prev.value === '[^')) { + if (opts.posix !== false && value === ':') { + const inner = prev.value.slice(1); + if (inner.includes('[')) { + prev.posix = true; + + if (inner.includes(':')) { + const idx = prev.value.lastIndexOf('['); + const pre = prev.value.slice(0, idx); + const rest = prev.value.slice(idx + 2); + const posix = POSIX_REGEX_SOURCE$1[rest]; + if (posix) { + prev.value = pre + posix; + state.backtrack = true; + advance(); + + if (!bos.output && tokens.indexOf(prev) === 1) { + bos.output = ONE_CHAR; + } + continue; + } + } + } + } + + if ((value === '[' && peek() !== ':') || (value === '-' && peek() === ']')) { + value = `\\${value}`; + } + + if (value === ']' && (prev.value === '[' || prev.value === '[^')) { + value = `\\${value}`; + } + + if (opts.posix === true && value === '!' && prev.value === '[') { + value = '^'; + } + + prev.value += value; + append({ value }); + continue; + } + + /** + * If we're inside a quoted string, continue + * until we reach the closing double quote. + */ + + if (state.quotes === 1 && value !== '"') { + value = utils.escapeRegex(value); + prev.value += value; + append({ value }); + continue; + } + + /** + * Double quotes + */ + + if (value === '"') { + state.quotes = state.quotes === 1 ? 0 : 1; + if (opts.keepQuotes === true) { + push({ type: 'text', value }); + } + continue; + } + + /** + * Parentheses + */ + + if (value === '(') { + increment('parens'); + push({ type: 'paren', value }); + continue; + } + + if (value === ')') { + if (state.parens === 0 && opts.strictBrackets === true) { + throw new SyntaxError(syntaxError('opening', '(')); + } + + const extglob = extglobs[extglobs.length - 1]; + if (extglob && state.parens === extglob.parens + 1) { + extglobClose(extglobs.pop()); + continue; + } + + push({ type: 'paren', value, output: state.parens ? ')' : '\\)' }); + decrement('parens'); + continue; + } + + /** + * Square brackets + */ + + if (value === '[') { + if (opts.nobracket === true || !remaining().includes(']')) { + if (opts.nobracket !== true && opts.strictBrackets === true) { + throw new SyntaxError(syntaxError('closing', ']')); + } + + value = `\\${value}`; + } else { + increment('brackets'); + } + + push({ type: 'bracket', value }); + continue; + } + + if (value === ']') { + if (opts.nobracket === true || (prev && prev.type === 'bracket' && prev.value.length === 1)) { + push({ type: 'text', value, output: `\\${value}` }); + continue; + } + + if (state.brackets === 0) { + if (opts.strictBrackets === true) { + throw new SyntaxError(syntaxError('opening', '[')); + } + + push({ type: 'text', value, output: `\\${value}` }); + continue; + } + + decrement('brackets'); + + const prevValue = prev.value.slice(1); + if (prev.posix !== true && prevValue[0] === '^' && !prevValue.includes('/')) { + value = `/${value}`; + } + + prev.value += value; + append({ value }); + + // when literal brackets are explicitly disabled + // assume we should match with a regex character class + if (opts.literalBrackets === false || utils.hasRegexChars(prevValue)) { + continue; + } + + const escaped = utils.escapeRegex(prev.value); + state.output = state.output.slice(0, -prev.value.length); + + // when literal brackets are explicitly enabled + // assume we should escape the brackets to match literal characters + if (opts.literalBrackets === true) { + state.output += escaped; + prev.value = escaped; + continue; + } + + // when the user specifies nothing, try to match both + prev.value = `(${capture}${escaped}|${prev.value})`; + state.output += prev.value; + continue; + } + + /** + * Braces + */ + + if (value === '{' && opts.nobrace !== true) { + increment('braces'); + + const open = { + type: 'brace', + value, + output: '(', + outputIndex: state.output.length, + tokensIndex: state.tokens.length + }; + + braces.push(open); + push(open); + continue; + } + + if (value === '}') { + const brace = braces[braces.length - 1]; + + if (opts.nobrace === true || !brace) { + push({ type: 'text', value, output: value }); + continue; + } + + let output = ')'; + + if (brace.dots === true) { + const arr = tokens.slice(); + const range = []; + + for (let i = arr.length - 1; i >= 0; i--) { + tokens.pop(); + if (arr[i].type === 'brace') { + break; + } + if (arr[i].type !== 'dots') { + range.unshift(arr[i].value); + } + } + + output = expandRange(range, opts); + state.backtrack = true; + } + + if (brace.comma !== true && brace.dots !== true) { + const out = state.output.slice(0, brace.outputIndex); + const toks = state.tokens.slice(brace.tokensIndex); + brace.value = brace.output = '\\{'; + value = output = '\\}'; + state.output = out; + for (const t of toks) { + state.output += (t.output || t.value); + } + } + + push({ type: 'brace', value, output }); + decrement('braces'); + braces.pop(); + continue; + } + + /** + * Pipes + */ + + if (value === '|') { + if (extglobs.length > 0) { + extglobs[extglobs.length - 1].conditions++; + } + push({ type: 'text', value }); + continue; + } + + /** + * Commas + */ + + if (value === ',') { + let output = value; + + const brace = braces[braces.length - 1]; + if (brace && stack[stack.length - 1] === 'braces') { + brace.comma = true; + output = '|'; + } + + push({ type: 'comma', value, output }); + continue; + } + + /** + * Slashes + */ + + if (value === '/') { + // if the beginning of the glob is "./", advance the start + // to the current index, and don't add the "./" characters + // to the state. This greatly simplifies lookbehinds when + // checking for BOS characters like "!" and "." (not "./") + if (prev.type === 'dot' && state.index === state.start + 1) { + state.start = state.index + 1; + state.consumed = ''; + state.output = ''; + tokens.pop(); + prev = bos; // reset "prev" to the first token + continue; + } + + push({ type: 'slash', value, output: SLASH_LITERAL }); + continue; + } + + /** + * Dots + */ + + if (value === '.') { + if (state.braces > 0 && prev.type === 'dot') { + if (prev.value === '.') prev.output = DOT_LITERAL; + const brace = braces[braces.length - 1]; + prev.type = 'dots'; + prev.output += value; + prev.value += value; + brace.dots = true; + continue; + } + + if ((state.braces + state.parens) === 0 && prev.type !== 'bos' && prev.type !== 'slash') { + push({ type: 'text', value, output: DOT_LITERAL }); + continue; + } + + push({ type: 'dot', value, output: DOT_LITERAL }); + continue; + } + + /** + * Question marks + */ + + if (value === '?') { + const isGroup = prev && prev.value === '('; + if (!isGroup && opts.noextglob !== true && peek() === '(' && peek(2) !== '?') { + extglobOpen('qmark', value); + continue; + } + + if (prev && prev.type === 'paren') { + const next = peek(); + let output = value; + + if (next === '<' && !utils.supportsLookbehinds()) { + throw new Error('Node.js v10 or higher is required for regex lookbehinds'); + } + + if ((prev.value === '(' && !/[!=<:]/.test(next)) || (next === '<' && !/<([!=]|\w+>)/.test(remaining()))) { + output = `\\${value}`; + } + + push({ type: 'text', value, output }); + continue; + } + + if (opts.dot !== true && (prev.type === 'slash' || prev.type === 'bos')) { + push({ type: 'qmark', value, output: QMARK_NO_DOT }); + continue; + } + + push({ type: 'qmark', value, output: QMARK }); + continue; + } + + /** + * Exclamation + */ + + if (value === '!') { + if (opts.noextglob !== true && peek() === '(') { + if (peek(2) !== '?' || !/[!=<:]/.test(peek(3))) { + extglobOpen('negate', value); + continue; + } + } + + if (opts.nonegate !== true && state.index === 0) { + negate(); + continue; + } + } + + /** + * Plus + */ + + if (value === '+') { + if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') { + extglobOpen('plus', value); + continue; + } + + if ((prev && prev.value === '(') || opts.regex === false) { + push({ type: 'plus', value, output: PLUS_LITERAL }); + continue; + } + + if ((prev && (prev.type === 'bracket' || prev.type === 'paren' || prev.type === 'brace')) || state.parens > 0) { + push({ type: 'plus', value }); + continue; + } + + push({ type: 'plus', value: PLUS_LITERAL }); + continue; + } + + /** + * Plain text + */ + + if (value === '@') { + if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') { + push({ type: 'at', extglob: true, value, output: '' }); + continue; + } + + push({ type: 'text', value }); + continue; + } + + /** + * Plain text + */ + + if (value !== '*') { + if (value === '$' || value === '^') { + value = `\\${value}`; + } + + const match = REGEX_NON_SPECIAL_CHARS.exec(remaining()); + if (match) { + value += match[0]; + state.index += match[0].length; + } + + push({ type: 'text', value }); + continue; + } + + /** + * Stars + */ + + if (prev && (prev.type === 'globstar' || prev.star === true)) { + prev.type = 'star'; + prev.star = true; + prev.value += value; + prev.output = star; + state.backtrack = true; + state.globstar = true; + consume(value); + continue; + } + + let rest = remaining(); + if (opts.noextglob !== true && /^\([^?]/.test(rest)) { + extglobOpen('star', value); + continue; + } + + if (prev.type === 'star') { + if (opts.noglobstar === true) { + consume(value); + continue; + } + + const prior = prev.prev; + const before = prior.prev; + const isStart = prior.type === 'slash' || prior.type === 'bos'; + const afterStar = before && (before.type === 'star' || before.type === 'globstar'); + + if (opts.bash === true && (!isStart || (rest[0] && rest[0] !== '/'))) { + push({ type: 'star', value, output: '' }); + continue; + } + + const isBrace = state.braces > 0 && (prior.type === 'comma' || prior.type === 'brace'); + const isExtglob = extglobs.length && (prior.type === 'pipe' || prior.type === 'paren'); + if (!isStart && prior.type !== 'paren' && !isBrace && !isExtglob) { + push({ type: 'star', value, output: '' }); + continue; + } + + // strip consecutive `/**/` + while (rest.slice(0, 3) === '/**') { + const after = input[state.index + 4]; + if (after && after !== '/') { + break; + } + rest = rest.slice(3); + consume('/**', 3); + } + + if (prior.type === 'bos' && eos()) { + prev.type = 'globstar'; + prev.value += value; + prev.output = globstar(opts); + state.output = prev.output; + state.globstar = true; + consume(value); + continue; + } + + if (prior.type === 'slash' && prior.prev.type !== 'bos' && !afterStar && eos()) { + state.output = state.output.slice(0, -(prior.output + prev.output).length); + prior.output = `(?:${prior.output}`; + + prev.type = 'globstar'; + prev.output = globstar(opts) + (opts.strictSlashes ? ')' : '|$)'); + prev.value += value; + state.globstar = true; + state.output += prior.output + prev.output; + consume(value); + continue; + } + + if (prior.type === 'slash' && prior.prev.type !== 'bos' && rest[0] === '/') { + const end = rest[1] !== void 0 ? '|$' : ''; + + state.output = state.output.slice(0, -(prior.output + prev.output).length); + prior.output = `(?:${prior.output}`; + + prev.type = 'globstar'; + prev.output = `${globstar(opts)}${SLASH_LITERAL}|${SLASH_LITERAL}${end})`; + prev.value += value; + + state.output += prior.output + prev.output; + state.globstar = true; + + consume(value + advance()); + + push({ type: 'slash', value: '/', output: '' }); + continue; + } + + if (prior.type === 'bos' && rest[0] === '/') { + prev.type = 'globstar'; + prev.value += value; + prev.output = `(?:^|${SLASH_LITERAL}|${globstar(opts)}${SLASH_LITERAL})`; + state.output = prev.output; + state.globstar = true; + consume(value + advance()); + push({ type: 'slash', value: '/', output: '' }); + continue; + } + + // remove single star from output + state.output = state.output.slice(0, -prev.output.length); + + // reset previous token to globstar + prev.type = 'globstar'; + prev.output = globstar(opts); + prev.value += value; + + // reset output with globstar + state.output += prev.output; + state.globstar = true; + consume(value); + continue; + } + + const token = { type: 'star', value, output: star }; + + if (opts.bash === true) { + token.output = '.*?'; + if (prev.type === 'bos' || prev.type === 'slash') { + token.output = nodot + token.output; + } + push(token); + continue; + } + + if (prev && (prev.type === 'bracket' || prev.type === 'paren') && opts.regex === true) { + token.output = value; + push(token); + continue; + } + + if (state.index === state.start || prev.type === 'slash' || prev.type === 'dot') { + if (prev.type === 'dot') { + state.output += NO_DOT_SLASH; + prev.output += NO_DOT_SLASH; + + } else if (opts.dot === true) { + state.output += NO_DOTS_SLASH; + prev.output += NO_DOTS_SLASH; + + } else { + state.output += nodot; + prev.output += nodot; + } + + if (peek() !== '*') { + state.output += ONE_CHAR; + prev.output += ONE_CHAR; + } + } + + push(token); + } + + while (state.brackets > 0) { + if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ']')); + state.output = utils.escapeLast(state.output, '['); + decrement('brackets'); + } + + while (state.parens > 0) { + if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ')')); + state.output = utils.escapeLast(state.output, '('); + decrement('parens'); + } + + while (state.braces > 0) { + if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', '}')); + state.output = utils.escapeLast(state.output, '{'); + decrement('braces'); + } + + if (opts.strictSlashes !== true && (prev.type === 'star' || prev.type === 'bracket')) { + push({ type: 'maybe_slash', value: '', output: `${SLASH_LITERAL}?` }); + } + + // rebuild the output if we had to backtrack at any point + if (state.backtrack === true) { + state.output = ''; + + for (const token of state.tokens) { + state.output += token.output != null ? token.output : token.value; + + if (token.suffix) { + state.output += token.suffix; + } + } + } + + return state; +}; + +/** + * Fast paths for creating regular expressions for common glob patterns. + * This can significantly speed up processing and has very little downside + * impact when none of the fast paths match. + */ + +parse.fastpaths = (input, options) => { + const opts = { ...options }; + const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH; + const len = input.length; + if (len > max) { + throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`); + } + + input = REPLACEMENTS[input] || input; + const win32 = utils.isWindows(options); + + // create constants based on platform, for windows or posix + const { + DOT_LITERAL, + SLASH_LITERAL, + ONE_CHAR, + DOTS_SLASH, + NO_DOT, + NO_DOTS, + NO_DOTS_SLASH, + STAR, + START_ANCHOR + } = constants.globChars(win32); + + const nodot = opts.dot ? NO_DOTS : NO_DOT; + const slashDot = opts.dot ? NO_DOTS_SLASH : NO_DOT; + const capture = opts.capture ? '' : '?:'; + const state = { negated: false, prefix: '' }; + let star = opts.bash === true ? '.*?' : STAR; + + if (opts.capture) { + star = `(${star})`; + } + + const globstar = (opts) => { + if (opts.noglobstar === true) return star; + return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`; + }; + + const create = str => { + switch (str) { + case '*': + return `${nodot}${ONE_CHAR}${star}`; + + case '.*': + return `${DOT_LITERAL}${ONE_CHAR}${star}`; + + case '*.*': + return `${nodot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`; + + case '*/*': + return `${nodot}${star}${SLASH_LITERAL}${ONE_CHAR}${slashDot}${star}`; + + case '**': + return nodot + globstar(opts); + + case '**/*': + return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${ONE_CHAR}${star}`; + + case '**/*.*': + return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`; + + case '**/.*': + return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${DOT_LITERAL}${ONE_CHAR}${star}`; + + default: { + const match = /^(.*?)\.(\w+)$/.exec(str); + if (!match) return; + + const source = create(match[1]); + if (!source) return; + + return source + DOT_LITERAL + match[2]; + } + } + }; + + const output = utils.removePrefix(input, state); + let source = create(output); + + if (source && opts.strictSlashes !== true) { + source += `${SLASH_LITERAL}?`; + } + + return source; +}; + +var parse_1 = parse; + +const isObject = val => val && typeof val === 'object' && !Array.isArray(val); + +/** + * Creates a matcher function from one or more glob patterns. The + * returned function takes a string to match as its first argument, + * and returns true if the string is a match. The returned matcher + * function also takes a boolean as the second argument that, when true, + * returns an object with additional information. + * + * ```js + * const picomatch = require('picomatch'); + * // picomatch(glob[, options]); + * + * const isMatch = picomatch('*.!(*a)'); + * console.log(isMatch('a.a')); //=> false + * console.log(isMatch('a.b')); //=> true + * ``` + * @name picomatch + * @param {String|Array} `globs` One or more glob patterns. + * @param {Object=} `options` + * @return {Function=} Returns a matcher function. + * @api public + */ + +const picomatch = (glob, options, returnState = false) => { + if (Array.isArray(glob)) { + const fns = glob.map(input => picomatch(input, options, returnState)); + const arrayMatcher = str => { + for (const isMatch of fns) { + const state = isMatch(str); + if (state) return state; + } + return false; + }; + return arrayMatcher; + } + + const isState = isObject(glob) && glob.tokens && glob.input; + + if (glob === '' || (typeof glob !== 'string' && !isState)) { + throw new TypeError('Expected pattern to be a non-empty string'); + } + + const opts = options || {}; + const posix = utils.isWindows(options); + const regex = isState + ? picomatch.compileRe(glob, options) + : picomatch.makeRe(glob, options, false, true); + + const state = regex.state; + delete regex.state; + + let isIgnored = () => false; + if (opts.ignore) { + const ignoreOpts = { ...options, ignore: null, onMatch: null, onResult: null }; + isIgnored = picomatch(opts.ignore, ignoreOpts, returnState); + } + + const matcher = (input, returnObject = false) => { + const { isMatch, match, output } = picomatch.test(input, regex, options, { glob, posix }); + const result = { glob, state, regex, posix, input, output, match, isMatch }; + + if (typeof opts.onResult === 'function') { + opts.onResult(result); + } + + if (isMatch === false) { + result.isMatch = false; + return returnObject ? result : false; + } + + if (isIgnored(input)) { + if (typeof opts.onIgnore === 'function') { + opts.onIgnore(result); + } + result.isMatch = false; + return returnObject ? result : false; + } + + if (typeof opts.onMatch === 'function') { + opts.onMatch(result); + } + return returnObject ? result : true; + }; + + if (returnState) { + matcher.state = state; + } + + return matcher; +}; + +/** + * Test `input` with the given `regex`. This is used by the main + * `picomatch()` function to test the input string. + * + * ```js + * const picomatch = require('picomatch'); + * // picomatch.test(input, regex[, options]); + * + * console.log(picomatch.test('foo/bar', /^(?:([^/]*?)\/([^/]*?))$/)); + * // { isMatch: true, match: [ 'foo/', 'foo', 'bar' ], output: 'foo/bar' } + * ``` + * @param {String} `input` String to test. + * @param {RegExp} `regex` + * @return {Object} Returns an object with matching info. + * @api public + */ + +picomatch.test = (input, regex, options, { glob, posix } = {}) => { + if (typeof input !== 'string') { + throw new TypeError('Expected input to be a string'); + } + + if (input === '') { + return { isMatch: false, output: '' }; + } + + const opts = options || {}; + const format = opts.format || (posix ? utils.toPosixSlashes : null); + let match = input === glob; + let output = (match && format) ? format(input) : input; + + if (match === false) { + output = format ? format(input) : input; + match = output === glob; + } + + if (match === false || opts.capture === true) { + if (opts.matchBase === true || opts.basename === true) { + match = picomatch.matchBase(input, regex, options, posix); + } else { + match = regex.exec(output); + } + } + + return { isMatch: Boolean(match), match, output }; +}; + +/** + * Match the basename of a filepath. + * + * ```js + * const picomatch = require('picomatch'); + * // picomatch.matchBase(input, glob[, options]); + * console.log(picomatch.matchBase('foo/bar.js', '*.js'); // true + * ``` + * @param {String} `input` String to test. + * @param {RegExp|String} `glob` Glob pattern or regex created by [.makeRe](#makeRe). + * @return {Boolean} + * @api public + */ + +picomatch.matchBase = (input, glob, options, posix = utils.isWindows(options)) => { + const regex = glob instanceof RegExp ? glob : picomatch.makeRe(glob, options); + return regex.test(sysPath__default['default'].basename(input)); +}; + +/** + * Returns true if **any** of the given glob `patterns` match the specified `string`. + * + * ```js + * const picomatch = require('picomatch'); + * // picomatch.isMatch(string, patterns[, options]); + * + * console.log(picomatch.isMatch('a.a', ['b.*', '*.a'])); //=> true + * console.log(picomatch.isMatch('a.a', 'b.*')); //=> false + * ``` + * @param {String|Array} str The string to test. + * @param {String|Array} patterns One or more glob patterns to use for matching. + * @param {Object} [options] See available [options](#options). + * @return {Boolean} Returns true if any patterns match `str` + * @api public + */ + +picomatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str); + +/** + * Parse a glob pattern to create the source string for a regular + * expression. + * + * ```js + * const picomatch = require('picomatch'); + * const result = picomatch.parse(pattern[, options]); + * ``` + * @param {String} `pattern` + * @param {Object} `options` + * @return {Object} Returns an object with useful properties and output to be used as a regex source string. + * @api public + */ + +picomatch.parse = (pattern, options) => { + if (Array.isArray(pattern)) return pattern.map(p => picomatch.parse(p, options)); + return parse_1(pattern, { ...options, fastpaths: false }); +}; + +/** + * Scan a glob pattern to separate the pattern into segments. + * + * ```js + * const picomatch = require('picomatch'); + * // picomatch.scan(input[, options]); + * + * const result = picomatch.scan('!./foo/*.js'); + * console.log(result); + * { prefix: '!./', + * input: '!./foo/*.js', + * start: 3, + * base: 'foo', + * glob: '*.js', + * isBrace: false, + * isBracket: false, + * isGlob: true, + * isExtglob: false, + * isGlobstar: false, + * negated: true } + * ``` + * @param {String} `input` Glob pattern to scan. + * @param {Object} `options` + * @return {Object} Returns an object with + * @api public + */ + +picomatch.scan = (input, options) => scan_1(input, options); + +/** + * Create a regular expression from a parsed glob pattern. + * + * ```js + * const picomatch = require('picomatch'); + * const state = picomatch.parse('*.js'); + * // picomatch.compileRe(state[, options]); + * + * console.log(picomatch.compileRe(state)); + * //=> /^(?:(?!\.)(?=.)[^/]*?\.js)$/ + * ``` + * @param {String} `state` The object returned from the `.parse` method. + * @param {Object} `options` + * @return {RegExp} Returns a regex created from the given pattern. + * @api public + */ + +picomatch.compileRe = (parsed, options, returnOutput = false, returnState = false) => { + if (returnOutput === true) { + return parsed.output; + } + + const opts = options || {}; + const prepend = opts.contains ? '' : '^'; + const append = opts.contains ? '' : '$'; + + let source = `${prepend}(?:${parsed.output})${append}`; + if (parsed && parsed.negated === true) { + source = `^(?!${source}).*$`; + } + + const regex = picomatch.toRegex(source, options); + if (returnState === true) { + regex.state = parsed; + } + + return regex; +}; + +picomatch.makeRe = (input, options, returnOutput = false, returnState = false) => { + if (!input || typeof input !== 'string') { + throw new TypeError('Expected a non-empty string'); + } + + const opts = options || {}; + let parsed = { negated: false, fastpaths: true }; + let prefix = ''; + let output; + + if (input.startsWith('./')) { + input = input.slice(2); + prefix = parsed.prefix = './'; + } + + if (opts.fastpaths !== false && (input[0] === '.' || input[0] === '*')) { + output = parse_1.fastpaths(input, options); + } + + if (output === undefined) { + parsed = parse_1(input, options); + parsed.prefix = prefix + (parsed.prefix || ''); + } else { + parsed.output = output; + } + + return picomatch.compileRe(parsed, options, returnOutput, returnState); +}; + +/** + * Create a regular expression from the given regex source string. + * + * ```js + * const picomatch = require('picomatch'); + * // picomatch.toRegex(source[, options]); + * + * const { output } = picomatch.parse('*.js'); + * console.log(picomatch.toRegex(output)); + * //=> /^(?:(?!\.)(?=.)[^/]*?\.js)$/ + * ``` + * @param {String} `source` Regular expression source string. + * @param {Object} `options` + * @return {RegExp} + * @api public + */ + +picomatch.toRegex = (source, options) => { + try { + const opts = options || {}; + return new RegExp(source, opts.flags || (opts.nocase ? 'i' : '')); + } catch (err) { + if (options && options.debug === true) throw err; + return /$^/; + } +}; + +/** + * Picomatch constants. + * @return {Object} + */ + +picomatch.constants = constants; + +/** + * Expose "picomatch" + */ + +var picomatch_1 = picomatch; + +var picomatch$1 = picomatch_1; + +const { Readable } = require$$0__default$1['default']; + +const { promisify } = require$$0__default['default']; + + +const readdir = promisify(fs__default['default'].readdir); +const stat = promisify(fs__default['default'].stat); +const lstat = promisify(fs__default['default'].lstat); +const realpath = promisify(fs__default['default'].realpath); + +/** + * @typedef {Object} EntryInfo + * @property {String} path + * @property {String} fullPath + * @property {fs.Stats=} stats + * @property {fs.Dirent=} dirent + * @property {String} basename + */ + +const BANG = '!'; +const NORMAL_FLOW_ERRORS = new Set(['ENOENT', 'EPERM', 'EACCES', 'ELOOP']); +const FILE_TYPE = 'files'; +const DIR_TYPE = 'directories'; +const FILE_DIR_TYPE = 'files_directories'; +const EVERYTHING_TYPE = 'all'; +const ALL_TYPES = [FILE_TYPE, DIR_TYPE, FILE_DIR_TYPE, EVERYTHING_TYPE]; + +const isNormalFlowError = error => NORMAL_FLOW_ERRORS.has(error.code); + +const normalizeFilter = filter => { + if (filter === undefined) return; + if (typeof filter === 'function') return filter; + + if (typeof filter === 'string') { + const glob = picomatch$1(filter.trim()); + return entry => glob(entry.basename); + } + + if (Array.isArray(filter)) { + const positive = []; + const negative = []; + for (const item of filter) { + const trimmed = item.trim(); + if (trimmed.charAt(0) === BANG) { + negative.push(picomatch$1(trimmed.slice(1))); + } else { + positive.push(picomatch$1(trimmed)); + } + } + + if (negative.length > 0) { + if (positive.length > 0) { + return entry => + positive.some(f => f(entry.basename)) && !negative.some(f => f(entry.basename)); + } + return entry => !negative.some(f => f(entry.basename)); + } + return entry => positive.some(f => f(entry.basename)); + } +}; + +class ReaddirpStream extends Readable { + static get defaultOptions() { + return { + root: '.', + /* eslint-disable no-unused-vars */ + fileFilter: (path) => true, + directoryFilter: (path) => true, + /* eslint-enable no-unused-vars */ + type: FILE_TYPE, + lstat: false, + depth: 2147483648, + alwaysStat: false + }; + } + + constructor(options = {}) { + super({ + objectMode: true, + autoDestroy: true, + highWaterMark: options.highWaterMark || 4096 + }); + const opts = { ...ReaddirpStream.defaultOptions, ...options }; + const { root, type } = opts; + + this._fileFilter = normalizeFilter(opts.fileFilter); + this._directoryFilter = normalizeFilter(opts.directoryFilter); + + const statMethod = opts.lstat ? lstat : stat; + // Use bigint stats if it's windows and stat() supports options (node 10+). + if (process.platform === 'win32' && stat.length === 3) { + this._stat = path => statMethod(path, { bigint: true }); + } else { + this._stat = statMethod; + } + + this._maxDepth = opts.depth; + this._wantsDir = [DIR_TYPE, FILE_DIR_TYPE, EVERYTHING_TYPE].includes(type); + this._wantsFile = [FILE_TYPE, FILE_DIR_TYPE, EVERYTHING_TYPE].includes(type); + this._wantsEverything = type === EVERYTHING_TYPE; + this._root = sysPath__default['default'].resolve(root); + this._isDirent = ('Dirent' in fs__default['default']) && !opts.alwaysStat; + this._statsProp = this._isDirent ? 'dirent' : 'stats'; + this._rdOptions = { encoding: 'utf8', withFileTypes: this._isDirent }; + + // Launch stream with one parent, the root dir. + this.parents = [this._exploreDir(root, 1)]; + this.reading = false; + this.parent = undefined; + } + + async _read(batch) { + if (this.reading) return; + this.reading = true; + + try { + while (!this.destroyed && batch > 0) { + const { path, depth, files = [] } = this.parent || {}; + + if (files.length > 0) { + const slice = files.splice(0, batch).map(dirent => this._formatEntry(dirent, path)); + for (const entry of await Promise.all(slice)) { + if (this.destroyed) return; + + const entryType = await this._getEntryType(entry); + if (entryType === 'directory' && this._directoryFilter(entry)) { + if (depth <= this._maxDepth) { + this.parents.push(this._exploreDir(entry.fullPath, depth + 1)); + } + + if (this._wantsDir) { + this.push(entry); + batch--; + } + } else if ((entryType === 'file' || this._includeAsFile(entry)) && this._fileFilter(entry)) { + if (this._wantsFile) { + this.push(entry); + batch--; + } + } + } + } else { + const parent = this.parents.pop(); + if (!parent) { + this.push(null); + break; + } + this.parent = await parent; + if (this.destroyed) return; + } + } + } catch (error) { + this.destroy(error); + } finally { + this.reading = false; + } + } + + async _exploreDir(path, depth) { + let files; + try { + files = await readdir(path, this._rdOptions); + } catch (error) { + this._onError(error); + } + return {files, depth, path}; + } + + async _formatEntry(dirent, path) { + let entry; + try { + const basename = this._isDirent ? dirent.name : dirent; + const fullPath = sysPath__default['default'].resolve(sysPath__default['default'].join(path, basename)); + entry = {path: sysPath__default['default'].relative(this._root, fullPath), fullPath, basename}; + entry[this._statsProp] = this._isDirent ? dirent : await this._stat(fullPath); + } catch (err) { + this._onError(err); + } + return entry; + } + + _onError(err) { + if (isNormalFlowError(err) && !this.destroyed) { + this.emit('warn', err); + } else { + this.destroy(err); + } + } + + async _getEntryType(entry) { + // entry may be undefined, because a warning or an error were emitted + // and the statsProp is undefined + const stats = entry && entry[this._statsProp]; + if (!stats) { + return; + } + if (stats.isFile()) { + return 'file'; + } + if (stats.isDirectory()) { + return 'directory'; + } + if (stats && stats.isSymbolicLink()) { + const full = entry.fullPath; + try { + const entryRealPath = await realpath(full); + const entryRealPathStats = await lstat(entryRealPath); + if (entryRealPathStats.isFile()) { + return 'file'; + } + if (entryRealPathStats.isDirectory()) { + const len = entryRealPath.length; + if (full.startsWith(entryRealPath) && full.substr(len, 1) === sysPath__default['default'].sep) { + return this._onError(new Error( + `Circular symlink detected: "${full}" points to "${entryRealPath}"` + )); + } + return 'directory'; + } + } catch (error) { + this._onError(error); + } + } + } + + _includeAsFile(entry) { + const stats = entry && entry[this._statsProp]; + + return stats && this._wantsEverything && !stats.isDirectory(); + } +} + +/** + * @typedef {Object} ReaddirpArguments + * @property {Function=} fileFilter + * @property {Function=} directoryFilter + * @property {String=} type + * @property {Number=} depth + * @property {String=} root + * @property {Boolean=} lstat + * @property {Boolean=} bigint + */ + +/** + * Main function which ends up calling readdirRec and reads all files and directories in given root recursively. + * @param {String} root Root directory + * @param {ReaddirpArguments=} options Options to specify root (start directory), filters and recursion depth + */ +const readdirp = (root, options = {}) => { + let type = options.entryType || options.type; + if (type === 'both') type = FILE_DIR_TYPE; // backwards-compatibility + if (type) options.type = type; + if (!root) { + throw new Error('readdirp: root argument is required. Usage: readdirp(root, options)'); + } else if (typeof root !== 'string') { + throw new TypeError('readdirp: root argument must be a string. Usage: readdirp(root, options)'); + } else if (type && !ALL_TYPES.includes(type)) { + throw new Error(`readdirp: Invalid type passed. Use one of ${ALL_TYPES.join(', ')}`); + } + + options.root = root; + return new ReaddirpStream(options); +}; + +const readdirpPromise = (root, options = {}) => { + return new Promise((resolve, reject) => { + const files = []; + readdirp(root, options) + .on('data', entry => files.push(entry)) + .on('end', () => resolve(files)) + .on('error', error => reject(error)); + }); +}; + +readdirp.promise = readdirpPromise; +readdirp.ReaddirpStream = ReaddirpStream; +readdirp.default = readdirp; + +var readdirp_1 = readdirp; + +/*! + * normalize-path + * + * Copyright (c) 2014-2018, Jon Schlinkert. + * Released under the MIT License. + */ + +var normalizePath = function(path, stripTrailing) { + if (typeof path !== 'string') { + throw new TypeError('expected path to be a string'); + } + + if (path === '\\' || path === '/') return '/'; + + var len = path.length; + if (len <= 1) return path; + + // ensure that win32 namespaces has two leading slashes, so that the path is + // handled properly by the win32 version of path.parse() after being normalized + // https://msdn.microsoft.com/library/windows/desktop/aa365247(v=vs.85).aspx#namespaces + var prefix = ''; + if (len > 4 && path[3] === '\\') { + var ch = path[2]; + if ((ch === '?' || ch === '.') && path.slice(0, 2) === '\\\\') { + path = path.slice(2); + prefix = '//'; + } + } + + var segs = path.split(/[/\\]+/); + if (stripTrailing !== false && segs[segs.length - 1] === '') { + segs.pop(); + } + return prefix + segs.join('/'); +}; + +var anymatch_1 = createCommonjsModule(function (module, exports) { + +Object.defineProperty(exports, "__esModule", { value: true }); + + + + +/** + * @typedef {(testString: string) => boolean} AnymatchFn + * @typedef {string|RegExp|AnymatchFn} AnymatchPattern + * @typedef {AnymatchPattern|AnymatchPattern[]} AnymatchMatcher + */ +const BANG = '!'; +const DEFAULT_OPTIONS = {returnIndex: false}; +const arrify = (item) => Array.isArray(item) ? item : [item]; + +/** + * @param {AnymatchPattern} matcher + * @param {object} options + * @returns {AnymatchFn} + */ +const createPattern = (matcher, options) => { + if (typeof matcher === 'function') { + return matcher; + } + if (typeof matcher === 'string') { + const glob = picomatch$1(matcher, options); + return (string) => matcher === string || glob(string); + } + if (matcher instanceof RegExp) { + return (string) => matcher.test(string); + } + return (string) => false; +}; + +/** + * @param {Array} patterns + * @param {Array} negPatterns + * @param {String|Array} args + * @param {Boolean} returnIndex + * @returns {boolean|number} + */ +const matchPatterns = (patterns, negPatterns, args, returnIndex) => { + const isList = Array.isArray(args); + const _path = isList ? args[0] : args; + if (!isList && typeof _path !== 'string') { + throw new TypeError('anymatch: second argument must be a string: got ' + + Object.prototype.toString.call(_path)) + } + const path = normalizePath(_path); + + for (let index = 0; index < negPatterns.length; index++) { + const nglob = negPatterns[index]; + if (nglob(path)) { + return returnIndex ? -1 : false; + } + } + + const applied = isList && [path].concat(args.slice(1)); + for (let index = 0; index < patterns.length; index++) { + const pattern = patterns[index]; + if (isList ? pattern(...applied) : pattern(path)) { + return returnIndex ? index : true; + } + } + + return returnIndex ? -1 : false; +}; + +/** + * @param {AnymatchMatcher} matchers + * @param {Array|string} testString + * @param {object} options + * @returns {boolean|number|Function} + */ +const anymatch = (matchers, testString, options = DEFAULT_OPTIONS) => { + if (matchers == null) { + throw new TypeError('anymatch: specify first argument'); + } + const opts = typeof options === 'boolean' ? {returnIndex: options} : options; + const returnIndex = opts.returnIndex || false; + + // Early cache for matchers. + const mtchers = arrify(matchers); + const negatedGlobs = mtchers + .filter(item => typeof item === 'string' && item.charAt(0) === BANG) + .map(item => item.slice(1)) + .map(item => picomatch$1(item, opts)); + const patterns = mtchers.map(matcher => createPattern(matcher, opts)); + + if (testString == null) { + return (testString, ri = false) => { + const returnIndex = typeof ri === 'boolean' ? ri : false; + return matchPatterns(patterns, negatedGlobs, testString, returnIndex); + } + } + + return matchPatterns(patterns, negatedGlobs, testString, returnIndex); +}; + +anymatch.default = anymatch; +module.exports = anymatch; +}); + +/*! + * is-extglob + * + * Copyright (c) 2014-2016, Jon Schlinkert. + * Licensed under the MIT License. + */ + +var isExtglob = function isExtglob(str) { + if (typeof str !== 'string' || str === '') { + return false; + } + + var match; + while ((match = /(\\).|([@?!+*]\(.*\))/g.exec(str))) { + if (match[2]) return true; + str = str.slice(match.index + match[0].length); + } + + return false; +}; + +/*! + * is-glob + * + * Copyright (c) 2014-2017, Jon Schlinkert. + * Released under the MIT License. + */ + + +var chars = { '{': '}', '(': ')', '[': ']'}; +var strictRegex = /\\(.)|(^!|\*|[\].+)]\?|\[[^\\\]]+\]|\{[^\\}]+\}|\(\?[:!=][^\\)]+\)|\([^|]+\|[^\\)]+\))/; +var relaxedRegex = /\\(.)|(^!|[*?{}()[\]]|\(\?)/; + +var isGlob = function isGlob(str, options) { + if (typeof str !== 'string' || str === '') { + return false; + } + + if (isExtglob(str)) { + return true; + } + + var regex = strictRegex; + var match; + + // optionally relax regex + if (options && options.strict === false) { + regex = relaxedRegex; + } + + while ((match = regex.exec(str))) { + if (match[2]) return true; + var idx = match.index + match[0].length; + + // if an open bracket/brace/paren is escaped, + // set the index to the next closing character + var open = match[1]; + var close = open ? chars[open] : null; + if (open && close) { + var n = str.indexOf(close, idx); + if (n !== -1) { + idx = n + 1; + } + } + + str = str.slice(idx); + } + return false; +}; + +var pathPosixDirname = sysPath__default['default'].posix.dirname; +var isWin32 = require$$1__default['default'].platform() === 'win32'; + +var slash = '/'; +var backslash = /\\/g; +var enclosure = /[\{\[].*[\/]*.*[\}\]]$/; +var globby = /(^|[^\\])([\{\[]|\([^\)]+$)/; +var escaped = /\\([\!\*\?\|\[\]\(\)\{\}])/g; + +/** + * @param {string} str + * @param {Object} opts + * @param {boolean} [opts.flipBackslashes=true] + */ +var globParent = function globParent(str, opts) { + var options = Object.assign({ flipBackslashes: true }, opts); + + // flip windows path separators + if (options.flipBackslashes && isWin32 && str.indexOf(slash) < 0) { + str = str.replace(backslash, slash); + } + + // special case for strings ending in enclosure containing path separator + if (enclosure.test(str)) { + str += slash; + } + + // preserves full path in case of trailing path separator + str += 'a'; + + // remove path parts that are globby + do { + str = pathPosixDirname(str); + } while (isGlob(str) || globby.test(str)); + + // remove escape chars and return result + return str.replace(escaped, '$1'); +}; + +var utils$1 = createCommonjsModule(function (module, exports) { + +exports.isInteger = num => { + if (typeof num === 'number') { + return Number.isInteger(num); + } + if (typeof num === 'string' && num.trim() !== '') { + return Number.isInteger(Number(num)); + } + return false; +}; + +/** + * Find a node of the given type + */ + +exports.find = (node, type) => node.nodes.find(node => node.type === type); + +/** + * Find a node of the given type + */ + +exports.exceedsLimit = (min, max, step = 1, limit) => { + if (limit === false) return false; + if (!exports.isInteger(min) || !exports.isInteger(max)) return false; + return ((Number(max) - Number(min)) / Number(step)) >= limit; +}; + +/** + * Escape the given node with '\\' before node.value + */ + +exports.escapeNode = (block, n = 0, type) => { + let node = block.nodes[n]; + if (!node) return; + + if ((type && node.type === type) || node.type === 'open' || node.type === 'close') { + if (node.escaped !== true) { + node.value = '\\' + node.value; + node.escaped = true; + } + } +}; + +/** + * Returns true if the given brace node should be enclosed in literal braces + */ + +exports.encloseBrace = node => { + if (node.type !== 'brace') return false; + if ((node.commas >> 0 + node.ranges >> 0) === 0) { + node.invalid = true; + return true; + } + return false; +}; + +/** + * Returns true if a brace node is invalid. + */ + +exports.isInvalidBrace = block => { + if (block.type !== 'brace') return false; + if (block.invalid === true || block.dollar) return true; + if ((block.commas >> 0 + block.ranges >> 0) === 0) { + block.invalid = true; + return true; + } + if (block.open !== true || block.close !== true) { + block.invalid = true; + return true; + } + return false; +}; + +/** + * Returns true if a node is an open or close node + */ + +exports.isOpenOrClose = node => { + if (node.type === 'open' || node.type === 'close') { + return true; + } + return node.open === true || node.close === true; +}; + +/** + * Reduce an array of text nodes. + */ + +exports.reduce = nodes => nodes.reduce((acc, node) => { + if (node.type === 'text') acc.push(node.value); + if (node.type === 'range') node.type = 'text'; + return acc; +}, []); + +/** + * Flatten an array + */ + +exports.flatten = (...args) => { + const result = []; + const flat = arr => { + for (let i = 0; i < arr.length; i++) { + let ele = arr[i]; + Array.isArray(ele) ? flat(ele) : ele !== void 0 && result.push(ele); + } + return result; + }; + flat(args); + return result; +}; +}); + +var stringify = (ast, options = {}) => { + let stringify = (node, parent = {}) => { + let invalidBlock = options.escapeInvalid && utils$1.isInvalidBrace(parent); + let invalidNode = node.invalid === true && options.escapeInvalid === true; + let output = ''; + + if (node.value) { + if ((invalidBlock || invalidNode) && utils$1.isOpenOrClose(node)) { + return '\\' + node.value; + } + return node.value; + } + + if (node.value) { + return node.value; + } + + if (node.nodes) { + for (let child of node.nodes) { + output += stringify(child); + } + } + return output; + }; + + return stringify(ast); +}; + +/*! + * is-number + * + * Copyright (c) 2014-present, Jon Schlinkert. + * Released under the MIT License. + */ + +var isNumber = function(num) { + if (typeof num === 'number') { + return num - num === 0; + } + if (typeof num === 'string' && num.trim() !== '') { + return Number.isFinite ? Number.isFinite(+num) : isFinite(+num); + } + return false; +}; + +const toRegexRange = (min, max, options) => { + if (isNumber(min) === false) { + throw new TypeError('toRegexRange: expected the first argument to be a number'); + } + + if (max === void 0 || min === max) { + return String(min); + } + + if (isNumber(max) === false) { + throw new TypeError('toRegexRange: expected the second argument to be a number.'); + } + + let opts = { relaxZeros: true, ...options }; + if (typeof opts.strictZeros === 'boolean') { + opts.relaxZeros = opts.strictZeros === false; + } + + let relax = String(opts.relaxZeros); + let shorthand = String(opts.shorthand); + let capture = String(opts.capture); + let wrap = String(opts.wrap); + let cacheKey = min + ':' + max + '=' + relax + shorthand + capture + wrap; + + if (toRegexRange.cache.hasOwnProperty(cacheKey)) { + return toRegexRange.cache[cacheKey].result; + } + + let a = Math.min(min, max); + let b = Math.max(min, max); + + if (Math.abs(a - b) === 1) { + let result = min + '|' + max; + if (opts.capture) { + return `(${result})`; + } + if (opts.wrap === false) { + return result; + } + return `(?:${result})`; + } + + let isPadded = hasPadding(min) || hasPadding(max); + let state = { min, max, a, b }; + let positives = []; + let negatives = []; + + if (isPadded) { + state.isPadded = isPadded; + state.maxLen = String(state.max).length; + } + + if (a < 0) { + let newMin = b < 0 ? Math.abs(b) : 1; + negatives = splitToPatterns(newMin, Math.abs(a), state, opts); + a = state.a = 0; + } + + if (b >= 0) { + positives = splitToPatterns(a, b, state, opts); + } + + state.negatives = negatives; + state.positives = positives; + state.result = collatePatterns(negatives, positives); + + if (opts.capture === true) { + state.result = `(${state.result})`; + } else if (opts.wrap !== false && (positives.length + negatives.length) > 1) { + state.result = `(?:${state.result})`; + } + + toRegexRange.cache[cacheKey] = state; + return state.result; +}; + +function collatePatterns(neg, pos, options) { + let onlyNegative = filterPatterns(neg, pos, '-', false) || []; + let onlyPositive = filterPatterns(pos, neg, '', false) || []; + let intersected = filterPatterns(neg, pos, '-?', true) || []; + let subpatterns = onlyNegative.concat(intersected).concat(onlyPositive); + return subpatterns.join('|'); +} + +function splitToRanges(min, max) { + let nines = 1; + let zeros = 1; + + let stop = countNines(min, nines); + let stops = new Set([max]); + + while (min <= stop && stop <= max) { + stops.add(stop); + nines += 1; + stop = countNines(min, nines); + } + + stop = countZeros(max + 1, zeros) - 1; + + while (min < stop && stop <= max) { + stops.add(stop); + zeros += 1; + stop = countZeros(max + 1, zeros) - 1; + } + + stops = [...stops]; + stops.sort(compare); + return stops; +} + +/** + * Convert a range to a regex pattern + * @param {Number} `start` + * @param {Number} `stop` + * @return {String} + */ + +function rangeToPattern(start, stop, options) { + if (start === stop) { + return { pattern: start, count: [], digits: 0 }; + } + + let zipped = zip(start, stop); + let digits = zipped.length; + let pattern = ''; + let count = 0; + + for (let i = 0; i < digits; i++) { + let [startDigit, stopDigit] = zipped[i]; + + if (startDigit === stopDigit) { + pattern += startDigit; + + } else if (startDigit !== '0' || stopDigit !== '9') { + pattern += toCharacterClass(startDigit, stopDigit); + + } else { + count++; + } + } + + if (count) { + pattern += options.shorthand === true ? '\\d' : '[0-9]'; + } + + return { pattern, count: [count], digits }; +} + +function splitToPatterns(min, max, tok, options) { + let ranges = splitToRanges(min, max); + let tokens = []; + let start = min; + let prev; + + for (let i = 0; i < ranges.length; i++) { + let max = ranges[i]; + let obj = rangeToPattern(String(start), String(max), options); + let zeros = ''; + + if (!tok.isPadded && prev && prev.pattern === obj.pattern) { + if (prev.count.length > 1) { + prev.count.pop(); + } + + prev.count.push(obj.count[0]); + prev.string = prev.pattern + toQuantifier(prev.count); + start = max + 1; + continue; + } + + if (tok.isPadded) { + zeros = padZeros(max, tok, options); + } + + obj.string = zeros + obj.pattern + toQuantifier(obj.count); + tokens.push(obj); + start = max + 1; + prev = obj; + } + + return tokens; +} + +function filterPatterns(arr, comparison, prefix, intersection, options) { + let result = []; + + for (let ele of arr) { + let { string } = ele; + + // only push if _both_ are negative... + if (!intersection && !contains(comparison, 'string', string)) { + result.push(prefix + string); + } + + // or _both_ are positive + if (intersection && contains(comparison, 'string', string)) { + result.push(prefix + string); + } + } + return result; +} + +/** + * Zip strings + */ + +function zip(a, b) { + let arr = []; + for (let i = 0; i < a.length; i++) arr.push([a[i], b[i]]); + return arr; +} + +function compare(a, b) { + return a > b ? 1 : b > a ? -1 : 0; +} + +function contains(arr, key, val) { + return arr.some(ele => ele[key] === val); +} + +function countNines(min, len) { + return Number(String(min).slice(0, -len) + '9'.repeat(len)); +} + +function countZeros(integer, zeros) { + return integer - (integer % Math.pow(10, zeros)); +} + +function toQuantifier(digits) { + let [start = 0, stop = ''] = digits; + if (stop || start > 1) { + return `{${start + (stop ? ',' + stop : '')}}`; + } + return ''; +} + +function toCharacterClass(a, b, options) { + return `[${a}${(b - a === 1) ? '' : '-'}${b}]`; +} + +function hasPadding(str) { + return /^-?(0+)\d/.test(str); +} + +function padZeros(value, tok, options) { + if (!tok.isPadded) { + return value; + } + + let diff = Math.abs(tok.maxLen - String(value).length); + let relax = options.relaxZeros !== false; + + switch (diff) { + case 0: + return ''; + case 1: + return relax ? '0?' : '0'; + case 2: + return relax ? '0{0,2}' : '00'; + default: { + return relax ? `0{0,${diff}}` : `0{${diff}}`; + } + } +} + +/** + * Cache + */ + +toRegexRange.cache = {}; +toRegexRange.clearCache = () => (toRegexRange.cache = {}); + +/** + * Expose `toRegexRange` + */ + +var toRegexRange_1 = toRegexRange; + +const isObject$1 = val => val !== null && typeof val === 'object' && !Array.isArray(val); + +const transform = toNumber => { + return value => toNumber === true ? Number(value) : String(value); +}; + +const isValidValue = value => { + return typeof value === 'number' || (typeof value === 'string' && value !== ''); +}; + +const isNumber$1 = num => Number.isInteger(+num); + +const zeros = input => { + let value = `${input}`; + let index = -1; + if (value[0] === '-') value = value.slice(1); + if (value === '0') return false; + while (value[++index] === '0'); + return index > 0; +}; + +const stringify$1 = (start, end, options) => { + if (typeof start === 'string' || typeof end === 'string') { + return true; + } + return options.stringify === true; +}; + +const pad = (input, maxLength, toNumber) => { + if (maxLength > 0) { + let dash = input[0] === '-' ? '-' : ''; + if (dash) input = input.slice(1); + input = (dash + input.padStart(dash ? maxLength - 1 : maxLength, '0')); + } + if (toNumber === false) { + return String(input); + } + return input; +}; + +const toMaxLen = (input, maxLength) => { + let negative = input[0] === '-' ? '-' : ''; + if (negative) { + input = input.slice(1); + maxLength--; + } + while (input.length < maxLength) input = '0' + input; + return negative ? ('-' + input) : input; +}; + +const toSequence = (parts, options) => { + parts.negatives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0); + parts.positives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0); + + let prefix = options.capture ? '' : '?:'; + let positives = ''; + let negatives = ''; + let result; + + if (parts.positives.length) { + positives = parts.positives.join('|'); + } + + if (parts.negatives.length) { + negatives = `-(${prefix}${parts.negatives.join('|')})`; + } + + if (positives && negatives) { + result = `${positives}|${negatives}`; + } else { + result = positives || negatives; + } + + if (options.wrap) { + return `(${prefix}${result})`; + } + + return result; +}; + +const toRange = (a, b, isNumbers, options) => { + if (isNumbers) { + return toRegexRange_1(a, b, { wrap: false, ...options }); + } + + let start = String.fromCharCode(a); + if (a === b) return start; + + let stop = String.fromCharCode(b); + return `[${start}-${stop}]`; +}; + +const toRegex = (start, end, options) => { + if (Array.isArray(start)) { + let wrap = options.wrap === true; + let prefix = options.capture ? '' : '?:'; + return wrap ? `(${prefix}${start.join('|')})` : start.join('|'); + } + return toRegexRange_1(start, end, options); +}; + +const rangeError = (...args) => { + return new RangeError('Invalid range arguments: ' + require$$0__default['default'].inspect(...args)); +}; + +const invalidRange = (start, end, options) => { + if (options.strictRanges === true) throw rangeError([start, end]); + return []; +}; + +const invalidStep = (step, options) => { + if (options.strictRanges === true) { + throw new TypeError(`Expected step "${step}" to be a number`); + } + return []; +}; + +const fillNumbers = (start, end, step = 1, options = {}) => { + let a = Number(start); + let b = Number(end); + + if (!Number.isInteger(a) || !Number.isInteger(b)) { + if (options.strictRanges === true) throw rangeError([start, end]); + return []; + } + + // fix negative zero + if (a === 0) a = 0; + if (b === 0) b = 0; + + let descending = a > b; + let startString = String(start); + let endString = String(end); + let stepString = String(step); + step = Math.max(Math.abs(step), 1); + + let padded = zeros(startString) || zeros(endString) || zeros(stepString); + let maxLen = padded ? Math.max(startString.length, endString.length, stepString.length) : 0; + let toNumber = padded === false && stringify$1(start, end, options) === false; + let format = options.transform || transform(toNumber); + + if (options.toRegex && step === 1) { + return toRange(toMaxLen(start, maxLen), toMaxLen(end, maxLen), true, options); + } + + let parts = { negatives: [], positives: [] }; + let push = num => parts[num < 0 ? 'negatives' : 'positives'].push(Math.abs(num)); + let range = []; + let index = 0; + + while (descending ? a >= b : a <= b) { + if (options.toRegex === true && step > 1) { + push(a); + } else { + range.push(pad(format(a, index), maxLen, toNumber)); + } + a = descending ? a - step : a + step; + index++; + } + + if (options.toRegex === true) { + return step > 1 + ? toSequence(parts, options) + : toRegex(range, null, { wrap: false, ...options }); + } + + return range; +}; + +const fillLetters = (start, end, step = 1, options = {}) => { + if ((!isNumber$1(start) && start.length > 1) || (!isNumber$1(end) && end.length > 1)) { + return invalidRange(start, end, options); + } + + + let format = options.transform || (val => String.fromCharCode(val)); + let a = `${start}`.charCodeAt(0); + let b = `${end}`.charCodeAt(0); + + let descending = a > b; + let min = Math.min(a, b); + let max = Math.max(a, b); + + if (options.toRegex && step === 1) { + return toRange(min, max, false, options); + } + + let range = []; + let index = 0; + + while (descending ? a >= b : a <= b) { + range.push(format(a, index)); + a = descending ? a - step : a + step; + index++; + } + + if (options.toRegex === true) { + return toRegex(range, null, { wrap: false, options }); + } + + return range; +}; + +const fill = (start, end, step, options = {}) => { + if (end == null && isValidValue(start)) { + return [start]; + } + + if (!isValidValue(start) || !isValidValue(end)) { + return invalidRange(start, end, options); + } + + if (typeof step === 'function') { + return fill(start, end, 1, { transform: step }); + } + + if (isObject$1(step)) { + return fill(start, end, 0, step); + } + + let opts = { ...options }; + if (opts.capture === true) opts.wrap = true; + step = step || opts.step || 1; + + if (!isNumber$1(step)) { + if (step != null && !isObject$1(step)) return invalidStep(step, opts); + return fill(start, end, 1, step); + } + + if (isNumber$1(start) && isNumber$1(end)) { + return fillNumbers(start, end, step, opts); + } + + return fillLetters(start, end, Math.max(Math.abs(step), 1), opts); +}; + +var fillRange = fill; + +const compile = (ast, options = {}) => { + let walk = (node, parent = {}) => { + let invalidBlock = utils$1.isInvalidBrace(parent); + let invalidNode = node.invalid === true && options.escapeInvalid === true; + let invalid = invalidBlock === true || invalidNode === true; + let prefix = options.escapeInvalid === true ? '\\' : ''; + let output = ''; + + if (node.isOpen === true) { + return prefix + node.value; + } + if (node.isClose === true) { + return prefix + node.value; + } + + if (node.type === 'open') { + return invalid ? (prefix + node.value) : '('; + } + + if (node.type === 'close') { + return invalid ? (prefix + node.value) : ')'; + } + + if (node.type === 'comma') { + return node.prev.type === 'comma' ? '' : (invalid ? node.value : '|'); + } + + if (node.value) { + return node.value; + } + + if (node.nodes && node.ranges > 0) { + let args = utils$1.reduce(node.nodes); + let range = fillRange(...args, { ...options, wrap: false, toRegex: true }); + + if (range.length !== 0) { + return args.length > 1 && range.length > 1 ? `(${range})` : range; + } + } + + if (node.nodes) { + for (let child of node.nodes) { + output += walk(child, node); + } + } + return output; + }; + + return walk(ast); +}; + +var compile_1 = compile; + +const append = (queue = '', stash = '', enclose = false) => { + let result = []; + + queue = [].concat(queue); + stash = [].concat(stash); + + if (!stash.length) return queue; + if (!queue.length) { + return enclose ? utils$1.flatten(stash).map(ele => `{${ele}}`) : stash; + } + + for (let item of queue) { + if (Array.isArray(item)) { + for (let value of item) { + result.push(append(value, stash, enclose)); + } + } else { + for (let ele of stash) { + if (enclose === true && typeof ele === 'string') ele = `{${ele}}`; + result.push(Array.isArray(ele) ? append(item, ele, enclose) : (item + ele)); + } + } + } + return utils$1.flatten(result); +}; + +const expand = (ast, options = {}) => { + let rangeLimit = options.rangeLimit === void 0 ? 1000 : options.rangeLimit; + + let walk = (node, parent = {}) => { + node.queue = []; + + let p = parent; + let q = parent.queue; + + while (p.type !== 'brace' && p.type !== 'root' && p.parent) { + p = p.parent; + q = p.queue; + } + + if (node.invalid || node.dollar) { + q.push(append(q.pop(), stringify(node, options))); + return; + } + + if (node.type === 'brace' && node.invalid !== true && node.nodes.length === 2) { + q.push(append(q.pop(), ['{}'])); + return; + } + + if (node.nodes && node.ranges > 0) { + let args = utils$1.reduce(node.nodes); + + if (utils$1.exceedsLimit(...args, options.step, rangeLimit)) { + throw new RangeError('expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.'); + } + + let range = fillRange(...args, options); + if (range.length === 0) { + range = stringify(node, options); + } + + q.push(append(q.pop(), range)); + node.nodes = []; + return; + } + + let enclose = utils$1.encloseBrace(node); + let queue = node.queue; + let block = node; + + while (block.type !== 'brace' && block.type !== 'root' && block.parent) { + block = block.parent; + queue = block.queue; + } + + for (let i = 0; i < node.nodes.length; i++) { + let child = node.nodes[i]; + + if (child.type === 'comma' && node.type === 'brace') { + if (i === 1) queue.push(''); + queue.push(''); + continue; + } + + if (child.type === 'close') { + q.push(append(q.pop(), queue, enclose)); + continue; + } + + if (child.value && child.type !== 'open') { + queue.push(append(queue.pop(), child.value)); + continue; + } + + if (child.nodes) { + walk(child, node); + } + } + + return queue; + }; + + return utils$1.flatten(walk(ast)); +}; + +var expand_1 = expand; + +var constants$1 = { + MAX_LENGTH: 1024 * 64, + + // Digits + CHAR_0: '0', /* 0 */ + CHAR_9: '9', /* 9 */ + + // Alphabet chars. + CHAR_UPPERCASE_A: 'A', /* A */ + CHAR_LOWERCASE_A: 'a', /* a */ + CHAR_UPPERCASE_Z: 'Z', /* Z */ + CHAR_LOWERCASE_Z: 'z', /* z */ + + CHAR_LEFT_PARENTHESES: '(', /* ( */ + CHAR_RIGHT_PARENTHESES: ')', /* ) */ + + CHAR_ASTERISK: '*', /* * */ + + // Non-alphabetic chars. + CHAR_AMPERSAND: '&', /* & */ + CHAR_AT: '@', /* @ */ + CHAR_BACKSLASH: '\\', /* \ */ + CHAR_BACKTICK: '`', /* ` */ + CHAR_CARRIAGE_RETURN: '\r', /* \r */ + CHAR_CIRCUMFLEX_ACCENT: '^', /* ^ */ + CHAR_COLON: ':', /* : */ + CHAR_COMMA: ',', /* , */ + CHAR_DOLLAR: '$', /* . */ + CHAR_DOT: '.', /* . */ + CHAR_DOUBLE_QUOTE: '"', /* " */ + CHAR_EQUAL: '=', /* = */ + CHAR_EXCLAMATION_MARK: '!', /* ! */ + CHAR_FORM_FEED: '\f', /* \f */ + CHAR_FORWARD_SLASH: '/', /* / */ + CHAR_HASH: '#', /* # */ + CHAR_HYPHEN_MINUS: '-', /* - */ + CHAR_LEFT_ANGLE_BRACKET: '<', /* < */ + CHAR_LEFT_CURLY_BRACE: '{', /* { */ + CHAR_LEFT_SQUARE_BRACKET: '[', /* [ */ + CHAR_LINE_FEED: '\n', /* \n */ + CHAR_NO_BREAK_SPACE: '\u00A0', /* \u00A0 */ + CHAR_PERCENT: '%', /* % */ + CHAR_PLUS: '+', /* + */ + CHAR_QUESTION_MARK: '?', /* ? */ + CHAR_RIGHT_ANGLE_BRACKET: '>', /* > */ + CHAR_RIGHT_CURLY_BRACE: '}', /* } */ + CHAR_RIGHT_SQUARE_BRACKET: ']', /* ] */ + CHAR_SEMICOLON: ';', /* ; */ + CHAR_SINGLE_QUOTE: '\'', /* ' */ + CHAR_SPACE: ' ', /* */ + CHAR_TAB: '\t', /* \t */ + CHAR_UNDERSCORE: '_', /* _ */ + CHAR_VERTICAL_LINE: '|', /* | */ + CHAR_ZERO_WIDTH_NOBREAK_SPACE: '\uFEFF' /* \uFEFF */ +}; + +/** + * Constants + */ + +const { + MAX_LENGTH: MAX_LENGTH$1, + CHAR_BACKSLASH, /* \ */ + CHAR_BACKTICK, /* ` */ + CHAR_COMMA: CHAR_COMMA$1, /* , */ + CHAR_DOT: CHAR_DOT$1, /* . */ + CHAR_LEFT_PARENTHESES: CHAR_LEFT_PARENTHESES$1, /* ( */ + CHAR_RIGHT_PARENTHESES: CHAR_RIGHT_PARENTHESES$1, /* ) */ + CHAR_LEFT_CURLY_BRACE: CHAR_LEFT_CURLY_BRACE$1, /* { */ + CHAR_RIGHT_CURLY_BRACE: CHAR_RIGHT_CURLY_BRACE$1, /* } */ + CHAR_LEFT_SQUARE_BRACKET: CHAR_LEFT_SQUARE_BRACKET$1, /* [ */ + CHAR_RIGHT_SQUARE_BRACKET: CHAR_RIGHT_SQUARE_BRACKET$1, /* ] */ + CHAR_DOUBLE_QUOTE, /* " */ + CHAR_SINGLE_QUOTE, /* ' */ + CHAR_NO_BREAK_SPACE, + CHAR_ZERO_WIDTH_NOBREAK_SPACE +} = constants$1; + +/** + * parse + */ + +const parse$1 = (input, options = {}) => { + if (typeof input !== 'string') { + throw new TypeError('Expected a string'); + } + + let opts = options || {}; + let max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH$1, opts.maxLength) : MAX_LENGTH$1; + if (input.length > max) { + throw new SyntaxError(`Input length (${input.length}), exceeds max characters (${max})`); + } + + let ast = { type: 'root', input, nodes: [] }; + let stack = [ast]; + let block = ast; + let prev = ast; + let brackets = 0; + let length = input.length; + let index = 0; + let depth = 0; + let value; + + /** + * Helpers + */ + + const advance = () => input[index++]; + const push = node => { + if (node.type === 'text' && prev.type === 'dot') { + prev.type = 'text'; + } + + if (prev && prev.type === 'text' && node.type === 'text') { + prev.value += node.value; + return; + } + + block.nodes.push(node); + node.parent = block; + node.prev = prev; + prev = node; + return node; + }; + + push({ type: 'bos' }); + + while (index < length) { + block = stack[stack.length - 1]; + value = advance(); + + /** + * Invalid chars + */ + + if (value === CHAR_ZERO_WIDTH_NOBREAK_SPACE || value === CHAR_NO_BREAK_SPACE) { + continue; + } + + /** + * Escaped chars + */ + + if (value === CHAR_BACKSLASH) { + push({ type: 'text', value: (options.keepEscaping ? value : '') + advance() }); + continue; + } + + /** + * Right square bracket (literal): ']' + */ + + if (value === CHAR_RIGHT_SQUARE_BRACKET$1) { + push({ type: 'text', value: '\\' + value }); + continue; + } + + /** + * Left square bracket: '[' + */ + + if (value === CHAR_LEFT_SQUARE_BRACKET$1) { + brackets++; + let next; + + while (index < length && (next = advance())) { + value += next; + + if (next === CHAR_LEFT_SQUARE_BRACKET$1) { + brackets++; + continue; + } + + if (next === CHAR_BACKSLASH) { + value += advance(); + continue; + } + + if (next === CHAR_RIGHT_SQUARE_BRACKET$1) { + brackets--; + + if (brackets === 0) { + break; + } + } + } + + push({ type: 'text', value }); + continue; + } + + /** + * Parentheses + */ + + if (value === CHAR_LEFT_PARENTHESES$1) { + block = push({ type: 'paren', nodes: [] }); + stack.push(block); + push({ type: 'text', value }); + continue; + } + + if (value === CHAR_RIGHT_PARENTHESES$1) { + if (block.type !== 'paren') { + push({ type: 'text', value }); + continue; + } + block = stack.pop(); + push({ type: 'text', value }); + block = stack[stack.length - 1]; + continue; + } + + /** + * Quotes: '|"|` + */ + + if (value === CHAR_DOUBLE_QUOTE || value === CHAR_SINGLE_QUOTE || value === CHAR_BACKTICK) { + let open = value; + let next; + + if (options.keepQuotes !== true) { + value = ''; + } + + while (index < length && (next = advance())) { + if (next === CHAR_BACKSLASH) { + value += next + advance(); + continue; + } + + if (next === open) { + if (options.keepQuotes === true) value += next; + break; + } + + value += next; + } + + push({ type: 'text', value }); + continue; + } + + /** + * Left curly brace: '{' + */ + + if (value === CHAR_LEFT_CURLY_BRACE$1) { + depth++; + + let dollar = prev.value && prev.value.slice(-1) === '$' || block.dollar === true; + let brace = { + type: 'brace', + open: true, + close: false, + dollar, + depth, + commas: 0, + ranges: 0, + nodes: [] + }; + + block = push(brace); + stack.push(block); + push({ type: 'open', value }); + continue; + } + + /** + * Right curly brace: '}' + */ + + if (value === CHAR_RIGHT_CURLY_BRACE$1) { + if (block.type !== 'brace') { + push({ type: 'text', value }); + continue; + } + + let type = 'close'; + block = stack.pop(); + block.close = true; + + push({ type, value }); + depth--; + + block = stack[stack.length - 1]; + continue; + } + + /** + * Comma: ',' + */ + + if (value === CHAR_COMMA$1 && depth > 0) { + if (block.ranges > 0) { + block.ranges = 0; + let open = block.nodes.shift(); + block.nodes = [open, { type: 'text', value: stringify(block) }]; + } + + push({ type: 'comma', value }); + block.commas++; + continue; + } + + /** + * Dot: '.' + */ + + if (value === CHAR_DOT$1 && depth > 0 && block.commas === 0) { + let siblings = block.nodes; + + if (depth === 0 || siblings.length === 0) { + push({ type: 'text', value }); + continue; + } + + if (prev.type === 'dot') { + block.range = []; + prev.value += value; + prev.type = 'range'; + + if (block.nodes.length !== 3 && block.nodes.length !== 5) { + block.invalid = true; + block.ranges = 0; + prev.type = 'text'; + continue; + } + + block.ranges++; + block.args = []; + continue; + } + + if (prev.type === 'range') { + siblings.pop(); + + let before = siblings[siblings.length - 1]; + before.value += prev.value + value; + prev = before; + block.ranges--; + continue; + } + + push({ type: 'dot', value }); + continue; + } + + /** + * Text + */ + + push({ type: 'text', value }); + } + + // Mark imbalanced braces and brackets as invalid + do { + block = stack.pop(); + + if (block.type !== 'root') { + block.nodes.forEach(node => { + if (!node.nodes) { + if (node.type === 'open') node.isOpen = true; + if (node.type === 'close') node.isClose = true; + if (!node.nodes) node.type = 'text'; + node.invalid = true; + } + }); + + // get the location of the block on parent.nodes (block's siblings) + let parent = stack[stack.length - 1]; + let index = parent.nodes.indexOf(block); + // replace the (invalid) block with it's nodes + parent.nodes.splice(index, 1, ...block.nodes); + } + } while (stack.length > 0); + + push({ type: 'eos' }); + return ast; +}; + +var parse_1$1 = parse$1; + +/** + * Expand the given pattern or create a regex-compatible string. + * + * ```js + * const braces = require('braces'); + * console.log(braces('{a,b,c}', { compile: true })); //=> ['(a|b|c)'] + * console.log(braces('{a,b,c}')); //=> ['a', 'b', 'c'] + * ``` + * @param {String} `str` + * @param {Object} `options` + * @return {String} + * @api public + */ + +const braces = (input, options = {}) => { + let output = []; + + if (Array.isArray(input)) { + for (let pattern of input) { + let result = braces.create(pattern, options); + if (Array.isArray(result)) { + output.push(...result); + } else { + output.push(result); + } + } + } else { + output = [].concat(braces.create(input, options)); + } + + if (options && options.expand === true && options.nodupes === true) { + output = [...new Set(output)]; + } + return output; +}; + +/** + * Parse the given `str` with the given `options`. + * + * ```js + * // braces.parse(pattern, [, options]); + * const ast = braces.parse('a/{b,c}/d'); + * console.log(ast); + * ``` + * @param {String} pattern Brace pattern to parse + * @param {Object} options + * @return {Object} Returns an AST + * @api public + */ + +braces.parse = (input, options = {}) => parse_1$1(input, options); + +/** + * Creates a braces string from an AST, or an AST node. + * + * ```js + * const braces = require('braces'); + * let ast = braces.parse('foo/{a,b}/bar'); + * console.log(stringify(ast.nodes[2])); //=> '{a,b}' + * ``` + * @param {String} `input` Brace pattern or AST. + * @param {Object} `options` + * @return {Array} Returns an array of expanded values. + * @api public + */ + +braces.stringify = (input, options = {}) => { + if (typeof input === 'string') { + return stringify(braces.parse(input, options), options); + } + return stringify(input, options); +}; + +/** + * Compiles a brace pattern into a regex-compatible, optimized string. + * This method is called by the main [braces](#braces) function by default. + * + * ```js + * const braces = require('braces'); + * console.log(braces.compile('a/{b,c}/d')); + * //=> ['a/(b|c)/d'] + * ``` + * @param {String} `input` Brace pattern or AST. + * @param {Object} `options` + * @return {Array} Returns an array of expanded values. + * @api public + */ + +braces.compile = (input, options = {}) => { + if (typeof input === 'string') { + input = braces.parse(input, options); + } + return compile_1(input, options); +}; + +/** + * Expands a brace pattern into an array. This method is called by the + * main [braces](#braces) function when `options.expand` is true. Before + * using this method it's recommended that you read the [performance notes](#performance)) + * and advantages of using [.compile](#compile) instead. + * + * ```js + * const braces = require('braces'); + * console.log(braces.expand('a/{b,c}/d')); + * //=> ['a/b/d', 'a/c/d']; + * ``` + * @param {String} `pattern` Brace pattern + * @param {Object} `options` + * @return {Array} Returns an array of expanded values. + * @api public + */ + +braces.expand = (input, options = {}) => { + if (typeof input === 'string') { + input = braces.parse(input, options); + } + + let result = expand_1(input, options); + + // filter out empty strings if specified + if (options.noempty === true) { + result = result.filter(Boolean); + } + + // filter out duplicates if specified + if (options.nodupes === true) { + result = [...new Set(result)]; + } + + return result; +}; + +/** + * Processes a brace pattern and returns either an expanded array + * (if `options.expand` is true), a highly optimized regex-compatible string. + * This method is called by the main [braces](#braces) function. + * + * ```js + * const braces = require('braces'); + * console.log(braces.create('user-{200..300}/project-{a,b,c}-{1..10}')) + * //=> 'user-(20[0-9]|2[1-9][0-9]|300)/project-(a|b|c)-([1-9]|10)' + * ``` + * @param {String} `pattern` Brace pattern + * @param {Object} `options` + * @return {Array} Returns an array of expanded values. + * @api public + */ + +braces.create = (input, options = {}) => { + if (input === '' || input.length < 3) { + return [input]; + } + + return options.expand !== true + ? braces.compile(input, options) + : braces.expand(input, options); +}; + +/** + * Expose "braces" + */ + +var braces_1 = braces; + +var require$$0 = [ + "3dm", + "3ds", + "3g2", + "3gp", + "7z", + "a", + "aac", + "adp", + "ai", + "aif", + "aiff", + "alz", + "ape", + "apk", + "appimage", + "ar", + "arj", + "asf", + "au", + "avi", + "bak", + "baml", + "bh", + "bin", + "bk", + "bmp", + "btif", + "bz2", + "bzip2", + "cab", + "caf", + "cgm", + "class", + "cmx", + "cpio", + "cr2", + "cur", + "dat", + "dcm", + "deb", + "dex", + "djvu", + "dll", + "dmg", + "dng", + "doc", + "docm", + "docx", + "dot", + "dotm", + "dra", + "DS_Store", + "dsk", + "dts", + "dtshd", + "dvb", + "dwg", + "dxf", + "ecelp4800", + "ecelp7470", + "ecelp9600", + "egg", + "eol", + "eot", + "epub", + "exe", + "f4v", + "fbs", + "fh", + "fla", + "flac", + "flatpak", + "fli", + "flv", + "fpx", + "fst", + "fvt", + "g3", + "gh", + "gif", + "graffle", + "gz", + "gzip", + "h261", + "h263", + "h264", + "icns", + "ico", + "ief", + "img", + "ipa", + "iso", + "jar", + "jpeg", + "jpg", + "jpgv", + "jpm", + "jxr", + "key", + "ktx", + "lha", + "lib", + "lvp", + "lz", + "lzh", + "lzma", + "lzo", + "m3u", + "m4a", + "m4v", + "mar", + "mdi", + "mht", + "mid", + "midi", + "mj2", + "mka", + "mkv", + "mmr", + "mng", + "mobi", + "mov", + "movie", + "mp3", + "mp4", + "mp4a", + "mpeg", + "mpg", + "mpga", + "mxu", + "nef", + "npx", + "numbers", + "nupkg", + "o", + "odp", + "ods", + "odt", + "oga", + "ogg", + "ogv", + "otf", + "ott", + "pages", + "pbm", + "pcx", + "pdb", + "pdf", + "pea", + "pgm", + "pic", + "png", + "pnm", + "pot", + "potm", + "potx", + "ppa", + "ppam", + "ppm", + "pps", + "ppsm", + "ppsx", + "ppt", + "pptm", + "pptx", + "psd", + "pya", + "pyc", + "pyo", + "pyv", + "qt", + "rar", + "ras", + "raw", + "resources", + "rgb", + "rip", + "rlc", + "rmf", + "rmvb", + "rpm", + "rtf", + "rz", + "s3m", + "s7z", + "scpt", + "sgi", + "shar", + "snap", + "sil", + "sketch", + "slk", + "smv", + "snk", + "so", + "stl", + "suo", + "sub", + "swf", + "tar", + "tbz", + "tbz2", + "tga", + "tgz", + "thmx", + "tif", + "tiff", + "tlz", + "ttc", + "ttf", + "txz", + "udf", + "uvh", + "uvi", + "uvm", + "uvp", + "uvs", + "uvu", + "viv", + "vob", + "war", + "wav", + "wax", + "wbmp", + "wdp", + "weba", + "webm", + "webp", + "whl", + "wim", + "wm", + "wma", + "wmv", + "wmx", + "woff", + "woff2", + "wrm", + "wvx", + "xbm", + "xif", + "xla", + "xlam", + "xls", + "xlsb", + "xlsm", + "xlsx", + "xlt", + "xltm", + "xltx", + "xm", + "xmind", + "xpi", + "xpm", + "xwd", + "xz", + "z", + "zip", + "zipx" +]; + +var binaryExtensions = require$$0; + +const extensions = new Set(binaryExtensions); + +var isBinaryPath = filePath => extensions.has(sysPath__default['default'].extname(filePath).slice(1).toLowerCase()); + +var constants$2 = createCommonjsModule(function (module, exports) { + +const {sep} = sysPath__default['default']; +const {platform} = process; + +exports.EV_ALL = 'all'; +exports.EV_READY = 'ready'; +exports.EV_ADD = 'add'; +exports.EV_CHANGE = 'change'; +exports.EV_ADD_DIR = 'addDir'; +exports.EV_UNLINK = 'unlink'; +exports.EV_UNLINK_DIR = 'unlinkDir'; +exports.EV_RAW = 'raw'; +exports.EV_ERROR = 'error'; + +exports.STR_DATA = 'data'; +exports.STR_END = 'end'; +exports.STR_CLOSE = 'close'; + +exports.FSEVENT_CREATED = 'created'; +exports.FSEVENT_MODIFIED = 'modified'; +exports.FSEVENT_DELETED = 'deleted'; +exports.FSEVENT_MOVED = 'moved'; +exports.FSEVENT_CLONED = 'cloned'; +exports.FSEVENT_UNKNOWN = 'unknown'; +exports.FSEVENT_TYPE_FILE = 'file'; +exports.FSEVENT_TYPE_DIRECTORY = 'directory'; +exports.FSEVENT_TYPE_SYMLINK = 'symlink'; + +exports.KEY_LISTENERS = 'listeners'; +exports.KEY_ERR = 'errHandlers'; +exports.KEY_RAW = 'rawEmitters'; +exports.HANDLER_KEYS = [exports.KEY_LISTENERS, exports.KEY_ERR, exports.KEY_RAW]; + +exports.DOT_SLASH = `.${sep}`; + +exports.BACK_SLASH_RE = /\\/g; +exports.DOUBLE_SLASH_RE = /\/\//; +exports.SLASH_OR_BACK_SLASH_RE = /[/\\]/; +exports.DOT_RE = /\..*\.(sw[px])$|~$|\.subl.*\.tmp/; +exports.REPLACER_RE = /^\.[/\\]/; + +exports.SLASH = '/'; +exports.SLASH_SLASH = '//'; +exports.BRACE_START = '{'; +exports.BANG = '!'; +exports.ONE_DOT = '.'; +exports.TWO_DOTS = '..'; +exports.STAR = '*'; +exports.GLOBSTAR = '**'; +exports.ROOT_GLOBSTAR = '/**/*'; +exports.SLASH_GLOBSTAR = '/**'; +exports.DIR_SUFFIX = 'Dir'; +exports.ANYMATCH_OPTS = {dot: true}; +exports.STRING_TYPE = 'string'; +exports.FUNCTION_TYPE = 'function'; +exports.EMPTY_STR = ''; +exports.EMPTY_FN = () => {}; +exports.IDENTITY_FN = val => val; + +exports.isWindows = platform === 'win32'; +exports.isMacos = platform === 'darwin'; +exports.isLinux = platform === 'linux'; +}); + +const fs = require('original-fs'); + +const { promisify: promisify$1 } = require$$0__default['default']; + +const { + isWindows, + isLinux, + EMPTY_FN, + EMPTY_STR, + KEY_LISTENERS, + KEY_ERR, + KEY_RAW, + HANDLER_KEYS, + EV_CHANGE, + EV_ADD, + EV_ADD_DIR, + EV_ERROR, + STR_DATA, + STR_END, + BRACE_START, + STAR: STAR$1 +} = constants$2; + +const THROTTLE_MODE_WATCH = 'watch'; + +const open$1 = promisify$1(fs.open); +const stat$1 = promisify$1(fs.stat); +const lstat$1 = promisify$1(fs.lstat); +const close = promisify$1(fs.close); +const fsrealpath = promisify$1(fs.realpath); + +const statMethods = { lstat: lstat$1, stat: stat$1 }; + +// TODO: emit errors properly. Example: EMFILE on Macos. +const foreach = (val, fn) => { + if (val instanceof Set) { + val.forEach(fn); + } else { + fn(val); + } +}; + +const addAndConvert = (main, prop, item) => { + let container = main[prop]; + if (!(container instanceof Set)) { + main[prop] = container = new Set([container]); + } + container.add(item); +}; + +const clearItem = cont => key => { + const set = cont[key]; + if (set instanceof Set) { + set.clear(); + } else { + delete cont[key]; + } +}; + +const delFromSet = (main, prop, item) => { + const container = main[prop]; + if (container instanceof Set) { + container.delete(item); + } else if (container === item) { + delete main[prop]; + } +}; + +const isEmptySet = (val) => val instanceof Set ? val.size === 0 : !val; + +/** + * @typedef {String} Path + */ + +// fs_watch helpers + +// object to hold per-process fs_watch instances +// (may be shared across chokidar FSWatcher instances) + +/** + * @typedef {Object} FsWatchContainer + * @property {Set} listeners + * @property {Set} errHandlers + * @property {Set} rawEmitters + * @property {fs.FSWatcher=} watcher + * @property {Boolean=} watcherUnusable + */ + +/** + * @type {Map} + */ +const FsWatchInstances = new Map(); + +/** + * Instantiates the fs_watch interface + * @param {String} path to be watched + * @param {Object} options to be passed to fs_watch + * @param {Function} listener main event handler + * @param {Function} errHandler emits info about errors + * @param {Function} emitRaw emits raw event data + * @returns {fs.FSWatcher} new fsevents instance + */ +function createFsWatchInstance(path, options, listener, errHandler, emitRaw) { + const handleEvent = (rawEvent, evPath) => { + listener(path); + emitRaw(rawEvent, evPath, {watchedPath: path}); + + // emit based on events occurring for files from a directory's watcher in + // case the file's watcher misses it (and rely on throttling to de-dupe) + if (evPath && path !== evPath) { + fsWatchBroadcast( + sysPath__default['default'].resolve(path, evPath), KEY_LISTENERS, sysPath__default['default'].join(path, evPath) + ); + } + }; + try { + return fs.watch(path, options, handleEvent); + } catch (error) { + errHandler(error); + } +} + +/** + * Helper for passing fs_watch event data to a collection of listeners + * @param {Path} fullPath absolute path bound to fs_watch instance + * @param {String} type listener type + * @param {*=} val1 arguments to be passed to listeners + * @param {*=} val2 + * @param {*=} val3 + */ +const fsWatchBroadcast = (fullPath, type, val1, val2, val3) => { + const cont = FsWatchInstances.get(fullPath); + if (!cont) return; + foreach(cont[type], (listener) => { + listener(val1, val2, val3); + }); +}; + +/** + * Instantiates the fs_watch interface or binds listeners + * to an existing one covering the same file system entry + * @param {String} path + * @param {String} fullPath absolute path + * @param {Object} options to be passed to fs_watch + * @param {Object} handlers container for event listener functions + */ +const setFsWatchListener = (path, fullPath, options, handlers) => { + const {listener, errHandler, rawEmitter} = handlers; + let cont = FsWatchInstances.get(fullPath); + + /** @type {fs.FSWatcher=} */ + let watcher; + if (!options.persistent) { + watcher = createFsWatchInstance( + path, options, listener, errHandler, rawEmitter + ); + return watcher.close.bind(watcher); + } + if (cont) { + addAndConvert(cont, KEY_LISTENERS, listener); + addAndConvert(cont, KEY_ERR, errHandler); + addAndConvert(cont, KEY_RAW, rawEmitter); + } else { + watcher = createFsWatchInstance( + path, + options, + fsWatchBroadcast.bind(null, fullPath, KEY_LISTENERS), + errHandler, // no need to use broadcast here + fsWatchBroadcast.bind(null, fullPath, KEY_RAW) + ); + if (!watcher) return; + watcher.on(EV_ERROR, async (error) => { + const broadcastErr = fsWatchBroadcast.bind(null, fullPath, KEY_ERR); + cont.watcherUnusable = true; // documented since Node 10.4.1 + // Workaround for https://github.com/joyent/node/issues/4337 + if (isWindows && error.code === 'EPERM') { + try { + const fd = await open$1(path, 'r'); + await close(fd); + broadcastErr(error); + } catch (err) {} + } else { + broadcastErr(error); + } + }); + cont = { + listeners: listener, + errHandlers: errHandler, + rawEmitters: rawEmitter, + watcher + }; + FsWatchInstances.set(fullPath, cont); + } + // const index = cont.listeners.indexOf(listener); + + // removes this instance's listeners and closes the underlying fs_watch + // instance if there are no more listeners left + return () => { + delFromSet(cont, KEY_LISTENERS, listener); + delFromSet(cont, KEY_ERR, errHandler); + delFromSet(cont, KEY_RAW, rawEmitter); + if (isEmptySet(cont.listeners)) { + // Check to protect against issue gh-730. + // if (cont.watcherUnusable) { + cont.watcher.close(); + // } + FsWatchInstances.delete(fullPath); + HANDLER_KEYS.forEach(clearItem(cont)); + cont.watcher = undefined; + Object.freeze(cont); + } + }; +}; + +// fs_watchFile helpers + +// object to hold per-process fs_watchFile instances +// (may be shared across chokidar FSWatcher instances) +const FsWatchFileInstances = new Map(); + +/** + * Instantiates the fs_watchFile interface or binds listeners + * to an existing one covering the same file system entry + * @param {String} path to be watched + * @param {String} fullPath absolute path + * @param {Object} options options to be passed to fs_watchFile + * @param {Object} handlers container for event listener functions + * @returns {Function} closer + */ +const setFsWatchFileListener = (path, fullPath, options, handlers) => { + const {listener, rawEmitter} = handlers; + let cont = FsWatchFileInstances.get(fullPath); + + /* eslint-disable no-unused-vars, prefer-destructuring */ + let listeners = new Set(); + let rawEmitters = new Set(); + + const copts = cont && cont.options; + if (copts && (copts.persistent < options.persistent || copts.interval > options.interval)) { + // "Upgrade" the watcher to persistence or a quicker interval. + // This creates some unlikely edge case issues if the user mixes + // settings in a very weird way, but solving for those cases + // doesn't seem worthwhile for the added complexity. + listeners = cont.listeners; + rawEmitters = cont.rawEmitters; + fs.unwatchFile(fullPath); + cont = undefined; + } + + /* eslint-enable no-unused-vars, prefer-destructuring */ + + if (cont) { + addAndConvert(cont, KEY_LISTENERS, listener); + addAndConvert(cont, KEY_RAW, rawEmitter); + } else { + // TODO + // listeners.add(listener); + // rawEmitters.add(rawEmitter); + cont = { + listeners: listener, + rawEmitters: rawEmitter, + options, + watcher: fs.watchFile(fullPath, options, (curr, prev) => { + foreach(cont.rawEmitters, (rawEmitter) => { + rawEmitter(EV_CHANGE, fullPath, {curr, prev}); + }); + const currmtime = curr.mtimeMs; + if (curr.size !== prev.size || currmtime > prev.mtimeMs || currmtime === 0) { + foreach(cont.listeners, (listener) => listener(path, curr)); + } + }) + }; + FsWatchFileInstances.set(fullPath, cont); + } + // const index = cont.listeners.indexOf(listener); + + // Removes this instance's listeners and closes the underlying fs_watchFile + // instance if there are no more listeners left. + return () => { + delFromSet(cont, KEY_LISTENERS, listener); + delFromSet(cont, KEY_RAW, rawEmitter); + if (isEmptySet(cont.listeners)) { + FsWatchFileInstances.delete(fullPath); + fs.unwatchFile(fullPath); + cont.options = cont.watcher = undefined; + Object.freeze(cont); + } + }; +}; + +/** + * @mixin + */ +class NodeFsHandler { + +/** + * @param {import("../index").FSWatcher} fsW + */ +constructor(fsW) { + this.fsw = fsW; + this._boundHandleError = (error) => fsW._handleError(error); +} + +/** + * Watch file for changes with fs_watchFile or fs_watch. + * @param {String} path to file or dir + * @param {Function} listener on fs change + * @returns {Function} closer for the watcher instance + */ +_watchWithNodeFs(path, listener) { + const opts = this.fsw.options; + const directory = sysPath__default['default'].dirname(path); + const basename = sysPath__default['default'].basename(path); + const parent = this.fsw._getWatchedDir(directory); + parent.add(basename); + const absolutePath = sysPath__default['default'].resolve(path); + const options = {persistent: opts.persistent}; + if (!listener) listener = EMPTY_FN; + + let closer; + if (opts.usePolling) { + options.interval = opts.enableBinaryInterval && isBinaryPath(basename) ? + opts.binaryInterval : opts.interval; + closer = setFsWatchFileListener(path, absolutePath, options, { + listener, + rawEmitter: this.fsw._emitRaw + }); + } else { + closer = setFsWatchListener(path, absolutePath, options, { + listener, + errHandler: this._boundHandleError, + rawEmitter: this.fsw._emitRaw + }); + } + return closer; +} + +/** + * Watch a file and emit add event if warranted. + * @param {Path} file Path + * @param {fs.Stats} stats result of fs_stat + * @param {Boolean} initialAdd was the file added at watch instantiation? + * @returns {Function} closer for the watcher instance + */ +_handleFile(file, stats, initialAdd) { + if (this.fsw.closed) { + return; + } + const dirname = sysPath__default['default'].dirname(file); + const basename = sysPath__default['default'].basename(file); + const parent = this.fsw._getWatchedDir(dirname); + // stats is always present + let prevStats = stats; + + // if the file is already being watched, do nothing + if (parent.has(basename)) return; + + const listener = async (path, newStats) => { + if (!this.fsw._throttle(THROTTLE_MODE_WATCH, file, 5)) return; + if (!newStats || newStats.mtimeMs === 0) { + try { + const newStats = await stat$1(file); + if (this.fsw.closed) return; + // Check that change event was not fired because of changed only accessTime. + const at = newStats.atimeMs; + const mt = newStats.mtimeMs; + if (!at || at <= mt || mt !== prevStats.mtimeMs) { + this.fsw._emit(EV_CHANGE, file, newStats); + } + if (isLinux && prevStats.ino !== newStats.ino) { + this.fsw._closeFile(path); + prevStats = newStats; + this.fsw._addPathCloser(path, this._watchWithNodeFs(file, listener)); + } else { + prevStats = newStats; + } + } catch (error) { + // Fix issues where mtime is null but file is still present + this.fsw._remove(dirname, basename); + } + // add is about to be emitted if file not already tracked in parent + } else if (parent.has(basename)) { + // Check that change event was not fired because of changed only accessTime. + const at = newStats.atimeMs; + const mt = newStats.mtimeMs; + if (!at || at <= mt || mt !== prevStats.mtimeMs) { + this.fsw._emit(EV_CHANGE, file, newStats); + } + prevStats = newStats; + } + }; + // kick off the watcher + const closer = this._watchWithNodeFs(file, listener); + + // emit an add event if we're supposed to + if (!(initialAdd && this.fsw.options.ignoreInitial) && this.fsw._isntIgnored(file)) { + if (!this.fsw._throttle(EV_ADD, file, 0)) return; + this.fsw._emit(EV_ADD, file, stats); + } + + return closer; +} + +/** + * Handle symlinks encountered while reading a dir. + * @param {Object} entry returned by readdirp + * @param {String} directory path of dir being read + * @param {String} path of this item + * @param {String} item basename of this item + * @returns {Promise} true if no more processing is needed for this entry. + */ +async _handleSymlink(entry, directory, path, item) { + if (this.fsw.closed) { + return; + } + const full = entry.fullPath; + const dir = this.fsw._getWatchedDir(directory); + + if (!this.fsw.options.followSymlinks) { + // watch symlink directly (don't follow) and detect changes + this.fsw._incrReadyCount(); + const linkPath = await fsrealpath(path); + if (this.fsw.closed) return; + if (dir.has(item)) { + if (this.fsw._symlinkPaths.get(full) !== linkPath) { + this.fsw._symlinkPaths.set(full, linkPath); + this.fsw._emit(EV_CHANGE, path, entry.stats); + } + } else { + dir.add(item); + this.fsw._symlinkPaths.set(full, linkPath); + this.fsw._emit(EV_ADD, path, entry.stats); + } + this.fsw._emitReady(); + return true; + } + + // don't follow the same symlink more than once + if (this.fsw._symlinkPaths.has(full)) { + return true; + } + + this.fsw._symlinkPaths.set(full, true); +} + +_handleRead(directory, initialAdd, wh, target, dir, depth, throttler) { + // Normalize the directory name on Windows + directory = sysPath__default['default'].join(directory, EMPTY_STR); + + if (!wh.hasGlob) { + throttler = this.fsw._throttle('readdir', directory, 1000); + if (!throttler) return; + } + + const previous = this.fsw._getWatchedDir(wh.path); + const current = new Set(); + + let stream = this.fsw._readdirp(directory, { + fileFilter: entry => wh.filterPath(entry), + directoryFilter: entry => wh.filterDir(entry), + depth: 0 + }).on(STR_DATA, async (entry) => { + if (this.fsw.closed) { + stream = undefined; + return; + } + const item = entry.path; + let path = sysPath__default['default'].join(directory, item); + current.add(item); + + if (entry.stats.isSymbolicLink() && await this._handleSymlink(entry, directory, path, item)) { + return; + } + + if (this.fsw.closed) { + stream = undefined; + return; + } + // Files that present in current directory snapshot + // but absent in previous are added to watch list and + // emit `add` event. + if (item === target || !target && !previous.has(item)) { + this.fsw._incrReadyCount(); + + // ensure relativeness of path is preserved in case of watcher reuse + path = sysPath__default['default'].join(dir, sysPath__default['default'].relative(dir, path)); + + this._addToNodeFs(path, initialAdd, wh, depth + 1); + } + }).on(EV_ERROR, this._boundHandleError); + + return new Promise(resolve => + stream.once(STR_END, () => { + if (this.fsw.closed) { + stream = undefined; + return; + } + const wasThrottled = throttler ? throttler.clear() : false; + + resolve(); + + // Files that absent in current directory snapshot + // but present in previous emit `remove` event + // and are removed from @watched[directory]. + previous.getChildren().filter((item) => { + return item !== directory && + !current.has(item) && + // in case of intersecting globs; + // a path may have been filtered out of this readdir, but + // shouldn't be removed because it matches a different glob + (!wh.hasGlob || wh.filterPath({ + fullPath: sysPath__default['default'].resolve(directory, item) + })); + }).forEach((item) => { + this.fsw._remove(directory, item); + }); + + stream = undefined; + + // one more time for any missed in case changes came in extremely quickly + if (wasThrottled) this._handleRead(directory, false, wh, target, dir, depth, throttler); + }) + ); +} + +/** + * Read directory to add / remove files from `@watched` list and re-read it on change. + * @param {String} dir fs path + * @param {fs.Stats} stats + * @param {Boolean} initialAdd + * @param {Number} depth relative to user-supplied path + * @param {String} target child path targeted for watch + * @param {Object} wh Common watch helpers for this path + * @param {String} realpath + * @returns {Promise} closer for the watcher instance. + */ +async _handleDir(dir, stats, initialAdd, depth, target, wh, realpath) { + const parentDir = this.fsw._getWatchedDir(sysPath__default['default'].dirname(dir)); + const tracked = parentDir.has(sysPath__default['default'].basename(dir)); + if (!(initialAdd && this.fsw.options.ignoreInitial) && !target && !tracked) { + if (!wh.hasGlob || wh.globFilter(dir)) this.fsw._emit(EV_ADD_DIR, dir, stats); + } + + // ensure dir is tracked (harmless if redundant) + parentDir.add(sysPath__default['default'].basename(dir)); + this.fsw._getWatchedDir(dir); + let throttler; + let closer; + + const oDepth = this.fsw.options.depth; + if ((oDepth == null || depth <= oDepth) && !this.fsw._symlinkPaths.has(realpath)) { + if (!target) { + await this._handleRead(dir, initialAdd, wh, target, dir, depth, throttler); + if (this.fsw.closed) return; + } + + closer = this._watchWithNodeFs(dir, (dirPath, stats) => { + // if current directory is removed, do nothing + if (stats && stats.mtimeMs === 0) return; + + this._handleRead(dirPath, false, wh, target, dir, depth, throttler); + }); + } + return closer; +} + +/** + * Handle added file, directory, or glob pattern. + * Delegates call to _handleFile / _handleDir after checks. + * @param {String} path to file or ir + * @param {Boolean} initialAdd was the file added at watch instantiation? + * @param {Object} priorWh depth relative to user-supplied path + * @param {Number} depth Child path actually targeted for watch + * @param {String=} target Child path actually targeted for watch + * @returns {Promise} + */ +async _addToNodeFs(path, initialAdd, priorWh, depth, target) { + const ready = this.fsw._emitReady; + if (this.fsw._isIgnored(path) || this.fsw.closed) { + ready(); + return false; + } + + const wh = this.fsw._getWatchHelpers(path, depth); + if (!wh.hasGlob && priorWh) { + wh.hasGlob = priorWh.hasGlob; + wh.globFilter = priorWh.globFilter; + wh.filterPath = entry => priorWh.filterPath(entry); + wh.filterDir = entry => priorWh.filterDir(entry); + } + + // evaluate what is at the path we're being asked to watch + try { + const stats = await statMethods[wh.statMethod](wh.watchPath); + if (this.fsw.closed) return; + if (this.fsw._isIgnored(wh.watchPath, stats)) { + ready(); + return false; + } + + const follow = this.fsw.options.followSymlinks && !path.includes(STAR$1) && !path.includes(BRACE_START); + let closer; + if (stats.isDirectory()) { + const targetPath = follow ? await fsrealpath(path) : path; + if (this.fsw.closed) return; + closer = await this._handleDir(wh.watchPath, stats, initialAdd, depth, target, wh, targetPath); + if (this.fsw.closed) return; + // preserve this symlink's target path + if (path !== targetPath && targetPath !== undefined) { + this.fsw._symlinkPaths.set(targetPath, true); + } + } else if (stats.isSymbolicLink()) { + const targetPath = follow ? await fsrealpath(path) : path; + if (this.fsw.closed) return; + const parent = sysPath__default['default'].dirname(wh.watchPath); + this.fsw._getWatchedDir(parent).add(wh.watchPath); + this.fsw._emit(EV_ADD, wh.watchPath, stats); + closer = await this._handleDir(parent, stats, initialAdd, depth, path, wh, targetPath); + if (this.fsw.closed) return; + + // preserve this symlink's target path + if (targetPath !== undefined) { + this.fsw._symlinkPaths.set(sysPath__default['default'].resolve(path), targetPath); + } + } else { + closer = this._handleFile(wh.watchPath, stats, initialAdd); + } + ready(); + + this.fsw._addPathCloser(path, closer); + return false; + + } catch (error) { + if (this.fsw._handleError(error)) { + ready(); + return path; + } + } +} + +} + +var nodefsHandler = NodeFsHandler; + +const fs$1 = require('original-fs'); + +const { promisify: promisify$2 } = require$$0__default['default']; + +let fsevents; +try { + fsevents = null; +} catch (error) { + if (process.env.CHOKIDAR_PRINT_FSEVENTS_REQUIRE_ERROR) console.error(error); +} + +if (fsevents) { + // TODO: real check + const mtch = process.version.match(/v(\d+)\.(\d+)/); + if (mtch && mtch[1] && mtch[2]) { + const maj = Number.parseInt(mtch[1], 10); + const min = Number.parseInt(mtch[2], 10); + if (maj === 8 && min < 16) { + fsevents = undefined; + } + } +} + +const { + EV_ADD: EV_ADD$1, + EV_CHANGE: EV_CHANGE$1, + EV_ADD_DIR: EV_ADD_DIR$1, + EV_UNLINK, + EV_ERROR: EV_ERROR$1, + STR_DATA: STR_DATA$1, + STR_END: STR_END$1, + FSEVENT_CREATED, + FSEVENT_MODIFIED, + FSEVENT_DELETED, + FSEVENT_MOVED, + // FSEVENT_CLONED, + FSEVENT_UNKNOWN, + FSEVENT_TYPE_FILE, + FSEVENT_TYPE_DIRECTORY, + FSEVENT_TYPE_SYMLINK, + + ROOT_GLOBSTAR, + DIR_SUFFIX, + DOT_SLASH, + FUNCTION_TYPE, + EMPTY_FN: EMPTY_FN$1, + IDENTITY_FN +} = constants$2; + +const Depth = (value) => isNaN(value) ? {} : {depth: value}; + +const stat$2 = promisify$2(fs$1.stat); +const lstat$2 = promisify$2(fs$1.lstat); +const realpath$1 = promisify$2(fs$1.realpath); + +const statMethods$1 = { stat: stat$2, lstat: lstat$2 }; + +/** + * @typedef {String} Path + */ + +/** + * @typedef {Object} FsEventsWatchContainer + * @property {Set} listeners + * @property {Function} rawEmitter + * @property {{stop: Function}} watcher + */ + +// fsevents instance helper functions +/** + * Object to hold per-process fsevents instances (may be shared across chokidar FSWatcher instances) + * @type {Map} + */ +const FSEventsWatchers = new Map(); + +// Threshold of duplicate path prefixes at which to start +// consolidating going forward +const consolidateThreshhold = 10; + +const wrongEventFlags = new Set([ + 69888, 70400, 71424, 72704, 73472, 131328, 131840, 262912 +]); + +/** + * Instantiates the fsevents interface + * @param {Path} path path to be watched + * @param {Function} callback called when fsevents is bound and ready + * @returns {{stop: Function}} new fsevents instance + */ +const createFSEventsInstance = (path, callback) => { + const stop = fsevents.watch(path, callback); + return {stop}; +}; + +/** + * Instantiates the fsevents interface or binds listeners to an existing one covering + * the same file tree. + * @param {Path} path - to be watched + * @param {Path} realPath - real path for symlinks + * @param {Function} listener - called when fsevents emits events + * @param {Function} rawEmitter - passes data to listeners of the 'raw' event + * @returns {Function} closer + */ +function setFSEventsListener(path, realPath, listener, rawEmitter) { + let watchPath = sysPath__default['default'].extname(path) ? sysPath__default['default'].dirname(path) : path; + const parentPath = sysPath__default['default'].dirname(watchPath); + let cont = FSEventsWatchers.get(watchPath); + + // If we've accumulated a substantial number of paths that + // could have been consolidated by watching one directory + // above the current one, create a watcher on the parent + // path instead, so that we do consolidate going forward. + if (couldConsolidate(parentPath)) { + watchPath = parentPath; + } + + const resolvedPath = sysPath__default['default'].resolve(path); + const hasSymlink = resolvedPath !== realPath; + + const filteredListener = (fullPath, flags, info) => { + if (hasSymlink) fullPath = fullPath.replace(realPath, resolvedPath); + if ( + fullPath === resolvedPath || + !fullPath.indexOf(resolvedPath + sysPath__default['default'].sep) + ) listener(fullPath, flags, info); + }; + + // check if there is already a watcher on a parent path + // modifies `watchPath` to the parent path when it finds a match + let watchedParent = false; + for (const watchedPath of FSEventsWatchers.keys()) { + if (realPath.indexOf(sysPath__default['default'].resolve(watchedPath) + sysPath__default['default'].sep) === 0) { + watchPath = watchedPath; + cont = FSEventsWatchers.get(watchPath); + watchedParent = true; + break; + } + } + + if (cont || watchedParent) { + cont.listeners.add(filteredListener); + } else { + cont = { + listeners: new Set([filteredListener]), + rawEmitter, + watcher: createFSEventsInstance(watchPath, (fullPath, flags) => { + if (!cont.listeners.size) return; + const info = fsevents.getInfo(fullPath, flags); + cont.listeners.forEach(list => { + list(fullPath, flags, info); + }); + + cont.rawEmitter(info.event, fullPath, info); + }) + }; + FSEventsWatchers.set(watchPath, cont); + } + + // removes this instance's listeners and closes the underlying fsevents + // instance if there are no more listeners left + return () => { + const lst = cont.listeners; + + lst.delete(filteredListener); + if (!lst.size) { + FSEventsWatchers.delete(watchPath); + if (cont.watcher) return cont.watcher.stop().then(() => { + cont.rawEmitter = cont.watcher = undefined; + Object.freeze(cont); + }); + } + }; +} + +// Decide whether or not we should start a new higher-level +// parent watcher +const couldConsolidate = (path) => { + let count = 0; + for (const watchPath of FSEventsWatchers.keys()) { + if (watchPath.indexOf(path) === 0) { + count++; + if (count >= consolidateThreshhold) { + return true; + } + } + } + + return false; +}; + +// returns boolean indicating whether fsevents can be used +const canUse = () => fsevents && FSEventsWatchers.size < 128; + +// determines subdirectory traversal levels from root to path +const calcDepth = (path, root) => { + let i = 0; + while (!path.indexOf(root) && (path = sysPath__default['default'].dirname(path)) !== root) i++; + return i; +}; + +// returns boolean indicating whether the fsevents' event info has the same type +// as the one returned by fs.stat +const sameTypes = (info, stats) => ( + info.type === FSEVENT_TYPE_DIRECTORY && stats.isDirectory() || + info.type === FSEVENT_TYPE_SYMLINK && stats.isSymbolicLink() || + info.type === FSEVENT_TYPE_FILE && stats.isFile() +); + +/** + * @mixin + */ +class FsEventsHandler { + +/** + * @param {import('../index').FSWatcher} fsw + */ +constructor(fsw) { + this.fsw = fsw; +} +checkIgnored(path, stats) { + const ipaths = this.fsw._ignoredPaths; + if (this.fsw._isIgnored(path, stats)) { + ipaths.add(path); + if (stats && stats.isDirectory()) { + ipaths.add(path + ROOT_GLOBSTAR); + } + return true; + } + + ipaths.delete(path); + ipaths.delete(path + ROOT_GLOBSTAR); +} + +addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts) { + const event = watchedDir.has(item) ? EV_CHANGE$1 : EV_ADD$1; + this.handleEvent(event, path, fullPath, realPath, parent, watchedDir, item, info, opts); +} + +async checkExists(path, fullPath, realPath, parent, watchedDir, item, info, opts) { + try { + const stats = await stat$2(path); + if (this.fsw.closed) return; + if (sameTypes(info, stats)) { + this.addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts); + } else { + this.handleEvent(EV_UNLINK, path, fullPath, realPath, parent, watchedDir, item, info, opts); + } + } catch (error) { + if (error.code === 'EACCES') { + this.addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts); + } else { + this.handleEvent(EV_UNLINK, path, fullPath, realPath, parent, watchedDir, item, info, opts); + } + } +} + +handleEvent(event, path, fullPath, realPath, parent, watchedDir, item, info, opts) { + if (this.fsw.closed || this.checkIgnored(path)) return; + + if (event === EV_UNLINK) { + const isDirectory = info.type === FSEVENT_TYPE_DIRECTORY; + // suppress unlink events on never before seen files + if (isDirectory || watchedDir.has(item)) { + this.fsw._remove(parent, item, isDirectory); + } + } else { + if (event === EV_ADD$1) { + // track new directories + if (info.type === FSEVENT_TYPE_DIRECTORY) this.fsw._getWatchedDir(path); + + if (info.type === FSEVENT_TYPE_SYMLINK && opts.followSymlinks) { + // push symlinks back to the top of the stack to get handled + const curDepth = opts.depth === undefined ? + undefined : calcDepth(fullPath, realPath) + 1; + return this._addToFsEvents(path, false, true, curDepth); + } + + // track new paths + // (other than symlinks being followed, which will be tracked soon) + this.fsw._getWatchedDir(parent).add(item); + } + /** + * @type {'add'|'addDir'|'unlink'|'unlinkDir'} + */ + const eventName = info.type === FSEVENT_TYPE_DIRECTORY ? event + DIR_SUFFIX : event; + this.fsw._emit(eventName, path); + if (eventName === EV_ADD_DIR$1) this._addToFsEvents(path, false, true); + } +} + +/** + * Handle symlinks encountered during directory scan + * @param {String} watchPath - file/dir path to be watched with fsevents + * @param {String} realPath - real path (in case of symlinks) + * @param {Function} transform - path transformer + * @param {Function} globFilter - path filter in case a glob pattern was provided + * @returns {Function} closer for the watcher instance +*/ +_watchWithFsEvents(watchPath, realPath, transform, globFilter) { + if (this.fsw.closed || this.fsw._isIgnored(watchPath)) return; + const opts = this.fsw.options; + const watchCallback = async (fullPath, flags, info) => { + if (this.fsw.closed) return; + if ( + opts.depth !== undefined && + calcDepth(fullPath, realPath) > opts.depth + ) return; + const path = transform(sysPath__default['default'].join( + watchPath, sysPath__default['default'].relative(watchPath, fullPath) + )); + if (globFilter && !globFilter(path)) return; + // ensure directories are tracked + const parent = sysPath__default['default'].dirname(path); + const item = sysPath__default['default'].basename(path); + const watchedDir = this.fsw._getWatchedDir( + info.type === FSEVENT_TYPE_DIRECTORY ? path : parent + ); + + // correct for wrong events emitted + if (wrongEventFlags.has(flags) || info.event === FSEVENT_UNKNOWN) { + if (typeof opts.ignored === FUNCTION_TYPE) { + let stats; + try { + stats = await stat$2(path); + } catch (error) {} + if (this.fsw.closed) return; + if (this.checkIgnored(path, stats)) return; + if (sameTypes(info, stats)) { + this.addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts); + } else { + this.handleEvent(EV_UNLINK, path, fullPath, realPath, parent, watchedDir, item, info, opts); + } + } else { + this.checkExists(path, fullPath, realPath, parent, watchedDir, item, info, opts); + } + } else { + switch (info.event) { + case FSEVENT_CREATED: + case FSEVENT_MODIFIED: + return this.addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts); + case FSEVENT_DELETED: + case FSEVENT_MOVED: + return this.checkExists(path, fullPath, realPath, parent, watchedDir, item, info, opts); + } + } + }; + + const closer = setFSEventsListener( + watchPath, + realPath, + watchCallback, + this.fsw._emitRaw + ); + + this.fsw._emitReady(); + return closer; +} + +/** + * Handle symlinks encountered during directory scan + * @param {String} linkPath path to symlink + * @param {String} fullPath absolute path to the symlink + * @param {Function} transform pre-existing path transformer + * @param {Number} curDepth level of subdirectories traversed to where symlink is + * @returns {Promise} + */ +async _handleFsEventsSymlink(linkPath, fullPath, transform, curDepth) { + // don't follow the same symlink more than once + if (this.fsw.closed || this.fsw._symlinkPaths.has(fullPath)) return; + + this.fsw._symlinkPaths.set(fullPath, true); + this.fsw._incrReadyCount(); + + try { + const linkTarget = await realpath$1(linkPath); + if (this.fsw.closed) return; + if (this.fsw._isIgnored(linkTarget)) { + return this.fsw._emitReady(); + } + + this.fsw._incrReadyCount(); + + // add the linkTarget for watching with a wrapper for transform + // that causes emitted paths to incorporate the link's path + this._addToFsEvents(linkTarget || linkPath, (path) => { + let aliasedPath = linkPath; + if (linkTarget && linkTarget !== DOT_SLASH) { + aliasedPath = path.replace(linkTarget, linkPath); + } else if (path !== DOT_SLASH) { + aliasedPath = sysPath__default['default'].join(linkPath, path); + } + return transform(aliasedPath); + }, false, curDepth); + } catch(error) { + if (this.fsw._handleError(error)) { + return this.fsw._emitReady(); + } + } +} + +/** + * + * @param {Path} newPath + * @param {fs.Stats} stats + */ +emitAdd(newPath, stats, processPath, opts, forceAdd) { + const pp = processPath(newPath); + const isDir = stats.isDirectory(); + const dirObj = this.fsw._getWatchedDir(sysPath__default['default'].dirname(pp)); + const base = sysPath__default['default'].basename(pp); + + // ensure empty dirs get tracked + if (isDir) this.fsw._getWatchedDir(pp); + if (dirObj.has(base)) return; + dirObj.add(base); + + if (!opts.ignoreInitial || forceAdd === true) { + this.fsw._emit(isDir ? EV_ADD_DIR$1 : EV_ADD$1, pp, stats); + } +} + +initWatch(realPath, path, wh, processPath) { + if (this.fsw.closed) return; + const closer = this._watchWithFsEvents( + wh.watchPath, + sysPath__default['default'].resolve(realPath || wh.watchPath), + processPath, + wh.globFilter + ); + this.fsw._addPathCloser(path, closer); +} + +/** + * Handle added path with fsevents + * @param {String} path file/dir path or glob pattern + * @param {Function|Boolean=} transform converts working path to what the user expects + * @param {Boolean=} forceAdd ensure add is emitted + * @param {Number=} priorDepth Level of subdirectories already traversed. + * @returns {Promise} + */ +async _addToFsEvents(path, transform, forceAdd, priorDepth) { + if (this.fsw.closed) { + return; + } + const opts = this.fsw.options; + const processPath = typeof transform === FUNCTION_TYPE ? transform : IDENTITY_FN; + + const wh = this.fsw._getWatchHelpers(path); + + // evaluate what is at the path we're being asked to watch + try { + const stats = await statMethods$1[wh.statMethod](wh.watchPath); + if (this.fsw.closed) return; + if (this.fsw._isIgnored(wh.watchPath, stats)) { + throw null; + } + if (stats.isDirectory()) { + // emit addDir unless this is a glob parent + if (!wh.globFilter) this.emitAdd(processPath(path), stats, processPath, opts, forceAdd); + + // don't recurse further if it would exceed depth setting + if (priorDepth && priorDepth > opts.depth) return; + + // scan the contents of the dir + this.fsw._readdirp(wh.watchPath, { + fileFilter: entry => wh.filterPath(entry), + directoryFilter: entry => wh.filterDir(entry), + ...Depth(opts.depth - (priorDepth || 0)) + }).on(STR_DATA$1, (entry) => { + // need to check filterPath on dirs b/c filterDir is less restrictive + if (this.fsw.closed) { + return; + } + if (entry.stats.isDirectory() && !wh.filterPath(entry)) return; + + const joinedPath = sysPath__default['default'].join(wh.watchPath, entry.path); + const {fullPath} = entry; + + if (wh.followSymlinks && entry.stats.isSymbolicLink()) { + // preserve the current depth here since it can't be derived from + // real paths past the symlink + const curDepth = opts.depth === undefined ? + undefined : calcDepth(joinedPath, sysPath__default['default'].resolve(wh.watchPath)) + 1; + + this._handleFsEventsSymlink(joinedPath, fullPath, processPath, curDepth); + } else { + this.emitAdd(joinedPath, entry.stats, processPath, opts, forceAdd); + } + }).on(EV_ERROR$1, EMPTY_FN$1).on(STR_END$1, () => { + this.fsw._emitReady(); + }); + } else { + this.emitAdd(wh.watchPath, stats, processPath, opts, forceAdd); + this.fsw._emitReady(); + } + } catch (error) { + if (!error || this.fsw._handleError(error)) { + // TODO: Strange thing: "should not choke on an ignored watch path" will be failed without 2 ready calls -__- + this.fsw._emitReady(); + this.fsw._emitReady(); + } + } + + if (opts.persistent && forceAdd !== true) { + if (typeof transform === FUNCTION_TYPE) { + // realpath has already been resolved + this.initWatch(undefined, path, wh, processPath); + } else { + let realPath; + try { + realPath = await realpath$1(wh.watchPath); + } catch (e) {} + this.initWatch(realPath, path, wh, processPath); + } + } +} + +} + +var fseventsHandler = FsEventsHandler; +var canUse_1 = canUse; +fseventsHandler.canUse = canUse_1; + +const { EventEmitter } = require$$0__default$2['default']; +const fs$2 = require('original-fs'); + +const { promisify: promisify$3 } = require$$0__default['default']; + +const anymatch = anymatch_1.default; + + + + + + + +const { + EV_ALL, + EV_READY, + EV_ADD: EV_ADD$2, + EV_CHANGE: EV_CHANGE$2, + EV_UNLINK: EV_UNLINK$1, + EV_ADD_DIR: EV_ADD_DIR$2, + EV_UNLINK_DIR, + EV_RAW, + EV_ERROR: EV_ERROR$2, + + STR_CLOSE, + STR_END: STR_END$2, + + BACK_SLASH_RE, + DOUBLE_SLASH_RE, + SLASH_OR_BACK_SLASH_RE, + DOT_RE, + REPLACER_RE, + + SLASH, + SLASH_SLASH, + BRACE_START: BRACE_START$1, + BANG: BANG$1, + ONE_DOT, + TWO_DOTS, + GLOBSTAR, + SLASH_GLOBSTAR, + ANYMATCH_OPTS, + STRING_TYPE, + FUNCTION_TYPE: FUNCTION_TYPE$1, + EMPTY_STR: EMPTY_STR$1, + EMPTY_FN: EMPTY_FN$2, + + isWindows: isWindows$1, + isMacos +} = constants$2; + +const stat$3 = promisify$3(fs$2.stat); +const readdir$1 = promisify$3(fs$2.readdir); + +/** + * @typedef {String} Path + * @typedef {'all'|'add'|'addDir'|'change'|'unlink'|'unlinkDir'|'raw'|'error'|'ready'} EventName + * @typedef {'readdir'|'watch'|'add'|'remove'|'change'} ThrottleType + */ + +/** + * + * @typedef {Object} WatchHelpers + * @property {Boolean} followSymlinks + * @property {'stat'|'lstat'} statMethod + * @property {Path} path + * @property {Path} watchPath + * @property {Function} entryPath + * @property {Boolean} hasGlob + * @property {Object} globFilter + * @property {Function} filterPath + * @property {Function} filterDir + */ + +const arrify = (value = []) => Array.isArray(value) ? value : [value]; +const flatten = (list, result = []) => { + list.forEach(item => { + if (Array.isArray(item)) { + flatten(item, result); + } else { + result.push(item); + } + }); + return result; +}; + +const unifyPaths = (paths_) => { + /** + * @type {Array} + */ + const paths = flatten(arrify(paths_)); + if (!paths.every(p => typeof p === STRING_TYPE)) { + throw new TypeError(`Non-string provided as watch path: ${paths}`); + } + return paths.map(normalizePathToUnix); +}; + +// If SLASH_SLASH occurs at the beginning of path, it is not replaced +// because "//StoragePC/DrivePool/Movies" is a valid network path +const toUnix = (string) => { + let str = string.replace(BACK_SLASH_RE, SLASH); + let prepend = false; + if (str.startsWith(SLASH_SLASH)) { + prepend = true; + } + while (str.match(DOUBLE_SLASH_RE)) { + str = str.replace(DOUBLE_SLASH_RE, SLASH); + } + if (prepend) { + str = SLASH + str; + } + return str; +}; + +// Our version of upath.normalize +// TODO: this is not equal to path-normalize module - investigate why +const normalizePathToUnix = (path) => toUnix(sysPath__default['default'].normalize(toUnix(path))); + +const normalizeIgnored = (cwd = EMPTY_STR$1) => (path) => { + if (typeof path !== STRING_TYPE) return path; + return normalizePathToUnix(sysPath__default['default'].isAbsolute(path) ? path : sysPath__default['default'].join(cwd, path)); +}; + +const getAbsolutePath = (path, cwd) => { + if (sysPath__default['default'].isAbsolute(path)) { + return path; + } + if (path.startsWith(BANG$1)) { + return BANG$1 + sysPath__default['default'].join(cwd, path.slice(1)); + } + return sysPath__default['default'].join(cwd, path); +}; + +const undef = (opts, key) => opts[key] === undefined; + +/** + * Directory entry. + * @property {Path} path + * @property {Set} items + */ +class DirEntry { + /** + * @param {Path} dir + * @param {Function} removeWatcher + */ + constructor(dir, removeWatcher) { + this.path = dir; + this._removeWatcher = removeWatcher; + /** @type {Set} */ + this.items = new Set(); + } + + add(item) { + const {items} = this; + if (!items) return; + if (item !== ONE_DOT && item !== TWO_DOTS) items.add(item); + } + + async remove(item) { + const {items} = this; + if (!items) return; + items.delete(item); + if (items.size > 0) return; + + const dir = this.path; + try { + await readdir$1(dir); + } catch (err) { + if (this._removeWatcher) { + this._removeWatcher(sysPath__default['default'].dirname(dir), sysPath__default['default'].basename(dir)); + } + } + } + + has(item) { + const {items} = this; + if (!items) return; + return items.has(item); + } + + /** + * @returns {Array} + */ + getChildren() { + const {items} = this; + if (!items) return; + return [...items.values()]; + } + + dispose() { + this.items.clear(); + delete this.path; + delete this._removeWatcher; + delete this.items; + Object.freeze(this); + } +} + +const STAT_METHOD_F = 'stat'; +const STAT_METHOD_L = 'lstat'; +class WatchHelper { + constructor(path, watchPath, follow, fsw) { + this.fsw = fsw; + this.path = path = path.replace(REPLACER_RE, EMPTY_STR$1); + this.watchPath = watchPath; + this.fullWatchPath = sysPath__default['default'].resolve(watchPath); + this.hasGlob = watchPath !== path; + /** @type {object|boolean} */ + if (path === EMPTY_STR$1) this.hasGlob = false; + this.globSymlink = this.hasGlob && follow ? undefined : false; + this.globFilter = this.hasGlob ? anymatch(path, undefined, ANYMATCH_OPTS) : false; + this.dirParts = this.getDirParts(path); + this.dirParts.forEach((parts) => { + if (parts.length > 1) parts.pop(); + }); + this.followSymlinks = follow; + this.statMethod = follow ? STAT_METHOD_F : STAT_METHOD_L; + } + + checkGlobSymlink(entry) { + // only need to resolve once + // first entry should always have entry.parentDir === EMPTY_STR + if (this.globSymlink === undefined) { + this.globSymlink = entry.fullParentDir === this.fullWatchPath ? + false : {realPath: entry.fullParentDir, linkPath: this.fullWatchPath}; + } + + if (this.globSymlink) { + return entry.fullPath.replace(this.globSymlink.realPath, this.globSymlink.linkPath); + } + + return entry.fullPath; + } + + entryPath(entry) { + return sysPath__default['default'].join(this.watchPath, + sysPath__default['default'].relative(this.watchPath, this.checkGlobSymlink(entry)) + ); + } + + filterPath(entry) { + const {stats} = entry; + if (stats && stats.isSymbolicLink()) return this.filterDir(entry); + const resolvedPath = this.entryPath(entry); + const matchesGlob = this.hasGlob && typeof this.globFilter === FUNCTION_TYPE$1 ? + this.globFilter(resolvedPath) : true; + return matchesGlob && + this.fsw._isntIgnored(resolvedPath, stats) && + this.fsw._hasReadPermissions(stats); + } + + getDirParts(path) { + if (!this.hasGlob) return []; + const parts = []; + const expandedPath = path.includes(BRACE_START$1) ? braces_1.expand(path) : [path]; + expandedPath.forEach((path) => { + parts.push(sysPath__default['default'].relative(this.watchPath, path).split(SLASH_OR_BACK_SLASH_RE)); + }); + return parts; + } + + filterDir(entry) { + if (this.hasGlob) { + const entryParts = this.getDirParts(this.checkGlobSymlink(entry)); + let globstar = false; + this.unmatchedGlob = !this.dirParts.some((parts) => { + return parts.every((part, i) => { + if (part === GLOBSTAR) globstar = true; + return globstar || !entryParts[0][i] || anymatch(part, entryParts[0][i], ANYMATCH_OPTS); + }); + }); + } + return !this.unmatchedGlob && this.fsw._isntIgnored(this.entryPath(entry), entry.stats); + } +} + +/** + * Watches files & directories for changes. Emitted events: + * `add`, `addDir`, `change`, `unlink`, `unlinkDir`, `all`, `error` + * + * new FSWatcher() + * .add(directories) + * .on('add', path => log('File', path, 'was added')) + */ +class FSWatcher extends EventEmitter { +// Not indenting methods for history sake; for now. +constructor(_opts) { + super(); + + const opts = {}; + if (_opts) Object.assign(opts, _opts); // for frozen objects + + /** @type {Map} */ + this._watched = new Map(); + /** @type {Map} */ + this._closers = new Map(); + /** @type {Set} */ + this._ignoredPaths = new Set(); + + /** @type {Map} */ + this._throttled = new Map(); + + /** @type {Map} */ + this._symlinkPaths = new Map(); + + this._streams = new Set(); + this.closed = false; + + // Set up default options. + if (undef(opts, 'persistent')) opts.persistent = true; + if (undef(opts, 'ignoreInitial')) opts.ignoreInitial = false; + if (undef(opts, 'ignorePermissionErrors')) opts.ignorePermissionErrors = false; + if (undef(opts, 'interval')) opts.interval = 100; + if (undef(opts, 'binaryInterval')) opts.binaryInterval = 300; + if (undef(opts, 'disableGlobbing')) opts.disableGlobbing = false; + opts.enableBinaryInterval = opts.binaryInterval !== opts.interval; + + // Enable fsevents on OS X when polling isn't explicitly enabled. + if (undef(opts, 'useFsEvents')) opts.useFsEvents = !opts.usePolling; + + // If we can't use fsevents, ensure the options reflect it's disabled. + const canUseFsEvents = fseventsHandler.canUse(); + if (!canUseFsEvents) opts.useFsEvents = false; + + // Use polling on Mac if not using fsevents. + // Other platforms use non-polling fs_watch. + if (undef(opts, 'usePolling') && !opts.useFsEvents) { + opts.usePolling = isMacos; + } + + // Global override (useful for end-developers that need to force polling for all + // instances of chokidar, regardless of usage/dependency depth) + const envPoll = process.env.CHOKIDAR_USEPOLLING; + if (envPoll !== undefined) { + const envLower = envPoll.toLowerCase(); + + if (envLower === 'false' || envLower === '0') { + opts.usePolling = false; + } else if (envLower === 'true' || envLower === '1') { + opts.usePolling = true; + } else { + opts.usePolling = !!envLower; + } + } + const envInterval = process.env.CHOKIDAR_INTERVAL; + if (envInterval) { + opts.interval = Number.parseInt(envInterval, 10); + } + + // Editor atomic write normalization enabled by default with fs.watch + if (undef(opts, 'atomic')) opts.atomic = !opts.usePolling && !opts.useFsEvents; + if (opts.atomic) this._pendingUnlinks = new Map(); + + if (undef(opts, 'followSymlinks')) opts.followSymlinks = true; + + if (undef(opts, 'awaitWriteFinish')) opts.awaitWriteFinish = false; + if (opts.awaitWriteFinish === true) opts.awaitWriteFinish = {}; + const awf = opts.awaitWriteFinish; + if (awf) { + if (!awf.stabilityThreshold) awf.stabilityThreshold = 2000; + if (!awf.pollInterval) awf.pollInterval = 100; + this._pendingWrites = new Map(); + } + if (opts.ignored) opts.ignored = arrify(opts.ignored); + + let readyCalls = 0; + this._emitReady = () => { + readyCalls++; + if (readyCalls >= this._readyCount) { + this._emitReady = EMPTY_FN$2; + this._readyEmitted = true; + // use process.nextTick to allow time for listener to be bound + process.nextTick(() => this.emit(EV_READY)); + } + }; + this._emitRaw = (...args) => this.emit(EV_RAW, ...args); + this._readyEmitted = false; + this.options = opts; + + // Initialize with proper watcher. + if (opts.useFsEvents) { + this._fsEventsHandler = new fseventsHandler(this); + } else { + this._nodeFsHandler = new nodefsHandler(this); + } + + // You’re frozen when your heart’s not open. + Object.freeze(opts); +} + +// Public methods + +/** + * Adds paths to be watched on an existing FSWatcher instance + * @param {Path|Array} paths_ + * @param {String=} _origAdd private; for handling non-existent paths to be watched + * @param {Boolean=} _internal private; indicates a non-user add + * @returns {FSWatcher} for chaining + */ +add(paths_, _origAdd, _internal) { + const {cwd, disableGlobbing} = this.options; + this.closed = false; + let paths = unifyPaths(paths_); + if (cwd) { + paths = paths.map((path) => { + const absPath = getAbsolutePath(path, cwd); + + // Check `path` instead of `absPath` because the cwd portion can't be a glob + if (disableGlobbing || !isGlob(path)) { + return absPath; + } + return normalizePath(absPath); + }); + } + + // set aside negated glob strings + paths = paths.filter((path) => { + if (path.startsWith(BANG$1)) { + this._ignoredPaths.add(path.slice(1)); + return false; + } + + // if a path is being added that was previously ignored, stop ignoring it + this._ignoredPaths.delete(path); + this._ignoredPaths.delete(path + SLASH_GLOBSTAR); + + // reset the cached userIgnored anymatch fn + // to make ignoredPaths changes effective + this._userIgnored = undefined; + + return true; + }); + + if (this.options.useFsEvents && this._fsEventsHandler) { + if (!this._readyCount) this._readyCount = paths.length; + if (this.options.persistent) this._readyCount *= 2; + paths.forEach((path) => this._fsEventsHandler._addToFsEvents(path)); + } else { + if (!this._readyCount) this._readyCount = 0; + this._readyCount += paths.length; + Promise.all( + paths.map(async path => { + const res = await this._nodeFsHandler._addToNodeFs(path, !_internal, 0, 0, _origAdd); + if (res) this._emitReady(); + return res; + }) + ).then(results => { + if (this.closed) return; + results.filter(item => item).forEach(item => { + this.add(sysPath__default['default'].dirname(item), sysPath__default['default'].basename(_origAdd || item)); + }); + }); + } + + return this; +} + +/** + * Close watchers or start ignoring events from specified paths. + * @param {Path|Array} paths_ - string or array of strings, file/directory paths and/or globs + * @returns {FSWatcher} for chaining +*/ +unwatch(paths_) { + if (this.closed) return this; + const paths = unifyPaths(paths_); + const {cwd} = this.options; + + paths.forEach((path) => { + // convert to absolute path unless relative path already matches + if (!sysPath__default['default'].isAbsolute(path) && !this._closers.has(path)) { + if (cwd) path = sysPath__default['default'].join(cwd, path); + path = sysPath__default['default'].resolve(path); + } + + this._closePath(path); + + this._ignoredPaths.add(path); + if (this._watched.has(path)) { + this._ignoredPaths.add(path + SLASH_GLOBSTAR); + } + + // reset the cached userIgnored anymatch fn + // to make ignoredPaths changes effective + this._userIgnored = undefined; + }); + + return this; +} + +/** + * Close watchers and remove all listeners from watched paths. + * @returns {Promise}. +*/ +close() { + if (this.closed) return this._closePromise; + this.closed = true; + + // Memory management. + this.removeAllListeners(); + const closers = []; + this._closers.forEach(closerList => closerList.forEach(closer => { + const promise = closer(); + if (promise instanceof Promise) closers.push(promise); + })); + this._streams.forEach(stream => stream.destroy()); + this._userIgnored = undefined; + this._readyCount = 0; + this._readyEmitted = false; + this._watched.forEach(dirent => dirent.dispose()); + ['closers', 'watched', 'streams', 'symlinkPaths', 'throttled'].forEach(key => { + this[`_${key}`].clear(); + }); + + this._closePromise = closers.length ? Promise.all(closers).then(() => undefined) : Promise.resolve(); + return this._closePromise; +} + +/** + * Expose list of watched paths + * @returns {Object} for chaining +*/ +getWatched() { + const watchList = {}; + this._watched.forEach((entry, dir) => { + const key = this.options.cwd ? sysPath__default['default'].relative(this.options.cwd, dir) : dir; + watchList[key || ONE_DOT] = entry.getChildren().sort(); + }); + return watchList; +} + +emitWithAll(event, args) { + this.emit(...args); + if (event !== EV_ERROR$2) this.emit(EV_ALL, ...args); +} + +// Common helpers +// -------------- + +/** + * Normalize and emit events. + * Calling _emit DOES NOT MEAN emit() would be called! + * @param {EventName} event Type of event + * @param {Path} path File or directory path + * @param {*=} val1 arguments to be passed with event + * @param {*=} val2 + * @param {*=} val3 + * @returns the error if defined, otherwise the value of the FSWatcher instance's `closed` flag + */ +async _emit(event, path, val1, val2, val3) { + if (this.closed) return; + + const opts = this.options; + if (isWindows$1) path = sysPath__default['default'].normalize(path); + if (opts.cwd) path = sysPath__default['default'].relative(opts.cwd, path); + /** @type Array */ + const args = [event, path]; + if (val3 !== undefined) args.push(val1, val2, val3); + else if (val2 !== undefined) args.push(val1, val2); + else if (val1 !== undefined) args.push(val1); + + const awf = opts.awaitWriteFinish; + let pw; + if (awf && (pw = this._pendingWrites.get(path))) { + pw.lastChange = new Date(); + return this; + } + + if (opts.atomic) { + if (event === EV_UNLINK$1) { + this._pendingUnlinks.set(path, args); + setTimeout(() => { + this._pendingUnlinks.forEach((entry, path) => { + this.emit(...entry); + this.emit(EV_ALL, ...entry); + this._pendingUnlinks.delete(path); + }); + }, typeof opts.atomic === 'number' ? opts.atomic : 100); + return this; + } + if (event === EV_ADD$2 && this._pendingUnlinks.has(path)) { + event = args[0] = EV_CHANGE$2; + this._pendingUnlinks.delete(path); + } + } + + if (awf && (event === EV_ADD$2 || event === EV_CHANGE$2) && this._readyEmitted) { + const awfEmit = (err, stats) => { + if (err) { + event = args[0] = EV_ERROR$2; + args[1] = err; + this.emitWithAll(event, args); + } else if (stats) { + // if stats doesn't exist the file must have been deleted + if (args.length > 2) { + args[2] = stats; + } else { + args.push(stats); + } + this.emitWithAll(event, args); + } + }; + + this._awaitWriteFinish(path, awf.stabilityThreshold, event, awfEmit); + return this; + } + + if (event === EV_CHANGE$2) { + const isThrottled = !this._throttle(EV_CHANGE$2, path, 50); + if (isThrottled) return this; + } + + if (opts.alwaysStat && val1 === undefined && + (event === EV_ADD$2 || event === EV_ADD_DIR$2 || event === EV_CHANGE$2) + ) { + const fullPath = opts.cwd ? sysPath__default['default'].join(opts.cwd, path) : path; + let stats; + try { + stats = await stat$3(fullPath); + } catch (err) {} + // Suppress event when fs_stat fails, to avoid sending undefined 'stat' + if (!stats || this.closed) return; + args.push(stats); + } + this.emitWithAll(event, args); + + return this; +} + +/** + * Common handler for errors + * @param {Error} error + * @returns {Error|Boolean} The error if defined, otherwise the value of the FSWatcher instance's `closed` flag + */ +_handleError(error) { + const code = error && error.code; + if (error && code !== 'ENOENT' && code !== 'ENOTDIR' && + (!this.options.ignorePermissionErrors || (code !== 'EPERM' && code !== 'EACCES')) + ) { + this.emit(EV_ERROR$2, error); + } + return error || this.closed; +} + +/** + * Helper utility for throttling + * @param {ThrottleType} actionType type being throttled + * @param {Path} path being acted upon + * @param {Number} timeout duration of time to suppress duplicate actions + * @returns {Object|false} tracking object or false if action should be suppressed + */ +_throttle(actionType, path, timeout) { + if (!this._throttled.has(actionType)) { + this._throttled.set(actionType, new Map()); + } + + /** @type {Map} */ + const action = this._throttled.get(actionType); + /** @type {Object} */ + const actionPath = action.get(path); + + if (actionPath) { + actionPath.count++; + return false; + } + + let timeoutObject; + const clear = () => { + const item = action.get(path); + const count = item ? item.count : 0; + action.delete(path); + clearTimeout(timeoutObject); + if (item) clearTimeout(item.timeoutObject); + return count; + }; + timeoutObject = setTimeout(clear, timeout); + const thr = {timeoutObject, clear, count: 0}; + action.set(path, thr); + return thr; +} + +_incrReadyCount() { + return this._readyCount++; +} + +/** + * Awaits write operation to finish. + * Polls a newly created file for size variations. When files size does not change for 'threshold' milliseconds calls callback. + * @param {Path} path being acted upon + * @param {Number} threshold Time in milliseconds a file size must be fixed before acknowledging write OP is finished + * @param {EventName} event + * @param {Function} awfEmit Callback to be called when ready for event to be emitted. + */ +_awaitWriteFinish(path, threshold, event, awfEmit) { + let timeoutHandler; + + let fullPath = path; + if (this.options.cwd && !sysPath__default['default'].isAbsolute(path)) { + fullPath = sysPath__default['default'].join(this.options.cwd, path); + } + + const now = new Date(); + + const awaitWriteFinish = (prevStat) => { + fs$2.stat(fullPath, (err, curStat) => { + if (err || !this._pendingWrites.has(path)) { + if (err && err.code !== 'ENOENT') awfEmit(err); + return; + } + + const now = Number(new Date()); + + if (prevStat && curStat.size !== prevStat.size) { + this._pendingWrites.get(path).lastChange = now; + } + const pw = this._pendingWrites.get(path); + const df = now - pw.lastChange; + + if (df >= threshold) { + this._pendingWrites.delete(path); + awfEmit(undefined, curStat); + } else { + timeoutHandler = setTimeout( + awaitWriteFinish, + this.options.awaitWriteFinish.pollInterval, + curStat + ); + } + }); + }; + + if (!this._pendingWrites.has(path)) { + this._pendingWrites.set(path, { + lastChange: now, + cancelWait: () => { + this._pendingWrites.delete(path); + clearTimeout(timeoutHandler); + return event; + } + }); + timeoutHandler = setTimeout( + awaitWriteFinish, + this.options.awaitWriteFinish.pollInterval + ); + } +} + +_getGlobIgnored() { + return [...this._ignoredPaths.values()]; +} + +/** + * Determines whether user has asked to ignore this path. + * @param {Path} path filepath or dir + * @param {fs.Stats=} stats result of fs.stat + * @returns {Boolean} + */ +_isIgnored(path, stats) { + if (this.options.atomic && DOT_RE.test(path)) return true; + if (!this._userIgnored) { + const {cwd} = this.options; + const ign = this.options.ignored; + + const ignored = ign && ign.map(normalizeIgnored(cwd)); + const paths = arrify(ignored) + .filter((path) => typeof path === STRING_TYPE && !isGlob(path)) + .map((path) => path + SLASH_GLOBSTAR); + const list = this._getGlobIgnored().map(normalizeIgnored(cwd)).concat(ignored, paths); + this._userIgnored = anymatch(list, undefined, ANYMATCH_OPTS); + } + + return this._userIgnored([path, stats]); +} + +_isntIgnored(path, stat) { + return !this._isIgnored(path, stat); +} + +/** + * Provides a set of common helpers and properties relating to symlink and glob handling. + * @param {Path} path file, directory, or glob pattern being watched + * @param {Number=} depth at any depth > 0, this isn't a glob + * @returns {WatchHelper} object containing helpers for this path + */ +_getWatchHelpers(path, depth) { + const watchPath = depth || this.options.disableGlobbing || !isGlob(path) ? path : globParent(path); + const follow = this.options.followSymlinks; + + return new WatchHelper(path, watchPath, follow, this); +} + +// Directory helpers +// ----------------- + +/** + * Provides directory tracking objects + * @param {String} directory path of the directory + * @returns {DirEntry} the directory's tracking object + */ +_getWatchedDir(directory) { + if (!this._boundRemove) this._boundRemove = this._remove.bind(this); + const dir = sysPath__default['default'].resolve(directory); + if (!this._watched.has(dir)) this._watched.set(dir, new DirEntry(dir, this._boundRemove)); + return this._watched.get(dir); +} + +// File helpers +// ------------ + +/** + * Check for read permissions. + * Based on this answer on SO: https://stackoverflow.com/a/11781404/1358405 + * @param {fs.Stats} stats - object, result of fs_stat + * @returns {Boolean} indicates whether the file can be read +*/ +_hasReadPermissions(stats) { + if (this.options.ignorePermissionErrors) return true; + + // stats.mode may be bigint + const md = stats && Number.parseInt(stats.mode, 10); + const st = md & 0o777; + const it = Number.parseInt(st.toString(8)[0], 10); + return Boolean(4 & it); +} + +/** + * Handles emitting unlink events for + * files and directories, and via recursion, for + * files and directories within directories that are unlinked + * @param {String} directory within which the following item is located + * @param {String} item base path of item/directory + * @returns {void} +*/ +_remove(directory, item, isDirectory) { + // if what is being deleted is a directory, get that directory's paths + // for recursive deleting and cleaning of watched object + // if it is not a directory, nestedDirectoryChildren will be empty array + const path = sysPath__default['default'].join(directory, item); + const fullPath = sysPath__default['default'].resolve(path); + isDirectory = isDirectory != null + ? isDirectory + : this._watched.has(path) || this._watched.has(fullPath); + + // prevent duplicate handling in case of arriving here nearly simultaneously + // via multiple paths (such as _handleFile and _handleDir) + if (!this._throttle('remove', path, 100)) return; + + // if the only watched file is removed, watch for its return + if (!isDirectory && !this.options.useFsEvents && this._watched.size === 1) { + this.add(directory, item, true); + } + + // This will create a new entry in the watched object in either case + // so we got to do the directory check beforehand + const wp = this._getWatchedDir(path); + const nestedDirectoryChildren = wp.getChildren(); + + // Recursively remove children directories / files. + nestedDirectoryChildren.forEach(nested => this._remove(path, nested)); + + // Check if item was on the watched list and remove it + const parent = this._getWatchedDir(directory); + const wasTracked = parent.has(item); + parent.remove(item); + + // Fixes issue #1042 -> Relative paths were detected and added as symlinks + // (https://github.com/paulmillr/chokidar/blob/e1753ddbc9571bdc33b4a4af172d52cb6e611c10/lib/nodefs-handler.js#L612), + // but never removed from the map in case the path was deleted. + // This leads to an incorrect state if the path was recreated: + // https://github.com/paulmillr/chokidar/blob/e1753ddbc9571bdc33b4a4af172d52cb6e611c10/lib/nodefs-handler.js#L553 + if (this._symlinkPaths.has(fullPath)) { + this._symlinkPaths.delete(fullPath); + } + + // If we wait for this file to be fully written, cancel the wait. + let relPath = path; + if (this.options.cwd) relPath = sysPath__default['default'].relative(this.options.cwd, path); + if (this.options.awaitWriteFinish && this._pendingWrites.has(relPath)) { + const event = this._pendingWrites.get(relPath).cancelWait(); + if (event === EV_ADD$2) return; + } + + // The Entry will either be a directory that just got removed + // or a bogus entry to a file, in either case we have to remove it + this._watched.delete(path); + this._watched.delete(fullPath); + const eventName = isDirectory ? EV_UNLINK_DIR : EV_UNLINK$1; + if (wasTracked && !this._isIgnored(path)) this._emit(eventName, path); + + // Avoid conflicts if we later create another file with the same name + if (!this.options.useFsEvents) { + this._closePath(path); + } +} + +/** + * Closes all watchers for a path + * @param {Path} path + */ +_closePath(path) { + this._closeFile(path); + const dir = sysPath__default['default'].dirname(path); + this._getWatchedDir(dir).remove(sysPath__default['default'].basename(path)); +} + +/** + * Closes only file-specific watchers + * @param {Path} path + */ +_closeFile(path) { + const closers = this._closers.get(path); + if (!closers) return; + closers.forEach(closer => closer()); + this._closers.delete(path); +} + +/** + * + * @param {Path} path + * @param {Function} closer + */ +_addPathCloser(path, closer) { + if (!closer) return; + let list = this._closers.get(path); + if (!list) { + list = []; + this._closers.set(path, list); + } + list.push(closer); +} + +_readdirp(root, opts) { + if (this.closed) return; + const options = {type: EV_ALL, alwaysStat: true, lstat: true, ...opts}; + let stream = readdirp_1(root, options); + this._streams.add(stream); + stream.once(STR_CLOSE, () => { + stream = undefined; + }); + stream.once(STR_END$2, () => { + if (stream) { + this._streams.delete(stream); + stream = undefined; + } + }); + return stream; +} + +} + +/** + * Instantiates watcher with paths to be tracked. + * @param {String|Array} paths file/directory paths and/or globs + * @param {Object=} options chokidar opts + * @returns an instance of FSWatcher for chaining. + */ +const watch = (paths, options) => { + const watcher = new FSWatcher(options); + watcher.add(paths); + return watcher; +}; + +var watch_1 = watch; + +var utils$2 = createCommonjsModule(function (module, exports) { + +exports.__esModule = true; +exports.extend = extend; +exports.indexOf = indexOf; +exports.escapeExpression = escapeExpression; +exports.isEmpty = isEmpty; +exports.createFrame = createFrame; +exports.blockParams = blockParams; +exports.appendContextPath = appendContextPath; +var escape = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''', + '`': '`', + '=': '=' +}; + +var badChars = /[&<>"'`=]/g, + possible = /[&<>"'`=]/; + +function escapeChar(chr) { + return escape[chr]; +} + +function extend(obj /* , ...source */) { + for (var i = 1; i < arguments.length; i++) { + for (var key in arguments[i]) { + if (Object.prototype.hasOwnProperty.call(arguments[i], key)) { + obj[key] = arguments[i][key]; + } + } + } + + return obj; +} + +var toString = Object.prototype.toString; + +exports.toString = toString; +// Sourced from lodash +// https://github.com/bestiejs/lodash/blob/master/LICENSE.txt +/* eslint-disable func-style */ +var isFunction = function isFunction(value) { + return typeof value === 'function'; +}; +// fallback for older versions of Chrome and Safari +/* istanbul ignore next */ +if (isFunction(/x/)) { + exports.isFunction = isFunction = function (value) { + return typeof value === 'function' && toString.call(value) === '[object Function]'; + }; +} +exports.isFunction = isFunction; + +/* eslint-enable func-style */ + +/* istanbul ignore next */ +var isArray = Array.isArray || function (value) { + return value && typeof value === 'object' ? toString.call(value) === '[object Array]' : false; +}; + +exports.isArray = isArray; +// Older IE versions do not directly support indexOf so we must implement our own, sadly. + +function indexOf(array, value) { + for (var i = 0, len = array.length; i < len; i++) { + if (array[i] === value) { + return i; + } + } + return -1; +} + +function escapeExpression(string) { + if (typeof string !== 'string') { + // don't escape SafeStrings, since they're already safe + if (string && string.toHTML) { + return string.toHTML(); + } else if (string == null) { + return ''; + } else if (!string) { + return string + ''; + } + + // Force a string conversion as this will be done by the append regardless and + // the regex test will do this transparently behind the scenes, causing issues if + // an object's to string has escaped characters in it. + string = '' + string; + } + + if (!possible.test(string)) { + return string; + } + return string.replace(badChars, escapeChar); +} + +function isEmpty(value) { + if (!value && value !== 0) { + return true; + } else if (isArray(value) && value.length === 0) { + return true; + } else { + return false; + } +} + +function createFrame(object) { + var frame = extend({}, object); + frame._parent = object; + return frame; +} + +function blockParams(params, ids) { + params.path = ids; + return params; +} + +function appendContextPath(contextPath, id) { + return (contextPath ? contextPath + '.' : '') + id; +} + +}); + +var exception = createCommonjsModule(function (module, exports) { + +exports.__esModule = true; +var errorProps = ['description', 'fileName', 'lineNumber', 'endLineNumber', 'message', 'name', 'number', 'stack']; + +function Exception(message, node) { + var loc = node && node.loc, + line = undefined, + endLineNumber = undefined, + column = undefined, + endColumn = undefined; + + if (loc) { + line = loc.start.line; + endLineNumber = loc.end.line; + column = loc.start.column; + endColumn = loc.end.column; + + message += ' - ' + line + ':' + column; + } + + var tmp = Error.prototype.constructor.call(this, message); + + // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work. + for (var idx = 0; idx < errorProps.length; idx++) { + this[errorProps[idx]] = tmp[errorProps[idx]]; + } + + /* istanbul ignore else */ + if (Error.captureStackTrace) { + Error.captureStackTrace(this, Exception); + } + + try { + if (loc) { + this.lineNumber = line; + this.endLineNumber = endLineNumber; + + // Work around issue under safari where we can't directly set the column value + /* istanbul ignore next */ + if (Object.defineProperty) { + Object.defineProperty(this, 'column', { + value: column, + enumerable: true + }); + Object.defineProperty(this, 'endColumn', { + value: endColumn, + enumerable: true + }); + } else { + this.column = column; + this.endColumn = endColumn; + } + } + } catch (nop) { + /* Ignore if the browser is very particular */ + } +} + +Exception.prototype = new Error(); + +exports['default'] = Exception; +module.exports = exports['default']; + +}); + +var blockHelperMissing = createCommonjsModule(function (module, exports) { + +exports.__esModule = true; + + + +exports['default'] = function (instance) { + instance.registerHelper('blockHelperMissing', function (context, options) { + var inverse = options.inverse, + fn = options.fn; + + if (context === true) { + return fn(this); + } else if (context === false || context == null) { + return inverse(this); + } else if (utils$2.isArray(context)) { + if (context.length > 0) { + if (options.ids) { + options.ids = [options.name]; + } + + return instance.helpers.each(context, options); + } else { + return inverse(this); + } + } else { + if (options.data && options.ids) { + var data = utils$2.createFrame(options.data); + data.contextPath = utils$2.appendContextPath(options.data.contextPath, options.name); + options = { data: data }; + } + + return fn(context, options); + } + }); +}; + +module.exports = exports['default']; + +}); + +var each = createCommonjsModule(function (module, exports) { + +exports.__esModule = true; +// istanbul ignore next + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + + + + +var _exception2 = _interopRequireDefault(exception); + +exports['default'] = function (instance) { + instance.registerHelper('each', function (context, options) { + if (!options) { + throw new _exception2['default']('Must pass iterator to #each'); + } + + var fn = options.fn, + inverse = options.inverse, + i = 0, + ret = '', + data = undefined, + contextPath = undefined; + + if (options.data && options.ids) { + contextPath = utils$2.appendContextPath(options.data.contextPath, options.ids[0]) + '.'; + } + + if (utils$2.isFunction(context)) { + context = context.call(this); + } + + if (options.data) { + data = utils$2.createFrame(options.data); + } + + function execIteration(field, index, last) { + if (data) { + data.key = field; + data.index = index; + data.first = index === 0; + data.last = !!last; + + if (contextPath) { + data.contextPath = contextPath + field; + } + } + + ret = ret + fn(context[field], { + data: data, + blockParams: utils$2.blockParams([context[field], field], [contextPath + field, null]) + }); + } + + if (context && typeof context === 'object') { + if (utils$2.isArray(context)) { + for (var j = context.length; i < j; i++) { + if (i in context) { + execIteration(i, i, i === context.length - 1); + } + } + } else if (commonjsGlobal.Symbol && context[commonjsGlobal.Symbol.iterator]) { + var newContext = []; + var iterator = context[commonjsGlobal.Symbol.iterator](); + for (var it = iterator.next(); !it.done; it = iterator.next()) { + newContext.push(it.value); + } + context = newContext; + for (var j = context.length; i < j; i++) { + execIteration(i, i, i === context.length - 1); + } + } else { + (function () { + var priorKey = undefined; + + Object.keys(context).forEach(function (key) { + // We're running the iterations one step out of sync so we can detect + // the last iteration without have to scan the object twice and create + // an itermediate keys array. + if (priorKey !== undefined) { + execIteration(priorKey, i - 1); + } + priorKey = key; + i++; + }); + if (priorKey !== undefined) { + execIteration(priorKey, i - 1, true); + } + })(); + } + } + + if (i === 0) { + ret = inverse(this); + } + + return ret; + }); +}; + +module.exports = exports['default']; + +}); + +var helperMissing = createCommonjsModule(function (module, exports) { + +exports.__esModule = true; +// istanbul ignore next + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + + +var _exception2 = _interopRequireDefault(exception); + +exports['default'] = function (instance) { + instance.registerHelper('helperMissing', function () /* [args, ]options */{ + if (arguments.length === 1) { + // A missing field in a {{foo}} construct. + return undefined; + } else { + // Someone is actually trying to call something, blow up. + throw new _exception2['default']('Missing helper: "' + arguments[arguments.length - 1].name + '"'); + } + }); +}; + +module.exports = exports['default']; + +}); + +var _if = createCommonjsModule(function (module, exports) { + +exports.__esModule = true; +// istanbul ignore next + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + + + + +var _exception2 = _interopRequireDefault(exception); + +exports['default'] = function (instance) { + instance.registerHelper('if', function (conditional, options) { + if (arguments.length != 2) { + throw new _exception2['default']('#if requires exactly one argument'); + } + if (utils$2.isFunction(conditional)) { + conditional = conditional.call(this); + } + + // Default behavior is to render the positive path if the value is truthy and not empty. + // The `includeZero` option may be set to treat the condtional as purely not empty based on the + // behavior of isEmpty. Effectively this determines if 0 is handled by the positive path or negative. + if (!options.hash.includeZero && !conditional || utils$2.isEmpty(conditional)) { + return options.inverse(this); + } else { + return options.fn(this); + } + }); + + instance.registerHelper('unless', function (conditional, options) { + if (arguments.length != 2) { + throw new _exception2['default']('#unless requires exactly one argument'); + } + return instance.helpers['if'].call(this, conditional, { + fn: options.inverse, + inverse: options.fn, + hash: options.hash + }); + }); +}; + +module.exports = exports['default']; + +}); + +var log = createCommonjsModule(function (module, exports) { + +exports.__esModule = true; + +exports['default'] = function (instance) { + instance.registerHelper('log', function () /* message, options */{ + var args = [undefined], + options = arguments[arguments.length - 1]; + for (var i = 0; i < arguments.length - 1; i++) { + args.push(arguments[i]); + } + + var level = 1; + if (options.hash.level != null) { + level = options.hash.level; + } else if (options.data && options.data.level != null) { + level = options.data.level; + } + args[0] = level; + + instance.log.apply(instance, args); + }); +}; + +module.exports = exports['default']; + +}); + +var lookup = createCommonjsModule(function (module, exports) { + +exports.__esModule = true; + +exports['default'] = function (instance) { + instance.registerHelper('lookup', function (obj, field, options) { + if (!obj) { + // Note for 5.0: Change to "obj == null" in 5.0 + return obj; + } + return options.lookupProperty(obj, field); + }); +}; + +module.exports = exports['default']; + +}); + +var _with = createCommonjsModule(function (module, exports) { + +exports.__esModule = true; +// istanbul ignore next + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + + + + +var _exception2 = _interopRequireDefault(exception); + +exports['default'] = function (instance) { + instance.registerHelper('with', function (context, options) { + if (arguments.length != 2) { + throw new _exception2['default']('#with requires exactly one argument'); + } + if (utils$2.isFunction(context)) { + context = context.call(this); + } + + var fn = options.fn; + + if (!utils$2.isEmpty(context)) { + var data = options.data; + if (options.data && options.ids) { + data = utils$2.createFrame(options.data); + data.contextPath = utils$2.appendContextPath(options.data.contextPath, options.ids[0]); + } + + return fn(context, { + data: data, + blockParams: utils$2.blockParams([context], [data && data.contextPath]) + }); + } else { + return options.inverse(this); + } + }); +}; + +module.exports = exports['default']; + +}); + +var helpers = createCommonjsModule(function (module, exports) { + +exports.__esModule = true; +exports.registerDefaultHelpers = registerDefaultHelpers; +exports.moveHelperToHooks = moveHelperToHooks; +// istanbul ignore next + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + + +var _helpersBlockHelperMissing2 = _interopRequireDefault(blockHelperMissing); + + + +var _helpersEach2 = _interopRequireDefault(each); + + + +var _helpersHelperMissing2 = _interopRequireDefault(helperMissing); + + + +var _helpersIf2 = _interopRequireDefault(_if); + + + +var _helpersLog2 = _interopRequireDefault(log); + + + +var _helpersLookup2 = _interopRequireDefault(lookup); + + + +var _helpersWith2 = _interopRequireDefault(_with); + +function registerDefaultHelpers(instance) { + _helpersBlockHelperMissing2['default'](instance); + _helpersEach2['default'](instance); + _helpersHelperMissing2['default'](instance); + _helpersIf2['default'](instance); + _helpersLog2['default'](instance); + _helpersLookup2['default'](instance); + _helpersWith2['default'](instance); +} + +function moveHelperToHooks(instance, helperName, keepHelper) { + if (instance.helpers[helperName]) { + instance.hooks[helperName] = instance.helpers[helperName]; + if (!keepHelper) { + delete instance.helpers[helperName]; + } + } +} + +}); + +var inline = createCommonjsModule(function (module, exports) { + +exports.__esModule = true; + + + +exports['default'] = function (instance) { + instance.registerDecorator('inline', function (fn, props, container, options) { + var ret = fn; + if (!props.partials) { + props.partials = {}; + ret = function (context, options) { + // Create a new partials stack frame prior to exec. + var original = container.partials; + container.partials = utils$2.extend({}, original, props.partials); + var ret = fn(context, options); + container.partials = original; + return ret; + }; + } + + props.partials[options.args[0]] = options.fn; + + return ret; + }); +}; + +module.exports = exports['default']; + +}); + +var decorators = createCommonjsModule(function (module, exports) { + +exports.__esModule = true; +exports.registerDefaultDecorators = registerDefaultDecorators; +// istanbul ignore next + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + + +var _decoratorsInline2 = _interopRequireDefault(inline); + +function registerDefaultDecorators(instance) { + _decoratorsInline2['default'](instance); +} + +}); + +var logger_1 = createCommonjsModule(function (module, exports) { + +exports.__esModule = true; + + + +var logger = { + methodMap: ['debug', 'info', 'warn', 'error'], + level: 'info', + + // Maps a given level value to the `methodMap` indexes above. + lookupLevel: function lookupLevel(level) { + if (typeof level === 'string') { + var levelMap = utils$2.indexOf(logger.methodMap, level.toLowerCase()); + if (levelMap >= 0) { + level = levelMap; + } else { + level = parseInt(level, 10); + } + } + + return level; + }, + + // Can be overridden in the host environment + log: function log(level) { + level = logger.lookupLevel(level); + + if (typeof console !== 'undefined' && logger.lookupLevel(logger.level) <= level) { + var method = logger.methodMap[level]; + // eslint-disable-next-line no-console + if (!console[method]) { + method = 'log'; + } + + for (var _len = arguments.length, message = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + message[_key - 1] = arguments[_key]; + } + + console[method].apply(console, message); // eslint-disable-line no-console + } + } +}; + +exports['default'] = logger; +module.exports = exports['default']; + +}); + +var createNewLookupObject_1 = createCommonjsModule(function (module, exports) { + +exports.__esModule = true; +exports.createNewLookupObject = createNewLookupObject; + + + +/** + * Create a new object with "null"-prototype to avoid truthy results on prototype properties. + * The resulting object can be used with "object[property]" to check if a property exists + * @param {...object} sources a varargs parameter of source objects that will be merged + * @returns {object} + */ + +function createNewLookupObject() { + for (var _len = arguments.length, sources = Array(_len), _key = 0; _key < _len; _key++) { + sources[_key] = arguments[_key]; + } + + return utils$2.extend.apply(undefined, [Object.create(null)].concat(sources)); +} + +}); + +var protoAccess = createCommonjsModule(function (module, exports) { + +exports.__esModule = true; +exports.createProtoAccessControl = createProtoAccessControl; +exports.resultIsAllowed = resultIsAllowed; +exports.resetLoggedProperties = resetLoggedProperties; +// istanbul ignore next + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } } + + + + + +var logger = _interopRequireWildcard(logger_1); + +var loggedProperties = Object.create(null); + +function createProtoAccessControl(runtimeOptions) { + var defaultMethodWhiteList = Object.create(null); + defaultMethodWhiteList['constructor'] = false; + defaultMethodWhiteList['__defineGetter__'] = false; + defaultMethodWhiteList['__defineSetter__'] = false; + defaultMethodWhiteList['__lookupGetter__'] = false; + + var defaultPropertyWhiteList = Object.create(null); + // eslint-disable-next-line no-proto + defaultPropertyWhiteList['__proto__'] = false; + + return { + properties: { + whitelist: createNewLookupObject_1.createNewLookupObject(defaultPropertyWhiteList, runtimeOptions.allowedProtoProperties), + defaultValue: runtimeOptions.allowProtoPropertiesByDefault + }, + methods: { + whitelist: createNewLookupObject_1.createNewLookupObject(defaultMethodWhiteList, runtimeOptions.allowedProtoMethods), + defaultValue: runtimeOptions.allowProtoMethodsByDefault + } + }; +} + +function resultIsAllowed(result, protoAccessControl, propertyName) { + if (typeof result === 'function') { + return checkWhiteList(protoAccessControl.methods, propertyName); + } else { + return checkWhiteList(protoAccessControl.properties, propertyName); + } +} + +function checkWhiteList(protoAccessControlForType, propertyName) { + if (protoAccessControlForType.whitelist[propertyName] !== undefined) { + return protoAccessControlForType.whitelist[propertyName] === true; + } + if (protoAccessControlForType.defaultValue !== undefined) { + return protoAccessControlForType.defaultValue; + } + logUnexpecedPropertyAccessOnce(propertyName); + return false; +} + +function logUnexpecedPropertyAccessOnce(propertyName) { + if (loggedProperties[propertyName] !== true) { + loggedProperties[propertyName] = true; + logger.log('error', 'Handlebars: Access has been denied to resolve the property "' + propertyName + '" because it is not an "own property" of its parent.\n' + 'You can add a runtime option to disable the check or this warning:\n' + 'See https://handlebarsjs.com/api-reference/runtime-options.html#options-to-control-prototype-access for details'); + } +} + +function resetLoggedProperties() { + Object.keys(loggedProperties).forEach(function (propertyName) { + delete loggedProperties[propertyName]; + }); +} + +}); + +var base = createCommonjsModule(function (module, exports) { + +exports.__esModule = true; +exports.HandlebarsEnvironment = HandlebarsEnvironment; +// istanbul ignore next + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + + + + +var _exception2 = _interopRequireDefault(exception); + + + + + + + +var _logger2 = _interopRequireDefault(logger_1); + + + +var VERSION = '4.7.6'; +exports.VERSION = VERSION; +var COMPILER_REVISION = 8; +exports.COMPILER_REVISION = COMPILER_REVISION; +var LAST_COMPATIBLE_COMPILER_REVISION = 7; + +exports.LAST_COMPATIBLE_COMPILER_REVISION = LAST_COMPATIBLE_COMPILER_REVISION; +var REVISION_CHANGES = { + 1: '<= 1.0.rc.2', // 1.0.rc.2 is actually rev2 but doesn't report it + 2: '== 1.0.0-rc.3', + 3: '== 1.0.0-rc.4', + 4: '== 1.x.x', + 5: '== 2.0.0-alpha.x', + 6: '>= 2.0.0-beta.1', + 7: '>= 4.0.0 <4.3.0', + 8: '>= 4.3.0' +}; + +exports.REVISION_CHANGES = REVISION_CHANGES; +var objectType = '[object Object]'; + +function HandlebarsEnvironment(helpers$1, partials, decorators$1) { + this.helpers = helpers$1 || {}; + this.partials = partials || {}; + this.decorators = decorators$1 || {}; + + helpers.registerDefaultHelpers(this); + decorators.registerDefaultDecorators(this); +} + +HandlebarsEnvironment.prototype = { + constructor: HandlebarsEnvironment, + + logger: _logger2['default'], + log: _logger2['default'].log, + + registerHelper: function registerHelper(name, fn) { + if (utils$2.toString.call(name) === objectType) { + if (fn) { + throw new _exception2['default']('Arg not supported with multiple helpers'); + } + utils$2.extend(this.helpers, name); + } else { + this.helpers[name] = fn; + } + }, + unregisterHelper: function unregisterHelper(name) { + delete this.helpers[name]; + }, + + registerPartial: function registerPartial(name, partial) { + if (utils$2.toString.call(name) === objectType) { + utils$2.extend(this.partials, name); + } else { + if (typeof partial === 'undefined') { + throw new _exception2['default']('Attempting to register a partial called "' + name + '" as undefined'); + } + this.partials[name] = partial; + } + }, + unregisterPartial: function unregisterPartial(name) { + delete this.partials[name]; + }, + + registerDecorator: function registerDecorator(name, fn) { + if (utils$2.toString.call(name) === objectType) { + if (fn) { + throw new _exception2['default']('Arg not supported with multiple decorators'); + } + utils$2.extend(this.decorators, name); + } else { + this.decorators[name] = fn; + } + }, + unregisterDecorator: function unregisterDecorator(name) { + delete this.decorators[name]; + }, + /** + * Reset the memory of illegal property accesses that have already been logged. + * @deprecated should only be used in handlebars test-cases + */ + resetLoggedPropertyAccesses: function resetLoggedPropertyAccesses() { + protoAccess.resetLoggedProperties(); + } +}; + +var log = _logger2['default'].log; + +exports.log = log; +exports.createFrame = utils$2.createFrame; +exports.logger = _logger2['default']; + +}); + +var safeString = createCommonjsModule(function (module, exports) { + +exports.__esModule = true; +function SafeString(string) { + this.string = string; +} + +SafeString.prototype.toString = SafeString.prototype.toHTML = function () { + return '' + this.string; +}; + +exports['default'] = SafeString; +module.exports = exports['default']; + +}); + +var wrapHelper_1 = createCommonjsModule(function (module, exports) { + +exports.__esModule = true; +exports.wrapHelper = wrapHelper; + +function wrapHelper(helper, transformOptionsFn) { + if (typeof helper !== 'function') { + // This should not happen, but apparently it does in https://github.com/wycats/handlebars.js/issues/1639 + // We try to make the wrapper least-invasive by not wrapping it, if the helper is not a function. + return helper; + } + var wrapper = function wrapper() /* dynamic arguments */{ + var options = arguments[arguments.length - 1]; + arguments[arguments.length - 1] = transformOptionsFn(options); + return helper.apply(this, arguments); + }; + return wrapper; +} + +}); + +var runtime = createCommonjsModule(function (module, exports) { + +exports.__esModule = true; +exports.checkRevision = checkRevision; +exports.template = template; +exports.wrapProgram = wrapProgram; +exports.resolvePartial = resolvePartial; +exports.invokePartial = invokePartial; +exports.noop = noop; +// istanbul ignore next + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + +// istanbul ignore next + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } } + + + +var Utils = _interopRequireWildcard(utils$2); + + + +var _exception2 = _interopRequireDefault(exception); + + + + + + + + + +function checkRevision(compilerInfo) { + var compilerRevision = compilerInfo && compilerInfo[0] || 1, + currentRevision = base.COMPILER_REVISION; + + if (compilerRevision >= base.LAST_COMPATIBLE_COMPILER_REVISION && compilerRevision <= base.COMPILER_REVISION) { + return; + } + + if (compilerRevision < base.LAST_COMPATIBLE_COMPILER_REVISION) { + var runtimeVersions = base.REVISION_CHANGES[currentRevision], + compilerVersions = base.REVISION_CHANGES[compilerRevision]; + throw new _exception2['default']('Template was precompiled with an older version of Handlebars than the current runtime. ' + 'Please update your precompiler to a newer version (' + runtimeVersions + ') or downgrade your runtime to an older version (' + compilerVersions + ').'); + } else { + // Use the embedded version info since the runtime doesn't know about this revision yet + throw new _exception2['default']('Template was precompiled with a newer version of Handlebars than the current runtime. ' + 'Please update your runtime to a newer version (' + compilerInfo[1] + ').'); + } +} + +function template(templateSpec, env) { + /* istanbul ignore next */ + if (!env) { + throw new _exception2['default']('No environment passed to template'); + } + if (!templateSpec || !templateSpec.main) { + throw new _exception2['default']('Unknown template object: ' + typeof templateSpec); + } + + templateSpec.main.decorator = templateSpec.main_d; + + // Note: Using env.VM references rather than local var references throughout this section to allow + // for external users to override these as pseudo-supported APIs. + env.VM.checkRevision(templateSpec.compiler); + + // backwards compatibility for precompiled templates with compiler-version 7 (<4.3.0) + var templateWasPrecompiledWithCompilerV7 = templateSpec.compiler && templateSpec.compiler[0] === 7; + + function invokePartialWrapper(partial, context, options) { + if (options.hash) { + context = Utils.extend({}, context, options.hash); + if (options.ids) { + options.ids[0] = true; + } + } + partial = env.VM.resolvePartial.call(this, partial, context, options); + + var extendedOptions = Utils.extend({}, options, { + hooks: this.hooks, + protoAccessControl: this.protoAccessControl + }); + + var result = env.VM.invokePartial.call(this, partial, context, extendedOptions); + + if (result == null && env.compile) { + options.partials[options.name] = env.compile(partial, templateSpec.compilerOptions, env); + result = options.partials[options.name](context, extendedOptions); + } + if (result != null) { + if (options.indent) { + var lines = result.split('\n'); + for (var i = 0, l = lines.length; i < l; i++) { + if (!lines[i] && i + 1 === l) { + break; + } + + lines[i] = options.indent + lines[i]; + } + result = lines.join('\n'); + } + return result; + } else { + throw new _exception2['default']('The partial ' + options.name + ' could not be compiled when running in runtime-only mode'); + } + } + + // Just add water + var container = { + strict: function strict(obj, name, loc) { + if (!obj || !(name in obj)) { + throw new _exception2['default']('"' + name + '" not defined in ' + obj, { + loc: loc + }); + } + return obj[name]; + }, + lookupProperty: function lookupProperty(parent, propertyName) { + var result = parent[propertyName]; + if (result == null) { + return result; + } + if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { + return result; + } + + if (protoAccess.resultIsAllowed(result, container.protoAccessControl, propertyName)) { + return result; + } + return undefined; + }, + lookup: function lookup(depths, name) { + var len = depths.length; + for (var i = 0; i < len; i++) { + var result = depths[i] && container.lookupProperty(depths[i], name); + if (result != null) { + return depths[i][name]; + } + } + }, + lambda: function lambda(current, context) { + return typeof current === 'function' ? current.call(context) : current; + }, + + escapeExpression: Utils.escapeExpression, + invokePartial: invokePartialWrapper, + + fn: function fn(i) { + var ret = templateSpec[i]; + ret.decorator = templateSpec[i + '_d']; + return ret; + }, + + programs: [], + program: function program(i, data, declaredBlockParams, blockParams, depths) { + var programWrapper = this.programs[i], + fn = this.fn(i); + if (data || depths || blockParams || declaredBlockParams) { + programWrapper = wrapProgram(this, i, fn, data, declaredBlockParams, blockParams, depths); + } else if (!programWrapper) { + programWrapper = this.programs[i] = wrapProgram(this, i, fn); + } + return programWrapper; + }, + + data: function data(value, depth) { + while (value && depth--) { + value = value._parent; + } + return value; + }, + mergeIfNeeded: function mergeIfNeeded(param, common) { + var obj = param || common; + + if (param && common && param !== common) { + obj = Utils.extend({}, common, param); + } + + return obj; + }, + // An empty object to use as replacement for null-contexts + nullContext: Object.seal({}), + + noop: env.VM.noop, + compilerInfo: templateSpec.compiler + }; + + function ret(context) { + var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; + + var data = options.data; + + ret._setup(options); + if (!options.partial && templateSpec.useData) { + data = initData(context, data); + } + var depths = undefined, + blockParams = templateSpec.useBlockParams ? [] : undefined; + if (templateSpec.useDepths) { + if (options.depths) { + depths = context != options.depths[0] ? [context].concat(options.depths) : options.depths; + } else { + depths = [context]; + } + } + + function main(context /*, options*/) { + return '' + templateSpec.main(container, context, container.helpers, container.partials, data, blockParams, depths); + } + + main = executeDecorators(templateSpec.main, main, container, options.depths || [], data, blockParams); + return main(context, options); + } + + ret.isTop = true; + + ret._setup = function (options) { + if (!options.partial) { + var mergedHelpers = Utils.extend({}, env.helpers, options.helpers); + wrapHelpersToPassLookupProperty(mergedHelpers, container); + container.helpers = mergedHelpers; + + if (templateSpec.usePartial) { + // Use mergeIfNeeded here to prevent compiling global partials multiple times + container.partials = container.mergeIfNeeded(options.partials, env.partials); + } + if (templateSpec.usePartial || templateSpec.useDecorators) { + container.decorators = Utils.extend({}, env.decorators, options.decorators); + } + + container.hooks = {}; + container.protoAccessControl = protoAccess.createProtoAccessControl(options); + + var keepHelperInHelpers = options.allowCallsToHelperMissing || templateWasPrecompiledWithCompilerV7; + helpers.moveHelperToHooks(container, 'helperMissing', keepHelperInHelpers); + helpers.moveHelperToHooks(container, 'blockHelperMissing', keepHelperInHelpers); + } else { + container.protoAccessControl = options.protoAccessControl; // internal option + container.helpers = options.helpers; + container.partials = options.partials; + container.decorators = options.decorators; + container.hooks = options.hooks; + } + }; + + ret._child = function (i, data, blockParams, depths) { + if (templateSpec.useBlockParams && !blockParams) { + throw new _exception2['default']('must pass block params'); + } + if (templateSpec.useDepths && !depths) { + throw new _exception2['default']('must pass parent depths'); + } + + return wrapProgram(container, i, templateSpec[i], data, 0, blockParams, depths); + }; + return ret; +} + +function wrapProgram(container, i, fn, data, declaredBlockParams, blockParams, depths) { + function prog(context) { + var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; + + var currentDepths = depths; + if (depths && context != depths[0] && !(context === container.nullContext && depths[0] === null)) { + currentDepths = [context].concat(depths); + } + + return fn(container, context, container.helpers, container.partials, options.data || data, blockParams && [options.blockParams].concat(blockParams), currentDepths); + } + + prog = executeDecorators(fn, prog, container, depths, data, blockParams); + + prog.program = i; + prog.depth = depths ? depths.length : 0; + prog.blockParams = declaredBlockParams || 0; + return prog; +} + +/** + * This is currently part of the official API, therefore implementation details should not be changed. + */ + +function resolvePartial(partial, context, options) { + if (!partial) { + if (options.name === '@partial-block') { + partial = options.data['partial-block']; + } else { + partial = options.partials[options.name]; + } + } else if (!partial.call && !options.name) { + // This is a dynamic partial that returned a string + options.name = partial; + partial = options.partials[partial]; + } + return partial; +} + +function invokePartial(partial, context, options) { + // Use the current closure context to save the partial-block if this partial + var currentPartialBlock = options.data && options.data['partial-block']; + options.partial = true; + if (options.ids) { + options.data.contextPath = options.ids[0] || options.data.contextPath; + } + + var partialBlock = undefined; + if (options.fn && options.fn !== noop) { + (function () { + options.data = base.createFrame(options.data); + // Wrapper function to get access to currentPartialBlock from the closure + var fn = options.fn; + partialBlock = options.data['partial-block'] = function partialBlockWrapper(context) { + var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; + + // Restore the partial-block from the closure for the execution of the block + // i.e. the part inside the block of the partial call. + options.data = base.createFrame(options.data); + options.data['partial-block'] = currentPartialBlock; + return fn(context, options); + }; + if (fn.partials) { + options.partials = Utils.extend({}, options.partials, fn.partials); + } + })(); + } + + if (partial === undefined && partialBlock) { + partial = partialBlock; + } + + if (partial === undefined) { + throw new _exception2['default']('The partial ' + options.name + ' could not be found'); + } else if (partial instanceof Function) { + return partial(context, options); + } +} + +function noop() { + return ''; +} + +function initData(context, data) { + if (!data || !('root' in data)) { + data = data ? base.createFrame(data) : {}; + data.root = context; + } + return data; +} + +function executeDecorators(fn, prog, container, depths, data, blockParams) { + if (fn.decorator) { + var props = {}; + prog = fn.decorator(prog, props, container, depths && depths[0], data, blockParams, depths); + Utils.extend(prog, props); + } + return prog; +} + +function wrapHelpersToPassLookupProperty(mergedHelpers, container) { + Object.keys(mergedHelpers).forEach(function (helperName) { + var helper = mergedHelpers[helperName]; + mergedHelpers[helperName] = passLookupPropertyOption(helper, container); + }); +} + +function passLookupPropertyOption(helper, container) { + var lookupProperty = container.lookupProperty; + return wrapHelper_1.wrapHelper(helper, function (options) { + return Utils.extend({ lookupProperty: lookupProperty }, options); + }); +} + +}); + +var noConflict = createCommonjsModule(function (module, exports) { + +exports.__esModule = true; + +exports['default'] = function (Handlebars) { + /* istanbul ignore next */ + var root = typeof commonjsGlobal !== 'undefined' ? commonjsGlobal : window, + $Handlebars = root.Handlebars; + /* istanbul ignore next */ + Handlebars.noConflict = function () { + if (root.Handlebars === Handlebars) { + root.Handlebars = $Handlebars; + } + return Handlebars; + }; +}; + +module.exports = exports['default']; + +}); + +var handlebars_runtime = createCommonjsModule(function (module, exports) { + +exports.__esModule = true; +// istanbul ignore next + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + +// istanbul ignore next + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } } + + + +var base$1 = _interopRequireWildcard(base); + +// Each of these augment the Handlebars object. No need to setup here. +// (This is done to easily share code between commonjs and browse envs) + + + +var _handlebarsSafeString2 = _interopRequireDefault(safeString); + + + +var _handlebarsException2 = _interopRequireDefault(exception); + + + +var Utils = _interopRequireWildcard(utils$2); + + + +var runtime$1 = _interopRequireWildcard(runtime); + + + +var _handlebarsNoConflict2 = _interopRequireDefault(noConflict); + +// For compatibility and usage outside of module systems, make the Handlebars object a namespace +function create() { + var hb = new base$1.HandlebarsEnvironment(); + + Utils.extend(hb, base$1); + hb.SafeString = _handlebarsSafeString2['default']; + hb.Exception = _handlebarsException2['default']; + hb.Utils = Utils; + hb.escapeExpression = Utils.escapeExpression; + + hb.VM = runtime$1; + hb.template = function (spec) { + return runtime$1.template(spec, hb); + }; + + return hb; +} + +var inst = create(); +inst.create = create; + +_handlebarsNoConflict2['default'](inst); + +inst['default'] = inst; + +exports['default'] = inst; +module.exports = exports['default']; + +}); + +var ast = createCommonjsModule(function (module, exports) { + +exports.__esModule = true; +var AST = { + // Public API used to evaluate derived attributes regarding AST nodes + helpers: { + // a mustache is definitely a helper if: + // * it is an eligible helper, and + // * it has at least one parameter or hash segment + helperExpression: function helperExpression(node) { + return node.type === 'SubExpression' || (node.type === 'MustacheStatement' || node.type === 'BlockStatement') && !!(node.params && node.params.length || node.hash); + }, + + scopedId: function scopedId(path) { + return (/^\.|this\b/.test(path.original) + ); + }, + + // an ID is simple if it only has one part, and that part is not + // `..` or `this`. + simpleId: function simpleId(path) { + return path.parts.length === 1 && !AST.helpers.scopedId(path) && !path.depth; + } + } +}; + +// Must be exported as an object rather than the root of the module as the jison lexer +// must modify the object to operate properly. +exports['default'] = AST; +module.exports = exports['default']; + +}); + +var parser = createCommonjsModule(function (module, exports) { + +exports.__esModule = true; +var handlebars = (function () { + var parser = { trace: function trace() {}, + yy: {}, + symbols_: { "error": 2, "root": 3, "program": 4, "EOF": 5, "program_repetition0": 6, "statement": 7, "mustache": 8, "block": 9, "rawBlock": 10, "partial": 11, "partialBlock": 12, "content": 13, "COMMENT": 14, "CONTENT": 15, "openRawBlock": 16, "rawBlock_repetition0": 17, "END_RAW_BLOCK": 18, "OPEN_RAW_BLOCK": 19, "helperName": 20, "openRawBlock_repetition0": 21, "openRawBlock_option0": 22, "CLOSE_RAW_BLOCK": 23, "openBlock": 24, "block_option0": 25, "closeBlock": 26, "openInverse": 27, "block_option1": 28, "OPEN_BLOCK": 29, "openBlock_repetition0": 30, "openBlock_option0": 31, "openBlock_option1": 32, "CLOSE": 33, "OPEN_INVERSE": 34, "openInverse_repetition0": 35, "openInverse_option0": 36, "openInverse_option1": 37, "openInverseChain": 38, "OPEN_INVERSE_CHAIN": 39, "openInverseChain_repetition0": 40, "openInverseChain_option0": 41, "openInverseChain_option1": 42, "inverseAndProgram": 43, "INVERSE": 44, "inverseChain": 45, "inverseChain_option0": 46, "OPEN_ENDBLOCK": 47, "OPEN": 48, "mustache_repetition0": 49, "mustache_option0": 50, "OPEN_UNESCAPED": 51, "mustache_repetition1": 52, "mustache_option1": 53, "CLOSE_UNESCAPED": 54, "OPEN_PARTIAL": 55, "partialName": 56, "partial_repetition0": 57, "partial_option0": 58, "openPartialBlock": 59, "OPEN_PARTIAL_BLOCK": 60, "openPartialBlock_repetition0": 61, "openPartialBlock_option0": 62, "param": 63, "sexpr": 64, "OPEN_SEXPR": 65, "sexpr_repetition0": 66, "sexpr_option0": 67, "CLOSE_SEXPR": 68, "hash": 69, "hash_repetition_plus0": 70, "hashSegment": 71, "ID": 72, "EQUALS": 73, "blockParams": 74, "OPEN_BLOCK_PARAMS": 75, "blockParams_repetition_plus0": 76, "CLOSE_BLOCK_PARAMS": 77, "path": 78, "dataName": 79, "STRING": 80, "NUMBER": 81, "BOOLEAN": 82, "UNDEFINED": 83, "NULL": 84, "DATA": 85, "pathSegments": 86, "SEP": 87, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 5: "EOF", 14: "COMMENT", 15: "CONTENT", 18: "END_RAW_BLOCK", 19: "OPEN_RAW_BLOCK", 23: "CLOSE_RAW_BLOCK", 29: "OPEN_BLOCK", 33: "CLOSE", 34: "OPEN_INVERSE", 39: "OPEN_INVERSE_CHAIN", 44: "INVERSE", 47: "OPEN_ENDBLOCK", 48: "OPEN", 51: "OPEN_UNESCAPED", 54: "CLOSE_UNESCAPED", 55: "OPEN_PARTIAL", 60: "OPEN_PARTIAL_BLOCK", 65: "OPEN_SEXPR", 68: "CLOSE_SEXPR", 72: "ID", 73: "EQUALS", 75: "OPEN_BLOCK_PARAMS", 77: "CLOSE_BLOCK_PARAMS", 80: "STRING", 81: "NUMBER", 82: "BOOLEAN", 83: "UNDEFINED", 84: "NULL", 85: "DATA", 87: "SEP" }, + productions_: [0, [3, 2], [4, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [13, 1], [10, 3], [16, 5], [9, 4], [9, 4], [24, 6], [27, 6], [38, 6], [43, 2], [45, 3], [45, 1], [26, 3], [8, 5], [8, 5], [11, 5], [12, 3], [59, 5], [63, 1], [63, 1], [64, 5], [69, 1], [71, 3], [74, 3], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [56, 1], [56, 1], [79, 2], [78, 1], [86, 3], [86, 1], [6, 0], [6, 2], [17, 0], [17, 2], [21, 0], [21, 2], [22, 0], [22, 1], [25, 0], [25, 1], [28, 0], [28, 1], [30, 0], [30, 2], [31, 0], [31, 1], [32, 0], [32, 1], [35, 0], [35, 2], [36, 0], [36, 1], [37, 0], [37, 1], [40, 0], [40, 2], [41, 0], [41, 1], [42, 0], [42, 1], [46, 0], [46, 1], [49, 0], [49, 2], [50, 0], [50, 1], [52, 0], [52, 2], [53, 0], [53, 1], [57, 0], [57, 2], [58, 0], [58, 1], [61, 0], [61, 2], [62, 0], [62, 1], [66, 0], [66, 2], [67, 0], [67, 1], [70, 1], [70, 2], [76, 1], [76, 2]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + + var $0 = $$.length - 1; + switch (yystate) { + case 1: + return $$[$0 - 1]; + case 2: + this.$ = yy.prepareProgram($$[$0]); + break; + case 3: + this.$ = $$[$0]; + break; + case 4: + this.$ = $$[$0]; + break; + case 5: + this.$ = $$[$0]; + break; + case 6: + this.$ = $$[$0]; + break; + case 7: + this.$ = $$[$0]; + break; + case 8: + this.$ = $$[$0]; + break; + case 9: + this.$ = { + type: 'CommentStatement', + value: yy.stripComment($$[$0]), + strip: yy.stripFlags($$[$0], $$[$0]), + loc: yy.locInfo(this._$) + }; + + break; + case 10: + this.$ = { + type: 'ContentStatement', + original: $$[$0], + value: $$[$0], + loc: yy.locInfo(this._$) + }; + + break; + case 11: + this.$ = yy.prepareRawBlock($$[$0 - 2], $$[$0 - 1], $$[$0], this._$); + break; + case 12: + this.$ = { path: $$[$0 - 3], params: $$[$0 - 2], hash: $$[$0 - 1] }; + break; + case 13: + this.$ = yy.prepareBlock($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0], false, this._$); + break; + case 14: + this.$ = yy.prepareBlock($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0], true, this._$); + break; + case 15: + this.$ = { open: $$[$0 - 5], path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) }; + break; + case 16: + this.$ = { path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) }; + break; + case 17: + this.$ = { path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) }; + break; + case 18: + this.$ = { strip: yy.stripFlags($$[$0 - 1], $$[$0 - 1]), program: $$[$0] }; + break; + case 19: + var inverse = yy.prepareBlock($$[$0 - 2], $$[$0 - 1], $$[$0], $$[$0], false, this._$), + program = yy.prepareProgram([inverse], $$[$0 - 1].loc); + program.chained = true; + + this.$ = { strip: $$[$0 - 2].strip, program: program, chain: true }; + + break; + case 20: + this.$ = $$[$0]; + break; + case 21: + this.$ = { path: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 2], $$[$0]) }; + break; + case 22: + this.$ = yy.prepareMustache($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0 - 4], yy.stripFlags($$[$0 - 4], $$[$0]), this._$); + break; + case 23: + this.$ = yy.prepareMustache($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0 - 4], yy.stripFlags($$[$0 - 4], $$[$0]), this._$); + break; + case 24: + this.$ = { + type: 'PartialStatement', + name: $$[$0 - 3], + params: $$[$0 - 2], + hash: $$[$0 - 1], + indent: '', + strip: yy.stripFlags($$[$0 - 4], $$[$0]), + loc: yy.locInfo(this._$) + }; + + break; + case 25: + this.$ = yy.preparePartialBlock($$[$0 - 2], $$[$0 - 1], $$[$0], this._$); + break; + case 26: + this.$ = { path: $$[$0 - 3], params: $$[$0 - 2], hash: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 4], $$[$0]) }; + break; + case 27: + this.$ = $$[$0]; + break; + case 28: + this.$ = $$[$0]; + break; + case 29: + this.$ = { + type: 'SubExpression', + path: $$[$0 - 3], + params: $$[$0 - 2], + hash: $$[$0 - 1], + loc: yy.locInfo(this._$) + }; + + break; + case 30: + this.$ = { type: 'Hash', pairs: $$[$0], loc: yy.locInfo(this._$) }; + break; + case 31: + this.$ = { type: 'HashPair', key: yy.id($$[$0 - 2]), value: $$[$0], loc: yy.locInfo(this._$) }; + break; + case 32: + this.$ = yy.id($$[$0 - 1]); + break; + case 33: + this.$ = $$[$0]; + break; + case 34: + this.$ = $$[$0]; + break; + case 35: + this.$ = { type: 'StringLiteral', value: $$[$0], original: $$[$0], loc: yy.locInfo(this._$) }; + break; + case 36: + this.$ = { type: 'NumberLiteral', value: Number($$[$0]), original: Number($$[$0]), loc: yy.locInfo(this._$) }; + break; + case 37: + this.$ = { type: 'BooleanLiteral', value: $$[$0] === 'true', original: $$[$0] === 'true', loc: yy.locInfo(this._$) }; + break; + case 38: + this.$ = { type: 'UndefinedLiteral', original: undefined, value: undefined, loc: yy.locInfo(this._$) }; + break; + case 39: + this.$ = { type: 'NullLiteral', original: null, value: null, loc: yy.locInfo(this._$) }; + break; + case 40: + this.$ = $$[$0]; + break; + case 41: + this.$ = $$[$0]; + break; + case 42: + this.$ = yy.preparePath(true, $$[$0], this._$); + break; + case 43: + this.$ = yy.preparePath(false, $$[$0], this._$); + break; + case 44: + $$[$0 - 2].push({ part: yy.id($$[$0]), original: $$[$0], separator: $$[$0 - 1] });this.$ = $$[$0 - 2]; + break; + case 45: + this.$ = [{ part: yy.id($$[$0]), original: $$[$0] }]; + break; + case 46: + this.$ = []; + break; + case 47: + $$[$0 - 1].push($$[$0]); + break; + case 48: + this.$ = []; + break; + case 49: + $$[$0 - 1].push($$[$0]); + break; + case 50: + this.$ = []; + break; + case 51: + $$[$0 - 1].push($$[$0]); + break; + case 58: + this.$ = []; + break; + case 59: + $$[$0 - 1].push($$[$0]); + break; + case 64: + this.$ = []; + break; + case 65: + $$[$0 - 1].push($$[$0]); + break; + case 70: + this.$ = []; + break; + case 71: + $$[$0 - 1].push($$[$0]); + break; + case 78: + this.$ = []; + break; + case 79: + $$[$0 - 1].push($$[$0]); + break; + case 82: + this.$ = []; + break; + case 83: + $$[$0 - 1].push($$[$0]); + break; + case 86: + this.$ = []; + break; + case 87: + $$[$0 - 1].push($$[$0]); + break; + case 90: + this.$ = []; + break; + case 91: + $$[$0 - 1].push($$[$0]); + break; + case 94: + this.$ = []; + break; + case 95: + $$[$0 - 1].push($$[$0]); + break; + case 98: + this.$ = [$$[$0]]; + break; + case 99: + $$[$0 - 1].push($$[$0]); + break; + case 100: + this.$ = [$$[$0]]; + break; + case 101: + $$[$0 - 1].push($$[$0]); + break; + } + }, + table: [{ 3: 1, 4: 2, 5: [2, 46], 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 1: [3] }, { 5: [1, 4] }, { 5: [2, 2], 7: 5, 8: 6, 9: 7, 10: 8, 11: 9, 12: 10, 13: 11, 14: [1, 12], 15: [1, 20], 16: 17, 19: [1, 23], 24: 15, 27: 16, 29: [1, 21], 34: [1, 22], 39: [2, 2], 44: [2, 2], 47: [2, 2], 48: [1, 13], 51: [1, 14], 55: [1, 18], 59: 19, 60: [1, 24] }, { 1: [2, 1] }, { 5: [2, 47], 14: [2, 47], 15: [2, 47], 19: [2, 47], 29: [2, 47], 34: [2, 47], 39: [2, 47], 44: [2, 47], 47: [2, 47], 48: [2, 47], 51: [2, 47], 55: [2, 47], 60: [2, 47] }, { 5: [2, 3], 14: [2, 3], 15: [2, 3], 19: [2, 3], 29: [2, 3], 34: [2, 3], 39: [2, 3], 44: [2, 3], 47: [2, 3], 48: [2, 3], 51: [2, 3], 55: [2, 3], 60: [2, 3] }, { 5: [2, 4], 14: [2, 4], 15: [2, 4], 19: [2, 4], 29: [2, 4], 34: [2, 4], 39: [2, 4], 44: [2, 4], 47: [2, 4], 48: [2, 4], 51: [2, 4], 55: [2, 4], 60: [2, 4] }, { 5: [2, 5], 14: [2, 5], 15: [2, 5], 19: [2, 5], 29: [2, 5], 34: [2, 5], 39: [2, 5], 44: [2, 5], 47: [2, 5], 48: [2, 5], 51: [2, 5], 55: [2, 5], 60: [2, 5] }, { 5: [2, 6], 14: [2, 6], 15: [2, 6], 19: [2, 6], 29: [2, 6], 34: [2, 6], 39: [2, 6], 44: [2, 6], 47: [2, 6], 48: [2, 6], 51: [2, 6], 55: [2, 6], 60: [2, 6] }, { 5: [2, 7], 14: [2, 7], 15: [2, 7], 19: [2, 7], 29: [2, 7], 34: [2, 7], 39: [2, 7], 44: [2, 7], 47: [2, 7], 48: [2, 7], 51: [2, 7], 55: [2, 7], 60: [2, 7] }, { 5: [2, 8], 14: [2, 8], 15: [2, 8], 19: [2, 8], 29: [2, 8], 34: [2, 8], 39: [2, 8], 44: [2, 8], 47: [2, 8], 48: [2, 8], 51: [2, 8], 55: [2, 8], 60: [2, 8] }, { 5: [2, 9], 14: [2, 9], 15: [2, 9], 19: [2, 9], 29: [2, 9], 34: [2, 9], 39: [2, 9], 44: [2, 9], 47: [2, 9], 48: [2, 9], 51: [2, 9], 55: [2, 9], 60: [2, 9] }, { 20: 25, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 36, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 4: 37, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 39: [2, 46], 44: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 4: 38, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 44: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 15: [2, 48], 17: 39, 18: [2, 48] }, { 20: 41, 56: 40, 64: 42, 65: [1, 43], 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 4: 44, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 5: [2, 10], 14: [2, 10], 15: [2, 10], 18: [2, 10], 19: [2, 10], 29: [2, 10], 34: [2, 10], 39: [2, 10], 44: [2, 10], 47: [2, 10], 48: [2, 10], 51: [2, 10], 55: [2, 10], 60: [2, 10] }, { 20: 45, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 46, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 47, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 41, 56: 48, 64: 42, 65: [1, 43], 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 33: [2, 78], 49: 49, 65: [2, 78], 72: [2, 78], 80: [2, 78], 81: [2, 78], 82: [2, 78], 83: [2, 78], 84: [2, 78], 85: [2, 78] }, { 23: [2, 33], 33: [2, 33], 54: [2, 33], 65: [2, 33], 68: [2, 33], 72: [2, 33], 75: [2, 33], 80: [2, 33], 81: [2, 33], 82: [2, 33], 83: [2, 33], 84: [2, 33], 85: [2, 33] }, { 23: [2, 34], 33: [2, 34], 54: [2, 34], 65: [2, 34], 68: [2, 34], 72: [2, 34], 75: [2, 34], 80: [2, 34], 81: [2, 34], 82: [2, 34], 83: [2, 34], 84: [2, 34], 85: [2, 34] }, { 23: [2, 35], 33: [2, 35], 54: [2, 35], 65: [2, 35], 68: [2, 35], 72: [2, 35], 75: [2, 35], 80: [2, 35], 81: [2, 35], 82: [2, 35], 83: [2, 35], 84: [2, 35], 85: [2, 35] }, { 23: [2, 36], 33: [2, 36], 54: [2, 36], 65: [2, 36], 68: [2, 36], 72: [2, 36], 75: [2, 36], 80: [2, 36], 81: [2, 36], 82: [2, 36], 83: [2, 36], 84: [2, 36], 85: [2, 36] }, { 23: [2, 37], 33: [2, 37], 54: [2, 37], 65: [2, 37], 68: [2, 37], 72: [2, 37], 75: [2, 37], 80: [2, 37], 81: [2, 37], 82: [2, 37], 83: [2, 37], 84: [2, 37], 85: [2, 37] }, { 23: [2, 38], 33: [2, 38], 54: [2, 38], 65: [2, 38], 68: [2, 38], 72: [2, 38], 75: [2, 38], 80: [2, 38], 81: [2, 38], 82: [2, 38], 83: [2, 38], 84: [2, 38], 85: [2, 38] }, { 23: [2, 39], 33: [2, 39], 54: [2, 39], 65: [2, 39], 68: [2, 39], 72: [2, 39], 75: [2, 39], 80: [2, 39], 81: [2, 39], 82: [2, 39], 83: [2, 39], 84: [2, 39], 85: [2, 39] }, { 23: [2, 43], 33: [2, 43], 54: [2, 43], 65: [2, 43], 68: [2, 43], 72: [2, 43], 75: [2, 43], 80: [2, 43], 81: [2, 43], 82: [2, 43], 83: [2, 43], 84: [2, 43], 85: [2, 43], 87: [1, 50] }, { 72: [1, 35], 86: 51 }, { 23: [2, 45], 33: [2, 45], 54: [2, 45], 65: [2, 45], 68: [2, 45], 72: [2, 45], 75: [2, 45], 80: [2, 45], 81: [2, 45], 82: [2, 45], 83: [2, 45], 84: [2, 45], 85: [2, 45], 87: [2, 45] }, { 52: 52, 54: [2, 82], 65: [2, 82], 72: [2, 82], 80: [2, 82], 81: [2, 82], 82: [2, 82], 83: [2, 82], 84: [2, 82], 85: [2, 82] }, { 25: 53, 38: 55, 39: [1, 57], 43: 56, 44: [1, 58], 45: 54, 47: [2, 54] }, { 28: 59, 43: 60, 44: [1, 58], 47: [2, 56] }, { 13: 62, 15: [1, 20], 18: [1, 61] }, { 33: [2, 86], 57: 63, 65: [2, 86], 72: [2, 86], 80: [2, 86], 81: [2, 86], 82: [2, 86], 83: [2, 86], 84: [2, 86], 85: [2, 86] }, { 33: [2, 40], 65: [2, 40], 72: [2, 40], 80: [2, 40], 81: [2, 40], 82: [2, 40], 83: [2, 40], 84: [2, 40], 85: [2, 40] }, { 33: [2, 41], 65: [2, 41], 72: [2, 41], 80: [2, 41], 81: [2, 41], 82: [2, 41], 83: [2, 41], 84: [2, 41], 85: [2, 41] }, { 20: 64, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 26: 65, 47: [1, 66] }, { 30: 67, 33: [2, 58], 65: [2, 58], 72: [2, 58], 75: [2, 58], 80: [2, 58], 81: [2, 58], 82: [2, 58], 83: [2, 58], 84: [2, 58], 85: [2, 58] }, { 33: [2, 64], 35: 68, 65: [2, 64], 72: [2, 64], 75: [2, 64], 80: [2, 64], 81: [2, 64], 82: [2, 64], 83: [2, 64], 84: [2, 64], 85: [2, 64] }, { 21: 69, 23: [2, 50], 65: [2, 50], 72: [2, 50], 80: [2, 50], 81: [2, 50], 82: [2, 50], 83: [2, 50], 84: [2, 50], 85: [2, 50] }, { 33: [2, 90], 61: 70, 65: [2, 90], 72: [2, 90], 80: [2, 90], 81: [2, 90], 82: [2, 90], 83: [2, 90], 84: [2, 90], 85: [2, 90] }, { 20: 74, 33: [2, 80], 50: 71, 63: 72, 64: 75, 65: [1, 43], 69: 73, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 72: [1, 79] }, { 23: [2, 42], 33: [2, 42], 54: [2, 42], 65: [2, 42], 68: [2, 42], 72: [2, 42], 75: [2, 42], 80: [2, 42], 81: [2, 42], 82: [2, 42], 83: [2, 42], 84: [2, 42], 85: [2, 42], 87: [1, 50] }, { 20: 74, 53: 80, 54: [2, 84], 63: 81, 64: 75, 65: [1, 43], 69: 82, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 26: 83, 47: [1, 66] }, { 47: [2, 55] }, { 4: 84, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 39: [2, 46], 44: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 47: [2, 20] }, { 20: 85, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 4: 86, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 26: 87, 47: [1, 66] }, { 47: [2, 57] }, { 5: [2, 11], 14: [2, 11], 15: [2, 11], 19: [2, 11], 29: [2, 11], 34: [2, 11], 39: [2, 11], 44: [2, 11], 47: [2, 11], 48: [2, 11], 51: [2, 11], 55: [2, 11], 60: [2, 11] }, { 15: [2, 49], 18: [2, 49] }, { 20: 74, 33: [2, 88], 58: 88, 63: 89, 64: 75, 65: [1, 43], 69: 90, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 65: [2, 94], 66: 91, 68: [2, 94], 72: [2, 94], 80: [2, 94], 81: [2, 94], 82: [2, 94], 83: [2, 94], 84: [2, 94], 85: [2, 94] }, { 5: [2, 25], 14: [2, 25], 15: [2, 25], 19: [2, 25], 29: [2, 25], 34: [2, 25], 39: [2, 25], 44: [2, 25], 47: [2, 25], 48: [2, 25], 51: [2, 25], 55: [2, 25], 60: [2, 25] }, { 20: 92, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 74, 31: 93, 33: [2, 60], 63: 94, 64: 75, 65: [1, 43], 69: 95, 70: 76, 71: 77, 72: [1, 78], 75: [2, 60], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 74, 33: [2, 66], 36: 96, 63: 97, 64: 75, 65: [1, 43], 69: 98, 70: 76, 71: 77, 72: [1, 78], 75: [2, 66], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 74, 22: 99, 23: [2, 52], 63: 100, 64: 75, 65: [1, 43], 69: 101, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 74, 33: [2, 92], 62: 102, 63: 103, 64: 75, 65: [1, 43], 69: 104, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 33: [1, 105] }, { 33: [2, 79], 65: [2, 79], 72: [2, 79], 80: [2, 79], 81: [2, 79], 82: [2, 79], 83: [2, 79], 84: [2, 79], 85: [2, 79] }, { 33: [2, 81] }, { 23: [2, 27], 33: [2, 27], 54: [2, 27], 65: [2, 27], 68: [2, 27], 72: [2, 27], 75: [2, 27], 80: [2, 27], 81: [2, 27], 82: [2, 27], 83: [2, 27], 84: [2, 27], 85: [2, 27] }, { 23: [2, 28], 33: [2, 28], 54: [2, 28], 65: [2, 28], 68: [2, 28], 72: [2, 28], 75: [2, 28], 80: [2, 28], 81: [2, 28], 82: [2, 28], 83: [2, 28], 84: [2, 28], 85: [2, 28] }, { 23: [2, 30], 33: [2, 30], 54: [2, 30], 68: [2, 30], 71: 106, 72: [1, 107], 75: [2, 30] }, { 23: [2, 98], 33: [2, 98], 54: [2, 98], 68: [2, 98], 72: [2, 98], 75: [2, 98] }, { 23: [2, 45], 33: [2, 45], 54: [2, 45], 65: [2, 45], 68: [2, 45], 72: [2, 45], 73: [1, 108], 75: [2, 45], 80: [2, 45], 81: [2, 45], 82: [2, 45], 83: [2, 45], 84: [2, 45], 85: [2, 45], 87: [2, 45] }, { 23: [2, 44], 33: [2, 44], 54: [2, 44], 65: [2, 44], 68: [2, 44], 72: [2, 44], 75: [2, 44], 80: [2, 44], 81: [2, 44], 82: [2, 44], 83: [2, 44], 84: [2, 44], 85: [2, 44], 87: [2, 44] }, { 54: [1, 109] }, { 54: [2, 83], 65: [2, 83], 72: [2, 83], 80: [2, 83], 81: [2, 83], 82: [2, 83], 83: [2, 83], 84: [2, 83], 85: [2, 83] }, { 54: [2, 85] }, { 5: [2, 13], 14: [2, 13], 15: [2, 13], 19: [2, 13], 29: [2, 13], 34: [2, 13], 39: [2, 13], 44: [2, 13], 47: [2, 13], 48: [2, 13], 51: [2, 13], 55: [2, 13], 60: [2, 13] }, { 38: 55, 39: [1, 57], 43: 56, 44: [1, 58], 45: 111, 46: 110, 47: [2, 76] }, { 33: [2, 70], 40: 112, 65: [2, 70], 72: [2, 70], 75: [2, 70], 80: [2, 70], 81: [2, 70], 82: [2, 70], 83: [2, 70], 84: [2, 70], 85: [2, 70] }, { 47: [2, 18] }, { 5: [2, 14], 14: [2, 14], 15: [2, 14], 19: [2, 14], 29: [2, 14], 34: [2, 14], 39: [2, 14], 44: [2, 14], 47: [2, 14], 48: [2, 14], 51: [2, 14], 55: [2, 14], 60: [2, 14] }, { 33: [1, 113] }, { 33: [2, 87], 65: [2, 87], 72: [2, 87], 80: [2, 87], 81: [2, 87], 82: [2, 87], 83: [2, 87], 84: [2, 87], 85: [2, 87] }, { 33: [2, 89] }, { 20: 74, 63: 115, 64: 75, 65: [1, 43], 67: 114, 68: [2, 96], 69: 116, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 33: [1, 117] }, { 32: 118, 33: [2, 62], 74: 119, 75: [1, 120] }, { 33: [2, 59], 65: [2, 59], 72: [2, 59], 75: [2, 59], 80: [2, 59], 81: [2, 59], 82: [2, 59], 83: [2, 59], 84: [2, 59], 85: [2, 59] }, { 33: [2, 61], 75: [2, 61] }, { 33: [2, 68], 37: 121, 74: 122, 75: [1, 120] }, { 33: [2, 65], 65: [2, 65], 72: [2, 65], 75: [2, 65], 80: [2, 65], 81: [2, 65], 82: [2, 65], 83: [2, 65], 84: [2, 65], 85: [2, 65] }, { 33: [2, 67], 75: [2, 67] }, { 23: [1, 123] }, { 23: [2, 51], 65: [2, 51], 72: [2, 51], 80: [2, 51], 81: [2, 51], 82: [2, 51], 83: [2, 51], 84: [2, 51], 85: [2, 51] }, { 23: [2, 53] }, { 33: [1, 124] }, { 33: [2, 91], 65: [2, 91], 72: [2, 91], 80: [2, 91], 81: [2, 91], 82: [2, 91], 83: [2, 91], 84: [2, 91], 85: [2, 91] }, { 33: [2, 93] }, { 5: [2, 22], 14: [2, 22], 15: [2, 22], 19: [2, 22], 29: [2, 22], 34: [2, 22], 39: [2, 22], 44: [2, 22], 47: [2, 22], 48: [2, 22], 51: [2, 22], 55: [2, 22], 60: [2, 22] }, { 23: [2, 99], 33: [2, 99], 54: [2, 99], 68: [2, 99], 72: [2, 99], 75: [2, 99] }, { 73: [1, 108] }, { 20: 74, 63: 125, 64: 75, 65: [1, 43], 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 5: [2, 23], 14: [2, 23], 15: [2, 23], 19: [2, 23], 29: [2, 23], 34: [2, 23], 39: [2, 23], 44: [2, 23], 47: [2, 23], 48: [2, 23], 51: [2, 23], 55: [2, 23], 60: [2, 23] }, { 47: [2, 19] }, { 47: [2, 77] }, { 20: 74, 33: [2, 72], 41: 126, 63: 127, 64: 75, 65: [1, 43], 69: 128, 70: 76, 71: 77, 72: [1, 78], 75: [2, 72], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 5: [2, 24], 14: [2, 24], 15: [2, 24], 19: [2, 24], 29: [2, 24], 34: [2, 24], 39: [2, 24], 44: [2, 24], 47: [2, 24], 48: [2, 24], 51: [2, 24], 55: [2, 24], 60: [2, 24] }, { 68: [1, 129] }, { 65: [2, 95], 68: [2, 95], 72: [2, 95], 80: [2, 95], 81: [2, 95], 82: [2, 95], 83: [2, 95], 84: [2, 95], 85: [2, 95] }, { 68: [2, 97] }, { 5: [2, 21], 14: [2, 21], 15: [2, 21], 19: [2, 21], 29: [2, 21], 34: [2, 21], 39: [2, 21], 44: [2, 21], 47: [2, 21], 48: [2, 21], 51: [2, 21], 55: [2, 21], 60: [2, 21] }, { 33: [1, 130] }, { 33: [2, 63] }, { 72: [1, 132], 76: 131 }, { 33: [1, 133] }, { 33: [2, 69] }, { 15: [2, 12], 18: [2, 12] }, { 14: [2, 26], 15: [2, 26], 19: [2, 26], 29: [2, 26], 34: [2, 26], 47: [2, 26], 48: [2, 26], 51: [2, 26], 55: [2, 26], 60: [2, 26] }, { 23: [2, 31], 33: [2, 31], 54: [2, 31], 68: [2, 31], 72: [2, 31], 75: [2, 31] }, { 33: [2, 74], 42: 134, 74: 135, 75: [1, 120] }, { 33: [2, 71], 65: [2, 71], 72: [2, 71], 75: [2, 71], 80: [2, 71], 81: [2, 71], 82: [2, 71], 83: [2, 71], 84: [2, 71], 85: [2, 71] }, { 33: [2, 73], 75: [2, 73] }, { 23: [2, 29], 33: [2, 29], 54: [2, 29], 65: [2, 29], 68: [2, 29], 72: [2, 29], 75: [2, 29], 80: [2, 29], 81: [2, 29], 82: [2, 29], 83: [2, 29], 84: [2, 29], 85: [2, 29] }, { 14: [2, 15], 15: [2, 15], 19: [2, 15], 29: [2, 15], 34: [2, 15], 39: [2, 15], 44: [2, 15], 47: [2, 15], 48: [2, 15], 51: [2, 15], 55: [2, 15], 60: [2, 15] }, { 72: [1, 137], 77: [1, 136] }, { 72: [2, 100], 77: [2, 100] }, { 14: [2, 16], 15: [2, 16], 19: [2, 16], 29: [2, 16], 34: [2, 16], 44: [2, 16], 47: [2, 16], 48: [2, 16], 51: [2, 16], 55: [2, 16], 60: [2, 16] }, { 33: [1, 138] }, { 33: [2, 75] }, { 33: [2, 32] }, { 72: [2, 101], 77: [2, 101] }, { 14: [2, 17], 15: [2, 17], 19: [2, 17], 29: [2, 17], 34: [2, 17], 39: [2, 17], 44: [2, 17], 47: [2, 17], 48: [2, 17], 51: [2, 17], 55: [2, 17], 60: [2, 17] }], + defaultActions: { 4: [2, 1], 54: [2, 55], 56: [2, 20], 60: [2, 57], 73: [2, 81], 82: [2, 85], 86: [2, 18], 90: [2, 89], 101: [2, 53], 104: [2, 93], 110: [2, 19], 111: [2, 77], 116: [2, 97], 119: [2, 63], 122: [2, 69], 135: [2, 75], 136: [2, 32] }, + parseError: function parseError(str, hash) { + throw new Error(str); + }, + parse: function parse(input) { + var self = this, + stack = [0], + vstack = [null], + lstack = [], + table = this.table, + yytext = "", + yylineno = 0, + yyleng = 0, + recovering = 0; + this.lexer.setInput(input); + this.lexer.yy = this.yy; + this.yy.lexer = this.lexer; + this.yy.parser = this; + if (typeof this.lexer.yylloc == "undefined") this.lexer.yylloc = {}; + var yyloc = this.lexer.yylloc; + lstack.push(yyloc); + var ranges = this.lexer.options && this.lexer.options.ranges; + if (typeof this.yy.parseError === "function") this.parseError = this.yy.parseError; + function lex() { + var token; + token = self.lexer.lex() || 1; + if (typeof token !== "number") { + token = self.symbols_[token] || token; + } + return token; + } + var symbol, + state, + action, + r, + yyval = {}, + p, + len, + newState, + expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + if (!recovering) { + expected = []; + for (p in table[state]) if (this.terminals_[p] && p > 2) { + expected.push("'" + this.terminals_[p] + "'"); + } + if (this.lexer.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + this.lexer.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == 1 ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { text: this.lexer.match, token: this.terminals_[symbol] || symbol, line: this.lexer.yylineno, loc: yyloc, expected: expected }); + } + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(this.lexer.yytext); + lstack.push(this.lexer.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = this.lexer.yyleng; + yytext = this.lexer.yytext; + yylineno = this.lexer.yylineno; + yyloc = this.lexer.yylloc; + if (recovering > 0) recovering--; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { first_line: lstack[lstack.length - (len || 1)].first_line, last_line: lstack[lstack.length - 1].last_line, first_column: lstack[lstack.length - (len || 1)].first_column, last_column: lstack[lstack.length - 1].last_column }; + if (ranges) { + yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]]; + } + r = this.performAction.call(yyval, yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + /* Jison generated lexer */ + var lexer = (function () { + var lexer = { EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + setInput: function setInput(input) { + this._input = input; + this._more = this._less = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ''; + this.conditionStack = ['INITIAL']; + this.yylloc = { first_line: 1, first_column: 0, last_line: 1, last_column: 0 }; + if (this.options.ranges) this.yylloc.range = [0, 0]; + this.offset = 0; + return this; + }, + input: function input() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) this.yylloc.range[1]++; + + this._input = this._input.slice(1); + return ch; + }, + unput: function unput(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len - 1); + //this.yyleng -= len; + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + + if (lines.length - 1) this.yylineno -= lines.length - 1; + var r = this.yylloc.range; + + this.yylloc = { first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + return this; + }, + more: function more() { + this._more = true; + return this; + }, + less: function less(n) { + this.unput(this.match.slice(n)); + }, + pastInput: function pastInput() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\n/g, ""); + }, + upcomingInput: function upcomingInput() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\n/g, ""); + }, + showPosition: function showPosition() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + next: function next() { + if (this.done) { + return this.EOF; + } + if (!this._input) this.done = true; + + var token, match, tempMatch, index, lines; + if (!this._more) { + this.yytext = ''; + this.match = ''; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (!this.options.flex) break; + } + } + if (match) { + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) this.yylineno += lines.length; + this.yylloc = { first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, rules[index], this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) this.done = false; + if (token) return token;else return; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\n' + this.showPosition(), { text: "", token: null, line: this.yylineno }); + } + }, + lex: function lex() { + var r = this.next(); + if (typeof r !== 'undefined') { + return r; + } else { + return this.lex(); + } + }, + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + popState: function popState() { + return this.conditionStack.pop(); + }, + _currentRules: function _currentRules() { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + }, + topState: function topState() { + return this.conditionStack[this.conditionStack.length - 2]; + }, + pushState: function begin(condition) { + this.begin(condition); + } }; + lexer.options = {}; + lexer.performAction = function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + + function strip(start, end) { + return yy_.yytext = yy_.yytext.substring(start, yy_.yyleng - end + start); + } + switch ($avoiding_name_collisions) { + case 0: + if (yy_.yytext.slice(-2) === "\\\\") { + strip(0, 1); + this.begin("mu"); + } else if (yy_.yytext.slice(-1) === "\\") { + strip(0, 1); + this.begin("emu"); + } else { + this.begin("mu"); + } + if (yy_.yytext) return 15; + + break; + case 1: + return 15; + case 2: + this.popState(); + return 15; + case 3: + this.begin('raw');return 15; + case 4: + this.popState(); + // Should be using `this.topState()` below, but it currently + // returns the second top instead of the first top. Opened an + // issue about it at https://github.com/zaach/jison/issues/291 + if (this.conditionStack[this.conditionStack.length - 1] === 'raw') { + return 15; + } else { + strip(5, 9); + return 'END_RAW_BLOCK'; + } + case 5: + return 15; + case 6: + this.popState(); + return 14; + case 7: + return 65; + case 8: + return 68; + case 9: + return 19; + case 10: + this.popState(); + this.begin('raw'); + return 23; + case 11: + return 55; + case 12: + return 60; + case 13: + return 29; + case 14: + return 47; + case 15: + this.popState();return 44; + case 16: + this.popState();return 44; + case 17: + return 34; + case 18: + return 39; + case 19: + return 51; + case 20: + return 48; + case 21: + this.unput(yy_.yytext); + this.popState(); + this.begin('com'); + + break; + case 22: + this.popState(); + return 14; + case 23: + return 48; + case 24: + return 73; + case 25: + return 72; + case 26: + return 72; + case 27: + return 87; + case 28: + // ignore whitespace + break; + case 29: + this.popState();return 54; + case 30: + this.popState();return 33; + case 31: + yy_.yytext = strip(1, 2).replace(/\\"/g, '"');return 80; + case 32: + yy_.yytext = strip(1, 2).replace(/\\'/g, "'");return 80; + case 33: + return 85; + case 34: + return 82; + case 35: + return 82; + case 36: + return 83; + case 37: + return 84; + case 38: + return 81; + case 39: + return 75; + case 40: + return 77; + case 41: + return 72; + case 42: + yy_.yytext = yy_.yytext.replace(/\\([\\\]])/g, '$1');return 72; + case 43: + return 'INVALID'; + case 44: + return 5; + } + }; + lexer.rules = [/^(?:[^\x00]*?(?=(\{\{)))/, /^(?:[^\x00]+)/, /^(?:[^\x00]{2,}?(?=(\{\{|\\\{\{|\\\\\{\{|$)))/, /^(?:\{\{\{\{(?=[^\/]))/, /^(?:\{\{\{\{\/[^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=[=}\s\/.])\}\}\}\})/, /^(?:[^\x00]+?(?=(\{\{\{\{)))/, /^(?:[\s\S]*?--(~)?\}\})/, /^(?:\()/, /^(?:\))/, /^(?:\{\{\{\{)/, /^(?:\}\}\}\})/, /^(?:\{\{(~)?>)/, /^(?:\{\{(~)?#>)/, /^(?:\{\{(~)?#\*?)/, /^(?:\{\{(~)?\/)/, /^(?:\{\{(~)?\^\s*(~)?\}\})/, /^(?:\{\{(~)?\s*else\s*(~)?\}\})/, /^(?:\{\{(~)?\^)/, /^(?:\{\{(~)?\s*else\b)/, /^(?:\{\{(~)?\{)/, /^(?:\{\{(~)?&)/, /^(?:\{\{(~)?!--)/, /^(?:\{\{(~)?![\s\S]*?\}\})/, /^(?:\{\{(~)?\*?)/, /^(?:=)/, /^(?:\.\.)/, /^(?:\.(?=([=~}\s\/.)|])))/, /^(?:[\/.])/, /^(?:\s+)/, /^(?:\}(~)?\}\})/, /^(?:(~)?\}\})/, /^(?:"(\\["]|[^"])*")/, /^(?:'(\\[']|[^'])*')/, /^(?:@)/, /^(?:true(?=([~}\s)])))/, /^(?:false(?=([~}\s)])))/, /^(?:undefined(?=([~}\s)])))/, /^(?:null(?=([~}\s)])))/, /^(?:-?[0-9]+(?:\.[0-9]+)?(?=([~}\s)])))/, /^(?:as\s+\|)/, /^(?:\|)/, /^(?:([^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=([=~}\s\/.)|]))))/, /^(?:\[(\\\]|[^\]])*\])/, /^(?:.)/, /^(?:$)/]; + lexer.conditions = { "mu": { "rules": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44], "inclusive": false }, "emu": { "rules": [2], "inclusive": false }, "com": { "rules": [6], "inclusive": false }, "raw": { "rules": [3, 4, 5], "inclusive": false }, "INITIAL": { "rules": [0, 1, 44], "inclusive": true } }; + return lexer; + })(); + parser.lexer = lexer; + function Parser() { + this.yy = {}; + }Parser.prototype = parser;parser.Parser = Parser; + return new Parser(); +})();exports["default"] = handlebars; +module.exports = exports["default"]; + +}); + +var visitor = createCommonjsModule(function (module, exports) { + +exports.__esModule = true; +// istanbul ignore next + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + + +var _exception2 = _interopRequireDefault(exception); + +function Visitor() { + this.parents = []; +} + +Visitor.prototype = { + constructor: Visitor, + mutating: false, + + // Visits a given value. If mutating, will replace the value if necessary. + acceptKey: function acceptKey(node, name) { + var value = this.accept(node[name]); + if (this.mutating) { + // Hacky sanity check: This may have a few false positives for type for the helper + // methods but will generally do the right thing without a lot of overhead. + if (value && !Visitor.prototype[value.type]) { + throw new _exception2['default']('Unexpected node type "' + value.type + '" found when accepting ' + name + ' on ' + node.type); + } + node[name] = value; + } + }, + + // Performs an accept operation with added sanity check to ensure + // required keys are not removed. + acceptRequired: function acceptRequired(node, name) { + this.acceptKey(node, name); + + if (!node[name]) { + throw new _exception2['default'](node.type + ' requires ' + name); + } + }, + + // Traverses a given array. If mutating, empty respnses will be removed + // for child elements. + acceptArray: function acceptArray(array) { + for (var i = 0, l = array.length; i < l; i++) { + this.acceptKey(array, i); + + if (!array[i]) { + array.splice(i, 1); + i--; + l--; + } + } + }, + + accept: function accept(object) { + if (!object) { + return; + } + + /* istanbul ignore next: Sanity code */ + if (!this[object.type]) { + throw new _exception2['default']('Unknown type: ' + object.type, object); + } + + if (this.current) { + this.parents.unshift(this.current); + } + this.current = object; + + var ret = this[object.type](object); + + this.current = this.parents.shift(); + + if (!this.mutating || ret) { + return ret; + } else if (ret !== false) { + return object; + } + }, + + Program: function Program(program) { + this.acceptArray(program.body); + }, + + MustacheStatement: visitSubExpression, + Decorator: visitSubExpression, + + BlockStatement: visitBlock, + DecoratorBlock: visitBlock, + + PartialStatement: visitPartial, + PartialBlockStatement: function PartialBlockStatement(partial) { + visitPartial.call(this, partial); + + this.acceptKey(partial, 'program'); + }, + + ContentStatement: function ContentStatement() /* content */{}, + CommentStatement: function CommentStatement() /* comment */{}, + + SubExpression: visitSubExpression, + + PathExpression: function PathExpression() /* path */{}, + + StringLiteral: function StringLiteral() /* string */{}, + NumberLiteral: function NumberLiteral() /* number */{}, + BooleanLiteral: function BooleanLiteral() /* bool */{}, + UndefinedLiteral: function UndefinedLiteral() /* literal */{}, + NullLiteral: function NullLiteral() /* literal */{}, + + Hash: function Hash(hash) { + this.acceptArray(hash.pairs); + }, + HashPair: function HashPair(pair) { + this.acceptRequired(pair, 'value'); + } +}; + +function visitSubExpression(mustache) { + this.acceptRequired(mustache, 'path'); + this.acceptArray(mustache.params); + this.acceptKey(mustache, 'hash'); +} +function visitBlock(block) { + visitSubExpression.call(this, block); + + this.acceptKey(block, 'program'); + this.acceptKey(block, 'inverse'); +} +function visitPartial(partial) { + this.acceptRequired(partial, 'name'); + this.acceptArray(partial.params); + this.acceptKey(partial, 'hash'); +} + +exports['default'] = Visitor; +module.exports = exports['default']; + +}); + +var whitespaceControl = createCommonjsModule(function (module, exports) { + +exports.__esModule = true; +// istanbul ignore next + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + + +var _visitor2 = _interopRequireDefault(visitor); + +function WhitespaceControl() { + var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; + + this.options = options; +} +WhitespaceControl.prototype = new _visitor2['default'](); + +WhitespaceControl.prototype.Program = function (program) { + var doStandalone = !this.options.ignoreStandalone; + + var isRoot = !this.isRootSeen; + this.isRootSeen = true; + + var body = program.body; + for (var i = 0, l = body.length; i < l; i++) { + var current = body[i], + strip = this.accept(current); + + if (!strip) { + continue; + } + + var _isPrevWhitespace = isPrevWhitespace(body, i, isRoot), + _isNextWhitespace = isNextWhitespace(body, i, isRoot), + openStandalone = strip.openStandalone && _isPrevWhitespace, + closeStandalone = strip.closeStandalone && _isNextWhitespace, + inlineStandalone = strip.inlineStandalone && _isPrevWhitespace && _isNextWhitespace; + + if (strip.close) { + omitRight(body, i, true); + } + if (strip.open) { + omitLeft(body, i, true); + } + + if (doStandalone && inlineStandalone) { + omitRight(body, i); + + if (omitLeft(body, i)) { + // If we are on a standalone node, save the indent info for partials + if (current.type === 'PartialStatement') { + // Pull out the whitespace from the final line + current.indent = /([ \t]+$)/.exec(body[i - 1].original)[1]; + } + } + } + if (doStandalone && openStandalone) { + omitRight((current.program || current.inverse).body); + + // Strip out the previous content node if it's whitespace only + omitLeft(body, i); + } + if (doStandalone && closeStandalone) { + // Always strip the next node + omitRight(body, i); + + omitLeft((current.inverse || current.program).body); + } + } + + return program; +}; + +WhitespaceControl.prototype.BlockStatement = WhitespaceControl.prototype.DecoratorBlock = WhitespaceControl.prototype.PartialBlockStatement = function (block) { + this.accept(block.program); + this.accept(block.inverse); + + // Find the inverse program that is involed with whitespace stripping. + var program = block.program || block.inverse, + inverse = block.program && block.inverse, + firstInverse = inverse, + lastInverse = inverse; + + if (inverse && inverse.chained) { + firstInverse = inverse.body[0].program; + + // Walk the inverse chain to find the last inverse that is actually in the chain. + while (lastInverse.chained) { + lastInverse = lastInverse.body[lastInverse.body.length - 1].program; + } + } + + var strip = { + open: block.openStrip.open, + close: block.closeStrip.close, + + // Determine the standalone candiacy. Basically flag our content as being possibly standalone + // so our parent can determine if we actually are standalone + openStandalone: isNextWhitespace(program.body), + closeStandalone: isPrevWhitespace((firstInverse || program).body) + }; + + if (block.openStrip.close) { + omitRight(program.body, null, true); + } + + if (inverse) { + var inverseStrip = block.inverseStrip; + + if (inverseStrip.open) { + omitLeft(program.body, null, true); + } + + if (inverseStrip.close) { + omitRight(firstInverse.body, null, true); + } + if (block.closeStrip.open) { + omitLeft(lastInverse.body, null, true); + } + + // Find standalone else statments + if (!this.options.ignoreStandalone && isPrevWhitespace(program.body) && isNextWhitespace(firstInverse.body)) { + omitLeft(program.body); + omitRight(firstInverse.body); + } + } else if (block.closeStrip.open) { + omitLeft(program.body, null, true); + } + + return strip; +}; + +WhitespaceControl.prototype.Decorator = WhitespaceControl.prototype.MustacheStatement = function (mustache) { + return mustache.strip; +}; + +WhitespaceControl.prototype.PartialStatement = WhitespaceControl.prototype.CommentStatement = function (node) { + /* istanbul ignore next */ + var strip = node.strip || {}; + return { + inlineStandalone: true, + open: strip.open, + close: strip.close + }; +}; + +function isPrevWhitespace(body, i, isRoot) { + if (i === undefined) { + i = body.length; + } + + // Nodes that end with newlines are considered whitespace (but are special + // cased for strip operations) + var prev = body[i - 1], + sibling = body[i - 2]; + if (!prev) { + return isRoot; + } + + if (prev.type === 'ContentStatement') { + return (sibling || !isRoot ? /\r?\n\s*?$/ : /(^|\r?\n)\s*?$/).test(prev.original); + } +} +function isNextWhitespace(body, i, isRoot) { + if (i === undefined) { + i = -1; + } + + var next = body[i + 1], + sibling = body[i + 2]; + if (!next) { + return isRoot; + } + + if (next.type === 'ContentStatement') { + return (sibling || !isRoot ? /^\s*?\r?\n/ : /^\s*?(\r?\n|$)/).test(next.original); + } +} + +// Marks the node to the right of the position as omitted. +// I.e. {{foo}}' ' will mark the ' ' node as omitted. +// +// If i is undefined, then the first child will be marked as such. +// +// If mulitple is truthy then all whitespace will be stripped out until non-whitespace +// content is met. +function omitRight(body, i, multiple) { + var current = body[i == null ? 0 : i + 1]; + if (!current || current.type !== 'ContentStatement' || !multiple && current.rightStripped) { + return; + } + + var original = current.value; + current.value = current.value.replace(multiple ? /^\s+/ : /^[ \t]*\r?\n?/, ''); + current.rightStripped = current.value !== original; +} + +// Marks the node to the left of the position as omitted. +// I.e. ' '{{foo}} will mark the ' ' node as omitted. +// +// If i is undefined then the last child will be marked as such. +// +// If mulitple is truthy then all whitespace will be stripped out until non-whitespace +// content is met. +function omitLeft(body, i, multiple) { + var current = body[i == null ? body.length - 1 : i - 1]; + if (!current || current.type !== 'ContentStatement' || !multiple && current.leftStripped) { + return; + } + + // We omit the last node if it's whitespace only and not preceded by a non-content node. + var original = current.value; + current.value = current.value.replace(multiple ? /\s+$/ : /[ \t]+$/, ''); + current.leftStripped = current.value !== original; + return current.leftStripped; +} + +exports['default'] = WhitespaceControl; +module.exports = exports['default']; + +}); + +var helpers$1 = createCommonjsModule(function (module, exports) { + +exports.__esModule = true; +exports.SourceLocation = SourceLocation; +exports.id = id; +exports.stripFlags = stripFlags; +exports.stripComment = stripComment; +exports.preparePath = preparePath; +exports.prepareMustache = prepareMustache; +exports.prepareRawBlock = prepareRawBlock; +exports.prepareBlock = prepareBlock; +exports.prepareProgram = prepareProgram; +exports.preparePartialBlock = preparePartialBlock; +// istanbul ignore next + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + + +var _exception2 = _interopRequireDefault(exception); + +function validateClose(open, close) { + close = close.path ? close.path.original : close; + + if (open.path.original !== close) { + var errorNode = { loc: open.path.loc }; + + throw new _exception2['default'](open.path.original + " doesn't match " + close, errorNode); + } +} + +function SourceLocation(source, locInfo) { + this.source = source; + this.start = { + line: locInfo.first_line, + column: locInfo.first_column + }; + this.end = { + line: locInfo.last_line, + column: locInfo.last_column + }; +} + +function id(token) { + if (/^\[.*\]$/.test(token)) { + return token.substring(1, token.length - 1); + } else { + return token; + } +} + +function stripFlags(open, close) { + return { + open: open.charAt(2) === '~', + close: close.charAt(close.length - 3) === '~' + }; +} + +function stripComment(comment) { + return comment.replace(/^\{\{~?!-?-?/, '').replace(/-?-?~?\}\}$/, ''); +} + +function preparePath(data, parts, loc) { + loc = this.locInfo(loc); + + var original = data ? '@' : '', + dig = [], + depth = 0; + + for (var i = 0, l = parts.length; i < l; i++) { + var part = parts[i].part, + + // If we have [] syntax then we do not treat path references as operators, + // i.e. foo.[this] resolves to approximately context.foo['this'] + isLiteral = parts[i].original !== part; + original += (parts[i].separator || '') + part; + + if (!isLiteral && (part === '..' || part === '.' || part === 'this')) { + if (dig.length > 0) { + throw new _exception2['default']('Invalid path: ' + original, { loc: loc }); + } else if (part === '..') { + depth++; + } + } else { + dig.push(part); + } + } + + return { + type: 'PathExpression', + data: data, + depth: depth, + parts: dig, + original: original, + loc: loc + }; +} + +function prepareMustache(path, params, hash, open, strip, locInfo) { + // Must use charAt to support IE pre-10 + var escapeFlag = open.charAt(3) || open.charAt(2), + escaped = escapeFlag !== '{' && escapeFlag !== '&'; + + var decorator = /\*/.test(open); + return { + type: decorator ? 'Decorator' : 'MustacheStatement', + path: path, + params: params, + hash: hash, + escaped: escaped, + strip: strip, + loc: this.locInfo(locInfo) + }; +} + +function prepareRawBlock(openRawBlock, contents, close, locInfo) { + validateClose(openRawBlock, close); + + locInfo = this.locInfo(locInfo); + var program = { + type: 'Program', + body: contents, + strip: {}, + loc: locInfo + }; + + return { + type: 'BlockStatement', + path: openRawBlock.path, + params: openRawBlock.params, + hash: openRawBlock.hash, + program: program, + openStrip: {}, + inverseStrip: {}, + closeStrip: {}, + loc: locInfo + }; +} + +function prepareBlock(openBlock, program, inverseAndProgram, close, inverted, locInfo) { + if (close && close.path) { + validateClose(openBlock, close); + } + + var decorator = /\*/.test(openBlock.open); + + program.blockParams = openBlock.blockParams; + + var inverse = undefined, + inverseStrip = undefined; + + if (inverseAndProgram) { + if (decorator) { + throw new _exception2['default']('Unexpected inverse block on decorator', inverseAndProgram); + } + + if (inverseAndProgram.chain) { + inverseAndProgram.program.body[0].closeStrip = close.strip; + } + + inverseStrip = inverseAndProgram.strip; + inverse = inverseAndProgram.program; + } + + if (inverted) { + inverted = inverse; + inverse = program; + program = inverted; + } + + return { + type: decorator ? 'DecoratorBlock' : 'BlockStatement', + path: openBlock.path, + params: openBlock.params, + hash: openBlock.hash, + program: program, + inverse: inverse, + openStrip: openBlock.strip, + inverseStrip: inverseStrip, + closeStrip: close && close.strip, + loc: this.locInfo(locInfo) + }; +} + +function prepareProgram(statements, loc) { + if (!loc && statements.length) { + var firstLoc = statements[0].loc, + lastLoc = statements[statements.length - 1].loc; + + /* istanbul ignore else */ + if (firstLoc && lastLoc) { + loc = { + source: firstLoc.source, + start: { + line: firstLoc.start.line, + column: firstLoc.start.column + }, + end: { + line: lastLoc.end.line, + column: lastLoc.end.column + } + }; + } + } + + return { + type: 'Program', + body: statements, + strip: {}, + loc: loc + }; +} + +function preparePartialBlock(open, program, close, locInfo) { + validateClose(open, close); + + return { + type: 'PartialBlockStatement', + name: open.path, + params: open.params, + hash: open.hash, + program: program, + openStrip: open.strip, + closeStrip: close && close.strip, + loc: this.locInfo(locInfo) + }; +} + +}); + +var base$1 = createCommonjsModule(function (module, exports) { + +exports.__esModule = true; +exports.parseWithoutProcessing = parseWithoutProcessing; +exports.parse = parse; +// istanbul ignore next + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } } + +// istanbul ignore next + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + + +var _parser2 = _interopRequireDefault(parser); + + + +var _whitespaceControl2 = _interopRequireDefault(whitespaceControl); + + + +var Helpers = _interopRequireWildcard(helpers$1); + + + +exports.parser = _parser2['default']; + +var yy = {}; +utils$2.extend(yy, Helpers); + +function parseWithoutProcessing(input, options) { + // Just return if an already-compiled AST was passed in. + if (input.type === 'Program') { + return input; + } + + _parser2['default'].yy = yy; + + // Altering the shared object here, but this is ok as parser is a sync operation + yy.locInfo = function (locInfo) { + return new yy.SourceLocation(options && options.srcName, locInfo); + }; + + var ast = _parser2['default'].parse(input); + + return ast; +} + +function parse(input, options) { + var ast = parseWithoutProcessing(input, options); + var strip = new _whitespaceControl2['default'](options); + + return strip.accept(ast); +} + +}); + +var compiler = createCommonjsModule(function (module, exports) { + +exports.__esModule = true; +exports.Compiler = Compiler; +exports.precompile = precompile; +exports.compile = compile; +// istanbul ignore next + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + + +var _exception2 = _interopRequireDefault(exception); + + + + + +var _ast2 = _interopRequireDefault(ast); + +var slice = [].slice; + +function Compiler() {} + +// the foundHelper register will disambiguate helper lookup from finding a +// function in a context. This is necessary for mustache compatibility, which +// requires that context functions in blocks are evaluated by blockHelperMissing, +// and then proceed as if the resulting value was provided to blockHelperMissing. + +Compiler.prototype = { + compiler: Compiler, + + equals: function equals(other) { + var len = this.opcodes.length; + if (other.opcodes.length !== len) { + return false; + } + + for (var i = 0; i < len; i++) { + var opcode = this.opcodes[i], + otherOpcode = other.opcodes[i]; + if (opcode.opcode !== otherOpcode.opcode || !argEquals(opcode.args, otherOpcode.args)) { + return false; + } + } + + // We know that length is the same between the two arrays because they are directly tied + // to the opcode behavior above. + len = this.children.length; + for (var i = 0; i < len; i++) { + if (!this.children[i].equals(other.children[i])) { + return false; + } + } + + return true; + }, + + guid: 0, + + compile: function compile(program, options) { + this.sourceNode = []; + this.opcodes = []; + this.children = []; + this.options = options; + this.stringParams = options.stringParams; + this.trackIds = options.trackIds; + + options.blockParams = options.blockParams || []; + + options.knownHelpers = utils$2.extend(Object.create(null), { + helperMissing: true, + blockHelperMissing: true, + each: true, + 'if': true, + unless: true, + 'with': true, + log: true, + lookup: true + }, options.knownHelpers); + + return this.accept(program); + }, + + compileProgram: function compileProgram(program) { + var childCompiler = new this.compiler(), + // eslint-disable-line new-cap + result = childCompiler.compile(program, this.options), + guid = this.guid++; + + this.usePartial = this.usePartial || result.usePartial; + + this.children[guid] = result; + this.useDepths = this.useDepths || result.useDepths; + + return guid; + }, + + accept: function accept(node) { + /* istanbul ignore next: Sanity code */ + if (!this[node.type]) { + throw new _exception2['default']('Unknown type: ' + node.type, node); + } + + this.sourceNode.unshift(node); + var ret = this[node.type](node); + this.sourceNode.shift(); + return ret; + }, + + Program: function Program(program) { + this.options.blockParams.unshift(program.blockParams); + + var body = program.body, + bodyLength = body.length; + for (var i = 0; i < bodyLength; i++) { + this.accept(body[i]); + } + + this.options.blockParams.shift(); + + this.isSimple = bodyLength === 1; + this.blockParams = program.blockParams ? program.blockParams.length : 0; + + return this; + }, + + BlockStatement: function BlockStatement(block) { + transformLiteralToPath(block); + + var program = block.program, + inverse = block.inverse; + + program = program && this.compileProgram(program); + inverse = inverse && this.compileProgram(inverse); + + var type = this.classifySexpr(block); + + if (type === 'helper') { + this.helperSexpr(block, program, inverse); + } else if (type === 'simple') { + this.simpleSexpr(block); + + // now that the simple mustache is resolved, we need to + // evaluate it by executing `blockHelperMissing` + this.opcode('pushProgram', program); + this.opcode('pushProgram', inverse); + this.opcode('emptyHash'); + this.opcode('blockValue', block.path.original); + } else { + this.ambiguousSexpr(block, program, inverse); + + // now that the simple mustache is resolved, we need to + // evaluate it by executing `blockHelperMissing` + this.opcode('pushProgram', program); + this.opcode('pushProgram', inverse); + this.opcode('emptyHash'); + this.opcode('ambiguousBlockValue'); + } + + this.opcode('append'); + }, + + DecoratorBlock: function DecoratorBlock(decorator) { + var program = decorator.program && this.compileProgram(decorator.program); + var params = this.setupFullMustacheParams(decorator, program, undefined), + path = decorator.path; + + this.useDecorators = true; + this.opcode('registerDecorator', params.length, path.original); + }, + + PartialStatement: function PartialStatement(partial) { + this.usePartial = true; + + var program = partial.program; + if (program) { + program = this.compileProgram(partial.program); + } + + var params = partial.params; + if (params.length > 1) { + throw new _exception2['default']('Unsupported number of partial arguments: ' + params.length, partial); + } else if (!params.length) { + if (this.options.explicitPartialContext) { + this.opcode('pushLiteral', 'undefined'); + } else { + params.push({ type: 'PathExpression', parts: [], depth: 0 }); + } + } + + var partialName = partial.name.original, + isDynamic = partial.name.type === 'SubExpression'; + if (isDynamic) { + this.accept(partial.name); + } + + this.setupFullMustacheParams(partial, program, undefined, true); + + var indent = partial.indent || ''; + if (this.options.preventIndent && indent) { + this.opcode('appendContent', indent); + indent = ''; + } + + this.opcode('invokePartial', isDynamic, partialName, indent); + this.opcode('append'); + }, + PartialBlockStatement: function PartialBlockStatement(partialBlock) { + this.PartialStatement(partialBlock); + }, + + MustacheStatement: function MustacheStatement(mustache) { + this.SubExpression(mustache); + + if (mustache.escaped && !this.options.noEscape) { + this.opcode('appendEscaped'); + } else { + this.opcode('append'); + } + }, + Decorator: function Decorator(decorator) { + this.DecoratorBlock(decorator); + }, + + ContentStatement: function ContentStatement(content) { + if (content.value) { + this.opcode('appendContent', content.value); + } + }, + + CommentStatement: function CommentStatement() {}, + + SubExpression: function SubExpression(sexpr) { + transformLiteralToPath(sexpr); + var type = this.classifySexpr(sexpr); + + if (type === 'simple') { + this.simpleSexpr(sexpr); + } else if (type === 'helper') { + this.helperSexpr(sexpr); + } else { + this.ambiguousSexpr(sexpr); + } + }, + ambiguousSexpr: function ambiguousSexpr(sexpr, program, inverse) { + var path = sexpr.path, + name = path.parts[0], + isBlock = program != null || inverse != null; + + this.opcode('getContext', path.depth); + + this.opcode('pushProgram', program); + this.opcode('pushProgram', inverse); + + path.strict = true; + this.accept(path); + + this.opcode('invokeAmbiguous', name, isBlock); + }, + + simpleSexpr: function simpleSexpr(sexpr) { + var path = sexpr.path; + path.strict = true; + this.accept(path); + this.opcode('resolvePossibleLambda'); + }, + + helperSexpr: function helperSexpr(sexpr, program, inverse) { + var params = this.setupFullMustacheParams(sexpr, program, inverse), + path = sexpr.path, + name = path.parts[0]; + + if (this.options.knownHelpers[name]) { + this.opcode('invokeKnownHelper', params.length, name); + } else if (this.options.knownHelpersOnly) { + throw new _exception2['default']('You specified knownHelpersOnly, but used the unknown helper ' + name, sexpr); + } else { + path.strict = true; + path.falsy = true; + + this.accept(path); + this.opcode('invokeHelper', params.length, path.original, _ast2['default'].helpers.simpleId(path)); + } + }, + + PathExpression: function PathExpression(path) { + this.addDepth(path.depth); + this.opcode('getContext', path.depth); + + var name = path.parts[0], + scoped = _ast2['default'].helpers.scopedId(path), + blockParamId = !path.depth && !scoped && this.blockParamIndex(name); + + if (blockParamId) { + this.opcode('lookupBlockParam', blockParamId, path.parts); + } else if (!name) { + // Context reference, i.e. `{{foo .}}` or `{{foo ..}}` + this.opcode('pushContext'); + } else if (path.data) { + this.options.data = true; + this.opcode('lookupData', path.depth, path.parts, path.strict); + } else { + this.opcode('lookupOnContext', path.parts, path.falsy, path.strict, scoped); + } + }, + + StringLiteral: function StringLiteral(string) { + this.opcode('pushString', string.value); + }, + + NumberLiteral: function NumberLiteral(number) { + this.opcode('pushLiteral', number.value); + }, + + BooleanLiteral: function BooleanLiteral(bool) { + this.opcode('pushLiteral', bool.value); + }, + + UndefinedLiteral: function UndefinedLiteral() { + this.opcode('pushLiteral', 'undefined'); + }, + + NullLiteral: function NullLiteral() { + this.opcode('pushLiteral', 'null'); + }, + + Hash: function Hash(hash) { + var pairs = hash.pairs, + i = 0, + l = pairs.length; + + this.opcode('pushHash'); + + for (; i < l; i++) { + this.pushParam(pairs[i].value); + } + while (i--) { + this.opcode('assignToHash', pairs[i].key); + } + this.opcode('popHash'); + }, + + // HELPERS + opcode: function opcode(name) { + this.opcodes.push({ + opcode: name, + args: slice.call(arguments, 1), + loc: this.sourceNode[0].loc + }); + }, + + addDepth: function addDepth(depth) { + if (!depth) { + return; + } + + this.useDepths = true; + }, + + classifySexpr: function classifySexpr(sexpr) { + var isSimple = _ast2['default'].helpers.simpleId(sexpr.path); + + var isBlockParam = isSimple && !!this.blockParamIndex(sexpr.path.parts[0]); + + // a mustache is an eligible helper if: + // * its id is simple (a single part, not `this` or `..`) + var isHelper = !isBlockParam && _ast2['default'].helpers.helperExpression(sexpr); + + // if a mustache is an eligible helper but not a definite + // helper, it is ambiguous, and will be resolved in a later + // pass or at runtime. + var isEligible = !isBlockParam && (isHelper || isSimple); + + // if ambiguous, we can possibly resolve the ambiguity now + // An eligible helper is one that does not have a complex path, i.e. `this.foo`, `../foo` etc. + if (isEligible && !isHelper) { + var _name = sexpr.path.parts[0], + options = this.options; + if (options.knownHelpers[_name]) { + isHelper = true; + } else if (options.knownHelpersOnly) { + isEligible = false; + } + } + + if (isHelper) { + return 'helper'; + } else if (isEligible) { + return 'ambiguous'; + } else { + return 'simple'; + } + }, + + pushParams: function pushParams(params) { + for (var i = 0, l = params.length; i < l; i++) { + this.pushParam(params[i]); + } + }, + + pushParam: function pushParam(val) { + var value = val.value != null ? val.value : val.original || ''; + + if (this.stringParams) { + if (value.replace) { + value = value.replace(/^(\.?\.\/)*/g, '').replace(/\//g, '.'); + } + + if (val.depth) { + this.addDepth(val.depth); + } + this.opcode('getContext', val.depth || 0); + this.opcode('pushStringParam', value, val.type); + + if (val.type === 'SubExpression') { + // SubExpressions get evaluated and passed in + // in string params mode. + this.accept(val); + } + } else { + if (this.trackIds) { + var blockParamIndex = undefined; + if (val.parts && !_ast2['default'].helpers.scopedId(val) && !val.depth) { + blockParamIndex = this.blockParamIndex(val.parts[0]); + } + if (blockParamIndex) { + var blockParamChild = val.parts.slice(1).join('.'); + this.opcode('pushId', 'BlockParam', blockParamIndex, blockParamChild); + } else { + value = val.original || value; + if (value.replace) { + value = value.replace(/^this(?:\.|$)/, '').replace(/^\.\//, '').replace(/^\.$/, ''); + } + + this.opcode('pushId', val.type, value); + } + } + this.accept(val); + } + }, + + setupFullMustacheParams: function setupFullMustacheParams(sexpr, program, inverse, omitEmpty) { + var params = sexpr.params; + this.pushParams(params); + + this.opcode('pushProgram', program); + this.opcode('pushProgram', inverse); + + if (sexpr.hash) { + this.accept(sexpr.hash); + } else { + this.opcode('emptyHash', omitEmpty); + } + + return params; + }, + + blockParamIndex: function blockParamIndex(name) { + for (var depth = 0, len = this.options.blockParams.length; depth < len; depth++) { + var blockParams = this.options.blockParams[depth], + param = blockParams && utils$2.indexOf(blockParams, name); + if (blockParams && param >= 0) { + return [depth, param]; + } + } + } +}; + +function precompile(input, options, env) { + if (input == null || typeof input !== 'string' && input.type !== 'Program') { + throw new _exception2['default']('You must pass a string or Handlebars AST to Handlebars.precompile. You passed ' + input); + } + + options = options || {}; + if (!('data' in options)) { + options.data = true; + } + if (options.compat) { + options.useDepths = true; + } + + var ast = env.parse(input, options), + environment = new env.Compiler().compile(ast, options); + return new env.JavaScriptCompiler().compile(environment, options); +} + +function compile(input, options, env) { + if (options === undefined) options = {}; + + if (input == null || typeof input !== 'string' && input.type !== 'Program') { + throw new _exception2['default']('You must pass a string or Handlebars AST to Handlebars.compile. You passed ' + input); + } + + options = utils$2.extend({}, options); + if (!('data' in options)) { + options.data = true; + } + if (options.compat) { + options.useDepths = true; + } + + var compiled = undefined; + + function compileInput() { + var ast = env.parse(input, options), + environment = new env.Compiler().compile(ast, options), + templateSpec = new env.JavaScriptCompiler().compile(environment, options, undefined, true); + return env.template(templateSpec); + } + + // Template is only compiled on first use and cached after that point. + function ret(context, execOptions) { + if (!compiled) { + compiled = compileInput(); + } + return compiled.call(this, context, execOptions); + } + ret._setup = function (setupOptions) { + if (!compiled) { + compiled = compileInput(); + } + return compiled._setup(setupOptions); + }; + ret._child = function (i, data, blockParams, depths) { + if (!compiled) { + compiled = compileInput(); + } + return compiled._child(i, data, blockParams, depths); + }; + return ret; +} + +function argEquals(a, b) { + if (a === b) { + return true; + } + + if (utils$2.isArray(a) && utils$2.isArray(b) && a.length === b.length) { + for (var i = 0; i < a.length; i++) { + if (!argEquals(a[i], b[i])) { + return false; + } + } + return true; + } +} + +function transformLiteralToPath(sexpr) { + if (!sexpr.path.parts) { + var literal = sexpr.path; + // Casting to string here to make false and 0 literal values play nicely with the rest + // of the system. + sexpr.path = { + type: 'PathExpression', + data: false, + depth: 0, + parts: [literal.original + ''], + original: literal.original + '', + loc: literal.loc + }; + } +} + +}); + +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + +var intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split(''); + +/** + * Encode an integer in the range of 0 to 63 to a single base 64 digit. + */ +var encode = function (number) { + if (0 <= number && number < intToCharMap.length) { + return intToCharMap[number]; + } + throw new TypeError("Must be between 0 and 63: " + number); +}; + +/** + * Decode a single base 64 character code digit to an integer. Returns -1 on + * failure. + */ +var decode = function (charCode) { + var bigA = 65; // 'A' + var bigZ = 90; // 'Z' + + var littleA = 97; // 'a' + var littleZ = 122; // 'z' + + var zero = 48; // '0' + var nine = 57; // '9' + + var plus = 43; // '+' + var slash = 47; // '/' + + var littleOffset = 26; + var numberOffset = 52; + + // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ + if (bigA <= charCode && charCode <= bigZ) { + return (charCode - bigA); + } + + // 26 - 51: abcdefghijklmnopqrstuvwxyz + if (littleA <= charCode && charCode <= littleZ) { + return (charCode - littleA + littleOffset); + } + + // 52 - 61: 0123456789 + if (zero <= charCode && charCode <= nine) { + return (charCode - zero + numberOffset); + } + + // 62: + + if (charCode == plus) { + return 62; + } + + // 63: / + if (charCode == slash) { + return 63; + } + + // Invalid base64 digit. + return -1; +}; + +var base64 = { + encode: encode, + decode: decode +}; + +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + * + * Based on the Base 64 VLQ implementation in Closure Compiler: + * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java + * + * Copyright 2011 The Closure Compiler Authors. All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + + +// A single base 64 digit can contain 6 bits of data. For the base 64 variable +// length quantities we use in the source map spec, the first bit is the sign, +// the next four bits are the actual value, and the 6th bit is the +// continuation bit. The continuation bit tells us whether there are more +// digits in this value following this digit. +// +// Continuation +// | Sign +// | | +// V V +// 101011 + +var VLQ_BASE_SHIFT = 5; + +// binary: 100000 +var VLQ_BASE = 1 << VLQ_BASE_SHIFT; + +// binary: 011111 +var VLQ_BASE_MASK = VLQ_BASE - 1; + +// binary: 100000 +var VLQ_CONTINUATION_BIT = VLQ_BASE; + +/** + * Converts from a two-complement value to a value where the sign bit is + * placed in the least significant bit. For example, as decimals: + * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary) + * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary) + */ +function toVLQSigned(aValue) { + return aValue < 0 + ? ((-aValue) << 1) + 1 + : (aValue << 1) + 0; +} + +/** + * Converts to a two-complement value from a value where the sign bit is + * placed in the least significant bit. For example, as decimals: + * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1 + * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2 + */ +function fromVLQSigned(aValue) { + var isNegative = (aValue & 1) === 1; + var shifted = aValue >> 1; + return isNegative + ? -shifted + : shifted; +} + +/** + * Returns the base 64 VLQ encoded value. + */ +var encode$1 = function base64VLQ_encode(aValue) { + var encoded = ""; + var digit; + + var vlq = toVLQSigned(aValue); + + do { + digit = vlq & VLQ_BASE_MASK; + vlq >>>= VLQ_BASE_SHIFT; + if (vlq > 0) { + // There are still more digits in this value, so we must make sure the + // continuation bit is marked. + digit |= VLQ_CONTINUATION_BIT; + } + encoded += base64.encode(digit); + } while (vlq > 0); + + return encoded; +}; + +/** + * Decodes the next base 64 VLQ value from the given string and returns the + * value and the rest of the string via the out parameter. + */ +var decode$1 = function base64VLQ_decode(aStr, aIndex, aOutParam) { + var strLen = aStr.length; + var result = 0; + var shift = 0; + var continuation, digit; + + do { + if (aIndex >= strLen) { + throw new Error("Expected more digits in base 64 VLQ value."); + } + + digit = base64.decode(aStr.charCodeAt(aIndex++)); + if (digit === -1) { + throw new Error("Invalid base64 digit: " + aStr.charAt(aIndex - 1)); + } + + continuation = !!(digit & VLQ_CONTINUATION_BIT); + digit &= VLQ_BASE_MASK; + result = result + (digit << shift); + shift += VLQ_BASE_SHIFT; + } while (continuation); + + aOutParam.value = fromVLQSigned(result); + aOutParam.rest = aIndex; +}; + +var base64Vlq = { + encode: encode$1, + decode: decode$1 +}; + +var util = createCommonjsModule(function (module, exports) { +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + +/** + * This is a helper function for getting values from parameter/options + * objects. + * + * @param args The object we are extracting values from + * @param name The name of the property we are getting. + * @param defaultValue An optional value to return if the property is missing + * from the object. If this is not specified and the property is missing, an + * error will be thrown. + */ +function getArg(aArgs, aName, aDefaultValue) { + if (aName in aArgs) { + return aArgs[aName]; + } else if (arguments.length === 3) { + return aDefaultValue; + } else { + throw new Error('"' + aName + '" is a required argument.'); + } +} +exports.getArg = getArg; + +var urlRegexp = /^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.-]*)(?::(\d+))?(.*)$/; +var dataUrlRegexp = /^data:.+\,.+$/; + +function urlParse(aUrl) { + var match = aUrl.match(urlRegexp); + if (!match) { + return null; + } + return { + scheme: match[1], + auth: match[2], + host: match[3], + port: match[4], + path: match[5] + }; +} +exports.urlParse = urlParse; + +function urlGenerate(aParsedUrl) { + var url = ''; + if (aParsedUrl.scheme) { + url += aParsedUrl.scheme + ':'; + } + url += '//'; + if (aParsedUrl.auth) { + url += aParsedUrl.auth + '@'; + } + if (aParsedUrl.host) { + url += aParsedUrl.host; + } + if (aParsedUrl.port) { + url += ":" + aParsedUrl.port; + } + if (aParsedUrl.path) { + url += aParsedUrl.path; + } + return url; +} +exports.urlGenerate = urlGenerate; + +/** + * Normalizes a path, or the path portion of a URL: + * + * - Replaces consecutive slashes with one slash. + * - Removes unnecessary '.' parts. + * - Removes unnecessary '/..' parts. + * + * Based on code in the Node.js 'path' core module. + * + * @param aPath The path or url to normalize. + */ +function normalize(aPath) { + var path = aPath; + var url = urlParse(aPath); + if (url) { + if (!url.path) { + return aPath; + } + path = url.path; + } + var isAbsolute = exports.isAbsolute(path); + + var parts = path.split(/\/+/); + for (var part, up = 0, i = parts.length - 1; i >= 0; i--) { + part = parts[i]; + if (part === '.') { + parts.splice(i, 1); + } else if (part === '..') { + up++; + } else if (up > 0) { + if (part === '') { + // The first part is blank if the path is absolute. Trying to go + // above the root is a no-op. Therefore we can remove all '..' parts + // directly after the root. + parts.splice(i + 1, up); + up = 0; + } else { + parts.splice(i, 2); + up--; + } + } + } + path = parts.join('/'); + + if (path === '') { + path = isAbsolute ? '/' : '.'; + } + + if (url) { + url.path = path; + return urlGenerate(url); + } + return path; +} +exports.normalize = normalize; + +/** + * Joins two paths/URLs. + * + * @param aRoot The root path or URL. + * @param aPath The path or URL to be joined with the root. + * + * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a + * scheme-relative URL: Then the scheme of aRoot, if any, is prepended + * first. + * - Otherwise aPath is a path. If aRoot is a URL, then its path portion + * is updated with the result and aRoot is returned. Otherwise the result + * is returned. + * - If aPath is absolute, the result is aPath. + * - Otherwise the two paths are joined with a slash. + * - Joining for example 'http://' and 'www.example.com' is also supported. + */ +function join(aRoot, aPath) { + if (aRoot === "") { + aRoot = "."; + } + if (aPath === "") { + aPath = "."; + } + var aPathUrl = urlParse(aPath); + var aRootUrl = urlParse(aRoot); + if (aRootUrl) { + aRoot = aRootUrl.path || '/'; + } + + // `join(foo, '//www.example.org')` + if (aPathUrl && !aPathUrl.scheme) { + if (aRootUrl) { + aPathUrl.scheme = aRootUrl.scheme; + } + return urlGenerate(aPathUrl); + } + + if (aPathUrl || aPath.match(dataUrlRegexp)) { + return aPath; + } + + // `join('http://', 'www.example.com')` + if (aRootUrl && !aRootUrl.host && !aRootUrl.path) { + aRootUrl.host = aPath; + return urlGenerate(aRootUrl); + } + + var joined = aPath.charAt(0) === '/' + ? aPath + : normalize(aRoot.replace(/\/+$/, '') + '/' + aPath); + + if (aRootUrl) { + aRootUrl.path = joined; + return urlGenerate(aRootUrl); + } + return joined; +} +exports.join = join; + +exports.isAbsolute = function (aPath) { + return aPath.charAt(0) === '/' || urlRegexp.test(aPath); +}; + +/** + * Make a path relative to a URL or another path. + * + * @param aRoot The root path or URL. + * @param aPath The path or URL to be made relative to aRoot. + */ +function relative(aRoot, aPath) { + if (aRoot === "") { + aRoot = "."; + } + + aRoot = aRoot.replace(/\/$/, ''); + + // It is possible for the path to be above the root. In this case, simply + // checking whether the root is a prefix of the path won't work. Instead, we + // need to remove components from the root one by one, until either we find + // a prefix that fits, or we run out of components to remove. + var level = 0; + while (aPath.indexOf(aRoot + '/') !== 0) { + var index = aRoot.lastIndexOf("/"); + if (index < 0) { + return aPath; + } + + // If the only part of the root that is left is the scheme (i.e. http://, + // file:///, etc.), one or more slashes (/), or simply nothing at all, we + // have exhausted all components, so the path is not relative to the root. + aRoot = aRoot.slice(0, index); + if (aRoot.match(/^([^\/]+:\/)?\/*$/)) { + return aPath; + } + + ++level; + } + + // Make sure we add a "../" for each component we removed from the root. + return Array(level + 1).join("../") + aPath.substr(aRoot.length + 1); +} +exports.relative = relative; + +var supportsNullProto = (function () { + var obj = Object.create(null); + return !('__proto__' in obj); +}()); + +function identity (s) { + return s; +} + +/** + * Because behavior goes wacky when you set `__proto__` on objects, we + * have to prefix all the strings in our set with an arbitrary character. + * + * See https://github.com/mozilla/source-map/pull/31 and + * https://github.com/mozilla/source-map/issues/30 + * + * @param String aStr + */ +function toSetString(aStr) { + if (isProtoString(aStr)) { + return '$' + aStr; + } + + return aStr; +} +exports.toSetString = supportsNullProto ? identity : toSetString; + +function fromSetString(aStr) { + if (isProtoString(aStr)) { + return aStr.slice(1); + } + + return aStr; +} +exports.fromSetString = supportsNullProto ? identity : fromSetString; + +function isProtoString(s) { + if (!s) { + return false; + } + + var length = s.length; + + if (length < 9 /* "__proto__".length */) { + return false; + } + + if (s.charCodeAt(length - 1) !== 95 /* '_' */ || + s.charCodeAt(length - 2) !== 95 /* '_' */ || + s.charCodeAt(length - 3) !== 111 /* 'o' */ || + s.charCodeAt(length - 4) !== 116 /* 't' */ || + s.charCodeAt(length - 5) !== 111 /* 'o' */ || + s.charCodeAt(length - 6) !== 114 /* 'r' */ || + s.charCodeAt(length - 7) !== 112 /* 'p' */ || + s.charCodeAt(length - 8) !== 95 /* '_' */ || + s.charCodeAt(length - 9) !== 95 /* '_' */) { + return false; + } + + for (var i = length - 10; i >= 0; i--) { + if (s.charCodeAt(i) !== 36 /* '$' */) { + return false; + } + } + + return true; +} + +/** + * Comparator between two mappings where the original positions are compared. + * + * Optionally pass in `true` as `onlyCompareGenerated` to consider two + * mappings with the same original source/line/column, but different generated + * line and column the same. Useful when searching for a mapping with a + * stubbed out mapping. + */ +function compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) { + var cmp = strcmp(mappingA.source, mappingB.source); + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalLine - mappingB.originalLine; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalColumn - mappingB.originalColumn; + if (cmp !== 0 || onlyCompareOriginal) { + return cmp; + } + + cmp = mappingA.generatedColumn - mappingB.generatedColumn; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.generatedLine - mappingB.generatedLine; + if (cmp !== 0) { + return cmp; + } + + return strcmp(mappingA.name, mappingB.name); +} +exports.compareByOriginalPositions = compareByOriginalPositions; + +/** + * Comparator between two mappings with deflated source and name indices where + * the generated positions are compared. + * + * Optionally pass in `true` as `onlyCompareGenerated` to consider two + * mappings with the same generated line and column, but different + * source/name/original line and column the same. Useful when searching for a + * mapping with a stubbed out mapping. + */ +function compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) { + var cmp = mappingA.generatedLine - mappingB.generatedLine; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.generatedColumn - mappingB.generatedColumn; + if (cmp !== 0 || onlyCompareGenerated) { + return cmp; + } + + cmp = strcmp(mappingA.source, mappingB.source); + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalLine - mappingB.originalLine; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalColumn - mappingB.originalColumn; + if (cmp !== 0) { + return cmp; + } + + return strcmp(mappingA.name, mappingB.name); +} +exports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated; + +function strcmp(aStr1, aStr2) { + if (aStr1 === aStr2) { + return 0; + } + + if (aStr1 === null) { + return 1; // aStr2 !== null + } + + if (aStr2 === null) { + return -1; // aStr1 !== null + } + + if (aStr1 > aStr2) { + return 1; + } + + return -1; +} + +/** + * Comparator between two mappings with inflated source and name strings where + * the generated positions are compared. + */ +function compareByGeneratedPositionsInflated(mappingA, mappingB) { + var cmp = mappingA.generatedLine - mappingB.generatedLine; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.generatedColumn - mappingB.generatedColumn; + if (cmp !== 0) { + return cmp; + } + + cmp = strcmp(mappingA.source, mappingB.source); + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalLine - mappingB.originalLine; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalColumn - mappingB.originalColumn; + if (cmp !== 0) { + return cmp; + } + + return strcmp(mappingA.name, mappingB.name); +} +exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated; + +/** + * Strip any JSON XSSI avoidance prefix from the string (as documented + * in the source maps specification), and then parse the string as + * JSON. + */ +function parseSourceMapInput(str) { + return JSON.parse(str.replace(/^\)]}'[^\n]*\n/, '')); +} +exports.parseSourceMapInput = parseSourceMapInput; + +/** + * Compute the URL of a source given the the source root, the source's + * URL, and the source map's URL. + */ +function computeSourceURL(sourceRoot, sourceURL, sourceMapURL) { + sourceURL = sourceURL || ''; + + if (sourceRoot) { + // This follows what Chrome does. + if (sourceRoot[sourceRoot.length - 1] !== '/' && sourceURL[0] !== '/') { + sourceRoot += '/'; + } + // The spec says: + // Line 4: An optional source root, useful for relocating source + // files on a server or removing repeated values in the + // “sources” entry. This value is prepended to the individual + // entries in the “source” field. + sourceURL = sourceRoot + sourceURL; + } + + // Historically, SourceMapConsumer did not take the sourceMapURL as + // a parameter. This mode is still somewhat supported, which is why + // this code block is conditional. However, it's preferable to pass + // the source map URL to SourceMapConsumer, so that this function + // can implement the source URL resolution algorithm as outlined in + // the spec. This block is basically the equivalent of: + // new URL(sourceURL, sourceMapURL).toString() + // ... except it avoids using URL, which wasn't available in the + // older releases of node still supported by this library. + // + // The spec says: + // If the sources are not absolute URLs after prepending of the + // “sourceRoot”, the sources are resolved relative to the + // SourceMap (like resolving script src in a html document). + if (sourceMapURL) { + var parsed = urlParse(sourceMapURL); + if (!parsed) { + throw new Error("sourceMapURL could not be parsed"); + } + if (parsed.path) { + // Strip the last path component, but keep the "/". + var index = parsed.path.lastIndexOf('/'); + if (index >= 0) { + parsed.path = parsed.path.substring(0, index + 1); + } + } + sourceURL = join(urlGenerate(parsed), sourceURL); + } + + return normalize(sourceURL); +} +exports.computeSourceURL = computeSourceURL; +}); + +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + +var has = Object.prototype.hasOwnProperty; +var hasNativeMap = typeof Map !== "undefined"; + +/** + * A data structure which is a combination of an array and a set. Adding a new + * member is O(1), testing for membership is O(1), and finding the index of an + * element is O(1). Removing elements from the set is not supported. Only + * strings are supported for membership. + */ +function ArraySet() { + this._array = []; + this._set = hasNativeMap ? new Map() : Object.create(null); +} + +/** + * Static method for creating ArraySet instances from an existing array. + */ +ArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) { + var set = new ArraySet(); + for (var i = 0, len = aArray.length; i < len; i++) { + set.add(aArray[i], aAllowDuplicates); + } + return set; +}; + +/** + * Return how many unique items are in this ArraySet. If duplicates have been + * added, than those do not count towards the size. + * + * @returns Number + */ +ArraySet.prototype.size = function ArraySet_size() { + return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length; +}; + +/** + * Add the given string to this set. + * + * @param String aStr + */ +ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) { + var sStr = hasNativeMap ? aStr : util.toSetString(aStr); + var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr); + var idx = this._array.length; + if (!isDuplicate || aAllowDuplicates) { + this._array.push(aStr); + } + if (!isDuplicate) { + if (hasNativeMap) { + this._set.set(aStr, idx); + } else { + this._set[sStr] = idx; + } + } +}; + +/** + * Is the given string a member of this set? + * + * @param String aStr + */ +ArraySet.prototype.has = function ArraySet_has(aStr) { + if (hasNativeMap) { + return this._set.has(aStr); + } else { + var sStr = util.toSetString(aStr); + return has.call(this._set, sStr); + } +}; + +/** + * What is the index of the given string in the array? + * + * @param String aStr + */ +ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) { + if (hasNativeMap) { + var idx = this._set.get(aStr); + if (idx >= 0) { + return idx; + } + } else { + var sStr = util.toSetString(aStr); + if (has.call(this._set, sStr)) { + return this._set[sStr]; + } + } + + throw new Error('"' + aStr + '" is not in the set.'); +}; + +/** + * What is the element at the given index? + * + * @param Number aIdx + */ +ArraySet.prototype.at = function ArraySet_at(aIdx) { + if (aIdx >= 0 && aIdx < this._array.length) { + return this._array[aIdx]; + } + throw new Error('No element indexed by ' + aIdx); +}; + +/** + * Returns the array representation of this set (which has the proper indices + * indicated by indexOf). Note that this is a copy of the internal array used + * for storing the members so that no one can mess with internal state. + */ +ArraySet.prototype.toArray = function ArraySet_toArray() { + return this._array.slice(); +}; + +var ArraySet_1 = ArraySet; + +var arraySet = { + ArraySet: ArraySet_1 +}; + +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2014 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + + +/** + * Determine whether mappingB is after mappingA with respect to generated + * position. + */ +function generatedPositionAfter(mappingA, mappingB) { + // Optimized for most common case + var lineA = mappingA.generatedLine; + var lineB = mappingB.generatedLine; + var columnA = mappingA.generatedColumn; + var columnB = mappingB.generatedColumn; + return lineB > lineA || lineB == lineA && columnB >= columnA || + util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0; +} + +/** + * A data structure to provide a sorted view of accumulated mappings in a + * performance conscious manner. It trades a neglibable overhead in general + * case for a large speedup in case of mappings being added in order. + */ +function MappingList() { + this._array = []; + this._sorted = true; + // Serves as infimum + this._last = {generatedLine: -1, generatedColumn: 0}; +} + +/** + * Iterate through internal items. This method takes the same arguments that + * `Array.prototype.forEach` takes. + * + * NOTE: The order of the mappings is NOT guaranteed. + */ +MappingList.prototype.unsortedForEach = + function MappingList_forEach(aCallback, aThisArg) { + this._array.forEach(aCallback, aThisArg); + }; + +/** + * Add the given source mapping. + * + * @param Object aMapping + */ +MappingList.prototype.add = function MappingList_add(aMapping) { + if (generatedPositionAfter(this._last, aMapping)) { + this._last = aMapping; + this._array.push(aMapping); + } else { + this._sorted = false; + this._array.push(aMapping); + } +}; + +/** + * Returns the flat, sorted array of mappings. The mappings are sorted by + * generated position. + * + * WARNING: This method returns internal data without copying, for + * performance. The return value must NOT be mutated, and should be treated as + * an immutable borrow. If you want to take ownership, you must make your own + * copy. + */ +MappingList.prototype.toArray = function MappingList_toArray() { + if (!this._sorted) { + this._array.sort(util.compareByGeneratedPositionsInflated); + this._sorted = true; + } + return this._array; +}; + +var MappingList_1 = MappingList; + +var mappingList = { + MappingList: MappingList_1 +}; + +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + + +var ArraySet$1 = arraySet.ArraySet; +var MappingList$1 = mappingList.MappingList; + +/** + * An instance of the SourceMapGenerator represents a source map which is + * being built incrementally. You may pass an object with the following + * properties: + * + * - file: The filename of the generated source. + * - sourceRoot: A root for all relative URLs in this source map. + */ +function SourceMapGenerator(aArgs) { + if (!aArgs) { + aArgs = {}; + } + this._file = util.getArg(aArgs, 'file', null); + this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null); + this._skipValidation = util.getArg(aArgs, 'skipValidation', false); + this._sources = new ArraySet$1(); + this._names = new ArraySet$1(); + this._mappings = new MappingList$1(); + this._sourcesContents = null; +} + +SourceMapGenerator.prototype._version = 3; + +/** + * Creates a new SourceMapGenerator based on a SourceMapConsumer + * + * @param aSourceMapConsumer The SourceMap. + */ +SourceMapGenerator.fromSourceMap = + function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) { + var sourceRoot = aSourceMapConsumer.sourceRoot; + var generator = new SourceMapGenerator({ + file: aSourceMapConsumer.file, + sourceRoot: sourceRoot + }); + aSourceMapConsumer.eachMapping(function (mapping) { + var newMapping = { + generated: { + line: mapping.generatedLine, + column: mapping.generatedColumn + } + }; + + if (mapping.source != null) { + newMapping.source = mapping.source; + if (sourceRoot != null) { + newMapping.source = util.relative(sourceRoot, newMapping.source); + } + + newMapping.original = { + line: mapping.originalLine, + column: mapping.originalColumn + }; + + if (mapping.name != null) { + newMapping.name = mapping.name; + } + } + + generator.addMapping(newMapping); + }); + aSourceMapConsumer.sources.forEach(function (sourceFile) { + var sourceRelative = sourceFile; + if (sourceRoot !== null) { + sourceRelative = util.relative(sourceRoot, sourceFile); + } + + if (!generator._sources.has(sourceRelative)) { + generator._sources.add(sourceRelative); + } + + var content = aSourceMapConsumer.sourceContentFor(sourceFile); + if (content != null) { + generator.setSourceContent(sourceFile, content); + } + }); + return generator; + }; + +/** + * Add a single mapping from original source line and column to the generated + * source's line and column for this source map being created. The mapping + * object should have the following properties: + * + * - generated: An object with the generated line and column positions. + * - original: An object with the original line and column positions. + * - source: The original source file (relative to the sourceRoot). + * - name: An optional original token name for this mapping. + */ +SourceMapGenerator.prototype.addMapping = + function SourceMapGenerator_addMapping(aArgs) { + var generated = util.getArg(aArgs, 'generated'); + var original = util.getArg(aArgs, 'original', null); + var source = util.getArg(aArgs, 'source', null); + var name = util.getArg(aArgs, 'name', null); + + if (!this._skipValidation) { + this._validateMapping(generated, original, source, name); + } + + if (source != null) { + source = String(source); + if (!this._sources.has(source)) { + this._sources.add(source); + } + } + + if (name != null) { + name = String(name); + if (!this._names.has(name)) { + this._names.add(name); + } + } + + this._mappings.add({ + generatedLine: generated.line, + generatedColumn: generated.column, + originalLine: original != null && original.line, + originalColumn: original != null && original.column, + source: source, + name: name + }); + }; + +/** + * Set the source content for a source file. + */ +SourceMapGenerator.prototype.setSourceContent = + function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) { + var source = aSourceFile; + if (this._sourceRoot != null) { + source = util.relative(this._sourceRoot, source); + } + + if (aSourceContent != null) { + // Add the source content to the _sourcesContents map. + // Create a new _sourcesContents map if the property is null. + if (!this._sourcesContents) { + this._sourcesContents = Object.create(null); + } + this._sourcesContents[util.toSetString(source)] = aSourceContent; + } else if (this._sourcesContents) { + // Remove the source file from the _sourcesContents map. + // If the _sourcesContents map is empty, set the property to null. + delete this._sourcesContents[util.toSetString(source)]; + if (Object.keys(this._sourcesContents).length === 0) { + this._sourcesContents = null; + } + } + }; + +/** + * Applies the mappings of a sub-source-map for a specific source file to the + * source map being generated. Each mapping to the supplied source file is + * rewritten using the supplied source map. Note: The resolution for the + * resulting mappings is the minimium of this map and the supplied map. + * + * @param aSourceMapConsumer The source map to be applied. + * @param aSourceFile Optional. The filename of the source file. + * If omitted, SourceMapConsumer's file property will be used. + * @param aSourceMapPath Optional. The dirname of the path to the source map + * to be applied. If relative, it is relative to the SourceMapConsumer. + * This parameter is needed when the two source maps aren't in the same + * directory, and the source map to be applied contains relative source + * paths. If so, those relative source paths need to be rewritten + * relative to the SourceMapGenerator. + */ +SourceMapGenerator.prototype.applySourceMap = + function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) { + var sourceFile = aSourceFile; + // If aSourceFile is omitted, we will use the file property of the SourceMap + if (aSourceFile == null) { + if (aSourceMapConsumer.file == null) { + throw new Error( + 'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' + + 'or the source map\'s "file" property. Both were omitted.' + ); + } + sourceFile = aSourceMapConsumer.file; + } + var sourceRoot = this._sourceRoot; + // Make "sourceFile" relative if an absolute Url is passed. + if (sourceRoot != null) { + sourceFile = util.relative(sourceRoot, sourceFile); + } + // Applying the SourceMap can add and remove items from the sources and + // the names array. + var newSources = new ArraySet$1(); + var newNames = new ArraySet$1(); + + // Find mappings for the "sourceFile" + this._mappings.unsortedForEach(function (mapping) { + if (mapping.source === sourceFile && mapping.originalLine != null) { + // Check if it can be mapped by the source map, then update the mapping. + var original = aSourceMapConsumer.originalPositionFor({ + line: mapping.originalLine, + column: mapping.originalColumn + }); + if (original.source != null) { + // Copy mapping + mapping.source = original.source; + if (aSourceMapPath != null) { + mapping.source = util.join(aSourceMapPath, mapping.source); + } + if (sourceRoot != null) { + mapping.source = util.relative(sourceRoot, mapping.source); + } + mapping.originalLine = original.line; + mapping.originalColumn = original.column; + if (original.name != null) { + mapping.name = original.name; + } + } + } + + var source = mapping.source; + if (source != null && !newSources.has(source)) { + newSources.add(source); + } + + var name = mapping.name; + if (name != null && !newNames.has(name)) { + newNames.add(name); + } + + }, this); + this._sources = newSources; + this._names = newNames; + + // Copy sourcesContents of applied map. + aSourceMapConsumer.sources.forEach(function (sourceFile) { + var content = aSourceMapConsumer.sourceContentFor(sourceFile); + if (content != null) { + if (aSourceMapPath != null) { + sourceFile = util.join(aSourceMapPath, sourceFile); + } + if (sourceRoot != null) { + sourceFile = util.relative(sourceRoot, sourceFile); + } + this.setSourceContent(sourceFile, content); + } + }, this); + }; + +/** + * A mapping can have one of the three levels of data: + * + * 1. Just the generated position. + * 2. The Generated position, original position, and original source. + * 3. Generated and original position, original source, as well as a name + * token. + * + * To maintain consistency, we validate that any new mapping being added falls + * in to one of these categories. + */ +SourceMapGenerator.prototype._validateMapping = + function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource, + aName) { + // When aOriginal is truthy but has empty values for .line and .column, + // it is most likely a programmer error. In this case we throw a very + // specific error message to try to guide them the right way. + // For example: https://github.com/Polymer/polymer-bundler/pull/519 + if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') { + throw new Error( + 'original.line and original.column are not numbers -- you probably meant to omit ' + + 'the original mapping entirely and only map the generated position. If so, pass ' + + 'null for the original mapping instead of an object with empty or null values.' + ); + } + + if (aGenerated && 'line' in aGenerated && 'column' in aGenerated + && aGenerated.line > 0 && aGenerated.column >= 0 + && !aOriginal && !aSource && !aName) { + // Case 1. + return; + } + else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated + && aOriginal && 'line' in aOriginal && 'column' in aOriginal + && aGenerated.line > 0 && aGenerated.column >= 0 + && aOriginal.line > 0 && aOriginal.column >= 0 + && aSource) { + // Cases 2 and 3. + return; + } + else { + throw new Error('Invalid mapping: ' + JSON.stringify({ + generated: aGenerated, + source: aSource, + original: aOriginal, + name: aName + })); + } + }; + +/** + * Serialize the accumulated mappings in to the stream of base 64 VLQs + * specified by the source map format. + */ +SourceMapGenerator.prototype._serializeMappings = + function SourceMapGenerator_serializeMappings() { + var previousGeneratedColumn = 0; + var previousGeneratedLine = 1; + var previousOriginalColumn = 0; + var previousOriginalLine = 0; + var previousName = 0; + var previousSource = 0; + var result = ''; + var next; + var mapping; + var nameIdx; + var sourceIdx; + + var mappings = this._mappings.toArray(); + for (var i = 0, len = mappings.length; i < len; i++) { + mapping = mappings[i]; + next = ''; + + if (mapping.generatedLine !== previousGeneratedLine) { + previousGeneratedColumn = 0; + while (mapping.generatedLine !== previousGeneratedLine) { + next += ';'; + previousGeneratedLine++; + } + } + else { + if (i > 0) { + if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) { + continue; + } + next += ','; + } + } + + next += base64Vlq.encode(mapping.generatedColumn + - previousGeneratedColumn); + previousGeneratedColumn = mapping.generatedColumn; + + if (mapping.source != null) { + sourceIdx = this._sources.indexOf(mapping.source); + next += base64Vlq.encode(sourceIdx - previousSource); + previousSource = sourceIdx; + + // lines are stored 0-based in SourceMap spec version 3 + next += base64Vlq.encode(mapping.originalLine - 1 + - previousOriginalLine); + previousOriginalLine = mapping.originalLine - 1; + + next += base64Vlq.encode(mapping.originalColumn + - previousOriginalColumn); + previousOriginalColumn = mapping.originalColumn; + + if (mapping.name != null) { + nameIdx = this._names.indexOf(mapping.name); + next += base64Vlq.encode(nameIdx - previousName); + previousName = nameIdx; + } + } + + result += next; + } + + return result; + }; + +SourceMapGenerator.prototype._generateSourcesContent = + function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) { + return aSources.map(function (source) { + if (!this._sourcesContents) { + return null; + } + if (aSourceRoot != null) { + source = util.relative(aSourceRoot, source); + } + var key = util.toSetString(source); + return Object.prototype.hasOwnProperty.call(this._sourcesContents, key) + ? this._sourcesContents[key] + : null; + }, this); + }; + +/** + * Externalize the source map. + */ +SourceMapGenerator.prototype.toJSON = + function SourceMapGenerator_toJSON() { + var map = { + version: this._version, + sources: this._sources.toArray(), + names: this._names.toArray(), + mappings: this._serializeMappings() + }; + if (this._file != null) { + map.file = this._file; + } + if (this._sourceRoot != null) { + map.sourceRoot = this._sourceRoot; + } + if (this._sourcesContents) { + map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot); + } + + return map; + }; + +/** + * Render the source map being generated to a string. + */ +SourceMapGenerator.prototype.toString = + function SourceMapGenerator_toString() { + return JSON.stringify(this.toJSON()); + }; + +var SourceMapGenerator_1 = SourceMapGenerator; + +var sourceMapGenerator = { + SourceMapGenerator: SourceMapGenerator_1 +}; + +var binarySearch = createCommonjsModule(function (module, exports) { +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + +exports.GREATEST_LOWER_BOUND = 1; +exports.LEAST_UPPER_BOUND = 2; + +/** + * Recursive implementation of binary search. + * + * @param aLow Indices here and lower do not contain the needle. + * @param aHigh Indices here and higher do not contain the needle. + * @param aNeedle The element being searched for. + * @param aHaystack The non-empty array being searched. + * @param aCompare Function which takes two elements and returns -1, 0, or 1. + * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or + * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the + * closest element that is smaller than or greater than the one we are + * searching for, respectively, if the exact element cannot be found. + */ +function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) { + // This function terminates when one of the following is true: + // + // 1. We find the exact element we are looking for. + // + // 2. We did not find the exact element, but we can return the index of + // the next-closest element. + // + // 3. We did not find the exact element, and there is no next-closest + // element than the one we are searching for, so we return -1. + var mid = Math.floor((aHigh - aLow) / 2) + aLow; + var cmp = aCompare(aNeedle, aHaystack[mid], true); + if (cmp === 0) { + // Found the element we are looking for. + return mid; + } + else if (cmp > 0) { + // Our needle is greater than aHaystack[mid]. + if (aHigh - mid > 1) { + // The element is in the upper half. + return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias); + } + + // The exact needle element was not found in this haystack. Determine if + // we are in termination case (3) or (2) and return the appropriate thing. + if (aBias == exports.LEAST_UPPER_BOUND) { + return aHigh < aHaystack.length ? aHigh : -1; + } else { + return mid; + } + } + else { + // Our needle is less than aHaystack[mid]. + if (mid - aLow > 1) { + // The element is in the lower half. + return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias); + } + + // we are in termination case (3) or (2) and return the appropriate thing. + if (aBias == exports.LEAST_UPPER_BOUND) { + return mid; + } else { + return aLow < 0 ? -1 : aLow; + } + } +} + +/** + * This is an implementation of binary search which will always try and return + * the index of the closest element if there is no exact hit. This is because + * mappings between original and generated line/col pairs are single points, + * and there is an implicit region between each of them, so a miss just means + * that you aren't on the very start of a region. + * + * @param aNeedle The element you are looking for. + * @param aHaystack The array that is being searched. + * @param aCompare A function which takes the needle and an element in the + * array and returns -1, 0, or 1 depending on whether the needle is less + * than, equal to, or greater than the element, respectively. + * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or + * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the + * closest element that is smaller than or greater than the one we are + * searching for, respectively, if the exact element cannot be found. + * Defaults to 'binarySearch.GREATEST_LOWER_BOUND'. + */ +exports.search = function search(aNeedle, aHaystack, aCompare, aBias) { + if (aHaystack.length === 0) { + return -1; + } + + var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack, + aCompare, aBias || exports.GREATEST_LOWER_BOUND); + if (index < 0) { + return -1; + } + + // We have found either the exact element, or the next-closest element than + // the one we are searching for. However, there may be more than one such + // element. Make sure we always return the smallest of these. + while (index - 1 >= 0) { + if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) { + break; + } + --index; + } + + return index; +}; +}); + +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + +// It turns out that some (most?) JavaScript engines don't self-host +// `Array.prototype.sort`. This makes sense because C++ will likely remain +// faster than JS when doing raw CPU-intensive sorting. However, when using a +// custom comparator function, calling back and forth between the VM's C++ and +// JIT'd JS is rather slow *and* loses JIT type information, resulting in +// worse generated code for the comparator function than would be optimal. In +// fact, when sorting with a comparator, these costs outweigh the benefits of +// sorting in C++. By using our own JS-implemented Quick Sort (below), we get +// a ~3500ms mean speed-up in `bench/bench.html`. + +/** + * Swap the elements indexed by `x` and `y` in the array `ary`. + * + * @param {Array} ary + * The array. + * @param {Number} x + * The index of the first item. + * @param {Number} y + * The index of the second item. + */ +function swap(ary, x, y) { + var temp = ary[x]; + ary[x] = ary[y]; + ary[y] = temp; +} + +/** + * Returns a random integer within the range `low .. high` inclusive. + * + * @param {Number} low + * The lower bound on the range. + * @param {Number} high + * The upper bound on the range. + */ +function randomIntInRange(low, high) { + return Math.round(low + (Math.random() * (high - low))); +} + +/** + * The Quick Sort algorithm. + * + * @param {Array} ary + * An array to sort. + * @param {function} comparator + * Function to use to compare two items. + * @param {Number} p + * Start index of the array + * @param {Number} r + * End index of the array + */ +function doQuickSort(ary, comparator, p, r) { + // If our lower bound is less than our upper bound, we (1) partition the + // array into two pieces and (2) recurse on each half. If it is not, this is + // the empty array and our base case. + + if (p < r) { + // (1) Partitioning. + // + // The partitioning chooses a pivot between `p` and `r` and moves all + // elements that are less than or equal to the pivot to the before it, and + // all the elements that are greater than it after it. The effect is that + // once partition is done, the pivot is in the exact place it will be when + // the array is put in sorted order, and it will not need to be moved + // again. This runs in O(n) time. + + // Always choose a random pivot so that an input array which is reverse + // sorted does not cause O(n^2) running time. + var pivotIndex = randomIntInRange(p, r); + var i = p - 1; + + swap(ary, pivotIndex, r); + var pivot = ary[r]; + + // Immediately after `j` is incremented in this loop, the following hold + // true: + // + // * Every element in `ary[p .. i]` is less than or equal to the pivot. + // + // * Every element in `ary[i+1 .. j-1]` is greater than the pivot. + for (var j = p; j < r; j++) { + if (comparator(ary[j], pivot) <= 0) { + i += 1; + swap(ary, i, j); + } + } + + swap(ary, i + 1, j); + var q = i + 1; + + // (2) Recurse on each half. + + doQuickSort(ary, comparator, p, q - 1); + doQuickSort(ary, comparator, q + 1, r); + } +} + +/** + * Sort the given array in-place with the given comparator function. + * + * @param {Array} ary + * An array to sort. + * @param {function} comparator + * Function to use to compare two items. + */ +var quickSort_1 = function (ary, comparator) { + doQuickSort(ary, comparator, 0, ary.length - 1); +}; + +var quickSort = { + quickSort: quickSort_1 +}; + +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + + +var ArraySet$2 = arraySet.ArraySet; + +var quickSort$1 = quickSort.quickSort; + +function SourceMapConsumer(aSourceMap, aSourceMapURL) { + var sourceMap = aSourceMap; + if (typeof aSourceMap === 'string') { + sourceMap = util.parseSourceMapInput(aSourceMap); + } + + return sourceMap.sections != null + ? new IndexedSourceMapConsumer(sourceMap, aSourceMapURL) + : new BasicSourceMapConsumer(sourceMap, aSourceMapURL); +} + +SourceMapConsumer.fromSourceMap = function(aSourceMap, aSourceMapURL) { + return BasicSourceMapConsumer.fromSourceMap(aSourceMap, aSourceMapURL); +}; + +/** + * The version of the source mapping spec that we are consuming. + */ +SourceMapConsumer.prototype._version = 3; + +// `__generatedMappings` and `__originalMappings` are arrays that hold the +// parsed mapping coordinates from the source map's "mappings" attribute. They +// are lazily instantiated, accessed via the `_generatedMappings` and +// `_originalMappings` getters respectively, and we only parse the mappings +// and create these arrays once queried for a source location. We jump through +// these hoops because there can be many thousands of mappings, and parsing +// them is expensive, so we only want to do it if we must. +// +// Each object in the arrays is of the form: +// +// { +// generatedLine: The line number in the generated code, +// generatedColumn: The column number in the generated code, +// source: The path to the original source file that generated this +// chunk of code, +// originalLine: The line number in the original source that +// corresponds to this chunk of generated code, +// originalColumn: The column number in the original source that +// corresponds to this chunk of generated code, +// name: The name of the original symbol which generated this chunk of +// code. +// } +// +// All properties except for `generatedLine` and `generatedColumn` can be +// `null`. +// +// `_generatedMappings` is ordered by the generated positions. +// +// `_originalMappings` is ordered by the original positions. + +SourceMapConsumer.prototype.__generatedMappings = null; +Object.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', { + configurable: true, + enumerable: true, + get: function () { + if (!this.__generatedMappings) { + this._parseMappings(this._mappings, this.sourceRoot); + } + + return this.__generatedMappings; + } +}); + +SourceMapConsumer.prototype.__originalMappings = null; +Object.defineProperty(SourceMapConsumer.prototype, '_originalMappings', { + configurable: true, + enumerable: true, + get: function () { + if (!this.__originalMappings) { + this._parseMappings(this._mappings, this.sourceRoot); + } + + return this.__originalMappings; + } +}); + +SourceMapConsumer.prototype._charIsMappingSeparator = + function SourceMapConsumer_charIsMappingSeparator(aStr, index) { + var c = aStr.charAt(index); + return c === ";" || c === ","; + }; + +/** + * Parse the mappings in a string in to a data structure which we can easily + * query (the ordered arrays in the `this.__generatedMappings` and + * `this.__originalMappings` properties). + */ +SourceMapConsumer.prototype._parseMappings = + function SourceMapConsumer_parseMappings(aStr, aSourceRoot) { + throw new Error("Subclasses must implement _parseMappings"); + }; + +SourceMapConsumer.GENERATED_ORDER = 1; +SourceMapConsumer.ORIGINAL_ORDER = 2; + +SourceMapConsumer.GREATEST_LOWER_BOUND = 1; +SourceMapConsumer.LEAST_UPPER_BOUND = 2; + +/** + * Iterate over each mapping between an original source/line/column and a + * generated line/column in this source map. + * + * @param Function aCallback + * The function that is called with each mapping. + * @param Object aContext + * Optional. If specified, this object will be the value of `this` every + * time that `aCallback` is called. + * @param aOrder + * Either `SourceMapConsumer.GENERATED_ORDER` or + * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to + * iterate over the mappings sorted by the generated file's line/column + * order or the original's source/line/column order, respectively. Defaults to + * `SourceMapConsumer.GENERATED_ORDER`. + */ +SourceMapConsumer.prototype.eachMapping = + function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) { + var context = aContext || null; + var order = aOrder || SourceMapConsumer.GENERATED_ORDER; + + var mappings; + switch (order) { + case SourceMapConsumer.GENERATED_ORDER: + mappings = this._generatedMappings; + break; + case SourceMapConsumer.ORIGINAL_ORDER: + mappings = this._originalMappings; + break; + default: + throw new Error("Unknown order of iteration."); + } + + var sourceRoot = this.sourceRoot; + mappings.map(function (mapping) { + var source = mapping.source === null ? null : this._sources.at(mapping.source); + source = util.computeSourceURL(sourceRoot, source, this._sourceMapURL); + return { + source: source, + generatedLine: mapping.generatedLine, + generatedColumn: mapping.generatedColumn, + originalLine: mapping.originalLine, + originalColumn: mapping.originalColumn, + name: mapping.name === null ? null : this._names.at(mapping.name) + }; + }, this).forEach(aCallback, context); + }; + +/** + * Returns all generated line and column information for the original source, + * line, and column provided. If no column is provided, returns all mappings + * corresponding to a either the line we are searching for or the next + * closest line that has any mappings. Otherwise, returns all mappings + * corresponding to the given line and either the column we are searching for + * or the next closest column that has any offsets. + * + * The only argument is an object with the following properties: + * + * - source: The filename of the original source. + * - line: The line number in the original source. The line number is 1-based. + * - column: Optional. the column number in the original source. + * The column number is 0-based. + * + * and an array of objects is returned, each with the following properties: + * + * - line: The line number in the generated source, or null. The + * line number is 1-based. + * - column: The column number in the generated source, or null. + * The column number is 0-based. + */ +SourceMapConsumer.prototype.allGeneratedPositionsFor = + function SourceMapConsumer_allGeneratedPositionsFor(aArgs) { + var line = util.getArg(aArgs, 'line'); + + // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping + // returns the index of the closest mapping less than the needle. By + // setting needle.originalColumn to 0, we thus find the last mapping for + // the given line, provided such a mapping exists. + var needle = { + source: util.getArg(aArgs, 'source'), + originalLine: line, + originalColumn: util.getArg(aArgs, 'column', 0) + }; + + needle.source = this._findSourceIndex(needle.source); + if (needle.source < 0) { + return []; + } + + var mappings = []; + + var index = this._findMapping(needle, + this._originalMappings, + "originalLine", + "originalColumn", + util.compareByOriginalPositions, + binarySearch.LEAST_UPPER_BOUND); + if (index >= 0) { + var mapping = this._originalMappings[index]; + + if (aArgs.column === undefined) { + var originalLine = mapping.originalLine; + + // Iterate until either we run out of mappings, or we run into + // a mapping for a different line than the one we found. Since + // mappings are sorted, this is guaranteed to find all mappings for + // the line we found. + while (mapping && mapping.originalLine === originalLine) { + mappings.push({ + line: util.getArg(mapping, 'generatedLine', null), + column: util.getArg(mapping, 'generatedColumn', null), + lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) + }); + + mapping = this._originalMappings[++index]; + } + } else { + var originalColumn = mapping.originalColumn; + + // Iterate until either we run out of mappings, or we run into + // a mapping for a different line than the one we were searching for. + // Since mappings are sorted, this is guaranteed to find all mappings for + // the line we are searching for. + while (mapping && + mapping.originalLine === line && + mapping.originalColumn == originalColumn) { + mappings.push({ + line: util.getArg(mapping, 'generatedLine', null), + column: util.getArg(mapping, 'generatedColumn', null), + lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) + }); + + mapping = this._originalMappings[++index]; + } + } + } + + return mappings; + }; + +var SourceMapConsumer_1 = SourceMapConsumer; + +/** + * A BasicSourceMapConsumer instance represents a parsed source map which we can + * query for information about the original file positions by giving it a file + * position in the generated source. + * + * The first parameter is the raw source map (either as a JSON string, or + * already parsed to an object). According to the spec, source maps have the + * following attributes: + * + * - version: Which version of the source map spec this map is following. + * - sources: An array of URLs to the original source files. + * - names: An array of identifiers which can be referrenced by individual mappings. + * - sourceRoot: Optional. The URL root from which all sources are relative. + * - sourcesContent: Optional. An array of contents of the original source files. + * - mappings: A string of base64 VLQs which contain the actual mappings. + * - file: Optional. The generated file this source map is associated with. + * + * Here is an example source map, taken from the source map spec[0]: + * + * { + * version : 3, + * file: "out.js", + * sourceRoot : "", + * sources: ["foo.js", "bar.js"], + * names: ["src", "maps", "are", "fun"], + * mappings: "AA,AB;;ABCDE;" + * } + * + * The second parameter, if given, is a string whose value is the URL + * at which the source map was found. This URL is used to compute the + * sources array. + * + * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1# + */ +function BasicSourceMapConsumer(aSourceMap, aSourceMapURL) { + var sourceMap = aSourceMap; + if (typeof aSourceMap === 'string') { + sourceMap = util.parseSourceMapInput(aSourceMap); + } + + var version = util.getArg(sourceMap, 'version'); + var sources = util.getArg(sourceMap, 'sources'); + // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which + // requires the array) to play nice here. + var names = util.getArg(sourceMap, 'names', []); + var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null); + var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null); + var mappings = util.getArg(sourceMap, 'mappings'); + var file = util.getArg(sourceMap, 'file', null); + + // Once again, Sass deviates from the spec and supplies the version as a + // string rather than a number, so we use loose equality checking here. + if (version != this._version) { + throw new Error('Unsupported version: ' + version); + } + + if (sourceRoot) { + sourceRoot = util.normalize(sourceRoot); + } + + sources = sources + .map(String) + // Some source maps produce relative source paths like "./foo.js" instead of + // "foo.js". Normalize these first so that future comparisons will succeed. + // See bugzil.la/1090768. + .map(util.normalize) + // Always ensure that absolute sources are internally stored relative to + // the source root, if the source root is absolute. Not doing this would + // be particularly problematic when the source root is a prefix of the + // source (valid, but why??). See github issue #199 and bugzil.la/1188982. + .map(function (source) { + return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source) + ? util.relative(sourceRoot, source) + : source; + }); + + // Pass `true` below to allow duplicate names and sources. While source maps + // are intended to be compressed and deduplicated, the TypeScript compiler + // sometimes generates source maps with duplicates in them. See Github issue + // #72 and bugzil.la/889492. + this._names = ArraySet$2.fromArray(names.map(String), true); + this._sources = ArraySet$2.fromArray(sources, true); + + this._absoluteSources = this._sources.toArray().map(function (s) { + return util.computeSourceURL(sourceRoot, s, aSourceMapURL); + }); + + this.sourceRoot = sourceRoot; + this.sourcesContent = sourcesContent; + this._mappings = mappings; + this._sourceMapURL = aSourceMapURL; + this.file = file; +} + +BasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype); +BasicSourceMapConsumer.prototype.consumer = SourceMapConsumer; + +/** + * Utility function to find the index of a source. Returns -1 if not + * found. + */ +BasicSourceMapConsumer.prototype._findSourceIndex = function(aSource) { + var relativeSource = aSource; + if (this.sourceRoot != null) { + relativeSource = util.relative(this.sourceRoot, relativeSource); + } + + if (this._sources.has(relativeSource)) { + return this._sources.indexOf(relativeSource); + } + + // Maybe aSource is an absolute URL as returned by |sources|. In + // this case we can't simply undo the transform. + var i; + for (i = 0; i < this._absoluteSources.length; ++i) { + if (this._absoluteSources[i] == aSource) { + return i; + } + } + + return -1; +}; + +/** + * Create a BasicSourceMapConsumer from a SourceMapGenerator. + * + * @param SourceMapGenerator aSourceMap + * The source map that will be consumed. + * @param String aSourceMapURL + * The URL at which the source map can be found (optional) + * @returns BasicSourceMapConsumer + */ +BasicSourceMapConsumer.fromSourceMap = + function SourceMapConsumer_fromSourceMap(aSourceMap, aSourceMapURL) { + var smc = Object.create(BasicSourceMapConsumer.prototype); + + var names = smc._names = ArraySet$2.fromArray(aSourceMap._names.toArray(), true); + var sources = smc._sources = ArraySet$2.fromArray(aSourceMap._sources.toArray(), true); + smc.sourceRoot = aSourceMap._sourceRoot; + smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(), + smc.sourceRoot); + smc.file = aSourceMap._file; + smc._sourceMapURL = aSourceMapURL; + smc._absoluteSources = smc._sources.toArray().map(function (s) { + return util.computeSourceURL(smc.sourceRoot, s, aSourceMapURL); + }); + + // Because we are modifying the entries (by converting string sources and + // names to indices into the sources and names ArraySets), we have to make + // a copy of the entry or else bad things happen. Shared mutable state + // strikes again! See github issue #191. + + var generatedMappings = aSourceMap._mappings.toArray().slice(); + var destGeneratedMappings = smc.__generatedMappings = []; + var destOriginalMappings = smc.__originalMappings = []; + + for (var i = 0, length = generatedMappings.length; i < length; i++) { + var srcMapping = generatedMappings[i]; + var destMapping = new Mapping; + destMapping.generatedLine = srcMapping.generatedLine; + destMapping.generatedColumn = srcMapping.generatedColumn; + + if (srcMapping.source) { + destMapping.source = sources.indexOf(srcMapping.source); + destMapping.originalLine = srcMapping.originalLine; + destMapping.originalColumn = srcMapping.originalColumn; + + if (srcMapping.name) { + destMapping.name = names.indexOf(srcMapping.name); + } + + destOriginalMappings.push(destMapping); + } + + destGeneratedMappings.push(destMapping); + } + + quickSort$1(smc.__originalMappings, util.compareByOriginalPositions); + + return smc; + }; + +/** + * The version of the source mapping spec that we are consuming. + */ +BasicSourceMapConsumer.prototype._version = 3; + +/** + * The list of original sources. + */ +Object.defineProperty(BasicSourceMapConsumer.prototype, 'sources', { + get: function () { + return this._absoluteSources.slice(); + } +}); + +/** + * Provide the JIT with a nice shape / hidden class. + */ +function Mapping() { + this.generatedLine = 0; + this.generatedColumn = 0; + this.source = null; + this.originalLine = null; + this.originalColumn = null; + this.name = null; +} + +/** + * Parse the mappings in a string in to a data structure which we can easily + * query (the ordered arrays in the `this.__generatedMappings` and + * `this.__originalMappings` properties). + */ +BasicSourceMapConsumer.prototype._parseMappings = + function SourceMapConsumer_parseMappings(aStr, aSourceRoot) { + var generatedLine = 1; + var previousGeneratedColumn = 0; + var previousOriginalLine = 0; + var previousOriginalColumn = 0; + var previousSource = 0; + var previousName = 0; + var length = aStr.length; + var index = 0; + var cachedSegments = {}; + var temp = {}; + var originalMappings = []; + var generatedMappings = []; + var mapping, str, segment, end, value; + + while (index < length) { + if (aStr.charAt(index) === ';') { + generatedLine++; + index++; + previousGeneratedColumn = 0; + } + else if (aStr.charAt(index) === ',') { + index++; + } + else { + mapping = new Mapping(); + mapping.generatedLine = generatedLine; + + // Because each offset is encoded relative to the previous one, + // many segments often have the same encoding. We can exploit this + // fact by caching the parsed variable length fields of each segment, + // allowing us to avoid a second parse if we encounter the same + // segment again. + for (end = index; end < length; end++) { + if (this._charIsMappingSeparator(aStr, end)) { + break; + } + } + str = aStr.slice(index, end); + + segment = cachedSegments[str]; + if (segment) { + index += str.length; + } else { + segment = []; + while (index < end) { + base64Vlq.decode(aStr, index, temp); + value = temp.value; + index = temp.rest; + segment.push(value); + } + + if (segment.length === 2) { + throw new Error('Found a source, but no line and column'); + } + + if (segment.length === 3) { + throw new Error('Found a source and line, but no column'); + } + + cachedSegments[str] = segment; + } + + // Generated column. + mapping.generatedColumn = previousGeneratedColumn + segment[0]; + previousGeneratedColumn = mapping.generatedColumn; + + if (segment.length > 1) { + // Original source. + mapping.source = previousSource + segment[1]; + previousSource += segment[1]; + + // Original line. + mapping.originalLine = previousOriginalLine + segment[2]; + previousOriginalLine = mapping.originalLine; + // Lines are stored 0-based + mapping.originalLine += 1; + + // Original column. + mapping.originalColumn = previousOriginalColumn + segment[3]; + previousOriginalColumn = mapping.originalColumn; + + if (segment.length > 4) { + // Original name. + mapping.name = previousName + segment[4]; + previousName += segment[4]; + } + } + + generatedMappings.push(mapping); + if (typeof mapping.originalLine === 'number') { + originalMappings.push(mapping); + } + } + } + + quickSort$1(generatedMappings, util.compareByGeneratedPositionsDeflated); + this.__generatedMappings = generatedMappings; + + quickSort$1(originalMappings, util.compareByOriginalPositions); + this.__originalMappings = originalMappings; + }; + +/** + * Find the mapping that best matches the hypothetical "needle" mapping that + * we are searching for in the given "haystack" of mappings. + */ +BasicSourceMapConsumer.prototype._findMapping = + function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName, + aColumnName, aComparator, aBias) { + // To return the position we are searching for, we must first find the + // mapping for the given position and then return the opposite position it + // points to. Because the mappings are sorted, we can use binary search to + // find the best mapping. + + if (aNeedle[aLineName] <= 0) { + throw new TypeError('Line must be greater than or equal to 1, got ' + + aNeedle[aLineName]); + } + if (aNeedle[aColumnName] < 0) { + throw new TypeError('Column must be greater than or equal to 0, got ' + + aNeedle[aColumnName]); + } + + return binarySearch.search(aNeedle, aMappings, aComparator, aBias); + }; + +/** + * Compute the last column for each generated mapping. The last column is + * inclusive. + */ +BasicSourceMapConsumer.prototype.computeColumnSpans = + function SourceMapConsumer_computeColumnSpans() { + for (var index = 0; index < this._generatedMappings.length; ++index) { + var mapping = this._generatedMappings[index]; + + // Mappings do not contain a field for the last generated columnt. We + // can come up with an optimistic estimate, however, by assuming that + // mappings are contiguous (i.e. given two consecutive mappings, the + // first mapping ends where the second one starts). + if (index + 1 < this._generatedMappings.length) { + var nextMapping = this._generatedMappings[index + 1]; + + if (mapping.generatedLine === nextMapping.generatedLine) { + mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1; + continue; + } + } + + // The last mapping for each line spans the entire line. + mapping.lastGeneratedColumn = Infinity; + } + }; + +/** + * Returns the original source, line, and column information for the generated + * source's line and column positions provided. The only argument is an object + * with the following properties: + * + * - line: The line number in the generated source. The line number + * is 1-based. + * - column: The column number in the generated source. The column + * number is 0-based. + * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or + * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the + * closest element that is smaller than or greater than the one we are + * searching for, respectively, if the exact element cannot be found. + * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'. + * + * and an object is returned with the following properties: + * + * - source: The original source file, or null. + * - line: The line number in the original source, or null. The + * line number is 1-based. + * - column: The column number in the original source, or null. The + * column number is 0-based. + * - name: The original identifier, or null. + */ +BasicSourceMapConsumer.prototype.originalPositionFor = + function SourceMapConsumer_originalPositionFor(aArgs) { + var needle = { + generatedLine: util.getArg(aArgs, 'line'), + generatedColumn: util.getArg(aArgs, 'column') + }; + + var index = this._findMapping( + needle, + this._generatedMappings, + "generatedLine", + "generatedColumn", + util.compareByGeneratedPositionsDeflated, + util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND) + ); + + if (index >= 0) { + var mapping = this._generatedMappings[index]; + + if (mapping.generatedLine === needle.generatedLine) { + var source = util.getArg(mapping, 'source', null); + if (source !== null) { + source = this._sources.at(source); + source = util.computeSourceURL(this.sourceRoot, source, this._sourceMapURL); + } + var name = util.getArg(mapping, 'name', null); + if (name !== null) { + name = this._names.at(name); + } + return { + source: source, + line: util.getArg(mapping, 'originalLine', null), + column: util.getArg(mapping, 'originalColumn', null), + name: name + }; + } + } + + return { + source: null, + line: null, + column: null, + name: null + }; + }; + +/** + * Return true if we have the source content for every source in the source + * map, false otherwise. + */ +BasicSourceMapConsumer.prototype.hasContentsOfAllSources = + function BasicSourceMapConsumer_hasContentsOfAllSources() { + if (!this.sourcesContent) { + return false; + } + return this.sourcesContent.length >= this._sources.size() && + !this.sourcesContent.some(function (sc) { return sc == null; }); + }; + +/** + * Returns the original source content. The only argument is the url of the + * original source file. Returns null if no original source content is + * available. + */ +BasicSourceMapConsumer.prototype.sourceContentFor = + function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) { + if (!this.sourcesContent) { + return null; + } + + var index = this._findSourceIndex(aSource); + if (index >= 0) { + return this.sourcesContent[index]; + } + + var relativeSource = aSource; + if (this.sourceRoot != null) { + relativeSource = util.relative(this.sourceRoot, relativeSource); + } + + var url; + if (this.sourceRoot != null + && (url = util.urlParse(this.sourceRoot))) { + // XXX: file:// URIs and absolute paths lead to unexpected behavior for + // many users. We can help them out when they expect file:// URIs to + // behave like it would if they were running a local HTTP server. See + // https://bugzilla.mozilla.org/show_bug.cgi?id=885597. + var fileUriAbsPath = relativeSource.replace(/^file:\/\//, ""); + if (url.scheme == "file" + && this._sources.has(fileUriAbsPath)) { + return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)] + } + + if ((!url.path || url.path == "/") + && this._sources.has("/" + relativeSource)) { + return this.sourcesContent[this._sources.indexOf("/" + relativeSource)]; + } + } + + // This function is used recursively from + // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we + // don't want to throw if we can't find the source - we just want to + // return null, so we provide a flag to exit gracefully. + if (nullOnMissing) { + return null; + } + else { + throw new Error('"' + relativeSource + '" is not in the SourceMap.'); + } + }; + +/** + * Returns the generated line and column information for the original source, + * line, and column positions provided. The only argument is an object with + * the following properties: + * + * - source: The filename of the original source. + * - line: The line number in the original source. The line number + * is 1-based. + * - column: The column number in the original source. The column + * number is 0-based. + * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or + * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the + * closest element that is smaller than or greater than the one we are + * searching for, respectively, if the exact element cannot be found. + * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'. + * + * and an object is returned with the following properties: + * + * - line: The line number in the generated source, or null. The + * line number is 1-based. + * - column: The column number in the generated source, or null. + * The column number is 0-based. + */ +BasicSourceMapConsumer.prototype.generatedPositionFor = + function SourceMapConsumer_generatedPositionFor(aArgs) { + var source = util.getArg(aArgs, 'source'); + source = this._findSourceIndex(source); + if (source < 0) { + return { + line: null, + column: null, + lastColumn: null + }; + } + + var needle = { + source: source, + originalLine: util.getArg(aArgs, 'line'), + originalColumn: util.getArg(aArgs, 'column') + }; + + var index = this._findMapping( + needle, + this._originalMappings, + "originalLine", + "originalColumn", + util.compareByOriginalPositions, + util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND) + ); + + if (index >= 0) { + var mapping = this._originalMappings[index]; + + if (mapping.source === needle.source) { + return { + line: util.getArg(mapping, 'generatedLine', null), + column: util.getArg(mapping, 'generatedColumn', null), + lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) + }; + } + } + + return { + line: null, + column: null, + lastColumn: null + }; + }; + +var BasicSourceMapConsumer_1 = BasicSourceMapConsumer; + +/** + * An IndexedSourceMapConsumer instance represents a parsed source map which + * we can query for information. It differs from BasicSourceMapConsumer in + * that it takes "indexed" source maps (i.e. ones with a "sections" field) as + * input. + * + * The first parameter is a raw source map (either as a JSON string, or already + * parsed to an object). According to the spec for indexed source maps, they + * have the following attributes: + * + * - version: Which version of the source map spec this map is following. + * - file: Optional. The generated file this source map is associated with. + * - sections: A list of section definitions. + * + * Each value under the "sections" field has two fields: + * - offset: The offset into the original specified at which this section + * begins to apply, defined as an object with a "line" and "column" + * field. + * - map: A source map definition. This source map could also be indexed, + * but doesn't have to be. + * + * Instead of the "map" field, it's also possible to have a "url" field + * specifying a URL to retrieve a source map from, but that's currently + * unsupported. + * + * Here's an example source map, taken from the source map spec[0], but + * modified to omit a section which uses the "url" field. + * + * { + * version : 3, + * file: "app.js", + * sections: [{ + * offset: {line:100, column:10}, + * map: { + * version : 3, + * file: "section.js", + * sources: ["foo.js", "bar.js"], + * names: ["src", "maps", "are", "fun"], + * mappings: "AAAA,E;;ABCDE;" + * } + * }], + * } + * + * The second parameter, if given, is a string whose value is the URL + * at which the source map was found. This URL is used to compute the + * sources array. + * + * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt + */ +function IndexedSourceMapConsumer(aSourceMap, aSourceMapURL) { + var sourceMap = aSourceMap; + if (typeof aSourceMap === 'string') { + sourceMap = util.parseSourceMapInput(aSourceMap); + } + + var version = util.getArg(sourceMap, 'version'); + var sections = util.getArg(sourceMap, 'sections'); + + if (version != this._version) { + throw new Error('Unsupported version: ' + version); + } + + this._sources = new ArraySet$2(); + this._names = new ArraySet$2(); + + var lastOffset = { + line: -1, + column: 0 + }; + this._sections = sections.map(function (s) { + if (s.url) { + // The url field will require support for asynchronicity. + // See https://github.com/mozilla/source-map/issues/16 + throw new Error('Support for url field in sections not implemented.'); + } + var offset = util.getArg(s, 'offset'); + var offsetLine = util.getArg(offset, 'line'); + var offsetColumn = util.getArg(offset, 'column'); + + if (offsetLine < lastOffset.line || + (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) { + throw new Error('Section offsets must be ordered and non-overlapping.'); + } + lastOffset = offset; + + return { + generatedOffset: { + // The offset fields are 0-based, but we use 1-based indices when + // encoding/decoding from VLQ. + generatedLine: offsetLine + 1, + generatedColumn: offsetColumn + 1 + }, + consumer: new SourceMapConsumer(util.getArg(s, 'map'), aSourceMapURL) + } + }); +} + +IndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype); +IndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer; + +/** + * The version of the source mapping spec that we are consuming. + */ +IndexedSourceMapConsumer.prototype._version = 3; + +/** + * The list of original sources. + */ +Object.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', { + get: function () { + var sources = []; + for (var i = 0; i < this._sections.length; i++) { + for (var j = 0; j < this._sections[i].consumer.sources.length; j++) { + sources.push(this._sections[i].consumer.sources[j]); + } + } + return sources; + } +}); + +/** + * Returns the original source, line, and column information for the generated + * source's line and column positions provided. The only argument is an object + * with the following properties: + * + * - line: The line number in the generated source. The line number + * is 1-based. + * - column: The column number in the generated source. The column + * number is 0-based. + * + * and an object is returned with the following properties: + * + * - source: The original source file, or null. + * - line: The line number in the original source, or null. The + * line number is 1-based. + * - column: The column number in the original source, or null. The + * column number is 0-based. + * - name: The original identifier, or null. + */ +IndexedSourceMapConsumer.prototype.originalPositionFor = + function IndexedSourceMapConsumer_originalPositionFor(aArgs) { + var needle = { + generatedLine: util.getArg(aArgs, 'line'), + generatedColumn: util.getArg(aArgs, 'column') + }; + + // Find the section containing the generated position we're trying to map + // to an original position. + var sectionIndex = binarySearch.search(needle, this._sections, + function(needle, section) { + var cmp = needle.generatedLine - section.generatedOffset.generatedLine; + if (cmp) { + return cmp; + } + + return (needle.generatedColumn - + section.generatedOffset.generatedColumn); + }); + var section = this._sections[sectionIndex]; + + if (!section) { + return { + source: null, + line: null, + column: null, + name: null + }; + } + + return section.consumer.originalPositionFor({ + line: needle.generatedLine - + (section.generatedOffset.generatedLine - 1), + column: needle.generatedColumn - + (section.generatedOffset.generatedLine === needle.generatedLine + ? section.generatedOffset.generatedColumn - 1 + : 0), + bias: aArgs.bias + }); + }; + +/** + * Return true if we have the source content for every source in the source + * map, false otherwise. + */ +IndexedSourceMapConsumer.prototype.hasContentsOfAllSources = + function IndexedSourceMapConsumer_hasContentsOfAllSources() { + return this._sections.every(function (s) { + return s.consumer.hasContentsOfAllSources(); + }); + }; + +/** + * Returns the original source content. The only argument is the url of the + * original source file. Returns null if no original source content is + * available. + */ +IndexedSourceMapConsumer.prototype.sourceContentFor = + function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) { + for (var i = 0; i < this._sections.length; i++) { + var section = this._sections[i]; + + var content = section.consumer.sourceContentFor(aSource, true); + if (content) { + return content; + } + } + if (nullOnMissing) { + return null; + } + else { + throw new Error('"' + aSource + '" is not in the SourceMap.'); + } + }; + +/** + * Returns the generated line and column information for the original source, + * line, and column positions provided. The only argument is an object with + * the following properties: + * + * - source: The filename of the original source. + * - line: The line number in the original source. The line number + * is 1-based. + * - column: The column number in the original source. The column + * number is 0-based. + * + * and an object is returned with the following properties: + * + * - line: The line number in the generated source, or null. The + * line number is 1-based. + * - column: The column number in the generated source, or null. + * The column number is 0-based. + */ +IndexedSourceMapConsumer.prototype.generatedPositionFor = + function IndexedSourceMapConsumer_generatedPositionFor(aArgs) { + for (var i = 0; i < this._sections.length; i++) { + var section = this._sections[i]; + + // Only consider this section if the requested source is in the list of + // sources of the consumer. + if (section.consumer._findSourceIndex(util.getArg(aArgs, 'source')) === -1) { + continue; + } + var generatedPosition = section.consumer.generatedPositionFor(aArgs); + if (generatedPosition) { + var ret = { + line: generatedPosition.line + + (section.generatedOffset.generatedLine - 1), + column: generatedPosition.column + + (section.generatedOffset.generatedLine === generatedPosition.line + ? section.generatedOffset.generatedColumn - 1 + : 0) + }; + return ret; + } + } + + return { + line: null, + column: null + }; + }; + +/** + * Parse the mappings in a string in to a data structure which we can easily + * query (the ordered arrays in the `this.__generatedMappings` and + * `this.__originalMappings` properties). + */ +IndexedSourceMapConsumer.prototype._parseMappings = + function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) { + this.__generatedMappings = []; + this.__originalMappings = []; + for (var i = 0; i < this._sections.length; i++) { + var section = this._sections[i]; + var sectionMappings = section.consumer._generatedMappings; + for (var j = 0; j < sectionMappings.length; j++) { + var mapping = sectionMappings[j]; + + var source = section.consumer._sources.at(mapping.source); + source = util.computeSourceURL(section.consumer.sourceRoot, source, this._sourceMapURL); + this._sources.add(source); + source = this._sources.indexOf(source); + + var name = null; + if (mapping.name) { + name = section.consumer._names.at(mapping.name); + this._names.add(name); + name = this._names.indexOf(name); + } + + // The mappings coming from the consumer for the section have + // generated positions relative to the start of the section, so we + // need to offset them to be relative to the start of the concatenated + // generated file. + var adjustedMapping = { + source: source, + generatedLine: mapping.generatedLine + + (section.generatedOffset.generatedLine - 1), + generatedColumn: mapping.generatedColumn + + (section.generatedOffset.generatedLine === mapping.generatedLine + ? section.generatedOffset.generatedColumn - 1 + : 0), + originalLine: mapping.originalLine, + originalColumn: mapping.originalColumn, + name: name + }; + + this.__generatedMappings.push(adjustedMapping); + if (typeof adjustedMapping.originalLine === 'number') { + this.__originalMappings.push(adjustedMapping); + } + } + } + + quickSort$1(this.__generatedMappings, util.compareByGeneratedPositionsDeflated); + quickSort$1(this.__originalMappings, util.compareByOriginalPositions); + }; + +var IndexedSourceMapConsumer_1 = IndexedSourceMapConsumer; + +var sourceMapConsumer = { + SourceMapConsumer: SourceMapConsumer_1, + BasicSourceMapConsumer: BasicSourceMapConsumer_1, + IndexedSourceMapConsumer: IndexedSourceMapConsumer_1 +}; + +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + +var SourceMapGenerator$1 = sourceMapGenerator.SourceMapGenerator; + + +// Matches a Windows-style `\r\n` newline or a `\n` newline used by all other +// operating systems these days (capturing the result). +var REGEX_NEWLINE = /(\r?\n)/; + +// Newline character code for charCodeAt() comparisons +var NEWLINE_CODE = 10; + +// Private symbol for identifying `SourceNode`s when multiple versions of +// the source-map library are loaded. This MUST NOT CHANGE across +// versions! +var isSourceNode = "$$$isSourceNode$$$"; + +/** + * SourceNodes provide a way to abstract over interpolating/concatenating + * snippets of generated JavaScript source code while maintaining the line and + * column information associated with the original source code. + * + * @param aLine The original line number. + * @param aColumn The original column number. + * @param aSource The original source's filename. + * @param aChunks Optional. An array of strings which are snippets of + * generated JS, or other SourceNodes. + * @param aName The original identifier. + */ +function SourceNode(aLine, aColumn, aSource, aChunks, aName) { + this.children = []; + this.sourceContents = {}; + this.line = aLine == null ? null : aLine; + this.column = aColumn == null ? null : aColumn; + this.source = aSource == null ? null : aSource; + this.name = aName == null ? null : aName; + this[isSourceNode] = true; + if (aChunks != null) this.add(aChunks); +} + +/** + * Creates a SourceNode from generated code and a SourceMapConsumer. + * + * @param aGeneratedCode The generated code + * @param aSourceMapConsumer The SourceMap for the generated code + * @param aRelativePath Optional. The path that relative sources in the + * SourceMapConsumer should be relative to. + */ +SourceNode.fromStringWithSourceMap = + function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) { + // The SourceNode we want to fill with the generated code + // and the SourceMap + var node = new SourceNode(); + + // All even indices of this array are one line of the generated code, + // while all odd indices are the newlines between two adjacent lines + // (since `REGEX_NEWLINE` captures its match). + // Processed fragments are accessed by calling `shiftNextLine`. + var remainingLines = aGeneratedCode.split(REGEX_NEWLINE); + var remainingLinesIndex = 0; + var shiftNextLine = function() { + var lineContents = getNextLine(); + // The last line of a file might not have a newline. + var newLine = getNextLine() || ""; + return lineContents + newLine; + + function getNextLine() { + return remainingLinesIndex < remainingLines.length ? + remainingLines[remainingLinesIndex++] : undefined; + } + }; + + // We need to remember the position of "remainingLines" + var lastGeneratedLine = 1, lastGeneratedColumn = 0; + + // The generate SourceNodes we need a code range. + // To extract it current and last mapping is used. + // Here we store the last mapping. + var lastMapping = null; + + aSourceMapConsumer.eachMapping(function (mapping) { + if (lastMapping !== null) { + // We add the code from "lastMapping" to "mapping": + // First check if there is a new line in between. + if (lastGeneratedLine < mapping.generatedLine) { + // Associate first line with "lastMapping" + addMappingWithCode(lastMapping, shiftNextLine()); + lastGeneratedLine++; + lastGeneratedColumn = 0; + // The remaining code is added without mapping + } else { + // There is no new line in between. + // Associate the code between "lastGeneratedColumn" and + // "mapping.generatedColumn" with "lastMapping" + var nextLine = remainingLines[remainingLinesIndex] || ''; + var code = nextLine.substr(0, mapping.generatedColumn - + lastGeneratedColumn); + remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn - + lastGeneratedColumn); + lastGeneratedColumn = mapping.generatedColumn; + addMappingWithCode(lastMapping, code); + // No more remaining code, continue + lastMapping = mapping; + return; + } + } + // We add the generated code until the first mapping + // to the SourceNode without any mapping. + // Each line is added as separate string. + while (lastGeneratedLine < mapping.generatedLine) { + node.add(shiftNextLine()); + lastGeneratedLine++; + } + if (lastGeneratedColumn < mapping.generatedColumn) { + var nextLine = remainingLines[remainingLinesIndex] || ''; + node.add(nextLine.substr(0, mapping.generatedColumn)); + remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn); + lastGeneratedColumn = mapping.generatedColumn; + } + lastMapping = mapping; + }, this); + // We have processed all mappings. + if (remainingLinesIndex < remainingLines.length) { + if (lastMapping) { + // Associate the remaining code in the current line with "lastMapping" + addMappingWithCode(lastMapping, shiftNextLine()); + } + // and add the remaining lines without any mapping + node.add(remainingLines.splice(remainingLinesIndex).join("")); + } + + // Copy sourcesContent into SourceNode + aSourceMapConsumer.sources.forEach(function (sourceFile) { + var content = aSourceMapConsumer.sourceContentFor(sourceFile); + if (content != null) { + if (aRelativePath != null) { + sourceFile = util.join(aRelativePath, sourceFile); + } + node.setSourceContent(sourceFile, content); + } + }); + + return node; + + function addMappingWithCode(mapping, code) { + if (mapping === null || mapping.source === undefined) { + node.add(code); + } else { + var source = aRelativePath + ? util.join(aRelativePath, mapping.source) + : mapping.source; + node.add(new SourceNode(mapping.originalLine, + mapping.originalColumn, + source, + code, + mapping.name)); + } + } + }; + +/** + * Add a chunk of generated JS to this source node. + * + * @param aChunk A string snippet of generated JS code, another instance of + * SourceNode, or an array where each member is one of those things. + */ +SourceNode.prototype.add = function SourceNode_add(aChunk) { + if (Array.isArray(aChunk)) { + aChunk.forEach(function (chunk) { + this.add(chunk); + }, this); + } + else if (aChunk[isSourceNode] || typeof aChunk === "string") { + if (aChunk) { + this.children.push(aChunk); + } + } + else { + throw new TypeError( + "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk + ); + } + return this; +}; + +/** + * Add a chunk of generated JS to the beginning of this source node. + * + * @param aChunk A string snippet of generated JS code, another instance of + * SourceNode, or an array where each member is one of those things. + */ +SourceNode.prototype.prepend = function SourceNode_prepend(aChunk) { + if (Array.isArray(aChunk)) { + for (var i = aChunk.length-1; i >= 0; i--) { + this.prepend(aChunk[i]); + } + } + else if (aChunk[isSourceNode] || typeof aChunk === "string") { + this.children.unshift(aChunk); + } + else { + throw new TypeError( + "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk + ); + } + return this; +}; + +/** + * Walk over the tree of JS snippets in this node and its children. The + * walking function is called once for each snippet of JS and is passed that + * snippet and the its original associated source's line/column location. + * + * @param aFn The traversal function. + */ +SourceNode.prototype.walk = function SourceNode_walk(aFn) { + var chunk; + for (var i = 0, len = this.children.length; i < len; i++) { + chunk = this.children[i]; + if (chunk[isSourceNode]) { + chunk.walk(aFn); + } + else { + if (chunk !== '') { + aFn(chunk, { source: this.source, + line: this.line, + column: this.column, + name: this.name }); + } + } + } +}; + +/** + * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between + * each of `this.children`. + * + * @param aSep The separator. + */ +SourceNode.prototype.join = function SourceNode_join(aSep) { + var newChildren; + var i; + var len = this.children.length; + if (len > 0) { + newChildren = []; + for (i = 0; i < len-1; i++) { + newChildren.push(this.children[i]); + newChildren.push(aSep); + } + newChildren.push(this.children[i]); + this.children = newChildren; + } + return this; +}; + +/** + * Call String.prototype.replace on the very right-most source snippet. Useful + * for trimming whitespace from the end of a source node, etc. + * + * @param aPattern The pattern to replace. + * @param aReplacement The thing to replace the pattern with. + */ +SourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) { + var lastChild = this.children[this.children.length - 1]; + if (lastChild[isSourceNode]) { + lastChild.replaceRight(aPattern, aReplacement); + } + else if (typeof lastChild === 'string') { + this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement); + } + else { + this.children.push(''.replace(aPattern, aReplacement)); + } + return this; +}; + +/** + * Set the source content for a source file. This will be added to the SourceMapGenerator + * in the sourcesContent field. + * + * @param aSourceFile The filename of the source file + * @param aSourceContent The content of the source file + */ +SourceNode.prototype.setSourceContent = + function SourceNode_setSourceContent(aSourceFile, aSourceContent) { + this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent; + }; + +/** + * Walk over the tree of SourceNodes. The walking function is called for each + * source file content and is passed the filename and source content. + * + * @param aFn The traversal function. + */ +SourceNode.prototype.walkSourceContents = + function SourceNode_walkSourceContents(aFn) { + for (var i = 0, len = this.children.length; i < len; i++) { + if (this.children[i][isSourceNode]) { + this.children[i].walkSourceContents(aFn); + } + } + + var sources = Object.keys(this.sourceContents); + for (var i = 0, len = sources.length; i < len; i++) { + aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]); + } + }; + +/** + * Return the string representation of this source node. Walks over the tree + * and concatenates all the various snippets together to one string. + */ +SourceNode.prototype.toString = function SourceNode_toString() { + var str = ""; + this.walk(function (chunk) { + str += chunk; + }); + return str; +}; + +/** + * Returns the string representation of this source node along with a source + * map. + */ +SourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) { + var generated = { + code: "", + line: 1, + column: 0 + }; + var map = new SourceMapGenerator$1(aArgs); + var sourceMappingActive = false; + var lastOriginalSource = null; + var lastOriginalLine = null; + var lastOriginalColumn = null; + var lastOriginalName = null; + this.walk(function (chunk, original) { + generated.code += chunk; + if (original.source !== null + && original.line !== null + && original.column !== null) { + if(lastOriginalSource !== original.source + || lastOriginalLine !== original.line + || lastOriginalColumn !== original.column + || lastOriginalName !== original.name) { + map.addMapping({ + source: original.source, + original: { + line: original.line, + column: original.column + }, + generated: { + line: generated.line, + column: generated.column + }, + name: original.name + }); + } + lastOriginalSource = original.source; + lastOriginalLine = original.line; + lastOriginalColumn = original.column; + lastOriginalName = original.name; + sourceMappingActive = true; + } else if (sourceMappingActive) { + map.addMapping({ + generated: { + line: generated.line, + column: generated.column + } + }); + lastOriginalSource = null; + sourceMappingActive = false; + } + for (var idx = 0, length = chunk.length; idx < length; idx++) { + if (chunk.charCodeAt(idx) === NEWLINE_CODE) { + generated.line++; + generated.column = 0; + // Mappings end at eol + if (idx + 1 === length) { + lastOriginalSource = null; + sourceMappingActive = false; + } else if (sourceMappingActive) { + map.addMapping({ + source: original.source, + original: { + line: original.line, + column: original.column + }, + generated: { + line: generated.line, + column: generated.column + }, + name: original.name + }); + } + } else { + generated.column++; + } + } + }); + this.walkSourceContents(function (sourceFile, sourceContent) { + map.setSourceContent(sourceFile, sourceContent); + }); + + return { code: generated.code, map: map }; +}; + +var SourceNode_1 = SourceNode; + +var sourceNode = { + SourceNode: SourceNode_1 +}; + +/* + * Copyright 2009-2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE.txt or: + * http://opensource.org/licenses/BSD-3-Clause + */ +var SourceMapGenerator$2 = sourceMapGenerator.SourceMapGenerator; +var SourceMapConsumer$1 = sourceMapConsumer.SourceMapConsumer; +var SourceNode$1 = sourceNode.SourceNode; + +var sourceMap = { + SourceMapGenerator: SourceMapGenerator$2, + SourceMapConsumer: SourceMapConsumer$1, + SourceNode: SourceNode$1 +}; + +var codeGen = createCommonjsModule(function (module, exports) { + +exports.__esModule = true; + + + +var SourceNode = undefined; + +try { + /* istanbul ignore next */ + if (typeof undefined !== 'function' || !undefined.amd) { + // We don't support this in AMD environments. For these environments, we asusme that + // they are running on the browser and thus have no need for the source-map library. + var SourceMap = sourceMap; + SourceNode = SourceMap.SourceNode; + } +} catch (err) {} +/* NOP */ + +/* istanbul ignore if: tested but not covered in istanbul due to dist build */ +if (!SourceNode) { + SourceNode = function (line, column, srcFile, chunks) { + this.src = ''; + if (chunks) { + this.add(chunks); + } + }; + /* istanbul ignore next */ + SourceNode.prototype = { + add: function add(chunks) { + if (utils$2.isArray(chunks)) { + chunks = chunks.join(''); + } + this.src += chunks; + }, + prepend: function prepend(chunks) { + if (utils$2.isArray(chunks)) { + chunks = chunks.join(''); + } + this.src = chunks + this.src; + }, + toStringWithSourceMap: function toStringWithSourceMap() { + return { code: this.toString() }; + }, + toString: function toString() { + return this.src; + } + }; +} + +function castChunk(chunk, codeGen, loc) { + if (utils$2.isArray(chunk)) { + var ret = []; + + for (var i = 0, len = chunk.length; i < len; i++) { + ret.push(codeGen.wrap(chunk[i], loc)); + } + return ret; + } else if (typeof chunk === 'boolean' || typeof chunk === 'number') { + // Handle primitives that the SourceNode will throw up on + return chunk + ''; + } + return chunk; +} + +function CodeGen(srcFile) { + this.srcFile = srcFile; + this.source = []; +} + +CodeGen.prototype = { + isEmpty: function isEmpty() { + return !this.source.length; + }, + prepend: function prepend(source, loc) { + this.source.unshift(this.wrap(source, loc)); + }, + push: function push(source, loc) { + this.source.push(this.wrap(source, loc)); + }, + + merge: function merge() { + var source = this.empty(); + this.each(function (line) { + source.add([' ', line, '\n']); + }); + return source; + }, + + each: function each(iter) { + for (var i = 0, len = this.source.length; i < len; i++) { + iter(this.source[i]); + } + }, + + empty: function empty() { + var loc = this.currentLocation || { start: {} }; + return new SourceNode(loc.start.line, loc.start.column, this.srcFile); + }, + wrap: function wrap(chunk) { + var loc = arguments.length <= 1 || arguments[1] === undefined ? this.currentLocation || { start: {} } : arguments[1]; + + if (chunk instanceof SourceNode) { + return chunk; + } + + chunk = castChunk(chunk, this, loc); + + return new SourceNode(loc.start.line, loc.start.column, this.srcFile, chunk); + }, + + functionCall: function functionCall(fn, type, params) { + params = this.generateList(params); + return this.wrap([fn, type ? '.' + type + '(' : '(', params, ')']); + }, + + quotedString: function quotedString(str) { + return '"' + (str + '').replace(/\\/g, '\\\\').replace(/"/g, '\\"').replace(/\n/g, '\\n').replace(/\r/g, '\\r').replace(/\u2028/g, '\\u2028') // Per Ecma-262 7.3 + 7.8.4 + .replace(/\u2029/g, '\\u2029') + '"'; + }, + + objectLiteral: function objectLiteral(obj) { + // istanbul ignore next + + var _this = this; + + var pairs = []; + + Object.keys(obj).forEach(function (key) { + var value = castChunk(obj[key], _this); + if (value !== 'undefined') { + pairs.push([_this.quotedString(key), ':', value]); + } + }); + + var ret = this.generateList(pairs); + ret.prepend('{'); + ret.add('}'); + return ret; + }, + + generateList: function generateList(entries) { + var ret = this.empty(); + + for (var i = 0, len = entries.length; i < len; i++) { + if (i) { + ret.add(','); + } + + ret.add(castChunk(entries[i], this)); + } + + return ret; + }, + + generateArray: function generateArray(entries) { + var ret = this.generateList(entries); + ret.prepend('['); + ret.add(']'); + + return ret; + } +}; + +exports['default'] = CodeGen; +module.exports = exports['default']; + +}); + +var javascriptCompiler = createCommonjsModule(function (module, exports) { + +exports.__esModule = true; +// istanbul ignore next + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + + + + +var _exception2 = _interopRequireDefault(exception); + + + + + +var _codeGen2 = _interopRequireDefault(codeGen); + +function Literal(value) { + this.value = value; +} + +function JavaScriptCompiler() {} + +JavaScriptCompiler.prototype = { + // PUBLIC API: You can override these methods in a subclass to provide + // alternative compiled forms for name lookup and buffering semantics + nameLookup: function nameLookup(parent, name /*, type */) { + return this.internalNameLookup(parent, name); + }, + depthedLookup: function depthedLookup(name) { + return [this.aliasable('container.lookup'), '(depths, "', name, '")']; + }, + + compilerInfo: function compilerInfo() { + var revision = base.COMPILER_REVISION, + versions = base.REVISION_CHANGES[revision]; + return [revision, versions]; + }, + + appendToBuffer: function appendToBuffer(source, location, explicit) { + // Force a source as this simplifies the merge logic. + if (!utils$2.isArray(source)) { + source = [source]; + } + source = this.source.wrap(source, location); + + if (this.environment.isSimple) { + return ['return ', source, ';']; + } else if (explicit) { + // This is a case where the buffer operation occurs as a child of another + // construct, generally braces. We have to explicitly output these buffer + // operations to ensure that the emitted code goes in the correct location. + return ['buffer += ', source, ';']; + } else { + source.appendToBuffer = true; + return source; + } + }, + + initializeBuffer: function initializeBuffer() { + return this.quotedString(''); + }, + // END PUBLIC API + internalNameLookup: function internalNameLookup(parent, name) { + this.lookupPropertyFunctionIsUsed = true; + return ['lookupProperty(', parent, ',', JSON.stringify(name), ')']; + }, + + lookupPropertyFunctionIsUsed: false, + + compile: function compile(environment, options, context, asObject) { + this.environment = environment; + this.options = options; + this.stringParams = this.options.stringParams; + this.trackIds = this.options.trackIds; + this.precompile = !asObject; + + this.name = this.environment.name; + this.isChild = !!context; + this.context = context || { + decorators: [], + programs: [], + environments: [] + }; + + this.preamble(); + + this.stackSlot = 0; + this.stackVars = []; + this.aliases = {}; + this.registers = { list: [] }; + this.hashes = []; + this.compileStack = []; + this.inlineStack = []; + this.blockParams = []; + + this.compileChildren(environment, options); + + this.useDepths = this.useDepths || environment.useDepths || environment.useDecorators || this.options.compat; + this.useBlockParams = this.useBlockParams || environment.useBlockParams; + + var opcodes = environment.opcodes, + opcode = undefined, + firstLoc = undefined, + i = undefined, + l = undefined; + + for (i = 0, l = opcodes.length; i < l; i++) { + opcode = opcodes[i]; + + this.source.currentLocation = opcode.loc; + firstLoc = firstLoc || opcode.loc; + this[opcode.opcode].apply(this, opcode.args); + } + + // Flush any trailing content that might be pending. + this.source.currentLocation = firstLoc; + this.pushSource(''); + + /* istanbul ignore next */ + if (this.stackSlot || this.inlineStack.length || this.compileStack.length) { + throw new _exception2['default']('Compile completed with content left on stack'); + } + + if (!this.decorators.isEmpty()) { + this.useDecorators = true; + + this.decorators.prepend(['var decorators = container.decorators, ', this.lookupPropertyFunctionVarDeclaration(), ';\n']); + this.decorators.push('return fn;'); + + if (asObject) { + this.decorators = Function.apply(this, ['fn', 'props', 'container', 'depth0', 'data', 'blockParams', 'depths', this.decorators.merge()]); + } else { + this.decorators.prepend('function(fn, props, container, depth0, data, blockParams, depths) {\n'); + this.decorators.push('}\n'); + this.decorators = this.decorators.merge(); + } + } else { + this.decorators = undefined; + } + + var fn = this.createFunctionContext(asObject); + if (!this.isChild) { + var ret = { + compiler: this.compilerInfo(), + main: fn + }; + + if (this.decorators) { + ret.main_d = this.decorators; // eslint-disable-line camelcase + ret.useDecorators = true; + } + + var _context = this.context; + var programs = _context.programs; + var decorators = _context.decorators; + + for (i = 0, l = programs.length; i < l; i++) { + if (programs[i]) { + ret[i] = programs[i]; + if (decorators[i]) { + ret[i + '_d'] = decorators[i]; + ret.useDecorators = true; + } + } + } + + if (this.environment.usePartial) { + ret.usePartial = true; + } + if (this.options.data) { + ret.useData = true; + } + if (this.useDepths) { + ret.useDepths = true; + } + if (this.useBlockParams) { + ret.useBlockParams = true; + } + if (this.options.compat) { + ret.compat = true; + } + + if (!asObject) { + ret.compiler = JSON.stringify(ret.compiler); + + this.source.currentLocation = { start: { line: 1, column: 0 } }; + ret = this.objectLiteral(ret); + + if (options.srcName) { + ret = ret.toStringWithSourceMap({ file: options.destName }); + ret.map = ret.map && ret.map.toString(); + } else { + ret = ret.toString(); + } + } else { + ret.compilerOptions = this.options; + } + + return ret; + } else { + return fn; + } + }, + + preamble: function preamble() { + // track the last context pushed into place to allow skipping the + // getContext opcode when it would be a noop + this.lastContext = 0; + this.source = new _codeGen2['default'](this.options.srcName); + this.decorators = new _codeGen2['default'](this.options.srcName); + }, + + createFunctionContext: function createFunctionContext(asObject) { + // istanbul ignore next + + var _this = this; + + var varDeclarations = ''; + + var locals = this.stackVars.concat(this.registers.list); + if (locals.length > 0) { + varDeclarations += ', ' + locals.join(', '); + } + + // Generate minimizer alias mappings + // + // When using true SourceNodes, this will update all references to the given alias + // as the source nodes are reused in situ. For the non-source node compilation mode, + // aliases will not be used, but this case is already being run on the client and + // we aren't concern about minimizing the template size. + var aliasCount = 0; + Object.keys(this.aliases).forEach(function (alias) { + var node = _this.aliases[alias]; + if (node.children && node.referenceCount > 1) { + varDeclarations += ', alias' + ++aliasCount + '=' + alias; + node.children[0] = 'alias' + aliasCount; + } + }); + + if (this.lookupPropertyFunctionIsUsed) { + varDeclarations += ', ' + this.lookupPropertyFunctionVarDeclaration(); + } + + var params = ['container', 'depth0', 'helpers', 'partials', 'data']; + + if (this.useBlockParams || this.useDepths) { + params.push('blockParams'); + } + if (this.useDepths) { + params.push('depths'); + } + + // Perform a second pass over the output to merge content when possible + var source = this.mergeSource(varDeclarations); + + if (asObject) { + params.push(source); + + return Function.apply(this, params); + } else { + return this.source.wrap(['function(', params.join(','), ') {\n ', source, '}']); + } + }, + mergeSource: function mergeSource(varDeclarations) { + var isSimple = this.environment.isSimple, + appendOnly = !this.forceBuffer, + appendFirst = undefined, + sourceSeen = undefined, + bufferStart = undefined, + bufferEnd = undefined; + this.source.each(function (line) { + if (line.appendToBuffer) { + if (bufferStart) { + line.prepend(' + '); + } else { + bufferStart = line; + } + bufferEnd = line; + } else { + if (bufferStart) { + if (!sourceSeen) { + appendFirst = true; + } else { + bufferStart.prepend('buffer += '); + } + bufferEnd.add(';'); + bufferStart = bufferEnd = undefined; + } + + sourceSeen = true; + if (!isSimple) { + appendOnly = false; + } + } + }); + + if (appendOnly) { + if (bufferStart) { + bufferStart.prepend('return '); + bufferEnd.add(';'); + } else if (!sourceSeen) { + this.source.push('return "";'); + } + } else { + varDeclarations += ', buffer = ' + (appendFirst ? '' : this.initializeBuffer()); + + if (bufferStart) { + bufferStart.prepend('return buffer + '); + bufferEnd.add(';'); + } else { + this.source.push('return buffer;'); + } + } + + if (varDeclarations) { + this.source.prepend('var ' + varDeclarations.substring(2) + (appendFirst ? '' : ';\n')); + } + + return this.source.merge(); + }, + + lookupPropertyFunctionVarDeclaration: function lookupPropertyFunctionVarDeclaration() { + return '\n lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n }\n '.trim(); + }, + + // [blockValue] + // + // On stack, before: hash, inverse, program, value + // On stack, after: return value of blockHelperMissing + // + // The purpose of this opcode is to take a block of the form + // `{{#this.foo}}...{{/this.foo}}`, resolve the value of `foo`, and + // replace it on the stack with the result of properly + // invoking blockHelperMissing. + blockValue: function blockValue(name) { + var blockHelperMissing = this.aliasable('container.hooks.blockHelperMissing'), + params = [this.contextName(0)]; + this.setupHelperArgs(name, 0, params); + + var blockName = this.popStack(); + params.splice(1, 0, blockName); + + this.push(this.source.functionCall(blockHelperMissing, 'call', params)); + }, + + // [ambiguousBlockValue] + // + // On stack, before: hash, inverse, program, value + // Compiler value, before: lastHelper=value of last found helper, if any + // On stack, after, if no lastHelper: same as [blockValue] + // On stack, after, if lastHelper: value + ambiguousBlockValue: function ambiguousBlockValue() { + // We're being a bit cheeky and reusing the options value from the prior exec + var blockHelperMissing = this.aliasable('container.hooks.blockHelperMissing'), + params = [this.contextName(0)]; + this.setupHelperArgs('', 0, params, true); + + this.flushInline(); + + var current = this.topStack(); + params.splice(1, 0, current); + + this.pushSource(['if (!', this.lastHelper, ') { ', current, ' = ', this.source.functionCall(blockHelperMissing, 'call', params), '}']); + }, + + // [appendContent] + // + // On stack, before: ... + // On stack, after: ... + // + // Appends the string value of `content` to the current buffer + appendContent: function appendContent(content) { + if (this.pendingContent) { + content = this.pendingContent + content; + } else { + this.pendingLocation = this.source.currentLocation; + } + + this.pendingContent = content; + }, + + // [append] + // + // On stack, before: value, ... + // On stack, after: ... + // + // Coerces `value` to a String and appends it to the current buffer. + // + // If `value` is truthy, or 0, it is coerced into a string and appended + // Otherwise, the empty string is appended + append: function append() { + if (this.isInline()) { + this.replaceStack(function (current) { + return [' != null ? ', current, ' : ""']; + }); + + this.pushSource(this.appendToBuffer(this.popStack())); + } else { + var local = this.popStack(); + this.pushSource(['if (', local, ' != null) { ', this.appendToBuffer(local, undefined, true), ' }']); + if (this.environment.isSimple) { + this.pushSource(['else { ', this.appendToBuffer("''", undefined, true), ' }']); + } + } + }, + + // [appendEscaped] + // + // On stack, before: value, ... + // On stack, after: ... + // + // Escape `value` and append it to the buffer + appendEscaped: function appendEscaped() { + this.pushSource(this.appendToBuffer([this.aliasable('container.escapeExpression'), '(', this.popStack(), ')'])); + }, + + // [getContext] + // + // On stack, before: ... + // On stack, after: ... + // Compiler value, after: lastContext=depth + // + // Set the value of the `lastContext` compiler value to the depth + getContext: function getContext(depth) { + this.lastContext = depth; + }, + + // [pushContext] + // + // On stack, before: ... + // On stack, after: currentContext, ... + // + // Pushes the value of the current context onto the stack. + pushContext: function pushContext() { + this.pushStackLiteral(this.contextName(this.lastContext)); + }, + + // [lookupOnContext] + // + // On stack, before: ... + // On stack, after: currentContext[name], ... + // + // Looks up the value of `name` on the current context and pushes + // it onto the stack. + lookupOnContext: function lookupOnContext(parts, falsy, strict, scoped) { + var i = 0; + + if (!scoped && this.options.compat && !this.lastContext) { + // The depthed query is expected to handle the undefined logic for the root level that + // is implemented below, so we evaluate that directly in compat mode + this.push(this.depthedLookup(parts[i++])); + } else { + this.pushContext(); + } + + this.resolvePath('context', parts, i, falsy, strict); + }, + + // [lookupBlockParam] + // + // On stack, before: ... + // On stack, after: blockParam[name], ... + // + // Looks up the value of `parts` on the given block param and pushes + // it onto the stack. + lookupBlockParam: function lookupBlockParam(blockParamId, parts) { + this.useBlockParams = true; + + this.push(['blockParams[', blockParamId[0], '][', blockParamId[1], ']']); + this.resolvePath('context', parts, 1); + }, + + // [lookupData] + // + // On stack, before: ... + // On stack, after: data, ... + // + // Push the data lookup operator + lookupData: function lookupData(depth, parts, strict) { + if (!depth) { + this.pushStackLiteral('data'); + } else { + this.pushStackLiteral('container.data(data, ' + depth + ')'); + } + + this.resolvePath('data', parts, 0, true, strict); + }, + + resolvePath: function resolvePath(type, parts, i, falsy, strict) { + // istanbul ignore next + + var _this2 = this; + + if (this.options.strict || this.options.assumeObjects) { + this.push(strictLookup(this.options.strict && strict, this, parts, type)); + return; + } + + var len = parts.length; + for (; i < len; i++) { + /* eslint-disable no-loop-func */ + this.replaceStack(function (current) { + var lookup = _this2.nameLookup(current, parts[i], type); + // We want to ensure that zero and false are handled properly if the context (falsy flag) + // needs to have the special handling for these values. + if (!falsy) { + return [' != null ? ', lookup, ' : ', current]; + } else { + // Otherwise we can use generic falsy handling + return [' && ', lookup]; + } + }); + /* eslint-enable no-loop-func */ + } + }, + + // [resolvePossibleLambda] + // + // On stack, before: value, ... + // On stack, after: resolved value, ... + // + // If the `value` is a lambda, replace it on the stack by + // the return value of the lambda + resolvePossibleLambda: function resolvePossibleLambda() { + this.push([this.aliasable('container.lambda'), '(', this.popStack(), ', ', this.contextName(0), ')']); + }, + + // [pushStringParam] + // + // On stack, before: ... + // On stack, after: string, currentContext, ... + // + // This opcode is designed for use in string mode, which + // provides the string value of a parameter along with its + // depth rather than resolving it immediately. + pushStringParam: function pushStringParam(string, type) { + this.pushContext(); + this.pushString(type); + + // If it's a subexpression, the string result + // will be pushed after this opcode. + if (type !== 'SubExpression') { + if (typeof string === 'string') { + this.pushString(string); + } else { + this.pushStackLiteral(string); + } + } + }, + + emptyHash: function emptyHash(omitEmpty) { + if (this.trackIds) { + this.push('{}'); // hashIds + } + if (this.stringParams) { + this.push('{}'); // hashContexts + this.push('{}'); // hashTypes + } + this.pushStackLiteral(omitEmpty ? 'undefined' : '{}'); + }, + pushHash: function pushHash() { + if (this.hash) { + this.hashes.push(this.hash); + } + this.hash = { values: {}, types: [], contexts: [], ids: [] }; + }, + popHash: function popHash() { + var hash = this.hash; + this.hash = this.hashes.pop(); + + if (this.trackIds) { + this.push(this.objectLiteral(hash.ids)); + } + if (this.stringParams) { + this.push(this.objectLiteral(hash.contexts)); + this.push(this.objectLiteral(hash.types)); + } + + this.push(this.objectLiteral(hash.values)); + }, + + // [pushString] + // + // On stack, before: ... + // On stack, after: quotedString(string), ... + // + // Push a quoted version of `string` onto the stack + pushString: function pushString(string) { + this.pushStackLiteral(this.quotedString(string)); + }, + + // [pushLiteral] + // + // On stack, before: ... + // On stack, after: value, ... + // + // Pushes a value onto the stack. This operation prevents + // the compiler from creating a temporary variable to hold + // it. + pushLiteral: function pushLiteral(value) { + this.pushStackLiteral(value); + }, + + // [pushProgram] + // + // On stack, before: ... + // On stack, after: program(guid), ... + // + // Push a program expression onto the stack. This takes + // a compile-time guid and converts it into a runtime-accessible + // expression. + pushProgram: function pushProgram(guid) { + if (guid != null) { + this.pushStackLiteral(this.programExpression(guid)); + } else { + this.pushStackLiteral(null); + } + }, + + // [registerDecorator] + // + // On stack, before: hash, program, params..., ... + // On stack, after: ... + // + // Pops off the decorator's parameters, invokes the decorator, + // and inserts the decorator into the decorators list. + registerDecorator: function registerDecorator(paramSize, name) { + var foundDecorator = this.nameLookup('decorators', name, 'decorator'), + options = this.setupHelperArgs(name, paramSize); + + this.decorators.push(['fn = ', this.decorators.functionCall(foundDecorator, '', ['fn', 'props', 'container', options]), ' || fn;']); + }, + + // [invokeHelper] + // + // On stack, before: hash, inverse, program, params..., ... + // On stack, after: result of helper invocation + // + // Pops off the helper's parameters, invokes the helper, + // and pushes the helper's return value onto the stack. + // + // If the helper is not found, `helperMissing` is called. + invokeHelper: function invokeHelper(paramSize, name, isSimple) { + var nonHelper = this.popStack(), + helper = this.setupHelper(paramSize, name); + + var possibleFunctionCalls = []; + + if (isSimple) { + // direct call to helper + possibleFunctionCalls.push(helper.name); + } + // call a function from the input object + possibleFunctionCalls.push(nonHelper); + if (!this.options.strict) { + possibleFunctionCalls.push(this.aliasable('container.hooks.helperMissing')); + } + + var functionLookupCode = ['(', this.itemsSeparatedBy(possibleFunctionCalls, '||'), ')']; + var functionCall = this.source.functionCall(functionLookupCode, 'call', helper.callParams); + this.push(functionCall); + }, + + itemsSeparatedBy: function itemsSeparatedBy(items, separator) { + var result = []; + result.push(items[0]); + for (var i = 1; i < items.length; i++) { + result.push(separator, items[i]); + } + return result; + }, + // [invokeKnownHelper] + // + // On stack, before: hash, inverse, program, params..., ... + // On stack, after: result of helper invocation + // + // This operation is used when the helper is known to exist, + // so a `helperMissing` fallback is not required. + invokeKnownHelper: function invokeKnownHelper(paramSize, name) { + var helper = this.setupHelper(paramSize, name); + this.push(this.source.functionCall(helper.name, 'call', helper.callParams)); + }, + + // [invokeAmbiguous] + // + // On stack, before: hash, inverse, program, params..., ... + // On stack, after: result of disambiguation + // + // This operation is used when an expression like `{{foo}}` + // is provided, but we don't know at compile-time whether it + // is a helper or a path. + // + // This operation emits more code than the other options, + // and can be avoided by passing the `knownHelpers` and + // `knownHelpersOnly` flags at compile-time. + invokeAmbiguous: function invokeAmbiguous(name, helperCall) { + this.useRegister('helper'); + + var nonHelper = this.popStack(); + + this.emptyHash(); + var helper = this.setupHelper(0, name, helperCall); + + var helperName = this.lastHelper = this.nameLookup('helpers', name, 'helper'); + + var lookup = ['(', '(helper = ', helperName, ' || ', nonHelper, ')']; + if (!this.options.strict) { + lookup[0] = '(helper = '; + lookup.push(' != null ? helper : ', this.aliasable('container.hooks.helperMissing')); + } + + this.push(['(', lookup, helper.paramsInit ? ['),(', helper.paramsInit] : [], '),', '(typeof helper === ', this.aliasable('"function"'), ' ? ', this.source.functionCall('helper', 'call', helper.callParams), ' : helper))']); + }, + + // [invokePartial] + // + // On stack, before: context, ... + // On stack after: result of partial invocation + // + // This operation pops off a context, invokes a partial with that context, + // and pushes the result of the invocation back. + invokePartial: function invokePartial(isDynamic, name, indent) { + var params = [], + options = this.setupParams(name, 1, params); + + if (isDynamic) { + name = this.popStack(); + delete options.name; + } + + if (indent) { + options.indent = JSON.stringify(indent); + } + options.helpers = 'helpers'; + options.partials = 'partials'; + options.decorators = 'container.decorators'; + + if (!isDynamic) { + params.unshift(this.nameLookup('partials', name, 'partial')); + } else { + params.unshift(name); + } + + if (this.options.compat) { + options.depths = 'depths'; + } + options = this.objectLiteral(options); + params.push(options); + + this.push(this.source.functionCall('container.invokePartial', '', params)); + }, + + // [assignToHash] + // + // On stack, before: value, ..., hash, ... + // On stack, after: ..., hash, ... + // + // Pops a value off the stack and assigns it to the current hash + assignToHash: function assignToHash(key) { + var value = this.popStack(), + context = undefined, + type = undefined, + id = undefined; + + if (this.trackIds) { + id = this.popStack(); + } + if (this.stringParams) { + type = this.popStack(); + context = this.popStack(); + } + + var hash = this.hash; + if (context) { + hash.contexts[key] = context; + } + if (type) { + hash.types[key] = type; + } + if (id) { + hash.ids[key] = id; + } + hash.values[key] = value; + }, + + pushId: function pushId(type, name, child) { + if (type === 'BlockParam') { + this.pushStackLiteral('blockParams[' + name[0] + '].path[' + name[1] + ']' + (child ? ' + ' + JSON.stringify('.' + child) : '')); + } else if (type === 'PathExpression') { + this.pushString(name); + } else if (type === 'SubExpression') { + this.pushStackLiteral('true'); + } else { + this.pushStackLiteral('null'); + } + }, + + // HELPERS + + compiler: JavaScriptCompiler, + + compileChildren: function compileChildren(environment, options) { + var children = environment.children, + child = undefined, + compiler = undefined; + + for (var i = 0, l = children.length; i < l; i++) { + child = children[i]; + compiler = new this.compiler(); // eslint-disable-line new-cap + + var existing = this.matchExistingProgram(child); + + if (existing == null) { + this.context.programs.push(''); // Placeholder to prevent name conflicts for nested children + var index = this.context.programs.length; + child.index = index; + child.name = 'program' + index; + this.context.programs[index] = compiler.compile(child, options, this.context, !this.precompile); + this.context.decorators[index] = compiler.decorators; + this.context.environments[index] = child; + + this.useDepths = this.useDepths || compiler.useDepths; + this.useBlockParams = this.useBlockParams || compiler.useBlockParams; + child.useDepths = this.useDepths; + child.useBlockParams = this.useBlockParams; + } else { + child.index = existing.index; + child.name = 'program' + existing.index; + + this.useDepths = this.useDepths || existing.useDepths; + this.useBlockParams = this.useBlockParams || existing.useBlockParams; + } + } + }, + matchExistingProgram: function matchExistingProgram(child) { + for (var i = 0, len = this.context.environments.length; i < len; i++) { + var environment = this.context.environments[i]; + if (environment && environment.equals(child)) { + return environment; + } + } + }, + + programExpression: function programExpression(guid) { + var child = this.environment.children[guid], + programParams = [child.index, 'data', child.blockParams]; + + if (this.useBlockParams || this.useDepths) { + programParams.push('blockParams'); + } + if (this.useDepths) { + programParams.push('depths'); + } + + return 'container.program(' + programParams.join(', ') + ')'; + }, + + useRegister: function useRegister(name) { + if (!this.registers[name]) { + this.registers[name] = true; + this.registers.list.push(name); + } + }, + + push: function push(expr) { + if (!(expr instanceof Literal)) { + expr = this.source.wrap(expr); + } + + this.inlineStack.push(expr); + return expr; + }, + + pushStackLiteral: function pushStackLiteral(item) { + this.push(new Literal(item)); + }, + + pushSource: function pushSource(source) { + if (this.pendingContent) { + this.source.push(this.appendToBuffer(this.source.quotedString(this.pendingContent), this.pendingLocation)); + this.pendingContent = undefined; + } + + if (source) { + this.source.push(source); + } + }, + + replaceStack: function replaceStack(callback) { + var prefix = ['('], + stack = undefined, + createdStack = undefined, + usedLiteral = undefined; + + /* istanbul ignore next */ + if (!this.isInline()) { + throw new _exception2['default']('replaceStack on non-inline'); + } + + // We want to merge the inline statement into the replacement statement via ',' + var top = this.popStack(true); + + if (top instanceof Literal) { + // Literals do not need to be inlined + stack = [top.value]; + prefix = ['(', stack]; + usedLiteral = true; + } else { + // Get or create the current stack name for use by the inline + createdStack = true; + var _name = this.incrStack(); + + prefix = ['((', this.push(_name), ' = ', top, ')']; + stack = this.topStack(); + } + + var item = callback.call(this, stack); + + if (!usedLiteral) { + this.popStack(); + } + if (createdStack) { + this.stackSlot--; + } + this.push(prefix.concat(item, ')')); + }, + + incrStack: function incrStack() { + this.stackSlot++; + if (this.stackSlot > this.stackVars.length) { + this.stackVars.push('stack' + this.stackSlot); + } + return this.topStackName(); + }, + topStackName: function topStackName() { + return 'stack' + this.stackSlot; + }, + flushInline: function flushInline() { + var inlineStack = this.inlineStack; + this.inlineStack = []; + for (var i = 0, len = inlineStack.length; i < len; i++) { + var entry = inlineStack[i]; + /* istanbul ignore if */ + if (entry instanceof Literal) { + this.compileStack.push(entry); + } else { + var stack = this.incrStack(); + this.pushSource([stack, ' = ', entry, ';']); + this.compileStack.push(stack); + } + } + }, + isInline: function isInline() { + return this.inlineStack.length; + }, + + popStack: function popStack(wrapped) { + var inline = this.isInline(), + item = (inline ? this.inlineStack : this.compileStack).pop(); + + if (!wrapped && item instanceof Literal) { + return item.value; + } else { + if (!inline) { + /* istanbul ignore next */ + if (!this.stackSlot) { + throw new _exception2['default']('Invalid stack pop'); + } + this.stackSlot--; + } + return item; + } + }, + + topStack: function topStack() { + var stack = this.isInline() ? this.inlineStack : this.compileStack, + item = stack[stack.length - 1]; + + /* istanbul ignore if */ + if (item instanceof Literal) { + return item.value; + } else { + return item; + } + }, + + contextName: function contextName(context) { + if (this.useDepths && context) { + return 'depths[' + context + ']'; + } else { + return 'depth' + context; + } + }, + + quotedString: function quotedString(str) { + return this.source.quotedString(str); + }, + + objectLiteral: function objectLiteral(obj) { + return this.source.objectLiteral(obj); + }, + + aliasable: function aliasable(name) { + var ret = this.aliases[name]; + if (ret) { + ret.referenceCount++; + return ret; + } + + ret = this.aliases[name] = this.source.wrap(name); + ret.aliasable = true; + ret.referenceCount = 1; + + return ret; + }, + + setupHelper: function setupHelper(paramSize, name, blockHelper) { + var params = [], + paramsInit = this.setupHelperArgs(name, paramSize, params, blockHelper); + var foundHelper = this.nameLookup('helpers', name, 'helper'), + callContext = this.aliasable(this.contextName(0) + ' != null ? ' + this.contextName(0) + ' : (container.nullContext || {})'); + + return { + params: params, + paramsInit: paramsInit, + name: foundHelper, + callParams: [callContext].concat(params) + }; + }, + + setupParams: function setupParams(helper, paramSize, params) { + var options = {}, + contexts = [], + types = [], + ids = [], + objectArgs = !params, + param = undefined; + + if (objectArgs) { + params = []; + } + + options.name = this.quotedString(helper); + options.hash = this.popStack(); + + if (this.trackIds) { + options.hashIds = this.popStack(); + } + if (this.stringParams) { + options.hashTypes = this.popStack(); + options.hashContexts = this.popStack(); + } + + var inverse = this.popStack(), + program = this.popStack(); + + // Avoid setting fn and inverse if neither are set. This allows + // helpers to do a check for `if (options.fn)` + if (program || inverse) { + options.fn = program || 'container.noop'; + options.inverse = inverse || 'container.noop'; + } + + // The parameters go on to the stack in order (making sure that they are evaluated in order) + // so we need to pop them off the stack in reverse order + var i = paramSize; + while (i--) { + param = this.popStack(); + params[i] = param; + + if (this.trackIds) { + ids[i] = this.popStack(); + } + if (this.stringParams) { + types[i] = this.popStack(); + contexts[i] = this.popStack(); + } + } + + if (objectArgs) { + options.args = this.source.generateArray(params); + } + + if (this.trackIds) { + options.ids = this.source.generateArray(ids); + } + if (this.stringParams) { + options.types = this.source.generateArray(types); + options.contexts = this.source.generateArray(contexts); + } + + if (this.options.data) { + options.data = 'data'; + } + if (this.useBlockParams) { + options.blockParams = 'blockParams'; + } + return options; + }, + + setupHelperArgs: function setupHelperArgs(helper, paramSize, params, useRegister) { + var options = this.setupParams(helper, paramSize, params); + options.loc = JSON.stringify(this.source.currentLocation); + options = this.objectLiteral(options); + if (useRegister) { + this.useRegister('options'); + params.push('options'); + return ['options=', options]; + } else if (params) { + params.push(options); + return ''; + } else { + return options; + } + } +}; + +(function () { + var reservedWords = ('break else new var' + ' case finally return void' + ' catch for switch while' + ' continue function this with' + ' default if throw' + ' delete in try' + ' do instanceof typeof' + ' abstract enum int short' + ' boolean export interface static' + ' byte extends long super' + ' char final native synchronized' + ' class float package throws' + ' const goto private transient' + ' debugger implements protected volatile' + ' double import public let yield await' + ' null true false').split(' '); + + var compilerWords = JavaScriptCompiler.RESERVED_WORDS = {}; + + for (var i = 0, l = reservedWords.length; i < l; i++) { + compilerWords[reservedWords[i]] = true; + } +})(); + +/** + * @deprecated May be removed in the next major version + */ +JavaScriptCompiler.isValidJavaScriptVariableName = function (name) { + return !JavaScriptCompiler.RESERVED_WORDS[name] && /^[a-zA-Z_$][0-9a-zA-Z_$]*$/.test(name); +}; + +function strictLookup(requireTerminal, compiler, parts, type) { + var stack = compiler.popStack(), + i = 0, + len = parts.length; + if (requireTerminal) { + len--; + } + + for (; i < len; i++) { + stack = compiler.nameLookup(stack, parts[i], type); + } + + if (requireTerminal) { + return [compiler.aliasable('container.strict'), '(', stack, ', ', compiler.quotedString(parts[i]), ', ', JSON.stringify(compiler.source.currentLocation), ' )']; + } else { + return stack; + } +} + +exports['default'] = JavaScriptCompiler; +module.exports = exports['default']; + +}); + +var handlebars = createCommonjsModule(function (module, exports) { + +exports.__esModule = true; +// istanbul ignore next + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + + +var _handlebarsRuntime2 = _interopRequireDefault(handlebars_runtime); + +// Compiler imports + + + +var _handlebarsCompilerAst2 = _interopRequireDefault(ast); + + + + + + + +var _handlebarsCompilerJavascriptCompiler2 = _interopRequireDefault(javascriptCompiler); + + + +var _handlebarsCompilerVisitor2 = _interopRequireDefault(visitor); + + + +var _handlebarsNoConflict2 = _interopRequireDefault(noConflict); + +var _create = _handlebarsRuntime2['default'].create; +function create() { + var hb = _create(); + + hb.compile = function (input, options) { + return compiler.compile(input, options, hb); + }; + hb.precompile = function (input, options) { + return compiler.precompile(input, options, hb); + }; + + hb.AST = _handlebarsCompilerAst2['default']; + hb.Compiler = compiler.Compiler; + hb.JavaScriptCompiler = _handlebarsCompilerJavascriptCompiler2['default']; + hb.Parser = base$1.parser; + hb.parse = base$1.parse; + hb.parseWithoutProcessing = base$1.parseWithoutProcessing; + + return hb; +} + +var inst = create(); +inst.create = create; + +_handlebarsNoConflict2['default'](inst); + +inst.Visitor = _handlebarsCompilerVisitor2['default']; + +inst['default'] = inst; + +exports['default'] = inst; +module.exports = exports['default']; + +}); + +var printer = createCommonjsModule(function (module, exports) { + +exports.__esModule = true; +exports.print = print; +exports.PrintVisitor = PrintVisitor; +// istanbul ignore next + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + + +var _visitor2 = _interopRequireDefault(visitor); + +function print(ast) { + return new PrintVisitor().accept(ast); +} + +function PrintVisitor() { + this.padding = 0; +} + +PrintVisitor.prototype = new _visitor2['default'](); + +PrintVisitor.prototype.pad = function (string) { + var out = ''; + + for (var i = 0, l = this.padding; i < l; i++) { + out += ' '; + } + + out += string + '\n'; + return out; +}; + +PrintVisitor.prototype.Program = function (program) { + var out = '', + body = program.body, + i = undefined, + l = undefined; + + if (program.blockParams) { + var blockParams = 'BLOCK PARAMS: ['; + for (i = 0, l = program.blockParams.length; i < l; i++) { + blockParams += ' ' + program.blockParams[i]; + } + blockParams += ' ]'; + out += this.pad(blockParams); + } + + for (i = 0, l = body.length; i < l; i++) { + out += this.accept(body[i]); + } + + this.padding--; + + return out; +}; + +PrintVisitor.prototype.MustacheStatement = function (mustache) { + return this.pad('{{ ' + this.SubExpression(mustache) + ' }}'); +}; +PrintVisitor.prototype.Decorator = function (mustache) { + return this.pad('{{ DIRECTIVE ' + this.SubExpression(mustache) + ' }}'); +}; + +PrintVisitor.prototype.BlockStatement = PrintVisitor.prototype.DecoratorBlock = function (block) { + var out = ''; + + out += this.pad((block.type === 'DecoratorBlock' ? 'DIRECTIVE ' : '') + 'BLOCK:'); + this.padding++; + out += this.pad(this.SubExpression(block)); + if (block.program) { + out += this.pad('PROGRAM:'); + this.padding++; + out += this.accept(block.program); + this.padding--; + } + if (block.inverse) { + if (block.program) { + this.padding++; + } + out += this.pad('{{^}}'); + this.padding++; + out += this.accept(block.inverse); + this.padding--; + if (block.program) { + this.padding--; + } + } + this.padding--; + + return out; +}; + +PrintVisitor.prototype.PartialStatement = function (partial) { + var content = 'PARTIAL:' + partial.name.original; + if (partial.params[0]) { + content += ' ' + this.accept(partial.params[0]); + } + if (partial.hash) { + content += ' ' + this.accept(partial.hash); + } + return this.pad('{{> ' + content + ' }}'); +}; +PrintVisitor.prototype.PartialBlockStatement = function (partial) { + var content = 'PARTIAL BLOCK:' + partial.name.original; + if (partial.params[0]) { + content += ' ' + this.accept(partial.params[0]); + } + if (partial.hash) { + content += ' ' + this.accept(partial.hash); + } + + content += ' ' + this.pad('PROGRAM:'); + this.padding++; + content += this.accept(partial.program); + this.padding--; + + return this.pad('{{> ' + content + ' }}'); +}; + +PrintVisitor.prototype.ContentStatement = function (content) { + return this.pad("CONTENT[ '" + content.value + "' ]"); +}; + +PrintVisitor.prototype.CommentStatement = function (comment) { + return this.pad("{{! '" + comment.value + "' }}"); +}; + +PrintVisitor.prototype.SubExpression = function (sexpr) { + var params = sexpr.params, + paramStrings = [], + hash = undefined; + + for (var i = 0, l = params.length; i < l; i++) { + paramStrings.push(this.accept(params[i])); + } + + params = '[' + paramStrings.join(', ') + ']'; + + hash = sexpr.hash ? ' ' + this.accept(sexpr.hash) : ''; + + return this.accept(sexpr.path) + ' ' + params + hash; +}; + +PrintVisitor.prototype.PathExpression = function (id) { + var path = id.parts.join('/'); + return (id.data ? '@' : '') + 'PATH:' + path; +}; + +PrintVisitor.prototype.StringLiteral = function (string) { + return '"' + string.value + '"'; +}; + +PrintVisitor.prototype.NumberLiteral = function (number) { + return 'NUMBER{' + number.value + '}'; +}; + +PrintVisitor.prototype.BooleanLiteral = function (bool) { + return 'BOOLEAN{' + bool.value + '}'; +}; + +PrintVisitor.prototype.UndefinedLiteral = function () { + return 'UNDEFINED'; +}; + +PrintVisitor.prototype.NullLiteral = function () { + return 'NULL'; +}; + +PrintVisitor.prototype.Hash = function (hash) { + var pairs = hash.pairs, + joinedPairs = []; + + for (var i = 0, l = pairs.length; i < l; i++) { + joinedPairs.push(this.accept(pairs[i])); + } + + return 'HASH{' + joinedPairs.join(', ') + '}'; +}; +PrintVisitor.prototype.HashPair = function (pair) { + return pair.key + '=' + this.accept(pair.value); +}; +/* eslint-enable new-cap */ + +}); + +// USAGE: +// var handlebars = require('handlebars'); +/* eslint-disable no-var */ + +// var local = handlebars.create(); + +var handlebars$1 = handlebars['default']; + + +handlebars$1.PrintVisitor = printer.PrintVisitor; +handlebars$1.print = printer.print; + +var lib = handlebars$1; + +// Publish a Node.js require() handler for .handlebars and .hbs files +function extension(module, filename) { + var fs = fs__default['default']; + var templateString = fs.readFileSync(filename, 'utf8'); + module.exports = handlebars$1.compile(templateString); +} +/* istanbul ignore else */ +if (typeof commonjsRequire !== 'undefined' && commonjsRequire.extensions) { + commonjsRequire.extensions['.handlebars'] = extension; + commonjsRequire.extensions['.hbs'] = extension; +} + +/** + * Defines an event manager for the citations plugin. + */ +var CitationEvents = /** @class */ (function (_super) { + __extends(CitationEvents, _super); + function CitationEvents() { + return _super !== null && _super.apply(this, arguments) || this; + } + CitationEvents.prototype.on = function (name, callback, ctx) { + return _super.prototype.on.call(this, name, callback, ctx); + }; + CitationEvents.prototype.trigger = function (name) { + var data = []; + for (var _i = 1; _i < arguments.length; _i++) { + data[_i - 1] = arguments[_i]; + } + _super.prototype.trigger.call(this, name, data); + }; + return CitationEvents; +}(obsidian.Events)); + +var SearchModal = /** @class */ (function (_super) { + __extends(SearchModal, _super); + function SearchModal(app, plugin) { + var _this = _super.call(this, app) || this; + _this.limit = 50; + _this.plugin = plugin; + _this.resultContainerEl.addClass('zoteroModalResults'); + _this.inputEl.setAttribute('spellcheck', 'false'); + _this.loadingEl = _this.resultContainerEl.parentElement.createEl('div', { + cls: 'zoteroModalLoading', + }); + _this.loadingEl.createEl('div', { cls: 'zoteroModalLoadingAnimation' }); + _this.loadingEl.createEl('p', { + text: 'Loading citation database. Please wait...', + }); + return _this; + } + SearchModal.prototype.onOpen = function () { + var _this = this; + _super.prototype.onOpen.call(this); + this.eventRefs = [ + this.plugin.events.on('library-load-start', function () { + _this.setLoading(true); + }), + this.plugin.events.on('library-load-complete', function () { + _this.setLoading(false); + }), + ]; + this.setLoading(this.plugin.isLibraryLoading); + // Don't immediately register keyevent listeners. If the modal was triggered + // by an "Enter" keystroke (e.g. via the Obsidian command dialog), this event + // will be received here erroneously. + setTimeout(function () { + _this.inputEl.addEventListener('keydown', function (ev) { return _this.onInputKeydown(ev); }); + _this.inputEl.addEventListener('keyup', function (ev) { return _this.onInputKeyup(ev); }); + }, 200); + }; + SearchModal.prototype.onClose = function () { + var _this = this; + var _a; + (_a = this.eventRefs) === null || _a === void 0 ? void 0 : _a.forEach(function (e) { return _this.plugin.events.offref(e); }); + }; + SearchModal.prototype.getItems = function () { + if (this.plugin.isLibraryLoading) { + return []; + } + return Object.values(this.plugin.library.entries); + }; + SearchModal.prototype.getItemText = function (item) { + return item.title + " " + item.authorString + " " + item.year; + }; + SearchModal.prototype.setLoading = function (loading) { + if (loading) { + this.loadingEl.removeClass('d-none'); + this.inputEl.disabled = true; + this.resultContainerEl.empty(); + } + else { + this.loadingEl.addClass('d-none'); + this.inputEl.disabled = false; + this.inputEl.focus(); + // @ts-ignore: not exposed in API. + this.updateSuggestions(); + } + }; + // eslint-disable-next-line @typescript-eslint/no-unused-vars + SearchModal.prototype.onChooseItem = function (item, evt) { + this.plugin.openLiteratureNote(item.id, false).catch(console.error); + }; + SearchModal.prototype.renderSuggestion = function (match, el) { + el.empty(); + var entry = match.item; + var entryTitle = entry.title || ''; + var container = el.createEl('div', { cls: 'zoteroResult' }); + var titleEl = container.createEl('span', { + cls: 'zoteroTitle', + }); + container.createEl('span', { cls: 'zoteroCitekey', text: entry.id }); + var authorsCls = entry.authorString + ? 'zoteroAuthors' + : 'zoteroAuthors zoteroAuthorsEmpty'; + var authorsEl = container.createEl('span', { + cls: authorsCls, + }); + // Prepare to highlight string matches for each part of the search item. + // Compute offsets of each rendered element's content within the string + // returned by `getItemText`. + var allMatches = match.match.matches; + var authorStringOffset = 1 + entryTitle.length; + // Filter a match list to contain only the relevant matches for a given + // substring, and with match indices shifted relative to the start of that + // substring + var shiftMatches = function (matches, start, end) { + return matches + .map(function (match) { + var matchStart = match[0], matchEnd = match[1]; + return [ + matchStart - start, + Math.min(matchEnd - start, end), + ]; + }) + .filter(function (match) { + var matchStart = match[0], matchEnd = match[1]; + return matchStart >= 0; + }); + }; + // Now highlight matched strings within each element + obsidian.renderMatches(titleEl, entryTitle, shiftMatches(allMatches, 0, entryTitle.length)); + if (entry.authorString) { + obsidian.renderMatches(authorsEl, entry.authorString, shiftMatches(allMatches, authorStringOffset, authorStringOffset + entry.authorString.length)); + } + }; + SearchModal.prototype.onInputKeydown = function (ev) { + if (ev.key == 'Tab') { + ev.preventDefault(); + } + }; + SearchModal.prototype.onInputKeyup = function (ev) { + if (ev.key == 'Enter' || ev.key == 'Tab') { + this.chooser.useSelectedItem(ev); + } + }; + return SearchModal; +}(obsidian.FuzzySuggestModal)); +var OpenNoteModal = /** @class */ (function (_super) { + __extends(OpenNoteModal, _super); + function OpenNoteModal(app, plugin) { + var _this = _super.call(this, app, plugin) || this; + _this.setInstructions([ + { command: '↑↓', purpose: 'to navigate' }, + { command: '↵', purpose: 'to open literature note' }, + { command: 'ctrl ↵', purpose: 'to open literature note in a new pane' }, + { command: 'tab', purpose: 'open in Zotero' }, + { command: 'shift tab', purpose: 'open PDF' }, + { command: 'esc', purpose: 'to dismiss' }, + ]); + return _this; + } + OpenNoteModal.prototype.onChooseItem = function (item, evt) { + if (evt instanceof MouseEvent || evt.key == 'Enter') { + var newPane = evt instanceof KeyboardEvent && evt.ctrlKey; + this.plugin.openLiteratureNote(item.id, newPane); + } + else if (evt.key == 'Tab') { + if (evt.shiftKey) { + var files = item.files || []; + var pdfPaths = files.filter(function (path) { + return path.toLowerCase().endsWith('pdf'); + }); + if (pdfPaths.length == 0) { + new obsidian.Notice('This reference has no associated PDF files.'); + } + else { + open("file://" + pdfPaths[0]); + } + } + else { + open(item.zoteroSelectURI); + } + } + }; + return OpenNoteModal; +}(SearchModal)); +var InsertNoteLinkModal = /** @class */ (function (_super) { + __extends(InsertNoteLinkModal, _super); + function InsertNoteLinkModal(app, plugin) { + var _this = _super.call(this, app, plugin) || this; + _this.setInstructions([ + { command: '↑↓', purpose: 'to navigate' }, + { command: '↵', purpose: 'to insert literature note reference' }, + { command: 'esc', purpose: 'to dismiss' }, + ]); + return _this; + } + // eslint-disable-next-line @typescript-eslint/no-unused-vars + InsertNoteLinkModal.prototype.onChooseItem = function (item, evt) { + this.plugin.insertLiteratureNoteLink(item.id).catch(console.error); + }; + return InsertNoteLinkModal; +}(SearchModal)); +var InsertNoteContentModal = /** @class */ (function (_super) { + __extends(InsertNoteContentModal, _super); + function InsertNoteContentModal(app, plugin) { + var _this = _super.call(this, app, plugin) || this; + _this.setInstructions([ + { command: '↑↓', purpose: 'to navigate' }, + { + command: '↵', + purpose: 'to insert literature note content in active pane', + }, + { command: 'esc', purpose: 'to dismiss' }, + ]); + return _this; + } + // eslint-disable-next-line @typescript-eslint/no-unused-vars + InsertNoteContentModal.prototype.onChooseItem = function (item, evt) { + this.plugin.insertLiteratureNoteContent(item.id).catch(console.error); + }; + return InsertNoteContentModal; +}(SearchModal)); +var InsertCitationModal = /** @class */ (function (_super) { + __extends(InsertCitationModal, _super); + function InsertCitationModal(app, plugin) { + var _this = _super.call(this, app, plugin) || this; + _this.setInstructions([ + { command: '↑↓', purpose: 'to navigate' }, + { command: '↵', purpose: 'to insert Markdown citation' }, + { command: 'shift ↵', purpose: 'to insert secondary Markdown citation' }, + { command: 'esc', purpose: 'to dismiss' }, + ]); + return _this; + } + // eslint-disable-next-line @typescript-eslint/no-unused-vars + InsertCitationModal.prototype.onChooseItem = function (item, evt) { + var isAlternative = evt instanceof KeyboardEvent && evt.shiftKey; + this.plugin + .insertMarkdownCitation(item.id, isAlternative) + .catch(console.error); + }; + return InsertCitationModal; +}(SearchModal)); + +/* + * Generated by PEG.js 0.10.0. + * + * http://pegjs.org/ + */ + +function peg$subclass(child, parent) { + function ctor() { this.constructor = child; } + ctor.prototype = parent.prototype; + child.prototype = new ctor(); +} + +function peg$SyntaxError(message, expected, found, location) { + this.message = message; + this.expected = expected; + this.found = found; + this.location = location; + this.name = "SyntaxError"; + + if (typeof Error.captureStackTrace === "function") { + Error.captureStackTrace(this, peg$SyntaxError); + } +} + +peg$subclass(peg$SyntaxError, Error); + +peg$SyntaxError.buildMessage = function(expected, found) { + var DESCRIBE_EXPECTATION_FNS = { + literal: function(expectation) { + return "\"" + literalEscape(expectation.text) + "\""; + }, + + "class": function(expectation) { + var escapedParts = "", + i; + + for (i = 0; i < expectation.parts.length; i++) { + escapedParts += expectation.parts[i] instanceof Array + ? classEscape(expectation.parts[i][0]) + "-" + classEscape(expectation.parts[i][1]) + : classEscape(expectation.parts[i]); + } + + return "[" + (expectation.inverted ? "^" : "") + escapedParts + "]"; + }, + + any: function(expectation) { + return "any character"; + }, + + end: function(expectation) { + return "end of input"; + }, + + other: function(expectation) { + return expectation.description; + } + }; + + function hex(ch) { + return ch.charCodeAt(0).toString(16).toUpperCase(); + } + + function literalEscape(s) { + return s + .replace(/\\/g, '\\\\') + .replace(/"/g, '\\"') + .replace(/\0/g, '\\0') + .replace(/\t/g, '\\t') + .replace(/\n/g, '\\n') + .replace(/\r/g, '\\r') + .replace(/[\x00-\x0F]/g, function(ch) { return '\\x0' + hex(ch); }) + .replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { return '\\x' + hex(ch); }); + } + + function classEscape(s) { + return s + .replace(/\\/g, '\\\\') + .replace(/\]/g, '\\]') + .replace(/\^/g, '\\^') + .replace(/-/g, '\\-') + .replace(/\0/g, '\\0') + .replace(/\t/g, '\\t') + .replace(/\n/g, '\\n') + .replace(/\r/g, '\\r') + .replace(/[\x00-\x0F]/g, function(ch) { return '\\x0' + hex(ch); }) + .replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { return '\\x' + hex(ch); }); + } + + function describeExpectation(expectation) { + return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); + } + + function describeExpected(expected) { + var descriptions = new Array(expected.length), + i, j; + + for (i = 0; i < expected.length; i++) { + descriptions[i] = describeExpectation(expected[i]); + } + + descriptions.sort(); + + if (descriptions.length > 0) { + for (i = 1, j = 1; i < descriptions.length; i++) { + if (descriptions[i - 1] !== descriptions[i]) { + descriptions[j] = descriptions[i]; + j++; + } + } + descriptions.length = j; + } + + switch (descriptions.length) { + case 1: + return descriptions[0]; + + case 2: + return descriptions[0] + " or " + descriptions[1]; + + default: + return descriptions.slice(0, -1).join(", ") + + ", or " + + descriptions[descriptions.length - 1]; + } + } + + function describeFound(found) { + return found ? "\"" + literalEscape(found) + "\"" : "end of input"; + } + + return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; +}; + +function peg$parse(input, options) { + options = options !== void 0 ? options : {}; + + var peg$FAILED = {}, + + peg$startRuleFunctions = { Bibliography: peg$parseBibliography }, + peg$startRuleFunction = peg$parseBibliography, + + peg$c0 = function(r) { + return { + kind: 'Bibliography', + loc: location(), + source: text(), + children: r, + } + }, + peg$c1 = "@", + peg$c2 = peg$literalExpectation("@", false), + peg$c3 = "comment", + peg$c4 = peg$literalExpectation("comment", true), + peg$c5 = function(v) { + return { + kind: 'BracedComment', + loc: location(), + source: text(), + value: v.slice(1, -1), + } + }, + peg$c6 = /^[^\n\r]/, + peg$c7 = peg$classExpectation(["\n", "\r"], true, false), + peg$c8 = /^[\n\r]/, + peg$c9 = peg$classExpectation(["\n", "\r"], false, false), + peg$c10 = function(v) { + return { + kind: 'LineComment', + loc: location(), + source: text(), + value: normalizeWhitespace(v), + } + }, + peg$c11 = /^[^@]/, + peg$c12 = peg$classExpectation(["@"], true, false), + peg$c13 = function(v) { + return { + kind: 'NonEntryText', + loc: location(), + source: text(), + value: normalizeWhitespace(v), + } + }, + peg$c14 = function(n) { return n; }, + peg$c15 = "{", + peg$c16 = peg$literalExpectation("{", false), + peg$c17 = /^[^{}]/, + peg$c18 = peg$classExpectation(["{", "}"], true, false), + peg$c19 = "}", + peg$c20 = peg$literalExpectation("}", false), + peg$c21 = function(comment) { return '{' + comment.join('') + '}' }, + peg$c22 = /^[A-Za-z]/, + peg$c23 = peg$classExpectation([["A", "Z"], ["a", "z"]], false, false), + peg$c24 = /^[({]/, + peg$c25 = peg$classExpectation(["(", "{"], false, false), + peg$c26 = /^[})]/, + peg$c27 = peg$classExpectation(["}", ")"], false, false), + peg$c28 = function(type, id, fields) { + return { + kind: 'Entry', + id: id || '', + type: type.toLowerCase(), + loc: location(), + source: text(), + fields: fields, + } + }, + peg$c29 = "preamble", + peg$c30 = peg$literalExpectation("preamble", true), + peg$c31 = function(opener, v, closer) { + switch (opener + closer) { + case '{}': + case '()': + break + default: + throw new Error(`Unbalanced opener-closer for preamble: ${opener}...${closer}`) + } + return { + kind: 'PreambleExpression', + loc: location(), + source: text(), + value: v.reduce((a, b) => a.concat(b), []), + } + }, + peg$c32 = "string", + peg$c33 = peg$literalExpectation("string", true), + peg$c34 = function(k, v) { + return { + kind: 'StringDeclaration', + loc: location(), + source: text(), + name: k, + value: v.reduce((a, b) => a.concat(b), []), + } + }, + peg$c35 = /^[^ \t\r\n,]/, + peg$c36 = peg$classExpectation([" ", "\t", "\r", "\n", ","], true, false), + peg$c37 = ",", + peg$c38 = peg$literalExpectation(",", false), + peg$c39 = function(id) { return id; }, + peg$c40 = function(name) { return isVerbatimField(name) && unnestFields.includes(name) }, + peg$c41 = function(name, value) { + // because this was abused so much, many processors treat double-outer-braces as single + return { + kind: 'Field', + loc: location(), + source: text(), + name: name, + loc: location(), + value: [ protect(value) ] + } + }, + peg$c42 = function(name) { return isVerbatimField(name) }, + peg$c43 = function(name, value) { + return { + kind: 'Field', + loc: location(), + source: text(), + name: name, + loc: location(), + value: [ protect(value) ] + } + }, + peg$c44 = function(name, value) { + // because this was abused so much, many processors treat double-outer-braces as single + if (unnestFields.includes(name) && Array.isArray(value) && value.length === 1 && value[0].kind === 'Block') { + if (options.unnestMode === 'preserve') { + value[0].case = 'preserve'; + } else { + value = value[0].value; + } + } + + return handle_markup_switches({ + kind: 'Field', + loc: location(), + source: text(), + name: name, + value: value, + }) + }, + peg$c45 = /^[_:a-zA-Z0-9\-]/, + peg$c46 = peg$classExpectation(["_", ":", ["a", "z"], ["A", "Z"], ["0", "9"], "-"], false, false), + peg$c47 = function(name) { return name.toLowerCase() }, + peg$c48 = "\"", + peg$c49 = peg$literalExpectation("\"", false), + peg$c50 = function(v) { + v = v || { + kind: 'Text', + loc: location(), + source: text(), + value: '', + }; + v.mode = 'verbatim'; + return basicTextConversions(v) + }, + peg$c51 = function(v) { + return basicTextConversions({ + kind: 'Text', + loc: location(), + source: text(), + value: v.join('').trim(), + mode: 'verbatim', + }) + }, + peg$c52 = function(v) { return v }, + peg$c53 = function(v) { return '{' + v.join('') + '}' }, + peg$c54 = function() { return math.set(false) }, + peg$c55 = function(v) { + return v.reduce((a, b) => a.concat(b), []); + }, + peg$c56 = function(v) { return v; }, + peg$c57 = "{\\verb", + peg$c58 = peg$literalExpectation("{\\verb", false), + peg$c59 = /^[a-zA-Z]/, + peg$c60 = peg$classExpectation([["a", "z"], ["A", "Z"]], false, false), + peg$c61 = /^[^\^_${}\\]/, + peg$c62 = peg$classExpectation(["^", "_", "$", "{", "}", "\\"], true, false), + peg$c63 = function(v) { + return basicTextConversions({ + kind: 'Text', + loc: location(), + source: text(), + value: normalizeWhitespace(v), + mode: math.on ? 'math' : 'text', + }) + }, + peg$c64 = /^[^\^_${}"\\]/, + peg$c65 = peg$classExpectation(["^", "_", "$", "{", "}", "\"", "\\"], true, false), + peg$c66 = /^[0-9]/, + peg$c67 = peg$classExpectation([["0", "9"]], false, false), + peg$c68 = function(v) { + return { + kind: 'Number', + loc: location(), + source: text(), + value: parseInt(v, 10), + } + }, + peg$c69 = function(v) { + return { + kind: 'StringReference', + loc: location(), + source: text(), + name: v, + } + }, + peg$c70 = "\\begin{", + peg$c71 = peg$literalExpectation("\\begin{", false), + peg$c72 = /^[a-zA-Z0-9]/, + peg$c73 = peg$classExpectation([["a", "z"], ["A", "Z"], ["0", "9"]], false, false), + peg$c74 = "\\end{", + peg$c75 = peg$literalExpectation("\\end{", false), + peg$c76 = function(env, v, cenv) { return env === cenv }, + peg$c77 = function(env, v, cenv) { + if (markup[env]) { + return { + kind: 'Block', + loc: location(), + source: text(), + value: v, + markup: { [markup[env]]: true }, + } + } else { + return { + kind: 'Environment', + loc: location(), + source: text(), + value: v, + env: env, + } + } + }, + peg$c78 = "{\\", + peg$c79 = peg$literalExpectation("{\\", false), + peg$c80 = "\\", + peg$c81 = peg$literalExpectation("\\", false), + peg$c82 = /^[ij]/, + peg$c83 = peg$classExpectation(["i", "j"], false, false), + peg$c84 = function(mark, char) { + return { + kind: 'DiacriticCommand', + loc: location(), + source: text(), + mark: mark, + dotless: !!char[1], + character: char[1] || char[0], + } + }, + peg$c85 = function(v) { + return basicTextConversions({ + kind: 'Text', + loc: location(), + source: text(), + value: v.join('').trim(), + mode: 'verbatim', + }) + }, + peg$c86 = function(v) { + const block = { + kind: 'Block', + loc: location(), + source: text(), + value: v, + markup: {}, + case: 'protect', + }; + + let leadingcmd = block.value.length && (block.value[0].kind.endsWith('Command') || block.value[0].kind === 'Environment') ? block.value[0] : null; + let leadingcmdblockarg = leadingcmd + && leadingcmd.kind === 'RegularCommand' + && leadingcmd.arguments.required.length + && leadingcmd.arguments.required[0].kind === 'Block' + && leadingcmd.arguments.required[0]; + + // https://github.com/retorquere/zotero-better-bibtex/issues/541#issuecomment-240156274 + if (leadingcmd) { + delete block.case; + + // command with a block cancels out case protection with containing block + // if a smallcaps block has set case to 'preserve' we want to keep this + if (leadingcmdblockarg && leadingcmdblockarg.case === 'protect') delete leadingcmdblockarg.case; + + // \sl, \it etc + if (markup[leadingcmd.command]) { + block.markup[markup[leadingcmd.command]] = true; + block.value.shift(); + } + } + + return handle_markup_switches(block) + }, + peg$c87 = function() { return !math.on }, + peg$c88 = "$", + peg$c89 = peg$literalExpectation("$", false), + peg$c90 = "$$", + peg$c91 = peg$literalExpectation("$$", false), + peg$c92 = function(mode) { return math.set(true) }, + peg$c93 = function(mode, v) { return math.set(false) }, + peg$c94 = function(mode, v) { + return { + kind: mode == '$$' ? 'DisplayMath' : 'InlineMath', + loc: location(), + source: text(), + value: v, + case: 'protect', + markup: {}, + } + }, + peg$c95 = "%", + peg$c96 = peg$literalExpectation("%", false), + peg$c97 = /^[^\r\n]/, + peg$c98 = peg$classExpectation(["\r", "\n"], true, false), + peg$c99 = function(v) { + return { + kind: 'LineComment', + loc: location(), + source: text(), + value: v, + } + }, + peg$c100 = /^[_\^]/, + peg$c101 = peg$classExpectation(["_", "^"], false, false), + peg$c102 = function(mode, v) { + if (v.kind === 'Block') v = v.value; + + return { + kind: mode === '_' ? 'SubscriptCommand' : 'SuperscriptCommand', + loc: location(), + source: text(), + value: v, + } + }, + peg$c103 = function(mark, v) { + return { + kind: 'RegularCommand', + loc: location(), + source: text(), + command: mark, + arguments: { + optional: [], + required: [ protect(v) ], + }, + } + }, + peg$c104 = /^[^A-Za-z0-9\t\r\n]/, + peg$c105 = peg$classExpectation([["A", "Z"], ["a", "z"], ["0", "9"], "\t", "\r", "\n"], true, false), + peg$c106 = function(v) { + return { + kind: 'SymbolCommand', + loc: location(), + source: text(), + command: v, + } + }, + peg$c107 = "newcommand", + peg$c108 = peg$literalExpectation("newcommand", false), + peg$c109 = function(cmd, name) { return name.value.length == 1 && name.value[0].kind === 'RegularCommand' }, + peg$c110 = function(cmd, name, optional, def) { + return { + kind: 'RegularCommand', + loc: location(), + source: text(), + command: cmd, + arguments: { + optional: [], + required: [name, def], + }, + } + }, + peg$c111 = "begin", + peg$c112 = peg$literalExpectation("begin", false), + peg$c113 = "end", + peg$c114 = peg$literalExpectation("end", false), + peg$c115 = function(cmd) { return verbatimCommands.includes(cmd) && (has_arguments[cmd] === 2) }, + peg$c116 = function(cmd, optional, req1, req2) { + return { + kind: 'RegularCommand', + loc: location(), + source: text(), + command: cmd, + arguments: { + optional: optional, + required: [protect(req1), protect(req2)], + }, + } + }, + peg$c117 = function(cmd) { return verbatimCommands.includes(cmd) && (has_arguments[cmd] === 1) }, + peg$c118 = function(cmd, optional, req) { + return { + kind: 'RegularCommand', + loc: location(), + source: text(), + command: cmd, + arguments: { + optional: optional, + required: [protect(req)], + }, + } + }, + peg$c119 = function(cmd) { return (has_arguments[cmd] === 2) }, + peg$c120 = function(cmd, optional, req1, req2) { + return { + kind: 'RegularCommand', + loc: location(), + source: text(), + command: cmd, + arguments: { + optional: optional, + required: [req1, req2], + }, + } + }, + peg$c121 = function(cmd) { return (has_arguments[cmd] === 1) }, + peg$c122 = function(cmd, optional, req) { + let m; + if (req.kind === 'Block') { + switch (cmd) { + case 'textsuperscript': + case 'sp': + req.markup.sup = true; + break + case 'textsubscript': + case 'sb': + req.markup.sub = true; + break + case 'textsc': + req.markup.smallCaps = true; + break + case 'enquote': + case 'mkbibquote': + req.markup.enquote = true; + break + case 'textbf': + case 'mkbibbold': + req.markup.bold = true; + break + case 'emph': + case 'textit': + case 'mkbibitalic': + case 'mkbibemph': + req.markup.italics = true; + break + default: + if (m = cmd.match(/^((sub)*)section$/)) { + req.markup[`h${(m[1].length / 3) + 1}`] = true; + } + } + } + + // ignore case stuff on bibcyr + if (cmd === 'bibcyr') delete req.case; + + return { + kind: 'RegularCommand', + loc: location(), + source: text(), + command: cmd, + arguments: { + optional: optional, + required: [req], + } + } + }, + peg$c123 = function(cmd, optional) { + return { + kind: 'RegularCommand', + loc: location(), + source: text(), + command: cmd, + arguments: { + optional: optional, + required: [], + } + } + }, + peg$c124 = "[", + peg$c125 = peg$literalExpectation("[", false), + peg$c126 = /^[^\]]/, + peg$c127 = peg$classExpectation(["]"], true, false), + peg$c128 = "]", + peg$c129 = peg$literalExpectation("]", false), + peg$c130 = function(v) { + return basicTextConversions({ + kind: 'Text', // this isn't really correct but I don't need these right now + loc: location(), + source: text(), + value: v, + mode: math.on ? 'math' : 'text', + }) + }, + peg$c131 = /^[^ \t\^_${}\\]/, + peg$c132 = peg$classExpectation([" ", "\t", "^", "_", "$", "{", "}", "\\"], true, false), + peg$c133 = function(v) { + return basicTextConversions({ + kind: 'Text', + loc: location(), + source: text(), + value: normalizeWhitespace([v]), + mode: math.on ? 'math' : 'text', + }) + }, + peg$c134 = /^[a-zA-Z\-_]/, + peg$c135 = peg$classExpectation([["a", "z"], ["A", "Z"], "-", "_"], false, false), + peg$c136 = /^[a-zA-Z0-9\-&_:]/, + peg$c137 = peg$classExpectation([["a", "z"], ["A", "Z"], ["0", "9"], "-", "&", "_", ":"], false, false), + peg$c138 = /^['`"=~\^.]/, + peg$c139 = peg$classExpectation(["'", "`", "\"", "=", "~", "^", "."], false, false), + peg$c140 = /^['`"=~\^.cbuvdrHk]/, + peg$c141 = peg$classExpectation(["'", "`", "\"", "=", "~", "^", ".", "c", "b", "u", "v", "d", "r", "H", "k"], false, false), + peg$c142 = "=", + peg$c143 = peg$literalExpectation("=", false), + peg$c144 = "#", + peg$c145 = peg$literalExpectation("#", false), + peg$c146 = /^[\r\n]/, + peg$c147 = peg$classExpectation(["\r", "\n"], false, false), + peg$c149 = /^[ \t]/, + peg$c150 = peg$classExpectation([" ", "\t"], false, false), + peg$c151 = peg$otherExpectation("Optional Horizontal Whitespace"), + peg$c155 = /^[ \t\n\r]/, + peg$c156 = peg$classExpectation([" ", "\t", "\n", "\r"], false, false), + peg$c157 = peg$otherExpectation("Optional Whitespace"), + + peg$currPos = 0, + peg$savedPos = 0, + peg$posDetailsCache = [{ line: 1, column: 1 }], + peg$maxFailPos = 0, + peg$maxFailExpected = [], + peg$silentFails = 0, + + peg$result; + + if ("startRule" in options) { + if (!(options.startRule in peg$startRuleFunctions)) { + throw new Error("Can't start parsing from rule \"" + options.startRule + "\"."); + } + + peg$startRuleFunction = peg$startRuleFunctions[options.startRule]; + } + + function text() { + return input.substring(peg$savedPos, peg$currPos); + } + + function location() { + return peg$computeLocation(peg$savedPos, peg$currPos); + } + + function peg$literalExpectation(text, ignoreCase) { + return { type: "literal", text: text, ignoreCase: ignoreCase }; + } + + function peg$classExpectation(parts, inverted, ignoreCase) { + return { type: "class", parts: parts, inverted: inverted, ignoreCase: ignoreCase }; + } + + function peg$endExpectation() { + return { type: "end" }; + } + + function peg$otherExpectation(description) { + return { type: "other", description: description }; + } + + function peg$computePosDetails(pos) { + var details = peg$posDetailsCache[pos], p; + + if (details) { + return details; + } else { + p = pos - 1; + while (!peg$posDetailsCache[p]) { + p--; + } + + details = peg$posDetailsCache[p]; + details = { + line: details.line, + column: details.column + }; + + while (p < pos) { + if (input.charCodeAt(p) === 10) { + details.line++; + details.column = 1; + } else { + details.column++; + } + + p++; + } + + peg$posDetailsCache[pos] = details; + return details; + } + } + + function peg$computeLocation(startPos, endPos) { + var startPosDetails = peg$computePosDetails(startPos), + endPosDetails = peg$computePosDetails(endPos); + + return { + start: { + offset: startPos, + line: startPosDetails.line, + column: startPosDetails.column + }, + end: { + offset: endPos, + line: endPosDetails.line, + column: endPosDetails.column + } + }; + } + + function peg$fail(expected) { + if (peg$currPos < peg$maxFailPos) { return; } + + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + + peg$maxFailExpected.push(expected); + } + + function peg$buildStructuredError(expected, found, location) { + return new peg$SyntaxError( + peg$SyntaxError.buildMessage(expected, found), + expected, + found, + location + ); + } + + function peg$parseBibliography() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + s1 = peg$parse__(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parseNode(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parseNode(); + } + if (s2 !== peg$FAILED) { + s3 = peg$parse__(); + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c0(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseComment() { + var s0, s1, s2, s3, s4, s5, s6, s7; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 64) { + s1 = peg$c1; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c2); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parse__(); + if (s2 !== peg$FAILED) { + if (input.substr(peg$currPos, 7).toLowerCase() === peg$c3) { + s3 = input.substr(peg$currPos, 7); + peg$currPos += 7; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c4); } + } + if (s3 !== peg$FAILED) { + s4 = peg$parse__h(); + if (s4 !== peg$FAILED) { + s5 = peg$parseBracedComment(); + if (s5 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c5(s5); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 64) { + s1 = peg$c1; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c2); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parse__(); + if (s2 !== peg$FAILED) { + if (input.substr(peg$currPos, 7).toLowerCase() === peg$c3) { + s3 = input.substr(peg$currPos, 7); + peg$currPos += 7; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c4); } + } + if (s3 !== peg$FAILED) { + s4 = peg$parse__h(); + if (s4 !== peg$FAILED) { + s5 = []; + if (peg$c6.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c7); } + } + while (s6 !== peg$FAILED) { + s5.push(s6); + if (peg$c6.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c7); } + } + } + if (s5 !== peg$FAILED) { + s6 = []; + if (peg$c8.test(input.charAt(peg$currPos))) { + s7 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s7 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c9); } + } + while (s7 !== peg$FAILED) { + s6.push(s7); + if (peg$c8.test(input.charAt(peg$currPos))) { + s7 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s7 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c9); } + } + } + if (s6 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c10(s5); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$currPos; + if (peg$c11.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c12); } + } + if (s2 !== peg$FAILED) { + s3 = []; + if (peg$c6.test(input.charAt(peg$currPos))) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c7); } + } + while (s4 !== peg$FAILED) { + s3.push(s4); + if (peg$c6.test(input.charAt(peg$currPos))) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c7); } + } + } + if (s3 !== peg$FAILED) { + s2 = [s2, s3]; + s1 = s2; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s2 = []; + if (peg$c8.test(input.charAt(peg$currPos))) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c9); } + } + while (s3 !== peg$FAILED) { + s2.push(s3); + if (peg$c8.test(input.charAt(peg$currPos))) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c9); } + } + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c13(s1); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + } + + return s0; + } + + function peg$parseNode() { + var s0, s1; + + s0 = peg$currPos; + s1 = peg$parseComment(); + if (s1 === peg$FAILED) { + s1 = peg$parsePreambleExpression(); + if (s1 === peg$FAILED) { + s1 = peg$parseStringDeclaration(); + if (s1 === peg$FAILED) { + s1 = peg$parseEntry(); + } + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c14(s1); + } + s0 = s1; + + return s0; + } + + function peg$parseBracedComment() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 123) { + s1 = peg$c15; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c16); } + } + if (s1 !== peg$FAILED) { + s2 = []; + if (peg$c17.test(input.charAt(peg$currPos))) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c18); } + } + if (s3 === peg$FAILED) { + s3 = peg$parseBracedComment(); + } + while (s3 !== peg$FAILED) { + s2.push(s3); + if (peg$c17.test(input.charAt(peg$currPos))) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c18); } + } + if (s3 === peg$FAILED) { + s3 = peg$parseBracedComment(); + } + } + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 125) { + s3 = peg$c19; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c20); } + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c21(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseEntry() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 64) { + s1 = peg$c1; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c2); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parse__(); + if (s2 !== peg$FAILED) { + s3 = peg$currPos; + s4 = []; + if (peg$c22.test(input.charAt(peg$currPos))) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c23); } + } + if (s5 !== peg$FAILED) { + while (s5 !== peg$FAILED) { + s4.push(s5); + if (peg$c22.test(input.charAt(peg$currPos))) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c23); } + } + } + } else { + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s3 = input.substring(s3, peg$currPos); + } else { + s3 = s4; + } + if (s3 !== peg$FAILED) { + s4 = peg$parse__(); + if (s4 !== peg$FAILED) { + if (peg$c24.test(input.charAt(peg$currPos))) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c25); } + } + if (s5 !== peg$FAILED) { + s6 = peg$parse__(); + if (s6 !== peg$FAILED) { + s7 = peg$parseEntryId(); + if (s7 === peg$FAILED) { + s7 = null; + } + if (s7 !== peg$FAILED) { + s8 = peg$parse__(); + if (s8 !== peg$FAILED) { + s9 = []; + s10 = peg$parseField(); + while (s10 !== peg$FAILED) { + s9.push(s10); + s10 = peg$parseField(); + } + if (s9 !== peg$FAILED) { + s10 = peg$parse__(); + if (s10 !== peg$FAILED) { + if (peg$c26.test(input.charAt(peg$currPos))) { + s11 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s11 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c27); } + } + if (s11 !== peg$FAILED) { + s12 = peg$parse__(); + if (s12 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c28(s3, s7, s9); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parsePreambleExpression() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 64) { + s1 = peg$c1; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c2); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parse__(); + if (s2 !== peg$FAILED) { + if (input.substr(peg$currPos, 8).toLowerCase() === peg$c29) { + s3 = input.substr(peg$currPos, 8); + peg$currPos += 8; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c30); } + } + if (s3 !== peg$FAILED) { + s4 = peg$parse__(); + if (s4 !== peg$FAILED) { + if (peg$c24.test(input.charAt(peg$currPos))) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c25); } + } + if (s5 !== peg$FAILED) { + s6 = peg$parse__(); + if (s6 !== peg$FAILED) { + s7 = []; + s8 = peg$parseEnvironment(); + if (s8 === peg$FAILED) { + s8 = peg$parseBlock(); + if (s8 === peg$FAILED) { + s8 = peg$parseMath(); + if (s8 === peg$FAILED) { + s8 = peg$parseCommand(); + if (s8 === peg$FAILED) { + s8 = peg$parseText(); + } + } + } + } + while (s8 !== peg$FAILED) { + s7.push(s8); + s8 = peg$parseEnvironment(); + if (s8 === peg$FAILED) { + s8 = peg$parseBlock(); + if (s8 === peg$FAILED) { + s8 = peg$parseMath(); + if (s8 === peg$FAILED) { + s8 = peg$parseCommand(); + if (s8 === peg$FAILED) { + s8 = peg$parseText(); + } + } + } + } + } + if (s7 !== peg$FAILED) { + s8 = peg$parse__(); + if (s8 !== peg$FAILED) { + if (peg$c26.test(input.charAt(peg$currPos))) { + s9 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s9 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c27); } + } + if (s9 !== peg$FAILED) { + s10 = peg$parse__(); + if (s10 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c31(s5, s7, s9); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseStringDeclaration() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 64) { + s1 = peg$c1; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c2); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parse__(); + if (s2 !== peg$FAILED) { + if (input.substr(peg$currPos, 6).toLowerCase() === peg$c32) { + s3 = input.substr(peg$currPos, 6); + peg$currPos += 6; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c33); } + } + if (s3 !== peg$FAILED) { + s4 = peg$parse__(); + if (s4 !== peg$FAILED) { + if (peg$c24.test(input.charAt(peg$currPos))) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c25); } + } + if (s5 !== peg$FAILED) { + s6 = peg$parse__(); + if (s6 !== peg$FAILED) { + s7 = peg$parseVariableName(); + if (s7 !== peg$FAILED) { + s8 = peg$parseFieldSeparator(); + if (s8 !== peg$FAILED) { + s9 = []; + s10 = peg$parseRegularValue(); + if (s10 !== peg$FAILED) { + while (s10 !== peg$FAILED) { + s9.push(s10); + s10 = peg$parseRegularValue(); + } + } else { + s9 = peg$FAILED; + } + if (s9 !== peg$FAILED) { + s10 = peg$parse__(); + if (s10 !== peg$FAILED) { + if (peg$c26.test(input.charAt(peg$currPos))) { + s11 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s11 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c27); } + } + if (s11 !== peg$FAILED) { + s12 = peg$parse__(); + if (s12 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c34(s7, s9); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseEntryId() { + var s0, s1, s2, s3, s4; + + s0 = peg$currPos; + s1 = peg$parse__(); + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + s3 = []; + if (peg$c35.test(input.charAt(peg$currPos))) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c36); } + } + while (s4 !== peg$FAILED) { + s3.push(s4); + if (peg$c35.test(input.charAt(peg$currPos))) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c36); } + } + } + if (s3 !== peg$FAILED) { + s2 = input.substring(s2, peg$currPos); + } else { + s2 = s3; + } + if (s2 !== peg$FAILED) { + s3 = peg$parse__(); + if (s3 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 44) { + s4 = peg$c37; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c38); } + } + if (s4 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c39(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseField() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8; + + s0 = peg$currPos; + s1 = peg$parseFieldName(); + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$c40(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s3 = peg$parseFieldSeparator(); + if (s3 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 123) { + s4 = peg$c15; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c16); } + } + if (s4 !== peg$FAILED) { + s5 = peg$currPos; + peg$silentFails++; + if (input.charCodeAt(peg$currPos) === 123) { + s6 = peg$c15; + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c16); } + } + peg$silentFails--; + if (s6 !== peg$FAILED) { + peg$currPos = s5; + s5 = void 0; + } else { + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + s6 = peg$parseVerbatimFieldValue(); + if (s6 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 125) { + s7 = peg$c19; + peg$currPos++; + } else { + s7 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c20); } + } + if (s7 !== peg$FAILED) { + s8 = peg$parseFieldTerminator(); + if (s8 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c41(s1, s6); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseFieldName(); + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$c42(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s3 = peg$parseFieldSeparator(); + if (s3 !== peg$FAILED) { + s4 = peg$parseVerbatimFieldValue(); + if (s4 !== peg$FAILED) { + s5 = peg$parseFieldTerminator(); + if (s5 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c43(s1, s4); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseFieldName(); + if (s1 !== peg$FAILED) { + s2 = peg$parseFieldSeparator(); + if (s2 !== peg$FAILED) { + s3 = peg$parseFieldValue(); + if (s3 !== peg$FAILED) { + s4 = peg$parseFieldTerminator(); + if (s4 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c44(s1, s3); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + } + + return s0; + } + + function peg$parseFieldName() { + var s0, s1, s2, s3, s4; + + s0 = peg$currPos; + s1 = peg$parse__(); + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + s3 = []; + if (peg$c45.test(input.charAt(peg$currPos))) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c46); } + } + if (s4 !== peg$FAILED) { + while (s4 !== peg$FAILED) { + s3.push(s4); + if (peg$c45.test(input.charAt(peg$currPos))) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c46); } + } + } + } else { + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + s2 = input.substring(s2, peg$currPos); + } else { + s2 = s3; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c47(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseVerbatimFieldValue() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 34) { + s1 = peg$c48; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c49); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parseTextNoQuotes(); + if (s2 === peg$FAILED) { + s2 = null; + } + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 34) { + s3 = peg$c48; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c49); } + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c50(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 123) { + s1 = peg$c15; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c16); } + } + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parseVerbatimText(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parseVerbatimText(); + } + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 125) { + s3 = peg$c19; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c20); } + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c51(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + + return s0; + } + + function peg$parseVerbatimText() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + s1 = peg$currPos; + s2 = []; + if (peg$c17.test(input.charAt(peg$currPos))) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c18); } + } + if (s3 !== peg$FAILED) { + while (s3 !== peg$FAILED) { + s2.push(s3); + if (peg$c17.test(input.charAt(peg$currPos))) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c18); } + } + } + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = input.substring(s1, peg$currPos); + } else { + s1 = s2; + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c52(s1); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 123) { + s1 = peg$c15; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c16); } + } + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parseVerbatimText(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parseVerbatimText(); + } + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 125) { + s3 = peg$c19; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c20); } + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c53(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + + return s0; + } + + function peg$parseFieldValue() { + var s0, s1, s2, s3; + + s0 = peg$parseNumber(); + if (s0 === peg$FAILED) { + s0 = peg$currPos; + peg$savedPos = peg$currPos; + s1 = peg$c54(); + if (s1) { + s1 = void 0; + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parseRegularValue(); + if (s3 === peg$FAILED) { + s3 = peg$parseStringValue(); + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parseRegularValue(); + if (s3 === peg$FAILED) { + s3 = peg$parseStringValue(); + } + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c55(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + + return s0; + } + + function peg$parseRegularValue() { + var s0, s1, s2, s3, s4, s5; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 34) { + s1 = peg$c48; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c49); } + } + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parseEnvironment(); + if (s3 === peg$FAILED) { + s3 = peg$parseBlock(); + if (s3 === peg$FAILED) { + s3 = peg$parseMath(); + if (s3 === peg$FAILED) { + s3 = peg$parseCommand(); + if (s3 === peg$FAILED) { + s3 = peg$parseTextNoQuotes(); + } + } + } + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parseEnvironment(); + if (s3 === peg$FAILED) { + s3 = peg$parseBlock(); + if (s3 === peg$FAILED) { + s3 = peg$parseMath(); + if (s3 === peg$FAILED) { + s3 = peg$parseCommand(); + if (s3 === peg$FAILED) { + s3 = peg$parseTextNoQuotes(); + } + } + } + } + } + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 34) { + s3 = peg$c48; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c49); } + } + if (s3 !== peg$FAILED) { + s4 = peg$parseConcat(); + if (s4 === peg$FAILED) { + s4 = null; + } + if (s4 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c56(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.substr(peg$currPos, 6) === peg$c57) { + s1 = peg$c57; + peg$currPos += 6; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c58); } + } + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + peg$silentFails++; + if (peg$c59.test(input.charAt(peg$currPos))) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c60); } + } + peg$silentFails--; + if (s3 === peg$FAILED) { + s2 = void 0; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parseVerbatimText(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parseVerbatimText(); + } + if (s3 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 125) { + s4 = peg$c19; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c20); } + } + if (s4 !== peg$FAILED) { + s5 = peg$parseConcat(); + if (s5 === peg$FAILED) { + s5 = null; + } + if (s5 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c51(s3); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 123) { + s1 = peg$c15; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c16); } + } + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parseEnvironment(); + if (s3 === peg$FAILED) { + s3 = peg$parseBlock(); + if (s3 === peg$FAILED) { + s3 = peg$parseMath(); + if (s3 === peg$FAILED) { + s3 = peg$parseCommand(); + if (s3 === peg$FAILED) { + s3 = peg$parseText(); + } + } + } + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parseEnvironment(); + if (s3 === peg$FAILED) { + s3 = peg$parseBlock(); + if (s3 === peg$FAILED) { + s3 = peg$parseMath(); + if (s3 === peg$FAILED) { + s3 = peg$parseCommand(); + if (s3 === peg$FAILED) { + s3 = peg$parseText(); + } + } + } + } + } + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 125) { + s3 = peg$c19; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c20); } + } + if (s3 !== peg$FAILED) { + s4 = peg$parseConcat(); + if (s4 === peg$FAILED) { + s4 = null; + } + if (s4 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c56(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseStringReference(); + if (s1 !== peg$FAILED) { + s2 = peg$parseConcat(); + if (s2 === peg$FAILED) { + s2 = null; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c56(s1); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + } + } + + return s0; + } + + function peg$parseStringValue() { + var s0, s1, s2; + + s0 = peg$currPos; + s1 = peg$parseStringReference(); + if (s1 !== peg$FAILED) { + s2 = peg$parseConcat(); + if (s2 === peg$FAILED) { + s2 = null; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c56(s1); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseText() { + var s0, s1, s2; + + s0 = peg$currPos; + s1 = []; + if (peg$c61.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c62); } + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + if (peg$c61.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c62); } + } + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c63(s1); + } + s0 = s1; + + return s0; + } + + function peg$parseTextNoQuotes() { + var s0, s1, s2; + + s0 = peg$currPos; + s1 = []; + if (peg$c64.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c65); } + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + if (peg$c64.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c65); } + } + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c63(s1); + } + s0 = s1; + + return s0; + } + + function peg$parseNumber() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + s1 = peg$currPos; + s2 = []; + if (peg$c66.test(input.charAt(peg$currPos))) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c67); } + } + if (s3 !== peg$FAILED) { + while (s3 !== peg$FAILED) { + s2.push(s3); + if (peg$c66.test(input.charAt(peg$currPos))) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c67); } + } + } + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = input.substring(s1, peg$currPos); + } else { + s1 = s2; + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c68(s1); + } + s0 = s1; + + return s0; + } + + function peg$parseStringReference() { + var s0, s1; + + s0 = peg$currPos; + s1 = peg$parseVariableName(); + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c69(s1); + } + s0 = s1; + + return s0; + } + + function peg$parseEnvironment() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8; + + s0 = peg$currPos; + if (input.substr(peg$currPos, 7) === peg$c70) { + s1 = peg$c70; + peg$currPos += 7; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c71); } + } + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + s3 = []; + if (peg$c72.test(input.charAt(peg$currPos))) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c73); } + } + if (s4 !== peg$FAILED) { + while (s4 !== peg$FAILED) { + s3.push(s4); + if (peg$c72.test(input.charAt(peg$currPos))) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c73); } + } + } + } else { + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + s2 = input.substring(s2, peg$currPos); + } else { + s2 = s3; + } + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 125) { + s3 = peg$c19; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c20); } + } + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$parseEnvironment(); + if (s5 === peg$FAILED) { + s5 = peg$parseBlock(); + if (s5 === peg$FAILED) { + s5 = peg$parseCommand(); + if (s5 === peg$FAILED) { + s5 = peg$parseMath(); + if (s5 === peg$FAILED) { + s5 = peg$parseText(); + } + } + } + } + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parseEnvironment(); + if (s5 === peg$FAILED) { + s5 = peg$parseBlock(); + if (s5 === peg$FAILED) { + s5 = peg$parseCommand(); + if (s5 === peg$FAILED) { + s5 = peg$parseMath(); + if (s5 === peg$FAILED) { + s5 = peg$parseText(); + } + } + } + } + } + if (s4 !== peg$FAILED) { + if (input.substr(peg$currPos, 5) === peg$c74) { + s5 = peg$c74; + peg$currPos += 5; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c75); } + } + if (s5 !== peg$FAILED) { + s6 = peg$currPos; + s7 = []; + if (peg$c72.test(input.charAt(peg$currPos))) { + s8 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s8 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c73); } + } + if (s8 !== peg$FAILED) { + while (s8 !== peg$FAILED) { + s7.push(s8); + if (peg$c72.test(input.charAt(peg$currPos))) { + s8 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s8 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c73); } + } + } + } else { + s7 = peg$FAILED; + } + if (s7 !== peg$FAILED) { + s6 = input.substring(s6, peg$currPos); + } else { + s6 = s7; + } + if (s6 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 125) { + s7 = peg$c19; + peg$currPos++; + } else { + s7 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c20); } + } + if (s7 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s8 = peg$c76(s2, s4, s6); + if (s8) { + s8 = void 0; + } else { + s8 = peg$FAILED; + } + if (s8 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c77(s2, s4); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseBlock() { + var s0, s1, s2, s3, s4, s5, s6; + + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c78) { + s1 = peg$c78; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c79); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parseExtendedDiacritic(); + if (s2 !== peg$FAILED) { + s3 = peg$parse__(); + if (s3 !== peg$FAILED) { + if (peg$c72.test(input.charAt(peg$currPos))) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c73); } + } + if (s4 === peg$FAILED) { + s4 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 92) { + s5 = peg$c80; + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c81); } + } + if (s5 !== peg$FAILED) { + if (peg$c82.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c83); } + } + if (s6 !== peg$FAILED) { + s5 = [s5, s6]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } + if (s4 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 125) { + s5 = peg$c19; + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c20); } + } + if (s5 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c84(s2, s4); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.substr(peg$currPos, 6) === peg$c57) { + s1 = peg$c57; + peg$currPos += 6; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c58); } + } + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + peg$silentFails++; + if (peg$c59.test(input.charAt(peg$currPos))) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c60); } + } + peg$silentFails--; + if (s3 === peg$FAILED) { + s2 = void 0; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parseVerbatimText(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parseVerbatimText(); + } + if (s3 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 125) { + s4 = peg$c19; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c20); } + } + if (s4 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c85(s3); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 123) { + s1 = peg$c15; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c16); } + } + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parseEnvironment(); + if (s3 === peg$FAILED) { + s3 = peg$parseBlock(); + if (s3 === peg$FAILED) { + s3 = peg$parseCommand(); + if (s3 === peg$FAILED) { + s3 = peg$parseMath(); + if (s3 === peg$FAILED) { + s3 = peg$parseText(); + } + } + } + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parseEnvironment(); + if (s3 === peg$FAILED) { + s3 = peg$parseBlock(); + if (s3 === peg$FAILED) { + s3 = peg$parseCommand(); + if (s3 === peg$FAILED) { + s3 = peg$parseMath(); + if (s3 === peg$FAILED) { + s3 = peg$parseText(); + } + } + } + } + } + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 125) { + s3 = peg$c19; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c20); } + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c86(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + } + + return s0; + } + + function peg$parseMath() { + var s0, s1, s2, s3, s4, s5, s6; + + s0 = peg$currPos; + peg$savedPos = peg$currPos; + s1 = peg$c87(); + if (s1) { + s1 = void 0; + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 36) { + s2 = peg$c88; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c89); } + } + if (s2 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c90) { + s2 = peg$c90; + peg$currPos += 2; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c91); } + } + } + if (s2 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s3 = peg$c92(); + if (s3) { + s3 = void 0; + } else { + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$parseBlock(); + if (s5 === peg$FAILED) { + s5 = peg$parseCommand(); + if (s5 === peg$FAILED) { + s5 = peg$parseText(); + } + } + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parseBlock(); + if (s5 === peg$FAILED) { + s5 = peg$parseCommand(); + if (s5 === peg$FAILED) { + s5 = peg$parseText(); + } + } + } + if (s4 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 36) { + s5 = peg$c88; + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c89); } + } + if (s5 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c90) { + s5 = peg$c90; + peg$currPos += 2; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c91); } + } + } + if (s5 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s6 = peg$c93(); + if (s6) { + s6 = void 0; + } else { + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c94(s2, s4); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseLineComment() { + var s0, s1, s2, s3, s4, s5; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 37) { + s1 = peg$c95; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c96); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parse__h(); + if (s2 !== peg$FAILED) { + s3 = peg$currPos; + s4 = []; + if (peg$c97.test(input.charAt(peg$currPos))) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c98); } + } + if (s5 !== peg$FAILED) { + while (s5 !== peg$FAILED) { + s4.push(s5); + if (peg$c97.test(input.charAt(peg$currPos))) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c98); } + } + } + } else { + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s3 = input.substring(s3, peg$currPos); + } else { + s3 = s4; + } + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$parseEOL(); + if (s5 !== peg$FAILED) { + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parseEOL(); + } + } else { + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c99(s3); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseCommand() { + var s0; + + s0 = peg$parseScriptCommand(); + if (s0 === peg$FAILED) { + s0 = peg$parseDiacriticCommand(); + if (s0 === peg$FAILED) { + s0 = peg$parseRegularCommand(); + if (s0 === peg$FAILED) { + s0 = peg$parseSymbolCommand(); + } + } + } + + return s0; + } + + function peg$parseScriptCommand() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + if (peg$c100.test(input.charAt(peg$currPos))) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c101); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parse__h(); + if (s2 !== peg$FAILED) { + s3 = peg$parseRequiredArgument(); + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c102(s1, s3); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseDiacriticCommand() { + var s0, s1, s2, s3, s4, s5, s6; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 92) { + s1 = peg$c80; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c81); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parseSimpleDiacritic(); + if (s2 !== peg$FAILED) { + s3 = peg$parse__(); + if (s3 !== peg$FAILED) { + if (peg$c72.test(input.charAt(peg$currPos))) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c73); } + } + if (s4 === peg$FAILED) { + s4 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 92) { + s5 = peg$c80; + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c81); } + } + if (s5 !== peg$FAILED) { + if (peg$c82.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c83); } + } + if (s6 !== peg$FAILED) { + s5 = [s5, s6]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } + if (s4 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c84(s2, s4); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 92) { + s1 = peg$c80; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c81); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parseExtendedDiacritic(); + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 123) { + s3 = peg$c15; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c16); } + } + if (s3 !== peg$FAILED) { + if (peg$c72.test(input.charAt(peg$currPos))) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c73); } + } + if (s4 === peg$FAILED) { + s4 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 92) { + s5 = peg$c80; + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c81); } + } + if (s5 !== peg$FAILED) { + if (peg$c82.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c83); } + } + if (s6 !== peg$FAILED) { + s5 = [s5, s6]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } + if (s4 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 125) { + s5 = peg$c19; + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c20); } + } + if (s5 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c84(s2, s4); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 92) { + s1 = peg$c80; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c81); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parseExtendedDiacritic(); + if (s2 !== peg$FAILED) { + s3 = peg$currPos; + peg$silentFails++; + if (input.charCodeAt(peg$currPos) === 123) { + s4 = peg$c15; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c16); } + } + peg$silentFails--; + if (s4 !== peg$FAILED) { + peg$currPos = s3; + s3 = void 0; + } else { + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + s4 = peg$parseRegularValue(); + if (s4 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c103(s2, s4); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + } + + return s0; + } + + function peg$parseSymbolCommand() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 92) { + s1 = peg$c80; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c81); } + } + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + if (peg$c104.test(input.charAt(peg$currPos))) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c105); } + } + if (s3 !== peg$FAILED) { + s2 = input.substring(s2, peg$currPos); + } else { + s2 = s3; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c106(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseRegularCommand() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 92) { + s1 = peg$c80; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c81); } + } + if (s1 !== peg$FAILED) { + if (input.substr(peg$currPos, 10) === peg$c107) { + s2 = peg$c107; + peg$currPos += 10; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c108); } + } + if (s2 !== peg$FAILED) { + s3 = peg$parseBlock(); + if (s3 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s4 = peg$c109(s2, s3); + if (s4) { + s4 = void 0; + } else { + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = []; + s6 = peg$parseOptionalArgument(); + while (s6 !== peg$FAILED) { + s5.push(s6); + s6 = peg$parseOptionalArgument(); + } + if (s5 !== peg$FAILED) { + s6 = peg$parseRequiredArgument(); + if (s6 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c110(s2, s3, s5, s6); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 92) { + s1 = peg$c80; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c81); } + } + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + peg$silentFails++; + if (input.substr(peg$currPos, 5) === peg$c111) { + s3 = peg$c111; + peg$currPos += 5; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c112); } + } + peg$silentFails--; + if (s3 === peg$FAILED) { + s2 = void 0; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s3 = peg$currPos; + peg$silentFails++; + if (input.substr(peg$currPos, 3) === peg$c113) { + s4 = peg$c113; + peg$currPos += 3; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c114); } + } + peg$silentFails--; + if (s4 === peg$FAILED) { + s3 = void 0; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + s4 = peg$currPos; + s5 = []; + if (peg$c22.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c23); } + } + if (s6 !== peg$FAILED) { + while (s6 !== peg$FAILED) { + s5.push(s6); + if (peg$c22.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c23); } + } + } + } else { + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + s4 = input.substring(s4, peg$currPos); + } else { + s4 = s5; + } + if (s4 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s5 = peg$c115(s4); + if (s5) { + s5 = void 0; + } else { + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + s6 = []; + s7 = peg$parseOptionalArgument(); + while (s7 !== peg$FAILED) { + s6.push(s7); + s7 = peg$parseOptionalArgument(); + } + if (s6 !== peg$FAILED) { + s7 = peg$parse__h(); + if (s7 !== peg$FAILED) { + s8 = peg$currPos; + peg$silentFails++; + if (input.charCodeAt(peg$currPos) === 123) { + s9 = peg$c15; + peg$currPos++; + } else { + s9 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c16); } + } + peg$silentFails--; + if (s9 !== peg$FAILED) { + peg$currPos = s8; + s8 = void 0; + } else { + s8 = peg$FAILED; + } + if (s8 !== peg$FAILED) { + s9 = peg$parseVerbatimFieldValue(); + if (s9 !== peg$FAILED) { + s10 = peg$parseVerbatimFieldValue(); + if (s10 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c116(s4, s6, s9, s10); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 92) { + s1 = peg$c80; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c81); } + } + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + peg$silentFails++; + if (input.substr(peg$currPos, 5) === peg$c111) { + s3 = peg$c111; + peg$currPos += 5; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c112); } + } + peg$silentFails--; + if (s3 === peg$FAILED) { + s2 = void 0; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s3 = peg$currPos; + peg$silentFails++; + if (input.substr(peg$currPos, 3) === peg$c113) { + s4 = peg$c113; + peg$currPos += 3; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c114); } + } + peg$silentFails--; + if (s4 === peg$FAILED) { + s3 = void 0; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + s4 = peg$currPos; + s5 = []; + if (peg$c22.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c23); } + } + if (s6 !== peg$FAILED) { + while (s6 !== peg$FAILED) { + s5.push(s6); + if (peg$c22.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c23); } + } + } + } else { + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + s4 = input.substring(s4, peg$currPos); + } else { + s4 = s5; + } + if (s4 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s5 = peg$c117(s4); + if (s5) { + s5 = void 0; + } else { + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + s6 = []; + s7 = peg$parseOptionalArgument(); + while (s7 !== peg$FAILED) { + s6.push(s7); + s7 = peg$parseOptionalArgument(); + } + if (s6 !== peg$FAILED) { + s7 = peg$parse__h(); + if (s7 !== peg$FAILED) { + s8 = peg$currPos; + peg$silentFails++; + if (input.charCodeAt(peg$currPos) === 123) { + s9 = peg$c15; + peg$currPos++; + } else { + s9 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c16); } + } + peg$silentFails--; + if (s9 !== peg$FAILED) { + peg$currPos = s8; + s8 = void 0; + } else { + s8 = peg$FAILED; + } + if (s8 !== peg$FAILED) { + s9 = peg$parseVerbatimFieldValue(); + if (s9 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c118(s4, s6, s9); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 92) { + s1 = peg$c80; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c81); } + } + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + peg$silentFails++; + if (input.substr(peg$currPos, 5) === peg$c111) { + s3 = peg$c111; + peg$currPos += 5; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c112); } + } + peg$silentFails--; + if (s3 === peg$FAILED) { + s2 = void 0; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s3 = peg$currPos; + peg$silentFails++; + if (input.substr(peg$currPos, 3) === peg$c113) { + s4 = peg$c113; + peg$currPos += 3; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c114); } + } + peg$silentFails--; + if (s4 === peg$FAILED) { + s3 = void 0; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + s4 = peg$currPos; + s5 = []; + if (peg$c22.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c23); } + } + if (s6 !== peg$FAILED) { + while (s6 !== peg$FAILED) { + s5.push(s6); + if (peg$c22.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c23); } + } + } + } else { + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + s4 = input.substring(s4, peg$currPos); + } else { + s4 = s5; + } + if (s4 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s5 = peg$c119(s4); + if (s5) { + s5 = void 0; + } else { + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + s6 = []; + s7 = peg$parseOptionalArgument(); + while (s7 !== peg$FAILED) { + s6.push(s7); + s7 = peg$parseOptionalArgument(); + } + if (s6 !== peg$FAILED) { + s7 = peg$parse__h(); + if (s7 !== peg$FAILED) { + s8 = peg$parseRequiredArgument(); + if (s8 !== peg$FAILED) { + s9 = peg$parseRequiredArgument(); + if (s9 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c120(s4, s6, s8, s9); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 92) { + s1 = peg$c80; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c81); } + } + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + peg$silentFails++; + if (input.substr(peg$currPos, 5) === peg$c111) { + s3 = peg$c111; + peg$currPos += 5; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c112); } + } + peg$silentFails--; + if (s3 === peg$FAILED) { + s2 = void 0; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s3 = peg$currPos; + peg$silentFails++; + if (input.substr(peg$currPos, 3) === peg$c113) { + s4 = peg$c113; + peg$currPos += 3; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c114); } + } + peg$silentFails--; + if (s4 === peg$FAILED) { + s3 = void 0; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + s4 = peg$currPos; + s5 = []; + if (peg$c22.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c23); } + } + if (s6 !== peg$FAILED) { + while (s6 !== peg$FAILED) { + s5.push(s6); + if (peg$c22.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c23); } + } + } + } else { + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + s4 = input.substring(s4, peg$currPos); + } else { + s4 = s5; + } + if (s4 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s5 = peg$c121(s4); + if (s5) { + s5 = void 0; + } else { + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + s6 = []; + s7 = peg$parseOptionalArgument(); + while (s7 !== peg$FAILED) { + s6.push(s7); + s7 = peg$parseOptionalArgument(); + } + if (s6 !== peg$FAILED) { + s7 = peg$parse__h(); + if (s7 !== peg$FAILED) { + s8 = peg$parseRequiredArgument(); + if (s8 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c122(s4, s6, s8); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 92) { + s1 = peg$c80; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c81); } + } + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + peg$silentFails++; + if (input.substr(peg$currPos, 5) === peg$c111) { + s3 = peg$c111; + peg$currPos += 5; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c112); } + } + peg$silentFails--; + if (s3 === peg$FAILED) { + s2 = void 0; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s3 = peg$currPos; + peg$silentFails++; + if (input.substr(peg$currPos, 3) === peg$c113) { + s4 = peg$c113; + peg$currPos += 3; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c114); } + } + peg$silentFails--; + if (s4 === peg$FAILED) { + s3 = void 0; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + s4 = peg$currPos; + s5 = []; + if (peg$c22.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c23); } + } + if (s6 !== peg$FAILED) { + while (s6 !== peg$FAILED) { + s5.push(s6); + if (peg$c22.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c23); } + } + } + } else { + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + s4 = input.substring(s4, peg$currPos); + } else { + s4 = s5; + } + if (s4 !== peg$FAILED) { + s5 = []; + s6 = peg$parseOptionalArgument(); + while (s6 !== peg$FAILED) { + s5.push(s6); + s6 = peg$parseOptionalArgument(); + } + if (s5 !== peg$FAILED) { + s6 = peg$parse__(); + if (s6 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c123(s4, s5); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + } + } + } + } + + return s0; + } + + function peg$parseOptionalArgument() { + var s0, s1, s2, s3, s4, s5; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 91) { + s1 = peg$c124; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c125); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parse__h(); + if (s2 !== peg$FAILED) { + s3 = peg$currPos; + s4 = []; + if (peg$c126.test(input.charAt(peg$currPos))) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c127); } + } + if (s5 !== peg$FAILED) { + while (s5 !== peg$FAILED) { + s4.push(s5); + if (peg$c126.test(input.charAt(peg$currPos))) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c127); } + } + } + } else { + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s3 = input.substring(s3, peg$currPos); + } else { + s3 = s4; + } + if (s3 !== peg$FAILED) { + s4 = peg$parse__h(); + if (s4 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 93) { + s5 = peg$c128; + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c129); } + } + if (s5 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c130(s3); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseRequiredArgument() { + var s0, s1, s2; + + s0 = peg$currPos; + s1 = peg$parse__h(); + if (s1 !== peg$FAILED) { + if (peg$c131.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c132); } + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c133(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseBlock(); + if (s1 === peg$FAILED) { + s1 = peg$parseCommand(); + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c52(s1); + } + s0 = s1; + } + + return s0; + } + + function peg$parseVariableName() { + var s0, s1, s2, s3, s4; + + s0 = peg$currPos; + s1 = peg$currPos; + if (peg$c134.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c135); } + } + if (s2 !== peg$FAILED) { + s3 = []; + if (peg$c136.test(input.charAt(peg$currPos))) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c137); } + } + while (s4 !== peg$FAILED) { + s3.push(s4); + if (peg$c136.test(input.charAt(peg$currPos))) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c137); } + } + } + if (s3 !== peg$FAILED) { + s2 = [s2, s3]; + s1 = s2; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s0 = input.substring(s0, peg$currPos); + } else { + s0 = s1; + } + + return s0; + } + + function peg$parseSimpleDiacritic() { + var s0; + + if (peg$c138.test(input.charAt(peg$currPos))) { + s0 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c139); } + } + + return s0; + } + + function peg$parseExtendedDiacritic() { + var s0; + + if (peg$c140.test(input.charAt(peg$currPos))) { + s0 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c141); } + } + + return s0; + } + + function peg$parseFieldSeparator() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + s1 = peg$parse__(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 61) { + s2 = peg$c142; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c143); } + } + if (s2 !== peg$FAILED) { + s3 = peg$parse__(); + if (s3 !== peg$FAILED) { + s1 = [s1, s2, s3]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseFieldTerminator() { + var s0, s1, s2, s3, s4, s5; + + s0 = peg$currPos; + s1 = peg$parse__(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 44) { + s2 = peg$c37; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c38); } + } + if (s2 === peg$FAILED) { + s2 = null; + } + if (s2 !== peg$FAILED) { + s3 = peg$parse__h(); + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$parseLineComment(); + if (s5 === peg$FAILED) { + s5 = peg$parseEOL(); + } + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parseLineComment(); + if (s5 === peg$FAILED) { + s5 = peg$parseEOL(); + } + } + if (s4 !== peg$FAILED) { + s1 = [s1, s2, s3, s4]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseConcat() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + s1 = peg$parse__(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 35) { + s2 = peg$c144; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c145); } + } + if (s2 !== peg$FAILED) { + s3 = peg$parse__(); + if (s3 !== peg$FAILED) { + s1 = [s1, s2, s3]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseEOL() { + var s0; + + if (peg$c146.test(input.charAt(peg$currPos))) { + s0 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c147); } + } + + return s0; + } + + function peg$parse__h() { + var s0, s1; + + peg$silentFails++; + s0 = []; + if (peg$c149.test(input.charAt(peg$currPos))) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c150); } + } + while (s1 !== peg$FAILED) { + s0.push(s1); + if (peg$c149.test(input.charAt(peg$currPos))) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c150); } + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c151); } + } + + return s0; + } + + function peg$parse__() { + var s0, s1; + + peg$silentFails++; + s0 = []; + if (peg$c155.test(input.charAt(peg$currPos))) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c156); } + } + while (s1 !== peg$FAILED) { + s0.push(s1); + if (peg$c155.test(input.charAt(peg$currPos))) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c156); } + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c157); } + } + + return s0; + } + + + /* + MIT License + + Copyright (c) 2017 Derek P Sifford, parts copyright (c) 2019 by Emiliano Heyns + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + */ + + const markup = { + sl: 'italics', + em: 'italics', + it: 'italics', + itshape: 'italics', + + bf: 'bold', + bfseries: 'bold', + + sc: 'smallCaps', + scshape: 'smallCaps', + + tt: 'fixedWidth', + rm: 'roman', + sf: 'sansSerif', + verb: 'verbatim', + }; + + const unnestFields = (options.unnestFields || []).map(field => field.toLowerCase()); + const verbatimFields = (options.verbatimFields || [ 'urlraw', 'url', 'doi', 'file', 'files', 'eprint', 'verba', 'verbb', 'verbc' ]).map(field => typeof field === 'string' ? field.toLowerCase() : field); + const verbatimCommands = (options.verbatimCommands || ['texttt', 'url', 'href']); + + function isVerbatimField(name) { + return verbatimFields.find(p => (typeof p === 'string') ? name === p : name.match(p)) + } + + function normalizeWhitespace(textArr) { + return textArr.reduce((prev, curr) => { + if (/\s/.test(curr)) { + if (/\s/.test(prev[prev.length - 1])) { + return prev; + } else { + return prev + ' '; + } + } + return prev + curr; + }, ''); + } + + const has_arguments = { + ElsevierGlyph: 1, + end: 1, + begin: 1, + bibcyr: 1, + bibstring: 1, + chsf: 1, + cite: 1, + cyrchar: 1, + ding: 1, + emph: 1, + enquote: 1, + frac: 2, + href: 2, + hspace: 1, + mathrm: 1, + mbox: 1, + mkbibbold: 1, + mkbibemph: 1, + mkbibitalic: 1, + mkbibquote: 1, + newcommand: 2, + noopsort: 1, + ocirc: 1, + section: 1, + sb: 1, + sp: 1, + subsection: 1, + subsubsection: 1, + subsubsubsection: 1, + t: 1, + textbf: 1, + textit: 1, + textrm: 1, + textsc: 1, + textsubscript: 1, + textsuperscript: 1, + texttt: 1, + url: 1, + vphantom: 1, + vspace: 1, + }; + + if (options.combiningDiacritics) { + for (const cmd of options.combiningDiacritics) { + has_arguments[cmd] = 1; + } + } + + const math = { + on: false, + + set: function(state) { + this.on = state; + return true + } + }; + + function basicTextConversions(node) { + if (node.kind !== 'Text') throw new Error(node.kind + ' is not a Text node') + + switch (node.mode) { + case 'verbatim': + break + + case 'math': + node.value = node.value.replace(/~/g, '\u00A0'); + break + + case 'text': + node.value = node.value + .replace(/---/g, '\u2014') + .replace(/--/g, '\u2013') + .replace(//g, '\u00BF') + .replace(/~/g, '\u00A0') + .replace(/``/g, options.markup.enquote.open) + .replace(/''/g, options.markup.enquote.close); + break + + default: + throw new Error(`Unexpected text mode ${node.mode}`) + } + + return node + } + + function protect(v) { + let source; + if (Array.isArray(v)) { + source = v.map(e => e.source).join(''); + } else { + v = [ v ]; + source = v.source; + } + + return { + kind: 'Block', + value: v, + markup: {}, + case: 'protect', + source: source, + } + } + + function handle_markup_switches(block) { + const value = block.value; + if (!Array.isArray(value)) return block + + block.value = []; + + const pseudo = { + block: null, + markup: {}, + }; + function pseudo_block() { + pseudo.block = { + kind: 'Block', + loc: location(), + source: '', + value: [], + markup: JSON.parse(JSON.stringify(pseudo.markup)), + pseudo: true, + }; + block.value.push(pseudo.block); + } + for (const node of value) { + if (node.kind === 'Environment' || node.kind === 'Block') { + block.value.push(node); + + if (Object.keys(pseudo.markup).length) { + pseudo_block(); + } else { + pseudo.block = null; + } + continue + } + + if (node.kind === 'RegularCommand' && markup[node.command]) { + if (pseudo.markup.italics) { // https://github.com/citation-js/bibtex-parser-experiments/commit/cae475f075a05d1c074485a061b08ed245170c7e + delete pseudo.markup.italics; + if (markup[node.command] !== 'italics') pseudo.markup[markup[node.command]] = true; + } else { + pseudo.markup[markup[node.command]] = true; + } + + if (Object.keys(pseudo.markup).length) { + pseudo_block(); + } else { + pseudo.block = null; + } + } + + if (pseudo.block) { + pseudo.block.source += node.source; + pseudo.block.value.push(node); + + } else { + block.value.push(node); + + } + } + + block.value = block.value.filter(node => !(node.pseudo && node.value.length === 0)); + + return block + } + + + peg$result = peg$startRuleFunction(); + + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail(peg$endExpectation()); + } + + throw peg$buildStructuredError( + peg$maxFailExpected, + peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, + peg$maxFailPos < input.length + ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) + : peg$computeLocation(peg$maxFailPos, peg$maxFailPos) + ); + } +} + +var grammar = { + SyntaxError: peg$SyntaxError, + parse: peg$parse +}; + +var chunker = createCommonjsModule(function (module, exports) { +// Original work by Henrik Muehe (c) 2010 +// +// CommonJS port by Mikola Lysenko 2013 +// +Object.defineProperty(exports, "__esModule", { value: true }); +exports.parse = void 0; +class ParseError extends Error { + constructor(message, parser) { + message += ` @ ${parser.pos}`; + if (parser.parsing) + message += ` in ${JSON.stringify(parser.parsing)}`; + super(message); + this.name = 'ParseError'; + } +} +// tslint:disable-next-line prefer-template +const letter = new RegExp('[' + [ + // Letter, Uppercase + /\u0041-\u005A\u00C0-\u00D6\u00D8-\u00DE\u0100\u0102\u0104\u0106\u0108\u010A\u010C\u010E\u0110\u0112\u0114\u0116\u0118\u011A\u011C\u011E\u0120\u0122\u0124\u0126\u0128\u012A\u012C\u012E\u0130\u0132\u0134\u0136\u0139\u013B\u013D\u013F\u0141\u0143\u0145\u0147\u014A\u014C\u014E\u0150\u0152\u0154\u0156\u0158\u015A\u015C\u015E\u0160\u0162\u0164\u0166\u0168\u016A\u016C\u016E\u0170\u0172\u0174\u0176\u0178-\u0179\u017B\u017D\u0181-\u0182\u0184\u0186-\u0187\u0189-\u018B\u018E-\u0191\u0193-\u0194\u0196-\u0198\u019C-\u019D\u019F-\u01A0\u01A2\u01A4\u01A6-\u01A7\u01A9\u01AC\u01AE-\u01AF\u01B1-\u01B3\u01B5\u01B7-\u01B8\u01BC\u01C4\u01C7\u01CA\u01CD\u01CF\u01D1\u01D3\u01D5\u01D7\u01D9\u01DB\u01DE\u01E0\u01E2\u01E4\u01E6\u01E8\u01EA\u01EC\u01EE\u01F1\u01F4\u01F6-\u01F8\u01FA\u01FC\u01FE\u0200\u0202\u0204\u0206\u0208\u020A\u020C\u020E\u0210\u0212\u0214\u0216\u0218\u021A\u021C\u021E\u0220\u0222\u0224\u0226\u0228\u022A\u022C\u022E\u0230\u0232\u023A-\u023B\u023D-\u023E\u0241\u0243-\u0246\u0248\u024A\u024C\u024E\u0370\u0372\u0376\u037F\u0386\u0388-\u038A\u038C\u038E-\u038F\u0391-\u03A1\u03A3-\u03AB\u03CF\u03D2-\u03D4\u03D8\u03DA\u03DC\u03DE\u03E0\u03E2\u03E4\u03E6\u03E8\u03EA\u03EC\u03EE\u03F4\u03F7\u03F9-\u03FA\u03FD-\u042F\u0460\u0462\u0464\u0466\u0468\u046A\u046C\u046E\u0470\u0472\u0474\u0476\u0478\u047A\u047C\u047E\u0480\u048A\u048C\u048E\u0490\u0492\u0494\u0496\u0498\u049A\u049C\u049E\u04A0\u04A2\u04A4\u04A6\u04A8\u04AA\u04AC\u04AE\u04B0\u04B2\u04B4\u04B6\u04B8\u04BA\u04BC\u04BE\u04C0-\u04C1\u04C3\u04C5\u04C7\u04C9\u04CB\u04CD\u04D0\u04D2\u04D4\u04D6\u04D8\u04DA\u04DC\u04DE\u04E0\u04E2\u04E4\u04E6\u04E8\u04EA\u04EC\u04EE\u04F0\u04F2\u04F4\u04F6\u04F8\u04FA\u04FC\u04FE\u0500\u0502\u0504\u0506\u0508\u050A\u050C\u050E\u0510\u0512\u0514\u0516\u0518\u051A\u051C\u051E\u0520\u0522\u0524\u0526\u0528\u052A\u052C\u052E\u0531-\u0556\u10A0-\u10C5\u10C7\u10CD\u13A0-\u13F5\u1E00\u1E02\u1E04\u1E06\u1E08\u1E0A\u1E0C\u1E0E\u1E10\u1E12\u1E14\u1E16\u1E18\u1E1A\u1E1C\u1E1E\u1E20\u1E22\u1E24\u1E26\u1E28\u1E2A\u1E2C\u1E2E\u1E30\u1E32\u1E34\u1E36\u1E38\u1E3A\u1E3C\u1E3E\u1E40\u1E42\u1E44\u1E46\u1E48\u1E4A\u1E4C\u1E4E\u1E50\u1E52\u1E54\u1E56\u1E58\u1E5A\u1E5C\u1E5E\u1E60\u1E62\u1E64\u1E66\u1E68\u1E6A\u1E6C\u1E6E\u1E70\u1E72\u1E74\u1E76\u1E78\u1E7A\u1E7C\u1E7E\u1E80\u1E82\u1E84\u1E86\u1E88\u1E8A\u1E8C\u1E8E\u1E90\u1E92\u1E94\u1E9E\u1EA0\u1EA2\u1EA4\u1EA6\u1EA8\u1EAA\u1EAC\u1EAE\u1EB0\u1EB2\u1EB4\u1EB6\u1EB8\u1EBA\u1EBC\u1EBE\u1EC0\u1EC2\u1EC4\u1EC6\u1EC8\u1ECA\u1ECC\u1ECE\u1ED0\u1ED2\u1ED4\u1ED6\u1ED8\u1EDA\u1EDC\u1EDE\u1EE0\u1EE2\u1EE4\u1EE6\u1EE8\u1EEA\u1EEC\u1EEE\u1EF0\u1EF2\u1EF4\u1EF6\u1EF8\u1EFA\u1EFC\u1EFE\u1F08-\u1F0F\u1F18-\u1F1D\u1F28-\u1F2F\u1F38-\u1F3F\u1F48-\u1F4D\u1F59\u1F5B\u1F5D\u1F5F\u1F68-\u1F6F\u1FB8-\u1FBB\u1FC8-\u1FCB\u1FD8-\u1FDB\u1FE8-\u1FEC\u1FF8-\u1FFB\u2102\u2107\u210B-\u210D\u2110-\u2112\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u2130-\u2133\u213E-\u213F\u2145\u2183\u2C00-\u2C2E\u2C60\u2C62-\u2C64\u2C67\u2C69\u2C6B\u2C6D-\u2C70\u2C72\u2C75\u2C7E-\u2C80\u2C82\u2C84\u2C86\u2C88\u2C8A\u2C8C\u2C8E\u2C90\u2C92\u2C94\u2C96\u2C98\u2C9A\u2C9C\u2C9E\u2CA0\u2CA2\u2CA4\u2CA6\u2CA8\u2CAA\u2CAC\u2CAE\u2CB0\u2CB2\u2CB4\u2CB6\u2CB8\u2CBA\u2CBC\u2CBE\u2CC0\u2CC2\u2CC4\u2CC6\u2CC8\u2CCA\u2CCC\u2CCE\u2CD0\u2CD2\u2CD4\u2CD6\u2CD8\u2CDA\u2CDC\u2CDE\u2CE0\u2CE2\u2CEB\u2CED\u2CF2\uA640\uA642\uA644\uA646\uA648\uA64A\uA64C\uA64E\uA650\uA652\uA654\uA656\uA658\uA65A\uA65C\uA65E\uA660\uA662\uA664\uA666\uA668\uA66A\uA66C\uA680\uA682\uA684\uA686\uA688\uA68A\uA68C\uA68E\uA690\uA692\uA694\uA696\uA698\uA69A\uA722\uA724\uA726\uA728\uA72A\uA72C\uA72E\uA732\uA734\uA736\uA738\uA73A\uA73C\uA73E\uA740\uA742\uA744\uA746\uA748\uA74A\uA74C\uA74E\uA750\uA752\uA754\uA756\uA758\uA75A\uA75C\uA75E\uA760\uA762\uA764\uA766\uA768\uA76A\uA76C\uA76E\uA779\uA77B\uA77D-\uA77E\uA780\uA782\uA784\uA786\uA78B\uA78D\uA790\uA792\uA796\uA798\uA79A\uA79C\uA79E\uA7A0\uA7A2\uA7A4\uA7A6\uA7A8\uA7AA-\uA7AD\uA7B0-\uA7B4\uA7B6\uFF21-\uFF3A/.source, + // Letter, Titlecase + /\u01C5\u01C8\u01CB\u01F2\u1F88-\u1F8F\u1F98-\u1F9F\u1FA8-\u1FAF\u1FBC\u1FCC\u1FFC/.source, + // Letter, Lowercase + /\u0061-\u007A\u00B5\u00DF-\u00F6\u00F8-\u00FF\u0101\u0103\u0105\u0107\u0109\u010B\u010D\u010F\u0111\u0113\u0115\u0117\u0119\u011B\u011D\u011F\u0121\u0123\u0125\u0127\u0129\u012B\u012D\u012F\u0131\u0133\u0135\u0137-\u0138\u013A\u013C\u013E\u0140\u0142\u0144\u0146\u0148-\u0149\u014B\u014D\u014F\u0151\u0153\u0155\u0157\u0159\u015B\u015D\u015F\u0161\u0163\u0165\u0167\u0169\u016B\u016D\u016F\u0171\u0173\u0175\u0177\u017A\u017C\u017E-\u0180\u0183\u0185\u0188\u018C-\u018D\u0192\u0195\u0199-\u019B\u019E\u01A1\u01A3\u01A5\u01A8\u01AA-\u01AB\u01AD\u01B0\u01B4\u01B6\u01B9-\u01BA\u01BD-\u01BF\u01C6\u01C9\u01CC\u01CE\u01D0\u01D2\u01D4\u01D6\u01D8\u01DA\u01DC-\u01DD\u01DF\u01E1\u01E3\u01E5\u01E7\u01E9\u01EB\u01ED\u01EF-\u01F0\u01F3\u01F5\u01F9\u01FB\u01FD\u01FF\u0201\u0203\u0205\u0207\u0209\u020B\u020D\u020F\u0211\u0213\u0215\u0217\u0219\u021B\u021D\u021F\u0221\u0223\u0225\u0227\u0229\u022B\u022D\u022F\u0231\u0233-\u0239\u023C\u023F-\u0240\u0242\u0247\u0249\u024B\u024D\u024F-\u0293\u0295-\u02AF\u0371\u0373\u0377\u037B-\u037D\u0390\u03AC-\u03CE\u03D0-\u03D1\u03D5-\u03D7\u03D9\u03DB\u03DD\u03DF\u03E1\u03E3\u03E5\u03E7\u03E9\u03EB\u03ED\u03EF-\u03F3\u03F5\u03F8\u03FB-\u03FC\u0430-\u045F\u0461\u0463\u0465\u0467\u0469\u046B\u046D\u046F\u0471\u0473\u0475\u0477\u0479\u047B\u047D\u047F\u0481\u048B\u048D\u048F\u0491\u0493\u0495\u0497\u0499\u049B\u049D\u049F\u04A1\u04A3\u04A5\u04A7\u04A9\u04AB\u04AD\u04AF\u04B1\u04B3\u04B5\u04B7\u04B9\u04BB\u04BD\u04BF\u04C2\u04C4\u04C6\u04C8\u04CA\u04CC\u04CE-\u04CF\u04D1\u04D3\u04D5\u04D7\u04D9\u04DB\u04DD\u04DF\u04E1\u04E3\u04E5\u04E7\u04E9\u04EB\u04ED\u04EF\u04F1\u04F3\u04F5\u04F7\u04F9\u04FB\u04FD\u04FF\u0501\u0503\u0505\u0507\u0509\u050B\u050D\u050F\u0511\u0513\u0515\u0517\u0519\u051B\u051D\u051F\u0521\u0523\u0525\u0527\u0529\u052B\u052D\u052F\u0561-\u0587\u13F8-\u13FD\u1D00-\u1D2B\u1D6B-\u1D77\u1D79-\u1D9A\u1E01\u1E03\u1E05\u1E07\u1E09\u1E0B\u1E0D\u1E0F\u1E11\u1E13\u1E15\u1E17\u1E19\u1E1B\u1E1D\u1E1F\u1E21\u1E23\u1E25\u1E27\u1E29\u1E2B\u1E2D\u1E2F\u1E31\u1E33\u1E35\u1E37\u1E39\u1E3B\u1E3D\u1E3F\u1E41\u1E43\u1E45\u1E47\u1E49\u1E4B\u1E4D\u1E4F\u1E51\u1E53\u1E55\u1E57\u1E59\u1E5B\u1E5D\u1E5F\u1E61\u1E63\u1E65\u1E67\u1E69\u1E6B\u1E6D\u1E6F\u1E71\u1E73\u1E75\u1E77\u1E79\u1E7B\u1E7D\u1E7F\u1E81\u1E83\u1E85\u1E87\u1E89\u1E8B\u1E8D\u1E8F\u1E91\u1E93\u1E95-\u1E9D\u1E9F\u1EA1\u1EA3\u1EA5\u1EA7\u1EA9\u1EAB\u1EAD\u1EAF\u1EB1\u1EB3\u1EB5\u1EB7\u1EB9\u1EBB\u1EBD\u1EBF\u1EC1\u1EC3\u1EC5\u1EC7\u1EC9\u1ECB\u1ECD\u1ECF\u1ED1\u1ED3\u1ED5\u1ED7\u1ED9\u1EDB\u1EDD\u1EDF\u1EE1\u1EE3\u1EE5\u1EE7\u1EE9\u1EEB\u1EED\u1EEF\u1EF1\u1EF3\u1EF5\u1EF7\u1EF9\u1EFB\u1EFD\u1EFF-\u1F07\u1F10-\u1F15\u1F20-\u1F27\u1F30-\u1F37\u1F40-\u1F45\u1F50-\u1F57\u1F60-\u1F67\u1F70-\u1F7D\u1F80-\u1F87\u1F90-\u1F97\u1FA0-\u1FA7\u1FB0-\u1FB4\u1FB6-\u1FB7\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FC7\u1FD0-\u1FD3\u1FD6-\u1FD7\u1FE0-\u1FE7\u1FF2-\u1FF4\u1FF6-\u1FF7\u210A\u210E-\u210F\u2113\u212F\u2134\u2139\u213C-\u213D\u2146-\u2149\u214E\u2184\u2C30-\u2C5E\u2C61\u2C65-\u2C66\u2C68\u2C6A\u2C6C\u2C71\u2C73-\u2C74\u2C76-\u2C7B\u2C81\u2C83\u2C85\u2C87\u2C89\u2C8B\u2C8D\u2C8F\u2C91\u2C93\u2C95\u2C97\u2C99\u2C9B\u2C9D\u2C9F\u2CA1\u2CA3\u2CA5\u2CA7\u2CA9\u2CAB\u2CAD\u2CAF\u2CB1\u2CB3\u2CB5\u2CB7\u2CB9\u2CBB\u2CBD\u2CBF\u2CC1\u2CC3\u2CC5\u2CC7\u2CC9\u2CCB\u2CCD\u2CCF\u2CD1\u2CD3\u2CD5\u2CD7\u2CD9\u2CDB\u2CDD\u2CDF\u2CE1\u2CE3-\u2CE4\u2CEC\u2CEE\u2CF3\u2D00-\u2D25\u2D27\u2D2D\uA641\uA643\uA645\uA647\uA649\uA64B\uA64D\uA64F\uA651\uA653\uA655\uA657\uA659\uA65B\uA65D\uA65F\uA661\uA663\uA665\uA667\uA669\uA66B\uA66D\uA681\uA683\uA685\uA687\uA689\uA68B\uA68D\uA68F\uA691\uA693\uA695\uA697\uA699\uA69B\uA723\uA725\uA727\uA729\uA72B\uA72D\uA72F-\uA731\uA733\uA735\uA737\uA739\uA73B\uA73D\uA73F\uA741\uA743\uA745\uA747\uA749\uA74B\uA74D\uA74F\uA751\uA753\uA755\uA757\uA759\uA75B\uA75D\uA75F\uA761\uA763\uA765\uA767\uA769\uA76B\uA76D\uA76F\uA771-\uA778\uA77A\uA77C\uA77F\uA781\uA783\uA785\uA787\uA78C\uA78E\uA791\uA793-\uA795\uA797\uA799\uA79B\uA79D\uA79F\uA7A1\uA7A3\uA7A5\uA7A7\uA7A9\uA7B5\uA7B7\uA7FA\uAB30-\uAB5A\uAB60-\uAB65\uAB70-\uABBF\uFB00-\uFB06\uFB13-\uFB17\uFF41-\uFF5A/.source, + // Letter, Modifier + /\u02B0-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0374\u037A\u0559\u0640\u06E5-\u06E6\u07F4-\u07F5\u07FA\u081A\u0824\u0828\u0971\u0E46\u0EC6\u10FC\u17D7\u1843\u1AA7\u1C78-\u1C7D\u1D2C-\u1D6A\u1D78\u1D9B-\u1DBF\u2071\u207F\u2090-\u209C\u2C7C-\u2C7D\u2D6F\u2E2F\u3005\u3031-\u3035\u303B\u309D-\u309E\u30FC-\u30FE\uA015\uA4F8-\uA4FD\uA60C\uA67F\uA69C-\uA69D\uA717-\uA71F\uA770\uA788\uA7F8-\uA7F9\uA9CF\uA9E6\uAA70\uAADD\uAAF3-\uAAF4\uAB5C-\uAB5F\uFF70\uFF9E-\uFF9F/.source, + // Letter, Other + /\u00AA\u00BA\u01BB\u01C0-\u01C3\u0294\u05D0-\u05EA\u05F0-\u05F2\u0620-\u063F\u0641-\u064A\u066E-\u066F\u0671-\u06D3\u06D5\u06EE-\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u0800-\u0815\u0840-\u0858\u08A0-\u08B4\u0904-\u0939\u093D\u0950\u0958-\u0961\u0972-\u0980\u0985-\u098C\u098F-\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC-\u09DD\u09DF-\u09E1\u09F0-\u09F1\u0A05-\u0A0A\u0A0F-\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32-\u0A33\u0A35-\u0A36\u0A38-\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2-\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0-\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F-\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32-\u0B33\u0B35-\u0B39\u0B3D\u0B5C-\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99-\u0B9A\u0B9C\u0B9E-\u0B9F\u0BA3-\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60-\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0-\u0CE1\u0CF1-\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32-\u0E33\u0E40-\u0E45\u0E81-\u0E82\u0E84\u0E87-\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA-\u0EAB\u0EAD-\u0EB0\u0EB2-\u0EB3\u0EBD\u0EC0-\u0EC4\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065-\u1066\u106E-\u1070\u1075-\u1081\u108E\u10D0-\u10FA\u10FD-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17DC\u1820-\u1842\u1844-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE-\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C77\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5-\u1CF6\u2135-\u2138\u2D30-\u2D67\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3006\u303C\u3041-\u3096\u309F\u30A1-\u30FA\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA014\uA016-\uA48C\uA4D0-\uA4F7\uA500-\uA60B\uA610-\uA61F\uA62A-\uA62B\uA66E\uA6A0-\uA6E5\uA78F\uA7F7\uA7FB-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9E0-\uA9E4\uA9E7-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA6F\uAA71-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5-\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADC\uAAE0-\uAAEA\uAAF2\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40-\uFB41\uFB43-\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF66-\uFF6F\uFF71-\uFF9D\uFFA0-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC/.source, +].join('') + ']'); +class BibtexParser { + parse(input, options = {}) { + // this._progress = 0 + this.pos = 0; + this.input = input; + this.max_entries = options.max_entries || 0; + this.entries = 0; + this.parsing = null; + this.chunks = []; + if (options.async) { + return this.bibtexAsync().then(() => this.chunks); + } + else { + this.bibtex(); + return this.chunks; + } + } + isWhitespace(s, horizontalOnly = false) { + return (s === ' ' || s === '\t' || (!horizontalOnly && (s === '\r' || s === '\n'))); + } + match(s) { + this.skipWhitespace(); + if (this.input.substr(this.pos, s.length) !== s) { + throw new ParseError(`Token mismatch, expected ${JSON.stringify(s)}, found ${JSON.stringify(this.input.substr(this.pos, 20))}...`, this); // tslint:disable-line no-magic-numbers + } + this.pos += s.length; + this.skipWhitespace(); + } + tryMatch(s) { + this.skipWhitespace(); + return (this.input.substr(this.pos, s.length) === s); + // this.skipWhitespace() + } + skipWhitespace() { + while (this.pos < this.input.length && this.isWhitespace(this.input[this.pos])) + this.pos++; + // shady + if (this.input[this.pos] === '%') { + while (this.pos < this.input.length && this.input[this.pos] !== '\n') + this.pos++; + while (this.pos < this.input.length && this.isWhitespace(this.input[this.pos])) + this.pos++; + } + } + value_braces() { + let bracecount = 0; + this.match('{'); + const start = this.pos; + let math = false; + while (true) { + switch (this.input[this.pos]) { + case '\\': + this.pos += 1; + break; + case '{': + bracecount++; + break; + case '}': + if (bracecount === 0) { + if (math) + throw new ParseError('Unclosed math section', this); + this.pos++; + return this.input.substring(start, this.pos - 1); + } + bracecount--; + break; + case '$': + math = !math; + break; + } + this.pos++; + if (this.pos >= this.input.length) { + throw new ParseError(`Unterminated brace-value ${JSON.stringify(this.input.substr(start, 20))}`, this); // tslint:disable-line no-magic-numbers + } + } + } + value_quotes() { + this.match('"'); + const start = this.pos; + let bracecount = 0; + while (true) { + switch (this.input[this.pos]) { + case '\\': + this.pos += 1; + break; + case '{': + bracecount++; + break; + case '}': + bracecount--; + break; + case '"': + if (bracecount <= 0) { + this.pos++; + return this.input.substring(start, this.pos - 1); + } + } + this.pos++; + if (this.pos >= this.input.length) { + throw new ParseError(`Unterminated quote-value ${JSON.stringify(this.input.substr(start, 20))}`, this); // tslint:disable-line no-magic-numbers + } + } + } + single_value() { + if (this.tryMatch('{')) { + return this.value_braces(); + } + else if (this.tryMatch('"')) { + return this.value_quotes(); + } + else { + return this.key(); + } + } + value() { + const values = []; + values.push(this.single_value()); + while (this.tryMatch('#')) { + this.match('#'); + values.push(this.single_value()); + } + return values.join(''); + } + key(allowUnicode = false) { + const start = this.pos; + while (true) { + if (this.pos === this.input.length) { + throw new ParseError('Runaway key', this); + } + if (this.input[this.pos].match(/['a-zA-Z0-9&;_:\\./-]/)) { + this.pos++; + } + else if (allowUnicode && this.input[this.pos].match(letter)) { + this.pos++; + } + else { + return this.input.substring(start, this.pos); + } + } + } + key_equals_value() { + const key = this.key(); + if (!this.tryMatch('=')) { + throw new ParseError(`... = value expected, equals sign missing: ${JSON.stringify(this.input.substr(this.pos, 20))}...`, this); // tslint:disable-line no-magic-numbers + } + this.match('='); + const val = this.value(); + return [key, val]; + } + key_value_list() { + this.key_equals_value(); + while (this.tryMatch(',')) { + this.match(','); + // fixes problems with commas at the end of a list + if (this.tryMatch('}')) { + break; + } + this.key_equals_value(); + } + } + entry(d) { + this.parsing = this.key(true); + this.match(','); + this.key_value_list(); + } + directive() { + this.match('@'); + return `@${this.key()}`.toLowerCase(); + } + string() { + this.key_equals_value(); + } + preamble() { + this.value(); + } + comment() { + while (this.isWhitespace(this.input[this.pos], true)) + this.pos++; + if (this.input[this.pos] === '{') { + this.value_braces(); + return; + } + while (this.input[this.pos] !== '\n' && this.pos < this.input.length) + this.pos++; + } + /* + private progress() { + const progress = Math.round((this.pos / this.input.length * 100) / 5) * 5 // tslint:disable-line no-magic-numbers + if (this._progress !== progress) { + this._progress = progress + process.stdout.write(` (${this._progress}%) `) + } + } + */ + hasMore() { + if (this.max_entries && this.entries >= this.max_entries) + return false; + return (this.pos < this.input.length); + } + bibtex() { + while (this.hasMore()) { + this.parseNext(); + } + } + bibtexAsync() { + return this.hasMore() ? (new Promise(resolve => resolve(this.parseNext()))).then(() => this.bibtexAsync()) : Promise.resolve(null); + } + parseNext() { + // this.progress() + const chunk = { + offset: { + pos: this.pos, + line: this.input.substring(0, this.pos).split('\n').length - 1, + }, + error: null, + text: null, + }; + this.skipWhitespace(); + if (this.pos >= this.input.length) + return; + let guard = ''; + try { + const d = this.directive(); + switch (d) { + case '@string': + this.match('{'); + this.string(); + this.match('}'); + chunk.stringDeclaration = true; + break; + case '@preamble': + this.match('{'); + this.preamble(); + this.match('}'); + chunk.preamble = true; + break; + case '@comment': + this.comment(); + chunk.comment = true; + break; + default: + if (this.tryMatch('{')) { + guard = '{}'; + } + else if (this.tryMatch('(')) { + guard = '()'; + } + else { + throw new ParseError(`Token mismatch, expected '{' or '(', found ${JSON.stringify(this.input.substr(this.pos, 20))}...`, this); // tslint:disable-line no-magic-numbers + } + this.match(guard[0]); + this.entry(d); + this.match(guard[1]); + chunk.entry = true; + this.entries++; + break; + } + } + catch (err) { + if (err.name !== 'ParseError') + throw err; + chunk.error = err.message, + // skip ahead to the next @ and try again + this.pos = chunk.offset.pos + 1; + while (this.pos < this.input.length && this.input[this.pos] !== '@') + this.pos++; + } + const text = this.input.substring(chunk.offset.pos, this.pos); + const last = this.chunks.length - 1; + if (chunk.error && this.chunks.length && this.chunks[last].error) { + this.chunks[last].text += text; + } + else { + chunk.text = text; + this.chunks.push(chunk); + } + } +} +/** + * Reads the bibtex input and splits it into separate chunks of `@string`s, `@comment`s, and bibtex entries. Useful for detecting if a file is bibtex file and for filtering out basic errors that would + * make the more sophisticated [[bibtex.parse]] reject the whole file + * + * @returns array of chunks, with markers for type and errors (if any) found. + */ +function parse(input, options = {}) { + return (new BibtexParser).parse(input, options); +} +exports.parse = parse; + +}); + +var $ = { + math: "\\$", + text: "\\$" +}; +var _ = { + math: "\\_", + text: "\\_" +}; +var require$$0$1 = { + "#": { + math: "\\#", + text: "\\#" +}, + $: $, + "%": { + math: "\\%", + text: "\\%" +}, + "&": { + math: "\\&", + text: "\\&" +}, + "/​": { + text: "\\slash", + commandspacer: true +}, + "<": { + math: "<" +}, + ">": { + math: ">" +}, + "\\": { + math: "\\backslash", + text: "\\textbackslash", + commandspacer: true +}, + "^": { + math: "\\sphat", + text: "\\^" +}, + _: _, + "i︠a︡": { + text: "\\t{ia}" +}, + "{": { + math: "\\lbrace", + text: "\\{" +}, + "}": { + math: "\\rbrace", + text: "\\}" +}, + "~": { + math: "\\sptilde", + text: "\\textasciitilde", + commandspacer: true +}, + " ": { + math: "~", + space: true, + text: "~" +}, + "¡": { + text: "\\textexclamdown", + commandspacer: true +}, + "¢": { + math: "\\cent", + text: "\\textcent", + commandspacer: true, + textpackages: [ + "textcomp" + ] +}, + "£": { + math: "\\pounds", + text: "\\textsterling", + commandspacer: true, + textpackages: [ + "textcomp" + ] +}, + "¤": { + text: "\\textcurrency", + commandspacer: true, + textpackages: [ + "textcomp" + ] +}, + "¥": { + math: "\\yen", + text: "\\textyen", + commandspacer: true, + textpackages: [ + "textcomp" + ] +}, + "¦": { + text: "\\textbrokenbar", + commandspacer: true, + textpackages: [ + "textcomp" + ] +}, + "§": { + text: "\\textsection", + commandspacer: true, + textpackages: [ + "textcomp" + ] +}, + "¨": { + math: "\\spddot", + text: "\\textasciidieresis", + commandspacer: true +}, + "©": { + text: "\\textcopyright", + commandspacer: true, + textpackages: [ + "textcomp" + ] +}, + "ª": { + text: "\\textordfeminine", + commandspacer: true, + textpackages: [ + "textcomp" + ] +}, + "«": { + text: "\\guillemotleft", + commandspacer: true +}, + "¬": { + math: "\\lnot" +}, + "­": { + math: "\\-", + text: "\\-" +}, + "®": { + math: "\\circledR", + text: "\\textregistered", + commandspacer: true, + textpackages: [ + "textcomp" + ] +}, + "¯": { + text: "\\textasciimacron", + commandspacer: true +}, + "°": { + math: "^\\circ", + text: "\\textdegree", + commandspacer: true, + textpackages: [ + "textcomp" + ] +}, + "±": { + math: "\\pm" +}, + "²": { + math: "^{2}" +}, + "³": { + math: "^{3}" +}, + "´": { + text: "\\textasciiacute", + commandspacer: true +}, + "µ": { + text: "\\textmu", + commandspacer: true +}, + "¶": { + text: "\\textparagraph", + commandspacer: true, + textpackages: [ + "textcomp" + ] +}, + "·": { + math: "\\cdot" +}, + "¸": { + text: "\\c", + commandspacer: true +}, + "¹": { + math: "^{1}" +}, + "º": { + text: "\\textordmasculine", + commandspacer: true, + textpackages: [ + "textcomp" + ] +}, + "»": { + text: "\\guillemotright", + commandspacer: true +}, + "¼": { + math: "\\frac{1}{4}" +}, + "½": { + math: "\\frac{1}{2}" +}, + "¾": { + math: "\\frac{3}{4}" +}, + "¿": { + text: "\\textquestiondown", + commandspacer: true +}, + "À": { + text: "\\`A" +}, + "Á": { + text: "\\'A" +}, + "Â": { + text: "\\^A" +}, + "Ã": { + text: "\\~A" +}, + "Ä": { + text: "\\\"A" +}, + "Å": { + text: "\\AA", + commandspacer: true +}, + "Æ": { + text: "\\AE", + commandspacer: true +}, + "Ç": { + text: "\\c{C}" +}, + "È": { + text: "\\`E" +}, + "É": { + text: "\\'E" +}, + "Ê": { + text: "\\^E" +}, + "Ë": { + text: "\\\"E" +}, + "Ì": { + text: "\\`I" +}, + "Í": { + text: "\\'I" +}, + "Î": { + text: "\\^I" +}, + "Ï": { + text: "\\\"I" +}, + "Ð": { + text: "\\DH", + commandspacer: true +}, + "Ñ": { + text: "\\~N" +}, + "Ò": { + text: "\\`O" +}, + "Ó": { + text: "\\'O" +}, + "Ô": { + text: "\\^O" +}, + "Õ": { + text: "\\~O" +}, + "Ö": { + text: "\\\"O" +}, + "×": { + math: "\\times", + text: "\\texttimes", + commandspacer: true +}, + "Ø": { + text: "\\O", + commandspacer: true +}, + "Ù": { + text: "\\`U" +}, + "Ú": { + text: "\\'U" +}, + "Û": { + text: "\\^U" +}, + "Ü": { + text: "\\\"U" +}, + "Ý": { + text: "\\'Y" +}, + "Þ": { + text: "\\TH", + commandspacer: true +}, + "ß": { + text: "\\ss", + commandspacer: true +}, + "à": { + text: "\\`a" +}, + "á": { + text: "\\'a" +}, + "â": { + text: "\\^a" +}, + "ã": { + text: "\\~a" +}, + "ä": { + text: "\\\"a" +}, + "å": { + text: "\\aa", + commandspacer: true +}, + "æ": { + text: "\\ae", + commandspacer: true +}, + "ç": { + text: "\\c{c}" +}, + "è": { + text: "\\`e" +}, + "é": { + text: "\\'e" +}, + "ê": { + text: "\\^e" +}, + "ë": { + text: "\\\"e" +}, + "ì": { + text: "\\`i" +}, + "í": { + text: "\\'i" +}, + "î": { + text: "\\^i" +}, + "ï": { + text: "\\\"i" +}, + "ð": { + math: "\\eth", + mathpackages: [ + "amssymb", + "arevmath" + ], + text: "\\dh", + commandspacer: true +}, + "ñ": { + text: "\\~n" +}, + "ò": { + text: "\\`o" +}, + "ó": { + text: "\\'o" +}, + "ô": { + text: "\\^o" +}, + "õ": { + text: "\\~o" +}, + "ö": { + text: "\\\"o" +}, + "÷": { + math: "\\div" +}, + "ø": { + text: "\\o", + commandspacer: true +}, + "ù": { + text: "\\`u" +}, + "ú": { + text: "\\'u" +}, + "û": { + text: "\\^u" +}, + "ü": { + text: "\\\"u" +}, + "ý": { + text: "\\'y" +}, + "þ": { + text: "\\th", + commandspacer: true +}, + "ÿ": { + text: "\\\"y" +}, + "Ā": { + text: "\\=A" +}, + "ā": { + text: "\\=a" +}, + "Ă": { + text: "\\u{A}" +}, + "ă": { + text: "\\u{a}" +}, + "Ą": { + text: "\\k{A}" +}, + "ą": { + text: "\\k{a}" +}, + "Ć": { + text: "\\'C" +}, + "ć": { + text: "\\'c" +}, + "Ĉ": { + text: "\\^C" +}, + "ĉ": { + text: "\\^c" +}, + "Ċ": { + text: "\\.C" +}, + "ċ": { + text: "\\.c" +}, + "Č": { + text: "\\v{C}" +}, + "č": { + text: "\\v{c}" +}, + "Ď": { + text: "\\v{D}" +}, + "ď": { + text: "\\v{d}" +}, + "Đ": { + text: "\\DJ", + commandspacer: true +}, + "đ": { + text: "\\dj", + commandspacer: true +}, + "Ē": { + text: "\\=E" +}, + "ē": { + text: "\\=e" +}, + "Ĕ": { + text: "\\u{E}" +}, + "ĕ": { + text: "\\u{e}" +}, + "Ė": { + text: "\\.E" +}, + "ė": { + text: "\\.e" +}, + "Ę": { + text: "\\k{E}" +}, + "ę": { + text: "\\k{e}" +}, + "Ě": { + text: "\\v{E}" +}, + "ě": { + text: "\\v{e}" +}, + "Ĝ": { + text: "\\^G" +}, + "ĝ": { + text: "\\^g" +}, + "Ğ": { + text: "\\u{G}" +}, + "ğ": { + text: "\\u{g}" +}, + "Ġ": { + text: "\\.G" +}, + "ġ": { + text: "\\.g" +}, + "Ģ": { + text: "\\c{G}" +}, + "ģ": { + text: "\\c{g}" +}, + "Ĥ": { + text: "\\^H" +}, + "ĥ": { + text: "\\^h" +}, + "Ħ": { + text: "{\\fontencoding{LELA}\\selectfont\\char40}" +}, + "ħ": { + math: "\\Elzxh" +}, + "Ĩ": { + text: "\\~I" +}, + "ĩ": { + text: "\\~i" +}, + "Ī": { + text: "\\=I" +}, + "ī": { + text: "\\=i" +}, + "Ĭ": { + text: "\\u{I}" +}, + "ĭ": { + text: "{\\u \\i}" +}, + "Į": { + text: "\\k{I}" +}, + "į": { + text: "\\k{i}" +}, + "İ": { + text: "\\.I" +}, + "ı": { + math: "\\imath", + text: "\\i", + commandspacer: true +}, + "IJ": { + text: "IJ" +}, + "ij": { + text: "ij" +}, + "Ĵ": { + text: "\\^J" +}, + "ĵ": { + text: "\\^\\j", + commandspacer: true +}, + "Ķ": { + text: "\\c{K}" +}, + "ķ": { + text: "\\c{k}" +}, + "ĸ": { + text: "{\\fontencoding{LELA}\\selectfont\\char91}" +}, + "Ĺ": { + text: "\\'L" +}, + "ĺ": { + text: "\\'l" +}, + "Ļ": { + text: "\\c{L}" +}, + "ļ": { + text: "\\c{l}" +}, + "Ľ": { + text: "\\v{L}" +}, + "ľ": { + text: "\\v{l}" +}, + "Ŀ": { + text: "{\\fontencoding{LELA}\\selectfont\\char201}" +}, + "ŀ": { + text: "{\\fontencoding{LELA}\\selectfont\\char202}" +}, + "Ł": { + text: "\\L", + commandspacer: true +}, + "ł": { + text: "\\l", + commandspacer: true +}, + "Ń": { + text: "\\'N" +}, + "ń": { + text: "\\'n" +}, + "Ņ": { + text: "\\c{N}" +}, + "ņ": { + text: "\\c{n}" +}, + "Ň": { + text: "\\v{N}" +}, + "ň": { + text: "\\v{n}" +}, + "ʼn": { + text: "'n" +}, + "Ŋ": { + text: "\\NG", + commandspacer: true +}, + "ŋ": { + text: "\\ng", + commandspacer: true +}, + "Ō": { + text: "\\=O" +}, + "ō": { + text: "\\=o" +}, + "Ŏ": { + text: "\\u{O}" +}, + "ŏ": { + text: "\\u{o}" +}, + "Ő": { + text: "\\H{O}" +}, + "ő": { + text: "\\H{o}" +}, + "Œ": { + text: "\\OE", + commandspacer: true +}, + "œ": { + text: "\\oe", + commandspacer: true +}, + "Ŕ": { + text: "\\'R" +}, + "ŕ": { + text: "\\'r" +}, + "Ŗ": { + text: "\\c{R}" +}, + "ŗ": { + text: "\\c{r}" +}, + "Ř": { + text: "\\v{R}" +}, + "ř": { + text: "\\v{r}" +}, + "Ś": { + text: "\\'S" +}, + "ś": { + text: "\\'s" +}, + "Ŝ": { + text: "\\^S" +}, + "ŝ": { + text: "\\^s" +}, + "Ş": { + text: "\\c{S}" +}, + "ş": { + text: "\\c{s}" +}, + "Š": { + text: "\\v{S}" +}, + "š": { + text: "\\v{s}" +}, + "Ţ": { + text: "\\c{T}" +}, + "ţ": { + text: "\\c{t}" +}, + "Ť": { + text: "\\v{T}" +}, + "ť": { + text: "\\v{t}" +}, + "Ŧ": { + text: "{\\fontencoding{LELA}\\selectfont\\char47}" +}, + "ŧ": { + text: "{\\fontencoding{LELA}\\selectfont\\char63}" +}, + "Ũ": { + text: "\\~U" +}, + "ũ": { + text: "\\~u" +}, + "Ū": { + text: "\\=U" +}, + "ū": { + text: "\\=u" +}, + "Ŭ": { + text: "\\u{U}" +}, + "ŭ": { + text: "\\u{u}" +}, + "Ů": { + text: "\\r{U}" +}, + "ů": { + text: "\\r{u}" +}, + "Ű": { + text: "\\H{U}" +}, + "ű": { + text: "\\H{u}" +}, + "Ų": { + text: "\\k{U}" +}, + "ų": { + text: "\\k{u}" +}, + "Ŵ": { + text: "\\^W" +}, + "ŵ": { + text: "\\^w" +}, + "Ŷ": { + text: "\\^Y" +}, + "ŷ": { + text: "\\^y" +}, + "Ÿ": { + text: "\\\"Y" +}, + "Ź": { + text: "\\'Z" +}, + "ź": { + text: "\\'z" +}, + "Ż": { + text: "\\.Z" +}, + "ż": { + text: "\\.z" +}, + "Ž": { + text: "\\v{Z}" +}, + "ž": { + text: "\\v{z}" +}, + "ſ": { + text: "s" +}, + "ƒ": { + math: "f" +}, + "ƕ": { + text: "\\texthvlig", + commandspacer: true +}, + "ƞ": { + text: "\\textnrleg", + commandspacer: true +}, + "ƪ": { + text: "\\textesh", + commandspacer: true +}, + "Ƶ": { + math: "\\Zbar" +}, + "ƺ": { + text: "{\\fontencoding{LELA}\\selectfont\\char195}" +}, + "ǂ": { + text: "\\textdoublepipe", + commandspacer: true +}, + "Ǎ": { + text: "\\v{A}" +}, + "ǎ": { + text: "\\v{a}" +}, + "Ǐ": { + text: "\\v{I}" +}, + "ǐ": { + text: "\\v{i}" +}, + "Ǒ": { + text: "\\v{O}" +}, + "ǒ": { + text: "\\v{o}" +}, + "Ǔ": { + text: "\\v{U}" +}, + "ǔ": { + text: "\\v{u}" +}, + "Ǧ": { + text: "\\v{G}" +}, + "ǧ": { + text: "\\v{g}" +}, + "Ǩ": { + text: "\\v{K}" +}, + "ǩ": { + text: "\\v{k}" +}, + "Ǫ": { + text: "\\k{O}" +}, + "ǫ": { + text: "\\k{o}" +}, + "ǰ": { + text: "\\v{j}" +}, + "Ǵ": { + text: "\\'G" +}, + "ǵ": { + text: "\\'g" +}, + "Ȩ": { + text: "\\c{E}" +}, + "ȩ": { + text: "\\c{e}" +}, + "ȷ": { + math: "\\jmath" +}, + "ɐ": { + math: "\\Elztrna" +}, + "ɒ": { + math: "\\Elztrnsa" +}, + "ɔ": { + math: "\\Elzopeno" +}, + "ɖ": { + math: "\\Elzrtld" +}, + "ɘ": { + text: "{\\fontencoding{LEIP}\\selectfont\\char61}" +}, + "ə": { + math: "\\Elzschwa" +}, + "ɛ": { + math: "\\varepsilon" +}, + "ɡ": { + text: "g" +}, + "ɣ": { + math: "\\Elzpgamma" +}, + "ɤ": { + math: "\\Elzpbgam" +}, + "ɥ": { + math: "\\Elztrnh" +}, + "ɬ": { + math: "\\Elzbtdl" +}, + "ɭ": { + math: "\\Elzrtll" +}, + "ɯ": { + math: "\\Elztrnm" +}, + "ɰ": { + math: "\\Elztrnmlr" +}, + "ɱ": { + math: "\\Elzltlmr" +}, + "ɲ": { + text: "\\Elzltln", + commandspacer: true +}, + "ɳ": { + math: "\\Elzrtln" +}, + "ɷ": { + math: "\\Elzclomeg" +}, + "ɸ": { + text: "\\textphi", + commandspacer: true +}, + "ɹ": { + math: "\\Elztrnr" +}, + "ɺ": { + math: "\\Elztrnrl" +}, + "ɻ": { + math: "\\Elzrttrnr" +}, + "ɼ": { + math: "\\Elzrl" +}, + "ɽ": { + math: "\\Elzrtlr" +}, + "ɾ": { + math: "\\Elzfhr" +}, + "ɿ": { + text: "{\\fontencoding{LEIP}\\selectfont\\char202}" +}, + "ʂ": { + math: "\\Elzrtls" +}, + "ʃ": { + math: "\\Elzesh" +}, + "ʇ": { + math: "\\Elztrnt" +}, + "ʈ": { + math: "\\Elzrtlt" +}, + "ʊ": { + math: "\\Elzpupsil" +}, + "ʋ": { + math: "\\Elzpscrv" +}, + "ʌ": { + math: "\\Elzinvv" +}, + "ʍ": { + math: "\\Elzinvw" +}, + "ʎ": { + math: "\\Elztrny" +}, + "ʐ": { + math: "\\Elzrtlz" +}, + "ʒ": { + math: "\\Elzyogh" +}, + "ʔ": { + math: "\\Elzglst" +}, + "ʕ": { + math: "\\Elzreglst" +}, + "ʖ": { + math: "\\Elzinglst" +}, + "ʞ": { + text: "\\textturnk", + commandspacer: true +}, + "ʤ": { + math: "\\Elzdyogh" +}, + "ʧ": { + math: "\\Elztesh" +}, + "ʰ": { + math: "^{h}", + text: "\\textsuperscript{h}" +}, + "ʲ": { + math: "^{j}", + text: "\\textsuperscript{j}" +}, + "ʳ": { + math: "^{r}", + text: "\\textsuperscript{r}" +}, + "ʷ": { + math: "^{w}", + text: "\\textsuperscript{w}" +}, + "ʸ": { + math: "^{y}", + text: "\\textsuperscript{y}" +}, + "ʹ": { + text: "'" +}, + "ʻ": { + text: "'" +}, + "ʼ": { + text: "'" +}, + "ʽ": { + text: "'" +}, + "ʿ": { + text: "\\lasp", + commandspacer: true, + textpackages: [ + "mathscinet" + ] +}, + "ˆ": { + text: "\\textasciicircum", + commandspacer: true +}, + "ˇ": { + text: "\\textasciicaron", + commandspacer: true +}, + "ˈ": { + math: "\\Elzverts" +}, + "ˉ": { + text: "-" +}, + "ˌ": { + math: "\\Elzverti" +}, + "ː": { + math: "\\Elzlmrk" +}, + "ˑ": { + math: "\\Elzhlmrk" +}, + "˒": { + math: "\\Elzsbrhr" +}, + "˓": { + math: "\\Elzsblhr" +}, + "˔": { + math: "\\Elzrais" +}, + "˕": { + math: "\\Elzlow" +}, + "˘": { + text: "\\textasciibreve", + commandspacer: true +}, + "˙": { + text: "\\textperiodcentered", + commandspacer: true, + textpackages: [ + "textcomp" + ] +}, + "˚": { + text: "\\r{}" +}, + "˛": { + text: "\\k{}" +}, + "˜": { + text: "\\texttildelow", + commandspacer: true +}, + "˝": { + text: "\\H{}" +}, + "ˡ": { + math: "^{l}", + text: "\\textsuperscript{l}" +}, + "ˢ": { + math: "^{s}", + text: "\\textsuperscript{s}" +}, + "ˣ": { + math: "^{x}", + text: "\\textsuperscript{x}" +}, + "˥": { + text: "\\tone{55}" +}, + "˦": { + text: "\\tone{44}" +}, + "˧": { + text: "\\tone{33}" +}, + "˨": { + text: "\\tone{22}" +}, + "˩": { + text: "\\tone{11}" +}, + "̀": { + math: "\\grave", + combiningdiacritic: true, + text: "\\`" +}, + "̀̄": { + text: "\\textgravemacron", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̄̀": { + text: "\\textgravemacron", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̀̇": { + text: "\\textgravedot", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̇̀": { + text: "\\textgravedot", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "́": { + math: "\\acute", + combiningdiacritic: true, + text: "\\'" +}, + "́̄": { + text: "\\textacutemacron", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̄́": { + text: "\\textacutemacron", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "́̌": { + text: "\\textacutewedge", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̌́": { + text: "\\textacutewedge", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̂": { + math: "\\hat", + combiningdiacritic: true, + text: "\\^" +}, + "̂̇": { + text: "\\textcircumdot", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̇̂": { + text: "\\textcircumdot", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̃": { + math: "\\tilde", + combiningdiacritic: true, + text: "\\~" +}, + "̃̇": { + text: "\\texttildedot", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̇̃": { + text: "\\texttildedot", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̄": { + math: "\\bar", + combiningdiacritic: true, + text: "\\=" +}, + "̅": { + math: "\\overline", + combiningdiacritic: true +}, + "̆": { + math: "\\breve", + combiningdiacritic: true, + text: "\\u", + commandspacer: true +}, + "̆̄": { + text: "\\textbrevemacron", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̄̆": { + text: "\\textbrevemacron", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̇": { + math: "\\dot", + combiningdiacritic: true, + text: "\\." +}, + "̇́": { + text: "\\textdotacute", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "́̇": { + text: "\\textdotacute", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̇̆": { + text: "\\textdotbreve", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̆̇": { + text: "\\textdotbreve", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̈": { + math: "\\ddot", + combiningdiacritic: true, + text: "\\\"" +}, + "̉": { + math: "\\ovhook" +}, + "̊": { + math: "\\mathring", + combiningdiacritic: true, + text: "\\r", + commandspacer: true +}, + "̊̄": { + text: "\\textringmacron", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̄̊": { + text: "\\textringmacron", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̋": { + text: "\\H", + commandspacer: true, + combiningdiacritic: true +}, + "̌": { + math: "\\check", + text: "\\v", + commandspacer: true, + combiningdiacritic: true +}, + "̍": { + text: "\\textvbaraccent", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̎": { + text: "\\textdoublevbaraccent", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̏": { + text: "\\textdoublegrave", + commandspacer: true, + combiningdiacritic: true +}, + "̐": { + text: "\\textdotbreve", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̑": { + text: "{\\fontencoding{LECO}\\selectfont\\char177}" +}, + "̒": { + math: "\\oturnedcomma" +}, + "̕": { + math: "\\ocommatopright" +}, + "̖": { + text: "\\textsubgrave", + commandspacer: true, + combiningdiacritic: true +}, + "̘": { + text: "\\textadvancing", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̙": { + text: "\\textretracting", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̚": { + math: "\\droang", + text: "\\textcorner", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̜": { + text: "\\textsublhalfring", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̝": { + text: "\\textraising", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̞": { + text: "\\textlowering", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̟": { + text: "\\textsubplus", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̡": { + math: "\\Elzpalh" +}, + "̢": { + text: "\\Elzrh", + commandspacer: true +}, + "̣": { + text: "\\d", + commandspacer: true, + combiningdiacritic: true +}, + "̤": { + text: "\\textsubumlaut", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̥": { + text: "\\textsubring", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̧": { + text: "\\c", + commandspacer: true, + combiningdiacritic: true +}, + "̨": { + text: "\\k", + commandspacer: true, + combiningdiacritic: true +}, + "̩": { + text: "\\textsyllabic", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̪": { + math: "\\Elzsbbrg", + text: "\\textsubbridge", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̫": { + text: "{\\fontencoding{LECO}\\selectfont\\char203}" +}, + "̬": { + text: "\\textsubwedge", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̯": { + text: "\\textsubarch", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̰": { + math: "\\utilde", + text: "\\textsubtilde", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̱": { + math: "\\underbar", + combiningdiacritic: true, + text: "\\textsubbar", + commandspacer: true, + textpackages: [ + "tipa" + ] +}, + "̲": { + math: "\\underline" +}, + "̴": { + text: "\\textsuperimposetilde", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̵": { + text: "\\Elzxl", + commandspacer: true +}, + "̶": { + text: "\\Elzbar", + commandspacer: true +}, + "̷": { + text: "{\\fontencoding{LECO}\\selectfont\\char215}" +}, + "̸": { + math: "\\not" +}, + "̹": { + text: "\\textsubrhalfring", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̺": { + text: "\\textinvsubbridge", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̻": { + text: "\\textsubsquare", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̼": { + text: "\\textseagull", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̽": { + text: "\\textovercross", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "͡": { + text: "{\\fontencoding{LECO}\\selectfont\\char225}" +}, + "ʹ": { + text: "'" +}, + "͵": { + text: "," +}, + ";": { + text: ";" +}, + "Ά": { + text: "\\'A" +}, + "Έ": { + text: "\\'E" +}, + "Ή": { + text: "\\'H" +}, + "Ί": { + text: "{\\'{}I}" +}, + "Ό": { + text: "{\\'{}O}" +}, + "Ύ": { + math: "\\mathrm{'Y}" +}, + "Ώ": { + math: "\\mathrm{'\\Omega}" +}, + "ΐ": { + math: "\\acute{\\ddot{\\iota}}" +}, + "Α": { + math: "A" +}, + "Β": { + math: "B" +}, + "Γ": { + math: "\\Gamma" +}, + "Δ": { + math: "\\Delta" +}, + "Ε": { + math: "E" +}, + "Ζ": { + math: "Z" +}, + "Η": { + math: "H" +}, + "Θ": { + math: "\\Theta" +}, + "Ι": { + math: "I" +}, + "Κ": { + math: "K" +}, + "Λ": { + math: "\\Lambda" +}, + "Μ": { + math: "M" +}, + "Ν": { + math: "N" +}, + "Ξ": { + math: "\\Xi" +}, + "Ο": { + math: "O" +}, + "Π": { + math: "\\Pi" +}, + "Ρ": { + math: "P" +}, + "Σ": { + math: "\\Sigma" +}, + "Τ": { + math: "T" +}, + "Υ": { + math: "\\Upsilon" +}, + "Φ": { + math: "\\Phi" +}, + "Χ": { + math: "X" +}, + "Ψ": { + math: "\\Psi" +}, + "Ω": { + math: "\\Omega" +}, + "Ϊ": { + math: "\\mathrm{\\ddot{I}}" +}, + "Ϋ": { + math: "\\mathrm{\\ddot{Y}}" +}, + "ά": { + text: "{\\'$\\alpha$}" +}, + "έ": { + math: "\\acute{\\epsilon}" +}, + "ή": { + math: "\\acute{\\eta}" +}, + "ί": { + math: "\\acute{\\iota}" +}, + "ΰ": { + math: "\\acute{\\ddot{\\upsilon}}" +}, + "α": { + math: "\\alpha" +}, + "β": { + math: "\\beta" +}, + "γ": { + math: "\\gamma" +}, + "δ": { + math: "\\delta" +}, + "ε": { + math: "\\epsilon" +}, + "ζ": { + math: "\\zeta" +}, + "η": { + math: "\\eta" +}, + "θ": { + math: "\\theta", + text: "\\texttheta", + commandspacer: true +}, + "ι": { + math: "\\iota" +}, + "κ": { + math: "\\kappa" +}, + "λ": { + math: "\\lambda" +}, + "μ": { + math: "\\mu" +}, + "ν": { + math: "\\nu" +}, + "ξ": { + math: "\\xi" +}, + "ο": { + math: "o" +}, + "π": { + math: "\\pi" +}, + "ρ": { + math: "\\rho" +}, + "ς": { + math: "\\varsigma" +}, + "σ": { + math: "\\sigma" +}, + "τ": { + math: "\\tau" +}, + "υ": { + math: "\\upsilon" +}, + "φ": { + math: "\\varphi" +}, + "χ": { + math: "\\chi" +}, + "ψ": { + math: "\\psi" +}, + "ω": { + math: "\\omega" +}, + "ϊ": { + math: "\\ddot{\\iota}" +}, + "ϋ": { + math: "\\ddot{\\upsilon}" +}, + "ό": { + text: "\\'o" +}, + "ύ": { + math: "\\acute{\\upsilon}" +}, + "ώ": { + math: "\\acute{\\omega}" +}, + "ϐ": { + math: "\\varbeta", + text: "\\Pisymbol{ppi022}{87}" +}, + "ϑ": { + math: "\\vartheta", + text: "\\textvartheta", + commandspacer: true +}, + "ϒ": { + math: "\\Upsilon" +}, + "ϕ": { + math: "\\phi" +}, + "ϖ": { + math: "\\varpi" +}, + "Ϙ": { + math: "\\Qoppa" +}, + "ϙ": { + math: "\\qoppa" +}, + "Ϛ": { + math: "\\Stigma" +}, + "ϛ": { + math: "\\stigma" +}, + "Ϝ": { + math: "\\Digamma" +}, + "ϝ": { + math: "\\digamma" +}, + "Ϟ": { + math: "\\Koppa" +}, + "ϟ": { + math: "\\koppa" +}, + "Ϡ": { + math: "\\Sampi" +}, + "ϡ": { + math: "\\sampi" +}, + "ϰ": { + math: "\\varkappa" +}, + "ϱ": { + math: "\\varrho" +}, + "ϴ": { + math: "\\upvarTheta", + text: "\\textTheta", + commandspacer: true +}, + "ϵ": { + math: "\\epsilon" +}, + "϶": { + math: "\\backepsilon" +}, + "Ё": { + text: "\\cyrchar\\CYRYO", + commandspacer: true +}, + "Ђ": { + text: "\\cyrchar\\CYRDJE", + commandspacer: true +}, + "Ѓ": { + text: "\\cyrchar{\\'\\CYRG}" +}, + "Є": { + text: "\\cyrchar\\CYRIE", + commandspacer: true +}, + "Ѕ": { + text: "\\cyrchar\\CYRDZE", + commandspacer: true +}, + "І": { + text: "\\cyrchar\\CYRII", + commandspacer: true +}, + "Ї": { + text: "\\cyrchar\\CYRYI", + commandspacer: true +}, + "Ј": { + text: "\\cyrchar\\CYRJE", + commandspacer: true +}, + "Љ": { + text: "\\cyrchar\\CYRLJE", + commandspacer: true +}, + "Њ": { + text: "\\cyrchar\\CYRNJE", + commandspacer: true +}, + "Ћ": { + text: "\\cyrchar\\CYRTSHE", + commandspacer: true +}, + "Ќ": { + text: "\\cyrchar{\\'\\CYRK}" +}, + "Ў": { + text: "\\cyrchar\\CYRUSHRT", + commandspacer: true +}, + "Џ": { + text: "\\cyrchar\\CYRDZHE", + commandspacer: true +}, + "А": { + text: "\\cyrchar\\CYRA", + commandspacer: true +}, + "Б": { + text: "\\cyrchar\\CYRB", + commandspacer: true +}, + "В": { + text: "\\cyrchar\\CYRV", + commandspacer: true +}, + "Г": { + text: "\\cyrchar\\CYRG", + commandspacer: true +}, + "Д": { + text: "\\cyrchar\\CYRD", + commandspacer: true +}, + "Е": { + text: "\\cyrchar\\CYRE", + commandspacer: true +}, + "Ж": { + text: "\\cyrchar\\CYRZH", + commandspacer: true +}, + "З": { + text: "\\cyrchar\\CYRZ", + commandspacer: true +}, + "И": { + text: "\\cyrchar\\CYRI", + commandspacer: true +}, + "Й": { + text: "\\cyrchar\\CYRISHRT", + commandspacer: true +}, + "К": { + text: "\\cyrchar\\CYRK", + commandspacer: true +}, + "Л": { + text: "\\cyrchar\\CYRL", + commandspacer: true +}, + "М": { + text: "\\cyrchar\\CYRM", + commandspacer: true +}, + "Н": { + text: "\\cyrchar\\CYRN", + commandspacer: true +}, + "О": { + text: "\\cyrchar\\CYRO", + commandspacer: true +}, + "П": { + text: "\\cyrchar\\CYRP", + commandspacer: true +}, + "Р": { + text: "\\cyrchar\\CYRR", + commandspacer: true +}, + "С": { + text: "\\cyrchar\\CYRS", + commandspacer: true +}, + "Т": { + text: "\\cyrchar\\CYRT", + commandspacer: true +}, + "У": { + text: "\\cyrchar\\CYRU", + commandspacer: true +}, + "Ф": { + text: "\\cyrchar\\CYRF", + commandspacer: true +}, + "Х": { + text: "\\cyrchar\\CYRH", + commandspacer: true +}, + "Ц": { + text: "\\cyrchar\\CYRC", + commandspacer: true +}, + "Ч": { + text: "\\cyrchar\\CYRCH", + commandspacer: true +}, + "Ш": { + text: "\\cyrchar\\CYRSH", + commandspacer: true +}, + "Щ": { + text: "\\cyrchar\\CYRSHCH", + commandspacer: true +}, + "Ъ": { + text: "\\cyrchar\\CYRHRDSN", + commandspacer: true +}, + "Ы": { + text: "\\cyrchar\\CYRERY", + commandspacer: true +}, + "Ь": { + text: "\\cyrchar\\CYRSFTSN", + commandspacer: true +}, + "Э": { + text: "\\cyrchar\\CYREREV", + commandspacer: true +}, + "Ю": { + text: "\\cyrchar\\CYRYU", + commandspacer: true +}, + "Я": { + text: "\\cyrchar\\CYRYA", + commandspacer: true +}, + "а": { + text: "\\cyrchar\\cyra", + commandspacer: true +}, + "б": { + text: "\\cyrchar\\cyrb", + commandspacer: true +}, + "в": { + text: "\\cyrchar\\cyrv", + commandspacer: true +}, + "г": { + text: "\\cyrchar\\cyrg", + commandspacer: true +}, + "д": { + text: "\\cyrchar\\cyrd", + commandspacer: true +}, + "е": { + text: "\\cyrchar\\cyre", + commandspacer: true +}, + "ж": { + text: "\\cyrchar\\cyrzh", + commandspacer: true +}, + "з": { + text: "\\cyrchar\\cyrz", + commandspacer: true +}, + "и": { + text: "\\cyrchar\\cyri", + commandspacer: true +}, + "й": { + text: "\\cyrchar\\cyrishrt", + commandspacer: true +}, + "к": { + text: "\\cyrchar\\cyrk", + commandspacer: true +}, + "л": { + text: "\\cyrchar\\cyrl", + commandspacer: true +}, + "м": { + text: "\\cyrchar\\cyrm", + commandspacer: true +}, + "н": { + text: "\\cyrchar\\cyrn", + commandspacer: true +}, + "о": { + text: "\\cyrchar\\cyro", + commandspacer: true +}, + "п": { + text: "\\cyrchar\\cyrp", + commandspacer: true +}, + "р": { + text: "\\cyrchar\\cyrr", + commandspacer: true +}, + "с": { + text: "\\cyrchar\\cyrs", + commandspacer: true +}, + "т": { + text: "\\cyrchar\\cyrt", + commandspacer: true +}, + "у": { + text: "\\cyrchar\\cyru", + commandspacer: true +}, + "ф": { + text: "\\cyrchar\\cyrf", + commandspacer: true +}, + "х": { + text: "\\cyrchar\\cyrh", + commandspacer: true +}, + "ц": { + text: "\\cyrchar\\cyrc", + commandspacer: true +}, + "ч": { + text: "\\cyrchar\\cyrch", + commandspacer: true +}, + "ш": { + text: "\\cyrchar\\cyrsh", + commandspacer: true +}, + "щ": { + text: "\\cyrchar\\cyrshch", + commandspacer: true +}, + "ъ": { + text: "\\cyrchar\\cyrhrdsn", + commandspacer: true +}, + "ы": { + text: "\\cyrchar\\cyrery", + commandspacer: true +}, + "ь": { + text: "\\cyrchar\\cyrsftsn", + commandspacer: true +}, + "э": { + text: "\\cyrchar\\cyrerev", + commandspacer: true +}, + "ю": { + text: "\\cyrchar\\cyryu", + commandspacer: true +}, + "я": { + text: "\\cyrchar\\cyrya", + commandspacer: true +}, + "ё": { + text: "\\cyrchar\\cyryo", + commandspacer: true +}, + "ђ": { + text: "\\cyrchar\\cyrdje", + commandspacer: true +}, + "ѓ": { + text: "\\cyrchar{\\'\\cyrg}" +}, + "є": { + text: "\\cyrchar\\cyrie", + commandspacer: true +}, + "ѕ": { + text: "\\cyrchar\\cyrdze", + commandspacer: true +}, + "і": { + text: "\\cyrchar\\cyrii", + commandspacer: true +}, + "ї": { + text: "\\cyrchar\\cyryi", + commandspacer: true +}, + "ј": { + text: "\\cyrchar\\cyrje", + commandspacer: true +}, + "љ": { + text: "\\cyrchar\\cyrlje", + commandspacer: true +}, + "њ": { + text: "\\cyrchar\\cyrnje", + commandspacer: true +}, + "ћ": { + text: "\\cyrchar\\cyrtshe", + commandspacer: true +}, + "ќ": { + text: "\\cyrchar{\\'\\cyrk}" +}, + "ў": { + text: "\\cyrchar\\cyrushrt", + commandspacer: true +}, + "џ": { + text: "\\cyrchar\\cyrdzhe", + commandspacer: true +}, + "Ѡ": { + text: "\\cyrchar\\CYROMEGA", + commandspacer: true +}, + "ѡ": { + text: "\\cyrchar\\cyromega", + commandspacer: true +}, + "Ѣ": { + text: "\\cyrchar\\CYRYAT", + commandspacer: true +}, + "Ѥ": { + text: "\\cyrchar\\CYRIOTE", + commandspacer: true +}, + "ѥ": { + text: "\\cyrchar\\cyriote", + commandspacer: true +}, + "Ѧ": { + text: "\\cyrchar\\CYRLYUS", + commandspacer: true +}, + "ѧ": { + text: "\\cyrchar\\cyrlyus", + commandspacer: true +}, + "Ѩ": { + text: "\\cyrchar\\CYRIOTLYUS", + commandspacer: true +}, + "ѩ": { + text: "\\cyrchar\\cyriotlyus", + commandspacer: true +}, + "Ѫ": { + text: "\\cyrchar\\CYRBYUS", + commandspacer: true +}, + "Ѭ": { + text: "\\cyrchar\\CYRIOTBYUS", + commandspacer: true +}, + "ѭ": { + text: "\\cyrchar\\cyriotbyus", + commandspacer: true +}, + "Ѯ": { + text: "\\cyrchar\\CYRKSI", + commandspacer: true +}, + "ѯ": { + text: "\\cyrchar\\cyrksi", + commandspacer: true +}, + "Ѱ": { + text: "\\cyrchar\\CYRPSI", + commandspacer: true +}, + "ѱ": { + text: "\\cyrchar\\cyrpsi", + commandspacer: true +}, + "Ѳ": { + text: "\\cyrchar\\CYRFITA", + commandspacer: true +}, + "Ѵ": { + text: "\\cyrchar\\CYRIZH", + commandspacer: true +}, + "Ѹ": { + text: "\\cyrchar\\CYRUK", + commandspacer: true +}, + "ѹ": { + text: "\\cyrchar\\cyruk", + commandspacer: true +}, + "Ѻ": { + text: "\\cyrchar\\CYROMEGARND", + commandspacer: true +}, + "ѻ": { + text: "\\cyrchar\\cyromegarnd", + commandspacer: true +}, + "Ѽ": { + text: "\\cyrchar\\CYROMEGATITLO", + commandspacer: true +}, + "ѽ": { + text: "\\cyrchar\\cyromegatitlo", + commandspacer: true +}, + "Ѿ": { + text: "\\cyrchar\\CYROT", + commandspacer: true +}, + "ѿ": { + text: "\\cyrchar\\cyrot", + commandspacer: true +}, + "Ҁ": { + text: "\\cyrchar\\CYRKOPPA", + commandspacer: true +}, + "ҁ": { + text: "\\cyrchar\\cyrkoppa", + commandspacer: true +}, + "҂": { + text: "\\cyrchar\\cyrthousands", + commandspacer: true +}, + "҈": { + text: "\\cyrchar\\cyrhundredthousands", + commandspacer: true +}, + "҉": { + text: "\\cyrchar\\cyrmillions", + commandspacer: true +}, + "Ҍ": { + text: "\\cyrchar\\CYRSEMISFTSN", + commandspacer: true +}, + "ҍ": { + text: "\\cyrchar\\cyrsemisftsn", + commandspacer: true +}, + "Ҏ": { + text: "\\cyrchar\\CYRRTICK", + commandspacer: true +}, + "ҏ": { + text: "\\cyrchar\\cyrrtick", + commandspacer: true +}, + "Ґ": { + text: "\\cyrchar\\CYRGUP", + commandspacer: true +}, + "ґ": { + text: "\\cyrchar\\cyrgup", + commandspacer: true +}, + "Ғ": { + text: "\\cyrchar\\CYRGHCRS", + commandspacer: true +}, + "ғ": { + text: "\\cyrchar\\cyrghcrs", + commandspacer: true +}, + "Ҕ": { + text: "\\cyrchar\\CYRGHK", + commandspacer: true +}, + "ҕ": { + text: "\\cyrchar\\cyrghk", + commandspacer: true +}, + "Җ": { + text: "\\cyrchar\\CYRZHDSC", + commandspacer: true +}, + "җ": { + text: "\\cyrchar\\cyrzhdsc", + commandspacer: true +}, + "Ҙ": { + text: "\\cyrchar\\CYRZDSC", + commandspacer: true +}, + "ҙ": { + text: "\\cyrchar\\cyrzdsc", + commandspacer: true +}, + "Қ": { + text: "\\cyrchar\\CYRKDSC", + commandspacer: true +}, + "қ": { + text: "\\cyrchar\\cyrkdsc", + commandspacer: true +}, + "Ҝ": { + text: "\\cyrchar\\CYRKVCRS", + commandspacer: true +}, + "ҝ": { + text: "\\cyrchar\\cyrkvcrs", + commandspacer: true +}, + "Ҟ": { + text: "\\cyrchar\\CYRKHCRS", + commandspacer: true +}, + "ҟ": { + text: "\\cyrchar\\cyrkhcrs", + commandspacer: true +}, + "Ҡ": { + text: "\\cyrchar\\CYRKBEAK", + commandspacer: true +}, + "ҡ": { + text: "\\cyrchar\\cyrkbeak", + commandspacer: true +}, + "Ң": { + text: "\\cyrchar\\CYRNDSC", + commandspacer: true +}, + "ң": { + text: "\\cyrchar\\cyrndsc", + commandspacer: true +}, + "Ҥ": { + text: "\\cyrchar\\CYRNG", + commandspacer: true +}, + "ҥ": { + text: "\\cyrchar\\cyrng", + commandspacer: true +}, + "Ҧ": { + text: "\\cyrchar\\CYRPHK", + commandspacer: true +}, + "ҧ": { + text: "\\cyrchar\\cyrphk", + commandspacer: true +}, + "Ҩ": { + text: "\\cyrchar\\CYRABHHA", + commandspacer: true +}, + "ҩ": { + text: "\\cyrchar\\cyrabhha", + commandspacer: true +}, + "Ҫ": { + text: "\\cyrchar\\CYRSDSC", + commandspacer: true +}, + "ҫ": { + text: "\\cyrchar\\cyrsdsc", + commandspacer: true +}, + "Ҭ": { + text: "\\cyrchar\\CYRTDSC", + commandspacer: true +}, + "ҭ": { + text: "\\cyrchar\\cyrtdsc", + commandspacer: true +}, + "Ү": { + text: "\\cyrchar\\CYRY", + commandspacer: true +}, + "ү": { + text: "\\cyrchar\\cyry", + commandspacer: true +}, + "Ұ": { + text: "\\cyrchar\\CYRYHCRS", + commandspacer: true +}, + "ұ": { + text: "\\cyrchar\\cyryhcrs", + commandspacer: true +}, + "Ҳ": { + text: "\\cyrchar\\CYRHDSC", + commandspacer: true +}, + "ҳ": { + text: "\\cyrchar\\cyrhdsc", + commandspacer: true +}, + "Ҵ": { + text: "\\cyrchar\\CYRTETSE", + commandspacer: true +}, + "ҵ": { + text: "\\cyrchar\\cyrtetse", + commandspacer: true +}, + "Ҷ": { + text: "\\cyrchar\\CYRCHRDSC", + commandspacer: true +}, + "ҷ": { + text: "\\cyrchar\\cyrchrdsc", + commandspacer: true +}, + "Ҹ": { + text: "\\cyrchar\\CYRCHVCRS", + commandspacer: true +}, + "ҹ": { + text: "\\cyrchar\\cyrchvcrs", + commandspacer: true +}, + "Һ": { + text: "\\cyrchar\\CYRSHHA", + commandspacer: true +}, + "һ": { + text: "\\cyrchar\\cyrshha", + commandspacer: true +}, + "Ҽ": { + text: "\\cyrchar\\CYRABHCH", + commandspacer: true +}, + "ҽ": { + text: "\\cyrchar\\cyrabhch", + commandspacer: true +}, + "Ҿ": { + text: "\\cyrchar\\CYRABHCHDSC", + commandspacer: true +}, + "ҿ": { + text: "\\cyrchar\\cyrabhchdsc", + commandspacer: true +}, + "Ӏ": { + text: "\\cyrchar\\CYRpalochka", + commandspacer: true +}, + "Ӄ": { + text: "\\cyrchar\\CYRKHK", + commandspacer: true +}, + "ӄ": { + text: "\\cyrchar\\cyrkhk", + commandspacer: true +}, + "Ӈ": { + text: "\\cyrchar\\CYRNHK", + commandspacer: true +}, + "ӈ": { + text: "\\cyrchar\\cyrnhk", + commandspacer: true +}, + "Ӌ": { + text: "\\cyrchar\\CYRCHLDSC", + commandspacer: true +}, + "ӌ": { + text: "\\cyrchar\\cyrchldsc", + commandspacer: true +}, + "Ӕ": { + text: "\\cyrchar\\CYRAE", + commandspacer: true +}, + "ӕ": { + text: "\\cyrchar\\cyrae", + commandspacer: true +}, + "Ә": { + text: "\\cyrchar\\CYRSCHWA", + commandspacer: true +}, + "ә": { + text: "\\cyrchar\\cyrschwa", + commandspacer: true +}, + "Ӡ": { + text: "\\cyrchar\\CYRABHDZE", + commandspacer: true +}, + "ӡ": { + text: "\\cyrchar\\cyrabhdze", + commandspacer: true +}, + "Ө": { + text: "\\cyrchar\\CYROTLD", + commandspacer: true +}, + "ө": { + text: "\\cyrchar\\cyrotld", + commandspacer: true +}, + "ࡱ": { + math: "\\\\backslash" +}, + "ᵃ": { + math: "^{a}", + text: "\\textsuperscript{a}" +}, + "ᵇ": { + math: "^{b}", + text: "\\textsuperscript{b}" +}, + "ᵈ": { + math: "^{d}", + text: "\\textsuperscript{d}" +}, + "ᵉ": { + math: "^{e}", + text: "\\textsuperscript{e}" +}, + "ᵍ": { + math: "^{g}", + text: "\\textsuperscript{g}" +}, + "ᵏ": { + math: "^{k}", + text: "\\textsuperscript{k}" +}, + "ᵐ": { + math: "^{m}", + text: "\\textsuperscript{m}" +}, + "ᵒ": { + math: "^{o}", + text: "\\textsuperscript{o}" +}, + "ᵖ": { + math: "^{p}", + text: "\\textsuperscript{p}" +}, + "ᵗ": { + math: "^{t}", + text: "\\textsuperscript{t}" +}, + "ᵘ": { + math: "^{u}", + text: "\\textsuperscript{u}" +}, + "ᵛ": { + math: "^{v}", + text: "\\textsuperscript{v}" +}, + "ᶜ": { + math: "^{c}", + text: "\\textsuperscript{c}" +}, + "ᶠ": { + math: "^{f}", + text: "\\textsuperscript{f}" +}, + "ᶻ": { + math: "^{z}", + text: "\\textsuperscript{z}" +}, + "Ḃ": { + text: "\\.B" +}, + "ḃ": { + text: "\\.b" +}, + "Ḅ": { + text: "\\d{B}" +}, + "ḅ": { + text: "\\d{b}" +}, + "Ḇ": { + text: "\\b{B}" +}, + "ḇ": { + text: "\\b{b}" +}, + "Ḋ": { + text: "\\.D" +}, + "ḋ": { + text: "\\.d" +}, + "Ḍ": { + text: "\\d{D}" +}, + "ḍ": { + text: "\\d{d}" +}, + "Ḏ": { + text: "\\b{D}" +}, + "ḏ": { + text: "\\b{d}" +}, + "Ḑ": { + text: "\\c{D}" +}, + "ḑ": { + text: "\\c{d}" +}, + "Ḝ": { + text: "\\c{\\u{E}}" +}, + "ḝ": { + text: "\\c{\\u{e}}" +}, + "Ḟ": { + text: "\\.F" +}, + "ḟ": { + text: "\\.f" +}, + "Ḡ": { + text: "\\=G" +}, + "ḡ": { + text: "\\=g" +}, + "Ḣ": { + text: "\\.H" +}, + "ḣ": { + text: "\\.h" +}, + "Ḥ": { + text: "\\d{H}" +}, + "ḥ": { + text: "\\d{h}" +}, + "Ḧ": { + text: "\\\"H" +}, + "ḧ": { + text: "\\\"h" +}, + "Ḩ": { + text: "\\c{H}" +}, + "ḩ": { + text: "\\c{h}" +}, + "Ḱ": { + text: "\\'K" +}, + "ḱ": { + text: "\\'k" +}, + "Ḳ": { + text: "\\d{K}" +}, + "ḳ": { + text: "\\d{k}" +}, + "Ḵ": { + text: "\\b{K}" +}, + "ḵ": { + text: "\\b{k}" +}, + "Ḷ": { + text: "\\d{L}" +}, + "ḷ": { + text: "\\d{l}" +}, + "Ḻ": { + text: "\\b{L}" +}, + "ḻ": { + text: "\\b{l}" +}, + "Ḿ": { + text: "\\'M" +}, + "ḿ": { + text: "\\'m" +}, + "Ṁ": { + text: "\\.M" +}, + "ṁ": { + text: "\\.m" +}, + "Ṃ": { + text: "\\d{M}" +}, + "ṃ": { + text: "\\d{m}" +}, + "Ṅ": { + text: "\\.N" +}, + "ṅ": { + text: "\\.n" +}, + "Ṇ": { + text: "\\d{N}" +}, + "ṇ": { + text: "\\d{n}" +}, + "Ṉ": { + text: "\\b{N}" +}, + "ṉ": { + text: "\\b{n}" +}, + "Ṕ": { + text: "\\'P" +}, + "ṕ": { + text: "\\'p" +}, + "Ṗ": { + text: "\\.P" +}, + "ṗ": { + text: "\\.p" +}, + "Ṙ": { + text: "\\.R" +}, + "ṙ": { + text: "\\.r" +}, + "Ṛ": { + text: "\\d{R}" +}, + "ṛ": { + text: "\\d{r}" +}, + "Ṟ": { + text: "\\b{R}" +}, + "ṟ": { + text: "\\b{r}" +}, + "Ṡ": { + text: "\\.S" +}, + "ṡ": { + text: "\\.s" +}, + "Ṣ": { + text: "\\d{S}" +}, + "ṣ": { + text: "\\d{s}" +}, + "Ṫ": { + text: "\\.T" +}, + "ṫ": { + text: "\\.t" +}, + "Ṭ": { + text: "\\d{T}" +}, + "ṭ": { + text: "\\d{t}" +}, + "Ṯ": { + text: "\\b{T}" +}, + "ṯ": { + text: "\\b{t}" +}, + "Ṽ": { + text: "\\~V" +}, + "ṽ": { + text: "\\~v" +}, + "Ṿ": { + text: "\\d{V}" +}, + "ṿ": { + text: "\\d{v}" +}, + "Ẁ": { + text: "\\`W" +}, + "ẁ": { + text: "\\`w" +}, + "Ẃ": { + text: "\\'W" +}, + "ẃ": { + text: "\\'w" +}, + "Ẅ": { + text: "\\\"W" +}, + "ẅ": { + text: "\\\"w" +}, + "Ẇ": { + text: "\\.W" +}, + "ẇ": { + text: "\\.w" +}, + "Ẉ": { + text: "\\d{W}" +}, + "ẉ": { + text: "\\d{w}" +}, + "Ẋ": { + text: "\\.X" +}, + "ẋ": { + text: "\\.x" +}, + "Ẍ": { + text: "\\\"X" +}, + "ẍ": { + text: "\\\"x" +}, + "Ẏ": { + text: "\\.Y" +}, + "ẏ": { + text: "\\.y" +}, + "Ẑ": { + text: "\\^Z" +}, + "ẑ": { + text: "\\^z" +}, + "Ẓ": { + text: "\\d{Z}" +}, + "ẓ": { + text: "\\d{z}" +}, + "Ẕ": { + text: "\\b{Z}" +}, + "ẕ": { + text: "\\b{z}" +}, + "ẖ": { + text: "\\b{h}" +}, + "ẗ": { + text: "\\\"t" +}, + "ẘ": { + text: "\\r{w}" +}, + "ẙ": { + text: "\\r{y}" +}, + "Ạ": { + text: "\\d{A}" +}, + "ạ": { + text: "\\d{a}" +}, + "Ẹ": { + text: "\\d{E}" +}, + "ẹ": { + text: "\\d{e}" +}, + "Ẽ": { + text: "\\~E" +}, + "ẽ": { + text: "\\~e" +}, + "Ị": { + text: "\\d{I}" +}, + "ị": { + text: "\\d{i}" +}, + "Ọ": { + text: "\\d{O}" +}, + "ọ": { + text: "\\d{o}" +}, + "Ụ": { + text: "\\d{U}" +}, + "ụ": { + text: "\\d{u}" +}, + "Ỳ": { + text: "\\`Y" +}, + "ỳ": { + text: "\\`y" +}, + "Ỵ": { + text: "\\d{Y}" +}, + "ỵ": { + text: "\\d{y}" +}, + "Ỹ": { + text: "\\~Y" +}, + "ỹ": { + text: "\\~y" +}, + " ": { + text: " ", + space: true +}, + " ": { + math: "\\quad", + space: true +}, + " ": { + text: "\\hspace{0.6em}", + space: true +}, + " ": { + math: "\\quad", + space: true, + text: "\\hspace{1em}" +}, + " ": { + text: "\\;", + space: true +}, + " ": { + text: "\\hspace{0.25em}", + space: true +}, + " ": { + text: "\\hspace{0.166em}", + space: true +}, + " ": { + text: "\\hphantom{0}", + space: true +}, + " ": { + text: "\\hphantom{,}", + space: true +}, + " ": { + text: "\\,", + space: true +}, + " ": { + math: "\\mkern1mu", + space: true +}, + "​": { + text: "\\mbox", + commandspacer: true, + space: true +}, + "‌": { + text: "{\\aftergroup\\ignorespaces}" +}, + "‐": { + text: "-" +}, + "‑": { + text: "-" +}, + "‒": { + text: "-" +}, + "–": { + text: "\\textendash", + commandspacer: true +}, + "—": { + text: "\\textemdash", + commandspacer: true +}, + "―": { + math: "\\horizbar", + text: "\\rule{1em}{1pt}" +}, + "‖": { + math: "\\Vert" +}, + "‗": { + math: "\\twolowline" +}, + "‘": { + text: "`" +}, + "’": { + text: "'" +}, + "‚": { + text: "," +}, + "‛": { + math: "\\Elzreapos" +}, + "“": { + text: "``" +}, + "”": { + text: "''" +}, + "„": { + text: ",," +}, + "‟": { + text: "\\quotedblbase", + commandspacer: true +}, + "†": { + math: "\\dagger", + text: "\\textdagger", + commandspacer: true, + textpackages: [ + "textcomp" + ] +}, + "‡": { + math: "\\ddagger", + text: "\\textdaggerdbl", + commandspacer: true, + textpackages: [ + "textcomp" + ] +}, + "•": { + math: "\\bullet", + text: "\\textbullet", + commandspacer: true, + textpackages: [ + "textcomp" + ] +}, + "‣": { + text: ">" +}, + "․": { + text: "." +}, + "‥": { + math: "\\enleadertwodots", + text: ".." +}, + "…": { + math: "\\ldots", + text: "\\ldots", + commandspacer: true +}, + "‧": { + text: "-" +}, + " ": { + text: " ", + space: true +}, + "‰": { + text: "\\textperthousand", + commandspacer: true, + textpackages: [ + "textcomp" + ] +}, + "‱": { + text: "\\textpertenthousand", + commandspacer: true, + textpackages: [ + "textcomp" + ] +}, + "′": { + math: "{'}" +}, + "″": { + math: "{''}" +}, + "‴": { + math: "{'''}" +}, + "‵": { + math: "\\backprime" +}, + "‶": { + math: "\\backdprime" +}, + "‷": { + math: "\\backtrprime" +}, + "‸": { + math: "\\caretinsert" +}, + "‹": { + text: "\\guilsinglleft", + commandspacer: true +}, + "›": { + text: "\\guilsinglright", + commandspacer: true +}, + "‼": { + math: "\\Exclam" +}, + "‾": { + text: "-" +}, + "⁃": { + math: "\\hyphenbullet" +}, + "⁄": { + math: "\\fracslash" +}, + "⁇": { + math: "\\Question" +}, + "⁈": { + text: "?!" +}, + "⁉": { + text: "!?" +}, + "⁊": { + text: "7" +}, + "⁐": { + math: "\\closure" +}, + "⁗": { + math: "''''" +}, + " ": { + math: "\\:", + space: true, + text: "\\:" +}, + "⁠": { + text: "\\nolinebreak", + commandspacer: true +}, + "⁰": { + math: "^{0}" +}, + "ⁱ": { + math: "^{i}", + text: "\\textsuperscript{i}" +}, + "⁴": { + math: "^{4}" +}, + "⁵": { + math: "^{5}" +}, + "⁶": { + math: "^{6}" +}, + "⁷": { + math: "^{7}" +}, + "⁸": { + math: "^{8}" +}, + "⁹": { + math: "^{9}" +}, + "⁺": { + math: "^{+}" +}, + "⁻": { + math: "^{-}" +}, + "⁼": { + math: "^{=}" +}, + "⁽": { + math: "^{(}" +}, + "⁾": { + math: "^{)}" +}, + "ⁿ": { + math: "^{n}", + text: "\\textsuperscript{n}" +}, + "₀": { + math: "_{0}" +}, + "₁": { + math: "_{1}" +}, + "₂": { + math: "_{2}" +}, + "₃": { + math: "_{3}" +}, + "₄": { + math: "_{4}" +}, + "₅": { + math: "_{5}" +}, + "₆": { + math: "_{6}" +}, + "₇": { + math: "_{7}" +}, + "₈": { + math: "_{8}" +}, + "₉": { + math: "_{9}" +}, + "₊": { + math: "_{+}" +}, + "₋": { + math: "_{-}" +}, + "₌": { + math: "_{=}" +}, + "₍": { + math: "_{(}" +}, + "₎": { + math: "_{)}" +}, + "ₐ": { + math: "_{a}", + text: "\\textsubscript{a}" +}, + "ₑ": { + math: "_{e}", + text: "\\textsubscript{e}" +}, + "ₒ": { + math: "_{o}", + text: "\\textsubscript{o}" +}, + "ₓ": { + math: "_{x}", + text: "\\textsubscript{x}" +}, + "ₔ": { + text: "\\textsubscript{\\textschwa}", + textpackages: [ + "tipa" + ] +}, + "ₕ": { + math: "_{h}", + text: "\\textsubscript{h}" +}, + "ₖ": { + math: "_{k}", + text: "\\textsubscript{k}" +}, + "ₗ": { + math: "_{l}", + text: "\\textsubscript{l}" +}, + "ₘ": { + math: "_{m}", + text: "\\textsubscript{m}" +}, + "ₙ": { + math: "_{n}", + text: "\\textsubscript{n}" +}, + "ₚ": { + math: "_{p}", + text: "\\textsubscript{p}" +}, + "ₛ": { + math: "_{s}", + text: "\\textsubscript{s}" +}, + "ₜ": { + math: "_{t}", + text: "\\textsubscript{t}" +}, + "₧": { + text: "\\ensuremath{\\Elzpes}" +}, + "€": { + math: "\\euro", + text: "\\texteuro", + commandspacer: true +}, + "⃐": { + math: "\\lvec" +}, + "⃑": { + math: "\\rightharpoonup", + mathpackages: [ + "amsmath", + "amssymb" + ] +}, + "⃒": { + math: "\\vertoverlay" +}, + "⃖": { + math: "\\LVec" +}, + "⃗": { + math: "\\vec" +}, + "⃛": { + math: "\\dddot" +}, + "⃜": { + math: "\\ddddot" +}, + "⃝": { + math: "\\enclosecircle" +}, + "⃞": { + math: "\\enclosesquare" +}, + "⃟": { + math: "\\enclosediamond" +}, + "⃡": { + math: "\\overleftrightarrow" +}, + "⃤": { + math: "\\enclosetriangle" +}, + "⃧": { + math: "\\annuity" +}, + "⃨": { + math: "\\threeunderdot" +}, + "⃩": { + math: "\\widebridgeabove" +}, + "⃬": { + math: "\\underrightharpoondown" +}, + "⃭": { + math: "\\underleftharpoondown" +}, + "⃮": { + math: "\\underleftarrow" +}, + "⃯": { + math: "\\underrightarrow" +}, + "⃰": { + math: "\\asteraccent" +}, + "℀": { + text: "a/c" +}, + "℁": { + text: "a/s" +}, + "ℂ": { + math: "\\mathbb{C}" +}, + "℃": { + text: "\\textcelsius", + commandspacer: true +}, + "℅": { + text: "c/o" +}, + "℆": { + text: "c/u" +}, + "ℇ": { + math: "\\Euler" +}, + "℉": { + text: "F" +}, + "ℊ": { + math: "\\mathscr{g}" +}, + "ℋ": { + math: "\\mathscr{H}" +}, + "ℌ": { + math: "\\mathfrak{H}" +}, + "ℍ": { + math: "\\mathbb{H}" +}, + "ℎ": { + math: "\\Planckconst" +}, + "ℏ": { + math: "\\hslash" +}, + "ℐ": { + math: "\\mathscr{I}" +}, + "ℑ": { + math: "\\mathfrak{I}" +}, + "ℒ": { + math: "\\mathscr{L}" +}, + "ℓ": { + math: "\\mathscr{l}" +}, + "ℕ": { + math: "\\mathbb{N}" +}, + "№": { + text: "\\cyrchar\\textnumero", + commandspacer: true +}, + "℗": { + text: "\\textcircledP", + commandspacer: true +}, + "℘": { + math: "\\wp" +}, + "ℙ": { + math: "\\mathbb{P}" +}, + "ℚ": { + math: "\\mathbb{Q}" +}, + "ℛ": { + math: "\\mathscr{R}" +}, + "ℜ": { + math: "\\mathfrak{R}" +}, + "ℝ": { + math: "\\mathbb{R}" +}, + "℞": { + math: "\\Elzxrat" +}, + "℠": { + text: "\\textservicemark", + commandspacer: true +}, + "℡": { + text: "TEL" +}, + "™": { + text: "\\texttrademark", + commandspacer: true, + textpackages: [ + "textcomp" + ] +}, + "ℤ": { + math: "\\mathbb{Z}" +}, + "Ω": { + math: "\\Omega" +}, + "℧": { + math: "\\mho" +}, + "ℨ": { + math: "\\mathfrak{Z}" +}, + "℩": { + text: "\\textriota", + commandspacer: true +}, + "K": { + text: "K" +}, + "Å": { + math: "\\Angstroem", + text: "\\AA", + commandspacer: true +}, + "ℬ": { + math: "\\mathscr{B}" +}, + "ℭ": { + math: "\\mathfrak{C}" +}, + "℮": { + text: "\\textestimated", + commandspacer: true +}, + "ℯ": { + math: "\\mathscr{e}" +}, + "ℰ": { + math: "\\mathscr{E}" +}, + "ℱ": { + math: "\\mathscr{F}" +}, + "Ⅎ": { + math: "\\Finv" +}, + "ℳ": { + math: "\\mathscr{M}" +}, + "ℴ": { + math: "\\mathscr{o}" +}, + "ℵ": { + math: "\\aleph" +}, + "ℶ": { + math: "\\beth" +}, + "ℷ": { + math: "\\gimel" +}, + "ℸ": { + math: "\\daleth" +}, + "ℼ": { + math: "\\mathbb{\\pi}" +}, + "ℽ": { + math: "\\mathbb{\\gamma}" +}, + "ℾ": { + math: "\\mathbb{\\Gamma}" +}, + "ℿ": { + math: "\\mathbb{\\Pi}" +}, + "⅀": { + math: "\\mathbb{\\Sigma}" +}, + "⅁": { + math: "\\Game" +}, + "⅂": { + math: "\\sansLturned" +}, + "⅃": { + math: "\\sansLmirrored" +}, + "⅄": { + math: "\\Yup" +}, + "ⅅ": { + math: "\\CapitalDifferentialD" +}, + "ⅆ": { + math: "\\DifferentialD" +}, + "ⅇ": { + math: "\\ExponetialE" +}, + "ⅈ": { + math: "\\ComplexI" +}, + "ⅉ": { + math: "\\ComplexJ" +}, + "⅊": { + math: "\\PropertyLine" +}, + "⅋": { + math: "\\invamp" +}, + "⅐": { + math: "\\frac{1}{7}" +}, + "⅑": { + math: "\\frac{1}{9}" +}, + "⅒": { + math: "\\frac{1}{10}" +}, + "⅓": { + math: "\\frac{1}{3}" +}, + "⅔": { + math: "\\frac{2}{3}" +}, + "⅕": { + math: "\\frac{1}{5}" +}, + "⅖": { + math: "\\frac{2}{5}" +}, + "⅗": { + math: "\\frac{3}{5}" +}, + "⅘": { + math: "\\frac{4}{5}" +}, + "⅙": { + math: "\\frac{1}{6}" +}, + "⅚": { + math: "\\frac{5}{6}" +}, + "⅛": { + math: "\\frac{1}{8}" +}, + "⅜": { + math: "\\frac{3}{8}" +}, + "⅝": { + math: "\\frac{5}{8}" +}, + "⅞": { + math: "\\frac{7}{8}" +}, + "⅟": { + math: "\\frac{1}" +}, + "Ⅰ": { + text: "I" +}, + "Ⅱ": { + text: "II" +}, + "Ⅲ": { + text: "III" +}, + "Ⅳ": { + text: "IV" +}, + "Ⅴ": { + text: "V" +}, + "Ⅵ": { + text: "VI" +}, + "Ⅶ": { + text: "VII" +}, + "Ⅷ": { + text: "VIII" +}, + "Ⅸ": { + text: "IX" +}, + "Ⅹ": { + text: "X" +}, + "Ⅺ": { + text: "XI" +}, + "Ⅻ": { + text: "XII" +}, + "Ⅼ": { + text: "L" +}, + "Ⅽ": { + text: "C" +}, + "Ⅾ": { + text: "D" +}, + "Ⅿ": { + text: "M" +}, + "ⅰ": { + text: "i" +}, + "ⅱ": { + text: "ii" +}, + "ⅲ": { + text: "iii" +}, + "ⅳ": { + text: "iv" +}, + "ⅴ": { + text: "v" +}, + "ⅵ": { + text: "vi" +}, + "ⅶ": { + text: "vii" +}, + "ⅷ": { + text: "viii" +}, + "ⅸ": { + text: "ix" +}, + "ⅹ": { + text: "x" +}, + "ⅺ": { + text: "xi" +}, + "ⅻ": { + text: "xii" +}, + "ⅼ": { + text: "l" +}, + "ⅽ": { + text: "c" +}, + "ⅾ": { + text: "d" +}, + "ⅿ": { + text: "m" +}, + "↉": { + math: "\\frac{0}{3}" +}, + "←": { + math: "\\leftarrow" +}, + "↑": { + math: "\\uparrow" +}, + "→": { + math: "\\rightarrow", + text: "\\textrightarrow", + commandspacer: true, + textpackages: [ + "textcomp" + ] +}, + "↓": { + math: "\\downarrow" +}, + "↔": { + math: "\\leftrightarrow" +}, + "↕": { + math: "\\updownarrow" +}, + "↖": { + math: "\\nwarrow" +}, + "↗": { + math: "\\nearrow" +}, + "↘": { + math: "\\searrow" +}, + "↙": { + math: "\\swarrow" +}, + "↚": { + math: "\\nleftarrow" +}, + "↛": { + math: "\\nrightarrow" +}, + "↜": { + math: "\\arrowwaveleft" +}, + "↝": { + math: "\\arrowwaveright" +}, + "↞": { + math: "\\twoheadleftarrow" +}, + "↟": { + math: "\\twoheaduparrow" +}, + "↠": { + math: "\\twoheadrightarrow" +}, + "↡": { + math: "\\twoheaddownarrow" +}, + "↢": { + math: "\\leftarrowtail" +}, + "↣": { + math: "\\rightarrowtail" +}, + "↤": { + math: "\\mapsfrom" +}, + "↥": { + math: "\\MapsUp" +}, + "↦": { + math: "\\mapsto" +}, + "↧": { + math: "\\MapsDown" +}, + "↨": { + math: "\\updownarrowbar" +}, + "↩": { + math: "\\hookleftarrow" +}, + "↪": { + math: "\\hookrightarrow" +}, + "↫": { + math: "\\looparrowleft" +}, + "↬": { + math: "\\looparrowright" +}, + "↭": { + math: "\\leftrightsquigarrow" +}, + "↮": { + math: "\\nleftrightarrow" +}, + "↯": { + math: "\\lightning" +}, + "↰": { + math: "\\Lsh" +}, + "↱": { + math: "\\Rsh" +}, + "↲": { + math: "\\dlsh" +}, + "↳": { + text: "\\reflectbox{\\carriagereturn}", + textpackages: [ + "graphics", + "unicode-math" + ] +}, + "↴": { + math: "\\linefeed" +}, + "↵": { + math: "\\carriagereturn" +}, + "↶": { + math: "\\curvearrowleft" +}, + "↷": { + math: "\\curvearrowright" +}, + "↸": { + math: "\\barovernorthwestarrow" +}, + "↹": { + math: "\\barleftarrowrightarrowba" +}, + "↺": { + math: "\\circlearrowleft" +}, + "↻": { + math: "\\circlearrowright" +}, + "↼": { + math: "\\leftharpoonup" +}, + "↽": { + math: "\\leftharpoondown" +}, + "↾": { + math: "\\upharpoonright" +}, + "↿": { + math: "\\upharpoonleft" +}, + "⇀": { + math: "\\rightharpoonup", + mathpackages: [ + "amsmath", + "amssymb" + ] +}, + "⇁": { + math: "\\rightharpoondown" +}, + "⇂": { + math: "\\downharpoonright" +}, + "⇃": { + math: "\\downharpoonleft" +}, + "⇄": { + math: "\\rightleftarrows" +}, + "⇅": { + math: "\\dblarrowupdown" +}, + "⇆": { + math: "\\leftrightarrows" +}, + "⇇": { + math: "\\leftleftarrows" +}, + "⇈": { + math: "\\upuparrows" +}, + "⇉": { + math: "\\rightrightarrows" +}, + "⇊": { + math: "\\downdownarrows" +}, + "⇋": { + math: "\\leftrightharpoons" +}, + "⇌": { + math: "\\rightleftharpoons" +}, + "⇍": { + math: "\\nLeftarrow" +}, + "⇎": { + math: "\\nLeftrightarrow" +}, + "⇏": { + math: "\\nRightarrow" +}, + "⇐": { + math: "\\Leftarrow" +}, + "⇑": { + math: "\\Uparrow" +}, + "⇒": { + math: "\\Rightarrow" +}, + "⇓": { + math: "\\Downarrow" +}, + "⇔": { + math: "\\Leftrightarrow" +}, + "⇕": { + math: "\\Updownarrow" +}, + "⇖": { + math: "\\Nwarrow" +}, + "⇗": { + math: "\\Nearrow" +}, + "⇘": { + math: "\\Searrow" +}, + "⇙": { + math: "\\Swarrow" +}, + "⇚": { + math: "\\Lleftarrow" +}, + "⇛": { + math: "\\Rrightarrow" +}, + "⇜": { + math: "\\leftsquigarrow" +}, + "⇝": { + math: "\\rightsquigarrow" +}, + "⇞": { + math: "\\nHuparrow" +}, + "⇟": { + math: "\\nHdownarrow" +}, + "⇠": { + math: "\\dashleftarrow" +}, + "⇡": { + math: "\\updasharrow" +}, + "⇢": { + math: "\\dashrightarrow" +}, + "⇣": { + math: "\\downdasharrow" +}, + "⇤": { + math: "\\LeftArrowBar" +}, + "⇥": { + math: "\\RightArrowBar" +}, + "⇦": { + math: "\\leftwhitearrow" +}, + "⇧": { + math: "\\upwhitearrow" +}, + "⇨": { + math: "\\rightwhitearrow" +}, + "⇩": { + math: "\\downwhitearrow" +}, + "⇪": { + math: "\\whitearrowupfrombar" +}, + "⇴": { + math: "\\circleonrightarrow" +}, + "⇵": { + math: "\\DownArrowUpArrow" +}, + "⇶": { + math: "\\rightthreearrows" +}, + "⇷": { + math: "\\nvleftarrow" +}, + "⇸": { + math: "\\pfun" +}, + "⇹": { + math: "\\nvleftrightarrow" +}, + "⇺": { + math: "\\nVleftarrow" +}, + "⇻": { + math: "\\ffun" +}, + "⇼": { + math: "\\nVleftrightarrow" +}, + "⇽": { + math: "\\leftarrowtriangle" +}, + "⇾": { + math: "\\rightarrowtriangle" +}, + "⇿": { + math: "\\leftrightarrowtriangle" +}, + "∀": { + math: "\\forall" +}, + "∁": { + math: "\\complement" +}, + "∂": { + math: "\\partial" +}, + "∃": { + math: "\\exists" +}, + "∄": { + math: "\\nexists" +}, + "∅": { + math: "\\varnothing" +}, + "∆": { + math: "\\increment" +}, + "∇": { + math: "\\nabla" +}, + "∈": { + math: "\\in" +}, + "∉": { + math: "\\not\\in" +}, + "∊": { + math: "\\smallin" +}, + "∋": { + math: "\\ni" +}, + "∌": { + math: "\\not\\ni" +}, + "∍": { + math: "\\smallni" +}, + "∎": { + math: "\\QED" +}, + "∏": { + math: "\\prod" +}, + "∐": { + math: "\\coprod" +}, + "∑": { + math: "\\sum" +}, + "−": { + math: "-", + text: "-" +}, + "∓": { + math: "\\mp" +}, + "∔": { + math: "\\dotplus" +}, + "∕": { + text: "/" +}, + "∖": { + math: "\\setminus" +}, + "∗": { + math: "{_\\ast}" +}, + "∘": { + math: "\\circ" +}, + "∙": { + math: "\\bullet" +}, + "√": { + math: "\\surd" +}, + "∛": { + math: "\\sqrt[3]" +}, + "∜": { + math: "\\sqrt[4]" +}, + "∝": { + math: "\\propto" +}, + "∞": { + math: "\\infty" +}, + "∟": { + math: "\\rightangle" +}, + "∠": { + math: "\\angle" +}, + "∡": { + math: "\\measuredangle" +}, + "∢": { + math: "\\sphericalangle" +}, + "∣": { + math: "\\mid" +}, + "∤": { + math: "\\nmid" +}, + "∥": { + math: "\\parallel" +}, + "∦": { + math: "\\nparallel" +}, + "∧": { + math: "\\wedge" +}, + "∨": { + math: "\\vee" +}, + "∩": { + math: "\\cap" +}, + "∪": { + math: "\\cup" +}, + "∫": { + math: "\\int" +}, + "∬": { + math: "{\\int\\!\\int}" +}, + "∭": { + math: "{\\int\\!\\int\\!\\int}" +}, + "∮": { + math: "\\oint" +}, + "∯": { + math: "\\surfintegral" +}, + "∰": { + math: "\\volintegral" +}, + "∱": { + math: "\\clwintegral" +}, + "∲": { + math: "\\lcirclerightint", + mathpackages: [ + "MnSymbol" + ] +}, + "∳": { + math: "\\rcirclerightint", + mathpackages: [ + "MnSymbol" + ] +}, + "∴": { + math: "\\therefore" +}, + "∵": { + math: "\\because" +}, + "∶": { + math: ":" +}, + "∷": { + math: "\\Colon" +}, + "∸": { + math: "\\dotdiv", + mathpackages: [ + "mathabx" + ] +}, + "∹": { + math: "\\eqcolon" +}, + "∺": { + math: "\\mathbin{{:}\\!\\!{-}\\!\\!{:}}" +}, + "∻": { + math: "\\homothetic" +}, + "∼": { + math: "\\sim" +}, + "∽": { + math: "\\backsim" +}, + "∾": { + math: "\\lazysinv" +}, + "∿": { + math: "\\AC" +}, + "≀": { + math: "\\wr" +}, + "≁": { + math: "\\not\\sim" +}, + "≂": { + math: "\\texteqsim", + mathpackages: [ + "xecjk" + ] +}, + "≂̸": { + math: "\\NotEqualTilde" +}, + "≃": { + math: "\\simeq" +}, + "≄": { + math: "\\not\\simeq" +}, + "≅": { + math: "\\cong" +}, + "≆": { + math: "\\approxnotequal" +}, + "≇": { + math: "\\not\\cong" +}, + "≈": { + math: "\\approx" +}, + "≉": { + math: "\\not\\approx" +}, + "≊": { + math: "\\approxeq" +}, + "≋": { + math: "\\tildetrpl" +}, + "≋̸": { + math: "\\not\\apid" +}, + "≌": { + math: "\\allequal" +}, + "≍": { + math: "\\asymp" +}, + "≎": { + math: "\\Bumpeq" +}, + "≎̸": { + math: "\\NotHumpDownHump" +}, + "≏": { + math: "\\bumpeq" +}, + "≏̸": { + math: "\\NotHumpEqual" +}, + "≐": { + math: "\\doteq" +}, + "≐̸": { + math: "\\not\\doteq" +}, + "≑": { + math: "\\doteqdot" +}, + "≒": { + math: "\\fallingdotseq" +}, + "≓": { + math: "\\risingdotseq" +}, + "≔": { + math: "\\coloneq", + text: ":=" +}, + "≕": { + math: "=:" +}, + "≖": { + math: "\\eqcirc" +}, + "≗": { + math: "\\circeq" +}, + "≘": { + math: "\\arceq" +}, + "≙": { + math: "\\estimates" +}, + "≛": { + math: "\\starequal" +}, + "≜": { + math: "\\triangleq" +}, + "≝": { + math: "\\eqdef" +}, + "≞": { + math: "\\measeq" +}, + "≠": { + math: "\\neq" +}, + "≡": { + math: "\\equiv" +}, + "≢": { + math: "\\not\\equiv" +}, + "≣": { + math: "\\Equiv" +}, + "≤": { + math: "\\leq" +}, + "≥": { + math: "\\geq" +}, + "≦": { + math: "\\leqq" +}, + "≧": { + math: "\\geqq" +}, + "≨": { + math: "\\lneqq" +}, + "≨︀": { + math: "\\lvertneqq" +}, + "≩": { + math: "\\gneqq" +}, + "≩︀": { + math: "\\gvertneqq" +}, + "≪": { + math: "\\ll" +}, + "≪̸": { + math: "\\NotLessLess" +}, + "≫": { + math: "\\gg" +}, + "≫̸": { + math: "\\NotGreaterGreater" +}, + "≬": { + math: "\\between" +}, + "≭": { + math: "{\\not\\kern-0.3em\\times}" +}, + "≮": { + math: "\\not<" +}, + "≯": { + math: "\\not>" +}, + "≰": { + math: "\\not\\leq" +}, + "≱": { + math: "\\not\\geq" +}, + "≲": { + math: "\\lessequivlnt" +}, + "≳": { + math: "\\greaterequivlnt" +}, + "≶": { + math: "\\lessgtr" +}, + "≷": { + math: "\\gtrless" +}, + "≸": { + math: "\\notlessgreater" +}, + "≹": { + math: "\\notgreaterless" +}, + "≺": { + math: "\\prec" +}, + "≻": { + math: "\\succ" +}, + "≼": { + math: "\\preccurlyeq" +}, + "≽": { + math: "\\succcurlyeq" +}, + "≾": { + math: "\\precapprox" +}, + "≾̸": { + math: "\\NotPrecedesTilde" +}, + "≿": { + math: "\\succapprox" +}, + "≿̸": { + math: "\\NotSucceedsTilde" +}, + "⊀": { + math: "\\not\\prec" +}, + "⊁": { + math: "\\not\\succ" +}, + "⊂": { + math: "\\subset" +}, + "⊃": { + math: "\\supset" +}, + "⊄": { + math: "\\not\\subset" +}, + "⊅": { + math: "\\not\\supset" +}, + "⊆": { + math: "\\subseteq" +}, + "⊇": { + math: "\\supseteq" +}, + "⊈": { + math: "\\not\\subseteq" +}, + "⊉": { + math: "\\not\\supseteq" +}, + "⊊": { + math: "\\subsetneq" +}, + "⊊︀": { + math: "\\varsubsetneqq" +}, + "⊋": { + math: "\\supsetneq" +}, + "⊋︀": { + math: "\\varsupsetneq" +}, + "⊌": { + math: "\\cupleftarrow" +}, + "⊍": { + math: "\\cupdot" +}, + "⊎": { + math: "\\uplus" +}, + "⊏": { + math: "\\sqsubset" +}, + "⊏̸": { + math: "\\NotSquareSubset" +}, + "⊐": { + math: "\\sqsupset" +}, + "⊐̸": { + math: "\\NotSquareSuperset" +}, + "⊑": { + math: "\\sqsubseteq" +}, + "⊒": { + math: "\\sqsupseteq" +}, + "⊓": { + math: "\\sqcap" +}, + "⊔": { + math: "\\sqcup" +}, + "⊕": { + math: "\\oplus" +}, + "⊖": { + math: "\\ominus" +}, + "⊗": { + math: "\\otimes" +}, + "⊘": { + math: "\\oslash" +}, + "⊙": { + math: "\\odot" +}, + "⊚": { + math: "\\circledcirc" +}, + "⊛": { + math: "\\circledast" +}, + "⊜": { + math: "\\circledequal" +}, + "⊝": { + math: "\\circleddash" +}, + "⊞": { + math: "\\boxplus" +}, + "⊟": { + math: "\\boxminus" +}, + "⊠": { + math: "\\boxtimes" +}, + "⊡": { + math: "\\boxdot" +}, + "⊢": { + math: "\\vdash" +}, + "⊣": { + math: "\\dashv" +}, + "⊤": { + math: "\\top" +}, + "⊥": { + math: "\\perp" +}, + "⊦": { + math: "\\assert" +}, + "⊧": { + math: "\\truestate" +}, + "⊨": { + math: "\\forcesextra" +}, + "⊩": { + math: "\\Vdash" +}, + "⊪": { + math: "\\Vvdash" +}, + "⊫": { + math: "\\VDash" +}, + "⊬": { + math: "\\nvdash" +}, + "⊭": { + math: "\\nvDash" +}, + "⊮": { + math: "\\nVdash" +}, + "⊯": { + math: "\\nVDash" +}, + "⊰": { + math: "\\prurel" +}, + "⊱": { + math: "\\scurel" +}, + "⊲": { + math: "\\vartriangleleft" +}, + "⊳": { + math: "\\vartriangleright" +}, + "⊴": { + math: "\\trianglelefteq" +}, + "⊵": { + math: "\\trianglerighteq" +}, + "⊶": { + math: "\\original" +}, + "⊷": { + math: "\\image" +}, + "⊸": { + math: "\\multimap" +}, + "⊹": { + math: "\\hermitconjmatrix" +}, + "⊺": { + math: "\\intercal" +}, + "⊻": { + math: "\\veebar" +}, + "⊼": { + math: "\\barwedge" +}, + "⊽": { + math: "\\barvee" +}, + "⊾": { + math: "\\rightanglearc" +}, + "⊿": { + math: "\\varlrtriangle" +}, + "⋂": { + math: "\\bigcap" +}, + "⋃": { + math: "\\bigcup" +}, + "⋄": { + math: "\\diamond" +}, + "⋅": { + math: "\\cdot" +}, + "⋆": { + math: "\\star" +}, + "⋇": { + math: "\\divideontimes" +}, + "⋈": { + math: "\\bowtie" +}, + "⋉": { + math: "\\ltimes" +}, + "⋊": { + math: "\\rtimes" +}, + "⋋": { + math: "\\leftthreetimes" +}, + "⋌": { + math: "\\rightthreetimes" +}, + "⋍": { + math: "\\backsimeq" +}, + "⋎": { + math: "\\curlyvee" +}, + "⋏": { + math: "\\curlywedge" +}, + "⋐": { + math: "\\Subset" +}, + "⋑": { + math: "\\Supset" +}, + "⋒": { + math: "\\Cap" +}, + "⋓": { + math: "\\Cup" +}, + "⋔": { + math: "\\pitchfork" +}, + "⋕": { + math: "\\hash" +}, + "⋖": { + math: "\\lessdot" +}, + "⋗": { + math: "\\gtrdot" +}, + "⋘": { + math: "\\verymuchless" +}, + "⋙": { + math: "\\verymuchgreater" +}, + "⋚": { + math: "\\lesseqgtr" +}, + "⋛": { + math: "\\gtreqless" +}, + "⋜": { + math: "\\eqless" +}, + "⋝": { + math: "\\eqgtr" +}, + "⋞": { + math: "\\curlyeqprec" +}, + "⋟": { + math: "\\curlyeqsucc" +}, + "⋠": { + math: "\\npreceq" +}, + "⋡": { + math: "\\nsucceq" +}, + "⋢": { + math: "\\not\\sqsubseteq" +}, + "⋣": { + math: "\\not\\sqsupseteq" +}, + "⋤": { + math: "\\sqsubsetneq" +}, + "⋥": { + math: "\\Elzsqspne" +}, + "⋦": { + math: "\\lnsim" +}, + "⋧": { + math: "\\gnsim" +}, + "⋨": { + math: "\\precedesnotsimilar" +}, + "⋩": { + math: "\\succnsim" +}, + "⋪": { + math: "\\ntriangleleft" +}, + "⋫": { + math: "\\ntriangleright" +}, + "⋬": { + math: "\\ntrianglelefteq" +}, + "⋭": { + math: "\\ntrianglerighteq" +}, + "⋮": { + math: "\\vdots" +}, + "⋯": { + math: "\\cdots" +}, + "⋰": { + math: "\\upslopeellipsis" +}, + "⋱": { + math: "\\downslopeellipsis" +}, + "⋲": { + math: "\\disin" +}, + "⋳": { + math: "\\varisins" +}, + "⋴": { + math: "\\isins" +}, + "⋵": { + math: "\\isindot" +}, + "⋶": { + math: "\\barin" +}, + "⋷": { + math: "\\isinobar" +}, + "⋸": { + math: "\\isinvb" +}, + "⋹": { + math: "\\isinE" +}, + "⋺": { + math: "\\nisd" +}, + "⋻": { + math: "\\varnis" +}, + "⋼": { + math: "\\nis" +}, + "⋽": { + math: "\\varniobar" +}, + "⋾": { + math: "\\niobar" +}, + "⋿": { + math: "\\bagmember" +}, + "⌀": { + math: "\\diameter" +}, + "⌂": { + math: "\\house" +}, + "⌅": { + math: "\\varbarwedge", + text: "\\barwedge", + commandspacer: true +}, + "⌆": { + math: "\\perspcorrespond" +}, + "⌈": { + math: "\\lceil" +}, + "⌉": { + math: "\\rceil" +}, + "⌊": { + math: "\\lfloor" +}, + "⌋": { + math: "\\rfloor" +}, + "⌐": { + math: "\\invneg" +}, + "⌑": { + math: "\\wasylozenge" +}, + "⌒": { + math: "\\profline" +}, + "⌓": { + math: "\\profsurf" +}, + "⌕": { + math: "\\recorder" +}, + "⌖": { + math: "{\\mathchar\"2208}" +}, + "⌗": { + math: "\\viewdata" +}, + "⌙": { + math: "\\turnednot" +}, + "⌜": { + math: "\\ulcorner" +}, + "⌝": { + math: "\\urcorner" +}, + "⌞": { + math: "\\llcorner" +}, + "⌟": { + math: "\\lrcorner" +}, + "⌠": { + math: "\\inttop" +}, + "⌡": { + math: "\\intbottom" +}, + "⌢": { + math: "\\frown" +}, + "⌣": { + math: "\\smile" +}, + "〈": { + math: "\\langle" +}, + "〉": { + math: "\\rangle" +}, + "⌬": { + math: "\\varhexagonlrbonds" +}, + "⌲": { + math: "\\conictaper" +}, + "⌶": { + math: "\\topbot" +}, + "⌹": { + math: "\\APLinv" +}, + "⌿": { + math: "\\notslash" +}, + "⍀": { + math: "\\notbackslash" +}, + "⍇": { + math: "\\APLleftarrowbox" +}, + "⍈": { + math: "\\APLrightarrowbox" +}, + "⍉": { + math: "\\invdiameter" +}, + "⍐": { + math: "\\APLuparrowbox" +}, + "⍓": { + math: "\\APLboxupcaret" +}, + "⍗": { + math: "\\APLdownarrowbox" +}, + "⍝": { + math: "\\APLcomment" +}, + "⍞": { + math: "\\APLinput" +}, + "⍟": { + math: "\\APLlog" +}, + "⍰": { + math: "\\APLboxquestion" +}, + "⍼": { + math: "\\rangledownzigzagarrow" +}, + "⎔": { + math: "\\hexagon" +}, + "⎛": { + math: "\\lparenuend" +}, + "⎜": { + math: "\\lparenextender" +}, + "⎝": { + math: "\\lparenlend" +}, + "⎞": { + math: "\\rparenuend" +}, + "⎟": { + math: "\\rparenextender" +}, + "⎠": { + math: "\\rparenlend" +}, + "⎡": { + math: "\\lbrackuend" +}, + "⎢": { + math: "\\lbrackextender" +}, + "⎣": { + math: "\\Elzdlcorn" +}, + "⎤": { + math: "\\rbrackuend" +}, + "⎥": { + math: "\\rbrackextender" +}, + "⎦": { + math: "\\rbracklend" +}, + "⎧": { + math: "\\lbraceuend" +}, + "⎨": { + math: "\\lbracemid" +}, + "⎩": { + math: "\\lbracelend" +}, + "⎪": { + math: "\\vbraceextender" +}, + "⎫": { + math: "\\rbraceuend" +}, + "⎬": { + math: "\\rbracemid" +}, + "⎭": { + math: "\\rbracelend" +}, + "⎮": { + math: "\\intextender" +}, + "⎯": { + math: "\\harrowextender" +}, + "⎰": { + math: "\\lmoustache" +}, + "⎱": { + math: "\\rmoustache" +}, + "⎲": { + math: "\\sumtop" +}, + "⎳": { + math: "\\sumbottom" +}, + "⎴": { + math: "\\overbracket" +}, + "⎵": { + math: "\\underbracket" +}, + "⎶": { + math: "\\bbrktbrk" +}, + "⎷": { + math: "\\sqrtbottom" +}, + "⎸": { + math: "\\lvboxline" +}, + "⎹": { + math: "\\rvboxline" +}, + "⏎": { + math: "\\varcarriagereturn" +}, + "⏜": { + math: "\\overparen" +}, + "⏝": { + math: "\\underparen" +}, + "⏞": { + math: "\\overbrace" +}, + "⏟": { + math: "\\underbrace" +}, + "⏠": { + math: "\\obrbrak" +}, + "⏡": { + math: "\\ubrbrak" +}, + "⏢": { + math: "\\trapezium" +}, + "⏣": { + math: "\\benzenr" +}, + "⏤": { + math: "\\strns" +}, + "⏥": { + math: "\\fltns" +}, + "⏦": { + math: "\\accurrent" +}, + "⏧": { + math: "\\elinters" +}, + "␀": { + text: "NUL" +}, + "␁": { + text: "SOH" +}, + "␂": { + text: "STX" +}, + "␃": { + text: "ETX" +}, + "␄": { + text: "EOT" +}, + "␅": { + text: "ENQ" +}, + "␆": { + text: "ACK" +}, + "␇": { + text: "BEL" +}, + "␈": { + text: "BS" +}, + "␉": { + text: "HT" +}, + "␊": { + text: "LF" +}, + "␋": { + text: "VT" +}, + "␌": { + text: "FF" +}, + "␍": { + text: "CR" +}, + "␎": { + text: "SO" +}, + "␏": { + text: "SI" +}, + "␐": { + text: "DLE" +}, + "␑": { + text: "DC1" +}, + "␒": { + text: "DC2" +}, + "␓": { + text: "DC3" +}, + "␔": { + text: "DC4" +}, + "␕": { + text: "NAK" +}, + "␖": { + text: "SYN" +}, + "␗": { + text: "ETB" +}, + "␘": { + text: "CAN" +}, + "␙": { + text: "EM" +}, + "␚": { + text: "SUB" +}, + "␛": { + text: "ESC" +}, + "␜": { + text: "FS" +}, + "␝": { + text: "GS" +}, + "␞": { + text: "RS" +}, + "␟": { + text: "US" +}, + "␠": { + text: "SP" +}, + "␡": { + text: "DEL" +}, + "␣": { + text: "\\textvisiblespace", + commandspacer: true +}, + "␤": { + text: "NL" +}, + "␥": { + text: "///" +}, + "␦": { + text: "?" +}, + "①": { + text: "\\ding{172}" +}, + "②": { + text: "\\ding{173}" +}, + "③": { + text: "\\ding{174}" +}, + "④": { + text: "\\ding{175}" +}, + "⑤": { + text: "\\ding{176}" +}, + "⑥": { + text: "\\ding{177}" +}, + "⑦": { + text: "\\ding{178}" +}, + "⑧": { + text: "\\ding{179}" +}, + "⑨": { + text: "\\ding{180}" +}, + "⑩": { + text: "\\ding{181}" +}, + "⑪": { + text: "(11)" +}, + "⑫": { + text: "(12)" +}, + "⑬": { + text: "(13)" +}, + "⑭": { + text: "(14)" +}, + "⑮": { + text: "(15)" +}, + "⑯": { + text: "(16)" +}, + "⑰": { + text: "(17)" +}, + "⑱": { + text: "(18)" +}, + "⑲": { + text: "(19)" +}, + "⑳": { + text: "(20)" +}, + "⑴": { + text: "(1)" +}, + "⑵": { + text: "(2)" +}, + "⑶": { + text: "(3)" +}, + "⑷": { + text: "(4)" +}, + "⑸": { + text: "(5)" +}, + "⑹": { + text: "(6)" +}, + "⑺": { + text: "(7)" +}, + "⑻": { + text: "(8)" +}, + "⑼": { + text: "(9)" +}, + "⑽": { + text: "(10)" +}, + "⑾": { + text: "(11)" +}, + "⑿": { + text: "(12)" +}, + "⒀": { + text: "(13)" +}, + "⒁": { + text: "(14)" +}, + "⒂": { + text: "(15)" +}, + "⒃": { + text: "(16)" +}, + "⒄": { + text: "(17)" +}, + "⒅": { + text: "(18)" +}, + "⒆": { + text: "(19)" +}, + "⒇": { + text: "(20)" +}, + "⒈": { + text: "1." +}, + "⒉": { + text: "2." +}, + "⒊": { + text: "3." +}, + "⒋": { + text: "4." +}, + "⒌": { + text: "5." +}, + "⒍": { + text: "6." +}, + "⒎": { + text: "7." +}, + "⒏": { + text: "8." +}, + "⒐": { + text: "9." +}, + "⒑": { + text: "10." +}, + "⒒": { + text: "11." +}, + "⒓": { + text: "12." +}, + "⒔": { + text: "13." +}, + "⒕": { + text: "14." +}, + "⒖": { + text: "15." +}, + "⒗": { + text: "16." +}, + "⒘": { + text: "17." +}, + "⒙": { + text: "18." +}, + "⒚": { + text: "19." +}, + "⒛": { + text: "20." +}, + "⒜": { + text: "(a)" +}, + "⒝": { + text: "(b)" +}, + "⒞": { + text: "(c)" +}, + "⒟": { + text: "(d)" +}, + "⒠": { + text: "(e)" +}, + "⒡": { + text: "(f)" +}, + "⒢": { + text: "(g)" +}, + "⒣": { + text: "(h)" +}, + "⒤": { + text: "(i)" +}, + "⒥": { + text: "(j)" +}, + "⒦": { + text: "(k)" +}, + "⒧": { + text: "(l)" +}, + "⒨": { + text: "(m)" +}, + "⒩": { + text: "(n)" +}, + "⒪": { + text: "(o)" +}, + "⒫": { + text: "(p)" +}, + "⒬": { + text: "(q)" +}, + "⒭": { + text: "(r)" +}, + "⒮": { + text: "(s)" +}, + "⒯": { + text: "(t)" +}, + "⒰": { + text: "(u)" +}, + "⒱": { + text: "(v)" +}, + "⒲": { + text: "(w)" +}, + "⒳": { + text: "(x)" +}, + "⒴": { + text: "(y)" +}, + "⒵": { + text: "(z)" +}, + "Ⓐ": { + text: "(A)" +}, + "Ⓑ": { + text: "(B)" +}, + "Ⓒ": { + text: "(C)" +}, + "Ⓓ": { + text: "(D)" +}, + "Ⓔ": { + text: "(E)" +}, + "Ⓕ": { + text: "(F)" +}, + "Ⓖ": { + text: "(G)" +}, + "Ⓗ": { + text: "(H)" +}, + "Ⓘ": { + text: "(I)" +}, + "Ⓙ": { + text: "(J)" +}, + "Ⓚ": { + text: "(K)" +}, + "Ⓛ": { + text: "(L)" +}, + "Ⓜ": { + text: "(M)" +}, + "Ⓝ": { + text: "(N)" +}, + "Ⓞ": { + text: "(O)" +}, + "Ⓟ": { + text: "(P)" +}, + "Ⓠ": { + text: "(Q)" +}, + "Ⓡ": { + text: "(R)" +}, + "Ⓢ": { + math: "\\circledS" +}, + "Ⓣ": { + text: "(T)" +}, + "Ⓤ": { + text: "(U)" +}, + "Ⓥ": { + text: "(V)" +}, + "Ⓦ": { + text: "(W)" +}, + "Ⓧ": { + text: "(X)" +}, + "Ⓨ": { + text: "(Y)" +}, + "Ⓩ": { + text: "(Z)" +}, + "ⓐ": { + text: "(a)" +}, + "ⓑ": { + text: "(b)" +}, + "ⓒ": { + text: "(c)" +}, + "ⓓ": { + text: "(d)" +}, + "ⓔ": { + text: "(e)" +}, + "ⓕ": { + text: "(f)" +}, + "ⓖ": { + text: "(g)" +}, + "ⓗ": { + text: "(h)" +}, + "ⓘ": { + text: "(i)" +}, + "ⓙ": { + text: "(j)" +}, + "ⓚ": { + text: "(k)" +}, + "ⓛ": { + text: "(l)" +}, + "ⓜ": { + text: "(m)" +}, + "ⓝ": { + text: "(n)" +}, + "ⓞ": { + text: "(o)" +}, + "ⓟ": { + text: "(p)" +}, + "ⓠ": { + text: "(q)" +}, + "ⓡ": { + text: "(r)" +}, + "ⓢ": { + text: "(s)" +}, + "ⓣ": { + text: "(t)" +}, + "ⓤ": { + text: "(u)" +}, + "ⓥ": { + text: "(v)" +}, + "ⓦ": { + text: "(w)" +}, + "ⓧ": { + text: "(x)" +}, + "ⓨ": { + text: "(y)" +}, + "ⓩ": { + text: "(z)" +}, + "⓪": { + text: "(0)" +}, + "─": { + text: "-" +}, + "━": { + text: "=" +}, + "│": { + text: "|" +}, + "┃": { + text: "|" +}, + "┄": { + text: "-" +}, + "┅": { + text: "=" +}, + "┆": { + math: "\\Elzdshfnc" +}, + "┇": { + text: "|" +}, + "┈": { + text: "-" +}, + "┉": { + text: "=" +}, + "┊": { + text: "|" +}, + "┋": { + text: "|" +}, + "┌": { + text: "+" +}, + "┍": { + text: "+" +}, + "┎": { + text: "+" +}, + "┏": { + text: "+" +}, + "┐": { + text: "+" +}, + "┑": { + text: "+" +}, + "┒": { + text: "+" +}, + "┓": { + text: "+" +}, + "└": { + text: "+" +}, + "┕": { + text: "+" +}, + "┖": { + text: "+" +}, + "┗": { + text: "+" +}, + "┘": { + text: "+" +}, + "┙": { + math: "\\Elzsqfnw" +}, + "┚": { + text: "+" +}, + "┛": { + text: "+" +}, + "├": { + text: "+" +}, + "┝": { + text: "+" +}, + "┞": { + text: "+" +}, + "┟": { + text: "+" +}, + "┠": { + text: "+" +}, + "┡": { + text: "+" +}, + "┢": { + text: "+" +}, + "┣": { + text: "+" +}, + "┤": { + text: "+" +}, + "┥": { + text: "+" +}, + "┦": { + text: "+" +}, + "┧": { + text: "+" +}, + "┨": { + text: "+" +}, + "┩": { + text: "+" +}, + "┪": { + text: "+" +}, + "┫": { + text: "+" +}, + "┬": { + text: "+" +}, + "┭": { + text: "+" +}, + "┮": { + text: "+" +}, + "┯": { + text: "+" +}, + "┰": { + text: "+" +}, + "┱": { + text: "+" +}, + "┲": { + text: "+" +}, + "┳": { + text: "+" +}, + "┴": { + text: "+" +}, + "┵": { + text: "+" +}, + "┶": { + text: "+" +}, + "┷": { + text: "+" +}, + "┸": { + text: "+" +}, + "┹": { + text: "+" +}, + "┺": { + text: "+" +}, + "┻": { + text: "+" +}, + "┼": { + text: "+" +}, + "┽": { + text: "+" +}, + "┾": { + text: "+" +}, + "┿": { + text: "+" +}, + "╀": { + text: "+" +}, + "╁": { + text: "+" +}, + "╂": { + text: "+" +}, + "╃": { + text: "+" +}, + "╄": { + text: "+" +}, + "╅": { + text: "+" +}, + "╆": { + text: "+" +}, + "╇": { + text: "+" +}, + "╈": { + text: "+" +}, + "╉": { + text: "+" +}, + "╊": { + text: "+" +}, + "╋": { + text: "+" +}, + "╌": { + text: "-" +}, + "╍": { + text: "=" +}, + "╎": { + text: "|" +}, + "╏": { + text: "|" +}, + "═": { + text: "=" +}, + "║": { + text: "|" +}, + "╒": { + text: "+" +}, + "╓": { + text: "+" +}, + "╔": { + text: "+" +}, + "╕": { + text: "+" +}, + "╖": { + text: "+" +}, + "╗": { + text: "+" +}, + "╘": { + text: "+" +}, + "╙": { + text: "+" +}, + "╚": { + text: "+" +}, + "╛": { + text: "+" +}, + "╜": { + text: "+" +}, + "╝": { + text: "+" +}, + "╞": { + text: "+" +}, + "╟": { + text: "+" +}, + "╠": { + text: "+" +}, + "╡": { + text: "+" +}, + "╢": { + text: "+" +}, + "╣": { + text: "+" +}, + "╤": { + text: "+" +}, + "╥": { + text: "+" +}, + "╦": { + text: "+" +}, + "╧": { + text: "+" +}, + "╨": { + text: "+" +}, + "╩": { + text: "+" +}, + "╪": { + text: "+" +}, + "╫": { + text: "+" +}, + "╬": { + text: "+" +}, + "╭": { + text: "+" +}, + "╮": { + text: "+" +}, + "╯": { + text: "+" +}, + "╰": { + text: "+" +}, + "╱": { + math: "\\diagup" +}, + "╲": { + text: "\\" +}, + "╳": { + text: "X" +}, + "╼": { + text: "-" +}, + "╽": { + text: "|" +}, + "╾": { + text: "-" +}, + "╿": { + text: "|" +}, + "▀": { + math: "\\blockuphalf" +}, + "▄": { + math: "\\blocklowhalf" +}, + "█": { + math: "\\blockfull" +}, + "▌": { + math: "\\blocklefthalf" +}, + "▐": { + math: "\\blockrighthalf" +}, + "░": { + math: "\\blockqtrshaded" +}, + "▒": { + math: "\\blockhalfshaded" +}, + "▓": { + math: "\\blockthreeqtrshaded" +}, + "■": { + math: "\\mdlgblksquare", + text: "\\ding{110}" +}, + "□": { + math: "\\square" +}, + "▢": { + math: "\\squoval" +}, + "▣": { + math: "\\blackinwhitesquare" +}, + "▤": { + math: "\\squarehfill" +}, + "▥": { + math: "\\squarevfill" +}, + "▦": { + math: "\\squarehvfill" +}, + "▧": { + math: "\\squarenwsefill" +}, + "▨": { + math: "\\squareneswfill" +}, + "▩": { + math: "\\squarecrossfill" +}, + "▪": { + math: "\\blacksquare" +}, + "▫": { + math: "\\smwhtsquare" +}, + "▬": { + math: "\\hrectangleblack" +}, + "▭": { + math: "\\fbox{~~}" +}, + "▮": { + math: "\\vrectangleblack" +}, + "▯": { + math: "\\Elzvrecto" +}, + "▰": { + math: "\\parallelogramblack" +}, + "▲": { + math: "\\bigblacktriangleup", + text: "\\ding{115}" +}, + "△": { + math: "\\bigtriangleup" +}, + "▴": { + math: "\\blacktriangle" +}, + "▵": { + math: "\\vartriangle" +}, + "▶": { + math: "\\RHD" +}, + "▷": { + math: "\\rhd" +}, + "▸": { + math: "\\blacktriangleright" +}, + "▹": { + math: "\\triangleright" +}, + "►": { + math: "\\blackpointerright" +}, + "▻": { + math: "\\whitepointerright" +}, + "▼": { + math: "\\bigblacktriangledown", + text: "\\ding{116}" +}, + "▽": { + math: "\\bigtriangledown" +}, + "▾": { + math: "\\blacktriangledown" +}, + "▿": { + math: "\\triangledown" +}, + "◀": { + math: "\\LHD" +}, + "◁": { + math: "\\lhd" +}, + "◂": { + math: "\\blacktriangleleft" +}, + "◃": { + math: "\\triangleleft" +}, + "◄": { + math: "\\blackpointerleft" +}, + "◅": { + math: "\\whitepointerleft" +}, + "◆": { + math: "\\Diamondblack", + text: "\\ding{117}" +}, + "◇": { + math: "\\Diamond" +}, + "◈": { + math: "\\blackinwhitediamond" +}, + "◉": { + math: "\\fisheye" +}, + "◊": { + math: "\\lozenge" +}, + "○": { + math: "\\bigcirc" +}, + "◌": { + math: "\\dottedcircle" +}, + "◍": { + math: "\\circlevertfill" +}, + "◎": { + math: "\\bullseye" +}, + "●": { + math: "\\CIRCLE", + text: "\\ding{108}" +}, + "◐": { + math: "\\Elzcirfl" +}, + "◑": { + math: "\\Elzcirfr" +}, + "◒": { + math: "\\Elzcirfb" +}, + "◓": { + math: "\\circletophalfblack" +}, + "◔": { + math: "\\circleurquadblack" +}, + "◕": { + math: "\\blackcircleulquadwhite" +}, + "◖": { + math: "\\LEFTCIRCLE" +}, + "◗": { + math: "\\RIGHTCIRCLE", + text: "\\ding{119}" +}, + "◘": { + math: "\\Elzrvbull" +}, + "◙": { + math: "\\inversewhitecircle" +}, + "◚": { + math: "\\invwhiteupperhalfcircle" +}, + "◛": { + math: "\\invwhitelowerhalfcircle" +}, + "◜": { + math: "\\ularc" +}, + "◝": { + math: "\\urarc" +}, + "◞": { + math: "\\lrarc" +}, + "◟": { + math: "\\llarc" +}, + "◠": { + math: "\\topsemicircle" +}, + "◡": { + math: "\\botsemicircle" +}, + "◢": { + math: "\\lrblacktriangle" +}, + "◣": { + math: "\\llblacktriangle" +}, + "◤": { + math: "\\ulblacktriangle" +}, + "◥": { + math: "\\urblacktriangle" +}, + "◦": { + math: "\\smwhtcircle" +}, + "◧": { + math: "\\Elzsqfl" +}, + "◨": { + math: "\\Elzsqfr" +}, + "◩": { + math: "\\squareulblack" +}, + "◪": { + math: "\\Elzsqfse" +}, + "◫": { + math: "\\boxbar" +}, + "◬": { + math: "\\trianglecdot" +}, + "◭": { + math: "\\triangleleftblack" +}, + "◮": { + math: "\\trianglerightblack" +}, + "◯": { + math: "\\bigcirc" +}, + "◰": { + math: "\\squareulquad" +}, + "◱": { + math: "\\squarellquad" +}, + "◲": { + math: "\\squarelrquad" +}, + "◳": { + math: "\\squareurquad" +}, + "◴": { + math: "\\circleulquad" +}, + "◵": { + math: "\\circlellquad" +}, + "◶": { + math: "\\circlelrquad" +}, + "◷": { + math: "\\circleurquad" +}, + "◸": { + math: "\\ultriangle" +}, + "◹": { + math: "\\urtriangle" +}, + "◺": { + math: "\\lltriangle" +}, + "◻": { + math: "\\square" +}, + "◼": { + math: "\\blacksquare" +}, + "◽": { + math: "\\mdsmwhtsquare" +}, + "◾": { + math: "\\mdsmblksquare" +}, + "◿": { + math: "\\lrtriangle" +}, + "★": { + math: "\\bigstar", + text: "\\ding{72}" +}, + "☆": { + math: "\\bigwhitestar", + text: "\\ding{73}" +}, + "☉": { + math: "\\Sun" +}, + "☎": { + text: "\\ding{37}" +}, + "☐": { + math: "\\Square" +}, + "☑": { + math: "\\CheckedBox" +}, + "☒": { + math: "\\XBox" +}, + "☓": { + text: "X" +}, + "☕": { + math: "\\steaming" +}, + "☛": { + text: "\\ding{42}" +}, + "☞": { + math: "\\pointright", + text: "\\ding{43}" +}, + "☠": { + math: "\\skull" +}, + "☡": { + math: "\\danger" +}, + "☢": { + math: "\\radiation" +}, + "☣": { + math: "\\biohazard" +}, + "☯": { + math: "\\yinyang" +}, + "☹": { + math: "\\frownie" +}, + "☺": { + math: "\\smiley" +}, + "☻": { + math: "\\blacksmiley" +}, + "☼": { + math: "\\sun" +}, + "☽": { + text: "\\rightmoon", + commandspacer: true, + textpackages: [ + "wasysym" + ] +}, + "☾": { + text: "\\leftmoon", + commandspacer: true, + textpackages: [ + "wasysym" + ] +}, + "☿": { + math: "\\mercury", + text: "\\mercury", + commandspacer: true +}, + "♀": { + math: "\\female", + text: "\\venus", + commandspacer: true +}, + "♁": { + math: "\\earth" +}, + "♂": { + math: "\\male", + text: "\\male", + commandspacer: true +}, + "♃": { + math: "\\jupiter", + text: "\\jupiter", + commandspacer: true +}, + "♄": { + math: "\\saturn", + text: "\\saturn", + commandspacer: true +}, + "♅": { + math: "\\uranus", + text: "\\uranus", + commandspacer: true +}, + "♆": { + math: "\\neptune", + text: "\\neptune", + commandspacer: true +}, + "♇": { + math: "\\pluto", + text: "\\pluto", + commandspacer: true +}, + "♈": { + math: "\\aries", + text: "\\aries", + commandspacer: true +}, + "♉": { + math: "\\taurus", + text: "\\taurus", + commandspacer: true +}, + "♊": { + math: "\\gemini", + text: "\\gemini", + commandspacer: true +}, + "♋": { + math: "\\cancer", + text: "\\cancer", + commandspacer: true +}, + "♌": { + math: "\\leo", + text: "\\leo", + commandspacer: true +}, + "♍": { + math: "\\virgo", + text: "\\virgo", + commandspacer: true +}, + "♎": { + math: "\\libra", + text: "\\libra", + commandspacer: true +}, + "♏": { + math: "\\scorpio", + text: "\\scorpio", + commandspacer: true +}, + "♐": { + math: "\\sagittarius", + text: "\\sagittarius", + commandspacer: true +}, + "♑": { + math: "\\capricornus", + text: "\\capricornus", + commandspacer: true +}, + "♒": { + math: "\\aquarius", + text: "\\aquarius", + commandspacer: true +}, + "♓": { + math: "\\pisces", + text: "\\pisces", + commandspacer: true +}, + "♠": { + math: "\\spadesuit", + text: "\\ding{171}" +}, + "♡": { + math: "\\heartsuit" +}, + "♢": { + math: "\\diamond" +}, + "♣": { + math: "\\clubsuit", + text: "\\ding{168}" +}, + "♤": { + math: "\\varspadesuit" +}, + "♥": { + math: "\\varheartsuit", + text: "\\ding{170}" +}, + "♦": { + math: "\\vardiamondsuit", + text: "\\ding{169}" +}, + "♧": { + math: "\\varclubsuit" +}, + "♩": { + math: "\\quarternote", + text: "\\quarternote", + commandspacer: true +}, + "♪": { + math: "\\eighthnote", + text: "\\eighthnote", + commandspacer: true +}, + "♫": { + math: "\\twonotes" +}, + "♬": { + math: "\\sixteenthnote" +}, + "♭": { + math: "\\flat" +}, + "♮": { + math: "\\natural" +}, + "♯": { + math: "\\sharp" +}, + "♻": { + math: "\\recycle" +}, + "♾": { + math: "\\acidfree" +}, + "⚀": { + math: "\\dicei" +}, + "⚁": { + math: "\\diceii" +}, + "⚂": { + math: "\\diceiii" +}, + "⚃": { + math: "\\diceiv" +}, + "⚄": { + math: "\\dicev" +}, + "⚅": { + math: "\\dicevi" +}, + "⚆": { + math: "\\circledrightdot" +}, + "⚇": { + math: "\\circledtwodots" +}, + "⚈": { + math: "\\blackcircledrightdot" +}, + "⚉": { + math: "\\blackcircledtwodots" +}, + "⚓": { + math: "\\anchor" +}, + "⚔": { + math: "\\swords" +}, + "⚠": { + math: "\\warning" +}, + "⚥": { + math: "\\Hermaphrodite" +}, + "⚪": { + math: "\\medcirc" +}, + "⚫": { + math: "\\medbullet" +}, + "⚬": { + math: "\\mdsmwhtcircle" +}, + "⚲": { + math: "\\neuter" +}, + "✁": { + text: "\\ding{33}" +}, + "✂": { + text: "\\ding{34}" +}, + "✃": { + text: "\\ding{35}" +}, + "✄": { + text: "\\ding{36}" +}, + "✆": { + text: "\\ding{38}" +}, + "✇": { + text: "\\ding{39}" +}, + "✈": { + text: "\\ding{40}" +}, + "✉": { + text: "\\ding{41}" +}, + "✌": { + text: "\\ding{44}" +}, + "✍": { + text: "\\ding{45}" +}, + "✎": { + math: "\\pencil", + text: "\\ding{46}" +}, + "✏": { + text: "\\ding{47}" +}, + "✐": { + text: "\\ding{48}" +}, + "✑": { + text: "\\ding{49}" +}, + "✒": { + text: "\\ding{50}" +}, + "✓": { + math: "\\checkmark", + text: "\\ding{51}" +}, + "✔": { + text: "\\ding{52}" +}, + "✕": { + text: "\\ding{53}" +}, + "✖": { + text: "\\ding{54}" +}, + "✗": { + math: "\\ballotx", + text: "\\ding{55}" +}, + "✘": { + text: "\\ding{56}" +}, + "✙": { + text: "\\ding{57}" +}, + "✚": { + text: "\\ding{58}" +}, + "✛": { + text: "\\ding{59}" +}, + "✜": { + text: "\\ding{60}" +}, + "✝": { + text: "\\ding{61}" +}, + "✞": { + text: "\\ding{62}" +}, + "✟": { + text: "\\ding{63}" +}, + "✠": { + math: "\\maltese", + text: "\\ding{64}" +}, + "✡": { + text: "\\ding{65}" +}, + "✢": { + text: "\\ding{66}" +}, + "✣": { + text: "\\ding{67}" +}, + "✤": { + text: "\\ding{68}" +}, + "✥": { + text: "\\ding{69}" +}, + "✦": { + text: "\\ding{70}" +}, + "✧": { + text: "\\ding{71}" +}, + "✩": { + text: "\\ding{73}" +}, + "✪": { + math: "\\circledstar", + text: "\\ding{74}" +}, + "✫": { + text: "\\ding{75}" +}, + "✬": { + text: "\\ding{76}" +}, + "✭": { + text: "\\ding{77}" +}, + "✮": { + text: "\\ding{78}" +}, + "✯": { + text: "\\ding{79}" +}, + "✰": { + text: "\\ding{80}" +}, + "✱": { + text: "\\ding{81}" +}, + "✲": { + text: "\\ding{82}" +}, + "✳": { + text: "\\ding{83}" +}, + "✴": { + text: "\\ding{84}" +}, + "✵": { + text: "\\ding{85}" +}, + "✶": { + math: "\\varstar", + text: "\\ding{86}" +}, + "✷": { + text: "\\ding{87}" +}, + "✸": { + text: "\\ding{88}" +}, + "✹": { + text: "\\ding{89}" +}, + "✺": { + text: "\\ding{90}" +}, + "✻": { + text: "\\ding{91}" +}, + "✼": { + text: "\\ding{92}" +}, + "✽": { + math: "\\dingasterisk", + text: "\\ding{93}" +}, + "✾": { + text: "\\ding{94}" +}, + "✿": { + text: "\\ding{95}" +}, + "❀": { + text: "\\ding{96}" +}, + "❁": { + text: "\\ding{97}" +}, + "❂": { + text: "\\ding{98}" +}, + "❃": { + text: "\\ding{99}" +}, + "❄": { + text: "\\ding{100}" +}, + "❅": { + text: "\\ding{101}" +}, + "❆": { + text: "\\ding{102}" +}, + "❇": { + text: "\\ding{103}" +}, + "❈": { + text: "\\ding{104}" +}, + "❉": { + text: "\\ding{105}" +}, + "❊": { + text: "\\ding{106}" +}, + "❋": { + text: "\\ding{107}" +}, + "❍": { + text: "\\ding{109}" +}, + "❏": { + text: "\\ding{111}" +}, + "❐": { + text: "\\ding{112}" +}, + "❑": { + text: "\\ding{113}" +}, + "❒": { + text: "\\ding{114}" +}, + "❖": { + text: "\\ding{118}" +}, + "❘": { + text: "\\ding{120}" +}, + "❙": { + text: "\\ding{121}" +}, + "❚": { + text: "\\ding{122}" +}, + "❛": { + text: "\\ding{123}" +}, + "❜": { + text: "\\ding{124}" +}, + "❝": { + text: "\\ding{125}" +}, + "❞": { + text: "\\ding{126}" +}, + "❡": { + text: "\\ding{161}" +}, + "❢": { + text: "\\ding{162}" +}, + "❣": { + text: "\\ding{163}" +}, + "❤": { + text: "\\ding{164}" +}, + "❥": { + text: "\\ding{165}" +}, + "❦": { + text: "\\ding{166}" +}, + "❧": { + text: "\\ding{167}" +}, + "❲": { + math: "\\lbrbrak" +}, + "❳": { + math: "\\rbrbrak" +}, + "❶": { + text: "\\ding{182}" +}, + "❷": { + text: "\\ding{183}" +}, + "❸": { + text: "\\ding{184}" +}, + "❹": { + text: "\\ding{185}" +}, + "❺": { + text: "\\ding{186}" +}, + "❻": { + text: "\\ding{187}" +}, + "❼": { + text: "\\ding{188}" +}, + "❽": { + text: "\\ding{189}" +}, + "❾": { + text: "\\ding{190}" +}, + "❿": { + text: "\\ding{191}" +}, + "➀": { + text: "\\ding{192}" +}, + "➁": { + text: "\\ding{193}" +}, + "➂": { + text: "\\ding{194}" +}, + "➃": { + text: "\\ding{195}" +}, + "➄": { + text: "\\ding{196}" +}, + "➅": { + text: "\\ding{197}" +}, + "➆": { + text: "\\ding{198}" +}, + "➇": { + text: "\\ding{199}" +}, + "➈": { + text: "\\ding{200}" +}, + "➉": { + text: "\\ding{201}" +}, + "➊": { + text: "\\ding{202}" +}, + "➋": { + text: "\\ding{203}" +}, + "➌": { + text: "\\ding{204}" +}, + "➍": { + text: "\\ding{205}" +}, + "➎": { + text: "\\ding{206}" +}, + "➏": { + text: "\\ding{207}" +}, + "➐": { + text: "\\ding{208}" +}, + "➑": { + text: "\\ding{209}" +}, + "➒": { + text: "\\ding{210}" +}, + "➓": { + text: "\\ding{211}" +}, + "➔": { + text: "\\ding{212}" +}, + "➘": { + text: "\\ding{216}" +}, + "➙": { + text: "\\ding{217}" +}, + "➚": { + text: "\\ding{218}" +}, + "➛": { + math: "\\draftingarrow", + text: "\\ding{219}" +}, + "➜": { + text: "\\ding{220}" +}, + "➝": { + text: "\\ding{221}" +}, + "➞": { + text: "\\ding{222}" +}, + "➟": { + text: "\\ding{223}" +}, + "➠": { + text: "\\ding{224}" +}, + "➡": { + text: "\\ding{225}" +}, + "➢": { + math: "\\arrowbullet", + text: "\\ding{226}" +}, + "➣": { + text: "\\ding{227}" +}, + "➤": { + text: "\\ding{228}" +}, + "➥": { + text: "\\ding{229}" +}, + "➦": { + text: "\\ding{230}" +}, + "➧": { + text: "\\ding{231}" +}, + "➨": { + text: "\\ding{232}" +}, + "➩": { + text: "\\ding{233}" +}, + "➪": { + text: "\\ding{234}" +}, + "➫": { + text: "\\ding{235}" +}, + "➬": { + text: "\\ding{236}" +}, + "➭": { + text: "\\ding{237}" +}, + "➮": { + text: "\\ding{238}" +}, + "➯": { + text: "\\ding{239}" +}, + "➱": { + text: "\\ding{241}" +}, + "➲": { + text: "\\ding{242}" +}, + "➳": { + text: "\\ding{243}" +}, + "➴": { + text: "\\ding{244}" +}, + "➵": { + text: "\\ding{245}" +}, + "➶": { + text: "\\ding{246}" +}, + "➷": { + text: "\\ding{247}" +}, + "➸": { + text: "\\ding{248}" +}, + "➹": { + text: "\\ding{249}" +}, + "➺": { + text: "\\ding{250}" +}, + "➻": { + text: "\\ding{251}" +}, + "➼": { + text: "\\ding{252}" +}, + "➽": { + text: "\\ding{253}" +}, + "➾": { + text: "\\ding{254}" +}, + "⟀": { + math: "\\threedangle" +}, + "⟁": { + math: "\\whiteinwhitetriangle" +}, + "⟂": { + math: "\\perp" +}, + "⟃": { + math: "\\subsetcirc" +}, + "⟄": { + math: "\\supsetcirc" +}, + "⟅": { + math: "\\Lbag" +}, + "⟆": { + math: "\\Rbag" +}, + "⟇": { + math: "\\veedot" +}, + "⟈": { + math: "\\bsolhsub" +}, + "⟉": { + math: "\\suphsol" +}, + "⟌": { + math: "\\longdivision" +}, + "⟐": { + math: "\\Diamonddot" +}, + "⟑": { + math: "\\wedgedot" +}, + "⟒": { + math: "\\upin" +}, + "⟓": { + math: "\\pullback" +}, + "⟔": { + math: "\\pushout" +}, + "⟕": { + math: "\\leftouterjoin" +}, + "⟖": { + math: "\\rightouterjoin" +}, + "⟗": { + math: "\\fullouterjoin" +}, + "⟘": { + math: "\\bigbot" +}, + "⟙": { + math: "\\bigtop" +}, + "⟚": { + math: "\\DashVDash" +}, + "⟛": { + math: "\\dashVdash" +}, + "⟜": { + math: "\\multimapinv" +}, + "⟝": { + math: "\\vlongdash" +}, + "⟞": { + math: "\\longdashv" +}, + "⟟": { + math: "\\cirbot" +}, + "⟠": { + math: "\\lozengeminus" +}, + "⟡": { + math: "\\concavediamond" +}, + "⟢": { + math: "\\concavediamondtickleft" +}, + "⟣": { + math: "\\concavediamondtickright" +}, + "⟤": { + math: "\\whitesquaretickleft" +}, + "⟥": { + math: "\\whitesquaretickright" +}, + "⟦": { + math: "\\llbracket" +}, + "⟧": { + math: "\\rrbracket" +}, + "⟨": { + math: "\\langle" +}, + "⟩": { + math: "\\rangle" +}, + "⟪": { + math: "\\lang" +}, + "⟫": { + math: "\\rang" +}, + "⟬": { + math: "\\Lbrbrak" +}, + "⟭": { + math: "\\Rbrbrak" +}, + "⟮": { + math: "\\lgroup" +}, + "⟯": { + math: "\\rgroup" +}, + "⟰": { + math: "\\UUparrow" +}, + "⟱": { + math: "\\DDownarrow" +}, + "⟲": { + math: "\\acwgapcirclearrow" +}, + "⟳": { + math: "\\cwgapcirclearrow" +}, + "⟴": { + math: "\\rightarrowonoplus" +}, + "⟵": { + math: "\\longleftarrow" +}, + "⟶": { + math: "\\longrightarrow" +}, + "⟷": { + math: "\\longleftrightarrow" +}, + "⟸": { + math: "\\Longleftarrow" +}, + "⟹": { + math: "\\Longrightarrow" +}, + "⟺": { + math: "\\Longleftrightarrow" +}, + "⟻": { + math: "\\longmapsfrom" +}, + "⟼": { + math: "\\longmapsto" +}, + "⟽": { + math: "\\Longmapsfrom" +}, + "⟾": { + math: "\\Longmapsto" +}, + "⟿": { + math: "\\sim\\joinrel\\leadsto" +}, + "⤀": { + math: "\\psur" +}, + "⤁": { + math: "\\nVtwoheadrightarrow" +}, + "⤂": { + math: "\\nvLeftarrow" +}, + "⤃": { + math: "\\nvRightarrow" +}, + "⤄": { + math: "\\nvLeftrightarrow" +}, + "⤆": { + math: "\\Mapsfrom" +}, + "⤇": { + math: "\\Mapsto" +}, + "⤈": { + math: "\\downarrowbarred" +}, + "⤉": { + math: "\\uparrowbarred" +}, + "⤊": { + math: "\\Uuparrow" +}, + "⤋": { + math: "\\Ddownarrow" +}, + "⤌": { + math: "\\leftbkarrow" +}, + "⤍": { + math: "\\rightbkarrow" +}, + "⤎": { + math: "\\leftdbkarrow" +}, + "⤏": { + math: "\\dbkarow" +}, + "⤐": { + math: "\\drbkarow" +}, + "⤑": { + math: "\\rightdotarrow" +}, + "⤒": { + math: "\\UpArrowBar" +}, + "⤓": { + math: "\\DownArrowBar" +}, + "⤔": { + math: "\\pinj" +}, + "⤕": { + math: "\\finj" +}, + "⤖": { + math: "\\bij" +}, + "⤗": { + math: "\\nvtwoheadrightarrowtail" +}, + "⤘": { + math: "\\nVtwoheadrightarrowtail" +}, + "⤙": { + math: "\\lefttail" +}, + "⤚": { + math: "\\righttail" +}, + "⤛": { + math: "\\leftdbltail" +}, + "⤜": { + math: "\\rightdbltail" +}, + "⤝": { + math: "\\diamondleftarrow" +}, + "⤞": { + math: "\\rightarrowdiamond" +}, + "⤟": { + math: "\\diamondleftarrowbar" +}, + "⤠": { + math: "\\barrightarrowdiamond" +}, + "⤡": { + math: "\\nwsearrow" +}, + "⤢": { + math: "\\neswarrow" +}, + "⤫": { + math: "\\rdiagovfdiag" +}, + "⤬": { + math: "\\fdiagovrdiag" +}, + "⤭": { + math: "\\seovnearrow" +}, + "⤮": { + math: "\\neovsearrow" +}, + "⤯": { + math: "\\fdiagovnearrow" +}, + "⤰": { + math: "\\rdiagovsearrow" +}, + "⤱": { + math: "\\neovnwarrow" +}, + "⤲": { + math: "\\nwovnearrow" +}, + "⤴": { + math: "\\uprightcurvearrow" +}, + "⤵": { + math: "\\downrightcurvedarrow" +}, + "⤸": { + math: "\\cwrightarcarrow" +}, + "⤹": { + math: "\\acwleftarcarrow" +}, + "⤺": { + math: "\\acwoverarcarrow" +}, + "⤻": { + math: "\\acwunderarcarrow" +}, + "⤼": { + math: "\\curvearrowrightminus" +}, + "⤽": { + math: "\\curvearrowleftplus" +}, + "⤾": { + math: "\\cwundercurvearrow" +}, + "⤿": { + math: "\\ccwundercurvearrow" +}, + "⥀": { + math: "\\Elolarr" +}, + "⥁": { + math: "\\Elorarr" +}, + "⥂": { + math: "\\ElzRlarr" +}, + "⥃": { + math: "\\leftarrowshortrightarrow" +}, + "⥄": { + math: "\\ElzrLarr" +}, + "⥅": { + math: "\\rightarrowplus" +}, + "⥆": { + math: "\\leftarrowplus" +}, + "⥇": { + math: "\\Elzrarrx" +}, + "⥈": { + math: "\\leftrightarrowcircle" +}, + "⥉": { + math: "\\twoheaduparrowcircle" +}, + "⥊": { + math: "\\leftrightharpoon" +}, + "⥋": { + math: "\\rightleftharpoon" +}, + "⥌": { + math: "\\updownharpoonrightleft" +}, + "⥍": { + math: "\\updownharpoonleftright" +}, + "⥎": { + math: "\\LeftRightVector" +}, + "⥏": { + math: "\\RightUpDownVector" +}, + "⥐": { + math: "\\DownLeftRightVector" +}, + "⥑": { + math: "\\LeftUpDownVector" +}, + "⥒": { + math: "\\LeftVectorBar" +}, + "⥓": { + math: "\\RightVectorBar" +}, + "⥔": { + math: "\\RightUpVectorBar" +}, + "⥕": { + math: "\\RightDownVectorBar" +}, + "⥖": { + math: "\\DownLeftVectorBar" +}, + "⥗": { + math: "\\DownRightVectorBar" +}, + "⥘": { + math: "\\LeftUpVectorBar" +}, + "⥙": { + math: "\\LeftDownVectorBar" +}, + "⥚": { + math: "\\LeftTeeVector" +}, + "⥛": { + math: "\\RightTeeVector" +}, + "⥜": { + math: "\\RightUpTeeVector" +}, + "⥝": { + math: "\\RightDownTeeVector" +}, + "⥞": { + math: "\\DownLeftTeeVector" +}, + "⥟": { + math: "\\DownRightTeeVector" +}, + "⥠": { + math: "\\LeftUpTeeVector" +}, + "⥡": { + math: "\\LeftDownTeeVector" +}, + "⥢": { + math: "\\leftleftharpoons" +}, + "⥣": { + math: "\\upupharpoons" +}, + "⥤": { + math: "\\rightrightharpoons" +}, + "⥥": { + math: "\\downdownharpoons" +}, + "⥦": { + math: "\\leftrightharpoonsup" +}, + "⥧": { + math: "\\leftrightharpoonsdown" +}, + "⥨": { + math: "\\rightleftharpoonsup" +}, + "⥩": { + math: "\\rightleftharpoonsdown" +}, + "⥪": { + math: "\\leftbarharpoon" +}, + "⥫": { + math: "\\barleftharpoon" +}, + "⥬": { + math: "\\rightbarharpoon" +}, + "⥭": { + math: "\\barrightharpoon" +}, + "⥮": { + math: "\\UpEquilibrium" +}, + "⥯": { + math: "\\ReverseUpEquilibrium" +}, + "⥰": { + math: "\\RoundImplies" +}, + "⥱": { + math: "\\equalrightarrow" +}, + "⥲": { + math: "\\similarrightarrow" +}, + "⥳": { + math: "\\leftarrowsimilar" +}, + "⥴": { + math: "\\rightarrowsimilar" +}, + "⥵": { + math: "\\rightarrowapprox" +}, + "⥶": { + math: "\\ltlarr" +}, + "⥷": { + math: "\\leftarrowless" +}, + "⥸": { + math: "\\gtrarr" +}, + "⥹": { + math: "\\subrarr" +}, + "⥺": { + math: "\\leftarrowsubset" +}, + "⥻": { + math: "\\suplarr" +}, + "⥾": { + math: "\\upfishtail" +}, + "⥿": { + math: "\\downfishtail" +}, + "⦀": { + math: "\\Elztfnc" +}, + "⦁": { + math: "\\spot" +}, + "⦂": { + math: "\\typecolon" +}, + "⦃": { + math: "\\lBrace" +}, + "⦄": { + math: "\\rBrace" +}, + "⦆": { + math: "\\Elroang" +}, + "⦇": { + math: "\\limg" +}, + "⦈": { + math: "\\rimg" +}, + "⦉": { + math: "\\lblot" +}, + "⦊": { + math: "\\rblot" +}, + "⦋": { + math: "\\lbrackubar" +}, + "⦌": { + math: "\\rbrackubar" +}, + "⦍": { + math: "\\lbrackultick" +}, + "⦎": { + math: "\\rbracklrtick" +}, + "⦏": { + math: "\\lbracklltick" +}, + "⦐": { + math: "\\rbrackurtick" +}, + "⦑": { + math: "\\langledot" +}, + "⦒": { + math: "\\rangledot" +}, + "⦓": { + math: "<\\kern-0.58em(" +}, + "⦕": { + math: "\\Lparengtr" +}, + "⦖": { + math: "\\Rparenless" +}, + "⦗": { + math: "\\lblkbrbrak" +}, + "⦘": { + math: "\\rblkbrbrak" +}, + "⦙": { + math: "\\Elzddfnc" +}, + "⦚": { + math: "\\vzigzag" +}, + "⦛": { + math: "\\measuredangleleft" +}, + "⦜": { + math: "\\Angle" +}, + "⦝": { + math: "\\rightanglemdot" +}, + "⦞": { + math: "\\angles" +}, + "⦟": { + math: "\\angdnr" +}, + "⦠": { + math: "\\Elzlpargt" +}, + "⦡": { + math: "\\sphericalangleup" +}, + "⦢": { + math: "\\turnangle" +}, + "⦣": { + math: "\\revangle" +}, + "⦤": { + math: "\\angleubar" +}, + "⦥": { + math: "\\revangleubar" +}, + "⦦": { + math: "\\wideangledown" +}, + "⦧": { + math: "\\wideangleup" +}, + "⦨": { + math: "\\measanglerutone" +}, + "⦩": { + math: "\\measanglelutonw" +}, + "⦪": { + math: "\\measanglerdtose" +}, + "⦫": { + math: "\\measangleldtosw" +}, + "⦬": { + math: "\\measangleurtone" +}, + "⦭": { + math: "\\measangleultonw" +}, + "⦮": { + math: "\\measangledrtose" +}, + "⦯": { + math: "\\measangledltosw" +}, + "⦰": { + math: "\\revemptyset" +}, + "⦱": { + math: "\\emptysetobar" +}, + "⦲": { + math: "\\emptysetocirc" +}, + "⦳": { + math: "\\emptysetoarr" +}, + "⦴": { + math: "\\emptysetoarrl" +}, + "⦷": { + math: "\\circledparallel" +}, + "⦸": { + math: "\\circledbslash" +}, + "⦹": { + math: "\\operp" +}, + "⦺": { + math: "\\obot" +}, + "⦻": { + math: "\\olcross" +}, + "⦼": { + math: "\\odotslashdot" +}, + "⦽": { + math: "\\uparrowoncircle" +}, + "⦾": { + math: "\\circledwhitebullet" +}, + "⦿": { + math: "\\circledbullet" +}, + "⧀": { + math: "\\circledless" +}, + "⧁": { + math: "\\circledgtr" +}, + "⧂": { + math: "\\cirscir" +}, + "⧃": { + math: "\\cirE" +}, + "⧄": { + math: "\\boxslash" +}, + "⧅": { + math: "\\boxbslash" +}, + "⧆": { + math: "\\boxast" +}, + "⧇": { + math: "\\boxcircle" +}, + "⧈": { + math: "\\boxbox" +}, + "⧉": { + math: "\\boxonbox" +}, + "⧊": { + math: "\\ElzLap" +}, + "⧋": { + math: "\\Elzdefas" +}, + "⧌": { + math: "\\triangles" +}, + "⧍": { + math: "\\triangleserifs" +}, + "⧎": { + math: "\\rtriltri" +}, + "⧏": { + math: "\\LeftTriangleBar" +}, + "⧏̸": { + math: "\\NotLeftTriangleBar" +}, + "⧐": { + math: "\\RightTriangleBar" +}, + "⧐̸": { + math: "\\NotRightTriangleBar" +}, + "⧑": { + math: "\\lfbowtie" +}, + "⧒": { + math: "\\rfbowtie" +}, + "⧓": { + math: "\\fbowtie" +}, + "⧔": { + math: "\\lftimes" +}, + "⧕": { + math: "\\rftimes" +}, + "⧖": { + math: "\\hourglass" +}, + "⧗": { + math: "\\blackhourglass" +}, + "⧘": { + math: "\\lvzigzag" +}, + "⧙": { + math: "\\rvzigzag" +}, + "⧚": { + math: "\\Lvzigzag" +}, + "⧛": { + math: "\\Rvzigzag" +}, + "⧝": { + math: "\\tieinfty" +}, + "⧞": { + math: "\\nvinfty" +}, + "⧟": { + math: "\\multimapboth" +}, + "⧠": { + math: "\\laplac" +}, + "⧡": { + math: "\\lrtriangleeq" +}, + "⧢": { + math: "\\shuffle" +}, + "⧣": { + math: "\\eparsl" +}, + "⧤": { + math: "\\smeparsl" +}, + "⧥": { + math: "\\eqvparsl" +}, + "⧦": { + math: "\\gleichstark" +}, + "⧧": { + math: "\\thermod" +}, + "⧨": { + math: "\\downtriangleleftblack" +}, + "⧩": { + math: "\\downtrianglerightblack" +}, + "⧪": { + math: "\\blackdiamonddownarrow" +}, + "⧫": { + math: "\\blacklozenge" +}, + "⧬": { + math: "\\circledownarrow" +}, + "⧭": { + math: "\\blackcircledownarrow" +}, + "⧮": { + math: "\\errbarsquare" +}, + "⧯": { + math: "\\errbarblacksquare" +}, + "⧰": { + math: "\\errbardiamond" +}, + "⧱": { + math: "\\errbarblackdiamond" +}, + "⧲": { + math: "\\errbarcircle" +}, + "⧳": { + math: "\\errbarblackcircle" +}, + "⧴": { + math: "\\RuleDelayed" +}, + "⧵": { + math: "\\setminus" +}, + "⧶": { + math: "\\dsol" +}, + "⧷": { + math: "\\rsolbar" +}, + "⧸": { + math: "\\xsol" +}, + "⧹": { + math: "\\zhide" +}, + "⧺": { + math: "\\doubleplus" +}, + "⧻": { + math: "\\tripleplus" +}, + "⧼": { + math: "\\lcurvyangle" +}, + "⧽": { + math: "\\rcurvyangle" +}, + "⧾": { + math: "\\tplus" +}, + "⧿": { + math: "\\tminus" +}, + "⨀": { + math: "\\bigodot" +}, + "⨁": { + math: "\\bigoplus" +}, + "⨂": { + math: "\\bigotimes" +}, + "⨃": { + math: "\\bigcupdot" +}, + "⨄": { + math: "\\Elxuplus" +}, + "⨅": { + math: "\\ElzThr" +}, + "⨆": { + math: "\\Elxsqcup" +}, + "⨇": { + math: "\\ElzInf" +}, + "⨈": { + math: "\\ElzSup" +}, + "⨉": { + math: "\\varprod" +}, + "⨊": { + math: "\\modtwosum" +}, + "⨋": { + math: "\\sumint" +}, + "⨌": { + math: "\\iiiint" +}, + "⨍": { + math: "\\ElzCint" +}, + "⨎": { + math: "\\intBar" +}, + "⨏": { + math: "\\clockoint" +}, + "⨑": { + math: "\\awint" +}, + "⨒": { + math: "\\rppolint" +}, + "⨓": { + math: "\\scpolint" +}, + "⨔": { + math: "\\npolint" +}, + "⨕": { + math: "\\pointint" +}, + "⨖": { + math: "\\sqrint" +}, + "⨗": { + math: "\\intlarhk" +}, + "⨘": { + math: "\\intx" +}, + "⨙": { + math: "\\intcap" +}, + "⨚": { + math: "\\intcup" +}, + "⨛": { + math: "\\upint" +}, + "⨜": { + math: "\\lowint" +}, + "⨝": { + math: "\\Join" +}, + "⨞": { + math: "\\bigtriangleleft" +}, + "⨟": { + math: "\\zcmp" +}, + "⨠": { + math: "\\zpipe" +}, + "⨡": { + math: "\\zproject" +}, + "⨢": { + math: "\\ringplus" +}, + "⨣": { + math: "\\plushat" +}, + "⨤": { + math: "\\simplus" +}, + "⨦": { + math: "\\plussim" +}, + "⨧": { + math: "\\plussubtwo" +}, + "⨨": { + math: "\\plustrif" +}, + "⨩": { + math: "\\commaminus" +}, + "⨫": { + math: "\\minusfdots" +}, + "⨬": { + math: "\\minusrdots" +}, + "⨯": { + math: "\\ElzTimes" +}, + "⨰": { + math: "\\dottimes" +}, + "⨱": { + math: "\\timesbar" +}, + "⨲": { + math: "\\btimes" +}, + "⨳": { + math: "\\smashtimes" +}, + "⨶": { + math: "\\otimeshat" +}, + "⨷": { + math: "\\Otimes" +}, + "⨸": { + math: "\\odiv" +}, + "⨹": { + math: "\\triangleplus" +}, + "⨺": { + math: "\\triangleminus" +}, + "⨻": { + math: "\\triangletimes" +}, + "⨽": { + math: "\\intprodr" +}, + "⨾": { + math: "\\fcmp" +}, + "⨿": { + math: "\\amalg" +}, + "⩀": { + math: "\\capdot" +}, + "⩁": { + math: "\\uminus" +}, + "⩂": { + math: "\\barcup" +}, + "⩃": { + math: "\\barcap" +}, + "⩄": { + math: "\\capwedge" +}, + "⩅": { + math: "\\cupvee" +}, + "⩆": { + math: "\\cupovercap" +}, + "⩇": { + math: "\\capovercup" +}, + "⩈": { + math: "\\cupbarcap" +}, + "⩉": { + math: "\\capbarcup" +}, + "⩊": { + math: "\\twocups" +}, + "⩋": { + math: "\\twocaps" +}, + "⩌": { + math: "\\closedvarcup" +}, + "⩍": { + math: "\\closedvarcap" +}, + "⩎": { + math: "\\Sqcap" +}, + "⩏": { + math: "\\Sqcup" +}, + "⩐": { + math: "\\closedvarcupsmashprod" +}, + "⩑": { + math: "\\wedgeodot" +}, + "⩒": { + math: "\\veeodot" +}, + "⩓": { + math: "\\ElzAnd" +}, + "⩔": { + math: "\\ElzOr" +}, + "⩖": { + math: "\\ElOr" +}, + "⩗": { + math: "\\bigslopedvee" +}, + "⩘": { + math: "\\bigslopedwedge" +}, + "⩙": { + math: "\\veeonwedge" +}, + "⩚": { + math: "\\wedgemidvert" +}, + "⩛": { + math: "\\veemidvert" +}, + "⩜": { + math: "\\midbarwedge" +}, + "⩝": { + math: "\\midbarvee" +}, + "⩞": { + math: "\\perspcorrespond" +}, + "⩟": { + math: "\\Elzminhat" +}, + "⩠": { + math: "\\wedgedoublebar" +}, + "⩡": { + math: "\\varveebar" +}, + "⩢": { + math: "\\doublebarvee" +}, + "⩤": { + math: "\\dsub" +}, + "⩥": { + math: "\\rsub" +}, + "⩦": { + math: "\\eqdot" +}, + "⩧": { + math: "\\dotequiv" +}, + "⩨": { + math: "\\equivVert" +}, + "⩩": { + math: "\\equivVvert" +}, + "⩪": { + math: "\\dotsim" +}, + "⩫": { + math: "\\simrdots" +}, + "⩬": { + math: "\\simminussim" +}, + "⩭": { + math: "\\congdot" +}, + "⩮": { + math: "\\stackrel{*}{=}" +}, + "⩯": { + math: "\\hatapprox" +}, + "⩰": { + math: "\\approxeqq" +}, + "⩱": { + math: "\\eqqplus" +}, + "⩲": { + math: "\\pluseqq" +}, + "⩳": { + math: "\\eqqsim" +}, + "⩴": { + math: "\\Coloneqq" +}, + "⩵": { + math: "\\Equal" +}, + "⩶": { + math: "\\Same" +}, + "⩷": { + math: "\\ddotseq" +}, + "⩸": { + math: "\\equivDD" +}, + "⩹": { + math: "\\ltcir" +}, + "⩺": { + math: "\\gtcir" +}, + "⩻": { + math: "\\ltquest" +}, + "⩼": { + math: "\\gtquest" +}, + "⩽": { + math: "\\leqslant", + mathpackages: [ + "amssymb" + ] +}, + "⩽̸": { + math: "\\nleqslant", + mathpackages: [ + "amssymb" + ] +}, + "⩾": { + math: "\\geqslant", + mathpackages: [ + "amssymb" + ] +}, + "⩾̸": { + math: "\\ngeqslant", + mathpackages: [ + "amssymb" + ] +}, + "⩿": { + math: "\\lesdot" +}, + "⪀": { + math: "\\gesdot" +}, + "⪁": { + math: "\\lesdoto" +}, + "⪂": { + math: "\\gesdoto" +}, + "⪃": { + math: "\\lesdotor" +}, + "⪄": { + math: "\\gesdotol" +}, + "⪅": { + math: "\\lessapprox" +}, + "⪆": { + math: "\\gtrapprox" +}, + "⪇": { + math: "\\lneq" +}, + "⪈": { + math: "\\gneq" +}, + "⪉": { + math: "\\lnapprox" +}, + "⪊": { + math: "\\gnapprox" +}, + "⪋": { + math: "\\lesseqqgtr" +}, + "⪌": { + math: "\\gtreqqless" +}, + "⪍": { + math: "\\lsime" +}, + "⪎": { + math: "\\gsime" +}, + "⪏": { + math: "\\lsimg" +}, + "⪐": { + math: "\\gsiml" +}, + "⪑": { + math: "\\lgE" +}, + "⪒": { + math: "\\glE" +}, + "⪓": { + math: "\\lesges" +}, + "⪔": { + math: "\\gesles" +}, + "⪕": { + math: "\\eqslantless" +}, + "⪖": { + math: "\\eqslantgtr" +}, + "⪗": { + math: "\\elsdot" +}, + "⪘": { + math: "\\egsdot" +}, + "⪙": { + math: "\\eqqless" +}, + "⪚": { + math: "\\eqqgtr" +}, + "⪛": { + math: "\\eqqslantless" +}, + "⪜": { + math: "\\eqqslantgtr" +}, + "⪝": { + math: "\\Pisymbol{ppi020}{117}" +}, + "⪞": { + math: "\\Pisymbol{ppi020}{105}" +}, + "⪟": { + math: "\\simlE" +}, + "⪠": { + math: "\\simgE" +}, + "⪡": { + math: "\\NestedLessLess" +}, + "⪡̸": { + math: "\\NotNestedLessLess" +}, + "⪢": { + math: "\\NestedGreaterGreater" +}, + "⪢̸": { + math: "\\NotNestedGreaterGreater" +}, + "⪣": { + math: "\\partialmeetcontraction" +}, + "⪤": { + math: "\\glj" +}, + "⪥": { + math: "\\gla" +}, + "⪦": { + math: "\\leftslice" +}, + "⪧": { + math: "\\rightslice" +}, + "⪨": { + math: "\\lescc" +}, + "⪩": { + math: "\\gescc" +}, + "⪪": { + math: "\\smt" +}, + "⪫": { + math: "\\lat" +}, + "⪬": { + math: "\\smte" +}, + "⪭": { + math: "\\late" +}, + "⪮": { + math: "\\bumpeqq" +}, + "⪯": { + math: "\\preceq" +}, + "⪯̸": { + math: "\\not\\preceq" +}, + "⪰": { + math: "\\succeq" +}, + "⪰̸": { + math: "\\not\\succeq" +}, + "⪱": { + math: "\\precneq" +}, + "⪲": { + math: "\\succneq" +}, + "⪳": { + math: "\\preceqq" +}, + "⪴": { + math: "\\succeqq" +}, + "⪵": { + math: "\\precneqq" +}, + "⪶": { + math: "\\succneqq" +}, + "⪷": { + math: "\\precapprox" +}, + "⪸": { + math: "\\succapprox" +}, + "⪹": { + math: "\\precnapprox" +}, + "⪺": { + math: "\\succnapprox" +}, + "⪻": { + math: "\\llcurly" +}, + "⪼": { + math: "\\ggcurly" +}, + "⪽": { + math: "\\subsetdot" +}, + "⪾": { + math: "\\supsetdot" +}, + "⪿": { + math: "\\subsetplus" +}, + "⫀": { + math: "\\supsetplus" +}, + "⫁": { + math: "\\submult" +}, + "⫂": { + math: "\\supmult" +}, + "⫃": { + math: "\\subedot" +}, + "⫄": { + math: "\\supedot" +}, + "⫅": { + math: "\\subseteqq" +}, + "⫅̸": { + math: "\\nsubseteqq" +}, + "⫆": { + math: "\\supseteqq" +}, + "⫆̸": { + math: "\\nsupseteqq" +}, + "⫇": { + math: "\\subsim" +}, + "⫈": { + math: "\\supsim" +}, + "⫉": { + math: "\\subsetapprox" +}, + "⫊": { + math: "\\supsetapprox" +}, + "⫋": { + math: "\\subsetneqq" +}, + "⫌": { + math: "\\supsetneqq" +}, + "⫍": { + math: "\\lsqhook" +}, + "⫎": { + math: "\\rsqhook" +}, + "⫏": { + math: "\\csub" +}, + "⫐": { + math: "\\csup" +}, + "⫑": { + math: "\\csube" +}, + "⫒": { + math: "\\csupe" +}, + "⫓": { + math: "\\subsup" +}, + "⫔": { + math: "\\supsub" +}, + "⫕": { + math: "\\subsub" +}, + "⫖": { + math: "\\supsup" +}, + "⫗": { + math: "\\suphsub" +}, + "⫘": { + math: "\\supdsub" +}, + "⫙": { + math: "\\forkv" +}, + "⫚": { + math: "\\topfork" +}, + "⫛": { + math: "\\mlcp" +}, + "⫝̸": { + math: "\\forks" +}, + "⫝": { + math: "\\forksnot" +}, + "⫝̸": { + math: "\\forks" +}, + "⫞": { + math: "\\shortlefttack" +}, + "⫟": { + math: "\\shortdowntack" +}, + "⫠": { + math: "\\shortuptack" +}, + "⫡": { + math: "\\perps" +}, + "⫢": { + math: "\\vDdash" +}, + "⫣": { + math: "\\dashV" +}, + "⫤": { + math: "\\Dashv" +}, + "⫥": { + math: "\\DashV" +}, + "⫦": { + math: "\\varVdash" +}, + "⫧": { + math: "\\Barv" +}, + "⫨": { + math: "\\vBar" +}, + "⫩": { + math: "\\vBarv" +}, + "⫪": { + math: "\\Top" +}, + "⫬": { + math: "\\Not" +}, + "⫭": { + math: "\\bNot" +}, + "⫮": { + math: "\\revnmid" +}, + "⫯": { + math: "\\cirmid" +}, + "⫰": { + math: "\\midcir" +}, + "⫱": { + math: "\\topcir" +}, + "⫲": { + math: "\\nhpar" +}, + "⫳": { + math: "\\parsim" +}, + "⫴": { + math: "\\interleave" +}, + "⫵": { + math: "\\nhVvert" +}, + "⫶": { + math: "\\Elztdcol" +}, + "⫷": { + math: "\\lllnest" +}, + "⫸": { + math: "\\gggnest" +}, + "⫹": { + math: "\\leqqslant" +}, + "⫺": { + math: "\\geqqslant" +}, + "⫻": { + math: "\\trslash" +}, + "⫼": { + math: "\\biginterleave" +}, + "⫽": { + math: "{{/}\\!\\!{/}}" +}, + "⫽⃥": { + math: "{\\rlap{\\textbackslash}{{/}\\!\\!{/}}}" +}, + "⫾": { + math: "\\talloblong" +}, + "⫿": { + math: "\\bigtalloblong" +}, + "⬒": { + math: "\\squaretopblack" +}, + "⬓": { + math: "\\squarebotblack" +}, + "⬔": { + math: "\\squareurblack" +}, + "⬕": { + math: "\\squarellblack" +}, + "⬖": { + math: "\\diamondleftblack" +}, + "⬗": { + math: "\\diamondrightblack" +}, + "⬘": { + math: "\\diamondtopblack" +}, + "⬙": { + math: "\\diamondbotblack" +}, + "⬚": { + math: "\\dottedsquare" +}, + "⬛": { + math: "\\blacksquare" +}, + "⬜": { + math: "\\square" +}, + "⬝": { + math: "\\vysmblksquare" +}, + "⬞": { + math: "\\vysmwhtsquare" +}, + "⬟": { + math: "\\pentagonblack" +}, + "⬠": { + math: "\\pentagon" +}, + "⬡": { + math: "\\varhexagon" +}, + "⬢": { + math: "\\varhexagonblack" +}, + "⬣": { + math: "\\hexagonblack" +}, + "⬤": { + math: "\\lgblkcircle" +}, + "⬥": { + math: "\\mdblkdiamond" +}, + "⬦": { + math: "\\mdwhtdiamond" +}, + "⬧": { + math: "\\mdblklozenge" +}, + "⬨": { + math: "\\mdwhtlozenge" +}, + "⬩": { + math: "\\smblkdiamond" +}, + "⬪": { + math: "\\smblklozenge" +}, + "⬫": { + math: "\\smwhtlozenge" +}, + "⬬": { + math: "\\blkhorzoval" +}, + "⬭": { + math: "\\whthorzoval" +}, + "⬮": { + math: "\\blkvertoval" +}, + "⬯": { + math: "\\whtvertoval" +}, + "⬰": { + math: "\\circleonleftarrow" +}, + "⬱": { + math: "\\leftthreearrows" +}, + "⬲": { + math: "\\leftarrowonoplus" +}, + "⬳": { + math: "\\longleftsquigarrow" +}, + "⬴": { + math: "\\nvtwoheadleftarrow" +}, + "⬵": { + math: "\\nVtwoheadleftarrow" +}, + "⬶": { + math: "\\twoheadmapsfrom" +}, + "⬷": { + math: "\\twoheadleftdbkarrow" +}, + "⬸": { + math: "\\leftdotarrow" +}, + "⬹": { + math: "\\nvleftarrowtail" +}, + "⬺": { + math: "\\nVleftarrowtail" +}, + "⬻": { + math: "\\twoheadleftarrowtail" +}, + "⬼": { + math: "\\nvtwoheadleftarrowtail" +}, + "⬽": { + math: "\\nVtwoheadleftarrowtail" +}, + "⬾": { + math: "\\leftarrowx" +}, + "⬿": { + math: "\\leftcurvedarrow" +}, + "⭀": { + math: "\\equalleftarrow" +}, + "⭁": { + math: "\\bsimilarleftarrow" +}, + "⭂": { + math: "\\leftarrowbackapprox" +}, + "⭃": { + math: "\\rightarrowgtr" +}, + "⭄": { + math: "\\rightarrowsupset" +}, + "⭅": { + math: "\\LLeftarrow" +}, + "⭆": { + math: "\\RRightarrow" +}, + "⭇": { + math: "\\bsimilarrightarrow" +}, + "⭈": { + math: "\\rightarrowbackapprox" +}, + "⭉": { + math: "\\similarleftarrow" +}, + "⭊": { + math: "\\leftarrowapprox" +}, + "⭋": { + math: "\\leftarrowbsimilar" +}, + "⭌": { + math: "\\rightarrowbsimilar" +}, + "⭐": { + math: "\\medwhitestar" +}, + "⭑": { + math: "\\medblackstar" +}, + "⭒": { + math: "\\smwhitestar" +}, + "⭓": { + math: "\\rightpentagonblack" +}, + "⭔": { + math: "\\rightpentagon" +}, + "〈": { + math: "\\langle" +}, + "〉": { + math: "\\rangle" +}, + "〒": { + math: "\\postalmark" +}, + "〔": { + math: "\\lbrbrak" +}, + "〕": { + math: "\\rbrbrak" +}, + "〚": { + math: "\\openbracketleft" +}, + "〛": { + math: "\\openbracketright" +}, + "〰": { + math: "\\hzigzag" +}, + "ff": { + text: "ff" +}, + "fi": { + text: "fi" +}, + "fl": { + text: "fl" +}, + "ffi": { + text: "ffi" +}, + "ffl": { + text: "ffl" +}, + "ſt": { + text: "st" +}, + "st": { + text: "st" +}, + "�": { + text: "\\dbend", + commandspacer: true +}, + "𝐀": { + math: "\\mathbf{A}" +}, + "𝐁": { + math: "\\mathbf{B}" +}, + "𝐂": { + math: "\\mathbf{C}" +}, + "𝐃": { + math: "\\mathbf{D}" +}, + "𝐄": { + math: "\\mathbf{E}" +}, + "𝐅": { + math: "\\mathbf{F}" +}, + "𝐆": { + math: "\\mathbf{G}" +}, + "𝐇": { + math: "\\mathbf{H}" +}, + "𝐈": { + math: "\\mathbf{I}" +}, + "𝐉": { + math: "\\mathbf{J}" +}, + "𝐊": { + math: "\\mathbf{K}" +}, + "𝐋": { + math: "\\mathbf{L}" +}, + "𝐌": { + math: "\\mathbf{M}" +}, + "𝐍": { + math: "\\mathbf{N}" +}, + "𝐎": { + math: "\\mathbf{O}" +}, + "𝐏": { + math: "\\mathbf{P}" +}, + "𝐐": { + math: "\\mathbf{Q}" +}, + "𝐑": { + math: "\\mathbf{R}" +}, + "𝐒": { + math: "\\mathbf{S}" +}, + "𝐓": { + math: "\\mathbf{T}" +}, + "𝐔": { + math: "\\mathbf{U}" +}, + "𝐕": { + math: "\\mathbf{V}" +}, + "𝐖": { + math: "\\mathbf{W}" +}, + "𝐗": { + math: "\\mathbf{X}" +}, + "𝐘": { + math: "\\mathbf{Y}" +}, + "𝐙": { + math: "\\mathbf{Z}" +}, + "𝐚": { + math: "\\mathbf{a}" +}, + "𝐛": { + math: "\\mathbf{b}" +}, + "𝐜": { + math: "\\mathbf{c}" +}, + "𝐝": { + math: "\\mathbf{d}" +}, + "𝐞": { + math: "\\mathbf{e}" +}, + "𝐟": { + math: "\\mathbf{f}" +}, + "𝐠": { + math: "\\mathbf{g}" +}, + "𝐡": { + math: "\\mathbf{h}" +}, + "𝐢": { + math: "\\mathbf{i}" +}, + "𝐣": { + math: "\\mathbf{j}" +}, + "𝐤": { + math: "\\mathbf{k}" +}, + "𝐥": { + math: "\\mathbf{l}" +}, + "𝐦": { + math: "\\mathbf{m}" +}, + "𝐧": { + math: "\\mathbf{n}" +}, + "𝐨": { + math: "\\mathbf{o}" +}, + "𝐩": { + math: "\\mathbf{p}" +}, + "𝐪": { + math: "\\mathbf{q}" +}, + "𝐫": { + math: "\\mathbf{r}" +}, + "𝐬": { + math: "\\mathbf{s}" +}, + "𝐭": { + math: "\\mathbf{t}" +}, + "𝐮": { + math: "\\mathbf{u}" +}, + "𝐯": { + math: "\\mathbf{v}" +}, + "𝐰": { + math: "\\mathbf{w}" +}, + "𝐱": { + math: "\\mathbf{x}" +}, + "𝐲": { + math: "\\mathbf{y}" +}, + "𝐳": { + math: "\\mathbf{z}" +}, + "𝐴": { + math: "\\mathsl{A}" +}, + "𝐵": { + math: "\\mathsl{B}" +}, + "𝐶": { + math: "\\mathsl{C}" +}, + "𝐷": { + math: "\\mathsl{D}" +}, + "𝐸": { + math: "\\mathsl{E}" +}, + "𝐹": { + math: "\\mathsl{F}" +}, + "𝐺": { + math: "\\mathsl{G}" +}, + "𝐻": { + math: "\\mathsl{H}" +}, + "𝐼": { + math: "\\mathsl{I}" +}, + "𝐽": { + math: "\\mathsl{J}" +}, + "𝐾": { + math: "\\mathsl{K}" +}, + "𝐿": { + math: "\\mathsl{L}" +}, + "𝑀": { + math: "\\mathsl{M}" +}, + "𝑁": { + math: "\\mathsl{N}" +}, + "𝑂": { + math: "\\mathsl{O}" +}, + "𝑃": { + math: "\\mathsl{P}" +}, + "𝑄": { + math: "\\mathsl{Q}" +}, + "𝑅": { + math: "\\mathsl{R}" +}, + "𝑆": { + math: "\\mathsl{S}" +}, + "𝑇": { + math: "\\mathsl{T}" +}, + "𝑈": { + math: "\\mathsl{U}" +}, + "𝑉": { + math: "\\mathsl{V}" +}, + "𝑊": { + math: "\\mathsl{W}" +}, + "𝑋": { + math: "\\mathsl{X}" +}, + "𝑌": { + math: "\\mathsl{Y}" +}, + "𝑍": { + math: "\\mathsl{Z}" +}, + "𝑎": { + math: "\\mathsl{a}" +}, + "𝑏": { + math: "\\mathsl{b}" +}, + "𝑐": { + math: "\\mathsl{c}" +}, + "𝑑": { + math: "\\mathsl{d}" +}, + "𝑒": { + math: "\\mathsl{e}" +}, + "𝑓": { + math: "\\mathsl{f}" +}, + "𝑔": { + math: "\\mathsl{g}" +}, + "𝑖": { + math: "\\mathsl{i}" +}, + "𝑗": { + math: "\\mathsl{j}" +}, + "𝑘": { + math: "\\mathsl{k}" +}, + "𝑙": { + math: "\\mathsl{l}" +}, + "𝑚": { + math: "\\mathsl{m}" +}, + "𝑛": { + math: "\\mathsl{n}" +}, + "𝑜": { + math: "\\mathsl{o}" +}, + "𝑝": { + math: "\\mathsl{p}" +}, + "𝑞": { + math: "\\mathsl{q}" +}, + "𝑟": { + math: "\\mathsl{r}" +}, + "𝑠": { + math: "\\mathsl{s}" +}, + "𝑡": { + math: "\\mathsl{t}" +}, + "𝑢": { + math: "\\mathsl{u}" +}, + "𝑣": { + math: "\\mathsl{v}" +}, + "𝑤": { + math: "\\mathsl{w}" +}, + "𝑥": { + math: "\\mathsl{x}" +}, + "𝑦": { + math: "\\mathsl{y}" +}, + "𝑧": { + math: "\\mathsl{z}" +}, + "𝑨": { + math: "\\mathbit{A}" +}, + "𝑩": { + math: "\\mathbit{B}" +}, + "𝑪": { + math: "\\mathbit{C}" +}, + "𝑫": { + math: "\\mathbit{D}" +}, + "𝑬": { + math: "\\mathbit{E}" +}, + "𝑭": { + math: "\\mathbit{F}" +}, + "𝑮": { + math: "\\mathbit{G}" +}, + "𝑯": { + math: "\\mathbit{H}" +}, + "𝑰": { + math: "\\mathbit{I}" +}, + "𝑱": { + math: "\\mathbit{J}" +}, + "𝑲": { + math: "\\mathbit{K}" +}, + "𝑳": { + math: "\\mathbit{L}" +}, + "𝑴": { + math: "\\mathbit{M}" +}, + "𝑵": { + math: "\\mathbit{N}" +}, + "𝑶": { + math: "\\mathbit{O}" +}, + "𝑷": { + math: "\\mathbit{P}" +}, + "𝑸": { + math: "\\mathbit{Q}" +}, + "𝑹": { + math: "\\mathbit{R}" +}, + "𝑺": { + math: "\\mathbit{S}" +}, + "𝑻": { + math: "\\mathbit{T}" +}, + "𝑼": { + math: "\\mathbit{U}" +}, + "𝑽": { + math: "\\mathbit{V}" +}, + "𝑾": { + math: "\\mathbit{W}" +}, + "𝑿": { + math: "\\mathbit{X}" +}, + "𝒀": { + math: "\\mathbit{Y}" +}, + "𝒁": { + math: "\\mathbit{Z}" +}, + "𝒂": { + math: "\\mathbit{a}" +}, + "𝒃": { + math: "\\mathbit{b}" +}, + "𝒄": { + math: "\\mathbit{c}" +}, + "𝒅": { + math: "\\mathbit{d}" +}, + "𝒆": { + math: "\\mathbit{e}" +}, + "𝒇": { + math: "\\mathbit{f}" +}, + "𝒈": { + math: "\\mathbit{g}" +}, + "𝒉": { + math: "\\mathbit{h}" +}, + "𝒊": { + math: "\\mathbit{i}" +}, + "𝒋": { + math: "\\mathbit{j}" +}, + "𝒌": { + math: "\\mathbit{k}" +}, + "𝒍": { + math: "\\mathbit{l}" +}, + "𝒎": { + math: "\\mathbit{m}" +}, + "𝒏": { + math: "\\mathbit{n}" +}, + "𝒐": { + math: "\\mathbit{o}" +}, + "𝒑": { + math: "\\mathbit{p}" +}, + "𝒒": { + math: "\\mathbit{q}" +}, + "𝒓": { + math: "\\mathbit{r}" +}, + "𝒔": { + math: "\\mathbit{s}" +}, + "𝒕": { + math: "\\mathbit{t}" +}, + "𝒖": { + math: "\\mathbit{u}" +}, + "𝒗": { + math: "\\mathbit{v}" +}, + "𝒘": { + math: "\\mathbit{w}" +}, + "𝒙": { + math: "\\mathbit{x}" +}, + "𝒚": { + math: "\\mathbit{y}" +}, + "𝒛": { + math: "\\mathbit{z}" +}, + "𝒜": { + math: "\\mathscr{A}" +}, + "𝒞": { + math: "\\mathscr{C}" +}, + "𝒟": { + math: "\\mathscr{D}" +}, + "𝒢": { + math: "\\mathscr{G}" +}, + "𝒥": { + math: "\\mathscr{J}" +}, + "𝒦": { + math: "\\mathscr{K}" +}, + "𝒩": { + math: "\\mathscr{N}" +}, + "𝒪": { + math: "\\mathscr{O}" +}, + "𝒫": { + math: "\\mathscr{P}" +}, + "𝒬": { + math: "\\mathscr{Q}" +}, + "𝒮": { + math: "\\mathscr{S}" +}, + "𝒯": { + math: "\\mathscr{T}" +}, + "𝒰": { + math: "\\mathscr{U}" +}, + "𝒱": { + math: "\\mathscr{V}" +}, + "𝒲": { + math: "\\mathscr{W}" +}, + "𝒳": { + math: "\\mathscr{X}" +}, + "𝒴": { + math: "\\mathscr{Y}" +}, + "𝒵": { + math: "\\mathscr{Z}" +}, + "𝒶": { + math: "\\mathscr{a}" +}, + "𝒷": { + math: "\\mathscr{b}" +}, + "𝒸": { + math: "\\mathscr{c}" +}, + "𝒹": { + math: "\\mathscr{d}" +}, + "𝒻": { + math: "\\mathscr{f}" +}, + "𝒽": { + math: "\\mathscr{h}" +}, + "𝒾": { + math: "\\mathscr{i}" +}, + "𝒿": { + math: "\\mathscr{j}" +}, + "𝓀": { + math: "\\mathscr{k}" +}, + "𝓁": { + math: "\\mathscr{l}" +}, + "𝓂": { + math: "\\mathscr{m}" +}, + "𝓃": { + math: "\\mathscr{n}" +}, + "𝓅": { + math: "\\mathscr{p}" +}, + "𝓆": { + math: "\\mathscr{q}" +}, + "𝓇": { + math: "\\mathscr{r}" +}, + "𝓈": { + math: "\\mathscr{s}" +}, + "𝓉": { + math: "\\mathscr{t}" +}, + "𝓊": { + math: "\\mathscr{u}" +}, + "𝓋": { + math: "\\mathscr{v}" +}, + "𝓌": { + math: "\\mathscr{w}" +}, + "𝓍": { + math: "\\mathscr{x}" +}, + "𝓎": { + math: "\\mathscr{y}" +}, + "𝓏": { + math: "\\mathscr{z}" +}, + "𝓐": { + math: "\\mathmit{A}" +}, + "𝓑": { + math: "\\mathmit{B}" +}, + "𝓒": { + math: "\\mathmit{C}" +}, + "𝓓": { + math: "\\mathmit{D}" +}, + "𝓔": { + math: "\\mathmit{E}" +}, + "𝓕": { + math: "\\mathmit{F}" +}, + "𝓖": { + math: "\\mathmit{G}" +}, + "𝓗": { + math: "\\mathmit{H}" +}, + "𝓘": { + math: "\\mathmit{I}" +}, + "𝓙": { + math: "\\mathmit{J}" +}, + "𝓚": { + math: "\\mathmit{K}" +}, + "𝓛": { + math: "\\mathmit{L}" +}, + "𝓜": { + math: "\\mathmit{M}" +}, + "𝓝": { + math: "\\mathmit{N}" +}, + "𝓞": { + math: "\\mathmit{O}" +}, + "𝓟": { + math: "\\mathmit{P}" +}, + "𝓠": { + math: "\\mathmit{Q}" +}, + "𝓡": { + math: "\\mathmit{R}" +}, + "𝓢": { + math: "\\mathmit{S}" +}, + "𝓣": { + math: "\\mathmit{T}" +}, + "𝓤": { + math: "\\mathmit{U}" +}, + "𝓥": { + math: "\\mathmit{V}" +}, + "𝓦": { + math: "\\mathmit{W}" +}, + "𝓧": { + math: "\\mathmit{X}" +}, + "𝓨": { + math: "\\mathmit{Y}" +}, + "𝓩": { + math: "\\mathmit{Z}" +}, + "𝓪": { + math: "\\mathmit{a}" +}, + "𝓫": { + math: "\\mathmit{b}" +}, + "𝓬": { + math: "\\mathmit{c}" +}, + "𝓭": { + math: "\\mathmit{d}" +}, + "𝓮": { + math: "\\mathmit{e}" +}, + "𝓯": { + math: "\\mathmit{f}" +}, + "𝓰": { + math: "\\mathmit{g}" +}, + "𝓱": { + math: "\\mathmit{h}" +}, + "𝓲": { + math: "\\mathmit{i}" +}, + "𝓳": { + math: "\\mathmit{j}" +}, + "𝓴": { + math: "\\mathmit{k}" +}, + "𝓵": { + math: "\\mathmit{l}" +}, + "𝓶": { + math: "\\mathmit{m}" +}, + "𝓷": { + math: "\\mathmit{n}" +}, + "𝓸": { + math: "\\mathmit{o}" +}, + "𝓹": { + math: "\\mathmit{p}" +}, + "𝓺": { + math: "\\mathmit{q}" +}, + "𝓻": { + math: "\\mathmit{r}" +}, + "𝓼": { + math: "\\mathmit{s}" +}, + "𝓽": { + math: "\\mathmit{t}" +}, + "𝓾": { + math: "\\mathmit{u}" +}, + "𝓿": { + math: "\\mathmit{v}" +}, + "𝔀": { + math: "\\mathmit{w}" +}, + "𝔁": { + math: "\\mathmit{x}" +}, + "𝔂": { + math: "\\mathmit{y}" +}, + "𝔃": { + math: "\\mathmit{z}" +}, + "𝔄": { + math: "\\mathfrak{A}" +}, + "𝔅": { + math: "\\mathfrak{B}" +}, + "𝔇": { + math: "\\mathfrak{D}" +}, + "𝔈": { + math: "\\mathfrak{E}" +}, + "𝔉": { + math: "\\mathfrak{F}" +}, + "𝔊": { + math: "\\mathfrak{G}" +}, + "𝔍": { + math: "\\mathfrak{J}" +}, + "𝔎": { + math: "\\mathfrak{K}" +}, + "𝔏": { + math: "\\mathfrak{L}" +}, + "𝔐": { + math: "\\mathfrak{M}" +}, + "𝔑": { + math: "\\mathfrak{N}" +}, + "𝔒": { + math: "\\mathfrak{O}" +}, + "𝔓": { + math: "\\mathfrak{P}" +}, + "𝔔": { + math: "\\mathfrak{Q}" +}, + "𝔖": { + math: "\\mathfrak{S}" +}, + "𝔗": { + math: "\\mathfrak{T}" +}, + "𝔘": { + math: "\\mathfrak{U}" +}, + "𝔙": { + math: "\\mathfrak{V}" +}, + "𝔚": { + math: "\\mathfrak{W}" +}, + "𝔛": { + math: "\\mathfrak{X}" +}, + "𝔜": { + math: "\\mathfrak{Y}" +}, + "𝔞": { + math: "\\mathfrak{a}" +}, + "𝔟": { + math: "\\mathfrak{b}" +}, + "𝔠": { + math: "\\mathfrak{c}" +}, + "𝔡": { + math: "\\mathfrak{d}" +}, + "𝔢": { + math: "\\mathfrak{e}" +}, + "𝔣": { + math: "\\mathfrak{f}" +}, + "𝔤": { + math: "\\mathfrak{g}" +}, + "𝔥": { + math: "\\mathfrak{h}" +}, + "𝔦": { + math: "\\mathfrak{i}" +}, + "𝔧": { + math: "\\mathfrak{j}" +}, + "𝔨": { + math: "\\mathfrak{k}" +}, + "𝔩": { + math: "\\mathfrak{l}" +}, + "𝔪": { + math: "\\mathfrak{m}" +}, + "𝔫": { + math: "\\mathfrak{n}" +}, + "𝔬": { + math: "\\mathfrak{o}" +}, + "𝔭": { + math: "\\mathfrak{p}" +}, + "𝔮": { + math: "\\mathfrak{q}" +}, + "𝔯": { + math: "\\mathfrak{r}" +}, + "𝔰": { + math: "\\mathfrak{s}" +}, + "𝔱": { + math: "\\mathfrak{t}" +}, + "𝔲": { + math: "\\mathfrak{u}" +}, + "𝔳": { + math: "\\mathfrak{v}" +}, + "𝔴": { + math: "\\mathfrak{w}" +}, + "𝔵": { + math: "\\mathfrak{x}" +}, + "𝔶": { + math: "\\mathfrak{y}" +}, + "𝔷": { + math: "\\mathfrak{z}" +}, + "𝔸": { + math: "\\mathbb{A}" +}, + "𝔹": { + math: "\\mathbb{B}" +}, + "𝔻": { + math: "\\mathbb{D}" +}, + "𝔼": { + math: "\\mathbb{E}" +}, + "𝔽": { + math: "\\mathbb{F}" +}, + "𝔾": { + math: "\\mathbb{G}" +}, + "𝕀": { + math: "\\mathbb{I}" +}, + "𝕁": { + math: "\\mathbb{J}" +}, + "𝕂": { + math: "\\mathbb{K}" +}, + "𝕃": { + math: "\\mathbb{L}" +}, + "𝕄": { + math: "\\mathbb{M}" +}, + "𝕆": { + math: "\\mathbb{O}" +}, + "𝕊": { + math: "\\mathbb{S}" +}, + "𝕋": { + math: "\\mathbb{T}" +}, + "𝕌": { + math: "\\mathbb{U}" +}, + "𝕍": { + math: "\\mathbb{V}" +}, + "𝕎": { + math: "\\mathbb{W}" +}, + "𝕏": { + math: "\\mathbb{X}" +}, + "𝕐": { + math: "\\mathbb{Y}" +}, + "𝕒": { + math: "\\mathbb{a}" +}, + "𝕓": { + math: "\\mathbb{b}" +}, + "𝕔": { + math: "\\mathbb{c}" +}, + "𝕕": { + math: "\\mathbb{d}" +}, + "𝕖": { + math: "\\mathbb{e}" +}, + "𝕗": { + math: "\\mathbb{f}" +}, + "𝕘": { + math: "\\mathbb{g}" +}, + "𝕙": { + math: "\\mathbb{h}" +}, + "𝕚": { + math: "\\mathbb{i}" +}, + "𝕛": { + math: "\\mathbb{j}" +}, + "𝕜": { + math: "\\mathbb{k}" +}, + "𝕝": { + math: "\\mathbb{l}" +}, + "𝕞": { + math: "\\mathbb{m}" +}, + "𝕟": { + math: "\\mathbb{n}" +}, + "𝕠": { + math: "\\mathbb{o}" +}, + "𝕡": { + math: "\\mathbb{p}" +}, + "𝕢": { + math: "\\mathbb{q}" +}, + "𝕣": { + math: "\\mathbb{r}" +}, + "𝕤": { + math: "\\mathbb{s}" +}, + "𝕥": { + math: "\\mathbb{t}" +}, + "𝕦": { + math: "\\mathbb{u}" +}, + "𝕧": { + math: "\\mathbb{v}" +}, + "𝕨": { + math: "\\mathbb{w}" +}, + "𝕩": { + math: "\\mathbb{x}" +}, + "𝕪": { + math: "\\mathbb{y}" +}, + "𝕫": { + math: "\\mathbb{z}" +}, + "𝕬": { + math: "\\mathslbb{A}" +}, + "𝕭": { + math: "\\mathslbb{B}" +}, + "𝕮": { + math: "\\mathslbb{C}" +}, + "𝕯": { + math: "\\mathslbb{D}" +}, + "𝕰": { + math: "\\mathslbb{E}" +}, + "𝕱": { + math: "\\mathslbb{F}" +}, + "𝕲": { + math: "\\mathslbb{G}" +}, + "𝕳": { + math: "\\mathslbb{H}" +}, + "𝕴": { + math: "\\mathslbb{I}" +}, + "𝕵": { + math: "\\mathslbb{J}" +}, + "𝕶": { + math: "\\mathslbb{K}" +}, + "𝕷": { + math: "\\mathslbb{L}" +}, + "𝕸": { + math: "\\mathslbb{M}" +}, + "𝕹": { + math: "\\mathslbb{N}" +}, + "𝕺": { + math: "\\mathslbb{O}" +}, + "𝕻": { + math: "\\mathslbb{P}" +}, + "𝕼": { + math: "\\mathslbb{Q}" +}, + "𝕽": { + math: "\\mathslbb{R}" +}, + "𝕾": { + math: "\\mathslbb{S}" +}, + "𝕿": { + math: "\\mathslbb{T}" +}, + "𝖀": { + math: "\\mathslbb{U}" +}, + "𝖁": { + math: "\\mathslbb{V}" +}, + "𝖂": { + math: "\\mathslbb{W}" +}, + "𝖃": { + math: "\\mathslbb{X}" +}, + "𝖄": { + math: "\\mathslbb{Y}" +}, + "𝖅": { + math: "\\mathslbb{Z}" +}, + "𝖆": { + math: "\\mathslbb{a}" +}, + "𝖇": { + math: "\\mathslbb{b}" +}, + "𝖈": { + math: "\\mathslbb{c}" +}, + "𝖉": { + math: "\\mathslbb{d}" +}, + "𝖊": { + math: "\\mathslbb{e}" +}, + "𝖋": { + math: "\\mathslbb{f}" +}, + "𝖌": { + math: "\\mathslbb{g}" +}, + "𝖍": { + math: "\\mathslbb{h}" +}, + "𝖎": { + math: "\\mathslbb{i}" +}, + "𝖏": { + math: "\\mathslbb{j}" +}, + "𝖐": { + math: "\\mathslbb{k}" +}, + "𝖑": { + math: "\\mathslbb{l}" +}, + "𝖒": { + math: "\\mathslbb{m}" +}, + "𝖓": { + math: "\\mathslbb{n}" +}, + "𝖔": { + math: "\\mathslbb{o}" +}, + "𝖕": { + math: "\\mathslbb{p}" +}, + "𝖖": { + math: "\\mathslbb{q}" +}, + "𝖗": { + math: "\\mathslbb{r}" +}, + "𝖘": { + math: "\\mathslbb{s}" +}, + "𝖙": { + math: "\\mathslbb{t}" +}, + "𝖚": { + math: "\\mathslbb{u}" +}, + "𝖛": { + math: "\\mathslbb{v}" +}, + "𝖜": { + math: "\\mathslbb{w}" +}, + "𝖝": { + math: "\\mathslbb{x}" +}, + "𝖞": { + math: "\\mathslbb{y}" +}, + "𝖟": { + math: "\\mathslbb{z}" +}, + "𝖠": { + math: "\\mathsf{A}" +}, + "𝖡": { + math: "\\mathsf{B}" +}, + "𝖢": { + math: "\\mathsf{C}" +}, + "𝖣": { + math: "\\mathsf{D}" +}, + "𝖤": { + math: "\\mathsf{E}" +}, + "𝖥": { + math: "\\mathsf{F}" +}, + "𝖦": { + math: "\\mathsf{G}" +}, + "𝖧": { + math: "\\mathsf{H}" +}, + "𝖨": { + math: "\\mathsf{I}" +}, + "𝖩": { + math: "\\mathsf{J}" +}, + "𝖪": { + math: "\\mathsf{K}" +}, + "𝖫": { + math: "\\mathsf{L}" +}, + "𝖬": { + math: "\\mathsf{M}" +}, + "𝖭": { + math: "\\mathsf{N}" +}, + "𝖮": { + math: "\\mathsf{O}" +}, + "𝖯": { + math: "\\mathsf{P}" +}, + "𝖰": { + math: "\\mathsf{Q}" +}, + "𝖱": { + math: "\\mathsf{R}" +}, + "𝖲": { + math: "\\mathsf{S}" +}, + "𝖳": { + math: "\\mathsf{T}" +}, + "𝖴": { + math: "\\mathsf{U}" +}, + "𝖵": { + math: "\\mathsf{V}" +}, + "𝖶": { + math: "\\mathsf{W}" +}, + "𝖷": { + math: "\\mathsf{X}" +}, + "𝖸": { + math: "\\mathsf{Y}" +}, + "𝖹": { + math: "\\mathsf{Z}" +}, + "𝖺": { + math: "\\mathsf{a}" +}, + "𝖻": { + math: "\\mathsf{b}" +}, + "𝖼": { + math: "\\mathsf{c}" +}, + "𝖽": { + math: "\\mathsf{d}" +}, + "𝖾": { + math: "\\mathsf{e}" +}, + "𝖿": { + math: "\\mathsf{f}" +}, + "𝗀": { + math: "\\mathsf{g}" +}, + "𝗁": { + math: "\\mathsf{h}" +}, + "𝗂": { + math: "\\mathsf{i}" +}, + "𝗃": { + math: "\\mathsf{j}" +}, + "𝗄": { + math: "\\mathsf{k}" +}, + "𝗅": { + math: "\\mathsf{l}" +}, + "𝗆": { + math: "\\mathsf{m}" +}, + "𝗇": { + math: "\\mathsf{n}" +}, + "𝗈": { + math: "\\mathsf{o}" +}, + "𝗉": { + math: "\\mathsf{p}" +}, + "𝗊": { + math: "\\mathsf{q}" +}, + "𝗋": { + math: "\\mathsf{r}" +}, + "𝗌": { + math: "\\mathsf{s}" +}, + "𝗍": { + math: "\\mathsf{t}" +}, + "𝗎": { + math: "\\mathsf{u}" +}, + "𝗏": { + math: "\\mathsf{v}" +}, + "𝗐": { + math: "\\mathsf{w}" +}, + "𝗑": { + math: "\\mathsf{x}" +}, + "𝗒": { + math: "\\mathsf{y}" +}, + "𝗓": { + math: "\\mathsf{z}" +}, + "𝗔": { + math: "\\mathsfbf{A}" +}, + "𝗕": { + math: "\\mathsfbf{B}" +}, + "𝗖": { + math: "\\mathsfbf{C}" +}, + "𝗗": { + math: "\\mathsfbf{D}" +}, + "𝗘": { + math: "\\mathsfbf{E}" +}, + "𝗙": { + math: "\\mathsfbf{F}" +}, + "𝗚": { + math: "\\mathsfbf{G}" +}, + "𝗛": { + math: "\\mathsfbf{H}" +}, + "𝗜": { + math: "\\mathsfbf{I}" +}, + "𝗝": { + math: "\\mathsfbf{J}" +}, + "𝗞": { + math: "\\mathsfbf{K}" +}, + "𝗟": { + math: "\\mathsfbf{L}" +}, + "𝗠": { + math: "\\mathsfbf{M}" +}, + "𝗡": { + math: "\\mathsfbf{N}" +}, + "𝗢": { + math: "\\mathsfbf{O}" +}, + "𝗣": { + math: "\\mathsfbf{P}" +}, + "𝗤": { + math: "\\mathsfbf{Q}" +}, + "𝗥": { + math: "\\mathsfbf{R}" +}, + "𝗦": { + math: "\\mathsfbf{S}" +}, + "𝗧": { + math: "\\mathsfbf{T}" +}, + "𝗨": { + math: "\\mathsfbf{U}" +}, + "𝗩": { + math: "\\mathsfbf{V}" +}, + "𝗪": { + math: "\\mathsfbf{W}" +}, + "𝗫": { + math: "\\mathsfbf{X}" +}, + "𝗬": { + math: "\\mathsfbf{Y}" +}, + "𝗭": { + math: "\\mathsfbf{Z}" +}, + "𝗮": { + math: "\\mathsfbf{a}" +}, + "𝗯": { + math: "\\mathsfbf{b}" +}, + "𝗰": { + math: "\\mathsfbf{c}" +}, + "𝗱": { + math: "\\mathsfbf{d}" +}, + "𝗲": { + math: "\\mathsfbf{e}" +}, + "𝗳": { + math: "\\mathsfbf{f}" +}, + "𝗴": { + math: "\\mathsfbf{g}" +}, + "𝗵": { + math: "\\mathsfbf{h}" +}, + "𝗶": { + math: "\\mathsfbf{i}" +}, + "𝗷": { + math: "\\mathsfbf{j}" +}, + "𝗸": { + math: "\\mathsfbf{k}" +}, + "𝗹": { + math: "\\mathsfbf{l}" +}, + "𝗺": { + math: "\\mathsfbf{m}" +}, + "𝗻": { + math: "\\mathsfbf{n}" +}, + "𝗼": { + math: "\\mathsfbf{o}" +}, + "𝗽": { + math: "\\mathsfbf{p}" +}, + "𝗾": { + math: "\\mathsfbf{q}" +}, + "𝗿": { + math: "\\mathsfbf{r}" +}, + "𝘀": { + math: "\\mathsfbf{s}" +}, + "𝘁": { + math: "\\mathsfbf{t}" +}, + "𝘂": { + math: "\\mathsfbf{u}" +}, + "𝘃": { + math: "\\mathsfbf{v}" +}, + "𝘄": { + math: "\\mathsfbf{w}" +}, + "𝘅": { + math: "\\mathsfbf{x}" +}, + "𝘆": { + math: "\\mathsfbf{y}" +}, + "𝘇": { + math: "\\mathsfbf{z}" +}, + "𝘈": { + math: "\\mathsfsl{A}" +}, + "𝘉": { + math: "\\mathsfsl{B}" +}, + "𝘊": { + math: "\\mathsfsl{C}" +}, + "𝘋": { + math: "\\mathsfsl{D}" +}, + "𝘌": { + math: "\\mathsfsl{E}" +}, + "𝘍": { + math: "\\mathsfsl{F}" +}, + "𝘎": { + math: "\\mathsfsl{G}" +}, + "𝘏": { + math: "\\mathsfsl{H}" +}, + "𝘐": { + math: "\\mathsfsl{I}" +}, + "𝘑": { + math: "\\mathsfsl{J}" +}, + "𝘒": { + math: "\\mathsfsl{K}" +}, + "𝘓": { + math: "\\mathsfsl{L}" +}, + "𝘔": { + math: "\\mathsfsl{M}" +}, + "𝘕": { + math: "\\mathsfsl{N}" +}, + "𝘖": { + math: "\\mathsfsl{O}" +}, + "𝘗": { + math: "\\mathsfsl{P}" +}, + "𝘘": { + math: "\\mathsfsl{Q}" +}, + "𝘙": { + math: "\\mathsfsl{R}" +}, + "𝘚": { + math: "\\mathsfsl{S}" +}, + "𝘛": { + math: "\\mathsfsl{T}" +}, + "𝘜": { + math: "\\mathsfsl{U}" +}, + "𝘝": { + math: "\\mathsfsl{V}" +}, + "𝘞": { + math: "\\mathsfsl{W}" +}, + "𝘟": { + math: "\\mathsfsl{X}" +}, + "𝘠": { + math: "\\mathsfsl{Y}" +}, + "𝘡": { + math: "\\mathsfsl{Z}" +}, + "𝘢": { + math: "\\mathsfsl{a}" +}, + "𝘣": { + math: "\\mathsfsl{b}" +}, + "𝘤": { + math: "\\mathsfsl{c}" +}, + "𝘥": { + math: "\\mathsfsl{d}" +}, + "𝘦": { + math: "\\mathsfsl{e}" +}, + "𝘧": { + math: "\\mathsfsl{f}" +}, + "𝘨": { + math: "\\mathsfsl{g}" +}, + "𝘩": { + math: "\\mathsfsl{h}" +}, + "𝘪": { + math: "\\mathsfsl{i}" +}, + "𝘫": { + math: "\\mathsfsl{j}" +}, + "𝘬": { + math: "\\mathsfsl{k}" +}, + "𝘭": { + math: "\\mathsfsl{l}" +}, + "𝘮": { + math: "\\mathsfsl{m}" +}, + "𝘯": { + math: "\\mathsfsl{n}" +}, + "𝘰": { + math: "\\mathsfsl{o}" +}, + "𝘱": { + math: "\\mathsfsl{p}" +}, + "𝘲": { + math: "\\mathsfsl{q}" +}, + "𝘳": { + math: "\\mathsfsl{r}" +}, + "𝘴": { + math: "\\mathsfsl{s}" +}, + "𝘵": { + math: "\\mathsfsl{t}" +}, + "𝘶": { + math: "\\mathsfsl{u}" +}, + "𝘷": { + math: "\\mathsfsl{v}" +}, + "𝘸": { + math: "\\mathsfsl{w}" +}, + "𝘹": { + math: "\\mathsfsl{x}" +}, + "𝘺": { + math: "\\mathsfsl{y}" +}, + "𝘻": { + math: "\\mathsfsl{z}" +}, + "𝘼": { + math: "\\mathsfbfsl{A}" +}, + "𝘽": { + math: "\\mathsfbfsl{B}" +}, + "𝘾": { + math: "\\mathsfbfsl{C}" +}, + "𝘿": { + math: "\\mathsfbfsl{D}" +}, + "𝙀": { + math: "\\mathsfbfsl{E}" +}, + "𝙁": { + math: "\\mathsfbfsl{F}" +}, + "𝙂": { + math: "\\mathsfbfsl{G}" +}, + "𝙃": { + math: "\\mathsfbfsl{H}" +}, + "𝙄": { + math: "\\mathsfbfsl{I}" +}, + "𝙅": { + math: "\\mathsfbfsl{J}" +}, + "𝙆": { + math: "\\mathsfbfsl{K}" +}, + "𝙇": { + math: "\\mathsfbfsl{L}" +}, + "𝙈": { + math: "\\mathsfbfsl{M}" +}, + "𝙉": { + math: "\\mathsfbfsl{N}" +}, + "𝙊": { + math: "\\mathsfbfsl{O}" +}, + "𝙋": { + math: "\\mathsfbfsl{P}" +}, + "𝙌": { + math: "\\mathsfbfsl{Q}" +}, + "𝙍": { + math: "\\mathsfbfsl{R}" +}, + "𝙎": { + math: "\\mathsfbfsl{S}" +}, + "𝙏": { + math: "\\mathsfbfsl{T}" +}, + "𝙐": { + math: "\\mathsfbfsl{U}" +}, + "𝙑": { + math: "\\mathsfbfsl{V}" +}, + "𝙒": { + math: "\\mathsfbfsl{W}" +}, + "𝙓": { + math: "\\mathsfbfsl{X}" +}, + "𝙔": { + math: "\\mathsfbfsl{Y}" +}, + "𝙕": { + math: "\\mathsfbfsl{Z}" +}, + "𝙖": { + math: "\\mathsfbfsl{a}" +}, + "𝙗": { + math: "\\mathsfbfsl{b}" +}, + "𝙘": { + math: "\\mathsfbfsl{c}" +}, + "𝙙": { + math: "\\mathsfbfsl{d}" +}, + "𝙚": { + math: "\\mathsfbfsl{e}" +}, + "𝙛": { + math: "\\mathsfbfsl{f}" +}, + "𝙜": { + math: "\\mathsfbfsl{g}" +}, + "𝙝": { + math: "\\mathsfbfsl{h}" +}, + "𝙞": { + math: "\\mathsfbfsl{i}" +}, + "𝙟": { + math: "\\mathsfbfsl{j}" +}, + "𝙠": { + math: "\\mathsfbfsl{k}" +}, + "𝙡": { + math: "\\mathsfbfsl{l}" +}, + "𝙢": { + math: "\\mathsfbfsl{m}" +}, + "𝙣": { + math: "\\mathsfbfsl{n}" +}, + "𝙤": { + math: "\\mathsfbfsl{o}" +}, + "𝙥": { + math: "\\mathsfbfsl{p}" +}, + "𝙦": { + math: "\\mathsfbfsl{q}" +}, + "𝙧": { + math: "\\mathsfbfsl{r}" +}, + "𝙨": { + math: "\\mathsfbfsl{s}" +}, + "𝙩": { + math: "\\mathsfbfsl{t}" +}, + "𝙪": { + math: "\\mathsfbfsl{u}" +}, + "𝙫": { + math: "\\mathsfbfsl{v}" +}, + "𝙬": { + math: "\\mathsfbfsl{w}" +}, + "𝙭": { + math: "\\mathsfbfsl{x}" +}, + "𝙮": { + math: "\\mathsfbfsl{y}" +}, + "𝙯": { + math: "\\mathsfbfsl{z}" +}, + "𝙰": { + math: "\\mathtt{A}" +}, + "𝙱": { + math: "\\mathtt{B}" +}, + "𝙲": { + math: "\\mathtt{C}" +}, + "𝙳": { + math: "\\mathtt{D}" +}, + "𝙴": { + math: "\\mathtt{E}" +}, + "𝙵": { + math: "\\mathtt{F}" +}, + "𝙶": { + math: "\\mathtt{G}" +}, + "𝙷": { + math: "\\mathtt{H}" +}, + "𝙸": { + math: "\\mathtt{I}" +}, + "𝙹": { + math: "\\mathtt{J}" +}, + "𝙺": { + math: "\\mathtt{K}" +}, + "𝙻": { + math: "\\mathtt{L}" +}, + "𝙼": { + math: "\\mathtt{M}" +}, + "𝙽": { + math: "\\mathtt{N}" +}, + "𝙾": { + math: "\\mathtt{O}" +}, + "𝙿": { + math: "\\mathtt{P}" +}, + "𝚀": { + math: "\\mathtt{Q}" +}, + "𝚁": { + math: "\\mathtt{R}" +}, + "𝚂": { + math: "\\mathtt{S}" +}, + "𝚃": { + math: "\\mathtt{T}" +}, + "𝚄": { + math: "\\mathtt{U}" +}, + "𝚅": { + math: "\\mathtt{V}" +}, + "𝚆": { + math: "\\mathtt{W}" +}, + "𝚇": { + math: "\\mathtt{X}" +}, + "𝚈": { + math: "\\mathtt{Y}" +}, + "𝚉": { + math: "\\mathtt{Z}" +}, + "𝚊": { + math: "\\mathtt{a}" +}, + "𝚋": { + math: "\\mathtt{b}" +}, + "𝚌": { + math: "\\mathtt{c}" +}, + "𝚍": { + math: "\\mathtt{d}" +}, + "𝚎": { + math: "\\mathtt{e}" +}, + "𝚏": { + math: "\\mathtt{f}" +}, + "𝚐": { + math: "\\mathtt{g}" +}, + "𝚑": { + math: "\\mathtt{h}" +}, + "𝚒": { + math: "\\mathtt{i}" +}, + "𝚓": { + math: "\\mathtt{j}" +}, + "𝚔": { + math: "\\mathtt{k}" +}, + "𝚕": { + math: "\\mathtt{l}" +}, + "𝚖": { + math: "\\mathtt{m}" +}, + "𝚗": { + math: "\\mathtt{n}" +}, + "𝚘": { + math: "\\mathtt{o}" +}, + "𝚙": { + math: "\\mathtt{p}" +}, + "𝚚": { + math: "\\mathtt{q}" +}, + "𝚛": { + math: "\\mathtt{r}" +}, + "𝚜": { + math: "\\mathtt{s}" +}, + "𝚝": { + math: "\\mathtt{t}" +}, + "𝚞": { + math: "\\mathtt{u}" +}, + "𝚟": { + math: "\\mathtt{v}" +}, + "𝚠": { + math: "\\mathtt{w}" +}, + "𝚡": { + math: "\\mathtt{x}" +}, + "𝚢": { + math: "\\mathtt{y}" +}, + "𝚣": { + math: "\\mathtt{z}" +}, + "𝚤": { + math: "\\imath" +}, + "𝚥": { + math: "\\jmath" +}, + "𝚨": { + math: "\\mathbf{A}" +}, + "𝚩": { + math: "\\mathbf{B}" +}, + "𝚪": { + math: "\\mathbf{\\Gamma}" +}, + "𝚫": { + math: "\\mathbf{\\Delta}" +}, + "𝚬": { + math: "\\mathbf{E}" +}, + "𝚭": { + math: "\\mathbf{Z}" +}, + "𝚮": { + math: "\\mathbf{H}" +}, + "𝚯": { + math: "\\mathbf{\\Theta}" +}, + "𝚰": { + math: "\\mathbf{I}" +}, + "𝚱": { + math: "\\mathbf{K}" +}, + "𝚲": { + math: "\\mathbf{\\Lambda}" +}, + "𝚳": { + math: "M" +}, + "𝚴": { + math: "N" +}, + "𝚵": { + math: "\\mathbf{\\Xi}" +}, + "𝚶": { + math: "O" +}, + "𝚷": { + math: "\\mathbf{\\Pi}" +}, + "𝚸": { + math: "\\mathbf{P}" +}, + "𝚹": { + math: "\\mathbf{\\vartheta}" +}, + "𝚺": { + math: "\\mathbf{\\Sigma}" +}, + "𝚻": { + math: "\\mathbf{T}" +}, + "𝚼": { + math: "\\mathbf{\\Upsilon}" +}, + "𝚽": { + math: "\\mathbf{\\Phi}" +}, + "𝚾": { + math: "\\mathbf{X}" +}, + "𝚿": { + math: "\\mathbf{\\Psi}" +}, + "𝛀": { + math: "\\mathbf{\\Omega}" +}, + "𝛁": { + math: "\\mathbf{\\nabla}" +}, + "𝛂": { + math: "\\mathbf{\\alpha}" +}, + "𝛃": { + math: "\\mathbf{\\beta}" +}, + "𝛄": { + math: "\\mathbf{\\gamma}" +}, + "𝛅": { + math: "\\mathbf{\\delta}" +}, + "𝛆": { + math: "\\mathbf{\\epsilon}" +}, + "𝛇": { + math: "\\mathbf{\\zeta}" +}, + "𝛈": { + math: "\\mathbf{\\eta}" +}, + "𝛉": { + math: "\\mathbf{\\theta}" +}, + "𝛊": { + math: "\\mathbf{I}" +}, + "𝛋": { + math: "\\mathbf{K}" +}, + "𝛌": { + math: "\\mathbf{\\lambda}" +}, + "𝛍": { + math: "M" +}, + "𝛎": { + math: "N" +}, + "𝛏": { + math: "\\mathbf{\\xi}" +}, + "𝛐": { + math: "O" +}, + "𝛑": { + math: "\\mathbf{\\pi}" +}, + "𝛒": { + math: "\\mathbf{P}" +}, + "𝛓": { + math: "\\mathbf{\\varsigma}" +}, + "𝛔": { + math: "\\mathbf{\\sigma}" +}, + "𝛕": { + math: "\\mathbf{T}" +}, + "𝛖": { + math: "\\mathbf{\\upsilon}" +}, + "𝛗": { + math: "\\mathbf{\\phi}" +}, + "𝛘": { + math: "\\mathbf{X}" +}, + "𝛙": { + math: "\\mathbf{\\psi}" +}, + "𝛚": { + math: "\\mathbf{\\omega}" +}, + "𝛛": { + math: "\\partial" +}, + "𝛜": { + math: "\\in" +}, + "𝛝": { + math: "\\mathbf{\\vartheta}" +}, + "𝛞": { + math: "\\mathbf{\\varkappa}" +}, + "𝛟": { + math: "\\mathbf{\\phi}" +}, + "𝛠": { + math: "\\mathbf{\\varrho}" +}, + "𝛡": { + math: "\\mathbf{\\varpi}" +}, + "𝛢": { + math: "\\mathsl{A}" +}, + "𝛣": { + math: "\\mathsl{B}" +}, + "𝛤": { + math: "\\mathsl{\\Gamma}" +}, + "𝛥": { + math: "\\mathsl{\\Delta}" +}, + "𝛦": { + math: "\\mathsl{E}" +}, + "𝛧": { + math: "\\mathsl{Z}" +}, + "𝛨": { + math: "\\mathsl{H}" +}, + "𝛩": { + math: "\\mathsl{\\Theta}" +}, + "𝛪": { + math: "\\mathsl{I}" +}, + "𝛫": { + math: "\\mathsl{K}" +}, + "𝛬": { + math: "\\mathsl{\\Lambda}" +}, + "𝛭": { + math: "M" +}, + "𝛮": { + math: "N" +}, + "𝛯": { + math: "\\mathsl{\\Xi}" +}, + "𝛰": { + math: "O" +}, + "𝛱": { + math: "\\mathsl{\\Pi}" +}, + "𝛲": { + math: "\\mathsl{P}" +}, + "𝛳": { + math: "\\mathsl{\\Theta}" +}, + "𝛴": { + math: "\\mathsl{\\Sigma}" +}, + "𝛵": { + math: "\\mathsl{T}" +}, + "𝛶": { + math: "\\mathsl{\\Upsilon}" +}, + "𝛷": { + math: "\\mathsl{\\Phi}" +}, + "𝛸": { + math: "\\mathsl{X}" +}, + "𝛹": { + math: "\\mathsl{\\Psi}" +}, + "𝛺": { + math: "\\mathsl{\\Omega}" +}, + "𝛻": { + math: "\\mathsl{\\nabla}" +}, + "𝛼": { + math: "\\mathsl{A}" +}, + "𝛽": { + math: "\\mathsl{B}" +}, + "𝛾": { + math: "\\mathsl{\\gamma}" +}, + "𝛿": { + math: "\\mathsl{\\delta}" +}, + "𝜀": { + math: "\\mathsl{E}" +}, + "𝜁": { + math: "\\mathsl{Z}" +}, + "𝜂": { + math: "\\mathsl{H}" +}, + "𝜃": { + math: "\\mathsl{\\theta}" +}, + "𝜄": { + math: "\\mathsl{I}" +}, + "𝜅": { + math: "\\mathsl{K}" +}, + "𝜆": { + math: "\\mathsl{\\lambda}" +}, + "𝜇": { + math: "\\mu" +}, + "𝜈": { + math: "\\nu" +}, + "𝜉": { + math: "\\mathsl{\\xi}" +}, + "𝜊": { + math: "o" +}, + "𝜋": { + math: "\\mathsl{\\pi}" +}, + "𝜌": { + math: "\\mathsl{P}" +}, + "𝜍": { + math: "\\mathsl{\\varsigma}" +}, + "𝜎": { + math: "\\mathsl{\\sigma}" +}, + "𝜏": { + math: "\\mathsl{T}" +}, + "𝜐": { + math: "\\mathsl{\\upsilon}" +}, + "𝜑": { + math: "\\mathsl{\\varphi}" +}, + "𝜒": { + math: "\\mathsl{X}" +}, + "𝜓": { + math: "\\mathsl{\\psi}" +}, + "𝜔": { + math: "\\mathsl{\\omega}" +}, + "𝜕": { + math: "\\partial" +}, + "𝜖": { + math: "\\in" +}, + "𝜗": { + math: "\\mathsl{\\vartheta}" +}, + "𝜘": { + math: "\\mathsl{\\varkappa}" +}, + "𝜙": { + math: "\\mathsl{\\phi}" +}, + "𝜚": { + math: "\\mathsl{\\varrho}" +}, + "𝜛": { + math: "\\mathsl{\\varpi}" +}, + "𝜜": { + math: "\\mathbit{A}" +}, + "𝜝": { + math: "\\mathbit{B}" +}, + "𝜞": { + math: "\\mathbit{\\Gamma}" +}, + "𝜟": { + math: "\\mathbit{\\Delta}" +}, + "𝜠": { + math: "\\mathbit{E}" +}, + "𝜡": { + math: "\\mathbit{Z}" +}, + "𝜢": { + math: "\\mathbit{H}" +}, + "𝜣": { + math: "\\mathbit{\\Theta}" +}, + "𝜤": { + math: "\\mathbit{I}" +}, + "𝜥": { + math: "\\mathbit{K}" +}, + "𝜦": { + math: "\\mathbit{\\Lambda}" +}, + "𝜧": { + math: "M" +}, + "𝜨": { + math: "N" +}, + "𝜩": { + math: "\\mathbit{\\Xi}" +}, + "𝜪": { + math: "O" +}, + "𝜫": { + math: "\\mathbit{\\Pi}" +}, + "𝜬": { + math: "\\mathbit{P}" +}, + "𝜭": { + math: "\\mathbit{O}" +}, + "𝜮": { + math: "\\mathbit{\\Sigma}" +}, + "𝜯": { + math: "\\mathbit{T}" +}, + "𝜰": { + math: "\\mathbit{\\Upsilon}" +}, + "𝜱": { + math: "\\mathbit{\\Phi}" +}, + "𝜲": { + math: "\\mathbit{X}" +}, + "𝜳": { + math: "\\mathbit{\\Psi}" +}, + "𝜴": { + math: "\\mathbit{\\Omega}" +}, + "𝜵": { + math: "\\mathbit{\\nabla}" +}, + "𝜶": { + math: "\\mathbit{\\alpha}" +}, + "𝜷": { + math: "\\mathbit{\\beta}" +}, + "𝜸": { + math: "\\mathbit{\\gamma}" +}, + "𝜹": { + math: "\\mathbit{\\delta}" +}, + "𝜺": { + math: "\\mathbit{\\epsilon}" +}, + "𝜻": { + math: "\\mathbit{\\zeta}" +}, + "𝜼": { + math: "\\mathbit{\\eta}" +}, + "𝜽": { + math: "\\mathbit{\\theta}" +}, + "𝜾": { + math: "\\mathbit{\\imath}" +}, + "𝜿": { + math: "\\mathbit{\\kappa}" +}, + "𝝀": { + math: "\\mathbit{\\lambda}" +}, + "𝝁": { + math: "\\mu" +}, + "𝝂": { + math: "N" +}, + "𝝃": { + math: "\\mathbit{\\xi}" +}, + "𝝄": { + math: "O" +}, + "𝝅": { + math: "\\mathbit{\\pi}" +}, + "𝝆": { + math: "\\mathbit{\\rho}" +}, + "𝝇": { + math: "\\mathbit{\\varsigma}" +}, + "𝝈": { + math: "\\mathbit{\\sigma}" +}, + "𝝉": { + math: "\\mathbit{\\tau}" +}, + "𝝊": { + math: "\\mathbit{\\upsilon}" +}, + "𝝋": { + math: "\\mathbit{\\varphi}" +}, + "𝝌": { + math: "\\mathbit{\\chi}" +}, + "𝝍": { + math: "\\mathbit{\\psi}" +}, + "𝝎": { + math: "\\mathbit{\\omega}" +}, + "𝝏": { + math: "\\partial" +}, + "𝝐": { + math: "\\in" +}, + "𝝑": { + math: "\\mathbit{\\vartheta}" +}, + "𝝒": { + math: "\\mathbit{\\varkappa}" +}, + "𝝓": { + math: "\\mathbit{\\phi}" +}, + "𝝔": { + math: "\\mathbit{\\varrho}" +}, + "𝝕": { + math: "\\mathbit{\\varpi}" +}, + "𝝖": { + math: "\\mathsfbf{A}" +}, + "𝝗": { + math: "\\mathsfbf{B}" +}, + "𝝘": { + math: "\\mathsfbf{\\Gamma}" +}, + "𝝙": { + math: "\\mathsfbf{\\Delta}" +}, + "𝝚": { + math: "\\mathsfbf{E}" +}, + "𝝛": { + math: "\\mathsfbf{Z}" +}, + "𝝜": { + math: "\\mathsfbf{H}" +}, + "𝝝": { + math: "\\mathsfbf{\\Theta}" +}, + "𝝞": { + math: "\\mathsfbf{I}" +}, + "𝝟": { + math: "\\mathsfbf{K}" +}, + "𝝠": { + math: "\\mathsfbf{\\Lambda}" +}, + "𝝡": { + math: "M" +}, + "𝝢": { + math: "N" +}, + "𝝣": { + math: "\\mathsfbf{\\Xi}" +}, + "𝝤": { + math: "O" +}, + "𝝥": { + math: "\\mathsfbf{\\Pi}" +}, + "𝝦": { + math: "\\mathsfbf{P}" +}, + "𝝧": { + math: "\\mathsfbf{\\Theta}" +}, + "𝝨": { + math: "\\mathsfbf{\\Sigma}" +}, + "𝝩": { + math: "\\mathsfbf{T}" +}, + "𝝪": { + math: "\\mathsfbf{\\Upsilon}" +}, + "𝝫": { + math: "\\mathsfbf{\\Phi}" +}, + "𝝬": { + math: "\\mathsfbf{X}" +}, + "𝝭": { + math: "\\mathsfbf{\\Psi}" +}, + "𝝮": { + math: "\\mathsfbf{\\Omega}" +}, + "𝝯": { + math: "\\mathsfbf{\\nabla}" +}, + "𝝰": { + math: "\\mathsfbf{\\alpha}" +}, + "𝝱": { + math: "\\mathsfbf{\\beta}" +}, + "𝝲": { + math: "\\mathsfbf{\\gamma}" +}, + "𝝳": { + math: "\\mathsfbf{\\delta}" +}, + "𝝴": { + math: "\\mathsfbf{\\varepsilon}" +}, + "𝝵": { + math: "\\mathsfbf{\\zeta}" +}, + "𝝶": { + math: "\\mathsfbf{\\eta}" +}, + "𝝷": { + math: "\\mathsfbf{\\theta}" +}, + "𝝸": { + math: "\\mathsfbf{\\imath}" +}, + "𝝹": { + math: "\\mathsfbf{\\kappa}" +}, + "𝝺": { + math: "\\mathsfbf{\\lambda}" +}, + "𝝻": { + math: "\\mu" +}, + "𝝼": { + math: "\\nu" +}, + "𝝽": { + math: "\\mathsfbf{\\xi}" +}, + "𝝾": { + math: "o" +}, + "𝝿": { + math: "\\mathsfbf{\\pi}" +}, + "𝞀": { + math: "\\mathsfbf{\\rho}" +}, + "𝞁": { + math: "\\mathsfbf{\\varsigma}" +}, + "𝞂": { + math: "\\mathsfbf{\\sigma}" +}, + "𝞃": { + math: "\\mathsfbf{\\tau}" +}, + "𝞄": { + math: "\\mathsfbf{\\upsilon}" +}, + "𝞅": { + math: "\\mathsfbf{\\varphi}" +}, + "𝞆": { + math: "\\mathsfbf{\\chi}" +}, + "𝞇": { + math: "\\mathsfbf{\\psi}" +}, + "𝞈": { + math: "\\mathsfbf{\\omega}" +}, + "𝞉": { + math: "\\partial" +}, + "𝞊": { + math: "\\in" +}, + "𝞋": { + math: "\\mathsfbf{\\vartheta}" +}, + "𝞌": { + math: "\\mathsfbf{\\varkappa}" +}, + "𝞍": { + math: "\\mathsfbf{\\phi}" +}, + "𝞎": { + math: "\\mathsfbf{\\varrho}" +}, + "𝞏": { + math: "\\mathsfbf{\\varpi}" +}, + "𝞐": { + math: "\\mathsfbfsl{A}" +}, + "𝞑": { + math: "\\mathsfbfsl{B}" +}, + "𝞒": { + math: "\\mathsfbfsl{\\Gamma}" +}, + "𝞓": { + math: "\\mathsfbfsl{\\Delta}" +}, + "𝞔": { + math: "\\mathsfbfsl{E}" +}, + "𝞕": { + math: "\\mathsfbfsl{Z}" +}, + "𝞖": { + math: "\\mathsfbfsl{H}" +}, + "𝞗": { + math: "\\mathsfbfsl{\\Theta}" +}, + "𝞘": { + math: "\\mathsfbfsl{I}" +}, + "𝞙": { + math: "\\mathsfbfsl{K}" +}, + "𝞚": { + math: "\\mathsfbfsl{\\Lambda}" +}, + "𝞛": { + math: "\\mathsfbfsl{M}" +}, + "𝞜": { + math: "\\mathsfbfsl{N}" +}, + "𝞝": { + math: "\\mathsfbfsl{\\Xi}" +}, + "𝞞": { + math: "\\mathsfbfsl{O}" +}, + "𝞟": { + math: "\\mathsfbfsl{\\Pi}" +}, + "𝞠": { + math: "\\mathsfbfsl{P}" +}, + "𝞡": { + math: "\\mathsfbfsl{\\Theta}" +}, + "𝞢": { + math: "\\mathsfbfsl{\\Sigma}" +}, + "𝞣": { + math: "\\mathsfbfsl{T}" +}, + "𝞤": { + math: "\\mathsfbfsl{\\Upsilon}" +}, + "𝞥": { + math: "\\mathsfbfsl{\\Phi}" +}, + "𝞦": { + math: "\\mathsfbfsl{X}" +}, + "𝞧": { + math: "\\mathsfbfsl{\\Psi}" +}, + "𝞨": { + math: "\\mathsfbfsl{\\Omega}" +}, + "𝞩": { + math: "\\mathsfbfsl{\\nabla}" +}, + "𝞪": { + math: "\\mathsfbfsl{\\alpha}" +}, + "𝞫": { + math: "\\mathsfbfsl{\\beta}" +}, + "𝞬": { + math: "\\mathsfbfsl{\\gamma}" +}, + "𝞭": { + math: "\\mathsfbfsl{\\delta}" +}, + "𝞮": { + math: "\\mathsfbfsl{\\varepsilon}" +}, + "𝞯": { + math: "\\mathsfbfsl{\\zeta}" +}, + "𝞰": { + math: "\\mathsfbfsl{\\eta}" +}, + "𝞱": { + math: "\\mathsfbfsl{\\theta}" +}, + "𝞲": { + math: "\\mathsfbfsl{\\imath}" +}, + "𝞳": { + math: "\\mathsfbfsl{\\kappa}" +}, + "𝞴": { + math: "\\mathsfbfsl{\\lambda}" +}, + "𝞵": { + math: "\\mu" +}, + "𝞶": { + math: "\\nu" +}, + "𝞷": { + math: "\\mathsfbfsl{\\xi}" +}, + "𝞸": { + math: "o" +}, + "𝞹": { + math: "\\mathsfbfsl{\\pi}" +}, + "𝞺": { + math: "\\mathsfbfsl{\\rho}" +}, + "𝞻": { + math: "\\mathsfbfsl{\\varsigma}" +}, + "𝞼": { + math: "\\mathsfbfsl{\\sigma}" +}, + "𝞽": { + math: "\\mathsfbfsl{\\tau}" +}, + "𝞾": { + math: "\\mathsfbfsl{\\upsilon}" +}, + "𝞿": { + math: "\\mathsfbfsl{\\varphi}" +}, + "𝟀": { + math: "\\mathsfbfsl{\\chi}" +}, + "𝟁": { + math: "\\mathsfbfsl{\\psi}" +}, + "𝟂": { + math: "\\mathsfbfsl{\\omega}" +}, + "𝟃": { + math: "\\partial" +}, + "𝟄": { + math: "\\in" +}, + "𝟅": { + math: "\\mathsfbfsl{\\vartheta}" +}, + "𝟆": { + math: "\\mathsfbfsl{\\varkappa}" +}, + "𝟇": { + math: "\\mathsfbfsl{\\phi}" +}, + "𝟈": { + math: "\\mathsfbfsl{\\varrho}" +}, + "𝟉": { + math: "\\mathsfbfsl{\\varpi}" +}, + "𝟊": { + math: "\\mbfDigamma" +}, + "𝟋": { + math: "\\mbfdigamma" +}, + "𝟎": { + math: "\\mathbf{0}" +}, + "𝟏": { + math: "\\mathbf{1}" +}, + "𝟐": { + math: "\\mathbf{2}" +}, + "𝟑": { + math: "\\mathbf{3}" +}, + "𝟒": { + math: "\\mathbf{4}" +}, + "𝟓": { + math: "\\mathbf{5}" +}, + "𝟔": { + math: "\\mathbf{6}" +}, + "𝟕": { + math: "\\mathbf{7}" +}, + "𝟖": { + math: "\\mathbf{8}" +}, + "𝟗": { + math: "\\mathbf{9}" +}, + "𝟘": { + math: "\\mathbb{0}" +}, + "𝟙": { + math: "\\mathbb{1}" +}, + "𝟚": { + math: "\\mathbb{2}" +}, + "𝟛": { + math: "\\mathbb{3}" +}, + "𝟜": { + math: "\\mathbb{4}" +}, + "𝟝": { + math: "\\mathbb{5}" +}, + "𝟞": { + math: "\\mathbb{6}" +}, + "𝟟": { + math: "\\mathbb{7}" +}, + "𝟠": { + math: "\\mathbb{8}" +}, + "𝟡": { + math: "\\mathbb{9}" +}, + "𝟢": { + math: "\\mathsf{0}" +}, + "𝟣": { + math: "\\mathsf{1}" +}, + "𝟤": { + math: "\\mathsf{2}" +}, + "𝟥": { + math: "\\mathsf{3}" +}, + "𝟦": { + math: "\\mathsf{4}" +}, + "𝟧": { + math: "\\mathsf{5}" +}, + "𝟨": { + math: "\\mathsf{6}" +}, + "𝟩": { + math: "\\mathsf{7}" +}, + "𝟪": { + math: "\\mathsf{8}" +}, + "𝟫": { + math: "\\mathsf{9}" +}, + "𝟬": { + math: "\\mathsfbf{0}" +}, + "𝟭": { + math: "\\mathsfbf{1}" +}, + "𝟮": { + math: "\\mathsfbf{2}" +}, + "𝟯": { + math: "\\mathsfbf{3}" +}, + "𝟰": { + math: "\\mathsfbf{4}" +}, + "𝟱": { + math: "\\mathsfbf{5}" +}, + "𝟲": { + math: "\\mathsfbf{6}" +}, + "𝟳": { + math: "\\mathsfbf{7}" +}, + "𝟴": { + math: "\\mathsfbf{8}" +}, + "𝟵": { + math: "\\mathsfbf{9}" +}, + "𝟶": { + math: "\\mathtt{0}" +}, + "𝟷": { + math: "\\mathtt{1}" +}, + "𝟸": { + math: "\\mathtt{2}" +}, + "𝟹": { + math: "\\mathtt{3}" +}, + "𝟺": { + math: "\\mathtt{4}" +}, + "𝟻": { + math: "\\mathtt{5}" +}, + "𝟼": { + math: "\\mathtt{6}" +}, + "𝟽": { + math: "\\mathtt{7}" +}, + "𝟾": { + math: "\\mathtt{8}" +}, + "𝟿": { + math: "\\mathtt{9}" +} +}; + +var $$1 = { + math: "\\$", + text: "\\$" +}; +var _$1 = { + math: "\\_", + text: "\\_" +}; +var require$$1 = { + "#": { + math: "\\#", + text: "\\#" +}, + $: $$1, + "%": { + math: "\\%", + text: "\\%" +}, + "&": { + math: "\\&", + text: "\\&" +}, + "/​": { + text: "{\\slash}" +}, + "<": { + math: "<" +}, + ">": { + math: ">" +}, + "\\": { + math: "\\backslash", + text: "{\\textbackslash}" +}, + "^": { + math: "\\sphat", + text: "\\^" +}, + _: _$1, + "i︠a︡": { + text: "\\t{ia}" +}, + "{": { + math: "\\lbrace", + text: "\\{" +}, + "}": { + math: "\\rbrace", + text: "\\}" +}, + "~": { + math: "\\sptilde", + text: "{\\textasciitilde}" +}, + " ": { + math: "~", + space: true, + text: "~" +}, + "¡": { + text: "{\\textexclamdown}" +}, + "¢": { + math: "\\cent", + text: "{\\textcent}", + textpackages: [ + "textcomp" + ] +}, + "£": { + math: "\\pounds", + text: "{\\textsterling}", + textpackages: [ + "textcomp" + ] +}, + "¤": { + text: "{\\textcurrency}", + textpackages: [ + "textcomp" + ] +}, + "¥": { + math: "\\yen", + text: "{\\textyen}", + textpackages: [ + "textcomp" + ] +}, + "¦": { + text: "{\\textbrokenbar}", + textpackages: [ + "textcomp" + ] +}, + "§": { + text: "{\\textsection}", + textpackages: [ + "textcomp" + ] +}, + "¨": { + math: "\\spddot", + text: "{\\textasciidieresis}" +}, + "©": { + text: "{\\textcopyright}", + textpackages: [ + "textcomp" + ] +}, + "ª": { + text: "{\\textordfeminine}", + textpackages: [ + "textcomp" + ] +}, + "«": { + text: "{\\guillemotleft}" +}, + "¬": { + math: "\\lnot" +}, + "­": { + math: "\\-", + text: "\\-" +}, + "®": { + math: "\\circledR", + text: "{\\textregistered}", + textpackages: [ + "textcomp" + ] +}, + "¯": { + text: "{\\textasciimacron}" +}, + "°": { + math: "^\\circ", + text: "{\\textdegree}", + textpackages: [ + "textcomp" + ] +}, + "±": { + math: "\\pm" +}, + "²": { + math: "^{2}" +}, + "³": { + math: "^{3}" +}, + "´": { + text: "{\\textasciiacute}" +}, + "µ": { + text: "{\\textmu}" +}, + "¶": { + text: "{\\textparagraph}", + textpackages: [ + "textcomp" + ] +}, + "·": { + math: "\\cdot" +}, + "¸": { + text: "{\\c}" +}, + "¹": { + math: "^{1}" +}, + "º": { + text: "{\\textordmasculine}", + textpackages: [ + "textcomp" + ] +}, + "»": { + text: "{\\guillemotright}" +}, + "¼": { + math: "\\frac{1}{4}" +}, + "½": { + math: "\\frac{1}{2}" +}, + "¾": { + math: "\\frac{3}{4}" +}, + "¿": { + text: "{\\textquestiondown}" +}, + "À": { + text: "{\\`A}" +}, + "Á": { + text: "{\\'A}" +}, + "Â": { + text: "{\\^A}" +}, + "Ã": { + text: "{\\~A}" +}, + "Ä": { + text: "{\\\"A}" +}, + "Å": { + text: "{\\AA}" +}, + "Æ": { + text: "{\\AE}" +}, + "Ç": { + text: "{\\c C}" +}, + "È": { + text: "{\\`E}" +}, + "É": { + text: "{\\'E}" +}, + "Ê": { + text: "{\\^E}" +}, + "Ë": { + text: "{\\\"E}" +}, + "Ì": { + text: "{\\`I}" +}, + "Í": { + text: "{\\'I}" +}, + "Î": { + text: "{\\^I}" +}, + "Ï": { + text: "{\\\"I}" +}, + "Ð": { + text: "{\\DH}" +}, + "Ñ": { + text: "{\\~N}" +}, + "Ò": { + text: "{\\`O}" +}, + "Ó": { + text: "{\\'O}" +}, + "Ô": { + text: "{\\^O}" +}, + "Õ": { + text: "{\\~O}" +}, + "Ö": { + text: "{\\\"O}" +}, + "×": { + math: "\\times", + text: "{\\texttimes}" +}, + "Ø": { + text: "{\\O}" +}, + "Ù": { + text: "{\\`U}" +}, + "Ú": { + text: "{\\'U}" +}, + "Û": { + text: "{\\^U}" +}, + "Ü": { + text: "{\\\"U}" +}, + "Ý": { + text: "{\\'Y}" +}, + "Þ": { + text: "{\\TH}" +}, + "ß": { + text: "{\\ss}" +}, + "à": { + text: "{\\`a}" +}, + "á": { + text: "{\\'a}" +}, + "â": { + text: "{\\^a}" +}, + "ã": { + text: "{\\~a}" +}, + "ä": { + text: "{\\\"a}" +}, + "å": { + text: "{\\aa}" +}, + "æ": { + text: "{\\ae}" +}, + "ç": { + text: "{\\c c}" +}, + "è": { + text: "{\\`e}" +}, + "é": { + text: "{\\'e}" +}, + "ê": { + text: "{\\^e}" +}, + "ë": { + text: "{\\\"e}" +}, + "ì": { + text: "{\\`i}" +}, + "í": { + text: "{\\'i}" +}, + "î": { + text: "{\\^i}" +}, + "ï": { + text: "{\\\"i}" +}, + "ð": { + math: "\\eth", + mathpackages: [ + "amssymb", + "arevmath" + ], + text: "{\\dh}" +}, + "ñ": { + text: "{\\~n}" +}, + "ò": { + text: "{\\`o}" +}, + "ó": { + text: "{\\'o}" +}, + "ô": { + text: "{\\^o}" +}, + "õ": { + text: "{\\~o}" +}, + "ö": { + text: "{\\\"o}" +}, + "÷": { + math: "\\div" +}, + "ø": { + text: "{\\o}" +}, + "ù": { + text: "{\\`u}" +}, + "ú": { + text: "{\\'u}" +}, + "û": { + text: "{\\^u}" +}, + "ü": { + text: "{\\\"u}" +}, + "ý": { + text: "{\\'y}" +}, + "þ": { + text: "{\\th}" +}, + "ÿ": { + text: "{\\\"y}" +}, + "Ā": { + text: "{\\=A}" +}, + "ā": { + text: "{\\=a}" +}, + "Ă": { + text: "{\\u A}" +}, + "ă": { + text: "{\\u a}" +}, + "Ą": { + text: "{\\k{A}}" +}, + "ą": { + text: "{\\k{a}}" +}, + "Ć": { + text: "{\\'C}" +}, + "ć": { + text: "{\\'c}" +}, + "Ĉ": { + text: "{\\^C}" +}, + "ĉ": { + text: "{\\^c}" +}, + "Ċ": { + text: "{\\.C}" +}, + "ċ": { + text: "{\\.c}" +}, + "Č": { + text: "{\\v C}" +}, + "č": { + text: "{\\v c}" +}, + "Ď": { + text: "{\\v D}" +}, + "ď": { + text: "{\\v d}" +}, + "Đ": { + text: "{\\DJ}" +}, + "đ": { + text: "{\\dj}" +}, + "Ē": { + text: "{\\=E}" +}, + "ē": { + text: "{\\=e}" +}, + "Ĕ": { + text: "{\\u E}" +}, + "ĕ": { + text: "{\\u e}" +}, + "Ė": { + text: "{\\.E}" +}, + "ė": { + text: "{\\.e}" +}, + "Ę": { + text: "{\\k{E}}" +}, + "ę": { + text: "{\\k{e}}" +}, + "Ě": { + text: "{\\v E}" +}, + "ě": { + text: "{\\v e}" +}, + "Ĝ": { + text: "{\\^G}" +}, + "ĝ": { + text: "{\\^g}" +}, + "Ğ": { + text: "{\\u G}" +}, + "ğ": { + text: "{\\u g}" +}, + "Ġ": { + text: "{\\.G}" +}, + "ġ": { + text: "{\\.g}" +}, + "Ģ": { + text: "{\\c G}" +}, + "ģ": { + text: "{\\c g}" +}, + "Ĥ": { + text: "{\\^H}" +}, + "ĥ": { + text: "{\\^h}" +}, + "Ħ": { + text: "{\\fontencoding{LELA}\\selectfont\\char40}" +}, + "ħ": { + math: "\\Elzxh" +}, + "Ĩ": { + text: "{\\~I}" +}, + "ĩ": { + text: "{\\~i}" +}, + "Ī": { + text: "{\\=I}" +}, + "ī": { + text: "{\\=i}" +}, + "Ĭ": { + text: "{\\u I}" +}, + "ĭ": { + text: "{\\u \\i}" +}, + "Į": { + text: "{\\k{I}}" +}, + "į": { + text: "{\\k{i}}" +}, + "İ": { + text: "{\\.I}" +}, + "ı": { + math: "\\imath", + text: "{\\i}" +}, + "IJ": { + text: "IJ" +}, + "ij": { + text: "ij" +}, + "Ĵ": { + text: "{\\^J}" +}, + "ĵ": { + text: "{\\^\\j}" +}, + "Ķ": { + text: "{\\c K}" +}, + "ķ": { + text: "{\\c k}" +}, + "ĸ": { + text: "{\\fontencoding{LELA}\\selectfont\\char91}" +}, + "Ĺ": { + text: "{\\'L}" +}, + "ĺ": { + text: "{\\'l}" +}, + "Ļ": { + text: "{\\c L}" +}, + "ļ": { + text: "{\\c l}" +}, + "Ľ": { + text: "{\\v L}" +}, + "ľ": { + text: "{\\v l}" +}, + "Ŀ": { + text: "{\\fontencoding{LELA}\\selectfont\\char201}" +}, + "ŀ": { + text: "{\\fontencoding{LELA}\\selectfont\\char202}" +}, + "Ł": { + text: "{\\L}" +}, + "ł": { + text: "{\\l}" +}, + "Ń": { + text: "{\\'N}" +}, + "ń": { + text: "{\\'n}" +}, + "Ņ": { + text: "{\\c N}" +}, + "ņ": { + text: "{\\c n}" +}, + "Ň": { + text: "{\\v N}" +}, + "ň": { + text: "{\\v n}" +}, + "ʼn": { + text: "'n" +}, + "Ŋ": { + text: "{\\NG}" +}, + "ŋ": { + text: "{\\ng}" +}, + "Ō": { + text: "{\\=O}" +}, + "ō": { + text: "{\\=o}" +}, + "Ŏ": { + text: "{\\u O}" +}, + "ŏ": { + text: "{\\u o}" +}, + "Ő": { + text: "{\\H O}" +}, + "ő": { + text: "{\\H o}" +}, + "Œ": { + text: "{\\OE}" +}, + "œ": { + text: "{\\oe}" +}, + "Ŕ": { + text: "{\\'R}" +}, + "ŕ": { + text: "{\\'r}" +}, + "Ŗ": { + text: "{\\c R}" +}, + "ŗ": { + text: "{\\c r}" +}, + "Ř": { + text: "{\\v R}" +}, + "ř": { + text: "{\\v r}" +}, + "Ś": { + text: "{\\'S}" +}, + "ś": { + text: "{\\'s}" +}, + "Ŝ": { + text: "{\\^S}" +}, + "ŝ": { + text: "{\\^s}" +}, + "Ş": { + text: "{\\c S}" +}, + "ş": { + text: "{\\c s}" +}, + "Š": { + text: "{\\v S}" +}, + "š": { + text: "{\\v s}" +}, + "Ţ": { + text: "{\\c T}" +}, + "ţ": { + text: "{\\c t}" +}, + "Ť": { + text: "{\\v T}" +}, + "ť": { + text: "{\\v t}" +}, + "Ŧ": { + text: "{\\fontencoding{LELA}\\selectfont\\char47}" +}, + "ŧ": { + text: "{\\fontencoding{LELA}\\selectfont\\char63}" +}, + "Ũ": { + text: "{\\~U}" +}, + "ũ": { + text: "{\\~u}" +}, + "Ū": { + text: "{\\=U}" +}, + "ū": { + text: "{\\=u}" +}, + "Ŭ": { + text: "{\\u U}" +}, + "ŭ": { + text: "{\\u u}" +}, + "Ů": { + text: "{\\r{U}}" +}, + "ů": { + text: "{\\r{u}}" +}, + "Ű": { + text: "{\\H U}" +}, + "ű": { + text: "{\\H u}" +}, + "Ų": { + text: "{\\k{U}}" +}, + "ų": { + text: "{\\k{u}}" +}, + "Ŵ": { + text: "{\\^W}" +}, + "ŵ": { + text: "{\\^w}" +}, + "Ŷ": { + text: "{\\^Y}" +}, + "ŷ": { + text: "{\\^y}" +}, + "Ÿ": { + text: "{\\\"Y}" +}, + "Ź": { + text: "{\\'Z}" +}, + "ź": { + text: "{\\'z}" +}, + "Ż": { + text: "{\\.Z}" +}, + "ż": { + text: "{\\.z}" +}, + "Ž": { + text: "{\\v Z}" +}, + "ž": { + text: "{\\v z}" +}, + "ſ": { + text: "s" +}, + "ƒ": { + math: "f" +}, + "ƕ": { + text: "{\\texthvlig}" +}, + "ƞ": { + text: "{\\textnrleg}" +}, + "ƪ": { + text: "{\\textesh}" +}, + "Ƶ": { + math: "\\Zbar" +}, + "ƺ": { + text: "{\\fontencoding{LELA}\\selectfont\\char195}" +}, + "ǂ": { + text: "{\\textdoublepipe}" +}, + "Ǎ": { + text: "{\\v A}" +}, + "ǎ": { + text: "{\\v a}" +}, + "Ǐ": { + text: "{\\v I}" +}, + "ǐ": { + text: "{\\v i}" +}, + "Ǒ": { + text: "{\\v O}" +}, + "ǒ": { + text: "{\\v o}" +}, + "Ǔ": { + text: "{\\v U}" +}, + "ǔ": { + text: "{\\v u}" +}, + "Ǧ": { + text: "{\\v G}" +}, + "ǧ": { + text: "{\\v g}" +}, + "Ǩ": { + text: "{\\v K}" +}, + "ǩ": { + text: "{\\v k}" +}, + "Ǫ": { + text: "{\\k{O}}" +}, + "ǫ": { + text: "{\\k{o}}" +}, + "ǰ": { + text: "{\\v j}" +}, + "Ǵ": { + text: "{\\'G}" +}, + "ǵ": { + text: "{\\'g}" +}, + "Ȩ": { + text: "{\\c E}" +}, + "ȩ": { + text: "{\\c e}" +}, + "ȷ": { + math: "\\jmath" +}, + "ɐ": { + math: "\\Elztrna" +}, + "ɒ": { + math: "\\Elztrnsa" +}, + "ɔ": { + math: "\\Elzopeno" +}, + "ɖ": { + math: "\\Elzrtld" +}, + "ɘ": { + text: "{\\fontencoding{LEIP}\\selectfont\\char61}" +}, + "ə": { + math: "\\Elzschwa" +}, + "ɛ": { + math: "\\varepsilon" +}, + "ɡ": { + text: "g" +}, + "ɣ": { + math: "\\Elzpgamma" +}, + "ɤ": { + math: "\\Elzpbgam" +}, + "ɥ": { + math: "\\Elztrnh" +}, + "ɬ": { + math: "\\Elzbtdl" +}, + "ɭ": { + math: "\\Elzrtll" +}, + "ɯ": { + math: "\\Elztrnm" +}, + "ɰ": { + math: "\\Elztrnmlr" +}, + "ɱ": { + math: "\\Elzltlmr" +}, + "ɲ": { + text: "{\\Elzltln}" +}, + "ɳ": { + math: "\\Elzrtln" +}, + "ɷ": { + math: "\\Elzclomeg" +}, + "ɸ": { + text: "{\\textphi}" +}, + "ɹ": { + math: "\\Elztrnr" +}, + "ɺ": { + math: "\\Elztrnrl" +}, + "ɻ": { + math: "\\Elzrttrnr" +}, + "ɼ": { + math: "\\Elzrl" +}, + "ɽ": { + math: "\\Elzrtlr" +}, + "ɾ": { + math: "\\Elzfhr" +}, + "ɿ": { + text: "{\\fontencoding{LEIP}\\selectfont\\char202}" +}, + "ʂ": { + math: "\\Elzrtls" +}, + "ʃ": { + math: "\\Elzesh" +}, + "ʇ": { + math: "\\Elztrnt" +}, + "ʈ": { + math: "\\Elzrtlt" +}, + "ʊ": { + math: "\\Elzpupsil" +}, + "ʋ": { + math: "\\Elzpscrv" +}, + "ʌ": { + math: "\\Elzinvv" +}, + "ʍ": { + math: "\\Elzinvw" +}, + "ʎ": { + math: "\\Elztrny" +}, + "ʐ": { + math: "\\Elzrtlz" +}, + "ʒ": { + math: "\\Elzyogh" +}, + "ʔ": { + math: "\\Elzglst" +}, + "ʕ": { + math: "\\Elzreglst" +}, + "ʖ": { + math: "\\Elzinglst" +}, + "ʞ": { + text: "{\\textturnk}" +}, + "ʤ": { + math: "\\Elzdyogh" +}, + "ʧ": { + math: "\\Elztesh" +}, + "ʰ": { + math: "^{h}", + text: "\\textsuperscript{h}" +}, + "ʲ": { + math: "^{j}", + text: "\\textsuperscript{j}" +}, + "ʳ": { + math: "^{r}", + text: "\\textsuperscript{r}" +}, + "ʷ": { + math: "^{w}", + text: "\\textsuperscript{w}" +}, + "ʸ": { + math: "^{y}", + text: "\\textsuperscript{y}" +}, + "ʹ": { + text: "'" +}, + "ʻ": { + text: "'" +}, + "ʼ": { + text: "'" +}, + "ʽ": { + text: "'" +}, + "ʿ": { + text: "{\\lasp}", + textpackages: [ + "mathscinet" + ] +}, + "ˆ": { + text: "{\\textasciicircum}" +}, + "ˇ": { + text: "{\\textasciicaron}" +}, + "ˈ": { + math: "\\Elzverts" +}, + "ˉ": { + text: "-" +}, + "ˌ": { + math: "\\Elzverti" +}, + "ː": { + math: "\\Elzlmrk" +}, + "ˑ": { + math: "\\Elzhlmrk" +}, + "˒": { + math: "\\Elzsbrhr" +}, + "˓": { + math: "\\Elzsblhr" +}, + "˔": { + math: "\\Elzrais" +}, + "˕": { + math: "\\Elzlow" +}, + "˘": { + text: "{\\textasciibreve}" +}, + "˙": { + text: "{\\textperiodcentered}", + textpackages: [ + "textcomp" + ] +}, + "˚": { + text: "{\\r{}}" +}, + "˛": { + text: "{\\k{}}" +}, + "˜": { + text: "{\\texttildelow}" +}, + "˝": { + text: "{\\H{}}" +}, + "ˡ": { + math: "^{l}", + text: "\\textsuperscript{l}" +}, + "ˢ": { + math: "^{s}", + text: "\\textsuperscript{s}" +}, + "ˣ": { + math: "^{x}", + text: "\\textsuperscript{x}" +}, + "˥": { + text: "\\tone{55}" +}, + "˦": { + text: "\\tone{44}" +}, + "˧": { + text: "\\tone{33}" +}, + "˨": { + text: "\\tone{22}" +}, + "˩": { + text: "\\tone{11}" +}, + "̀": { + math: "\\grave", + combiningdiacritic: true, + text: "\\`" +}, + "̀̄": { + text: "{\\textgravemacron}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̄̀": { + text: "{\\textgravemacron}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̀̇": { + text: "{\\textgravedot}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̇̀": { + text: "{\\textgravedot}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "́": { + math: "\\acute", + combiningdiacritic: true, + text: "\\'" +}, + "́̄": { + text: "{\\textacutemacron}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̄́": { + text: "{\\textacutemacron}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "́̌": { + text: "{\\textacutewedge}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̌́": { + text: "{\\textacutewedge}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̂": { + math: "\\hat", + combiningdiacritic: true, + text: "\\^" +}, + "̂̇": { + text: "{\\textcircumdot}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̇̂": { + text: "{\\textcircumdot}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̃": { + math: "\\tilde", + combiningdiacritic: true, + text: "\\~" +}, + "̃̇": { + text: "{\\texttildedot}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̇̃": { + text: "{\\texttildedot}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̄": { + math: "\\bar", + combiningdiacritic: true, + text: "\\=" +}, + "̅": { + math: "\\overline", + combiningdiacritic: true +}, + "̆": { + math: "\\breve", + combiningdiacritic: true, + text: "{\\u}" +}, + "̆̄": { + text: "{\\textbrevemacron}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̄̆": { + text: "{\\textbrevemacron}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̇": { + math: "\\dot", + combiningdiacritic: true, + text: "\\." +}, + "̇́": { + text: "{\\textdotacute}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "́̇": { + text: "{\\textdotacute}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̇̆": { + text: "{\\textdotbreve}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̆̇": { + text: "{\\textdotbreve}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̈": { + math: "\\ddot", + combiningdiacritic: true, + text: "\\\"" +}, + "̉": { + math: "\\ovhook" +}, + "̊": { + math: "\\mathring", + combiningdiacritic: true, + text: "{\\r}" +}, + "̊̄": { + text: "{\\textringmacron}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̄̊": { + text: "{\\textringmacron}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̋": { + text: "{\\H}", + combiningdiacritic: true +}, + "̌": { + math: "\\check", + text: "{\\v}", + combiningdiacritic: true +}, + "̍": { + text: "{\\textvbaraccent}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̎": { + text: "{\\textdoublevbaraccent}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̏": { + text: "{\\textdoublegrave}", + combiningdiacritic: true +}, + "̐": { + text: "{\\textdotbreve}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̑": { + text: "{\\fontencoding{LECO}\\selectfont\\char177}" +}, + "̒": { + math: "\\oturnedcomma" +}, + "̕": { + math: "\\ocommatopright" +}, + "̖": { + text: "{\\textsubgrave}", + combiningdiacritic: true +}, + "̘": { + text: "{\\textadvancing}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̙": { + text: "{\\textretracting}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̚": { + math: "\\droang", + text: "{\\textcorner}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̜": { + text: "{\\textsublhalfring}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̝": { + text: "{\\textraising}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̞": { + text: "{\\textlowering}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̟": { + text: "{\\textsubplus}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̡": { + math: "\\Elzpalh" +}, + "̢": { + text: "{\\Elzrh}" +}, + "̣": { + text: "{\\d}", + combiningdiacritic: true +}, + "̤": { + text: "{\\textsubumlaut}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̥": { + text: "{\\textsubring}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̧": { + text: "{\\c}", + combiningdiacritic: true +}, + "̨": { + text: "{\\k}", + combiningdiacritic: true +}, + "̩": { + text: "{\\textsyllabic}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̪": { + math: "\\Elzsbbrg", + text: "{\\textsubbridge}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̫": { + text: "{\\fontencoding{LECO}\\selectfont\\char203}" +}, + "̬": { + text: "{\\textsubwedge}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̯": { + text: "{\\textsubarch}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̰": { + math: "\\utilde", + text: "{\\textsubtilde}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̱": { + math: "\\underbar", + combiningdiacritic: true, + text: "{\\textsubbar}", + textpackages: [ + "tipa" + ] +}, + "̲": { + math: "\\underline" +}, + "̴": { + text: "{\\textsuperimposetilde}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̵": { + text: "{\\Elzxl}" +}, + "̶": { + text: "{\\Elzbar}" +}, + "̷": { + text: "{\\fontencoding{LECO}\\selectfont\\char215}" +}, + "̸": { + math: "\\not" +}, + "̹": { + text: "{\\textsubrhalfring}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̺": { + text: "{\\textinvsubbridge}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̻": { + text: "{\\textsubsquare}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̼": { + text: "{\\textseagull}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "̽": { + text: "{\\textovercross}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] +}, + "͡": { + text: "{\\fontencoding{LECO}\\selectfont\\char225}" +}, + "ʹ": { + text: "'" +}, + "͵": { + text: "," +}, + ";": { + text: ";" +}, + "Ά": { + text: "{\\'A}" +}, + "Έ": { + text: "{\\'E}" +}, + "Ή": { + text: "{\\'H}" +}, + "Ί": { + text: "{\\'{}I}" +}, + "Ό": { + text: "{\\'{}O}" +}, + "Ύ": { + math: "\\mathrm{'Y}" +}, + "Ώ": { + math: "\\mathrm{'\\Omega}" +}, + "ΐ": { + math: "\\acute{\\ddot{\\iota}}" +}, + "Α": { + math: "A" +}, + "Β": { + math: "B" +}, + "Γ": { + math: "\\Gamma" +}, + "Δ": { + math: "\\Delta" +}, + "Ε": { + math: "E" +}, + "Ζ": { + math: "Z" +}, + "Η": { + math: "H" +}, + "Θ": { + math: "\\Theta" +}, + "Ι": { + math: "I" +}, + "Κ": { + math: "K" +}, + "Λ": { + math: "\\Lambda" +}, + "Μ": { + math: "M" +}, + "Ν": { + math: "N" +}, + "Ξ": { + math: "\\Xi" +}, + "Ο": { + math: "O" +}, + "Π": { + math: "\\Pi" +}, + "Ρ": { + math: "P" +}, + "Σ": { + math: "\\Sigma" +}, + "Τ": { + math: "T" +}, + "Υ": { + math: "\\Upsilon" +}, + "Φ": { + math: "\\Phi" +}, + "Χ": { + math: "X" +}, + "Ψ": { + math: "\\Psi" +}, + "Ω": { + math: "\\Omega" +}, + "Ϊ": { + math: "\\mathrm{\\ddot{I}}" +}, + "Ϋ": { + math: "\\mathrm{\\ddot{Y}}" +}, + "ά": { + text: "{\\'$\\alpha$}" +}, + "έ": { + math: "\\acute{\\epsilon}" +}, + "ή": { + math: "\\acute{\\eta}" +}, + "ί": { + math: "\\acute{\\iota}" +}, + "ΰ": { + math: "\\acute{\\ddot{\\upsilon}}" +}, + "α": { + math: "\\alpha" +}, + "β": { + math: "\\beta" +}, + "γ": { + math: "\\gamma" +}, + "δ": { + math: "\\delta" +}, + "ε": { + math: "\\epsilon" +}, + "ζ": { + math: "\\zeta" +}, + "η": { + math: "\\eta" +}, + "θ": { + math: "\\theta", + text: "{\\texttheta}" +}, + "ι": { + math: "\\iota" +}, + "κ": { + math: "\\kappa" +}, + "λ": { + math: "\\lambda" +}, + "μ": { + math: "\\mu" +}, + "ν": { + math: "\\nu" +}, + "ξ": { + math: "\\xi" +}, + "ο": { + math: "o" +}, + "π": { + math: "\\pi" +}, + "ρ": { + math: "\\rho" +}, + "ς": { + math: "\\varsigma" +}, + "σ": { + math: "\\sigma" +}, + "τ": { + math: "\\tau" +}, + "υ": { + math: "\\upsilon" +}, + "φ": { + math: "\\varphi" +}, + "χ": { + math: "\\chi" +}, + "ψ": { + math: "\\psi" +}, + "ω": { + math: "\\omega" +}, + "ϊ": { + math: "\\ddot{\\iota}" +}, + "ϋ": { + math: "\\ddot{\\upsilon}" +}, + "ό": { + text: "{\\'o}" +}, + "ύ": { + math: "\\acute{\\upsilon}" +}, + "ώ": { + math: "\\acute{\\omega}" +}, + "ϐ": { + math: "\\varbeta", + text: "\\Pisymbol{ppi022}{87}" +}, + "ϑ": { + math: "\\vartheta", + text: "{\\textvartheta}" +}, + "ϒ": { + math: "\\Upsilon" +}, + "ϕ": { + math: "\\phi" +}, + "ϖ": { + math: "\\varpi" +}, + "Ϙ": { + math: "\\Qoppa" +}, + "ϙ": { + math: "\\qoppa" +}, + "Ϛ": { + math: "\\Stigma" +}, + "ϛ": { + math: "\\stigma" +}, + "Ϝ": { + math: "\\Digamma" +}, + "ϝ": { + math: "\\digamma" +}, + "Ϟ": { + math: "\\Koppa" +}, + "ϟ": { + math: "\\koppa" +}, + "Ϡ": { + math: "\\Sampi" +}, + "ϡ": { + math: "\\sampi" +}, + "ϰ": { + math: "\\varkappa" +}, + "ϱ": { + math: "\\varrho" +}, + "ϴ": { + math: "\\upvarTheta", + text: "{\\textTheta}" +}, + "ϵ": { + math: "\\epsilon" +}, + "϶": { + math: "\\backepsilon" +}, + "Ё": { + text: "{\\cyrchar\\CYRYO}" +}, + "Ђ": { + text: "{\\cyrchar\\CYRDJE}" +}, + "Ѓ": { + text: "{\\cyrchar{\\'\\CYRG}}" +}, + "Є": { + text: "{\\cyrchar\\CYRIE}" +}, + "Ѕ": { + text: "{\\cyrchar\\CYRDZE}" +}, + "І": { + text: "{\\cyrchar\\CYRII}" +}, + "Ї": { + text: "{\\cyrchar\\CYRYI}" +}, + "Ј": { + text: "{\\cyrchar\\CYRJE}" +}, + "Љ": { + text: "{\\cyrchar\\CYRLJE}" +}, + "Њ": { + text: "{\\cyrchar\\CYRNJE}" +}, + "Ћ": { + text: "{\\cyrchar\\CYRTSHE}" +}, + "Ќ": { + text: "{\\cyrchar{\\'\\CYRK}}" +}, + "Ў": { + text: "{\\cyrchar\\CYRUSHRT}" +}, + "Џ": { + text: "{\\cyrchar\\CYRDZHE}" +}, + "А": { + text: "{\\cyrchar\\CYRA}" +}, + "Б": { + text: "{\\cyrchar\\CYRB}" +}, + "В": { + text: "{\\cyrchar\\CYRV}" +}, + "Г": { + text: "{\\cyrchar\\CYRG}" +}, + "Д": { + text: "{\\cyrchar\\CYRD}" +}, + "Е": { + text: "{\\cyrchar\\CYRE}" +}, + "Ж": { + text: "{\\cyrchar\\CYRZH}" +}, + "З": { + text: "{\\cyrchar\\CYRZ}" +}, + "И": { + text: "{\\cyrchar\\CYRI}" +}, + "Й": { + text: "{\\cyrchar\\CYRISHRT}" +}, + "К": { + text: "{\\cyrchar\\CYRK}" +}, + "Л": { + text: "{\\cyrchar\\CYRL}" +}, + "М": { + text: "{\\cyrchar\\CYRM}" +}, + "Н": { + text: "{\\cyrchar\\CYRN}" +}, + "О": { + text: "{\\cyrchar\\CYRO}" +}, + "П": { + text: "{\\cyrchar\\CYRP}" +}, + "Р": { + text: "{\\cyrchar\\CYRR}" +}, + "С": { + text: "{\\cyrchar\\CYRS}" +}, + "Т": { + text: "{\\cyrchar\\CYRT}" +}, + "У": { + text: "{\\cyrchar\\CYRU}" +}, + "Ф": { + text: "{\\cyrchar\\CYRF}" +}, + "Х": { + text: "{\\cyrchar\\CYRH}" +}, + "Ц": { + text: "{\\cyrchar\\CYRC}" +}, + "Ч": { + text: "{\\cyrchar\\CYRCH}" +}, + "Ш": { + text: "{\\cyrchar\\CYRSH}" +}, + "Щ": { + text: "{\\cyrchar\\CYRSHCH}" +}, + "Ъ": { + text: "{\\cyrchar\\CYRHRDSN}" +}, + "Ы": { + text: "{\\cyrchar\\CYRERY}" +}, + "Ь": { + text: "{\\cyrchar\\CYRSFTSN}" +}, + "Э": { + text: "{\\cyrchar\\CYREREV}" +}, + "Ю": { + text: "{\\cyrchar\\CYRYU}" +}, + "Я": { + text: "{\\cyrchar\\CYRYA}" +}, + "а": { + text: "{\\cyrchar\\cyra}" +}, + "б": { + text: "{\\cyrchar\\cyrb}" +}, + "в": { + text: "{\\cyrchar\\cyrv}" +}, + "г": { + text: "{\\cyrchar\\cyrg}" +}, + "д": { + text: "{\\cyrchar\\cyrd}" +}, + "е": { + text: "{\\cyrchar\\cyre}" +}, + "ж": { + text: "{\\cyrchar\\cyrzh}" +}, + "з": { + text: "{\\cyrchar\\cyrz}" +}, + "и": { + text: "{\\cyrchar\\cyri}" +}, + "й": { + text: "{\\cyrchar\\cyrishrt}" +}, + "к": { + text: "{\\cyrchar\\cyrk}" +}, + "л": { + text: "{\\cyrchar\\cyrl}" +}, + "м": { + text: "{\\cyrchar\\cyrm}" +}, + "н": { + text: "{\\cyrchar\\cyrn}" +}, + "о": { + text: "{\\cyrchar\\cyro}" +}, + "п": { + text: "{\\cyrchar\\cyrp}" +}, + "р": { + text: "{\\cyrchar\\cyrr}" +}, + "с": { + text: "{\\cyrchar\\cyrs}" +}, + "т": { + text: "{\\cyrchar\\cyrt}" +}, + "у": { + text: "{\\cyrchar\\cyru}" +}, + "ф": { + text: "{\\cyrchar\\cyrf}" +}, + "х": { + text: "{\\cyrchar\\cyrh}" +}, + "ц": { + text: "{\\cyrchar\\cyrc}" +}, + "ч": { + text: "{\\cyrchar\\cyrch}" +}, + "ш": { + text: "{\\cyrchar\\cyrsh}" +}, + "щ": { + text: "{\\cyrchar\\cyrshch}" +}, + "ъ": { + text: "{\\cyrchar\\cyrhrdsn}" +}, + "ы": { + text: "{\\cyrchar\\cyrery}" +}, + "ь": { + text: "{\\cyrchar\\cyrsftsn}" +}, + "э": { + text: "{\\cyrchar\\cyrerev}" +}, + "ю": { + text: "{\\cyrchar\\cyryu}" +}, + "я": { + text: "{\\cyrchar\\cyrya}" +}, + "ё": { + text: "{\\cyrchar\\cyryo}" +}, + "ђ": { + text: "{\\cyrchar\\cyrdje}" +}, + "ѓ": { + text: "{\\cyrchar{\\'\\cyrg}}" +}, + "є": { + text: "{\\cyrchar\\cyrie}" +}, + "ѕ": { + text: "{\\cyrchar\\cyrdze}" +}, + "і": { + text: "{\\cyrchar\\cyrii}" +}, + "ї": { + text: "{\\cyrchar\\cyryi}" +}, + "ј": { + text: "{\\cyrchar\\cyrje}" +}, + "љ": { + text: "{\\cyrchar\\cyrlje}" +}, + "њ": { + text: "{\\cyrchar\\cyrnje}" +}, + "ћ": { + text: "{\\cyrchar\\cyrtshe}" +}, + "ќ": { + text: "{\\cyrchar{\\'\\cyrk}}" +}, + "ў": { + text: "{\\cyrchar\\cyrushrt}" +}, + "џ": { + text: "{\\cyrchar\\cyrdzhe}" +}, + "Ѡ": { + text: "{\\cyrchar\\CYROMEGA}" +}, + "ѡ": { + text: "{\\cyrchar\\cyromega}" +}, + "Ѣ": { + text: "{\\cyrchar\\CYRYAT}" +}, + "Ѥ": { + text: "{\\cyrchar\\CYRIOTE}" +}, + "ѥ": { + text: "{\\cyrchar\\cyriote}" +}, + "Ѧ": { + text: "{\\cyrchar\\CYRLYUS}" +}, + "ѧ": { + text: "{\\cyrchar\\cyrlyus}" +}, + "Ѩ": { + text: "{\\cyrchar\\CYRIOTLYUS}" +}, + "ѩ": { + text: "{\\cyrchar\\cyriotlyus}" +}, + "Ѫ": { + text: "{\\cyrchar\\CYRBYUS}" +}, + "Ѭ": { + text: "{\\cyrchar\\CYRIOTBYUS}" +}, + "ѭ": { + text: "{\\cyrchar\\cyriotbyus}" +}, + "Ѯ": { + text: "{\\cyrchar\\CYRKSI}" +}, + "ѯ": { + text: "{\\cyrchar\\cyrksi}" +}, + "Ѱ": { + text: "{\\cyrchar\\CYRPSI}" +}, + "ѱ": { + text: "{\\cyrchar\\cyrpsi}" +}, + "Ѳ": { + text: "{\\cyrchar\\CYRFITA}" +}, + "Ѵ": { + text: "{\\cyrchar\\CYRIZH}" +}, + "Ѹ": { + text: "{\\cyrchar\\CYRUK}" +}, + "ѹ": { + text: "{\\cyrchar\\cyruk}" +}, + "Ѻ": { + text: "{\\cyrchar\\CYROMEGARND}" +}, + "ѻ": { + text: "{\\cyrchar\\cyromegarnd}" +}, + "Ѽ": { + text: "{\\cyrchar\\CYROMEGATITLO}" +}, + "ѽ": { + text: "{\\cyrchar\\cyromegatitlo}" +}, + "Ѿ": { + text: "{\\cyrchar\\CYROT}" +}, + "ѿ": { + text: "{\\cyrchar\\cyrot}" +}, + "Ҁ": { + text: "{\\cyrchar\\CYRKOPPA}" +}, + "ҁ": { + text: "{\\cyrchar\\cyrkoppa}" +}, + "҂": { + text: "{\\cyrchar\\cyrthousands}" +}, + "҈": { + text: "{\\cyrchar\\cyrhundredthousands}" +}, + "҉": { + text: "{\\cyrchar\\cyrmillions}" +}, + "Ҍ": { + text: "{\\cyrchar\\CYRSEMISFTSN}" +}, + "ҍ": { + text: "{\\cyrchar\\cyrsemisftsn}" +}, + "Ҏ": { + text: "{\\cyrchar\\CYRRTICK}" +}, + "ҏ": { + text: "{\\cyrchar\\cyrrtick}" +}, + "Ґ": { + text: "{\\cyrchar\\CYRGUP}" +}, + "ґ": { + text: "{\\cyrchar\\cyrgup}" +}, + "Ғ": { + text: "{\\cyrchar\\CYRGHCRS}" +}, + "ғ": { + text: "{\\cyrchar\\cyrghcrs}" +}, + "Ҕ": { + text: "{\\cyrchar\\CYRGHK}" +}, + "ҕ": { + text: "{\\cyrchar\\cyrghk}" +}, + "Җ": { + text: "{\\cyrchar\\CYRZHDSC}" +}, + "җ": { + text: "{\\cyrchar\\cyrzhdsc}" +}, + "Ҙ": { + text: "{\\cyrchar\\CYRZDSC}" +}, + "ҙ": { + text: "{\\cyrchar\\cyrzdsc}" +}, + "Қ": { + text: "{\\cyrchar\\CYRKDSC}" +}, + "қ": { + text: "{\\cyrchar\\cyrkdsc}" +}, + "Ҝ": { + text: "{\\cyrchar\\CYRKVCRS}" +}, + "ҝ": { + text: "{\\cyrchar\\cyrkvcrs}" +}, + "Ҟ": { + text: "{\\cyrchar\\CYRKHCRS}" +}, + "ҟ": { + text: "{\\cyrchar\\cyrkhcrs}" +}, + "Ҡ": { + text: "{\\cyrchar\\CYRKBEAK}" +}, + "ҡ": { + text: "{\\cyrchar\\cyrkbeak}" +}, + "Ң": { + text: "{\\cyrchar\\CYRNDSC}" +}, + "ң": { + text: "{\\cyrchar\\cyrndsc}" +}, + "Ҥ": { + text: "{\\cyrchar\\CYRNG}" +}, + "ҥ": { + text: "{\\cyrchar\\cyrng}" +}, + "Ҧ": { + text: "{\\cyrchar\\CYRPHK}" +}, + "ҧ": { + text: "{\\cyrchar\\cyrphk}" +}, + "Ҩ": { + text: "{\\cyrchar\\CYRABHHA}" +}, + "ҩ": { + text: "{\\cyrchar\\cyrabhha}" +}, + "Ҫ": { + text: "{\\cyrchar\\CYRSDSC}" +}, + "ҫ": { + text: "{\\cyrchar\\cyrsdsc}" +}, + "Ҭ": { + text: "{\\cyrchar\\CYRTDSC}" +}, + "ҭ": { + text: "{\\cyrchar\\cyrtdsc}" +}, + "Ү": { + text: "{\\cyrchar\\CYRY}" +}, + "ү": { + text: "{\\cyrchar\\cyry}" +}, + "Ұ": { + text: "{\\cyrchar\\CYRYHCRS}" +}, + "ұ": { + text: "{\\cyrchar\\cyryhcrs}" +}, + "Ҳ": { + text: "{\\cyrchar\\CYRHDSC}" +}, + "ҳ": { + text: "{\\cyrchar\\cyrhdsc}" +}, + "Ҵ": { + text: "{\\cyrchar\\CYRTETSE}" +}, + "ҵ": { + text: "{\\cyrchar\\cyrtetse}" +}, + "Ҷ": { + text: "{\\cyrchar\\CYRCHRDSC}" +}, + "ҷ": { + text: "{\\cyrchar\\cyrchrdsc}" +}, + "Ҹ": { + text: "{\\cyrchar\\CYRCHVCRS}" +}, + "ҹ": { + text: "{\\cyrchar\\cyrchvcrs}" +}, + "Һ": { + text: "{\\cyrchar\\CYRSHHA}" +}, + "һ": { + text: "{\\cyrchar\\cyrshha}" +}, + "Ҽ": { + text: "{\\cyrchar\\CYRABHCH}" +}, + "ҽ": { + text: "{\\cyrchar\\cyrabhch}" +}, + "Ҿ": { + text: "{\\cyrchar\\CYRABHCHDSC}" +}, + "ҿ": { + text: "{\\cyrchar\\cyrabhchdsc}" +}, + "Ӏ": { + text: "{\\cyrchar\\CYRpalochka}" +}, + "Ӄ": { + text: "{\\cyrchar\\CYRKHK}" +}, + "ӄ": { + text: "{\\cyrchar\\cyrkhk}" +}, + "Ӈ": { + text: "{\\cyrchar\\CYRNHK}" +}, + "ӈ": { + text: "{\\cyrchar\\cyrnhk}" +}, + "Ӌ": { + text: "{\\cyrchar\\CYRCHLDSC}" +}, + "ӌ": { + text: "{\\cyrchar\\cyrchldsc}" +}, + "Ӕ": { + text: "{\\cyrchar\\CYRAE}" +}, + "ӕ": { + text: "{\\cyrchar\\cyrae}" +}, + "Ә": { + text: "{\\cyrchar\\CYRSCHWA}" +}, + "ә": { + text: "{\\cyrchar\\cyrschwa}" +}, + "Ӡ": { + text: "{\\cyrchar\\CYRABHDZE}" +}, + "ӡ": { + text: "{\\cyrchar\\cyrabhdze}" +}, + "Ө": { + text: "{\\cyrchar\\CYROTLD}" +}, + "ө": { + text: "{\\cyrchar\\cyrotld}" +}, + "ࡱ": { + math: "\\\\backslash" +}, + "ᵃ": { + math: "^{a}", + text: "\\textsuperscript{a}" +}, + "ᵇ": { + math: "^{b}", + text: "\\textsuperscript{b}" +}, + "ᵈ": { + math: "^{d}", + text: "\\textsuperscript{d}" +}, + "ᵉ": { + math: "^{e}", + text: "\\textsuperscript{e}" +}, + "ᵍ": { + math: "^{g}", + text: "\\textsuperscript{g}" +}, + "ᵏ": { + math: "^{k}", + text: "\\textsuperscript{k}" +}, + "ᵐ": { + math: "^{m}", + text: "\\textsuperscript{m}" +}, + "ᵒ": { + math: "^{o}", + text: "\\textsuperscript{o}" +}, + "ᵖ": { + math: "^{p}", + text: "\\textsuperscript{p}" +}, + "ᵗ": { + math: "^{t}", + text: "\\textsuperscript{t}" +}, + "ᵘ": { + math: "^{u}", + text: "\\textsuperscript{u}" +}, + "ᵛ": { + math: "^{v}", + text: "\\textsuperscript{v}" +}, + "ᶜ": { + math: "^{c}", + text: "\\textsuperscript{c}" +}, + "ᶠ": { + math: "^{f}", + text: "\\textsuperscript{f}" +}, + "ᶻ": { + math: "^{z}", + text: "\\textsuperscript{z}" +}, + "Ḃ": { + text: "{\\.B}" +}, + "ḃ": { + text: "{\\.b}" +}, + "Ḅ": { + text: "{\\d B}" +}, + "ḅ": { + text: "{\\d b}" +}, + "Ḇ": { + text: "{\\b B}" +}, + "ḇ": { + text: "{\\b b}" +}, + "Ḋ": { + text: "{\\.D}" +}, + "ḋ": { + text: "{\\.d}" +}, + "Ḍ": { + text: "{\\d D}" +}, + "ḍ": { + text: "{\\d d}" +}, + "Ḏ": { + text: "{\\b D}" +}, + "ḏ": { + text: "{\\b d}" +}, + "Ḑ": { + text: "{\\c D}" +}, + "ḑ": { + text: "{\\c d}" +}, + "Ḝ": { + text: "{\\c{\\u{E}}}" +}, + "ḝ": { + text: "{\\c{\\u{e}}}" +}, + "Ḟ": { + text: "{\\.F}" +}, + "ḟ": { + text: "{\\.f}" +}, + "Ḡ": { + text: "{\\=G}" +}, + "ḡ": { + text: "{\\=g}" +}, + "Ḣ": { + text: "{\\.H}" +}, + "ḣ": { + text: "{\\.h}" +}, + "Ḥ": { + text: "{\\d H}" +}, + "ḥ": { + text: "{\\d h}" +}, + "Ḧ": { + text: "{\\\"H}" +}, + "ḧ": { + text: "{\\\"h}" +}, + "Ḩ": { + text: "{\\c H}" +}, + "ḩ": { + text: "{\\c h}" +}, + "Ḱ": { + text: "{\\'K}" +}, + "ḱ": { + text: "{\\'k}" +}, + "Ḳ": { + text: "{\\d K}" +}, + "ḳ": { + text: "{\\d k}" +}, + "Ḵ": { + text: "{\\b K}" +}, + "ḵ": { + text: "{\\b k}" +}, + "Ḷ": { + text: "{\\d L}" +}, + "ḷ": { + text: "{\\d l}" +}, + "Ḻ": { + text: "{\\b L}" +}, + "ḻ": { + text: "{\\b l}" +}, + "Ḿ": { + text: "{\\'M}" +}, + "ḿ": { + text: "{\\'m}" +}, + "Ṁ": { + text: "{\\.M}" +}, + "ṁ": { + text: "{\\.m}" +}, + "Ṃ": { + text: "{\\d M}" +}, + "ṃ": { + text: "{\\d m}" +}, + "Ṅ": { + text: "{\\.N}" +}, + "ṅ": { + text: "{\\.n}" +}, + "Ṇ": { + text: "{\\d N}" +}, + "ṇ": { + text: "{\\d n}" +}, + "Ṉ": { + text: "{\\b N}" +}, + "ṉ": { + text: "{\\b n}" +}, + "Ṕ": { + text: "{\\'P}" +}, + "ṕ": { + text: "{\\'p}" +}, + "Ṗ": { + text: "{\\.P}" +}, + "ṗ": { + text: "{\\.p}" +}, + "Ṙ": { + text: "{\\.R}" +}, + "ṙ": { + text: "{\\.r}" +}, + "Ṛ": { + text: "{\\d R}" +}, + "ṛ": { + text: "{\\d r}" +}, + "Ṟ": { + text: "{\\b R}" +}, + "ṟ": { + text: "{\\b r}" +}, + "Ṡ": { + text: "{\\.S}" +}, + "ṡ": { + text: "{\\.s}" +}, + "Ṣ": { + text: "{\\d S}" +}, + "ṣ": { + text: "{\\d s}" +}, + "Ṫ": { + text: "{\\.T}" +}, + "ṫ": { + text: "{\\.t}" +}, + "Ṭ": { + text: "{\\d T}" +}, + "ṭ": { + text: "{\\d t}" +}, + "Ṯ": { + text: "{\\b T}" +}, + "ṯ": { + text: "{\\b t}" +}, + "Ṽ": { + text: "{\\~V}" +}, + "ṽ": { + text: "{\\~v}" +}, + "Ṿ": { + text: "{\\d V}" +}, + "ṿ": { + text: "{\\d v}" +}, + "Ẁ": { + text: "{\\`W}" +}, + "ẁ": { + text: "{\\`w}" +}, + "Ẃ": { + text: "{\\'W}" +}, + "ẃ": { + text: "{\\'w}" +}, + "Ẅ": { + text: "{\\\"W}" +}, + "ẅ": { + text: "{\\\"w}" +}, + "Ẇ": { + text: "{\\.W}" +}, + "ẇ": { + text: "{\\.w}" +}, + "Ẉ": { + text: "{\\d W}" +}, + "ẉ": { + text: "{\\d w}" +}, + "Ẋ": { + text: "{\\.X}" +}, + "ẋ": { + text: "{\\.x}" +}, + "Ẍ": { + text: "{\\\"X}" +}, + "ẍ": { + text: "{\\\"x}" +}, + "Ẏ": { + text: "{\\.Y}" +}, + "ẏ": { + text: "{\\.y}" +}, + "Ẑ": { + text: "{\\^Z}" +}, + "ẑ": { + text: "{\\^z}" +}, + "Ẓ": { + text: "{\\d Z}" +}, + "ẓ": { + text: "{\\d z}" +}, + "Ẕ": { + text: "{\\b Z}" +}, + "ẕ": { + text: "{\\b z}" +}, + "ẖ": { + text: "{\\b h}" +}, + "ẗ": { + text: "{\\\"t}" +}, + "ẘ": { + text: "{\\r{w}}" +}, + "ẙ": { + text: "{\\r{y}}" +}, + "Ạ": { + text: "{\\d A}" +}, + "ạ": { + text: "{\\d a}" +}, + "Ẹ": { + text: "{\\d E}" +}, + "ẹ": { + text: "{\\d e}" +}, + "Ẽ": { + text: "{\\~E}" +}, + "ẽ": { + text: "{\\~e}" +}, + "Ị": { + text: "{\\d I}" +}, + "ị": { + text: "{\\d i}" +}, + "Ọ": { + text: "{\\d O}" +}, + "ọ": { + text: "{\\d o}" +}, + "Ụ": { + text: "{\\d U}" +}, + "ụ": { + text: "{\\d u}" +}, + "Ỳ": { + text: "{\\`Y}" +}, + "ỳ": { + text: "{\\`y}" +}, + "Ỵ": { + text: "{\\d Y}" +}, + "ỵ": { + text: "{\\d y}" +}, + "Ỹ": { + text: "{\\~Y}" +}, + "ỹ": { + text: "{\\~y}" +}, + " ": { + text: " ", + space: true +}, + " ": { + math: "\\quad", + space: true +}, + " ": { + text: "\\hspace{0.6em}", + space: true +}, + " ": { + math: "\\quad", + space: true, + text: "\\hspace{1em}" +}, + " ": { + text: "\\;", + space: true +}, + " ": { + text: "\\hspace{0.25em}", + space: true +}, + " ": { + text: "\\hspace{0.166em}", + space: true +}, + " ": { + text: "\\hphantom{0}", + space: true +}, + " ": { + text: "\\hphantom{,}", + space: true +}, + " ": { + text: "\\,", + space: true +}, + " ": { + math: "\\mkern1mu", + space: true +}, + "​": { + text: "{\\mbox}", + space: true +}, + "‌": { + text: "{\\aftergroup\\ignorespaces}" +}, + "‐": { + text: "-" +}, + "‑": { + text: "-" +}, + "‒": { + text: "-" +}, + "–": { + text: "{\\textendash}" +}, + "—": { + text: "{\\textemdash}" +}, + "―": { + math: "\\horizbar", + text: "\\rule{1em}{1pt}" +}, + "‖": { + math: "\\Vert" +}, + "‗": { + math: "\\twolowline" +}, + "‘": { + text: "`" +}, + "’": { + text: "'" +}, + "‚": { + text: "," +}, + "‛": { + math: "\\Elzreapos" +}, + "“": { + text: "``" +}, + "”": { + text: "''" +}, + "„": { + text: ",," +}, + "‟": { + text: "{\\quotedblbase}" +}, + "†": { + math: "\\dagger", + text: "{\\textdagger}", + textpackages: [ + "textcomp" + ] +}, + "‡": { + math: "\\ddagger", + text: "{\\textdaggerdbl}", + textpackages: [ + "textcomp" + ] +}, + "•": { + math: "\\bullet", + text: "{\\textbullet}", + textpackages: [ + "textcomp" + ] +}, + "‣": { + text: ">" +}, + "․": { + text: "." +}, + "‥": { + math: "\\enleadertwodots", + text: ".." +}, + "…": { + math: "\\ldots", + text: "{\\ldots}" +}, + "‧": { + text: "-" +}, + " ": { + text: " ", + space: true +}, + "‰": { + text: "{\\textperthousand}", + textpackages: [ + "textcomp" + ] +}, + "‱": { + text: "{\\textpertenthousand}", + textpackages: [ + "textcomp" + ] +}, + "′": { + math: "{'}" +}, + "″": { + math: "{''}" +}, + "‴": { + math: "{'''}" +}, + "‵": { + math: "\\backprime" +}, + "‶": { + math: "\\backdprime" +}, + "‷": { + math: "\\backtrprime" +}, + "‸": { + math: "\\caretinsert" +}, + "‹": { + text: "{\\guilsinglleft}" +}, + "›": { + text: "{\\guilsinglright}" +}, + "‼": { + math: "\\Exclam" +}, + "‾": { + text: "-" +}, + "⁃": { + math: "\\hyphenbullet" +}, + "⁄": { + math: "\\fracslash" +}, + "⁇": { + math: "\\Question" +}, + "⁈": { + text: "?!" +}, + "⁉": { + text: "!?" +}, + "⁊": { + text: "7" +}, + "⁐": { + math: "\\closure" +}, + "⁗": { + math: "''''" +}, + " ": { + math: "\\:", + space: true, + text: "\\:" +}, + "⁠": { + text: "{\\nolinebreak}" +}, + "⁰": { + math: "^{0}" +}, + "ⁱ": { + math: "^{i}", + text: "\\textsuperscript{i}" +}, + "⁴": { + math: "^{4}" +}, + "⁵": { + math: "^{5}" +}, + "⁶": { + math: "^{6}" +}, + "⁷": { + math: "^{7}" +}, + "⁸": { + math: "^{8}" +}, + "⁹": { + math: "^{9}" +}, + "⁺": { + math: "^{+}" +}, + "⁻": { + math: "^{-}" +}, + "⁼": { + math: "^{=}" +}, + "⁽": { + math: "^{(}" +}, + "⁾": { + math: "^{)}" +}, + "ⁿ": { + math: "^{n}", + text: "\\textsuperscript{n}" +}, + "₀": { + math: "_{0}" +}, + "₁": { + math: "_{1}" +}, + "₂": { + math: "_{2}" +}, + "₃": { + math: "_{3}" +}, + "₄": { + math: "_{4}" +}, + "₅": { + math: "_{5}" +}, + "₆": { + math: "_{6}" +}, + "₇": { + math: "_{7}" +}, + "₈": { + math: "_{8}" +}, + "₉": { + math: "_{9}" +}, + "₊": { + math: "_{+}" +}, + "₋": { + math: "_{-}" +}, + "₌": { + math: "_{=}" +}, + "₍": { + math: "_{(}" +}, + "₎": { + math: "_{)}" +}, + "ₐ": { + math: "_{a}", + text: "\\textsubscript{a}" +}, + "ₑ": { + math: "_{e}", + text: "\\textsubscript{e}" +}, + "ₒ": { + math: "_{o}", + text: "\\textsubscript{o}" +}, + "ₓ": { + math: "_{x}", + text: "\\textsubscript{x}" +}, + "ₔ": { + text: "\\textsubscript{\\textschwa}", + textpackages: [ + "tipa" + ] +}, + "ₕ": { + math: "_{h}", + text: "\\textsubscript{h}" +}, + "ₖ": { + math: "_{k}", + text: "\\textsubscript{k}" +}, + "ₗ": { + math: "_{l}", + text: "\\textsubscript{l}" +}, + "ₘ": { + math: "_{m}", + text: "\\textsubscript{m}" +}, + "ₙ": { + math: "_{n}", + text: "\\textsubscript{n}" +}, + "ₚ": { + math: "_{p}", + text: "\\textsubscript{p}" +}, + "ₛ": { + math: "_{s}", + text: "\\textsubscript{s}" +}, + "ₜ": { + math: "_{t}", + text: "\\textsubscript{t}" +}, + "₧": { + text: "\\ensuremath{\\Elzpes}" +}, + "€": { + math: "\\euro", + text: "{\\texteuro}" +}, + "⃐": { + math: "\\lvec" +}, + "⃑": { + math: "\\rightharpoonup", + mathpackages: [ + "amsmath", + "amssymb" + ] +}, + "⃒": { + math: "\\vertoverlay" +}, + "⃖": { + math: "\\LVec" +}, + "⃗": { + math: "\\vec" +}, + "⃛": { + math: "\\dddot" +}, + "⃜": { + math: "\\ddddot" +}, + "⃝": { + math: "\\enclosecircle" +}, + "⃞": { + math: "\\enclosesquare" +}, + "⃟": { + math: "\\enclosediamond" +}, + "⃡": { + math: "\\overleftrightarrow" +}, + "⃤": { + math: "\\enclosetriangle" +}, + "⃧": { + math: "\\annuity" +}, + "⃨": { + math: "\\threeunderdot" +}, + "⃩": { + math: "\\widebridgeabove" +}, + "⃬": { + math: "\\underrightharpoondown" +}, + "⃭": { + math: "\\underleftharpoondown" +}, + "⃮": { + math: "\\underleftarrow" +}, + "⃯": { + math: "\\underrightarrow" +}, + "⃰": { + math: "\\asteraccent" +}, + "℀": { + text: "a/c" +}, + "℁": { + text: "a/s" +}, + "ℂ": { + math: "\\mathbb{C}" +}, + "℃": { + text: "{\\textcelsius}" +}, + "℅": { + text: "c/o" +}, + "℆": { + text: "c/u" +}, + "ℇ": { + math: "\\Euler" +}, + "℉": { + text: "F" +}, + "ℊ": { + math: "\\mathscr{g}" +}, + "ℋ": { + math: "\\mathscr{H}" +}, + "ℌ": { + math: "\\mathfrak{H}" +}, + "ℍ": { + math: "\\mathbb{H}" +}, + "ℎ": { + math: "\\Planckconst" +}, + "ℏ": { + math: "\\hslash" +}, + "ℐ": { + math: "\\mathscr{I}" +}, + "ℑ": { + math: "\\mathfrak{I}" +}, + "ℒ": { + math: "\\mathscr{L}" +}, + "ℓ": { + math: "\\mathscr{l}" +}, + "ℕ": { + math: "\\mathbb{N}" +}, + "№": { + text: "{\\cyrchar\\textnumero}" +}, + "℗": { + text: "{\\textcircledP}" +}, + "℘": { + math: "\\wp" +}, + "ℙ": { + math: "\\mathbb{P}" +}, + "ℚ": { + math: "\\mathbb{Q}" +}, + "ℛ": { + math: "\\mathscr{R}" +}, + "ℜ": { + math: "\\mathfrak{R}" +}, + "ℝ": { + math: "\\mathbb{R}" +}, + "℞": { + math: "\\Elzxrat" +}, + "℠": { + text: "{\\textservicemark}" +}, + "℡": { + text: "TEL" +}, + "™": { + text: "{\\texttrademark}", + textpackages: [ + "textcomp" + ] +}, + "ℤ": { + math: "\\mathbb{Z}" +}, + "Ω": { + math: "\\Omega" +}, + "℧": { + math: "\\mho" +}, + "ℨ": { + math: "\\mathfrak{Z}" +}, + "℩": { + text: "{\\textriota}" +}, + "K": { + text: "K" +}, + "Å": { + math: "\\Angstroem", + text: "{\\AA}" +}, + "ℬ": { + math: "\\mathscr{B}" +}, + "ℭ": { + math: "\\mathfrak{C}" +}, + "℮": { + text: "{\\textestimated}" +}, + "ℯ": { + math: "\\mathscr{e}" +}, + "ℰ": { + math: "\\mathscr{E}" +}, + "ℱ": { + math: "\\mathscr{F}" +}, + "Ⅎ": { + math: "\\Finv" +}, + "ℳ": { + math: "\\mathscr{M}" +}, + "ℴ": { + math: "\\mathscr{o}" +}, + "ℵ": { + math: "\\aleph" +}, + "ℶ": { + math: "\\beth" +}, + "ℷ": { + math: "\\gimel" +}, + "ℸ": { + math: "\\daleth" +}, + "ℼ": { + math: "\\mathbb{\\pi}" +}, + "ℽ": { + math: "\\mathbb{\\gamma}" +}, + "ℾ": { + math: "\\mathbb{\\Gamma}" +}, + "ℿ": { + math: "\\mathbb{\\Pi}" +}, + "⅀": { + math: "\\mathbb{\\Sigma}" +}, + "⅁": { + math: "\\Game" +}, + "⅂": { + math: "\\sansLturned" +}, + "⅃": { + math: "\\sansLmirrored" +}, + "⅄": { + math: "\\Yup" +}, + "ⅅ": { + math: "\\CapitalDifferentialD" +}, + "ⅆ": { + math: "\\DifferentialD" +}, + "ⅇ": { + math: "\\ExponetialE" +}, + "ⅈ": { + math: "\\ComplexI" +}, + "ⅉ": { + math: "\\ComplexJ" +}, + "⅊": { + math: "\\PropertyLine" +}, + "⅋": { + math: "\\invamp" +}, + "⅐": { + math: "\\frac{1}{7}" +}, + "⅑": { + math: "\\frac{1}{9}" +}, + "⅒": { + math: "\\frac{1}{10}" +}, + "⅓": { + math: "\\frac{1}{3}" +}, + "⅔": { + math: "\\frac{2}{3}" +}, + "⅕": { + math: "\\frac{1}{5}" +}, + "⅖": { + math: "\\frac{2}{5}" +}, + "⅗": { + math: "\\frac{3}{5}" +}, + "⅘": { + math: "\\frac{4}{5}" +}, + "⅙": { + math: "\\frac{1}{6}" +}, + "⅚": { + math: "\\frac{5}{6}" +}, + "⅛": { + math: "\\frac{1}{8}" +}, + "⅜": { + math: "\\frac{3}{8}" +}, + "⅝": { + math: "\\frac{5}{8}" +}, + "⅞": { + math: "\\frac{7}{8}" +}, + "⅟": { + math: "\\frac{1}" +}, + "Ⅰ": { + text: "I" +}, + "Ⅱ": { + text: "II" +}, + "Ⅲ": { + text: "III" +}, + "Ⅳ": { + text: "IV" +}, + "Ⅴ": { + text: "V" +}, + "Ⅵ": { + text: "VI" +}, + "Ⅶ": { + text: "VII" +}, + "Ⅷ": { + text: "VIII" +}, + "Ⅸ": { + text: "IX" +}, + "Ⅹ": { + text: "X" +}, + "Ⅺ": { + text: "XI" +}, + "Ⅻ": { + text: "XII" +}, + "Ⅼ": { + text: "L" +}, + "Ⅽ": { + text: "C" +}, + "Ⅾ": { + text: "D" +}, + "Ⅿ": { + text: "M" +}, + "ⅰ": { + text: "i" +}, + "ⅱ": { + text: "ii" +}, + "ⅲ": { + text: "iii" +}, + "ⅳ": { + text: "iv" +}, + "ⅴ": { + text: "v" +}, + "ⅵ": { + text: "vi" +}, + "ⅶ": { + text: "vii" +}, + "ⅷ": { + text: "viii" +}, + "ⅸ": { + text: "ix" +}, + "ⅹ": { + text: "x" +}, + "ⅺ": { + text: "xi" +}, + "ⅻ": { + text: "xii" +}, + "ⅼ": { + text: "l" +}, + "ⅽ": { + text: "c" +}, + "ⅾ": { + text: "d" +}, + "ⅿ": { + text: "m" +}, + "↉": { + math: "\\frac{0}{3}" +}, + "←": { + math: "\\leftarrow" +}, + "↑": { + math: "\\uparrow" +}, + "→": { + math: "\\rightarrow", + text: "{\\textrightarrow}", + textpackages: [ + "textcomp" + ] +}, + "↓": { + math: "\\downarrow" +}, + "↔": { + math: "\\leftrightarrow" +}, + "↕": { + math: "\\updownarrow" +}, + "↖": { + math: "\\nwarrow" +}, + "↗": { + math: "\\nearrow" +}, + "↘": { + math: "\\searrow" +}, + "↙": { + math: "\\swarrow" +}, + "↚": { + math: "\\nleftarrow" +}, + "↛": { + math: "\\nrightarrow" +}, + "↜": { + math: "\\arrowwaveleft" +}, + "↝": { + math: "\\arrowwaveright" +}, + "↞": { + math: "\\twoheadleftarrow" +}, + "↟": { + math: "\\twoheaduparrow" +}, + "↠": { + math: "\\twoheadrightarrow" +}, + "↡": { + math: "\\twoheaddownarrow" +}, + "↢": { + math: "\\leftarrowtail" +}, + "↣": { + math: "\\rightarrowtail" +}, + "↤": { + math: "\\mapsfrom" +}, + "↥": { + math: "\\MapsUp" +}, + "↦": { + math: "\\mapsto" +}, + "↧": { + math: "\\MapsDown" +}, + "↨": { + math: "\\updownarrowbar" +}, + "↩": { + math: "\\hookleftarrow" +}, + "↪": { + math: "\\hookrightarrow" +}, + "↫": { + math: "\\looparrowleft" +}, + "↬": { + math: "\\looparrowright" +}, + "↭": { + math: "\\leftrightsquigarrow" +}, + "↮": { + math: "\\nleftrightarrow" +}, + "↯": { + math: "\\lightning" +}, + "↰": { + math: "\\Lsh" +}, + "↱": { + math: "\\Rsh" +}, + "↲": { + math: "\\dlsh" +}, + "↳": { + text: "\\reflectbox{\\carriagereturn}", + textpackages: [ + "graphics", + "unicode-math" + ] +}, + "↴": { + math: "\\linefeed" +}, + "↵": { + math: "\\carriagereturn" +}, + "↶": { + math: "\\curvearrowleft" +}, + "↷": { + math: "\\curvearrowright" +}, + "↸": { + math: "\\barovernorthwestarrow" +}, + "↹": { + math: "\\barleftarrowrightarrowba" +}, + "↺": { + math: "\\circlearrowleft" +}, + "↻": { + math: "\\circlearrowright" +}, + "↼": { + math: "\\leftharpoonup" +}, + "↽": { + math: "\\leftharpoondown" +}, + "↾": { + math: "\\upharpoonright" +}, + "↿": { + math: "\\upharpoonleft" +}, + "⇀": { + math: "\\rightharpoonup", + mathpackages: [ + "amsmath", + "amssymb" + ] +}, + "⇁": { + math: "\\rightharpoondown" +}, + "⇂": { + math: "\\downharpoonright" +}, + "⇃": { + math: "\\downharpoonleft" +}, + "⇄": { + math: "\\rightleftarrows" +}, + "⇅": { + math: "\\dblarrowupdown" +}, + "⇆": { + math: "\\leftrightarrows" +}, + "⇇": { + math: "\\leftleftarrows" +}, + "⇈": { + math: "\\upuparrows" +}, + "⇉": { + math: "\\rightrightarrows" +}, + "⇊": { + math: "\\downdownarrows" +}, + "⇋": { + math: "\\leftrightharpoons" +}, + "⇌": { + math: "\\rightleftharpoons" +}, + "⇍": { + math: "\\nLeftarrow" +}, + "⇎": { + math: "\\nLeftrightarrow" +}, + "⇏": { + math: "\\nRightarrow" +}, + "⇐": { + math: "\\Leftarrow" +}, + "⇑": { + math: "\\Uparrow" +}, + "⇒": { + math: "\\Rightarrow" +}, + "⇓": { + math: "\\Downarrow" +}, + "⇔": { + math: "\\Leftrightarrow" +}, + "⇕": { + math: "\\Updownarrow" +}, + "⇖": { + math: "\\Nwarrow" +}, + "⇗": { + math: "\\Nearrow" +}, + "⇘": { + math: "\\Searrow" +}, + "⇙": { + math: "\\Swarrow" +}, + "⇚": { + math: "\\Lleftarrow" +}, + "⇛": { + math: "\\Rrightarrow" +}, + "⇜": { + math: "\\leftsquigarrow" +}, + "⇝": { + math: "\\rightsquigarrow" +}, + "⇞": { + math: "\\nHuparrow" +}, + "⇟": { + math: "\\nHdownarrow" +}, + "⇠": { + math: "\\dashleftarrow" +}, + "⇡": { + math: "\\updasharrow" +}, + "⇢": { + math: "\\dashrightarrow" +}, + "⇣": { + math: "\\downdasharrow" +}, + "⇤": { + math: "\\LeftArrowBar" +}, + "⇥": { + math: "\\RightArrowBar" +}, + "⇦": { + math: "\\leftwhitearrow" +}, + "⇧": { + math: "\\upwhitearrow" +}, + "⇨": { + math: "\\rightwhitearrow" +}, + "⇩": { + math: "\\downwhitearrow" +}, + "⇪": { + math: "\\whitearrowupfrombar" +}, + "⇴": { + math: "\\circleonrightarrow" +}, + "⇵": { + math: "\\DownArrowUpArrow" +}, + "⇶": { + math: "\\rightthreearrows" +}, + "⇷": { + math: "\\nvleftarrow" +}, + "⇸": { + math: "\\pfun" +}, + "⇹": { + math: "\\nvleftrightarrow" +}, + "⇺": { + math: "\\nVleftarrow" +}, + "⇻": { + math: "\\ffun" +}, + "⇼": { + math: "\\nVleftrightarrow" +}, + "⇽": { + math: "\\leftarrowtriangle" +}, + "⇾": { + math: "\\rightarrowtriangle" +}, + "⇿": { + math: "\\leftrightarrowtriangle" +}, + "∀": { + math: "\\forall" +}, + "∁": { + math: "\\complement" +}, + "∂": { + math: "\\partial" +}, + "∃": { + math: "\\exists" +}, + "∄": { + math: "\\nexists" +}, + "∅": { + math: "\\varnothing" +}, + "∆": { + math: "\\increment" +}, + "∇": { + math: "\\nabla" +}, + "∈": { + math: "\\in" +}, + "∉": { + math: "\\not\\in" +}, + "∊": { + math: "\\smallin" +}, + "∋": { + math: "\\ni" +}, + "∌": { + math: "\\not\\ni" +}, + "∍": { + math: "\\smallni" +}, + "∎": { + math: "\\QED" +}, + "∏": { + math: "\\prod" +}, + "∐": { + math: "\\coprod" +}, + "∑": { + math: "\\sum" +}, + "−": { + math: "-", + text: "-" +}, + "∓": { + math: "\\mp" +}, + "∔": { + math: "\\dotplus" +}, + "∕": { + text: "/" +}, + "∖": { + math: "\\setminus" +}, + "∗": { + math: "{_\\ast}" +}, + "∘": { + math: "\\circ" +}, + "∙": { + math: "\\bullet" +}, + "√": { + math: "\\surd" +}, + "∛": { + math: "\\sqrt[3]" +}, + "∜": { + math: "\\sqrt[4]" +}, + "∝": { + math: "\\propto" +}, + "∞": { + math: "\\infty" +}, + "∟": { + math: "\\rightangle" +}, + "∠": { + math: "\\angle" +}, + "∡": { + math: "\\measuredangle" +}, + "∢": { + math: "\\sphericalangle" +}, + "∣": { + math: "\\mid" +}, + "∤": { + math: "\\nmid" +}, + "∥": { + math: "\\parallel" +}, + "∦": { + math: "\\nparallel" +}, + "∧": { + math: "\\wedge" +}, + "∨": { + math: "\\vee" +}, + "∩": { + math: "\\cap" +}, + "∪": { + math: "\\cup" +}, + "∫": { + math: "\\int" +}, + "∬": { + math: "{\\int\\!\\int}" +}, + "∭": { + math: "{\\int\\!\\int\\!\\int}" +}, + "∮": { + math: "\\oint" +}, + "∯": { + math: "\\surfintegral" +}, + "∰": { + math: "\\volintegral" +}, + "∱": { + math: "\\clwintegral" +}, + "∲": { + math: "\\lcirclerightint", + mathpackages: [ + "MnSymbol" + ] +}, + "∳": { + math: "\\rcirclerightint", + mathpackages: [ + "MnSymbol" + ] +}, + "∴": { + math: "\\therefore" +}, + "∵": { + math: "\\because" +}, + "∶": { + math: ":" +}, + "∷": { + math: "\\Colon" +}, + "∸": { + math: "\\dotdiv", + mathpackages: [ + "mathabx" + ] +}, + "∹": { + math: "\\eqcolon" +}, + "∺": { + math: "\\mathbin{{:}\\!\\!{-}\\!\\!{:}}" +}, + "∻": { + math: "\\homothetic" +}, + "∼": { + math: "\\sim" +}, + "∽": { + math: "\\backsim" +}, + "∾": { + math: "\\lazysinv" +}, + "∿": { + math: "\\AC" +}, + "≀": { + math: "\\wr" +}, + "≁": { + math: "\\not\\sim" +}, + "≂": { + math: "\\texteqsim", + mathpackages: [ + "xecjk" + ] +}, + "≂̸": { + math: "\\NotEqualTilde" +}, + "≃": { + math: "\\simeq" +}, + "≄": { + math: "\\not\\simeq" +}, + "≅": { + math: "\\cong" +}, + "≆": { + math: "\\approxnotequal" +}, + "≇": { + math: "\\not\\cong" +}, + "≈": { + math: "\\approx" +}, + "≉": { + math: "\\not\\approx" +}, + "≊": { + math: "\\approxeq" +}, + "≋": { + math: "\\tildetrpl" +}, + "≋̸": { + math: "\\not\\apid" +}, + "≌": { + math: "\\allequal" +}, + "≍": { + math: "\\asymp" +}, + "≎": { + math: "\\Bumpeq" +}, + "≎̸": { + math: "\\NotHumpDownHump" +}, + "≏": { + math: "\\bumpeq" +}, + "≏̸": { + math: "\\NotHumpEqual" +}, + "≐": { + math: "\\doteq" +}, + "≐̸": { + math: "\\not\\doteq" +}, + "≑": { + math: "\\doteqdot" +}, + "≒": { + math: "\\fallingdotseq" +}, + "≓": { + math: "\\risingdotseq" +}, + "≔": { + math: "\\coloneq", + text: ":=" +}, + "≕": { + math: "=:" +}, + "≖": { + math: "\\eqcirc" +}, + "≗": { + math: "\\circeq" +}, + "≘": { + math: "\\arceq" +}, + "≙": { + math: "\\estimates" +}, + "≛": { + math: "\\starequal" +}, + "≜": { + math: "\\triangleq" +}, + "≝": { + math: "\\eqdef" +}, + "≞": { + math: "\\measeq" +}, + "≠": { + math: "\\neq" +}, + "≡": { + math: "\\equiv" +}, + "≢": { + math: "\\not\\equiv" +}, + "≣": { + math: "\\Equiv" +}, + "≤": { + math: "\\leq" +}, + "≥": { + math: "\\geq" +}, + "≦": { + math: "\\leqq" +}, + "≧": { + math: "\\geqq" +}, + "≨": { + math: "\\lneqq" +}, + "≨︀": { + math: "\\lvertneqq" +}, + "≩": { + math: "\\gneqq" +}, + "≩︀": { + math: "\\gvertneqq" +}, + "≪": { + math: "\\ll" +}, + "≪̸": { + math: "\\NotLessLess" +}, + "≫": { + math: "\\gg" +}, + "≫̸": { + math: "\\NotGreaterGreater" +}, + "≬": { + math: "\\between" +}, + "≭": { + math: "{\\not\\kern-0.3em\\times}" +}, + "≮": { + math: "\\not<" +}, + "≯": { + math: "\\not>" +}, + "≰": { + math: "\\not\\leq" +}, + "≱": { + math: "\\not\\geq" +}, + "≲": { + math: "\\lessequivlnt" +}, + "≳": { + math: "\\greaterequivlnt" +}, + "≶": { + math: "\\lessgtr" +}, + "≷": { + math: "\\gtrless" +}, + "≸": { + math: "\\notlessgreater" +}, + "≹": { + math: "\\notgreaterless" +}, + "≺": { + math: "\\prec" +}, + "≻": { + math: "\\succ" +}, + "≼": { + math: "\\preccurlyeq" +}, + "≽": { + math: "\\succcurlyeq" +}, + "≾": { + math: "\\precapprox" +}, + "≾̸": { + math: "\\NotPrecedesTilde" +}, + "≿": { + math: "\\succapprox" +}, + "≿̸": { + math: "\\NotSucceedsTilde" +}, + "⊀": { + math: "\\not\\prec" +}, + "⊁": { + math: "\\not\\succ" +}, + "⊂": { + math: "\\subset" +}, + "⊃": { + math: "\\supset" +}, + "⊄": { + math: "\\not\\subset" +}, + "⊅": { + math: "\\not\\supset" +}, + "⊆": { + math: "\\subseteq" +}, + "⊇": { + math: "\\supseteq" +}, + "⊈": { + math: "\\not\\subseteq" +}, + "⊉": { + math: "\\not\\supseteq" +}, + "⊊": { + math: "\\subsetneq" +}, + "⊊︀": { + math: "\\varsubsetneqq" +}, + "⊋": { + math: "\\supsetneq" +}, + "⊋︀": { + math: "\\varsupsetneq" +}, + "⊌": { + math: "\\cupleftarrow" +}, + "⊍": { + math: "\\cupdot" +}, + "⊎": { + math: "\\uplus" +}, + "⊏": { + math: "\\sqsubset" +}, + "⊏̸": { + math: "\\NotSquareSubset" +}, + "⊐": { + math: "\\sqsupset" +}, + "⊐̸": { + math: "\\NotSquareSuperset" +}, + "⊑": { + math: "\\sqsubseteq" +}, + "⊒": { + math: "\\sqsupseteq" +}, + "⊓": { + math: "\\sqcap" +}, + "⊔": { + math: "\\sqcup" +}, + "⊕": { + math: "\\oplus" +}, + "⊖": { + math: "\\ominus" +}, + "⊗": { + math: "\\otimes" +}, + "⊘": { + math: "\\oslash" +}, + "⊙": { + math: "\\odot" +}, + "⊚": { + math: "\\circledcirc" +}, + "⊛": { + math: "\\circledast" +}, + "⊜": { + math: "\\circledequal" +}, + "⊝": { + math: "\\circleddash" +}, + "⊞": { + math: "\\boxplus" +}, + "⊟": { + math: "\\boxminus" +}, + "⊠": { + math: "\\boxtimes" +}, + "⊡": { + math: "\\boxdot" +}, + "⊢": { + math: "\\vdash" +}, + "⊣": { + math: "\\dashv" +}, + "⊤": { + math: "\\top" +}, + "⊥": { + math: "\\perp" +}, + "⊦": { + math: "\\assert" +}, + "⊧": { + math: "\\truestate" +}, + "⊨": { + math: "\\forcesextra" +}, + "⊩": { + math: "\\Vdash" +}, + "⊪": { + math: "\\Vvdash" +}, + "⊫": { + math: "\\VDash" +}, + "⊬": { + math: "\\nvdash" +}, + "⊭": { + math: "\\nvDash" +}, + "⊮": { + math: "\\nVdash" +}, + "⊯": { + math: "\\nVDash" +}, + "⊰": { + math: "\\prurel" +}, + "⊱": { + math: "\\scurel" +}, + "⊲": { + math: "\\vartriangleleft" +}, + "⊳": { + math: "\\vartriangleright" +}, + "⊴": { + math: "\\trianglelefteq" +}, + "⊵": { + math: "\\trianglerighteq" +}, + "⊶": { + math: "\\original" +}, + "⊷": { + math: "\\image" +}, + "⊸": { + math: "\\multimap" +}, + "⊹": { + math: "\\hermitconjmatrix" +}, + "⊺": { + math: "\\intercal" +}, + "⊻": { + math: "\\veebar" +}, + "⊼": { + math: "\\barwedge" +}, + "⊽": { + math: "\\barvee" +}, + "⊾": { + math: "\\rightanglearc" +}, + "⊿": { + math: "\\varlrtriangle" +}, + "⋂": { + math: "\\bigcap" +}, + "⋃": { + math: "\\bigcup" +}, + "⋄": { + math: "\\diamond" +}, + "⋅": { + math: "\\cdot" +}, + "⋆": { + math: "\\star" +}, + "⋇": { + math: "\\divideontimes" +}, + "⋈": { + math: "\\bowtie" +}, + "⋉": { + math: "\\ltimes" +}, + "⋊": { + math: "\\rtimes" +}, + "⋋": { + math: "\\leftthreetimes" +}, + "⋌": { + math: "\\rightthreetimes" +}, + "⋍": { + math: "\\backsimeq" +}, + "⋎": { + math: "\\curlyvee" +}, + "⋏": { + math: "\\curlywedge" +}, + "⋐": { + math: "\\Subset" +}, + "⋑": { + math: "\\Supset" +}, + "⋒": { + math: "\\Cap" +}, + "⋓": { + math: "\\Cup" +}, + "⋔": { + math: "\\pitchfork" +}, + "⋕": { + math: "\\hash" +}, + "⋖": { + math: "\\lessdot" +}, + "⋗": { + math: "\\gtrdot" +}, + "⋘": { + math: "\\verymuchless" +}, + "⋙": { + math: "\\verymuchgreater" +}, + "⋚": { + math: "\\lesseqgtr" +}, + "⋛": { + math: "\\gtreqless" +}, + "⋜": { + math: "\\eqless" +}, + "⋝": { + math: "\\eqgtr" +}, + "⋞": { + math: "\\curlyeqprec" +}, + "⋟": { + math: "\\curlyeqsucc" +}, + "⋠": { + math: "\\npreceq" +}, + "⋡": { + math: "\\nsucceq" +}, + "⋢": { + math: "\\not\\sqsubseteq" +}, + "⋣": { + math: "\\not\\sqsupseteq" +}, + "⋤": { + math: "\\sqsubsetneq" +}, + "⋥": { + math: "\\Elzsqspne" +}, + "⋦": { + math: "\\lnsim" +}, + "⋧": { + math: "\\gnsim" +}, + "⋨": { + math: "\\precedesnotsimilar" +}, + "⋩": { + math: "\\succnsim" +}, + "⋪": { + math: "\\ntriangleleft" +}, + "⋫": { + math: "\\ntriangleright" +}, + "⋬": { + math: "\\ntrianglelefteq" +}, + "⋭": { + math: "\\ntrianglerighteq" +}, + "⋮": { + math: "\\vdots" +}, + "⋯": { + math: "\\cdots" +}, + "⋰": { + math: "\\upslopeellipsis" +}, + "⋱": { + math: "\\downslopeellipsis" +}, + "⋲": { + math: "\\disin" +}, + "⋳": { + math: "\\varisins" +}, + "⋴": { + math: "\\isins" +}, + "⋵": { + math: "\\isindot" +}, + "⋶": { + math: "\\barin" +}, + "⋷": { + math: "\\isinobar" +}, + "⋸": { + math: "\\isinvb" +}, + "⋹": { + math: "\\isinE" +}, + "⋺": { + math: "\\nisd" +}, + "⋻": { + math: "\\varnis" +}, + "⋼": { + math: "\\nis" +}, + "⋽": { + math: "\\varniobar" +}, + "⋾": { + math: "\\niobar" +}, + "⋿": { + math: "\\bagmember" +}, + "⌀": { + math: "\\diameter" +}, + "⌂": { + math: "\\house" +}, + "⌅": { + math: "\\varbarwedge", + text: "{\\barwedge}" +}, + "⌆": { + math: "\\perspcorrespond" +}, + "⌈": { + math: "\\lceil" +}, + "⌉": { + math: "\\rceil" +}, + "⌊": { + math: "\\lfloor" +}, + "⌋": { + math: "\\rfloor" +}, + "⌐": { + math: "\\invneg" +}, + "⌑": { + math: "\\wasylozenge" +}, + "⌒": { + math: "\\profline" +}, + "⌓": { + math: "\\profsurf" +}, + "⌕": { + math: "\\recorder" +}, + "⌖": { + math: "{\\mathchar\"2208}" +}, + "⌗": { + math: "\\viewdata" +}, + "⌙": { + math: "\\turnednot" +}, + "⌜": { + math: "\\ulcorner" +}, + "⌝": { + math: "\\urcorner" +}, + "⌞": { + math: "\\llcorner" +}, + "⌟": { + math: "\\lrcorner" +}, + "⌠": { + math: "\\inttop" +}, + "⌡": { + math: "\\intbottom" +}, + "⌢": { + math: "\\frown" +}, + "⌣": { + math: "\\smile" +}, + "〈": { + math: "\\langle" +}, + "〉": { + math: "\\rangle" +}, + "⌬": { + math: "\\varhexagonlrbonds" +}, + "⌲": { + math: "\\conictaper" +}, + "⌶": { + math: "\\topbot" +}, + "⌹": { + math: "\\APLinv" +}, + "⌿": { + math: "\\notslash" +}, + "⍀": { + math: "\\notbackslash" +}, + "⍇": { + math: "\\APLleftarrowbox" +}, + "⍈": { + math: "\\APLrightarrowbox" +}, + "⍉": { + math: "\\invdiameter" +}, + "⍐": { + math: "\\APLuparrowbox" +}, + "⍓": { + math: "\\APLboxupcaret" +}, + "⍗": { + math: "\\APLdownarrowbox" +}, + "⍝": { + math: "\\APLcomment" +}, + "⍞": { + math: "\\APLinput" +}, + "⍟": { + math: "\\APLlog" +}, + "⍰": { + math: "\\APLboxquestion" +}, + "⍼": { + math: "\\rangledownzigzagarrow" +}, + "⎔": { + math: "\\hexagon" +}, + "⎛": { + math: "\\lparenuend" +}, + "⎜": { + math: "\\lparenextender" +}, + "⎝": { + math: "\\lparenlend" +}, + "⎞": { + math: "\\rparenuend" +}, + "⎟": { + math: "\\rparenextender" +}, + "⎠": { + math: "\\rparenlend" +}, + "⎡": { + math: "\\lbrackuend" +}, + "⎢": { + math: "\\lbrackextender" +}, + "⎣": { + math: "\\Elzdlcorn" +}, + "⎤": { + math: "\\rbrackuend" +}, + "⎥": { + math: "\\rbrackextender" +}, + "⎦": { + math: "\\rbracklend" +}, + "⎧": { + math: "\\lbraceuend" +}, + "⎨": { + math: "\\lbracemid" +}, + "⎩": { + math: "\\lbracelend" +}, + "⎪": { + math: "\\vbraceextender" +}, + "⎫": { + math: "\\rbraceuend" +}, + "⎬": { + math: "\\rbracemid" +}, + "⎭": { + math: "\\rbracelend" +}, + "⎮": { + math: "\\intextender" +}, + "⎯": { + math: "\\harrowextender" +}, + "⎰": { + math: "\\lmoustache" +}, + "⎱": { + math: "\\rmoustache" +}, + "⎲": { + math: "\\sumtop" +}, + "⎳": { + math: "\\sumbottom" +}, + "⎴": { + math: "\\overbracket" +}, + "⎵": { + math: "\\underbracket" +}, + "⎶": { + math: "\\bbrktbrk" +}, + "⎷": { + math: "\\sqrtbottom" +}, + "⎸": { + math: "\\lvboxline" +}, + "⎹": { + math: "\\rvboxline" +}, + "⏎": { + math: "\\varcarriagereturn" +}, + "⏜": { + math: "\\overparen" +}, + "⏝": { + math: "\\underparen" +}, + "⏞": { + math: "\\overbrace" +}, + "⏟": { + math: "\\underbrace" +}, + "⏠": { + math: "\\obrbrak" +}, + "⏡": { + math: "\\ubrbrak" +}, + "⏢": { + math: "\\trapezium" +}, + "⏣": { + math: "\\benzenr" +}, + "⏤": { + math: "\\strns" +}, + "⏥": { + math: "\\fltns" +}, + "⏦": { + math: "\\accurrent" +}, + "⏧": { + math: "\\elinters" +}, + "␀": { + text: "NUL" +}, + "␁": { + text: "SOH" +}, + "␂": { + text: "STX" +}, + "␃": { + text: "ETX" +}, + "␄": { + text: "EOT" +}, + "␅": { + text: "ENQ" +}, + "␆": { + text: "ACK" +}, + "␇": { + text: "BEL" +}, + "␈": { + text: "BS" +}, + "␉": { + text: "HT" +}, + "␊": { + text: "LF" +}, + "␋": { + text: "VT" +}, + "␌": { + text: "FF" +}, + "␍": { + text: "CR" +}, + "␎": { + text: "SO" +}, + "␏": { + text: "SI" +}, + "␐": { + text: "DLE" +}, + "␑": { + text: "DC1" +}, + "␒": { + text: "DC2" +}, + "␓": { + text: "DC3" +}, + "␔": { + text: "DC4" +}, + "␕": { + text: "NAK" +}, + "␖": { + text: "SYN" +}, + "␗": { + text: "ETB" +}, + "␘": { + text: "CAN" +}, + "␙": { + text: "EM" +}, + "␚": { + text: "SUB" +}, + "␛": { + text: "ESC" +}, + "␜": { + text: "FS" +}, + "␝": { + text: "GS" +}, + "␞": { + text: "RS" +}, + "␟": { + text: "US" +}, + "␠": { + text: "SP" +}, + "␡": { + text: "DEL" +}, + "␣": { + text: "{\\textvisiblespace}" +}, + "␤": { + text: "NL" +}, + "␥": { + text: "///" +}, + "␦": { + text: "?" +}, + "①": { + text: "\\ding{172}" +}, + "②": { + text: "\\ding{173}" +}, + "③": { + text: "\\ding{174}" +}, + "④": { + text: "\\ding{175}" +}, + "⑤": { + text: "\\ding{176}" +}, + "⑥": { + text: "\\ding{177}" +}, + "⑦": { + text: "\\ding{178}" +}, + "⑧": { + text: "\\ding{179}" +}, + "⑨": { + text: "\\ding{180}" +}, + "⑩": { + text: "\\ding{181}" +}, + "⑪": { + text: "(11)" +}, + "⑫": { + text: "(12)" +}, + "⑬": { + text: "(13)" +}, + "⑭": { + text: "(14)" +}, + "⑮": { + text: "(15)" +}, + "⑯": { + text: "(16)" +}, + "⑰": { + text: "(17)" +}, + "⑱": { + text: "(18)" +}, + "⑲": { + text: "(19)" +}, + "⑳": { + text: "(20)" +}, + "⑴": { + text: "(1)" +}, + "⑵": { + text: "(2)" +}, + "⑶": { + text: "(3)" +}, + "⑷": { + text: "(4)" +}, + "⑸": { + text: "(5)" +}, + "⑹": { + text: "(6)" +}, + "⑺": { + text: "(7)" +}, + "⑻": { + text: "(8)" +}, + "⑼": { + text: "(9)" +}, + "⑽": { + text: "(10)" +}, + "⑾": { + text: "(11)" +}, + "⑿": { + text: "(12)" +}, + "⒀": { + text: "(13)" +}, + "⒁": { + text: "(14)" +}, + "⒂": { + text: "(15)" +}, + "⒃": { + text: "(16)" +}, + "⒄": { + text: "(17)" +}, + "⒅": { + text: "(18)" +}, + "⒆": { + text: "(19)" +}, + "⒇": { + text: "(20)" +}, + "⒈": { + text: "1." +}, + "⒉": { + text: "2." +}, + "⒊": { + text: "3." +}, + "⒋": { + text: "4." +}, + "⒌": { + text: "5." +}, + "⒍": { + text: "6." +}, + "⒎": { + text: "7." +}, + "⒏": { + text: "8." +}, + "⒐": { + text: "9." +}, + "⒑": { + text: "10." +}, + "⒒": { + text: "11." +}, + "⒓": { + text: "12." +}, + "⒔": { + text: "13." +}, + "⒕": { + text: "14." +}, + "⒖": { + text: "15." +}, + "⒗": { + text: "16." +}, + "⒘": { + text: "17." +}, + "⒙": { + text: "18." +}, + "⒚": { + text: "19." +}, + "⒛": { + text: "20." +}, + "⒜": { + text: "(a)" +}, + "⒝": { + text: "(b)" +}, + "⒞": { + text: "(c)" +}, + "⒟": { + text: "(d)" +}, + "⒠": { + text: "(e)" +}, + "⒡": { + text: "(f)" +}, + "⒢": { + text: "(g)" +}, + "⒣": { + text: "(h)" +}, + "⒤": { + text: "(i)" +}, + "⒥": { + text: "(j)" +}, + "⒦": { + text: "(k)" +}, + "⒧": { + text: "(l)" +}, + "⒨": { + text: "(m)" +}, + "⒩": { + text: "(n)" +}, + "⒪": { + text: "(o)" +}, + "⒫": { + text: "(p)" +}, + "⒬": { + text: "(q)" +}, + "⒭": { + text: "(r)" +}, + "⒮": { + text: "(s)" +}, + "⒯": { + text: "(t)" +}, + "⒰": { + text: "(u)" +}, + "⒱": { + text: "(v)" +}, + "⒲": { + text: "(w)" +}, + "⒳": { + text: "(x)" +}, + "⒴": { + text: "(y)" +}, + "⒵": { + text: "(z)" +}, + "Ⓐ": { + text: "(A)" +}, + "Ⓑ": { + text: "(B)" +}, + "Ⓒ": { + text: "(C)" +}, + "Ⓓ": { + text: "(D)" +}, + "Ⓔ": { + text: "(E)" +}, + "Ⓕ": { + text: "(F)" +}, + "Ⓖ": { + text: "(G)" +}, + "Ⓗ": { + text: "(H)" +}, + "Ⓘ": { + text: "(I)" +}, + "Ⓙ": { + text: "(J)" +}, + "Ⓚ": { + text: "(K)" +}, + "Ⓛ": { + text: "(L)" +}, + "Ⓜ": { + text: "(M)" +}, + "Ⓝ": { + text: "(N)" +}, + "Ⓞ": { + text: "(O)" +}, + "Ⓟ": { + text: "(P)" +}, + "Ⓠ": { + text: "(Q)" +}, + "Ⓡ": { + text: "(R)" +}, + "Ⓢ": { + math: "\\circledS" +}, + "Ⓣ": { + text: "(T)" +}, + "Ⓤ": { + text: "(U)" +}, + "Ⓥ": { + text: "(V)" +}, + "Ⓦ": { + text: "(W)" +}, + "Ⓧ": { + text: "(X)" +}, + "Ⓨ": { + text: "(Y)" +}, + "Ⓩ": { + text: "(Z)" +}, + "ⓐ": { + text: "(a)" +}, + "ⓑ": { + text: "(b)" +}, + "ⓒ": { + text: "(c)" +}, + "ⓓ": { + text: "(d)" +}, + "ⓔ": { + text: "(e)" +}, + "ⓕ": { + text: "(f)" +}, + "ⓖ": { + text: "(g)" +}, + "ⓗ": { + text: "(h)" +}, + "ⓘ": { + text: "(i)" +}, + "ⓙ": { + text: "(j)" +}, + "ⓚ": { + text: "(k)" +}, + "ⓛ": { + text: "(l)" +}, + "ⓜ": { + text: "(m)" +}, + "ⓝ": { + text: "(n)" +}, + "ⓞ": { + text: "(o)" +}, + "ⓟ": { + text: "(p)" +}, + "ⓠ": { + text: "(q)" +}, + "ⓡ": { + text: "(r)" +}, + "ⓢ": { + text: "(s)" +}, + "ⓣ": { + text: "(t)" +}, + "ⓤ": { + text: "(u)" +}, + "ⓥ": { + text: "(v)" +}, + "ⓦ": { + text: "(w)" +}, + "ⓧ": { + text: "(x)" +}, + "ⓨ": { + text: "(y)" +}, + "ⓩ": { + text: "(z)" +}, + "⓪": { + text: "(0)" +}, + "─": { + text: "-" +}, + "━": { + text: "=" +}, + "│": { + text: "|" +}, + "┃": { + text: "|" +}, + "┄": { + text: "-" +}, + "┅": { + text: "=" +}, + "┆": { + math: "\\Elzdshfnc" +}, + "┇": { + text: "|" +}, + "┈": { + text: "-" +}, + "┉": { + text: "=" +}, + "┊": { + text: "|" +}, + "┋": { + text: "|" +}, + "┌": { + text: "+" +}, + "┍": { + text: "+" +}, + "┎": { + text: "+" +}, + "┏": { + text: "+" +}, + "┐": { + text: "+" +}, + "┑": { + text: "+" +}, + "┒": { + text: "+" +}, + "┓": { + text: "+" +}, + "└": { + text: "+" +}, + "┕": { + text: "+" +}, + "┖": { + text: "+" +}, + "┗": { + text: "+" +}, + "┘": { + text: "+" +}, + "┙": { + math: "\\Elzsqfnw" +}, + "┚": { + text: "+" +}, + "┛": { + text: "+" +}, + "├": { + text: "+" +}, + "┝": { + text: "+" +}, + "┞": { + text: "+" +}, + "┟": { + text: "+" +}, + "┠": { + text: "+" +}, + "┡": { + text: "+" +}, + "┢": { + text: "+" +}, + "┣": { + text: "+" +}, + "┤": { + text: "+" +}, + "┥": { + text: "+" +}, + "┦": { + text: "+" +}, + "┧": { + text: "+" +}, + "┨": { + text: "+" +}, + "┩": { + text: "+" +}, + "┪": { + text: "+" +}, + "┫": { + text: "+" +}, + "┬": { + text: "+" +}, + "┭": { + text: "+" +}, + "┮": { + text: "+" +}, + "┯": { + text: "+" +}, + "┰": { + text: "+" +}, + "┱": { + text: "+" +}, + "┲": { + text: "+" +}, + "┳": { + text: "+" +}, + "┴": { + text: "+" +}, + "┵": { + text: "+" +}, + "┶": { + text: "+" +}, + "┷": { + text: "+" +}, + "┸": { + text: "+" +}, + "┹": { + text: "+" +}, + "┺": { + text: "+" +}, + "┻": { + text: "+" +}, + "┼": { + text: "+" +}, + "┽": { + text: "+" +}, + "┾": { + text: "+" +}, + "┿": { + text: "+" +}, + "╀": { + text: "+" +}, + "╁": { + text: "+" +}, + "╂": { + text: "+" +}, + "╃": { + text: "+" +}, + "╄": { + text: "+" +}, + "╅": { + text: "+" +}, + "╆": { + text: "+" +}, + "╇": { + text: "+" +}, + "╈": { + text: "+" +}, + "╉": { + text: "+" +}, + "╊": { + text: "+" +}, + "╋": { + text: "+" +}, + "╌": { + text: "-" +}, + "╍": { + text: "=" +}, + "╎": { + text: "|" +}, + "╏": { + text: "|" +}, + "═": { + text: "=" +}, + "║": { + text: "|" +}, + "╒": { + text: "+" +}, + "╓": { + text: "+" +}, + "╔": { + text: "+" +}, + "╕": { + text: "+" +}, + "╖": { + text: "+" +}, + "╗": { + text: "+" +}, + "╘": { + text: "+" +}, + "╙": { + text: "+" +}, + "╚": { + text: "+" +}, + "╛": { + text: "+" +}, + "╜": { + text: "+" +}, + "╝": { + text: "+" +}, + "╞": { + text: "+" +}, + "╟": { + text: "+" +}, + "╠": { + text: "+" +}, + "╡": { + text: "+" +}, + "╢": { + text: "+" +}, + "╣": { + text: "+" +}, + "╤": { + text: "+" +}, + "╥": { + text: "+" +}, + "╦": { + text: "+" +}, + "╧": { + text: "+" +}, + "╨": { + text: "+" +}, + "╩": { + text: "+" +}, + "╪": { + text: "+" +}, + "╫": { + text: "+" +}, + "╬": { + text: "+" +}, + "╭": { + text: "+" +}, + "╮": { + text: "+" +}, + "╯": { + text: "+" +}, + "╰": { + text: "+" +}, + "╱": { + math: "\\diagup" +}, + "╲": { + text: "\\" +}, + "╳": { + text: "X" +}, + "╼": { + text: "-" +}, + "╽": { + text: "|" +}, + "╾": { + text: "-" +}, + "╿": { + text: "|" +}, + "▀": { + math: "\\blockuphalf" +}, + "▄": { + math: "\\blocklowhalf" +}, + "█": { + math: "\\blockfull" +}, + "▌": { + math: "\\blocklefthalf" +}, + "▐": { + math: "\\blockrighthalf" +}, + "░": { + math: "\\blockqtrshaded" +}, + "▒": { + math: "\\blockhalfshaded" +}, + "▓": { + math: "\\blockthreeqtrshaded" +}, + "■": { + math: "\\mdlgblksquare", + text: "\\ding{110}" +}, + "□": { + math: "\\square" +}, + "▢": { + math: "\\squoval" +}, + "▣": { + math: "\\blackinwhitesquare" +}, + "▤": { + math: "\\squarehfill" +}, + "▥": { + math: "\\squarevfill" +}, + "▦": { + math: "\\squarehvfill" +}, + "▧": { + math: "\\squarenwsefill" +}, + "▨": { + math: "\\squareneswfill" +}, + "▩": { + math: "\\squarecrossfill" +}, + "▪": { + math: "\\blacksquare" +}, + "▫": { + math: "\\smwhtsquare" +}, + "▬": { + math: "\\hrectangleblack" +}, + "▭": { + math: "\\fbox{~~}" +}, + "▮": { + math: "\\vrectangleblack" +}, + "▯": { + math: "\\Elzvrecto" +}, + "▰": { + math: "\\parallelogramblack" +}, + "▲": { + math: "\\bigblacktriangleup", + text: "\\ding{115}" +}, + "△": { + math: "\\bigtriangleup" +}, + "▴": { + math: "\\blacktriangle" +}, + "▵": { + math: "\\vartriangle" +}, + "▶": { + math: "\\RHD" +}, + "▷": { + math: "\\rhd" +}, + "▸": { + math: "\\blacktriangleright" +}, + "▹": { + math: "\\triangleright" +}, + "►": { + math: "\\blackpointerright" +}, + "▻": { + math: "\\whitepointerright" +}, + "▼": { + math: "\\bigblacktriangledown", + text: "\\ding{116}" +}, + "▽": { + math: "\\bigtriangledown" +}, + "▾": { + math: "\\blacktriangledown" +}, + "▿": { + math: "\\triangledown" +}, + "◀": { + math: "\\LHD" +}, + "◁": { + math: "\\lhd" +}, + "◂": { + math: "\\blacktriangleleft" +}, + "◃": { + math: "\\triangleleft" +}, + "◄": { + math: "\\blackpointerleft" +}, + "◅": { + math: "\\whitepointerleft" +}, + "◆": { + math: "\\Diamondblack", + text: "\\ding{117}" +}, + "◇": { + math: "\\Diamond" +}, + "◈": { + math: "\\blackinwhitediamond" +}, + "◉": { + math: "\\fisheye" +}, + "◊": { + math: "\\lozenge" +}, + "○": { + math: "\\bigcirc" +}, + "◌": { + math: "\\dottedcircle" +}, + "◍": { + math: "\\circlevertfill" +}, + "◎": { + math: "\\bullseye" +}, + "●": { + math: "\\CIRCLE", + text: "\\ding{108}" +}, + "◐": { + math: "\\Elzcirfl" +}, + "◑": { + math: "\\Elzcirfr" +}, + "◒": { + math: "\\Elzcirfb" +}, + "◓": { + math: "\\circletophalfblack" +}, + "◔": { + math: "\\circleurquadblack" +}, + "◕": { + math: "\\blackcircleulquadwhite" +}, + "◖": { + math: "\\LEFTCIRCLE" +}, + "◗": { + math: "\\RIGHTCIRCLE", + text: "\\ding{119}" +}, + "◘": { + math: "\\Elzrvbull" +}, + "◙": { + math: "\\inversewhitecircle" +}, + "◚": { + math: "\\invwhiteupperhalfcircle" +}, + "◛": { + math: "\\invwhitelowerhalfcircle" +}, + "◜": { + math: "\\ularc" +}, + "◝": { + math: "\\urarc" +}, + "◞": { + math: "\\lrarc" +}, + "◟": { + math: "\\llarc" +}, + "◠": { + math: "\\topsemicircle" +}, + "◡": { + math: "\\botsemicircle" +}, + "◢": { + math: "\\lrblacktriangle" +}, + "◣": { + math: "\\llblacktriangle" +}, + "◤": { + math: "\\ulblacktriangle" +}, + "◥": { + math: "\\urblacktriangle" +}, + "◦": { + math: "\\smwhtcircle" +}, + "◧": { + math: "\\Elzsqfl" +}, + "◨": { + math: "\\Elzsqfr" +}, + "◩": { + math: "\\squareulblack" +}, + "◪": { + math: "\\Elzsqfse" +}, + "◫": { + math: "\\boxbar" +}, + "◬": { + math: "\\trianglecdot" +}, + "◭": { + math: "\\triangleleftblack" +}, + "◮": { + math: "\\trianglerightblack" +}, + "◯": { + math: "\\bigcirc" +}, + "◰": { + math: "\\squareulquad" +}, + "◱": { + math: "\\squarellquad" +}, + "◲": { + math: "\\squarelrquad" +}, + "◳": { + math: "\\squareurquad" +}, + "◴": { + math: "\\circleulquad" +}, + "◵": { + math: "\\circlellquad" +}, + "◶": { + math: "\\circlelrquad" +}, + "◷": { + math: "\\circleurquad" +}, + "◸": { + math: "\\ultriangle" +}, + "◹": { + math: "\\urtriangle" +}, + "◺": { + math: "\\lltriangle" +}, + "◻": { + math: "\\square" +}, + "◼": { + math: "\\blacksquare" +}, + "◽": { + math: "\\mdsmwhtsquare" +}, + "◾": { + math: "\\mdsmblksquare" +}, + "◿": { + math: "\\lrtriangle" +}, + "★": { + math: "\\bigstar", + text: "\\ding{72}" +}, + "☆": { + math: "\\bigwhitestar", + text: "\\ding{73}" +}, + "☉": { + math: "\\Sun" +}, + "☎": { + text: "\\ding{37}" +}, + "☐": { + math: "\\Square" +}, + "☑": { + math: "\\CheckedBox" +}, + "☒": { + math: "\\XBox" +}, + "☓": { + text: "X" +}, + "☕": { + math: "\\steaming" +}, + "☛": { + text: "\\ding{42}" +}, + "☞": { + math: "\\pointright", + text: "\\ding{43}" +}, + "☠": { + math: "\\skull" +}, + "☡": { + math: "\\danger" +}, + "☢": { + math: "\\radiation" +}, + "☣": { + math: "\\biohazard" +}, + "☯": { + math: "\\yinyang" +}, + "☹": { + math: "\\frownie" +}, + "☺": { + math: "\\smiley" +}, + "☻": { + math: "\\blacksmiley" +}, + "☼": { + math: "\\sun" +}, + "☽": { + text: "{\\rightmoon}", + textpackages: [ + "wasysym" + ] +}, + "☾": { + text: "{\\leftmoon}", + textpackages: [ + "wasysym" + ] +}, + "☿": { + math: "\\mercury", + text: "{\\mercury}" +}, + "♀": { + math: "\\female", + text: "{\\venus}" +}, + "♁": { + math: "\\earth" +}, + "♂": { + math: "\\male", + text: "{\\male}" +}, + "♃": { + math: "\\jupiter", + text: "{\\jupiter}" +}, + "♄": { + math: "\\saturn", + text: "{\\saturn}" +}, + "♅": { + math: "\\uranus", + text: "{\\uranus}" +}, + "♆": { + math: "\\neptune", + text: "{\\neptune}" +}, + "♇": { + math: "\\pluto", + text: "{\\pluto}" +}, + "♈": { + math: "\\aries", + text: "{\\aries}" +}, + "♉": { + math: "\\taurus", + text: "{\\taurus}" +}, + "♊": { + math: "\\gemini", + text: "{\\gemini}" +}, + "♋": { + math: "\\cancer", + text: "{\\cancer}" +}, + "♌": { + math: "\\leo", + text: "{\\leo}" +}, + "♍": { + math: "\\virgo", + text: "{\\virgo}" +}, + "♎": { + math: "\\libra", + text: "{\\libra}" +}, + "♏": { + math: "\\scorpio", + text: "{\\scorpio}" +}, + "♐": { + math: "\\sagittarius", + text: "{\\sagittarius}" +}, + "♑": { + math: "\\capricornus", + text: "{\\capricornus}" +}, + "♒": { + math: "\\aquarius", + text: "{\\aquarius}" +}, + "♓": { + math: "\\pisces", + text: "{\\pisces}" +}, + "♠": { + math: "\\spadesuit", + text: "\\ding{171}" +}, + "♡": { + math: "\\heartsuit" +}, + "♢": { + math: "\\diamond" +}, + "♣": { + math: "\\clubsuit", + text: "\\ding{168}" +}, + "♤": { + math: "\\varspadesuit" +}, + "♥": { + math: "\\varheartsuit", + text: "\\ding{170}" +}, + "♦": { + math: "\\vardiamondsuit", + text: "\\ding{169}" +}, + "♧": { + math: "\\varclubsuit" +}, + "♩": { + math: "\\quarternote", + text: "{\\quarternote}" +}, + "♪": { + math: "\\eighthnote", + text: "{\\eighthnote}" +}, + "♫": { + math: "\\twonotes" +}, + "♬": { + math: "\\sixteenthnote" +}, + "♭": { + math: "\\flat" +}, + "♮": { + math: "\\natural" +}, + "♯": { + math: "\\sharp" +}, + "♻": { + math: "\\recycle" +}, + "♾": { + math: "\\acidfree" +}, + "⚀": { + math: "\\dicei" +}, + "⚁": { + math: "\\diceii" +}, + "⚂": { + math: "\\diceiii" +}, + "⚃": { + math: "\\diceiv" +}, + "⚄": { + math: "\\dicev" +}, + "⚅": { + math: "\\dicevi" +}, + "⚆": { + math: "\\circledrightdot" +}, + "⚇": { + math: "\\circledtwodots" +}, + "⚈": { + math: "\\blackcircledrightdot" +}, + "⚉": { + math: "\\blackcircledtwodots" +}, + "⚓": { + math: "\\anchor" +}, + "⚔": { + math: "\\swords" +}, + "⚠": { + math: "\\warning" +}, + "⚥": { + math: "\\Hermaphrodite" +}, + "⚪": { + math: "\\medcirc" +}, + "⚫": { + math: "\\medbullet" +}, + "⚬": { + math: "\\mdsmwhtcircle" +}, + "⚲": { + math: "\\neuter" +}, + "✁": { + text: "\\ding{33}" +}, + "✂": { + text: "\\ding{34}" +}, + "✃": { + text: "\\ding{35}" +}, + "✄": { + text: "\\ding{36}" +}, + "✆": { + text: "\\ding{38}" +}, + "✇": { + text: "\\ding{39}" +}, + "✈": { + text: "\\ding{40}" +}, + "✉": { + text: "\\ding{41}" +}, + "✌": { + text: "\\ding{44}" +}, + "✍": { + text: "\\ding{45}" +}, + "✎": { + math: "\\pencil", + text: "\\ding{46}" +}, + "✏": { + text: "\\ding{47}" +}, + "✐": { + text: "\\ding{48}" +}, + "✑": { + text: "\\ding{49}" +}, + "✒": { + text: "\\ding{50}" +}, + "✓": { + math: "\\checkmark", + text: "\\ding{51}" +}, + "✔": { + text: "\\ding{52}" +}, + "✕": { + text: "\\ding{53}" +}, + "✖": { + text: "\\ding{54}" +}, + "✗": { + math: "\\ballotx", + text: "\\ding{55}" +}, + "✘": { + text: "\\ding{56}" +}, + "✙": { + text: "\\ding{57}" +}, + "✚": { + text: "\\ding{58}" +}, + "✛": { + text: "\\ding{59}" +}, + "✜": { + text: "\\ding{60}" +}, + "✝": { + text: "\\ding{61}" +}, + "✞": { + text: "\\ding{62}" +}, + "✟": { + text: "\\ding{63}" +}, + "✠": { + math: "\\maltese", + text: "\\ding{64}" +}, + "✡": { + text: "\\ding{65}" +}, + "✢": { + text: "\\ding{66}" +}, + "✣": { + text: "\\ding{67}" +}, + "✤": { + text: "\\ding{68}" +}, + "✥": { + text: "\\ding{69}" +}, + "✦": { + text: "\\ding{70}" +}, + "✧": { + text: "\\ding{71}" +}, + "✩": { + text: "\\ding{73}" +}, + "✪": { + math: "\\circledstar", + text: "\\ding{74}" +}, + "✫": { + text: "\\ding{75}" +}, + "✬": { + text: "\\ding{76}" +}, + "✭": { + text: "\\ding{77}" +}, + "✮": { + text: "\\ding{78}" +}, + "✯": { + text: "\\ding{79}" +}, + "✰": { + text: "\\ding{80}" +}, + "✱": { + text: "\\ding{81}" +}, + "✲": { + text: "\\ding{82}" +}, + "✳": { + text: "\\ding{83}" +}, + "✴": { + text: "\\ding{84}" +}, + "✵": { + text: "\\ding{85}" +}, + "✶": { + math: "\\varstar", + text: "\\ding{86}" +}, + "✷": { + text: "\\ding{87}" +}, + "✸": { + text: "\\ding{88}" +}, + "✹": { + text: "\\ding{89}" +}, + "✺": { + text: "\\ding{90}" +}, + "✻": { + text: "\\ding{91}" +}, + "✼": { + text: "\\ding{92}" +}, + "✽": { + math: "\\dingasterisk", + text: "\\ding{93}" +}, + "✾": { + text: "\\ding{94}" +}, + "✿": { + text: "\\ding{95}" +}, + "❀": { + text: "\\ding{96}" +}, + "❁": { + text: "\\ding{97}" +}, + "❂": { + text: "\\ding{98}" +}, + "❃": { + text: "\\ding{99}" +}, + "❄": { + text: "\\ding{100}" +}, + "❅": { + text: "\\ding{101}" +}, + "❆": { + text: "\\ding{102}" +}, + "❇": { + text: "\\ding{103}" +}, + "❈": { + text: "\\ding{104}" +}, + "❉": { + text: "\\ding{105}" +}, + "❊": { + text: "\\ding{106}" +}, + "❋": { + text: "\\ding{107}" +}, + "❍": { + text: "\\ding{109}" +}, + "❏": { + text: "\\ding{111}" +}, + "❐": { + text: "\\ding{112}" +}, + "❑": { + text: "\\ding{113}" +}, + "❒": { + text: "\\ding{114}" +}, + "❖": { + text: "\\ding{118}" +}, + "❘": { + text: "\\ding{120}" +}, + "❙": { + text: "\\ding{121}" +}, + "❚": { + text: "\\ding{122}" +}, + "❛": { + text: "\\ding{123}" +}, + "❜": { + text: "\\ding{124}" +}, + "❝": { + text: "\\ding{125}" +}, + "❞": { + text: "\\ding{126}" +}, + "❡": { + text: "\\ding{161}" +}, + "❢": { + text: "\\ding{162}" +}, + "❣": { + text: "\\ding{163}" +}, + "❤": { + text: "\\ding{164}" +}, + "❥": { + text: "\\ding{165}" +}, + "❦": { + text: "\\ding{166}" +}, + "❧": { + text: "\\ding{167}" +}, + "❲": { + math: "\\lbrbrak" +}, + "❳": { + math: "\\rbrbrak" +}, + "❶": { + text: "\\ding{182}" +}, + "❷": { + text: "\\ding{183}" +}, + "❸": { + text: "\\ding{184}" +}, + "❹": { + text: "\\ding{185}" +}, + "❺": { + text: "\\ding{186}" +}, + "❻": { + text: "\\ding{187}" +}, + "❼": { + text: "\\ding{188}" +}, + "❽": { + text: "\\ding{189}" +}, + "❾": { + text: "\\ding{190}" +}, + "❿": { + text: "\\ding{191}" +}, + "➀": { + text: "\\ding{192}" +}, + "➁": { + text: "\\ding{193}" +}, + "➂": { + text: "\\ding{194}" +}, + "➃": { + text: "\\ding{195}" +}, + "➄": { + text: "\\ding{196}" +}, + "➅": { + text: "\\ding{197}" +}, + "➆": { + text: "\\ding{198}" +}, + "➇": { + text: "\\ding{199}" +}, + "➈": { + text: "\\ding{200}" +}, + "➉": { + text: "\\ding{201}" +}, + "➊": { + text: "\\ding{202}" +}, + "➋": { + text: "\\ding{203}" +}, + "➌": { + text: "\\ding{204}" +}, + "➍": { + text: "\\ding{205}" +}, + "➎": { + text: "\\ding{206}" +}, + "➏": { + text: "\\ding{207}" +}, + "➐": { + text: "\\ding{208}" +}, + "➑": { + text: "\\ding{209}" +}, + "➒": { + text: "\\ding{210}" +}, + "➓": { + text: "\\ding{211}" +}, + "➔": { + text: "\\ding{212}" +}, + "➘": { + text: "\\ding{216}" +}, + "➙": { + text: "\\ding{217}" +}, + "➚": { + text: "\\ding{218}" +}, + "➛": { + math: "\\draftingarrow", + text: "\\ding{219}" +}, + "➜": { + text: "\\ding{220}" +}, + "➝": { + text: "\\ding{221}" +}, + "➞": { + text: "\\ding{222}" +}, + "➟": { + text: "\\ding{223}" +}, + "➠": { + text: "\\ding{224}" +}, + "➡": { + text: "\\ding{225}" +}, + "➢": { + math: "\\arrowbullet", + text: "\\ding{226}" +}, + "➣": { + text: "\\ding{227}" +}, + "➤": { + text: "\\ding{228}" +}, + "➥": { + text: "\\ding{229}" +}, + "➦": { + text: "\\ding{230}" +}, + "➧": { + text: "\\ding{231}" +}, + "➨": { + text: "\\ding{232}" +}, + "➩": { + text: "\\ding{233}" +}, + "➪": { + text: "\\ding{234}" +}, + "➫": { + text: "\\ding{235}" +}, + "➬": { + text: "\\ding{236}" +}, + "➭": { + text: "\\ding{237}" +}, + "➮": { + text: "\\ding{238}" +}, + "➯": { + text: "\\ding{239}" +}, + "➱": { + text: "\\ding{241}" +}, + "➲": { + text: "\\ding{242}" +}, + "➳": { + text: "\\ding{243}" +}, + "➴": { + text: "\\ding{244}" +}, + "➵": { + text: "\\ding{245}" +}, + "➶": { + text: "\\ding{246}" +}, + "➷": { + text: "\\ding{247}" +}, + "➸": { + text: "\\ding{248}" +}, + "➹": { + text: "\\ding{249}" +}, + "➺": { + text: "\\ding{250}" +}, + "➻": { + text: "\\ding{251}" +}, + "➼": { + text: "\\ding{252}" +}, + "➽": { + text: "\\ding{253}" +}, + "➾": { + text: "\\ding{254}" +}, + "⟀": { + math: "\\threedangle" +}, + "⟁": { + math: "\\whiteinwhitetriangle" +}, + "⟂": { + math: "\\perp" +}, + "⟃": { + math: "\\subsetcirc" +}, + "⟄": { + math: "\\supsetcirc" +}, + "⟅": { + math: "\\Lbag" +}, + "⟆": { + math: "\\Rbag" +}, + "⟇": { + math: "\\veedot" +}, + "⟈": { + math: "\\bsolhsub" +}, + "⟉": { + math: "\\suphsol" +}, + "⟌": { + math: "\\longdivision" +}, + "⟐": { + math: "\\Diamonddot" +}, + "⟑": { + math: "\\wedgedot" +}, + "⟒": { + math: "\\upin" +}, + "⟓": { + math: "\\pullback" +}, + "⟔": { + math: "\\pushout" +}, + "⟕": { + math: "\\leftouterjoin" +}, + "⟖": { + math: "\\rightouterjoin" +}, + "⟗": { + math: "\\fullouterjoin" +}, + "⟘": { + math: "\\bigbot" +}, + "⟙": { + math: "\\bigtop" +}, + "⟚": { + math: "\\DashVDash" +}, + "⟛": { + math: "\\dashVdash" +}, + "⟜": { + math: "\\multimapinv" +}, + "⟝": { + math: "\\vlongdash" +}, + "⟞": { + math: "\\longdashv" +}, + "⟟": { + math: "\\cirbot" +}, + "⟠": { + math: "\\lozengeminus" +}, + "⟡": { + math: "\\concavediamond" +}, + "⟢": { + math: "\\concavediamondtickleft" +}, + "⟣": { + math: "\\concavediamondtickright" +}, + "⟤": { + math: "\\whitesquaretickleft" +}, + "⟥": { + math: "\\whitesquaretickright" +}, + "⟦": { + math: "\\llbracket" +}, + "⟧": { + math: "\\rrbracket" +}, + "⟨": { + math: "\\langle" +}, + "⟩": { + math: "\\rangle" +}, + "⟪": { + math: "\\lang" +}, + "⟫": { + math: "\\rang" +}, + "⟬": { + math: "\\Lbrbrak" +}, + "⟭": { + math: "\\Rbrbrak" +}, + "⟮": { + math: "\\lgroup" +}, + "⟯": { + math: "\\rgroup" +}, + "⟰": { + math: "\\UUparrow" +}, + "⟱": { + math: "\\DDownarrow" +}, + "⟲": { + math: "\\acwgapcirclearrow" +}, + "⟳": { + math: "\\cwgapcirclearrow" +}, + "⟴": { + math: "\\rightarrowonoplus" +}, + "⟵": { + math: "\\longleftarrow" +}, + "⟶": { + math: "\\longrightarrow" +}, + "⟷": { + math: "\\longleftrightarrow" +}, + "⟸": { + math: "\\Longleftarrow" +}, + "⟹": { + math: "\\Longrightarrow" +}, + "⟺": { + math: "\\Longleftrightarrow" +}, + "⟻": { + math: "\\longmapsfrom" +}, + "⟼": { + math: "\\longmapsto" +}, + "⟽": { + math: "\\Longmapsfrom" +}, + "⟾": { + math: "\\Longmapsto" +}, + "⟿": { + math: "\\sim\\joinrel\\leadsto" +}, + "⤀": { + math: "\\psur" +}, + "⤁": { + math: "\\nVtwoheadrightarrow" +}, + "⤂": { + math: "\\nvLeftarrow" +}, + "⤃": { + math: "\\nvRightarrow" +}, + "⤄": { + math: "\\nvLeftrightarrow" +}, + "⤆": { + math: "\\Mapsfrom" +}, + "⤇": { + math: "\\Mapsto" +}, + "⤈": { + math: "\\downarrowbarred" +}, + "⤉": { + math: "\\uparrowbarred" +}, + "⤊": { + math: "\\Uuparrow" +}, + "⤋": { + math: "\\Ddownarrow" +}, + "⤌": { + math: "\\leftbkarrow" +}, + "⤍": { + math: "\\rightbkarrow" +}, + "⤎": { + math: "\\leftdbkarrow" +}, + "⤏": { + math: "\\dbkarow" +}, + "⤐": { + math: "\\drbkarow" +}, + "⤑": { + math: "\\rightdotarrow" +}, + "⤒": { + math: "\\UpArrowBar" +}, + "⤓": { + math: "\\DownArrowBar" +}, + "⤔": { + math: "\\pinj" +}, + "⤕": { + math: "\\finj" +}, + "⤖": { + math: "\\bij" +}, + "⤗": { + math: "\\nvtwoheadrightarrowtail" +}, + "⤘": { + math: "\\nVtwoheadrightarrowtail" +}, + "⤙": { + math: "\\lefttail" +}, + "⤚": { + math: "\\righttail" +}, + "⤛": { + math: "\\leftdbltail" +}, + "⤜": { + math: "\\rightdbltail" +}, + "⤝": { + math: "\\diamondleftarrow" +}, + "⤞": { + math: "\\rightarrowdiamond" +}, + "⤟": { + math: "\\diamondleftarrowbar" +}, + "⤠": { + math: "\\barrightarrowdiamond" +}, + "⤡": { + math: "\\nwsearrow" +}, + "⤢": { + math: "\\neswarrow" +}, + "⤫": { + math: "\\rdiagovfdiag" +}, + "⤬": { + math: "\\fdiagovrdiag" +}, + "⤭": { + math: "\\seovnearrow" +}, + "⤮": { + math: "\\neovsearrow" +}, + "⤯": { + math: "\\fdiagovnearrow" +}, + "⤰": { + math: "\\rdiagovsearrow" +}, + "⤱": { + math: "\\neovnwarrow" +}, + "⤲": { + math: "\\nwovnearrow" +}, + "⤴": { + math: "\\uprightcurvearrow" +}, + "⤵": { + math: "\\downrightcurvedarrow" +}, + "⤸": { + math: "\\cwrightarcarrow" +}, + "⤹": { + math: "\\acwleftarcarrow" +}, + "⤺": { + math: "\\acwoverarcarrow" +}, + "⤻": { + math: "\\acwunderarcarrow" +}, + "⤼": { + math: "\\curvearrowrightminus" +}, + "⤽": { + math: "\\curvearrowleftplus" +}, + "⤾": { + math: "\\cwundercurvearrow" +}, + "⤿": { + math: "\\ccwundercurvearrow" +}, + "⥀": { + math: "\\Elolarr" +}, + "⥁": { + math: "\\Elorarr" +}, + "⥂": { + math: "\\ElzRlarr" +}, + "⥃": { + math: "\\leftarrowshortrightarrow" +}, + "⥄": { + math: "\\ElzrLarr" +}, + "⥅": { + math: "\\rightarrowplus" +}, + "⥆": { + math: "\\leftarrowplus" +}, + "⥇": { + math: "\\Elzrarrx" +}, + "⥈": { + math: "\\leftrightarrowcircle" +}, + "⥉": { + math: "\\twoheaduparrowcircle" +}, + "⥊": { + math: "\\leftrightharpoon" +}, + "⥋": { + math: "\\rightleftharpoon" +}, + "⥌": { + math: "\\updownharpoonrightleft" +}, + "⥍": { + math: "\\updownharpoonleftright" +}, + "⥎": { + math: "\\LeftRightVector" +}, + "⥏": { + math: "\\RightUpDownVector" +}, + "⥐": { + math: "\\DownLeftRightVector" +}, + "⥑": { + math: "\\LeftUpDownVector" +}, + "⥒": { + math: "\\LeftVectorBar" +}, + "⥓": { + math: "\\RightVectorBar" +}, + "⥔": { + math: "\\RightUpVectorBar" +}, + "⥕": { + math: "\\RightDownVectorBar" +}, + "⥖": { + math: "\\DownLeftVectorBar" +}, + "⥗": { + math: "\\DownRightVectorBar" +}, + "⥘": { + math: "\\LeftUpVectorBar" +}, + "⥙": { + math: "\\LeftDownVectorBar" +}, + "⥚": { + math: "\\LeftTeeVector" +}, + "⥛": { + math: "\\RightTeeVector" +}, + "⥜": { + math: "\\RightUpTeeVector" +}, + "⥝": { + math: "\\RightDownTeeVector" +}, + "⥞": { + math: "\\DownLeftTeeVector" +}, + "⥟": { + math: "\\DownRightTeeVector" +}, + "⥠": { + math: "\\LeftUpTeeVector" +}, + "⥡": { + math: "\\LeftDownTeeVector" +}, + "⥢": { + math: "\\leftleftharpoons" +}, + "⥣": { + math: "\\upupharpoons" +}, + "⥤": { + math: "\\rightrightharpoons" +}, + "⥥": { + math: "\\downdownharpoons" +}, + "⥦": { + math: "\\leftrightharpoonsup" +}, + "⥧": { + math: "\\leftrightharpoonsdown" +}, + "⥨": { + math: "\\rightleftharpoonsup" +}, + "⥩": { + math: "\\rightleftharpoonsdown" +}, + "⥪": { + math: "\\leftbarharpoon" +}, + "⥫": { + math: "\\barleftharpoon" +}, + "⥬": { + math: "\\rightbarharpoon" +}, + "⥭": { + math: "\\barrightharpoon" +}, + "⥮": { + math: "\\UpEquilibrium" +}, + "⥯": { + math: "\\ReverseUpEquilibrium" +}, + "⥰": { + math: "\\RoundImplies" +}, + "⥱": { + math: "\\equalrightarrow" +}, + "⥲": { + math: "\\similarrightarrow" +}, + "⥳": { + math: "\\leftarrowsimilar" +}, + "⥴": { + math: "\\rightarrowsimilar" +}, + "⥵": { + math: "\\rightarrowapprox" +}, + "⥶": { + math: "\\ltlarr" +}, + "⥷": { + math: "\\leftarrowless" +}, + "⥸": { + math: "\\gtrarr" +}, + "⥹": { + math: "\\subrarr" +}, + "⥺": { + math: "\\leftarrowsubset" +}, + "⥻": { + math: "\\suplarr" +}, + "⥾": { + math: "\\upfishtail" +}, + "⥿": { + math: "\\downfishtail" +}, + "⦀": { + math: "\\Elztfnc" +}, + "⦁": { + math: "\\spot" +}, + "⦂": { + math: "\\typecolon" +}, + "⦃": { + math: "\\lBrace" +}, + "⦄": { + math: "\\rBrace" +}, + "⦆": { + math: "\\Elroang" +}, + "⦇": { + math: "\\limg" +}, + "⦈": { + math: "\\rimg" +}, + "⦉": { + math: "\\lblot" +}, + "⦊": { + math: "\\rblot" +}, + "⦋": { + math: "\\lbrackubar" +}, + "⦌": { + math: "\\rbrackubar" +}, + "⦍": { + math: "\\lbrackultick" +}, + "⦎": { + math: "\\rbracklrtick" +}, + "⦏": { + math: "\\lbracklltick" +}, + "⦐": { + math: "\\rbrackurtick" +}, + "⦑": { + math: "\\langledot" +}, + "⦒": { + math: "\\rangledot" +}, + "⦓": { + math: "<\\kern-0.58em(" +}, + "⦕": { + math: "\\Lparengtr" +}, + "⦖": { + math: "\\Rparenless" +}, + "⦗": { + math: "\\lblkbrbrak" +}, + "⦘": { + math: "\\rblkbrbrak" +}, + "⦙": { + math: "\\Elzddfnc" +}, + "⦚": { + math: "\\vzigzag" +}, + "⦛": { + math: "\\measuredangleleft" +}, + "⦜": { + math: "\\Angle" +}, + "⦝": { + math: "\\rightanglemdot" +}, + "⦞": { + math: "\\angles" +}, + "⦟": { + math: "\\angdnr" +}, + "⦠": { + math: "\\Elzlpargt" +}, + "⦡": { + math: "\\sphericalangleup" +}, + "⦢": { + math: "\\turnangle" +}, + "⦣": { + math: "\\revangle" +}, + "⦤": { + math: "\\angleubar" +}, + "⦥": { + math: "\\revangleubar" +}, + "⦦": { + math: "\\wideangledown" +}, + "⦧": { + math: "\\wideangleup" +}, + "⦨": { + math: "\\measanglerutone" +}, + "⦩": { + math: "\\measanglelutonw" +}, + "⦪": { + math: "\\measanglerdtose" +}, + "⦫": { + math: "\\measangleldtosw" +}, + "⦬": { + math: "\\measangleurtone" +}, + "⦭": { + math: "\\measangleultonw" +}, + "⦮": { + math: "\\measangledrtose" +}, + "⦯": { + math: "\\measangledltosw" +}, + "⦰": { + math: "\\revemptyset" +}, + "⦱": { + math: "\\emptysetobar" +}, + "⦲": { + math: "\\emptysetocirc" +}, + "⦳": { + math: "\\emptysetoarr" +}, + "⦴": { + math: "\\emptysetoarrl" +}, + "⦷": { + math: "\\circledparallel" +}, + "⦸": { + math: "\\circledbslash" +}, + "⦹": { + math: "\\operp" +}, + "⦺": { + math: "\\obot" +}, + "⦻": { + math: "\\olcross" +}, + "⦼": { + math: "\\odotslashdot" +}, + "⦽": { + math: "\\uparrowoncircle" +}, + "⦾": { + math: "\\circledwhitebullet" +}, + "⦿": { + math: "\\circledbullet" +}, + "⧀": { + math: "\\circledless" +}, + "⧁": { + math: "\\circledgtr" +}, + "⧂": { + math: "\\cirscir" +}, + "⧃": { + math: "\\cirE" +}, + "⧄": { + math: "\\boxslash" +}, + "⧅": { + math: "\\boxbslash" +}, + "⧆": { + math: "\\boxast" +}, + "⧇": { + math: "\\boxcircle" +}, + "⧈": { + math: "\\boxbox" +}, + "⧉": { + math: "\\boxonbox" +}, + "⧊": { + math: "\\ElzLap" +}, + "⧋": { + math: "\\Elzdefas" +}, + "⧌": { + math: "\\triangles" +}, + "⧍": { + math: "\\triangleserifs" +}, + "⧎": { + math: "\\rtriltri" +}, + "⧏": { + math: "\\LeftTriangleBar" +}, + "⧏̸": { + math: "\\NotLeftTriangleBar" +}, + "⧐": { + math: "\\RightTriangleBar" +}, + "⧐̸": { + math: "\\NotRightTriangleBar" +}, + "⧑": { + math: "\\lfbowtie" +}, + "⧒": { + math: "\\rfbowtie" +}, + "⧓": { + math: "\\fbowtie" +}, + "⧔": { + math: "\\lftimes" +}, + "⧕": { + math: "\\rftimes" +}, + "⧖": { + math: "\\hourglass" +}, + "⧗": { + math: "\\blackhourglass" +}, + "⧘": { + math: "\\lvzigzag" +}, + "⧙": { + math: "\\rvzigzag" +}, + "⧚": { + math: "\\Lvzigzag" +}, + "⧛": { + math: "\\Rvzigzag" +}, + "⧝": { + math: "\\tieinfty" +}, + "⧞": { + math: "\\nvinfty" +}, + "⧟": { + math: "\\multimapboth" +}, + "⧠": { + math: "\\laplac" +}, + "⧡": { + math: "\\lrtriangleeq" +}, + "⧢": { + math: "\\shuffle" +}, + "⧣": { + math: "\\eparsl" +}, + "⧤": { + math: "\\smeparsl" +}, + "⧥": { + math: "\\eqvparsl" +}, + "⧦": { + math: "\\gleichstark" +}, + "⧧": { + math: "\\thermod" +}, + "⧨": { + math: "\\downtriangleleftblack" +}, + "⧩": { + math: "\\downtrianglerightblack" +}, + "⧪": { + math: "\\blackdiamonddownarrow" +}, + "⧫": { + math: "\\blacklozenge" +}, + "⧬": { + math: "\\circledownarrow" +}, + "⧭": { + math: "\\blackcircledownarrow" +}, + "⧮": { + math: "\\errbarsquare" +}, + "⧯": { + math: "\\errbarblacksquare" +}, + "⧰": { + math: "\\errbardiamond" +}, + "⧱": { + math: "\\errbarblackdiamond" +}, + "⧲": { + math: "\\errbarcircle" +}, + "⧳": { + math: "\\errbarblackcircle" +}, + "⧴": { + math: "\\RuleDelayed" +}, + "⧵": { + math: "\\setminus" +}, + "⧶": { + math: "\\dsol" +}, + "⧷": { + math: "\\rsolbar" +}, + "⧸": { + math: "\\xsol" +}, + "⧹": { + math: "\\zhide" +}, + "⧺": { + math: "\\doubleplus" +}, + "⧻": { + math: "\\tripleplus" +}, + "⧼": { + math: "\\lcurvyangle" +}, + "⧽": { + math: "\\rcurvyangle" +}, + "⧾": { + math: "\\tplus" +}, + "⧿": { + math: "\\tminus" +}, + "⨀": { + math: "\\bigodot" +}, + "⨁": { + math: "\\bigoplus" +}, + "⨂": { + math: "\\bigotimes" +}, + "⨃": { + math: "\\bigcupdot" +}, + "⨄": { + math: "\\Elxuplus" +}, + "⨅": { + math: "\\ElzThr" +}, + "⨆": { + math: "\\Elxsqcup" +}, + "⨇": { + math: "\\ElzInf" +}, + "⨈": { + math: "\\ElzSup" +}, + "⨉": { + math: "\\varprod" +}, + "⨊": { + math: "\\modtwosum" +}, + "⨋": { + math: "\\sumint" +}, + "⨌": { + math: "\\iiiint" +}, + "⨍": { + math: "\\ElzCint" +}, + "⨎": { + math: "\\intBar" +}, + "⨏": { + math: "\\clockoint" +}, + "⨑": { + math: "\\awint" +}, + "⨒": { + math: "\\rppolint" +}, + "⨓": { + math: "\\scpolint" +}, + "⨔": { + math: "\\npolint" +}, + "⨕": { + math: "\\pointint" +}, + "⨖": { + math: "\\sqrint" +}, + "⨗": { + math: "\\intlarhk" +}, + "⨘": { + math: "\\intx" +}, + "⨙": { + math: "\\intcap" +}, + "⨚": { + math: "\\intcup" +}, + "⨛": { + math: "\\upint" +}, + "⨜": { + math: "\\lowint" +}, + "⨝": { + math: "\\Join" +}, + "⨞": { + math: "\\bigtriangleleft" +}, + "⨟": { + math: "\\zcmp" +}, + "⨠": { + math: "\\zpipe" +}, + "⨡": { + math: "\\zproject" +}, + "⨢": { + math: "\\ringplus" +}, + "⨣": { + math: "\\plushat" +}, + "⨤": { + math: "\\simplus" +}, + "⨦": { + math: "\\plussim" +}, + "⨧": { + math: "\\plussubtwo" +}, + "⨨": { + math: "\\plustrif" +}, + "⨩": { + math: "\\commaminus" +}, + "⨫": { + math: "\\minusfdots" +}, + "⨬": { + math: "\\minusrdots" +}, + "⨯": { + math: "\\ElzTimes" +}, + "⨰": { + math: "\\dottimes" +}, + "⨱": { + math: "\\timesbar" +}, + "⨲": { + math: "\\btimes" +}, + "⨳": { + math: "\\smashtimes" +}, + "⨶": { + math: "\\otimeshat" +}, + "⨷": { + math: "\\Otimes" +}, + "⨸": { + math: "\\odiv" +}, + "⨹": { + math: "\\triangleplus" +}, + "⨺": { + math: "\\triangleminus" +}, + "⨻": { + math: "\\triangletimes" +}, + "⨽": { + math: "\\intprodr" +}, + "⨾": { + math: "\\fcmp" +}, + "⨿": { + math: "\\amalg" +}, + "⩀": { + math: "\\capdot" +}, + "⩁": { + math: "\\uminus" +}, + "⩂": { + math: "\\barcup" +}, + "⩃": { + math: "\\barcap" +}, + "⩄": { + math: "\\capwedge" +}, + "⩅": { + math: "\\cupvee" +}, + "⩆": { + math: "\\cupovercap" +}, + "⩇": { + math: "\\capovercup" +}, + "⩈": { + math: "\\cupbarcap" +}, + "⩉": { + math: "\\capbarcup" +}, + "⩊": { + math: "\\twocups" +}, + "⩋": { + math: "\\twocaps" +}, + "⩌": { + math: "\\closedvarcup" +}, + "⩍": { + math: "\\closedvarcap" +}, + "⩎": { + math: "\\Sqcap" +}, + "⩏": { + math: "\\Sqcup" +}, + "⩐": { + math: "\\closedvarcupsmashprod" +}, + "⩑": { + math: "\\wedgeodot" +}, + "⩒": { + math: "\\veeodot" +}, + "⩓": { + math: "\\ElzAnd" +}, + "⩔": { + math: "\\ElzOr" +}, + "⩖": { + math: "\\ElOr" +}, + "⩗": { + math: "\\bigslopedvee" +}, + "⩘": { + math: "\\bigslopedwedge" +}, + "⩙": { + math: "\\veeonwedge" +}, + "⩚": { + math: "\\wedgemidvert" +}, + "⩛": { + math: "\\veemidvert" +}, + "⩜": { + math: "\\midbarwedge" +}, + "⩝": { + math: "\\midbarvee" +}, + "⩞": { + math: "\\perspcorrespond" +}, + "⩟": { + math: "\\Elzminhat" +}, + "⩠": { + math: "\\wedgedoublebar" +}, + "⩡": { + math: "\\varveebar" +}, + "⩢": { + math: "\\doublebarvee" +}, + "⩤": { + math: "\\dsub" +}, + "⩥": { + math: "\\rsub" +}, + "⩦": { + math: "\\eqdot" +}, + "⩧": { + math: "\\dotequiv" +}, + "⩨": { + math: "\\equivVert" +}, + "⩩": { + math: "\\equivVvert" +}, + "⩪": { + math: "\\dotsim" +}, + "⩫": { + math: "\\simrdots" +}, + "⩬": { + math: "\\simminussim" +}, + "⩭": { + math: "\\congdot" +}, + "⩮": { + math: "\\stackrel{*}{=}" +}, + "⩯": { + math: "\\hatapprox" +}, + "⩰": { + math: "\\approxeqq" +}, + "⩱": { + math: "\\eqqplus" +}, + "⩲": { + math: "\\pluseqq" +}, + "⩳": { + math: "\\eqqsim" +}, + "⩴": { + math: "\\Coloneqq" +}, + "⩵": { + math: "\\Equal" +}, + "⩶": { + math: "\\Same" +}, + "⩷": { + math: "\\ddotseq" +}, + "⩸": { + math: "\\equivDD" +}, + "⩹": { + math: "\\ltcir" +}, + "⩺": { + math: "\\gtcir" +}, + "⩻": { + math: "\\ltquest" +}, + "⩼": { + math: "\\gtquest" +}, + "⩽": { + math: "\\leqslant", + mathpackages: [ + "amssymb" + ] +}, + "⩽̸": { + math: "\\nleqslant", + mathpackages: [ + "amssymb" + ] +}, + "⩾": { + math: "\\geqslant", + mathpackages: [ + "amssymb" + ] +}, + "⩾̸": { + math: "\\ngeqslant", + mathpackages: [ + "amssymb" + ] +}, + "⩿": { + math: "\\lesdot" +}, + "⪀": { + math: "\\gesdot" +}, + "⪁": { + math: "\\lesdoto" +}, + "⪂": { + math: "\\gesdoto" +}, + "⪃": { + math: "\\lesdotor" +}, + "⪄": { + math: "\\gesdotol" +}, + "⪅": { + math: "\\lessapprox" +}, + "⪆": { + math: "\\gtrapprox" +}, + "⪇": { + math: "\\lneq" +}, + "⪈": { + math: "\\gneq" +}, + "⪉": { + math: "\\lnapprox" +}, + "⪊": { + math: "\\gnapprox" +}, + "⪋": { + math: "\\lesseqqgtr" +}, + "⪌": { + math: "\\gtreqqless" +}, + "⪍": { + math: "\\lsime" +}, + "⪎": { + math: "\\gsime" +}, + "⪏": { + math: "\\lsimg" +}, + "⪐": { + math: "\\gsiml" +}, + "⪑": { + math: "\\lgE" +}, + "⪒": { + math: "\\glE" +}, + "⪓": { + math: "\\lesges" +}, + "⪔": { + math: "\\gesles" +}, + "⪕": { + math: "\\eqslantless" +}, + "⪖": { + math: "\\eqslantgtr" +}, + "⪗": { + math: "\\elsdot" +}, + "⪘": { + math: "\\egsdot" +}, + "⪙": { + math: "\\eqqless" +}, + "⪚": { + math: "\\eqqgtr" +}, + "⪛": { + math: "\\eqqslantless" +}, + "⪜": { + math: "\\eqqslantgtr" +}, + "⪝": { + math: "\\Pisymbol{ppi020}{117}" +}, + "⪞": { + math: "\\Pisymbol{ppi020}{105}" +}, + "⪟": { + math: "\\simlE" +}, + "⪠": { + math: "\\simgE" +}, + "⪡": { + math: "\\NestedLessLess" +}, + "⪡̸": { + math: "\\NotNestedLessLess" +}, + "⪢": { + math: "\\NestedGreaterGreater" +}, + "⪢̸": { + math: "\\NotNestedGreaterGreater" +}, + "⪣": { + math: "\\partialmeetcontraction" +}, + "⪤": { + math: "\\glj" +}, + "⪥": { + math: "\\gla" +}, + "⪦": { + math: "\\leftslice" +}, + "⪧": { + math: "\\rightslice" +}, + "⪨": { + math: "\\lescc" +}, + "⪩": { + math: "\\gescc" +}, + "⪪": { + math: "\\smt" +}, + "⪫": { + math: "\\lat" +}, + "⪬": { + math: "\\smte" +}, + "⪭": { + math: "\\late" +}, + "⪮": { + math: "\\bumpeqq" +}, + "⪯": { + math: "\\preceq" +}, + "⪯̸": { + math: "\\not\\preceq" +}, + "⪰": { + math: "\\succeq" +}, + "⪰̸": { + math: "\\not\\succeq" +}, + "⪱": { + math: "\\precneq" +}, + "⪲": { + math: "\\succneq" +}, + "⪳": { + math: "\\preceqq" +}, + "⪴": { + math: "\\succeqq" +}, + "⪵": { + math: "\\precneqq" +}, + "⪶": { + math: "\\succneqq" +}, + "⪷": { + math: "\\precapprox" +}, + "⪸": { + math: "\\succapprox" +}, + "⪹": { + math: "\\precnapprox" +}, + "⪺": { + math: "\\succnapprox" +}, + "⪻": { + math: "\\llcurly" +}, + "⪼": { + math: "\\ggcurly" +}, + "⪽": { + math: "\\subsetdot" +}, + "⪾": { + math: "\\supsetdot" +}, + "⪿": { + math: "\\subsetplus" +}, + "⫀": { + math: "\\supsetplus" +}, + "⫁": { + math: "\\submult" +}, + "⫂": { + math: "\\supmult" +}, + "⫃": { + math: "\\subedot" +}, + "⫄": { + math: "\\supedot" +}, + "⫅": { + math: "\\subseteqq" +}, + "⫅̸": { + math: "\\nsubseteqq" +}, + "⫆": { + math: "\\supseteqq" +}, + "⫆̸": { + math: "\\nsupseteqq" +}, + "⫇": { + math: "\\subsim" +}, + "⫈": { + math: "\\supsim" +}, + "⫉": { + math: "\\subsetapprox" +}, + "⫊": { + math: "\\supsetapprox" +}, + "⫋": { + math: "\\subsetneqq" +}, + "⫌": { + math: "\\supsetneqq" +}, + "⫍": { + math: "\\lsqhook" +}, + "⫎": { + math: "\\rsqhook" +}, + "⫏": { + math: "\\csub" +}, + "⫐": { + math: "\\csup" +}, + "⫑": { + math: "\\csube" +}, + "⫒": { + math: "\\csupe" +}, + "⫓": { + math: "\\subsup" +}, + "⫔": { + math: "\\supsub" +}, + "⫕": { + math: "\\subsub" +}, + "⫖": { + math: "\\supsup" +}, + "⫗": { + math: "\\suphsub" +}, + "⫘": { + math: "\\supdsub" +}, + "⫙": { + math: "\\forkv" +}, + "⫚": { + math: "\\topfork" +}, + "⫛": { + math: "\\mlcp" +}, + "⫝̸": { + math: "\\forks" +}, + "⫝": { + math: "\\forksnot" +}, + "⫝̸": { + math: "\\forks" +}, + "⫞": { + math: "\\shortlefttack" +}, + "⫟": { + math: "\\shortdowntack" +}, + "⫠": { + math: "\\shortuptack" +}, + "⫡": { + math: "\\perps" +}, + "⫢": { + math: "\\vDdash" +}, + "⫣": { + math: "\\dashV" +}, + "⫤": { + math: "\\Dashv" +}, + "⫥": { + math: "\\DashV" +}, + "⫦": { + math: "\\varVdash" +}, + "⫧": { + math: "\\Barv" +}, + "⫨": { + math: "\\vBar" +}, + "⫩": { + math: "\\vBarv" +}, + "⫪": { + math: "\\Top" +}, + "⫬": { + math: "\\Not" +}, + "⫭": { + math: "\\bNot" +}, + "⫮": { + math: "\\revnmid" +}, + "⫯": { + math: "\\cirmid" +}, + "⫰": { + math: "\\midcir" +}, + "⫱": { + math: "\\topcir" +}, + "⫲": { + math: "\\nhpar" +}, + "⫳": { + math: "\\parsim" +}, + "⫴": { + math: "\\interleave" +}, + "⫵": { + math: "\\nhVvert" +}, + "⫶": { + math: "\\Elztdcol" +}, + "⫷": { + math: "\\lllnest" +}, + "⫸": { + math: "\\gggnest" +}, + "⫹": { + math: "\\leqqslant" +}, + "⫺": { + math: "\\geqqslant" +}, + "⫻": { + math: "\\trslash" +}, + "⫼": { + math: "\\biginterleave" +}, + "⫽": { + math: "{{/}\\!\\!{/}}" +}, + "⫽⃥": { + math: "{\\rlap{\\textbackslash}{{/}\\!\\!{/}}}" +}, + "⫾": { + math: "\\talloblong" +}, + "⫿": { + math: "\\bigtalloblong" +}, + "⬒": { + math: "\\squaretopblack" +}, + "⬓": { + math: "\\squarebotblack" +}, + "⬔": { + math: "\\squareurblack" +}, + "⬕": { + math: "\\squarellblack" +}, + "⬖": { + math: "\\diamondleftblack" +}, + "⬗": { + math: "\\diamondrightblack" +}, + "⬘": { + math: "\\diamondtopblack" +}, + "⬙": { + math: "\\diamondbotblack" +}, + "⬚": { + math: "\\dottedsquare" +}, + "⬛": { + math: "\\blacksquare" +}, + "⬜": { + math: "\\square" +}, + "⬝": { + math: "\\vysmblksquare" +}, + "⬞": { + math: "\\vysmwhtsquare" +}, + "⬟": { + math: "\\pentagonblack" +}, + "⬠": { + math: "\\pentagon" +}, + "⬡": { + math: "\\varhexagon" +}, + "⬢": { + math: "\\varhexagonblack" +}, + "⬣": { + math: "\\hexagonblack" +}, + "⬤": { + math: "\\lgblkcircle" +}, + "⬥": { + math: "\\mdblkdiamond" +}, + "⬦": { + math: "\\mdwhtdiamond" +}, + "⬧": { + math: "\\mdblklozenge" +}, + "⬨": { + math: "\\mdwhtlozenge" +}, + "⬩": { + math: "\\smblkdiamond" +}, + "⬪": { + math: "\\smblklozenge" +}, + "⬫": { + math: "\\smwhtlozenge" +}, + "⬬": { + math: "\\blkhorzoval" +}, + "⬭": { + math: "\\whthorzoval" +}, + "⬮": { + math: "\\blkvertoval" +}, + "⬯": { + math: "\\whtvertoval" +}, + "⬰": { + math: "\\circleonleftarrow" +}, + "⬱": { + math: "\\leftthreearrows" +}, + "⬲": { + math: "\\leftarrowonoplus" +}, + "⬳": { + math: "\\longleftsquigarrow" +}, + "⬴": { + math: "\\nvtwoheadleftarrow" +}, + "⬵": { + math: "\\nVtwoheadleftarrow" +}, + "⬶": { + math: "\\twoheadmapsfrom" +}, + "⬷": { + math: "\\twoheadleftdbkarrow" +}, + "⬸": { + math: "\\leftdotarrow" +}, + "⬹": { + math: "\\nvleftarrowtail" +}, + "⬺": { + math: "\\nVleftarrowtail" +}, + "⬻": { + math: "\\twoheadleftarrowtail" +}, + "⬼": { + math: "\\nvtwoheadleftarrowtail" +}, + "⬽": { + math: "\\nVtwoheadleftarrowtail" +}, + "⬾": { + math: "\\leftarrowx" +}, + "⬿": { + math: "\\leftcurvedarrow" +}, + "⭀": { + math: "\\equalleftarrow" +}, + "⭁": { + math: "\\bsimilarleftarrow" +}, + "⭂": { + math: "\\leftarrowbackapprox" +}, + "⭃": { + math: "\\rightarrowgtr" +}, + "⭄": { + math: "\\rightarrowsupset" +}, + "⭅": { + math: "\\LLeftarrow" +}, + "⭆": { + math: "\\RRightarrow" +}, + "⭇": { + math: "\\bsimilarrightarrow" +}, + "⭈": { + math: "\\rightarrowbackapprox" +}, + "⭉": { + math: "\\similarleftarrow" +}, + "⭊": { + math: "\\leftarrowapprox" +}, + "⭋": { + math: "\\leftarrowbsimilar" +}, + "⭌": { + math: "\\rightarrowbsimilar" +}, + "⭐": { + math: "\\medwhitestar" +}, + "⭑": { + math: "\\medblackstar" +}, + "⭒": { + math: "\\smwhitestar" +}, + "⭓": { + math: "\\rightpentagonblack" +}, + "⭔": { + math: "\\rightpentagon" +}, + "〈": { + math: "\\langle" +}, + "〉": { + math: "\\rangle" +}, + "〒": { + math: "\\postalmark" +}, + "〔": { + math: "\\lbrbrak" +}, + "〕": { + math: "\\rbrbrak" +}, + "〚": { + math: "\\openbracketleft" +}, + "〛": { + math: "\\openbracketright" +}, + "〰": { + math: "\\hzigzag" +}, + "ff": { + text: "ff" +}, + "fi": { + text: "fi" +}, + "fl": { + text: "fl" +}, + "ffi": { + text: "ffi" +}, + "ffl": { + text: "ffl" +}, + "ſt": { + text: "st" +}, + "st": { + text: "st" +}, + "�": { + text: "{\\dbend}" +}, + "𝐀": { + math: "\\mathbf{A}" +}, + "𝐁": { + math: "\\mathbf{B}" +}, + "𝐂": { + math: "\\mathbf{C}" +}, + "𝐃": { + math: "\\mathbf{D}" +}, + "𝐄": { + math: "\\mathbf{E}" +}, + "𝐅": { + math: "\\mathbf{F}" +}, + "𝐆": { + math: "\\mathbf{G}" +}, + "𝐇": { + math: "\\mathbf{H}" +}, + "𝐈": { + math: "\\mathbf{I}" +}, + "𝐉": { + math: "\\mathbf{J}" +}, + "𝐊": { + math: "\\mathbf{K}" +}, + "𝐋": { + math: "\\mathbf{L}" +}, + "𝐌": { + math: "\\mathbf{M}" +}, + "𝐍": { + math: "\\mathbf{N}" +}, + "𝐎": { + math: "\\mathbf{O}" +}, + "𝐏": { + math: "\\mathbf{P}" +}, + "𝐐": { + math: "\\mathbf{Q}" +}, + "𝐑": { + math: "\\mathbf{R}" +}, + "𝐒": { + math: "\\mathbf{S}" +}, + "𝐓": { + math: "\\mathbf{T}" +}, + "𝐔": { + math: "\\mathbf{U}" +}, + "𝐕": { + math: "\\mathbf{V}" +}, + "𝐖": { + math: "\\mathbf{W}" +}, + "𝐗": { + math: "\\mathbf{X}" +}, + "𝐘": { + math: "\\mathbf{Y}" +}, + "𝐙": { + math: "\\mathbf{Z}" +}, + "𝐚": { + math: "\\mathbf{a}" +}, + "𝐛": { + math: "\\mathbf{b}" +}, + "𝐜": { + math: "\\mathbf{c}" +}, + "𝐝": { + math: "\\mathbf{d}" +}, + "𝐞": { + math: "\\mathbf{e}" +}, + "𝐟": { + math: "\\mathbf{f}" +}, + "𝐠": { + math: "\\mathbf{g}" +}, + "𝐡": { + math: "\\mathbf{h}" +}, + "𝐢": { + math: "\\mathbf{i}" +}, + "𝐣": { + math: "\\mathbf{j}" +}, + "𝐤": { + math: "\\mathbf{k}" +}, + "𝐥": { + math: "\\mathbf{l}" +}, + "𝐦": { + math: "\\mathbf{m}" +}, + "𝐧": { + math: "\\mathbf{n}" +}, + "𝐨": { + math: "\\mathbf{o}" +}, + "𝐩": { + math: "\\mathbf{p}" +}, + "𝐪": { + math: "\\mathbf{q}" +}, + "𝐫": { + math: "\\mathbf{r}" +}, + "𝐬": { + math: "\\mathbf{s}" +}, + "𝐭": { + math: "\\mathbf{t}" +}, + "𝐮": { + math: "\\mathbf{u}" +}, + "𝐯": { + math: "\\mathbf{v}" +}, + "𝐰": { + math: "\\mathbf{w}" +}, + "𝐱": { + math: "\\mathbf{x}" +}, + "𝐲": { + math: "\\mathbf{y}" +}, + "𝐳": { + math: "\\mathbf{z}" +}, + "𝐴": { + math: "\\mathsl{A}" +}, + "𝐵": { + math: "\\mathsl{B}" +}, + "𝐶": { + math: "\\mathsl{C}" +}, + "𝐷": { + math: "\\mathsl{D}" +}, + "𝐸": { + math: "\\mathsl{E}" +}, + "𝐹": { + math: "\\mathsl{F}" +}, + "𝐺": { + math: "\\mathsl{G}" +}, + "𝐻": { + math: "\\mathsl{H}" +}, + "𝐼": { + math: "\\mathsl{I}" +}, + "𝐽": { + math: "\\mathsl{J}" +}, + "𝐾": { + math: "\\mathsl{K}" +}, + "𝐿": { + math: "\\mathsl{L}" +}, + "𝑀": { + math: "\\mathsl{M}" +}, + "𝑁": { + math: "\\mathsl{N}" +}, + "𝑂": { + math: "\\mathsl{O}" +}, + "𝑃": { + math: "\\mathsl{P}" +}, + "𝑄": { + math: "\\mathsl{Q}" +}, + "𝑅": { + math: "\\mathsl{R}" +}, + "𝑆": { + math: "\\mathsl{S}" +}, + "𝑇": { + math: "\\mathsl{T}" +}, + "𝑈": { + math: "\\mathsl{U}" +}, + "𝑉": { + math: "\\mathsl{V}" +}, + "𝑊": { + math: "\\mathsl{W}" +}, + "𝑋": { + math: "\\mathsl{X}" +}, + "𝑌": { + math: "\\mathsl{Y}" +}, + "𝑍": { + math: "\\mathsl{Z}" +}, + "𝑎": { + math: "\\mathsl{a}" +}, + "𝑏": { + math: "\\mathsl{b}" +}, + "𝑐": { + math: "\\mathsl{c}" +}, + "𝑑": { + math: "\\mathsl{d}" +}, + "𝑒": { + math: "\\mathsl{e}" +}, + "𝑓": { + math: "\\mathsl{f}" +}, + "𝑔": { + math: "\\mathsl{g}" +}, + "𝑖": { + math: "\\mathsl{i}" +}, + "𝑗": { + math: "\\mathsl{j}" +}, + "𝑘": { + math: "\\mathsl{k}" +}, + "𝑙": { + math: "\\mathsl{l}" +}, + "𝑚": { + math: "\\mathsl{m}" +}, + "𝑛": { + math: "\\mathsl{n}" +}, + "𝑜": { + math: "\\mathsl{o}" +}, + "𝑝": { + math: "\\mathsl{p}" +}, + "𝑞": { + math: "\\mathsl{q}" +}, + "𝑟": { + math: "\\mathsl{r}" +}, + "𝑠": { + math: "\\mathsl{s}" +}, + "𝑡": { + math: "\\mathsl{t}" +}, + "𝑢": { + math: "\\mathsl{u}" +}, + "𝑣": { + math: "\\mathsl{v}" +}, + "𝑤": { + math: "\\mathsl{w}" +}, + "𝑥": { + math: "\\mathsl{x}" +}, + "𝑦": { + math: "\\mathsl{y}" +}, + "𝑧": { + math: "\\mathsl{z}" +}, + "𝑨": { + math: "\\mathbit{A}" +}, + "𝑩": { + math: "\\mathbit{B}" +}, + "𝑪": { + math: "\\mathbit{C}" +}, + "𝑫": { + math: "\\mathbit{D}" +}, + "𝑬": { + math: "\\mathbit{E}" +}, + "𝑭": { + math: "\\mathbit{F}" +}, + "𝑮": { + math: "\\mathbit{G}" +}, + "𝑯": { + math: "\\mathbit{H}" +}, + "𝑰": { + math: "\\mathbit{I}" +}, + "𝑱": { + math: "\\mathbit{J}" +}, + "𝑲": { + math: "\\mathbit{K}" +}, + "𝑳": { + math: "\\mathbit{L}" +}, + "𝑴": { + math: "\\mathbit{M}" +}, + "𝑵": { + math: "\\mathbit{N}" +}, + "𝑶": { + math: "\\mathbit{O}" +}, + "𝑷": { + math: "\\mathbit{P}" +}, + "𝑸": { + math: "\\mathbit{Q}" +}, + "𝑹": { + math: "\\mathbit{R}" +}, + "𝑺": { + math: "\\mathbit{S}" +}, + "𝑻": { + math: "\\mathbit{T}" +}, + "𝑼": { + math: "\\mathbit{U}" +}, + "𝑽": { + math: "\\mathbit{V}" +}, + "𝑾": { + math: "\\mathbit{W}" +}, + "𝑿": { + math: "\\mathbit{X}" +}, + "𝒀": { + math: "\\mathbit{Y}" +}, + "𝒁": { + math: "\\mathbit{Z}" +}, + "𝒂": { + math: "\\mathbit{a}" +}, + "𝒃": { + math: "\\mathbit{b}" +}, + "𝒄": { + math: "\\mathbit{c}" +}, + "𝒅": { + math: "\\mathbit{d}" +}, + "𝒆": { + math: "\\mathbit{e}" +}, + "𝒇": { + math: "\\mathbit{f}" +}, + "𝒈": { + math: "\\mathbit{g}" +}, + "𝒉": { + math: "\\mathbit{h}" +}, + "𝒊": { + math: "\\mathbit{i}" +}, + "𝒋": { + math: "\\mathbit{j}" +}, + "𝒌": { + math: "\\mathbit{k}" +}, + "𝒍": { + math: "\\mathbit{l}" +}, + "𝒎": { + math: "\\mathbit{m}" +}, + "𝒏": { + math: "\\mathbit{n}" +}, + "𝒐": { + math: "\\mathbit{o}" +}, + "𝒑": { + math: "\\mathbit{p}" +}, + "𝒒": { + math: "\\mathbit{q}" +}, + "𝒓": { + math: "\\mathbit{r}" +}, + "𝒔": { + math: "\\mathbit{s}" +}, + "𝒕": { + math: "\\mathbit{t}" +}, + "𝒖": { + math: "\\mathbit{u}" +}, + "𝒗": { + math: "\\mathbit{v}" +}, + "𝒘": { + math: "\\mathbit{w}" +}, + "𝒙": { + math: "\\mathbit{x}" +}, + "𝒚": { + math: "\\mathbit{y}" +}, + "𝒛": { + math: "\\mathbit{z}" +}, + "𝒜": { + math: "\\mathscr{A}" +}, + "𝒞": { + math: "\\mathscr{C}" +}, + "𝒟": { + math: "\\mathscr{D}" +}, + "𝒢": { + math: "\\mathscr{G}" +}, + "𝒥": { + math: "\\mathscr{J}" +}, + "𝒦": { + math: "\\mathscr{K}" +}, + "𝒩": { + math: "\\mathscr{N}" +}, + "𝒪": { + math: "\\mathscr{O}" +}, + "𝒫": { + math: "\\mathscr{P}" +}, + "𝒬": { + math: "\\mathscr{Q}" +}, + "𝒮": { + math: "\\mathscr{S}" +}, + "𝒯": { + math: "\\mathscr{T}" +}, + "𝒰": { + math: "\\mathscr{U}" +}, + "𝒱": { + math: "\\mathscr{V}" +}, + "𝒲": { + math: "\\mathscr{W}" +}, + "𝒳": { + math: "\\mathscr{X}" +}, + "𝒴": { + math: "\\mathscr{Y}" +}, + "𝒵": { + math: "\\mathscr{Z}" +}, + "𝒶": { + math: "\\mathscr{a}" +}, + "𝒷": { + math: "\\mathscr{b}" +}, + "𝒸": { + math: "\\mathscr{c}" +}, + "𝒹": { + math: "\\mathscr{d}" +}, + "𝒻": { + math: "\\mathscr{f}" +}, + "𝒽": { + math: "\\mathscr{h}" +}, + "𝒾": { + math: "\\mathscr{i}" +}, + "𝒿": { + math: "\\mathscr{j}" +}, + "𝓀": { + math: "\\mathscr{k}" +}, + "𝓁": { + math: "\\mathscr{l}" +}, + "𝓂": { + math: "\\mathscr{m}" +}, + "𝓃": { + math: "\\mathscr{n}" +}, + "𝓅": { + math: "\\mathscr{p}" +}, + "𝓆": { + math: "\\mathscr{q}" +}, + "𝓇": { + math: "\\mathscr{r}" +}, + "𝓈": { + math: "\\mathscr{s}" +}, + "𝓉": { + math: "\\mathscr{t}" +}, + "𝓊": { + math: "\\mathscr{u}" +}, + "𝓋": { + math: "\\mathscr{v}" +}, + "𝓌": { + math: "\\mathscr{w}" +}, + "𝓍": { + math: "\\mathscr{x}" +}, + "𝓎": { + math: "\\mathscr{y}" +}, + "𝓏": { + math: "\\mathscr{z}" +}, + "𝓐": { + math: "\\mathmit{A}" +}, + "𝓑": { + math: "\\mathmit{B}" +}, + "𝓒": { + math: "\\mathmit{C}" +}, + "𝓓": { + math: "\\mathmit{D}" +}, + "𝓔": { + math: "\\mathmit{E}" +}, + "𝓕": { + math: "\\mathmit{F}" +}, + "𝓖": { + math: "\\mathmit{G}" +}, + "𝓗": { + math: "\\mathmit{H}" +}, + "𝓘": { + math: "\\mathmit{I}" +}, + "𝓙": { + math: "\\mathmit{J}" +}, + "𝓚": { + math: "\\mathmit{K}" +}, + "𝓛": { + math: "\\mathmit{L}" +}, + "𝓜": { + math: "\\mathmit{M}" +}, + "𝓝": { + math: "\\mathmit{N}" +}, + "𝓞": { + math: "\\mathmit{O}" +}, + "𝓟": { + math: "\\mathmit{P}" +}, + "𝓠": { + math: "\\mathmit{Q}" +}, + "𝓡": { + math: "\\mathmit{R}" +}, + "𝓢": { + math: "\\mathmit{S}" +}, + "𝓣": { + math: "\\mathmit{T}" +}, + "𝓤": { + math: "\\mathmit{U}" +}, + "𝓥": { + math: "\\mathmit{V}" +}, + "𝓦": { + math: "\\mathmit{W}" +}, + "𝓧": { + math: "\\mathmit{X}" +}, + "𝓨": { + math: "\\mathmit{Y}" +}, + "𝓩": { + math: "\\mathmit{Z}" +}, + "𝓪": { + math: "\\mathmit{a}" +}, + "𝓫": { + math: "\\mathmit{b}" +}, + "𝓬": { + math: "\\mathmit{c}" +}, + "𝓭": { + math: "\\mathmit{d}" +}, + "𝓮": { + math: "\\mathmit{e}" +}, + "𝓯": { + math: "\\mathmit{f}" +}, + "𝓰": { + math: "\\mathmit{g}" +}, + "𝓱": { + math: "\\mathmit{h}" +}, + "𝓲": { + math: "\\mathmit{i}" +}, + "𝓳": { + math: "\\mathmit{j}" +}, + "𝓴": { + math: "\\mathmit{k}" +}, + "𝓵": { + math: "\\mathmit{l}" +}, + "𝓶": { + math: "\\mathmit{m}" +}, + "𝓷": { + math: "\\mathmit{n}" +}, + "𝓸": { + math: "\\mathmit{o}" +}, + "𝓹": { + math: "\\mathmit{p}" +}, + "𝓺": { + math: "\\mathmit{q}" +}, + "𝓻": { + math: "\\mathmit{r}" +}, + "𝓼": { + math: "\\mathmit{s}" +}, + "𝓽": { + math: "\\mathmit{t}" +}, + "𝓾": { + math: "\\mathmit{u}" +}, + "𝓿": { + math: "\\mathmit{v}" +}, + "𝔀": { + math: "\\mathmit{w}" +}, + "𝔁": { + math: "\\mathmit{x}" +}, + "𝔂": { + math: "\\mathmit{y}" +}, + "𝔃": { + math: "\\mathmit{z}" +}, + "𝔄": { + math: "\\mathfrak{A}" +}, + "𝔅": { + math: "\\mathfrak{B}" +}, + "𝔇": { + math: "\\mathfrak{D}" +}, + "𝔈": { + math: "\\mathfrak{E}" +}, + "𝔉": { + math: "\\mathfrak{F}" +}, + "𝔊": { + math: "\\mathfrak{G}" +}, + "𝔍": { + math: "\\mathfrak{J}" +}, + "𝔎": { + math: "\\mathfrak{K}" +}, + "𝔏": { + math: "\\mathfrak{L}" +}, + "𝔐": { + math: "\\mathfrak{M}" +}, + "𝔑": { + math: "\\mathfrak{N}" +}, + "𝔒": { + math: "\\mathfrak{O}" +}, + "𝔓": { + math: "\\mathfrak{P}" +}, + "𝔔": { + math: "\\mathfrak{Q}" +}, + "𝔖": { + math: "\\mathfrak{S}" +}, + "𝔗": { + math: "\\mathfrak{T}" +}, + "𝔘": { + math: "\\mathfrak{U}" +}, + "𝔙": { + math: "\\mathfrak{V}" +}, + "𝔚": { + math: "\\mathfrak{W}" +}, + "𝔛": { + math: "\\mathfrak{X}" +}, + "𝔜": { + math: "\\mathfrak{Y}" +}, + "𝔞": { + math: "\\mathfrak{a}" +}, + "𝔟": { + math: "\\mathfrak{b}" +}, + "𝔠": { + math: "\\mathfrak{c}" +}, + "𝔡": { + math: "\\mathfrak{d}" +}, + "𝔢": { + math: "\\mathfrak{e}" +}, + "𝔣": { + math: "\\mathfrak{f}" +}, + "𝔤": { + math: "\\mathfrak{g}" +}, + "𝔥": { + math: "\\mathfrak{h}" +}, + "𝔦": { + math: "\\mathfrak{i}" +}, + "𝔧": { + math: "\\mathfrak{j}" +}, + "𝔨": { + math: "\\mathfrak{k}" +}, + "𝔩": { + math: "\\mathfrak{l}" +}, + "𝔪": { + math: "\\mathfrak{m}" +}, + "𝔫": { + math: "\\mathfrak{n}" +}, + "𝔬": { + math: "\\mathfrak{o}" +}, + "𝔭": { + math: "\\mathfrak{p}" +}, + "𝔮": { + math: "\\mathfrak{q}" +}, + "𝔯": { + math: "\\mathfrak{r}" +}, + "𝔰": { + math: "\\mathfrak{s}" +}, + "𝔱": { + math: "\\mathfrak{t}" +}, + "𝔲": { + math: "\\mathfrak{u}" +}, + "𝔳": { + math: "\\mathfrak{v}" +}, + "𝔴": { + math: "\\mathfrak{w}" +}, + "𝔵": { + math: "\\mathfrak{x}" +}, + "𝔶": { + math: "\\mathfrak{y}" +}, + "𝔷": { + math: "\\mathfrak{z}" +}, + "𝔸": { + math: "\\mathbb{A}" +}, + "𝔹": { + math: "\\mathbb{B}" +}, + "𝔻": { + math: "\\mathbb{D}" +}, + "𝔼": { + math: "\\mathbb{E}" +}, + "𝔽": { + math: "\\mathbb{F}" +}, + "𝔾": { + math: "\\mathbb{G}" +}, + "𝕀": { + math: "\\mathbb{I}" +}, + "𝕁": { + math: "\\mathbb{J}" +}, + "𝕂": { + math: "\\mathbb{K}" +}, + "𝕃": { + math: "\\mathbb{L}" +}, + "𝕄": { + math: "\\mathbb{M}" +}, + "𝕆": { + math: "\\mathbb{O}" +}, + "𝕊": { + math: "\\mathbb{S}" +}, + "𝕋": { + math: "\\mathbb{T}" +}, + "𝕌": { + math: "\\mathbb{U}" +}, + "𝕍": { + math: "\\mathbb{V}" +}, + "𝕎": { + math: "\\mathbb{W}" +}, + "𝕏": { + math: "\\mathbb{X}" +}, + "𝕐": { + math: "\\mathbb{Y}" +}, + "𝕒": { + math: "\\mathbb{a}" +}, + "𝕓": { + math: "\\mathbb{b}" +}, + "𝕔": { + math: "\\mathbb{c}" +}, + "𝕕": { + math: "\\mathbb{d}" +}, + "𝕖": { + math: "\\mathbb{e}" +}, + "𝕗": { + math: "\\mathbb{f}" +}, + "𝕘": { + math: "\\mathbb{g}" +}, + "𝕙": { + math: "\\mathbb{h}" +}, + "𝕚": { + math: "\\mathbb{i}" +}, + "𝕛": { + math: "\\mathbb{j}" +}, + "𝕜": { + math: "\\mathbb{k}" +}, + "𝕝": { + math: "\\mathbb{l}" +}, + "𝕞": { + math: "\\mathbb{m}" +}, + "𝕟": { + math: "\\mathbb{n}" +}, + "𝕠": { + math: "\\mathbb{o}" +}, + "𝕡": { + math: "\\mathbb{p}" +}, + "𝕢": { + math: "\\mathbb{q}" +}, + "𝕣": { + math: "\\mathbb{r}" +}, + "𝕤": { + math: "\\mathbb{s}" +}, + "𝕥": { + math: "\\mathbb{t}" +}, + "𝕦": { + math: "\\mathbb{u}" +}, + "𝕧": { + math: "\\mathbb{v}" +}, + "𝕨": { + math: "\\mathbb{w}" +}, + "𝕩": { + math: "\\mathbb{x}" +}, + "𝕪": { + math: "\\mathbb{y}" +}, + "𝕫": { + math: "\\mathbb{z}" +}, + "𝕬": { + math: "\\mathslbb{A}" +}, + "𝕭": { + math: "\\mathslbb{B}" +}, + "𝕮": { + math: "\\mathslbb{C}" +}, + "𝕯": { + math: "\\mathslbb{D}" +}, + "𝕰": { + math: "\\mathslbb{E}" +}, + "𝕱": { + math: "\\mathslbb{F}" +}, + "𝕲": { + math: "\\mathslbb{G}" +}, + "𝕳": { + math: "\\mathslbb{H}" +}, + "𝕴": { + math: "\\mathslbb{I}" +}, + "𝕵": { + math: "\\mathslbb{J}" +}, + "𝕶": { + math: "\\mathslbb{K}" +}, + "𝕷": { + math: "\\mathslbb{L}" +}, + "𝕸": { + math: "\\mathslbb{M}" +}, + "𝕹": { + math: "\\mathslbb{N}" +}, + "𝕺": { + math: "\\mathslbb{O}" +}, + "𝕻": { + math: "\\mathslbb{P}" +}, + "𝕼": { + math: "\\mathslbb{Q}" +}, + "𝕽": { + math: "\\mathslbb{R}" +}, + "𝕾": { + math: "\\mathslbb{S}" +}, + "𝕿": { + math: "\\mathslbb{T}" +}, + "𝖀": { + math: "\\mathslbb{U}" +}, + "𝖁": { + math: "\\mathslbb{V}" +}, + "𝖂": { + math: "\\mathslbb{W}" +}, + "𝖃": { + math: "\\mathslbb{X}" +}, + "𝖄": { + math: "\\mathslbb{Y}" +}, + "𝖅": { + math: "\\mathslbb{Z}" +}, + "𝖆": { + math: "\\mathslbb{a}" +}, + "𝖇": { + math: "\\mathslbb{b}" +}, + "𝖈": { + math: "\\mathslbb{c}" +}, + "𝖉": { + math: "\\mathslbb{d}" +}, + "𝖊": { + math: "\\mathslbb{e}" +}, + "𝖋": { + math: "\\mathslbb{f}" +}, + "𝖌": { + math: "\\mathslbb{g}" +}, + "𝖍": { + math: "\\mathslbb{h}" +}, + "𝖎": { + math: "\\mathslbb{i}" +}, + "𝖏": { + math: "\\mathslbb{j}" +}, + "𝖐": { + math: "\\mathslbb{k}" +}, + "𝖑": { + math: "\\mathslbb{l}" +}, + "𝖒": { + math: "\\mathslbb{m}" +}, + "𝖓": { + math: "\\mathslbb{n}" +}, + "𝖔": { + math: "\\mathslbb{o}" +}, + "𝖕": { + math: "\\mathslbb{p}" +}, + "𝖖": { + math: "\\mathslbb{q}" +}, + "𝖗": { + math: "\\mathslbb{r}" +}, + "𝖘": { + math: "\\mathslbb{s}" +}, + "𝖙": { + math: "\\mathslbb{t}" +}, + "𝖚": { + math: "\\mathslbb{u}" +}, + "𝖛": { + math: "\\mathslbb{v}" +}, + "𝖜": { + math: "\\mathslbb{w}" +}, + "𝖝": { + math: "\\mathslbb{x}" +}, + "𝖞": { + math: "\\mathslbb{y}" +}, + "𝖟": { + math: "\\mathslbb{z}" +}, + "𝖠": { + math: "\\mathsf{A}" +}, + "𝖡": { + math: "\\mathsf{B}" +}, + "𝖢": { + math: "\\mathsf{C}" +}, + "𝖣": { + math: "\\mathsf{D}" +}, + "𝖤": { + math: "\\mathsf{E}" +}, + "𝖥": { + math: "\\mathsf{F}" +}, + "𝖦": { + math: "\\mathsf{G}" +}, + "𝖧": { + math: "\\mathsf{H}" +}, + "𝖨": { + math: "\\mathsf{I}" +}, + "𝖩": { + math: "\\mathsf{J}" +}, + "𝖪": { + math: "\\mathsf{K}" +}, + "𝖫": { + math: "\\mathsf{L}" +}, + "𝖬": { + math: "\\mathsf{M}" +}, + "𝖭": { + math: "\\mathsf{N}" +}, + "𝖮": { + math: "\\mathsf{O}" +}, + "𝖯": { + math: "\\mathsf{P}" +}, + "𝖰": { + math: "\\mathsf{Q}" +}, + "𝖱": { + math: "\\mathsf{R}" +}, + "𝖲": { + math: "\\mathsf{S}" +}, + "𝖳": { + math: "\\mathsf{T}" +}, + "𝖴": { + math: "\\mathsf{U}" +}, + "𝖵": { + math: "\\mathsf{V}" +}, + "𝖶": { + math: "\\mathsf{W}" +}, + "𝖷": { + math: "\\mathsf{X}" +}, + "𝖸": { + math: "\\mathsf{Y}" +}, + "𝖹": { + math: "\\mathsf{Z}" +}, + "𝖺": { + math: "\\mathsf{a}" +}, + "𝖻": { + math: "\\mathsf{b}" +}, + "𝖼": { + math: "\\mathsf{c}" +}, + "𝖽": { + math: "\\mathsf{d}" +}, + "𝖾": { + math: "\\mathsf{e}" +}, + "𝖿": { + math: "\\mathsf{f}" +}, + "𝗀": { + math: "\\mathsf{g}" +}, + "𝗁": { + math: "\\mathsf{h}" +}, + "𝗂": { + math: "\\mathsf{i}" +}, + "𝗃": { + math: "\\mathsf{j}" +}, + "𝗄": { + math: "\\mathsf{k}" +}, + "𝗅": { + math: "\\mathsf{l}" +}, + "𝗆": { + math: "\\mathsf{m}" +}, + "𝗇": { + math: "\\mathsf{n}" +}, + "𝗈": { + math: "\\mathsf{o}" +}, + "𝗉": { + math: "\\mathsf{p}" +}, + "𝗊": { + math: "\\mathsf{q}" +}, + "𝗋": { + math: "\\mathsf{r}" +}, + "𝗌": { + math: "\\mathsf{s}" +}, + "𝗍": { + math: "\\mathsf{t}" +}, + "𝗎": { + math: "\\mathsf{u}" +}, + "𝗏": { + math: "\\mathsf{v}" +}, + "𝗐": { + math: "\\mathsf{w}" +}, + "𝗑": { + math: "\\mathsf{x}" +}, + "𝗒": { + math: "\\mathsf{y}" +}, + "𝗓": { + math: "\\mathsf{z}" +}, + "𝗔": { + math: "\\mathsfbf{A}" +}, + "𝗕": { + math: "\\mathsfbf{B}" +}, + "𝗖": { + math: "\\mathsfbf{C}" +}, + "𝗗": { + math: "\\mathsfbf{D}" +}, + "𝗘": { + math: "\\mathsfbf{E}" +}, + "𝗙": { + math: "\\mathsfbf{F}" +}, + "𝗚": { + math: "\\mathsfbf{G}" +}, + "𝗛": { + math: "\\mathsfbf{H}" +}, + "𝗜": { + math: "\\mathsfbf{I}" +}, + "𝗝": { + math: "\\mathsfbf{J}" +}, + "𝗞": { + math: "\\mathsfbf{K}" +}, + "𝗟": { + math: "\\mathsfbf{L}" +}, + "𝗠": { + math: "\\mathsfbf{M}" +}, + "𝗡": { + math: "\\mathsfbf{N}" +}, + "𝗢": { + math: "\\mathsfbf{O}" +}, + "𝗣": { + math: "\\mathsfbf{P}" +}, + "𝗤": { + math: "\\mathsfbf{Q}" +}, + "𝗥": { + math: "\\mathsfbf{R}" +}, + "𝗦": { + math: "\\mathsfbf{S}" +}, + "𝗧": { + math: "\\mathsfbf{T}" +}, + "𝗨": { + math: "\\mathsfbf{U}" +}, + "𝗩": { + math: "\\mathsfbf{V}" +}, + "𝗪": { + math: "\\mathsfbf{W}" +}, + "𝗫": { + math: "\\mathsfbf{X}" +}, + "𝗬": { + math: "\\mathsfbf{Y}" +}, + "𝗭": { + math: "\\mathsfbf{Z}" +}, + "𝗮": { + math: "\\mathsfbf{a}" +}, + "𝗯": { + math: "\\mathsfbf{b}" +}, + "𝗰": { + math: "\\mathsfbf{c}" +}, + "𝗱": { + math: "\\mathsfbf{d}" +}, + "𝗲": { + math: "\\mathsfbf{e}" +}, + "𝗳": { + math: "\\mathsfbf{f}" +}, + "𝗴": { + math: "\\mathsfbf{g}" +}, + "𝗵": { + math: "\\mathsfbf{h}" +}, + "𝗶": { + math: "\\mathsfbf{i}" +}, + "𝗷": { + math: "\\mathsfbf{j}" +}, + "𝗸": { + math: "\\mathsfbf{k}" +}, + "𝗹": { + math: "\\mathsfbf{l}" +}, + "𝗺": { + math: "\\mathsfbf{m}" +}, + "𝗻": { + math: "\\mathsfbf{n}" +}, + "𝗼": { + math: "\\mathsfbf{o}" +}, + "𝗽": { + math: "\\mathsfbf{p}" +}, + "𝗾": { + math: "\\mathsfbf{q}" +}, + "𝗿": { + math: "\\mathsfbf{r}" +}, + "𝘀": { + math: "\\mathsfbf{s}" +}, + "𝘁": { + math: "\\mathsfbf{t}" +}, + "𝘂": { + math: "\\mathsfbf{u}" +}, + "𝘃": { + math: "\\mathsfbf{v}" +}, + "𝘄": { + math: "\\mathsfbf{w}" +}, + "𝘅": { + math: "\\mathsfbf{x}" +}, + "𝘆": { + math: "\\mathsfbf{y}" +}, + "𝘇": { + math: "\\mathsfbf{z}" +}, + "𝘈": { + math: "\\mathsfsl{A}" +}, + "𝘉": { + math: "\\mathsfsl{B}" +}, + "𝘊": { + math: "\\mathsfsl{C}" +}, + "𝘋": { + math: "\\mathsfsl{D}" +}, + "𝘌": { + math: "\\mathsfsl{E}" +}, + "𝘍": { + math: "\\mathsfsl{F}" +}, + "𝘎": { + math: "\\mathsfsl{G}" +}, + "𝘏": { + math: "\\mathsfsl{H}" +}, + "𝘐": { + math: "\\mathsfsl{I}" +}, + "𝘑": { + math: "\\mathsfsl{J}" +}, + "𝘒": { + math: "\\mathsfsl{K}" +}, + "𝘓": { + math: "\\mathsfsl{L}" +}, + "𝘔": { + math: "\\mathsfsl{M}" +}, + "𝘕": { + math: "\\mathsfsl{N}" +}, + "𝘖": { + math: "\\mathsfsl{O}" +}, + "𝘗": { + math: "\\mathsfsl{P}" +}, + "𝘘": { + math: "\\mathsfsl{Q}" +}, + "𝘙": { + math: "\\mathsfsl{R}" +}, + "𝘚": { + math: "\\mathsfsl{S}" +}, + "𝘛": { + math: "\\mathsfsl{T}" +}, + "𝘜": { + math: "\\mathsfsl{U}" +}, + "𝘝": { + math: "\\mathsfsl{V}" +}, + "𝘞": { + math: "\\mathsfsl{W}" +}, + "𝘟": { + math: "\\mathsfsl{X}" +}, + "𝘠": { + math: "\\mathsfsl{Y}" +}, + "𝘡": { + math: "\\mathsfsl{Z}" +}, + "𝘢": { + math: "\\mathsfsl{a}" +}, + "𝘣": { + math: "\\mathsfsl{b}" +}, + "𝘤": { + math: "\\mathsfsl{c}" +}, + "𝘥": { + math: "\\mathsfsl{d}" +}, + "𝘦": { + math: "\\mathsfsl{e}" +}, + "𝘧": { + math: "\\mathsfsl{f}" +}, + "𝘨": { + math: "\\mathsfsl{g}" +}, + "𝘩": { + math: "\\mathsfsl{h}" +}, + "𝘪": { + math: "\\mathsfsl{i}" +}, + "𝘫": { + math: "\\mathsfsl{j}" +}, + "𝘬": { + math: "\\mathsfsl{k}" +}, + "𝘭": { + math: "\\mathsfsl{l}" +}, + "𝘮": { + math: "\\mathsfsl{m}" +}, + "𝘯": { + math: "\\mathsfsl{n}" +}, + "𝘰": { + math: "\\mathsfsl{o}" +}, + "𝘱": { + math: "\\mathsfsl{p}" +}, + "𝘲": { + math: "\\mathsfsl{q}" +}, + "𝘳": { + math: "\\mathsfsl{r}" +}, + "𝘴": { + math: "\\mathsfsl{s}" +}, + "𝘵": { + math: "\\mathsfsl{t}" +}, + "𝘶": { + math: "\\mathsfsl{u}" +}, + "𝘷": { + math: "\\mathsfsl{v}" +}, + "𝘸": { + math: "\\mathsfsl{w}" +}, + "𝘹": { + math: "\\mathsfsl{x}" +}, + "𝘺": { + math: "\\mathsfsl{y}" +}, + "𝘻": { + math: "\\mathsfsl{z}" +}, + "𝘼": { + math: "\\mathsfbfsl{A}" +}, + "𝘽": { + math: "\\mathsfbfsl{B}" +}, + "𝘾": { + math: "\\mathsfbfsl{C}" +}, + "𝘿": { + math: "\\mathsfbfsl{D}" +}, + "𝙀": { + math: "\\mathsfbfsl{E}" +}, + "𝙁": { + math: "\\mathsfbfsl{F}" +}, + "𝙂": { + math: "\\mathsfbfsl{G}" +}, + "𝙃": { + math: "\\mathsfbfsl{H}" +}, + "𝙄": { + math: "\\mathsfbfsl{I}" +}, + "𝙅": { + math: "\\mathsfbfsl{J}" +}, + "𝙆": { + math: "\\mathsfbfsl{K}" +}, + "𝙇": { + math: "\\mathsfbfsl{L}" +}, + "𝙈": { + math: "\\mathsfbfsl{M}" +}, + "𝙉": { + math: "\\mathsfbfsl{N}" +}, + "𝙊": { + math: "\\mathsfbfsl{O}" +}, + "𝙋": { + math: "\\mathsfbfsl{P}" +}, + "𝙌": { + math: "\\mathsfbfsl{Q}" +}, + "𝙍": { + math: "\\mathsfbfsl{R}" +}, + "𝙎": { + math: "\\mathsfbfsl{S}" +}, + "𝙏": { + math: "\\mathsfbfsl{T}" +}, + "𝙐": { + math: "\\mathsfbfsl{U}" +}, + "𝙑": { + math: "\\mathsfbfsl{V}" +}, + "𝙒": { + math: "\\mathsfbfsl{W}" +}, + "𝙓": { + math: "\\mathsfbfsl{X}" +}, + "𝙔": { + math: "\\mathsfbfsl{Y}" +}, + "𝙕": { + math: "\\mathsfbfsl{Z}" +}, + "𝙖": { + math: "\\mathsfbfsl{a}" +}, + "𝙗": { + math: "\\mathsfbfsl{b}" +}, + "𝙘": { + math: "\\mathsfbfsl{c}" +}, + "𝙙": { + math: "\\mathsfbfsl{d}" +}, + "𝙚": { + math: "\\mathsfbfsl{e}" +}, + "𝙛": { + math: "\\mathsfbfsl{f}" +}, + "𝙜": { + math: "\\mathsfbfsl{g}" +}, + "𝙝": { + math: "\\mathsfbfsl{h}" +}, + "𝙞": { + math: "\\mathsfbfsl{i}" +}, + "𝙟": { + math: "\\mathsfbfsl{j}" +}, + "𝙠": { + math: "\\mathsfbfsl{k}" +}, + "𝙡": { + math: "\\mathsfbfsl{l}" +}, + "𝙢": { + math: "\\mathsfbfsl{m}" +}, + "𝙣": { + math: "\\mathsfbfsl{n}" +}, + "𝙤": { + math: "\\mathsfbfsl{o}" +}, + "𝙥": { + math: "\\mathsfbfsl{p}" +}, + "𝙦": { + math: "\\mathsfbfsl{q}" +}, + "𝙧": { + math: "\\mathsfbfsl{r}" +}, + "𝙨": { + math: "\\mathsfbfsl{s}" +}, + "𝙩": { + math: "\\mathsfbfsl{t}" +}, + "𝙪": { + math: "\\mathsfbfsl{u}" +}, + "𝙫": { + math: "\\mathsfbfsl{v}" +}, + "𝙬": { + math: "\\mathsfbfsl{w}" +}, + "𝙭": { + math: "\\mathsfbfsl{x}" +}, + "𝙮": { + math: "\\mathsfbfsl{y}" +}, + "𝙯": { + math: "\\mathsfbfsl{z}" +}, + "𝙰": { + math: "\\mathtt{A}" +}, + "𝙱": { + math: "\\mathtt{B}" +}, + "𝙲": { + math: "\\mathtt{C}" +}, + "𝙳": { + math: "\\mathtt{D}" +}, + "𝙴": { + math: "\\mathtt{E}" +}, + "𝙵": { + math: "\\mathtt{F}" +}, + "𝙶": { + math: "\\mathtt{G}" +}, + "𝙷": { + math: "\\mathtt{H}" +}, + "𝙸": { + math: "\\mathtt{I}" +}, + "𝙹": { + math: "\\mathtt{J}" +}, + "𝙺": { + math: "\\mathtt{K}" +}, + "𝙻": { + math: "\\mathtt{L}" +}, + "𝙼": { + math: "\\mathtt{M}" +}, + "𝙽": { + math: "\\mathtt{N}" +}, + "𝙾": { + math: "\\mathtt{O}" +}, + "𝙿": { + math: "\\mathtt{P}" +}, + "𝚀": { + math: "\\mathtt{Q}" +}, + "𝚁": { + math: "\\mathtt{R}" +}, + "𝚂": { + math: "\\mathtt{S}" +}, + "𝚃": { + math: "\\mathtt{T}" +}, + "𝚄": { + math: "\\mathtt{U}" +}, + "𝚅": { + math: "\\mathtt{V}" +}, + "𝚆": { + math: "\\mathtt{W}" +}, + "𝚇": { + math: "\\mathtt{X}" +}, + "𝚈": { + math: "\\mathtt{Y}" +}, + "𝚉": { + math: "\\mathtt{Z}" +}, + "𝚊": { + math: "\\mathtt{a}" +}, + "𝚋": { + math: "\\mathtt{b}" +}, + "𝚌": { + math: "\\mathtt{c}" +}, + "𝚍": { + math: "\\mathtt{d}" +}, + "𝚎": { + math: "\\mathtt{e}" +}, + "𝚏": { + math: "\\mathtt{f}" +}, + "𝚐": { + math: "\\mathtt{g}" +}, + "𝚑": { + math: "\\mathtt{h}" +}, + "𝚒": { + math: "\\mathtt{i}" +}, + "𝚓": { + math: "\\mathtt{j}" +}, + "𝚔": { + math: "\\mathtt{k}" +}, + "𝚕": { + math: "\\mathtt{l}" +}, + "𝚖": { + math: "\\mathtt{m}" +}, + "𝚗": { + math: "\\mathtt{n}" +}, + "𝚘": { + math: "\\mathtt{o}" +}, + "𝚙": { + math: "\\mathtt{p}" +}, + "𝚚": { + math: "\\mathtt{q}" +}, + "𝚛": { + math: "\\mathtt{r}" +}, + "𝚜": { + math: "\\mathtt{s}" +}, + "𝚝": { + math: "\\mathtt{t}" +}, + "𝚞": { + math: "\\mathtt{u}" +}, + "𝚟": { + math: "\\mathtt{v}" +}, + "𝚠": { + math: "\\mathtt{w}" +}, + "𝚡": { + math: "\\mathtt{x}" +}, + "𝚢": { + math: "\\mathtt{y}" +}, + "𝚣": { + math: "\\mathtt{z}" +}, + "𝚤": { + math: "\\imath" +}, + "𝚥": { + math: "\\jmath" +}, + "𝚨": { + math: "\\mathbf{A}" +}, + "𝚩": { + math: "\\mathbf{B}" +}, + "𝚪": { + math: "\\mathbf{\\Gamma}" +}, + "𝚫": { + math: "\\mathbf{\\Delta}" +}, + "𝚬": { + math: "\\mathbf{E}" +}, + "𝚭": { + math: "\\mathbf{Z}" +}, + "𝚮": { + math: "\\mathbf{H}" +}, + "𝚯": { + math: "\\mathbf{\\Theta}" +}, + "𝚰": { + math: "\\mathbf{I}" +}, + "𝚱": { + math: "\\mathbf{K}" +}, + "𝚲": { + math: "\\mathbf{\\Lambda}" +}, + "𝚳": { + math: "M" +}, + "𝚴": { + math: "N" +}, + "𝚵": { + math: "\\mathbf{\\Xi}" +}, + "𝚶": { + math: "O" +}, + "𝚷": { + math: "\\mathbf{\\Pi}" +}, + "𝚸": { + math: "\\mathbf{P}" +}, + "𝚹": { + math: "\\mathbf{\\vartheta}" +}, + "𝚺": { + math: "\\mathbf{\\Sigma}" +}, + "𝚻": { + math: "\\mathbf{T}" +}, + "𝚼": { + math: "\\mathbf{\\Upsilon}" +}, + "𝚽": { + math: "\\mathbf{\\Phi}" +}, + "𝚾": { + math: "\\mathbf{X}" +}, + "𝚿": { + math: "\\mathbf{\\Psi}" +}, + "𝛀": { + math: "\\mathbf{\\Omega}" +}, + "𝛁": { + math: "\\mathbf{\\nabla}" +}, + "𝛂": { + math: "\\mathbf{\\alpha}" +}, + "𝛃": { + math: "\\mathbf{\\beta}" +}, + "𝛄": { + math: "\\mathbf{\\gamma}" +}, + "𝛅": { + math: "\\mathbf{\\delta}" +}, + "𝛆": { + math: "\\mathbf{\\epsilon}" +}, + "𝛇": { + math: "\\mathbf{\\zeta}" +}, + "𝛈": { + math: "\\mathbf{\\eta}" +}, + "𝛉": { + math: "\\mathbf{\\theta}" +}, + "𝛊": { + math: "\\mathbf{I}" +}, + "𝛋": { + math: "\\mathbf{K}" +}, + "𝛌": { + math: "\\mathbf{\\lambda}" +}, + "𝛍": { + math: "M" +}, + "𝛎": { + math: "N" +}, + "𝛏": { + math: "\\mathbf{\\xi}" +}, + "𝛐": { + math: "O" +}, + "𝛑": { + math: "\\mathbf{\\pi}" +}, + "𝛒": { + math: "\\mathbf{P}" +}, + "𝛓": { + math: "\\mathbf{\\varsigma}" +}, + "𝛔": { + math: "\\mathbf{\\sigma}" +}, + "𝛕": { + math: "\\mathbf{T}" +}, + "𝛖": { + math: "\\mathbf{\\upsilon}" +}, + "𝛗": { + math: "\\mathbf{\\phi}" +}, + "𝛘": { + math: "\\mathbf{X}" +}, + "𝛙": { + math: "\\mathbf{\\psi}" +}, + "𝛚": { + math: "\\mathbf{\\omega}" +}, + "𝛛": { + math: "\\partial" +}, + "𝛜": { + math: "\\in" +}, + "𝛝": { + math: "\\mathbf{\\vartheta}" +}, + "𝛞": { + math: "\\mathbf{\\varkappa}" +}, + "𝛟": { + math: "\\mathbf{\\phi}" +}, + "𝛠": { + math: "\\mathbf{\\varrho}" +}, + "𝛡": { + math: "\\mathbf{\\varpi}" +}, + "𝛢": { + math: "\\mathsl{A}" +}, + "𝛣": { + math: "\\mathsl{B}" +}, + "𝛤": { + math: "\\mathsl{\\Gamma}" +}, + "𝛥": { + math: "\\mathsl{\\Delta}" +}, + "𝛦": { + math: "\\mathsl{E}" +}, + "𝛧": { + math: "\\mathsl{Z}" +}, + "𝛨": { + math: "\\mathsl{H}" +}, + "𝛩": { + math: "\\mathsl{\\Theta}" +}, + "𝛪": { + math: "\\mathsl{I}" +}, + "𝛫": { + math: "\\mathsl{K}" +}, + "𝛬": { + math: "\\mathsl{\\Lambda}" +}, + "𝛭": { + math: "M" +}, + "𝛮": { + math: "N" +}, + "𝛯": { + math: "\\mathsl{\\Xi}" +}, + "𝛰": { + math: "O" +}, + "𝛱": { + math: "\\mathsl{\\Pi}" +}, + "𝛲": { + math: "\\mathsl{P}" +}, + "𝛳": { + math: "\\mathsl{\\Theta}" +}, + "𝛴": { + math: "\\mathsl{\\Sigma}" +}, + "𝛵": { + math: "\\mathsl{T}" +}, + "𝛶": { + math: "\\mathsl{\\Upsilon}" +}, + "𝛷": { + math: "\\mathsl{\\Phi}" +}, + "𝛸": { + math: "\\mathsl{X}" +}, + "𝛹": { + math: "\\mathsl{\\Psi}" +}, + "𝛺": { + math: "\\mathsl{\\Omega}" +}, + "𝛻": { + math: "\\mathsl{\\nabla}" +}, + "𝛼": { + math: "\\mathsl{A}" +}, + "𝛽": { + math: "\\mathsl{B}" +}, + "𝛾": { + math: "\\mathsl{\\gamma}" +}, + "𝛿": { + math: "\\mathsl{\\delta}" +}, + "𝜀": { + math: "\\mathsl{E}" +}, + "𝜁": { + math: "\\mathsl{Z}" +}, + "𝜂": { + math: "\\mathsl{H}" +}, + "𝜃": { + math: "\\mathsl{\\theta}" +}, + "𝜄": { + math: "\\mathsl{I}" +}, + "𝜅": { + math: "\\mathsl{K}" +}, + "𝜆": { + math: "\\mathsl{\\lambda}" +}, + "𝜇": { + math: "\\mu" +}, + "𝜈": { + math: "\\nu" +}, + "𝜉": { + math: "\\mathsl{\\xi}" +}, + "𝜊": { + math: "o" +}, + "𝜋": { + math: "\\mathsl{\\pi}" +}, + "𝜌": { + math: "\\mathsl{P}" +}, + "𝜍": { + math: "\\mathsl{\\varsigma}" +}, + "𝜎": { + math: "\\mathsl{\\sigma}" +}, + "𝜏": { + math: "\\mathsl{T}" +}, + "𝜐": { + math: "\\mathsl{\\upsilon}" +}, + "𝜑": { + math: "\\mathsl{\\varphi}" +}, + "𝜒": { + math: "\\mathsl{X}" +}, + "𝜓": { + math: "\\mathsl{\\psi}" +}, + "𝜔": { + math: "\\mathsl{\\omega}" +}, + "𝜕": { + math: "\\partial" +}, + "𝜖": { + math: "\\in" +}, + "𝜗": { + math: "\\mathsl{\\vartheta}" +}, + "𝜘": { + math: "\\mathsl{\\varkappa}" +}, + "𝜙": { + math: "\\mathsl{\\phi}" +}, + "𝜚": { + math: "\\mathsl{\\varrho}" +}, + "𝜛": { + math: "\\mathsl{\\varpi}" +}, + "𝜜": { + math: "\\mathbit{A}" +}, + "𝜝": { + math: "\\mathbit{B}" +}, + "𝜞": { + math: "\\mathbit{\\Gamma}" +}, + "𝜟": { + math: "\\mathbit{\\Delta}" +}, + "𝜠": { + math: "\\mathbit{E}" +}, + "𝜡": { + math: "\\mathbit{Z}" +}, + "𝜢": { + math: "\\mathbit{H}" +}, + "𝜣": { + math: "\\mathbit{\\Theta}" +}, + "𝜤": { + math: "\\mathbit{I}" +}, + "𝜥": { + math: "\\mathbit{K}" +}, + "𝜦": { + math: "\\mathbit{\\Lambda}" +}, + "𝜧": { + math: "M" +}, + "𝜨": { + math: "N" +}, + "𝜩": { + math: "\\mathbit{\\Xi}" +}, + "𝜪": { + math: "O" +}, + "𝜫": { + math: "\\mathbit{\\Pi}" +}, + "𝜬": { + math: "\\mathbit{P}" +}, + "𝜭": { + math: "\\mathbit{O}" +}, + "𝜮": { + math: "\\mathbit{\\Sigma}" +}, + "𝜯": { + math: "\\mathbit{T}" +}, + "𝜰": { + math: "\\mathbit{\\Upsilon}" +}, + "𝜱": { + math: "\\mathbit{\\Phi}" +}, + "𝜲": { + math: "\\mathbit{X}" +}, + "𝜳": { + math: "\\mathbit{\\Psi}" +}, + "𝜴": { + math: "\\mathbit{\\Omega}" +}, + "𝜵": { + math: "\\mathbit{\\nabla}" +}, + "𝜶": { + math: "\\mathbit{\\alpha}" +}, + "𝜷": { + math: "\\mathbit{\\beta}" +}, + "𝜸": { + math: "\\mathbit{\\gamma}" +}, + "𝜹": { + math: "\\mathbit{\\delta}" +}, + "𝜺": { + math: "\\mathbit{\\epsilon}" +}, + "𝜻": { + math: "\\mathbit{\\zeta}" +}, + "𝜼": { + math: "\\mathbit{\\eta}" +}, + "𝜽": { + math: "\\mathbit{\\theta}" +}, + "𝜾": { + math: "\\mathbit{\\imath}" +}, + "𝜿": { + math: "\\mathbit{\\kappa}" +}, + "𝝀": { + math: "\\mathbit{\\lambda}" +}, + "𝝁": { + math: "\\mu" +}, + "𝝂": { + math: "N" +}, + "𝝃": { + math: "\\mathbit{\\xi}" +}, + "𝝄": { + math: "O" +}, + "𝝅": { + math: "\\mathbit{\\pi}" +}, + "𝝆": { + math: "\\mathbit{\\rho}" +}, + "𝝇": { + math: "\\mathbit{\\varsigma}" +}, + "𝝈": { + math: "\\mathbit{\\sigma}" +}, + "𝝉": { + math: "\\mathbit{\\tau}" +}, + "𝝊": { + math: "\\mathbit{\\upsilon}" +}, + "𝝋": { + math: "\\mathbit{\\varphi}" +}, + "𝝌": { + math: "\\mathbit{\\chi}" +}, + "𝝍": { + math: "\\mathbit{\\psi}" +}, + "𝝎": { + math: "\\mathbit{\\omega}" +}, + "𝝏": { + math: "\\partial" +}, + "𝝐": { + math: "\\in" +}, + "𝝑": { + math: "\\mathbit{\\vartheta}" +}, + "𝝒": { + math: "\\mathbit{\\varkappa}" +}, + "𝝓": { + math: "\\mathbit{\\phi}" +}, + "𝝔": { + math: "\\mathbit{\\varrho}" +}, + "𝝕": { + math: "\\mathbit{\\varpi}" +}, + "𝝖": { + math: "\\mathsfbf{A}" +}, + "𝝗": { + math: "\\mathsfbf{B}" +}, + "𝝘": { + math: "\\mathsfbf{\\Gamma}" +}, + "𝝙": { + math: "\\mathsfbf{\\Delta}" +}, + "𝝚": { + math: "\\mathsfbf{E}" +}, + "𝝛": { + math: "\\mathsfbf{Z}" +}, + "𝝜": { + math: "\\mathsfbf{H}" +}, + "𝝝": { + math: "\\mathsfbf{\\Theta}" +}, + "𝝞": { + math: "\\mathsfbf{I}" +}, + "𝝟": { + math: "\\mathsfbf{K}" +}, + "𝝠": { + math: "\\mathsfbf{\\Lambda}" +}, + "𝝡": { + math: "M" +}, + "𝝢": { + math: "N" +}, + "𝝣": { + math: "\\mathsfbf{\\Xi}" +}, + "𝝤": { + math: "O" +}, + "𝝥": { + math: "\\mathsfbf{\\Pi}" +}, + "𝝦": { + math: "\\mathsfbf{P}" +}, + "𝝧": { + math: "\\mathsfbf{\\Theta}" +}, + "𝝨": { + math: "\\mathsfbf{\\Sigma}" +}, + "𝝩": { + math: "\\mathsfbf{T}" +}, + "𝝪": { + math: "\\mathsfbf{\\Upsilon}" +}, + "𝝫": { + math: "\\mathsfbf{\\Phi}" +}, + "𝝬": { + math: "\\mathsfbf{X}" +}, + "𝝭": { + math: "\\mathsfbf{\\Psi}" +}, + "𝝮": { + math: "\\mathsfbf{\\Omega}" +}, + "𝝯": { + math: "\\mathsfbf{\\nabla}" +}, + "𝝰": { + math: "\\mathsfbf{\\alpha}" +}, + "𝝱": { + math: "\\mathsfbf{\\beta}" +}, + "𝝲": { + math: "\\mathsfbf{\\gamma}" +}, + "𝝳": { + math: "\\mathsfbf{\\delta}" +}, + "𝝴": { + math: "\\mathsfbf{\\varepsilon}" +}, + "𝝵": { + math: "\\mathsfbf{\\zeta}" +}, + "𝝶": { + math: "\\mathsfbf{\\eta}" +}, + "𝝷": { + math: "\\mathsfbf{\\theta}" +}, + "𝝸": { + math: "\\mathsfbf{\\imath}" +}, + "𝝹": { + math: "\\mathsfbf{\\kappa}" +}, + "𝝺": { + math: "\\mathsfbf{\\lambda}" +}, + "𝝻": { + math: "\\mu" +}, + "𝝼": { + math: "\\nu" +}, + "𝝽": { + math: "\\mathsfbf{\\xi}" +}, + "𝝾": { + math: "o" +}, + "𝝿": { + math: "\\mathsfbf{\\pi}" +}, + "𝞀": { + math: "\\mathsfbf{\\rho}" +}, + "𝞁": { + math: "\\mathsfbf{\\varsigma}" +}, + "𝞂": { + math: "\\mathsfbf{\\sigma}" +}, + "𝞃": { + math: "\\mathsfbf{\\tau}" +}, + "𝞄": { + math: "\\mathsfbf{\\upsilon}" +}, + "𝞅": { + math: "\\mathsfbf{\\varphi}" +}, + "𝞆": { + math: "\\mathsfbf{\\chi}" +}, + "𝞇": { + math: "\\mathsfbf{\\psi}" +}, + "𝞈": { + math: "\\mathsfbf{\\omega}" +}, + "𝞉": { + math: "\\partial" +}, + "𝞊": { + math: "\\in" +}, + "𝞋": { + math: "\\mathsfbf{\\vartheta}" +}, + "𝞌": { + math: "\\mathsfbf{\\varkappa}" +}, + "𝞍": { + math: "\\mathsfbf{\\phi}" +}, + "𝞎": { + math: "\\mathsfbf{\\varrho}" +}, + "𝞏": { + math: "\\mathsfbf{\\varpi}" +}, + "𝞐": { + math: "\\mathsfbfsl{A}" +}, + "𝞑": { + math: "\\mathsfbfsl{B}" +}, + "𝞒": { + math: "\\mathsfbfsl{\\Gamma}" +}, + "𝞓": { + math: "\\mathsfbfsl{\\Delta}" +}, + "𝞔": { + math: "\\mathsfbfsl{E}" +}, + "𝞕": { + math: "\\mathsfbfsl{Z}" +}, + "𝞖": { + math: "\\mathsfbfsl{H}" +}, + "𝞗": { + math: "\\mathsfbfsl{\\Theta}" +}, + "𝞘": { + math: "\\mathsfbfsl{I}" +}, + "𝞙": { + math: "\\mathsfbfsl{K}" +}, + "𝞚": { + math: "\\mathsfbfsl{\\Lambda}" +}, + "𝞛": { + math: "\\mathsfbfsl{M}" +}, + "𝞜": { + math: "\\mathsfbfsl{N}" +}, + "𝞝": { + math: "\\mathsfbfsl{\\Xi}" +}, + "𝞞": { + math: "\\mathsfbfsl{O}" +}, + "𝞟": { + math: "\\mathsfbfsl{\\Pi}" +}, + "𝞠": { + math: "\\mathsfbfsl{P}" +}, + "𝞡": { + math: "\\mathsfbfsl{\\Theta}" +}, + "𝞢": { + math: "\\mathsfbfsl{\\Sigma}" +}, + "𝞣": { + math: "\\mathsfbfsl{T}" +}, + "𝞤": { + math: "\\mathsfbfsl{\\Upsilon}" +}, + "𝞥": { + math: "\\mathsfbfsl{\\Phi}" +}, + "𝞦": { + math: "\\mathsfbfsl{X}" +}, + "𝞧": { + math: "\\mathsfbfsl{\\Psi}" +}, + "𝞨": { + math: "\\mathsfbfsl{\\Omega}" +}, + "𝞩": { + math: "\\mathsfbfsl{\\nabla}" +}, + "𝞪": { + math: "\\mathsfbfsl{\\alpha}" +}, + "𝞫": { + math: "\\mathsfbfsl{\\beta}" +}, + "𝞬": { + math: "\\mathsfbfsl{\\gamma}" +}, + "𝞭": { + math: "\\mathsfbfsl{\\delta}" +}, + "𝞮": { + math: "\\mathsfbfsl{\\varepsilon}" +}, + "𝞯": { + math: "\\mathsfbfsl{\\zeta}" +}, + "𝞰": { + math: "\\mathsfbfsl{\\eta}" +}, + "𝞱": { + math: "\\mathsfbfsl{\\theta}" +}, + "𝞲": { + math: "\\mathsfbfsl{\\imath}" +}, + "𝞳": { + math: "\\mathsfbfsl{\\kappa}" +}, + "𝞴": { + math: "\\mathsfbfsl{\\lambda}" +}, + "𝞵": { + math: "\\mu" +}, + "𝞶": { + math: "\\nu" +}, + "𝞷": { + math: "\\mathsfbfsl{\\xi}" +}, + "𝞸": { + math: "o" +}, + "𝞹": { + math: "\\mathsfbfsl{\\pi}" +}, + "𝞺": { + math: "\\mathsfbfsl{\\rho}" +}, + "𝞻": { + math: "\\mathsfbfsl{\\varsigma}" +}, + "𝞼": { + math: "\\mathsfbfsl{\\sigma}" +}, + "𝞽": { + math: "\\mathsfbfsl{\\tau}" +}, + "𝞾": { + math: "\\mathsfbfsl{\\upsilon}" +}, + "𝞿": { + math: "\\mathsfbfsl{\\varphi}" +}, + "𝟀": { + math: "\\mathsfbfsl{\\chi}" +}, + "𝟁": { + math: "\\mathsfbfsl{\\psi}" +}, + "𝟂": { + math: "\\mathsfbfsl{\\omega}" +}, + "𝟃": { + math: "\\partial" +}, + "𝟄": { + math: "\\in" +}, + "𝟅": { + math: "\\mathsfbfsl{\\vartheta}" +}, + "𝟆": { + math: "\\mathsfbfsl{\\varkappa}" +}, + "𝟇": { + math: "\\mathsfbfsl{\\phi}" +}, + "𝟈": { + math: "\\mathsfbfsl{\\varrho}" +}, + "𝟉": { + math: "\\mathsfbfsl{\\varpi}" +}, + "𝟊": { + math: "\\mbfDigamma" +}, + "𝟋": { + math: "\\mbfdigamma" +}, + "𝟎": { + math: "\\mathbf{0}" +}, + "𝟏": { + math: "\\mathbf{1}" +}, + "𝟐": { + math: "\\mathbf{2}" +}, + "𝟑": { + math: "\\mathbf{3}" +}, + "𝟒": { + math: "\\mathbf{4}" +}, + "𝟓": { + math: "\\mathbf{5}" +}, + "𝟔": { + math: "\\mathbf{6}" +}, + "𝟕": { + math: "\\mathbf{7}" +}, + "𝟖": { + math: "\\mathbf{8}" +}, + "𝟗": { + math: "\\mathbf{9}" +}, + "𝟘": { + math: "\\mathbb{0}" +}, + "𝟙": { + math: "\\mathbb{1}" +}, + "𝟚": { + math: "\\mathbb{2}" +}, + "𝟛": { + math: "\\mathbb{3}" +}, + "𝟜": { + math: "\\mathbb{4}" +}, + "𝟝": { + math: "\\mathbb{5}" +}, + "𝟞": { + math: "\\mathbb{6}" +}, + "𝟟": { + math: "\\mathbb{7}" +}, + "𝟠": { + math: "\\mathbb{8}" +}, + "𝟡": { + math: "\\mathbb{9}" +}, + "𝟢": { + math: "\\mathsf{0}" +}, + "𝟣": { + math: "\\mathsf{1}" +}, + "𝟤": { + math: "\\mathsf{2}" +}, + "𝟥": { + math: "\\mathsf{3}" +}, + "𝟦": { + math: "\\mathsf{4}" +}, + "𝟧": { + math: "\\mathsf{5}" +}, + "𝟨": { + math: "\\mathsf{6}" +}, + "𝟩": { + math: "\\mathsf{7}" +}, + "𝟪": { + math: "\\mathsf{8}" +}, + "𝟫": { + math: "\\mathsf{9}" +}, + "𝟬": { + math: "\\mathsfbf{0}" +}, + "𝟭": { + math: "\\mathsfbf{1}" +}, + "𝟮": { + math: "\\mathsfbf{2}" +}, + "𝟯": { + math: "\\mathsfbf{3}" +}, + "𝟰": { + math: "\\mathsfbf{4}" +}, + "𝟱": { + math: "\\mathsfbf{5}" +}, + "𝟲": { + math: "\\mathsfbf{6}" +}, + "𝟳": { + math: "\\mathsfbf{7}" +}, + "𝟴": { + math: "\\mathsfbf{8}" +}, + "𝟵": { + math: "\\mathsfbf{9}" +}, + "𝟶": { + math: "\\mathtt{0}" +}, + "𝟷": { + math: "\\mathtt{1}" +}, + "𝟸": { + math: "\\mathtt{2}" +}, + "𝟹": { + math: "\\mathtt{3}" +}, + "𝟺": { + math: "\\mathtt{4}" +}, + "𝟻": { + math: "\\mathtt{5}" +}, + "𝟼": { + math: "\\mathtt{6}" +}, + "𝟽": { + math: "\\mathtt{7}" +}, + "𝟾": { + math: "\\mathtt{8}" +}, + "𝟿": { + math: "\\mathtt{9}" +} +}; + +var $$2 = { + math: "\\$", + text: "\\$" +}; +var _$2 = { + math: "\\_", + text: "\\_" +}; +var require$$2 = { + "#": { + math: "\\#", + text: "\\#" +}, + $: $$2, + "%": { + math: "\\%", + text: "\\%" +}, + "&": { + math: "\\&", + text: "\\&" +}, + "/​": { + text: "\\slash", + commandspacer: true +}, + "<": { + math: "<" +}, + ">": { + math: ">" +}, + "\\": { + math: "\\backslash", + text: "\\textbackslash", + commandspacer: true +}, + "^": { + math: "\\sphat", + text: "\\^" +}, + _: _$2, + "{": { + math: "\\lbrace", + text: "\\{" +}, + "}": { + math: "\\rbrace", + text: "\\}" +}, + "~": { + math: "\\sptilde", + text: "\\textasciitilde", + commandspacer: true +}, + " ": { + math: "~", + space: true, + text: "~" +}, + " ": { + text: " ", + space: true +}, + " ": { + math: "\\quad", + space: true +}, + " ": { + text: "\\hspace{0.6em}", + space: true +}, + " ": { + math: "\\quad", + space: true, + text: "\\hspace{1em}" +}, + " ": { + text: "\\;", + space: true +}, + " ": { + text: "\\hspace{0.25em}", + space: true +}, + " ": { + text: "\\hspace{0.166em}", + space: true +}, + " ": { + text: "\\hphantom{0}", + space: true +}, + " ": { + text: "\\hphantom{,}", + space: true +}, + " ": { + text: "\\,", + space: true +}, + " ": { + math: "\\mkern1mu", + space: true +}, + "​": { + text: "\\mbox", + commandspacer: true, + space: true +}, + " ": { + text: " ", + space: true +}, + " ": { + math: "\\:", + space: true, + text: "\\:" +} +}; + +var require$$3 = { + "\\#": "#", + "\\$": "$", + "\\%": "%", + "\\&": "&", + "\\slash": "/​", + "\\textless": "<", + "\\textgreater": ">", + "\\LaTeX": "LaTeX", + "\\textbackslash": "\\", + "\\backslash": "\\", + "\\": "\\", + "\\^": "^", + "\\sphat": "^", + "\\_": "_", + "\\t{ia}": "i︠a︡", + "{\\~ w}": "w̃", + "\\{": "{", + "\\lbrace": "{", + "\\textbar": "|", + "\\}": "}", + "\\rbrace": "}", + "\\textasciitilde": "~", + "\\sptilde": "~", + "\\textexclamdown": "¡", + "\\textcent": "¢", + "\\cent": "¢", + "\\textsterling": "£", + "\\pounds": "£", + "\\textcurrency": "¤", + "\\textyen": "¥", + "\\yen": "¥", + "\\textbrokenbar": "¦", + "\\textsection": "§", + "\\textasciidieresis": "¨", + "\\spddot": "¨", + "\\textcopyright": "©", + "\\textordfeminine": "ª", + "\\guillemotleft": "«", + "\\lnot": "¬", + "\\neg": "¬", + "\\-": "­", + "\\textregistered": "®", + "\\circledR": "®", + "\\textasciimacron": "¯", + "\\textdegree": "°", + "^\\circ": "°", + "\\pm": "±", + "^{2}": "²", + "^{3}": "³", + "\\textasciiacute": "´", + "\\textmu": "µ", + "\\textparagraph": "¶", + "^{1}": "¹", + "\\textordmasculine": "º", + "\\guillemotright": "»", + "\\frac{1}{4}": "¼", + "\\textonequarter": "¼", + "\\frac{1}{2}": "½", + "\\textonehalf": "½", + "\\frac{3}{4}": "¾", + "\\textthreequarters": "¾", + "\\textquestiondown": "¿", + "\\`A": "À", + "\\'A": "Á", + "\\^A": "Â", + "\\~A": "Ã", + "\\\"A": "Ä", + "\\AA": "Å", + "\\r{A}": "Å", + "{\\r A}": "Å", + "\\AE": "Æ", + "\\c{C}": "Ç", + "\\`E": "È", + "\\'E": "É", + "\\^E": "Ê", + "\\\"E": "Ë", + "\\`I": "Ì", + "\\'I": "Í", + "\\^I": "Î", + "\\\"I": "Ï", + "\\DH": "Ð", + "\\~N": "Ñ", + "\\`O": "Ò", + "\\'O": "Ó", + "\\^O": "Ô", + "\\~O": "Õ", + "\\\"O": "Ö", + "\\texttimes": "×", + "\\times": "×", + "\\O": "Ø", + "\\`U": "Ù", + "\\'U": "Ú", + "\\^U": "Û", + "\\\"U": "Ü", + "\\'Y": "Ý", + "\\TH": "Þ", + "\\ss": "ß", + "\\`a": "à", + "\\'a": "á", + "\\^a": "â", + "\\~a": "ã", + "\\\"a": "ä", + "\\aa": "å", + "\\r{a}": "å", + "{\\r a}": "å", + "\\ae": "æ", + "\\c{c}": "ç", + "\\`e": "è", + "\\'e": "é", + "\\^e": "ê", + "\\\"e": "ë", + "\\`i": "ì", + "\\`\\i": "ì", + "\\'i": "í", + "\\'\\i": "í", + "\\^i": "î", + "\\^\\i": "î", + "\\\"i": "ï", + "\\\"\\i": "ï", + "\\dh": "ð", + "\\eth": "ð", + "\\~n": "ñ", + "\\`o": "ò", + "\\'o": "ó", + "\\^o": "ô", + "\\~o": "õ", + "\\\"o": "ö", + "\\div": "÷", + "\\o": "ø", + "\\`u": "ù", + "\\'u": "ú", + "\\^u": "û", + "\\\"u": "ü", + "\\'y": "ý", + "\\th": "þ", + "\\\"y": "ÿ", + "\\=A": "Ā", + "\\=a": "ā", + "\\u{A}": "Ă", + "\\u{a}": "ă", + "\\k{A}": "Ą", + "\\k{a}": "ą", + "\\'C": "Ć", + "\\'c": "ć", + "\\^C": "Ĉ", + "\\^c": "ĉ", + "\\.C": "Ċ", + "\\.c": "ċ", + "\\v{C}": "Č", + "\\v{c}": "č", + "\\v{D}": "Ď", + "\\v{d}": "ď", + "\\DJ": "Đ", + "\\dj": "đ", + "\\=E": "Ē", + "\\=e": "ē", + "\\u{E}": "Ĕ", + "\\u{e}": "ĕ", + "\\.E": "Ė", + "\\.e": "ė", + "\\k{E}": "Ę", + "\\k{e}": "ę", + "\\v{E}": "Ě", + "\\v{e}": "ě", + "\\^G": "Ĝ", + "\\^g": "ĝ", + "\\u{G}": "Ğ", + "\\u{g}": "ğ", + "\\.G": "Ġ", + "\\.g": "ġ", + "\\c{G}": "Ģ", + "\\c{g}": "ģ", + "\\^H": "Ĥ", + "\\^h": "ĥ", + "{\\fontencoding{LELA}\\selectfont\\char40}": "Ħ", + "\\Elzxh": "ħ", + "\\~I": "Ĩ", + "\\~i": "ĩ", + "\\=I": "Ī", + "\\=i": "ī", + "\\u{I}": "Ĭ", + "{\\u \\i}": "ĭ", + "\\k{I}": "Į", + "\\k{i}": "į", + "\\.I": "İ", + "\\i": "ı", + "\\imath": "ı", + "\\^J": "Ĵ", + "\\^\\j": "ĵ", + "\\c{K}": "Ķ", + "\\c{k}": "ķ", + "{\\fontencoding{LELA}\\selectfont\\char91}": "ĸ", + "\\'L": "Ĺ", + "\\'l": "ĺ", + "\\c{L}": "Ļ", + "\\c{l}": "ļ", + "\\v{L}": "Ľ", + "\\v{l}": "ľ", + "{\\fontencoding{LELA}\\selectfont\\char201}": "Ŀ", + "{\\fontencoding{LELA}\\selectfont\\char202}": "ŀ", + "\\L": "Ł", + "\\l": "ł", + "\\'N": "Ń", + "\\'n": "ń", + "\\c{N}": "Ņ", + "\\c{n}": "ņ", + "\\v{N}": "Ň", + "\\v{n}": "ň", + "\\NG": "Ŋ", + "\\ng": "ŋ", + "\\=O": "Ō", + "\\=o": "ō", + "\\u{O}": "Ŏ", + "\\u{o}": "ŏ", + "\\H{O}": "Ő", + "\\H{o}": "ő", + "\\OE": "Œ", + "\\oe": "œ", + "\\'R": "Ŕ", + "\\'r": "ŕ", + "\\c{R}": "Ŗ", + "\\c{r}": "ŗ", + "\\v{R}": "Ř", + "\\v{r}": "ř", + "\\'S": "Ś", + "\\'s": "ś", + "\\^S": "Ŝ", + "\\^s": "ŝ", + "\\c{S}": "Ş", + "\\c{s}": "ş", + "\\v{S}": "Š", + "\\v{s}": "š", + "\\c{T}": "Ţ", + "\\c{t}": "ţ", + "\\v{T}": "Ť", + "\\v{t}": "ť", + "{\\fontencoding{LELA}\\selectfont\\char47}": "Ŧ", + "{\\fontencoding{LELA}\\selectfont\\char63}": "ŧ", + "\\~U": "Ũ", + "\\~u": "ũ", + "\\=U": "Ū", + "\\=u": "ū", + "\\u{U}": "Ŭ", + "\\u{u}": "ŭ", + "\\r{U}": "Ů", + "{\\r U}": "Ů", + "\\r{u}": "ů", + "\\ocirc{u}": "ů", + "{\\r u}": "ů", + "\\H{U}": "Ű", + "\\H{u}": "ű", + "\\k{U}": "Ų", + "\\k{u}": "ų", + "\\^W": "Ŵ", + "\\^w": "ŵ", + "\\^Y": "Ŷ", + "\\^y": "ŷ", + "\\\"Y": "Ÿ", + "\\'Z": "Ź", + "\\'z": "ź", + "\\.Z": "Ż", + "\\.z": "ż", + "\\v{Z}": "Ž", + "\\v{z}": "ž", + "\\texthvlig": "ƕ", + "\\textnrleg": "ƞ", + "\\textesh": "ƪ", + "\\Zbar": "Ƶ", + "{\\fontencoding{LELA}\\selectfont\\char195}": "ƺ", + "\\textdoublepipe": "ǂ", + "\\v{A}": "Ǎ", + "\\v{a}": "ǎ", + "\\v{I}": "Ǐ", + "\\v{i}": "ǐ", + "\\v{O}": "Ǒ", + "\\v{o}": "ǒ", + "\\v{U}": "Ǔ", + "\\v{u}": "ǔ", + "\\v{G}": "Ǧ", + "\\v{g}": "ǧ", + "\\v{K}": "Ǩ", + "\\v{k}": "ǩ", + "\\k{O}": "Ǫ", + "\\k{o}": "ǫ", + "\\v{j}": "ǰ", + "\\'G": "Ǵ", + "\\'g": "ǵ", + "\\c{E}": "Ȩ", + "\\c{e}": "ȩ", + "\\jmath": "ȷ", + "\\Elztrna": "ɐ", + "\\Elztrnsa": "ɒ", + "\\Elzopeno": "ɔ", + "\\Elzrtld": "ɖ", + "{\\fontencoding{LEIP}\\selectfont\\char61}": "ɘ", + "\\Elzschwa": "ə", + "\\varepsilon": "ɛ", + "\\Elzpgamma": "ɣ", + "\\Elzpbgam": "ɤ", + "\\Elztrnh": "ɥ", + "\\Elzbtdl": "ɬ", + "\\Elzrtll": "ɭ", + "\\Elztrnm": "ɯ", + "\\Elztrnmlr": "ɰ", + "\\Elzltlmr": "ɱ", + "\\Elzltln": "ɲ", + "\\Elzrtln": "ɳ", + "\\Elzclomeg": "ɷ", + "\\textphi": "ɸ", + "\\Elztrnr": "ɹ", + "\\Elztrnrl": "ɺ", + "\\Elzrttrnr": "ɻ", + "\\Elzrl": "ɼ", + "\\Elzrtlr": "ɽ", + "\\Elzfhr": "ɾ", + "{\\fontencoding{LEIP}\\selectfont\\char202}": "ɿ", + "\\Elzrtls": "ʂ", + "\\Elzesh": "ʃ", + "\\Elztrnt": "ʇ", + "\\Elzrtlt": "ʈ", + "\\Elzpupsil": "ʊ", + "\\Elzpscrv": "ʋ", + "\\Elzinvv": "ʌ", + "\\Elzinvw": "ʍ", + "\\Elztrny": "ʎ", + "\\Elzrtlz": "ʐ", + "\\Elzyogh": "ʒ", + "\\Elzglst": "ʔ", + "\\Elzreglst": "ʕ", + "\\Elzinglst": "ʖ", + "\\textturnk": "ʞ", + "\\Elzdyogh": "ʤ", + "\\Elztesh": "ʧ", + "\\textsuperscript{h}": "ʰ", + "^{h}": "ʰ", + "\\textsuperscript{j}": "ʲ", + "^{j}": "ʲ", + "\\textsuperscript{r}": "ʳ", + "^{r}": "ʳ", + "\\textsuperscript{w}": "ʷ", + "^{w}": "ʷ", + "\\textsuperscript{y}": "ʸ", + "^{y}": "ʸ", + "\\lasp": "ʿ", + "\\textasciicircum": "ˆ", + "\\textasciicaron": "ˇ", + "\\Elzverts": "ˈ", + "\\Elzverti": "ˌ", + "\\Elzlmrk": "ː", + "\\Elzhlmrk": "ˑ", + "\\Elzsbrhr": "˒", + "\\Elzsblhr": "˓", + "\\Elzrais": "˔", + "\\Elzlow": "˕", + "\\textasciibreve": "˘", + "\\textperiodcentered": "˙", + "\\texttildelow": "˜", + "\\textsuperscript{l}": "ˡ", + "^{l}": "ˡ", + "\\textsuperscript{s}": "ˢ", + "^{s}": "ˢ", + "\\textsuperscript{x}": "ˣ", + "^{x}": "ˣ", + "\\tone{55}": "˥", + "\\tone{44}": "˦", + "\\tone{33}": "˧", + "\\tone{22}": "˨", + "\\tone{11}": "˩", + "\\`": "̀", + "\\grave": "̀", + "\\textgravemacron": "̀̄", + "\\textgravedot": "̀̇", + "\\'": "́", + "\\acute": "́", + "\\textacutemacron": "́̄", + "\\textacutewedge": "́̌", + "\\hat": "̂", + "\\textcircumdot": "̂̇", + "\\~": "̃", + "\\tilde": "̃", + "\\texttildedot": "̃̇", + "\\=": "̄", + "\\bar": "̄", + "\\overline": "̅", + "\\u": "̆", + "\\breve": "̆", + "\\textbrevemacron": "̆̄", + "\\.": "̇", + "\\dot": "̇", + "\\textdotacute": "̇́", + "\\\"": "̈", + "\\ddot": "̈", + "\\ovhook": "̉", + "\\r": "̊", + "\\mathring": "̊", + "\\textringmacron": "̊̄", + "\\H": "̋", + "\\check": "̌", + "\\v": "̌", + "\\textvbaraccent": "̍", + "\\textdoublevbaraccent": "̎", + "\\textdoublegrave": "̏", + "\\textdotbreve": "̐", + "{\\fontencoding{LECO}\\selectfont\\char177}": "̑", + "\\oturnedcomma": "̒", + "\\ocommatopright": "̕", + "\\textsubgrave": "̖", + "\\textadvancing": "̘", + "\\textretracting": "̙", + "\\droang": "̚", + "\\textcorner": "̚", + "\\textsublhalfring": "̜", + "\\textraising": "̝", + "\\textlowering": "̞", + "\\textsubplus": "̟", + "\\Elzpalh": "̡", + "\\Elzrh": "̢", + "\\d": "̣", + "\\textsubumlaut": "̤", + "\\textsubring": "̥", + "\\c": "̧", + "\\k": "̨", + "\\textsyllabic": "̩", + "\\Elzsbbrg": "̪", + "\\textsubbridge": "̪", + "{\\fontencoding{LECO}\\selectfont\\char203}": "̫", + "\\textsubwedge": "̬", + "\\textsubarch": "̯", + "\\utilde": "̰", + "\\textsubtilde": "̰", + "\\textsubbar": "̱", + "\\underbar": "̱", + "\\underline": "̲", + "\\textsuperimposetilde": "̴", + "\\Elzxl": "̵", + "\\Elzbar": "̶", + "{\\fontencoding{LECO}\\selectfont\\char215}": "̷", + "\\not": "̸", + "\\textsubrhalfring": "̹", + "\\textinvsubbridge": "̺", + "\\textsubsquare": "̻", + "\\textseagull": "̼", + "\\textovercross": "̽", + "{\\fontencoding{LECO}\\selectfont\\char225}": "͡", + "\\'H": "Ή", + "{\\'{}I}": "Ί", + "{\\'{}O}": "Ό", + "\\mathrm{'Y}": "Ύ", + "\\mathrm{'\\Omega}": "Ώ", + "\\acute{\\ddot{\\iota}}": "ΐ", + "\\Gamma": "Γ", + "\\varGamma": "Γ", + "\\Delta": "Δ", + "\\Theta": "Θ", + "\\Lambda": "Λ", + "\\Xi": "Ξ", + "\\Pi": "Π", + "\\Sigma": "Σ", + "\\Upsilon": "Υ", + "\\Phi": "Φ", + "\\Psi": "Ψ", + "\\Omega": "Ω", + "\\mathrm{\\ddot{I}}": "Ϊ", + "\\mathrm{\\ddot{Y}}": "Ϋ", + "{\\'$\\alpha$}": "ά", + "\\acute{\\epsilon}": "έ", + "\\acute{\\eta}": "ή", + "\\acute{\\iota}": "ί", + "\\acute{\\ddot{\\upsilon}}": "ΰ", + "\\alpha": "α", + "\\beta": "β", + "\\gamma": "γ", + "\\delta": "δ", + "\\zeta": "ζ", + "\\eta": "η", + "\\texttheta": "θ", + "\\theta": "θ", + "\\iota": "ι", + "\\kappa": "κ", + "\\lambda": "λ", + "\\nu": "ν", + "\\xi": "ξ", + "\\pi": "π", + "\\rho": "ρ", + "\\varsigma": "ς", + "\\sigma": "σ", + "\\tau": "τ", + "\\upsilon": "υ", + "\\varphi": "φ", + "\\chi": "χ", + "\\psi": "ψ", + "\\omega": "ω", + "\\ddot{\\iota}": "ϊ", + "\\ddot{\\upsilon}": "ϋ", + "\\acute{\\upsilon}": "ύ", + "\\acute{\\omega}": "ώ", + "\\Pisymbol{ppi022}{87}": "ϐ", + "\\varbeta": "ϐ", + "\\textvartheta": "ϑ", + "\\vartheta": "ϑ", + "\\phi": "ϕ", + "\\varpi": "ϖ", + "\\Qoppa": "Ϙ", + "\\qoppa": "ϙ", + "\\Stigma": "Ϛ", + "\\stigma": "ϛ", + "\\Digamma": "Ϝ", + "\\digamma": "ϝ", + "\\Koppa": "Ϟ", + "\\koppa": "ϟ", + "\\Sampi": "Ϡ", + "\\sampi": "ϡ", + "\\varkappa": "ϰ", + "\\varrho": "ϱ", + "\\textTheta": "ϴ", + "\\upvarTheta": "ϴ", + "\\epsilon": "ϵ", + "\\backepsilon": "϶", + "\\cyrchar\\CYRYO": "Ё", + "\\cyrchar\\CYRDJE": "Ђ", + "\\cyrchar{\\'\\CYRG}": "Ѓ", + "\\cyrchar\\CYRIE": "Є", + "\\cyrchar\\CYRDZE": "Ѕ", + "\\cyrchar\\CYRII": "І", + "\\cyrchar\\CYRYI": "Ї", + "\\cyrchar\\CYRJE": "Ј", + "\\cyrchar\\CYRLJE": "Љ", + "\\cyrchar\\CYRNJE": "Њ", + "\\cyrchar\\CYRTSHE": "Ћ", + "\\cyrchar{\\'\\CYRK}": "Ќ", + "\\cyrchar\\CYRUSHRT": "Ў", + "\\cyrchar\\CYRDZHE": "Џ", + "\\cyrchar\\CYRA": "А", + "\\cyrchar\\CYRB": "Б", + "\\cyrchar\\CYRV": "В", + "\\cyrchar\\CYRG": "Г", + "\\cyrchar\\CYRD": "Д", + "\\cyrchar\\CYRE": "Е", + "\\cyrchar\\CYRZH": "Ж", + "\\cyrchar\\CYRZ": "З", + "\\cyrchar\\CYRI": "И", + "\\cyrchar\\CYRISHRT": "Й", + "\\cyrchar\\CYRK": "К", + "\\cyrchar\\CYRL": "Л", + "\\cyrchar\\CYRM": "М", + "\\cyrchar\\CYRN": "Н", + "\\cyrchar\\CYRO": "О", + "\\cyrchar\\CYRP": "П", + "\\cyrchar\\CYRR": "Р", + "\\cyrchar\\CYRS": "С", + "\\cyrchar\\CYRT": "Т", + "\\cyrchar\\CYRU": "У", + "\\cyrchar\\CYRF": "Ф", + "\\cyrchar\\CYRH": "Х", + "\\cyrchar\\CYRC": "Ц", + "\\cyrchar\\CYRCH": "Ч", + "\\cyrchar\\CYRSH": "Ш", + "\\cyrchar\\CYRSHCH": "Щ", + "\\cyrchar\\CYRHRDSN": "Ъ", + "\\bud": "Ъ", + "\\cdprime": "Ъ", + "\\cyrchar\\CYRERY": "Ы", + "\\cyrchar\\CYRSFTSN": "Ь", + "\\cprime": "Ь", + "\\cyrchar\\CYREREV": "Э", + "\\cyrchar\\CYRYU": "Ю", + "\\cyrchar\\CYRYA": "Я", + "\\cyrchar\\cyra": "а", + "\\cyrchar\\cyrb": "б", + "\\cyrchar\\cyrv": "в", + "\\cyrchar\\cyrg": "г", + "\\cyrchar\\cyrd": "д", + "\\cyrchar\\cyre": "е", + "\\cyrchar\\cyrzh": "ж", + "\\cyrchar\\cyrz": "з", + "\\cyrchar\\cyri": "и", + "\\cyrchar\\cyrishrt": "й", + "\\cyrchar\\cyrk": "к", + "\\cyrchar\\cyrl": "л", + "\\cyrchar\\cyrm": "м", + "\\cyrchar\\cyrn": "н", + "\\cyrchar\\cyro": "о", + "\\cyrchar\\cyrp": "п", + "\\cyrchar\\cyrr": "р", + "\\cyrchar\\cyrs": "с", + "\\cyrchar\\cyrt": "т", + "\\cyrchar\\cyru": "у", + "\\cyrchar\\cyrf": "ф", + "\\cyrchar\\cyrh": "х", + "\\cyrchar\\cyrc": "ц", + "\\cyrchar\\cyrch": "ч", + "\\cyrchar\\cyrsh": "ш", + "\\cyrchar\\cyrshch": "щ", + "\\cyrchar\\cyrhrdsn": "ъ", + "\\cyrchar\\cyrery": "ы", + "\\cyrchar\\cyrsftsn": "ь", + "\\cyrchar\\cyrerev": "э", + "\\cyrchar\\cyryu": "ю", + "\\cyrchar\\cyrya": "я", + "\\cyrchar\\cyryo": "ё", + "\\cyrchar\\cyrdje": "ђ", + "\\cyrchar{\\'\\cyrg}": "ѓ", + "\\cyrchar\\cyrie": "є", + "\\cyrchar\\cyrdze": "ѕ", + "\\cyrchar\\cyrii": "і", + "\\cyrchar\\cyryi": "ї", + "\\cyrchar\\cyrje": "ј", + "\\cyrchar\\cyrlje": "љ", + "\\cyrchar\\cyrnje": "њ", + "\\cyrchar\\cyrtshe": "ћ", + "\\cyrchar{\\'\\cyrk}": "ќ", + "\\cyrchar\\cyrushrt": "ў", + "\\cyrchar\\cyrdzhe": "џ", + "\\cyrchar\\CYROMEGA": "Ѡ", + "\\cyrchar\\cyromega": "ѡ", + "\\cyrchar\\CYRYAT": "Ѣ", + "\\cyrchar\\CYRIOTE": "Ѥ", + "\\cyrchar\\cyriote": "ѥ", + "\\cyrchar\\CYRLYUS": "Ѧ", + "\\cyrchar\\cyrlyus": "ѧ", + "\\cyrchar\\CYRIOTLYUS": "Ѩ", + "\\cyrchar\\cyriotlyus": "ѩ", + "\\cyrchar\\CYRBYUS": "Ѫ", + "\\cyrchar\\CYRIOTBYUS": "Ѭ", + "\\cyrchar\\cyriotbyus": "ѭ", + "\\cyrchar\\CYRKSI": "Ѯ", + "\\cyrchar\\cyrksi": "ѯ", + "\\cyrchar\\CYRPSI": "Ѱ", + "\\cyrchar\\cyrpsi": "ѱ", + "\\cyrchar\\CYRFITA": "Ѳ", + "\\cyrchar\\CYRIZH": "Ѵ", + "\\cyrchar\\CYRUK": "Ѹ", + "\\cyrchar\\cyruk": "ѹ", + "\\cyrchar\\CYROMEGARND": "Ѻ", + "\\cyrchar\\cyromegarnd": "ѻ", + "\\cyrchar\\CYROMEGATITLO": "Ѽ", + "\\cyrchar\\cyromegatitlo": "ѽ", + "\\cyrchar\\CYROT": "Ѿ", + "\\cyrchar\\cyrot": "ѿ", + "\\cyrchar\\CYRKOPPA": "Ҁ", + "\\cyrchar\\cyrkoppa": "ҁ", + "\\cyrchar\\cyrthousands": "҂", + "\\cyrchar\\cyrhundredthousands": "҈", + "\\cyrchar\\cyrmillions": "҉", + "\\cyrchar\\CYRSEMISFTSN": "Ҍ", + "\\cyrchar\\cyrsemisftsn": "ҍ", + "\\cyrchar\\CYRRTICK": "Ҏ", + "\\cyrchar\\cyrrtick": "ҏ", + "\\cyrchar\\CYRGUP": "Ґ", + "\\cyrchar\\cyrgup": "ґ", + "\\cyrchar\\CYRGHCRS": "Ғ", + "\\cyrchar\\cyrghcrs": "ғ", + "\\cyrchar\\CYRGHK": "Ҕ", + "\\cyrchar\\cyrghk": "ҕ", + "\\cyrchar\\CYRZHDSC": "Җ", + "\\cyrchar\\cyrzhdsc": "җ", + "\\cyrchar\\CYRZDSC": "Ҙ", + "\\cyrchar\\cyrzdsc": "ҙ", + "\\cyrchar\\CYRKDSC": "Қ", + "\\cyrchar\\cyrkdsc": "қ", + "\\cyrchar\\CYRKVCRS": "Ҝ", + "\\cyrchar\\cyrkvcrs": "ҝ", + "\\cyrchar\\CYRKHCRS": "Ҟ", + "\\cyrchar\\cyrkhcrs": "ҟ", + "\\cyrchar\\CYRKBEAK": "Ҡ", + "\\cyrchar\\cyrkbeak": "ҡ", + "\\cyrchar\\CYRNDSC": "Ң", + "\\cyrchar\\cyrndsc": "ң", + "\\cyrchar\\CYRNG": "Ҥ", + "\\cyrchar\\cyrng": "ҥ", + "\\cyrchar\\CYRPHK": "Ҧ", + "\\cyrchar\\cyrphk": "ҧ", + "\\cyrchar\\CYRABHHA": "Ҩ", + "\\cyrchar\\cyrabhha": "ҩ", + "\\cyrchar\\CYRSDSC": "Ҫ", + "\\cyrchar\\cyrsdsc": "ҫ", + "\\cyrchar\\CYRTDSC": "Ҭ", + "\\cyrchar\\cyrtdsc": "ҭ", + "\\cyrchar\\CYRY": "Ү", + "\\cyrchar\\cyry": "ү", + "\\cyrchar\\CYRYHCRS": "Ұ", + "\\cyrchar\\cyryhcrs": "ұ", + "\\cyrchar\\CYRHDSC": "Ҳ", + "\\cyrchar\\cyrhdsc": "ҳ", + "\\cyrchar\\CYRTETSE": "Ҵ", + "\\cyrchar\\cyrtetse": "ҵ", + "\\cyrchar\\CYRCHRDSC": "Ҷ", + "\\cyrchar\\cyrchrdsc": "ҷ", + "\\cyrchar\\CYRCHVCRS": "Ҹ", + "\\cyrchar\\cyrchvcrs": "ҹ", + "\\cyrchar\\CYRSHHA": "Һ", + "\\cyrchar\\cyrshha": "һ", + "\\cyrchar\\CYRABHCH": "Ҽ", + "\\cyrchar\\cyrabhch": "ҽ", + "\\cyrchar\\CYRABHCHDSC": "Ҿ", + "\\cyrchar\\cyrabhchdsc": "ҿ", + "\\cyrchar\\CYRpalochka": "Ӏ", + "\\cyrchar\\CYRKHK": "Ӄ", + "\\cyrchar\\cyrkhk": "ӄ", + "\\cyrchar\\CYRNHK": "Ӈ", + "\\cyrchar\\cyrnhk": "ӈ", + "\\cyrchar\\CYRCHLDSC": "Ӌ", + "\\cyrchar\\cyrchldsc": "ӌ", + "\\cyrchar\\CYRAE": "Ӕ", + "\\cyrchar\\cyrae": "ӕ", + "\\cyrchar\\CYRSCHWA": "Ә", + "\\cyrchar\\cyrschwa": "ә", + "\\cyrchar\\CYRABHDZE": "Ӡ", + "\\cyrchar\\cyrabhdze": "ӡ", + "\\cyrchar\\CYROTLD": "Ө", + "\\cyrchar\\cyrotld": "ө", + "\\\\backslash": "ࡱ", + "\\textsuperscript{a}": "ᵃ", + "^{a}": "ᵃ", + "\\textsuperscript{b}": "ᵇ", + "^{b}": "ᵇ", + "\\textsuperscript{d}": "ᵈ", + "^{d}": "ᵈ", + "\\textsuperscript{e}": "ᵉ", + "^{e}": "ᵉ", + "\\textsuperscript{g}": "ᵍ", + "^{g}": "ᵍ", + "\\textsuperscript{k}": "ᵏ", + "^{k}": "ᵏ", + "\\textsuperscript{m}": "ᵐ", + "^{m}": "ᵐ", + "\\textsuperscript{o}": "ᵒ", + "^{o}": "ᵒ", + "\\textsuperscript{p}": "ᵖ", + "^{p}": "ᵖ", + "\\textsuperscript{t}": "ᵗ", + "^{t}": "ᵗ", + "\\textsuperscript{u}": "ᵘ", + "^{u}": "ᵘ", + "\\textsuperscript{v}": "ᵛ", + "^{v}": "ᵛ", + "\\textsuperscript{c}": "ᶜ", + "^{c}": "ᶜ", + "\\textsuperscript{f}": "ᶠ", + "^{f}": "ᶠ", + "\\textsuperscript{z}": "ᶻ", + "^{z}": "ᶻ", + "\\.B": "Ḃ", + "\\.b": "ḃ", + "\\d{B}": "Ḅ", + "\\d{b}": "ḅ", + "\\b{B}": "Ḇ", + "\\b{b}": "ḇ", + "\\.D": "Ḋ", + "\\.d": "ḋ", + "\\d{D}": "Ḍ", + "\\d{d}": "ḍ", + "\\b{D}": "Ḏ", + "\\b{d}": "ḏ", + "\\c{D}": "Ḑ", + "\\c{d}": "ḑ", + "\\c{\\u{E}}": "Ḝ", + "\\c{\\u{e}}": "ḝ", + "\\.F": "Ḟ", + "\\.f": "ḟ", + "\\=G": "Ḡ", + "\\=g": "ḡ", + "\\.H": "Ḣ", + "\\.h": "ḣ", + "\\d{H}": "Ḥ", + "\\d{h}": "ḥ", + "\\\"H": "Ḧ", + "\\\"h": "ḧ", + "\\c{H}": "Ḩ", + "\\c{h}": "ḩ", + "\\'K": "Ḱ", + "\\'k": "ḱ", + "\\d{K}": "Ḳ", + "\\d{k}": "ḳ", + "\\b{K}": "Ḵ", + "\\b{k}": "ḵ", + "\\d{L}": "Ḷ", + "\\d{l}": "ḷ", + "\\b{L}": "Ḻ", + "\\b{l}": "ḻ", + "\\'M": "Ḿ", + "\\'m": "ḿ", + "\\.M": "Ṁ", + "\\.m": "ṁ", + "\\d{M}": "Ṃ", + "\\d{m}": "ṃ", + "\\.N": "Ṅ", + "\\.n": "ṅ", + "\\d{N}": "Ṇ", + "\\d{n}": "ṇ", + "\\b{N}": "Ṉ", + "\\b{n}": "ṉ", + "\\'P": "Ṕ", + "\\'p": "ṕ", + "\\.P": "Ṗ", + "\\.p": "ṗ", + "\\.R": "Ṙ", + "\\.r": "ṙ", + "\\d{R}": "Ṛ", + "\\d{r}": "ṛ", + "\\b{R}": "Ṟ", + "\\b{r}": "ṟ", + "\\.S": "Ṡ", + "\\.s": "ṡ", + "\\d{S}": "Ṣ", + "\\d{s}": "ṣ", + "\\.T": "Ṫ", + "\\.t": "ṫ", + "\\d{T}": "Ṭ", + "\\d{t}": "ṭ", + "\\b{T}": "Ṯ", + "\\b{t}": "ṯ", + "\\~V": "Ṽ", + "\\~v": "ṽ", + "\\d{V}": "Ṿ", + "\\d{v}": "ṿ", + "\\`W": "Ẁ", + "\\`w": "ẁ", + "\\'W": "Ẃ", + "\\'w": "ẃ", + "\\\"W": "Ẅ", + "\\\"w": "ẅ", + "\\.W": "Ẇ", + "\\.w": "ẇ", + "\\d{W}": "Ẉ", + "\\d{w}": "ẉ", + "\\.X": "Ẋ", + "\\.x": "ẋ", + "\\\"X": "Ẍ", + "\\\"x": "ẍ", + "\\.Y": "Ẏ", + "\\.y": "ẏ", + "\\^Z": "Ẑ", + "\\^z": "ẑ", + "\\d{Z}": "Ẓ", + "\\d{z}": "ẓ", + "\\b{Z}": "Ẕ", + "\\b{z}": "ẕ", + "\\b{h}": "ẖ", + "\\\"t": "ẗ", + "\\r{w}": "ẘ", + "\\r{y}": "ẙ", + "\\d{A}": "Ạ", + "\\d{a}": "ạ", + "\\d{E}": "Ẹ", + "\\d{e}": "ẹ", + "\\~E": "Ẽ", + "\\~e": "ẽ", + "\\d{I}": "Ị", + "\\d{i}": "ị", + "\\d{O}": "Ọ", + "\\d{o}": "ọ", + "\\d{U}": "Ụ", + "\\d{u}": "ụ", + "\\`Y": "Ỳ", + "\\`y": "ỳ", + "\\d{Y}": "Ỵ", + "\\d{y}": "ỵ", + "\\~Y": "Ỹ", + "\\~y": "ỹ", + "\\hspace{0.6em}": " ", + "\\hspace{1em}": " ", + "\\quad": " ", + "\\;": " ", + "\\hspace{0.25em}": " ", + "\\hspace{0.166em}": " ", + "\\hphantom{0}": " ", + "\\hphantom{,}": " ", + "\\,": " ", + "\\mkern1mu": " ", + "\\mbox": "​", + "{\\aftergroup\\ignorespaces}": "‌", + "\\textendash": "–", + "\\textemdash": "—", + "\\rule{1em}{1pt}": "―", + "\\horizbar": "―", + "\\Vert": "‖", + "\\twolowline": "‗", + "\\textquoteleft": "‘", + "\\textquoteright": "’", + "\\Elzreapos": "‛", + "\\textquotedblleft": "“", + "\\textquotedblright": "”", + "\\quotedblbase": "‟", + "\\textdagger": "†", + "\\dagger": "†", + "\\textdaggerdbl": "‡", + "\\ddagger": "‡", + "\\textbullet": "•", + "\\enleadertwodots": "‥", + "\\ldots": "…", + "\\textperthousand": "‰", + "\\textpertenthousand": "‱", + "{'}": "′", + "{''}": "″", + "{'''}": "‴", + "\\backprime": "‵", + "\\backdprime": "‶", + "\\backtrprime": "‷", + "\\caretinsert": "‸", + "\\guilsinglleft": "‹", + "\\guilsinglright": "›", + "\\Exclam": "‼", + "\\hyphenbullet": "⁃", + "\\fracslash": "⁄", + "\\Question": "⁇", + "\\closure": "⁐", + "\\:": " ", + "\\nolinebreak": "⁠", + "^{0}": "⁰", + "\\textsuperscript{i}": "ⁱ", + "^{i}": "ⁱ", + "^{4}": "⁴", + "^{5}": "⁵", + "^{6}": "⁶", + "^{7}": "⁷", + "^{8}": "⁸", + "^{9}": "⁹", + "^{+}": "⁺", + "^{-}": "⁻", + "^{=}": "⁼", + "^{(}": "⁽", + "^{)}": "⁾", + "\\textsuperscript{n}": "ⁿ", + "^{n}": "ⁿ", + "_{0}": "₀", + "_{1}": "₁", + "_{2}": "₂", + "_{3}": "₃", + "_{4}": "₄", + "_{5}": "₅", + "_{6}": "₆", + "_{7}": "₇", + "_{8}": "₈", + "_{9}": "₉", + "_{+}": "₊", + "_{-}": "₋", + "_{=}": "₌", + "_{(}": "₍", + "_{)}": "₎", + "\\textsubscript{a}": "ₐ", + "_{a}": "ₐ", + "\\textsubscript{e}": "ₑ", + "_{e}": "ₑ", + "\\textsubscript{o}": "ₒ", + "_{o}": "ₒ", + "\\textsubscript{x}": "ₓ", + "_{x}": "ₓ", + "\\textsubscript{\\textschwa}": "ₔ", + "\\textsubscript{h}": "ₕ", + "_{h}": "ₕ", + "\\textsubscript{k}": "ₖ", + "_{k}": "ₖ", + "\\textsubscript{l}": "ₗ", + "_{l}": "ₗ", + "\\textsubscript{m}": "ₘ", + "_{m}": "ₘ", + "\\textsubscript{n}": "ₙ", + "_{n}": "ₙ", + "\\textsubscript{p}": "ₚ", + "_{p}": "ₚ", + "\\textsubscript{s}": "ₛ", + "_{s}": "ₛ", + "\\textsubscript{t}": "ₜ", + "_{t}": "ₜ", + "\\ensuremath{\\Elzpes}": "₧", + "\\texteuro": "€", + "\\euro": "€", + "\\lvec": "⃐", + "\\vertoverlay": "⃒", + "\\LVec": "⃖", + "\\vec": "⃗", + "\\dddot": "⃛", + "\\ddddot": "⃜", + "\\enclosecircle": "⃝", + "\\enclosesquare": "⃞", + "\\enclosediamond": "⃟", + "\\overleftrightarrow": "⃡", + "\\enclosetriangle": "⃤", + "\\annuity": "⃧", + "\\threeunderdot": "⃨", + "\\widebridgeabove": "⃩", + "\\underrightharpoondown": "⃬", + "\\underleftharpoondown": "⃭", + "\\underleftarrow": "⃮", + "\\underrightarrow": "⃯", + "\\asteraccent": "⃰", + "\\mathbb{C}": "ℂ", + "\\textcelsius": "℃", + "\\Euler": "ℇ", + "\\mathscr{g}": "ℊ", + "\\mathscr{H}": "ℋ", + "\\mathfrak{H}": "ℌ", + "\\mathbb{H}": "ℍ", + "\\Planckconst": "ℎ", + "\\hslash": "ℏ", + "\\mathscr{I}": "ℐ", + "\\mathfrak{I}": "ℑ", + "\\mathscr{L}": "ℒ", + "\\mathscr{l}": "ℓ", + "\\mathbb{N}": "ℕ", + "\\cyrchar\\textnumero": "№", + "\\textcircledP": "℗", + "\\wp": "℘", + "\\mathbb{P}": "ℙ", + "\\mathbb{Q}": "ℚ", + "\\mathscr{R}": "ℛ", + "\\mathfrak{R}": "ℜ", + "\\mathbb{R}": "ℝ", + "\\Elzxrat": "℞", + "\\textservicemark": "℠", + "\\texttrademark": "™", + "\\mathbb{Z}": "ℤ", + "\\mho": "℧", + "\\mathfrak{Z}": "ℨ", + "\\textriota": "℩", + "\\Angstroem": "Å", + "\\mathscr{B}": "ℬ", + "\\mathfrak{C}": "ℭ", + "\\textestimated": "℮", + "\\mathscr{e}": "ℯ", + "\\mathscr{E}": "ℰ", + "\\mathscr{F}": "ℱ", + "\\Finv": "Ⅎ", + "\\mathscr{M}": "ℳ", + "\\mathscr{o}": "ℴ", + "\\aleph": "ℵ", + "\\beth": "ℶ", + "\\gimel": "ℷ", + "\\daleth": "ℸ", + "\\mathbb{\\pi}": "ℼ", + "\\mathbb{\\gamma}": "ℽ", + "\\mathbb{\\Gamma}": "ℾ", + "\\mathbb{\\Pi}": "ℿ", + "\\mathbb{\\Sigma}": "⅀", + "\\Game": "⅁", + "\\sansLturned": "⅂", + "\\sansLmirrored": "⅃", + "\\Yup": "⅄", + "\\CapitalDifferentialD": "ⅅ", + "\\DifferentialD": "ⅆ", + "\\ExponetialE": "ⅇ", + "\\ComplexI": "ⅈ", + "\\ComplexJ": "ⅉ", + "\\PropertyLine": "⅊", + "\\invamp": "⅋", + "\\frac{1}{7}": "⅐", + "\\textfrac{1}{7}": "⅐", + "\\frac{1}{9}": "⅑", + "\\textfrac{1}{9}": "⅑", + "\\frac{1}{10}": "⅒", + "\\textfrac{1}{10}": "⅒", + "\\frac{1}{3}": "⅓", + "\\textfrac{1}{3}": "⅓", + "\\frac{2}{3}": "⅔", + "\\textfrac{2}{3}": "⅔", + "\\frac{1}{5}": "⅕", + "\\textfrac{1}{5}": "⅕", + "\\frac{2}{5}": "⅖", + "\\textfrac{2}{5}": "⅖", + "\\frac{3}{5}": "⅗", + "\\textfrac{3}{5}": "⅗", + "\\frac{4}{5}": "⅘", + "\\textfrac{4}{5}": "⅘", + "\\frac{1}{6}": "⅙", + "\\textfrac{1}{6}": "⅙", + "\\frac{5}{6}": "⅚", + "\\textfrac{5}{6}": "⅚", + "\\frac{1}{8}": "⅛", + "\\textfrac{1}{8}": "⅛", + "\\frac{3}{8}": "⅜", + "\\textfrac{3}{8}": "⅜", + "\\frac{5}{8}": "⅝", + "\\textfrac{5}{8}": "⅝", + "\\frac{7}{8}": "⅞", + "\\textfrac{7}{8}": "⅞", + "\\frac{1}": "⅟", + "\\textfrac{1}": "⅟", + "\\frac{0}{3}": "↉", + "\\textfrac{0}{3}": "↉", + "\\leftarrow": "←", + "\\uparrow": "↑", + "\\textrightarrow": "→", + "\\rightarrow": "→", + "\\to": "→", + "\\downarrow": "↓", + "\\leftrightarrow": "↔", + "\\updownarrow": "↕", + "\\nwarrow": "↖", + "\\nearrow": "↗", + "\\searrow": "↘", + "\\swarrow": "↙", + "\\nleftarrow": "↚", + "\\nrightarrow": "↛", + "\\arrowwaveleft": "↜", + "\\arrowwaveright": "↝", + "\\twoheadleftarrow": "↞", + "\\twoheaduparrow": "↟", + "\\twoheadrightarrow": "↠", + "\\twoheaddownarrow": "↡", + "\\leftarrowtail": "↢", + "\\rightarrowtail": "↣", + "\\mapsfrom": "↤", + "\\MapsUp": "↥", + "\\mapsto": "↦", + "\\MapsDown": "↧", + "\\updownarrowbar": "↨", + "\\hookleftarrow": "↩", + "\\hookrightarrow": "↪", + "\\looparrowleft": "↫", + "\\looparrowright": "↬", + "\\leftrightsquigarrow": "↭", + "\\nleftrightarrow": "↮", + "\\lightning": "↯", + "\\Lsh": "↰", + "\\Rsh": "↱", + "\\dlsh": "↲", + "\\reflectbox{\\carriagereturn}": "↳", + "\\linefeed": "↴", + "\\carriagereturn": "↵", + "\\curvearrowleft": "↶", + "\\curvearrowright": "↷", + "\\barovernorthwestarrow": "↸", + "\\barleftarrowrightarrowba": "↹", + "\\circlearrowleft": "↺", + "\\circlearrowright": "↻", + "\\leftharpoonup": "↼", + "\\leftharpoondown": "↽", + "\\upharpoonright": "↾", + "\\upharpoonleft": "↿", + "\\rightharpoonup": "⇀", + "\\rightharpoondown": "⇁", + "\\downharpoonright": "⇂", + "\\downharpoonleft": "⇃", + "\\rightleftarrows": "⇄", + "\\dblarrowupdown": "⇅", + "\\leftrightarrows": "⇆", + "\\leftleftarrows": "⇇", + "\\upuparrows": "⇈", + "\\rightrightarrows": "⇉", + "\\downdownarrows": "⇊", + "\\leftrightharpoons": "⇋", + "\\rightleftharpoons": "⇌", + "\\nLeftarrow": "⇍", + "\\nLeftrightarrow": "⇎", + "\\nRightarrow": "⇏", + "\\Leftarrow": "⇐", + "\\Uparrow": "⇑", + "\\Rightarrow": "⇒", + "\\Downarrow": "⇓", + "\\Leftrightarrow": "⇔", + "\\Updownarrow": "⇕", + "\\Nwarrow": "⇖", + "\\Nearrow": "⇗", + "\\Searrow": "⇘", + "\\Swarrow": "⇙", + "\\Lleftarrow": "⇚", + "\\Rrightarrow": "⇛", + "\\leftsquigarrow": "⇜", + "\\rightsquigarrow": "⇝", + "\\nHuparrow": "⇞", + "\\nHdownarrow": "⇟", + "\\dashleftarrow": "⇠", + "\\updasharrow": "⇡", + "\\dashrightarrow": "⇢", + "\\downdasharrow": "⇣", + "\\LeftArrowBar": "⇤", + "\\RightArrowBar": "⇥", + "\\leftwhitearrow": "⇦", + "\\upwhitearrow": "⇧", + "\\rightwhitearrow": "⇨", + "\\downwhitearrow": "⇩", + "\\whitearrowupfrombar": "⇪", + "\\circleonrightarrow": "⇴", + "\\DownArrowUpArrow": "⇵", + "\\rightthreearrows": "⇶", + "\\nvleftarrow": "⇷", + "\\pfun": "⇸", + "\\nvleftrightarrow": "⇹", + "\\nVleftarrow": "⇺", + "\\ffun": "⇻", + "\\nVleftrightarrow": "⇼", + "\\leftarrowtriangle": "⇽", + "\\rightarrowtriangle": "⇾", + "\\leftrightarrowtriangle": "⇿", + "\\forall": "∀", + "\\complement": "∁", + "\\partial": "∂", + "\\exists": "∃", + "\\nexists": "∄", + "\\varnothing": "∅", + "\\increment": "∆", + "\\nabla": "∇", + "\\in": "∈", + "\\not\\in": "∉", + "\\smallin": "∊", + "\\ni": "∋", + "\\not\\ni": "∌", + "\\smallni": "∍", + "\\QED": "∎", + "\\prod": "∏", + "\\coprod": "∐", + "\\sum": "∑", + "\\mp": "∓", + "\\dotplus": "∔", + "\\setminus": "∖", + "{_\\ast}": "∗", + "\\circ": "∘", + "\\bullet": "∙", + "\\surd": "√", + "\\sqrt[3]": "∛", + "\\sqrt[4]": "∜", + "\\propto": "∝", + "\\infty": "∞", + "\\rightangle": "∟", + "\\angle": "∠", + "\\measuredangle": "∡", + "\\sphericalangle": "∢", + "\\mid": "∣", + "\\nmid": "∤", + "\\parallel": "∥", + "\\nparallel": "∦", + "\\wedge": "∧", + "\\vee": "∨", + "\\cap": "∩", + "\\cup": "∪", + "\\int": "∫", + "{\\int\\!\\int}": "∬", + "{\\int\\!\\int\\!\\int}": "∭", + "\\oint": "∮", + "\\surfintegral": "∯", + "\\volintegral": "∰", + "\\clwintegral": "∱", + "\\lcirclerightint": "∲", + "\\rcirclerightint": "∳", + "\\therefore": "∴", + "\\because": "∵", + "\\Colon": "∷", + "\\dotdiv": "∸", + "\\eqcolon": "∹", + "\\mathbin{{:}\\!\\!{-}\\!\\!{:}}": "∺", + "\\homothetic": "∻", + "\\sim": "∼", + "\\backsim": "∽", + "\\lazysinv": "∾", + "\\AC": "∿", + "\\wr": "≀", + "\\not\\sim": "≁", + "\\texteqsim": "≂", + "\\NotEqualTilde": "≂̸", + "\\simeq": "≃", + "\\not\\simeq": "≄", + "\\cong": "≅", + "\\approxnotequal": "≆", + "\\not\\cong": "≇", + "\\approx": "≈", + "\\not\\approx": "≉", + "\\approxeq": "≊", + "\\tildetrpl": "≋", + "\\not\\apid": "≋̸", + "\\allequal": "≌", + "\\asymp": "≍", + "\\Bumpeq": "≎", + "\\NotHumpDownHump": "≎̸", + "\\bumpeq": "≏", + "\\NotHumpEqual": "≏̸", + "\\doteq": "≐", + "\\not\\doteq": "≐̸", + "\\doteqdot": "≑", + "\\fallingdotseq": "≒", + "\\risingdotseq": "≓", + "\\coloneq": "≔", + "\\eqcirc": "≖", + "\\circeq": "≗", + "\\arceq": "≘", + "\\estimates": "≙", + "\\starequal": "≛", + "\\triangleq": "≜", + "\\eqdef": "≝", + "\\measeq": "≞", + "\\neq": "≠", + "\\equiv": "≡", + "\\not\\equiv": "≢", + "\\Equiv": "≣", + "\\leq": "≤", + "\\le": "≤", + "\\geq": "≥", + "\\leqq": "≦", + "\\geqq": "≧", + "\\lneqq": "≨", + "\\lvertneqq": "≨︀", + "\\gneqq": "≩", + "\\gvertneqq": "≩︀", + "\\ll": "≪", + "\\NotLessLess": "≪̸", + "\\gg": "≫", + "\\NotGreaterGreater": "≫̸", + "\\between": "≬", + "{\\not\\kern-0.3em\\times}": "≭", + "\\not<": "≮", + "\\not>": "≯", + "\\not\\leq": "≰", + "\\not\\geq": "≱", + "\\lessequivlnt": "≲", + "\\greaterequivlnt": "≳", + "\\lessgtr": "≶", + "\\gtrless": "≷", + "\\notlessgreater": "≸", + "\\notgreaterless": "≹", + "\\prec": "≺", + "\\succ": "≻", + "\\preccurlyeq": "≼", + "\\succcurlyeq": "≽", + "\\NotPrecedesTilde": "≾̸", + "\\NotSucceedsTilde": "≿̸", + "\\not\\prec": "⊀", + "\\not\\succ": "⊁", + "\\subset": "⊂", + "\\supset": "⊃", + "\\not\\subset": "⊄", + "\\not\\supset": "⊅", + "\\subseteq": "⊆", + "\\supseteq": "⊇", + "\\not\\subseteq": "⊈", + "\\not\\supseteq": "⊉", + "\\subsetneq": "⊊", + "\\varsubsetneqq": "⊊︀", + "\\supsetneq": "⊋", + "\\varsupsetneq": "⊋︀", + "\\cupleftarrow": "⊌", + "\\cupdot": "⊍", + "\\uplus": "⊎", + "\\sqsubset": "⊏", + "\\NotSquareSubset": "⊏̸", + "\\sqsupset": "⊐", + "\\NotSquareSuperset": "⊐̸", + "\\sqsubseteq": "⊑", + "\\sqsupseteq": "⊒", + "\\sqcap": "⊓", + "\\sqcup": "⊔", + "\\oplus": "⊕", + "\\ominus": "⊖", + "\\otimes": "⊗", + "\\oslash": "⊘", + "\\odot": "⊙", + "\\circledcirc": "⊚", + "\\circledast": "⊛", + "\\circledequal": "⊜", + "\\circleddash": "⊝", + "\\boxplus": "⊞", + "\\boxminus": "⊟", + "\\boxtimes": "⊠", + "\\boxdot": "⊡", + "\\vdash": "⊢", + "\\dashv": "⊣", + "\\top": "⊤", + "\\assert": "⊦", + "\\truestate": "⊧", + "\\forcesextra": "⊨", + "\\Vdash": "⊩", + "\\Vvdash": "⊪", + "\\VDash": "⊫", + "\\nvdash": "⊬", + "\\nvDash": "⊭", + "\\nVdash": "⊮", + "\\nVDash": "⊯", + "\\prurel": "⊰", + "\\scurel": "⊱", + "\\vartriangleleft": "⊲", + "\\vartriangleright": "⊳", + "\\trianglelefteq": "⊴", + "\\trianglerighteq": "⊵", + "\\original": "⊶", + "\\image": "⊷", + "\\multimap": "⊸", + "\\hermitconjmatrix": "⊹", + "\\intercal": "⊺", + "\\veebar": "⊻", + "\\barvee": "⊽", + "\\rightanglearc": "⊾", + "\\varlrtriangle": "⊿", + "\\bigcap": "⋂", + "\\bigcup": "⋃", + "\\diamond": "⋄", + "\\cdot": "⋅", + "\\star": "⋆", + "\\divideontimes": "⋇", + "\\bowtie": "⋈", + "\\ltimes": "⋉", + "\\rtimes": "⋊", + "\\leftthreetimes": "⋋", + "\\rightthreetimes": "⋌", + "\\backsimeq": "⋍", + "\\curlyvee": "⋎", + "\\curlywedge": "⋏", + "\\Subset": "⋐", + "\\Supset": "⋑", + "\\Cap": "⋒", + "\\Cup": "⋓", + "\\pitchfork": "⋔", + "\\hash": "⋕", + "\\lessdot": "⋖", + "\\gtrdot": "⋗", + "\\verymuchless": "⋘", + "\\verymuchgreater": "⋙", + "\\lesseqgtr": "⋚", + "\\gtreqless": "⋛", + "\\eqless": "⋜", + "\\eqgtr": "⋝", + "\\curlyeqprec": "⋞", + "\\curlyeqsucc": "⋟", + "\\npreceq": "⋠", + "\\nsucceq": "⋡", + "\\not\\sqsubseteq": "⋢", + "\\not\\sqsupseteq": "⋣", + "\\sqsubsetneq": "⋤", + "\\Elzsqspne": "⋥", + "\\lnsim": "⋦", + "\\gnsim": "⋧", + "\\precedesnotsimilar": "⋨", + "\\succnsim": "⋩", + "\\ntriangleleft": "⋪", + "\\ntriangleright": "⋫", + "\\ntrianglelefteq": "⋬", + "\\ntrianglerighteq": "⋭", + "\\vdots": "⋮", + "\\cdots": "⋯", + "\\upslopeellipsis": "⋰", + "\\downslopeellipsis": "⋱", + "\\disin": "⋲", + "\\varisins": "⋳", + "\\isins": "⋴", + "\\isindot": "⋵", + "\\barin": "⋶", + "\\isinobar": "⋷", + "\\isinvb": "⋸", + "\\isinE": "⋹", + "\\nisd": "⋺", + "\\varnis": "⋻", + "\\nis": "⋼", + "\\varniobar": "⋽", + "\\niobar": "⋾", + "\\bagmember": "⋿", + "\\diameter": "⌀", + "\\house": "⌂", + "\\barwedge": "⌅", + "\\varbarwedge": "⌅", + "\\perspcorrespond": "⌆", + "\\lceil": "⌈", + "\\rceil": "⌉", + "\\lfloor": "⌊", + "\\rfloor": "⌋", + "\\invneg": "⌐", + "\\wasylozenge": "⌑", + "\\profline": "⌒", + "\\profsurf": "⌓", + "\\recorder": "⌕", + "{\\mathchar\"2208}": "⌖", + "\\viewdata": "⌗", + "\\turnednot": "⌙", + "\\ulcorner": "⌜", + "\\urcorner": "⌝", + "\\llcorner": "⌞", + "\\lrcorner": "⌟", + "\\inttop": "⌠", + "\\intbottom": "⌡", + "\\frown": "⌢", + "\\smile": "⌣", + "\\varhexagonlrbonds": "⌬", + "\\conictaper": "⌲", + "\\topbot": "⌶", + "\\APLinv": "⌹", + "\\notslash": "⌿", + "\\notbackslash": "⍀", + "\\APLleftarrowbox": "⍇", + "\\APLrightarrowbox": "⍈", + "\\invdiameter": "⍉", + "\\APLuparrowbox": "⍐", + "\\APLboxupcaret": "⍓", + "\\APLdownarrowbox": "⍗", + "\\APLcomment": "⍝", + "\\APLinput": "⍞", + "\\APLlog": "⍟", + "\\APLboxquestion": "⍰", + "\\rangledownzigzagarrow": "⍼", + "\\hexagon": "⎔", + "\\lparenuend": "⎛", + "\\lparenextender": "⎜", + "\\lparenlend": "⎝", + "\\rparenuend": "⎞", + "\\rparenextender": "⎟", + "\\rparenlend": "⎠", + "\\lbrackuend": "⎡", + "\\lbrackextender": "⎢", + "\\Elzdlcorn": "⎣", + "\\rbrackuend": "⎤", + "\\rbrackextender": "⎥", + "\\rbracklend": "⎦", + "\\lbraceuend": "⎧", + "\\lbracemid": "⎨", + "\\lbracelend": "⎩", + "\\vbraceextender": "⎪", + "\\rbraceuend": "⎫", + "\\rbracemid": "⎬", + "\\rbracelend": "⎭", + "\\intextender": "⎮", + "\\harrowextender": "⎯", + "\\lmoustache": "⎰", + "\\rmoustache": "⎱", + "\\sumtop": "⎲", + "\\sumbottom": "⎳", + "\\overbracket": "⎴", + "\\underbracket": "⎵", + "\\bbrktbrk": "⎶", + "\\sqrtbottom": "⎷", + "\\lvboxline": "⎸", + "\\rvboxline": "⎹", + "\\varcarriagereturn": "⏎", + "\\overparen": "⏜", + "\\underparen": "⏝", + "\\overbrace": "⏞", + "\\underbrace": "⏟", + "\\obrbrak": "⏠", + "\\ubrbrak": "⏡", + "\\trapezium": "⏢", + "\\benzenr": "⏣", + "\\strns": "⏤", + "\\fltns": "⏥", + "\\accurrent": "⏦", + "\\elinters": "⏧", + "\\textvisiblespace": "␣", + "\\ding{172}": "①", + "\\ding{173}": "②", + "\\ding{174}": "③", + "\\ding{175}": "④", + "\\ding{176}": "⑤", + "\\ding{177}": "⑥", + "\\ding{178}": "⑦", + "\\ding{179}": "⑧", + "\\ding{180}": "⑨", + "\\ding{181}": "⑩", + "\\circledS": "Ⓢ", + "\\Elzdshfnc": "┆", + "\\Elzsqfnw": "┙", + "\\diagup": "╱", + "\\blockuphalf": "▀", + "\\blocklowhalf": "▄", + "\\blockfull": "█", + "\\blocklefthalf": "▌", + "\\blockrighthalf": "▐", + "\\blockqtrshaded": "░", + "\\blockhalfshaded": "▒", + "\\blockthreeqtrshaded": "▓", + "\\ding{110}": "■", + "\\mdlgblksquare": "■", + "\\square": "□", + "\\Box": "□", + "\\squoval": "▢", + "\\blackinwhitesquare": "▣", + "\\squarehfill": "▤", + "\\squarevfill": "▥", + "\\squarehvfill": "▦", + "\\squarenwsefill": "▧", + "\\squareneswfill": "▨", + "\\squarecrossfill": "▩", + "\\smwhtsquare": "▫", + "\\hrectangleblack": "▬", + "\\fbox{~~}": "▭", + "\\vrectangleblack": "▮", + "\\Elzvrecto": "▯", + "\\parallelogramblack": "▰", + "\\ding{115}": "▲", + "\\bigblacktriangleup": "▲", + "\\bigtriangleup": "△", + "\\blacktriangle": "▴", + "\\vartriangle": "▵", + "\\RHD": "▶", + "\\rhd": "▷", + "\\blacktriangleright": "▸", + "\\triangleright": "▹", + "\\blackpointerright": "►", + "\\whitepointerright": "▻", + "\\ding{116}": "▼", + "\\bigblacktriangledown": "▼", + "\\bigtriangledown": "▽", + "\\blacktriangledown": "▾", + "\\triangledown": "▿", + "\\LHD": "◀", + "\\lhd": "◁", + "\\blacktriangleleft": "◂", + "\\triangleleft": "◃", + "\\blackpointerleft": "◄", + "\\whitepointerleft": "◅", + "\\ding{117}": "◆", + "\\Diamondblack": "◆", + "\\Diamond": "◇", + "\\blackinwhitediamond": "◈", + "\\fisheye": "◉", + "\\lozenge": "◊", + "\\dottedcircle": "◌", + "\\circlevertfill": "◍", + "\\bullseye": "◎", + "\\ding{108}": "●", + "\\CIRCLE": "●", + "\\Elzcirfl": "◐", + "\\Elzcirfr": "◑", + "\\Elzcirfb": "◒", + "\\circletophalfblack": "◓", + "\\circleurquadblack": "◔", + "\\blackcircleulquadwhite": "◕", + "\\LEFTCIRCLE": "◖", + "\\ding{119}": "◗", + "\\RIGHTCIRCLE": "◗", + "\\Elzrvbull": "◘", + "\\inversewhitecircle": "◙", + "\\invwhiteupperhalfcircle": "◚", + "\\invwhitelowerhalfcircle": "◛", + "\\ularc": "◜", + "\\urarc": "◝", + "\\lrarc": "◞", + "\\llarc": "◟", + "\\topsemicircle": "◠", + "\\botsemicircle": "◡", + "\\lrblacktriangle": "◢", + "\\llblacktriangle": "◣", + "\\ulblacktriangle": "◤", + "\\urblacktriangle": "◥", + "\\smwhtcircle": "◦", + "\\Elzsqfl": "◧", + "\\Elzsqfr": "◨", + "\\squareulblack": "◩", + "\\Elzsqfse": "◪", + "\\boxbar": "◫", + "\\trianglecdot": "◬", + "\\triangleleftblack": "◭", + "\\trianglerightblack": "◮", + "\\bigcirc": "◯", + "\\squareulquad": "◰", + "\\squarellquad": "◱", + "\\squarelrquad": "◲", + "\\squareurquad": "◳", + "\\circleulquad": "◴", + "\\circlellquad": "◵", + "\\circlelrquad": "◶", + "\\circleurquad": "◷", + "\\ultriangle": "◸", + "\\urtriangle": "◹", + "\\lltriangle": "◺", + "\\mdsmwhtsquare": "◽", + "\\mdsmblksquare": "◾", + "\\lrtriangle": "◿", + "\\ding{72}": "★", + "\\bigstar": "★", + "\\ding{73}": "☆", + "\\bigwhitestar": "☆", + "\\Sun": "☉", + "\\ding{37}": "☎", + "\\Square": "☐", + "\\CheckedBox": "☑", + "\\XBox": "☒", + "\\steaming": "☕", + "\\ding{42}": "☛", + "\\ding{43}": "☞", + "\\pointright": "☞", + "\\skull": "☠", + "\\danger": "☡", + "\\radiation": "☢", + "\\biohazard": "☣", + "\\yinyang": "☯", + "\\frownie": "☹", + "\\smiley": "☺", + "\\blacksmiley": "☻", + "\\sun": "☼", + "\\rightmoon": "☽", + "\\leftmoon": "☾", + "\\mercury": "☿", + "\\venus": "♀", + "\\female": "♀", + "\\earth": "♁", + "\\male": "♂", + "\\jupiter": "♃", + "\\saturn": "♄", + "\\uranus": "♅", + "\\neptune": "♆", + "\\pluto": "♇", + "\\aries": "♈", + "\\taurus": "♉", + "\\gemini": "♊", + "\\cancer": "♋", + "\\leo": "♌", + "\\virgo": "♍", + "\\libra": "♎", + "\\scorpio": "♏", + "\\sagittarius": "♐", + "\\capricornus": "♑", + "\\aquarius": "♒", + "\\pisces": "♓", + "\\ding{171}": "♠", + "\\spadesuit": "♠", + "\\heartsuit": "♡", + "\\ding{168}": "♣", + "\\clubsuit": "♣", + "\\varspadesuit": "♤", + "\\ding{170}": "♥", + "\\varheartsuit": "♥", + "\\ding{169}": "♦", + "\\vardiamondsuit": "♦", + "\\varclubsuit": "♧", + "\\quarternote": "♩", + "\\eighthnote": "♪", + "\\twonotes": "♫", + "\\sixteenthnote": "♬", + "\\flat": "♭", + "\\natural": "♮", + "\\sharp": "♯", + "\\recycle": "♻", + "\\acidfree": "♾", + "\\dicei": "⚀", + "\\diceii": "⚁", + "\\diceiii": "⚂", + "\\diceiv": "⚃", + "\\dicev": "⚄", + "\\dicevi": "⚅", + "\\circledrightdot": "⚆", + "\\circledtwodots": "⚇", + "\\blackcircledrightdot": "⚈", + "\\blackcircledtwodots": "⚉", + "\\anchor": "⚓", + "\\swords": "⚔", + "\\warning": "⚠", + "\\Hermaphrodite": "⚥", + "\\medcirc": "⚪", + "\\medbullet": "⚫", + "\\mdsmwhtcircle": "⚬", + "\\neuter": "⚲", + "\\ding{33}": "✁", + "\\ding{34}": "✂", + "\\ding{35}": "✃", + "\\ding{36}": "✄", + "\\ding{38}": "✆", + "\\ding{39}": "✇", + "\\ding{40}": "✈", + "\\ding{41}": "✉", + "\\ding{44}": "✌", + "\\ding{45}": "✍", + "\\ding{46}": "✎", + "\\pencil": "✎", + "\\ding{47}": "✏", + "\\ding{48}": "✐", + "\\ding{49}": "✑", + "\\ding{50}": "✒", + "\\ding{51}": "✓", + "\\checkmark": "✓", + "\\ding{52}": "✔", + "\\ding{53}": "✕", + "\\ding{54}": "✖", + "\\ding{55}": "✗", + "\\ballotx": "✗", + "\\ding{56}": "✘", + "\\ding{57}": "✙", + "\\ding{58}": "✚", + "\\ding{59}": "✛", + "\\ding{60}": "✜", + "\\ding{61}": "✝", + "\\ding{62}": "✞", + "\\ding{63}": "✟", + "\\ding{64}": "✠", + "\\maltese": "✠", + "\\ding{65}": "✡", + "\\ding{66}": "✢", + "\\ding{67}": "✣", + "\\ding{68}": "✤", + "\\ding{69}": "✥", + "\\ding{70}": "✦", + "\\ding{71}": "✧", + "\\ding{74}": "✪", + "\\circledstar": "✪", + "\\ding{75}": "✫", + "\\ding{76}": "✬", + "\\ding{77}": "✭", + "\\ding{78}": "✮", + "\\ding{79}": "✯", + "\\ding{80}": "✰", + "\\ding{81}": "✱", + "\\ding{82}": "✲", + "\\ding{83}": "✳", + "\\ding{84}": "✴", + "\\ding{85}": "✵", + "\\ding{86}": "✶", + "\\varstar": "✶", + "\\ding{87}": "✷", + "\\ding{88}": "✸", + "\\ding{89}": "✹", + "\\ding{90}": "✺", + "\\ding{91}": "✻", + "\\ding{92}": "✼", + "\\ding{93}": "✽", + "\\dingasterisk": "✽", + "\\ding{94}": "✾", + "\\ding{95}": "✿", + "\\ding{96}": "❀", + "\\ding{97}": "❁", + "\\ding{98}": "❂", + "\\ding{99}": "❃", + "\\ding{100}": "❄", + "\\ding{101}": "❅", + "\\ding{102}": "❆", + "\\ding{103}": "❇", + "\\ding{104}": "❈", + "\\ding{105}": "❉", + "\\ding{106}": "❊", + "\\ding{107}": "❋", + "\\ding{109}": "❍", + "\\ding{111}": "❏", + "\\ding{112}": "❐", + "\\ding{113}": "❑", + "\\ding{114}": "❒", + "\\ding{118}": "❖", + "\\ding{120}": "❘", + "\\ding{121}": "❙", + "\\ding{122}": "❚", + "\\ding{123}": "❛", + "\\ding{124}": "❜", + "\\ding{125}": "❝", + "\\ding{126}": "❞", + "\\ding{161}": "❡", + "\\ding{162}": "❢", + "\\ding{163}": "❣", + "\\ding{164}": "❤", + "\\ding{165}": "❥", + "\\ding{166}": "❦", + "\\ding{167}": "❧", + "\\ding{182}": "❶", + "\\ding{183}": "❷", + "\\ding{184}": "❸", + "\\ding{185}": "❹", + "\\ding{186}": "❺", + "\\ding{187}": "❻", + "\\ding{188}": "❼", + "\\ding{189}": "❽", + "\\ding{190}": "❾", + "\\ding{191}": "❿", + "\\ding{192}": "➀", + "\\ding{193}": "➁", + "\\ding{194}": "➂", + "\\ding{195}": "➃", + "\\ding{196}": "➄", + "\\ding{197}": "➅", + "\\ding{198}": "➆", + "\\ding{199}": "➇", + "\\ding{200}": "➈", + "\\ding{201}": "➉", + "\\ding{202}": "➊", + "\\ding{203}": "➋", + "\\ding{204}": "➌", + "\\ding{205}": "➍", + "\\ding{206}": "➎", + "\\ding{207}": "➏", + "\\ding{208}": "➐", + "\\ding{209}": "➑", + "\\ding{210}": "➒", + "\\ding{211}": "➓", + "\\ding{212}": "➔", + "\\ding{216}": "➘", + "\\ding{217}": "➙", + "\\ding{218}": "➚", + "\\ding{219}": "➛", + "\\draftingarrow": "➛", + "\\ding{220}": "➜", + "\\ding{221}": "➝", + "\\ding{222}": "➞", + "\\ding{223}": "➟", + "\\ding{224}": "➠", + "\\ding{225}": "➡", + "\\ding{226}": "➢", + "\\arrowbullet": "➢", + "\\ding{227}": "➣", + "\\ding{228}": "➤", + "\\ding{229}": "➥", + "\\ding{230}": "➦", + "\\ding{231}": "➧", + "\\ding{232}": "➨", + "\\ding{233}": "➩", + "\\ding{234}": "➪", + "\\ding{235}": "➫", + "\\ding{236}": "➬", + "\\ding{237}": "➭", + "\\ding{238}": "➮", + "\\ding{239}": "➯", + "\\ding{241}": "➱", + "\\ding{242}": "➲", + "\\ding{243}": "➳", + "\\ding{244}": "➴", + "\\ding{245}": "➵", + "\\ding{246}": "➶", + "\\ding{247}": "➷", + "\\ding{248}": "➸", + "\\ding{249}": "➹", + "\\ding{250}": "➺", + "\\ding{251}": "➻", + "\\ding{252}": "➼", + "\\ding{253}": "➽", + "\\ding{254}": "➾", + "\\threedangle": "⟀", + "\\whiteinwhitetriangle": "⟁", + "\\perp": "⟂", + "\\subsetcirc": "⟃", + "\\supsetcirc": "⟄", + "\\Lbag": "⟅", + "\\Rbag": "⟆", + "\\veedot": "⟇", + "\\bsolhsub": "⟈", + "\\suphsol": "⟉", + "\\longdivision": "⟌", + "\\Diamonddot": "⟐", + "\\wedgedot": "⟑", + "\\upin": "⟒", + "\\pullback": "⟓", + "\\pushout": "⟔", + "\\leftouterjoin": "⟕", + "\\rightouterjoin": "⟖", + "\\fullouterjoin": "⟗", + "\\bigbot": "⟘", + "\\bigtop": "⟙", + "\\DashVDash": "⟚", + "\\dashVdash": "⟛", + "\\multimapinv": "⟜", + "\\vlongdash": "⟝", + "\\longdashv": "⟞", + "\\cirbot": "⟟", + "\\lozengeminus": "⟠", + "\\concavediamond": "⟡", + "\\concavediamondtickleft": "⟢", + "\\concavediamondtickright": "⟣", + "\\whitesquaretickleft": "⟤", + "\\whitesquaretickright": "⟥", + "\\llbracket": "⟦", + "\\rrbracket": "⟧", + "\\langle": "⟨", + "\\rangle": "⟩", + "\\lang": "⟪", + "\\rang": "⟫", + "\\Lbrbrak": "⟬", + "\\Rbrbrak": "⟭", + "\\lgroup": "⟮", + "\\rgroup": "⟯", + "\\UUparrow": "⟰", + "\\DDownarrow": "⟱", + "\\acwgapcirclearrow": "⟲", + "\\cwgapcirclearrow": "⟳", + "\\rightarrowonoplus": "⟴", + "\\longleftarrow": "⟵", + "\\longrightarrow": "⟶", + "\\longleftrightarrow": "⟷", + "\\Longleftarrow": "⟸", + "\\Longrightarrow": "⟹", + "\\Longleftrightarrow": "⟺", + "\\longmapsfrom": "⟻", + "\\longmapsto": "⟼", + "\\Longmapsfrom": "⟽", + "\\Longmapsto": "⟾", + "\\sim\\joinrel\\leadsto": "⟿", + "\\psur": "⤀", + "\\nVtwoheadrightarrow": "⤁", + "\\nvLeftarrow": "⤂", + "\\nvRightarrow": "⤃", + "\\nvLeftrightarrow": "⤄", + "\\Mapsfrom": "⤆", + "\\Mapsto": "⤇", + "\\downarrowbarred": "⤈", + "\\uparrowbarred": "⤉", + "\\Uuparrow": "⤊", + "\\Ddownarrow": "⤋", + "\\leftbkarrow": "⤌", + "\\rightbkarrow": "⤍", + "\\leftdbkarrow": "⤎", + "\\dbkarow": "⤏", + "\\drbkarow": "⤐", + "\\rightdotarrow": "⤑", + "\\UpArrowBar": "⤒", + "\\DownArrowBar": "⤓", + "\\pinj": "⤔", + "\\finj": "⤕", + "\\bij": "⤖", + "\\nvtwoheadrightarrowtail": "⤗", + "\\nVtwoheadrightarrowtail": "⤘", + "\\lefttail": "⤙", + "\\righttail": "⤚", + "\\leftdbltail": "⤛", + "\\rightdbltail": "⤜", + "\\diamondleftarrow": "⤝", + "\\rightarrowdiamond": "⤞", + "\\diamondleftarrowbar": "⤟", + "\\barrightarrowdiamond": "⤠", + "\\nwsearrow": "⤡", + "\\neswarrow": "⤢", + "\\rdiagovfdiag": "⤫", + "\\fdiagovrdiag": "⤬", + "\\seovnearrow": "⤭", + "\\neovsearrow": "⤮", + "\\fdiagovnearrow": "⤯", + "\\rdiagovsearrow": "⤰", + "\\neovnwarrow": "⤱", + "\\nwovnearrow": "⤲", + "\\uprightcurvearrow": "⤴", + "\\downrightcurvedarrow": "⤵", + "\\cwrightarcarrow": "⤸", + "\\acwleftarcarrow": "⤹", + "\\acwoverarcarrow": "⤺", + "\\acwunderarcarrow": "⤻", + "\\curvearrowrightminus": "⤼", + "\\curvearrowleftplus": "⤽", + "\\cwundercurvearrow": "⤾", + "\\ccwundercurvearrow": "⤿", + "\\Elolarr": "⥀", + "\\Elorarr": "⥁", + "\\ElzRlarr": "⥂", + "\\leftarrowshortrightarrow": "⥃", + "\\ElzrLarr": "⥄", + "\\rightarrowplus": "⥅", + "\\leftarrowplus": "⥆", + "\\Elzrarrx": "⥇", + "\\leftrightarrowcircle": "⥈", + "\\twoheaduparrowcircle": "⥉", + "\\leftrightharpoon": "⥊", + "\\rightleftharpoon": "⥋", + "\\updownharpoonrightleft": "⥌", + "\\updownharpoonleftright": "⥍", + "\\LeftRightVector": "⥎", + "\\RightUpDownVector": "⥏", + "\\DownLeftRightVector": "⥐", + "\\LeftUpDownVector": "⥑", + "\\LeftVectorBar": "⥒", + "\\RightVectorBar": "⥓", + "\\RightUpVectorBar": "⥔", + "\\RightDownVectorBar": "⥕", + "\\DownLeftVectorBar": "⥖", + "\\DownRightVectorBar": "⥗", + "\\LeftUpVectorBar": "⥘", + "\\LeftDownVectorBar": "⥙", + "\\LeftTeeVector": "⥚", + "\\RightTeeVector": "⥛", + "\\RightUpTeeVector": "⥜", + "\\RightDownTeeVector": "⥝", + "\\DownLeftTeeVector": "⥞", + "\\DownRightTeeVector": "⥟", + "\\LeftUpTeeVector": "⥠", + "\\LeftDownTeeVector": "⥡", + "\\leftleftharpoons": "⥢", + "\\upupharpoons": "⥣", + "\\rightrightharpoons": "⥤", + "\\downdownharpoons": "⥥", + "\\leftrightharpoonsup": "⥦", + "\\leftrightharpoonsdown": "⥧", + "\\rightleftharpoonsup": "⥨", + "\\rightleftharpoonsdown": "⥩", + "\\leftbarharpoon": "⥪", + "\\barleftharpoon": "⥫", + "\\rightbarharpoon": "⥬", + "\\barrightharpoon": "⥭", + "\\UpEquilibrium": "⥮", + "\\ReverseUpEquilibrium": "⥯", + "\\RoundImplies": "⥰", + "\\equalrightarrow": "⥱", + "\\similarrightarrow": "⥲", + "\\leftarrowsimilar": "⥳", + "\\rightarrowsimilar": "⥴", + "\\rightarrowapprox": "⥵", + "\\ltlarr": "⥶", + "\\leftarrowless": "⥷", + "\\gtrarr": "⥸", + "\\subrarr": "⥹", + "\\leftarrowsubset": "⥺", + "\\suplarr": "⥻", + "\\upfishtail": "⥾", + "\\downfishtail": "⥿", + "\\Elztfnc": "⦀", + "\\spot": "⦁", + "\\typecolon": "⦂", + "\\lBrace": "⦃", + "\\rBrace": "⦄", + "\\Elroang": "⦆", + "\\limg": "⦇", + "\\rimg": "⦈", + "\\lblot": "⦉", + "\\rblot": "⦊", + "\\lbrackubar": "⦋", + "\\rbrackubar": "⦌", + "\\lbrackultick": "⦍", + "\\rbracklrtick": "⦎", + "\\lbracklltick": "⦏", + "\\rbrackurtick": "⦐", + "\\langledot": "⦑", + "\\rangledot": "⦒", + "<\\kern-0.58em(": "⦓", + "\\Lparengtr": "⦕", + "\\Rparenless": "⦖", + "\\lblkbrbrak": "⦗", + "\\rblkbrbrak": "⦘", + "\\Elzddfnc": "⦙", + "\\vzigzag": "⦚", + "\\measuredangleleft": "⦛", + "\\Angle": "⦜", + "\\rightanglemdot": "⦝", + "\\angles": "⦞", + "\\angdnr": "⦟", + "\\Elzlpargt": "⦠", + "\\sphericalangleup": "⦡", + "\\turnangle": "⦢", + "\\revangle": "⦣", + "\\angleubar": "⦤", + "\\revangleubar": "⦥", + "\\wideangledown": "⦦", + "\\wideangleup": "⦧", + "\\measanglerutone": "⦨", + "\\measanglelutonw": "⦩", + "\\measanglerdtose": "⦪", + "\\measangleldtosw": "⦫", + "\\measangleurtone": "⦬", + "\\measangleultonw": "⦭", + "\\measangledrtose": "⦮", + "\\measangledltosw": "⦯", + "\\revemptyset": "⦰", + "\\emptysetobar": "⦱", + "\\emptysetocirc": "⦲", + "\\emptysetoarr": "⦳", + "\\emptysetoarrl": "⦴", + "\\circledparallel": "⦷", + "\\circledbslash": "⦸", + "\\operp": "⦹", + "\\obot": "⦺", + "\\olcross": "⦻", + "\\odotslashdot": "⦼", + "\\uparrowoncircle": "⦽", + "\\circledwhitebullet": "⦾", + "\\circledbullet": "⦿", + "\\circledless": "⧀", + "\\circledgtr": "⧁", + "\\cirscir": "⧂", + "\\cirE": "⧃", + "\\boxslash": "⧄", + "\\boxbslash": "⧅", + "\\boxast": "⧆", + "\\boxcircle": "⧇", + "\\boxbox": "⧈", + "\\boxonbox": "⧉", + "\\ElzLap": "⧊", + "\\Elzdefas": "⧋", + "\\triangles": "⧌", + "\\triangleserifs": "⧍", + "\\rtriltri": "⧎", + "\\LeftTriangleBar": "⧏", + "\\NotLeftTriangleBar": "⧏̸", + "\\RightTriangleBar": "⧐", + "\\NotRightTriangleBar": "⧐̸", + "\\lfbowtie": "⧑", + "\\rfbowtie": "⧒", + "\\fbowtie": "⧓", + "\\lftimes": "⧔", + "\\rftimes": "⧕", + "\\hourglass": "⧖", + "\\blackhourglass": "⧗", + "\\lvzigzag": "⧘", + "\\rvzigzag": "⧙", + "\\Lvzigzag": "⧚", + "\\Rvzigzag": "⧛", + "\\tieinfty": "⧝", + "\\nvinfty": "⧞", + "\\multimapboth": "⧟", + "\\laplac": "⧠", + "\\lrtriangleeq": "⧡", + "\\shuffle": "⧢", + "\\eparsl": "⧣", + "\\smeparsl": "⧤", + "\\eqvparsl": "⧥", + "\\gleichstark": "⧦", + "\\thermod": "⧧", + "\\downtriangleleftblack": "⧨", + "\\downtrianglerightblack": "⧩", + "\\blackdiamonddownarrow": "⧪", + "\\blacklozenge": "⧫", + "\\circledownarrow": "⧬", + "\\blackcircledownarrow": "⧭", + "\\errbarsquare": "⧮", + "\\errbarblacksquare": "⧯", + "\\errbardiamond": "⧰", + "\\errbarblackdiamond": "⧱", + "\\errbarcircle": "⧲", + "\\errbarblackcircle": "⧳", + "\\RuleDelayed": "⧴", + "\\dsol": "⧶", + "\\rsolbar": "⧷", + "\\xsol": "⧸", + "\\zhide": "⧹", + "\\doubleplus": "⧺", + "\\tripleplus": "⧻", + "\\lcurvyangle": "⧼", + "\\rcurvyangle": "⧽", + "\\tplus": "⧾", + "\\tminus": "⧿", + "\\bigodot": "⨀", + "\\bigoplus": "⨁", + "\\bigotimes": "⨂", + "\\bigcupdot": "⨃", + "\\Elxuplus": "⨄", + "\\ElzThr": "⨅", + "\\Elxsqcup": "⨆", + "\\ElzInf": "⨇", + "\\ElzSup": "⨈", + "\\varprod": "⨉", + "\\modtwosum": "⨊", + "\\sumint": "⨋", + "\\iiiint": "⨌", + "\\ElzCint": "⨍", + "\\intBar": "⨎", + "\\clockoint": "⨏", + "\\awint": "⨑", + "\\rppolint": "⨒", + "\\scpolint": "⨓", + "\\npolint": "⨔", + "\\pointint": "⨕", + "\\sqrint": "⨖", + "\\intlarhk": "⨗", + "\\intx": "⨘", + "\\intcap": "⨙", + "\\intcup": "⨚", + "\\upint": "⨛", + "\\lowint": "⨜", + "\\Join": "⨝", + "\\bigtriangleleft": "⨞", + "\\zcmp": "⨟", + "\\zpipe": "⨠", + "\\zproject": "⨡", + "\\ringplus": "⨢", + "\\plushat": "⨣", + "\\simplus": "⨤", + "\\plussim": "⨦", + "\\plussubtwo": "⨧", + "\\plustrif": "⨨", + "\\commaminus": "⨩", + "\\minusfdots": "⨫", + "\\minusrdots": "⨬", + "\\ElzTimes": "⨯", + "\\dottimes": "⨰", + "\\timesbar": "⨱", + "\\btimes": "⨲", + "\\smashtimes": "⨳", + "\\otimeshat": "⨶", + "\\Otimes": "⨷", + "\\odiv": "⨸", + "\\triangleplus": "⨹", + "\\triangleminus": "⨺", + "\\triangletimes": "⨻", + "\\intprodr": "⨽", + "\\fcmp": "⨾", + "\\amalg": "⨿", + "\\capdot": "⩀", + "\\uminus": "⩁", + "\\barcup": "⩂", + "\\barcap": "⩃", + "\\capwedge": "⩄", + "\\cupvee": "⩅", + "\\cupovercap": "⩆", + "\\capovercup": "⩇", + "\\cupbarcap": "⩈", + "\\capbarcup": "⩉", + "\\twocups": "⩊", + "\\twocaps": "⩋", + "\\closedvarcup": "⩌", + "\\closedvarcap": "⩍", + "\\Sqcap": "⩎", + "\\Sqcup": "⩏", + "\\closedvarcupsmashprod": "⩐", + "\\wedgeodot": "⩑", + "\\veeodot": "⩒", + "\\ElzAnd": "⩓", + "\\ElzOr": "⩔", + "\\ElOr": "⩖", + "\\bigslopedvee": "⩗", + "\\bigslopedwedge": "⩘", + "\\veeonwedge": "⩙", + "\\wedgemidvert": "⩚", + "\\veemidvert": "⩛", + "\\midbarwedge": "⩜", + "\\midbarvee": "⩝", + "\\Elzminhat": "⩟", + "\\wedgedoublebar": "⩠", + "\\varveebar": "⩡", + "\\doublebarvee": "⩢", + "\\dsub": "⩤", + "\\rsub": "⩥", + "\\eqdot": "⩦", + "\\dotequiv": "⩧", + "\\equivVert": "⩨", + "\\equivVvert": "⩩", + "\\dotsim": "⩪", + "\\simrdots": "⩫", + "\\simminussim": "⩬", + "\\congdot": "⩭", + "\\stackrel{*}{=}": "⩮", + "\\hatapprox": "⩯", + "\\approxeqq": "⩰", + "\\eqqplus": "⩱", + "\\pluseqq": "⩲", + "\\eqqsim": "⩳", + "\\Coloneqq": "⩴", + "\\Equal": "⩵", + "\\Same": "⩶", + "\\ddotseq": "⩷", + "\\equivDD": "⩸", + "\\ltcir": "⩹", + "\\gtcir": "⩺", + "\\ltquest": "⩻", + "\\gtquest": "⩼", + "\\leqslant": "⩽", + "\\nleqslant": "⩽̸", + "\\geqslant": "⩾", + "\\ngeqslant": "⩾̸", + "\\lesdot": "⩿", + "\\gesdot": "⪀", + "\\lesdoto": "⪁", + "\\gesdoto": "⪂", + "\\lesdotor": "⪃", + "\\gesdotol": "⪄", + "\\lessapprox": "⪅", + "\\gtrapprox": "⪆", + "\\lneq": "⪇", + "\\gneq": "⪈", + "\\lnapprox": "⪉", + "\\gnapprox": "⪊", + "\\lesseqqgtr": "⪋", + "\\gtreqqless": "⪌", + "\\lsime": "⪍", + "\\gsime": "⪎", + "\\lsimg": "⪏", + "\\gsiml": "⪐", + "\\lgE": "⪑", + "\\glE": "⪒", + "\\lesges": "⪓", + "\\gesles": "⪔", + "\\eqslantless": "⪕", + "\\eqslantgtr": "⪖", + "\\elsdot": "⪗", + "\\egsdot": "⪘", + "\\eqqless": "⪙", + "\\eqqgtr": "⪚", + "\\eqqslantless": "⪛", + "\\eqqslantgtr": "⪜", + "\\Pisymbol{ppi020}{117}": "⪝", + "\\Pisymbol{ppi020}{105}": "⪞", + "\\simlE": "⪟", + "\\simgE": "⪠", + "\\NestedLessLess": "⪡", + "\\NotNestedLessLess": "⪡̸", + "\\NestedGreaterGreater": "⪢", + "\\NotNestedGreaterGreater": "⪢̸", + "\\partialmeetcontraction": "⪣", + "\\glj": "⪤", + "\\gla": "⪥", + "\\leftslice": "⪦", + "\\rightslice": "⪧", + "\\lescc": "⪨", + "\\gescc": "⪩", + "\\smt": "⪪", + "\\lat": "⪫", + "\\smte": "⪬", + "\\late": "⪭", + "\\bumpeqq": "⪮", + "\\preceq": "⪯", + "\\not\\preceq": "⪯̸", + "\\succeq": "⪰", + "\\not\\succeq": "⪰̸", + "\\precneq": "⪱", + "\\succneq": "⪲", + "\\preceqq": "⪳", + "\\succeqq": "⪴", + "\\precneqq": "⪵", + "\\succneqq": "⪶", + "\\precapprox": "⪷", + "\\succapprox": "⪸", + "\\precnapprox": "⪹", + "\\succnapprox": "⪺", + "\\llcurly": "⪻", + "\\ggcurly": "⪼", + "\\subsetdot": "⪽", + "\\supsetdot": "⪾", + "\\subsetplus": "⪿", + "\\supsetplus": "⫀", + "\\submult": "⫁", + "\\supmult": "⫂", + "\\subedot": "⫃", + "\\supedot": "⫄", + "\\subseteqq": "⫅", + "\\nsubseteqq": "⫅̸", + "\\supseteqq": "⫆", + "\\nsupseteqq": "⫆̸", + "\\subsim": "⫇", + "\\supsim": "⫈", + "\\subsetapprox": "⫉", + "\\supsetapprox": "⫊", + "\\subsetneqq": "⫋", + "\\supsetneqq": "⫌", + "\\lsqhook": "⫍", + "\\rsqhook": "⫎", + "\\csub": "⫏", + "\\csup": "⫐", + "\\csube": "⫑", + "\\csupe": "⫒", + "\\subsup": "⫓", + "\\supsub": "⫔", + "\\subsub": "⫕", + "\\supsup": "⫖", + "\\suphsub": "⫗", + "\\supdsub": "⫘", + "\\forkv": "⫙", + "\\topfork": "⫚", + "\\mlcp": "⫛", + "\\forks": "⫝̸", + "\\forksnot": "⫝", + "\\shortlefttack": "⫞", + "\\shortdowntack": "⫟", + "\\shortuptack": "⫠", + "\\perps": "⫡", + "\\vDdash": "⫢", + "\\dashV": "⫣", + "\\Dashv": "⫤", + "\\DashV": "⫥", + "\\varVdash": "⫦", + "\\Barv": "⫧", + "\\vBar": "⫨", + "\\vBarv": "⫩", + "\\Top": "⫪", + "\\Not": "⫬", + "\\bNot": "⫭", + "\\revnmid": "⫮", + "\\cirmid": "⫯", + "\\midcir": "⫰", + "\\topcir": "⫱", + "\\nhpar": "⫲", + "\\parsim": "⫳", + "\\interleave": "⫴", + "\\nhVvert": "⫵", + "\\Elztdcol": "⫶", + "\\lllnest": "⫷", + "\\gggnest": "⫸", + "\\leqqslant": "⫹", + "\\geqqslant": "⫺", + "\\trslash": "⫻", + "\\biginterleave": "⫼", + "{{/}\\!\\!{/}}": "⫽", + "{\\rlap{\\textbackslash}{{/}\\!\\!{/}}}": "⫽⃥", + "\\talloblong": "⫾", + "\\bigtalloblong": "⫿", + "\\squaretopblack": "⬒", + "\\squarebotblack": "⬓", + "\\squareurblack": "⬔", + "\\squarellblack": "⬕", + "\\diamondleftblack": "⬖", + "\\diamondrightblack": "⬗", + "\\diamondtopblack": "⬘", + "\\diamondbotblack": "⬙", + "\\dottedsquare": "⬚", + "\\blacksquare": "⬛", + "\\vysmblksquare": "⬝", + "\\vysmwhtsquare": "⬞", + "\\pentagonblack": "⬟", + "\\pentagon": "⬠", + "\\varhexagon": "⬡", + "\\varhexagonblack": "⬢", + "\\hexagonblack": "⬣", + "\\lgblkcircle": "⬤", + "\\mdblkdiamond": "⬥", + "\\mdwhtdiamond": "⬦", + "\\mdblklozenge": "⬧", + "\\mdwhtlozenge": "⬨", + "\\smblkdiamond": "⬩", + "\\smblklozenge": "⬪", + "\\smwhtlozenge": "⬫", + "\\blkhorzoval": "⬬", + "\\whthorzoval": "⬭", + "\\blkvertoval": "⬮", + "\\whtvertoval": "⬯", + "\\circleonleftarrow": "⬰", + "\\leftthreearrows": "⬱", + "\\leftarrowonoplus": "⬲", + "\\longleftsquigarrow": "⬳", + "\\nvtwoheadleftarrow": "⬴", + "\\nVtwoheadleftarrow": "⬵", + "\\twoheadmapsfrom": "⬶", + "\\twoheadleftdbkarrow": "⬷", + "\\leftdotarrow": "⬸", + "\\nvleftarrowtail": "⬹", + "\\nVleftarrowtail": "⬺", + "\\twoheadleftarrowtail": "⬻", + "\\nvtwoheadleftarrowtail": "⬼", + "\\nVtwoheadleftarrowtail": "⬽", + "\\leftarrowx": "⬾", + "\\leftcurvedarrow": "⬿", + "\\equalleftarrow": "⭀", + "\\bsimilarleftarrow": "⭁", + "\\leftarrowbackapprox": "⭂", + "\\rightarrowgtr": "⭃", + "\\rightarrowsupset": "⭄", + "\\LLeftarrow": "⭅", + "\\RRightarrow": "⭆", + "\\bsimilarrightarrow": "⭇", + "\\rightarrowbackapprox": "⭈", + "\\similarleftarrow": "⭉", + "\\leftarrowapprox": "⭊", + "\\leftarrowbsimilar": "⭋", + "\\rightarrowbsimilar": "⭌", + "\\medwhitestar": "⭐", + "\\medblackstar": "⭑", + "\\smwhitestar": "⭒", + "\\rightpentagonblack": "⭓", + "\\rightpentagon": "⭔", + "\\postalmark": "〒", + "\\lbrbrak": "〔", + "\\rbrbrak": "〕", + "\\openbracketleft": "〚", + "\\openbracketright": "〛", + "\\hzigzag": "〰", + "\\dbend": "�", + "\\mathbf{A}": "𝐀", + "\\mathbf{B}": "𝐁", + "\\mathbf{C}": "𝐂", + "\\mathbf{D}": "𝐃", + "\\mathbf{E}": "𝐄", + "\\mathbf{F}": "𝐅", + "\\mathbf{G}": "𝐆", + "\\mathbf{H}": "𝐇", + "\\mathbf{I}": "𝐈", + "\\mathbf{J}": "𝐉", + "\\mathbf{K}": "𝐊", + "\\mathbf{L}": "𝐋", + "\\mathbf{M}": "𝐌", + "\\mathbf{N}": "𝐍", + "\\mathbf{O}": "𝐎", + "\\mathbf{P}": "𝐏", + "\\mathbf{Q}": "𝐐", + "\\mathbf{R}": "𝐑", + "\\mathbf{S}": "𝐒", + "\\mathbf{T}": "𝐓", + "\\mathbf{U}": "𝐔", + "\\mathbf{V}": "𝐕", + "\\mathbf{W}": "𝐖", + "\\mathbf{X}": "𝐗", + "\\mathbf{Y}": "𝐘", + "\\mathbf{Z}": "𝐙", + "\\mathbf{a}": "𝐚", + "\\mathbf{b}": "𝐛", + "\\mathbf{c}": "𝐜", + "\\mathbf{d}": "𝐝", + "\\mathbf{e}": "𝐞", + "\\mathbf{f}": "𝐟", + "\\mathbf{g}": "𝐠", + "\\mathbf{h}": "𝐡", + "\\mathbf{i}": "𝐢", + "\\mathbf{j}": "𝐣", + "\\mathbf{k}": "𝐤", + "\\mathbf{l}": "𝐥", + "\\mathbf{m}": "𝐦", + "\\mathbf{n}": "𝐧", + "\\mathbf{o}": "𝐨", + "\\mathbf{p}": "𝐩", + "\\mathbf{q}": "𝐪", + "\\mathbf{r}": "𝐫", + "\\mathbf{s}": "𝐬", + "\\mathbf{t}": "𝐭", + "\\mathbf{u}": "𝐮", + "\\mathbf{v}": "𝐯", + "\\mathbf{w}": "𝐰", + "\\mathbf{x}": "𝐱", + "\\mathbf{y}": "𝐲", + "\\mathbf{z}": "𝐳", + "\\mathsl{A}": "𝐴", + "\\mathsl{B}": "𝐵", + "\\mathsl{C}": "𝐶", + "\\mathsl{D}": "𝐷", + "\\mathsl{E}": "𝐸", + "\\mathsl{F}": "𝐹", + "\\mathsl{G}": "𝐺", + "\\mathsl{H}": "𝐻", + "\\mathsl{I}": "𝐼", + "\\mathsl{J}": "𝐽", + "\\mathsl{K}": "𝐾", + "\\mathsl{L}": "𝐿", + "\\mathsl{M}": "𝑀", + "\\mathsl{N}": "𝑁", + "\\mathsl{O}": "𝑂", + "\\mathsl{P}": "𝑃", + "\\mathsl{Q}": "𝑄", + "\\mathsl{R}": "𝑅", + "\\mathsl{S}": "𝑆", + "\\mathsl{T}": "𝑇", + "\\mathsl{U}": "𝑈", + "\\mathsl{V}": "𝑉", + "\\mathsl{W}": "𝑊", + "\\mathsl{X}": "𝑋", + "\\mathsl{Y}": "𝑌", + "\\mathsl{Z}": "𝑍", + "\\mathsl{a}": "𝑎", + "\\mathsl{b}": "𝑏", + "\\mathsl{c}": "𝑐", + "\\mathsl{d}": "𝑑", + "\\mathsl{e}": "𝑒", + "\\mathsl{f}": "𝑓", + "\\mathsl{g}": "𝑔", + "\\mathsl{i}": "𝑖", + "\\mathsl{j}": "𝑗", + "\\mathsl{k}": "𝑘", + "\\mathsl{l}": "𝑙", + "\\mathsl{m}": "𝑚", + "\\mathsl{n}": "𝑛", + "\\mathsl{o}": "𝑜", + "\\mathsl{p}": "𝑝", + "\\mathsl{q}": "𝑞", + "\\mathsl{r}": "𝑟", + "\\mathsl{s}": "𝑠", + "\\mathsl{t}": "𝑡", + "\\mathsl{u}": "𝑢", + "\\mathsl{v}": "𝑣", + "\\mathsl{w}": "𝑤", + "\\mathsl{x}": "𝑥", + "\\mathsl{y}": "𝑦", + "\\mathsl{z}": "𝑧", + "\\mathbit{A}": "𝑨", + "\\mathbit{B}": "𝑩", + "\\mathbit{C}": "𝑪", + "\\mathbit{D}": "𝑫", + "\\mathbit{E}": "𝑬", + "\\mathbit{F}": "𝑭", + "\\mathbit{G}": "𝑮", + "\\mathbit{H}": "𝑯", + "\\mathbit{I}": "𝑰", + "\\mathbit{J}": "𝑱", + "\\mathbit{K}": "𝑲", + "\\mathbit{L}": "𝑳", + "\\mathbit{M}": "𝑴", + "\\mathbit{N}": "𝑵", + "\\mathbit{O}": "𝑶", + "\\mathbit{P}": "𝑷", + "\\mathbit{Q}": "𝑸", + "\\mathbit{R}": "𝑹", + "\\mathbit{S}": "𝑺", + "\\mathbit{T}": "𝑻", + "\\mathbit{U}": "𝑼", + "\\mathbit{V}": "𝑽", + "\\mathbit{W}": "𝑾", + "\\mathbit{X}": "𝑿", + "\\mathbit{Y}": "𝒀", + "\\mathbit{Z}": "𝒁", + "\\mathbit{a}": "𝒂", + "\\mathbit{b}": "𝒃", + "\\mathbit{c}": "𝒄", + "\\mathbit{d}": "𝒅", + "\\mathbit{e}": "𝒆", + "\\mathbit{f}": "𝒇", + "\\mathbit{g}": "𝒈", + "\\mathbit{h}": "𝒉", + "\\mathbit{i}": "𝒊", + "\\mathbit{j}": "𝒋", + "\\mathbit{k}": "𝒌", + "\\mathbit{l}": "𝒍", + "\\mathbit{m}": "𝒎", + "\\mathbit{n}": "𝒏", + "\\mathbit{o}": "𝒐", + "\\mathbit{p}": "𝒑", + "\\mathbit{q}": "𝒒", + "\\mathbit{r}": "𝒓", + "\\mathbit{s}": "𝒔", + "\\mathbit{t}": "𝒕", + "\\mathbit{u}": "𝒖", + "\\mathbit{v}": "𝒗", + "\\mathbit{w}": "𝒘", + "\\mathbit{x}": "𝒙", + "\\mathbit{y}": "𝒚", + "\\mathbit{z}": "𝒛", + "\\mathscr{A}": "𝒜", + "\\mathscr{C}": "𝒞", + "\\mathscr{D}": "𝒟", + "\\mathscr{G}": "𝒢", + "\\mathscr{J}": "𝒥", + "\\mathscr{K}": "𝒦", + "\\mathscr{N}": "𝒩", + "\\mathscr{O}": "𝒪", + "\\mathscr{P}": "𝒫", + "\\mathscr{Q}": "𝒬", + "\\mathscr{S}": "𝒮", + "\\mathscr{T}": "𝒯", + "\\mathscr{U}": "𝒰", + "\\mathscr{V}": "𝒱", + "\\mathscr{W}": "𝒲", + "\\mathscr{X}": "𝒳", + "\\mathscr{Y}": "𝒴", + "\\mathscr{Z}": "𝒵", + "\\mathscr{a}": "𝒶", + "\\mathscr{b}": "𝒷", + "\\mathscr{c}": "𝒸", + "\\mathscr{d}": "𝒹", + "\\mathscr{f}": "𝒻", + "\\mathscr{h}": "𝒽", + "\\mathscr{i}": "𝒾", + "\\mathscr{j}": "𝒿", + "\\mathscr{k}": "𝓀", + "\\mathscr{m}": "𝓂", + "\\mathscr{n}": "𝓃", + "\\mathscr{p}": "𝓅", + "\\mathscr{q}": "𝓆", + "\\mathscr{r}": "𝓇", + "\\mathscr{s}": "𝓈", + "\\mathscr{t}": "𝓉", + "\\mathscr{u}": "𝓊", + "\\mathscr{v}": "𝓋", + "\\mathscr{w}": "𝓌", + "\\mathscr{x}": "𝓍", + "\\mathscr{y}": "𝓎", + "\\mathscr{z}": "𝓏", + "\\mathmit{A}": "𝓐", + "\\mathmit{B}": "𝓑", + "\\mathmit{C}": "𝓒", + "\\mathmit{D}": "𝓓", + "\\mathmit{E}": "𝓔", + "\\mathmit{F}": "𝓕", + "\\mathmit{G}": "𝓖", + "\\mathmit{H}": "𝓗", + "\\mathmit{I}": "𝓘", + "\\mathmit{J}": "𝓙", + "\\mathmit{K}": "𝓚", + "\\mathmit{L}": "𝓛", + "\\mathmit{M}": "𝓜", + "\\mathmit{N}": "𝓝", + "\\mathmit{O}": "𝓞", + "\\mathmit{P}": "𝓟", + "\\mathmit{Q}": "𝓠", + "\\mathmit{R}": "𝓡", + "\\mathmit{S}": "𝓢", + "\\mathmit{T}": "𝓣", + "\\mathmit{U}": "𝓤", + "\\mathmit{V}": "𝓥", + "\\mathmit{W}": "𝓦", + "\\mathmit{X}": "𝓧", + "\\mathmit{Y}": "𝓨", + "\\mathmit{Z}": "𝓩", + "\\mathmit{a}": "𝓪", + "\\mathmit{b}": "𝓫", + "\\mathmit{c}": "𝓬", + "\\mathmit{d}": "𝓭", + "\\mathmit{e}": "𝓮", + "\\mathmit{f}": "𝓯", + "\\mathmit{g}": "𝓰", + "\\mathmit{h}": "𝓱", + "\\mathmit{i}": "𝓲", + "\\mathmit{j}": "𝓳", + "\\mathmit{k}": "𝓴", + "\\mathmit{l}": "𝓵", + "\\mathmit{m}": "𝓶", + "\\mathmit{n}": "𝓷", + "\\mathmit{o}": "𝓸", + "\\mathmit{p}": "𝓹", + "\\mathmit{q}": "𝓺", + "\\mathmit{r}": "𝓻", + "\\mathmit{s}": "𝓼", + "\\mathmit{t}": "𝓽", + "\\mathmit{u}": "𝓾", + "\\mathmit{v}": "𝓿", + "\\mathmit{w}": "𝔀", + "\\mathmit{x}": "𝔁", + "\\mathmit{y}": "𝔂", + "\\mathmit{z}": "𝔃", + "\\mathfrak{A}": "𝔄", + "\\mathfrak{B}": "𝔅", + "\\mathfrak{D}": "𝔇", + "\\mathfrak{E}": "𝔈", + "\\mathfrak{F}": "𝔉", + "\\mathfrak{G}": "𝔊", + "\\mathfrak{J}": "𝔍", + "\\mathfrak{K}": "𝔎", + "\\mathfrak{L}": "𝔏", + "\\mathfrak{M}": "𝔐", + "\\mathfrak{N}": "𝔑", + "\\mathfrak{O}": "𝔒", + "\\mathfrak{P}": "𝔓", + "\\mathfrak{Q}": "𝔔", + "\\mathfrak{S}": "𝔖", + "\\mathfrak{T}": "𝔗", + "\\mathfrak{U}": "𝔘", + "\\mathfrak{V}": "𝔙", + "\\mathfrak{W}": "𝔚", + "\\mathfrak{X}": "𝔛", + "\\mathfrak{Y}": "𝔜", + "\\mathfrak{a}": "𝔞", + "\\mathfrak{b}": "𝔟", + "\\mathfrak{c}": "𝔠", + "\\mathfrak{d}": "𝔡", + "\\mathfrak{e}": "𝔢", + "\\mathfrak{f}": "𝔣", + "\\mathfrak{g}": "𝔤", + "\\mathfrak{h}": "𝔥", + "\\mathfrak{i}": "𝔦", + "\\mathfrak{j}": "𝔧", + "\\mathfrak{k}": "𝔨", + "\\mathfrak{l}": "𝔩", + "\\mathfrak{m}": "𝔪", + "\\mathfrak{n}": "𝔫", + "\\mathfrak{o}": "𝔬", + "\\mathfrak{p}": "𝔭", + "\\mathfrak{q}": "𝔮", + "\\mathfrak{r}": "𝔯", + "\\mathfrak{s}": "𝔰", + "\\mathfrak{t}": "𝔱", + "\\mathfrak{u}": "𝔲", + "\\mathfrak{v}": "𝔳", + "\\mathfrak{w}": "𝔴", + "\\mathfrak{x}": "𝔵", + "\\mathfrak{y}": "𝔶", + "\\mathfrak{z}": "𝔷", + "\\mathbb{A}": "𝔸", + "\\mathbb{B}": "𝔹", + "\\mathbb{D}": "𝔻", + "\\mathbb{E}": "𝔼", + "\\mathbb{F}": "𝔽", + "\\mathbb{G}": "𝔾", + "\\mathbb{I}": "𝕀", + "\\mathbb{J}": "𝕁", + "\\mathbb{K}": "𝕂", + "\\mathbb{L}": "𝕃", + "\\mathbb{M}": "𝕄", + "\\mathbb{O}": "𝕆", + "\\mathbb{S}": "𝕊", + "\\mathbb{T}": "𝕋", + "\\mathbb{U}": "𝕌", + "\\mathbb{V}": "𝕍", + "\\mathbb{W}": "𝕎", + "\\mathbb{X}": "𝕏", + "\\mathbb{Y}": "𝕐", + "\\mathbb{a}": "𝕒", + "\\mathbb{b}": "𝕓", + "\\mathbb{c}": "𝕔", + "\\mathbb{d}": "𝕕", + "\\mathbb{e}": "𝕖", + "\\mathbb{f}": "𝕗", + "\\mathbb{g}": "𝕘", + "\\mathbb{h}": "𝕙", + "\\mathbb{i}": "𝕚", + "\\mathbb{j}": "𝕛", + "\\mathbb{k}": "𝕜", + "\\mathbb{l}": "𝕝", + "\\mathbb{m}": "𝕞", + "\\mathbb{n}": "𝕟", + "\\mathbb{o}": "𝕠", + "\\mathbb{p}": "𝕡", + "\\mathbb{q}": "𝕢", + "\\mathbb{r}": "𝕣", + "\\mathbb{s}": "𝕤", + "\\mathbb{t}": "𝕥", + "\\mathbb{u}": "𝕦", + "\\mathbb{v}": "𝕧", + "\\mathbb{w}": "𝕨", + "\\mathbb{x}": "𝕩", + "\\mathbb{y}": "𝕪", + "\\mathbb{z}": "𝕫", + "\\mathslbb{A}": "𝕬", + "\\mathslbb{B}": "𝕭", + "\\mathslbb{C}": "𝕮", + "\\mathslbb{D}": "𝕯", + "\\mathslbb{E}": "𝕰", + "\\mathslbb{F}": "𝕱", + "\\mathslbb{G}": "𝕲", + "\\mathslbb{H}": "𝕳", + "\\mathslbb{I}": "𝕴", + "\\mathslbb{J}": "𝕵", + "\\mathslbb{K}": "𝕶", + "\\mathslbb{L}": "𝕷", + "\\mathslbb{M}": "𝕸", + "\\mathslbb{N}": "𝕹", + "\\mathslbb{O}": "𝕺", + "\\mathslbb{P}": "𝕻", + "\\mathslbb{Q}": "𝕼", + "\\mathslbb{R}": "𝕽", + "\\mathslbb{S}": "𝕾", + "\\mathslbb{T}": "𝕿", + "\\mathslbb{U}": "𝖀", + "\\mathslbb{V}": "𝖁", + "\\mathslbb{W}": "𝖂", + "\\mathslbb{X}": "𝖃", + "\\mathslbb{Y}": "𝖄", + "\\mathslbb{Z}": "𝖅", + "\\mathslbb{a}": "𝖆", + "\\mathslbb{b}": "𝖇", + "\\mathslbb{c}": "𝖈", + "\\mathslbb{d}": "𝖉", + "\\mathslbb{e}": "𝖊", + "\\mathslbb{f}": "𝖋", + "\\mathslbb{g}": "𝖌", + "\\mathslbb{h}": "𝖍", + "\\mathslbb{i}": "𝖎", + "\\mathslbb{j}": "𝖏", + "\\mathslbb{k}": "𝖐", + "\\mathslbb{l}": "𝖑", + "\\mathslbb{m}": "𝖒", + "\\mathslbb{n}": "𝖓", + "\\mathslbb{o}": "𝖔", + "\\mathslbb{p}": "𝖕", + "\\mathslbb{q}": "𝖖", + "\\mathslbb{r}": "𝖗", + "\\mathslbb{s}": "𝖘", + "\\mathslbb{t}": "𝖙", + "\\mathslbb{u}": "𝖚", + "\\mathslbb{v}": "𝖛", + "\\mathslbb{w}": "𝖜", + "\\mathslbb{x}": "𝖝", + "\\mathslbb{y}": "𝖞", + "\\mathslbb{z}": "𝖟", + "\\mathsf{A}": "𝖠", + "\\mathsf{B}": "𝖡", + "\\mathsf{C}": "𝖢", + "\\mathsf{D}": "𝖣", + "\\mathsf{E}": "𝖤", + "\\mathsf{F}": "𝖥", + "\\mathsf{G}": "𝖦", + "\\mathsf{H}": "𝖧", + "\\mathsf{I}": "𝖨", + "\\mathsf{J}": "𝖩", + "\\mathsf{K}": "𝖪", + "\\mathsf{L}": "𝖫", + "\\mathsf{M}": "𝖬", + "\\mathsf{N}": "𝖭", + "\\mathsf{O}": "𝖮", + "\\mathsf{P}": "𝖯", + "\\mathsf{Q}": "𝖰", + "\\mathsf{R}": "𝖱", + "\\mathsf{S}": "𝖲", + "\\mathsf{T}": "𝖳", + "\\mathsf{U}": "𝖴", + "\\mathsf{V}": "𝖵", + "\\mathsf{W}": "𝖶", + "\\mathsf{X}": "𝖷", + "\\mathsf{Y}": "𝖸", + "\\mathsf{Z}": "𝖹", + "\\mathsf{a}": "𝖺", + "\\mathsf{b}": "𝖻", + "\\mathsf{c}": "𝖼", + "\\mathsf{d}": "𝖽", + "\\mathsf{e}": "𝖾", + "\\mathsf{f}": "𝖿", + "\\mathsf{g}": "𝗀", + "\\mathsf{h}": "𝗁", + "\\mathsf{i}": "𝗂", + "\\mathsf{j}": "𝗃", + "\\mathsf{k}": "𝗄", + "\\mathsf{l}": "𝗅", + "\\mathsf{m}": "𝗆", + "\\mathsf{n}": "𝗇", + "\\mathsf{o}": "𝗈", + "\\mathsf{p}": "𝗉", + "\\mathsf{q}": "𝗊", + "\\mathsf{r}": "𝗋", + "\\mathsf{s}": "𝗌", + "\\mathsf{t}": "𝗍", + "\\mathsf{u}": "𝗎", + "\\mathsf{v}": "𝗏", + "\\mathsf{w}": "𝗐", + "\\mathsf{x}": "𝗑", + "\\mathsf{y}": "𝗒", + "\\mathsf{z}": "𝗓", + "\\mathsfbf{A}": "𝗔", + "\\mathsfbf{B}": "𝗕", + "\\mathsfbf{C}": "𝗖", + "\\mathsfbf{D}": "𝗗", + "\\mathsfbf{E}": "𝗘", + "\\mathsfbf{F}": "𝗙", + "\\mathsfbf{G}": "𝗚", + "\\mathsfbf{H}": "𝗛", + "\\mathsfbf{I}": "𝗜", + "\\mathsfbf{J}": "𝗝", + "\\mathsfbf{K}": "𝗞", + "\\mathsfbf{L}": "𝗟", + "\\mathsfbf{M}": "𝗠", + "\\mathsfbf{N}": "𝗡", + "\\mathsfbf{O}": "𝗢", + "\\mathsfbf{P}": "𝗣", + "\\mathsfbf{Q}": "𝗤", + "\\mathsfbf{R}": "𝗥", + "\\mathsfbf{S}": "𝗦", + "\\mathsfbf{T}": "𝗧", + "\\mathsfbf{U}": "𝗨", + "\\mathsfbf{V}": "𝗩", + "\\mathsfbf{W}": "𝗪", + "\\mathsfbf{X}": "𝗫", + "\\mathsfbf{Y}": "𝗬", + "\\mathsfbf{Z}": "𝗭", + "\\mathsfbf{a}": "𝗮", + "\\mathsfbf{b}": "𝗯", + "\\mathsfbf{c}": "𝗰", + "\\mathsfbf{d}": "𝗱", + "\\mathsfbf{e}": "𝗲", + "\\mathsfbf{f}": "𝗳", + "\\mathsfbf{g}": "𝗴", + "\\mathsfbf{h}": "𝗵", + "\\mathsfbf{i}": "𝗶", + "\\mathsfbf{j}": "𝗷", + "\\mathsfbf{k}": "𝗸", + "\\mathsfbf{l}": "𝗹", + "\\mathsfbf{m}": "𝗺", + "\\mathsfbf{n}": "𝗻", + "\\mathsfbf{o}": "𝗼", + "\\mathsfbf{p}": "𝗽", + "\\mathsfbf{q}": "𝗾", + "\\mathsfbf{r}": "𝗿", + "\\mathsfbf{s}": "𝘀", + "\\mathsfbf{t}": "𝘁", + "\\mathsfbf{u}": "𝘂", + "\\mathsfbf{v}": "𝘃", + "\\mathsfbf{w}": "𝘄", + "\\mathsfbf{x}": "𝘅", + "\\mathsfbf{y}": "𝘆", + "\\mathsfbf{z}": "𝘇", + "\\mathsfsl{A}": "𝘈", + "\\mathsfsl{B}": "𝘉", + "\\mathsfsl{C}": "𝘊", + "\\mathsfsl{D}": "𝘋", + "\\mathsfsl{E}": "𝘌", + "\\mathsfsl{F}": "𝘍", + "\\mathsfsl{G}": "𝘎", + "\\mathsfsl{H}": "𝘏", + "\\mathsfsl{I}": "𝘐", + "\\mathsfsl{J}": "𝘑", + "\\mathsfsl{K}": "𝘒", + "\\mathsfsl{L}": "𝘓", + "\\mathsfsl{M}": "𝘔", + "\\mathsfsl{N}": "𝘕", + "\\mathsfsl{O}": "𝘖", + "\\mathsfsl{P}": "𝘗", + "\\mathsfsl{Q}": "𝘘", + "\\mathsfsl{R}": "𝘙", + "\\mathsfsl{S}": "𝘚", + "\\mathsfsl{T}": "𝘛", + "\\mathsfsl{U}": "𝘜", + "\\mathsfsl{V}": "𝘝", + "\\mathsfsl{W}": "𝘞", + "\\mathsfsl{X}": "𝘟", + "\\mathsfsl{Y}": "𝘠", + "\\mathsfsl{Z}": "𝘡", + "\\mathsfsl{a}": "𝘢", + "\\mathsfsl{b}": "𝘣", + "\\mathsfsl{c}": "𝘤", + "\\mathsfsl{d}": "𝘥", + "\\mathsfsl{e}": "𝘦", + "\\mathsfsl{f}": "𝘧", + "\\mathsfsl{g}": "𝘨", + "\\mathsfsl{h}": "𝘩", + "\\mathsfsl{i}": "𝘪", + "\\mathsfsl{j}": "𝘫", + "\\mathsfsl{k}": "𝘬", + "\\mathsfsl{l}": "𝘭", + "\\mathsfsl{m}": "𝘮", + "\\mathsfsl{n}": "𝘯", + "\\mathsfsl{o}": "𝘰", + "\\mathsfsl{p}": "𝘱", + "\\mathsfsl{q}": "𝘲", + "\\mathsfsl{r}": "𝘳", + "\\mathsfsl{s}": "𝘴", + "\\mathsfsl{t}": "𝘵", + "\\mathsfsl{u}": "𝘶", + "\\mathsfsl{v}": "𝘷", + "\\mathsfsl{w}": "𝘸", + "\\mathsfsl{x}": "𝘹", + "\\mathsfsl{y}": "𝘺", + "\\mathsfsl{z}": "𝘻", + "\\mathsfbfsl{A}": "𝘼", + "\\mathsfbfsl{B}": "𝘽", + "\\mathsfbfsl{C}": "𝘾", + "\\mathsfbfsl{D}": "𝘿", + "\\mathsfbfsl{E}": "𝙀", + "\\mathsfbfsl{F}": "𝙁", + "\\mathsfbfsl{G}": "𝙂", + "\\mathsfbfsl{H}": "𝙃", + "\\mathsfbfsl{I}": "𝙄", + "\\mathsfbfsl{J}": "𝙅", + "\\mathsfbfsl{K}": "𝙆", + "\\mathsfbfsl{L}": "𝙇", + "\\mathsfbfsl{M}": "𝙈", + "\\mathsfbfsl{N}": "𝙉", + "\\mathsfbfsl{O}": "𝙊", + "\\mathsfbfsl{P}": "𝙋", + "\\mathsfbfsl{Q}": "𝙌", + "\\mathsfbfsl{R}": "𝙍", + "\\mathsfbfsl{S}": "𝙎", + "\\mathsfbfsl{T}": "𝙏", + "\\mathsfbfsl{U}": "𝙐", + "\\mathsfbfsl{V}": "𝙑", + "\\mathsfbfsl{W}": "𝙒", + "\\mathsfbfsl{X}": "𝙓", + "\\mathsfbfsl{Y}": "𝙔", + "\\mathsfbfsl{Z}": "𝙕", + "\\mathsfbfsl{a}": "𝙖", + "\\mathsfbfsl{b}": "𝙗", + "\\mathsfbfsl{c}": "𝙘", + "\\mathsfbfsl{d}": "𝙙", + "\\mathsfbfsl{e}": "𝙚", + "\\mathsfbfsl{f}": "𝙛", + "\\mathsfbfsl{g}": "𝙜", + "\\mathsfbfsl{h}": "𝙝", + "\\mathsfbfsl{i}": "𝙞", + "\\mathsfbfsl{j}": "𝙟", + "\\mathsfbfsl{k}": "𝙠", + "\\mathsfbfsl{l}": "𝙡", + "\\mathsfbfsl{m}": "𝙢", + "\\mathsfbfsl{n}": "𝙣", + "\\mathsfbfsl{o}": "𝙤", + "\\mathsfbfsl{p}": "𝙥", + "\\mathsfbfsl{q}": "𝙦", + "\\mathsfbfsl{r}": "𝙧", + "\\mathsfbfsl{s}": "𝙨", + "\\mathsfbfsl{t}": "𝙩", + "\\mathsfbfsl{u}": "𝙪", + "\\mathsfbfsl{v}": "𝙫", + "\\mathsfbfsl{w}": "𝙬", + "\\mathsfbfsl{x}": "𝙭", + "\\mathsfbfsl{y}": "𝙮", + "\\mathsfbfsl{z}": "𝙯", + "\\mathtt{A}": "𝙰", + "\\mathtt{B}": "𝙱", + "\\mathtt{C}": "𝙲", + "\\mathtt{D}": "𝙳", + "\\mathtt{E}": "𝙴", + "\\mathtt{F}": "𝙵", + "\\mathtt{G}": "𝙶", + "\\mathtt{H}": "𝙷", + "\\mathtt{I}": "𝙸", + "\\mathtt{J}": "𝙹", + "\\mathtt{K}": "𝙺", + "\\mathtt{L}": "𝙻", + "\\mathtt{M}": "𝙼", + "\\mathtt{N}": "𝙽", + "\\mathtt{O}": "𝙾", + "\\mathtt{P}": "𝙿", + "\\mathtt{Q}": "𝚀", + "\\mathtt{R}": "𝚁", + "\\mathtt{S}": "𝚂", + "\\mathtt{T}": "𝚃", + "\\mathtt{U}": "𝚄", + "\\mathtt{V}": "𝚅", + "\\mathtt{W}": "𝚆", + "\\mathtt{X}": "𝚇", + "\\mathtt{Y}": "𝚈", + "\\mathtt{Z}": "𝚉", + "\\mathtt{a}": "𝚊", + "\\mathtt{b}": "𝚋", + "\\mathtt{c}": "𝚌", + "\\mathtt{d}": "𝚍", + "\\mathtt{e}": "𝚎", + "\\mathtt{f}": "𝚏", + "\\mathtt{g}": "𝚐", + "\\mathtt{h}": "𝚑", + "\\mathtt{i}": "𝚒", + "\\mathtt{j}": "𝚓", + "\\mathtt{k}": "𝚔", + "\\mathtt{l}": "𝚕", + "\\mathtt{m}": "𝚖", + "\\mathtt{n}": "𝚗", + "\\mathtt{o}": "𝚘", + "\\mathtt{p}": "𝚙", + "\\mathtt{q}": "𝚚", + "\\mathtt{r}": "𝚛", + "\\mathtt{s}": "𝚜", + "\\mathtt{t}": "𝚝", + "\\mathtt{u}": "𝚞", + "\\mathtt{v}": "𝚟", + "\\mathtt{w}": "𝚠", + "\\mathtt{x}": "𝚡", + "\\mathtt{y}": "𝚢", + "\\mathtt{z}": "𝚣", + "\\mathbf{\\Gamma}": "𝚪", + "\\mathbf{\\Delta}": "𝚫", + "\\mathbf{\\Theta}": "𝚯", + "\\mathbf{\\Lambda}": "𝚲", + "\\mathbf{\\Xi}": "𝚵", + "\\mathbf{\\Pi}": "𝚷", + "\\mathbf{\\vartheta}": "𝚹", + "\\mathbf{\\Sigma}": "𝚺", + "\\mathbf{\\Upsilon}": "𝚼", + "\\mathbf{\\Phi}": "𝚽", + "\\mathbf{\\Psi}": "𝚿", + "\\mathbf{\\Omega}": "𝛀", + "\\mathbf{\\nabla}": "𝛁", + "\\mathbf{\\alpha}": "𝛂", + "\\mathbf{\\beta}": "𝛃", + "\\mathbf{\\gamma}": "𝛄", + "\\mathbf{\\delta}": "𝛅", + "\\mathbf{\\epsilon}": "𝛆", + "\\mathbf{\\zeta}": "𝛇", + "\\mathbf{\\eta}": "𝛈", + "\\mathbf{\\theta}": "𝛉", + "\\mathbf{\\lambda}": "𝛌", + "\\mathbf{\\xi}": "𝛏", + "\\mathbf{\\pi}": "𝛑", + "\\mathbf{\\varsigma}": "𝛓", + "\\mathbf{\\sigma}": "𝛔", + "\\mathbf{\\upsilon}": "𝛖", + "\\mathbf{\\phi}": "𝛗", + "\\mathbf{\\psi}": "𝛙", + "\\mathbf{\\omega}": "𝛚", + "\\mathbf{\\varkappa}": "𝛞", + "\\mathbf{\\varrho}": "𝛠", + "\\mathbf{\\varpi}": "𝛡", + "\\mathsl{\\Gamma}": "𝛤", + "\\mathsl{\\Delta}": "𝛥", + "\\mathsl{\\Lambda}": "𝛬", + "\\mathsl{\\Xi}": "𝛯", + "\\mathsl{\\Pi}": "𝛱", + "\\mathsl{\\Theta}": "𝛳", + "\\mathsl{\\Sigma}": "𝛴", + "\\mathsl{\\Upsilon}": "𝛶", + "\\mathsl{\\Phi}": "𝛷", + "\\mathsl{\\Psi}": "𝛹", + "\\mathsl{\\Omega}": "𝛺", + "\\mathsl{\\nabla}": "𝛻", + "\\mathsl{\\gamma}": "𝛾", + "\\mathsl{\\delta}": "𝛿", + "\\mathsl{\\theta}": "𝜃", + "\\mathsl{\\lambda}": "𝜆", + "\\mu": "𝜇", + "\\mathsl{\\xi}": "𝜉", + "\\mathsl{\\pi}": "𝜋", + "\\mathsl{\\varsigma}": "𝜍", + "\\mathsl{\\sigma}": "𝜎", + "\\mathsl{\\upsilon}": "𝜐", + "\\mathsl{\\varphi}": "𝜑", + "\\mathsl{\\psi}": "𝜓", + "\\mathsl{\\omega}": "𝜔", + "\\mathsl{\\vartheta}": "𝜗", + "\\mathsl{\\varkappa}": "𝜘", + "\\mathsl{\\phi}": "𝜙", + "\\mathsl{\\varrho}": "𝜚", + "\\mathsl{\\varpi}": "𝜛", + "\\mathbit{\\Gamma}": "𝜞", + "\\mathbit{\\Delta}": "𝜟", + "\\mathbit{\\Theta}": "𝜣", + "\\mathbit{\\Lambda}": "𝜦", + "\\mathbit{\\Xi}": "𝜩", + "\\mathbit{\\Pi}": "𝜫", + "\\mathbit{\\Sigma}": "𝜮", + "\\mathbit{\\Upsilon}": "𝜰", + "\\mathbit{\\Phi}": "𝜱", + "\\mathbit{\\Psi}": "𝜳", + "\\mathbit{\\Omega}": "𝜴", + "\\mathbit{\\nabla}": "𝜵", + "\\mathbit{\\alpha}": "𝜶", + "\\mathbit{\\beta}": "𝜷", + "\\mathbit{\\gamma}": "𝜸", + "\\mathbit{\\delta}": "𝜹", + "\\mathbit{\\epsilon}": "𝜺", + "\\mathbit{\\zeta}": "𝜻", + "\\mathbit{\\eta}": "𝜼", + "\\mathbit{\\theta}": "𝜽", + "\\mathbit{\\imath}": "𝜾", + "\\mathbit{\\kappa}": "𝜿", + "\\mathbit{\\lambda}": "𝝀", + "\\mathbit{\\xi}": "𝝃", + "\\mathbit{\\pi}": "𝝅", + "\\mathbit{\\rho}": "𝝆", + "\\mathbit{\\varsigma}": "𝝇", + "\\mathbit{\\sigma}": "𝝈", + "\\mathbit{\\tau}": "𝝉", + "\\mathbit{\\upsilon}": "𝝊", + "\\mathbit{\\varphi}": "𝝋", + "\\mathbit{\\chi}": "𝝌", + "\\mathbit{\\psi}": "𝝍", + "\\mathbit{\\omega}": "𝝎", + "\\mathbit{\\vartheta}": "𝝑", + "\\mathbit{\\varkappa}": "𝝒", + "\\mathbit{\\phi}": "𝝓", + "\\mathbit{\\varrho}": "𝝔", + "\\mathbit{\\varpi}": "𝝕", + "\\mathsfbf{\\Gamma}": "𝝘", + "\\mathsfbf{\\Delta}": "𝝙", + "\\mathsfbf{\\Theta}": "𝝝", + "\\mathsfbf{\\Lambda}": "𝝠", + "\\mathsfbf{\\Xi}": "𝝣", + "\\mathsfbf{\\Pi}": "𝝥", + "\\mathsfbf{\\Sigma}": "𝝨", + "\\mathsfbf{\\Upsilon}": "𝝪", + "\\mathsfbf{\\Phi}": "𝝫", + "\\mathsfbf{\\Psi}": "𝝭", + "\\mathsfbf{\\Omega}": "𝝮", + "\\mathsfbf{\\nabla}": "𝝯", + "\\mathsfbf{\\alpha}": "𝝰", + "\\mathsfbf{\\beta}": "𝝱", + "\\mathsfbf{\\gamma}": "𝝲", + "\\mathsfbf{\\delta}": "𝝳", + "\\mathsfbf{\\varepsilon}": "𝝴", + "\\mathsfbf{\\zeta}": "𝝵", + "\\mathsfbf{\\eta}": "𝝶", + "\\mathsfbf{\\theta}": "𝝷", + "\\mathsfbf{\\imath}": "𝝸", + "\\mathsfbf{\\kappa}": "𝝹", + "\\mathsfbf{\\lambda}": "𝝺", + "\\mathsfbf{\\xi}": "𝝽", + "\\mathsfbf{\\pi}": "𝝿", + "\\mathsfbf{\\rho}": "𝞀", + "\\mathsfbf{\\varsigma}": "𝞁", + "\\mathsfbf{\\sigma}": "𝞂", + "\\mathsfbf{\\tau}": "𝞃", + "\\mathsfbf{\\upsilon}": "𝞄", + "\\mathsfbf{\\varphi}": "𝞅", + "\\mathsfbf{\\chi}": "𝞆", + "\\mathsfbf{\\psi}": "𝞇", + "\\mathsfbf{\\omega}": "𝞈", + "\\mathsfbf{\\vartheta}": "𝞋", + "\\mathsfbf{\\varkappa}": "𝞌", + "\\mathsfbf{\\phi}": "𝞍", + "\\mathsfbf{\\varrho}": "𝞎", + "\\mathsfbf{\\varpi}": "𝞏", + "\\mathsfbfsl{\\Gamma}": "𝞒", + "\\mathsfbfsl{\\Delta}": "𝞓", + "\\mathsfbfsl{\\Theta}": "𝞗", + "\\mathsfbfsl{\\Lambda}": "𝞚", + "\\mathsfbfsl{\\Xi}": "𝞝", + "\\mathsfbfsl{\\Pi}": "𝞟", + "\\mathsfbfsl{\\Sigma}": "𝞢", + "\\mathsfbfsl{\\Upsilon}": "𝞤", + "\\mathsfbfsl{\\Phi}": "𝞥", + "\\mathsfbfsl{\\Psi}": "𝞧", + "\\mathsfbfsl{\\Omega}": "𝞨", + "\\mathsfbfsl{\\nabla}": "𝞩", + "\\mathsfbfsl{\\alpha}": "𝞪", + "\\mathsfbfsl{\\beta}": "𝞫", + "\\mathsfbfsl{\\gamma}": "𝞬", + "\\mathsfbfsl{\\delta}": "𝞭", + "\\mathsfbfsl{\\varepsilon}": "𝞮", + "\\mathsfbfsl{\\zeta}": "𝞯", + "\\mathsfbfsl{\\eta}": "𝞰", + "\\mathsfbfsl{\\theta}": "𝞱", + "\\mathsfbfsl{\\imath}": "𝞲", + "\\mathsfbfsl{\\kappa}": "𝞳", + "\\mathsfbfsl{\\lambda}": "𝞴", + "\\mathsfbfsl{\\xi}": "𝞷", + "\\mathsfbfsl{\\pi}": "𝞹", + "\\mathsfbfsl{\\rho}": "𝞺", + "\\mathsfbfsl{\\varsigma}": "𝞻", + "\\mathsfbfsl{\\sigma}": "𝞼", + "\\mathsfbfsl{\\tau}": "𝞽", + "\\mathsfbfsl{\\upsilon}": "𝞾", + "\\mathsfbfsl{\\varphi}": "𝞿", + "\\mathsfbfsl{\\chi}": "𝟀", + "\\mathsfbfsl{\\psi}": "𝟁", + "\\mathsfbfsl{\\omega}": "𝟂", + "\\mathsfbfsl{\\vartheta}": "𝟅", + "\\mathsfbfsl{\\varkappa}": "𝟆", + "\\mathsfbfsl{\\phi}": "𝟇", + "\\mathsfbfsl{\\varrho}": "𝟈", + "\\mathsfbfsl{\\varpi}": "𝟉", + "\\mbfDigamma": "𝟊", + "\\mbfdigamma": "𝟋", + "\\mathbf{0}": "𝟎", + "\\mathbf{1}": "𝟏", + "\\mathbf{2}": "𝟐", + "\\mathbf{3}": "𝟑", + "\\mathbf{4}": "𝟒", + "\\mathbf{5}": "𝟓", + "\\mathbf{6}": "𝟔", + "\\mathbf{7}": "𝟕", + "\\mathbf{8}": "𝟖", + "\\mathbf{9}": "𝟗", + "\\mathbb{0}": "𝟘", + "\\mathbb{1}": "𝟙", + "\\mathbb{2}": "𝟚", + "\\mathbb{3}": "𝟛", + "\\mathbb{4}": "𝟜", + "\\mathbb{5}": "𝟝", + "\\mathbb{6}": "𝟞", + "\\mathbb{7}": "𝟟", + "\\mathbb{8}": "𝟠", + "\\mathbb{9}": "𝟡", + "\\mathsf{0}": "𝟢", + "\\mathsf{1}": "𝟣", + "\\mathsf{2}": "𝟤", + "\\mathsf{3}": "𝟥", + "\\mathsf{4}": "𝟦", + "\\mathsf{5}": "𝟧", + "\\mathsf{6}": "𝟨", + "\\mathsf{7}": "𝟩", + "\\mathsf{8}": "𝟪", + "\\mathsf{9}": "𝟫", + "\\mathsfbf{0}": "𝟬", + "\\mathsfbf{1}": "𝟭", + "\\mathsfbf{2}": "𝟮", + "\\mathsfbf{3}": "𝟯", + "\\mathsfbf{4}": "𝟰", + "\\mathsfbf{5}": "𝟱", + "\\mathsfbf{6}": "𝟲", + "\\mathsfbf{7}": "𝟳", + "\\mathsfbf{8}": "𝟴", + "\\mathsfbf{9}": "𝟵", + "\\mathtt{0}": "𝟶", + "\\mathtt{1}": "𝟷", + "\\mathtt{2}": "𝟸", + "\\mathtt{3}": "𝟹", + "\\mathtt{4}": "𝟺", + "\\mathtt{5}": "𝟻", + "\\mathtt{6}": "𝟼", + "\\mathtt{7}": "𝟽", + "\\mathtt{8}": "𝟾", + "\\mathtt{9}": "𝟿" +}; + +var commands = [ + "acute", + "bar", + "breve", + "c", + "d", + "ddot", + "dot", + "grave", + "hat", + "k", + "mathring", + "overline", + "r", + "textacutemacron", + "textacutewedge", + "textadvancing", + "textbrevemacron", + "textcircumdot", + "textcorner", + "textdotacute", + "textdotbreve", + "textdoublegrave", + "textdoublevbaraccent", + "textgravedot", + "textgravemacron", + "textinvsubbridge", + "textlowering", + "textovercross", + "textraising", + "textretracting", + "textringmacron", + "textseagull", + "textsubarch", + "textsubbar", + "textsubbridge", + "textsubgrave", + "textsublhalfring", + "textsubplus", + "textsubrhalfring", + "textsubring", + "textsubsquare", + "textsubtilde", + "textsubumlaut", + "textsubwedge", + "textsuperimposetilde", + "textsyllabic", + "texttildedot", + "textvbaraccent", + "tilde", + "u", + "underbar", + "v" +]; +var tolatex = { + "̀": { + command: "`", + mode: "text" + }, + "̀̄": { + command: "textgravemacron", + mode: "text" + }, + "̀̇": { + command: "textgravedot", + mode: "text" + }, + "́": { + command: "'", + mode: "text" + }, + "́̄": { + command: "textacutemacron", + mode: "text" + }, + "́̇": { + command: "textdotacute", + mode: "text" + }, + "́̌": { + command: "textacutewedge", + mode: "text" + }, + "̂": { + command: "^", + mode: "text" + }, + "̂̇": { + command: "textcircumdot", + mode: "text" + }, + "̃": { + command: "~", + mode: "text" + }, + "̃̇": { + command: "texttildedot", + mode: "text" + }, + "̄": { + command: "=", + mode: "text" + }, + "̄̀": { + command: "textgravemacron", + mode: "text" + }, + "̄́": { + command: "textacutemacron", + mode: "text" + }, + "̄̆": { + command: "textbrevemacron", + mode: "text" + }, + "̄̊": { + command: "textringmacron", + mode: "text" + }, + "̅": { + command: "overline", + mode: "math" + }, + "̆": { + command: "u", + mode: "text" + }, + "̆̄": { + command: "textbrevemacron", + mode: "text" + }, + "̆̇": { + command: "textdotbreve", + mode: "text" + }, + "̇": { + command: ".", + mode: "text" + }, + "̇̀": { + command: "textgravedot", + mode: "text" + }, + "̇́": { + command: "textdotacute", + mode: "text" + }, + "̇̂": { + command: "textcircumdot", + mode: "text" + }, + "̇̃": { + command: "texttildedot", + mode: "text" + }, + "̇̆": { + command: "textdotbreve", + mode: "text" + }, + "̈": { + command: "\"", + mode: "text" + }, + "̊": { + command: "r", + mode: "text" + }, + "̊̄": { + command: "textringmacron", + mode: "text" + }, + "̋": { + command: "H", + mode: "text" + }, + "̌": { + command: "v", + mode: "text" + }, + "̌́": { + command: "textacutewedge", + mode: "text" + }, + "̍": { + command: "textvbaraccent", + mode: "text" + }, + "̎": { + command: "textdoublevbaraccent", + mode: "text" + }, + "̏": { + command: "textdoublegrave", + mode: "text" + }, + "̐": { + command: "textdotbreve", + mode: "text" + }, + "̖": { + command: "textsubgrave", + mode: "text" + }, + "̘": { + command: "textadvancing", + mode: "text" + }, + "̙": { + command: "textretracting", + mode: "text" + }, + "̚": { + command: "textcorner", + mode: "text" + }, + "̜": { + command: "textsublhalfring", + mode: "text" + }, + "̝": { + command: "textraising", + mode: "text" + }, + "̞": { + command: "textlowering", + mode: "text" + }, + "̟": { + command: "textsubplus", + mode: "text" + }, + "̣": { + command: "d", + mode: "text" + }, + "̤": { + command: "textsubumlaut", + mode: "text" + }, + "̥": { + command: "textsubring", + mode: "text" + }, + "̧": { + command: "c", + mode: "text" + }, + "̨": { + command: "k", + mode: "text" + }, + "̩": { + command: "textsyllabic", + mode: "text" + }, + "̪": { + command: "textsubbridge", + mode: "text" + }, + "̬": { + command: "textsubwedge", + mode: "text" + }, + "̯": { + command: "textsubarch", + mode: "text" + }, + "̰": { + command: "textsubtilde", + mode: "text" + }, + "̱": { + command: "textsubbar", + mode: "text" + }, + "̴": { + command: "textsuperimposetilde", + mode: "text" + }, + "̹": { + command: "textsubrhalfring", + mode: "text" + }, + "̺": { + command: "textinvsubbridge", + mode: "text" + }, + "̻": { + command: "textsubsquare", + mode: "text" + }, + "̼": { + command: "textseagull", + mode: "text" + }, + "̽": { + command: "textovercross", + mode: "text" + } +}; +var tounicode = { + "\"": "̈", + "'": "́", + ".": "̇", + "=": "̄", + H: "̋", + "^": "̂", + "`": "̀", + acute: "́", + bar: "̄", + breve: "̆", + c: "̧", + d: "̣", + ddot: "̈", + dot: "̇", + grave: "̀", + hat: "̂", + k: "̨", + mathring: "̊", + overline: "̅", + r: "̊", + textacutemacron: "̄́", + textacutewedge: "̌́", + textadvancing: "̘", + textbrevemacron: "̄̆", + textcircumdot: "̇̂", + textcorner: "̚", + textdotacute: "́̇", + textdotbreve: "̐", + textdoublegrave: "̏", + textdoublevbaraccent: "̎", + textgravedot: "̇̀", + textgravemacron: "̀̄", + textinvsubbridge: "̺", + textlowering: "̞", + textovercross: "̽", + textraising: "̝", + textretracting: "̙", + textringmacron: "̄̊", + textseagull: "̼", + textsubarch: "̯", + textsubbar: "̱", + textsubbridge: "̪", + textsubgrave: "̖", + textsublhalfring: "̜", + textsubplus: "̟", + textsubrhalfring: "̹", + textsubring: "̥", + textsubsquare: "̻", + textsubtilde: "̰", + textsubumlaut: "̤", + textsubwedge: "̬", + textsuperimposetilde: "̴", + textsyllabic: "̩", + texttildedot: "̇̃", + textvbaraccent: "̍", + tilde: "̃", + u: "̆", + underbar: "̱", + v: "̌", + "~": "̃" +}; +var require$$4 = { + commands: commands, + tolatex: tolatex, + tounicode: tounicode +}; + +var unicode2latex = { + ascii: require$$0$1, + ascii_bibtex_creator: require$$1, + unicode: require$$2, + latex: require$$3, + diacritics: require$$4, +}; + +var categories = [ + { + 'name': 'C', + 'alias': 'Other', + 'isBmpLast': true, + 'bmp': '\0-\x1F\x7F-\x9F\xAD\u0378\u0379\u0380-\u0383\u038B\u038D\u03A2\u0530\u0557\u0558\u058B\u058C\u0590\u05C8-\u05CF\u05EB-\u05EE\u05F5-\u0605\u061C\u061D\u06DD\u070E\u070F\u074B\u074C\u07B2-\u07BF\u07FB\u07FC\u082E\u082F\u083F\u085C\u085D\u085F\u086B-\u089F\u08B5\u08C8-\u08D2\u08E2\u0984\u098D\u098E\u0991\u0992\u09A9\u09B1\u09B3-\u09B5\u09BA\u09BB\u09C5\u09C6\u09C9\u09CA\u09CF-\u09D6\u09D8-\u09DB\u09DE\u09E4\u09E5\u09FF\u0A00\u0A04\u0A0B-\u0A0E\u0A11\u0A12\u0A29\u0A31\u0A34\u0A37\u0A3A\u0A3B\u0A3D\u0A43-\u0A46\u0A49\u0A4A\u0A4E-\u0A50\u0A52-\u0A58\u0A5D\u0A5F-\u0A65\u0A77-\u0A80\u0A84\u0A8E\u0A92\u0AA9\u0AB1\u0AB4\u0ABA\u0ABB\u0AC6\u0ACA\u0ACE\u0ACF\u0AD1-\u0ADF\u0AE4\u0AE5\u0AF2-\u0AF8\u0B00\u0B04\u0B0D\u0B0E\u0B11\u0B12\u0B29\u0B31\u0B34\u0B3A\u0B3B\u0B45\u0B46\u0B49\u0B4A\u0B4E-\u0B54\u0B58-\u0B5B\u0B5E\u0B64\u0B65\u0B78-\u0B81\u0B84\u0B8B-\u0B8D\u0B91\u0B96-\u0B98\u0B9B\u0B9D\u0BA0-\u0BA2\u0BA5-\u0BA7\u0BAB-\u0BAD\u0BBA-\u0BBD\u0BC3-\u0BC5\u0BC9\u0BCE\u0BCF\u0BD1-\u0BD6\u0BD8-\u0BE5\u0BFB-\u0BFF\u0C0D\u0C11\u0C29\u0C3A-\u0C3C\u0C45\u0C49\u0C4E-\u0C54\u0C57\u0C5B-\u0C5F\u0C64\u0C65\u0C70-\u0C76\u0C8D\u0C91\u0CA9\u0CB4\u0CBA\u0CBB\u0CC5\u0CC9\u0CCE-\u0CD4\u0CD7-\u0CDD\u0CDF\u0CE4\u0CE5\u0CF0\u0CF3-\u0CFF\u0D0D\u0D11\u0D45\u0D49\u0D50-\u0D53\u0D64\u0D65\u0D80\u0D84\u0D97-\u0D99\u0DB2\u0DBC\u0DBE\u0DBF\u0DC7-\u0DC9\u0DCB-\u0DCE\u0DD5\u0DD7\u0DE0-\u0DE5\u0DF0\u0DF1\u0DF5-\u0E00\u0E3B-\u0E3E\u0E5C-\u0E80\u0E83\u0E85\u0E8B\u0EA4\u0EA6\u0EBE\u0EBF\u0EC5\u0EC7\u0ECE\u0ECF\u0EDA\u0EDB\u0EE0-\u0EFF\u0F48\u0F6D-\u0F70\u0F98\u0FBD\u0FCD\u0FDB-\u0FFF\u10C6\u10C8-\u10CC\u10CE\u10CF\u1249\u124E\u124F\u1257\u1259\u125E\u125F\u1289\u128E\u128F\u12B1\u12B6\u12B7\u12BF\u12C1\u12C6\u12C7\u12D7\u1311\u1316\u1317\u135B\u135C\u137D-\u137F\u139A-\u139F\u13F6\u13F7\u13FE\u13FF\u169D-\u169F\u16F9-\u16FF\u170D\u1715-\u171F\u1737-\u173F\u1754-\u175F\u176D\u1771\u1774-\u177F\u17DE\u17DF\u17EA-\u17EF\u17FA-\u17FF\u180E\u180F\u181A-\u181F\u1879-\u187F\u18AB-\u18AF\u18F6-\u18FF\u191F\u192C-\u192F\u193C-\u193F\u1941-\u1943\u196E\u196F\u1975-\u197F\u19AC-\u19AF\u19CA-\u19CF\u19DB-\u19DD\u1A1C\u1A1D\u1A5F\u1A7D\u1A7E\u1A8A-\u1A8F\u1A9A-\u1A9F\u1AAE\u1AAF\u1AC1-\u1AFF\u1B4C-\u1B4F\u1B7D-\u1B7F\u1BF4-\u1BFB\u1C38-\u1C3A\u1C4A-\u1C4C\u1C89-\u1C8F\u1CBB\u1CBC\u1CC8-\u1CCF\u1CFB-\u1CFF\u1DFA\u1F16\u1F17\u1F1E\u1F1F\u1F46\u1F47\u1F4E\u1F4F\u1F58\u1F5A\u1F5C\u1F5E\u1F7E\u1F7F\u1FB5\u1FC5\u1FD4\u1FD5\u1FDC\u1FF0\u1FF1\u1FF5\u1FFF\u200B-\u200F\u202A-\u202E\u2060-\u206F\u2072\u2073\u208F\u209D-\u209F\u20C0-\u20CF\u20F1-\u20FF\u218C-\u218F\u2427-\u243F\u244B-\u245F\u2B74\u2B75\u2B96\u2C2F\u2C5F\u2CF4-\u2CF8\u2D26\u2D28-\u2D2C\u2D2E\u2D2F\u2D68-\u2D6E\u2D71-\u2D7E\u2D97-\u2D9F\u2DA7\u2DAF\u2DB7\u2DBF\u2DC7\u2DCF\u2DD7\u2DDF\u2E53-\u2E7F\u2E9A\u2EF4-\u2EFF\u2FD6-\u2FEF\u2FFC-\u2FFF\u3040\u3097\u3098\u3100-\u3104\u3130\u318F\u31E4-\u31EF\u321F\u9FFD-\u9FFF\uA48D-\uA48F\uA4C7-\uA4CF\uA62C-\uA63F\uA6F8-\uA6FF\uA7C0\uA7C1\uA7CB-\uA7F4\uA82D-\uA82F\uA83A-\uA83F\uA878-\uA87F\uA8C6-\uA8CD\uA8DA-\uA8DF\uA954-\uA95E\uA97D-\uA97F\uA9CE\uA9DA-\uA9DD\uA9FF\uAA37-\uAA3F\uAA4E\uAA4F\uAA5A\uAA5B\uAAC3-\uAADA\uAAF7-\uAB00\uAB07\uAB08\uAB0F\uAB10\uAB17-\uAB1F\uAB27\uAB2F\uAB6C-\uAB6F\uABEE\uABEF\uABFA-\uABFF\uD7A4-\uD7AF\uD7C7-\uD7CA\uD7FC-\uF8FF\uFA6E\uFA6F\uFADA-\uFAFF\uFB07-\uFB12\uFB18-\uFB1C\uFB37\uFB3D\uFB3F\uFB42\uFB45\uFBC2-\uFBD2\uFD40-\uFD4F\uFD90\uFD91\uFDC8-\uFDEF\uFDFE\uFDFF\uFE1A-\uFE1F\uFE53\uFE67\uFE6C-\uFE6F\uFE75\uFEFD-\uFF00\uFFBF-\uFFC1\uFFC8\uFFC9\uFFD0\uFFD1\uFFD8\uFFD9\uFFDD-\uFFDF\uFFE7\uFFEF-\uFFFB\uFFFE\uFFFF', + 'astral': '\uD800[\uDC0C\uDC27\uDC3B\uDC3E\uDC4E\uDC4F\uDC5E-\uDC7F\uDCFB-\uDCFF\uDD03-\uDD06\uDD34-\uDD36\uDD8F\uDD9D-\uDD9F\uDDA1-\uDDCF\uDDFE-\uDE7F\uDE9D-\uDE9F\uDED1-\uDEDF\uDEFC-\uDEFF\uDF24-\uDF2C\uDF4B-\uDF4F\uDF7B-\uDF7F\uDF9E\uDFC4-\uDFC7\uDFD6-\uDFFF]|\uD801[\uDC9E\uDC9F\uDCAA-\uDCAF\uDCD4-\uDCD7\uDCFC-\uDCFF\uDD28-\uDD2F\uDD64-\uDD6E\uDD70-\uDDFF\uDF37-\uDF3F\uDF56-\uDF5F\uDF68-\uDFFF]|\uD802[\uDC06\uDC07\uDC09\uDC36\uDC39-\uDC3B\uDC3D\uDC3E\uDC56\uDC9F-\uDCA6\uDCB0-\uDCDF\uDCF3\uDCF6-\uDCFA\uDD1C-\uDD1E\uDD3A-\uDD3E\uDD40-\uDD7F\uDDB8-\uDDBB\uDDD0\uDDD1\uDE04\uDE07-\uDE0B\uDE14\uDE18\uDE36\uDE37\uDE3B-\uDE3E\uDE49-\uDE4F\uDE59-\uDE5F\uDEA0-\uDEBF\uDEE7-\uDEEA\uDEF7-\uDEFF\uDF36-\uDF38\uDF56\uDF57\uDF73-\uDF77\uDF92-\uDF98\uDF9D-\uDFA8\uDFB0-\uDFFF]|\uD803[\uDC49-\uDC7F\uDCB3-\uDCBF\uDCF3-\uDCF9\uDD28-\uDD2F\uDD3A-\uDE5F\uDE7F\uDEAA\uDEAE\uDEAF\uDEB2-\uDEFF\uDF28-\uDF2F\uDF5A-\uDFAF\uDFCC-\uDFDF\uDFF7-\uDFFF]|\uD804[\uDC4E-\uDC51\uDC70-\uDC7E\uDCBD\uDCC2-\uDCCF\uDCE9-\uDCEF\uDCFA-\uDCFF\uDD35\uDD48-\uDD4F\uDD77-\uDD7F\uDDE0\uDDF5-\uDDFF\uDE12\uDE3F-\uDE7F\uDE87\uDE89\uDE8E\uDE9E\uDEAA-\uDEAF\uDEEB-\uDEEF\uDEFA-\uDEFF\uDF04\uDF0D\uDF0E\uDF11\uDF12\uDF29\uDF31\uDF34\uDF3A\uDF45\uDF46\uDF49\uDF4A\uDF4E\uDF4F\uDF51-\uDF56\uDF58-\uDF5C\uDF64\uDF65\uDF6D-\uDF6F\uDF75-\uDFFF]|\uD805[\uDC5C\uDC62-\uDC7F\uDCC8-\uDCCF\uDCDA-\uDD7F\uDDB6\uDDB7\uDDDE-\uDDFF\uDE45-\uDE4F\uDE5A-\uDE5F\uDE6D-\uDE7F\uDEB9-\uDEBF\uDECA-\uDEFF\uDF1B\uDF1C\uDF2C-\uDF2F\uDF40-\uDFFF]|\uD806[\uDC3C-\uDC9F\uDCF3-\uDCFE\uDD07\uDD08\uDD0A\uDD0B\uDD14\uDD17\uDD36\uDD39\uDD3A\uDD47-\uDD4F\uDD5A-\uDD9F\uDDA8\uDDA9\uDDD8\uDDD9\uDDE5-\uDDFF\uDE48-\uDE4F\uDEA3-\uDEBF\uDEF9-\uDFFF]|\uD807[\uDC09\uDC37\uDC46-\uDC4F\uDC6D-\uDC6F\uDC90\uDC91\uDCA8\uDCB7-\uDCFF\uDD07\uDD0A\uDD37-\uDD39\uDD3B\uDD3E\uDD48-\uDD4F\uDD5A-\uDD5F\uDD66\uDD69\uDD8F\uDD92\uDD99-\uDD9F\uDDAA-\uDEDF\uDEF9-\uDFAF\uDFB1-\uDFBF\uDFF2-\uDFFE]|\uD808[\uDF9A-\uDFFF]|\uD809[\uDC6F\uDC75-\uDC7F\uDD44-\uDFFF]|[\uD80A\uD80B\uD80E-\uD810\uD812-\uD819\uD824-\uD82B\uD82D\uD82E\uD830-\uD833\uD837\uD839\uD83F\uD87B-\uD87D\uD87F\uD885-\uDB3F\uDB41-\uDBFF][\uDC00-\uDFFF]|\uD80D[\uDC2F-\uDFFF]|\uD811[\uDE47-\uDFFF]|\uD81A[\uDE39-\uDE3F\uDE5F\uDE6A-\uDE6D\uDE70-\uDECF\uDEEE\uDEEF\uDEF6-\uDEFF\uDF46-\uDF4F\uDF5A\uDF62\uDF78-\uDF7C\uDF90-\uDFFF]|\uD81B[\uDC00-\uDE3F\uDE9B-\uDEFF\uDF4B-\uDF4E\uDF88-\uDF8E\uDFA0-\uDFDF\uDFE5-\uDFEF\uDFF2-\uDFFF]|\uD821[\uDFF8-\uDFFF]|\uD823[\uDCD6-\uDCFF\uDD09-\uDFFF]|\uD82C[\uDD1F-\uDD4F\uDD53-\uDD63\uDD68-\uDD6F\uDEFC-\uDFFF]|\uD82F[\uDC6B-\uDC6F\uDC7D-\uDC7F\uDC89-\uDC8F\uDC9A\uDC9B\uDCA0-\uDFFF]|\uD834[\uDCF6-\uDCFF\uDD27\uDD28\uDD73-\uDD7A\uDDE9-\uDDFF\uDE46-\uDEDF\uDEF4-\uDEFF\uDF57-\uDF5F\uDF79-\uDFFF]|\uD835[\uDC55\uDC9D\uDCA0\uDCA1\uDCA3\uDCA4\uDCA7\uDCA8\uDCAD\uDCBA\uDCBC\uDCC4\uDD06\uDD0B\uDD0C\uDD15\uDD1D\uDD3A\uDD3F\uDD45\uDD47-\uDD49\uDD51\uDEA6\uDEA7\uDFCC\uDFCD]|\uD836[\uDE8C-\uDE9A\uDEA0\uDEB0-\uDFFF]|\uD838[\uDC07\uDC19\uDC1A\uDC22\uDC25\uDC2B-\uDCFF\uDD2D-\uDD2F\uDD3E\uDD3F\uDD4A-\uDD4D\uDD50-\uDEBF\uDEFA-\uDEFE\uDF00-\uDFFF]|\uD83A[\uDCC5\uDCC6\uDCD7-\uDCFF\uDD4C-\uDD4F\uDD5A-\uDD5D\uDD60-\uDFFF]|\uD83B[\uDC00-\uDC70\uDCB5-\uDD00\uDD3E-\uDDFF\uDE04\uDE20\uDE23\uDE25\uDE26\uDE28\uDE33\uDE38\uDE3A\uDE3C-\uDE41\uDE43-\uDE46\uDE48\uDE4A\uDE4C\uDE50\uDE53\uDE55\uDE56\uDE58\uDE5A\uDE5C\uDE5E\uDE60\uDE63\uDE65\uDE66\uDE6B\uDE73\uDE78\uDE7D\uDE7F\uDE8A\uDE9C-\uDEA0\uDEA4\uDEAA\uDEBC-\uDEEF\uDEF2-\uDFFF]|\uD83C[\uDC2C-\uDC2F\uDC94-\uDC9F\uDCAF\uDCB0\uDCC0\uDCD0\uDCF6-\uDCFF\uDDAE-\uDDE5\uDE03-\uDE0F\uDE3C-\uDE3F\uDE49-\uDE4F\uDE52-\uDE5F\uDE66-\uDEFF]|\uD83D[\uDED8-\uDEDF\uDEED-\uDEEF\uDEFD-\uDEFF\uDF74-\uDF7F\uDFD9-\uDFDF\uDFEC-\uDFFF]|\uD83E[\uDC0C-\uDC0F\uDC48-\uDC4F\uDC5A-\uDC5F\uDC88-\uDC8F\uDCAE\uDCAF\uDCB2-\uDCFF\uDD79\uDDCC\uDE54-\uDE5F\uDE6E\uDE6F\uDE75-\uDE77\uDE7B-\uDE7F\uDE87-\uDE8F\uDEA9-\uDEAF\uDEB7-\uDEBF\uDEC3-\uDECF\uDED7-\uDEFF\uDF93\uDFCB-\uDFEF\uDFFA-\uDFFF]|\uD869[\uDEDE-\uDEFF]|\uD86D[\uDF35-\uDF3F]|\uD86E[\uDC1E\uDC1F]|\uD873[\uDEA2-\uDEAF]|\uD87A[\uDFE1-\uDFFF]|\uD87E[\uDE1E-\uDFFF]|\uD884[\uDF4B-\uDFFF]|\uDB40[\uDC00-\uDCFF\uDDF0-\uDFFF]' + }, + { + 'name': 'Cc', + 'alias': 'Control', + 'bmp': '\0-\x1F\x7F-\x9F' + }, + { + 'name': 'Cf', + 'alias': 'Format', + 'bmp': '\xAD\u0600-\u0605\u061C\u06DD\u070F\u08E2\u180E\u200B-\u200F\u202A-\u202E\u2060-\u2064\u2066-\u206F\uFEFF\uFFF9-\uFFFB', + 'astral': '\uD804[\uDCBD\uDCCD]|\uD80D[\uDC30-\uDC38]|\uD82F[\uDCA0-\uDCA3]|\uD834[\uDD73-\uDD7A]|\uDB40[\uDC01\uDC20-\uDC7F]' + }, + { + 'name': 'Cn', + 'alias': 'Unassigned', + 'bmp': '\u0378\u0379\u0380-\u0383\u038B\u038D\u03A2\u0530\u0557\u0558\u058B\u058C\u0590\u05C8-\u05CF\u05EB-\u05EE\u05F5-\u05FF\u061D\u070E\u074B\u074C\u07B2-\u07BF\u07FB\u07FC\u082E\u082F\u083F\u085C\u085D\u085F\u086B-\u089F\u08B5\u08C8-\u08D2\u0984\u098D\u098E\u0991\u0992\u09A9\u09B1\u09B3-\u09B5\u09BA\u09BB\u09C5\u09C6\u09C9\u09CA\u09CF-\u09D6\u09D8-\u09DB\u09DE\u09E4\u09E5\u09FF\u0A00\u0A04\u0A0B-\u0A0E\u0A11\u0A12\u0A29\u0A31\u0A34\u0A37\u0A3A\u0A3B\u0A3D\u0A43-\u0A46\u0A49\u0A4A\u0A4E-\u0A50\u0A52-\u0A58\u0A5D\u0A5F-\u0A65\u0A77-\u0A80\u0A84\u0A8E\u0A92\u0AA9\u0AB1\u0AB4\u0ABA\u0ABB\u0AC6\u0ACA\u0ACE\u0ACF\u0AD1-\u0ADF\u0AE4\u0AE5\u0AF2-\u0AF8\u0B00\u0B04\u0B0D\u0B0E\u0B11\u0B12\u0B29\u0B31\u0B34\u0B3A\u0B3B\u0B45\u0B46\u0B49\u0B4A\u0B4E-\u0B54\u0B58-\u0B5B\u0B5E\u0B64\u0B65\u0B78-\u0B81\u0B84\u0B8B-\u0B8D\u0B91\u0B96-\u0B98\u0B9B\u0B9D\u0BA0-\u0BA2\u0BA5-\u0BA7\u0BAB-\u0BAD\u0BBA-\u0BBD\u0BC3-\u0BC5\u0BC9\u0BCE\u0BCF\u0BD1-\u0BD6\u0BD8-\u0BE5\u0BFB-\u0BFF\u0C0D\u0C11\u0C29\u0C3A-\u0C3C\u0C45\u0C49\u0C4E-\u0C54\u0C57\u0C5B-\u0C5F\u0C64\u0C65\u0C70-\u0C76\u0C8D\u0C91\u0CA9\u0CB4\u0CBA\u0CBB\u0CC5\u0CC9\u0CCE-\u0CD4\u0CD7-\u0CDD\u0CDF\u0CE4\u0CE5\u0CF0\u0CF3-\u0CFF\u0D0D\u0D11\u0D45\u0D49\u0D50-\u0D53\u0D64\u0D65\u0D80\u0D84\u0D97-\u0D99\u0DB2\u0DBC\u0DBE\u0DBF\u0DC7-\u0DC9\u0DCB-\u0DCE\u0DD5\u0DD7\u0DE0-\u0DE5\u0DF0\u0DF1\u0DF5-\u0E00\u0E3B-\u0E3E\u0E5C-\u0E80\u0E83\u0E85\u0E8B\u0EA4\u0EA6\u0EBE\u0EBF\u0EC5\u0EC7\u0ECE\u0ECF\u0EDA\u0EDB\u0EE0-\u0EFF\u0F48\u0F6D-\u0F70\u0F98\u0FBD\u0FCD\u0FDB-\u0FFF\u10C6\u10C8-\u10CC\u10CE\u10CF\u1249\u124E\u124F\u1257\u1259\u125E\u125F\u1289\u128E\u128F\u12B1\u12B6\u12B7\u12BF\u12C1\u12C6\u12C7\u12D7\u1311\u1316\u1317\u135B\u135C\u137D-\u137F\u139A-\u139F\u13F6\u13F7\u13FE\u13FF\u169D-\u169F\u16F9-\u16FF\u170D\u1715-\u171F\u1737-\u173F\u1754-\u175F\u176D\u1771\u1774-\u177F\u17DE\u17DF\u17EA-\u17EF\u17FA-\u17FF\u180F\u181A-\u181F\u1879-\u187F\u18AB-\u18AF\u18F6-\u18FF\u191F\u192C-\u192F\u193C-\u193F\u1941-\u1943\u196E\u196F\u1975-\u197F\u19AC-\u19AF\u19CA-\u19CF\u19DB-\u19DD\u1A1C\u1A1D\u1A5F\u1A7D\u1A7E\u1A8A-\u1A8F\u1A9A-\u1A9F\u1AAE\u1AAF\u1AC1-\u1AFF\u1B4C-\u1B4F\u1B7D-\u1B7F\u1BF4-\u1BFB\u1C38-\u1C3A\u1C4A-\u1C4C\u1C89-\u1C8F\u1CBB\u1CBC\u1CC8-\u1CCF\u1CFB-\u1CFF\u1DFA\u1F16\u1F17\u1F1E\u1F1F\u1F46\u1F47\u1F4E\u1F4F\u1F58\u1F5A\u1F5C\u1F5E\u1F7E\u1F7F\u1FB5\u1FC5\u1FD4\u1FD5\u1FDC\u1FF0\u1FF1\u1FF5\u1FFF\u2065\u2072\u2073\u208F\u209D-\u209F\u20C0-\u20CF\u20F1-\u20FF\u218C-\u218F\u2427-\u243F\u244B-\u245F\u2B74\u2B75\u2B96\u2C2F\u2C5F\u2CF4-\u2CF8\u2D26\u2D28-\u2D2C\u2D2E\u2D2F\u2D68-\u2D6E\u2D71-\u2D7E\u2D97-\u2D9F\u2DA7\u2DAF\u2DB7\u2DBF\u2DC7\u2DCF\u2DD7\u2DDF\u2E53-\u2E7F\u2E9A\u2EF4-\u2EFF\u2FD6-\u2FEF\u2FFC-\u2FFF\u3040\u3097\u3098\u3100-\u3104\u3130\u318F\u31E4-\u31EF\u321F\u9FFD-\u9FFF\uA48D-\uA48F\uA4C7-\uA4CF\uA62C-\uA63F\uA6F8-\uA6FF\uA7C0\uA7C1\uA7CB-\uA7F4\uA82D-\uA82F\uA83A-\uA83F\uA878-\uA87F\uA8C6-\uA8CD\uA8DA-\uA8DF\uA954-\uA95E\uA97D-\uA97F\uA9CE\uA9DA-\uA9DD\uA9FF\uAA37-\uAA3F\uAA4E\uAA4F\uAA5A\uAA5B\uAAC3-\uAADA\uAAF7-\uAB00\uAB07\uAB08\uAB0F\uAB10\uAB17-\uAB1F\uAB27\uAB2F\uAB6C-\uAB6F\uABEE\uABEF\uABFA-\uABFF\uD7A4-\uD7AF\uD7C7-\uD7CA\uD7FC-\uD7FF\uFA6E\uFA6F\uFADA-\uFAFF\uFB07-\uFB12\uFB18-\uFB1C\uFB37\uFB3D\uFB3F\uFB42\uFB45\uFBC2-\uFBD2\uFD40-\uFD4F\uFD90\uFD91\uFDC8-\uFDEF\uFDFE\uFDFF\uFE1A-\uFE1F\uFE53\uFE67\uFE6C-\uFE6F\uFE75\uFEFD\uFEFE\uFF00\uFFBF-\uFFC1\uFFC8\uFFC9\uFFD0\uFFD1\uFFD8\uFFD9\uFFDD-\uFFDF\uFFE7\uFFEF-\uFFF8\uFFFE\uFFFF', + 'astral': '\uD800[\uDC0C\uDC27\uDC3B\uDC3E\uDC4E\uDC4F\uDC5E-\uDC7F\uDCFB-\uDCFF\uDD03-\uDD06\uDD34-\uDD36\uDD8F\uDD9D-\uDD9F\uDDA1-\uDDCF\uDDFE-\uDE7F\uDE9D-\uDE9F\uDED1-\uDEDF\uDEFC-\uDEFF\uDF24-\uDF2C\uDF4B-\uDF4F\uDF7B-\uDF7F\uDF9E\uDFC4-\uDFC7\uDFD6-\uDFFF]|\uD801[\uDC9E\uDC9F\uDCAA-\uDCAF\uDCD4-\uDCD7\uDCFC-\uDCFF\uDD28-\uDD2F\uDD64-\uDD6E\uDD70-\uDDFF\uDF37-\uDF3F\uDF56-\uDF5F\uDF68-\uDFFF]|\uD802[\uDC06\uDC07\uDC09\uDC36\uDC39-\uDC3B\uDC3D\uDC3E\uDC56\uDC9F-\uDCA6\uDCB0-\uDCDF\uDCF3\uDCF6-\uDCFA\uDD1C-\uDD1E\uDD3A-\uDD3E\uDD40-\uDD7F\uDDB8-\uDDBB\uDDD0\uDDD1\uDE04\uDE07-\uDE0B\uDE14\uDE18\uDE36\uDE37\uDE3B-\uDE3E\uDE49-\uDE4F\uDE59-\uDE5F\uDEA0-\uDEBF\uDEE7-\uDEEA\uDEF7-\uDEFF\uDF36-\uDF38\uDF56\uDF57\uDF73-\uDF77\uDF92-\uDF98\uDF9D-\uDFA8\uDFB0-\uDFFF]|\uD803[\uDC49-\uDC7F\uDCB3-\uDCBF\uDCF3-\uDCF9\uDD28-\uDD2F\uDD3A-\uDE5F\uDE7F\uDEAA\uDEAE\uDEAF\uDEB2-\uDEFF\uDF28-\uDF2F\uDF5A-\uDFAF\uDFCC-\uDFDF\uDFF7-\uDFFF]|\uD804[\uDC4E-\uDC51\uDC70-\uDC7E\uDCC2-\uDCCC\uDCCE\uDCCF\uDCE9-\uDCEF\uDCFA-\uDCFF\uDD35\uDD48-\uDD4F\uDD77-\uDD7F\uDDE0\uDDF5-\uDDFF\uDE12\uDE3F-\uDE7F\uDE87\uDE89\uDE8E\uDE9E\uDEAA-\uDEAF\uDEEB-\uDEEF\uDEFA-\uDEFF\uDF04\uDF0D\uDF0E\uDF11\uDF12\uDF29\uDF31\uDF34\uDF3A\uDF45\uDF46\uDF49\uDF4A\uDF4E\uDF4F\uDF51-\uDF56\uDF58-\uDF5C\uDF64\uDF65\uDF6D-\uDF6F\uDF75-\uDFFF]|\uD805[\uDC5C\uDC62-\uDC7F\uDCC8-\uDCCF\uDCDA-\uDD7F\uDDB6\uDDB7\uDDDE-\uDDFF\uDE45-\uDE4F\uDE5A-\uDE5F\uDE6D-\uDE7F\uDEB9-\uDEBF\uDECA-\uDEFF\uDF1B\uDF1C\uDF2C-\uDF2F\uDF40-\uDFFF]|\uD806[\uDC3C-\uDC9F\uDCF3-\uDCFE\uDD07\uDD08\uDD0A\uDD0B\uDD14\uDD17\uDD36\uDD39\uDD3A\uDD47-\uDD4F\uDD5A-\uDD9F\uDDA8\uDDA9\uDDD8\uDDD9\uDDE5-\uDDFF\uDE48-\uDE4F\uDEA3-\uDEBF\uDEF9-\uDFFF]|\uD807[\uDC09\uDC37\uDC46-\uDC4F\uDC6D-\uDC6F\uDC90\uDC91\uDCA8\uDCB7-\uDCFF\uDD07\uDD0A\uDD37-\uDD39\uDD3B\uDD3E\uDD48-\uDD4F\uDD5A-\uDD5F\uDD66\uDD69\uDD8F\uDD92\uDD99-\uDD9F\uDDAA-\uDEDF\uDEF9-\uDFAF\uDFB1-\uDFBF\uDFF2-\uDFFE]|\uD808[\uDF9A-\uDFFF]|\uD809[\uDC6F\uDC75-\uDC7F\uDD44-\uDFFF]|[\uD80A\uD80B\uD80E-\uD810\uD812-\uD819\uD824-\uD82B\uD82D\uD82E\uD830-\uD833\uD837\uD839\uD83F\uD87B-\uD87D\uD87F\uD885-\uDB3F\uDB41-\uDB7F][\uDC00-\uDFFF]|\uD80D[\uDC2F\uDC39-\uDFFF]|\uD811[\uDE47-\uDFFF]|\uD81A[\uDE39-\uDE3F\uDE5F\uDE6A-\uDE6D\uDE70-\uDECF\uDEEE\uDEEF\uDEF6-\uDEFF\uDF46-\uDF4F\uDF5A\uDF62\uDF78-\uDF7C\uDF90-\uDFFF]|\uD81B[\uDC00-\uDE3F\uDE9B-\uDEFF\uDF4B-\uDF4E\uDF88-\uDF8E\uDFA0-\uDFDF\uDFE5-\uDFEF\uDFF2-\uDFFF]|\uD821[\uDFF8-\uDFFF]|\uD823[\uDCD6-\uDCFF\uDD09-\uDFFF]|\uD82C[\uDD1F-\uDD4F\uDD53-\uDD63\uDD68-\uDD6F\uDEFC-\uDFFF]|\uD82F[\uDC6B-\uDC6F\uDC7D-\uDC7F\uDC89-\uDC8F\uDC9A\uDC9B\uDCA4-\uDFFF]|\uD834[\uDCF6-\uDCFF\uDD27\uDD28\uDDE9-\uDDFF\uDE46-\uDEDF\uDEF4-\uDEFF\uDF57-\uDF5F\uDF79-\uDFFF]|\uD835[\uDC55\uDC9D\uDCA0\uDCA1\uDCA3\uDCA4\uDCA7\uDCA8\uDCAD\uDCBA\uDCBC\uDCC4\uDD06\uDD0B\uDD0C\uDD15\uDD1D\uDD3A\uDD3F\uDD45\uDD47-\uDD49\uDD51\uDEA6\uDEA7\uDFCC\uDFCD]|\uD836[\uDE8C-\uDE9A\uDEA0\uDEB0-\uDFFF]|\uD838[\uDC07\uDC19\uDC1A\uDC22\uDC25\uDC2B-\uDCFF\uDD2D-\uDD2F\uDD3E\uDD3F\uDD4A-\uDD4D\uDD50-\uDEBF\uDEFA-\uDEFE\uDF00-\uDFFF]|\uD83A[\uDCC5\uDCC6\uDCD7-\uDCFF\uDD4C-\uDD4F\uDD5A-\uDD5D\uDD60-\uDFFF]|\uD83B[\uDC00-\uDC70\uDCB5-\uDD00\uDD3E-\uDDFF\uDE04\uDE20\uDE23\uDE25\uDE26\uDE28\uDE33\uDE38\uDE3A\uDE3C-\uDE41\uDE43-\uDE46\uDE48\uDE4A\uDE4C\uDE50\uDE53\uDE55\uDE56\uDE58\uDE5A\uDE5C\uDE5E\uDE60\uDE63\uDE65\uDE66\uDE6B\uDE73\uDE78\uDE7D\uDE7F\uDE8A\uDE9C-\uDEA0\uDEA4\uDEAA\uDEBC-\uDEEF\uDEF2-\uDFFF]|\uD83C[\uDC2C-\uDC2F\uDC94-\uDC9F\uDCAF\uDCB0\uDCC0\uDCD0\uDCF6-\uDCFF\uDDAE-\uDDE5\uDE03-\uDE0F\uDE3C-\uDE3F\uDE49-\uDE4F\uDE52-\uDE5F\uDE66-\uDEFF]|\uD83D[\uDED8-\uDEDF\uDEED-\uDEEF\uDEFD-\uDEFF\uDF74-\uDF7F\uDFD9-\uDFDF\uDFEC-\uDFFF]|\uD83E[\uDC0C-\uDC0F\uDC48-\uDC4F\uDC5A-\uDC5F\uDC88-\uDC8F\uDCAE\uDCAF\uDCB2-\uDCFF\uDD79\uDDCC\uDE54-\uDE5F\uDE6E\uDE6F\uDE75-\uDE77\uDE7B-\uDE7F\uDE87-\uDE8F\uDEA9-\uDEAF\uDEB7-\uDEBF\uDEC3-\uDECF\uDED7-\uDEFF\uDF93\uDFCB-\uDFEF\uDFFA-\uDFFF]|\uD869[\uDEDE-\uDEFF]|\uD86D[\uDF35-\uDF3F]|\uD86E[\uDC1E\uDC1F]|\uD873[\uDEA2-\uDEAF]|\uD87A[\uDFE1-\uDFFF]|\uD87E[\uDE1E-\uDFFF]|\uD884[\uDF4B-\uDFFF]|\uDB40[\uDC00\uDC02-\uDC1F\uDC80-\uDCFF\uDDF0-\uDFFF]|[\uDBBF\uDBFF][\uDFFE\uDFFF]' + }, + { + 'name': 'Co', + 'alias': 'Private_Use', + 'bmp': '\uE000-\uF8FF', + 'astral': '[\uDB80-\uDBBE\uDBC0-\uDBFE][\uDC00-\uDFFF]|[\uDBBF\uDBFF][\uDC00-\uDFFD]' + }, + { + 'name': 'Cs', + 'alias': 'Surrogate', + 'bmp': '\uD800-\uDFFF' + }, + { + 'name': 'L', + 'alias': 'Letter', + 'bmp': 'A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u08A0-\u08B4\u08B6-\u08C7\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\u9FFC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7BF\uA7C2-\uA7CA\uA7F5-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC', + 'astral': '\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD23\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDEB8\uDF00-\uDF1A]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCDF\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE7F\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82C[\uDC00-\uDD1E\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD838[\uDD00-\uDD2C\uDD37-\uDD3D\uDD4E\uDEC0-\uDEEB]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43\uDD4B]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDEDD\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A]' + }, + { + 'name': 'LC', + 'alias': 'Cased_Letter', + 'bmp': 'A-Za-z\xB5\xC0-\xD6\xD8-\xF6\xF8-\u01BA\u01BC-\u01BF\u01C4-\u0293\u0295-\u02AF\u0370-\u0373\u0376\u0377\u037B-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0560-\u0588\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FD-\u10FF\u13A0-\u13F5\u13F8-\u13FD\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1D00-\u1D2B\u1D6B-\u1D77\u1D79-\u1D9A\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2134\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2C7B\u2C7E-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\uA640-\uA66D\uA680-\uA69B\uA722-\uA76F\uA771-\uA787\uA78B-\uA78E\uA790-\uA7BF\uA7C2-\uA7CA\uA7F5\uA7F6\uA7FA\uAB30-\uAB5A\uAB60-\uAB68\uAB70-\uABBF\uFB00-\uFB06\uFB13-\uFB17\uFF21-\uFF3A\uFF41-\uFF5A', + 'astral': '\uD801[\uDC00-\uDC4F\uDCB0-\uDCD3\uDCD8-\uDCFB]|\uD803[\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD806[\uDCA0-\uDCDF]|\uD81B[\uDE40-\uDE7F]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDD00-\uDD43]' + }, + { + 'name': 'Ll', + 'alias': 'Lowercase_Letter', + 'bmp': 'a-z\xB5\xDF-\xF6\xF8-\xFF\u0101\u0103\u0105\u0107\u0109\u010B\u010D\u010F\u0111\u0113\u0115\u0117\u0119\u011B\u011D\u011F\u0121\u0123\u0125\u0127\u0129\u012B\u012D\u012F\u0131\u0133\u0135\u0137\u0138\u013A\u013C\u013E\u0140\u0142\u0144\u0146\u0148\u0149\u014B\u014D\u014F\u0151\u0153\u0155\u0157\u0159\u015B\u015D\u015F\u0161\u0163\u0165\u0167\u0169\u016B\u016D\u016F\u0171\u0173\u0175\u0177\u017A\u017C\u017E-\u0180\u0183\u0185\u0188\u018C\u018D\u0192\u0195\u0199-\u019B\u019E\u01A1\u01A3\u01A5\u01A8\u01AA\u01AB\u01AD\u01B0\u01B4\u01B6\u01B9\u01BA\u01BD-\u01BF\u01C6\u01C9\u01CC\u01CE\u01D0\u01D2\u01D4\u01D6\u01D8\u01DA\u01DC\u01DD\u01DF\u01E1\u01E3\u01E5\u01E7\u01E9\u01EB\u01ED\u01EF\u01F0\u01F3\u01F5\u01F9\u01FB\u01FD\u01FF\u0201\u0203\u0205\u0207\u0209\u020B\u020D\u020F\u0211\u0213\u0215\u0217\u0219\u021B\u021D\u021F\u0221\u0223\u0225\u0227\u0229\u022B\u022D\u022F\u0231\u0233-\u0239\u023C\u023F\u0240\u0242\u0247\u0249\u024B\u024D\u024F-\u0293\u0295-\u02AF\u0371\u0373\u0377\u037B-\u037D\u0390\u03AC-\u03CE\u03D0\u03D1\u03D5-\u03D7\u03D9\u03DB\u03DD\u03DF\u03E1\u03E3\u03E5\u03E7\u03E9\u03EB\u03ED\u03EF-\u03F3\u03F5\u03F8\u03FB\u03FC\u0430-\u045F\u0461\u0463\u0465\u0467\u0469\u046B\u046D\u046F\u0471\u0473\u0475\u0477\u0479\u047B\u047D\u047F\u0481\u048B\u048D\u048F\u0491\u0493\u0495\u0497\u0499\u049B\u049D\u049F\u04A1\u04A3\u04A5\u04A7\u04A9\u04AB\u04AD\u04AF\u04B1\u04B3\u04B5\u04B7\u04B9\u04BB\u04BD\u04BF\u04C2\u04C4\u04C6\u04C8\u04CA\u04CC\u04CE\u04CF\u04D1\u04D3\u04D5\u04D7\u04D9\u04DB\u04DD\u04DF\u04E1\u04E3\u04E5\u04E7\u04E9\u04EB\u04ED\u04EF\u04F1\u04F3\u04F5\u04F7\u04F9\u04FB\u04FD\u04FF\u0501\u0503\u0505\u0507\u0509\u050B\u050D\u050F\u0511\u0513\u0515\u0517\u0519\u051B\u051D\u051F\u0521\u0523\u0525\u0527\u0529\u052B\u052D\u052F\u0560-\u0588\u10D0-\u10FA\u10FD-\u10FF\u13F8-\u13FD\u1C80-\u1C88\u1D00-\u1D2B\u1D6B-\u1D77\u1D79-\u1D9A\u1E01\u1E03\u1E05\u1E07\u1E09\u1E0B\u1E0D\u1E0F\u1E11\u1E13\u1E15\u1E17\u1E19\u1E1B\u1E1D\u1E1F\u1E21\u1E23\u1E25\u1E27\u1E29\u1E2B\u1E2D\u1E2F\u1E31\u1E33\u1E35\u1E37\u1E39\u1E3B\u1E3D\u1E3F\u1E41\u1E43\u1E45\u1E47\u1E49\u1E4B\u1E4D\u1E4F\u1E51\u1E53\u1E55\u1E57\u1E59\u1E5B\u1E5D\u1E5F\u1E61\u1E63\u1E65\u1E67\u1E69\u1E6B\u1E6D\u1E6F\u1E71\u1E73\u1E75\u1E77\u1E79\u1E7B\u1E7D\u1E7F\u1E81\u1E83\u1E85\u1E87\u1E89\u1E8B\u1E8D\u1E8F\u1E91\u1E93\u1E95-\u1E9D\u1E9F\u1EA1\u1EA3\u1EA5\u1EA7\u1EA9\u1EAB\u1EAD\u1EAF\u1EB1\u1EB3\u1EB5\u1EB7\u1EB9\u1EBB\u1EBD\u1EBF\u1EC1\u1EC3\u1EC5\u1EC7\u1EC9\u1ECB\u1ECD\u1ECF\u1ED1\u1ED3\u1ED5\u1ED7\u1ED9\u1EDB\u1EDD\u1EDF\u1EE1\u1EE3\u1EE5\u1EE7\u1EE9\u1EEB\u1EED\u1EEF\u1EF1\u1EF3\u1EF5\u1EF7\u1EF9\u1EFB\u1EFD\u1EFF-\u1F07\u1F10-\u1F15\u1F20-\u1F27\u1F30-\u1F37\u1F40-\u1F45\u1F50-\u1F57\u1F60-\u1F67\u1F70-\u1F7D\u1F80-\u1F87\u1F90-\u1F97\u1FA0-\u1FA7\u1FB0-\u1FB4\u1FB6\u1FB7\u1FBE\u1FC2-\u1FC4\u1FC6\u1FC7\u1FD0-\u1FD3\u1FD6\u1FD7\u1FE0-\u1FE7\u1FF2-\u1FF4\u1FF6\u1FF7\u210A\u210E\u210F\u2113\u212F\u2134\u2139\u213C\u213D\u2146-\u2149\u214E\u2184\u2C30-\u2C5E\u2C61\u2C65\u2C66\u2C68\u2C6A\u2C6C\u2C71\u2C73\u2C74\u2C76-\u2C7B\u2C81\u2C83\u2C85\u2C87\u2C89\u2C8B\u2C8D\u2C8F\u2C91\u2C93\u2C95\u2C97\u2C99\u2C9B\u2C9D\u2C9F\u2CA1\u2CA3\u2CA5\u2CA7\u2CA9\u2CAB\u2CAD\u2CAF\u2CB1\u2CB3\u2CB5\u2CB7\u2CB9\u2CBB\u2CBD\u2CBF\u2CC1\u2CC3\u2CC5\u2CC7\u2CC9\u2CCB\u2CCD\u2CCF\u2CD1\u2CD3\u2CD5\u2CD7\u2CD9\u2CDB\u2CDD\u2CDF\u2CE1\u2CE3\u2CE4\u2CEC\u2CEE\u2CF3\u2D00-\u2D25\u2D27\u2D2D\uA641\uA643\uA645\uA647\uA649\uA64B\uA64D\uA64F\uA651\uA653\uA655\uA657\uA659\uA65B\uA65D\uA65F\uA661\uA663\uA665\uA667\uA669\uA66B\uA66D\uA681\uA683\uA685\uA687\uA689\uA68B\uA68D\uA68F\uA691\uA693\uA695\uA697\uA699\uA69B\uA723\uA725\uA727\uA729\uA72B\uA72D\uA72F-\uA731\uA733\uA735\uA737\uA739\uA73B\uA73D\uA73F\uA741\uA743\uA745\uA747\uA749\uA74B\uA74D\uA74F\uA751\uA753\uA755\uA757\uA759\uA75B\uA75D\uA75F\uA761\uA763\uA765\uA767\uA769\uA76B\uA76D\uA76F\uA771-\uA778\uA77A\uA77C\uA77F\uA781\uA783\uA785\uA787\uA78C\uA78E\uA791\uA793-\uA795\uA797\uA799\uA79B\uA79D\uA79F\uA7A1\uA7A3\uA7A5\uA7A7\uA7A9\uA7AF\uA7B5\uA7B7\uA7B9\uA7BB\uA7BD\uA7BF\uA7C3\uA7C8\uA7CA\uA7F6\uA7FA\uAB30-\uAB5A\uAB60-\uAB68\uAB70-\uABBF\uFB00-\uFB06\uFB13-\uFB17\uFF41-\uFF5A', + 'astral': '\uD801[\uDC28-\uDC4F\uDCD8-\uDCFB]|\uD803[\uDCC0-\uDCF2]|\uD806[\uDCC0-\uDCDF]|\uD81B[\uDE60-\uDE7F]|\uD835[\uDC1A-\uDC33\uDC4E-\uDC54\uDC56-\uDC67\uDC82-\uDC9B\uDCB6-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDCCF\uDCEA-\uDD03\uDD1E-\uDD37\uDD52-\uDD6B\uDD86-\uDD9F\uDDBA-\uDDD3\uDDEE-\uDE07\uDE22-\uDE3B\uDE56-\uDE6F\uDE8A-\uDEA5\uDEC2-\uDEDA\uDEDC-\uDEE1\uDEFC-\uDF14\uDF16-\uDF1B\uDF36-\uDF4E\uDF50-\uDF55\uDF70-\uDF88\uDF8A-\uDF8F\uDFAA-\uDFC2\uDFC4-\uDFC9\uDFCB]|\uD83A[\uDD22-\uDD43]' + }, + { + 'name': 'Lm', + 'alias': 'Modifier_Letter', + 'bmp': '\u02B0-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0374\u037A\u0559\u0640\u06E5\u06E6\u07F4\u07F5\u07FA\u081A\u0824\u0828\u0971\u0E46\u0EC6\u10FC\u17D7\u1843\u1AA7\u1C78-\u1C7D\u1D2C-\u1D6A\u1D78\u1D9B-\u1DBF\u2071\u207F\u2090-\u209C\u2C7C\u2C7D\u2D6F\u2E2F\u3005\u3031-\u3035\u303B\u309D\u309E\u30FC-\u30FE\uA015\uA4F8-\uA4FD\uA60C\uA67F\uA69C\uA69D\uA717-\uA71F\uA770\uA788\uA7F8\uA7F9\uA9CF\uA9E6\uAA70\uAADD\uAAF3\uAAF4\uAB5C-\uAB5F\uAB69\uFF70\uFF9E\uFF9F', + 'astral': '\uD81A[\uDF40-\uDF43]|\uD81B[\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD838[\uDD37-\uDD3D]|\uD83A\uDD4B' + }, + { + 'name': 'Lo', + 'alias': 'Other_Letter', + 'bmp': '\xAA\xBA\u01BB\u01C0-\u01C3\u0294\u05D0-\u05EA\u05EF-\u05F2\u0620-\u063F\u0641-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u0800-\u0815\u0840-\u0858\u0860-\u086A\u08A0-\u08B4\u08B6-\u08C7\u0904-\u0939\u093D\u0950\u0958-\u0961\u0972-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E45\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u1100-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17DC\u1820-\u1842\u1844-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C77\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u2135-\u2138\u2D30-\u2D67\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3006\u303C\u3041-\u3096\u309F\u30A1-\u30FA\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\u9FFC\uA000-\uA014\uA016-\uA48C\uA4D0-\uA4F7\uA500-\uA60B\uA610-\uA61F\uA62A\uA62B\uA66E\uA6A0-\uA6E5\uA78F\uA7F7\uA7FB-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9E0-\uA9E4\uA9E7-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA6F\uAA71-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB\uAADC\uAAE0-\uAAEA\uAAF2\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF66-\uFF6F\uFF71-\uFF9D\uFFA0-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC', + 'astral': '\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC50-\uDC9D\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDD00-\uDD23\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDEB8\uDF00-\uDF1A]|\uD806[\uDC00-\uDC2B\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF4A\uDF50]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82C[\uDC00-\uDD1E\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD838[\uDD00-\uDD2C\uDD4E\uDEC0-\uDEEB]|\uD83A[\uDC00-\uDCC4]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDEDD\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A]' + }, + { + 'name': 'Lt', + 'alias': 'Titlecase_Letter', + 'bmp': '\u01C5\u01C8\u01CB\u01F2\u1F88-\u1F8F\u1F98-\u1F9F\u1FA8-\u1FAF\u1FBC\u1FCC\u1FFC' + }, + { + 'name': 'Lu', + 'alias': 'Uppercase_Letter', + 'bmp': 'A-Z\xC0-\xD6\xD8-\xDE\u0100\u0102\u0104\u0106\u0108\u010A\u010C\u010E\u0110\u0112\u0114\u0116\u0118\u011A\u011C\u011E\u0120\u0122\u0124\u0126\u0128\u012A\u012C\u012E\u0130\u0132\u0134\u0136\u0139\u013B\u013D\u013F\u0141\u0143\u0145\u0147\u014A\u014C\u014E\u0150\u0152\u0154\u0156\u0158\u015A\u015C\u015E\u0160\u0162\u0164\u0166\u0168\u016A\u016C\u016E\u0170\u0172\u0174\u0176\u0178\u0179\u017B\u017D\u0181\u0182\u0184\u0186\u0187\u0189-\u018B\u018E-\u0191\u0193\u0194\u0196-\u0198\u019C\u019D\u019F\u01A0\u01A2\u01A4\u01A6\u01A7\u01A9\u01AC\u01AE\u01AF\u01B1-\u01B3\u01B5\u01B7\u01B8\u01BC\u01C4\u01C7\u01CA\u01CD\u01CF\u01D1\u01D3\u01D5\u01D7\u01D9\u01DB\u01DE\u01E0\u01E2\u01E4\u01E6\u01E8\u01EA\u01EC\u01EE\u01F1\u01F4\u01F6-\u01F8\u01FA\u01FC\u01FE\u0200\u0202\u0204\u0206\u0208\u020A\u020C\u020E\u0210\u0212\u0214\u0216\u0218\u021A\u021C\u021E\u0220\u0222\u0224\u0226\u0228\u022A\u022C\u022E\u0230\u0232\u023A\u023B\u023D\u023E\u0241\u0243-\u0246\u0248\u024A\u024C\u024E\u0370\u0372\u0376\u037F\u0386\u0388-\u038A\u038C\u038E\u038F\u0391-\u03A1\u03A3-\u03AB\u03CF\u03D2-\u03D4\u03D8\u03DA\u03DC\u03DE\u03E0\u03E2\u03E4\u03E6\u03E8\u03EA\u03EC\u03EE\u03F4\u03F7\u03F9\u03FA\u03FD-\u042F\u0460\u0462\u0464\u0466\u0468\u046A\u046C\u046E\u0470\u0472\u0474\u0476\u0478\u047A\u047C\u047E\u0480\u048A\u048C\u048E\u0490\u0492\u0494\u0496\u0498\u049A\u049C\u049E\u04A0\u04A2\u04A4\u04A6\u04A8\u04AA\u04AC\u04AE\u04B0\u04B2\u04B4\u04B6\u04B8\u04BA\u04BC\u04BE\u04C0\u04C1\u04C3\u04C5\u04C7\u04C9\u04CB\u04CD\u04D0\u04D2\u04D4\u04D6\u04D8\u04DA\u04DC\u04DE\u04E0\u04E2\u04E4\u04E6\u04E8\u04EA\u04EC\u04EE\u04F0\u04F2\u04F4\u04F6\u04F8\u04FA\u04FC\u04FE\u0500\u0502\u0504\u0506\u0508\u050A\u050C\u050E\u0510\u0512\u0514\u0516\u0518\u051A\u051C\u051E\u0520\u0522\u0524\u0526\u0528\u052A\u052C\u052E\u0531-\u0556\u10A0-\u10C5\u10C7\u10CD\u13A0-\u13F5\u1C90-\u1CBA\u1CBD-\u1CBF\u1E00\u1E02\u1E04\u1E06\u1E08\u1E0A\u1E0C\u1E0E\u1E10\u1E12\u1E14\u1E16\u1E18\u1E1A\u1E1C\u1E1E\u1E20\u1E22\u1E24\u1E26\u1E28\u1E2A\u1E2C\u1E2E\u1E30\u1E32\u1E34\u1E36\u1E38\u1E3A\u1E3C\u1E3E\u1E40\u1E42\u1E44\u1E46\u1E48\u1E4A\u1E4C\u1E4E\u1E50\u1E52\u1E54\u1E56\u1E58\u1E5A\u1E5C\u1E5E\u1E60\u1E62\u1E64\u1E66\u1E68\u1E6A\u1E6C\u1E6E\u1E70\u1E72\u1E74\u1E76\u1E78\u1E7A\u1E7C\u1E7E\u1E80\u1E82\u1E84\u1E86\u1E88\u1E8A\u1E8C\u1E8E\u1E90\u1E92\u1E94\u1E9E\u1EA0\u1EA2\u1EA4\u1EA6\u1EA8\u1EAA\u1EAC\u1EAE\u1EB0\u1EB2\u1EB4\u1EB6\u1EB8\u1EBA\u1EBC\u1EBE\u1EC0\u1EC2\u1EC4\u1EC6\u1EC8\u1ECA\u1ECC\u1ECE\u1ED0\u1ED2\u1ED4\u1ED6\u1ED8\u1EDA\u1EDC\u1EDE\u1EE0\u1EE2\u1EE4\u1EE6\u1EE8\u1EEA\u1EEC\u1EEE\u1EF0\u1EF2\u1EF4\u1EF6\u1EF8\u1EFA\u1EFC\u1EFE\u1F08-\u1F0F\u1F18-\u1F1D\u1F28-\u1F2F\u1F38-\u1F3F\u1F48-\u1F4D\u1F59\u1F5B\u1F5D\u1F5F\u1F68-\u1F6F\u1FB8-\u1FBB\u1FC8-\u1FCB\u1FD8-\u1FDB\u1FE8-\u1FEC\u1FF8-\u1FFB\u2102\u2107\u210B-\u210D\u2110-\u2112\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u2130-\u2133\u213E\u213F\u2145\u2183\u2C00-\u2C2E\u2C60\u2C62-\u2C64\u2C67\u2C69\u2C6B\u2C6D-\u2C70\u2C72\u2C75\u2C7E-\u2C80\u2C82\u2C84\u2C86\u2C88\u2C8A\u2C8C\u2C8E\u2C90\u2C92\u2C94\u2C96\u2C98\u2C9A\u2C9C\u2C9E\u2CA0\u2CA2\u2CA4\u2CA6\u2CA8\u2CAA\u2CAC\u2CAE\u2CB0\u2CB2\u2CB4\u2CB6\u2CB8\u2CBA\u2CBC\u2CBE\u2CC0\u2CC2\u2CC4\u2CC6\u2CC8\u2CCA\u2CCC\u2CCE\u2CD0\u2CD2\u2CD4\u2CD6\u2CD8\u2CDA\u2CDC\u2CDE\u2CE0\u2CE2\u2CEB\u2CED\u2CF2\uA640\uA642\uA644\uA646\uA648\uA64A\uA64C\uA64E\uA650\uA652\uA654\uA656\uA658\uA65A\uA65C\uA65E\uA660\uA662\uA664\uA666\uA668\uA66A\uA66C\uA680\uA682\uA684\uA686\uA688\uA68A\uA68C\uA68E\uA690\uA692\uA694\uA696\uA698\uA69A\uA722\uA724\uA726\uA728\uA72A\uA72C\uA72E\uA732\uA734\uA736\uA738\uA73A\uA73C\uA73E\uA740\uA742\uA744\uA746\uA748\uA74A\uA74C\uA74E\uA750\uA752\uA754\uA756\uA758\uA75A\uA75C\uA75E\uA760\uA762\uA764\uA766\uA768\uA76A\uA76C\uA76E\uA779\uA77B\uA77D\uA77E\uA780\uA782\uA784\uA786\uA78B\uA78D\uA790\uA792\uA796\uA798\uA79A\uA79C\uA79E\uA7A0\uA7A2\uA7A4\uA7A6\uA7A8\uA7AA-\uA7AE\uA7B0-\uA7B4\uA7B6\uA7B8\uA7BA\uA7BC\uA7BE\uA7C2\uA7C4-\uA7C7\uA7C9\uA7F5\uFF21-\uFF3A', + 'astral': '\uD801[\uDC00-\uDC27\uDCB0-\uDCD3]|\uD803[\uDC80-\uDCB2]|\uD806[\uDCA0-\uDCBF]|\uD81B[\uDE40-\uDE5F]|\uD835[\uDC00-\uDC19\uDC34-\uDC4D\uDC68-\uDC81\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB5\uDCD0-\uDCE9\uDD04\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD38\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD6C-\uDD85\uDDA0-\uDDB9\uDDD4-\uDDED\uDE08-\uDE21\uDE3C-\uDE55\uDE70-\uDE89\uDEA8-\uDEC0\uDEE2-\uDEFA\uDF1C-\uDF34\uDF56-\uDF6E\uDF90-\uDFA8\uDFCA]|\uD83A[\uDD00-\uDD21]' + }, + { + 'name': 'M', + 'alias': 'Mark', + 'bmp': '\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u07FD\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08D3-\u08E1\u08E3-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962\u0963\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u09FE\u0A01-\u0A03\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AE2\u0AE3\u0AFA-\u0AFF\u0B01-\u0B03\u0B3C\u0B3E-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B55-\u0B57\u0B62\u0B63\u0B82\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0C00-\u0C04\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81-\u0C83\u0CBC\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CE2\u0CE3\u0D00-\u0D03\u0D3B\u0D3C\u0D3E-\u0D44\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D62\u0D63\u0D81-\u0D83\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102B-\u103E\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F\u109A-\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4-\u17D3\u17DD\u180B-\u180D\u1885\u1886\u18A9\u1920-\u192B\u1930-\u193B\u1A17-\u1A1B\u1A55-\u1A5E\u1A60-\u1A7C\u1A7F\u1AB0-\u1AC0\u1B00-\u1B04\u1B34-\u1B44\u1B6B-\u1B73\u1B80-\u1B82\u1BA1-\u1BAD\u1BE6-\u1BF3\u1C24-\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE8\u1CED\u1CF4\u1CF7-\u1CF9\u1DC0-\u1DF9\u1DFB-\u1DFF\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA66F-\uA672\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA823-\uA827\uA82C\uA880\uA881\uA8B4-\uA8C5\uA8E0-\uA8F1\uA8FF\uA926-\uA92D\uA947-\uA953\uA980-\uA983\uA9B3-\uA9C0\uA9E5\uAA29-\uAA36\uAA43\uAA4C\uAA4D\uAA7B-\uAA7D\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEB-\uAAEF\uAAF5\uAAF6\uABE3-\uABEA\uABEC\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F', + 'astral': '\uD800[\uDDFD\uDEE0\uDF76-\uDF7A]|\uD802[\uDE01-\uDE03\uDE05\uDE06\uDE0C-\uDE0F\uDE38-\uDE3A\uDE3F\uDEE5\uDEE6]|\uD803[\uDD24-\uDD27\uDEAB\uDEAC\uDF46-\uDF50]|\uD804[\uDC00-\uDC02\uDC38-\uDC46\uDC7F-\uDC82\uDCB0-\uDCBA\uDD00-\uDD02\uDD27-\uDD34\uDD45\uDD46\uDD73\uDD80-\uDD82\uDDB3-\uDDC0\uDDC9-\uDDCC\uDDCE\uDDCF\uDE2C-\uDE37\uDE3E\uDEDF-\uDEEA\uDF00-\uDF03\uDF3B\uDF3C\uDF3E-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF57\uDF62\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC35-\uDC46\uDC5E\uDCB0-\uDCC3\uDDAF-\uDDB5\uDDB8-\uDDC0\uDDDC\uDDDD\uDE30-\uDE40\uDEAB-\uDEB7\uDF1D-\uDF2B]|\uD806[\uDC2C-\uDC3A\uDD30-\uDD35\uDD37\uDD38\uDD3B-\uDD3E\uDD40\uDD42\uDD43\uDDD1-\uDDD7\uDDDA-\uDDE0\uDDE4\uDE01-\uDE0A\uDE33-\uDE39\uDE3B-\uDE3E\uDE47\uDE51-\uDE5B\uDE8A-\uDE99]|\uD807[\uDC2F-\uDC36\uDC38-\uDC3F\uDC92-\uDCA7\uDCA9-\uDCB6\uDD31-\uDD36\uDD3A\uDD3C\uDD3D\uDD3F-\uDD45\uDD47\uDD8A-\uDD8E\uDD90\uDD91\uDD93-\uDD97\uDEF3-\uDEF6]|\uD81A[\uDEF0-\uDEF4\uDF30-\uDF36]|\uD81B[\uDF4F\uDF51-\uDF87\uDF8F-\uDF92\uDFE4\uDFF0\uDFF1]|\uD82F[\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A\uDD30-\uDD36\uDEEC-\uDEEF]|\uD83A[\uDCD0-\uDCD6\uDD44-\uDD4A]|\uDB40[\uDD00-\uDDEF]' + }, + { + 'name': 'Mc', + 'alias': 'Spacing_Mark', + 'bmp': '\u0903\u093B\u093E-\u0940\u0949-\u094C\u094E\u094F\u0982\u0983\u09BE-\u09C0\u09C7\u09C8\u09CB\u09CC\u09D7\u0A03\u0A3E-\u0A40\u0A83\u0ABE-\u0AC0\u0AC9\u0ACB\u0ACC\u0B02\u0B03\u0B3E\u0B40\u0B47\u0B48\u0B4B\u0B4C\u0B57\u0BBE\u0BBF\u0BC1\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCC\u0BD7\u0C01-\u0C03\u0C41-\u0C44\u0C82\u0C83\u0CBE\u0CC0-\u0CC4\u0CC7\u0CC8\u0CCA\u0CCB\u0CD5\u0CD6\u0D02\u0D03\u0D3E-\u0D40\u0D46-\u0D48\u0D4A-\u0D4C\u0D57\u0D82\u0D83\u0DCF-\u0DD1\u0DD8-\u0DDF\u0DF2\u0DF3\u0F3E\u0F3F\u0F7F\u102B\u102C\u1031\u1038\u103B\u103C\u1056\u1057\u1062-\u1064\u1067-\u106D\u1083\u1084\u1087-\u108C\u108F\u109A-\u109C\u17B6\u17BE-\u17C5\u17C7\u17C8\u1923-\u1926\u1929-\u192B\u1930\u1931\u1933-\u1938\u1A19\u1A1A\u1A55\u1A57\u1A61\u1A63\u1A64\u1A6D-\u1A72\u1B04\u1B35\u1B3B\u1B3D-\u1B41\u1B43\u1B44\u1B82\u1BA1\u1BA6\u1BA7\u1BAA\u1BE7\u1BEA-\u1BEC\u1BEE\u1BF2\u1BF3\u1C24-\u1C2B\u1C34\u1C35\u1CE1\u1CF7\u302E\u302F\uA823\uA824\uA827\uA880\uA881\uA8B4-\uA8C3\uA952\uA953\uA983\uA9B4\uA9B5\uA9BA\uA9BB\uA9BE-\uA9C0\uAA2F\uAA30\uAA33\uAA34\uAA4D\uAA7B\uAA7D\uAAEB\uAAEE\uAAEF\uAAF5\uABE3\uABE4\uABE6\uABE7\uABE9\uABEA\uABEC', + 'astral': '\uD804[\uDC00\uDC02\uDC82\uDCB0-\uDCB2\uDCB7\uDCB8\uDD2C\uDD45\uDD46\uDD82\uDDB3-\uDDB5\uDDBF\uDDC0\uDDCE\uDE2C-\uDE2E\uDE32\uDE33\uDE35\uDEE0-\uDEE2\uDF02\uDF03\uDF3E\uDF3F\uDF41-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF57\uDF62\uDF63]|\uD805[\uDC35-\uDC37\uDC40\uDC41\uDC45\uDCB0-\uDCB2\uDCB9\uDCBB-\uDCBE\uDCC1\uDDAF-\uDDB1\uDDB8-\uDDBB\uDDBE\uDE30-\uDE32\uDE3B\uDE3C\uDE3E\uDEAC\uDEAE\uDEAF\uDEB6\uDF20\uDF21\uDF26]|\uD806[\uDC2C-\uDC2E\uDC38\uDD30-\uDD35\uDD37\uDD38\uDD3D\uDD40\uDD42\uDDD1-\uDDD3\uDDDC-\uDDDF\uDDE4\uDE39\uDE57\uDE58\uDE97]|\uD807[\uDC2F\uDC3E\uDCA9\uDCB1\uDCB4\uDD8A-\uDD8E\uDD93\uDD94\uDD96\uDEF5\uDEF6]|\uD81B[\uDF51-\uDF87\uDFF0\uDFF1]|\uD834[\uDD65\uDD66\uDD6D-\uDD72]' + }, + { + 'name': 'Me', + 'alias': 'Enclosing_Mark', + 'bmp': '\u0488\u0489\u1ABE\u20DD-\u20E0\u20E2-\u20E4\uA670-\uA672' + }, + { + 'name': 'Mn', + 'alias': 'Nonspacing_Mark', + 'bmp': '\u0300-\u036F\u0483-\u0487\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u07FD\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08D3-\u08E1\u08E3-\u0902\u093A\u093C\u0941-\u0948\u094D\u0951-\u0957\u0962\u0963\u0981\u09BC\u09C1-\u09C4\u09CD\u09E2\u09E3\u09FE\u0A01\u0A02\u0A3C\u0A41\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81\u0A82\u0ABC\u0AC1-\u0AC5\u0AC7\u0AC8\u0ACD\u0AE2\u0AE3\u0AFA-\u0AFF\u0B01\u0B3C\u0B3F\u0B41-\u0B44\u0B4D\u0B55\u0B56\u0B62\u0B63\u0B82\u0BC0\u0BCD\u0C00\u0C04\u0C3E-\u0C40\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81\u0CBC\u0CBF\u0CC6\u0CCC\u0CCD\u0CE2\u0CE3\u0D00\u0D01\u0D3B\u0D3C\u0D41-\u0D44\u0D4D\u0D62\u0D63\u0D81\u0DCA\u0DD2-\u0DD4\u0DD6\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F71-\u0F7E\u0F80-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102D-\u1030\u1032-\u1037\u1039\u103A\u103D\u103E\u1058\u1059\u105E-\u1060\u1071-\u1074\u1082\u1085\u1086\u108D\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4\u17B5\u17B7-\u17BD\u17C6\u17C9-\u17D3\u17DD\u180B-\u180D\u1885\u1886\u18A9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193B\u1A17\u1A18\u1A1B\u1A56\u1A58-\u1A5E\u1A60\u1A62\u1A65-\u1A6C\u1A73-\u1A7C\u1A7F\u1AB0-\u1ABD\u1ABF\u1AC0\u1B00-\u1B03\u1B34\u1B36-\u1B3A\u1B3C\u1B42\u1B6B-\u1B73\u1B80\u1B81\u1BA2-\u1BA5\u1BA8\u1BA9\u1BAB-\u1BAD\u1BE6\u1BE8\u1BE9\u1BED\u1BEF-\u1BF1\u1C2C-\u1C33\u1C36\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE0\u1CE2-\u1CE8\u1CED\u1CF4\u1CF8\u1CF9\u1DC0-\u1DF9\u1DFB-\u1DFF\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302D\u3099\u309A\uA66F\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA825\uA826\uA82C\uA8C4\uA8C5\uA8E0-\uA8F1\uA8FF\uA926-\uA92D\uA947-\uA951\uA980-\uA982\uA9B3\uA9B6-\uA9B9\uA9BC\uA9BD\uA9E5\uAA29-\uAA2E\uAA31\uAA32\uAA35\uAA36\uAA43\uAA4C\uAA7C\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEC\uAAED\uAAF6\uABE5\uABE8\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F', + 'astral': '\uD800[\uDDFD\uDEE0\uDF76-\uDF7A]|\uD802[\uDE01-\uDE03\uDE05\uDE06\uDE0C-\uDE0F\uDE38-\uDE3A\uDE3F\uDEE5\uDEE6]|\uD803[\uDD24-\uDD27\uDEAB\uDEAC\uDF46-\uDF50]|\uD804[\uDC01\uDC38-\uDC46\uDC7F-\uDC81\uDCB3-\uDCB6\uDCB9\uDCBA\uDD00-\uDD02\uDD27-\uDD2B\uDD2D-\uDD34\uDD73\uDD80\uDD81\uDDB6-\uDDBE\uDDC9-\uDDCC\uDDCF\uDE2F-\uDE31\uDE34\uDE36\uDE37\uDE3E\uDEDF\uDEE3-\uDEEA\uDF00\uDF01\uDF3B\uDF3C\uDF40\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC38-\uDC3F\uDC42-\uDC44\uDC46\uDC5E\uDCB3-\uDCB8\uDCBA\uDCBF\uDCC0\uDCC2\uDCC3\uDDB2-\uDDB5\uDDBC\uDDBD\uDDBF\uDDC0\uDDDC\uDDDD\uDE33-\uDE3A\uDE3D\uDE3F\uDE40\uDEAB\uDEAD\uDEB0-\uDEB5\uDEB7\uDF1D-\uDF1F\uDF22-\uDF25\uDF27-\uDF2B]|\uD806[\uDC2F-\uDC37\uDC39\uDC3A\uDD3B\uDD3C\uDD3E\uDD43\uDDD4-\uDDD7\uDDDA\uDDDB\uDDE0\uDE01-\uDE0A\uDE33-\uDE38\uDE3B-\uDE3E\uDE47\uDE51-\uDE56\uDE59-\uDE5B\uDE8A-\uDE96\uDE98\uDE99]|\uD807[\uDC30-\uDC36\uDC38-\uDC3D\uDC3F\uDC92-\uDCA7\uDCAA-\uDCB0\uDCB2\uDCB3\uDCB5\uDCB6\uDD31-\uDD36\uDD3A\uDD3C\uDD3D\uDD3F-\uDD45\uDD47\uDD90\uDD91\uDD95\uDD97\uDEF3\uDEF4]|\uD81A[\uDEF0-\uDEF4\uDF30-\uDF36]|\uD81B[\uDF4F\uDF8F-\uDF92\uDFE4]|\uD82F[\uDC9D\uDC9E]|\uD834[\uDD67-\uDD69\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A\uDD30-\uDD36\uDEEC-\uDEEF]|\uD83A[\uDCD0-\uDCD6\uDD44-\uDD4A]|\uDB40[\uDD00-\uDDEF]' + }, + { + 'name': 'N', + 'alias': 'Number', + 'bmp': '0-9\xB2\xB3\xB9\xBC-\xBE\u0660-\u0669\u06F0-\u06F9\u07C0-\u07C9\u0966-\u096F\u09E6-\u09EF\u09F4-\u09F9\u0A66-\u0A6F\u0AE6-\u0AEF\u0B66-\u0B6F\u0B72-\u0B77\u0BE6-\u0BF2\u0C66-\u0C6F\u0C78-\u0C7E\u0CE6-\u0CEF\u0D58-\u0D5E\u0D66-\u0D78\u0DE6-\u0DEF\u0E50-\u0E59\u0ED0-\u0ED9\u0F20-\u0F33\u1040-\u1049\u1090-\u1099\u1369-\u137C\u16EE-\u16F0\u17E0-\u17E9\u17F0-\u17F9\u1810-\u1819\u1946-\u194F\u19D0-\u19DA\u1A80-\u1A89\u1A90-\u1A99\u1B50-\u1B59\u1BB0-\u1BB9\u1C40-\u1C49\u1C50-\u1C59\u2070\u2074-\u2079\u2080-\u2089\u2150-\u2182\u2185-\u2189\u2460-\u249B\u24EA-\u24FF\u2776-\u2793\u2CFD\u3007\u3021-\u3029\u3038-\u303A\u3192-\u3195\u3220-\u3229\u3248-\u324F\u3251-\u325F\u3280-\u3289\u32B1-\u32BF\uA620-\uA629\uA6E6-\uA6EF\uA830-\uA835\uA8D0-\uA8D9\uA900-\uA909\uA9D0-\uA9D9\uA9F0-\uA9F9\uAA50-\uAA59\uABF0-\uABF9\uFF10-\uFF19', + 'astral': '\uD800[\uDD07-\uDD33\uDD40-\uDD78\uDD8A\uDD8B\uDEE1-\uDEFB\uDF20-\uDF23\uDF41\uDF4A\uDFD1-\uDFD5]|\uD801[\uDCA0-\uDCA9]|\uD802[\uDC58-\uDC5F\uDC79-\uDC7F\uDCA7-\uDCAF\uDCFB-\uDCFF\uDD16-\uDD1B\uDDBC\uDDBD\uDDC0-\uDDCF\uDDD2-\uDDFF\uDE40-\uDE48\uDE7D\uDE7E\uDE9D-\uDE9F\uDEEB-\uDEEF\uDF58-\uDF5F\uDF78-\uDF7F\uDFA9-\uDFAF]|\uD803[\uDCFA-\uDCFF\uDD30-\uDD39\uDE60-\uDE7E\uDF1D-\uDF26\uDF51-\uDF54\uDFC5-\uDFCB]|\uD804[\uDC52-\uDC6F\uDCF0-\uDCF9\uDD36-\uDD3F\uDDD0-\uDDD9\uDDE1-\uDDF4\uDEF0-\uDEF9]|\uD805[\uDC50-\uDC59\uDCD0-\uDCD9\uDE50-\uDE59\uDEC0-\uDEC9\uDF30-\uDF3B]|\uD806[\uDCE0-\uDCF2\uDD50-\uDD59]|\uD807[\uDC50-\uDC6C\uDD50-\uDD59\uDDA0-\uDDA9\uDFC0-\uDFD4]|\uD809[\uDC00-\uDC6E]|\uD81A[\uDE60-\uDE69\uDF50-\uDF59\uDF5B-\uDF61]|\uD81B[\uDE80-\uDE96]|\uD834[\uDEE0-\uDEF3\uDF60-\uDF78]|\uD835[\uDFCE-\uDFFF]|\uD838[\uDD40-\uDD49\uDEF0-\uDEF9]|\uD83A[\uDCC7-\uDCCF\uDD50-\uDD59]|\uD83B[\uDC71-\uDCAB\uDCAD-\uDCAF\uDCB1-\uDCB4\uDD01-\uDD2D\uDD2F-\uDD3D]|\uD83C[\uDD00-\uDD0C]|\uD83E[\uDFF0-\uDFF9]' + }, + { + 'name': 'Nd', + 'alias': 'Decimal_Number', + 'bmp': '0-9\u0660-\u0669\u06F0-\u06F9\u07C0-\u07C9\u0966-\u096F\u09E6-\u09EF\u0A66-\u0A6F\u0AE6-\u0AEF\u0B66-\u0B6F\u0BE6-\u0BEF\u0C66-\u0C6F\u0CE6-\u0CEF\u0D66-\u0D6F\u0DE6-\u0DEF\u0E50-\u0E59\u0ED0-\u0ED9\u0F20-\u0F29\u1040-\u1049\u1090-\u1099\u17E0-\u17E9\u1810-\u1819\u1946-\u194F\u19D0-\u19D9\u1A80-\u1A89\u1A90-\u1A99\u1B50-\u1B59\u1BB0-\u1BB9\u1C40-\u1C49\u1C50-\u1C59\uA620-\uA629\uA8D0-\uA8D9\uA900-\uA909\uA9D0-\uA9D9\uA9F0-\uA9F9\uAA50-\uAA59\uABF0-\uABF9\uFF10-\uFF19', + 'astral': '\uD801[\uDCA0-\uDCA9]|\uD803[\uDD30-\uDD39]|\uD804[\uDC66-\uDC6F\uDCF0-\uDCF9\uDD36-\uDD3F\uDDD0-\uDDD9\uDEF0-\uDEF9]|\uD805[\uDC50-\uDC59\uDCD0-\uDCD9\uDE50-\uDE59\uDEC0-\uDEC9\uDF30-\uDF39]|\uD806[\uDCE0-\uDCE9\uDD50-\uDD59]|\uD807[\uDC50-\uDC59\uDD50-\uDD59\uDDA0-\uDDA9]|\uD81A[\uDE60-\uDE69\uDF50-\uDF59]|\uD835[\uDFCE-\uDFFF]|\uD838[\uDD40-\uDD49\uDEF0-\uDEF9]|\uD83A[\uDD50-\uDD59]|\uD83E[\uDFF0-\uDFF9]' + }, + { + 'name': 'Nl', + 'alias': 'Letter_Number', + 'bmp': '\u16EE-\u16F0\u2160-\u2182\u2185-\u2188\u3007\u3021-\u3029\u3038-\u303A\uA6E6-\uA6EF', + 'astral': '\uD800[\uDD40-\uDD74\uDF41\uDF4A\uDFD1-\uDFD5]|\uD809[\uDC00-\uDC6E]' + }, + { + 'name': 'No', + 'alias': 'Other_Number', + 'bmp': '\xB2\xB3\xB9\xBC-\xBE\u09F4-\u09F9\u0B72-\u0B77\u0BF0-\u0BF2\u0C78-\u0C7E\u0D58-\u0D5E\u0D70-\u0D78\u0F2A-\u0F33\u1369-\u137C\u17F0-\u17F9\u19DA\u2070\u2074-\u2079\u2080-\u2089\u2150-\u215F\u2189\u2460-\u249B\u24EA-\u24FF\u2776-\u2793\u2CFD\u3192-\u3195\u3220-\u3229\u3248-\u324F\u3251-\u325F\u3280-\u3289\u32B1-\u32BF\uA830-\uA835', + 'astral': '\uD800[\uDD07-\uDD33\uDD75-\uDD78\uDD8A\uDD8B\uDEE1-\uDEFB\uDF20-\uDF23]|\uD802[\uDC58-\uDC5F\uDC79-\uDC7F\uDCA7-\uDCAF\uDCFB-\uDCFF\uDD16-\uDD1B\uDDBC\uDDBD\uDDC0-\uDDCF\uDDD2-\uDDFF\uDE40-\uDE48\uDE7D\uDE7E\uDE9D-\uDE9F\uDEEB-\uDEEF\uDF58-\uDF5F\uDF78-\uDF7F\uDFA9-\uDFAF]|\uD803[\uDCFA-\uDCFF\uDE60-\uDE7E\uDF1D-\uDF26\uDF51-\uDF54\uDFC5-\uDFCB]|\uD804[\uDC52-\uDC65\uDDE1-\uDDF4]|\uD805[\uDF3A\uDF3B]|\uD806[\uDCEA-\uDCF2]|\uD807[\uDC5A-\uDC6C\uDFC0-\uDFD4]|\uD81A[\uDF5B-\uDF61]|\uD81B[\uDE80-\uDE96]|\uD834[\uDEE0-\uDEF3\uDF60-\uDF78]|\uD83A[\uDCC7-\uDCCF]|\uD83B[\uDC71-\uDCAB\uDCAD-\uDCAF\uDCB1-\uDCB4\uDD01-\uDD2D\uDD2F-\uDD3D]|\uD83C[\uDD00-\uDD0C]' + }, + { + 'name': 'P', + 'alias': 'Punctuation', + 'bmp': '!-#%-\\*,-\\/:;\\?@\\[-\\]_\\{\\}\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65', + 'astral': '\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD803[\uDEAD\uDF55-\uDF59]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC8\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDC4B-\uDC4F\uDC5A\uDC5B\uDC5D\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDE60-\uDE6C\uDF3C-\uDF3E]|\uD806[\uDC3B\uDD44-\uDD46\uDDE2\uDE3F-\uDE46\uDE9A-\uDE9C\uDE9E-\uDEA2]|\uD807[\uDC41-\uDC45\uDC70\uDC71\uDEF7\uDEF8\uDFFF]|\uD809[\uDC70-\uDC74]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD81B[\uDE97-\uDE9A\uDFE2]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]|\uD83A[\uDD5E\uDD5F]' + }, + { + 'name': 'Pc', + 'alias': 'Connector_Punctuation', + 'bmp': '_\u203F\u2040\u2054\uFE33\uFE34\uFE4D-\uFE4F\uFF3F' + }, + { + 'name': 'Pd', + 'alias': 'Dash_Punctuation', + 'bmp': '\\-\u058A\u05BE\u1400\u1806\u2010-\u2015\u2E17\u2E1A\u2E3A\u2E3B\u2E40\u301C\u3030\u30A0\uFE31\uFE32\uFE58\uFE63\uFF0D', + 'astral': '\uD803\uDEAD' + }, + { + 'name': 'Pe', + 'alias': 'Close_Punctuation', + 'bmp': '\\)\\]\\}\u0F3B\u0F3D\u169C\u2046\u207E\u208E\u2309\u230B\u232A\u2769\u276B\u276D\u276F\u2771\u2773\u2775\u27C6\u27E7\u27E9\u27EB\u27ED\u27EF\u2984\u2986\u2988\u298A\u298C\u298E\u2990\u2992\u2994\u2996\u2998\u29D9\u29DB\u29FD\u2E23\u2E25\u2E27\u2E29\u3009\u300B\u300D\u300F\u3011\u3015\u3017\u3019\u301B\u301E\u301F\uFD3E\uFE18\uFE36\uFE38\uFE3A\uFE3C\uFE3E\uFE40\uFE42\uFE44\uFE48\uFE5A\uFE5C\uFE5E\uFF09\uFF3D\uFF5D\uFF60\uFF63' + }, + { + 'name': 'Pf', + 'alias': 'Final_Punctuation', + 'bmp': '\xBB\u2019\u201D\u203A\u2E03\u2E05\u2E0A\u2E0D\u2E1D\u2E21' + }, + { + 'name': 'Pi', + 'alias': 'Initial_Punctuation', + 'bmp': '\xAB\u2018\u201B\u201C\u201F\u2039\u2E02\u2E04\u2E09\u2E0C\u2E1C\u2E20' + }, + { + 'name': 'Po', + 'alias': 'Other_Punctuation', + 'bmp': '!-#%-\'\\*,\\.\\/:;\\?@\\\xA1\xA7\xB6\xB7\xBF\u037E\u0387\u055A-\u055F\u0589\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u166E\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u1805\u1807-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2016\u2017\u2020-\u2027\u2030-\u2038\u203B-\u203E\u2041-\u2043\u2047-\u2051\u2053\u2055-\u205E\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00\u2E01\u2E06-\u2E08\u2E0B\u2E0E-\u2E16\u2E18\u2E19\u2E1B\u2E1E\u2E1F\u2E2A-\u2E2E\u2E30-\u2E39\u2E3C-\u2E3F\u2E41\u2E43-\u2E4F\u2E52\u3001-\u3003\u303D\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFE10-\uFE16\uFE19\uFE30\uFE45\uFE46\uFE49-\uFE4C\uFE50-\uFE52\uFE54-\uFE57\uFE5F-\uFE61\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF07\uFF0A\uFF0C\uFF0E\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3C\uFF61\uFF64\uFF65', + 'astral': '\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD803[\uDF55-\uDF59]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC8\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDC4B-\uDC4F\uDC5A\uDC5B\uDC5D\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDE60-\uDE6C\uDF3C-\uDF3E]|\uD806[\uDC3B\uDD44-\uDD46\uDDE2\uDE3F-\uDE46\uDE9A-\uDE9C\uDE9E-\uDEA2]|\uD807[\uDC41-\uDC45\uDC70\uDC71\uDEF7\uDEF8\uDFFF]|\uD809[\uDC70-\uDC74]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD81B[\uDE97-\uDE9A\uDFE2]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]|\uD83A[\uDD5E\uDD5F]' + }, + { + 'name': 'Ps', + 'alias': 'Open_Punctuation', + 'bmp': '\\(\\[\\{\u0F3A\u0F3C\u169B\u201A\u201E\u2045\u207D\u208D\u2308\u230A\u2329\u2768\u276A\u276C\u276E\u2770\u2772\u2774\u27C5\u27E6\u27E8\u27EA\u27EC\u27EE\u2983\u2985\u2987\u2989\u298B\u298D\u298F\u2991\u2993\u2995\u2997\u29D8\u29DA\u29FC\u2E22\u2E24\u2E26\u2E28\u2E42\u3008\u300A\u300C\u300E\u3010\u3014\u3016\u3018\u301A\u301D\uFD3F\uFE17\uFE35\uFE37\uFE39\uFE3B\uFE3D\uFE3F\uFE41\uFE43\uFE47\uFE59\uFE5B\uFE5D\uFF08\uFF3B\uFF5B\uFF5F\uFF62' + }, + { + 'name': 'S', + 'alias': 'Symbol', + 'bmp': '\\$\\+<->\\^`\\|~\xA2-\xA6\xA8\xA9\xAC\xAE-\xB1\xB4\xB8\xD7\xF7\u02C2-\u02C5\u02D2-\u02DF\u02E5-\u02EB\u02ED\u02EF-\u02FF\u0375\u0384\u0385\u03F6\u0482\u058D-\u058F\u0606-\u0608\u060B\u060E\u060F\u06DE\u06E9\u06FD\u06FE\u07F6\u07FE\u07FF\u09F2\u09F3\u09FA\u09FB\u0AF1\u0B70\u0BF3-\u0BFA\u0C7F\u0D4F\u0D79\u0E3F\u0F01-\u0F03\u0F13\u0F15-\u0F17\u0F1A-\u0F1F\u0F34\u0F36\u0F38\u0FBE-\u0FC5\u0FC7-\u0FCC\u0FCE\u0FCF\u0FD5-\u0FD8\u109E\u109F\u1390-\u1399\u166D\u17DB\u1940\u19DE-\u19FF\u1B61-\u1B6A\u1B74-\u1B7C\u1FBD\u1FBF-\u1FC1\u1FCD-\u1FCF\u1FDD-\u1FDF\u1FED-\u1FEF\u1FFD\u1FFE\u2044\u2052\u207A-\u207C\u208A-\u208C\u20A0-\u20BF\u2100\u2101\u2103-\u2106\u2108\u2109\u2114\u2116-\u2118\u211E-\u2123\u2125\u2127\u2129\u212E\u213A\u213B\u2140-\u2144\u214A-\u214D\u214F\u218A\u218B\u2190-\u2307\u230C-\u2328\u232B-\u2426\u2440-\u244A\u249C-\u24E9\u2500-\u2767\u2794-\u27C4\u27C7-\u27E5\u27F0-\u2982\u2999-\u29D7\u29DC-\u29FB\u29FE-\u2B73\u2B76-\u2B95\u2B97-\u2BFF\u2CE5-\u2CEA\u2E50\u2E51\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3004\u3012\u3013\u3020\u3036\u3037\u303E\u303F\u309B\u309C\u3190\u3191\u3196-\u319F\u31C0-\u31E3\u3200-\u321E\u322A-\u3247\u3250\u3260-\u327F\u328A-\u32B0\u32C0-\u33FF\u4DC0-\u4DFF\uA490-\uA4C6\uA700-\uA716\uA720\uA721\uA789\uA78A\uA828-\uA82B\uA836-\uA839\uAA77-\uAA79\uAB5B\uAB6A\uAB6B\uFB29\uFBB2-\uFBC1\uFDFC\uFDFD\uFE62\uFE64-\uFE66\uFE69\uFF04\uFF0B\uFF1C-\uFF1E\uFF3E\uFF40\uFF5C\uFF5E\uFFE0-\uFFE6\uFFE8-\uFFEE\uFFFC\uFFFD', + 'astral': '\uD800[\uDD37-\uDD3F\uDD79-\uDD89\uDD8C-\uDD8E\uDD90-\uDD9C\uDDA0\uDDD0-\uDDFC]|\uD802[\uDC77\uDC78\uDEC8]|\uD805\uDF3F|\uD807[\uDFD5-\uDFF1]|\uD81A[\uDF3C-\uDF3F\uDF45]|\uD82F\uDC9C|\uD834[\uDC00-\uDCF5\uDD00-\uDD26\uDD29-\uDD64\uDD6A-\uDD6C\uDD83\uDD84\uDD8C-\uDDA9\uDDAE-\uDDE8\uDE00-\uDE41\uDE45\uDF00-\uDF56]|\uD835[\uDEC1\uDEDB\uDEFB\uDF15\uDF35\uDF4F\uDF6F\uDF89\uDFA9\uDFC3]|\uD836[\uDC00-\uDDFF\uDE37-\uDE3A\uDE6D-\uDE74\uDE76-\uDE83\uDE85\uDE86]|\uD838[\uDD4F\uDEFF]|\uD83B[\uDCAC\uDCB0\uDD2E\uDEF0\uDEF1]|\uD83C[\uDC00-\uDC2B\uDC30-\uDC93\uDCA0-\uDCAE\uDCB1-\uDCBF\uDCC1-\uDCCF\uDCD1-\uDCF5\uDD0D-\uDDAD\uDDE6-\uDE02\uDE10-\uDE3B\uDE40-\uDE48\uDE50\uDE51\uDE60-\uDE65\uDF00-\uDFFF]|\uD83D[\uDC00-\uDED7\uDEE0-\uDEEC\uDEF0-\uDEFC\uDF00-\uDF73\uDF80-\uDFD8\uDFE0-\uDFEB]|\uD83E[\uDC00-\uDC0B\uDC10-\uDC47\uDC50-\uDC59\uDC60-\uDC87\uDC90-\uDCAD\uDCB0\uDCB1\uDD00-\uDD78\uDD7A-\uDDCB\uDDCD-\uDE53\uDE60-\uDE6D\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6\uDF00-\uDF92\uDF94-\uDFCA]' + }, + { + 'name': 'Sc', + 'alias': 'Currency_Symbol', + 'bmp': '\\$\xA2-\xA5\u058F\u060B\u07FE\u07FF\u09F2\u09F3\u09FB\u0AF1\u0BF9\u0E3F\u17DB\u20A0-\u20BF\uA838\uFDFC\uFE69\uFF04\uFFE0\uFFE1\uFFE5\uFFE6', + 'astral': '\uD807[\uDFDD-\uDFE0]|\uD838\uDEFF|\uD83B\uDCB0' + }, + { + 'name': 'Sk', + 'alias': 'Modifier_Symbol', + 'bmp': '\\^`\xA8\xAF\xB4\xB8\u02C2-\u02C5\u02D2-\u02DF\u02E5-\u02EB\u02ED\u02EF-\u02FF\u0375\u0384\u0385\u1FBD\u1FBF-\u1FC1\u1FCD-\u1FCF\u1FDD-\u1FDF\u1FED-\u1FEF\u1FFD\u1FFE\u309B\u309C\uA700-\uA716\uA720\uA721\uA789\uA78A\uAB5B\uAB6A\uAB6B\uFBB2-\uFBC1\uFF3E\uFF40\uFFE3', + 'astral': '\uD83C[\uDFFB-\uDFFF]' + }, + { + 'name': 'Sm', + 'alias': 'Math_Symbol', + 'bmp': '\\+<->\\|~\xAC\xB1\xD7\xF7\u03F6\u0606-\u0608\u2044\u2052\u207A-\u207C\u208A-\u208C\u2118\u2140-\u2144\u214B\u2190-\u2194\u219A\u219B\u21A0\u21A3\u21A6\u21AE\u21CE\u21CF\u21D2\u21D4\u21F4-\u22FF\u2320\u2321\u237C\u239B-\u23B3\u23DC-\u23E1\u25B7\u25C1\u25F8-\u25FF\u266F\u27C0-\u27C4\u27C7-\u27E5\u27F0-\u27FF\u2900-\u2982\u2999-\u29D7\u29DC-\u29FB\u29FE-\u2AFF\u2B30-\u2B44\u2B47-\u2B4C\uFB29\uFE62\uFE64-\uFE66\uFF0B\uFF1C-\uFF1E\uFF5C\uFF5E\uFFE2\uFFE9-\uFFEC', + 'astral': '\uD835[\uDEC1\uDEDB\uDEFB\uDF15\uDF35\uDF4F\uDF6F\uDF89\uDFA9\uDFC3]|\uD83B[\uDEF0\uDEF1]' + }, + { + 'name': 'So', + 'alias': 'Other_Symbol', + 'bmp': '\xA6\xA9\xAE\xB0\u0482\u058D\u058E\u060E\u060F\u06DE\u06E9\u06FD\u06FE\u07F6\u09FA\u0B70\u0BF3-\u0BF8\u0BFA\u0C7F\u0D4F\u0D79\u0F01-\u0F03\u0F13\u0F15-\u0F17\u0F1A-\u0F1F\u0F34\u0F36\u0F38\u0FBE-\u0FC5\u0FC7-\u0FCC\u0FCE\u0FCF\u0FD5-\u0FD8\u109E\u109F\u1390-\u1399\u166D\u1940\u19DE-\u19FF\u1B61-\u1B6A\u1B74-\u1B7C\u2100\u2101\u2103-\u2106\u2108\u2109\u2114\u2116\u2117\u211E-\u2123\u2125\u2127\u2129\u212E\u213A\u213B\u214A\u214C\u214D\u214F\u218A\u218B\u2195-\u2199\u219C-\u219F\u21A1\u21A2\u21A4\u21A5\u21A7-\u21AD\u21AF-\u21CD\u21D0\u21D1\u21D3\u21D5-\u21F3\u2300-\u2307\u230C-\u231F\u2322-\u2328\u232B-\u237B\u237D-\u239A\u23B4-\u23DB\u23E2-\u2426\u2440-\u244A\u249C-\u24E9\u2500-\u25B6\u25B8-\u25C0\u25C2-\u25F7\u2600-\u266E\u2670-\u2767\u2794-\u27BF\u2800-\u28FF\u2B00-\u2B2F\u2B45\u2B46\u2B4D-\u2B73\u2B76-\u2B95\u2B97-\u2BFF\u2CE5-\u2CEA\u2E50\u2E51\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3004\u3012\u3013\u3020\u3036\u3037\u303E\u303F\u3190\u3191\u3196-\u319F\u31C0-\u31E3\u3200-\u321E\u322A-\u3247\u3250\u3260-\u327F\u328A-\u32B0\u32C0-\u33FF\u4DC0-\u4DFF\uA490-\uA4C6\uA828-\uA82B\uA836\uA837\uA839\uAA77-\uAA79\uFDFD\uFFE4\uFFE8\uFFED\uFFEE\uFFFC\uFFFD', + 'astral': '\uD800[\uDD37-\uDD3F\uDD79-\uDD89\uDD8C-\uDD8E\uDD90-\uDD9C\uDDA0\uDDD0-\uDDFC]|\uD802[\uDC77\uDC78\uDEC8]|\uD805\uDF3F|\uD807[\uDFD5-\uDFDC\uDFE1-\uDFF1]|\uD81A[\uDF3C-\uDF3F\uDF45]|\uD82F\uDC9C|\uD834[\uDC00-\uDCF5\uDD00-\uDD26\uDD29-\uDD64\uDD6A-\uDD6C\uDD83\uDD84\uDD8C-\uDDA9\uDDAE-\uDDE8\uDE00-\uDE41\uDE45\uDF00-\uDF56]|\uD836[\uDC00-\uDDFF\uDE37-\uDE3A\uDE6D-\uDE74\uDE76-\uDE83\uDE85\uDE86]|\uD838\uDD4F|\uD83B[\uDCAC\uDD2E]|\uD83C[\uDC00-\uDC2B\uDC30-\uDC93\uDCA0-\uDCAE\uDCB1-\uDCBF\uDCC1-\uDCCF\uDCD1-\uDCF5\uDD0D-\uDDAD\uDDE6-\uDE02\uDE10-\uDE3B\uDE40-\uDE48\uDE50\uDE51\uDE60-\uDE65\uDF00-\uDFFA]|\uD83D[\uDC00-\uDED7\uDEE0-\uDEEC\uDEF0-\uDEFC\uDF00-\uDF73\uDF80-\uDFD8\uDFE0-\uDFEB]|\uD83E[\uDC00-\uDC0B\uDC10-\uDC47\uDC50-\uDC59\uDC60-\uDC87\uDC90-\uDCAD\uDCB0\uDCB1\uDD00-\uDD78\uDD7A-\uDDCB\uDDCD-\uDE53\uDE60-\uDE6D\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6\uDF00-\uDF92\uDF94-\uDFCA]' + }, + { + 'name': 'Z', + 'alias': 'Separator', + 'bmp': ' \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000' + }, + { + 'name': 'Zl', + 'alias': 'Line_Separator', + 'bmp': '\u2028' + }, + { + 'name': 'Zp', + 'alias': 'Paragraph_Separator', + 'bmp': '\u2029' + }, + { + 'name': 'Zs', + 'alias': 'Space_Separator', + 'bmp': ' \xA0\u1680\u2000-\u200A\u202F\u205F\u3000' + } +]; + +var jabref = createCommonjsModule(function (module, exports) { +Object.defineProperty(exports, "__esModule", { value: true }); +exports.parse = void 0; +function decode(s, sep = ';') { + s = s.replace(/\n/g, ''); + let pos = 0; + const records = ['']; + while (pos < s.length) { + switch (s[pos]) { + case '\\': + pos++; + records[0] += s[pos]; + break; + case sep: + records.unshift(''); + break; + default: + records[0] += s[pos]; + } + pos++; + } + return records.reverse().filter(record => record); +} +const prefixes = { + fileDirectory: 'jabref-meta: fileDirectory:', + groupsversion: 'jabref-meta: groupsversion:', + groupstree: 'jabref-meta: groupstree:', + grouping: 'jabref-meta: grouping:', +}; +/** + * Import the JabRef groups from the `@string` comments in which they were stored. You would typically pass the comments parsed by [[bibtex.parse]] in here. + * + * JabRef knows several group types, and this parser parses most, but not all of them: + * + * * independent group: the keys listed in the group are the entries that are considered to belong to it + * * intersection: the keys listed in the group are considered to belong to the group if they're also in the parent group + * * union: the keys listed in the group are considered to belong to the group, and also the keys that are in the parent group + * * query: not supported by this parser + */ +function parse(comments) { + const result = { + root: [], + groups: {}, + fileDirectory: '', + version: '', + }; + const levels = []; + const decoded = { + fileDirectory: null, + groupsversion: null, + groupstree: null, + grouping: null, + }; + for (const comment of comments) { + for (const [meta, prefix] of Object.entries(prefixes)) { + if (comment.startsWith(prefix)) { + decoded[meta] = decode(comment.substring(prefix.length)); + } + } + } + result.version = decoded.groupsversion && decoded.groupsversion[0]; + result.fileDirectory = decoded.fileDirectory && decoded.fileDirectory[0]; + for (const tree of ['groupstree', 'grouping']) { + if (!decoded[tree]) + continue; + for (const encoded of decoded[tree]) { + const fields = decode(encoded); + const level_type_name = decode(fields.shift(), ':'); + const m = /^([0-9]+) (.+)/.exec(level_type_name[0]); + if (!m) + break; + const level = parseInt(m[1]); + const type = m[2]; // test for StaticGroup? + if (type === 'AllEntriesGroup') + continue; // root + const name = level_type_name[1]; + const intersection = decode(fields.shift())[0]; + const keys = tree === 'grouping' ? [] : fields.map(field => decode(field)[0]); + const group = { + name, + entries: keys, + groups: [], + }; + result.groups[name] = result.groups[name] || group; + if (levels.length < level) { + levels.push(group); + } + else { + levels[level - 1] = group; + } + if (level === 1) { + result.root.push(group); + } + else { + const parent = levels[level - 2]; + switch (intersection) { + case '0': // independent + break; + case '1': // intersect + group.entries = group.entries.filter(key => parent.entries.includes(key)); + break; + case '2': // union + group.entries = group.entries.concat(parent.entries.filter(key => !group.entries.includes(key))); + break; + } + levels[level - 2].groups.push(group); + } + } + } + return result; +} +exports.parse = parse; + +}); + +var bibtexParser = createCommonjsModule(function (module, exports) { +Object.defineProperty(exports, "__esModule", { value: true }); +exports.jabref = exports.chunker = exports.ast = exports.parse = void 0; + + + +class ParserError extends Error { + constructor(message, node) { + super(message); // 'Error' breaks prototype chain here + Object.setPrototypeOf(this, new.target.prototype); // restore prototype chain + this.name = this.constructor.name; + this.node = node; + } +} +class TeXError extends Error { + constructor(message, node, text) { + super(message); // 'Error' breaks prototype chain here + Object.setPrototypeOf(this, new.target.prototype); // restore prototype chain + this.name = this.constructor.name; + this.node = node; + this.text = text; + } +} + +const charClass = { + Lu: categories.filter(cat => ['Uppercase_Letter', 'Titlecase_Letter'].includes(cat.alias)).map(cat => cat.bmp).join(''), + Ll: categories.find(cat => cat.alias === 'Lowercase_Letter').bmp, + LnotLu: categories.filter(cat => ['Lowercase_Letter', 'Modifier_Letter', 'Other_Letter', 'Nonspacing_Mark', 'Spacing_Mark', 'Decimal_Number', 'Letter_Number'].includes(cat.alias)).map(cat => cat.bmp).join(''), + P: categories.find(cat => cat.alias === 'Punctuation').bmp, + L: categories.find(cat => cat.alias === 'Letter').bmp, + N: categories.filter(cat => ['Decimal_Number', 'Letter_Number'].includes(cat.alias)).map(cat => cat.bmp).join(''), + AlphaNum: categories.filter(cat => ['Letter', 'Decimal_Number', 'Letter_Number'].includes(cat.alias)).map(cat => cat.bmp).join(''), + LC: categories.find(cat => cat.alias === 'Cased_Letter').bmp, +}; +const marker = { + and: '\u0001', + comma: '\u0002', + space: '\u0003', + literal: '\u0004', + markup: '\u0005', + re: { + and: /./, + comma: /./, + space: /./, + literal: /./, + literalName: /./, + }, + clean(s) { + return s.replace(marker.re.space, ' ').replace(marker.re.comma, ', ').replace(marker.re.literal, ''); + }, +}; +marker.re = { + and: new RegExp(marker.and, 'g'), + comma: new RegExp(marker.comma, 'g'), + space: new RegExp(marker.space, 'g'), + literal: new RegExp(marker.literal, 'g'), + literalName: new RegExp(`^${marker.literal}([^${marker.literal}]*)${marker.literal}$`), +}; +const preserveCase = { + leadingCap: new RegExp(`^[${charClass.Lu}][${charClass.LnotLu}]+[${charClass.P}]?$`), + allCaps: new RegExp(`^[${charClass.Lu}${charClass.N}]{2,}$`), + allLower: new RegExp(`^[${charClass.Ll}${charClass.N}]{2,}$`), + joined: new RegExp(`^[${charClass.Lu}][${charClass.LnotLu}]*([-+][${charClass.L}${charClass.N}]+)*[${charClass.P}]*$`), + hasUpper: new RegExp(`[${charClass.Lu}]`), + hasLower: new RegExp(`[${charClass.Ll}]`), + isNumber: /^[0-9]+$/, + hasAlpha: new RegExp(`[${charClass.L}]`), + hasAlphaNum: new RegExp(`[${charClass.AlphaNum}]`), + notAlphaNum: new RegExp(`[^${charClass.AlphaNum}]`, 'g'), + sentenceStart: new RegExp(`(^|([\u2014:?!.]\\s+))[${charClass.Lu}]`, 'g'), + markup: /<\/?span[^>]*>/g, + acronym: new RegExp(`.*\\.${marker.markup}*[${charClass.Lu}]${marker.markup}*\\.$`), + notCaseSensitive: new RegExp(`[^${charClass.LC}]`), + isCaseSensitive: new RegExp(`[${charClass.LC}]`), + quoted: /("[^"]+")|(“[^“]+“)/g, +}; +const fields = { + creator: [ + 'author', + 'bookauthor', + 'collaborator', + 'commentator', + 'director', + 'editor', + 'editora', + 'editorb', + 'editors', + 'holder', + 'scriptwriter', + 'translator', + ], + title: [ + 'title', + 'series', + 'shorttitle', + 'booktitle', + 'type', + 'origtitle', + 'maintitle', + 'eventtitle', + ], + unnest: [ + 'publisher', + 'location', + ], + verbatim: [ + 'url', + 'doi', + 'file', + 'files', + 'eprint', + 'verba', + 'verbb', + 'verbc', + 'groups', + ], + html: [ + 'annotation', + 'comment', + 'annote', + 'review', + 'notes', + 'note', + ], + unabbrev: [ + 'journal', + 'journaltitle', + 'journal-full', + ], +}; +const english = [ + 'american', + 'british', + 'canadian', + 'english', + 'australian', + 'newzealand', + 'usenglish', + 'ukenglish', + 'en', + 'eng', + 'en-au', + 'en-bz', + 'en-ca', + 'en-cb', + 'en-gb', + 'en-ie', + 'en-jm', + 'en-nz', + 'en-ph', + 'en-tt', + 'en-us', + 'en-za', + 'en-zw', + 'anglais', +]; +class Parser { + constructor(options = {}) { + this.in_preamble = false; + this.preamble = []; + this.log = function (str) { }; // tslint:disable-line variable-name only-arrow-functions no-empty + for (const [option, value] of Object.entries(options)) { + if (typeof value === 'undefined') + delete options[option]; + } + if (options.errorHandler === false) { + // tslint:disable-next-line only-arrow-functions no-empty + options.errorHandler = function (err) { }; + } + else if (options.errorHandler === undefined) { + // tslint:disable-next-line only-arrow-functions + options.errorHandler = function (err) { throw err; }; + } + if (typeof options.sentenceCase === 'boolean') { + options.sentenceCase = options.sentenceCase ? english : []; + } + else { + options.sentenceCase = options.sentenceCase || english; + } + if (!options.strings) + options.strings = {}; + if (!options.unabbreviate) + options.unabbreviate = {}; + if (options.raw) { + options.sentenceCase = false; + options.caseProtection = false; + } + this.options = Object.assign({ caseProtection: 'as-needed', verbatimFields: [/^citeulike-linkout-[0-9]+$/, ...fields.verbatim], verbatimCommands: ['url', 'href'], unnestFields: [...fields.title, ...fields.unnest, ...fields.verbatim], unnestMode: 'unwrap', htmlFields: fields.html, guessAlreadySentenceCased: true, markup: {} }, options); + const markup_defaults = { + enquote: { open: '\u201c', close: '\u201d' }, + sub: { open: '', close: '' }, + sup: { open: '', close: '' }, + bold: { open: '', close: '' }, + italics: { open: '', close: '' }, + smallCaps: { open: '', close: '' }, + caseProtect: { open: '', close: '' }, + roman: { open: '', close: '' }, + fixedWidth: { open: '', close: '' }, + }; + // patch in because the options will likely not have enquote and case-protect + for (const [markup, { open, close }] of Object.entries(markup_defaults)) { + this.options.markup[markup] = this.options.markup[markup] || { open, close }; + } + for (const i of [1, 2, 3, 4]) { // tslint:disable-line:no-magic-numbers + this.options.markup[`h${i}`] = this.options.markup[`h${i}`] || { open: ``, close: `` }; + } + this.unresolvedStrings = {}; + this.errors = []; + this.comments = []; + this.entries = []; + this.strings = {}; + this.newcommands = {}; + this.default_strings = { + JAN: [this.text('01')], + FEB: [this.text('02')], + MAR: [this.text('03')], + APR: [this.text('04')], + MAY: [this.text('05')], + JUN: [this.text('06')], + JUL: [this.text('07')], + AUG: [this.text('08')], + SEP: [this.text('09')], + OCT: [this.text('10')], + NOV: [this.text('11')], + DEC: [this.text('12')], + ACMCS: [this.text('ACM Computing Surveys')], + ACTA: [this.text('Acta Informatica')], + CACM: [this.text('Communications of the ACM')], + IBMJRD: [this.text('IBM Journal of Research and Development')], + IBMSJ: [this.text('IBM Systems Journal')], + IEEESE: [this.text('IEEE Transactions on Software Engineering')], + IEEETC: [this.text('IEEE Transactions on Computers')], + IEEETCAD: [this.text('IEEE Transactions on Computer-Aided Design of Integrated Circuits')], + IPL: [this.text('Information Processing Letters')], + JACM: [this.text('Journal of the ACM')], + JCSS: [this.text('Journal of Computer and System Sciences')], + SCP: [this.text('Science of Computer Programming')], + SICOMP: [this.text('SIAM Journal on Computing')], + TOCS: [this.text('ACM Transactions on Computer Systems')], + TODS: [this.text('ACM Transactions on Database Systems')], + TOG: [this.text('ACM Transactions on Graphics')], + TOMS: [this.text('ACM Transactions on Mathematical Software')], + TOOIS: [this.text('ACM Transactions on Office Information Systems')], + TOPLAS: [this.text('ACM Transactions on Programming Languages and Systems')], + TCS: [this.text('Theoretical Computer Science')], + }; + } + ast(input, clean = true) { + const _ast = []; + for (const chunk of chunker.parse(input)) { + let chunk_ast = grammar.parse(chunk.text, Object.assign(Object.assign({}, this.options), { combiningDiacritics: unicode2latex.diacritics.commands })); + if (clean) + chunk_ast = this.clean(chunk_ast); + _ast.push(chunk_ast); + } + return _ast; + } + parse(input) { + return this.options.async ? this.parseAsync(input) : this.parseSync(input); + } + parseSync(input) { + for (const chunk of chunker.parse(input)) { + this.parseChunk(chunk); + } + return this.parsed(); + } + async parseAsync(input) { + for (const chunk of await chunker.parse(input, { async: true })) { + this.parseChunk(chunk); + } + return this.parsed(); + } + parsed() { + this.field = null; + const strings = {}; + this.cleaning = { type: 'other' }; + for (const [key, value] of Object.entries(this.strings)) { + this.field = { + name: '@string', + text: '', + level: 0, + preserveRanges: null, + words: { + upper: 0, + lower: 0, + other: 0, + }, + }; + this.convert(this.clean(value)); + strings[key] = this.field.text; + } + return { + errors: this.errors, + entries: this.entries, + comments: this.comments, + strings, + preamble: this.preamble, + }; + } + preserve(start, end, reason) { + if (!this.field.preserveRanges) + return; + if (!end) { + this.field.preserveRanges = null; + return; + } + /* + this.field.preserveRanges = this.field.preserveRanges.filter(range => range.start < start || range.end > end) + if (this.field.preserveRanges.find(range => range.start <= start && range.end >= end)) return + */ + /* + if (this.field.preserveRanges && this.field.preserveRanges.length) { + const last = this.field.preserveRanges[this.field.preserveRanges.length - 1] + if (start < last.start) throw new Error(JSON.stringify({...last, new: { start, end, reason }, text: this.field.text})) + } + */ + this.field.preserveRanges.push({ start, end, reason }); + } + parseChunk(chunk) { + this.chunk = chunk.text; + try { + let bib = grammar.parse(chunk.text, Object.assign(Object.assign({}, this.options), { combiningDiacritics: unicode2latex.diacritics.commands })); + if (bib.kind !== 'Bibliography') + throw new Error(this.show(bib)); + bib = this.clean(bib); + for (const entity of bib.children) { + switch (entity.kind) { + case 'Entry': + case 'BracedComment': + case 'LineComment': + case 'PreambleExpression': + this.convert(entity); + break; + case 'StringDeclaration': + case 'NonEntryText': + break; + } + } + return bib; + } + catch (err) { + if (!err.location) + throw err; + this.errors.push({ + message: err.message, + line: err.location.start.line + chunk.offset.line, + column: err.location.start.column, + source: this.chunk, + }); + return null; + } + } + show(o) { + // tslint:disable-next-line prefer-template + let text = JSON.stringify(o); + if (this.chunk) + text += '\n' + this.chunk.trim(); + return text; + } + text(value = '') { + return { kind: 'Text', value, mode: 'text' }; + } + error(err, returnvalue) { + if (typeof this.options.errorHandler === 'function') + this.options.errorHandler(err); + return returnvalue; + } + condense(node) { + // apply cleaning to resulting children + node.value = node.value.map(child => this.clean(child)); + // unpack redundant blocks + node.value = node.value.reduce((acc, child, i) => { + if (child.kind === 'Block' && !child.case && Object.keys(child.markup).length === 0) { + acc = acc.concat(child.value); + } + else { + acc.push(child); + } + return acc; + }, []); + // condense text nodes to make whole words for sentence casing + node.value = node.value.reduce((acc, child, i) => { + if (acc.length === 0) { + acc.push(child); + return acc; + } + const last = acc[acc.length - 1]; + const next = node.value[i + 1]; + if (this.options.caseProtection === 'strict' && this.onlyCaseProtected(last) && child.kind === 'Text' && !child.value.match(preserveCase.isCaseSensitive) && this.onlyCaseProtected(next)) { + last.value.push(child); + delete last.source; + return acc; + } + if (last.kind === 'Block' && child.kind === 'Block' && Object.keys(last.markup).sort().join('/') === Object.keys(child.markup).sort().join('/')) { + last.value = last.value.concat(child.value); + delete last.source; + return acc; + } + if (last.kind === 'Text' && child.kind === 'Text' && last.mode === child.mode) { + last.value += child.value; + delete last.source; + return acc; + } + acc.push(child); + return acc; + }, []); + } + onlyCaseProtected(node) { + return (node === null || node === void 0 ? void 0 : node.kind) === 'Block' && node.case === 'protect' && Object.keys(node.markup).join('/') === ''; + } + argument(node, kind) { + if (!node.arguments || !node.arguments.required.length) + return (kind === 'none'); + // expect 'n' text arguments + if (typeof kind === 'number') { + if (node.arguments.required.length !== kind) + return false; + return node.arguments.required; + } + // return first argument if it's the only one + if (node.arguments.required.length !== 1) + return false; + // loose checking for text + if (kind === 'text') { + const first = node.arguments.required[0]; + if (first.kind === 'Block' && first.value.length === 1) { + if (first.value[0].kind === 'Text') + return first.value[0].value; + } + // fall back to strict kind check + kind = 'Text'; + } + // return first argument if it's the only one and is of the specified kind + if (node.arguments.required.length !== 1 || node.arguments.required[0].kind !== kind) + return false; + switch (kind) { + case 'Text': + return node.arguments.required[0].value; + case 'RegularCommand': + case 'Block': + return node.arguments.required[0]; + } + return false; + } + clean(node) { + if (Array.isArray(node)) + return node.map(child => this.clean(child)); + delete node.loc; + switch (node.kind) { + case 'InlineMath': + case 'DisplayMath': + return this.clean_block(node); + case 'Environment': + return this.clean_environment(node); + case 'Block': + return this.clean_block(node); + case 'Bibliography': + return this.clean_bib(node); + case 'RegularCommand': + return this.clean_command(node); + case 'DiacriticCommand': + return this.clean_diacritic(node); + case 'Entry': + return this.clean_entry(node); + case 'Field': + return this.options.raw ? node : this.clean_field(node); + case 'StringDeclaration': + return this.clean_stringdecl(node); + case 'StringReference': + return this.clean_stringref(node); + case 'SubscriptCommand': + case 'SuperscriptCommand': + return this.clean_script(node); + case 'SymbolCommand': + return this.clean_symbol(node); + case 'PreambleExpression': + return this.clean_preamble(node); + case 'Number': + case 'Text': + case 'BracedComment': + case 'LineComment': + return node; + default: + return this.error(new ParserError(`no cleanup method for ${this.show(node)}`, node), this.text()); + } + } + clean_preamble(node) { + this.in_preamble = true; + const clean = this.clean(node.value); + this.in_preamble = false; + return clean; + } + clean_bib(node) { + node.children = node.children.filter(child => child.kind !== 'NonEntryText').map(child => this.clean(child)); + return node; + } + clean_stringdecl(node) { + this.strings[node.name.toUpperCase()] = node.value; + return node; + } + clean_stringref(node) { + var _a; + const name = node.name.toUpperCase(); + const _string = this.strings[name] + || this.options.strings[name] + || this.default_strings[name] + || (fields.unabbrev.includes(this.cleaning.name) && ((_a = this.options.unabbreviate[name]) === null || _a === void 0 ? void 0 : _a.text) && [this.text(this.options.unabbreviate[name].text)]); + if (!_string) { + if (!this.unresolvedStrings[name]) + this.errors.push({ message: `Unresolved @string reference ${JSON.stringify(node.name)}` }); + this.unresolvedStrings[name] = true; + } + return this.clean({ + kind: 'Block', + // if the string isn't found, add it as-is but exempt it from sentence casing + case: _string ? undefined : 'preserve', + markup: {}, + value: _string ? JSON.parse(JSON.stringify(_string)) : [this.text(node.name)], + }); + } + clean_entry(node) { + const shortjournals = []; + for (const field of node.fields) { + if (fields.unabbrev.includes(field.name) && Array.isArray(field.value)) { + const abbr = field.value.map(v => v.source).join(''); + const journal = this.options.unabbreviate[abbr]; + if (journal) { + shortjournals.push(Object.assign(Object.assign({}, JSON.parse(JSON.stringify(field))), { name: 'shortjournal' })); + field.value = JSON.parse(JSON.stringify(journal.ast)); + } + } + } + node.fields = node.fields.concat(shortjournals).map(child => this.clean(child)); + return node; + } + startCleaning(name) { + name = name.toLowerCase(); + if (fields.title.includes(name)) { + this.cleaning = { type: 'title', name }; + } + else if (fields.creator.includes(name.replace(/s$/, ''))) { + this.cleaning = { type: 'creator', name: name.replace(/s$/, '') }; + } + else { + this.cleaning = { type: 'other', name }; + } + } + stripNoCase(node, strip, preserve) { + switch (node.kind) { + case 'RegularCommand': + // a bit cheaty to assume these to be nocased, but it's just more likely to be what people want + if (['chsf', 'bibstring', 'cite'].includes(node.command)) + strip = true; + node.arguments.required.map(arg => this.stripNoCase(arg, strip, preserve)); + break; + case 'Block': + case 'InlineMath': + case 'DisplayMath': + if (strip && node.case === 'protect') { + if (preserve) { + node.case = 'preserve'; + } + else { + delete node.case; + } + } + node.value.map(v => this.stripNoCase(v, strip || node.case === 'protect', preserve)); + break; + case 'Field': + if (Array.isArray(node.value)) + node.value.map(v => this.stripNoCase(v, strip, preserve)); + break; + } + } + isVerbatimField(name) { + return !!this.options.verbatimFields.find(p => (typeof p === 'string') ? name === p : name.match(p)); + } + clean_field(node) { + this.startCleaning(node.name); + this.stripNoCase(node, !this.options.caseProtection || this.isVerbatimField(node.name), this.options.sentenceCase.length === 0); + if (Array.isArray(node.value)) + this.condense(node); + return node; + } + clean_script(node) { + let m, value, singlechar; + // recognize combined forms like \^\circ + if (singlechar = unicode2latex.latex[node.source]) + return this.text(singlechar); + if ((m = node.source.match(/^([\^_])([^{}]+)$/)) && ((singlechar = unicode2latex.latex[`${m[1]}${m[2]}`]) || (singlechar = unicode2latex.latex[`${m[1]}{${m[2]}}`]))) + return this.text(singlechar); + if ((m = node.source.match(/^([\^_])\{([^{}]+)\}$/)) && ((singlechar = unicode2latex.latex[`${m[1]}${m[2]}`]) || (singlechar = unicode2latex.latex[`${m[1]}{${m[2]}}`]))) + return this.text(singlechar); + const cmd = node.kind === 'SuperscriptCommand' ? '^' : '_'; + if (typeof node.value === 'string' && (singlechar = unicode2latex.latex[`${cmd}${node.value}`] || unicode2latex.latex[`${cmd}{${node.value}}`])) { + return this.text(singlechar); + } + if (typeof node.value === 'string') { + value = [this.text(node.value)]; + } + else if (!Array.isArray(node.value)) { + value = [node.value]; + } + else { + value = node.value; + } + const mode = node.kind === 'SuperscriptCommand' ? 'sup' : 'sub'; + return this.clean({ + kind: 'Block', + markup: { [mode]: true }, + value, + }); + } + clean_environment(node) { + this.condense(node); + return node; + } + needsProtection(word) { + return !word.match(preserveCase.hasUpper) && word.match(preserveCase.hasLower); + } + clean_block(node) { + var _a; + this.condense(node); + if (this.options.caseProtection !== 'strict' && ((_a = this.cleaning) === null || _a === void 0 ? void 0 : _a.type) === 'title' && node.case === 'protect') { + // test whether we can get away with skipping case protection because it contains all words that will be preserved anyway when converting back to Title Case + let preserve = true; + for (const child of node.value) { + if (child.kind === 'Text') { + const value = child.value.trim(); + preserve = !value.match(preserveCase.isCaseSensitive) || !value.split(/\s+/).find(word => this.needsProtection(word)); + } + else { + preserve = false; + } + if (!preserve) + break; + } + if (preserve) + node.case = 'preserve'; + } + if (node.kind === 'Block') { + for (const [markup, on] of Object.entries(node.markup)) { + if (!on) + delete node.markup[markup]; + } + } + return node; + } + clean_diacritic(node) { + const char = node.dotless ? `\\${node.character}` : node.character; + let unicode = unicode2latex.latex[`\\${node.mark}{${char}}`] + || unicode2latex.latex[`\\${node.mark}${char}`] + || unicode2latex.latex[`{\\${node.mark} ${char}}`] + || unicode2latex.latex[`{\\${node.mark}${char}}`] + || unicode2latex.latex[`\\${node.mark} ${char}`]; + if (!unicode && !node.dotless && node.character.length === 1 && unicode2latex.diacritics.tounicode[node.mark]) + unicode = node.character + unicode2latex.diacritics.tounicode[node.mark]; + if (!unicode && !this.in_preamble) + return this.error(new TeXError(`Unhandled \\${node.mark}{${char}}`, node, this.chunk), this.text()); + return this.text(unicode); + } + clean_symbol(node) { + if (node.command === '\\') + return this.text('\n'); + return this.text(unicode2latex.latex[`\\${node.command}`] || node.command); + } + first_text_block(node) { + if (!node) + return null; + if (node.kind === 'Block') { + for (const child of node.value) { + switch (child.kind) { + case 'Text': + return child.value ? node : null; + case 'Block': + const candidate = this.first_text_block(child); + if (candidate) + return candidate; + break; + default: + return null; + } + } + } + else { + return null; + } + } + clean_command(node) { + var _a; + let arg, unicode; + if (unicode = unicode2latex.latex[node.source]) + return this.text(unicode); + switch (node.command) { + case 'newcommand': + if (((_a = node.arguments) === null || _a === void 0 ? void 0 : _a.required.length) === 2 + && node.arguments.required[0].kind === 'Block' + && node.arguments.required[0].value.length === 1 + && node.arguments.required[0].value[0].kind === 'RegularCommand' + && node.arguments.required[1].kind === 'Block') { + this.newcommands[node.arguments.required[0].value[0].command] = node.arguments.required[1].value; + return this.text(); + } + // console.log('newcommand?', JSON.stringify(node, null, 2)) + break; + case 'item': + return { kind: 'Markup', value: '
  • ', source: node.source }; + case 'frac': + if (arg = this.argument(node, 2)) { + if (arg[0].kind === 'Text' && arg[1].kind === 'Text' && (unicode = unicode2latex.latex[`\\frac{${arg[0].value}}{${arg[1].value}}`])) + return this.text(unicode); + return this.clean({ + kind: 'Block', + case: 'protect', + markup: {}, + value: [ + { kind: 'Block', markup: { sup: true }, value: [arg[0]] }, + this.text('\u2044'), + { kind: 'Block', markup: { sub: true }, value: [arg[1]] }, + ], + }); + } + break; + // ignore + case 'vspace': + case 'vphantom': + case 'path': + case 'aftergroup': + case 'ignorespaces': + case 'relax': + case 'noopsort': + case 'ifdefined': + case 'DeclarePrefChars': + case 'else': + case 'fi': + case 'makeatletter': + return this.text(); + case 'ElsevierGlyph': + if (arg = this.argument(node, 'Text')) { + if (unicode = unicode2latex.latex[`\\${node.command}{${arg}}`]) + return this.text(unicode); + return this.text(String.fromCharCode(parseInt(arg, 16))); + } + break; + case 'chsf': + if (this.argument(node, 'none')) + return this.text(); + if (arg = this.argument(node, 'Block')) + return this.clean(arg); + break; + case 'bibstring': + if (arg = this.argument(node, 'Block')) + return this.clean(arg); + break; + case 'cite': + if (arg = this.argument(node, 'Block')) + return this.clean(arg); + break; + case 'textsuperscript': + case 'sp': + if ((arg = this.argument(node, 'Text')) && (unicode = unicode2latex.latex[`^{${arg}}`])) + return this.text(unicode); + if (arg = this.argument(node, 'Block')) + return this.clean(arg); + break; + case 'textsubscript': + case 'sb': + if ((arg = this.argument(node, 'Text')) && (unicode = unicode2latex.latex[`_{${arg}}`])) + return this.text(unicode); + if (arg = this.argument(node, 'Block')) + return this.clean(arg); + break; + case 'textsc': + if (arg = this.argument(node, 'Block')) + return this.clean(arg); + break; + case 'enquote': + case 'mkbibquote': + if (arg = this.argument(node, 'Block')) + return this.clean(arg); + break; + case 'textbf': + case 'mkbibbold': + if (arg = this.argument(node, 'Block')) + return this.clean(arg); + break; + case 'section': + case 'subsection': + case 'subsubsection': + case 'subsubsubsection': + if (arg = this.argument(node, 'Block')) + return this.clean(arg); + break; + case 'mkbibitalic': + case 'mkbibemph': + case 'textit': + case 'emph': + if (arg = this.argument(node, 'Block')) + return this.clean(arg); + if (arg = this.argument(node, 'Text')) + return this.clean({ kind: 'Block', markup: { italics: true }, value: [this.text(arg)] }); + break; + case 'bibcyr': + if (this.argument(node, 'none')) + return this.text(); + if (arg = this.argument(node, 'Block')) + return this.clean(arg); + break; + case 'hspace': + case 'mathrm': + case 'textrm': + case 'ocirc': + case 'mbox': + if (arg = this.argument(node, 'text')) { + unicode = unicode2latex.latex[`\\${node.command}{${arg}}`]; + return this.text(unicode || (node.command === 'hspace' ? ' ' : arg)); + } + else if (!node.arguments.required.length) { + return this.text(); + } + else if (arg = this.argument(node, 'Block')) { + return this.clean(arg); + } + break; + // just take the URL? Not the label? + case 'href': + if (arg = this.argument(node, 2)) + return this.clean(arg[0]); + break; + case 'url': + if (arg = this.argument(node, 'Text')) + return this.text(arg); + if (arg = this.argument(node, 'Block')) + return this.clean(arg); + break; + case 'sl': + case 'em': + case 'it': + case 'itshape': + case 'bf': + case 'bfseries': + case 'sc': + case 'scshape': + case 'tt': + case 'rm': + case 'sf': + case 'verb': + // handled in the grammar + return this.text(); + // wouldn't know what to do with these + case 'left': + case 'right': + return this.text(); + case 'par': + return this.text('\n\n'); + case 'cyr': + if (this.argument(node, 'none')) + return this.text(); + break; + case 'polhk': + if (unicode = this.argument(node, 'text')) { + if (unicode.length === 1) + return this.text(unicode + '\u0328'); + } + if (this.argument(node, 'none')) + return this.text('\u0328'); + break; + default: + if (node.kind === 'RegularCommand' && this.newcommands[node.command]) { + return this.clean({ + kind: 'Block', + markup: {}, + value: JSON.parse(JSON.stringify(this.newcommands[node.command])), + }); + } + if (unicode2latex.diacritics.tounicode[node.command]) { + node.arguments.required = this.clean(node.arguments.required); + let block; + if (node.arguments.required.length === 1 && node.arguments.required[0].kind === 'Text') { + // no idea why I can't just straight return this but typescript just won't shut up + block = { + kind: 'Block', + markup: {}, + value: [{ + kind: 'DiacriticCommand', + mark: node.command, + character: node.arguments.required[0].value, + dotless: false, + loc: node.arguments.required[0].loc, + source: node.arguments.required[0].source, + }], + }; + return this.clean(block); + } + else if (block = this.first_text_block(node.arguments.required[0])) { + let fixed = false; + block.value = block.value.reduce((value, child) => { + if (!fixed && child.kind === 'Text') { + fixed = true; + value.push({ kind: 'DiacriticCommand', mark: node.command, character: child.value[0] }); + value.push(Object.assign(Object.assign({}, child), { value: child.value.substring(1) })); + } + else { + value.push(child); + } + return value; + }, []); + return this.clean({ + kind: 'Block', + markup: {}, + value: node.arguments.required, + }); + } + else { + // overline without arguments doesn't seem to render in LaTeX + if (node.command === 'overline') + return this.text(' '); + return this.clean({ + kind: 'Block', + markup: {}, + value: [this.text(' ' + unicode2latex.diacritics.tounicode[node.command])].concat(node.arguments.required), + }); + } + } + if (unicode = unicode2latex.latex[node.source] || unicode2latex.latex[`${node.source}{}`]) + return this.text(unicode); + if ((unicode = unicode2latex.latex[`\\${node.command}`] || unicode2latex.latex[`\\${node.command}{}`]) && this.argument(node, 'none')) + return this.text(unicode); + if ((arg = this.argument(node, 'Text')) && (unicode = unicode2latex.latex[`\\${node.command}{${arg}}`])) + return this.text(unicode); + break; + } + if (this.in_preamble) + return this.text(node.source); + return this.error(new TeXError(`Unhandled command: ${node.command}` + this.show(node), node, this.chunk), this.text()); + } + preserveCase(word) { + // word = word.replace(new RegExp(`"[${this.markup.enquote.open}${this.markup.enquote.close}:()]`, 'g'), '') + var _a, _b; + if (!word.trim()) + return false; + if (!word.match(preserveCase.hasAlphaNum)) + return true; + word = word.replace(/[\/’'”:()]/g, ''); + if (word === 'I') + return true; + if (word.length === 1) + return false; + if (word.replace(preserveCase.notCaseSensitive) === '') + return false; + // word = word.replace(preserveCase.notAlphaNum, '') + // simple cap at start of field + if (word.match(preserveCase.leadingCap) && ((_b = (_a = this.field) === null || _a === void 0 ? void 0 : _a.text) === null || _b === void 0 ? void 0 : _b.length) === 0) + return false; + if (word.match(preserveCase.allCaps)) + return true; + if (word.length > 1 && word.match(preserveCase.joined)) + return false; + if (word.match(preserveCase.hasUpper)) + return true; + if (word.match(preserveCase.isNumber)) + return true; + return false; + } + convert(node) { + if (Array.isArray(node)) + return node.map(child => this.convert(child)); + if (this.options.raw && this.field) + node = this.text(node.source); + switch (node.kind) { + case 'Markup': + if (this.field) + this.field.text += node.value; + break; + case 'BracedComment': + case 'LineComment': + this.comments.push(node.value); + break; + case 'Entry': + this.convert_entry(node); + break; + case 'Number': + this.convert_number(node); + break; + case 'Text': + this.convert_text(node); + break; + case 'Block': + case 'InlineMath': + case 'DisplayMath': + const start = this.field ? this.field.text.length : null; + const preserve = typeof start === 'number' && this.field.preserveRanges; + this.convert_block(node); + if (preserve && (node.case || node.kind.endsWith('Math'))) + this.preserve(start, this.field.text.length); // , `convert-block: case=${node.case}, math=${node.kind.endsWith('Math')}`) + break; + case 'Environment': + this.convert_environment(node); + break; + case 'PreambleExpression': + this.preamble.push(node.value.map(preamble => preamble.source).join('\n\n')); + break; + case 'DisplayMath': + case 'InlineMath': + case 'StringDeclaration': + break; + default: + return this.error(new ParserError(`no converter for ${node.kind}: ${this.show(node)}`, node), undefined); + } + } + splitOnce(s, sep, fromEnd = false) { + const split = fromEnd ? s.lastIndexOf(sep) : s.indexOf(sep); + return (split < 0) ? [s, ''] : [s.substr(0, split), s.substr(split + 1)]; + } + parseName(name) { + let parsed = null; + const parts = name.split(marker.comma); + if (parts.length && !parts.find(p => !p.match(/^[a-z]+(-i)?=/i))) { // extended name format + for (const part of parts) { + parsed = parsed || {}; + const [attr, value] = this.splitOnce(part.replace(marker.re.space, ''), '=').map(v => v.trim()); + if (!value) { + parsed = null; + break; + } + switch (attr.toLowerCase()) { + case 'family': + parsed.lastName = value; + break; + case 'given-i': + parsed.initial = value; + break; + case 'given': + parsed.firstName = value; + break; + case 'prefix': + parsed.prefix = value; + break; + case 'suffix': + parsed.suffix = value; + break; + case 'useprefix': + parsed.useprefix = value.toLowerCase() === 'true'; + break; + case 'juniorcomma': + parsed.useprefix = value.toLowerCase() === 'true'; + break; + default: + parsed[attr.toLowerCase()] = value; + break; + } + } + } + const prefix = /(.+?)\s+(vere|von|van den|van der|van|de|del|della|der|di|da|pietro|vanden|du|st.|st|la|lo|ter|bin|ibn|te|ten|op|ben|al)\s+(.+)/; + let m; + switch (parsed ? 0 : parts.length) { + case 0: + // already parsed + break; + case 1: // name without commas + // literal + if (marker.re.literalName.test(parts[0])) { + parsed = { literal: parts[0] }; + } + else if (m = parts[0].replace(marker.re.space, ' ').match(prefix)) { // split on prefix + parsed = { + firstName: m[1], + prefix: m[2], + lastName: m[3], + }; + } + else { + // top-level "firstname lastname" + const [firstName, lastName] = this.splitOnce(parts[0], marker.space, true); + if (lastName) { + parsed = { firstName, lastName }; + } + else { + parsed = { lastName: firstName }; + } + } + break; + case 2: // lastname, firstname + parsed = { + lastName: parts[0], + firstName: parts[1], + }; + break; + default: // lastname, suffix, firstname + parsed = { + lastName: parts[0], + suffix: parts[1], + firstName: parts.slice(2).join(marker.comma), + }; + } + for (const [k, v] of Object.entries(parsed)) { + if (typeof v !== 'string') + continue; + parsed[k] = marker.clean(v).trim(); + } + return parsed; + } + convert_entry(node) { + var _a; + this.entry = { + key: node.id, + type: node.type, + fields: {}, + creators: {}, + }; + this.entries.push(this.entry); + // order these first for language-dependent sentence casing + const order = ['langid', 'hyphenation', 'language']; + node.fields.sort((a, b) => { + const ia = order.indexOf(a.name); + const ib = order.indexOf(b.name); + if (ia === -1 && ib === -1) + return a.name.localeCompare(b.name); // doesn't matter really + if (ia === -1) + return 1; + if (ib === -1) + return -1; + return ia - ib; + }); + let sentenceCase = !!this.options.sentenceCase.length; // if sentenceCase is empty, no sentence casing + for (const field of node.fields) { + if (field.kind !== 'Field') + return this.error(new ParserError(`Expected Field, got ${field.kind}`, node), undefined); + this.startCleaning(field.name); + /* + if (this.options.raw && this.fieldType !== 'creator') { + this.entry.fields[field.name] = [ field.value.map(v => v.source).join('') ] + continue + } + */ + this.field = { + name: field.name, + text: '', + level: 0, + words: { + upper: 0, + lower: 0, + other: 0, + }, + preserveRanges: (sentenceCase && fields.title.includes(field.name)) ? [] : null, + html: this.options.htmlFields.includes(field.name), + }; + this.entry.fields[this.field.name] = this.entry.fields[this.field.name] || []; + // special case for 'title = 2020' + if (field.value.kind === 'Number') { + this.entry.fields[this.field.name].push(field.value.value); + this.field = null; + continue; + } + this.convert(field.value); + this.field.text = this.field.text.trim(); + this.field.text = this.field.text.replace(/<\/([a-z])><\1>/g, ''); + this.field.text = this.field.text.replace(/<([a-z])>(\s*)<\/\1>/g, '$1'); + if (!this.field.text) + continue; + // disable sentenceCasing if not an english + switch (this.field.name) { + case 'langid': + case 'hyphenation': + sentenceCase = sentenceCase && this.options.sentenceCase.includes(this.field.text.toLowerCase()); + break; + case 'language': + sentenceCase = sentenceCase && !!(this.field.text.toLowerCase().trim().split(/\s*,\s*/).find(lang => this.options.sentenceCase.includes(lang))); + break; + } + // "groups" is a jabref 3.8+ monstrosity + if (this.field.name.match(/^(keywords?|groups)$/)) { + for (let text of this.field.text.split(marker.comma)) { + text = text.trim(); + if (text) + this.entry.fields[this.field.name].push(text); + } + } + else if (this.cleaning.type === 'creator') { + if (!this.entry.creators[this.field.name]) + this.entry.creators[this.field.name] = []; + // {M. Halle, J. Bresnan, and G. Miller} + if (this.field.text.includes(`${marker.comma}${marker.and}`)) { // + this.field.text = this.field.text.replace(new RegExp(`${marker.comma}${marker.and}`, 'g'), marker.and).replace(new RegExp(marker.comma), marker.and); + } + for (const creator of this.field.text.split(marker.and)) { + this.entry.fields[this.field.name].push(marker.clean(creator)); + this.entry.creators[this.field.name].push(this.parseName(creator)); + } + } + else if (fields.unabbrev.includes(field.name)) { // doesn't get sentence casing anyhow TODO: booktitle does! + this.entry.fields[this.field.name].push((((_a = this.options.unabbreviate[this.field.text]) === null || _a === void 0 ? void 0 : _a.text) || this.field.text).normalize('NFC')); + } + else { + if (this.field.preserveRanges) { + if (this.options.guessAlreadySentenceCased && Math.max(this.field.words.upper, this.field.words.lower) > (this.field.words.other + Math.min(this.field.words.upper, this.field.words.lower))) { + this.preserve(null, null); // , 'mostly sentence cased already') + } + else { + const txt = this.field.text.replace(preserveCase.markup, markup => marker.markup.repeat(markup.length)); + let match; + preserveCase.sentenceStart.lastIndex = 0; + while ((match = preserveCase.sentenceStart.exec(txt))) { + // exclude stuff like "U.S. Taxes" + if (match.index > 2 && txt.substr(0, match.index + 1).match(preserveCase.acronym)) + continue; + this.preserve(match.index, match.index + match[0].length); // , `sentenceStart: ${match[0]} at ${match.index}..${match.index + match[0].length}`) + } + preserveCase.quoted.lastIndex = 0; + while ((match = preserveCase.quoted.exec(this.field.text))) { + this.preserve(match.index, match.index + match[0].length); // , 'quoted') + } + } + } + this.entry.fields[this.field.name].push(this.convertToSentenceCase(this.field.text).normalize('NFC')); + } + } + this.field = null; + } + convertToSentenceCase(text) { + if (!this.field.preserveRanges) + return text; + // always keep the leading char, but skip markup + const lead = text.match(/^(<[^>]+>)*./); + if (lead) { + this.preserve(lead[0].length - 1, lead[0].length); + } + else { + this.preserve(0, 1); + } + let sentenceCased = text.toLowerCase().replace(/(([\?!]\s*|^)([\'\"¡¿“‘„«\s]+)?[^\s])/g, x => x.toUpperCase()); + for (const { start, end } of this.field.preserveRanges) { + sentenceCased = sentenceCased.substring(0, start) + text.substring(start, end) + sentenceCased.substring(end); + } + if (text !== sentenceCased) + this.entry.sentenceCased = true; + return sentenceCased; + } + convert_number(node) { + this.field.text += `${node.value}`; + } + convert_text(node) { + if (node.mode === 'verbatim') { + this.field.text += node.value.trim(); + return; + } + // heuristic to detect pre-sentencecased text + for (const word of node.value.split(/\b/)) { + if (word.match(preserveCase.allLower)) { + this.field.words.lower++; + } + else if (word.match(preserveCase.allCaps)) { + this.field.words.upper++; + } + else if (word.match(preserveCase.hasAlpha)) { + this.field.words.other++; + } + } + if (this.field.level === 0 && this.cleaning.type === 'creator') { + this.field.text += node.value.replace(/\s+and\s+/ig, marker.and).replace(/\s*,\s*/g, marker.comma).replace(/\s+/g, marker.space); + return; + } + if (this.field.level === 0 && this.field.name.match(/^(keywords?|groups)$/)) { + this.field.text += node.value.replace(/\s*[;,]\s*/g, marker.comma); + return; + } + if (this.field.html) { + this.field.text += node.value.replace(/&/g, '&').replace(//g, '>'); + } + else if (this.field.preserveRanges) { + const words = node.value.split(/(\s+)/); + for (const word of words) { + const start = this.field.text.length; + this.field.text += word; + if (this.preserveCase(word)) + this.preserve(start, this.field.text.length); // , `word: ${JSON.stringify(word)}`) + } + } + else { + this.field.text += node.value; + } + } + convert_environment(node) { + this.field.text += { enumerate: '
      ', itemize: '
        ' }[node.env]; + this.convert_block(Object.assign(Object.assign({}, node), { kind: 'Block', markup: {} })); + this.field.text += { enumerate: '
    ', itemize: '' }[node.env]; + } + convert_block(node) { + const start = this.field.text.length; + let prefix = ''; + let postfix = ''; + if (this.options.caseProtection !== 'strict' && this.cleaning.type === 'other') + delete node.case; + if (this.cleaning.type === 'creator' && node.case === 'protect') { + prefix += marker.literal; + postfix = marker.literal + postfix; + delete node.case; + } + if (node.case === 'protect') { + prefix += this.options.markup.caseProtect.open; + postfix = this.options.markup.caseProtect.close + postfix; + } + if (node.kind === 'Block') { + for (const markup of Object.keys(node.markup)) { + if (!this.options.markup[markup]) + return this.error(new ParserError(`markup: ${markup}`, node), undefined); + prefix += this.options.markup[markup].open; + postfix = this.options.markup[markup].close + postfix; + } + } + const end = { + withoutPrefix: this.field.text.length, + withPrefix: this.field.text.length + prefix.length, + }; + this.field.text += prefix; + this.field.level++; + this.convert(node.value); + this.field.level--; + const added = this.field.text.substring(end.withPrefix); + const added_text = added.replace(/<\/?[^>]+>/g, ''); + const needsProtection = added_text && ((this.options.caseProtection === 'strict' && added_text.match(preserveCase.isCaseSensitive)) + || + (this.options.caseProtection === 'as-needed' && added_text.split(/\s+/).find(word => this.needsProtection(word)))); + if (!added) { // nothing was added, so remove prefix + this.field.text = this.field.text.substring(0, end.withoutPrefix); + } + else if (this.field.preserveRanges && prefix === this.options.markup.caseProtect.open && !needsProtection) { + // something was added that didn't actually need case protection + this.field.text = this.field.text.substring(0, end.withoutPrefix) + added; + this.field.preserveRanges = this.field.preserveRanges.filter(range => range.start < end.withoutPrefix); + } + else { + this.field.text += postfix; + } + this.field.text = this.field.text.replace(/<(sup|sub)>([^<>]+)<\/\1>$/i, (m, mode, chars) => { + const cmd = mode === 'sup' ? '^' : '_'; + let script = ''; + for (const char of chars) { + const unicode = unicode2latex.latex[`${cmd}${char}`] || unicode2latex.latex[`${cmd}{${char}}`]; + script += unicode ? unicode : `<${mode}>${char}`; + } + script = script.replace(new RegExp(`<${mode}>`, 'g'), ''); + return script.length < m.length ? script : m; + }); + if (node.case && this.field.preserveRanges) + this.preserve(start, this.field.text.length); // , 'in convert-block ' + node.source || '') + } +} +/** + * parse bibtex. This will try to convert TeX commands into unicode equivalents, and apply `@string` expansion + */ +function parse(input, options = {}) { + const parser = new Parser(options); + return parser.parse(input); +} +exports.parse = parse; +function ast(input, options = {}, clean = true) { + const parser = new Parser(options); + return parser.ast(input, clean); +} +exports.ast = ast; +var chunker_2 = chunker; +Object.defineProperty(exports, "chunker", { enumerable: true, get: function () { return chunker_2.parse; } }); + +Object.defineProperty(exports, "jabref", { enumerable: true, get: function () { return jabref.parse; } }); + +}); + +var TEMPLATE_VARIABLES = { + citekey: 'Unique citekey', + abstract: '', + authorString: 'Comma-separated list of author names', + containerTitle: 'Title of the container holding the reference (e.g. book title for a book chapter, or the journal title for a journal article)', + DOI: '', + eprint: '', + eprinttype: '', + eventPlace: 'Location of event', + note: '', + page: 'Page or page range', + publisher: '', + publisherPlace: 'Location of publisher', + title: '', + titleShort: '', + URL: '', + year: 'Publication year', + zoteroSelectURI: 'URI to open the reference in Zotero', +}; +var Library = /** @class */ (function () { + function Library(entries) { + this.entries = entries; + } + Object.defineProperty(Library.prototype, "size", { + get: function () { + return Object.keys(this.entries).length; + }, + enumerable: false, + configurable: true + }); + /** + * For the given citekey, find the corresponding `Entry` and return a + * collection of template variable assignments. + */ + Library.prototype.getTemplateVariablesForCitekey = function (citekey) { + var _a; + var entry = this.entries[citekey]; + var shortcuts = { + citekey: citekey, + abstract: entry.abstract, + authorString: entry.authorString, + containerTitle: entry.containerTitle, + DOI: entry.DOI, + eprint: entry.eprint, + eprinttype: entry.eprinttype, + eventPlace: entry.eventPlace, + note: entry.note, + page: entry.page, + publisher: entry.publisher, + publisherPlace: entry.publisherPlace, + title: entry.title, + titleShort: entry.titleShort, + URL: entry.URL, + year: (_a = entry.year) === null || _a === void 0 ? void 0 : _a.toString(), + zoteroSelectURI: entry.zoteroSelectURI, + }; + return __assign({ entry: entry.toJSON() }, shortcuts); + }; + return Library; +}()); +/** + * An `Entry` represents a single reference in a reference database. + * Each entry has a unique identifier, known in most reference managers as its + * "citekey." + */ +var Entry = /** @class */ (function () { + function Entry() { + } + Object.defineProperty(Entry.prototype, "year", { + get: function () { + var _a; + return this._year + ? parseInt(this._year) + : (_a = this.issuedDate) === null || _a === void 0 ? void 0 : _a.getUTCFullYear(); + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(Entry.prototype, "note", { + get: function () { + var _a; + return (_a = this._note) === null || _a === void 0 ? void 0 : _a.map(function (el) { return el.replace(/(zotero:\/\/.+)/g, '[Link]($1)'); }).join('\n\n'); + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(Entry.prototype, "zoteroSelectURI", { + /** + * A URI which will open the relevant entry in the Zotero client. + */ + get: function () { + return "zotero://select/items/@" + this.id; + }, + enumerable: false, + configurable: true + }); + Entry.prototype.toJSON = function () { + var _this = this; + var jsonObj = Object.assign({}, this); + // add getter values + var proto = Object.getPrototypeOf(this); + Object.entries(Object.getOwnPropertyDescriptors(proto)) + .filter(function (_a) { + var descriptor = _a[1]; + return typeof descriptor.get == 'function'; + }) + .forEach(function (_a) { + var key = _a[0], descriptor = _a[1]; + if (descriptor && key[0] !== '_') { + try { + var val = _this[key]; + jsonObj[key] = val; + } + catch (error) { + return; + } + } + }); + return jsonObj; + }; + return Entry; +}()); +var EntryCSLAdapter = /** @class */ (function (_super) { + __extends(EntryCSLAdapter, _super); + function EntryCSLAdapter(data) { + var _this = _super.call(this) || this; + _this.data = data; + _this.eprint = null; + _this.eprinttype = null; + _this.files = null; + return _this; + } + Object.defineProperty(EntryCSLAdapter.prototype, "id", { + get: function () { + return this.data.id; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryCSLAdapter.prototype, "type", { + get: function () { + return this.data.type; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryCSLAdapter.prototype, "abstract", { + get: function () { + return this.data.abstract; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryCSLAdapter.prototype, "author", { + get: function () { + return this.data.author; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryCSLAdapter.prototype, "authorString", { + get: function () { + return this.data.author + ? this.data.author.map(function (a) { return a.given + " " + a.family; }).join(', ') + : null; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryCSLAdapter.prototype, "containerTitle", { + get: function () { + return this.data['container-title']; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryCSLAdapter.prototype, "DOI", { + get: function () { + return this.data.DOI; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryCSLAdapter.prototype, "eventPlace", { + get: function () { + return this.data['event-place']; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryCSLAdapter.prototype, "issuedDate", { + get: function () { + if (!(this.data.issued && + this.data.issued['date-parts'] && + this.data.issued['date-parts'][0].length > 0)) + return null; + var _a = this.data.issued['date-parts'][0], year = _a[0], month = _a[1], day = _a[2]; + return new Date(Date.UTC(year, (month || 1) - 1, day || 1)); + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryCSLAdapter.prototype, "page", { + get: function () { + return this.data.page; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryCSLAdapter.prototype, "publisher", { + get: function () { + return this.data.publisher; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryCSLAdapter.prototype, "publisherPlace", { + get: function () { + return this.data['publisher-place']; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryCSLAdapter.prototype, "title", { + get: function () { + return this.data.title; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryCSLAdapter.prototype, "titleShort", { + get: function () { + return this.data['title-short']; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryCSLAdapter.prototype, "URL", { + get: function () { + return this.data.URL; + }, + enumerable: false, + configurable: true + }); + return EntryCSLAdapter; +}(Entry)); +var BIBLATEX_PROPERTY_MAPPING = { + abstract: 'abstract', + booktitle: '_containerTitle', + date: 'issued', + doi: 'DOI', + eprint: 'eprint', + eprinttype: 'eprinttype', + eventtitle: 'event', + journal: '_containerTitle', + journaltitle: '_containerTitle', + location: 'publisherPlace', + pages: 'page', + shortjournal: 'containerTitleShort', + title: 'title', + shorttitle: 'titleShort', + url: 'URL', + venue: 'eventPlace', + year: '_year', + publisher: 'publisher', + note: '_note', +}; +// BibLaTeX parser returns arrays of property values (allowing for repeated +// property entries). For the following fields, just blindly take the first. +var BIBLATEX_PROPERTY_TAKE_FIRST = [ + 'abstract', + 'booktitle', + '_containerTitle', + 'date', + 'doi', + 'eprint', + 'eprinttype', + 'eventtitle', + 'journaltitle', + 'location', + 'pages', + 'shortjournal', + 'title', + 'shorttitle', + 'url', + 'venue', + '_year', + 'publisher', +]; +var EntryBibLaTeXAdapter = /** @class */ (function (_super) { + __extends(EntryBibLaTeXAdapter, _super); + function EntryBibLaTeXAdapter(data) { + var _this = _super.call(this) || this; + _this.data = data; + Object.entries(BIBLATEX_PROPERTY_MAPPING).forEach(function (map) { + var src = map[0], tgt = map[1]; + if (src in _this.data.fields) { + var val = _this.data.fields[src]; + if (BIBLATEX_PROPERTY_TAKE_FIRST.includes(src)) { + val = val[0]; + } + _this[tgt] = val; + } + }); + return _this; + } + Object.defineProperty(EntryBibLaTeXAdapter.prototype, "id", { + get: function () { + return this.data.key; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryBibLaTeXAdapter.prototype, "type", { + get: function () { + return this.data.type; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryBibLaTeXAdapter.prototype, "files", { + get: function () { + // For some reason the bibtex parser doesn't reliably parse file list to + // array ; so we'll do it manually / redundantly + var ret = []; + if (this.data.fields.file) { + ret = ret.concat(this.data.fields.file.flatMap(function (x) { return x.split(';'); })); + } + if (this.data.fields.files) { + ret = ret.concat(this.data.fields.files.flatMap(function (x) { return x.split(';'); })); + } + return ret; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryBibLaTeXAdapter.prototype, "authorString", { + get: function () { + var _a; + if (this.data.creators.author) { + var names = this.data.creators.author.map(function (name) { + if (name.literal) + return name.literal; + var parts = [name.firstName, name.prefix, name.lastName, name.suffix]; + // Drop any null parts and join + return parts.filter(function (x) { return x; }).join(' '); + }); + return names.join(', '); + } + else { + return (_a = this.data.fields.author) === null || _a === void 0 ? void 0 : _a.join(', '); + } + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryBibLaTeXAdapter.prototype, "containerTitle", { + get: function () { + if (this._containerTitle) { + return this._containerTitle; + } + else if (this.data.fields.eprint) { + var prefix = this.data.fields.eprinttype + ? this.data.fields.eprinttype + ":" + : ''; + var suffix = this.data.fields.primaryclass + ? " [" + this.data.fields.primaryclass + "]" + : ''; + return "" + prefix + this.data.fields.eprint + suffix; + } + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryBibLaTeXAdapter.prototype, "issuedDate", { + get: function () { + return this.issued ? new Date(this.issued) : null; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryBibLaTeXAdapter.prototype, "author", { + get: function () { + var _a; + return (_a = this.data.creators.author) === null || _a === void 0 ? void 0 : _a.map(function (a) { return ({ + given: a.firstName, + family: a.lastName, + }); }); + }, + enumerable: false, + configurable: true + }); + return EntryBibLaTeXAdapter; +}(Entry)); + +var CITATION_DATABASE_FORMAT_LABELS = { + 'csl-json': 'CSL-JSON', + biblatex: 'BibLaTeX', +}; +var CitationsPluginSettings = /** @class */ (function () { + function CitationsPluginSettings() { + this.citationExportFormat = 'csl-json'; + this.literatureNoteTitleTemplate = '@{{citekey}}'; + this.literatureNoteFolder = 'Reading notes'; + this.literatureNoteContentTemplate = '---\n' + + 'title: {{title}}\n' + + 'authors: {{authorString}}\n' + + 'year: {{year}}\n' + + '---\n\n'; + this.markdownCitationTemplate = '[@{{citekey}}]'; + this.alternativeMarkdownCitationTemplate = '@{{citekey}}'; + } + return CitationsPluginSettings; +}()); +var CitationSettingTab = /** @class */ (function (_super) { + __extends(CitationSettingTab, _super); + function CitationSettingTab(app, plugin) { + var _this = _super.call(this, app, plugin) || this; + _this.plugin = plugin; + return _this; + } + CitationSettingTab.prototype.open = function () { + var _this = this; + _super.prototype.open.call(this); + this.checkCitationExportPath(this.plugin.settings.citationExportPath).then(function () { return _this.showCitationExportPathSuccess(); }); + }; + CitationSettingTab.prototype.addValueChangeCallback = function (component, settingsKey, cb) { + var _this = this; + component.onChange(function (value) { return __awaiter(_this, void 0, void 0, function () { + return __generator(this, function (_a) { + this.plugin.settings[settingsKey] = value; + this.plugin.saveSettings().then(function () { + if (cb) { + cb(value); + } + }); + return [2 /*return*/]; + }); + }); }); + }; + CitationSettingTab.prototype.buildValueInput = function (component, settingsKey, cb) { + component.setValue(this.plugin.settings[settingsKey]); + this.addValueChangeCallback(component, settingsKey, cb); + }; + CitationSettingTab.prototype.display = function () { + var _this = this; + var containerEl = this.containerEl; + containerEl.empty(); + containerEl.setAttr('id', 'zoteroSettingTab'); + containerEl.createEl('h2', { text: 'Citation plugin settings' }); + new obsidian.Setting(containerEl) + .setName('Citation database format') + .addDropdown(function (component) { + return _this.buildValueInput(component.addOptions(CITATION_DATABASE_FORMAT_LABELS), 'citationExportFormat', function (value) { + _this.checkCitationExportPath(_this.plugin.settings.citationExportPath).then(function (success) { + if (success) { + _this.citationPathSuccessEl.addClass('d-none'); + _this.citationPathLoadingEl.removeClass('d-none'); + _this.plugin.loadLibrary().then(function () { + _this.citationPathLoadingEl.addClass('d-none'); + _this.showCitationExportPathSuccess(); + }); + } + }); + }); + }); + // NB: we force reload of the library on path change. + new obsidian.Setting(containerEl) + .setName('Citation database path') + .setDesc('Path to citation library exported by your reference manager. ' + + 'Can be an absolute path or a path relative to the current vault root folder. ' + + 'Citations will be automatically reloaded whenever this file updates.') + .addText(function (input) { + return _this.buildValueInput(input.setPlaceholder('/path/to/export.json'), 'citationExportPath', function (value) { + _this.checkCitationExportPath(value).then(function (success) { + return success && + _this.plugin + .loadLibrary() + .then(function () { return _this.showCitationExportPathSuccess(); }); + }); + }); + }); + this.citationPathLoadingEl = containerEl.createEl('p', { + cls: 'zoteroSettingCitationPathLoading d-none', + text: 'Loading citation database...', + }); + this.citationPathErrorEl = containerEl.createEl('p', { + cls: 'zoteroSettingCitationPathError d-none', + text: 'The citation export file cannot be found. Please check the path above.', + }); + this.citationPathSuccessEl = containerEl.createEl('p', { + cls: 'zoteroSettingCitationPathSuccess d-none', + text: 'Loaded library with {{n}} references.', + }); + new obsidian.Setting(containerEl) + .setName('Literature note folder') + .addText(function (input) { return _this.buildValueInput(input, 'literatureNoteFolder'); }) + .setDesc('Save literature note files in this folder within your vault. If empty, notes will be stored in the root directory of the vault.'); + containerEl.createEl('h3', { text: 'Template settings' }); + var templateInstructionsEl = containerEl.createEl('p'); + templateInstructionsEl.append(createSpan({ + text: 'The following settings determine how the notes and links created by ' + + 'the plugin will be rendered. You may specify a custom template for ' + + 'each type of content. Templates are interpreted using ', + })); + templateInstructionsEl.append(createEl('a', { + text: 'Handlebars', + href: 'https://handlebarsjs.com/guide/expressions.html', + })); + templateInstructionsEl.append(createSpan({ + text: ' syntax. You can make reference to the following variables:', + })); + var templateVariableUl = containerEl.createEl('ul', { + attr: { id: 'citationTemplateVariables' }, + }); + Object.entries(TEMPLATE_VARIABLES).forEach(function (variableData) { + var key = variableData[0], description = variableData[1], templateVariableItem = templateVariableUl.createEl('li'); + templateVariableItem.createEl('span', { + cls: 'text-monospace', + text: '{{' + key + '}}', + }); + templateVariableItem.createEl('span', { + text: description ? " \u2014 " + description : '', + }); + }); + var templateEntryInstructionsEl = containerEl.createEl('p'); + templateEntryInstructionsEl.append(createSpan({ text: 'Advanced users may also refer to the ' }), createSpan({ text: '{{entry}}', cls: 'text-monospace' }), createSpan({ + text: ' variable, which contains the full object representation of the ' + + 'reference as used internally by the plugin. See the ', + }), createEl('a', { + text: 'plugin documentation', + href: 'http://www.foldl.me/obsidian-citation-plugin/classes/entry.html', + }), createSpan({ text: " for information on this object's structure." })); + containerEl.createEl('h3', { text: 'Literature note templates' }); + new obsidian.Setting(containerEl) + .setName('Literature note title template') + .addText(function (input) { + return _this.buildValueInput(input, 'literatureNoteTitleTemplate'); + }); + new obsidian.Setting(containerEl) + .setName('Literature note content template') + .addTextArea(function (input) { + return _this.buildValueInput(input, 'literatureNoteContentTemplate'); + }); + containerEl.createEl('h3', { text: 'Markdown citation templates' }); + containerEl.createEl('p', { + text: 'You can insert Pandoc-style Markdown citations rather than literature notes by using the "Insert Markdown citation" command. The below options allow customization of the Markdown citation format.', + }); + new obsidian.Setting(containerEl) + .setName('Markdown primary citation template') + .addText(function (input) { + return _this.buildValueInput(input, 'markdownCitationTemplate'); + }); + new obsidian.Setting(containerEl) + .setName('Markdown secondary citation template') + .addText(function (input) { + return _this.buildValueInput(input, 'alternativeMarkdownCitationTemplate'); + }); + }; + /** + * Returns true iff the path exists; displays error as a side-effect + */ + CitationSettingTab.prototype.checkCitationExportPath = function (filePath) { + return __awaiter(this, void 0, void 0, function () { + var e_1; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + this.citationPathLoadingEl.addClass('d-none'); + _a.label = 1; + case 1: + _a.trys.push([1, 3, , 4]); + return [4 /*yield*/, obsidian.FileSystemAdapter.readLocalFile(this.plugin.resolveLibraryPath(filePath))]; + case 2: + _a.sent(); + this.citationPathErrorEl.addClass('d-none'); + return [3 /*break*/, 4]; + case 3: + e_1 = _a.sent(); + this.citationPathSuccessEl.addClass('d-none'); + this.citationPathErrorEl.removeClass('d-none'); + return [2 /*return*/, false]; + case 4: return [2 /*return*/, true]; + } + }); + }); + }; + CitationSettingTab.prototype.showCitationExportPathSuccess = function () { + if (!this.plugin.library) + return; + this.citationPathSuccessEl.setText("Loaded library with " + this.plugin.library.size + " references."); + this.citationPathSuccessEl.removeClass('d-none'); + }; + return CitationSettingTab; +}(obsidian.PluginSettingTab)); + +var messageIds = 0; + +function onMessage (self, e) { + var message = e.data; + if (!Array.isArray(message) || message.length < 2) { + // Ignore - this message is not for us. + return + } + var messageId = message[0]; + var error = message[1]; + var result = message[2]; + + var callback = self._callbacks[messageId]; + + if (!callback) { + // Ignore - user might have created multiple PromiseWorkers. + // This message is not for us. + return + } + + delete self._callbacks[messageId]; + callback(error, result); +} + +function PromiseWorker (worker) { + var self = this; + self._worker = worker; + self._callbacks = {}; + + worker.addEventListener('message', function (e) { + onMessage(self, e); + }); +} + +PromiseWorker.prototype.postMessage = function (userMessage) { + var self = this; + var messageId = messageIds++; + + var messageToSend = [messageId, userMessage]; + + return new Promise(function (resolve, reject) { + self._callbacks[messageId] = function (error, result) { + if (error) { + return reject(new Error(error.message)) + } + resolve(result); + }; + + /* istanbul ignore if */ + if (typeof self._worker.controller !== 'undefined') { + // service worker, use MessageChannels because e.source is broken in Chrome < 51: + // https://bugs.chromium.org/p/chromium/issues/detail?id=543198 + var channel = new MessageChannel(); + channel.port1.onmessage = function (e) { + onMessage(self, e); + }; + self._worker.controller.postMessage(messageToSend, [channel.port2]); + } else { + // web worker + self._worker.postMessage(messageToSend); + } + }) +}; + +var promiseWorker = PromiseWorker; + +/** + * Declares properties and methods which are missing from the Obsidian API. + */ +var NoticeExt = /** @class */ (function (_super) { + __extends(NoticeExt, _super); + function NoticeExt() { + return _super !== null && _super.apply(this, arguments) || this; + } + NoticeExt.DISAPPEARING_CLASS = 'mod-disappearing'; + return NoticeExt; +}(obsidian.Notice)); + +var DISALLOWED_FILENAME_CHARACTERS_RE = /[*"\\/<>:|?]/g; +/** + * Manages a category of notices to be displayed in the UI. Prevents multiple + * notices being shown at the same time. + */ +var Notifier = /** @class */ (function () { + function Notifier(defaultMessage) { + this.defaultMessage = defaultMessage; + } + Notifier.prototype.unload = function () { + this.hide(); + }; + /** + * @returns true if the notice was shown, and false otherwise + */ + Notifier.prototype.show = function (message) { + var _this = this; + var _a; + message = message || this.defaultMessage; + if (this.currentNotice) + return false; + this.currentNotice = new obsidian.Notice(message); + // Set up mutation observer to watch for when the notice disappears. + (_a = this.mutationObserver) === null || _a === void 0 ? void 0 : _a.disconnect(); + this.mutationObserver = new MutationObserver(function (changes, observer) { + var isDisappearing = changes.some(function (change) { + var el = change.target; + return (change.type == 'attributes' && + el.hasClass(NoticeExt.DISAPPEARING_CLASS)); + }); + if (isDisappearing) { + _this.currentNotice = null; + observer.disconnect(); + _this.mutationObserver = null; + } + }); + this.mutationObserver.observe(this.currentNotice.noticeEl, { + attributeFilter: ['class'], + }); + }; + Notifier.prototype.hide = function () { + var _a, _b; + (_a = this.currentNotice) === null || _a === void 0 ? void 0 : _a.hide(); + (_b = this.mutationObserver) === null || _b === void 0 ? void 0 : _b.disconnect(); + this.currentNotice = null; + this.mutationObserver = null; + }; + Notifier.DISAPPEARING_CLASS = 'mod-disappearing'; + return Notifier; +}()); +/** + * Manages a Worker, recording its state and optionally preventing + * message postings before responses to prior messages have been received. + */ +var WorkerManager = /** @class */ (function () { + function WorkerManager(_worker, options) { + this._worker = _worker; + this.worker = new promiseWorker(this._worker); + /** + * Only relevant when `blockingChannel` option is true. + * Then this property is true iff the worker is currently processing a + * received message, and has not yet posted a response. + */ + this.blocked = false; + this.options = __assign(__assign({}, workerManagerDefaultOptions), options); + } + /** + * Attempt to post a message to the worker and return a promise response. + * + * If `blockingChannel` option is true and the channel is currently blocked, + * the message will be discarded and an error will be thrown. + */ + WorkerManager.prototype.post = function (msg) { + return __awaiter(this, void 0, void 0, function () { + var _this = this; + return __generator(this, function (_a) { + if (this.options.blockingChannel && this.blocked) { + throw new WorkerManagerBlocked(); + } + this.blocked = true; + return [2 /*return*/, this.worker.postMessage(msg).then(function (result) { + _this.blocked = false; + return result; + }, function (error) { + _this.blocked = false; + throw error; + })]; + }); + }); + }; + return WorkerManager; +}()); +var WorkerManagerBlocked = /** @class */ (function (_super) { + __extends(WorkerManagerBlocked, _super); + function WorkerManagerBlocked() { + var _this = _super.call(this, 'WorkerManager: discarded message because channel is blocked') || this; + Object.setPrototypeOf(_this, WorkerManagerBlocked.prototype); + return _this; + } + return WorkerManagerBlocked; +}(Error)); +var workerManagerDefaultOptions = { + blockingChannel: false, +}; + +function funcToSource(fn, sourcemapArg) { + var sourcemap = sourcemapArg === undefined ? null : sourcemapArg; + var source = fn.toString(); + var lines = source.split('\n'); + lines.pop(); + lines.shift(); + var blankPrefixLength = lines[0].search(/\S/); + var regex = /(['"])__worker_loader_strict__(['"])/g; + for (var i = 0, n = lines.length; i < n; ++i) { + lines[i] = lines[i].substring(blankPrefixLength).replace(regex, '$1use strict$2') + '\n'; + } + if (sourcemap) { + lines.push('\/\/# sourceMappingURL=' + sourcemap + '\n'); + } + return lines; +} + +function createURL(fn, sourcemapArg) { + var lines = funcToSource(fn, sourcemapArg); + var blob = new Blob(lines, { type: 'application/javascript' }); + return URL.createObjectURL(blob); +} + +function createInlineWorkerFactory(fn, sourcemapArg) { + var url; + return function WorkerFactory(options) { + url = url || createURL(fn, sourcemapArg); + return new Worker(url, options); + }; +} + +var WorkerFactory = createInlineWorkerFactory(/* rollup-plugin-web-worker-loader */function () { +(function () { + '__worker_loader_strict__'; + + function isPromise (obj) { + // via https://unpkg.com/is-promise@2.1.0/index.js + return !!obj && (typeof obj === 'object' || typeof obj === 'function') && typeof obj.then === 'function' + } + + function registerPromiseWorker (callback) { + function postOutgoingMessage (e, messageId, error, result) { + function postMessage (msg) { + /* istanbul ignore if */ + if (typeof self.postMessage !== 'function') { // service worker + e.ports[0].postMessage(msg); + } else { // web worker + self.postMessage(msg); + } + } + if (error) { + /* istanbul ignore else */ + if (typeof console !== 'undefined' && 'error' in console) { + // This is to make errors easier to debug. I think it's important + // enough to just leave here without giving the user an option + // to silence it. + console.error('Worker caught an error:', error); + } + postMessage([messageId, { + message: error.message + }]); + } else { + postMessage([messageId, null, result]); + } + } + + function tryCatchFunc (callback, message) { + try { + return { res: callback(message) } + } catch (e) { + return { err: e } + } + } + + function handleIncomingMessage (e, callback, messageId, message) { + var result = tryCatchFunc(callback, message); + + if (result.err) { + postOutgoingMessage(e, messageId, result.err); + } else if (!isPromise(result.res)) { + postOutgoingMessage(e, messageId, null, result.res); + } else { + result.res.then(function (finalResult) { + postOutgoingMessage(e, messageId, null, finalResult); + }, function (finalError) { + postOutgoingMessage(e, messageId, finalError); + }); + } + } + + function onIncomingMessage (e) { + var payload = e.data; + if (!Array.isArray(payload) || payload.length !== 2) { + // message doens't match communication format; ignore + return + } + var messageId = payload[0]; + var message = payload[1]; + + if (typeof callback !== 'function') { + postOutgoingMessage(e, messageId, new Error( + 'Please pass a function into register().')); + } else { + handleIncomingMessage(e, callback, messageId, message); + } + } + + self.addEventListener('message', onIncomingMessage); + } + + var register = registerPromiseWorker; + + /*! ***************************************************************************** + Copyright (c) Microsoft Corporation. + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH + REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, + INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THIS SOFTWARE. + ***************************************************************************** */ + /* global Reflect, Promise */ + + var extendStatics = function(d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + + function __extends(d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + } + + var __assign = function() { + __assign = Object.assign || function __assign(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); + }; + + function createCommonjsModule(fn, basedir, module) { + return module = { + path: basedir, + exports: {}, + require: function (path, base) { + return commonjsRequire(path, (base === undefined || base === null) ? module.path : base); + } + }, fn(module, module.exports), module.exports; + } + + function commonjsRequire () { + throw new Error('Dynamic requires are not currently supported by @rollup/plugin-commonjs'); + } + + /* + * Generated by PEG.js 0.10.0. + * + * http://pegjs.org/ + */ + + function peg$subclass(child, parent) { + function ctor() { this.constructor = child; } + ctor.prototype = parent.prototype; + child.prototype = new ctor(); + } + + function peg$SyntaxError(message, expected, found, location) { + this.message = message; + this.expected = expected; + this.found = found; + this.location = location; + this.name = "SyntaxError"; + + if (typeof Error.captureStackTrace === "function") { + Error.captureStackTrace(this, peg$SyntaxError); + } + } + + peg$subclass(peg$SyntaxError, Error); + + peg$SyntaxError.buildMessage = function(expected, found) { + var DESCRIBE_EXPECTATION_FNS = { + literal: function(expectation) { + return "\"" + literalEscape(expectation.text) + "\""; + }, + + "class": function(expectation) { + var escapedParts = "", + i; + + for (i = 0; i < expectation.parts.length; i++) { + escapedParts += expectation.parts[i] instanceof Array + ? classEscape(expectation.parts[i][0]) + "-" + classEscape(expectation.parts[i][1]) + : classEscape(expectation.parts[i]); + } + + return "[" + (expectation.inverted ? "^" : "") + escapedParts + "]"; + }, + + any: function(expectation) { + return "any character"; + }, + + end: function(expectation) { + return "end of input"; + }, + + other: function(expectation) { + return expectation.description; + } + }; + + function hex(ch) { + return ch.charCodeAt(0).toString(16).toUpperCase(); + } + + function literalEscape(s) { + return s + .replace(/\\/g, '\\\\') + .replace(/"/g, '\\"') + .replace(/\0/g, '\\0') + .replace(/\t/g, '\\t') + .replace(/\n/g, '\\n') + .replace(/\r/g, '\\r') + .replace(/[\x00-\x0F]/g, function(ch) { return '\\x0' + hex(ch); }) + .replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { return '\\x' + hex(ch); }); + } + + function classEscape(s) { + return s + .replace(/\\/g, '\\\\') + .replace(/\]/g, '\\]') + .replace(/\^/g, '\\^') + .replace(/-/g, '\\-') + .replace(/\0/g, '\\0') + .replace(/\t/g, '\\t') + .replace(/\n/g, '\\n') + .replace(/\r/g, '\\r') + .replace(/[\x00-\x0F]/g, function(ch) { return '\\x0' + hex(ch); }) + .replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { return '\\x' + hex(ch); }); + } + + function describeExpectation(expectation) { + return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); + } + + function describeExpected(expected) { + var descriptions = new Array(expected.length), + i, j; + + for (i = 0; i < expected.length; i++) { + descriptions[i] = describeExpectation(expected[i]); + } + + descriptions.sort(); + + if (descriptions.length > 0) { + for (i = 1, j = 1; i < descriptions.length; i++) { + if (descriptions[i - 1] !== descriptions[i]) { + descriptions[j] = descriptions[i]; + j++; + } + } + descriptions.length = j; + } + + switch (descriptions.length) { + case 1: + return descriptions[0]; + + case 2: + return descriptions[0] + " or " + descriptions[1]; + + default: + return descriptions.slice(0, -1).join(", ") + + ", or " + + descriptions[descriptions.length - 1]; + } + } + + function describeFound(found) { + return found ? "\"" + literalEscape(found) + "\"" : "end of input"; + } + + return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; + }; + + function peg$parse(input, options) { + options = options !== void 0 ? options : {}; + + var peg$FAILED = {}, + + peg$startRuleFunctions = { Bibliography: peg$parseBibliography }, + peg$startRuleFunction = peg$parseBibliography, + + peg$c0 = function(r) { + return { + kind: 'Bibliography', + loc: location(), + source: text(), + children: r, + } + }, + peg$c1 = "@", + peg$c2 = peg$literalExpectation("@", false), + peg$c3 = "comment", + peg$c4 = peg$literalExpectation("comment", true), + peg$c5 = function(v) { + return { + kind: 'BracedComment', + loc: location(), + source: text(), + value: v.slice(1, -1), + } + }, + peg$c6 = /^[^\n\r]/, + peg$c7 = peg$classExpectation(["\n", "\r"], true, false), + peg$c8 = /^[\n\r]/, + peg$c9 = peg$classExpectation(["\n", "\r"], false, false), + peg$c10 = function(v) { + return { + kind: 'LineComment', + loc: location(), + source: text(), + value: normalizeWhitespace(v), + } + }, + peg$c11 = /^[^@]/, + peg$c12 = peg$classExpectation(["@"], true, false), + peg$c13 = function(v) { + return { + kind: 'NonEntryText', + loc: location(), + source: text(), + value: normalizeWhitespace(v), + } + }, + peg$c14 = function(n) { return n; }, + peg$c15 = "{", + peg$c16 = peg$literalExpectation("{", false), + peg$c17 = /^[^{}]/, + peg$c18 = peg$classExpectation(["{", "}"], true, false), + peg$c19 = "}", + peg$c20 = peg$literalExpectation("}", false), + peg$c21 = function(comment) { return '{' + comment.join('') + '}' }, + peg$c22 = /^[A-Za-z]/, + peg$c23 = peg$classExpectation([["A", "Z"], ["a", "z"]], false, false), + peg$c24 = /^[({]/, + peg$c25 = peg$classExpectation(["(", "{"], false, false), + peg$c26 = /^[})]/, + peg$c27 = peg$classExpectation(["}", ")"], false, false), + peg$c28 = function(type, id, fields) { + return { + kind: 'Entry', + id: id || '', + type: type.toLowerCase(), + loc: location(), + source: text(), + fields: fields, + } + }, + peg$c29 = "preamble", + peg$c30 = peg$literalExpectation("preamble", true), + peg$c31 = function(opener, v, closer) { + switch (opener + closer) { + case '{}': + case '()': + break + default: + throw new Error(`Unbalanced opener-closer for preamble: ${opener}...${closer}`) + } + return { + kind: 'PreambleExpression', + loc: location(), + source: text(), + value: v.reduce((a, b) => a.concat(b), []), + } + }, + peg$c32 = "string", + peg$c33 = peg$literalExpectation("string", true), + peg$c34 = function(k, v) { + return { + kind: 'StringDeclaration', + loc: location(), + source: text(), + name: k, + value: v.reduce((a, b) => a.concat(b), []), + } + }, + peg$c35 = /^[^ \t\r\n,]/, + peg$c36 = peg$classExpectation([" ", "\t", "\r", "\n", ","], true, false), + peg$c37 = ",", + peg$c38 = peg$literalExpectation(",", false), + peg$c39 = function(id) { return id; }, + peg$c40 = function(name) { return isVerbatimField(name) && unnestFields.includes(name) }, + peg$c41 = function(name, value) { + // because this was abused so much, many processors treat double-outer-braces as single + return { + kind: 'Field', + loc: location(), + source: text(), + name: name, + loc: location(), + value: [ protect(value) ] + } + }, + peg$c42 = function(name) { return isVerbatimField(name) }, + peg$c43 = function(name, value) { + return { + kind: 'Field', + loc: location(), + source: text(), + name: name, + loc: location(), + value: [ protect(value) ] + } + }, + peg$c44 = function(name, value) { + // because this was abused so much, many processors treat double-outer-braces as single + if (unnestFields.includes(name) && Array.isArray(value) && value.length === 1 && value[0].kind === 'Block') { + if (options.unnestMode === 'preserve') { + value[0].case = 'preserve'; + } else { + value = value[0].value; + } + } + + return handle_markup_switches({ + kind: 'Field', + loc: location(), + source: text(), + name: name, + value: value, + }) + }, + peg$c45 = /^[_:a-zA-Z0-9\-]/, + peg$c46 = peg$classExpectation(["_", ":", ["a", "z"], ["A", "Z"], ["0", "9"], "-"], false, false), + peg$c47 = function(name) { return name.toLowerCase() }, + peg$c48 = "\"", + peg$c49 = peg$literalExpectation("\"", false), + peg$c50 = function(v) { + v = v || { + kind: 'Text', + loc: location(), + source: text(), + value: '', + }; + v.mode = 'verbatim'; + return basicTextConversions(v) + }, + peg$c51 = function(v) { + return basicTextConversions({ + kind: 'Text', + loc: location(), + source: text(), + value: v.join('').trim(), + mode: 'verbatim', + }) + }, + peg$c52 = function(v) { return v }, + peg$c53 = function(v) { return '{' + v.join('') + '}' }, + peg$c54 = function() { return math.set(false) }, + peg$c55 = function(v) { + return v.reduce((a, b) => a.concat(b), []); + }, + peg$c56 = function(v) { return v; }, + peg$c57 = "{\\verb", + peg$c58 = peg$literalExpectation("{\\verb", false), + peg$c59 = /^[a-zA-Z]/, + peg$c60 = peg$classExpectation([["a", "z"], ["A", "Z"]], false, false), + peg$c61 = /^[^\^_${}\\]/, + peg$c62 = peg$classExpectation(["^", "_", "$", "{", "}", "\\"], true, false), + peg$c63 = function(v) { + return basicTextConversions({ + kind: 'Text', + loc: location(), + source: text(), + value: normalizeWhitespace(v), + mode: math.on ? 'math' : 'text', + }) + }, + peg$c64 = /^[^\^_${}"\\]/, + peg$c65 = peg$classExpectation(["^", "_", "$", "{", "}", "\"", "\\"], true, false), + peg$c66 = /^[0-9]/, + peg$c67 = peg$classExpectation([["0", "9"]], false, false), + peg$c68 = function(v) { + return { + kind: 'Number', + loc: location(), + source: text(), + value: parseInt(v, 10), + } + }, + peg$c69 = function(v) { + return { + kind: 'StringReference', + loc: location(), + source: text(), + name: v, + } + }, + peg$c70 = "\\begin{", + peg$c71 = peg$literalExpectation("\\begin{", false), + peg$c72 = /^[a-zA-Z0-9]/, + peg$c73 = peg$classExpectation([["a", "z"], ["A", "Z"], ["0", "9"]], false, false), + peg$c74 = "\\end{", + peg$c75 = peg$literalExpectation("\\end{", false), + peg$c76 = function(env, v, cenv) { return env === cenv }, + peg$c77 = function(env, v, cenv) { + if (markup[env]) { + return { + kind: 'Block', + loc: location(), + source: text(), + value: v, + markup: { [markup[env]]: true }, + } + } else { + return { + kind: 'Environment', + loc: location(), + source: text(), + value: v, + env: env, + } + } + }, + peg$c78 = "{\\", + peg$c79 = peg$literalExpectation("{\\", false), + peg$c80 = "\\", + peg$c81 = peg$literalExpectation("\\", false), + peg$c82 = /^[ij]/, + peg$c83 = peg$classExpectation(["i", "j"], false, false), + peg$c84 = function(mark, char) { + return { + kind: 'DiacriticCommand', + loc: location(), + source: text(), + mark: mark, + dotless: !!char[1], + character: char[1] || char[0], + } + }, + peg$c85 = function(v) { + return basicTextConversions({ + kind: 'Text', + loc: location(), + source: text(), + value: v.join('').trim(), + mode: 'verbatim', + }) + }, + peg$c86 = function(v) { + const block = { + kind: 'Block', + loc: location(), + source: text(), + value: v, + markup: {}, + case: 'protect', + }; + + let leadingcmd = block.value.length && (block.value[0].kind.endsWith('Command') || block.value[0].kind === 'Environment') ? block.value[0] : null; + let leadingcmdblockarg = leadingcmd + && leadingcmd.kind === 'RegularCommand' + && leadingcmd.arguments.required.length + && leadingcmd.arguments.required[0].kind === 'Block' + && leadingcmd.arguments.required[0]; + + // https://github.com/retorquere/zotero-better-bibtex/issues/541#issuecomment-240156274 + if (leadingcmd) { + delete block.case; + + // command with a block cancels out case protection with containing block + // if a smallcaps block has set case to 'preserve' we want to keep this + if (leadingcmdblockarg && leadingcmdblockarg.case === 'protect') delete leadingcmdblockarg.case; + + // \sl, \it etc + if (markup[leadingcmd.command]) { + block.markup[markup[leadingcmd.command]] = true; + block.value.shift(); + } + } + + return handle_markup_switches(block) + }, + peg$c87 = function() { return !math.on }, + peg$c88 = "$", + peg$c89 = peg$literalExpectation("$", false), + peg$c90 = "$$", + peg$c91 = peg$literalExpectation("$$", false), + peg$c92 = function(mode) { return math.set(true) }, + peg$c93 = function(mode, v) { return math.set(false) }, + peg$c94 = function(mode, v) { + return { + kind: mode == '$$' ? 'DisplayMath' : 'InlineMath', + loc: location(), + source: text(), + value: v, + case: 'protect', + markup: {}, + } + }, + peg$c95 = "%", + peg$c96 = peg$literalExpectation("%", false), + peg$c97 = /^[^\r\n]/, + peg$c98 = peg$classExpectation(["\r", "\n"], true, false), + peg$c99 = function(v) { + return { + kind: 'LineComment', + loc: location(), + source: text(), + value: v, + } + }, + peg$c100 = /^[_\^]/, + peg$c101 = peg$classExpectation(["_", "^"], false, false), + peg$c102 = function(mode, v) { + if (v.kind === 'Block') v = v.value; + + return { + kind: mode === '_' ? 'SubscriptCommand' : 'SuperscriptCommand', + loc: location(), + source: text(), + value: v, + } + }, + peg$c103 = function(mark, v) { + return { + kind: 'RegularCommand', + loc: location(), + source: text(), + command: mark, + arguments: { + optional: [], + required: [ protect(v) ], + }, + } + }, + peg$c104 = /^[^A-Za-z0-9\t\r\n]/, + peg$c105 = peg$classExpectation([["A", "Z"], ["a", "z"], ["0", "9"], "\t", "\r", "\n"], true, false), + peg$c106 = function(v) { + return { + kind: 'SymbolCommand', + loc: location(), + source: text(), + command: v, + } + }, + peg$c107 = "newcommand", + peg$c108 = peg$literalExpectation("newcommand", false), + peg$c109 = function(cmd, name) { return name.value.length == 1 && name.value[0].kind === 'RegularCommand' }, + peg$c110 = function(cmd, name, optional, def) { + return { + kind: 'RegularCommand', + loc: location(), + source: text(), + command: cmd, + arguments: { + optional: [], + required: [name, def], + }, + } + }, + peg$c111 = "begin", + peg$c112 = peg$literalExpectation("begin", false), + peg$c113 = "end", + peg$c114 = peg$literalExpectation("end", false), + peg$c115 = function(cmd) { return verbatimCommands.includes(cmd) && (has_arguments[cmd] === 2) }, + peg$c116 = function(cmd, optional, req1, req2) { + return { + kind: 'RegularCommand', + loc: location(), + source: text(), + command: cmd, + arguments: { + optional: optional, + required: [protect(req1), protect(req2)], + }, + } + }, + peg$c117 = function(cmd) { return verbatimCommands.includes(cmd) && (has_arguments[cmd] === 1) }, + peg$c118 = function(cmd, optional, req) { + return { + kind: 'RegularCommand', + loc: location(), + source: text(), + command: cmd, + arguments: { + optional: optional, + required: [protect(req)], + }, + } + }, + peg$c119 = function(cmd) { return (has_arguments[cmd] === 2) }, + peg$c120 = function(cmd, optional, req1, req2) { + return { + kind: 'RegularCommand', + loc: location(), + source: text(), + command: cmd, + arguments: { + optional: optional, + required: [req1, req2], + }, + } + }, + peg$c121 = function(cmd) { return (has_arguments[cmd] === 1) }, + peg$c122 = function(cmd, optional, req) { + let m; + if (req.kind === 'Block') { + switch (cmd) { + case 'textsuperscript': + case 'sp': + req.markup.sup = true; + break + case 'textsubscript': + case 'sb': + req.markup.sub = true; + break + case 'textsc': + req.markup.smallCaps = true; + break + case 'enquote': + case 'mkbibquote': + req.markup.enquote = true; + break + case 'textbf': + case 'mkbibbold': + req.markup.bold = true; + break + case 'emph': + case 'textit': + case 'mkbibitalic': + case 'mkbibemph': + req.markup.italics = true; + break + default: + if (m = cmd.match(/^((sub)*)section$/)) { + req.markup[`h${(m[1].length / 3) + 1}`] = true; + } + } + } + + // ignore case stuff on bibcyr + if (cmd === 'bibcyr') delete req.case; + + return { + kind: 'RegularCommand', + loc: location(), + source: text(), + command: cmd, + arguments: { + optional: optional, + required: [req], + } + } + }, + peg$c123 = function(cmd, optional) { + return { + kind: 'RegularCommand', + loc: location(), + source: text(), + command: cmd, + arguments: { + optional: optional, + required: [], + } + } + }, + peg$c124 = "[", + peg$c125 = peg$literalExpectation("[", false), + peg$c126 = /^[^\]]/, + peg$c127 = peg$classExpectation(["]"], true, false), + peg$c128 = "]", + peg$c129 = peg$literalExpectation("]", false), + peg$c130 = function(v) { + return basicTextConversions({ + kind: 'Text', // this isn't really correct but I don't need these right now + loc: location(), + source: text(), + value: v, + mode: math.on ? 'math' : 'text', + }) + }, + peg$c131 = /^[^ \t\^_${}\\]/, + peg$c132 = peg$classExpectation([" ", "\t", "^", "_", "$", "{", "}", "\\"], true, false), + peg$c133 = function(v) { + return basicTextConversions({ + kind: 'Text', + loc: location(), + source: text(), + value: normalizeWhitespace([v]), + mode: math.on ? 'math' : 'text', + }) + }, + peg$c134 = /^[a-zA-Z\-_]/, + peg$c135 = peg$classExpectation([["a", "z"], ["A", "Z"], "-", "_"], false, false), + peg$c136 = /^[a-zA-Z0-9\-&_:]/, + peg$c137 = peg$classExpectation([["a", "z"], ["A", "Z"], ["0", "9"], "-", "&", "_", ":"], false, false), + peg$c138 = /^['`"=~\^.]/, + peg$c139 = peg$classExpectation(["'", "`", "\"", "=", "~", "^", "."], false, false), + peg$c140 = /^['`"=~\^.cbuvdrHk]/, + peg$c141 = peg$classExpectation(["'", "`", "\"", "=", "~", "^", ".", "c", "b", "u", "v", "d", "r", "H", "k"], false, false), + peg$c142 = "=", + peg$c143 = peg$literalExpectation("=", false), + peg$c144 = "#", + peg$c145 = peg$literalExpectation("#", false), + peg$c146 = /^[\r\n]/, + peg$c147 = peg$classExpectation(["\r", "\n"], false, false), + peg$c149 = /^[ \t]/, + peg$c150 = peg$classExpectation([" ", "\t"], false, false), + peg$c151 = peg$otherExpectation("Optional Horizontal Whitespace"), + peg$c155 = /^[ \t\n\r]/, + peg$c156 = peg$classExpectation([" ", "\t", "\n", "\r"], false, false), + peg$c157 = peg$otherExpectation("Optional Whitespace"), + + peg$currPos = 0, + peg$savedPos = 0, + peg$posDetailsCache = [{ line: 1, column: 1 }], + peg$maxFailPos = 0, + peg$maxFailExpected = [], + peg$silentFails = 0, + + peg$result; + + if ("startRule" in options) { + if (!(options.startRule in peg$startRuleFunctions)) { + throw new Error("Can't start parsing from rule \"" + options.startRule + "\"."); + } + + peg$startRuleFunction = peg$startRuleFunctions[options.startRule]; + } + + function text() { + return input.substring(peg$savedPos, peg$currPos); + } + + function location() { + return peg$computeLocation(peg$savedPos, peg$currPos); + } + + function peg$literalExpectation(text, ignoreCase) { + return { type: "literal", text: text, ignoreCase: ignoreCase }; + } + + function peg$classExpectation(parts, inverted, ignoreCase) { + return { type: "class", parts: parts, inverted: inverted, ignoreCase: ignoreCase }; + } + + function peg$endExpectation() { + return { type: "end" }; + } + + function peg$otherExpectation(description) { + return { type: "other", description: description }; + } + + function peg$computePosDetails(pos) { + var details = peg$posDetailsCache[pos], p; + + if (details) { + return details; + } else { + p = pos - 1; + while (!peg$posDetailsCache[p]) { + p--; + } + + details = peg$posDetailsCache[p]; + details = { + line: details.line, + column: details.column + }; + + while (p < pos) { + if (input.charCodeAt(p) === 10) { + details.line++; + details.column = 1; + } else { + details.column++; + } + + p++; + } + + peg$posDetailsCache[pos] = details; + return details; + } + } + + function peg$computeLocation(startPos, endPos) { + var startPosDetails = peg$computePosDetails(startPos), + endPosDetails = peg$computePosDetails(endPos); + + return { + start: { + offset: startPos, + line: startPosDetails.line, + column: startPosDetails.column + }, + end: { + offset: endPos, + line: endPosDetails.line, + column: endPosDetails.column + } + }; + } + + function peg$fail(expected) { + if (peg$currPos < peg$maxFailPos) { return; } + + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + + peg$maxFailExpected.push(expected); + } + + function peg$buildStructuredError(expected, found, location) { + return new peg$SyntaxError( + peg$SyntaxError.buildMessage(expected, found), + expected, + found, + location + ); + } + + function peg$parseBibliography() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + s1 = peg$parse__(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parseNode(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parseNode(); + } + if (s2 !== peg$FAILED) { + s3 = peg$parse__(); + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c0(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseComment() { + var s0, s1, s2, s3, s4, s5, s6, s7; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 64) { + s1 = peg$c1; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c2); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parse__(); + if (s2 !== peg$FAILED) { + if (input.substr(peg$currPos, 7).toLowerCase() === peg$c3) { + s3 = input.substr(peg$currPos, 7); + peg$currPos += 7; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c4); } + } + if (s3 !== peg$FAILED) { + s4 = peg$parse__h(); + if (s4 !== peg$FAILED) { + s5 = peg$parseBracedComment(); + if (s5 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c5(s5); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 64) { + s1 = peg$c1; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c2); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parse__(); + if (s2 !== peg$FAILED) { + if (input.substr(peg$currPos, 7).toLowerCase() === peg$c3) { + s3 = input.substr(peg$currPos, 7); + peg$currPos += 7; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c4); } + } + if (s3 !== peg$FAILED) { + s4 = peg$parse__h(); + if (s4 !== peg$FAILED) { + s5 = []; + if (peg$c6.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c7); } + } + while (s6 !== peg$FAILED) { + s5.push(s6); + if (peg$c6.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c7); } + } + } + if (s5 !== peg$FAILED) { + s6 = []; + if (peg$c8.test(input.charAt(peg$currPos))) { + s7 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s7 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c9); } + } + while (s7 !== peg$FAILED) { + s6.push(s7); + if (peg$c8.test(input.charAt(peg$currPos))) { + s7 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s7 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c9); } + } + } + if (s6 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c10(s5); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$currPos; + if (peg$c11.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c12); } + } + if (s2 !== peg$FAILED) { + s3 = []; + if (peg$c6.test(input.charAt(peg$currPos))) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c7); } + } + while (s4 !== peg$FAILED) { + s3.push(s4); + if (peg$c6.test(input.charAt(peg$currPos))) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c7); } + } + } + if (s3 !== peg$FAILED) { + s2 = [s2, s3]; + s1 = s2; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s2 = []; + if (peg$c8.test(input.charAt(peg$currPos))) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c9); } + } + while (s3 !== peg$FAILED) { + s2.push(s3); + if (peg$c8.test(input.charAt(peg$currPos))) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c9); } + } + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c13(s1); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + } + + return s0; + } + + function peg$parseNode() { + var s0, s1; + + s0 = peg$currPos; + s1 = peg$parseComment(); + if (s1 === peg$FAILED) { + s1 = peg$parsePreambleExpression(); + if (s1 === peg$FAILED) { + s1 = peg$parseStringDeclaration(); + if (s1 === peg$FAILED) { + s1 = peg$parseEntry(); + } + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c14(s1); + } + s0 = s1; + + return s0; + } + + function peg$parseBracedComment() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 123) { + s1 = peg$c15; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c16); } + } + if (s1 !== peg$FAILED) { + s2 = []; + if (peg$c17.test(input.charAt(peg$currPos))) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c18); } + } + if (s3 === peg$FAILED) { + s3 = peg$parseBracedComment(); + } + while (s3 !== peg$FAILED) { + s2.push(s3); + if (peg$c17.test(input.charAt(peg$currPos))) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c18); } + } + if (s3 === peg$FAILED) { + s3 = peg$parseBracedComment(); + } + } + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 125) { + s3 = peg$c19; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c20); } + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c21(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseEntry() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 64) { + s1 = peg$c1; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c2); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parse__(); + if (s2 !== peg$FAILED) { + s3 = peg$currPos; + s4 = []; + if (peg$c22.test(input.charAt(peg$currPos))) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c23); } + } + if (s5 !== peg$FAILED) { + while (s5 !== peg$FAILED) { + s4.push(s5); + if (peg$c22.test(input.charAt(peg$currPos))) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c23); } + } + } + } else { + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s3 = input.substring(s3, peg$currPos); + } else { + s3 = s4; + } + if (s3 !== peg$FAILED) { + s4 = peg$parse__(); + if (s4 !== peg$FAILED) { + if (peg$c24.test(input.charAt(peg$currPos))) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c25); } + } + if (s5 !== peg$FAILED) { + s6 = peg$parse__(); + if (s6 !== peg$FAILED) { + s7 = peg$parseEntryId(); + if (s7 === peg$FAILED) { + s7 = null; + } + if (s7 !== peg$FAILED) { + s8 = peg$parse__(); + if (s8 !== peg$FAILED) { + s9 = []; + s10 = peg$parseField(); + while (s10 !== peg$FAILED) { + s9.push(s10); + s10 = peg$parseField(); + } + if (s9 !== peg$FAILED) { + s10 = peg$parse__(); + if (s10 !== peg$FAILED) { + if (peg$c26.test(input.charAt(peg$currPos))) { + s11 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s11 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c27); } + } + if (s11 !== peg$FAILED) { + s12 = peg$parse__(); + if (s12 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c28(s3, s7, s9); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parsePreambleExpression() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 64) { + s1 = peg$c1; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c2); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parse__(); + if (s2 !== peg$FAILED) { + if (input.substr(peg$currPos, 8).toLowerCase() === peg$c29) { + s3 = input.substr(peg$currPos, 8); + peg$currPos += 8; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c30); } + } + if (s3 !== peg$FAILED) { + s4 = peg$parse__(); + if (s4 !== peg$FAILED) { + if (peg$c24.test(input.charAt(peg$currPos))) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c25); } + } + if (s5 !== peg$FAILED) { + s6 = peg$parse__(); + if (s6 !== peg$FAILED) { + s7 = []; + s8 = peg$parseEnvironment(); + if (s8 === peg$FAILED) { + s8 = peg$parseBlock(); + if (s8 === peg$FAILED) { + s8 = peg$parseMath(); + if (s8 === peg$FAILED) { + s8 = peg$parseCommand(); + if (s8 === peg$FAILED) { + s8 = peg$parseText(); + } + } + } + } + while (s8 !== peg$FAILED) { + s7.push(s8); + s8 = peg$parseEnvironment(); + if (s8 === peg$FAILED) { + s8 = peg$parseBlock(); + if (s8 === peg$FAILED) { + s8 = peg$parseMath(); + if (s8 === peg$FAILED) { + s8 = peg$parseCommand(); + if (s8 === peg$FAILED) { + s8 = peg$parseText(); + } + } + } + } + } + if (s7 !== peg$FAILED) { + s8 = peg$parse__(); + if (s8 !== peg$FAILED) { + if (peg$c26.test(input.charAt(peg$currPos))) { + s9 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s9 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c27); } + } + if (s9 !== peg$FAILED) { + s10 = peg$parse__(); + if (s10 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c31(s5, s7, s9); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseStringDeclaration() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 64) { + s1 = peg$c1; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c2); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parse__(); + if (s2 !== peg$FAILED) { + if (input.substr(peg$currPos, 6).toLowerCase() === peg$c32) { + s3 = input.substr(peg$currPos, 6); + peg$currPos += 6; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c33); } + } + if (s3 !== peg$FAILED) { + s4 = peg$parse__(); + if (s4 !== peg$FAILED) { + if (peg$c24.test(input.charAt(peg$currPos))) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c25); } + } + if (s5 !== peg$FAILED) { + s6 = peg$parse__(); + if (s6 !== peg$FAILED) { + s7 = peg$parseVariableName(); + if (s7 !== peg$FAILED) { + s8 = peg$parseFieldSeparator(); + if (s8 !== peg$FAILED) { + s9 = []; + s10 = peg$parseRegularValue(); + if (s10 !== peg$FAILED) { + while (s10 !== peg$FAILED) { + s9.push(s10); + s10 = peg$parseRegularValue(); + } + } else { + s9 = peg$FAILED; + } + if (s9 !== peg$FAILED) { + s10 = peg$parse__(); + if (s10 !== peg$FAILED) { + if (peg$c26.test(input.charAt(peg$currPos))) { + s11 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s11 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c27); } + } + if (s11 !== peg$FAILED) { + s12 = peg$parse__(); + if (s12 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c34(s7, s9); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseEntryId() { + var s0, s1, s2, s3, s4; + + s0 = peg$currPos; + s1 = peg$parse__(); + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + s3 = []; + if (peg$c35.test(input.charAt(peg$currPos))) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c36); } + } + while (s4 !== peg$FAILED) { + s3.push(s4); + if (peg$c35.test(input.charAt(peg$currPos))) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c36); } + } + } + if (s3 !== peg$FAILED) { + s2 = input.substring(s2, peg$currPos); + } else { + s2 = s3; + } + if (s2 !== peg$FAILED) { + s3 = peg$parse__(); + if (s3 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 44) { + s4 = peg$c37; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c38); } + } + if (s4 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c39(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseField() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8; + + s0 = peg$currPos; + s1 = peg$parseFieldName(); + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$c40(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s3 = peg$parseFieldSeparator(); + if (s3 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 123) { + s4 = peg$c15; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c16); } + } + if (s4 !== peg$FAILED) { + s5 = peg$currPos; + peg$silentFails++; + if (input.charCodeAt(peg$currPos) === 123) { + s6 = peg$c15; + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c16); } + } + peg$silentFails--; + if (s6 !== peg$FAILED) { + peg$currPos = s5; + s5 = void 0; + } else { + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + s6 = peg$parseVerbatimFieldValue(); + if (s6 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 125) { + s7 = peg$c19; + peg$currPos++; + } else { + s7 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c20); } + } + if (s7 !== peg$FAILED) { + s8 = peg$parseFieldTerminator(); + if (s8 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c41(s1, s6); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseFieldName(); + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$c42(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s3 = peg$parseFieldSeparator(); + if (s3 !== peg$FAILED) { + s4 = peg$parseVerbatimFieldValue(); + if (s4 !== peg$FAILED) { + s5 = peg$parseFieldTerminator(); + if (s5 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c43(s1, s4); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseFieldName(); + if (s1 !== peg$FAILED) { + s2 = peg$parseFieldSeparator(); + if (s2 !== peg$FAILED) { + s3 = peg$parseFieldValue(); + if (s3 !== peg$FAILED) { + s4 = peg$parseFieldTerminator(); + if (s4 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c44(s1, s3); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + } + + return s0; + } + + function peg$parseFieldName() { + var s0, s1, s2, s3, s4; + + s0 = peg$currPos; + s1 = peg$parse__(); + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + s3 = []; + if (peg$c45.test(input.charAt(peg$currPos))) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c46); } + } + if (s4 !== peg$FAILED) { + while (s4 !== peg$FAILED) { + s3.push(s4); + if (peg$c45.test(input.charAt(peg$currPos))) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c46); } + } + } + } else { + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + s2 = input.substring(s2, peg$currPos); + } else { + s2 = s3; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c47(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseVerbatimFieldValue() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 34) { + s1 = peg$c48; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c49); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parseTextNoQuotes(); + if (s2 === peg$FAILED) { + s2 = null; + } + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 34) { + s3 = peg$c48; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c49); } + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c50(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 123) { + s1 = peg$c15; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c16); } + } + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parseVerbatimText(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parseVerbatimText(); + } + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 125) { + s3 = peg$c19; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c20); } + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c51(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + + return s0; + } + + function peg$parseVerbatimText() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + s1 = peg$currPos; + s2 = []; + if (peg$c17.test(input.charAt(peg$currPos))) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c18); } + } + if (s3 !== peg$FAILED) { + while (s3 !== peg$FAILED) { + s2.push(s3); + if (peg$c17.test(input.charAt(peg$currPos))) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c18); } + } + } + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = input.substring(s1, peg$currPos); + } else { + s1 = s2; + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c52(s1); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 123) { + s1 = peg$c15; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c16); } + } + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parseVerbatimText(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parseVerbatimText(); + } + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 125) { + s3 = peg$c19; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c20); } + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c53(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + + return s0; + } + + function peg$parseFieldValue() { + var s0, s1, s2, s3; + + s0 = peg$parseNumber(); + if (s0 === peg$FAILED) { + s0 = peg$currPos; + peg$savedPos = peg$currPos; + s1 = peg$c54(); + if (s1) { + s1 = void 0; + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parseRegularValue(); + if (s3 === peg$FAILED) { + s3 = peg$parseStringValue(); + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parseRegularValue(); + if (s3 === peg$FAILED) { + s3 = peg$parseStringValue(); + } + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c55(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + + return s0; + } + + function peg$parseRegularValue() { + var s0, s1, s2, s3, s4, s5; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 34) { + s1 = peg$c48; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c49); } + } + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parseEnvironment(); + if (s3 === peg$FAILED) { + s3 = peg$parseBlock(); + if (s3 === peg$FAILED) { + s3 = peg$parseMath(); + if (s3 === peg$FAILED) { + s3 = peg$parseCommand(); + if (s3 === peg$FAILED) { + s3 = peg$parseTextNoQuotes(); + } + } + } + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parseEnvironment(); + if (s3 === peg$FAILED) { + s3 = peg$parseBlock(); + if (s3 === peg$FAILED) { + s3 = peg$parseMath(); + if (s3 === peg$FAILED) { + s3 = peg$parseCommand(); + if (s3 === peg$FAILED) { + s3 = peg$parseTextNoQuotes(); + } + } + } + } + } + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 34) { + s3 = peg$c48; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c49); } + } + if (s3 !== peg$FAILED) { + s4 = peg$parseConcat(); + if (s4 === peg$FAILED) { + s4 = null; + } + if (s4 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c56(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.substr(peg$currPos, 6) === peg$c57) { + s1 = peg$c57; + peg$currPos += 6; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c58); } + } + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + peg$silentFails++; + if (peg$c59.test(input.charAt(peg$currPos))) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c60); } + } + peg$silentFails--; + if (s3 === peg$FAILED) { + s2 = void 0; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parseVerbatimText(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parseVerbatimText(); + } + if (s3 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 125) { + s4 = peg$c19; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c20); } + } + if (s4 !== peg$FAILED) { + s5 = peg$parseConcat(); + if (s5 === peg$FAILED) { + s5 = null; + } + if (s5 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c51(s3); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 123) { + s1 = peg$c15; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c16); } + } + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parseEnvironment(); + if (s3 === peg$FAILED) { + s3 = peg$parseBlock(); + if (s3 === peg$FAILED) { + s3 = peg$parseMath(); + if (s3 === peg$FAILED) { + s3 = peg$parseCommand(); + if (s3 === peg$FAILED) { + s3 = peg$parseText(); + } + } + } + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parseEnvironment(); + if (s3 === peg$FAILED) { + s3 = peg$parseBlock(); + if (s3 === peg$FAILED) { + s3 = peg$parseMath(); + if (s3 === peg$FAILED) { + s3 = peg$parseCommand(); + if (s3 === peg$FAILED) { + s3 = peg$parseText(); + } + } + } + } + } + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 125) { + s3 = peg$c19; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c20); } + } + if (s3 !== peg$FAILED) { + s4 = peg$parseConcat(); + if (s4 === peg$FAILED) { + s4 = null; + } + if (s4 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c56(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseStringReference(); + if (s1 !== peg$FAILED) { + s2 = peg$parseConcat(); + if (s2 === peg$FAILED) { + s2 = null; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c56(s1); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + } + } + + return s0; + } + + function peg$parseStringValue() { + var s0, s1, s2; + + s0 = peg$currPos; + s1 = peg$parseStringReference(); + if (s1 !== peg$FAILED) { + s2 = peg$parseConcat(); + if (s2 === peg$FAILED) { + s2 = null; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c56(s1); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseText() { + var s0, s1, s2; + + s0 = peg$currPos; + s1 = []; + if (peg$c61.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c62); } + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + if (peg$c61.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c62); } + } + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c63(s1); + } + s0 = s1; + + return s0; + } + + function peg$parseTextNoQuotes() { + var s0, s1, s2; + + s0 = peg$currPos; + s1 = []; + if (peg$c64.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c65); } + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + if (peg$c64.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c65); } + } + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c63(s1); + } + s0 = s1; + + return s0; + } + + function peg$parseNumber() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + s1 = peg$currPos; + s2 = []; + if (peg$c66.test(input.charAt(peg$currPos))) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c67); } + } + if (s3 !== peg$FAILED) { + while (s3 !== peg$FAILED) { + s2.push(s3); + if (peg$c66.test(input.charAt(peg$currPos))) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c67); } + } + } + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = input.substring(s1, peg$currPos); + } else { + s1 = s2; + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c68(s1); + } + s0 = s1; + + return s0; + } + + function peg$parseStringReference() { + var s0, s1; + + s0 = peg$currPos; + s1 = peg$parseVariableName(); + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c69(s1); + } + s0 = s1; + + return s0; + } + + function peg$parseEnvironment() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8; + + s0 = peg$currPos; + if (input.substr(peg$currPos, 7) === peg$c70) { + s1 = peg$c70; + peg$currPos += 7; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c71); } + } + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + s3 = []; + if (peg$c72.test(input.charAt(peg$currPos))) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c73); } + } + if (s4 !== peg$FAILED) { + while (s4 !== peg$FAILED) { + s3.push(s4); + if (peg$c72.test(input.charAt(peg$currPos))) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c73); } + } + } + } else { + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + s2 = input.substring(s2, peg$currPos); + } else { + s2 = s3; + } + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 125) { + s3 = peg$c19; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c20); } + } + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$parseEnvironment(); + if (s5 === peg$FAILED) { + s5 = peg$parseBlock(); + if (s5 === peg$FAILED) { + s5 = peg$parseCommand(); + if (s5 === peg$FAILED) { + s5 = peg$parseMath(); + if (s5 === peg$FAILED) { + s5 = peg$parseText(); + } + } + } + } + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parseEnvironment(); + if (s5 === peg$FAILED) { + s5 = peg$parseBlock(); + if (s5 === peg$FAILED) { + s5 = peg$parseCommand(); + if (s5 === peg$FAILED) { + s5 = peg$parseMath(); + if (s5 === peg$FAILED) { + s5 = peg$parseText(); + } + } + } + } + } + if (s4 !== peg$FAILED) { + if (input.substr(peg$currPos, 5) === peg$c74) { + s5 = peg$c74; + peg$currPos += 5; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c75); } + } + if (s5 !== peg$FAILED) { + s6 = peg$currPos; + s7 = []; + if (peg$c72.test(input.charAt(peg$currPos))) { + s8 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s8 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c73); } + } + if (s8 !== peg$FAILED) { + while (s8 !== peg$FAILED) { + s7.push(s8); + if (peg$c72.test(input.charAt(peg$currPos))) { + s8 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s8 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c73); } + } + } + } else { + s7 = peg$FAILED; + } + if (s7 !== peg$FAILED) { + s6 = input.substring(s6, peg$currPos); + } else { + s6 = s7; + } + if (s6 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 125) { + s7 = peg$c19; + peg$currPos++; + } else { + s7 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c20); } + } + if (s7 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s8 = peg$c76(s2, s4, s6); + if (s8) { + s8 = void 0; + } else { + s8 = peg$FAILED; + } + if (s8 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c77(s2, s4); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseBlock() { + var s0, s1, s2, s3, s4, s5, s6; + + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c78) { + s1 = peg$c78; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c79); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parseExtendedDiacritic(); + if (s2 !== peg$FAILED) { + s3 = peg$parse__(); + if (s3 !== peg$FAILED) { + if (peg$c72.test(input.charAt(peg$currPos))) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c73); } + } + if (s4 === peg$FAILED) { + s4 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 92) { + s5 = peg$c80; + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c81); } + } + if (s5 !== peg$FAILED) { + if (peg$c82.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c83); } + } + if (s6 !== peg$FAILED) { + s5 = [s5, s6]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } + if (s4 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 125) { + s5 = peg$c19; + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c20); } + } + if (s5 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c84(s2, s4); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.substr(peg$currPos, 6) === peg$c57) { + s1 = peg$c57; + peg$currPos += 6; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c58); } + } + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + peg$silentFails++; + if (peg$c59.test(input.charAt(peg$currPos))) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c60); } + } + peg$silentFails--; + if (s3 === peg$FAILED) { + s2 = void 0; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parseVerbatimText(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parseVerbatimText(); + } + if (s3 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 125) { + s4 = peg$c19; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c20); } + } + if (s4 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c85(s3); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 123) { + s1 = peg$c15; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c16); } + } + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parseEnvironment(); + if (s3 === peg$FAILED) { + s3 = peg$parseBlock(); + if (s3 === peg$FAILED) { + s3 = peg$parseCommand(); + if (s3 === peg$FAILED) { + s3 = peg$parseMath(); + if (s3 === peg$FAILED) { + s3 = peg$parseText(); + } + } + } + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parseEnvironment(); + if (s3 === peg$FAILED) { + s3 = peg$parseBlock(); + if (s3 === peg$FAILED) { + s3 = peg$parseCommand(); + if (s3 === peg$FAILED) { + s3 = peg$parseMath(); + if (s3 === peg$FAILED) { + s3 = peg$parseText(); + } + } + } + } + } + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 125) { + s3 = peg$c19; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c20); } + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c86(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + } + + return s0; + } + + function peg$parseMath() { + var s0, s1, s2, s3, s4, s5, s6; + + s0 = peg$currPos; + peg$savedPos = peg$currPos; + s1 = peg$c87(); + if (s1) { + s1 = void 0; + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 36) { + s2 = peg$c88; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c89); } + } + if (s2 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c90) { + s2 = peg$c90; + peg$currPos += 2; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c91); } + } + } + if (s2 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s3 = peg$c92(); + if (s3) { + s3 = void 0; + } else { + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$parseBlock(); + if (s5 === peg$FAILED) { + s5 = peg$parseCommand(); + if (s5 === peg$FAILED) { + s5 = peg$parseText(); + } + } + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parseBlock(); + if (s5 === peg$FAILED) { + s5 = peg$parseCommand(); + if (s5 === peg$FAILED) { + s5 = peg$parseText(); + } + } + } + if (s4 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 36) { + s5 = peg$c88; + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c89); } + } + if (s5 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c90) { + s5 = peg$c90; + peg$currPos += 2; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c91); } + } + } + if (s5 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s6 = peg$c93(); + if (s6) { + s6 = void 0; + } else { + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c94(s2, s4); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseLineComment() { + var s0, s1, s2, s3, s4, s5; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 37) { + s1 = peg$c95; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c96); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parse__h(); + if (s2 !== peg$FAILED) { + s3 = peg$currPos; + s4 = []; + if (peg$c97.test(input.charAt(peg$currPos))) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c98); } + } + if (s5 !== peg$FAILED) { + while (s5 !== peg$FAILED) { + s4.push(s5); + if (peg$c97.test(input.charAt(peg$currPos))) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c98); } + } + } + } else { + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s3 = input.substring(s3, peg$currPos); + } else { + s3 = s4; + } + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$parseEOL(); + if (s5 !== peg$FAILED) { + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parseEOL(); + } + } else { + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c99(s3); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseCommand() { + var s0; + + s0 = peg$parseScriptCommand(); + if (s0 === peg$FAILED) { + s0 = peg$parseDiacriticCommand(); + if (s0 === peg$FAILED) { + s0 = peg$parseRegularCommand(); + if (s0 === peg$FAILED) { + s0 = peg$parseSymbolCommand(); + } + } + } + + return s0; + } + + function peg$parseScriptCommand() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + if (peg$c100.test(input.charAt(peg$currPos))) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c101); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parse__h(); + if (s2 !== peg$FAILED) { + s3 = peg$parseRequiredArgument(); + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c102(s1, s3); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseDiacriticCommand() { + var s0, s1, s2, s3, s4, s5, s6; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 92) { + s1 = peg$c80; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c81); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parseSimpleDiacritic(); + if (s2 !== peg$FAILED) { + s3 = peg$parse__(); + if (s3 !== peg$FAILED) { + if (peg$c72.test(input.charAt(peg$currPos))) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c73); } + } + if (s4 === peg$FAILED) { + s4 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 92) { + s5 = peg$c80; + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c81); } + } + if (s5 !== peg$FAILED) { + if (peg$c82.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c83); } + } + if (s6 !== peg$FAILED) { + s5 = [s5, s6]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } + if (s4 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c84(s2, s4); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 92) { + s1 = peg$c80; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c81); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parseExtendedDiacritic(); + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 123) { + s3 = peg$c15; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c16); } + } + if (s3 !== peg$FAILED) { + if (peg$c72.test(input.charAt(peg$currPos))) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c73); } + } + if (s4 === peg$FAILED) { + s4 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 92) { + s5 = peg$c80; + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c81); } + } + if (s5 !== peg$FAILED) { + if (peg$c82.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c83); } + } + if (s6 !== peg$FAILED) { + s5 = [s5, s6]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } + if (s4 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 125) { + s5 = peg$c19; + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c20); } + } + if (s5 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c84(s2, s4); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 92) { + s1 = peg$c80; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c81); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parseExtendedDiacritic(); + if (s2 !== peg$FAILED) { + s3 = peg$currPos; + peg$silentFails++; + if (input.charCodeAt(peg$currPos) === 123) { + s4 = peg$c15; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c16); } + } + peg$silentFails--; + if (s4 !== peg$FAILED) { + peg$currPos = s3; + s3 = void 0; + } else { + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + s4 = peg$parseRegularValue(); + if (s4 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c103(s2, s4); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + } + + return s0; + } + + function peg$parseSymbolCommand() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 92) { + s1 = peg$c80; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c81); } + } + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + if (peg$c104.test(input.charAt(peg$currPos))) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c105); } + } + if (s3 !== peg$FAILED) { + s2 = input.substring(s2, peg$currPos); + } else { + s2 = s3; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c106(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseRegularCommand() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 92) { + s1 = peg$c80; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c81); } + } + if (s1 !== peg$FAILED) { + if (input.substr(peg$currPos, 10) === peg$c107) { + s2 = peg$c107; + peg$currPos += 10; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c108); } + } + if (s2 !== peg$FAILED) { + s3 = peg$parseBlock(); + if (s3 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s4 = peg$c109(s2, s3); + if (s4) { + s4 = void 0; + } else { + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = []; + s6 = peg$parseOptionalArgument(); + while (s6 !== peg$FAILED) { + s5.push(s6); + s6 = peg$parseOptionalArgument(); + } + if (s5 !== peg$FAILED) { + s6 = peg$parseRequiredArgument(); + if (s6 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c110(s2, s3, s5, s6); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 92) { + s1 = peg$c80; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c81); } + } + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + peg$silentFails++; + if (input.substr(peg$currPos, 5) === peg$c111) { + s3 = peg$c111; + peg$currPos += 5; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c112); } + } + peg$silentFails--; + if (s3 === peg$FAILED) { + s2 = void 0; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s3 = peg$currPos; + peg$silentFails++; + if (input.substr(peg$currPos, 3) === peg$c113) { + s4 = peg$c113; + peg$currPos += 3; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c114); } + } + peg$silentFails--; + if (s4 === peg$FAILED) { + s3 = void 0; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + s4 = peg$currPos; + s5 = []; + if (peg$c22.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c23); } + } + if (s6 !== peg$FAILED) { + while (s6 !== peg$FAILED) { + s5.push(s6); + if (peg$c22.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c23); } + } + } + } else { + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + s4 = input.substring(s4, peg$currPos); + } else { + s4 = s5; + } + if (s4 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s5 = peg$c115(s4); + if (s5) { + s5 = void 0; + } else { + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + s6 = []; + s7 = peg$parseOptionalArgument(); + while (s7 !== peg$FAILED) { + s6.push(s7); + s7 = peg$parseOptionalArgument(); + } + if (s6 !== peg$FAILED) { + s7 = peg$parse__h(); + if (s7 !== peg$FAILED) { + s8 = peg$currPos; + peg$silentFails++; + if (input.charCodeAt(peg$currPos) === 123) { + s9 = peg$c15; + peg$currPos++; + } else { + s9 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c16); } + } + peg$silentFails--; + if (s9 !== peg$FAILED) { + peg$currPos = s8; + s8 = void 0; + } else { + s8 = peg$FAILED; + } + if (s8 !== peg$FAILED) { + s9 = peg$parseVerbatimFieldValue(); + if (s9 !== peg$FAILED) { + s10 = peg$parseVerbatimFieldValue(); + if (s10 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c116(s4, s6, s9, s10); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 92) { + s1 = peg$c80; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c81); } + } + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + peg$silentFails++; + if (input.substr(peg$currPos, 5) === peg$c111) { + s3 = peg$c111; + peg$currPos += 5; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c112); } + } + peg$silentFails--; + if (s3 === peg$FAILED) { + s2 = void 0; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s3 = peg$currPos; + peg$silentFails++; + if (input.substr(peg$currPos, 3) === peg$c113) { + s4 = peg$c113; + peg$currPos += 3; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c114); } + } + peg$silentFails--; + if (s4 === peg$FAILED) { + s3 = void 0; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + s4 = peg$currPos; + s5 = []; + if (peg$c22.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c23); } + } + if (s6 !== peg$FAILED) { + while (s6 !== peg$FAILED) { + s5.push(s6); + if (peg$c22.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c23); } + } + } + } else { + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + s4 = input.substring(s4, peg$currPos); + } else { + s4 = s5; + } + if (s4 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s5 = peg$c117(s4); + if (s5) { + s5 = void 0; + } else { + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + s6 = []; + s7 = peg$parseOptionalArgument(); + while (s7 !== peg$FAILED) { + s6.push(s7); + s7 = peg$parseOptionalArgument(); + } + if (s6 !== peg$FAILED) { + s7 = peg$parse__h(); + if (s7 !== peg$FAILED) { + s8 = peg$currPos; + peg$silentFails++; + if (input.charCodeAt(peg$currPos) === 123) { + s9 = peg$c15; + peg$currPos++; + } else { + s9 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c16); } + } + peg$silentFails--; + if (s9 !== peg$FAILED) { + peg$currPos = s8; + s8 = void 0; + } else { + s8 = peg$FAILED; + } + if (s8 !== peg$FAILED) { + s9 = peg$parseVerbatimFieldValue(); + if (s9 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c118(s4, s6, s9); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 92) { + s1 = peg$c80; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c81); } + } + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + peg$silentFails++; + if (input.substr(peg$currPos, 5) === peg$c111) { + s3 = peg$c111; + peg$currPos += 5; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c112); } + } + peg$silentFails--; + if (s3 === peg$FAILED) { + s2 = void 0; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s3 = peg$currPos; + peg$silentFails++; + if (input.substr(peg$currPos, 3) === peg$c113) { + s4 = peg$c113; + peg$currPos += 3; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c114); } + } + peg$silentFails--; + if (s4 === peg$FAILED) { + s3 = void 0; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + s4 = peg$currPos; + s5 = []; + if (peg$c22.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c23); } + } + if (s6 !== peg$FAILED) { + while (s6 !== peg$FAILED) { + s5.push(s6); + if (peg$c22.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c23); } + } + } + } else { + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + s4 = input.substring(s4, peg$currPos); + } else { + s4 = s5; + } + if (s4 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s5 = peg$c119(s4); + if (s5) { + s5 = void 0; + } else { + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + s6 = []; + s7 = peg$parseOptionalArgument(); + while (s7 !== peg$FAILED) { + s6.push(s7); + s7 = peg$parseOptionalArgument(); + } + if (s6 !== peg$FAILED) { + s7 = peg$parse__h(); + if (s7 !== peg$FAILED) { + s8 = peg$parseRequiredArgument(); + if (s8 !== peg$FAILED) { + s9 = peg$parseRequiredArgument(); + if (s9 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c120(s4, s6, s8, s9); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 92) { + s1 = peg$c80; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c81); } + } + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + peg$silentFails++; + if (input.substr(peg$currPos, 5) === peg$c111) { + s3 = peg$c111; + peg$currPos += 5; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c112); } + } + peg$silentFails--; + if (s3 === peg$FAILED) { + s2 = void 0; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s3 = peg$currPos; + peg$silentFails++; + if (input.substr(peg$currPos, 3) === peg$c113) { + s4 = peg$c113; + peg$currPos += 3; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c114); } + } + peg$silentFails--; + if (s4 === peg$FAILED) { + s3 = void 0; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + s4 = peg$currPos; + s5 = []; + if (peg$c22.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c23); } + } + if (s6 !== peg$FAILED) { + while (s6 !== peg$FAILED) { + s5.push(s6); + if (peg$c22.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c23); } + } + } + } else { + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + s4 = input.substring(s4, peg$currPos); + } else { + s4 = s5; + } + if (s4 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s5 = peg$c121(s4); + if (s5) { + s5 = void 0; + } else { + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + s6 = []; + s7 = peg$parseOptionalArgument(); + while (s7 !== peg$FAILED) { + s6.push(s7); + s7 = peg$parseOptionalArgument(); + } + if (s6 !== peg$FAILED) { + s7 = peg$parse__h(); + if (s7 !== peg$FAILED) { + s8 = peg$parseRequiredArgument(); + if (s8 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c122(s4, s6, s8); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 92) { + s1 = peg$c80; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c81); } + } + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + peg$silentFails++; + if (input.substr(peg$currPos, 5) === peg$c111) { + s3 = peg$c111; + peg$currPos += 5; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c112); } + } + peg$silentFails--; + if (s3 === peg$FAILED) { + s2 = void 0; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s3 = peg$currPos; + peg$silentFails++; + if (input.substr(peg$currPos, 3) === peg$c113) { + s4 = peg$c113; + peg$currPos += 3; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c114); } + } + peg$silentFails--; + if (s4 === peg$FAILED) { + s3 = void 0; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + s4 = peg$currPos; + s5 = []; + if (peg$c22.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c23); } + } + if (s6 !== peg$FAILED) { + while (s6 !== peg$FAILED) { + s5.push(s6); + if (peg$c22.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c23); } + } + } + } else { + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + s4 = input.substring(s4, peg$currPos); + } else { + s4 = s5; + } + if (s4 !== peg$FAILED) { + s5 = []; + s6 = peg$parseOptionalArgument(); + while (s6 !== peg$FAILED) { + s5.push(s6); + s6 = peg$parseOptionalArgument(); + } + if (s5 !== peg$FAILED) { + s6 = peg$parse__(); + if (s6 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c123(s4, s5); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + } + } + } + } + + return s0; + } + + function peg$parseOptionalArgument() { + var s0, s1, s2, s3, s4, s5; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 91) { + s1 = peg$c124; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c125); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parse__h(); + if (s2 !== peg$FAILED) { + s3 = peg$currPos; + s4 = []; + if (peg$c126.test(input.charAt(peg$currPos))) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c127); } + } + if (s5 !== peg$FAILED) { + while (s5 !== peg$FAILED) { + s4.push(s5); + if (peg$c126.test(input.charAt(peg$currPos))) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c127); } + } + } + } else { + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s3 = input.substring(s3, peg$currPos); + } else { + s3 = s4; + } + if (s3 !== peg$FAILED) { + s4 = peg$parse__h(); + if (s4 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 93) { + s5 = peg$c128; + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c129); } + } + if (s5 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c130(s3); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseRequiredArgument() { + var s0, s1, s2; + + s0 = peg$currPos; + s1 = peg$parse__h(); + if (s1 !== peg$FAILED) { + if (peg$c131.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c132); } + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c133(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseBlock(); + if (s1 === peg$FAILED) { + s1 = peg$parseCommand(); + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c52(s1); + } + s0 = s1; + } + + return s0; + } + + function peg$parseVariableName() { + var s0, s1, s2, s3, s4; + + s0 = peg$currPos; + s1 = peg$currPos; + if (peg$c134.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c135); } + } + if (s2 !== peg$FAILED) { + s3 = []; + if (peg$c136.test(input.charAt(peg$currPos))) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c137); } + } + while (s4 !== peg$FAILED) { + s3.push(s4); + if (peg$c136.test(input.charAt(peg$currPos))) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c137); } + } + } + if (s3 !== peg$FAILED) { + s2 = [s2, s3]; + s1 = s2; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s0 = input.substring(s0, peg$currPos); + } else { + s0 = s1; + } + + return s0; + } + + function peg$parseSimpleDiacritic() { + var s0; + + if (peg$c138.test(input.charAt(peg$currPos))) { + s0 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c139); } + } + + return s0; + } + + function peg$parseExtendedDiacritic() { + var s0; + + if (peg$c140.test(input.charAt(peg$currPos))) { + s0 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c141); } + } + + return s0; + } + + function peg$parseFieldSeparator() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + s1 = peg$parse__(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 61) { + s2 = peg$c142; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c143); } + } + if (s2 !== peg$FAILED) { + s3 = peg$parse__(); + if (s3 !== peg$FAILED) { + s1 = [s1, s2, s3]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseFieldTerminator() { + var s0, s1, s2, s3, s4, s5; + + s0 = peg$currPos; + s1 = peg$parse__(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 44) { + s2 = peg$c37; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c38); } + } + if (s2 === peg$FAILED) { + s2 = null; + } + if (s2 !== peg$FAILED) { + s3 = peg$parse__h(); + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$parseLineComment(); + if (s5 === peg$FAILED) { + s5 = peg$parseEOL(); + } + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parseLineComment(); + if (s5 === peg$FAILED) { + s5 = peg$parseEOL(); + } + } + if (s4 !== peg$FAILED) { + s1 = [s1, s2, s3, s4]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseConcat() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + s1 = peg$parse__(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 35) { + s2 = peg$c144; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c145); } + } + if (s2 !== peg$FAILED) { + s3 = peg$parse__(); + if (s3 !== peg$FAILED) { + s1 = [s1, s2, s3]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseEOL() { + var s0; + + if (peg$c146.test(input.charAt(peg$currPos))) { + s0 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c147); } + } + + return s0; + } + + function peg$parse__h() { + var s0, s1; + + peg$silentFails++; + s0 = []; + if (peg$c149.test(input.charAt(peg$currPos))) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c150); } + } + while (s1 !== peg$FAILED) { + s0.push(s1); + if (peg$c149.test(input.charAt(peg$currPos))) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c150); } + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c151); } + } + + return s0; + } + + function peg$parse__() { + var s0, s1; + + peg$silentFails++; + s0 = []; + if (peg$c155.test(input.charAt(peg$currPos))) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c156); } + } + while (s1 !== peg$FAILED) { + s0.push(s1); + if (peg$c155.test(input.charAt(peg$currPos))) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c156); } + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c157); } + } + + return s0; + } + + + /* + MIT License + + Copyright (c) 2017 Derek P Sifford, parts copyright (c) 2019 by Emiliano Heyns + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + */ + + const markup = { + sl: 'italics', + em: 'italics', + it: 'italics', + itshape: 'italics', + + bf: 'bold', + bfseries: 'bold', + + sc: 'smallCaps', + scshape: 'smallCaps', + + tt: 'fixedWidth', + rm: 'roman', + sf: 'sansSerif', + verb: 'verbatim', + }; + + const unnestFields = (options.unnestFields || []).map(field => field.toLowerCase()); + const verbatimFields = (options.verbatimFields || [ 'urlraw', 'url', 'doi', 'file', 'files', 'eprint', 'verba', 'verbb', 'verbc' ]).map(field => typeof field === 'string' ? field.toLowerCase() : field); + const verbatimCommands = (options.verbatimCommands || ['texttt', 'url', 'href']); + + function isVerbatimField(name) { + return verbatimFields.find(p => (typeof p === 'string') ? name === p : name.match(p)) + } + + function normalizeWhitespace(textArr) { + return textArr.reduce((prev, curr) => { + if (/\s/.test(curr)) { + if (/\s/.test(prev[prev.length - 1])) { + return prev; + } else { + return prev + ' '; + } + } + return prev + curr; + }, ''); + } + + const has_arguments = { + ElsevierGlyph: 1, + end: 1, + begin: 1, + bibcyr: 1, + bibstring: 1, + chsf: 1, + cite: 1, + cyrchar: 1, + ding: 1, + emph: 1, + enquote: 1, + frac: 2, + href: 2, + hspace: 1, + mathrm: 1, + mbox: 1, + mkbibbold: 1, + mkbibemph: 1, + mkbibitalic: 1, + mkbibquote: 1, + newcommand: 2, + noopsort: 1, + ocirc: 1, + section: 1, + sb: 1, + sp: 1, + subsection: 1, + subsubsection: 1, + subsubsubsection: 1, + t: 1, + textbf: 1, + textit: 1, + textrm: 1, + textsc: 1, + textsubscript: 1, + textsuperscript: 1, + texttt: 1, + url: 1, + vphantom: 1, + vspace: 1, + }; + + if (options.combiningDiacritics) { + for (const cmd of options.combiningDiacritics) { + has_arguments[cmd] = 1; + } + } + + const math = { + on: false, + + set: function(state) { + this.on = state; + return true + } + }; + + function basicTextConversions(node) { + if (node.kind !== 'Text') throw new Error(node.kind + ' is not a Text node') + + switch (node.mode) { + case 'verbatim': + break + + case 'math': + node.value = node.value.replace(/~/g, '\u00A0'); + break + + case 'text': + node.value = node.value + .replace(/---/g, '\u2014') + .replace(/--/g, '\u2013') + .replace(//g, '\u00BF') + .replace(/~/g, '\u00A0') + .replace(/``/g, options.markup.enquote.open) + .replace(/''/g, options.markup.enquote.close); + break + + default: + throw new Error(`Unexpected text mode ${node.mode}`) + } + + return node + } + + function protect(v) { + let source; + if (Array.isArray(v)) { + source = v.map(e => e.source).join(''); + } else { + v = [ v ]; + source = v.source; + } + + return { + kind: 'Block', + value: v, + markup: {}, + case: 'protect', + source: source, + } + } + + function handle_markup_switches(block) { + const value = block.value; + if (!Array.isArray(value)) return block + + block.value = []; + + const pseudo = { + block: null, + markup: {}, + }; + function pseudo_block() { + pseudo.block = { + kind: 'Block', + loc: location(), + source: '', + value: [], + markup: JSON.parse(JSON.stringify(pseudo.markup)), + pseudo: true, + }; + block.value.push(pseudo.block); + } + for (const node of value) { + if (node.kind === 'Environment' || node.kind === 'Block') { + block.value.push(node); + + if (Object.keys(pseudo.markup).length) { + pseudo_block(); + } else { + pseudo.block = null; + } + continue + } + + if (node.kind === 'RegularCommand' && markup[node.command]) { + if (pseudo.markup.italics) { // https://github.com/citation-js/bibtex-parser-experiments/commit/cae475f075a05d1c074485a061b08ed245170c7e + delete pseudo.markup.italics; + if (markup[node.command] !== 'italics') pseudo.markup[markup[node.command]] = true; + } else { + pseudo.markup[markup[node.command]] = true; + } + + if (Object.keys(pseudo.markup).length) { + pseudo_block(); + } else { + pseudo.block = null; + } + } + + if (pseudo.block) { + pseudo.block.source += node.source; + pseudo.block.value.push(node); + + } else { + block.value.push(node); + + } + } + + block.value = block.value.filter(node => !(node.pseudo && node.value.length === 0)); + + return block + } + + + peg$result = peg$startRuleFunction(); + + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail(peg$endExpectation()); + } + + throw peg$buildStructuredError( + peg$maxFailExpected, + peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, + peg$maxFailPos < input.length + ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) + : peg$computeLocation(peg$maxFailPos, peg$maxFailPos) + ); + } + } + + var grammar = { + SyntaxError: peg$SyntaxError, + parse: peg$parse + }; + + var chunker = createCommonjsModule(function (module, exports) { + // Original work by Henrik Muehe (c) 2010 + // + // CommonJS port by Mikola Lysenko 2013 + // + Object.defineProperty(exports, "__esModule", { value: true }); + exports.parse = void 0; + class ParseError extends Error { + constructor(message, parser) { + message += ` @ ${parser.pos}`; + if (parser.parsing) + message += ` in ${JSON.stringify(parser.parsing)}`; + super(message); + this.name = 'ParseError'; + } + } + // tslint:disable-next-line prefer-template + const letter = new RegExp('[' + [ + // Letter, Uppercase + /\u0041-\u005A\u00C0-\u00D6\u00D8-\u00DE\u0100\u0102\u0104\u0106\u0108\u010A\u010C\u010E\u0110\u0112\u0114\u0116\u0118\u011A\u011C\u011E\u0120\u0122\u0124\u0126\u0128\u012A\u012C\u012E\u0130\u0132\u0134\u0136\u0139\u013B\u013D\u013F\u0141\u0143\u0145\u0147\u014A\u014C\u014E\u0150\u0152\u0154\u0156\u0158\u015A\u015C\u015E\u0160\u0162\u0164\u0166\u0168\u016A\u016C\u016E\u0170\u0172\u0174\u0176\u0178-\u0179\u017B\u017D\u0181-\u0182\u0184\u0186-\u0187\u0189-\u018B\u018E-\u0191\u0193-\u0194\u0196-\u0198\u019C-\u019D\u019F-\u01A0\u01A2\u01A4\u01A6-\u01A7\u01A9\u01AC\u01AE-\u01AF\u01B1-\u01B3\u01B5\u01B7-\u01B8\u01BC\u01C4\u01C7\u01CA\u01CD\u01CF\u01D1\u01D3\u01D5\u01D7\u01D9\u01DB\u01DE\u01E0\u01E2\u01E4\u01E6\u01E8\u01EA\u01EC\u01EE\u01F1\u01F4\u01F6-\u01F8\u01FA\u01FC\u01FE\u0200\u0202\u0204\u0206\u0208\u020A\u020C\u020E\u0210\u0212\u0214\u0216\u0218\u021A\u021C\u021E\u0220\u0222\u0224\u0226\u0228\u022A\u022C\u022E\u0230\u0232\u023A-\u023B\u023D-\u023E\u0241\u0243-\u0246\u0248\u024A\u024C\u024E\u0370\u0372\u0376\u037F\u0386\u0388-\u038A\u038C\u038E-\u038F\u0391-\u03A1\u03A3-\u03AB\u03CF\u03D2-\u03D4\u03D8\u03DA\u03DC\u03DE\u03E0\u03E2\u03E4\u03E6\u03E8\u03EA\u03EC\u03EE\u03F4\u03F7\u03F9-\u03FA\u03FD-\u042F\u0460\u0462\u0464\u0466\u0468\u046A\u046C\u046E\u0470\u0472\u0474\u0476\u0478\u047A\u047C\u047E\u0480\u048A\u048C\u048E\u0490\u0492\u0494\u0496\u0498\u049A\u049C\u049E\u04A0\u04A2\u04A4\u04A6\u04A8\u04AA\u04AC\u04AE\u04B0\u04B2\u04B4\u04B6\u04B8\u04BA\u04BC\u04BE\u04C0-\u04C1\u04C3\u04C5\u04C7\u04C9\u04CB\u04CD\u04D0\u04D2\u04D4\u04D6\u04D8\u04DA\u04DC\u04DE\u04E0\u04E2\u04E4\u04E6\u04E8\u04EA\u04EC\u04EE\u04F0\u04F2\u04F4\u04F6\u04F8\u04FA\u04FC\u04FE\u0500\u0502\u0504\u0506\u0508\u050A\u050C\u050E\u0510\u0512\u0514\u0516\u0518\u051A\u051C\u051E\u0520\u0522\u0524\u0526\u0528\u052A\u052C\u052E\u0531-\u0556\u10A0-\u10C5\u10C7\u10CD\u13A0-\u13F5\u1E00\u1E02\u1E04\u1E06\u1E08\u1E0A\u1E0C\u1E0E\u1E10\u1E12\u1E14\u1E16\u1E18\u1E1A\u1E1C\u1E1E\u1E20\u1E22\u1E24\u1E26\u1E28\u1E2A\u1E2C\u1E2E\u1E30\u1E32\u1E34\u1E36\u1E38\u1E3A\u1E3C\u1E3E\u1E40\u1E42\u1E44\u1E46\u1E48\u1E4A\u1E4C\u1E4E\u1E50\u1E52\u1E54\u1E56\u1E58\u1E5A\u1E5C\u1E5E\u1E60\u1E62\u1E64\u1E66\u1E68\u1E6A\u1E6C\u1E6E\u1E70\u1E72\u1E74\u1E76\u1E78\u1E7A\u1E7C\u1E7E\u1E80\u1E82\u1E84\u1E86\u1E88\u1E8A\u1E8C\u1E8E\u1E90\u1E92\u1E94\u1E9E\u1EA0\u1EA2\u1EA4\u1EA6\u1EA8\u1EAA\u1EAC\u1EAE\u1EB0\u1EB2\u1EB4\u1EB6\u1EB8\u1EBA\u1EBC\u1EBE\u1EC0\u1EC2\u1EC4\u1EC6\u1EC8\u1ECA\u1ECC\u1ECE\u1ED0\u1ED2\u1ED4\u1ED6\u1ED8\u1EDA\u1EDC\u1EDE\u1EE0\u1EE2\u1EE4\u1EE6\u1EE8\u1EEA\u1EEC\u1EEE\u1EF0\u1EF2\u1EF4\u1EF6\u1EF8\u1EFA\u1EFC\u1EFE\u1F08-\u1F0F\u1F18-\u1F1D\u1F28-\u1F2F\u1F38-\u1F3F\u1F48-\u1F4D\u1F59\u1F5B\u1F5D\u1F5F\u1F68-\u1F6F\u1FB8-\u1FBB\u1FC8-\u1FCB\u1FD8-\u1FDB\u1FE8-\u1FEC\u1FF8-\u1FFB\u2102\u2107\u210B-\u210D\u2110-\u2112\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u2130-\u2133\u213E-\u213F\u2145\u2183\u2C00-\u2C2E\u2C60\u2C62-\u2C64\u2C67\u2C69\u2C6B\u2C6D-\u2C70\u2C72\u2C75\u2C7E-\u2C80\u2C82\u2C84\u2C86\u2C88\u2C8A\u2C8C\u2C8E\u2C90\u2C92\u2C94\u2C96\u2C98\u2C9A\u2C9C\u2C9E\u2CA0\u2CA2\u2CA4\u2CA6\u2CA8\u2CAA\u2CAC\u2CAE\u2CB0\u2CB2\u2CB4\u2CB6\u2CB8\u2CBA\u2CBC\u2CBE\u2CC0\u2CC2\u2CC4\u2CC6\u2CC8\u2CCA\u2CCC\u2CCE\u2CD0\u2CD2\u2CD4\u2CD6\u2CD8\u2CDA\u2CDC\u2CDE\u2CE0\u2CE2\u2CEB\u2CED\u2CF2\uA640\uA642\uA644\uA646\uA648\uA64A\uA64C\uA64E\uA650\uA652\uA654\uA656\uA658\uA65A\uA65C\uA65E\uA660\uA662\uA664\uA666\uA668\uA66A\uA66C\uA680\uA682\uA684\uA686\uA688\uA68A\uA68C\uA68E\uA690\uA692\uA694\uA696\uA698\uA69A\uA722\uA724\uA726\uA728\uA72A\uA72C\uA72E\uA732\uA734\uA736\uA738\uA73A\uA73C\uA73E\uA740\uA742\uA744\uA746\uA748\uA74A\uA74C\uA74E\uA750\uA752\uA754\uA756\uA758\uA75A\uA75C\uA75E\uA760\uA762\uA764\uA766\uA768\uA76A\uA76C\uA76E\uA779\uA77B\uA77D-\uA77E\uA780\uA782\uA784\uA786\uA78B\uA78D\uA790\uA792\uA796\uA798\uA79A\uA79C\uA79E\uA7A0\uA7A2\uA7A4\uA7A6\uA7A8\uA7AA-\uA7AD\uA7B0-\uA7B4\uA7B6\uFF21-\uFF3A/.source, + // Letter, Titlecase + /\u01C5\u01C8\u01CB\u01F2\u1F88-\u1F8F\u1F98-\u1F9F\u1FA8-\u1FAF\u1FBC\u1FCC\u1FFC/.source, + // Letter, Lowercase + /\u0061-\u007A\u00B5\u00DF-\u00F6\u00F8-\u00FF\u0101\u0103\u0105\u0107\u0109\u010B\u010D\u010F\u0111\u0113\u0115\u0117\u0119\u011B\u011D\u011F\u0121\u0123\u0125\u0127\u0129\u012B\u012D\u012F\u0131\u0133\u0135\u0137-\u0138\u013A\u013C\u013E\u0140\u0142\u0144\u0146\u0148-\u0149\u014B\u014D\u014F\u0151\u0153\u0155\u0157\u0159\u015B\u015D\u015F\u0161\u0163\u0165\u0167\u0169\u016B\u016D\u016F\u0171\u0173\u0175\u0177\u017A\u017C\u017E-\u0180\u0183\u0185\u0188\u018C-\u018D\u0192\u0195\u0199-\u019B\u019E\u01A1\u01A3\u01A5\u01A8\u01AA-\u01AB\u01AD\u01B0\u01B4\u01B6\u01B9-\u01BA\u01BD-\u01BF\u01C6\u01C9\u01CC\u01CE\u01D0\u01D2\u01D4\u01D6\u01D8\u01DA\u01DC-\u01DD\u01DF\u01E1\u01E3\u01E5\u01E7\u01E9\u01EB\u01ED\u01EF-\u01F0\u01F3\u01F5\u01F9\u01FB\u01FD\u01FF\u0201\u0203\u0205\u0207\u0209\u020B\u020D\u020F\u0211\u0213\u0215\u0217\u0219\u021B\u021D\u021F\u0221\u0223\u0225\u0227\u0229\u022B\u022D\u022F\u0231\u0233-\u0239\u023C\u023F-\u0240\u0242\u0247\u0249\u024B\u024D\u024F-\u0293\u0295-\u02AF\u0371\u0373\u0377\u037B-\u037D\u0390\u03AC-\u03CE\u03D0-\u03D1\u03D5-\u03D7\u03D9\u03DB\u03DD\u03DF\u03E1\u03E3\u03E5\u03E7\u03E9\u03EB\u03ED\u03EF-\u03F3\u03F5\u03F8\u03FB-\u03FC\u0430-\u045F\u0461\u0463\u0465\u0467\u0469\u046B\u046D\u046F\u0471\u0473\u0475\u0477\u0479\u047B\u047D\u047F\u0481\u048B\u048D\u048F\u0491\u0493\u0495\u0497\u0499\u049B\u049D\u049F\u04A1\u04A3\u04A5\u04A7\u04A9\u04AB\u04AD\u04AF\u04B1\u04B3\u04B5\u04B7\u04B9\u04BB\u04BD\u04BF\u04C2\u04C4\u04C6\u04C8\u04CA\u04CC\u04CE-\u04CF\u04D1\u04D3\u04D5\u04D7\u04D9\u04DB\u04DD\u04DF\u04E1\u04E3\u04E5\u04E7\u04E9\u04EB\u04ED\u04EF\u04F1\u04F3\u04F5\u04F7\u04F9\u04FB\u04FD\u04FF\u0501\u0503\u0505\u0507\u0509\u050B\u050D\u050F\u0511\u0513\u0515\u0517\u0519\u051B\u051D\u051F\u0521\u0523\u0525\u0527\u0529\u052B\u052D\u052F\u0561-\u0587\u13F8-\u13FD\u1D00-\u1D2B\u1D6B-\u1D77\u1D79-\u1D9A\u1E01\u1E03\u1E05\u1E07\u1E09\u1E0B\u1E0D\u1E0F\u1E11\u1E13\u1E15\u1E17\u1E19\u1E1B\u1E1D\u1E1F\u1E21\u1E23\u1E25\u1E27\u1E29\u1E2B\u1E2D\u1E2F\u1E31\u1E33\u1E35\u1E37\u1E39\u1E3B\u1E3D\u1E3F\u1E41\u1E43\u1E45\u1E47\u1E49\u1E4B\u1E4D\u1E4F\u1E51\u1E53\u1E55\u1E57\u1E59\u1E5B\u1E5D\u1E5F\u1E61\u1E63\u1E65\u1E67\u1E69\u1E6B\u1E6D\u1E6F\u1E71\u1E73\u1E75\u1E77\u1E79\u1E7B\u1E7D\u1E7F\u1E81\u1E83\u1E85\u1E87\u1E89\u1E8B\u1E8D\u1E8F\u1E91\u1E93\u1E95-\u1E9D\u1E9F\u1EA1\u1EA3\u1EA5\u1EA7\u1EA9\u1EAB\u1EAD\u1EAF\u1EB1\u1EB3\u1EB5\u1EB7\u1EB9\u1EBB\u1EBD\u1EBF\u1EC1\u1EC3\u1EC5\u1EC7\u1EC9\u1ECB\u1ECD\u1ECF\u1ED1\u1ED3\u1ED5\u1ED7\u1ED9\u1EDB\u1EDD\u1EDF\u1EE1\u1EE3\u1EE5\u1EE7\u1EE9\u1EEB\u1EED\u1EEF\u1EF1\u1EF3\u1EF5\u1EF7\u1EF9\u1EFB\u1EFD\u1EFF-\u1F07\u1F10-\u1F15\u1F20-\u1F27\u1F30-\u1F37\u1F40-\u1F45\u1F50-\u1F57\u1F60-\u1F67\u1F70-\u1F7D\u1F80-\u1F87\u1F90-\u1F97\u1FA0-\u1FA7\u1FB0-\u1FB4\u1FB6-\u1FB7\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FC7\u1FD0-\u1FD3\u1FD6-\u1FD7\u1FE0-\u1FE7\u1FF2-\u1FF4\u1FF6-\u1FF7\u210A\u210E-\u210F\u2113\u212F\u2134\u2139\u213C-\u213D\u2146-\u2149\u214E\u2184\u2C30-\u2C5E\u2C61\u2C65-\u2C66\u2C68\u2C6A\u2C6C\u2C71\u2C73-\u2C74\u2C76-\u2C7B\u2C81\u2C83\u2C85\u2C87\u2C89\u2C8B\u2C8D\u2C8F\u2C91\u2C93\u2C95\u2C97\u2C99\u2C9B\u2C9D\u2C9F\u2CA1\u2CA3\u2CA5\u2CA7\u2CA9\u2CAB\u2CAD\u2CAF\u2CB1\u2CB3\u2CB5\u2CB7\u2CB9\u2CBB\u2CBD\u2CBF\u2CC1\u2CC3\u2CC5\u2CC7\u2CC9\u2CCB\u2CCD\u2CCF\u2CD1\u2CD3\u2CD5\u2CD7\u2CD9\u2CDB\u2CDD\u2CDF\u2CE1\u2CE3-\u2CE4\u2CEC\u2CEE\u2CF3\u2D00-\u2D25\u2D27\u2D2D\uA641\uA643\uA645\uA647\uA649\uA64B\uA64D\uA64F\uA651\uA653\uA655\uA657\uA659\uA65B\uA65D\uA65F\uA661\uA663\uA665\uA667\uA669\uA66B\uA66D\uA681\uA683\uA685\uA687\uA689\uA68B\uA68D\uA68F\uA691\uA693\uA695\uA697\uA699\uA69B\uA723\uA725\uA727\uA729\uA72B\uA72D\uA72F-\uA731\uA733\uA735\uA737\uA739\uA73B\uA73D\uA73F\uA741\uA743\uA745\uA747\uA749\uA74B\uA74D\uA74F\uA751\uA753\uA755\uA757\uA759\uA75B\uA75D\uA75F\uA761\uA763\uA765\uA767\uA769\uA76B\uA76D\uA76F\uA771-\uA778\uA77A\uA77C\uA77F\uA781\uA783\uA785\uA787\uA78C\uA78E\uA791\uA793-\uA795\uA797\uA799\uA79B\uA79D\uA79F\uA7A1\uA7A3\uA7A5\uA7A7\uA7A9\uA7B5\uA7B7\uA7FA\uAB30-\uAB5A\uAB60-\uAB65\uAB70-\uABBF\uFB00-\uFB06\uFB13-\uFB17\uFF41-\uFF5A/.source, + // Letter, Modifier + /\u02B0-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0374\u037A\u0559\u0640\u06E5-\u06E6\u07F4-\u07F5\u07FA\u081A\u0824\u0828\u0971\u0E46\u0EC6\u10FC\u17D7\u1843\u1AA7\u1C78-\u1C7D\u1D2C-\u1D6A\u1D78\u1D9B-\u1DBF\u2071\u207F\u2090-\u209C\u2C7C-\u2C7D\u2D6F\u2E2F\u3005\u3031-\u3035\u303B\u309D-\u309E\u30FC-\u30FE\uA015\uA4F8-\uA4FD\uA60C\uA67F\uA69C-\uA69D\uA717-\uA71F\uA770\uA788\uA7F8-\uA7F9\uA9CF\uA9E6\uAA70\uAADD\uAAF3-\uAAF4\uAB5C-\uAB5F\uFF70\uFF9E-\uFF9F/.source, + // Letter, Other + /\u00AA\u00BA\u01BB\u01C0-\u01C3\u0294\u05D0-\u05EA\u05F0-\u05F2\u0620-\u063F\u0641-\u064A\u066E-\u066F\u0671-\u06D3\u06D5\u06EE-\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u0800-\u0815\u0840-\u0858\u08A0-\u08B4\u0904-\u0939\u093D\u0950\u0958-\u0961\u0972-\u0980\u0985-\u098C\u098F-\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC-\u09DD\u09DF-\u09E1\u09F0-\u09F1\u0A05-\u0A0A\u0A0F-\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32-\u0A33\u0A35-\u0A36\u0A38-\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2-\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0-\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F-\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32-\u0B33\u0B35-\u0B39\u0B3D\u0B5C-\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99-\u0B9A\u0B9C\u0B9E-\u0B9F\u0BA3-\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60-\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0-\u0CE1\u0CF1-\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32-\u0E33\u0E40-\u0E45\u0E81-\u0E82\u0E84\u0E87-\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA-\u0EAB\u0EAD-\u0EB0\u0EB2-\u0EB3\u0EBD\u0EC0-\u0EC4\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065-\u1066\u106E-\u1070\u1075-\u1081\u108E\u10D0-\u10FA\u10FD-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17DC\u1820-\u1842\u1844-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE-\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C77\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5-\u1CF6\u2135-\u2138\u2D30-\u2D67\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3006\u303C\u3041-\u3096\u309F\u30A1-\u30FA\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA014\uA016-\uA48C\uA4D0-\uA4F7\uA500-\uA60B\uA610-\uA61F\uA62A-\uA62B\uA66E\uA6A0-\uA6E5\uA78F\uA7F7\uA7FB-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9E0-\uA9E4\uA9E7-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA6F\uAA71-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5-\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADC\uAAE0-\uAAEA\uAAF2\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40-\uFB41\uFB43-\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF66-\uFF6F\uFF71-\uFF9D\uFFA0-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC/.source, + ].join('') + ']'); + class BibtexParser { + parse(input, options = {}) { + // this._progress = 0 + this.pos = 0; + this.input = input; + this.max_entries = options.max_entries || 0; + this.entries = 0; + this.parsing = null; + this.chunks = []; + if (options.async) { + return this.bibtexAsync().then(() => this.chunks); + } + else { + this.bibtex(); + return this.chunks; + } + } + isWhitespace(s, horizontalOnly = false) { + return (s === ' ' || s === '\t' || (!horizontalOnly && (s === '\r' || s === '\n'))); + } + match(s) { + this.skipWhitespace(); + if (this.input.substr(this.pos, s.length) !== s) { + throw new ParseError(`Token mismatch, expected ${JSON.stringify(s)}, found ${JSON.stringify(this.input.substr(this.pos, 20))}...`, this); // tslint:disable-line no-magic-numbers + } + this.pos += s.length; + this.skipWhitespace(); + } + tryMatch(s) { + this.skipWhitespace(); + return (this.input.substr(this.pos, s.length) === s); + // this.skipWhitespace() + } + skipWhitespace() { + while (this.pos < this.input.length && this.isWhitespace(this.input[this.pos])) + this.pos++; + // shady + if (this.input[this.pos] === '%') { + while (this.pos < this.input.length && this.input[this.pos] !== '\n') + this.pos++; + while (this.pos < this.input.length && this.isWhitespace(this.input[this.pos])) + this.pos++; + } + } + value_braces() { + let bracecount = 0; + this.match('{'); + const start = this.pos; + let math = false; + while (true) { + switch (this.input[this.pos]) { + case '\\': + this.pos += 1; + break; + case '{': + bracecount++; + break; + case '}': + if (bracecount === 0) { + if (math) + throw new ParseError('Unclosed math section', this); + this.pos++; + return this.input.substring(start, this.pos - 1); + } + bracecount--; + break; + case '$': + math = !math; + break; + } + this.pos++; + if (this.pos >= this.input.length) { + throw new ParseError(`Unterminated brace-value ${JSON.stringify(this.input.substr(start, 20))}`, this); // tslint:disable-line no-magic-numbers + } + } + } + value_quotes() { + this.match('"'); + const start = this.pos; + let bracecount = 0; + while (true) { + switch (this.input[this.pos]) { + case '\\': + this.pos += 1; + break; + case '{': + bracecount++; + break; + case '}': + bracecount--; + break; + case '"': + if (bracecount <= 0) { + this.pos++; + return this.input.substring(start, this.pos - 1); + } + } + this.pos++; + if (this.pos >= this.input.length) { + throw new ParseError(`Unterminated quote-value ${JSON.stringify(this.input.substr(start, 20))}`, this); // tslint:disable-line no-magic-numbers + } + } + } + single_value() { + if (this.tryMatch('{')) { + return this.value_braces(); + } + else if (this.tryMatch('"')) { + return this.value_quotes(); + } + else { + return this.key(); + } + } + value() { + const values = []; + values.push(this.single_value()); + while (this.tryMatch('#')) { + this.match('#'); + values.push(this.single_value()); + } + return values.join(''); + } + key(allowUnicode = false) { + const start = this.pos; + while (true) { + if (this.pos === this.input.length) { + throw new ParseError('Runaway key', this); + } + if (this.input[this.pos].match(/['a-zA-Z0-9&;_:\\./-]/)) { + this.pos++; + } + else if (allowUnicode && this.input[this.pos].match(letter)) { + this.pos++; + } + else { + return this.input.substring(start, this.pos); + } + } + } + key_equals_value() { + const key = this.key(); + if (!this.tryMatch('=')) { + throw new ParseError(`... = value expected, equals sign missing: ${JSON.stringify(this.input.substr(this.pos, 20))}...`, this); // tslint:disable-line no-magic-numbers + } + this.match('='); + const val = this.value(); + return [key, val]; + } + key_value_list() { + this.key_equals_value(); + while (this.tryMatch(',')) { + this.match(','); + // fixes problems with commas at the end of a list + if (this.tryMatch('}')) { + break; + } + this.key_equals_value(); + } + } + entry(d) { + this.parsing = this.key(true); + this.match(','); + this.key_value_list(); + } + directive() { + this.match('@'); + return `@${this.key()}`.toLowerCase(); + } + string() { + this.key_equals_value(); + } + preamble() { + this.value(); + } + comment() { + while (this.isWhitespace(this.input[this.pos], true)) + this.pos++; + if (this.input[this.pos] === '{') { + this.value_braces(); + return; + } + while (this.input[this.pos] !== '\n' && this.pos < this.input.length) + this.pos++; + } + /* + private progress() { + const progress = Math.round((this.pos / this.input.length * 100) / 5) * 5 // tslint:disable-line no-magic-numbers + if (this._progress !== progress) { + this._progress = progress + process.stdout.write(` (${this._progress}%) `) + } + } + */ + hasMore() { + if (this.max_entries && this.entries >= this.max_entries) + return false; + return (this.pos < this.input.length); + } + bibtex() { + while (this.hasMore()) { + this.parseNext(); + } + } + bibtexAsync() { + return this.hasMore() ? (new Promise(resolve => resolve(this.parseNext()))).then(() => this.bibtexAsync()) : Promise.resolve(null); + } + parseNext() { + // this.progress() + const chunk = { + offset: { + pos: this.pos, + line: this.input.substring(0, this.pos).split('\n').length - 1, + }, + error: null, + text: null, + }; + this.skipWhitespace(); + if (this.pos >= this.input.length) + return; + let guard = ''; + try { + const d = this.directive(); + switch (d) { + case '@string': + this.match('{'); + this.string(); + this.match('}'); + chunk.stringDeclaration = true; + break; + case '@preamble': + this.match('{'); + this.preamble(); + this.match('}'); + chunk.preamble = true; + break; + case '@comment': + this.comment(); + chunk.comment = true; + break; + default: + if (this.tryMatch('{')) { + guard = '{}'; + } + else if (this.tryMatch('(')) { + guard = '()'; + } + else { + throw new ParseError(`Token mismatch, expected '{' or '(', found ${JSON.stringify(this.input.substr(this.pos, 20))}...`, this); // tslint:disable-line no-magic-numbers + } + this.match(guard[0]); + this.entry(d); + this.match(guard[1]); + chunk.entry = true; + this.entries++; + break; + } + } + catch (err) { + if (err.name !== 'ParseError') + throw err; + chunk.error = err.message, + // skip ahead to the next @ and try again + this.pos = chunk.offset.pos + 1; + while (this.pos < this.input.length && this.input[this.pos] !== '@') + this.pos++; + } + const text = this.input.substring(chunk.offset.pos, this.pos); + const last = this.chunks.length - 1; + if (chunk.error && this.chunks.length && this.chunks[last].error) { + this.chunks[last].text += text; + } + else { + chunk.text = text; + this.chunks.push(chunk); + } + } + } + /** + * Reads the bibtex input and splits it into separate chunks of `@string`s, `@comment`s, and bibtex entries. Useful for detecting if a file is bibtex file and for filtering out basic errors that would + * make the more sophisticated [[bibtex.parse]] reject the whole file + * + * @returns array of chunks, with markers for type and errors (if any) found. + */ + function parse(input, options = {}) { + return (new BibtexParser).parse(input, options); + } + exports.parse = parse; + + }); + + var $ = { + math: "\\$", + text: "\\$" + }; + var _ = { + math: "\\_", + text: "\\_" + }; + var require$$0 = { + "#": { + math: "\\#", + text: "\\#" + }, + $: $, + "%": { + math: "\\%", + text: "\\%" + }, + "&": { + math: "\\&", + text: "\\&" + }, + "/​": { + text: "\\slash", + commandspacer: true + }, + "<": { + math: "<" + }, + ">": { + math: ">" + }, + "\\": { + math: "\\backslash", + text: "\\textbackslash", + commandspacer: true + }, + "^": { + math: "\\sphat", + text: "\\^" + }, + _: _, + "i︠a︡": { + text: "\\t{ia}" + }, + "{": { + math: "\\lbrace", + text: "\\{" + }, + "}": { + math: "\\rbrace", + text: "\\}" + }, + "~": { + math: "\\sptilde", + text: "\\textasciitilde", + commandspacer: true + }, + " ": { + math: "~", + space: true, + text: "~" + }, + "¡": { + text: "\\textexclamdown", + commandspacer: true + }, + "¢": { + math: "\\cent", + text: "\\textcent", + commandspacer: true, + textpackages: [ + "textcomp" + ] + }, + "£": { + math: "\\pounds", + text: "\\textsterling", + commandspacer: true, + textpackages: [ + "textcomp" + ] + }, + "¤": { + text: "\\textcurrency", + commandspacer: true, + textpackages: [ + "textcomp" + ] + }, + "¥": { + math: "\\yen", + text: "\\textyen", + commandspacer: true, + textpackages: [ + "textcomp" + ] + }, + "¦": { + text: "\\textbrokenbar", + commandspacer: true, + textpackages: [ + "textcomp" + ] + }, + "§": { + text: "\\textsection", + commandspacer: true, + textpackages: [ + "textcomp" + ] + }, + "¨": { + math: "\\spddot", + text: "\\textasciidieresis", + commandspacer: true + }, + "©": { + text: "\\textcopyright", + commandspacer: true, + textpackages: [ + "textcomp" + ] + }, + "ª": { + text: "\\textordfeminine", + commandspacer: true, + textpackages: [ + "textcomp" + ] + }, + "«": { + text: "\\guillemotleft", + commandspacer: true + }, + "¬": { + math: "\\lnot" + }, + "­": { + math: "\\-", + text: "\\-" + }, + "®": { + math: "\\circledR", + text: "\\textregistered", + commandspacer: true, + textpackages: [ + "textcomp" + ] + }, + "¯": { + text: "\\textasciimacron", + commandspacer: true + }, + "°": { + math: "^\\circ", + text: "\\textdegree", + commandspacer: true, + textpackages: [ + "textcomp" + ] + }, + "±": { + math: "\\pm" + }, + "²": { + math: "^{2}" + }, + "³": { + math: "^{3}" + }, + "´": { + text: "\\textasciiacute", + commandspacer: true + }, + "µ": { + text: "\\textmu", + commandspacer: true + }, + "¶": { + text: "\\textparagraph", + commandspacer: true, + textpackages: [ + "textcomp" + ] + }, + "·": { + math: "\\cdot" + }, + "¸": { + text: "\\c", + commandspacer: true + }, + "¹": { + math: "^{1}" + }, + "º": { + text: "\\textordmasculine", + commandspacer: true, + textpackages: [ + "textcomp" + ] + }, + "»": { + text: "\\guillemotright", + commandspacer: true + }, + "¼": { + math: "\\frac{1}{4}" + }, + "½": { + math: "\\frac{1}{2}" + }, + "¾": { + math: "\\frac{3}{4}" + }, + "¿": { + text: "\\textquestiondown", + commandspacer: true + }, + "À": { + text: "\\`A" + }, + "Á": { + text: "\\'A" + }, + "Â": { + text: "\\^A" + }, + "Ã": { + text: "\\~A" + }, + "Ä": { + text: "\\\"A" + }, + "Å": { + text: "\\AA", + commandspacer: true + }, + "Æ": { + text: "\\AE", + commandspacer: true + }, + "Ç": { + text: "\\c{C}" + }, + "È": { + text: "\\`E" + }, + "É": { + text: "\\'E" + }, + "Ê": { + text: "\\^E" + }, + "Ë": { + text: "\\\"E" + }, + "Ì": { + text: "\\`I" + }, + "Í": { + text: "\\'I" + }, + "Î": { + text: "\\^I" + }, + "Ï": { + text: "\\\"I" + }, + "Ð": { + text: "\\DH", + commandspacer: true + }, + "Ñ": { + text: "\\~N" + }, + "Ò": { + text: "\\`O" + }, + "Ó": { + text: "\\'O" + }, + "Ô": { + text: "\\^O" + }, + "Õ": { + text: "\\~O" + }, + "Ö": { + text: "\\\"O" + }, + "×": { + math: "\\times", + text: "\\texttimes", + commandspacer: true + }, + "Ø": { + text: "\\O", + commandspacer: true + }, + "Ù": { + text: "\\`U" + }, + "Ú": { + text: "\\'U" + }, + "Û": { + text: "\\^U" + }, + "Ü": { + text: "\\\"U" + }, + "Ý": { + text: "\\'Y" + }, + "Þ": { + text: "\\TH", + commandspacer: true + }, + "ß": { + text: "\\ss", + commandspacer: true + }, + "à": { + text: "\\`a" + }, + "á": { + text: "\\'a" + }, + "â": { + text: "\\^a" + }, + "ã": { + text: "\\~a" + }, + "ä": { + text: "\\\"a" + }, + "å": { + text: "\\aa", + commandspacer: true + }, + "æ": { + text: "\\ae", + commandspacer: true + }, + "ç": { + text: "\\c{c}" + }, + "è": { + text: "\\`e" + }, + "é": { + text: "\\'e" + }, + "ê": { + text: "\\^e" + }, + "ë": { + text: "\\\"e" + }, + "ì": { + text: "\\`i" + }, + "í": { + text: "\\'i" + }, + "î": { + text: "\\^i" + }, + "ï": { + text: "\\\"i" + }, + "ð": { + math: "\\eth", + mathpackages: [ + "amssymb", + "arevmath" + ], + text: "\\dh", + commandspacer: true + }, + "ñ": { + text: "\\~n" + }, + "ò": { + text: "\\`o" + }, + "ó": { + text: "\\'o" + }, + "ô": { + text: "\\^o" + }, + "õ": { + text: "\\~o" + }, + "ö": { + text: "\\\"o" + }, + "÷": { + math: "\\div" + }, + "ø": { + text: "\\o", + commandspacer: true + }, + "ù": { + text: "\\`u" + }, + "ú": { + text: "\\'u" + }, + "û": { + text: "\\^u" + }, + "ü": { + text: "\\\"u" + }, + "ý": { + text: "\\'y" + }, + "þ": { + text: "\\th", + commandspacer: true + }, + "ÿ": { + text: "\\\"y" + }, + "Ā": { + text: "\\=A" + }, + "ā": { + text: "\\=a" + }, + "Ă": { + text: "\\u{A}" + }, + "ă": { + text: "\\u{a}" + }, + "Ą": { + text: "\\k{A}" + }, + "ą": { + text: "\\k{a}" + }, + "Ć": { + text: "\\'C" + }, + "ć": { + text: "\\'c" + }, + "Ĉ": { + text: "\\^C" + }, + "ĉ": { + text: "\\^c" + }, + "Ċ": { + text: "\\.C" + }, + "ċ": { + text: "\\.c" + }, + "Č": { + text: "\\v{C}" + }, + "č": { + text: "\\v{c}" + }, + "Ď": { + text: "\\v{D}" + }, + "ď": { + text: "\\v{d}" + }, + "Đ": { + text: "\\DJ", + commandspacer: true + }, + "đ": { + text: "\\dj", + commandspacer: true + }, + "Ē": { + text: "\\=E" + }, + "ē": { + text: "\\=e" + }, + "Ĕ": { + text: "\\u{E}" + }, + "ĕ": { + text: "\\u{e}" + }, + "Ė": { + text: "\\.E" + }, + "ė": { + text: "\\.e" + }, + "Ę": { + text: "\\k{E}" + }, + "ę": { + text: "\\k{e}" + }, + "Ě": { + text: "\\v{E}" + }, + "ě": { + text: "\\v{e}" + }, + "Ĝ": { + text: "\\^G" + }, + "ĝ": { + text: "\\^g" + }, + "Ğ": { + text: "\\u{G}" + }, + "ğ": { + text: "\\u{g}" + }, + "Ġ": { + text: "\\.G" + }, + "ġ": { + text: "\\.g" + }, + "Ģ": { + text: "\\c{G}" + }, + "ģ": { + text: "\\c{g}" + }, + "Ĥ": { + text: "\\^H" + }, + "ĥ": { + text: "\\^h" + }, + "Ħ": { + text: "{\\fontencoding{LELA}\\selectfont\\char40}" + }, + "ħ": { + math: "\\Elzxh" + }, + "Ĩ": { + text: "\\~I" + }, + "ĩ": { + text: "\\~i" + }, + "Ī": { + text: "\\=I" + }, + "ī": { + text: "\\=i" + }, + "Ĭ": { + text: "\\u{I}" + }, + "ĭ": { + text: "{\\u \\i}" + }, + "Į": { + text: "\\k{I}" + }, + "į": { + text: "\\k{i}" + }, + "İ": { + text: "\\.I" + }, + "ı": { + math: "\\imath", + text: "\\i", + commandspacer: true + }, + "IJ": { + text: "IJ" + }, + "ij": { + text: "ij" + }, + "Ĵ": { + text: "\\^J" + }, + "ĵ": { + text: "\\^\\j", + commandspacer: true + }, + "Ķ": { + text: "\\c{K}" + }, + "ķ": { + text: "\\c{k}" + }, + "ĸ": { + text: "{\\fontencoding{LELA}\\selectfont\\char91}" + }, + "Ĺ": { + text: "\\'L" + }, + "ĺ": { + text: "\\'l" + }, + "Ļ": { + text: "\\c{L}" + }, + "ļ": { + text: "\\c{l}" + }, + "Ľ": { + text: "\\v{L}" + }, + "ľ": { + text: "\\v{l}" + }, + "Ŀ": { + text: "{\\fontencoding{LELA}\\selectfont\\char201}" + }, + "ŀ": { + text: "{\\fontencoding{LELA}\\selectfont\\char202}" + }, + "Ł": { + text: "\\L", + commandspacer: true + }, + "ł": { + text: "\\l", + commandspacer: true + }, + "Ń": { + text: "\\'N" + }, + "ń": { + text: "\\'n" + }, + "Ņ": { + text: "\\c{N}" + }, + "ņ": { + text: "\\c{n}" + }, + "Ň": { + text: "\\v{N}" + }, + "ň": { + text: "\\v{n}" + }, + "ʼn": { + text: "'n" + }, + "Ŋ": { + text: "\\NG", + commandspacer: true + }, + "ŋ": { + text: "\\ng", + commandspacer: true + }, + "Ō": { + text: "\\=O" + }, + "ō": { + text: "\\=o" + }, + "Ŏ": { + text: "\\u{O}" + }, + "ŏ": { + text: "\\u{o}" + }, + "Ő": { + text: "\\H{O}" + }, + "ő": { + text: "\\H{o}" + }, + "Œ": { + text: "\\OE", + commandspacer: true + }, + "œ": { + text: "\\oe", + commandspacer: true + }, + "Ŕ": { + text: "\\'R" + }, + "ŕ": { + text: "\\'r" + }, + "Ŗ": { + text: "\\c{R}" + }, + "ŗ": { + text: "\\c{r}" + }, + "Ř": { + text: "\\v{R}" + }, + "ř": { + text: "\\v{r}" + }, + "Ś": { + text: "\\'S" + }, + "ś": { + text: "\\'s" + }, + "Ŝ": { + text: "\\^S" + }, + "ŝ": { + text: "\\^s" + }, + "Ş": { + text: "\\c{S}" + }, + "ş": { + text: "\\c{s}" + }, + "Š": { + text: "\\v{S}" + }, + "š": { + text: "\\v{s}" + }, + "Ţ": { + text: "\\c{T}" + }, + "ţ": { + text: "\\c{t}" + }, + "Ť": { + text: "\\v{T}" + }, + "ť": { + text: "\\v{t}" + }, + "Ŧ": { + text: "{\\fontencoding{LELA}\\selectfont\\char47}" + }, + "ŧ": { + text: "{\\fontencoding{LELA}\\selectfont\\char63}" + }, + "Ũ": { + text: "\\~U" + }, + "ũ": { + text: "\\~u" + }, + "Ū": { + text: "\\=U" + }, + "ū": { + text: "\\=u" + }, + "Ŭ": { + text: "\\u{U}" + }, + "ŭ": { + text: "\\u{u}" + }, + "Ů": { + text: "\\r{U}" + }, + "ů": { + text: "\\r{u}" + }, + "Ű": { + text: "\\H{U}" + }, + "ű": { + text: "\\H{u}" + }, + "Ų": { + text: "\\k{U}" + }, + "ų": { + text: "\\k{u}" + }, + "Ŵ": { + text: "\\^W" + }, + "ŵ": { + text: "\\^w" + }, + "Ŷ": { + text: "\\^Y" + }, + "ŷ": { + text: "\\^y" + }, + "Ÿ": { + text: "\\\"Y" + }, + "Ź": { + text: "\\'Z" + }, + "ź": { + text: "\\'z" + }, + "Ż": { + text: "\\.Z" + }, + "ż": { + text: "\\.z" + }, + "Ž": { + text: "\\v{Z}" + }, + "ž": { + text: "\\v{z}" + }, + "ſ": { + text: "s" + }, + "ƒ": { + math: "f" + }, + "ƕ": { + text: "\\texthvlig", + commandspacer: true + }, + "ƞ": { + text: "\\textnrleg", + commandspacer: true + }, + "ƪ": { + text: "\\textesh", + commandspacer: true + }, + "Ƶ": { + math: "\\Zbar" + }, + "ƺ": { + text: "{\\fontencoding{LELA}\\selectfont\\char195}" + }, + "ǂ": { + text: "\\textdoublepipe", + commandspacer: true + }, + "Ǎ": { + text: "\\v{A}" + }, + "ǎ": { + text: "\\v{a}" + }, + "Ǐ": { + text: "\\v{I}" + }, + "ǐ": { + text: "\\v{i}" + }, + "Ǒ": { + text: "\\v{O}" + }, + "ǒ": { + text: "\\v{o}" + }, + "Ǔ": { + text: "\\v{U}" + }, + "ǔ": { + text: "\\v{u}" + }, + "Ǧ": { + text: "\\v{G}" + }, + "ǧ": { + text: "\\v{g}" + }, + "Ǩ": { + text: "\\v{K}" + }, + "ǩ": { + text: "\\v{k}" + }, + "Ǫ": { + text: "\\k{O}" + }, + "ǫ": { + text: "\\k{o}" + }, + "ǰ": { + text: "\\v{j}" + }, + "Ǵ": { + text: "\\'G" + }, + "ǵ": { + text: "\\'g" + }, + "Ȩ": { + text: "\\c{E}" + }, + "ȩ": { + text: "\\c{e}" + }, + "ȷ": { + math: "\\jmath" + }, + "ɐ": { + math: "\\Elztrna" + }, + "ɒ": { + math: "\\Elztrnsa" + }, + "ɔ": { + math: "\\Elzopeno" + }, + "ɖ": { + math: "\\Elzrtld" + }, + "ɘ": { + text: "{\\fontencoding{LEIP}\\selectfont\\char61}" + }, + "ə": { + math: "\\Elzschwa" + }, + "ɛ": { + math: "\\varepsilon" + }, + "ɡ": { + text: "g" + }, + "ɣ": { + math: "\\Elzpgamma" + }, + "ɤ": { + math: "\\Elzpbgam" + }, + "ɥ": { + math: "\\Elztrnh" + }, + "ɬ": { + math: "\\Elzbtdl" + }, + "ɭ": { + math: "\\Elzrtll" + }, + "ɯ": { + math: "\\Elztrnm" + }, + "ɰ": { + math: "\\Elztrnmlr" + }, + "ɱ": { + math: "\\Elzltlmr" + }, + "ɲ": { + text: "\\Elzltln", + commandspacer: true + }, + "ɳ": { + math: "\\Elzrtln" + }, + "ɷ": { + math: "\\Elzclomeg" + }, + "ɸ": { + text: "\\textphi", + commandspacer: true + }, + "ɹ": { + math: "\\Elztrnr" + }, + "ɺ": { + math: "\\Elztrnrl" + }, + "ɻ": { + math: "\\Elzrttrnr" + }, + "ɼ": { + math: "\\Elzrl" + }, + "ɽ": { + math: "\\Elzrtlr" + }, + "ɾ": { + math: "\\Elzfhr" + }, + "ɿ": { + text: "{\\fontencoding{LEIP}\\selectfont\\char202}" + }, + "ʂ": { + math: "\\Elzrtls" + }, + "ʃ": { + math: "\\Elzesh" + }, + "ʇ": { + math: "\\Elztrnt" + }, + "ʈ": { + math: "\\Elzrtlt" + }, + "ʊ": { + math: "\\Elzpupsil" + }, + "ʋ": { + math: "\\Elzpscrv" + }, + "ʌ": { + math: "\\Elzinvv" + }, + "ʍ": { + math: "\\Elzinvw" + }, + "ʎ": { + math: "\\Elztrny" + }, + "ʐ": { + math: "\\Elzrtlz" + }, + "ʒ": { + math: "\\Elzyogh" + }, + "ʔ": { + math: "\\Elzglst" + }, + "ʕ": { + math: "\\Elzreglst" + }, + "ʖ": { + math: "\\Elzinglst" + }, + "ʞ": { + text: "\\textturnk", + commandspacer: true + }, + "ʤ": { + math: "\\Elzdyogh" + }, + "ʧ": { + math: "\\Elztesh" + }, + "ʰ": { + math: "^{h}", + text: "\\textsuperscript{h}" + }, + "ʲ": { + math: "^{j}", + text: "\\textsuperscript{j}" + }, + "ʳ": { + math: "^{r}", + text: "\\textsuperscript{r}" + }, + "ʷ": { + math: "^{w}", + text: "\\textsuperscript{w}" + }, + "ʸ": { + math: "^{y}", + text: "\\textsuperscript{y}" + }, + "ʹ": { + text: "'" + }, + "ʻ": { + text: "'" + }, + "ʼ": { + text: "'" + }, + "ʽ": { + text: "'" + }, + "ʿ": { + text: "\\lasp", + commandspacer: true, + textpackages: [ + "mathscinet" + ] + }, + "ˆ": { + text: "\\textasciicircum", + commandspacer: true + }, + "ˇ": { + text: "\\textasciicaron", + commandspacer: true + }, + "ˈ": { + math: "\\Elzverts" + }, + "ˉ": { + text: "-" + }, + "ˌ": { + math: "\\Elzverti" + }, + "ː": { + math: "\\Elzlmrk" + }, + "ˑ": { + math: "\\Elzhlmrk" + }, + "˒": { + math: "\\Elzsbrhr" + }, + "˓": { + math: "\\Elzsblhr" + }, + "˔": { + math: "\\Elzrais" + }, + "˕": { + math: "\\Elzlow" + }, + "˘": { + text: "\\textasciibreve", + commandspacer: true + }, + "˙": { + text: "\\textperiodcentered", + commandspacer: true, + textpackages: [ + "textcomp" + ] + }, + "˚": { + text: "\\r{}" + }, + "˛": { + text: "\\k{}" + }, + "˜": { + text: "\\texttildelow", + commandspacer: true + }, + "˝": { + text: "\\H{}" + }, + "ˡ": { + math: "^{l}", + text: "\\textsuperscript{l}" + }, + "ˢ": { + math: "^{s}", + text: "\\textsuperscript{s}" + }, + "ˣ": { + math: "^{x}", + text: "\\textsuperscript{x}" + }, + "˥": { + text: "\\tone{55}" + }, + "˦": { + text: "\\tone{44}" + }, + "˧": { + text: "\\tone{33}" + }, + "˨": { + text: "\\tone{22}" + }, + "˩": { + text: "\\tone{11}" + }, + "̀": { + math: "\\grave", + combiningdiacritic: true, + text: "\\`" + }, + "̀̄": { + text: "\\textgravemacron", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̄̀": { + text: "\\textgravemacron", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̀̇": { + text: "\\textgravedot", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̇̀": { + text: "\\textgravedot", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "́": { + math: "\\acute", + combiningdiacritic: true, + text: "\\'" + }, + "́̄": { + text: "\\textacutemacron", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̄́": { + text: "\\textacutemacron", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "́̌": { + text: "\\textacutewedge", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̌́": { + text: "\\textacutewedge", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̂": { + math: "\\hat", + combiningdiacritic: true, + text: "\\^" + }, + "̂̇": { + text: "\\textcircumdot", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̇̂": { + text: "\\textcircumdot", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̃": { + math: "\\tilde", + combiningdiacritic: true, + text: "\\~" + }, + "̃̇": { + text: "\\texttildedot", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̇̃": { + text: "\\texttildedot", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̄": { + math: "\\bar", + combiningdiacritic: true, + text: "\\=" + }, + "̅": { + math: "\\overline", + combiningdiacritic: true + }, + "̆": { + math: "\\breve", + combiningdiacritic: true, + text: "\\u", + commandspacer: true + }, + "̆̄": { + text: "\\textbrevemacron", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̄̆": { + text: "\\textbrevemacron", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̇": { + math: "\\dot", + combiningdiacritic: true, + text: "\\." + }, + "̇́": { + text: "\\textdotacute", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "́̇": { + text: "\\textdotacute", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̇̆": { + text: "\\textdotbreve", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̆̇": { + text: "\\textdotbreve", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̈": { + math: "\\ddot", + combiningdiacritic: true, + text: "\\\"" + }, + "̉": { + math: "\\ovhook" + }, + "̊": { + math: "\\mathring", + combiningdiacritic: true, + text: "\\r", + commandspacer: true + }, + "̊̄": { + text: "\\textringmacron", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̄̊": { + text: "\\textringmacron", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̋": { + text: "\\H", + commandspacer: true, + combiningdiacritic: true + }, + "̌": { + math: "\\check", + text: "\\v", + commandspacer: true, + combiningdiacritic: true + }, + "̍": { + text: "\\textvbaraccent", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̎": { + text: "\\textdoublevbaraccent", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̏": { + text: "\\textdoublegrave", + commandspacer: true, + combiningdiacritic: true + }, + "̐": { + text: "\\textdotbreve", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̑": { + text: "{\\fontencoding{LECO}\\selectfont\\char177}" + }, + "̒": { + math: "\\oturnedcomma" + }, + "̕": { + math: "\\ocommatopright" + }, + "̖": { + text: "\\textsubgrave", + commandspacer: true, + combiningdiacritic: true + }, + "̘": { + text: "\\textadvancing", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̙": { + text: "\\textretracting", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̚": { + math: "\\droang", + text: "\\textcorner", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̜": { + text: "\\textsublhalfring", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̝": { + text: "\\textraising", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̞": { + text: "\\textlowering", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̟": { + text: "\\textsubplus", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̡": { + math: "\\Elzpalh" + }, + "̢": { + text: "\\Elzrh", + commandspacer: true + }, + "̣": { + text: "\\d", + commandspacer: true, + combiningdiacritic: true + }, + "̤": { + text: "\\textsubumlaut", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̥": { + text: "\\textsubring", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̧": { + text: "\\c", + commandspacer: true, + combiningdiacritic: true + }, + "̨": { + text: "\\k", + commandspacer: true, + combiningdiacritic: true + }, + "̩": { + text: "\\textsyllabic", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̪": { + math: "\\Elzsbbrg", + text: "\\textsubbridge", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̫": { + text: "{\\fontencoding{LECO}\\selectfont\\char203}" + }, + "̬": { + text: "\\textsubwedge", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̯": { + text: "\\textsubarch", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̰": { + math: "\\utilde", + text: "\\textsubtilde", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̱": { + math: "\\underbar", + combiningdiacritic: true, + text: "\\textsubbar", + commandspacer: true, + textpackages: [ + "tipa" + ] + }, + "̲": { + math: "\\underline" + }, + "̴": { + text: "\\textsuperimposetilde", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̵": { + text: "\\Elzxl", + commandspacer: true + }, + "̶": { + text: "\\Elzbar", + commandspacer: true + }, + "̷": { + text: "{\\fontencoding{LECO}\\selectfont\\char215}" + }, + "̸": { + math: "\\not" + }, + "̹": { + text: "\\textsubrhalfring", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̺": { + text: "\\textinvsubbridge", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̻": { + text: "\\textsubsquare", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̼": { + text: "\\textseagull", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̽": { + text: "\\textovercross", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "͡": { + text: "{\\fontencoding{LECO}\\selectfont\\char225}" + }, + "ʹ": { + text: "'" + }, + "͵": { + text: "," + }, + ";": { + text: ";" + }, + "Ά": { + text: "\\'A" + }, + "Έ": { + text: "\\'E" + }, + "Ή": { + text: "\\'H" + }, + "Ί": { + text: "{\\'{}I}" + }, + "Ό": { + text: "{\\'{}O}" + }, + "Ύ": { + math: "\\mathrm{'Y}" + }, + "Ώ": { + math: "\\mathrm{'\\Omega}" + }, + "ΐ": { + math: "\\acute{\\ddot{\\iota}}" + }, + "Α": { + math: "A" + }, + "Β": { + math: "B" + }, + "Γ": { + math: "\\Gamma" + }, + "Δ": { + math: "\\Delta" + }, + "Ε": { + math: "E" + }, + "Ζ": { + math: "Z" + }, + "Η": { + math: "H" + }, + "Θ": { + math: "\\Theta" + }, + "Ι": { + math: "I" + }, + "Κ": { + math: "K" + }, + "Λ": { + math: "\\Lambda" + }, + "Μ": { + math: "M" + }, + "Ν": { + math: "N" + }, + "Ξ": { + math: "\\Xi" + }, + "Ο": { + math: "O" + }, + "Π": { + math: "\\Pi" + }, + "Ρ": { + math: "P" + }, + "Σ": { + math: "\\Sigma" + }, + "Τ": { + math: "T" + }, + "Υ": { + math: "\\Upsilon" + }, + "Φ": { + math: "\\Phi" + }, + "Χ": { + math: "X" + }, + "Ψ": { + math: "\\Psi" + }, + "Ω": { + math: "\\Omega" + }, + "Ϊ": { + math: "\\mathrm{\\ddot{I}}" + }, + "Ϋ": { + math: "\\mathrm{\\ddot{Y}}" + }, + "ά": { + text: "{\\'$\\alpha$}" + }, + "έ": { + math: "\\acute{\\epsilon}" + }, + "ή": { + math: "\\acute{\\eta}" + }, + "ί": { + math: "\\acute{\\iota}" + }, + "ΰ": { + math: "\\acute{\\ddot{\\upsilon}}" + }, + "α": { + math: "\\alpha" + }, + "β": { + math: "\\beta" + }, + "γ": { + math: "\\gamma" + }, + "δ": { + math: "\\delta" + }, + "ε": { + math: "\\epsilon" + }, + "ζ": { + math: "\\zeta" + }, + "η": { + math: "\\eta" + }, + "θ": { + math: "\\theta", + text: "\\texttheta", + commandspacer: true + }, + "ι": { + math: "\\iota" + }, + "κ": { + math: "\\kappa" + }, + "λ": { + math: "\\lambda" + }, + "μ": { + math: "\\mu" + }, + "ν": { + math: "\\nu" + }, + "ξ": { + math: "\\xi" + }, + "ο": { + math: "o" + }, + "π": { + math: "\\pi" + }, + "ρ": { + math: "\\rho" + }, + "ς": { + math: "\\varsigma" + }, + "σ": { + math: "\\sigma" + }, + "τ": { + math: "\\tau" + }, + "υ": { + math: "\\upsilon" + }, + "φ": { + math: "\\varphi" + }, + "χ": { + math: "\\chi" + }, + "ψ": { + math: "\\psi" + }, + "ω": { + math: "\\omega" + }, + "ϊ": { + math: "\\ddot{\\iota}" + }, + "ϋ": { + math: "\\ddot{\\upsilon}" + }, + "ό": { + text: "\\'o" + }, + "ύ": { + math: "\\acute{\\upsilon}" + }, + "ώ": { + math: "\\acute{\\omega}" + }, + "ϐ": { + math: "\\varbeta", + text: "\\Pisymbol{ppi022}{87}" + }, + "ϑ": { + math: "\\vartheta", + text: "\\textvartheta", + commandspacer: true + }, + "ϒ": { + math: "\\Upsilon" + }, + "ϕ": { + math: "\\phi" + }, + "ϖ": { + math: "\\varpi" + }, + "Ϙ": { + math: "\\Qoppa" + }, + "ϙ": { + math: "\\qoppa" + }, + "Ϛ": { + math: "\\Stigma" + }, + "ϛ": { + math: "\\stigma" + }, + "Ϝ": { + math: "\\Digamma" + }, + "ϝ": { + math: "\\digamma" + }, + "Ϟ": { + math: "\\Koppa" + }, + "ϟ": { + math: "\\koppa" + }, + "Ϡ": { + math: "\\Sampi" + }, + "ϡ": { + math: "\\sampi" + }, + "ϰ": { + math: "\\varkappa" + }, + "ϱ": { + math: "\\varrho" + }, + "ϴ": { + math: "\\upvarTheta", + text: "\\textTheta", + commandspacer: true + }, + "ϵ": { + math: "\\epsilon" + }, + "϶": { + math: "\\backepsilon" + }, + "Ё": { + text: "\\cyrchar\\CYRYO", + commandspacer: true + }, + "Ђ": { + text: "\\cyrchar\\CYRDJE", + commandspacer: true + }, + "Ѓ": { + text: "\\cyrchar{\\'\\CYRG}" + }, + "Є": { + text: "\\cyrchar\\CYRIE", + commandspacer: true + }, + "Ѕ": { + text: "\\cyrchar\\CYRDZE", + commandspacer: true + }, + "І": { + text: "\\cyrchar\\CYRII", + commandspacer: true + }, + "Ї": { + text: "\\cyrchar\\CYRYI", + commandspacer: true + }, + "Ј": { + text: "\\cyrchar\\CYRJE", + commandspacer: true + }, + "Љ": { + text: "\\cyrchar\\CYRLJE", + commandspacer: true + }, + "Њ": { + text: "\\cyrchar\\CYRNJE", + commandspacer: true + }, + "Ћ": { + text: "\\cyrchar\\CYRTSHE", + commandspacer: true + }, + "Ќ": { + text: "\\cyrchar{\\'\\CYRK}" + }, + "Ў": { + text: "\\cyrchar\\CYRUSHRT", + commandspacer: true + }, + "Џ": { + text: "\\cyrchar\\CYRDZHE", + commandspacer: true + }, + "А": { + text: "\\cyrchar\\CYRA", + commandspacer: true + }, + "Б": { + text: "\\cyrchar\\CYRB", + commandspacer: true + }, + "В": { + text: "\\cyrchar\\CYRV", + commandspacer: true + }, + "Г": { + text: "\\cyrchar\\CYRG", + commandspacer: true + }, + "Д": { + text: "\\cyrchar\\CYRD", + commandspacer: true + }, + "Е": { + text: "\\cyrchar\\CYRE", + commandspacer: true + }, + "Ж": { + text: "\\cyrchar\\CYRZH", + commandspacer: true + }, + "З": { + text: "\\cyrchar\\CYRZ", + commandspacer: true + }, + "И": { + text: "\\cyrchar\\CYRI", + commandspacer: true + }, + "Й": { + text: "\\cyrchar\\CYRISHRT", + commandspacer: true + }, + "К": { + text: "\\cyrchar\\CYRK", + commandspacer: true + }, + "Л": { + text: "\\cyrchar\\CYRL", + commandspacer: true + }, + "М": { + text: "\\cyrchar\\CYRM", + commandspacer: true + }, + "Н": { + text: "\\cyrchar\\CYRN", + commandspacer: true + }, + "О": { + text: "\\cyrchar\\CYRO", + commandspacer: true + }, + "П": { + text: "\\cyrchar\\CYRP", + commandspacer: true + }, + "Р": { + text: "\\cyrchar\\CYRR", + commandspacer: true + }, + "С": { + text: "\\cyrchar\\CYRS", + commandspacer: true + }, + "Т": { + text: "\\cyrchar\\CYRT", + commandspacer: true + }, + "У": { + text: "\\cyrchar\\CYRU", + commandspacer: true + }, + "Ф": { + text: "\\cyrchar\\CYRF", + commandspacer: true + }, + "Х": { + text: "\\cyrchar\\CYRH", + commandspacer: true + }, + "Ц": { + text: "\\cyrchar\\CYRC", + commandspacer: true + }, + "Ч": { + text: "\\cyrchar\\CYRCH", + commandspacer: true + }, + "Ш": { + text: "\\cyrchar\\CYRSH", + commandspacer: true + }, + "Щ": { + text: "\\cyrchar\\CYRSHCH", + commandspacer: true + }, + "Ъ": { + text: "\\cyrchar\\CYRHRDSN", + commandspacer: true + }, + "Ы": { + text: "\\cyrchar\\CYRERY", + commandspacer: true + }, + "Ь": { + text: "\\cyrchar\\CYRSFTSN", + commandspacer: true + }, + "Э": { + text: "\\cyrchar\\CYREREV", + commandspacer: true + }, + "Ю": { + text: "\\cyrchar\\CYRYU", + commandspacer: true + }, + "Я": { + text: "\\cyrchar\\CYRYA", + commandspacer: true + }, + "а": { + text: "\\cyrchar\\cyra", + commandspacer: true + }, + "б": { + text: "\\cyrchar\\cyrb", + commandspacer: true + }, + "в": { + text: "\\cyrchar\\cyrv", + commandspacer: true + }, + "г": { + text: "\\cyrchar\\cyrg", + commandspacer: true + }, + "д": { + text: "\\cyrchar\\cyrd", + commandspacer: true + }, + "е": { + text: "\\cyrchar\\cyre", + commandspacer: true + }, + "ж": { + text: "\\cyrchar\\cyrzh", + commandspacer: true + }, + "з": { + text: "\\cyrchar\\cyrz", + commandspacer: true + }, + "и": { + text: "\\cyrchar\\cyri", + commandspacer: true + }, + "й": { + text: "\\cyrchar\\cyrishrt", + commandspacer: true + }, + "к": { + text: "\\cyrchar\\cyrk", + commandspacer: true + }, + "л": { + text: "\\cyrchar\\cyrl", + commandspacer: true + }, + "м": { + text: "\\cyrchar\\cyrm", + commandspacer: true + }, + "н": { + text: "\\cyrchar\\cyrn", + commandspacer: true + }, + "о": { + text: "\\cyrchar\\cyro", + commandspacer: true + }, + "п": { + text: "\\cyrchar\\cyrp", + commandspacer: true + }, + "р": { + text: "\\cyrchar\\cyrr", + commandspacer: true + }, + "с": { + text: "\\cyrchar\\cyrs", + commandspacer: true + }, + "т": { + text: "\\cyrchar\\cyrt", + commandspacer: true + }, + "у": { + text: "\\cyrchar\\cyru", + commandspacer: true + }, + "ф": { + text: "\\cyrchar\\cyrf", + commandspacer: true + }, + "х": { + text: "\\cyrchar\\cyrh", + commandspacer: true + }, + "ц": { + text: "\\cyrchar\\cyrc", + commandspacer: true + }, + "ч": { + text: "\\cyrchar\\cyrch", + commandspacer: true + }, + "ш": { + text: "\\cyrchar\\cyrsh", + commandspacer: true + }, + "щ": { + text: "\\cyrchar\\cyrshch", + commandspacer: true + }, + "ъ": { + text: "\\cyrchar\\cyrhrdsn", + commandspacer: true + }, + "ы": { + text: "\\cyrchar\\cyrery", + commandspacer: true + }, + "ь": { + text: "\\cyrchar\\cyrsftsn", + commandspacer: true + }, + "э": { + text: "\\cyrchar\\cyrerev", + commandspacer: true + }, + "ю": { + text: "\\cyrchar\\cyryu", + commandspacer: true + }, + "я": { + text: "\\cyrchar\\cyrya", + commandspacer: true + }, + "ё": { + text: "\\cyrchar\\cyryo", + commandspacer: true + }, + "ђ": { + text: "\\cyrchar\\cyrdje", + commandspacer: true + }, + "ѓ": { + text: "\\cyrchar{\\'\\cyrg}" + }, + "є": { + text: "\\cyrchar\\cyrie", + commandspacer: true + }, + "ѕ": { + text: "\\cyrchar\\cyrdze", + commandspacer: true + }, + "і": { + text: "\\cyrchar\\cyrii", + commandspacer: true + }, + "ї": { + text: "\\cyrchar\\cyryi", + commandspacer: true + }, + "ј": { + text: "\\cyrchar\\cyrje", + commandspacer: true + }, + "љ": { + text: "\\cyrchar\\cyrlje", + commandspacer: true + }, + "њ": { + text: "\\cyrchar\\cyrnje", + commandspacer: true + }, + "ћ": { + text: "\\cyrchar\\cyrtshe", + commandspacer: true + }, + "ќ": { + text: "\\cyrchar{\\'\\cyrk}" + }, + "ў": { + text: "\\cyrchar\\cyrushrt", + commandspacer: true + }, + "џ": { + text: "\\cyrchar\\cyrdzhe", + commandspacer: true + }, + "Ѡ": { + text: "\\cyrchar\\CYROMEGA", + commandspacer: true + }, + "ѡ": { + text: "\\cyrchar\\cyromega", + commandspacer: true + }, + "Ѣ": { + text: "\\cyrchar\\CYRYAT", + commandspacer: true + }, + "Ѥ": { + text: "\\cyrchar\\CYRIOTE", + commandspacer: true + }, + "ѥ": { + text: "\\cyrchar\\cyriote", + commandspacer: true + }, + "Ѧ": { + text: "\\cyrchar\\CYRLYUS", + commandspacer: true + }, + "ѧ": { + text: "\\cyrchar\\cyrlyus", + commandspacer: true + }, + "Ѩ": { + text: "\\cyrchar\\CYRIOTLYUS", + commandspacer: true + }, + "ѩ": { + text: "\\cyrchar\\cyriotlyus", + commandspacer: true + }, + "Ѫ": { + text: "\\cyrchar\\CYRBYUS", + commandspacer: true + }, + "Ѭ": { + text: "\\cyrchar\\CYRIOTBYUS", + commandspacer: true + }, + "ѭ": { + text: "\\cyrchar\\cyriotbyus", + commandspacer: true + }, + "Ѯ": { + text: "\\cyrchar\\CYRKSI", + commandspacer: true + }, + "ѯ": { + text: "\\cyrchar\\cyrksi", + commandspacer: true + }, + "Ѱ": { + text: "\\cyrchar\\CYRPSI", + commandspacer: true + }, + "ѱ": { + text: "\\cyrchar\\cyrpsi", + commandspacer: true + }, + "Ѳ": { + text: "\\cyrchar\\CYRFITA", + commandspacer: true + }, + "Ѵ": { + text: "\\cyrchar\\CYRIZH", + commandspacer: true + }, + "Ѹ": { + text: "\\cyrchar\\CYRUK", + commandspacer: true + }, + "ѹ": { + text: "\\cyrchar\\cyruk", + commandspacer: true + }, + "Ѻ": { + text: "\\cyrchar\\CYROMEGARND", + commandspacer: true + }, + "ѻ": { + text: "\\cyrchar\\cyromegarnd", + commandspacer: true + }, + "Ѽ": { + text: "\\cyrchar\\CYROMEGATITLO", + commandspacer: true + }, + "ѽ": { + text: "\\cyrchar\\cyromegatitlo", + commandspacer: true + }, + "Ѿ": { + text: "\\cyrchar\\CYROT", + commandspacer: true + }, + "ѿ": { + text: "\\cyrchar\\cyrot", + commandspacer: true + }, + "Ҁ": { + text: "\\cyrchar\\CYRKOPPA", + commandspacer: true + }, + "ҁ": { + text: "\\cyrchar\\cyrkoppa", + commandspacer: true + }, + "҂": { + text: "\\cyrchar\\cyrthousands", + commandspacer: true + }, + "҈": { + text: "\\cyrchar\\cyrhundredthousands", + commandspacer: true + }, + "҉": { + text: "\\cyrchar\\cyrmillions", + commandspacer: true + }, + "Ҍ": { + text: "\\cyrchar\\CYRSEMISFTSN", + commandspacer: true + }, + "ҍ": { + text: "\\cyrchar\\cyrsemisftsn", + commandspacer: true + }, + "Ҏ": { + text: "\\cyrchar\\CYRRTICK", + commandspacer: true + }, + "ҏ": { + text: "\\cyrchar\\cyrrtick", + commandspacer: true + }, + "Ґ": { + text: "\\cyrchar\\CYRGUP", + commandspacer: true + }, + "ґ": { + text: "\\cyrchar\\cyrgup", + commandspacer: true + }, + "Ғ": { + text: "\\cyrchar\\CYRGHCRS", + commandspacer: true + }, + "ғ": { + text: "\\cyrchar\\cyrghcrs", + commandspacer: true + }, + "Ҕ": { + text: "\\cyrchar\\CYRGHK", + commandspacer: true + }, + "ҕ": { + text: "\\cyrchar\\cyrghk", + commandspacer: true + }, + "Җ": { + text: "\\cyrchar\\CYRZHDSC", + commandspacer: true + }, + "җ": { + text: "\\cyrchar\\cyrzhdsc", + commandspacer: true + }, + "Ҙ": { + text: "\\cyrchar\\CYRZDSC", + commandspacer: true + }, + "ҙ": { + text: "\\cyrchar\\cyrzdsc", + commandspacer: true + }, + "Қ": { + text: "\\cyrchar\\CYRKDSC", + commandspacer: true + }, + "қ": { + text: "\\cyrchar\\cyrkdsc", + commandspacer: true + }, + "Ҝ": { + text: "\\cyrchar\\CYRKVCRS", + commandspacer: true + }, + "ҝ": { + text: "\\cyrchar\\cyrkvcrs", + commandspacer: true + }, + "Ҟ": { + text: "\\cyrchar\\CYRKHCRS", + commandspacer: true + }, + "ҟ": { + text: "\\cyrchar\\cyrkhcrs", + commandspacer: true + }, + "Ҡ": { + text: "\\cyrchar\\CYRKBEAK", + commandspacer: true + }, + "ҡ": { + text: "\\cyrchar\\cyrkbeak", + commandspacer: true + }, + "Ң": { + text: "\\cyrchar\\CYRNDSC", + commandspacer: true + }, + "ң": { + text: "\\cyrchar\\cyrndsc", + commandspacer: true + }, + "Ҥ": { + text: "\\cyrchar\\CYRNG", + commandspacer: true + }, + "ҥ": { + text: "\\cyrchar\\cyrng", + commandspacer: true + }, + "Ҧ": { + text: "\\cyrchar\\CYRPHK", + commandspacer: true + }, + "ҧ": { + text: "\\cyrchar\\cyrphk", + commandspacer: true + }, + "Ҩ": { + text: "\\cyrchar\\CYRABHHA", + commandspacer: true + }, + "ҩ": { + text: "\\cyrchar\\cyrabhha", + commandspacer: true + }, + "Ҫ": { + text: "\\cyrchar\\CYRSDSC", + commandspacer: true + }, + "ҫ": { + text: "\\cyrchar\\cyrsdsc", + commandspacer: true + }, + "Ҭ": { + text: "\\cyrchar\\CYRTDSC", + commandspacer: true + }, + "ҭ": { + text: "\\cyrchar\\cyrtdsc", + commandspacer: true + }, + "Ү": { + text: "\\cyrchar\\CYRY", + commandspacer: true + }, + "ү": { + text: "\\cyrchar\\cyry", + commandspacer: true + }, + "Ұ": { + text: "\\cyrchar\\CYRYHCRS", + commandspacer: true + }, + "ұ": { + text: "\\cyrchar\\cyryhcrs", + commandspacer: true + }, + "Ҳ": { + text: "\\cyrchar\\CYRHDSC", + commandspacer: true + }, + "ҳ": { + text: "\\cyrchar\\cyrhdsc", + commandspacer: true + }, + "Ҵ": { + text: "\\cyrchar\\CYRTETSE", + commandspacer: true + }, + "ҵ": { + text: "\\cyrchar\\cyrtetse", + commandspacer: true + }, + "Ҷ": { + text: "\\cyrchar\\CYRCHRDSC", + commandspacer: true + }, + "ҷ": { + text: "\\cyrchar\\cyrchrdsc", + commandspacer: true + }, + "Ҹ": { + text: "\\cyrchar\\CYRCHVCRS", + commandspacer: true + }, + "ҹ": { + text: "\\cyrchar\\cyrchvcrs", + commandspacer: true + }, + "Һ": { + text: "\\cyrchar\\CYRSHHA", + commandspacer: true + }, + "һ": { + text: "\\cyrchar\\cyrshha", + commandspacer: true + }, + "Ҽ": { + text: "\\cyrchar\\CYRABHCH", + commandspacer: true + }, + "ҽ": { + text: "\\cyrchar\\cyrabhch", + commandspacer: true + }, + "Ҿ": { + text: "\\cyrchar\\CYRABHCHDSC", + commandspacer: true + }, + "ҿ": { + text: "\\cyrchar\\cyrabhchdsc", + commandspacer: true + }, + "Ӏ": { + text: "\\cyrchar\\CYRpalochka", + commandspacer: true + }, + "Ӄ": { + text: "\\cyrchar\\CYRKHK", + commandspacer: true + }, + "ӄ": { + text: "\\cyrchar\\cyrkhk", + commandspacer: true + }, + "Ӈ": { + text: "\\cyrchar\\CYRNHK", + commandspacer: true + }, + "ӈ": { + text: "\\cyrchar\\cyrnhk", + commandspacer: true + }, + "Ӌ": { + text: "\\cyrchar\\CYRCHLDSC", + commandspacer: true + }, + "ӌ": { + text: "\\cyrchar\\cyrchldsc", + commandspacer: true + }, + "Ӕ": { + text: "\\cyrchar\\CYRAE", + commandspacer: true + }, + "ӕ": { + text: "\\cyrchar\\cyrae", + commandspacer: true + }, + "Ә": { + text: "\\cyrchar\\CYRSCHWA", + commandspacer: true + }, + "ә": { + text: "\\cyrchar\\cyrschwa", + commandspacer: true + }, + "Ӡ": { + text: "\\cyrchar\\CYRABHDZE", + commandspacer: true + }, + "ӡ": { + text: "\\cyrchar\\cyrabhdze", + commandspacer: true + }, + "Ө": { + text: "\\cyrchar\\CYROTLD", + commandspacer: true + }, + "ө": { + text: "\\cyrchar\\cyrotld", + commandspacer: true + }, + "ࡱ": { + math: "\\\\backslash" + }, + "ᵃ": { + math: "^{a}", + text: "\\textsuperscript{a}" + }, + "ᵇ": { + math: "^{b}", + text: "\\textsuperscript{b}" + }, + "ᵈ": { + math: "^{d}", + text: "\\textsuperscript{d}" + }, + "ᵉ": { + math: "^{e}", + text: "\\textsuperscript{e}" + }, + "ᵍ": { + math: "^{g}", + text: "\\textsuperscript{g}" + }, + "ᵏ": { + math: "^{k}", + text: "\\textsuperscript{k}" + }, + "ᵐ": { + math: "^{m}", + text: "\\textsuperscript{m}" + }, + "ᵒ": { + math: "^{o}", + text: "\\textsuperscript{o}" + }, + "ᵖ": { + math: "^{p}", + text: "\\textsuperscript{p}" + }, + "ᵗ": { + math: "^{t}", + text: "\\textsuperscript{t}" + }, + "ᵘ": { + math: "^{u}", + text: "\\textsuperscript{u}" + }, + "ᵛ": { + math: "^{v}", + text: "\\textsuperscript{v}" + }, + "ᶜ": { + math: "^{c}", + text: "\\textsuperscript{c}" + }, + "ᶠ": { + math: "^{f}", + text: "\\textsuperscript{f}" + }, + "ᶻ": { + math: "^{z}", + text: "\\textsuperscript{z}" + }, + "Ḃ": { + text: "\\.B" + }, + "ḃ": { + text: "\\.b" + }, + "Ḅ": { + text: "\\d{B}" + }, + "ḅ": { + text: "\\d{b}" + }, + "Ḇ": { + text: "\\b{B}" + }, + "ḇ": { + text: "\\b{b}" + }, + "Ḋ": { + text: "\\.D" + }, + "ḋ": { + text: "\\.d" + }, + "Ḍ": { + text: "\\d{D}" + }, + "ḍ": { + text: "\\d{d}" + }, + "Ḏ": { + text: "\\b{D}" + }, + "ḏ": { + text: "\\b{d}" + }, + "Ḑ": { + text: "\\c{D}" + }, + "ḑ": { + text: "\\c{d}" + }, + "Ḝ": { + text: "\\c{\\u{E}}" + }, + "ḝ": { + text: "\\c{\\u{e}}" + }, + "Ḟ": { + text: "\\.F" + }, + "ḟ": { + text: "\\.f" + }, + "Ḡ": { + text: "\\=G" + }, + "ḡ": { + text: "\\=g" + }, + "Ḣ": { + text: "\\.H" + }, + "ḣ": { + text: "\\.h" + }, + "Ḥ": { + text: "\\d{H}" + }, + "ḥ": { + text: "\\d{h}" + }, + "Ḧ": { + text: "\\\"H" + }, + "ḧ": { + text: "\\\"h" + }, + "Ḩ": { + text: "\\c{H}" + }, + "ḩ": { + text: "\\c{h}" + }, + "Ḱ": { + text: "\\'K" + }, + "ḱ": { + text: "\\'k" + }, + "Ḳ": { + text: "\\d{K}" + }, + "ḳ": { + text: "\\d{k}" + }, + "Ḵ": { + text: "\\b{K}" + }, + "ḵ": { + text: "\\b{k}" + }, + "Ḷ": { + text: "\\d{L}" + }, + "ḷ": { + text: "\\d{l}" + }, + "Ḻ": { + text: "\\b{L}" + }, + "ḻ": { + text: "\\b{l}" + }, + "Ḿ": { + text: "\\'M" + }, + "ḿ": { + text: "\\'m" + }, + "Ṁ": { + text: "\\.M" + }, + "ṁ": { + text: "\\.m" + }, + "Ṃ": { + text: "\\d{M}" + }, + "ṃ": { + text: "\\d{m}" + }, + "Ṅ": { + text: "\\.N" + }, + "ṅ": { + text: "\\.n" + }, + "Ṇ": { + text: "\\d{N}" + }, + "ṇ": { + text: "\\d{n}" + }, + "Ṉ": { + text: "\\b{N}" + }, + "ṉ": { + text: "\\b{n}" + }, + "Ṕ": { + text: "\\'P" + }, + "ṕ": { + text: "\\'p" + }, + "Ṗ": { + text: "\\.P" + }, + "ṗ": { + text: "\\.p" + }, + "Ṙ": { + text: "\\.R" + }, + "ṙ": { + text: "\\.r" + }, + "Ṛ": { + text: "\\d{R}" + }, + "ṛ": { + text: "\\d{r}" + }, + "Ṟ": { + text: "\\b{R}" + }, + "ṟ": { + text: "\\b{r}" + }, + "Ṡ": { + text: "\\.S" + }, + "ṡ": { + text: "\\.s" + }, + "Ṣ": { + text: "\\d{S}" + }, + "ṣ": { + text: "\\d{s}" + }, + "Ṫ": { + text: "\\.T" + }, + "ṫ": { + text: "\\.t" + }, + "Ṭ": { + text: "\\d{T}" + }, + "ṭ": { + text: "\\d{t}" + }, + "Ṯ": { + text: "\\b{T}" + }, + "ṯ": { + text: "\\b{t}" + }, + "Ṽ": { + text: "\\~V" + }, + "ṽ": { + text: "\\~v" + }, + "Ṿ": { + text: "\\d{V}" + }, + "ṿ": { + text: "\\d{v}" + }, + "Ẁ": { + text: "\\`W" + }, + "ẁ": { + text: "\\`w" + }, + "Ẃ": { + text: "\\'W" + }, + "ẃ": { + text: "\\'w" + }, + "Ẅ": { + text: "\\\"W" + }, + "ẅ": { + text: "\\\"w" + }, + "Ẇ": { + text: "\\.W" + }, + "ẇ": { + text: "\\.w" + }, + "Ẉ": { + text: "\\d{W}" + }, + "ẉ": { + text: "\\d{w}" + }, + "Ẋ": { + text: "\\.X" + }, + "ẋ": { + text: "\\.x" + }, + "Ẍ": { + text: "\\\"X" + }, + "ẍ": { + text: "\\\"x" + }, + "Ẏ": { + text: "\\.Y" + }, + "ẏ": { + text: "\\.y" + }, + "Ẑ": { + text: "\\^Z" + }, + "ẑ": { + text: "\\^z" + }, + "Ẓ": { + text: "\\d{Z}" + }, + "ẓ": { + text: "\\d{z}" + }, + "Ẕ": { + text: "\\b{Z}" + }, + "ẕ": { + text: "\\b{z}" + }, + "ẖ": { + text: "\\b{h}" + }, + "ẗ": { + text: "\\\"t" + }, + "ẘ": { + text: "\\r{w}" + }, + "ẙ": { + text: "\\r{y}" + }, + "Ạ": { + text: "\\d{A}" + }, + "ạ": { + text: "\\d{a}" + }, + "Ẹ": { + text: "\\d{E}" + }, + "ẹ": { + text: "\\d{e}" + }, + "Ẽ": { + text: "\\~E" + }, + "ẽ": { + text: "\\~e" + }, + "Ị": { + text: "\\d{I}" + }, + "ị": { + text: "\\d{i}" + }, + "Ọ": { + text: "\\d{O}" + }, + "ọ": { + text: "\\d{o}" + }, + "Ụ": { + text: "\\d{U}" + }, + "ụ": { + text: "\\d{u}" + }, + "Ỳ": { + text: "\\`Y" + }, + "ỳ": { + text: "\\`y" + }, + "Ỵ": { + text: "\\d{Y}" + }, + "ỵ": { + text: "\\d{y}" + }, + "Ỹ": { + text: "\\~Y" + }, + "ỹ": { + text: "\\~y" + }, + " ": { + text: " ", + space: true + }, + " ": { + math: "\\quad", + space: true + }, + " ": { + text: "\\hspace{0.6em}", + space: true + }, + " ": { + math: "\\quad", + space: true, + text: "\\hspace{1em}" + }, + " ": { + text: "\\;", + space: true + }, + " ": { + text: "\\hspace{0.25em}", + space: true + }, + " ": { + text: "\\hspace{0.166em}", + space: true + }, + " ": { + text: "\\hphantom{0}", + space: true + }, + " ": { + text: "\\hphantom{,}", + space: true + }, + " ": { + text: "\\,", + space: true + }, + " ": { + math: "\\mkern1mu", + space: true + }, + "​": { + text: "\\mbox", + commandspacer: true, + space: true + }, + "‌": { + text: "{\\aftergroup\\ignorespaces}" + }, + "‐": { + text: "-" + }, + "‑": { + text: "-" + }, + "‒": { + text: "-" + }, + "–": { + text: "\\textendash", + commandspacer: true + }, + "—": { + text: "\\textemdash", + commandspacer: true + }, + "―": { + math: "\\horizbar", + text: "\\rule{1em}{1pt}" + }, + "‖": { + math: "\\Vert" + }, + "‗": { + math: "\\twolowline" + }, + "‘": { + text: "`" + }, + "’": { + text: "'" + }, + "‚": { + text: "," + }, + "‛": { + math: "\\Elzreapos" + }, + "“": { + text: "``" + }, + "”": { + text: "''" + }, + "„": { + text: ",," + }, + "‟": { + text: "\\quotedblbase", + commandspacer: true + }, + "†": { + math: "\\dagger", + text: "\\textdagger", + commandspacer: true, + textpackages: [ + "textcomp" + ] + }, + "‡": { + math: "\\ddagger", + text: "\\textdaggerdbl", + commandspacer: true, + textpackages: [ + "textcomp" + ] + }, + "•": { + math: "\\bullet", + text: "\\textbullet", + commandspacer: true, + textpackages: [ + "textcomp" + ] + }, + "‣": { + text: ">" + }, + "․": { + text: "." + }, + "‥": { + math: "\\enleadertwodots", + text: ".." + }, + "…": { + math: "\\ldots", + text: "\\ldots", + commandspacer: true + }, + "‧": { + text: "-" + }, + " ": { + text: " ", + space: true + }, + "‰": { + text: "\\textperthousand", + commandspacer: true, + textpackages: [ + "textcomp" + ] + }, + "‱": { + text: "\\textpertenthousand", + commandspacer: true, + textpackages: [ + "textcomp" + ] + }, + "′": { + math: "{'}" + }, + "″": { + math: "{''}" + }, + "‴": { + math: "{'''}" + }, + "‵": { + math: "\\backprime" + }, + "‶": { + math: "\\backdprime" + }, + "‷": { + math: "\\backtrprime" + }, + "‸": { + math: "\\caretinsert" + }, + "‹": { + text: "\\guilsinglleft", + commandspacer: true + }, + "›": { + text: "\\guilsinglright", + commandspacer: true + }, + "‼": { + math: "\\Exclam" + }, + "‾": { + text: "-" + }, + "⁃": { + math: "\\hyphenbullet" + }, + "⁄": { + math: "\\fracslash" + }, + "⁇": { + math: "\\Question" + }, + "⁈": { + text: "?!" + }, + "⁉": { + text: "!?" + }, + "⁊": { + text: "7" + }, + "⁐": { + math: "\\closure" + }, + "⁗": { + math: "''''" + }, + " ": { + math: "\\:", + space: true, + text: "\\:" + }, + "⁠": { + text: "\\nolinebreak", + commandspacer: true + }, + "⁰": { + math: "^{0}" + }, + "ⁱ": { + math: "^{i}", + text: "\\textsuperscript{i}" + }, + "⁴": { + math: "^{4}" + }, + "⁵": { + math: "^{5}" + }, + "⁶": { + math: "^{6}" + }, + "⁷": { + math: "^{7}" + }, + "⁸": { + math: "^{8}" + }, + "⁹": { + math: "^{9}" + }, + "⁺": { + math: "^{+}" + }, + "⁻": { + math: "^{-}" + }, + "⁼": { + math: "^{=}" + }, + "⁽": { + math: "^{(}" + }, + "⁾": { + math: "^{)}" + }, + "ⁿ": { + math: "^{n}", + text: "\\textsuperscript{n}" + }, + "₀": { + math: "_{0}" + }, + "₁": { + math: "_{1}" + }, + "₂": { + math: "_{2}" + }, + "₃": { + math: "_{3}" + }, + "₄": { + math: "_{4}" + }, + "₅": { + math: "_{5}" + }, + "₆": { + math: "_{6}" + }, + "₇": { + math: "_{7}" + }, + "₈": { + math: "_{8}" + }, + "₉": { + math: "_{9}" + }, + "₊": { + math: "_{+}" + }, + "₋": { + math: "_{-}" + }, + "₌": { + math: "_{=}" + }, + "₍": { + math: "_{(}" + }, + "₎": { + math: "_{)}" + }, + "ₐ": { + math: "_{a}", + text: "\\textsubscript{a}" + }, + "ₑ": { + math: "_{e}", + text: "\\textsubscript{e}" + }, + "ₒ": { + math: "_{o}", + text: "\\textsubscript{o}" + }, + "ₓ": { + math: "_{x}", + text: "\\textsubscript{x}" + }, + "ₔ": { + text: "\\textsubscript{\\textschwa}", + textpackages: [ + "tipa" + ] + }, + "ₕ": { + math: "_{h}", + text: "\\textsubscript{h}" + }, + "ₖ": { + math: "_{k}", + text: "\\textsubscript{k}" + }, + "ₗ": { + math: "_{l}", + text: "\\textsubscript{l}" + }, + "ₘ": { + math: "_{m}", + text: "\\textsubscript{m}" + }, + "ₙ": { + math: "_{n}", + text: "\\textsubscript{n}" + }, + "ₚ": { + math: "_{p}", + text: "\\textsubscript{p}" + }, + "ₛ": { + math: "_{s}", + text: "\\textsubscript{s}" + }, + "ₜ": { + math: "_{t}", + text: "\\textsubscript{t}" + }, + "₧": { + text: "\\ensuremath{\\Elzpes}" + }, + "€": { + math: "\\euro", + text: "\\texteuro", + commandspacer: true + }, + "⃐": { + math: "\\lvec" + }, + "⃑": { + math: "\\rightharpoonup", + mathpackages: [ + "amsmath", + "amssymb" + ] + }, + "⃒": { + math: "\\vertoverlay" + }, + "⃖": { + math: "\\LVec" + }, + "⃗": { + math: "\\vec" + }, + "⃛": { + math: "\\dddot" + }, + "⃜": { + math: "\\ddddot" + }, + "⃝": { + math: "\\enclosecircle" + }, + "⃞": { + math: "\\enclosesquare" + }, + "⃟": { + math: "\\enclosediamond" + }, + "⃡": { + math: "\\overleftrightarrow" + }, + "⃤": { + math: "\\enclosetriangle" + }, + "⃧": { + math: "\\annuity" + }, + "⃨": { + math: "\\threeunderdot" + }, + "⃩": { + math: "\\widebridgeabove" + }, + "⃬": { + math: "\\underrightharpoondown" + }, + "⃭": { + math: "\\underleftharpoondown" + }, + "⃮": { + math: "\\underleftarrow" + }, + "⃯": { + math: "\\underrightarrow" + }, + "⃰": { + math: "\\asteraccent" + }, + "℀": { + text: "a/c" + }, + "℁": { + text: "a/s" + }, + "ℂ": { + math: "\\mathbb{C}" + }, + "℃": { + text: "\\textcelsius", + commandspacer: true + }, + "℅": { + text: "c/o" + }, + "℆": { + text: "c/u" + }, + "ℇ": { + math: "\\Euler" + }, + "℉": { + text: "F" + }, + "ℊ": { + math: "\\mathscr{g}" + }, + "ℋ": { + math: "\\mathscr{H}" + }, + "ℌ": { + math: "\\mathfrak{H}" + }, + "ℍ": { + math: "\\mathbb{H}" + }, + "ℎ": { + math: "\\Planckconst" + }, + "ℏ": { + math: "\\hslash" + }, + "ℐ": { + math: "\\mathscr{I}" + }, + "ℑ": { + math: "\\mathfrak{I}" + }, + "ℒ": { + math: "\\mathscr{L}" + }, + "ℓ": { + math: "\\mathscr{l}" + }, + "ℕ": { + math: "\\mathbb{N}" + }, + "№": { + text: "\\cyrchar\\textnumero", + commandspacer: true + }, + "℗": { + text: "\\textcircledP", + commandspacer: true + }, + "℘": { + math: "\\wp" + }, + "ℙ": { + math: "\\mathbb{P}" + }, + "ℚ": { + math: "\\mathbb{Q}" + }, + "ℛ": { + math: "\\mathscr{R}" + }, + "ℜ": { + math: "\\mathfrak{R}" + }, + "ℝ": { + math: "\\mathbb{R}" + }, + "℞": { + math: "\\Elzxrat" + }, + "℠": { + text: "\\textservicemark", + commandspacer: true + }, + "℡": { + text: "TEL" + }, + "™": { + text: "\\texttrademark", + commandspacer: true, + textpackages: [ + "textcomp" + ] + }, + "ℤ": { + math: "\\mathbb{Z}" + }, + "Ω": { + math: "\\Omega" + }, + "℧": { + math: "\\mho" + }, + "ℨ": { + math: "\\mathfrak{Z}" + }, + "℩": { + text: "\\textriota", + commandspacer: true + }, + "K": { + text: "K" + }, + "Å": { + math: "\\Angstroem", + text: "\\AA", + commandspacer: true + }, + "ℬ": { + math: "\\mathscr{B}" + }, + "ℭ": { + math: "\\mathfrak{C}" + }, + "℮": { + text: "\\textestimated", + commandspacer: true + }, + "ℯ": { + math: "\\mathscr{e}" + }, + "ℰ": { + math: "\\mathscr{E}" + }, + "ℱ": { + math: "\\mathscr{F}" + }, + "Ⅎ": { + math: "\\Finv" + }, + "ℳ": { + math: "\\mathscr{M}" + }, + "ℴ": { + math: "\\mathscr{o}" + }, + "ℵ": { + math: "\\aleph" + }, + "ℶ": { + math: "\\beth" + }, + "ℷ": { + math: "\\gimel" + }, + "ℸ": { + math: "\\daleth" + }, + "ℼ": { + math: "\\mathbb{\\pi}" + }, + "ℽ": { + math: "\\mathbb{\\gamma}" + }, + "ℾ": { + math: "\\mathbb{\\Gamma}" + }, + "ℿ": { + math: "\\mathbb{\\Pi}" + }, + "⅀": { + math: "\\mathbb{\\Sigma}" + }, + "⅁": { + math: "\\Game" + }, + "⅂": { + math: "\\sansLturned" + }, + "⅃": { + math: "\\sansLmirrored" + }, + "⅄": { + math: "\\Yup" + }, + "ⅅ": { + math: "\\CapitalDifferentialD" + }, + "ⅆ": { + math: "\\DifferentialD" + }, + "ⅇ": { + math: "\\ExponetialE" + }, + "ⅈ": { + math: "\\ComplexI" + }, + "ⅉ": { + math: "\\ComplexJ" + }, + "⅊": { + math: "\\PropertyLine" + }, + "⅋": { + math: "\\invamp" + }, + "⅐": { + math: "\\frac{1}{7}" + }, + "⅑": { + math: "\\frac{1}{9}" + }, + "⅒": { + math: "\\frac{1}{10}" + }, + "⅓": { + math: "\\frac{1}{3}" + }, + "⅔": { + math: "\\frac{2}{3}" + }, + "⅕": { + math: "\\frac{1}{5}" + }, + "⅖": { + math: "\\frac{2}{5}" + }, + "⅗": { + math: "\\frac{3}{5}" + }, + "⅘": { + math: "\\frac{4}{5}" + }, + "⅙": { + math: "\\frac{1}{6}" + }, + "⅚": { + math: "\\frac{5}{6}" + }, + "⅛": { + math: "\\frac{1}{8}" + }, + "⅜": { + math: "\\frac{3}{8}" + }, + "⅝": { + math: "\\frac{5}{8}" + }, + "⅞": { + math: "\\frac{7}{8}" + }, + "⅟": { + math: "\\frac{1}" + }, + "Ⅰ": { + text: "I" + }, + "Ⅱ": { + text: "II" + }, + "Ⅲ": { + text: "III" + }, + "Ⅳ": { + text: "IV" + }, + "Ⅴ": { + text: "V" + }, + "Ⅵ": { + text: "VI" + }, + "Ⅶ": { + text: "VII" + }, + "Ⅷ": { + text: "VIII" + }, + "Ⅸ": { + text: "IX" + }, + "Ⅹ": { + text: "X" + }, + "Ⅺ": { + text: "XI" + }, + "Ⅻ": { + text: "XII" + }, + "Ⅼ": { + text: "L" + }, + "Ⅽ": { + text: "C" + }, + "Ⅾ": { + text: "D" + }, + "Ⅿ": { + text: "M" + }, + "ⅰ": { + text: "i" + }, + "ⅱ": { + text: "ii" + }, + "ⅲ": { + text: "iii" + }, + "ⅳ": { + text: "iv" + }, + "ⅴ": { + text: "v" + }, + "ⅵ": { + text: "vi" + }, + "ⅶ": { + text: "vii" + }, + "ⅷ": { + text: "viii" + }, + "ⅸ": { + text: "ix" + }, + "ⅹ": { + text: "x" + }, + "ⅺ": { + text: "xi" + }, + "ⅻ": { + text: "xii" + }, + "ⅼ": { + text: "l" + }, + "ⅽ": { + text: "c" + }, + "ⅾ": { + text: "d" + }, + "ⅿ": { + text: "m" + }, + "↉": { + math: "\\frac{0}{3}" + }, + "←": { + math: "\\leftarrow" + }, + "↑": { + math: "\\uparrow" + }, + "→": { + math: "\\rightarrow", + text: "\\textrightarrow", + commandspacer: true, + textpackages: [ + "textcomp" + ] + }, + "↓": { + math: "\\downarrow" + }, + "↔": { + math: "\\leftrightarrow" + }, + "↕": { + math: "\\updownarrow" + }, + "↖": { + math: "\\nwarrow" + }, + "↗": { + math: "\\nearrow" + }, + "↘": { + math: "\\searrow" + }, + "↙": { + math: "\\swarrow" + }, + "↚": { + math: "\\nleftarrow" + }, + "↛": { + math: "\\nrightarrow" + }, + "↜": { + math: "\\arrowwaveleft" + }, + "↝": { + math: "\\arrowwaveright" + }, + "↞": { + math: "\\twoheadleftarrow" + }, + "↟": { + math: "\\twoheaduparrow" + }, + "↠": { + math: "\\twoheadrightarrow" + }, + "↡": { + math: "\\twoheaddownarrow" + }, + "↢": { + math: "\\leftarrowtail" + }, + "↣": { + math: "\\rightarrowtail" + }, + "↤": { + math: "\\mapsfrom" + }, + "↥": { + math: "\\MapsUp" + }, + "↦": { + math: "\\mapsto" + }, + "↧": { + math: "\\MapsDown" + }, + "↨": { + math: "\\updownarrowbar" + }, + "↩": { + math: "\\hookleftarrow" + }, + "↪": { + math: "\\hookrightarrow" + }, + "↫": { + math: "\\looparrowleft" + }, + "↬": { + math: "\\looparrowright" + }, + "↭": { + math: "\\leftrightsquigarrow" + }, + "↮": { + math: "\\nleftrightarrow" + }, + "↯": { + math: "\\lightning" + }, + "↰": { + math: "\\Lsh" + }, + "↱": { + math: "\\Rsh" + }, + "↲": { + math: "\\dlsh" + }, + "↳": { + text: "\\reflectbox{\\carriagereturn}", + textpackages: [ + "graphics", + "unicode-math" + ] + }, + "↴": { + math: "\\linefeed" + }, + "↵": { + math: "\\carriagereturn" + }, + "↶": { + math: "\\curvearrowleft" + }, + "↷": { + math: "\\curvearrowright" + }, + "↸": { + math: "\\barovernorthwestarrow" + }, + "↹": { + math: "\\barleftarrowrightarrowba" + }, + "↺": { + math: "\\circlearrowleft" + }, + "↻": { + math: "\\circlearrowright" + }, + "↼": { + math: "\\leftharpoonup" + }, + "↽": { + math: "\\leftharpoondown" + }, + "↾": { + math: "\\upharpoonright" + }, + "↿": { + math: "\\upharpoonleft" + }, + "⇀": { + math: "\\rightharpoonup", + mathpackages: [ + "amsmath", + "amssymb" + ] + }, + "⇁": { + math: "\\rightharpoondown" + }, + "⇂": { + math: "\\downharpoonright" + }, + "⇃": { + math: "\\downharpoonleft" + }, + "⇄": { + math: "\\rightleftarrows" + }, + "⇅": { + math: "\\dblarrowupdown" + }, + "⇆": { + math: "\\leftrightarrows" + }, + "⇇": { + math: "\\leftleftarrows" + }, + "⇈": { + math: "\\upuparrows" + }, + "⇉": { + math: "\\rightrightarrows" + }, + "⇊": { + math: "\\downdownarrows" + }, + "⇋": { + math: "\\leftrightharpoons" + }, + "⇌": { + math: "\\rightleftharpoons" + }, + "⇍": { + math: "\\nLeftarrow" + }, + "⇎": { + math: "\\nLeftrightarrow" + }, + "⇏": { + math: "\\nRightarrow" + }, + "⇐": { + math: "\\Leftarrow" + }, + "⇑": { + math: "\\Uparrow" + }, + "⇒": { + math: "\\Rightarrow" + }, + "⇓": { + math: "\\Downarrow" + }, + "⇔": { + math: "\\Leftrightarrow" + }, + "⇕": { + math: "\\Updownarrow" + }, + "⇖": { + math: "\\Nwarrow" + }, + "⇗": { + math: "\\Nearrow" + }, + "⇘": { + math: "\\Searrow" + }, + "⇙": { + math: "\\Swarrow" + }, + "⇚": { + math: "\\Lleftarrow" + }, + "⇛": { + math: "\\Rrightarrow" + }, + "⇜": { + math: "\\leftsquigarrow" + }, + "⇝": { + math: "\\rightsquigarrow" + }, + "⇞": { + math: "\\nHuparrow" + }, + "⇟": { + math: "\\nHdownarrow" + }, + "⇠": { + math: "\\dashleftarrow" + }, + "⇡": { + math: "\\updasharrow" + }, + "⇢": { + math: "\\dashrightarrow" + }, + "⇣": { + math: "\\downdasharrow" + }, + "⇤": { + math: "\\LeftArrowBar" + }, + "⇥": { + math: "\\RightArrowBar" + }, + "⇦": { + math: "\\leftwhitearrow" + }, + "⇧": { + math: "\\upwhitearrow" + }, + "⇨": { + math: "\\rightwhitearrow" + }, + "⇩": { + math: "\\downwhitearrow" + }, + "⇪": { + math: "\\whitearrowupfrombar" + }, + "⇴": { + math: "\\circleonrightarrow" + }, + "⇵": { + math: "\\DownArrowUpArrow" + }, + "⇶": { + math: "\\rightthreearrows" + }, + "⇷": { + math: "\\nvleftarrow" + }, + "⇸": { + math: "\\pfun" + }, + "⇹": { + math: "\\nvleftrightarrow" + }, + "⇺": { + math: "\\nVleftarrow" + }, + "⇻": { + math: "\\ffun" + }, + "⇼": { + math: "\\nVleftrightarrow" + }, + "⇽": { + math: "\\leftarrowtriangle" + }, + "⇾": { + math: "\\rightarrowtriangle" + }, + "⇿": { + math: "\\leftrightarrowtriangle" + }, + "∀": { + math: "\\forall" + }, + "∁": { + math: "\\complement" + }, + "∂": { + math: "\\partial" + }, + "∃": { + math: "\\exists" + }, + "∄": { + math: "\\nexists" + }, + "∅": { + math: "\\varnothing" + }, + "∆": { + math: "\\increment" + }, + "∇": { + math: "\\nabla" + }, + "∈": { + math: "\\in" + }, + "∉": { + math: "\\not\\in" + }, + "∊": { + math: "\\smallin" + }, + "∋": { + math: "\\ni" + }, + "∌": { + math: "\\not\\ni" + }, + "∍": { + math: "\\smallni" + }, + "∎": { + math: "\\QED" + }, + "∏": { + math: "\\prod" + }, + "∐": { + math: "\\coprod" + }, + "∑": { + math: "\\sum" + }, + "−": { + math: "-", + text: "-" + }, + "∓": { + math: "\\mp" + }, + "∔": { + math: "\\dotplus" + }, + "∕": { + text: "/" + }, + "∖": { + math: "\\setminus" + }, + "∗": { + math: "{_\\ast}" + }, + "∘": { + math: "\\circ" + }, + "∙": { + math: "\\bullet" + }, + "√": { + math: "\\surd" + }, + "∛": { + math: "\\sqrt[3]" + }, + "∜": { + math: "\\sqrt[4]" + }, + "∝": { + math: "\\propto" + }, + "∞": { + math: "\\infty" + }, + "∟": { + math: "\\rightangle" + }, + "∠": { + math: "\\angle" + }, + "∡": { + math: "\\measuredangle" + }, + "∢": { + math: "\\sphericalangle" + }, + "∣": { + math: "\\mid" + }, + "∤": { + math: "\\nmid" + }, + "∥": { + math: "\\parallel" + }, + "∦": { + math: "\\nparallel" + }, + "∧": { + math: "\\wedge" + }, + "∨": { + math: "\\vee" + }, + "∩": { + math: "\\cap" + }, + "∪": { + math: "\\cup" + }, + "∫": { + math: "\\int" + }, + "∬": { + math: "{\\int\\!\\int}" + }, + "∭": { + math: "{\\int\\!\\int\\!\\int}" + }, + "∮": { + math: "\\oint" + }, + "∯": { + math: "\\surfintegral" + }, + "∰": { + math: "\\volintegral" + }, + "∱": { + math: "\\clwintegral" + }, + "∲": { + math: "\\lcirclerightint", + mathpackages: [ + "MnSymbol" + ] + }, + "∳": { + math: "\\rcirclerightint", + mathpackages: [ + "MnSymbol" + ] + }, + "∴": { + math: "\\therefore" + }, + "∵": { + math: "\\because" + }, + "∶": { + math: ":" + }, + "∷": { + math: "\\Colon" + }, + "∸": { + math: "\\dotdiv", + mathpackages: [ + "mathabx" + ] + }, + "∹": { + math: "\\eqcolon" + }, + "∺": { + math: "\\mathbin{{:}\\!\\!{-}\\!\\!{:}}" + }, + "∻": { + math: "\\homothetic" + }, + "∼": { + math: "\\sim" + }, + "∽": { + math: "\\backsim" + }, + "∾": { + math: "\\lazysinv" + }, + "∿": { + math: "\\AC" + }, + "≀": { + math: "\\wr" + }, + "≁": { + math: "\\not\\sim" + }, + "≂": { + math: "\\texteqsim", + mathpackages: [ + "xecjk" + ] + }, + "≂̸": { + math: "\\NotEqualTilde" + }, + "≃": { + math: "\\simeq" + }, + "≄": { + math: "\\not\\simeq" + }, + "≅": { + math: "\\cong" + }, + "≆": { + math: "\\approxnotequal" + }, + "≇": { + math: "\\not\\cong" + }, + "≈": { + math: "\\approx" + }, + "≉": { + math: "\\not\\approx" + }, + "≊": { + math: "\\approxeq" + }, + "≋": { + math: "\\tildetrpl" + }, + "≋̸": { + math: "\\not\\apid" + }, + "≌": { + math: "\\allequal" + }, + "≍": { + math: "\\asymp" + }, + "≎": { + math: "\\Bumpeq" + }, + "≎̸": { + math: "\\NotHumpDownHump" + }, + "≏": { + math: "\\bumpeq" + }, + "≏̸": { + math: "\\NotHumpEqual" + }, + "≐": { + math: "\\doteq" + }, + "≐̸": { + math: "\\not\\doteq" + }, + "≑": { + math: "\\doteqdot" + }, + "≒": { + math: "\\fallingdotseq" + }, + "≓": { + math: "\\risingdotseq" + }, + "≔": { + math: "\\coloneq", + text: ":=" + }, + "≕": { + math: "=:" + }, + "≖": { + math: "\\eqcirc" + }, + "≗": { + math: "\\circeq" + }, + "≘": { + math: "\\arceq" + }, + "≙": { + math: "\\estimates" + }, + "≛": { + math: "\\starequal" + }, + "≜": { + math: "\\triangleq" + }, + "≝": { + math: "\\eqdef" + }, + "≞": { + math: "\\measeq" + }, + "≠": { + math: "\\neq" + }, + "≡": { + math: "\\equiv" + }, + "≢": { + math: "\\not\\equiv" + }, + "≣": { + math: "\\Equiv" + }, + "≤": { + math: "\\leq" + }, + "≥": { + math: "\\geq" + }, + "≦": { + math: "\\leqq" + }, + "≧": { + math: "\\geqq" + }, + "≨": { + math: "\\lneqq" + }, + "≨︀": { + math: "\\lvertneqq" + }, + "≩": { + math: "\\gneqq" + }, + "≩︀": { + math: "\\gvertneqq" + }, + "≪": { + math: "\\ll" + }, + "≪̸": { + math: "\\NotLessLess" + }, + "≫": { + math: "\\gg" + }, + "≫̸": { + math: "\\NotGreaterGreater" + }, + "≬": { + math: "\\between" + }, + "≭": { + math: "{\\not\\kern-0.3em\\times}" + }, + "≮": { + math: "\\not<" + }, + "≯": { + math: "\\not>" + }, + "≰": { + math: "\\not\\leq" + }, + "≱": { + math: "\\not\\geq" + }, + "≲": { + math: "\\lessequivlnt" + }, + "≳": { + math: "\\greaterequivlnt" + }, + "≶": { + math: "\\lessgtr" + }, + "≷": { + math: "\\gtrless" + }, + "≸": { + math: "\\notlessgreater" + }, + "≹": { + math: "\\notgreaterless" + }, + "≺": { + math: "\\prec" + }, + "≻": { + math: "\\succ" + }, + "≼": { + math: "\\preccurlyeq" + }, + "≽": { + math: "\\succcurlyeq" + }, + "≾": { + math: "\\precapprox" + }, + "≾̸": { + math: "\\NotPrecedesTilde" + }, + "≿": { + math: "\\succapprox" + }, + "≿̸": { + math: "\\NotSucceedsTilde" + }, + "⊀": { + math: "\\not\\prec" + }, + "⊁": { + math: "\\not\\succ" + }, + "⊂": { + math: "\\subset" + }, + "⊃": { + math: "\\supset" + }, + "⊄": { + math: "\\not\\subset" + }, + "⊅": { + math: "\\not\\supset" + }, + "⊆": { + math: "\\subseteq" + }, + "⊇": { + math: "\\supseteq" + }, + "⊈": { + math: "\\not\\subseteq" + }, + "⊉": { + math: "\\not\\supseteq" + }, + "⊊": { + math: "\\subsetneq" + }, + "⊊︀": { + math: "\\varsubsetneqq" + }, + "⊋": { + math: "\\supsetneq" + }, + "⊋︀": { + math: "\\varsupsetneq" + }, + "⊌": { + math: "\\cupleftarrow" + }, + "⊍": { + math: "\\cupdot" + }, + "⊎": { + math: "\\uplus" + }, + "⊏": { + math: "\\sqsubset" + }, + "⊏̸": { + math: "\\NotSquareSubset" + }, + "⊐": { + math: "\\sqsupset" + }, + "⊐̸": { + math: "\\NotSquareSuperset" + }, + "⊑": { + math: "\\sqsubseteq" + }, + "⊒": { + math: "\\sqsupseteq" + }, + "⊓": { + math: "\\sqcap" + }, + "⊔": { + math: "\\sqcup" + }, + "⊕": { + math: "\\oplus" + }, + "⊖": { + math: "\\ominus" + }, + "⊗": { + math: "\\otimes" + }, + "⊘": { + math: "\\oslash" + }, + "⊙": { + math: "\\odot" + }, + "⊚": { + math: "\\circledcirc" + }, + "⊛": { + math: "\\circledast" + }, + "⊜": { + math: "\\circledequal" + }, + "⊝": { + math: "\\circleddash" + }, + "⊞": { + math: "\\boxplus" + }, + "⊟": { + math: "\\boxminus" + }, + "⊠": { + math: "\\boxtimes" + }, + "⊡": { + math: "\\boxdot" + }, + "⊢": { + math: "\\vdash" + }, + "⊣": { + math: "\\dashv" + }, + "⊤": { + math: "\\top" + }, + "⊥": { + math: "\\perp" + }, + "⊦": { + math: "\\assert" + }, + "⊧": { + math: "\\truestate" + }, + "⊨": { + math: "\\forcesextra" + }, + "⊩": { + math: "\\Vdash" + }, + "⊪": { + math: "\\Vvdash" + }, + "⊫": { + math: "\\VDash" + }, + "⊬": { + math: "\\nvdash" + }, + "⊭": { + math: "\\nvDash" + }, + "⊮": { + math: "\\nVdash" + }, + "⊯": { + math: "\\nVDash" + }, + "⊰": { + math: "\\prurel" + }, + "⊱": { + math: "\\scurel" + }, + "⊲": { + math: "\\vartriangleleft" + }, + "⊳": { + math: "\\vartriangleright" + }, + "⊴": { + math: "\\trianglelefteq" + }, + "⊵": { + math: "\\trianglerighteq" + }, + "⊶": { + math: "\\original" + }, + "⊷": { + math: "\\image" + }, + "⊸": { + math: "\\multimap" + }, + "⊹": { + math: "\\hermitconjmatrix" + }, + "⊺": { + math: "\\intercal" + }, + "⊻": { + math: "\\veebar" + }, + "⊼": { + math: "\\barwedge" + }, + "⊽": { + math: "\\barvee" + }, + "⊾": { + math: "\\rightanglearc" + }, + "⊿": { + math: "\\varlrtriangle" + }, + "⋂": { + math: "\\bigcap" + }, + "⋃": { + math: "\\bigcup" + }, + "⋄": { + math: "\\diamond" + }, + "⋅": { + math: "\\cdot" + }, + "⋆": { + math: "\\star" + }, + "⋇": { + math: "\\divideontimes" + }, + "⋈": { + math: "\\bowtie" + }, + "⋉": { + math: "\\ltimes" + }, + "⋊": { + math: "\\rtimes" + }, + "⋋": { + math: "\\leftthreetimes" + }, + "⋌": { + math: "\\rightthreetimes" + }, + "⋍": { + math: "\\backsimeq" + }, + "⋎": { + math: "\\curlyvee" + }, + "⋏": { + math: "\\curlywedge" + }, + "⋐": { + math: "\\Subset" + }, + "⋑": { + math: "\\Supset" + }, + "⋒": { + math: "\\Cap" + }, + "⋓": { + math: "\\Cup" + }, + "⋔": { + math: "\\pitchfork" + }, + "⋕": { + math: "\\hash" + }, + "⋖": { + math: "\\lessdot" + }, + "⋗": { + math: "\\gtrdot" + }, + "⋘": { + math: "\\verymuchless" + }, + "⋙": { + math: "\\verymuchgreater" + }, + "⋚": { + math: "\\lesseqgtr" + }, + "⋛": { + math: "\\gtreqless" + }, + "⋜": { + math: "\\eqless" + }, + "⋝": { + math: "\\eqgtr" + }, + "⋞": { + math: "\\curlyeqprec" + }, + "⋟": { + math: "\\curlyeqsucc" + }, + "⋠": { + math: "\\npreceq" + }, + "⋡": { + math: "\\nsucceq" + }, + "⋢": { + math: "\\not\\sqsubseteq" + }, + "⋣": { + math: "\\not\\sqsupseteq" + }, + "⋤": { + math: "\\sqsubsetneq" + }, + "⋥": { + math: "\\Elzsqspne" + }, + "⋦": { + math: "\\lnsim" + }, + "⋧": { + math: "\\gnsim" + }, + "⋨": { + math: "\\precedesnotsimilar" + }, + "⋩": { + math: "\\succnsim" + }, + "⋪": { + math: "\\ntriangleleft" + }, + "⋫": { + math: "\\ntriangleright" + }, + "⋬": { + math: "\\ntrianglelefteq" + }, + "⋭": { + math: "\\ntrianglerighteq" + }, + "⋮": { + math: "\\vdots" + }, + "⋯": { + math: "\\cdots" + }, + "⋰": { + math: "\\upslopeellipsis" + }, + "⋱": { + math: "\\downslopeellipsis" + }, + "⋲": { + math: "\\disin" + }, + "⋳": { + math: "\\varisins" + }, + "⋴": { + math: "\\isins" + }, + "⋵": { + math: "\\isindot" + }, + "⋶": { + math: "\\barin" + }, + "⋷": { + math: "\\isinobar" + }, + "⋸": { + math: "\\isinvb" + }, + "⋹": { + math: "\\isinE" + }, + "⋺": { + math: "\\nisd" + }, + "⋻": { + math: "\\varnis" + }, + "⋼": { + math: "\\nis" + }, + "⋽": { + math: "\\varniobar" + }, + "⋾": { + math: "\\niobar" + }, + "⋿": { + math: "\\bagmember" + }, + "⌀": { + math: "\\diameter" + }, + "⌂": { + math: "\\house" + }, + "⌅": { + math: "\\varbarwedge", + text: "\\barwedge", + commandspacer: true + }, + "⌆": { + math: "\\perspcorrespond" + }, + "⌈": { + math: "\\lceil" + }, + "⌉": { + math: "\\rceil" + }, + "⌊": { + math: "\\lfloor" + }, + "⌋": { + math: "\\rfloor" + }, + "⌐": { + math: "\\invneg" + }, + "⌑": { + math: "\\wasylozenge" + }, + "⌒": { + math: "\\profline" + }, + "⌓": { + math: "\\profsurf" + }, + "⌕": { + math: "\\recorder" + }, + "⌖": { + math: "{\\mathchar\"2208}" + }, + "⌗": { + math: "\\viewdata" + }, + "⌙": { + math: "\\turnednot" + }, + "⌜": { + math: "\\ulcorner" + }, + "⌝": { + math: "\\urcorner" + }, + "⌞": { + math: "\\llcorner" + }, + "⌟": { + math: "\\lrcorner" + }, + "⌠": { + math: "\\inttop" + }, + "⌡": { + math: "\\intbottom" + }, + "⌢": { + math: "\\frown" + }, + "⌣": { + math: "\\smile" + }, + "〈": { + math: "\\langle" + }, + "〉": { + math: "\\rangle" + }, + "⌬": { + math: "\\varhexagonlrbonds" + }, + "⌲": { + math: "\\conictaper" + }, + "⌶": { + math: "\\topbot" + }, + "⌹": { + math: "\\APLinv" + }, + "⌿": { + math: "\\notslash" + }, + "⍀": { + math: "\\notbackslash" + }, + "⍇": { + math: "\\APLleftarrowbox" + }, + "⍈": { + math: "\\APLrightarrowbox" + }, + "⍉": { + math: "\\invdiameter" + }, + "⍐": { + math: "\\APLuparrowbox" + }, + "⍓": { + math: "\\APLboxupcaret" + }, + "⍗": { + math: "\\APLdownarrowbox" + }, + "⍝": { + math: "\\APLcomment" + }, + "⍞": { + math: "\\APLinput" + }, + "⍟": { + math: "\\APLlog" + }, + "⍰": { + math: "\\APLboxquestion" + }, + "⍼": { + math: "\\rangledownzigzagarrow" + }, + "⎔": { + math: "\\hexagon" + }, + "⎛": { + math: "\\lparenuend" + }, + "⎜": { + math: "\\lparenextender" + }, + "⎝": { + math: "\\lparenlend" + }, + "⎞": { + math: "\\rparenuend" + }, + "⎟": { + math: "\\rparenextender" + }, + "⎠": { + math: "\\rparenlend" + }, + "⎡": { + math: "\\lbrackuend" + }, + "⎢": { + math: "\\lbrackextender" + }, + "⎣": { + math: "\\Elzdlcorn" + }, + "⎤": { + math: "\\rbrackuend" + }, + "⎥": { + math: "\\rbrackextender" + }, + "⎦": { + math: "\\rbracklend" + }, + "⎧": { + math: "\\lbraceuend" + }, + "⎨": { + math: "\\lbracemid" + }, + "⎩": { + math: "\\lbracelend" + }, + "⎪": { + math: "\\vbraceextender" + }, + "⎫": { + math: "\\rbraceuend" + }, + "⎬": { + math: "\\rbracemid" + }, + "⎭": { + math: "\\rbracelend" + }, + "⎮": { + math: "\\intextender" + }, + "⎯": { + math: "\\harrowextender" + }, + "⎰": { + math: "\\lmoustache" + }, + "⎱": { + math: "\\rmoustache" + }, + "⎲": { + math: "\\sumtop" + }, + "⎳": { + math: "\\sumbottom" + }, + "⎴": { + math: "\\overbracket" + }, + "⎵": { + math: "\\underbracket" + }, + "⎶": { + math: "\\bbrktbrk" + }, + "⎷": { + math: "\\sqrtbottom" + }, + "⎸": { + math: "\\lvboxline" + }, + "⎹": { + math: "\\rvboxline" + }, + "⏎": { + math: "\\varcarriagereturn" + }, + "⏜": { + math: "\\overparen" + }, + "⏝": { + math: "\\underparen" + }, + "⏞": { + math: "\\overbrace" + }, + "⏟": { + math: "\\underbrace" + }, + "⏠": { + math: "\\obrbrak" + }, + "⏡": { + math: "\\ubrbrak" + }, + "⏢": { + math: "\\trapezium" + }, + "⏣": { + math: "\\benzenr" + }, + "⏤": { + math: "\\strns" + }, + "⏥": { + math: "\\fltns" + }, + "⏦": { + math: "\\accurrent" + }, + "⏧": { + math: "\\elinters" + }, + "␀": { + text: "NUL" + }, + "␁": { + text: "SOH" + }, + "␂": { + text: "STX" + }, + "␃": { + text: "ETX" + }, + "␄": { + text: "EOT" + }, + "␅": { + text: "ENQ" + }, + "␆": { + text: "ACK" + }, + "␇": { + text: "BEL" + }, + "␈": { + text: "BS" + }, + "␉": { + text: "HT" + }, + "␊": { + text: "LF" + }, + "␋": { + text: "VT" + }, + "␌": { + text: "FF" + }, + "␍": { + text: "CR" + }, + "␎": { + text: "SO" + }, + "␏": { + text: "SI" + }, + "␐": { + text: "DLE" + }, + "␑": { + text: "DC1" + }, + "␒": { + text: "DC2" + }, + "␓": { + text: "DC3" + }, + "␔": { + text: "DC4" + }, + "␕": { + text: "NAK" + }, + "␖": { + text: "SYN" + }, + "␗": { + text: "ETB" + }, + "␘": { + text: "CAN" + }, + "␙": { + text: "EM" + }, + "␚": { + text: "SUB" + }, + "␛": { + text: "ESC" + }, + "␜": { + text: "FS" + }, + "␝": { + text: "GS" + }, + "␞": { + text: "RS" + }, + "␟": { + text: "US" + }, + "␠": { + text: "SP" + }, + "␡": { + text: "DEL" + }, + "␣": { + text: "\\textvisiblespace", + commandspacer: true + }, + "␤": { + text: "NL" + }, + "␥": { + text: "///" + }, + "␦": { + text: "?" + }, + "①": { + text: "\\ding{172}" + }, + "②": { + text: "\\ding{173}" + }, + "③": { + text: "\\ding{174}" + }, + "④": { + text: "\\ding{175}" + }, + "⑤": { + text: "\\ding{176}" + }, + "⑥": { + text: "\\ding{177}" + }, + "⑦": { + text: "\\ding{178}" + }, + "⑧": { + text: "\\ding{179}" + }, + "⑨": { + text: "\\ding{180}" + }, + "⑩": { + text: "\\ding{181}" + }, + "⑪": { + text: "(11)" + }, + "⑫": { + text: "(12)" + }, + "⑬": { + text: "(13)" + }, + "⑭": { + text: "(14)" + }, + "⑮": { + text: "(15)" + }, + "⑯": { + text: "(16)" + }, + "⑰": { + text: "(17)" + }, + "⑱": { + text: "(18)" + }, + "⑲": { + text: "(19)" + }, + "⑳": { + text: "(20)" + }, + "⑴": { + text: "(1)" + }, + "⑵": { + text: "(2)" + }, + "⑶": { + text: "(3)" + }, + "⑷": { + text: "(4)" + }, + "⑸": { + text: "(5)" + }, + "⑹": { + text: "(6)" + }, + "⑺": { + text: "(7)" + }, + "⑻": { + text: "(8)" + }, + "⑼": { + text: "(9)" + }, + "⑽": { + text: "(10)" + }, + "⑾": { + text: "(11)" + }, + "⑿": { + text: "(12)" + }, + "⒀": { + text: "(13)" + }, + "⒁": { + text: "(14)" + }, + "⒂": { + text: "(15)" + }, + "⒃": { + text: "(16)" + }, + "⒄": { + text: "(17)" + }, + "⒅": { + text: "(18)" + }, + "⒆": { + text: "(19)" + }, + "⒇": { + text: "(20)" + }, + "⒈": { + text: "1." + }, + "⒉": { + text: "2." + }, + "⒊": { + text: "3." + }, + "⒋": { + text: "4." + }, + "⒌": { + text: "5." + }, + "⒍": { + text: "6." + }, + "⒎": { + text: "7." + }, + "⒏": { + text: "8." + }, + "⒐": { + text: "9." + }, + "⒑": { + text: "10." + }, + "⒒": { + text: "11." + }, + "⒓": { + text: "12." + }, + "⒔": { + text: "13." + }, + "⒕": { + text: "14." + }, + "⒖": { + text: "15." + }, + "⒗": { + text: "16." + }, + "⒘": { + text: "17." + }, + "⒙": { + text: "18." + }, + "⒚": { + text: "19." + }, + "⒛": { + text: "20." + }, + "⒜": { + text: "(a)" + }, + "⒝": { + text: "(b)" + }, + "⒞": { + text: "(c)" + }, + "⒟": { + text: "(d)" + }, + "⒠": { + text: "(e)" + }, + "⒡": { + text: "(f)" + }, + "⒢": { + text: "(g)" + }, + "⒣": { + text: "(h)" + }, + "⒤": { + text: "(i)" + }, + "⒥": { + text: "(j)" + }, + "⒦": { + text: "(k)" + }, + "⒧": { + text: "(l)" + }, + "⒨": { + text: "(m)" + }, + "⒩": { + text: "(n)" + }, + "⒪": { + text: "(o)" + }, + "⒫": { + text: "(p)" + }, + "⒬": { + text: "(q)" + }, + "⒭": { + text: "(r)" + }, + "⒮": { + text: "(s)" + }, + "⒯": { + text: "(t)" + }, + "⒰": { + text: "(u)" + }, + "⒱": { + text: "(v)" + }, + "⒲": { + text: "(w)" + }, + "⒳": { + text: "(x)" + }, + "⒴": { + text: "(y)" + }, + "⒵": { + text: "(z)" + }, + "Ⓐ": { + text: "(A)" + }, + "Ⓑ": { + text: "(B)" + }, + "Ⓒ": { + text: "(C)" + }, + "Ⓓ": { + text: "(D)" + }, + "Ⓔ": { + text: "(E)" + }, + "Ⓕ": { + text: "(F)" + }, + "Ⓖ": { + text: "(G)" + }, + "Ⓗ": { + text: "(H)" + }, + "Ⓘ": { + text: "(I)" + }, + "Ⓙ": { + text: "(J)" + }, + "Ⓚ": { + text: "(K)" + }, + "Ⓛ": { + text: "(L)" + }, + "Ⓜ": { + text: "(M)" + }, + "Ⓝ": { + text: "(N)" + }, + "Ⓞ": { + text: "(O)" + }, + "Ⓟ": { + text: "(P)" + }, + "Ⓠ": { + text: "(Q)" + }, + "Ⓡ": { + text: "(R)" + }, + "Ⓢ": { + math: "\\circledS" + }, + "Ⓣ": { + text: "(T)" + }, + "Ⓤ": { + text: "(U)" + }, + "Ⓥ": { + text: "(V)" + }, + "Ⓦ": { + text: "(W)" + }, + "Ⓧ": { + text: "(X)" + }, + "Ⓨ": { + text: "(Y)" + }, + "Ⓩ": { + text: "(Z)" + }, + "ⓐ": { + text: "(a)" + }, + "ⓑ": { + text: "(b)" + }, + "ⓒ": { + text: "(c)" + }, + "ⓓ": { + text: "(d)" + }, + "ⓔ": { + text: "(e)" + }, + "ⓕ": { + text: "(f)" + }, + "ⓖ": { + text: "(g)" + }, + "ⓗ": { + text: "(h)" + }, + "ⓘ": { + text: "(i)" + }, + "ⓙ": { + text: "(j)" + }, + "ⓚ": { + text: "(k)" + }, + "ⓛ": { + text: "(l)" + }, + "ⓜ": { + text: "(m)" + }, + "ⓝ": { + text: "(n)" + }, + "ⓞ": { + text: "(o)" + }, + "ⓟ": { + text: "(p)" + }, + "ⓠ": { + text: "(q)" + }, + "ⓡ": { + text: "(r)" + }, + "ⓢ": { + text: "(s)" + }, + "ⓣ": { + text: "(t)" + }, + "ⓤ": { + text: "(u)" + }, + "ⓥ": { + text: "(v)" + }, + "ⓦ": { + text: "(w)" + }, + "ⓧ": { + text: "(x)" + }, + "ⓨ": { + text: "(y)" + }, + "ⓩ": { + text: "(z)" + }, + "⓪": { + text: "(0)" + }, + "─": { + text: "-" + }, + "━": { + text: "=" + }, + "│": { + text: "|" + }, + "┃": { + text: "|" + }, + "┄": { + text: "-" + }, + "┅": { + text: "=" + }, + "┆": { + math: "\\Elzdshfnc" + }, + "┇": { + text: "|" + }, + "┈": { + text: "-" + }, + "┉": { + text: "=" + }, + "┊": { + text: "|" + }, + "┋": { + text: "|" + }, + "┌": { + text: "+" + }, + "┍": { + text: "+" + }, + "┎": { + text: "+" + }, + "┏": { + text: "+" + }, + "┐": { + text: "+" + }, + "┑": { + text: "+" + }, + "┒": { + text: "+" + }, + "┓": { + text: "+" + }, + "└": { + text: "+" + }, + "┕": { + text: "+" + }, + "┖": { + text: "+" + }, + "┗": { + text: "+" + }, + "┘": { + text: "+" + }, + "┙": { + math: "\\Elzsqfnw" + }, + "┚": { + text: "+" + }, + "┛": { + text: "+" + }, + "├": { + text: "+" + }, + "┝": { + text: "+" + }, + "┞": { + text: "+" + }, + "┟": { + text: "+" + }, + "┠": { + text: "+" + }, + "┡": { + text: "+" + }, + "┢": { + text: "+" + }, + "┣": { + text: "+" + }, + "┤": { + text: "+" + }, + "┥": { + text: "+" + }, + "┦": { + text: "+" + }, + "┧": { + text: "+" + }, + "┨": { + text: "+" + }, + "┩": { + text: "+" + }, + "┪": { + text: "+" + }, + "┫": { + text: "+" + }, + "┬": { + text: "+" + }, + "┭": { + text: "+" + }, + "┮": { + text: "+" + }, + "┯": { + text: "+" + }, + "┰": { + text: "+" + }, + "┱": { + text: "+" + }, + "┲": { + text: "+" + }, + "┳": { + text: "+" + }, + "┴": { + text: "+" + }, + "┵": { + text: "+" + }, + "┶": { + text: "+" + }, + "┷": { + text: "+" + }, + "┸": { + text: "+" + }, + "┹": { + text: "+" + }, + "┺": { + text: "+" + }, + "┻": { + text: "+" + }, + "┼": { + text: "+" + }, + "┽": { + text: "+" + }, + "┾": { + text: "+" + }, + "┿": { + text: "+" + }, + "╀": { + text: "+" + }, + "╁": { + text: "+" + }, + "╂": { + text: "+" + }, + "╃": { + text: "+" + }, + "╄": { + text: "+" + }, + "╅": { + text: "+" + }, + "╆": { + text: "+" + }, + "╇": { + text: "+" + }, + "╈": { + text: "+" + }, + "╉": { + text: "+" + }, + "╊": { + text: "+" + }, + "╋": { + text: "+" + }, + "╌": { + text: "-" + }, + "╍": { + text: "=" + }, + "╎": { + text: "|" + }, + "╏": { + text: "|" + }, + "═": { + text: "=" + }, + "║": { + text: "|" + }, + "╒": { + text: "+" + }, + "╓": { + text: "+" + }, + "╔": { + text: "+" + }, + "╕": { + text: "+" + }, + "╖": { + text: "+" + }, + "╗": { + text: "+" + }, + "╘": { + text: "+" + }, + "╙": { + text: "+" + }, + "╚": { + text: "+" + }, + "╛": { + text: "+" + }, + "╜": { + text: "+" + }, + "╝": { + text: "+" + }, + "╞": { + text: "+" + }, + "╟": { + text: "+" + }, + "╠": { + text: "+" + }, + "╡": { + text: "+" + }, + "╢": { + text: "+" + }, + "╣": { + text: "+" + }, + "╤": { + text: "+" + }, + "╥": { + text: "+" + }, + "╦": { + text: "+" + }, + "╧": { + text: "+" + }, + "╨": { + text: "+" + }, + "╩": { + text: "+" + }, + "╪": { + text: "+" + }, + "╫": { + text: "+" + }, + "╬": { + text: "+" + }, + "╭": { + text: "+" + }, + "╮": { + text: "+" + }, + "╯": { + text: "+" + }, + "╰": { + text: "+" + }, + "╱": { + math: "\\diagup" + }, + "╲": { + text: "\\" + }, + "╳": { + text: "X" + }, + "╼": { + text: "-" + }, + "╽": { + text: "|" + }, + "╾": { + text: "-" + }, + "╿": { + text: "|" + }, + "▀": { + math: "\\blockuphalf" + }, + "▄": { + math: "\\blocklowhalf" + }, + "█": { + math: "\\blockfull" + }, + "▌": { + math: "\\blocklefthalf" + }, + "▐": { + math: "\\blockrighthalf" + }, + "░": { + math: "\\blockqtrshaded" + }, + "▒": { + math: "\\blockhalfshaded" + }, + "▓": { + math: "\\blockthreeqtrshaded" + }, + "■": { + math: "\\mdlgblksquare", + text: "\\ding{110}" + }, + "□": { + math: "\\square" + }, + "▢": { + math: "\\squoval" + }, + "▣": { + math: "\\blackinwhitesquare" + }, + "▤": { + math: "\\squarehfill" + }, + "▥": { + math: "\\squarevfill" + }, + "▦": { + math: "\\squarehvfill" + }, + "▧": { + math: "\\squarenwsefill" + }, + "▨": { + math: "\\squareneswfill" + }, + "▩": { + math: "\\squarecrossfill" + }, + "▪": { + math: "\\blacksquare" + }, + "▫": { + math: "\\smwhtsquare" + }, + "▬": { + math: "\\hrectangleblack" + }, + "▭": { + math: "\\fbox{~~}" + }, + "▮": { + math: "\\vrectangleblack" + }, + "▯": { + math: "\\Elzvrecto" + }, + "▰": { + math: "\\parallelogramblack" + }, + "▲": { + math: "\\bigblacktriangleup", + text: "\\ding{115}" + }, + "△": { + math: "\\bigtriangleup" + }, + "▴": { + math: "\\blacktriangle" + }, + "▵": { + math: "\\vartriangle" + }, + "▶": { + math: "\\RHD" + }, + "▷": { + math: "\\rhd" + }, + "▸": { + math: "\\blacktriangleright" + }, + "▹": { + math: "\\triangleright" + }, + "►": { + math: "\\blackpointerright" + }, + "▻": { + math: "\\whitepointerright" + }, + "▼": { + math: "\\bigblacktriangledown", + text: "\\ding{116}" + }, + "▽": { + math: "\\bigtriangledown" + }, + "▾": { + math: "\\blacktriangledown" + }, + "▿": { + math: "\\triangledown" + }, + "◀": { + math: "\\LHD" + }, + "◁": { + math: "\\lhd" + }, + "◂": { + math: "\\blacktriangleleft" + }, + "◃": { + math: "\\triangleleft" + }, + "◄": { + math: "\\blackpointerleft" + }, + "◅": { + math: "\\whitepointerleft" + }, + "◆": { + math: "\\Diamondblack", + text: "\\ding{117}" + }, + "◇": { + math: "\\Diamond" + }, + "◈": { + math: "\\blackinwhitediamond" + }, + "◉": { + math: "\\fisheye" + }, + "◊": { + math: "\\lozenge" + }, + "○": { + math: "\\bigcirc" + }, + "◌": { + math: "\\dottedcircle" + }, + "◍": { + math: "\\circlevertfill" + }, + "◎": { + math: "\\bullseye" + }, + "●": { + math: "\\CIRCLE", + text: "\\ding{108}" + }, + "◐": { + math: "\\Elzcirfl" + }, + "◑": { + math: "\\Elzcirfr" + }, + "◒": { + math: "\\Elzcirfb" + }, + "◓": { + math: "\\circletophalfblack" + }, + "◔": { + math: "\\circleurquadblack" + }, + "◕": { + math: "\\blackcircleulquadwhite" + }, + "◖": { + math: "\\LEFTCIRCLE" + }, + "◗": { + math: "\\RIGHTCIRCLE", + text: "\\ding{119}" + }, + "◘": { + math: "\\Elzrvbull" + }, + "◙": { + math: "\\inversewhitecircle" + }, + "◚": { + math: "\\invwhiteupperhalfcircle" + }, + "◛": { + math: "\\invwhitelowerhalfcircle" + }, + "◜": { + math: "\\ularc" + }, + "◝": { + math: "\\urarc" + }, + "◞": { + math: "\\lrarc" + }, + "◟": { + math: "\\llarc" + }, + "◠": { + math: "\\topsemicircle" + }, + "◡": { + math: "\\botsemicircle" + }, + "◢": { + math: "\\lrblacktriangle" + }, + "◣": { + math: "\\llblacktriangle" + }, + "◤": { + math: "\\ulblacktriangle" + }, + "◥": { + math: "\\urblacktriangle" + }, + "◦": { + math: "\\smwhtcircle" + }, + "◧": { + math: "\\Elzsqfl" + }, + "◨": { + math: "\\Elzsqfr" + }, + "◩": { + math: "\\squareulblack" + }, + "◪": { + math: "\\Elzsqfse" + }, + "◫": { + math: "\\boxbar" + }, + "◬": { + math: "\\trianglecdot" + }, + "◭": { + math: "\\triangleleftblack" + }, + "◮": { + math: "\\trianglerightblack" + }, + "◯": { + math: "\\bigcirc" + }, + "◰": { + math: "\\squareulquad" + }, + "◱": { + math: "\\squarellquad" + }, + "◲": { + math: "\\squarelrquad" + }, + "◳": { + math: "\\squareurquad" + }, + "◴": { + math: "\\circleulquad" + }, + "◵": { + math: "\\circlellquad" + }, + "◶": { + math: "\\circlelrquad" + }, + "◷": { + math: "\\circleurquad" + }, + "◸": { + math: "\\ultriangle" + }, + "◹": { + math: "\\urtriangle" + }, + "◺": { + math: "\\lltriangle" + }, + "◻": { + math: "\\square" + }, + "◼": { + math: "\\blacksquare" + }, + "◽": { + math: "\\mdsmwhtsquare" + }, + "◾": { + math: "\\mdsmblksquare" + }, + "◿": { + math: "\\lrtriangle" + }, + "★": { + math: "\\bigstar", + text: "\\ding{72}" + }, + "☆": { + math: "\\bigwhitestar", + text: "\\ding{73}" + }, + "☉": { + math: "\\Sun" + }, + "☎": { + text: "\\ding{37}" + }, + "☐": { + math: "\\Square" + }, + "☑": { + math: "\\CheckedBox" + }, + "☒": { + math: "\\XBox" + }, + "☓": { + text: "X" + }, + "☕": { + math: "\\steaming" + }, + "☛": { + text: "\\ding{42}" + }, + "☞": { + math: "\\pointright", + text: "\\ding{43}" + }, + "☠": { + math: "\\skull" + }, + "☡": { + math: "\\danger" + }, + "☢": { + math: "\\radiation" + }, + "☣": { + math: "\\biohazard" + }, + "☯": { + math: "\\yinyang" + }, + "☹": { + math: "\\frownie" + }, + "☺": { + math: "\\smiley" + }, + "☻": { + math: "\\blacksmiley" + }, + "☼": { + math: "\\sun" + }, + "☽": { + text: "\\rightmoon", + commandspacer: true, + textpackages: [ + "wasysym" + ] + }, + "☾": { + text: "\\leftmoon", + commandspacer: true, + textpackages: [ + "wasysym" + ] + }, + "☿": { + math: "\\mercury", + text: "\\mercury", + commandspacer: true + }, + "♀": { + math: "\\female", + text: "\\venus", + commandspacer: true + }, + "♁": { + math: "\\earth" + }, + "♂": { + math: "\\male", + text: "\\male", + commandspacer: true + }, + "♃": { + math: "\\jupiter", + text: "\\jupiter", + commandspacer: true + }, + "♄": { + math: "\\saturn", + text: "\\saturn", + commandspacer: true + }, + "♅": { + math: "\\uranus", + text: "\\uranus", + commandspacer: true + }, + "♆": { + math: "\\neptune", + text: "\\neptune", + commandspacer: true + }, + "♇": { + math: "\\pluto", + text: "\\pluto", + commandspacer: true + }, + "♈": { + math: "\\aries", + text: "\\aries", + commandspacer: true + }, + "♉": { + math: "\\taurus", + text: "\\taurus", + commandspacer: true + }, + "♊": { + math: "\\gemini", + text: "\\gemini", + commandspacer: true + }, + "♋": { + math: "\\cancer", + text: "\\cancer", + commandspacer: true + }, + "♌": { + math: "\\leo", + text: "\\leo", + commandspacer: true + }, + "♍": { + math: "\\virgo", + text: "\\virgo", + commandspacer: true + }, + "♎": { + math: "\\libra", + text: "\\libra", + commandspacer: true + }, + "♏": { + math: "\\scorpio", + text: "\\scorpio", + commandspacer: true + }, + "♐": { + math: "\\sagittarius", + text: "\\sagittarius", + commandspacer: true + }, + "♑": { + math: "\\capricornus", + text: "\\capricornus", + commandspacer: true + }, + "♒": { + math: "\\aquarius", + text: "\\aquarius", + commandspacer: true + }, + "♓": { + math: "\\pisces", + text: "\\pisces", + commandspacer: true + }, + "♠": { + math: "\\spadesuit", + text: "\\ding{171}" + }, + "♡": { + math: "\\heartsuit" + }, + "♢": { + math: "\\diamond" + }, + "♣": { + math: "\\clubsuit", + text: "\\ding{168}" + }, + "♤": { + math: "\\varspadesuit" + }, + "♥": { + math: "\\varheartsuit", + text: "\\ding{170}" + }, + "♦": { + math: "\\vardiamondsuit", + text: "\\ding{169}" + }, + "♧": { + math: "\\varclubsuit" + }, + "♩": { + math: "\\quarternote", + text: "\\quarternote", + commandspacer: true + }, + "♪": { + math: "\\eighthnote", + text: "\\eighthnote", + commandspacer: true + }, + "♫": { + math: "\\twonotes" + }, + "♬": { + math: "\\sixteenthnote" + }, + "♭": { + math: "\\flat" + }, + "♮": { + math: "\\natural" + }, + "♯": { + math: "\\sharp" + }, + "♻": { + math: "\\recycle" + }, + "♾": { + math: "\\acidfree" + }, + "⚀": { + math: "\\dicei" + }, + "⚁": { + math: "\\diceii" + }, + "⚂": { + math: "\\diceiii" + }, + "⚃": { + math: "\\diceiv" + }, + "⚄": { + math: "\\dicev" + }, + "⚅": { + math: "\\dicevi" + }, + "⚆": { + math: "\\circledrightdot" + }, + "⚇": { + math: "\\circledtwodots" + }, + "⚈": { + math: "\\blackcircledrightdot" + }, + "⚉": { + math: "\\blackcircledtwodots" + }, + "⚓": { + math: "\\anchor" + }, + "⚔": { + math: "\\swords" + }, + "⚠": { + math: "\\warning" + }, + "⚥": { + math: "\\Hermaphrodite" + }, + "⚪": { + math: "\\medcirc" + }, + "⚫": { + math: "\\medbullet" + }, + "⚬": { + math: "\\mdsmwhtcircle" + }, + "⚲": { + math: "\\neuter" + }, + "✁": { + text: "\\ding{33}" + }, + "✂": { + text: "\\ding{34}" + }, + "✃": { + text: "\\ding{35}" + }, + "✄": { + text: "\\ding{36}" + }, + "✆": { + text: "\\ding{38}" + }, + "✇": { + text: "\\ding{39}" + }, + "✈": { + text: "\\ding{40}" + }, + "✉": { + text: "\\ding{41}" + }, + "✌": { + text: "\\ding{44}" + }, + "✍": { + text: "\\ding{45}" + }, + "✎": { + math: "\\pencil", + text: "\\ding{46}" + }, + "✏": { + text: "\\ding{47}" + }, + "✐": { + text: "\\ding{48}" + }, + "✑": { + text: "\\ding{49}" + }, + "✒": { + text: "\\ding{50}" + }, + "✓": { + math: "\\checkmark", + text: "\\ding{51}" + }, + "✔": { + text: "\\ding{52}" + }, + "✕": { + text: "\\ding{53}" + }, + "✖": { + text: "\\ding{54}" + }, + "✗": { + math: "\\ballotx", + text: "\\ding{55}" + }, + "✘": { + text: "\\ding{56}" + }, + "✙": { + text: "\\ding{57}" + }, + "✚": { + text: "\\ding{58}" + }, + "✛": { + text: "\\ding{59}" + }, + "✜": { + text: "\\ding{60}" + }, + "✝": { + text: "\\ding{61}" + }, + "✞": { + text: "\\ding{62}" + }, + "✟": { + text: "\\ding{63}" + }, + "✠": { + math: "\\maltese", + text: "\\ding{64}" + }, + "✡": { + text: "\\ding{65}" + }, + "✢": { + text: "\\ding{66}" + }, + "✣": { + text: "\\ding{67}" + }, + "✤": { + text: "\\ding{68}" + }, + "✥": { + text: "\\ding{69}" + }, + "✦": { + text: "\\ding{70}" + }, + "✧": { + text: "\\ding{71}" + }, + "✩": { + text: "\\ding{73}" + }, + "✪": { + math: "\\circledstar", + text: "\\ding{74}" + }, + "✫": { + text: "\\ding{75}" + }, + "✬": { + text: "\\ding{76}" + }, + "✭": { + text: "\\ding{77}" + }, + "✮": { + text: "\\ding{78}" + }, + "✯": { + text: "\\ding{79}" + }, + "✰": { + text: "\\ding{80}" + }, + "✱": { + text: "\\ding{81}" + }, + "✲": { + text: "\\ding{82}" + }, + "✳": { + text: "\\ding{83}" + }, + "✴": { + text: "\\ding{84}" + }, + "✵": { + text: "\\ding{85}" + }, + "✶": { + math: "\\varstar", + text: "\\ding{86}" + }, + "✷": { + text: "\\ding{87}" + }, + "✸": { + text: "\\ding{88}" + }, + "✹": { + text: "\\ding{89}" + }, + "✺": { + text: "\\ding{90}" + }, + "✻": { + text: "\\ding{91}" + }, + "✼": { + text: "\\ding{92}" + }, + "✽": { + math: "\\dingasterisk", + text: "\\ding{93}" + }, + "✾": { + text: "\\ding{94}" + }, + "✿": { + text: "\\ding{95}" + }, + "❀": { + text: "\\ding{96}" + }, + "❁": { + text: "\\ding{97}" + }, + "❂": { + text: "\\ding{98}" + }, + "❃": { + text: "\\ding{99}" + }, + "❄": { + text: "\\ding{100}" + }, + "❅": { + text: "\\ding{101}" + }, + "❆": { + text: "\\ding{102}" + }, + "❇": { + text: "\\ding{103}" + }, + "❈": { + text: "\\ding{104}" + }, + "❉": { + text: "\\ding{105}" + }, + "❊": { + text: "\\ding{106}" + }, + "❋": { + text: "\\ding{107}" + }, + "❍": { + text: "\\ding{109}" + }, + "❏": { + text: "\\ding{111}" + }, + "❐": { + text: "\\ding{112}" + }, + "❑": { + text: "\\ding{113}" + }, + "❒": { + text: "\\ding{114}" + }, + "❖": { + text: "\\ding{118}" + }, + "❘": { + text: "\\ding{120}" + }, + "❙": { + text: "\\ding{121}" + }, + "❚": { + text: "\\ding{122}" + }, + "❛": { + text: "\\ding{123}" + }, + "❜": { + text: "\\ding{124}" + }, + "❝": { + text: "\\ding{125}" + }, + "❞": { + text: "\\ding{126}" + }, + "❡": { + text: "\\ding{161}" + }, + "❢": { + text: "\\ding{162}" + }, + "❣": { + text: "\\ding{163}" + }, + "❤": { + text: "\\ding{164}" + }, + "❥": { + text: "\\ding{165}" + }, + "❦": { + text: "\\ding{166}" + }, + "❧": { + text: "\\ding{167}" + }, + "❲": { + math: "\\lbrbrak" + }, + "❳": { + math: "\\rbrbrak" + }, + "❶": { + text: "\\ding{182}" + }, + "❷": { + text: "\\ding{183}" + }, + "❸": { + text: "\\ding{184}" + }, + "❹": { + text: "\\ding{185}" + }, + "❺": { + text: "\\ding{186}" + }, + "❻": { + text: "\\ding{187}" + }, + "❼": { + text: "\\ding{188}" + }, + "❽": { + text: "\\ding{189}" + }, + "❾": { + text: "\\ding{190}" + }, + "❿": { + text: "\\ding{191}" + }, + "➀": { + text: "\\ding{192}" + }, + "➁": { + text: "\\ding{193}" + }, + "➂": { + text: "\\ding{194}" + }, + "➃": { + text: "\\ding{195}" + }, + "➄": { + text: "\\ding{196}" + }, + "➅": { + text: "\\ding{197}" + }, + "➆": { + text: "\\ding{198}" + }, + "➇": { + text: "\\ding{199}" + }, + "➈": { + text: "\\ding{200}" + }, + "➉": { + text: "\\ding{201}" + }, + "➊": { + text: "\\ding{202}" + }, + "➋": { + text: "\\ding{203}" + }, + "➌": { + text: "\\ding{204}" + }, + "➍": { + text: "\\ding{205}" + }, + "➎": { + text: "\\ding{206}" + }, + "➏": { + text: "\\ding{207}" + }, + "➐": { + text: "\\ding{208}" + }, + "➑": { + text: "\\ding{209}" + }, + "➒": { + text: "\\ding{210}" + }, + "➓": { + text: "\\ding{211}" + }, + "➔": { + text: "\\ding{212}" + }, + "➘": { + text: "\\ding{216}" + }, + "➙": { + text: "\\ding{217}" + }, + "➚": { + text: "\\ding{218}" + }, + "➛": { + math: "\\draftingarrow", + text: "\\ding{219}" + }, + "➜": { + text: "\\ding{220}" + }, + "➝": { + text: "\\ding{221}" + }, + "➞": { + text: "\\ding{222}" + }, + "➟": { + text: "\\ding{223}" + }, + "➠": { + text: "\\ding{224}" + }, + "➡": { + text: "\\ding{225}" + }, + "➢": { + math: "\\arrowbullet", + text: "\\ding{226}" + }, + "➣": { + text: "\\ding{227}" + }, + "➤": { + text: "\\ding{228}" + }, + "➥": { + text: "\\ding{229}" + }, + "➦": { + text: "\\ding{230}" + }, + "➧": { + text: "\\ding{231}" + }, + "➨": { + text: "\\ding{232}" + }, + "➩": { + text: "\\ding{233}" + }, + "➪": { + text: "\\ding{234}" + }, + "➫": { + text: "\\ding{235}" + }, + "➬": { + text: "\\ding{236}" + }, + "➭": { + text: "\\ding{237}" + }, + "➮": { + text: "\\ding{238}" + }, + "➯": { + text: "\\ding{239}" + }, + "➱": { + text: "\\ding{241}" + }, + "➲": { + text: "\\ding{242}" + }, + "➳": { + text: "\\ding{243}" + }, + "➴": { + text: "\\ding{244}" + }, + "➵": { + text: "\\ding{245}" + }, + "➶": { + text: "\\ding{246}" + }, + "➷": { + text: "\\ding{247}" + }, + "➸": { + text: "\\ding{248}" + }, + "➹": { + text: "\\ding{249}" + }, + "➺": { + text: "\\ding{250}" + }, + "➻": { + text: "\\ding{251}" + }, + "➼": { + text: "\\ding{252}" + }, + "➽": { + text: "\\ding{253}" + }, + "➾": { + text: "\\ding{254}" + }, + "⟀": { + math: "\\threedangle" + }, + "⟁": { + math: "\\whiteinwhitetriangle" + }, + "⟂": { + math: "\\perp" + }, + "⟃": { + math: "\\subsetcirc" + }, + "⟄": { + math: "\\supsetcirc" + }, + "⟅": { + math: "\\Lbag" + }, + "⟆": { + math: "\\Rbag" + }, + "⟇": { + math: "\\veedot" + }, + "⟈": { + math: "\\bsolhsub" + }, + "⟉": { + math: "\\suphsol" + }, + "⟌": { + math: "\\longdivision" + }, + "⟐": { + math: "\\Diamonddot" + }, + "⟑": { + math: "\\wedgedot" + }, + "⟒": { + math: "\\upin" + }, + "⟓": { + math: "\\pullback" + }, + "⟔": { + math: "\\pushout" + }, + "⟕": { + math: "\\leftouterjoin" + }, + "⟖": { + math: "\\rightouterjoin" + }, + "⟗": { + math: "\\fullouterjoin" + }, + "⟘": { + math: "\\bigbot" + }, + "⟙": { + math: "\\bigtop" + }, + "⟚": { + math: "\\DashVDash" + }, + "⟛": { + math: "\\dashVdash" + }, + "⟜": { + math: "\\multimapinv" + }, + "⟝": { + math: "\\vlongdash" + }, + "⟞": { + math: "\\longdashv" + }, + "⟟": { + math: "\\cirbot" + }, + "⟠": { + math: "\\lozengeminus" + }, + "⟡": { + math: "\\concavediamond" + }, + "⟢": { + math: "\\concavediamondtickleft" + }, + "⟣": { + math: "\\concavediamondtickright" + }, + "⟤": { + math: "\\whitesquaretickleft" + }, + "⟥": { + math: "\\whitesquaretickright" + }, + "⟦": { + math: "\\llbracket" + }, + "⟧": { + math: "\\rrbracket" + }, + "⟨": { + math: "\\langle" + }, + "⟩": { + math: "\\rangle" + }, + "⟪": { + math: "\\lang" + }, + "⟫": { + math: "\\rang" + }, + "⟬": { + math: "\\Lbrbrak" + }, + "⟭": { + math: "\\Rbrbrak" + }, + "⟮": { + math: "\\lgroup" + }, + "⟯": { + math: "\\rgroup" + }, + "⟰": { + math: "\\UUparrow" + }, + "⟱": { + math: "\\DDownarrow" + }, + "⟲": { + math: "\\acwgapcirclearrow" + }, + "⟳": { + math: "\\cwgapcirclearrow" + }, + "⟴": { + math: "\\rightarrowonoplus" + }, + "⟵": { + math: "\\longleftarrow" + }, + "⟶": { + math: "\\longrightarrow" + }, + "⟷": { + math: "\\longleftrightarrow" + }, + "⟸": { + math: "\\Longleftarrow" + }, + "⟹": { + math: "\\Longrightarrow" + }, + "⟺": { + math: "\\Longleftrightarrow" + }, + "⟻": { + math: "\\longmapsfrom" + }, + "⟼": { + math: "\\longmapsto" + }, + "⟽": { + math: "\\Longmapsfrom" + }, + "⟾": { + math: "\\Longmapsto" + }, + "⟿": { + math: "\\sim\\joinrel\\leadsto" + }, + "⤀": { + math: "\\psur" + }, + "⤁": { + math: "\\nVtwoheadrightarrow" + }, + "⤂": { + math: "\\nvLeftarrow" + }, + "⤃": { + math: "\\nvRightarrow" + }, + "⤄": { + math: "\\nvLeftrightarrow" + }, + "⤆": { + math: "\\Mapsfrom" + }, + "⤇": { + math: "\\Mapsto" + }, + "⤈": { + math: "\\downarrowbarred" + }, + "⤉": { + math: "\\uparrowbarred" + }, + "⤊": { + math: "\\Uuparrow" + }, + "⤋": { + math: "\\Ddownarrow" + }, + "⤌": { + math: "\\leftbkarrow" + }, + "⤍": { + math: "\\rightbkarrow" + }, + "⤎": { + math: "\\leftdbkarrow" + }, + "⤏": { + math: "\\dbkarow" + }, + "⤐": { + math: "\\drbkarow" + }, + "⤑": { + math: "\\rightdotarrow" + }, + "⤒": { + math: "\\UpArrowBar" + }, + "⤓": { + math: "\\DownArrowBar" + }, + "⤔": { + math: "\\pinj" + }, + "⤕": { + math: "\\finj" + }, + "⤖": { + math: "\\bij" + }, + "⤗": { + math: "\\nvtwoheadrightarrowtail" + }, + "⤘": { + math: "\\nVtwoheadrightarrowtail" + }, + "⤙": { + math: "\\lefttail" + }, + "⤚": { + math: "\\righttail" + }, + "⤛": { + math: "\\leftdbltail" + }, + "⤜": { + math: "\\rightdbltail" + }, + "⤝": { + math: "\\diamondleftarrow" + }, + "⤞": { + math: "\\rightarrowdiamond" + }, + "⤟": { + math: "\\diamondleftarrowbar" + }, + "⤠": { + math: "\\barrightarrowdiamond" + }, + "⤡": { + math: "\\nwsearrow" + }, + "⤢": { + math: "\\neswarrow" + }, + "⤫": { + math: "\\rdiagovfdiag" + }, + "⤬": { + math: "\\fdiagovrdiag" + }, + "⤭": { + math: "\\seovnearrow" + }, + "⤮": { + math: "\\neovsearrow" + }, + "⤯": { + math: "\\fdiagovnearrow" + }, + "⤰": { + math: "\\rdiagovsearrow" + }, + "⤱": { + math: "\\neovnwarrow" + }, + "⤲": { + math: "\\nwovnearrow" + }, + "⤴": { + math: "\\uprightcurvearrow" + }, + "⤵": { + math: "\\downrightcurvedarrow" + }, + "⤸": { + math: "\\cwrightarcarrow" + }, + "⤹": { + math: "\\acwleftarcarrow" + }, + "⤺": { + math: "\\acwoverarcarrow" + }, + "⤻": { + math: "\\acwunderarcarrow" + }, + "⤼": { + math: "\\curvearrowrightminus" + }, + "⤽": { + math: "\\curvearrowleftplus" + }, + "⤾": { + math: "\\cwundercurvearrow" + }, + "⤿": { + math: "\\ccwundercurvearrow" + }, + "⥀": { + math: "\\Elolarr" + }, + "⥁": { + math: "\\Elorarr" + }, + "⥂": { + math: "\\ElzRlarr" + }, + "⥃": { + math: "\\leftarrowshortrightarrow" + }, + "⥄": { + math: "\\ElzrLarr" + }, + "⥅": { + math: "\\rightarrowplus" + }, + "⥆": { + math: "\\leftarrowplus" + }, + "⥇": { + math: "\\Elzrarrx" + }, + "⥈": { + math: "\\leftrightarrowcircle" + }, + "⥉": { + math: "\\twoheaduparrowcircle" + }, + "⥊": { + math: "\\leftrightharpoon" + }, + "⥋": { + math: "\\rightleftharpoon" + }, + "⥌": { + math: "\\updownharpoonrightleft" + }, + "⥍": { + math: "\\updownharpoonleftright" + }, + "⥎": { + math: "\\LeftRightVector" + }, + "⥏": { + math: "\\RightUpDownVector" + }, + "⥐": { + math: "\\DownLeftRightVector" + }, + "⥑": { + math: "\\LeftUpDownVector" + }, + "⥒": { + math: "\\LeftVectorBar" + }, + "⥓": { + math: "\\RightVectorBar" + }, + "⥔": { + math: "\\RightUpVectorBar" + }, + "⥕": { + math: "\\RightDownVectorBar" + }, + "⥖": { + math: "\\DownLeftVectorBar" + }, + "⥗": { + math: "\\DownRightVectorBar" + }, + "⥘": { + math: "\\LeftUpVectorBar" + }, + "⥙": { + math: "\\LeftDownVectorBar" + }, + "⥚": { + math: "\\LeftTeeVector" + }, + "⥛": { + math: "\\RightTeeVector" + }, + "⥜": { + math: "\\RightUpTeeVector" + }, + "⥝": { + math: "\\RightDownTeeVector" + }, + "⥞": { + math: "\\DownLeftTeeVector" + }, + "⥟": { + math: "\\DownRightTeeVector" + }, + "⥠": { + math: "\\LeftUpTeeVector" + }, + "⥡": { + math: "\\LeftDownTeeVector" + }, + "⥢": { + math: "\\leftleftharpoons" + }, + "⥣": { + math: "\\upupharpoons" + }, + "⥤": { + math: "\\rightrightharpoons" + }, + "⥥": { + math: "\\downdownharpoons" + }, + "⥦": { + math: "\\leftrightharpoonsup" + }, + "⥧": { + math: "\\leftrightharpoonsdown" + }, + "⥨": { + math: "\\rightleftharpoonsup" + }, + "⥩": { + math: "\\rightleftharpoonsdown" + }, + "⥪": { + math: "\\leftbarharpoon" + }, + "⥫": { + math: "\\barleftharpoon" + }, + "⥬": { + math: "\\rightbarharpoon" + }, + "⥭": { + math: "\\barrightharpoon" + }, + "⥮": { + math: "\\UpEquilibrium" + }, + "⥯": { + math: "\\ReverseUpEquilibrium" + }, + "⥰": { + math: "\\RoundImplies" + }, + "⥱": { + math: "\\equalrightarrow" + }, + "⥲": { + math: "\\similarrightarrow" + }, + "⥳": { + math: "\\leftarrowsimilar" + }, + "⥴": { + math: "\\rightarrowsimilar" + }, + "⥵": { + math: "\\rightarrowapprox" + }, + "⥶": { + math: "\\ltlarr" + }, + "⥷": { + math: "\\leftarrowless" + }, + "⥸": { + math: "\\gtrarr" + }, + "⥹": { + math: "\\subrarr" + }, + "⥺": { + math: "\\leftarrowsubset" + }, + "⥻": { + math: "\\suplarr" + }, + "⥾": { + math: "\\upfishtail" + }, + "⥿": { + math: "\\downfishtail" + }, + "⦀": { + math: "\\Elztfnc" + }, + "⦁": { + math: "\\spot" + }, + "⦂": { + math: "\\typecolon" + }, + "⦃": { + math: "\\lBrace" + }, + "⦄": { + math: "\\rBrace" + }, + "⦆": { + math: "\\Elroang" + }, + "⦇": { + math: "\\limg" + }, + "⦈": { + math: "\\rimg" + }, + "⦉": { + math: "\\lblot" + }, + "⦊": { + math: "\\rblot" + }, + "⦋": { + math: "\\lbrackubar" + }, + "⦌": { + math: "\\rbrackubar" + }, + "⦍": { + math: "\\lbrackultick" + }, + "⦎": { + math: "\\rbracklrtick" + }, + "⦏": { + math: "\\lbracklltick" + }, + "⦐": { + math: "\\rbrackurtick" + }, + "⦑": { + math: "\\langledot" + }, + "⦒": { + math: "\\rangledot" + }, + "⦓": { + math: "<\\kern-0.58em(" + }, + "⦕": { + math: "\\Lparengtr" + }, + "⦖": { + math: "\\Rparenless" + }, + "⦗": { + math: "\\lblkbrbrak" + }, + "⦘": { + math: "\\rblkbrbrak" + }, + "⦙": { + math: "\\Elzddfnc" + }, + "⦚": { + math: "\\vzigzag" + }, + "⦛": { + math: "\\measuredangleleft" + }, + "⦜": { + math: "\\Angle" + }, + "⦝": { + math: "\\rightanglemdot" + }, + "⦞": { + math: "\\angles" + }, + "⦟": { + math: "\\angdnr" + }, + "⦠": { + math: "\\Elzlpargt" + }, + "⦡": { + math: "\\sphericalangleup" + }, + "⦢": { + math: "\\turnangle" + }, + "⦣": { + math: "\\revangle" + }, + "⦤": { + math: "\\angleubar" + }, + "⦥": { + math: "\\revangleubar" + }, + "⦦": { + math: "\\wideangledown" + }, + "⦧": { + math: "\\wideangleup" + }, + "⦨": { + math: "\\measanglerutone" + }, + "⦩": { + math: "\\measanglelutonw" + }, + "⦪": { + math: "\\measanglerdtose" + }, + "⦫": { + math: "\\measangleldtosw" + }, + "⦬": { + math: "\\measangleurtone" + }, + "⦭": { + math: "\\measangleultonw" + }, + "⦮": { + math: "\\measangledrtose" + }, + "⦯": { + math: "\\measangledltosw" + }, + "⦰": { + math: "\\revemptyset" + }, + "⦱": { + math: "\\emptysetobar" + }, + "⦲": { + math: "\\emptysetocirc" + }, + "⦳": { + math: "\\emptysetoarr" + }, + "⦴": { + math: "\\emptysetoarrl" + }, + "⦷": { + math: "\\circledparallel" + }, + "⦸": { + math: "\\circledbslash" + }, + "⦹": { + math: "\\operp" + }, + "⦺": { + math: "\\obot" + }, + "⦻": { + math: "\\olcross" + }, + "⦼": { + math: "\\odotslashdot" + }, + "⦽": { + math: "\\uparrowoncircle" + }, + "⦾": { + math: "\\circledwhitebullet" + }, + "⦿": { + math: "\\circledbullet" + }, + "⧀": { + math: "\\circledless" + }, + "⧁": { + math: "\\circledgtr" + }, + "⧂": { + math: "\\cirscir" + }, + "⧃": { + math: "\\cirE" + }, + "⧄": { + math: "\\boxslash" + }, + "⧅": { + math: "\\boxbslash" + }, + "⧆": { + math: "\\boxast" + }, + "⧇": { + math: "\\boxcircle" + }, + "⧈": { + math: "\\boxbox" + }, + "⧉": { + math: "\\boxonbox" + }, + "⧊": { + math: "\\ElzLap" + }, + "⧋": { + math: "\\Elzdefas" + }, + "⧌": { + math: "\\triangles" + }, + "⧍": { + math: "\\triangleserifs" + }, + "⧎": { + math: "\\rtriltri" + }, + "⧏": { + math: "\\LeftTriangleBar" + }, + "⧏̸": { + math: "\\NotLeftTriangleBar" + }, + "⧐": { + math: "\\RightTriangleBar" + }, + "⧐̸": { + math: "\\NotRightTriangleBar" + }, + "⧑": { + math: "\\lfbowtie" + }, + "⧒": { + math: "\\rfbowtie" + }, + "⧓": { + math: "\\fbowtie" + }, + "⧔": { + math: "\\lftimes" + }, + "⧕": { + math: "\\rftimes" + }, + "⧖": { + math: "\\hourglass" + }, + "⧗": { + math: "\\blackhourglass" + }, + "⧘": { + math: "\\lvzigzag" + }, + "⧙": { + math: "\\rvzigzag" + }, + "⧚": { + math: "\\Lvzigzag" + }, + "⧛": { + math: "\\Rvzigzag" + }, + "⧝": { + math: "\\tieinfty" + }, + "⧞": { + math: "\\nvinfty" + }, + "⧟": { + math: "\\multimapboth" + }, + "⧠": { + math: "\\laplac" + }, + "⧡": { + math: "\\lrtriangleeq" + }, + "⧢": { + math: "\\shuffle" + }, + "⧣": { + math: "\\eparsl" + }, + "⧤": { + math: "\\smeparsl" + }, + "⧥": { + math: "\\eqvparsl" + }, + "⧦": { + math: "\\gleichstark" + }, + "⧧": { + math: "\\thermod" + }, + "⧨": { + math: "\\downtriangleleftblack" + }, + "⧩": { + math: "\\downtrianglerightblack" + }, + "⧪": { + math: "\\blackdiamonddownarrow" + }, + "⧫": { + math: "\\blacklozenge" + }, + "⧬": { + math: "\\circledownarrow" + }, + "⧭": { + math: "\\blackcircledownarrow" + }, + "⧮": { + math: "\\errbarsquare" + }, + "⧯": { + math: "\\errbarblacksquare" + }, + "⧰": { + math: "\\errbardiamond" + }, + "⧱": { + math: "\\errbarblackdiamond" + }, + "⧲": { + math: "\\errbarcircle" + }, + "⧳": { + math: "\\errbarblackcircle" + }, + "⧴": { + math: "\\RuleDelayed" + }, + "⧵": { + math: "\\setminus" + }, + "⧶": { + math: "\\dsol" + }, + "⧷": { + math: "\\rsolbar" + }, + "⧸": { + math: "\\xsol" + }, + "⧹": { + math: "\\zhide" + }, + "⧺": { + math: "\\doubleplus" + }, + "⧻": { + math: "\\tripleplus" + }, + "⧼": { + math: "\\lcurvyangle" + }, + "⧽": { + math: "\\rcurvyangle" + }, + "⧾": { + math: "\\tplus" + }, + "⧿": { + math: "\\tminus" + }, + "⨀": { + math: "\\bigodot" + }, + "⨁": { + math: "\\bigoplus" + }, + "⨂": { + math: "\\bigotimes" + }, + "⨃": { + math: "\\bigcupdot" + }, + "⨄": { + math: "\\Elxuplus" + }, + "⨅": { + math: "\\ElzThr" + }, + "⨆": { + math: "\\Elxsqcup" + }, + "⨇": { + math: "\\ElzInf" + }, + "⨈": { + math: "\\ElzSup" + }, + "⨉": { + math: "\\varprod" + }, + "⨊": { + math: "\\modtwosum" + }, + "⨋": { + math: "\\sumint" + }, + "⨌": { + math: "\\iiiint" + }, + "⨍": { + math: "\\ElzCint" + }, + "⨎": { + math: "\\intBar" + }, + "⨏": { + math: "\\clockoint" + }, + "⨑": { + math: "\\awint" + }, + "⨒": { + math: "\\rppolint" + }, + "⨓": { + math: "\\scpolint" + }, + "⨔": { + math: "\\npolint" + }, + "⨕": { + math: "\\pointint" + }, + "⨖": { + math: "\\sqrint" + }, + "⨗": { + math: "\\intlarhk" + }, + "⨘": { + math: "\\intx" + }, + "⨙": { + math: "\\intcap" + }, + "⨚": { + math: "\\intcup" + }, + "⨛": { + math: "\\upint" + }, + "⨜": { + math: "\\lowint" + }, + "⨝": { + math: "\\Join" + }, + "⨞": { + math: "\\bigtriangleleft" + }, + "⨟": { + math: "\\zcmp" + }, + "⨠": { + math: "\\zpipe" + }, + "⨡": { + math: "\\zproject" + }, + "⨢": { + math: "\\ringplus" + }, + "⨣": { + math: "\\plushat" + }, + "⨤": { + math: "\\simplus" + }, + "⨦": { + math: "\\plussim" + }, + "⨧": { + math: "\\plussubtwo" + }, + "⨨": { + math: "\\plustrif" + }, + "⨩": { + math: "\\commaminus" + }, + "⨫": { + math: "\\minusfdots" + }, + "⨬": { + math: "\\minusrdots" + }, + "⨯": { + math: "\\ElzTimes" + }, + "⨰": { + math: "\\dottimes" + }, + "⨱": { + math: "\\timesbar" + }, + "⨲": { + math: "\\btimes" + }, + "⨳": { + math: "\\smashtimes" + }, + "⨶": { + math: "\\otimeshat" + }, + "⨷": { + math: "\\Otimes" + }, + "⨸": { + math: "\\odiv" + }, + "⨹": { + math: "\\triangleplus" + }, + "⨺": { + math: "\\triangleminus" + }, + "⨻": { + math: "\\triangletimes" + }, + "⨽": { + math: "\\intprodr" + }, + "⨾": { + math: "\\fcmp" + }, + "⨿": { + math: "\\amalg" + }, + "⩀": { + math: "\\capdot" + }, + "⩁": { + math: "\\uminus" + }, + "⩂": { + math: "\\barcup" + }, + "⩃": { + math: "\\barcap" + }, + "⩄": { + math: "\\capwedge" + }, + "⩅": { + math: "\\cupvee" + }, + "⩆": { + math: "\\cupovercap" + }, + "⩇": { + math: "\\capovercup" + }, + "⩈": { + math: "\\cupbarcap" + }, + "⩉": { + math: "\\capbarcup" + }, + "⩊": { + math: "\\twocups" + }, + "⩋": { + math: "\\twocaps" + }, + "⩌": { + math: "\\closedvarcup" + }, + "⩍": { + math: "\\closedvarcap" + }, + "⩎": { + math: "\\Sqcap" + }, + "⩏": { + math: "\\Sqcup" + }, + "⩐": { + math: "\\closedvarcupsmashprod" + }, + "⩑": { + math: "\\wedgeodot" + }, + "⩒": { + math: "\\veeodot" + }, + "⩓": { + math: "\\ElzAnd" + }, + "⩔": { + math: "\\ElzOr" + }, + "⩖": { + math: "\\ElOr" + }, + "⩗": { + math: "\\bigslopedvee" + }, + "⩘": { + math: "\\bigslopedwedge" + }, + "⩙": { + math: "\\veeonwedge" + }, + "⩚": { + math: "\\wedgemidvert" + }, + "⩛": { + math: "\\veemidvert" + }, + "⩜": { + math: "\\midbarwedge" + }, + "⩝": { + math: "\\midbarvee" + }, + "⩞": { + math: "\\perspcorrespond" + }, + "⩟": { + math: "\\Elzminhat" + }, + "⩠": { + math: "\\wedgedoublebar" + }, + "⩡": { + math: "\\varveebar" + }, + "⩢": { + math: "\\doublebarvee" + }, + "⩤": { + math: "\\dsub" + }, + "⩥": { + math: "\\rsub" + }, + "⩦": { + math: "\\eqdot" + }, + "⩧": { + math: "\\dotequiv" + }, + "⩨": { + math: "\\equivVert" + }, + "⩩": { + math: "\\equivVvert" + }, + "⩪": { + math: "\\dotsim" + }, + "⩫": { + math: "\\simrdots" + }, + "⩬": { + math: "\\simminussim" + }, + "⩭": { + math: "\\congdot" + }, + "⩮": { + math: "\\stackrel{*}{=}" + }, + "⩯": { + math: "\\hatapprox" + }, + "⩰": { + math: "\\approxeqq" + }, + "⩱": { + math: "\\eqqplus" + }, + "⩲": { + math: "\\pluseqq" + }, + "⩳": { + math: "\\eqqsim" + }, + "⩴": { + math: "\\Coloneqq" + }, + "⩵": { + math: "\\Equal" + }, + "⩶": { + math: "\\Same" + }, + "⩷": { + math: "\\ddotseq" + }, + "⩸": { + math: "\\equivDD" + }, + "⩹": { + math: "\\ltcir" + }, + "⩺": { + math: "\\gtcir" + }, + "⩻": { + math: "\\ltquest" + }, + "⩼": { + math: "\\gtquest" + }, + "⩽": { + math: "\\leqslant", + mathpackages: [ + "amssymb" + ] + }, + "⩽̸": { + math: "\\nleqslant", + mathpackages: [ + "amssymb" + ] + }, + "⩾": { + math: "\\geqslant", + mathpackages: [ + "amssymb" + ] + }, + "⩾̸": { + math: "\\ngeqslant", + mathpackages: [ + "amssymb" + ] + }, + "⩿": { + math: "\\lesdot" + }, + "⪀": { + math: "\\gesdot" + }, + "⪁": { + math: "\\lesdoto" + }, + "⪂": { + math: "\\gesdoto" + }, + "⪃": { + math: "\\lesdotor" + }, + "⪄": { + math: "\\gesdotol" + }, + "⪅": { + math: "\\lessapprox" + }, + "⪆": { + math: "\\gtrapprox" + }, + "⪇": { + math: "\\lneq" + }, + "⪈": { + math: "\\gneq" + }, + "⪉": { + math: "\\lnapprox" + }, + "⪊": { + math: "\\gnapprox" + }, + "⪋": { + math: "\\lesseqqgtr" + }, + "⪌": { + math: "\\gtreqqless" + }, + "⪍": { + math: "\\lsime" + }, + "⪎": { + math: "\\gsime" + }, + "⪏": { + math: "\\lsimg" + }, + "⪐": { + math: "\\gsiml" + }, + "⪑": { + math: "\\lgE" + }, + "⪒": { + math: "\\glE" + }, + "⪓": { + math: "\\lesges" + }, + "⪔": { + math: "\\gesles" + }, + "⪕": { + math: "\\eqslantless" + }, + "⪖": { + math: "\\eqslantgtr" + }, + "⪗": { + math: "\\elsdot" + }, + "⪘": { + math: "\\egsdot" + }, + "⪙": { + math: "\\eqqless" + }, + "⪚": { + math: "\\eqqgtr" + }, + "⪛": { + math: "\\eqqslantless" + }, + "⪜": { + math: "\\eqqslantgtr" + }, + "⪝": { + math: "\\Pisymbol{ppi020}{117}" + }, + "⪞": { + math: "\\Pisymbol{ppi020}{105}" + }, + "⪟": { + math: "\\simlE" + }, + "⪠": { + math: "\\simgE" + }, + "⪡": { + math: "\\NestedLessLess" + }, + "⪡̸": { + math: "\\NotNestedLessLess" + }, + "⪢": { + math: "\\NestedGreaterGreater" + }, + "⪢̸": { + math: "\\NotNestedGreaterGreater" + }, + "⪣": { + math: "\\partialmeetcontraction" + }, + "⪤": { + math: "\\glj" + }, + "⪥": { + math: "\\gla" + }, + "⪦": { + math: "\\leftslice" + }, + "⪧": { + math: "\\rightslice" + }, + "⪨": { + math: "\\lescc" + }, + "⪩": { + math: "\\gescc" + }, + "⪪": { + math: "\\smt" + }, + "⪫": { + math: "\\lat" + }, + "⪬": { + math: "\\smte" + }, + "⪭": { + math: "\\late" + }, + "⪮": { + math: "\\bumpeqq" + }, + "⪯": { + math: "\\preceq" + }, + "⪯̸": { + math: "\\not\\preceq" + }, + "⪰": { + math: "\\succeq" + }, + "⪰̸": { + math: "\\not\\succeq" + }, + "⪱": { + math: "\\precneq" + }, + "⪲": { + math: "\\succneq" + }, + "⪳": { + math: "\\preceqq" + }, + "⪴": { + math: "\\succeqq" + }, + "⪵": { + math: "\\precneqq" + }, + "⪶": { + math: "\\succneqq" + }, + "⪷": { + math: "\\precapprox" + }, + "⪸": { + math: "\\succapprox" + }, + "⪹": { + math: "\\precnapprox" + }, + "⪺": { + math: "\\succnapprox" + }, + "⪻": { + math: "\\llcurly" + }, + "⪼": { + math: "\\ggcurly" + }, + "⪽": { + math: "\\subsetdot" + }, + "⪾": { + math: "\\supsetdot" + }, + "⪿": { + math: "\\subsetplus" + }, + "⫀": { + math: "\\supsetplus" + }, + "⫁": { + math: "\\submult" + }, + "⫂": { + math: "\\supmult" + }, + "⫃": { + math: "\\subedot" + }, + "⫄": { + math: "\\supedot" + }, + "⫅": { + math: "\\subseteqq" + }, + "⫅̸": { + math: "\\nsubseteqq" + }, + "⫆": { + math: "\\supseteqq" + }, + "⫆̸": { + math: "\\nsupseteqq" + }, + "⫇": { + math: "\\subsim" + }, + "⫈": { + math: "\\supsim" + }, + "⫉": { + math: "\\subsetapprox" + }, + "⫊": { + math: "\\supsetapprox" + }, + "⫋": { + math: "\\subsetneqq" + }, + "⫌": { + math: "\\supsetneqq" + }, + "⫍": { + math: "\\lsqhook" + }, + "⫎": { + math: "\\rsqhook" + }, + "⫏": { + math: "\\csub" + }, + "⫐": { + math: "\\csup" + }, + "⫑": { + math: "\\csube" + }, + "⫒": { + math: "\\csupe" + }, + "⫓": { + math: "\\subsup" + }, + "⫔": { + math: "\\supsub" + }, + "⫕": { + math: "\\subsub" + }, + "⫖": { + math: "\\supsup" + }, + "⫗": { + math: "\\suphsub" + }, + "⫘": { + math: "\\supdsub" + }, + "⫙": { + math: "\\forkv" + }, + "⫚": { + math: "\\topfork" + }, + "⫛": { + math: "\\mlcp" + }, + "⫝̸": { + math: "\\forks" + }, + "⫝": { + math: "\\forksnot" + }, + "⫝̸": { + math: "\\forks" + }, + "⫞": { + math: "\\shortlefttack" + }, + "⫟": { + math: "\\shortdowntack" + }, + "⫠": { + math: "\\shortuptack" + }, + "⫡": { + math: "\\perps" + }, + "⫢": { + math: "\\vDdash" + }, + "⫣": { + math: "\\dashV" + }, + "⫤": { + math: "\\Dashv" + }, + "⫥": { + math: "\\DashV" + }, + "⫦": { + math: "\\varVdash" + }, + "⫧": { + math: "\\Barv" + }, + "⫨": { + math: "\\vBar" + }, + "⫩": { + math: "\\vBarv" + }, + "⫪": { + math: "\\Top" + }, + "⫬": { + math: "\\Not" + }, + "⫭": { + math: "\\bNot" + }, + "⫮": { + math: "\\revnmid" + }, + "⫯": { + math: "\\cirmid" + }, + "⫰": { + math: "\\midcir" + }, + "⫱": { + math: "\\topcir" + }, + "⫲": { + math: "\\nhpar" + }, + "⫳": { + math: "\\parsim" + }, + "⫴": { + math: "\\interleave" + }, + "⫵": { + math: "\\nhVvert" + }, + "⫶": { + math: "\\Elztdcol" + }, + "⫷": { + math: "\\lllnest" + }, + "⫸": { + math: "\\gggnest" + }, + "⫹": { + math: "\\leqqslant" + }, + "⫺": { + math: "\\geqqslant" + }, + "⫻": { + math: "\\trslash" + }, + "⫼": { + math: "\\biginterleave" + }, + "⫽": { + math: "{{/}\\!\\!{/}}" + }, + "⫽⃥": { + math: "{\\rlap{\\textbackslash}{{/}\\!\\!{/}}}" + }, + "⫾": { + math: "\\talloblong" + }, + "⫿": { + math: "\\bigtalloblong" + }, + "⬒": { + math: "\\squaretopblack" + }, + "⬓": { + math: "\\squarebotblack" + }, + "⬔": { + math: "\\squareurblack" + }, + "⬕": { + math: "\\squarellblack" + }, + "⬖": { + math: "\\diamondleftblack" + }, + "⬗": { + math: "\\diamondrightblack" + }, + "⬘": { + math: "\\diamondtopblack" + }, + "⬙": { + math: "\\diamondbotblack" + }, + "⬚": { + math: "\\dottedsquare" + }, + "⬛": { + math: "\\blacksquare" + }, + "⬜": { + math: "\\square" + }, + "⬝": { + math: "\\vysmblksquare" + }, + "⬞": { + math: "\\vysmwhtsquare" + }, + "⬟": { + math: "\\pentagonblack" + }, + "⬠": { + math: "\\pentagon" + }, + "⬡": { + math: "\\varhexagon" + }, + "⬢": { + math: "\\varhexagonblack" + }, + "⬣": { + math: "\\hexagonblack" + }, + "⬤": { + math: "\\lgblkcircle" + }, + "⬥": { + math: "\\mdblkdiamond" + }, + "⬦": { + math: "\\mdwhtdiamond" + }, + "⬧": { + math: "\\mdblklozenge" + }, + "⬨": { + math: "\\mdwhtlozenge" + }, + "⬩": { + math: "\\smblkdiamond" + }, + "⬪": { + math: "\\smblklozenge" + }, + "⬫": { + math: "\\smwhtlozenge" + }, + "⬬": { + math: "\\blkhorzoval" + }, + "⬭": { + math: "\\whthorzoval" + }, + "⬮": { + math: "\\blkvertoval" + }, + "⬯": { + math: "\\whtvertoval" + }, + "⬰": { + math: "\\circleonleftarrow" + }, + "⬱": { + math: "\\leftthreearrows" + }, + "⬲": { + math: "\\leftarrowonoplus" + }, + "⬳": { + math: "\\longleftsquigarrow" + }, + "⬴": { + math: "\\nvtwoheadleftarrow" + }, + "⬵": { + math: "\\nVtwoheadleftarrow" + }, + "⬶": { + math: "\\twoheadmapsfrom" + }, + "⬷": { + math: "\\twoheadleftdbkarrow" + }, + "⬸": { + math: "\\leftdotarrow" + }, + "⬹": { + math: "\\nvleftarrowtail" + }, + "⬺": { + math: "\\nVleftarrowtail" + }, + "⬻": { + math: "\\twoheadleftarrowtail" + }, + "⬼": { + math: "\\nvtwoheadleftarrowtail" + }, + "⬽": { + math: "\\nVtwoheadleftarrowtail" + }, + "⬾": { + math: "\\leftarrowx" + }, + "⬿": { + math: "\\leftcurvedarrow" + }, + "⭀": { + math: "\\equalleftarrow" + }, + "⭁": { + math: "\\bsimilarleftarrow" + }, + "⭂": { + math: "\\leftarrowbackapprox" + }, + "⭃": { + math: "\\rightarrowgtr" + }, + "⭄": { + math: "\\rightarrowsupset" + }, + "⭅": { + math: "\\LLeftarrow" + }, + "⭆": { + math: "\\RRightarrow" + }, + "⭇": { + math: "\\bsimilarrightarrow" + }, + "⭈": { + math: "\\rightarrowbackapprox" + }, + "⭉": { + math: "\\similarleftarrow" + }, + "⭊": { + math: "\\leftarrowapprox" + }, + "⭋": { + math: "\\leftarrowbsimilar" + }, + "⭌": { + math: "\\rightarrowbsimilar" + }, + "⭐": { + math: "\\medwhitestar" + }, + "⭑": { + math: "\\medblackstar" + }, + "⭒": { + math: "\\smwhitestar" + }, + "⭓": { + math: "\\rightpentagonblack" + }, + "⭔": { + math: "\\rightpentagon" + }, + "〈": { + math: "\\langle" + }, + "〉": { + math: "\\rangle" + }, + "〒": { + math: "\\postalmark" + }, + "〔": { + math: "\\lbrbrak" + }, + "〕": { + math: "\\rbrbrak" + }, + "〚": { + math: "\\openbracketleft" + }, + "〛": { + math: "\\openbracketright" + }, + "〰": { + math: "\\hzigzag" + }, + "ff": { + text: "ff" + }, + "fi": { + text: "fi" + }, + "fl": { + text: "fl" + }, + "ffi": { + text: "ffi" + }, + "ffl": { + text: "ffl" + }, + "ſt": { + text: "st" + }, + "st": { + text: "st" + }, + "�": { + text: "\\dbend", + commandspacer: true + }, + "𝐀": { + math: "\\mathbf{A}" + }, + "𝐁": { + math: "\\mathbf{B}" + }, + "𝐂": { + math: "\\mathbf{C}" + }, + "𝐃": { + math: "\\mathbf{D}" + }, + "𝐄": { + math: "\\mathbf{E}" + }, + "𝐅": { + math: "\\mathbf{F}" + }, + "𝐆": { + math: "\\mathbf{G}" + }, + "𝐇": { + math: "\\mathbf{H}" + }, + "𝐈": { + math: "\\mathbf{I}" + }, + "𝐉": { + math: "\\mathbf{J}" + }, + "𝐊": { + math: "\\mathbf{K}" + }, + "𝐋": { + math: "\\mathbf{L}" + }, + "𝐌": { + math: "\\mathbf{M}" + }, + "𝐍": { + math: "\\mathbf{N}" + }, + "𝐎": { + math: "\\mathbf{O}" + }, + "𝐏": { + math: "\\mathbf{P}" + }, + "𝐐": { + math: "\\mathbf{Q}" + }, + "𝐑": { + math: "\\mathbf{R}" + }, + "𝐒": { + math: "\\mathbf{S}" + }, + "𝐓": { + math: "\\mathbf{T}" + }, + "𝐔": { + math: "\\mathbf{U}" + }, + "𝐕": { + math: "\\mathbf{V}" + }, + "𝐖": { + math: "\\mathbf{W}" + }, + "𝐗": { + math: "\\mathbf{X}" + }, + "𝐘": { + math: "\\mathbf{Y}" + }, + "𝐙": { + math: "\\mathbf{Z}" + }, + "𝐚": { + math: "\\mathbf{a}" + }, + "𝐛": { + math: "\\mathbf{b}" + }, + "𝐜": { + math: "\\mathbf{c}" + }, + "𝐝": { + math: "\\mathbf{d}" + }, + "𝐞": { + math: "\\mathbf{e}" + }, + "𝐟": { + math: "\\mathbf{f}" + }, + "𝐠": { + math: "\\mathbf{g}" + }, + "𝐡": { + math: "\\mathbf{h}" + }, + "𝐢": { + math: "\\mathbf{i}" + }, + "𝐣": { + math: "\\mathbf{j}" + }, + "𝐤": { + math: "\\mathbf{k}" + }, + "𝐥": { + math: "\\mathbf{l}" + }, + "𝐦": { + math: "\\mathbf{m}" + }, + "𝐧": { + math: "\\mathbf{n}" + }, + "𝐨": { + math: "\\mathbf{o}" + }, + "𝐩": { + math: "\\mathbf{p}" + }, + "𝐪": { + math: "\\mathbf{q}" + }, + "𝐫": { + math: "\\mathbf{r}" + }, + "𝐬": { + math: "\\mathbf{s}" + }, + "𝐭": { + math: "\\mathbf{t}" + }, + "𝐮": { + math: "\\mathbf{u}" + }, + "𝐯": { + math: "\\mathbf{v}" + }, + "𝐰": { + math: "\\mathbf{w}" + }, + "𝐱": { + math: "\\mathbf{x}" + }, + "𝐲": { + math: "\\mathbf{y}" + }, + "𝐳": { + math: "\\mathbf{z}" + }, + "𝐴": { + math: "\\mathsl{A}" + }, + "𝐵": { + math: "\\mathsl{B}" + }, + "𝐶": { + math: "\\mathsl{C}" + }, + "𝐷": { + math: "\\mathsl{D}" + }, + "𝐸": { + math: "\\mathsl{E}" + }, + "𝐹": { + math: "\\mathsl{F}" + }, + "𝐺": { + math: "\\mathsl{G}" + }, + "𝐻": { + math: "\\mathsl{H}" + }, + "𝐼": { + math: "\\mathsl{I}" + }, + "𝐽": { + math: "\\mathsl{J}" + }, + "𝐾": { + math: "\\mathsl{K}" + }, + "𝐿": { + math: "\\mathsl{L}" + }, + "𝑀": { + math: "\\mathsl{M}" + }, + "𝑁": { + math: "\\mathsl{N}" + }, + "𝑂": { + math: "\\mathsl{O}" + }, + "𝑃": { + math: "\\mathsl{P}" + }, + "𝑄": { + math: "\\mathsl{Q}" + }, + "𝑅": { + math: "\\mathsl{R}" + }, + "𝑆": { + math: "\\mathsl{S}" + }, + "𝑇": { + math: "\\mathsl{T}" + }, + "𝑈": { + math: "\\mathsl{U}" + }, + "𝑉": { + math: "\\mathsl{V}" + }, + "𝑊": { + math: "\\mathsl{W}" + }, + "𝑋": { + math: "\\mathsl{X}" + }, + "𝑌": { + math: "\\mathsl{Y}" + }, + "𝑍": { + math: "\\mathsl{Z}" + }, + "𝑎": { + math: "\\mathsl{a}" + }, + "𝑏": { + math: "\\mathsl{b}" + }, + "𝑐": { + math: "\\mathsl{c}" + }, + "𝑑": { + math: "\\mathsl{d}" + }, + "𝑒": { + math: "\\mathsl{e}" + }, + "𝑓": { + math: "\\mathsl{f}" + }, + "𝑔": { + math: "\\mathsl{g}" + }, + "𝑖": { + math: "\\mathsl{i}" + }, + "𝑗": { + math: "\\mathsl{j}" + }, + "𝑘": { + math: "\\mathsl{k}" + }, + "𝑙": { + math: "\\mathsl{l}" + }, + "𝑚": { + math: "\\mathsl{m}" + }, + "𝑛": { + math: "\\mathsl{n}" + }, + "𝑜": { + math: "\\mathsl{o}" + }, + "𝑝": { + math: "\\mathsl{p}" + }, + "𝑞": { + math: "\\mathsl{q}" + }, + "𝑟": { + math: "\\mathsl{r}" + }, + "𝑠": { + math: "\\mathsl{s}" + }, + "𝑡": { + math: "\\mathsl{t}" + }, + "𝑢": { + math: "\\mathsl{u}" + }, + "𝑣": { + math: "\\mathsl{v}" + }, + "𝑤": { + math: "\\mathsl{w}" + }, + "𝑥": { + math: "\\mathsl{x}" + }, + "𝑦": { + math: "\\mathsl{y}" + }, + "𝑧": { + math: "\\mathsl{z}" + }, + "𝑨": { + math: "\\mathbit{A}" + }, + "𝑩": { + math: "\\mathbit{B}" + }, + "𝑪": { + math: "\\mathbit{C}" + }, + "𝑫": { + math: "\\mathbit{D}" + }, + "𝑬": { + math: "\\mathbit{E}" + }, + "𝑭": { + math: "\\mathbit{F}" + }, + "𝑮": { + math: "\\mathbit{G}" + }, + "𝑯": { + math: "\\mathbit{H}" + }, + "𝑰": { + math: "\\mathbit{I}" + }, + "𝑱": { + math: "\\mathbit{J}" + }, + "𝑲": { + math: "\\mathbit{K}" + }, + "𝑳": { + math: "\\mathbit{L}" + }, + "𝑴": { + math: "\\mathbit{M}" + }, + "𝑵": { + math: "\\mathbit{N}" + }, + "𝑶": { + math: "\\mathbit{O}" + }, + "𝑷": { + math: "\\mathbit{P}" + }, + "𝑸": { + math: "\\mathbit{Q}" + }, + "𝑹": { + math: "\\mathbit{R}" + }, + "𝑺": { + math: "\\mathbit{S}" + }, + "𝑻": { + math: "\\mathbit{T}" + }, + "𝑼": { + math: "\\mathbit{U}" + }, + "𝑽": { + math: "\\mathbit{V}" + }, + "𝑾": { + math: "\\mathbit{W}" + }, + "𝑿": { + math: "\\mathbit{X}" + }, + "𝒀": { + math: "\\mathbit{Y}" + }, + "𝒁": { + math: "\\mathbit{Z}" + }, + "𝒂": { + math: "\\mathbit{a}" + }, + "𝒃": { + math: "\\mathbit{b}" + }, + "𝒄": { + math: "\\mathbit{c}" + }, + "𝒅": { + math: "\\mathbit{d}" + }, + "𝒆": { + math: "\\mathbit{e}" + }, + "𝒇": { + math: "\\mathbit{f}" + }, + "𝒈": { + math: "\\mathbit{g}" + }, + "𝒉": { + math: "\\mathbit{h}" + }, + "𝒊": { + math: "\\mathbit{i}" + }, + "𝒋": { + math: "\\mathbit{j}" + }, + "𝒌": { + math: "\\mathbit{k}" + }, + "𝒍": { + math: "\\mathbit{l}" + }, + "𝒎": { + math: "\\mathbit{m}" + }, + "𝒏": { + math: "\\mathbit{n}" + }, + "𝒐": { + math: "\\mathbit{o}" + }, + "𝒑": { + math: "\\mathbit{p}" + }, + "𝒒": { + math: "\\mathbit{q}" + }, + "𝒓": { + math: "\\mathbit{r}" + }, + "𝒔": { + math: "\\mathbit{s}" + }, + "𝒕": { + math: "\\mathbit{t}" + }, + "𝒖": { + math: "\\mathbit{u}" + }, + "𝒗": { + math: "\\mathbit{v}" + }, + "𝒘": { + math: "\\mathbit{w}" + }, + "𝒙": { + math: "\\mathbit{x}" + }, + "𝒚": { + math: "\\mathbit{y}" + }, + "𝒛": { + math: "\\mathbit{z}" + }, + "𝒜": { + math: "\\mathscr{A}" + }, + "𝒞": { + math: "\\mathscr{C}" + }, + "𝒟": { + math: "\\mathscr{D}" + }, + "𝒢": { + math: "\\mathscr{G}" + }, + "𝒥": { + math: "\\mathscr{J}" + }, + "𝒦": { + math: "\\mathscr{K}" + }, + "𝒩": { + math: "\\mathscr{N}" + }, + "𝒪": { + math: "\\mathscr{O}" + }, + "𝒫": { + math: "\\mathscr{P}" + }, + "𝒬": { + math: "\\mathscr{Q}" + }, + "𝒮": { + math: "\\mathscr{S}" + }, + "𝒯": { + math: "\\mathscr{T}" + }, + "𝒰": { + math: "\\mathscr{U}" + }, + "𝒱": { + math: "\\mathscr{V}" + }, + "𝒲": { + math: "\\mathscr{W}" + }, + "𝒳": { + math: "\\mathscr{X}" + }, + "𝒴": { + math: "\\mathscr{Y}" + }, + "𝒵": { + math: "\\mathscr{Z}" + }, + "𝒶": { + math: "\\mathscr{a}" + }, + "𝒷": { + math: "\\mathscr{b}" + }, + "𝒸": { + math: "\\mathscr{c}" + }, + "𝒹": { + math: "\\mathscr{d}" + }, + "𝒻": { + math: "\\mathscr{f}" + }, + "𝒽": { + math: "\\mathscr{h}" + }, + "𝒾": { + math: "\\mathscr{i}" + }, + "𝒿": { + math: "\\mathscr{j}" + }, + "𝓀": { + math: "\\mathscr{k}" + }, + "𝓁": { + math: "\\mathscr{l}" + }, + "𝓂": { + math: "\\mathscr{m}" + }, + "𝓃": { + math: "\\mathscr{n}" + }, + "𝓅": { + math: "\\mathscr{p}" + }, + "𝓆": { + math: "\\mathscr{q}" + }, + "𝓇": { + math: "\\mathscr{r}" + }, + "𝓈": { + math: "\\mathscr{s}" + }, + "𝓉": { + math: "\\mathscr{t}" + }, + "𝓊": { + math: "\\mathscr{u}" + }, + "𝓋": { + math: "\\mathscr{v}" + }, + "𝓌": { + math: "\\mathscr{w}" + }, + "𝓍": { + math: "\\mathscr{x}" + }, + "𝓎": { + math: "\\mathscr{y}" + }, + "𝓏": { + math: "\\mathscr{z}" + }, + "𝓐": { + math: "\\mathmit{A}" + }, + "𝓑": { + math: "\\mathmit{B}" + }, + "𝓒": { + math: "\\mathmit{C}" + }, + "𝓓": { + math: "\\mathmit{D}" + }, + "𝓔": { + math: "\\mathmit{E}" + }, + "𝓕": { + math: "\\mathmit{F}" + }, + "𝓖": { + math: "\\mathmit{G}" + }, + "𝓗": { + math: "\\mathmit{H}" + }, + "𝓘": { + math: "\\mathmit{I}" + }, + "𝓙": { + math: "\\mathmit{J}" + }, + "𝓚": { + math: "\\mathmit{K}" + }, + "𝓛": { + math: "\\mathmit{L}" + }, + "𝓜": { + math: "\\mathmit{M}" + }, + "𝓝": { + math: "\\mathmit{N}" + }, + "𝓞": { + math: "\\mathmit{O}" + }, + "𝓟": { + math: "\\mathmit{P}" + }, + "𝓠": { + math: "\\mathmit{Q}" + }, + "𝓡": { + math: "\\mathmit{R}" + }, + "𝓢": { + math: "\\mathmit{S}" + }, + "𝓣": { + math: "\\mathmit{T}" + }, + "𝓤": { + math: "\\mathmit{U}" + }, + "𝓥": { + math: "\\mathmit{V}" + }, + "𝓦": { + math: "\\mathmit{W}" + }, + "𝓧": { + math: "\\mathmit{X}" + }, + "𝓨": { + math: "\\mathmit{Y}" + }, + "𝓩": { + math: "\\mathmit{Z}" + }, + "𝓪": { + math: "\\mathmit{a}" + }, + "𝓫": { + math: "\\mathmit{b}" + }, + "𝓬": { + math: "\\mathmit{c}" + }, + "𝓭": { + math: "\\mathmit{d}" + }, + "𝓮": { + math: "\\mathmit{e}" + }, + "𝓯": { + math: "\\mathmit{f}" + }, + "𝓰": { + math: "\\mathmit{g}" + }, + "𝓱": { + math: "\\mathmit{h}" + }, + "𝓲": { + math: "\\mathmit{i}" + }, + "𝓳": { + math: "\\mathmit{j}" + }, + "𝓴": { + math: "\\mathmit{k}" + }, + "𝓵": { + math: "\\mathmit{l}" + }, + "𝓶": { + math: "\\mathmit{m}" + }, + "𝓷": { + math: "\\mathmit{n}" + }, + "𝓸": { + math: "\\mathmit{o}" + }, + "𝓹": { + math: "\\mathmit{p}" + }, + "𝓺": { + math: "\\mathmit{q}" + }, + "𝓻": { + math: "\\mathmit{r}" + }, + "𝓼": { + math: "\\mathmit{s}" + }, + "𝓽": { + math: "\\mathmit{t}" + }, + "𝓾": { + math: "\\mathmit{u}" + }, + "𝓿": { + math: "\\mathmit{v}" + }, + "𝔀": { + math: "\\mathmit{w}" + }, + "𝔁": { + math: "\\mathmit{x}" + }, + "𝔂": { + math: "\\mathmit{y}" + }, + "𝔃": { + math: "\\mathmit{z}" + }, + "𝔄": { + math: "\\mathfrak{A}" + }, + "𝔅": { + math: "\\mathfrak{B}" + }, + "𝔇": { + math: "\\mathfrak{D}" + }, + "𝔈": { + math: "\\mathfrak{E}" + }, + "𝔉": { + math: "\\mathfrak{F}" + }, + "𝔊": { + math: "\\mathfrak{G}" + }, + "𝔍": { + math: "\\mathfrak{J}" + }, + "𝔎": { + math: "\\mathfrak{K}" + }, + "𝔏": { + math: "\\mathfrak{L}" + }, + "𝔐": { + math: "\\mathfrak{M}" + }, + "𝔑": { + math: "\\mathfrak{N}" + }, + "𝔒": { + math: "\\mathfrak{O}" + }, + "𝔓": { + math: "\\mathfrak{P}" + }, + "𝔔": { + math: "\\mathfrak{Q}" + }, + "𝔖": { + math: "\\mathfrak{S}" + }, + "𝔗": { + math: "\\mathfrak{T}" + }, + "𝔘": { + math: "\\mathfrak{U}" + }, + "𝔙": { + math: "\\mathfrak{V}" + }, + "𝔚": { + math: "\\mathfrak{W}" + }, + "𝔛": { + math: "\\mathfrak{X}" + }, + "𝔜": { + math: "\\mathfrak{Y}" + }, + "𝔞": { + math: "\\mathfrak{a}" + }, + "𝔟": { + math: "\\mathfrak{b}" + }, + "𝔠": { + math: "\\mathfrak{c}" + }, + "𝔡": { + math: "\\mathfrak{d}" + }, + "𝔢": { + math: "\\mathfrak{e}" + }, + "𝔣": { + math: "\\mathfrak{f}" + }, + "𝔤": { + math: "\\mathfrak{g}" + }, + "𝔥": { + math: "\\mathfrak{h}" + }, + "𝔦": { + math: "\\mathfrak{i}" + }, + "𝔧": { + math: "\\mathfrak{j}" + }, + "𝔨": { + math: "\\mathfrak{k}" + }, + "𝔩": { + math: "\\mathfrak{l}" + }, + "𝔪": { + math: "\\mathfrak{m}" + }, + "𝔫": { + math: "\\mathfrak{n}" + }, + "𝔬": { + math: "\\mathfrak{o}" + }, + "𝔭": { + math: "\\mathfrak{p}" + }, + "𝔮": { + math: "\\mathfrak{q}" + }, + "𝔯": { + math: "\\mathfrak{r}" + }, + "𝔰": { + math: "\\mathfrak{s}" + }, + "𝔱": { + math: "\\mathfrak{t}" + }, + "𝔲": { + math: "\\mathfrak{u}" + }, + "𝔳": { + math: "\\mathfrak{v}" + }, + "𝔴": { + math: "\\mathfrak{w}" + }, + "𝔵": { + math: "\\mathfrak{x}" + }, + "𝔶": { + math: "\\mathfrak{y}" + }, + "𝔷": { + math: "\\mathfrak{z}" + }, + "𝔸": { + math: "\\mathbb{A}" + }, + "𝔹": { + math: "\\mathbb{B}" + }, + "𝔻": { + math: "\\mathbb{D}" + }, + "𝔼": { + math: "\\mathbb{E}" + }, + "𝔽": { + math: "\\mathbb{F}" + }, + "𝔾": { + math: "\\mathbb{G}" + }, + "𝕀": { + math: "\\mathbb{I}" + }, + "𝕁": { + math: "\\mathbb{J}" + }, + "𝕂": { + math: "\\mathbb{K}" + }, + "𝕃": { + math: "\\mathbb{L}" + }, + "𝕄": { + math: "\\mathbb{M}" + }, + "𝕆": { + math: "\\mathbb{O}" + }, + "𝕊": { + math: "\\mathbb{S}" + }, + "𝕋": { + math: "\\mathbb{T}" + }, + "𝕌": { + math: "\\mathbb{U}" + }, + "𝕍": { + math: "\\mathbb{V}" + }, + "𝕎": { + math: "\\mathbb{W}" + }, + "𝕏": { + math: "\\mathbb{X}" + }, + "𝕐": { + math: "\\mathbb{Y}" + }, + "𝕒": { + math: "\\mathbb{a}" + }, + "𝕓": { + math: "\\mathbb{b}" + }, + "𝕔": { + math: "\\mathbb{c}" + }, + "𝕕": { + math: "\\mathbb{d}" + }, + "𝕖": { + math: "\\mathbb{e}" + }, + "𝕗": { + math: "\\mathbb{f}" + }, + "𝕘": { + math: "\\mathbb{g}" + }, + "𝕙": { + math: "\\mathbb{h}" + }, + "𝕚": { + math: "\\mathbb{i}" + }, + "𝕛": { + math: "\\mathbb{j}" + }, + "𝕜": { + math: "\\mathbb{k}" + }, + "𝕝": { + math: "\\mathbb{l}" + }, + "𝕞": { + math: "\\mathbb{m}" + }, + "𝕟": { + math: "\\mathbb{n}" + }, + "𝕠": { + math: "\\mathbb{o}" + }, + "𝕡": { + math: "\\mathbb{p}" + }, + "𝕢": { + math: "\\mathbb{q}" + }, + "𝕣": { + math: "\\mathbb{r}" + }, + "𝕤": { + math: "\\mathbb{s}" + }, + "𝕥": { + math: "\\mathbb{t}" + }, + "𝕦": { + math: "\\mathbb{u}" + }, + "𝕧": { + math: "\\mathbb{v}" + }, + "𝕨": { + math: "\\mathbb{w}" + }, + "𝕩": { + math: "\\mathbb{x}" + }, + "𝕪": { + math: "\\mathbb{y}" + }, + "𝕫": { + math: "\\mathbb{z}" + }, + "𝕬": { + math: "\\mathslbb{A}" + }, + "𝕭": { + math: "\\mathslbb{B}" + }, + "𝕮": { + math: "\\mathslbb{C}" + }, + "𝕯": { + math: "\\mathslbb{D}" + }, + "𝕰": { + math: "\\mathslbb{E}" + }, + "𝕱": { + math: "\\mathslbb{F}" + }, + "𝕲": { + math: "\\mathslbb{G}" + }, + "𝕳": { + math: "\\mathslbb{H}" + }, + "𝕴": { + math: "\\mathslbb{I}" + }, + "𝕵": { + math: "\\mathslbb{J}" + }, + "𝕶": { + math: "\\mathslbb{K}" + }, + "𝕷": { + math: "\\mathslbb{L}" + }, + "𝕸": { + math: "\\mathslbb{M}" + }, + "𝕹": { + math: "\\mathslbb{N}" + }, + "𝕺": { + math: "\\mathslbb{O}" + }, + "𝕻": { + math: "\\mathslbb{P}" + }, + "𝕼": { + math: "\\mathslbb{Q}" + }, + "𝕽": { + math: "\\mathslbb{R}" + }, + "𝕾": { + math: "\\mathslbb{S}" + }, + "𝕿": { + math: "\\mathslbb{T}" + }, + "𝖀": { + math: "\\mathslbb{U}" + }, + "𝖁": { + math: "\\mathslbb{V}" + }, + "𝖂": { + math: "\\mathslbb{W}" + }, + "𝖃": { + math: "\\mathslbb{X}" + }, + "𝖄": { + math: "\\mathslbb{Y}" + }, + "𝖅": { + math: "\\mathslbb{Z}" + }, + "𝖆": { + math: "\\mathslbb{a}" + }, + "𝖇": { + math: "\\mathslbb{b}" + }, + "𝖈": { + math: "\\mathslbb{c}" + }, + "𝖉": { + math: "\\mathslbb{d}" + }, + "𝖊": { + math: "\\mathslbb{e}" + }, + "𝖋": { + math: "\\mathslbb{f}" + }, + "𝖌": { + math: "\\mathslbb{g}" + }, + "𝖍": { + math: "\\mathslbb{h}" + }, + "𝖎": { + math: "\\mathslbb{i}" + }, + "𝖏": { + math: "\\mathslbb{j}" + }, + "𝖐": { + math: "\\mathslbb{k}" + }, + "𝖑": { + math: "\\mathslbb{l}" + }, + "𝖒": { + math: "\\mathslbb{m}" + }, + "𝖓": { + math: "\\mathslbb{n}" + }, + "𝖔": { + math: "\\mathslbb{o}" + }, + "𝖕": { + math: "\\mathslbb{p}" + }, + "𝖖": { + math: "\\mathslbb{q}" + }, + "𝖗": { + math: "\\mathslbb{r}" + }, + "𝖘": { + math: "\\mathslbb{s}" + }, + "𝖙": { + math: "\\mathslbb{t}" + }, + "𝖚": { + math: "\\mathslbb{u}" + }, + "𝖛": { + math: "\\mathslbb{v}" + }, + "𝖜": { + math: "\\mathslbb{w}" + }, + "𝖝": { + math: "\\mathslbb{x}" + }, + "𝖞": { + math: "\\mathslbb{y}" + }, + "𝖟": { + math: "\\mathslbb{z}" + }, + "𝖠": { + math: "\\mathsf{A}" + }, + "𝖡": { + math: "\\mathsf{B}" + }, + "𝖢": { + math: "\\mathsf{C}" + }, + "𝖣": { + math: "\\mathsf{D}" + }, + "𝖤": { + math: "\\mathsf{E}" + }, + "𝖥": { + math: "\\mathsf{F}" + }, + "𝖦": { + math: "\\mathsf{G}" + }, + "𝖧": { + math: "\\mathsf{H}" + }, + "𝖨": { + math: "\\mathsf{I}" + }, + "𝖩": { + math: "\\mathsf{J}" + }, + "𝖪": { + math: "\\mathsf{K}" + }, + "𝖫": { + math: "\\mathsf{L}" + }, + "𝖬": { + math: "\\mathsf{M}" + }, + "𝖭": { + math: "\\mathsf{N}" + }, + "𝖮": { + math: "\\mathsf{O}" + }, + "𝖯": { + math: "\\mathsf{P}" + }, + "𝖰": { + math: "\\mathsf{Q}" + }, + "𝖱": { + math: "\\mathsf{R}" + }, + "𝖲": { + math: "\\mathsf{S}" + }, + "𝖳": { + math: "\\mathsf{T}" + }, + "𝖴": { + math: "\\mathsf{U}" + }, + "𝖵": { + math: "\\mathsf{V}" + }, + "𝖶": { + math: "\\mathsf{W}" + }, + "𝖷": { + math: "\\mathsf{X}" + }, + "𝖸": { + math: "\\mathsf{Y}" + }, + "𝖹": { + math: "\\mathsf{Z}" + }, + "𝖺": { + math: "\\mathsf{a}" + }, + "𝖻": { + math: "\\mathsf{b}" + }, + "𝖼": { + math: "\\mathsf{c}" + }, + "𝖽": { + math: "\\mathsf{d}" + }, + "𝖾": { + math: "\\mathsf{e}" + }, + "𝖿": { + math: "\\mathsf{f}" + }, + "𝗀": { + math: "\\mathsf{g}" + }, + "𝗁": { + math: "\\mathsf{h}" + }, + "𝗂": { + math: "\\mathsf{i}" + }, + "𝗃": { + math: "\\mathsf{j}" + }, + "𝗄": { + math: "\\mathsf{k}" + }, + "𝗅": { + math: "\\mathsf{l}" + }, + "𝗆": { + math: "\\mathsf{m}" + }, + "𝗇": { + math: "\\mathsf{n}" + }, + "𝗈": { + math: "\\mathsf{o}" + }, + "𝗉": { + math: "\\mathsf{p}" + }, + "𝗊": { + math: "\\mathsf{q}" + }, + "𝗋": { + math: "\\mathsf{r}" + }, + "𝗌": { + math: "\\mathsf{s}" + }, + "𝗍": { + math: "\\mathsf{t}" + }, + "𝗎": { + math: "\\mathsf{u}" + }, + "𝗏": { + math: "\\mathsf{v}" + }, + "𝗐": { + math: "\\mathsf{w}" + }, + "𝗑": { + math: "\\mathsf{x}" + }, + "𝗒": { + math: "\\mathsf{y}" + }, + "𝗓": { + math: "\\mathsf{z}" + }, + "𝗔": { + math: "\\mathsfbf{A}" + }, + "𝗕": { + math: "\\mathsfbf{B}" + }, + "𝗖": { + math: "\\mathsfbf{C}" + }, + "𝗗": { + math: "\\mathsfbf{D}" + }, + "𝗘": { + math: "\\mathsfbf{E}" + }, + "𝗙": { + math: "\\mathsfbf{F}" + }, + "𝗚": { + math: "\\mathsfbf{G}" + }, + "𝗛": { + math: "\\mathsfbf{H}" + }, + "𝗜": { + math: "\\mathsfbf{I}" + }, + "𝗝": { + math: "\\mathsfbf{J}" + }, + "𝗞": { + math: "\\mathsfbf{K}" + }, + "𝗟": { + math: "\\mathsfbf{L}" + }, + "𝗠": { + math: "\\mathsfbf{M}" + }, + "𝗡": { + math: "\\mathsfbf{N}" + }, + "𝗢": { + math: "\\mathsfbf{O}" + }, + "𝗣": { + math: "\\mathsfbf{P}" + }, + "𝗤": { + math: "\\mathsfbf{Q}" + }, + "𝗥": { + math: "\\mathsfbf{R}" + }, + "𝗦": { + math: "\\mathsfbf{S}" + }, + "𝗧": { + math: "\\mathsfbf{T}" + }, + "𝗨": { + math: "\\mathsfbf{U}" + }, + "𝗩": { + math: "\\mathsfbf{V}" + }, + "𝗪": { + math: "\\mathsfbf{W}" + }, + "𝗫": { + math: "\\mathsfbf{X}" + }, + "𝗬": { + math: "\\mathsfbf{Y}" + }, + "𝗭": { + math: "\\mathsfbf{Z}" + }, + "𝗮": { + math: "\\mathsfbf{a}" + }, + "𝗯": { + math: "\\mathsfbf{b}" + }, + "𝗰": { + math: "\\mathsfbf{c}" + }, + "𝗱": { + math: "\\mathsfbf{d}" + }, + "𝗲": { + math: "\\mathsfbf{e}" + }, + "𝗳": { + math: "\\mathsfbf{f}" + }, + "𝗴": { + math: "\\mathsfbf{g}" + }, + "𝗵": { + math: "\\mathsfbf{h}" + }, + "𝗶": { + math: "\\mathsfbf{i}" + }, + "𝗷": { + math: "\\mathsfbf{j}" + }, + "𝗸": { + math: "\\mathsfbf{k}" + }, + "𝗹": { + math: "\\mathsfbf{l}" + }, + "𝗺": { + math: "\\mathsfbf{m}" + }, + "𝗻": { + math: "\\mathsfbf{n}" + }, + "𝗼": { + math: "\\mathsfbf{o}" + }, + "𝗽": { + math: "\\mathsfbf{p}" + }, + "𝗾": { + math: "\\mathsfbf{q}" + }, + "𝗿": { + math: "\\mathsfbf{r}" + }, + "𝘀": { + math: "\\mathsfbf{s}" + }, + "𝘁": { + math: "\\mathsfbf{t}" + }, + "𝘂": { + math: "\\mathsfbf{u}" + }, + "𝘃": { + math: "\\mathsfbf{v}" + }, + "𝘄": { + math: "\\mathsfbf{w}" + }, + "𝘅": { + math: "\\mathsfbf{x}" + }, + "𝘆": { + math: "\\mathsfbf{y}" + }, + "𝘇": { + math: "\\mathsfbf{z}" + }, + "𝘈": { + math: "\\mathsfsl{A}" + }, + "𝘉": { + math: "\\mathsfsl{B}" + }, + "𝘊": { + math: "\\mathsfsl{C}" + }, + "𝘋": { + math: "\\mathsfsl{D}" + }, + "𝘌": { + math: "\\mathsfsl{E}" + }, + "𝘍": { + math: "\\mathsfsl{F}" + }, + "𝘎": { + math: "\\mathsfsl{G}" + }, + "𝘏": { + math: "\\mathsfsl{H}" + }, + "𝘐": { + math: "\\mathsfsl{I}" + }, + "𝘑": { + math: "\\mathsfsl{J}" + }, + "𝘒": { + math: "\\mathsfsl{K}" + }, + "𝘓": { + math: "\\mathsfsl{L}" + }, + "𝘔": { + math: "\\mathsfsl{M}" + }, + "𝘕": { + math: "\\mathsfsl{N}" + }, + "𝘖": { + math: "\\mathsfsl{O}" + }, + "𝘗": { + math: "\\mathsfsl{P}" + }, + "𝘘": { + math: "\\mathsfsl{Q}" + }, + "𝘙": { + math: "\\mathsfsl{R}" + }, + "𝘚": { + math: "\\mathsfsl{S}" + }, + "𝘛": { + math: "\\mathsfsl{T}" + }, + "𝘜": { + math: "\\mathsfsl{U}" + }, + "𝘝": { + math: "\\mathsfsl{V}" + }, + "𝘞": { + math: "\\mathsfsl{W}" + }, + "𝘟": { + math: "\\mathsfsl{X}" + }, + "𝘠": { + math: "\\mathsfsl{Y}" + }, + "𝘡": { + math: "\\mathsfsl{Z}" + }, + "𝘢": { + math: "\\mathsfsl{a}" + }, + "𝘣": { + math: "\\mathsfsl{b}" + }, + "𝘤": { + math: "\\mathsfsl{c}" + }, + "𝘥": { + math: "\\mathsfsl{d}" + }, + "𝘦": { + math: "\\mathsfsl{e}" + }, + "𝘧": { + math: "\\mathsfsl{f}" + }, + "𝘨": { + math: "\\mathsfsl{g}" + }, + "𝘩": { + math: "\\mathsfsl{h}" + }, + "𝘪": { + math: "\\mathsfsl{i}" + }, + "𝘫": { + math: "\\mathsfsl{j}" + }, + "𝘬": { + math: "\\mathsfsl{k}" + }, + "𝘭": { + math: "\\mathsfsl{l}" + }, + "𝘮": { + math: "\\mathsfsl{m}" + }, + "𝘯": { + math: "\\mathsfsl{n}" + }, + "𝘰": { + math: "\\mathsfsl{o}" + }, + "𝘱": { + math: "\\mathsfsl{p}" + }, + "𝘲": { + math: "\\mathsfsl{q}" + }, + "𝘳": { + math: "\\mathsfsl{r}" + }, + "𝘴": { + math: "\\mathsfsl{s}" + }, + "𝘵": { + math: "\\mathsfsl{t}" + }, + "𝘶": { + math: "\\mathsfsl{u}" + }, + "𝘷": { + math: "\\mathsfsl{v}" + }, + "𝘸": { + math: "\\mathsfsl{w}" + }, + "𝘹": { + math: "\\mathsfsl{x}" + }, + "𝘺": { + math: "\\mathsfsl{y}" + }, + "𝘻": { + math: "\\mathsfsl{z}" + }, + "𝘼": { + math: "\\mathsfbfsl{A}" + }, + "𝘽": { + math: "\\mathsfbfsl{B}" + }, + "𝘾": { + math: "\\mathsfbfsl{C}" + }, + "𝘿": { + math: "\\mathsfbfsl{D}" + }, + "𝙀": { + math: "\\mathsfbfsl{E}" + }, + "𝙁": { + math: "\\mathsfbfsl{F}" + }, + "𝙂": { + math: "\\mathsfbfsl{G}" + }, + "𝙃": { + math: "\\mathsfbfsl{H}" + }, + "𝙄": { + math: "\\mathsfbfsl{I}" + }, + "𝙅": { + math: "\\mathsfbfsl{J}" + }, + "𝙆": { + math: "\\mathsfbfsl{K}" + }, + "𝙇": { + math: "\\mathsfbfsl{L}" + }, + "𝙈": { + math: "\\mathsfbfsl{M}" + }, + "𝙉": { + math: "\\mathsfbfsl{N}" + }, + "𝙊": { + math: "\\mathsfbfsl{O}" + }, + "𝙋": { + math: "\\mathsfbfsl{P}" + }, + "𝙌": { + math: "\\mathsfbfsl{Q}" + }, + "𝙍": { + math: "\\mathsfbfsl{R}" + }, + "𝙎": { + math: "\\mathsfbfsl{S}" + }, + "𝙏": { + math: "\\mathsfbfsl{T}" + }, + "𝙐": { + math: "\\mathsfbfsl{U}" + }, + "𝙑": { + math: "\\mathsfbfsl{V}" + }, + "𝙒": { + math: "\\mathsfbfsl{W}" + }, + "𝙓": { + math: "\\mathsfbfsl{X}" + }, + "𝙔": { + math: "\\mathsfbfsl{Y}" + }, + "𝙕": { + math: "\\mathsfbfsl{Z}" + }, + "𝙖": { + math: "\\mathsfbfsl{a}" + }, + "𝙗": { + math: "\\mathsfbfsl{b}" + }, + "𝙘": { + math: "\\mathsfbfsl{c}" + }, + "𝙙": { + math: "\\mathsfbfsl{d}" + }, + "𝙚": { + math: "\\mathsfbfsl{e}" + }, + "𝙛": { + math: "\\mathsfbfsl{f}" + }, + "𝙜": { + math: "\\mathsfbfsl{g}" + }, + "𝙝": { + math: "\\mathsfbfsl{h}" + }, + "𝙞": { + math: "\\mathsfbfsl{i}" + }, + "𝙟": { + math: "\\mathsfbfsl{j}" + }, + "𝙠": { + math: "\\mathsfbfsl{k}" + }, + "𝙡": { + math: "\\mathsfbfsl{l}" + }, + "𝙢": { + math: "\\mathsfbfsl{m}" + }, + "𝙣": { + math: "\\mathsfbfsl{n}" + }, + "𝙤": { + math: "\\mathsfbfsl{o}" + }, + "𝙥": { + math: "\\mathsfbfsl{p}" + }, + "𝙦": { + math: "\\mathsfbfsl{q}" + }, + "𝙧": { + math: "\\mathsfbfsl{r}" + }, + "𝙨": { + math: "\\mathsfbfsl{s}" + }, + "𝙩": { + math: "\\mathsfbfsl{t}" + }, + "𝙪": { + math: "\\mathsfbfsl{u}" + }, + "𝙫": { + math: "\\mathsfbfsl{v}" + }, + "𝙬": { + math: "\\mathsfbfsl{w}" + }, + "𝙭": { + math: "\\mathsfbfsl{x}" + }, + "𝙮": { + math: "\\mathsfbfsl{y}" + }, + "𝙯": { + math: "\\mathsfbfsl{z}" + }, + "𝙰": { + math: "\\mathtt{A}" + }, + "𝙱": { + math: "\\mathtt{B}" + }, + "𝙲": { + math: "\\mathtt{C}" + }, + "𝙳": { + math: "\\mathtt{D}" + }, + "𝙴": { + math: "\\mathtt{E}" + }, + "𝙵": { + math: "\\mathtt{F}" + }, + "𝙶": { + math: "\\mathtt{G}" + }, + "𝙷": { + math: "\\mathtt{H}" + }, + "𝙸": { + math: "\\mathtt{I}" + }, + "𝙹": { + math: "\\mathtt{J}" + }, + "𝙺": { + math: "\\mathtt{K}" + }, + "𝙻": { + math: "\\mathtt{L}" + }, + "𝙼": { + math: "\\mathtt{M}" + }, + "𝙽": { + math: "\\mathtt{N}" + }, + "𝙾": { + math: "\\mathtt{O}" + }, + "𝙿": { + math: "\\mathtt{P}" + }, + "𝚀": { + math: "\\mathtt{Q}" + }, + "𝚁": { + math: "\\mathtt{R}" + }, + "𝚂": { + math: "\\mathtt{S}" + }, + "𝚃": { + math: "\\mathtt{T}" + }, + "𝚄": { + math: "\\mathtt{U}" + }, + "𝚅": { + math: "\\mathtt{V}" + }, + "𝚆": { + math: "\\mathtt{W}" + }, + "𝚇": { + math: "\\mathtt{X}" + }, + "𝚈": { + math: "\\mathtt{Y}" + }, + "𝚉": { + math: "\\mathtt{Z}" + }, + "𝚊": { + math: "\\mathtt{a}" + }, + "𝚋": { + math: "\\mathtt{b}" + }, + "𝚌": { + math: "\\mathtt{c}" + }, + "𝚍": { + math: "\\mathtt{d}" + }, + "𝚎": { + math: "\\mathtt{e}" + }, + "𝚏": { + math: "\\mathtt{f}" + }, + "𝚐": { + math: "\\mathtt{g}" + }, + "𝚑": { + math: "\\mathtt{h}" + }, + "𝚒": { + math: "\\mathtt{i}" + }, + "𝚓": { + math: "\\mathtt{j}" + }, + "𝚔": { + math: "\\mathtt{k}" + }, + "𝚕": { + math: "\\mathtt{l}" + }, + "𝚖": { + math: "\\mathtt{m}" + }, + "𝚗": { + math: "\\mathtt{n}" + }, + "𝚘": { + math: "\\mathtt{o}" + }, + "𝚙": { + math: "\\mathtt{p}" + }, + "𝚚": { + math: "\\mathtt{q}" + }, + "𝚛": { + math: "\\mathtt{r}" + }, + "𝚜": { + math: "\\mathtt{s}" + }, + "𝚝": { + math: "\\mathtt{t}" + }, + "𝚞": { + math: "\\mathtt{u}" + }, + "𝚟": { + math: "\\mathtt{v}" + }, + "𝚠": { + math: "\\mathtt{w}" + }, + "𝚡": { + math: "\\mathtt{x}" + }, + "𝚢": { + math: "\\mathtt{y}" + }, + "𝚣": { + math: "\\mathtt{z}" + }, + "𝚤": { + math: "\\imath" + }, + "𝚥": { + math: "\\jmath" + }, + "𝚨": { + math: "\\mathbf{A}" + }, + "𝚩": { + math: "\\mathbf{B}" + }, + "𝚪": { + math: "\\mathbf{\\Gamma}" + }, + "𝚫": { + math: "\\mathbf{\\Delta}" + }, + "𝚬": { + math: "\\mathbf{E}" + }, + "𝚭": { + math: "\\mathbf{Z}" + }, + "𝚮": { + math: "\\mathbf{H}" + }, + "𝚯": { + math: "\\mathbf{\\Theta}" + }, + "𝚰": { + math: "\\mathbf{I}" + }, + "𝚱": { + math: "\\mathbf{K}" + }, + "𝚲": { + math: "\\mathbf{\\Lambda}" + }, + "𝚳": { + math: "M" + }, + "𝚴": { + math: "N" + }, + "𝚵": { + math: "\\mathbf{\\Xi}" + }, + "𝚶": { + math: "O" + }, + "𝚷": { + math: "\\mathbf{\\Pi}" + }, + "𝚸": { + math: "\\mathbf{P}" + }, + "𝚹": { + math: "\\mathbf{\\vartheta}" + }, + "𝚺": { + math: "\\mathbf{\\Sigma}" + }, + "𝚻": { + math: "\\mathbf{T}" + }, + "𝚼": { + math: "\\mathbf{\\Upsilon}" + }, + "𝚽": { + math: "\\mathbf{\\Phi}" + }, + "𝚾": { + math: "\\mathbf{X}" + }, + "𝚿": { + math: "\\mathbf{\\Psi}" + }, + "𝛀": { + math: "\\mathbf{\\Omega}" + }, + "𝛁": { + math: "\\mathbf{\\nabla}" + }, + "𝛂": { + math: "\\mathbf{\\alpha}" + }, + "𝛃": { + math: "\\mathbf{\\beta}" + }, + "𝛄": { + math: "\\mathbf{\\gamma}" + }, + "𝛅": { + math: "\\mathbf{\\delta}" + }, + "𝛆": { + math: "\\mathbf{\\epsilon}" + }, + "𝛇": { + math: "\\mathbf{\\zeta}" + }, + "𝛈": { + math: "\\mathbf{\\eta}" + }, + "𝛉": { + math: "\\mathbf{\\theta}" + }, + "𝛊": { + math: "\\mathbf{I}" + }, + "𝛋": { + math: "\\mathbf{K}" + }, + "𝛌": { + math: "\\mathbf{\\lambda}" + }, + "𝛍": { + math: "M" + }, + "𝛎": { + math: "N" + }, + "𝛏": { + math: "\\mathbf{\\xi}" + }, + "𝛐": { + math: "O" + }, + "𝛑": { + math: "\\mathbf{\\pi}" + }, + "𝛒": { + math: "\\mathbf{P}" + }, + "𝛓": { + math: "\\mathbf{\\varsigma}" + }, + "𝛔": { + math: "\\mathbf{\\sigma}" + }, + "𝛕": { + math: "\\mathbf{T}" + }, + "𝛖": { + math: "\\mathbf{\\upsilon}" + }, + "𝛗": { + math: "\\mathbf{\\phi}" + }, + "𝛘": { + math: "\\mathbf{X}" + }, + "𝛙": { + math: "\\mathbf{\\psi}" + }, + "𝛚": { + math: "\\mathbf{\\omega}" + }, + "𝛛": { + math: "\\partial" + }, + "𝛜": { + math: "\\in" + }, + "𝛝": { + math: "\\mathbf{\\vartheta}" + }, + "𝛞": { + math: "\\mathbf{\\varkappa}" + }, + "𝛟": { + math: "\\mathbf{\\phi}" + }, + "𝛠": { + math: "\\mathbf{\\varrho}" + }, + "𝛡": { + math: "\\mathbf{\\varpi}" + }, + "𝛢": { + math: "\\mathsl{A}" + }, + "𝛣": { + math: "\\mathsl{B}" + }, + "𝛤": { + math: "\\mathsl{\\Gamma}" + }, + "𝛥": { + math: "\\mathsl{\\Delta}" + }, + "𝛦": { + math: "\\mathsl{E}" + }, + "𝛧": { + math: "\\mathsl{Z}" + }, + "𝛨": { + math: "\\mathsl{H}" + }, + "𝛩": { + math: "\\mathsl{\\Theta}" + }, + "𝛪": { + math: "\\mathsl{I}" + }, + "𝛫": { + math: "\\mathsl{K}" + }, + "𝛬": { + math: "\\mathsl{\\Lambda}" + }, + "𝛭": { + math: "M" + }, + "𝛮": { + math: "N" + }, + "𝛯": { + math: "\\mathsl{\\Xi}" + }, + "𝛰": { + math: "O" + }, + "𝛱": { + math: "\\mathsl{\\Pi}" + }, + "𝛲": { + math: "\\mathsl{P}" + }, + "𝛳": { + math: "\\mathsl{\\Theta}" + }, + "𝛴": { + math: "\\mathsl{\\Sigma}" + }, + "𝛵": { + math: "\\mathsl{T}" + }, + "𝛶": { + math: "\\mathsl{\\Upsilon}" + }, + "𝛷": { + math: "\\mathsl{\\Phi}" + }, + "𝛸": { + math: "\\mathsl{X}" + }, + "𝛹": { + math: "\\mathsl{\\Psi}" + }, + "𝛺": { + math: "\\mathsl{\\Omega}" + }, + "𝛻": { + math: "\\mathsl{\\nabla}" + }, + "𝛼": { + math: "\\mathsl{A}" + }, + "𝛽": { + math: "\\mathsl{B}" + }, + "𝛾": { + math: "\\mathsl{\\gamma}" + }, + "𝛿": { + math: "\\mathsl{\\delta}" + }, + "𝜀": { + math: "\\mathsl{E}" + }, + "𝜁": { + math: "\\mathsl{Z}" + }, + "𝜂": { + math: "\\mathsl{H}" + }, + "𝜃": { + math: "\\mathsl{\\theta}" + }, + "𝜄": { + math: "\\mathsl{I}" + }, + "𝜅": { + math: "\\mathsl{K}" + }, + "𝜆": { + math: "\\mathsl{\\lambda}" + }, + "𝜇": { + math: "\\mu" + }, + "𝜈": { + math: "\\nu" + }, + "𝜉": { + math: "\\mathsl{\\xi}" + }, + "𝜊": { + math: "o" + }, + "𝜋": { + math: "\\mathsl{\\pi}" + }, + "𝜌": { + math: "\\mathsl{P}" + }, + "𝜍": { + math: "\\mathsl{\\varsigma}" + }, + "𝜎": { + math: "\\mathsl{\\sigma}" + }, + "𝜏": { + math: "\\mathsl{T}" + }, + "𝜐": { + math: "\\mathsl{\\upsilon}" + }, + "𝜑": { + math: "\\mathsl{\\varphi}" + }, + "𝜒": { + math: "\\mathsl{X}" + }, + "𝜓": { + math: "\\mathsl{\\psi}" + }, + "𝜔": { + math: "\\mathsl{\\omega}" + }, + "𝜕": { + math: "\\partial" + }, + "𝜖": { + math: "\\in" + }, + "𝜗": { + math: "\\mathsl{\\vartheta}" + }, + "𝜘": { + math: "\\mathsl{\\varkappa}" + }, + "𝜙": { + math: "\\mathsl{\\phi}" + }, + "𝜚": { + math: "\\mathsl{\\varrho}" + }, + "𝜛": { + math: "\\mathsl{\\varpi}" + }, + "𝜜": { + math: "\\mathbit{A}" + }, + "𝜝": { + math: "\\mathbit{B}" + }, + "𝜞": { + math: "\\mathbit{\\Gamma}" + }, + "𝜟": { + math: "\\mathbit{\\Delta}" + }, + "𝜠": { + math: "\\mathbit{E}" + }, + "𝜡": { + math: "\\mathbit{Z}" + }, + "𝜢": { + math: "\\mathbit{H}" + }, + "𝜣": { + math: "\\mathbit{\\Theta}" + }, + "𝜤": { + math: "\\mathbit{I}" + }, + "𝜥": { + math: "\\mathbit{K}" + }, + "𝜦": { + math: "\\mathbit{\\Lambda}" + }, + "𝜧": { + math: "M" + }, + "𝜨": { + math: "N" + }, + "𝜩": { + math: "\\mathbit{\\Xi}" + }, + "𝜪": { + math: "O" + }, + "𝜫": { + math: "\\mathbit{\\Pi}" + }, + "𝜬": { + math: "\\mathbit{P}" + }, + "𝜭": { + math: "\\mathbit{O}" + }, + "𝜮": { + math: "\\mathbit{\\Sigma}" + }, + "𝜯": { + math: "\\mathbit{T}" + }, + "𝜰": { + math: "\\mathbit{\\Upsilon}" + }, + "𝜱": { + math: "\\mathbit{\\Phi}" + }, + "𝜲": { + math: "\\mathbit{X}" + }, + "𝜳": { + math: "\\mathbit{\\Psi}" + }, + "𝜴": { + math: "\\mathbit{\\Omega}" + }, + "𝜵": { + math: "\\mathbit{\\nabla}" + }, + "𝜶": { + math: "\\mathbit{\\alpha}" + }, + "𝜷": { + math: "\\mathbit{\\beta}" + }, + "𝜸": { + math: "\\mathbit{\\gamma}" + }, + "𝜹": { + math: "\\mathbit{\\delta}" + }, + "𝜺": { + math: "\\mathbit{\\epsilon}" + }, + "𝜻": { + math: "\\mathbit{\\zeta}" + }, + "𝜼": { + math: "\\mathbit{\\eta}" + }, + "𝜽": { + math: "\\mathbit{\\theta}" + }, + "𝜾": { + math: "\\mathbit{\\imath}" + }, + "𝜿": { + math: "\\mathbit{\\kappa}" + }, + "𝝀": { + math: "\\mathbit{\\lambda}" + }, + "𝝁": { + math: "\\mu" + }, + "𝝂": { + math: "N" + }, + "𝝃": { + math: "\\mathbit{\\xi}" + }, + "𝝄": { + math: "O" + }, + "𝝅": { + math: "\\mathbit{\\pi}" + }, + "𝝆": { + math: "\\mathbit{\\rho}" + }, + "𝝇": { + math: "\\mathbit{\\varsigma}" + }, + "𝝈": { + math: "\\mathbit{\\sigma}" + }, + "𝝉": { + math: "\\mathbit{\\tau}" + }, + "𝝊": { + math: "\\mathbit{\\upsilon}" + }, + "𝝋": { + math: "\\mathbit{\\varphi}" + }, + "𝝌": { + math: "\\mathbit{\\chi}" + }, + "𝝍": { + math: "\\mathbit{\\psi}" + }, + "𝝎": { + math: "\\mathbit{\\omega}" + }, + "𝝏": { + math: "\\partial" + }, + "𝝐": { + math: "\\in" + }, + "𝝑": { + math: "\\mathbit{\\vartheta}" + }, + "𝝒": { + math: "\\mathbit{\\varkappa}" + }, + "𝝓": { + math: "\\mathbit{\\phi}" + }, + "𝝔": { + math: "\\mathbit{\\varrho}" + }, + "𝝕": { + math: "\\mathbit{\\varpi}" + }, + "𝝖": { + math: "\\mathsfbf{A}" + }, + "𝝗": { + math: "\\mathsfbf{B}" + }, + "𝝘": { + math: "\\mathsfbf{\\Gamma}" + }, + "𝝙": { + math: "\\mathsfbf{\\Delta}" + }, + "𝝚": { + math: "\\mathsfbf{E}" + }, + "𝝛": { + math: "\\mathsfbf{Z}" + }, + "𝝜": { + math: "\\mathsfbf{H}" + }, + "𝝝": { + math: "\\mathsfbf{\\Theta}" + }, + "𝝞": { + math: "\\mathsfbf{I}" + }, + "𝝟": { + math: "\\mathsfbf{K}" + }, + "𝝠": { + math: "\\mathsfbf{\\Lambda}" + }, + "𝝡": { + math: "M" + }, + "𝝢": { + math: "N" + }, + "𝝣": { + math: "\\mathsfbf{\\Xi}" + }, + "𝝤": { + math: "O" + }, + "𝝥": { + math: "\\mathsfbf{\\Pi}" + }, + "𝝦": { + math: "\\mathsfbf{P}" + }, + "𝝧": { + math: "\\mathsfbf{\\Theta}" + }, + "𝝨": { + math: "\\mathsfbf{\\Sigma}" + }, + "𝝩": { + math: "\\mathsfbf{T}" + }, + "𝝪": { + math: "\\mathsfbf{\\Upsilon}" + }, + "𝝫": { + math: "\\mathsfbf{\\Phi}" + }, + "𝝬": { + math: "\\mathsfbf{X}" + }, + "𝝭": { + math: "\\mathsfbf{\\Psi}" + }, + "𝝮": { + math: "\\mathsfbf{\\Omega}" + }, + "𝝯": { + math: "\\mathsfbf{\\nabla}" + }, + "𝝰": { + math: "\\mathsfbf{\\alpha}" + }, + "𝝱": { + math: "\\mathsfbf{\\beta}" + }, + "𝝲": { + math: "\\mathsfbf{\\gamma}" + }, + "𝝳": { + math: "\\mathsfbf{\\delta}" + }, + "𝝴": { + math: "\\mathsfbf{\\varepsilon}" + }, + "𝝵": { + math: "\\mathsfbf{\\zeta}" + }, + "𝝶": { + math: "\\mathsfbf{\\eta}" + }, + "𝝷": { + math: "\\mathsfbf{\\theta}" + }, + "𝝸": { + math: "\\mathsfbf{\\imath}" + }, + "𝝹": { + math: "\\mathsfbf{\\kappa}" + }, + "𝝺": { + math: "\\mathsfbf{\\lambda}" + }, + "𝝻": { + math: "\\mu" + }, + "𝝼": { + math: "\\nu" + }, + "𝝽": { + math: "\\mathsfbf{\\xi}" + }, + "𝝾": { + math: "o" + }, + "𝝿": { + math: "\\mathsfbf{\\pi}" + }, + "𝞀": { + math: "\\mathsfbf{\\rho}" + }, + "𝞁": { + math: "\\mathsfbf{\\varsigma}" + }, + "𝞂": { + math: "\\mathsfbf{\\sigma}" + }, + "𝞃": { + math: "\\mathsfbf{\\tau}" + }, + "𝞄": { + math: "\\mathsfbf{\\upsilon}" + }, + "𝞅": { + math: "\\mathsfbf{\\varphi}" + }, + "𝞆": { + math: "\\mathsfbf{\\chi}" + }, + "𝞇": { + math: "\\mathsfbf{\\psi}" + }, + "𝞈": { + math: "\\mathsfbf{\\omega}" + }, + "𝞉": { + math: "\\partial" + }, + "𝞊": { + math: "\\in" + }, + "𝞋": { + math: "\\mathsfbf{\\vartheta}" + }, + "𝞌": { + math: "\\mathsfbf{\\varkappa}" + }, + "𝞍": { + math: "\\mathsfbf{\\phi}" + }, + "𝞎": { + math: "\\mathsfbf{\\varrho}" + }, + "𝞏": { + math: "\\mathsfbf{\\varpi}" + }, + "𝞐": { + math: "\\mathsfbfsl{A}" + }, + "𝞑": { + math: "\\mathsfbfsl{B}" + }, + "𝞒": { + math: "\\mathsfbfsl{\\Gamma}" + }, + "𝞓": { + math: "\\mathsfbfsl{\\Delta}" + }, + "𝞔": { + math: "\\mathsfbfsl{E}" + }, + "𝞕": { + math: "\\mathsfbfsl{Z}" + }, + "𝞖": { + math: "\\mathsfbfsl{H}" + }, + "𝞗": { + math: "\\mathsfbfsl{\\Theta}" + }, + "𝞘": { + math: "\\mathsfbfsl{I}" + }, + "𝞙": { + math: "\\mathsfbfsl{K}" + }, + "𝞚": { + math: "\\mathsfbfsl{\\Lambda}" + }, + "𝞛": { + math: "\\mathsfbfsl{M}" + }, + "𝞜": { + math: "\\mathsfbfsl{N}" + }, + "𝞝": { + math: "\\mathsfbfsl{\\Xi}" + }, + "𝞞": { + math: "\\mathsfbfsl{O}" + }, + "𝞟": { + math: "\\mathsfbfsl{\\Pi}" + }, + "𝞠": { + math: "\\mathsfbfsl{P}" + }, + "𝞡": { + math: "\\mathsfbfsl{\\Theta}" + }, + "𝞢": { + math: "\\mathsfbfsl{\\Sigma}" + }, + "𝞣": { + math: "\\mathsfbfsl{T}" + }, + "𝞤": { + math: "\\mathsfbfsl{\\Upsilon}" + }, + "𝞥": { + math: "\\mathsfbfsl{\\Phi}" + }, + "𝞦": { + math: "\\mathsfbfsl{X}" + }, + "𝞧": { + math: "\\mathsfbfsl{\\Psi}" + }, + "𝞨": { + math: "\\mathsfbfsl{\\Omega}" + }, + "𝞩": { + math: "\\mathsfbfsl{\\nabla}" + }, + "𝞪": { + math: "\\mathsfbfsl{\\alpha}" + }, + "𝞫": { + math: "\\mathsfbfsl{\\beta}" + }, + "𝞬": { + math: "\\mathsfbfsl{\\gamma}" + }, + "𝞭": { + math: "\\mathsfbfsl{\\delta}" + }, + "𝞮": { + math: "\\mathsfbfsl{\\varepsilon}" + }, + "𝞯": { + math: "\\mathsfbfsl{\\zeta}" + }, + "𝞰": { + math: "\\mathsfbfsl{\\eta}" + }, + "𝞱": { + math: "\\mathsfbfsl{\\theta}" + }, + "𝞲": { + math: "\\mathsfbfsl{\\imath}" + }, + "𝞳": { + math: "\\mathsfbfsl{\\kappa}" + }, + "𝞴": { + math: "\\mathsfbfsl{\\lambda}" + }, + "𝞵": { + math: "\\mu" + }, + "𝞶": { + math: "\\nu" + }, + "𝞷": { + math: "\\mathsfbfsl{\\xi}" + }, + "𝞸": { + math: "o" + }, + "𝞹": { + math: "\\mathsfbfsl{\\pi}" + }, + "𝞺": { + math: "\\mathsfbfsl{\\rho}" + }, + "𝞻": { + math: "\\mathsfbfsl{\\varsigma}" + }, + "𝞼": { + math: "\\mathsfbfsl{\\sigma}" + }, + "𝞽": { + math: "\\mathsfbfsl{\\tau}" + }, + "𝞾": { + math: "\\mathsfbfsl{\\upsilon}" + }, + "𝞿": { + math: "\\mathsfbfsl{\\varphi}" + }, + "𝟀": { + math: "\\mathsfbfsl{\\chi}" + }, + "𝟁": { + math: "\\mathsfbfsl{\\psi}" + }, + "𝟂": { + math: "\\mathsfbfsl{\\omega}" + }, + "𝟃": { + math: "\\partial" + }, + "𝟄": { + math: "\\in" + }, + "𝟅": { + math: "\\mathsfbfsl{\\vartheta}" + }, + "𝟆": { + math: "\\mathsfbfsl{\\varkappa}" + }, + "𝟇": { + math: "\\mathsfbfsl{\\phi}" + }, + "𝟈": { + math: "\\mathsfbfsl{\\varrho}" + }, + "𝟉": { + math: "\\mathsfbfsl{\\varpi}" + }, + "𝟊": { + math: "\\mbfDigamma" + }, + "𝟋": { + math: "\\mbfdigamma" + }, + "𝟎": { + math: "\\mathbf{0}" + }, + "𝟏": { + math: "\\mathbf{1}" + }, + "𝟐": { + math: "\\mathbf{2}" + }, + "𝟑": { + math: "\\mathbf{3}" + }, + "𝟒": { + math: "\\mathbf{4}" + }, + "𝟓": { + math: "\\mathbf{5}" + }, + "𝟔": { + math: "\\mathbf{6}" + }, + "𝟕": { + math: "\\mathbf{7}" + }, + "𝟖": { + math: "\\mathbf{8}" + }, + "𝟗": { + math: "\\mathbf{9}" + }, + "𝟘": { + math: "\\mathbb{0}" + }, + "𝟙": { + math: "\\mathbb{1}" + }, + "𝟚": { + math: "\\mathbb{2}" + }, + "𝟛": { + math: "\\mathbb{3}" + }, + "𝟜": { + math: "\\mathbb{4}" + }, + "𝟝": { + math: "\\mathbb{5}" + }, + "𝟞": { + math: "\\mathbb{6}" + }, + "𝟟": { + math: "\\mathbb{7}" + }, + "𝟠": { + math: "\\mathbb{8}" + }, + "𝟡": { + math: "\\mathbb{9}" + }, + "𝟢": { + math: "\\mathsf{0}" + }, + "𝟣": { + math: "\\mathsf{1}" + }, + "𝟤": { + math: "\\mathsf{2}" + }, + "𝟥": { + math: "\\mathsf{3}" + }, + "𝟦": { + math: "\\mathsf{4}" + }, + "𝟧": { + math: "\\mathsf{5}" + }, + "𝟨": { + math: "\\mathsf{6}" + }, + "𝟩": { + math: "\\mathsf{7}" + }, + "𝟪": { + math: "\\mathsf{8}" + }, + "𝟫": { + math: "\\mathsf{9}" + }, + "𝟬": { + math: "\\mathsfbf{0}" + }, + "𝟭": { + math: "\\mathsfbf{1}" + }, + "𝟮": { + math: "\\mathsfbf{2}" + }, + "𝟯": { + math: "\\mathsfbf{3}" + }, + "𝟰": { + math: "\\mathsfbf{4}" + }, + "𝟱": { + math: "\\mathsfbf{5}" + }, + "𝟲": { + math: "\\mathsfbf{6}" + }, + "𝟳": { + math: "\\mathsfbf{7}" + }, + "𝟴": { + math: "\\mathsfbf{8}" + }, + "𝟵": { + math: "\\mathsfbf{9}" + }, + "𝟶": { + math: "\\mathtt{0}" + }, + "𝟷": { + math: "\\mathtt{1}" + }, + "𝟸": { + math: "\\mathtt{2}" + }, + "𝟹": { + math: "\\mathtt{3}" + }, + "𝟺": { + math: "\\mathtt{4}" + }, + "𝟻": { + math: "\\mathtt{5}" + }, + "𝟼": { + math: "\\mathtt{6}" + }, + "𝟽": { + math: "\\mathtt{7}" + }, + "𝟾": { + math: "\\mathtt{8}" + }, + "𝟿": { + math: "\\mathtt{9}" + } + }; + + var $$1 = { + math: "\\$", + text: "\\$" + }; + var _$1 = { + math: "\\_", + text: "\\_" + }; + var require$$1 = { + "#": { + math: "\\#", + text: "\\#" + }, + $: $$1, + "%": { + math: "\\%", + text: "\\%" + }, + "&": { + math: "\\&", + text: "\\&" + }, + "/​": { + text: "{\\slash}" + }, + "<": { + math: "<" + }, + ">": { + math: ">" + }, + "\\": { + math: "\\backslash", + text: "{\\textbackslash}" + }, + "^": { + math: "\\sphat", + text: "\\^" + }, + _: _$1, + "i︠a︡": { + text: "\\t{ia}" + }, + "{": { + math: "\\lbrace", + text: "\\{" + }, + "}": { + math: "\\rbrace", + text: "\\}" + }, + "~": { + math: "\\sptilde", + text: "{\\textasciitilde}" + }, + " ": { + math: "~", + space: true, + text: "~" + }, + "¡": { + text: "{\\textexclamdown}" + }, + "¢": { + math: "\\cent", + text: "{\\textcent}", + textpackages: [ + "textcomp" + ] + }, + "£": { + math: "\\pounds", + text: "{\\textsterling}", + textpackages: [ + "textcomp" + ] + }, + "¤": { + text: "{\\textcurrency}", + textpackages: [ + "textcomp" + ] + }, + "¥": { + math: "\\yen", + text: "{\\textyen}", + textpackages: [ + "textcomp" + ] + }, + "¦": { + text: "{\\textbrokenbar}", + textpackages: [ + "textcomp" + ] + }, + "§": { + text: "{\\textsection}", + textpackages: [ + "textcomp" + ] + }, + "¨": { + math: "\\spddot", + text: "{\\textasciidieresis}" + }, + "©": { + text: "{\\textcopyright}", + textpackages: [ + "textcomp" + ] + }, + "ª": { + text: "{\\textordfeminine}", + textpackages: [ + "textcomp" + ] + }, + "«": { + text: "{\\guillemotleft}" + }, + "¬": { + math: "\\lnot" + }, + "­": { + math: "\\-", + text: "\\-" + }, + "®": { + math: "\\circledR", + text: "{\\textregistered}", + textpackages: [ + "textcomp" + ] + }, + "¯": { + text: "{\\textasciimacron}" + }, + "°": { + math: "^\\circ", + text: "{\\textdegree}", + textpackages: [ + "textcomp" + ] + }, + "±": { + math: "\\pm" + }, + "²": { + math: "^{2}" + }, + "³": { + math: "^{3}" + }, + "´": { + text: "{\\textasciiacute}" + }, + "µ": { + text: "{\\textmu}" + }, + "¶": { + text: "{\\textparagraph}", + textpackages: [ + "textcomp" + ] + }, + "·": { + math: "\\cdot" + }, + "¸": { + text: "{\\c}" + }, + "¹": { + math: "^{1}" + }, + "º": { + text: "{\\textordmasculine}", + textpackages: [ + "textcomp" + ] + }, + "»": { + text: "{\\guillemotright}" + }, + "¼": { + math: "\\frac{1}{4}" + }, + "½": { + math: "\\frac{1}{2}" + }, + "¾": { + math: "\\frac{3}{4}" + }, + "¿": { + text: "{\\textquestiondown}" + }, + "À": { + text: "{\\`A}" + }, + "Á": { + text: "{\\'A}" + }, + "Â": { + text: "{\\^A}" + }, + "Ã": { + text: "{\\~A}" + }, + "Ä": { + text: "{\\\"A}" + }, + "Å": { + text: "{\\AA}" + }, + "Æ": { + text: "{\\AE}" + }, + "Ç": { + text: "{\\c C}" + }, + "È": { + text: "{\\`E}" + }, + "É": { + text: "{\\'E}" + }, + "Ê": { + text: "{\\^E}" + }, + "Ë": { + text: "{\\\"E}" + }, + "Ì": { + text: "{\\`I}" + }, + "Í": { + text: "{\\'I}" + }, + "Î": { + text: "{\\^I}" + }, + "Ï": { + text: "{\\\"I}" + }, + "Ð": { + text: "{\\DH}" + }, + "Ñ": { + text: "{\\~N}" + }, + "Ò": { + text: "{\\`O}" + }, + "Ó": { + text: "{\\'O}" + }, + "Ô": { + text: "{\\^O}" + }, + "Õ": { + text: "{\\~O}" + }, + "Ö": { + text: "{\\\"O}" + }, + "×": { + math: "\\times", + text: "{\\texttimes}" + }, + "Ø": { + text: "{\\O}" + }, + "Ù": { + text: "{\\`U}" + }, + "Ú": { + text: "{\\'U}" + }, + "Û": { + text: "{\\^U}" + }, + "Ü": { + text: "{\\\"U}" + }, + "Ý": { + text: "{\\'Y}" + }, + "Þ": { + text: "{\\TH}" + }, + "ß": { + text: "{\\ss}" + }, + "à": { + text: "{\\`a}" + }, + "á": { + text: "{\\'a}" + }, + "â": { + text: "{\\^a}" + }, + "ã": { + text: "{\\~a}" + }, + "ä": { + text: "{\\\"a}" + }, + "å": { + text: "{\\aa}" + }, + "æ": { + text: "{\\ae}" + }, + "ç": { + text: "{\\c c}" + }, + "è": { + text: "{\\`e}" + }, + "é": { + text: "{\\'e}" + }, + "ê": { + text: "{\\^e}" + }, + "ë": { + text: "{\\\"e}" + }, + "ì": { + text: "{\\`i}" + }, + "í": { + text: "{\\'i}" + }, + "î": { + text: "{\\^i}" + }, + "ï": { + text: "{\\\"i}" + }, + "ð": { + math: "\\eth", + mathpackages: [ + "amssymb", + "arevmath" + ], + text: "{\\dh}" + }, + "ñ": { + text: "{\\~n}" + }, + "ò": { + text: "{\\`o}" + }, + "ó": { + text: "{\\'o}" + }, + "ô": { + text: "{\\^o}" + }, + "õ": { + text: "{\\~o}" + }, + "ö": { + text: "{\\\"o}" + }, + "÷": { + math: "\\div" + }, + "ø": { + text: "{\\o}" + }, + "ù": { + text: "{\\`u}" + }, + "ú": { + text: "{\\'u}" + }, + "û": { + text: "{\\^u}" + }, + "ü": { + text: "{\\\"u}" + }, + "ý": { + text: "{\\'y}" + }, + "þ": { + text: "{\\th}" + }, + "ÿ": { + text: "{\\\"y}" + }, + "Ā": { + text: "{\\=A}" + }, + "ā": { + text: "{\\=a}" + }, + "Ă": { + text: "{\\u A}" + }, + "ă": { + text: "{\\u a}" + }, + "Ą": { + text: "{\\k{A}}" + }, + "ą": { + text: "{\\k{a}}" + }, + "Ć": { + text: "{\\'C}" + }, + "ć": { + text: "{\\'c}" + }, + "Ĉ": { + text: "{\\^C}" + }, + "ĉ": { + text: "{\\^c}" + }, + "Ċ": { + text: "{\\.C}" + }, + "ċ": { + text: "{\\.c}" + }, + "Č": { + text: "{\\v C}" + }, + "č": { + text: "{\\v c}" + }, + "Ď": { + text: "{\\v D}" + }, + "ď": { + text: "{\\v d}" + }, + "Đ": { + text: "{\\DJ}" + }, + "đ": { + text: "{\\dj}" + }, + "Ē": { + text: "{\\=E}" + }, + "ē": { + text: "{\\=e}" + }, + "Ĕ": { + text: "{\\u E}" + }, + "ĕ": { + text: "{\\u e}" + }, + "Ė": { + text: "{\\.E}" + }, + "ė": { + text: "{\\.e}" + }, + "Ę": { + text: "{\\k{E}}" + }, + "ę": { + text: "{\\k{e}}" + }, + "Ě": { + text: "{\\v E}" + }, + "ě": { + text: "{\\v e}" + }, + "Ĝ": { + text: "{\\^G}" + }, + "ĝ": { + text: "{\\^g}" + }, + "Ğ": { + text: "{\\u G}" + }, + "ğ": { + text: "{\\u g}" + }, + "Ġ": { + text: "{\\.G}" + }, + "ġ": { + text: "{\\.g}" + }, + "Ģ": { + text: "{\\c G}" + }, + "ģ": { + text: "{\\c g}" + }, + "Ĥ": { + text: "{\\^H}" + }, + "ĥ": { + text: "{\\^h}" + }, + "Ħ": { + text: "{\\fontencoding{LELA}\\selectfont\\char40}" + }, + "ħ": { + math: "\\Elzxh" + }, + "Ĩ": { + text: "{\\~I}" + }, + "ĩ": { + text: "{\\~i}" + }, + "Ī": { + text: "{\\=I}" + }, + "ī": { + text: "{\\=i}" + }, + "Ĭ": { + text: "{\\u I}" + }, + "ĭ": { + text: "{\\u \\i}" + }, + "Į": { + text: "{\\k{I}}" + }, + "į": { + text: "{\\k{i}}" + }, + "İ": { + text: "{\\.I}" + }, + "ı": { + math: "\\imath", + text: "{\\i}" + }, + "IJ": { + text: "IJ" + }, + "ij": { + text: "ij" + }, + "Ĵ": { + text: "{\\^J}" + }, + "ĵ": { + text: "{\\^\\j}" + }, + "Ķ": { + text: "{\\c K}" + }, + "ķ": { + text: "{\\c k}" + }, + "ĸ": { + text: "{\\fontencoding{LELA}\\selectfont\\char91}" + }, + "Ĺ": { + text: "{\\'L}" + }, + "ĺ": { + text: "{\\'l}" + }, + "Ļ": { + text: "{\\c L}" + }, + "ļ": { + text: "{\\c l}" + }, + "Ľ": { + text: "{\\v L}" + }, + "ľ": { + text: "{\\v l}" + }, + "Ŀ": { + text: "{\\fontencoding{LELA}\\selectfont\\char201}" + }, + "ŀ": { + text: "{\\fontencoding{LELA}\\selectfont\\char202}" + }, + "Ł": { + text: "{\\L}" + }, + "ł": { + text: "{\\l}" + }, + "Ń": { + text: "{\\'N}" + }, + "ń": { + text: "{\\'n}" + }, + "Ņ": { + text: "{\\c N}" + }, + "ņ": { + text: "{\\c n}" + }, + "Ň": { + text: "{\\v N}" + }, + "ň": { + text: "{\\v n}" + }, + "ʼn": { + text: "'n" + }, + "Ŋ": { + text: "{\\NG}" + }, + "ŋ": { + text: "{\\ng}" + }, + "Ō": { + text: "{\\=O}" + }, + "ō": { + text: "{\\=o}" + }, + "Ŏ": { + text: "{\\u O}" + }, + "ŏ": { + text: "{\\u o}" + }, + "Ő": { + text: "{\\H O}" + }, + "ő": { + text: "{\\H o}" + }, + "Œ": { + text: "{\\OE}" + }, + "œ": { + text: "{\\oe}" + }, + "Ŕ": { + text: "{\\'R}" + }, + "ŕ": { + text: "{\\'r}" + }, + "Ŗ": { + text: "{\\c R}" + }, + "ŗ": { + text: "{\\c r}" + }, + "Ř": { + text: "{\\v R}" + }, + "ř": { + text: "{\\v r}" + }, + "Ś": { + text: "{\\'S}" + }, + "ś": { + text: "{\\'s}" + }, + "Ŝ": { + text: "{\\^S}" + }, + "ŝ": { + text: "{\\^s}" + }, + "Ş": { + text: "{\\c S}" + }, + "ş": { + text: "{\\c s}" + }, + "Š": { + text: "{\\v S}" + }, + "š": { + text: "{\\v s}" + }, + "Ţ": { + text: "{\\c T}" + }, + "ţ": { + text: "{\\c t}" + }, + "Ť": { + text: "{\\v T}" + }, + "ť": { + text: "{\\v t}" + }, + "Ŧ": { + text: "{\\fontencoding{LELA}\\selectfont\\char47}" + }, + "ŧ": { + text: "{\\fontencoding{LELA}\\selectfont\\char63}" + }, + "Ũ": { + text: "{\\~U}" + }, + "ũ": { + text: "{\\~u}" + }, + "Ū": { + text: "{\\=U}" + }, + "ū": { + text: "{\\=u}" + }, + "Ŭ": { + text: "{\\u U}" + }, + "ŭ": { + text: "{\\u u}" + }, + "Ů": { + text: "{\\r{U}}" + }, + "ů": { + text: "{\\r{u}}" + }, + "Ű": { + text: "{\\H U}" + }, + "ű": { + text: "{\\H u}" + }, + "Ų": { + text: "{\\k{U}}" + }, + "ų": { + text: "{\\k{u}}" + }, + "Ŵ": { + text: "{\\^W}" + }, + "ŵ": { + text: "{\\^w}" + }, + "Ŷ": { + text: "{\\^Y}" + }, + "ŷ": { + text: "{\\^y}" + }, + "Ÿ": { + text: "{\\\"Y}" + }, + "Ź": { + text: "{\\'Z}" + }, + "ź": { + text: "{\\'z}" + }, + "Ż": { + text: "{\\.Z}" + }, + "ż": { + text: "{\\.z}" + }, + "Ž": { + text: "{\\v Z}" + }, + "ž": { + text: "{\\v z}" + }, + "ſ": { + text: "s" + }, + "ƒ": { + math: "f" + }, + "ƕ": { + text: "{\\texthvlig}" + }, + "ƞ": { + text: "{\\textnrleg}" + }, + "ƪ": { + text: "{\\textesh}" + }, + "Ƶ": { + math: "\\Zbar" + }, + "ƺ": { + text: "{\\fontencoding{LELA}\\selectfont\\char195}" + }, + "ǂ": { + text: "{\\textdoublepipe}" + }, + "Ǎ": { + text: "{\\v A}" + }, + "ǎ": { + text: "{\\v a}" + }, + "Ǐ": { + text: "{\\v I}" + }, + "ǐ": { + text: "{\\v i}" + }, + "Ǒ": { + text: "{\\v O}" + }, + "ǒ": { + text: "{\\v o}" + }, + "Ǔ": { + text: "{\\v U}" + }, + "ǔ": { + text: "{\\v u}" + }, + "Ǧ": { + text: "{\\v G}" + }, + "ǧ": { + text: "{\\v g}" + }, + "Ǩ": { + text: "{\\v K}" + }, + "ǩ": { + text: "{\\v k}" + }, + "Ǫ": { + text: "{\\k{O}}" + }, + "ǫ": { + text: "{\\k{o}}" + }, + "ǰ": { + text: "{\\v j}" + }, + "Ǵ": { + text: "{\\'G}" + }, + "ǵ": { + text: "{\\'g}" + }, + "Ȩ": { + text: "{\\c E}" + }, + "ȩ": { + text: "{\\c e}" + }, + "ȷ": { + math: "\\jmath" + }, + "ɐ": { + math: "\\Elztrna" + }, + "ɒ": { + math: "\\Elztrnsa" + }, + "ɔ": { + math: "\\Elzopeno" + }, + "ɖ": { + math: "\\Elzrtld" + }, + "ɘ": { + text: "{\\fontencoding{LEIP}\\selectfont\\char61}" + }, + "ə": { + math: "\\Elzschwa" + }, + "ɛ": { + math: "\\varepsilon" + }, + "ɡ": { + text: "g" + }, + "ɣ": { + math: "\\Elzpgamma" + }, + "ɤ": { + math: "\\Elzpbgam" + }, + "ɥ": { + math: "\\Elztrnh" + }, + "ɬ": { + math: "\\Elzbtdl" + }, + "ɭ": { + math: "\\Elzrtll" + }, + "ɯ": { + math: "\\Elztrnm" + }, + "ɰ": { + math: "\\Elztrnmlr" + }, + "ɱ": { + math: "\\Elzltlmr" + }, + "ɲ": { + text: "{\\Elzltln}" + }, + "ɳ": { + math: "\\Elzrtln" + }, + "ɷ": { + math: "\\Elzclomeg" + }, + "ɸ": { + text: "{\\textphi}" + }, + "ɹ": { + math: "\\Elztrnr" + }, + "ɺ": { + math: "\\Elztrnrl" + }, + "ɻ": { + math: "\\Elzrttrnr" + }, + "ɼ": { + math: "\\Elzrl" + }, + "ɽ": { + math: "\\Elzrtlr" + }, + "ɾ": { + math: "\\Elzfhr" + }, + "ɿ": { + text: "{\\fontencoding{LEIP}\\selectfont\\char202}" + }, + "ʂ": { + math: "\\Elzrtls" + }, + "ʃ": { + math: "\\Elzesh" + }, + "ʇ": { + math: "\\Elztrnt" + }, + "ʈ": { + math: "\\Elzrtlt" + }, + "ʊ": { + math: "\\Elzpupsil" + }, + "ʋ": { + math: "\\Elzpscrv" + }, + "ʌ": { + math: "\\Elzinvv" + }, + "ʍ": { + math: "\\Elzinvw" + }, + "ʎ": { + math: "\\Elztrny" + }, + "ʐ": { + math: "\\Elzrtlz" + }, + "ʒ": { + math: "\\Elzyogh" + }, + "ʔ": { + math: "\\Elzglst" + }, + "ʕ": { + math: "\\Elzreglst" + }, + "ʖ": { + math: "\\Elzinglst" + }, + "ʞ": { + text: "{\\textturnk}" + }, + "ʤ": { + math: "\\Elzdyogh" + }, + "ʧ": { + math: "\\Elztesh" + }, + "ʰ": { + math: "^{h}", + text: "\\textsuperscript{h}" + }, + "ʲ": { + math: "^{j}", + text: "\\textsuperscript{j}" + }, + "ʳ": { + math: "^{r}", + text: "\\textsuperscript{r}" + }, + "ʷ": { + math: "^{w}", + text: "\\textsuperscript{w}" + }, + "ʸ": { + math: "^{y}", + text: "\\textsuperscript{y}" + }, + "ʹ": { + text: "'" + }, + "ʻ": { + text: "'" + }, + "ʼ": { + text: "'" + }, + "ʽ": { + text: "'" + }, + "ʿ": { + text: "{\\lasp}", + textpackages: [ + "mathscinet" + ] + }, + "ˆ": { + text: "{\\textasciicircum}" + }, + "ˇ": { + text: "{\\textasciicaron}" + }, + "ˈ": { + math: "\\Elzverts" + }, + "ˉ": { + text: "-" + }, + "ˌ": { + math: "\\Elzverti" + }, + "ː": { + math: "\\Elzlmrk" + }, + "ˑ": { + math: "\\Elzhlmrk" + }, + "˒": { + math: "\\Elzsbrhr" + }, + "˓": { + math: "\\Elzsblhr" + }, + "˔": { + math: "\\Elzrais" + }, + "˕": { + math: "\\Elzlow" + }, + "˘": { + text: "{\\textasciibreve}" + }, + "˙": { + text: "{\\textperiodcentered}", + textpackages: [ + "textcomp" + ] + }, + "˚": { + text: "{\\r{}}" + }, + "˛": { + text: "{\\k{}}" + }, + "˜": { + text: "{\\texttildelow}" + }, + "˝": { + text: "{\\H{}}" + }, + "ˡ": { + math: "^{l}", + text: "\\textsuperscript{l}" + }, + "ˢ": { + math: "^{s}", + text: "\\textsuperscript{s}" + }, + "ˣ": { + math: "^{x}", + text: "\\textsuperscript{x}" + }, + "˥": { + text: "\\tone{55}" + }, + "˦": { + text: "\\tone{44}" + }, + "˧": { + text: "\\tone{33}" + }, + "˨": { + text: "\\tone{22}" + }, + "˩": { + text: "\\tone{11}" + }, + "̀": { + math: "\\grave", + combiningdiacritic: true, + text: "\\`" + }, + "̀̄": { + text: "{\\textgravemacron}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̄̀": { + text: "{\\textgravemacron}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̀̇": { + text: "{\\textgravedot}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̇̀": { + text: "{\\textgravedot}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "́": { + math: "\\acute", + combiningdiacritic: true, + text: "\\'" + }, + "́̄": { + text: "{\\textacutemacron}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̄́": { + text: "{\\textacutemacron}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "́̌": { + text: "{\\textacutewedge}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̌́": { + text: "{\\textacutewedge}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̂": { + math: "\\hat", + combiningdiacritic: true, + text: "\\^" + }, + "̂̇": { + text: "{\\textcircumdot}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̇̂": { + text: "{\\textcircumdot}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̃": { + math: "\\tilde", + combiningdiacritic: true, + text: "\\~" + }, + "̃̇": { + text: "{\\texttildedot}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̇̃": { + text: "{\\texttildedot}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̄": { + math: "\\bar", + combiningdiacritic: true, + text: "\\=" + }, + "̅": { + math: "\\overline", + combiningdiacritic: true + }, + "̆": { + math: "\\breve", + combiningdiacritic: true, + text: "{\\u}" + }, + "̆̄": { + text: "{\\textbrevemacron}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̄̆": { + text: "{\\textbrevemacron}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̇": { + math: "\\dot", + combiningdiacritic: true, + text: "\\." + }, + "̇́": { + text: "{\\textdotacute}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "́̇": { + text: "{\\textdotacute}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̇̆": { + text: "{\\textdotbreve}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̆̇": { + text: "{\\textdotbreve}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̈": { + math: "\\ddot", + combiningdiacritic: true, + text: "\\\"" + }, + "̉": { + math: "\\ovhook" + }, + "̊": { + math: "\\mathring", + combiningdiacritic: true, + text: "{\\r}" + }, + "̊̄": { + text: "{\\textringmacron}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̄̊": { + text: "{\\textringmacron}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̋": { + text: "{\\H}", + combiningdiacritic: true + }, + "̌": { + math: "\\check", + text: "{\\v}", + combiningdiacritic: true + }, + "̍": { + text: "{\\textvbaraccent}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̎": { + text: "{\\textdoublevbaraccent}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̏": { + text: "{\\textdoublegrave}", + combiningdiacritic: true + }, + "̐": { + text: "{\\textdotbreve}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̑": { + text: "{\\fontencoding{LECO}\\selectfont\\char177}" + }, + "̒": { + math: "\\oturnedcomma" + }, + "̕": { + math: "\\ocommatopright" + }, + "̖": { + text: "{\\textsubgrave}", + combiningdiacritic: true + }, + "̘": { + text: "{\\textadvancing}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̙": { + text: "{\\textretracting}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̚": { + math: "\\droang", + text: "{\\textcorner}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̜": { + text: "{\\textsublhalfring}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̝": { + text: "{\\textraising}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̞": { + text: "{\\textlowering}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̟": { + text: "{\\textsubplus}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̡": { + math: "\\Elzpalh" + }, + "̢": { + text: "{\\Elzrh}" + }, + "̣": { + text: "{\\d}", + combiningdiacritic: true + }, + "̤": { + text: "{\\textsubumlaut}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̥": { + text: "{\\textsubring}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̧": { + text: "{\\c}", + combiningdiacritic: true + }, + "̨": { + text: "{\\k}", + combiningdiacritic: true + }, + "̩": { + text: "{\\textsyllabic}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̪": { + math: "\\Elzsbbrg", + text: "{\\textsubbridge}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̫": { + text: "{\\fontencoding{LECO}\\selectfont\\char203}" + }, + "̬": { + text: "{\\textsubwedge}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̯": { + text: "{\\textsubarch}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̰": { + math: "\\utilde", + text: "{\\textsubtilde}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̱": { + math: "\\underbar", + combiningdiacritic: true, + text: "{\\textsubbar}", + textpackages: [ + "tipa" + ] + }, + "̲": { + math: "\\underline" + }, + "̴": { + text: "{\\textsuperimposetilde}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̵": { + text: "{\\Elzxl}" + }, + "̶": { + text: "{\\Elzbar}" + }, + "̷": { + text: "{\\fontencoding{LECO}\\selectfont\\char215}" + }, + "̸": { + math: "\\not" + }, + "̹": { + text: "{\\textsubrhalfring}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̺": { + text: "{\\textinvsubbridge}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̻": { + text: "{\\textsubsquare}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̼": { + text: "{\\textseagull}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̽": { + text: "{\\textovercross}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "͡": { + text: "{\\fontencoding{LECO}\\selectfont\\char225}" + }, + "ʹ": { + text: "'" + }, + "͵": { + text: "," + }, + ";": { + text: ";" + }, + "Ά": { + text: "{\\'A}" + }, + "Έ": { + text: "{\\'E}" + }, + "Ή": { + text: "{\\'H}" + }, + "Ί": { + text: "{\\'{}I}" + }, + "Ό": { + text: "{\\'{}O}" + }, + "Ύ": { + math: "\\mathrm{'Y}" + }, + "Ώ": { + math: "\\mathrm{'\\Omega}" + }, + "ΐ": { + math: "\\acute{\\ddot{\\iota}}" + }, + "Α": { + math: "A" + }, + "Β": { + math: "B" + }, + "Γ": { + math: "\\Gamma" + }, + "Δ": { + math: "\\Delta" + }, + "Ε": { + math: "E" + }, + "Ζ": { + math: "Z" + }, + "Η": { + math: "H" + }, + "Θ": { + math: "\\Theta" + }, + "Ι": { + math: "I" + }, + "Κ": { + math: "K" + }, + "Λ": { + math: "\\Lambda" + }, + "Μ": { + math: "M" + }, + "Ν": { + math: "N" + }, + "Ξ": { + math: "\\Xi" + }, + "Ο": { + math: "O" + }, + "Π": { + math: "\\Pi" + }, + "Ρ": { + math: "P" + }, + "Σ": { + math: "\\Sigma" + }, + "Τ": { + math: "T" + }, + "Υ": { + math: "\\Upsilon" + }, + "Φ": { + math: "\\Phi" + }, + "Χ": { + math: "X" + }, + "Ψ": { + math: "\\Psi" + }, + "Ω": { + math: "\\Omega" + }, + "Ϊ": { + math: "\\mathrm{\\ddot{I}}" + }, + "Ϋ": { + math: "\\mathrm{\\ddot{Y}}" + }, + "ά": { + text: "{\\'$\\alpha$}" + }, + "έ": { + math: "\\acute{\\epsilon}" + }, + "ή": { + math: "\\acute{\\eta}" + }, + "ί": { + math: "\\acute{\\iota}" + }, + "ΰ": { + math: "\\acute{\\ddot{\\upsilon}}" + }, + "α": { + math: "\\alpha" + }, + "β": { + math: "\\beta" + }, + "γ": { + math: "\\gamma" + }, + "δ": { + math: "\\delta" + }, + "ε": { + math: "\\epsilon" + }, + "ζ": { + math: "\\zeta" + }, + "η": { + math: "\\eta" + }, + "θ": { + math: "\\theta", + text: "{\\texttheta}" + }, + "ι": { + math: "\\iota" + }, + "κ": { + math: "\\kappa" + }, + "λ": { + math: "\\lambda" + }, + "μ": { + math: "\\mu" + }, + "ν": { + math: "\\nu" + }, + "ξ": { + math: "\\xi" + }, + "ο": { + math: "o" + }, + "π": { + math: "\\pi" + }, + "ρ": { + math: "\\rho" + }, + "ς": { + math: "\\varsigma" + }, + "σ": { + math: "\\sigma" + }, + "τ": { + math: "\\tau" + }, + "υ": { + math: "\\upsilon" + }, + "φ": { + math: "\\varphi" + }, + "χ": { + math: "\\chi" + }, + "ψ": { + math: "\\psi" + }, + "ω": { + math: "\\omega" + }, + "ϊ": { + math: "\\ddot{\\iota}" + }, + "ϋ": { + math: "\\ddot{\\upsilon}" + }, + "ό": { + text: "{\\'o}" + }, + "ύ": { + math: "\\acute{\\upsilon}" + }, + "ώ": { + math: "\\acute{\\omega}" + }, + "ϐ": { + math: "\\varbeta", + text: "\\Pisymbol{ppi022}{87}" + }, + "ϑ": { + math: "\\vartheta", + text: "{\\textvartheta}" + }, + "ϒ": { + math: "\\Upsilon" + }, + "ϕ": { + math: "\\phi" + }, + "ϖ": { + math: "\\varpi" + }, + "Ϙ": { + math: "\\Qoppa" + }, + "ϙ": { + math: "\\qoppa" + }, + "Ϛ": { + math: "\\Stigma" + }, + "ϛ": { + math: "\\stigma" + }, + "Ϝ": { + math: "\\Digamma" + }, + "ϝ": { + math: "\\digamma" + }, + "Ϟ": { + math: "\\Koppa" + }, + "ϟ": { + math: "\\koppa" + }, + "Ϡ": { + math: "\\Sampi" + }, + "ϡ": { + math: "\\sampi" + }, + "ϰ": { + math: "\\varkappa" + }, + "ϱ": { + math: "\\varrho" + }, + "ϴ": { + math: "\\upvarTheta", + text: "{\\textTheta}" + }, + "ϵ": { + math: "\\epsilon" + }, + "϶": { + math: "\\backepsilon" + }, + "Ё": { + text: "{\\cyrchar\\CYRYO}" + }, + "Ђ": { + text: "{\\cyrchar\\CYRDJE}" + }, + "Ѓ": { + text: "{\\cyrchar{\\'\\CYRG}}" + }, + "Є": { + text: "{\\cyrchar\\CYRIE}" + }, + "Ѕ": { + text: "{\\cyrchar\\CYRDZE}" + }, + "І": { + text: "{\\cyrchar\\CYRII}" + }, + "Ї": { + text: "{\\cyrchar\\CYRYI}" + }, + "Ј": { + text: "{\\cyrchar\\CYRJE}" + }, + "Љ": { + text: "{\\cyrchar\\CYRLJE}" + }, + "Њ": { + text: "{\\cyrchar\\CYRNJE}" + }, + "Ћ": { + text: "{\\cyrchar\\CYRTSHE}" + }, + "Ќ": { + text: "{\\cyrchar{\\'\\CYRK}}" + }, + "Ў": { + text: "{\\cyrchar\\CYRUSHRT}" + }, + "Џ": { + text: "{\\cyrchar\\CYRDZHE}" + }, + "А": { + text: "{\\cyrchar\\CYRA}" + }, + "Б": { + text: "{\\cyrchar\\CYRB}" + }, + "В": { + text: "{\\cyrchar\\CYRV}" + }, + "Г": { + text: "{\\cyrchar\\CYRG}" + }, + "Д": { + text: "{\\cyrchar\\CYRD}" + }, + "Е": { + text: "{\\cyrchar\\CYRE}" + }, + "Ж": { + text: "{\\cyrchar\\CYRZH}" + }, + "З": { + text: "{\\cyrchar\\CYRZ}" + }, + "И": { + text: "{\\cyrchar\\CYRI}" + }, + "Й": { + text: "{\\cyrchar\\CYRISHRT}" + }, + "К": { + text: "{\\cyrchar\\CYRK}" + }, + "Л": { + text: "{\\cyrchar\\CYRL}" + }, + "М": { + text: "{\\cyrchar\\CYRM}" + }, + "Н": { + text: "{\\cyrchar\\CYRN}" + }, + "О": { + text: "{\\cyrchar\\CYRO}" + }, + "П": { + text: "{\\cyrchar\\CYRP}" + }, + "Р": { + text: "{\\cyrchar\\CYRR}" + }, + "С": { + text: "{\\cyrchar\\CYRS}" + }, + "Т": { + text: "{\\cyrchar\\CYRT}" + }, + "У": { + text: "{\\cyrchar\\CYRU}" + }, + "Ф": { + text: "{\\cyrchar\\CYRF}" + }, + "Х": { + text: "{\\cyrchar\\CYRH}" + }, + "Ц": { + text: "{\\cyrchar\\CYRC}" + }, + "Ч": { + text: "{\\cyrchar\\CYRCH}" + }, + "Ш": { + text: "{\\cyrchar\\CYRSH}" + }, + "Щ": { + text: "{\\cyrchar\\CYRSHCH}" + }, + "Ъ": { + text: "{\\cyrchar\\CYRHRDSN}" + }, + "Ы": { + text: "{\\cyrchar\\CYRERY}" + }, + "Ь": { + text: "{\\cyrchar\\CYRSFTSN}" + }, + "Э": { + text: "{\\cyrchar\\CYREREV}" + }, + "Ю": { + text: "{\\cyrchar\\CYRYU}" + }, + "Я": { + text: "{\\cyrchar\\CYRYA}" + }, + "а": { + text: "{\\cyrchar\\cyra}" + }, + "б": { + text: "{\\cyrchar\\cyrb}" + }, + "в": { + text: "{\\cyrchar\\cyrv}" + }, + "г": { + text: "{\\cyrchar\\cyrg}" + }, + "д": { + text: "{\\cyrchar\\cyrd}" + }, + "е": { + text: "{\\cyrchar\\cyre}" + }, + "ж": { + text: "{\\cyrchar\\cyrzh}" + }, + "з": { + text: "{\\cyrchar\\cyrz}" + }, + "и": { + text: "{\\cyrchar\\cyri}" + }, + "й": { + text: "{\\cyrchar\\cyrishrt}" + }, + "к": { + text: "{\\cyrchar\\cyrk}" + }, + "л": { + text: "{\\cyrchar\\cyrl}" + }, + "м": { + text: "{\\cyrchar\\cyrm}" + }, + "н": { + text: "{\\cyrchar\\cyrn}" + }, + "о": { + text: "{\\cyrchar\\cyro}" + }, + "п": { + text: "{\\cyrchar\\cyrp}" + }, + "р": { + text: "{\\cyrchar\\cyrr}" + }, + "с": { + text: "{\\cyrchar\\cyrs}" + }, + "т": { + text: "{\\cyrchar\\cyrt}" + }, + "у": { + text: "{\\cyrchar\\cyru}" + }, + "ф": { + text: "{\\cyrchar\\cyrf}" + }, + "х": { + text: "{\\cyrchar\\cyrh}" + }, + "ц": { + text: "{\\cyrchar\\cyrc}" + }, + "ч": { + text: "{\\cyrchar\\cyrch}" + }, + "ш": { + text: "{\\cyrchar\\cyrsh}" + }, + "щ": { + text: "{\\cyrchar\\cyrshch}" + }, + "ъ": { + text: "{\\cyrchar\\cyrhrdsn}" + }, + "ы": { + text: "{\\cyrchar\\cyrery}" + }, + "ь": { + text: "{\\cyrchar\\cyrsftsn}" + }, + "э": { + text: "{\\cyrchar\\cyrerev}" + }, + "ю": { + text: "{\\cyrchar\\cyryu}" + }, + "я": { + text: "{\\cyrchar\\cyrya}" + }, + "ё": { + text: "{\\cyrchar\\cyryo}" + }, + "ђ": { + text: "{\\cyrchar\\cyrdje}" + }, + "ѓ": { + text: "{\\cyrchar{\\'\\cyrg}}" + }, + "є": { + text: "{\\cyrchar\\cyrie}" + }, + "ѕ": { + text: "{\\cyrchar\\cyrdze}" + }, + "і": { + text: "{\\cyrchar\\cyrii}" + }, + "ї": { + text: "{\\cyrchar\\cyryi}" + }, + "ј": { + text: "{\\cyrchar\\cyrje}" + }, + "љ": { + text: "{\\cyrchar\\cyrlje}" + }, + "њ": { + text: "{\\cyrchar\\cyrnje}" + }, + "ћ": { + text: "{\\cyrchar\\cyrtshe}" + }, + "ќ": { + text: "{\\cyrchar{\\'\\cyrk}}" + }, + "ў": { + text: "{\\cyrchar\\cyrushrt}" + }, + "џ": { + text: "{\\cyrchar\\cyrdzhe}" + }, + "Ѡ": { + text: "{\\cyrchar\\CYROMEGA}" + }, + "ѡ": { + text: "{\\cyrchar\\cyromega}" + }, + "Ѣ": { + text: "{\\cyrchar\\CYRYAT}" + }, + "Ѥ": { + text: "{\\cyrchar\\CYRIOTE}" + }, + "ѥ": { + text: "{\\cyrchar\\cyriote}" + }, + "Ѧ": { + text: "{\\cyrchar\\CYRLYUS}" + }, + "ѧ": { + text: "{\\cyrchar\\cyrlyus}" + }, + "Ѩ": { + text: "{\\cyrchar\\CYRIOTLYUS}" + }, + "ѩ": { + text: "{\\cyrchar\\cyriotlyus}" + }, + "Ѫ": { + text: "{\\cyrchar\\CYRBYUS}" + }, + "Ѭ": { + text: "{\\cyrchar\\CYRIOTBYUS}" + }, + "ѭ": { + text: "{\\cyrchar\\cyriotbyus}" + }, + "Ѯ": { + text: "{\\cyrchar\\CYRKSI}" + }, + "ѯ": { + text: "{\\cyrchar\\cyrksi}" + }, + "Ѱ": { + text: "{\\cyrchar\\CYRPSI}" + }, + "ѱ": { + text: "{\\cyrchar\\cyrpsi}" + }, + "Ѳ": { + text: "{\\cyrchar\\CYRFITA}" + }, + "Ѵ": { + text: "{\\cyrchar\\CYRIZH}" + }, + "Ѹ": { + text: "{\\cyrchar\\CYRUK}" + }, + "ѹ": { + text: "{\\cyrchar\\cyruk}" + }, + "Ѻ": { + text: "{\\cyrchar\\CYROMEGARND}" + }, + "ѻ": { + text: "{\\cyrchar\\cyromegarnd}" + }, + "Ѽ": { + text: "{\\cyrchar\\CYROMEGATITLO}" + }, + "ѽ": { + text: "{\\cyrchar\\cyromegatitlo}" + }, + "Ѿ": { + text: "{\\cyrchar\\CYROT}" + }, + "ѿ": { + text: "{\\cyrchar\\cyrot}" + }, + "Ҁ": { + text: "{\\cyrchar\\CYRKOPPA}" + }, + "ҁ": { + text: "{\\cyrchar\\cyrkoppa}" + }, + "҂": { + text: "{\\cyrchar\\cyrthousands}" + }, + "҈": { + text: "{\\cyrchar\\cyrhundredthousands}" + }, + "҉": { + text: "{\\cyrchar\\cyrmillions}" + }, + "Ҍ": { + text: "{\\cyrchar\\CYRSEMISFTSN}" + }, + "ҍ": { + text: "{\\cyrchar\\cyrsemisftsn}" + }, + "Ҏ": { + text: "{\\cyrchar\\CYRRTICK}" + }, + "ҏ": { + text: "{\\cyrchar\\cyrrtick}" + }, + "Ґ": { + text: "{\\cyrchar\\CYRGUP}" + }, + "ґ": { + text: "{\\cyrchar\\cyrgup}" + }, + "Ғ": { + text: "{\\cyrchar\\CYRGHCRS}" + }, + "ғ": { + text: "{\\cyrchar\\cyrghcrs}" + }, + "Ҕ": { + text: "{\\cyrchar\\CYRGHK}" + }, + "ҕ": { + text: "{\\cyrchar\\cyrghk}" + }, + "Җ": { + text: "{\\cyrchar\\CYRZHDSC}" + }, + "җ": { + text: "{\\cyrchar\\cyrzhdsc}" + }, + "Ҙ": { + text: "{\\cyrchar\\CYRZDSC}" + }, + "ҙ": { + text: "{\\cyrchar\\cyrzdsc}" + }, + "Қ": { + text: "{\\cyrchar\\CYRKDSC}" + }, + "қ": { + text: "{\\cyrchar\\cyrkdsc}" + }, + "Ҝ": { + text: "{\\cyrchar\\CYRKVCRS}" + }, + "ҝ": { + text: "{\\cyrchar\\cyrkvcrs}" + }, + "Ҟ": { + text: "{\\cyrchar\\CYRKHCRS}" + }, + "ҟ": { + text: "{\\cyrchar\\cyrkhcrs}" + }, + "Ҡ": { + text: "{\\cyrchar\\CYRKBEAK}" + }, + "ҡ": { + text: "{\\cyrchar\\cyrkbeak}" + }, + "Ң": { + text: "{\\cyrchar\\CYRNDSC}" + }, + "ң": { + text: "{\\cyrchar\\cyrndsc}" + }, + "Ҥ": { + text: "{\\cyrchar\\CYRNG}" + }, + "ҥ": { + text: "{\\cyrchar\\cyrng}" + }, + "Ҧ": { + text: "{\\cyrchar\\CYRPHK}" + }, + "ҧ": { + text: "{\\cyrchar\\cyrphk}" + }, + "Ҩ": { + text: "{\\cyrchar\\CYRABHHA}" + }, + "ҩ": { + text: "{\\cyrchar\\cyrabhha}" + }, + "Ҫ": { + text: "{\\cyrchar\\CYRSDSC}" + }, + "ҫ": { + text: "{\\cyrchar\\cyrsdsc}" + }, + "Ҭ": { + text: "{\\cyrchar\\CYRTDSC}" + }, + "ҭ": { + text: "{\\cyrchar\\cyrtdsc}" + }, + "Ү": { + text: "{\\cyrchar\\CYRY}" + }, + "ү": { + text: "{\\cyrchar\\cyry}" + }, + "Ұ": { + text: "{\\cyrchar\\CYRYHCRS}" + }, + "ұ": { + text: "{\\cyrchar\\cyryhcrs}" + }, + "Ҳ": { + text: "{\\cyrchar\\CYRHDSC}" + }, + "ҳ": { + text: "{\\cyrchar\\cyrhdsc}" + }, + "Ҵ": { + text: "{\\cyrchar\\CYRTETSE}" + }, + "ҵ": { + text: "{\\cyrchar\\cyrtetse}" + }, + "Ҷ": { + text: "{\\cyrchar\\CYRCHRDSC}" + }, + "ҷ": { + text: "{\\cyrchar\\cyrchrdsc}" + }, + "Ҹ": { + text: "{\\cyrchar\\CYRCHVCRS}" + }, + "ҹ": { + text: "{\\cyrchar\\cyrchvcrs}" + }, + "Һ": { + text: "{\\cyrchar\\CYRSHHA}" + }, + "һ": { + text: "{\\cyrchar\\cyrshha}" + }, + "Ҽ": { + text: "{\\cyrchar\\CYRABHCH}" + }, + "ҽ": { + text: "{\\cyrchar\\cyrabhch}" + }, + "Ҿ": { + text: "{\\cyrchar\\CYRABHCHDSC}" + }, + "ҿ": { + text: "{\\cyrchar\\cyrabhchdsc}" + }, + "Ӏ": { + text: "{\\cyrchar\\CYRpalochka}" + }, + "Ӄ": { + text: "{\\cyrchar\\CYRKHK}" + }, + "ӄ": { + text: "{\\cyrchar\\cyrkhk}" + }, + "Ӈ": { + text: "{\\cyrchar\\CYRNHK}" + }, + "ӈ": { + text: "{\\cyrchar\\cyrnhk}" + }, + "Ӌ": { + text: "{\\cyrchar\\CYRCHLDSC}" + }, + "ӌ": { + text: "{\\cyrchar\\cyrchldsc}" + }, + "Ӕ": { + text: "{\\cyrchar\\CYRAE}" + }, + "ӕ": { + text: "{\\cyrchar\\cyrae}" + }, + "Ә": { + text: "{\\cyrchar\\CYRSCHWA}" + }, + "ә": { + text: "{\\cyrchar\\cyrschwa}" + }, + "Ӡ": { + text: "{\\cyrchar\\CYRABHDZE}" + }, + "ӡ": { + text: "{\\cyrchar\\cyrabhdze}" + }, + "Ө": { + text: "{\\cyrchar\\CYROTLD}" + }, + "ө": { + text: "{\\cyrchar\\cyrotld}" + }, + "ࡱ": { + math: "\\\\backslash" + }, + "ᵃ": { + math: "^{a}", + text: "\\textsuperscript{a}" + }, + "ᵇ": { + math: "^{b}", + text: "\\textsuperscript{b}" + }, + "ᵈ": { + math: "^{d}", + text: "\\textsuperscript{d}" + }, + "ᵉ": { + math: "^{e}", + text: "\\textsuperscript{e}" + }, + "ᵍ": { + math: "^{g}", + text: "\\textsuperscript{g}" + }, + "ᵏ": { + math: "^{k}", + text: "\\textsuperscript{k}" + }, + "ᵐ": { + math: "^{m}", + text: "\\textsuperscript{m}" + }, + "ᵒ": { + math: "^{o}", + text: "\\textsuperscript{o}" + }, + "ᵖ": { + math: "^{p}", + text: "\\textsuperscript{p}" + }, + "ᵗ": { + math: "^{t}", + text: "\\textsuperscript{t}" + }, + "ᵘ": { + math: "^{u}", + text: "\\textsuperscript{u}" + }, + "ᵛ": { + math: "^{v}", + text: "\\textsuperscript{v}" + }, + "ᶜ": { + math: "^{c}", + text: "\\textsuperscript{c}" + }, + "ᶠ": { + math: "^{f}", + text: "\\textsuperscript{f}" + }, + "ᶻ": { + math: "^{z}", + text: "\\textsuperscript{z}" + }, + "Ḃ": { + text: "{\\.B}" + }, + "ḃ": { + text: "{\\.b}" + }, + "Ḅ": { + text: "{\\d B}" + }, + "ḅ": { + text: "{\\d b}" + }, + "Ḇ": { + text: "{\\b B}" + }, + "ḇ": { + text: "{\\b b}" + }, + "Ḋ": { + text: "{\\.D}" + }, + "ḋ": { + text: "{\\.d}" + }, + "Ḍ": { + text: "{\\d D}" + }, + "ḍ": { + text: "{\\d d}" + }, + "Ḏ": { + text: "{\\b D}" + }, + "ḏ": { + text: "{\\b d}" + }, + "Ḑ": { + text: "{\\c D}" + }, + "ḑ": { + text: "{\\c d}" + }, + "Ḝ": { + text: "{\\c{\\u{E}}}" + }, + "ḝ": { + text: "{\\c{\\u{e}}}" + }, + "Ḟ": { + text: "{\\.F}" + }, + "ḟ": { + text: "{\\.f}" + }, + "Ḡ": { + text: "{\\=G}" + }, + "ḡ": { + text: "{\\=g}" + }, + "Ḣ": { + text: "{\\.H}" + }, + "ḣ": { + text: "{\\.h}" + }, + "Ḥ": { + text: "{\\d H}" + }, + "ḥ": { + text: "{\\d h}" + }, + "Ḧ": { + text: "{\\\"H}" + }, + "ḧ": { + text: "{\\\"h}" + }, + "Ḩ": { + text: "{\\c H}" + }, + "ḩ": { + text: "{\\c h}" + }, + "Ḱ": { + text: "{\\'K}" + }, + "ḱ": { + text: "{\\'k}" + }, + "Ḳ": { + text: "{\\d K}" + }, + "ḳ": { + text: "{\\d k}" + }, + "Ḵ": { + text: "{\\b K}" + }, + "ḵ": { + text: "{\\b k}" + }, + "Ḷ": { + text: "{\\d L}" + }, + "ḷ": { + text: "{\\d l}" + }, + "Ḻ": { + text: "{\\b L}" + }, + "ḻ": { + text: "{\\b l}" + }, + "Ḿ": { + text: "{\\'M}" + }, + "ḿ": { + text: "{\\'m}" + }, + "Ṁ": { + text: "{\\.M}" + }, + "ṁ": { + text: "{\\.m}" + }, + "Ṃ": { + text: "{\\d M}" + }, + "ṃ": { + text: "{\\d m}" + }, + "Ṅ": { + text: "{\\.N}" + }, + "ṅ": { + text: "{\\.n}" + }, + "Ṇ": { + text: "{\\d N}" + }, + "ṇ": { + text: "{\\d n}" + }, + "Ṉ": { + text: "{\\b N}" + }, + "ṉ": { + text: "{\\b n}" + }, + "Ṕ": { + text: "{\\'P}" + }, + "ṕ": { + text: "{\\'p}" + }, + "Ṗ": { + text: "{\\.P}" + }, + "ṗ": { + text: "{\\.p}" + }, + "Ṙ": { + text: "{\\.R}" + }, + "ṙ": { + text: "{\\.r}" + }, + "Ṛ": { + text: "{\\d R}" + }, + "ṛ": { + text: "{\\d r}" + }, + "Ṟ": { + text: "{\\b R}" + }, + "ṟ": { + text: "{\\b r}" + }, + "Ṡ": { + text: "{\\.S}" + }, + "ṡ": { + text: "{\\.s}" + }, + "Ṣ": { + text: "{\\d S}" + }, + "ṣ": { + text: "{\\d s}" + }, + "Ṫ": { + text: "{\\.T}" + }, + "ṫ": { + text: "{\\.t}" + }, + "Ṭ": { + text: "{\\d T}" + }, + "ṭ": { + text: "{\\d t}" + }, + "Ṯ": { + text: "{\\b T}" + }, + "ṯ": { + text: "{\\b t}" + }, + "Ṽ": { + text: "{\\~V}" + }, + "ṽ": { + text: "{\\~v}" + }, + "Ṿ": { + text: "{\\d V}" + }, + "ṿ": { + text: "{\\d v}" + }, + "Ẁ": { + text: "{\\`W}" + }, + "ẁ": { + text: "{\\`w}" + }, + "Ẃ": { + text: "{\\'W}" + }, + "ẃ": { + text: "{\\'w}" + }, + "Ẅ": { + text: "{\\\"W}" + }, + "ẅ": { + text: "{\\\"w}" + }, + "Ẇ": { + text: "{\\.W}" + }, + "ẇ": { + text: "{\\.w}" + }, + "Ẉ": { + text: "{\\d W}" + }, + "ẉ": { + text: "{\\d w}" + }, + "Ẋ": { + text: "{\\.X}" + }, + "ẋ": { + text: "{\\.x}" + }, + "Ẍ": { + text: "{\\\"X}" + }, + "ẍ": { + text: "{\\\"x}" + }, + "Ẏ": { + text: "{\\.Y}" + }, + "ẏ": { + text: "{\\.y}" + }, + "Ẑ": { + text: "{\\^Z}" + }, + "ẑ": { + text: "{\\^z}" + }, + "Ẓ": { + text: "{\\d Z}" + }, + "ẓ": { + text: "{\\d z}" + }, + "Ẕ": { + text: "{\\b Z}" + }, + "ẕ": { + text: "{\\b z}" + }, + "ẖ": { + text: "{\\b h}" + }, + "ẗ": { + text: "{\\\"t}" + }, + "ẘ": { + text: "{\\r{w}}" + }, + "ẙ": { + text: "{\\r{y}}" + }, + "Ạ": { + text: "{\\d A}" + }, + "ạ": { + text: "{\\d a}" + }, + "Ẹ": { + text: "{\\d E}" + }, + "ẹ": { + text: "{\\d e}" + }, + "Ẽ": { + text: "{\\~E}" + }, + "ẽ": { + text: "{\\~e}" + }, + "Ị": { + text: "{\\d I}" + }, + "ị": { + text: "{\\d i}" + }, + "Ọ": { + text: "{\\d O}" + }, + "ọ": { + text: "{\\d o}" + }, + "Ụ": { + text: "{\\d U}" + }, + "ụ": { + text: "{\\d u}" + }, + "Ỳ": { + text: "{\\`Y}" + }, + "ỳ": { + text: "{\\`y}" + }, + "Ỵ": { + text: "{\\d Y}" + }, + "ỵ": { + text: "{\\d y}" + }, + "Ỹ": { + text: "{\\~Y}" + }, + "ỹ": { + text: "{\\~y}" + }, + " ": { + text: " ", + space: true + }, + " ": { + math: "\\quad", + space: true + }, + " ": { + text: "\\hspace{0.6em}", + space: true + }, + " ": { + math: "\\quad", + space: true, + text: "\\hspace{1em}" + }, + " ": { + text: "\\;", + space: true + }, + " ": { + text: "\\hspace{0.25em}", + space: true + }, + " ": { + text: "\\hspace{0.166em}", + space: true + }, + " ": { + text: "\\hphantom{0}", + space: true + }, + " ": { + text: "\\hphantom{,}", + space: true + }, + " ": { + text: "\\,", + space: true + }, + " ": { + math: "\\mkern1mu", + space: true + }, + "​": { + text: "{\\mbox}", + space: true + }, + "‌": { + text: "{\\aftergroup\\ignorespaces}" + }, + "‐": { + text: "-" + }, + "‑": { + text: "-" + }, + "‒": { + text: "-" + }, + "–": { + text: "{\\textendash}" + }, + "—": { + text: "{\\textemdash}" + }, + "―": { + math: "\\horizbar", + text: "\\rule{1em}{1pt}" + }, + "‖": { + math: "\\Vert" + }, + "‗": { + math: "\\twolowline" + }, + "‘": { + text: "`" + }, + "’": { + text: "'" + }, + "‚": { + text: "," + }, + "‛": { + math: "\\Elzreapos" + }, + "“": { + text: "``" + }, + "”": { + text: "''" + }, + "„": { + text: ",," + }, + "‟": { + text: "{\\quotedblbase}" + }, + "†": { + math: "\\dagger", + text: "{\\textdagger}", + textpackages: [ + "textcomp" + ] + }, + "‡": { + math: "\\ddagger", + text: "{\\textdaggerdbl}", + textpackages: [ + "textcomp" + ] + }, + "•": { + math: "\\bullet", + text: "{\\textbullet}", + textpackages: [ + "textcomp" + ] + }, + "‣": { + text: ">" + }, + "․": { + text: "." + }, + "‥": { + math: "\\enleadertwodots", + text: ".." + }, + "…": { + math: "\\ldots", + text: "{\\ldots}" + }, + "‧": { + text: "-" + }, + " ": { + text: " ", + space: true + }, + "‰": { + text: "{\\textperthousand}", + textpackages: [ + "textcomp" + ] + }, + "‱": { + text: "{\\textpertenthousand}", + textpackages: [ + "textcomp" + ] + }, + "′": { + math: "{'}" + }, + "″": { + math: "{''}" + }, + "‴": { + math: "{'''}" + }, + "‵": { + math: "\\backprime" + }, + "‶": { + math: "\\backdprime" + }, + "‷": { + math: "\\backtrprime" + }, + "‸": { + math: "\\caretinsert" + }, + "‹": { + text: "{\\guilsinglleft}" + }, + "›": { + text: "{\\guilsinglright}" + }, + "‼": { + math: "\\Exclam" + }, + "‾": { + text: "-" + }, + "⁃": { + math: "\\hyphenbullet" + }, + "⁄": { + math: "\\fracslash" + }, + "⁇": { + math: "\\Question" + }, + "⁈": { + text: "?!" + }, + "⁉": { + text: "!?" + }, + "⁊": { + text: "7" + }, + "⁐": { + math: "\\closure" + }, + "⁗": { + math: "''''" + }, + " ": { + math: "\\:", + space: true, + text: "\\:" + }, + "⁠": { + text: "{\\nolinebreak}" + }, + "⁰": { + math: "^{0}" + }, + "ⁱ": { + math: "^{i}", + text: "\\textsuperscript{i}" + }, + "⁴": { + math: "^{4}" + }, + "⁵": { + math: "^{5}" + }, + "⁶": { + math: "^{6}" + }, + "⁷": { + math: "^{7}" + }, + "⁸": { + math: "^{8}" + }, + "⁹": { + math: "^{9}" + }, + "⁺": { + math: "^{+}" + }, + "⁻": { + math: "^{-}" + }, + "⁼": { + math: "^{=}" + }, + "⁽": { + math: "^{(}" + }, + "⁾": { + math: "^{)}" + }, + "ⁿ": { + math: "^{n}", + text: "\\textsuperscript{n}" + }, + "₀": { + math: "_{0}" + }, + "₁": { + math: "_{1}" + }, + "₂": { + math: "_{2}" + }, + "₃": { + math: "_{3}" + }, + "₄": { + math: "_{4}" + }, + "₅": { + math: "_{5}" + }, + "₆": { + math: "_{6}" + }, + "₇": { + math: "_{7}" + }, + "₈": { + math: "_{8}" + }, + "₉": { + math: "_{9}" + }, + "₊": { + math: "_{+}" + }, + "₋": { + math: "_{-}" + }, + "₌": { + math: "_{=}" + }, + "₍": { + math: "_{(}" + }, + "₎": { + math: "_{)}" + }, + "ₐ": { + math: "_{a}", + text: "\\textsubscript{a}" + }, + "ₑ": { + math: "_{e}", + text: "\\textsubscript{e}" + }, + "ₒ": { + math: "_{o}", + text: "\\textsubscript{o}" + }, + "ₓ": { + math: "_{x}", + text: "\\textsubscript{x}" + }, + "ₔ": { + text: "\\textsubscript{\\textschwa}", + textpackages: [ + "tipa" + ] + }, + "ₕ": { + math: "_{h}", + text: "\\textsubscript{h}" + }, + "ₖ": { + math: "_{k}", + text: "\\textsubscript{k}" + }, + "ₗ": { + math: "_{l}", + text: "\\textsubscript{l}" + }, + "ₘ": { + math: "_{m}", + text: "\\textsubscript{m}" + }, + "ₙ": { + math: "_{n}", + text: "\\textsubscript{n}" + }, + "ₚ": { + math: "_{p}", + text: "\\textsubscript{p}" + }, + "ₛ": { + math: "_{s}", + text: "\\textsubscript{s}" + }, + "ₜ": { + math: "_{t}", + text: "\\textsubscript{t}" + }, + "₧": { + text: "\\ensuremath{\\Elzpes}" + }, + "€": { + math: "\\euro", + text: "{\\texteuro}" + }, + "⃐": { + math: "\\lvec" + }, + "⃑": { + math: "\\rightharpoonup", + mathpackages: [ + "amsmath", + "amssymb" + ] + }, + "⃒": { + math: "\\vertoverlay" + }, + "⃖": { + math: "\\LVec" + }, + "⃗": { + math: "\\vec" + }, + "⃛": { + math: "\\dddot" + }, + "⃜": { + math: "\\ddddot" + }, + "⃝": { + math: "\\enclosecircle" + }, + "⃞": { + math: "\\enclosesquare" + }, + "⃟": { + math: "\\enclosediamond" + }, + "⃡": { + math: "\\overleftrightarrow" + }, + "⃤": { + math: "\\enclosetriangle" + }, + "⃧": { + math: "\\annuity" + }, + "⃨": { + math: "\\threeunderdot" + }, + "⃩": { + math: "\\widebridgeabove" + }, + "⃬": { + math: "\\underrightharpoondown" + }, + "⃭": { + math: "\\underleftharpoondown" + }, + "⃮": { + math: "\\underleftarrow" + }, + "⃯": { + math: "\\underrightarrow" + }, + "⃰": { + math: "\\asteraccent" + }, + "℀": { + text: "a/c" + }, + "℁": { + text: "a/s" + }, + "ℂ": { + math: "\\mathbb{C}" + }, + "℃": { + text: "{\\textcelsius}" + }, + "℅": { + text: "c/o" + }, + "℆": { + text: "c/u" + }, + "ℇ": { + math: "\\Euler" + }, + "℉": { + text: "F" + }, + "ℊ": { + math: "\\mathscr{g}" + }, + "ℋ": { + math: "\\mathscr{H}" + }, + "ℌ": { + math: "\\mathfrak{H}" + }, + "ℍ": { + math: "\\mathbb{H}" + }, + "ℎ": { + math: "\\Planckconst" + }, + "ℏ": { + math: "\\hslash" + }, + "ℐ": { + math: "\\mathscr{I}" + }, + "ℑ": { + math: "\\mathfrak{I}" + }, + "ℒ": { + math: "\\mathscr{L}" + }, + "ℓ": { + math: "\\mathscr{l}" + }, + "ℕ": { + math: "\\mathbb{N}" + }, + "№": { + text: "{\\cyrchar\\textnumero}" + }, + "℗": { + text: "{\\textcircledP}" + }, + "℘": { + math: "\\wp" + }, + "ℙ": { + math: "\\mathbb{P}" + }, + "ℚ": { + math: "\\mathbb{Q}" + }, + "ℛ": { + math: "\\mathscr{R}" + }, + "ℜ": { + math: "\\mathfrak{R}" + }, + "ℝ": { + math: "\\mathbb{R}" + }, + "℞": { + math: "\\Elzxrat" + }, + "℠": { + text: "{\\textservicemark}" + }, + "℡": { + text: "TEL" + }, + "™": { + text: "{\\texttrademark}", + textpackages: [ + "textcomp" + ] + }, + "ℤ": { + math: "\\mathbb{Z}" + }, + "Ω": { + math: "\\Omega" + }, + "℧": { + math: "\\mho" + }, + "ℨ": { + math: "\\mathfrak{Z}" + }, + "℩": { + text: "{\\textriota}" + }, + "K": { + text: "K" + }, + "Å": { + math: "\\Angstroem", + text: "{\\AA}" + }, + "ℬ": { + math: "\\mathscr{B}" + }, + "ℭ": { + math: "\\mathfrak{C}" + }, + "℮": { + text: "{\\textestimated}" + }, + "ℯ": { + math: "\\mathscr{e}" + }, + "ℰ": { + math: "\\mathscr{E}" + }, + "ℱ": { + math: "\\mathscr{F}" + }, + "Ⅎ": { + math: "\\Finv" + }, + "ℳ": { + math: "\\mathscr{M}" + }, + "ℴ": { + math: "\\mathscr{o}" + }, + "ℵ": { + math: "\\aleph" + }, + "ℶ": { + math: "\\beth" + }, + "ℷ": { + math: "\\gimel" + }, + "ℸ": { + math: "\\daleth" + }, + "ℼ": { + math: "\\mathbb{\\pi}" + }, + "ℽ": { + math: "\\mathbb{\\gamma}" + }, + "ℾ": { + math: "\\mathbb{\\Gamma}" + }, + "ℿ": { + math: "\\mathbb{\\Pi}" + }, + "⅀": { + math: "\\mathbb{\\Sigma}" + }, + "⅁": { + math: "\\Game" + }, + "⅂": { + math: "\\sansLturned" + }, + "⅃": { + math: "\\sansLmirrored" + }, + "⅄": { + math: "\\Yup" + }, + "ⅅ": { + math: "\\CapitalDifferentialD" + }, + "ⅆ": { + math: "\\DifferentialD" + }, + "ⅇ": { + math: "\\ExponetialE" + }, + "ⅈ": { + math: "\\ComplexI" + }, + "ⅉ": { + math: "\\ComplexJ" + }, + "⅊": { + math: "\\PropertyLine" + }, + "⅋": { + math: "\\invamp" + }, + "⅐": { + math: "\\frac{1}{7}" + }, + "⅑": { + math: "\\frac{1}{9}" + }, + "⅒": { + math: "\\frac{1}{10}" + }, + "⅓": { + math: "\\frac{1}{3}" + }, + "⅔": { + math: "\\frac{2}{3}" + }, + "⅕": { + math: "\\frac{1}{5}" + }, + "⅖": { + math: "\\frac{2}{5}" + }, + "⅗": { + math: "\\frac{3}{5}" + }, + "⅘": { + math: "\\frac{4}{5}" + }, + "⅙": { + math: "\\frac{1}{6}" + }, + "⅚": { + math: "\\frac{5}{6}" + }, + "⅛": { + math: "\\frac{1}{8}" + }, + "⅜": { + math: "\\frac{3}{8}" + }, + "⅝": { + math: "\\frac{5}{8}" + }, + "⅞": { + math: "\\frac{7}{8}" + }, + "⅟": { + math: "\\frac{1}" + }, + "Ⅰ": { + text: "I" + }, + "Ⅱ": { + text: "II" + }, + "Ⅲ": { + text: "III" + }, + "Ⅳ": { + text: "IV" + }, + "Ⅴ": { + text: "V" + }, + "Ⅵ": { + text: "VI" + }, + "Ⅶ": { + text: "VII" + }, + "Ⅷ": { + text: "VIII" + }, + "Ⅸ": { + text: "IX" + }, + "Ⅹ": { + text: "X" + }, + "Ⅺ": { + text: "XI" + }, + "Ⅻ": { + text: "XII" + }, + "Ⅼ": { + text: "L" + }, + "Ⅽ": { + text: "C" + }, + "Ⅾ": { + text: "D" + }, + "Ⅿ": { + text: "M" + }, + "ⅰ": { + text: "i" + }, + "ⅱ": { + text: "ii" + }, + "ⅲ": { + text: "iii" + }, + "ⅳ": { + text: "iv" + }, + "ⅴ": { + text: "v" + }, + "ⅵ": { + text: "vi" + }, + "ⅶ": { + text: "vii" + }, + "ⅷ": { + text: "viii" + }, + "ⅸ": { + text: "ix" + }, + "ⅹ": { + text: "x" + }, + "ⅺ": { + text: "xi" + }, + "ⅻ": { + text: "xii" + }, + "ⅼ": { + text: "l" + }, + "ⅽ": { + text: "c" + }, + "ⅾ": { + text: "d" + }, + "ⅿ": { + text: "m" + }, + "↉": { + math: "\\frac{0}{3}" + }, + "←": { + math: "\\leftarrow" + }, + "↑": { + math: "\\uparrow" + }, + "→": { + math: "\\rightarrow", + text: "{\\textrightarrow}", + textpackages: [ + "textcomp" + ] + }, + "↓": { + math: "\\downarrow" + }, + "↔": { + math: "\\leftrightarrow" + }, + "↕": { + math: "\\updownarrow" + }, + "↖": { + math: "\\nwarrow" + }, + "↗": { + math: "\\nearrow" + }, + "↘": { + math: "\\searrow" + }, + "↙": { + math: "\\swarrow" + }, + "↚": { + math: "\\nleftarrow" + }, + "↛": { + math: "\\nrightarrow" + }, + "↜": { + math: "\\arrowwaveleft" + }, + "↝": { + math: "\\arrowwaveright" + }, + "↞": { + math: "\\twoheadleftarrow" + }, + "↟": { + math: "\\twoheaduparrow" + }, + "↠": { + math: "\\twoheadrightarrow" + }, + "↡": { + math: "\\twoheaddownarrow" + }, + "↢": { + math: "\\leftarrowtail" + }, + "↣": { + math: "\\rightarrowtail" + }, + "↤": { + math: "\\mapsfrom" + }, + "↥": { + math: "\\MapsUp" + }, + "↦": { + math: "\\mapsto" + }, + "↧": { + math: "\\MapsDown" + }, + "↨": { + math: "\\updownarrowbar" + }, + "↩": { + math: "\\hookleftarrow" + }, + "↪": { + math: "\\hookrightarrow" + }, + "↫": { + math: "\\looparrowleft" + }, + "↬": { + math: "\\looparrowright" + }, + "↭": { + math: "\\leftrightsquigarrow" + }, + "↮": { + math: "\\nleftrightarrow" + }, + "↯": { + math: "\\lightning" + }, + "↰": { + math: "\\Lsh" + }, + "↱": { + math: "\\Rsh" + }, + "↲": { + math: "\\dlsh" + }, + "↳": { + text: "\\reflectbox{\\carriagereturn}", + textpackages: [ + "graphics", + "unicode-math" + ] + }, + "↴": { + math: "\\linefeed" + }, + "↵": { + math: "\\carriagereturn" + }, + "↶": { + math: "\\curvearrowleft" + }, + "↷": { + math: "\\curvearrowright" + }, + "↸": { + math: "\\barovernorthwestarrow" + }, + "↹": { + math: "\\barleftarrowrightarrowba" + }, + "↺": { + math: "\\circlearrowleft" + }, + "↻": { + math: "\\circlearrowright" + }, + "↼": { + math: "\\leftharpoonup" + }, + "↽": { + math: "\\leftharpoondown" + }, + "↾": { + math: "\\upharpoonright" + }, + "↿": { + math: "\\upharpoonleft" + }, + "⇀": { + math: "\\rightharpoonup", + mathpackages: [ + "amsmath", + "amssymb" + ] + }, + "⇁": { + math: "\\rightharpoondown" + }, + "⇂": { + math: "\\downharpoonright" + }, + "⇃": { + math: "\\downharpoonleft" + }, + "⇄": { + math: "\\rightleftarrows" + }, + "⇅": { + math: "\\dblarrowupdown" + }, + "⇆": { + math: "\\leftrightarrows" + }, + "⇇": { + math: "\\leftleftarrows" + }, + "⇈": { + math: "\\upuparrows" + }, + "⇉": { + math: "\\rightrightarrows" + }, + "⇊": { + math: "\\downdownarrows" + }, + "⇋": { + math: "\\leftrightharpoons" + }, + "⇌": { + math: "\\rightleftharpoons" + }, + "⇍": { + math: "\\nLeftarrow" + }, + "⇎": { + math: "\\nLeftrightarrow" + }, + "⇏": { + math: "\\nRightarrow" + }, + "⇐": { + math: "\\Leftarrow" + }, + "⇑": { + math: "\\Uparrow" + }, + "⇒": { + math: "\\Rightarrow" + }, + "⇓": { + math: "\\Downarrow" + }, + "⇔": { + math: "\\Leftrightarrow" + }, + "⇕": { + math: "\\Updownarrow" + }, + "⇖": { + math: "\\Nwarrow" + }, + "⇗": { + math: "\\Nearrow" + }, + "⇘": { + math: "\\Searrow" + }, + "⇙": { + math: "\\Swarrow" + }, + "⇚": { + math: "\\Lleftarrow" + }, + "⇛": { + math: "\\Rrightarrow" + }, + "⇜": { + math: "\\leftsquigarrow" + }, + "⇝": { + math: "\\rightsquigarrow" + }, + "⇞": { + math: "\\nHuparrow" + }, + "⇟": { + math: "\\nHdownarrow" + }, + "⇠": { + math: "\\dashleftarrow" + }, + "⇡": { + math: "\\updasharrow" + }, + "⇢": { + math: "\\dashrightarrow" + }, + "⇣": { + math: "\\downdasharrow" + }, + "⇤": { + math: "\\LeftArrowBar" + }, + "⇥": { + math: "\\RightArrowBar" + }, + "⇦": { + math: "\\leftwhitearrow" + }, + "⇧": { + math: "\\upwhitearrow" + }, + "⇨": { + math: "\\rightwhitearrow" + }, + "⇩": { + math: "\\downwhitearrow" + }, + "⇪": { + math: "\\whitearrowupfrombar" + }, + "⇴": { + math: "\\circleonrightarrow" + }, + "⇵": { + math: "\\DownArrowUpArrow" + }, + "⇶": { + math: "\\rightthreearrows" + }, + "⇷": { + math: "\\nvleftarrow" + }, + "⇸": { + math: "\\pfun" + }, + "⇹": { + math: "\\nvleftrightarrow" + }, + "⇺": { + math: "\\nVleftarrow" + }, + "⇻": { + math: "\\ffun" + }, + "⇼": { + math: "\\nVleftrightarrow" + }, + "⇽": { + math: "\\leftarrowtriangle" + }, + "⇾": { + math: "\\rightarrowtriangle" + }, + "⇿": { + math: "\\leftrightarrowtriangle" + }, + "∀": { + math: "\\forall" + }, + "∁": { + math: "\\complement" + }, + "∂": { + math: "\\partial" + }, + "∃": { + math: "\\exists" + }, + "∄": { + math: "\\nexists" + }, + "∅": { + math: "\\varnothing" + }, + "∆": { + math: "\\increment" + }, + "∇": { + math: "\\nabla" + }, + "∈": { + math: "\\in" + }, + "∉": { + math: "\\not\\in" + }, + "∊": { + math: "\\smallin" + }, + "∋": { + math: "\\ni" + }, + "∌": { + math: "\\not\\ni" + }, + "∍": { + math: "\\smallni" + }, + "∎": { + math: "\\QED" + }, + "∏": { + math: "\\prod" + }, + "∐": { + math: "\\coprod" + }, + "∑": { + math: "\\sum" + }, + "−": { + math: "-", + text: "-" + }, + "∓": { + math: "\\mp" + }, + "∔": { + math: "\\dotplus" + }, + "∕": { + text: "/" + }, + "∖": { + math: "\\setminus" + }, + "∗": { + math: "{_\\ast}" + }, + "∘": { + math: "\\circ" + }, + "∙": { + math: "\\bullet" + }, + "√": { + math: "\\surd" + }, + "∛": { + math: "\\sqrt[3]" + }, + "∜": { + math: "\\sqrt[4]" + }, + "∝": { + math: "\\propto" + }, + "∞": { + math: "\\infty" + }, + "∟": { + math: "\\rightangle" + }, + "∠": { + math: "\\angle" + }, + "∡": { + math: "\\measuredangle" + }, + "∢": { + math: "\\sphericalangle" + }, + "∣": { + math: "\\mid" + }, + "∤": { + math: "\\nmid" + }, + "∥": { + math: "\\parallel" + }, + "∦": { + math: "\\nparallel" + }, + "∧": { + math: "\\wedge" + }, + "∨": { + math: "\\vee" + }, + "∩": { + math: "\\cap" + }, + "∪": { + math: "\\cup" + }, + "∫": { + math: "\\int" + }, + "∬": { + math: "{\\int\\!\\int}" + }, + "∭": { + math: "{\\int\\!\\int\\!\\int}" + }, + "∮": { + math: "\\oint" + }, + "∯": { + math: "\\surfintegral" + }, + "∰": { + math: "\\volintegral" + }, + "∱": { + math: "\\clwintegral" + }, + "∲": { + math: "\\lcirclerightint", + mathpackages: [ + "MnSymbol" + ] + }, + "∳": { + math: "\\rcirclerightint", + mathpackages: [ + "MnSymbol" + ] + }, + "∴": { + math: "\\therefore" + }, + "∵": { + math: "\\because" + }, + "∶": { + math: ":" + }, + "∷": { + math: "\\Colon" + }, + "∸": { + math: "\\dotdiv", + mathpackages: [ + "mathabx" + ] + }, + "∹": { + math: "\\eqcolon" + }, + "∺": { + math: "\\mathbin{{:}\\!\\!{-}\\!\\!{:}}" + }, + "∻": { + math: "\\homothetic" + }, + "∼": { + math: "\\sim" + }, + "∽": { + math: "\\backsim" + }, + "∾": { + math: "\\lazysinv" + }, + "∿": { + math: "\\AC" + }, + "≀": { + math: "\\wr" + }, + "≁": { + math: "\\not\\sim" + }, + "≂": { + math: "\\texteqsim", + mathpackages: [ + "xecjk" + ] + }, + "≂̸": { + math: "\\NotEqualTilde" + }, + "≃": { + math: "\\simeq" + }, + "≄": { + math: "\\not\\simeq" + }, + "≅": { + math: "\\cong" + }, + "≆": { + math: "\\approxnotequal" + }, + "≇": { + math: "\\not\\cong" + }, + "≈": { + math: "\\approx" + }, + "≉": { + math: "\\not\\approx" + }, + "≊": { + math: "\\approxeq" + }, + "≋": { + math: "\\tildetrpl" + }, + "≋̸": { + math: "\\not\\apid" + }, + "≌": { + math: "\\allequal" + }, + "≍": { + math: "\\asymp" + }, + "≎": { + math: "\\Bumpeq" + }, + "≎̸": { + math: "\\NotHumpDownHump" + }, + "≏": { + math: "\\bumpeq" + }, + "≏̸": { + math: "\\NotHumpEqual" + }, + "≐": { + math: "\\doteq" + }, + "≐̸": { + math: "\\not\\doteq" + }, + "≑": { + math: "\\doteqdot" + }, + "≒": { + math: "\\fallingdotseq" + }, + "≓": { + math: "\\risingdotseq" + }, + "≔": { + math: "\\coloneq", + text: ":=" + }, + "≕": { + math: "=:" + }, + "≖": { + math: "\\eqcirc" + }, + "≗": { + math: "\\circeq" + }, + "≘": { + math: "\\arceq" + }, + "≙": { + math: "\\estimates" + }, + "≛": { + math: "\\starequal" + }, + "≜": { + math: "\\triangleq" + }, + "≝": { + math: "\\eqdef" + }, + "≞": { + math: "\\measeq" + }, + "≠": { + math: "\\neq" + }, + "≡": { + math: "\\equiv" + }, + "≢": { + math: "\\not\\equiv" + }, + "≣": { + math: "\\Equiv" + }, + "≤": { + math: "\\leq" + }, + "≥": { + math: "\\geq" + }, + "≦": { + math: "\\leqq" + }, + "≧": { + math: "\\geqq" + }, + "≨": { + math: "\\lneqq" + }, + "≨︀": { + math: "\\lvertneqq" + }, + "≩": { + math: "\\gneqq" + }, + "≩︀": { + math: "\\gvertneqq" + }, + "≪": { + math: "\\ll" + }, + "≪̸": { + math: "\\NotLessLess" + }, + "≫": { + math: "\\gg" + }, + "≫̸": { + math: "\\NotGreaterGreater" + }, + "≬": { + math: "\\between" + }, + "≭": { + math: "{\\not\\kern-0.3em\\times}" + }, + "≮": { + math: "\\not<" + }, + "≯": { + math: "\\not>" + }, + "≰": { + math: "\\not\\leq" + }, + "≱": { + math: "\\not\\geq" + }, + "≲": { + math: "\\lessequivlnt" + }, + "≳": { + math: "\\greaterequivlnt" + }, + "≶": { + math: "\\lessgtr" + }, + "≷": { + math: "\\gtrless" + }, + "≸": { + math: "\\notlessgreater" + }, + "≹": { + math: "\\notgreaterless" + }, + "≺": { + math: "\\prec" + }, + "≻": { + math: "\\succ" + }, + "≼": { + math: "\\preccurlyeq" + }, + "≽": { + math: "\\succcurlyeq" + }, + "≾": { + math: "\\precapprox" + }, + "≾̸": { + math: "\\NotPrecedesTilde" + }, + "≿": { + math: "\\succapprox" + }, + "≿̸": { + math: "\\NotSucceedsTilde" + }, + "⊀": { + math: "\\not\\prec" + }, + "⊁": { + math: "\\not\\succ" + }, + "⊂": { + math: "\\subset" + }, + "⊃": { + math: "\\supset" + }, + "⊄": { + math: "\\not\\subset" + }, + "⊅": { + math: "\\not\\supset" + }, + "⊆": { + math: "\\subseteq" + }, + "⊇": { + math: "\\supseteq" + }, + "⊈": { + math: "\\not\\subseteq" + }, + "⊉": { + math: "\\not\\supseteq" + }, + "⊊": { + math: "\\subsetneq" + }, + "⊊︀": { + math: "\\varsubsetneqq" + }, + "⊋": { + math: "\\supsetneq" + }, + "⊋︀": { + math: "\\varsupsetneq" + }, + "⊌": { + math: "\\cupleftarrow" + }, + "⊍": { + math: "\\cupdot" + }, + "⊎": { + math: "\\uplus" + }, + "⊏": { + math: "\\sqsubset" + }, + "⊏̸": { + math: "\\NotSquareSubset" + }, + "⊐": { + math: "\\sqsupset" + }, + "⊐̸": { + math: "\\NotSquareSuperset" + }, + "⊑": { + math: "\\sqsubseteq" + }, + "⊒": { + math: "\\sqsupseteq" + }, + "⊓": { + math: "\\sqcap" + }, + "⊔": { + math: "\\sqcup" + }, + "⊕": { + math: "\\oplus" + }, + "⊖": { + math: "\\ominus" + }, + "⊗": { + math: "\\otimes" + }, + "⊘": { + math: "\\oslash" + }, + "⊙": { + math: "\\odot" + }, + "⊚": { + math: "\\circledcirc" + }, + "⊛": { + math: "\\circledast" + }, + "⊜": { + math: "\\circledequal" + }, + "⊝": { + math: "\\circleddash" + }, + "⊞": { + math: "\\boxplus" + }, + "⊟": { + math: "\\boxminus" + }, + "⊠": { + math: "\\boxtimes" + }, + "⊡": { + math: "\\boxdot" + }, + "⊢": { + math: "\\vdash" + }, + "⊣": { + math: "\\dashv" + }, + "⊤": { + math: "\\top" + }, + "⊥": { + math: "\\perp" + }, + "⊦": { + math: "\\assert" + }, + "⊧": { + math: "\\truestate" + }, + "⊨": { + math: "\\forcesextra" + }, + "⊩": { + math: "\\Vdash" + }, + "⊪": { + math: "\\Vvdash" + }, + "⊫": { + math: "\\VDash" + }, + "⊬": { + math: "\\nvdash" + }, + "⊭": { + math: "\\nvDash" + }, + "⊮": { + math: "\\nVdash" + }, + "⊯": { + math: "\\nVDash" + }, + "⊰": { + math: "\\prurel" + }, + "⊱": { + math: "\\scurel" + }, + "⊲": { + math: "\\vartriangleleft" + }, + "⊳": { + math: "\\vartriangleright" + }, + "⊴": { + math: "\\trianglelefteq" + }, + "⊵": { + math: "\\trianglerighteq" + }, + "⊶": { + math: "\\original" + }, + "⊷": { + math: "\\image" + }, + "⊸": { + math: "\\multimap" + }, + "⊹": { + math: "\\hermitconjmatrix" + }, + "⊺": { + math: "\\intercal" + }, + "⊻": { + math: "\\veebar" + }, + "⊼": { + math: "\\barwedge" + }, + "⊽": { + math: "\\barvee" + }, + "⊾": { + math: "\\rightanglearc" + }, + "⊿": { + math: "\\varlrtriangle" + }, + "⋂": { + math: "\\bigcap" + }, + "⋃": { + math: "\\bigcup" + }, + "⋄": { + math: "\\diamond" + }, + "⋅": { + math: "\\cdot" + }, + "⋆": { + math: "\\star" + }, + "⋇": { + math: "\\divideontimes" + }, + "⋈": { + math: "\\bowtie" + }, + "⋉": { + math: "\\ltimes" + }, + "⋊": { + math: "\\rtimes" + }, + "⋋": { + math: "\\leftthreetimes" + }, + "⋌": { + math: "\\rightthreetimes" + }, + "⋍": { + math: "\\backsimeq" + }, + "⋎": { + math: "\\curlyvee" + }, + "⋏": { + math: "\\curlywedge" + }, + "⋐": { + math: "\\Subset" + }, + "⋑": { + math: "\\Supset" + }, + "⋒": { + math: "\\Cap" + }, + "⋓": { + math: "\\Cup" + }, + "⋔": { + math: "\\pitchfork" + }, + "⋕": { + math: "\\hash" + }, + "⋖": { + math: "\\lessdot" + }, + "⋗": { + math: "\\gtrdot" + }, + "⋘": { + math: "\\verymuchless" + }, + "⋙": { + math: "\\verymuchgreater" + }, + "⋚": { + math: "\\lesseqgtr" + }, + "⋛": { + math: "\\gtreqless" + }, + "⋜": { + math: "\\eqless" + }, + "⋝": { + math: "\\eqgtr" + }, + "⋞": { + math: "\\curlyeqprec" + }, + "⋟": { + math: "\\curlyeqsucc" + }, + "⋠": { + math: "\\npreceq" + }, + "⋡": { + math: "\\nsucceq" + }, + "⋢": { + math: "\\not\\sqsubseteq" + }, + "⋣": { + math: "\\not\\sqsupseteq" + }, + "⋤": { + math: "\\sqsubsetneq" + }, + "⋥": { + math: "\\Elzsqspne" + }, + "⋦": { + math: "\\lnsim" + }, + "⋧": { + math: "\\gnsim" + }, + "⋨": { + math: "\\precedesnotsimilar" + }, + "⋩": { + math: "\\succnsim" + }, + "⋪": { + math: "\\ntriangleleft" + }, + "⋫": { + math: "\\ntriangleright" + }, + "⋬": { + math: "\\ntrianglelefteq" + }, + "⋭": { + math: "\\ntrianglerighteq" + }, + "⋮": { + math: "\\vdots" + }, + "⋯": { + math: "\\cdots" + }, + "⋰": { + math: "\\upslopeellipsis" + }, + "⋱": { + math: "\\downslopeellipsis" + }, + "⋲": { + math: "\\disin" + }, + "⋳": { + math: "\\varisins" + }, + "⋴": { + math: "\\isins" + }, + "⋵": { + math: "\\isindot" + }, + "⋶": { + math: "\\barin" + }, + "⋷": { + math: "\\isinobar" + }, + "⋸": { + math: "\\isinvb" + }, + "⋹": { + math: "\\isinE" + }, + "⋺": { + math: "\\nisd" + }, + "⋻": { + math: "\\varnis" + }, + "⋼": { + math: "\\nis" + }, + "⋽": { + math: "\\varniobar" + }, + "⋾": { + math: "\\niobar" + }, + "⋿": { + math: "\\bagmember" + }, + "⌀": { + math: "\\diameter" + }, + "⌂": { + math: "\\house" + }, + "⌅": { + math: "\\varbarwedge", + text: "{\\barwedge}" + }, + "⌆": { + math: "\\perspcorrespond" + }, + "⌈": { + math: "\\lceil" + }, + "⌉": { + math: "\\rceil" + }, + "⌊": { + math: "\\lfloor" + }, + "⌋": { + math: "\\rfloor" + }, + "⌐": { + math: "\\invneg" + }, + "⌑": { + math: "\\wasylozenge" + }, + "⌒": { + math: "\\profline" + }, + "⌓": { + math: "\\profsurf" + }, + "⌕": { + math: "\\recorder" + }, + "⌖": { + math: "{\\mathchar\"2208}" + }, + "⌗": { + math: "\\viewdata" + }, + "⌙": { + math: "\\turnednot" + }, + "⌜": { + math: "\\ulcorner" + }, + "⌝": { + math: "\\urcorner" + }, + "⌞": { + math: "\\llcorner" + }, + "⌟": { + math: "\\lrcorner" + }, + "⌠": { + math: "\\inttop" + }, + "⌡": { + math: "\\intbottom" + }, + "⌢": { + math: "\\frown" + }, + "⌣": { + math: "\\smile" + }, + "〈": { + math: "\\langle" + }, + "〉": { + math: "\\rangle" + }, + "⌬": { + math: "\\varhexagonlrbonds" + }, + "⌲": { + math: "\\conictaper" + }, + "⌶": { + math: "\\topbot" + }, + "⌹": { + math: "\\APLinv" + }, + "⌿": { + math: "\\notslash" + }, + "⍀": { + math: "\\notbackslash" + }, + "⍇": { + math: "\\APLleftarrowbox" + }, + "⍈": { + math: "\\APLrightarrowbox" + }, + "⍉": { + math: "\\invdiameter" + }, + "⍐": { + math: "\\APLuparrowbox" + }, + "⍓": { + math: "\\APLboxupcaret" + }, + "⍗": { + math: "\\APLdownarrowbox" + }, + "⍝": { + math: "\\APLcomment" + }, + "⍞": { + math: "\\APLinput" + }, + "⍟": { + math: "\\APLlog" + }, + "⍰": { + math: "\\APLboxquestion" + }, + "⍼": { + math: "\\rangledownzigzagarrow" + }, + "⎔": { + math: "\\hexagon" + }, + "⎛": { + math: "\\lparenuend" + }, + "⎜": { + math: "\\lparenextender" + }, + "⎝": { + math: "\\lparenlend" + }, + "⎞": { + math: "\\rparenuend" + }, + "⎟": { + math: "\\rparenextender" + }, + "⎠": { + math: "\\rparenlend" + }, + "⎡": { + math: "\\lbrackuend" + }, + "⎢": { + math: "\\lbrackextender" + }, + "⎣": { + math: "\\Elzdlcorn" + }, + "⎤": { + math: "\\rbrackuend" + }, + "⎥": { + math: "\\rbrackextender" + }, + "⎦": { + math: "\\rbracklend" + }, + "⎧": { + math: "\\lbraceuend" + }, + "⎨": { + math: "\\lbracemid" + }, + "⎩": { + math: "\\lbracelend" + }, + "⎪": { + math: "\\vbraceextender" + }, + "⎫": { + math: "\\rbraceuend" + }, + "⎬": { + math: "\\rbracemid" + }, + "⎭": { + math: "\\rbracelend" + }, + "⎮": { + math: "\\intextender" + }, + "⎯": { + math: "\\harrowextender" + }, + "⎰": { + math: "\\lmoustache" + }, + "⎱": { + math: "\\rmoustache" + }, + "⎲": { + math: "\\sumtop" + }, + "⎳": { + math: "\\sumbottom" + }, + "⎴": { + math: "\\overbracket" + }, + "⎵": { + math: "\\underbracket" + }, + "⎶": { + math: "\\bbrktbrk" + }, + "⎷": { + math: "\\sqrtbottom" + }, + "⎸": { + math: "\\lvboxline" + }, + "⎹": { + math: "\\rvboxline" + }, + "⏎": { + math: "\\varcarriagereturn" + }, + "⏜": { + math: "\\overparen" + }, + "⏝": { + math: "\\underparen" + }, + "⏞": { + math: "\\overbrace" + }, + "⏟": { + math: "\\underbrace" + }, + "⏠": { + math: "\\obrbrak" + }, + "⏡": { + math: "\\ubrbrak" + }, + "⏢": { + math: "\\trapezium" + }, + "⏣": { + math: "\\benzenr" + }, + "⏤": { + math: "\\strns" + }, + "⏥": { + math: "\\fltns" + }, + "⏦": { + math: "\\accurrent" + }, + "⏧": { + math: "\\elinters" + }, + "␀": { + text: "NUL" + }, + "␁": { + text: "SOH" + }, + "␂": { + text: "STX" + }, + "␃": { + text: "ETX" + }, + "␄": { + text: "EOT" + }, + "␅": { + text: "ENQ" + }, + "␆": { + text: "ACK" + }, + "␇": { + text: "BEL" + }, + "␈": { + text: "BS" + }, + "␉": { + text: "HT" + }, + "␊": { + text: "LF" + }, + "␋": { + text: "VT" + }, + "␌": { + text: "FF" + }, + "␍": { + text: "CR" + }, + "␎": { + text: "SO" + }, + "␏": { + text: "SI" + }, + "␐": { + text: "DLE" + }, + "␑": { + text: "DC1" + }, + "␒": { + text: "DC2" + }, + "␓": { + text: "DC3" + }, + "␔": { + text: "DC4" + }, + "␕": { + text: "NAK" + }, + "␖": { + text: "SYN" + }, + "␗": { + text: "ETB" + }, + "␘": { + text: "CAN" + }, + "␙": { + text: "EM" + }, + "␚": { + text: "SUB" + }, + "␛": { + text: "ESC" + }, + "␜": { + text: "FS" + }, + "␝": { + text: "GS" + }, + "␞": { + text: "RS" + }, + "␟": { + text: "US" + }, + "␠": { + text: "SP" + }, + "␡": { + text: "DEL" + }, + "␣": { + text: "{\\textvisiblespace}" + }, + "␤": { + text: "NL" + }, + "␥": { + text: "///" + }, + "␦": { + text: "?" + }, + "①": { + text: "\\ding{172}" + }, + "②": { + text: "\\ding{173}" + }, + "③": { + text: "\\ding{174}" + }, + "④": { + text: "\\ding{175}" + }, + "⑤": { + text: "\\ding{176}" + }, + "⑥": { + text: "\\ding{177}" + }, + "⑦": { + text: "\\ding{178}" + }, + "⑧": { + text: "\\ding{179}" + }, + "⑨": { + text: "\\ding{180}" + }, + "⑩": { + text: "\\ding{181}" + }, + "⑪": { + text: "(11)" + }, + "⑫": { + text: "(12)" + }, + "⑬": { + text: "(13)" + }, + "⑭": { + text: "(14)" + }, + "⑮": { + text: "(15)" + }, + "⑯": { + text: "(16)" + }, + "⑰": { + text: "(17)" + }, + "⑱": { + text: "(18)" + }, + "⑲": { + text: "(19)" + }, + "⑳": { + text: "(20)" + }, + "⑴": { + text: "(1)" + }, + "⑵": { + text: "(2)" + }, + "⑶": { + text: "(3)" + }, + "⑷": { + text: "(4)" + }, + "⑸": { + text: "(5)" + }, + "⑹": { + text: "(6)" + }, + "⑺": { + text: "(7)" + }, + "⑻": { + text: "(8)" + }, + "⑼": { + text: "(9)" + }, + "⑽": { + text: "(10)" + }, + "⑾": { + text: "(11)" + }, + "⑿": { + text: "(12)" + }, + "⒀": { + text: "(13)" + }, + "⒁": { + text: "(14)" + }, + "⒂": { + text: "(15)" + }, + "⒃": { + text: "(16)" + }, + "⒄": { + text: "(17)" + }, + "⒅": { + text: "(18)" + }, + "⒆": { + text: "(19)" + }, + "⒇": { + text: "(20)" + }, + "⒈": { + text: "1." + }, + "⒉": { + text: "2." + }, + "⒊": { + text: "3." + }, + "⒋": { + text: "4." + }, + "⒌": { + text: "5." + }, + "⒍": { + text: "6." + }, + "⒎": { + text: "7." + }, + "⒏": { + text: "8." + }, + "⒐": { + text: "9." + }, + "⒑": { + text: "10." + }, + "⒒": { + text: "11." + }, + "⒓": { + text: "12." + }, + "⒔": { + text: "13." + }, + "⒕": { + text: "14." + }, + "⒖": { + text: "15." + }, + "⒗": { + text: "16." + }, + "⒘": { + text: "17." + }, + "⒙": { + text: "18." + }, + "⒚": { + text: "19." + }, + "⒛": { + text: "20." + }, + "⒜": { + text: "(a)" + }, + "⒝": { + text: "(b)" + }, + "⒞": { + text: "(c)" + }, + "⒟": { + text: "(d)" + }, + "⒠": { + text: "(e)" + }, + "⒡": { + text: "(f)" + }, + "⒢": { + text: "(g)" + }, + "⒣": { + text: "(h)" + }, + "⒤": { + text: "(i)" + }, + "⒥": { + text: "(j)" + }, + "⒦": { + text: "(k)" + }, + "⒧": { + text: "(l)" + }, + "⒨": { + text: "(m)" + }, + "⒩": { + text: "(n)" + }, + "⒪": { + text: "(o)" + }, + "⒫": { + text: "(p)" + }, + "⒬": { + text: "(q)" + }, + "⒭": { + text: "(r)" + }, + "⒮": { + text: "(s)" + }, + "⒯": { + text: "(t)" + }, + "⒰": { + text: "(u)" + }, + "⒱": { + text: "(v)" + }, + "⒲": { + text: "(w)" + }, + "⒳": { + text: "(x)" + }, + "⒴": { + text: "(y)" + }, + "⒵": { + text: "(z)" + }, + "Ⓐ": { + text: "(A)" + }, + "Ⓑ": { + text: "(B)" + }, + "Ⓒ": { + text: "(C)" + }, + "Ⓓ": { + text: "(D)" + }, + "Ⓔ": { + text: "(E)" + }, + "Ⓕ": { + text: "(F)" + }, + "Ⓖ": { + text: "(G)" + }, + "Ⓗ": { + text: "(H)" + }, + "Ⓘ": { + text: "(I)" + }, + "Ⓙ": { + text: "(J)" + }, + "Ⓚ": { + text: "(K)" + }, + "Ⓛ": { + text: "(L)" + }, + "Ⓜ": { + text: "(M)" + }, + "Ⓝ": { + text: "(N)" + }, + "Ⓞ": { + text: "(O)" + }, + "Ⓟ": { + text: "(P)" + }, + "Ⓠ": { + text: "(Q)" + }, + "Ⓡ": { + text: "(R)" + }, + "Ⓢ": { + math: "\\circledS" + }, + "Ⓣ": { + text: "(T)" + }, + "Ⓤ": { + text: "(U)" + }, + "Ⓥ": { + text: "(V)" + }, + "Ⓦ": { + text: "(W)" + }, + "Ⓧ": { + text: "(X)" + }, + "Ⓨ": { + text: "(Y)" + }, + "Ⓩ": { + text: "(Z)" + }, + "ⓐ": { + text: "(a)" + }, + "ⓑ": { + text: "(b)" + }, + "ⓒ": { + text: "(c)" + }, + "ⓓ": { + text: "(d)" + }, + "ⓔ": { + text: "(e)" + }, + "ⓕ": { + text: "(f)" + }, + "ⓖ": { + text: "(g)" + }, + "ⓗ": { + text: "(h)" + }, + "ⓘ": { + text: "(i)" + }, + "ⓙ": { + text: "(j)" + }, + "ⓚ": { + text: "(k)" + }, + "ⓛ": { + text: "(l)" + }, + "ⓜ": { + text: "(m)" + }, + "ⓝ": { + text: "(n)" + }, + "ⓞ": { + text: "(o)" + }, + "ⓟ": { + text: "(p)" + }, + "ⓠ": { + text: "(q)" + }, + "ⓡ": { + text: "(r)" + }, + "ⓢ": { + text: "(s)" + }, + "ⓣ": { + text: "(t)" + }, + "ⓤ": { + text: "(u)" + }, + "ⓥ": { + text: "(v)" + }, + "ⓦ": { + text: "(w)" + }, + "ⓧ": { + text: "(x)" + }, + "ⓨ": { + text: "(y)" + }, + "ⓩ": { + text: "(z)" + }, + "⓪": { + text: "(0)" + }, + "─": { + text: "-" + }, + "━": { + text: "=" + }, + "│": { + text: "|" + }, + "┃": { + text: "|" + }, + "┄": { + text: "-" + }, + "┅": { + text: "=" + }, + "┆": { + math: "\\Elzdshfnc" + }, + "┇": { + text: "|" + }, + "┈": { + text: "-" + }, + "┉": { + text: "=" + }, + "┊": { + text: "|" + }, + "┋": { + text: "|" + }, + "┌": { + text: "+" + }, + "┍": { + text: "+" + }, + "┎": { + text: "+" + }, + "┏": { + text: "+" + }, + "┐": { + text: "+" + }, + "┑": { + text: "+" + }, + "┒": { + text: "+" + }, + "┓": { + text: "+" + }, + "└": { + text: "+" + }, + "┕": { + text: "+" + }, + "┖": { + text: "+" + }, + "┗": { + text: "+" + }, + "┘": { + text: "+" + }, + "┙": { + math: "\\Elzsqfnw" + }, + "┚": { + text: "+" + }, + "┛": { + text: "+" + }, + "├": { + text: "+" + }, + "┝": { + text: "+" + }, + "┞": { + text: "+" + }, + "┟": { + text: "+" + }, + "┠": { + text: "+" + }, + "┡": { + text: "+" + }, + "┢": { + text: "+" + }, + "┣": { + text: "+" + }, + "┤": { + text: "+" + }, + "┥": { + text: "+" + }, + "┦": { + text: "+" + }, + "┧": { + text: "+" + }, + "┨": { + text: "+" + }, + "┩": { + text: "+" + }, + "┪": { + text: "+" + }, + "┫": { + text: "+" + }, + "┬": { + text: "+" + }, + "┭": { + text: "+" + }, + "┮": { + text: "+" + }, + "┯": { + text: "+" + }, + "┰": { + text: "+" + }, + "┱": { + text: "+" + }, + "┲": { + text: "+" + }, + "┳": { + text: "+" + }, + "┴": { + text: "+" + }, + "┵": { + text: "+" + }, + "┶": { + text: "+" + }, + "┷": { + text: "+" + }, + "┸": { + text: "+" + }, + "┹": { + text: "+" + }, + "┺": { + text: "+" + }, + "┻": { + text: "+" + }, + "┼": { + text: "+" + }, + "┽": { + text: "+" + }, + "┾": { + text: "+" + }, + "┿": { + text: "+" + }, + "╀": { + text: "+" + }, + "╁": { + text: "+" + }, + "╂": { + text: "+" + }, + "╃": { + text: "+" + }, + "╄": { + text: "+" + }, + "╅": { + text: "+" + }, + "╆": { + text: "+" + }, + "╇": { + text: "+" + }, + "╈": { + text: "+" + }, + "╉": { + text: "+" + }, + "╊": { + text: "+" + }, + "╋": { + text: "+" + }, + "╌": { + text: "-" + }, + "╍": { + text: "=" + }, + "╎": { + text: "|" + }, + "╏": { + text: "|" + }, + "═": { + text: "=" + }, + "║": { + text: "|" + }, + "╒": { + text: "+" + }, + "╓": { + text: "+" + }, + "╔": { + text: "+" + }, + "╕": { + text: "+" + }, + "╖": { + text: "+" + }, + "╗": { + text: "+" + }, + "╘": { + text: "+" + }, + "╙": { + text: "+" + }, + "╚": { + text: "+" + }, + "╛": { + text: "+" + }, + "╜": { + text: "+" + }, + "╝": { + text: "+" + }, + "╞": { + text: "+" + }, + "╟": { + text: "+" + }, + "╠": { + text: "+" + }, + "╡": { + text: "+" + }, + "╢": { + text: "+" + }, + "╣": { + text: "+" + }, + "╤": { + text: "+" + }, + "╥": { + text: "+" + }, + "╦": { + text: "+" + }, + "╧": { + text: "+" + }, + "╨": { + text: "+" + }, + "╩": { + text: "+" + }, + "╪": { + text: "+" + }, + "╫": { + text: "+" + }, + "╬": { + text: "+" + }, + "╭": { + text: "+" + }, + "╮": { + text: "+" + }, + "╯": { + text: "+" + }, + "╰": { + text: "+" + }, + "╱": { + math: "\\diagup" + }, + "╲": { + text: "\\" + }, + "╳": { + text: "X" + }, + "╼": { + text: "-" + }, + "╽": { + text: "|" + }, + "╾": { + text: "-" + }, + "╿": { + text: "|" + }, + "▀": { + math: "\\blockuphalf" + }, + "▄": { + math: "\\blocklowhalf" + }, + "█": { + math: "\\blockfull" + }, + "▌": { + math: "\\blocklefthalf" + }, + "▐": { + math: "\\blockrighthalf" + }, + "░": { + math: "\\blockqtrshaded" + }, + "▒": { + math: "\\blockhalfshaded" + }, + "▓": { + math: "\\blockthreeqtrshaded" + }, + "■": { + math: "\\mdlgblksquare", + text: "\\ding{110}" + }, + "□": { + math: "\\square" + }, + "▢": { + math: "\\squoval" + }, + "▣": { + math: "\\blackinwhitesquare" + }, + "▤": { + math: "\\squarehfill" + }, + "▥": { + math: "\\squarevfill" + }, + "▦": { + math: "\\squarehvfill" + }, + "▧": { + math: "\\squarenwsefill" + }, + "▨": { + math: "\\squareneswfill" + }, + "▩": { + math: "\\squarecrossfill" + }, + "▪": { + math: "\\blacksquare" + }, + "▫": { + math: "\\smwhtsquare" + }, + "▬": { + math: "\\hrectangleblack" + }, + "▭": { + math: "\\fbox{~~}" + }, + "▮": { + math: "\\vrectangleblack" + }, + "▯": { + math: "\\Elzvrecto" + }, + "▰": { + math: "\\parallelogramblack" + }, + "▲": { + math: "\\bigblacktriangleup", + text: "\\ding{115}" + }, + "△": { + math: "\\bigtriangleup" + }, + "▴": { + math: "\\blacktriangle" + }, + "▵": { + math: "\\vartriangle" + }, + "▶": { + math: "\\RHD" + }, + "▷": { + math: "\\rhd" + }, + "▸": { + math: "\\blacktriangleright" + }, + "▹": { + math: "\\triangleright" + }, + "►": { + math: "\\blackpointerright" + }, + "▻": { + math: "\\whitepointerright" + }, + "▼": { + math: "\\bigblacktriangledown", + text: "\\ding{116}" + }, + "▽": { + math: "\\bigtriangledown" + }, + "▾": { + math: "\\blacktriangledown" + }, + "▿": { + math: "\\triangledown" + }, + "◀": { + math: "\\LHD" + }, + "◁": { + math: "\\lhd" + }, + "◂": { + math: "\\blacktriangleleft" + }, + "◃": { + math: "\\triangleleft" + }, + "◄": { + math: "\\blackpointerleft" + }, + "◅": { + math: "\\whitepointerleft" + }, + "◆": { + math: "\\Diamondblack", + text: "\\ding{117}" + }, + "◇": { + math: "\\Diamond" + }, + "◈": { + math: "\\blackinwhitediamond" + }, + "◉": { + math: "\\fisheye" + }, + "◊": { + math: "\\lozenge" + }, + "○": { + math: "\\bigcirc" + }, + "◌": { + math: "\\dottedcircle" + }, + "◍": { + math: "\\circlevertfill" + }, + "◎": { + math: "\\bullseye" + }, + "●": { + math: "\\CIRCLE", + text: "\\ding{108}" + }, + "◐": { + math: "\\Elzcirfl" + }, + "◑": { + math: "\\Elzcirfr" + }, + "◒": { + math: "\\Elzcirfb" + }, + "◓": { + math: "\\circletophalfblack" + }, + "◔": { + math: "\\circleurquadblack" + }, + "◕": { + math: "\\blackcircleulquadwhite" + }, + "◖": { + math: "\\LEFTCIRCLE" + }, + "◗": { + math: "\\RIGHTCIRCLE", + text: "\\ding{119}" + }, + "◘": { + math: "\\Elzrvbull" + }, + "◙": { + math: "\\inversewhitecircle" + }, + "◚": { + math: "\\invwhiteupperhalfcircle" + }, + "◛": { + math: "\\invwhitelowerhalfcircle" + }, + "◜": { + math: "\\ularc" + }, + "◝": { + math: "\\urarc" + }, + "◞": { + math: "\\lrarc" + }, + "◟": { + math: "\\llarc" + }, + "◠": { + math: "\\topsemicircle" + }, + "◡": { + math: "\\botsemicircle" + }, + "◢": { + math: "\\lrblacktriangle" + }, + "◣": { + math: "\\llblacktriangle" + }, + "◤": { + math: "\\ulblacktriangle" + }, + "◥": { + math: "\\urblacktriangle" + }, + "◦": { + math: "\\smwhtcircle" + }, + "◧": { + math: "\\Elzsqfl" + }, + "◨": { + math: "\\Elzsqfr" + }, + "◩": { + math: "\\squareulblack" + }, + "◪": { + math: "\\Elzsqfse" + }, + "◫": { + math: "\\boxbar" + }, + "◬": { + math: "\\trianglecdot" + }, + "◭": { + math: "\\triangleleftblack" + }, + "◮": { + math: "\\trianglerightblack" + }, + "◯": { + math: "\\bigcirc" + }, + "◰": { + math: "\\squareulquad" + }, + "◱": { + math: "\\squarellquad" + }, + "◲": { + math: "\\squarelrquad" + }, + "◳": { + math: "\\squareurquad" + }, + "◴": { + math: "\\circleulquad" + }, + "◵": { + math: "\\circlellquad" + }, + "◶": { + math: "\\circlelrquad" + }, + "◷": { + math: "\\circleurquad" + }, + "◸": { + math: "\\ultriangle" + }, + "◹": { + math: "\\urtriangle" + }, + "◺": { + math: "\\lltriangle" + }, + "◻": { + math: "\\square" + }, + "◼": { + math: "\\blacksquare" + }, + "◽": { + math: "\\mdsmwhtsquare" + }, + "◾": { + math: "\\mdsmblksquare" + }, + "◿": { + math: "\\lrtriangle" + }, + "★": { + math: "\\bigstar", + text: "\\ding{72}" + }, + "☆": { + math: "\\bigwhitestar", + text: "\\ding{73}" + }, + "☉": { + math: "\\Sun" + }, + "☎": { + text: "\\ding{37}" + }, + "☐": { + math: "\\Square" + }, + "☑": { + math: "\\CheckedBox" + }, + "☒": { + math: "\\XBox" + }, + "☓": { + text: "X" + }, + "☕": { + math: "\\steaming" + }, + "☛": { + text: "\\ding{42}" + }, + "☞": { + math: "\\pointright", + text: "\\ding{43}" + }, + "☠": { + math: "\\skull" + }, + "☡": { + math: "\\danger" + }, + "☢": { + math: "\\radiation" + }, + "☣": { + math: "\\biohazard" + }, + "☯": { + math: "\\yinyang" + }, + "☹": { + math: "\\frownie" + }, + "☺": { + math: "\\smiley" + }, + "☻": { + math: "\\blacksmiley" + }, + "☼": { + math: "\\sun" + }, + "☽": { + text: "{\\rightmoon}", + textpackages: [ + "wasysym" + ] + }, + "☾": { + text: "{\\leftmoon}", + textpackages: [ + "wasysym" + ] + }, + "☿": { + math: "\\mercury", + text: "{\\mercury}" + }, + "♀": { + math: "\\female", + text: "{\\venus}" + }, + "♁": { + math: "\\earth" + }, + "♂": { + math: "\\male", + text: "{\\male}" + }, + "♃": { + math: "\\jupiter", + text: "{\\jupiter}" + }, + "♄": { + math: "\\saturn", + text: "{\\saturn}" + }, + "♅": { + math: "\\uranus", + text: "{\\uranus}" + }, + "♆": { + math: "\\neptune", + text: "{\\neptune}" + }, + "♇": { + math: "\\pluto", + text: "{\\pluto}" + }, + "♈": { + math: "\\aries", + text: "{\\aries}" + }, + "♉": { + math: "\\taurus", + text: "{\\taurus}" + }, + "♊": { + math: "\\gemini", + text: "{\\gemini}" + }, + "♋": { + math: "\\cancer", + text: "{\\cancer}" + }, + "♌": { + math: "\\leo", + text: "{\\leo}" + }, + "♍": { + math: "\\virgo", + text: "{\\virgo}" + }, + "♎": { + math: "\\libra", + text: "{\\libra}" + }, + "♏": { + math: "\\scorpio", + text: "{\\scorpio}" + }, + "♐": { + math: "\\sagittarius", + text: "{\\sagittarius}" + }, + "♑": { + math: "\\capricornus", + text: "{\\capricornus}" + }, + "♒": { + math: "\\aquarius", + text: "{\\aquarius}" + }, + "♓": { + math: "\\pisces", + text: "{\\pisces}" + }, + "♠": { + math: "\\spadesuit", + text: "\\ding{171}" + }, + "♡": { + math: "\\heartsuit" + }, + "♢": { + math: "\\diamond" + }, + "♣": { + math: "\\clubsuit", + text: "\\ding{168}" + }, + "♤": { + math: "\\varspadesuit" + }, + "♥": { + math: "\\varheartsuit", + text: "\\ding{170}" + }, + "♦": { + math: "\\vardiamondsuit", + text: "\\ding{169}" + }, + "♧": { + math: "\\varclubsuit" + }, + "♩": { + math: "\\quarternote", + text: "{\\quarternote}" + }, + "♪": { + math: "\\eighthnote", + text: "{\\eighthnote}" + }, + "♫": { + math: "\\twonotes" + }, + "♬": { + math: "\\sixteenthnote" + }, + "♭": { + math: "\\flat" + }, + "♮": { + math: "\\natural" + }, + "♯": { + math: "\\sharp" + }, + "♻": { + math: "\\recycle" + }, + "♾": { + math: "\\acidfree" + }, + "⚀": { + math: "\\dicei" + }, + "⚁": { + math: "\\diceii" + }, + "⚂": { + math: "\\diceiii" + }, + "⚃": { + math: "\\diceiv" + }, + "⚄": { + math: "\\dicev" + }, + "⚅": { + math: "\\dicevi" + }, + "⚆": { + math: "\\circledrightdot" + }, + "⚇": { + math: "\\circledtwodots" + }, + "⚈": { + math: "\\blackcircledrightdot" + }, + "⚉": { + math: "\\blackcircledtwodots" + }, + "⚓": { + math: "\\anchor" + }, + "⚔": { + math: "\\swords" + }, + "⚠": { + math: "\\warning" + }, + "⚥": { + math: "\\Hermaphrodite" + }, + "⚪": { + math: "\\medcirc" + }, + "⚫": { + math: "\\medbullet" + }, + "⚬": { + math: "\\mdsmwhtcircle" + }, + "⚲": { + math: "\\neuter" + }, + "✁": { + text: "\\ding{33}" + }, + "✂": { + text: "\\ding{34}" + }, + "✃": { + text: "\\ding{35}" + }, + "✄": { + text: "\\ding{36}" + }, + "✆": { + text: "\\ding{38}" + }, + "✇": { + text: "\\ding{39}" + }, + "✈": { + text: "\\ding{40}" + }, + "✉": { + text: "\\ding{41}" + }, + "✌": { + text: "\\ding{44}" + }, + "✍": { + text: "\\ding{45}" + }, + "✎": { + math: "\\pencil", + text: "\\ding{46}" + }, + "✏": { + text: "\\ding{47}" + }, + "✐": { + text: "\\ding{48}" + }, + "✑": { + text: "\\ding{49}" + }, + "✒": { + text: "\\ding{50}" + }, + "✓": { + math: "\\checkmark", + text: "\\ding{51}" + }, + "✔": { + text: "\\ding{52}" + }, + "✕": { + text: "\\ding{53}" + }, + "✖": { + text: "\\ding{54}" + }, + "✗": { + math: "\\ballotx", + text: "\\ding{55}" + }, + "✘": { + text: "\\ding{56}" + }, + "✙": { + text: "\\ding{57}" + }, + "✚": { + text: "\\ding{58}" + }, + "✛": { + text: "\\ding{59}" + }, + "✜": { + text: "\\ding{60}" + }, + "✝": { + text: "\\ding{61}" + }, + "✞": { + text: "\\ding{62}" + }, + "✟": { + text: "\\ding{63}" + }, + "✠": { + math: "\\maltese", + text: "\\ding{64}" + }, + "✡": { + text: "\\ding{65}" + }, + "✢": { + text: "\\ding{66}" + }, + "✣": { + text: "\\ding{67}" + }, + "✤": { + text: "\\ding{68}" + }, + "✥": { + text: "\\ding{69}" + }, + "✦": { + text: "\\ding{70}" + }, + "✧": { + text: "\\ding{71}" + }, + "✩": { + text: "\\ding{73}" + }, + "✪": { + math: "\\circledstar", + text: "\\ding{74}" + }, + "✫": { + text: "\\ding{75}" + }, + "✬": { + text: "\\ding{76}" + }, + "✭": { + text: "\\ding{77}" + }, + "✮": { + text: "\\ding{78}" + }, + "✯": { + text: "\\ding{79}" + }, + "✰": { + text: "\\ding{80}" + }, + "✱": { + text: "\\ding{81}" + }, + "✲": { + text: "\\ding{82}" + }, + "✳": { + text: "\\ding{83}" + }, + "✴": { + text: "\\ding{84}" + }, + "✵": { + text: "\\ding{85}" + }, + "✶": { + math: "\\varstar", + text: "\\ding{86}" + }, + "✷": { + text: "\\ding{87}" + }, + "✸": { + text: "\\ding{88}" + }, + "✹": { + text: "\\ding{89}" + }, + "✺": { + text: "\\ding{90}" + }, + "✻": { + text: "\\ding{91}" + }, + "✼": { + text: "\\ding{92}" + }, + "✽": { + math: "\\dingasterisk", + text: "\\ding{93}" + }, + "✾": { + text: "\\ding{94}" + }, + "✿": { + text: "\\ding{95}" + }, + "❀": { + text: "\\ding{96}" + }, + "❁": { + text: "\\ding{97}" + }, + "❂": { + text: "\\ding{98}" + }, + "❃": { + text: "\\ding{99}" + }, + "❄": { + text: "\\ding{100}" + }, + "❅": { + text: "\\ding{101}" + }, + "❆": { + text: "\\ding{102}" + }, + "❇": { + text: "\\ding{103}" + }, + "❈": { + text: "\\ding{104}" + }, + "❉": { + text: "\\ding{105}" + }, + "❊": { + text: "\\ding{106}" + }, + "❋": { + text: "\\ding{107}" + }, + "❍": { + text: "\\ding{109}" + }, + "❏": { + text: "\\ding{111}" + }, + "❐": { + text: "\\ding{112}" + }, + "❑": { + text: "\\ding{113}" + }, + "❒": { + text: "\\ding{114}" + }, + "❖": { + text: "\\ding{118}" + }, + "❘": { + text: "\\ding{120}" + }, + "❙": { + text: "\\ding{121}" + }, + "❚": { + text: "\\ding{122}" + }, + "❛": { + text: "\\ding{123}" + }, + "❜": { + text: "\\ding{124}" + }, + "❝": { + text: "\\ding{125}" + }, + "❞": { + text: "\\ding{126}" + }, + "❡": { + text: "\\ding{161}" + }, + "❢": { + text: "\\ding{162}" + }, + "❣": { + text: "\\ding{163}" + }, + "❤": { + text: "\\ding{164}" + }, + "❥": { + text: "\\ding{165}" + }, + "❦": { + text: "\\ding{166}" + }, + "❧": { + text: "\\ding{167}" + }, + "❲": { + math: "\\lbrbrak" + }, + "❳": { + math: "\\rbrbrak" + }, + "❶": { + text: "\\ding{182}" + }, + "❷": { + text: "\\ding{183}" + }, + "❸": { + text: "\\ding{184}" + }, + "❹": { + text: "\\ding{185}" + }, + "❺": { + text: "\\ding{186}" + }, + "❻": { + text: "\\ding{187}" + }, + "❼": { + text: "\\ding{188}" + }, + "❽": { + text: "\\ding{189}" + }, + "❾": { + text: "\\ding{190}" + }, + "❿": { + text: "\\ding{191}" + }, + "➀": { + text: "\\ding{192}" + }, + "➁": { + text: "\\ding{193}" + }, + "➂": { + text: "\\ding{194}" + }, + "➃": { + text: "\\ding{195}" + }, + "➄": { + text: "\\ding{196}" + }, + "➅": { + text: "\\ding{197}" + }, + "➆": { + text: "\\ding{198}" + }, + "➇": { + text: "\\ding{199}" + }, + "➈": { + text: "\\ding{200}" + }, + "➉": { + text: "\\ding{201}" + }, + "➊": { + text: "\\ding{202}" + }, + "➋": { + text: "\\ding{203}" + }, + "➌": { + text: "\\ding{204}" + }, + "➍": { + text: "\\ding{205}" + }, + "➎": { + text: "\\ding{206}" + }, + "➏": { + text: "\\ding{207}" + }, + "➐": { + text: "\\ding{208}" + }, + "➑": { + text: "\\ding{209}" + }, + "➒": { + text: "\\ding{210}" + }, + "➓": { + text: "\\ding{211}" + }, + "➔": { + text: "\\ding{212}" + }, + "➘": { + text: "\\ding{216}" + }, + "➙": { + text: "\\ding{217}" + }, + "➚": { + text: "\\ding{218}" + }, + "➛": { + math: "\\draftingarrow", + text: "\\ding{219}" + }, + "➜": { + text: "\\ding{220}" + }, + "➝": { + text: "\\ding{221}" + }, + "➞": { + text: "\\ding{222}" + }, + "➟": { + text: "\\ding{223}" + }, + "➠": { + text: "\\ding{224}" + }, + "➡": { + text: "\\ding{225}" + }, + "➢": { + math: "\\arrowbullet", + text: "\\ding{226}" + }, + "➣": { + text: "\\ding{227}" + }, + "➤": { + text: "\\ding{228}" + }, + "➥": { + text: "\\ding{229}" + }, + "➦": { + text: "\\ding{230}" + }, + "➧": { + text: "\\ding{231}" + }, + "➨": { + text: "\\ding{232}" + }, + "➩": { + text: "\\ding{233}" + }, + "➪": { + text: "\\ding{234}" + }, + "➫": { + text: "\\ding{235}" + }, + "➬": { + text: "\\ding{236}" + }, + "➭": { + text: "\\ding{237}" + }, + "➮": { + text: "\\ding{238}" + }, + "➯": { + text: "\\ding{239}" + }, + "➱": { + text: "\\ding{241}" + }, + "➲": { + text: "\\ding{242}" + }, + "➳": { + text: "\\ding{243}" + }, + "➴": { + text: "\\ding{244}" + }, + "➵": { + text: "\\ding{245}" + }, + "➶": { + text: "\\ding{246}" + }, + "➷": { + text: "\\ding{247}" + }, + "➸": { + text: "\\ding{248}" + }, + "➹": { + text: "\\ding{249}" + }, + "➺": { + text: "\\ding{250}" + }, + "➻": { + text: "\\ding{251}" + }, + "➼": { + text: "\\ding{252}" + }, + "➽": { + text: "\\ding{253}" + }, + "➾": { + text: "\\ding{254}" + }, + "⟀": { + math: "\\threedangle" + }, + "⟁": { + math: "\\whiteinwhitetriangle" + }, + "⟂": { + math: "\\perp" + }, + "⟃": { + math: "\\subsetcirc" + }, + "⟄": { + math: "\\supsetcirc" + }, + "⟅": { + math: "\\Lbag" + }, + "⟆": { + math: "\\Rbag" + }, + "⟇": { + math: "\\veedot" + }, + "⟈": { + math: "\\bsolhsub" + }, + "⟉": { + math: "\\suphsol" + }, + "⟌": { + math: "\\longdivision" + }, + "⟐": { + math: "\\Diamonddot" + }, + "⟑": { + math: "\\wedgedot" + }, + "⟒": { + math: "\\upin" + }, + "⟓": { + math: "\\pullback" + }, + "⟔": { + math: "\\pushout" + }, + "⟕": { + math: "\\leftouterjoin" + }, + "⟖": { + math: "\\rightouterjoin" + }, + "⟗": { + math: "\\fullouterjoin" + }, + "⟘": { + math: "\\bigbot" + }, + "⟙": { + math: "\\bigtop" + }, + "⟚": { + math: "\\DashVDash" + }, + "⟛": { + math: "\\dashVdash" + }, + "⟜": { + math: "\\multimapinv" + }, + "⟝": { + math: "\\vlongdash" + }, + "⟞": { + math: "\\longdashv" + }, + "⟟": { + math: "\\cirbot" + }, + "⟠": { + math: "\\lozengeminus" + }, + "⟡": { + math: "\\concavediamond" + }, + "⟢": { + math: "\\concavediamondtickleft" + }, + "⟣": { + math: "\\concavediamondtickright" + }, + "⟤": { + math: "\\whitesquaretickleft" + }, + "⟥": { + math: "\\whitesquaretickright" + }, + "⟦": { + math: "\\llbracket" + }, + "⟧": { + math: "\\rrbracket" + }, + "⟨": { + math: "\\langle" + }, + "⟩": { + math: "\\rangle" + }, + "⟪": { + math: "\\lang" + }, + "⟫": { + math: "\\rang" + }, + "⟬": { + math: "\\Lbrbrak" + }, + "⟭": { + math: "\\Rbrbrak" + }, + "⟮": { + math: "\\lgroup" + }, + "⟯": { + math: "\\rgroup" + }, + "⟰": { + math: "\\UUparrow" + }, + "⟱": { + math: "\\DDownarrow" + }, + "⟲": { + math: "\\acwgapcirclearrow" + }, + "⟳": { + math: "\\cwgapcirclearrow" + }, + "⟴": { + math: "\\rightarrowonoplus" + }, + "⟵": { + math: "\\longleftarrow" + }, + "⟶": { + math: "\\longrightarrow" + }, + "⟷": { + math: "\\longleftrightarrow" + }, + "⟸": { + math: "\\Longleftarrow" + }, + "⟹": { + math: "\\Longrightarrow" + }, + "⟺": { + math: "\\Longleftrightarrow" + }, + "⟻": { + math: "\\longmapsfrom" + }, + "⟼": { + math: "\\longmapsto" + }, + "⟽": { + math: "\\Longmapsfrom" + }, + "⟾": { + math: "\\Longmapsto" + }, + "⟿": { + math: "\\sim\\joinrel\\leadsto" + }, + "⤀": { + math: "\\psur" + }, + "⤁": { + math: "\\nVtwoheadrightarrow" + }, + "⤂": { + math: "\\nvLeftarrow" + }, + "⤃": { + math: "\\nvRightarrow" + }, + "⤄": { + math: "\\nvLeftrightarrow" + }, + "⤆": { + math: "\\Mapsfrom" + }, + "⤇": { + math: "\\Mapsto" + }, + "⤈": { + math: "\\downarrowbarred" + }, + "⤉": { + math: "\\uparrowbarred" + }, + "⤊": { + math: "\\Uuparrow" + }, + "⤋": { + math: "\\Ddownarrow" + }, + "⤌": { + math: "\\leftbkarrow" + }, + "⤍": { + math: "\\rightbkarrow" + }, + "⤎": { + math: "\\leftdbkarrow" + }, + "⤏": { + math: "\\dbkarow" + }, + "⤐": { + math: "\\drbkarow" + }, + "⤑": { + math: "\\rightdotarrow" + }, + "⤒": { + math: "\\UpArrowBar" + }, + "⤓": { + math: "\\DownArrowBar" + }, + "⤔": { + math: "\\pinj" + }, + "⤕": { + math: "\\finj" + }, + "⤖": { + math: "\\bij" + }, + "⤗": { + math: "\\nvtwoheadrightarrowtail" + }, + "⤘": { + math: "\\nVtwoheadrightarrowtail" + }, + "⤙": { + math: "\\lefttail" + }, + "⤚": { + math: "\\righttail" + }, + "⤛": { + math: "\\leftdbltail" + }, + "⤜": { + math: "\\rightdbltail" + }, + "⤝": { + math: "\\diamondleftarrow" + }, + "⤞": { + math: "\\rightarrowdiamond" + }, + "⤟": { + math: "\\diamondleftarrowbar" + }, + "⤠": { + math: "\\barrightarrowdiamond" + }, + "⤡": { + math: "\\nwsearrow" + }, + "⤢": { + math: "\\neswarrow" + }, + "⤫": { + math: "\\rdiagovfdiag" + }, + "⤬": { + math: "\\fdiagovrdiag" + }, + "⤭": { + math: "\\seovnearrow" + }, + "⤮": { + math: "\\neovsearrow" + }, + "⤯": { + math: "\\fdiagovnearrow" + }, + "⤰": { + math: "\\rdiagovsearrow" + }, + "⤱": { + math: "\\neovnwarrow" + }, + "⤲": { + math: "\\nwovnearrow" + }, + "⤴": { + math: "\\uprightcurvearrow" + }, + "⤵": { + math: "\\downrightcurvedarrow" + }, + "⤸": { + math: "\\cwrightarcarrow" + }, + "⤹": { + math: "\\acwleftarcarrow" + }, + "⤺": { + math: "\\acwoverarcarrow" + }, + "⤻": { + math: "\\acwunderarcarrow" + }, + "⤼": { + math: "\\curvearrowrightminus" + }, + "⤽": { + math: "\\curvearrowleftplus" + }, + "⤾": { + math: "\\cwundercurvearrow" + }, + "⤿": { + math: "\\ccwundercurvearrow" + }, + "⥀": { + math: "\\Elolarr" + }, + "⥁": { + math: "\\Elorarr" + }, + "⥂": { + math: "\\ElzRlarr" + }, + "⥃": { + math: "\\leftarrowshortrightarrow" + }, + "⥄": { + math: "\\ElzrLarr" + }, + "⥅": { + math: "\\rightarrowplus" + }, + "⥆": { + math: "\\leftarrowplus" + }, + "⥇": { + math: "\\Elzrarrx" + }, + "⥈": { + math: "\\leftrightarrowcircle" + }, + "⥉": { + math: "\\twoheaduparrowcircle" + }, + "⥊": { + math: "\\leftrightharpoon" + }, + "⥋": { + math: "\\rightleftharpoon" + }, + "⥌": { + math: "\\updownharpoonrightleft" + }, + "⥍": { + math: "\\updownharpoonleftright" + }, + "⥎": { + math: "\\LeftRightVector" + }, + "⥏": { + math: "\\RightUpDownVector" + }, + "⥐": { + math: "\\DownLeftRightVector" + }, + "⥑": { + math: "\\LeftUpDownVector" + }, + "⥒": { + math: "\\LeftVectorBar" + }, + "⥓": { + math: "\\RightVectorBar" + }, + "⥔": { + math: "\\RightUpVectorBar" + }, + "⥕": { + math: "\\RightDownVectorBar" + }, + "⥖": { + math: "\\DownLeftVectorBar" + }, + "⥗": { + math: "\\DownRightVectorBar" + }, + "⥘": { + math: "\\LeftUpVectorBar" + }, + "⥙": { + math: "\\LeftDownVectorBar" + }, + "⥚": { + math: "\\LeftTeeVector" + }, + "⥛": { + math: "\\RightTeeVector" + }, + "⥜": { + math: "\\RightUpTeeVector" + }, + "⥝": { + math: "\\RightDownTeeVector" + }, + "⥞": { + math: "\\DownLeftTeeVector" + }, + "⥟": { + math: "\\DownRightTeeVector" + }, + "⥠": { + math: "\\LeftUpTeeVector" + }, + "⥡": { + math: "\\LeftDownTeeVector" + }, + "⥢": { + math: "\\leftleftharpoons" + }, + "⥣": { + math: "\\upupharpoons" + }, + "⥤": { + math: "\\rightrightharpoons" + }, + "⥥": { + math: "\\downdownharpoons" + }, + "⥦": { + math: "\\leftrightharpoonsup" + }, + "⥧": { + math: "\\leftrightharpoonsdown" + }, + "⥨": { + math: "\\rightleftharpoonsup" + }, + "⥩": { + math: "\\rightleftharpoonsdown" + }, + "⥪": { + math: "\\leftbarharpoon" + }, + "⥫": { + math: "\\barleftharpoon" + }, + "⥬": { + math: "\\rightbarharpoon" + }, + "⥭": { + math: "\\barrightharpoon" + }, + "⥮": { + math: "\\UpEquilibrium" + }, + "⥯": { + math: "\\ReverseUpEquilibrium" + }, + "⥰": { + math: "\\RoundImplies" + }, + "⥱": { + math: "\\equalrightarrow" + }, + "⥲": { + math: "\\similarrightarrow" + }, + "⥳": { + math: "\\leftarrowsimilar" + }, + "⥴": { + math: "\\rightarrowsimilar" + }, + "⥵": { + math: "\\rightarrowapprox" + }, + "⥶": { + math: "\\ltlarr" + }, + "⥷": { + math: "\\leftarrowless" + }, + "⥸": { + math: "\\gtrarr" + }, + "⥹": { + math: "\\subrarr" + }, + "⥺": { + math: "\\leftarrowsubset" + }, + "⥻": { + math: "\\suplarr" + }, + "⥾": { + math: "\\upfishtail" + }, + "⥿": { + math: "\\downfishtail" + }, + "⦀": { + math: "\\Elztfnc" + }, + "⦁": { + math: "\\spot" + }, + "⦂": { + math: "\\typecolon" + }, + "⦃": { + math: "\\lBrace" + }, + "⦄": { + math: "\\rBrace" + }, + "⦆": { + math: "\\Elroang" + }, + "⦇": { + math: "\\limg" + }, + "⦈": { + math: "\\rimg" + }, + "⦉": { + math: "\\lblot" + }, + "⦊": { + math: "\\rblot" + }, + "⦋": { + math: "\\lbrackubar" + }, + "⦌": { + math: "\\rbrackubar" + }, + "⦍": { + math: "\\lbrackultick" + }, + "⦎": { + math: "\\rbracklrtick" + }, + "⦏": { + math: "\\lbracklltick" + }, + "⦐": { + math: "\\rbrackurtick" + }, + "⦑": { + math: "\\langledot" + }, + "⦒": { + math: "\\rangledot" + }, + "⦓": { + math: "<\\kern-0.58em(" + }, + "⦕": { + math: "\\Lparengtr" + }, + "⦖": { + math: "\\Rparenless" + }, + "⦗": { + math: "\\lblkbrbrak" + }, + "⦘": { + math: "\\rblkbrbrak" + }, + "⦙": { + math: "\\Elzddfnc" + }, + "⦚": { + math: "\\vzigzag" + }, + "⦛": { + math: "\\measuredangleleft" + }, + "⦜": { + math: "\\Angle" + }, + "⦝": { + math: "\\rightanglemdot" + }, + "⦞": { + math: "\\angles" + }, + "⦟": { + math: "\\angdnr" + }, + "⦠": { + math: "\\Elzlpargt" + }, + "⦡": { + math: "\\sphericalangleup" + }, + "⦢": { + math: "\\turnangle" + }, + "⦣": { + math: "\\revangle" + }, + "⦤": { + math: "\\angleubar" + }, + "⦥": { + math: "\\revangleubar" + }, + "⦦": { + math: "\\wideangledown" + }, + "⦧": { + math: "\\wideangleup" + }, + "⦨": { + math: "\\measanglerutone" + }, + "⦩": { + math: "\\measanglelutonw" + }, + "⦪": { + math: "\\measanglerdtose" + }, + "⦫": { + math: "\\measangleldtosw" + }, + "⦬": { + math: "\\measangleurtone" + }, + "⦭": { + math: "\\measangleultonw" + }, + "⦮": { + math: "\\measangledrtose" + }, + "⦯": { + math: "\\measangledltosw" + }, + "⦰": { + math: "\\revemptyset" + }, + "⦱": { + math: "\\emptysetobar" + }, + "⦲": { + math: "\\emptysetocirc" + }, + "⦳": { + math: "\\emptysetoarr" + }, + "⦴": { + math: "\\emptysetoarrl" + }, + "⦷": { + math: "\\circledparallel" + }, + "⦸": { + math: "\\circledbslash" + }, + "⦹": { + math: "\\operp" + }, + "⦺": { + math: "\\obot" + }, + "⦻": { + math: "\\olcross" + }, + "⦼": { + math: "\\odotslashdot" + }, + "⦽": { + math: "\\uparrowoncircle" + }, + "⦾": { + math: "\\circledwhitebullet" + }, + "⦿": { + math: "\\circledbullet" + }, + "⧀": { + math: "\\circledless" + }, + "⧁": { + math: "\\circledgtr" + }, + "⧂": { + math: "\\cirscir" + }, + "⧃": { + math: "\\cirE" + }, + "⧄": { + math: "\\boxslash" + }, + "⧅": { + math: "\\boxbslash" + }, + "⧆": { + math: "\\boxast" + }, + "⧇": { + math: "\\boxcircle" + }, + "⧈": { + math: "\\boxbox" + }, + "⧉": { + math: "\\boxonbox" + }, + "⧊": { + math: "\\ElzLap" + }, + "⧋": { + math: "\\Elzdefas" + }, + "⧌": { + math: "\\triangles" + }, + "⧍": { + math: "\\triangleserifs" + }, + "⧎": { + math: "\\rtriltri" + }, + "⧏": { + math: "\\LeftTriangleBar" + }, + "⧏̸": { + math: "\\NotLeftTriangleBar" + }, + "⧐": { + math: "\\RightTriangleBar" + }, + "⧐̸": { + math: "\\NotRightTriangleBar" + }, + "⧑": { + math: "\\lfbowtie" + }, + "⧒": { + math: "\\rfbowtie" + }, + "⧓": { + math: "\\fbowtie" + }, + "⧔": { + math: "\\lftimes" + }, + "⧕": { + math: "\\rftimes" + }, + "⧖": { + math: "\\hourglass" + }, + "⧗": { + math: "\\blackhourglass" + }, + "⧘": { + math: "\\lvzigzag" + }, + "⧙": { + math: "\\rvzigzag" + }, + "⧚": { + math: "\\Lvzigzag" + }, + "⧛": { + math: "\\Rvzigzag" + }, + "⧝": { + math: "\\tieinfty" + }, + "⧞": { + math: "\\nvinfty" + }, + "⧟": { + math: "\\multimapboth" + }, + "⧠": { + math: "\\laplac" + }, + "⧡": { + math: "\\lrtriangleeq" + }, + "⧢": { + math: "\\shuffle" + }, + "⧣": { + math: "\\eparsl" + }, + "⧤": { + math: "\\smeparsl" + }, + "⧥": { + math: "\\eqvparsl" + }, + "⧦": { + math: "\\gleichstark" + }, + "⧧": { + math: "\\thermod" + }, + "⧨": { + math: "\\downtriangleleftblack" + }, + "⧩": { + math: "\\downtrianglerightblack" + }, + "⧪": { + math: "\\blackdiamonddownarrow" + }, + "⧫": { + math: "\\blacklozenge" + }, + "⧬": { + math: "\\circledownarrow" + }, + "⧭": { + math: "\\blackcircledownarrow" + }, + "⧮": { + math: "\\errbarsquare" + }, + "⧯": { + math: "\\errbarblacksquare" + }, + "⧰": { + math: "\\errbardiamond" + }, + "⧱": { + math: "\\errbarblackdiamond" + }, + "⧲": { + math: "\\errbarcircle" + }, + "⧳": { + math: "\\errbarblackcircle" + }, + "⧴": { + math: "\\RuleDelayed" + }, + "⧵": { + math: "\\setminus" + }, + "⧶": { + math: "\\dsol" + }, + "⧷": { + math: "\\rsolbar" + }, + "⧸": { + math: "\\xsol" + }, + "⧹": { + math: "\\zhide" + }, + "⧺": { + math: "\\doubleplus" + }, + "⧻": { + math: "\\tripleplus" + }, + "⧼": { + math: "\\lcurvyangle" + }, + "⧽": { + math: "\\rcurvyangle" + }, + "⧾": { + math: "\\tplus" + }, + "⧿": { + math: "\\tminus" + }, + "⨀": { + math: "\\bigodot" + }, + "⨁": { + math: "\\bigoplus" + }, + "⨂": { + math: "\\bigotimes" + }, + "⨃": { + math: "\\bigcupdot" + }, + "⨄": { + math: "\\Elxuplus" + }, + "⨅": { + math: "\\ElzThr" + }, + "⨆": { + math: "\\Elxsqcup" + }, + "⨇": { + math: "\\ElzInf" + }, + "⨈": { + math: "\\ElzSup" + }, + "⨉": { + math: "\\varprod" + }, + "⨊": { + math: "\\modtwosum" + }, + "⨋": { + math: "\\sumint" + }, + "⨌": { + math: "\\iiiint" + }, + "⨍": { + math: "\\ElzCint" + }, + "⨎": { + math: "\\intBar" + }, + "⨏": { + math: "\\clockoint" + }, + "⨑": { + math: "\\awint" + }, + "⨒": { + math: "\\rppolint" + }, + "⨓": { + math: "\\scpolint" + }, + "⨔": { + math: "\\npolint" + }, + "⨕": { + math: "\\pointint" + }, + "⨖": { + math: "\\sqrint" + }, + "⨗": { + math: "\\intlarhk" + }, + "⨘": { + math: "\\intx" + }, + "⨙": { + math: "\\intcap" + }, + "⨚": { + math: "\\intcup" + }, + "⨛": { + math: "\\upint" + }, + "⨜": { + math: "\\lowint" + }, + "⨝": { + math: "\\Join" + }, + "⨞": { + math: "\\bigtriangleleft" + }, + "⨟": { + math: "\\zcmp" + }, + "⨠": { + math: "\\zpipe" + }, + "⨡": { + math: "\\zproject" + }, + "⨢": { + math: "\\ringplus" + }, + "⨣": { + math: "\\plushat" + }, + "⨤": { + math: "\\simplus" + }, + "⨦": { + math: "\\plussim" + }, + "⨧": { + math: "\\plussubtwo" + }, + "⨨": { + math: "\\plustrif" + }, + "⨩": { + math: "\\commaminus" + }, + "⨫": { + math: "\\minusfdots" + }, + "⨬": { + math: "\\minusrdots" + }, + "⨯": { + math: "\\ElzTimes" + }, + "⨰": { + math: "\\dottimes" + }, + "⨱": { + math: "\\timesbar" + }, + "⨲": { + math: "\\btimes" + }, + "⨳": { + math: "\\smashtimes" + }, + "⨶": { + math: "\\otimeshat" + }, + "⨷": { + math: "\\Otimes" + }, + "⨸": { + math: "\\odiv" + }, + "⨹": { + math: "\\triangleplus" + }, + "⨺": { + math: "\\triangleminus" + }, + "⨻": { + math: "\\triangletimes" + }, + "⨽": { + math: "\\intprodr" + }, + "⨾": { + math: "\\fcmp" + }, + "⨿": { + math: "\\amalg" + }, + "⩀": { + math: "\\capdot" + }, + "⩁": { + math: "\\uminus" + }, + "⩂": { + math: "\\barcup" + }, + "⩃": { + math: "\\barcap" + }, + "⩄": { + math: "\\capwedge" + }, + "⩅": { + math: "\\cupvee" + }, + "⩆": { + math: "\\cupovercap" + }, + "⩇": { + math: "\\capovercup" + }, + "⩈": { + math: "\\cupbarcap" + }, + "⩉": { + math: "\\capbarcup" + }, + "⩊": { + math: "\\twocups" + }, + "⩋": { + math: "\\twocaps" + }, + "⩌": { + math: "\\closedvarcup" + }, + "⩍": { + math: "\\closedvarcap" + }, + "⩎": { + math: "\\Sqcap" + }, + "⩏": { + math: "\\Sqcup" + }, + "⩐": { + math: "\\closedvarcupsmashprod" + }, + "⩑": { + math: "\\wedgeodot" + }, + "⩒": { + math: "\\veeodot" + }, + "⩓": { + math: "\\ElzAnd" + }, + "⩔": { + math: "\\ElzOr" + }, + "⩖": { + math: "\\ElOr" + }, + "⩗": { + math: "\\bigslopedvee" + }, + "⩘": { + math: "\\bigslopedwedge" + }, + "⩙": { + math: "\\veeonwedge" + }, + "⩚": { + math: "\\wedgemidvert" + }, + "⩛": { + math: "\\veemidvert" + }, + "⩜": { + math: "\\midbarwedge" + }, + "⩝": { + math: "\\midbarvee" + }, + "⩞": { + math: "\\perspcorrespond" + }, + "⩟": { + math: "\\Elzminhat" + }, + "⩠": { + math: "\\wedgedoublebar" + }, + "⩡": { + math: "\\varveebar" + }, + "⩢": { + math: "\\doublebarvee" + }, + "⩤": { + math: "\\dsub" + }, + "⩥": { + math: "\\rsub" + }, + "⩦": { + math: "\\eqdot" + }, + "⩧": { + math: "\\dotequiv" + }, + "⩨": { + math: "\\equivVert" + }, + "⩩": { + math: "\\equivVvert" + }, + "⩪": { + math: "\\dotsim" + }, + "⩫": { + math: "\\simrdots" + }, + "⩬": { + math: "\\simminussim" + }, + "⩭": { + math: "\\congdot" + }, + "⩮": { + math: "\\stackrel{*}{=}" + }, + "⩯": { + math: "\\hatapprox" + }, + "⩰": { + math: "\\approxeqq" + }, + "⩱": { + math: "\\eqqplus" + }, + "⩲": { + math: "\\pluseqq" + }, + "⩳": { + math: "\\eqqsim" + }, + "⩴": { + math: "\\Coloneqq" + }, + "⩵": { + math: "\\Equal" + }, + "⩶": { + math: "\\Same" + }, + "⩷": { + math: "\\ddotseq" + }, + "⩸": { + math: "\\equivDD" + }, + "⩹": { + math: "\\ltcir" + }, + "⩺": { + math: "\\gtcir" + }, + "⩻": { + math: "\\ltquest" + }, + "⩼": { + math: "\\gtquest" + }, + "⩽": { + math: "\\leqslant", + mathpackages: [ + "amssymb" + ] + }, + "⩽̸": { + math: "\\nleqslant", + mathpackages: [ + "amssymb" + ] + }, + "⩾": { + math: "\\geqslant", + mathpackages: [ + "amssymb" + ] + }, + "⩾̸": { + math: "\\ngeqslant", + mathpackages: [ + "amssymb" + ] + }, + "⩿": { + math: "\\lesdot" + }, + "⪀": { + math: "\\gesdot" + }, + "⪁": { + math: "\\lesdoto" + }, + "⪂": { + math: "\\gesdoto" + }, + "⪃": { + math: "\\lesdotor" + }, + "⪄": { + math: "\\gesdotol" + }, + "⪅": { + math: "\\lessapprox" + }, + "⪆": { + math: "\\gtrapprox" + }, + "⪇": { + math: "\\lneq" + }, + "⪈": { + math: "\\gneq" + }, + "⪉": { + math: "\\lnapprox" + }, + "⪊": { + math: "\\gnapprox" + }, + "⪋": { + math: "\\lesseqqgtr" + }, + "⪌": { + math: "\\gtreqqless" + }, + "⪍": { + math: "\\lsime" + }, + "⪎": { + math: "\\gsime" + }, + "⪏": { + math: "\\lsimg" + }, + "⪐": { + math: "\\gsiml" + }, + "⪑": { + math: "\\lgE" + }, + "⪒": { + math: "\\glE" + }, + "⪓": { + math: "\\lesges" + }, + "⪔": { + math: "\\gesles" + }, + "⪕": { + math: "\\eqslantless" + }, + "⪖": { + math: "\\eqslantgtr" + }, + "⪗": { + math: "\\elsdot" + }, + "⪘": { + math: "\\egsdot" + }, + "⪙": { + math: "\\eqqless" + }, + "⪚": { + math: "\\eqqgtr" + }, + "⪛": { + math: "\\eqqslantless" + }, + "⪜": { + math: "\\eqqslantgtr" + }, + "⪝": { + math: "\\Pisymbol{ppi020}{117}" + }, + "⪞": { + math: "\\Pisymbol{ppi020}{105}" + }, + "⪟": { + math: "\\simlE" + }, + "⪠": { + math: "\\simgE" + }, + "⪡": { + math: "\\NestedLessLess" + }, + "⪡̸": { + math: "\\NotNestedLessLess" + }, + "⪢": { + math: "\\NestedGreaterGreater" + }, + "⪢̸": { + math: "\\NotNestedGreaterGreater" + }, + "⪣": { + math: "\\partialmeetcontraction" + }, + "⪤": { + math: "\\glj" + }, + "⪥": { + math: "\\gla" + }, + "⪦": { + math: "\\leftslice" + }, + "⪧": { + math: "\\rightslice" + }, + "⪨": { + math: "\\lescc" + }, + "⪩": { + math: "\\gescc" + }, + "⪪": { + math: "\\smt" + }, + "⪫": { + math: "\\lat" + }, + "⪬": { + math: "\\smte" + }, + "⪭": { + math: "\\late" + }, + "⪮": { + math: "\\bumpeqq" + }, + "⪯": { + math: "\\preceq" + }, + "⪯̸": { + math: "\\not\\preceq" + }, + "⪰": { + math: "\\succeq" + }, + "⪰̸": { + math: "\\not\\succeq" + }, + "⪱": { + math: "\\precneq" + }, + "⪲": { + math: "\\succneq" + }, + "⪳": { + math: "\\preceqq" + }, + "⪴": { + math: "\\succeqq" + }, + "⪵": { + math: "\\precneqq" + }, + "⪶": { + math: "\\succneqq" + }, + "⪷": { + math: "\\precapprox" + }, + "⪸": { + math: "\\succapprox" + }, + "⪹": { + math: "\\precnapprox" + }, + "⪺": { + math: "\\succnapprox" + }, + "⪻": { + math: "\\llcurly" + }, + "⪼": { + math: "\\ggcurly" + }, + "⪽": { + math: "\\subsetdot" + }, + "⪾": { + math: "\\supsetdot" + }, + "⪿": { + math: "\\subsetplus" + }, + "⫀": { + math: "\\supsetplus" + }, + "⫁": { + math: "\\submult" + }, + "⫂": { + math: "\\supmult" + }, + "⫃": { + math: "\\subedot" + }, + "⫄": { + math: "\\supedot" + }, + "⫅": { + math: "\\subseteqq" + }, + "⫅̸": { + math: "\\nsubseteqq" + }, + "⫆": { + math: "\\supseteqq" + }, + "⫆̸": { + math: "\\nsupseteqq" + }, + "⫇": { + math: "\\subsim" + }, + "⫈": { + math: "\\supsim" + }, + "⫉": { + math: "\\subsetapprox" + }, + "⫊": { + math: "\\supsetapprox" + }, + "⫋": { + math: "\\subsetneqq" + }, + "⫌": { + math: "\\supsetneqq" + }, + "⫍": { + math: "\\lsqhook" + }, + "⫎": { + math: "\\rsqhook" + }, + "⫏": { + math: "\\csub" + }, + "⫐": { + math: "\\csup" + }, + "⫑": { + math: "\\csube" + }, + "⫒": { + math: "\\csupe" + }, + "⫓": { + math: "\\subsup" + }, + "⫔": { + math: "\\supsub" + }, + "⫕": { + math: "\\subsub" + }, + "⫖": { + math: "\\supsup" + }, + "⫗": { + math: "\\suphsub" + }, + "⫘": { + math: "\\supdsub" + }, + "⫙": { + math: "\\forkv" + }, + "⫚": { + math: "\\topfork" + }, + "⫛": { + math: "\\mlcp" + }, + "⫝̸": { + math: "\\forks" + }, + "⫝": { + math: "\\forksnot" + }, + "⫝̸": { + math: "\\forks" + }, + "⫞": { + math: "\\shortlefttack" + }, + "⫟": { + math: "\\shortdowntack" + }, + "⫠": { + math: "\\shortuptack" + }, + "⫡": { + math: "\\perps" + }, + "⫢": { + math: "\\vDdash" + }, + "⫣": { + math: "\\dashV" + }, + "⫤": { + math: "\\Dashv" + }, + "⫥": { + math: "\\DashV" + }, + "⫦": { + math: "\\varVdash" + }, + "⫧": { + math: "\\Barv" + }, + "⫨": { + math: "\\vBar" + }, + "⫩": { + math: "\\vBarv" + }, + "⫪": { + math: "\\Top" + }, + "⫬": { + math: "\\Not" + }, + "⫭": { + math: "\\bNot" + }, + "⫮": { + math: "\\revnmid" + }, + "⫯": { + math: "\\cirmid" + }, + "⫰": { + math: "\\midcir" + }, + "⫱": { + math: "\\topcir" + }, + "⫲": { + math: "\\nhpar" + }, + "⫳": { + math: "\\parsim" + }, + "⫴": { + math: "\\interleave" + }, + "⫵": { + math: "\\nhVvert" + }, + "⫶": { + math: "\\Elztdcol" + }, + "⫷": { + math: "\\lllnest" + }, + "⫸": { + math: "\\gggnest" + }, + "⫹": { + math: "\\leqqslant" + }, + "⫺": { + math: "\\geqqslant" + }, + "⫻": { + math: "\\trslash" + }, + "⫼": { + math: "\\biginterleave" + }, + "⫽": { + math: "{{/}\\!\\!{/}}" + }, + "⫽⃥": { + math: "{\\rlap{\\textbackslash}{{/}\\!\\!{/}}}" + }, + "⫾": { + math: "\\talloblong" + }, + "⫿": { + math: "\\bigtalloblong" + }, + "⬒": { + math: "\\squaretopblack" + }, + "⬓": { + math: "\\squarebotblack" + }, + "⬔": { + math: "\\squareurblack" + }, + "⬕": { + math: "\\squarellblack" + }, + "⬖": { + math: "\\diamondleftblack" + }, + "⬗": { + math: "\\diamondrightblack" + }, + "⬘": { + math: "\\diamondtopblack" + }, + "⬙": { + math: "\\diamondbotblack" + }, + "⬚": { + math: "\\dottedsquare" + }, + "⬛": { + math: "\\blacksquare" + }, + "⬜": { + math: "\\square" + }, + "⬝": { + math: "\\vysmblksquare" + }, + "⬞": { + math: "\\vysmwhtsquare" + }, + "⬟": { + math: "\\pentagonblack" + }, + "⬠": { + math: "\\pentagon" + }, + "⬡": { + math: "\\varhexagon" + }, + "⬢": { + math: "\\varhexagonblack" + }, + "⬣": { + math: "\\hexagonblack" + }, + "⬤": { + math: "\\lgblkcircle" + }, + "⬥": { + math: "\\mdblkdiamond" + }, + "⬦": { + math: "\\mdwhtdiamond" + }, + "⬧": { + math: "\\mdblklozenge" + }, + "⬨": { + math: "\\mdwhtlozenge" + }, + "⬩": { + math: "\\smblkdiamond" + }, + "⬪": { + math: "\\smblklozenge" + }, + "⬫": { + math: "\\smwhtlozenge" + }, + "⬬": { + math: "\\blkhorzoval" + }, + "⬭": { + math: "\\whthorzoval" + }, + "⬮": { + math: "\\blkvertoval" + }, + "⬯": { + math: "\\whtvertoval" + }, + "⬰": { + math: "\\circleonleftarrow" + }, + "⬱": { + math: "\\leftthreearrows" + }, + "⬲": { + math: "\\leftarrowonoplus" + }, + "⬳": { + math: "\\longleftsquigarrow" + }, + "⬴": { + math: "\\nvtwoheadleftarrow" + }, + "⬵": { + math: "\\nVtwoheadleftarrow" + }, + "⬶": { + math: "\\twoheadmapsfrom" + }, + "⬷": { + math: "\\twoheadleftdbkarrow" + }, + "⬸": { + math: "\\leftdotarrow" + }, + "⬹": { + math: "\\nvleftarrowtail" + }, + "⬺": { + math: "\\nVleftarrowtail" + }, + "⬻": { + math: "\\twoheadleftarrowtail" + }, + "⬼": { + math: "\\nvtwoheadleftarrowtail" + }, + "⬽": { + math: "\\nVtwoheadleftarrowtail" + }, + "⬾": { + math: "\\leftarrowx" + }, + "⬿": { + math: "\\leftcurvedarrow" + }, + "⭀": { + math: "\\equalleftarrow" + }, + "⭁": { + math: "\\bsimilarleftarrow" + }, + "⭂": { + math: "\\leftarrowbackapprox" + }, + "⭃": { + math: "\\rightarrowgtr" + }, + "⭄": { + math: "\\rightarrowsupset" + }, + "⭅": { + math: "\\LLeftarrow" + }, + "⭆": { + math: "\\RRightarrow" + }, + "⭇": { + math: "\\bsimilarrightarrow" + }, + "⭈": { + math: "\\rightarrowbackapprox" + }, + "⭉": { + math: "\\similarleftarrow" + }, + "⭊": { + math: "\\leftarrowapprox" + }, + "⭋": { + math: "\\leftarrowbsimilar" + }, + "⭌": { + math: "\\rightarrowbsimilar" + }, + "⭐": { + math: "\\medwhitestar" + }, + "⭑": { + math: "\\medblackstar" + }, + "⭒": { + math: "\\smwhitestar" + }, + "⭓": { + math: "\\rightpentagonblack" + }, + "⭔": { + math: "\\rightpentagon" + }, + "〈": { + math: "\\langle" + }, + "〉": { + math: "\\rangle" + }, + "〒": { + math: "\\postalmark" + }, + "〔": { + math: "\\lbrbrak" + }, + "〕": { + math: "\\rbrbrak" + }, + "〚": { + math: "\\openbracketleft" + }, + "〛": { + math: "\\openbracketright" + }, + "〰": { + math: "\\hzigzag" + }, + "ff": { + text: "ff" + }, + "fi": { + text: "fi" + }, + "fl": { + text: "fl" + }, + "ffi": { + text: "ffi" + }, + "ffl": { + text: "ffl" + }, + "ſt": { + text: "st" + }, + "st": { + text: "st" + }, + "�": { + text: "{\\dbend}" + }, + "𝐀": { + math: "\\mathbf{A}" + }, + "𝐁": { + math: "\\mathbf{B}" + }, + "𝐂": { + math: "\\mathbf{C}" + }, + "𝐃": { + math: "\\mathbf{D}" + }, + "𝐄": { + math: "\\mathbf{E}" + }, + "𝐅": { + math: "\\mathbf{F}" + }, + "𝐆": { + math: "\\mathbf{G}" + }, + "𝐇": { + math: "\\mathbf{H}" + }, + "𝐈": { + math: "\\mathbf{I}" + }, + "𝐉": { + math: "\\mathbf{J}" + }, + "𝐊": { + math: "\\mathbf{K}" + }, + "𝐋": { + math: "\\mathbf{L}" + }, + "𝐌": { + math: "\\mathbf{M}" + }, + "𝐍": { + math: "\\mathbf{N}" + }, + "𝐎": { + math: "\\mathbf{O}" + }, + "𝐏": { + math: "\\mathbf{P}" + }, + "𝐐": { + math: "\\mathbf{Q}" + }, + "𝐑": { + math: "\\mathbf{R}" + }, + "𝐒": { + math: "\\mathbf{S}" + }, + "𝐓": { + math: "\\mathbf{T}" + }, + "𝐔": { + math: "\\mathbf{U}" + }, + "𝐕": { + math: "\\mathbf{V}" + }, + "𝐖": { + math: "\\mathbf{W}" + }, + "𝐗": { + math: "\\mathbf{X}" + }, + "𝐘": { + math: "\\mathbf{Y}" + }, + "𝐙": { + math: "\\mathbf{Z}" + }, + "𝐚": { + math: "\\mathbf{a}" + }, + "𝐛": { + math: "\\mathbf{b}" + }, + "𝐜": { + math: "\\mathbf{c}" + }, + "𝐝": { + math: "\\mathbf{d}" + }, + "𝐞": { + math: "\\mathbf{e}" + }, + "𝐟": { + math: "\\mathbf{f}" + }, + "𝐠": { + math: "\\mathbf{g}" + }, + "𝐡": { + math: "\\mathbf{h}" + }, + "𝐢": { + math: "\\mathbf{i}" + }, + "𝐣": { + math: "\\mathbf{j}" + }, + "𝐤": { + math: "\\mathbf{k}" + }, + "𝐥": { + math: "\\mathbf{l}" + }, + "𝐦": { + math: "\\mathbf{m}" + }, + "𝐧": { + math: "\\mathbf{n}" + }, + "𝐨": { + math: "\\mathbf{o}" + }, + "𝐩": { + math: "\\mathbf{p}" + }, + "𝐪": { + math: "\\mathbf{q}" + }, + "𝐫": { + math: "\\mathbf{r}" + }, + "𝐬": { + math: "\\mathbf{s}" + }, + "𝐭": { + math: "\\mathbf{t}" + }, + "𝐮": { + math: "\\mathbf{u}" + }, + "𝐯": { + math: "\\mathbf{v}" + }, + "𝐰": { + math: "\\mathbf{w}" + }, + "𝐱": { + math: "\\mathbf{x}" + }, + "𝐲": { + math: "\\mathbf{y}" + }, + "𝐳": { + math: "\\mathbf{z}" + }, + "𝐴": { + math: "\\mathsl{A}" + }, + "𝐵": { + math: "\\mathsl{B}" + }, + "𝐶": { + math: "\\mathsl{C}" + }, + "𝐷": { + math: "\\mathsl{D}" + }, + "𝐸": { + math: "\\mathsl{E}" + }, + "𝐹": { + math: "\\mathsl{F}" + }, + "𝐺": { + math: "\\mathsl{G}" + }, + "𝐻": { + math: "\\mathsl{H}" + }, + "𝐼": { + math: "\\mathsl{I}" + }, + "𝐽": { + math: "\\mathsl{J}" + }, + "𝐾": { + math: "\\mathsl{K}" + }, + "𝐿": { + math: "\\mathsl{L}" + }, + "𝑀": { + math: "\\mathsl{M}" + }, + "𝑁": { + math: "\\mathsl{N}" + }, + "𝑂": { + math: "\\mathsl{O}" + }, + "𝑃": { + math: "\\mathsl{P}" + }, + "𝑄": { + math: "\\mathsl{Q}" + }, + "𝑅": { + math: "\\mathsl{R}" + }, + "𝑆": { + math: "\\mathsl{S}" + }, + "𝑇": { + math: "\\mathsl{T}" + }, + "𝑈": { + math: "\\mathsl{U}" + }, + "𝑉": { + math: "\\mathsl{V}" + }, + "𝑊": { + math: "\\mathsl{W}" + }, + "𝑋": { + math: "\\mathsl{X}" + }, + "𝑌": { + math: "\\mathsl{Y}" + }, + "𝑍": { + math: "\\mathsl{Z}" + }, + "𝑎": { + math: "\\mathsl{a}" + }, + "𝑏": { + math: "\\mathsl{b}" + }, + "𝑐": { + math: "\\mathsl{c}" + }, + "𝑑": { + math: "\\mathsl{d}" + }, + "𝑒": { + math: "\\mathsl{e}" + }, + "𝑓": { + math: "\\mathsl{f}" + }, + "𝑔": { + math: "\\mathsl{g}" + }, + "𝑖": { + math: "\\mathsl{i}" + }, + "𝑗": { + math: "\\mathsl{j}" + }, + "𝑘": { + math: "\\mathsl{k}" + }, + "𝑙": { + math: "\\mathsl{l}" + }, + "𝑚": { + math: "\\mathsl{m}" + }, + "𝑛": { + math: "\\mathsl{n}" + }, + "𝑜": { + math: "\\mathsl{o}" + }, + "𝑝": { + math: "\\mathsl{p}" + }, + "𝑞": { + math: "\\mathsl{q}" + }, + "𝑟": { + math: "\\mathsl{r}" + }, + "𝑠": { + math: "\\mathsl{s}" + }, + "𝑡": { + math: "\\mathsl{t}" + }, + "𝑢": { + math: "\\mathsl{u}" + }, + "𝑣": { + math: "\\mathsl{v}" + }, + "𝑤": { + math: "\\mathsl{w}" + }, + "𝑥": { + math: "\\mathsl{x}" + }, + "𝑦": { + math: "\\mathsl{y}" + }, + "𝑧": { + math: "\\mathsl{z}" + }, + "𝑨": { + math: "\\mathbit{A}" + }, + "𝑩": { + math: "\\mathbit{B}" + }, + "𝑪": { + math: "\\mathbit{C}" + }, + "𝑫": { + math: "\\mathbit{D}" + }, + "𝑬": { + math: "\\mathbit{E}" + }, + "𝑭": { + math: "\\mathbit{F}" + }, + "𝑮": { + math: "\\mathbit{G}" + }, + "𝑯": { + math: "\\mathbit{H}" + }, + "𝑰": { + math: "\\mathbit{I}" + }, + "𝑱": { + math: "\\mathbit{J}" + }, + "𝑲": { + math: "\\mathbit{K}" + }, + "𝑳": { + math: "\\mathbit{L}" + }, + "𝑴": { + math: "\\mathbit{M}" + }, + "𝑵": { + math: "\\mathbit{N}" + }, + "𝑶": { + math: "\\mathbit{O}" + }, + "𝑷": { + math: "\\mathbit{P}" + }, + "𝑸": { + math: "\\mathbit{Q}" + }, + "𝑹": { + math: "\\mathbit{R}" + }, + "𝑺": { + math: "\\mathbit{S}" + }, + "𝑻": { + math: "\\mathbit{T}" + }, + "𝑼": { + math: "\\mathbit{U}" + }, + "𝑽": { + math: "\\mathbit{V}" + }, + "𝑾": { + math: "\\mathbit{W}" + }, + "𝑿": { + math: "\\mathbit{X}" + }, + "𝒀": { + math: "\\mathbit{Y}" + }, + "𝒁": { + math: "\\mathbit{Z}" + }, + "𝒂": { + math: "\\mathbit{a}" + }, + "𝒃": { + math: "\\mathbit{b}" + }, + "𝒄": { + math: "\\mathbit{c}" + }, + "𝒅": { + math: "\\mathbit{d}" + }, + "𝒆": { + math: "\\mathbit{e}" + }, + "𝒇": { + math: "\\mathbit{f}" + }, + "𝒈": { + math: "\\mathbit{g}" + }, + "𝒉": { + math: "\\mathbit{h}" + }, + "𝒊": { + math: "\\mathbit{i}" + }, + "𝒋": { + math: "\\mathbit{j}" + }, + "𝒌": { + math: "\\mathbit{k}" + }, + "𝒍": { + math: "\\mathbit{l}" + }, + "𝒎": { + math: "\\mathbit{m}" + }, + "𝒏": { + math: "\\mathbit{n}" + }, + "𝒐": { + math: "\\mathbit{o}" + }, + "𝒑": { + math: "\\mathbit{p}" + }, + "𝒒": { + math: "\\mathbit{q}" + }, + "𝒓": { + math: "\\mathbit{r}" + }, + "𝒔": { + math: "\\mathbit{s}" + }, + "𝒕": { + math: "\\mathbit{t}" + }, + "𝒖": { + math: "\\mathbit{u}" + }, + "𝒗": { + math: "\\mathbit{v}" + }, + "𝒘": { + math: "\\mathbit{w}" + }, + "𝒙": { + math: "\\mathbit{x}" + }, + "𝒚": { + math: "\\mathbit{y}" + }, + "𝒛": { + math: "\\mathbit{z}" + }, + "𝒜": { + math: "\\mathscr{A}" + }, + "𝒞": { + math: "\\mathscr{C}" + }, + "𝒟": { + math: "\\mathscr{D}" + }, + "𝒢": { + math: "\\mathscr{G}" + }, + "𝒥": { + math: "\\mathscr{J}" + }, + "𝒦": { + math: "\\mathscr{K}" + }, + "𝒩": { + math: "\\mathscr{N}" + }, + "𝒪": { + math: "\\mathscr{O}" + }, + "𝒫": { + math: "\\mathscr{P}" + }, + "𝒬": { + math: "\\mathscr{Q}" + }, + "𝒮": { + math: "\\mathscr{S}" + }, + "𝒯": { + math: "\\mathscr{T}" + }, + "𝒰": { + math: "\\mathscr{U}" + }, + "𝒱": { + math: "\\mathscr{V}" + }, + "𝒲": { + math: "\\mathscr{W}" + }, + "𝒳": { + math: "\\mathscr{X}" + }, + "𝒴": { + math: "\\mathscr{Y}" + }, + "𝒵": { + math: "\\mathscr{Z}" + }, + "𝒶": { + math: "\\mathscr{a}" + }, + "𝒷": { + math: "\\mathscr{b}" + }, + "𝒸": { + math: "\\mathscr{c}" + }, + "𝒹": { + math: "\\mathscr{d}" + }, + "𝒻": { + math: "\\mathscr{f}" + }, + "𝒽": { + math: "\\mathscr{h}" + }, + "𝒾": { + math: "\\mathscr{i}" + }, + "𝒿": { + math: "\\mathscr{j}" + }, + "𝓀": { + math: "\\mathscr{k}" + }, + "𝓁": { + math: "\\mathscr{l}" + }, + "𝓂": { + math: "\\mathscr{m}" + }, + "𝓃": { + math: "\\mathscr{n}" + }, + "𝓅": { + math: "\\mathscr{p}" + }, + "𝓆": { + math: "\\mathscr{q}" + }, + "𝓇": { + math: "\\mathscr{r}" + }, + "𝓈": { + math: "\\mathscr{s}" + }, + "𝓉": { + math: "\\mathscr{t}" + }, + "𝓊": { + math: "\\mathscr{u}" + }, + "𝓋": { + math: "\\mathscr{v}" + }, + "𝓌": { + math: "\\mathscr{w}" + }, + "𝓍": { + math: "\\mathscr{x}" + }, + "𝓎": { + math: "\\mathscr{y}" + }, + "𝓏": { + math: "\\mathscr{z}" + }, + "𝓐": { + math: "\\mathmit{A}" + }, + "𝓑": { + math: "\\mathmit{B}" + }, + "𝓒": { + math: "\\mathmit{C}" + }, + "𝓓": { + math: "\\mathmit{D}" + }, + "𝓔": { + math: "\\mathmit{E}" + }, + "𝓕": { + math: "\\mathmit{F}" + }, + "𝓖": { + math: "\\mathmit{G}" + }, + "𝓗": { + math: "\\mathmit{H}" + }, + "𝓘": { + math: "\\mathmit{I}" + }, + "𝓙": { + math: "\\mathmit{J}" + }, + "𝓚": { + math: "\\mathmit{K}" + }, + "𝓛": { + math: "\\mathmit{L}" + }, + "𝓜": { + math: "\\mathmit{M}" + }, + "𝓝": { + math: "\\mathmit{N}" + }, + "𝓞": { + math: "\\mathmit{O}" + }, + "𝓟": { + math: "\\mathmit{P}" + }, + "𝓠": { + math: "\\mathmit{Q}" + }, + "𝓡": { + math: "\\mathmit{R}" + }, + "𝓢": { + math: "\\mathmit{S}" + }, + "𝓣": { + math: "\\mathmit{T}" + }, + "𝓤": { + math: "\\mathmit{U}" + }, + "𝓥": { + math: "\\mathmit{V}" + }, + "𝓦": { + math: "\\mathmit{W}" + }, + "𝓧": { + math: "\\mathmit{X}" + }, + "𝓨": { + math: "\\mathmit{Y}" + }, + "𝓩": { + math: "\\mathmit{Z}" + }, + "𝓪": { + math: "\\mathmit{a}" + }, + "𝓫": { + math: "\\mathmit{b}" + }, + "𝓬": { + math: "\\mathmit{c}" + }, + "𝓭": { + math: "\\mathmit{d}" + }, + "𝓮": { + math: "\\mathmit{e}" + }, + "𝓯": { + math: "\\mathmit{f}" + }, + "𝓰": { + math: "\\mathmit{g}" + }, + "𝓱": { + math: "\\mathmit{h}" + }, + "𝓲": { + math: "\\mathmit{i}" + }, + "𝓳": { + math: "\\mathmit{j}" + }, + "𝓴": { + math: "\\mathmit{k}" + }, + "𝓵": { + math: "\\mathmit{l}" + }, + "𝓶": { + math: "\\mathmit{m}" + }, + "𝓷": { + math: "\\mathmit{n}" + }, + "𝓸": { + math: "\\mathmit{o}" + }, + "𝓹": { + math: "\\mathmit{p}" + }, + "𝓺": { + math: "\\mathmit{q}" + }, + "𝓻": { + math: "\\mathmit{r}" + }, + "𝓼": { + math: "\\mathmit{s}" + }, + "𝓽": { + math: "\\mathmit{t}" + }, + "𝓾": { + math: "\\mathmit{u}" + }, + "𝓿": { + math: "\\mathmit{v}" + }, + "𝔀": { + math: "\\mathmit{w}" + }, + "𝔁": { + math: "\\mathmit{x}" + }, + "𝔂": { + math: "\\mathmit{y}" + }, + "𝔃": { + math: "\\mathmit{z}" + }, + "𝔄": { + math: "\\mathfrak{A}" + }, + "𝔅": { + math: "\\mathfrak{B}" + }, + "𝔇": { + math: "\\mathfrak{D}" + }, + "𝔈": { + math: "\\mathfrak{E}" + }, + "𝔉": { + math: "\\mathfrak{F}" + }, + "𝔊": { + math: "\\mathfrak{G}" + }, + "𝔍": { + math: "\\mathfrak{J}" + }, + "𝔎": { + math: "\\mathfrak{K}" + }, + "𝔏": { + math: "\\mathfrak{L}" + }, + "𝔐": { + math: "\\mathfrak{M}" + }, + "𝔑": { + math: "\\mathfrak{N}" + }, + "𝔒": { + math: "\\mathfrak{O}" + }, + "𝔓": { + math: "\\mathfrak{P}" + }, + "𝔔": { + math: "\\mathfrak{Q}" + }, + "𝔖": { + math: "\\mathfrak{S}" + }, + "𝔗": { + math: "\\mathfrak{T}" + }, + "𝔘": { + math: "\\mathfrak{U}" + }, + "𝔙": { + math: "\\mathfrak{V}" + }, + "𝔚": { + math: "\\mathfrak{W}" + }, + "𝔛": { + math: "\\mathfrak{X}" + }, + "𝔜": { + math: "\\mathfrak{Y}" + }, + "𝔞": { + math: "\\mathfrak{a}" + }, + "𝔟": { + math: "\\mathfrak{b}" + }, + "𝔠": { + math: "\\mathfrak{c}" + }, + "𝔡": { + math: "\\mathfrak{d}" + }, + "𝔢": { + math: "\\mathfrak{e}" + }, + "𝔣": { + math: "\\mathfrak{f}" + }, + "𝔤": { + math: "\\mathfrak{g}" + }, + "𝔥": { + math: "\\mathfrak{h}" + }, + "𝔦": { + math: "\\mathfrak{i}" + }, + "𝔧": { + math: "\\mathfrak{j}" + }, + "𝔨": { + math: "\\mathfrak{k}" + }, + "𝔩": { + math: "\\mathfrak{l}" + }, + "𝔪": { + math: "\\mathfrak{m}" + }, + "𝔫": { + math: "\\mathfrak{n}" + }, + "𝔬": { + math: "\\mathfrak{o}" + }, + "𝔭": { + math: "\\mathfrak{p}" + }, + "𝔮": { + math: "\\mathfrak{q}" + }, + "𝔯": { + math: "\\mathfrak{r}" + }, + "𝔰": { + math: "\\mathfrak{s}" + }, + "𝔱": { + math: "\\mathfrak{t}" + }, + "𝔲": { + math: "\\mathfrak{u}" + }, + "𝔳": { + math: "\\mathfrak{v}" + }, + "𝔴": { + math: "\\mathfrak{w}" + }, + "𝔵": { + math: "\\mathfrak{x}" + }, + "𝔶": { + math: "\\mathfrak{y}" + }, + "𝔷": { + math: "\\mathfrak{z}" + }, + "𝔸": { + math: "\\mathbb{A}" + }, + "𝔹": { + math: "\\mathbb{B}" + }, + "𝔻": { + math: "\\mathbb{D}" + }, + "𝔼": { + math: "\\mathbb{E}" + }, + "𝔽": { + math: "\\mathbb{F}" + }, + "𝔾": { + math: "\\mathbb{G}" + }, + "𝕀": { + math: "\\mathbb{I}" + }, + "𝕁": { + math: "\\mathbb{J}" + }, + "𝕂": { + math: "\\mathbb{K}" + }, + "𝕃": { + math: "\\mathbb{L}" + }, + "𝕄": { + math: "\\mathbb{M}" + }, + "𝕆": { + math: "\\mathbb{O}" + }, + "𝕊": { + math: "\\mathbb{S}" + }, + "𝕋": { + math: "\\mathbb{T}" + }, + "𝕌": { + math: "\\mathbb{U}" + }, + "𝕍": { + math: "\\mathbb{V}" + }, + "𝕎": { + math: "\\mathbb{W}" + }, + "𝕏": { + math: "\\mathbb{X}" + }, + "𝕐": { + math: "\\mathbb{Y}" + }, + "𝕒": { + math: "\\mathbb{a}" + }, + "𝕓": { + math: "\\mathbb{b}" + }, + "𝕔": { + math: "\\mathbb{c}" + }, + "𝕕": { + math: "\\mathbb{d}" + }, + "𝕖": { + math: "\\mathbb{e}" + }, + "𝕗": { + math: "\\mathbb{f}" + }, + "𝕘": { + math: "\\mathbb{g}" + }, + "𝕙": { + math: "\\mathbb{h}" + }, + "𝕚": { + math: "\\mathbb{i}" + }, + "𝕛": { + math: "\\mathbb{j}" + }, + "𝕜": { + math: "\\mathbb{k}" + }, + "𝕝": { + math: "\\mathbb{l}" + }, + "𝕞": { + math: "\\mathbb{m}" + }, + "𝕟": { + math: "\\mathbb{n}" + }, + "𝕠": { + math: "\\mathbb{o}" + }, + "𝕡": { + math: "\\mathbb{p}" + }, + "𝕢": { + math: "\\mathbb{q}" + }, + "𝕣": { + math: "\\mathbb{r}" + }, + "𝕤": { + math: "\\mathbb{s}" + }, + "𝕥": { + math: "\\mathbb{t}" + }, + "𝕦": { + math: "\\mathbb{u}" + }, + "𝕧": { + math: "\\mathbb{v}" + }, + "𝕨": { + math: "\\mathbb{w}" + }, + "𝕩": { + math: "\\mathbb{x}" + }, + "𝕪": { + math: "\\mathbb{y}" + }, + "𝕫": { + math: "\\mathbb{z}" + }, + "𝕬": { + math: "\\mathslbb{A}" + }, + "𝕭": { + math: "\\mathslbb{B}" + }, + "𝕮": { + math: "\\mathslbb{C}" + }, + "𝕯": { + math: "\\mathslbb{D}" + }, + "𝕰": { + math: "\\mathslbb{E}" + }, + "𝕱": { + math: "\\mathslbb{F}" + }, + "𝕲": { + math: "\\mathslbb{G}" + }, + "𝕳": { + math: "\\mathslbb{H}" + }, + "𝕴": { + math: "\\mathslbb{I}" + }, + "𝕵": { + math: "\\mathslbb{J}" + }, + "𝕶": { + math: "\\mathslbb{K}" + }, + "𝕷": { + math: "\\mathslbb{L}" + }, + "𝕸": { + math: "\\mathslbb{M}" + }, + "𝕹": { + math: "\\mathslbb{N}" + }, + "𝕺": { + math: "\\mathslbb{O}" + }, + "𝕻": { + math: "\\mathslbb{P}" + }, + "𝕼": { + math: "\\mathslbb{Q}" + }, + "𝕽": { + math: "\\mathslbb{R}" + }, + "𝕾": { + math: "\\mathslbb{S}" + }, + "𝕿": { + math: "\\mathslbb{T}" + }, + "𝖀": { + math: "\\mathslbb{U}" + }, + "𝖁": { + math: "\\mathslbb{V}" + }, + "𝖂": { + math: "\\mathslbb{W}" + }, + "𝖃": { + math: "\\mathslbb{X}" + }, + "𝖄": { + math: "\\mathslbb{Y}" + }, + "𝖅": { + math: "\\mathslbb{Z}" + }, + "𝖆": { + math: "\\mathslbb{a}" + }, + "𝖇": { + math: "\\mathslbb{b}" + }, + "𝖈": { + math: "\\mathslbb{c}" + }, + "𝖉": { + math: "\\mathslbb{d}" + }, + "𝖊": { + math: "\\mathslbb{e}" + }, + "𝖋": { + math: "\\mathslbb{f}" + }, + "𝖌": { + math: "\\mathslbb{g}" + }, + "𝖍": { + math: "\\mathslbb{h}" + }, + "𝖎": { + math: "\\mathslbb{i}" + }, + "𝖏": { + math: "\\mathslbb{j}" + }, + "𝖐": { + math: "\\mathslbb{k}" + }, + "𝖑": { + math: "\\mathslbb{l}" + }, + "𝖒": { + math: "\\mathslbb{m}" + }, + "𝖓": { + math: "\\mathslbb{n}" + }, + "𝖔": { + math: "\\mathslbb{o}" + }, + "𝖕": { + math: "\\mathslbb{p}" + }, + "𝖖": { + math: "\\mathslbb{q}" + }, + "𝖗": { + math: "\\mathslbb{r}" + }, + "𝖘": { + math: "\\mathslbb{s}" + }, + "𝖙": { + math: "\\mathslbb{t}" + }, + "𝖚": { + math: "\\mathslbb{u}" + }, + "𝖛": { + math: "\\mathslbb{v}" + }, + "𝖜": { + math: "\\mathslbb{w}" + }, + "𝖝": { + math: "\\mathslbb{x}" + }, + "𝖞": { + math: "\\mathslbb{y}" + }, + "𝖟": { + math: "\\mathslbb{z}" + }, + "𝖠": { + math: "\\mathsf{A}" + }, + "𝖡": { + math: "\\mathsf{B}" + }, + "𝖢": { + math: "\\mathsf{C}" + }, + "𝖣": { + math: "\\mathsf{D}" + }, + "𝖤": { + math: "\\mathsf{E}" + }, + "𝖥": { + math: "\\mathsf{F}" + }, + "𝖦": { + math: "\\mathsf{G}" + }, + "𝖧": { + math: "\\mathsf{H}" + }, + "𝖨": { + math: "\\mathsf{I}" + }, + "𝖩": { + math: "\\mathsf{J}" + }, + "𝖪": { + math: "\\mathsf{K}" + }, + "𝖫": { + math: "\\mathsf{L}" + }, + "𝖬": { + math: "\\mathsf{M}" + }, + "𝖭": { + math: "\\mathsf{N}" + }, + "𝖮": { + math: "\\mathsf{O}" + }, + "𝖯": { + math: "\\mathsf{P}" + }, + "𝖰": { + math: "\\mathsf{Q}" + }, + "𝖱": { + math: "\\mathsf{R}" + }, + "𝖲": { + math: "\\mathsf{S}" + }, + "𝖳": { + math: "\\mathsf{T}" + }, + "𝖴": { + math: "\\mathsf{U}" + }, + "𝖵": { + math: "\\mathsf{V}" + }, + "𝖶": { + math: "\\mathsf{W}" + }, + "𝖷": { + math: "\\mathsf{X}" + }, + "𝖸": { + math: "\\mathsf{Y}" + }, + "𝖹": { + math: "\\mathsf{Z}" + }, + "𝖺": { + math: "\\mathsf{a}" + }, + "𝖻": { + math: "\\mathsf{b}" + }, + "𝖼": { + math: "\\mathsf{c}" + }, + "𝖽": { + math: "\\mathsf{d}" + }, + "𝖾": { + math: "\\mathsf{e}" + }, + "𝖿": { + math: "\\mathsf{f}" + }, + "𝗀": { + math: "\\mathsf{g}" + }, + "𝗁": { + math: "\\mathsf{h}" + }, + "𝗂": { + math: "\\mathsf{i}" + }, + "𝗃": { + math: "\\mathsf{j}" + }, + "𝗄": { + math: "\\mathsf{k}" + }, + "𝗅": { + math: "\\mathsf{l}" + }, + "𝗆": { + math: "\\mathsf{m}" + }, + "𝗇": { + math: "\\mathsf{n}" + }, + "𝗈": { + math: "\\mathsf{o}" + }, + "𝗉": { + math: "\\mathsf{p}" + }, + "𝗊": { + math: "\\mathsf{q}" + }, + "𝗋": { + math: "\\mathsf{r}" + }, + "𝗌": { + math: "\\mathsf{s}" + }, + "𝗍": { + math: "\\mathsf{t}" + }, + "𝗎": { + math: "\\mathsf{u}" + }, + "𝗏": { + math: "\\mathsf{v}" + }, + "𝗐": { + math: "\\mathsf{w}" + }, + "𝗑": { + math: "\\mathsf{x}" + }, + "𝗒": { + math: "\\mathsf{y}" + }, + "𝗓": { + math: "\\mathsf{z}" + }, + "𝗔": { + math: "\\mathsfbf{A}" + }, + "𝗕": { + math: "\\mathsfbf{B}" + }, + "𝗖": { + math: "\\mathsfbf{C}" + }, + "𝗗": { + math: "\\mathsfbf{D}" + }, + "𝗘": { + math: "\\mathsfbf{E}" + }, + "𝗙": { + math: "\\mathsfbf{F}" + }, + "𝗚": { + math: "\\mathsfbf{G}" + }, + "𝗛": { + math: "\\mathsfbf{H}" + }, + "𝗜": { + math: "\\mathsfbf{I}" + }, + "𝗝": { + math: "\\mathsfbf{J}" + }, + "𝗞": { + math: "\\mathsfbf{K}" + }, + "𝗟": { + math: "\\mathsfbf{L}" + }, + "𝗠": { + math: "\\mathsfbf{M}" + }, + "𝗡": { + math: "\\mathsfbf{N}" + }, + "𝗢": { + math: "\\mathsfbf{O}" + }, + "𝗣": { + math: "\\mathsfbf{P}" + }, + "𝗤": { + math: "\\mathsfbf{Q}" + }, + "𝗥": { + math: "\\mathsfbf{R}" + }, + "𝗦": { + math: "\\mathsfbf{S}" + }, + "𝗧": { + math: "\\mathsfbf{T}" + }, + "𝗨": { + math: "\\mathsfbf{U}" + }, + "𝗩": { + math: "\\mathsfbf{V}" + }, + "𝗪": { + math: "\\mathsfbf{W}" + }, + "𝗫": { + math: "\\mathsfbf{X}" + }, + "𝗬": { + math: "\\mathsfbf{Y}" + }, + "𝗭": { + math: "\\mathsfbf{Z}" + }, + "𝗮": { + math: "\\mathsfbf{a}" + }, + "𝗯": { + math: "\\mathsfbf{b}" + }, + "𝗰": { + math: "\\mathsfbf{c}" + }, + "𝗱": { + math: "\\mathsfbf{d}" + }, + "𝗲": { + math: "\\mathsfbf{e}" + }, + "𝗳": { + math: "\\mathsfbf{f}" + }, + "𝗴": { + math: "\\mathsfbf{g}" + }, + "𝗵": { + math: "\\mathsfbf{h}" + }, + "𝗶": { + math: "\\mathsfbf{i}" + }, + "𝗷": { + math: "\\mathsfbf{j}" + }, + "𝗸": { + math: "\\mathsfbf{k}" + }, + "𝗹": { + math: "\\mathsfbf{l}" + }, + "𝗺": { + math: "\\mathsfbf{m}" + }, + "𝗻": { + math: "\\mathsfbf{n}" + }, + "𝗼": { + math: "\\mathsfbf{o}" + }, + "𝗽": { + math: "\\mathsfbf{p}" + }, + "𝗾": { + math: "\\mathsfbf{q}" + }, + "𝗿": { + math: "\\mathsfbf{r}" + }, + "𝘀": { + math: "\\mathsfbf{s}" + }, + "𝘁": { + math: "\\mathsfbf{t}" + }, + "𝘂": { + math: "\\mathsfbf{u}" + }, + "𝘃": { + math: "\\mathsfbf{v}" + }, + "𝘄": { + math: "\\mathsfbf{w}" + }, + "𝘅": { + math: "\\mathsfbf{x}" + }, + "𝘆": { + math: "\\mathsfbf{y}" + }, + "𝘇": { + math: "\\mathsfbf{z}" + }, + "𝘈": { + math: "\\mathsfsl{A}" + }, + "𝘉": { + math: "\\mathsfsl{B}" + }, + "𝘊": { + math: "\\mathsfsl{C}" + }, + "𝘋": { + math: "\\mathsfsl{D}" + }, + "𝘌": { + math: "\\mathsfsl{E}" + }, + "𝘍": { + math: "\\mathsfsl{F}" + }, + "𝘎": { + math: "\\mathsfsl{G}" + }, + "𝘏": { + math: "\\mathsfsl{H}" + }, + "𝘐": { + math: "\\mathsfsl{I}" + }, + "𝘑": { + math: "\\mathsfsl{J}" + }, + "𝘒": { + math: "\\mathsfsl{K}" + }, + "𝘓": { + math: "\\mathsfsl{L}" + }, + "𝘔": { + math: "\\mathsfsl{M}" + }, + "𝘕": { + math: "\\mathsfsl{N}" + }, + "𝘖": { + math: "\\mathsfsl{O}" + }, + "𝘗": { + math: "\\mathsfsl{P}" + }, + "𝘘": { + math: "\\mathsfsl{Q}" + }, + "𝘙": { + math: "\\mathsfsl{R}" + }, + "𝘚": { + math: "\\mathsfsl{S}" + }, + "𝘛": { + math: "\\mathsfsl{T}" + }, + "𝘜": { + math: "\\mathsfsl{U}" + }, + "𝘝": { + math: "\\mathsfsl{V}" + }, + "𝘞": { + math: "\\mathsfsl{W}" + }, + "𝘟": { + math: "\\mathsfsl{X}" + }, + "𝘠": { + math: "\\mathsfsl{Y}" + }, + "𝘡": { + math: "\\mathsfsl{Z}" + }, + "𝘢": { + math: "\\mathsfsl{a}" + }, + "𝘣": { + math: "\\mathsfsl{b}" + }, + "𝘤": { + math: "\\mathsfsl{c}" + }, + "𝘥": { + math: "\\mathsfsl{d}" + }, + "𝘦": { + math: "\\mathsfsl{e}" + }, + "𝘧": { + math: "\\mathsfsl{f}" + }, + "𝘨": { + math: "\\mathsfsl{g}" + }, + "𝘩": { + math: "\\mathsfsl{h}" + }, + "𝘪": { + math: "\\mathsfsl{i}" + }, + "𝘫": { + math: "\\mathsfsl{j}" + }, + "𝘬": { + math: "\\mathsfsl{k}" + }, + "𝘭": { + math: "\\mathsfsl{l}" + }, + "𝘮": { + math: "\\mathsfsl{m}" + }, + "𝘯": { + math: "\\mathsfsl{n}" + }, + "𝘰": { + math: "\\mathsfsl{o}" + }, + "𝘱": { + math: "\\mathsfsl{p}" + }, + "𝘲": { + math: "\\mathsfsl{q}" + }, + "𝘳": { + math: "\\mathsfsl{r}" + }, + "𝘴": { + math: "\\mathsfsl{s}" + }, + "𝘵": { + math: "\\mathsfsl{t}" + }, + "𝘶": { + math: "\\mathsfsl{u}" + }, + "𝘷": { + math: "\\mathsfsl{v}" + }, + "𝘸": { + math: "\\mathsfsl{w}" + }, + "𝘹": { + math: "\\mathsfsl{x}" + }, + "𝘺": { + math: "\\mathsfsl{y}" + }, + "𝘻": { + math: "\\mathsfsl{z}" + }, + "𝘼": { + math: "\\mathsfbfsl{A}" + }, + "𝘽": { + math: "\\mathsfbfsl{B}" + }, + "𝘾": { + math: "\\mathsfbfsl{C}" + }, + "𝘿": { + math: "\\mathsfbfsl{D}" + }, + "𝙀": { + math: "\\mathsfbfsl{E}" + }, + "𝙁": { + math: "\\mathsfbfsl{F}" + }, + "𝙂": { + math: "\\mathsfbfsl{G}" + }, + "𝙃": { + math: "\\mathsfbfsl{H}" + }, + "𝙄": { + math: "\\mathsfbfsl{I}" + }, + "𝙅": { + math: "\\mathsfbfsl{J}" + }, + "𝙆": { + math: "\\mathsfbfsl{K}" + }, + "𝙇": { + math: "\\mathsfbfsl{L}" + }, + "𝙈": { + math: "\\mathsfbfsl{M}" + }, + "𝙉": { + math: "\\mathsfbfsl{N}" + }, + "𝙊": { + math: "\\mathsfbfsl{O}" + }, + "𝙋": { + math: "\\mathsfbfsl{P}" + }, + "𝙌": { + math: "\\mathsfbfsl{Q}" + }, + "𝙍": { + math: "\\mathsfbfsl{R}" + }, + "𝙎": { + math: "\\mathsfbfsl{S}" + }, + "𝙏": { + math: "\\mathsfbfsl{T}" + }, + "𝙐": { + math: "\\mathsfbfsl{U}" + }, + "𝙑": { + math: "\\mathsfbfsl{V}" + }, + "𝙒": { + math: "\\mathsfbfsl{W}" + }, + "𝙓": { + math: "\\mathsfbfsl{X}" + }, + "𝙔": { + math: "\\mathsfbfsl{Y}" + }, + "𝙕": { + math: "\\mathsfbfsl{Z}" + }, + "𝙖": { + math: "\\mathsfbfsl{a}" + }, + "𝙗": { + math: "\\mathsfbfsl{b}" + }, + "𝙘": { + math: "\\mathsfbfsl{c}" + }, + "𝙙": { + math: "\\mathsfbfsl{d}" + }, + "𝙚": { + math: "\\mathsfbfsl{e}" + }, + "𝙛": { + math: "\\mathsfbfsl{f}" + }, + "𝙜": { + math: "\\mathsfbfsl{g}" + }, + "𝙝": { + math: "\\mathsfbfsl{h}" + }, + "𝙞": { + math: "\\mathsfbfsl{i}" + }, + "𝙟": { + math: "\\mathsfbfsl{j}" + }, + "𝙠": { + math: "\\mathsfbfsl{k}" + }, + "𝙡": { + math: "\\mathsfbfsl{l}" + }, + "𝙢": { + math: "\\mathsfbfsl{m}" + }, + "𝙣": { + math: "\\mathsfbfsl{n}" + }, + "𝙤": { + math: "\\mathsfbfsl{o}" + }, + "𝙥": { + math: "\\mathsfbfsl{p}" + }, + "𝙦": { + math: "\\mathsfbfsl{q}" + }, + "𝙧": { + math: "\\mathsfbfsl{r}" + }, + "𝙨": { + math: "\\mathsfbfsl{s}" + }, + "𝙩": { + math: "\\mathsfbfsl{t}" + }, + "𝙪": { + math: "\\mathsfbfsl{u}" + }, + "𝙫": { + math: "\\mathsfbfsl{v}" + }, + "𝙬": { + math: "\\mathsfbfsl{w}" + }, + "𝙭": { + math: "\\mathsfbfsl{x}" + }, + "𝙮": { + math: "\\mathsfbfsl{y}" + }, + "𝙯": { + math: "\\mathsfbfsl{z}" + }, + "𝙰": { + math: "\\mathtt{A}" + }, + "𝙱": { + math: "\\mathtt{B}" + }, + "𝙲": { + math: "\\mathtt{C}" + }, + "𝙳": { + math: "\\mathtt{D}" + }, + "𝙴": { + math: "\\mathtt{E}" + }, + "𝙵": { + math: "\\mathtt{F}" + }, + "𝙶": { + math: "\\mathtt{G}" + }, + "𝙷": { + math: "\\mathtt{H}" + }, + "𝙸": { + math: "\\mathtt{I}" + }, + "𝙹": { + math: "\\mathtt{J}" + }, + "𝙺": { + math: "\\mathtt{K}" + }, + "𝙻": { + math: "\\mathtt{L}" + }, + "𝙼": { + math: "\\mathtt{M}" + }, + "𝙽": { + math: "\\mathtt{N}" + }, + "𝙾": { + math: "\\mathtt{O}" + }, + "𝙿": { + math: "\\mathtt{P}" + }, + "𝚀": { + math: "\\mathtt{Q}" + }, + "𝚁": { + math: "\\mathtt{R}" + }, + "𝚂": { + math: "\\mathtt{S}" + }, + "𝚃": { + math: "\\mathtt{T}" + }, + "𝚄": { + math: "\\mathtt{U}" + }, + "𝚅": { + math: "\\mathtt{V}" + }, + "𝚆": { + math: "\\mathtt{W}" + }, + "𝚇": { + math: "\\mathtt{X}" + }, + "𝚈": { + math: "\\mathtt{Y}" + }, + "𝚉": { + math: "\\mathtt{Z}" + }, + "𝚊": { + math: "\\mathtt{a}" + }, + "𝚋": { + math: "\\mathtt{b}" + }, + "𝚌": { + math: "\\mathtt{c}" + }, + "𝚍": { + math: "\\mathtt{d}" + }, + "𝚎": { + math: "\\mathtt{e}" + }, + "𝚏": { + math: "\\mathtt{f}" + }, + "𝚐": { + math: "\\mathtt{g}" + }, + "𝚑": { + math: "\\mathtt{h}" + }, + "𝚒": { + math: "\\mathtt{i}" + }, + "𝚓": { + math: "\\mathtt{j}" + }, + "𝚔": { + math: "\\mathtt{k}" + }, + "𝚕": { + math: "\\mathtt{l}" + }, + "𝚖": { + math: "\\mathtt{m}" + }, + "𝚗": { + math: "\\mathtt{n}" + }, + "𝚘": { + math: "\\mathtt{o}" + }, + "𝚙": { + math: "\\mathtt{p}" + }, + "𝚚": { + math: "\\mathtt{q}" + }, + "𝚛": { + math: "\\mathtt{r}" + }, + "𝚜": { + math: "\\mathtt{s}" + }, + "𝚝": { + math: "\\mathtt{t}" + }, + "𝚞": { + math: "\\mathtt{u}" + }, + "𝚟": { + math: "\\mathtt{v}" + }, + "𝚠": { + math: "\\mathtt{w}" + }, + "𝚡": { + math: "\\mathtt{x}" + }, + "𝚢": { + math: "\\mathtt{y}" + }, + "𝚣": { + math: "\\mathtt{z}" + }, + "𝚤": { + math: "\\imath" + }, + "𝚥": { + math: "\\jmath" + }, + "𝚨": { + math: "\\mathbf{A}" + }, + "𝚩": { + math: "\\mathbf{B}" + }, + "𝚪": { + math: "\\mathbf{\\Gamma}" + }, + "𝚫": { + math: "\\mathbf{\\Delta}" + }, + "𝚬": { + math: "\\mathbf{E}" + }, + "𝚭": { + math: "\\mathbf{Z}" + }, + "𝚮": { + math: "\\mathbf{H}" + }, + "𝚯": { + math: "\\mathbf{\\Theta}" + }, + "𝚰": { + math: "\\mathbf{I}" + }, + "𝚱": { + math: "\\mathbf{K}" + }, + "𝚲": { + math: "\\mathbf{\\Lambda}" + }, + "𝚳": { + math: "M" + }, + "𝚴": { + math: "N" + }, + "𝚵": { + math: "\\mathbf{\\Xi}" + }, + "𝚶": { + math: "O" + }, + "𝚷": { + math: "\\mathbf{\\Pi}" + }, + "𝚸": { + math: "\\mathbf{P}" + }, + "𝚹": { + math: "\\mathbf{\\vartheta}" + }, + "𝚺": { + math: "\\mathbf{\\Sigma}" + }, + "𝚻": { + math: "\\mathbf{T}" + }, + "𝚼": { + math: "\\mathbf{\\Upsilon}" + }, + "𝚽": { + math: "\\mathbf{\\Phi}" + }, + "𝚾": { + math: "\\mathbf{X}" + }, + "𝚿": { + math: "\\mathbf{\\Psi}" + }, + "𝛀": { + math: "\\mathbf{\\Omega}" + }, + "𝛁": { + math: "\\mathbf{\\nabla}" + }, + "𝛂": { + math: "\\mathbf{\\alpha}" + }, + "𝛃": { + math: "\\mathbf{\\beta}" + }, + "𝛄": { + math: "\\mathbf{\\gamma}" + }, + "𝛅": { + math: "\\mathbf{\\delta}" + }, + "𝛆": { + math: "\\mathbf{\\epsilon}" + }, + "𝛇": { + math: "\\mathbf{\\zeta}" + }, + "𝛈": { + math: "\\mathbf{\\eta}" + }, + "𝛉": { + math: "\\mathbf{\\theta}" + }, + "𝛊": { + math: "\\mathbf{I}" + }, + "𝛋": { + math: "\\mathbf{K}" + }, + "𝛌": { + math: "\\mathbf{\\lambda}" + }, + "𝛍": { + math: "M" + }, + "𝛎": { + math: "N" + }, + "𝛏": { + math: "\\mathbf{\\xi}" + }, + "𝛐": { + math: "O" + }, + "𝛑": { + math: "\\mathbf{\\pi}" + }, + "𝛒": { + math: "\\mathbf{P}" + }, + "𝛓": { + math: "\\mathbf{\\varsigma}" + }, + "𝛔": { + math: "\\mathbf{\\sigma}" + }, + "𝛕": { + math: "\\mathbf{T}" + }, + "𝛖": { + math: "\\mathbf{\\upsilon}" + }, + "𝛗": { + math: "\\mathbf{\\phi}" + }, + "𝛘": { + math: "\\mathbf{X}" + }, + "𝛙": { + math: "\\mathbf{\\psi}" + }, + "𝛚": { + math: "\\mathbf{\\omega}" + }, + "𝛛": { + math: "\\partial" + }, + "𝛜": { + math: "\\in" + }, + "𝛝": { + math: "\\mathbf{\\vartheta}" + }, + "𝛞": { + math: "\\mathbf{\\varkappa}" + }, + "𝛟": { + math: "\\mathbf{\\phi}" + }, + "𝛠": { + math: "\\mathbf{\\varrho}" + }, + "𝛡": { + math: "\\mathbf{\\varpi}" + }, + "𝛢": { + math: "\\mathsl{A}" + }, + "𝛣": { + math: "\\mathsl{B}" + }, + "𝛤": { + math: "\\mathsl{\\Gamma}" + }, + "𝛥": { + math: "\\mathsl{\\Delta}" + }, + "𝛦": { + math: "\\mathsl{E}" + }, + "𝛧": { + math: "\\mathsl{Z}" + }, + "𝛨": { + math: "\\mathsl{H}" + }, + "𝛩": { + math: "\\mathsl{\\Theta}" + }, + "𝛪": { + math: "\\mathsl{I}" + }, + "𝛫": { + math: "\\mathsl{K}" + }, + "𝛬": { + math: "\\mathsl{\\Lambda}" + }, + "𝛭": { + math: "M" + }, + "𝛮": { + math: "N" + }, + "𝛯": { + math: "\\mathsl{\\Xi}" + }, + "𝛰": { + math: "O" + }, + "𝛱": { + math: "\\mathsl{\\Pi}" + }, + "𝛲": { + math: "\\mathsl{P}" + }, + "𝛳": { + math: "\\mathsl{\\Theta}" + }, + "𝛴": { + math: "\\mathsl{\\Sigma}" + }, + "𝛵": { + math: "\\mathsl{T}" + }, + "𝛶": { + math: "\\mathsl{\\Upsilon}" + }, + "𝛷": { + math: "\\mathsl{\\Phi}" + }, + "𝛸": { + math: "\\mathsl{X}" + }, + "𝛹": { + math: "\\mathsl{\\Psi}" + }, + "𝛺": { + math: "\\mathsl{\\Omega}" + }, + "𝛻": { + math: "\\mathsl{\\nabla}" + }, + "𝛼": { + math: "\\mathsl{A}" + }, + "𝛽": { + math: "\\mathsl{B}" + }, + "𝛾": { + math: "\\mathsl{\\gamma}" + }, + "𝛿": { + math: "\\mathsl{\\delta}" + }, + "𝜀": { + math: "\\mathsl{E}" + }, + "𝜁": { + math: "\\mathsl{Z}" + }, + "𝜂": { + math: "\\mathsl{H}" + }, + "𝜃": { + math: "\\mathsl{\\theta}" + }, + "𝜄": { + math: "\\mathsl{I}" + }, + "𝜅": { + math: "\\mathsl{K}" + }, + "𝜆": { + math: "\\mathsl{\\lambda}" + }, + "𝜇": { + math: "\\mu" + }, + "𝜈": { + math: "\\nu" + }, + "𝜉": { + math: "\\mathsl{\\xi}" + }, + "𝜊": { + math: "o" + }, + "𝜋": { + math: "\\mathsl{\\pi}" + }, + "𝜌": { + math: "\\mathsl{P}" + }, + "𝜍": { + math: "\\mathsl{\\varsigma}" + }, + "𝜎": { + math: "\\mathsl{\\sigma}" + }, + "𝜏": { + math: "\\mathsl{T}" + }, + "𝜐": { + math: "\\mathsl{\\upsilon}" + }, + "𝜑": { + math: "\\mathsl{\\varphi}" + }, + "𝜒": { + math: "\\mathsl{X}" + }, + "𝜓": { + math: "\\mathsl{\\psi}" + }, + "𝜔": { + math: "\\mathsl{\\omega}" + }, + "𝜕": { + math: "\\partial" + }, + "𝜖": { + math: "\\in" + }, + "𝜗": { + math: "\\mathsl{\\vartheta}" + }, + "𝜘": { + math: "\\mathsl{\\varkappa}" + }, + "𝜙": { + math: "\\mathsl{\\phi}" + }, + "𝜚": { + math: "\\mathsl{\\varrho}" + }, + "𝜛": { + math: "\\mathsl{\\varpi}" + }, + "𝜜": { + math: "\\mathbit{A}" + }, + "𝜝": { + math: "\\mathbit{B}" + }, + "𝜞": { + math: "\\mathbit{\\Gamma}" + }, + "𝜟": { + math: "\\mathbit{\\Delta}" + }, + "𝜠": { + math: "\\mathbit{E}" + }, + "𝜡": { + math: "\\mathbit{Z}" + }, + "𝜢": { + math: "\\mathbit{H}" + }, + "𝜣": { + math: "\\mathbit{\\Theta}" + }, + "𝜤": { + math: "\\mathbit{I}" + }, + "𝜥": { + math: "\\mathbit{K}" + }, + "𝜦": { + math: "\\mathbit{\\Lambda}" + }, + "𝜧": { + math: "M" + }, + "𝜨": { + math: "N" + }, + "𝜩": { + math: "\\mathbit{\\Xi}" + }, + "𝜪": { + math: "O" + }, + "𝜫": { + math: "\\mathbit{\\Pi}" + }, + "𝜬": { + math: "\\mathbit{P}" + }, + "𝜭": { + math: "\\mathbit{O}" + }, + "𝜮": { + math: "\\mathbit{\\Sigma}" + }, + "𝜯": { + math: "\\mathbit{T}" + }, + "𝜰": { + math: "\\mathbit{\\Upsilon}" + }, + "𝜱": { + math: "\\mathbit{\\Phi}" + }, + "𝜲": { + math: "\\mathbit{X}" + }, + "𝜳": { + math: "\\mathbit{\\Psi}" + }, + "𝜴": { + math: "\\mathbit{\\Omega}" + }, + "𝜵": { + math: "\\mathbit{\\nabla}" + }, + "𝜶": { + math: "\\mathbit{\\alpha}" + }, + "𝜷": { + math: "\\mathbit{\\beta}" + }, + "𝜸": { + math: "\\mathbit{\\gamma}" + }, + "𝜹": { + math: "\\mathbit{\\delta}" + }, + "𝜺": { + math: "\\mathbit{\\epsilon}" + }, + "𝜻": { + math: "\\mathbit{\\zeta}" + }, + "𝜼": { + math: "\\mathbit{\\eta}" + }, + "𝜽": { + math: "\\mathbit{\\theta}" + }, + "𝜾": { + math: "\\mathbit{\\imath}" + }, + "𝜿": { + math: "\\mathbit{\\kappa}" + }, + "𝝀": { + math: "\\mathbit{\\lambda}" + }, + "𝝁": { + math: "\\mu" + }, + "𝝂": { + math: "N" + }, + "𝝃": { + math: "\\mathbit{\\xi}" + }, + "𝝄": { + math: "O" + }, + "𝝅": { + math: "\\mathbit{\\pi}" + }, + "𝝆": { + math: "\\mathbit{\\rho}" + }, + "𝝇": { + math: "\\mathbit{\\varsigma}" + }, + "𝝈": { + math: "\\mathbit{\\sigma}" + }, + "𝝉": { + math: "\\mathbit{\\tau}" + }, + "𝝊": { + math: "\\mathbit{\\upsilon}" + }, + "𝝋": { + math: "\\mathbit{\\varphi}" + }, + "𝝌": { + math: "\\mathbit{\\chi}" + }, + "𝝍": { + math: "\\mathbit{\\psi}" + }, + "𝝎": { + math: "\\mathbit{\\omega}" + }, + "𝝏": { + math: "\\partial" + }, + "𝝐": { + math: "\\in" + }, + "𝝑": { + math: "\\mathbit{\\vartheta}" + }, + "𝝒": { + math: "\\mathbit{\\varkappa}" + }, + "𝝓": { + math: "\\mathbit{\\phi}" + }, + "𝝔": { + math: "\\mathbit{\\varrho}" + }, + "𝝕": { + math: "\\mathbit{\\varpi}" + }, + "𝝖": { + math: "\\mathsfbf{A}" + }, + "𝝗": { + math: "\\mathsfbf{B}" + }, + "𝝘": { + math: "\\mathsfbf{\\Gamma}" + }, + "𝝙": { + math: "\\mathsfbf{\\Delta}" + }, + "𝝚": { + math: "\\mathsfbf{E}" + }, + "𝝛": { + math: "\\mathsfbf{Z}" + }, + "𝝜": { + math: "\\mathsfbf{H}" + }, + "𝝝": { + math: "\\mathsfbf{\\Theta}" + }, + "𝝞": { + math: "\\mathsfbf{I}" + }, + "𝝟": { + math: "\\mathsfbf{K}" + }, + "𝝠": { + math: "\\mathsfbf{\\Lambda}" + }, + "𝝡": { + math: "M" + }, + "𝝢": { + math: "N" + }, + "𝝣": { + math: "\\mathsfbf{\\Xi}" + }, + "𝝤": { + math: "O" + }, + "𝝥": { + math: "\\mathsfbf{\\Pi}" + }, + "𝝦": { + math: "\\mathsfbf{P}" + }, + "𝝧": { + math: "\\mathsfbf{\\Theta}" + }, + "𝝨": { + math: "\\mathsfbf{\\Sigma}" + }, + "𝝩": { + math: "\\mathsfbf{T}" + }, + "𝝪": { + math: "\\mathsfbf{\\Upsilon}" + }, + "𝝫": { + math: "\\mathsfbf{\\Phi}" + }, + "𝝬": { + math: "\\mathsfbf{X}" + }, + "𝝭": { + math: "\\mathsfbf{\\Psi}" + }, + "𝝮": { + math: "\\mathsfbf{\\Omega}" + }, + "𝝯": { + math: "\\mathsfbf{\\nabla}" + }, + "𝝰": { + math: "\\mathsfbf{\\alpha}" + }, + "𝝱": { + math: "\\mathsfbf{\\beta}" + }, + "𝝲": { + math: "\\mathsfbf{\\gamma}" + }, + "𝝳": { + math: "\\mathsfbf{\\delta}" + }, + "𝝴": { + math: "\\mathsfbf{\\varepsilon}" + }, + "𝝵": { + math: "\\mathsfbf{\\zeta}" + }, + "𝝶": { + math: "\\mathsfbf{\\eta}" + }, + "𝝷": { + math: "\\mathsfbf{\\theta}" + }, + "𝝸": { + math: "\\mathsfbf{\\imath}" + }, + "𝝹": { + math: "\\mathsfbf{\\kappa}" + }, + "𝝺": { + math: "\\mathsfbf{\\lambda}" + }, + "𝝻": { + math: "\\mu" + }, + "𝝼": { + math: "\\nu" + }, + "𝝽": { + math: "\\mathsfbf{\\xi}" + }, + "𝝾": { + math: "o" + }, + "𝝿": { + math: "\\mathsfbf{\\pi}" + }, + "𝞀": { + math: "\\mathsfbf{\\rho}" + }, + "𝞁": { + math: "\\mathsfbf{\\varsigma}" + }, + "𝞂": { + math: "\\mathsfbf{\\sigma}" + }, + "𝞃": { + math: "\\mathsfbf{\\tau}" + }, + "𝞄": { + math: "\\mathsfbf{\\upsilon}" + }, + "𝞅": { + math: "\\mathsfbf{\\varphi}" + }, + "𝞆": { + math: "\\mathsfbf{\\chi}" + }, + "𝞇": { + math: "\\mathsfbf{\\psi}" + }, + "𝞈": { + math: "\\mathsfbf{\\omega}" + }, + "𝞉": { + math: "\\partial" + }, + "𝞊": { + math: "\\in" + }, + "𝞋": { + math: "\\mathsfbf{\\vartheta}" + }, + "𝞌": { + math: "\\mathsfbf{\\varkappa}" + }, + "𝞍": { + math: "\\mathsfbf{\\phi}" + }, + "𝞎": { + math: "\\mathsfbf{\\varrho}" + }, + "𝞏": { + math: "\\mathsfbf{\\varpi}" + }, + "𝞐": { + math: "\\mathsfbfsl{A}" + }, + "𝞑": { + math: "\\mathsfbfsl{B}" + }, + "𝞒": { + math: "\\mathsfbfsl{\\Gamma}" + }, + "𝞓": { + math: "\\mathsfbfsl{\\Delta}" + }, + "𝞔": { + math: "\\mathsfbfsl{E}" + }, + "𝞕": { + math: "\\mathsfbfsl{Z}" + }, + "𝞖": { + math: "\\mathsfbfsl{H}" + }, + "𝞗": { + math: "\\mathsfbfsl{\\Theta}" + }, + "𝞘": { + math: "\\mathsfbfsl{I}" + }, + "𝞙": { + math: "\\mathsfbfsl{K}" + }, + "𝞚": { + math: "\\mathsfbfsl{\\Lambda}" + }, + "𝞛": { + math: "\\mathsfbfsl{M}" + }, + "𝞜": { + math: "\\mathsfbfsl{N}" + }, + "𝞝": { + math: "\\mathsfbfsl{\\Xi}" + }, + "𝞞": { + math: "\\mathsfbfsl{O}" + }, + "𝞟": { + math: "\\mathsfbfsl{\\Pi}" + }, + "𝞠": { + math: "\\mathsfbfsl{P}" + }, + "𝞡": { + math: "\\mathsfbfsl{\\Theta}" + }, + "𝞢": { + math: "\\mathsfbfsl{\\Sigma}" + }, + "𝞣": { + math: "\\mathsfbfsl{T}" + }, + "𝞤": { + math: "\\mathsfbfsl{\\Upsilon}" + }, + "𝞥": { + math: "\\mathsfbfsl{\\Phi}" + }, + "𝞦": { + math: "\\mathsfbfsl{X}" + }, + "𝞧": { + math: "\\mathsfbfsl{\\Psi}" + }, + "𝞨": { + math: "\\mathsfbfsl{\\Omega}" + }, + "𝞩": { + math: "\\mathsfbfsl{\\nabla}" + }, + "𝞪": { + math: "\\mathsfbfsl{\\alpha}" + }, + "𝞫": { + math: "\\mathsfbfsl{\\beta}" + }, + "𝞬": { + math: "\\mathsfbfsl{\\gamma}" + }, + "𝞭": { + math: "\\mathsfbfsl{\\delta}" + }, + "𝞮": { + math: "\\mathsfbfsl{\\varepsilon}" + }, + "𝞯": { + math: "\\mathsfbfsl{\\zeta}" + }, + "𝞰": { + math: "\\mathsfbfsl{\\eta}" + }, + "𝞱": { + math: "\\mathsfbfsl{\\theta}" + }, + "𝞲": { + math: "\\mathsfbfsl{\\imath}" + }, + "𝞳": { + math: "\\mathsfbfsl{\\kappa}" + }, + "𝞴": { + math: "\\mathsfbfsl{\\lambda}" + }, + "𝞵": { + math: "\\mu" + }, + "𝞶": { + math: "\\nu" + }, + "𝞷": { + math: "\\mathsfbfsl{\\xi}" + }, + "𝞸": { + math: "o" + }, + "𝞹": { + math: "\\mathsfbfsl{\\pi}" + }, + "𝞺": { + math: "\\mathsfbfsl{\\rho}" + }, + "𝞻": { + math: "\\mathsfbfsl{\\varsigma}" + }, + "𝞼": { + math: "\\mathsfbfsl{\\sigma}" + }, + "𝞽": { + math: "\\mathsfbfsl{\\tau}" + }, + "𝞾": { + math: "\\mathsfbfsl{\\upsilon}" + }, + "𝞿": { + math: "\\mathsfbfsl{\\varphi}" + }, + "𝟀": { + math: "\\mathsfbfsl{\\chi}" + }, + "𝟁": { + math: "\\mathsfbfsl{\\psi}" + }, + "𝟂": { + math: "\\mathsfbfsl{\\omega}" + }, + "𝟃": { + math: "\\partial" + }, + "𝟄": { + math: "\\in" + }, + "𝟅": { + math: "\\mathsfbfsl{\\vartheta}" + }, + "𝟆": { + math: "\\mathsfbfsl{\\varkappa}" + }, + "𝟇": { + math: "\\mathsfbfsl{\\phi}" + }, + "𝟈": { + math: "\\mathsfbfsl{\\varrho}" + }, + "𝟉": { + math: "\\mathsfbfsl{\\varpi}" + }, + "𝟊": { + math: "\\mbfDigamma" + }, + "𝟋": { + math: "\\mbfdigamma" + }, + "𝟎": { + math: "\\mathbf{0}" + }, + "𝟏": { + math: "\\mathbf{1}" + }, + "𝟐": { + math: "\\mathbf{2}" + }, + "𝟑": { + math: "\\mathbf{3}" + }, + "𝟒": { + math: "\\mathbf{4}" + }, + "𝟓": { + math: "\\mathbf{5}" + }, + "𝟔": { + math: "\\mathbf{6}" + }, + "𝟕": { + math: "\\mathbf{7}" + }, + "𝟖": { + math: "\\mathbf{8}" + }, + "𝟗": { + math: "\\mathbf{9}" + }, + "𝟘": { + math: "\\mathbb{0}" + }, + "𝟙": { + math: "\\mathbb{1}" + }, + "𝟚": { + math: "\\mathbb{2}" + }, + "𝟛": { + math: "\\mathbb{3}" + }, + "𝟜": { + math: "\\mathbb{4}" + }, + "𝟝": { + math: "\\mathbb{5}" + }, + "𝟞": { + math: "\\mathbb{6}" + }, + "𝟟": { + math: "\\mathbb{7}" + }, + "𝟠": { + math: "\\mathbb{8}" + }, + "𝟡": { + math: "\\mathbb{9}" + }, + "𝟢": { + math: "\\mathsf{0}" + }, + "𝟣": { + math: "\\mathsf{1}" + }, + "𝟤": { + math: "\\mathsf{2}" + }, + "𝟥": { + math: "\\mathsf{3}" + }, + "𝟦": { + math: "\\mathsf{4}" + }, + "𝟧": { + math: "\\mathsf{5}" + }, + "𝟨": { + math: "\\mathsf{6}" + }, + "𝟩": { + math: "\\mathsf{7}" + }, + "𝟪": { + math: "\\mathsf{8}" + }, + "𝟫": { + math: "\\mathsf{9}" + }, + "𝟬": { + math: "\\mathsfbf{0}" + }, + "𝟭": { + math: "\\mathsfbf{1}" + }, + "𝟮": { + math: "\\mathsfbf{2}" + }, + "𝟯": { + math: "\\mathsfbf{3}" + }, + "𝟰": { + math: "\\mathsfbf{4}" + }, + "𝟱": { + math: "\\mathsfbf{5}" + }, + "𝟲": { + math: "\\mathsfbf{6}" + }, + "𝟳": { + math: "\\mathsfbf{7}" + }, + "𝟴": { + math: "\\mathsfbf{8}" + }, + "𝟵": { + math: "\\mathsfbf{9}" + }, + "𝟶": { + math: "\\mathtt{0}" + }, + "𝟷": { + math: "\\mathtt{1}" + }, + "𝟸": { + math: "\\mathtt{2}" + }, + "𝟹": { + math: "\\mathtt{3}" + }, + "𝟺": { + math: "\\mathtt{4}" + }, + "𝟻": { + math: "\\mathtt{5}" + }, + "𝟼": { + math: "\\mathtt{6}" + }, + "𝟽": { + math: "\\mathtt{7}" + }, + "𝟾": { + math: "\\mathtt{8}" + }, + "𝟿": { + math: "\\mathtt{9}" + } + }; + + var $$2 = { + math: "\\$", + text: "\\$" + }; + var _$2 = { + math: "\\_", + text: "\\_" + }; + var require$$2 = { + "#": { + math: "\\#", + text: "\\#" + }, + $: $$2, + "%": { + math: "\\%", + text: "\\%" + }, + "&": { + math: "\\&", + text: "\\&" + }, + "/​": { + text: "\\slash", + commandspacer: true + }, + "<": { + math: "<" + }, + ">": { + math: ">" + }, + "\\": { + math: "\\backslash", + text: "\\textbackslash", + commandspacer: true + }, + "^": { + math: "\\sphat", + text: "\\^" + }, + _: _$2, + "{": { + math: "\\lbrace", + text: "\\{" + }, + "}": { + math: "\\rbrace", + text: "\\}" + }, + "~": { + math: "\\sptilde", + text: "\\textasciitilde", + commandspacer: true + }, + " ": { + math: "~", + space: true, + text: "~" + }, + " ": { + text: " ", + space: true + }, + " ": { + math: "\\quad", + space: true + }, + " ": { + text: "\\hspace{0.6em}", + space: true + }, + " ": { + math: "\\quad", + space: true, + text: "\\hspace{1em}" + }, + " ": { + text: "\\;", + space: true + }, + " ": { + text: "\\hspace{0.25em}", + space: true + }, + " ": { + text: "\\hspace{0.166em}", + space: true + }, + " ": { + text: "\\hphantom{0}", + space: true + }, + " ": { + text: "\\hphantom{,}", + space: true + }, + " ": { + text: "\\,", + space: true + }, + " ": { + math: "\\mkern1mu", + space: true + }, + "​": { + text: "\\mbox", + commandspacer: true, + space: true + }, + " ": { + text: " ", + space: true + }, + " ": { + math: "\\:", + space: true, + text: "\\:" + } + }; + + var require$$3 = { + "\\#": "#", + "\\$": "$", + "\\%": "%", + "\\&": "&", + "\\slash": "/​", + "\\textless": "<", + "\\textgreater": ">", + "\\LaTeX": "LaTeX", + "\\textbackslash": "\\", + "\\backslash": "\\", + "\\": "\\", + "\\^": "^", + "\\sphat": "^", + "\\_": "_", + "\\t{ia}": "i︠a︡", + "{\\~ w}": "w̃", + "\\{": "{", + "\\lbrace": "{", + "\\textbar": "|", + "\\}": "}", + "\\rbrace": "}", + "\\textasciitilde": "~", + "\\sptilde": "~", + "\\textexclamdown": "¡", + "\\textcent": "¢", + "\\cent": "¢", + "\\textsterling": "£", + "\\pounds": "£", + "\\textcurrency": "¤", + "\\textyen": "¥", + "\\yen": "¥", + "\\textbrokenbar": "¦", + "\\textsection": "§", + "\\textasciidieresis": "¨", + "\\spddot": "¨", + "\\textcopyright": "©", + "\\textordfeminine": "ª", + "\\guillemotleft": "«", + "\\lnot": "¬", + "\\neg": "¬", + "\\-": "­", + "\\textregistered": "®", + "\\circledR": "®", + "\\textasciimacron": "¯", + "\\textdegree": "°", + "^\\circ": "°", + "\\pm": "±", + "^{2}": "²", + "^{3}": "³", + "\\textasciiacute": "´", + "\\textmu": "µ", + "\\textparagraph": "¶", + "^{1}": "¹", + "\\textordmasculine": "º", + "\\guillemotright": "»", + "\\frac{1}{4}": "¼", + "\\textonequarter": "¼", + "\\frac{1}{2}": "½", + "\\textonehalf": "½", + "\\frac{3}{4}": "¾", + "\\textthreequarters": "¾", + "\\textquestiondown": "¿", + "\\`A": "À", + "\\'A": "Á", + "\\^A": "Â", + "\\~A": "Ã", + "\\\"A": "Ä", + "\\AA": "Å", + "\\r{A}": "Å", + "{\\r A}": "Å", + "\\AE": "Æ", + "\\c{C}": "Ç", + "\\`E": "È", + "\\'E": "É", + "\\^E": "Ê", + "\\\"E": "Ë", + "\\`I": "Ì", + "\\'I": "Í", + "\\^I": "Î", + "\\\"I": "Ï", + "\\DH": "Ð", + "\\~N": "Ñ", + "\\`O": "Ò", + "\\'O": "Ó", + "\\^O": "Ô", + "\\~O": "Õ", + "\\\"O": "Ö", + "\\texttimes": "×", + "\\times": "×", + "\\O": "Ø", + "\\`U": "Ù", + "\\'U": "Ú", + "\\^U": "Û", + "\\\"U": "Ü", + "\\'Y": "Ý", + "\\TH": "Þ", + "\\ss": "ß", + "\\`a": "à", + "\\'a": "á", + "\\^a": "â", + "\\~a": "ã", + "\\\"a": "ä", + "\\aa": "å", + "\\r{a}": "å", + "{\\r a}": "å", + "\\ae": "æ", + "\\c{c}": "ç", + "\\`e": "è", + "\\'e": "é", + "\\^e": "ê", + "\\\"e": "ë", + "\\`i": "ì", + "\\`\\i": "ì", + "\\'i": "í", + "\\'\\i": "í", + "\\^i": "î", + "\\^\\i": "î", + "\\\"i": "ï", + "\\\"\\i": "ï", + "\\dh": "ð", + "\\eth": "ð", + "\\~n": "ñ", + "\\`o": "ò", + "\\'o": "ó", + "\\^o": "ô", + "\\~o": "õ", + "\\\"o": "ö", + "\\div": "÷", + "\\o": "ø", + "\\`u": "ù", + "\\'u": "ú", + "\\^u": "û", + "\\\"u": "ü", + "\\'y": "ý", + "\\th": "þ", + "\\\"y": "ÿ", + "\\=A": "Ā", + "\\=a": "ā", + "\\u{A}": "Ă", + "\\u{a}": "ă", + "\\k{A}": "Ą", + "\\k{a}": "ą", + "\\'C": "Ć", + "\\'c": "ć", + "\\^C": "Ĉ", + "\\^c": "ĉ", + "\\.C": "Ċ", + "\\.c": "ċ", + "\\v{C}": "Č", + "\\v{c}": "č", + "\\v{D}": "Ď", + "\\v{d}": "ď", + "\\DJ": "Đ", + "\\dj": "đ", + "\\=E": "Ē", + "\\=e": "ē", + "\\u{E}": "Ĕ", + "\\u{e}": "ĕ", + "\\.E": "Ė", + "\\.e": "ė", + "\\k{E}": "Ę", + "\\k{e}": "ę", + "\\v{E}": "Ě", + "\\v{e}": "ě", + "\\^G": "Ĝ", + "\\^g": "ĝ", + "\\u{G}": "Ğ", + "\\u{g}": "ğ", + "\\.G": "Ġ", + "\\.g": "ġ", + "\\c{G}": "Ģ", + "\\c{g}": "ģ", + "\\^H": "Ĥ", + "\\^h": "ĥ", + "{\\fontencoding{LELA}\\selectfont\\char40}": "Ħ", + "\\Elzxh": "ħ", + "\\~I": "Ĩ", + "\\~i": "ĩ", + "\\=I": "Ī", + "\\=i": "ī", + "\\u{I}": "Ĭ", + "{\\u \\i}": "ĭ", + "\\k{I}": "Į", + "\\k{i}": "į", + "\\.I": "İ", + "\\i": "ı", + "\\imath": "ı", + "\\^J": "Ĵ", + "\\^\\j": "ĵ", + "\\c{K}": "Ķ", + "\\c{k}": "ķ", + "{\\fontencoding{LELA}\\selectfont\\char91}": "ĸ", + "\\'L": "Ĺ", + "\\'l": "ĺ", + "\\c{L}": "Ļ", + "\\c{l}": "ļ", + "\\v{L}": "Ľ", + "\\v{l}": "ľ", + "{\\fontencoding{LELA}\\selectfont\\char201}": "Ŀ", + "{\\fontencoding{LELA}\\selectfont\\char202}": "ŀ", + "\\L": "Ł", + "\\l": "ł", + "\\'N": "Ń", + "\\'n": "ń", + "\\c{N}": "Ņ", + "\\c{n}": "ņ", + "\\v{N}": "Ň", + "\\v{n}": "ň", + "\\NG": "Ŋ", + "\\ng": "ŋ", + "\\=O": "Ō", + "\\=o": "ō", + "\\u{O}": "Ŏ", + "\\u{o}": "ŏ", + "\\H{O}": "Ő", + "\\H{o}": "ő", + "\\OE": "Œ", + "\\oe": "œ", + "\\'R": "Ŕ", + "\\'r": "ŕ", + "\\c{R}": "Ŗ", + "\\c{r}": "ŗ", + "\\v{R}": "Ř", + "\\v{r}": "ř", + "\\'S": "Ś", + "\\'s": "ś", + "\\^S": "Ŝ", + "\\^s": "ŝ", + "\\c{S}": "Ş", + "\\c{s}": "ş", + "\\v{S}": "Š", + "\\v{s}": "š", + "\\c{T}": "Ţ", + "\\c{t}": "ţ", + "\\v{T}": "Ť", + "\\v{t}": "ť", + "{\\fontencoding{LELA}\\selectfont\\char47}": "Ŧ", + "{\\fontencoding{LELA}\\selectfont\\char63}": "ŧ", + "\\~U": "Ũ", + "\\~u": "ũ", + "\\=U": "Ū", + "\\=u": "ū", + "\\u{U}": "Ŭ", + "\\u{u}": "ŭ", + "\\r{U}": "Ů", + "{\\r U}": "Ů", + "\\r{u}": "ů", + "\\ocirc{u}": "ů", + "{\\r u}": "ů", + "\\H{U}": "Ű", + "\\H{u}": "ű", + "\\k{U}": "Ų", + "\\k{u}": "ų", + "\\^W": "Ŵ", + "\\^w": "ŵ", + "\\^Y": "Ŷ", + "\\^y": "ŷ", + "\\\"Y": "Ÿ", + "\\'Z": "Ź", + "\\'z": "ź", + "\\.Z": "Ż", + "\\.z": "ż", + "\\v{Z}": "Ž", + "\\v{z}": "ž", + "\\texthvlig": "ƕ", + "\\textnrleg": "ƞ", + "\\textesh": "ƪ", + "\\Zbar": "Ƶ", + "{\\fontencoding{LELA}\\selectfont\\char195}": "ƺ", + "\\textdoublepipe": "ǂ", + "\\v{A}": "Ǎ", + "\\v{a}": "ǎ", + "\\v{I}": "Ǐ", + "\\v{i}": "ǐ", + "\\v{O}": "Ǒ", + "\\v{o}": "ǒ", + "\\v{U}": "Ǔ", + "\\v{u}": "ǔ", + "\\v{G}": "Ǧ", + "\\v{g}": "ǧ", + "\\v{K}": "Ǩ", + "\\v{k}": "ǩ", + "\\k{O}": "Ǫ", + "\\k{o}": "ǫ", + "\\v{j}": "ǰ", + "\\'G": "Ǵ", + "\\'g": "ǵ", + "\\c{E}": "Ȩ", + "\\c{e}": "ȩ", + "\\jmath": "ȷ", + "\\Elztrna": "ɐ", + "\\Elztrnsa": "ɒ", + "\\Elzopeno": "ɔ", + "\\Elzrtld": "ɖ", + "{\\fontencoding{LEIP}\\selectfont\\char61}": "ɘ", + "\\Elzschwa": "ə", + "\\varepsilon": "ɛ", + "\\Elzpgamma": "ɣ", + "\\Elzpbgam": "ɤ", + "\\Elztrnh": "ɥ", + "\\Elzbtdl": "ɬ", + "\\Elzrtll": "ɭ", + "\\Elztrnm": "ɯ", + "\\Elztrnmlr": "ɰ", + "\\Elzltlmr": "ɱ", + "\\Elzltln": "ɲ", + "\\Elzrtln": "ɳ", + "\\Elzclomeg": "ɷ", + "\\textphi": "ɸ", + "\\Elztrnr": "ɹ", + "\\Elztrnrl": "ɺ", + "\\Elzrttrnr": "ɻ", + "\\Elzrl": "ɼ", + "\\Elzrtlr": "ɽ", + "\\Elzfhr": "ɾ", + "{\\fontencoding{LEIP}\\selectfont\\char202}": "ɿ", + "\\Elzrtls": "ʂ", + "\\Elzesh": "ʃ", + "\\Elztrnt": "ʇ", + "\\Elzrtlt": "ʈ", + "\\Elzpupsil": "ʊ", + "\\Elzpscrv": "ʋ", + "\\Elzinvv": "ʌ", + "\\Elzinvw": "ʍ", + "\\Elztrny": "ʎ", + "\\Elzrtlz": "ʐ", + "\\Elzyogh": "ʒ", + "\\Elzglst": "ʔ", + "\\Elzreglst": "ʕ", + "\\Elzinglst": "ʖ", + "\\textturnk": "ʞ", + "\\Elzdyogh": "ʤ", + "\\Elztesh": "ʧ", + "\\textsuperscript{h}": "ʰ", + "^{h}": "ʰ", + "\\textsuperscript{j}": "ʲ", + "^{j}": "ʲ", + "\\textsuperscript{r}": "ʳ", + "^{r}": "ʳ", + "\\textsuperscript{w}": "ʷ", + "^{w}": "ʷ", + "\\textsuperscript{y}": "ʸ", + "^{y}": "ʸ", + "\\lasp": "ʿ", + "\\textasciicircum": "ˆ", + "\\textasciicaron": "ˇ", + "\\Elzverts": "ˈ", + "\\Elzverti": "ˌ", + "\\Elzlmrk": "ː", + "\\Elzhlmrk": "ˑ", + "\\Elzsbrhr": "˒", + "\\Elzsblhr": "˓", + "\\Elzrais": "˔", + "\\Elzlow": "˕", + "\\textasciibreve": "˘", + "\\textperiodcentered": "˙", + "\\texttildelow": "˜", + "\\textsuperscript{l}": "ˡ", + "^{l}": "ˡ", + "\\textsuperscript{s}": "ˢ", + "^{s}": "ˢ", + "\\textsuperscript{x}": "ˣ", + "^{x}": "ˣ", + "\\tone{55}": "˥", + "\\tone{44}": "˦", + "\\tone{33}": "˧", + "\\tone{22}": "˨", + "\\tone{11}": "˩", + "\\`": "̀", + "\\grave": "̀", + "\\textgravemacron": "̀̄", + "\\textgravedot": "̀̇", + "\\'": "́", + "\\acute": "́", + "\\textacutemacron": "́̄", + "\\textacutewedge": "́̌", + "\\hat": "̂", + "\\textcircumdot": "̂̇", + "\\~": "̃", + "\\tilde": "̃", + "\\texttildedot": "̃̇", + "\\=": "̄", + "\\bar": "̄", + "\\overline": "̅", + "\\u": "̆", + "\\breve": "̆", + "\\textbrevemacron": "̆̄", + "\\.": "̇", + "\\dot": "̇", + "\\textdotacute": "̇́", + "\\\"": "̈", + "\\ddot": "̈", + "\\ovhook": "̉", + "\\r": "̊", + "\\mathring": "̊", + "\\textringmacron": "̊̄", + "\\H": "̋", + "\\check": "̌", + "\\v": "̌", + "\\textvbaraccent": "̍", + "\\textdoublevbaraccent": "̎", + "\\textdoublegrave": "̏", + "\\textdotbreve": "̐", + "{\\fontencoding{LECO}\\selectfont\\char177}": "̑", + "\\oturnedcomma": "̒", + "\\ocommatopright": "̕", + "\\textsubgrave": "̖", + "\\textadvancing": "̘", + "\\textretracting": "̙", + "\\droang": "̚", + "\\textcorner": "̚", + "\\textsublhalfring": "̜", + "\\textraising": "̝", + "\\textlowering": "̞", + "\\textsubplus": "̟", + "\\Elzpalh": "̡", + "\\Elzrh": "̢", + "\\d": "̣", + "\\textsubumlaut": "̤", + "\\textsubring": "̥", + "\\c": "̧", + "\\k": "̨", + "\\textsyllabic": "̩", + "\\Elzsbbrg": "̪", + "\\textsubbridge": "̪", + "{\\fontencoding{LECO}\\selectfont\\char203}": "̫", + "\\textsubwedge": "̬", + "\\textsubarch": "̯", + "\\utilde": "̰", + "\\textsubtilde": "̰", + "\\textsubbar": "̱", + "\\underbar": "̱", + "\\underline": "̲", + "\\textsuperimposetilde": "̴", + "\\Elzxl": "̵", + "\\Elzbar": "̶", + "{\\fontencoding{LECO}\\selectfont\\char215}": "̷", + "\\not": "̸", + "\\textsubrhalfring": "̹", + "\\textinvsubbridge": "̺", + "\\textsubsquare": "̻", + "\\textseagull": "̼", + "\\textovercross": "̽", + "{\\fontencoding{LECO}\\selectfont\\char225}": "͡", + "\\'H": "Ή", + "{\\'{}I}": "Ί", + "{\\'{}O}": "Ό", + "\\mathrm{'Y}": "Ύ", + "\\mathrm{'\\Omega}": "Ώ", + "\\acute{\\ddot{\\iota}}": "ΐ", + "\\Gamma": "Γ", + "\\varGamma": "Γ", + "\\Delta": "Δ", + "\\Theta": "Θ", + "\\Lambda": "Λ", + "\\Xi": "Ξ", + "\\Pi": "Π", + "\\Sigma": "Σ", + "\\Upsilon": "Υ", + "\\Phi": "Φ", + "\\Psi": "Ψ", + "\\Omega": "Ω", + "\\mathrm{\\ddot{I}}": "Ϊ", + "\\mathrm{\\ddot{Y}}": "Ϋ", + "{\\'$\\alpha$}": "ά", + "\\acute{\\epsilon}": "έ", + "\\acute{\\eta}": "ή", + "\\acute{\\iota}": "ί", + "\\acute{\\ddot{\\upsilon}}": "ΰ", + "\\alpha": "α", + "\\beta": "β", + "\\gamma": "γ", + "\\delta": "δ", + "\\zeta": "ζ", + "\\eta": "η", + "\\texttheta": "θ", + "\\theta": "θ", + "\\iota": "ι", + "\\kappa": "κ", + "\\lambda": "λ", + "\\nu": "ν", + "\\xi": "ξ", + "\\pi": "π", + "\\rho": "ρ", + "\\varsigma": "ς", + "\\sigma": "σ", + "\\tau": "τ", + "\\upsilon": "υ", + "\\varphi": "φ", + "\\chi": "χ", + "\\psi": "ψ", + "\\omega": "ω", + "\\ddot{\\iota}": "ϊ", + "\\ddot{\\upsilon}": "ϋ", + "\\acute{\\upsilon}": "ύ", + "\\acute{\\omega}": "ώ", + "\\Pisymbol{ppi022}{87}": "ϐ", + "\\varbeta": "ϐ", + "\\textvartheta": "ϑ", + "\\vartheta": "ϑ", + "\\phi": "ϕ", + "\\varpi": "ϖ", + "\\Qoppa": "Ϙ", + "\\qoppa": "ϙ", + "\\Stigma": "Ϛ", + "\\stigma": "ϛ", + "\\Digamma": "Ϝ", + "\\digamma": "ϝ", + "\\Koppa": "Ϟ", + "\\koppa": "ϟ", + "\\Sampi": "Ϡ", + "\\sampi": "ϡ", + "\\varkappa": "ϰ", + "\\varrho": "ϱ", + "\\textTheta": "ϴ", + "\\upvarTheta": "ϴ", + "\\epsilon": "ϵ", + "\\backepsilon": "϶", + "\\cyrchar\\CYRYO": "Ё", + "\\cyrchar\\CYRDJE": "Ђ", + "\\cyrchar{\\'\\CYRG}": "Ѓ", + "\\cyrchar\\CYRIE": "Є", + "\\cyrchar\\CYRDZE": "Ѕ", + "\\cyrchar\\CYRII": "І", + "\\cyrchar\\CYRYI": "Ї", + "\\cyrchar\\CYRJE": "Ј", + "\\cyrchar\\CYRLJE": "Љ", + "\\cyrchar\\CYRNJE": "Њ", + "\\cyrchar\\CYRTSHE": "Ћ", + "\\cyrchar{\\'\\CYRK}": "Ќ", + "\\cyrchar\\CYRUSHRT": "Ў", + "\\cyrchar\\CYRDZHE": "Џ", + "\\cyrchar\\CYRA": "А", + "\\cyrchar\\CYRB": "Б", + "\\cyrchar\\CYRV": "В", + "\\cyrchar\\CYRG": "Г", + "\\cyrchar\\CYRD": "Д", + "\\cyrchar\\CYRE": "Е", + "\\cyrchar\\CYRZH": "Ж", + "\\cyrchar\\CYRZ": "З", + "\\cyrchar\\CYRI": "И", + "\\cyrchar\\CYRISHRT": "Й", + "\\cyrchar\\CYRK": "К", + "\\cyrchar\\CYRL": "Л", + "\\cyrchar\\CYRM": "М", + "\\cyrchar\\CYRN": "Н", + "\\cyrchar\\CYRO": "О", + "\\cyrchar\\CYRP": "П", + "\\cyrchar\\CYRR": "Р", + "\\cyrchar\\CYRS": "С", + "\\cyrchar\\CYRT": "Т", + "\\cyrchar\\CYRU": "У", + "\\cyrchar\\CYRF": "Ф", + "\\cyrchar\\CYRH": "Х", + "\\cyrchar\\CYRC": "Ц", + "\\cyrchar\\CYRCH": "Ч", + "\\cyrchar\\CYRSH": "Ш", + "\\cyrchar\\CYRSHCH": "Щ", + "\\cyrchar\\CYRHRDSN": "Ъ", + "\\bud": "Ъ", + "\\cdprime": "Ъ", + "\\cyrchar\\CYRERY": "Ы", + "\\cyrchar\\CYRSFTSN": "Ь", + "\\cprime": "Ь", + "\\cyrchar\\CYREREV": "Э", + "\\cyrchar\\CYRYU": "Ю", + "\\cyrchar\\CYRYA": "Я", + "\\cyrchar\\cyra": "а", + "\\cyrchar\\cyrb": "б", + "\\cyrchar\\cyrv": "в", + "\\cyrchar\\cyrg": "г", + "\\cyrchar\\cyrd": "д", + "\\cyrchar\\cyre": "е", + "\\cyrchar\\cyrzh": "ж", + "\\cyrchar\\cyrz": "з", + "\\cyrchar\\cyri": "и", + "\\cyrchar\\cyrishrt": "й", + "\\cyrchar\\cyrk": "к", + "\\cyrchar\\cyrl": "л", + "\\cyrchar\\cyrm": "м", + "\\cyrchar\\cyrn": "н", + "\\cyrchar\\cyro": "о", + "\\cyrchar\\cyrp": "п", + "\\cyrchar\\cyrr": "р", + "\\cyrchar\\cyrs": "с", + "\\cyrchar\\cyrt": "т", + "\\cyrchar\\cyru": "у", + "\\cyrchar\\cyrf": "ф", + "\\cyrchar\\cyrh": "х", + "\\cyrchar\\cyrc": "ц", + "\\cyrchar\\cyrch": "ч", + "\\cyrchar\\cyrsh": "ш", + "\\cyrchar\\cyrshch": "щ", + "\\cyrchar\\cyrhrdsn": "ъ", + "\\cyrchar\\cyrery": "ы", + "\\cyrchar\\cyrsftsn": "ь", + "\\cyrchar\\cyrerev": "э", + "\\cyrchar\\cyryu": "ю", + "\\cyrchar\\cyrya": "я", + "\\cyrchar\\cyryo": "ё", + "\\cyrchar\\cyrdje": "ђ", + "\\cyrchar{\\'\\cyrg}": "ѓ", + "\\cyrchar\\cyrie": "є", + "\\cyrchar\\cyrdze": "ѕ", + "\\cyrchar\\cyrii": "і", + "\\cyrchar\\cyryi": "ї", + "\\cyrchar\\cyrje": "ј", + "\\cyrchar\\cyrlje": "љ", + "\\cyrchar\\cyrnje": "њ", + "\\cyrchar\\cyrtshe": "ћ", + "\\cyrchar{\\'\\cyrk}": "ќ", + "\\cyrchar\\cyrushrt": "ў", + "\\cyrchar\\cyrdzhe": "џ", + "\\cyrchar\\CYROMEGA": "Ѡ", + "\\cyrchar\\cyromega": "ѡ", + "\\cyrchar\\CYRYAT": "Ѣ", + "\\cyrchar\\CYRIOTE": "Ѥ", + "\\cyrchar\\cyriote": "ѥ", + "\\cyrchar\\CYRLYUS": "Ѧ", + "\\cyrchar\\cyrlyus": "ѧ", + "\\cyrchar\\CYRIOTLYUS": "Ѩ", + "\\cyrchar\\cyriotlyus": "ѩ", + "\\cyrchar\\CYRBYUS": "Ѫ", + "\\cyrchar\\CYRIOTBYUS": "Ѭ", + "\\cyrchar\\cyriotbyus": "ѭ", + "\\cyrchar\\CYRKSI": "Ѯ", + "\\cyrchar\\cyrksi": "ѯ", + "\\cyrchar\\CYRPSI": "Ѱ", + "\\cyrchar\\cyrpsi": "ѱ", + "\\cyrchar\\CYRFITA": "Ѳ", + "\\cyrchar\\CYRIZH": "Ѵ", + "\\cyrchar\\CYRUK": "Ѹ", + "\\cyrchar\\cyruk": "ѹ", + "\\cyrchar\\CYROMEGARND": "Ѻ", + "\\cyrchar\\cyromegarnd": "ѻ", + "\\cyrchar\\CYROMEGATITLO": "Ѽ", + "\\cyrchar\\cyromegatitlo": "ѽ", + "\\cyrchar\\CYROT": "Ѿ", + "\\cyrchar\\cyrot": "ѿ", + "\\cyrchar\\CYRKOPPA": "Ҁ", + "\\cyrchar\\cyrkoppa": "ҁ", + "\\cyrchar\\cyrthousands": "҂", + "\\cyrchar\\cyrhundredthousands": "҈", + "\\cyrchar\\cyrmillions": "҉", + "\\cyrchar\\CYRSEMISFTSN": "Ҍ", + "\\cyrchar\\cyrsemisftsn": "ҍ", + "\\cyrchar\\CYRRTICK": "Ҏ", + "\\cyrchar\\cyrrtick": "ҏ", + "\\cyrchar\\CYRGUP": "Ґ", + "\\cyrchar\\cyrgup": "ґ", + "\\cyrchar\\CYRGHCRS": "Ғ", + "\\cyrchar\\cyrghcrs": "ғ", + "\\cyrchar\\CYRGHK": "Ҕ", + "\\cyrchar\\cyrghk": "ҕ", + "\\cyrchar\\CYRZHDSC": "Җ", + "\\cyrchar\\cyrzhdsc": "җ", + "\\cyrchar\\CYRZDSC": "Ҙ", + "\\cyrchar\\cyrzdsc": "ҙ", + "\\cyrchar\\CYRKDSC": "Қ", + "\\cyrchar\\cyrkdsc": "қ", + "\\cyrchar\\CYRKVCRS": "Ҝ", + "\\cyrchar\\cyrkvcrs": "ҝ", + "\\cyrchar\\CYRKHCRS": "Ҟ", + "\\cyrchar\\cyrkhcrs": "ҟ", + "\\cyrchar\\CYRKBEAK": "Ҡ", + "\\cyrchar\\cyrkbeak": "ҡ", + "\\cyrchar\\CYRNDSC": "Ң", + "\\cyrchar\\cyrndsc": "ң", + "\\cyrchar\\CYRNG": "Ҥ", + "\\cyrchar\\cyrng": "ҥ", + "\\cyrchar\\CYRPHK": "Ҧ", + "\\cyrchar\\cyrphk": "ҧ", + "\\cyrchar\\CYRABHHA": "Ҩ", + "\\cyrchar\\cyrabhha": "ҩ", + "\\cyrchar\\CYRSDSC": "Ҫ", + "\\cyrchar\\cyrsdsc": "ҫ", + "\\cyrchar\\CYRTDSC": "Ҭ", + "\\cyrchar\\cyrtdsc": "ҭ", + "\\cyrchar\\CYRY": "Ү", + "\\cyrchar\\cyry": "ү", + "\\cyrchar\\CYRYHCRS": "Ұ", + "\\cyrchar\\cyryhcrs": "ұ", + "\\cyrchar\\CYRHDSC": "Ҳ", + "\\cyrchar\\cyrhdsc": "ҳ", + "\\cyrchar\\CYRTETSE": "Ҵ", + "\\cyrchar\\cyrtetse": "ҵ", + "\\cyrchar\\CYRCHRDSC": "Ҷ", + "\\cyrchar\\cyrchrdsc": "ҷ", + "\\cyrchar\\CYRCHVCRS": "Ҹ", + "\\cyrchar\\cyrchvcrs": "ҹ", + "\\cyrchar\\CYRSHHA": "Һ", + "\\cyrchar\\cyrshha": "һ", + "\\cyrchar\\CYRABHCH": "Ҽ", + "\\cyrchar\\cyrabhch": "ҽ", + "\\cyrchar\\CYRABHCHDSC": "Ҿ", + "\\cyrchar\\cyrabhchdsc": "ҿ", + "\\cyrchar\\CYRpalochka": "Ӏ", + "\\cyrchar\\CYRKHK": "Ӄ", + "\\cyrchar\\cyrkhk": "ӄ", + "\\cyrchar\\CYRNHK": "Ӈ", + "\\cyrchar\\cyrnhk": "ӈ", + "\\cyrchar\\CYRCHLDSC": "Ӌ", + "\\cyrchar\\cyrchldsc": "ӌ", + "\\cyrchar\\CYRAE": "Ӕ", + "\\cyrchar\\cyrae": "ӕ", + "\\cyrchar\\CYRSCHWA": "Ә", + "\\cyrchar\\cyrschwa": "ә", + "\\cyrchar\\CYRABHDZE": "Ӡ", + "\\cyrchar\\cyrabhdze": "ӡ", + "\\cyrchar\\CYROTLD": "Ө", + "\\cyrchar\\cyrotld": "ө", + "\\\\backslash": "ࡱ", + "\\textsuperscript{a}": "ᵃ", + "^{a}": "ᵃ", + "\\textsuperscript{b}": "ᵇ", + "^{b}": "ᵇ", + "\\textsuperscript{d}": "ᵈ", + "^{d}": "ᵈ", + "\\textsuperscript{e}": "ᵉ", + "^{e}": "ᵉ", + "\\textsuperscript{g}": "ᵍ", + "^{g}": "ᵍ", + "\\textsuperscript{k}": "ᵏ", + "^{k}": "ᵏ", + "\\textsuperscript{m}": "ᵐ", + "^{m}": "ᵐ", + "\\textsuperscript{o}": "ᵒ", + "^{o}": "ᵒ", + "\\textsuperscript{p}": "ᵖ", + "^{p}": "ᵖ", + "\\textsuperscript{t}": "ᵗ", + "^{t}": "ᵗ", + "\\textsuperscript{u}": "ᵘ", + "^{u}": "ᵘ", + "\\textsuperscript{v}": "ᵛ", + "^{v}": "ᵛ", + "\\textsuperscript{c}": "ᶜ", + "^{c}": "ᶜ", + "\\textsuperscript{f}": "ᶠ", + "^{f}": "ᶠ", + "\\textsuperscript{z}": "ᶻ", + "^{z}": "ᶻ", + "\\.B": "Ḃ", + "\\.b": "ḃ", + "\\d{B}": "Ḅ", + "\\d{b}": "ḅ", + "\\b{B}": "Ḇ", + "\\b{b}": "ḇ", + "\\.D": "Ḋ", + "\\.d": "ḋ", + "\\d{D}": "Ḍ", + "\\d{d}": "ḍ", + "\\b{D}": "Ḏ", + "\\b{d}": "ḏ", + "\\c{D}": "Ḑ", + "\\c{d}": "ḑ", + "\\c{\\u{E}}": "Ḝ", + "\\c{\\u{e}}": "ḝ", + "\\.F": "Ḟ", + "\\.f": "ḟ", + "\\=G": "Ḡ", + "\\=g": "ḡ", + "\\.H": "Ḣ", + "\\.h": "ḣ", + "\\d{H}": "Ḥ", + "\\d{h}": "ḥ", + "\\\"H": "Ḧ", + "\\\"h": "ḧ", + "\\c{H}": "Ḩ", + "\\c{h}": "ḩ", + "\\'K": "Ḱ", + "\\'k": "ḱ", + "\\d{K}": "Ḳ", + "\\d{k}": "ḳ", + "\\b{K}": "Ḵ", + "\\b{k}": "ḵ", + "\\d{L}": "Ḷ", + "\\d{l}": "ḷ", + "\\b{L}": "Ḻ", + "\\b{l}": "ḻ", + "\\'M": "Ḿ", + "\\'m": "ḿ", + "\\.M": "Ṁ", + "\\.m": "ṁ", + "\\d{M}": "Ṃ", + "\\d{m}": "ṃ", + "\\.N": "Ṅ", + "\\.n": "ṅ", + "\\d{N}": "Ṇ", + "\\d{n}": "ṇ", + "\\b{N}": "Ṉ", + "\\b{n}": "ṉ", + "\\'P": "Ṕ", + "\\'p": "ṕ", + "\\.P": "Ṗ", + "\\.p": "ṗ", + "\\.R": "Ṙ", + "\\.r": "ṙ", + "\\d{R}": "Ṛ", + "\\d{r}": "ṛ", + "\\b{R}": "Ṟ", + "\\b{r}": "ṟ", + "\\.S": "Ṡ", + "\\.s": "ṡ", + "\\d{S}": "Ṣ", + "\\d{s}": "ṣ", + "\\.T": "Ṫ", + "\\.t": "ṫ", + "\\d{T}": "Ṭ", + "\\d{t}": "ṭ", + "\\b{T}": "Ṯ", + "\\b{t}": "ṯ", + "\\~V": "Ṽ", + "\\~v": "ṽ", + "\\d{V}": "Ṿ", + "\\d{v}": "ṿ", + "\\`W": "Ẁ", + "\\`w": "ẁ", + "\\'W": "Ẃ", + "\\'w": "ẃ", + "\\\"W": "Ẅ", + "\\\"w": "ẅ", + "\\.W": "Ẇ", + "\\.w": "ẇ", + "\\d{W}": "Ẉ", + "\\d{w}": "ẉ", + "\\.X": "Ẋ", + "\\.x": "ẋ", + "\\\"X": "Ẍ", + "\\\"x": "ẍ", + "\\.Y": "Ẏ", + "\\.y": "ẏ", + "\\^Z": "Ẑ", + "\\^z": "ẑ", + "\\d{Z}": "Ẓ", + "\\d{z}": "ẓ", + "\\b{Z}": "Ẕ", + "\\b{z}": "ẕ", + "\\b{h}": "ẖ", + "\\\"t": "ẗ", + "\\r{w}": "ẘ", + "\\r{y}": "ẙ", + "\\d{A}": "Ạ", + "\\d{a}": "ạ", + "\\d{E}": "Ẹ", + "\\d{e}": "ẹ", + "\\~E": "Ẽ", + "\\~e": "ẽ", + "\\d{I}": "Ị", + "\\d{i}": "ị", + "\\d{O}": "Ọ", + "\\d{o}": "ọ", + "\\d{U}": "Ụ", + "\\d{u}": "ụ", + "\\`Y": "Ỳ", + "\\`y": "ỳ", + "\\d{Y}": "Ỵ", + "\\d{y}": "ỵ", + "\\~Y": "Ỹ", + "\\~y": "ỹ", + "\\hspace{0.6em}": " ", + "\\hspace{1em}": " ", + "\\quad": " ", + "\\;": " ", + "\\hspace{0.25em}": " ", + "\\hspace{0.166em}": " ", + "\\hphantom{0}": " ", + "\\hphantom{,}": " ", + "\\,": " ", + "\\mkern1mu": " ", + "\\mbox": "​", + "{\\aftergroup\\ignorespaces}": "‌", + "\\textendash": "–", + "\\textemdash": "—", + "\\rule{1em}{1pt}": "―", + "\\horizbar": "―", + "\\Vert": "‖", + "\\twolowline": "‗", + "\\textquoteleft": "‘", + "\\textquoteright": "’", + "\\Elzreapos": "‛", + "\\textquotedblleft": "“", + "\\textquotedblright": "”", + "\\quotedblbase": "‟", + "\\textdagger": "†", + "\\dagger": "†", + "\\textdaggerdbl": "‡", + "\\ddagger": "‡", + "\\textbullet": "•", + "\\enleadertwodots": "‥", + "\\ldots": "…", + "\\textperthousand": "‰", + "\\textpertenthousand": "‱", + "{'}": "′", + "{''}": "″", + "{'''}": "‴", + "\\backprime": "‵", + "\\backdprime": "‶", + "\\backtrprime": "‷", + "\\caretinsert": "‸", + "\\guilsinglleft": "‹", + "\\guilsinglright": "›", + "\\Exclam": "‼", + "\\hyphenbullet": "⁃", + "\\fracslash": "⁄", + "\\Question": "⁇", + "\\closure": "⁐", + "\\:": " ", + "\\nolinebreak": "⁠", + "^{0}": "⁰", + "\\textsuperscript{i}": "ⁱ", + "^{i}": "ⁱ", + "^{4}": "⁴", + "^{5}": "⁵", + "^{6}": "⁶", + "^{7}": "⁷", + "^{8}": "⁸", + "^{9}": "⁹", + "^{+}": "⁺", + "^{-}": "⁻", + "^{=}": "⁼", + "^{(}": "⁽", + "^{)}": "⁾", + "\\textsuperscript{n}": "ⁿ", + "^{n}": "ⁿ", + "_{0}": "₀", + "_{1}": "₁", + "_{2}": "₂", + "_{3}": "₃", + "_{4}": "₄", + "_{5}": "₅", + "_{6}": "₆", + "_{7}": "₇", + "_{8}": "₈", + "_{9}": "₉", + "_{+}": "₊", + "_{-}": "₋", + "_{=}": "₌", + "_{(}": "₍", + "_{)}": "₎", + "\\textsubscript{a}": "ₐ", + "_{a}": "ₐ", + "\\textsubscript{e}": "ₑ", + "_{e}": "ₑ", + "\\textsubscript{o}": "ₒ", + "_{o}": "ₒ", + "\\textsubscript{x}": "ₓ", + "_{x}": "ₓ", + "\\textsubscript{\\textschwa}": "ₔ", + "\\textsubscript{h}": "ₕ", + "_{h}": "ₕ", + "\\textsubscript{k}": "ₖ", + "_{k}": "ₖ", + "\\textsubscript{l}": "ₗ", + "_{l}": "ₗ", + "\\textsubscript{m}": "ₘ", + "_{m}": "ₘ", + "\\textsubscript{n}": "ₙ", + "_{n}": "ₙ", + "\\textsubscript{p}": "ₚ", + "_{p}": "ₚ", + "\\textsubscript{s}": "ₛ", + "_{s}": "ₛ", + "\\textsubscript{t}": "ₜ", + "_{t}": "ₜ", + "\\ensuremath{\\Elzpes}": "₧", + "\\texteuro": "€", + "\\euro": "€", + "\\lvec": "⃐", + "\\vertoverlay": "⃒", + "\\LVec": "⃖", + "\\vec": "⃗", + "\\dddot": "⃛", + "\\ddddot": "⃜", + "\\enclosecircle": "⃝", + "\\enclosesquare": "⃞", + "\\enclosediamond": "⃟", + "\\overleftrightarrow": "⃡", + "\\enclosetriangle": "⃤", + "\\annuity": "⃧", + "\\threeunderdot": "⃨", + "\\widebridgeabove": "⃩", + "\\underrightharpoondown": "⃬", + "\\underleftharpoondown": "⃭", + "\\underleftarrow": "⃮", + "\\underrightarrow": "⃯", + "\\asteraccent": "⃰", + "\\mathbb{C}": "ℂ", + "\\textcelsius": "℃", + "\\Euler": "ℇ", + "\\mathscr{g}": "ℊ", + "\\mathscr{H}": "ℋ", + "\\mathfrak{H}": "ℌ", + "\\mathbb{H}": "ℍ", + "\\Planckconst": "ℎ", + "\\hslash": "ℏ", + "\\mathscr{I}": "ℐ", + "\\mathfrak{I}": "ℑ", + "\\mathscr{L}": "ℒ", + "\\mathscr{l}": "ℓ", + "\\mathbb{N}": "ℕ", + "\\cyrchar\\textnumero": "№", + "\\textcircledP": "℗", + "\\wp": "℘", + "\\mathbb{P}": "ℙ", + "\\mathbb{Q}": "ℚ", + "\\mathscr{R}": "ℛ", + "\\mathfrak{R}": "ℜ", + "\\mathbb{R}": "ℝ", + "\\Elzxrat": "℞", + "\\textservicemark": "℠", + "\\texttrademark": "™", + "\\mathbb{Z}": "ℤ", + "\\mho": "℧", + "\\mathfrak{Z}": "ℨ", + "\\textriota": "℩", + "\\Angstroem": "Å", + "\\mathscr{B}": "ℬ", + "\\mathfrak{C}": "ℭ", + "\\textestimated": "℮", + "\\mathscr{e}": "ℯ", + "\\mathscr{E}": "ℰ", + "\\mathscr{F}": "ℱ", + "\\Finv": "Ⅎ", + "\\mathscr{M}": "ℳ", + "\\mathscr{o}": "ℴ", + "\\aleph": "ℵ", + "\\beth": "ℶ", + "\\gimel": "ℷ", + "\\daleth": "ℸ", + "\\mathbb{\\pi}": "ℼ", + "\\mathbb{\\gamma}": "ℽ", + "\\mathbb{\\Gamma}": "ℾ", + "\\mathbb{\\Pi}": "ℿ", + "\\mathbb{\\Sigma}": "⅀", + "\\Game": "⅁", + "\\sansLturned": "⅂", + "\\sansLmirrored": "⅃", + "\\Yup": "⅄", + "\\CapitalDifferentialD": "ⅅ", + "\\DifferentialD": "ⅆ", + "\\ExponetialE": "ⅇ", + "\\ComplexI": "ⅈ", + "\\ComplexJ": "ⅉ", + "\\PropertyLine": "⅊", + "\\invamp": "⅋", + "\\frac{1}{7}": "⅐", + "\\textfrac{1}{7}": "⅐", + "\\frac{1}{9}": "⅑", + "\\textfrac{1}{9}": "⅑", + "\\frac{1}{10}": "⅒", + "\\textfrac{1}{10}": "⅒", + "\\frac{1}{3}": "⅓", + "\\textfrac{1}{3}": "⅓", + "\\frac{2}{3}": "⅔", + "\\textfrac{2}{3}": "⅔", + "\\frac{1}{5}": "⅕", + "\\textfrac{1}{5}": "⅕", + "\\frac{2}{5}": "⅖", + "\\textfrac{2}{5}": "⅖", + "\\frac{3}{5}": "⅗", + "\\textfrac{3}{5}": "⅗", + "\\frac{4}{5}": "⅘", + "\\textfrac{4}{5}": "⅘", + "\\frac{1}{6}": "⅙", + "\\textfrac{1}{6}": "⅙", + "\\frac{5}{6}": "⅚", + "\\textfrac{5}{6}": "⅚", + "\\frac{1}{8}": "⅛", + "\\textfrac{1}{8}": "⅛", + "\\frac{3}{8}": "⅜", + "\\textfrac{3}{8}": "⅜", + "\\frac{5}{8}": "⅝", + "\\textfrac{5}{8}": "⅝", + "\\frac{7}{8}": "⅞", + "\\textfrac{7}{8}": "⅞", + "\\frac{1}": "⅟", + "\\textfrac{1}": "⅟", + "\\frac{0}{3}": "↉", + "\\textfrac{0}{3}": "↉", + "\\leftarrow": "←", + "\\uparrow": "↑", + "\\textrightarrow": "→", + "\\rightarrow": "→", + "\\to": "→", + "\\downarrow": "↓", + "\\leftrightarrow": "↔", + "\\updownarrow": "↕", + "\\nwarrow": "↖", + "\\nearrow": "↗", + "\\searrow": "↘", + "\\swarrow": "↙", + "\\nleftarrow": "↚", + "\\nrightarrow": "↛", + "\\arrowwaveleft": "↜", + "\\arrowwaveright": "↝", + "\\twoheadleftarrow": "↞", + "\\twoheaduparrow": "↟", + "\\twoheadrightarrow": "↠", + "\\twoheaddownarrow": "↡", + "\\leftarrowtail": "↢", + "\\rightarrowtail": "↣", + "\\mapsfrom": "↤", + "\\MapsUp": "↥", + "\\mapsto": "↦", + "\\MapsDown": "↧", + "\\updownarrowbar": "↨", + "\\hookleftarrow": "↩", + "\\hookrightarrow": "↪", + "\\looparrowleft": "↫", + "\\looparrowright": "↬", + "\\leftrightsquigarrow": "↭", + "\\nleftrightarrow": "↮", + "\\lightning": "↯", + "\\Lsh": "↰", + "\\Rsh": "↱", + "\\dlsh": "↲", + "\\reflectbox{\\carriagereturn}": "↳", + "\\linefeed": "↴", + "\\carriagereturn": "↵", + "\\curvearrowleft": "↶", + "\\curvearrowright": "↷", + "\\barovernorthwestarrow": "↸", + "\\barleftarrowrightarrowba": "↹", + "\\circlearrowleft": "↺", + "\\circlearrowright": "↻", + "\\leftharpoonup": "↼", + "\\leftharpoondown": "↽", + "\\upharpoonright": "↾", + "\\upharpoonleft": "↿", + "\\rightharpoonup": "⇀", + "\\rightharpoondown": "⇁", + "\\downharpoonright": "⇂", + "\\downharpoonleft": "⇃", + "\\rightleftarrows": "⇄", + "\\dblarrowupdown": "⇅", + "\\leftrightarrows": "⇆", + "\\leftleftarrows": "⇇", + "\\upuparrows": "⇈", + "\\rightrightarrows": "⇉", + "\\downdownarrows": "⇊", + "\\leftrightharpoons": "⇋", + "\\rightleftharpoons": "⇌", + "\\nLeftarrow": "⇍", + "\\nLeftrightarrow": "⇎", + "\\nRightarrow": "⇏", + "\\Leftarrow": "⇐", + "\\Uparrow": "⇑", + "\\Rightarrow": "⇒", + "\\Downarrow": "⇓", + "\\Leftrightarrow": "⇔", + "\\Updownarrow": "⇕", + "\\Nwarrow": "⇖", + "\\Nearrow": "⇗", + "\\Searrow": "⇘", + "\\Swarrow": "⇙", + "\\Lleftarrow": "⇚", + "\\Rrightarrow": "⇛", + "\\leftsquigarrow": "⇜", + "\\rightsquigarrow": "⇝", + "\\nHuparrow": "⇞", + "\\nHdownarrow": "⇟", + "\\dashleftarrow": "⇠", + "\\updasharrow": "⇡", + "\\dashrightarrow": "⇢", + "\\downdasharrow": "⇣", + "\\LeftArrowBar": "⇤", + "\\RightArrowBar": "⇥", + "\\leftwhitearrow": "⇦", + "\\upwhitearrow": "⇧", + "\\rightwhitearrow": "⇨", + "\\downwhitearrow": "⇩", + "\\whitearrowupfrombar": "⇪", + "\\circleonrightarrow": "⇴", + "\\DownArrowUpArrow": "⇵", + "\\rightthreearrows": "⇶", + "\\nvleftarrow": "⇷", + "\\pfun": "⇸", + "\\nvleftrightarrow": "⇹", + "\\nVleftarrow": "⇺", + "\\ffun": "⇻", + "\\nVleftrightarrow": "⇼", + "\\leftarrowtriangle": "⇽", + "\\rightarrowtriangle": "⇾", + "\\leftrightarrowtriangle": "⇿", + "\\forall": "∀", + "\\complement": "∁", + "\\partial": "∂", + "\\exists": "∃", + "\\nexists": "∄", + "\\varnothing": "∅", + "\\increment": "∆", + "\\nabla": "∇", + "\\in": "∈", + "\\not\\in": "∉", + "\\smallin": "∊", + "\\ni": "∋", + "\\not\\ni": "∌", + "\\smallni": "∍", + "\\QED": "∎", + "\\prod": "∏", + "\\coprod": "∐", + "\\sum": "∑", + "\\mp": "∓", + "\\dotplus": "∔", + "\\setminus": "∖", + "{_\\ast}": "∗", + "\\circ": "∘", + "\\bullet": "∙", + "\\surd": "√", + "\\sqrt[3]": "∛", + "\\sqrt[4]": "∜", + "\\propto": "∝", + "\\infty": "∞", + "\\rightangle": "∟", + "\\angle": "∠", + "\\measuredangle": "∡", + "\\sphericalangle": "∢", + "\\mid": "∣", + "\\nmid": "∤", + "\\parallel": "∥", + "\\nparallel": "∦", + "\\wedge": "∧", + "\\vee": "∨", + "\\cap": "∩", + "\\cup": "∪", + "\\int": "∫", + "{\\int\\!\\int}": "∬", + "{\\int\\!\\int\\!\\int}": "∭", + "\\oint": "∮", + "\\surfintegral": "∯", + "\\volintegral": "∰", + "\\clwintegral": "∱", + "\\lcirclerightint": "∲", + "\\rcirclerightint": "∳", + "\\therefore": "∴", + "\\because": "∵", + "\\Colon": "∷", + "\\dotdiv": "∸", + "\\eqcolon": "∹", + "\\mathbin{{:}\\!\\!{-}\\!\\!{:}}": "∺", + "\\homothetic": "∻", + "\\sim": "∼", + "\\backsim": "∽", + "\\lazysinv": "∾", + "\\AC": "∿", + "\\wr": "≀", + "\\not\\sim": "≁", + "\\texteqsim": "≂", + "\\NotEqualTilde": "≂̸", + "\\simeq": "≃", + "\\not\\simeq": "≄", + "\\cong": "≅", + "\\approxnotequal": "≆", + "\\not\\cong": "≇", + "\\approx": "≈", + "\\not\\approx": "≉", + "\\approxeq": "≊", + "\\tildetrpl": "≋", + "\\not\\apid": "≋̸", + "\\allequal": "≌", + "\\asymp": "≍", + "\\Bumpeq": "≎", + "\\NotHumpDownHump": "≎̸", + "\\bumpeq": "≏", + "\\NotHumpEqual": "≏̸", + "\\doteq": "≐", + "\\not\\doteq": "≐̸", + "\\doteqdot": "≑", + "\\fallingdotseq": "≒", + "\\risingdotseq": "≓", + "\\coloneq": "≔", + "\\eqcirc": "≖", + "\\circeq": "≗", + "\\arceq": "≘", + "\\estimates": "≙", + "\\starequal": "≛", + "\\triangleq": "≜", + "\\eqdef": "≝", + "\\measeq": "≞", + "\\neq": "≠", + "\\equiv": "≡", + "\\not\\equiv": "≢", + "\\Equiv": "≣", + "\\leq": "≤", + "\\le": "≤", + "\\geq": "≥", + "\\leqq": "≦", + "\\geqq": "≧", + "\\lneqq": "≨", + "\\lvertneqq": "≨︀", + "\\gneqq": "≩", + "\\gvertneqq": "≩︀", + "\\ll": "≪", + "\\NotLessLess": "≪̸", + "\\gg": "≫", + "\\NotGreaterGreater": "≫̸", + "\\between": "≬", + "{\\not\\kern-0.3em\\times}": "≭", + "\\not<": "≮", + "\\not>": "≯", + "\\not\\leq": "≰", + "\\not\\geq": "≱", + "\\lessequivlnt": "≲", + "\\greaterequivlnt": "≳", + "\\lessgtr": "≶", + "\\gtrless": "≷", + "\\notlessgreater": "≸", + "\\notgreaterless": "≹", + "\\prec": "≺", + "\\succ": "≻", + "\\preccurlyeq": "≼", + "\\succcurlyeq": "≽", + "\\NotPrecedesTilde": "≾̸", + "\\NotSucceedsTilde": "≿̸", + "\\not\\prec": "⊀", + "\\not\\succ": "⊁", + "\\subset": "⊂", + "\\supset": "⊃", + "\\not\\subset": "⊄", + "\\not\\supset": "⊅", + "\\subseteq": "⊆", + "\\supseteq": "⊇", + "\\not\\subseteq": "⊈", + "\\not\\supseteq": "⊉", + "\\subsetneq": "⊊", + "\\varsubsetneqq": "⊊︀", + "\\supsetneq": "⊋", + "\\varsupsetneq": "⊋︀", + "\\cupleftarrow": "⊌", + "\\cupdot": "⊍", + "\\uplus": "⊎", + "\\sqsubset": "⊏", + "\\NotSquareSubset": "⊏̸", + "\\sqsupset": "⊐", + "\\NotSquareSuperset": "⊐̸", + "\\sqsubseteq": "⊑", + "\\sqsupseteq": "⊒", + "\\sqcap": "⊓", + "\\sqcup": "⊔", + "\\oplus": "⊕", + "\\ominus": "⊖", + "\\otimes": "⊗", + "\\oslash": "⊘", + "\\odot": "⊙", + "\\circledcirc": "⊚", + "\\circledast": "⊛", + "\\circledequal": "⊜", + "\\circleddash": "⊝", + "\\boxplus": "⊞", + "\\boxminus": "⊟", + "\\boxtimes": "⊠", + "\\boxdot": "⊡", + "\\vdash": "⊢", + "\\dashv": "⊣", + "\\top": "⊤", + "\\assert": "⊦", + "\\truestate": "⊧", + "\\forcesextra": "⊨", + "\\Vdash": "⊩", + "\\Vvdash": "⊪", + "\\VDash": "⊫", + "\\nvdash": "⊬", + "\\nvDash": "⊭", + "\\nVdash": "⊮", + "\\nVDash": "⊯", + "\\prurel": "⊰", + "\\scurel": "⊱", + "\\vartriangleleft": "⊲", + "\\vartriangleright": "⊳", + "\\trianglelefteq": "⊴", + "\\trianglerighteq": "⊵", + "\\original": "⊶", + "\\image": "⊷", + "\\multimap": "⊸", + "\\hermitconjmatrix": "⊹", + "\\intercal": "⊺", + "\\veebar": "⊻", + "\\barvee": "⊽", + "\\rightanglearc": "⊾", + "\\varlrtriangle": "⊿", + "\\bigcap": "⋂", + "\\bigcup": "⋃", + "\\diamond": "⋄", + "\\cdot": "⋅", + "\\star": "⋆", + "\\divideontimes": "⋇", + "\\bowtie": "⋈", + "\\ltimes": "⋉", + "\\rtimes": "⋊", + "\\leftthreetimes": "⋋", + "\\rightthreetimes": "⋌", + "\\backsimeq": "⋍", + "\\curlyvee": "⋎", + "\\curlywedge": "⋏", + "\\Subset": "⋐", + "\\Supset": "⋑", + "\\Cap": "⋒", + "\\Cup": "⋓", + "\\pitchfork": "⋔", + "\\hash": "⋕", + "\\lessdot": "⋖", + "\\gtrdot": "⋗", + "\\verymuchless": "⋘", + "\\verymuchgreater": "⋙", + "\\lesseqgtr": "⋚", + "\\gtreqless": "⋛", + "\\eqless": "⋜", + "\\eqgtr": "⋝", + "\\curlyeqprec": "⋞", + "\\curlyeqsucc": "⋟", + "\\npreceq": "⋠", + "\\nsucceq": "⋡", + "\\not\\sqsubseteq": "⋢", + "\\not\\sqsupseteq": "⋣", + "\\sqsubsetneq": "⋤", + "\\Elzsqspne": "⋥", + "\\lnsim": "⋦", + "\\gnsim": "⋧", + "\\precedesnotsimilar": "⋨", + "\\succnsim": "⋩", + "\\ntriangleleft": "⋪", + "\\ntriangleright": "⋫", + "\\ntrianglelefteq": "⋬", + "\\ntrianglerighteq": "⋭", + "\\vdots": "⋮", + "\\cdots": "⋯", + "\\upslopeellipsis": "⋰", + "\\downslopeellipsis": "⋱", + "\\disin": "⋲", + "\\varisins": "⋳", + "\\isins": "⋴", + "\\isindot": "⋵", + "\\barin": "⋶", + "\\isinobar": "⋷", + "\\isinvb": "⋸", + "\\isinE": "⋹", + "\\nisd": "⋺", + "\\varnis": "⋻", + "\\nis": "⋼", + "\\varniobar": "⋽", + "\\niobar": "⋾", + "\\bagmember": "⋿", + "\\diameter": "⌀", + "\\house": "⌂", + "\\barwedge": "⌅", + "\\varbarwedge": "⌅", + "\\perspcorrespond": "⌆", + "\\lceil": "⌈", + "\\rceil": "⌉", + "\\lfloor": "⌊", + "\\rfloor": "⌋", + "\\invneg": "⌐", + "\\wasylozenge": "⌑", + "\\profline": "⌒", + "\\profsurf": "⌓", + "\\recorder": "⌕", + "{\\mathchar\"2208}": "⌖", + "\\viewdata": "⌗", + "\\turnednot": "⌙", + "\\ulcorner": "⌜", + "\\urcorner": "⌝", + "\\llcorner": "⌞", + "\\lrcorner": "⌟", + "\\inttop": "⌠", + "\\intbottom": "⌡", + "\\frown": "⌢", + "\\smile": "⌣", + "\\varhexagonlrbonds": "⌬", + "\\conictaper": "⌲", + "\\topbot": "⌶", + "\\APLinv": "⌹", + "\\notslash": "⌿", + "\\notbackslash": "⍀", + "\\APLleftarrowbox": "⍇", + "\\APLrightarrowbox": "⍈", + "\\invdiameter": "⍉", + "\\APLuparrowbox": "⍐", + "\\APLboxupcaret": "⍓", + "\\APLdownarrowbox": "⍗", + "\\APLcomment": "⍝", + "\\APLinput": "⍞", + "\\APLlog": "⍟", + "\\APLboxquestion": "⍰", + "\\rangledownzigzagarrow": "⍼", + "\\hexagon": "⎔", + "\\lparenuend": "⎛", + "\\lparenextender": "⎜", + "\\lparenlend": "⎝", + "\\rparenuend": "⎞", + "\\rparenextender": "⎟", + "\\rparenlend": "⎠", + "\\lbrackuend": "⎡", + "\\lbrackextender": "⎢", + "\\Elzdlcorn": "⎣", + "\\rbrackuend": "⎤", + "\\rbrackextender": "⎥", + "\\rbracklend": "⎦", + "\\lbraceuend": "⎧", + "\\lbracemid": "⎨", + "\\lbracelend": "⎩", + "\\vbraceextender": "⎪", + "\\rbraceuend": "⎫", + "\\rbracemid": "⎬", + "\\rbracelend": "⎭", + "\\intextender": "⎮", + "\\harrowextender": "⎯", + "\\lmoustache": "⎰", + "\\rmoustache": "⎱", + "\\sumtop": "⎲", + "\\sumbottom": "⎳", + "\\overbracket": "⎴", + "\\underbracket": "⎵", + "\\bbrktbrk": "⎶", + "\\sqrtbottom": "⎷", + "\\lvboxline": "⎸", + "\\rvboxline": "⎹", + "\\varcarriagereturn": "⏎", + "\\overparen": "⏜", + "\\underparen": "⏝", + "\\overbrace": "⏞", + "\\underbrace": "⏟", + "\\obrbrak": "⏠", + "\\ubrbrak": "⏡", + "\\trapezium": "⏢", + "\\benzenr": "⏣", + "\\strns": "⏤", + "\\fltns": "⏥", + "\\accurrent": "⏦", + "\\elinters": "⏧", + "\\textvisiblespace": "␣", + "\\ding{172}": "①", + "\\ding{173}": "②", + "\\ding{174}": "③", + "\\ding{175}": "④", + "\\ding{176}": "⑤", + "\\ding{177}": "⑥", + "\\ding{178}": "⑦", + "\\ding{179}": "⑧", + "\\ding{180}": "⑨", + "\\ding{181}": "⑩", + "\\circledS": "Ⓢ", + "\\Elzdshfnc": "┆", + "\\Elzsqfnw": "┙", + "\\diagup": "╱", + "\\blockuphalf": "▀", + "\\blocklowhalf": "▄", + "\\blockfull": "█", + "\\blocklefthalf": "▌", + "\\blockrighthalf": "▐", + "\\blockqtrshaded": "░", + "\\blockhalfshaded": "▒", + "\\blockthreeqtrshaded": "▓", + "\\ding{110}": "■", + "\\mdlgblksquare": "■", + "\\square": "□", + "\\Box": "□", + "\\squoval": "▢", + "\\blackinwhitesquare": "▣", + "\\squarehfill": "▤", + "\\squarevfill": "▥", + "\\squarehvfill": "▦", + "\\squarenwsefill": "▧", + "\\squareneswfill": "▨", + "\\squarecrossfill": "▩", + "\\smwhtsquare": "▫", + "\\hrectangleblack": "▬", + "\\fbox{~~}": "▭", + "\\vrectangleblack": "▮", + "\\Elzvrecto": "▯", + "\\parallelogramblack": "▰", + "\\ding{115}": "▲", + "\\bigblacktriangleup": "▲", + "\\bigtriangleup": "△", + "\\blacktriangle": "▴", + "\\vartriangle": "▵", + "\\RHD": "▶", + "\\rhd": "▷", + "\\blacktriangleright": "▸", + "\\triangleright": "▹", + "\\blackpointerright": "►", + "\\whitepointerright": "▻", + "\\ding{116}": "▼", + "\\bigblacktriangledown": "▼", + "\\bigtriangledown": "▽", + "\\blacktriangledown": "▾", + "\\triangledown": "▿", + "\\LHD": "◀", + "\\lhd": "◁", + "\\blacktriangleleft": "◂", + "\\triangleleft": "◃", + "\\blackpointerleft": "◄", + "\\whitepointerleft": "◅", + "\\ding{117}": "◆", + "\\Diamondblack": "◆", + "\\Diamond": "◇", + "\\blackinwhitediamond": "◈", + "\\fisheye": "◉", + "\\lozenge": "◊", + "\\dottedcircle": "◌", + "\\circlevertfill": "◍", + "\\bullseye": "◎", + "\\ding{108}": "●", + "\\CIRCLE": "●", + "\\Elzcirfl": "◐", + "\\Elzcirfr": "◑", + "\\Elzcirfb": "◒", + "\\circletophalfblack": "◓", + "\\circleurquadblack": "◔", + "\\blackcircleulquadwhite": "◕", + "\\LEFTCIRCLE": "◖", + "\\ding{119}": "◗", + "\\RIGHTCIRCLE": "◗", + "\\Elzrvbull": "◘", + "\\inversewhitecircle": "◙", + "\\invwhiteupperhalfcircle": "◚", + "\\invwhitelowerhalfcircle": "◛", + "\\ularc": "◜", + "\\urarc": "◝", + "\\lrarc": "◞", + "\\llarc": "◟", + "\\topsemicircle": "◠", + "\\botsemicircle": "◡", + "\\lrblacktriangle": "◢", + "\\llblacktriangle": "◣", + "\\ulblacktriangle": "◤", + "\\urblacktriangle": "◥", + "\\smwhtcircle": "◦", + "\\Elzsqfl": "◧", + "\\Elzsqfr": "◨", + "\\squareulblack": "◩", + "\\Elzsqfse": "◪", + "\\boxbar": "◫", + "\\trianglecdot": "◬", + "\\triangleleftblack": "◭", + "\\trianglerightblack": "◮", + "\\bigcirc": "◯", + "\\squareulquad": "◰", + "\\squarellquad": "◱", + "\\squarelrquad": "◲", + "\\squareurquad": "◳", + "\\circleulquad": "◴", + "\\circlellquad": "◵", + "\\circlelrquad": "◶", + "\\circleurquad": "◷", + "\\ultriangle": "◸", + "\\urtriangle": "◹", + "\\lltriangle": "◺", + "\\mdsmwhtsquare": "◽", + "\\mdsmblksquare": "◾", + "\\lrtriangle": "◿", + "\\ding{72}": "★", + "\\bigstar": "★", + "\\ding{73}": "☆", + "\\bigwhitestar": "☆", + "\\Sun": "☉", + "\\ding{37}": "☎", + "\\Square": "☐", + "\\CheckedBox": "☑", + "\\XBox": "☒", + "\\steaming": "☕", + "\\ding{42}": "☛", + "\\ding{43}": "☞", + "\\pointright": "☞", + "\\skull": "☠", + "\\danger": "☡", + "\\radiation": "☢", + "\\biohazard": "☣", + "\\yinyang": "☯", + "\\frownie": "☹", + "\\smiley": "☺", + "\\blacksmiley": "☻", + "\\sun": "☼", + "\\rightmoon": "☽", + "\\leftmoon": "☾", + "\\mercury": "☿", + "\\venus": "♀", + "\\female": "♀", + "\\earth": "♁", + "\\male": "♂", + "\\jupiter": "♃", + "\\saturn": "♄", + "\\uranus": "♅", + "\\neptune": "♆", + "\\pluto": "♇", + "\\aries": "♈", + "\\taurus": "♉", + "\\gemini": "♊", + "\\cancer": "♋", + "\\leo": "♌", + "\\virgo": "♍", + "\\libra": "♎", + "\\scorpio": "♏", + "\\sagittarius": "♐", + "\\capricornus": "♑", + "\\aquarius": "♒", + "\\pisces": "♓", + "\\ding{171}": "♠", + "\\spadesuit": "♠", + "\\heartsuit": "♡", + "\\ding{168}": "♣", + "\\clubsuit": "♣", + "\\varspadesuit": "♤", + "\\ding{170}": "♥", + "\\varheartsuit": "♥", + "\\ding{169}": "♦", + "\\vardiamondsuit": "♦", + "\\varclubsuit": "♧", + "\\quarternote": "♩", + "\\eighthnote": "♪", + "\\twonotes": "♫", + "\\sixteenthnote": "♬", + "\\flat": "♭", + "\\natural": "♮", + "\\sharp": "♯", + "\\recycle": "♻", + "\\acidfree": "♾", + "\\dicei": "⚀", + "\\diceii": "⚁", + "\\diceiii": "⚂", + "\\diceiv": "⚃", + "\\dicev": "⚄", + "\\dicevi": "⚅", + "\\circledrightdot": "⚆", + "\\circledtwodots": "⚇", + "\\blackcircledrightdot": "⚈", + "\\blackcircledtwodots": "⚉", + "\\anchor": "⚓", + "\\swords": "⚔", + "\\warning": "⚠", + "\\Hermaphrodite": "⚥", + "\\medcirc": "⚪", + "\\medbullet": "⚫", + "\\mdsmwhtcircle": "⚬", + "\\neuter": "⚲", + "\\ding{33}": "✁", + "\\ding{34}": "✂", + "\\ding{35}": "✃", + "\\ding{36}": "✄", + "\\ding{38}": "✆", + "\\ding{39}": "✇", + "\\ding{40}": "✈", + "\\ding{41}": "✉", + "\\ding{44}": "✌", + "\\ding{45}": "✍", + "\\ding{46}": "✎", + "\\pencil": "✎", + "\\ding{47}": "✏", + "\\ding{48}": "✐", + "\\ding{49}": "✑", + "\\ding{50}": "✒", + "\\ding{51}": "✓", + "\\checkmark": "✓", + "\\ding{52}": "✔", + "\\ding{53}": "✕", + "\\ding{54}": "✖", + "\\ding{55}": "✗", + "\\ballotx": "✗", + "\\ding{56}": "✘", + "\\ding{57}": "✙", + "\\ding{58}": "✚", + "\\ding{59}": "✛", + "\\ding{60}": "✜", + "\\ding{61}": "✝", + "\\ding{62}": "✞", + "\\ding{63}": "✟", + "\\ding{64}": "✠", + "\\maltese": "✠", + "\\ding{65}": "✡", + "\\ding{66}": "✢", + "\\ding{67}": "✣", + "\\ding{68}": "✤", + "\\ding{69}": "✥", + "\\ding{70}": "✦", + "\\ding{71}": "✧", + "\\ding{74}": "✪", + "\\circledstar": "✪", + "\\ding{75}": "✫", + "\\ding{76}": "✬", + "\\ding{77}": "✭", + "\\ding{78}": "✮", + "\\ding{79}": "✯", + "\\ding{80}": "✰", + "\\ding{81}": "✱", + "\\ding{82}": "✲", + "\\ding{83}": "✳", + "\\ding{84}": "✴", + "\\ding{85}": "✵", + "\\ding{86}": "✶", + "\\varstar": "✶", + "\\ding{87}": "✷", + "\\ding{88}": "✸", + "\\ding{89}": "✹", + "\\ding{90}": "✺", + "\\ding{91}": "✻", + "\\ding{92}": "✼", + "\\ding{93}": "✽", + "\\dingasterisk": "✽", + "\\ding{94}": "✾", + "\\ding{95}": "✿", + "\\ding{96}": "❀", + "\\ding{97}": "❁", + "\\ding{98}": "❂", + "\\ding{99}": "❃", + "\\ding{100}": "❄", + "\\ding{101}": "❅", + "\\ding{102}": "❆", + "\\ding{103}": "❇", + "\\ding{104}": "❈", + "\\ding{105}": "❉", + "\\ding{106}": "❊", + "\\ding{107}": "❋", + "\\ding{109}": "❍", + "\\ding{111}": "❏", + "\\ding{112}": "❐", + "\\ding{113}": "❑", + "\\ding{114}": "❒", + "\\ding{118}": "❖", + "\\ding{120}": "❘", + "\\ding{121}": "❙", + "\\ding{122}": "❚", + "\\ding{123}": "❛", + "\\ding{124}": "❜", + "\\ding{125}": "❝", + "\\ding{126}": "❞", + "\\ding{161}": "❡", + "\\ding{162}": "❢", + "\\ding{163}": "❣", + "\\ding{164}": "❤", + "\\ding{165}": "❥", + "\\ding{166}": "❦", + "\\ding{167}": "❧", + "\\ding{182}": "❶", + "\\ding{183}": "❷", + "\\ding{184}": "❸", + "\\ding{185}": "❹", + "\\ding{186}": "❺", + "\\ding{187}": "❻", + "\\ding{188}": "❼", + "\\ding{189}": "❽", + "\\ding{190}": "❾", + "\\ding{191}": "❿", + "\\ding{192}": "➀", + "\\ding{193}": "➁", + "\\ding{194}": "➂", + "\\ding{195}": "➃", + "\\ding{196}": "➄", + "\\ding{197}": "➅", + "\\ding{198}": "➆", + "\\ding{199}": "➇", + "\\ding{200}": "➈", + "\\ding{201}": "➉", + "\\ding{202}": "➊", + "\\ding{203}": "➋", + "\\ding{204}": "➌", + "\\ding{205}": "➍", + "\\ding{206}": "➎", + "\\ding{207}": "➏", + "\\ding{208}": "➐", + "\\ding{209}": "➑", + "\\ding{210}": "➒", + "\\ding{211}": "➓", + "\\ding{212}": "➔", + "\\ding{216}": "➘", + "\\ding{217}": "➙", + "\\ding{218}": "➚", + "\\ding{219}": "➛", + "\\draftingarrow": "➛", + "\\ding{220}": "➜", + "\\ding{221}": "➝", + "\\ding{222}": "➞", + "\\ding{223}": "➟", + "\\ding{224}": "➠", + "\\ding{225}": "➡", + "\\ding{226}": "➢", + "\\arrowbullet": "➢", + "\\ding{227}": "➣", + "\\ding{228}": "➤", + "\\ding{229}": "➥", + "\\ding{230}": "➦", + "\\ding{231}": "➧", + "\\ding{232}": "➨", + "\\ding{233}": "➩", + "\\ding{234}": "➪", + "\\ding{235}": "➫", + "\\ding{236}": "➬", + "\\ding{237}": "➭", + "\\ding{238}": "➮", + "\\ding{239}": "➯", + "\\ding{241}": "➱", + "\\ding{242}": "➲", + "\\ding{243}": "➳", + "\\ding{244}": "➴", + "\\ding{245}": "➵", + "\\ding{246}": "➶", + "\\ding{247}": "➷", + "\\ding{248}": "➸", + "\\ding{249}": "➹", + "\\ding{250}": "➺", + "\\ding{251}": "➻", + "\\ding{252}": "➼", + "\\ding{253}": "➽", + "\\ding{254}": "➾", + "\\threedangle": "⟀", + "\\whiteinwhitetriangle": "⟁", + "\\perp": "⟂", + "\\subsetcirc": "⟃", + "\\supsetcirc": "⟄", + "\\Lbag": "⟅", + "\\Rbag": "⟆", + "\\veedot": "⟇", + "\\bsolhsub": "⟈", + "\\suphsol": "⟉", + "\\longdivision": "⟌", + "\\Diamonddot": "⟐", + "\\wedgedot": "⟑", + "\\upin": "⟒", + "\\pullback": "⟓", + "\\pushout": "⟔", + "\\leftouterjoin": "⟕", + "\\rightouterjoin": "⟖", + "\\fullouterjoin": "⟗", + "\\bigbot": "⟘", + "\\bigtop": "⟙", + "\\DashVDash": "⟚", + "\\dashVdash": "⟛", + "\\multimapinv": "⟜", + "\\vlongdash": "⟝", + "\\longdashv": "⟞", + "\\cirbot": "⟟", + "\\lozengeminus": "⟠", + "\\concavediamond": "⟡", + "\\concavediamondtickleft": "⟢", + "\\concavediamondtickright": "⟣", + "\\whitesquaretickleft": "⟤", + "\\whitesquaretickright": "⟥", + "\\llbracket": "⟦", + "\\rrbracket": "⟧", + "\\langle": "⟨", + "\\rangle": "⟩", + "\\lang": "⟪", + "\\rang": "⟫", + "\\Lbrbrak": "⟬", + "\\Rbrbrak": "⟭", + "\\lgroup": "⟮", + "\\rgroup": "⟯", + "\\UUparrow": "⟰", + "\\DDownarrow": "⟱", + "\\acwgapcirclearrow": "⟲", + "\\cwgapcirclearrow": "⟳", + "\\rightarrowonoplus": "⟴", + "\\longleftarrow": "⟵", + "\\longrightarrow": "⟶", + "\\longleftrightarrow": "⟷", + "\\Longleftarrow": "⟸", + "\\Longrightarrow": "⟹", + "\\Longleftrightarrow": "⟺", + "\\longmapsfrom": "⟻", + "\\longmapsto": "⟼", + "\\Longmapsfrom": "⟽", + "\\Longmapsto": "⟾", + "\\sim\\joinrel\\leadsto": "⟿", + "\\psur": "⤀", + "\\nVtwoheadrightarrow": "⤁", + "\\nvLeftarrow": "⤂", + "\\nvRightarrow": "⤃", + "\\nvLeftrightarrow": "⤄", + "\\Mapsfrom": "⤆", + "\\Mapsto": "⤇", + "\\downarrowbarred": "⤈", + "\\uparrowbarred": "⤉", + "\\Uuparrow": "⤊", + "\\Ddownarrow": "⤋", + "\\leftbkarrow": "⤌", + "\\rightbkarrow": "⤍", + "\\leftdbkarrow": "⤎", + "\\dbkarow": "⤏", + "\\drbkarow": "⤐", + "\\rightdotarrow": "⤑", + "\\UpArrowBar": "⤒", + "\\DownArrowBar": "⤓", + "\\pinj": "⤔", + "\\finj": "⤕", + "\\bij": "⤖", + "\\nvtwoheadrightarrowtail": "⤗", + "\\nVtwoheadrightarrowtail": "⤘", + "\\lefttail": "⤙", + "\\righttail": "⤚", + "\\leftdbltail": "⤛", + "\\rightdbltail": "⤜", + "\\diamondleftarrow": "⤝", + "\\rightarrowdiamond": "⤞", + "\\diamondleftarrowbar": "⤟", + "\\barrightarrowdiamond": "⤠", + "\\nwsearrow": "⤡", + "\\neswarrow": "⤢", + "\\rdiagovfdiag": "⤫", + "\\fdiagovrdiag": "⤬", + "\\seovnearrow": "⤭", + "\\neovsearrow": "⤮", + "\\fdiagovnearrow": "⤯", + "\\rdiagovsearrow": "⤰", + "\\neovnwarrow": "⤱", + "\\nwovnearrow": "⤲", + "\\uprightcurvearrow": "⤴", + "\\downrightcurvedarrow": "⤵", + "\\cwrightarcarrow": "⤸", + "\\acwleftarcarrow": "⤹", + "\\acwoverarcarrow": "⤺", + "\\acwunderarcarrow": "⤻", + "\\curvearrowrightminus": "⤼", + "\\curvearrowleftplus": "⤽", + "\\cwundercurvearrow": "⤾", + "\\ccwundercurvearrow": "⤿", + "\\Elolarr": "⥀", + "\\Elorarr": "⥁", + "\\ElzRlarr": "⥂", + "\\leftarrowshortrightarrow": "⥃", + "\\ElzrLarr": "⥄", + "\\rightarrowplus": "⥅", + "\\leftarrowplus": "⥆", + "\\Elzrarrx": "⥇", + "\\leftrightarrowcircle": "⥈", + "\\twoheaduparrowcircle": "⥉", + "\\leftrightharpoon": "⥊", + "\\rightleftharpoon": "⥋", + "\\updownharpoonrightleft": "⥌", + "\\updownharpoonleftright": "⥍", + "\\LeftRightVector": "⥎", + "\\RightUpDownVector": "⥏", + "\\DownLeftRightVector": "⥐", + "\\LeftUpDownVector": "⥑", + "\\LeftVectorBar": "⥒", + "\\RightVectorBar": "⥓", + "\\RightUpVectorBar": "⥔", + "\\RightDownVectorBar": "⥕", + "\\DownLeftVectorBar": "⥖", + "\\DownRightVectorBar": "⥗", + "\\LeftUpVectorBar": "⥘", + "\\LeftDownVectorBar": "⥙", + "\\LeftTeeVector": "⥚", + "\\RightTeeVector": "⥛", + "\\RightUpTeeVector": "⥜", + "\\RightDownTeeVector": "⥝", + "\\DownLeftTeeVector": "⥞", + "\\DownRightTeeVector": "⥟", + "\\LeftUpTeeVector": "⥠", + "\\LeftDownTeeVector": "⥡", + "\\leftleftharpoons": "⥢", + "\\upupharpoons": "⥣", + "\\rightrightharpoons": "⥤", + "\\downdownharpoons": "⥥", + "\\leftrightharpoonsup": "⥦", + "\\leftrightharpoonsdown": "⥧", + "\\rightleftharpoonsup": "⥨", + "\\rightleftharpoonsdown": "⥩", + "\\leftbarharpoon": "⥪", + "\\barleftharpoon": "⥫", + "\\rightbarharpoon": "⥬", + "\\barrightharpoon": "⥭", + "\\UpEquilibrium": "⥮", + "\\ReverseUpEquilibrium": "⥯", + "\\RoundImplies": "⥰", + "\\equalrightarrow": "⥱", + "\\similarrightarrow": "⥲", + "\\leftarrowsimilar": "⥳", + "\\rightarrowsimilar": "⥴", + "\\rightarrowapprox": "⥵", + "\\ltlarr": "⥶", + "\\leftarrowless": "⥷", + "\\gtrarr": "⥸", + "\\subrarr": "⥹", + "\\leftarrowsubset": "⥺", + "\\suplarr": "⥻", + "\\upfishtail": "⥾", + "\\downfishtail": "⥿", + "\\Elztfnc": "⦀", + "\\spot": "⦁", + "\\typecolon": "⦂", + "\\lBrace": "⦃", + "\\rBrace": "⦄", + "\\Elroang": "⦆", + "\\limg": "⦇", + "\\rimg": "⦈", + "\\lblot": "⦉", + "\\rblot": "⦊", + "\\lbrackubar": "⦋", + "\\rbrackubar": "⦌", + "\\lbrackultick": "⦍", + "\\rbracklrtick": "⦎", + "\\lbracklltick": "⦏", + "\\rbrackurtick": "⦐", + "\\langledot": "⦑", + "\\rangledot": "⦒", + "<\\kern-0.58em(": "⦓", + "\\Lparengtr": "⦕", + "\\Rparenless": "⦖", + "\\lblkbrbrak": "⦗", + "\\rblkbrbrak": "⦘", + "\\Elzddfnc": "⦙", + "\\vzigzag": "⦚", + "\\measuredangleleft": "⦛", + "\\Angle": "⦜", + "\\rightanglemdot": "⦝", + "\\angles": "⦞", + "\\angdnr": "⦟", + "\\Elzlpargt": "⦠", + "\\sphericalangleup": "⦡", + "\\turnangle": "⦢", + "\\revangle": "⦣", + "\\angleubar": "⦤", + "\\revangleubar": "⦥", + "\\wideangledown": "⦦", + "\\wideangleup": "⦧", + "\\measanglerutone": "⦨", + "\\measanglelutonw": "⦩", + "\\measanglerdtose": "⦪", + "\\measangleldtosw": "⦫", + "\\measangleurtone": "⦬", + "\\measangleultonw": "⦭", + "\\measangledrtose": "⦮", + "\\measangledltosw": "⦯", + "\\revemptyset": "⦰", + "\\emptysetobar": "⦱", + "\\emptysetocirc": "⦲", + "\\emptysetoarr": "⦳", + "\\emptysetoarrl": "⦴", + "\\circledparallel": "⦷", + "\\circledbslash": "⦸", + "\\operp": "⦹", + "\\obot": "⦺", + "\\olcross": "⦻", + "\\odotslashdot": "⦼", + "\\uparrowoncircle": "⦽", + "\\circledwhitebullet": "⦾", + "\\circledbullet": "⦿", + "\\circledless": "⧀", + "\\circledgtr": "⧁", + "\\cirscir": "⧂", + "\\cirE": "⧃", + "\\boxslash": "⧄", + "\\boxbslash": "⧅", + "\\boxast": "⧆", + "\\boxcircle": "⧇", + "\\boxbox": "⧈", + "\\boxonbox": "⧉", + "\\ElzLap": "⧊", + "\\Elzdefas": "⧋", + "\\triangles": "⧌", + "\\triangleserifs": "⧍", + "\\rtriltri": "⧎", + "\\LeftTriangleBar": "⧏", + "\\NotLeftTriangleBar": "⧏̸", + "\\RightTriangleBar": "⧐", + "\\NotRightTriangleBar": "⧐̸", + "\\lfbowtie": "⧑", + "\\rfbowtie": "⧒", + "\\fbowtie": "⧓", + "\\lftimes": "⧔", + "\\rftimes": "⧕", + "\\hourglass": "⧖", + "\\blackhourglass": "⧗", + "\\lvzigzag": "⧘", + "\\rvzigzag": "⧙", + "\\Lvzigzag": "⧚", + "\\Rvzigzag": "⧛", + "\\tieinfty": "⧝", + "\\nvinfty": "⧞", + "\\multimapboth": "⧟", + "\\laplac": "⧠", + "\\lrtriangleeq": "⧡", + "\\shuffle": "⧢", + "\\eparsl": "⧣", + "\\smeparsl": "⧤", + "\\eqvparsl": "⧥", + "\\gleichstark": "⧦", + "\\thermod": "⧧", + "\\downtriangleleftblack": "⧨", + "\\downtrianglerightblack": "⧩", + "\\blackdiamonddownarrow": "⧪", + "\\blacklozenge": "⧫", + "\\circledownarrow": "⧬", + "\\blackcircledownarrow": "⧭", + "\\errbarsquare": "⧮", + "\\errbarblacksquare": "⧯", + "\\errbardiamond": "⧰", + "\\errbarblackdiamond": "⧱", + "\\errbarcircle": "⧲", + "\\errbarblackcircle": "⧳", + "\\RuleDelayed": "⧴", + "\\dsol": "⧶", + "\\rsolbar": "⧷", + "\\xsol": "⧸", + "\\zhide": "⧹", + "\\doubleplus": "⧺", + "\\tripleplus": "⧻", + "\\lcurvyangle": "⧼", + "\\rcurvyangle": "⧽", + "\\tplus": "⧾", + "\\tminus": "⧿", + "\\bigodot": "⨀", + "\\bigoplus": "⨁", + "\\bigotimes": "⨂", + "\\bigcupdot": "⨃", + "\\Elxuplus": "⨄", + "\\ElzThr": "⨅", + "\\Elxsqcup": "⨆", + "\\ElzInf": "⨇", + "\\ElzSup": "⨈", + "\\varprod": "⨉", + "\\modtwosum": "⨊", + "\\sumint": "⨋", + "\\iiiint": "⨌", + "\\ElzCint": "⨍", + "\\intBar": "⨎", + "\\clockoint": "⨏", + "\\awint": "⨑", + "\\rppolint": "⨒", + "\\scpolint": "⨓", + "\\npolint": "⨔", + "\\pointint": "⨕", + "\\sqrint": "⨖", + "\\intlarhk": "⨗", + "\\intx": "⨘", + "\\intcap": "⨙", + "\\intcup": "⨚", + "\\upint": "⨛", + "\\lowint": "⨜", + "\\Join": "⨝", + "\\bigtriangleleft": "⨞", + "\\zcmp": "⨟", + "\\zpipe": "⨠", + "\\zproject": "⨡", + "\\ringplus": "⨢", + "\\plushat": "⨣", + "\\simplus": "⨤", + "\\plussim": "⨦", + "\\plussubtwo": "⨧", + "\\plustrif": "⨨", + "\\commaminus": "⨩", + "\\minusfdots": "⨫", + "\\minusrdots": "⨬", + "\\ElzTimes": "⨯", + "\\dottimes": "⨰", + "\\timesbar": "⨱", + "\\btimes": "⨲", + "\\smashtimes": "⨳", + "\\otimeshat": "⨶", + "\\Otimes": "⨷", + "\\odiv": "⨸", + "\\triangleplus": "⨹", + "\\triangleminus": "⨺", + "\\triangletimes": "⨻", + "\\intprodr": "⨽", + "\\fcmp": "⨾", + "\\amalg": "⨿", + "\\capdot": "⩀", + "\\uminus": "⩁", + "\\barcup": "⩂", + "\\barcap": "⩃", + "\\capwedge": "⩄", + "\\cupvee": "⩅", + "\\cupovercap": "⩆", + "\\capovercup": "⩇", + "\\cupbarcap": "⩈", + "\\capbarcup": "⩉", + "\\twocups": "⩊", + "\\twocaps": "⩋", + "\\closedvarcup": "⩌", + "\\closedvarcap": "⩍", + "\\Sqcap": "⩎", + "\\Sqcup": "⩏", + "\\closedvarcupsmashprod": "⩐", + "\\wedgeodot": "⩑", + "\\veeodot": "⩒", + "\\ElzAnd": "⩓", + "\\ElzOr": "⩔", + "\\ElOr": "⩖", + "\\bigslopedvee": "⩗", + "\\bigslopedwedge": "⩘", + "\\veeonwedge": "⩙", + "\\wedgemidvert": "⩚", + "\\veemidvert": "⩛", + "\\midbarwedge": "⩜", + "\\midbarvee": "⩝", + "\\Elzminhat": "⩟", + "\\wedgedoublebar": "⩠", + "\\varveebar": "⩡", + "\\doublebarvee": "⩢", + "\\dsub": "⩤", + "\\rsub": "⩥", + "\\eqdot": "⩦", + "\\dotequiv": "⩧", + "\\equivVert": "⩨", + "\\equivVvert": "⩩", + "\\dotsim": "⩪", + "\\simrdots": "⩫", + "\\simminussim": "⩬", + "\\congdot": "⩭", + "\\stackrel{*}{=}": "⩮", + "\\hatapprox": "⩯", + "\\approxeqq": "⩰", + "\\eqqplus": "⩱", + "\\pluseqq": "⩲", + "\\eqqsim": "⩳", + "\\Coloneqq": "⩴", + "\\Equal": "⩵", + "\\Same": "⩶", + "\\ddotseq": "⩷", + "\\equivDD": "⩸", + "\\ltcir": "⩹", + "\\gtcir": "⩺", + "\\ltquest": "⩻", + "\\gtquest": "⩼", + "\\leqslant": "⩽", + "\\nleqslant": "⩽̸", + "\\geqslant": "⩾", + "\\ngeqslant": "⩾̸", + "\\lesdot": "⩿", + "\\gesdot": "⪀", + "\\lesdoto": "⪁", + "\\gesdoto": "⪂", + "\\lesdotor": "⪃", + "\\gesdotol": "⪄", + "\\lessapprox": "⪅", + "\\gtrapprox": "⪆", + "\\lneq": "⪇", + "\\gneq": "⪈", + "\\lnapprox": "⪉", + "\\gnapprox": "⪊", + "\\lesseqqgtr": "⪋", + "\\gtreqqless": "⪌", + "\\lsime": "⪍", + "\\gsime": "⪎", + "\\lsimg": "⪏", + "\\gsiml": "⪐", + "\\lgE": "⪑", + "\\glE": "⪒", + "\\lesges": "⪓", + "\\gesles": "⪔", + "\\eqslantless": "⪕", + "\\eqslantgtr": "⪖", + "\\elsdot": "⪗", + "\\egsdot": "⪘", + "\\eqqless": "⪙", + "\\eqqgtr": "⪚", + "\\eqqslantless": "⪛", + "\\eqqslantgtr": "⪜", + "\\Pisymbol{ppi020}{117}": "⪝", + "\\Pisymbol{ppi020}{105}": "⪞", + "\\simlE": "⪟", + "\\simgE": "⪠", + "\\NestedLessLess": "⪡", + "\\NotNestedLessLess": "⪡̸", + "\\NestedGreaterGreater": "⪢", + "\\NotNestedGreaterGreater": "⪢̸", + "\\partialmeetcontraction": "⪣", + "\\glj": "⪤", + "\\gla": "⪥", + "\\leftslice": "⪦", + "\\rightslice": "⪧", + "\\lescc": "⪨", + "\\gescc": "⪩", + "\\smt": "⪪", + "\\lat": "⪫", + "\\smte": "⪬", + "\\late": "⪭", + "\\bumpeqq": "⪮", + "\\preceq": "⪯", + "\\not\\preceq": "⪯̸", + "\\succeq": "⪰", + "\\not\\succeq": "⪰̸", + "\\precneq": "⪱", + "\\succneq": "⪲", + "\\preceqq": "⪳", + "\\succeqq": "⪴", + "\\precneqq": "⪵", + "\\succneqq": "⪶", + "\\precapprox": "⪷", + "\\succapprox": "⪸", + "\\precnapprox": "⪹", + "\\succnapprox": "⪺", + "\\llcurly": "⪻", + "\\ggcurly": "⪼", + "\\subsetdot": "⪽", + "\\supsetdot": "⪾", + "\\subsetplus": "⪿", + "\\supsetplus": "⫀", + "\\submult": "⫁", + "\\supmult": "⫂", + "\\subedot": "⫃", + "\\supedot": "⫄", + "\\subseteqq": "⫅", + "\\nsubseteqq": "⫅̸", + "\\supseteqq": "⫆", + "\\nsupseteqq": "⫆̸", + "\\subsim": "⫇", + "\\supsim": "⫈", + "\\subsetapprox": "⫉", + "\\supsetapprox": "⫊", + "\\subsetneqq": "⫋", + "\\supsetneqq": "⫌", + "\\lsqhook": "⫍", + "\\rsqhook": "⫎", + "\\csub": "⫏", + "\\csup": "⫐", + "\\csube": "⫑", + "\\csupe": "⫒", + "\\subsup": "⫓", + "\\supsub": "⫔", + "\\subsub": "⫕", + "\\supsup": "⫖", + "\\suphsub": "⫗", + "\\supdsub": "⫘", + "\\forkv": "⫙", + "\\topfork": "⫚", + "\\mlcp": "⫛", + "\\forks": "⫝̸", + "\\forksnot": "⫝", + "\\shortlefttack": "⫞", + "\\shortdowntack": "⫟", + "\\shortuptack": "⫠", + "\\perps": "⫡", + "\\vDdash": "⫢", + "\\dashV": "⫣", + "\\Dashv": "⫤", + "\\DashV": "⫥", + "\\varVdash": "⫦", + "\\Barv": "⫧", + "\\vBar": "⫨", + "\\vBarv": "⫩", + "\\Top": "⫪", + "\\Not": "⫬", + "\\bNot": "⫭", + "\\revnmid": "⫮", + "\\cirmid": "⫯", + "\\midcir": "⫰", + "\\topcir": "⫱", + "\\nhpar": "⫲", + "\\parsim": "⫳", + "\\interleave": "⫴", + "\\nhVvert": "⫵", + "\\Elztdcol": "⫶", + "\\lllnest": "⫷", + "\\gggnest": "⫸", + "\\leqqslant": "⫹", + "\\geqqslant": "⫺", + "\\trslash": "⫻", + "\\biginterleave": "⫼", + "{{/}\\!\\!{/}}": "⫽", + "{\\rlap{\\textbackslash}{{/}\\!\\!{/}}}": "⫽⃥", + "\\talloblong": "⫾", + "\\bigtalloblong": "⫿", + "\\squaretopblack": "⬒", + "\\squarebotblack": "⬓", + "\\squareurblack": "⬔", + "\\squarellblack": "⬕", + "\\diamondleftblack": "⬖", + "\\diamondrightblack": "⬗", + "\\diamondtopblack": "⬘", + "\\diamondbotblack": "⬙", + "\\dottedsquare": "⬚", + "\\blacksquare": "⬛", + "\\vysmblksquare": "⬝", + "\\vysmwhtsquare": "⬞", + "\\pentagonblack": "⬟", + "\\pentagon": "⬠", + "\\varhexagon": "⬡", + "\\varhexagonblack": "⬢", + "\\hexagonblack": "⬣", + "\\lgblkcircle": "⬤", + "\\mdblkdiamond": "⬥", + "\\mdwhtdiamond": "⬦", + "\\mdblklozenge": "⬧", + "\\mdwhtlozenge": "⬨", + "\\smblkdiamond": "⬩", + "\\smblklozenge": "⬪", + "\\smwhtlozenge": "⬫", + "\\blkhorzoval": "⬬", + "\\whthorzoval": "⬭", + "\\blkvertoval": "⬮", + "\\whtvertoval": "⬯", + "\\circleonleftarrow": "⬰", + "\\leftthreearrows": "⬱", + "\\leftarrowonoplus": "⬲", + "\\longleftsquigarrow": "⬳", + "\\nvtwoheadleftarrow": "⬴", + "\\nVtwoheadleftarrow": "⬵", + "\\twoheadmapsfrom": "⬶", + "\\twoheadleftdbkarrow": "⬷", + "\\leftdotarrow": "⬸", + "\\nvleftarrowtail": "⬹", + "\\nVleftarrowtail": "⬺", + "\\twoheadleftarrowtail": "⬻", + "\\nvtwoheadleftarrowtail": "⬼", + "\\nVtwoheadleftarrowtail": "⬽", + "\\leftarrowx": "⬾", + "\\leftcurvedarrow": "⬿", + "\\equalleftarrow": "⭀", + "\\bsimilarleftarrow": "⭁", + "\\leftarrowbackapprox": "⭂", + "\\rightarrowgtr": "⭃", + "\\rightarrowsupset": "⭄", + "\\LLeftarrow": "⭅", + "\\RRightarrow": "⭆", + "\\bsimilarrightarrow": "⭇", + "\\rightarrowbackapprox": "⭈", + "\\similarleftarrow": "⭉", + "\\leftarrowapprox": "⭊", + "\\leftarrowbsimilar": "⭋", + "\\rightarrowbsimilar": "⭌", + "\\medwhitestar": "⭐", + "\\medblackstar": "⭑", + "\\smwhitestar": "⭒", + "\\rightpentagonblack": "⭓", + "\\rightpentagon": "⭔", + "\\postalmark": "〒", + "\\lbrbrak": "〔", + "\\rbrbrak": "〕", + "\\openbracketleft": "〚", + "\\openbracketright": "〛", + "\\hzigzag": "〰", + "\\dbend": "�", + "\\mathbf{A}": "𝐀", + "\\mathbf{B}": "𝐁", + "\\mathbf{C}": "𝐂", + "\\mathbf{D}": "𝐃", + "\\mathbf{E}": "𝐄", + "\\mathbf{F}": "𝐅", + "\\mathbf{G}": "𝐆", + "\\mathbf{H}": "𝐇", + "\\mathbf{I}": "𝐈", + "\\mathbf{J}": "𝐉", + "\\mathbf{K}": "𝐊", + "\\mathbf{L}": "𝐋", + "\\mathbf{M}": "𝐌", + "\\mathbf{N}": "𝐍", + "\\mathbf{O}": "𝐎", + "\\mathbf{P}": "𝐏", + "\\mathbf{Q}": "𝐐", + "\\mathbf{R}": "𝐑", + "\\mathbf{S}": "𝐒", + "\\mathbf{T}": "𝐓", + "\\mathbf{U}": "𝐔", + "\\mathbf{V}": "𝐕", + "\\mathbf{W}": "𝐖", + "\\mathbf{X}": "𝐗", + "\\mathbf{Y}": "𝐘", + "\\mathbf{Z}": "𝐙", + "\\mathbf{a}": "𝐚", + "\\mathbf{b}": "𝐛", + "\\mathbf{c}": "𝐜", + "\\mathbf{d}": "𝐝", + "\\mathbf{e}": "𝐞", + "\\mathbf{f}": "𝐟", + "\\mathbf{g}": "𝐠", + "\\mathbf{h}": "𝐡", + "\\mathbf{i}": "𝐢", + "\\mathbf{j}": "𝐣", + "\\mathbf{k}": "𝐤", + "\\mathbf{l}": "𝐥", + "\\mathbf{m}": "𝐦", + "\\mathbf{n}": "𝐧", + "\\mathbf{o}": "𝐨", + "\\mathbf{p}": "𝐩", + "\\mathbf{q}": "𝐪", + "\\mathbf{r}": "𝐫", + "\\mathbf{s}": "𝐬", + "\\mathbf{t}": "𝐭", + "\\mathbf{u}": "𝐮", + "\\mathbf{v}": "𝐯", + "\\mathbf{w}": "𝐰", + "\\mathbf{x}": "𝐱", + "\\mathbf{y}": "𝐲", + "\\mathbf{z}": "𝐳", + "\\mathsl{A}": "𝐴", + "\\mathsl{B}": "𝐵", + "\\mathsl{C}": "𝐶", + "\\mathsl{D}": "𝐷", + "\\mathsl{E}": "𝐸", + "\\mathsl{F}": "𝐹", + "\\mathsl{G}": "𝐺", + "\\mathsl{H}": "𝐻", + "\\mathsl{I}": "𝐼", + "\\mathsl{J}": "𝐽", + "\\mathsl{K}": "𝐾", + "\\mathsl{L}": "𝐿", + "\\mathsl{M}": "𝑀", + "\\mathsl{N}": "𝑁", + "\\mathsl{O}": "𝑂", + "\\mathsl{P}": "𝑃", + "\\mathsl{Q}": "𝑄", + "\\mathsl{R}": "𝑅", + "\\mathsl{S}": "𝑆", + "\\mathsl{T}": "𝑇", + "\\mathsl{U}": "𝑈", + "\\mathsl{V}": "𝑉", + "\\mathsl{W}": "𝑊", + "\\mathsl{X}": "𝑋", + "\\mathsl{Y}": "𝑌", + "\\mathsl{Z}": "𝑍", + "\\mathsl{a}": "𝑎", + "\\mathsl{b}": "𝑏", + "\\mathsl{c}": "𝑐", + "\\mathsl{d}": "𝑑", + "\\mathsl{e}": "𝑒", + "\\mathsl{f}": "𝑓", + "\\mathsl{g}": "𝑔", + "\\mathsl{i}": "𝑖", + "\\mathsl{j}": "𝑗", + "\\mathsl{k}": "𝑘", + "\\mathsl{l}": "𝑙", + "\\mathsl{m}": "𝑚", + "\\mathsl{n}": "𝑛", + "\\mathsl{o}": "𝑜", + "\\mathsl{p}": "𝑝", + "\\mathsl{q}": "𝑞", + "\\mathsl{r}": "𝑟", + "\\mathsl{s}": "𝑠", + "\\mathsl{t}": "𝑡", + "\\mathsl{u}": "𝑢", + "\\mathsl{v}": "𝑣", + "\\mathsl{w}": "𝑤", + "\\mathsl{x}": "𝑥", + "\\mathsl{y}": "𝑦", + "\\mathsl{z}": "𝑧", + "\\mathbit{A}": "𝑨", + "\\mathbit{B}": "𝑩", + "\\mathbit{C}": "𝑪", + "\\mathbit{D}": "𝑫", + "\\mathbit{E}": "𝑬", + "\\mathbit{F}": "𝑭", + "\\mathbit{G}": "𝑮", + "\\mathbit{H}": "𝑯", + "\\mathbit{I}": "𝑰", + "\\mathbit{J}": "𝑱", + "\\mathbit{K}": "𝑲", + "\\mathbit{L}": "𝑳", + "\\mathbit{M}": "𝑴", + "\\mathbit{N}": "𝑵", + "\\mathbit{O}": "𝑶", + "\\mathbit{P}": "𝑷", + "\\mathbit{Q}": "𝑸", + "\\mathbit{R}": "𝑹", + "\\mathbit{S}": "𝑺", + "\\mathbit{T}": "𝑻", + "\\mathbit{U}": "𝑼", + "\\mathbit{V}": "𝑽", + "\\mathbit{W}": "𝑾", + "\\mathbit{X}": "𝑿", + "\\mathbit{Y}": "𝒀", + "\\mathbit{Z}": "𝒁", + "\\mathbit{a}": "𝒂", + "\\mathbit{b}": "𝒃", + "\\mathbit{c}": "𝒄", + "\\mathbit{d}": "𝒅", + "\\mathbit{e}": "𝒆", + "\\mathbit{f}": "𝒇", + "\\mathbit{g}": "𝒈", + "\\mathbit{h}": "𝒉", + "\\mathbit{i}": "𝒊", + "\\mathbit{j}": "𝒋", + "\\mathbit{k}": "𝒌", + "\\mathbit{l}": "𝒍", + "\\mathbit{m}": "𝒎", + "\\mathbit{n}": "𝒏", + "\\mathbit{o}": "𝒐", + "\\mathbit{p}": "𝒑", + "\\mathbit{q}": "𝒒", + "\\mathbit{r}": "𝒓", + "\\mathbit{s}": "𝒔", + "\\mathbit{t}": "𝒕", + "\\mathbit{u}": "𝒖", + "\\mathbit{v}": "𝒗", + "\\mathbit{w}": "𝒘", + "\\mathbit{x}": "𝒙", + "\\mathbit{y}": "𝒚", + "\\mathbit{z}": "𝒛", + "\\mathscr{A}": "𝒜", + "\\mathscr{C}": "𝒞", + "\\mathscr{D}": "𝒟", + "\\mathscr{G}": "𝒢", + "\\mathscr{J}": "𝒥", + "\\mathscr{K}": "𝒦", + "\\mathscr{N}": "𝒩", + "\\mathscr{O}": "𝒪", + "\\mathscr{P}": "𝒫", + "\\mathscr{Q}": "𝒬", + "\\mathscr{S}": "𝒮", + "\\mathscr{T}": "𝒯", + "\\mathscr{U}": "𝒰", + "\\mathscr{V}": "𝒱", + "\\mathscr{W}": "𝒲", + "\\mathscr{X}": "𝒳", + "\\mathscr{Y}": "𝒴", + "\\mathscr{Z}": "𝒵", + "\\mathscr{a}": "𝒶", + "\\mathscr{b}": "𝒷", + "\\mathscr{c}": "𝒸", + "\\mathscr{d}": "𝒹", + "\\mathscr{f}": "𝒻", + "\\mathscr{h}": "𝒽", + "\\mathscr{i}": "𝒾", + "\\mathscr{j}": "𝒿", + "\\mathscr{k}": "𝓀", + "\\mathscr{m}": "𝓂", + "\\mathscr{n}": "𝓃", + "\\mathscr{p}": "𝓅", + "\\mathscr{q}": "𝓆", + "\\mathscr{r}": "𝓇", + "\\mathscr{s}": "𝓈", + "\\mathscr{t}": "𝓉", + "\\mathscr{u}": "𝓊", + "\\mathscr{v}": "𝓋", + "\\mathscr{w}": "𝓌", + "\\mathscr{x}": "𝓍", + "\\mathscr{y}": "𝓎", + "\\mathscr{z}": "𝓏", + "\\mathmit{A}": "𝓐", + "\\mathmit{B}": "𝓑", + "\\mathmit{C}": "𝓒", + "\\mathmit{D}": "𝓓", + "\\mathmit{E}": "𝓔", + "\\mathmit{F}": "𝓕", + "\\mathmit{G}": "𝓖", + "\\mathmit{H}": "𝓗", + "\\mathmit{I}": "𝓘", + "\\mathmit{J}": "𝓙", + "\\mathmit{K}": "𝓚", + "\\mathmit{L}": "𝓛", + "\\mathmit{M}": "𝓜", + "\\mathmit{N}": "𝓝", + "\\mathmit{O}": "𝓞", + "\\mathmit{P}": "𝓟", + "\\mathmit{Q}": "𝓠", + "\\mathmit{R}": "𝓡", + "\\mathmit{S}": "𝓢", + "\\mathmit{T}": "𝓣", + "\\mathmit{U}": "𝓤", + "\\mathmit{V}": "𝓥", + "\\mathmit{W}": "𝓦", + "\\mathmit{X}": "𝓧", + "\\mathmit{Y}": "𝓨", + "\\mathmit{Z}": "𝓩", + "\\mathmit{a}": "𝓪", + "\\mathmit{b}": "𝓫", + "\\mathmit{c}": "𝓬", + "\\mathmit{d}": "𝓭", + "\\mathmit{e}": "𝓮", + "\\mathmit{f}": "𝓯", + "\\mathmit{g}": "𝓰", + "\\mathmit{h}": "𝓱", + "\\mathmit{i}": "𝓲", + "\\mathmit{j}": "𝓳", + "\\mathmit{k}": "𝓴", + "\\mathmit{l}": "𝓵", + "\\mathmit{m}": "𝓶", + "\\mathmit{n}": "𝓷", + "\\mathmit{o}": "𝓸", + "\\mathmit{p}": "𝓹", + "\\mathmit{q}": "𝓺", + "\\mathmit{r}": "𝓻", + "\\mathmit{s}": "𝓼", + "\\mathmit{t}": "𝓽", + "\\mathmit{u}": "𝓾", + "\\mathmit{v}": "𝓿", + "\\mathmit{w}": "𝔀", + "\\mathmit{x}": "𝔁", + "\\mathmit{y}": "𝔂", + "\\mathmit{z}": "𝔃", + "\\mathfrak{A}": "𝔄", + "\\mathfrak{B}": "𝔅", + "\\mathfrak{D}": "𝔇", + "\\mathfrak{E}": "𝔈", + "\\mathfrak{F}": "𝔉", + "\\mathfrak{G}": "𝔊", + "\\mathfrak{J}": "𝔍", + "\\mathfrak{K}": "𝔎", + "\\mathfrak{L}": "𝔏", + "\\mathfrak{M}": "𝔐", + "\\mathfrak{N}": "𝔑", + "\\mathfrak{O}": "𝔒", + "\\mathfrak{P}": "𝔓", + "\\mathfrak{Q}": "𝔔", + "\\mathfrak{S}": "𝔖", + "\\mathfrak{T}": "𝔗", + "\\mathfrak{U}": "𝔘", + "\\mathfrak{V}": "𝔙", + "\\mathfrak{W}": "𝔚", + "\\mathfrak{X}": "𝔛", + "\\mathfrak{Y}": "𝔜", + "\\mathfrak{a}": "𝔞", + "\\mathfrak{b}": "𝔟", + "\\mathfrak{c}": "𝔠", + "\\mathfrak{d}": "𝔡", + "\\mathfrak{e}": "𝔢", + "\\mathfrak{f}": "𝔣", + "\\mathfrak{g}": "𝔤", + "\\mathfrak{h}": "𝔥", + "\\mathfrak{i}": "𝔦", + "\\mathfrak{j}": "𝔧", + "\\mathfrak{k}": "𝔨", + "\\mathfrak{l}": "𝔩", + "\\mathfrak{m}": "𝔪", + "\\mathfrak{n}": "𝔫", + "\\mathfrak{o}": "𝔬", + "\\mathfrak{p}": "𝔭", + "\\mathfrak{q}": "𝔮", + "\\mathfrak{r}": "𝔯", + "\\mathfrak{s}": "𝔰", + "\\mathfrak{t}": "𝔱", + "\\mathfrak{u}": "𝔲", + "\\mathfrak{v}": "𝔳", + "\\mathfrak{w}": "𝔴", + "\\mathfrak{x}": "𝔵", + "\\mathfrak{y}": "𝔶", + "\\mathfrak{z}": "𝔷", + "\\mathbb{A}": "𝔸", + "\\mathbb{B}": "𝔹", + "\\mathbb{D}": "𝔻", + "\\mathbb{E}": "𝔼", + "\\mathbb{F}": "𝔽", + "\\mathbb{G}": "𝔾", + "\\mathbb{I}": "𝕀", + "\\mathbb{J}": "𝕁", + "\\mathbb{K}": "𝕂", + "\\mathbb{L}": "𝕃", + "\\mathbb{M}": "𝕄", + "\\mathbb{O}": "𝕆", + "\\mathbb{S}": "𝕊", + "\\mathbb{T}": "𝕋", + "\\mathbb{U}": "𝕌", + "\\mathbb{V}": "𝕍", + "\\mathbb{W}": "𝕎", + "\\mathbb{X}": "𝕏", + "\\mathbb{Y}": "𝕐", + "\\mathbb{a}": "𝕒", + "\\mathbb{b}": "𝕓", + "\\mathbb{c}": "𝕔", + "\\mathbb{d}": "𝕕", + "\\mathbb{e}": "𝕖", + "\\mathbb{f}": "𝕗", + "\\mathbb{g}": "𝕘", + "\\mathbb{h}": "𝕙", + "\\mathbb{i}": "𝕚", + "\\mathbb{j}": "𝕛", + "\\mathbb{k}": "𝕜", + "\\mathbb{l}": "𝕝", + "\\mathbb{m}": "𝕞", + "\\mathbb{n}": "𝕟", + "\\mathbb{o}": "𝕠", + "\\mathbb{p}": "𝕡", + "\\mathbb{q}": "𝕢", + "\\mathbb{r}": "𝕣", + "\\mathbb{s}": "𝕤", + "\\mathbb{t}": "𝕥", + "\\mathbb{u}": "𝕦", + "\\mathbb{v}": "𝕧", + "\\mathbb{w}": "𝕨", + "\\mathbb{x}": "𝕩", + "\\mathbb{y}": "𝕪", + "\\mathbb{z}": "𝕫", + "\\mathslbb{A}": "𝕬", + "\\mathslbb{B}": "𝕭", + "\\mathslbb{C}": "𝕮", + "\\mathslbb{D}": "𝕯", + "\\mathslbb{E}": "𝕰", + "\\mathslbb{F}": "𝕱", + "\\mathslbb{G}": "𝕲", + "\\mathslbb{H}": "𝕳", + "\\mathslbb{I}": "𝕴", + "\\mathslbb{J}": "𝕵", + "\\mathslbb{K}": "𝕶", + "\\mathslbb{L}": "𝕷", + "\\mathslbb{M}": "𝕸", + "\\mathslbb{N}": "𝕹", + "\\mathslbb{O}": "𝕺", + "\\mathslbb{P}": "𝕻", + "\\mathslbb{Q}": "𝕼", + "\\mathslbb{R}": "𝕽", + "\\mathslbb{S}": "𝕾", + "\\mathslbb{T}": "𝕿", + "\\mathslbb{U}": "𝖀", + "\\mathslbb{V}": "𝖁", + "\\mathslbb{W}": "𝖂", + "\\mathslbb{X}": "𝖃", + "\\mathslbb{Y}": "𝖄", + "\\mathslbb{Z}": "𝖅", + "\\mathslbb{a}": "𝖆", + "\\mathslbb{b}": "𝖇", + "\\mathslbb{c}": "𝖈", + "\\mathslbb{d}": "𝖉", + "\\mathslbb{e}": "𝖊", + "\\mathslbb{f}": "𝖋", + "\\mathslbb{g}": "𝖌", + "\\mathslbb{h}": "𝖍", + "\\mathslbb{i}": "𝖎", + "\\mathslbb{j}": "𝖏", + "\\mathslbb{k}": "𝖐", + "\\mathslbb{l}": "𝖑", + "\\mathslbb{m}": "𝖒", + "\\mathslbb{n}": "𝖓", + "\\mathslbb{o}": "𝖔", + "\\mathslbb{p}": "𝖕", + "\\mathslbb{q}": "𝖖", + "\\mathslbb{r}": "𝖗", + "\\mathslbb{s}": "𝖘", + "\\mathslbb{t}": "𝖙", + "\\mathslbb{u}": "𝖚", + "\\mathslbb{v}": "𝖛", + "\\mathslbb{w}": "𝖜", + "\\mathslbb{x}": "𝖝", + "\\mathslbb{y}": "𝖞", + "\\mathslbb{z}": "𝖟", + "\\mathsf{A}": "𝖠", + "\\mathsf{B}": "𝖡", + "\\mathsf{C}": "𝖢", + "\\mathsf{D}": "𝖣", + "\\mathsf{E}": "𝖤", + "\\mathsf{F}": "𝖥", + "\\mathsf{G}": "𝖦", + "\\mathsf{H}": "𝖧", + "\\mathsf{I}": "𝖨", + "\\mathsf{J}": "𝖩", + "\\mathsf{K}": "𝖪", + "\\mathsf{L}": "𝖫", + "\\mathsf{M}": "𝖬", + "\\mathsf{N}": "𝖭", + "\\mathsf{O}": "𝖮", + "\\mathsf{P}": "𝖯", + "\\mathsf{Q}": "𝖰", + "\\mathsf{R}": "𝖱", + "\\mathsf{S}": "𝖲", + "\\mathsf{T}": "𝖳", + "\\mathsf{U}": "𝖴", + "\\mathsf{V}": "𝖵", + "\\mathsf{W}": "𝖶", + "\\mathsf{X}": "𝖷", + "\\mathsf{Y}": "𝖸", + "\\mathsf{Z}": "𝖹", + "\\mathsf{a}": "𝖺", + "\\mathsf{b}": "𝖻", + "\\mathsf{c}": "𝖼", + "\\mathsf{d}": "𝖽", + "\\mathsf{e}": "𝖾", + "\\mathsf{f}": "𝖿", + "\\mathsf{g}": "𝗀", + "\\mathsf{h}": "𝗁", + "\\mathsf{i}": "𝗂", + "\\mathsf{j}": "𝗃", + "\\mathsf{k}": "𝗄", + "\\mathsf{l}": "𝗅", + "\\mathsf{m}": "𝗆", + "\\mathsf{n}": "𝗇", + "\\mathsf{o}": "𝗈", + "\\mathsf{p}": "𝗉", + "\\mathsf{q}": "𝗊", + "\\mathsf{r}": "𝗋", + "\\mathsf{s}": "𝗌", + "\\mathsf{t}": "𝗍", + "\\mathsf{u}": "𝗎", + "\\mathsf{v}": "𝗏", + "\\mathsf{w}": "𝗐", + "\\mathsf{x}": "𝗑", + "\\mathsf{y}": "𝗒", + "\\mathsf{z}": "𝗓", + "\\mathsfbf{A}": "𝗔", + "\\mathsfbf{B}": "𝗕", + "\\mathsfbf{C}": "𝗖", + "\\mathsfbf{D}": "𝗗", + "\\mathsfbf{E}": "𝗘", + "\\mathsfbf{F}": "𝗙", + "\\mathsfbf{G}": "𝗚", + "\\mathsfbf{H}": "𝗛", + "\\mathsfbf{I}": "𝗜", + "\\mathsfbf{J}": "𝗝", + "\\mathsfbf{K}": "𝗞", + "\\mathsfbf{L}": "𝗟", + "\\mathsfbf{M}": "𝗠", + "\\mathsfbf{N}": "𝗡", + "\\mathsfbf{O}": "𝗢", + "\\mathsfbf{P}": "𝗣", + "\\mathsfbf{Q}": "𝗤", + "\\mathsfbf{R}": "𝗥", + "\\mathsfbf{S}": "𝗦", + "\\mathsfbf{T}": "𝗧", + "\\mathsfbf{U}": "𝗨", + "\\mathsfbf{V}": "𝗩", + "\\mathsfbf{W}": "𝗪", + "\\mathsfbf{X}": "𝗫", + "\\mathsfbf{Y}": "𝗬", + "\\mathsfbf{Z}": "𝗭", + "\\mathsfbf{a}": "𝗮", + "\\mathsfbf{b}": "𝗯", + "\\mathsfbf{c}": "𝗰", + "\\mathsfbf{d}": "𝗱", + "\\mathsfbf{e}": "𝗲", + "\\mathsfbf{f}": "𝗳", + "\\mathsfbf{g}": "𝗴", + "\\mathsfbf{h}": "𝗵", + "\\mathsfbf{i}": "𝗶", + "\\mathsfbf{j}": "𝗷", + "\\mathsfbf{k}": "𝗸", + "\\mathsfbf{l}": "𝗹", + "\\mathsfbf{m}": "𝗺", + "\\mathsfbf{n}": "𝗻", + "\\mathsfbf{o}": "𝗼", + "\\mathsfbf{p}": "𝗽", + "\\mathsfbf{q}": "𝗾", + "\\mathsfbf{r}": "𝗿", + "\\mathsfbf{s}": "𝘀", + "\\mathsfbf{t}": "𝘁", + "\\mathsfbf{u}": "𝘂", + "\\mathsfbf{v}": "𝘃", + "\\mathsfbf{w}": "𝘄", + "\\mathsfbf{x}": "𝘅", + "\\mathsfbf{y}": "𝘆", + "\\mathsfbf{z}": "𝘇", + "\\mathsfsl{A}": "𝘈", + "\\mathsfsl{B}": "𝘉", + "\\mathsfsl{C}": "𝘊", + "\\mathsfsl{D}": "𝘋", + "\\mathsfsl{E}": "𝘌", + "\\mathsfsl{F}": "𝘍", + "\\mathsfsl{G}": "𝘎", + "\\mathsfsl{H}": "𝘏", + "\\mathsfsl{I}": "𝘐", + "\\mathsfsl{J}": "𝘑", + "\\mathsfsl{K}": "𝘒", + "\\mathsfsl{L}": "𝘓", + "\\mathsfsl{M}": "𝘔", + "\\mathsfsl{N}": "𝘕", + "\\mathsfsl{O}": "𝘖", + "\\mathsfsl{P}": "𝘗", + "\\mathsfsl{Q}": "𝘘", + "\\mathsfsl{R}": "𝘙", + "\\mathsfsl{S}": "𝘚", + "\\mathsfsl{T}": "𝘛", + "\\mathsfsl{U}": "𝘜", + "\\mathsfsl{V}": "𝘝", + "\\mathsfsl{W}": "𝘞", + "\\mathsfsl{X}": "𝘟", + "\\mathsfsl{Y}": "𝘠", + "\\mathsfsl{Z}": "𝘡", + "\\mathsfsl{a}": "𝘢", + "\\mathsfsl{b}": "𝘣", + "\\mathsfsl{c}": "𝘤", + "\\mathsfsl{d}": "𝘥", + "\\mathsfsl{e}": "𝘦", + "\\mathsfsl{f}": "𝘧", + "\\mathsfsl{g}": "𝘨", + "\\mathsfsl{h}": "𝘩", + "\\mathsfsl{i}": "𝘪", + "\\mathsfsl{j}": "𝘫", + "\\mathsfsl{k}": "𝘬", + "\\mathsfsl{l}": "𝘭", + "\\mathsfsl{m}": "𝘮", + "\\mathsfsl{n}": "𝘯", + "\\mathsfsl{o}": "𝘰", + "\\mathsfsl{p}": "𝘱", + "\\mathsfsl{q}": "𝘲", + "\\mathsfsl{r}": "𝘳", + "\\mathsfsl{s}": "𝘴", + "\\mathsfsl{t}": "𝘵", + "\\mathsfsl{u}": "𝘶", + "\\mathsfsl{v}": "𝘷", + "\\mathsfsl{w}": "𝘸", + "\\mathsfsl{x}": "𝘹", + "\\mathsfsl{y}": "𝘺", + "\\mathsfsl{z}": "𝘻", + "\\mathsfbfsl{A}": "𝘼", + "\\mathsfbfsl{B}": "𝘽", + "\\mathsfbfsl{C}": "𝘾", + "\\mathsfbfsl{D}": "𝘿", + "\\mathsfbfsl{E}": "𝙀", + "\\mathsfbfsl{F}": "𝙁", + "\\mathsfbfsl{G}": "𝙂", + "\\mathsfbfsl{H}": "𝙃", + "\\mathsfbfsl{I}": "𝙄", + "\\mathsfbfsl{J}": "𝙅", + "\\mathsfbfsl{K}": "𝙆", + "\\mathsfbfsl{L}": "𝙇", + "\\mathsfbfsl{M}": "𝙈", + "\\mathsfbfsl{N}": "𝙉", + "\\mathsfbfsl{O}": "𝙊", + "\\mathsfbfsl{P}": "𝙋", + "\\mathsfbfsl{Q}": "𝙌", + "\\mathsfbfsl{R}": "𝙍", + "\\mathsfbfsl{S}": "𝙎", + "\\mathsfbfsl{T}": "𝙏", + "\\mathsfbfsl{U}": "𝙐", + "\\mathsfbfsl{V}": "𝙑", + "\\mathsfbfsl{W}": "𝙒", + "\\mathsfbfsl{X}": "𝙓", + "\\mathsfbfsl{Y}": "𝙔", + "\\mathsfbfsl{Z}": "𝙕", + "\\mathsfbfsl{a}": "𝙖", + "\\mathsfbfsl{b}": "𝙗", + "\\mathsfbfsl{c}": "𝙘", + "\\mathsfbfsl{d}": "𝙙", + "\\mathsfbfsl{e}": "𝙚", + "\\mathsfbfsl{f}": "𝙛", + "\\mathsfbfsl{g}": "𝙜", + "\\mathsfbfsl{h}": "𝙝", + "\\mathsfbfsl{i}": "𝙞", + "\\mathsfbfsl{j}": "𝙟", + "\\mathsfbfsl{k}": "𝙠", + "\\mathsfbfsl{l}": "𝙡", + "\\mathsfbfsl{m}": "𝙢", + "\\mathsfbfsl{n}": "𝙣", + "\\mathsfbfsl{o}": "𝙤", + "\\mathsfbfsl{p}": "𝙥", + "\\mathsfbfsl{q}": "𝙦", + "\\mathsfbfsl{r}": "𝙧", + "\\mathsfbfsl{s}": "𝙨", + "\\mathsfbfsl{t}": "𝙩", + "\\mathsfbfsl{u}": "𝙪", + "\\mathsfbfsl{v}": "𝙫", + "\\mathsfbfsl{w}": "𝙬", + "\\mathsfbfsl{x}": "𝙭", + "\\mathsfbfsl{y}": "𝙮", + "\\mathsfbfsl{z}": "𝙯", + "\\mathtt{A}": "𝙰", + "\\mathtt{B}": "𝙱", + "\\mathtt{C}": "𝙲", + "\\mathtt{D}": "𝙳", + "\\mathtt{E}": "𝙴", + "\\mathtt{F}": "𝙵", + "\\mathtt{G}": "𝙶", + "\\mathtt{H}": "𝙷", + "\\mathtt{I}": "𝙸", + "\\mathtt{J}": "𝙹", + "\\mathtt{K}": "𝙺", + "\\mathtt{L}": "𝙻", + "\\mathtt{M}": "𝙼", + "\\mathtt{N}": "𝙽", + "\\mathtt{O}": "𝙾", + "\\mathtt{P}": "𝙿", + "\\mathtt{Q}": "𝚀", + "\\mathtt{R}": "𝚁", + "\\mathtt{S}": "𝚂", + "\\mathtt{T}": "𝚃", + "\\mathtt{U}": "𝚄", + "\\mathtt{V}": "𝚅", + "\\mathtt{W}": "𝚆", + "\\mathtt{X}": "𝚇", + "\\mathtt{Y}": "𝚈", + "\\mathtt{Z}": "𝚉", + "\\mathtt{a}": "𝚊", + "\\mathtt{b}": "𝚋", + "\\mathtt{c}": "𝚌", + "\\mathtt{d}": "𝚍", + "\\mathtt{e}": "𝚎", + "\\mathtt{f}": "𝚏", + "\\mathtt{g}": "𝚐", + "\\mathtt{h}": "𝚑", + "\\mathtt{i}": "𝚒", + "\\mathtt{j}": "𝚓", + "\\mathtt{k}": "𝚔", + "\\mathtt{l}": "𝚕", + "\\mathtt{m}": "𝚖", + "\\mathtt{n}": "𝚗", + "\\mathtt{o}": "𝚘", + "\\mathtt{p}": "𝚙", + "\\mathtt{q}": "𝚚", + "\\mathtt{r}": "𝚛", + "\\mathtt{s}": "𝚜", + "\\mathtt{t}": "𝚝", + "\\mathtt{u}": "𝚞", + "\\mathtt{v}": "𝚟", + "\\mathtt{w}": "𝚠", + "\\mathtt{x}": "𝚡", + "\\mathtt{y}": "𝚢", + "\\mathtt{z}": "𝚣", + "\\mathbf{\\Gamma}": "𝚪", + "\\mathbf{\\Delta}": "𝚫", + "\\mathbf{\\Theta}": "𝚯", + "\\mathbf{\\Lambda}": "𝚲", + "\\mathbf{\\Xi}": "𝚵", + "\\mathbf{\\Pi}": "𝚷", + "\\mathbf{\\vartheta}": "𝚹", + "\\mathbf{\\Sigma}": "𝚺", + "\\mathbf{\\Upsilon}": "𝚼", + "\\mathbf{\\Phi}": "𝚽", + "\\mathbf{\\Psi}": "𝚿", + "\\mathbf{\\Omega}": "𝛀", + "\\mathbf{\\nabla}": "𝛁", + "\\mathbf{\\alpha}": "𝛂", + "\\mathbf{\\beta}": "𝛃", + "\\mathbf{\\gamma}": "𝛄", + "\\mathbf{\\delta}": "𝛅", + "\\mathbf{\\epsilon}": "𝛆", + "\\mathbf{\\zeta}": "𝛇", + "\\mathbf{\\eta}": "𝛈", + "\\mathbf{\\theta}": "𝛉", + "\\mathbf{\\lambda}": "𝛌", + "\\mathbf{\\xi}": "𝛏", + "\\mathbf{\\pi}": "𝛑", + "\\mathbf{\\varsigma}": "𝛓", + "\\mathbf{\\sigma}": "𝛔", + "\\mathbf{\\upsilon}": "𝛖", + "\\mathbf{\\phi}": "𝛗", + "\\mathbf{\\psi}": "𝛙", + "\\mathbf{\\omega}": "𝛚", + "\\mathbf{\\varkappa}": "𝛞", + "\\mathbf{\\varrho}": "𝛠", + "\\mathbf{\\varpi}": "𝛡", + "\\mathsl{\\Gamma}": "𝛤", + "\\mathsl{\\Delta}": "𝛥", + "\\mathsl{\\Lambda}": "𝛬", + "\\mathsl{\\Xi}": "𝛯", + "\\mathsl{\\Pi}": "𝛱", + "\\mathsl{\\Theta}": "𝛳", + "\\mathsl{\\Sigma}": "𝛴", + "\\mathsl{\\Upsilon}": "𝛶", + "\\mathsl{\\Phi}": "𝛷", + "\\mathsl{\\Psi}": "𝛹", + "\\mathsl{\\Omega}": "𝛺", + "\\mathsl{\\nabla}": "𝛻", + "\\mathsl{\\gamma}": "𝛾", + "\\mathsl{\\delta}": "𝛿", + "\\mathsl{\\theta}": "𝜃", + "\\mathsl{\\lambda}": "𝜆", + "\\mu": "𝜇", + "\\mathsl{\\xi}": "𝜉", + "\\mathsl{\\pi}": "𝜋", + "\\mathsl{\\varsigma}": "𝜍", + "\\mathsl{\\sigma}": "𝜎", + "\\mathsl{\\upsilon}": "𝜐", + "\\mathsl{\\varphi}": "𝜑", + "\\mathsl{\\psi}": "𝜓", + "\\mathsl{\\omega}": "𝜔", + "\\mathsl{\\vartheta}": "𝜗", + "\\mathsl{\\varkappa}": "𝜘", + "\\mathsl{\\phi}": "𝜙", + "\\mathsl{\\varrho}": "𝜚", + "\\mathsl{\\varpi}": "𝜛", + "\\mathbit{\\Gamma}": "𝜞", + "\\mathbit{\\Delta}": "𝜟", + "\\mathbit{\\Theta}": "𝜣", + "\\mathbit{\\Lambda}": "𝜦", + "\\mathbit{\\Xi}": "𝜩", + "\\mathbit{\\Pi}": "𝜫", + "\\mathbit{\\Sigma}": "𝜮", + "\\mathbit{\\Upsilon}": "𝜰", + "\\mathbit{\\Phi}": "𝜱", + "\\mathbit{\\Psi}": "𝜳", + "\\mathbit{\\Omega}": "𝜴", + "\\mathbit{\\nabla}": "𝜵", + "\\mathbit{\\alpha}": "𝜶", + "\\mathbit{\\beta}": "𝜷", + "\\mathbit{\\gamma}": "𝜸", + "\\mathbit{\\delta}": "𝜹", + "\\mathbit{\\epsilon}": "𝜺", + "\\mathbit{\\zeta}": "𝜻", + "\\mathbit{\\eta}": "𝜼", + "\\mathbit{\\theta}": "𝜽", + "\\mathbit{\\imath}": "𝜾", + "\\mathbit{\\kappa}": "𝜿", + "\\mathbit{\\lambda}": "𝝀", + "\\mathbit{\\xi}": "𝝃", + "\\mathbit{\\pi}": "𝝅", + "\\mathbit{\\rho}": "𝝆", + "\\mathbit{\\varsigma}": "𝝇", + "\\mathbit{\\sigma}": "𝝈", + "\\mathbit{\\tau}": "𝝉", + "\\mathbit{\\upsilon}": "𝝊", + "\\mathbit{\\varphi}": "𝝋", + "\\mathbit{\\chi}": "𝝌", + "\\mathbit{\\psi}": "𝝍", + "\\mathbit{\\omega}": "𝝎", + "\\mathbit{\\vartheta}": "𝝑", + "\\mathbit{\\varkappa}": "𝝒", + "\\mathbit{\\phi}": "𝝓", + "\\mathbit{\\varrho}": "𝝔", + "\\mathbit{\\varpi}": "𝝕", + "\\mathsfbf{\\Gamma}": "𝝘", + "\\mathsfbf{\\Delta}": "𝝙", + "\\mathsfbf{\\Theta}": "𝝝", + "\\mathsfbf{\\Lambda}": "𝝠", + "\\mathsfbf{\\Xi}": "𝝣", + "\\mathsfbf{\\Pi}": "𝝥", + "\\mathsfbf{\\Sigma}": "𝝨", + "\\mathsfbf{\\Upsilon}": "𝝪", + "\\mathsfbf{\\Phi}": "𝝫", + "\\mathsfbf{\\Psi}": "𝝭", + "\\mathsfbf{\\Omega}": "𝝮", + "\\mathsfbf{\\nabla}": "𝝯", + "\\mathsfbf{\\alpha}": "𝝰", + "\\mathsfbf{\\beta}": "𝝱", + "\\mathsfbf{\\gamma}": "𝝲", + "\\mathsfbf{\\delta}": "𝝳", + "\\mathsfbf{\\varepsilon}": "𝝴", + "\\mathsfbf{\\zeta}": "𝝵", + "\\mathsfbf{\\eta}": "𝝶", + "\\mathsfbf{\\theta}": "𝝷", + "\\mathsfbf{\\imath}": "𝝸", + "\\mathsfbf{\\kappa}": "𝝹", + "\\mathsfbf{\\lambda}": "𝝺", + "\\mathsfbf{\\xi}": "𝝽", + "\\mathsfbf{\\pi}": "𝝿", + "\\mathsfbf{\\rho}": "𝞀", + "\\mathsfbf{\\varsigma}": "𝞁", + "\\mathsfbf{\\sigma}": "𝞂", + "\\mathsfbf{\\tau}": "𝞃", + "\\mathsfbf{\\upsilon}": "𝞄", + "\\mathsfbf{\\varphi}": "𝞅", + "\\mathsfbf{\\chi}": "𝞆", + "\\mathsfbf{\\psi}": "𝞇", + "\\mathsfbf{\\omega}": "𝞈", + "\\mathsfbf{\\vartheta}": "𝞋", + "\\mathsfbf{\\varkappa}": "𝞌", + "\\mathsfbf{\\phi}": "𝞍", + "\\mathsfbf{\\varrho}": "𝞎", + "\\mathsfbf{\\varpi}": "𝞏", + "\\mathsfbfsl{\\Gamma}": "𝞒", + "\\mathsfbfsl{\\Delta}": "𝞓", + "\\mathsfbfsl{\\Theta}": "𝞗", + "\\mathsfbfsl{\\Lambda}": "𝞚", + "\\mathsfbfsl{\\Xi}": "𝞝", + "\\mathsfbfsl{\\Pi}": "𝞟", + "\\mathsfbfsl{\\Sigma}": "𝞢", + "\\mathsfbfsl{\\Upsilon}": "𝞤", + "\\mathsfbfsl{\\Phi}": "𝞥", + "\\mathsfbfsl{\\Psi}": "𝞧", + "\\mathsfbfsl{\\Omega}": "𝞨", + "\\mathsfbfsl{\\nabla}": "𝞩", + "\\mathsfbfsl{\\alpha}": "𝞪", + "\\mathsfbfsl{\\beta}": "𝞫", + "\\mathsfbfsl{\\gamma}": "𝞬", + "\\mathsfbfsl{\\delta}": "𝞭", + "\\mathsfbfsl{\\varepsilon}": "𝞮", + "\\mathsfbfsl{\\zeta}": "𝞯", + "\\mathsfbfsl{\\eta}": "𝞰", + "\\mathsfbfsl{\\theta}": "𝞱", + "\\mathsfbfsl{\\imath}": "𝞲", + "\\mathsfbfsl{\\kappa}": "𝞳", + "\\mathsfbfsl{\\lambda}": "𝞴", + "\\mathsfbfsl{\\xi}": "𝞷", + "\\mathsfbfsl{\\pi}": "𝞹", + "\\mathsfbfsl{\\rho}": "𝞺", + "\\mathsfbfsl{\\varsigma}": "𝞻", + "\\mathsfbfsl{\\sigma}": "𝞼", + "\\mathsfbfsl{\\tau}": "𝞽", + "\\mathsfbfsl{\\upsilon}": "𝞾", + "\\mathsfbfsl{\\varphi}": "𝞿", + "\\mathsfbfsl{\\chi}": "𝟀", + "\\mathsfbfsl{\\psi}": "𝟁", + "\\mathsfbfsl{\\omega}": "𝟂", + "\\mathsfbfsl{\\vartheta}": "𝟅", + "\\mathsfbfsl{\\varkappa}": "𝟆", + "\\mathsfbfsl{\\phi}": "𝟇", + "\\mathsfbfsl{\\varrho}": "𝟈", + "\\mathsfbfsl{\\varpi}": "𝟉", + "\\mbfDigamma": "𝟊", + "\\mbfdigamma": "𝟋", + "\\mathbf{0}": "𝟎", + "\\mathbf{1}": "𝟏", + "\\mathbf{2}": "𝟐", + "\\mathbf{3}": "𝟑", + "\\mathbf{4}": "𝟒", + "\\mathbf{5}": "𝟓", + "\\mathbf{6}": "𝟔", + "\\mathbf{7}": "𝟕", + "\\mathbf{8}": "𝟖", + "\\mathbf{9}": "𝟗", + "\\mathbb{0}": "𝟘", + "\\mathbb{1}": "𝟙", + "\\mathbb{2}": "𝟚", + "\\mathbb{3}": "𝟛", + "\\mathbb{4}": "𝟜", + "\\mathbb{5}": "𝟝", + "\\mathbb{6}": "𝟞", + "\\mathbb{7}": "𝟟", + "\\mathbb{8}": "𝟠", + "\\mathbb{9}": "𝟡", + "\\mathsf{0}": "𝟢", + "\\mathsf{1}": "𝟣", + "\\mathsf{2}": "𝟤", + "\\mathsf{3}": "𝟥", + "\\mathsf{4}": "𝟦", + "\\mathsf{5}": "𝟧", + "\\mathsf{6}": "𝟨", + "\\mathsf{7}": "𝟩", + "\\mathsf{8}": "𝟪", + "\\mathsf{9}": "𝟫", + "\\mathsfbf{0}": "𝟬", + "\\mathsfbf{1}": "𝟭", + "\\mathsfbf{2}": "𝟮", + "\\mathsfbf{3}": "𝟯", + "\\mathsfbf{4}": "𝟰", + "\\mathsfbf{5}": "𝟱", + "\\mathsfbf{6}": "𝟲", + "\\mathsfbf{7}": "𝟳", + "\\mathsfbf{8}": "𝟴", + "\\mathsfbf{9}": "𝟵", + "\\mathtt{0}": "𝟶", + "\\mathtt{1}": "𝟷", + "\\mathtt{2}": "𝟸", + "\\mathtt{3}": "𝟹", + "\\mathtt{4}": "𝟺", + "\\mathtt{5}": "𝟻", + "\\mathtt{6}": "𝟼", + "\\mathtt{7}": "𝟽", + "\\mathtt{8}": "𝟾", + "\\mathtt{9}": "𝟿" + }; + + var commands = [ + "acute", + "bar", + "breve", + "c", + "d", + "ddot", + "dot", + "grave", + "hat", + "k", + "mathring", + "overline", + "r", + "textacutemacron", + "textacutewedge", + "textadvancing", + "textbrevemacron", + "textcircumdot", + "textcorner", + "textdotacute", + "textdotbreve", + "textdoublegrave", + "textdoublevbaraccent", + "textgravedot", + "textgravemacron", + "textinvsubbridge", + "textlowering", + "textovercross", + "textraising", + "textretracting", + "textringmacron", + "textseagull", + "textsubarch", + "textsubbar", + "textsubbridge", + "textsubgrave", + "textsublhalfring", + "textsubplus", + "textsubrhalfring", + "textsubring", + "textsubsquare", + "textsubtilde", + "textsubumlaut", + "textsubwedge", + "textsuperimposetilde", + "textsyllabic", + "texttildedot", + "textvbaraccent", + "tilde", + "u", + "underbar", + "v" + ]; + var tolatex = { + "̀": { + command: "`", + mode: "text" + }, + "̀̄": { + command: "textgravemacron", + mode: "text" + }, + "̀̇": { + command: "textgravedot", + mode: "text" + }, + "́": { + command: "'", + mode: "text" + }, + "́̄": { + command: "textacutemacron", + mode: "text" + }, + "́̇": { + command: "textdotacute", + mode: "text" + }, + "́̌": { + command: "textacutewedge", + mode: "text" + }, + "̂": { + command: "^", + mode: "text" + }, + "̂̇": { + command: "textcircumdot", + mode: "text" + }, + "̃": { + command: "~", + mode: "text" + }, + "̃̇": { + command: "texttildedot", + mode: "text" + }, + "̄": { + command: "=", + mode: "text" + }, + "̄̀": { + command: "textgravemacron", + mode: "text" + }, + "̄́": { + command: "textacutemacron", + mode: "text" + }, + "̄̆": { + command: "textbrevemacron", + mode: "text" + }, + "̄̊": { + command: "textringmacron", + mode: "text" + }, + "̅": { + command: "overline", + mode: "math" + }, + "̆": { + command: "u", + mode: "text" + }, + "̆̄": { + command: "textbrevemacron", + mode: "text" + }, + "̆̇": { + command: "textdotbreve", + mode: "text" + }, + "̇": { + command: ".", + mode: "text" + }, + "̇̀": { + command: "textgravedot", + mode: "text" + }, + "̇́": { + command: "textdotacute", + mode: "text" + }, + "̇̂": { + command: "textcircumdot", + mode: "text" + }, + "̇̃": { + command: "texttildedot", + mode: "text" + }, + "̇̆": { + command: "textdotbreve", + mode: "text" + }, + "̈": { + command: "\"", + mode: "text" + }, + "̊": { + command: "r", + mode: "text" + }, + "̊̄": { + command: "textringmacron", + mode: "text" + }, + "̋": { + command: "H", + mode: "text" + }, + "̌": { + command: "v", + mode: "text" + }, + "̌́": { + command: "textacutewedge", + mode: "text" + }, + "̍": { + command: "textvbaraccent", + mode: "text" + }, + "̎": { + command: "textdoublevbaraccent", + mode: "text" + }, + "̏": { + command: "textdoublegrave", + mode: "text" + }, + "̐": { + command: "textdotbreve", + mode: "text" + }, + "̖": { + command: "textsubgrave", + mode: "text" + }, + "̘": { + command: "textadvancing", + mode: "text" + }, + "̙": { + command: "textretracting", + mode: "text" + }, + "̚": { + command: "textcorner", + mode: "text" + }, + "̜": { + command: "textsublhalfring", + mode: "text" + }, + "̝": { + command: "textraising", + mode: "text" + }, + "̞": { + command: "textlowering", + mode: "text" + }, + "̟": { + command: "textsubplus", + mode: "text" + }, + "̣": { + command: "d", + mode: "text" + }, + "̤": { + command: "textsubumlaut", + mode: "text" + }, + "̥": { + command: "textsubring", + mode: "text" + }, + "̧": { + command: "c", + mode: "text" + }, + "̨": { + command: "k", + mode: "text" + }, + "̩": { + command: "textsyllabic", + mode: "text" + }, + "̪": { + command: "textsubbridge", + mode: "text" + }, + "̬": { + command: "textsubwedge", + mode: "text" + }, + "̯": { + command: "textsubarch", + mode: "text" + }, + "̰": { + command: "textsubtilde", + mode: "text" + }, + "̱": { + command: "textsubbar", + mode: "text" + }, + "̴": { + command: "textsuperimposetilde", + mode: "text" + }, + "̹": { + command: "textsubrhalfring", + mode: "text" + }, + "̺": { + command: "textinvsubbridge", + mode: "text" + }, + "̻": { + command: "textsubsquare", + mode: "text" + }, + "̼": { + command: "textseagull", + mode: "text" + }, + "̽": { + command: "textovercross", + mode: "text" + } + }; + var tounicode = { + "\"": "̈", + "'": "́", + ".": "̇", + "=": "̄", + H: "̋", + "^": "̂", + "`": "̀", + acute: "́", + bar: "̄", + breve: "̆", + c: "̧", + d: "̣", + ddot: "̈", + dot: "̇", + grave: "̀", + hat: "̂", + k: "̨", + mathring: "̊", + overline: "̅", + r: "̊", + textacutemacron: "̄́", + textacutewedge: "̌́", + textadvancing: "̘", + textbrevemacron: "̄̆", + textcircumdot: "̇̂", + textcorner: "̚", + textdotacute: "́̇", + textdotbreve: "̐", + textdoublegrave: "̏", + textdoublevbaraccent: "̎", + textgravedot: "̇̀", + textgravemacron: "̀̄", + textinvsubbridge: "̺", + textlowering: "̞", + textovercross: "̽", + textraising: "̝", + textretracting: "̙", + textringmacron: "̄̊", + textseagull: "̼", + textsubarch: "̯", + textsubbar: "̱", + textsubbridge: "̪", + textsubgrave: "̖", + textsublhalfring: "̜", + textsubplus: "̟", + textsubrhalfring: "̹", + textsubring: "̥", + textsubsquare: "̻", + textsubtilde: "̰", + textsubumlaut: "̤", + textsubwedge: "̬", + textsuperimposetilde: "̴", + textsyllabic: "̩", + texttildedot: "̇̃", + textvbaraccent: "̍", + tilde: "̃", + u: "̆", + underbar: "̱", + v: "̌", + "~": "̃" + }; + var require$$4 = { + commands: commands, + tolatex: tolatex, + tounicode: tounicode + }; + + var unicode2latex = { + ascii: require$$0, + ascii_bibtex_creator: require$$1, + unicode: require$$2, + latex: require$$3, + diacritics: require$$4, + }; + + var categories = [ + { + 'name': 'C', + 'alias': 'Other', + 'isBmpLast': true, + 'bmp': '\0-\x1F\x7F-\x9F\xAD\u0378\u0379\u0380-\u0383\u038B\u038D\u03A2\u0530\u0557\u0558\u058B\u058C\u0590\u05C8-\u05CF\u05EB-\u05EE\u05F5-\u0605\u061C\u061D\u06DD\u070E\u070F\u074B\u074C\u07B2-\u07BF\u07FB\u07FC\u082E\u082F\u083F\u085C\u085D\u085F\u086B-\u089F\u08B5\u08C8-\u08D2\u08E2\u0984\u098D\u098E\u0991\u0992\u09A9\u09B1\u09B3-\u09B5\u09BA\u09BB\u09C5\u09C6\u09C9\u09CA\u09CF-\u09D6\u09D8-\u09DB\u09DE\u09E4\u09E5\u09FF\u0A00\u0A04\u0A0B-\u0A0E\u0A11\u0A12\u0A29\u0A31\u0A34\u0A37\u0A3A\u0A3B\u0A3D\u0A43-\u0A46\u0A49\u0A4A\u0A4E-\u0A50\u0A52-\u0A58\u0A5D\u0A5F-\u0A65\u0A77-\u0A80\u0A84\u0A8E\u0A92\u0AA9\u0AB1\u0AB4\u0ABA\u0ABB\u0AC6\u0ACA\u0ACE\u0ACF\u0AD1-\u0ADF\u0AE4\u0AE5\u0AF2-\u0AF8\u0B00\u0B04\u0B0D\u0B0E\u0B11\u0B12\u0B29\u0B31\u0B34\u0B3A\u0B3B\u0B45\u0B46\u0B49\u0B4A\u0B4E-\u0B54\u0B58-\u0B5B\u0B5E\u0B64\u0B65\u0B78-\u0B81\u0B84\u0B8B-\u0B8D\u0B91\u0B96-\u0B98\u0B9B\u0B9D\u0BA0-\u0BA2\u0BA5-\u0BA7\u0BAB-\u0BAD\u0BBA-\u0BBD\u0BC3-\u0BC5\u0BC9\u0BCE\u0BCF\u0BD1-\u0BD6\u0BD8-\u0BE5\u0BFB-\u0BFF\u0C0D\u0C11\u0C29\u0C3A-\u0C3C\u0C45\u0C49\u0C4E-\u0C54\u0C57\u0C5B-\u0C5F\u0C64\u0C65\u0C70-\u0C76\u0C8D\u0C91\u0CA9\u0CB4\u0CBA\u0CBB\u0CC5\u0CC9\u0CCE-\u0CD4\u0CD7-\u0CDD\u0CDF\u0CE4\u0CE5\u0CF0\u0CF3-\u0CFF\u0D0D\u0D11\u0D45\u0D49\u0D50-\u0D53\u0D64\u0D65\u0D80\u0D84\u0D97-\u0D99\u0DB2\u0DBC\u0DBE\u0DBF\u0DC7-\u0DC9\u0DCB-\u0DCE\u0DD5\u0DD7\u0DE0-\u0DE5\u0DF0\u0DF1\u0DF5-\u0E00\u0E3B-\u0E3E\u0E5C-\u0E80\u0E83\u0E85\u0E8B\u0EA4\u0EA6\u0EBE\u0EBF\u0EC5\u0EC7\u0ECE\u0ECF\u0EDA\u0EDB\u0EE0-\u0EFF\u0F48\u0F6D-\u0F70\u0F98\u0FBD\u0FCD\u0FDB-\u0FFF\u10C6\u10C8-\u10CC\u10CE\u10CF\u1249\u124E\u124F\u1257\u1259\u125E\u125F\u1289\u128E\u128F\u12B1\u12B6\u12B7\u12BF\u12C1\u12C6\u12C7\u12D7\u1311\u1316\u1317\u135B\u135C\u137D-\u137F\u139A-\u139F\u13F6\u13F7\u13FE\u13FF\u169D-\u169F\u16F9-\u16FF\u170D\u1715-\u171F\u1737-\u173F\u1754-\u175F\u176D\u1771\u1774-\u177F\u17DE\u17DF\u17EA-\u17EF\u17FA-\u17FF\u180E\u180F\u181A-\u181F\u1879-\u187F\u18AB-\u18AF\u18F6-\u18FF\u191F\u192C-\u192F\u193C-\u193F\u1941-\u1943\u196E\u196F\u1975-\u197F\u19AC-\u19AF\u19CA-\u19CF\u19DB-\u19DD\u1A1C\u1A1D\u1A5F\u1A7D\u1A7E\u1A8A-\u1A8F\u1A9A-\u1A9F\u1AAE\u1AAF\u1AC1-\u1AFF\u1B4C-\u1B4F\u1B7D-\u1B7F\u1BF4-\u1BFB\u1C38-\u1C3A\u1C4A-\u1C4C\u1C89-\u1C8F\u1CBB\u1CBC\u1CC8-\u1CCF\u1CFB-\u1CFF\u1DFA\u1F16\u1F17\u1F1E\u1F1F\u1F46\u1F47\u1F4E\u1F4F\u1F58\u1F5A\u1F5C\u1F5E\u1F7E\u1F7F\u1FB5\u1FC5\u1FD4\u1FD5\u1FDC\u1FF0\u1FF1\u1FF5\u1FFF\u200B-\u200F\u202A-\u202E\u2060-\u206F\u2072\u2073\u208F\u209D-\u209F\u20C0-\u20CF\u20F1-\u20FF\u218C-\u218F\u2427-\u243F\u244B-\u245F\u2B74\u2B75\u2B96\u2C2F\u2C5F\u2CF4-\u2CF8\u2D26\u2D28-\u2D2C\u2D2E\u2D2F\u2D68-\u2D6E\u2D71-\u2D7E\u2D97-\u2D9F\u2DA7\u2DAF\u2DB7\u2DBF\u2DC7\u2DCF\u2DD7\u2DDF\u2E53-\u2E7F\u2E9A\u2EF4-\u2EFF\u2FD6-\u2FEF\u2FFC-\u2FFF\u3040\u3097\u3098\u3100-\u3104\u3130\u318F\u31E4-\u31EF\u321F\u9FFD-\u9FFF\uA48D-\uA48F\uA4C7-\uA4CF\uA62C-\uA63F\uA6F8-\uA6FF\uA7C0\uA7C1\uA7CB-\uA7F4\uA82D-\uA82F\uA83A-\uA83F\uA878-\uA87F\uA8C6-\uA8CD\uA8DA-\uA8DF\uA954-\uA95E\uA97D-\uA97F\uA9CE\uA9DA-\uA9DD\uA9FF\uAA37-\uAA3F\uAA4E\uAA4F\uAA5A\uAA5B\uAAC3-\uAADA\uAAF7-\uAB00\uAB07\uAB08\uAB0F\uAB10\uAB17-\uAB1F\uAB27\uAB2F\uAB6C-\uAB6F\uABEE\uABEF\uABFA-\uABFF\uD7A4-\uD7AF\uD7C7-\uD7CA\uD7FC-\uF8FF\uFA6E\uFA6F\uFADA-\uFAFF\uFB07-\uFB12\uFB18-\uFB1C\uFB37\uFB3D\uFB3F\uFB42\uFB45\uFBC2-\uFBD2\uFD40-\uFD4F\uFD90\uFD91\uFDC8-\uFDEF\uFDFE\uFDFF\uFE1A-\uFE1F\uFE53\uFE67\uFE6C-\uFE6F\uFE75\uFEFD-\uFF00\uFFBF-\uFFC1\uFFC8\uFFC9\uFFD0\uFFD1\uFFD8\uFFD9\uFFDD-\uFFDF\uFFE7\uFFEF-\uFFFB\uFFFE\uFFFF', + 'astral': '\uD800[\uDC0C\uDC27\uDC3B\uDC3E\uDC4E\uDC4F\uDC5E-\uDC7F\uDCFB-\uDCFF\uDD03-\uDD06\uDD34-\uDD36\uDD8F\uDD9D-\uDD9F\uDDA1-\uDDCF\uDDFE-\uDE7F\uDE9D-\uDE9F\uDED1-\uDEDF\uDEFC-\uDEFF\uDF24-\uDF2C\uDF4B-\uDF4F\uDF7B-\uDF7F\uDF9E\uDFC4-\uDFC7\uDFD6-\uDFFF]|\uD801[\uDC9E\uDC9F\uDCAA-\uDCAF\uDCD4-\uDCD7\uDCFC-\uDCFF\uDD28-\uDD2F\uDD64-\uDD6E\uDD70-\uDDFF\uDF37-\uDF3F\uDF56-\uDF5F\uDF68-\uDFFF]|\uD802[\uDC06\uDC07\uDC09\uDC36\uDC39-\uDC3B\uDC3D\uDC3E\uDC56\uDC9F-\uDCA6\uDCB0-\uDCDF\uDCF3\uDCF6-\uDCFA\uDD1C-\uDD1E\uDD3A-\uDD3E\uDD40-\uDD7F\uDDB8-\uDDBB\uDDD0\uDDD1\uDE04\uDE07-\uDE0B\uDE14\uDE18\uDE36\uDE37\uDE3B-\uDE3E\uDE49-\uDE4F\uDE59-\uDE5F\uDEA0-\uDEBF\uDEE7-\uDEEA\uDEF7-\uDEFF\uDF36-\uDF38\uDF56\uDF57\uDF73-\uDF77\uDF92-\uDF98\uDF9D-\uDFA8\uDFB0-\uDFFF]|\uD803[\uDC49-\uDC7F\uDCB3-\uDCBF\uDCF3-\uDCF9\uDD28-\uDD2F\uDD3A-\uDE5F\uDE7F\uDEAA\uDEAE\uDEAF\uDEB2-\uDEFF\uDF28-\uDF2F\uDF5A-\uDFAF\uDFCC-\uDFDF\uDFF7-\uDFFF]|\uD804[\uDC4E-\uDC51\uDC70-\uDC7E\uDCBD\uDCC2-\uDCCF\uDCE9-\uDCEF\uDCFA-\uDCFF\uDD35\uDD48-\uDD4F\uDD77-\uDD7F\uDDE0\uDDF5-\uDDFF\uDE12\uDE3F-\uDE7F\uDE87\uDE89\uDE8E\uDE9E\uDEAA-\uDEAF\uDEEB-\uDEEF\uDEFA-\uDEFF\uDF04\uDF0D\uDF0E\uDF11\uDF12\uDF29\uDF31\uDF34\uDF3A\uDF45\uDF46\uDF49\uDF4A\uDF4E\uDF4F\uDF51-\uDF56\uDF58-\uDF5C\uDF64\uDF65\uDF6D-\uDF6F\uDF75-\uDFFF]|\uD805[\uDC5C\uDC62-\uDC7F\uDCC8-\uDCCF\uDCDA-\uDD7F\uDDB6\uDDB7\uDDDE-\uDDFF\uDE45-\uDE4F\uDE5A-\uDE5F\uDE6D-\uDE7F\uDEB9-\uDEBF\uDECA-\uDEFF\uDF1B\uDF1C\uDF2C-\uDF2F\uDF40-\uDFFF]|\uD806[\uDC3C-\uDC9F\uDCF3-\uDCFE\uDD07\uDD08\uDD0A\uDD0B\uDD14\uDD17\uDD36\uDD39\uDD3A\uDD47-\uDD4F\uDD5A-\uDD9F\uDDA8\uDDA9\uDDD8\uDDD9\uDDE5-\uDDFF\uDE48-\uDE4F\uDEA3-\uDEBF\uDEF9-\uDFFF]|\uD807[\uDC09\uDC37\uDC46-\uDC4F\uDC6D-\uDC6F\uDC90\uDC91\uDCA8\uDCB7-\uDCFF\uDD07\uDD0A\uDD37-\uDD39\uDD3B\uDD3E\uDD48-\uDD4F\uDD5A-\uDD5F\uDD66\uDD69\uDD8F\uDD92\uDD99-\uDD9F\uDDAA-\uDEDF\uDEF9-\uDFAF\uDFB1-\uDFBF\uDFF2-\uDFFE]|\uD808[\uDF9A-\uDFFF]|\uD809[\uDC6F\uDC75-\uDC7F\uDD44-\uDFFF]|[\uD80A\uD80B\uD80E-\uD810\uD812-\uD819\uD824-\uD82B\uD82D\uD82E\uD830-\uD833\uD837\uD839\uD83F\uD87B-\uD87D\uD87F\uD885-\uDB3F\uDB41-\uDBFF][\uDC00-\uDFFF]|\uD80D[\uDC2F-\uDFFF]|\uD811[\uDE47-\uDFFF]|\uD81A[\uDE39-\uDE3F\uDE5F\uDE6A-\uDE6D\uDE70-\uDECF\uDEEE\uDEEF\uDEF6-\uDEFF\uDF46-\uDF4F\uDF5A\uDF62\uDF78-\uDF7C\uDF90-\uDFFF]|\uD81B[\uDC00-\uDE3F\uDE9B-\uDEFF\uDF4B-\uDF4E\uDF88-\uDF8E\uDFA0-\uDFDF\uDFE5-\uDFEF\uDFF2-\uDFFF]|\uD821[\uDFF8-\uDFFF]|\uD823[\uDCD6-\uDCFF\uDD09-\uDFFF]|\uD82C[\uDD1F-\uDD4F\uDD53-\uDD63\uDD68-\uDD6F\uDEFC-\uDFFF]|\uD82F[\uDC6B-\uDC6F\uDC7D-\uDC7F\uDC89-\uDC8F\uDC9A\uDC9B\uDCA0-\uDFFF]|\uD834[\uDCF6-\uDCFF\uDD27\uDD28\uDD73-\uDD7A\uDDE9-\uDDFF\uDE46-\uDEDF\uDEF4-\uDEFF\uDF57-\uDF5F\uDF79-\uDFFF]|\uD835[\uDC55\uDC9D\uDCA0\uDCA1\uDCA3\uDCA4\uDCA7\uDCA8\uDCAD\uDCBA\uDCBC\uDCC4\uDD06\uDD0B\uDD0C\uDD15\uDD1D\uDD3A\uDD3F\uDD45\uDD47-\uDD49\uDD51\uDEA6\uDEA7\uDFCC\uDFCD]|\uD836[\uDE8C-\uDE9A\uDEA0\uDEB0-\uDFFF]|\uD838[\uDC07\uDC19\uDC1A\uDC22\uDC25\uDC2B-\uDCFF\uDD2D-\uDD2F\uDD3E\uDD3F\uDD4A-\uDD4D\uDD50-\uDEBF\uDEFA-\uDEFE\uDF00-\uDFFF]|\uD83A[\uDCC5\uDCC6\uDCD7-\uDCFF\uDD4C-\uDD4F\uDD5A-\uDD5D\uDD60-\uDFFF]|\uD83B[\uDC00-\uDC70\uDCB5-\uDD00\uDD3E-\uDDFF\uDE04\uDE20\uDE23\uDE25\uDE26\uDE28\uDE33\uDE38\uDE3A\uDE3C-\uDE41\uDE43-\uDE46\uDE48\uDE4A\uDE4C\uDE50\uDE53\uDE55\uDE56\uDE58\uDE5A\uDE5C\uDE5E\uDE60\uDE63\uDE65\uDE66\uDE6B\uDE73\uDE78\uDE7D\uDE7F\uDE8A\uDE9C-\uDEA0\uDEA4\uDEAA\uDEBC-\uDEEF\uDEF2-\uDFFF]|\uD83C[\uDC2C-\uDC2F\uDC94-\uDC9F\uDCAF\uDCB0\uDCC0\uDCD0\uDCF6-\uDCFF\uDDAE-\uDDE5\uDE03-\uDE0F\uDE3C-\uDE3F\uDE49-\uDE4F\uDE52-\uDE5F\uDE66-\uDEFF]|\uD83D[\uDED8-\uDEDF\uDEED-\uDEEF\uDEFD-\uDEFF\uDF74-\uDF7F\uDFD9-\uDFDF\uDFEC-\uDFFF]|\uD83E[\uDC0C-\uDC0F\uDC48-\uDC4F\uDC5A-\uDC5F\uDC88-\uDC8F\uDCAE\uDCAF\uDCB2-\uDCFF\uDD79\uDDCC\uDE54-\uDE5F\uDE6E\uDE6F\uDE75-\uDE77\uDE7B-\uDE7F\uDE87-\uDE8F\uDEA9-\uDEAF\uDEB7-\uDEBF\uDEC3-\uDECF\uDED7-\uDEFF\uDF93\uDFCB-\uDFEF\uDFFA-\uDFFF]|\uD869[\uDEDE-\uDEFF]|\uD86D[\uDF35-\uDF3F]|\uD86E[\uDC1E\uDC1F]|\uD873[\uDEA2-\uDEAF]|\uD87A[\uDFE1-\uDFFF]|\uD87E[\uDE1E-\uDFFF]|\uD884[\uDF4B-\uDFFF]|\uDB40[\uDC00-\uDCFF\uDDF0-\uDFFF]' + }, + { + 'name': 'Cc', + 'alias': 'Control', + 'bmp': '\0-\x1F\x7F-\x9F' + }, + { + 'name': 'Cf', + 'alias': 'Format', + 'bmp': '\xAD\u0600-\u0605\u061C\u06DD\u070F\u08E2\u180E\u200B-\u200F\u202A-\u202E\u2060-\u2064\u2066-\u206F\uFEFF\uFFF9-\uFFFB', + 'astral': '\uD804[\uDCBD\uDCCD]|\uD80D[\uDC30-\uDC38]|\uD82F[\uDCA0-\uDCA3]|\uD834[\uDD73-\uDD7A]|\uDB40[\uDC01\uDC20-\uDC7F]' + }, + { + 'name': 'Cn', + 'alias': 'Unassigned', + 'bmp': '\u0378\u0379\u0380-\u0383\u038B\u038D\u03A2\u0530\u0557\u0558\u058B\u058C\u0590\u05C8-\u05CF\u05EB-\u05EE\u05F5-\u05FF\u061D\u070E\u074B\u074C\u07B2-\u07BF\u07FB\u07FC\u082E\u082F\u083F\u085C\u085D\u085F\u086B-\u089F\u08B5\u08C8-\u08D2\u0984\u098D\u098E\u0991\u0992\u09A9\u09B1\u09B3-\u09B5\u09BA\u09BB\u09C5\u09C6\u09C9\u09CA\u09CF-\u09D6\u09D8-\u09DB\u09DE\u09E4\u09E5\u09FF\u0A00\u0A04\u0A0B-\u0A0E\u0A11\u0A12\u0A29\u0A31\u0A34\u0A37\u0A3A\u0A3B\u0A3D\u0A43-\u0A46\u0A49\u0A4A\u0A4E-\u0A50\u0A52-\u0A58\u0A5D\u0A5F-\u0A65\u0A77-\u0A80\u0A84\u0A8E\u0A92\u0AA9\u0AB1\u0AB4\u0ABA\u0ABB\u0AC6\u0ACA\u0ACE\u0ACF\u0AD1-\u0ADF\u0AE4\u0AE5\u0AF2-\u0AF8\u0B00\u0B04\u0B0D\u0B0E\u0B11\u0B12\u0B29\u0B31\u0B34\u0B3A\u0B3B\u0B45\u0B46\u0B49\u0B4A\u0B4E-\u0B54\u0B58-\u0B5B\u0B5E\u0B64\u0B65\u0B78-\u0B81\u0B84\u0B8B-\u0B8D\u0B91\u0B96-\u0B98\u0B9B\u0B9D\u0BA0-\u0BA2\u0BA5-\u0BA7\u0BAB-\u0BAD\u0BBA-\u0BBD\u0BC3-\u0BC5\u0BC9\u0BCE\u0BCF\u0BD1-\u0BD6\u0BD8-\u0BE5\u0BFB-\u0BFF\u0C0D\u0C11\u0C29\u0C3A-\u0C3C\u0C45\u0C49\u0C4E-\u0C54\u0C57\u0C5B-\u0C5F\u0C64\u0C65\u0C70-\u0C76\u0C8D\u0C91\u0CA9\u0CB4\u0CBA\u0CBB\u0CC5\u0CC9\u0CCE-\u0CD4\u0CD7-\u0CDD\u0CDF\u0CE4\u0CE5\u0CF0\u0CF3-\u0CFF\u0D0D\u0D11\u0D45\u0D49\u0D50-\u0D53\u0D64\u0D65\u0D80\u0D84\u0D97-\u0D99\u0DB2\u0DBC\u0DBE\u0DBF\u0DC7-\u0DC9\u0DCB-\u0DCE\u0DD5\u0DD7\u0DE0-\u0DE5\u0DF0\u0DF1\u0DF5-\u0E00\u0E3B-\u0E3E\u0E5C-\u0E80\u0E83\u0E85\u0E8B\u0EA4\u0EA6\u0EBE\u0EBF\u0EC5\u0EC7\u0ECE\u0ECF\u0EDA\u0EDB\u0EE0-\u0EFF\u0F48\u0F6D-\u0F70\u0F98\u0FBD\u0FCD\u0FDB-\u0FFF\u10C6\u10C8-\u10CC\u10CE\u10CF\u1249\u124E\u124F\u1257\u1259\u125E\u125F\u1289\u128E\u128F\u12B1\u12B6\u12B7\u12BF\u12C1\u12C6\u12C7\u12D7\u1311\u1316\u1317\u135B\u135C\u137D-\u137F\u139A-\u139F\u13F6\u13F7\u13FE\u13FF\u169D-\u169F\u16F9-\u16FF\u170D\u1715-\u171F\u1737-\u173F\u1754-\u175F\u176D\u1771\u1774-\u177F\u17DE\u17DF\u17EA-\u17EF\u17FA-\u17FF\u180F\u181A-\u181F\u1879-\u187F\u18AB-\u18AF\u18F6-\u18FF\u191F\u192C-\u192F\u193C-\u193F\u1941-\u1943\u196E\u196F\u1975-\u197F\u19AC-\u19AF\u19CA-\u19CF\u19DB-\u19DD\u1A1C\u1A1D\u1A5F\u1A7D\u1A7E\u1A8A-\u1A8F\u1A9A-\u1A9F\u1AAE\u1AAF\u1AC1-\u1AFF\u1B4C-\u1B4F\u1B7D-\u1B7F\u1BF4-\u1BFB\u1C38-\u1C3A\u1C4A-\u1C4C\u1C89-\u1C8F\u1CBB\u1CBC\u1CC8-\u1CCF\u1CFB-\u1CFF\u1DFA\u1F16\u1F17\u1F1E\u1F1F\u1F46\u1F47\u1F4E\u1F4F\u1F58\u1F5A\u1F5C\u1F5E\u1F7E\u1F7F\u1FB5\u1FC5\u1FD4\u1FD5\u1FDC\u1FF0\u1FF1\u1FF5\u1FFF\u2065\u2072\u2073\u208F\u209D-\u209F\u20C0-\u20CF\u20F1-\u20FF\u218C-\u218F\u2427-\u243F\u244B-\u245F\u2B74\u2B75\u2B96\u2C2F\u2C5F\u2CF4-\u2CF8\u2D26\u2D28-\u2D2C\u2D2E\u2D2F\u2D68-\u2D6E\u2D71-\u2D7E\u2D97-\u2D9F\u2DA7\u2DAF\u2DB7\u2DBF\u2DC7\u2DCF\u2DD7\u2DDF\u2E53-\u2E7F\u2E9A\u2EF4-\u2EFF\u2FD6-\u2FEF\u2FFC-\u2FFF\u3040\u3097\u3098\u3100-\u3104\u3130\u318F\u31E4-\u31EF\u321F\u9FFD-\u9FFF\uA48D-\uA48F\uA4C7-\uA4CF\uA62C-\uA63F\uA6F8-\uA6FF\uA7C0\uA7C1\uA7CB-\uA7F4\uA82D-\uA82F\uA83A-\uA83F\uA878-\uA87F\uA8C6-\uA8CD\uA8DA-\uA8DF\uA954-\uA95E\uA97D-\uA97F\uA9CE\uA9DA-\uA9DD\uA9FF\uAA37-\uAA3F\uAA4E\uAA4F\uAA5A\uAA5B\uAAC3-\uAADA\uAAF7-\uAB00\uAB07\uAB08\uAB0F\uAB10\uAB17-\uAB1F\uAB27\uAB2F\uAB6C-\uAB6F\uABEE\uABEF\uABFA-\uABFF\uD7A4-\uD7AF\uD7C7-\uD7CA\uD7FC-\uD7FF\uFA6E\uFA6F\uFADA-\uFAFF\uFB07-\uFB12\uFB18-\uFB1C\uFB37\uFB3D\uFB3F\uFB42\uFB45\uFBC2-\uFBD2\uFD40-\uFD4F\uFD90\uFD91\uFDC8-\uFDEF\uFDFE\uFDFF\uFE1A-\uFE1F\uFE53\uFE67\uFE6C-\uFE6F\uFE75\uFEFD\uFEFE\uFF00\uFFBF-\uFFC1\uFFC8\uFFC9\uFFD0\uFFD1\uFFD8\uFFD9\uFFDD-\uFFDF\uFFE7\uFFEF-\uFFF8\uFFFE\uFFFF', + 'astral': '\uD800[\uDC0C\uDC27\uDC3B\uDC3E\uDC4E\uDC4F\uDC5E-\uDC7F\uDCFB-\uDCFF\uDD03-\uDD06\uDD34-\uDD36\uDD8F\uDD9D-\uDD9F\uDDA1-\uDDCF\uDDFE-\uDE7F\uDE9D-\uDE9F\uDED1-\uDEDF\uDEFC-\uDEFF\uDF24-\uDF2C\uDF4B-\uDF4F\uDF7B-\uDF7F\uDF9E\uDFC4-\uDFC7\uDFD6-\uDFFF]|\uD801[\uDC9E\uDC9F\uDCAA-\uDCAF\uDCD4-\uDCD7\uDCFC-\uDCFF\uDD28-\uDD2F\uDD64-\uDD6E\uDD70-\uDDFF\uDF37-\uDF3F\uDF56-\uDF5F\uDF68-\uDFFF]|\uD802[\uDC06\uDC07\uDC09\uDC36\uDC39-\uDC3B\uDC3D\uDC3E\uDC56\uDC9F-\uDCA6\uDCB0-\uDCDF\uDCF3\uDCF6-\uDCFA\uDD1C-\uDD1E\uDD3A-\uDD3E\uDD40-\uDD7F\uDDB8-\uDDBB\uDDD0\uDDD1\uDE04\uDE07-\uDE0B\uDE14\uDE18\uDE36\uDE37\uDE3B-\uDE3E\uDE49-\uDE4F\uDE59-\uDE5F\uDEA0-\uDEBF\uDEE7-\uDEEA\uDEF7-\uDEFF\uDF36-\uDF38\uDF56\uDF57\uDF73-\uDF77\uDF92-\uDF98\uDF9D-\uDFA8\uDFB0-\uDFFF]|\uD803[\uDC49-\uDC7F\uDCB3-\uDCBF\uDCF3-\uDCF9\uDD28-\uDD2F\uDD3A-\uDE5F\uDE7F\uDEAA\uDEAE\uDEAF\uDEB2-\uDEFF\uDF28-\uDF2F\uDF5A-\uDFAF\uDFCC-\uDFDF\uDFF7-\uDFFF]|\uD804[\uDC4E-\uDC51\uDC70-\uDC7E\uDCC2-\uDCCC\uDCCE\uDCCF\uDCE9-\uDCEF\uDCFA-\uDCFF\uDD35\uDD48-\uDD4F\uDD77-\uDD7F\uDDE0\uDDF5-\uDDFF\uDE12\uDE3F-\uDE7F\uDE87\uDE89\uDE8E\uDE9E\uDEAA-\uDEAF\uDEEB-\uDEEF\uDEFA-\uDEFF\uDF04\uDF0D\uDF0E\uDF11\uDF12\uDF29\uDF31\uDF34\uDF3A\uDF45\uDF46\uDF49\uDF4A\uDF4E\uDF4F\uDF51-\uDF56\uDF58-\uDF5C\uDF64\uDF65\uDF6D-\uDF6F\uDF75-\uDFFF]|\uD805[\uDC5C\uDC62-\uDC7F\uDCC8-\uDCCF\uDCDA-\uDD7F\uDDB6\uDDB7\uDDDE-\uDDFF\uDE45-\uDE4F\uDE5A-\uDE5F\uDE6D-\uDE7F\uDEB9-\uDEBF\uDECA-\uDEFF\uDF1B\uDF1C\uDF2C-\uDF2F\uDF40-\uDFFF]|\uD806[\uDC3C-\uDC9F\uDCF3-\uDCFE\uDD07\uDD08\uDD0A\uDD0B\uDD14\uDD17\uDD36\uDD39\uDD3A\uDD47-\uDD4F\uDD5A-\uDD9F\uDDA8\uDDA9\uDDD8\uDDD9\uDDE5-\uDDFF\uDE48-\uDE4F\uDEA3-\uDEBF\uDEF9-\uDFFF]|\uD807[\uDC09\uDC37\uDC46-\uDC4F\uDC6D-\uDC6F\uDC90\uDC91\uDCA8\uDCB7-\uDCFF\uDD07\uDD0A\uDD37-\uDD39\uDD3B\uDD3E\uDD48-\uDD4F\uDD5A-\uDD5F\uDD66\uDD69\uDD8F\uDD92\uDD99-\uDD9F\uDDAA-\uDEDF\uDEF9-\uDFAF\uDFB1-\uDFBF\uDFF2-\uDFFE]|\uD808[\uDF9A-\uDFFF]|\uD809[\uDC6F\uDC75-\uDC7F\uDD44-\uDFFF]|[\uD80A\uD80B\uD80E-\uD810\uD812-\uD819\uD824-\uD82B\uD82D\uD82E\uD830-\uD833\uD837\uD839\uD83F\uD87B-\uD87D\uD87F\uD885-\uDB3F\uDB41-\uDB7F][\uDC00-\uDFFF]|\uD80D[\uDC2F\uDC39-\uDFFF]|\uD811[\uDE47-\uDFFF]|\uD81A[\uDE39-\uDE3F\uDE5F\uDE6A-\uDE6D\uDE70-\uDECF\uDEEE\uDEEF\uDEF6-\uDEFF\uDF46-\uDF4F\uDF5A\uDF62\uDF78-\uDF7C\uDF90-\uDFFF]|\uD81B[\uDC00-\uDE3F\uDE9B-\uDEFF\uDF4B-\uDF4E\uDF88-\uDF8E\uDFA0-\uDFDF\uDFE5-\uDFEF\uDFF2-\uDFFF]|\uD821[\uDFF8-\uDFFF]|\uD823[\uDCD6-\uDCFF\uDD09-\uDFFF]|\uD82C[\uDD1F-\uDD4F\uDD53-\uDD63\uDD68-\uDD6F\uDEFC-\uDFFF]|\uD82F[\uDC6B-\uDC6F\uDC7D-\uDC7F\uDC89-\uDC8F\uDC9A\uDC9B\uDCA4-\uDFFF]|\uD834[\uDCF6-\uDCFF\uDD27\uDD28\uDDE9-\uDDFF\uDE46-\uDEDF\uDEF4-\uDEFF\uDF57-\uDF5F\uDF79-\uDFFF]|\uD835[\uDC55\uDC9D\uDCA0\uDCA1\uDCA3\uDCA4\uDCA7\uDCA8\uDCAD\uDCBA\uDCBC\uDCC4\uDD06\uDD0B\uDD0C\uDD15\uDD1D\uDD3A\uDD3F\uDD45\uDD47-\uDD49\uDD51\uDEA6\uDEA7\uDFCC\uDFCD]|\uD836[\uDE8C-\uDE9A\uDEA0\uDEB0-\uDFFF]|\uD838[\uDC07\uDC19\uDC1A\uDC22\uDC25\uDC2B-\uDCFF\uDD2D-\uDD2F\uDD3E\uDD3F\uDD4A-\uDD4D\uDD50-\uDEBF\uDEFA-\uDEFE\uDF00-\uDFFF]|\uD83A[\uDCC5\uDCC6\uDCD7-\uDCFF\uDD4C-\uDD4F\uDD5A-\uDD5D\uDD60-\uDFFF]|\uD83B[\uDC00-\uDC70\uDCB5-\uDD00\uDD3E-\uDDFF\uDE04\uDE20\uDE23\uDE25\uDE26\uDE28\uDE33\uDE38\uDE3A\uDE3C-\uDE41\uDE43-\uDE46\uDE48\uDE4A\uDE4C\uDE50\uDE53\uDE55\uDE56\uDE58\uDE5A\uDE5C\uDE5E\uDE60\uDE63\uDE65\uDE66\uDE6B\uDE73\uDE78\uDE7D\uDE7F\uDE8A\uDE9C-\uDEA0\uDEA4\uDEAA\uDEBC-\uDEEF\uDEF2-\uDFFF]|\uD83C[\uDC2C-\uDC2F\uDC94-\uDC9F\uDCAF\uDCB0\uDCC0\uDCD0\uDCF6-\uDCFF\uDDAE-\uDDE5\uDE03-\uDE0F\uDE3C-\uDE3F\uDE49-\uDE4F\uDE52-\uDE5F\uDE66-\uDEFF]|\uD83D[\uDED8-\uDEDF\uDEED-\uDEEF\uDEFD-\uDEFF\uDF74-\uDF7F\uDFD9-\uDFDF\uDFEC-\uDFFF]|\uD83E[\uDC0C-\uDC0F\uDC48-\uDC4F\uDC5A-\uDC5F\uDC88-\uDC8F\uDCAE\uDCAF\uDCB2-\uDCFF\uDD79\uDDCC\uDE54-\uDE5F\uDE6E\uDE6F\uDE75-\uDE77\uDE7B-\uDE7F\uDE87-\uDE8F\uDEA9-\uDEAF\uDEB7-\uDEBF\uDEC3-\uDECF\uDED7-\uDEFF\uDF93\uDFCB-\uDFEF\uDFFA-\uDFFF]|\uD869[\uDEDE-\uDEFF]|\uD86D[\uDF35-\uDF3F]|\uD86E[\uDC1E\uDC1F]|\uD873[\uDEA2-\uDEAF]|\uD87A[\uDFE1-\uDFFF]|\uD87E[\uDE1E-\uDFFF]|\uD884[\uDF4B-\uDFFF]|\uDB40[\uDC00\uDC02-\uDC1F\uDC80-\uDCFF\uDDF0-\uDFFF]|[\uDBBF\uDBFF][\uDFFE\uDFFF]' + }, + { + 'name': 'Co', + 'alias': 'Private_Use', + 'bmp': '\uE000-\uF8FF', + 'astral': '[\uDB80-\uDBBE\uDBC0-\uDBFE][\uDC00-\uDFFF]|[\uDBBF\uDBFF][\uDC00-\uDFFD]' + }, + { + 'name': 'Cs', + 'alias': 'Surrogate', + 'bmp': '\uD800-\uDFFF' + }, + { + 'name': 'L', + 'alias': 'Letter', + 'bmp': 'A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u08A0-\u08B4\u08B6-\u08C7\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\u9FFC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7BF\uA7C2-\uA7CA\uA7F5-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC', + 'astral': '\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD23\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDEB8\uDF00-\uDF1A]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCDF\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE7F\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82C[\uDC00-\uDD1E\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD838[\uDD00-\uDD2C\uDD37-\uDD3D\uDD4E\uDEC0-\uDEEB]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43\uDD4B]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDEDD\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A]' + }, + { + 'name': 'LC', + 'alias': 'Cased_Letter', + 'bmp': 'A-Za-z\xB5\xC0-\xD6\xD8-\xF6\xF8-\u01BA\u01BC-\u01BF\u01C4-\u0293\u0295-\u02AF\u0370-\u0373\u0376\u0377\u037B-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0560-\u0588\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FD-\u10FF\u13A0-\u13F5\u13F8-\u13FD\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1D00-\u1D2B\u1D6B-\u1D77\u1D79-\u1D9A\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2134\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2C7B\u2C7E-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\uA640-\uA66D\uA680-\uA69B\uA722-\uA76F\uA771-\uA787\uA78B-\uA78E\uA790-\uA7BF\uA7C2-\uA7CA\uA7F5\uA7F6\uA7FA\uAB30-\uAB5A\uAB60-\uAB68\uAB70-\uABBF\uFB00-\uFB06\uFB13-\uFB17\uFF21-\uFF3A\uFF41-\uFF5A', + 'astral': '\uD801[\uDC00-\uDC4F\uDCB0-\uDCD3\uDCD8-\uDCFB]|\uD803[\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD806[\uDCA0-\uDCDF]|\uD81B[\uDE40-\uDE7F]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDD00-\uDD43]' + }, + { + 'name': 'Ll', + 'alias': 'Lowercase_Letter', + 'bmp': 'a-z\xB5\xDF-\xF6\xF8-\xFF\u0101\u0103\u0105\u0107\u0109\u010B\u010D\u010F\u0111\u0113\u0115\u0117\u0119\u011B\u011D\u011F\u0121\u0123\u0125\u0127\u0129\u012B\u012D\u012F\u0131\u0133\u0135\u0137\u0138\u013A\u013C\u013E\u0140\u0142\u0144\u0146\u0148\u0149\u014B\u014D\u014F\u0151\u0153\u0155\u0157\u0159\u015B\u015D\u015F\u0161\u0163\u0165\u0167\u0169\u016B\u016D\u016F\u0171\u0173\u0175\u0177\u017A\u017C\u017E-\u0180\u0183\u0185\u0188\u018C\u018D\u0192\u0195\u0199-\u019B\u019E\u01A1\u01A3\u01A5\u01A8\u01AA\u01AB\u01AD\u01B0\u01B4\u01B6\u01B9\u01BA\u01BD-\u01BF\u01C6\u01C9\u01CC\u01CE\u01D0\u01D2\u01D4\u01D6\u01D8\u01DA\u01DC\u01DD\u01DF\u01E1\u01E3\u01E5\u01E7\u01E9\u01EB\u01ED\u01EF\u01F0\u01F3\u01F5\u01F9\u01FB\u01FD\u01FF\u0201\u0203\u0205\u0207\u0209\u020B\u020D\u020F\u0211\u0213\u0215\u0217\u0219\u021B\u021D\u021F\u0221\u0223\u0225\u0227\u0229\u022B\u022D\u022F\u0231\u0233-\u0239\u023C\u023F\u0240\u0242\u0247\u0249\u024B\u024D\u024F-\u0293\u0295-\u02AF\u0371\u0373\u0377\u037B-\u037D\u0390\u03AC-\u03CE\u03D0\u03D1\u03D5-\u03D7\u03D9\u03DB\u03DD\u03DF\u03E1\u03E3\u03E5\u03E7\u03E9\u03EB\u03ED\u03EF-\u03F3\u03F5\u03F8\u03FB\u03FC\u0430-\u045F\u0461\u0463\u0465\u0467\u0469\u046B\u046D\u046F\u0471\u0473\u0475\u0477\u0479\u047B\u047D\u047F\u0481\u048B\u048D\u048F\u0491\u0493\u0495\u0497\u0499\u049B\u049D\u049F\u04A1\u04A3\u04A5\u04A7\u04A9\u04AB\u04AD\u04AF\u04B1\u04B3\u04B5\u04B7\u04B9\u04BB\u04BD\u04BF\u04C2\u04C4\u04C6\u04C8\u04CA\u04CC\u04CE\u04CF\u04D1\u04D3\u04D5\u04D7\u04D9\u04DB\u04DD\u04DF\u04E1\u04E3\u04E5\u04E7\u04E9\u04EB\u04ED\u04EF\u04F1\u04F3\u04F5\u04F7\u04F9\u04FB\u04FD\u04FF\u0501\u0503\u0505\u0507\u0509\u050B\u050D\u050F\u0511\u0513\u0515\u0517\u0519\u051B\u051D\u051F\u0521\u0523\u0525\u0527\u0529\u052B\u052D\u052F\u0560-\u0588\u10D0-\u10FA\u10FD-\u10FF\u13F8-\u13FD\u1C80-\u1C88\u1D00-\u1D2B\u1D6B-\u1D77\u1D79-\u1D9A\u1E01\u1E03\u1E05\u1E07\u1E09\u1E0B\u1E0D\u1E0F\u1E11\u1E13\u1E15\u1E17\u1E19\u1E1B\u1E1D\u1E1F\u1E21\u1E23\u1E25\u1E27\u1E29\u1E2B\u1E2D\u1E2F\u1E31\u1E33\u1E35\u1E37\u1E39\u1E3B\u1E3D\u1E3F\u1E41\u1E43\u1E45\u1E47\u1E49\u1E4B\u1E4D\u1E4F\u1E51\u1E53\u1E55\u1E57\u1E59\u1E5B\u1E5D\u1E5F\u1E61\u1E63\u1E65\u1E67\u1E69\u1E6B\u1E6D\u1E6F\u1E71\u1E73\u1E75\u1E77\u1E79\u1E7B\u1E7D\u1E7F\u1E81\u1E83\u1E85\u1E87\u1E89\u1E8B\u1E8D\u1E8F\u1E91\u1E93\u1E95-\u1E9D\u1E9F\u1EA1\u1EA3\u1EA5\u1EA7\u1EA9\u1EAB\u1EAD\u1EAF\u1EB1\u1EB3\u1EB5\u1EB7\u1EB9\u1EBB\u1EBD\u1EBF\u1EC1\u1EC3\u1EC5\u1EC7\u1EC9\u1ECB\u1ECD\u1ECF\u1ED1\u1ED3\u1ED5\u1ED7\u1ED9\u1EDB\u1EDD\u1EDF\u1EE1\u1EE3\u1EE5\u1EE7\u1EE9\u1EEB\u1EED\u1EEF\u1EF1\u1EF3\u1EF5\u1EF7\u1EF9\u1EFB\u1EFD\u1EFF-\u1F07\u1F10-\u1F15\u1F20-\u1F27\u1F30-\u1F37\u1F40-\u1F45\u1F50-\u1F57\u1F60-\u1F67\u1F70-\u1F7D\u1F80-\u1F87\u1F90-\u1F97\u1FA0-\u1FA7\u1FB0-\u1FB4\u1FB6\u1FB7\u1FBE\u1FC2-\u1FC4\u1FC6\u1FC7\u1FD0-\u1FD3\u1FD6\u1FD7\u1FE0-\u1FE7\u1FF2-\u1FF4\u1FF6\u1FF7\u210A\u210E\u210F\u2113\u212F\u2134\u2139\u213C\u213D\u2146-\u2149\u214E\u2184\u2C30-\u2C5E\u2C61\u2C65\u2C66\u2C68\u2C6A\u2C6C\u2C71\u2C73\u2C74\u2C76-\u2C7B\u2C81\u2C83\u2C85\u2C87\u2C89\u2C8B\u2C8D\u2C8F\u2C91\u2C93\u2C95\u2C97\u2C99\u2C9B\u2C9D\u2C9F\u2CA1\u2CA3\u2CA5\u2CA7\u2CA9\u2CAB\u2CAD\u2CAF\u2CB1\u2CB3\u2CB5\u2CB7\u2CB9\u2CBB\u2CBD\u2CBF\u2CC1\u2CC3\u2CC5\u2CC7\u2CC9\u2CCB\u2CCD\u2CCF\u2CD1\u2CD3\u2CD5\u2CD7\u2CD9\u2CDB\u2CDD\u2CDF\u2CE1\u2CE3\u2CE4\u2CEC\u2CEE\u2CF3\u2D00-\u2D25\u2D27\u2D2D\uA641\uA643\uA645\uA647\uA649\uA64B\uA64D\uA64F\uA651\uA653\uA655\uA657\uA659\uA65B\uA65D\uA65F\uA661\uA663\uA665\uA667\uA669\uA66B\uA66D\uA681\uA683\uA685\uA687\uA689\uA68B\uA68D\uA68F\uA691\uA693\uA695\uA697\uA699\uA69B\uA723\uA725\uA727\uA729\uA72B\uA72D\uA72F-\uA731\uA733\uA735\uA737\uA739\uA73B\uA73D\uA73F\uA741\uA743\uA745\uA747\uA749\uA74B\uA74D\uA74F\uA751\uA753\uA755\uA757\uA759\uA75B\uA75D\uA75F\uA761\uA763\uA765\uA767\uA769\uA76B\uA76D\uA76F\uA771-\uA778\uA77A\uA77C\uA77F\uA781\uA783\uA785\uA787\uA78C\uA78E\uA791\uA793-\uA795\uA797\uA799\uA79B\uA79D\uA79F\uA7A1\uA7A3\uA7A5\uA7A7\uA7A9\uA7AF\uA7B5\uA7B7\uA7B9\uA7BB\uA7BD\uA7BF\uA7C3\uA7C8\uA7CA\uA7F6\uA7FA\uAB30-\uAB5A\uAB60-\uAB68\uAB70-\uABBF\uFB00-\uFB06\uFB13-\uFB17\uFF41-\uFF5A', + 'astral': '\uD801[\uDC28-\uDC4F\uDCD8-\uDCFB]|\uD803[\uDCC0-\uDCF2]|\uD806[\uDCC0-\uDCDF]|\uD81B[\uDE60-\uDE7F]|\uD835[\uDC1A-\uDC33\uDC4E-\uDC54\uDC56-\uDC67\uDC82-\uDC9B\uDCB6-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDCCF\uDCEA-\uDD03\uDD1E-\uDD37\uDD52-\uDD6B\uDD86-\uDD9F\uDDBA-\uDDD3\uDDEE-\uDE07\uDE22-\uDE3B\uDE56-\uDE6F\uDE8A-\uDEA5\uDEC2-\uDEDA\uDEDC-\uDEE1\uDEFC-\uDF14\uDF16-\uDF1B\uDF36-\uDF4E\uDF50-\uDF55\uDF70-\uDF88\uDF8A-\uDF8F\uDFAA-\uDFC2\uDFC4-\uDFC9\uDFCB]|\uD83A[\uDD22-\uDD43]' + }, + { + 'name': 'Lm', + 'alias': 'Modifier_Letter', + 'bmp': '\u02B0-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0374\u037A\u0559\u0640\u06E5\u06E6\u07F4\u07F5\u07FA\u081A\u0824\u0828\u0971\u0E46\u0EC6\u10FC\u17D7\u1843\u1AA7\u1C78-\u1C7D\u1D2C-\u1D6A\u1D78\u1D9B-\u1DBF\u2071\u207F\u2090-\u209C\u2C7C\u2C7D\u2D6F\u2E2F\u3005\u3031-\u3035\u303B\u309D\u309E\u30FC-\u30FE\uA015\uA4F8-\uA4FD\uA60C\uA67F\uA69C\uA69D\uA717-\uA71F\uA770\uA788\uA7F8\uA7F9\uA9CF\uA9E6\uAA70\uAADD\uAAF3\uAAF4\uAB5C-\uAB5F\uAB69\uFF70\uFF9E\uFF9F', + 'astral': '\uD81A[\uDF40-\uDF43]|\uD81B[\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD838[\uDD37-\uDD3D]|\uD83A\uDD4B' + }, + { + 'name': 'Lo', + 'alias': 'Other_Letter', + 'bmp': '\xAA\xBA\u01BB\u01C0-\u01C3\u0294\u05D0-\u05EA\u05EF-\u05F2\u0620-\u063F\u0641-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u0800-\u0815\u0840-\u0858\u0860-\u086A\u08A0-\u08B4\u08B6-\u08C7\u0904-\u0939\u093D\u0950\u0958-\u0961\u0972-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E45\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u1100-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17DC\u1820-\u1842\u1844-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C77\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u2135-\u2138\u2D30-\u2D67\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3006\u303C\u3041-\u3096\u309F\u30A1-\u30FA\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\u9FFC\uA000-\uA014\uA016-\uA48C\uA4D0-\uA4F7\uA500-\uA60B\uA610-\uA61F\uA62A\uA62B\uA66E\uA6A0-\uA6E5\uA78F\uA7F7\uA7FB-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9E0-\uA9E4\uA9E7-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA6F\uAA71-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB\uAADC\uAAE0-\uAAEA\uAAF2\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF66-\uFF6F\uFF71-\uFF9D\uFFA0-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC', + 'astral': '\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC50-\uDC9D\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDD00-\uDD23\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDEB8\uDF00-\uDF1A]|\uD806[\uDC00-\uDC2B\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF4A\uDF50]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82C[\uDC00-\uDD1E\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD838[\uDD00-\uDD2C\uDD4E\uDEC0-\uDEEB]|\uD83A[\uDC00-\uDCC4]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDEDD\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A]' + }, + { + 'name': 'Lt', + 'alias': 'Titlecase_Letter', + 'bmp': '\u01C5\u01C8\u01CB\u01F2\u1F88-\u1F8F\u1F98-\u1F9F\u1FA8-\u1FAF\u1FBC\u1FCC\u1FFC' + }, + { + 'name': 'Lu', + 'alias': 'Uppercase_Letter', + 'bmp': 'A-Z\xC0-\xD6\xD8-\xDE\u0100\u0102\u0104\u0106\u0108\u010A\u010C\u010E\u0110\u0112\u0114\u0116\u0118\u011A\u011C\u011E\u0120\u0122\u0124\u0126\u0128\u012A\u012C\u012E\u0130\u0132\u0134\u0136\u0139\u013B\u013D\u013F\u0141\u0143\u0145\u0147\u014A\u014C\u014E\u0150\u0152\u0154\u0156\u0158\u015A\u015C\u015E\u0160\u0162\u0164\u0166\u0168\u016A\u016C\u016E\u0170\u0172\u0174\u0176\u0178\u0179\u017B\u017D\u0181\u0182\u0184\u0186\u0187\u0189-\u018B\u018E-\u0191\u0193\u0194\u0196-\u0198\u019C\u019D\u019F\u01A0\u01A2\u01A4\u01A6\u01A7\u01A9\u01AC\u01AE\u01AF\u01B1-\u01B3\u01B5\u01B7\u01B8\u01BC\u01C4\u01C7\u01CA\u01CD\u01CF\u01D1\u01D3\u01D5\u01D7\u01D9\u01DB\u01DE\u01E0\u01E2\u01E4\u01E6\u01E8\u01EA\u01EC\u01EE\u01F1\u01F4\u01F6-\u01F8\u01FA\u01FC\u01FE\u0200\u0202\u0204\u0206\u0208\u020A\u020C\u020E\u0210\u0212\u0214\u0216\u0218\u021A\u021C\u021E\u0220\u0222\u0224\u0226\u0228\u022A\u022C\u022E\u0230\u0232\u023A\u023B\u023D\u023E\u0241\u0243-\u0246\u0248\u024A\u024C\u024E\u0370\u0372\u0376\u037F\u0386\u0388-\u038A\u038C\u038E\u038F\u0391-\u03A1\u03A3-\u03AB\u03CF\u03D2-\u03D4\u03D8\u03DA\u03DC\u03DE\u03E0\u03E2\u03E4\u03E6\u03E8\u03EA\u03EC\u03EE\u03F4\u03F7\u03F9\u03FA\u03FD-\u042F\u0460\u0462\u0464\u0466\u0468\u046A\u046C\u046E\u0470\u0472\u0474\u0476\u0478\u047A\u047C\u047E\u0480\u048A\u048C\u048E\u0490\u0492\u0494\u0496\u0498\u049A\u049C\u049E\u04A0\u04A2\u04A4\u04A6\u04A8\u04AA\u04AC\u04AE\u04B0\u04B2\u04B4\u04B6\u04B8\u04BA\u04BC\u04BE\u04C0\u04C1\u04C3\u04C5\u04C7\u04C9\u04CB\u04CD\u04D0\u04D2\u04D4\u04D6\u04D8\u04DA\u04DC\u04DE\u04E0\u04E2\u04E4\u04E6\u04E8\u04EA\u04EC\u04EE\u04F0\u04F2\u04F4\u04F6\u04F8\u04FA\u04FC\u04FE\u0500\u0502\u0504\u0506\u0508\u050A\u050C\u050E\u0510\u0512\u0514\u0516\u0518\u051A\u051C\u051E\u0520\u0522\u0524\u0526\u0528\u052A\u052C\u052E\u0531-\u0556\u10A0-\u10C5\u10C7\u10CD\u13A0-\u13F5\u1C90-\u1CBA\u1CBD-\u1CBF\u1E00\u1E02\u1E04\u1E06\u1E08\u1E0A\u1E0C\u1E0E\u1E10\u1E12\u1E14\u1E16\u1E18\u1E1A\u1E1C\u1E1E\u1E20\u1E22\u1E24\u1E26\u1E28\u1E2A\u1E2C\u1E2E\u1E30\u1E32\u1E34\u1E36\u1E38\u1E3A\u1E3C\u1E3E\u1E40\u1E42\u1E44\u1E46\u1E48\u1E4A\u1E4C\u1E4E\u1E50\u1E52\u1E54\u1E56\u1E58\u1E5A\u1E5C\u1E5E\u1E60\u1E62\u1E64\u1E66\u1E68\u1E6A\u1E6C\u1E6E\u1E70\u1E72\u1E74\u1E76\u1E78\u1E7A\u1E7C\u1E7E\u1E80\u1E82\u1E84\u1E86\u1E88\u1E8A\u1E8C\u1E8E\u1E90\u1E92\u1E94\u1E9E\u1EA0\u1EA2\u1EA4\u1EA6\u1EA8\u1EAA\u1EAC\u1EAE\u1EB0\u1EB2\u1EB4\u1EB6\u1EB8\u1EBA\u1EBC\u1EBE\u1EC0\u1EC2\u1EC4\u1EC6\u1EC8\u1ECA\u1ECC\u1ECE\u1ED0\u1ED2\u1ED4\u1ED6\u1ED8\u1EDA\u1EDC\u1EDE\u1EE0\u1EE2\u1EE4\u1EE6\u1EE8\u1EEA\u1EEC\u1EEE\u1EF0\u1EF2\u1EF4\u1EF6\u1EF8\u1EFA\u1EFC\u1EFE\u1F08-\u1F0F\u1F18-\u1F1D\u1F28-\u1F2F\u1F38-\u1F3F\u1F48-\u1F4D\u1F59\u1F5B\u1F5D\u1F5F\u1F68-\u1F6F\u1FB8-\u1FBB\u1FC8-\u1FCB\u1FD8-\u1FDB\u1FE8-\u1FEC\u1FF8-\u1FFB\u2102\u2107\u210B-\u210D\u2110-\u2112\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u2130-\u2133\u213E\u213F\u2145\u2183\u2C00-\u2C2E\u2C60\u2C62-\u2C64\u2C67\u2C69\u2C6B\u2C6D-\u2C70\u2C72\u2C75\u2C7E-\u2C80\u2C82\u2C84\u2C86\u2C88\u2C8A\u2C8C\u2C8E\u2C90\u2C92\u2C94\u2C96\u2C98\u2C9A\u2C9C\u2C9E\u2CA0\u2CA2\u2CA4\u2CA6\u2CA8\u2CAA\u2CAC\u2CAE\u2CB0\u2CB2\u2CB4\u2CB6\u2CB8\u2CBA\u2CBC\u2CBE\u2CC0\u2CC2\u2CC4\u2CC6\u2CC8\u2CCA\u2CCC\u2CCE\u2CD0\u2CD2\u2CD4\u2CD6\u2CD8\u2CDA\u2CDC\u2CDE\u2CE0\u2CE2\u2CEB\u2CED\u2CF2\uA640\uA642\uA644\uA646\uA648\uA64A\uA64C\uA64E\uA650\uA652\uA654\uA656\uA658\uA65A\uA65C\uA65E\uA660\uA662\uA664\uA666\uA668\uA66A\uA66C\uA680\uA682\uA684\uA686\uA688\uA68A\uA68C\uA68E\uA690\uA692\uA694\uA696\uA698\uA69A\uA722\uA724\uA726\uA728\uA72A\uA72C\uA72E\uA732\uA734\uA736\uA738\uA73A\uA73C\uA73E\uA740\uA742\uA744\uA746\uA748\uA74A\uA74C\uA74E\uA750\uA752\uA754\uA756\uA758\uA75A\uA75C\uA75E\uA760\uA762\uA764\uA766\uA768\uA76A\uA76C\uA76E\uA779\uA77B\uA77D\uA77E\uA780\uA782\uA784\uA786\uA78B\uA78D\uA790\uA792\uA796\uA798\uA79A\uA79C\uA79E\uA7A0\uA7A2\uA7A4\uA7A6\uA7A8\uA7AA-\uA7AE\uA7B0-\uA7B4\uA7B6\uA7B8\uA7BA\uA7BC\uA7BE\uA7C2\uA7C4-\uA7C7\uA7C9\uA7F5\uFF21-\uFF3A', + 'astral': '\uD801[\uDC00-\uDC27\uDCB0-\uDCD3]|\uD803[\uDC80-\uDCB2]|\uD806[\uDCA0-\uDCBF]|\uD81B[\uDE40-\uDE5F]|\uD835[\uDC00-\uDC19\uDC34-\uDC4D\uDC68-\uDC81\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB5\uDCD0-\uDCE9\uDD04\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD38\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD6C-\uDD85\uDDA0-\uDDB9\uDDD4-\uDDED\uDE08-\uDE21\uDE3C-\uDE55\uDE70-\uDE89\uDEA8-\uDEC0\uDEE2-\uDEFA\uDF1C-\uDF34\uDF56-\uDF6E\uDF90-\uDFA8\uDFCA]|\uD83A[\uDD00-\uDD21]' + }, + { + 'name': 'M', + 'alias': 'Mark', + 'bmp': '\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u07FD\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08D3-\u08E1\u08E3-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962\u0963\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u09FE\u0A01-\u0A03\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AE2\u0AE3\u0AFA-\u0AFF\u0B01-\u0B03\u0B3C\u0B3E-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B55-\u0B57\u0B62\u0B63\u0B82\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0C00-\u0C04\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81-\u0C83\u0CBC\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CE2\u0CE3\u0D00-\u0D03\u0D3B\u0D3C\u0D3E-\u0D44\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D62\u0D63\u0D81-\u0D83\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102B-\u103E\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F\u109A-\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4-\u17D3\u17DD\u180B-\u180D\u1885\u1886\u18A9\u1920-\u192B\u1930-\u193B\u1A17-\u1A1B\u1A55-\u1A5E\u1A60-\u1A7C\u1A7F\u1AB0-\u1AC0\u1B00-\u1B04\u1B34-\u1B44\u1B6B-\u1B73\u1B80-\u1B82\u1BA1-\u1BAD\u1BE6-\u1BF3\u1C24-\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE8\u1CED\u1CF4\u1CF7-\u1CF9\u1DC0-\u1DF9\u1DFB-\u1DFF\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA66F-\uA672\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA823-\uA827\uA82C\uA880\uA881\uA8B4-\uA8C5\uA8E0-\uA8F1\uA8FF\uA926-\uA92D\uA947-\uA953\uA980-\uA983\uA9B3-\uA9C0\uA9E5\uAA29-\uAA36\uAA43\uAA4C\uAA4D\uAA7B-\uAA7D\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEB-\uAAEF\uAAF5\uAAF6\uABE3-\uABEA\uABEC\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F', + 'astral': '\uD800[\uDDFD\uDEE0\uDF76-\uDF7A]|\uD802[\uDE01-\uDE03\uDE05\uDE06\uDE0C-\uDE0F\uDE38-\uDE3A\uDE3F\uDEE5\uDEE6]|\uD803[\uDD24-\uDD27\uDEAB\uDEAC\uDF46-\uDF50]|\uD804[\uDC00-\uDC02\uDC38-\uDC46\uDC7F-\uDC82\uDCB0-\uDCBA\uDD00-\uDD02\uDD27-\uDD34\uDD45\uDD46\uDD73\uDD80-\uDD82\uDDB3-\uDDC0\uDDC9-\uDDCC\uDDCE\uDDCF\uDE2C-\uDE37\uDE3E\uDEDF-\uDEEA\uDF00-\uDF03\uDF3B\uDF3C\uDF3E-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF57\uDF62\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC35-\uDC46\uDC5E\uDCB0-\uDCC3\uDDAF-\uDDB5\uDDB8-\uDDC0\uDDDC\uDDDD\uDE30-\uDE40\uDEAB-\uDEB7\uDF1D-\uDF2B]|\uD806[\uDC2C-\uDC3A\uDD30-\uDD35\uDD37\uDD38\uDD3B-\uDD3E\uDD40\uDD42\uDD43\uDDD1-\uDDD7\uDDDA-\uDDE0\uDDE4\uDE01-\uDE0A\uDE33-\uDE39\uDE3B-\uDE3E\uDE47\uDE51-\uDE5B\uDE8A-\uDE99]|\uD807[\uDC2F-\uDC36\uDC38-\uDC3F\uDC92-\uDCA7\uDCA9-\uDCB6\uDD31-\uDD36\uDD3A\uDD3C\uDD3D\uDD3F-\uDD45\uDD47\uDD8A-\uDD8E\uDD90\uDD91\uDD93-\uDD97\uDEF3-\uDEF6]|\uD81A[\uDEF0-\uDEF4\uDF30-\uDF36]|\uD81B[\uDF4F\uDF51-\uDF87\uDF8F-\uDF92\uDFE4\uDFF0\uDFF1]|\uD82F[\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A\uDD30-\uDD36\uDEEC-\uDEEF]|\uD83A[\uDCD0-\uDCD6\uDD44-\uDD4A]|\uDB40[\uDD00-\uDDEF]' + }, + { + 'name': 'Mc', + 'alias': 'Spacing_Mark', + 'bmp': '\u0903\u093B\u093E-\u0940\u0949-\u094C\u094E\u094F\u0982\u0983\u09BE-\u09C0\u09C7\u09C8\u09CB\u09CC\u09D7\u0A03\u0A3E-\u0A40\u0A83\u0ABE-\u0AC0\u0AC9\u0ACB\u0ACC\u0B02\u0B03\u0B3E\u0B40\u0B47\u0B48\u0B4B\u0B4C\u0B57\u0BBE\u0BBF\u0BC1\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCC\u0BD7\u0C01-\u0C03\u0C41-\u0C44\u0C82\u0C83\u0CBE\u0CC0-\u0CC4\u0CC7\u0CC8\u0CCA\u0CCB\u0CD5\u0CD6\u0D02\u0D03\u0D3E-\u0D40\u0D46-\u0D48\u0D4A-\u0D4C\u0D57\u0D82\u0D83\u0DCF-\u0DD1\u0DD8-\u0DDF\u0DF2\u0DF3\u0F3E\u0F3F\u0F7F\u102B\u102C\u1031\u1038\u103B\u103C\u1056\u1057\u1062-\u1064\u1067-\u106D\u1083\u1084\u1087-\u108C\u108F\u109A-\u109C\u17B6\u17BE-\u17C5\u17C7\u17C8\u1923-\u1926\u1929-\u192B\u1930\u1931\u1933-\u1938\u1A19\u1A1A\u1A55\u1A57\u1A61\u1A63\u1A64\u1A6D-\u1A72\u1B04\u1B35\u1B3B\u1B3D-\u1B41\u1B43\u1B44\u1B82\u1BA1\u1BA6\u1BA7\u1BAA\u1BE7\u1BEA-\u1BEC\u1BEE\u1BF2\u1BF3\u1C24-\u1C2B\u1C34\u1C35\u1CE1\u1CF7\u302E\u302F\uA823\uA824\uA827\uA880\uA881\uA8B4-\uA8C3\uA952\uA953\uA983\uA9B4\uA9B5\uA9BA\uA9BB\uA9BE-\uA9C0\uAA2F\uAA30\uAA33\uAA34\uAA4D\uAA7B\uAA7D\uAAEB\uAAEE\uAAEF\uAAF5\uABE3\uABE4\uABE6\uABE7\uABE9\uABEA\uABEC', + 'astral': '\uD804[\uDC00\uDC02\uDC82\uDCB0-\uDCB2\uDCB7\uDCB8\uDD2C\uDD45\uDD46\uDD82\uDDB3-\uDDB5\uDDBF\uDDC0\uDDCE\uDE2C-\uDE2E\uDE32\uDE33\uDE35\uDEE0-\uDEE2\uDF02\uDF03\uDF3E\uDF3F\uDF41-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF57\uDF62\uDF63]|\uD805[\uDC35-\uDC37\uDC40\uDC41\uDC45\uDCB0-\uDCB2\uDCB9\uDCBB-\uDCBE\uDCC1\uDDAF-\uDDB1\uDDB8-\uDDBB\uDDBE\uDE30-\uDE32\uDE3B\uDE3C\uDE3E\uDEAC\uDEAE\uDEAF\uDEB6\uDF20\uDF21\uDF26]|\uD806[\uDC2C-\uDC2E\uDC38\uDD30-\uDD35\uDD37\uDD38\uDD3D\uDD40\uDD42\uDDD1-\uDDD3\uDDDC-\uDDDF\uDDE4\uDE39\uDE57\uDE58\uDE97]|\uD807[\uDC2F\uDC3E\uDCA9\uDCB1\uDCB4\uDD8A-\uDD8E\uDD93\uDD94\uDD96\uDEF5\uDEF6]|\uD81B[\uDF51-\uDF87\uDFF0\uDFF1]|\uD834[\uDD65\uDD66\uDD6D-\uDD72]' + }, + { + 'name': 'Me', + 'alias': 'Enclosing_Mark', + 'bmp': '\u0488\u0489\u1ABE\u20DD-\u20E0\u20E2-\u20E4\uA670-\uA672' + }, + { + 'name': 'Mn', + 'alias': 'Nonspacing_Mark', + 'bmp': '\u0300-\u036F\u0483-\u0487\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u07FD\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08D3-\u08E1\u08E3-\u0902\u093A\u093C\u0941-\u0948\u094D\u0951-\u0957\u0962\u0963\u0981\u09BC\u09C1-\u09C4\u09CD\u09E2\u09E3\u09FE\u0A01\u0A02\u0A3C\u0A41\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81\u0A82\u0ABC\u0AC1-\u0AC5\u0AC7\u0AC8\u0ACD\u0AE2\u0AE3\u0AFA-\u0AFF\u0B01\u0B3C\u0B3F\u0B41-\u0B44\u0B4D\u0B55\u0B56\u0B62\u0B63\u0B82\u0BC0\u0BCD\u0C00\u0C04\u0C3E-\u0C40\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81\u0CBC\u0CBF\u0CC6\u0CCC\u0CCD\u0CE2\u0CE3\u0D00\u0D01\u0D3B\u0D3C\u0D41-\u0D44\u0D4D\u0D62\u0D63\u0D81\u0DCA\u0DD2-\u0DD4\u0DD6\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F71-\u0F7E\u0F80-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102D-\u1030\u1032-\u1037\u1039\u103A\u103D\u103E\u1058\u1059\u105E-\u1060\u1071-\u1074\u1082\u1085\u1086\u108D\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4\u17B5\u17B7-\u17BD\u17C6\u17C9-\u17D3\u17DD\u180B-\u180D\u1885\u1886\u18A9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193B\u1A17\u1A18\u1A1B\u1A56\u1A58-\u1A5E\u1A60\u1A62\u1A65-\u1A6C\u1A73-\u1A7C\u1A7F\u1AB0-\u1ABD\u1ABF\u1AC0\u1B00-\u1B03\u1B34\u1B36-\u1B3A\u1B3C\u1B42\u1B6B-\u1B73\u1B80\u1B81\u1BA2-\u1BA5\u1BA8\u1BA9\u1BAB-\u1BAD\u1BE6\u1BE8\u1BE9\u1BED\u1BEF-\u1BF1\u1C2C-\u1C33\u1C36\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE0\u1CE2-\u1CE8\u1CED\u1CF4\u1CF8\u1CF9\u1DC0-\u1DF9\u1DFB-\u1DFF\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302D\u3099\u309A\uA66F\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA825\uA826\uA82C\uA8C4\uA8C5\uA8E0-\uA8F1\uA8FF\uA926-\uA92D\uA947-\uA951\uA980-\uA982\uA9B3\uA9B6-\uA9B9\uA9BC\uA9BD\uA9E5\uAA29-\uAA2E\uAA31\uAA32\uAA35\uAA36\uAA43\uAA4C\uAA7C\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEC\uAAED\uAAF6\uABE5\uABE8\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F', + 'astral': '\uD800[\uDDFD\uDEE0\uDF76-\uDF7A]|\uD802[\uDE01-\uDE03\uDE05\uDE06\uDE0C-\uDE0F\uDE38-\uDE3A\uDE3F\uDEE5\uDEE6]|\uD803[\uDD24-\uDD27\uDEAB\uDEAC\uDF46-\uDF50]|\uD804[\uDC01\uDC38-\uDC46\uDC7F-\uDC81\uDCB3-\uDCB6\uDCB9\uDCBA\uDD00-\uDD02\uDD27-\uDD2B\uDD2D-\uDD34\uDD73\uDD80\uDD81\uDDB6-\uDDBE\uDDC9-\uDDCC\uDDCF\uDE2F-\uDE31\uDE34\uDE36\uDE37\uDE3E\uDEDF\uDEE3-\uDEEA\uDF00\uDF01\uDF3B\uDF3C\uDF40\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC38-\uDC3F\uDC42-\uDC44\uDC46\uDC5E\uDCB3-\uDCB8\uDCBA\uDCBF\uDCC0\uDCC2\uDCC3\uDDB2-\uDDB5\uDDBC\uDDBD\uDDBF\uDDC0\uDDDC\uDDDD\uDE33-\uDE3A\uDE3D\uDE3F\uDE40\uDEAB\uDEAD\uDEB0-\uDEB5\uDEB7\uDF1D-\uDF1F\uDF22-\uDF25\uDF27-\uDF2B]|\uD806[\uDC2F-\uDC37\uDC39\uDC3A\uDD3B\uDD3C\uDD3E\uDD43\uDDD4-\uDDD7\uDDDA\uDDDB\uDDE0\uDE01-\uDE0A\uDE33-\uDE38\uDE3B-\uDE3E\uDE47\uDE51-\uDE56\uDE59-\uDE5B\uDE8A-\uDE96\uDE98\uDE99]|\uD807[\uDC30-\uDC36\uDC38-\uDC3D\uDC3F\uDC92-\uDCA7\uDCAA-\uDCB0\uDCB2\uDCB3\uDCB5\uDCB6\uDD31-\uDD36\uDD3A\uDD3C\uDD3D\uDD3F-\uDD45\uDD47\uDD90\uDD91\uDD95\uDD97\uDEF3\uDEF4]|\uD81A[\uDEF0-\uDEF4\uDF30-\uDF36]|\uD81B[\uDF4F\uDF8F-\uDF92\uDFE4]|\uD82F[\uDC9D\uDC9E]|\uD834[\uDD67-\uDD69\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A\uDD30-\uDD36\uDEEC-\uDEEF]|\uD83A[\uDCD0-\uDCD6\uDD44-\uDD4A]|\uDB40[\uDD00-\uDDEF]' + }, + { + 'name': 'N', + 'alias': 'Number', + 'bmp': '0-9\xB2\xB3\xB9\xBC-\xBE\u0660-\u0669\u06F0-\u06F9\u07C0-\u07C9\u0966-\u096F\u09E6-\u09EF\u09F4-\u09F9\u0A66-\u0A6F\u0AE6-\u0AEF\u0B66-\u0B6F\u0B72-\u0B77\u0BE6-\u0BF2\u0C66-\u0C6F\u0C78-\u0C7E\u0CE6-\u0CEF\u0D58-\u0D5E\u0D66-\u0D78\u0DE6-\u0DEF\u0E50-\u0E59\u0ED0-\u0ED9\u0F20-\u0F33\u1040-\u1049\u1090-\u1099\u1369-\u137C\u16EE-\u16F0\u17E0-\u17E9\u17F0-\u17F9\u1810-\u1819\u1946-\u194F\u19D0-\u19DA\u1A80-\u1A89\u1A90-\u1A99\u1B50-\u1B59\u1BB0-\u1BB9\u1C40-\u1C49\u1C50-\u1C59\u2070\u2074-\u2079\u2080-\u2089\u2150-\u2182\u2185-\u2189\u2460-\u249B\u24EA-\u24FF\u2776-\u2793\u2CFD\u3007\u3021-\u3029\u3038-\u303A\u3192-\u3195\u3220-\u3229\u3248-\u324F\u3251-\u325F\u3280-\u3289\u32B1-\u32BF\uA620-\uA629\uA6E6-\uA6EF\uA830-\uA835\uA8D0-\uA8D9\uA900-\uA909\uA9D0-\uA9D9\uA9F0-\uA9F9\uAA50-\uAA59\uABF0-\uABF9\uFF10-\uFF19', + 'astral': '\uD800[\uDD07-\uDD33\uDD40-\uDD78\uDD8A\uDD8B\uDEE1-\uDEFB\uDF20-\uDF23\uDF41\uDF4A\uDFD1-\uDFD5]|\uD801[\uDCA0-\uDCA9]|\uD802[\uDC58-\uDC5F\uDC79-\uDC7F\uDCA7-\uDCAF\uDCFB-\uDCFF\uDD16-\uDD1B\uDDBC\uDDBD\uDDC0-\uDDCF\uDDD2-\uDDFF\uDE40-\uDE48\uDE7D\uDE7E\uDE9D-\uDE9F\uDEEB-\uDEEF\uDF58-\uDF5F\uDF78-\uDF7F\uDFA9-\uDFAF]|\uD803[\uDCFA-\uDCFF\uDD30-\uDD39\uDE60-\uDE7E\uDF1D-\uDF26\uDF51-\uDF54\uDFC5-\uDFCB]|\uD804[\uDC52-\uDC6F\uDCF0-\uDCF9\uDD36-\uDD3F\uDDD0-\uDDD9\uDDE1-\uDDF4\uDEF0-\uDEF9]|\uD805[\uDC50-\uDC59\uDCD0-\uDCD9\uDE50-\uDE59\uDEC0-\uDEC9\uDF30-\uDF3B]|\uD806[\uDCE0-\uDCF2\uDD50-\uDD59]|\uD807[\uDC50-\uDC6C\uDD50-\uDD59\uDDA0-\uDDA9\uDFC0-\uDFD4]|\uD809[\uDC00-\uDC6E]|\uD81A[\uDE60-\uDE69\uDF50-\uDF59\uDF5B-\uDF61]|\uD81B[\uDE80-\uDE96]|\uD834[\uDEE0-\uDEF3\uDF60-\uDF78]|\uD835[\uDFCE-\uDFFF]|\uD838[\uDD40-\uDD49\uDEF0-\uDEF9]|\uD83A[\uDCC7-\uDCCF\uDD50-\uDD59]|\uD83B[\uDC71-\uDCAB\uDCAD-\uDCAF\uDCB1-\uDCB4\uDD01-\uDD2D\uDD2F-\uDD3D]|\uD83C[\uDD00-\uDD0C]|\uD83E[\uDFF0-\uDFF9]' + }, + { + 'name': 'Nd', + 'alias': 'Decimal_Number', + 'bmp': '0-9\u0660-\u0669\u06F0-\u06F9\u07C0-\u07C9\u0966-\u096F\u09E6-\u09EF\u0A66-\u0A6F\u0AE6-\u0AEF\u0B66-\u0B6F\u0BE6-\u0BEF\u0C66-\u0C6F\u0CE6-\u0CEF\u0D66-\u0D6F\u0DE6-\u0DEF\u0E50-\u0E59\u0ED0-\u0ED9\u0F20-\u0F29\u1040-\u1049\u1090-\u1099\u17E0-\u17E9\u1810-\u1819\u1946-\u194F\u19D0-\u19D9\u1A80-\u1A89\u1A90-\u1A99\u1B50-\u1B59\u1BB0-\u1BB9\u1C40-\u1C49\u1C50-\u1C59\uA620-\uA629\uA8D0-\uA8D9\uA900-\uA909\uA9D0-\uA9D9\uA9F0-\uA9F9\uAA50-\uAA59\uABF0-\uABF9\uFF10-\uFF19', + 'astral': '\uD801[\uDCA0-\uDCA9]|\uD803[\uDD30-\uDD39]|\uD804[\uDC66-\uDC6F\uDCF0-\uDCF9\uDD36-\uDD3F\uDDD0-\uDDD9\uDEF0-\uDEF9]|\uD805[\uDC50-\uDC59\uDCD0-\uDCD9\uDE50-\uDE59\uDEC0-\uDEC9\uDF30-\uDF39]|\uD806[\uDCE0-\uDCE9\uDD50-\uDD59]|\uD807[\uDC50-\uDC59\uDD50-\uDD59\uDDA0-\uDDA9]|\uD81A[\uDE60-\uDE69\uDF50-\uDF59]|\uD835[\uDFCE-\uDFFF]|\uD838[\uDD40-\uDD49\uDEF0-\uDEF9]|\uD83A[\uDD50-\uDD59]|\uD83E[\uDFF0-\uDFF9]' + }, + { + 'name': 'Nl', + 'alias': 'Letter_Number', + 'bmp': '\u16EE-\u16F0\u2160-\u2182\u2185-\u2188\u3007\u3021-\u3029\u3038-\u303A\uA6E6-\uA6EF', + 'astral': '\uD800[\uDD40-\uDD74\uDF41\uDF4A\uDFD1-\uDFD5]|\uD809[\uDC00-\uDC6E]' + }, + { + 'name': 'No', + 'alias': 'Other_Number', + 'bmp': '\xB2\xB3\xB9\xBC-\xBE\u09F4-\u09F9\u0B72-\u0B77\u0BF0-\u0BF2\u0C78-\u0C7E\u0D58-\u0D5E\u0D70-\u0D78\u0F2A-\u0F33\u1369-\u137C\u17F0-\u17F9\u19DA\u2070\u2074-\u2079\u2080-\u2089\u2150-\u215F\u2189\u2460-\u249B\u24EA-\u24FF\u2776-\u2793\u2CFD\u3192-\u3195\u3220-\u3229\u3248-\u324F\u3251-\u325F\u3280-\u3289\u32B1-\u32BF\uA830-\uA835', + 'astral': '\uD800[\uDD07-\uDD33\uDD75-\uDD78\uDD8A\uDD8B\uDEE1-\uDEFB\uDF20-\uDF23]|\uD802[\uDC58-\uDC5F\uDC79-\uDC7F\uDCA7-\uDCAF\uDCFB-\uDCFF\uDD16-\uDD1B\uDDBC\uDDBD\uDDC0-\uDDCF\uDDD2-\uDDFF\uDE40-\uDE48\uDE7D\uDE7E\uDE9D-\uDE9F\uDEEB-\uDEEF\uDF58-\uDF5F\uDF78-\uDF7F\uDFA9-\uDFAF]|\uD803[\uDCFA-\uDCFF\uDE60-\uDE7E\uDF1D-\uDF26\uDF51-\uDF54\uDFC5-\uDFCB]|\uD804[\uDC52-\uDC65\uDDE1-\uDDF4]|\uD805[\uDF3A\uDF3B]|\uD806[\uDCEA-\uDCF2]|\uD807[\uDC5A-\uDC6C\uDFC0-\uDFD4]|\uD81A[\uDF5B-\uDF61]|\uD81B[\uDE80-\uDE96]|\uD834[\uDEE0-\uDEF3\uDF60-\uDF78]|\uD83A[\uDCC7-\uDCCF]|\uD83B[\uDC71-\uDCAB\uDCAD-\uDCAF\uDCB1-\uDCB4\uDD01-\uDD2D\uDD2F-\uDD3D]|\uD83C[\uDD00-\uDD0C]' + }, + { + 'name': 'P', + 'alias': 'Punctuation', + 'bmp': '!-#%-\\*,-\\/:;\\?@\\[-\\]_\\{\\}\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65', + 'astral': '\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD803[\uDEAD\uDF55-\uDF59]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC8\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDC4B-\uDC4F\uDC5A\uDC5B\uDC5D\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDE60-\uDE6C\uDF3C-\uDF3E]|\uD806[\uDC3B\uDD44-\uDD46\uDDE2\uDE3F-\uDE46\uDE9A-\uDE9C\uDE9E-\uDEA2]|\uD807[\uDC41-\uDC45\uDC70\uDC71\uDEF7\uDEF8\uDFFF]|\uD809[\uDC70-\uDC74]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD81B[\uDE97-\uDE9A\uDFE2]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]|\uD83A[\uDD5E\uDD5F]' + }, + { + 'name': 'Pc', + 'alias': 'Connector_Punctuation', + 'bmp': '_\u203F\u2040\u2054\uFE33\uFE34\uFE4D-\uFE4F\uFF3F' + }, + { + 'name': 'Pd', + 'alias': 'Dash_Punctuation', + 'bmp': '\\-\u058A\u05BE\u1400\u1806\u2010-\u2015\u2E17\u2E1A\u2E3A\u2E3B\u2E40\u301C\u3030\u30A0\uFE31\uFE32\uFE58\uFE63\uFF0D', + 'astral': '\uD803\uDEAD' + }, + { + 'name': 'Pe', + 'alias': 'Close_Punctuation', + 'bmp': '\\)\\]\\}\u0F3B\u0F3D\u169C\u2046\u207E\u208E\u2309\u230B\u232A\u2769\u276B\u276D\u276F\u2771\u2773\u2775\u27C6\u27E7\u27E9\u27EB\u27ED\u27EF\u2984\u2986\u2988\u298A\u298C\u298E\u2990\u2992\u2994\u2996\u2998\u29D9\u29DB\u29FD\u2E23\u2E25\u2E27\u2E29\u3009\u300B\u300D\u300F\u3011\u3015\u3017\u3019\u301B\u301E\u301F\uFD3E\uFE18\uFE36\uFE38\uFE3A\uFE3C\uFE3E\uFE40\uFE42\uFE44\uFE48\uFE5A\uFE5C\uFE5E\uFF09\uFF3D\uFF5D\uFF60\uFF63' + }, + { + 'name': 'Pf', + 'alias': 'Final_Punctuation', + 'bmp': '\xBB\u2019\u201D\u203A\u2E03\u2E05\u2E0A\u2E0D\u2E1D\u2E21' + }, + { + 'name': 'Pi', + 'alias': 'Initial_Punctuation', + 'bmp': '\xAB\u2018\u201B\u201C\u201F\u2039\u2E02\u2E04\u2E09\u2E0C\u2E1C\u2E20' + }, + { + 'name': 'Po', + 'alias': 'Other_Punctuation', + 'bmp': '!-#%-\'\\*,\\.\\/:;\\?@\\\xA1\xA7\xB6\xB7\xBF\u037E\u0387\u055A-\u055F\u0589\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u166E\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u1805\u1807-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2016\u2017\u2020-\u2027\u2030-\u2038\u203B-\u203E\u2041-\u2043\u2047-\u2051\u2053\u2055-\u205E\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00\u2E01\u2E06-\u2E08\u2E0B\u2E0E-\u2E16\u2E18\u2E19\u2E1B\u2E1E\u2E1F\u2E2A-\u2E2E\u2E30-\u2E39\u2E3C-\u2E3F\u2E41\u2E43-\u2E4F\u2E52\u3001-\u3003\u303D\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFE10-\uFE16\uFE19\uFE30\uFE45\uFE46\uFE49-\uFE4C\uFE50-\uFE52\uFE54-\uFE57\uFE5F-\uFE61\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF07\uFF0A\uFF0C\uFF0E\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3C\uFF61\uFF64\uFF65', + 'astral': '\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD803[\uDF55-\uDF59]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC8\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDC4B-\uDC4F\uDC5A\uDC5B\uDC5D\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDE60-\uDE6C\uDF3C-\uDF3E]|\uD806[\uDC3B\uDD44-\uDD46\uDDE2\uDE3F-\uDE46\uDE9A-\uDE9C\uDE9E-\uDEA2]|\uD807[\uDC41-\uDC45\uDC70\uDC71\uDEF7\uDEF8\uDFFF]|\uD809[\uDC70-\uDC74]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD81B[\uDE97-\uDE9A\uDFE2]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]|\uD83A[\uDD5E\uDD5F]' + }, + { + 'name': 'Ps', + 'alias': 'Open_Punctuation', + 'bmp': '\\(\\[\\{\u0F3A\u0F3C\u169B\u201A\u201E\u2045\u207D\u208D\u2308\u230A\u2329\u2768\u276A\u276C\u276E\u2770\u2772\u2774\u27C5\u27E6\u27E8\u27EA\u27EC\u27EE\u2983\u2985\u2987\u2989\u298B\u298D\u298F\u2991\u2993\u2995\u2997\u29D8\u29DA\u29FC\u2E22\u2E24\u2E26\u2E28\u2E42\u3008\u300A\u300C\u300E\u3010\u3014\u3016\u3018\u301A\u301D\uFD3F\uFE17\uFE35\uFE37\uFE39\uFE3B\uFE3D\uFE3F\uFE41\uFE43\uFE47\uFE59\uFE5B\uFE5D\uFF08\uFF3B\uFF5B\uFF5F\uFF62' + }, + { + 'name': 'S', + 'alias': 'Symbol', + 'bmp': '\\$\\+<->\\^`\\|~\xA2-\xA6\xA8\xA9\xAC\xAE-\xB1\xB4\xB8\xD7\xF7\u02C2-\u02C5\u02D2-\u02DF\u02E5-\u02EB\u02ED\u02EF-\u02FF\u0375\u0384\u0385\u03F6\u0482\u058D-\u058F\u0606-\u0608\u060B\u060E\u060F\u06DE\u06E9\u06FD\u06FE\u07F6\u07FE\u07FF\u09F2\u09F3\u09FA\u09FB\u0AF1\u0B70\u0BF3-\u0BFA\u0C7F\u0D4F\u0D79\u0E3F\u0F01-\u0F03\u0F13\u0F15-\u0F17\u0F1A-\u0F1F\u0F34\u0F36\u0F38\u0FBE-\u0FC5\u0FC7-\u0FCC\u0FCE\u0FCF\u0FD5-\u0FD8\u109E\u109F\u1390-\u1399\u166D\u17DB\u1940\u19DE-\u19FF\u1B61-\u1B6A\u1B74-\u1B7C\u1FBD\u1FBF-\u1FC1\u1FCD-\u1FCF\u1FDD-\u1FDF\u1FED-\u1FEF\u1FFD\u1FFE\u2044\u2052\u207A-\u207C\u208A-\u208C\u20A0-\u20BF\u2100\u2101\u2103-\u2106\u2108\u2109\u2114\u2116-\u2118\u211E-\u2123\u2125\u2127\u2129\u212E\u213A\u213B\u2140-\u2144\u214A-\u214D\u214F\u218A\u218B\u2190-\u2307\u230C-\u2328\u232B-\u2426\u2440-\u244A\u249C-\u24E9\u2500-\u2767\u2794-\u27C4\u27C7-\u27E5\u27F0-\u2982\u2999-\u29D7\u29DC-\u29FB\u29FE-\u2B73\u2B76-\u2B95\u2B97-\u2BFF\u2CE5-\u2CEA\u2E50\u2E51\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3004\u3012\u3013\u3020\u3036\u3037\u303E\u303F\u309B\u309C\u3190\u3191\u3196-\u319F\u31C0-\u31E3\u3200-\u321E\u322A-\u3247\u3250\u3260-\u327F\u328A-\u32B0\u32C0-\u33FF\u4DC0-\u4DFF\uA490-\uA4C6\uA700-\uA716\uA720\uA721\uA789\uA78A\uA828-\uA82B\uA836-\uA839\uAA77-\uAA79\uAB5B\uAB6A\uAB6B\uFB29\uFBB2-\uFBC1\uFDFC\uFDFD\uFE62\uFE64-\uFE66\uFE69\uFF04\uFF0B\uFF1C-\uFF1E\uFF3E\uFF40\uFF5C\uFF5E\uFFE0-\uFFE6\uFFE8-\uFFEE\uFFFC\uFFFD', + 'astral': '\uD800[\uDD37-\uDD3F\uDD79-\uDD89\uDD8C-\uDD8E\uDD90-\uDD9C\uDDA0\uDDD0-\uDDFC]|\uD802[\uDC77\uDC78\uDEC8]|\uD805\uDF3F|\uD807[\uDFD5-\uDFF1]|\uD81A[\uDF3C-\uDF3F\uDF45]|\uD82F\uDC9C|\uD834[\uDC00-\uDCF5\uDD00-\uDD26\uDD29-\uDD64\uDD6A-\uDD6C\uDD83\uDD84\uDD8C-\uDDA9\uDDAE-\uDDE8\uDE00-\uDE41\uDE45\uDF00-\uDF56]|\uD835[\uDEC1\uDEDB\uDEFB\uDF15\uDF35\uDF4F\uDF6F\uDF89\uDFA9\uDFC3]|\uD836[\uDC00-\uDDFF\uDE37-\uDE3A\uDE6D-\uDE74\uDE76-\uDE83\uDE85\uDE86]|\uD838[\uDD4F\uDEFF]|\uD83B[\uDCAC\uDCB0\uDD2E\uDEF0\uDEF1]|\uD83C[\uDC00-\uDC2B\uDC30-\uDC93\uDCA0-\uDCAE\uDCB1-\uDCBF\uDCC1-\uDCCF\uDCD1-\uDCF5\uDD0D-\uDDAD\uDDE6-\uDE02\uDE10-\uDE3B\uDE40-\uDE48\uDE50\uDE51\uDE60-\uDE65\uDF00-\uDFFF]|\uD83D[\uDC00-\uDED7\uDEE0-\uDEEC\uDEF0-\uDEFC\uDF00-\uDF73\uDF80-\uDFD8\uDFE0-\uDFEB]|\uD83E[\uDC00-\uDC0B\uDC10-\uDC47\uDC50-\uDC59\uDC60-\uDC87\uDC90-\uDCAD\uDCB0\uDCB1\uDD00-\uDD78\uDD7A-\uDDCB\uDDCD-\uDE53\uDE60-\uDE6D\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6\uDF00-\uDF92\uDF94-\uDFCA]' + }, + { + 'name': 'Sc', + 'alias': 'Currency_Symbol', + 'bmp': '\\$\xA2-\xA5\u058F\u060B\u07FE\u07FF\u09F2\u09F3\u09FB\u0AF1\u0BF9\u0E3F\u17DB\u20A0-\u20BF\uA838\uFDFC\uFE69\uFF04\uFFE0\uFFE1\uFFE5\uFFE6', + 'astral': '\uD807[\uDFDD-\uDFE0]|\uD838\uDEFF|\uD83B\uDCB0' + }, + { + 'name': 'Sk', + 'alias': 'Modifier_Symbol', + 'bmp': '\\^`\xA8\xAF\xB4\xB8\u02C2-\u02C5\u02D2-\u02DF\u02E5-\u02EB\u02ED\u02EF-\u02FF\u0375\u0384\u0385\u1FBD\u1FBF-\u1FC1\u1FCD-\u1FCF\u1FDD-\u1FDF\u1FED-\u1FEF\u1FFD\u1FFE\u309B\u309C\uA700-\uA716\uA720\uA721\uA789\uA78A\uAB5B\uAB6A\uAB6B\uFBB2-\uFBC1\uFF3E\uFF40\uFFE3', + 'astral': '\uD83C[\uDFFB-\uDFFF]' + }, + { + 'name': 'Sm', + 'alias': 'Math_Symbol', + 'bmp': '\\+<->\\|~\xAC\xB1\xD7\xF7\u03F6\u0606-\u0608\u2044\u2052\u207A-\u207C\u208A-\u208C\u2118\u2140-\u2144\u214B\u2190-\u2194\u219A\u219B\u21A0\u21A3\u21A6\u21AE\u21CE\u21CF\u21D2\u21D4\u21F4-\u22FF\u2320\u2321\u237C\u239B-\u23B3\u23DC-\u23E1\u25B7\u25C1\u25F8-\u25FF\u266F\u27C0-\u27C4\u27C7-\u27E5\u27F0-\u27FF\u2900-\u2982\u2999-\u29D7\u29DC-\u29FB\u29FE-\u2AFF\u2B30-\u2B44\u2B47-\u2B4C\uFB29\uFE62\uFE64-\uFE66\uFF0B\uFF1C-\uFF1E\uFF5C\uFF5E\uFFE2\uFFE9-\uFFEC', + 'astral': '\uD835[\uDEC1\uDEDB\uDEFB\uDF15\uDF35\uDF4F\uDF6F\uDF89\uDFA9\uDFC3]|\uD83B[\uDEF0\uDEF1]' + }, + { + 'name': 'So', + 'alias': 'Other_Symbol', + 'bmp': '\xA6\xA9\xAE\xB0\u0482\u058D\u058E\u060E\u060F\u06DE\u06E9\u06FD\u06FE\u07F6\u09FA\u0B70\u0BF3-\u0BF8\u0BFA\u0C7F\u0D4F\u0D79\u0F01-\u0F03\u0F13\u0F15-\u0F17\u0F1A-\u0F1F\u0F34\u0F36\u0F38\u0FBE-\u0FC5\u0FC7-\u0FCC\u0FCE\u0FCF\u0FD5-\u0FD8\u109E\u109F\u1390-\u1399\u166D\u1940\u19DE-\u19FF\u1B61-\u1B6A\u1B74-\u1B7C\u2100\u2101\u2103-\u2106\u2108\u2109\u2114\u2116\u2117\u211E-\u2123\u2125\u2127\u2129\u212E\u213A\u213B\u214A\u214C\u214D\u214F\u218A\u218B\u2195-\u2199\u219C-\u219F\u21A1\u21A2\u21A4\u21A5\u21A7-\u21AD\u21AF-\u21CD\u21D0\u21D1\u21D3\u21D5-\u21F3\u2300-\u2307\u230C-\u231F\u2322-\u2328\u232B-\u237B\u237D-\u239A\u23B4-\u23DB\u23E2-\u2426\u2440-\u244A\u249C-\u24E9\u2500-\u25B6\u25B8-\u25C0\u25C2-\u25F7\u2600-\u266E\u2670-\u2767\u2794-\u27BF\u2800-\u28FF\u2B00-\u2B2F\u2B45\u2B46\u2B4D-\u2B73\u2B76-\u2B95\u2B97-\u2BFF\u2CE5-\u2CEA\u2E50\u2E51\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3004\u3012\u3013\u3020\u3036\u3037\u303E\u303F\u3190\u3191\u3196-\u319F\u31C0-\u31E3\u3200-\u321E\u322A-\u3247\u3250\u3260-\u327F\u328A-\u32B0\u32C0-\u33FF\u4DC0-\u4DFF\uA490-\uA4C6\uA828-\uA82B\uA836\uA837\uA839\uAA77-\uAA79\uFDFD\uFFE4\uFFE8\uFFED\uFFEE\uFFFC\uFFFD', + 'astral': '\uD800[\uDD37-\uDD3F\uDD79-\uDD89\uDD8C-\uDD8E\uDD90-\uDD9C\uDDA0\uDDD0-\uDDFC]|\uD802[\uDC77\uDC78\uDEC8]|\uD805\uDF3F|\uD807[\uDFD5-\uDFDC\uDFE1-\uDFF1]|\uD81A[\uDF3C-\uDF3F\uDF45]|\uD82F\uDC9C|\uD834[\uDC00-\uDCF5\uDD00-\uDD26\uDD29-\uDD64\uDD6A-\uDD6C\uDD83\uDD84\uDD8C-\uDDA9\uDDAE-\uDDE8\uDE00-\uDE41\uDE45\uDF00-\uDF56]|\uD836[\uDC00-\uDDFF\uDE37-\uDE3A\uDE6D-\uDE74\uDE76-\uDE83\uDE85\uDE86]|\uD838\uDD4F|\uD83B[\uDCAC\uDD2E]|\uD83C[\uDC00-\uDC2B\uDC30-\uDC93\uDCA0-\uDCAE\uDCB1-\uDCBF\uDCC1-\uDCCF\uDCD1-\uDCF5\uDD0D-\uDDAD\uDDE6-\uDE02\uDE10-\uDE3B\uDE40-\uDE48\uDE50\uDE51\uDE60-\uDE65\uDF00-\uDFFA]|\uD83D[\uDC00-\uDED7\uDEE0-\uDEEC\uDEF0-\uDEFC\uDF00-\uDF73\uDF80-\uDFD8\uDFE0-\uDFEB]|\uD83E[\uDC00-\uDC0B\uDC10-\uDC47\uDC50-\uDC59\uDC60-\uDC87\uDC90-\uDCAD\uDCB0\uDCB1\uDD00-\uDD78\uDD7A-\uDDCB\uDDCD-\uDE53\uDE60-\uDE6D\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6\uDF00-\uDF92\uDF94-\uDFCA]' + }, + { + 'name': 'Z', + 'alias': 'Separator', + 'bmp': ' \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000' + }, + { + 'name': 'Zl', + 'alias': 'Line_Separator', + 'bmp': '\u2028' + }, + { + 'name': 'Zp', + 'alias': 'Paragraph_Separator', + 'bmp': '\u2029' + }, + { + 'name': 'Zs', + 'alias': 'Space_Separator', + 'bmp': ' \xA0\u1680\u2000-\u200A\u202F\u205F\u3000' + } + ]; + + var jabref = createCommonjsModule(function (module, exports) { + Object.defineProperty(exports, "__esModule", { value: true }); + exports.parse = void 0; + function decode(s, sep = ';') { + s = s.replace(/\n/g, ''); + let pos = 0; + const records = ['']; + while (pos < s.length) { + switch (s[pos]) { + case '\\': + pos++; + records[0] += s[pos]; + break; + case sep: + records.unshift(''); + break; + default: + records[0] += s[pos]; + } + pos++; + } + return records.reverse().filter(record => record); + } + const prefixes = { + fileDirectory: 'jabref-meta: fileDirectory:', + groupsversion: 'jabref-meta: groupsversion:', + groupstree: 'jabref-meta: groupstree:', + grouping: 'jabref-meta: grouping:', + }; + /** + * Import the JabRef groups from the `@string` comments in which they were stored. You would typically pass the comments parsed by [[bibtex.parse]] in here. + * + * JabRef knows several group types, and this parser parses most, but not all of them: + * + * * independent group: the keys listed in the group are the entries that are considered to belong to it + * * intersection: the keys listed in the group are considered to belong to the group if they're also in the parent group + * * union: the keys listed in the group are considered to belong to the group, and also the keys that are in the parent group + * * query: not supported by this parser + */ + function parse(comments) { + const result = { + root: [], + groups: {}, + fileDirectory: '', + version: '', + }; + const levels = []; + const decoded = { + fileDirectory: null, + groupsversion: null, + groupstree: null, + grouping: null, + }; + for (const comment of comments) { + for (const [meta, prefix] of Object.entries(prefixes)) { + if (comment.startsWith(prefix)) { + decoded[meta] = decode(comment.substring(prefix.length)); + } + } + } + result.version = decoded.groupsversion && decoded.groupsversion[0]; + result.fileDirectory = decoded.fileDirectory && decoded.fileDirectory[0]; + for (const tree of ['groupstree', 'grouping']) { + if (!decoded[tree]) + continue; + for (const encoded of decoded[tree]) { + const fields = decode(encoded); + const level_type_name = decode(fields.shift(), ':'); + const m = /^([0-9]+) (.+)/.exec(level_type_name[0]); + if (!m) + break; + const level = parseInt(m[1]); + const type = m[2]; // test for StaticGroup? + if (type === 'AllEntriesGroup') + continue; // root + const name = level_type_name[1]; + const intersection = decode(fields.shift())[0]; + const keys = tree === 'grouping' ? [] : fields.map(field => decode(field)[0]); + const group = { + name, + entries: keys, + groups: [], + }; + result.groups[name] = result.groups[name] || group; + if (levels.length < level) { + levels.push(group); + } + else { + levels[level - 1] = group; + } + if (level === 1) { + result.root.push(group); + } + else { + const parent = levels[level - 2]; + switch (intersection) { + case '0': // independent + break; + case '1': // intersect + group.entries = group.entries.filter(key => parent.entries.includes(key)); + break; + case '2': // union + group.entries = group.entries.concat(parent.entries.filter(key => !group.entries.includes(key))); + break; + } + levels[level - 2].groups.push(group); + } + } + } + return result; + } + exports.parse = parse; + + }); + + var bibtexParser = createCommonjsModule(function (module, exports) { + Object.defineProperty(exports, "__esModule", { value: true }); + exports.jabref = exports.chunker = exports.ast = exports.parse = void 0; + + + + class ParserError extends Error { + constructor(message, node) { + super(message); // 'Error' breaks prototype chain here + Object.setPrototypeOf(this, new.target.prototype); // restore prototype chain + this.name = this.constructor.name; + this.node = node; + } + } + class TeXError extends Error { + constructor(message, node, text) { + super(message); // 'Error' breaks prototype chain here + Object.setPrototypeOf(this, new.target.prototype); // restore prototype chain + this.name = this.constructor.name; + this.node = node; + this.text = text; + } + } + + const charClass = { + Lu: categories.filter(cat => ['Uppercase_Letter', 'Titlecase_Letter'].includes(cat.alias)).map(cat => cat.bmp).join(''), + Ll: categories.find(cat => cat.alias === 'Lowercase_Letter').bmp, + LnotLu: categories.filter(cat => ['Lowercase_Letter', 'Modifier_Letter', 'Other_Letter', 'Nonspacing_Mark', 'Spacing_Mark', 'Decimal_Number', 'Letter_Number'].includes(cat.alias)).map(cat => cat.bmp).join(''), + P: categories.find(cat => cat.alias === 'Punctuation').bmp, + L: categories.find(cat => cat.alias === 'Letter').bmp, + N: categories.filter(cat => ['Decimal_Number', 'Letter_Number'].includes(cat.alias)).map(cat => cat.bmp).join(''), + AlphaNum: categories.filter(cat => ['Letter', 'Decimal_Number', 'Letter_Number'].includes(cat.alias)).map(cat => cat.bmp).join(''), + LC: categories.find(cat => cat.alias === 'Cased_Letter').bmp, + }; + const marker = { + and: '\u0001', + comma: '\u0002', + space: '\u0003', + literal: '\u0004', + markup: '\u0005', + re: { + and: /./, + comma: /./, + space: /./, + literal: /./, + literalName: /./, + }, + clean(s) { + return s.replace(marker.re.space, ' ').replace(marker.re.comma, ', ').replace(marker.re.literal, ''); + }, + }; + marker.re = { + and: new RegExp(marker.and, 'g'), + comma: new RegExp(marker.comma, 'g'), + space: new RegExp(marker.space, 'g'), + literal: new RegExp(marker.literal, 'g'), + literalName: new RegExp(`^${marker.literal}([^${marker.literal}]*)${marker.literal}$`), + }; + const preserveCase = { + leadingCap: new RegExp(`^[${charClass.Lu}][${charClass.LnotLu}]+[${charClass.P}]?$`), + allCaps: new RegExp(`^[${charClass.Lu}${charClass.N}]{2,}$`), + allLower: new RegExp(`^[${charClass.Ll}${charClass.N}]{2,}$`), + joined: new RegExp(`^[${charClass.Lu}][${charClass.LnotLu}]*([-+][${charClass.L}${charClass.N}]+)*[${charClass.P}]*$`), + hasUpper: new RegExp(`[${charClass.Lu}]`), + hasLower: new RegExp(`[${charClass.Ll}]`), + isNumber: /^[0-9]+$/, + hasAlpha: new RegExp(`[${charClass.L}]`), + hasAlphaNum: new RegExp(`[${charClass.AlphaNum}]`), + notAlphaNum: new RegExp(`[^${charClass.AlphaNum}]`, 'g'), + sentenceStart: new RegExp(`(^|([\u2014:?!.]\\s+))[${charClass.Lu}]`, 'g'), + markup: /<\/?span[^>]*>/g, + acronym: new RegExp(`.*\\.${marker.markup}*[${charClass.Lu}]${marker.markup}*\\.$`), + notCaseSensitive: new RegExp(`[^${charClass.LC}]`), + isCaseSensitive: new RegExp(`[${charClass.LC}]`), + quoted: /("[^"]+")|(“[^“]+“)/g, + }; + const fields = { + creator: [ + 'author', + 'bookauthor', + 'collaborator', + 'commentator', + 'director', + 'editor', + 'editora', + 'editorb', + 'editors', + 'holder', + 'scriptwriter', + 'translator', + ], + title: [ + 'title', + 'series', + 'shorttitle', + 'booktitle', + 'type', + 'origtitle', + 'maintitle', + 'eventtitle', + ], + unnest: [ + 'publisher', + 'location', + ], + verbatim: [ + 'url', + 'doi', + 'file', + 'files', + 'eprint', + 'verba', + 'verbb', + 'verbc', + 'groups', + ], + html: [ + 'annotation', + 'comment', + 'annote', + 'review', + 'notes', + 'note', + ], + unabbrev: [ + 'journal', + 'journaltitle', + 'journal-full', + ], + }; + const english = [ + 'american', + 'british', + 'canadian', + 'english', + 'australian', + 'newzealand', + 'usenglish', + 'ukenglish', + 'en', + 'eng', + 'en-au', + 'en-bz', + 'en-ca', + 'en-cb', + 'en-gb', + 'en-ie', + 'en-jm', + 'en-nz', + 'en-ph', + 'en-tt', + 'en-us', + 'en-za', + 'en-zw', + 'anglais', + ]; + class Parser { + constructor(options = {}) { + this.in_preamble = false; + this.preamble = []; + this.log = function (str) { }; // tslint:disable-line variable-name only-arrow-functions no-empty + for (const [option, value] of Object.entries(options)) { + if (typeof value === 'undefined') + delete options[option]; + } + if (options.errorHandler === false) { + // tslint:disable-next-line only-arrow-functions no-empty + options.errorHandler = function (err) { }; + } + else if (options.errorHandler === undefined) { + // tslint:disable-next-line only-arrow-functions + options.errorHandler = function (err) { throw err; }; + } + if (typeof options.sentenceCase === 'boolean') { + options.sentenceCase = options.sentenceCase ? english : []; + } + else { + options.sentenceCase = options.sentenceCase || english; + } + if (!options.strings) + options.strings = {}; + if (!options.unabbreviate) + options.unabbreviate = {}; + if (options.raw) { + options.sentenceCase = false; + options.caseProtection = false; + } + this.options = Object.assign({ caseProtection: 'as-needed', verbatimFields: [/^citeulike-linkout-[0-9]+$/, ...fields.verbatim], verbatimCommands: ['url', 'href'], unnestFields: [...fields.title, ...fields.unnest, ...fields.verbatim], unnestMode: 'unwrap', htmlFields: fields.html, guessAlreadySentenceCased: true, markup: {} }, options); + const markup_defaults = { + enquote: { open: '\u201c', close: '\u201d' }, + sub: { open: '', close: '' }, + sup: { open: '', close: '' }, + bold: { open: '', close: '' }, + italics: { open: '', close: '' }, + smallCaps: { open: '', close: '' }, + caseProtect: { open: '', close: '' }, + roman: { open: '', close: '' }, + fixedWidth: { open: '', close: '' }, + }; + // patch in because the options will likely not have enquote and case-protect + for (const [markup, { open, close }] of Object.entries(markup_defaults)) { + this.options.markup[markup] = this.options.markup[markup] || { open, close }; + } + for (const i of [1, 2, 3, 4]) { // tslint:disable-line:no-magic-numbers + this.options.markup[`h${i}`] = this.options.markup[`h${i}`] || { open: ``, close: `` }; + } + this.unresolvedStrings = {}; + this.errors = []; + this.comments = []; + this.entries = []; + this.strings = {}; + this.newcommands = {}; + this.default_strings = { + JAN: [this.text('01')], + FEB: [this.text('02')], + MAR: [this.text('03')], + APR: [this.text('04')], + MAY: [this.text('05')], + JUN: [this.text('06')], + JUL: [this.text('07')], + AUG: [this.text('08')], + SEP: [this.text('09')], + OCT: [this.text('10')], + NOV: [this.text('11')], + DEC: [this.text('12')], + ACMCS: [this.text('ACM Computing Surveys')], + ACTA: [this.text('Acta Informatica')], + CACM: [this.text('Communications of the ACM')], + IBMJRD: [this.text('IBM Journal of Research and Development')], + IBMSJ: [this.text('IBM Systems Journal')], + IEEESE: [this.text('IEEE Transactions on Software Engineering')], + IEEETC: [this.text('IEEE Transactions on Computers')], + IEEETCAD: [this.text('IEEE Transactions on Computer-Aided Design of Integrated Circuits')], + IPL: [this.text('Information Processing Letters')], + JACM: [this.text('Journal of the ACM')], + JCSS: [this.text('Journal of Computer and System Sciences')], + SCP: [this.text('Science of Computer Programming')], + SICOMP: [this.text('SIAM Journal on Computing')], + TOCS: [this.text('ACM Transactions on Computer Systems')], + TODS: [this.text('ACM Transactions on Database Systems')], + TOG: [this.text('ACM Transactions on Graphics')], + TOMS: [this.text('ACM Transactions on Mathematical Software')], + TOOIS: [this.text('ACM Transactions on Office Information Systems')], + TOPLAS: [this.text('ACM Transactions on Programming Languages and Systems')], + TCS: [this.text('Theoretical Computer Science')], + }; + } + ast(input, clean = true) { + const _ast = []; + for (const chunk of chunker.parse(input)) { + let chunk_ast = grammar.parse(chunk.text, Object.assign(Object.assign({}, this.options), { combiningDiacritics: unicode2latex.diacritics.commands })); + if (clean) + chunk_ast = this.clean(chunk_ast); + _ast.push(chunk_ast); + } + return _ast; + } + parse(input) { + return this.options.async ? this.parseAsync(input) : this.parseSync(input); + } + parseSync(input) { + for (const chunk of chunker.parse(input)) { + this.parseChunk(chunk); + } + return this.parsed(); + } + async parseAsync(input) { + for (const chunk of await chunker.parse(input, { async: true })) { + this.parseChunk(chunk); + } + return this.parsed(); + } + parsed() { + this.field = null; + const strings = {}; + this.cleaning = { type: 'other' }; + for (const [key, value] of Object.entries(this.strings)) { + this.field = { + name: '@string', + text: '', + level: 0, + preserveRanges: null, + words: { + upper: 0, + lower: 0, + other: 0, + }, + }; + this.convert(this.clean(value)); + strings[key] = this.field.text; + } + return { + errors: this.errors, + entries: this.entries, + comments: this.comments, + strings, + preamble: this.preamble, + }; + } + preserve(start, end, reason) { + if (!this.field.preserveRanges) + return; + if (!end) { + this.field.preserveRanges = null; + return; + } + /* + this.field.preserveRanges = this.field.preserveRanges.filter(range => range.start < start || range.end > end) + if (this.field.preserveRanges.find(range => range.start <= start && range.end >= end)) return + */ + /* + if (this.field.preserveRanges && this.field.preserveRanges.length) { + const last = this.field.preserveRanges[this.field.preserveRanges.length - 1] + if (start < last.start) throw new Error(JSON.stringify({...last, new: { start, end, reason }, text: this.field.text})) + } + */ + this.field.preserveRanges.push({ start, end, reason }); + } + parseChunk(chunk) { + this.chunk = chunk.text; + try { + let bib = grammar.parse(chunk.text, Object.assign(Object.assign({}, this.options), { combiningDiacritics: unicode2latex.diacritics.commands })); + if (bib.kind !== 'Bibliography') + throw new Error(this.show(bib)); + bib = this.clean(bib); + for (const entity of bib.children) { + switch (entity.kind) { + case 'Entry': + case 'BracedComment': + case 'LineComment': + case 'PreambleExpression': + this.convert(entity); + break; + case 'StringDeclaration': + case 'NonEntryText': + break; + } + } + return bib; + } + catch (err) { + if (!err.location) + throw err; + this.errors.push({ + message: err.message, + line: err.location.start.line + chunk.offset.line, + column: err.location.start.column, + source: this.chunk, + }); + return null; + } + } + show(o) { + // tslint:disable-next-line prefer-template + let text = JSON.stringify(o); + if (this.chunk) + text += '\n' + this.chunk.trim(); + return text; + } + text(value = '') { + return { kind: 'Text', value, mode: 'text' }; + } + error(err, returnvalue) { + if (typeof this.options.errorHandler === 'function') + this.options.errorHandler(err); + return returnvalue; + } + condense(node) { + // apply cleaning to resulting children + node.value = node.value.map(child => this.clean(child)); + // unpack redundant blocks + node.value = node.value.reduce((acc, child, i) => { + if (child.kind === 'Block' && !child.case && Object.keys(child.markup).length === 0) { + acc = acc.concat(child.value); + } + else { + acc.push(child); + } + return acc; + }, []); + // condense text nodes to make whole words for sentence casing + node.value = node.value.reduce((acc, child, i) => { + if (acc.length === 0) { + acc.push(child); + return acc; + } + const last = acc[acc.length - 1]; + const next = node.value[i + 1]; + if (this.options.caseProtection === 'strict' && this.onlyCaseProtected(last) && child.kind === 'Text' && !child.value.match(preserveCase.isCaseSensitive) && this.onlyCaseProtected(next)) { + last.value.push(child); + delete last.source; + return acc; + } + if (last.kind === 'Block' && child.kind === 'Block' && Object.keys(last.markup).sort().join('/') === Object.keys(child.markup).sort().join('/')) { + last.value = last.value.concat(child.value); + delete last.source; + return acc; + } + if (last.kind === 'Text' && child.kind === 'Text' && last.mode === child.mode) { + last.value += child.value; + delete last.source; + return acc; + } + acc.push(child); + return acc; + }, []); + } + onlyCaseProtected(node) { + return (node === null || node === void 0 ? void 0 : node.kind) === 'Block' && node.case === 'protect' && Object.keys(node.markup).join('/') === ''; + } + argument(node, kind) { + if (!node.arguments || !node.arguments.required.length) + return (kind === 'none'); + // expect 'n' text arguments + if (typeof kind === 'number') { + if (node.arguments.required.length !== kind) + return false; + return node.arguments.required; + } + // return first argument if it's the only one + if (node.arguments.required.length !== 1) + return false; + // loose checking for text + if (kind === 'text') { + const first = node.arguments.required[0]; + if (first.kind === 'Block' && first.value.length === 1) { + if (first.value[0].kind === 'Text') + return first.value[0].value; + } + // fall back to strict kind check + kind = 'Text'; + } + // return first argument if it's the only one and is of the specified kind + if (node.arguments.required.length !== 1 || node.arguments.required[0].kind !== kind) + return false; + switch (kind) { + case 'Text': + return node.arguments.required[0].value; + case 'RegularCommand': + case 'Block': + return node.arguments.required[0]; + } + return false; + } + clean(node) { + if (Array.isArray(node)) + return node.map(child => this.clean(child)); + delete node.loc; + switch (node.kind) { + case 'InlineMath': + case 'DisplayMath': + return this.clean_block(node); + case 'Environment': + return this.clean_environment(node); + case 'Block': + return this.clean_block(node); + case 'Bibliography': + return this.clean_bib(node); + case 'RegularCommand': + return this.clean_command(node); + case 'DiacriticCommand': + return this.clean_diacritic(node); + case 'Entry': + return this.clean_entry(node); + case 'Field': + return this.options.raw ? node : this.clean_field(node); + case 'StringDeclaration': + return this.clean_stringdecl(node); + case 'StringReference': + return this.clean_stringref(node); + case 'SubscriptCommand': + case 'SuperscriptCommand': + return this.clean_script(node); + case 'SymbolCommand': + return this.clean_symbol(node); + case 'PreambleExpression': + return this.clean_preamble(node); + case 'Number': + case 'Text': + case 'BracedComment': + case 'LineComment': + return node; + default: + return this.error(new ParserError(`no cleanup method for ${this.show(node)}`, node), this.text()); + } + } + clean_preamble(node) { + this.in_preamble = true; + const clean = this.clean(node.value); + this.in_preamble = false; + return clean; + } + clean_bib(node) { + node.children = node.children.filter(child => child.kind !== 'NonEntryText').map(child => this.clean(child)); + return node; + } + clean_stringdecl(node) { + this.strings[node.name.toUpperCase()] = node.value; + return node; + } + clean_stringref(node) { + var _a; + const name = node.name.toUpperCase(); + const _string = this.strings[name] + || this.options.strings[name] + || this.default_strings[name] + || (fields.unabbrev.includes(this.cleaning.name) && ((_a = this.options.unabbreviate[name]) === null || _a === void 0 ? void 0 : _a.text) && [this.text(this.options.unabbreviate[name].text)]); + if (!_string) { + if (!this.unresolvedStrings[name]) + this.errors.push({ message: `Unresolved @string reference ${JSON.stringify(node.name)}` }); + this.unresolvedStrings[name] = true; + } + return this.clean({ + kind: 'Block', + // if the string isn't found, add it as-is but exempt it from sentence casing + case: _string ? undefined : 'preserve', + markup: {}, + value: _string ? JSON.parse(JSON.stringify(_string)) : [this.text(node.name)], + }); + } + clean_entry(node) { + const shortjournals = []; + for (const field of node.fields) { + if (fields.unabbrev.includes(field.name) && Array.isArray(field.value)) { + const abbr = field.value.map(v => v.source).join(''); + const journal = this.options.unabbreviate[abbr]; + if (journal) { + shortjournals.push(Object.assign(Object.assign({}, JSON.parse(JSON.stringify(field))), { name: 'shortjournal' })); + field.value = JSON.parse(JSON.stringify(journal.ast)); + } + } + } + node.fields = node.fields.concat(shortjournals).map(child => this.clean(child)); + return node; + } + startCleaning(name) { + name = name.toLowerCase(); + if (fields.title.includes(name)) { + this.cleaning = { type: 'title', name }; + } + else if (fields.creator.includes(name.replace(/s$/, ''))) { + this.cleaning = { type: 'creator', name: name.replace(/s$/, '') }; + } + else { + this.cleaning = { type: 'other', name }; + } + } + stripNoCase(node, strip, preserve) { + switch (node.kind) { + case 'RegularCommand': + // a bit cheaty to assume these to be nocased, but it's just more likely to be what people want + if (['chsf', 'bibstring', 'cite'].includes(node.command)) + strip = true; + node.arguments.required.map(arg => this.stripNoCase(arg, strip, preserve)); + break; + case 'Block': + case 'InlineMath': + case 'DisplayMath': + if (strip && node.case === 'protect') { + if (preserve) { + node.case = 'preserve'; + } + else { + delete node.case; + } + } + node.value.map(v => this.stripNoCase(v, strip || node.case === 'protect', preserve)); + break; + case 'Field': + if (Array.isArray(node.value)) + node.value.map(v => this.stripNoCase(v, strip, preserve)); + break; + } + } + isVerbatimField(name) { + return !!this.options.verbatimFields.find(p => (typeof p === 'string') ? name === p : name.match(p)); + } + clean_field(node) { + this.startCleaning(node.name); + this.stripNoCase(node, !this.options.caseProtection || this.isVerbatimField(node.name), this.options.sentenceCase.length === 0); + if (Array.isArray(node.value)) + this.condense(node); + return node; + } + clean_script(node) { + let m, value, singlechar; + // recognize combined forms like \^\circ + if (singlechar = unicode2latex.latex[node.source]) + return this.text(singlechar); + if ((m = node.source.match(/^([\^_])([^{}]+)$/)) && ((singlechar = unicode2latex.latex[`${m[1]}${m[2]}`]) || (singlechar = unicode2latex.latex[`${m[1]}{${m[2]}}`]))) + return this.text(singlechar); + if ((m = node.source.match(/^([\^_])\{([^{}]+)\}$/)) && ((singlechar = unicode2latex.latex[`${m[1]}${m[2]}`]) || (singlechar = unicode2latex.latex[`${m[1]}{${m[2]}}`]))) + return this.text(singlechar); + const cmd = node.kind === 'SuperscriptCommand' ? '^' : '_'; + if (typeof node.value === 'string' && (singlechar = unicode2latex.latex[`${cmd}${node.value}`] || unicode2latex.latex[`${cmd}{${node.value}}`])) { + return this.text(singlechar); + } + if (typeof node.value === 'string') { + value = [this.text(node.value)]; + } + else if (!Array.isArray(node.value)) { + value = [node.value]; + } + else { + value = node.value; + } + const mode = node.kind === 'SuperscriptCommand' ? 'sup' : 'sub'; + return this.clean({ + kind: 'Block', + markup: { [mode]: true }, + value, + }); + } + clean_environment(node) { + this.condense(node); + return node; + } + needsProtection(word) { + return !word.match(preserveCase.hasUpper) && word.match(preserveCase.hasLower); + } + clean_block(node) { + var _a; + this.condense(node); + if (this.options.caseProtection !== 'strict' && ((_a = this.cleaning) === null || _a === void 0 ? void 0 : _a.type) === 'title' && node.case === 'protect') { + // test whether we can get away with skipping case protection because it contains all words that will be preserved anyway when converting back to Title Case + let preserve = true; + for (const child of node.value) { + if (child.kind === 'Text') { + const value = child.value.trim(); + preserve = !value.match(preserveCase.isCaseSensitive) || !value.split(/\s+/).find(word => this.needsProtection(word)); + } + else { + preserve = false; + } + if (!preserve) + break; + } + if (preserve) + node.case = 'preserve'; + } + if (node.kind === 'Block') { + for (const [markup, on] of Object.entries(node.markup)) { + if (!on) + delete node.markup[markup]; + } + } + return node; + } + clean_diacritic(node) { + const char = node.dotless ? `\\${node.character}` : node.character; + let unicode = unicode2latex.latex[`\\${node.mark}{${char}}`] + || unicode2latex.latex[`\\${node.mark}${char}`] + || unicode2latex.latex[`{\\${node.mark} ${char}}`] + || unicode2latex.latex[`{\\${node.mark}${char}}`] + || unicode2latex.latex[`\\${node.mark} ${char}`]; + if (!unicode && !node.dotless && node.character.length === 1 && unicode2latex.diacritics.tounicode[node.mark]) + unicode = node.character + unicode2latex.diacritics.tounicode[node.mark]; + if (!unicode && !this.in_preamble) + return this.error(new TeXError(`Unhandled \\${node.mark}{${char}}`, node, this.chunk), this.text()); + return this.text(unicode); + } + clean_symbol(node) { + if (node.command === '\\') + return this.text('\n'); + return this.text(unicode2latex.latex[`\\${node.command}`] || node.command); + } + first_text_block(node) { + if (!node) + return null; + if (node.kind === 'Block') { + for (const child of node.value) { + switch (child.kind) { + case 'Text': + return child.value ? node : null; + case 'Block': + const candidate = this.first_text_block(child); + if (candidate) + return candidate; + break; + default: + return null; + } + } + } + else { + return null; + } + } + clean_command(node) { + var _a; + let arg, unicode; + if (unicode = unicode2latex.latex[node.source]) + return this.text(unicode); + switch (node.command) { + case 'newcommand': + if (((_a = node.arguments) === null || _a === void 0 ? void 0 : _a.required.length) === 2 + && node.arguments.required[0].kind === 'Block' + && node.arguments.required[0].value.length === 1 + && node.arguments.required[0].value[0].kind === 'RegularCommand' + && node.arguments.required[1].kind === 'Block') { + this.newcommands[node.arguments.required[0].value[0].command] = node.arguments.required[1].value; + return this.text(); + } + // console.log('newcommand?', JSON.stringify(node, null, 2)) + break; + case 'item': + return { kind: 'Markup', value: '
  • ', source: node.source }; + case 'frac': + if (arg = this.argument(node, 2)) { + if (arg[0].kind === 'Text' && arg[1].kind === 'Text' && (unicode = unicode2latex.latex[`\\frac{${arg[0].value}}{${arg[1].value}}`])) + return this.text(unicode); + return this.clean({ + kind: 'Block', + case: 'protect', + markup: {}, + value: [ + { kind: 'Block', markup: { sup: true }, value: [arg[0]] }, + this.text('\u2044'), + { kind: 'Block', markup: { sub: true }, value: [arg[1]] }, + ], + }); + } + break; + // ignore + case 'vspace': + case 'vphantom': + case 'path': + case 'aftergroup': + case 'ignorespaces': + case 'relax': + case 'noopsort': + case 'ifdefined': + case 'DeclarePrefChars': + case 'else': + case 'fi': + case 'makeatletter': + return this.text(); + case 'ElsevierGlyph': + if (arg = this.argument(node, 'Text')) { + if (unicode = unicode2latex.latex[`\\${node.command}{${arg}}`]) + return this.text(unicode); + return this.text(String.fromCharCode(parseInt(arg, 16))); + } + break; + case 'chsf': + if (this.argument(node, 'none')) + return this.text(); + if (arg = this.argument(node, 'Block')) + return this.clean(arg); + break; + case 'bibstring': + if (arg = this.argument(node, 'Block')) + return this.clean(arg); + break; + case 'cite': + if (arg = this.argument(node, 'Block')) + return this.clean(arg); + break; + case 'textsuperscript': + case 'sp': + if ((arg = this.argument(node, 'Text')) && (unicode = unicode2latex.latex[`^{${arg}}`])) + return this.text(unicode); + if (arg = this.argument(node, 'Block')) + return this.clean(arg); + break; + case 'textsubscript': + case 'sb': + if ((arg = this.argument(node, 'Text')) && (unicode = unicode2latex.latex[`_{${arg}}`])) + return this.text(unicode); + if (arg = this.argument(node, 'Block')) + return this.clean(arg); + break; + case 'textsc': + if (arg = this.argument(node, 'Block')) + return this.clean(arg); + break; + case 'enquote': + case 'mkbibquote': + if (arg = this.argument(node, 'Block')) + return this.clean(arg); + break; + case 'textbf': + case 'mkbibbold': + if (arg = this.argument(node, 'Block')) + return this.clean(arg); + break; + case 'section': + case 'subsection': + case 'subsubsection': + case 'subsubsubsection': + if (arg = this.argument(node, 'Block')) + return this.clean(arg); + break; + case 'mkbibitalic': + case 'mkbibemph': + case 'textit': + case 'emph': + if (arg = this.argument(node, 'Block')) + return this.clean(arg); + if (arg = this.argument(node, 'Text')) + return this.clean({ kind: 'Block', markup: { italics: true }, value: [this.text(arg)] }); + break; + case 'bibcyr': + if (this.argument(node, 'none')) + return this.text(); + if (arg = this.argument(node, 'Block')) + return this.clean(arg); + break; + case 'hspace': + case 'mathrm': + case 'textrm': + case 'ocirc': + case 'mbox': + if (arg = this.argument(node, 'text')) { + unicode = unicode2latex.latex[`\\${node.command}{${arg}}`]; + return this.text(unicode || (node.command === 'hspace' ? ' ' : arg)); + } + else if (!node.arguments.required.length) { + return this.text(); + } + else if (arg = this.argument(node, 'Block')) { + return this.clean(arg); + } + break; + // just take the URL? Not the label? + case 'href': + if (arg = this.argument(node, 2)) + return this.clean(arg[0]); + break; + case 'url': + if (arg = this.argument(node, 'Text')) + return this.text(arg); + if (arg = this.argument(node, 'Block')) + return this.clean(arg); + break; + case 'sl': + case 'em': + case 'it': + case 'itshape': + case 'bf': + case 'bfseries': + case 'sc': + case 'scshape': + case 'tt': + case 'rm': + case 'sf': + case 'verb': + // handled in the grammar + return this.text(); + // wouldn't know what to do with these + case 'left': + case 'right': + return this.text(); + case 'par': + return this.text('\n\n'); + case 'cyr': + if (this.argument(node, 'none')) + return this.text(); + break; + case 'polhk': + if (unicode = this.argument(node, 'text')) { + if (unicode.length === 1) + return this.text(unicode + '\u0328'); + } + if (this.argument(node, 'none')) + return this.text('\u0328'); + break; + default: + if (node.kind === 'RegularCommand' && this.newcommands[node.command]) { + return this.clean({ + kind: 'Block', + markup: {}, + value: JSON.parse(JSON.stringify(this.newcommands[node.command])), + }); + } + if (unicode2latex.diacritics.tounicode[node.command]) { + node.arguments.required = this.clean(node.arguments.required); + let block; + if (node.arguments.required.length === 1 && node.arguments.required[0].kind === 'Text') { + // no idea why I can't just straight return this but typescript just won't shut up + block = { + kind: 'Block', + markup: {}, + value: [{ + kind: 'DiacriticCommand', + mark: node.command, + character: node.arguments.required[0].value, + dotless: false, + loc: node.arguments.required[0].loc, + source: node.arguments.required[0].source, + }], + }; + return this.clean(block); + } + else if (block = this.first_text_block(node.arguments.required[0])) { + let fixed = false; + block.value = block.value.reduce((value, child) => { + if (!fixed && child.kind === 'Text') { + fixed = true; + value.push({ kind: 'DiacriticCommand', mark: node.command, character: child.value[0] }); + value.push(Object.assign(Object.assign({}, child), { value: child.value.substring(1) })); + } + else { + value.push(child); + } + return value; + }, []); + return this.clean({ + kind: 'Block', + markup: {}, + value: node.arguments.required, + }); + } + else { + // overline without arguments doesn't seem to render in LaTeX + if (node.command === 'overline') + return this.text(' '); + return this.clean({ + kind: 'Block', + markup: {}, + value: [this.text(' ' + unicode2latex.diacritics.tounicode[node.command])].concat(node.arguments.required), + }); + } + } + if (unicode = unicode2latex.latex[node.source] || unicode2latex.latex[`${node.source}{}`]) + return this.text(unicode); + if ((unicode = unicode2latex.latex[`\\${node.command}`] || unicode2latex.latex[`\\${node.command}{}`]) && this.argument(node, 'none')) + return this.text(unicode); + if ((arg = this.argument(node, 'Text')) && (unicode = unicode2latex.latex[`\\${node.command}{${arg}}`])) + return this.text(unicode); + break; + } + if (this.in_preamble) + return this.text(node.source); + return this.error(new TeXError(`Unhandled command: ${node.command}` + this.show(node), node, this.chunk), this.text()); + } + preserveCase(word) { + // word = word.replace(new RegExp(`"[${this.markup.enquote.open}${this.markup.enquote.close}:()]`, 'g'), '') + var _a, _b; + if (!word.trim()) + return false; + if (!word.match(preserveCase.hasAlphaNum)) + return true; + word = word.replace(/[\/’'”:()]/g, ''); + if (word === 'I') + return true; + if (word.length === 1) + return false; + if (word.replace(preserveCase.notCaseSensitive) === '') + return false; + // word = word.replace(preserveCase.notAlphaNum, '') + // simple cap at start of field + if (word.match(preserveCase.leadingCap) && ((_b = (_a = this.field) === null || _a === void 0 ? void 0 : _a.text) === null || _b === void 0 ? void 0 : _b.length) === 0) + return false; + if (word.match(preserveCase.allCaps)) + return true; + if (word.length > 1 && word.match(preserveCase.joined)) + return false; + if (word.match(preserveCase.hasUpper)) + return true; + if (word.match(preserveCase.isNumber)) + return true; + return false; + } + convert(node) { + if (Array.isArray(node)) + return node.map(child => this.convert(child)); + if (this.options.raw && this.field) + node = this.text(node.source); + switch (node.kind) { + case 'Markup': + if (this.field) + this.field.text += node.value; + break; + case 'BracedComment': + case 'LineComment': + this.comments.push(node.value); + break; + case 'Entry': + this.convert_entry(node); + break; + case 'Number': + this.convert_number(node); + break; + case 'Text': + this.convert_text(node); + break; + case 'Block': + case 'InlineMath': + case 'DisplayMath': + const start = this.field ? this.field.text.length : null; + const preserve = typeof start === 'number' && this.field.preserveRanges; + this.convert_block(node); + if (preserve && (node.case || node.kind.endsWith('Math'))) + this.preserve(start, this.field.text.length); // , `convert-block: case=${node.case}, math=${node.kind.endsWith('Math')}`) + break; + case 'Environment': + this.convert_environment(node); + break; + case 'PreambleExpression': + this.preamble.push(node.value.map(preamble => preamble.source).join('\n\n')); + break; + case 'DisplayMath': + case 'InlineMath': + case 'StringDeclaration': + break; + default: + return this.error(new ParserError(`no converter for ${node.kind}: ${this.show(node)}`, node), undefined); + } + } + splitOnce(s, sep, fromEnd = false) { + const split = fromEnd ? s.lastIndexOf(sep) : s.indexOf(sep); + return (split < 0) ? [s, ''] : [s.substr(0, split), s.substr(split + 1)]; + } + parseName(name) { + let parsed = null; + const parts = name.split(marker.comma); + if (parts.length && !parts.find(p => !p.match(/^[a-z]+(-i)?=/i))) { // extended name format + for (const part of parts) { + parsed = parsed || {}; + const [attr, value] = this.splitOnce(part.replace(marker.re.space, ''), '=').map(v => v.trim()); + if (!value) { + parsed = null; + break; + } + switch (attr.toLowerCase()) { + case 'family': + parsed.lastName = value; + break; + case 'given-i': + parsed.initial = value; + break; + case 'given': + parsed.firstName = value; + break; + case 'prefix': + parsed.prefix = value; + break; + case 'suffix': + parsed.suffix = value; + break; + case 'useprefix': + parsed.useprefix = value.toLowerCase() === 'true'; + break; + case 'juniorcomma': + parsed.useprefix = value.toLowerCase() === 'true'; + break; + default: + parsed[attr.toLowerCase()] = value; + break; + } + } + } + const prefix = /(.+?)\s+(vere|von|van den|van der|van|de|del|della|der|di|da|pietro|vanden|du|st.|st|la|lo|ter|bin|ibn|te|ten|op|ben|al)\s+(.+)/; + let m; + switch (parsed ? 0 : parts.length) { + case 0: + // already parsed + break; + case 1: // name without commas + // literal + if (marker.re.literalName.test(parts[0])) { + parsed = { literal: parts[0] }; + } + else if (m = parts[0].replace(marker.re.space, ' ').match(prefix)) { // split on prefix + parsed = { + firstName: m[1], + prefix: m[2], + lastName: m[3], + }; + } + else { + // top-level "firstname lastname" + const [firstName, lastName] = this.splitOnce(parts[0], marker.space, true); + if (lastName) { + parsed = { firstName, lastName }; + } + else { + parsed = { lastName: firstName }; + } + } + break; + case 2: // lastname, firstname + parsed = { + lastName: parts[0], + firstName: parts[1], + }; + break; + default: // lastname, suffix, firstname + parsed = { + lastName: parts[0], + suffix: parts[1], + firstName: parts.slice(2).join(marker.comma), + }; + } + for (const [k, v] of Object.entries(parsed)) { + if (typeof v !== 'string') + continue; + parsed[k] = marker.clean(v).trim(); + } + return parsed; + } + convert_entry(node) { + var _a; + this.entry = { + key: node.id, + type: node.type, + fields: {}, + creators: {}, + }; + this.entries.push(this.entry); + // order these first for language-dependent sentence casing + const order = ['langid', 'hyphenation', 'language']; + node.fields.sort((a, b) => { + const ia = order.indexOf(a.name); + const ib = order.indexOf(b.name); + if (ia === -1 && ib === -1) + return a.name.localeCompare(b.name); // doesn't matter really + if (ia === -1) + return 1; + if (ib === -1) + return -1; + return ia - ib; + }); + let sentenceCase = !!this.options.sentenceCase.length; // if sentenceCase is empty, no sentence casing + for (const field of node.fields) { + if (field.kind !== 'Field') + return this.error(new ParserError(`Expected Field, got ${field.kind}`, node), undefined); + this.startCleaning(field.name); + /* + if (this.options.raw && this.fieldType !== 'creator') { + this.entry.fields[field.name] = [ field.value.map(v => v.source).join('') ] + continue + } + */ + this.field = { + name: field.name, + text: '', + level: 0, + words: { + upper: 0, + lower: 0, + other: 0, + }, + preserveRanges: (sentenceCase && fields.title.includes(field.name)) ? [] : null, + html: this.options.htmlFields.includes(field.name), + }; + this.entry.fields[this.field.name] = this.entry.fields[this.field.name] || []; + // special case for 'title = 2020' + if (field.value.kind === 'Number') { + this.entry.fields[this.field.name].push(field.value.value); + this.field = null; + continue; + } + this.convert(field.value); + this.field.text = this.field.text.trim(); + this.field.text = this.field.text.replace(/<\/([a-z])><\1>/g, ''); + this.field.text = this.field.text.replace(/<([a-z])>(\s*)<\/\1>/g, '$1'); + if (!this.field.text) + continue; + // disable sentenceCasing if not an english + switch (this.field.name) { + case 'langid': + case 'hyphenation': + sentenceCase = sentenceCase && this.options.sentenceCase.includes(this.field.text.toLowerCase()); + break; + case 'language': + sentenceCase = sentenceCase && !!(this.field.text.toLowerCase().trim().split(/\s*,\s*/).find(lang => this.options.sentenceCase.includes(lang))); + break; + } + // "groups" is a jabref 3.8+ monstrosity + if (this.field.name.match(/^(keywords?|groups)$/)) { + for (let text of this.field.text.split(marker.comma)) { + text = text.trim(); + if (text) + this.entry.fields[this.field.name].push(text); + } + } + else if (this.cleaning.type === 'creator') { + if (!this.entry.creators[this.field.name]) + this.entry.creators[this.field.name] = []; + // {M. Halle, J. Bresnan, and G. Miller} + if (this.field.text.includes(`${marker.comma}${marker.and}`)) { // + this.field.text = this.field.text.replace(new RegExp(`${marker.comma}${marker.and}`, 'g'), marker.and).replace(new RegExp(marker.comma), marker.and); + } + for (const creator of this.field.text.split(marker.and)) { + this.entry.fields[this.field.name].push(marker.clean(creator)); + this.entry.creators[this.field.name].push(this.parseName(creator)); + } + } + else if (fields.unabbrev.includes(field.name)) { // doesn't get sentence casing anyhow TODO: booktitle does! + this.entry.fields[this.field.name].push((((_a = this.options.unabbreviate[this.field.text]) === null || _a === void 0 ? void 0 : _a.text) || this.field.text).normalize('NFC')); + } + else { + if (this.field.preserveRanges) { + if (this.options.guessAlreadySentenceCased && Math.max(this.field.words.upper, this.field.words.lower) > (this.field.words.other + Math.min(this.field.words.upper, this.field.words.lower))) { + this.preserve(null, null); // , 'mostly sentence cased already') + } + else { + const txt = this.field.text.replace(preserveCase.markup, markup => marker.markup.repeat(markup.length)); + let match; + preserveCase.sentenceStart.lastIndex = 0; + while ((match = preserveCase.sentenceStart.exec(txt))) { + // exclude stuff like "U.S. Taxes" + if (match.index > 2 && txt.substr(0, match.index + 1).match(preserveCase.acronym)) + continue; + this.preserve(match.index, match.index + match[0].length); // , `sentenceStart: ${match[0]} at ${match.index}..${match.index + match[0].length}`) + } + preserveCase.quoted.lastIndex = 0; + while ((match = preserveCase.quoted.exec(this.field.text))) { + this.preserve(match.index, match.index + match[0].length); // , 'quoted') + } + } + } + this.entry.fields[this.field.name].push(this.convertToSentenceCase(this.field.text).normalize('NFC')); + } + } + this.field = null; + } + convertToSentenceCase(text) { + if (!this.field.preserveRanges) + return text; + // always keep the leading char, but skip markup + const lead = text.match(/^(<[^>]+>)*./); + if (lead) { + this.preserve(lead[0].length - 1, lead[0].length); + } + else { + this.preserve(0, 1); + } + let sentenceCased = text.toLowerCase().replace(/(([\?!]\s*|^)([\'\"¡¿“‘„«\s]+)?[^\s])/g, x => x.toUpperCase()); + for (const { start, end } of this.field.preserveRanges) { + sentenceCased = sentenceCased.substring(0, start) + text.substring(start, end) + sentenceCased.substring(end); + } + if (text !== sentenceCased) + this.entry.sentenceCased = true; + return sentenceCased; + } + convert_number(node) { + this.field.text += `${node.value}`; + } + convert_text(node) { + if (node.mode === 'verbatim') { + this.field.text += node.value.trim(); + return; + } + // heuristic to detect pre-sentencecased text + for (const word of node.value.split(/\b/)) { + if (word.match(preserveCase.allLower)) { + this.field.words.lower++; + } + else if (word.match(preserveCase.allCaps)) { + this.field.words.upper++; + } + else if (word.match(preserveCase.hasAlpha)) { + this.field.words.other++; + } + } + if (this.field.level === 0 && this.cleaning.type === 'creator') { + this.field.text += node.value.replace(/\s+and\s+/ig, marker.and).replace(/\s*,\s*/g, marker.comma).replace(/\s+/g, marker.space); + return; + } + if (this.field.level === 0 && this.field.name.match(/^(keywords?|groups)$/)) { + this.field.text += node.value.replace(/\s*[;,]\s*/g, marker.comma); + return; + } + if (this.field.html) { + this.field.text += node.value.replace(/&/g, '&').replace(//g, '>'); + } + else if (this.field.preserveRanges) { + const words = node.value.split(/(\s+)/); + for (const word of words) { + const start = this.field.text.length; + this.field.text += word; + if (this.preserveCase(word)) + this.preserve(start, this.field.text.length); // , `word: ${JSON.stringify(word)}`) + } + } + else { + this.field.text += node.value; + } + } + convert_environment(node) { + this.field.text += { enumerate: '
      ', itemize: '
        ' }[node.env]; + this.convert_block(Object.assign(Object.assign({}, node), { kind: 'Block', markup: {} })); + this.field.text += { enumerate: '
    ', itemize: '' }[node.env]; + } + convert_block(node) { + const start = this.field.text.length; + let prefix = ''; + let postfix = ''; + if (this.options.caseProtection !== 'strict' && this.cleaning.type === 'other') + delete node.case; + if (this.cleaning.type === 'creator' && node.case === 'protect') { + prefix += marker.literal; + postfix = marker.literal + postfix; + delete node.case; + } + if (node.case === 'protect') { + prefix += this.options.markup.caseProtect.open; + postfix = this.options.markup.caseProtect.close + postfix; + } + if (node.kind === 'Block') { + for (const markup of Object.keys(node.markup)) { + if (!this.options.markup[markup]) + return this.error(new ParserError(`markup: ${markup}`, node), undefined); + prefix += this.options.markup[markup].open; + postfix = this.options.markup[markup].close + postfix; + } + } + const end = { + withoutPrefix: this.field.text.length, + withPrefix: this.field.text.length + prefix.length, + }; + this.field.text += prefix; + this.field.level++; + this.convert(node.value); + this.field.level--; + const added = this.field.text.substring(end.withPrefix); + const added_text = added.replace(/<\/?[^>]+>/g, ''); + const needsProtection = added_text && ((this.options.caseProtection === 'strict' && added_text.match(preserveCase.isCaseSensitive)) + || + (this.options.caseProtection === 'as-needed' && added_text.split(/\s+/).find(word => this.needsProtection(word)))); + if (!added) { // nothing was added, so remove prefix + this.field.text = this.field.text.substring(0, end.withoutPrefix); + } + else if (this.field.preserveRanges && prefix === this.options.markup.caseProtect.open && !needsProtection) { + // something was added that didn't actually need case protection + this.field.text = this.field.text.substring(0, end.withoutPrefix) + added; + this.field.preserveRanges = this.field.preserveRanges.filter(range => range.start < end.withoutPrefix); + } + else { + this.field.text += postfix; + } + this.field.text = this.field.text.replace(/<(sup|sub)>([^<>]+)<\/\1>$/i, (m, mode, chars) => { + const cmd = mode === 'sup' ? '^' : '_'; + let script = ''; + for (const char of chars) { + const unicode = unicode2latex.latex[`${cmd}${char}`] || unicode2latex.latex[`${cmd}{${char}}`]; + script += unicode ? unicode : `<${mode}>${char}`; + } + script = script.replace(new RegExp(`<${mode}>`, 'g'), ''); + return script.length < m.length ? script : m; + }); + if (node.case && this.field.preserveRanges) + this.preserve(start, this.field.text.length); // , 'in convert-block ' + node.source || '') + } + } + /** + * parse bibtex. This will try to convert TeX commands into unicode equivalents, and apply `@string` expansion + */ + function parse(input, options = {}) { + const parser = new Parser(options); + return parser.parse(input); + } + exports.parse = parse; + function ast(input, options = {}, clean = true) { + const parser = new Parser(options); + return parser.ast(input, clean); + } + exports.ast = ast; + var chunker_2 = chunker; + Object.defineProperty(exports, "chunker", { enumerable: true, get: function () { return chunker_2.parse; } }); + + Object.defineProperty(exports, "jabref", { enumerable: true, get: function () { return jabref.parse; } }); + + }); + + var Library = /** @class */ (function () { + function Library(entries) { + this.entries = entries; + } + Object.defineProperty(Library.prototype, "size", { + get: function () { + return Object.keys(this.entries).length; + }, + enumerable: false, + configurable: true + }); + /** + * For the given citekey, find the corresponding `Entry` and return a + * collection of template variable assignments. + */ + Library.prototype.getTemplateVariablesForCitekey = function (citekey) { + var _a; + var entry = this.entries[citekey]; + var shortcuts = { + citekey: citekey, + abstract: entry.abstract, + authorString: entry.authorString, + containerTitle: entry.containerTitle, + DOI: entry.DOI, + eprint: entry.eprint, + eprinttype: entry.eprinttype, + eventPlace: entry.eventPlace, + note: entry.note, + page: entry.page, + publisher: entry.publisher, + publisherPlace: entry.publisherPlace, + title: entry.title, + titleShort: entry.titleShort, + URL: entry.URL, + year: (_a = entry.year) === null || _a === void 0 ? void 0 : _a.toString(), + zoteroSelectURI: entry.zoteroSelectURI, + }; + return __assign({ entry: entry.toJSON() }, shortcuts); + }; + return Library; + }()); + /** + * Load reference entries from the given raw database data. + * + * Returns a list of `EntryData`, which should be wrapped with the relevant + * adapter and used to instantiate a `Library`. + */ + function loadEntries(databaseRaw, databaseType) { + var libraryArray; + if (databaseType == 'csl-json') { + libraryArray = JSON.parse(databaseRaw); + } + else if (databaseType == 'biblatex') { + var options = { + errorHandler: function (err) { + console.warn('Citation plugin: non-fatal error loading BibLaTeX entry:', err); + }, + }; + var parsed = bibtexParser.parse(databaseRaw, options); + parsed.errors.forEach(function (error) { + console.error("Citation plugin: fatal error loading BibLaTeX entry" + + (" (line " + error.line + ", column " + error.column + "):"), error.message); + }); + libraryArray = parsed.entries; + } + return libraryArray; + } + /** + * An `Entry` represents a single reference in a reference database. + * Each entry has a unique identifier, known in most reference managers as its + * "citekey." + */ + var Entry = /** @class */ (function () { + function Entry() { + } + Object.defineProperty(Entry.prototype, "year", { + get: function () { + var _a; + return this._year + ? parseInt(this._year) + : (_a = this.issuedDate) === null || _a === void 0 ? void 0 : _a.getUTCFullYear(); + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(Entry.prototype, "note", { + get: function () { + var _a; + return (_a = this._note) === null || _a === void 0 ? void 0 : _a.map(function (el) { return el.replace(/(zotero:\/\/.+)/g, '[Link]($1)'); }).join('\n\n'); + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(Entry.prototype, "zoteroSelectURI", { + /** + * A URI which will open the relevant entry in the Zotero client. + */ + get: function () { + return "zotero://select/items/@" + this.id; + }, + enumerable: false, + configurable: true + }); + Entry.prototype.toJSON = function () { + var _this = this; + var jsonObj = Object.assign({}, this); + // add getter values + var proto = Object.getPrototypeOf(this); + Object.entries(Object.getOwnPropertyDescriptors(proto)) + .filter(function (_a) { + var descriptor = _a[1]; + return typeof descriptor.get == 'function'; + }) + .forEach(function (_a) { + var key = _a[0], descriptor = _a[1]; + if (descriptor && key[0] !== '_') { + try { + var val = _this[key]; + jsonObj[key] = val; + } + catch (error) { + return; + } + } + }); + return jsonObj; + }; + return Entry; + }()); + var EntryCSLAdapter = /** @class */ (function (_super) { + __extends(EntryCSLAdapter, _super); + function EntryCSLAdapter(data) { + var _this = _super.call(this) || this; + _this.data = data; + _this.eprint = null; + _this.eprinttype = null; + _this.files = null; + return _this; + } + Object.defineProperty(EntryCSLAdapter.prototype, "id", { + get: function () { + return this.data.id; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryCSLAdapter.prototype, "type", { + get: function () { + return this.data.type; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryCSLAdapter.prototype, "abstract", { + get: function () { + return this.data.abstract; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryCSLAdapter.prototype, "author", { + get: function () { + return this.data.author; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryCSLAdapter.prototype, "authorString", { + get: function () { + return this.data.author + ? this.data.author.map(function (a) { return a.given + " " + a.family; }).join(', ') + : null; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryCSLAdapter.prototype, "containerTitle", { + get: function () { + return this.data['container-title']; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryCSLAdapter.prototype, "DOI", { + get: function () { + return this.data.DOI; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryCSLAdapter.prototype, "eventPlace", { + get: function () { + return this.data['event-place']; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryCSLAdapter.prototype, "issuedDate", { + get: function () { + if (!(this.data.issued && + this.data.issued['date-parts'] && + this.data.issued['date-parts'][0].length > 0)) + return null; + var _a = this.data.issued['date-parts'][0], year = _a[0], month = _a[1], day = _a[2]; + return new Date(Date.UTC(year, (month || 1) - 1, day || 1)); + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryCSLAdapter.prototype, "page", { + get: function () { + return this.data.page; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryCSLAdapter.prototype, "publisher", { + get: function () { + return this.data.publisher; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryCSLAdapter.prototype, "publisherPlace", { + get: function () { + return this.data['publisher-place']; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryCSLAdapter.prototype, "title", { + get: function () { + return this.data.title; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryCSLAdapter.prototype, "titleShort", { + get: function () { + return this.data['title-short']; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryCSLAdapter.prototype, "URL", { + get: function () { + return this.data.URL; + }, + enumerable: false, + configurable: true + }); + return EntryCSLAdapter; + }(Entry)); + var BIBLATEX_PROPERTY_MAPPING = { + abstract: 'abstract', + booktitle: '_containerTitle', + date: 'issued', + doi: 'DOI', + eprint: 'eprint', + eprinttype: 'eprinttype', + eventtitle: 'event', + journal: '_containerTitle', + journaltitle: '_containerTitle', + location: 'publisherPlace', + pages: 'page', + shortjournal: 'containerTitleShort', + title: 'title', + shorttitle: 'titleShort', + url: 'URL', + venue: 'eventPlace', + year: '_year', + publisher: 'publisher', + note: '_note', + }; + // BibLaTeX parser returns arrays of property values (allowing for repeated + // property entries). For the following fields, just blindly take the first. + var BIBLATEX_PROPERTY_TAKE_FIRST = [ + 'abstract', + 'booktitle', + '_containerTitle', + 'date', + 'doi', + 'eprint', + 'eprinttype', + 'eventtitle', + 'journaltitle', + 'location', + 'pages', + 'shortjournal', + 'title', + 'shorttitle', + 'url', + 'venue', + '_year', + 'publisher', + ]; + var EntryBibLaTeXAdapter = /** @class */ (function (_super) { + __extends(EntryBibLaTeXAdapter, _super); + function EntryBibLaTeXAdapter(data) { + var _this = _super.call(this) || this; + _this.data = data; + Object.entries(BIBLATEX_PROPERTY_MAPPING).forEach(function (map) { + var src = map[0], tgt = map[1]; + if (src in _this.data.fields) { + var val = _this.data.fields[src]; + if (BIBLATEX_PROPERTY_TAKE_FIRST.includes(src)) { + val = val[0]; + } + _this[tgt] = val; + } + }); + return _this; + } + Object.defineProperty(EntryBibLaTeXAdapter.prototype, "id", { + get: function () { + return this.data.key; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryBibLaTeXAdapter.prototype, "type", { + get: function () { + return this.data.type; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryBibLaTeXAdapter.prototype, "files", { + get: function () { + // For some reason the bibtex parser doesn't reliably parse file list to + // array ; so we'll do it manually / redundantly + var ret = []; + if (this.data.fields.file) { + ret = ret.concat(this.data.fields.file.flatMap(function (x) { return x.split(';'); })); + } + if (this.data.fields.files) { + ret = ret.concat(this.data.fields.files.flatMap(function (x) { return x.split(';'); })); + } + return ret; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryBibLaTeXAdapter.prototype, "authorString", { + get: function () { + var _a; + if (this.data.creators.author) { + var names = this.data.creators.author.map(function (name) { + if (name.literal) + return name.literal; + var parts = [name.firstName, name.prefix, name.lastName, name.suffix]; + // Drop any null parts and join + return parts.filter(function (x) { return x; }).join(' '); + }); + return names.join(', '); + } + else { + return (_a = this.data.fields.author) === null || _a === void 0 ? void 0 : _a.join(', '); + } + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryBibLaTeXAdapter.prototype, "containerTitle", { + get: function () { + if (this._containerTitle) { + return this._containerTitle; + } + else if (this.data.fields.eprint) { + var prefix = this.data.fields.eprinttype + ? this.data.fields.eprinttype + ":" + : ''; + var suffix = this.data.fields.primaryclass + ? " [" + this.data.fields.primaryclass + "]" + : ''; + return "" + prefix + this.data.fields.eprint + suffix; + } + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryBibLaTeXAdapter.prototype, "issuedDate", { + get: function () { + return this.issued ? new Date(this.issued) : null; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryBibLaTeXAdapter.prototype, "author", { + get: function () { + var _a; + return (_a = this.data.creators.author) === null || _a === void 0 ? void 0 : _a.map(function (a) { return ({ + given: a.firstName, + family: a.lastName, + }); }); + }, + enumerable: false, + configurable: true + }); + return EntryBibLaTeXAdapter; + }(Entry)); + + register(function (msg) { + return loadEntries(msg.databaseRaw, msg.databaseType); + }); + +}()); +}, 'data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2VyLmpzIiwic291cmNlcyI6WyJ3b3JrZXI6Ly93ZWItd29ya2VyL25vZGVfbW9kdWxlcy9wcm9taXNlLXdvcmtlci9yZWdpc3Rlci5qcyIsIndvcmtlcjovL3dlYi13b3JrZXIvbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsIndvcmtlcjovL3dlYi13b3JrZXIvbm9kZV9tb2R1bGVzL0ByZXRvcnF1ZXJlL2JpYnRleC1wYXJzZXIvZ3JhbW1hci5qcyIsIndvcmtlcjovL3dlYi13b3JrZXIvbm9kZV9tb2R1bGVzL0ByZXRvcnF1ZXJlL2JpYnRleC1wYXJzZXIvY2h1bmtlci5qcyIsIndvcmtlcjovL3dlYi13b3JrZXIvbm9kZV9tb2R1bGVzL3VuaWNvZGUybGF0ZXgvaW5kZXguanMiLCJ3b3JrZXI6Ly93ZWItd29ya2VyL25vZGVfbW9kdWxlcy94cmVnZXhwL3Rvb2xzL291dHB1dC9jYXRlZ29yaWVzLmpzIiwid29ya2VyOi8vd2ViLXdvcmtlci9ub2RlX21vZHVsZXMvQHJldG9ycXVlcmUvYmlidGV4LXBhcnNlci9qYWJyZWYuanMiLCJ3b3JrZXI6Ly93ZWItd29ya2VyL25vZGVfbW9kdWxlcy9AcmV0b3JxdWVyZS9iaWJ0ZXgtcGFyc2VyL2luZGV4LmpzIiwic3JjL3R5cGVzLnRzIiwic3JjL3dvcmtlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCdcblxuZnVuY3Rpb24gaXNQcm9taXNlIChvYmopIHtcbiAgLy8gdmlhIGh0dHBzOi8vdW5wa2cuY29tL2lzLXByb21pc2VAMi4xLjAvaW5kZXguanNcbiAgcmV0dXJuICEhb2JqICYmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyB8fCB0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nKSAmJiB0eXBlb2Ygb2JqLnRoZW4gPT09ICdmdW5jdGlvbidcbn1cblxuZnVuY3Rpb24gcmVnaXN0ZXJQcm9taXNlV29ya2VyIChjYWxsYmFjaykge1xuICBmdW5jdGlvbiBwb3N0T3V0Z29pbmdNZXNzYWdlIChlLCBtZXNzYWdlSWQsIGVycm9yLCByZXN1bHQpIHtcbiAgICBmdW5jdGlvbiBwb3N0TWVzc2FnZSAobXNnKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmICh0eXBlb2Ygc2VsZi5wb3N0TWVzc2FnZSAhPT0gJ2Z1bmN0aW9uJykgeyAvLyBzZXJ2aWNlIHdvcmtlclxuICAgICAgICBlLnBvcnRzWzBdLnBvc3RNZXNzYWdlKG1zZylcbiAgICAgIH0gZWxzZSB7IC8vIHdlYiB3b3JrZXJcbiAgICAgICAgc2VsZi5wb3N0TWVzc2FnZShtc2cpXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChlcnJvcikge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgJ2Vycm9yJyBpbiBjb25zb2xlKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgdG8gbWFrZSBlcnJvcnMgZWFzaWVyIHRvIGRlYnVnLiBJIHRoaW5rIGl0J3MgaW1wb3J0YW50XG4gICAgICAgIC8vIGVub3VnaCB0byBqdXN0IGxlYXZlIGhlcmUgd2l0aG91dCBnaXZpbmcgdGhlIHVzZXIgYW4gb3B0aW9uXG4gICAgICAgIC8vIHRvIHNpbGVuY2UgaXQuXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1dvcmtlciBjYXVnaHQgYW4gZXJyb3I6JywgZXJyb3IpXG4gICAgICB9XG4gICAgICBwb3N0TWVzc2FnZShbbWVzc2FnZUlkLCB7XG4gICAgICAgIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2VcbiAgICAgIH1dKVxuICAgIH0gZWxzZSB7XG4gICAgICBwb3N0TWVzc2FnZShbbWVzc2FnZUlkLCBudWxsLCByZXN1bHRdKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHRyeUNhdGNoRnVuYyAoY2FsbGJhY2ssIG1lc3NhZ2UpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHsgcmVzOiBjYWxsYmFjayhtZXNzYWdlKSB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIHsgZXJyOiBlIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVJbmNvbWluZ01lc3NhZ2UgKGUsIGNhbGxiYWNrLCBtZXNzYWdlSWQsIG1lc3NhZ2UpIHtcbiAgICB2YXIgcmVzdWx0ID0gdHJ5Q2F0Y2hGdW5jKGNhbGxiYWNrLCBtZXNzYWdlKVxuXG4gICAgaWYgKHJlc3VsdC5lcnIpIHtcbiAgICAgIHBvc3RPdXRnb2luZ01lc3NhZ2UoZSwgbWVzc2FnZUlkLCByZXN1bHQuZXJyKVxuICAgIH0gZWxzZSBpZiAoIWlzUHJvbWlzZShyZXN1bHQucmVzKSkge1xuICAgICAgcG9zdE91dGdvaW5nTWVzc2FnZShlLCBtZXNzYWdlSWQsIG51bGwsIHJlc3VsdC5yZXMpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5yZXMudGhlbihmdW5jdGlvbiAoZmluYWxSZXN1bHQpIHtcbiAgICAgICAgcG9zdE91dGdvaW5nTWVzc2FnZShlLCBtZXNzYWdlSWQsIG51bGwsIGZpbmFsUmVzdWx0KVxuICAgICAgfSwgZnVuY3Rpb24gKGZpbmFsRXJyb3IpIHtcbiAgICAgICAgcG9zdE91dGdvaW5nTWVzc2FnZShlLCBtZXNzYWdlSWQsIGZpbmFsRXJyb3IpXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG9uSW5jb21pbmdNZXNzYWdlIChlKSB7XG4gICAgdmFyIHBheWxvYWQgPSBlLmRhdGFcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocGF5bG9hZCkgfHwgcGF5bG9hZC5sZW5ndGggIT09IDIpIHtcbiAgICAgIC8vIG1lc3NhZ2UgZG9lbnMndCBtYXRjaCBjb21tdW5pY2F0aW9uIGZvcm1hdDsgaWdub3JlXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdmFyIG1lc3NhZ2VJZCA9IHBheWxvYWRbMF1cbiAgICB2YXIgbWVzc2FnZSA9IHBheWxvYWRbMV1cblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHBvc3RPdXRnb2luZ01lc3NhZ2UoZSwgbWVzc2FnZUlkLCBuZXcgRXJyb3IoXG4gICAgICAgICdQbGVhc2UgcGFzcyBhIGZ1bmN0aW9uIGludG8gcmVnaXN0ZXIoKS4nKSlcbiAgICB9IGVsc2Uge1xuICAgICAgaGFuZGxlSW5jb21pbmdNZXNzYWdlKGUsIGNhbGxiYWNrLCBtZXNzYWdlSWQsIG1lc3NhZ2UpXG4gICAgfVxuICB9XG5cbiAgc2VsZi5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgb25JbmNvbWluZ01lc3NhZ2UpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmVnaXN0ZXJQcm9taXNlV29ya2VyXG4iLCIvKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXHJcblxyXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcclxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxyXG5cclxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxyXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcclxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxyXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cclxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1JcclxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxyXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSAqL1xyXG5cclxudmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbihkLCBiKSB7XHJcbiAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XHJcbiAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxyXG4gICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XHJcbiAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XHJcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH1cclxuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcclxuICAgIHZhciB0ID0ge307XHJcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcclxuICAgICAgICB0W3BdID0gc1twXTtcclxuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcclxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xyXG4gICAgICAgIH1cclxuICAgIHJldHVybiB0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XHJcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cclxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxyXG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19nZW5lcmF0b3IodGhpc0FyZywgYm9keSkge1xyXG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcclxuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XHJcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xyXG4gICAgICAgIHdoaWxlIChfKSB0cnkge1xyXG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XHJcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcclxuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xyXG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XHJcbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgX19jcmVhdGVCaW5kaW5nID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9KTtcclxufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcclxuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICBvW2syXSA9IG1ba107XHJcbn0pO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXhwb3J0U3RhcihtLCBvKSB7XHJcbiAgICBmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIHApKSBfX2NyZWF0ZUJpbmRpbmcobywgbSwgcCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XHJcbiAgICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xyXG4gICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XHJcbiAgICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XHJcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xyXG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVhZChvLCBuKSB7XHJcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XHJcbiAgICBpZiAoIW0pIHJldHVybiBvO1xyXG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XHJcbiAgICBmaW5hbGx5IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZCgpIHtcclxuICAgIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkge1xyXG4gICAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XHJcbiAgICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXHJcbiAgICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXHJcbiAgICAgICAgICAgIHJba10gPSBhW2pdO1xyXG4gICAgcmV0dXJuIHI7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XHJcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpZiAoZ1tuXSkgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxyXG4gICAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XHJcbiAgICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcclxuICAgIHZhciBpLCBwO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IG4gPT09IFwicmV0dXJuXCIgfSA6IGYgPyBmKHYpIDogdjsgfSA6IGY7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGk7XHJcbiAgICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7IFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uKHYpIHsgcmVzb2x2ZSh7IHZhbHVlOiB2LCBkb25lOiBkIH0pOyB9LCByZWplY3QpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ha2VUZW1wbGF0ZU9iamVjdChjb29rZWQsIHJhdykge1xyXG4gICAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7IHZhbHVlOiByYXcgfSk7IH0gZWxzZSB7IGNvb2tlZC5yYXcgPSByYXc7IH1cclxuICAgIHJldHVybiBjb29rZWQ7XHJcbn07XHJcblxyXG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XHJcbn0pIDogZnVuY3Rpb24obywgdikge1xyXG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0U3Rhcihtb2QpIHtcclxuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XHJcbiAgICB2YXIgcmVzdWx0ID0ge307XHJcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XHJcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0RGVmYXVsdChtb2QpIHtcclxuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgZGVmYXVsdDogbW9kIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHJlY2VpdmVyLCBwcml2YXRlTWFwKSB7XHJcbiAgICBpZiAoIXByaXZhdGVNYXAuaGFzKHJlY2VpdmVyKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJhdHRlbXB0ZWQgdG8gZ2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlXCIpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHByaXZhdGVNYXAuZ2V0KHJlY2VpdmVyKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRTZXQocmVjZWl2ZXIsIHByaXZhdGVNYXAsIHZhbHVlKSB7XHJcbiAgICBpZiAoIXByaXZhdGVNYXAuaGFzKHJlY2VpdmVyKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJhdHRlbXB0ZWQgdG8gc2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlXCIpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZU1hcC5zZXQocmVjZWl2ZXIsIHZhbHVlKTtcclxuICAgIHJldHVybiB2YWx1ZTtcclxufVxyXG4iLCIvKlxuICogR2VuZXJhdGVkIGJ5IFBFRy5qcyAwLjEwLjAuXG4gKlxuICogaHR0cDovL3BlZ2pzLm9yZy9cbiAqL1xuXG5cInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gcGVnJHN1YmNsYXNzKGNoaWxkLCBwYXJlbnQpIHtcbiAgZnVuY3Rpb24gY3RvcigpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGNoaWxkOyB9XG4gIGN0b3IucHJvdG90eXBlID0gcGFyZW50LnByb3RvdHlwZTtcbiAgY2hpbGQucHJvdG90eXBlID0gbmV3IGN0b3IoKTtcbn1cblxuZnVuY3Rpb24gcGVnJFN5bnRheEVycm9yKG1lc3NhZ2UsIGV4cGVjdGVkLCBmb3VuZCwgbG9jYXRpb24pIHtcbiAgdGhpcy5tZXNzYWdlICA9IG1lc3NhZ2U7XG4gIHRoaXMuZXhwZWN0ZWQgPSBleHBlY3RlZDtcbiAgdGhpcy5mb3VuZCAgICA9IGZvdW5kO1xuICB0aGlzLmxvY2F0aW9uID0gbG9jYXRpb247XG4gIHRoaXMubmFtZSAgICAgPSBcIlN5bnRheEVycm9yXCI7XG5cbiAgaWYgKHR5cGVvZiBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgcGVnJFN5bnRheEVycm9yKTtcbiAgfVxufVxuXG5wZWckc3ViY2xhc3MocGVnJFN5bnRheEVycm9yLCBFcnJvcik7XG5cbnBlZyRTeW50YXhFcnJvci5idWlsZE1lc3NhZ2UgPSBmdW5jdGlvbihleHBlY3RlZCwgZm91bmQpIHtcbiAgdmFyIERFU0NSSUJFX0VYUEVDVEFUSU9OX0ZOUyA9IHtcbiAgICAgICAgbGl0ZXJhbDogZnVuY3Rpb24oZXhwZWN0YXRpb24pIHtcbiAgICAgICAgICByZXR1cm4gXCJcXFwiXCIgKyBsaXRlcmFsRXNjYXBlKGV4cGVjdGF0aW9uLnRleHQpICsgXCJcXFwiXCI7XG4gICAgICAgIH0sXG5cbiAgICAgICAgXCJjbGFzc1wiOiBmdW5jdGlvbihleHBlY3RhdGlvbikge1xuICAgICAgICAgIHZhciBlc2NhcGVkUGFydHMgPSBcIlwiLFxuICAgICAgICAgICAgICBpO1xuXG4gICAgICAgICAgZm9yIChpID0gMDsgaSA8IGV4cGVjdGF0aW9uLnBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBlc2NhcGVkUGFydHMgKz0gZXhwZWN0YXRpb24ucGFydHNbaV0gaW5zdGFuY2VvZiBBcnJheVxuICAgICAgICAgICAgICA/IGNsYXNzRXNjYXBlKGV4cGVjdGF0aW9uLnBhcnRzW2ldWzBdKSArIFwiLVwiICsgY2xhc3NFc2NhcGUoZXhwZWN0YXRpb24ucGFydHNbaV1bMV0pXG4gICAgICAgICAgICAgIDogY2xhc3NFc2NhcGUoZXhwZWN0YXRpb24ucGFydHNbaV0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBcIltcIiArIChleHBlY3RhdGlvbi5pbnZlcnRlZCA/IFwiXlwiIDogXCJcIikgKyBlc2NhcGVkUGFydHMgKyBcIl1cIjtcbiAgICAgICAgfSxcblxuICAgICAgICBhbnk6IGZ1bmN0aW9uKGV4cGVjdGF0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIFwiYW55IGNoYXJhY3RlclwiO1xuICAgICAgICB9LFxuXG4gICAgICAgIGVuZDogZnVuY3Rpb24oZXhwZWN0YXRpb24pIHtcbiAgICAgICAgICByZXR1cm4gXCJlbmQgb2YgaW5wdXRcIjtcbiAgICAgICAgfSxcblxuICAgICAgICBvdGhlcjogZnVuY3Rpb24oZXhwZWN0YXRpb24pIHtcbiAgICAgICAgICByZXR1cm4gZXhwZWN0YXRpb24uZGVzY3JpcHRpb247XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgZnVuY3Rpb24gaGV4KGNoKSB7XG4gICAgcmV0dXJuIGNoLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7XG4gIH1cblxuICBmdW5jdGlvbiBsaXRlcmFsRXNjYXBlKHMpIHtcbiAgICByZXR1cm4gc1xuICAgICAgLnJlcGxhY2UoL1xcXFwvZywgJ1xcXFxcXFxcJylcbiAgICAgIC5yZXBsYWNlKC9cIi9nLCAgJ1xcXFxcIicpXG4gICAgICAucmVwbGFjZSgvXFwwL2csICdcXFxcMCcpXG4gICAgICAucmVwbGFjZSgvXFx0L2csICdcXFxcdCcpXG4gICAgICAucmVwbGFjZSgvXFxuL2csICdcXFxcbicpXG4gICAgICAucmVwbGFjZSgvXFxyL2csICdcXFxccicpXG4gICAgICAucmVwbGFjZSgvW1xceDAwLVxceDBGXS9nLCAgICAgICAgICBmdW5jdGlvbihjaCkgeyByZXR1cm4gJ1xcXFx4MCcgKyBoZXgoY2gpOyB9KVxuICAgICAgLnJlcGxhY2UoL1tcXHgxMC1cXHgxRlxceDdGLVxceDlGXS9nLCBmdW5jdGlvbihjaCkgeyByZXR1cm4gJ1xcXFx4JyAgKyBoZXgoY2gpOyB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsYXNzRXNjYXBlKHMpIHtcbiAgICByZXR1cm4gc1xuICAgICAgLnJlcGxhY2UoL1xcXFwvZywgJ1xcXFxcXFxcJylcbiAgICAgIC5yZXBsYWNlKC9cXF0vZywgJ1xcXFxdJylcbiAgICAgIC5yZXBsYWNlKC9cXF4vZywgJ1xcXFxeJylcbiAgICAgIC5yZXBsYWNlKC8tL2csICAnXFxcXC0nKVxuICAgICAgLnJlcGxhY2UoL1xcMC9nLCAnXFxcXDAnKVxuICAgICAgLnJlcGxhY2UoL1xcdC9nLCAnXFxcXHQnKVxuICAgICAgLnJlcGxhY2UoL1xcbi9nLCAnXFxcXG4nKVxuICAgICAgLnJlcGxhY2UoL1xcci9nLCAnXFxcXHInKVxuICAgICAgLnJlcGxhY2UoL1tcXHgwMC1cXHgwRl0vZywgICAgICAgICAgZnVuY3Rpb24oY2gpIHsgcmV0dXJuICdcXFxceDAnICsgaGV4KGNoKTsgfSlcbiAgICAgIC5yZXBsYWNlKC9bXFx4MTAtXFx4MUZcXHg3Ri1cXHg5Rl0vZywgZnVuY3Rpb24oY2gpIHsgcmV0dXJuICdcXFxceCcgICsgaGV4KGNoKTsgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBkZXNjcmliZUV4cGVjdGF0aW9uKGV4cGVjdGF0aW9uKSB7XG4gICAgcmV0dXJuIERFU0NSSUJFX0VYUEVDVEFUSU9OX0ZOU1tleHBlY3RhdGlvbi50eXBlXShleHBlY3RhdGlvbik7XG4gIH1cblxuICBmdW5jdGlvbiBkZXNjcmliZUV4cGVjdGVkKGV4cGVjdGVkKSB7XG4gICAgdmFyIGRlc2NyaXB0aW9ucyA9IG5ldyBBcnJheShleHBlY3RlZC5sZW5ndGgpLFxuICAgICAgICBpLCBqO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGV4cGVjdGVkLmxlbmd0aDsgaSsrKSB7XG4gICAgICBkZXNjcmlwdGlvbnNbaV0gPSBkZXNjcmliZUV4cGVjdGF0aW9uKGV4cGVjdGVkW2ldKTtcbiAgICB9XG5cbiAgICBkZXNjcmlwdGlvbnMuc29ydCgpO1xuXG4gICAgaWYgKGRlc2NyaXB0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKGkgPSAxLCBqID0gMTsgaSA8IGRlc2NyaXB0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoZGVzY3JpcHRpb25zW2kgLSAxXSAhPT0gZGVzY3JpcHRpb25zW2ldKSB7XG4gICAgICAgICAgZGVzY3JpcHRpb25zW2pdID0gZGVzY3JpcHRpb25zW2ldO1xuICAgICAgICAgIGorKztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZGVzY3JpcHRpb25zLmxlbmd0aCA9IGo7XG4gICAgfVxuXG4gICAgc3dpdGNoIChkZXNjcmlwdGlvbnMubGVuZ3RoKSB7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHJldHVybiBkZXNjcmlwdGlvbnNbMF07XG5cbiAgICAgIGNhc2UgMjpcbiAgICAgICAgcmV0dXJuIGRlc2NyaXB0aW9uc1swXSArIFwiIG9yIFwiICsgZGVzY3JpcHRpb25zWzFdO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZGVzY3JpcHRpb25zLnNsaWNlKDAsIC0xKS5qb2luKFwiLCBcIilcbiAgICAgICAgICArIFwiLCBvciBcIlxuICAgICAgICAgICsgZGVzY3JpcHRpb25zW2Rlc2NyaXB0aW9ucy5sZW5ndGggLSAxXTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBkZXNjcmliZUZvdW5kKGZvdW5kKSB7XG4gICAgcmV0dXJuIGZvdW5kID8gXCJcXFwiXCIgKyBsaXRlcmFsRXNjYXBlKGZvdW5kKSArIFwiXFxcIlwiIDogXCJlbmQgb2YgaW5wdXRcIjtcbiAgfVxuXG4gIHJldHVybiBcIkV4cGVjdGVkIFwiICsgZGVzY3JpYmVFeHBlY3RlZChleHBlY3RlZCkgKyBcIiBidXQgXCIgKyBkZXNjcmliZUZvdW5kKGZvdW5kKSArIFwiIGZvdW5kLlwiO1xufTtcblxuZnVuY3Rpb24gcGVnJHBhcnNlKGlucHV0LCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zICE9PSB2b2lkIDAgPyBvcHRpb25zIDoge307XG5cbiAgdmFyIHBlZyRGQUlMRUQgPSB7fSxcblxuICAgICAgcGVnJHN0YXJ0UnVsZUZ1bmN0aW9ucyA9IHsgQmlibGlvZ3JhcGh5OiBwZWckcGFyc2VCaWJsaW9ncmFwaHkgfSxcbiAgICAgIHBlZyRzdGFydFJ1bGVGdW5jdGlvbiAgPSBwZWckcGFyc2VCaWJsaW9ncmFwaHksXG5cbiAgICAgIHBlZyRjMCA9IGZ1bmN0aW9uKHIpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2luZDogJ0JpYmxpb2dyYXBoeScsXG4gICAgICAgICAgICBsb2M6IGxvY2F0aW9uKCksXG4gICAgICAgICAgICBzb3VyY2U6IHRleHQoKSxcbiAgICAgICAgICAgIGNoaWxkcmVuOiByLFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIHBlZyRjMSA9IFwiQFwiLFxuICAgICAgcGVnJGMyID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIkBcIiwgZmFsc2UpLFxuICAgICAgcGVnJGMzID0gXCJjb21tZW50XCIsXG4gICAgICBwZWckYzQgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiY29tbWVudFwiLCB0cnVlKSxcbiAgICAgIHBlZyRjNSA9IGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2luZDogJ0JyYWNlZENvbW1lbnQnLFxuICAgICAgICAgICAgbG9jOiBsb2NhdGlvbigpLFxuICAgICAgICAgICAgc291cmNlOiB0ZXh0KCksXG4gICAgICAgICAgICB2YWx1ZTogdi5zbGljZSgxLCAtMSksXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgcGVnJGM2ID0gL15bXlxcblxccl0vLFxuICAgICAgcGVnJGM3ID0gcGVnJGNsYXNzRXhwZWN0YXRpb24oW1wiXFxuXCIsIFwiXFxyXCJdLCB0cnVlLCBmYWxzZSksXG4gICAgICBwZWckYzggPSAvXltcXG5cXHJdLyxcbiAgICAgIHBlZyRjOSA9IHBlZyRjbGFzc0V4cGVjdGF0aW9uKFtcIlxcblwiLCBcIlxcclwiXSwgZmFsc2UsIGZhbHNlKSxcbiAgICAgIHBlZyRjMTAgPSBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGtpbmQ6ICdMaW5lQ29tbWVudCcsXG4gICAgICAgICAgICBsb2M6IGxvY2F0aW9uKCksXG4gICAgICAgICAgICBzb3VyY2U6IHRleHQoKSxcbiAgICAgICAgICAgIHZhbHVlOiBub3JtYWxpemVXaGl0ZXNwYWNlKHYpLFxuICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgcGVnJGMxMSA9IC9eW15AXS8sXG4gICAgICBwZWckYzEyID0gcGVnJGNsYXNzRXhwZWN0YXRpb24oW1wiQFwiXSwgdHJ1ZSwgZmFsc2UpLFxuICAgICAgcGVnJGMxMyA9IGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2luZDogJ05vbkVudHJ5VGV4dCcsXG4gICAgICAgICAgICBsb2M6IGxvY2F0aW9uKCksXG4gICAgICAgICAgICBzb3VyY2U6IHRleHQoKSxcbiAgICAgICAgICAgIHZhbHVlOiBub3JtYWxpemVXaGl0ZXNwYWNlKHYpLFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIHBlZyRjMTQgPSBmdW5jdGlvbihuKSB7IHJldHVybiBuOyB9LFxuICAgICAgcGVnJGMxNSA9IFwie1wiLFxuICAgICAgcGVnJGMxNiA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJ7XCIsIGZhbHNlKSxcbiAgICAgIHBlZyRjMTcgPSAvXltee31dLyxcbiAgICAgIHBlZyRjMTggPSBwZWckY2xhc3NFeHBlY3RhdGlvbihbXCJ7XCIsIFwifVwiXSwgdHJ1ZSwgZmFsc2UpLFxuICAgICAgcGVnJGMxOSA9IFwifVwiLFxuICAgICAgcGVnJGMyMCA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJ9XCIsIGZhbHNlKSxcbiAgICAgIHBlZyRjMjEgPSBmdW5jdGlvbihjb21tZW50KSB7IHJldHVybiAneycgKyBjb21tZW50LmpvaW4oJycpICsgJ30nIH0sXG4gICAgICBwZWckYzIyID0gL15bQS1aYS16XS8sXG4gICAgICBwZWckYzIzID0gcGVnJGNsYXNzRXhwZWN0YXRpb24oW1tcIkFcIiwgXCJaXCJdLCBbXCJhXCIsIFwielwiXV0sIGZhbHNlLCBmYWxzZSksXG4gICAgICBwZWckYzI0ID0gL15bKHtdLyxcbiAgICAgIHBlZyRjMjUgPSBwZWckY2xhc3NFeHBlY3RhdGlvbihbXCIoXCIsIFwie1wiXSwgZmFsc2UsIGZhbHNlKSxcbiAgICAgIHBlZyRjMjYgPSAvXlt9KV0vLFxuICAgICAgcGVnJGMyNyA9IHBlZyRjbGFzc0V4cGVjdGF0aW9uKFtcIn1cIiwgXCIpXCJdLCBmYWxzZSwgZmFsc2UpLFxuICAgICAgcGVnJGMyOCA9IGZ1bmN0aW9uKHR5cGUsIGlkLCBmaWVsZHMpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2luZDogJ0VudHJ5JyxcbiAgICAgICAgICAgIGlkOiBpZCB8fCAnJyxcbiAgICAgICAgICAgIHR5cGU6IHR5cGUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICAgIGxvYzogbG9jYXRpb24oKSxcbiAgICAgICAgICAgIHNvdXJjZTogdGV4dCgpLFxuICAgICAgICAgICAgZmllbGRzOiBmaWVsZHMsXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgcGVnJGMyOSA9IFwicHJlYW1ibGVcIixcbiAgICAgIHBlZyRjMzAgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwicHJlYW1ibGVcIiwgdHJ1ZSksXG4gICAgICBwZWckYzMxID0gZnVuY3Rpb24ob3BlbmVyLCB2LCBjbG9zZXIpIHtcbiAgICAgICAgICBzd2l0Y2ggKG9wZW5lciArIGNsb3Nlcikge1xuICAgICAgICAgICAgY2FzZSAne30nOlxuICAgICAgICAgICAgY2FzZSAnKCknOlxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmJhbGFuY2VkIG9wZW5lci1jbG9zZXIgZm9yIHByZWFtYmxlOiAke29wZW5lcn0uLi4ke2Nsb3Nlcn1gKVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2luZDogJ1ByZWFtYmxlRXhwcmVzc2lvbicsXG4gICAgICAgICAgICBsb2M6IGxvY2F0aW9uKCksXG4gICAgICAgICAgICBzb3VyY2U6IHRleHQoKSxcbiAgICAgICAgICAgIHZhbHVlOiB2LnJlZHVjZSgoYSwgYikgPT4gYS5jb25jYXQoYiksIFtdKSxcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICBwZWckYzMyID0gXCJzdHJpbmdcIixcbiAgICAgIHBlZyRjMzMgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwic3RyaW5nXCIsIHRydWUpLFxuICAgICAgcGVnJGMzNCA9IGZ1bmN0aW9uKGssIHYpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2luZDogJ1N0cmluZ0RlY2xhcmF0aW9uJyxcbiAgICAgICAgICAgIGxvYzogbG9jYXRpb24oKSxcbiAgICAgICAgICAgIHNvdXJjZTogdGV4dCgpLFxuICAgICAgICAgICAgbmFtZTogayxcbiAgICAgICAgICAgIHZhbHVlOiB2LnJlZHVjZSgoYSwgYikgPT4gYS5jb25jYXQoYiksIFtdKSxcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICBwZWckYzM1ID0gL15bXiBcXHRcXHJcXG4sXS8sXG4gICAgICBwZWckYzM2ID0gcGVnJGNsYXNzRXhwZWN0YXRpb24oW1wiIFwiLCBcIlxcdFwiLCBcIlxcclwiLCBcIlxcblwiLCBcIixcIl0sIHRydWUsIGZhbHNlKSxcbiAgICAgIHBlZyRjMzcgPSBcIixcIixcbiAgICAgIHBlZyRjMzggPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiLFwiLCBmYWxzZSksXG4gICAgICBwZWckYzM5ID0gZnVuY3Rpb24oaWQpIHsgcmV0dXJuIGlkOyB9LFxuICAgICAgcGVnJGM0MCA9IGZ1bmN0aW9uKG5hbWUpIHsgcmV0dXJuIGlzVmVyYmF0aW1GaWVsZChuYW1lKSAmJiB1bm5lc3RGaWVsZHMuaW5jbHVkZXMobmFtZSkgfSxcbiAgICAgIHBlZyRjNDEgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICAgICAgICAgIC8vIGJlY2F1c2UgdGhpcyB3YXMgYWJ1c2VkIHNvIG11Y2gsIG1hbnkgcHJvY2Vzc29ycyB0cmVhdCBkb3VibGUtb3V0ZXItYnJhY2VzIGFzIHNpbmdsZVxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBraW5kOiAnRmllbGQnLFxuICAgICAgICAgICAgbG9jOiBsb2NhdGlvbigpLFxuICAgICAgICAgICAgc291cmNlOiB0ZXh0KCksXG4gICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgbG9jOiBsb2NhdGlvbigpLFxuICAgICAgICAgICAgdmFsdWU6IFsgcHJvdGVjdCh2YWx1ZSkgXVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIHBlZyRjNDIgPSBmdW5jdGlvbihuYW1lKSB7IHJldHVybiBpc1ZlcmJhdGltRmllbGQobmFtZSkgfSxcbiAgICAgIHBlZyRjNDMgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBraW5kOiAnRmllbGQnLFxuICAgICAgICAgICAgbG9jOiBsb2NhdGlvbigpLFxuICAgICAgICAgICAgc291cmNlOiB0ZXh0KCksXG4gICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgbG9jOiBsb2NhdGlvbigpLFxuICAgICAgICAgICAgdmFsdWU6IFsgcHJvdGVjdCh2YWx1ZSkgXVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIHBlZyRjNDQgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICAgICAgICAgIC8vIGJlY2F1c2UgdGhpcyB3YXMgYWJ1c2VkIHNvIG11Y2gsIG1hbnkgcHJvY2Vzc29ycyB0cmVhdCBkb3VibGUtb3V0ZXItYnJhY2VzIGFzIHNpbmdsZVxuICAgICAgICAgIGlmICh1bm5lc3RGaWVsZHMuaW5jbHVkZXMobmFtZSkgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSAxICYmIHZhbHVlWzBdLmtpbmQgPT09ICdCbG9jaycpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnVubmVzdE1vZGUgPT09ICdwcmVzZXJ2ZScpIHtcbiAgICAgICAgICAgICAgdmFsdWVbMF0uY2FzZSA9ICdwcmVzZXJ2ZSdcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHZhbHVlID0gdmFsdWVbMF0udmFsdWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gaGFuZGxlX21hcmt1cF9zd2l0Y2hlcyh7XG4gICAgICAgICAgICBraW5kOiAnRmllbGQnLFxuICAgICAgICAgICAgbG9jOiBsb2NhdGlvbigpLFxuICAgICAgICAgICAgc291cmNlOiB0ZXh0KCksXG4gICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgIH0pXG4gICAgICAgIH0sXG4gICAgICBwZWckYzQ1ID0gL15bXzphLXpBLVowLTlcXC1dLyxcbiAgICAgIHBlZyRjNDYgPSBwZWckY2xhc3NFeHBlY3RhdGlvbihbXCJfXCIsIFwiOlwiLCBbXCJhXCIsIFwielwiXSwgW1wiQVwiLCBcIlpcIl0sIFtcIjBcIiwgXCI5XCJdLCBcIi1cIl0sIGZhbHNlLCBmYWxzZSksXG4gICAgICBwZWckYzQ3ID0gZnVuY3Rpb24obmFtZSkgeyByZXR1cm4gbmFtZS50b0xvd2VyQ2FzZSgpIH0sXG4gICAgICBwZWckYzQ4ID0gXCJcXFwiXCIsXG4gICAgICBwZWckYzQ5ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIlxcXCJcIiwgZmFsc2UpLFxuICAgICAgcGVnJGM1MCA9IGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICB2ID0gdiB8fCB7XG4gICAgICAgICAgICBraW5kOiAnVGV4dCcsXG4gICAgICAgICAgICBsb2M6IGxvY2F0aW9uKCksXG4gICAgICAgICAgICBzb3VyY2U6IHRleHQoKSxcbiAgICAgICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgICB9XG4gICAgICAgICAgdi5tb2RlID0gJ3ZlcmJhdGltJ1xuICAgICAgICAgIHJldHVybiBiYXNpY1RleHRDb252ZXJzaW9ucyh2KVxuICAgICAgICB9LFxuICAgICAgcGVnJGM1MSA9IGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICByZXR1cm4gYmFzaWNUZXh0Q29udmVyc2lvbnMoe1xuICAgICAgICAgICAga2luZDogJ1RleHQnLFxuICAgICAgICAgICAgbG9jOiBsb2NhdGlvbigpLFxuICAgICAgICAgICAgc291cmNlOiB0ZXh0KCksXG4gICAgICAgICAgICB2YWx1ZTogdi5qb2luKCcnKS50cmltKCksXG4gICAgICAgICAgICBtb2RlOiAndmVyYmF0aW0nLFxuICAgICAgICAgIH0pXG4gICAgICAgIH0sXG4gICAgICBwZWckYzUyID0gZnVuY3Rpb24odikgeyByZXR1cm4gdiB9LFxuICAgICAgcGVnJGM1MyA9IGZ1bmN0aW9uKHYpIHsgcmV0dXJuICd7JyArIHYuam9pbignJykgKyAnfScgfSxcbiAgICAgIHBlZyRjNTQgPSBmdW5jdGlvbigpIHsgcmV0dXJuIG1hdGguc2V0KGZhbHNlKSB9LFxuICAgICAgcGVnJGM1NSA9IGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICByZXR1cm4gdi5yZWR1Y2UoKGEsIGIpID0+IGEuY29uY2F0KGIpLCBbXSk7XG4gICAgICAgIH0sXG4gICAgICBwZWckYzU2ID0gZnVuY3Rpb24odikgeyByZXR1cm4gdjsgfSxcbiAgICAgIHBlZyRjNTcgPSBcIntcXFxcdmVyYlwiLFxuICAgICAgcGVnJGM1OCA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJ7XFxcXHZlcmJcIiwgZmFsc2UpLFxuICAgICAgcGVnJGM1OSA9IC9eW2EtekEtWl0vLFxuICAgICAgcGVnJGM2MCA9IHBlZyRjbGFzc0V4cGVjdGF0aW9uKFtbXCJhXCIsIFwielwiXSwgW1wiQVwiLCBcIlpcIl1dLCBmYWxzZSwgZmFsc2UpLFxuICAgICAgcGVnJGM2MSA9IC9eW15cXF5fJHt9XFxcXF0vLFxuICAgICAgcGVnJGM2MiA9IHBlZyRjbGFzc0V4cGVjdGF0aW9uKFtcIl5cIiwgXCJfXCIsIFwiJFwiLCBcIntcIiwgXCJ9XCIsIFwiXFxcXFwiXSwgdHJ1ZSwgZmFsc2UpLFxuICAgICAgcGVnJGM2MyA9IGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICByZXR1cm4gYmFzaWNUZXh0Q29udmVyc2lvbnMoe1xuICAgICAgICAgICAga2luZDogJ1RleHQnLFxuICAgICAgICAgICAgbG9jOiBsb2NhdGlvbigpLFxuICAgICAgICAgICAgc291cmNlOiB0ZXh0KCksXG4gICAgICAgICAgICB2YWx1ZTogbm9ybWFsaXplV2hpdGVzcGFjZSh2KSxcbiAgICAgICAgICAgIG1vZGU6IG1hdGgub24gPyAnbWF0aCcgOiAndGV4dCcsXG4gICAgICAgICAgfSlcbiAgICAgICAgfSxcbiAgICAgIHBlZyRjNjQgPSAvXlteXFxeXyR7fVwiXFxcXF0vLFxuICAgICAgcGVnJGM2NSA9IHBlZyRjbGFzc0V4cGVjdGF0aW9uKFtcIl5cIiwgXCJfXCIsIFwiJFwiLCBcIntcIiwgXCJ9XCIsIFwiXFxcIlwiLCBcIlxcXFxcIl0sIHRydWUsIGZhbHNlKSxcbiAgICAgIHBlZyRjNjYgPSAvXlswLTldLyxcbiAgICAgIHBlZyRjNjcgPSBwZWckY2xhc3NFeHBlY3RhdGlvbihbW1wiMFwiLCBcIjlcIl1dLCBmYWxzZSwgZmFsc2UpLFxuICAgICAgcGVnJGM2OCA9IGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2luZDogJ051bWJlcicsXG4gICAgICAgICAgICBsb2M6IGxvY2F0aW9uKCksXG4gICAgICAgICAgICBzb3VyY2U6IHRleHQoKSxcbiAgICAgICAgICAgIHZhbHVlOiBwYXJzZUludCh2LCAxMCksXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgcGVnJGM2OSA9IGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2luZDogJ1N0cmluZ1JlZmVyZW5jZScsXG4gICAgICAgICAgICBsb2M6IGxvY2F0aW9uKCksXG4gICAgICAgICAgICBzb3VyY2U6IHRleHQoKSxcbiAgICAgICAgICAgIG5hbWU6IHYsXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgcGVnJGM3MCA9IFwiXFxcXGJlZ2lue1wiLFxuICAgICAgcGVnJGM3MSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJcXFxcYmVnaW57XCIsIGZhbHNlKSxcbiAgICAgIHBlZyRjNzIgPSAvXlthLXpBLVowLTldLyxcbiAgICAgIHBlZyRjNzMgPSBwZWckY2xhc3NFeHBlY3RhdGlvbihbW1wiYVwiLCBcInpcIl0sIFtcIkFcIiwgXCJaXCJdLCBbXCIwXCIsIFwiOVwiXV0sIGZhbHNlLCBmYWxzZSksXG4gICAgICBwZWckYzc0ID0gXCJcXFxcZW5ke1wiLFxuICAgICAgcGVnJGM3NSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJcXFxcZW5ke1wiLCBmYWxzZSksXG4gICAgICBwZWckYzc2ID0gZnVuY3Rpb24oZW52LCB2LCBjZW52KSB7IHJldHVybiBlbnYgPT09IGNlbnYgfSxcbiAgICAgIHBlZyRjNzcgPSBmdW5jdGlvbihlbnYsIHYsIGNlbnYpIHtcbiAgICAgICAgICBpZiAobWFya3VwW2Vudl0pIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGtpbmQ6ICdCbG9jaycsXG4gICAgICAgICAgICAgIGxvYzogbG9jYXRpb24oKSxcbiAgICAgICAgICAgICAgc291cmNlOiB0ZXh0KCksXG4gICAgICAgICAgICAgIHZhbHVlOiB2LFxuICAgICAgICAgICAgICBtYXJrdXA6IHsgW21hcmt1cFtlbnZdXTogdHJ1ZSB9LFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBraW5kOiAnRW52aXJvbm1lbnQnLFxuICAgICAgICAgICAgICBsb2M6IGxvY2F0aW9uKCksXG4gICAgICAgICAgICAgIHNvdXJjZTogdGV4dCgpLFxuICAgICAgICAgICAgICB2YWx1ZTogdixcbiAgICAgICAgICAgICAgZW52OiBlbnYsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgcGVnJGM3OCA9IFwie1xcXFxcIixcbiAgICAgIHBlZyRjNzkgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwie1xcXFxcIiwgZmFsc2UpLFxuICAgICAgcGVnJGM4MCA9IFwiXFxcXFwiLFxuICAgICAgcGVnJGM4MSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJcXFxcXCIsIGZhbHNlKSxcbiAgICAgIHBlZyRjODIgPSAvXltpal0vLFxuICAgICAgcGVnJGM4MyA9IHBlZyRjbGFzc0V4cGVjdGF0aW9uKFtcImlcIiwgXCJqXCJdLCBmYWxzZSwgZmFsc2UpLFxuICAgICAgcGVnJGM4NCA9IGZ1bmN0aW9uKG1hcmssIGNoYXIpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2luZDogJ0RpYWNyaXRpY0NvbW1hbmQnLFxuICAgICAgICAgICAgbG9jOiBsb2NhdGlvbigpLFxuICAgICAgICAgICAgc291cmNlOiB0ZXh0KCksXG4gICAgICAgICAgICBtYXJrOiBtYXJrLFxuICAgICAgICAgICAgZG90bGVzczogISFjaGFyWzFdLFxuICAgICAgICAgICAgY2hhcmFjdGVyOiBjaGFyWzFdIHx8IGNoYXJbMF0sXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgcGVnJGM4NSA9IGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICAgIHJldHVybiBiYXNpY1RleHRDb252ZXJzaW9ucyh7XG4gICAgICAgICAgICAgIGtpbmQ6ICdUZXh0JyxcbiAgICAgICAgICAgICAgbG9jOiBsb2NhdGlvbigpLFxuICAgICAgICAgICAgICBzb3VyY2U6IHRleHQoKSxcbiAgICAgICAgICAgICAgdmFsdWU6IHYuam9pbignJykudHJpbSgpLFxuICAgICAgICAgICAgICBtb2RlOiAndmVyYmF0aW0nLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSxcbiAgICAgIHBlZyRjODYgPSBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgY29uc3QgYmxvY2sgPSB7XG4gICAgICAgICAgICBraW5kOiAnQmxvY2snLFxuICAgICAgICAgICAgbG9jOiBsb2NhdGlvbigpLFxuICAgICAgICAgICAgc291cmNlOiB0ZXh0KCksXG4gICAgICAgICAgICB2YWx1ZTogdixcbiAgICAgICAgICAgIG1hcmt1cDoge30sXG4gICAgICAgICAgICBjYXNlOiAncHJvdGVjdCcsXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IGxlYWRpbmdjbWQgPSBibG9jay52YWx1ZS5sZW5ndGggJiYgKGJsb2NrLnZhbHVlWzBdLmtpbmQuZW5kc1dpdGgoJ0NvbW1hbmQnKSB8fCBibG9jay52YWx1ZVswXS5raW5kID09PSAnRW52aXJvbm1lbnQnKSA/IGJsb2NrLnZhbHVlWzBdIDogbnVsbFxuICAgICAgICAgIGxldCBsZWFkaW5nY21kYmxvY2thcmcgPSBsZWFkaW5nY21kXG4gICAgICAgICAgICAmJiBsZWFkaW5nY21kLmtpbmQgPT09ICdSZWd1bGFyQ29tbWFuZCdcbiAgICAgICAgICAgICYmIGxlYWRpbmdjbWQuYXJndW1lbnRzLnJlcXVpcmVkLmxlbmd0aFxuICAgICAgICAgICAgJiYgbGVhZGluZ2NtZC5hcmd1bWVudHMucmVxdWlyZWRbMF0ua2luZCA9PT0gJ0Jsb2NrJ1xuICAgICAgICAgICAgJiYgbGVhZGluZ2NtZC5hcmd1bWVudHMucmVxdWlyZWRbMF1cblxuICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9yZXRvcnF1ZXJlL3pvdGVyby1iZXR0ZXItYmlidGV4L2lzc3Vlcy81NDEjaXNzdWVjb21tZW50LTI0MDE1NjI3NFxuICAgICAgICAgIGlmIChsZWFkaW5nY21kKSB7XG4gICAgICAgICAgICBkZWxldGUgYmxvY2suY2FzZVxuXG4gICAgICAgICAgICAvLyBjb21tYW5kIHdpdGggYSBibG9jayBjYW5jZWxzIG91dCBjYXNlIHByb3RlY3Rpb24gd2l0aCBjb250YWluaW5nIGJsb2NrXG4gICAgICAgICAgICAvLyBpZiBhIHNtYWxsY2FwcyBibG9jayBoYXMgc2V0IGNhc2UgdG8gJ3ByZXNlcnZlJyB3ZSB3YW50IHRvIGtlZXAgdGhpc1xuICAgICAgICAgICAgaWYgKGxlYWRpbmdjbWRibG9ja2FyZyAmJiBsZWFkaW5nY21kYmxvY2thcmcuY2FzZSA9PT0gJ3Byb3RlY3QnKSBkZWxldGUgbGVhZGluZ2NtZGJsb2NrYXJnLmNhc2VcblxuICAgICAgICAgICAgLy8gXFxzbCwgXFxpdCBldGNcbiAgICAgICAgICAgIGlmIChtYXJrdXBbbGVhZGluZ2NtZC5jb21tYW5kXSkge1xuICAgICAgICAgICAgICBibG9jay5tYXJrdXBbbWFya3VwW2xlYWRpbmdjbWQuY29tbWFuZF1dID0gdHJ1ZVxuICAgICAgICAgICAgICBibG9jay52YWx1ZS5zaGlmdCgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGhhbmRsZV9tYXJrdXBfc3dpdGNoZXMoYmxvY2spXG4gICAgICAgIH0sXG4gICAgICBwZWckYzg3ID0gZnVuY3Rpb24oKSB7IHJldHVybiAhbWF0aC5vbiB9LFxuICAgICAgcGVnJGM4OCA9IFwiJFwiLFxuICAgICAgcGVnJGM4OSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCIkXCIsIGZhbHNlKSxcbiAgICAgIHBlZyRjOTAgPSBcIiQkXCIsXG4gICAgICBwZWckYzkxID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIiQkXCIsIGZhbHNlKSxcbiAgICAgIHBlZyRjOTIgPSBmdW5jdGlvbihtb2RlKSB7IHJldHVybiBtYXRoLnNldCh0cnVlKSB9LFxuICAgICAgcGVnJGM5MyA9IGZ1bmN0aW9uKG1vZGUsIHYpIHsgcmV0dXJuIG1hdGguc2V0KGZhbHNlKSB9LFxuICAgICAgcGVnJGM5NCA9IGZ1bmN0aW9uKG1vZGUsIHYpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2luZDogbW9kZSA9PSAnJCQnID8gJ0Rpc3BsYXlNYXRoJyA6ICdJbmxpbmVNYXRoJyxcbiAgICAgICAgICAgIGxvYzogbG9jYXRpb24oKSxcbiAgICAgICAgICAgIHNvdXJjZTogdGV4dCgpLFxuICAgICAgICAgICAgdmFsdWU6IHYsXG4gICAgICAgICAgICBjYXNlOiAncHJvdGVjdCcsXG4gICAgICAgICAgICBtYXJrdXA6IHt9LFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIHBlZyRjOTUgPSBcIiVcIixcbiAgICAgIHBlZyRjOTYgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiJVwiLCBmYWxzZSksXG4gICAgICBwZWckYzk3ID0gL15bXlxcclxcbl0vLFxuICAgICAgcGVnJGM5OCA9IHBlZyRjbGFzc0V4cGVjdGF0aW9uKFtcIlxcclwiLCBcIlxcblwiXSwgdHJ1ZSwgZmFsc2UpLFxuICAgICAgcGVnJGM5OSA9IGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2luZDogJ0xpbmVDb21tZW50JyxcbiAgICAgICAgICAgIGxvYzogbG9jYXRpb24oKSxcbiAgICAgICAgICAgIHNvdXJjZTogdGV4dCgpLFxuICAgICAgICAgICAgdmFsdWU6IHYsXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgcGVnJGMxMDAgPSAvXltfXFxeXS8sXG4gICAgICBwZWckYzEwMSA9IHBlZyRjbGFzc0V4cGVjdGF0aW9uKFtcIl9cIiwgXCJeXCJdLCBmYWxzZSwgZmFsc2UpLFxuICAgICAgcGVnJGMxMDIgPSBmdW5jdGlvbihtb2RlLCB2KSB7XG4gICAgICAgICAgaWYgKHYua2luZCA9PT0gJ0Jsb2NrJykgdiA9IHYudmFsdWVcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBraW5kOiBtb2RlID09PSAnXycgPyAnU3Vic2NyaXB0Q29tbWFuZCcgOiAnU3VwZXJzY3JpcHRDb21tYW5kJyxcbiAgICAgICAgICAgIGxvYzogbG9jYXRpb24oKSxcbiAgICAgICAgICAgIHNvdXJjZTogdGV4dCgpLFxuICAgICAgICAgICAgdmFsdWU6IHYsXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgcGVnJGMxMDMgPSBmdW5jdGlvbihtYXJrLCB2KSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGtpbmQ6ICdSZWd1bGFyQ29tbWFuZCcsXG4gICAgICAgICAgICBsb2M6IGxvY2F0aW9uKCksXG4gICAgICAgICAgICBzb3VyY2U6IHRleHQoKSxcbiAgICAgICAgICAgIGNvbW1hbmQ6IG1hcmssXG4gICAgICAgICAgICBhcmd1bWVudHM6IHtcbiAgICAgICAgICAgICAgb3B0aW9uYWw6IFtdLFxuICAgICAgICAgICAgICByZXF1aXJlZDogWyBwcm90ZWN0KHYpIF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIHBlZyRjMTA0ID0gL15bXkEtWmEtejAtOVxcdFxcclxcbl0vLFxuICAgICAgcGVnJGMxMDUgPSBwZWckY2xhc3NFeHBlY3RhdGlvbihbW1wiQVwiLCBcIlpcIl0sIFtcImFcIiwgXCJ6XCJdLCBbXCIwXCIsIFwiOVwiXSwgXCJcXHRcIiwgXCJcXHJcIiwgXCJcXG5cIl0sIHRydWUsIGZhbHNlKSxcbiAgICAgIHBlZyRjMTA2ID0gZnVuY3Rpb24odikge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBraW5kOiAnU3ltYm9sQ29tbWFuZCcsXG4gICAgICAgICAgICBsb2M6IGxvY2F0aW9uKCksXG4gICAgICAgICAgICBzb3VyY2U6IHRleHQoKSxcbiAgICAgICAgICAgIGNvbW1hbmQ6IHYsXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgcGVnJGMxMDcgPSBcIm5ld2NvbW1hbmRcIixcbiAgICAgIHBlZyRjMTA4ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIm5ld2NvbW1hbmRcIiwgZmFsc2UpLFxuICAgICAgcGVnJGMxMDkgPSBmdW5jdGlvbihjbWQsIG5hbWUpIHsgcmV0dXJuIG5hbWUudmFsdWUubGVuZ3RoID09IDEgJiYgbmFtZS52YWx1ZVswXS5raW5kID09PSAnUmVndWxhckNvbW1hbmQnIH0sXG4gICAgICBwZWckYzExMCA9IGZ1bmN0aW9uKGNtZCwgbmFtZSwgb3B0aW9uYWwsIGRlZikge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBraW5kOiAnUmVndWxhckNvbW1hbmQnLFxuICAgICAgICAgICAgbG9jOiBsb2NhdGlvbigpLFxuICAgICAgICAgICAgc291cmNlOiB0ZXh0KCksXG4gICAgICAgICAgICBjb21tYW5kOiBjbWQsXG4gICAgICAgICAgICBhcmd1bWVudHM6IHtcbiAgICAgICAgICAgICAgb3B0aW9uYWw6IFtdLFxuICAgICAgICAgICAgICByZXF1aXJlZDogW25hbWUsIGRlZl0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIHBlZyRjMTExID0gXCJiZWdpblwiLFxuICAgICAgcGVnJGMxMTIgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiYmVnaW5cIiwgZmFsc2UpLFxuICAgICAgcGVnJGMxMTMgPSBcImVuZFwiLFxuICAgICAgcGVnJGMxMTQgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiZW5kXCIsIGZhbHNlKSxcbiAgICAgIHBlZyRjMTE1ID0gZnVuY3Rpb24oY21kKSB7IHJldHVybiB2ZXJiYXRpbUNvbW1hbmRzLmluY2x1ZGVzKGNtZCkgJiYgKGhhc19hcmd1bWVudHNbY21kXSA9PT0gMikgfSxcbiAgICAgIHBlZyRjMTE2ID0gZnVuY3Rpb24oY21kLCBvcHRpb25hbCwgcmVxMSwgcmVxMikge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBraW5kOiAnUmVndWxhckNvbW1hbmQnLFxuICAgICAgICAgICAgbG9jOiBsb2NhdGlvbigpLFxuICAgICAgICAgICAgc291cmNlOiB0ZXh0KCksXG4gICAgICAgICAgICBjb21tYW5kOiBjbWQsXG4gICAgICAgICAgICBhcmd1bWVudHM6IHtcbiAgICAgICAgICAgICAgb3B0aW9uYWw6IG9wdGlvbmFsLFxuICAgICAgICAgICAgICByZXF1aXJlZDogW3Byb3RlY3QocmVxMSksIHByb3RlY3QocmVxMildLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICBwZWckYzExNyA9IGZ1bmN0aW9uKGNtZCkgeyByZXR1cm4gdmVyYmF0aW1Db21tYW5kcy5pbmNsdWRlcyhjbWQpICYmIChoYXNfYXJndW1lbnRzW2NtZF0gPT09IDEpIH0sXG4gICAgICBwZWckYzExOCA9IGZ1bmN0aW9uKGNtZCwgb3B0aW9uYWwsIHJlcSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBraW5kOiAnUmVndWxhckNvbW1hbmQnLFxuICAgICAgICAgICAgbG9jOiBsb2NhdGlvbigpLFxuICAgICAgICAgICAgc291cmNlOiB0ZXh0KCksXG4gICAgICAgICAgICBjb21tYW5kOiBjbWQsXG4gICAgICAgICAgICBhcmd1bWVudHM6IHtcbiAgICAgICAgICAgICAgb3B0aW9uYWw6IG9wdGlvbmFsLFxuICAgICAgICAgICAgICByZXF1aXJlZDogW3Byb3RlY3QocmVxKV0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIHBlZyRjMTE5ID0gZnVuY3Rpb24oY21kKSB7IHJldHVybiAoaGFzX2FyZ3VtZW50c1tjbWRdID09PSAyKSB9LFxuICAgICAgcGVnJGMxMjAgPSBmdW5jdGlvbihjbWQsIG9wdGlvbmFsLCByZXExLCByZXEyKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGtpbmQ6ICdSZWd1bGFyQ29tbWFuZCcsXG4gICAgICAgICAgICBsb2M6IGxvY2F0aW9uKCksXG4gICAgICAgICAgICBzb3VyY2U6IHRleHQoKSxcbiAgICAgICAgICAgIGNvbW1hbmQ6IGNtZCxcbiAgICAgICAgICAgIGFyZ3VtZW50czoge1xuICAgICAgICAgICAgICBvcHRpb25hbDogb3B0aW9uYWwsXG4gICAgICAgICAgICAgIHJlcXVpcmVkOiBbcmVxMSwgcmVxMl0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIHBlZyRjMTIxID0gZnVuY3Rpb24oY21kKSB7IHJldHVybiAoaGFzX2FyZ3VtZW50c1tjbWRdID09PSAxKSB9LFxuICAgICAgcGVnJGMxMjIgPSBmdW5jdGlvbihjbWQsIG9wdGlvbmFsLCByZXEpIHtcbiAgICAgICAgICBsZXQgbVxuICAgICAgICAgIGlmIChyZXEua2luZCA9PT0gJ0Jsb2NrJykge1xuICAgICAgICAgICAgc3dpdGNoIChjbWQpIHtcbiAgICAgICAgICAgICAgY2FzZSAndGV4dHN1cGVyc2NyaXB0JzpcbiAgICAgICAgICAgICAgY2FzZSAnc3AnOlxuICAgICAgICAgICAgICAgIHJlcS5tYXJrdXAuc3VwID0gdHJ1ZVxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgJ3RleHRzdWJzY3JpcHQnOlxuICAgICAgICAgICAgICBjYXNlICdzYic6XG4gICAgICAgICAgICAgICAgcmVxLm1hcmt1cC5zdWIgPSB0cnVlXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgY2FzZSAndGV4dHNjJzpcbiAgICAgICAgICAgICAgICByZXEubWFya3VwLnNtYWxsQ2FwcyA9IHRydWVcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBjYXNlICdlbnF1b3RlJzpcbiAgICAgICAgICAgICAgY2FzZSAnbWtiaWJxdW90ZSc6XG4gICAgICAgICAgICAgICAgcmVxLm1hcmt1cC5lbnF1b3RlID0gdHJ1ZVxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgJ3RleHRiZic6XG4gICAgICAgICAgICAgIGNhc2UgJ21rYmliYm9sZCc6XG4gICAgICAgICAgICAgICAgcmVxLm1hcmt1cC5ib2xkID0gdHJ1ZVxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgJ2VtcGgnOlxuICAgICAgICAgICAgICBjYXNlICd0ZXh0aXQnOlxuICAgICAgICAgICAgICBjYXNlICdta2JpYml0YWxpYyc6XG4gICAgICAgICAgICAgIGNhc2UgJ21rYmliZW1waCc6XG4gICAgICAgICAgICAgICAgcmVxLm1hcmt1cC5pdGFsaWNzID0gdHJ1ZVxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgaWYgKG0gPSBjbWQubWF0Y2goL14oKHN1YikqKXNlY3Rpb24kLykpIHtcbiAgICAgICAgICAgICAgICAgIHJlcS5tYXJrdXBbYGgkeyhtWzFdLmxlbmd0aCAvIDMpICsgMX1gXSA9IHRydWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gaWdub3JlIGNhc2Ugc3R1ZmYgb24gYmliY3lyXG4gICAgICAgICAgaWYgKGNtZCA9PT0gJ2JpYmN5cicpIGRlbGV0ZSByZXEuY2FzZVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGtpbmQ6ICdSZWd1bGFyQ29tbWFuZCcsXG4gICAgICAgICAgICBsb2M6IGxvY2F0aW9uKCksXG4gICAgICAgICAgICBzb3VyY2U6IHRleHQoKSxcbiAgICAgICAgICAgIGNvbW1hbmQ6IGNtZCxcbiAgICAgICAgICAgIGFyZ3VtZW50czoge1xuICAgICAgICAgICAgICBvcHRpb25hbDogb3B0aW9uYWwsXG4gICAgICAgICAgICAgIHJlcXVpcmVkOiBbcmVxXSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICBwZWckYzEyMyA9IGZ1bmN0aW9uKGNtZCwgb3B0aW9uYWwpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2luZDogJ1JlZ3VsYXJDb21tYW5kJyxcbiAgICAgICAgICAgIGxvYzogbG9jYXRpb24oKSxcbiAgICAgICAgICAgIHNvdXJjZTogdGV4dCgpLFxuICAgICAgICAgICAgY29tbWFuZDogY21kLFxuICAgICAgICAgICAgYXJndW1lbnRzOiB7XG4gICAgICAgICAgICAgIG9wdGlvbmFsOiBvcHRpb25hbCxcbiAgICAgICAgICAgICAgcmVxdWlyZWQ6IFtdLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIHBlZyRjMTI0ID0gXCJbXCIsXG4gICAgICBwZWckYzEyNSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJbXCIsIGZhbHNlKSxcbiAgICAgIHBlZyRjMTI2ID0gL15bXlxcXV0vLFxuICAgICAgcGVnJGMxMjcgPSBwZWckY2xhc3NFeHBlY3RhdGlvbihbXCJdXCJdLCB0cnVlLCBmYWxzZSksXG4gICAgICBwZWckYzEyOCA9IFwiXVwiLFxuICAgICAgcGVnJGMxMjkgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiXVwiLCBmYWxzZSksXG4gICAgICBwZWckYzEzMCA9IGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICByZXR1cm4gYmFzaWNUZXh0Q29udmVyc2lvbnMoe1xuICAgICAgICAgICAga2luZDogJ1RleHQnLCAvLyB0aGlzIGlzbid0IHJlYWxseSBjb3JyZWN0IGJ1dCBJIGRvbid0IG5lZWQgdGhlc2UgcmlnaHQgbm93XG4gICAgICAgICAgICBsb2M6IGxvY2F0aW9uKCksXG4gICAgICAgICAgICBzb3VyY2U6IHRleHQoKSxcbiAgICAgICAgICAgIHZhbHVlOiB2LFxuICAgICAgICAgICAgbW9kZTogbWF0aC5vbiA/ICdtYXRoJyA6ICd0ZXh0JyxcbiAgICAgICAgICB9KVxuICAgICAgICB9LFxuICAgICAgcGVnJGMxMzEgPSAvXlteIFxcdFxcXl8ke31cXFxcXS8sXG4gICAgICBwZWckYzEzMiA9IHBlZyRjbGFzc0V4cGVjdGF0aW9uKFtcIiBcIiwgXCJcXHRcIiwgXCJeXCIsIFwiX1wiLCBcIiRcIiwgXCJ7XCIsIFwifVwiLCBcIlxcXFxcIl0sIHRydWUsIGZhbHNlKSxcbiAgICAgIHBlZyRjMTMzID0gZnVuY3Rpb24odikge1xuICAgICAgICAgIHJldHVybiBiYXNpY1RleHRDb252ZXJzaW9ucyh7XG4gICAgICAgICAgICBraW5kOiAnVGV4dCcsXG4gICAgICAgICAgICBsb2M6IGxvY2F0aW9uKCksXG4gICAgICAgICAgICBzb3VyY2U6IHRleHQoKSxcbiAgICAgICAgICAgIHZhbHVlOiBub3JtYWxpemVXaGl0ZXNwYWNlKFt2XSksXG4gICAgICAgICAgICBtb2RlOiBtYXRoLm9uID8gJ21hdGgnIDogJ3RleHQnLFxuICAgICAgICAgIH0pXG4gICAgICAgIH0sXG4gICAgICBwZWckYzEzNCA9IC9eW2EtekEtWlxcLV9dLyxcbiAgICAgIHBlZyRjMTM1ID0gcGVnJGNsYXNzRXhwZWN0YXRpb24oW1tcImFcIiwgXCJ6XCJdLCBbXCJBXCIsIFwiWlwiXSwgXCItXCIsIFwiX1wiXSwgZmFsc2UsIGZhbHNlKSxcbiAgICAgIHBlZyRjMTM2ID0gL15bYS16QS1aMC05XFwtJl86XS8sXG4gICAgICBwZWckYzEzNyA9IHBlZyRjbGFzc0V4cGVjdGF0aW9uKFtbXCJhXCIsIFwielwiXSwgW1wiQVwiLCBcIlpcIl0sIFtcIjBcIiwgXCI5XCJdLCBcIi1cIiwgXCImXCIsIFwiX1wiLCBcIjpcIl0sIGZhbHNlLCBmYWxzZSksXG4gICAgICBwZWckYzEzOCA9IC9eWydgXCI9flxcXi5dLyxcbiAgICAgIHBlZyRjMTM5ID0gcGVnJGNsYXNzRXhwZWN0YXRpb24oW1wiJ1wiLCBcImBcIiwgXCJcXFwiXCIsIFwiPVwiLCBcIn5cIiwgXCJeXCIsIFwiLlwiXSwgZmFsc2UsIGZhbHNlKSxcbiAgICAgIHBlZyRjMTQwID0gL15bJ2BcIj1+XFxeLmNidXZkckhrXS8sXG4gICAgICBwZWckYzE0MSA9IHBlZyRjbGFzc0V4cGVjdGF0aW9uKFtcIidcIiwgXCJgXCIsIFwiXFxcIlwiLCBcIj1cIiwgXCJ+XCIsIFwiXlwiLCBcIi5cIiwgXCJjXCIsIFwiYlwiLCBcInVcIiwgXCJ2XCIsIFwiZFwiLCBcInJcIiwgXCJIXCIsIFwia1wiXSwgZmFsc2UsIGZhbHNlKSxcbiAgICAgIHBlZyRjMTQyID0gXCI9XCIsXG4gICAgICBwZWckYzE0MyA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCI9XCIsIGZhbHNlKSxcbiAgICAgIHBlZyRjMTQ0ID0gXCIjXCIsXG4gICAgICBwZWckYzE0NSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCIjXCIsIGZhbHNlKSxcbiAgICAgIHBlZyRjMTQ2ID0gL15bXFxyXFxuXS8sXG4gICAgICBwZWckYzE0NyA9IHBlZyRjbGFzc0V4cGVjdGF0aW9uKFtcIlxcclwiLCBcIlxcblwiXSwgZmFsc2UsIGZhbHNlKSxcbiAgICAgIHBlZyRjMTQ4ID0gcGVnJG90aGVyRXhwZWN0YXRpb24oXCJNYW5kYXRvcnkgSG9yaXpvbnRhbCBXaGl0ZXNwYWNlXCIpLFxuICAgICAgcGVnJGMxNDkgPSAvXlsgXFx0XS8sXG4gICAgICBwZWckYzE1MCA9IHBlZyRjbGFzc0V4cGVjdGF0aW9uKFtcIiBcIiwgXCJcXHRcIl0sIGZhbHNlLCBmYWxzZSksXG4gICAgICBwZWckYzE1MSA9IHBlZyRvdGhlckV4cGVjdGF0aW9uKFwiT3B0aW9uYWwgSG9yaXpvbnRhbCBXaGl0ZXNwYWNlXCIpLFxuICAgICAgcGVnJGMxNTIgPSBwZWckb3RoZXJFeHBlY3RhdGlvbihcIk1hbmRhdG9yeSBWZXJ0aWNhbCBXaGl0ZXNwYWNlXCIpLFxuICAgICAgcGVnJGMxNTMgPSBwZWckb3RoZXJFeHBlY3RhdGlvbihcIk9wdGlvbmFsIFZlcnRpY2FsIFdoaXRlc3BhY2VcIiksXG4gICAgICBwZWckYzE1NCA9IHBlZyRvdGhlckV4cGVjdGF0aW9uKFwiTWFuZGF0b3J5IFdoaXRlc3BhY2VcIiksXG4gICAgICBwZWckYzE1NSA9IC9eWyBcXHRcXG5cXHJdLyxcbiAgICAgIHBlZyRjMTU2ID0gcGVnJGNsYXNzRXhwZWN0YXRpb24oW1wiIFwiLCBcIlxcdFwiLCBcIlxcblwiLCBcIlxcclwiXSwgZmFsc2UsIGZhbHNlKSxcbiAgICAgIHBlZyRjMTU3ID0gcGVnJG90aGVyRXhwZWN0YXRpb24oXCJPcHRpb25hbCBXaGl0ZXNwYWNlXCIpLFxuXG4gICAgICBwZWckY3VyclBvcyAgICAgICAgICA9IDAsXG4gICAgICBwZWckc2F2ZWRQb3MgICAgICAgICA9IDAsXG4gICAgICBwZWckcG9zRGV0YWlsc0NhY2hlICA9IFt7IGxpbmU6IDEsIGNvbHVtbjogMSB9XSxcbiAgICAgIHBlZyRtYXhGYWlsUG9zICAgICAgID0gMCxcbiAgICAgIHBlZyRtYXhGYWlsRXhwZWN0ZWQgID0gW10sXG4gICAgICBwZWckc2lsZW50RmFpbHMgICAgICA9IDAsXG5cbiAgICAgIHBlZyRyZXN1bHQ7XG5cbiAgaWYgKFwic3RhcnRSdWxlXCIgaW4gb3B0aW9ucykge1xuICAgIGlmICghKG9wdGlvbnMuc3RhcnRSdWxlIGluIHBlZyRzdGFydFJ1bGVGdW5jdGlvbnMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCBzdGFydCBwYXJzaW5nIGZyb20gcnVsZSBcXFwiXCIgKyBvcHRpb25zLnN0YXJ0UnVsZSArIFwiXFxcIi5cIik7XG4gICAgfVxuXG4gICAgcGVnJHN0YXJ0UnVsZUZ1bmN0aW9uID0gcGVnJHN0YXJ0UnVsZUZ1bmN0aW9uc1tvcHRpb25zLnN0YXJ0UnVsZV07XG4gIH1cblxuICBmdW5jdGlvbiB0ZXh0KCkge1xuICAgIHJldHVybiBpbnB1dC5zdWJzdHJpbmcocGVnJHNhdmVkUG9zLCBwZWckY3VyclBvcyk7XG4gIH1cblxuICBmdW5jdGlvbiBsb2NhdGlvbigpIHtcbiAgICByZXR1cm4gcGVnJGNvbXB1dGVMb2NhdGlvbihwZWckc2F2ZWRQb3MsIHBlZyRjdXJyUG9zKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGV4cGVjdGVkKGRlc2NyaXB0aW9uLCBsb2NhdGlvbikge1xuICAgIGxvY2F0aW9uID0gbG9jYXRpb24gIT09IHZvaWQgMCA/IGxvY2F0aW9uIDogcGVnJGNvbXB1dGVMb2NhdGlvbihwZWckc2F2ZWRQb3MsIHBlZyRjdXJyUG9zKVxuXG4gICAgdGhyb3cgcGVnJGJ1aWxkU3RydWN0dXJlZEVycm9yKFxuICAgICAgW3BlZyRvdGhlckV4cGVjdGF0aW9uKGRlc2NyaXB0aW9uKV0sXG4gICAgICBpbnB1dC5zdWJzdHJpbmcocGVnJHNhdmVkUG9zLCBwZWckY3VyclBvcyksXG4gICAgICBsb2NhdGlvblxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBlcnJvcihtZXNzYWdlLCBsb2NhdGlvbikge1xuICAgIGxvY2F0aW9uID0gbG9jYXRpb24gIT09IHZvaWQgMCA/IGxvY2F0aW9uIDogcGVnJGNvbXB1dGVMb2NhdGlvbihwZWckc2F2ZWRQb3MsIHBlZyRjdXJyUG9zKVxuXG4gICAgdGhyb3cgcGVnJGJ1aWxkU2ltcGxlRXJyb3IobWVzc2FnZSwgbG9jYXRpb24pO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbih0ZXh0LCBpZ25vcmVDYXNlKSB7XG4gICAgcmV0dXJuIHsgdHlwZTogXCJsaXRlcmFsXCIsIHRleHQ6IHRleHQsIGlnbm9yZUNhc2U6IGlnbm9yZUNhc2UgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRjbGFzc0V4cGVjdGF0aW9uKHBhcnRzLCBpbnZlcnRlZCwgaWdub3JlQ2FzZSkge1xuICAgIHJldHVybiB7IHR5cGU6IFwiY2xhc3NcIiwgcGFydHM6IHBhcnRzLCBpbnZlcnRlZDogaW52ZXJ0ZWQsIGlnbm9yZUNhc2U6IGlnbm9yZUNhc2UgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRhbnlFeHBlY3RhdGlvbigpIHtcbiAgICByZXR1cm4geyB0eXBlOiBcImFueVwiIH07XG4gIH1cblxuICBmdW5jdGlvbiBwZWckZW5kRXhwZWN0YXRpb24oKSB7XG4gICAgcmV0dXJuIHsgdHlwZTogXCJlbmRcIiB9O1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJG90aGVyRXhwZWN0YXRpb24oZGVzY3JpcHRpb24pIHtcbiAgICByZXR1cm4geyB0eXBlOiBcIm90aGVyXCIsIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbiB9O1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJGNvbXB1dGVQb3NEZXRhaWxzKHBvcykge1xuICAgIHZhciBkZXRhaWxzID0gcGVnJHBvc0RldGFpbHNDYWNoZVtwb3NdLCBwO1xuXG4gICAgaWYgKGRldGFpbHMpIHtcbiAgICAgIHJldHVybiBkZXRhaWxzO1xuICAgIH0gZWxzZSB7XG4gICAgICBwID0gcG9zIC0gMTtcbiAgICAgIHdoaWxlICghcGVnJHBvc0RldGFpbHNDYWNoZVtwXSkge1xuICAgICAgICBwLS07XG4gICAgICB9XG5cbiAgICAgIGRldGFpbHMgPSBwZWckcG9zRGV0YWlsc0NhY2hlW3BdO1xuICAgICAgZGV0YWlscyA9IHtcbiAgICAgICAgbGluZTogICBkZXRhaWxzLmxpbmUsXG4gICAgICAgIGNvbHVtbjogZGV0YWlscy5jb2x1bW5cbiAgICAgIH07XG5cbiAgICAgIHdoaWxlIChwIDwgcG9zKSB7XG4gICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHApID09PSAxMCkge1xuICAgICAgICAgIGRldGFpbHMubGluZSsrO1xuICAgICAgICAgIGRldGFpbHMuY29sdW1uID0gMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZXRhaWxzLmNvbHVtbisrO1xuICAgICAgICB9XG5cbiAgICAgICAgcCsrO1xuICAgICAgfVxuXG4gICAgICBwZWckcG9zRGV0YWlsc0NhY2hlW3Bvc10gPSBkZXRhaWxzO1xuICAgICAgcmV0dXJuIGRldGFpbHM7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcGVnJGNvbXB1dGVMb2NhdGlvbihzdGFydFBvcywgZW5kUG9zKSB7XG4gICAgdmFyIHN0YXJ0UG9zRGV0YWlscyA9IHBlZyRjb21wdXRlUG9zRGV0YWlscyhzdGFydFBvcyksXG4gICAgICAgIGVuZFBvc0RldGFpbHMgICA9IHBlZyRjb21wdXRlUG9zRGV0YWlscyhlbmRQb3MpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXJ0OiB7XG4gICAgICAgIG9mZnNldDogc3RhcnRQb3MsXG4gICAgICAgIGxpbmU6ICAgc3RhcnRQb3NEZXRhaWxzLmxpbmUsXG4gICAgICAgIGNvbHVtbjogc3RhcnRQb3NEZXRhaWxzLmNvbHVtblxuICAgICAgfSxcbiAgICAgIGVuZDoge1xuICAgICAgICBvZmZzZXQ6IGVuZFBvcyxcbiAgICAgICAgbGluZTogICBlbmRQb3NEZXRhaWxzLmxpbmUsXG4gICAgICAgIGNvbHVtbjogZW5kUG9zRGV0YWlscy5jb2x1bW5cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJGZhaWwoZXhwZWN0ZWQpIHtcbiAgICBpZiAocGVnJGN1cnJQb3MgPCBwZWckbWF4RmFpbFBvcykgeyByZXR1cm47IH1cblxuICAgIGlmIChwZWckY3VyclBvcyA+IHBlZyRtYXhGYWlsUG9zKSB7XG4gICAgICBwZWckbWF4RmFpbFBvcyA9IHBlZyRjdXJyUG9zO1xuICAgICAgcGVnJG1heEZhaWxFeHBlY3RlZCA9IFtdO1xuICAgIH1cblxuICAgIHBlZyRtYXhGYWlsRXhwZWN0ZWQucHVzaChleHBlY3RlZCk7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckYnVpbGRTaW1wbGVFcnJvcihtZXNzYWdlLCBsb2NhdGlvbikge1xuICAgIHJldHVybiBuZXcgcGVnJFN5bnRheEVycm9yKG1lc3NhZ2UsIG51bGwsIG51bGwsIGxvY2F0aW9uKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRidWlsZFN0cnVjdHVyZWRFcnJvcihleHBlY3RlZCwgZm91bmQsIGxvY2F0aW9uKSB7XG4gICAgcmV0dXJuIG5ldyBwZWckU3ludGF4RXJyb3IoXG4gICAgICBwZWckU3ludGF4RXJyb3IuYnVpbGRNZXNzYWdlKGV4cGVjdGVkLCBmb3VuZCksXG4gICAgICBleHBlY3RlZCxcbiAgICAgIGZvdW5kLFxuICAgICAgbG9jYXRpb25cbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlQmlibGlvZ3JhcGh5KCkge1xuICAgIHZhciBzMCwgczEsIHMyLCBzMztcblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBwZWckcGFyc2VfXygpO1xuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgczIgPSBbXTtcbiAgICAgIHMzID0gcGVnJHBhcnNlTm9kZSgpO1xuICAgICAgd2hpbGUgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMyLnB1c2goczMpO1xuICAgICAgICBzMyA9IHBlZyRwYXJzZU5vZGUoKTtcbiAgICAgIH1cbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMyA9IHBlZyRwYXJzZV9fKCk7XG4gICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgIHMxID0gcGVnJGMwKHMyKTtcbiAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlQ29tbWVudCgpIHtcbiAgICB2YXIgczAsIHMxLCBzMiwgczMsIHM0LCBzNSwgczYsIHM3O1xuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDY0KSB7XG4gICAgICBzMSA9IHBlZyRjMTtcbiAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMyKTsgfVxuICAgIH1cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMyID0gcGVnJHBhcnNlX18oKTtcbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA3KS50b0xvd2VyQ2FzZSgpID09PSBwZWckYzMpIHtcbiAgICAgICAgICBzMyA9IGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNyk7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgKz0gNztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzQpOyB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczQgPSBwZWckcGFyc2VfX2goKTtcbiAgICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHM1ID0gcGVnJHBhcnNlQnJhY2VkQ29tbWVudCgpO1xuICAgICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgICBzMSA9IHBlZyRjNShzNSk7XG4gICAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gNjQpIHtcbiAgICAgICAgczEgPSBwZWckYzE7XG4gICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMyKTsgfVxuICAgICAgfVxuICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMyID0gcGVnJHBhcnNlX18oKTtcbiAgICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNykudG9Mb3dlckNhc2UoKSA9PT0gcGVnJGMzKSB7XG4gICAgICAgICAgICBzMyA9IGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNyk7XG4gICAgICAgICAgICBwZWckY3VyclBvcyArPSA3O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjNCk7IH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzNCA9IHBlZyRwYXJzZV9faCgpO1xuICAgICAgICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHM1ID0gW107XG4gICAgICAgICAgICAgIGlmIChwZWckYzYudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICAgICAgICAgIHM2ID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHM2ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjNyk7IH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB3aGlsZSAoczYgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBzNS5wdXNoKHM2KTtcbiAgICAgICAgICAgICAgICBpZiAocGVnJGM2LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICAgICAgICAgIHM2ID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHM2ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM3KTsgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoczUgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBzNiA9IFtdO1xuICAgICAgICAgICAgICAgIGlmIChwZWckYzgudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICAgICAgICAgICAgczcgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgczcgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzkpOyB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHdoaWxlIChzNyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgczYucHVzaChzNyk7XG4gICAgICAgICAgICAgICAgICBpZiAocGVnJGM4LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgczcgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgczcgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjOSk7IH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgIHMxID0gcGVnJGMxMChzNSk7XG4gICAgICAgICAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIHMxID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIGlmIChwZWckYzExLnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICBzMiA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMiA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzEyKTsgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHMzID0gW107XG4gICAgICAgICAgaWYgKHBlZyRjNi50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgICAgICBzNCA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzNCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjNyk7IH1cbiAgICAgICAgICB9XG4gICAgICAgICAgd2hpbGUgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzMy5wdXNoKHM0KTtcbiAgICAgICAgICAgIGlmIChwZWckYzYudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICAgICAgICBzNCA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzNCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM3KTsgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHMyID0gW3MyLCBzM107XG4gICAgICAgICAgICBzMSA9IHMyO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMxO1xuICAgICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMxO1xuICAgICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzMiA9IFtdO1xuICAgICAgICAgIGlmIChwZWckYzgudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICAgICAgczMgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzkpOyB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHdoaWxlIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczIucHVzaChzMyk7XG4gICAgICAgICAgICBpZiAocGVnJGM4LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICAgICAgczMgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjOSk7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgIHMxID0gcGVnJGMxMyhzMSk7XG4gICAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZU5vZGUoKSB7XG4gICAgdmFyIHMwLCBzMTtcblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBwZWckcGFyc2VDb21tZW50KCk7XG4gICAgaWYgKHMxID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMSA9IHBlZyRwYXJzZVByZWFtYmxlRXhwcmVzc2lvbigpO1xuICAgICAgaWYgKHMxID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMxID0gcGVnJHBhcnNlU3RyaW5nRGVjbGFyYXRpb24oKTtcbiAgICAgICAgaWYgKHMxID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczEgPSBwZWckcGFyc2VFbnRyeSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICBzMSA9IHBlZyRjMTQoczEpO1xuICAgIH1cbiAgICBzMCA9IHMxO1xuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlQnJhY2VkQ29tbWVudCgpIHtcbiAgICB2YXIgczAsIHMxLCBzMiwgczM7XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMTIzKSB7XG4gICAgICBzMSA9IHBlZyRjMTU7XG4gICAgICBwZWckY3VyclBvcysrO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTYpOyB9XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgczIgPSBbXTtcbiAgICAgIGlmIChwZWckYzE3LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgczMgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTgpOyB9XG4gICAgICB9XG4gICAgICBpZiAoczMgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczMgPSBwZWckcGFyc2VCcmFjZWRDb21tZW50KCk7XG4gICAgICB9XG4gICAgICB3aGlsZSAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIucHVzaChzMyk7XG4gICAgICAgIGlmIChwZWckYzE3LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICBzMyA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzE4KTsgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzMyA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHMzID0gcGVnJHBhcnNlQnJhY2VkQ29tbWVudCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSAxMjUpIHtcbiAgICAgICAgICBzMyA9IHBlZyRjMTk7XG4gICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzIwKTsgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgIHMxID0gcGVnJGMyMShzMik7XG4gICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZUVudHJ5KCkge1xuICAgIHZhciBzMCwgczEsIHMyLCBzMywgczQsIHM1LCBzNiwgczcsIHM4LCBzOSwgczEwLCBzMTEsIHMxMjtcblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA2NCkge1xuICAgICAgczEgPSBwZWckYzE7XG4gICAgICBwZWckY3VyclBvcysrO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMik7IH1cbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMiA9IHBlZyRwYXJzZV9fKCk7XG4gICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczMgPSBwZWckY3VyclBvcztcbiAgICAgICAgczQgPSBbXTtcbiAgICAgICAgaWYgKHBlZyRjMjIudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICAgIHM1ID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHM1ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMjMpOyB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgd2hpbGUgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzNC5wdXNoKHM1KTtcbiAgICAgICAgICAgIGlmIChwZWckYzIyLnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICAgICAgczUgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgczUgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMjMpOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHM0ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzMyA9IGlucHV0LnN1YnN0cmluZyhzMywgcGVnJGN1cnJQb3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHMzID0gczQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczQgPSBwZWckcGFyc2VfXygpO1xuICAgICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgaWYgKHBlZyRjMjQudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICAgICAgICBzNSA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzNSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMyNSk7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzNiA9IHBlZyRwYXJzZV9fKCk7XG4gICAgICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHM3ID0gcGVnJHBhcnNlRW50cnlJZCgpO1xuICAgICAgICAgICAgICAgIGlmIChzNyA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgczcgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoczcgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgIHM4ID0gcGVnJHBhcnNlX18oKTtcbiAgICAgICAgICAgICAgICAgIGlmIChzOCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICBzOSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBzMTAgPSBwZWckcGFyc2VGaWVsZCgpO1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoczEwICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgczkucHVzaChzMTApO1xuICAgICAgICAgICAgICAgICAgICAgIHMxMCA9IHBlZyRwYXJzZUZpZWxkKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHM5ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgczEwID0gcGVnJHBhcnNlX18oKTtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoczEwICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGVnJGMyNi50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHMxMSA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzMTEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMjcpOyB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoczExICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHMxMiA9IHBlZyRwYXJzZV9fKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzMTIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMSA9IHBlZyRjMjgoczMsIHM3LCBzOSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZVByZWFtYmxlRXhwcmVzc2lvbigpIHtcbiAgICB2YXIgczAsIHMxLCBzMiwgczMsIHM0LCBzNSwgczYsIHM3LCBzOCwgczksIHMxMDtcblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA2NCkge1xuICAgICAgczEgPSBwZWckYzE7XG4gICAgICBwZWckY3VyclBvcysrO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMik7IH1cbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMiA9IHBlZyRwYXJzZV9fKCk7XG4gICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgOCkudG9Mb3dlckNhc2UoKSA9PT0gcGVnJGMyOSkge1xuICAgICAgICAgIHMzID0gaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA4KTtcbiAgICAgICAgICBwZWckY3VyclBvcyArPSA4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMzApOyB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczQgPSBwZWckcGFyc2VfXygpO1xuICAgICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgaWYgKHBlZyRjMjQudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICAgICAgICBzNSA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzNSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMyNSk7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzNiA9IHBlZyRwYXJzZV9fKCk7XG4gICAgICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHM3ID0gW107XG4gICAgICAgICAgICAgICAgczggPSBwZWckcGFyc2VFbnZpcm9ubWVudCgpO1xuICAgICAgICAgICAgICAgIGlmIChzOCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgczggPSBwZWckcGFyc2VCbG9jaygpO1xuICAgICAgICAgICAgICAgICAgaWYgKHM4ID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgIHM4ID0gcGVnJHBhcnNlTWF0aCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoczggPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBzOCA9IHBlZyRwYXJzZUNvbW1hbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoczggPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHM4ID0gcGVnJHBhcnNlVGV4dCgpO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB3aGlsZSAoczggIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgIHM3LnB1c2goczgpO1xuICAgICAgICAgICAgICAgICAgczggPSBwZWckcGFyc2VFbnZpcm9ubWVudCgpO1xuICAgICAgICAgICAgICAgICAgaWYgKHM4ID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgIHM4ID0gcGVnJHBhcnNlQmxvY2soKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHM4ID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgczggPSBwZWckcGFyc2VNYXRoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHM4ID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzOCA9IHBlZyRwYXJzZUNvbW1hbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzOCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzOCA9IHBlZyRwYXJzZVRleHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHM3ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICBzOCA9IHBlZyRwYXJzZV9fKCk7XG4gICAgICAgICAgICAgICAgICBpZiAoczggIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBlZyRjMjYudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICAgICAgICAgICAgICAgIHM5ID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIHM5ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMjcpOyB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHM5ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgczEwID0gcGVnJHBhcnNlX18oKTtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoczEwICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHMxID0gcGVnJGMzMShzNSwgczcsIHM5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlU3RyaW5nRGVjbGFyYXRpb24oKSB7XG4gICAgdmFyIHMwLCBzMSwgczIsIHMzLCBzNCwgczUsIHM2LCBzNywgczgsIHM5LCBzMTAsIHMxMSwgczEyO1xuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDY0KSB7XG4gICAgICBzMSA9IHBlZyRjMTtcbiAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMyKTsgfVxuICAgIH1cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMyID0gcGVnJHBhcnNlX18oKTtcbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA2KS50b0xvd2VyQ2FzZSgpID09PSBwZWckYzMyKSB7XG4gICAgICAgICAgczMgPSBpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDYpO1xuICAgICAgICAgIHBlZyRjdXJyUG9zICs9IDY7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMzMyk7IH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzNCA9IHBlZyRwYXJzZV9fKCk7XG4gICAgICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBpZiAocGVnJGMyNC50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgICAgICAgIHM1ID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHM1ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzI1KTsgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHM2ID0gcGVnJHBhcnNlX18oKTtcbiAgICAgICAgICAgICAgaWYgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczcgPSBwZWckcGFyc2VWYXJpYWJsZU5hbWUoKTtcbiAgICAgICAgICAgICAgICBpZiAoczcgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgIHM4ID0gcGVnJHBhcnNlRmllbGRTZXBhcmF0b3IoKTtcbiAgICAgICAgICAgICAgICAgIGlmIChzOCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICBzOSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBzMTAgPSBwZWckcGFyc2VSZWd1bGFyVmFsdWUoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHMxMCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChzMTAgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHM5LnB1c2goczEwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHMxMCA9IHBlZyRwYXJzZVJlZ3VsYXJWYWx1ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBzOSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHM5ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgczEwID0gcGVnJHBhcnNlX18oKTtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoczEwICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGVnJGMyNi50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHMxMSA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzMTEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMjcpOyB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoczExICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHMxMiA9IHBlZyRwYXJzZV9fKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzMTIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMSA9IHBlZyRjMzQoczcsIHM5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlRW50cnlJZCgpIHtcbiAgICB2YXIgczAsIHMxLCBzMiwgczMsIHM0O1xuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBzMSA9IHBlZyRwYXJzZV9fKCk7XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMiA9IHBlZyRjdXJyUG9zO1xuICAgICAgczMgPSBbXTtcbiAgICAgIGlmIChwZWckYzM1LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgczQgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMzYpOyB9XG4gICAgICB9XG4gICAgICB3aGlsZSAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczMucHVzaChzNCk7XG4gICAgICAgIGlmIChwZWckYzM1LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICBzNCA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzNCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzM2KTsgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIgPSBpbnB1dC5zdWJzdHJpbmcoczIsIHBlZyRjdXJyUG9zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMyID0gczM7XG4gICAgICB9XG4gICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczMgPSBwZWckcGFyc2VfXygpO1xuICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDQ0KSB7XG4gICAgICAgICAgICBzNCA9IHBlZyRjMzc7XG4gICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzNCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMzgpOyB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICBzMSA9IHBlZyRjMzkoczIpO1xuICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VGaWVsZCgpIHtcbiAgICB2YXIgczAsIHMxLCBzMiwgczMsIHM0LCBzNSwgczYsIHM3LCBzODtcblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBwZWckcGFyc2VGaWVsZE5hbWUoKTtcbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHBlZyRzYXZlZFBvcyA9IHBlZyRjdXJyUG9zO1xuICAgICAgczIgPSBwZWckYzQwKHMxKTtcbiAgICAgIGlmIChzMikge1xuICAgICAgICBzMiA9IHZvaWQgMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMyID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMyA9IHBlZyRwYXJzZUZpZWxkU2VwYXJhdG9yKCk7XG4gICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMTIzKSB7XG4gICAgICAgICAgICBzNCA9IHBlZyRjMTU7XG4gICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzNCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTYpOyB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczUgPSBwZWckY3VyclBvcztcbiAgICAgICAgICAgIHBlZyRzaWxlbnRGYWlscysrO1xuICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSAxMjMpIHtcbiAgICAgICAgICAgICAgczYgPSBwZWckYzE1O1xuICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgczYgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTYpOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwZWckc2lsZW50RmFpbHMtLTtcbiAgICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHM1O1xuICAgICAgICAgICAgICBzNSA9IHZvaWQgMDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHM1ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzNiA9IHBlZyRwYXJzZVZlcmJhdGltRmllbGRWYWx1ZSgpO1xuICAgICAgICAgICAgICBpZiAoczYgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDEyNSkge1xuICAgICAgICAgICAgICAgICAgczcgPSBwZWckYzE5O1xuICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgczcgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzIwKTsgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoczcgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgIHM4ID0gcGVnJHBhcnNlRmllbGRUZXJtaW5hdG9yKCk7XG4gICAgICAgICAgICAgICAgICBpZiAoczggIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgIHMxID0gcGVnJGM0MShzMSwgczYpO1xuICAgICAgICAgICAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cbiAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICBzMSA9IHBlZyRwYXJzZUZpZWxkTmFtZSgpO1xuICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHBlZyRzYXZlZFBvcyA9IHBlZyRjdXJyUG9zO1xuICAgICAgICBzMiA9IHBlZyRjNDIoczEpO1xuICAgICAgICBpZiAoczIpIHtcbiAgICAgICAgICBzMiA9IHZvaWQgMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMiA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczMgPSBwZWckcGFyc2VGaWVsZFNlcGFyYXRvcigpO1xuICAgICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczQgPSBwZWckcGFyc2VWZXJiYXRpbUZpZWxkVmFsdWUoKTtcbiAgICAgICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzNSA9IHBlZyRwYXJzZUZpZWxkVGVybWluYXRvcigpO1xuICAgICAgICAgICAgICBpZiAoczUgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICBzMSA9IHBlZyRjNDMoczEsIHM0KTtcbiAgICAgICAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgICAgczEgPSBwZWckcGFyc2VGaWVsZE5hbWUoKTtcbiAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczIgPSBwZWckcGFyc2VGaWVsZFNlcGFyYXRvcigpO1xuICAgICAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczMgPSBwZWckcGFyc2VGaWVsZFZhbHVlKCk7XG4gICAgICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczQgPSBwZWckcGFyc2VGaWVsZFRlcm1pbmF0b3IoKTtcbiAgICAgICAgICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICAgICAgczEgPSBwZWckYzQ0KHMxLCBzMyk7XG4gICAgICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZUZpZWxkTmFtZSgpIHtcbiAgICB2YXIgczAsIHMxLCBzMiwgczMsIHM0O1xuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBzMSA9IHBlZyRwYXJzZV9fKCk7XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMiA9IHBlZyRjdXJyUG9zO1xuICAgICAgczMgPSBbXTtcbiAgICAgIGlmIChwZWckYzQ1LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgczQgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjNDYpOyB9XG4gICAgICB9XG4gICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgd2hpbGUgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczMucHVzaChzNCk7XG4gICAgICAgICAgaWYgKHBlZyRjNDUudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICAgICAgczQgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzQ2KTsgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMyID0gaW5wdXQuc3Vic3RyaW5nKHMyLCBwZWckY3VyclBvcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzMiA9IHMzO1xuICAgICAgfVxuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICBzMSA9IHBlZyRjNDcoczIpO1xuICAgICAgICBzMCA9IHMxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZVZlcmJhdGltRmllbGRWYWx1ZSgpIHtcbiAgICB2YXIgczAsIHMxLCBzMiwgczM7XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMzQpIHtcbiAgICAgIHMxID0gcGVnJGM0ODtcbiAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM0OSk7IH1cbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMiA9IHBlZyRwYXJzZVRleHROb1F1b3RlcygpO1xuICAgICAgaWYgKHMyID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMyID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDM0KSB7XG4gICAgICAgICAgczMgPSBwZWckYzQ4O1xuICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM0OSk7IH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICBzMSA9IHBlZyRjNTAoczIpO1xuICAgICAgICAgIHMwID0gczE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG4gICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSAxMjMpIHtcbiAgICAgICAgczEgPSBwZWckYzE1O1xuICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTYpOyB9XG4gICAgICB9XG4gICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIgPSBbXTtcbiAgICAgICAgczMgPSBwZWckcGFyc2VWZXJiYXRpbVRleHQoKTtcbiAgICAgICAgd2hpbGUgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczIucHVzaChzMyk7XG4gICAgICAgICAgczMgPSBwZWckcGFyc2VWZXJiYXRpbVRleHQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDEyNSkge1xuICAgICAgICAgICAgczMgPSBwZWckYzE5O1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzIwKTsgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgczEgPSBwZWckYzUxKHMyKTtcbiAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlVmVyYmF0aW1UZXh0KCkge1xuICAgIHZhciBzMCwgczEsIHMyLCBzMztcblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBwZWckY3VyclBvcztcbiAgICBzMiA9IFtdO1xuICAgIGlmIChwZWckYzE3LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgIHMzID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxOCk7IH1cbiAgICB9XG4gICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICB3aGlsZSAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIucHVzaChzMyk7XG4gICAgICAgIGlmIChwZWckYzE3LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICBzMyA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzE4KTsgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHMyID0gcGVnJEZBSUxFRDtcbiAgICB9XG4gICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMSA9IGlucHV0LnN1YnN0cmluZyhzMSwgcGVnJGN1cnJQb3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHMyO1xuICAgIH1cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgczEgPSBwZWckYzUyKHMxKTtcbiAgICB9XG4gICAgczAgPSBzMTtcbiAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDEyMykge1xuICAgICAgICBzMSA9IHBlZyRjMTU7XG4gICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxNik7IH1cbiAgICAgIH1cbiAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMiA9IFtdO1xuICAgICAgICBzMyA9IHBlZyRwYXJzZVZlcmJhdGltVGV4dCgpO1xuICAgICAgICB3aGlsZSAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzMi5wdXNoKHMzKTtcbiAgICAgICAgICBzMyA9IHBlZyRwYXJzZVZlcmJhdGltVGV4dCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMTI1KSB7XG4gICAgICAgICAgICBzMyA9IHBlZyRjMTk7XG4gICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMjApOyB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICBzMSA9IHBlZyRjNTMoczIpO1xuICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VGaWVsZFZhbHVlKCkge1xuICAgIHZhciBzMCwgczEsIHMyLCBzMztcblxuICAgIHMwID0gcGVnJHBhcnNlTnVtYmVyKCk7XG4gICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgcGVnJHNhdmVkUG9zID0gcGVnJGN1cnJQb3M7XG4gICAgICBzMSA9IHBlZyRjNTQoKTtcbiAgICAgIGlmIChzMSkge1xuICAgICAgICBzMSA9IHZvaWQgMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMiA9IFtdO1xuICAgICAgICBzMyA9IHBlZyRwYXJzZVJlZ3VsYXJWYWx1ZSgpO1xuICAgICAgICBpZiAoczMgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzMyA9IHBlZyRwYXJzZVN0cmluZ1ZhbHVlKCk7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczIucHVzaChzMyk7XG4gICAgICAgICAgczMgPSBwZWckcGFyc2VSZWd1bGFyVmFsdWUoKTtcbiAgICAgICAgICBpZiAoczMgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHMzID0gcGVnJHBhcnNlU3RyaW5nVmFsdWUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgczEgPSBwZWckYzU1KHMyKTtcbiAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlUmVndWxhclZhbHVlKCkge1xuICAgIHZhciBzMCwgczEsIHMyLCBzMywgczQsIHM1O1xuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDM0KSB7XG4gICAgICBzMSA9IHBlZyRjNDg7XG4gICAgICBwZWckY3VyclBvcysrO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjNDkpOyB9XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgczIgPSBbXTtcbiAgICAgIHMzID0gcGVnJHBhcnNlRW52aXJvbm1lbnQoKTtcbiAgICAgIGlmIChzMyA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMyA9IHBlZyRwYXJzZUJsb2NrKCk7XG4gICAgICAgIGlmIChzMyA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHMzID0gcGVnJHBhcnNlTWF0aCgpO1xuICAgICAgICAgIGlmIChzMyA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczMgPSBwZWckcGFyc2VDb21tYW5kKCk7XG4gICAgICAgICAgICBpZiAoczMgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczMgPSBwZWckcGFyc2VUZXh0Tm9RdW90ZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHdoaWxlIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMi5wdXNoKHMzKTtcbiAgICAgICAgczMgPSBwZWckcGFyc2VFbnZpcm9ubWVudCgpO1xuICAgICAgICBpZiAoczMgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzMyA9IHBlZyRwYXJzZUJsb2NrKCk7XG4gICAgICAgICAgaWYgKHMzID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzMyA9IHBlZyRwYXJzZU1hdGgoKTtcbiAgICAgICAgICAgIGlmIChzMyA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzMyA9IHBlZyRwYXJzZUNvbW1hbmQoKTtcbiAgICAgICAgICAgICAgaWYgKHMzID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczMgPSBwZWckcGFyc2VUZXh0Tm9RdW90ZXMoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMzQpIHtcbiAgICAgICAgICBzMyA9IHBlZyRjNDg7XG4gICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzQ5KTsgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHM0ID0gcGVnJHBhcnNlQ29uY2F0KCk7XG4gICAgICAgICAgaWYgKHM0ID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzNCA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICBzMSA9IHBlZyRjNTYoczIpO1xuICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG4gICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNikgPT09IHBlZyRjNTcpIHtcbiAgICAgICAgczEgPSBwZWckYzU3O1xuICAgICAgICBwZWckY3VyclBvcyArPSA2O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjNTgpOyB9XG4gICAgICB9XG4gICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIgPSBwZWckY3VyclBvcztcbiAgICAgICAgcGVnJHNpbGVudEZhaWxzKys7XG4gICAgICAgIGlmIChwZWckYzU5LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICBzMyA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzYwKTsgfVxuICAgICAgICB9XG4gICAgICAgIHBlZyRzaWxlbnRGYWlscy0tO1xuICAgICAgICBpZiAoczMgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzMiA9IHZvaWQgMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMyO1xuICAgICAgICAgIHMyID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzMyA9IFtdO1xuICAgICAgICAgIHM0ID0gcGVnJHBhcnNlVmVyYmF0aW1UZXh0KCk7XG4gICAgICAgICAgd2hpbGUgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzMy5wdXNoKHM0KTtcbiAgICAgICAgICAgIHM0ID0gcGVnJHBhcnNlVmVyYmF0aW1UZXh0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSAxMjUpIHtcbiAgICAgICAgICAgICAgczQgPSBwZWckYzE5O1xuICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMjApOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczUgPSBwZWckcGFyc2VDb25jYXQoKTtcbiAgICAgICAgICAgICAgaWYgKHM1ID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczUgPSBudWxsO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMxID0gcGVnJGM1MShzMyk7XG4gICAgICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMTIzKSB7XG4gICAgICAgICAgczEgPSBwZWckYzE1O1xuICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxNik7IH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzMiA9IFtdO1xuICAgICAgICAgIHMzID0gcGVnJHBhcnNlRW52aXJvbm1lbnQoKTtcbiAgICAgICAgICBpZiAoczMgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHMzID0gcGVnJHBhcnNlQmxvY2soKTtcbiAgICAgICAgICAgIGlmIChzMyA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzMyA9IHBlZyRwYXJzZU1hdGgoKTtcbiAgICAgICAgICAgICAgaWYgKHMzID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczMgPSBwZWckcGFyc2VDb21tYW5kKCk7XG4gICAgICAgICAgICAgICAgaWYgKHMzID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICBzMyA9IHBlZyRwYXJzZVRleHQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgd2hpbGUgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzMi5wdXNoKHMzKTtcbiAgICAgICAgICAgIHMzID0gcGVnJHBhcnNlRW52aXJvbm1lbnQoKTtcbiAgICAgICAgICAgIGlmIChzMyA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzMyA9IHBlZyRwYXJzZUJsb2NrKCk7XG4gICAgICAgICAgICAgIGlmIChzMyA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHMzID0gcGVnJHBhcnNlTWF0aCgpO1xuICAgICAgICAgICAgICAgIGlmIChzMyA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgczMgPSBwZWckcGFyc2VDb21tYW5kKCk7XG4gICAgICAgICAgICAgICAgICBpZiAoczMgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgczMgPSBwZWckcGFyc2VUZXh0KCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSAxMjUpIHtcbiAgICAgICAgICAgICAgczMgPSBwZWckYzE5O1xuICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMjApOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczQgPSBwZWckcGFyc2VDb25jYXQoKTtcbiAgICAgICAgICAgICAgaWYgKHM0ID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczQgPSBudWxsO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMxID0gcGVnJGM1NihzMik7XG4gICAgICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgIHMxID0gcGVnJHBhcnNlU3RyaW5nUmVmZXJlbmNlKCk7XG4gICAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzMiA9IHBlZyRwYXJzZUNvbmNhdCgpO1xuICAgICAgICAgICAgaWYgKHMyID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHMyID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgICAgczEgPSBwZWckYzU2KHMxKTtcbiAgICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VTdHJpbmdWYWx1ZSgpIHtcbiAgICB2YXIgczAsIHMxLCBzMjtcblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBwZWckcGFyc2VTdHJpbmdSZWZlcmVuY2UoKTtcbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMyID0gcGVnJHBhcnNlQ29uY2F0KCk7XG4gICAgICBpZiAoczIgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIgPSBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICBzMSA9IHBlZyRjNTYoczEpO1xuICAgICAgICBzMCA9IHMxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZVRleHQoKSB7XG4gICAgdmFyIHMwLCBzMSwgczI7XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIHMxID0gW107XG4gICAgaWYgKHBlZyRjNjEudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgczIgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICB9IGVsc2Uge1xuICAgICAgczIgPSBwZWckRkFJTEVEO1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzYyKTsgfVxuICAgIH1cbiAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHdoaWxlIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMS5wdXNoKHMyKTtcbiAgICAgICAgaWYgKHBlZyRjNjEudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICAgIHMyID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHMyID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjNjIpOyB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgIH1cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgczEgPSBwZWckYzYzKHMxKTtcbiAgICB9XG4gICAgczAgPSBzMTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZVRleHROb1F1b3RlcygpIHtcbiAgICB2YXIgczAsIHMxLCBzMjtcblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBbXTtcbiAgICBpZiAocGVnJGM2NC50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICBzMiA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICBwZWckY3VyclBvcysrO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMiA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjNjUpOyB9XG4gICAgfVxuICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgd2hpbGUgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMxLnB1c2goczIpO1xuICAgICAgICBpZiAocGVnJGM2NC50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgICAgczIgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczIgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM2NSk7IH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICBzMSA9IHBlZyRjNjMoczEpO1xuICAgIH1cbiAgICBzMCA9IHMxO1xuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlTnVtYmVyKCkge1xuICAgIHZhciBzMCwgczEsIHMyLCBzMztcblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBwZWckY3VyclBvcztcbiAgICBzMiA9IFtdO1xuICAgIGlmIChwZWckYzY2LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgIHMzID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM2Nyk7IH1cbiAgICB9XG4gICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICB3aGlsZSAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIucHVzaChzMyk7XG4gICAgICAgIGlmIChwZWckYzY2LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICBzMyA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzY3KTsgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHMyID0gcGVnJEZBSUxFRDtcbiAgICB9XG4gICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMSA9IGlucHV0LnN1YnN0cmluZyhzMSwgcGVnJGN1cnJQb3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHMyO1xuICAgIH1cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgczEgPSBwZWckYzY4KHMxKTtcbiAgICB9XG4gICAgczAgPSBzMTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZVN0cmluZ1JlZmVyZW5jZSgpIHtcbiAgICB2YXIgczAsIHMxO1xuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBzMSA9IHBlZyRwYXJzZVZhcmlhYmxlTmFtZSgpO1xuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICBzMSA9IHBlZyRjNjkoczEpO1xuICAgIH1cbiAgICBzMCA9IHMxO1xuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlRW52aXJvbm1lbnQoKSB7XG4gICAgdmFyIHMwLCBzMSwgczIsIHMzLCBzNCwgczUsIHM2LCBzNywgczg7XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDcpID09PSBwZWckYzcwKSB7XG4gICAgICBzMSA9IHBlZyRjNzA7XG4gICAgICBwZWckY3VyclBvcyArPSA3O1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjNzEpOyB9XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgczIgPSBwZWckY3VyclBvcztcbiAgICAgIHMzID0gW107XG4gICAgICBpZiAocGVnJGM3Mi50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgIHM0ID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHM0ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzczKTsgfVxuICAgICAgfVxuICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHdoaWxlIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHMzLnB1c2goczQpO1xuICAgICAgICAgIGlmIChwZWckYzcyLnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICAgIHM0ID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHM0ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM3Myk7IH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMiA9IGlucHV0LnN1YnN0cmluZyhzMiwgcGVnJGN1cnJQb3MpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczIgPSBzMztcbiAgICAgIH1cbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDEyNSkge1xuICAgICAgICAgIHMzID0gcGVnJGMxOTtcbiAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMjApOyB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczQgPSBbXTtcbiAgICAgICAgICBzNSA9IHBlZyRwYXJzZUVudmlyb25tZW50KCk7XG4gICAgICAgICAgaWYgKHM1ID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzNSA9IHBlZyRwYXJzZUJsb2NrKCk7XG4gICAgICAgICAgICBpZiAoczUgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczUgPSBwZWckcGFyc2VDb21tYW5kKCk7XG4gICAgICAgICAgICAgIGlmIChzNSA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHM1ID0gcGVnJHBhcnNlTWF0aCgpO1xuICAgICAgICAgICAgICAgIGlmIChzNSA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgczUgPSBwZWckcGFyc2VUZXh0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHdoaWxlIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczQucHVzaChzNSk7XG4gICAgICAgICAgICBzNSA9IHBlZyRwYXJzZUVudmlyb25tZW50KCk7XG4gICAgICAgICAgICBpZiAoczUgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczUgPSBwZWckcGFyc2VCbG9jaygpO1xuICAgICAgICAgICAgICBpZiAoczUgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBzNSA9IHBlZyRwYXJzZUNvbW1hbmQoKTtcbiAgICAgICAgICAgICAgICBpZiAoczUgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgIHM1ID0gcGVnJHBhcnNlTWF0aCgpO1xuICAgICAgICAgICAgICAgICAgaWYgKHM1ID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgIHM1ID0gcGVnJHBhcnNlVGV4dCgpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDUpID09PSBwZWckYzc0KSB7XG4gICAgICAgICAgICAgIHM1ID0gcGVnJGM3NDtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgKz0gNTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHM1ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzc1KTsgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHM2ID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgICAgIHM3ID0gW107XG4gICAgICAgICAgICAgIGlmIChwZWckYzcyLnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICAgICAgICBzOCA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzOCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzczKTsgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChzOCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHdoaWxlIChzOCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgczcucHVzaChzOCk7XG4gICAgICAgICAgICAgICAgICBpZiAocGVnJGM3Mi50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgICAgICAgICAgICAgIHM4ID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHM4ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzczKTsgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzNyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHM3ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczYgPSBpbnB1dC5zdWJzdHJpbmcoczYsIHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzNiA9IHM3O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMTI1KSB7XG4gICAgICAgICAgICAgICAgICBzNyA9IHBlZyRjMTk7XG4gICAgICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBzNyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMjApOyB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzNyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgICAgICAgICBzOCA9IHBlZyRjNzYoczIsIHM0LCBzNik7XG4gICAgICAgICAgICAgICAgICBpZiAoczgpIHtcbiAgICAgICAgICAgICAgICAgICAgczggPSB2b2lkIDA7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzOCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBpZiAoczggIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgIHMxID0gcGVnJGM3NyhzMiwgczQsIHM2KTtcbiAgICAgICAgICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VCbG9jaygpIHtcbiAgICB2YXIgczAsIHMxLCBzMiwgczMsIHM0LCBzNSwgczY7XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDIpID09PSBwZWckYzc4KSB7XG4gICAgICBzMSA9IHBlZyRjNzg7XG4gICAgICBwZWckY3VyclBvcyArPSAyO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjNzkpOyB9XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgczIgPSBwZWckcGFyc2VFeHRlbmRlZERpYWNyaXRpYygpO1xuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMzID0gcGVnJHBhcnNlX18oKTtcbiAgICAgICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgaWYgKHBlZyRjNzIudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICAgICAgczQgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzczKTsgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoczQgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHM0ID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDkyKSB7XG4gICAgICAgICAgICAgIHM1ID0gcGVnJGM4MDtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHM1ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzgxKTsgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIGlmIChwZWckYzgyLnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICAgICAgICBzNiA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzNiA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzgzKTsgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHM1ID0gW3M1LCBzNl07XG4gICAgICAgICAgICAgICAgczQgPSBzNTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHM0O1xuICAgICAgICAgICAgICAgIHM0ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzNDtcbiAgICAgICAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMTI1KSB7XG4gICAgICAgICAgICAgIHM1ID0gcGVnJGMxOTtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHM1ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzIwKTsgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgICBzMSA9IHBlZyRjODQoczIsIHM0KTtcbiAgICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG4gICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNikgPT09IHBlZyRjNTcpIHtcbiAgICAgICAgczEgPSBwZWckYzU3O1xuICAgICAgICBwZWckY3VyclBvcyArPSA2O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjNTgpOyB9XG4gICAgICB9XG4gICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIgPSBwZWckY3VyclBvcztcbiAgICAgICAgcGVnJHNpbGVudEZhaWxzKys7XG4gICAgICAgIGlmIChwZWckYzU5LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICBzMyA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzYwKTsgfVxuICAgICAgICB9XG4gICAgICAgIHBlZyRzaWxlbnRGYWlscy0tO1xuICAgICAgICBpZiAoczMgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzMiA9IHZvaWQgMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMyO1xuICAgICAgICAgIHMyID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzMyA9IFtdO1xuICAgICAgICAgIHM0ID0gcGVnJHBhcnNlVmVyYmF0aW1UZXh0KCk7XG4gICAgICAgICAgd2hpbGUgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzMy5wdXNoKHM0KTtcbiAgICAgICAgICAgIHM0ID0gcGVnJHBhcnNlVmVyYmF0aW1UZXh0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSAxMjUpIHtcbiAgICAgICAgICAgICAgczQgPSBwZWckYzE5O1xuICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMjApOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICAgIHMxID0gcGVnJGM4NShzMyk7XG4gICAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSAxMjMpIHtcbiAgICAgICAgICBzMSA9IHBlZyRjMTU7XG4gICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzE2KTsgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHMyID0gW107XG4gICAgICAgICAgczMgPSBwZWckcGFyc2VFbnZpcm9ubWVudCgpO1xuICAgICAgICAgIGlmIChzMyA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczMgPSBwZWckcGFyc2VCbG9jaygpO1xuICAgICAgICAgICAgaWYgKHMzID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHMzID0gcGVnJHBhcnNlQ29tbWFuZCgpO1xuICAgICAgICAgICAgICBpZiAoczMgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBzMyA9IHBlZyRwYXJzZU1hdGgoKTtcbiAgICAgICAgICAgICAgICBpZiAoczMgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgIHMzID0gcGVnJHBhcnNlVGV4dCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB3aGlsZSAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHMyLnB1c2goczMpO1xuICAgICAgICAgICAgczMgPSBwZWckcGFyc2VFbnZpcm9ubWVudCgpO1xuICAgICAgICAgICAgaWYgKHMzID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHMzID0gcGVnJHBhcnNlQmxvY2soKTtcbiAgICAgICAgICAgICAgaWYgKHMzID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczMgPSBwZWckcGFyc2VDb21tYW5kKCk7XG4gICAgICAgICAgICAgICAgaWYgKHMzID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICBzMyA9IHBlZyRwYXJzZU1hdGgoKTtcbiAgICAgICAgICAgICAgICAgIGlmIChzMyA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICBzMyA9IHBlZyRwYXJzZVRleHQoKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDEyNSkge1xuICAgICAgICAgICAgICBzMyA9IHBlZyRjMTk7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMyMCk7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgICAgczEgPSBwZWckYzg2KHMyKTtcbiAgICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VNYXRoKCkge1xuICAgIHZhciBzMCwgczEsIHMyLCBzMywgczQsIHM1LCBzNjtcblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgcGVnJHNhdmVkUG9zID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBwZWckYzg3KCk7XG4gICAgaWYgKHMxKSB7XG4gICAgICBzMSA9IHZvaWQgMDtcbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgIH1cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMzYpIHtcbiAgICAgICAgczIgPSBwZWckYzg4O1xuICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczIgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjODkpOyB9XG4gICAgICB9XG4gICAgICBpZiAoczIgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMikgPT09IHBlZyRjOTApIHtcbiAgICAgICAgICBzMiA9IHBlZyRjOTA7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgKz0gMjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMiA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzkxKTsgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgcGVnJHNhdmVkUG9zID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIHMzID0gcGVnJGM5MihzMik7XG4gICAgICAgIGlmIChzMykge1xuICAgICAgICAgIHMzID0gdm9pZCAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzNCA9IFtdO1xuICAgICAgICAgIHM1ID0gcGVnJHBhcnNlQmxvY2soKTtcbiAgICAgICAgICBpZiAoczUgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHM1ID0gcGVnJHBhcnNlQ29tbWFuZCgpO1xuICAgICAgICAgICAgaWYgKHM1ID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHM1ID0gcGVnJHBhcnNlVGV4dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB3aGlsZSAoczUgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHM0LnB1c2goczUpO1xuICAgICAgICAgICAgczUgPSBwZWckcGFyc2VCbG9jaygpO1xuICAgICAgICAgICAgaWYgKHM1ID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHM1ID0gcGVnJHBhcnNlQ29tbWFuZCgpO1xuICAgICAgICAgICAgICBpZiAoczUgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBzNSA9IHBlZyRwYXJzZVRleHQoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMzYpIHtcbiAgICAgICAgICAgICAgczUgPSBwZWckYzg4O1xuICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgczUgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjODkpOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoczUgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMikgPT09IHBlZyRjOTApIHtcbiAgICAgICAgICAgICAgICBzNSA9IHBlZyRjOTA7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgKz0gMjtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzNSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzkxKTsgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoczUgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgICAgIHM2ID0gcGVnJGM5MyhzMiwgczQpO1xuICAgICAgICAgICAgICBpZiAoczYpIHtcbiAgICAgICAgICAgICAgICBzNiA9IHZvaWQgMDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzNiA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICAgICAgczEgPSBwZWckYzk0KHMyLCBzNCk7XG4gICAgICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZUxpbmVDb21tZW50KCkge1xuICAgIHZhciBzMCwgczEsIHMyLCBzMywgczQsIHM1O1xuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDM3KSB7XG4gICAgICBzMSA9IHBlZyRjOTU7XG4gICAgICBwZWckY3VyclBvcysrO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjOTYpOyB9XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgczIgPSBwZWckcGFyc2VfX2goKTtcbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMyA9IHBlZyRjdXJyUG9zO1xuICAgICAgICBzNCA9IFtdO1xuICAgICAgICBpZiAocGVnJGM5Ny50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgICAgczUgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczUgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM5OCk7IH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoczUgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICB3aGlsZSAoczUgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHM0LnB1c2goczUpO1xuICAgICAgICAgICAgaWYgKHBlZyRjOTcudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICAgICAgICBzNSA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzNSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM5OCk7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHMzID0gaW5wdXQuc3Vic3RyaW5nKHMzLCBwZWckY3VyclBvcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczMgPSBzNDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzNCA9IFtdO1xuICAgICAgICAgIHM1ID0gcGVnJHBhcnNlRU9MKCk7XG4gICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICB3aGlsZSAoczUgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczQucHVzaChzNSk7XG4gICAgICAgICAgICAgIHM1ID0gcGVnJHBhcnNlRU9MKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHM0ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgIHMxID0gcGVnJGM5OShzMyk7XG4gICAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZUNvbW1hbmQoKSB7XG4gICAgdmFyIHMwO1xuXG4gICAgczAgPSBwZWckcGFyc2VTY3JpcHRDb21tYW5kKCk7XG4gICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMCA9IHBlZyRwYXJzZURpYWNyaXRpY0NvbW1hbmQoKTtcbiAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMCA9IHBlZyRwYXJzZVJlZ3VsYXJDb21tYW5kKCk7XG4gICAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHMwID0gcGVnJHBhcnNlU3ltYm9sQ29tbWFuZCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlU2NyaXB0Q29tbWFuZCgpIHtcbiAgICB2YXIgczAsIHMxLCBzMiwgczM7XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIGlmIChwZWckYzEwMC50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICBzMSA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICBwZWckY3VyclBvcysrO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTAxKTsgfVxuICAgIH1cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMyID0gcGVnJHBhcnNlX19oKCk7XG4gICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczMgPSBwZWckcGFyc2VSZXF1aXJlZEFyZ3VtZW50KCk7XG4gICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgIHMxID0gcGVnJGMxMDIoczEsIHMzKTtcbiAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlRGlhY3JpdGljQ29tbWFuZCgpIHtcbiAgICB2YXIgczAsIHMxLCBzMiwgczMsIHM0LCBzNSwgczY7XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gOTIpIHtcbiAgICAgIHMxID0gcGVnJGM4MDtcbiAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM4MSk7IH1cbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMiA9IHBlZyRwYXJzZVNpbXBsZURpYWNyaXRpYygpO1xuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMzID0gcGVnJHBhcnNlX18oKTtcbiAgICAgICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgaWYgKHBlZyRjNzIudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICAgICAgczQgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzczKTsgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoczQgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHM0ID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDkyKSB7XG4gICAgICAgICAgICAgIHM1ID0gcGVnJGM4MDtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHM1ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzgxKTsgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIGlmIChwZWckYzgyLnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICAgICAgICBzNiA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzNiA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzgzKTsgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHM1ID0gW3M1LCBzNl07XG4gICAgICAgICAgICAgICAgczQgPSBzNTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHM0O1xuICAgICAgICAgICAgICAgIHM0ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzNDtcbiAgICAgICAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgczEgPSBwZWckYzg0KHMyLCBzNCk7XG4gICAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cbiAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDkyKSB7XG4gICAgICAgIHMxID0gcGVnJGM4MDtcbiAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzgxKTsgfVxuICAgICAgfVxuICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMyID0gcGVnJHBhcnNlRXh0ZW5kZWREaWFjcml0aWMoKTtcbiAgICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSAxMjMpIHtcbiAgICAgICAgICAgIHMzID0gcGVnJGMxNTtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxNik7IH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBpZiAocGVnJGM3Mi50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgICAgICAgIHM0ID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHM0ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzczKTsgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHM0ID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHM0ID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gOTIpIHtcbiAgICAgICAgICAgICAgICBzNSA9IHBlZyRjODA7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzNSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzgxKTsgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIGlmIChwZWckYzgyLnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICAgICAgICAgIHM2ID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHM2ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM4Myk7IH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICBzNSA9IFtzNSwgczZdO1xuICAgICAgICAgICAgICAgICAgczQgPSBzNTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzNDtcbiAgICAgICAgICAgICAgICAgIHM0ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzNDtcbiAgICAgICAgICAgICAgICBzNCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDEyNSkge1xuICAgICAgICAgICAgICAgIHM1ID0gcGVnJGMxOTtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHM1ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMjApOyB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICAgICAgczEgPSBwZWckYzg0KHMyLCBzNCk7XG4gICAgICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gOTIpIHtcbiAgICAgICAgICBzMSA9IHBlZyRjODA7XG4gICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzgxKTsgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHMyID0gcGVnJHBhcnNlRXh0ZW5kZWREaWFjcml0aWMoKTtcbiAgICAgICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHMzID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgICBwZWckc2lsZW50RmFpbHMrKztcbiAgICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMTIzKSB7XG4gICAgICAgICAgICAgIHM0ID0gcGVnJGMxNTtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHM0ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzE2KTsgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGVnJHNpbGVudEZhaWxzLS07XG4gICAgICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgczMgPSB2b2lkIDA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczQgPSBwZWckcGFyc2VSZWd1bGFyVmFsdWUoKTtcbiAgICAgICAgICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICAgICAgczEgPSBwZWckYzEwMyhzMiwgczQpO1xuICAgICAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VTeW1ib2xDb21tYW5kKCkge1xuICAgIHZhciBzMCwgczEsIHMyLCBzMztcblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA5Mikge1xuICAgICAgczEgPSBwZWckYzgwO1xuICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzgxKTsgfVxuICAgIH1cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMyID0gcGVnJGN1cnJQb3M7XG4gICAgICBpZiAocGVnJGMxMDQudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICBzMyA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxMDUpOyB9XG4gICAgICB9XG4gICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIgPSBpbnB1dC5zdWJzdHJpbmcoczIsIHBlZyRjdXJyUG9zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMyID0gczM7XG4gICAgICB9XG4gICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgIHMxID0gcGVnJGMxMDYoczIpO1xuICAgICAgICBzMCA9IHMxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZVJlZ3VsYXJDb21tYW5kKCkge1xuICAgIHZhciBzMCwgczEsIHMyLCBzMywgczQsIHM1LCBzNiwgczcsIHM4LCBzOSwgczEwO1xuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDkyKSB7XG4gICAgICBzMSA9IHBlZyRjODA7XG4gICAgICBwZWckY3VyclBvcysrO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjODEpOyB9XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMTApID09PSBwZWckYzEwNykge1xuICAgICAgICBzMiA9IHBlZyRjMTA3O1xuICAgICAgICBwZWckY3VyclBvcyArPSAxMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMyID0gcGVnJEZBSUxFRDtcbiAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzEwOCk7IH1cbiAgICAgIH1cbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMyA9IHBlZyRwYXJzZUJsb2NrKCk7XG4gICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgIHM0ID0gcGVnJGMxMDkoczIsIHMzKTtcbiAgICAgICAgICBpZiAoczQpIHtcbiAgICAgICAgICAgIHM0ID0gdm9pZCAwO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzNCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczUgPSBbXTtcbiAgICAgICAgICAgIHM2ID0gcGVnJHBhcnNlT3B0aW9uYWxBcmd1bWVudCgpO1xuICAgICAgICAgICAgd2hpbGUgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHM1LnB1c2goczYpO1xuICAgICAgICAgICAgICBzNiA9IHBlZyRwYXJzZU9wdGlvbmFsQXJndW1lbnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzNiA9IHBlZyRwYXJzZVJlcXVpcmVkQXJndW1lbnQoKTtcbiAgICAgICAgICAgICAgaWYgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICAgICAgczEgPSBwZWckYzExMChzMiwgczMsIHM1LCBzNik7XG4gICAgICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cbiAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDkyKSB7XG4gICAgICAgIHMxID0gcGVnJGM4MDtcbiAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzgxKTsgfVxuICAgICAgfVxuICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMyID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIHBlZyRzaWxlbnRGYWlscysrO1xuICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA1KSA9PT0gcGVnJGMxMTEpIHtcbiAgICAgICAgICBzMyA9IHBlZyRjMTExO1xuICAgICAgICAgIHBlZyRjdXJyUG9zICs9IDU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxMTIpOyB9XG4gICAgICAgIH1cbiAgICAgICAgcGVnJHNpbGVudEZhaWxzLS07XG4gICAgICAgIGlmIChzMyA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHMyID0gdm9pZCAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczI7XG4gICAgICAgICAgczIgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHMzID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgcGVnJHNpbGVudEZhaWxzKys7XG4gICAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMykgPT09IHBlZyRjMTEzKSB7XG4gICAgICAgICAgICBzNCA9IHBlZyRjMTEzO1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgKz0gMztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzExNCk7IH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcGVnJHNpbGVudEZhaWxzLS07XG4gICAgICAgICAgaWYgKHM0ID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzMyA9IHZvaWQgMDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzNCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgICAgczUgPSBbXTtcbiAgICAgICAgICAgIGlmIChwZWckYzIyLnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICAgICAgczYgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgczYgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMjMpOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoczYgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgd2hpbGUgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczUucHVzaChzNik7XG4gICAgICAgICAgICAgICAgaWYgKHBlZyRjMjIudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICAgICAgICAgICAgczYgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgczYgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzIzKTsgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgczUgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHM0ID0gaW5wdXQuc3Vic3RyaW5nKHM0LCBwZWckY3VyclBvcyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzNCA9IHM1O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgICAgICBzNSA9IHBlZyRjMTE1KHM0KTtcbiAgICAgICAgICAgICAgaWYgKHM1KSB7XG4gICAgICAgICAgICAgICAgczUgPSB2b2lkIDA7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgczUgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHM2ID0gW107XG4gICAgICAgICAgICAgICAgczcgPSBwZWckcGFyc2VPcHRpb25hbEFyZ3VtZW50KCk7XG4gICAgICAgICAgICAgICAgd2hpbGUgKHM3ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICBzNi5wdXNoKHM3KTtcbiAgICAgICAgICAgICAgICAgIHM3ID0gcGVnJHBhcnNlT3B0aW9uYWxBcmd1bWVudCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoczYgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgIHM3ID0gcGVnJHBhcnNlX19oKCk7XG4gICAgICAgICAgICAgICAgICBpZiAoczcgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgczggPSBwZWckY3VyclBvcztcbiAgICAgICAgICAgICAgICAgICAgcGVnJHNpbGVudEZhaWxzKys7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMTIzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgczkgPSBwZWckYzE1O1xuICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgczkgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxNik7IH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBwZWckc2lsZW50RmFpbHMtLTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHM5ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzODtcbiAgICAgICAgICAgICAgICAgICAgICBzOCA9IHZvaWQgMDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBzOCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHM4ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgczkgPSBwZWckcGFyc2VWZXJiYXRpbUZpZWxkVmFsdWUoKTtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoczkgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHMxMCA9IHBlZyRwYXJzZVZlcmJhdGltRmllbGRWYWx1ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMxMCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgczEgPSBwZWckYzExNihzNCwgczYsIHM5LCBzMTApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gOTIpIHtcbiAgICAgICAgICBzMSA9IHBlZyRjODA7XG4gICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzgxKTsgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHMyID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgcGVnJHNpbGVudEZhaWxzKys7XG4gICAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNSkgPT09IHBlZyRjMTExKSB7XG4gICAgICAgICAgICBzMyA9IHBlZyRjMTExO1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgKz0gNTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzExMik7IH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcGVnJHNpbGVudEZhaWxzLS07XG4gICAgICAgICAgaWYgKHMzID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzMiA9IHZvaWQgMDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMjtcbiAgICAgICAgICAgIHMyID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzMyA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgICAgcGVnJHNpbGVudEZhaWxzKys7XG4gICAgICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCAzKSA9PT0gcGVnJGMxMTMpIHtcbiAgICAgICAgICAgICAgczQgPSBwZWckYzExMztcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgKz0gMztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHM0ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzExNCk7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBlZyRzaWxlbnRGYWlscy0tO1xuICAgICAgICAgICAgaWYgKHM0ID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHMzID0gdm9pZCAwO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHM0ID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgICAgIHM1ID0gW107XG4gICAgICAgICAgICAgIGlmIChwZWckYzIyLnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICAgICAgICBzNiA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzNiA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzIzKTsgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHdoaWxlIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgczUucHVzaChzNik7XG4gICAgICAgICAgICAgICAgICBpZiAocGVnJGMyMi50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgICAgICAgICAgICAgIHM2ID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHM2ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzIzKTsgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzNSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczQgPSBpbnB1dC5zdWJzdHJpbmcoczQsIHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzNCA9IHM1O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgICAgICAgIHM1ID0gcGVnJGMxMTcoczQpO1xuICAgICAgICAgICAgICAgIGlmIChzNSkge1xuICAgICAgICAgICAgICAgICAgczUgPSB2b2lkIDA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHM1ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICBzNiA9IFtdO1xuICAgICAgICAgICAgICAgICAgczcgPSBwZWckcGFyc2VPcHRpb25hbEFyZ3VtZW50KCk7XG4gICAgICAgICAgICAgICAgICB3aGlsZSAoczcgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgczYucHVzaChzNyk7XG4gICAgICAgICAgICAgICAgICAgIHM3ID0gcGVnJHBhcnNlT3B0aW9uYWxBcmd1bWVudCgpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgaWYgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgIHM3ID0gcGVnJHBhcnNlX19oKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzNyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgIHM4ID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgICAgICAgICAgICAgcGVnJHNpbGVudEZhaWxzKys7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSAxMjMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHM5ID0gcGVnJGMxNTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHM5ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxNik7IH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgcGVnJHNpbGVudEZhaWxzLS07XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHM5ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHM4O1xuICAgICAgICAgICAgICAgICAgICAgICAgczggPSB2b2lkIDA7XG4gICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHM4ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHM4ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzOSA9IHBlZyRwYXJzZVZlcmJhdGltRmllbGRWYWx1ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHM5ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzMSA9IHBlZyRjMTE4KHM0LCBzNiwgczkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gOTIpIHtcbiAgICAgICAgICAgIHMxID0gcGVnJGM4MDtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM4MSk7IH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzMiA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgICAgcGVnJHNpbGVudEZhaWxzKys7XG4gICAgICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA1KSA9PT0gcGVnJGMxMTEpIHtcbiAgICAgICAgICAgICAgczMgPSBwZWckYzExMTtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgKz0gNTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzExMik7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBlZyRzaWxlbnRGYWlscy0tO1xuICAgICAgICAgICAgaWYgKHMzID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHMyID0gdm9pZCAwO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMjtcbiAgICAgICAgICAgICAgczIgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHMzID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgICAgIHBlZyRzaWxlbnRGYWlscysrO1xuICAgICAgICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCAzKSA9PT0gcGVnJGMxMTMpIHtcbiAgICAgICAgICAgICAgICBzNCA9IHBlZyRjMTEzO1xuICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zICs9IDM7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxMTQpOyB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcGVnJHNpbGVudEZhaWxzLS07XG4gICAgICAgICAgICAgIGlmIChzNCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHMzID0gdm9pZCAwO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHM0ID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgICAgICAgczUgPSBbXTtcbiAgICAgICAgICAgICAgICBpZiAocGVnJGMyMi50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgICAgICAgICAgICBzNiA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBzNiA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMjMpOyB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgd2hpbGUgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgIHM1LnB1c2goczYpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocGVnJGMyMi50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgczYgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgczYgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMyMyk7IH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBzNSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgczQgPSBpbnB1dC5zdWJzdHJpbmcoczQsIHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgczQgPSBzNTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBwZWckY3VyclBvcztcbiAgICAgICAgICAgICAgICAgIHM1ID0gcGVnJGMxMTkoczQpO1xuICAgICAgICAgICAgICAgICAgaWYgKHM1KSB7XG4gICAgICAgICAgICAgICAgICAgIHM1ID0gdm9pZCAwO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgczUgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgIHM2ID0gW107XG4gICAgICAgICAgICAgICAgICAgIHM3ID0gcGVnJHBhcnNlT3B0aW9uYWxBcmd1bWVudCgpO1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoczcgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBzNi5wdXNoKHM3KTtcbiAgICAgICAgICAgICAgICAgICAgICBzNyA9IHBlZyRwYXJzZU9wdGlvbmFsQXJndW1lbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoczYgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBzNyA9IHBlZyRwYXJzZV9faCgpO1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChzNyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgczggPSBwZWckcGFyc2VSZXF1aXJlZEFyZ3VtZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoczggIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgczkgPSBwZWckcGFyc2VSZXF1aXJlZEFyZ3VtZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzOSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMxID0gcGVnJGMxMjAoczQsIHM2LCBzOCwgczkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA5Mikge1xuICAgICAgICAgICAgICBzMSA9IHBlZyRjODA7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM4MSk7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzMiA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgICAgICBwZWckc2lsZW50RmFpbHMrKztcbiAgICAgICAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNSkgPT09IHBlZyRjMTExKSB7XG4gICAgICAgICAgICAgICAgczMgPSBwZWckYzExMTtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyArPSA1O1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTEyKTsgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHBlZyRzaWxlbnRGYWlscy0tO1xuICAgICAgICAgICAgICBpZiAoczMgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBzMiA9IHZvaWQgMDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMyO1xuICAgICAgICAgICAgICAgIHMyID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBzMyA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgICAgICAgIHBlZyRzaWxlbnRGYWlscysrO1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDMpID09PSBwZWckYzExMykge1xuICAgICAgICAgICAgICAgICAgczQgPSBwZWckYzExMztcbiAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zICs9IDM7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHM0ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxMTQpOyB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHBlZyRzaWxlbnRGYWlscy0tO1xuICAgICAgICAgICAgICAgIGlmIChzNCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgczMgPSB2b2lkIDA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgczQgPSBwZWckY3VyclBvcztcbiAgICAgICAgICAgICAgICAgIHM1ID0gW107XG4gICAgICAgICAgICAgICAgICBpZiAocGVnJGMyMi50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgICAgICAgICAgICAgIHM2ID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHM2ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzIzKTsgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgaWYgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgIHM1LnB1c2goczYpO1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChwZWckYzIyLnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHM2ID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHM2ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMyMyk7IH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHM1ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICBzNCA9IGlucHV0LnN1YnN0cmluZyhzNCwgcGVnJGN1cnJQb3MpO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgczQgPSBzNTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBwZWckY3VyclBvcztcbiAgICAgICAgICAgICAgICAgICAgczUgPSBwZWckYzEyMShzNCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzNSkge1xuICAgICAgICAgICAgICAgICAgICAgIHM1ID0gdm9pZCAwO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIHM1ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoczUgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBzNiA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgIHM3ID0gcGVnJHBhcnNlT3B0aW9uYWxBcmd1bWVudCgpO1xuICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChzNyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgczYucHVzaChzNyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzNyA9IHBlZyRwYXJzZU9wdGlvbmFsQXJndW1lbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzNyA9IHBlZyRwYXJzZV9faCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHM3ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHM4ID0gcGVnJHBhcnNlUmVxdWlyZWRBcmd1bWVudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoczggIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMSA9IHBlZyRjMTIyKHM0LCBzNiwgczgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDkyKSB7XG4gICAgICAgICAgICAgICAgczEgPSBwZWckYzgwO1xuICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM4MSk7IH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBzMiA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgICAgICAgIHBlZyRzaWxlbnRGYWlscysrO1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDUpID09PSBwZWckYzExMSkge1xuICAgICAgICAgICAgICAgICAgczMgPSBwZWckYzExMTtcbiAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zICs9IDU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxMTIpOyB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHBlZyRzaWxlbnRGYWlscy0tO1xuICAgICAgICAgICAgICAgIGlmIChzMyA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgczIgPSB2b2lkIDA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczI7XG4gICAgICAgICAgICAgICAgICBzMiA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgczMgPSBwZWckY3VyclBvcztcbiAgICAgICAgICAgICAgICAgIHBlZyRzaWxlbnRGYWlscysrO1xuICAgICAgICAgICAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMykgPT09IHBlZyRjMTEzKSB7XG4gICAgICAgICAgICAgICAgICAgIHM0ID0gcGVnJGMxMTM7XG4gICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zICs9IDM7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzNCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxMTQpOyB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBwZWckc2lsZW50RmFpbHMtLTtcbiAgICAgICAgICAgICAgICAgIGlmIChzNCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICBzMyA9IHZvaWQgMDtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICBzNCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgICAgICAgICAgICBzNSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBpZiAocGVnJGMyMi50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgczYgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgczYgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMyMyk7IH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoczYgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoczYgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHM1LnB1c2goczYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBlZyRjMjIudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzNiA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzNiA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMyMyk7IH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgczUgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgIHM0ID0gaW5wdXQuc3Vic3RyaW5nKHM0LCBwZWckY3VyclBvcyk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgczQgPSBzNTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBzNSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgIHM2ID0gcGVnJHBhcnNlT3B0aW9uYWxBcmd1bWVudCgpO1xuICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgczUucHVzaChzNik7XG4gICAgICAgICAgICAgICAgICAgICAgICBzNiA9IHBlZyRwYXJzZU9wdGlvbmFsQXJndW1lbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzNiA9IHBlZyRwYXJzZV9fKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoczYgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHMxID0gcGVnJGMxMjMoczQsIHM1KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VPcHRpb25hbEFyZ3VtZW50KCkge1xuICAgIHZhciBzMCwgczEsIHMyLCBzMywgczQsIHM1O1xuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDkxKSB7XG4gICAgICBzMSA9IHBlZyRjMTI0O1xuICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzEyNSk7IH1cbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMiA9IHBlZyRwYXJzZV9faCgpO1xuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMzID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIHM0ID0gW107XG4gICAgICAgIGlmIChwZWckYzEyNi50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgICAgczUgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczUgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxMjcpOyB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgd2hpbGUgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzNC5wdXNoKHM1KTtcbiAgICAgICAgICAgIGlmIChwZWckYzEyNi50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgICAgICAgIHM1ID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHM1ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzEyNyk7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHMzID0gaW5wdXQuc3Vic3RyaW5nKHMzLCBwZWckY3VyclBvcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczMgPSBzNDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzNCA9IHBlZyRwYXJzZV9faCgpO1xuICAgICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA5Mykge1xuICAgICAgICAgICAgICBzNSA9IHBlZyRjMTI4O1xuICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgczUgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTI5KTsgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgICBzMSA9IHBlZyRjMTMwKHMzKTtcbiAgICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VSZXF1aXJlZEFyZ3VtZW50KCkge1xuICAgIHZhciBzMCwgczEsIHMyO1xuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBzMSA9IHBlZyRwYXJzZV9faCgpO1xuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgaWYgKHBlZyRjMTMxLnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgczIgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczIgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTMyKTsgfVxuICAgICAgfVxuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICBzMSA9IHBlZyRjMTMzKHMyKTtcbiAgICAgICAgczAgPSBzMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG4gICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgczEgPSBwZWckcGFyc2VCbG9jaygpO1xuICAgICAgaWYgKHMxID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMxID0gcGVnJHBhcnNlQ29tbWFuZCgpO1xuICAgICAgfVxuICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICBzMSA9IHBlZyRjNTIoczEpO1xuICAgICAgfVxuICAgICAgczAgPSBzMTtcbiAgICB9XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VWYXJpYWJsZU5hbWUoKSB7XG4gICAgdmFyIHMwLCBzMSwgczIsIHMzLCBzNDtcblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBwZWckY3VyclBvcztcbiAgICBpZiAocGVnJGMxMzQudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgczIgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICB9IGVsc2Uge1xuICAgICAgczIgPSBwZWckRkFJTEVEO1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzEzNSk7IH1cbiAgICB9XG4gICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMyA9IFtdO1xuICAgICAgaWYgKHBlZyRjMTM2LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgczQgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTM3KTsgfVxuICAgICAgfVxuICAgICAgd2hpbGUgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMzLnB1c2goczQpO1xuICAgICAgICBpZiAocGVnJGMxMzYudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICAgIHM0ID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHM0ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTM3KTsgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIgPSBbczIsIHMzXTtcbiAgICAgICAgczEgPSBzMjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczE7XG4gICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMTtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMCA9IGlucHV0LnN1YnN0cmluZyhzMCwgcGVnJGN1cnJQb3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMCA9IHMxO1xuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZVNpbXBsZURpYWNyaXRpYygpIHtcbiAgICB2YXIgczA7XG5cbiAgICBpZiAocGVnJGMxMzgudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgczAgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICB9IGVsc2Uge1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzEzOSk7IH1cbiAgICB9XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VFeHRlbmRlZERpYWNyaXRpYygpIHtcbiAgICB2YXIgczA7XG5cbiAgICBpZiAocGVnJGMxNDAudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgczAgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICB9IGVsc2Uge1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzE0MSk7IH1cbiAgICB9XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VGaWVsZFNlcGFyYXRvcigpIHtcbiAgICB2YXIgczAsIHMxLCBzMiwgczM7XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIHMxID0gcGVnJHBhcnNlX18oKTtcbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gNjEpIHtcbiAgICAgICAgczIgPSBwZWckYzE0MjtcbiAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMyID0gcGVnJEZBSUxFRDtcbiAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzE0Myk7IH1cbiAgICAgIH1cbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMyA9IHBlZyRwYXJzZV9fKCk7XG4gICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHMxID0gW3MxLCBzMiwgczNdO1xuICAgICAgICAgIHMwID0gczE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VGaWVsZFRlcm1pbmF0b3IoKSB7XG4gICAgdmFyIHMwLCBzMSwgczIsIHMzLCBzNCwgczU7XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIHMxID0gcGVnJHBhcnNlX18oKTtcbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gNDQpIHtcbiAgICAgICAgczIgPSBwZWckYzM3O1xuICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczIgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMzgpOyB9XG4gICAgICB9XG4gICAgICBpZiAoczIgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIgPSBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMzID0gcGVnJHBhcnNlX19oKCk7XG4gICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHM0ID0gW107XG4gICAgICAgICAgczUgPSBwZWckcGFyc2VMaW5lQ29tbWVudCgpO1xuICAgICAgICAgIGlmIChzNSA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczUgPSBwZWckcGFyc2VFT0woKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgd2hpbGUgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzNC5wdXNoKHM1KTtcbiAgICAgICAgICAgIHM1ID0gcGVnJHBhcnNlTGluZUNvbW1lbnQoKTtcbiAgICAgICAgICAgIGlmIChzNSA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzNSA9IHBlZyRwYXJzZUVPTCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHMxID0gW3MxLCBzMiwgczMsIHM0XTtcbiAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlQ29uY2F0KCkge1xuICAgIHZhciBzMCwgczEsIHMyLCBzMztcblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBwZWckcGFyc2VfXygpO1xuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSAzNSkge1xuICAgICAgICBzMiA9IHBlZyRjMTQ0O1xuICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczIgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTQ1KTsgfVxuICAgICAgfVxuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMzID0gcGVnJHBhcnNlX18oKTtcbiAgICAgICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczEgPSBbczEsIHMyLCBzM107XG4gICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZUVPTCgpIHtcbiAgICB2YXIgczA7XG5cbiAgICBpZiAocGVnJGMxNDYudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgczAgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICB9IGVsc2Uge1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzE0Nyk7IH1cbiAgICB9XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VfaCgpIHtcbiAgICB2YXIgczAsIHMxO1xuXG4gICAgcGVnJHNpbGVudEZhaWxzKys7XG4gICAgczAgPSBbXTtcbiAgICBpZiAocGVnJGMxNDkudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgczEgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzE1MCk7IH1cbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICB3aGlsZSAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczAucHVzaChzMSk7XG4gICAgICAgIGlmIChwZWckYzE0OS50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgICAgczEgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxNTApOyB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cbiAgICBwZWckc2lsZW50RmFpbHMtLTtcbiAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxNDgpOyB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlX19oKCkge1xuICAgIHZhciBzMCwgczE7XG5cbiAgICBwZWckc2lsZW50RmFpbHMrKztcbiAgICBzMCA9IFtdO1xuICAgIGlmIChwZWckYzE0OS50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICBzMSA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICBwZWckY3VyclBvcysrO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTUwKTsgfVxuICAgIH1cbiAgICB3aGlsZSAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMwLnB1c2goczEpO1xuICAgICAgaWYgKHBlZyRjMTQ5LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgczEgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTUwKTsgfVxuICAgICAgfVxuICAgIH1cbiAgICBwZWckc2lsZW50RmFpbHMtLTtcbiAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxNTEpOyB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlX3YoKSB7XG4gICAgdmFyIHMwLCBzMTtcblxuICAgIHBlZyRzaWxlbnRGYWlscysrO1xuICAgIHMwID0gW107XG4gICAgaWYgKHBlZyRjMTQ2LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgIHMxID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxNDcpOyB9XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgd2hpbGUgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMwLnB1c2goczEpO1xuICAgICAgICBpZiAocGVnJGMxNDYudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICAgIHMxID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTQ3KTsgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG4gICAgcGVnJHNpbGVudEZhaWxzLS07XG4gICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTUyKTsgfVxuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZV9fdigpIHtcbiAgICB2YXIgczAsIHMxO1xuXG4gICAgcGVnJHNpbGVudEZhaWxzKys7XG4gICAgczAgPSBbXTtcbiAgICBpZiAocGVnJGMxNDYudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgczEgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzE0Nyk7IH1cbiAgICB9XG4gICAgd2hpbGUgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMC5wdXNoKHMxKTtcbiAgICAgIGlmIChwZWckYzE0Ni50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgIHMxID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzE0Nyk7IH1cbiAgICAgIH1cbiAgICB9XG4gICAgcGVnJHNpbGVudEZhaWxzLS07XG4gICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTUzKTsgfVxuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZV8oKSB7XG4gICAgdmFyIHMwLCBzMTtcblxuICAgIHBlZyRzaWxlbnRGYWlscysrO1xuICAgIHMwID0gW107XG4gICAgaWYgKHBlZyRjMTU1LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgIHMxID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxNTYpOyB9XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgd2hpbGUgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMwLnB1c2goczEpO1xuICAgICAgICBpZiAocGVnJGMxNTUudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICAgIHMxID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTU2KTsgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG4gICAgcGVnJHNpbGVudEZhaWxzLS07XG4gICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTU0KTsgfVxuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZV9fKCkge1xuICAgIHZhciBzMCwgczE7XG5cbiAgICBwZWckc2lsZW50RmFpbHMrKztcbiAgICBzMCA9IFtdO1xuICAgIGlmIChwZWckYzE1NS50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICBzMSA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICBwZWckY3VyclBvcysrO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTU2KTsgfVxuICAgIH1cbiAgICB3aGlsZSAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMwLnB1c2goczEpO1xuICAgICAgaWYgKHBlZyRjMTU1LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgczEgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTU2KTsgfVxuICAgICAgfVxuICAgIH1cbiAgICBwZWckc2lsZW50RmFpbHMtLTtcbiAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxNTcpOyB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cblxuICAgIC8qXG4gICAgICBNSVQgTGljZW5zZVxuXG4gICAgICBDb3B5cmlnaHQgKGMpIDIwMTcgRGVyZWsgUCBTaWZmb3JkLCBwYXJ0cyBjb3B5cmlnaHQgKGMpIDIwMTkgYnkgRW1pbGlhbm8gSGV5bnNcblxuICAgICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICAgICAgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICAgICAgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuICAgICAgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICAgICAgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gICAgICBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbiAgICAgIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAgICAgIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICAgICAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gICAgICBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gICAgICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICAgICAgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAgICAgIFNPRlRXQVJFLlxuICAgICovXG5cbiAgICBjb25zdCBtYXJrdXAgPSB7XG4gICAgICBzbDogJ2l0YWxpY3MnLFxuICAgICAgZW06ICdpdGFsaWNzJyxcbiAgICAgIGl0OiAnaXRhbGljcycsXG4gICAgICBpdHNoYXBlOiAnaXRhbGljcycsXG5cbiAgICAgIGJmOiAnYm9sZCcsXG4gICAgICBiZnNlcmllczogJ2JvbGQnLFxuXG4gICAgICBzYzogJ3NtYWxsQ2FwcycsXG4gICAgICBzY3NoYXBlOiAnc21hbGxDYXBzJyxcblxuICAgICAgdHQ6ICdmaXhlZFdpZHRoJyxcbiAgICAgIHJtOiAncm9tYW4nLFxuICAgICAgc2Y6ICdzYW5zU2VyaWYnLFxuICAgICAgdmVyYjogJ3ZlcmJhdGltJyxcbiAgICB9XG5cbiAgICBjb25zdCB1bm5lc3RGaWVsZHMgPSAob3B0aW9ucy51bm5lc3RGaWVsZHMgfHwgW10pLm1hcChmaWVsZCA9PiBmaWVsZC50b0xvd2VyQ2FzZSgpKVxuICAgIGNvbnN0IHZlcmJhdGltRmllbGRzID0gKG9wdGlvbnMudmVyYmF0aW1GaWVsZHMgfHwgWyAndXJscmF3JywgJ3VybCcsICdkb2knLCAnZmlsZScsICdmaWxlcycsICdlcHJpbnQnLCAndmVyYmEnLCAndmVyYmInLCAndmVyYmMnIF0pLm1hcChmaWVsZCA9PiB0eXBlb2YgZmllbGQgPT09ICdzdHJpbmcnID8gZmllbGQudG9Mb3dlckNhc2UoKSA6IGZpZWxkKVxuICAgIGNvbnN0IHZlcmJhdGltQ29tbWFuZHMgPSAob3B0aW9ucy52ZXJiYXRpbUNvbW1hbmRzIHx8IFsndGV4dHR0JywgJ3VybCcsICdocmVmJ10pXG5cbiAgICBmdW5jdGlvbiBpc1ZlcmJhdGltRmllbGQobmFtZSkge1xuICAgICAgcmV0dXJuIHZlcmJhdGltRmllbGRzLmZpbmQocCA9PiAodHlwZW9mIHAgPT09ICdzdHJpbmcnKSA/IG5hbWUgPT09IHAgOiBuYW1lLm1hdGNoKHApKVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZVdoaXRlc3BhY2UodGV4dEFycikge1xuICAgICAgcmV0dXJuIHRleHRBcnIucmVkdWNlKChwcmV2LCBjdXJyKSA9PiB7XG4gICAgICAgIGlmICgvXFxzLy50ZXN0KGN1cnIpKSB7XG4gICAgICAgICAgaWYgKC9cXHMvLnRlc3QocHJldltwcmV2Lmxlbmd0aCAtIDFdKSkge1xuICAgICAgICAgICAgcmV0dXJuIHByZXY7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBwcmV2ICsgJyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJldiArIGN1cnI7XG4gICAgICB9LCAnJyk7XG4gICAgfVxuXG4gICAgY29uc3QgaGFzX2FyZ3VtZW50cyA9IHtcbiAgICAgIEVsc2V2aWVyR2x5cGg6IDEsXG4gICAgICBlbmQ6IDEsXG4gICAgICBiZWdpbjogMSxcbiAgICAgIGJpYmN5cjogMSxcbiAgICAgIGJpYnN0cmluZzogMSxcbiAgICAgIGNoc2Y6IDEsXG4gICAgICBjaXRlOiAxLFxuICAgICAgY3lyY2hhcjogMSxcbiAgICAgIGRpbmc6IDEsXG4gICAgICBlbXBoOiAxLFxuICAgICAgZW5xdW90ZTogMSxcbiAgICAgIGZyYWM6IDIsXG4gICAgICBocmVmOiAyLFxuICAgICAgaHNwYWNlOiAxLFxuICAgICAgbWF0aHJtOiAxLFxuICAgICAgbWJveDogMSxcbiAgICAgIG1rYmliYm9sZDogMSxcbiAgICAgIG1rYmliZW1waDogMSxcbiAgICAgIG1rYmliaXRhbGljOiAxLFxuICAgICAgbWtiaWJxdW90ZTogMSxcbiAgICAgIG5ld2NvbW1hbmQ6IDIsXG4gICAgICBub29wc29ydDogMSxcbiAgICAgIG9jaXJjOiAxLFxuICAgICAgc2VjdGlvbjogMSxcbiAgICAgIHNiOiAxLFxuICAgICAgc3A6IDEsXG4gICAgICBzdWJzZWN0aW9uOiAxLFxuICAgICAgc3Vic3Vic2VjdGlvbjogMSxcbiAgICAgIHN1YnN1YnN1YnNlY3Rpb246IDEsXG4gICAgICB0OiAxLFxuICAgICAgdGV4dGJmOiAxLFxuICAgICAgdGV4dGl0OiAxLFxuICAgICAgdGV4dHJtOiAxLFxuICAgICAgdGV4dHNjOiAxLFxuICAgICAgdGV4dHN1YnNjcmlwdDogMSxcbiAgICAgIHRleHRzdXBlcnNjcmlwdDogMSxcbiAgICAgIHRleHR0dDogMSxcbiAgICAgIHVybDogMSxcbiAgICAgIHZwaGFudG9tOiAxLFxuICAgICAgdnNwYWNlOiAxLFxuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmNvbWJpbmluZ0RpYWNyaXRpY3MpIHtcbiAgICAgIGZvciAoY29uc3QgY21kIG9mIG9wdGlvbnMuY29tYmluaW5nRGlhY3JpdGljcykge1xuICAgICAgICBoYXNfYXJndW1lbnRzW2NtZF0gPSAxXG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2F5KCkge1xuICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoQXJyYXkuZnJvbShhcmd1bWVudHMpLCBudWxsLCAyKSlcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGVlayhuKSB7XG4gICAgICByZXR1cm4gaW5wdXQuc3Vic3RyKHBlZyRzYXZlZFBvcywgbilcbiAgICB9XG5cbiAgICBjb25zdCBtYXRoID0ge1xuICAgICAgb246IGZhbHNlLFxuXG4gICAgICBzZXQ6IGZ1bmN0aW9uKHN0YXRlKSB7XG4gICAgICAgIHRoaXMub24gPSBzdGF0ZVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJhc2ljVGV4dENvbnZlcnNpb25zKG5vZGUpIHtcbiAgICAgIGlmIChub2RlLmtpbmQgIT09ICdUZXh0JykgdGhyb3cgbmV3IEVycm9yKG5vZGUua2luZCArICcgaXMgbm90IGEgVGV4dCBub2RlJylcblxuICAgICAgc3dpdGNoIChub2RlLm1vZGUpIHtcbiAgICAgICAgY2FzZSAndmVyYmF0aW0nOlxuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgY2FzZSAnbWF0aCc6XG4gICAgICAgICAgbm9kZS52YWx1ZSA9IG5vZGUudmFsdWUucmVwbGFjZSgvfi9nLCAnXFx1MDBBMCcpXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBjYXNlICd0ZXh0JzpcbiAgICAgICAgICBub2RlLnZhbHVlID0gbm9kZS52YWx1ZVxuICAgICAgICAgICAgLnJlcGxhY2UoLy0tLS9nLCAnXFx1MjAxNCcpXG4gICAgICAgICAgICAucmVwbGFjZSgvLS0vZywgJ1xcdTIwMTMnKVxuICAgICAgICAgICAgLnJlcGxhY2UoLzwvZywgJ1xcdTAwQTEnKVxuICAgICAgICAgICAgLnJlcGxhY2UoLz4vZywgJ1xcdTAwQkYnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL34vZywgJ1xcdTAwQTAnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL2BgL2csIG9wdGlvbnMubWFya3VwLmVucXVvdGUub3BlbilcbiAgICAgICAgICAgIC5yZXBsYWNlKC8nJy9nLCBvcHRpb25zLm1hcmt1cC5lbnF1b3RlLmNsb3NlKVxuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgdGV4dCBtb2RlICR7bm9kZS5tb2RlfWApXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBub2RlXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJvdGVjdCh2KSB7XG4gICAgICBsZXQgc291cmNlXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2KSkge1xuICAgICAgICBzb3VyY2UgPSB2Lm1hcChlID0+IGUuc291cmNlKS5qb2luKCcnKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdiA9IFsgdiBdXG4gICAgICAgIHNvdXJjZSA9IHYuc291cmNlXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGtpbmQ6ICdCbG9jaycsXG4gICAgICAgIHZhbHVlOiB2LFxuICAgICAgICBtYXJrdXA6IHt9LFxuICAgICAgICBjYXNlOiAncHJvdGVjdCcsXG4gICAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhbmRsZV9tYXJrdXBfc3dpdGNoZXMoYmxvY2spIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gYmxvY2sudmFsdWVcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiBibG9ja1xuXG4gICAgICBibG9jay52YWx1ZSA9IFtdXG5cbiAgICAgIGNvbnN0IHBzZXVkbyA9IHtcbiAgICAgICAgYmxvY2s6IG51bGwsXG4gICAgICAgIG1hcmt1cDoge30sXG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBwc2V1ZG9fYmxvY2soKSB7XG4gICAgICAgIHBzZXVkby5ibG9jayA9IHtcbiAgICAgICAgICBraW5kOiAnQmxvY2snLFxuICAgICAgICAgIGxvYzogbG9jYXRpb24oKSxcbiAgICAgICAgICBzb3VyY2U6ICcnLFxuICAgICAgICAgIHZhbHVlOiBbXSxcbiAgICAgICAgICBtYXJrdXA6IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocHNldWRvLm1hcmt1cCkpLFxuICAgICAgICAgIHBzZXVkbzogdHJ1ZSxcbiAgICAgICAgfVxuICAgICAgICBibG9jay52YWx1ZS5wdXNoKHBzZXVkby5ibG9jaylcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiB2YWx1ZSkge1xuICAgICAgICBpZiAobm9kZS5raW5kID09PSAnRW52aXJvbm1lbnQnIHx8IG5vZGUua2luZCA9PT0gJ0Jsb2NrJykge1xuICAgICAgICAgIGJsb2NrLnZhbHVlLnB1c2gobm9kZSlcblxuICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhwc2V1ZG8ubWFya3VwKS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHBzZXVkb19ibG9jaygpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBzZXVkby5ibG9jayA9IG51bGxcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChub2RlLmtpbmQgPT09ICdSZWd1bGFyQ29tbWFuZCcgJiYgbWFya3VwW25vZGUuY29tbWFuZF0pIHtcbiAgICAgICAgICBpZiAocHNldWRvLm1hcmt1cC5pdGFsaWNzKSB7IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9jaXRhdGlvbi1qcy9iaWJ0ZXgtcGFyc2VyLWV4cGVyaW1lbnRzL2NvbW1pdC9jYWU0NzVmMDc1YTA1ZDFjMDc0NDg1YTA2MWIwOGVkMjQ1MTcwYzdlXG4gICAgICAgICAgICBkZWxldGUgcHNldWRvLm1hcmt1cC5pdGFsaWNzXG4gICAgICAgICAgICBpZiAobWFya3VwW25vZGUuY29tbWFuZF0gIT09ICdpdGFsaWNzJykgcHNldWRvLm1hcmt1cFttYXJrdXBbbm9kZS5jb21tYW5kXV0gPSB0cnVlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBzZXVkby5tYXJrdXBbbWFya3VwW25vZGUuY29tbWFuZF1dID0gdHJ1ZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhwc2V1ZG8ubWFya3VwKS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHBzZXVkb19ibG9jaygpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICBwc2V1ZG8uYmxvY2sgPSBudWxsXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBzZXVkby5ibG9jaykge1xuICAgICAgICAgIHBzZXVkby5ibG9jay5zb3VyY2UgKz0gbm9kZS5zb3VyY2VcbiAgICAgICAgICBwc2V1ZG8uYmxvY2sudmFsdWUucHVzaChub2RlKVxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYmxvY2sudmFsdWUucHVzaChub2RlKVxuXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYmxvY2sudmFsdWUgPSBibG9jay52YWx1ZS5maWx0ZXIobm9kZSA9PiAhKG5vZGUucHNldWRvICYmIG5vZGUudmFsdWUubGVuZ3RoID09PSAwKSlcblxuICAgICAgcmV0dXJuIGJsb2NrXG4gICAgfVxuXG5cbiAgcGVnJHJlc3VsdCA9IHBlZyRzdGFydFJ1bGVGdW5jdGlvbigpO1xuXG4gIGlmIChwZWckcmVzdWx0ICE9PSBwZWckRkFJTEVEICYmIHBlZyRjdXJyUG9zID09PSBpbnB1dC5sZW5ndGgpIHtcbiAgICByZXR1cm4gcGVnJHJlc3VsdDtcbiAgfSBlbHNlIHtcbiAgICBpZiAocGVnJHJlc3VsdCAhPT0gcGVnJEZBSUxFRCAmJiBwZWckY3VyclBvcyA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgcGVnJGZhaWwocGVnJGVuZEV4cGVjdGF0aW9uKCkpO1xuICAgIH1cblxuICAgIHRocm93IHBlZyRidWlsZFN0cnVjdHVyZWRFcnJvcihcbiAgICAgIHBlZyRtYXhGYWlsRXhwZWN0ZWQsXG4gICAgICBwZWckbWF4RmFpbFBvcyA8IGlucHV0Lmxlbmd0aCA/IGlucHV0LmNoYXJBdChwZWckbWF4RmFpbFBvcykgOiBudWxsLFxuICAgICAgcGVnJG1heEZhaWxQb3MgPCBpbnB1dC5sZW5ndGhcbiAgICAgICAgPyBwZWckY29tcHV0ZUxvY2F0aW9uKHBlZyRtYXhGYWlsUG9zLCBwZWckbWF4RmFpbFBvcyArIDEpXG4gICAgICAgIDogcGVnJGNvbXB1dGVMb2NhdGlvbihwZWckbWF4RmFpbFBvcywgcGVnJG1heEZhaWxQb3MpXG4gICAgKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgU3ludGF4RXJyb3I6IHBlZyRTeW50YXhFcnJvcixcbiAgcGFyc2U6ICAgICAgIHBlZyRwYXJzZVxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuLy8gT3JpZ2luYWwgd29yayBieSBIZW5yaWsgTXVlaGUgKGMpIDIwMTBcbi8vXG4vLyBDb21tb25KUyBwb3J0IGJ5IE1pa29sYSBMeXNlbmtvIDIwMTNcbi8vXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnBhcnNlID0gdm9pZCAwO1xuY2xhc3MgUGFyc2VFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlLCBwYXJzZXIpIHtcbiAgICAgICAgbWVzc2FnZSArPSBgIEAgJHtwYXJzZXIucG9zfWA7XG4gICAgICAgIGlmIChwYXJzZXIucGFyc2luZylcbiAgICAgICAgICAgIG1lc3NhZ2UgKz0gYCBpbiAke0pTT04uc3RyaW5naWZ5KHBhcnNlci5wYXJzaW5nKX1gO1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5uYW1lID0gJ1BhcnNlRXJyb3InO1xuICAgIH1cbn1cbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZSBwcmVmZXItdGVtcGxhdGVcbmNvbnN0IGxldHRlciA9IG5ldyBSZWdFeHAoJ1snICsgW1xuICAgIC8vIExldHRlciwgVXBwZXJjYXNlXG4gICAgL1xcdTAwNDEtXFx1MDA1QVxcdTAwQzAtXFx1MDBENlxcdTAwRDgtXFx1MDBERVxcdTAxMDBcXHUwMTAyXFx1MDEwNFxcdTAxMDZcXHUwMTA4XFx1MDEwQVxcdTAxMENcXHUwMTBFXFx1MDExMFxcdTAxMTJcXHUwMTE0XFx1MDExNlxcdTAxMThcXHUwMTFBXFx1MDExQ1xcdTAxMUVcXHUwMTIwXFx1MDEyMlxcdTAxMjRcXHUwMTI2XFx1MDEyOFxcdTAxMkFcXHUwMTJDXFx1MDEyRVxcdTAxMzBcXHUwMTMyXFx1MDEzNFxcdTAxMzZcXHUwMTM5XFx1MDEzQlxcdTAxM0RcXHUwMTNGXFx1MDE0MVxcdTAxNDNcXHUwMTQ1XFx1MDE0N1xcdTAxNEFcXHUwMTRDXFx1MDE0RVxcdTAxNTBcXHUwMTUyXFx1MDE1NFxcdTAxNTZcXHUwMTU4XFx1MDE1QVxcdTAxNUNcXHUwMTVFXFx1MDE2MFxcdTAxNjJcXHUwMTY0XFx1MDE2NlxcdTAxNjhcXHUwMTZBXFx1MDE2Q1xcdTAxNkVcXHUwMTcwXFx1MDE3MlxcdTAxNzRcXHUwMTc2XFx1MDE3OC1cXHUwMTc5XFx1MDE3QlxcdTAxN0RcXHUwMTgxLVxcdTAxODJcXHUwMTg0XFx1MDE4Ni1cXHUwMTg3XFx1MDE4OS1cXHUwMThCXFx1MDE4RS1cXHUwMTkxXFx1MDE5My1cXHUwMTk0XFx1MDE5Ni1cXHUwMTk4XFx1MDE5Qy1cXHUwMTlEXFx1MDE5Ri1cXHUwMUEwXFx1MDFBMlxcdTAxQTRcXHUwMUE2LVxcdTAxQTdcXHUwMUE5XFx1MDFBQ1xcdTAxQUUtXFx1MDFBRlxcdTAxQjEtXFx1MDFCM1xcdTAxQjVcXHUwMUI3LVxcdTAxQjhcXHUwMUJDXFx1MDFDNFxcdTAxQzdcXHUwMUNBXFx1MDFDRFxcdTAxQ0ZcXHUwMUQxXFx1MDFEM1xcdTAxRDVcXHUwMUQ3XFx1MDFEOVxcdTAxREJcXHUwMURFXFx1MDFFMFxcdTAxRTJcXHUwMUU0XFx1MDFFNlxcdTAxRThcXHUwMUVBXFx1MDFFQ1xcdTAxRUVcXHUwMUYxXFx1MDFGNFxcdTAxRjYtXFx1MDFGOFxcdTAxRkFcXHUwMUZDXFx1MDFGRVxcdTAyMDBcXHUwMjAyXFx1MDIwNFxcdTAyMDZcXHUwMjA4XFx1MDIwQVxcdTAyMENcXHUwMjBFXFx1MDIxMFxcdTAyMTJcXHUwMjE0XFx1MDIxNlxcdTAyMThcXHUwMjFBXFx1MDIxQ1xcdTAyMUVcXHUwMjIwXFx1MDIyMlxcdTAyMjRcXHUwMjI2XFx1MDIyOFxcdTAyMkFcXHUwMjJDXFx1MDIyRVxcdTAyMzBcXHUwMjMyXFx1MDIzQS1cXHUwMjNCXFx1MDIzRC1cXHUwMjNFXFx1MDI0MVxcdTAyNDMtXFx1MDI0NlxcdTAyNDhcXHUwMjRBXFx1MDI0Q1xcdTAyNEVcXHUwMzcwXFx1MDM3MlxcdTAzNzZcXHUwMzdGXFx1MDM4NlxcdTAzODgtXFx1MDM4QVxcdTAzOENcXHUwMzhFLVxcdTAzOEZcXHUwMzkxLVxcdTAzQTFcXHUwM0EzLVxcdTAzQUJcXHUwM0NGXFx1MDNEMi1cXHUwM0Q0XFx1MDNEOFxcdTAzREFcXHUwM0RDXFx1MDNERVxcdTAzRTBcXHUwM0UyXFx1MDNFNFxcdTAzRTZcXHUwM0U4XFx1MDNFQVxcdTAzRUNcXHUwM0VFXFx1MDNGNFxcdTAzRjdcXHUwM0Y5LVxcdTAzRkFcXHUwM0ZELVxcdTA0MkZcXHUwNDYwXFx1MDQ2MlxcdTA0NjRcXHUwNDY2XFx1MDQ2OFxcdTA0NkFcXHUwNDZDXFx1MDQ2RVxcdTA0NzBcXHUwNDcyXFx1MDQ3NFxcdTA0NzZcXHUwNDc4XFx1MDQ3QVxcdTA0N0NcXHUwNDdFXFx1MDQ4MFxcdTA0OEFcXHUwNDhDXFx1MDQ4RVxcdTA0OTBcXHUwNDkyXFx1MDQ5NFxcdTA0OTZcXHUwNDk4XFx1MDQ5QVxcdTA0OUNcXHUwNDlFXFx1MDRBMFxcdTA0QTJcXHUwNEE0XFx1MDRBNlxcdTA0QThcXHUwNEFBXFx1MDRBQ1xcdTA0QUVcXHUwNEIwXFx1MDRCMlxcdTA0QjRcXHUwNEI2XFx1MDRCOFxcdTA0QkFcXHUwNEJDXFx1MDRCRVxcdTA0QzAtXFx1MDRDMVxcdTA0QzNcXHUwNEM1XFx1MDRDN1xcdTA0QzlcXHUwNENCXFx1MDRDRFxcdTA0RDBcXHUwNEQyXFx1MDRENFxcdTA0RDZcXHUwNEQ4XFx1MDREQVxcdTA0RENcXHUwNERFXFx1MDRFMFxcdTA0RTJcXHUwNEU0XFx1MDRFNlxcdTA0RThcXHUwNEVBXFx1MDRFQ1xcdTA0RUVcXHUwNEYwXFx1MDRGMlxcdTA0RjRcXHUwNEY2XFx1MDRGOFxcdTA0RkFcXHUwNEZDXFx1MDRGRVxcdTA1MDBcXHUwNTAyXFx1MDUwNFxcdTA1MDZcXHUwNTA4XFx1MDUwQVxcdTA1MENcXHUwNTBFXFx1MDUxMFxcdTA1MTJcXHUwNTE0XFx1MDUxNlxcdTA1MThcXHUwNTFBXFx1MDUxQ1xcdTA1MUVcXHUwNTIwXFx1MDUyMlxcdTA1MjRcXHUwNTI2XFx1MDUyOFxcdTA1MkFcXHUwNTJDXFx1MDUyRVxcdTA1MzEtXFx1MDU1NlxcdTEwQTAtXFx1MTBDNVxcdTEwQzdcXHUxMENEXFx1MTNBMC1cXHUxM0Y1XFx1MUUwMFxcdTFFMDJcXHUxRTA0XFx1MUUwNlxcdTFFMDhcXHUxRTBBXFx1MUUwQ1xcdTFFMEVcXHUxRTEwXFx1MUUxMlxcdTFFMTRcXHUxRTE2XFx1MUUxOFxcdTFFMUFcXHUxRTFDXFx1MUUxRVxcdTFFMjBcXHUxRTIyXFx1MUUyNFxcdTFFMjZcXHUxRTI4XFx1MUUyQVxcdTFFMkNcXHUxRTJFXFx1MUUzMFxcdTFFMzJcXHUxRTM0XFx1MUUzNlxcdTFFMzhcXHUxRTNBXFx1MUUzQ1xcdTFFM0VcXHUxRTQwXFx1MUU0MlxcdTFFNDRcXHUxRTQ2XFx1MUU0OFxcdTFFNEFcXHUxRTRDXFx1MUU0RVxcdTFFNTBcXHUxRTUyXFx1MUU1NFxcdTFFNTZcXHUxRTU4XFx1MUU1QVxcdTFFNUNcXHUxRTVFXFx1MUU2MFxcdTFFNjJcXHUxRTY0XFx1MUU2NlxcdTFFNjhcXHUxRTZBXFx1MUU2Q1xcdTFFNkVcXHUxRTcwXFx1MUU3MlxcdTFFNzRcXHUxRTc2XFx1MUU3OFxcdTFFN0FcXHUxRTdDXFx1MUU3RVxcdTFFODBcXHUxRTgyXFx1MUU4NFxcdTFFODZcXHUxRTg4XFx1MUU4QVxcdTFFOENcXHUxRThFXFx1MUU5MFxcdTFFOTJcXHUxRTk0XFx1MUU5RVxcdTFFQTBcXHUxRUEyXFx1MUVBNFxcdTFFQTZcXHUxRUE4XFx1MUVBQVxcdTFFQUNcXHUxRUFFXFx1MUVCMFxcdTFFQjJcXHUxRUI0XFx1MUVCNlxcdTFFQjhcXHUxRUJBXFx1MUVCQ1xcdTFFQkVcXHUxRUMwXFx1MUVDMlxcdTFFQzRcXHUxRUM2XFx1MUVDOFxcdTFFQ0FcXHUxRUNDXFx1MUVDRVxcdTFFRDBcXHUxRUQyXFx1MUVENFxcdTFFRDZcXHUxRUQ4XFx1MUVEQVxcdTFFRENcXHUxRURFXFx1MUVFMFxcdTFFRTJcXHUxRUU0XFx1MUVFNlxcdTFFRThcXHUxRUVBXFx1MUVFQ1xcdTFFRUVcXHUxRUYwXFx1MUVGMlxcdTFFRjRcXHUxRUY2XFx1MUVGOFxcdTFFRkFcXHUxRUZDXFx1MUVGRVxcdTFGMDgtXFx1MUYwRlxcdTFGMTgtXFx1MUYxRFxcdTFGMjgtXFx1MUYyRlxcdTFGMzgtXFx1MUYzRlxcdTFGNDgtXFx1MUY0RFxcdTFGNTlcXHUxRjVCXFx1MUY1RFxcdTFGNUZcXHUxRjY4LVxcdTFGNkZcXHUxRkI4LVxcdTFGQkJcXHUxRkM4LVxcdTFGQ0JcXHUxRkQ4LVxcdTFGREJcXHUxRkU4LVxcdTFGRUNcXHUxRkY4LVxcdTFGRkJcXHUyMTAyXFx1MjEwN1xcdTIxMEItXFx1MjEwRFxcdTIxMTAtXFx1MjExMlxcdTIxMTVcXHUyMTE5LVxcdTIxMURcXHUyMTI0XFx1MjEyNlxcdTIxMjhcXHUyMTJBLVxcdTIxMkRcXHUyMTMwLVxcdTIxMzNcXHUyMTNFLVxcdTIxM0ZcXHUyMTQ1XFx1MjE4M1xcdTJDMDAtXFx1MkMyRVxcdTJDNjBcXHUyQzYyLVxcdTJDNjRcXHUyQzY3XFx1MkM2OVxcdTJDNkJcXHUyQzZELVxcdTJDNzBcXHUyQzcyXFx1MkM3NVxcdTJDN0UtXFx1MkM4MFxcdTJDODJcXHUyQzg0XFx1MkM4NlxcdTJDODhcXHUyQzhBXFx1MkM4Q1xcdTJDOEVcXHUyQzkwXFx1MkM5MlxcdTJDOTRcXHUyQzk2XFx1MkM5OFxcdTJDOUFcXHUyQzlDXFx1MkM5RVxcdTJDQTBcXHUyQ0EyXFx1MkNBNFxcdTJDQTZcXHUyQ0E4XFx1MkNBQVxcdTJDQUNcXHUyQ0FFXFx1MkNCMFxcdTJDQjJcXHUyQ0I0XFx1MkNCNlxcdTJDQjhcXHUyQ0JBXFx1MkNCQ1xcdTJDQkVcXHUyQ0MwXFx1MkNDMlxcdTJDQzRcXHUyQ0M2XFx1MkNDOFxcdTJDQ0FcXHUyQ0NDXFx1MkNDRVxcdTJDRDBcXHUyQ0QyXFx1MkNENFxcdTJDRDZcXHUyQ0Q4XFx1MkNEQVxcdTJDRENcXHUyQ0RFXFx1MkNFMFxcdTJDRTJcXHUyQ0VCXFx1MkNFRFxcdTJDRjJcXHVBNjQwXFx1QTY0MlxcdUE2NDRcXHVBNjQ2XFx1QTY0OFxcdUE2NEFcXHVBNjRDXFx1QTY0RVxcdUE2NTBcXHVBNjUyXFx1QTY1NFxcdUE2NTZcXHVBNjU4XFx1QTY1QVxcdUE2NUNcXHVBNjVFXFx1QTY2MFxcdUE2NjJcXHVBNjY0XFx1QTY2NlxcdUE2NjhcXHVBNjZBXFx1QTY2Q1xcdUE2ODBcXHVBNjgyXFx1QTY4NFxcdUE2ODZcXHVBNjg4XFx1QTY4QVxcdUE2OENcXHVBNjhFXFx1QTY5MFxcdUE2OTJcXHVBNjk0XFx1QTY5NlxcdUE2OThcXHVBNjlBXFx1QTcyMlxcdUE3MjRcXHVBNzI2XFx1QTcyOFxcdUE3MkFcXHVBNzJDXFx1QTcyRVxcdUE3MzJcXHVBNzM0XFx1QTczNlxcdUE3MzhcXHVBNzNBXFx1QTczQ1xcdUE3M0VcXHVBNzQwXFx1QTc0MlxcdUE3NDRcXHVBNzQ2XFx1QTc0OFxcdUE3NEFcXHVBNzRDXFx1QTc0RVxcdUE3NTBcXHVBNzUyXFx1QTc1NFxcdUE3NTZcXHVBNzU4XFx1QTc1QVxcdUE3NUNcXHVBNzVFXFx1QTc2MFxcdUE3NjJcXHVBNzY0XFx1QTc2NlxcdUE3NjhcXHVBNzZBXFx1QTc2Q1xcdUE3NkVcXHVBNzc5XFx1QTc3QlxcdUE3N0QtXFx1QTc3RVxcdUE3ODBcXHVBNzgyXFx1QTc4NFxcdUE3ODZcXHVBNzhCXFx1QTc4RFxcdUE3OTBcXHVBNzkyXFx1QTc5NlxcdUE3OThcXHVBNzlBXFx1QTc5Q1xcdUE3OUVcXHVBN0EwXFx1QTdBMlxcdUE3QTRcXHVBN0E2XFx1QTdBOFxcdUE3QUEtXFx1QTdBRFxcdUE3QjAtXFx1QTdCNFxcdUE3QjZcXHVGRjIxLVxcdUZGM0EvLnNvdXJjZSxcbiAgICAvLyBMZXR0ZXIsIFRpdGxlY2FzZVxuICAgIC9cXHUwMUM1XFx1MDFDOFxcdTAxQ0JcXHUwMUYyXFx1MUY4OC1cXHUxRjhGXFx1MUY5OC1cXHUxRjlGXFx1MUZBOC1cXHUxRkFGXFx1MUZCQ1xcdTFGQ0NcXHUxRkZDLy5zb3VyY2UsXG4gICAgLy8gTGV0dGVyLCBMb3dlcmNhc2VcbiAgICAvXFx1MDA2MS1cXHUwMDdBXFx1MDBCNVxcdTAwREYtXFx1MDBGNlxcdTAwRjgtXFx1MDBGRlxcdTAxMDFcXHUwMTAzXFx1MDEwNVxcdTAxMDdcXHUwMTA5XFx1MDEwQlxcdTAxMERcXHUwMTBGXFx1MDExMVxcdTAxMTNcXHUwMTE1XFx1MDExN1xcdTAxMTlcXHUwMTFCXFx1MDExRFxcdTAxMUZcXHUwMTIxXFx1MDEyM1xcdTAxMjVcXHUwMTI3XFx1MDEyOVxcdTAxMkJcXHUwMTJEXFx1MDEyRlxcdTAxMzFcXHUwMTMzXFx1MDEzNVxcdTAxMzctXFx1MDEzOFxcdTAxM0FcXHUwMTNDXFx1MDEzRVxcdTAxNDBcXHUwMTQyXFx1MDE0NFxcdTAxNDZcXHUwMTQ4LVxcdTAxNDlcXHUwMTRCXFx1MDE0RFxcdTAxNEZcXHUwMTUxXFx1MDE1M1xcdTAxNTVcXHUwMTU3XFx1MDE1OVxcdTAxNUJcXHUwMTVEXFx1MDE1RlxcdTAxNjFcXHUwMTYzXFx1MDE2NVxcdTAxNjdcXHUwMTY5XFx1MDE2QlxcdTAxNkRcXHUwMTZGXFx1MDE3MVxcdTAxNzNcXHUwMTc1XFx1MDE3N1xcdTAxN0FcXHUwMTdDXFx1MDE3RS1cXHUwMTgwXFx1MDE4M1xcdTAxODVcXHUwMTg4XFx1MDE4Qy1cXHUwMThEXFx1MDE5MlxcdTAxOTVcXHUwMTk5LVxcdTAxOUJcXHUwMTlFXFx1MDFBMVxcdTAxQTNcXHUwMUE1XFx1MDFBOFxcdTAxQUEtXFx1MDFBQlxcdTAxQURcXHUwMUIwXFx1MDFCNFxcdTAxQjZcXHUwMUI5LVxcdTAxQkFcXHUwMUJELVxcdTAxQkZcXHUwMUM2XFx1MDFDOVxcdTAxQ0NcXHUwMUNFXFx1MDFEMFxcdTAxRDJcXHUwMUQ0XFx1MDFENlxcdTAxRDhcXHUwMURBXFx1MDFEQy1cXHUwMUREXFx1MDFERlxcdTAxRTFcXHUwMUUzXFx1MDFFNVxcdTAxRTdcXHUwMUU5XFx1MDFFQlxcdTAxRURcXHUwMUVGLVxcdTAxRjBcXHUwMUYzXFx1MDFGNVxcdTAxRjlcXHUwMUZCXFx1MDFGRFxcdTAxRkZcXHUwMjAxXFx1MDIwM1xcdTAyMDVcXHUwMjA3XFx1MDIwOVxcdTAyMEJcXHUwMjBEXFx1MDIwRlxcdTAyMTFcXHUwMjEzXFx1MDIxNVxcdTAyMTdcXHUwMjE5XFx1MDIxQlxcdTAyMURcXHUwMjFGXFx1MDIyMVxcdTAyMjNcXHUwMjI1XFx1MDIyN1xcdTAyMjlcXHUwMjJCXFx1MDIyRFxcdTAyMkZcXHUwMjMxXFx1MDIzMy1cXHUwMjM5XFx1MDIzQ1xcdTAyM0YtXFx1MDI0MFxcdTAyNDJcXHUwMjQ3XFx1MDI0OVxcdTAyNEJcXHUwMjREXFx1MDI0Ri1cXHUwMjkzXFx1MDI5NS1cXHUwMkFGXFx1MDM3MVxcdTAzNzNcXHUwMzc3XFx1MDM3Qi1cXHUwMzdEXFx1MDM5MFxcdTAzQUMtXFx1MDNDRVxcdTAzRDAtXFx1MDNEMVxcdTAzRDUtXFx1MDNEN1xcdTAzRDlcXHUwM0RCXFx1MDNERFxcdTAzREZcXHUwM0UxXFx1MDNFM1xcdTAzRTVcXHUwM0U3XFx1MDNFOVxcdTAzRUJcXHUwM0VEXFx1MDNFRi1cXHUwM0YzXFx1MDNGNVxcdTAzRjhcXHUwM0ZCLVxcdTAzRkNcXHUwNDMwLVxcdTA0NUZcXHUwNDYxXFx1MDQ2M1xcdTA0NjVcXHUwNDY3XFx1MDQ2OVxcdTA0NkJcXHUwNDZEXFx1MDQ2RlxcdTA0NzFcXHUwNDczXFx1MDQ3NVxcdTA0NzdcXHUwNDc5XFx1MDQ3QlxcdTA0N0RcXHUwNDdGXFx1MDQ4MVxcdTA0OEJcXHUwNDhEXFx1MDQ4RlxcdTA0OTFcXHUwNDkzXFx1MDQ5NVxcdTA0OTdcXHUwNDk5XFx1MDQ5QlxcdTA0OURcXHUwNDlGXFx1MDRBMVxcdTA0QTNcXHUwNEE1XFx1MDRBN1xcdTA0QTlcXHUwNEFCXFx1MDRBRFxcdTA0QUZcXHUwNEIxXFx1MDRCM1xcdTA0QjVcXHUwNEI3XFx1MDRCOVxcdTA0QkJcXHUwNEJEXFx1MDRCRlxcdTA0QzJcXHUwNEM0XFx1MDRDNlxcdTA0QzhcXHUwNENBXFx1MDRDQ1xcdTA0Q0UtXFx1MDRDRlxcdTA0RDFcXHUwNEQzXFx1MDRENVxcdTA0RDdcXHUwNEQ5XFx1MDREQlxcdTA0RERcXHUwNERGXFx1MDRFMVxcdTA0RTNcXHUwNEU1XFx1MDRFN1xcdTA0RTlcXHUwNEVCXFx1MDRFRFxcdTA0RUZcXHUwNEYxXFx1MDRGM1xcdTA0RjVcXHUwNEY3XFx1MDRGOVxcdTA0RkJcXHUwNEZEXFx1MDRGRlxcdTA1MDFcXHUwNTAzXFx1MDUwNVxcdTA1MDdcXHUwNTA5XFx1MDUwQlxcdTA1MERcXHUwNTBGXFx1MDUxMVxcdTA1MTNcXHUwNTE1XFx1MDUxN1xcdTA1MTlcXHUwNTFCXFx1MDUxRFxcdTA1MUZcXHUwNTIxXFx1MDUyM1xcdTA1MjVcXHUwNTI3XFx1MDUyOVxcdTA1MkJcXHUwNTJEXFx1MDUyRlxcdTA1NjEtXFx1MDU4N1xcdTEzRjgtXFx1MTNGRFxcdTFEMDAtXFx1MUQyQlxcdTFENkItXFx1MUQ3N1xcdTFENzktXFx1MUQ5QVxcdTFFMDFcXHUxRTAzXFx1MUUwNVxcdTFFMDdcXHUxRTA5XFx1MUUwQlxcdTFFMERcXHUxRTBGXFx1MUUxMVxcdTFFMTNcXHUxRTE1XFx1MUUxN1xcdTFFMTlcXHUxRTFCXFx1MUUxRFxcdTFFMUZcXHUxRTIxXFx1MUUyM1xcdTFFMjVcXHUxRTI3XFx1MUUyOVxcdTFFMkJcXHUxRTJEXFx1MUUyRlxcdTFFMzFcXHUxRTMzXFx1MUUzNVxcdTFFMzdcXHUxRTM5XFx1MUUzQlxcdTFFM0RcXHUxRTNGXFx1MUU0MVxcdTFFNDNcXHUxRTQ1XFx1MUU0N1xcdTFFNDlcXHUxRTRCXFx1MUU0RFxcdTFFNEZcXHUxRTUxXFx1MUU1M1xcdTFFNTVcXHUxRTU3XFx1MUU1OVxcdTFFNUJcXHUxRTVEXFx1MUU1RlxcdTFFNjFcXHUxRTYzXFx1MUU2NVxcdTFFNjdcXHUxRTY5XFx1MUU2QlxcdTFFNkRcXHUxRTZGXFx1MUU3MVxcdTFFNzNcXHUxRTc1XFx1MUU3N1xcdTFFNzlcXHUxRTdCXFx1MUU3RFxcdTFFN0ZcXHUxRTgxXFx1MUU4M1xcdTFFODVcXHUxRTg3XFx1MUU4OVxcdTFFOEJcXHUxRThEXFx1MUU4RlxcdTFFOTFcXHUxRTkzXFx1MUU5NS1cXHUxRTlEXFx1MUU5RlxcdTFFQTFcXHUxRUEzXFx1MUVBNVxcdTFFQTdcXHUxRUE5XFx1MUVBQlxcdTFFQURcXHUxRUFGXFx1MUVCMVxcdTFFQjNcXHUxRUI1XFx1MUVCN1xcdTFFQjlcXHUxRUJCXFx1MUVCRFxcdTFFQkZcXHUxRUMxXFx1MUVDM1xcdTFFQzVcXHUxRUM3XFx1MUVDOVxcdTFFQ0JcXHUxRUNEXFx1MUVDRlxcdTFFRDFcXHUxRUQzXFx1MUVENVxcdTFFRDdcXHUxRUQ5XFx1MUVEQlxcdTFFRERcXHUxRURGXFx1MUVFMVxcdTFFRTNcXHUxRUU1XFx1MUVFN1xcdTFFRTlcXHUxRUVCXFx1MUVFRFxcdTFFRUZcXHUxRUYxXFx1MUVGM1xcdTFFRjVcXHUxRUY3XFx1MUVGOVxcdTFFRkJcXHUxRUZEXFx1MUVGRi1cXHUxRjA3XFx1MUYxMC1cXHUxRjE1XFx1MUYyMC1cXHUxRjI3XFx1MUYzMC1cXHUxRjM3XFx1MUY0MC1cXHUxRjQ1XFx1MUY1MC1cXHUxRjU3XFx1MUY2MC1cXHUxRjY3XFx1MUY3MC1cXHUxRjdEXFx1MUY4MC1cXHUxRjg3XFx1MUY5MC1cXHUxRjk3XFx1MUZBMC1cXHUxRkE3XFx1MUZCMC1cXHUxRkI0XFx1MUZCNi1cXHUxRkI3XFx1MUZCRVxcdTFGQzItXFx1MUZDNFxcdTFGQzYtXFx1MUZDN1xcdTFGRDAtXFx1MUZEM1xcdTFGRDYtXFx1MUZEN1xcdTFGRTAtXFx1MUZFN1xcdTFGRjItXFx1MUZGNFxcdTFGRjYtXFx1MUZGN1xcdTIxMEFcXHUyMTBFLVxcdTIxMEZcXHUyMTEzXFx1MjEyRlxcdTIxMzRcXHUyMTM5XFx1MjEzQy1cXHUyMTNEXFx1MjE0Ni1cXHUyMTQ5XFx1MjE0RVxcdTIxODRcXHUyQzMwLVxcdTJDNUVcXHUyQzYxXFx1MkM2NS1cXHUyQzY2XFx1MkM2OFxcdTJDNkFcXHUyQzZDXFx1MkM3MVxcdTJDNzMtXFx1MkM3NFxcdTJDNzYtXFx1MkM3QlxcdTJDODFcXHUyQzgzXFx1MkM4NVxcdTJDODdcXHUyQzg5XFx1MkM4QlxcdTJDOERcXHUyQzhGXFx1MkM5MVxcdTJDOTNcXHUyQzk1XFx1MkM5N1xcdTJDOTlcXHUyQzlCXFx1MkM5RFxcdTJDOUZcXHUyQ0ExXFx1MkNBM1xcdTJDQTVcXHUyQ0E3XFx1MkNBOVxcdTJDQUJcXHUyQ0FEXFx1MkNBRlxcdTJDQjFcXHUyQ0IzXFx1MkNCNVxcdTJDQjdcXHUyQ0I5XFx1MkNCQlxcdTJDQkRcXHUyQ0JGXFx1MkNDMVxcdTJDQzNcXHUyQ0M1XFx1MkNDN1xcdTJDQzlcXHUyQ0NCXFx1MkNDRFxcdTJDQ0ZcXHUyQ0QxXFx1MkNEM1xcdTJDRDVcXHUyQ0Q3XFx1MkNEOVxcdTJDREJcXHUyQ0REXFx1MkNERlxcdTJDRTFcXHUyQ0UzLVxcdTJDRTRcXHUyQ0VDXFx1MkNFRVxcdTJDRjNcXHUyRDAwLVxcdTJEMjVcXHUyRDI3XFx1MkQyRFxcdUE2NDFcXHVBNjQzXFx1QTY0NVxcdUE2NDdcXHVBNjQ5XFx1QTY0QlxcdUE2NERcXHVBNjRGXFx1QTY1MVxcdUE2NTNcXHVBNjU1XFx1QTY1N1xcdUE2NTlcXHVBNjVCXFx1QTY1RFxcdUE2NUZcXHVBNjYxXFx1QTY2M1xcdUE2NjVcXHVBNjY3XFx1QTY2OVxcdUE2NkJcXHVBNjZEXFx1QTY4MVxcdUE2ODNcXHVBNjg1XFx1QTY4N1xcdUE2ODlcXHVBNjhCXFx1QTY4RFxcdUE2OEZcXHVBNjkxXFx1QTY5M1xcdUE2OTVcXHVBNjk3XFx1QTY5OVxcdUE2OUJcXHVBNzIzXFx1QTcyNVxcdUE3MjdcXHVBNzI5XFx1QTcyQlxcdUE3MkRcXHVBNzJGLVxcdUE3MzFcXHVBNzMzXFx1QTczNVxcdUE3MzdcXHVBNzM5XFx1QTczQlxcdUE3M0RcXHVBNzNGXFx1QTc0MVxcdUE3NDNcXHVBNzQ1XFx1QTc0N1xcdUE3NDlcXHVBNzRCXFx1QTc0RFxcdUE3NEZcXHVBNzUxXFx1QTc1M1xcdUE3NTVcXHVBNzU3XFx1QTc1OVxcdUE3NUJcXHVBNzVEXFx1QTc1RlxcdUE3NjFcXHVBNzYzXFx1QTc2NVxcdUE3NjdcXHVBNzY5XFx1QTc2QlxcdUE3NkRcXHVBNzZGXFx1QTc3MS1cXHVBNzc4XFx1QTc3QVxcdUE3N0NcXHVBNzdGXFx1QTc4MVxcdUE3ODNcXHVBNzg1XFx1QTc4N1xcdUE3OENcXHVBNzhFXFx1QTc5MVxcdUE3OTMtXFx1QTc5NVxcdUE3OTdcXHVBNzk5XFx1QTc5QlxcdUE3OURcXHVBNzlGXFx1QTdBMVxcdUE3QTNcXHVBN0E1XFx1QTdBN1xcdUE3QTlcXHVBN0I1XFx1QTdCN1xcdUE3RkFcXHVBQjMwLVxcdUFCNUFcXHVBQjYwLVxcdUFCNjVcXHVBQjcwLVxcdUFCQkZcXHVGQjAwLVxcdUZCMDZcXHVGQjEzLVxcdUZCMTdcXHVGRjQxLVxcdUZGNUEvLnNvdXJjZSxcbiAgICAvLyBMZXR0ZXIsIE1vZGlmaWVyXG4gICAgL1xcdTAyQjAtXFx1MDJDMVxcdTAyQzYtXFx1MDJEMVxcdTAyRTAtXFx1MDJFNFxcdTAyRUNcXHUwMkVFXFx1MDM3NFxcdTAzN0FcXHUwNTU5XFx1MDY0MFxcdTA2RTUtXFx1MDZFNlxcdTA3RjQtXFx1MDdGNVxcdTA3RkFcXHUwODFBXFx1MDgyNFxcdTA4MjhcXHUwOTcxXFx1MEU0NlxcdTBFQzZcXHUxMEZDXFx1MTdEN1xcdTE4NDNcXHUxQUE3XFx1MUM3OC1cXHUxQzdEXFx1MUQyQy1cXHUxRDZBXFx1MUQ3OFxcdTFEOUItXFx1MURCRlxcdTIwNzFcXHUyMDdGXFx1MjA5MC1cXHUyMDlDXFx1MkM3Qy1cXHUyQzdEXFx1MkQ2RlxcdTJFMkZcXHUzMDA1XFx1MzAzMS1cXHUzMDM1XFx1MzAzQlxcdTMwOUQtXFx1MzA5RVxcdTMwRkMtXFx1MzBGRVxcdUEwMTVcXHVBNEY4LVxcdUE0RkRcXHVBNjBDXFx1QTY3RlxcdUE2OUMtXFx1QTY5RFxcdUE3MTctXFx1QTcxRlxcdUE3NzBcXHVBNzg4XFx1QTdGOC1cXHVBN0Y5XFx1QTlDRlxcdUE5RTZcXHVBQTcwXFx1QUFERFxcdUFBRjMtXFx1QUFGNFxcdUFCNUMtXFx1QUI1RlxcdUZGNzBcXHVGRjlFLVxcdUZGOUYvLnNvdXJjZSxcbiAgICAvLyBMZXR0ZXIsIE90aGVyXG4gICAgL1xcdTAwQUFcXHUwMEJBXFx1MDFCQlxcdTAxQzAtXFx1MDFDM1xcdTAyOTRcXHUwNUQwLVxcdTA1RUFcXHUwNUYwLVxcdTA1RjJcXHUwNjIwLVxcdTA2M0ZcXHUwNjQxLVxcdTA2NEFcXHUwNjZFLVxcdTA2NkZcXHUwNjcxLVxcdTA2RDNcXHUwNkQ1XFx1MDZFRS1cXHUwNkVGXFx1MDZGQS1cXHUwNkZDXFx1MDZGRlxcdTA3MTBcXHUwNzEyLVxcdTA3MkZcXHUwNzRELVxcdTA3QTVcXHUwN0IxXFx1MDdDQS1cXHUwN0VBXFx1MDgwMC1cXHUwODE1XFx1MDg0MC1cXHUwODU4XFx1MDhBMC1cXHUwOEI0XFx1MDkwNC1cXHUwOTM5XFx1MDkzRFxcdTA5NTBcXHUwOTU4LVxcdTA5NjFcXHUwOTcyLVxcdTA5ODBcXHUwOTg1LVxcdTA5OENcXHUwOThGLVxcdTA5OTBcXHUwOTkzLVxcdTA5QThcXHUwOUFBLVxcdTA5QjBcXHUwOUIyXFx1MDlCNi1cXHUwOUI5XFx1MDlCRFxcdTA5Q0VcXHUwOURDLVxcdTA5RERcXHUwOURGLVxcdTA5RTFcXHUwOUYwLVxcdTA5RjFcXHUwQTA1LVxcdTBBMEFcXHUwQTBGLVxcdTBBMTBcXHUwQTEzLVxcdTBBMjhcXHUwQTJBLVxcdTBBMzBcXHUwQTMyLVxcdTBBMzNcXHUwQTM1LVxcdTBBMzZcXHUwQTM4LVxcdTBBMzlcXHUwQTU5LVxcdTBBNUNcXHUwQTVFXFx1MEE3Mi1cXHUwQTc0XFx1MEE4NS1cXHUwQThEXFx1MEE4Ri1cXHUwQTkxXFx1MEE5My1cXHUwQUE4XFx1MEFBQS1cXHUwQUIwXFx1MEFCMi1cXHUwQUIzXFx1MEFCNS1cXHUwQUI5XFx1MEFCRFxcdTBBRDBcXHUwQUUwLVxcdTBBRTFcXHUwQUY5XFx1MEIwNS1cXHUwQjBDXFx1MEIwRi1cXHUwQjEwXFx1MEIxMy1cXHUwQjI4XFx1MEIyQS1cXHUwQjMwXFx1MEIzMi1cXHUwQjMzXFx1MEIzNS1cXHUwQjM5XFx1MEIzRFxcdTBCNUMtXFx1MEI1RFxcdTBCNUYtXFx1MEI2MVxcdTBCNzFcXHUwQjgzXFx1MEI4NS1cXHUwQjhBXFx1MEI4RS1cXHUwQjkwXFx1MEI5Mi1cXHUwQjk1XFx1MEI5OS1cXHUwQjlBXFx1MEI5Q1xcdTBCOUUtXFx1MEI5RlxcdTBCQTMtXFx1MEJBNFxcdTBCQTgtXFx1MEJBQVxcdTBCQUUtXFx1MEJCOVxcdTBCRDBcXHUwQzA1LVxcdTBDMENcXHUwQzBFLVxcdTBDMTBcXHUwQzEyLVxcdTBDMjhcXHUwQzJBLVxcdTBDMzlcXHUwQzNEXFx1MEM1OC1cXHUwQzVBXFx1MEM2MC1cXHUwQzYxXFx1MEM4NS1cXHUwQzhDXFx1MEM4RS1cXHUwQzkwXFx1MEM5Mi1cXHUwQ0E4XFx1MENBQS1cXHUwQ0IzXFx1MENCNS1cXHUwQ0I5XFx1MENCRFxcdTBDREVcXHUwQ0UwLVxcdTBDRTFcXHUwQ0YxLVxcdTBDRjJcXHUwRDA1LVxcdTBEMENcXHUwRDBFLVxcdTBEMTBcXHUwRDEyLVxcdTBEM0FcXHUwRDNEXFx1MEQ0RVxcdTBENUYtXFx1MEQ2MVxcdTBEN0EtXFx1MEQ3RlxcdTBEODUtXFx1MEQ5NlxcdTBEOUEtXFx1MERCMVxcdTBEQjMtXFx1MERCQlxcdTBEQkRcXHUwREMwLVxcdTBEQzZcXHUwRTAxLVxcdTBFMzBcXHUwRTMyLVxcdTBFMzNcXHUwRTQwLVxcdTBFNDVcXHUwRTgxLVxcdTBFODJcXHUwRTg0XFx1MEU4Ny1cXHUwRTg4XFx1MEU4QVxcdTBFOERcXHUwRTk0LVxcdTBFOTdcXHUwRTk5LVxcdTBFOUZcXHUwRUExLVxcdTBFQTNcXHUwRUE1XFx1MEVBN1xcdTBFQUEtXFx1MEVBQlxcdTBFQUQtXFx1MEVCMFxcdTBFQjItXFx1MEVCM1xcdTBFQkRcXHUwRUMwLVxcdTBFQzRcXHUwRURDLVxcdTBFREZcXHUwRjAwXFx1MEY0MC1cXHUwRjQ3XFx1MEY0OS1cXHUwRjZDXFx1MEY4OC1cXHUwRjhDXFx1MTAwMC1cXHUxMDJBXFx1MTAzRlxcdTEwNTAtXFx1MTA1NVxcdTEwNUEtXFx1MTA1RFxcdTEwNjFcXHUxMDY1LVxcdTEwNjZcXHUxMDZFLVxcdTEwNzBcXHUxMDc1LVxcdTEwODFcXHUxMDhFXFx1MTBEMC1cXHUxMEZBXFx1MTBGRC1cXHUxMjQ4XFx1MTI0QS1cXHUxMjREXFx1MTI1MC1cXHUxMjU2XFx1MTI1OFxcdTEyNUEtXFx1MTI1RFxcdTEyNjAtXFx1MTI4OFxcdTEyOEEtXFx1MTI4RFxcdTEyOTAtXFx1MTJCMFxcdTEyQjItXFx1MTJCNVxcdTEyQjgtXFx1MTJCRVxcdTEyQzBcXHUxMkMyLVxcdTEyQzVcXHUxMkM4LVxcdTEyRDZcXHUxMkQ4LVxcdTEzMTBcXHUxMzEyLVxcdTEzMTVcXHUxMzE4LVxcdTEzNUFcXHUxMzgwLVxcdTEzOEZcXHUxNDAxLVxcdTE2NkNcXHUxNjZGLVxcdTE2N0ZcXHUxNjgxLVxcdTE2OUFcXHUxNkEwLVxcdTE2RUFcXHUxNkYxLVxcdTE2RjhcXHUxNzAwLVxcdTE3MENcXHUxNzBFLVxcdTE3MTFcXHUxNzIwLVxcdTE3MzFcXHUxNzQwLVxcdTE3NTFcXHUxNzYwLVxcdTE3NkNcXHUxNzZFLVxcdTE3NzBcXHUxNzgwLVxcdTE3QjNcXHUxN0RDXFx1MTgyMC1cXHUxODQyXFx1MTg0NC1cXHUxODc3XFx1MTg4MC1cXHUxOEE4XFx1MThBQVxcdTE4QjAtXFx1MThGNVxcdTE5MDAtXFx1MTkxRVxcdTE5NTAtXFx1MTk2RFxcdTE5NzAtXFx1MTk3NFxcdTE5ODAtXFx1MTlBQlxcdTE5QjAtXFx1MTlDOVxcdTFBMDAtXFx1MUExNlxcdTFBMjAtXFx1MUE1NFxcdTFCMDUtXFx1MUIzM1xcdTFCNDUtXFx1MUI0QlxcdTFCODMtXFx1MUJBMFxcdTFCQUUtXFx1MUJBRlxcdTFCQkEtXFx1MUJFNVxcdTFDMDAtXFx1MUMyM1xcdTFDNEQtXFx1MUM0RlxcdTFDNUEtXFx1MUM3N1xcdTFDRTktXFx1MUNFQ1xcdTFDRUUtXFx1MUNGMVxcdTFDRjUtXFx1MUNGNlxcdTIxMzUtXFx1MjEzOFxcdTJEMzAtXFx1MkQ2N1xcdTJEODAtXFx1MkQ5NlxcdTJEQTAtXFx1MkRBNlxcdTJEQTgtXFx1MkRBRVxcdTJEQjAtXFx1MkRCNlxcdTJEQjgtXFx1MkRCRVxcdTJEQzAtXFx1MkRDNlxcdTJEQzgtXFx1MkRDRVxcdTJERDAtXFx1MkRENlxcdTJERDgtXFx1MkRERVxcdTMwMDZcXHUzMDNDXFx1MzA0MS1cXHUzMDk2XFx1MzA5RlxcdTMwQTEtXFx1MzBGQVxcdTMwRkZcXHUzMTA1LVxcdTMxMkRcXHUzMTMxLVxcdTMxOEVcXHUzMUEwLVxcdTMxQkFcXHUzMUYwLVxcdTMxRkZcXHUzNDAwLVxcdTREQjVcXHU0RTAwLVxcdTlGRDVcXHVBMDAwLVxcdUEwMTRcXHVBMDE2LVxcdUE0OENcXHVBNEQwLVxcdUE0RjdcXHVBNTAwLVxcdUE2MEJcXHVBNjEwLVxcdUE2MUZcXHVBNjJBLVxcdUE2MkJcXHVBNjZFXFx1QTZBMC1cXHVBNkU1XFx1QTc4RlxcdUE3RjdcXHVBN0ZCLVxcdUE4MDFcXHVBODAzLVxcdUE4MDVcXHVBODA3LVxcdUE4MEFcXHVBODBDLVxcdUE4MjJcXHVBODQwLVxcdUE4NzNcXHVBODgyLVxcdUE4QjNcXHVBOEYyLVxcdUE4RjdcXHVBOEZCXFx1QThGRFxcdUE5MEEtXFx1QTkyNVxcdUE5MzAtXFx1QTk0NlxcdUE5NjAtXFx1QTk3Q1xcdUE5ODQtXFx1QTlCMlxcdUE5RTAtXFx1QTlFNFxcdUE5RTctXFx1QTlFRlxcdUE5RkEtXFx1QTlGRVxcdUFBMDAtXFx1QUEyOFxcdUFBNDAtXFx1QUE0MlxcdUFBNDQtXFx1QUE0QlxcdUFBNjAtXFx1QUE2RlxcdUFBNzEtXFx1QUE3NlxcdUFBN0FcXHVBQTdFLVxcdUFBQUZcXHVBQUIxXFx1QUFCNS1cXHVBQUI2XFx1QUFCOS1cXHVBQUJEXFx1QUFDMFxcdUFBQzJcXHVBQURCLVxcdUFBRENcXHVBQUUwLVxcdUFBRUFcXHVBQUYyXFx1QUIwMS1cXHVBQjA2XFx1QUIwOS1cXHVBQjBFXFx1QUIxMS1cXHVBQjE2XFx1QUIyMC1cXHVBQjI2XFx1QUIyOC1cXHVBQjJFXFx1QUJDMC1cXHVBQkUyXFx1QUMwMC1cXHVEN0EzXFx1RDdCMC1cXHVEN0M2XFx1RDdDQi1cXHVEN0ZCXFx1RjkwMC1cXHVGQTZEXFx1RkE3MC1cXHVGQUQ5XFx1RkIxRFxcdUZCMUYtXFx1RkIyOFxcdUZCMkEtXFx1RkIzNlxcdUZCMzgtXFx1RkIzQ1xcdUZCM0VcXHVGQjQwLVxcdUZCNDFcXHVGQjQzLVxcdUZCNDRcXHVGQjQ2LVxcdUZCQjFcXHVGQkQzLVxcdUZEM0RcXHVGRDUwLVxcdUZEOEZcXHVGRDkyLVxcdUZEQzdcXHVGREYwLVxcdUZERkJcXHVGRTcwLVxcdUZFNzRcXHVGRTc2LVxcdUZFRkNcXHVGRjY2LVxcdUZGNkZcXHVGRjcxLVxcdUZGOURcXHVGRkEwLVxcdUZGQkVcXHVGRkMyLVxcdUZGQzdcXHVGRkNBLVxcdUZGQ0ZcXHVGRkQyLVxcdUZGRDdcXHVGRkRBLVxcdUZGREMvLnNvdXJjZSxcbl0uam9pbignJykgKyAnXScpO1xuY2xhc3MgQmlidGV4UGFyc2VyIHtcbiAgICBwYXJzZShpbnB1dCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIC8vIHRoaXMuX3Byb2dyZXNzID0gMFxuICAgICAgICB0aGlzLnBvcyA9IDA7XG4gICAgICAgIHRoaXMuaW5wdXQgPSBpbnB1dDtcbiAgICAgICAgdGhpcy5tYXhfZW50cmllcyA9IG9wdGlvbnMubWF4X2VudHJpZXMgfHwgMDtcbiAgICAgICAgdGhpcy5lbnRyaWVzID0gMDtcbiAgICAgICAgdGhpcy5wYXJzaW5nID0gbnVsbDtcbiAgICAgICAgdGhpcy5jaHVua3MgPSBbXTtcbiAgICAgICAgaWYgKG9wdGlvbnMuYXN5bmMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJpYnRleEFzeW5jKCkudGhlbigoKSA9PiB0aGlzLmNodW5rcyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmJpYnRleCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2h1bmtzO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlzV2hpdGVzcGFjZShzLCBob3Jpem9udGFsT25seSA9IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiAocyA9PT0gJyAnIHx8IHMgPT09ICdcXHQnIHx8ICghaG9yaXpvbnRhbE9ubHkgJiYgKHMgPT09ICdcXHInIHx8IHMgPT09ICdcXG4nKSkpO1xuICAgIH1cbiAgICBtYXRjaChzKSB7XG4gICAgICAgIHRoaXMuc2tpcFdoaXRlc3BhY2UoKTtcbiAgICAgICAgaWYgKHRoaXMuaW5wdXQuc3Vic3RyKHRoaXMucG9zLCBzLmxlbmd0aCkgIT09IHMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKGBUb2tlbiBtaXNtYXRjaCwgZXhwZWN0ZWQgJHtKU09OLnN0cmluZ2lmeShzKX0sIGZvdW5kICR7SlNPTi5zdHJpbmdpZnkodGhpcy5pbnB1dC5zdWJzdHIodGhpcy5wb3MsIDIwKSl9Li4uYCwgdGhpcyk7IC8vIHRzbGludDpkaXNhYmxlLWxpbmUgbm8tbWFnaWMtbnVtYmVyc1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucG9zICs9IHMubGVuZ3RoO1xuICAgICAgICB0aGlzLnNraXBXaGl0ZXNwYWNlKCk7XG4gICAgfVxuICAgIHRyeU1hdGNoKHMpIHtcbiAgICAgICAgdGhpcy5za2lwV2hpdGVzcGFjZSgpO1xuICAgICAgICByZXR1cm4gKHRoaXMuaW5wdXQuc3Vic3RyKHRoaXMucG9zLCBzLmxlbmd0aCkgPT09IHMpO1xuICAgICAgICAvLyB0aGlzLnNraXBXaGl0ZXNwYWNlKClcbiAgICB9XG4gICAgc2tpcFdoaXRlc3BhY2UoKSB7XG4gICAgICAgIHdoaWxlICh0aGlzLnBvcyA8IHRoaXMuaW5wdXQubGVuZ3RoICYmIHRoaXMuaXNXaGl0ZXNwYWNlKHRoaXMuaW5wdXRbdGhpcy5wb3NdKSlcbiAgICAgICAgICAgIHRoaXMucG9zKys7XG4gICAgICAgIC8vIHNoYWR5XG4gICAgICAgIGlmICh0aGlzLmlucHV0W3RoaXMucG9zXSA9PT0gJyUnKSB7XG4gICAgICAgICAgICB3aGlsZSAodGhpcy5wb3MgPCB0aGlzLmlucHV0Lmxlbmd0aCAmJiB0aGlzLmlucHV0W3RoaXMucG9zXSAhPT0gJ1xcbicpXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MrKztcbiAgICAgICAgICAgIHdoaWxlICh0aGlzLnBvcyA8IHRoaXMuaW5wdXQubGVuZ3RoICYmIHRoaXMuaXNXaGl0ZXNwYWNlKHRoaXMuaW5wdXRbdGhpcy5wb3NdKSlcbiAgICAgICAgICAgICAgICB0aGlzLnBvcysrO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZhbHVlX2JyYWNlcygpIHtcbiAgICAgICAgbGV0IGJyYWNlY291bnQgPSAwO1xuICAgICAgICB0aGlzLm1hdGNoKCd7Jyk7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5wb3M7XG4gICAgICAgIGxldCBtYXRoID0gZmFsc2U7XG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMuaW5wdXRbdGhpcy5wb3NdKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnXFxcXCc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucG9zICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3snOlxuICAgICAgICAgICAgICAgICAgICBicmFjZWNvdW50Kys7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ30nOlxuICAgICAgICAgICAgICAgICAgICBpZiAoYnJhY2Vjb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoJ1VuY2xvc2VkIG1hdGggc2VjdGlvbicsIHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3MrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0LnN1YnN0cmluZyhzdGFydCwgdGhpcy5wb3MgLSAxKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmFjZWNvdW50LS07XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJyQnOlxuICAgICAgICAgICAgICAgICAgICBtYXRoID0gIW1hdGg7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wb3MrKztcbiAgICAgICAgICAgIGlmICh0aGlzLnBvcyA+PSB0aGlzLmlucHV0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKGBVbnRlcm1pbmF0ZWQgYnJhY2UtdmFsdWUgJHtKU09OLnN0cmluZ2lmeSh0aGlzLmlucHV0LnN1YnN0cihzdGFydCwgMjApKX1gLCB0aGlzKTsgLy8gdHNsaW50OmRpc2FibGUtbGluZSBuby1tYWdpYy1udW1iZXJzXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmFsdWVfcXVvdGVzKCkge1xuICAgICAgICB0aGlzLm1hdGNoKCdcIicpO1xuICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMucG9zO1xuICAgICAgICBsZXQgYnJhY2Vjb3VudCA9IDA7XG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMuaW5wdXRbdGhpcy5wb3NdKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnXFxcXCc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucG9zICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3snOlxuICAgICAgICAgICAgICAgICAgICBicmFjZWNvdW50Kys7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ30nOlxuICAgICAgICAgICAgICAgICAgICBicmFjZWNvdW50LS07XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ1wiJzpcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJyYWNlY291bnQgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3MrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0LnN1YnN0cmluZyhzdGFydCwgdGhpcy5wb3MgLSAxKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wb3MrKztcbiAgICAgICAgICAgIGlmICh0aGlzLnBvcyA+PSB0aGlzLmlucHV0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKGBVbnRlcm1pbmF0ZWQgcXVvdGUtdmFsdWUgJHtKU09OLnN0cmluZ2lmeSh0aGlzLmlucHV0LnN1YnN0cihzdGFydCwgMjApKX1gLCB0aGlzKTsgLy8gdHNsaW50OmRpc2FibGUtbGluZSBuby1tYWdpYy1udW1iZXJzXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2luZ2xlX3ZhbHVlKCkge1xuICAgICAgICBpZiAodGhpcy50cnlNYXRjaCgneycpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZV9icmFjZXMoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLnRyeU1hdGNoKCdcIicpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZV9xdW90ZXMoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmtleSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZhbHVlKCkge1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBbXTtcbiAgICAgICAgdmFsdWVzLnB1c2godGhpcy5zaW5nbGVfdmFsdWUoKSk7XG4gICAgICAgIHdoaWxlICh0aGlzLnRyeU1hdGNoKCcjJykpIHtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goJyMnKTtcbiAgICAgICAgICAgIHZhbHVlcy5wdXNoKHRoaXMuc2luZ2xlX3ZhbHVlKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZXMuam9pbignJyk7XG4gICAgfVxuICAgIGtleShhbGxvd1VuaWNvZGUgPSBmYWxzZSkge1xuICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMucG9zO1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucG9zID09PSB0aGlzLmlucHV0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKCdSdW5hd2F5IGtleScsIHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuaW5wdXRbdGhpcy5wb3NdLm1hdGNoKC9bJ2EtekEtWjAtOSY7XzpcXFxcLi8tXS8pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3MrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGFsbG93VW5pY29kZSAmJiB0aGlzLmlucHV0W3RoaXMucG9zXS5tYXRjaChsZXR0ZXIpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3MrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0LnN1YnN0cmluZyhzdGFydCwgdGhpcy5wb3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGtleV9lcXVhbHNfdmFsdWUoKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMua2V5KCk7XG4gICAgICAgIGlmICghdGhpcy50cnlNYXRjaCgnPScpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihgLi4uID0gdmFsdWUgZXhwZWN0ZWQsIGVxdWFscyBzaWduIG1pc3Npbmc6ICR7SlNPTi5zdHJpbmdpZnkodGhpcy5pbnB1dC5zdWJzdHIodGhpcy5wb3MsIDIwKSl9Li4uYCwgdGhpcyk7IC8vIHRzbGludDpkaXNhYmxlLWxpbmUgbm8tbWFnaWMtbnVtYmVyc1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWF0Y2goJz0nKTtcbiAgICAgICAgY29uc3QgdmFsID0gdGhpcy52YWx1ZSgpO1xuICAgICAgICByZXR1cm4gW2tleSwgdmFsXTtcbiAgICB9XG4gICAga2V5X3ZhbHVlX2xpc3QoKSB7XG4gICAgICAgIHRoaXMua2V5X2VxdWFsc192YWx1ZSgpO1xuICAgICAgICB3aGlsZSAodGhpcy50cnlNYXRjaCgnLCcpKSB7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKCcsJyk7XG4gICAgICAgICAgICAvLyBmaXhlcyBwcm9ibGVtcyB3aXRoIGNvbW1hcyBhdCB0aGUgZW5kIG9mIGEgbGlzdFxuICAgICAgICAgICAgaWYgKHRoaXMudHJ5TWF0Y2goJ30nKSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5rZXlfZXF1YWxzX3ZhbHVlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZW50cnkoZCkge1xuICAgICAgICB0aGlzLnBhcnNpbmcgPSB0aGlzLmtleSh0cnVlKTtcbiAgICAgICAgdGhpcy5tYXRjaCgnLCcpO1xuICAgICAgICB0aGlzLmtleV92YWx1ZV9saXN0KCk7XG4gICAgfVxuICAgIGRpcmVjdGl2ZSgpIHtcbiAgICAgICAgdGhpcy5tYXRjaCgnQCcpO1xuICAgICAgICByZXR1cm4gYEAke3RoaXMua2V5KCl9YC50b0xvd2VyQ2FzZSgpO1xuICAgIH1cbiAgICBzdHJpbmcoKSB7XG4gICAgICAgIHRoaXMua2V5X2VxdWFsc192YWx1ZSgpO1xuICAgIH1cbiAgICBwcmVhbWJsZSgpIHtcbiAgICAgICAgdGhpcy52YWx1ZSgpO1xuICAgIH1cbiAgICBjb21tZW50KCkge1xuICAgICAgICB3aGlsZSAodGhpcy5pc1doaXRlc3BhY2UodGhpcy5pbnB1dFt0aGlzLnBvc10sIHRydWUpKVxuICAgICAgICAgICAgdGhpcy5wb3MrKztcbiAgICAgICAgaWYgKHRoaXMuaW5wdXRbdGhpcy5wb3NdID09PSAneycpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWVfYnJhY2VzKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKHRoaXMuaW5wdXRbdGhpcy5wb3NdICE9PSAnXFxuJyAmJiB0aGlzLnBvcyA8IHRoaXMuaW5wdXQubGVuZ3RoKVxuICAgICAgICAgICAgdGhpcy5wb3MrKztcbiAgICB9XG4gICAgLypcbiAgICBwcml2YXRlIHByb2dyZXNzKCkge1xuICAgICAgY29uc3QgcHJvZ3Jlc3MgPSBNYXRoLnJvdW5kKCh0aGlzLnBvcyAvIHRoaXMuaW5wdXQubGVuZ3RoICogMTAwKSAvIDUpICogNSAvLyB0c2xpbnQ6ZGlzYWJsZS1saW5lIG5vLW1hZ2ljLW51bWJlcnNcbiAgICAgIGlmICh0aGlzLl9wcm9ncmVzcyAhPT0gcHJvZ3Jlc3MpIHtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3MgPSBwcm9ncmVzc1xuICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShgICgke3RoaXMuX3Byb2dyZXNzfSUpIGApXG4gICAgICB9XG4gICAgfVxuICAgICovXG4gICAgaGFzTW9yZSgpIHtcbiAgICAgICAgaWYgKHRoaXMubWF4X2VudHJpZXMgJiYgdGhpcy5lbnRyaWVzID49IHRoaXMubWF4X2VudHJpZXMpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiAodGhpcy5wb3MgPCB0aGlzLmlucHV0Lmxlbmd0aCk7XG4gICAgfVxuICAgIGJpYnRleCgpIHtcbiAgICAgICAgd2hpbGUgKHRoaXMuaGFzTW9yZSgpKSB7XG4gICAgICAgICAgICB0aGlzLnBhcnNlTmV4dCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGJpYnRleEFzeW5jKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5oYXNNb3JlKCkgPyAobmV3IFByb21pc2UocmVzb2x2ZSA9PiByZXNvbHZlKHRoaXMucGFyc2VOZXh0KCkpKSkudGhlbigoKSA9PiB0aGlzLmJpYnRleEFzeW5jKCkpIDogUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuICAgIH1cbiAgICBwYXJzZU5leHQoKSB7XG4gICAgICAgIC8vIHRoaXMucHJvZ3Jlc3MoKVxuICAgICAgICBjb25zdCBjaHVuayA9IHtcbiAgICAgICAgICAgIG9mZnNldDoge1xuICAgICAgICAgICAgICAgIHBvczogdGhpcy5wb3MsXG4gICAgICAgICAgICAgICAgbGluZTogdGhpcy5pbnB1dC5zdWJzdHJpbmcoMCwgdGhpcy5wb3MpLnNwbGl0KCdcXG4nKS5sZW5ndGggLSAxLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgICAgdGV4dDogbnVsbCxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5za2lwV2hpdGVzcGFjZSgpO1xuICAgICAgICBpZiAodGhpcy5wb3MgPj0gdGhpcy5pbnB1dC5sZW5ndGgpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGxldCBndWFyZCA9ICcnO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgZCA9IHRoaXMuZGlyZWN0aXZlKCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGQpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdAc3RyaW5nJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXRjaCgneycpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoKCd9Jyk7XG4gICAgICAgICAgICAgICAgICAgIGNodW5rLnN0cmluZ0RlY2xhcmF0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnQHByZWFtYmxlJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXRjaCgneycpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnByZWFtYmxlKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goJ30nKTtcbiAgICAgICAgICAgICAgICAgICAgY2h1bmsucHJlYW1ibGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdAY29tbWVudCc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29tbWVudCgpO1xuICAgICAgICAgICAgICAgICAgICBjaHVuay5jb21tZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudHJ5TWF0Y2goJ3snKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ3VhcmQgPSAne30nO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMudHJ5TWF0Y2goJygnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ3VhcmQgPSAnKCknO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoYFRva2VuIG1pc21hdGNoLCBleHBlY3RlZCAneycgb3IgJygnLCBmb3VuZCAke0pTT04uc3RyaW5naWZ5KHRoaXMuaW5wdXQuc3Vic3RyKHRoaXMucG9zLCAyMCkpfS4uLmAsIHRoaXMpOyAvLyB0c2xpbnQ6ZGlzYWJsZS1saW5lIG5vLW1hZ2ljLW51bWJlcnNcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoKGd1YXJkWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnRyeShkKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXRjaChndWFyZFsxXSk7XG4gICAgICAgICAgICAgICAgICAgIGNodW5rLmVudHJ5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnRyaWVzKys7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIubmFtZSAhPT0gJ1BhcnNlRXJyb3InKVxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgIGNodW5rLmVycm9yID0gZXJyLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgLy8gc2tpcCBhaGVhZCB0byB0aGUgbmV4dCBAIGFuZCB0cnkgYWdhaW5cbiAgICAgICAgICAgICAgICB0aGlzLnBvcyA9IGNodW5rLm9mZnNldC5wb3MgKyAxO1xuICAgICAgICAgICAgd2hpbGUgKHRoaXMucG9zIDwgdGhpcy5pbnB1dC5sZW5ndGggJiYgdGhpcy5pbnB1dFt0aGlzLnBvc10gIT09ICdAJylcbiAgICAgICAgICAgICAgICB0aGlzLnBvcysrO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRleHQgPSB0aGlzLmlucHV0LnN1YnN0cmluZyhjaHVuay5vZmZzZXQucG9zLCB0aGlzLnBvcyk7XG4gICAgICAgIGNvbnN0IGxhc3QgPSB0aGlzLmNodW5rcy5sZW5ndGggLSAxO1xuICAgICAgICBpZiAoY2h1bmsuZXJyb3IgJiYgdGhpcy5jaHVua3MubGVuZ3RoICYmIHRoaXMuY2h1bmtzW2xhc3RdLmVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLmNodW5rc1tsYXN0XS50ZXh0ICs9IHRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjaHVuay50ZXh0ID0gdGV4dDtcbiAgICAgICAgICAgIHRoaXMuY2h1bmtzLnB1c2goY2h1bmspO1xuICAgICAgICB9XG4gICAgfVxufVxuLyoqXG4gKiBSZWFkcyB0aGUgYmlidGV4IGlucHV0IGFuZCBzcGxpdHMgaXQgaW50byBzZXBhcmF0ZSBjaHVua3Mgb2YgYEBzdHJpbmdgcywgYEBjb21tZW50YHMsIGFuZCBiaWJ0ZXggZW50cmllcy4gVXNlZnVsIGZvciBkZXRlY3RpbmcgaWYgYSBmaWxlIGlzIGJpYnRleCBmaWxlIGFuZCBmb3IgZmlsdGVyaW5nIG91dCBiYXNpYyBlcnJvcnMgdGhhdCB3b3VsZFxuICogbWFrZSB0aGUgbW9yZSBzb3BoaXN0aWNhdGVkIFtbYmlidGV4LnBhcnNlXV0gcmVqZWN0IHRoZSB3aG9sZSBmaWxlXG4gKlxuICogQHJldHVybnMgYXJyYXkgb2YgY2h1bmtzLCB3aXRoIG1hcmtlcnMgZm9yIHR5cGUgYW5kIGVycm9ycyAoaWYgYW55KSBmb3VuZC5cbiAqL1xuZnVuY3Rpb24gcGFyc2UoaW5wdXQsIG9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiAobmV3IEJpYnRleFBhcnNlcikucGFyc2UoaW5wdXQsIG9wdGlvbnMpO1xufVxuZXhwb3J0cy5wYXJzZSA9IHBhcnNlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y2h1bmtlci5qcy5tYXAiLCJtb2R1bGUuZXhwb3J0cyA9IHtcbiAgYXNjaWk6IHJlcXVpcmUoJy4vdGFibGVzL2FzY2lpLmpzb24nKSxcbiAgYXNjaWlfYmlidGV4X2NyZWF0b3I6IHJlcXVpcmUoJy4vdGFibGVzL2FzY2lpLWJpYnRleC1jcmVhdG9yLmpzb24nKSxcbiAgdW5pY29kZTogcmVxdWlyZSgnLi90YWJsZXMvdW5pY29kZS5qc29uJyksXG4gIGxhdGV4OiByZXF1aXJlKCcuL3RhYmxlcy9sYXRleC5qc29uJyksXG4gIGRpYWNyaXRpY3M6IHJlcXVpcmUoJy4vdGFibGVzL2RpYWNyaXRpY3MuanNvbicpLFxufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gW1xuICAgIHtcbiAgICAgICAgJ25hbWUnOiAnQycsXG4gICAgICAgICdhbGlhcyc6ICdPdGhlcicsXG4gICAgICAgICdpc0JtcExhc3QnOiB0cnVlLFxuICAgICAgICAnYm1wJzogJ1xcMC1cXHgxRlxceDdGLVxceDlGXFx4QURcXHUwMzc4XFx1MDM3OVxcdTAzODAtXFx1MDM4M1xcdTAzOEJcXHUwMzhEXFx1MDNBMlxcdTA1MzBcXHUwNTU3XFx1MDU1OFxcdTA1OEJcXHUwNThDXFx1MDU5MFxcdTA1QzgtXFx1MDVDRlxcdTA1RUItXFx1MDVFRVxcdTA1RjUtXFx1MDYwNVxcdTA2MUNcXHUwNjFEXFx1MDZERFxcdTA3MEVcXHUwNzBGXFx1MDc0QlxcdTA3NENcXHUwN0IyLVxcdTA3QkZcXHUwN0ZCXFx1MDdGQ1xcdTA4MkVcXHUwODJGXFx1MDgzRlxcdTA4NUNcXHUwODVEXFx1MDg1RlxcdTA4NkItXFx1MDg5RlxcdTA4QjVcXHUwOEM4LVxcdTA4RDJcXHUwOEUyXFx1MDk4NFxcdTA5OERcXHUwOThFXFx1MDk5MVxcdTA5OTJcXHUwOUE5XFx1MDlCMVxcdTA5QjMtXFx1MDlCNVxcdTA5QkFcXHUwOUJCXFx1MDlDNVxcdTA5QzZcXHUwOUM5XFx1MDlDQVxcdTA5Q0YtXFx1MDlENlxcdTA5RDgtXFx1MDlEQlxcdTA5REVcXHUwOUU0XFx1MDlFNVxcdTA5RkZcXHUwQTAwXFx1MEEwNFxcdTBBMEItXFx1MEEwRVxcdTBBMTFcXHUwQTEyXFx1MEEyOVxcdTBBMzFcXHUwQTM0XFx1MEEzN1xcdTBBM0FcXHUwQTNCXFx1MEEzRFxcdTBBNDMtXFx1MEE0NlxcdTBBNDlcXHUwQTRBXFx1MEE0RS1cXHUwQTUwXFx1MEE1Mi1cXHUwQTU4XFx1MEE1RFxcdTBBNUYtXFx1MEE2NVxcdTBBNzctXFx1MEE4MFxcdTBBODRcXHUwQThFXFx1MEE5MlxcdTBBQTlcXHUwQUIxXFx1MEFCNFxcdTBBQkFcXHUwQUJCXFx1MEFDNlxcdTBBQ0FcXHUwQUNFXFx1MEFDRlxcdTBBRDEtXFx1MEFERlxcdTBBRTRcXHUwQUU1XFx1MEFGMi1cXHUwQUY4XFx1MEIwMFxcdTBCMDRcXHUwQjBEXFx1MEIwRVxcdTBCMTFcXHUwQjEyXFx1MEIyOVxcdTBCMzFcXHUwQjM0XFx1MEIzQVxcdTBCM0JcXHUwQjQ1XFx1MEI0NlxcdTBCNDlcXHUwQjRBXFx1MEI0RS1cXHUwQjU0XFx1MEI1OC1cXHUwQjVCXFx1MEI1RVxcdTBCNjRcXHUwQjY1XFx1MEI3OC1cXHUwQjgxXFx1MEI4NFxcdTBCOEItXFx1MEI4RFxcdTBCOTFcXHUwQjk2LVxcdTBCOThcXHUwQjlCXFx1MEI5RFxcdTBCQTAtXFx1MEJBMlxcdTBCQTUtXFx1MEJBN1xcdTBCQUItXFx1MEJBRFxcdTBCQkEtXFx1MEJCRFxcdTBCQzMtXFx1MEJDNVxcdTBCQzlcXHUwQkNFXFx1MEJDRlxcdTBCRDEtXFx1MEJENlxcdTBCRDgtXFx1MEJFNVxcdTBCRkItXFx1MEJGRlxcdTBDMERcXHUwQzExXFx1MEMyOVxcdTBDM0EtXFx1MEMzQ1xcdTBDNDVcXHUwQzQ5XFx1MEM0RS1cXHUwQzU0XFx1MEM1N1xcdTBDNUItXFx1MEM1RlxcdTBDNjRcXHUwQzY1XFx1MEM3MC1cXHUwQzc2XFx1MEM4RFxcdTBDOTFcXHUwQ0E5XFx1MENCNFxcdTBDQkFcXHUwQ0JCXFx1MENDNVxcdTBDQzlcXHUwQ0NFLVxcdTBDRDRcXHUwQ0Q3LVxcdTBDRERcXHUwQ0RGXFx1MENFNFxcdTBDRTVcXHUwQ0YwXFx1MENGMy1cXHUwQ0ZGXFx1MEQwRFxcdTBEMTFcXHUwRDQ1XFx1MEQ0OVxcdTBENTAtXFx1MEQ1M1xcdTBENjRcXHUwRDY1XFx1MEQ4MFxcdTBEODRcXHUwRDk3LVxcdTBEOTlcXHUwREIyXFx1MERCQ1xcdTBEQkVcXHUwREJGXFx1MERDNy1cXHUwREM5XFx1MERDQi1cXHUwRENFXFx1MERENVxcdTBERDdcXHUwREUwLVxcdTBERTVcXHUwREYwXFx1MERGMVxcdTBERjUtXFx1MEUwMFxcdTBFM0ItXFx1MEUzRVxcdTBFNUMtXFx1MEU4MFxcdTBFODNcXHUwRTg1XFx1MEU4QlxcdTBFQTRcXHUwRUE2XFx1MEVCRVxcdTBFQkZcXHUwRUM1XFx1MEVDN1xcdTBFQ0VcXHUwRUNGXFx1MEVEQVxcdTBFREJcXHUwRUUwLVxcdTBFRkZcXHUwRjQ4XFx1MEY2RC1cXHUwRjcwXFx1MEY5OFxcdTBGQkRcXHUwRkNEXFx1MEZEQi1cXHUwRkZGXFx1MTBDNlxcdTEwQzgtXFx1MTBDQ1xcdTEwQ0VcXHUxMENGXFx1MTI0OVxcdTEyNEVcXHUxMjRGXFx1MTI1N1xcdTEyNTlcXHUxMjVFXFx1MTI1RlxcdTEyODlcXHUxMjhFXFx1MTI4RlxcdTEyQjFcXHUxMkI2XFx1MTJCN1xcdTEyQkZcXHUxMkMxXFx1MTJDNlxcdTEyQzdcXHUxMkQ3XFx1MTMxMVxcdTEzMTZcXHUxMzE3XFx1MTM1QlxcdTEzNUNcXHUxMzdELVxcdTEzN0ZcXHUxMzlBLVxcdTEzOUZcXHUxM0Y2XFx1MTNGN1xcdTEzRkVcXHUxM0ZGXFx1MTY5RC1cXHUxNjlGXFx1MTZGOS1cXHUxNkZGXFx1MTcwRFxcdTE3MTUtXFx1MTcxRlxcdTE3MzctXFx1MTczRlxcdTE3NTQtXFx1MTc1RlxcdTE3NkRcXHUxNzcxXFx1MTc3NC1cXHUxNzdGXFx1MTdERVxcdTE3REZcXHUxN0VBLVxcdTE3RUZcXHUxN0ZBLVxcdTE3RkZcXHUxODBFXFx1MTgwRlxcdTE4MUEtXFx1MTgxRlxcdTE4NzktXFx1MTg3RlxcdTE4QUItXFx1MThBRlxcdTE4RjYtXFx1MThGRlxcdTE5MUZcXHUxOTJDLVxcdTE5MkZcXHUxOTNDLVxcdTE5M0ZcXHUxOTQxLVxcdTE5NDNcXHUxOTZFXFx1MTk2RlxcdTE5NzUtXFx1MTk3RlxcdTE5QUMtXFx1MTlBRlxcdTE5Q0EtXFx1MTlDRlxcdTE5REItXFx1MTlERFxcdTFBMUNcXHUxQTFEXFx1MUE1RlxcdTFBN0RcXHUxQTdFXFx1MUE4QS1cXHUxQThGXFx1MUE5QS1cXHUxQTlGXFx1MUFBRVxcdTFBQUZcXHUxQUMxLVxcdTFBRkZcXHUxQjRDLVxcdTFCNEZcXHUxQjdELVxcdTFCN0ZcXHUxQkY0LVxcdTFCRkJcXHUxQzM4LVxcdTFDM0FcXHUxQzRBLVxcdTFDNENcXHUxQzg5LVxcdTFDOEZcXHUxQ0JCXFx1MUNCQ1xcdTFDQzgtXFx1MUNDRlxcdTFDRkItXFx1MUNGRlxcdTFERkFcXHUxRjE2XFx1MUYxN1xcdTFGMUVcXHUxRjFGXFx1MUY0NlxcdTFGNDdcXHUxRjRFXFx1MUY0RlxcdTFGNThcXHUxRjVBXFx1MUY1Q1xcdTFGNUVcXHUxRjdFXFx1MUY3RlxcdTFGQjVcXHUxRkM1XFx1MUZENFxcdTFGRDVcXHUxRkRDXFx1MUZGMFxcdTFGRjFcXHUxRkY1XFx1MUZGRlxcdTIwMEItXFx1MjAwRlxcdTIwMkEtXFx1MjAyRVxcdTIwNjAtXFx1MjA2RlxcdTIwNzJcXHUyMDczXFx1MjA4RlxcdTIwOUQtXFx1MjA5RlxcdTIwQzAtXFx1MjBDRlxcdTIwRjEtXFx1MjBGRlxcdTIxOEMtXFx1MjE4RlxcdTI0MjctXFx1MjQzRlxcdTI0NEItXFx1MjQ1RlxcdTJCNzRcXHUyQjc1XFx1MkI5NlxcdTJDMkZcXHUyQzVGXFx1MkNGNC1cXHUyQ0Y4XFx1MkQyNlxcdTJEMjgtXFx1MkQyQ1xcdTJEMkVcXHUyRDJGXFx1MkQ2OC1cXHUyRDZFXFx1MkQ3MS1cXHUyRDdFXFx1MkQ5Ny1cXHUyRDlGXFx1MkRBN1xcdTJEQUZcXHUyREI3XFx1MkRCRlxcdTJEQzdcXHUyRENGXFx1MkREN1xcdTJEREZcXHUyRTUzLVxcdTJFN0ZcXHUyRTlBXFx1MkVGNC1cXHUyRUZGXFx1MkZENi1cXHUyRkVGXFx1MkZGQy1cXHUyRkZGXFx1MzA0MFxcdTMwOTdcXHUzMDk4XFx1MzEwMC1cXHUzMTA0XFx1MzEzMFxcdTMxOEZcXHUzMUU0LVxcdTMxRUZcXHUzMjFGXFx1OUZGRC1cXHU5RkZGXFx1QTQ4RC1cXHVBNDhGXFx1QTRDNy1cXHVBNENGXFx1QTYyQy1cXHVBNjNGXFx1QTZGOC1cXHVBNkZGXFx1QTdDMFxcdUE3QzFcXHVBN0NCLVxcdUE3RjRcXHVBODJELVxcdUE4MkZcXHVBODNBLVxcdUE4M0ZcXHVBODc4LVxcdUE4N0ZcXHVBOEM2LVxcdUE4Q0RcXHVBOERBLVxcdUE4REZcXHVBOTU0LVxcdUE5NUVcXHVBOTdELVxcdUE5N0ZcXHVBOUNFXFx1QTlEQS1cXHVBOUREXFx1QTlGRlxcdUFBMzctXFx1QUEzRlxcdUFBNEVcXHVBQTRGXFx1QUE1QVxcdUFBNUJcXHVBQUMzLVxcdUFBREFcXHVBQUY3LVxcdUFCMDBcXHVBQjA3XFx1QUIwOFxcdUFCMEZcXHVBQjEwXFx1QUIxNy1cXHVBQjFGXFx1QUIyN1xcdUFCMkZcXHVBQjZDLVxcdUFCNkZcXHVBQkVFXFx1QUJFRlxcdUFCRkEtXFx1QUJGRlxcdUQ3QTQtXFx1RDdBRlxcdUQ3QzctXFx1RDdDQVxcdUQ3RkMtXFx1RjhGRlxcdUZBNkVcXHVGQTZGXFx1RkFEQS1cXHVGQUZGXFx1RkIwNy1cXHVGQjEyXFx1RkIxOC1cXHVGQjFDXFx1RkIzN1xcdUZCM0RcXHVGQjNGXFx1RkI0MlxcdUZCNDVcXHVGQkMyLVxcdUZCRDJcXHVGRDQwLVxcdUZENEZcXHVGRDkwXFx1RkQ5MVxcdUZEQzgtXFx1RkRFRlxcdUZERkVcXHVGREZGXFx1RkUxQS1cXHVGRTFGXFx1RkU1M1xcdUZFNjdcXHVGRTZDLVxcdUZFNkZcXHVGRTc1XFx1RkVGRC1cXHVGRjAwXFx1RkZCRi1cXHVGRkMxXFx1RkZDOFxcdUZGQzlcXHVGRkQwXFx1RkZEMVxcdUZGRDhcXHVGRkQ5XFx1RkZERC1cXHVGRkRGXFx1RkZFN1xcdUZGRUYtXFx1RkZGQlxcdUZGRkVcXHVGRkZGJyxcbiAgICAgICAgJ2FzdHJhbCc6ICdcXHVEODAwW1xcdURDMENcXHVEQzI3XFx1REMzQlxcdURDM0VcXHVEQzRFXFx1REM0RlxcdURDNUUtXFx1REM3RlxcdURDRkItXFx1RENGRlxcdUREMDMtXFx1REQwNlxcdUREMzQtXFx1REQzNlxcdUREOEZcXHVERDlELVxcdUREOUZcXHVEREExLVxcdUREQ0ZcXHVEREZFLVxcdURFN0ZcXHVERTlELVxcdURFOUZcXHVERUQxLVxcdURFREZcXHVERUZDLVxcdURFRkZcXHVERjI0LVxcdURGMkNcXHVERjRCLVxcdURGNEZcXHVERjdCLVxcdURGN0ZcXHVERjlFXFx1REZDNC1cXHVERkM3XFx1REZENi1cXHVERkZGXXxcXHVEODAxW1xcdURDOUVcXHVEQzlGXFx1RENBQS1cXHVEQ0FGXFx1RENENC1cXHVEQ0Q3XFx1RENGQy1cXHVEQ0ZGXFx1REQyOC1cXHVERDJGXFx1REQ2NC1cXHVERDZFXFx1REQ3MC1cXHVEREZGXFx1REYzNy1cXHVERjNGXFx1REY1Ni1cXHVERjVGXFx1REY2OC1cXHVERkZGXXxcXHVEODAyW1xcdURDMDZcXHVEQzA3XFx1REMwOVxcdURDMzZcXHVEQzM5LVxcdURDM0JcXHVEQzNEXFx1REMzRVxcdURDNTZcXHVEQzlGLVxcdURDQTZcXHVEQ0IwLVxcdURDREZcXHVEQ0YzXFx1RENGNi1cXHVEQ0ZBXFx1REQxQy1cXHVERDFFXFx1REQzQS1cXHVERDNFXFx1REQ0MC1cXHVERDdGXFx1RERCOC1cXHVEREJCXFx1REREMFxcdURERDFcXHVERTA0XFx1REUwNy1cXHVERTBCXFx1REUxNFxcdURFMThcXHVERTM2XFx1REUzN1xcdURFM0ItXFx1REUzRVxcdURFNDktXFx1REU0RlxcdURFNTktXFx1REU1RlxcdURFQTAtXFx1REVCRlxcdURFRTctXFx1REVFQVxcdURFRjctXFx1REVGRlxcdURGMzYtXFx1REYzOFxcdURGNTZcXHVERjU3XFx1REY3My1cXHVERjc3XFx1REY5Mi1cXHVERjk4XFx1REY5RC1cXHVERkE4XFx1REZCMC1cXHVERkZGXXxcXHVEODAzW1xcdURDNDktXFx1REM3RlxcdURDQjMtXFx1RENCRlxcdURDRjMtXFx1RENGOVxcdUREMjgtXFx1REQyRlxcdUREM0EtXFx1REU1RlxcdURFN0ZcXHVERUFBXFx1REVBRVxcdURFQUZcXHVERUIyLVxcdURFRkZcXHVERjI4LVxcdURGMkZcXHVERjVBLVxcdURGQUZcXHVERkNDLVxcdURGREZcXHVERkY3LVxcdURGRkZdfFxcdUQ4MDRbXFx1REM0RS1cXHVEQzUxXFx1REM3MC1cXHVEQzdFXFx1RENCRFxcdURDQzItXFx1RENDRlxcdURDRTktXFx1RENFRlxcdURDRkEtXFx1RENGRlxcdUREMzVcXHVERDQ4LVxcdURENEZcXHVERDc3LVxcdUREN0ZcXHVEREUwXFx1RERGNS1cXHVEREZGXFx1REUxMlxcdURFM0YtXFx1REU3RlxcdURFODdcXHVERTg5XFx1REU4RVxcdURFOUVcXHVERUFBLVxcdURFQUZcXHVERUVCLVxcdURFRUZcXHVERUZBLVxcdURFRkZcXHVERjA0XFx1REYwRFxcdURGMEVcXHVERjExXFx1REYxMlxcdURGMjlcXHVERjMxXFx1REYzNFxcdURGM0FcXHVERjQ1XFx1REY0NlxcdURGNDlcXHVERjRBXFx1REY0RVxcdURGNEZcXHVERjUxLVxcdURGNTZcXHVERjU4LVxcdURGNUNcXHVERjY0XFx1REY2NVxcdURGNkQtXFx1REY2RlxcdURGNzUtXFx1REZGRl18XFx1RDgwNVtcXHVEQzVDXFx1REM2Mi1cXHVEQzdGXFx1RENDOC1cXHVEQ0NGXFx1RENEQS1cXHVERDdGXFx1RERCNlxcdUREQjdcXHVERERFLVxcdURERkZcXHVERTQ1LVxcdURFNEZcXHVERTVBLVxcdURFNUZcXHVERTZELVxcdURFN0ZcXHVERUI5LVxcdURFQkZcXHVERUNBLVxcdURFRkZcXHVERjFCXFx1REYxQ1xcdURGMkMtXFx1REYyRlxcdURGNDAtXFx1REZGRl18XFx1RDgwNltcXHVEQzNDLVxcdURDOUZcXHVEQ0YzLVxcdURDRkVcXHVERDA3XFx1REQwOFxcdUREMEFcXHVERDBCXFx1REQxNFxcdUREMTdcXHVERDM2XFx1REQzOVxcdUREM0FcXHVERDQ3LVxcdURENEZcXHVERDVBLVxcdUREOUZcXHVEREE4XFx1RERBOVxcdURERDhcXHVEREQ5XFx1RERFNS1cXHVEREZGXFx1REU0OC1cXHVERTRGXFx1REVBMy1cXHVERUJGXFx1REVGOS1cXHVERkZGXXxcXHVEODA3W1xcdURDMDlcXHVEQzM3XFx1REM0Ni1cXHVEQzRGXFx1REM2RC1cXHVEQzZGXFx1REM5MFxcdURDOTFcXHVEQ0E4XFx1RENCNy1cXHVEQ0ZGXFx1REQwN1xcdUREMEFcXHVERDM3LVxcdUREMzlcXHVERDNCXFx1REQzRVxcdURENDgtXFx1REQ0RlxcdURENUEtXFx1REQ1RlxcdURENjZcXHVERDY5XFx1REQ4RlxcdUREOTJcXHVERDk5LVxcdUREOUZcXHVEREFBLVxcdURFREZcXHVERUY5LVxcdURGQUZcXHVERkIxLVxcdURGQkZcXHVERkYyLVxcdURGRkVdfFxcdUQ4MDhbXFx1REY5QS1cXHVERkZGXXxcXHVEODA5W1xcdURDNkZcXHVEQzc1LVxcdURDN0ZcXHVERDQ0LVxcdURGRkZdfFtcXHVEODBBXFx1RDgwQlxcdUQ4MEUtXFx1RDgxMFxcdUQ4MTItXFx1RDgxOVxcdUQ4MjQtXFx1RDgyQlxcdUQ4MkRcXHVEODJFXFx1RDgzMC1cXHVEODMzXFx1RDgzN1xcdUQ4MzlcXHVEODNGXFx1RDg3Qi1cXHVEODdEXFx1RDg3RlxcdUQ4ODUtXFx1REIzRlxcdURCNDEtXFx1REJGRl1bXFx1REMwMC1cXHVERkZGXXxcXHVEODBEW1xcdURDMkYtXFx1REZGRl18XFx1RDgxMVtcXHVERTQ3LVxcdURGRkZdfFxcdUQ4MUFbXFx1REUzOS1cXHVERTNGXFx1REU1RlxcdURFNkEtXFx1REU2RFxcdURFNzAtXFx1REVDRlxcdURFRUVcXHVERUVGXFx1REVGNi1cXHVERUZGXFx1REY0Ni1cXHVERjRGXFx1REY1QVxcdURGNjJcXHVERjc4LVxcdURGN0NcXHVERjkwLVxcdURGRkZdfFxcdUQ4MUJbXFx1REMwMC1cXHVERTNGXFx1REU5Qi1cXHVERUZGXFx1REY0Qi1cXHVERjRFXFx1REY4OC1cXHVERjhFXFx1REZBMC1cXHVERkRGXFx1REZFNS1cXHVERkVGXFx1REZGMi1cXHVERkZGXXxcXHVEODIxW1xcdURGRjgtXFx1REZGRl18XFx1RDgyM1tcXHVEQ0Q2LVxcdURDRkZcXHVERDA5LVxcdURGRkZdfFxcdUQ4MkNbXFx1REQxRi1cXHVERDRGXFx1REQ1My1cXHVERDYzXFx1REQ2OC1cXHVERDZGXFx1REVGQy1cXHVERkZGXXxcXHVEODJGW1xcdURDNkItXFx1REM2RlxcdURDN0QtXFx1REM3RlxcdURDODktXFx1REM4RlxcdURDOUFcXHVEQzlCXFx1RENBMC1cXHVERkZGXXxcXHVEODM0W1xcdURDRjYtXFx1RENGRlxcdUREMjdcXHVERDI4XFx1REQ3My1cXHVERDdBXFx1RERFOS1cXHVEREZGXFx1REU0Ni1cXHVERURGXFx1REVGNC1cXHVERUZGXFx1REY1Ny1cXHVERjVGXFx1REY3OS1cXHVERkZGXXxcXHVEODM1W1xcdURDNTVcXHVEQzlEXFx1RENBMFxcdURDQTFcXHVEQ0EzXFx1RENBNFxcdURDQTdcXHVEQ0E4XFx1RENBRFxcdURDQkFcXHVEQ0JDXFx1RENDNFxcdUREMDZcXHVERDBCXFx1REQwQ1xcdUREMTVcXHVERDFEXFx1REQzQVxcdUREM0ZcXHVERDQ1XFx1REQ0Ny1cXHVERDQ5XFx1REQ1MVxcdURFQTZcXHVERUE3XFx1REZDQ1xcdURGQ0RdfFxcdUQ4MzZbXFx1REU4Qy1cXHVERTlBXFx1REVBMFxcdURFQjAtXFx1REZGRl18XFx1RDgzOFtcXHVEQzA3XFx1REMxOVxcdURDMUFcXHVEQzIyXFx1REMyNVxcdURDMkItXFx1RENGRlxcdUREMkQtXFx1REQyRlxcdUREM0VcXHVERDNGXFx1REQ0QS1cXHVERDREXFx1REQ1MC1cXHVERUJGXFx1REVGQS1cXHVERUZFXFx1REYwMC1cXHVERkZGXXxcXHVEODNBW1xcdURDQzVcXHVEQ0M2XFx1RENENy1cXHVEQ0ZGXFx1REQ0Qy1cXHVERDRGXFx1REQ1QS1cXHVERDVEXFx1REQ2MC1cXHVERkZGXXxcXHVEODNCW1xcdURDMDAtXFx1REM3MFxcdURDQjUtXFx1REQwMFxcdUREM0UtXFx1RERGRlxcdURFMDRcXHVERTIwXFx1REUyM1xcdURFMjVcXHVERTI2XFx1REUyOFxcdURFMzNcXHVERTM4XFx1REUzQVxcdURFM0MtXFx1REU0MVxcdURFNDMtXFx1REU0NlxcdURFNDhcXHVERTRBXFx1REU0Q1xcdURFNTBcXHVERTUzXFx1REU1NVxcdURFNTZcXHVERTU4XFx1REU1QVxcdURFNUNcXHVERTVFXFx1REU2MFxcdURFNjNcXHVERTY1XFx1REU2NlxcdURFNkJcXHVERTczXFx1REU3OFxcdURFN0RcXHVERTdGXFx1REU4QVxcdURFOUMtXFx1REVBMFxcdURFQTRcXHVERUFBXFx1REVCQy1cXHVERUVGXFx1REVGMi1cXHVERkZGXXxcXHVEODNDW1xcdURDMkMtXFx1REMyRlxcdURDOTQtXFx1REM5RlxcdURDQUZcXHVEQ0IwXFx1RENDMFxcdURDRDBcXHVEQ0Y2LVxcdURDRkZcXHVEREFFLVxcdURERTVcXHVERTAzLVxcdURFMEZcXHVERTNDLVxcdURFM0ZcXHVERTQ5LVxcdURFNEZcXHVERTUyLVxcdURFNUZcXHVERTY2LVxcdURFRkZdfFxcdUQ4M0RbXFx1REVEOC1cXHVERURGXFx1REVFRC1cXHVERUVGXFx1REVGRC1cXHVERUZGXFx1REY3NC1cXHVERjdGXFx1REZEOS1cXHVERkRGXFx1REZFQy1cXHVERkZGXXxcXHVEODNFW1xcdURDMEMtXFx1REMwRlxcdURDNDgtXFx1REM0RlxcdURDNUEtXFx1REM1RlxcdURDODgtXFx1REM4RlxcdURDQUVcXHVEQ0FGXFx1RENCMi1cXHVEQ0ZGXFx1REQ3OVxcdUREQ0NcXHVERTU0LVxcdURFNUZcXHVERTZFXFx1REU2RlxcdURFNzUtXFx1REU3N1xcdURFN0ItXFx1REU3RlxcdURFODctXFx1REU4RlxcdURFQTktXFx1REVBRlxcdURFQjctXFx1REVCRlxcdURFQzMtXFx1REVDRlxcdURFRDctXFx1REVGRlxcdURGOTNcXHVERkNCLVxcdURGRUZcXHVERkZBLVxcdURGRkZdfFxcdUQ4NjlbXFx1REVERS1cXHVERUZGXXxcXHVEODZEW1xcdURGMzUtXFx1REYzRl18XFx1RDg2RVtcXHVEQzFFXFx1REMxRl18XFx1RDg3M1tcXHVERUEyLVxcdURFQUZdfFxcdUQ4N0FbXFx1REZFMS1cXHVERkZGXXxcXHVEODdFW1xcdURFMUUtXFx1REZGRl18XFx1RDg4NFtcXHVERjRCLVxcdURGRkZdfFxcdURCNDBbXFx1REMwMC1cXHVEQ0ZGXFx1RERGMC1cXHVERkZGXSdcbiAgICB9LFxuICAgIHtcbiAgICAgICAgJ25hbWUnOiAnQ2MnLFxuICAgICAgICAnYWxpYXMnOiAnQ29udHJvbCcsXG4gICAgICAgICdibXAnOiAnXFwwLVxceDFGXFx4N0YtXFx4OUYnXG4gICAgfSxcbiAgICB7XG4gICAgICAgICduYW1lJzogJ0NmJyxcbiAgICAgICAgJ2FsaWFzJzogJ0Zvcm1hdCcsXG4gICAgICAgICdibXAnOiAnXFx4QURcXHUwNjAwLVxcdTA2MDVcXHUwNjFDXFx1MDZERFxcdTA3MEZcXHUwOEUyXFx1MTgwRVxcdTIwMEItXFx1MjAwRlxcdTIwMkEtXFx1MjAyRVxcdTIwNjAtXFx1MjA2NFxcdTIwNjYtXFx1MjA2RlxcdUZFRkZcXHVGRkY5LVxcdUZGRkInLFxuICAgICAgICAnYXN0cmFsJzogJ1xcdUQ4MDRbXFx1RENCRFxcdURDQ0RdfFxcdUQ4MERbXFx1REMzMC1cXHVEQzM4XXxcXHVEODJGW1xcdURDQTAtXFx1RENBM118XFx1RDgzNFtcXHVERDczLVxcdUREN0FdfFxcdURCNDBbXFx1REMwMVxcdURDMjAtXFx1REM3Rl0nXG4gICAgfSxcbiAgICB7XG4gICAgICAgICduYW1lJzogJ0NuJyxcbiAgICAgICAgJ2FsaWFzJzogJ1VuYXNzaWduZWQnLFxuICAgICAgICAnYm1wJzogJ1xcdTAzNzhcXHUwMzc5XFx1MDM4MC1cXHUwMzgzXFx1MDM4QlxcdTAzOERcXHUwM0EyXFx1MDUzMFxcdTA1NTdcXHUwNTU4XFx1MDU4QlxcdTA1OENcXHUwNTkwXFx1MDVDOC1cXHUwNUNGXFx1MDVFQi1cXHUwNUVFXFx1MDVGNS1cXHUwNUZGXFx1MDYxRFxcdTA3MEVcXHUwNzRCXFx1MDc0Q1xcdTA3QjItXFx1MDdCRlxcdTA3RkJcXHUwN0ZDXFx1MDgyRVxcdTA4MkZcXHUwODNGXFx1MDg1Q1xcdTA4NURcXHUwODVGXFx1MDg2Qi1cXHUwODlGXFx1MDhCNVxcdTA4QzgtXFx1MDhEMlxcdTA5ODRcXHUwOThEXFx1MDk4RVxcdTA5OTFcXHUwOTkyXFx1MDlBOVxcdTA5QjFcXHUwOUIzLVxcdTA5QjVcXHUwOUJBXFx1MDlCQlxcdTA5QzVcXHUwOUM2XFx1MDlDOVxcdTA5Q0FcXHUwOUNGLVxcdTA5RDZcXHUwOUQ4LVxcdTA5REJcXHUwOURFXFx1MDlFNFxcdTA5RTVcXHUwOUZGXFx1MEEwMFxcdTBBMDRcXHUwQTBCLVxcdTBBMEVcXHUwQTExXFx1MEExMlxcdTBBMjlcXHUwQTMxXFx1MEEzNFxcdTBBMzdcXHUwQTNBXFx1MEEzQlxcdTBBM0RcXHUwQTQzLVxcdTBBNDZcXHUwQTQ5XFx1MEE0QVxcdTBBNEUtXFx1MEE1MFxcdTBBNTItXFx1MEE1OFxcdTBBNURcXHUwQTVGLVxcdTBBNjVcXHUwQTc3LVxcdTBBODBcXHUwQTg0XFx1MEE4RVxcdTBBOTJcXHUwQUE5XFx1MEFCMVxcdTBBQjRcXHUwQUJBXFx1MEFCQlxcdTBBQzZcXHUwQUNBXFx1MEFDRVxcdTBBQ0ZcXHUwQUQxLVxcdTBBREZcXHUwQUU0XFx1MEFFNVxcdTBBRjItXFx1MEFGOFxcdTBCMDBcXHUwQjA0XFx1MEIwRFxcdTBCMEVcXHUwQjExXFx1MEIxMlxcdTBCMjlcXHUwQjMxXFx1MEIzNFxcdTBCM0FcXHUwQjNCXFx1MEI0NVxcdTBCNDZcXHUwQjQ5XFx1MEI0QVxcdTBCNEUtXFx1MEI1NFxcdTBCNTgtXFx1MEI1QlxcdTBCNUVcXHUwQjY0XFx1MEI2NVxcdTBCNzgtXFx1MEI4MVxcdTBCODRcXHUwQjhCLVxcdTBCOERcXHUwQjkxXFx1MEI5Ni1cXHUwQjk4XFx1MEI5QlxcdTBCOURcXHUwQkEwLVxcdTBCQTJcXHUwQkE1LVxcdTBCQTdcXHUwQkFCLVxcdTBCQURcXHUwQkJBLVxcdTBCQkRcXHUwQkMzLVxcdTBCQzVcXHUwQkM5XFx1MEJDRVxcdTBCQ0ZcXHUwQkQxLVxcdTBCRDZcXHUwQkQ4LVxcdTBCRTVcXHUwQkZCLVxcdTBCRkZcXHUwQzBEXFx1MEMxMVxcdTBDMjlcXHUwQzNBLVxcdTBDM0NcXHUwQzQ1XFx1MEM0OVxcdTBDNEUtXFx1MEM1NFxcdTBDNTdcXHUwQzVCLVxcdTBDNUZcXHUwQzY0XFx1MEM2NVxcdTBDNzAtXFx1MEM3NlxcdTBDOERcXHUwQzkxXFx1MENBOVxcdTBDQjRcXHUwQ0JBXFx1MENCQlxcdTBDQzVcXHUwQ0M5XFx1MENDRS1cXHUwQ0Q0XFx1MENENy1cXHUwQ0REXFx1MENERlxcdTBDRTRcXHUwQ0U1XFx1MENGMFxcdTBDRjMtXFx1MENGRlxcdTBEMERcXHUwRDExXFx1MEQ0NVxcdTBENDlcXHUwRDUwLVxcdTBENTNcXHUwRDY0XFx1MEQ2NVxcdTBEODBcXHUwRDg0XFx1MEQ5Ny1cXHUwRDk5XFx1MERCMlxcdTBEQkNcXHUwREJFXFx1MERCRlxcdTBEQzctXFx1MERDOVxcdTBEQ0ItXFx1MERDRVxcdTBERDVcXHUwREQ3XFx1MERFMC1cXHUwREU1XFx1MERGMFxcdTBERjFcXHUwREY1LVxcdTBFMDBcXHUwRTNCLVxcdTBFM0VcXHUwRTVDLVxcdTBFODBcXHUwRTgzXFx1MEU4NVxcdTBFOEJcXHUwRUE0XFx1MEVBNlxcdTBFQkVcXHUwRUJGXFx1MEVDNVxcdTBFQzdcXHUwRUNFXFx1MEVDRlxcdTBFREFcXHUwRURCXFx1MEVFMC1cXHUwRUZGXFx1MEY0OFxcdTBGNkQtXFx1MEY3MFxcdTBGOThcXHUwRkJEXFx1MEZDRFxcdTBGREItXFx1MEZGRlxcdTEwQzZcXHUxMEM4LVxcdTEwQ0NcXHUxMENFXFx1MTBDRlxcdTEyNDlcXHUxMjRFXFx1MTI0RlxcdTEyNTdcXHUxMjU5XFx1MTI1RVxcdTEyNUZcXHUxMjg5XFx1MTI4RVxcdTEyOEZcXHUxMkIxXFx1MTJCNlxcdTEyQjdcXHUxMkJGXFx1MTJDMVxcdTEyQzZcXHUxMkM3XFx1MTJEN1xcdTEzMTFcXHUxMzE2XFx1MTMxN1xcdTEzNUJcXHUxMzVDXFx1MTM3RC1cXHUxMzdGXFx1MTM5QS1cXHUxMzlGXFx1MTNGNlxcdTEzRjdcXHUxM0ZFXFx1MTNGRlxcdTE2OUQtXFx1MTY5RlxcdTE2RjktXFx1MTZGRlxcdTE3MERcXHUxNzE1LVxcdTE3MUZcXHUxNzM3LVxcdTE3M0ZcXHUxNzU0LVxcdTE3NUZcXHUxNzZEXFx1MTc3MVxcdTE3NzQtXFx1MTc3RlxcdTE3REVcXHUxN0RGXFx1MTdFQS1cXHUxN0VGXFx1MTdGQS1cXHUxN0ZGXFx1MTgwRlxcdTE4MUEtXFx1MTgxRlxcdTE4NzktXFx1MTg3RlxcdTE4QUItXFx1MThBRlxcdTE4RjYtXFx1MThGRlxcdTE5MUZcXHUxOTJDLVxcdTE5MkZcXHUxOTNDLVxcdTE5M0ZcXHUxOTQxLVxcdTE5NDNcXHUxOTZFXFx1MTk2RlxcdTE5NzUtXFx1MTk3RlxcdTE5QUMtXFx1MTlBRlxcdTE5Q0EtXFx1MTlDRlxcdTE5REItXFx1MTlERFxcdTFBMUNcXHUxQTFEXFx1MUE1RlxcdTFBN0RcXHUxQTdFXFx1MUE4QS1cXHUxQThGXFx1MUE5QS1cXHUxQTlGXFx1MUFBRVxcdTFBQUZcXHUxQUMxLVxcdTFBRkZcXHUxQjRDLVxcdTFCNEZcXHUxQjdELVxcdTFCN0ZcXHUxQkY0LVxcdTFCRkJcXHUxQzM4LVxcdTFDM0FcXHUxQzRBLVxcdTFDNENcXHUxQzg5LVxcdTFDOEZcXHUxQ0JCXFx1MUNCQ1xcdTFDQzgtXFx1MUNDRlxcdTFDRkItXFx1MUNGRlxcdTFERkFcXHUxRjE2XFx1MUYxN1xcdTFGMUVcXHUxRjFGXFx1MUY0NlxcdTFGNDdcXHUxRjRFXFx1MUY0RlxcdTFGNThcXHUxRjVBXFx1MUY1Q1xcdTFGNUVcXHUxRjdFXFx1MUY3RlxcdTFGQjVcXHUxRkM1XFx1MUZENFxcdTFGRDVcXHUxRkRDXFx1MUZGMFxcdTFGRjFcXHUxRkY1XFx1MUZGRlxcdTIwNjVcXHUyMDcyXFx1MjA3M1xcdTIwOEZcXHUyMDlELVxcdTIwOUZcXHUyMEMwLVxcdTIwQ0ZcXHUyMEYxLVxcdTIwRkZcXHUyMThDLVxcdTIxOEZcXHUyNDI3LVxcdTI0M0ZcXHUyNDRCLVxcdTI0NUZcXHUyQjc0XFx1MkI3NVxcdTJCOTZcXHUyQzJGXFx1MkM1RlxcdTJDRjQtXFx1MkNGOFxcdTJEMjZcXHUyRDI4LVxcdTJEMkNcXHUyRDJFXFx1MkQyRlxcdTJENjgtXFx1MkQ2RVxcdTJENzEtXFx1MkQ3RVxcdTJEOTctXFx1MkQ5RlxcdTJEQTdcXHUyREFGXFx1MkRCN1xcdTJEQkZcXHUyREM3XFx1MkRDRlxcdTJERDdcXHUyRERGXFx1MkU1My1cXHUyRTdGXFx1MkU5QVxcdTJFRjQtXFx1MkVGRlxcdTJGRDYtXFx1MkZFRlxcdTJGRkMtXFx1MkZGRlxcdTMwNDBcXHUzMDk3XFx1MzA5OFxcdTMxMDAtXFx1MzEwNFxcdTMxMzBcXHUzMThGXFx1MzFFNC1cXHUzMUVGXFx1MzIxRlxcdTlGRkQtXFx1OUZGRlxcdUE0OEQtXFx1QTQ4RlxcdUE0QzctXFx1QTRDRlxcdUE2MkMtXFx1QTYzRlxcdUE2RjgtXFx1QTZGRlxcdUE3QzBcXHVBN0MxXFx1QTdDQi1cXHVBN0Y0XFx1QTgyRC1cXHVBODJGXFx1QTgzQS1cXHVBODNGXFx1QTg3OC1cXHVBODdGXFx1QThDNi1cXHVBOENEXFx1QThEQS1cXHVBOERGXFx1QTk1NC1cXHVBOTVFXFx1QTk3RC1cXHVBOTdGXFx1QTlDRVxcdUE5REEtXFx1QTlERFxcdUE5RkZcXHVBQTM3LVxcdUFBM0ZcXHVBQTRFXFx1QUE0RlxcdUFBNUFcXHVBQTVCXFx1QUFDMy1cXHVBQURBXFx1QUFGNy1cXHVBQjAwXFx1QUIwN1xcdUFCMDhcXHVBQjBGXFx1QUIxMFxcdUFCMTctXFx1QUIxRlxcdUFCMjdcXHVBQjJGXFx1QUI2Qy1cXHVBQjZGXFx1QUJFRVxcdUFCRUZcXHVBQkZBLVxcdUFCRkZcXHVEN0E0LVxcdUQ3QUZcXHVEN0M3LVxcdUQ3Q0FcXHVEN0ZDLVxcdUQ3RkZcXHVGQTZFXFx1RkE2RlxcdUZBREEtXFx1RkFGRlxcdUZCMDctXFx1RkIxMlxcdUZCMTgtXFx1RkIxQ1xcdUZCMzdcXHVGQjNEXFx1RkIzRlxcdUZCNDJcXHVGQjQ1XFx1RkJDMi1cXHVGQkQyXFx1RkQ0MC1cXHVGRDRGXFx1RkQ5MFxcdUZEOTFcXHVGREM4LVxcdUZERUZcXHVGREZFXFx1RkRGRlxcdUZFMUEtXFx1RkUxRlxcdUZFNTNcXHVGRTY3XFx1RkU2Qy1cXHVGRTZGXFx1RkU3NVxcdUZFRkRcXHVGRUZFXFx1RkYwMFxcdUZGQkYtXFx1RkZDMVxcdUZGQzhcXHVGRkM5XFx1RkZEMFxcdUZGRDFcXHVGRkQ4XFx1RkZEOVxcdUZGREQtXFx1RkZERlxcdUZGRTdcXHVGRkVGLVxcdUZGRjhcXHVGRkZFXFx1RkZGRicsXG4gICAgICAgICdhc3RyYWwnOiAnXFx1RDgwMFtcXHVEQzBDXFx1REMyN1xcdURDM0JcXHVEQzNFXFx1REM0RVxcdURDNEZcXHVEQzVFLVxcdURDN0ZcXHVEQ0ZCLVxcdURDRkZcXHVERDAzLVxcdUREMDZcXHVERDM0LVxcdUREMzZcXHVERDhGXFx1REQ5RC1cXHVERDlGXFx1RERBMS1cXHVERENGXFx1RERGRS1cXHVERTdGXFx1REU5RC1cXHVERTlGXFx1REVEMS1cXHVERURGXFx1REVGQy1cXHVERUZGXFx1REYyNC1cXHVERjJDXFx1REY0Qi1cXHVERjRGXFx1REY3Qi1cXHVERjdGXFx1REY5RVxcdURGQzQtXFx1REZDN1xcdURGRDYtXFx1REZGRl18XFx1RDgwMVtcXHVEQzlFXFx1REM5RlxcdURDQUEtXFx1RENBRlxcdURDRDQtXFx1RENEN1xcdURDRkMtXFx1RENGRlxcdUREMjgtXFx1REQyRlxcdURENjQtXFx1REQ2RVxcdURENzAtXFx1RERGRlxcdURGMzctXFx1REYzRlxcdURGNTYtXFx1REY1RlxcdURGNjgtXFx1REZGRl18XFx1RDgwMltcXHVEQzA2XFx1REMwN1xcdURDMDlcXHVEQzM2XFx1REMzOS1cXHVEQzNCXFx1REMzRFxcdURDM0VcXHVEQzU2XFx1REM5Ri1cXHVEQ0E2XFx1RENCMC1cXHVEQ0RGXFx1RENGM1xcdURDRjYtXFx1RENGQVxcdUREMUMtXFx1REQxRVxcdUREM0EtXFx1REQzRVxcdURENDAtXFx1REQ3RlxcdUREQjgtXFx1RERCQlxcdURERDBcXHVEREQxXFx1REUwNFxcdURFMDctXFx1REUwQlxcdURFMTRcXHVERTE4XFx1REUzNlxcdURFMzdcXHVERTNCLVxcdURFM0VcXHVERTQ5LVxcdURFNEZcXHVERTU5LVxcdURFNUZcXHVERUEwLVxcdURFQkZcXHVERUU3LVxcdURFRUFcXHVERUY3LVxcdURFRkZcXHVERjM2LVxcdURGMzhcXHVERjU2XFx1REY1N1xcdURGNzMtXFx1REY3N1xcdURGOTItXFx1REY5OFxcdURGOUQtXFx1REZBOFxcdURGQjAtXFx1REZGRl18XFx1RDgwM1tcXHVEQzQ5LVxcdURDN0ZcXHVEQ0IzLVxcdURDQkZcXHVEQ0YzLVxcdURDRjlcXHVERDI4LVxcdUREMkZcXHVERDNBLVxcdURFNUZcXHVERTdGXFx1REVBQVxcdURFQUVcXHVERUFGXFx1REVCMi1cXHVERUZGXFx1REYyOC1cXHVERjJGXFx1REY1QS1cXHVERkFGXFx1REZDQy1cXHVERkRGXFx1REZGNy1cXHVERkZGXXxcXHVEODA0W1xcdURDNEUtXFx1REM1MVxcdURDNzAtXFx1REM3RVxcdURDQzItXFx1RENDQ1xcdURDQ0VcXHVEQ0NGXFx1RENFOS1cXHVEQ0VGXFx1RENGQS1cXHVEQ0ZGXFx1REQzNVxcdURENDgtXFx1REQ0RlxcdURENzctXFx1REQ3RlxcdURERTBcXHVEREY1LVxcdURERkZcXHVERTEyXFx1REUzRi1cXHVERTdGXFx1REU4N1xcdURFODlcXHVERThFXFx1REU5RVxcdURFQUEtXFx1REVBRlxcdURFRUItXFx1REVFRlxcdURFRkEtXFx1REVGRlxcdURGMDRcXHVERjBEXFx1REYwRVxcdURGMTFcXHVERjEyXFx1REYyOVxcdURGMzFcXHVERjM0XFx1REYzQVxcdURGNDVcXHVERjQ2XFx1REY0OVxcdURGNEFcXHVERjRFXFx1REY0RlxcdURGNTEtXFx1REY1NlxcdURGNTgtXFx1REY1Q1xcdURGNjRcXHVERjY1XFx1REY2RC1cXHVERjZGXFx1REY3NS1cXHVERkZGXXxcXHVEODA1W1xcdURDNUNcXHVEQzYyLVxcdURDN0ZcXHVEQ0M4LVxcdURDQ0ZcXHVEQ0RBLVxcdUREN0ZcXHVEREI2XFx1RERCN1xcdUREREUtXFx1RERGRlxcdURFNDUtXFx1REU0RlxcdURFNUEtXFx1REU1RlxcdURFNkQtXFx1REU3RlxcdURFQjktXFx1REVCRlxcdURFQ0EtXFx1REVGRlxcdURGMUJcXHVERjFDXFx1REYyQy1cXHVERjJGXFx1REY0MC1cXHVERkZGXXxcXHVEODA2W1xcdURDM0MtXFx1REM5RlxcdURDRjMtXFx1RENGRVxcdUREMDdcXHVERDA4XFx1REQwQVxcdUREMEJcXHVERDE0XFx1REQxN1xcdUREMzZcXHVERDM5XFx1REQzQVxcdURENDctXFx1REQ0RlxcdURENUEtXFx1REQ5RlxcdUREQThcXHVEREE5XFx1REREOFxcdURERDlcXHVEREU1LVxcdURERkZcXHVERTQ4LVxcdURFNEZcXHVERUEzLVxcdURFQkZcXHVERUY5LVxcdURGRkZdfFxcdUQ4MDdbXFx1REMwOVxcdURDMzdcXHVEQzQ2LVxcdURDNEZcXHVEQzZELVxcdURDNkZcXHVEQzkwXFx1REM5MVxcdURDQThcXHVEQ0I3LVxcdURDRkZcXHVERDA3XFx1REQwQVxcdUREMzctXFx1REQzOVxcdUREM0JcXHVERDNFXFx1REQ0OC1cXHVERDRGXFx1REQ1QS1cXHVERDVGXFx1REQ2NlxcdURENjlcXHVERDhGXFx1REQ5MlxcdUREOTktXFx1REQ5RlxcdUREQUEtXFx1REVERlxcdURFRjktXFx1REZBRlxcdURGQjEtXFx1REZCRlxcdURGRjItXFx1REZGRV18XFx1RDgwOFtcXHVERjlBLVxcdURGRkZdfFxcdUQ4MDlbXFx1REM2RlxcdURDNzUtXFx1REM3RlxcdURENDQtXFx1REZGRl18W1xcdUQ4MEFcXHVEODBCXFx1RDgwRS1cXHVEODEwXFx1RDgxMi1cXHVEODE5XFx1RDgyNC1cXHVEODJCXFx1RDgyRFxcdUQ4MkVcXHVEODMwLVxcdUQ4MzNcXHVEODM3XFx1RDgzOVxcdUQ4M0ZcXHVEODdCLVxcdUQ4N0RcXHVEODdGXFx1RDg4NS1cXHVEQjNGXFx1REI0MS1cXHVEQjdGXVtcXHVEQzAwLVxcdURGRkZdfFxcdUQ4MERbXFx1REMyRlxcdURDMzktXFx1REZGRl18XFx1RDgxMVtcXHVERTQ3LVxcdURGRkZdfFxcdUQ4MUFbXFx1REUzOS1cXHVERTNGXFx1REU1RlxcdURFNkEtXFx1REU2RFxcdURFNzAtXFx1REVDRlxcdURFRUVcXHVERUVGXFx1REVGNi1cXHVERUZGXFx1REY0Ni1cXHVERjRGXFx1REY1QVxcdURGNjJcXHVERjc4LVxcdURGN0NcXHVERjkwLVxcdURGRkZdfFxcdUQ4MUJbXFx1REMwMC1cXHVERTNGXFx1REU5Qi1cXHVERUZGXFx1REY0Qi1cXHVERjRFXFx1REY4OC1cXHVERjhFXFx1REZBMC1cXHVERkRGXFx1REZFNS1cXHVERkVGXFx1REZGMi1cXHVERkZGXXxcXHVEODIxW1xcdURGRjgtXFx1REZGRl18XFx1RDgyM1tcXHVEQ0Q2LVxcdURDRkZcXHVERDA5LVxcdURGRkZdfFxcdUQ4MkNbXFx1REQxRi1cXHVERDRGXFx1REQ1My1cXHVERDYzXFx1REQ2OC1cXHVERDZGXFx1REVGQy1cXHVERkZGXXxcXHVEODJGW1xcdURDNkItXFx1REM2RlxcdURDN0QtXFx1REM3RlxcdURDODktXFx1REM4RlxcdURDOUFcXHVEQzlCXFx1RENBNC1cXHVERkZGXXxcXHVEODM0W1xcdURDRjYtXFx1RENGRlxcdUREMjdcXHVERDI4XFx1RERFOS1cXHVEREZGXFx1REU0Ni1cXHVERURGXFx1REVGNC1cXHVERUZGXFx1REY1Ny1cXHVERjVGXFx1REY3OS1cXHVERkZGXXxcXHVEODM1W1xcdURDNTVcXHVEQzlEXFx1RENBMFxcdURDQTFcXHVEQ0EzXFx1RENBNFxcdURDQTdcXHVEQ0E4XFx1RENBRFxcdURDQkFcXHVEQ0JDXFx1RENDNFxcdUREMDZcXHVERDBCXFx1REQwQ1xcdUREMTVcXHVERDFEXFx1REQzQVxcdUREM0ZcXHVERDQ1XFx1REQ0Ny1cXHVERDQ5XFx1REQ1MVxcdURFQTZcXHVERUE3XFx1REZDQ1xcdURGQ0RdfFxcdUQ4MzZbXFx1REU4Qy1cXHVERTlBXFx1REVBMFxcdURFQjAtXFx1REZGRl18XFx1RDgzOFtcXHVEQzA3XFx1REMxOVxcdURDMUFcXHVEQzIyXFx1REMyNVxcdURDMkItXFx1RENGRlxcdUREMkQtXFx1REQyRlxcdUREM0VcXHVERDNGXFx1REQ0QS1cXHVERDREXFx1REQ1MC1cXHVERUJGXFx1REVGQS1cXHVERUZFXFx1REYwMC1cXHVERkZGXXxcXHVEODNBW1xcdURDQzVcXHVEQ0M2XFx1RENENy1cXHVEQ0ZGXFx1REQ0Qy1cXHVERDRGXFx1REQ1QS1cXHVERDVEXFx1REQ2MC1cXHVERkZGXXxcXHVEODNCW1xcdURDMDAtXFx1REM3MFxcdURDQjUtXFx1REQwMFxcdUREM0UtXFx1RERGRlxcdURFMDRcXHVERTIwXFx1REUyM1xcdURFMjVcXHVERTI2XFx1REUyOFxcdURFMzNcXHVERTM4XFx1REUzQVxcdURFM0MtXFx1REU0MVxcdURFNDMtXFx1REU0NlxcdURFNDhcXHVERTRBXFx1REU0Q1xcdURFNTBcXHVERTUzXFx1REU1NVxcdURFNTZcXHVERTU4XFx1REU1QVxcdURFNUNcXHVERTVFXFx1REU2MFxcdURFNjNcXHVERTY1XFx1REU2NlxcdURFNkJcXHVERTczXFx1REU3OFxcdURFN0RcXHVERTdGXFx1REU4QVxcdURFOUMtXFx1REVBMFxcdURFQTRcXHVERUFBXFx1REVCQy1cXHVERUVGXFx1REVGMi1cXHVERkZGXXxcXHVEODNDW1xcdURDMkMtXFx1REMyRlxcdURDOTQtXFx1REM5RlxcdURDQUZcXHVEQ0IwXFx1RENDMFxcdURDRDBcXHVEQ0Y2LVxcdURDRkZcXHVEREFFLVxcdURERTVcXHVERTAzLVxcdURFMEZcXHVERTNDLVxcdURFM0ZcXHVERTQ5LVxcdURFNEZcXHVERTUyLVxcdURFNUZcXHVERTY2LVxcdURFRkZdfFxcdUQ4M0RbXFx1REVEOC1cXHVERURGXFx1REVFRC1cXHVERUVGXFx1REVGRC1cXHVERUZGXFx1REY3NC1cXHVERjdGXFx1REZEOS1cXHVERkRGXFx1REZFQy1cXHVERkZGXXxcXHVEODNFW1xcdURDMEMtXFx1REMwRlxcdURDNDgtXFx1REM0RlxcdURDNUEtXFx1REM1RlxcdURDODgtXFx1REM4RlxcdURDQUVcXHVEQ0FGXFx1RENCMi1cXHVEQ0ZGXFx1REQ3OVxcdUREQ0NcXHVERTU0LVxcdURFNUZcXHVERTZFXFx1REU2RlxcdURFNzUtXFx1REU3N1xcdURFN0ItXFx1REU3RlxcdURFODctXFx1REU4RlxcdURFQTktXFx1REVBRlxcdURFQjctXFx1REVCRlxcdURFQzMtXFx1REVDRlxcdURFRDctXFx1REVGRlxcdURGOTNcXHVERkNCLVxcdURGRUZcXHVERkZBLVxcdURGRkZdfFxcdUQ4NjlbXFx1REVERS1cXHVERUZGXXxcXHVEODZEW1xcdURGMzUtXFx1REYzRl18XFx1RDg2RVtcXHVEQzFFXFx1REMxRl18XFx1RDg3M1tcXHVERUEyLVxcdURFQUZdfFxcdUQ4N0FbXFx1REZFMS1cXHVERkZGXXxcXHVEODdFW1xcdURFMUUtXFx1REZGRl18XFx1RDg4NFtcXHVERjRCLVxcdURGRkZdfFxcdURCNDBbXFx1REMwMFxcdURDMDItXFx1REMxRlxcdURDODAtXFx1RENGRlxcdURERjAtXFx1REZGRl18W1xcdURCQkZcXHVEQkZGXVtcXHVERkZFXFx1REZGRl0nXG4gICAgfSxcbiAgICB7XG4gICAgICAgICduYW1lJzogJ0NvJyxcbiAgICAgICAgJ2FsaWFzJzogJ1ByaXZhdGVfVXNlJyxcbiAgICAgICAgJ2JtcCc6ICdcXHVFMDAwLVxcdUY4RkYnLFxuICAgICAgICAnYXN0cmFsJzogJ1tcXHVEQjgwLVxcdURCQkVcXHVEQkMwLVxcdURCRkVdW1xcdURDMDAtXFx1REZGRl18W1xcdURCQkZcXHVEQkZGXVtcXHVEQzAwLVxcdURGRkRdJ1xuICAgIH0sXG4gICAge1xuICAgICAgICAnbmFtZSc6ICdDcycsXG4gICAgICAgICdhbGlhcyc6ICdTdXJyb2dhdGUnLFxuICAgICAgICAnYm1wJzogJ1xcdUQ4MDAtXFx1REZGRidcbiAgICB9LFxuICAgIHtcbiAgICAgICAgJ25hbWUnOiAnTCcsXG4gICAgICAgICdhbGlhcyc6ICdMZXR0ZXInLFxuICAgICAgICAnYm1wJzogJ0EtWmEtelxceEFBXFx4QjVcXHhCQVxceEMwLVxceEQ2XFx4RDgtXFx4RjZcXHhGOC1cXHUwMkMxXFx1MDJDNi1cXHUwMkQxXFx1MDJFMC1cXHUwMkU0XFx1MDJFQ1xcdTAyRUVcXHUwMzcwLVxcdTAzNzRcXHUwMzc2XFx1MDM3N1xcdTAzN0EtXFx1MDM3RFxcdTAzN0ZcXHUwMzg2XFx1MDM4OC1cXHUwMzhBXFx1MDM4Q1xcdTAzOEUtXFx1MDNBMVxcdTAzQTMtXFx1MDNGNVxcdTAzRjctXFx1MDQ4MVxcdTA0OEEtXFx1MDUyRlxcdTA1MzEtXFx1MDU1NlxcdTA1NTlcXHUwNTYwLVxcdTA1ODhcXHUwNUQwLVxcdTA1RUFcXHUwNUVGLVxcdTA1RjJcXHUwNjIwLVxcdTA2NEFcXHUwNjZFXFx1MDY2RlxcdTA2NzEtXFx1MDZEM1xcdTA2RDVcXHUwNkU1XFx1MDZFNlxcdTA2RUVcXHUwNkVGXFx1MDZGQS1cXHUwNkZDXFx1MDZGRlxcdTA3MTBcXHUwNzEyLVxcdTA3MkZcXHUwNzRELVxcdTA3QTVcXHUwN0IxXFx1MDdDQS1cXHUwN0VBXFx1MDdGNFxcdTA3RjVcXHUwN0ZBXFx1MDgwMC1cXHUwODE1XFx1MDgxQVxcdTA4MjRcXHUwODI4XFx1MDg0MC1cXHUwODU4XFx1MDg2MC1cXHUwODZBXFx1MDhBMC1cXHUwOEI0XFx1MDhCNi1cXHUwOEM3XFx1MDkwNC1cXHUwOTM5XFx1MDkzRFxcdTA5NTBcXHUwOTU4LVxcdTA5NjFcXHUwOTcxLVxcdTA5ODBcXHUwOTg1LVxcdTA5OENcXHUwOThGXFx1MDk5MFxcdTA5OTMtXFx1MDlBOFxcdTA5QUEtXFx1MDlCMFxcdTA5QjJcXHUwOUI2LVxcdTA5QjlcXHUwOUJEXFx1MDlDRVxcdTA5RENcXHUwOUREXFx1MDlERi1cXHUwOUUxXFx1MDlGMFxcdTA5RjFcXHUwOUZDXFx1MEEwNS1cXHUwQTBBXFx1MEEwRlxcdTBBMTBcXHUwQTEzLVxcdTBBMjhcXHUwQTJBLVxcdTBBMzBcXHUwQTMyXFx1MEEzM1xcdTBBMzVcXHUwQTM2XFx1MEEzOFxcdTBBMzlcXHUwQTU5LVxcdTBBNUNcXHUwQTVFXFx1MEE3Mi1cXHUwQTc0XFx1MEE4NS1cXHUwQThEXFx1MEE4Ri1cXHUwQTkxXFx1MEE5My1cXHUwQUE4XFx1MEFBQS1cXHUwQUIwXFx1MEFCMlxcdTBBQjNcXHUwQUI1LVxcdTBBQjlcXHUwQUJEXFx1MEFEMFxcdTBBRTBcXHUwQUUxXFx1MEFGOVxcdTBCMDUtXFx1MEIwQ1xcdTBCMEZcXHUwQjEwXFx1MEIxMy1cXHUwQjI4XFx1MEIyQS1cXHUwQjMwXFx1MEIzMlxcdTBCMzNcXHUwQjM1LVxcdTBCMzlcXHUwQjNEXFx1MEI1Q1xcdTBCNURcXHUwQjVGLVxcdTBCNjFcXHUwQjcxXFx1MEI4M1xcdTBCODUtXFx1MEI4QVxcdTBCOEUtXFx1MEI5MFxcdTBCOTItXFx1MEI5NVxcdTBCOTlcXHUwQjlBXFx1MEI5Q1xcdTBCOUVcXHUwQjlGXFx1MEJBM1xcdTBCQTRcXHUwQkE4LVxcdTBCQUFcXHUwQkFFLVxcdTBCQjlcXHUwQkQwXFx1MEMwNS1cXHUwQzBDXFx1MEMwRS1cXHUwQzEwXFx1MEMxMi1cXHUwQzI4XFx1MEMyQS1cXHUwQzM5XFx1MEMzRFxcdTBDNTgtXFx1MEM1QVxcdTBDNjBcXHUwQzYxXFx1MEM4MFxcdTBDODUtXFx1MEM4Q1xcdTBDOEUtXFx1MEM5MFxcdTBDOTItXFx1MENBOFxcdTBDQUEtXFx1MENCM1xcdTBDQjUtXFx1MENCOVxcdTBDQkRcXHUwQ0RFXFx1MENFMFxcdTBDRTFcXHUwQ0YxXFx1MENGMlxcdTBEMDQtXFx1MEQwQ1xcdTBEMEUtXFx1MEQxMFxcdTBEMTItXFx1MEQzQVxcdTBEM0RcXHUwRDRFXFx1MEQ1NC1cXHUwRDU2XFx1MEQ1Ri1cXHUwRDYxXFx1MEQ3QS1cXHUwRDdGXFx1MEQ4NS1cXHUwRDk2XFx1MEQ5QS1cXHUwREIxXFx1MERCMy1cXHUwREJCXFx1MERCRFxcdTBEQzAtXFx1MERDNlxcdTBFMDEtXFx1MEUzMFxcdTBFMzJcXHUwRTMzXFx1MEU0MC1cXHUwRTQ2XFx1MEU4MVxcdTBFODJcXHUwRTg0XFx1MEU4Ni1cXHUwRThBXFx1MEU4Qy1cXHUwRUEzXFx1MEVBNVxcdTBFQTctXFx1MEVCMFxcdTBFQjJcXHUwRUIzXFx1MEVCRFxcdTBFQzAtXFx1MEVDNFxcdTBFQzZcXHUwRURDLVxcdTBFREZcXHUwRjAwXFx1MEY0MC1cXHUwRjQ3XFx1MEY0OS1cXHUwRjZDXFx1MEY4OC1cXHUwRjhDXFx1MTAwMC1cXHUxMDJBXFx1MTAzRlxcdTEwNTAtXFx1MTA1NVxcdTEwNUEtXFx1MTA1RFxcdTEwNjFcXHUxMDY1XFx1MTA2NlxcdTEwNkUtXFx1MTA3MFxcdTEwNzUtXFx1MTA4MVxcdTEwOEVcXHUxMEEwLVxcdTEwQzVcXHUxMEM3XFx1MTBDRFxcdTEwRDAtXFx1MTBGQVxcdTEwRkMtXFx1MTI0OFxcdTEyNEEtXFx1MTI0RFxcdTEyNTAtXFx1MTI1NlxcdTEyNThcXHUxMjVBLVxcdTEyNURcXHUxMjYwLVxcdTEyODhcXHUxMjhBLVxcdTEyOERcXHUxMjkwLVxcdTEyQjBcXHUxMkIyLVxcdTEyQjVcXHUxMkI4LVxcdTEyQkVcXHUxMkMwXFx1MTJDMi1cXHUxMkM1XFx1MTJDOC1cXHUxMkQ2XFx1MTJEOC1cXHUxMzEwXFx1MTMxMi1cXHUxMzE1XFx1MTMxOC1cXHUxMzVBXFx1MTM4MC1cXHUxMzhGXFx1MTNBMC1cXHUxM0Y1XFx1MTNGOC1cXHUxM0ZEXFx1MTQwMS1cXHUxNjZDXFx1MTY2Ri1cXHUxNjdGXFx1MTY4MS1cXHUxNjlBXFx1MTZBMC1cXHUxNkVBXFx1MTZGMS1cXHUxNkY4XFx1MTcwMC1cXHUxNzBDXFx1MTcwRS1cXHUxNzExXFx1MTcyMC1cXHUxNzMxXFx1MTc0MC1cXHUxNzUxXFx1MTc2MC1cXHUxNzZDXFx1MTc2RS1cXHUxNzcwXFx1MTc4MC1cXHUxN0IzXFx1MTdEN1xcdTE3RENcXHUxODIwLVxcdTE4NzhcXHUxODgwLVxcdTE4ODRcXHUxODg3LVxcdTE4QThcXHUxOEFBXFx1MThCMC1cXHUxOEY1XFx1MTkwMC1cXHUxOTFFXFx1MTk1MC1cXHUxOTZEXFx1MTk3MC1cXHUxOTc0XFx1MTk4MC1cXHUxOUFCXFx1MTlCMC1cXHUxOUM5XFx1MUEwMC1cXHUxQTE2XFx1MUEyMC1cXHUxQTU0XFx1MUFBN1xcdTFCMDUtXFx1MUIzM1xcdTFCNDUtXFx1MUI0QlxcdTFCODMtXFx1MUJBMFxcdTFCQUVcXHUxQkFGXFx1MUJCQS1cXHUxQkU1XFx1MUMwMC1cXHUxQzIzXFx1MUM0RC1cXHUxQzRGXFx1MUM1QS1cXHUxQzdEXFx1MUM4MC1cXHUxQzg4XFx1MUM5MC1cXHUxQ0JBXFx1MUNCRC1cXHUxQ0JGXFx1MUNFOS1cXHUxQ0VDXFx1MUNFRS1cXHUxQ0YzXFx1MUNGNVxcdTFDRjZcXHUxQ0ZBXFx1MUQwMC1cXHUxREJGXFx1MUUwMC1cXHUxRjE1XFx1MUYxOC1cXHUxRjFEXFx1MUYyMC1cXHUxRjQ1XFx1MUY0OC1cXHUxRjREXFx1MUY1MC1cXHUxRjU3XFx1MUY1OVxcdTFGNUJcXHUxRjVEXFx1MUY1Ri1cXHUxRjdEXFx1MUY4MC1cXHUxRkI0XFx1MUZCNi1cXHUxRkJDXFx1MUZCRVxcdTFGQzItXFx1MUZDNFxcdTFGQzYtXFx1MUZDQ1xcdTFGRDAtXFx1MUZEM1xcdTFGRDYtXFx1MUZEQlxcdTFGRTAtXFx1MUZFQ1xcdTFGRjItXFx1MUZGNFxcdTFGRjYtXFx1MUZGQ1xcdTIwNzFcXHUyMDdGXFx1MjA5MC1cXHUyMDlDXFx1MjEwMlxcdTIxMDdcXHUyMTBBLVxcdTIxMTNcXHUyMTE1XFx1MjExOS1cXHUyMTFEXFx1MjEyNFxcdTIxMjZcXHUyMTI4XFx1MjEyQS1cXHUyMTJEXFx1MjEyRi1cXHUyMTM5XFx1MjEzQy1cXHUyMTNGXFx1MjE0NS1cXHUyMTQ5XFx1MjE0RVxcdTIxODNcXHUyMTg0XFx1MkMwMC1cXHUyQzJFXFx1MkMzMC1cXHUyQzVFXFx1MkM2MC1cXHUyQ0U0XFx1MkNFQi1cXHUyQ0VFXFx1MkNGMlxcdTJDRjNcXHUyRDAwLVxcdTJEMjVcXHUyRDI3XFx1MkQyRFxcdTJEMzAtXFx1MkQ2N1xcdTJENkZcXHUyRDgwLVxcdTJEOTZcXHUyREEwLVxcdTJEQTZcXHUyREE4LVxcdTJEQUVcXHUyREIwLVxcdTJEQjZcXHUyREI4LVxcdTJEQkVcXHUyREMwLVxcdTJEQzZcXHUyREM4LVxcdTJEQ0VcXHUyREQwLVxcdTJERDZcXHUyREQ4LVxcdTJEREVcXHUyRTJGXFx1MzAwNVxcdTMwMDZcXHUzMDMxLVxcdTMwMzVcXHUzMDNCXFx1MzAzQ1xcdTMwNDEtXFx1MzA5NlxcdTMwOUQtXFx1MzA5RlxcdTMwQTEtXFx1MzBGQVxcdTMwRkMtXFx1MzBGRlxcdTMxMDUtXFx1MzEyRlxcdTMxMzEtXFx1MzE4RVxcdTMxQTAtXFx1MzFCRlxcdTMxRjAtXFx1MzFGRlxcdTM0MDAtXFx1NERCRlxcdTRFMDAtXFx1OUZGQ1xcdUEwMDAtXFx1QTQ4Q1xcdUE0RDAtXFx1QTRGRFxcdUE1MDAtXFx1QTYwQ1xcdUE2MTAtXFx1QTYxRlxcdUE2MkFcXHVBNjJCXFx1QTY0MC1cXHVBNjZFXFx1QTY3Ri1cXHVBNjlEXFx1QTZBMC1cXHVBNkU1XFx1QTcxNy1cXHVBNzFGXFx1QTcyMi1cXHVBNzg4XFx1QTc4Qi1cXHVBN0JGXFx1QTdDMi1cXHVBN0NBXFx1QTdGNS1cXHVBODAxXFx1QTgwMy1cXHVBODA1XFx1QTgwNy1cXHVBODBBXFx1QTgwQy1cXHVBODIyXFx1QTg0MC1cXHVBODczXFx1QTg4Mi1cXHVBOEIzXFx1QThGMi1cXHVBOEY3XFx1QThGQlxcdUE4RkRcXHVBOEZFXFx1QTkwQS1cXHVBOTI1XFx1QTkzMC1cXHVBOTQ2XFx1QTk2MC1cXHVBOTdDXFx1QTk4NC1cXHVBOUIyXFx1QTlDRlxcdUE5RTAtXFx1QTlFNFxcdUE5RTYtXFx1QTlFRlxcdUE5RkEtXFx1QTlGRVxcdUFBMDAtXFx1QUEyOFxcdUFBNDAtXFx1QUE0MlxcdUFBNDQtXFx1QUE0QlxcdUFBNjAtXFx1QUE3NlxcdUFBN0FcXHVBQTdFLVxcdUFBQUZcXHVBQUIxXFx1QUFCNVxcdUFBQjZcXHVBQUI5LVxcdUFBQkRcXHVBQUMwXFx1QUFDMlxcdUFBREItXFx1QUFERFxcdUFBRTAtXFx1QUFFQVxcdUFBRjItXFx1QUFGNFxcdUFCMDEtXFx1QUIwNlxcdUFCMDktXFx1QUIwRVxcdUFCMTEtXFx1QUIxNlxcdUFCMjAtXFx1QUIyNlxcdUFCMjgtXFx1QUIyRVxcdUFCMzAtXFx1QUI1QVxcdUFCNUMtXFx1QUI2OVxcdUFCNzAtXFx1QUJFMlxcdUFDMDAtXFx1RDdBM1xcdUQ3QjAtXFx1RDdDNlxcdUQ3Q0ItXFx1RDdGQlxcdUY5MDAtXFx1RkE2RFxcdUZBNzAtXFx1RkFEOVxcdUZCMDAtXFx1RkIwNlxcdUZCMTMtXFx1RkIxN1xcdUZCMURcXHVGQjFGLVxcdUZCMjhcXHVGQjJBLVxcdUZCMzZcXHVGQjM4LVxcdUZCM0NcXHVGQjNFXFx1RkI0MFxcdUZCNDFcXHVGQjQzXFx1RkI0NFxcdUZCNDYtXFx1RkJCMVxcdUZCRDMtXFx1RkQzRFxcdUZENTAtXFx1RkQ4RlxcdUZEOTItXFx1RkRDN1xcdUZERjAtXFx1RkRGQlxcdUZFNzAtXFx1RkU3NFxcdUZFNzYtXFx1RkVGQ1xcdUZGMjEtXFx1RkYzQVxcdUZGNDEtXFx1RkY1QVxcdUZGNjYtXFx1RkZCRVxcdUZGQzItXFx1RkZDN1xcdUZGQ0EtXFx1RkZDRlxcdUZGRDItXFx1RkZEN1xcdUZGREEtXFx1RkZEQycsXG4gICAgICAgICdhc3RyYWwnOiAnXFx1RDgwMFtcXHVEQzAwLVxcdURDMEJcXHVEQzBELVxcdURDMjZcXHVEQzI4LVxcdURDM0FcXHVEQzNDXFx1REMzRFxcdURDM0YtXFx1REM0RFxcdURDNTAtXFx1REM1RFxcdURDODAtXFx1RENGQVxcdURFODAtXFx1REU5Q1xcdURFQTAtXFx1REVEMFxcdURGMDAtXFx1REYxRlxcdURGMkQtXFx1REY0MFxcdURGNDItXFx1REY0OVxcdURGNTAtXFx1REY3NVxcdURGODAtXFx1REY5RFxcdURGQTAtXFx1REZDM1xcdURGQzgtXFx1REZDRl18XFx1RDgwMVtcXHVEQzAwLVxcdURDOURcXHVEQ0IwLVxcdURDRDNcXHVEQ0Q4LVxcdURDRkJcXHVERDAwLVxcdUREMjdcXHVERDMwLVxcdURENjNcXHVERTAwLVxcdURGMzZcXHVERjQwLVxcdURGNTVcXHVERjYwLVxcdURGNjddfFxcdUQ4MDJbXFx1REMwMC1cXHVEQzA1XFx1REMwOFxcdURDMEEtXFx1REMzNVxcdURDMzdcXHVEQzM4XFx1REMzQ1xcdURDM0YtXFx1REM1NVxcdURDNjAtXFx1REM3NlxcdURDODAtXFx1REM5RVxcdURDRTAtXFx1RENGMlxcdURDRjRcXHVEQ0Y1XFx1REQwMC1cXHVERDE1XFx1REQyMC1cXHVERDM5XFx1REQ4MC1cXHVEREI3XFx1RERCRVxcdUREQkZcXHVERTAwXFx1REUxMC1cXHVERTEzXFx1REUxNS1cXHVERTE3XFx1REUxOS1cXHVERTM1XFx1REU2MC1cXHVERTdDXFx1REU4MC1cXHVERTlDXFx1REVDMC1cXHVERUM3XFx1REVDOS1cXHVERUU0XFx1REYwMC1cXHVERjM1XFx1REY0MC1cXHVERjU1XFx1REY2MC1cXHVERjcyXFx1REY4MC1cXHVERjkxXXxcXHVEODAzW1xcdURDMDAtXFx1REM0OFxcdURDODAtXFx1RENCMlxcdURDQzAtXFx1RENGMlxcdUREMDAtXFx1REQyM1xcdURFODAtXFx1REVBOVxcdURFQjBcXHVERUIxXFx1REYwMC1cXHVERjFDXFx1REYyN1xcdURGMzAtXFx1REY0NVxcdURGQjAtXFx1REZDNFxcdURGRTAtXFx1REZGNl18XFx1RDgwNFtcXHVEQzAzLVxcdURDMzdcXHVEQzgzLVxcdURDQUZcXHVEQ0QwLVxcdURDRThcXHVERDAzLVxcdUREMjZcXHVERDQ0XFx1REQ0N1xcdURENTAtXFx1REQ3MlxcdURENzZcXHVERDgzLVxcdUREQjJcXHVEREMxLVxcdUREQzRcXHVERERBXFx1REREQ1xcdURFMDAtXFx1REUxMVxcdURFMTMtXFx1REUyQlxcdURFODAtXFx1REU4NlxcdURFODhcXHVERThBLVxcdURFOERcXHVERThGLVxcdURFOURcXHVERTlGLVxcdURFQThcXHVERUIwLVxcdURFREVcXHVERjA1LVxcdURGMENcXHVERjBGXFx1REYxMFxcdURGMTMtXFx1REYyOFxcdURGMkEtXFx1REYzMFxcdURGMzJcXHVERjMzXFx1REYzNS1cXHVERjM5XFx1REYzRFxcdURGNTBcXHVERjVELVxcdURGNjFdfFxcdUQ4MDVbXFx1REMwMC1cXHVEQzM0XFx1REM0Ny1cXHVEQzRBXFx1REM1Ri1cXHVEQzYxXFx1REM4MC1cXHVEQ0FGXFx1RENDNFxcdURDQzVcXHVEQ0M3XFx1REQ4MC1cXHVEREFFXFx1REREOC1cXHVERERCXFx1REUwMC1cXHVERTJGXFx1REU0NFxcdURFODAtXFx1REVBQVxcdURFQjhcXHVERjAwLVxcdURGMUFdfFxcdUQ4MDZbXFx1REMwMC1cXHVEQzJCXFx1RENBMC1cXHVEQ0RGXFx1RENGRi1cXHVERDA2XFx1REQwOVxcdUREMEMtXFx1REQxM1xcdUREMTVcXHVERDE2XFx1REQxOC1cXHVERDJGXFx1REQzRlxcdURENDFcXHVEREEwLVxcdUREQTdcXHVEREFBLVxcdURERDBcXHVEREUxXFx1RERFM1xcdURFMDBcXHVERTBCLVxcdURFMzJcXHVERTNBXFx1REU1MFxcdURFNUMtXFx1REU4OVxcdURFOURcXHVERUMwLVxcdURFRjhdfFxcdUQ4MDdbXFx1REMwMC1cXHVEQzA4XFx1REMwQS1cXHVEQzJFXFx1REM0MFxcdURDNzItXFx1REM4RlxcdUREMDAtXFx1REQwNlxcdUREMDhcXHVERDA5XFx1REQwQi1cXHVERDMwXFx1REQ0NlxcdURENjAtXFx1REQ2NVxcdURENjdcXHVERDY4XFx1REQ2QS1cXHVERDg5XFx1REQ5OFxcdURFRTAtXFx1REVGMlxcdURGQjBdfFxcdUQ4MDhbXFx1REMwMC1cXHVERjk5XXxcXHVEODA5W1xcdURDODAtXFx1REQ0M118W1xcdUQ4MENcXHVEODFDLVxcdUQ4MjBcXHVEODIyXFx1RDg0MC1cXHVEODY4XFx1RDg2QS1cXHVEODZDXFx1RDg2Ri1cXHVEODcyXFx1RDg3NC1cXHVEODc5XFx1RDg4MC1cXHVEODgzXVtcXHVEQzAwLVxcdURGRkZdfFxcdUQ4MERbXFx1REMwMC1cXHVEQzJFXXxcXHVEODExW1xcdURDMDAtXFx1REU0Nl18XFx1RDgxQVtcXHVEQzAwLVxcdURFMzhcXHVERTQwLVxcdURFNUVcXHVERUQwLVxcdURFRURcXHVERjAwLVxcdURGMkZcXHVERjQwLVxcdURGNDNcXHVERjYzLVxcdURGNzdcXHVERjdELVxcdURGOEZdfFxcdUQ4MUJbXFx1REU0MC1cXHVERTdGXFx1REYwMC1cXHVERjRBXFx1REY1MFxcdURGOTMtXFx1REY5RlxcdURGRTBcXHVERkUxXFx1REZFM118XFx1RDgyMVtcXHVEQzAwLVxcdURGRjddfFxcdUQ4MjNbXFx1REMwMC1cXHVEQ0Q1XFx1REQwMC1cXHVERDA4XXxcXHVEODJDW1xcdURDMDAtXFx1REQxRVxcdURENTAtXFx1REQ1MlxcdURENjQtXFx1REQ2N1xcdURENzAtXFx1REVGQl18XFx1RDgyRltcXHVEQzAwLVxcdURDNkFcXHVEQzcwLVxcdURDN0NcXHVEQzgwLVxcdURDODhcXHVEQzkwLVxcdURDOTldfFxcdUQ4MzVbXFx1REMwMC1cXHVEQzU0XFx1REM1Ni1cXHVEQzlDXFx1REM5RVxcdURDOUZcXHVEQ0EyXFx1RENBNVxcdURDQTZcXHVEQ0E5LVxcdURDQUNcXHVEQ0FFLVxcdURDQjlcXHVEQ0JCXFx1RENCRC1cXHVEQ0MzXFx1RENDNS1cXHVERDA1XFx1REQwNy1cXHVERDBBXFx1REQwRC1cXHVERDE0XFx1REQxNi1cXHVERDFDXFx1REQxRS1cXHVERDM5XFx1REQzQi1cXHVERDNFXFx1REQ0MC1cXHVERDQ0XFx1REQ0NlxcdURENEEtXFx1REQ1MFxcdURENTItXFx1REVBNVxcdURFQTgtXFx1REVDMFxcdURFQzItXFx1REVEQVxcdURFREMtXFx1REVGQVxcdURFRkMtXFx1REYxNFxcdURGMTYtXFx1REYzNFxcdURGMzYtXFx1REY0RVxcdURGNTAtXFx1REY2RVxcdURGNzAtXFx1REY4OFxcdURGOEEtXFx1REZBOFxcdURGQUEtXFx1REZDMlxcdURGQzQtXFx1REZDQl18XFx1RDgzOFtcXHVERDAwLVxcdUREMkNcXHVERDM3LVxcdUREM0RcXHVERDRFXFx1REVDMC1cXHVERUVCXXxcXHVEODNBW1xcdURDMDAtXFx1RENDNFxcdUREMDAtXFx1REQ0M1xcdURENEJdfFxcdUQ4M0JbXFx1REUwMC1cXHVERTAzXFx1REUwNS1cXHVERTFGXFx1REUyMVxcdURFMjJcXHVERTI0XFx1REUyN1xcdURFMjktXFx1REUzMlxcdURFMzQtXFx1REUzN1xcdURFMzlcXHVERTNCXFx1REU0MlxcdURFNDdcXHVERTQ5XFx1REU0QlxcdURFNEQtXFx1REU0RlxcdURFNTFcXHVERTUyXFx1REU1NFxcdURFNTdcXHVERTU5XFx1REU1QlxcdURFNURcXHVERTVGXFx1REU2MVxcdURFNjJcXHVERTY0XFx1REU2Ny1cXHVERTZBXFx1REU2Qy1cXHVERTcyXFx1REU3NC1cXHVERTc3XFx1REU3OS1cXHVERTdDXFx1REU3RVxcdURFODAtXFx1REU4OVxcdURFOEItXFx1REU5QlxcdURFQTEtXFx1REVBM1xcdURFQTUtXFx1REVBOVxcdURFQUItXFx1REVCQl18XFx1RDg2OVtcXHVEQzAwLVxcdURFRERcXHVERjAwLVxcdURGRkZdfFxcdUQ4NkRbXFx1REMwMC1cXHVERjM0XFx1REY0MC1cXHVERkZGXXxcXHVEODZFW1xcdURDMDAtXFx1REMxRFxcdURDMjAtXFx1REZGRl18XFx1RDg3M1tcXHVEQzAwLVxcdURFQTFcXHVERUIwLVxcdURGRkZdfFxcdUQ4N0FbXFx1REMwMC1cXHVERkUwXXxcXHVEODdFW1xcdURDMDAtXFx1REUxRF18XFx1RDg4NFtcXHVEQzAwLVxcdURGNEFdJ1xuICAgIH0sXG4gICAge1xuICAgICAgICAnbmFtZSc6ICdMQycsXG4gICAgICAgICdhbGlhcyc6ICdDYXNlZF9MZXR0ZXInLFxuICAgICAgICAnYm1wJzogJ0EtWmEtelxceEI1XFx4QzAtXFx4RDZcXHhEOC1cXHhGNlxceEY4LVxcdTAxQkFcXHUwMUJDLVxcdTAxQkZcXHUwMUM0LVxcdTAyOTNcXHUwMjk1LVxcdTAyQUZcXHUwMzcwLVxcdTAzNzNcXHUwMzc2XFx1MDM3N1xcdTAzN0ItXFx1MDM3RFxcdTAzN0ZcXHUwMzg2XFx1MDM4OC1cXHUwMzhBXFx1MDM4Q1xcdTAzOEUtXFx1MDNBMVxcdTAzQTMtXFx1MDNGNVxcdTAzRjctXFx1MDQ4MVxcdTA0OEEtXFx1MDUyRlxcdTA1MzEtXFx1MDU1NlxcdTA1NjAtXFx1MDU4OFxcdTEwQTAtXFx1MTBDNVxcdTEwQzdcXHUxMENEXFx1MTBEMC1cXHUxMEZBXFx1MTBGRC1cXHUxMEZGXFx1MTNBMC1cXHUxM0Y1XFx1MTNGOC1cXHUxM0ZEXFx1MUM4MC1cXHUxQzg4XFx1MUM5MC1cXHUxQ0JBXFx1MUNCRC1cXHUxQ0JGXFx1MUQwMC1cXHUxRDJCXFx1MUQ2Qi1cXHUxRDc3XFx1MUQ3OS1cXHUxRDlBXFx1MUUwMC1cXHUxRjE1XFx1MUYxOC1cXHUxRjFEXFx1MUYyMC1cXHUxRjQ1XFx1MUY0OC1cXHUxRjREXFx1MUY1MC1cXHUxRjU3XFx1MUY1OVxcdTFGNUJcXHUxRjVEXFx1MUY1Ri1cXHUxRjdEXFx1MUY4MC1cXHUxRkI0XFx1MUZCNi1cXHUxRkJDXFx1MUZCRVxcdTFGQzItXFx1MUZDNFxcdTFGQzYtXFx1MUZDQ1xcdTFGRDAtXFx1MUZEM1xcdTFGRDYtXFx1MUZEQlxcdTFGRTAtXFx1MUZFQ1xcdTFGRjItXFx1MUZGNFxcdTFGRjYtXFx1MUZGQ1xcdTIxMDJcXHUyMTA3XFx1MjEwQS1cXHUyMTEzXFx1MjExNVxcdTIxMTktXFx1MjExRFxcdTIxMjRcXHUyMTI2XFx1MjEyOFxcdTIxMkEtXFx1MjEyRFxcdTIxMkYtXFx1MjEzNFxcdTIxMzlcXHUyMTNDLVxcdTIxM0ZcXHUyMTQ1LVxcdTIxNDlcXHUyMTRFXFx1MjE4M1xcdTIxODRcXHUyQzAwLVxcdTJDMkVcXHUyQzMwLVxcdTJDNUVcXHUyQzYwLVxcdTJDN0JcXHUyQzdFLVxcdTJDRTRcXHUyQ0VCLVxcdTJDRUVcXHUyQ0YyXFx1MkNGM1xcdTJEMDAtXFx1MkQyNVxcdTJEMjdcXHUyRDJEXFx1QTY0MC1cXHVBNjZEXFx1QTY4MC1cXHVBNjlCXFx1QTcyMi1cXHVBNzZGXFx1QTc3MS1cXHVBNzg3XFx1QTc4Qi1cXHVBNzhFXFx1QTc5MC1cXHVBN0JGXFx1QTdDMi1cXHVBN0NBXFx1QTdGNVxcdUE3RjZcXHVBN0ZBXFx1QUIzMC1cXHVBQjVBXFx1QUI2MC1cXHVBQjY4XFx1QUI3MC1cXHVBQkJGXFx1RkIwMC1cXHVGQjA2XFx1RkIxMy1cXHVGQjE3XFx1RkYyMS1cXHVGRjNBXFx1RkY0MS1cXHVGRjVBJyxcbiAgICAgICAgJ2FzdHJhbCc6ICdcXHVEODAxW1xcdURDMDAtXFx1REM0RlxcdURDQjAtXFx1RENEM1xcdURDRDgtXFx1RENGQl18XFx1RDgwM1tcXHVEQzgwLVxcdURDQjJcXHVEQ0MwLVxcdURDRjJdfFxcdUQ4MDZbXFx1RENBMC1cXHVEQ0RGXXxcXHVEODFCW1xcdURFNDAtXFx1REU3Rl18XFx1RDgzNVtcXHVEQzAwLVxcdURDNTRcXHVEQzU2LVxcdURDOUNcXHVEQzlFXFx1REM5RlxcdURDQTJcXHVEQ0E1XFx1RENBNlxcdURDQTktXFx1RENBQ1xcdURDQUUtXFx1RENCOVxcdURDQkJcXHVEQ0JELVxcdURDQzNcXHVEQ0M1LVxcdUREMDVcXHVERDA3LVxcdUREMEFcXHVERDBELVxcdUREMTRcXHVERDE2LVxcdUREMUNcXHVERDFFLVxcdUREMzlcXHVERDNCLVxcdUREM0VcXHVERDQwLVxcdURENDRcXHVERDQ2XFx1REQ0QS1cXHVERDUwXFx1REQ1Mi1cXHVERUE1XFx1REVBOC1cXHVERUMwXFx1REVDMi1cXHVERURBXFx1REVEQy1cXHVERUZBXFx1REVGQy1cXHVERjE0XFx1REYxNi1cXHVERjM0XFx1REYzNi1cXHVERjRFXFx1REY1MC1cXHVERjZFXFx1REY3MC1cXHVERjg4XFx1REY4QS1cXHVERkE4XFx1REZBQS1cXHVERkMyXFx1REZDNC1cXHVERkNCXXxcXHVEODNBW1xcdUREMDAtXFx1REQ0M10nXG4gICAgfSxcbiAgICB7XG4gICAgICAgICduYW1lJzogJ0xsJyxcbiAgICAgICAgJ2FsaWFzJzogJ0xvd2VyY2FzZV9MZXR0ZXInLFxuICAgICAgICAnYm1wJzogJ2EtelxceEI1XFx4REYtXFx4RjZcXHhGOC1cXHhGRlxcdTAxMDFcXHUwMTAzXFx1MDEwNVxcdTAxMDdcXHUwMTA5XFx1MDEwQlxcdTAxMERcXHUwMTBGXFx1MDExMVxcdTAxMTNcXHUwMTE1XFx1MDExN1xcdTAxMTlcXHUwMTFCXFx1MDExRFxcdTAxMUZcXHUwMTIxXFx1MDEyM1xcdTAxMjVcXHUwMTI3XFx1MDEyOVxcdTAxMkJcXHUwMTJEXFx1MDEyRlxcdTAxMzFcXHUwMTMzXFx1MDEzNVxcdTAxMzdcXHUwMTM4XFx1MDEzQVxcdTAxM0NcXHUwMTNFXFx1MDE0MFxcdTAxNDJcXHUwMTQ0XFx1MDE0NlxcdTAxNDhcXHUwMTQ5XFx1MDE0QlxcdTAxNERcXHUwMTRGXFx1MDE1MVxcdTAxNTNcXHUwMTU1XFx1MDE1N1xcdTAxNTlcXHUwMTVCXFx1MDE1RFxcdTAxNUZcXHUwMTYxXFx1MDE2M1xcdTAxNjVcXHUwMTY3XFx1MDE2OVxcdTAxNkJcXHUwMTZEXFx1MDE2RlxcdTAxNzFcXHUwMTczXFx1MDE3NVxcdTAxNzdcXHUwMTdBXFx1MDE3Q1xcdTAxN0UtXFx1MDE4MFxcdTAxODNcXHUwMTg1XFx1MDE4OFxcdTAxOENcXHUwMThEXFx1MDE5MlxcdTAxOTVcXHUwMTk5LVxcdTAxOUJcXHUwMTlFXFx1MDFBMVxcdTAxQTNcXHUwMUE1XFx1MDFBOFxcdTAxQUFcXHUwMUFCXFx1MDFBRFxcdTAxQjBcXHUwMUI0XFx1MDFCNlxcdTAxQjlcXHUwMUJBXFx1MDFCRC1cXHUwMUJGXFx1MDFDNlxcdTAxQzlcXHUwMUNDXFx1MDFDRVxcdTAxRDBcXHUwMUQyXFx1MDFENFxcdTAxRDZcXHUwMUQ4XFx1MDFEQVxcdTAxRENcXHUwMUREXFx1MDFERlxcdTAxRTFcXHUwMUUzXFx1MDFFNVxcdTAxRTdcXHUwMUU5XFx1MDFFQlxcdTAxRURcXHUwMUVGXFx1MDFGMFxcdTAxRjNcXHUwMUY1XFx1MDFGOVxcdTAxRkJcXHUwMUZEXFx1MDFGRlxcdTAyMDFcXHUwMjAzXFx1MDIwNVxcdTAyMDdcXHUwMjA5XFx1MDIwQlxcdTAyMERcXHUwMjBGXFx1MDIxMVxcdTAyMTNcXHUwMjE1XFx1MDIxN1xcdTAyMTlcXHUwMjFCXFx1MDIxRFxcdTAyMUZcXHUwMjIxXFx1MDIyM1xcdTAyMjVcXHUwMjI3XFx1MDIyOVxcdTAyMkJcXHUwMjJEXFx1MDIyRlxcdTAyMzFcXHUwMjMzLVxcdTAyMzlcXHUwMjNDXFx1MDIzRlxcdTAyNDBcXHUwMjQyXFx1MDI0N1xcdTAyNDlcXHUwMjRCXFx1MDI0RFxcdTAyNEYtXFx1MDI5M1xcdTAyOTUtXFx1MDJBRlxcdTAzNzFcXHUwMzczXFx1MDM3N1xcdTAzN0ItXFx1MDM3RFxcdTAzOTBcXHUwM0FDLVxcdTAzQ0VcXHUwM0QwXFx1MDNEMVxcdTAzRDUtXFx1MDNEN1xcdTAzRDlcXHUwM0RCXFx1MDNERFxcdTAzREZcXHUwM0UxXFx1MDNFM1xcdTAzRTVcXHUwM0U3XFx1MDNFOVxcdTAzRUJcXHUwM0VEXFx1MDNFRi1cXHUwM0YzXFx1MDNGNVxcdTAzRjhcXHUwM0ZCXFx1MDNGQ1xcdTA0MzAtXFx1MDQ1RlxcdTA0NjFcXHUwNDYzXFx1MDQ2NVxcdTA0NjdcXHUwNDY5XFx1MDQ2QlxcdTA0NkRcXHUwNDZGXFx1MDQ3MVxcdTA0NzNcXHUwNDc1XFx1MDQ3N1xcdTA0NzlcXHUwNDdCXFx1MDQ3RFxcdTA0N0ZcXHUwNDgxXFx1MDQ4QlxcdTA0OERcXHUwNDhGXFx1MDQ5MVxcdTA0OTNcXHUwNDk1XFx1MDQ5N1xcdTA0OTlcXHUwNDlCXFx1MDQ5RFxcdTA0OUZcXHUwNEExXFx1MDRBM1xcdTA0QTVcXHUwNEE3XFx1MDRBOVxcdTA0QUJcXHUwNEFEXFx1MDRBRlxcdTA0QjFcXHUwNEIzXFx1MDRCNVxcdTA0QjdcXHUwNEI5XFx1MDRCQlxcdTA0QkRcXHUwNEJGXFx1MDRDMlxcdTA0QzRcXHUwNEM2XFx1MDRDOFxcdTA0Q0FcXHUwNENDXFx1MDRDRVxcdTA0Q0ZcXHUwNEQxXFx1MDREM1xcdTA0RDVcXHUwNEQ3XFx1MDREOVxcdTA0REJcXHUwNEREXFx1MDRERlxcdTA0RTFcXHUwNEUzXFx1MDRFNVxcdTA0RTdcXHUwNEU5XFx1MDRFQlxcdTA0RURcXHUwNEVGXFx1MDRGMVxcdTA0RjNcXHUwNEY1XFx1MDRGN1xcdTA0RjlcXHUwNEZCXFx1MDRGRFxcdTA0RkZcXHUwNTAxXFx1MDUwM1xcdTA1MDVcXHUwNTA3XFx1MDUwOVxcdTA1MEJcXHUwNTBEXFx1MDUwRlxcdTA1MTFcXHUwNTEzXFx1MDUxNVxcdTA1MTdcXHUwNTE5XFx1MDUxQlxcdTA1MURcXHUwNTFGXFx1MDUyMVxcdTA1MjNcXHUwNTI1XFx1MDUyN1xcdTA1MjlcXHUwNTJCXFx1MDUyRFxcdTA1MkZcXHUwNTYwLVxcdTA1ODhcXHUxMEQwLVxcdTEwRkFcXHUxMEZELVxcdTEwRkZcXHUxM0Y4LVxcdTEzRkRcXHUxQzgwLVxcdTFDODhcXHUxRDAwLVxcdTFEMkJcXHUxRDZCLVxcdTFENzdcXHUxRDc5LVxcdTFEOUFcXHUxRTAxXFx1MUUwM1xcdTFFMDVcXHUxRTA3XFx1MUUwOVxcdTFFMEJcXHUxRTBEXFx1MUUwRlxcdTFFMTFcXHUxRTEzXFx1MUUxNVxcdTFFMTdcXHUxRTE5XFx1MUUxQlxcdTFFMURcXHUxRTFGXFx1MUUyMVxcdTFFMjNcXHUxRTI1XFx1MUUyN1xcdTFFMjlcXHUxRTJCXFx1MUUyRFxcdTFFMkZcXHUxRTMxXFx1MUUzM1xcdTFFMzVcXHUxRTM3XFx1MUUzOVxcdTFFM0JcXHUxRTNEXFx1MUUzRlxcdTFFNDFcXHUxRTQzXFx1MUU0NVxcdTFFNDdcXHUxRTQ5XFx1MUU0QlxcdTFFNERcXHUxRTRGXFx1MUU1MVxcdTFFNTNcXHUxRTU1XFx1MUU1N1xcdTFFNTlcXHUxRTVCXFx1MUU1RFxcdTFFNUZcXHUxRTYxXFx1MUU2M1xcdTFFNjVcXHUxRTY3XFx1MUU2OVxcdTFFNkJcXHUxRTZEXFx1MUU2RlxcdTFFNzFcXHUxRTczXFx1MUU3NVxcdTFFNzdcXHUxRTc5XFx1MUU3QlxcdTFFN0RcXHUxRTdGXFx1MUU4MVxcdTFFODNcXHUxRTg1XFx1MUU4N1xcdTFFODlcXHUxRThCXFx1MUU4RFxcdTFFOEZcXHUxRTkxXFx1MUU5M1xcdTFFOTUtXFx1MUU5RFxcdTFFOUZcXHUxRUExXFx1MUVBM1xcdTFFQTVcXHUxRUE3XFx1MUVBOVxcdTFFQUJcXHUxRUFEXFx1MUVBRlxcdTFFQjFcXHUxRUIzXFx1MUVCNVxcdTFFQjdcXHUxRUI5XFx1MUVCQlxcdTFFQkRcXHUxRUJGXFx1MUVDMVxcdTFFQzNcXHUxRUM1XFx1MUVDN1xcdTFFQzlcXHUxRUNCXFx1MUVDRFxcdTFFQ0ZcXHUxRUQxXFx1MUVEM1xcdTFFRDVcXHUxRUQ3XFx1MUVEOVxcdTFFREJcXHUxRUREXFx1MUVERlxcdTFFRTFcXHUxRUUzXFx1MUVFNVxcdTFFRTdcXHUxRUU5XFx1MUVFQlxcdTFFRURcXHUxRUVGXFx1MUVGMVxcdTFFRjNcXHUxRUY1XFx1MUVGN1xcdTFFRjlcXHUxRUZCXFx1MUVGRFxcdTFFRkYtXFx1MUYwN1xcdTFGMTAtXFx1MUYxNVxcdTFGMjAtXFx1MUYyN1xcdTFGMzAtXFx1MUYzN1xcdTFGNDAtXFx1MUY0NVxcdTFGNTAtXFx1MUY1N1xcdTFGNjAtXFx1MUY2N1xcdTFGNzAtXFx1MUY3RFxcdTFGODAtXFx1MUY4N1xcdTFGOTAtXFx1MUY5N1xcdTFGQTAtXFx1MUZBN1xcdTFGQjAtXFx1MUZCNFxcdTFGQjZcXHUxRkI3XFx1MUZCRVxcdTFGQzItXFx1MUZDNFxcdTFGQzZcXHUxRkM3XFx1MUZEMC1cXHUxRkQzXFx1MUZENlxcdTFGRDdcXHUxRkUwLVxcdTFGRTdcXHUxRkYyLVxcdTFGRjRcXHUxRkY2XFx1MUZGN1xcdTIxMEFcXHUyMTBFXFx1MjEwRlxcdTIxMTNcXHUyMTJGXFx1MjEzNFxcdTIxMzlcXHUyMTNDXFx1MjEzRFxcdTIxNDYtXFx1MjE0OVxcdTIxNEVcXHUyMTg0XFx1MkMzMC1cXHUyQzVFXFx1MkM2MVxcdTJDNjVcXHUyQzY2XFx1MkM2OFxcdTJDNkFcXHUyQzZDXFx1MkM3MVxcdTJDNzNcXHUyQzc0XFx1MkM3Ni1cXHUyQzdCXFx1MkM4MVxcdTJDODNcXHUyQzg1XFx1MkM4N1xcdTJDODlcXHUyQzhCXFx1MkM4RFxcdTJDOEZcXHUyQzkxXFx1MkM5M1xcdTJDOTVcXHUyQzk3XFx1MkM5OVxcdTJDOUJcXHUyQzlEXFx1MkM5RlxcdTJDQTFcXHUyQ0EzXFx1MkNBNVxcdTJDQTdcXHUyQ0E5XFx1MkNBQlxcdTJDQURcXHUyQ0FGXFx1MkNCMVxcdTJDQjNcXHUyQ0I1XFx1MkNCN1xcdTJDQjlcXHUyQ0JCXFx1MkNCRFxcdTJDQkZcXHUyQ0MxXFx1MkNDM1xcdTJDQzVcXHUyQ0M3XFx1MkNDOVxcdTJDQ0JcXHUyQ0NEXFx1MkNDRlxcdTJDRDFcXHUyQ0QzXFx1MkNENVxcdTJDRDdcXHUyQ0Q5XFx1MkNEQlxcdTJDRERcXHUyQ0RGXFx1MkNFMVxcdTJDRTNcXHUyQ0U0XFx1MkNFQ1xcdTJDRUVcXHUyQ0YzXFx1MkQwMC1cXHUyRDI1XFx1MkQyN1xcdTJEMkRcXHVBNjQxXFx1QTY0M1xcdUE2NDVcXHVBNjQ3XFx1QTY0OVxcdUE2NEJcXHVBNjREXFx1QTY0RlxcdUE2NTFcXHVBNjUzXFx1QTY1NVxcdUE2NTdcXHVBNjU5XFx1QTY1QlxcdUE2NURcXHVBNjVGXFx1QTY2MVxcdUE2NjNcXHVBNjY1XFx1QTY2N1xcdUE2NjlcXHVBNjZCXFx1QTY2RFxcdUE2ODFcXHVBNjgzXFx1QTY4NVxcdUE2ODdcXHVBNjg5XFx1QTY4QlxcdUE2OERcXHVBNjhGXFx1QTY5MVxcdUE2OTNcXHVBNjk1XFx1QTY5N1xcdUE2OTlcXHVBNjlCXFx1QTcyM1xcdUE3MjVcXHVBNzI3XFx1QTcyOVxcdUE3MkJcXHVBNzJEXFx1QTcyRi1cXHVBNzMxXFx1QTczM1xcdUE3MzVcXHVBNzM3XFx1QTczOVxcdUE3M0JcXHVBNzNEXFx1QTczRlxcdUE3NDFcXHVBNzQzXFx1QTc0NVxcdUE3NDdcXHVBNzQ5XFx1QTc0QlxcdUE3NERcXHVBNzRGXFx1QTc1MVxcdUE3NTNcXHVBNzU1XFx1QTc1N1xcdUE3NTlcXHVBNzVCXFx1QTc1RFxcdUE3NUZcXHVBNzYxXFx1QTc2M1xcdUE3NjVcXHVBNzY3XFx1QTc2OVxcdUE3NkJcXHVBNzZEXFx1QTc2RlxcdUE3NzEtXFx1QTc3OFxcdUE3N0FcXHVBNzdDXFx1QTc3RlxcdUE3ODFcXHVBNzgzXFx1QTc4NVxcdUE3ODdcXHVBNzhDXFx1QTc4RVxcdUE3OTFcXHVBNzkzLVxcdUE3OTVcXHVBNzk3XFx1QTc5OVxcdUE3OUJcXHVBNzlEXFx1QTc5RlxcdUE3QTFcXHVBN0EzXFx1QTdBNVxcdUE3QTdcXHVBN0E5XFx1QTdBRlxcdUE3QjVcXHVBN0I3XFx1QTdCOVxcdUE3QkJcXHVBN0JEXFx1QTdCRlxcdUE3QzNcXHVBN0M4XFx1QTdDQVxcdUE3RjZcXHVBN0ZBXFx1QUIzMC1cXHVBQjVBXFx1QUI2MC1cXHVBQjY4XFx1QUI3MC1cXHVBQkJGXFx1RkIwMC1cXHVGQjA2XFx1RkIxMy1cXHVGQjE3XFx1RkY0MS1cXHVGRjVBJyxcbiAgICAgICAgJ2FzdHJhbCc6ICdcXHVEODAxW1xcdURDMjgtXFx1REM0RlxcdURDRDgtXFx1RENGQl18XFx1RDgwM1tcXHVEQ0MwLVxcdURDRjJdfFxcdUQ4MDZbXFx1RENDMC1cXHVEQ0RGXXxcXHVEODFCW1xcdURFNjAtXFx1REU3Rl18XFx1RDgzNVtcXHVEQzFBLVxcdURDMzNcXHVEQzRFLVxcdURDNTRcXHVEQzU2LVxcdURDNjdcXHVEQzgyLVxcdURDOUJcXHVEQ0I2LVxcdURDQjlcXHVEQ0JCXFx1RENCRC1cXHVEQ0MzXFx1RENDNS1cXHVEQ0NGXFx1RENFQS1cXHVERDAzXFx1REQxRS1cXHVERDM3XFx1REQ1Mi1cXHVERDZCXFx1REQ4Ni1cXHVERDlGXFx1RERCQS1cXHVEREQzXFx1RERFRS1cXHVERTA3XFx1REUyMi1cXHVERTNCXFx1REU1Ni1cXHVERTZGXFx1REU4QS1cXHVERUE1XFx1REVDMi1cXHVERURBXFx1REVEQy1cXHVERUUxXFx1REVGQy1cXHVERjE0XFx1REYxNi1cXHVERjFCXFx1REYzNi1cXHVERjRFXFx1REY1MC1cXHVERjU1XFx1REY3MC1cXHVERjg4XFx1REY4QS1cXHVERjhGXFx1REZBQS1cXHVERkMyXFx1REZDNC1cXHVERkM5XFx1REZDQl18XFx1RDgzQVtcXHVERDIyLVxcdURENDNdJ1xuICAgIH0sXG4gICAge1xuICAgICAgICAnbmFtZSc6ICdMbScsXG4gICAgICAgICdhbGlhcyc6ICdNb2RpZmllcl9MZXR0ZXInLFxuICAgICAgICAnYm1wJzogJ1xcdTAyQjAtXFx1MDJDMVxcdTAyQzYtXFx1MDJEMVxcdTAyRTAtXFx1MDJFNFxcdTAyRUNcXHUwMkVFXFx1MDM3NFxcdTAzN0FcXHUwNTU5XFx1MDY0MFxcdTA2RTVcXHUwNkU2XFx1MDdGNFxcdTA3RjVcXHUwN0ZBXFx1MDgxQVxcdTA4MjRcXHUwODI4XFx1MDk3MVxcdTBFNDZcXHUwRUM2XFx1MTBGQ1xcdTE3RDdcXHUxODQzXFx1MUFBN1xcdTFDNzgtXFx1MUM3RFxcdTFEMkMtXFx1MUQ2QVxcdTFENzhcXHUxRDlCLVxcdTFEQkZcXHUyMDcxXFx1MjA3RlxcdTIwOTAtXFx1MjA5Q1xcdTJDN0NcXHUyQzdEXFx1MkQ2RlxcdTJFMkZcXHUzMDA1XFx1MzAzMS1cXHUzMDM1XFx1MzAzQlxcdTMwOURcXHUzMDlFXFx1MzBGQy1cXHUzMEZFXFx1QTAxNVxcdUE0RjgtXFx1QTRGRFxcdUE2MENcXHVBNjdGXFx1QTY5Q1xcdUE2OURcXHVBNzE3LVxcdUE3MUZcXHVBNzcwXFx1QTc4OFxcdUE3RjhcXHVBN0Y5XFx1QTlDRlxcdUE5RTZcXHVBQTcwXFx1QUFERFxcdUFBRjNcXHVBQUY0XFx1QUI1Qy1cXHVBQjVGXFx1QUI2OVxcdUZGNzBcXHVGRjlFXFx1RkY5RicsXG4gICAgICAgICdhc3RyYWwnOiAnXFx1RDgxQVtcXHVERjQwLVxcdURGNDNdfFxcdUQ4MUJbXFx1REY5My1cXHVERjlGXFx1REZFMFxcdURGRTFcXHVERkUzXXxcXHVEODM4W1xcdUREMzctXFx1REQzRF18XFx1RDgzQVxcdURENEInXG4gICAgfSxcbiAgICB7XG4gICAgICAgICduYW1lJzogJ0xvJyxcbiAgICAgICAgJ2FsaWFzJzogJ090aGVyX0xldHRlcicsXG4gICAgICAgICdibXAnOiAnXFx4QUFcXHhCQVxcdTAxQkJcXHUwMUMwLVxcdTAxQzNcXHUwMjk0XFx1MDVEMC1cXHUwNUVBXFx1MDVFRi1cXHUwNUYyXFx1MDYyMC1cXHUwNjNGXFx1MDY0MS1cXHUwNjRBXFx1MDY2RVxcdTA2NkZcXHUwNjcxLVxcdTA2RDNcXHUwNkQ1XFx1MDZFRVxcdTA2RUZcXHUwNkZBLVxcdTA2RkNcXHUwNkZGXFx1MDcxMFxcdTA3MTItXFx1MDcyRlxcdTA3NEQtXFx1MDdBNVxcdTA3QjFcXHUwN0NBLVxcdTA3RUFcXHUwODAwLVxcdTA4MTVcXHUwODQwLVxcdTA4NThcXHUwODYwLVxcdTA4NkFcXHUwOEEwLVxcdTA4QjRcXHUwOEI2LVxcdTA4QzdcXHUwOTA0LVxcdTA5MzlcXHUwOTNEXFx1MDk1MFxcdTA5NTgtXFx1MDk2MVxcdTA5NzItXFx1MDk4MFxcdTA5ODUtXFx1MDk4Q1xcdTA5OEZcXHUwOTkwXFx1MDk5My1cXHUwOUE4XFx1MDlBQS1cXHUwOUIwXFx1MDlCMlxcdTA5QjYtXFx1MDlCOVxcdTA5QkRcXHUwOUNFXFx1MDlEQ1xcdTA5RERcXHUwOURGLVxcdTA5RTFcXHUwOUYwXFx1MDlGMVxcdTA5RkNcXHUwQTA1LVxcdTBBMEFcXHUwQTBGXFx1MEExMFxcdTBBMTMtXFx1MEEyOFxcdTBBMkEtXFx1MEEzMFxcdTBBMzJcXHUwQTMzXFx1MEEzNVxcdTBBMzZcXHUwQTM4XFx1MEEzOVxcdTBBNTktXFx1MEE1Q1xcdTBBNUVcXHUwQTcyLVxcdTBBNzRcXHUwQTg1LVxcdTBBOERcXHUwQThGLVxcdTBBOTFcXHUwQTkzLVxcdTBBQThcXHUwQUFBLVxcdTBBQjBcXHUwQUIyXFx1MEFCM1xcdTBBQjUtXFx1MEFCOVxcdTBBQkRcXHUwQUQwXFx1MEFFMFxcdTBBRTFcXHUwQUY5XFx1MEIwNS1cXHUwQjBDXFx1MEIwRlxcdTBCMTBcXHUwQjEzLVxcdTBCMjhcXHUwQjJBLVxcdTBCMzBcXHUwQjMyXFx1MEIzM1xcdTBCMzUtXFx1MEIzOVxcdTBCM0RcXHUwQjVDXFx1MEI1RFxcdTBCNUYtXFx1MEI2MVxcdTBCNzFcXHUwQjgzXFx1MEI4NS1cXHUwQjhBXFx1MEI4RS1cXHUwQjkwXFx1MEI5Mi1cXHUwQjk1XFx1MEI5OVxcdTBCOUFcXHUwQjlDXFx1MEI5RVxcdTBCOUZcXHUwQkEzXFx1MEJBNFxcdTBCQTgtXFx1MEJBQVxcdTBCQUUtXFx1MEJCOVxcdTBCRDBcXHUwQzA1LVxcdTBDMENcXHUwQzBFLVxcdTBDMTBcXHUwQzEyLVxcdTBDMjhcXHUwQzJBLVxcdTBDMzlcXHUwQzNEXFx1MEM1OC1cXHUwQzVBXFx1MEM2MFxcdTBDNjFcXHUwQzgwXFx1MEM4NS1cXHUwQzhDXFx1MEM4RS1cXHUwQzkwXFx1MEM5Mi1cXHUwQ0E4XFx1MENBQS1cXHUwQ0IzXFx1MENCNS1cXHUwQ0I5XFx1MENCRFxcdTBDREVcXHUwQ0UwXFx1MENFMVxcdTBDRjFcXHUwQ0YyXFx1MEQwNC1cXHUwRDBDXFx1MEQwRS1cXHUwRDEwXFx1MEQxMi1cXHUwRDNBXFx1MEQzRFxcdTBENEVcXHUwRDU0LVxcdTBENTZcXHUwRDVGLVxcdTBENjFcXHUwRDdBLVxcdTBEN0ZcXHUwRDg1LVxcdTBEOTZcXHUwRDlBLVxcdTBEQjFcXHUwREIzLVxcdTBEQkJcXHUwREJEXFx1MERDMC1cXHUwREM2XFx1MEUwMS1cXHUwRTMwXFx1MEUzMlxcdTBFMzNcXHUwRTQwLVxcdTBFNDVcXHUwRTgxXFx1MEU4MlxcdTBFODRcXHUwRTg2LVxcdTBFOEFcXHUwRThDLVxcdTBFQTNcXHUwRUE1XFx1MEVBNy1cXHUwRUIwXFx1MEVCMlxcdTBFQjNcXHUwRUJEXFx1MEVDMC1cXHUwRUM0XFx1MEVEQy1cXHUwRURGXFx1MEYwMFxcdTBGNDAtXFx1MEY0N1xcdTBGNDktXFx1MEY2Q1xcdTBGODgtXFx1MEY4Q1xcdTEwMDAtXFx1MTAyQVxcdTEwM0ZcXHUxMDUwLVxcdTEwNTVcXHUxMDVBLVxcdTEwNURcXHUxMDYxXFx1MTA2NVxcdTEwNjZcXHUxMDZFLVxcdTEwNzBcXHUxMDc1LVxcdTEwODFcXHUxMDhFXFx1MTEwMC1cXHUxMjQ4XFx1MTI0QS1cXHUxMjREXFx1MTI1MC1cXHUxMjU2XFx1MTI1OFxcdTEyNUEtXFx1MTI1RFxcdTEyNjAtXFx1MTI4OFxcdTEyOEEtXFx1MTI4RFxcdTEyOTAtXFx1MTJCMFxcdTEyQjItXFx1MTJCNVxcdTEyQjgtXFx1MTJCRVxcdTEyQzBcXHUxMkMyLVxcdTEyQzVcXHUxMkM4LVxcdTEyRDZcXHUxMkQ4LVxcdTEzMTBcXHUxMzEyLVxcdTEzMTVcXHUxMzE4LVxcdTEzNUFcXHUxMzgwLVxcdTEzOEZcXHUxNDAxLVxcdTE2NkNcXHUxNjZGLVxcdTE2N0ZcXHUxNjgxLVxcdTE2OUFcXHUxNkEwLVxcdTE2RUFcXHUxNkYxLVxcdTE2RjhcXHUxNzAwLVxcdTE3MENcXHUxNzBFLVxcdTE3MTFcXHUxNzIwLVxcdTE3MzFcXHUxNzQwLVxcdTE3NTFcXHUxNzYwLVxcdTE3NkNcXHUxNzZFLVxcdTE3NzBcXHUxNzgwLVxcdTE3QjNcXHUxN0RDXFx1MTgyMC1cXHUxODQyXFx1MTg0NC1cXHUxODc4XFx1MTg4MC1cXHUxODg0XFx1MTg4Ny1cXHUxOEE4XFx1MThBQVxcdTE4QjAtXFx1MThGNVxcdTE5MDAtXFx1MTkxRVxcdTE5NTAtXFx1MTk2RFxcdTE5NzAtXFx1MTk3NFxcdTE5ODAtXFx1MTlBQlxcdTE5QjAtXFx1MTlDOVxcdTFBMDAtXFx1MUExNlxcdTFBMjAtXFx1MUE1NFxcdTFCMDUtXFx1MUIzM1xcdTFCNDUtXFx1MUI0QlxcdTFCODMtXFx1MUJBMFxcdTFCQUVcXHUxQkFGXFx1MUJCQS1cXHUxQkU1XFx1MUMwMC1cXHUxQzIzXFx1MUM0RC1cXHUxQzRGXFx1MUM1QS1cXHUxQzc3XFx1MUNFOS1cXHUxQ0VDXFx1MUNFRS1cXHUxQ0YzXFx1MUNGNVxcdTFDRjZcXHUxQ0ZBXFx1MjEzNS1cXHUyMTM4XFx1MkQzMC1cXHUyRDY3XFx1MkQ4MC1cXHUyRDk2XFx1MkRBMC1cXHUyREE2XFx1MkRBOC1cXHUyREFFXFx1MkRCMC1cXHUyREI2XFx1MkRCOC1cXHUyREJFXFx1MkRDMC1cXHUyREM2XFx1MkRDOC1cXHUyRENFXFx1MkREMC1cXHUyREQ2XFx1MkREOC1cXHUyRERFXFx1MzAwNlxcdTMwM0NcXHUzMDQxLVxcdTMwOTZcXHUzMDlGXFx1MzBBMS1cXHUzMEZBXFx1MzBGRlxcdTMxMDUtXFx1MzEyRlxcdTMxMzEtXFx1MzE4RVxcdTMxQTAtXFx1MzFCRlxcdTMxRjAtXFx1MzFGRlxcdTM0MDAtXFx1NERCRlxcdTRFMDAtXFx1OUZGQ1xcdUEwMDAtXFx1QTAxNFxcdUEwMTYtXFx1QTQ4Q1xcdUE0RDAtXFx1QTRGN1xcdUE1MDAtXFx1QTYwQlxcdUE2MTAtXFx1QTYxRlxcdUE2MkFcXHVBNjJCXFx1QTY2RVxcdUE2QTAtXFx1QTZFNVxcdUE3OEZcXHVBN0Y3XFx1QTdGQi1cXHVBODAxXFx1QTgwMy1cXHVBODA1XFx1QTgwNy1cXHVBODBBXFx1QTgwQy1cXHVBODIyXFx1QTg0MC1cXHVBODczXFx1QTg4Mi1cXHVBOEIzXFx1QThGMi1cXHVBOEY3XFx1QThGQlxcdUE4RkRcXHVBOEZFXFx1QTkwQS1cXHVBOTI1XFx1QTkzMC1cXHVBOTQ2XFx1QTk2MC1cXHVBOTdDXFx1QTk4NC1cXHVBOUIyXFx1QTlFMC1cXHVBOUU0XFx1QTlFNy1cXHVBOUVGXFx1QTlGQS1cXHVBOUZFXFx1QUEwMC1cXHVBQTI4XFx1QUE0MC1cXHVBQTQyXFx1QUE0NC1cXHVBQTRCXFx1QUE2MC1cXHVBQTZGXFx1QUE3MS1cXHVBQTc2XFx1QUE3QVxcdUFBN0UtXFx1QUFBRlxcdUFBQjFcXHVBQUI1XFx1QUFCNlxcdUFBQjktXFx1QUFCRFxcdUFBQzBcXHVBQUMyXFx1QUFEQlxcdUFBRENcXHVBQUUwLVxcdUFBRUFcXHVBQUYyXFx1QUIwMS1cXHVBQjA2XFx1QUIwOS1cXHVBQjBFXFx1QUIxMS1cXHVBQjE2XFx1QUIyMC1cXHVBQjI2XFx1QUIyOC1cXHVBQjJFXFx1QUJDMC1cXHVBQkUyXFx1QUMwMC1cXHVEN0EzXFx1RDdCMC1cXHVEN0M2XFx1RDdDQi1cXHVEN0ZCXFx1RjkwMC1cXHVGQTZEXFx1RkE3MC1cXHVGQUQ5XFx1RkIxRFxcdUZCMUYtXFx1RkIyOFxcdUZCMkEtXFx1RkIzNlxcdUZCMzgtXFx1RkIzQ1xcdUZCM0VcXHVGQjQwXFx1RkI0MVxcdUZCNDNcXHVGQjQ0XFx1RkI0Ni1cXHVGQkIxXFx1RkJEMy1cXHVGRDNEXFx1RkQ1MC1cXHVGRDhGXFx1RkQ5Mi1cXHVGREM3XFx1RkRGMC1cXHVGREZCXFx1RkU3MC1cXHVGRTc0XFx1RkU3Ni1cXHVGRUZDXFx1RkY2Ni1cXHVGRjZGXFx1RkY3MS1cXHVGRjlEXFx1RkZBMC1cXHVGRkJFXFx1RkZDMi1cXHVGRkM3XFx1RkZDQS1cXHVGRkNGXFx1RkZEMi1cXHVGRkQ3XFx1RkZEQS1cXHVGRkRDJyxcbiAgICAgICAgJ2FzdHJhbCc6ICdcXHVEODAwW1xcdURDMDAtXFx1REMwQlxcdURDMEQtXFx1REMyNlxcdURDMjgtXFx1REMzQVxcdURDM0NcXHVEQzNEXFx1REMzRi1cXHVEQzREXFx1REM1MC1cXHVEQzVEXFx1REM4MC1cXHVEQ0ZBXFx1REU4MC1cXHVERTlDXFx1REVBMC1cXHVERUQwXFx1REYwMC1cXHVERjFGXFx1REYyRC1cXHVERjQwXFx1REY0Mi1cXHVERjQ5XFx1REY1MC1cXHVERjc1XFx1REY4MC1cXHVERjlEXFx1REZBMC1cXHVERkMzXFx1REZDOC1cXHVERkNGXXxcXHVEODAxW1xcdURDNTAtXFx1REM5RFxcdUREMDAtXFx1REQyN1xcdUREMzAtXFx1REQ2M1xcdURFMDAtXFx1REYzNlxcdURGNDAtXFx1REY1NVxcdURGNjAtXFx1REY2N118XFx1RDgwMltcXHVEQzAwLVxcdURDMDVcXHVEQzA4XFx1REMwQS1cXHVEQzM1XFx1REMzN1xcdURDMzhcXHVEQzNDXFx1REMzRi1cXHVEQzU1XFx1REM2MC1cXHVEQzc2XFx1REM4MC1cXHVEQzlFXFx1RENFMC1cXHVEQ0YyXFx1RENGNFxcdURDRjVcXHVERDAwLVxcdUREMTVcXHVERDIwLVxcdUREMzlcXHVERDgwLVxcdUREQjdcXHVEREJFXFx1RERCRlxcdURFMDBcXHVERTEwLVxcdURFMTNcXHVERTE1LVxcdURFMTdcXHVERTE5LVxcdURFMzVcXHVERTYwLVxcdURFN0NcXHVERTgwLVxcdURFOUNcXHVERUMwLVxcdURFQzdcXHVERUM5LVxcdURFRTRcXHVERjAwLVxcdURGMzVcXHVERjQwLVxcdURGNTVcXHVERjYwLVxcdURGNzJcXHVERjgwLVxcdURGOTFdfFxcdUQ4MDNbXFx1REMwMC1cXHVEQzQ4XFx1REQwMC1cXHVERDIzXFx1REU4MC1cXHVERUE5XFx1REVCMFxcdURFQjFcXHVERjAwLVxcdURGMUNcXHVERjI3XFx1REYzMC1cXHVERjQ1XFx1REZCMC1cXHVERkM0XFx1REZFMC1cXHVERkY2XXxcXHVEODA0W1xcdURDMDMtXFx1REMzN1xcdURDODMtXFx1RENBRlxcdURDRDAtXFx1RENFOFxcdUREMDMtXFx1REQyNlxcdURENDRcXHVERDQ3XFx1REQ1MC1cXHVERDcyXFx1REQ3NlxcdUREODMtXFx1RERCMlxcdUREQzEtXFx1RERDNFxcdUREREFcXHVERERDXFx1REUwMC1cXHVERTExXFx1REUxMy1cXHVERTJCXFx1REU4MC1cXHVERTg2XFx1REU4OFxcdURFOEEtXFx1REU4RFxcdURFOEYtXFx1REU5RFxcdURFOUYtXFx1REVBOFxcdURFQjAtXFx1REVERVxcdURGMDUtXFx1REYwQ1xcdURGMEZcXHVERjEwXFx1REYxMy1cXHVERjI4XFx1REYyQS1cXHVERjMwXFx1REYzMlxcdURGMzNcXHVERjM1LVxcdURGMzlcXHVERjNEXFx1REY1MFxcdURGNUQtXFx1REY2MV18XFx1RDgwNVtcXHVEQzAwLVxcdURDMzRcXHVEQzQ3LVxcdURDNEFcXHVEQzVGLVxcdURDNjFcXHVEQzgwLVxcdURDQUZcXHVEQ0M0XFx1RENDNVxcdURDQzdcXHVERDgwLVxcdUREQUVcXHVEREQ4LVxcdUREREJcXHVERTAwLVxcdURFMkZcXHVERTQ0XFx1REU4MC1cXHVERUFBXFx1REVCOFxcdURGMDAtXFx1REYxQV18XFx1RDgwNltcXHVEQzAwLVxcdURDMkJcXHVEQ0ZGLVxcdUREMDZcXHVERDA5XFx1REQwQy1cXHVERDEzXFx1REQxNVxcdUREMTZcXHVERDE4LVxcdUREMkZcXHVERDNGXFx1REQ0MVxcdUREQTAtXFx1RERBN1xcdUREQUEtXFx1REREMFxcdURERTFcXHVEREUzXFx1REUwMFxcdURFMEItXFx1REUzMlxcdURFM0FcXHVERTUwXFx1REU1Qy1cXHVERTg5XFx1REU5RFxcdURFQzAtXFx1REVGOF18XFx1RDgwN1tcXHVEQzAwLVxcdURDMDhcXHVEQzBBLVxcdURDMkVcXHVEQzQwXFx1REM3Mi1cXHVEQzhGXFx1REQwMC1cXHVERDA2XFx1REQwOFxcdUREMDlcXHVERDBCLVxcdUREMzBcXHVERDQ2XFx1REQ2MC1cXHVERDY1XFx1REQ2N1xcdURENjhcXHVERDZBLVxcdUREODlcXHVERDk4XFx1REVFMC1cXHVERUYyXFx1REZCMF18XFx1RDgwOFtcXHVEQzAwLVxcdURGOTldfFxcdUQ4MDlbXFx1REM4MC1cXHVERDQzXXxbXFx1RDgwQ1xcdUQ4MUMtXFx1RDgyMFxcdUQ4MjJcXHVEODQwLVxcdUQ4NjhcXHVEODZBLVxcdUQ4NkNcXHVEODZGLVxcdUQ4NzJcXHVEODc0LVxcdUQ4NzlcXHVEODgwLVxcdUQ4ODNdW1xcdURDMDAtXFx1REZGRl18XFx1RDgwRFtcXHVEQzAwLVxcdURDMkVdfFxcdUQ4MTFbXFx1REMwMC1cXHVERTQ2XXxcXHVEODFBW1xcdURDMDAtXFx1REUzOFxcdURFNDAtXFx1REU1RVxcdURFRDAtXFx1REVFRFxcdURGMDAtXFx1REYyRlxcdURGNjMtXFx1REY3N1xcdURGN0QtXFx1REY4Rl18XFx1RDgxQltcXHVERjAwLVxcdURGNEFcXHVERjUwXXxcXHVEODIxW1xcdURDMDAtXFx1REZGN118XFx1RDgyM1tcXHVEQzAwLVxcdURDRDVcXHVERDAwLVxcdUREMDhdfFxcdUQ4MkNbXFx1REMwMC1cXHVERDFFXFx1REQ1MC1cXHVERDUyXFx1REQ2NC1cXHVERDY3XFx1REQ3MC1cXHVERUZCXXxcXHVEODJGW1xcdURDMDAtXFx1REM2QVxcdURDNzAtXFx1REM3Q1xcdURDODAtXFx1REM4OFxcdURDOTAtXFx1REM5OV18XFx1RDgzOFtcXHVERDAwLVxcdUREMkNcXHVERDRFXFx1REVDMC1cXHVERUVCXXxcXHVEODNBW1xcdURDMDAtXFx1RENDNF18XFx1RDgzQltcXHVERTAwLVxcdURFMDNcXHVERTA1LVxcdURFMUZcXHVERTIxXFx1REUyMlxcdURFMjRcXHVERTI3XFx1REUyOS1cXHVERTMyXFx1REUzNC1cXHVERTM3XFx1REUzOVxcdURFM0JcXHVERTQyXFx1REU0N1xcdURFNDlcXHVERTRCXFx1REU0RC1cXHVERTRGXFx1REU1MVxcdURFNTJcXHVERTU0XFx1REU1N1xcdURFNTlcXHVERTVCXFx1REU1RFxcdURFNUZcXHVERTYxXFx1REU2MlxcdURFNjRcXHVERTY3LVxcdURFNkFcXHVERTZDLVxcdURFNzJcXHVERTc0LVxcdURFNzdcXHVERTc5LVxcdURFN0NcXHVERTdFXFx1REU4MC1cXHVERTg5XFx1REU4Qi1cXHVERTlCXFx1REVBMS1cXHVERUEzXFx1REVBNS1cXHVERUE5XFx1REVBQi1cXHVERUJCXXxcXHVEODY5W1xcdURDMDAtXFx1REVERFxcdURGMDAtXFx1REZGRl18XFx1RDg2RFtcXHVEQzAwLVxcdURGMzRcXHVERjQwLVxcdURGRkZdfFxcdUQ4NkVbXFx1REMwMC1cXHVEQzFEXFx1REMyMC1cXHVERkZGXXxcXHVEODczW1xcdURDMDAtXFx1REVBMVxcdURFQjAtXFx1REZGRl18XFx1RDg3QVtcXHVEQzAwLVxcdURGRTBdfFxcdUQ4N0VbXFx1REMwMC1cXHVERTFEXXxcXHVEODg0W1xcdURDMDAtXFx1REY0QV0nXG4gICAgfSxcbiAgICB7XG4gICAgICAgICduYW1lJzogJ0x0JyxcbiAgICAgICAgJ2FsaWFzJzogJ1RpdGxlY2FzZV9MZXR0ZXInLFxuICAgICAgICAnYm1wJzogJ1xcdTAxQzVcXHUwMUM4XFx1MDFDQlxcdTAxRjJcXHUxRjg4LVxcdTFGOEZcXHUxRjk4LVxcdTFGOUZcXHUxRkE4LVxcdTFGQUZcXHUxRkJDXFx1MUZDQ1xcdTFGRkMnXG4gICAgfSxcbiAgICB7XG4gICAgICAgICduYW1lJzogJ0x1JyxcbiAgICAgICAgJ2FsaWFzJzogJ1VwcGVyY2FzZV9MZXR0ZXInLFxuICAgICAgICAnYm1wJzogJ0EtWlxceEMwLVxceEQ2XFx4RDgtXFx4REVcXHUwMTAwXFx1MDEwMlxcdTAxMDRcXHUwMTA2XFx1MDEwOFxcdTAxMEFcXHUwMTBDXFx1MDEwRVxcdTAxMTBcXHUwMTEyXFx1MDExNFxcdTAxMTZcXHUwMTE4XFx1MDExQVxcdTAxMUNcXHUwMTFFXFx1MDEyMFxcdTAxMjJcXHUwMTI0XFx1MDEyNlxcdTAxMjhcXHUwMTJBXFx1MDEyQ1xcdTAxMkVcXHUwMTMwXFx1MDEzMlxcdTAxMzRcXHUwMTM2XFx1MDEzOVxcdTAxM0JcXHUwMTNEXFx1MDEzRlxcdTAxNDFcXHUwMTQzXFx1MDE0NVxcdTAxNDdcXHUwMTRBXFx1MDE0Q1xcdTAxNEVcXHUwMTUwXFx1MDE1MlxcdTAxNTRcXHUwMTU2XFx1MDE1OFxcdTAxNUFcXHUwMTVDXFx1MDE1RVxcdTAxNjBcXHUwMTYyXFx1MDE2NFxcdTAxNjZcXHUwMTY4XFx1MDE2QVxcdTAxNkNcXHUwMTZFXFx1MDE3MFxcdTAxNzJcXHUwMTc0XFx1MDE3NlxcdTAxNzhcXHUwMTc5XFx1MDE3QlxcdTAxN0RcXHUwMTgxXFx1MDE4MlxcdTAxODRcXHUwMTg2XFx1MDE4N1xcdTAxODktXFx1MDE4QlxcdTAxOEUtXFx1MDE5MVxcdTAxOTNcXHUwMTk0XFx1MDE5Ni1cXHUwMTk4XFx1MDE5Q1xcdTAxOURcXHUwMTlGXFx1MDFBMFxcdTAxQTJcXHUwMUE0XFx1MDFBNlxcdTAxQTdcXHUwMUE5XFx1MDFBQ1xcdTAxQUVcXHUwMUFGXFx1MDFCMS1cXHUwMUIzXFx1MDFCNVxcdTAxQjdcXHUwMUI4XFx1MDFCQ1xcdTAxQzRcXHUwMUM3XFx1MDFDQVxcdTAxQ0RcXHUwMUNGXFx1MDFEMVxcdTAxRDNcXHUwMUQ1XFx1MDFEN1xcdTAxRDlcXHUwMURCXFx1MDFERVxcdTAxRTBcXHUwMUUyXFx1MDFFNFxcdTAxRTZcXHUwMUU4XFx1MDFFQVxcdTAxRUNcXHUwMUVFXFx1MDFGMVxcdTAxRjRcXHUwMUY2LVxcdTAxRjhcXHUwMUZBXFx1MDFGQ1xcdTAxRkVcXHUwMjAwXFx1MDIwMlxcdTAyMDRcXHUwMjA2XFx1MDIwOFxcdTAyMEFcXHUwMjBDXFx1MDIwRVxcdTAyMTBcXHUwMjEyXFx1MDIxNFxcdTAyMTZcXHUwMjE4XFx1MDIxQVxcdTAyMUNcXHUwMjFFXFx1MDIyMFxcdTAyMjJcXHUwMjI0XFx1MDIyNlxcdTAyMjhcXHUwMjJBXFx1MDIyQ1xcdTAyMkVcXHUwMjMwXFx1MDIzMlxcdTAyM0FcXHUwMjNCXFx1MDIzRFxcdTAyM0VcXHUwMjQxXFx1MDI0My1cXHUwMjQ2XFx1MDI0OFxcdTAyNEFcXHUwMjRDXFx1MDI0RVxcdTAzNzBcXHUwMzcyXFx1MDM3NlxcdTAzN0ZcXHUwMzg2XFx1MDM4OC1cXHUwMzhBXFx1MDM4Q1xcdTAzOEVcXHUwMzhGXFx1MDM5MS1cXHUwM0ExXFx1MDNBMy1cXHUwM0FCXFx1MDNDRlxcdTAzRDItXFx1MDNENFxcdTAzRDhcXHUwM0RBXFx1MDNEQ1xcdTAzREVcXHUwM0UwXFx1MDNFMlxcdTAzRTRcXHUwM0U2XFx1MDNFOFxcdTAzRUFcXHUwM0VDXFx1MDNFRVxcdTAzRjRcXHUwM0Y3XFx1MDNGOVxcdTAzRkFcXHUwM0ZELVxcdTA0MkZcXHUwNDYwXFx1MDQ2MlxcdTA0NjRcXHUwNDY2XFx1MDQ2OFxcdTA0NkFcXHUwNDZDXFx1MDQ2RVxcdTA0NzBcXHUwNDcyXFx1MDQ3NFxcdTA0NzZcXHUwNDc4XFx1MDQ3QVxcdTA0N0NcXHUwNDdFXFx1MDQ4MFxcdTA0OEFcXHUwNDhDXFx1MDQ4RVxcdTA0OTBcXHUwNDkyXFx1MDQ5NFxcdTA0OTZcXHUwNDk4XFx1MDQ5QVxcdTA0OUNcXHUwNDlFXFx1MDRBMFxcdTA0QTJcXHUwNEE0XFx1MDRBNlxcdTA0QThcXHUwNEFBXFx1MDRBQ1xcdTA0QUVcXHUwNEIwXFx1MDRCMlxcdTA0QjRcXHUwNEI2XFx1MDRCOFxcdTA0QkFcXHUwNEJDXFx1MDRCRVxcdTA0QzBcXHUwNEMxXFx1MDRDM1xcdTA0QzVcXHUwNEM3XFx1MDRDOVxcdTA0Q0JcXHUwNENEXFx1MDREMFxcdTA0RDJcXHUwNEQ0XFx1MDRENlxcdTA0RDhcXHUwNERBXFx1MDREQ1xcdTA0REVcXHUwNEUwXFx1MDRFMlxcdTA0RTRcXHUwNEU2XFx1MDRFOFxcdTA0RUFcXHUwNEVDXFx1MDRFRVxcdTA0RjBcXHUwNEYyXFx1MDRGNFxcdTA0RjZcXHUwNEY4XFx1MDRGQVxcdTA0RkNcXHUwNEZFXFx1MDUwMFxcdTA1MDJcXHUwNTA0XFx1MDUwNlxcdTA1MDhcXHUwNTBBXFx1MDUwQ1xcdTA1MEVcXHUwNTEwXFx1MDUxMlxcdTA1MTRcXHUwNTE2XFx1MDUxOFxcdTA1MUFcXHUwNTFDXFx1MDUxRVxcdTA1MjBcXHUwNTIyXFx1MDUyNFxcdTA1MjZcXHUwNTI4XFx1MDUyQVxcdTA1MkNcXHUwNTJFXFx1MDUzMS1cXHUwNTU2XFx1MTBBMC1cXHUxMEM1XFx1MTBDN1xcdTEwQ0RcXHUxM0EwLVxcdTEzRjVcXHUxQzkwLVxcdTFDQkFcXHUxQ0JELVxcdTFDQkZcXHUxRTAwXFx1MUUwMlxcdTFFMDRcXHUxRTA2XFx1MUUwOFxcdTFFMEFcXHUxRTBDXFx1MUUwRVxcdTFFMTBcXHUxRTEyXFx1MUUxNFxcdTFFMTZcXHUxRTE4XFx1MUUxQVxcdTFFMUNcXHUxRTFFXFx1MUUyMFxcdTFFMjJcXHUxRTI0XFx1MUUyNlxcdTFFMjhcXHUxRTJBXFx1MUUyQ1xcdTFFMkVcXHUxRTMwXFx1MUUzMlxcdTFFMzRcXHUxRTM2XFx1MUUzOFxcdTFFM0FcXHUxRTNDXFx1MUUzRVxcdTFFNDBcXHUxRTQyXFx1MUU0NFxcdTFFNDZcXHUxRTQ4XFx1MUU0QVxcdTFFNENcXHUxRTRFXFx1MUU1MFxcdTFFNTJcXHUxRTU0XFx1MUU1NlxcdTFFNThcXHUxRTVBXFx1MUU1Q1xcdTFFNUVcXHUxRTYwXFx1MUU2MlxcdTFFNjRcXHUxRTY2XFx1MUU2OFxcdTFFNkFcXHUxRTZDXFx1MUU2RVxcdTFFNzBcXHUxRTcyXFx1MUU3NFxcdTFFNzZcXHUxRTc4XFx1MUU3QVxcdTFFN0NcXHUxRTdFXFx1MUU4MFxcdTFFODJcXHUxRTg0XFx1MUU4NlxcdTFFODhcXHUxRThBXFx1MUU4Q1xcdTFFOEVcXHUxRTkwXFx1MUU5MlxcdTFFOTRcXHUxRTlFXFx1MUVBMFxcdTFFQTJcXHUxRUE0XFx1MUVBNlxcdTFFQThcXHUxRUFBXFx1MUVBQ1xcdTFFQUVcXHUxRUIwXFx1MUVCMlxcdTFFQjRcXHUxRUI2XFx1MUVCOFxcdTFFQkFcXHUxRUJDXFx1MUVCRVxcdTFFQzBcXHUxRUMyXFx1MUVDNFxcdTFFQzZcXHUxRUM4XFx1MUVDQVxcdTFFQ0NcXHUxRUNFXFx1MUVEMFxcdTFFRDJcXHUxRUQ0XFx1MUVENlxcdTFFRDhcXHUxRURBXFx1MUVEQ1xcdTFFREVcXHUxRUUwXFx1MUVFMlxcdTFFRTRcXHUxRUU2XFx1MUVFOFxcdTFFRUFcXHUxRUVDXFx1MUVFRVxcdTFFRjBcXHUxRUYyXFx1MUVGNFxcdTFFRjZcXHUxRUY4XFx1MUVGQVxcdTFFRkNcXHUxRUZFXFx1MUYwOC1cXHUxRjBGXFx1MUYxOC1cXHUxRjFEXFx1MUYyOC1cXHUxRjJGXFx1MUYzOC1cXHUxRjNGXFx1MUY0OC1cXHUxRjREXFx1MUY1OVxcdTFGNUJcXHUxRjVEXFx1MUY1RlxcdTFGNjgtXFx1MUY2RlxcdTFGQjgtXFx1MUZCQlxcdTFGQzgtXFx1MUZDQlxcdTFGRDgtXFx1MUZEQlxcdTFGRTgtXFx1MUZFQ1xcdTFGRjgtXFx1MUZGQlxcdTIxMDJcXHUyMTA3XFx1MjEwQi1cXHUyMTBEXFx1MjExMC1cXHUyMTEyXFx1MjExNVxcdTIxMTktXFx1MjExRFxcdTIxMjRcXHUyMTI2XFx1MjEyOFxcdTIxMkEtXFx1MjEyRFxcdTIxMzAtXFx1MjEzM1xcdTIxM0VcXHUyMTNGXFx1MjE0NVxcdTIxODNcXHUyQzAwLVxcdTJDMkVcXHUyQzYwXFx1MkM2Mi1cXHUyQzY0XFx1MkM2N1xcdTJDNjlcXHUyQzZCXFx1MkM2RC1cXHUyQzcwXFx1MkM3MlxcdTJDNzVcXHUyQzdFLVxcdTJDODBcXHUyQzgyXFx1MkM4NFxcdTJDODZcXHUyQzg4XFx1MkM4QVxcdTJDOENcXHUyQzhFXFx1MkM5MFxcdTJDOTJcXHUyQzk0XFx1MkM5NlxcdTJDOThcXHUyQzlBXFx1MkM5Q1xcdTJDOUVcXHUyQ0EwXFx1MkNBMlxcdTJDQTRcXHUyQ0E2XFx1MkNBOFxcdTJDQUFcXHUyQ0FDXFx1MkNBRVxcdTJDQjBcXHUyQ0IyXFx1MkNCNFxcdTJDQjZcXHUyQ0I4XFx1MkNCQVxcdTJDQkNcXHUyQ0JFXFx1MkNDMFxcdTJDQzJcXHUyQ0M0XFx1MkNDNlxcdTJDQzhcXHUyQ0NBXFx1MkNDQ1xcdTJDQ0VcXHUyQ0QwXFx1MkNEMlxcdTJDRDRcXHUyQ0Q2XFx1MkNEOFxcdTJDREFcXHUyQ0RDXFx1MkNERVxcdTJDRTBcXHUyQ0UyXFx1MkNFQlxcdTJDRURcXHUyQ0YyXFx1QTY0MFxcdUE2NDJcXHVBNjQ0XFx1QTY0NlxcdUE2NDhcXHVBNjRBXFx1QTY0Q1xcdUE2NEVcXHVBNjUwXFx1QTY1MlxcdUE2NTRcXHVBNjU2XFx1QTY1OFxcdUE2NUFcXHVBNjVDXFx1QTY1RVxcdUE2NjBcXHVBNjYyXFx1QTY2NFxcdUE2NjZcXHVBNjY4XFx1QTY2QVxcdUE2NkNcXHVBNjgwXFx1QTY4MlxcdUE2ODRcXHVBNjg2XFx1QTY4OFxcdUE2OEFcXHVBNjhDXFx1QTY4RVxcdUE2OTBcXHVBNjkyXFx1QTY5NFxcdUE2OTZcXHVBNjk4XFx1QTY5QVxcdUE3MjJcXHVBNzI0XFx1QTcyNlxcdUE3MjhcXHVBNzJBXFx1QTcyQ1xcdUE3MkVcXHVBNzMyXFx1QTczNFxcdUE3MzZcXHVBNzM4XFx1QTczQVxcdUE3M0NcXHVBNzNFXFx1QTc0MFxcdUE3NDJcXHVBNzQ0XFx1QTc0NlxcdUE3NDhcXHVBNzRBXFx1QTc0Q1xcdUE3NEVcXHVBNzUwXFx1QTc1MlxcdUE3NTRcXHVBNzU2XFx1QTc1OFxcdUE3NUFcXHVBNzVDXFx1QTc1RVxcdUE3NjBcXHVBNzYyXFx1QTc2NFxcdUE3NjZcXHVBNzY4XFx1QTc2QVxcdUE3NkNcXHVBNzZFXFx1QTc3OVxcdUE3N0JcXHVBNzdEXFx1QTc3RVxcdUE3ODBcXHVBNzgyXFx1QTc4NFxcdUE3ODZcXHVBNzhCXFx1QTc4RFxcdUE3OTBcXHVBNzkyXFx1QTc5NlxcdUE3OThcXHVBNzlBXFx1QTc5Q1xcdUE3OUVcXHVBN0EwXFx1QTdBMlxcdUE3QTRcXHVBN0E2XFx1QTdBOFxcdUE3QUEtXFx1QTdBRVxcdUE3QjAtXFx1QTdCNFxcdUE3QjZcXHVBN0I4XFx1QTdCQVxcdUE3QkNcXHVBN0JFXFx1QTdDMlxcdUE3QzQtXFx1QTdDN1xcdUE3QzlcXHVBN0Y1XFx1RkYyMS1cXHVGRjNBJyxcbiAgICAgICAgJ2FzdHJhbCc6ICdcXHVEODAxW1xcdURDMDAtXFx1REMyN1xcdURDQjAtXFx1RENEM118XFx1RDgwM1tcXHVEQzgwLVxcdURDQjJdfFxcdUQ4MDZbXFx1RENBMC1cXHVEQ0JGXXxcXHVEODFCW1xcdURFNDAtXFx1REU1Rl18XFx1RDgzNVtcXHVEQzAwLVxcdURDMTlcXHVEQzM0LVxcdURDNERcXHVEQzY4LVxcdURDODFcXHVEQzlDXFx1REM5RVxcdURDOUZcXHVEQ0EyXFx1RENBNVxcdURDQTZcXHVEQ0E5LVxcdURDQUNcXHVEQ0FFLVxcdURDQjVcXHVEQ0QwLVxcdURDRTlcXHVERDA0XFx1REQwNVxcdUREMDctXFx1REQwQVxcdUREMEQtXFx1REQxNFxcdUREMTYtXFx1REQxQ1xcdUREMzhcXHVERDM5XFx1REQzQi1cXHVERDNFXFx1REQ0MC1cXHVERDQ0XFx1REQ0NlxcdURENEEtXFx1REQ1MFxcdURENkMtXFx1REQ4NVxcdUREQTAtXFx1RERCOVxcdURERDQtXFx1RERFRFxcdURFMDgtXFx1REUyMVxcdURFM0MtXFx1REU1NVxcdURFNzAtXFx1REU4OVxcdURFQTgtXFx1REVDMFxcdURFRTItXFx1REVGQVxcdURGMUMtXFx1REYzNFxcdURGNTYtXFx1REY2RVxcdURGOTAtXFx1REZBOFxcdURGQ0FdfFxcdUQ4M0FbXFx1REQwMC1cXHVERDIxXSdcbiAgICB9LFxuICAgIHtcbiAgICAgICAgJ25hbWUnOiAnTScsXG4gICAgICAgICdhbGlhcyc6ICdNYXJrJyxcbiAgICAgICAgJ2JtcCc6ICdcXHUwMzAwLVxcdTAzNkZcXHUwNDgzLVxcdTA0ODlcXHUwNTkxLVxcdTA1QkRcXHUwNUJGXFx1MDVDMVxcdTA1QzJcXHUwNUM0XFx1MDVDNVxcdTA1QzdcXHUwNjEwLVxcdTA2MUFcXHUwNjRCLVxcdTA2NUZcXHUwNjcwXFx1MDZENi1cXHUwNkRDXFx1MDZERi1cXHUwNkU0XFx1MDZFN1xcdTA2RThcXHUwNkVBLVxcdTA2RURcXHUwNzExXFx1MDczMC1cXHUwNzRBXFx1MDdBNi1cXHUwN0IwXFx1MDdFQi1cXHUwN0YzXFx1MDdGRFxcdTA4MTYtXFx1MDgxOVxcdTA4MUItXFx1MDgyM1xcdTA4MjUtXFx1MDgyN1xcdTA4MjktXFx1MDgyRFxcdTA4NTktXFx1MDg1QlxcdTA4RDMtXFx1MDhFMVxcdTA4RTMtXFx1MDkwM1xcdTA5M0EtXFx1MDkzQ1xcdTA5M0UtXFx1MDk0RlxcdTA5NTEtXFx1MDk1N1xcdTA5NjJcXHUwOTYzXFx1MDk4MS1cXHUwOTgzXFx1MDlCQ1xcdTA5QkUtXFx1MDlDNFxcdTA5QzdcXHUwOUM4XFx1MDlDQi1cXHUwOUNEXFx1MDlEN1xcdTA5RTJcXHUwOUUzXFx1MDlGRVxcdTBBMDEtXFx1MEEwM1xcdTBBM0NcXHUwQTNFLVxcdTBBNDJcXHUwQTQ3XFx1MEE0OFxcdTBBNEItXFx1MEE0RFxcdTBBNTFcXHUwQTcwXFx1MEE3MVxcdTBBNzVcXHUwQTgxLVxcdTBBODNcXHUwQUJDXFx1MEFCRS1cXHUwQUM1XFx1MEFDNy1cXHUwQUM5XFx1MEFDQi1cXHUwQUNEXFx1MEFFMlxcdTBBRTNcXHUwQUZBLVxcdTBBRkZcXHUwQjAxLVxcdTBCMDNcXHUwQjNDXFx1MEIzRS1cXHUwQjQ0XFx1MEI0N1xcdTBCNDhcXHUwQjRCLVxcdTBCNERcXHUwQjU1LVxcdTBCNTdcXHUwQjYyXFx1MEI2M1xcdTBCODJcXHUwQkJFLVxcdTBCQzJcXHUwQkM2LVxcdTBCQzhcXHUwQkNBLVxcdTBCQ0RcXHUwQkQ3XFx1MEMwMC1cXHUwQzA0XFx1MEMzRS1cXHUwQzQ0XFx1MEM0Ni1cXHUwQzQ4XFx1MEM0QS1cXHUwQzREXFx1MEM1NVxcdTBDNTZcXHUwQzYyXFx1MEM2M1xcdTBDODEtXFx1MEM4M1xcdTBDQkNcXHUwQ0JFLVxcdTBDQzRcXHUwQ0M2LVxcdTBDQzhcXHUwQ0NBLVxcdTBDQ0RcXHUwQ0Q1XFx1MENENlxcdTBDRTJcXHUwQ0UzXFx1MEQwMC1cXHUwRDAzXFx1MEQzQlxcdTBEM0NcXHUwRDNFLVxcdTBENDRcXHUwRDQ2LVxcdTBENDhcXHUwRDRBLVxcdTBENERcXHUwRDU3XFx1MEQ2MlxcdTBENjNcXHUwRDgxLVxcdTBEODNcXHUwRENBXFx1MERDRi1cXHUwREQ0XFx1MERENlxcdTBERDgtXFx1MERERlxcdTBERjJcXHUwREYzXFx1MEUzMVxcdTBFMzQtXFx1MEUzQVxcdTBFNDctXFx1MEU0RVxcdTBFQjFcXHUwRUI0LVxcdTBFQkNcXHUwRUM4LVxcdTBFQ0RcXHUwRjE4XFx1MEYxOVxcdTBGMzVcXHUwRjM3XFx1MEYzOVxcdTBGM0VcXHUwRjNGXFx1MEY3MS1cXHUwRjg0XFx1MEY4NlxcdTBGODdcXHUwRjhELVxcdTBGOTdcXHUwRjk5LVxcdTBGQkNcXHUwRkM2XFx1MTAyQi1cXHUxMDNFXFx1MTA1Ni1cXHUxMDU5XFx1MTA1RS1cXHUxMDYwXFx1MTA2Mi1cXHUxMDY0XFx1MTA2Ny1cXHUxMDZEXFx1MTA3MS1cXHUxMDc0XFx1MTA4Mi1cXHUxMDhEXFx1MTA4RlxcdTEwOUEtXFx1MTA5RFxcdTEzNUQtXFx1MTM1RlxcdTE3MTItXFx1MTcxNFxcdTE3MzItXFx1MTczNFxcdTE3NTJcXHUxNzUzXFx1MTc3MlxcdTE3NzNcXHUxN0I0LVxcdTE3RDNcXHUxN0REXFx1MTgwQi1cXHUxODBEXFx1MTg4NVxcdTE4ODZcXHUxOEE5XFx1MTkyMC1cXHUxOTJCXFx1MTkzMC1cXHUxOTNCXFx1MUExNy1cXHUxQTFCXFx1MUE1NS1cXHUxQTVFXFx1MUE2MC1cXHUxQTdDXFx1MUE3RlxcdTFBQjAtXFx1MUFDMFxcdTFCMDAtXFx1MUIwNFxcdTFCMzQtXFx1MUI0NFxcdTFCNkItXFx1MUI3M1xcdTFCODAtXFx1MUI4MlxcdTFCQTEtXFx1MUJBRFxcdTFCRTYtXFx1MUJGM1xcdTFDMjQtXFx1MUMzN1xcdTFDRDAtXFx1MUNEMlxcdTFDRDQtXFx1MUNFOFxcdTFDRURcXHUxQ0Y0XFx1MUNGNy1cXHUxQ0Y5XFx1MURDMC1cXHUxREY5XFx1MURGQi1cXHUxREZGXFx1MjBEMC1cXHUyMEYwXFx1MkNFRi1cXHUyQ0YxXFx1MkQ3RlxcdTJERTAtXFx1MkRGRlxcdTMwMkEtXFx1MzAyRlxcdTMwOTlcXHUzMDlBXFx1QTY2Ri1cXHVBNjcyXFx1QTY3NC1cXHVBNjdEXFx1QTY5RVxcdUE2OUZcXHVBNkYwXFx1QTZGMVxcdUE4MDJcXHVBODA2XFx1QTgwQlxcdUE4MjMtXFx1QTgyN1xcdUE4MkNcXHVBODgwXFx1QTg4MVxcdUE4QjQtXFx1QThDNVxcdUE4RTAtXFx1QThGMVxcdUE4RkZcXHVBOTI2LVxcdUE5MkRcXHVBOTQ3LVxcdUE5NTNcXHVBOTgwLVxcdUE5ODNcXHVBOUIzLVxcdUE5QzBcXHVBOUU1XFx1QUEyOS1cXHVBQTM2XFx1QUE0M1xcdUFBNENcXHVBQTREXFx1QUE3Qi1cXHVBQTdEXFx1QUFCMFxcdUFBQjItXFx1QUFCNFxcdUFBQjdcXHVBQUI4XFx1QUFCRVxcdUFBQkZcXHVBQUMxXFx1QUFFQi1cXHVBQUVGXFx1QUFGNVxcdUFBRjZcXHVBQkUzLVxcdUFCRUFcXHVBQkVDXFx1QUJFRFxcdUZCMUVcXHVGRTAwLVxcdUZFMEZcXHVGRTIwLVxcdUZFMkYnLFxuICAgICAgICAnYXN0cmFsJzogJ1xcdUQ4MDBbXFx1RERGRFxcdURFRTBcXHVERjc2LVxcdURGN0FdfFxcdUQ4MDJbXFx1REUwMS1cXHVERTAzXFx1REUwNVxcdURFMDZcXHVERTBDLVxcdURFMEZcXHVERTM4LVxcdURFM0FcXHVERTNGXFx1REVFNVxcdURFRTZdfFxcdUQ4MDNbXFx1REQyNC1cXHVERDI3XFx1REVBQlxcdURFQUNcXHVERjQ2LVxcdURGNTBdfFxcdUQ4MDRbXFx1REMwMC1cXHVEQzAyXFx1REMzOC1cXHVEQzQ2XFx1REM3Ri1cXHVEQzgyXFx1RENCMC1cXHVEQ0JBXFx1REQwMC1cXHVERDAyXFx1REQyNy1cXHVERDM0XFx1REQ0NVxcdURENDZcXHVERDczXFx1REQ4MC1cXHVERDgyXFx1RERCMy1cXHVEREMwXFx1RERDOS1cXHVERENDXFx1RERDRVxcdUREQ0ZcXHVERTJDLVxcdURFMzdcXHVERTNFXFx1REVERi1cXHVERUVBXFx1REYwMC1cXHVERjAzXFx1REYzQlxcdURGM0NcXHVERjNFLVxcdURGNDRcXHVERjQ3XFx1REY0OFxcdURGNEItXFx1REY0RFxcdURGNTdcXHVERjYyXFx1REY2M1xcdURGNjYtXFx1REY2Q1xcdURGNzAtXFx1REY3NF18XFx1RDgwNVtcXHVEQzM1LVxcdURDNDZcXHVEQzVFXFx1RENCMC1cXHVEQ0MzXFx1RERBRi1cXHVEREI1XFx1RERCOC1cXHVEREMwXFx1REREQ1xcdURERERcXHVERTMwLVxcdURFNDBcXHVERUFCLVxcdURFQjdcXHVERjFELVxcdURGMkJdfFxcdUQ4MDZbXFx1REMyQy1cXHVEQzNBXFx1REQzMC1cXHVERDM1XFx1REQzN1xcdUREMzhcXHVERDNCLVxcdUREM0VcXHVERDQwXFx1REQ0MlxcdURENDNcXHVEREQxLVxcdURERDdcXHVERERBLVxcdURERTBcXHVEREU0XFx1REUwMS1cXHVERTBBXFx1REUzMy1cXHVERTM5XFx1REUzQi1cXHVERTNFXFx1REU0N1xcdURFNTEtXFx1REU1QlxcdURFOEEtXFx1REU5OV18XFx1RDgwN1tcXHVEQzJGLVxcdURDMzZcXHVEQzM4LVxcdURDM0ZcXHVEQzkyLVxcdURDQTdcXHVEQ0E5LVxcdURDQjZcXHVERDMxLVxcdUREMzZcXHVERDNBXFx1REQzQ1xcdUREM0RcXHVERDNGLVxcdURENDVcXHVERDQ3XFx1REQ4QS1cXHVERDhFXFx1REQ5MFxcdUREOTFcXHVERDkzLVxcdUREOTdcXHVERUYzLVxcdURFRjZdfFxcdUQ4MUFbXFx1REVGMC1cXHVERUY0XFx1REYzMC1cXHVERjM2XXxcXHVEODFCW1xcdURGNEZcXHVERjUxLVxcdURGODdcXHVERjhGLVxcdURGOTJcXHVERkU0XFx1REZGMFxcdURGRjFdfFxcdUQ4MkZbXFx1REM5RFxcdURDOUVdfFxcdUQ4MzRbXFx1REQ2NS1cXHVERDY5XFx1REQ2RC1cXHVERDcyXFx1REQ3Qi1cXHVERDgyXFx1REQ4NS1cXHVERDhCXFx1RERBQS1cXHVEREFEXFx1REU0Mi1cXHVERTQ0XXxcXHVEODM2W1xcdURFMDAtXFx1REUzNlxcdURFM0ItXFx1REU2Q1xcdURFNzVcXHVERTg0XFx1REU5Qi1cXHVERTlGXFx1REVBMS1cXHVERUFGXXxcXHVEODM4W1xcdURDMDAtXFx1REMwNlxcdURDMDgtXFx1REMxOFxcdURDMUItXFx1REMyMVxcdURDMjNcXHVEQzI0XFx1REMyNi1cXHVEQzJBXFx1REQzMC1cXHVERDM2XFx1REVFQy1cXHVERUVGXXxcXHVEODNBW1xcdURDRDAtXFx1RENENlxcdURENDQtXFx1REQ0QV18XFx1REI0MFtcXHVERDAwLVxcdURERUZdJ1xuICAgIH0sXG4gICAge1xuICAgICAgICAnbmFtZSc6ICdNYycsXG4gICAgICAgICdhbGlhcyc6ICdTcGFjaW5nX01hcmsnLFxuICAgICAgICAnYm1wJzogJ1xcdTA5MDNcXHUwOTNCXFx1MDkzRS1cXHUwOTQwXFx1MDk0OS1cXHUwOTRDXFx1MDk0RVxcdTA5NEZcXHUwOTgyXFx1MDk4M1xcdTA5QkUtXFx1MDlDMFxcdTA5QzdcXHUwOUM4XFx1MDlDQlxcdTA5Q0NcXHUwOUQ3XFx1MEEwM1xcdTBBM0UtXFx1MEE0MFxcdTBBODNcXHUwQUJFLVxcdTBBQzBcXHUwQUM5XFx1MEFDQlxcdTBBQ0NcXHUwQjAyXFx1MEIwM1xcdTBCM0VcXHUwQjQwXFx1MEI0N1xcdTBCNDhcXHUwQjRCXFx1MEI0Q1xcdTBCNTdcXHUwQkJFXFx1MEJCRlxcdTBCQzFcXHUwQkMyXFx1MEJDNi1cXHUwQkM4XFx1MEJDQS1cXHUwQkNDXFx1MEJEN1xcdTBDMDEtXFx1MEMwM1xcdTBDNDEtXFx1MEM0NFxcdTBDODJcXHUwQzgzXFx1MENCRVxcdTBDQzAtXFx1MENDNFxcdTBDQzdcXHUwQ0M4XFx1MENDQVxcdTBDQ0JcXHUwQ0Q1XFx1MENENlxcdTBEMDJcXHUwRDAzXFx1MEQzRS1cXHUwRDQwXFx1MEQ0Ni1cXHUwRDQ4XFx1MEQ0QS1cXHUwRDRDXFx1MEQ1N1xcdTBEODJcXHUwRDgzXFx1MERDRi1cXHUwREQxXFx1MEREOC1cXHUwRERGXFx1MERGMlxcdTBERjNcXHUwRjNFXFx1MEYzRlxcdTBGN0ZcXHUxMDJCXFx1MTAyQ1xcdTEwMzFcXHUxMDM4XFx1MTAzQlxcdTEwM0NcXHUxMDU2XFx1MTA1N1xcdTEwNjItXFx1MTA2NFxcdTEwNjctXFx1MTA2RFxcdTEwODNcXHUxMDg0XFx1MTA4Ny1cXHUxMDhDXFx1MTA4RlxcdTEwOUEtXFx1MTA5Q1xcdTE3QjZcXHUxN0JFLVxcdTE3QzVcXHUxN0M3XFx1MTdDOFxcdTE5MjMtXFx1MTkyNlxcdTE5MjktXFx1MTkyQlxcdTE5MzBcXHUxOTMxXFx1MTkzMy1cXHUxOTM4XFx1MUExOVxcdTFBMUFcXHUxQTU1XFx1MUE1N1xcdTFBNjFcXHUxQTYzXFx1MUE2NFxcdTFBNkQtXFx1MUE3MlxcdTFCMDRcXHUxQjM1XFx1MUIzQlxcdTFCM0QtXFx1MUI0MVxcdTFCNDNcXHUxQjQ0XFx1MUI4MlxcdTFCQTFcXHUxQkE2XFx1MUJBN1xcdTFCQUFcXHUxQkU3XFx1MUJFQS1cXHUxQkVDXFx1MUJFRVxcdTFCRjJcXHUxQkYzXFx1MUMyNC1cXHUxQzJCXFx1MUMzNFxcdTFDMzVcXHUxQ0UxXFx1MUNGN1xcdTMwMkVcXHUzMDJGXFx1QTgyM1xcdUE4MjRcXHVBODI3XFx1QTg4MFxcdUE4ODFcXHVBOEI0LVxcdUE4QzNcXHVBOTUyXFx1QTk1M1xcdUE5ODNcXHVBOUI0XFx1QTlCNVxcdUE5QkFcXHVBOUJCXFx1QTlCRS1cXHVBOUMwXFx1QUEyRlxcdUFBMzBcXHVBQTMzXFx1QUEzNFxcdUFBNERcXHVBQTdCXFx1QUE3RFxcdUFBRUJcXHVBQUVFXFx1QUFFRlxcdUFBRjVcXHVBQkUzXFx1QUJFNFxcdUFCRTZcXHVBQkU3XFx1QUJFOVxcdUFCRUFcXHVBQkVDJyxcbiAgICAgICAgJ2FzdHJhbCc6ICdcXHVEODA0W1xcdURDMDBcXHVEQzAyXFx1REM4MlxcdURDQjAtXFx1RENCMlxcdURDQjdcXHVEQ0I4XFx1REQyQ1xcdURENDVcXHVERDQ2XFx1REQ4MlxcdUREQjMtXFx1RERCNVxcdUREQkZcXHVEREMwXFx1RERDRVxcdURFMkMtXFx1REUyRVxcdURFMzJcXHVERTMzXFx1REUzNVxcdURFRTAtXFx1REVFMlxcdURGMDJcXHVERjAzXFx1REYzRVxcdURGM0ZcXHVERjQxLVxcdURGNDRcXHVERjQ3XFx1REY0OFxcdURGNEItXFx1REY0RFxcdURGNTdcXHVERjYyXFx1REY2M118XFx1RDgwNVtcXHVEQzM1LVxcdURDMzdcXHVEQzQwXFx1REM0MVxcdURDNDVcXHVEQ0IwLVxcdURDQjJcXHVEQ0I5XFx1RENCQi1cXHVEQ0JFXFx1RENDMVxcdUREQUYtXFx1RERCMVxcdUREQjgtXFx1RERCQlxcdUREQkVcXHVERTMwLVxcdURFMzJcXHVERTNCXFx1REUzQ1xcdURFM0VcXHVERUFDXFx1REVBRVxcdURFQUZcXHVERUI2XFx1REYyMFxcdURGMjFcXHVERjI2XXxcXHVEODA2W1xcdURDMkMtXFx1REMyRVxcdURDMzhcXHVERDMwLVxcdUREMzVcXHVERDM3XFx1REQzOFxcdUREM0RcXHVERDQwXFx1REQ0MlxcdURERDEtXFx1REREM1xcdUREREMtXFx1RERERlxcdURERTRcXHVERTM5XFx1REU1N1xcdURFNThcXHVERTk3XXxcXHVEODA3W1xcdURDMkZcXHVEQzNFXFx1RENBOVxcdURDQjFcXHVEQ0I0XFx1REQ4QS1cXHVERDhFXFx1REQ5M1xcdUREOTRcXHVERDk2XFx1REVGNVxcdURFRjZdfFxcdUQ4MUJbXFx1REY1MS1cXHVERjg3XFx1REZGMFxcdURGRjFdfFxcdUQ4MzRbXFx1REQ2NVxcdURENjZcXHVERDZELVxcdURENzJdJ1xuICAgIH0sXG4gICAge1xuICAgICAgICAnbmFtZSc6ICdNZScsXG4gICAgICAgICdhbGlhcyc6ICdFbmNsb3NpbmdfTWFyaycsXG4gICAgICAgICdibXAnOiAnXFx1MDQ4OFxcdTA0ODlcXHUxQUJFXFx1MjBERC1cXHUyMEUwXFx1MjBFMi1cXHUyMEU0XFx1QTY3MC1cXHVBNjcyJ1xuICAgIH0sXG4gICAge1xuICAgICAgICAnbmFtZSc6ICdNbicsXG4gICAgICAgICdhbGlhcyc6ICdOb25zcGFjaW5nX01hcmsnLFxuICAgICAgICAnYm1wJzogJ1xcdTAzMDAtXFx1MDM2RlxcdTA0ODMtXFx1MDQ4N1xcdTA1OTEtXFx1MDVCRFxcdTA1QkZcXHUwNUMxXFx1MDVDMlxcdTA1QzRcXHUwNUM1XFx1MDVDN1xcdTA2MTAtXFx1MDYxQVxcdTA2NEItXFx1MDY1RlxcdTA2NzBcXHUwNkQ2LVxcdTA2RENcXHUwNkRGLVxcdTA2RTRcXHUwNkU3XFx1MDZFOFxcdTA2RUEtXFx1MDZFRFxcdTA3MTFcXHUwNzMwLVxcdTA3NEFcXHUwN0E2LVxcdTA3QjBcXHUwN0VCLVxcdTA3RjNcXHUwN0ZEXFx1MDgxNi1cXHUwODE5XFx1MDgxQi1cXHUwODIzXFx1MDgyNS1cXHUwODI3XFx1MDgyOS1cXHUwODJEXFx1MDg1OS1cXHUwODVCXFx1MDhEMy1cXHUwOEUxXFx1MDhFMy1cXHUwOTAyXFx1MDkzQVxcdTA5M0NcXHUwOTQxLVxcdTA5NDhcXHUwOTREXFx1MDk1MS1cXHUwOTU3XFx1MDk2MlxcdTA5NjNcXHUwOTgxXFx1MDlCQ1xcdTA5QzEtXFx1MDlDNFxcdTA5Q0RcXHUwOUUyXFx1MDlFM1xcdTA5RkVcXHUwQTAxXFx1MEEwMlxcdTBBM0NcXHUwQTQxXFx1MEE0MlxcdTBBNDdcXHUwQTQ4XFx1MEE0Qi1cXHUwQTREXFx1MEE1MVxcdTBBNzBcXHUwQTcxXFx1MEE3NVxcdTBBODFcXHUwQTgyXFx1MEFCQ1xcdTBBQzEtXFx1MEFDNVxcdTBBQzdcXHUwQUM4XFx1MEFDRFxcdTBBRTJcXHUwQUUzXFx1MEFGQS1cXHUwQUZGXFx1MEIwMVxcdTBCM0NcXHUwQjNGXFx1MEI0MS1cXHUwQjQ0XFx1MEI0RFxcdTBCNTVcXHUwQjU2XFx1MEI2MlxcdTBCNjNcXHUwQjgyXFx1MEJDMFxcdTBCQ0RcXHUwQzAwXFx1MEMwNFxcdTBDM0UtXFx1MEM0MFxcdTBDNDYtXFx1MEM0OFxcdTBDNEEtXFx1MEM0RFxcdTBDNTVcXHUwQzU2XFx1MEM2MlxcdTBDNjNcXHUwQzgxXFx1MENCQ1xcdTBDQkZcXHUwQ0M2XFx1MENDQ1xcdTBDQ0RcXHUwQ0UyXFx1MENFM1xcdTBEMDBcXHUwRDAxXFx1MEQzQlxcdTBEM0NcXHUwRDQxLVxcdTBENDRcXHUwRDREXFx1MEQ2MlxcdTBENjNcXHUwRDgxXFx1MERDQVxcdTBERDItXFx1MERENFxcdTBERDZcXHUwRTMxXFx1MEUzNC1cXHUwRTNBXFx1MEU0Ny1cXHUwRTRFXFx1MEVCMVxcdTBFQjQtXFx1MEVCQ1xcdTBFQzgtXFx1MEVDRFxcdTBGMThcXHUwRjE5XFx1MEYzNVxcdTBGMzdcXHUwRjM5XFx1MEY3MS1cXHUwRjdFXFx1MEY4MC1cXHUwRjg0XFx1MEY4NlxcdTBGODdcXHUwRjhELVxcdTBGOTdcXHUwRjk5LVxcdTBGQkNcXHUwRkM2XFx1MTAyRC1cXHUxMDMwXFx1MTAzMi1cXHUxMDM3XFx1MTAzOVxcdTEwM0FcXHUxMDNEXFx1MTAzRVxcdTEwNThcXHUxMDU5XFx1MTA1RS1cXHUxMDYwXFx1MTA3MS1cXHUxMDc0XFx1MTA4MlxcdTEwODVcXHUxMDg2XFx1MTA4RFxcdTEwOURcXHUxMzVELVxcdTEzNUZcXHUxNzEyLVxcdTE3MTRcXHUxNzMyLVxcdTE3MzRcXHUxNzUyXFx1MTc1M1xcdTE3NzJcXHUxNzczXFx1MTdCNFxcdTE3QjVcXHUxN0I3LVxcdTE3QkRcXHUxN0M2XFx1MTdDOS1cXHUxN0QzXFx1MTdERFxcdTE4MEItXFx1MTgwRFxcdTE4ODVcXHUxODg2XFx1MThBOVxcdTE5MjAtXFx1MTkyMlxcdTE5MjdcXHUxOTI4XFx1MTkzMlxcdTE5MzktXFx1MTkzQlxcdTFBMTdcXHUxQTE4XFx1MUExQlxcdTFBNTZcXHUxQTU4LVxcdTFBNUVcXHUxQTYwXFx1MUE2MlxcdTFBNjUtXFx1MUE2Q1xcdTFBNzMtXFx1MUE3Q1xcdTFBN0ZcXHUxQUIwLVxcdTFBQkRcXHUxQUJGXFx1MUFDMFxcdTFCMDAtXFx1MUIwM1xcdTFCMzRcXHUxQjM2LVxcdTFCM0FcXHUxQjNDXFx1MUI0MlxcdTFCNkItXFx1MUI3M1xcdTFCODBcXHUxQjgxXFx1MUJBMi1cXHUxQkE1XFx1MUJBOFxcdTFCQTlcXHUxQkFCLVxcdTFCQURcXHUxQkU2XFx1MUJFOFxcdTFCRTlcXHUxQkVEXFx1MUJFRi1cXHUxQkYxXFx1MUMyQy1cXHUxQzMzXFx1MUMzNlxcdTFDMzdcXHUxQ0QwLVxcdTFDRDJcXHUxQ0Q0LVxcdTFDRTBcXHUxQ0UyLVxcdTFDRThcXHUxQ0VEXFx1MUNGNFxcdTFDRjhcXHUxQ0Y5XFx1MURDMC1cXHUxREY5XFx1MURGQi1cXHUxREZGXFx1MjBEMC1cXHUyMERDXFx1MjBFMVxcdTIwRTUtXFx1MjBGMFxcdTJDRUYtXFx1MkNGMVxcdTJEN0ZcXHUyREUwLVxcdTJERkZcXHUzMDJBLVxcdTMwMkRcXHUzMDk5XFx1MzA5QVxcdUE2NkZcXHVBNjc0LVxcdUE2N0RcXHVBNjlFXFx1QTY5RlxcdUE2RjBcXHVBNkYxXFx1QTgwMlxcdUE4MDZcXHVBODBCXFx1QTgyNVxcdUE4MjZcXHVBODJDXFx1QThDNFxcdUE4QzVcXHVBOEUwLVxcdUE4RjFcXHVBOEZGXFx1QTkyNi1cXHVBOTJEXFx1QTk0Ny1cXHVBOTUxXFx1QTk4MC1cXHVBOTgyXFx1QTlCM1xcdUE5QjYtXFx1QTlCOVxcdUE5QkNcXHVBOUJEXFx1QTlFNVxcdUFBMjktXFx1QUEyRVxcdUFBMzFcXHVBQTMyXFx1QUEzNVxcdUFBMzZcXHVBQTQzXFx1QUE0Q1xcdUFBN0NcXHVBQUIwXFx1QUFCMi1cXHVBQUI0XFx1QUFCN1xcdUFBQjhcXHVBQUJFXFx1QUFCRlxcdUFBQzFcXHVBQUVDXFx1QUFFRFxcdUFBRjZcXHVBQkU1XFx1QUJFOFxcdUFCRURcXHVGQjFFXFx1RkUwMC1cXHVGRTBGXFx1RkUyMC1cXHVGRTJGJyxcbiAgICAgICAgJ2FzdHJhbCc6ICdcXHVEODAwW1xcdURERkRcXHVERUUwXFx1REY3Ni1cXHVERjdBXXxcXHVEODAyW1xcdURFMDEtXFx1REUwM1xcdURFMDVcXHVERTA2XFx1REUwQy1cXHVERTBGXFx1REUzOC1cXHVERTNBXFx1REUzRlxcdURFRTVcXHVERUU2XXxcXHVEODAzW1xcdUREMjQtXFx1REQyN1xcdURFQUJcXHVERUFDXFx1REY0Ni1cXHVERjUwXXxcXHVEODA0W1xcdURDMDFcXHVEQzM4LVxcdURDNDZcXHVEQzdGLVxcdURDODFcXHVEQ0IzLVxcdURDQjZcXHVEQ0I5XFx1RENCQVxcdUREMDAtXFx1REQwMlxcdUREMjctXFx1REQyQlxcdUREMkQtXFx1REQzNFxcdURENzNcXHVERDgwXFx1REQ4MVxcdUREQjYtXFx1RERCRVxcdUREQzktXFx1RERDQ1xcdUREQ0ZcXHVERTJGLVxcdURFMzFcXHVERTM0XFx1REUzNlxcdURFMzdcXHVERTNFXFx1REVERlxcdURFRTMtXFx1REVFQVxcdURGMDBcXHVERjAxXFx1REYzQlxcdURGM0NcXHVERjQwXFx1REY2Ni1cXHVERjZDXFx1REY3MC1cXHVERjc0XXxcXHVEODA1W1xcdURDMzgtXFx1REMzRlxcdURDNDItXFx1REM0NFxcdURDNDZcXHVEQzVFXFx1RENCMy1cXHVEQ0I4XFx1RENCQVxcdURDQkZcXHVEQ0MwXFx1RENDMlxcdURDQzNcXHVEREIyLVxcdUREQjVcXHVEREJDXFx1RERCRFxcdUREQkZcXHVEREMwXFx1REREQ1xcdURERERcXHVERTMzLVxcdURFM0FcXHVERTNEXFx1REUzRlxcdURFNDBcXHVERUFCXFx1REVBRFxcdURFQjAtXFx1REVCNVxcdURFQjdcXHVERjFELVxcdURGMUZcXHVERjIyLVxcdURGMjVcXHVERjI3LVxcdURGMkJdfFxcdUQ4MDZbXFx1REMyRi1cXHVEQzM3XFx1REMzOVxcdURDM0FcXHVERDNCXFx1REQzQ1xcdUREM0VcXHVERDQzXFx1RERENC1cXHVEREQ3XFx1REREQVxcdUREREJcXHVEREUwXFx1REUwMS1cXHVERTBBXFx1REUzMy1cXHVERTM4XFx1REUzQi1cXHVERTNFXFx1REU0N1xcdURFNTEtXFx1REU1NlxcdURFNTktXFx1REU1QlxcdURFOEEtXFx1REU5NlxcdURFOThcXHVERTk5XXxcXHVEODA3W1xcdURDMzAtXFx1REMzNlxcdURDMzgtXFx1REMzRFxcdURDM0ZcXHVEQzkyLVxcdURDQTdcXHVEQ0FBLVxcdURDQjBcXHVEQ0IyXFx1RENCM1xcdURDQjVcXHVEQ0I2XFx1REQzMS1cXHVERDM2XFx1REQzQVxcdUREM0NcXHVERDNEXFx1REQzRi1cXHVERDQ1XFx1REQ0N1xcdUREOTBcXHVERDkxXFx1REQ5NVxcdUREOTdcXHVERUYzXFx1REVGNF18XFx1RDgxQVtcXHVERUYwLVxcdURFRjRcXHVERjMwLVxcdURGMzZdfFxcdUQ4MUJbXFx1REY0RlxcdURGOEYtXFx1REY5MlxcdURGRTRdfFxcdUQ4MkZbXFx1REM5RFxcdURDOUVdfFxcdUQ4MzRbXFx1REQ2Ny1cXHVERDY5XFx1REQ3Qi1cXHVERDgyXFx1REQ4NS1cXHVERDhCXFx1RERBQS1cXHVEREFEXFx1REU0Mi1cXHVERTQ0XXxcXHVEODM2W1xcdURFMDAtXFx1REUzNlxcdURFM0ItXFx1REU2Q1xcdURFNzVcXHVERTg0XFx1REU5Qi1cXHVERTlGXFx1REVBMS1cXHVERUFGXXxcXHVEODM4W1xcdURDMDAtXFx1REMwNlxcdURDMDgtXFx1REMxOFxcdURDMUItXFx1REMyMVxcdURDMjNcXHVEQzI0XFx1REMyNi1cXHVEQzJBXFx1REQzMC1cXHVERDM2XFx1REVFQy1cXHVERUVGXXxcXHVEODNBW1xcdURDRDAtXFx1RENENlxcdURENDQtXFx1REQ0QV18XFx1REI0MFtcXHVERDAwLVxcdURERUZdJ1xuICAgIH0sXG4gICAge1xuICAgICAgICAnbmFtZSc6ICdOJyxcbiAgICAgICAgJ2FsaWFzJzogJ051bWJlcicsXG4gICAgICAgICdibXAnOiAnMC05XFx4QjJcXHhCM1xceEI5XFx4QkMtXFx4QkVcXHUwNjYwLVxcdTA2NjlcXHUwNkYwLVxcdTA2RjlcXHUwN0MwLVxcdTA3QzlcXHUwOTY2LVxcdTA5NkZcXHUwOUU2LVxcdTA5RUZcXHUwOUY0LVxcdTA5RjlcXHUwQTY2LVxcdTBBNkZcXHUwQUU2LVxcdTBBRUZcXHUwQjY2LVxcdTBCNkZcXHUwQjcyLVxcdTBCNzdcXHUwQkU2LVxcdTBCRjJcXHUwQzY2LVxcdTBDNkZcXHUwQzc4LVxcdTBDN0VcXHUwQ0U2LVxcdTBDRUZcXHUwRDU4LVxcdTBENUVcXHUwRDY2LVxcdTBENzhcXHUwREU2LVxcdTBERUZcXHUwRTUwLVxcdTBFNTlcXHUwRUQwLVxcdTBFRDlcXHUwRjIwLVxcdTBGMzNcXHUxMDQwLVxcdTEwNDlcXHUxMDkwLVxcdTEwOTlcXHUxMzY5LVxcdTEzN0NcXHUxNkVFLVxcdTE2RjBcXHUxN0UwLVxcdTE3RTlcXHUxN0YwLVxcdTE3RjlcXHUxODEwLVxcdTE4MTlcXHUxOTQ2LVxcdTE5NEZcXHUxOUQwLVxcdTE5REFcXHUxQTgwLVxcdTFBODlcXHUxQTkwLVxcdTFBOTlcXHUxQjUwLVxcdTFCNTlcXHUxQkIwLVxcdTFCQjlcXHUxQzQwLVxcdTFDNDlcXHUxQzUwLVxcdTFDNTlcXHUyMDcwXFx1MjA3NC1cXHUyMDc5XFx1MjA4MC1cXHUyMDg5XFx1MjE1MC1cXHUyMTgyXFx1MjE4NS1cXHUyMTg5XFx1MjQ2MC1cXHUyNDlCXFx1MjRFQS1cXHUyNEZGXFx1Mjc3Ni1cXHUyNzkzXFx1MkNGRFxcdTMwMDdcXHUzMDIxLVxcdTMwMjlcXHUzMDM4LVxcdTMwM0FcXHUzMTkyLVxcdTMxOTVcXHUzMjIwLVxcdTMyMjlcXHUzMjQ4LVxcdTMyNEZcXHUzMjUxLVxcdTMyNUZcXHUzMjgwLVxcdTMyODlcXHUzMkIxLVxcdTMyQkZcXHVBNjIwLVxcdUE2MjlcXHVBNkU2LVxcdUE2RUZcXHVBODMwLVxcdUE4MzVcXHVBOEQwLVxcdUE4RDlcXHVBOTAwLVxcdUE5MDlcXHVBOUQwLVxcdUE5RDlcXHVBOUYwLVxcdUE5RjlcXHVBQTUwLVxcdUFBNTlcXHVBQkYwLVxcdUFCRjlcXHVGRjEwLVxcdUZGMTknLFxuICAgICAgICAnYXN0cmFsJzogJ1xcdUQ4MDBbXFx1REQwNy1cXHVERDMzXFx1REQ0MC1cXHVERDc4XFx1REQ4QVxcdUREOEJcXHVERUUxLVxcdURFRkJcXHVERjIwLVxcdURGMjNcXHVERjQxXFx1REY0QVxcdURGRDEtXFx1REZENV18XFx1RDgwMVtcXHVEQ0EwLVxcdURDQTldfFxcdUQ4MDJbXFx1REM1OC1cXHVEQzVGXFx1REM3OS1cXHVEQzdGXFx1RENBNy1cXHVEQ0FGXFx1RENGQi1cXHVEQ0ZGXFx1REQxNi1cXHVERDFCXFx1RERCQ1xcdUREQkRcXHVEREMwLVxcdUREQ0ZcXHVEREQyLVxcdURERkZcXHVERTQwLVxcdURFNDhcXHVERTdEXFx1REU3RVxcdURFOUQtXFx1REU5RlxcdURFRUItXFx1REVFRlxcdURGNTgtXFx1REY1RlxcdURGNzgtXFx1REY3RlxcdURGQTktXFx1REZBRl18XFx1RDgwM1tcXHVEQ0ZBLVxcdURDRkZcXHVERDMwLVxcdUREMzlcXHVERTYwLVxcdURFN0VcXHVERjFELVxcdURGMjZcXHVERjUxLVxcdURGNTRcXHVERkM1LVxcdURGQ0JdfFxcdUQ4MDRbXFx1REM1Mi1cXHVEQzZGXFx1RENGMC1cXHVEQ0Y5XFx1REQzNi1cXHVERDNGXFx1REREMC1cXHVEREQ5XFx1RERFMS1cXHVEREY0XFx1REVGMC1cXHVERUY5XXxcXHVEODA1W1xcdURDNTAtXFx1REM1OVxcdURDRDAtXFx1RENEOVxcdURFNTAtXFx1REU1OVxcdURFQzAtXFx1REVDOVxcdURGMzAtXFx1REYzQl18XFx1RDgwNltcXHVEQ0UwLVxcdURDRjJcXHVERDUwLVxcdURENTldfFxcdUQ4MDdbXFx1REM1MC1cXHVEQzZDXFx1REQ1MC1cXHVERDU5XFx1RERBMC1cXHVEREE5XFx1REZDMC1cXHVERkQ0XXxcXHVEODA5W1xcdURDMDAtXFx1REM2RV18XFx1RDgxQVtcXHVERTYwLVxcdURFNjlcXHVERjUwLVxcdURGNTlcXHVERjVCLVxcdURGNjFdfFxcdUQ4MUJbXFx1REU4MC1cXHVERTk2XXxcXHVEODM0W1xcdURFRTAtXFx1REVGM1xcdURGNjAtXFx1REY3OF18XFx1RDgzNVtcXHVERkNFLVxcdURGRkZdfFxcdUQ4MzhbXFx1REQ0MC1cXHVERDQ5XFx1REVGMC1cXHVERUY5XXxcXHVEODNBW1xcdURDQzctXFx1RENDRlxcdURENTAtXFx1REQ1OV18XFx1RDgzQltcXHVEQzcxLVxcdURDQUJcXHVEQ0FELVxcdURDQUZcXHVEQ0IxLVxcdURDQjRcXHVERDAxLVxcdUREMkRcXHVERDJGLVxcdUREM0RdfFxcdUQ4M0NbXFx1REQwMC1cXHVERDBDXXxcXHVEODNFW1xcdURGRjAtXFx1REZGOV0nXG4gICAgfSxcbiAgICB7XG4gICAgICAgICduYW1lJzogJ05kJyxcbiAgICAgICAgJ2FsaWFzJzogJ0RlY2ltYWxfTnVtYmVyJyxcbiAgICAgICAgJ2JtcCc6ICcwLTlcXHUwNjYwLVxcdTA2NjlcXHUwNkYwLVxcdTA2RjlcXHUwN0MwLVxcdTA3QzlcXHUwOTY2LVxcdTA5NkZcXHUwOUU2LVxcdTA5RUZcXHUwQTY2LVxcdTBBNkZcXHUwQUU2LVxcdTBBRUZcXHUwQjY2LVxcdTBCNkZcXHUwQkU2LVxcdTBCRUZcXHUwQzY2LVxcdTBDNkZcXHUwQ0U2LVxcdTBDRUZcXHUwRDY2LVxcdTBENkZcXHUwREU2LVxcdTBERUZcXHUwRTUwLVxcdTBFNTlcXHUwRUQwLVxcdTBFRDlcXHUwRjIwLVxcdTBGMjlcXHUxMDQwLVxcdTEwNDlcXHUxMDkwLVxcdTEwOTlcXHUxN0UwLVxcdTE3RTlcXHUxODEwLVxcdTE4MTlcXHUxOTQ2LVxcdTE5NEZcXHUxOUQwLVxcdTE5RDlcXHUxQTgwLVxcdTFBODlcXHUxQTkwLVxcdTFBOTlcXHUxQjUwLVxcdTFCNTlcXHUxQkIwLVxcdTFCQjlcXHUxQzQwLVxcdTFDNDlcXHUxQzUwLVxcdTFDNTlcXHVBNjIwLVxcdUE2MjlcXHVBOEQwLVxcdUE4RDlcXHVBOTAwLVxcdUE5MDlcXHVBOUQwLVxcdUE5RDlcXHVBOUYwLVxcdUE5RjlcXHVBQTUwLVxcdUFBNTlcXHVBQkYwLVxcdUFCRjlcXHVGRjEwLVxcdUZGMTknLFxuICAgICAgICAnYXN0cmFsJzogJ1xcdUQ4MDFbXFx1RENBMC1cXHVEQ0E5XXxcXHVEODAzW1xcdUREMzAtXFx1REQzOV18XFx1RDgwNFtcXHVEQzY2LVxcdURDNkZcXHVEQ0YwLVxcdURDRjlcXHVERDM2LVxcdUREM0ZcXHVEREQwLVxcdURERDlcXHVERUYwLVxcdURFRjldfFxcdUQ4MDVbXFx1REM1MC1cXHVEQzU5XFx1RENEMC1cXHVEQ0Q5XFx1REU1MC1cXHVERTU5XFx1REVDMC1cXHVERUM5XFx1REYzMC1cXHVERjM5XXxcXHVEODA2W1xcdURDRTAtXFx1RENFOVxcdURENTAtXFx1REQ1OV18XFx1RDgwN1tcXHVEQzUwLVxcdURDNTlcXHVERDUwLVxcdURENTlcXHVEREEwLVxcdUREQTldfFxcdUQ4MUFbXFx1REU2MC1cXHVERTY5XFx1REY1MC1cXHVERjU5XXxcXHVEODM1W1xcdURGQ0UtXFx1REZGRl18XFx1RDgzOFtcXHVERDQwLVxcdURENDlcXHVERUYwLVxcdURFRjldfFxcdUQ4M0FbXFx1REQ1MC1cXHVERDU5XXxcXHVEODNFW1xcdURGRjAtXFx1REZGOV0nXG4gICAgfSxcbiAgICB7XG4gICAgICAgICduYW1lJzogJ05sJyxcbiAgICAgICAgJ2FsaWFzJzogJ0xldHRlcl9OdW1iZXInLFxuICAgICAgICAnYm1wJzogJ1xcdTE2RUUtXFx1MTZGMFxcdTIxNjAtXFx1MjE4MlxcdTIxODUtXFx1MjE4OFxcdTMwMDdcXHUzMDIxLVxcdTMwMjlcXHUzMDM4LVxcdTMwM0FcXHVBNkU2LVxcdUE2RUYnLFxuICAgICAgICAnYXN0cmFsJzogJ1xcdUQ4MDBbXFx1REQ0MC1cXHVERDc0XFx1REY0MVxcdURGNEFcXHVERkQxLVxcdURGRDVdfFxcdUQ4MDlbXFx1REMwMC1cXHVEQzZFXSdcbiAgICB9LFxuICAgIHtcbiAgICAgICAgJ25hbWUnOiAnTm8nLFxuICAgICAgICAnYWxpYXMnOiAnT3RoZXJfTnVtYmVyJyxcbiAgICAgICAgJ2JtcCc6ICdcXHhCMlxceEIzXFx4QjlcXHhCQy1cXHhCRVxcdTA5RjQtXFx1MDlGOVxcdTBCNzItXFx1MEI3N1xcdTBCRjAtXFx1MEJGMlxcdTBDNzgtXFx1MEM3RVxcdTBENTgtXFx1MEQ1RVxcdTBENzAtXFx1MEQ3OFxcdTBGMkEtXFx1MEYzM1xcdTEzNjktXFx1MTM3Q1xcdTE3RjAtXFx1MTdGOVxcdTE5REFcXHUyMDcwXFx1MjA3NC1cXHUyMDc5XFx1MjA4MC1cXHUyMDg5XFx1MjE1MC1cXHUyMTVGXFx1MjE4OVxcdTI0NjAtXFx1MjQ5QlxcdTI0RUEtXFx1MjRGRlxcdTI3NzYtXFx1Mjc5M1xcdTJDRkRcXHUzMTkyLVxcdTMxOTVcXHUzMjIwLVxcdTMyMjlcXHUzMjQ4LVxcdTMyNEZcXHUzMjUxLVxcdTMyNUZcXHUzMjgwLVxcdTMyODlcXHUzMkIxLVxcdTMyQkZcXHVBODMwLVxcdUE4MzUnLFxuICAgICAgICAnYXN0cmFsJzogJ1xcdUQ4MDBbXFx1REQwNy1cXHVERDMzXFx1REQ3NS1cXHVERDc4XFx1REQ4QVxcdUREOEJcXHVERUUxLVxcdURFRkJcXHVERjIwLVxcdURGMjNdfFxcdUQ4MDJbXFx1REM1OC1cXHVEQzVGXFx1REM3OS1cXHVEQzdGXFx1RENBNy1cXHVEQ0FGXFx1RENGQi1cXHVEQ0ZGXFx1REQxNi1cXHVERDFCXFx1RERCQ1xcdUREQkRcXHVEREMwLVxcdUREQ0ZcXHVEREQyLVxcdURERkZcXHVERTQwLVxcdURFNDhcXHVERTdEXFx1REU3RVxcdURFOUQtXFx1REU5RlxcdURFRUItXFx1REVFRlxcdURGNTgtXFx1REY1RlxcdURGNzgtXFx1REY3RlxcdURGQTktXFx1REZBRl18XFx1RDgwM1tcXHVEQ0ZBLVxcdURDRkZcXHVERTYwLVxcdURFN0VcXHVERjFELVxcdURGMjZcXHVERjUxLVxcdURGNTRcXHVERkM1LVxcdURGQ0JdfFxcdUQ4MDRbXFx1REM1Mi1cXHVEQzY1XFx1RERFMS1cXHVEREY0XXxcXHVEODA1W1xcdURGM0FcXHVERjNCXXxcXHVEODA2W1xcdURDRUEtXFx1RENGMl18XFx1RDgwN1tcXHVEQzVBLVxcdURDNkNcXHVERkMwLVxcdURGRDRdfFxcdUQ4MUFbXFx1REY1Qi1cXHVERjYxXXxcXHVEODFCW1xcdURFODAtXFx1REU5Nl18XFx1RDgzNFtcXHVERUUwLVxcdURFRjNcXHVERjYwLVxcdURGNzhdfFxcdUQ4M0FbXFx1RENDNy1cXHVEQ0NGXXxcXHVEODNCW1xcdURDNzEtXFx1RENBQlxcdURDQUQtXFx1RENBRlxcdURDQjEtXFx1RENCNFxcdUREMDEtXFx1REQyRFxcdUREMkYtXFx1REQzRF18XFx1RDgzQ1tcXHVERDAwLVxcdUREMENdJ1xuICAgIH0sXG4gICAge1xuICAgICAgICAnbmFtZSc6ICdQJyxcbiAgICAgICAgJ2FsaWFzJzogJ1B1bmN0dWF0aW9uJyxcbiAgICAgICAgJ2JtcCc6ICchLSMlLVxcXFwqLC1cXFxcLzo7XFxcXD9AXFxcXFstXFxcXF1fXFxcXHtcXFxcfVxceEExXFx4QTdcXHhBQlxceEI2XFx4QjdcXHhCQlxceEJGXFx1MDM3RVxcdTAzODdcXHUwNTVBLVxcdTA1NUZcXHUwNTg5XFx1MDU4QVxcdTA1QkVcXHUwNUMwXFx1MDVDM1xcdTA1QzZcXHUwNUYzXFx1MDVGNFxcdTA2MDlcXHUwNjBBXFx1MDYwQ1xcdTA2MERcXHUwNjFCXFx1MDYxRVxcdTA2MUZcXHUwNjZBLVxcdTA2NkRcXHUwNkQ0XFx1MDcwMC1cXHUwNzBEXFx1MDdGNy1cXHUwN0Y5XFx1MDgzMC1cXHUwODNFXFx1MDg1RVxcdTA5NjRcXHUwOTY1XFx1MDk3MFxcdTA5RkRcXHUwQTc2XFx1MEFGMFxcdTBDNzdcXHUwQzg0XFx1MERGNFxcdTBFNEZcXHUwRTVBXFx1MEU1QlxcdTBGMDQtXFx1MEYxMlxcdTBGMTRcXHUwRjNBLVxcdTBGM0RcXHUwRjg1XFx1MEZEMC1cXHUwRkQ0XFx1MEZEOVxcdTBGREFcXHUxMDRBLVxcdTEwNEZcXHUxMEZCXFx1MTM2MC1cXHUxMzY4XFx1MTQwMFxcdTE2NkVcXHUxNjlCXFx1MTY5Q1xcdTE2RUItXFx1MTZFRFxcdTE3MzVcXHUxNzM2XFx1MTdENC1cXHUxN0Q2XFx1MTdEOC1cXHUxN0RBXFx1MTgwMC1cXHUxODBBXFx1MTk0NFxcdTE5NDVcXHUxQTFFXFx1MUExRlxcdTFBQTAtXFx1MUFBNlxcdTFBQTgtXFx1MUFBRFxcdTFCNUEtXFx1MUI2MFxcdTFCRkMtXFx1MUJGRlxcdTFDM0ItXFx1MUMzRlxcdTFDN0VcXHUxQzdGXFx1MUNDMC1cXHUxQ0M3XFx1MUNEM1xcdTIwMTAtXFx1MjAyN1xcdTIwMzAtXFx1MjA0M1xcdTIwNDUtXFx1MjA1MVxcdTIwNTMtXFx1MjA1RVxcdTIwN0RcXHUyMDdFXFx1MjA4RFxcdTIwOEVcXHUyMzA4LVxcdTIzMEJcXHUyMzI5XFx1MjMyQVxcdTI3NjgtXFx1Mjc3NVxcdTI3QzVcXHUyN0M2XFx1MjdFNi1cXHUyN0VGXFx1Mjk4My1cXHUyOTk4XFx1MjlEOC1cXHUyOURCXFx1MjlGQ1xcdTI5RkRcXHUyQ0Y5LVxcdTJDRkNcXHUyQ0ZFXFx1MkNGRlxcdTJENzBcXHUyRTAwLVxcdTJFMkVcXHUyRTMwLVxcdTJFNEZcXHUyRTUyXFx1MzAwMS1cXHUzMDAzXFx1MzAwOC1cXHUzMDExXFx1MzAxNC1cXHUzMDFGXFx1MzAzMFxcdTMwM0RcXHUzMEEwXFx1MzBGQlxcdUE0RkVcXHVBNEZGXFx1QTYwRC1cXHVBNjBGXFx1QTY3M1xcdUE2N0VcXHVBNkYyLVxcdUE2RjdcXHVBODc0LVxcdUE4NzdcXHVBOENFXFx1QThDRlxcdUE4RjgtXFx1QThGQVxcdUE4RkNcXHVBOTJFXFx1QTkyRlxcdUE5NUZcXHVBOUMxLVxcdUE5Q0RcXHVBOURFXFx1QTlERlxcdUFBNUMtXFx1QUE1RlxcdUFBREVcXHVBQURGXFx1QUFGMFxcdUFBRjFcXHVBQkVCXFx1RkQzRVxcdUZEM0ZcXHVGRTEwLVxcdUZFMTlcXHVGRTMwLVxcdUZFNTJcXHVGRTU0LVxcdUZFNjFcXHVGRTYzXFx1RkU2OFxcdUZFNkFcXHVGRTZCXFx1RkYwMS1cXHVGRjAzXFx1RkYwNS1cXHVGRjBBXFx1RkYwQy1cXHVGRjBGXFx1RkYxQVxcdUZGMUJcXHVGRjFGXFx1RkYyMFxcdUZGM0ItXFx1RkYzRFxcdUZGM0ZcXHVGRjVCXFx1RkY1RFxcdUZGNUYtXFx1RkY2NScsXG4gICAgICAgICdhc3RyYWwnOiAnXFx1RDgwMFtcXHVERDAwLVxcdUREMDJcXHVERjlGXFx1REZEMF18XFx1RDgwMVxcdURENkZ8XFx1RDgwMltcXHVEQzU3XFx1REQxRlxcdUREM0ZcXHVERTUwLVxcdURFNThcXHVERTdGXFx1REVGMC1cXHVERUY2XFx1REYzOS1cXHVERjNGXFx1REY5OS1cXHVERjlDXXxcXHVEODAzW1xcdURFQURcXHVERjU1LVxcdURGNTldfFxcdUQ4MDRbXFx1REM0Ny1cXHVEQzREXFx1RENCQlxcdURDQkNcXHVEQ0JFLVxcdURDQzFcXHVERDQwLVxcdURENDNcXHVERDc0XFx1REQ3NVxcdUREQzUtXFx1RERDOFxcdUREQ0RcXHVERERCXFx1RERERC1cXHVERERGXFx1REUzOC1cXHVERTNEXFx1REVBOV18XFx1RDgwNVtcXHVEQzRCLVxcdURDNEZcXHVEQzVBXFx1REM1QlxcdURDNURcXHVEQ0M2XFx1RERDMS1cXHVEREQ3XFx1REU0MS1cXHVERTQzXFx1REU2MC1cXHVERTZDXFx1REYzQy1cXHVERjNFXXxcXHVEODA2W1xcdURDM0JcXHVERDQ0LVxcdURENDZcXHVEREUyXFx1REUzRi1cXHVERTQ2XFx1REU5QS1cXHVERTlDXFx1REU5RS1cXHVERUEyXXxcXHVEODA3W1xcdURDNDEtXFx1REM0NVxcdURDNzBcXHVEQzcxXFx1REVGN1xcdURFRjhcXHVERkZGXXxcXHVEODA5W1xcdURDNzAtXFx1REM3NF18XFx1RDgxQVtcXHVERTZFXFx1REU2RlxcdURFRjVcXHVERjM3LVxcdURGM0JcXHVERjQ0XXxcXHVEODFCW1xcdURFOTctXFx1REU5QVxcdURGRTJdfFxcdUQ4MkZcXHVEQzlGfFxcdUQ4MzZbXFx1REU4Ny1cXHVERThCXXxcXHVEODNBW1xcdURENUVcXHVERDVGXSdcbiAgICB9LFxuICAgIHtcbiAgICAgICAgJ25hbWUnOiAnUGMnLFxuICAgICAgICAnYWxpYXMnOiAnQ29ubmVjdG9yX1B1bmN0dWF0aW9uJyxcbiAgICAgICAgJ2JtcCc6ICdfXFx1MjAzRlxcdTIwNDBcXHUyMDU0XFx1RkUzM1xcdUZFMzRcXHVGRTRELVxcdUZFNEZcXHVGRjNGJ1xuICAgIH0sXG4gICAge1xuICAgICAgICAnbmFtZSc6ICdQZCcsXG4gICAgICAgICdhbGlhcyc6ICdEYXNoX1B1bmN0dWF0aW9uJyxcbiAgICAgICAgJ2JtcCc6ICdcXFxcLVxcdTA1OEFcXHUwNUJFXFx1MTQwMFxcdTE4MDZcXHUyMDEwLVxcdTIwMTVcXHUyRTE3XFx1MkUxQVxcdTJFM0FcXHUyRTNCXFx1MkU0MFxcdTMwMUNcXHUzMDMwXFx1MzBBMFxcdUZFMzFcXHVGRTMyXFx1RkU1OFxcdUZFNjNcXHVGRjBEJyxcbiAgICAgICAgJ2FzdHJhbCc6ICdcXHVEODAzXFx1REVBRCdcbiAgICB9LFxuICAgIHtcbiAgICAgICAgJ25hbWUnOiAnUGUnLFxuICAgICAgICAnYWxpYXMnOiAnQ2xvc2VfUHVuY3R1YXRpb24nLFxuICAgICAgICAnYm1wJzogJ1xcXFwpXFxcXF1cXFxcfVxcdTBGM0JcXHUwRjNEXFx1MTY5Q1xcdTIwNDZcXHUyMDdFXFx1MjA4RVxcdTIzMDlcXHUyMzBCXFx1MjMyQVxcdTI3NjlcXHUyNzZCXFx1Mjc2RFxcdTI3NkZcXHUyNzcxXFx1Mjc3M1xcdTI3NzVcXHUyN0M2XFx1MjdFN1xcdTI3RTlcXHUyN0VCXFx1MjdFRFxcdTI3RUZcXHUyOTg0XFx1Mjk4NlxcdTI5ODhcXHUyOThBXFx1Mjk4Q1xcdTI5OEVcXHUyOTkwXFx1Mjk5MlxcdTI5OTRcXHUyOTk2XFx1Mjk5OFxcdTI5RDlcXHUyOURCXFx1MjlGRFxcdTJFMjNcXHUyRTI1XFx1MkUyN1xcdTJFMjlcXHUzMDA5XFx1MzAwQlxcdTMwMERcXHUzMDBGXFx1MzAxMVxcdTMwMTVcXHUzMDE3XFx1MzAxOVxcdTMwMUJcXHUzMDFFXFx1MzAxRlxcdUZEM0VcXHVGRTE4XFx1RkUzNlxcdUZFMzhcXHVGRTNBXFx1RkUzQ1xcdUZFM0VcXHVGRTQwXFx1RkU0MlxcdUZFNDRcXHVGRTQ4XFx1RkU1QVxcdUZFNUNcXHVGRTVFXFx1RkYwOVxcdUZGM0RcXHVGRjVEXFx1RkY2MFxcdUZGNjMnXG4gICAgfSxcbiAgICB7XG4gICAgICAgICduYW1lJzogJ1BmJyxcbiAgICAgICAgJ2FsaWFzJzogJ0ZpbmFsX1B1bmN0dWF0aW9uJyxcbiAgICAgICAgJ2JtcCc6ICdcXHhCQlxcdTIwMTlcXHUyMDFEXFx1MjAzQVxcdTJFMDNcXHUyRTA1XFx1MkUwQVxcdTJFMERcXHUyRTFEXFx1MkUyMSdcbiAgICB9LFxuICAgIHtcbiAgICAgICAgJ25hbWUnOiAnUGknLFxuICAgICAgICAnYWxpYXMnOiAnSW5pdGlhbF9QdW5jdHVhdGlvbicsXG4gICAgICAgICdibXAnOiAnXFx4QUJcXHUyMDE4XFx1MjAxQlxcdTIwMUNcXHUyMDFGXFx1MjAzOVxcdTJFMDJcXHUyRTA0XFx1MkUwOVxcdTJFMENcXHUyRTFDXFx1MkUyMCdcbiAgICB9LFxuICAgIHtcbiAgICAgICAgJ25hbWUnOiAnUG8nLFxuICAgICAgICAnYWxpYXMnOiAnT3RoZXJfUHVuY3R1YXRpb24nLFxuICAgICAgICAnYm1wJzogJyEtIyUtXFwnXFxcXCosXFxcXC5cXFxcLzo7XFxcXD9AXFxcXFxceEExXFx4QTdcXHhCNlxceEI3XFx4QkZcXHUwMzdFXFx1MDM4N1xcdTA1NUEtXFx1MDU1RlxcdTA1ODlcXHUwNUMwXFx1MDVDM1xcdTA1QzZcXHUwNUYzXFx1MDVGNFxcdTA2MDlcXHUwNjBBXFx1MDYwQ1xcdTA2MERcXHUwNjFCXFx1MDYxRVxcdTA2MUZcXHUwNjZBLVxcdTA2NkRcXHUwNkQ0XFx1MDcwMC1cXHUwNzBEXFx1MDdGNy1cXHUwN0Y5XFx1MDgzMC1cXHUwODNFXFx1MDg1RVxcdTA5NjRcXHUwOTY1XFx1MDk3MFxcdTA5RkRcXHUwQTc2XFx1MEFGMFxcdTBDNzdcXHUwQzg0XFx1MERGNFxcdTBFNEZcXHUwRTVBXFx1MEU1QlxcdTBGMDQtXFx1MEYxMlxcdTBGMTRcXHUwRjg1XFx1MEZEMC1cXHUwRkQ0XFx1MEZEOVxcdTBGREFcXHUxMDRBLVxcdTEwNEZcXHUxMEZCXFx1MTM2MC1cXHUxMzY4XFx1MTY2RVxcdTE2RUItXFx1MTZFRFxcdTE3MzVcXHUxNzM2XFx1MTdENC1cXHUxN0Q2XFx1MTdEOC1cXHUxN0RBXFx1MTgwMC1cXHUxODA1XFx1MTgwNy1cXHUxODBBXFx1MTk0NFxcdTE5NDVcXHUxQTFFXFx1MUExRlxcdTFBQTAtXFx1MUFBNlxcdTFBQTgtXFx1MUFBRFxcdTFCNUEtXFx1MUI2MFxcdTFCRkMtXFx1MUJGRlxcdTFDM0ItXFx1MUMzRlxcdTFDN0VcXHUxQzdGXFx1MUNDMC1cXHUxQ0M3XFx1MUNEM1xcdTIwMTZcXHUyMDE3XFx1MjAyMC1cXHUyMDI3XFx1MjAzMC1cXHUyMDM4XFx1MjAzQi1cXHUyMDNFXFx1MjA0MS1cXHUyMDQzXFx1MjA0Ny1cXHUyMDUxXFx1MjA1M1xcdTIwNTUtXFx1MjA1RVxcdTJDRjktXFx1MkNGQ1xcdTJDRkVcXHUyQ0ZGXFx1MkQ3MFxcdTJFMDBcXHUyRTAxXFx1MkUwNi1cXHUyRTA4XFx1MkUwQlxcdTJFMEUtXFx1MkUxNlxcdTJFMThcXHUyRTE5XFx1MkUxQlxcdTJFMUVcXHUyRTFGXFx1MkUyQS1cXHUyRTJFXFx1MkUzMC1cXHUyRTM5XFx1MkUzQy1cXHUyRTNGXFx1MkU0MVxcdTJFNDMtXFx1MkU0RlxcdTJFNTJcXHUzMDAxLVxcdTMwMDNcXHUzMDNEXFx1MzBGQlxcdUE0RkVcXHVBNEZGXFx1QTYwRC1cXHVBNjBGXFx1QTY3M1xcdUE2N0VcXHVBNkYyLVxcdUE2RjdcXHVBODc0LVxcdUE4NzdcXHVBOENFXFx1QThDRlxcdUE4RjgtXFx1QThGQVxcdUE4RkNcXHVBOTJFXFx1QTkyRlxcdUE5NUZcXHVBOUMxLVxcdUE5Q0RcXHVBOURFXFx1QTlERlxcdUFBNUMtXFx1QUE1RlxcdUFBREVcXHVBQURGXFx1QUFGMFxcdUFBRjFcXHVBQkVCXFx1RkUxMC1cXHVGRTE2XFx1RkUxOVxcdUZFMzBcXHVGRTQ1XFx1RkU0NlxcdUZFNDktXFx1RkU0Q1xcdUZFNTAtXFx1RkU1MlxcdUZFNTQtXFx1RkU1N1xcdUZFNUYtXFx1RkU2MVxcdUZFNjhcXHVGRTZBXFx1RkU2QlxcdUZGMDEtXFx1RkYwM1xcdUZGMDUtXFx1RkYwN1xcdUZGMEFcXHVGRjBDXFx1RkYwRVxcdUZGMEZcXHVGRjFBXFx1RkYxQlxcdUZGMUZcXHVGRjIwXFx1RkYzQ1xcdUZGNjFcXHVGRjY0XFx1RkY2NScsXG4gICAgICAgICdhc3RyYWwnOiAnXFx1RDgwMFtcXHVERDAwLVxcdUREMDJcXHVERjlGXFx1REZEMF18XFx1RDgwMVxcdURENkZ8XFx1RDgwMltcXHVEQzU3XFx1REQxRlxcdUREM0ZcXHVERTUwLVxcdURFNThcXHVERTdGXFx1REVGMC1cXHVERUY2XFx1REYzOS1cXHVERjNGXFx1REY5OS1cXHVERjlDXXxcXHVEODAzW1xcdURGNTUtXFx1REY1OV18XFx1RDgwNFtcXHVEQzQ3LVxcdURDNERcXHVEQ0JCXFx1RENCQ1xcdURDQkUtXFx1RENDMVxcdURENDAtXFx1REQ0M1xcdURENzRcXHVERDc1XFx1RERDNS1cXHVEREM4XFx1RERDRFxcdUREREJcXHVERERELVxcdUREREZcXHVERTM4LVxcdURFM0RcXHVERUE5XXxcXHVEODA1W1xcdURDNEItXFx1REM0RlxcdURDNUFcXHVEQzVCXFx1REM1RFxcdURDQzZcXHVEREMxLVxcdURERDdcXHVERTQxLVxcdURFNDNcXHVERTYwLVxcdURFNkNcXHVERjNDLVxcdURGM0VdfFxcdUQ4MDZbXFx1REMzQlxcdURENDQtXFx1REQ0NlxcdURERTJcXHVERTNGLVxcdURFNDZcXHVERTlBLVxcdURFOUNcXHVERTlFLVxcdURFQTJdfFxcdUQ4MDdbXFx1REM0MS1cXHVEQzQ1XFx1REM3MFxcdURDNzFcXHVERUY3XFx1REVGOFxcdURGRkZdfFxcdUQ4MDlbXFx1REM3MC1cXHVEQzc0XXxcXHVEODFBW1xcdURFNkVcXHVERTZGXFx1REVGNVxcdURGMzctXFx1REYzQlxcdURGNDRdfFxcdUQ4MUJbXFx1REU5Ny1cXHVERTlBXFx1REZFMl18XFx1RDgyRlxcdURDOUZ8XFx1RDgzNltcXHVERTg3LVxcdURFOEJdfFxcdUQ4M0FbXFx1REQ1RVxcdURENUZdJ1xuICAgIH0sXG4gICAge1xuICAgICAgICAnbmFtZSc6ICdQcycsXG4gICAgICAgICdhbGlhcyc6ICdPcGVuX1B1bmN0dWF0aW9uJyxcbiAgICAgICAgJ2JtcCc6ICdcXFxcKFxcXFxbXFxcXHtcXHUwRjNBXFx1MEYzQ1xcdTE2OUJcXHUyMDFBXFx1MjAxRVxcdTIwNDVcXHUyMDdEXFx1MjA4RFxcdTIzMDhcXHUyMzBBXFx1MjMyOVxcdTI3NjhcXHUyNzZBXFx1Mjc2Q1xcdTI3NkVcXHUyNzcwXFx1Mjc3MlxcdTI3NzRcXHUyN0M1XFx1MjdFNlxcdTI3RThcXHUyN0VBXFx1MjdFQ1xcdTI3RUVcXHUyOTgzXFx1Mjk4NVxcdTI5ODdcXHUyOTg5XFx1Mjk4QlxcdTI5OERcXHUyOThGXFx1Mjk5MVxcdTI5OTNcXHUyOTk1XFx1Mjk5N1xcdTI5RDhcXHUyOURBXFx1MjlGQ1xcdTJFMjJcXHUyRTI0XFx1MkUyNlxcdTJFMjhcXHUyRTQyXFx1MzAwOFxcdTMwMEFcXHUzMDBDXFx1MzAwRVxcdTMwMTBcXHUzMDE0XFx1MzAxNlxcdTMwMThcXHUzMDFBXFx1MzAxRFxcdUZEM0ZcXHVGRTE3XFx1RkUzNVxcdUZFMzdcXHVGRTM5XFx1RkUzQlxcdUZFM0RcXHVGRTNGXFx1RkU0MVxcdUZFNDNcXHVGRTQ3XFx1RkU1OVxcdUZFNUJcXHVGRTVEXFx1RkYwOFxcdUZGM0JcXHVGRjVCXFx1RkY1RlxcdUZGNjInXG4gICAgfSxcbiAgICB7XG4gICAgICAgICduYW1lJzogJ1MnLFxuICAgICAgICAnYWxpYXMnOiAnU3ltYm9sJyxcbiAgICAgICAgJ2JtcCc6ICdcXFxcJFxcXFwrPC0+XFxcXF5gXFxcXHx+XFx4QTItXFx4QTZcXHhBOFxceEE5XFx4QUNcXHhBRS1cXHhCMVxceEI0XFx4QjhcXHhEN1xceEY3XFx1MDJDMi1cXHUwMkM1XFx1MDJEMi1cXHUwMkRGXFx1MDJFNS1cXHUwMkVCXFx1MDJFRFxcdTAyRUYtXFx1MDJGRlxcdTAzNzVcXHUwMzg0XFx1MDM4NVxcdTAzRjZcXHUwNDgyXFx1MDU4RC1cXHUwNThGXFx1MDYwNi1cXHUwNjA4XFx1MDYwQlxcdTA2MEVcXHUwNjBGXFx1MDZERVxcdTA2RTlcXHUwNkZEXFx1MDZGRVxcdTA3RjZcXHUwN0ZFXFx1MDdGRlxcdTA5RjJcXHUwOUYzXFx1MDlGQVxcdTA5RkJcXHUwQUYxXFx1MEI3MFxcdTBCRjMtXFx1MEJGQVxcdTBDN0ZcXHUwRDRGXFx1MEQ3OVxcdTBFM0ZcXHUwRjAxLVxcdTBGMDNcXHUwRjEzXFx1MEYxNS1cXHUwRjE3XFx1MEYxQS1cXHUwRjFGXFx1MEYzNFxcdTBGMzZcXHUwRjM4XFx1MEZCRS1cXHUwRkM1XFx1MEZDNy1cXHUwRkNDXFx1MEZDRVxcdTBGQ0ZcXHUwRkQ1LVxcdTBGRDhcXHUxMDlFXFx1MTA5RlxcdTEzOTAtXFx1MTM5OVxcdTE2NkRcXHUxN0RCXFx1MTk0MFxcdTE5REUtXFx1MTlGRlxcdTFCNjEtXFx1MUI2QVxcdTFCNzQtXFx1MUI3Q1xcdTFGQkRcXHUxRkJGLVxcdTFGQzFcXHUxRkNELVxcdTFGQ0ZcXHUxRkRELVxcdTFGREZcXHUxRkVELVxcdTFGRUZcXHUxRkZEXFx1MUZGRVxcdTIwNDRcXHUyMDUyXFx1MjA3QS1cXHUyMDdDXFx1MjA4QS1cXHUyMDhDXFx1MjBBMC1cXHUyMEJGXFx1MjEwMFxcdTIxMDFcXHUyMTAzLVxcdTIxMDZcXHUyMTA4XFx1MjEwOVxcdTIxMTRcXHUyMTE2LVxcdTIxMThcXHUyMTFFLVxcdTIxMjNcXHUyMTI1XFx1MjEyN1xcdTIxMjlcXHUyMTJFXFx1MjEzQVxcdTIxM0JcXHUyMTQwLVxcdTIxNDRcXHUyMTRBLVxcdTIxNERcXHUyMTRGXFx1MjE4QVxcdTIxOEJcXHUyMTkwLVxcdTIzMDdcXHUyMzBDLVxcdTIzMjhcXHUyMzJCLVxcdTI0MjZcXHUyNDQwLVxcdTI0NEFcXHUyNDlDLVxcdTI0RTlcXHUyNTAwLVxcdTI3NjdcXHUyNzk0LVxcdTI3QzRcXHUyN0M3LVxcdTI3RTVcXHUyN0YwLVxcdTI5ODJcXHUyOTk5LVxcdTI5RDdcXHUyOURDLVxcdTI5RkJcXHUyOUZFLVxcdTJCNzNcXHUyQjc2LVxcdTJCOTVcXHUyQjk3LVxcdTJCRkZcXHUyQ0U1LVxcdTJDRUFcXHUyRTUwXFx1MkU1MVxcdTJFODAtXFx1MkU5OVxcdTJFOUItXFx1MkVGM1xcdTJGMDAtXFx1MkZENVxcdTJGRjAtXFx1MkZGQlxcdTMwMDRcXHUzMDEyXFx1MzAxM1xcdTMwMjBcXHUzMDM2XFx1MzAzN1xcdTMwM0VcXHUzMDNGXFx1MzA5QlxcdTMwOUNcXHUzMTkwXFx1MzE5MVxcdTMxOTYtXFx1MzE5RlxcdTMxQzAtXFx1MzFFM1xcdTMyMDAtXFx1MzIxRVxcdTMyMkEtXFx1MzI0N1xcdTMyNTBcXHUzMjYwLVxcdTMyN0ZcXHUzMjhBLVxcdTMyQjBcXHUzMkMwLVxcdTMzRkZcXHU0REMwLVxcdTRERkZcXHVBNDkwLVxcdUE0QzZcXHVBNzAwLVxcdUE3MTZcXHVBNzIwXFx1QTcyMVxcdUE3ODlcXHVBNzhBXFx1QTgyOC1cXHVBODJCXFx1QTgzNi1cXHVBODM5XFx1QUE3Ny1cXHVBQTc5XFx1QUI1QlxcdUFCNkFcXHVBQjZCXFx1RkIyOVxcdUZCQjItXFx1RkJDMVxcdUZERkNcXHVGREZEXFx1RkU2MlxcdUZFNjQtXFx1RkU2NlxcdUZFNjlcXHVGRjA0XFx1RkYwQlxcdUZGMUMtXFx1RkYxRVxcdUZGM0VcXHVGRjQwXFx1RkY1Q1xcdUZGNUVcXHVGRkUwLVxcdUZGRTZcXHVGRkU4LVxcdUZGRUVcXHVGRkZDXFx1RkZGRCcsXG4gICAgICAgICdhc3RyYWwnOiAnXFx1RDgwMFtcXHVERDM3LVxcdUREM0ZcXHVERDc5LVxcdUREODlcXHVERDhDLVxcdUREOEVcXHVERDkwLVxcdUREOUNcXHVEREEwXFx1REREMC1cXHVEREZDXXxcXHVEODAyW1xcdURDNzdcXHVEQzc4XFx1REVDOF18XFx1RDgwNVxcdURGM0Z8XFx1RDgwN1tcXHVERkQ1LVxcdURGRjFdfFxcdUQ4MUFbXFx1REYzQy1cXHVERjNGXFx1REY0NV18XFx1RDgyRlxcdURDOUN8XFx1RDgzNFtcXHVEQzAwLVxcdURDRjVcXHVERDAwLVxcdUREMjZcXHVERDI5LVxcdURENjRcXHVERDZBLVxcdURENkNcXHVERDgzXFx1REQ4NFxcdUREOEMtXFx1RERBOVxcdUREQUUtXFx1RERFOFxcdURFMDAtXFx1REU0MVxcdURFNDVcXHVERjAwLVxcdURGNTZdfFxcdUQ4MzVbXFx1REVDMVxcdURFREJcXHVERUZCXFx1REYxNVxcdURGMzVcXHVERjRGXFx1REY2RlxcdURGODlcXHVERkE5XFx1REZDM118XFx1RDgzNltcXHVEQzAwLVxcdURERkZcXHVERTM3LVxcdURFM0FcXHVERTZELVxcdURFNzRcXHVERTc2LVxcdURFODNcXHVERTg1XFx1REU4Nl18XFx1RDgzOFtcXHVERDRGXFx1REVGRl18XFx1RDgzQltcXHVEQ0FDXFx1RENCMFxcdUREMkVcXHVERUYwXFx1REVGMV18XFx1RDgzQ1tcXHVEQzAwLVxcdURDMkJcXHVEQzMwLVxcdURDOTNcXHVEQ0EwLVxcdURDQUVcXHVEQ0IxLVxcdURDQkZcXHVEQ0MxLVxcdURDQ0ZcXHVEQ0QxLVxcdURDRjVcXHVERDBELVxcdUREQURcXHVEREU2LVxcdURFMDJcXHVERTEwLVxcdURFM0JcXHVERTQwLVxcdURFNDhcXHVERTUwXFx1REU1MVxcdURFNjAtXFx1REU2NVxcdURGMDAtXFx1REZGRl18XFx1RDgzRFtcXHVEQzAwLVxcdURFRDdcXHVERUUwLVxcdURFRUNcXHVERUYwLVxcdURFRkNcXHVERjAwLVxcdURGNzNcXHVERjgwLVxcdURGRDhcXHVERkUwLVxcdURGRUJdfFxcdUQ4M0VbXFx1REMwMC1cXHVEQzBCXFx1REMxMC1cXHVEQzQ3XFx1REM1MC1cXHVEQzU5XFx1REM2MC1cXHVEQzg3XFx1REM5MC1cXHVEQ0FEXFx1RENCMFxcdURDQjFcXHVERDAwLVxcdURENzhcXHVERDdBLVxcdUREQ0JcXHVERENELVxcdURFNTNcXHVERTYwLVxcdURFNkRcXHVERTcwLVxcdURFNzRcXHVERTc4LVxcdURFN0FcXHVERTgwLVxcdURFODZcXHVERTkwLVxcdURFQThcXHVERUIwLVxcdURFQjZcXHVERUMwLVxcdURFQzJcXHVERUQwLVxcdURFRDZcXHVERjAwLVxcdURGOTJcXHVERjk0LVxcdURGQ0FdJ1xuICAgIH0sXG4gICAge1xuICAgICAgICAnbmFtZSc6ICdTYycsXG4gICAgICAgICdhbGlhcyc6ICdDdXJyZW5jeV9TeW1ib2wnLFxuICAgICAgICAnYm1wJzogJ1xcXFwkXFx4QTItXFx4QTVcXHUwNThGXFx1MDYwQlxcdTA3RkVcXHUwN0ZGXFx1MDlGMlxcdTA5RjNcXHUwOUZCXFx1MEFGMVxcdTBCRjlcXHUwRTNGXFx1MTdEQlxcdTIwQTAtXFx1MjBCRlxcdUE4MzhcXHVGREZDXFx1RkU2OVxcdUZGMDRcXHVGRkUwXFx1RkZFMVxcdUZGRTVcXHVGRkU2JyxcbiAgICAgICAgJ2FzdHJhbCc6ICdcXHVEODA3W1xcdURGREQtXFx1REZFMF18XFx1RDgzOFxcdURFRkZ8XFx1RDgzQlxcdURDQjAnXG4gICAgfSxcbiAgICB7XG4gICAgICAgICduYW1lJzogJ1NrJyxcbiAgICAgICAgJ2FsaWFzJzogJ01vZGlmaWVyX1N5bWJvbCcsXG4gICAgICAgICdibXAnOiAnXFxcXF5gXFx4QThcXHhBRlxceEI0XFx4QjhcXHUwMkMyLVxcdTAyQzVcXHUwMkQyLVxcdTAyREZcXHUwMkU1LVxcdTAyRUJcXHUwMkVEXFx1MDJFRi1cXHUwMkZGXFx1MDM3NVxcdTAzODRcXHUwMzg1XFx1MUZCRFxcdTFGQkYtXFx1MUZDMVxcdTFGQ0QtXFx1MUZDRlxcdTFGREQtXFx1MUZERlxcdTFGRUQtXFx1MUZFRlxcdTFGRkRcXHUxRkZFXFx1MzA5QlxcdTMwOUNcXHVBNzAwLVxcdUE3MTZcXHVBNzIwXFx1QTcyMVxcdUE3ODlcXHVBNzhBXFx1QUI1QlxcdUFCNkFcXHVBQjZCXFx1RkJCMi1cXHVGQkMxXFx1RkYzRVxcdUZGNDBcXHVGRkUzJyxcbiAgICAgICAgJ2FzdHJhbCc6ICdcXHVEODNDW1xcdURGRkItXFx1REZGRl0nXG4gICAgfSxcbiAgICB7XG4gICAgICAgICduYW1lJzogJ1NtJyxcbiAgICAgICAgJ2FsaWFzJzogJ01hdGhfU3ltYm9sJyxcbiAgICAgICAgJ2JtcCc6ICdcXFxcKzwtPlxcXFx8flxceEFDXFx4QjFcXHhEN1xceEY3XFx1MDNGNlxcdTA2MDYtXFx1MDYwOFxcdTIwNDRcXHUyMDUyXFx1MjA3QS1cXHUyMDdDXFx1MjA4QS1cXHUyMDhDXFx1MjExOFxcdTIxNDAtXFx1MjE0NFxcdTIxNEJcXHUyMTkwLVxcdTIxOTRcXHUyMTlBXFx1MjE5QlxcdTIxQTBcXHUyMUEzXFx1MjFBNlxcdTIxQUVcXHUyMUNFXFx1MjFDRlxcdTIxRDJcXHUyMUQ0XFx1MjFGNC1cXHUyMkZGXFx1MjMyMFxcdTIzMjFcXHUyMzdDXFx1MjM5Qi1cXHUyM0IzXFx1MjNEQy1cXHUyM0UxXFx1MjVCN1xcdTI1QzFcXHUyNUY4LVxcdTI1RkZcXHUyNjZGXFx1MjdDMC1cXHUyN0M0XFx1MjdDNy1cXHUyN0U1XFx1MjdGMC1cXHUyN0ZGXFx1MjkwMC1cXHUyOTgyXFx1Mjk5OS1cXHUyOUQ3XFx1MjlEQy1cXHUyOUZCXFx1MjlGRS1cXHUyQUZGXFx1MkIzMC1cXHUyQjQ0XFx1MkI0Ny1cXHUyQjRDXFx1RkIyOVxcdUZFNjJcXHVGRTY0LVxcdUZFNjZcXHVGRjBCXFx1RkYxQy1cXHVGRjFFXFx1RkY1Q1xcdUZGNUVcXHVGRkUyXFx1RkZFOS1cXHVGRkVDJyxcbiAgICAgICAgJ2FzdHJhbCc6ICdcXHVEODM1W1xcdURFQzFcXHVERURCXFx1REVGQlxcdURGMTVcXHVERjM1XFx1REY0RlxcdURGNkZcXHVERjg5XFx1REZBOVxcdURGQzNdfFxcdUQ4M0JbXFx1REVGMFxcdURFRjFdJ1xuICAgIH0sXG4gICAge1xuICAgICAgICAnbmFtZSc6ICdTbycsXG4gICAgICAgICdhbGlhcyc6ICdPdGhlcl9TeW1ib2wnLFxuICAgICAgICAnYm1wJzogJ1xceEE2XFx4QTlcXHhBRVxceEIwXFx1MDQ4MlxcdTA1OERcXHUwNThFXFx1MDYwRVxcdTA2MEZcXHUwNkRFXFx1MDZFOVxcdTA2RkRcXHUwNkZFXFx1MDdGNlxcdTA5RkFcXHUwQjcwXFx1MEJGMy1cXHUwQkY4XFx1MEJGQVxcdTBDN0ZcXHUwRDRGXFx1MEQ3OVxcdTBGMDEtXFx1MEYwM1xcdTBGMTNcXHUwRjE1LVxcdTBGMTdcXHUwRjFBLVxcdTBGMUZcXHUwRjM0XFx1MEYzNlxcdTBGMzhcXHUwRkJFLVxcdTBGQzVcXHUwRkM3LVxcdTBGQ0NcXHUwRkNFXFx1MEZDRlxcdTBGRDUtXFx1MEZEOFxcdTEwOUVcXHUxMDlGXFx1MTM5MC1cXHUxMzk5XFx1MTY2RFxcdTE5NDBcXHUxOURFLVxcdTE5RkZcXHUxQjYxLVxcdTFCNkFcXHUxQjc0LVxcdTFCN0NcXHUyMTAwXFx1MjEwMVxcdTIxMDMtXFx1MjEwNlxcdTIxMDhcXHUyMTA5XFx1MjExNFxcdTIxMTZcXHUyMTE3XFx1MjExRS1cXHUyMTIzXFx1MjEyNVxcdTIxMjdcXHUyMTI5XFx1MjEyRVxcdTIxM0FcXHUyMTNCXFx1MjE0QVxcdTIxNENcXHUyMTREXFx1MjE0RlxcdTIxOEFcXHUyMThCXFx1MjE5NS1cXHUyMTk5XFx1MjE5Qy1cXHUyMTlGXFx1MjFBMVxcdTIxQTJcXHUyMUE0XFx1MjFBNVxcdTIxQTctXFx1MjFBRFxcdTIxQUYtXFx1MjFDRFxcdTIxRDBcXHUyMUQxXFx1MjFEM1xcdTIxRDUtXFx1MjFGM1xcdTIzMDAtXFx1MjMwN1xcdTIzMEMtXFx1MjMxRlxcdTIzMjItXFx1MjMyOFxcdTIzMkItXFx1MjM3QlxcdTIzN0QtXFx1MjM5QVxcdTIzQjQtXFx1MjNEQlxcdTIzRTItXFx1MjQyNlxcdTI0NDAtXFx1MjQ0QVxcdTI0OUMtXFx1MjRFOVxcdTI1MDAtXFx1MjVCNlxcdTI1QjgtXFx1MjVDMFxcdTI1QzItXFx1MjVGN1xcdTI2MDAtXFx1MjY2RVxcdTI2NzAtXFx1Mjc2N1xcdTI3OTQtXFx1MjdCRlxcdTI4MDAtXFx1MjhGRlxcdTJCMDAtXFx1MkIyRlxcdTJCNDVcXHUyQjQ2XFx1MkI0RC1cXHUyQjczXFx1MkI3Ni1cXHUyQjk1XFx1MkI5Ny1cXHUyQkZGXFx1MkNFNS1cXHUyQ0VBXFx1MkU1MFxcdTJFNTFcXHUyRTgwLVxcdTJFOTlcXHUyRTlCLVxcdTJFRjNcXHUyRjAwLVxcdTJGRDVcXHUyRkYwLVxcdTJGRkJcXHUzMDA0XFx1MzAxMlxcdTMwMTNcXHUzMDIwXFx1MzAzNlxcdTMwMzdcXHUzMDNFXFx1MzAzRlxcdTMxOTBcXHUzMTkxXFx1MzE5Ni1cXHUzMTlGXFx1MzFDMC1cXHUzMUUzXFx1MzIwMC1cXHUzMjFFXFx1MzIyQS1cXHUzMjQ3XFx1MzI1MFxcdTMyNjAtXFx1MzI3RlxcdTMyOEEtXFx1MzJCMFxcdTMyQzAtXFx1MzNGRlxcdTREQzAtXFx1NERGRlxcdUE0OTAtXFx1QTRDNlxcdUE4MjgtXFx1QTgyQlxcdUE4MzZcXHVBODM3XFx1QTgzOVxcdUFBNzctXFx1QUE3OVxcdUZERkRcXHVGRkU0XFx1RkZFOFxcdUZGRURcXHVGRkVFXFx1RkZGQ1xcdUZGRkQnLFxuICAgICAgICAnYXN0cmFsJzogJ1xcdUQ4MDBbXFx1REQzNy1cXHVERDNGXFx1REQ3OS1cXHVERDg5XFx1REQ4Qy1cXHVERDhFXFx1REQ5MC1cXHVERDlDXFx1RERBMFxcdURERDAtXFx1RERGQ118XFx1RDgwMltcXHVEQzc3XFx1REM3OFxcdURFQzhdfFxcdUQ4MDVcXHVERjNGfFxcdUQ4MDdbXFx1REZENS1cXHVERkRDXFx1REZFMS1cXHVERkYxXXxcXHVEODFBW1xcdURGM0MtXFx1REYzRlxcdURGNDVdfFxcdUQ4MkZcXHVEQzlDfFxcdUQ4MzRbXFx1REMwMC1cXHVEQ0Y1XFx1REQwMC1cXHVERDI2XFx1REQyOS1cXHVERDY0XFx1REQ2QS1cXHVERDZDXFx1REQ4M1xcdUREODRcXHVERDhDLVxcdUREQTlcXHVEREFFLVxcdURERThcXHVERTAwLVxcdURFNDFcXHVERTQ1XFx1REYwMC1cXHVERjU2XXxcXHVEODM2W1xcdURDMDAtXFx1RERGRlxcdURFMzctXFx1REUzQVxcdURFNkQtXFx1REU3NFxcdURFNzYtXFx1REU4M1xcdURFODVcXHVERTg2XXxcXHVEODM4XFx1REQ0RnxcXHVEODNCW1xcdURDQUNcXHVERDJFXXxcXHVEODNDW1xcdURDMDAtXFx1REMyQlxcdURDMzAtXFx1REM5M1xcdURDQTAtXFx1RENBRVxcdURDQjEtXFx1RENCRlxcdURDQzEtXFx1RENDRlxcdURDRDEtXFx1RENGNVxcdUREMEQtXFx1RERBRFxcdURERTYtXFx1REUwMlxcdURFMTAtXFx1REUzQlxcdURFNDAtXFx1REU0OFxcdURFNTBcXHVERTUxXFx1REU2MC1cXHVERTY1XFx1REYwMC1cXHVERkZBXXxcXHVEODNEW1xcdURDMDAtXFx1REVEN1xcdURFRTAtXFx1REVFQ1xcdURFRjAtXFx1REVGQ1xcdURGMDAtXFx1REY3M1xcdURGODAtXFx1REZEOFxcdURGRTAtXFx1REZFQl18XFx1RDgzRVtcXHVEQzAwLVxcdURDMEJcXHVEQzEwLVxcdURDNDdcXHVEQzUwLVxcdURDNTlcXHVEQzYwLVxcdURDODdcXHVEQzkwLVxcdURDQURcXHVEQ0IwXFx1RENCMVxcdUREMDAtXFx1REQ3OFxcdUREN0EtXFx1RERDQlxcdUREQ0QtXFx1REU1M1xcdURFNjAtXFx1REU2RFxcdURFNzAtXFx1REU3NFxcdURFNzgtXFx1REU3QVxcdURFODAtXFx1REU4NlxcdURFOTAtXFx1REVBOFxcdURFQjAtXFx1REVCNlxcdURFQzAtXFx1REVDMlxcdURFRDAtXFx1REVENlxcdURGMDAtXFx1REY5MlxcdURGOTQtXFx1REZDQV0nXG4gICAgfSxcbiAgICB7XG4gICAgICAgICduYW1lJzogJ1onLFxuICAgICAgICAnYWxpYXMnOiAnU2VwYXJhdG9yJyxcbiAgICAgICAgJ2JtcCc6ICcgXFx4QTBcXHUxNjgwXFx1MjAwMC1cXHUyMDBBXFx1MjAyOFxcdTIwMjlcXHUyMDJGXFx1MjA1RlxcdTMwMDAnXG4gICAgfSxcbiAgICB7XG4gICAgICAgICduYW1lJzogJ1psJyxcbiAgICAgICAgJ2FsaWFzJzogJ0xpbmVfU2VwYXJhdG9yJyxcbiAgICAgICAgJ2JtcCc6ICdcXHUyMDI4J1xuICAgIH0sXG4gICAge1xuICAgICAgICAnbmFtZSc6ICdacCcsXG4gICAgICAgICdhbGlhcyc6ICdQYXJhZ3JhcGhfU2VwYXJhdG9yJyxcbiAgICAgICAgJ2JtcCc6ICdcXHUyMDI5J1xuICAgIH0sXG4gICAge1xuICAgICAgICAnbmFtZSc6ICdacycsXG4gICAgICAgICdhbGlhcyc6ICdTcGFjZV9TZXBhcmF0b3InLFxuICAgICAgICAnYm1wJzogJyBcXHhBMFxcdTE2ODBcXHUyMDAwLVxcdTIwMEFcXHUyMDJGXFx1MjA1RlxcdTMwMDAnXG4gICAgfVxuXTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5wYXJzZSA9IHZvaWQgMDtcbmZ1bmN0aW9uIGRlY29kZShzLCBzZXAgPSAnOycpIHtcbiAgICBzID0gcy5yZXBsYWNlKC9cXG4vZywgJycpO1xuICAgIGxldCBwb3MgPSAwO1xuICAgIGNvbnN0IHJlY29yZHMgPSBbJyddO1xuICAgIHdoaWxlIChwb3MgPCBzLmxlbmd0aCkge1xuICAgICAgICBzd2l0Y2ggKHNbcG9zXSkge1xuICAgICAgICAgICAgY2FzZSAnXFxcXCc6XG4gICAgICAgICAgICAgICAgcG9zKys7XG4gICAgICAgICAgICAgICAgcmVjb3Jkc1swXSArPSBzW3Bvc107XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIHNlcDpcbiAgICAgICAgICAgICAgICByZWNvcmRzLnVuc2hpZnQoJycpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZWNvcmRzWzBdICs9IHNbcG9zXTtcbiAgICAgICAgfVxuICAgICAgICBwb3MrKztcbiAgICB9XG4gICAgcmV0dXJuIHJlY29yZHMucmV2ZXJzZSgpLmZpbHRlcihyZWNvcmQgPT4gcmVjb3JkKTtcbn1cbmNvbnN0IHByZWZpeGVzID0ge1xuICAgIGZpbGVEaXJlY3Rvcnk6ICdqYWJyZWYtbWV0YTogZmlsZURpcmVjdG9yeTonLFxuICAgIGdyb3Vwc3ZlcnNpb246ICdqYWJyZWYtbWV0YTogZ3JvdXBzdmVyc2lvbjonLFxuICAgIGdyb3Vwc3RyZWU6ICdqYWJyZWYtbWV0YTogZ3JvdXBzdHJlZTonLFxuICAgIGdyb3VwaW5nOiAnamFicmVmLW1ldGE6IGdyb3VwaW5nOicsXG59O1xuLyoqXG4gKiBJbXBvcnQgdGhlIEphYlJlZiBncm91cHMgZnJvbSB0aGUgYEBzdHJpbmdgIGNvbW1lbnRzIGluIHdoaWNoIHRoZXkgd2VyZSBzdG9yZWQuIFlvdSB3b3VsZCB0eXBpY2FsbHkgcGFzcyB0aGUgY29tbWVudHMgcGFyc2VkIGJ5IFtbYmlidGV4LnBhcnNlXV0gaW4gaGVyZS5cbiAqXG4gKiBKYWJSZWYga25vd3Mgc2V2ZXJhbCBncm91cCB0eXBlcywgYW5kIHRoaXMgcGFyc2VyIHBhcnNlcyBtb3N0LCBidXQgbm90IGFsbCBvZiB0aGVtOlxuICpcbiAqICogaW5kZXBlbmRlbnQgZ3JvdXA6IHRoZSBrZXlzIGxpc3RlZCBpbiB0aGUgZ3JvdXAgYXJlIHRoZSBlbnRyaWVzIHRoYXQgYXJlIGNvbnNpZGVyZWQgdG8gYmVsb25nIHRvIGl0XG4gKiAqIGludGVyc2VjdGlvbjogdGhlIGtleXMgbGlzdGVkIGluIHRoZSBncm91cCBhcmUgY29uc2lkZXJlZCB0byBiZWxvbmcgdG8gdGhlIGdyb3VwIGlmIHRoZXkncmUgYWxzbyBpbiB0aGUgcGFyZW50IGdyb3VwXG4gKiAqIHVuaW9uOiB0aGUga2V5cyBsaXN0ZWQgaW4gdGhlIGdyb3VwIGFyZSBjb25zaWRlcmVkIHRvIGJlbG9uZyB0byB0aGUgZ3JvdXAsIGFuZCBhbHNvIHRoZSBrZXlzIHRoYXQgYXJlIGluIHRoZSBwYXJlbnQgZ3JvdXBcbiAqICogcXVlcnk6IG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBwYXJzZXJcbiAqL1xuZnVuY3Rpb24gcGFyc2UoY29tbWVudHMpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICAgIHJvb3Q6IFtdLFxuICAgICAgICBncm91cHM6IHt9LFxuICAgICAgICBmaWxlRGlyZWN0b3J5OiAnJyxcbiAgICAgICAgdmVyc2lvbjogJycsXG4gICAgfTtcbiAgICBjb25zdCBsZXZlbHMgPSBbXTtcbiAgICBjb25zdCBkZWNvZGVkID0ge1xuICAgICAgICBmaWxlRGlyZWN0b3J5OiBudWxsLFxuICAgICAgICBncm91cHN2ZXJzaW9uOiBudWxsLFxuICAgICAgICBncm91cHN0cmVlOiBudWxsLFxuICAgICAgICBncm91cGluZzogbnVsbCxcbiAgICB9O1xuICAgIGZvciAoY29uc3QgY29tbWVudCBvZiBjb21tZW50cykge1xuICAgICAgICBmb3IgKGNvbnN0IFttZXRhLCBwcmVmaXhdIG9mIE9iamVjdC5lbnRyaWVzKHByZWZpeGVzKSkge1xuICAgICAgICAgICAgaWYgKGNvbW1lbnQuc3RhcnRzV2l0aChwcmVmaXgpKSB7XG4gICAgICAgICAgICAgICAgZGVjb2RlZFttZXRhXSA9IGRlY29kZShjb21tZW50LnN1YnN0cmluZyhwcmVmaXgubGVuZ3RoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVzdWx0LnZlcnNpb24gPSBkZWNvZGVkLmdyb3Vwc3ZlcnNpb24gJiYgZGVjb2RlZC5ncm91cHN2ZXJzaW9uWzBdO1xuICAgIHJlc3VsdC5maWxlRGlyZWN0b3J5ID0gZGVjb2RlZC5maWxlRGlyZWN0b3J5ICYmIGRlY29kZWQuZmlsZURpcmVjdG9yeVswXTtcbiAgICBmb3IgKGNvbnN0IHRyZWUgb2YgWydncm91cHN0cmVlJywgJ2dyb3VwaW5nJ10pIHtcbiAgICAgICAgaWYgKCFkZWNvZGVkW3RyZWVdKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIGZvciAoY29uc3QgZW5jb2RlZCBvZiBkZWNvZGVkW3RyZWVdKSB7XG4gICAgICAgICAgICBjb25zdCBmaWVsZHMgPSBkZWNvZGUoZW5jb2RlZCk7XG4gICAgICAgICAgICBjb25zdCBsZXZlbF90eXBlX25hbWUgPSBkZWNvZGUoZmllbGRzLnNoaWZ0KCksICc6Jyk7XG4gICAgICAgICAgICBjb25zdCBtID0gL14oWzAtOV0rKSAoLispLy5leGVjKGxldmVsX3R5cGVfbmFtZVswXSk7XG4gICAgICAgICAgICBpZiAoIW0pXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjb25zdCBsZXZlbCA9IHBhcnNlSW50KG1bMV0pO1xuICAgICAgICAgICAgY29uc3QgdHlwZSA9IG1bMl07IC8vIHRlc3QgZm9yIFN0YXRpY0dyb3VwP1xuICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdBbGxFbnRyaWVzR3JvdXAnKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyByb290XG4gICAgICAgICAgICBjb25zdCBuYW1lID0gbGV2ZWxfdHlwZV9uYW1lWzFdO1xuICAgICAgICAgICAgY29uc3QgaW50ZXJzZWN0aW9uID0gZGVjb2RlKGZpZWxkcy5zaGlmdCgpKVswXTtcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSB0cmVlID09PSAnZ3JvdXBpbmcnID8gW10gOiBmaWVsZHMubWFwKGZpZWxkID0+IGRlY29kZShmaWVsZClbMF0pO1xuICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSB7XG4gICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICBlbnRyaWVzOiBrZXlzLFxuICAgICAgICAgICAgICAgIGdyb3VwczogW10sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVzdWx0Lmdyb3Vwc1tuYW1lXSA9IHJlc3VsdC5ncm91cHNbbmFtZV0gfHwgZ3JvdXA7XG4gICAgICAgICAgICBpZiAobGV2ZWxzLmxlbmd0aCA8IGxldmVsKSB7XG4gICAgICAgICAgICAgICAgbGV2ZWxzLnB1c2goZ3JvdXApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbGV2ZWxzW2xldmVsIC0gMV0gPSBncm91cDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChsZXZlbCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5yb290LnB1c2goZ3JvdXApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gbGV2ZWxzW2xldmVsIC0gMl07XG4gICAgICAgICAgICAgICAgc3dpdGNoIChpbnRlcnNlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnMCc6IC8vIGluZGVwZW5kZW50XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnMSc6IC8vIGludGVyc2VjdFxuICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXAuZW50cmllcyA9IGdyb3VwLmVudHJpZXMuZmlsdGVyKGtleSA9PiBwYXJlbnQuZW50cmllcy5pbmNsdWRlcyhrZXkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICcyJzogLy8gdW5pb25cbiAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwLmVudHJpZXMgPSBncm91cC5lbnRyaWVzLmNvbmNhdChwYXJlbnQuZW50cmllcy5maWx0ZXIoa2V5ID0+ICFncm91cC5lbnRyaWVzLmluY2x1ZGVzKGtleSkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXZlbHNbbGV2ZWwgLSAyXS5ncm91cHMucHVzaChncm91cCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmV4cG9ydHMucGFyc2UgPSBwYXJzZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWphYnJlZi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuamFicmVmID0gZXhwb3J0cy5jaHVua2VyID0gZXhwb3J0cy5hc3QgPSBleHBvcnRzLnBhcnNlID0gdm9pZCAwO1xuY29uc3QgYmlidGV4ID0gcmVxdWlyZShcIi4vZ3JhbW1hclwiKTtcbmNvbnN0IGNodW5rZXJfMSA9IHJlcXVpcmUoXCIuL2NodW5rZXJcIik7XG5jb25zdCB1bmljb2RlMmxhdGV4XzEgPSByZXF1aXJlKFwidW5pY29kZTJsYXRleFwiKTtcbmNsYXNzIFBhcnNlckVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2UsIG5vZGUpIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSk7IC8vICdFcnJvcicgYnJlYWtzIHByb3RvdHlwZSBjaGFpbiBoZXJlXG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBuZXcudGFyZ2V0LnByb3RvdHlwZSk7IC8vIHJlc3RvcmUgcHJvdG90eXBlIGNoYWluXG4gICAgICAgIHRoaXMubmFtZSA9IHRoaXMuY29uc3RydWN0b3IubmFtZTtcbiAgICAgICAgdGhpcy5ub2RlID0gbm9kZTtcbiAgICB9XG59XG5jbGFzcyBUZVhFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlLCBub2RlLCB0ZXh0KSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpOyAvLyAnRXJyb3InIGJyZWFrcyBwcm90b3R5cGUgY2hhaW4gaGVyZVxuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgbmV3LnRhcmdldC5wcm90b3R5cGUpOyAvLyByZXN0b3JlIHByb3RvdHlwZSBjaGFpblxuICAgICAgICB0aGlzLm5hbWUgPSB0aGlzLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgICAgIHRoaXMubm9kZSA9IG5vZGU7XG4gICAgICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgfVxufVxuY29uc3QgY2hhckNhdGVnb3JpZXMgPSByZXF1aXJlKFwieHJlZ2V4cC90b29scy9vdXRwdXQvY2F0ZWdvcmllc1wiKTtcbmNvbnN0IGNoYXJDbGFzcyA9IHtcbiAgICBMdTogY2hhckNhdGVnb3JpZXMuZmlsdGVyKGNhdCA9PiBbJ1VwcGVyY2FzZV9MZXR0ZXInLCAnVGl0bGVjYXNlX0xldHRlciddLmluY2x1ZGVzKGNhdC5hbGlhcykpLm1hcChjYXQgPT4gY2F0LmJtcCkuam9pbignJyksXG4gICAgTGw6IGNoYXJDYXRlZ29yaWVzLmZpbmQoY2F0ID0+IGNhdC5hbGlhcyA9PT0gJ0xvd2VyY2FzZV9MZXR0ZXInKS5ibXAsXG4gICAgTG5vdEx1OiBjaGFyQ2F0ZWdvcmllcy5maWx0ZXIoY2F0ID0+IFsnTG93ZXJjYXNlX0xldHRlcicsICdNb2RpZmllcl9MZXR0ZXInLCAnT3RoZXJfTGV0dGVyJywgJ05vbnNwYWNpbmdfTWFyaycsICdTcGFjaW5nX01hcmsnLCAnRGVjaW1hbF9OdW1iZXInLCAnTGV0dGVyX051bWJlciddLmluY2x1ZGVzKGNhdC5hbGlhcykpLm1hcChjYXQgPT4gY2F0LmJtcCkuam9pbignJyksXG4gICAgUDogY2hhckNhdGVnb3JpZXMuZmluZChjYXQgPT4gY2F0LmFsaWFzID09PSAnUHVuY3R1YXRpb24nKS5ibXAsXG4gICAgTDogY2hhckNhdGVnb3JpZXMuZmluZChjYXQgPT4gY2F0LmFsaWFzID09PSAnTGV0dGVyJykuYm1wLFxuICAgIE46IGNoYXJDYXRlZ29yaWVzLmZpbHRlcihjYXQgPT4gWydEZWNpbWFsX051bWJlcicsICdMZXR0ZXJfTnVtYmVyJ10uaW5jbHVkZXMoY2F0LmFsaWFzKSkubWFwKGNhdCA9PiBjYXQuYm1wKS5qb2luKCcnKSxcbiAgICBBbHBoYU51bTogY2hhckNhdGVnb3JpZXMuZmlsdGVyKGNhdCA9PiBbJ0xldHRlcicsICdEZWNpbWFsX051bWJlcicsICdMZXR0ZXJfTnVtYmVyJ10uaW5jbHVkZXMoY2F0LmFsaWFzKSkubWFwKGNhdCA9PiBjYXQuYm1wKS5qb2luKCcnKSxcbiAgICBMQzogY2hhckNhdGVnb3JpZXMuZmluZChjYXQgPT4gY2F0LmFsaWFzID09PSAnQ2FzZWRfTGV0dGVyJykuYm1wLFxufTtcbmNvbnN0IG1hcmtlciA9IHtcbiAgICBhbmQ6ICdcXHUwMDAxJyxcbiAgICBjb21tYTogJ1xcdTAwMDInLFxuICAgIHNwYWNlOiAnXFx1MDAwMycsXG4gICAgbGl0ZXJhbDogJ1xcdTAwMDQnLFxuICAgIG1hcmt1cDogJ1xcdTAwMDUnLFxuICAgIHJlOiB7XG4gICAgICAgIGFuZDogLy4vLFxuICAgICAgICBjb21tYTogLy4vLFxuICAgICAgICBzcGFjZTogLy4vLFxuICAgICAgICBsaXRlcmFsOiAvLi8sXG4gICAgICAgIGxpdGVyYWxOYW1lOiAvLi8sXG4gICAgfSxcbiAgICBjbGVhbihzKSB7XG4gICAgICAgIHJldHVybiBzLnJlcGxhY2UobWFya2VyLnJlLnNwYWNlLCAnICcpLnJlcGxhY2UobWFya2VyLnJlLmNvbW1hLCAnLCAnKS5yZXBsYWNlKG1hcmtlci5yZS5saXRlcmFsLCAnJyk7XG4gICAgfSxcbn07XG5tYXJrZXIucmUgPSB7XG4gICAgYW5kOiBuZXcgUmVnRXhwKG1hcmtlci5hbmQsICdnJyksXG4gICAgY29tbWE6IG5ldyBSZWdFeHAobWFya2VyLmNvbW1hLCAnZycpLFxuICAgIHNwYWNlOiBuZXcgUmVnRXhwKG1hcmtlci5zcGFjZSwgJ2cnKSxcbiAgICBsaXRlcmFsOiBuZXcgUmVnRXhwKG1hcmtlci5saXRlcmFsLCAnZycpLFxuICAgIGxpdGVyYWxOYW1lOiBuZXcgUmVnRXhwKGBeJHttYXJrZXIubGl0ZXJhbH0oW14ke21hcmtlci5saXRlcmFsfV0qKSR7bWFya2VyLmxpdGVyYWx9JGApLFxufTtcbmNvbnN0IHByZXNlcnZlQ2FzZSA9IHtcbiAgICBsZWFkaW5nQ2FwOiBuZXcgUmVnRXhwKGBeWyR7Y2hhckNsYXNzLkx1fV1bJHtjaGFyQ2xhc3MuTG5vdEx1fV0rWyR7Y2hhckNsYXNzLlB9XT8kYCksXG4gICAgYWxsQ2FwczogbmV3IFJlZ0V4cChgXlske2NoYXJDbGFzcy5MdX0ke2NoYXJDbGFzcy5OfV17Mix9JGApLFxuICAgIGFsbExvd2VyOiBuZXcgUmVnRXhwKGBeWyR7Y2hhckNsYXNzLkxsfSR7Y2hhckNsYXNzLk59XXsyLH0kYCksXG4gICAgam9pbmVkOiBuZXcgUmVnRXhwKGBeWyR7Y2hhckNsYXNzLkx1fV1bJHtjaGFyQ2xhc3MuTG5vdEx1fV0qKFstK11bJHtjaGFyQ2xhc3MuTH0ke2NoYXJDbGFzcy5OfV0rKSpbJHtjaGFyQ2xhc3MuUH1dKiRgKSxcbiAgICBoYXNVcHBlcjogbmV3IFJlZ0V4cChgWyR7Y2hhckNsYXNzLkx1fV1gKSxcbiAgICBoYXNMb3dlcjogbmV3IFJlZ0V4cChgWyR7Y2hhckNsYXNzLkxsfV1gKSxcbiAgICBpc051bWJlcjogL15bMC05XSskLyxcbiAgICBoYXNBbHBoYTogbmV3IFJlZ0V4cChgWyR7Y2hhckNsYXNzLkx9XWApLFxuICAgIGhhc0FscGhhTnVtOiBuZXcgUmVnRXhwKGBbJHtjaGFyQ2xhc3MuQWxwaGFOdW19XWApLFxuICAgIG5vdEFscGhhTnVtOiBuZXcgUmVnRXhwKGBbXiR7Y2hhckNsYXNzLkFscGhhTnVtfV1gLCAnZycpLFxuICAgIHNlbnRlbmNlU3RhcnQ6IG5ldyBSZWdFeHAoYChefChbXFx1MjAxNDo/IS5dXFxcXHMrKSlbJHtjaGFyQ2xhc3MuTHV9XWAsICdnJyksXG4gICAgbWFya3VwOiAvPFxcLz9zcGFuW14+XSo+L2csXG4gICAgYWNyb255bTogbmV3IFJlZ0V4cChgLipcXFxcLiR7bWFya2VyLm1hcmt1cH0qWyR7Y2hhckNsYXNzLkx1fV0ke21hcmtlci5tYXJrdXB9KlxcXFwuJGApLFxuICAgIG5vdENhc2VTZW5zaXRpdmU6IG5ldyBSZWdFeHAoYFteJHtjaGFyQ2xhc3MuTEN9XWApLFxuICAgIGlzQ2FzZVNlbnNpdGl2ZTogbmV3IFJlZ0V4cChgWyR7Y2hhckNsYXNzLkxDfV1gKSxcbiAgICBxdW90ZWQ6IC8oXCJbXlwiXStcIil8KOKAnFte4oCcXSvigJwpL2csXG59O1xuY29uc3QgZmllbGRzID0ge1xuICAgIGNyZWF0b3I6IFtcbiAgICAgICAgJ2F1dGhvcicsXG4gICAgICAgICdib29rYXV0aG9yJyxcbiAgICAgICAgJ2NvbGxhYm9yYXRvcicsXG4gICAgICAgICdjb21tZW50YXRvcicsXG4gICAgICAgICdkaXJlY3RvcicsXG4gICAgICAgICdlZGl0b3InLFxuICAgICAgICAnZWRpdG9yYScsXG4gICAgICAgICdlZGl0b3JiJyxcbiAgICAgICAgJ2VkaXRvcnMnLFxuICAgICAgICAnaG9sZGVyJyxcbiAgICAgICAgJ3NjcmlwdHdyaXRlcicsXG4gICAgICAgICd0cmFuc2xhdG9yJyxcbiAgICBdLFxuICAgIHRpdGxlOiBbXG4gICAgICAgICd0aXRsZScsXG4gICAgICAgICdzZXJpZXMnLFxuICAgICAgICAnc2hvcnR0aXRsZScsXG4gICAgICAgICdib29rdGl0bGUnLFxuICAgICAgICAndHlwZScsXG4gICAgICAgICdvcmlndGl0bGUnLFxuICAgICAgICAnbWFpbnRpdGxlJyxcbiAgICAgICAgJ2V2ZW50dGl0bGUnLFxuICAgIF0sXG4gICAgdW5uZXN0OiBbXG4gICAgICAgICdwdWJsaXNoZXInLFxuICAgICAgICAnbG9jYXRpb24nLFxuICAgIF0sXG4gICAgdmVyYmF0aW06IFtcbiAgICAgICAgJ3VybCcsXG4gICAgICAgICdkb2knLFxuICAgICAgICAnZmlsZScsXG4gICAgICAgICdmaWxlcycsXG4gICAgICAgICdlcHJpbnQnLFxuICAgICAgICAndmVyYmEnLFxuICAgICAgICAndmVyYmInLFxuICAgICAgICAndmVyYmMnLFxuICAgICAgICAnZ3JvdXBzJyxcbiAgICBdLFxuICAgIGh0bWw6IFtcbiAgICAgICAgJ2Fubm90YXRpb24nLFxuICAgICAgICAnY29tbWVudCcsXG4gICAgICAgICdhbm5vdGUnLFxuICAgICAgICAncmV2aWV3JyxcbiAgICAgICAgJ25vdGVzJyxcbiAgICAgICAgJ25vdGUnLFxuICAgIF0sXG4gICAgdW5hYmJyZXY6IFtcbiAgICAgICAgJ2pvdXJuYWwnLFxuICAgICAgICAnam91cm5hbHRpdGxlJyxcbiAgICAgICAgJ2pvdXJuYWwtZnVsbCcsXG4gICAgXSxcbn07XG5jb25zdCBlbmdsaXNoID0gW1xuICAgICdhbWVyaWNhbicsXG4gICAgJ2JyaXRpc2gnLFxuICAgICdjYW5hZGlhbicsXG4gICAgJ2VuZ2xpc2gnLFxuICAgICdhdXN0cmFsaWFuJyxcbiAgICAnbmV3emVhbGFuZCcsXG4gICAgJ3VzZW5nbGlzaCcsXG4gICAgJ3VrZW5nbGlzaCcsXG4gICAgJ2VuJyxcbiAgICAnZW5nJyxcbiAgICAnZW4tYXUnLFxuICAgICdlbi1ieicsXG4gICAgJ2VuLWNhJyxcbiAgICAnZW4tY2InLFxuICAgICdlbi1nYicsXG4gICAgJ2VuLWllJyxcbiAgICAnZW4tam0nLFxuICAgICdlbi1ueicsXG4gICAgJ2VuLXBoJyxcbiAgICAnZW4tdHQnLFxuICAgICdlbi11cycsXG4gICAgJ2VuLXphJyxcbiAgICAnZW4tencnLFxuICAgICdhbmdsYWlzJyxcbl07XG5jbGFzcyBQYXJzZXIge1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICB0aGlzLmluX3ByZWFtYmxlID0gZmFsc2U7XG4gICAgICAgIHRoaXMucHJlYW1ibGUgPSBbXTtcbiAgICAgICAgdGhpcy5sb2cgPSBmdW5jdGlvbiAoc3RyKSB7IH07IC8vIHRzbGludDpkaXNhYmxlLWxpbmUgdmFyaWFibGUtbmFtZSBvbmx5LWFycm93LWZ1bmN0aW9ucyBuby1lbXB0eVxuICAgICAgICBmb3IgKGNvbnN0IFtvcHRpb24sIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhvcHRpb25zKSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgICAgICAgICAgZGVsZXRlIG9wdGlvbnNbb3B0aW9uXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5lcnJvckhhbmRsZXIgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmUgb25seS1hcnJvdy1mdW5jdGlvbnMgbm8tZW1wdHlcbiAgICAgICAgICAgIG9wdGlvbnMuZXJyb3JIYW5kbGVyID0gZnVuY3Rpb24gKGVycikgeyB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG9wdGlvbnMuZXJyb3JIYW5kbGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZSBvbmx5LWFycm93LWZ1bmN0aW9uc1xuICAgICAgICAgICAgb3B0aW9ucy5lcnJvckhhbmRsZXIgPSBmdW5jdGlvbiAoZXJyKSB7IHRocm93IGVycjsgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuc2VudGVuY2VDYXNlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuc2VudGVuY2VDYXNlID0gb3B0aW9ucy5zZW50ZW5jZUNhc2UgPyBlbmdsaXNoIDogW107XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBvcHRpb25zLnNlbnRlbmNlQ2FzZSA9IG9wdGlvbnMuc2VudGVuY2VDYXNlIHx8IGVuZ2xpc2g7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFvcHRpb25zLnN0cmluZ3MpXG4gICAgICAgICAgICBvcHRpb25zLnN0cmluZ3MgPSB7fTtcbiAgICAgICAgaWYgKCFvcHRpb25zLnVuYWJicmV2aWF0ZSlcbiAgICAgICAgICAgIG9wdGlvbnMudW5hYmJyZXZpYXRlID0ge307XG4gICAgICAgIGlmIChvcHRpb25zLnJhdykge1xuICAgICAgICAgICAgb3B0aW9ucy5zZW50ZW5jZUNhc2UgPSBmYWxzZTtcbiAgICAgICAgICAgIG9wdGlvbnMuY2FzZVByb3RlY3Rpb24gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHsgY2FzZVByb3RlY3Rpb246ICdhcy1uZWVkZWQnLCB2ZXJiYXRpbUZpZWxkczogWy9eY2l0ZXVsaWtlLWxpbmtvdXQtWzAtOV0rJC8sIC4uLmZpZWxkcy52ZXJiYXRpbV0sIHZlcmJhdGltQ29tbWFuZHM6IFsndXJsJywgJ2hyZWYnXSwgdW5uZXN0RmllbGRzOiBbLi4uZmllbGRzLnRpdGxlLCAuLi5maWVsZHMudW5uZXN0LCAuLi5maWVsZHMudmVyYmF0aW1dLCB1bm5lc3RNb2RlOiAndW53cmFwJywgaHRtbEZpZWxkczogZmllbGRzLmh0bWwsIGd1ZXNzQWxyZWFkeVNlbnRlbmNlQ2FzZWQ6IHRydWUsIG1hcmt1cDoge30gfSwgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IG1hcmt1cF9kZWZhdWx0cyA9IHtcbiAgICAgICAgICAgIGVucXVvdGU6IHsgb3BlbjogJ1xcdTIwMWMnLCBjbG9zZTogJ1xcdTIwMWQnIH0sXG4gICAgICAgICAgICBzdWI6IHsgb3BlbjogJzxzdWI+JywgY2xvc2U6ICc8L3N1Yj4nIH0sXG4gICAgICAgICAgICBzdXA6IHsgb3BlbjogJzxzdXA+JywgY2xvc2U6ICc8L3N1cD4nIH0sXG4gICAgICAgICAgICBib2xkOiB7IG9wZW46ICc8Yj4nLCBjbG9zZTogJzwvYj4nIH0sXG4gICAgICAgICAgICBpdGFsaWNzOiB7IG9wZW46ICc8aT4nLCBjbG9zZTogJzwvaT4nIH0sXG4gICAgICAgICAgICBzbWFsbENhcHM6IHsgb3BlbjogJzxzcGFuIHN0eWxlPVwiZm9udC12YXJpYW50OnNtYWxsLWNhcHM7XCI+JywgY2xvc2U6ICc8L3NwYW4+JyB9LFxuICAgICAgICAgICAgY2FzZVByb3RlY3Q6IHsgb3BlbjogJzxzcGFuIGNsYXNzPVwibm9jYXNlXCI+JywgY2xvc2U6ICc8L3NwYW4+JyB9LFxuICAgICAgICAgICAgcm9tYW46IHsgb3BlbjogJycsIGNsb3NlOiAnJyB9LFxuICAgICAgICAgICAgZml4ZWRXaWR0aDogeyBvcGVuOiAnJywgY2xvc2U6ICcnIH0sXG4gICAgICAgIH07XG4gICAgICAgIC8vIHBhdGNoIGluIGJlY2F1c2UgdGhlIG9wdGlvbnMgd2lsbCBsaWtlbHkgbm90IGhhdmUgZW5xdW90ZSBhbmQgY2FzZS1wcm90ZWN0XG4gICAgICAgIGZvciAoY29uc3QgW21hcmt1cCwgeyBvcGVuLCBjbG9zZSB9XSBvZiBPYmplY3QuZW50cmllcyhtYXJrdXBfZGVmYXVsdHMpKSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMubWFya3VwW21hcmt1cF0gPSB0aGlzLm9wdGlvbnMubWFya3VwW21hcmt1cF0gfHwgeyBvcGVuLCBjbG9zZSB9O1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgaSBvZiBbMSwgMiwgMywgNF0pIHsgLy8gdHNsaW50OmRpc2FibGUtbGluZTpuby1tYWdpYy1udW1iZXJzXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMubWFya3VwW2BoJHtpfWBdID0gdGhpcy5vcHRpb25zLm1hcmt1cFtgaCR7aX1gXSB8fCB7IG9wZW46IGA8aCR7aX0+YCwgY2xvc2U6IGA8L2gke2l9PmAgfTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVucmVzb2x2ZWRTdHJpbmdzID0ge307XG4gICAgICAgIHRoaXMuZXJyb3JzID0gW107XG4gICAgICAgIHRoaXMuY29tbWVudHMgPSBbXTtcbiAgICAgICAgdGhpcy5lbnRyaWVzID0gW107XG4gICAgICAgIHRoaXMuc3RyaW5ncyA9IHt9O1xuICAgICAgICB0aGlzLm5ld2NvbW1hbmRzID0ge307XG4gICAgICAgIHRoaXMuZGVmYXVsdF9zdHJpbmdzID0ge1xuICAgICAgICAgICAgSkFOOiBbdGhpcy50ZXh0KCcwMScpXSxcbiAgICAgICAgICAgIEZFQjogW3RoaXMudGV4dCgnMDInKV0sXG4gICAgICAgICAgICBNQVI6IFt0aGlzLnRleHQoJzAzJyldLFxuICAgICAgICAgICAgQVBSOiBbdGhpcy50ZXh0KCcwNCcpXSxcbiAgICAgICAgICAgIE1BWTogW3RoaXMudGV4dCgnMDUnKV0sXG4gICAgICAgICAgICBKVU46IFt0aGlzLnRleHQoJzA2JyldLFxuICAgICAgICAgICAgSlVMOiBbdGhpcy50ZXh0KCcwNycpXSxcbiAgICAgICAgICAgIEFVRzogW3RoaXMudGV4dCgnMDgnKV0sXG4gICAgICAgICAgICBTRVA6IFt0aGlzLnRleHQoJzA5JyldLFxuICAgICAgICAgICAgT0NUOiBbdGhpcy50ZXh0KCcxMCcpXSxcbiAgICAgICAgICAgIE5PVjogW3RoaXMudGV4dCgnMTEnKV0sXG4gICAgICAgICAgICBERUM6IFt0aGlzLnRleHQoJzEyJyldLFxuICAgICAgICAgICAgQUNNQ1M6IFt0aGlzLnRleHQoJ0FDTSBDb21wdXRpbmcgU3VydmV5cycpXSxcbiAgICAgICAgICAgIEFDVEE6IFt0aGlzLnRleHQoJ0FjdGEgSW5mb3JtYXRpY2EnKV0sXG4gICAgICAgICAgICBDQUNNOiBbdGhpcy50ZXh0KCdDb21tdW5pY2F0aW9ucyBvZiB0aGUgQUNNJyldLFxuICAgICAgICAgICAgSUJNSlJEOiBbdGhpcy50ZXh0KCdJQk0gSm91cm5hbCBvZiBSZXNlYXJjaCBhbmQgRGV2ZWxvcG1lbnQnKV0sXG4gICAgICAgICAgICBJQk1TSjogW3RoaXMudGV4dCgnSUJNIFN5c3RlbXMgSm91cm5hbCcpXSxcbiAgICAgICAgICAgIElFRUVTRTogW3RoaXMudGV4dCgnSUVFRSBUcmFuc2FjdGlvbnMgb24gU29mdHdhcmUgRW5naW5lZXJpbmcnKV0sXG4gICAgICAgICAgICBJRUVFVEM6IFt0aGlzLnRleHQoJ0lFRUUgVHJhbnNhY3Rpb25zIG9uIENvbXB1dGVycycpXSxcbiAgICAgICAgICAgIElFRUVUQ0FEOiBbdGhpcy50ZXh0KCdJRUVFIFRyYW5zYWN0aW9ucyBvbiBDb21wdXRlci1BaWRlZCBEZXNpZ24gb2YgSW50ZWdyYXRlZCBDaXJjdWl0cycpXSxcbiAgICAgICAgICAgIElQTDogW3RoaXMudGV4dCgnSW5mb3JtYXRpb24gUHJvY2Vzc2luZyBMZXR0ZXJzJyldLFxuICAgICAgICAgICAgSkFDTTogW3RoaXMudGV4dCgnSm91cm5hbCBvZiB0aGUgQUNNJyldLFxuICAgICAgICAgICAgSkNTUzogW3RoaXMudGV4dCgnSm91cm5hbCBvZiBDb21wdXRlciBhbmQgU3lzdGVtIFNjaWVuY2VzJyldLFxuICAgICAgICAgICAgU0NQOiBbdGhpcy50ZXh0KCdTY2llbmNlIG9mIENvbXB1dGVyIFByb2dyYW1taW5nJyldLFxuICAgICAgICAgICAgU0lDT01QOiBbdGhpcy50ZXh0KCdTSUFNIEpvdXJuYWwgb24gQ29tcHV0aW5nJyldLFxuICAgICAgICAgICAgVE9DUzogW3RoaXMudGV4dCgnQUNNIFRyYW5zYWN0aW9ucyBvbiBDb21wdXRlciBTeXN0ZW1zJyldLFxuICAgICAgICAgICAgVE9EUzogW3RoaXMudGV4dCgnQUNNIFRyYW5zYWN0aW9ucyBvbiBEYXRhYmFzZSBTeXN0ZW1zJyldLFxuICAgICAgICAgICAgVE9HOiBbdGhpcy50ZXh0KCdBQ00gVHJhbnNhY3Rpb25zIG9uIEdyYXBoaWNzJyldLFxuICAgICAgICAgICAgVE9NUzogW3RoaXMudGV4dCgnQUNNIFRyYW5zYWN0aW9ucyBvbiBNYXRoZW1hdGljYWwgU29mdHdhcmUnKV0sXG4gICAgICAgICAgICBUT09JUzogW3RoaXMudGV4dCgnQUNNIFRyYW5zYWN0aW9ucyBvbiBPZmZpY2UgSW5mb3JtYXRpb24gU3lzdGVtcycpXSxcbiAgICAgICAgICAgIFRPUExBUzogW3RoaXMudGV4dCgnQUNNIFRyYW5zYWN0aW9ucyBvbiBQcm9ncmFtbWluZyBMYW5ndWFnZXMgYW5kIFN5c3RlbXMnKV0sXG4gICAgICAgICAgICBUQ1M6IFt0aGlzLnRleHQoJ1RoZW9yZXRpY2FsIENvbXB1dGVyIFNjaWVuY2UnKV0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIGFzdChpbnB1dCwgY2xlYW4gPSB0cnVlKSB7XG4gICAgICAgIGNvbnN0IF9hc3QgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBjaHVuayBvZiBjaHVua2VyXzEucGFyc2UoaW5wdXQpKSB7XG4gICAgICAgICAgICBsZXQgY2h1bmtfYXN0ID0gYmlidGV4LnBhcnNlKGNodW5rLnRleHQsIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5vcHRpb25zKSwgeyBjb21iaW5pbmdEaWFjcml0aWNzOiB1bmljb2RlMmxhdGV4XzEuZGlhY3JpdGljcy5jb21tYW5kcyB9KSk7XG4gICAgICAgICAgICBpZiAoY2xlYW4pXG4gICAgICAgICAgICAgICAgY2h1bmtfYXN0ID0gdGhpcy5jbGVhbihjaHVua19hc3QpO1xuICAgICAgICAgICAgX2FzdC5wdXNoKGNodW5rX2FzdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9hc3Q7XG4gICAgfVxuICAgIHBhcnNlKGlucHV0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuYXN5bmMgPyB0aGlzLnBhcnNlQXN5bmMoaW5wdXQpIDogdGhpcy5wYXJzZVN5bmMoaW5wdXQpO1xuICAgIH1cbiAgICBwYXJzZVN5bmMoaW5wdXQpIHtcbiAgICAgICAgZm9yIChjb25zdCBjaHVuayBvZiBjaHVua2VyXzEucGFyc2UoaW5wdXQpKSB7XG4gICAgICAgICAgICB0aGlzLnBhcnNlQ2h1bmsoY2h1bmspO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlZCgpO1xuICAgIH1cbiAgICBhc3luYyBwYXJzZUFzeW5jKGlucHV0KSB7XG4gICAgICAgIGZvciAoY29uc3QgY2h1bmsgb2YgYXdhaXQgY2h1bmtlcl8xLnBhcnNlKGlucHV0LCB7IGFzeW5jOiB0cnVlIH0pKSB7XG4gICAgICAgICAgICB0aGlzLnBhcnNlQ2h1bmsoY2h1bmspO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlZCgpO1xuICAgIH1cbiAgICBwYXJzZWQoKSB7XG4gICAgICAgIHRoaXMuZmllbGQgPSBudWxsO1xuICAgICAgICBjb25zdCBzdHJpbmdzID0ge307XG4gICAgICAgIHRoaXMuY2xlYW5pbmcgPSB7IHR5cGU6ICdvdGhlcicgfTtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5zdHJpbmdzKSkge1xuICAgICAgICAgICAgdGhpcy5maWVsZCA9IHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnQHN0cmluZycsXG4gICAgICAgICAgICAgICAgdGV4dDogJycsXG4gICAgICAgICAgICAgICAgbGV2ZWw6IDAsXG4gICAgICAgICAgICAgICAgcHJlc2VydmVSYW5nZXM6IG51bGwsXG4gICAgICAgICAgICAgICAgd29yZHM6IHtcbiAgICAgICAgICAgICAgICAgICAgdXBwZXI6IDAsXG4gICAgICAgICAgICAgICAgICAgIGxvd2VyOiAwLFxuICAgICAgICAgICAgICAgICAgICBvdGhlcjogMCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMuY29udmVydCh0aGlzLmNsZWFuKHZhbHVlKSk7XG4gICAgICAgICAgICBzdHJpbmdzW2tleV0gPSB0aGlzLmZpZWxkLnRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGVycm9yczogdGhpcy5lcnJvcnMsXG4gICAgICAgICAgICBlbnRyaWVzOiB0aGlzLmVudHJpZXMsXG4gICAgICAgICAgICBjb21tZW50czogdGhpcy5jb21tZW50cyxcbiAgICAgICAgICAgIHN0cmluZ3MsXG4gICAgICAgICAgICBwcmVhbWJsZTogdGhpcy5wcmVhbWJsZSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcHJlc2VydmUoc3RhcnQsIGVuZCwgcmVhc29uKSB7XG4gICAgICAgIGlmICghdGhpcy5maWVsZC5wcmVzZXJ2ZVJhbmdlcylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKCFlbmQpIHtcbiAgICAgICAgICAgIHRoaXMuZmllbGQucHJlc2VydmVSYW5nZXMgPSBudWxsO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8qXG4gICAgICAgIHRoaXMuZmllbGQucHJlc2VydmVSYW5nZXMgPSB0aGlzLmZpZWxkLnByZXNlcnZlUmFuZ2VzLmZpbHRlcihyYW5nZSA9PiByYW5nZS5zdGFydCA8IHN0YXJ0IHx8IHJhbmdlLmVuZCA+IGVuZClcbiAgICAgICAgaWYgKHRoaXMuZmllbGQucHJlc2VydmVSYW5nZXMuZmluZChyYW5nZSA9PiByYW5nZS5zdGFydCA8PSBzdGFydCAmJiByYW5nZS5lbmQgPj0gZW5kKSkgcmV0dXJuXG4gICAgICAgICovXG4gICAgICAgIC8qXG4gICAgICAgIGlmICh0aGlzLmZpZWxkLnByZXNlcnZlUmFuZ2VzICYmIHRoaXMuZmllbGQucHJlc2VydmVSYW5nZXMubGVuZ3RoKSB7XG4gICAgICAgICAgY29uc3QgbGFzdCA9IHRoaXMuZmllbGQucHJlc2VydmVSYW5nZXNbdGhpcy5maWVsZC5wcmVzZXJ2ZVJhbmdlcy5sZW5ndGggLSAxXVxuICAgICAgICAgIGlmIChzdGFydCA8IGxhc3Quc3RhcnQpIHRocm93IG5ldyBFcnJvcihKU09OLnN0cmluZ2lmeSh7Li4ubGFzdCwgbmV3OiB7IHN0YXJ0LCBlbmQsIHJlYXNvbiB9LCB0ZXh0OiB0aGlzLmZpZWxkLnRleHR9KSlcbiAgICAgICAgfVxuICAgICAgICAqL1xuICAgICAgICB0aGlzLmZpZWxkLnByZXNlcnZlUmFuZ2VzLnB1c2goeyBzdGFydCwgZW5kLCByZWFzb24gfSk7XG4gICAgfVxuICAgIHBhcnNlQ2h1bmsoY2h1bmspIHtcbiAgICAgICAgdGhpcy5jaHVuayA9IGNodW5rLnRleHQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsZXQgYmliID0gYmlidGV4LnBhcnNlKGNodW5rLnRleHQsIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5vcHRpb25zKSwgeyBjb21iaW5pbmdEaWFjcml0aWNzOiB1bmljb2RlMmxhdGV4XzEuZGlhY3JpdGljcy5jb21tYW5kcyB9KSk7XG4gICAgICAgICAgICBpZiAoYmliLmtpbmQgIT09ICdCaWJsaW9ncmFwaHknKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcih0aGlzLnNob3coYmliKSk7XG4gICAgICAgICAgICBiaWIgPSB0aGlzLmNsZWFuKGJpYik7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGVudGl0eSBvZiBiaWIuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGVudGl0eS5raW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ0VudHJ5JzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnQnJhY2VkQ29tbWVudCc6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ0xpbmVDb21tZW50JzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnUHJlYW1ibGVFeHByZXNzaW9uJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udmVydChlbnRpdHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ1N0cmluZ0RlY2xhcmF0aW9uJzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnTm9uRW50cnlUZXh0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBiaWI7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgaWYgKCFlcnIubG9jYXRpb24pXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgdGhpcy5lcnJvcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogZXJyLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgbGluZTogZXJyLmxvY2F0aW9uLnN0YXJ0LmxpbmUgKyBjaHVuay5vZmZzZXQubGluZSxcbiAgICAgICAgICAgICAgICBjb2x1bW46IGVyci5sb2NhdGlvbi5zdGFydC5jb2x1bW4sXG4gICAgICAgICAgICAgICAgc291cmNlOiB0aGlzLmNodW5rLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzaG93KG8pIHtcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lIHByZWZlci10ZW1wbGF0ZVxuICAgICAgICBsZXQgdGV4dCA9IEpTT04uc3RyaW5naWZ5KG8pO1xuICAgICAgICBpZiAodGhpcy5jaHVuaylcbiAgICAgICAgICAgIHRleHQgKz0gJ1xcbicgKyB0aGlzLmNodW5rLnRyaW0oKTtcbiAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfVxuICAgIHRleHQodmFsdWUgPSAnJykge1xuICAgICAgICByZXR1cm4geyBraW5kOiAnVGV4dCcsIHZhbHVlLCBtb2RlOiAndGV4dCcgfTtcbiAgICB9XG4gICAgZXJyb3IoZXJyLCByZXR1cm52YWx1ZSkge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMub3B0aW9ucy5lcnJvckhhbmRsZXIgPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuZXJyb3JIYW5kbGVyKGVycik7XG4gICAgICAgIHJldHVybiByZXR1cm52YWx1ZTtcbiAgICB9XG4gICAgY29uZGVuc2Uobm9kZSkge1xuICAgICAgICAvLyBhcHBseSBjbGVhbmluZyB0byByZXN1bHRpbmcgY2hpbGRyZW5cbiAgICAgICAgbm9kZS52YWx1ZSA9IG5vZGUudmFsdWUubWFwKGNoaWxkID0+IHRoaXMuY2xlYW4oY2hpbGQpKTtcbiAgICAgICAgLy8gdW5wYWNrIHJlZHVuZGFudCBibG9ja3NcbiAgICAgICAgbm9kZS52YWx1ZSA9IG5vZGUudmFsdWUucmVkdWNlKChhY2MsIGNoaWxkLCBpKSA9PiB7XG4gICAgICAgICAgICBpZiAoY2hpbGQua2luZCA9PT0gJ0Jsb2NrJyAmJiAhY2hpbGQuY2FzZSAmJiBPYmplY3Qua2V5cyhjaGlsZC5tYXJrdXApLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGFjYyA9IGFjYy5jb25jYXQoY2hpbGQudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYWNjLnB1c2goY2hpbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfSwgW10pO1xuICAgICAgICAvLyBjb25kZW5zZSB0ZXh0IG5vZGVzIHRvIG1ha2Ugd2hvbGUgd29yZHMgZm9yIHNlbnRlbmNlIGNhc2luZ1xuICAgICAgICBub2RlLnZhbHVlID0gbm9kZS52YWx1ZS5yZWR1Y2UoKGFjYywgY2hpbGQsIGkpID0+IHtcbiAgICAgICAgICAgIGlmIChhY2MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgYWNjLnB1c2goY2hpbGQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBsYXN0ID0gYWNjW2FjYy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIGNvbnN0IG5leHQgPSBub2RlLnZhbHVlW2kgKyAxXTtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuY2FzZVByb3RlY3Rpb24gPT09ICdzdHJpY3QnICYmIHRoaXMub25seUNhc2VQcm90ZWN0ZWQobGFzdCkgJiYgY2hpbGQua2luZCA9PT0gJ1RleHQnICYmICFjaGlsZC52YWx1ZS5tYXRjaChwcmVzZXJ2ZUNhc2UuaXNDYXNlU2Vuc2l0aXZlKSAmJiB0aGlzLm9ubHlDYXNlUHJvdGVjdGVkKG5leHQpKSB7XG4gICAgICAgICAgICAgICAgbGFzdC52YWx1ZS5wdXNoKGNoaWxkKTtcbiAgICAgICAgICAgICAgICBkZWxldGUgbGFzdC5zb3VyY2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChsYXN0LmtpbmQgPT09ICdCbG9jaycgJiYgY2hpbGQua2luZCA9PT0gJ0Jsb2NrJyAmJiBPYmplY3Qua2V5cyhsYXN0Lm1hcmt1cCkuc29ydCgpLmpvaW4oJy8nKSA9PT0gT2JqZWN0LmtleXMoY2hpbGQubWFya3VwKS5zb3J0KCkuam9pbignLycpKSB7XG4gICAgICAgICAgICAgICAgbGFzdC52YWx1ZSA9IGxhc3QudmFsdWUuY29uY2F0KGNoaWxkLnZhbHVlKTtcbiAgICAgICAgICAgICAgICBkZWxldGUgbGFzdC5zb3VyY2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChsYXN0LmtpbmQgPT09ICdUZXh0JyAmJiBjaGlsZC5raW5kID09PSAnVGV4dCcgJiYgbGFzdC5tb2RlID09PSBjaGlsZC5tb2RlKSB7XG4gICAgICAgICAgICAgICAgbGFzdC52YWx1ZSArPSBjaGlsZC52YWx1ZTtcbiAgICAgICAgICAgICAgICBkZWxldGUgbGFzdC5zb3VyY2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFjYy5wdXNoKGNoaWxkKTtcbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sIFtdKTtcbiAgICB9XG4gICAgb25seUNhc2VQcm90ZWN0ZWQobm9kZSkge1xuICAgICAgICByZXR1cm4gKG5vZGUgPT09IG51bGwgfHwgbm9kZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogbm9kZS5raW5kKSA9PT0gJ0Jsb2NrJyAmJiBub2RlLmNhc2UgPT09ICdwcm90ZWN0JyAmJiBPYmplY3Qua2V5cyhub2RlLm1hcmt1cCkuam9pbignLycpID09PSAnJztcbiAgICB9XG4gICAgYXJndW1lbnQobm9kZSwga2luZCkge1xuICAgICAgICBpZiAoIW5vZGUuYXJndW1lbnRzIHx8ICFub2RlLmFyZ3VtZW50cy5yZXF1aXJlZC5sZW5ndGgpXG4gICAgICAgICAgICByZXR1cm4gKGtpbmQgPT09ICdub25lJyk7XG4gICAgICAgIC8vIGV4cGVjdCAnbicgdGV4dCBhcmd1bWVudHNcbiAgICAgICAgaWYgKHR5cGVvZiBraW5kID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgaWYgKG5vZGUuYXJndW1lbnRzLnJlcXVpcmVkLmxlbmd0aCAhPT0ga2luZClcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm4gbm9kZS5hcmd1bWVudHMucmVxdWlyZWQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmV0dXJuIGZpcnN0IGFyZ3VtZW50IGlmIGl0J3MgdGhlIG9ubHkgb25lXG4gICAgICAgIGlmIChub2RlLmFyZ3VtZW50cy5yZXF1aXJlZC5sZW5ndGggIT09IDEpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIC8vIGxvb3NlIGNoZWNraW5nIGZvciB0ZXh0XG4gICAgICAgIGlmIChraW5kID09PSAndGV4dCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0ID0gbm9kZS5hcmd1bWVudHMucmVxdWlyZWRbMF07XG4gICAgICAgICAgICBpZiAoZmlyc3Qua2luZCA9PT0gJ0Jsb2NrJyAmJiBmaXJzdC52YWx1ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZmlyc3QudmFsdWVbMF0ua2luZCA9PT0gJ1RleHQnKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmlyc3QudmFsdWVbMF0udmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBmYWxsIGJhY2sgdG8gc3RyaWN0IGtpbmQgY2hlY2tcbiAgICAgICAgICAgIGtpbmQgPSAnVGV4dCc7XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmV0dXJuIGZpcnN0IGFyZ3VtZW50IGlmIGl0J3MgdGhlIG9ubHkgb25lIGFuZCBpcyBvZiB0aGUgc3BlY2lmaWVkIGtpbmRcbiAgICAgICAgaWYgKG5vZGUuYXJndW1lbnRzLnJlcXVpcmVkLmxlbmd0aCAhPT0gMSB8fCBub2RlLmFyZ3VtZW50cy5yZXF1aXJlZFswXS5raW5kICE9PSBraW5kKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBzd2l0Y2ggKGtpbmQpIHtcbiAgICAgICAgICAgIGNhc2UgJ1RleHQnOlxuICAgICAgICAgICAgICAgIHJldHVybiBub2RlLmFyZ3VtZW50cy5yZXF1aXJlZFswXS52YWx1ZTtcbiAgICAgICAgICAgIGNhc2UgJ1JlZ3VsYXJDb21tYW5kJzpcbiAgICAgICAgICAgIGNhc2UgJ0Jsb2NrJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS5hcmd1bWVudHMucmVxdWlyZWRbMF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjbGVhbihub2RlKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG5vZGUpKVxuICAgICAgICAgICAgcmV0dXJuIG5vZGUubWFwKGNoaWxkID0+IHRoaXMuY2xlYW4oY2hpbGQpKTtcbiAgICAgICAgZGVsZXRlIG5vZGUubG9jO1xuICAgICAgICBzd2l0Y2ggKG5vZGUua2luZCkge1xuICAgICAgICAgICAgY2FzZSAnSW5saW5lTWF0aCc6XG4gICAgICAgICAgICBjYXNlICdEaXNwbGF5TWF0aCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xlYW5fYmxvY2sobm9kZSk7XG4gICAgICAgICAgICBjYXNlICdFbnZpcm9ubWVudCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xlYW5fZW52aXJvbm1lbnQobm9kZSk7XG4gICAgICAgICAgICBjYXNlICdCbG9jayc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xlYW5fYmxvY2sobm9kZSk7XG4gICAgICAgICAgICBjYXNlICdCaWJsaW9ncmFwaHknOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsZWFuX2JpYihub2RlKTtcbiAgICAgICAgICAgIGNhc2UgJ1JlZ3VsYXJDb21tYW5kJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbGVhbl9jb21tYW5kKG5vZGUpO1xuICAgICAgICAgICAgY2FzZSAnRGlhY3JpdGljQ29tbWFuZCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xlYW5fZGlhY3JpdGljKG5vZGUpO1xuICAgICAgICAgICAgY2FzZSAnRW50cnknOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsZWFuX2VudHJ5KG5vZGUpO1xuICAgICAgICAgICAgY2FzZSAnRmllbGQnOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMucmF3ID8gbm9kZSA6IHRoaXMuY2xlYW5fZmllbGQobm9kZSk7XG4gICAgICAgICAgICBjYXNlICdTdHJpbmdEZWNsYXJhdGlvbic6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xlYW5fc3RyaW5nZGVjbChub2RlKTtcbiAgICAgICAgICAgIGNhc2UgJ1N0cmluZ1JlZmVyZW5jZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xlYW5fc3RyaW5ncmVmKG5vZGUpO1xuICAgICAgICAgICAgY2FzZSAnU3Vic2NyaXB0Q29tbWFuZCc6XG4gICAgICAgICAgICBjYXNlICdTdXBlcnNjcmlwdENvbW1hbmQnOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsZWFuX3NjcmlwdChub2RlKTtcbiAgICAgICAgICAgIGNhc2UgJ1N5bWJvbENvbW1hbmQnOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsZWFuX3N5bWJvbChub2RlKTtcbiAgICAgICAgICAgIGNhc2UgJ1ByZWFtYmxlRXhwcmVzc2lvbic6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xlYW5fcHJlYW1ibGUobm9kZSk7XG4gICAgICAgICAgICBjYXNlICdOdW1iZXInOlxuICAgICAgICAgICAgY2FzZSAnVGV4dCc6XG4gICAgICAgICAgICBjYXNlICdCcmFjZWRDb21tZW50JzpcbiAgICAgICAgICAgIGNhc2UgJ0xpbmVDb21tZW50JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3IobmV3IFBhcnNlckVycm9yKGBubyBjbGVhbnVwIG1ldGhvZCBmb3IgJHt0aGlzLnNob3cobm9kZSl9YCwgbm9kZSksIHRoaXMudGV4dCgpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjbGVhbl9wcmVhbWJsZShub2RlKSB7XG4gICAgICAgIHRoaXMuaW5fcHJlYW1ibGUgPSB0cnVlO1xuICAgICAgICBjb25zdCBjbGVhbiA9IHRoaXMuY2xlYW4obm9kZS52YWx1ZSk7XG4gICAgICAgIHRoaXMuaW5fcHJlYW1ibGUgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGNsZWFuO1xuICAgIH1cbiAgICBjbGVhbl9iaWIobm9kZSkge1xuICAgICAgICBub2RlLmNoaWxkcmVuID0gbm9kZS5jaGlsZHJlbi5maWx0ZXIoY2hpbGQgPT4gY2hpbGQua2luZCAhPT0gJ05vbkVudHJ5VGV4dCcpLm1hcChjaGlsZCA9PiB0aGlzLmNsZWFuKGNoaWxkKSk7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgICBjbGVhbl9zdHJpbmdkZWNsKG5vZGUpIHtcbiAgICAgICAgdGhpcy5zdHJpbmdzW25vZGUubmFtZS50b1VwcGVyQ2FzZSgpXSA9IG5vZGUudmFsdWU7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgICBjbGVhbl9zdHJpbmdyZWYobm9kZSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBub2RlLm5hbWUudG9VcHBlckNhc2UoKTtcbiAgICAgICAgY29uc3QgX3N0cmluZyA9IHRoaXMuc3RyaW5nc1tuYW1lXVxuICAgICAgICAgICAgfHwgdGhpcy5vcHRpb25zLnN0cmluZ3NbbmFtZV1cbiAgICAgICAgICAgIHx8IHRoaXMuZGVmYXVsdF9zdHJpbmdzW25hbWVdXG4gICAgICAgICAgICB8fCAoZmllbGRzLnVuYWJicmV2LmluY2x1ZGVzKHRoaXMuY2xlYW5pbmcubmFtZSkgJiYgKChfYSA9IHRoaXMub3B0aW9ucy51bmFiYnJldmlhdGVbbmFtZV0pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50ZXh0KSAmJiBbdGhpcy50ZXh0KHRoaXMub3B0aW9ucy51bmFiYnJldmlhdGVbbmFtZV0udGV4dCldKTtcbiAgICAgICAgaWYgKCFfc3RyaW5nKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMudW5yZXNvbHZlZFN0cmluZ3NbbmFtZV0pXG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvcnMucHVzaCh7IG1lc3NhZ2U6IGBVbnJlc29sdmVkIEBzdHJpbmcgcmVmZXJlbmNlICR7SlNPTi5zdHJpbmdpZnkobm9kZS5uYW1lKX1gIH0pO1xuICAgICAgICAgICAgdGhpcy51bnJlc29sdmVkU3RyaW5nc1tuYW1lXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY2xlYW4oe1xuICAgICAgICAgICAga2luZDogJ0Jsb2NrJyxcbiAgICAgICAgICAgIC8vIGlmIHRoZSBzdHJpbmcgaXNuJ3QgZm91bmQsIGFkZCBpdCBhcy1pcyBidXQgZXhlbXB0IGl0IGZyb20gc2VudGVuY2UgY2FzaW5nXG4gICAgICAgICAgICBjYXNlOiBfc3RyaW5nID8gdW5kZWZpbmVkIDogJ3ByZXNlcnZlJyxcbiAgICAgICAgICAgIG1hcmt1cDoge30sXG4gICAgICAgICAgICB2YWx1ZTogX3N0cmluZyA/IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoX3N0cmluZykpIDogW3RoaXMudGV4dChub2RlLm5hbWUpXSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNsZWFuX2VudHJ5KG5vZGUpIHtcbiAgICAgICAgY29uc3Qgc2hvcnRqb3VybmFscyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIG5vZGUuZmllbGRzKSB7XG4gICAgICAgICAgICBpZiAoZmllbGRzLnVuYWJicmV2LmluY2x1ZGVzKGZpZWxkLm5hbWUpICYmIEFycmF5LmlzQXJyYXkoZmllbGQudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWJiciA9IGZpZWxkLnZhbHVlLm1hcCh2ID0+IHYuc291cmNlKS5qb2luKCcnKTtcbiAgICAgICAgICAgICAgICBjb25zdCBqb3VybmFsID0gdGhpcy5vcHRpb25zLnVuYWJicmV2aWF0ZVthYmJyXTtcbiAgICAgICAgICAgICAgICBpZiAoam91cm5hbCkge1xuICAgICAgICAgICAgICAgICAgICBzaG9ydGpvdXJuYWxzLnB1c2goT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGZpZWxkKSkpLCB7IG5hbWU6ICdzaG9ydGpvdXJuYWwnIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGpvdXJuYWwuYXN0KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG5vZGUuZmllbGRzID0gbm9kZS5maWVsZHMuY29uY2F0KHNob3J0am91cm5hbHMpLm1hcChjaGlsZCA9PiB0aGlzLmNsZWFuKGNoaWxkKSk7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgICBzdGFydENsZWFuaW5nKG5hbWUpIHtcbiAgICAgICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKGZpZWxkcy50aXRsZS5pbmNsdWRlcyhuYW1lKSkge1xuICAgICAgICAgICAgdGhpcy5jbGVhbmluZyA9IHsgdHlwZTogJ3RpdGxlJywgbmFtZSB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGZpZWxkcy5jcmVhdG9yLmluY2x1ZGVzKG5hbWUucmVwbGFjZSgvcyQvLCAnJykpKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFuaW5nID0geyB0eXBlOiAnY3JlYXRvcicsIG5hbWU6IG5hbWUucmVwbGFjZSgvcyQvLCAnJykgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYW5pbmcgPSB7IHR5cGU6ICdvdGhlcicsIG5hbWUgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdHJpcE5vQ2FzZShub2RlLCBzdHJpcCwgcHJlc2VydmUpIHtcbiAgICAgICAgc3dpdGNoIChub2RlLmtpbmQpIHtcbiAgICAgICAgICAgIGNhc2UgJ1JlZ3VsYXJDb21tYW5kJzpcbiAgICAgICAgICAgICAgICAvLyBhIGJpdCBjaGVhdHkgdG8gYXNzdW1lIHRoZXNlIHRvIGJlIG5vY2FzZWQsIGJ1dCBpdCdzIGp1c3QgbW9yZSBsaWtlbHkgdG8gYmUgd2hhdCBwZW9wbGUgd2FudFxuICAgICAgICAgICAgICAgIGlmIChbJ2Noc2YnLCAnYmlic3RyaW5nJywgJ2NpdGUnXS5pbmNsdWRlcyhub2RlLmNvbW1hbmQpKVxuICAgICAgICAgICAgICAgICAgICBzdHJpcCA9IHRydWU7XG4gICAgICAgICAgICAgICAgbm9kZS5hcmd1bWVudHMucmVxdWlyZWQubWFwKGFyZyA9PiB0aGlzLnN0cmlwTm9DYXNlKGFyZywgc3RyaXAsIHByZXNlcnZlKSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdCbG9jayc6XG4gICAgICAgICAgICBjYXNlICdJbmxpbmVNYXRoJzpcbiAgICAgICAgICAgIGNhc2UgJ0Rpc3BsYXlNYXRoJzpcbiAgICAgICAgICAgICAgICBpZiAoc3RyaXAgJiYgbm9kZS5jYXNlID09PSAncHJvdGVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByZXNlcnZlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLmNhc2UgPSAncHJlc2VydmUnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG5vZGUuY2FzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBub2RlLnZhbHVlLm1hcCh2ID0+IHRoaXMuc3RyaXBOb0Nhc2Uodiwgc3RyaXAgfHwgbm9kZS5jYXNlID09PSAncHJvdGVjdCcsIHByZXNlcnZlKSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdGaWVsZCc6XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobm9kZS52YWx1ZSkpXG4gICAgICAgICAgICAgICAgICAgIG5vZGUudmFsdWUubWFwKHYgPT4gdGhpcy5zdHJpcE5vQ2FzZSh2LCBzdHJpcCwgcHJlc2VydmUpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICBpc1ZlcmJhdGltRmllbGQobmFtZSkge1xuICAgICAgICByZXR1cm4gISF0aGlzLm9wdGlvbnMudmVyYmF0aW1GaWVsZHMuZmluZChwID0+ICh0eXBlb2YgcCA9PT0gJ3N0cmluZycpID8gbmFtZSA9PT0gcCA6IG5hbWUubWF0Y2gocCkpO1xuICAgIH1cbiAgICBjbGVhbl9maWVsZChub2RlKSB7XG4gICAgICAgIHRoaXMuc3RhcnRDbGVhbmluZyhub2RlLm5hbWUpO1xuICAgICAgICB0aGlzLnN0cmlwTm9DYXNlKG5vZGUsICF0aGlzLm9wdGlvbnMuY2FzZVByb3RlY3Rpb24gfHwgdGhpcy5pc1ZlcmJhdGltRmllbGQobm9kZS5uYW1lKSwgdGhpcy5vcHRpb25zLnNlbnRlbmNlQ2FzZS5sZW5ndGggPT09IDApO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShub2RlLnZhbHVlKSlcbiAgICAgICAgICAgIHRoaXMuY29uZGVuc2Uobm9kZSk7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgICBjbGVhbl9zY3JpcHQobm9kZSkge1xuICAgICAgICBsZXQgbSwgdmFsdWUsIHNpbmdsZWNoYXI7XG4gICAgICAgIC8vIHJlY29nbml6ZSBjb21iaW5lZCBmb3JtcyBsaWtlIFxcXlxcY2lyY1xuICAgICAgICBpZiAoc2luZ2xlY2hhciA9IHVuaWNvZGUybGF0ZXhfMS5sYXRleFtub2RlLnNvdXJjZV0pXG4gICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0KHNpbmdsZWNoYXIpO1xuICAgICAgICBpZiAoKG0gPSBub2RlLnNvdXJjZS5tYXRjaCgvXihbXFxeX10pKFtee31dKykkLykpICYmICgoc2luZ2xlY2hhciA9IHVuaWNvZGUybGF0ZXhfMS5sYXRleFtgJHttWzFdfSR7bVsyXX1gXSkgfHwgKHNpbmdsZWNoYXIgPSB1bmljb2RlMmxhdGV4XzEubGF0ZXhbYCR7bVsxXX17JHttWzJdfX1gXSkpKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dChzaW5nbGVjaGFyKTtcbiAgICAgICAgaWYgKChtID0gbm9kZS5zb3VyY2UubWF0Y2goL14oW1xcXl9dKVxceyhbXnt9XSspXFx9JC8pKSAmJiAoKHNpbmdsZWNoYXIgPSB1bmljb2RlMmxhdGV4XzEubGF0ZXhbYCR7bVsxXX0ke21bMl19YF0pIHx8IChzaW5nbGVjaGFyID0gdW5pY29kZTJsYXRleF8xLmxhdGV4W2Ake21bMV19eyR7bVsyXX19YF0pKSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRleHQoc2luZ2xlY2hhcik7XG4gICAgICAgIGNvbnN0IGNtZCA9IG5vZGUua2luZCA9PT0gJ1N1cGVyc2NyaXB0Q29tbWFuZCcgPyAnXicgOiAnXyc7XG4gICAgICAgIGlmICh0eXBlb2Ygbm9kZS52YWx1ZSA9PT0gJ3N0cmluZycgJiYgKHNpbmdsZWNoYXIgPSB1bmljb2RlMmxhdGV4XzEubGF0ZXhbYCR7Y21kfSR7bm9kZS52YWx1ZX1gXSB8fCB1bmljb2RlMmxhdGV4XzEubGF0ZXhbYCR7Y21kfXske25vZGUudmFsdWV9fWBdKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dChzaW5nbGVjaGFyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIG5vZGUudmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IFt0aGlzLnRleHQobm9kZS52YWx1ZSldO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCFBcnJheS5pc0FycmF5KG5vZGUudmFsdWUpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IFtub2RlLnZhbHVlXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhbHVlID0gbm9kZS52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtb2RlID0gbm9kZS5raW5kID09PSAnU3VwZXJzY3JpcHRDb21tYW5kJyA/ICdzdXAnIDogJ3N1Yic7XG4gICAgICAgIHJldHVybiB0aGlzLmNsZWFuKHtcbiAgICAgICAgICAgIGtpbmQ6ICdCbG9jaycsXG4gICAgICAgICAgICBtYXJrdXA6IHsgW21vZGVdOiB0cnVlIH0sXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNsZWFuX2Vudmlyb25tZW50KG5vZGUpIHtcbiAgICAgICAgdGhpcy5jb25kZW5zZShub2RlKTtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuICAgIG5lZWRzUHJvdGVjdGlvbih3b3JkKSB7XG4gICAgICAgIHJldHVybiAhd29yZC5tYXRjaChwcmVzZXJ2ZUNhc2UuaGFzVXBwZXIpICYmIHdvcmQubWF0Y2gocHJlc2VydmVDYXNlLmhhc0xvd2VyKTtcbiAgICB9XG4gICAgY2xlYW5fYmxvY2sobm9kZSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHRoaXMuY29uZGVuc2Uobm9kZSk7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuY2FzZVByb3RlY3Rpb24gIT09ICdzdHJpY3QnICYmICgoX2EgPSB0aGlzLmNsZWFuaW5nKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudHlwZSkgPT09ICd0aXRsZScgJiYgbm9kZS5jYXNlID09PSAncHJvdGVjdCcpIHtcbiAgICAgICAgICAgIC8vIHRlc3Qgd2hldGhlciB3ZSBjYW4gZ2V0IGF3YXkgd2l0aCBza2lwcGluZyBjYXNlIHByb3RlY3Rpb24gYmVjYXVzZSBpdCBjb250YWlucyBhbGwgd29yZHMgdGhhdCB3aWxsIGJlIHByZXNlcnZlZCBhbnl3YXkgd2hlbiBjb252ZXJ0aW5nIGJhY2sgdG8gVGl0bGUgQ2FzZVxuICAgICAgICAgICAgbGV0IHByZXNlcnZlID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2Ygbm9kZS52YWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmIChjaGlsZC5raW5kID09PSAnVGV4dCcpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjaGlsZC52YWx1ZS50cmltKCk7XG4gICAgICAgICAgICAgICAgICAgIHByZXNlcnZlID0gIXZhbHVlLm1hdGNoKHByZXNlcnZlQ2FzZS5pc0Nhc2VTZW5zaXRpdmUpIHx8ICF2YWx1ZS5zcGxpdCgvXFxzKy8pLmZpbmQod29yZCA9PiB0aGlzLm5lZWRzUHJvdGVjdGlvbih3b3JkKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwcmVzZXJ2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIXByZXNlcnZlKVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwcmVzZXJ2ZSlcbiAgICAgICAgICAgICAgICBub2RlLmNhc2UgPSAncHJlc2VydmUnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmtpbmQgPT09ICdCbG9jaycpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW21hcmt1cCwgb25dIG9mIE9iamVjdC5lbnRyaWVzKG5vZGUubWFya3VwKSkge1xuICAgICAgICAgICAgICAgIGlmICghb24pXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBub2RlLm1hcmt1cFttYXJrdXBdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgICBjbGVhbl9kaWFjcml0aWMobm9kZSkge1xuICAgICAgICBjb25zdCBjaGFyID0gbm9kZS5kb3RsZXNzID8gYFxcXFwke25vZGUuY2hhcmFjdGVyfWAgOiBub2RlLmNoYXJhY3RlcjtcbiAgICAgICAgbGV0IHVuaWNvZGUgPSB1bmljb2RlMmxhdGV4XzEubGF0ZXhbYFxcXFwke25vZGUubWFya317JHtjaGFyfX1gXVxuICAgICAgICAgICAgfHwgdW5pY29kZTJsYXRleF8xLmxhdGV4W2BcXFxcJHtub2RlLm1hcmt9JHtjaGFyfWBdXG4gICAgICAgICAgICB8fCB1bmljb2RlMmxhdGV4XzEubGF0ZXhbYHtcXFxcJHtub2RlLm1hcmt9ICR7Y2hhcn19YF1cbiAgICAgICAgICAgIHx8IHVuaWNvZGUybGF0ZXhfMS5sYXRleFtge1xcXFwke25vZGUubWFya30ke2NoYXJ9fWBdXG4gICAgICAgICAgICB8fCB1bmljb2RlMmxhdGV4XzEubGF0ZXhbYFxcXFwke25vZGUubWFya30gJHtjaGFyfWBdO1xuICAgICAgICBpZiAoIXVuaWNvZGUgJiYgIW5vZGUuZG90bGVzcyAmJiBub2RlLmNoYXJhY3Rlci5sZW5ndGggPT09IDEgJiYgdW5pY29kZTJsYXRleF8xLmRpYWNyaXRpY3MudG91bmljb2RlW25vZGUubWFya10pXG4gICAgICAgICAgICB1bmljb2RlID0gbm9kZS5jaGFyYWN0ZXIgKyB1bmljb2RlMmxhdGV4XzEuZGlhY3JpdGljcy50b3VuaWNvZGVbbm9kZS5tYXJrXTtcbiAgICAgICAgaWYgKCF1bmljb2RlICYmICF0aGlzLmluX3ByZWFtYmxlKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3IobmV3IFRlWEVycm9yKGBVbmhhbmRsZWQgXFxcXCR7bm9kZS5tYXJrfXske2NoYXJ9fWAsIG5vZGUsIHRoaXMuY2h1bmspLCB0aGlzLnRleHQoKSk7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHQodW5pY29kZSk7XG4gICAgfVxuICAgIGNsZWFuX3N5bWJvbChub2RlKSB7XG4gICAgICAgIGlmIChub2RlLmNvbW1hbmQgPT09ICdcXFxcJylcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRleHQoJ1xcbicpO1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0KHVuaWNvZGUybGF0ZXhfMS5sYXRleFtgXFxcXCR7bm9kZS5jb21tYW5kfWBdIHx8IG5vZGUuY29tbWFuZCk7XG4gICAgfVxuICAgIGZpcnN0X3RleHRfYmxvY2sobm9kZSkge1xuICAgICAgICBpZiAoIW5vZGUpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgaWYgKG5vZGUua2luZCA9PT0gJ0Jsb2NrJykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBub2RlLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChjaGlsZC5raW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ1RleHQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkLnZhbHVlID8gbm9kZSA6IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ0Jsb2NrJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHRoaXMuZmlyc3RfdGV4dF9ibG9jayhjaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYW5kaWRhdGU7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNsZWFuX2NvbW1hbmQobm9kZSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGxldCBhcmcsIHVuaWNvZGU7XG4gICAgICAgIGlmICh1bmljb2RlID0gdW5pY29kZTJsYXRleF8xLmxhdGV4W25vZGUuc291cmNlXSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRleHQodW5pY29kZSk7XG4gICAgICAgIHN3aXRjaCAobm9kZS5jb21tYW5kKSB7XG4gICAgICAgICAgICBjYXNlICduZXdjb21tYW5kJzpcbiAgICAgICAgICAgICAgICBpZiAoKChfYSA9IG5vZGUuYXJndW1lbnRzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EucmVxdWlyZWQubGVuZ3RoKSA9PT0gMlxuICAgICAgICAgICAgICAgICAgICAmJiBub2RlLmFyZ3VtZW50cy5yZXF1aXJlZFswXS5raW5kID09PSAnQmxvY2snXG4gICAgICAgICAgICAgICAgICAgICYmIG5vZGUuYXJndW1lbnRzLnJlcXVpcmVkWzBdLnZhbHVlLmxlbmd0aCA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAmJiBub2RlLmFyZ3VtZW50cy5yZXF1aXJlZFswXS52YWx1ZVswXS5raW5kID09PSAnUmVndWxhckNvbW1hbmQnXG4gICAgICAgICAgICAgICAgICAgICYmIG5vZGUuYXJndW1lbnRzLnJlcXVpcmVkWzFdLmtpbmQgPT09ICdCbG9jaycpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdjb21tYW5kc1tub2RlLmFyZ3VtZW50cy5yZXF1aXJlZFswXS52YWx1ZVswXS5jb21tYW5kXSA9IG5vZGUuYXJndW1lbnRzLnJlcXVpcmVkWzFdLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCduZXdjb21tYW5kPycsIEpTT04uc3RyaW5naWZ5KG5vZGUsIG51bGwsIDIpKVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaXRlbSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsga2luZDogJ01hcmt1cCcsIHZhbHVlOiAnPGxpPicsIHNvdXJjZTogbm9kZS5zb3VyY2UgfTtcbiAgICAgICAgICAgIGNhc2UgJ2ZyYWMnOlxuICAgICAgICAgICAgICAgIGlmIChhcmcgPSB0aGlzLmFyZ3VtZW50KG5vZGUsIDIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhcmdbMF0ua2luZCA9PT0gJ1RleHQnICYmIGFyZ1sxXS5raW5kID09PSAnVGV4dCcgJiYgKHVuaWNvZGUgPSB1bmljb2RlMmxhdGV4XzEubGF0ZXhbYFxcXFxmcmFjeyR7YXJnWzBdLnZhbHVlfX17JHthcmdbMV0udmFsdWV9fWBdKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRleHQodW5pY29kZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsZWFuKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtpbmQ6ICdCbG9jaycsXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlOiAncHJvdGVjdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJrdXA6IHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGtpbmQ6ICdCbG9jaycsIG1hcmt1cDogeyBzdXA6IHRydWUgfSwgdmFsdWU6IFthcmdbMF1dIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXh0KCdcXHUyMDQ0JyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBraW5kOiAnQmxvY2snLCBtYXJrdXA6IHsgc3ViOiB0cnVlIH0sIHZhbHVlOiBbYXJnWzFdXSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgLy8gaWdub3JlXG4gICAgICAgICAgICBjYXNlICd2c3BhY2UnOlxuICAgICAgICAgICAgY2FzZSAndnBoYW50b20nOlxuICAgICAgICAgICAgY2FzZSAncGF0aCc6XG4gICAgICAgICAgICBjYXNlICdhZnRlcmdyb3VwJzpcbiAgICAgICAgICAgIGNhc2UgJ2lnbm9yZXNwYWNlcyc6XG4gICAgICAgICAgICBjYXNlICdyZWxheCc6XG4gICAgICAgICAgICBjYXNlICdub29wc29ydCc6XG4gICAgICAgICAgICBjYXNlICdpZmRlZmluZWQnOlxuICAgICAgICAgICAgY2FzZSAnRGVjbGFyZVByZWZDaGFycyc6XG4gICAgICAgICAgICBjYXNlICdlbHNlJzpcbiAgICAgICAgICAgIGNhc2UgJ2ZpJzpcbiAgICAgICAgICAgIGNhc2UgJ21ha2VhdGxldHRlcic6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dCgpO1xuICAgICAgICAgICAgY2FzZSAnRWxzZXZpZXJHbHlwaCc6XG4gICAgICAgICAgICAgICAgaWYgKGFyZyA9IHRoaXMuYXJndW1lbnQobm9kZSwgJ1RleHQnKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodW5pY29kZSA9IHVuaWNvZGUybGF0ZXhfMS5sYXRleFtgXFxcXCR7bm9kZS5jb21tYW5kfXske2FyZ319YF0pXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0KHVuaWNvZGUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0KFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoYXJnLCAxNikpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdjaHNmJzpcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5hcmd1bWVudChub2RlLCAnbm9uZScpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0KCk7XG4gICAgICAgICAgICAgICAgaWYgKGFyZyA9IHRoaXMuYXJndW1lbnQobm9kZSwgJ0Jsb2NrJykpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsZWFuKGFyZyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdiaWJzdHJpbmcnOlxuICAgICAgICAgICAgICAgIGlmIChhcmcgPSB0aGlzLmFyZ3VtZW50KG5vZGUsICdCbG9jaycpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbGVhbihhcmcpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnY2l0ZSc6XG4gICAgICAgICAgICAgICAgaWYgKGFyZyA9IHRoaXMuYXJndW1lbnQobm9kZSwgJ0Jsb2NrJykpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsZWFuKGFyZyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd0ZXh0c3VwZXJzY3JpcHQnOlxuICAgICAgICAgICAgY2FzZSAnc3AnOlxuICAgICAgICAgICAgICAgIGlmICgoYXJnID0gdGhpcy5hcmd1bWVudChub2RlLCAnVGV4dCcpKSAmJiAodW5pY29kZSA9IHVuaWNvZGUybGF0ZXhfMS5sYXRleFtgXnske2FyZ319YF0pKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0KHVuaWNvZGUpO1xuICAgICAgICAgICAgICAgIGlmIChhcmcgPSB0aGlzLmFyZ3VtZW50KG5vZGUsICdCbG9jaycpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbGVhbihhcmcpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAndGV4dHN1YnNjcmlwdCc6XG4gICAgICAgICAgICBjYXNlICdzYic6XG4gICAgICAgICAgICAgICAgaWYgKChhcmcgPSB0aGlzLmFyZ3VtZW50KG5vZGUsICdUZXh0JykpICYmICh1bmljb2RlID0gdW5pY29kZTJsYXRleF8xLmxhdGV4W2BfeyR7YXJnfX1gXSkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRleHQodW5pY29kZSk7XG4gICAgICAgICAgICAgICAgaWYgKGFyZyA9IHRoaXMuYXJndW1lbnQobm9kZSwgJ0Jsb2NrJykpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsZWFuKGFyZyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd0ZXh0c2MnOlxuICAgICAgICAgICAgICAgIGlmIChhcmcgPSB0aGlzLmFyZ3VtZW50KG5vZGUsICdCbG9jaycpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbGVhbihhcmcpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZW5xdW90ZSc6XG4gICAgICAgICAgICBjYXNlICdta2JpYnF1b3RlJzpcbiAgICAgICAgICAgICAgICBpZiAoYXJnID0gdGhpcy5hcmd1bWVudChub2RlLCAnQmxvY2snKSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xlYW4oYXJnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3RleHRiZic6XG4gICAgICAgICAgICBjYXNlICdta2JpYmJvbGQnOlxuICAgICAgICAgICAgICAgIGlmIChhcmcgPSB0aGlzLmFyZ3VtZW50KG5vZGUsICdCbG9jaycpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbGVhbihhcmcpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc2VjdGlvbic6XG4gICAgICAgICAgICBjYXNlICdzdWJzZWN0aW9uJzpcbiAgICAgICAgICAgIGNhc2UgJ3N1YnN1YnNlY3Rpb24nOlxuICAgICAgICAgICAgY2FzZSAnc3Vic3Vic3Vic2VjdGlvbic6XG4gICAgICAgICAgICAgICAgaWYgKGFyZyA9IHRoaXMuYXJndW1lbnQobm9kZSwgJ0Jsb2NrJykpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsZWFuKGFyZyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdta2JpYml0YWxpYyc6XG4gICAgICAgICAgICBjYXNlICdta2JpYmVtcGgnOlxuICAgICAgICAgICAgY2FzZSAndGV4dGl0JzpcbiAgICAgICAgICAgIGNhc2UgJ2VtcGgnOlxuICAgICAgICAgICAgICAgIGlmIChhcmcgPSB0aGlzLmFyZ3VtZW50KG5vZGUsICdCbG9jaycpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbGVhbihhcmcpO1xuICAgICAgICAgICAgICAgIGlmIChhcmcgPSB0aGlzLmFyZ3VtZW50KG5vZGUsICdUZXh0JykpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsZWFuKHsga2luZDogJ0Jsb2NrJywgbWFya3VwOiB7IGl0YWxpY3M6IHRydWUgfSwgdmFsdWU6IFt0aGlzLnRleHQoYXJnKV0gfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdiaWJjeXInOlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmFyZ3VtZW50KG5vZGUsICdub25lJykpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRleHQoKTtcbiAgICAgICAgICAgICAgICBpZiAoYXJnID0gdGhpcy5hcmd1bWVudChub2RlLCAnQmxvY2snKSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xlYW4oYXJnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2hzcGFjZSc6XG4gICAgICAgICAgICBjYXNlICdtYXRocm0nOlxuICAgICAgICAgICAgY2FzZSAndGV4dHJtJzpcbiAgICAgICAgICAgIGNhc2UgJ29jaXJjJzpcbiAgICAgICAgICAgIGNhc2UgJ21ib3gnOlxuICAgICAgICAgICAgICAgIGlmIChhcmcgPSB0aGlzLmFyZ3VtZW50KG5vZGUsICd0ZXh0JykpIHtcbiAgICAgICAgICAgICAgICAgICAgdW5pY29kZSA9IHVuaWNvZGUybGF0ZXhfMS5sYXRleFtgXFxcXCR7bm9kZS5jb21tYW5kfXske2FyZ319YF07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRleHQodW5pY29kZSB8fCAobm9kZS5jb21tYW5kID09PSAnaHNwYWNlJyA/ICcgJyA6IGFyZykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICghbm9kZS5hcmd1bWVudHMucmVxdWlyZWQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRleHQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoYXJnID0gdGhpcy5hcmd1bWVudChub2RlLCAnQmxvY2snKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbGVhbihhcmcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIC8vIGp1c3QgdGFrZSB0aGUgVVJMPyBOb3QgdGhlIGxhYmVsP1xuICAgICAgICAgICAgY2FzZSAnaHJlZic6XG4gICAgICAgICAgICAgICAgaWYgKGFyZyA9IHRoaXMuYXJndW1lbnQobm9kZSwgMikpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsZWFuKGFyZ1swXSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd1cmwnOlxuICAgICAgICAgICAgICAgIGlmIChhcmcgPSB0aGlzLmFyZ3VtZW50KG5vZGUsICdUZXh0JykpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRleHQoYXJnKTtcbiAgICAgICAgICAgICAgICBpZiAoYXJnID0gdGhpcy5hcmd1bWVudChub2RlLCAnQmxvY2snKSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xlYW4oYXJnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3NsJzpcbiAgICAgICAgICAgIGNhc2UgJ2VtJzpcbiAgICAgICAgICAgIGNhc2UgJ2l0JzpcbiAgICAgICAgICAgIGNhc2UgJ2l0c2hhcGUnOlxuICAgICAgICAgICAgY2FzZSAnYmYnOlxuICAgICAgICAgICAgY2FzZSAnYmZzZXJpZXMnOlxuICAgICAgICAgICAgY2FzZSAnc2MnOlxuICAgICAgICAgICAgY2FzZSAnc2NzaGFwZSc6XG4gICAgICAgICAgICBjYXNlICd0dCc6XG4gICAgICAgICAgICBjYXNlICdybSc6XG4gICAgICAgICAgICBjYXNlICdzZic6XG4gICAgICAgICAgICBjYXNlICd2ZXJiJzpcbiAgICAgICAgICAgICAgICAvLyBoYW5kbGVkIGluIHRoZSBncmFtbWFyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dCgpO1xuICAgICAgICAgICAgLy8gd291bGRuJ3Qga25vdyB3aGF0IHRvIGRvIHdpdGggdGhlc2VcbiAgICAgICAgICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgICAgICAgY2FzZSAncmlnaHQnOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRleHQoKTtcbiAgICAgICAgICAgIGNhc2UgJ3Bhcic6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dCgnXFxuXFxuJyk7XG4gICAgICAgICAgICBjYXNlICdjeXInOlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmFyZ3VtZW50KG5vZGUsICdub25lJykpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRleHQoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3BvbGhrJzpcbiAgICAgICAgICAgICAgICBpZiAodW5pY29kZSA9IHRoaXMuYXJndW1lbnQobm9kZSwgJ3RleHQnKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodW5pY29kZS5sZW5ndGggPT09IDEpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0KHVuaWNvZGUgKyAnXFx1MDMyOCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5hcmd1bWVudChub2RlLCAnbm9uZScpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0KCdcXHUwMzI4Jyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGlmIChub2RlLmtpbmQgPT09ICdSZWd1bGFyQ29tbWFuZCcgJiYgdGhpcy5uZXdjb21tYW5kc1tub2RlLmNvbW1hbmRdKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsZWFuKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtpbmQ6ICdCbG9jaycsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJrdXA6IHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5uZXdjb21tYW5kc1tub2RlLmNvbW1hbmRdKSksXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodW5pY29kZTJsYXRleF8xLmRpYWNyaXRpY3MudG91bmljb2RlW25vZGUuY29tbWFuZF0pIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5hcmd1bWVudHMucmVxdWlyZWQgPSB0aGlzLmNsZWFuKG5vZGUuYXJndW1lbnRzLnJlcXVpcmVkKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGJsb2NrO1xuICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5hcmd1bWVudHMucmVxdWlyZWQubGVuZ3RoID09PSAxICYmIG5vZGUuYXJndW1lbnRzLnJlcXVpcmVkWzBdLmtpbmQgPT09ICdUZXh0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm8gaWRlYSB3aHkgSSBjYW4ndCBqdXN0IHN0cmFpZ2h0IHJldHVybiB0aGlzIGJ1dCB0eXBlc2NyaXB0IGp1c3Qgd29uJ3Qgc2h1dCB1cFxuICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2sgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2luZDogJ0Jsb2NrJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrdXA6IHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2luZDogJ0RpYWNyaXRpY0NvbW1hbmQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyazogbm9kZS5jb21tYW5kLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyOiBub2RlLmFyZ3VtZW50cy5yZXF1aXJlZFswXS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdGxlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jOiBub2RlLmFyZ3VtZW50cy5yZXF1aXJlZFswXS5sb2MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U6IG5vZGUuYXJndW1lbnRzLnJlcXVpcmVkWzBdLnNvdXJjZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfV0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xlYW4oYmxvY2spO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGJsb2NrID0gdGhpcy5maXJzdF90ZXh0X2Jsb2NrKG5vZGUuYXJndW1lbnRzLnJlcXVpcmVkWzBdKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZpeGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBibG9jay52YWx1ZSA9IGJsb2NrLnZhbHVlLnJlZHVjZSgodmFsdWUsIGNoaWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmaXhlZCAmJiBjaGlsZC5raW5kID09PSAnVGV4dCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZml4ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5wdXNoKHsga2luZDogJ0RpYWNyaXRpY0NvbW1hbmQnLCBtYXJrOiBub2RlLmNvbW1hbmQsIGNoYXJhY3RlcjogY2hpbGQudmFsdWVbMF0gfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLnB1c2goT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBjaGlsZCksIHsgdmFsdWU6IGNoaWxkLnZhbHVlLnN1YnN0cmluZygxKSB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5wdXNoKGNoaWxkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgW10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xlYW4oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtpbmQ6ICdCbG9jaycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya3VwOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbm9kZS5hcmd1bWVudHMucmVxdWlyZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG92ZXJsaW5lIHdpdGhvdXQgYXJndW1lbnRzIGRvZXNuJ3Qgc2VlbSB0byByZW5kZXIgaW4gTGFUZVhcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLmNvbW1hbmQgPT09ICdvdmVybGluZScpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dCgnICcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xlYW4oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtpbmQ6ICdCbG9jaycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya3VwOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogW3RoaXMudGV4dCgnICcgKyB1bmljb2RlMmxhdGV4XzEuZGlhY3JpdGljcy50b3VuaWNvZGVbbm9kZS5jb21tYW5kXSldLmNvbmNhdChub2RlLmFyZ3VtZW50cy5yZXF1aXJlZCksXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodW5pY29kZSA9IHVuaWNvZGUybGF0ZXhfMS5sYXRleFtub2RlLnNvdXJjZV0gfHwgdW5pY29kZTJsYXRleF8xLmxhdGV4W2Ake25vZGUuc291cmNlfXt9YF0pXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRleHQodW5pY29kZSk7XG4gICAgICAgICAgICAgICAgaWYgKCh1bmljb2RlID0gdW5pY29kZTJsYXRleF8xLmxhdGV4W2BcXFxcJHtub2RlLmNvbW1hbmR9YF0gfHwgdW5pY29kZTJsYXRleF8xLmxhdGV4W2BcXFxcJHtub2RlLmNvbW1hbmR9e31gXSkgJiYgdGhpcy5hcmd1bWVudChub2RlLCAnbm9uZScpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0KHVuaWNvZGUpO1xuICAgICAgICAgICAgICAgIGlmICgoYXJnID0gdGhpcy5hcmd1bWVudChub2RlLCAnVGV4dCcpKSAmJiAodW5pY29kZSA9IHVuaWNvZGUybGF0ZXhfMS5sYXRleFtgXFxcXCR7bm9kZS5jb21tYW5kfXske2FyZ319YF0pKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0KHVuaWNvZGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmluX3ByZWFtYmxlKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dChub2RlLnNvdXJjZSk7XG4gICAgICAgIHJldHVybiB0aGlzLmVycm9yKG5ldyBUZVhFcnJvcihgVW5oYW5kbGVkIGNvbW1hbmQ6ICR7bm9kZS5jb21tYW5kfWAgKyB0aGlzLnNob3cobm9kZSksIG5vZGUsIHRoaXMuY2h1bmspLCB0aGlzLnRleHQoKSk7XG4gICAgfVxuICAgIHByZXNlcnZlQ2FzZSh3b3JkKSB7XG4gICAgICAgIC8vIHdvcmQgPSB3b3JkLnJlcGxhY2UobmV3IFJlZ0V4cChgXCJbJHt0aGlzLm1hcmt1cC5lbnF1b3RlLm9wZW59JHt0aGlzLm1hcmt1cC5lbnF1b3RlLmNsb3NlfTooKV1gLCAnZycpLCAnJylcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgaWYgKCF3b3JkLnRyaW0oKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKCF3b3JkLm1hdGNoKHByZXNlcnZlQ2FzZS5oYXNBbHBoYU51bSkpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgd29yZCA9IHdvcmQucmVwbGFjZSgvW1xcL+KAmSfigJ06KCldL2csICcnKTtcbiAgICAgICAgaWYgKHdvcmQgPT09ICdJJylcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAod29yZC5sZW5ndGggPT09IDEpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmICh3b3JkLnJlcGxhY2UocHJlc2VydmVDYXNlLm5vdENhc2VTZW5zaXRpdmUpID09PSAnJylcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgLy8gd29yZCA9IHdvcmQucmVwbGFjZShwcmVzZXJ2ZUNhc2Uubm90QWxwaGFOdW0sICcnKVxuICAgICAgICAvLyBzaW1wbGUgY2FwIGF0IHN0YXJ0IG9mIGZpZWxkXG4gICAgICAgIGlmICh3b3JkLm1hdGNoKHByZXNlcnZlQ2FzZS5sZWFkaW5nQ2FwKSAmJiAoKF9iID0gKF9hID0gdGhpcy5maWVsZCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRleHQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5sZW5ndGgpID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAod29yZC5tYXRjaChwcmVzZXJ2ZUNhc2UuYWxsQ2FwcykpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKHdvcmQubGVuZ3RoID4gMSAmJiB3b3JkLm1hdGNoKHByZXNlcnZlQ2FzZS5qb2luZWQpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAod29yZC5tYXRjaChwcmVzZXJ2ZUNhc2UuaGFzVXBwZXIpKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmICh3b3JkLm1hdGNoKHByZXNlcnZlQ2FzZS5pc051bWJlcikpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb252ZXJ0KG5vZGUpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobm9kZSkpXG4gICAgICAgICAgICByZXR1cm4gbm9kZS5tYXAoY2hpbGQgPT4gdGhpcy5jb252ZXJ0KGNoaWxkKSk7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmF3ICYmIHRoaXMuZmllbGQpXG4gICAgICAgICAgICBub2RlID0gdGhpcy50ZXh0KG5vZGUuc291cmNlKTtcbiAgICAgICAgc3dpdGNoIChub2RlLmtpbmQpIHtcbiAgICAgICAgICAgIGNhc2UgJ01hcmt1cCc6XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZmllbGQpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmllbGQudGV4dCArPSBub2RlLnZhbHVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQnJhY2VkQ29tbWVudCc6XG4gICAgICAgICAgICBjYXNlICdMaW5lQ29tbWVudCc6XG4gICAgICAgICAgICAgICAgdGhpcy5jb21tZW50cy5wdXNoKG5vZGUudmFsdWUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnRW50cnknOlxuICAgICAgICAgICAgICAgIHRoaXMuY29udmVydF9lbnRyeShub2RlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ051bWJlcic6XG4gICAgICAgICAgICAgICAgdGhpcy5jb252ZXJ0X251bWJlcihub2RlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ1RleHQnOlxuICAgICAgICAgICAgICAgIHRoaXMuY29udmVydF90ZXh0KG5vZGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQmxvY2snOlxuICAgICAgICAgICAgY2FzZSAnSW5saW5lTWF0aCc6XG4gICAgICAgICAgICBjYXNlICdEaXNwbGF5TWF0aCc6XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLmZpZWxkID8gdGhpcy5maWVsZC50ZXh0Lmxlbmd0aCA6IG51bGw7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJlc2VydmUgPSB0eXBlb2Ygc3RhcnQgPT09ICdudW1iZXInICYmIHRoaXMuZmllbGQucHJlc2VydmVSYW5nZXM7XG4gICAgICAgICAgICAgICAgdGhpcy5jb252ZXJ0X2Jsb2NrKG5vZGUpO1xuICAgICAgICAgICAgICAgIGlmIChwcmVzZXJ2ZSAmJiAobm9kZS5jYXNlIHx8IG5vZGUua2luZC5lbmRzV2l0aCgnTWF0aCcpKSlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmVzZXJ2ZShzdGFydCwgdGhpcy5maWVsZC50ZXh0Lmxlbmd0aCk7IC8vICwgYGNvbnZlcnQtYmxvY2s6IGNhc2U9JHtub2RlLmNhc2V9LCBtYXRoPSR7bm9kZS5raW5kLmVuZHNXaXRoKCdNYXRoJyl9YClcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0Vudmlyb25tZW50JzpcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnZlcnRfZW52aXJvbm1lbnQobm9kZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdQcmVhbWJsZUV4cHJlc3Npb24nOlxuICAgICAgICAgICAgICAgIHRoaXMucHJlYW1ibGUucHVzaChub2RlLnZhbHVlLm1hcChwcmVhbWJsZSA9PiBwcmVhbWJsZS5zb3VyY2UpLmpvaW4oJ1xcblxcbicpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0Rpc3BsYXlNYXRoJzpcbiAgICAgICAgICAgIGNhc2UgJ0lubGluZU1hdGgnOlxuICAgICAgICAgICAgY2FzZSAnU3RyaW5nRGVjbGFyYXRpb24nOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lcnJvcihuZXcgUGFyc2VyRXJyb3IoYG5vIGNvbnZlcnRlciBmb3IgJHtub2RlLmtpbmR9OiAke3RoaXMuc2hvdyhub2RlKX1gLCBub2RlKSwgdW5kZWZpbmVkKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzcGxpdE9uY2Uocywgc2VwLCBmcm9tRW5kID0gZmFsc2UpIHtcbiAgICAgICAgY29uc3Qgc3BsaXQgPSBmcm9tRW5kID8gcy5sYXN0SW5kZXhPZihzZXApIDogcy5pbmRleE9mKHNlcCk7XG4gICAgICAgIHJldHVybiAoc3BsaXQgPCAwKSA/IFtzLCAnJ10gOiBbcy5zdWJzdHIoMCwgc3BsaXQpLCBzLnN1YnN0cihzcGxpdCArIDEpXTtcbiAgICB9XG4gICAgcGFyc2VOYW1lKG5hbWUpIHtcbiAgICAgICAgbGV0IHBhcnNlZCA9IG51bGw7XG4gICAgICAgIGNvbnN0IHBhcnRzID0gbmFtZS5zcGxpdChtYXJrZXIuY29tbWEpO1xuICAgICAgICBpZiAocGFydHMubGVuZ3RoICYmICFwYXJ0cy5maW5kKHAgPT4gIXAubWF0Y2goL15bYS16XSsoLWkpPz0vaSkpKSB7IC8vIGV4dGVuZGVkIG5hbWUgZm9ybWF0XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBhcnQgb2YgcGFydHMpIHtcbiAgICAgICAgICAgICAgICBwYXJzZWQgPSBwYXJzZWQgfHwge307XG4gICAgICAgICAgICAgICAgY29uc3QgW2F0dHIsIHZhbHVlXSA9IHRoaXMuc3BsaXRPbmNlKHBhcnQucmVwbGFjZShtYXJrZXIucmUuc3BhY2UsICcnKSwgJz0nKS5tYXAodiA9PiB2LnRyaW0oKSk7XG4gICAgICAgICAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBwYXJzZWQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3dpdGNoIChhdHRyLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZmFtaWx5JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZC5sYXN0TmFtZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2dpdmVuLWknOlxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkLmluaXRpYWwgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdnaXZlbic6XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWQuZmlyc3ROYW1lID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAncHJlZml4JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZC5wcmVmaXggPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdzdWZmaXgnOlxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkLnN1ZmZpeCA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3VzZXByZWZpeCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWQudXNlcHJlZml4ID0gdmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2p1bmlvcmNvbW1hJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZC51c2VwcmVmaXggPSB2YWx1ZS50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZSc7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZFthdHRyLnRvTG93ZXJDYXNlKCldID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJlZml4ID0gLyguKz8pXFxzKyh2ZXJlfHZvbnx2YW4gZGVufHZhbiBkZXJ8dmFufGRlfGRlbHxkZWxsYXxkZXJ8ZGl8ZGF8cGlldHJvfHZhbmRlbnxkdXxzdC58c3R8bGF8bG98dGVyfGJpbnxpYm58dGV8dGVufG9wfGJlbnxhbClcXHMrKC4rKS87XG4gICAgICAgIGxldCBtO1xuICAgICAgICBzd2l0Y2ggKHBhcnNlZCA/IDAgOiBwYXJ0cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAvLyBhbHJlYWR5IHBhcnNlZFxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAxOiAvLyBuYW1lIHdpdGhvdXQgY29tbWFzXG4gICAgICAgICAgICAgICAgLy8gbGl0ZXJhbFxuICAgICAgICAgICAgICAgIGlmIChtYXJrZXIucmUubGl0ZXJhbE5hbWUudGVzdChwYXJ0c1swXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkID0geyBsaXRlcmFsOiBwYXJ0c1swXSB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChtID0gcGFydHNbMF0ucmVwbGFjZShtYXJrZXIucmUuc3BhY2UsICcgJykubWF0Y2gocHJlZml4KSkgeyAvLyBzcGxpdCBvbiBwcmVmaXhcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3ROYW1lOiBtWzFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4OiBtWzJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdE5hbWU6IG1bM10sXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyB0b3AtbGV2ZWwgXCJmaXJzdG5hbWUgbGFzdG5hbWVcIlxuICAgICAgICAgICAgICAgICAgICBjb25zdCBbZmlyc3ROYW1lLCBsYXN0TmFtZV0gPSB0aGlzLnNwbGl0T25jZShwYXJ0c1swXSwgbWFya2VyLnNwYWNlLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxhc3ROYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWQgPSB7IGZpcnN0TmFtZSwgbGFzdE5hbWUgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZCA9IHsgbGFzdE5hbWU6IGZpcnN0TmFtZSB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAyOiAvLyBsYXN0bmFtZSwgZmlyc3RuYW1lXG4gICAgICAgICAgICAgICAgcGFyc2VkID0ge1xuICAgICAgICAgICAgICAgICAgICBsYXN0TmFtZTogcGFydHNbMF0sXG4gICAgICAgICAgICAgICAgICAgIGZpcnN0TmFtZTogcGFydHNbMV0sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6IC8vIGxhc3RuYW1lLCBzdWZmaXgsIGZpcnN0bmFtZVxuICAgICAgICAgICAgICAgIHBhcnNlZCA9IHtcbiAgICAgICAgICAgICAgICAgICAgbGFzdE5hbWU6IHBhcnRzWzBdLFxuICAgICAgICAgICAgICAgICAgICBzdWZmaXg6IHBhcnRzWzFdLFxuICAgICAgICAgICAgICAgICAgICBmaXJzdE5hbWU6IHBhcnRzLnNsaWNlKDIpLmpvaW4obWFya2VyLmNvbW1hKSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKHBhcnNlZCkpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdiAhPT0gJ3N0cmluZycpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBwYXJzZWRba10gPSBtYXJrZXIuY2xlYW4odikudHJpbSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgfVxuICAgIGNvbnZlcnRfZW50cnkobm9kZSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHRoaXMuZW50cnkgPSB7XG4gICAgICAgICAgICBrZXk6IG5vZGUuaWQsXG4gICAgICAgICAgICB0eXBlOiBub2RlLnR5cGUsXG4gICAgICAgICAgICBmaWVsZHM6IHt9LFxuICAgICAgICAgICAgY3JlYXRvcnM6IHt9LFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmVudHJpZXMucHVzaCh0aGlzLmVudHJ5KTtcbiAgICAgICAgLy8gb3JkZXIgdGhlc2UgZmlyc3QgZm9yIGxhbmd1YWdlLWRlcGVuZGVudCBzZW50ZW5jZSBjYXNpbmdcbiAgICAgICAgY29uc3Qgb3JkZXIgPSBbJ2xhbmdpZCcsICdoeXBoZW5hdGlvbicsICdsYW5ndWFnZSddO1xuICAgICAgICBub2RlLmZpZWxkcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpYSA9IG9yZGVyLmluZGV4T2YoYS5uYW1lKTtcbiAgICAgICAgICAgIGNvbnN0IGliID0gb3JkZXIuaW5kZXhPZihiLm5hbWUpO1xuICAgICAgICAgICAgaWYgKGlhID09PSAtMSAmJiBpYiA9PT0gLTEpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7IC8vIGRvZXNuJ3QgbWF0dGVyIHJlYWxseVxuICAgICAgICAgICAgaWYgKGlhID09PSAtMSlcbiAgICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgIGlmIChpYiA9PT0gLTEpXG4gICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgcmV0dXJuIGlhIC0gaWI7XG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgc2VudGVuY2VDYXNlID0gISF0aGlzLm9wdGlvbnMuc2VudGVuY2VDYXNlLmxlbmd0aDsgLy8gaWYgc2VudGVuY2VDYXNlIGlzIGVtcHR5LCBubyBzZW50ZW5jZSBjYXNpbmdcbiAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBub2RlLmZpZWxkcykge1xuICAgICAgICAgICAgaWYgKGZpZWxkLmtpbmQgIT09ICdGaWVsZCcpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3IobmV3IFBhcnNlckVycm9yKGBFeHBlY3RlZCBGaWVsZCwgZ290ICR7ZmllbGQua2luZH1gLCBub2RlKSwgdW5kZWZpbmVkKTtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRDbGVhbmluZyhmaWVsZC5uYW1lKTtcbiAgICAgICAgICAgIC8qXG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhdyAmJiB0aGlzLmZpZWxkVHlwZSAhPT0gJ2NyZWF0b3InKSB7XG4gICAgICAgICAgICAgIHRoaXMuZW50cnkuZmllbGRzW2ZpZWxkLm5hbWVdID0gWyBmaWVsZC52YWx1ZS5tYXAodiA9PiB2LnNvdXJjZSkuam9pbignJykgXVxuICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRoaXMuZmllbGQgPSB7XG4gICAgICAgICAgICAgICAgbmFtZTogZmllbGQubmFtZSxcbiAgICAgICAgICAgICAgICB0ZXh0OiAnJyxcbiAgICAgICAgICAgICAgICBsZXZlbDogMCxcbiAgICAgICAgICAgICAgICB3b3Jkczoge1xuICAgICAgICAgICAgICAgICAgICB1cHBlcjogMCxcbiAgICAgICAgICAgICAgICAgICAgbG93ZXI6IDAsXG4gICAgICAgICAgICAgICAgICAgIG90aGVyOiAwLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcHJlc2VydmVSYW5nZXM6IChzZW50ZW5jZUNhc2UgJiYgZmllbGRzLnRpdGxlLmluY2x1ZGVzKGZpZWxkLm5hbWUpKSA/IFtdIDogbnVsbCxcbiAgICAgICAgICAgICAgICBodG1sOiB0aGlzLm9wdGlvbnMuaHRtbEZpZWxkcy5pbmNsdWRlcyhmaWVsZC5uYW1lKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLmVudHJ5LmZpZWxkc1t0aGlzLmZpZWxkLm5hbWVdID0gdGhpcy5lbnRyeS5maWVsZHNbdGhpcy5maWVsZC5uYW1lXSB8fCBbXTtcbiAgICAgICAgICAgIC8vIHNwZWNpYWwgY2FzZSBmb3IgJ3RpdGxlID0gMjAyMCdcbiAgICAgICAgICAgIGlmIChmaWVsZC52YWx1ZS5raW5kID09PSAnTnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHRoaXMuZW50cnkuZmllbGRzW3RoaXMuZmllbGQubmFtZV0ucHVzaChmaWVsZC52YWx1ZS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5maWVsZCA9IG51bGw7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNvbnZlcnQoZmllbGQudmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5maWVsZC50ZXh0ID0gdGhpcy5maWVsZC50ZXh0LnRyaW0oKTtcbiAgICAgICAgICAgIHRoaXMuZmllbGQudGV4dCA9IHRoaXMuZmllbGQudGV4dC5yZXBsYWNlKC88XFwvKFthLXpdKT48XFwxPi9nLCAnJyk7XG4gICAgICAgICAgICB0aGlzLmZpZWxkLnRleHQgPSB0aGlzLmZpZWxkLnRleHQucmVwbGFjZSgvPChbYS16XSk+KFxccyopPFxcL1xcMT4vZywgJyQxJyk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZmllbGQudGV4dClcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIC8vIGRpc2FibGUgc2VudGVuY2VDYXNpbmcgaWYgbm90IGFuIGVuZ2xpc2hcbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy5maWVsZC5uYW1lKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnbGFuZ2lkJzpcbiAgICAgICAgICAgICAgICBjYXNlICdoeXBoZW5hdGlvbic6XG4gICAgICAgICAgICAgICAgICAgIHNlbnRlbmNlQ2FzZSA9IHNlbnRlbmNlQ2FzZSAmJiB0aGlzLm9wdGlvbnMuc2VudGVuY2VDYXNlLmluY2x1ZGVzKHRoaXMuZmllbGQudGV4dC50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnbGFuZ3VhZ2UnOlxuICAgICAgICAgICAgICAgICAgICBzZW50ZW5jZUNhc2UgPSBzZW50ZW5jZUNhc2UgJiYgISEodGhpcy5maWVsZC50ZXh0LnRvTG93ZXJDYXNlKCkudHJpbSgpLnNwbGl0KC9cXHMqLFxccyovKS5maW5kKGxhbmcgPT4gdGhpcy5vcHRpb25zLnNlbnRlbmNlQ2FzZS5pbmNsdWRlcyhsYW5nKSkpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFwiZ3JvdXBzXCIgaXMgYSBqYWJyZWYgMy44KyBtb25zdHJvc2l0eVxuICAgICAgICAgICAgaWYgKHRoaXMuZmllbGQubmFtZS5tYXRjaCgvXihrZXl3b3Jkcz98Z3JvdXBzKSQvKSkge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IHRleHQgb2YgdGhpcy5maWVsZC50ZXh0LnNwbGl0KG1hcmtlci5jb21tYSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dCA9IHRleHQudHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGV4dClcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW50cnkuZmllbGRzW3RoaXMuZmllbGQubmFtZV0ucHVzaCh0ZXh0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLmNsZWFuaW5nLnR5cGUgPT09ICdjcmVhdG9yJykge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5lbnRyeS5jcmVhdG9yc1t0aGlzLmZpZWxkLm5hbWVdKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVudHJ5LmNyZWF0b3JzW3RoaXMuZmllbGQubmFtZV0gPSBbXTtcbiAgICAgICAgICAgICAgICAvLyB7TS4gSGFsbGUsIEouIEJyZXNuYW4sIGFuZCBHLiBNaWxsZXJ9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZmllbGQudGV4dC5pbmNsdWRlcyhgJHttYXJrZXIuY29tbWF9JHttYXJrZXIuYW5kfWApKSB7IC8vXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmllbGQudGV4dCA9IHRoaXMuZmllbGQudGV4dC5yZXBsYWNlKG5ldyBSZWdFeHAoYCR7bWFya2VyLmNvbW1hfSR7bWFya2VyLmFuZH1gLCAnZycpLCBtYXJrZXIuYW5kKS5yZXBsYWNlKG5ldyBSZWdFeHAobWFya2VyLmNvbW1hKSwgbWFya2VyLmFuZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY3JlYXRvciBvZiB0aGlzLmZpZWxkLnRleHQuc3BsaXQobWFya2VyLmFuZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnRyeS5maWVsZHNbdGhpcy5maWVsZC5uYW1lXS5wdXNoKG1hcmtlci5jbGVhbihjcmVhdG9yKSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW50cnkuY3JlYXRvcnNbdGhpcy5maWVsZC5uYW1lXS5wdXNoKHRoaXMucGFyc2VOYW1lKGNyZWF0b3IpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChmaWVsZHMudW5hYmJyZXYuaW5jbHVkZXMoZmllbGQubmFtZSkpIHsgLy8gZG9lc24ndCBnZXQgc2VudGVuY2UgY2FzaW5nIGFueWhvdyBUT0RPOiBib29rdGl0bGUgZG9lcyFcbiAgICAgICAgICAgICAgICB0aGlzLmVudHJ5LmZpZWxkc1t0aGlzLmZpZWxkLm5hbWVdLnB1c2goKCgoX2EgPSB0aGlzLm9wdGlvbnMudW5hYmJyZXZpYXRlW3RoaXMuZmllbGQudGV4dF0pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50ZXh0KSB8fCB0aGlzLmZpZWxkLnRleHQpLm5vcm1hbGl6ZSgnTkZDJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZmllbGQucHJlc2VydmVSYW5nZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5ndWVzc0FscmVhZHlTZW50ZW5jZUNhc2VkICYmIE1hdGgubWF4KHRoaXMuZmllbGQud29yZHMudXBwZXIsIHRoaXMuZmllbGQud29yZHMubG93ZXIpID4gKHRoaXMuZmllbGQud29yZHMub3RoZXIgKyBNYXRoLm1pbih0aGlzLmZpZWxkLndvcmRzLnVwcGVyLCB0aGlzLmZpZWxkLndvcmRzLmxvd2VyKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJlc2VydmUobnVsbCwgbnVsbCk7IC8vICwgJ21vc3RseSBzZW50ZW5jZSBjYXNlZCBhbHJlYWR5JylcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHR4dCA9IHRoaXMuZmllbGQudGV4dC5yZXBsYWNlKHByZXNlcnZlQ2FzZS5tYXJrdXAsIG1hcmt1cCA9PiBtYXJrZXIubWFya3VwLnJlcGVhdChtYXJrdXAubGVuZ3RoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbWF0Y2g7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmVzZXJ2ZUNhc2Uuc2VudGVuY2VTdGFydC5sYXN0SW5kZXggPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKChtYXRjaCA9IHByZXNlcnZlQ2FzZS5zZW50ZW5jZVN0YXJ0LmV4ZWModHh0KSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBleGNsdWRlIHN0dWZmIGxpa2UgXCJVLlMuIFRheGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2guaW5kZXggPiAyICYmIHR4dC5zdWJzdHIoMCwgbWF0Y2guaW5kZXggKyAxKS5tYXRjaChwcmVzZXJ2ZUNhc2UuYWNyb255bSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJlc2VydmUobWF0Y2guaW5kZXgsIG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoKTsgLy8gLCBgc2VudGVuY2VTdGFydDogJHttYXRjaFswXX0gYXQgJHttYXRjaC5pbmRleH0uLiR7bWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGh9YClcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlcnZlQ2FzZS5xdW90ZWQubGFzdEluZGV4ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgobWF0Y2ggPSBwcmVzZXJ2ZUNhc2UucXVvdGVkLmV4ZWModGhpcy5maWVsZC50ZXh0KSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByZXNlcnZlKG1hdGNoLmluZGV4LCBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCk7IC8vICwgJ3F1b3RlZCcpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5lbnRyeS5maWVsZHNbdGhpcy5maWVsZC5uYW1lXS5wdXNoKHRoaXMuY29udmVydFRvU2VudGVuY2VDYXNlKHRoaXMuZmllbGQudGV4dCkubm9ybWFsaXplKCdORkMnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maWVsZCA9IG51bGw7XG4gICAgfVxuICAgIGNvbnZlcnRUb1NlbnRlbmNlQ2FzZSh0ZXh0KSB7XG4gICAgICAgIGlmICghdGhpcy5maWVsZC5wcmVzZXJ2ZVJhbmdlcylcbiAgICAgICAgICAgIHJldHVybiB0ZXh0O1xuICAgICAgICAvLyBhbHdheXMga2VlcCB0aGUgbGVhZGluZyBjaGFyLCBidXQgc2tpcCBtYXJrdXBcbiAgICAgICAgY29uc3QgbGVhZCA9IHRleHQubWF0Y2goL14oPFtePl0rPikqLi8pO1xuICAgICAgICBpZiAobGVhZCkge1xuICAgICAgICAgICAgdGhpcy5wcmVzZXJ2ZShsZWFkWzBdLmxlbmd0aCAtIDEsIGxlYWRbMF0ubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucHJlc2VydmUoMCwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHNlbnRlbmNlQ2FzZWQgPSB0ZXh0LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvKChbXFw/IV1cXHMqfF4pKFtcXCdcXFwiwqHCv+KAnOKAmOKAnsKrXFxzXSspP1teXFxzXSkvZywgeCA9PiB4LnRvVXBwZXJDYXNlKCkpO1xuICAgICAgICBmb3IgKGNvbnN0IHsgc3RhcnQsIGVuZCB9IG9mIHRoaXMuZmllbGQucHJlc2VydmVSYW5nZXMpIHtcbiAgICAgICAgICAgIHNlbnRlbmNlQ2FzZWQgPSBzZW50ZW5jZUNhc2VkLnN1YnN0cmluZygwLCBzdGFydCkgKyB0ZXh0LnN1YnN0cmluZyhzdGFydCwgZW5kKSArIHNlbnRlbmNlQ2FzZWQuc3Vic3RyaW5nKGVuZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRleHQgIT09IHNlbnRlbmNlQ2FzZWQpXG4gICAgICAgICAgICB0aGlzLmVudHJ5LnNlbnRlbmNlQ2FzZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm4gc2VudGVuY2VDYXNlZDtcbiAgICB9XG4gICAgY29udmVydF9udW1iZXIobm9kZSkge1xuICAgICAgICB0aGlzLmZpZWxkLnRleHQgKz0gYCR7bm9kZS52YWx1ZX1gO1xuICAgIH1cbiAgICBjb252ZXJ0X3RleHQobm9kZSkge1xuICAgICAgICBpZiAobm9kZS5tb2RlID09PSAndmVyYmF0aW0nKSB7XG4gICAgICAgICAgICB0aGlzLmZpZWxkLnRleHQgKz0gbm9kZS52YWx1ZS50cmltKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gaGV1cmlzdGljIHRvIGRldGVjdCBwcmUtc2VudGVuY2VjYXNlZCB0ZXh0XG4gICAgICAgIGZvciAoY29uc3Qgd29yZCBvZiBub2RlLnZhbHVlLnNwbGl0KC9cXGIvKSkge1xuICAgICAgICAgICAgaWYgKHdvcmQubWF0Y2gocHJlc2VydmVDYXNlLmFsbExvd2VyKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmllbGQud29yZHMubG93ZXIrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHdvcmQubWF0Y2gocHJlc2VydmVDYXNlLmFsbENhcHMpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWVsZC53b3Jkcy51cHBlcisrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAod29yZC5tYXRjaChwcmVzZXJ2ZUNhc2UuaGFzQWxwaGEpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWVsZC53b3Jkcy5vdGhlcisrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZpZWxkLmxldmVsID09PSAwICYmIHRoaXMuY2xlYW5pbmcudHlwZSA9PT0gJ2NyZWF0b3InKSB7XG4gICAgICAgICAgICB0aGlzLmZpZWxkLnRleHQgKz0gbm9kZS52YWx1ZS5yZXBsYWNlKC9cXHMrYW5kXFxzKy9pZywgbWFya2VyLmFuZCkucmVwbGFjZSgvXFxzKixcXHMqL2csIG1hcmtlci5jb21tYSkucmVwbGFjZSgvXFxzKy9nLCBtYXJrZXIuc3BhY2UpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZpZWxkLmxldmVsID09PSAwICYmIHRoaXMuZmllbGQubmFtZS5tYXRjaCgvXihrZXl3b3Jkcz98Z3JvdXBzKSQvKSkge1xuICAgICAgICAgICAgdGhpcy5maWVsZC50ZXh0ICs9IG5vZGUudmFsdWUucmVwbGFjZSgvXFxzKls7LF1cXHMqL2csIG1hcmtlci5jb21tYSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZmllbGQuaHRtbCkge1xuICAgICAgICAgICAgdGhpcy5maWVsZC50ZXh0ICs9IG5vZGUudmFsdWUucmVwbGFjZSgvJi9nLCAnJmFtcDsnKS5yZXBsYWNlKC88L2csICcmbHQ7JykucmVwbGFjZSgvPi9nLCAnJmd0OycpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuZmllbGQucHJlc2VydmVSYW5nZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHdvcmRzID0gbm9kZS52YWx1ZS5zcGxpdCgvKFxccyspLyk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHdvcmQgb2Ygd29yZHMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMuZmllbGQudGV4dC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgdGhpcy5maWVsZC50ZXh0ICs9IHdvcmQ7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucHJlc2VydmVDYXNlKHdvcmQpKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByZXNlcnZlKHN0YXJ0LCB0aGlzLmZpZWxkLnRleHQubGVuZ3RoKTsgLy8gLCBgd29yZDogJHtKU09OLnN0cmluZ2lmeSh3b3JkKX1gKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5maWVsZC50ZXh0ICs9IG5vZGUudmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29udmVydF9lbnZpcm9ubWVudChub2RlKSB7XG4gICAgICAgIHRoaXMuZmllbGQudGV4dCArPSB7IGVudW1lcmF0ZTogJzxvbD4nLCBpdGVtaXplOiAnPHVsPicgfVtub2RlLmVudl07XG4gICAgICAgIHRoaXMuY29udmVydF9ibG9jayhPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG5vZGUpLCB7IGtpbmQ6ICdCbG9jaycsIG1hcmt1cDoge30gfSkpO1xuICAgICAgICB0aGlzLmZpZWxkLnRleHQgKz0geyBlbnVtZXJhdGU6ICc8L29sPicsIGl0ZW1pemU6ICc8L3VsPicgfVtub2RlLmVudl07XG4gICAgfVxuICAgIGNvbnZlcnRfYmxvY2sobm9kZSkge1xuICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMuZmllbGQudGV4dC5sZW5ndGg7XG4gICAgICAgIGxldCBwcmVmaXggPSAnJztcbiAgICAgICAgbGV0IHBvc3RmaXggPSAnJztcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jYXNlUHJvdGVjdGlvbiAhPT0gJ3N0cmljdCcgJiYgdGhpcy5jbGVhbmluZy50eXBlID09PSAnb3RoZXInKVxuICAgICAgICAgICAgZGVsZXRlIG5vZGUuY2FzZTtcbiAgICAgICAgaWYgKHRoaXMuY2xlYW5pbmcudHlwZSA9PT0gJ2NyZWF0b3InICYmIG5vZGUuY2FzZSA9PT0gJ3Byb3RlY3QnKSB7XG4gICAgICAgICAgICBwcmVmaXggKz0gbWFya2VyLmxpdGVyYWw7XG4gICAgICAgICAgICBwb3N0Zml4ID0gbWFya2VyLmxpdGVyYWwgKyBwb3N0Zml4O1xuICAgICAgICAgICAgZGVsZXRlIG5vZGUuY2FzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5jYXNlID09PSAncHJvdGVjdCcpIHtcbiAgICAgICAgICAgIHByZWZpeCArPSB0aGlzLm9wdGlvbnMubWFya3VwLmNhc2VQcm90ZWN0Lm9wZW47XG4gICAgICAgICAgICBwb3N0Zml4ID0gdGhpcy5vcHRpb25zLm1hcmt1cC5jYXNlUHJvdGVjdC5jbG9zZSArIHBvc3RmaXg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUua2luZCA9PT0gJ0Jsb2NrJykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBtYXJrdXAgb2YgT2JqZWN0LmtleXMobm9kZS5tYXJrdXApKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMubWFya3VwW21hcmt1cF0pXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVycm9yKG5ldyBQYXJzZXJFcnJvcihgbWFya3VwOiAke21hcmt1cH1gLCBub2RlKSwgdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICBwcmVmaXggKz0gdGhpcy5vcHRpb25zLm1hcmt1cFttYXJrdXBdLm9wZW47XG4gICAgICAgICAgICAgICAgcG9zdGZpeCA9IHRoaXMub3B0aW9ucy5tYXJrdXBbbWFya3VwXS5jbG9zZSArIHBvc3RmaXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZW5kID0ge1xuICAgICAgICAgICAgd2l0aG91dFByZWZpeDogdGhpcy5maWVsZC50ZXh0Lmxlbmd0aCxcbiAgICAgICAgICAgIHdpdGhQcmVmaXg6IHRoaXMuZmllbGQudGV4dC5sZW5ndGggKyBwcmVmaXgubGVuZ3RoLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmZpZWxkLnRleHQgKz0gcHJlZml4O1xuICAgICAgICB0aGlzLmZpZWxkLmxldmVsKys7XG4gICAgICAgIHRoaXMuY29udmVydChub2RlLnZhbHVlKTtcbiAgICAgICAgdGhpcy5maWVsZC5sZXZlbC0tO1xuICAgICAgICBjb25zdCBhZGRlZCA9IHRoaXMuZmllbGQudGV4dC5zdWJzdHJpbmcoZW5kLndpdGhQcmVmaXgpO1xuICAgICAgICBjb25zdCBhZGRlZF90ZXh0ID0gYWRkZWQucmVwbGFjZSgvPFxcLz9bXj5dKz4vZywgJycpO1xuICAgICAgICBjb25zdCBuZWVkc1Byb3RlY3Rpb24gPSBhZGRlZF90ZXh0ICYmICgodGhpcy5vcHRpb25zLmNhc2VQcm90ZWN0aW9uID09PSAnc3RyaWN0JyAmJiBhZGRlZF90ZXh0Lm1hdGNoKHByZXNlcnZlQ2FzZS5pc0Nhc2VTZW5zaXRpdmUpKVxuICAgICAgICAgICAgfHxcbiAgICAgICAgICAgICAgICAodGhpcy5vcHRpb25zLmNhc2VQcm90ZWN0aW9uID09PSAnYXMtbmVlZGVkJyAmJiBhZGRlZF90ZXh0LnNwbGl0KC9cXHMrLykuZmluZCh3b3JkID0+IHRoaXMubmVlZHNQcm90ZWN0aW9uKHdvcmQpKSkpO1xuICAgICAgICBpZiAoIWFkZGVkKSB7IC8vIG5vdGhpbmcgd2FzIGFkZGVkLCBzbyByZW1vdmUgcHJlZml4XG4gICAgICAgICAgICB0aGlzLmZpZWxkLnRleHQgPSB0aGlzLmZpZWxkLnRleHQuc3Vic3RyaW5nKDAsIGVuZC53aXRob3V0UHJlZml4KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmZpZWxkLnByZXNlcnZlUmFuZ2VzICYmIHByZWZpeCA9PT0gdGhpcy5vcHRpb25zLm1hcmt1cC5jYXNlUHJvdGVjdC5vcGVuICYmICFuZWVkc1Byb3RlY3Rpb24pIHtcbiAgICAgICAgICAgIC8vIHNvbWV0aGluZyB3YXMgYWRkZWQgdGhhdCBkaWRuJ3QgYWN0dWFsbHkgbmVlZCBjYXNlIHByb3RlY3Rpb25cbiAgICAgICAgICAgIHRoaXMuZmllbGQudGV4dCA9IHRoaXMuZmllbGQudGV4dC5zdWJzdHJpbmcoMCwgZW5kLndpdGhvdXRQcmVmaXgpICsgYWRkZWQ7XG4gICAgICAgICAgICB0aGlzLmZpZWxkLnByZXNlcnZlUmFuZ2VzID0gdGhpcy5maWVsZC5wcmVzZXJ2ZVJhbmdlcy5maWx0ZXIocmFuZ2UgPT4gcmFuZ2Uuc3RhcnQgPCBlbmQud2l0aG91dFByZWZpeCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZpZWxkLnRleHQgKz0gcG9zdGZpeDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpZWxkLnRleHQgPSB0aGlzLmZpZWxkLnRleHQucmVwbGFjZSgvPChzdXB8c3ViKT4oW148Pl0rKTxcXC9cXDE+JC9pLCAobSwgbW9kZSwgY2hhcnMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNtZCA9IG1vZGUgPT09ICdzdXAnID8gJ14nIDogJ18nO1xuICAgICAgICAgICAgbGV0IHNjcmlwdCA9ICcnO1xuICAgICAgICAgICAgZm9yIChjb25zdCBjaGFyIG9mIGNoYXJzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdW5pY29kZSA9IHVuaWNvZGUybGF0ZXhfMS5sYXRleFtgJHtjbWR9JHtjaGFyfWBdIHx8IHVuaWNvZGUybGF0ZXhfMS5sYXRleFtgJHtjbWR9eyR7Y2hhcn19YF07XG4gICAgICAgICAgICAgICAgc2NyaXB0ICs9IHVuaWNvZGUgPyB1bmljb2RlIDogYDwke21vZGV9PiR7Y2hhcn08LyR7bW9kZX0+YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNjcmlwdCA9IHNjcmlwdC5yZXBsYWNlKG5ldyBSZWdFeHAoYDwvJHttb2RlfT48JHttb2RlfT5gLCAnZycpLCAnJyk7XG4gICAgICAgICAgICByZXR1cm4gc2NyaXB0Lmxlbmd0aCA8IG0ubGVuZ3RoID8gc2NyaXB0IDogbTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChub2RlLmNhc2UgJiYgdGhpcy5maWVsZC5wcmVzZXJ2ZVJhbmdlcylcbiAgICAgICAgICAgIHRoaXMucHJlc2VydmUoc3RhcnQsIHRoaXMuZmllbGQudGV4dC5sZW5ndGgpOyAvLyAsICdpbiBjb252ZXJ0LWJsb2NrICcgKyBub2RlLnNvdXJjZSB8fCAnPHNvdXJjZT4nKVxuICAgIH1cbn1cbi8qKlxuICogcGFyc2UgYmlidGV4LiBUaGlzIHdpbGwgdHJ5IHRvIGNvbnZlcnQgVGVYIGNvbW1hbmRzIGludG8gdW5pY29kZSBlcXVpdmFsZW50cywgYW5kIGFwcGx5IGBAc3RyaW5nYCBleHBhbnNpb25cbiAqL1xuZnVuY3Rpb24gcGFyc2UoaW5wdXQsIG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBQYXJzZXIob3B0aW9ucyk7XG4gICAgcmV0dXJuIHBhcnNlci5wYXJzZShpbnB1dCk7XG59XG5leHBvcnRzLnBhcnNlID0gcGFyc2U7XG5mdW5jdGlvbiBhc3QoaW5wdXQsIG9wdGlvbnMgPSB7fSwgY2xlYW4gPSB0cnVlKSB7XG4gICAgY29uc3QgcGFyc2VyID0gbmV3IFBhcnNlcihvcHRpb25zKTtcbiAgICByZXR1cm4gcGFyc2VyLmFzdChpbnB1dCwgY2xlYW4pO1xufVxuZXhwb3J0cy5hc3QgPSBhc3Q7XG52YXIgY2h1bmtlcl8yID0gcmVxdWlyZShcIi4vY2h1bmtlclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNodW5rZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNodW5rZXJfMi5wYXJzZTsgfSB9KTtcbnZhciBqYWJyZWZfMSA9IHJlcXVpcmUoXCIuL2phYnJlZlwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImphYnJlZlwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gamFicmVmXzEucGFyc2U7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCJpbXBvcnQgKiBhcyBCaWJUZVhQYXJzZXIgZnJvbSAnQHJldG9ycXVlcmUvYmlidGV4LXBhcnNlcic7XG5pbXBvcnQgeyBFbnRyeSBhcyBFbnRyeURhdGFCaWJMYVRlWCB9IGZyb20gJ0ByZXRvcnF1ZXJlL2JpYnRleC1wYXJzZXInO1xuLy8gQWxzbyBtYWtlIEVudHJ5RGF0YUJpYkxhVGVYIGF2YWlsYWJsZSB0byBvdGhlciBtb2R1bGVzXG5leHBvcnQgeyBFbnRyeSBhcyBFbnRyeURhdGFCaWJMYVRlWCB9IGZyb20gJ0ByZXRvcnF1ZXJlL2JpYnRleC1wYXJzZXInO1xuXG4vLyBUcmljazogYWxsb3cgc3RyaW5nIGluZGV4aW5nIG9udG8gb2JqZWN0IHByb3BlcnRpZXNcbmV4cG9ydCBpbnRlcmZhY2UgSUluZGV4YWJsZSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIFtrZXk6IHN0cmluZ106IGFueTtcbn1cblxuY29uc3QgZGF0YWJhc2VUeXBlcyA9IFsnY3NsLWpzb24nLCAnYmlibGF0ZXgnXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIERhdGFiYXNlVHlwZSA9IHR5cGVvZiBkYXRhYmFzZVR5cGVzW251bWJlcl07XG5cbmV4cG9ydCBjb25zdCBURU1QTEFURV9WQVJJQUJMRVMgPSB7XG4gIGNpdGVrZXk6ICdVbmlxdWUgY2l0ZWtleScsXG4gIGFic3RyYWN0OiAnJyxcbiAgYXV0aG9yU3RyaW5nOiAnQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgYXV0aG9yIG5hbWVzJyxcbiAgY29udGFpbmVyVGl0bGU6XG4gICAgJ1RpdGxlIG9mIHRoZSBjb250YWluZXIgaG9sZGluZyB0aGUgcmVmZXJlbmNlIChlLmcuIGJvb2sgdGl0bGUgZm9yIGEgYm9vayBjaGFwdGVyLCBvciB0aGUgam91cm5hbCB0aXRsZSBmb3IgYSBqb3VybmFsIGFydGljbGUpJyxcbiAgRE9JOiAnJyxcbiAgZXByaW50OiAnJyxcbiAgZXByaW50dHlwZTogJycsXG4gIGV2ZW50UGxhY2U6ICdMb2NhdGlvbiBvZiBldmVudCcsXG4gIG5vdGU6ICcnLFxuICBwYWdlOiAnUGFnZSBvciBwYWdlIHJhbmdlJyxcbiAgcHVibGlzaGVyOiAnJyxcbiAgcHVibGlzaGVyUGxhY2U6ICdMb2NhdGlvbiBvZiBwdWJsaXNoZXInLFxuICB0aXRsZTogJycsXG4gIHRpdGxlU2hvcnQ6ICcnLFxuICBVUkw6ICcnLFxuICB5ZWFyOiAnUHVibGljYXRpb24geWVhcicsXG4gIHpvdGVyb1NlbGVjdFVSSTogJ1VSSSB0byBvcGVuIHRoZSByZWZlcmVuY2UgaW4gWm90ZXJvJyxcbn07XG5cbmV4cG9ydCBjbGFzcyBMaWJyYXJ5IHtcbiAgY29uc3RydWN0b3IocHVibGljIGVudHJpZXM6IHsgW2NpdGVrZXk6IHN0cmluZ106IEVudHJ5IH0pIHt9XG5cbiAgZ2V0IHNpemUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5lbnRyaWVzKS5sZW5ndGg7XG4gIH1cblxuICAvKipcbiAgICogRm9yIHRoZSBnaXZlbiBjaXRla2V5LCBmaW5kIHRoZSBjb3JyZXNwb25kaW5nIGBFbnRyeWAgYW5kIHJldHVybiBhXG4gICAqIGNvbGxlY3Rpb24gb2YgdGVtcGxhdGUgdmFyaWFibGUgYXNzaWdubWVudHMuXG4gICAqL1xuICBnZXRUZW1wbGF0ZVZhcmlhYmxlc0ZvckNpdGVrZXkoY2l0ZWtleTogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgY29uc3QgZW50cnk6IEVudHJ5ID0gdGhpcy5lbnRyaWVzW2NpdGVrZXldO1xuICAgIGNvbnN0IHNob3J0Y3V0cyA9IHtcbiAgICAgIGNpdGVrZXk6IGNpdGVrZXksXG5cbiAgICAgIGFic3RyYWN0OiBlbnRyeS5hYnN0cmFjdCxcbiAgICAgIGF1dGhvclN0cmluZzogZW50cnkuYXV0aG9yU3RyaW5nLFxuICAgICAgY29udGFpbmVyVGl0bGU6IGVudHJ5LmNvbnRhaW5lclRpdGxlLFxuICAgICAgRE9JOiBlbnRyeS5ET0ksXG4gICAgICBlcHJpbnQ6IGVudHJ5LmVwcmludCxcbiAgICAgIGVwcmludHR5cGU6IGVudHJ5LmVwcmludHR5cGUsXG4gICAgICBldmVudFBsYWNlOiBlbnRyeS5ldmVudFBsYWNlLFxuICAgICAgbm90ZTogZW50cnkubm90ZSxcbiAgICAgIHBhZ2U6IGVudHJ5LnBhZ2UsXG4gICAgICBwdWJsaXNoZXI6IGVudHJ5LnB1Ymxpc2hlcixcbiAgICAgIHB1Ymxpc2hlclBsYWNlOiBlbnRyeS5wdWJsaXNoZXJQbGFjZSxcbiAgICAgIHRpdGxlOiBlbnRyeS50aXRsZSxcbiAgICAgIHRpdGxlU2hvcnQ6IGVudHJ5LnRpdGxlU2hvcnQsXG4gICAgICBVUkw6IGVudHJ5LlVSTCxcbiAgICAgIHllYXI6IGVudHJ5LnllYXI/LnRvU3RyaW5nKCksXG4gICAgICB6b3Rlcm9TZWxlY3RVUkk6IGVudHJ5LnpvdGVyb1NlbGVjdFVSSSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHsgZW50cnk6IGVudHJ5LnRvSlNPTigpLCAuLi5zaG9ydGN1dHMgfTtcbiAgfVxufVxuXG4vKipcbiAqIExvYWQgcmVmZXJlbmNlIGVudHJpZXMgZnJvbSB0aGUgZ2l2ZW4gcmF3IGRhdGFiYXNlIGRhdGEuXG4gKlxuICogUmV0dXJucyBhIGxpc3Qgb2YgYEVudHJ5RGF0YWAsIHdoaWNoIHNob3VsZCBiZSB3cmFwcGVkIHdpdGggdGhlIHJlbGV2YW50XG4gKiBhZGFwdGVyIGFuZCB1c2VkIHRvIGluc3RhbnRpYXRlIGEgYExpYnJhcnlgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZEVudHJpZXMoXG4gIGRhdGFiYXNlUmF3OiBzdHJpbmcsXG4gIGRhdGFiYXNlVHlwZTogRGF0YWJhc2VUeXBlLFxuKTogRW50cnlEYXRhW10ge1xuICBsZXQgbGlicmFyeUFycmF5OiBFbnRyeURhdGFbXTtcblxuICBpZiAoZGF0YWJhc2VUeXBlID09ICdjc2wtanNvbicpIHtcbiAgICBsaWJyYXJ5QXJyYXkgPSBKU09OLnBhcnNlKGRhdGFiYXNlUmF3KTtcbiAgfSBlbHNlIGlmIChkYXRhYmFzZVR5cGUgPT0gJ2JpYmxhdGV4Jykge1xuICAgIGNvbnN0IG9wdGlvbnM6IEJpYlRlWFBhcnNlci5QYXJzZXJPcHRpb25zID0ge1xuICAgICAgZXJyb3JIYW5kbGVyOiAoZXJyKSA9PiB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAnQ2l0YXRpb24gcGx1Z2luOiBub24tZmF0YWwgZXJyb3IgbG9hZGluZyBCaWJMYVRlWCBlbnRyeTonLFxuICAgICAgICAgIGVycixcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IHBhcnNlZCA9IEJpYlRlWFBhcnNlci5wYXJzZShcbiAgICAgIGRhdGFiYXNlUmF3LFxuICAgICAgb3B0aW9ucyxcbiAgICApIGFzIEJpYlRlWFBhcnNlci5CaWJsaW9ncmFwaHk7XG5cbiAgICBwYXJzZWQuZXJyb3JzLmZvckVhY2goKGVycm9yKSA9PiB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBgQ2l0YXRpb24gcGx1Z2luOiBmYXRhbCBlcnJvciBsb2FkaW5nIEJpYkxhVGVYIGVudHJ5YCArXG4gICAgICAgICAgYCAobGluZSAke2Vycm9yLmxpbmV9LCBjb2x1bW4gJHtlcnJvci5jb2x1bW59KTpgLFxuICAgICAgICBlcnJvci5tZXNzYWdlLFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGxpYnJhcnlBcnJheSA9IHBhcnNlZC5lbnRyaWVzO1xuICB9XG5cbiAgcmV0dXJuIGxpYnJhcnlBcnJheTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdXRob3Ige1xuICBnaXZlbj86IHN0cmluZztcbiAgZmFtaWx5Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFuIGBFbnRyeWAgcmVwcmVzZW50cyBhIHNpbmdsZSByZWZlcmVuY2UgaW4gYSByZWZlcmVuY2UgZGF0YWJhc2UuXG4gKiBFYWNoIGVudHJ5IGhhcyBhIHVuaXF1ZSBpZGVudGlmaWVyLCBrbm93biBpbiBtb3N0IHJlZmVyZW5jZSBtYW5hZ2VycyBhcyBpdHNcbiAqIFwiY2l0ZWtleS5cIlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRW50cnkge1xuICAvKipcbiAgICogVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBlbnRyeSAoYWxzbyB0aGUgY2l0ZWtleSkuXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgaWQ6IHN0cmluZztcblxuICBwdWJsaWMgYWJzdHJhY3QgdHlwZTogc3RyaW5nO1xuXG4gIHB1YmxpYyBhYnN0cmFjdCBhYnN0cmFjdD86IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IGF1dGhvcj86IEF1dGhvcltdO1xuXG4gIC8qKlxuICAgKiBBIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGF1dGhvcnMsIGVhY2ggb2YgdGhlIGZvcm1hdCBgPGZpcnN0bmFtZT4gPGxhc3RuYW1lPmAuXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgYXV0aG9yU3RyaW5nPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgY29udGFpbmVyIGZvciB0aGlzIHJlZmVyZW5jZSAtLSBpbiB0aGUgY2FzZSBvZiBhIGJvb2tcbiAgICogY2hhcHRlciByZWZlcmVuY2UsIHRoZSBuYW1lIG9mIHRoZSBib29rOyBpbiB0aGUgY2FzZSBvZiBhIGpvdXJuYWwgYXJ0aWNsZSxcbiAgICogdGhlIG5hbWUgb2YgdGhlIGpvdXJuYWwuXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgY29udGFpbmVyVGl0bGU/OiBzdHJpbmc7XG5cbiAgcHVibGljIGFic3RyYWN0IERPST86IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IGZpbGVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBkYXRlIG9mIGlzc3VlLiBNYW55IHJlZmVyZW5jZXMgZG8gbm90IGNvbnRhaW4gaW5mb3JtYXRpb24gYWJvdXQgbW9udGhcbiAgICogYW5kIGRheSBvZiBpc3N1ZTsgaW4gdGhpcyBjYXNlLCB0aGUgYGlzc3VlZERhdGVgIHdpbGwgY29udGFpbiBkdW1teSBtaW5pbXVtXG4gICAqIHZhbHVlcyBmb3IgdGhvc2UgZWxlbWVudHMuIChBIHJlZmVyZW5jZSB3aGljaCBpcyBvbmx5IGVuY29kZWQgYXMgYmVpbmdcbiAgICogaXNzdWVkIGluIDIwMDEgaXMgcmVwcmVzZW50ZWQgaGVyZSB3aXRoIGEgZGF0ZSAyMDAxLTAxLTAxIDAwOjAwOjAwIFVUQy4pXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgaXNzdWVkRGF0ZT86IERhdGU7XG5cbiAgLyoqXG4gICAqIFBhZ2Ugb3IgcGFnZSByYW5nZSBvZiB0aGUgcmVmZXJlbmNlLlxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IHBhZ2U/OiBzdHJpbmc7XG4gIHB1YmxpYyBhYnN0cmFjdCB0aXRsZT86IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHRpdGxlU2hvcnQ/OiBzdHJpbmc7XG4gIHB1YmxpYyBhYnN0cmFjdCBVUkw/OiBzdHJpbmc7XG5cbiAgcHVibGljIGFic3RyYWN0IGV2ZW50UGxhY2U/OiBzdHJpbmc7XG5cbiAgcHVibGljIGFic3RyYWN0IHB1Ymxpc2hlcj86IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHB1Ymxpc2hlclBsYWNlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBCaWJMYVRlWC1zcGVjaWZpYyBwcm9wZXJ0aWVzXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgZXByaW50Pzogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgZXByaW50dHlwZT86IHN0cmluZztcblxuICBwcm90ZWN0ZWQgX3llYXI/OiBzdHJpbmc7XG4gIHB1YmxpYyBnZXQgeWVhcigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl95ZWFyXG4gICAgICA/IHBhcnNlSW50KHRoaXMuX3llYXIpXG4gICAgICA6IHRoaXMuaXNzdWVkRGF0ZT8uZ2V0VVRDRnVsbFllYXIoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBfbm90ZT86IHN0cmluZ1tdO1xuXG4gIHB1YmxpYyBnZXQgbm90ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9ub3RlXG4gICAgICA/Lm1hcCgoZWwpID0+IGVsLnJlcGxhY2UoLyh6b3Rlcm86XFwvXFwvLispL2csICdbTGlua10oJDEpJykpXG4gICAgICAuam9pbignXFxuXFxuJyk7XG4gIH1cblxuICAvKipcbiAgICogQSBVUkkgd2hpY2ggd2lsbCBvcGVuIHRoZSByZWxldmFudCBlbnRyeSBpbiB0aGUgWm90ZXJvIGNsaWVudC5cbiAgICovXG4gIHB1YmxpYyBnZXQgem90ZXJvU2VsZWN0VVJJKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGB6b3Rlcm86Ly9zZWxlY3QvaXRlbXMvQCR7dGhpcy5pZH1gO1xuICB9XG5cbiAgdG9KU09OKCk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICBjb25zdCBqc29uT2JqOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMpO1xuXG4gICAgLy8gYWRkIGdldHRlciB2YWx1ZXNcbiAgICBjb25zdCBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKTtcbiAgICBPYmplY3QuZW50cmllcyhPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhwcm90bykpXG4gICAgICAuZmlsdGVyKChbLCBkZXNjcmlwdG9yXSkgPT4gdHlwZW9mIGRlc2NyaXB0b3IuZ2V0ID09ICdmdW5jdGlvbicpXG4gICAgICAuZm9yRWFjaCgoW2tleSwgZGVzY3JpcHRvcl0pID0+IHtcbiAgICAgICAgaWYgKGRlc2NyaXB0b3IgJiYga2V5WzBdICE9PSAnXycpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgdmFsID0gKHRoaXMgYXMgSUluZGV4YWJsZSlba2V5XTtcbiAgICAgICAgICAgIGpzb25PYmpba2V5XSA9IHZhbDtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICByZXR1cm4ganNvbk9iajtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBFbnRyeURhdGEgPSBFbnRyeURhdGFDU0wgfCBFbnRyeURhdGFCaWJMYVRlWDtcblxuZXhwb3J0IGludGVyZmFjZSBFbnRyeURhdGFDU0wge1xuICBpZDogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG5cbiAgYWJzdHJhY3Q/OiBzdHJpbmc7XG4gIGF1dGhvcj86IEF1dGhvcltdO1xuICAnY29udGFpbmVyLXRpdGxlJz86IHN0cmluZztcbiAgRE9JPzogc3RyaW5nO1xuICAnZXZlbnQtcGxhY2UnPzogc3RyaW5nO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBpc3N1ZWQ/OiB7ICdkYXRlLXBhcnRzJzogW2FueVtdXSB9O1xuICBwYWdlPzogc3RyaW5nO1xuICBwdWJsaXNoZXI/OiBzdHJpbmc7XG4gICdwdWJsaXNoZXItcGxhY2UnPzogc3RyaW5nO1xuICB0aXRsZT86IHN0cmluZztcbiAgJ3RpdGxlLXNob3J0Jz86IHN0cmluZztcbiAgVVJMPzogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgRW50cnlDU0xBZGFwdGVyIGV4dGVuZHMgRW50cnkge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRhdGE6IEVudHJ5RGF0YUNTTCkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBlcHJpbnQ6IHN0cmluZyA9IG51bGw7XG4gIGVwcmludHR5cGU6IHN0cmluZyA9IG51bGw7XG4gIGZpbGVzOiBzdHJpbmdbXSA9IG51bGw7XG5cbiAgZ2V0IGlkKCkge1xuICAgIHJldHVybiB0aGlzLmRhdGEuaWQ7XG4gIH1cbiAgZ2V0IHR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS50eXBlO1xuICB9XG5cbiAgZ2V0IGFic3RyYWN0KCkge1xuICAgIHJldHVybiB0aGlzLmRhdGEuYWJzdHJhY3Q7XG4gIH1cbiAgZ2V0IGF1dGhvcigpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLmF1dGhvcjtcbiAgfVxuXG4gIGdldCBhdXRob3JTdHJpbmcoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5hdXRob3JcbiAgICAgID8gdGhpcy5kYXRhLmF1dGhvci5tYXAoKGEpID0+IGAke2EuZ2l2ZW59ICR7YS5mYW1pbHl9YCkuam9pbignLCAnKVxuICAgICAgOiBudWxsO1xuICB9XG5cbiAgZ2V0IGNvbnRhaW5lclRpdGxlKCkge1xuICAgIHJldHVybiB0aGlzLmRhdGFbJ2NvbnRhaW5lci10aXRsZSddO1xuICB9XG5cbiAgZ2V0IERPSSgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLkRPSTtcbiAgfVxuXG4gIGdldCBldmVudFBsYWNlKCkge1xuICAgIHJldHVybiB0aGlzLmRhdGFbJ2V2ZW50LXBsYWNlJ107XG4gIH1cblxuICBnZXQgaXNzdWVkRGF0ZSgpIHtcbiAgICBpZiAoXG4gICAgICAhKFxuICAgICAgICB0aGlzLmRhdGEuaXNzdWVkICYmXG4gICAgICAgIHRoaXMuZGF0YS5pc3N1ZWRbJ2RhdGUtcGFydHMnXSAmJlxuICAgICAgICB0aGlzLmRhdGEuaXNzdWVkWydkYXRlLXBhcnRzJ11bMF0ubGVuZ3RoID4gMFxuICAgICAgKVxuICAgIClcbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgW3llYXIsIG1vbnRoLCBkYXldID0gdGhpcy5kYXRhLmlzc3VlZFsnZGF0ZS1wYXJ0cyddWzBdO1xuICAgIHJldHVybiBuZXcgRGF0ZShEYXRlLlVUQyh5ZWFyLCAobW9udGggfHwgMSkgLSAxLCBkYXkgfHwgMSkpO1xuICB9XG5cbiAgZ2V0IHBhZ2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5wYWdlO1xuICB9XG5cbiAgZ2V0IHB1Ymxpc2hlcigpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLnB1Ymxpc2hlcjtcbiAgfVxuXG4gIGdldCBwdWJsaXNoZXJQbGFjZSgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhWydwdWJsaXNoZXItcGxhY2UnXTtcbiAgfVxuXG4gIGdldCB0aXRsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLnRpdGxlO1xuICB9XG5cbiAgZ2V0IHRpdGxlU2hvcnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YVsndGl0bGUtc2hvcnQnXTtcbiAgfVxuXG4gIGdldCBVUkwoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5VUkw7XG4gIH1cbn1cblxuY29uc3QgQklCTEFURVhfUFJPUEVSVFlfTUFQUElORzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgYWJzdHJhY3Q6ICdhYnN0cmFjdCcsXG4gIGJvb2t0aXRsZTogJ19jb250YWluZXJUaXRsZScsXG4gIGRhdGU6ICdpc3N1ZWQnLFxuICBkb2k6ICdET0knLFxuICBlcHJpbnQ6ICdlcHJpbnQnLFxuICBlcHJpbnR0eXBlOiAnZXByaW50dHlwZScsXG4gIGV2ZW50dGl0bGU6ICdldmVudCcsXG4gIGpvdXJuYWw6ICdfY29udGFpbmVyVGl0bGUnLFxuICBqb3VybmFsdGl0bGU6ICdfY29udGFpbmVyVGl0bGUnLFxuICBsb2NhdGlvbjogJ3B1Ymxpc2hlclBsYWNlJyxcbiAgcGFnZXM6ICdwYWdlJyxcbiAgc2hvcnRqb3VybmFsOiAnY29udGFpbmVyVGl0bGVTaG9ydCcsXG4gIHRpdGxlOiAndGl0bGUnLFxuICBzaG9ydHRpdGxlOiAndGl0bGVTaG9ydCcsXG4gIHVybDogJ1VSTCcsXG4gIHZlbnVlOiAnZXZlbnRQbGFjZScsXG4gIHllYXI6ICdfeWVhcicsXG4gIHB1Ymxpc2hlcjogJ3B1Ymxpc2hlcicsXG4gIG5vdGU6ICdfbm90ZScsXG59O1xuXG4vLyBCaWJMYVRlWCBwYXJzZXIgcmV0dXJucyBhcnJheXMgb2YgcHJvcGVydHkgdmFsdWVzIChhbGxvd2luZyBmb3IgcmVwZWF0ZWRcbi8vIHByb3BlcnR5IGVudHJpZXMpLiBGb3IgdGhlIGZvbGxvd2luZyBmaWVsZHMsIGp1c3QgYmxpbmRseSB0YWtlIHRoZSBmaXJzdC5cbmNvbnN0IEJJQkxBVEVYX1BST1BFUlRZX1RBS0VfRklSU1Q6IHN0cmluZ1tdID0gW1xuICAnYWJzdHJhY3QnLFxuICAnYm9va3RpdGxlJyxcbiAgJ19jb250YWluZXJUaXRsZScsXG4gICdkYXRlJyxcbiAgJ2RvaScsXG4gICdlcHJpbnQnLFxuICAnZXByaW50dHlwZScsXG4gICdldmVudHRpdGxlJyxcbiAgJ2pvdXJuYWx0aXRsZScsXG4gICdsb2NhdGlvbicsXG4gICdwYWdlcycsXG4gICdzaG9ydGpvdXJuYWwnLFxuICAndGl0bGUnLFxuICAnc2hvcnR0aXRsZScsXG4gICd1cmwnLFxuICAndmVudWUnLFxuICAnX3llYXInLFxuICAncHVibGlzaGVyJyxcbl07XG5cbmV4cG9ydCBjbGFzcyBFbnRyeUJpYkxhVGVYQWRhcHRlciBleHRlbmRzIEVudHJ5IHtcbiAgYWJzdHJhY3Q/OiBzdHJpbmc7XG4gIF9jb250YWluZXJUaXRsZT86IHN0cmluZztcbiAgY29udGFpbmVyVGl0bGVTaG9ydD86IHN0cmluZztcbiAgRE9JPzogc3RyaW5nO1xuICBlcHJpbnQ/OiBzdHJpbmc7XG4gIGVwcmludHR5cGU/OiBzdHJpbmc7XG4gIGV2ZW50Pzogc3RyaW5nO1xuICBldmVudFBsYWNlPzogc3RyaW5nO1xuICBpc3N1ZWQ/OiBzdHJpbmc7XG4gIHBhZ2U/OiBzdHJpbmc7XG4gIHB1Ymxpc2hlcj86IHN0cmluZztcbiAgcHVibGlzaGVyUGxhY2U/OiBzdHJpbmc7XG4gIHRpdGxlPzogc3RyaW5nO1xuICB0aXRsZVNob3J0Pzogc3RyaW5nO1xuICBVUkw/OiBzdHJpbmc7XG4gIF95ZWFyPzogc3RyaW5nO1xuICBfbm90ZT86IHN0cmluZ1tdO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZGF0YTogRW50cnlEYXRhQmliTGFUZVgpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgT2JqZWN0LmVudHJpZXMoQklCTEFURVhfUFJPUEVSVFlfTUFQUElORykuZm9yRWFjaChcbiAgICAgIChtYXA6IFtzdHJpbmcsIHN0cmluZ10pID0+IHtcbiAgICAgICAgY29uc3QgW3NyYywgdGd0XSA9IG1hcDtcbiAgICAgICAgaWYgKHNyYyBpbiB0aGlzLmRhdGEuZmllbGRzKSB7XG4gICAgICAgICAgbGV0IHZhbCA9IHRoaXMuZGF0YS5maWVsZHNbc3JjXTtcbiAgICAgICAgICBpZiAoQklCTEFURVhfUFJPUEVSVFlfVEFLRV9GSVJTVC5pbmNsdWRlcyhzcmMpKSB7XG4gICAgICAgICAgICB2YWwgPSAodmFsIGFzIGFueVtdKVswXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAodGhpcyBhcyBJSW5kZXhhYmxlKVt0Z3RdID0gdmFsO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICBnZXQgaWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5rZXk7XG4gIH1cbiAgZ2V0IHR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS50eXBlO1xuICB9XG5cbiAgZ2V0IGZpbGVzKCk6IHN0cmluZ1tdIHtcbiAgICAvLyBGb3Igc29tZSByZWFzb24gdGhlIGJpYnRleCBwYXJzZXIgZG9lc24ndCByZWxpYWJseSBwYXJzZSBmaWxlIGxpc3QgdG9cbiAgICAvLyBhcnJheSA7IHNvIHdlJ2xsIGRvIGl0IG1hbnVhbGx5IC8gcmVkdW5kYW50bHlcbiAgICBsZXQgcmV0OiBzdHJpbmdbXSA9IFtdO1xuICAgIGlmICh0aGlzLmRhdGEuZmllbGRzLmZpbGUpIHtcbiAgICAgIHJldCA9IHJldC5jb25jYXQodGhpcy5kYXRhLmZpZWxkcy5maWxlLmZsYXRNYXAoKHgpID0+IHguc3BsaXQoJzsnKSkpO1xuICAgIH1cbiAgICBpZiAodGhpcy5kYXRhLmZpZWxkcy5maWxlcykge1xuICAgICAgcmV0ID0gcmV0LmNvbmNhdCh0aGlzLmRhdGEuZmllbGRzLmZpbGVzLmZsYXRNYXAoKHgpID0+IHguc3BsaXQoJzsnKSkpO1xuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICBnZXQgYXV0aG9yU3RyaW5nKCkge1xuICAgIGlmICh0aGlzLmRhdGEuY3JlYXRvcnMuYXV0aG9yKSB7XG4gICAgICBjb25zdCBuYW1lcyA9IHRoaXMuZGF0YS5jcmVhdG9ycy5hdXRob3IubWFwKChuYW1lKSA9PiB7XG4gICAgICAgIGlmIChuYW1lLmxpdGVyYWwpIHJldHVybiBuYW1lLmxpdGVyYWw7XG4gICAgICAgIGNvbnN0IHBhcnRzID0gW25hbWUuZmlyc3ROYW1lLCBuYW1lLnByZWZpeCwgbmFtZS5sYXN0TmFtZSwgbmFtZS5zdWZmaXhdO1xuICAgICAgICAvLyBEcm9wIGFueSBudWxsIHBhcnRzIGFuZCBqb2luXG4gICAgICAgIHJldHVybiBwYXJ0cy5maWx0ZXIoKHgpID0+IHgpLmpvaW4oJyAnKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG5hbWVzLmpvaW4oJywgJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGEuZmllbGRzLmF1dGhvcj8uam9pbignLCAnKTtcbiAgICB9XG4gIH1cblxuICBnZXQgY29udGFpbmVyVGl0bGUoKSB7XG4gICAgaWYgKHRoaXMuX2NvbnRhaW5lclRpdGxlKSB7XG4gICAgICByZXR1cm4gdGhpcy5fY29udGFpbmVyVGl0bGU7XG4gICAgfSBlbHNlIGlmICh0aGlzLmRhdGEuZmllbGRzLmVwcmludCkge1xuICAgICAgY29uc3QgcHJlZml4ID0gdGhpcy5kYXRhLmZpZWxkcy5lcHJpbnR0eXBlXG4gICAgICAgID8gYCR7dGhpcy5kYXRhLmZpZWxkcy5lcHJpbnR0eXBlfTpgXG4gICAgICAgIDogJyc7XG4gICAgICBjb25zdCBzdWZmaXggPSB0aGlzLmRhdGEuZmllbGRzLnByaW1hcnljbGFzc1xuICAgICAgICA/IGAgWyR7dGhpcy5kYXRhLmZpZWxkcy5wcmltYXJ5Y2xhc3N9XWBcbiAgICAgICAgOiAnJztcbiAgICAgIHJldHVybiBgJHtwcmVmaXh9JHt0aGlzLmRhdGEuZmllbGRzLmVwcmludH0ke3N1ZmZpeH1gO1xuICAgIH1cbiAgfVxuXG4gIGdldCBpc3N1ZWREYXRlKCkge1xuICAgIHJldHVybiB0aGlzLmlzc3VlZCA/IG5ldyBEYXRlKHRoaXMuaXNzdWVkKSA6IG51bGw7XG4gIH1cblxuICBnZXQgYXV0aG9yKCk6IEF1dGhvcltdIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLmNyZWF0b3JzLmF1dGhvcj8ubWFwKChhKSA9PiAoe1xuICAgICAgZ2l2ZW46IGEuZmlyc3ROYW1lLFxuICAgICAgZmFtaWx5OiBhLmxhc3ROYW1lLFxuICAgIH0pKTtcbiAgfVxufVxuIiwiaW1wb3J0IHJlZ2lzdGVyUHJvbWlzZVdvcmtlciBmcm9tICdwcm9taXNlLXdvcmtlci9yZWdpc3Rlcic7XG5cbmltcG9ydCB7IERhdGFiYXNlVHlwZSwgRW50cnlEYXRhLCBsb2FkRW50cmllcyB9IGZyb20gJy4vdHlwZXMnO1xuXG5yZWdpc3RlclByb21pc2VXb3JrZXIoXG4gIChtc2c6IHsgZGF0YWJhc2VSYXc6IHN0cmluZzsgZGF0YWJhc2VUeXBlOiBEYXRhYmFzZVR5cGUgfSk6IEVudHJ5RGF0YVtdID0+IHtcbiAgICByZXR1cm4gbG9hZEVudHJpZXMobXNnLmRhdGFiYXNlUmF3LCBtc2cuZGF0YWJhc2VUeXBlKTtcbiAgfSxcbik7XG4iXSwibmFtZXMiOlsiY2hhckNhdGVnb3JpZXMiLCJjaHVua2VyXzEiLCJiaWJ0ZXgiLCJ1bmljb2RlMmxhdGV4XzEiLCJqYWJyZWZfMSIsIkJpYlRlWFBhcnNlci5wYXJzZSIsInJlZ2lzdGVyUHJvbWlzZVdvcmtlciJdLCJtYXBwaW5ncyI6Ijs7O0VBRUEsU0FBUyxTQUFTLEVBQUUsR0FBRyxFQUFFO0VBQ3pCO0VBQ0EsRUFBRSxPQUFPLENBQUMsQ0FBQyxHQUFHLEtBQUssT0FBTyxHQUFHLEtBQUssUUFBUSxJQUFJLE9BQU8sR0FBRyxLQUFLLFVBQVUsQ0FBQyxJQUFJLE9BQU8sR0FBRyxDQUFDLElBQUksS0FBSyxVQUFVO0VBQzFHLENBQUM7QUFDRDtFQUNBLFNBQVMscUJBQXFCLEVBQUUsUUFBUSxFQUFFO0VBQzFDLEVBQUUsU0FBUyxtQkFBbUIsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7RUFDN0QsSUFBSSxTQUFTLFdBQVcsRUFBRSxHQUFHLEVBQUU7RUFDL0I7RUFDQSxNQUFNLElBQUksT0FBTyxJQUFJLENBQUMsV0FBVyxLQUFLLFVBQVUsRUFBRTtFQUNsRCxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBQztFQUNuQyxPQUFPLE1BQU07RUFDYixRQUFRLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFDO0VBQzdCLE9BQU87RUFDUCxLQUFLO0VBQ0wsSUFBSSxJQUFJLEtBQUssRUFBRTtFQUNmO0VBQ0EsTUFBTSxJQUFJLE9BQU8sT0FBTyxLQUFLLFdBQVcsSUFBSSxPQUFPLElBQUksT0FBTyxFQUFFO0VBQ2hFO0VBQ0E7RUFDQTtFQUNBLFFBQVEsT0FBTyxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsRUFBRSxL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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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QUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN4RixJQUFJLE9BQU8sRUFBRSxJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztFQUNoRSxJQUFJLFFBQVEsRUFBRSxJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztFQUNqRSxJQUFJLE1BQU0sRUFBRSxJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUMxSCxJQUFJLFFBQVEsRUFBRSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzdDLElBQUksUUFBUSxFQUFFLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDN0MsSUFBSSxRQUFRLEVBQUUsVUFBVTtFQUN4QixJQUFJLFFBQVEsRUFBRSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzVDLElBQUksV0FBVyxFQUFFLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDdEQsSUFBSSxXQUFXLEVBQUUsSUFBSSxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENB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'); +/* eslint-enable */ + +var CitationPlugin = /** @class */ (function (_super) { + __extends(CitationPlugin, _super); + function CitationPlugin() { + var _this = _super !== null && _super.apply(this, arguments) || this; + // Template compilation options + _this.templateSettings = { + noEscape: true, + }; + _this.loadWorker = new WorkerManager(new WorkerFactory(), { + blockingChannel: true, + }); + _this.events = new CitationEvents(); + _this.loadErrorNotifier = new Notifier('Unable to load citations. Please update Citations plugin settings.'); + _this.literatureNoteErrorNotifier = new Notifier('Unable to access literature note. Please check that the literature note folder exists, or update the Citations plugin settings.'); + return _this; + } + Object.defineProperty(CitationPlugin.prototype, "editor", { + get: function () { + var view = this.app.workspace.activeLeaf.view; + if (!(view instanceof obsidian.MarkdownView)) + return null; + var sourceView = view.sourceMode; + return sourceView.cmEditor; + }, + enumerable: false, + configurable: true + }); + CitationPlugin.prototype.loadSettings = function () { + return __awaiter(this, void 0, void 0, function () { + var loadedSettings, toLoad; + var _this = this; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + this.settings = new CitationsPluginSettings(); + return [4 /*yield*/, this.loadData()]; + case 1: + loadedSettings = _a.sent(); + if (!loadedSettings) + return [2 /*return*/]; + toLoad = [ + 'citationExportPath', + 'citationExportFormat', + 'literatureNoteTitleTemplate', + 'literatureNoteFolder', + 'literatureNoteContentTemplate', + 'markdownCitationTemplate', + 'alternativeMarkdownCitationTemplate', + ]; + toLoad.forEach(function (setting) { + if (setting in loadedSettings) { + _this.settings[setting] = loadedSettings[setting]; + } + }); + return [2 /*return*/]; + } + }); + }); + }; + CitationPlugin.prototype.saveSettings = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, this.saveData(this.settings)]; + case 1: + _a.sent(); + return [2 /*return*/]; + } + }); + }); + }; + CitationPlugin.prototype.onload = function () { + var _this = this; + this.loadSettings().then(function () { return _this.init(); }); + }; + CitationPlugin.prototype.init = function () { + return __awaiter(this, void 0, void 0, function () { + var watchOptions; + var _this = this; + return __generator(this, function (_a) { + if (this.settings.citationExportPath) { + // Load library for the first time + this.loadLibrary(); + // Set up a watcher to refresh whenever the export is updated + try { + watchOptions = { + awaitWriteFinish: { + stabilityThreshold: 500, + }, + }; + watch_1(this.resolveLibraryPath(this.settings.citationExportPath), watchOptions) + .on('change', function () { + _this.loadLibrary(); + }); + } + catch (_b) { + this.loadErrorNotifier.show(); + } + } + this.addCommand({ + id: 'open-literature-note', + name: 'Open literature note', + hotkeys: [{ modifiers: ['Ctrl', 'Shift'], key: 'o' }], + callback: function () { + var modal = new OpenNoteModal(_this.app, _this); + modal.open(); + }, + }); + this.addCommand({ + id: 'update-bib-data', + name: 'Refresh citation database', + hotkeys: [{ modifiers: ['Ctrl', 'Shift'], key: 'r' }], + callback: function () { + _this.loadLibrary(); + }, + }); + this.addCommand({ + id: 'insert-citation', + name: 'Insert literature note link', + hotkeys: [{ modifiers: ['Ctrl', 'Shift'], key: 'e' }], + callback: function () { + var modal = new InsertNoteLinkModal(_this.app, _this); + modal.open(); + }, + }); + this.addCommand({ + id: 'insert-literature-note-content', + name: 'Insert literature note content in the current pane', + callback: function () { + var modal = new InsertNoteContentModal(_this.app, _this); + modal.open(); + }, + }); + this.addCommand({ + id: 'insert-markdown-citation', + name: 'Insert Markdown citation', + callback: function () { + var modal = new InsertCitationModal(_this.app, _this); + modal.open(); + }, + }); + this.addSettingTab(new CitationSettingTab(this.app, this)); + return [2 /*return*/]; + }); + }); + }; + /** + * Resolve a provided library path, allowing for relative paths rooted at + * the vault directory. + */ + CitationPlugin.prototype.resolveLibraryPath = function (rawPath) { + var vaultRoot = this.app.vault.adapter instanceof obsidian.FileSystemAdapter + ? this.app.vault.adapter.getBasePath() + : '/'; + return sysPath.resolve(vaultRoot, rawPath); + }; + CitationPlugin.prototype.loadLibrary = function () { + return __awaiter(this, void 0, void 0, function () { + var filePath; + var _this = this; + return __generator(this, function (_a) { + console.debug('Citation plugin: Reloading library'); + if (this.settings.citationExportPath) { + filePath = this.resolveLibraryPath(this.settings.citationExportPath); + // Unload current library. + this.events.trigger('library-load-start'); + this.library = null; + return [2 /*return*/, obsidian.FileSystemAdapter.readLocalFile(filePath) + .then(function (buffer) { + // If there is a remaining error message, hide it + _this.loadErrorNotifier.hide(); + // Decode file as UTF-8. + var dataView = new DataView(buffer); + var decoder = new TextDecoder('utf8'); + var value = decoder.decode(dataView); + return _this.loadWorker.post({ + databaseRaw: value, + databaseType: _this.settings.citationExportFormat, + }); + }) + .then(function (entries) { + var adapter; + var idKey; + switch (_this.settings.citationExportFormat) { + case 'biblatex': + adapter = EntryBibLaTeXAdapter; + idKey = 'key'; + break; + case 'csl-json': + adapter = EntryCSLAdapter; + idKey = 'id'; + break; + } + _this.library = new Library(Object.fromEntries(entries.map(function (e) { return [e[idKey], new adapter(e)]; }))); + console.debug("Citation plugin: successfully loaded library with " + _this.library.size + " entries."); + _this.events.trigger('library-load-complete'); + return _this.library; + }) + .catch(function (e) { + if (e instanceof WorkerManagerBlocked) { + // Silently catch WorkerManager error, which will be thrown if the + // library is already being loaded + return; + } + console.error(e); + _this.loadErrorNotifier.show(); + return null; + })]; + } + else { + console.warn('Citations plugin: citation export path is not set. Please update plugin settings.'); + } + return [2 /*return*/]; + }); + }); + }; + Object.defineProperty(CitationPlugin.prototype, "isLibraryLoading", { + /** + * Returns true iff the library is currently being loaded on the worker thread. + */ + get: function () { + return this.loadWorker.blocked; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(CitationPlugin.prototype, "literatureNoteTitleTemplate", { + get: function () { + return lib.compile(this.settings.literatureNoteTitleTemplate, this.templateSettings); + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(CitationPlugin.prototype, "literatureNoteContentTemplate", { + get: function () { + return lib.compile(this.settings.literatureNoteContentTemplate, this.templateSettings); + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(CitationPlugin.prototype, "markdownCitationTemplate", { + get: function () { + return lib.compile(this.settings.markdownCitationTemplate, this.templateSettings); + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(CitationPlugin.prototype, "alternativeMarkdownCitationTemplate", { + get: function () { + return lib.compile(this.settings.alternativeMarkdownCitationTemplate, this.templateSettings); + }, + enumerable: false, + configurable: true + }); + CitationPlugin.prototype.getTitleForCitekey = function (citekey) { + var unsafeTitle = this.literatureNoteTitleTemplate(this.library.getTemplateVariablesForCitekey(citekey)); + return unsafeTitle.replace(DISALLOWED_FILENAME_CHARACTERS_RE, '_'); + }; + CitationPlugin.prototype.getPathForCitekey = function (citekey) { + var title = this.getTitleForCitekey(citekey); + // TODO escape note title + return sysPath.join(this.settings.literatureNoteFolder, title + ".md"); + }; + CitationPlugin.prototype.getInitialContentForCitekey = function (citekey) { + return this.literatureNoteContentTemplate(this.library.getTemplateVariablesForCitekey(citekey)); + }; + CitationPlugin.prototype.getMarkdownCitationForCitekey = function (citekey) { + return this.markdownCitationTemplate(this.library.getTemplateVariablesForCitekey(citekey)); + }; + CitationPlugin.prototype.getAlternativeMarkdownCitationForCitekey = function (citekey) { + return this.alternativeMarkdownCitationTemplate(this.library.getTemplateVariablesForCitekey(citekey)); + }; + /** + * Run a case-insensitive search for the literature note file corresponding to + * the given citekey. If no corresponding file is found, create one. + */ + CitationPlugin.prototype.getOrCreateLiteratureNoteFile = function (citekey) { + return __awaiter(this, void 0, void 0, function () { + var path, normalizedPath, file, matches, exc_1; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + path = this.getPathForCitekey(citekey); + normalizedPath = obsidian.normalizePath(path); + file = this.app.vault.getAbstractFileByPath(normalizedPath); + if (!(file == null)) return [3 /*break*/, 4]; + matches = this.app.vault + .getMarkdownFiles() + .filter(function (f) { return f.path.toLowerCase() == normalizedPath.toLowerCase(); }); + if (!(matches.length > 0)) return [3 /*break*/, 1]; + file = matches[0]; + return [3 /*break*/, 4]; + case 1: + _a.trys.push([1, 3, , 4]); + return [4 /*yield*/, this.app.vault.create(path, this.getInitialContentForCitekey(citekey))]; + case 2: + file = _a.sent(); + return [3 /*break*/, 4]; + case 3: + exc_1 = _a.sent(); + this.literatureNoteErrorNotifier.show(); + throw exc_1; + case 4: return [2 /*return*/, file]; + } + }); + }); + }; + CitationPlugin.prototype.openLiteratureNote = function (citekey, newPane) { + return __awaiter(this, void 0, void 0, function () { + var _this = this; + return __generator(this, function (_a) { + this.getOrCreateLiteratureNoteFile(citekey) + .then(function (file) { + _this.app.workspace.getLeaf(newPane).openFile(file); + }) + .catch(console.error); + return [2 /*return*/]; + }); + }); + }; + CitationPlugin.prototype.insertLiteratureNoteLink = function (citekey) { + return __awaiter(this, void 0, void 0, function () { + var _this = this; + return __generator(this, function (_a) { + this.getOrCreateLiteratureNoteFile(citekey) + .then(function (file) { + var useMarkdown = _this.app.vault.getConfig('useMarkdownLinks'); + var title = _this.getTitleForCitekey(citekey); + var linkText; + if (useMarkdown) { + var uri = encodeURI(_this.app.metadataCache.fileToLinktext(file, '', false)); + linkText = "[" + title + "](" + uri + ")"; + } + else { + linkText = "[[" + title + "]]"; + } + _this.editor.replaceSelection(linkText); + }) + .catch(console.error); + return [2 /*return*/]; + }); + }); + }; + /** + * Format literature note content for a given reference and insert in the + * currently active pane. + */ + CitationPlugin.prototype.insertLiteratureNoteContent = function (citekey) { + return __awaiter(this, void 0, void 0, function () { + var content; + return __generator(this, function (_a) { + content = this.getInitialContentForCitekey(citekey); + this.editor.replaceRange(content, this.editor.getCursor()); + return [2 /*return*/]; + }); + }); + }; + CitationPlugin.prototype.insertMarkdownCitation = function (citekey, alternative) { + if (alternative === void 0) { alternative = false; } + return __awaiter(this, void 0, void 0, function () { + var func, citation; + return __generator(this, function (_a) { + func = alternative + ? this.getAlternativeMarkdownCitationForCitekey + : this.getMarkdownCitationForCitekey; + citation = func.bind(this)(citekey); + this.editor.replaceRange(citation, this.editor.getCursor()); + return [2 /*return*/]; + }); + }); + }; + return CitationPlugin; +}(obsidian.Plugin)); + +module.exports = CitationPlugin; + + +/* nosourcemap */ \ No newline at end of file diff --git a/.obsidian/plugins/obsidian-citation-plugin/manifest.json b/.obsidian/plugins/obsidian-citation-plugin/manifest.json new file mode 100644 index 0000000..caaf297 --- /dev/null +++ b/.obsidian/plugins/obsidian-citation-plugin/manifest.json @@ -0,0 +1,10 @@ +{ + "id": "obsidian-citation-plugin", + "name": "Citations", + "version": "0.4.5", + "minAppVersion": "0.9.20", + "description": "Automatically search and insert citations from a Zotero library", + "author": "Jon Gauthier", + "authorUrl": "http://foldl.me", + "isDesktopOnly": true +} diff --git a/.obsidian/plugins/obsidian-citation-plugin/styles.css b/.obsidian/plugins/obsidian-citation-plugin/styles.css new file mode 100644 index 0000000..729a0d1 --- /dev/null +++ b/.obsidian/plugins/obsidian-citation-plugin/styles.css @@ -0,0 +1,114 @@ +/** Citations modal **/ + +/* + * Loading animation from + * https://loading.io/css/ + */ + .zoteroModalLoading { + color: var(--text-muted); + text-align: center; + } +.zoteroModalLoadingAnimation { + display: inline-block; + width: 80px; + height: 80px; +} +.zoteroModalLoadingAnimation { + content: " "; + display: block; + width: 32px; + height: 32px; + margin: 10px auto; + border-radius: 50%; + border: 3px solid #eee; + border-color: #eee transparent #eee transparent; + animation: lds-dual-ring 1.2s linear infinite; +} +@keyframes lds-dual-ring { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} + +#zoteroSettingTab .text-monospace { + font-family: monospace; +} + +.zoteroModalResults .suggestion-item { + height: fit-content; + line-height: 1.5rem; +} + +.zoteroTitle { + font-size: 14px; + display: block; +} +.zoteroAuthors { + color: #555; + font-size: 13px; +} +.zoteroAuthorsEmpty::after { + font-style: italic; + content: 'Unknown authors'; +} +.zoteroCitekey { + color: #555; + font-size: 13px; + font-family: monospace; + display: inline-block; + margin-right: 5px; + padding-right: 5px; + border-right: 1px solid #ccc; +} + +.theme-dark .zoteroTitle { + font-size: 14px; + display: block; +} +.theme-dark .zoteroAuthors { + color: #aaa; + font-size: 13px; +} +.theme-dark .zoteroCitekey { + color: #aaa; + font-size: 13px; + font-family: monospace; + display: inline-block; + margin-right: 5px; + padding-right: 5px; + border-right: 1px solid #aaa; +} + +/** Settings dialog **/ +.d-none { + display: none; +} +.zoteroSettingCitationPathLoading, +.zoteroSettingCitationPathError, +.zoteroSettingCitationPathSuccess { + font-size: 14px; +} +.zoteroSettingCitationPathLoading { + color: var(--text-muted); +} +.zoteroSettingCitationPathError { + color: var(--text-error); +} +.zoteroSettingCitationPathError:hover { + color: var(--text-error-hover); +} +.zoteroSettingCitationPathSuccess { + color: var(--text-accent); +} +.zoteroSettingCitationPathSuccess:hover { + color: var(--text-accent-hover); +} + +#zoteroSettingTab textarea { + resize: vertical; + width: 100%; + min-height: 10em; +} diff --git a/bibliography.bib b/bibliography.bib new file mode 100644 index 0000000..0f34ac0 --- /dev/null +++ b/bibliography.bib @@ -0,0 +1,358 @@ +@article{assaad_2020_predicting-project, + title = {Predicting {{Project Performance}} in the {{Construction Industry}}}, + author = {Assaad, Rayan and El-Adaway, Islam H. and Abotaleb, Ibrahim S.}, + date = {2020-05}, + journaltitle = {Journal of Construction Engineering and Management}, + shortjournal = {J. Constr. Eng. Manage.}, + volume = {146}, + number = {5}, + pages = {04020030}, + issn = {0733-9364, 1943-7862}, + doi = {10.1061/(ASCE)CO.1943-7862.0001797}, + url = {https://ascelibrary.org/doi/10.1061/%28ASCE%29CO.1943-7862.0001797}, + urldate = {2026-05-31}, + langid = {english} +} + +@article{boehm_1996_expected-wire, + title = {Expected {{Wire Length Between Two Randomly Chosen Terminals}} ({{David M}}. {{Lazoff}})}, + author = {Boehm, W. and Grosjean, Carl C. and Meyer, W. Weston and Lazoff, David M.}, + date = {1996-06}, + journaltitle = {SIAM Review}, + shortjournal = {SIAM Rev.}, + volume = {38}, + number = {2}, + pages = {321--324}, + issn = {0036-1445, 1095-7200}, + doi = {10.1137/1038053}, + url = {http://epubs.siam.org/doi/10.1137/1038053}, + urldate = {2026-05-31}, + langid = {english} +} + +@article{borel__solution-dally, + title = {Solution by {{D}}. {{J}}. {{DALLY}} ({{Australian National University}}, {{Canberra}},}, + author = {Borel, E}, + langid = {english} +} + +@article{burgstaller_2009_average-distance, + title = {The {{Average Distance Between Two Points}}}, + author = {Burgstaller, Bernhard and Pillichshammer, Friedrich}, + date = {2009}, + journaltitle = {Bulletin of the Australian Mathematical Society}, + doi = {10.1017/S0004972709000707}, + url = {https://sci-hub.st/10.1017/S0004972709000707}, + urldate = {2026-05-31} +} + +@article{carr_2005_investigation-bid, + title = {Investigation of {{Bid Price Competition Measured Through Prebid Project Estimates}}, {{Actual Bid Prices}}, and {{Number}} of {{Bidders}}}, + author = {Carr, Paul G.}, + date = {2005-11}, + journaltitle = {Journal of Construction Engineering and Management}, + shortjournal = {J. Constr. Eng. Manage.}, + volume = {131}, + number = {11}, + pages = {1165--1172}, + issn = {0733-9364, 1943-7862}, + doi = {10.1061/(ASCE)0733-9364(2005)131:11(1165)}, + url = {https://ascelibrary.org/doi/10.1061/%28ASCE%290733-9364%282005%29131%3A11%281165%29}, + urldate = {2026-05-31}, + langid = {english} +} + +@article{elbashbishy_2026_assessing-criticality, + title = {Assessing the {{Criticality}} of {{Construction Trades}}: {{Skilled Labor Shortages}} and {{Their Cost}} and {{Schedule Impacts}}}, + shorttitle = {Assessing the {{Criticality}} of {{Construction Trades}}}, + author = {Elbashbishy, Tamima and El-adaway, Islam H.}, + date = {2026-01}, + journaltitle = {Journal of Construction Engineering and Management}, + shortjournal = {J. Constr. Eng. Manage.}, + volume = {152}, + number = {1}, + pages = {04025230}, + issn = {0733-9364, 1943-7862}, + doi = {10.1061/JCEMD4.COENG-16261}, + url = {https://ascelibrary.org/doi/10.1061/JCEMD4.COENG-16261}, + urldate = {2026-05-31}, + langid = {english} +} + +@article{gabai_2026_doubling-throughput, + title = {Doubling {{Throughput}} and {{Halving Project Durations}}: {{Lessons}} from {{Intel}}’s {{OCF Strategy}} for {{Project Portfolio Management}}}, + shorttitle = {Doubling {{Throughput}} and {{Halving Project Durations}}}, + author = {Gabai, Doron S. and Haronian, Eran and Sacks, Rafael and Kennard, Nikita S. and Wong, Nicah and Miera, Mark K. and Cloyd, Tabitha D.}, + date = {2026-02}, + journaltitle = {Journal of Construction Engineering and Management}, + shortjournal = {J. Constr. Eng. Manage.}, + volume = {152}, + number = {2}, + pages = {04025256}, + issn = {0733-9364, 1943-7862}, + doi = {10.1061/JCEMD4.COENG-16441}, + url = {https://ascelibrary.org/doi/10.1061/JCEMD4.COENG-16441}, + urldate = {2026-05-31}, + langid = {english} +} + +@article{gaboune_1993_expected-distances, + title = {Expected {{Distances}} between {{Two Uniformly Distributed Random Points}} in {{Rectangles}} and {{Rectangular Parallelpipeds}}}, + author = {Gaboune, Brahim and Laporte, Gilbert and Soumis, François}, + date = {1993-05}, + journaltitle = {Journal of the Operational Research Society}, + shortjournal = {Journal of the Operational Research Society}, + volume = {44}, + number = {5}, + pages = {513--519}, + issn = {0160-5682, 1476-9360}, + doi = {10.1057/jors.1993.87}, + url = {https://www.tandfonline.com/doi/full/10.1057/jors.1993.87}, + urldate = {2026-05-31}, + langid = {english} +} + +@article{hanna_2002_benchmarking-productivity, + title = {Benchmarking {{Productivity Indicators}} for {{Electrical}}/{{Mechanical Projects}}}, + author = {Hanna, Awad S. and Peterson, Pehr and Lee, Min-Jae}, + date = {2002}, + journaltitle = {Journal of Construction Engineering and Management}, + volume = {128}, + number = {4}, + pages = {331--337}, + doi = {10.1061/(ASCE)0733-9364(2002)128:4(331)}, + url = {https://sci-hub.st/10.1061/(ASCE)0733-9364(2002)128:4(331)}, + urldate = {2026-05-31} +} + +@article{hanna_2005_factors-affecting, + title = {Factors {{Affecting Absenteeism}} in {{Electrical Construction}}}, + author = {Hanna, Awad S. and Menches, Cindy L. and Sullivan, Kenneth T. and Sargent, Joseph R.}, + date = {2005-11}, + journaltitle = {Journal of Construction Engineering and Management}, + shortjournal = {J. Constr. Eng. Manage.}, + volume = {131}, + number = {11}, + pages = {1212--1218}, + issn = {0733-9364, 1943-7862}, + doi = {10.1061/(ASCE)0733-9364(2005)131:11(1212)}, + url = {https://ascelibrary.org/doi/10.1061/%28ASCE%290733-9364%282005%29131%3A11%281212%29}, + urldate = {2026-05-31}, + langid = {english} +} + +@article{hanna_2017_quantifying-modeling, + title = {Quantifying and {{Modeling}} the {{Cumulative Impact}} of {{Change Orders}}}, + author = {Hanna, Awad S. and Iskandar, Karim A.}, + date = {2017-10}, + journaltitle = {Journal of Construction Engineering and Management}, + shortjournal = {J. Constr. Eng. Manage.}, + volume = {143}, + number = {10}, + pages = {04017076}, + issn = {0733-9364, 1943-7862}, + doi = {10.1061/(ASCE)CO.1943-7862.0001385}, + url = {https://ascelibrary.org/doi/10.1061/%28ASCE%29CO.1943-7862.0001385}, + urldate = {2026-05-31}, + langid = {english} +} + +@article{jafari_2026_critical-review, + title = {A {{Critical Review}} of the {{Data-Driven Cost Estimation Approach}} in {{Construction Research}}}, + author = {Jafari, Milad and Mousavi, Ehsan}, + date = {2026-02}, + journaltitle = {Journal of Construction Engineering and Management}, + shortjournal = {J. Constr. Eng. Manage.}, + volume = {152}, + number = {2}, + pages = {03125013}, + issn = {0733-9364, 1943-7862}, + doi = {10.1061/JCEMD4.COENG-16840}, + url = {https://ascelibrary.org/doi/10.1061/JCEMD4.COENG-16840}, + urldate = {2026-05-31}, + langid = {english} +} + +@inproceedings{jalloul_2022_pop-databased, + title = {{{POP}}: {{A Data-Based Construction Project Overall Performance Model}}}, + shorttitle = {{{POP}}}, + booktitle = {Construction {{Research Congress}} 2022}, + author = {Jalloul, Hiba and Hanna, Awad S. and Lotfallah, Wafik}, + date = {2022-03-07}, + pages = {734--743}, + publisher = {American Society of Civil Engineers}, + location = {Arlington, Virginia}, + doi = {10.1061/9780784483978.075}, + url = {https://ascelibrary.org/doi/10.1061/9780784483978.075}, + urldate = {2026-05-31}, + eventtitle = {Construction {{Research Congress}} 2022}, + isbn = {978-0-7844-8397-8}, + langid = {english} +} + +@article{kim_2026_incentive-scheme, + title = {An {{Incentive Scheme}} in {{GMP Contracts Using}} a {{Game Theory Approach}}}, + author = {Kim, Yong-Woo and Rhee, Byong-Duk}, + date = {2026-04}, + journaltitle = {Journal of Construction Engineering and Management}, + shortjournal = {J. Constr. Eng. Manage.}, + volume = {152}, + number = {4}, + pages = {04026016}, + issn = {0733-9364, 1943-7862}, + doi = {10.1061/JCEMD4.COENG-17037}, + url = {https://ascelibrary.org/doi/10.1061/JCEMD4.COENG-17037}, + urldate = {2026-05-31}, + langid = {english} +} + +@misc{lazoff__exact-formula, + title = {Exact {{Formula}} for the {{Expected Wire Length Between Two Randomly Chosen Terminals}}}, + author = {Lazoff, David M. and Sherman, Alan T.} +} + +@article{leon_2018_system-dynamics, + title = {System {{Dynamics Approach}} for {{Forecasting Performance}} of {{Construction Projects}}}, + author = {Leon, Hany and Osman, Hesham and Georgy, Maged and Elsaid, Moheeb}, + date = {2018-01}, + journaltitle = {Journal of Management in Engineering}, + shortjournal = {J. Manage. Eng.}, + volume = {34}, + number = {1}, + pages = {04017049}, + issn = {0742-597X, 1943-5479}, + doi = {10.1061/(ASCE)ME.1943-5479.0000575}, + url = {https://ascelibrary.org/doi/10.1061/%28ASCE%29ME.1943-5479.0000575}, + urldate = {2026-05-31}, + langid = {english} +} + +@article{lim_2026_improving-mental, + title = {Improving {{Mental Wellbeing}} of {{Project Supervisors}}: {{Shifting}} from {{Project-Focused}} to {{Process-Focused Construction Practices}}}, + shorttitle = {Improving {{Mental Wellbeing}} of {{Project Supervisors}}}, + author = {Lim, Huey Wen and Ma, Xiao}, + date = {2026-01}, + journaltitle = {Journal of Construction Engineering and Management}, + shortjournal = {J. Constr. Eng. Manage.}, + volume = {152}, + number = {1}, + pages = {04025229}, + issn = {0733-9364, 1943-7862}, + doi = {10.1061/JCEMD4.COENG-16521}, + url = {https://ascelibrary.org/doi/10.1061/JCEMD4.COENG-16521}, + urldate = {2026-05-31}, + langid = {english} +} + +@article{love_2026_quantifying-costs, + title = {Quantifying the {{Costs}} of {{Field Rework}} in {{Construction}}}, + author = {Love, Peter E. D.}, + date = {2026-01}, + journaltitle = {Journal of Construction Engineering and Management}, + shortjournal = {J. Constr. Eng. Manage.}, + volume = {152}, + number = {1}, + pages = {06025003}, + issn = {0733-9364, 1943-7862}, + doi = {10.1061/JCEMD4.COENG-17026}, + url = {https://ascelibrary.org/doi/10.1061/JCEMD4.COENG-17026}, + urldate = {2026-05-31}, + langid = {english} +} + +@article{mathai_1999_random-points, + title = {Random Points Associated with Rectangles}, + author = {Mathai, A. M. and Moschopoulos, P. and Pederzoli, G.}, + date = {1999-02}, + journaltitle = {Rendiconti del Circolo Matematico di Palermo}, + shortjournal = {Rend. Circ. Mat. Palermo}, + volume = {48}, + number = {1}, + pages = {163--190}, + issn = {0009-725X, 1973-4409}, + doi = {10.1007/BF02844387}, + url = {http://link.springer.com/10.1007/BF02844387}, + urldate = {2026-05-31}, + langid = {english} +} + +@inproceedings{naguib_2022_integrated-framework, + title = {An {{Integrated Framework}} to {{Quantify}} the {{Impact}} of {{Competency Factors}} on {{Project Performance}}}, + booktitle = {Construction {{Research Congress}} 2022}, + author = {Naguib, Mina and Eldamnhoury, Ebrahim S. and Hanna, Awad S. and Lotfallah, Wafik}, + date = {2022-03-07}, + pages = {863--873}, + publisher = {American Society of Civil Engineers}, + location = {Arlington, Virginia}, + doi = {10.1061/9780784483978.088}, + url = {https://ascelibrary.org/doi/10.1061/9780784483978.088}, + urldate = {2026-05-31}, + eventtitle = {Construction {{Research Congress}} 2022}, + isbn = {978-0-7844-8397-8}, + langid = {english} +} + +@article{ning_2025_prediction-construction, + title = {Prediction of {{Construction Material Prices Based}} on the {{Sliding Window CatBoost Model}}}, + author = {Ning, Xin and Shan, Ming and Li, Zhengfang and Nie, Zhihong}, + date = {2025-12}, + journaltitle = {Journal of Construction Engineering and Management}, + shortjournal = {J. Constr. Eng. Manage.}, + volume = {151}, + number = {12}, + pages = {04025196}, + issn = {0733-9364, 1943-7862}, + doi = {10.1061/JCEMD4.COENG-16748}, + url = {https://ascelibrary.org/doi/10.1061/JCEMD4.COENG-16748}, + urldate = {2026-05-31}, + langid = {english} +} + +@article{seppanen_2025_integrated-forecasting, + title = {Integrated {{Forecasting Approach}} for {{Takt}} and {{Location-Based Scheduling}}}, + author = {Seppänen, Olli}, + date = {2025-12}, + journaltitle = {Journal of Construction Engineering and Management}, + shortjournal = {J. Constr. Eng. Manage.}, + volume = {151}, + number = {12}, + pages = {04025199}, + issn = {0733-9364, 1943-7862}, + doi = {10.1061/JCEMD4.COENG-16877}, + url = {https://ascelibrary.org/doi/10.1061/JCEMD4.COENG-16877}, + urldate = {2026-05-31}, + langid = {english} +} + +@article{vaughan_1984_approximate-formulas, + title = {Approximate {{Formulas}} for {{Average Distances Associated}} with {{Zones}}}, + author = {Vaughan, Rodney}, + date = {1984-08}, + journaltitle = {Transportation Science}, + shortjournal = {Transportation Science}, + volume = {18}, + number = {3}, + pages = {231--244}, + issn = {0041-1655, 1526-5447}, + doi = {10.1287/trsc.18.3.231}, + url = {https://pubsonline.informs.org/doi/10.1287/trsc.18.3.231}, + urldate = {2026-05-31}, + abstract = {This paper develops formulas for estimating average distances associated with zones. The average distance between two points, one located at random in a zone and another located at random in another, is first investigated. The average distance from a fixed point to a point located at random in a zone, and the average distance between two points located at random in the same zone, are also examined. The accuracy of the approximations for these average distances are found by examining some simple cases.}, + langid = {english} +} + +@article{yucel_2026_startup-engagement, + title = {Startup {{Engagement}} and {{Innovation Strategies}} in {{Mid-}} to {{Large-Sized US Construction Firms}}}, + author = {Yucel, Busra and Azhar, Salman}, + date = {2026-04}, + journaltitle = {Journal of Construction Engineering and Management}, + shortjournal = {J. Constr. Eng. Manage.}, + volume = {152}, + number = {4}, + pages = {04026021}, + issn = {0733-9364, 1943-7862}, + doi = {10.1061/JCEMD4.COENG-17932}, + url = {https://ascelibrary.org/doi/10.1061/JCEMD4.COENG-17932}, + urldate = {2026-05-31}, + langid = {english} +} diff --git a/timestamped/2026-06-01_23-33-13.md b/timestamped/2026-06-01_23-33-13.md new file mode 100644 index 0000000..a589c20 --- /dev/null +++ b/timestamped/2026-06-01_23-33-13.md @@ -0,0 +1,17 @@ +--- +id: 2026-06-01T23:33:13-0400 +title: 2026-06-01 23:33:13 +tags: [] +daily: "[[2026-06-01]]" +--- +# 2026-06-01 23:33:13 + +## Stims + +1. thumb proximal along the side of the ring or middle opposite the thumb. + +2. tracing circles around the thumbnail with the tip of the index + +3. scratching one palm between the metacarpals with the opposite hand + +4. pad of the thumb in circles around the pads of the index and middle