Ignore:
Timestamp:
11/25/21 22:08:24 (3 years ago)
Author:
Ema <ema_spirova@…>
Branches:
master
Children:
8d391a1
Parents:
59329aa
Message:

primeNG components

Location:
trip-planner-front/node_modules/critters
Files:
61 added
15 deleted
6 edited

Legend:

Unmodified
Added
Removed
  • trip-planner-front/node_modules/critters/dist/critters.js

    r59329aa re29cc2e  
    44var prettyBytes = _interopDefault(require('pretty-bytes'));
    55var parse5 = _interopDefault(require('parse5'));
    6 var css = _interopDefault(require('css'));
     6var cssSelect = require('css-select');
     7var treeAdapter = _interopDefault(require('parse5-htmlparser2-tree-adapter'));
     8var postcss = require('postcss');
    79var chalk = _interopDefault(require('chalk'));
    8 
    9 var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
    10 
    11 function createCommonjsModule(fn, basedir, module) {
    12         return module = {
    13           path: basedir,
    14           exports: {},
    15           require: function (path, base) {
    16       return commonjsRequire();
    17     }
    18         }, fn(module, module.exports), module.exports;
    19 }
    20 
    21 function getCjsExportFromNamespace (n) {
    22         return n && n['default'] || n;
    23 }
    24 
    25 function commonjsRequire () {
    26         throw new Error('Dynamic requires are not currently supported by @rollup/plugin-commonjs');
    27 }
    28 
    29 //Types of elements found in the DOM
    30 var domelementtype = {
    31         Text: "text", //Text
    32         Directive: "directive", //<? ... ?>
    33         Comment: "comment", //<!-- ... -->
    34         Script: "script", //<script> tags
    35         Style: "style", //<style> tags
    36         Tag: "tag", //Any tag
    37         CDATA: "cdata", //<![CDATA[ ... ]]>
    38         Doctype: "doctype",
    39 
    40         isTag: function(elem){
    41                 return elem.type === "tag" || elem.type === "script" || elem.type === "style";
    42         }
    43 };
    44 
    45 var lib = createCommonjsModule(function (module, exports) {
    46 Object.defineProperty(exports, "__esModule", { value: true });
    47 /**
    48  * Tests whether an element is a tag or not.
    49  *
    50  * @param elem Element to test
    51  */
    52 function isTag(elem) {
    53     return (elem.type === "tag" /* Tag */ ||
    54         elem.type === "script" /* Script */ ||
    55         elem.type === "style" /* Style */);
    56 }
    57 exports.isTag = isTag;
    58 // Exports for backwards compatibility
    59 exports.Text = "text" /* Text */; //Text
    60 exports.Directive = "directive" /* Directive */; //<? ... ?>
    61 exports.Comment = "comment" /* Comment */; //<!-- ... -->
    62 exports.Script = "script" /* Script */; //<script> tags
    63 exports.Style = "style" /* Style */; //<style> tags
    64 exports.Tag = "tag" /* Tag */; //Any tag
    65 exports.CDATA = "cdata" /* CDATA */; //<![CDATA[ ... ]]>
    66 exports.Doctype = "doctype" /* Doctype */;
    67 });
    68 
    69 var Aacute = "Á";
    70 var aacute = "á";
    71 var Abreve = "Ă";
    72 var abreve = "ă";
    73 var ac = "∾";
    74 var acd = "∿";
    75 var acE = "∾̳";
    76 var Acirc = "Â";
    77 var acirc = "â";
    78 var acute = "´";
    79 var Acy = "А";
    80 var acy = "а";
    81 var AElig = "Æ";
    82 var aelig = "æ";
    83 var af = "⁡";
    84 var Afr = "𝔄";
    85 var afr = "𝔞";
    86 var Agrave = "À";
    87 var agrave = "à";
    88 var alefsym = "ℵ";
    89 var aleph = "ℵ";
    90 var Alpha = "Α";
    91 var alpha = "α";
    92 var Amacr = "Ā";
    93 var amacr = "ā";
    94 var amalg = "⨿";
    95 var amp = "&";
    96 var AMP = "&";
    97 var andand = "⩕";
    98 var And = "⩓";
    99 var and = "∧";
    100 var andd = "⩜";
    101 var andslope = "⩘";
    102 var andv = "⩚";
    103 var ang = "∠";
    104 var ange = "⦤";
    105 var angle = "∠";
    106 var angmsdaa = "⦨";
    107 var angmsdab = "⦩";
    108 var angmsdac = "⦪";
    109 var angmsdad = "⦫";
    110 var angmsdae = "⦬";
    111 var angmsdaf = "⦭";
    112 var angmsdag = "⦮";
    113 var angmsdah = "⦯";
    114 var angmsd = "∡";
    115 var angrt = "∟";
    116 var angrtvb = "⊾";
    117 var angrtvbd = "⦝";
    118 var angsph = "∢";
    119 var angst = "Å";
    120 var angzarr = "⍼";
    121 var Aogon = "Ą";
    122 var aogon = "ą";
    123 var Aopf = "𝔸";
    124 var aopf = "𝕒";
    125 var apacir = "⩯";
    126 var ap = "≈";
    127 var apE = "⩰";
    128 var ape = "≊";
    129 var apid = "≋";
    130 var apos = "'";
    131 var ApplyFunction = "⁡";
    132 var approx = "≈";
    133 var approxeq = "≊";
    134 var Aring = "Å";
    135 var aring = "å";
    136 var Ascr = "𝒜";
    137 var ascr = "𝒶";
    138 var Assign = "≔";
    139 var ast = "*";
    140 var asymp = "≈";
    141 var asympeq = "≍";
    142 var Atilde = "Ã";
    143 var atilde = "ã";
    144 var Auml = "Ä";
    145 var auml = "ä";
    146 var awconint = "∳";
    147 var awint = "⨑";
    148 var backcong = "≌";
    149 var backepsilon = "϶";
    150 var backprime = "‵";
    151 var backsim = "∽";
    152 var backsimeq = "⋍";
    153 var Backslash = "∖";
    154 var Barv = "⫧";
    155 var barvee = "⊽";
    156 var barwed = "⌅";
    157 var Barwed = "⌆";
    158 var barwedge = "⌅";
    159 var bbrk = "⎵";
    160 var bbrktbrk = "⎶";
    161 var bcong = "≌";
    162 var Bcy = "Б";
    163 var bcy = "б";
    164 var bdquo = "„";
    165 var becaus = "∵";
    166 var because = "∵";
    167 var Because = "∵";
    168 var bemptyv = "⦰";
    169 var bepsi = "϶";
    170 var bernou = "ℬ";
    171 var Bernoullis = "ℬ";
    172 var Beta = "Β";
    173 var beta = "β";
    174 var beth = "ℶ";
    175 var between = "≬";
    176 var Bfr = "𝔅";
    177 var bfr = "𝔟";
    178 var bigcap = "⋂";
    179 var bigcirc = "◯";
    180 var bigcup = "⋃";
    181 var bigodot = "⨀";
    182 var bigoplus = "⨁";
    183 var bigotimes = "⨂";
    184 var bigsqcup = "⨆";
    185 var bigstar = "★";
    186 var bigtriangledown = "▽";
    187 var bigtriangleup = "△";
    188 var biguplus = "⨄";
    189 var bigvee = "⋁";
    190 var bigwedge = "⋀";
    191 var bkarow = "⤍";
    192 var blacklozenge = "⧫";
    193 var blacksquare = "▪";
    194 var blacktriangle = "▴";
    195 var blacktriangledown = "▾";
    196 var blacktriangleleft = "◂";
    197 var blacktriangleright = "▸";
    198 var blank = "␣";
    199 var blk12 = "▒";
    200 var blk14 = "░";
    201 var blk34 = "▓";
    202 var block = "█";
    203 var bne = "=⃥";
    204 var bnequiv = "≡⃥";
    205 var bNot = "⫭";
    206 var bnot = "⌐";
    207 var Bopf = "𝔹";
    208 var bopf = "𝕓";
    209 var bot = "⊥";
    210 var bottom = "⊥";
    211 var bowtie = "⋈";
    212 var boxbox = "⧉";
    213 var boxdl = "┐";
    214 var boxdL = "╕";
    215 var boxDl = "╖";
    216 var boxDL = "╗";
    217 var boxdr = "┌";
    218 var boxdR = "╒";
    219 var boxDr = "╓";
    220 var boxDR = "╔";
    221 var boxh = "─";
    222 var boxH = "═";
    223 var boxhd = "┬";
    224 var boxHd = "╤";
    225 var boxhD = "╥";
    226 var boxHD = "╦";
    227 var boxhu = "┴";
    228 var boxHu = "╧";
    229 var boxhU = "╨";
    230 var boxHU = "╩";
    231 var boxminus = "⊟";
    232 var boxplus = "⊞";
    233 var boxtimes = "⊠";
    234 var boxul = "┘";
    235 var boxuL = "╛";
    236 var boxUl = "╜";
    237 var boxUL = "╝";
    238 var boxur = "└";
    239 var boxuR = "╘";
    240 var boxUr = "╙";
    241 var boxUR = "╚";
    242 var boxv = "│";
    243 var boxV = "║";
    244 var boxvh = "┼";
    245 var boxvH = "╪";
    246 var boxVh = "╫";
    247 var boxVH = "╬";
    248 var boxvl = "┤";
    249 var boxvL = "╡";
    250 var boxVl = "╢";
    251 var boxVL = "╣";
    252 var boxvr = "├";
    253 var boxvR = "╞";
    254 var boxVr = "╟";
    255 var boxVR = "╠";
    256 var bprime = "‵";
    257 var breve = "˘";
    258 var Breve = "˘";
    259 var brvbar = "¦";
    260 var bscr = "𝒷";
    261 var Bscr = "ℬ";
    262 var bsemi = "⁏";
    263 var bsim = "∽";
    264 var bsime = "⋍";
    265 var bsolb = "⧅";
    266 var bsol = "\\";
    267 var bsolhsub = "⟈";
    268 var bull = "•";
    269 var bullet = "•";
    270 var bump = "≎";
    271 var bumpE = "⪮";
    272 var bumpe = "≏";
    273 var Bumpeq = "≎";
    274 var bumpeq = "≏";
    275 var Cacute = "Ć";
    276 var cacute = "ć";
    277 var capand = "⩄";
    278 var capbrcup = "⩉";
    279 var capcap = "⩋";
    280 var cap = "∩";
    281 var Cap = "⋒";
    282 var capcup = "⩇";
    283 var capdot = "⩀";
    284 var CapitalDifferentialD = "ⅅ";
    285 var caps = "∩︀";
    286 var caret = "⁁";
    287 var caron = "ˇ";
    288 var Cayleys = "ℭ";
    289 var ccaps = "⩍";
    290 var Ccaron = "Č";
    291 var ccaron = "č";
    292 var Ccedil = "Ç";
    293 var ccedil = "ç";
    294 var Ccirc = "Ĉ";
    295 var ccirc = "ĉ";
    296 var Cconint = "∰";
    297 var ccups = "⩌";
    298 var ccupssm = "⩐";
    299 var Cdot = "Ċ";
    300 var cdot = "ċ";
    301 var cedil = "¸";
    302 var Cedilla = "¸";
    303 var cemptyv = "⦲";
    304 var cent = "¢";
    305 var centerdot = "·";
    306 var CenterDot = "·";
    307 var cfr = "𝔠";
    308 var Cfr = "ℭ";
    309 var CHcy = "Ч";
    310 var chcy = "ч";
    311 var check = "✓";
    312 var checkmark = "✓";
    313 var Chi = "Χ";
    314 var chi = "χ";
    315 var circ = "ˆ";
    316 var circeq = "≗";
    317 var circlearrowleft = "↺";
    318 var circlearrowright = "↻";
    319 var circledast = "⊛";
    320 var circledcirc = "⊚";
    321 var circleddash = "⊝";
    322 var CircleDot = "⊙";
    323 var circledR = "®";
    324 var circledS = "Ⓢ";
    325 var CircleMinus = "⊖";
    326 var CirclePlus = "⊕";
    327 var CircleTimes = "⊗";
    328 var cir = "○";
    329 var cirE = "⧃";
    330 var cire = "≗";
    331 var cirfnint = "⨐";
    332 var cirmid = "⫯";
    333 var cirscir = "⧂";
    334 var ClockwiseContourIntegral = "∲";
    335 var CloseCurlyDoubleQuote = "”";
    336 var CloseCurlyQuote = "’";
    337 var clubs = "♣";
    338 var clubsuit = "♣";
    339 var colon = ":";
    340 var Colon = "∷";
    341 var Colone = "⩴";
    342 var colone = "≔";
    343 var coloneq = "≔";
    344 var comma = ",";
    345 var commat = "@";
    346 var comp = "∁";
    347 var compfn = "∘";
    348 var complement = "∁";
    349 var complexes = "ℂ";
    350 var cong = "≅";
    351 var congdot = "⩭";
    352 var Congruent = "≡";
    353 var conint = "∮";
    354 var Conint = "∯";
    355 var ContourIntegral = "∮";
    356 var copf = "𝕔";
    357 var Copf = "ℂ";
    358 var coprod = "∐";
    359 var Coproduct = "∐";
    360 var copy = "©";
    361 var COPY = "©";
    362 var copysr = "℗";
    363 var CounterClockwiseContourIntegral = "∳";
    364 var crarr = "↵";
    365 var cross = "✗";
    366 var Cross = "⨯";
    367 var Cscr = "𝒞";
    368 var cscr = "𝒸";
    369 var csub = "⫏";
    370 var csube = "⫑";
    371 var csup = "⫐";
    372 var csupe = "⫒";
    373 var ctdot = "⋯";
    374 var cudarrl = "⤸";
    375 var cudarrr = "⤵";
    376 var cuepr = "⋞";
    377 var cuesc = "⋟";
    378 var cularr = "↶";
    379 var cularrp = "⤽";
    380 var cupbrcap = "⩈";
    381 var cupcap = "⩆";
    382 var CupCap = "≍";
    383 var cup = "∪";
    384 var Cup = "⋓";
    385 var cupcup = "⩊";
    386 var cupdot = "⊍";
    387 var cupor = "⩅";
    388 var cups = "∪︀";
    389 var curarr = "↷";
    390 var curarrm = "⤼";
    391 var curlyeqprec = "⋞";
    392 var curlyeqsucc = "⋟";
    393 var curlyvee = "⋎";
    394 var curlywedge = "⋏";
    395 var curren = "¤";
    396 var curvearrowleft = "↶";
    397 var curvearrowright = "↷";
    398 var cuvee = "⋎";
    399 var cuwed = "⋏";
    400 var cwconint = "∲";
    401 var cwint = "∱";
    402 var cylcty = "⌭";
    403 var dagger = "†";
    404 var Dagger = "‡";
    405 var daleth = "ℸ";
    406 var darr = "↓";
    407 var Darr = "↡";
    408 var dArr = "⇓";
    409 var dash = "‐";
    410 var Dashv = "⫤";
    411 var dashv = "⊣";
    412 var dbkarow = "⤏";
    413 var dblac = "˝";
    414 var Dcaron = "Ď";
    415 var dcaron = "ď";
    416 var Dcy = "Д";
    417 var dcy = "д";
    418 var ddagger = "‡";
    419 var ddarr = "⇊";
    420 var DD = "ⅅ";
    421 var dd = "ⅆ";
    422 var DDotrahd = "⤑";
    423 var ddotseq = "⩷";
    424 var deg = "°";
    425 var Del = "∇";
    426 var Delta = "Δ";
    427 var delta = "δ";
    428 var demptyv = "⦱";
    429 var dfisht = "⥿";
    430 var Dfr = "𝔇";
    431 var dfr = "𝔡";
    432 var dHar = "⥥";
    433 var dharl = "⇃";
    434 var dharr = "⇂";
    435 var DiacriticalAcute = "´";
    436 var DiacriticalDot = "˙";
    437 var DiacriticalDoubleAcute = "˝";
    438 var DiacriticalGrave = "`";
    439 var DiacriticalTilde = "˜";
    440 var diam = "⋄";
    441 var diamond = "⋄";
    442 var Diamond = "⋄";
    443 var diamondsuit = "♦";
    444 var diams = "♦";
    445 var die = "¨";
    446 var DifferentialD = "ⅆ";
    447 var digamma = "ϝ";
    448 var disin = "⋲";
    449 var div = "÷";
    450 var divide = "÷";
    451 var divideontimes = "⋇";
    452 var divonx = "⋇";
    453 var DJcy = "Ђ";
    454 var djcy = "ђ";
    455 var dlcorn = "⌞";
    456 var dlcrop = "⌍";
    457 var dollar = "$";
    458 var Dopf = "𝔻";
    459 var dopf = "𝕕";
    460 var Dot = "¨";
    461 var dot = "˙";
    462 var DotDot = "⃜";
    463 var doteq = "≐";
    464 var doteqdot = "≑";
    465 var DotEqual = "≐";
    466 var dotminus = "∸";
    467 var dotplus = "∔";
    468 var dotsquare = "⊡";
    469 var doublebarwedge = "⌆";
    470 var DoubleContourIntegral = "∯";
    471 var DoubleDot = "¨";
    472 var DoubleDownArrow = "⇓";
    473 var DoubleLeftArrow = "⇐";
    474 var DoubleLeftRightArrow = "⇔";
    475 var DoubleLeftTee = "⫤";
    476 var DoubleLongLeftArrow = "⟸";
    477 var DoubleLongLeftRightArrow = "⟺";
    478 var DoubleLongRightArrow = "⟹";
    479 var DoubleRightArrow = "⇒";
    480 var DoubleRightTee = "⊨";
    481 var DoubleUpArrow = "⇑";
    482 var DoubleUpDownArrow = "⇕";
    483 var DoubleVerticalBar = "∥";
    484 var DownArrowBar = "⤓";
    485 var downarrow = "↓";
    486 var DownArrow = "↓";
    487 var Downarrow = "⇓";
    488 var DownArrowUpArrow = "⇵";
    489 var DownBreve = "̑";
    490 var downdownarrows = "⇊";
    491 var downharpoonleft = "⇃";
    492 var downharpoonright = "⇂";
    493 var DownLeftRightVector = "⥐";
    494 var DownLeftTeeVector = "⥞";
    495 var DownLeftVectorBar = "⥖";
    496 var DownLeftVector = "↽";
    497 var DownRightTeeVector = "⥟";
    498 var DownRightVectorBar = "⥗";
    499 var DownRightVector = "⇁";
    500 var DownTeeArrow = "↧";
    501 var DownTee = "⊤";
    502 var drbkarow = "⤐";
    503 var drcorn = "⌟";
    504 var drcrop = "⌌";
    505 var Dscr = "𝒟";
    506 var dscr = "𝒹";
    507 var DScy = "Ѕ";
    508 var dscy = "ѕ";
    509 var dsol = "⧶";
    510 var Dstrok = "Đ";
    511 var dstrok = "đ";
    512 var dtdot = "⋱";
    513 var dtri = "▿";
    514 var dtrif = "▾";
    515 var duarr = "⇵";
    516 var duhar = "⥯";
    517 var dwangle = "⦦";
    518 var DZcy = "Џ";
    519 var dzcy = "џ";
    520 var dzigrarr = "⟿";
    521 var Eacute = "É";
    522 var eacute = "é";
    523 var easter = "⩮";
    524 var Ecaron = "Ě";
    525 var ecaron = "ě";
    526 var Ecirc = "Ê";
    527 var ecirc = "ê";
    528 var ecir = "≖";
    529 var ecolon = "≕";
    530 var Ecy = "Э";
    531 var ecy = "э";
    532 var eDDot = "⩷";
    533 var Edot = "Ė";
    534 var edot = "ė";
    535 var eDot = "≑";
    536 var ee = "ⅇ";
    537 var efDot = "≒";
    538 var Efr = "𝔈";
    539 var efr = "𝔢";
    540 var eg = "⪚";
    541 var Egrave = "È";
    542 var egrave = "è";
    543 var egs = "⪖";
    544 var egsdot = "⪘";
    545 var el = "⪙";
    546 var Element = "∈";
    547 var elinters = "⏧";
    548 var ell = "ℓ";
    549 var els = "⪕";
    550 var elsdot = "⪗";
    551 var Emacr = "Ē";
    552 var emacr = "ē";
    553 var empty = "∅";
    554 var emptyset = "∅";
    555 var EmptySmallSquare = "◻";
    556 var emptyv = "∅";
    557 var EmptyVerySmallSquare = "▫";
    558 var emsp13 = " ";
    559 var emsp14 = " ";
    560 var emsp = " ";
    561 var ENG = "Ŋ";
    562 var eng = "ŋ";
    563 var ensp = " ";
    564 var Eogon = "Ę";
    565 var eogon = "ę";
    566 var Eopf = "𝔼";
    567 var eopf = "𝕖";
    568 var epar = "⋕";
    569 var eparsl = "⧣";
    570 var eplus = "⩱";
    571 var epsi = "ε";
    572 var Epsilon = "Ε";
    573 var epsilon = "ε";
    574 var epsiv = "ϵ";
    575 var eqcirc = "≖";
    576 var eqcolon = "≕";
    577 var eqsim = "≂";
    578 var eqslantgtr = "⪖";
    579 var eqslantless = "⪕";
    580 var Equal = "⩵";
    581 var equals = "=";
    582 var EqualTilde = "≂";
    583 var equest = "≟";
    584 var Equilibrium = "⇌";
    585 var equiv = "≡";
    586 var equivDD = "⩸";
    587 var eqvparsl = "⧥";
    588 var erarr = "⥱";
    589 var erDot = "≓";
    590 var escr = "ℯ";
    591 var Escr = "ℰ";
    592 var esdot = "≐";
    593 var Esim = "⩳";
    594 var esim = "≂";
    595 var Eta = "Η";
    596 var eta = "η";
    597 var ETH = "Ð";
    598 var eth = "ð";
    599 var Euml = "Ë";
    600 var euml = "ë";
    601 var euro = "€";
    602 var excl = "!";
    603 var exist = "∃";
    604 var Exists = "∃";
    605 var expectation = "ℰ";
    606 var exponentiale = "ⅇ";
    607 var ExponentialE = "ⅇ";
    608 var fallingdotseq = "≒";
    609 var Fcy = "Ф";
    610 var fcy = "ф";
    611 var female = "♀";
    612 var ffilig = "ffi";
    613 var fflig = "ff";
    614 var ffllig = "ffl";
    615 var Ffr = "𝔉";
    616 var ffr = "𝔣";
    617 var filig = "fi";
    618 var FilledSmallSquare = "◼";
    619 var FilledVerySmallSquare = "▪";
    620 var fjlig = "fj";
    621 var flat = "♭";
    622 var fllig = "fl";
    623 var fltns = "▱";
    624 var fnof = "ƒ";
    625 var Fopf = "𝔽";
    626 var fopf = "𝕗";
    627 var forall = "∀";
    628 var ForAll = "∀";
    629 var fork = "⋔";
    630 var forkv = "⫙";
    631 var Fouriertrf = "ℱ";
    632 var fpartint = "⨍";
    633 var frac12 = "½";
    634 var frac13 = "⅓";
    635 var frac14 = "¼";
    636 var frac15 = "⅕";
    637 var frac16 = "⅙";
    638 var frac18 = "⅛";
    639 var frac23 = "⅔";
    640 var frac25 = "⅖";
    641 var frac34 = "¾";
    642 var frac35 = "⅗";
    643 var frac38 = "⅜";
    644 var frac45 = "⅘";
    645 var frac56 = "⅚";
    646 var frac58 = "⅝";
    647 var frac78 = "⅞";
    648 var frasl = "⁄";
    649 var frown = "⌢";
    650 var fscr = "𝒻";
    651 var Fscr = "ℱ";
    652 var gacute = "ǵ";
    653 var Gamma = "Γ";
    654 var gamma = "γ";
    655 var Gammad = "Ϝ";
    656 var gammad = "ϝ";
    657 var gap = "⪆";
    658 var Gbreve = "Ğ";
    659 var gbreve = "ğ";
    660 var Gcedil = "Ģ";
    661 var Gcirc = "Ĝ";
    662 var gcirc = "ĝ";
    663 var Gcy = "Г";
    664 var gcy = "г";
    665 var Gdot = "Ġ";
    666 var gdot = "ġ";
    667 var ge = "≥";
    668 var gE = "≧";
    669 var gEl = "⪌";
    670 var gel = "⋛";
    671 var geq = "≥";
    672 var geqq = "≧";
    673 var geqslant = "⩾";
    674 var gescc = "⪩";
    675 var ges = "⩾";
    676 var gesdot = "⪀";
    677 var gesdoto = "⪂";
    678 var gesdotol = "⪄";
    679 var gesl = "⋛︀";
    680 var gesles = "⪔";
    681 var Gfr = "𝔊";
    682 var gfr = "𝔤";
    683 var gg = "≫";
    684 var Gg = "⋙";
    685 var ggg = "⋙";
    686 var gimel = "ℷ";
    687 var GJcy = "Ѓ";
    688 var gjcy = "ѓ";
    689 var gla = "⪥";
    690 var gl = "≷";
    691 var glE = "⪒";
    692 var glj = "⪤";
    693 var gnap = "⪊";
    694 var gnapprox = "⪊";
    695 var gne = "⪈";
    696 var gnE = "≩";
    697 var gneq = "⪈";
    698 var gneqq = "≩";
    699 var gnsim = "⋧";
    700 var Gopf = "𝔾";
    701 var gopf = "𝕘";
    702 var grave = "`";
    703 var GreaterEqual = "≥";
    704 var GreaterEqualLess = "⋛";
    705 var GreaterFullEqual = "≧";
    706 var GreaterGreater = "⪢";
    707 var GreaterLess = "≷";
    708 var GreaterSlantEqual = "⩾";
    709 var GreaterTilde = "≳";
    710 var Gscr = "𝒢";
    711 var gscr = "ℊ";
    712 var gsim = "≳";
    713 var gsime = "⪎";
    714 var gsiml = "⪐";
    715 var gtcc = "⪧";
    716 var gtcir = "⩺";
    717 var gt = ">";
    718 var GT = ">";
    719 var Gt = "≫";
    720 var gtdot = "⋗";
    721 var gtlPar = "⦕";
    722 var gtquest = "⩼";
    723 var gtrapprox = "⪆";
    724 var gtrarr = "⥸";
    725 var gtrdot = "⋗";
    726 var gtreqless = "⋛";
    727 var gtreqqless = "⪌";
    728 var gtrless = "≷";
    729 var gtrsim = "≳";
    730 var gvertneqq = "≩︀";
    731 var gvnE = "≩︀";
    732 var Hacek = "ˇ";
    733 var hairsp = " ";
    734 var half = "½";
    735 var hamilt = "ℋ";
    736 var HARDcy = "Ъ";
    737 var hardcy = "ъ";
    738 var harrcir = "⥈";
    739 var harr = "↔";
    740 var hArr = "⇔";
    741 var harrw = "↭";
    742 var Hat = "^";
    743 var hbar = "ℏ";
    744 var Hcirc = "Ĥ";
    745 var hcirc = "ĥ";
    746 var hearts = "♥";
    747 var heartsuit = "♥";
    748 var hellip = "…";
    749 var hercon = "⊹";
    750 var hfr = "𝔥";
    751 var Hfr = "ℌ";
    752 var HilbertSpace = "ℋ";
    753 var hksearow = "⤥";
    754 var hkswarow = "⤦";
    755 var hoarr = "⇿";
    756 var homtht = "∻";
    757 var hookleftarrow = "↩";
    758 var hookrightarrow = "↪";
    759 var hopf = "𝕙";
    760 var Hopf = "ℍ";
    761 var horbar = "―";
    762 var HorizontalLine = "─";
    763 var hscr = "𝒽";
    764 var Hscr = "ℋ";
    765 var hslash = "ℏ";
    766 var Hstrok = "Ħ";
    767 var hstrok = "ħ";
    768 var HumpDownHump = "≎";
    769 var HumpEqual = "≏";
    770 var hybull = "⁃";
    771 var hyphen = "‐";
    772 var Iacute = "Í";
    773 var iacute = "í";
    774 var ic = "⁣";
    775 var Icirc = "Î";
    776 var icirc = "î";
    777 var Icy = "И";
    778 var icy = "и";
    779 var Idot = "İ";
    780 var IEcy = "Е";
    781 var iecy = "е";
    782 var iexcl = "¡";
    783 var iff = "⇔";
    784 var ifr = "𝔦";
    785 var Ifr = "ℑ";
    786 var Igrave = "Ì";
    787 var igrave = "ì";
    788 var ii = "ⅈ";
    789 var iiiint = "⨌";
    790 var iiint = "∭";
    791 var iinfin = "⧜";
    792 var iiota = "℩";
    793 var IJlig = "IJ";
    794 var ijlig = "ij";
    795 var Imacr = "Ī";
    796 var imacr = "ī";
    797 var image = "ℑ";
    798 var ImaginaryI = "ⅈ";
    799 var imagline = "ℐ";
    800 var imagpart = "ℑ";
    801 var imath = "ı";
    802 var Im = "ℑ";
    803 var imof = "⊷";
    804 var imped = "Ƶ";
    805 var Implies = "⇒";
    806 var incare = "℅";
    807 var infin = "∞";
    808 var infintie = "⧝";
    809 var inodot = "ı";
    810 var intcal = "⊺";
    811 var int = "∫";
    812 var Int = "∬";
    813 var integers = "ℤ";
    814 var Integral = "∫";
    815 var intercal = "⊺";
    816 var Intersection = "⋂";
    817 var intlarhk = "⨗";
    818 var intprod = "⨼";
    819 var InvisibleComma = "⁣";
    820 var InvisibleTimes = "⁢";
    821 var IOcy = "Ё";
    822 var iocy = "ё";
    823 var Iogon = "Į";
    824 var iogon = "į";
    825 var Iopf = "𝕀";
    826 var iopf = "𝕚";
    827 var Iota = "Ι";
    828 var iota = "ι";
    829 var iprod = "⨼";
    830 var iquest = "¿";
    831 var iscr = "𝒾";
    832 var Iscr = "ℐ";
    833 var isin = "∈";
    834 var isindot = "⋵";
    835 var isinE = "⋹";
    836 var isins = "⋴";
    837 var isinsv = "⋳";
    838 var isinv = "∈";
    839 var it = "⁢";
    840 var Itilde = "Ĩ";
    841 var itilde = "ĩ";
    842 var Iukcy = "І";
    843 var iukcy = "і";
    844 var Iuml = "Ï";
    845 var iuml = "ï";
    846 var Jcirc = "Ĵ";
    847 var jcirc = "ĵ";
    848 var Jcy = "Й";
    849 var jcy = "й";
    850 var Jfr = "𝔍";
    851 var jfr = "𝔧";
    852 var jmath = "ȷ";
    853 var Jopf = "𝕁";
    854 var jopf = "𝕛";
    855 var Jscr = "𝒥";
    856 var jscr = "𝒿";
    857 var Jsercy = "Ј";
    858 var jsercy = "ј";
    859 var Jukcy = "Є";
    860 var jukcy = "є";
    861 var Kappa = "Κ";
    862 var kappa = "κ";
    863 var kappav = "ϰ";
    864 var Kcedil = "Ķ";
    865 var kcedil = "ķ";
    866 var Kcy = "К";
    867 var kcy = "к";
    868 var Kfr = "𝔎";
    869 var kfr = "𝔨";
    870 var kgreen = "ĸ";
    871 var KHcy = "Х";
    872 var khcy = "х";
    873 var KJcy = "Ќ";
    874 var kjcy = "ќ";
    875 var Kopf = "𝕂";
    876 var kopf = "𝕜";
    877 var Kscr = "𝒦";
    878 var kscr = "𝓀";
    879 var lAarr = "⇚";
    880 var Lacute = "Ĺ";
    881 var lacute = "ĺ";
    882 var laemptyv = "⦴";
    883 var lagran = "ℒ";
    884 var Lambda = "Λ";
    885 var lambda = "λ";
    886 var lang = "⟨";
    887 var Lang = "⟪";
    888 var langd = "⦑";
    889 var langle = "⟨";
    890 var lap = "⪅";
    891 var Laplacetrf = "ℒ";
    892 var laquo = "«";
    893 var larrb = "⇤";
    894 var larrbfs = "⤟";
    895 var larr = "←";
    896 var Larr = "↞";
    897 var lArr = "⇐";
    898 var larrfs = "⤝";
    899 var larrhk = "↩";
    900 var larrlp = "↫";
    901 var larrpl = "⤹";
    902 var larrsim = "⥳";
    903 var larrtl = "↢";
    904 var latail = "⤙";
    905 var lAtail = "⤛";
    906 var lat = "⪫";
    907 var late = "⪭";
    908 var lates = "⪭︀";
    909 var lbarr = "⤌";
    910 var lBarr = "⤎";
    911 var lbbrk = "❲";
    912 var lbrace = "{";
    913 var lbrack = "[";
    914 var lbrke = "⦋";
    915 var lbrksld = "⦏";
    916 var lbrkslu = "⦍";
    917 var Lcaron = "Ľ";
    918 var lcaron = "ľ";
    919 var Lcedil = "Ļ";
    920 var lcedil = "ļ";
    921 var lceil = "⌈";
    922 var lcub = "{";
    923 var Lcy = "Л";
    924 var lcy = "л";
    925 var ldca = "⤶";
    926 var ldquo = "“";
    927 var ldquor = "„";
    928 var ldrdhar = "⥧";
    929 var ldrushar = "⥋";
    930 var ldsh = "↲";
    931 var le = "≤";
    932 var lE = "≦";
    933 var LeftAngleBracket = "⟨";
    934 var LeftArrowBar = "⇤";
    935 var leftarrow = "←";
    936 var LeftArrow = "←";
    937 var Leftarrow = "⇐";
    938 var LeftArrowRightArrow = "⇆";
    939 var leftarrowtail = "↢";
    940 var LeftCeiling = "⌈";
    941 var LeftDoubleBracket = "⟦";
    942 var LeftDownTeeVector = "⥡";
    943 var LeftDownVectorBar = "⥙";
    944 var LeftDownVector = "⇃";
    945 var LeftFloor = "⌊";
    946 var leftharpoondown = "↽";
    947 var leftharpoonup = "↼";
    948 var leftleftarrows = "⇇";
    949 var leftrightarrow = "↔";
    950 var LeftRightArrow = "↔";
    951 var Leftrightarrow = "⇔";
    952 var leftrightarrows = "⇆";
    953 var leftrightharpoons = "⇋";
    954 var leftrightsquigarrow = "↭";
    955 var LeftRightVector = "⥎";
    956 var LeftTeeArrow = "↤";
    957 var LeftTee = "⊣";
    958 var LeftTeeVector = "⥚";
    959 var leftthreetimes = "⋋";
    960 var LeftTriangleBar = "⧏";
    961 var LeftTriangle = "⊲";
    962 var LeftTriangleEqual = "⊴";
    963 var LeftUpDownVector = "⥑";
    964 var LeftUpTeeVector = "⥠";
    965 var LeftUpVectorBar = "⥘";
    966 var LeftUpVector = "↿";
    967 var LeftVectorBar = "⥒";
    968 var LeftVector = "↼";
    969 var lEg = "⪋";
    970 var leg = "⋚";
    971 var leq = "≤";
    972 var leqq = "≦";
    973 var leqslant = "⩽";
    974 var lescc = "⪨";
    975 var les = "⩽";
    976 var lesdot = "⩿";
    977 var lesdoto = "⪁";
    978 var lesdotor = "⪃";
    979 var lesg = "⋚︀";
    980 var lesges = "⪓";
    981 var lessapprox = "⪅";
    982 var lessdot = "⋖";
    983 var lesseqgtr = "⋚";
    984 var lesseqqgtr = "⪋";
    985 var LessEqualGreater = "⋚";
    986 var LessFullEqual = "≦";
    987 var LessGreater = "≶";
    988 var lessgtr = "≶";
    989 var LessLess = "⪡";
    990 var lesssim = "≲";
    991 var LessSlantEqual = "⩽";
    992 var LessTilde = "≲";
    993 var lfisht = "⥼";
    994 var lfloor = "⌊";
    995 var Lfr = "𝔏";
    996 var lfr = "𝔩";
    997 var lg = "≶";
    998 var lgE = "⪑";
    999 var lHar = "⥢";
    1000 var lhard = "↽";
    1001 var lharu = "↼";
    1002 var lharul = "⥪";
    1003 var lhblk = "▄";
    1004 var LJcy = "Љ";
    1005 var ljcy = "љ";
    1006 var llarr = "⇇";
    1007 var ll = "≪";
    1008 var Ll = "⋘";
    1009 var llcorner = "⌞";
    1010 var Lleftarrow = "⇚";
    1011 var llhard = "⥫";
    1012 var lltri = "◺";
    1013 var Lmidot = "Ŀ";
    1014 var lmidot = "ŀ";
    1015 var lmoustache = "⎰";
    1016 var lmoust = "⎰";
    1017 var lnap = "⪉";
    1018 var lnapprox = "⪉";
    1019 var lne = "⪇";
    1020 var lnE = "≨";
    1021 var lneq = "⪇";
    1022 var lneqq = "≨";
    1023 var lnsim = "⋦";
    1024 var loang = "⟬";
    1025 var loarr = "⇽";
    1026 var lobrk = "⟦";
    1027 var longleftarrow = "⟵";
    1028 var LongLeftArrow = "⟵";
    1029 var Longleftarrow = "⟸";
    1030 var longleftrightarrow = "⟷";
    1031 var LongLeftRightArrow = "⟷";
    1032 var Longleftrightarrow = "⟺";
    1033 var longmapsto = "⟼";
    1034 var longrightarrow = "⟶";
    1035 var LongRightArrow = "⟶";
    1036 var Longrightarrow = "⟹";
    1037 var looparrowleft = "↫";
    1038 var looparrowright = "↬";
    1039 var lopar = "⦅";
    1040 var Lopf = "𝕃";
    1041 var lopf = "𝕝";
    1042 var loplus = "⨭";
    1043 var lotimes = "⨴";
    1044 var lowast = "∗";
    1045 var lowbar = "_";
    1046 var LowerLeftArrow = "↙";
    1047 var LowerRightArrow = "↘";
    1048 var loz = "◊";
    1049 var lozenge = "◊";
    1050 var lozf = "⧫";
    1051 var lpar = "(";
    1052 var lparlt = "⦓";
    1053 var lrarr = "⇆";
    1054 var lrcorner = "⌟";
    1055 var lrhar = "⇋";
    1056 var lrhard = "⥭";
    1057 var lrm = "‎";
    1058 var lrtri = "⊿";
    1059 var lsaquo = "‹";
    1060 var lscr = "𝓁";
    1061 var Lscr = "ℒ";
    1062 var lsh = "↰";
    1063 var Lsh = "↰";
    1064 var lsim = "≲";
    1065 var lsime = "⪍";
    1066 var lsimg = "⪏";
    1067 var lsqb = "[";
    1068 var lsquo = "‘";
    1069 var lsquor = "‚";
    1070 var Lstrok = "Ł";
    1071 var lstrok = "ł";
    1072 var ltcc = "⪦";
    1073 var ltcir = "⩹";
    1074 var lt = "<";
    1075 var LT = "<";
    1076 var Lt = "≪";
    1077 var ltdot = "⋖";
    1078 var lthree = "⋋";
    1079 var ltimes = "⋉";
    1080 var ltlarr = "⥶";
    1081 var ltquest = "⩻";
    1082 var ltri = "◃";
    1083 var ltrie = "⊴";
    1084 var ltrif = "◂";
    1085 var ltrPar = "⦖";
    1086 var lurdshar = "⥊";
    1087 var luruhar = "⥦";
    1088 var lvertneqq = "≨︀";
    1089 var lvnE = "≨︀";
    1090 var macr = "¯";
    1091 var male = "♂";
    1092 var malt = "✠";
    1093 var maltese = "✠";
    1094 var map = "↦";
    1095 var mapsto = "↦";
    1096 var mapstodown = "↧";
    1097 var mapstoleft = "↤";
    1098 var mapstoup = "↥";
    1099 var marker = "▮";
    1100 var mcomma = "⨩";
    1101 var Mcy = "М";
    1102 var mcy = "м";
    1103 var mdash = "—";
    1104 var mDDot = "∺";
    1105 var measuredangle = "∡";
    1106 var MediumSpace = " ";
    1107 var Mellintrf = "ℳ";
    1108 var Mfr = "𝔐";
    1109 var mfr = "𝔪";
    1110 var mho = "℧";
    1111 var micro = "µ";
    1112 var midast = "*";
    1113 var midcir = "⫰";
    1114 var mid = "∣";
    1115 var middot = "·";
    1116 var minusb = "⊟";
    1117 var minus = "−";
    1118 var minusd = "∸";
    1119 var minusdu = "⨪";
    1120 var MinusPlus = "∓";
    1121 var mlcp = "⫛";
    1122 var mldr = "…";
    1123 var mnplus = "∓";
    1124 var models = "⊧";
    1125 var Mopf = "𝕄";
    1126 var mopf = "𝕞";
    1127 var mp = "∓";
    1128 var mscr = "𝓂";
    1129 var Mscr = "ℳ";
    1130 var mstpos = "∾";
    1131 var Mu = "Μ";
    1132 var mu = "μ";
    1133 var multimap = "⊸";
    1134 var mumap = "⊸";
    1135 var nabla = "∇";
    1136 var Nacute = "Ń";
    1137 var nacute = "ń";
    1138 var nang = "∠⃒";
    1139 var nap = "≉";
    1140 var napE = "⩰̸";
    1141 var napid = "≋̸";
    1142 var napos = "ʼn";
    1143 var napprox = "≉";
    1144 var natural = "♮";
    1145 var naturals = "ℕ";
    1146 var natur = "♮";
    1147 var nbsp = " ";
    1148 var nbump = "≎̸";
    1149 var nbumpe = "≏̸";
    1150 var ncap = "⩃";
    1151 var Ncaron = "Ň";
    1152 var ncaron = "ň";
    1153 var Ncedil = "Ņ";
    1154 var ncedil = "ņ";
    1155 var ncong = "≇";
    1156 var ncongdot = "⩭̸";
    1157 var ncup = "⩂";
    1158 var Ncy = "Н";
    1159 var ncy = "н";
    1160 var ndash = "–";
    1161 var nearhk = "⤤";
    1162 var nearr = "↗";
    1163 var neArr = "⇗";
    1164 var nearrow = "↗";
    1165 var ne = "≠";
    1166 var nedot = "≐̸";
    1167 var NegativeMediumSpace = "​";
    1168 var NegativeThickSpace = "​";
    1169 var NegativeThinSpace = "​";
    1170 var NegativeVeryThinSpace = "​";
    1171 var nequiv = "≢";
    1172 var nesear = "⤨";
    1173 var nesim = "≂̸";
    1174 var NestedGreaterGreater = "≫";
    1175 var NestedLessLess = "≪";
    1176 var NewLine = "\n";
    1177 var nexist = "∄";
    1178 var nexists = "∄";
    1179 var Nfr = "𝔑";
    1180 var nfr = "𝔫";
    1181 var ngE = "≧̸";
    1182 var nge = "≱";
    1183 var ngeq = "≱";
    1184 var ngeqq = "≧̸";
    1185 var ngeqslant = "⩾̸";
    1186 var nges = "⩾̸";
    1187 var nGg = "⋙̸";
    1188 var ngsim = "≵";
    1189 var nGt = "≫⃒";
    1190 var ngt = "≯";
    1191 var ngtr = "≯";
    1192 var nGtv = "≫̸";
    1193 var nharr = "↮";
    1194 var nhArr = "⇎";
    1195 var nhpar = "⫲";
    1196 var ni = "∋";
    1197 var nis = "⋼";
    1198 var nisd = "⋺";
    1199 var niv = "∋";
    1200 var NJcy = "Њ";
    1201 var njcy = "њ";
    1202 var nlarr = "↚";
    1203 var nlArr = "⇍";
    1204 var nldr = "‥";
    1205 var nlE = "≦̸";
    1206 var nle = "≰";
    1207 var nleftarrow = "↚";
    1208 var nLeftarrow = "⇍";
    1209 var nleftrightarrow = "↮";
    1210 var nLeftrightarrow = "⇎";
    1211 var nleq = "≰";
    1212 var nleqq = "≦̸";
    1213 var nleqslant = "⩽̸";
    1214 var nles = "⩽̸";
    1215 var nless = "≮";
    1216 var nLl = "⋘̸";
    1217 var nlsim = "≴";
    1218 var nLt = "≪⃒";
    1219 var nlt = "≮";
    1220 var nltri = "⋪";
    1221 var nltrie = "⋬";
    1222 var nLtv = "≪̸";
    1223 var nmid = "∤";
    1224 var NoBreak = "⁠";
    1225 var NonBreakingSpace = " ";
    1226 var nopf = "𝕟";
    1227 var Nopf = "ℕ";
    1228 var Not = "⫬";
    1229 var not = "¬";
    1230 var NotCongruent = "≢";
    1231 var NotCupCap = "≭";
    1232 var NotDoubleVerticalBar = "∦";
    1233 var NotElement = "∉";
    1234 var NotEqual = "≠";
    1235 var NotEqualTilde = "≂̸";
    1236 var NotExists = "∄";
    1237 var NotGreater = "≯";
    1238 var NotGreaterEqual = "≱";
    1239 var NotGreaterFullEqual = "≧̸";
    1240 var NotGreaterGreater = "≫̸";
    1241 var NotGreaterLess = "≹";
    1242 var NotGreaterSlantEqual = "⩾̸";
    1243 var NotGreaterTilde = "≵";
    1244 var NotHumpDownHump = "≎̸";
    1245 var NotHumpEqual = "≏̸";
    1246 var notin = "∉";
    1247 var notindot = "⋵̸";
    1248 var notinE = "⋹̸";
    1249 var notinva = "∉";
    1250 var notinvb = "⋷";
    1251 var notinvc = "⋶";
    1252 var NotLeftTriangleBar = "⧏̸";
    1253 var NotLeftTriangle = "⋪";
    1254 var NotLeftTriangleEqual = "⋬";
    1255 var NotLess = "≮";
    1256 var NotLessEqual = "≰";
    1257 var NotLessGreater = "≸";
    1258 var NotLessLess = "≪̸";
    1259 var NotLessSlantEqual = "⩽̸";
    1260 var NotLessTilde = "≴";
    1261 var NotNestedGreaterGreater = "⪢̸";
    1262 var NotNestedLessLess = "⪡̸";
    1263 var notni = "∌";
    1264 var notniva = "∌";
    1265 var notnivb = "⋾";
    1266 var notnivc = "⋽";
    1267 var NotPrecedes = "⊀";
    1268 var NotPrecedesEqual = "⪯̸";
    1269 var NotPrecedesSlantEqual = "⋠";
    1270 var NotReverseElement = "∌";
    1271 var NotRightTriangleBar = "⧐̸";
    1272 var NotRightTriangle = "⋫";
    1273 var NotRightTriangleEqual = "⋭";
    1274 var NotSquareSubset = "⊏̸";
    1275 var NotSquareSubsetEqual = "⋢";
    1276 var NotSquareSuperset = "⊐̸";
    1277 var NotSquareSupersetEqual = "⋣";
    1278 var NotSubset = "⊂⃒";
    1279 var NotSubsetEqual = "⊈";
    1280 var NotSucceeds = "⊁";
    1281 var NotSucceedsEqual = "⪰̸";
    1282 var NotSucceedsSlantEqual = "⋡";
    1283 var NotSucceedsTilde = "≿̸";
    1284 var NotSuperset = "⊃⃒";
    1285 var NotSupersetEqual = "⊉";
    1286 var NotTilde = "≁";
    1287 var NotTildeEqual = "≄";
    1288 var NotTildeFullEqual = "≇";
    1289 var NotTildeTilde = "≉";
    1290 var NotVerticalBar = "∤";
    1291 var nparallel = "∦";
    1292 var npar = "∦";
    1293 var nparsl = "⫽⃥";
    1294 var npart = "∂̸";
    1295 var npolint = "⨔";
    1296 var npr = "⊀";
    1297 var nprcue = "⋠";
    1298 var nprec = "⊀";
    1299 var npreceq = "⪯̸";
    1300 var npre = "⪯̸";
    1301 var nrarrc = "⤳̸";
    1302 var nrarr = "↛";
    1303 var nrArr = "⇏";
    1304 var nrarrw = "↝̸";
    1305 var nrightarrow = "↛";
    1306 var nRightarrow = "⇏";
    1307 var nrtri = "⋫";
    1308 var nrtrie = "⋭";
    1309 var nsc = "⊁";
    1310 var nsccue = "⋡";
    1311 var nsce = "⪰̸";
    1312 var Nscr = "𝒩";
    1313 var nscr = "𝓃";
    1314 var nshortmid = "∤";
    1315 var nshortparallel = "∦";
    1316 var nsim = "≁";
    1317 var nsime = "≄";
    1318 var nsimeq = "≄";
    1319 var nsmid = "∤";
    1320 var nspar = "∦";
    1321 var nsqsube = "⋢";
    1322 var nsqsupe = "⋣";
    1323 var nsub = "⊄";
    1324 var nsubE = "⫅̸";
    1325 var nsube = "⊈";
    1326 var nsubset = "⊂⃒";
    1327 var nsubseteq = "⊈";
    1328 var nsubseteqq = "⫅̸";
    1329 var nsucc = "⊁";
    1330 var nsucceq = "⪰̸";
    1331 var nsup = "⊅";
    1332 var nsupE = "⫆̸";
    1333 var nsupe = "⊉";
    1334 var nsupset = "⊃⃒";
    1335 var nsupseteq = "⊉";
    1336 var nsupseteqq = "⫆̸";
    1337 var ntgl = "≹";
    1338 var Ntilde = "Ñ";
    1339 var ntilde = "ñ";
    1340 var ntlg = "≸";
    1341 var ntriangleleft = "⋪";
    1342 var ntrianglelefteq = "⋬";
    1343 var ntriangleright = "⋫";
    1344 var ntrianglerighteq = "⋭";
    1345 var Nu = "Ν";
    1346 var nu = "ν";
    1347 var num = "#";
    1348 var numero = "№";
    1349 var numsp = " ";
    1350 var nvap = "≍⃒";
    1351 var nvdash = "⊬";
    1352 var nvDash = "⊭";
    1353 var nVdash = "⊮";
    1354 var nVDash = "⊯";
    1355 var nvge = "≥⃒";
    1356 var nvgt = ">⃒";
    1357 var nvHarr = "⤄";
    1358 var nvinfin = "⧞";
    1359 var nvlArr = "⤂";
    1360 var nvle = "≤⃒";
    1361 var nvlt = "<⃒";
    1362 var nvltrie = "⊴⃒";
    1363 var nvrArr = "⤃";
    1364 var nvrtrie = "⊵⃒";
    1365 var nvsim = "∼⃒";
    1366 var nwarhk = "⤣";
    1367 var nwarr = "↖";
    1368 var nwArr = "⇖";
    1369 var nwarrow = "↖";
    1370 var nwnear = "⤧";
    1371 var Oacute = "Ó";
    1372 var oacute = "ó";
    1373 var oast = "⊛";
    1374 var Ocirc = "Ô";
    1375 var ocirc = "ô";
    1376 var ocir = "⊚";
    1377 var Ocy = "О";
    1378 var ocy = "о";
    1379 var odash = "⊝";
    1380 var Odblac = "Ő";
    1381 var odblac = "ő";
    1382 var odiv = "⨸";
    1383 var odot = "⊙";
    1384 var odsold = "⦼";
    1385 var OElig = "Œ";
    1386 var oelig = "œ";
    1387 var ofcir = "⦿";
    1388 var Ofr = "𝔒";
    1389 var ofr = "𝔬";
    1390 var ogon = "˛";
    1391 var Ograve = "Ò";
    1392 var ograve = "ò";
    1393 var ogt = "⧁";
    1394 var ohbar = "⦵";
    1395 var ohm = "Ω";
    1396 var oint = "∮";
    1397 var olarr = "↺";
    1398 var olcir = "⦾";
    1399 var olcross = "⦻";
    1400 var oline = "‾";
    1401 var olt = "⧀";
    1402 var Omacr = "Ō";
    1403 var omacr = "ō";
    1404 var Omega = "Ω";
    1405 var omega = "ω";
    1406 var Omicron = "Ο";
    1407 var omicron = "ο";
    1408 var omid = "⦶";
    1409 var ominus = "⊖";
    1410 var Oopf = "𝕆";
    1411 var oopf = "𝕠";
    1412 var opar = "⦷";
    1413 var OpenCurlyDoubleQuote = "“";
    1414 var OpenCurlyQuote = "‘";
    1415 var operp = "⦹";
    1416 var oplus = "⊕";
    1417 var orarr = "↻";
    1418 var Or = "⩔";
    1419 var or = "∨";
    1420 var ord = "⩝";
    1421 var order = "ℴ";
    1422 var orderof = "ℴ";
    1423 var ordf = "ª";
    1424 var ordm = "º";
    1425 var origof = "⊶";
    1426 var oror = "⩖";
    1427 var orslope = "⩗";
    1428 var orv = "⩛";
    1429 var oS = "Ⓢ";
    1430 var Oscr = "𝒪";
    1431 var oscr = "ℴ";
    1432 var Oslash = "Ø";
    1433 var oslash = "ø";
    1434 var osol = "⊘";
    1435 var Otilde = "Õ";
    1436 var otilde = "õ";
    1437 var otimesas = "⨶";
    1438 var Otimes = "⨷";
    1439 var otimes = "⊗";
    1440 var Ouml = "Ö";
    1441 var ouml = "ö";
    1442 var ovbar = "⌽";
    1443 var OverBar = "‾";
    1444 var OverBrace = "⏞";
    1445 var OverBracket = "⎴";
    1446 var OverParenthesis = "⏜";
    1447 var para = "¶";
    1448 var parallel = "∥";
    1449 var par = "∥";
    1450 var parsim = "⫳";
    1451 var parsl = "⫽";
    1452 var part = "∂";
    1453 var PartialD = "∂";
    1454 var Pcy = "П";
    1455 var pcy = "п";
    1456 var percnt = "%";
    1457 var period = ".";
    1458 var permil = "‰";
    1459 var perp = "⊥";
    1460 var pertenk = "‱";
    1461 var Pfr = "𝔓";
    1462 var pfr = "𝔭";
    1463 var Phi = "Φ";
    1464 var phi = "φ";
    1465 var phiv = "ϕ";
    1466 var phmmat = "ℳ";
    1467 var phone = "☎";
    1468 var Pi = "Π";
    1469 var pi = "π";
    1470 var pitchfork = "⋔";
    1471 var piv = "ϖ";
    1472 var planck = "ℏ";
    1473 var planckh = "ℎ";
    1474 var plankv = "ℏ";
    1475 var plusacir = "⨣";
    1476 var plusb = "⊞";
    1477 var pluscir = "⨢";
    1478 var plus = "+";
    1479 var plusdo = "∔";
    1480 var plusdu = "⨥";
    1481 var pluse = "⩲";
    1482 var PlusMinus = "±";
    1483 var plusmn = "±";
    1484 var plussim = "⨦";
    1485 var plustwo = "⨧";
    1486 var pm = "±";
    1487 var Poincareplane = "ℌ";
    1488 var pointint = "⨕";
    1489 var popf = "𝕡";
    1490 var Popf = "ℙ";
    1491 var pound = "£";
    1492 var prap = "⪷";
    1493 var Pr = "⪻";
    1494 var pr = "≺";
    1495 var prcue = "≼";
    1496 var precapprox = "⪷";
    1497 var prec = "≺";
    1498 var preccurlyeq = "≼";
    1499 var Precedes = "≺";
    1500 var PrecedesEqual = "⪯";
    1501 var PrecedesSlantEqual = "≼";
    1502 var PrecedesTilde = "≾";
    1503 var preceq = "⪯";
    1504 var precnapprox = "⪹";
    1505 var precneqq = "⪵";
    1506 var precnsim = "⋨";
    1507 var pre = "⪯";
    1508 var prE = "⪳";
    1509 var precsim = "≾";
    1510 var prime = "′";
    1511 var Prime = "″";
    1512 var primes = "ℙ";
    1513 var prnap = "⪹";
    1514 var prnE = "⪵";
    1515 var prnsim = "⋨";
    1516 var prod = "∏";
    1517 var Product = "∏";
    1518 var profalar = "⌮";
    1519 var profline = "⌒";
    1520 var profsurf = "⌓";
    1521 var prop = "∝";
    1522 var Proportional = "∝";
    1523 var Proportion = "∷";
    1524 var propto = "∝";
    1525 var prsim = "≾";
    1526 var prurel = "⊰";
    1527 var Pscr = "𝒫";
    1528 var pscr = "𝓅";
    1529 var Psi = "Ψ";
    1530 var psi = "ψ";
    1531 var puncsp = " ";
    1532 var Qfr = "𝔔";
    1533 var qfr = "𝔮";
    1534 var qint = "⨌";
    1535 var qopf = "𝕢";
    1536 var Qopf = "ℚ";
    1537 var qprime = "⁗";
    1538 var Qscr = "𝒬";
    1539 var qscr = "𝓆";
    1540 var quaternions = "ℍ";
    1541 var quatint = "⨖";
    1542 var quest = "?";
    1543 var questeq = "≟";
    1544 var quot = "\"";
    1545 var QUOT = "\"";
    1546 var rAarr = "⇛";
    1547 var race = "∽̱";
    1548 var Racute = "Ŕ";
    1549 var racute = "ŕ";
    1550 var radic = "√";
    1551 var raemptyv = "⦳";
    1552 var rang = "⟩";
    1553 var Rang = "⟫";
    1554 var rangd = "⦒";
    1555 var range = "⦥";
    1556 var rangle = "⟩";
    1557 var raquo = "»";
    1558 var rarrap = "⥵";
    1559 var rarrb = "⇥";
    1560 var rarrbfs = "⤠";
    1561 var rarrc = "⤳";
    1562 var rarr = "→";
    1563 var Rarr = "↠";
    1564 var rArr = "⇒";
    1565 var rarrfs = "⤞";
    1566 var rarrhk = "↪";
    1567 var rarrlp = "↬";
    1568 var rarrpl = "⥅";
    1569 var rarrsim = "⥴";
    1570 var Rarrtl = "⤖";
    1571 var rarrtl = "↣";
    1572 var rarrw = "↝";
    1573 var ratail = "⤚";
    1574 var rAtail = "⤜";
    1575 var ratio = "∶";
    1576 var rationals = "ℚ";
    1577 var rbarr = "⤍";
    1578 var rBarr = "⤏";
    1579 var RBarr = "⤐";
    1580 var rbbrk = "❳";
    1581 var rbrace = "}";
    1582 var rbrack = "]";
    1583 var rbrke = "⦌";
    1584 var rbrksld = "⦎";
    1585 var rbrkslu = "⦐";
    1586 var Rcaron = "Ř";
    1587 var rcaron = "ř";
    1588 var Rcedil = "Ŗ";
    1589 var rcedil = "ŗ";
    1590 var rceil = "⌉";
    1591 var rcub = "}";
    1592 var Rcy = "Р";
    1593 var rcy = "р";
    1594 var rdca = "⤷";
    1595 var rdldhar = "⥩";
    1596 var rdquo = "”";
    1597 var rdquor = "”";
    1598 var rdsh = "↳";
    1599 var real = "ℜ";
    1600 var realine = "ℛ";
    1601 var realpart = "ℜ";
    1602 var reals = "ℝ";
    1603 var Re = "ℜ";
    1604 var rect = "▭";
    1605 var reg = "®";
    1606 var REG = "®";
    1607 var ReverseElement = "∋";
    1608 var ReverseEquilibrium = "⇋";
    1609 var ReverseUpEquilibrium = "⥯";
    1610 var rfisht = "⥽";
    1611 var rfloor = "⌋";
    1612 var rfr = "𝔯";
    1613 var Rfr = "ℜ";
    1614 var rHar = "⥤";
    1615 var rhard = "⇁";
    1616 var rharu = "⇀";
    1617 var rharul = "⥬";
    1618 var Rho = "Ρ";
    1619 var rho = "ρ";
    1620 var rhov = "ϱ";
    1621 var RightAngleBracket = "⟩";
    1622 var RightArrowBar = "⇥";
    1623 var rightarrow = "→";
    1624 var RightArrow = "→";
    1625 var Rightarrow = "⇒";
    1626 var RightArrowLeftArrow = "⇄";
    1627 var rightarrowtail = "↣";
    1628 var RightCeiling = "⌉";
    1629 var RightDoubleBracket = "⟧";
    1630 var RightDownTeeVector = "⥝";
    1631 var RightDownVectorBar = "⥕";
    1632 var RightDownVector = "⇂";
    1633 var RightFloor = "⌋";
    1634 var rightharpoondown = "⇁";
    1635 var rightharpoonup = "⇀";
    1636 var rightleftarrows = "⇄";
    1637 var rightleftharpoons = "⇌";
    1638 var rightrightarrows = "⇉";
    1639 var rightsquigarrow = "↝";
    1640 var RightTeeArrow = "↦";
    1641 var RightTee = "⊢";
    1642 var RightTeeVector = "⥛";
    1643 var rightthreetimes = "⋌";
    1644 var RightTriangleBar = "⧐";
    1645 var RightTriangle = "⊳";
    1646 var RightTriangleEqual = "⊵";
    1647 var RightUpDownVector = "⥏";
    1648 var RightUpTeeVector = "⥜";
    1649 var RightUpVectorBar = "⥔";
    1650 var RightUpVector = "↾";
    1651 var RightVectorBar = "⥓";
    1652 var RightVector = "⇀";
    1653 var ring = "˚";
    1654 var risingdotseq = "≓";
    1655 var rlarr = "⇄";
    1656 var rlhar = "⇌";
    1657 var rlm = "‏";
    1658 var rmoustache = "⎱";
    1659 var rmoust = "⎱";
    1660 var rnmid = "⫮";
    1661 var roang = "⟭";
    1662 var roarr = "⇾";
    1663 var robrk = "⟧";
    1664 var ropar = "⦆";
    1665 var ropf = "𝕣";
    1666 var Ropf = "ℝ";
    1667 var roplus = "⨮";
    1668 var rotimes = "⨵";
    1669 var RoundImplies = "⥰";
    1670 var rpar = ")";
    1671 var rpargt = "⦔";
    1672 var rppolint = "⨒";
    1673 var rrarr = "⇉";
    1674 var Rrightarrow = "⇛";
    1675 var rsaquo = "›";
    1676 var rscr = "𝓇";
    1677 var Rscr = "ℛ";
    1678 var rsh = "↱";
    1679 var Rsh = "↱";
    1680 var rsqb = "]";
    1681 var rsquo = "’";
    1682 var rsquor = "’";
    1683 var rthree = "⋌";
    1684 var rtimes = "⋊";
    1685 var rtri = "▹";
    1686 var rtrie = "⊵";
    1687 var rtrif = "▸";
    1688 var rtriltri = "⧎";
    1689 var RuleDelayed = "⧴";
    1690 var ruluhar = "⥨";
    1691 var rx = "℞";
    1692 var Sacute = "Ś";
    1693 var sacute = "ś";
    1694 var sbquo = "‚";
    1695 var scap = "⪸";
    1696 var Scaron = "Š";
    1697 var scaron = "š";
    1698 var Sc = "⪼";
    1699 var sc = "≻";
    1700 var sccue = "≽";
    1701 var sce = "⪰";
    1702 var scE = "⪴";
    1703 var Scedil = "Ş";
    1704 var scedil = "ş";
    1705 var Scirc = "Ŝ";
    1706 var scirc = "ŝ";
    1707 var scnap = "⪺";
    1708 var scnE = "⪶";
    1709 var scnsim = "⋩";
    1710 var scpolint = "⨓";
    1711 var scsim = "≿";
    1712 var Scy = "С";
    1713 var scy = "с";
    1714 var sdotb = "⊡";
    1715 var sdot = "⋅";
    1716 var sdote = "⩦";
    1717 var searhk = "⤥";
    1718 var searr = "↘";
    1719 var seArr = "⇘";
    1720 var searrow = "↘";
    1721 var sect = "§";
    1722 var semi = ";";
    1723 var seswar = "⤩";
    1724 var setminus = "∖";
    1725 var setmn = "∖";
    1726 var sext = "✶";
    1727 var Sfr = "𝔖";
    1728 var sfr = "𝔰";
    1729 var sfrown = "⌢";
    1730 var sharp = "♯";
    1731 var SHCHcy = "Щ";
    1732 var shchcy = "щ";
    1733 var SHcy = "Ш";
    1734 var shcy = "ш";
    1735 var ShortDownArrow = "↓";
    1736 var ShortLeftArrow = "←";
    1737 var shortmid = "∣";
    1738 var shortparallel = "∥";
    1739 var ShortRightArrow = "→";
    1740 var ShortUpArrow = "↑";
    1741 var shy = "­";
    1742 var Sigma = "Σ";
    1743 var sigma = "σ";
    1744 var sigmaf = "ς";
    1745 var sigmav = "ς";
    1746 var sim = "∼";
    1747 var simdot = "⩪";
    1748 var sime = "≃";
    1749 var simeq = "≃";
    1750 var simg = "⪞";
    1751 var simgE = "⪠";
    1752 var siml = "⪝";
    1753 var simlE = "⪟";
    1754 var simne = "≆";
    1755 var simplus = "⨤";
    1756 var simrarr = "⥲";
    1757 var slarr = "←";
    1758 var SmallCircle = "∘";
    1759 var smallsetminus = "∖";
    1760 var smashp = "⨳";
    1761 var smeparsl = "⧤";
    1762 var smid = "∣";
    1763 var smile = "⌣";
    1764 var smt = "⪪";
    1765 var smte = "⪬";
    1766 var smtes = "⪬︀";
    1767 var SOFTcy = "Ь";
    1768 var softcy = "ь";
    1769 var solbar = "⌿";
    1770 var solb = "⧄";
    1771 var sol = "/";
    1772 var Sopf = "𝕊";
    1773 var sopf = "𝕤";
    1774 var spades = "♠";
    1775 var spadesuit = "♠";
    1776 var spar = "∥";
    1777 var sqcap = "⊓";
    1778 var sqcaps = "⊓︀";
    1779 var sqcup = "⊔";
    1780 var sqcups = "⊔︀";
    1781 var Sqrt = "√";
    1782 var sqsub = "⊏";
    1783 var sqsube = "⊑";
    1784 var sqsubset = "⊏";
    1785 var sqsubseteq = "⊑";
    1786 var sqsup = "⊐";
    1787 var sqsupe = "⊒";
    1788 var sqsupset = "⊐";
    1789 var sqsupseteq = "⊒";
    1790 var square = "□";
    1791 var Square = "□";
    1792 var SquareIntersection = "⊓";
    1793 var SquareSubset = "⊏";
    1794 var SquareSubsetEqual = "⊑";
    1795 var SquareSuperset = "⊐";
    1796 var SquareSupersetEqual = "⊒";
    1797 var SquareUnion = "⊔";
    1798 var squarf = "▪";
    1799 var squ = "□";
    1800 var squf = "▪";
    1801 var srarr = "→";
    1802 var Sscr = "𝒮";
    1803 var sscr = "𝓈";
    1804 var ssetmn = "∖";
    1805 var ssmile = "⌣";
    1806 var sstarf = "⋆";
    1807 var Star = "⋆";
    1808 var star = "☆";
    1809 var starf = "★";
    1810 var straightepsilon = "ϵ";
    1811 var straightphi = "ϕ";
    1812 var strns = "¯";
    1813 var sub = "⊂";
    1814 var Sub = "⋐";
    1815 var subdot = "⪽";
    1816 var subE = "⫅";
    1817 var sube = "⊆";
    1818 var subedot = "⫃";
    1819 var submult = "⫁";
    1820 var subnE = "⫋";
    1821 var subne = "⊊";
    1822 var subplus = "⪿";
    1823 var subrarr = "⥹";
    1824 var subset = "⊂";
    1825 var Subset = "⋐";
    1826 var subseteq = "⊆";
    1827 var subseteqq = "⫅";
    1828 var SubsetEqual = "⊆";
    1829 var subsetneq = "⊊";
    1830 var subsetneqq = "⫋";
    1831 var subsim = "⫇";
    1832 var subsub = "⫕";
    1833 var subsup = "⫓";
    1834 var succapprox = "⪸";
    1835 var succ = "≻";
    1836 var succcurlyeq = "≽";
    1837 var Succeeds = "≻";
    1838 var SucceedsEqual = "⪰";
    1839 var SucceedsSlantEqual = "≽";
    1840 var SucceedsTilde = "≿";
    1841 var succeq = "⪰";
    1842 var succnapprox = "⪺";
    1843 var succneqq = "⪶";
    1844 var succnsim = "⋩";
    1845 var succsim = "≿";
    1846 var SuchThat = "∋";
    1847 var sum = "∑";
    1848 var Sum = "∑";
    1849 var sung = "♪";
    1850 var sup1 = "¹";
    1851 var sup2 = "²";
    1852 var sup3 = "³";
    1853 var sup = "⊃";
    1854 var Sup = "⋑";
    1855 var supdot = "⪾";
    1856 var supdsub = "⫘";
    1857 var supE = "⫆";
    1858 var supe = "⊇";
    1859 var supedot = "⫄";
    1860 var Superset = "⊃";
    1861 var SupersetEqual = "⊇";
    1862 var suphsol = "⟉";
    1863 var suphsub = "⫗";
    1864 var suplarr = "⥻";
    1865 var supmult = "⫂";
    1866 var supnE = "⫌";
    1867 var supne = "⊋";
    1868 var supplus = "⫀";
    1869 var supset = "⊃";
    1870 var Supset = "⋑";
    1871 var supseteq = "⊇";
    1872 var supseteqq = "⫆";
    1873 var supsetneq = "⊋";
    1874 var supsetneqq = "⫌";
    1875 var supsim = "⫈";
    1876 var supsub = "⫔";
    1877 var supsup = "⫖";
    1878 var swarhk = "⤦";
    1879 var swarr = "↙";
    1880 var swArr = "⇙";
    1881 var swarrow = "↙";
    1882 var swnwar = "⤪";
    1883 var szlig = "ß";
    1884 var Tab = "\t";
    1885 var target = "⌖";
    1886 var Tau = "Τ";
    1887 var tau = "τ";
    1888 var tbrk = "⎴";
    1889 var Tcaron = "Ť";
    1890 var tcaron = "ť";
    1891 var Tcedil = "Ţ";
    1892 var tcedil = "ţ";
    1893 var Tcy = "Т";
    1894 var tcy = "т";
    1895 var tdot = "⃛";
    1896 var telrec = "⌕";
    1897 var Tfr = "𝔗";
    1898 var tfr = "𝔱";
    1899 var there4 = "∴";
    1900 var therefore = "∴";
    1901 var Therefore = "∴";
    1902 var Theta = "Θ";
    1903 var theta = "θ";
    1904 var thetasym = "ϑ";
    1905 var thetav = "ϑ";
    1906 var thickapprox = "≈";
    1907 var thicksim = "∼";
    1908 var ThickSpace = "  ";
    1909 var ThinSpace = " ";
    1910 var thinsp = " ";
    1911 var thkap = "≈";
    1912 var thksim = "∼";
    1913 var THORN = "Þ";
    1914 var thorn = "þ";
    1915 var tilde = "˜";
    1916 var Tilde = "∼";
    1917 var TildeEqual = "≃";
    1918 var TildeFullEqual = "≅";
    1919 var TildeTilde = "≈";
    1920 var timesbar = "⨱";
    1921 var timesb = "⊠";
    1922 var times = "×";
    1923 var timesd = "⨰";
    1924 var tint = "∭";
    1925 var toea = "⤨";
    1926 var topbot = "⌶";
    1927 var topcir = "⫱";
    1928 var top = "⊤";
    1929 var Topf = "𝕋";
    1930 var topf = "𝕥";
    1931 var topfork = "⫚";
    1932 var tosa = "⤩";
    1933 var tprime = "‴";
    1934 var trade = "™";
    1935 var TRADE = "™";
    1936 var triangle = "▵";
    1937 var triangledown = "▿";
    1938 var triangleleft = "◃";
    1939 var trianglelefteq = "⊴";
    1940 var triangleq = "≜";
    1941 var triangleright = "▹";
    1942 var trianglerighteq = "⊵";
    1943 var tridot = "◬";
    1944 var trie = "≜";
    1945 var triminus = "⨺";
    1946 var TripleDot = "⃛";
    1947 var triplus = "⨹";
    1948 var trisb = "⧍";
    1949 var tritime = "⨻";
    1950 var trpezium = "⏢";
    1951 var Tscr = "𝒯";
    1952 var tscr = "𝓉";
    1953 var TScy = "Ц";
    1954 var tscy = "ц";
    1955 var TSHcy = "Ћ";
    1956 var tshcy = "ћ";
    1957 var Tstrok = "Ŧ";
    1958 var tstrok = "ŧ";
    1959 var twixt = "≬";
    1960 var twoheadleftarrow = "↞";
    1961 var twoheadrightarrow = "↠";
    1962 var Uacute = "Ú";
    1963 var uacute = "ú";
    1964 var uarr = "↑";
    1965 var Uarr = "↟";
    1966 var uArr = "⇑";
    1967 var Uarrocir = "⥉";
    1968 var Ubrcy = "Ў";
    1969 var ubrcy = "ў";
    1970 var Ubreve = "Ŭ";
    1971 var ubreve = "ŭ";
    1972 var Ucirc = "Û";
    1973 var ucirc = "û";
    1974 var Ucy = "У";
    1975 var ucy = "у";
    1976 var udarr = "⇅";
    1977 var Udblac = "Ű";
    1978 var udblac = "ű";
    1979 var udhar = "⥮";
    1980 var ufisht = "⥾";
    1981 var Ufr = "𝔘";
    1982 var ufr = "𝔲";
    1983 var Ugrave = "Ù";
    1984 var ugrave = "ù";
    1985 var uHar = "⥣";
    1986 var uharl = "↿";
    1987 var uharr = "↾";
    1988 var uhblk = "▀";
    1989 var ulcorn = "⌜";
    1990 var ulcorner = "⌜";
    1991 var ulcrop = "⌏";
    1992 var ultri = "◸";
    1993 var Umacr = "Ū";
    1994 var umacr = "ū";
    1995 var uml = "¨";
    1996 var UnderBar = "_";
    1997 var UnderBrace = "⏟";
    1998 var UnderBracket = "⎵";
    1999 var UnderParenthesis = "⏝";
    2000 var Union = "⋃";
    2001 var UnionPlus = "⊎";
    2002 var Uogon = "Ų";
    2003 var uogon = "ų";
    2004 var Uopf = "𝕌";
    2005 var uopf = "𝕦";
    2006 var UpArrowBar = "⤒";
    2007 var uparrow = "↑";
    2008 var UpArrow = "↑";
    2009 var Uparrow = "⇑";
    2010 var UpArrowDownArrow = "⇅";
    2011 var updownarrow = "↕";
    2012 var UpDownArrow = "↕";
    2013 var Updownarrow = "⇕";
    2014 var UpEquilibrium = "⥮";
    2015 var upharpoonleft = "↿";
    2016 var upharpoonright = "↾";
    2017 var uplus = "⊎";
    2018 var UpperLeftArrow = "↖";
    2019 var UpperRightArrow = "↗";
    2020 var upsi = "υ";
    2021 var Upsi = "ϒ";
    2022 var upsih = "ϒ";
    2023 var Upsilon = "Υ";
    2024 var upsilon = "υ";
    2025 var UpTeeArrow = "↥";
    2026 var UpTee = "⊥";
    2027 var upuparrows = "⇈";
    2028 var urcorn = "⌝";
    2029 var urcorner = "⌝";
    2030 var urcrop = "⌎";
    2031 var Uring = "Ů";
    2032 var uring = "ů";
    2033 var urtri = "◹";
    2034 var Uscr = "𝒰";
    2035 var uscr = "𝓊";
    2036 var utdot = "⋰";
    2037 var Utilde = "Ũ";
    2038 var utilde = "ũ";
    2039 var utri = "▵";
    2040 var utrif = "▴";
    2041 var uuarr = "⇈";
    2042 var Uuml = "Ü";
    2043 var uuml = "ü";
    2044 var uwangle = "⦧";
    2045 var vangrt = "⦜";
    2046 var varepsilon = "ϵ";
    2047 var varkappa = "ϰ";
    2048 var varnothing = "∅";
    2049 var varphi = "ϕ";
    2050 var varpi = "ϖ";
    2051 var varpropto = "∝";
    2052 var varr = "↕";
    2053 var vArr = "⇕";
    2054 var varrho = "ϱ";
    2055 var varsigma = "ς";
    2056 var varsubsetneq = "⊊︀";
    2057 var varsubsetneqq = "⫋︀";
    2058 var varsupsetneq = "⊋︀";
    2059 var varsupsetneqq = "⫌︀";
    2060 var vartheta = "ϑ";
    2061 var vartriangleleft = "⊲";
    2062 var vartriangleright = "⊳";
    2063 var vBar = "⫨";
    2064 var Vbar = "⫫";
    2065 var vBarv = "⫩";
    2066 var Vcy = "В";
    2067 var vcy = "в";
    2068 var vdash = "⊢";
    2069 var vDash = "⊨";
    2070 var Vdash = "⊩";
    2071 var VDash = "⊫";
    2072 var Vdashl = "⫦";
    2073 var veebar = "⊻";
    2074 var vee = "∨";
    2075 var Vee = "⋁";
    2076 var veeeq = "≚";
    2077 var vellip = "⋮";
    2078 var verbar = "|";
    2079 var Verbar = "‖";
    2080 var vert = "|";
    2081 var Vert = "‖";
    2082 var VerticalBar = "∣";
    2083 var VerticalLine = "|";
    2084 var VerticalSeparator = "❘";
    2085 var VerticalTilde = "≀";
    2086 var VeryThinSpace = " ";
    2087 var Vfr = "𝔙";
    2088 var vfr = "𝔳";
    2089 var vltri = "⊲";
    2090 var vnsub = "⊂⃒";
    2091 var vnsup = "⊃⃒";
    2092 var Vopf = "𝕍";
    2093 var vopf = "𝕧";
    2094 var vprop = "∝";
    2095 var vrtri = "⊳";
    2096 var Vscr = "𝒱";
    2097 var vscr = "𝓋";
    2098 var vsubnE = "⫋︀";
    2099 var vsubne = "⊊︀";
    2100 var vsupnE = "⫌︀";
    2101 var vsupne = "⊋︀";
    2102 var Vvdash = "⊪";
    2103 var vzigzag = "⦚";
    2104 var Wcirc = "Ŵ";
    2105 var wcirc = "ŵ";
    2106 var wedbar = "⩟";
    2107 var wedge = "∧";
    2108 var Wedge = "⋀";
    2109 var wedgeq = "≙";
    2110 var weierp = "℘";
    2111 var Wfr = "𝔚";
    2112 var wfr = "𝔴";
    2113 var Wopf = "𝕎";
    2114 var wopf = "𝕨";
    2115 var wp = "℘";
    2116 var wr = "≀";
    2117 var wreath = "≀";
    2118 var Wscr = "𝒲";
    2119 var wscr = "𝓌";
    2120 var xcap = "⋂";
    2121 var xcirc = "◯";
    2122 var xcup = "⋃";
    2123 var xdtri = "▽";
    2124 var Xfr = "𝔛";
    2125 var xfr = "𝔵";
    2126 var xharr = "⟷";
    2127 var xhArr = "⟺";
    2128 var Xi = "Ξ";
    2129 var xi = "ξ";
    2130 var xlarr = "⟵";
    2131 var xlArr = "⟸";
    2132 var xmap = "⟼";
    2133 var xnis = "⋻";
    2134 var xodot = "⨀";
    2135 var Xopf = "𝕏";
    2136 var xopf = "𝕩";
    2137 var xoplus = "⨁";
    2138 var xotime = "⨂";
    2139 var xrarr = "⟶";
    2140 var xrArr = "⟹";
    2141 var Xscr = "𝒳";
    2142 var xscr = "𝓍";
    2143 var xsqcup = "⨆";
    2144 var xuplus = "⨄";
    2145 var xutri = "△";
    2146 var xvee = "⋁";
    2147 var xwedge = "⋀";
    2148 var Yacute = "Ý";
    2149 var yacute = "ý";
    2150 var YAcy = "Я";
    2151 var yacy = "я";
    2152 var Ycirc = "Ŷ";
    2153 var ycirc = "ŷ";
    2154 var Ycy = "Ы";
    2155 var ycy = "ы";
    2156 var yen = "¥";
    2157 var Yfr = "𝔜";
    2158 var yfr = "𝔶";
    2159 var YIcy = "Ї";
    2160 var yicy = "ї";
    2161 var Yopf = "𝕐";
    2162 var yopf = "𝕪";
    2163 var Yscr = "𝒴";
    2164 var yscr = "𝓎";
    2165 var YUcy = "Ю";
    2166 var yucy = "ю";
    2167 var yuml = "ÿ";
    2168 var Yuml = "Ÿ";
    2169 var Zacute = "Ź";
    2170 var zacute = "ź";
    2171 var Zcaron = "Ž";
    2172 var zcaron = "ž";
    2173 var Zcy = "З";
    2174 var zcy = "з";
    2175 var Zdot = "Ż";
    2176 var zdot = "ż";
    2177 var zeetrf = "ℨ";
    2178 var ZeroWidthSpace = "​";
    2179 var Zeta = "Ζ";
    2180 var zeta = "ζ";
    2181 var zfr = "𝔷";
    2182 var Zfr = "ℨ";
    2183 var ZHcy = "Ж";
    2184 var zhcy = "ж";
    2185 var zigrarr = "⇝";
    2186 var zopf = "𝕫";
    2187 var Zopf = "ℤ";
    2188 var Zscr = "𝒵";
    2189 var zscr = "𝓏";
    2190 var zwj = "‍";
    2191 var zwnj = "‌";
    2192 var entities = {
    2193         Aacute: Aacute,
    2194         aacute: aacute,
    2195         Abreve: Abreve,
    2196         abreve: abreve,
    2197         ac: ac,
    2198         acd: acd,
    2199         acE: acE,
    2200         Acirc: Acirc,
    2201         acirc: acirc,
    2202         acute: acute,
    2203         Acy: Acy,
    2204         acy: acy,
    2205         AElig: AElig,
    2206         aelig: aelig,
    2207         af: af,
    2208         Afr: Afr,
    2209         afr: afr,
    2210         Agrave: Agrave,
    2211         agrave: agrave,
    2212         alefsym: alefsym,
    2213         aleph: aleph,
    2214         Alpha: Alpha,
    2215         alpha: alpha,
    2216         Amacr: Amacr,
    2217         amacr: amacr,
    2218         amalg: amalg,
    2219         amp: amp,
    2220         AMP: AMP,
    2221         andand: andand,
    2222         And: And,
    2223         and: and,
    2224         andd: andd,
    2225         andslope: andslope,
    2226         andv: andv,
    2227         ang: ang,
    2228         ange: ange,
    2229         angle: angle,
    2230         angmsdaa: angmsdaa,
    2231         angmsdab: angmsdab,
    2232         angmsdac: angmsdac,
    2233         angmsdad: angmsdad,
    2234         angmsdae: angmsdae,
    2235         angmsdaf: angmsdaf,
    2236         angmsdag: angmsdag,
    2237         angmsdah: angmsdah,
    2238         angmsd: angmsd,
    2239         angrt: angrt,
    2240         angrtvb: angrtvb,
    2241         angrtvbd: angrtvbd,
    2242         angsph: angsph,
    2243         angst: angst,
    2244         angzarr: angzarr,
    2245         Aogon: Aogon,
    2246         aogon: aogon,
    2247         Aopf: Aopf,
    2248         aopf: aopf,
    2249         apacir: apacir,
    2250         ap: ap,
    2251         apE: apE,
    2252         ape: ape,
    2253         apid: apid,
    2254         apos: apos,
    2255         ApplyFunction: ApplyFunction,
    2256         approx: approx,
    2257         approxeq: approxeq,
    2258         Aring: Aring,
    2259         aring: aring,
    2260         Ascr: Ascr,
    2261         ascr: ascr,
    2262         Assign: Assign,
    2263         ast: ast,
    2264         asymp: asymp,
    2265         asympeq: asympeq,
    2266         Atilde: Atilde,
    2267         atilde: atilde,
    2268         Auml: Auml,
    2269         auml: auml,
    2270         awconint: awconint,
    2271         awint: awint,
    2272         backcong: backcong,
    2273         backepsilon: backepsilon,
    2274         backprime: backprime,
    2275         backsim: backsim,
    2276         backsimeq: backsimeq,
    2277         Backslash: Backslash,
    2278         Barv: Barv,
    2279         barvee: barvee,
    2280         barwed: barwed,
    2281         Barwed: Barwed,
    2282         barwedge: barwedge,
    2283         bbrk: bbrk,
    2284         bbrktbrk: bbrktbrk,
    2285         bcong: bcong,
    2286         Bcy: Bcy,
    2287         bcy: bcy,
    2288         bdquo: bdquo,
    2289         becaus: becaus,
    2290         because: because,
    2291         Because: Because,
    2292         bemptyv: bemptyv,
    2293         bepsi: bepsi,
    2294         bernou: bernou,
    2295         Bernoullis: Bernoullis,
    2296         Beta: Beta,
    2297         beta: beta,
    2298         beth: beth,
    2299         between: between,
    2300         Bfr: Bfr,
    2301         bfr: bfr,
    2302         bigcap: bigcap,
    2303         bigcirc: bigcirc,
    2304         bigcup: bigcup,
    2305         bigodot: bigodot,
    2306         bigoplus: bigoplus,
    2307         bigotimes: bigotimes,
    2308         bigsqcup: bigsqcup,
    2309         bigstar: bigstar,
    2310         bigtriangledown: bigtriangledown,
    2311         bigtriangleup: bigtriangleup,
    2312         biguplus: biguplus,
    2313         bigvee: bigvee,
    2314         bigwedge: bigwedge,
    2315         bkarow: bkarow,
    2316         blacklozenge: blacklozenge,
    2317         blacksquare: blacksquare,
    2318         blacktriangle: blacktriangle,
    2319         blacktriangledown: blacktriangledown,
    2320         blacktriangleleft: blacktriangleleft,
    2321         blacktriangleright: blacktriangleright,
    2322         blank: blank,
    2323         blk12: blk12,
    2324         blk14: blk14,
    2325         blk34: blk34,
    2326         block: block,
    2327         bne: bne,
    2328         bnequiv: bnequiv,
    2329         bNot: bNot,
    2330         bnot: bnot,
    2331         Bopf: Bopf,
    2332         bopf: bopf,
    2333         bot: bot,
    2334         bottom: bottom,
    2335         bowtie: bowtie,
    2336         boxbox: boxbox,
    2337         boxdl: boxdl,
    2338         boxdL: boxdL,
    2339         boxDl: boxDl,
    2340         boxDL: boxDL,
    2341         boxdr: boxdr,
    2342         boxdR: boxdR,
    2343         boxDr: boxDr,
    2344         boxDR: boxDR,
    2345         boxh: boxh,
    2346         boxH: boxH,
    2347         boxhd: boxhd,
    2348         boxHd: boxHd,
    2349         boxhD: boxhD,
    2350         boxHD: boxHD,
    2351         boxhu: boxhu,
    2352         boxHu: boxHu,
    2353         boxhU: boxhU,
    2354         boxHU: boxHU,
    2355         boxminus: boxminus,
    2356         boxplus: boxplus,
    2357         boxtimes: boxtimes,
    2358         boxul: boxul,
    2359         boxuL: boxuL,
    2360         boxUl: boxUl,
    2361         boxUL: boxUL,
    2362         boxur: boxur,
    2363         boxuR: boxuR,
    2364         boxUr: boxUr,
    2365         boxUR: boxUR,
    2366         boxv: boxv,
    2367         boxV: boxV,
    2368         boxvh: boxvh,
    2369         boxvH: boxvH,
    2370         boxVh: boxVh,
    2371         boxVH: boxVH,
    2372         boxvl: boxvl,
    2373         boxvL: boxvL,
    2374         boxVl: boxVl,
    2375         boxVL: boxVL,
    2376         boxvr: boxvr,
    2377         boxvR: boxvR,
    2378         boxVr: boxVr,
    2379         boxVR: boxVR,
    2380         bprime: bprime,
    2381         breve: breve,
    2382         Breve: Breve,
    2383         brvbar: brvbar,
    2384         bscr: bscr,
    2385         Bscr: Bscr,
    2386         bsemi: bsemi,
    2387         bsim: bsim,
    2388         bsime: bsime,
    2389         bsolb: bsolb,
    2390         bsol: bsol,
    2391         bsolhsub: bsolhsub,
    2392         bull: bull,
    2393         bullet: bullet,
    2394         bump: bump,
    2395         bumpE: bumpE,
    2396         bumpe: bumpe,
    2397         Bumpeq: Bumpeq,
    2398         bumpeq: bumpeq,
    2399         Cacute: Cacute,
    2400         cacute: cacute,
    2401         capand: capand,
    2402         capbrcup: capbrcup,
    2403         capcap: capcap,
    2404         cap: cap,
    2405         Cap: Cap,
    2406         capcup: capcup,
    2407         capdot: capdot,
    2408         CapitalDifferentialD: CapitalDifferentialD,
    2409         caps: caps,
    2410         caret: caret,
    2411         caron: caron,
    2412         Cayleys: Cayleys,
    2413         ccaps: ccaps,
    2414         Ccaron: Ccaron,
    2415         ccaron: ccaron,
    2416         Ccedil: Ccedil,
    2417         ccedil: ccedil,
    2418         Ccirc: Ccirc,
    2419         ccirc: ccirc,
    2420         Cconint: Cconint,
    2421         ccups: ccups,
    2422         ccupssm: ccupssm,
    2423         Cdot: Cdot,
    2424         cdot: cdot,
    2425         cedil: cedil,
    2426         Cedilla: Cedilla,
    2427         cemptyv: cemptyv,
    2428         cent: cent,
    2429         centerdot: centerdot,
    2430         CenterDot: CenterDot,
    2431         cfr: cfr,
    2432         Cfr: Cfr,
    2433         CHcy: CHcy,
    2434         chcy: chcy,
    2435         check: check,
    2436         checkmark: checkmark,
    2437         Chi: Chi,
    2438         chi: chi,
    2439         circ: circ,
    2440         circeq: circeq,
    2441         circlearrowleft: circlearrowleft,
    2442         circlearrowright: circlearrowright,
    2443         circledast: circledast,
    2444         circledcirc: circledcirc,
    2445         circleddash: circleddash,
    2446         CircleDot: CircleDot,
    2447         circledR: circledR,
    2448         circledS: circledS,
    2449         CircleMinus: CircleMinus,
    2450         CirclePlus: CirclePlus,
    2451         CircleTimes: CircleTimes,
    2452         cir: cir,
    2453         cirE: cirE,
    2454         cire: cire,
    2455         cirfnint: cirfnint,
    2456         cirmid: cirmid,
    2457         cirscir: cirscir,
    2458         ClockwiseContourIntegral: ClockwiseContourIntegral,
    2459         CloseCurlyDoubleQuote: CloseCurlyDoubleQuote,
    2460         CloseCurlyQuote: CloseCurlyQuote,
    2461         clubs: clubs,
    2462         clubsuit: clubsuit,
    2463         colon: colon,
    2464         Colon: Colon,
    2465         Colone: Colone,
    2466         colone: colone,
    2467         coloneq: coloneq,
    2468         comma: comma,
    2469         commat: commat,
    2470         comp: comp,
    2471         compfn: compfn,
    2472         complement: complement,
    2473         complexes: complexes,
    2474         cong: cong,
    2475         congdot: congdot,
    2476         Congruent: Congruent,
    2477         conint: conint,
    2478         Conint: Conint,
    2479         ContourIntegral: ContourIntegral,
    2480         copf: copf,
    2481         Copf: Copf,
    2482         coprod: coprod,
    2483         Coproduct: Coproduct,
    2484         copy: copy,
    2485         COPY: COPY,
    2486         copysr: copysr,
    2487         CounterClockwiseContourIntegral: CounterClockwiseContourIntegral,
    2488         crarr: crarr,
    2489         cross: cross,
    2490         Cross: Cross,
    2491         Cscr: Cscr,
    2492         cscr: cscr,
    2493         csub: csub,
    2494         csube: csube,
    2495         csup: csup,
    2496         csupe: csupe,
    2497         ctdot: ctdot,
    2498         cudarrl: cudarrl,
    2499         cudarrr: cudarrr,
    2500         cuepr: cuepr,
    2501         cuesc: cuesc,
    2502         cularr: cularr,
    2503         cularrp: cularrp,
    2504         cupbrcap: cupbrcap,
    2505         cupcap: cupcap,
    2506         CupCap: CupCap,
    2507         cup: cup,
    2508         Cup: Cup,
    2509         cupcup: cupcup,
    2510         cupdot: cupdot,
    2511         cupor: cupor,
    2512         cups: cups,
    2513         curarr: curarr,
    2514         curarrm: curarrm,
    2515         curlyeqprec: curlyeqprec,
    2516         curlyeqsucc: curlyeqsucc,
    2517         curlyvee: curlyvee,
    2518         curlywedge: curlywedge,
    2519         curren: curren,
    2520         curvearrowleft: curvearrowleft,
    2521         curvearrowright: curvearrowright,
    2522         cuvee: cuvee,
    2523         cuwed: cuwed,
    2524         cwconint: cwconint,
    2525         cwint: cwint,
    2526         cylcty: cylcty,
    2527         dagger: dagger,
    2528         Dagger: Dagger,
    2529         daleth: daleth,
    2530         darr: darr,
    2531         Darr: Darr,
    2532         dArr: dArr,
    2533         dash: dash,
    2534         Dashv: Dashv,
    2535         dashv: dashv,
    2536         dbkarow: dbkarow,
    2537         dblac: dblac,
    2538         Dcaron: Dcaron,
    2539         dcaron: dcaron,
    2540         Dcy: Dcy,
    2541         dcy: dcy,
    2542         ddagger: ddagger,
    2543         ddarr: ddarr,
    2544         DD: DD,
    2545         dd: dd,
    2546         DDotrahd: DDotrahd,
    2547         ddotseq: ddotseq,
    2548         deg: deg,
    2549         Del: Del,
    2550         Delta: Delta,
    2551         delta: delta,
    2552         demptyv: demptyv,
    2553         dfisht: dfisht,
    2554         Dfr: Dfr,
    2555         dfr: dfr,
    2556         dHar: dHar,
    2557         dharl: dharl,
    2558         dharr: dharr,
    2559         DiacriticalAcute: DiacriticalAcute,
    2560         DiacriticalDot: DiacriticalDot,
    2561         DiacriticalDoubleAcute: DiacriticalDoubleAcute,
    2562         DiacriticalGrave: DiacriticalGrave,
    2563         DiacriticalTilde: DiacriticalTilde,
    2564         diam: diam,
    2565         diamond: diamond,
    2566         Diamond: Diamond,
    2567         diamondsuit: diamondsuit,
    2568         diams: diams,
    2569         die: die,
    2570         DifferentialD: DifferentialD,
    2571         digamma: digamma,
    2572         disin: disin,
    2573         div: div,
    2574         divide: divide,
    2575         divideontimes: divideontimes,
    2576         divonx: divonx,
    2577         DJcy: DJcy,
    2578         djcy: djcy,
    2579         dlcorn: dlcorn,
    2580         dlcrop: dlcrop,
    2581         dollar: dollar,
    2582         Dopf: Dopf,
    2583         dopf: dopf,
    2584         Dot: Dot,
    2585         dot: dot,
    2586         DotDot: DotDot,
    2587         doteq: doteq,
    2588         doteqdot: doteqdot,
    2589         DotEqual: DotEqual,
    2590         dotminus: dotminus,
    2591         dotplus: dotplus,
    2592         dotsquare: dotsquare,
    2593         doublebarwedge: doublebarwedge,
    2594         DoubleContourIntegral: DoubleContourIntegral,
    2595         DoubleDot: DoubleDot,
    2596         DoubleDownArrow: DoubleDownArrow,
    2597         DoubleLeftArrow: DoubleLeftArrow,
    2598         DoubleLeftRightArrow: DoubleLeftRightArrow,
    2599         DoubleLeftTee: DoubleLeftTee,
    2600         DoubleLongLeftArrow: DoubleLongLeftArrow,
    2601         DoubleLongLeftRightArrow: DoubleLongLeftRightArrow,
    2602         DoubleLongRightArrow: DoubleLongRightArrow,
    2603         DoubleRightArrow: DoubleRightArrow,
    2604         DoubleRightTee: DoubleRightTee,
    2605         DoubleUpArrow: DoubleUpArrow,
    2606         DoubleUpDownArrow: DoubleUpDownArrow,
    2607         DoubleVerticalBar: DoubleVerticalBar,
    2608         DownArrowBar: DownArrowBar,
    2609         downarrow: downarrow,
    2610         DownArrow: DownArrow,
    2611         Downarrow: Downarrow,
    2612         DownArrowUpArrow: DownArrowUpArrow,
    2613         DownBreve: DownBreve,
    2614         downdownarrows: downdownarrows,
    2615         downharpoonleft: downharpoonleft,
    2616         downharpoonright: downharpoonright,
    2617         DownLeftRightVector: DownLeftRightVector,
    2618         DownLeftTeeVector: DownLeftTeeVector,
    2619         DownLeftVectorBar: DownLeftVectorBar,
    2620         DownLeftVector: DownLeftVector,
    2621         DownRightTeeVector: DownRightTeeVector,
    2622         DownRightVectorBar: DownRightVectorBar,
    2623         DownRightVector: DownRightVector,
    2624         DownTeeArrow: DownTeeArrow,
    2625         DownTee: DownTee,
    2626         drbkarow: drbkarow,
    2627         drcorn: drcorn,
    2628         drcrop: drcrop,
    2629         Dscr: Dscr,
    2630         dscr: dscr,
    2631         DScy: DScy,
    2632         dscy: dscy,
    2633         dsol: dsol,
    2634         Dstrok: Dstrok,
    2635         dstrok: dstrok,
    2636         dtdot: dtdot,
    2637         dtri: dtri,
    2638         dtrif: dtrif,
    2639         duarr: duarr,
    2640         duhar: duhar,
    2641         dwangle: dwangle,
    2642         DZcy: DZcy,
    2643         dzcy: dzcy,
    2644         dzigrarr: dzigrarr,
    2645         Eacute: Eacute,
    2646         eacute: eacute,
    2647         easter: easter,
    2648         Ecaron: Ecaron,
    2649         ecaron: ecaron,
    2650         Ecirc: Ecirc,
    2651         ecirc: ecirc,
    2652         ecir: ecir,
    2653         ecolon: ecolon,
    2654         Ecy: Ecy,
    2655         ecy: ecy,
    2656         eDDot: eDDot,
    2657         Edot: Edot,
    2658         edot: edot,
    2659         eDot: eDot,
    2660         ee: ee,
    2661         efDot: efDot,
    2662         Efr: Efr,
    2663         efr: efr,
    2664         eg: eg,
    2665         Egrave: Egrave,
    2666         egrave: egrave,
    2667         egs: egs,
    2668         egsdot: egsdot,
    2669         el: el,
    2670         Element: Element,
    2671         elinters: elinters,
    2672         ell: ell,
    2673         els: els,
    2674         elsdot: elsdot,
    2675         Emacr: Emacr,
    2676         emacr: emacr,
    2677         empty: empty,
    2678         emptyset: emptyset,
    2679         EmptySmallSquare: EmptySmallSquare,
    2680         emptyv: emptyv,
    2681         EmptyVerySmallSquare: EmptyVerySmallSquare,
    2682         emsp13: emsp13,
    2683         emsp14: emsp14,
    2684         emsp: emsp,
    2685         ENG: ENG,
    2686         eng: eng,
    2687         ensp: ensp,
    2688         Eogon: Eogon,
    2689         eogon: eogon,
    2690         Eopf: Eopf,
    2691         eopf: eopf,
    2692         epar: epar,
    2693         eparsl: eparsl,
    2694         eplus: eplus,
    2695         epsi: epsi,
    2696         Epsilon: Epsilon,
    2697         epsilon: epsilon,
    2698         epsiv: epsiv,
    2699         eqcirc: eqcirc,
    2700         eqcolon: eqcolon,
    2701         eqsim: eqsim,
    2702         eqslantgtr: eqslantgtr,
    2703         eqslantless: eqslantless,
    2704         Equal: Equal,
    2705         equals: equals,
    2706         EqualTilde: EqualTilde,
    2707         equest: equest,
    2708         Equilibrium: Equilibrium,
    2709         equiv: equiv,
    2710         equivDD: equivDD,
    2711         eqvparsl: eqvparsl,
    2712         erarr: erarr,
    2713         erDot: erDot,
    2714         escr: escr,
    2715         Escr: Escr,
    2716         esdot: esdot,
    2717         Esim: Esim,
    2718         esim: esim,
    2719         Eta: Eta,
    2720         eta: eta,
    2721         ETH: ETH,
    2722         eth: eth,
    2723         Euml: Euml,
    2724         euml: euml,
    2725         euro: euro,
    2726         excl: excl,
    2727         exist: exist,
    2728         Exists: Exists,
    2729         expectation: expectation,
    2730         exponentiale: exponentiale,
    2731         ExponentialE: ExponentialE,
    2732         fallingdotseq: fallingdotseq,
    2733         Fcy: Fcy,
    2734         fcy: fcy,
    2735         female: female,
    2736         ffilig: ffilig,
    2737         fflig: fflig,
    2738         ffllig: ffllig,
    2739         Ffr: Ffr,
    2740         ffr: ffr,
    2741         filig: filig,
    2742         FilledSmallSquare: FilledSmallSquare,
    2743         FilledVerySmallSquare: FilledVerySmallSquare,
    2744         fjlig: fjlig,
    2745         flat: flat,
    2746         fllig: fllig,
    2747         fltns: fltns,
    2748         fnof: fnof,
    2749         Fopf: Fopf,
    2750         fopf: fopf,
    2751         forall: forall,
    2752         ForAll: ForAll,
    2753         fork: fork,
    2754         forkv: forkv,
    2755         Fouriertrf: Fouriertrf,
    2756         fpartint: fpartint,
    2757         frac12: frac12,
    2758         frac13: frac13,
    2759         frac14: frac14,
    2760         frac15: frac15,
    2761         frac16: frac16,
    2762         frac18: frac18,
    2763         frac23: frac23,
    2764         frac25: frac25,
    2765         frac34: frac34,
    2766         frac35: frac35,
    2767         frac38: frac38,
    2768         frac45: frac45,
    2769         frac56: frac56,
    2770         frac58: frac58,
    2771         frac78: frac78,
    2772         frasl: frasl,
    2773         frown: frown,
    2774         fscr: fscr,
    2775         Fscr: Fscr,
    2776         gacute: gacute,
    2777         Gamma: Gamma,
    2778         gamma: gamma,
    2779         Gammad: Gammad,
    2780         gammad: gammad,
    2781         gap: gap,
    2782         Gbreve: Gbreve,
    2783         gbreve: gbreve,
    2784         Gcedil: Gcedil,
    2785         Gcirc: Gcirc,
    2786         gcirc: gcirc,
    2787         Gcy: Gcy,
    2788         gcy: gcy,
    2789         Gdot: Gdot,
    2790         gdot: gdot,
    2791         ge: ge,
    2792         gE: gE,
    2793         gEl: gEl,
    2794         gel: gel,
    2795         geq: geq,
    2796         geqq: geqq,
    2797         geqslant: geqslant,
    2798         gescc: gescc,
    2799         ges: ges,
    2800         gesdot: gesdot,
    2801         gesdoto: gesdoto,
    2802         gesdotol: gesdotol,
    2803         gesl: gesl,
    2804         gesles: gesles,
    2805         Gfr: Gfr,
    2806         gfr: gfr,
    2807         gg: gg,
    2808         Gg: Gg,
    2809         ggg: ggg,
    2810         gimel: gimel,
    2811         GJcy: GJcy,
    2812         gjcy: gjcy,
    2813         gla: gla,
    2814         gl: gl,
    2815         glE: glE,
    2816         glj: glj,
    2817         gnap: gnap,
    2818         gnapprox: gnapprox,
    2819         gne: gne,
    2820         gnE: gnE,
    2821         gneq: gneq,
    2822         gneqq: gneqq,
    2823         gnsim: gnsim,
    2824         Gopf: Gopf,
    2825         gopf: gopf,
    2826         grave: grave,
    2827         GreaterEqual: GreaterEqual,
    2828         GreaterEqualLess: GreaterEqualLess,
    2829         GreaterFullEqual: GreaterFullEqual,
    2830         GreaterGreater: GreaterGreater,
    2831         GreaterLess: GreaterLess,
    2832         GreaterSlantEqual: GreaterSlantEqual,
    2833         GreaterTilde: GreaterTilde,
    2834         Gscr: Gscr,
    2835         gscr: gscr,
    2836         gsim: gsim,
    2837         gsime: gsime,
    2838         gsiml: gsiml,
    2839         gtcc: gtcc,
    2840         gtcir: gtcir,
    2841         gt: gt,
    2842         GT: GT,
    2843         Gt: Gt,
    2844         gtdot: gtdot,
    2845         gtlPar: gtlPar,
    2846         gtquest: gtquest,
    2847         gtrapprox: gtrapprox,
    2848         gtrarr: gtrarr,
    2849         gtrdot: gtrdot,
    2850         gtreqless: gtreqless,
    2851         gtreqqless: gtreqqless,
    2852         gtrless: gtrless,
    2853         gtrsim: gtrsim,
    2854         gvertneqq: gvertneqq,
    2855         gvnE: gvnE,
    2856         Hacek: Hacek,
    2857         hairsp: hairsp,
    2858         half: half,
    2859         hamilt: hamilt,
    2860         HARDcy: HARDcy,
    2861         hardcy: hardcy,
    2862         harrcir: harrcir,
    2863         harr: harr,
    2864         hArr: hArr,
    2865         harrw: harrw,
    2866         Hat: Hat,
    2867         hbar: hbar,
    2868         Hcirc: Hcirc,
    2869         hcirc: hcirc,
    2870         hearts: hearts,
    2871         heartsuit: heartsuit,
    2872         hellip: hellip,
    2873         hercon: hercon,
    2874         hfr: hfr,
    2875         Hfr: Hfr,
    2876         HilbertSpace: HilbertSpace,
    2877         hksearow: hksearow,
    2878         hkswarow: hkswarow,
    2879         hoarr: hoarr,
    2880         homtht: homtht,
    2881         hookleftarrow: hookleftarrow,
    2882         hookrightarrow: hookrightarrow,
    2883         hopf: hopf,
    2884         Hopf: Hopf,
    2885         horbar: horbar,
    2886         HorizontalLine: HorizontalLine,
    2887         hscr: hscr,
    2888         Hscr: Hscr,
    2889         hslash: hslash,
    2890         Hstrok: Hstrok,
    2891         hstrok: hstrok,
    2892         HumpDownHump: HumpDownHump,
    2893         HumpEqual: HumpEqual,
    2894         hybull: hybull,
    2895         hyphen: hyphen,
    2896         Iacute: Iacute,
    2897         iacute: iacute,
    2898         ic: ic,
    2899         Icirc: Icirc,
    2900         icirc: icirc,
    2901         Icy: Icy,
    2902         icy: icy,
    2903         Idot: Idot,
    2904         IEcy: IEcy,
    2905         iecy: iecy,
    2906         iexcl: iexcl,
    2907         iff: iff,
    2908         ifr: ifr,
    2909         Ifr: Ifr,
    2910         Igrave: Igrave,
    2911         igrave: igrave,
    2912         ii: ii,
    2913         iiiint: iiiint,
    2914         iiint: iiint,
    2915         iinfin: iinfin,
    2916         iiota: iiota,
    2917         IJlig: IJlig,
    2918         ijlig: ijlig,
    2919         Imacr: Imacr,
    2920         imacr: imacr,
    2921         image: image,
    2922         ImaginaryI: ImaginaryI,
    2923         imagline: imagline,
    2924         imagpart: imagpart,
    2925         imath: imath,
    2926         Im: Im,
    2927         imof: imof,
    2928         imped: imped,
    2929         Implies: Implies,
    2930         incare: incare,
    2931         "in": "∈",
    2932         infin: infin,
    2933         infintie: infintie,
    2934         inodot: inodot,
    2935         intcal: intcal,
    2936         int: int,
    2937         Int: Int,
    2938         integers: integers,
    2939         Integral: Integral,
    2940         intercal: intercal,
    2941         Intersection: Intersection,
    2942         intlarhk: intlarhk,
    2943         intprod: intprod,
    2944         InvisibleComma: InvisibleComma,
    2945         InvisibleTimes: InvisibleTimes,
    2946         IOcy: IOcy,
    2947         iocy: iocy,
    2948         Iogon: Iogon,
    2949         iogon: iogon,
    2950         Iopf: Iopf,
    2951         iopf: iopf,
    2952         Iota: Iota,
    2953         iota: iota,
    2954         iprod: iprod,
    2955         iquest: iquest,
    2956         iscr: iscr,
    2957         Iscr: Iscr,
    2958         isin: isin,
    2959         isindot: isindot,
    2960         isinE: isinE,
    2961         isins: isins,
    2962         isinsv: isinsv,
    2963         isinv: isinv,
    2964         it: it,
    2965         Itilde: Itilde,
    2966         itilde: itilde,
    2967         Iukcy: Iukcy,
    2968         iukcy: iukcy,
    2969         Iuml: Iuml,
    2970         iuml: iuml,
    2971         Jcirc: Jcirc,
    2972         jcirc: jcirc,
    2973         Jcy: Jcy,
    2974         jcy: jcy,
    2975         Jfr: Jfr,
    2976         jfr: jfr,
    2977         jmath: jmath,
    2978         Jopf: Jopf,
    2979         jopf: jopf,
    2980         Jscr: Jscr,
    2981         jscr: jscr,
    2982         Jsercy: Jsercy,
    2983         jsercy: jsercy,
    2984         Jukcy: Jukcy,
    2985         jukcy: jukcy,
    2986         Kappa: Kappa,
    2987         kappa: kappa,
    2988         kappav: kappav,
    2989         Kcedil: Kcedil,
    2990         kcedil: kcedil,
    2991         Kcy: Kcy,
    2992         kcy: kcy,
    2993         Kfr: Kfr,
    2994         kfr: kfr,
    2995         kgreen: kgreen,
    2996         KHcy: KHcy,
    2997         khcy: khcy,
    2998         KJcy: KJcy,
    2999         kjcy: kjcy,
    3000         Kopf: Kopf,
    3001         kopf: kopf,
    3002         Kscr: Kscr,
    3003         kscr: kscr,
    3004         lAarr: lAarr,
    3005         Lacute: Lacute,
    3006         lacute: lacute,
    3007         laemptyv: laemptyv,
    3008         lagran: lagran,
    3009         Lambda: Lambda,
    3010         lambda: lambda,
    3011         lang: lang,
    3012         Lang: Lang,
    3013         langd: langd,
    3014         langle: langle,
    3015         lap: lap,
    3016         Laplacetrf: Laplacetrf,
    3017         laquo: laquo,
    3018         larrb: larrb,
    3019         larrbfs: larrbfs,
    3020         larr: larr,
    3021         Larr: Larr,
    3022         lArr: lArr,
    3023         larrfs: larrfs,
    3024         larrhk: larrhk,
    3025         larrlp: larrlp,
    3026         larrpl: larrpl,
    3027         larrsim: larrsim,
    3028         larrtl: larrtl,
    3029         latail: latail,
    3030         lAtail: lAtail,
    3031         lat: lat,
    3032         late: late,
    3033         lates: lates,
    3034         lbarr: lbarr,
    3035         lBarr: lBarr,
    3036         lbbrk: lbbrk,
    3037         lbrace: lbrace,
    3038         lbrack: lbrack,
    3039         lbrke: lbrke,
    3040         lbrksld: lbrksld,
    3041         lbrkslu: lbrkslu,
    3042         Lcaron: Lcaron,
    3043         lcaron: lcaron,
    3044         Lcedil: Lcedil,
    3045         lcedil: lcedil,
    3046         lceil: lceil,
    3047         lcub: lcub,
    3048         Lcy: Lcy,
    3049         lcy: lcy,
    3050         ldca: ldca,
    3051         ldquo: ldquo,
    3052         ldquor: ldquor,
    3053         ldrdhar: ldrdhar,
    3054         ldrushar: ldrushar,
    3055         ldsh: ldsh,
    3056         le: le,
    3057         lE: lE,
    3058         LeftAngleBracket: LeftAngleBracket,
    3059         LeftArrowBar: LeftArrowBar,
    3060         leftarrow: leftarrow,
    3061         LeftArrow: LeftArrow,
    3062         Leftarrow: Leftarrow,
    3063         LeftArrowRightArrow: LeftArrowRightArrow,
    3064         leftarrowtail: leftarrowtail,
    3065         LeftCeiling: LeftCeiling,
    3066         LeftDoubleBracket: LeftDoubleBracket,
    3067         LeftDownTeeVector: LeftDownTeeVector,
    3068         LeftDownVectorBar: LeftDownVectorBar,
    3069         LeftDownVector: LeftDownVector,
    3070         LeftFloor: LeftFloor,
    3071         leftharpoondown: leftharpoondown,
    3072         leftharpoonup: leftharpoonup,
    3073         leftleftarrows: leftleftarrows,
    3074         leftrightarrow: leftrightarrow,
    3075         LeftRightArrow: LeftRightArrow,
    3076         Leftrightarrow: Leftrightarrow,
    3077         leftrightarrows: leftrightarrows,
    3078         leftrightharpoons: leftrightharpoons,
    3079         leftrightsquigarrow: leftrightsquigarrow,
    3080         LeftRightVector: LeftRightVector,
    3081         LeftTeeArrow: LeftTeeArrow,
    3082         LeftTee: LeftTee,
    3083         LeftTeeVector: LeftTeeVector,
    3084         leftthreetimes: leftthreetimes,
    3085         LeftTriangleBar: LeftTriangleBar,
    3086         LeftTriangle: LeftTriangle,
    3087         LeftTriangleEqual: LeftTriangleEqual,
    3088         LeftUpDownVector: LeftUpDownVector,
    3089         LeftUpTeeVector: LeftUpTeeVector,
    3090         LeftUpVectorBar: LeftUpVectorBar,
    3091         LeftUpVector: LeftUpVector,
    3092         LeftVectorBar: LeftVectorBar,
    3093         LeftVector: LeftVector,
    3094         lEg: lEg,
    3095         leg: leg,
    3096         leq: leq,
    3097         leqq: leqq,
    3098         leqslant: leqslant,
    3099         lescc: lescc,
    3100         les: les,
    3101         lesdot: lesdot,
    3102         lesdoto: lesdoto,
    3103         lesdotor: lesdotor,
    3104         lesg: lesg,
    3105         lesges: lesges,
    3106         lessapprox: lessapprox,
    3107         lessdot: lessdot,
    3108         lesseqgtr: lesseqgtr,
    3109         lesseqqgtr: lesseqqgtr,
    3110         LessEqualGreater: LessEqualGreater,
    3111         LessFullEqual: LessFullEqual,
    3112         LessGreater: LessGreater,
    3113         lessgtr: lessgtr,
    3114         LessLess: LessLess,
    3115         lesssim: lesssim,
    3116         LessSlantEqual: LessSlantEqual,
    3117         LessTilde: LessTilde,
    3118         lfisht: lfisht,
    3119         lfloor: lfloor,
    3120         Lfr: Lfr,
    3121         lfr: lfr,
    3122         lg: lg,
    3123         lgE: lgE,
    3124         lHar: lHar,
    3125         lhard: lhard,
    3126         lharu: lharu,
    3127         lharul: lharul,
    3128         lhblk: lhblk,
    3129         LJcy: LJcy,
    3130         ljcy: ljcy,
    3131         llarr: llarr,
    3132         ll: ll,
    3133         Ll: Ll,
    3134         llcorner: llcorner,
    3135         Lleftarrow: Lleftarrow,
    3136         llhard: llhard,
    3137         lltri: lltri,
    3138         Lmidot: Lmidot,
    3139         lmidot: lmidot,
    3140         lmoustache: lmoustache,
    3141         lmoust: lmoust,
    3142         lnap: lnap,
    3143         lnapprox: lnapprox,
    3144         lne: lne,
    3145         lnE: lnE,
    3146         lneq: lneq,
    3147         lneqq: lneqq,
    3148         lnsim: lnsim,
    3149         loang: loang,
    3150         loarr: loarr,
    3151         lobrk: lobrk,
    3152         longleftarrow: longleftarrow,
    3153         LongLeftArrow: LongLeftArrow,
    3154         Longleftarrow: Longleftarrow,
    3155         longleftrightarrow: longleftrightarrow,
    3156         LongLeftRightArrow: LongLeftRightArrow,
    3157         Longleftrightarrow: Longleftrightarrow,
    3158         longmapsto: longmapsto,
    3159         longrightarrow: longrightarrow,
    3160         LongRightArrow: LongRightArrow,
    3161         Longrightarrow: Longrightarrow,
    3162         looparrowleft: looparrowleft,
    3163         looparrowright: looparrowright,
    3164         lopar: lopar,
    3165         Lopf: Lopf,
    3166         lopf: lopf,
    3167         loplus: loplus,
    3168         lotimes: lotimes,
    3169         lowast: lowast,
    3170         lowbar: lowbar,
    3171         LowerLeftArrow: LowerLeftArrow,
    3172         LowerRightArrow: LowerRightArrow,
    3173         loz: loz,
    3174         lozenge: lozenge,
    3175         lozf: lozf,
    3176         lpar: lpar,
    3177         lparlt: lparlt,
    3178         lrarr: lrarr,
    3179         lrcorner: lrcorner,
    3180         lrhar: lrhar,
    3181         lrhard: lrhard,
    3182         lrm: lrm,
    3183         lrtri: lrtri,
    3184         lsaquo: lsaquo,
    3185         lscr: lscr,
    3186         Lscr: Lscr,
    3187         lsh: lsh,
    3188         Lsh: Lsh,
    3189         lsim: lsim,
    3190         lsime: lsime,
    3191         lsimg: lsimg,
    3192         lsqb: lsqb,
    3193         lsquo: lsquo,
    3194         lsquor: lsquor,
    3195         Lstrok: Lstrok,
    3196         lstrok: lstrok,
    3197         ltcc: ltcc,
    3198         ltcir: ltcir,
    3199         lt: lt,
    3200         LT: LT,
    3201         Lt: Lt,
    3202         ltdot: ltdot,
    3203         lthree: lthree,
    3204         ltimes: ltimes,
    3205         ltlarr: ltlarr,
    3206         ltquest: ltquest,
    3207         ltri: ltri,
    3208         ltrie: ltrie,
    3209         ltrif: ltrif,
    3210         ltrPar: ltrPar,
    3211         lurdshar: lurdshar,
    3212         luruhar: luruhar,
    3213         lvertneqq: lvertneqq,
    3214         lvnE: lvnE,
    3215         macr: macr,
    3216         male: male,
    3217         malt: malt,
    3218         maltese: maltese,
    3219         "Map": "⤅",
    3220         map: map,
    3221         mapsto: mapsto,
    3222         mapstodown: mapstodown,
    3223         mapstoleft: mapstoleft,
    3224         mapstoup: mapstoup,
    3225         marker: marker,
    3226         mcomma: mcomma,
    3227         Mcy: Mcy,
    3228         mcy: mcy,
    3229         mdash: mdash,
    3230         mDDot: mDDot,
    3231         measuredangle: measuredangle,
    3232         MediumSpace: MediumSpace,
    3233         Mellintrf: Mellintrf,
    3234         Mfr: Mfr,
    3235         mfr: mfr,
    3236         mho: mho,
    3237         micro: micro,
    3238         midast: midast,
    3239         midcir: midcir,
    3240         mid: mid,
    3241         middot: middot,
    3242         minusb: minusb,
    3243         minus: minus,
    3244         minusd: minusd,
    3245         minusdu: minusdu,
    3246         MinusPlus: MinusPlus,
    3247         mlcp: mlcp,
    3248         mldr: mldr,
    3249         mnplus: mnplus,
    3250         models: models,
    3251         Mopf: Mopf,
    3252         mopf: mopf,
    3253         mp: mp,
    3254         mscr: mscr,
    3255         Mscr: Mscr,
    3256         mstpos: mstpos,
    3257         Mu: Mu,
    3258         mu: mu,
    3259         multimap: multimap,
    3260         mumap: mumap,
    3261         nabla: nabla,
    3262         Nacute: Nacute,
    3263         nacute: nacute,
    3264         nang: nang,
    3265         nap: nap,
    3266         napE: napE,
    3267         napid: napid,
    3268         napos: napos,
    3269         napprox: napprox,
    3270         natural: natural,
    3271         naturals: naturals,
    3272         natur: natur,
    3273         nbsp: nbsp,
    3274         nbump: nbump,
    3275         nbumpe: nbumpe,
    3276         ncap: ncap,
    3277         Ncaron: Ncaron,
    3278         ncaron: ncaron,
    3279         Ncedil: Ncedil,
    3280         ncedil: ncedil,
    3281         ncong: ncong,
    3282         ncongdot: ncongdot,
    3283         ncup: ncup,
    3284         Ncy: Ncy,
    3285         ncy: ncy,
    3286         ndash: ndash,
    3287         nearhk: nearhk,
    3288         nearr: nearr,
    3289         neArr: neArr,
    3290         nearrow: nearrow,
    3291         ne: ne,
    3292         nedot: nedot,
    3293         NegativeMediumSpace: NegativeMediumSpace,
    3294         NegativeThickSpace: NegativeThickSpace,
    3295         NegativeThinSpace: NegativeThinSpace,
    3296         NegativeVeryThinSpace: NegativeVeryThinSpace,
    3297         nequiv: nequiv,
    3298         nesear: nesear,
    3299         nesim: nesim,
    3300         NestedGreaterGreater: NestedGreaterGreater,
    3301         NestedLessLess: NestedLessLess,
    3302         NewLine: NewLine,
    3303         nexist: nexist,
    3304         nexists: nexists,
    3305         Nfr: Nfr,
    3306         nfr: nfr,
    3307         ngE: ngE,
    3308         nge: nge,
    3309         ngeq: ngeq,
    3310         ngeqq: ngeqq,
    3311         ngeqslant: ngeqslant,
    3312         nges: nges,
    3313         nGg: nGg,
    3314         ngsim: ngsim,
    3315         nGt: nGt,
    3316         ngt: ngt,
    3317         ngtr: ngtr,
    3318         nGtv: nGtv,
    3319         nharr: nharr,
    3320         nhArr: nhArr,
    3321         nhpar: nhpar,
    3322         ni: ni,
    3323         nis: nis,
    3324         nisd: nisd,
    3325         niv: niv,
    3326         NJcy: NJcy,
    3327         njcy: njcy,
    3328         nlarr: nlarr,
    3329         nlArr: nlArr,
    3330         nldr: nldr,
    3331         nlE: nlE,
    3332         nle: nle,
    3333         nleftarrow: nleftarrow,
    3334         nLeftarrow: nLeftarrow,
    3335         nleftrightarrow: nleftrightarrow,
    3336         nLeftrightarrow: nLeftrightarrow,
    3337         nleq: nleq,
    3338         nleqq: nleqq,
    3339         nleqslant: nleqslant,
    3340         nles: nles,
    3341         nless: nless,
    3342         nLl: nLl,
    3343         nlsim: nlsim,
    3344         nLt: nLt,
    3345         nlt: nlt,
    3346         nltri: nltri,
    3347         nltrie: nltrie,
    3348         nLtv: nLtv,
    3349         nmid: nmid,
    3350         NoBreak: NoBreak,
    3351         NonBreakingSpace: NonBreakingSpace,
    3352         nopf: nopf,
    3353         Nopf: Nopf,
    3354         Not: Not,
    3355         not: not,
    3356         NotCongruent: NotCongruent,
    3357         NotCupCap: NotCupCap,
    3358         NotDoubleVerticalBar: NotDoubleVerticalBar,
    3359         NotElement: NotElement,
    3360         NotEqual: NotEqual,
    3361         NotEqualTilde: NotEqualTilde,
    3362         NotExists: NotExists,
    3363         NotGreater: NotGreater,
    3364         NotGreaterEqual: NotGreaterEqual,
    3365         NotGreaterFullEqual: NotGreaterFullEqual,
    3366         NotGreaterGreater: NotGreaterGreater,
    3367         NotGreaterLess: NotGreaterLess,
    3368         NotGreaterSlantEqual: NotGreaterSlantEqual,
    3369         NotGreaterTilde: NotGreaterTilde,
    3370         NotHumpDownHump: NotHumpDownHump,
    3371         NotHumpEqual: NotHumpEqual,
    3372         notin: notin,
    3373         notindot: notindot,
    3374         notinE: notinE,
    3375         notinva: notinva,
    3376         notinvb: notinvb,
    3377         notinvc: notinvc,
    3378         NotLeftTriangleBar: NotLeftTriangleBar,
    3379         NotLeftTriangle: NotLeftTriangle,
    3380         NotLeftTriangleEqual: NotLeftTriangleEqual,
    3381         NotLess: NotLess,
    3382         NotLessEqual: NotLessEqual,
    3383         NotLessGreater: NotLessGreater,
    3384         NotLessLess: NotLessLess,
    3385         NotLessSlantEqual: NotLessSlantEqual,
    3386         NotLessTilde: NotLessTilde,
    3387         NotNestedGreaterGreater: NotNestedGreaterGreater,
    3388         NotNestedLessLess: NotNestedLessLess,
    3389         notni: notni,
    3390         notniva: notniva,
    3391         notnivb: notnivb,
    3392         notnivc: notnivc,
    3393         NotPrecedes: NotPrecedes,
    3394         NotPrecedesEqual: NotPrecedesEqual,
    3395         NotPrecedesSlantEqual: NotPrecedesSlantEqual,
    3396         NotReverseElement: NotReverseElement,
    3397         NotRightTriangleBar: NotRightTriangleBar,
    3398         NotRightTriangle: NotRightTriangle,
    3399         NotRightTriangleEqual: NotRightTriangleEqual,
    3400         NotSquareSubset: NotSquareSubset,
    3401         NotSquareSubsetEqual: NotSquareSubsetEqual,
    3402         NotSquareSuperset: NotSquareSuperset,
    3403         NotSquareSupersetEqual: NotSquareSupersetEqual,
    3404         NotSubset: NotSubset,
    3405         NotSubsetEqual: NotSubsetEqual,
    3406         NotSucceeds: NotSucceeds,
    3407         NotSucceedsEqual: NotSucceedsEqual,
    3408         NotSucceedsSlantEqual: NotSucceedsSlantEqual,
    3409         NotSucceedsTilde: NotSucceedsTilde,
    3410         NotSuperset: NotSuperset,
    3411         NotSupersetEqual: NotSupersetEqual,
    3412         NotTilde: NotTilde,
    3413         NotTildeEqual: NotTildeEqual,
    3414         NotTildeFullEqual: NotTildeFullEqual,
    3415         NotTildeTilde: NotTildeTilde,
    3416         NotVerticalBar: NotVerticalBar,
    3417         nparallel: nparallel,
    3418         npar: npar,
    3419         nparsl: nparsl,
    3420         npart: npart,
    3421         npolint: npolint,
    3422         npr: npr,
    3423         nprcue: nprcue,
    3424         nprec: nprec,
    3425         npreceq: npreceq,
    3426         npre: npre,
    3427         nrarrc: nrarrc,
    3428         nrarr: nrarr,
    3429         nrArr: nrArr,
    3430         nrarrw: nrarrw,
    3431         nrightarrow: nrightarrow,
    3432         nRightarrow: nRightarrow,
    3433         nrtri: nrtri,
    3434         nrtrie: nrtrie,
    3435         nsc: nsc,
    3436         nsccue: nsccue,
    3437         nsce: nsce,
    3438         Nscr: Nscr,
    3439         nscr: nscr,
    3440         nshortmid: nshortmid,
    3441         nshortparallel: nshortparallel,
    3442         nsim: nsim,
    3443         nsime: nsime,
    3444         nsimeq: nsimeq,
    3445         nsmid: nsmid,
    3446         nspar: nspar,
    3447         nsqsube: nsqsube,
    3448         nsqsupe: nsqsupe,
    3449         nsub: nsub,
    3450         nsubE: nsubE,
    3451         nsube: nsube,
    3452         nsubset: nsubset,
    3453         nsubseteq: nsubseteq,
    3454         nsubseteqq: nsubseteqq,
    3455         nsucc: nsucc,
    3456         nsucceq: nsucceq,
    3457         nsup: nsup,
    3458         nsupE: nsupE,
    3459         nsupe: nsupe,
    3460         nsupset: nsupset,
    3461         nsupseteq: nsupseteq,
    3462         nsupseteqq: nsupseteqq,
    3463         ntgl: ntgl,
    3464         Ntilde: Ntilde,
    3465         ntilde: ntilde,
    3466         ntlg: ntlg,
    3467         ntriangleleft: ntriangleleft,
    3468         ntrianglelefteq: ntrianglelefteq,
    3469         ntriangleright: ntriangleright,
    3470         ntrianglerighteq: ntrianglerighteq,
    3471         Nu: Nu,
    3472         nu: nu,
    3473         num: num,
    3474         numero: numero,
    3475         numsp: numsp,
    3476         nvap: nvap,
    3477         nvdash: nvdash,
    3478         nvDash: nvDash,
    3479         nVdash: nVdash,
    3480         nVDash: nVDash,
    3481         nvge: nvge,
    3482         nvgt: nvgt,
    3483         nvHarr: nvHarr,
    3484         nvinfin: nvinfin,
    3485         nvlArr: nvlArr,
    3486         nvle: nvle,
    3487         nvlt: nvlt,
    3488         nvltrie: nvltrie,
    3489         nvrArr: nvrArr,
    3490         nvrtrie: nvrtrie,
    3491         nvsim: nvsim,
    3492         nwarhk: nwarhk,
    3493         nwarr: nwarr,
    3494         nwArr: nwArr,
    3495         nwarrow: nwarrow,
    3496         nwnear: nwnear,
    3497         Oacute: Oacute,
    3498         oacute: oacute,
    3499         oast: oast,
    3500         Ocirc: Ocirc,
    3501         ocirc: ocirc,
    3502         ocir: ocir,
    3503         Ocy: Ocy,
    3504         ocy: ocy,
    3505         odash: odash,
    3506         Odblac: Odblac,
    3507         odblac: odblac,
    3508         odiv: odiv,
    3509         odot: odot,
    3510         odsold: odsold,
    3511         OElig: OElig,
    3512         oelig: oelig,
    3513         ofcir: ofcir,
    3514         Ofr: Ofr,
    3515         ofr: ofr,
    3516         ogon: ogon,
    3517         Ograve: Ograve,
    3518         ograve: ograve,
    3519         ogt: ogt,
    3520         ohbar: ohbar,
    3521         ohm: ohm,
    3522         oint: oint,
    3523         olarr: olarr,
    3524         olcir: olcir,
    3525         olcross: olcross,
    3526         oline: oline,
    3527         olt: olt,
    3528         Omacr: Omacr,
    3529         omacr: omacr,
    3530         Omega: Omega,
    3531         omega: omega,
    3532         Omicron: Omicron,
    3533         omicron: omicron,
    3534         omid: omid,
    3535         ominus: ominus,
    3536         Oopf: Oopf,
    3537         oopf: oopf,
    3538         opar: opar,
    3539         OpenCurlyDoubleQuote: OpenCurlyDoubleQuote,
    3540         OpenCurlyQuote: OpenCurlyQuote,
    3541         operp: operp,
    3542         oplus: oplus,
    3543         orarr: orarr,
    3544         Or: Or,
    3545         or: or,
    3546         ord: ord,
    3547         order: order,
    3548         orderof: orderof,
    3549         ordf: ordf,
    3550         ordm: ordm,
    3551         origof: origof,
    3552         oror: oror,
    3553         orslope: orslope,
    3554         orv: orv,
    3555         oS: oS,
    3556         Oscr: Oscr,
    3557         oscr: oscr,
    3558         Oslash: Oslash,
    3559         oslash: oslash,
    3560         osol: osol,
    3561         Otilde: Otilde,
    3562         otilde: otilde,
    3563         otimesas: otimesas,
    3564         Otimes: Otimes,
    3565         otimes: otimes,
    3566         Ouml: Ouml,
    3567         ouml: ouml,
    3568         ovbar: ovbar,
    3569         OverBar: OverBar,
    3570         OverBrace: OverBrace,
    3571         OverBracket: OverBracket,
    3572         OverParenthesis: OverParenthesis,
    3573         para: para,
    3574         parallel: parallel,
    3575         par: par,
    3576         parsim: parsim,
    3577         parsl: parsl,
    3578         part: part,
    3579         PartialD: PartialD,
    3580         Pcy: Pcy,
    3581         pcy: pcy,
    3582         percnt: percnt,
    3583         period: period,
    3584         permil: permil,
    3585         perp: perp,
    3586         pertenk: pertenk,
    3587         Pfr: Pfr,
    3588         pfr: pfr,
    3589         Phi: Phi,
    3590         phi: phi,
    3591         phiv: phiv,
    3592         phmmat: phmmat,
    3593         phone: phone,
    3594         Pi: Pi,
    3595         pi: pi,
    3596         pitchfork: pitchfork,
    3597         piv: piv,
    3598         planck: planck,
    3599         planckh: planckh,
    3600         plankv: plankv,
    3601         plusacir: plusacir,
    3602         plusb: plusb,
    3603         pluscir: pluscir,
    3604         plus: plus,
    3605         plusdo: plusdo,
    3606         plusdu: plusdu,
    3607         pluse: pluse,
    3608         PlusMinus: PlusMinus,
    3609         plusmn: plusmn,
    3610         plussim: plussim,
    3611         plustwo: plustwo,
    3612         pm: pm,
    3613         Poincareplane: Poincareplane,
    3614         pointint: pointint,
    3615         popf: popf,
    3616         Popf: Popf,
    3617         pound: pound,
    3618         prap: prap,
    3619         Pr: Pr,
    3620         pr: pr,
    3621         prcue: prcue,
    3622         precapprox: precapprox,
    3623         prec: prec,
    3624         preccurlyeq: preccurlyeq,
    3625         Precedes: Precedes,
    3626         PrecedesEqual: PrecedesEqual,
    3627         PrecedesSlantEqual: PrecedesSlantEqual,
    3628         PrecedesTilde: PrecedesTilde,
    3629         preceq: preceq,
    3630         precnapprox: precnapprox,
    3631         precneqq: precneqq,
    3632         precnsim: precnsim,
    3633         pre: pre,
    3634         prE: prE,
    3635         precsim: precsim,
    3636         prime: prime,
    3637         Prime: Prime,
    3638         primes: primes,
    3639         prnap: prnap,
    3640         prnE: prnE,
    3641         prnsim: prnsim,
    3642         prod: prod,
    3643         Product: Product,
    3644         profalar: profalar,
    3645         profline: profline,
    3646         profsurf: profsurf,
    3647         prop: prop,
    3648         Proportional: Proportional,
    3649         Proportion: Proportion,
    3650         propto: propto,
    3651         prsim: prsim,
    3652         prurel: prurel,
    3653         Pscr: Pscr,
    3654         pscr: pscr,
    3655         Psi: Psi,
    3656         psi: psi,
    3657         puncsp: puncsp,
    3658         Qfr: Qfr,
    3659         qfr: qfr,
    3660         qint: qint,
    3661         qopf: qopf,
    3662         Qopf: Qopf,
    3663         qprime: qprime,
    3664         Qscr: Qscr,
    3665         qscr: qscr,
    3666         quaternions: quaternions,
    3667         quatint: quatint,
    3668         quest: quest,
    3669         questeq: questeq,
    3670         quot: quot,
    3671         QUOT: QUOT,
    3672         rAarr: rAarr,
    3673         race: race,
    3674         Racute: Racute,
    3675         racute: racute,
    3676         radic: radic,
    3677         raemptyv: raemptyv,
    3678         rang: rang,
    3679         Rang: Rang,
    3680         rangd: rangd,
    3681         range: range,
    3682         rangle: rangle,
    3683         raquo: raquo,
    3684         rarrap: rarrap,
    3685         rarrb: rarrb,
    3686         rarrbfs: rarrbfs,
    3687         rarrc: rarrc,
    3688         rarr: rarr,
    3689         Rarr: Rarr,
    3690         rArr: rArr,
    3691         rarrfs: rarrfs,
    3692         rarrhk: rarrhk,
    3693         rarrlp: rarrlp,
    3694         rarrpl: rarrpl,
    3695         rarrsim: rarrsim,
    3696         Rarrtl: Rarrtl,
    3697         rarrtl: rarrtl,
    3698         rarrw: rarrw,
    3699         ratail: ratail,
    3700         rAtail: rAtail,
    3701         ratio: ratio,
    3702         rationals: rationals,
    3703         rbarr: rbarr,
    3704         rBarr: rBarr,
    3705         RBarr: RBarr,
    3706         rbbrk: rbbrk,
    3707         rbrace: rbrace,
    3708         rbrack: rbrack,
    3709         rbrke: rbrke,
    3710         rbrksld: rbrksld,
    3711         rbrkslu: rbrkslu,
    3712         Rcaron: Rcaron,
    3713         rcaron: rcaron,
    3714         Rcedil: Rcedil,
    3715         rcedil: rcedil,
    3716         rceil: rceil,
    3717         rcub: rcub,
    3718         Rcy: Rcy,
    3719         rcy: rcy,
    3720         rdca: rdca,
    3721         rdldhar: rdldhar,
    3722         rdquo: rdquo,
    3723         rdquor: rdquor,
    3724         rdsh: rdsh,
    3725         real: real,
    3726         realine: realine,
    3727         realpart: realpart,
    3728         reals: reals,
    3729         Re: Re,
    3730         rect: rect,
    3731         reg: reg,
    3732         REG: REG,
    3733         ReverseElement: ReverseElement,
    3734         ReverseEquilibrium: ReverseEquilibrium,
    3735         ReverseUpEquilibrium: ReverseUpEquilibrium,
    3736         rfisht: rfisht,
    3737         rfloor: rfloor,
    3738         rfr: rfr,
    3739         Rfr: Rfr,
    3740         rHar: rHar,
    3741         rhard: rhard,
    3742         rharu: rharu,
    3743         rharul: rharul,
    3744         Rho: Rho,
    3745         rho: rho,
    3746         rhov: rhov,
    3747         RightAngleBracket: RightAngleBracket,
    3748         RightArrowBar: RightArrowBar,
    3749         rightarrow: rightarrow,
    3750         RightArrow: RightArrow,
    3751         Rightarrow: Rightarrow,
    3752         RightArrowLeftArrow: RightArrowLeftArrow,
    3753         rightarrowtail: rightarrowtail,
    3754         RightCeiling: RightCeiling,
    3755         RightDoubleBracket: RightDoubleBracket,
    3756         RightDownTeeVector: RightDownTeeVector,
    3757         RightDownVectorBar: RightDownVectorBar,
    3758         RightDownVector: RightDownVector,
    3759         RightFloor: RightFloor,
    3760         rightharpoondown: rightharpoondown,
    3761         rightharpoonup: rightharpoonup,
    3762         rightleftarrows: rightleftarrows,
    3763         rightleftharpoons: rightleftharpoons,
    3764         rightrightarrows: rightrightarrows,
    3765         rightsquigarrow: rightsquigarrow,
    3766         RightTeeArrow: RightTeeArrow,
    3767         RightTee: RightTee,
    3768         RightTeeVector: RightTeeVector,
    3769         rightthreetimes: rightthreetimes,
    3770         RightTriangleBar: RightTriangleBar,
    3771         RightTriangle: RightTriangle,
    3772         RightTriangleEqual: RightTriangleEqual,
    3773         RightUpDownVector: RightUpDownVector,
    3774         RightUpTeeVector: RightUpTeeVector,
    3775         RightUpVectorBar: RightUpVectorBar,
    3776         RightUpVector: RightUpVector,
    3777         RightVectorBar: RightVectorBar,
    3778         RightVector: RightVector,
    3779         ring: ring,
    3780         risingdotseq: risingdotseq,
    3781         rlarr: rlarr,
    3782         rlhar: rlhar,
    3783         rlm: rlm,
    3784         rmoustache: rmoustache,
    3785         rmoust: rmoust,
    3786         rnmid: rnmid,
    3787         roang: roang,
    3788         roarr: roarr,
    3789         robrk: robrk,
    3790         ropar: ropar,
    3791         ropf: ropf,
    3792         Ropf: Ropf,
    3793         roplus: roplus,
    3794         rotimes: rotimes,
    3795         RoundImplies: RoundImplies,
    3796         rpar: rpar,
    3797         rpargt: rpargt,
    3798         rppolint: rppolint,
    3799         rrarr: rrarr,
    3800         Rrightarrow: Rrightarrow,
    3801         rsaquo: rsaquo,
    3802         rscr: rscr,
    3803         Rscr: Rscr,
    3804         rsh: rsh,
    3805         Rsh: Rsh,
    3806         rsqb: rsqb,
    3807         rsquo: rsquo,
    3808         rsquor: rsquor,
    3809         rthree: rthree,
    3810         rtimes: rtimes,
    3811         rtri: rtri,
    3812         rtrie: rtrie,
    3813         rtrif: rtrif,
    3814         rtriltri: rtriltri,
    3815         RuleDelayed: RuleDelayed,
    3816         ruluhar: ruluhar,
    3817         rx: rx,
    3818         Sacute: Sacute,
    3819         sacute: sacute,
    3820         sbquo: sbquo,
    3821         scap: scap,
    3822         Scaron: Scaron,
    3823         scaron: scaron,
    3824         Sc: Sc,
    3825         sc: sc,
    3826         sccue: sccue,
    3827         sce: sce,
    3828         scE: scE,
    3829         Scedil: Scedil,
    3830         scedil: scedil,
    3831         Scirc: Scirc,
    3832         scirc: scirc,
    3833         scnap: scnap,
    3834         scnE: scnE,
    3835         scnsim: scnsim,
    3836         scpolint: scpolint,
    3837         scsim: scsim,
    3838         Scy: Scy,
    3839         scy: scy,
    3840         sdotb: sdotb,
    3841         sdot: sdot,
    3842         sdote: sdote,
    3843         searhk: searhk,
    3844         searr: searr,
    3845         seArr: seArr,
    3846         searrow: searrow,
    3847         sect: sect,
    3848         semi: semi,
    3849         seswar: seswar,
    3850         setminus: setminus,
    3851         setmn: setmn,
    3852         sext: sext,
    3853         Sfr: Sfr,
    3854         sfr: sfr,
    3855         sfrown: sfrown,
    3856         sharp: sharp,
    3857         SHCHcy: SHCHcy,
    3858         shchcy: shchcy,
    3859         SHcy: SHcy,
    3860         shcy: shcy,
    3861         ShortDownArrow: ShortDownArrow,
    3862         ShortLeftArrow: ShortLeftArrow,
    3863         shortmid: shortmid,
    3864         shortparallel: shortparallel,
    3865         ShortRightArrow: ShortRightArrow,
    3866         ShortUpArrow: ShortUpArrow,
    3867         shy: shy,
    3868         Sigma: Sigma,
    3869         sigma: sigma,
    3870         sigmaf: sigmaf,
    3871         sigmav: sigmav,
    3872         sim: sim,
    3873         simdot: simdot,
    3874         sime: sime,
    3875         simeq: simeq,
    3876         simg: simg,
    3877         simgE: simgE,
    3878         siml: siml,
    3879         simlE: simlE,
    3880         simne: simne,
    3881         simplus: simplus,
    3882         simrarr: simrarr,
    3883         slarr: slarr,
    3884         SmallCircle: SmallCircle,
    3885         smallsetminus: smallsetminus,
    3886         smashp: smashp,
    3887         smeparsl: smeparsl,
    3888         smid: smid,
    3889         smile: smile,
    3890         smt: smt,
    3891         smte: smte,
    3892         smtes: smtes,
    3893         SOFTcy: SOFTcy,
    3894         softcy: softcy,
    3895         solbar: solbar,
    3896         solb: solb,
    3897         sol: sol,
    3898         Sopf: Sopf,
    3899         sopf: sopf,
    3900         spades: spades,
    3901         spadesuit: spadesuit,
    3902         spar: spar,
    3903         sqcap: sqcap,
    3904         sqcaps: sqcaps,
    3905         sqcup: sqcup,
    3906         sqcups: sqcups,
    3907         Sqrt: Sqrt,
    3908         sqsub: sqsub,
    3909         sqsube: sqsube,
    3910         sqsubset: sqsubset,
    3911         sqsubseteq: sqsubseteq,
    3912         sqsup: sqsup,
    3913         sqsupe: sqsupe,
    3914         sqsupset: sqsupset,
    3915         sqsupseteq: sqsupseteq,
    3916         square: square,
    3917         Square: Square,
    3918         SquareIntersection: SquareIntersection,
    3919         SquareSubset: SquareSubset,
    3920         SquareSubsetEqual: SquareSubsetEqual,
    3921         SquareSuperset: SquareSuperset,
    3922         SquareSupersetEqual: SquareSupersetEqual,
    3923         SquareUnion: SquareUnion,
    3924         squarf: squarf,
    3925         squ: squ,
    3926         squf: squf,
    3927         srarr: srarr,
    3928         Sscr: Sscr,
    3929         sscr: sscr,
    3930         ssetmn: ssetmn,
    3931         ssmile: ssmile,
    3932         sstarf: sstarf,
    3933         Star: Star,
    3934         star: star,
    3935         starf: starf,
    3936         straightepsilon: straightepsilon,
    3937         straightphi: straightphi,
    3938         strns: strns,
    3939         sub: sub,
    3940         Sub: Sub,
    3941         subdot: subdot,
    3942         subE: subE,
    3943         sube: sube,
    3944         subedot: subedot,
    3945         submult: submult,
    3946         subnE: subnE,
    3947         subne: subne,
    3948         subplus: subplus,
    3949         subrarr: subrarr,
    3950         subset: subset,
    3951         Subset: Subset,
    3952         subseteq: subseteq,
    3953         subseteqq: subseteqq,
    3954         SubsetEqual: SubsetEqual,
    3955         subsetneq: subsetneq,
    3956         subsetneqq: subsetneqq,
    3957         subsim: subsim,
    3958         subsub: subsub,
    3959         subsup: subsup,
    3960         succapprox: succapprox,
    3961         succ: succ,
    3962         succcurlyeq: succcurlyeq,
    3963         Succeeds: Succeeds,
    3964         SucceedsEqual: SucceedsEqual,
    3965         SucceedsSlantEqual: SucceedsSlantEqual,
    3966         SucceedsTilde: SucceedsTilde,
    3967         succeq: succeq,
    3968         succnapprox: succnapprox,
    3969         succneqq: succneqq,
    3970         succnsim: succnsim,
    3971         succsim: succsim,
    3972         SuchThat: SuchThat,
    3973         sum: sum,
    3974         Sum: Sum,
    3975         sung: sung,
    3976         sup1: sup1,
    3977         sup2: sup2,
    3978         sup3: sup3,
    3979         sup: sup,
    3980         Sup: Sup,
    3981         supdot: supdot,
    3982         supdsub: supdsub,
    3983         supE: supE,
    3984         supe: supe,
    3985         supedot: supedot,
    3986         Superset: Superset,
    3987         SupersetEqual: SupersetEqual,
    3988         suphsol: suphsol,
    3989         suphsub: suphsub,
    3990         suplarr: suplarr,
    3991         supmult: supmult,
    3992         supnE: supnE,
    3993         supne: supne,
    3994         supplus: supplus,
    3995         supset: supset,
    3996         Supset: Supset,
    3997         supseteq: supseteq,
    3998         supseteqq: supseteqq,
    3999         supsetneq: supsetneq,
    4000         supsetneqq: supsetneqq,
    4001         supsim: supsim,
    4002         supsub: supsub,
    4003         supsup: supsup,
    4004         swarhk: swarhk,
    4005         swarr: swarr,
    4006         swArr: swArr,
    4007         swarrow: swarrow,
    4008         swnwar: swnwar,
    4009         szlig: szlig,
    4010         Tab: Tab,
    4011         target: target,
    4012         Tau: Tau,
    4013         tau: tau,
    4014         tbrk: tbrk,
    4015         Tcaron: Tcaron,
    4016         tcaron: tcaron,
    4017         Tcedil: Tcedil,
    4018         tcedil: tcedil,
    4019         Tcy: Tcy,
    4020         tcy: tcy,
    4021         tdot: tdot,
    4022         telrec: telrec,
    4023         Tfr: Tfr,
    4024         tfr: tfr,
    4025         there4: there4,
    4026         therefore: therefore,
    4027         Therefore: Therefore,
    4028         Theta: Theta,
    4029         theta: theta,
    4030         thetasym: thetasym,
    4031         thetav: thetav,
    4032         thickapprox: thickapprox,
    4033         thicksim: thicksim,
    4034         ThickSpace: ThickSpace,
    4035         ThinSpace: ThinSpace,
    4036         thinsp: thinsp,
    4037         thkap: thkap,
    4038         thksim: thksim,
    4039         THORN: THORN,
    4040         thorn: thorn,
    4041         tilde: tilde,
    4042         Tilde: Tilde,
    4043         TildeEqual: TildeEqual,
    4044         TildeFullEqual: TildeFullEqual,
    4045         TildeTilde: TildeTilde,
    4046         timesbar: timesbar,
    4047         timesb: timesb,
    4048         times: times,
    4049         timesd: timesd,
    4050         tint: tint,
    4051         toea: toea,
    4052         topbot: topbot,
    4053         topcir: topcir,
    4054         top: top,
    4055         Topf: Topf,
    4056         topf: topf,
    4057         topfork: topfork,
    4058         tosa: tosa,
    4059         tprime: tprime,
    4060         trade: trade,
    4061         TRADE: TRADE,
    4062         triangle: triangle,
    4063         triangledown: triangledown,
    4064         triangleleft: triangleleft,
    4065         trianglelefteq: trianglelefteq,
    4066         triangleq: triangleq,
    4067         triangleright: triangleright,
    4068         trianglerighteq: trianglerighteq,
    4069         tridot: tridot,
    4070         trie: trie,
    4071         triminus: triminus,
    4072         TripleDot: TripleDot,
    4073         triplus: triplus,
    4074         trisb: trisb,
    4075         tritime: tritime,
    4076         trpezium: trpezium,
    4077         Tscr: Tscr,
    4078         tscr: tscr,
    4079         TScy: TScy,
    4080         tscy: tscy,
    4081         TSHcy: TSHcy,
    4082         tshcy: tshcy,
    4083         Tstrok: Tstrok,
    4084         tstrok: tstrok,
    4085         twixt: twixt,
    4086         twoheadleftarrow: twoheadleftarrow,
    4087         twoheadrightarrow: twoheadrightarrow,
    4088         Uacute: Uacute,
    4089         uacute: uacute,
    4090         uarr: uarr,
    4091         Uarr: Uarr,
    4092         uArr: uArr,
    4093         Uarrocir: Uarrocir,
    4094         Ubrcy: Ubrcy,
    4095         ubrcy: ubrcy,
    4096         Ubreve: Ubreve,
    4097         ubreve: ubreve,
    4098         Ucirc: Ucirc,
    4099         ucirc: ucirc,
    4100         Ucy: Ucy,
    4101         ucy: ucy,
    4102         udarr: udarr,
    4103         Udblac: Udblac,
    4104         udblac: udblac,
    4105         udhar: udhar,
    4106         ufisht: ufisht,
    4107         Ufr: Ufr,
    4108         ufr: ufr,
    4109         Ugrave: Ugrave,
    4110         ugrave: ugrave,
    4111         uHar: uHar,
    4112         uharl: uharl,
    4113         uharr: uharr,
    4114         uhblk: uhblk,
    4115         ulcorn: ulcorn,
    4116         ulcorner: ulcorner,
    4117         ulcrop: ulcrop,
    4118         ultri: ultri,
    4119         Umacr: Umacr,
    4120         umacr: umacr,
    4121         uml: uml,
    4122         UnderBar: UnderBar,
    4123         UnderBrace: UnderBrace,
    4124         UnderBracket: UnderBracket,
    4125         UnderParenthesis: UnderParenthesis,
    4126         Union: Union,
    4127         UnionPlus: UnionPlus,
    4128         Uogon: Uogon,
    4129         uogon: uogon,
    4130         Uopf: Uopf,
    4131         uopf: uopf,
    4132         UpArrowBar: UpArrowBar,
    4133         uparrow: uparrow,
    4134         UpArrow: UpArrow,
    4135         Uparrow: Uparrow,
    4136         UpArrowDownArrow: UpArrowDownArrow,
    4137         updownarrow: updownarrow,
    4138         UpDownArrow: UpDownArrow,
    4139         Updownarrow: Updownarrow,
    4140         UpEquilibrium: UpEquilibrium,
    4141         upharpoonleft: upharpoonleft,
    4142         upharpoonright: upharpoonright,
    4143         uplus: uplus,
    4144         UpperLeftArrow: UpperLeftArrow,
    4145         UpperRightArrow: UpperRightArrow,
    4146         upsi: upsi,
    4147         Upsi: Upsi,
    4148         upsih: upsih,
    4149         Upsilon: Upsilon,
    4150         upsilon: upsilon,
    4151         UpTeeArrow: UpTeeArrow,
    4152         UpTee: UpTee,
    4153         upuparrows: upuparrows,
    4154         urcorn: urcorn,
    4155         urcorner: urcorner,
    4156         urcrop: urcrop,
    4157         Uring: Uring,
    4158         uring: uring,
    4159         urtri: urtri,
    4160         Uscr: Uscr,
    4161         uscr: uscr,
    4162         utdot: utdot,
    4163         Utilde: Utilde,
    4164         utilde: utilde,
    4165         utri: utri,
    4166         utrif: utrif,
    4167         uuarr: uuarr,
    4168         Uuml: Uuml,
    4169         uuml: uuml,
    4170         uwangle: uwangle,
    4171         vangrt: vangrt,
    4172         varepsilon: varepsilon,
    4173         varkappa: varkappa,
    4174         varnothing: varnothing,
    4175         varphi: varphi,
    4176         varpi: varpi,
    4177         varpropto: varpropto,
    4178         varr: varr,
    4179         vArr: vArr,
    4180         varrho: varrho,
    4181         varsigma: varsigma,
    4182         varsubsetneq: varsubsetneq,
    4183         varsubsetneqq: varsubsetneqq,
    4184         varsupsetneq: varsupsetneq,
    4185         varsupsetneqq: varsupsetneqq,
    4186         vartheta: vartheta,
    4187         vartriangleleft: vartriangleleft,
    4188         vartriangleright: vartriangleright,
    4189         vBar: vBar,
    4190         Vbar: Vbar,
    4191         vBarv: vBarv,
    4192         Vcy: Vcy,
    4193         vcy: vcy,
    4194         vdash: vdash,
    4195         vDash: vDash,
    4196         Vdash: Vdash,
    4197         VDash: VDash,
    4198         Vdashl: Vdashl,
    4199         veebar: veebar,
    4200         vee: vee,
    4201         Vee: Vee,
    4202         veeeq: veeeq,
    4203         vellip: vellip,
    4204         verbar: verbar,
    4205         Verbar: Verbar,
    4206         vert: vert,
    4207         Vert: Vert,
    4208         VerticalBar: VerticalBar,
    4209         VerticalLine: VerticalLine,
    4210         VerticalSeparator: VerticalSeparator,
    4211         VerticalTilde: VerticalTilde,
    4212         VeryThinSpace: VeryThinSpace,
    4213         Vfr: Vfr,
    4214         vfr: vfr,
    4215         vltri: vltri,
    4216         vnsub: vnsub,
    4217         vnsup: vnsup,
    4218         Vopf: Vopf,
    4219         vopf: vopf,
    4220         vprop: vprop,
    4221         vrtri: vrtri,
    4222         Vscr: Vscr,
    4223         vscr: vscr,
    4224         vsubnE: vsubnE,
    4225         vsubne: vsubne,
    4226         vsupnE: vsupnE,
    4227         vsupne: vsupne,
    4228         Vvdash: Vvdash,
    4229         vzigzag: vzigzag,
    4230         Wcirc: Wcirc,
    4231         wcirc: wcirc,
    4232         wedbar: wedbar,
    4233         wedge: wedge,
    4234         Wedge: Wedge,
    4235         wedgeq: wedgeq,
    4236         weierp: weierp,
    4237         Wfr: Wfr,
    4238         wfr: wfr,
    4239         Wopf: Wopf,
    4240         wopf: wopf,
    4241         wp: wp,
    4242         wr: wr,
    4243         wreath: wreath,
    4244         Wscr: Wscr,
    4245         wscr: wscr,
    4246         xcap: xcap,
    4247         xcirc: xcirc,
    4248         xcup: xcup,
    4249         xdtri: xdtri,
    4250         Xfr: Xfr,
    4251         xfr: xfr,
    4252         xharr: xharr,
    4253         xhArr: xhArr,
    4254         Xi: Xi,
    4255         xi: xi,
    4256         xlarr: xlarr,
    4257         xlArr: xlArr,
    4258         xmap: xmap,
    4259         xnis: xnis,
    4260         xodot: xodot,
    4261         Xopf: Xopf,
    4262         xopf: xopf,
    4263         xoplus: xoplus,
    4264         xotime: xotime,
    4265         xrarr: xrarr,
    4266         xrArr: xrArr,
    4267         Xscr: Xscr,
    4268         xscr: xscr,
    4269         xsqcup: xsqcup,
    4270         xuplus: xuplus,
    4271         xutri: xutri,
    4272         xvee: xvee,
    4273         xwedge: xwedge,
    4274         Yacute: Yacute,
    4275         yacute: yacute,
    4276         YAcy: YAcy,
    4277         yacy: yacy,
    4278         Ycirc: Ycirc,
    4279         ycirc: ycirc,
    4280         Ycy: Ycy,
    4281         ycy: ycy,
    4282         yen: yen,
    4283         Yfr: Yfr,
    4284         yfr: yfr,
    4285         YIcy: YIcy,
    4286         yicy: yicy,
    4287         Yopf: Yopf,
    4288         yopf: yopf,
    4289         Yscr: Yscr,
    4290         yscr: yscr,
    4291         YUcy: YUcy,
    4292         yucy: yucy,
    4293         yuml: yuml,
    4294         Yuml: Yuml,
    4295         Zacute: Zacute,
    4296         zacute: zacute,
    4297         Zcaron: Zcaron,
    4298         zcaron: zcaron,
    4299         Zcy: Zcy,
    4300         zcy: zcy,
    4301         Zdot: Zdot,
    4302         zdot: zdot,
    4303         zeetrf: zeetrf,
    4304         ZeroWidthSpace: ZeroWidthSpace,
    4305         Zeta: Zeta,
    4306         zeta: zeta,
    4307         zfr: zfr,
    4308         Zfr: Zfr,
    4309         ZHcy: ZHcy,
    4310         zhcy: zhcy,
    4311         zigrarr: zigrarr,
    4312         zopf: zopf,
    4313         Zopf: Zopf,
    4314         Zscr: Zscr,
    4315         zscr: zscr,
    4316         zwj: zwj,
    4317         zwnj: zwnj
    4318 };
    4319 
    4320 var entities$1 = {
    4321         __proto__: null,
    4322         Aacute: Aacute,
    4323         aacute: aacute,
    4324         Abreve: Abreve,
    4325         abreve: abreve,
    4326         ac: ac,
    4327         acd: acd,
    4328         acE: acE,
    4329         Acirc: Acirc,
    4330         acirc: acirc,
    4331         acute: acute,
    4332         Acy: Acy,
    4333         acy: acy,
    4334         AElig: AElig,
    4335         aelig: aelig,
    4336         af: af,
    4337         Afr: Afr,
    4338         afr: afr,
    4339         Agrave: Agrave,
    4340         agrave: agrave,
    4341         alefsym: alefsym,
    4342         aleph: aleph,
    4343         Alpha: Alpha,
    4344         alpha: alpha,
    4345         Amacr: Amacr,
    4346         amacr: amacr,
    4347         amalg: amalg,
    4348         amp: amp,
    4349         AMP: AMP,
    4350         andand: andand,
    4351         And: And,
    4352         and: and,
    4353         andd: andd,
    4354         andslope: andslope,
    4355         andv: andv,
    4356         ang: ang,
    4357         ange: ange,
    4358         angle: angle,
    4359         angmsdaa: angmsdaa,
    4360         angmsdab: angmsdab,
    4361         angmsdac: angmsdac,
    4362         angmsdad: angmsdad,
    4363         angmsdae: angmsdae,
    4364         angmsdaf: angmsdaf,
    4365         angmsdag: angmsdag,
    4366         angmsdah: angmsdah,
    4367         angmsd: angmsd,
    4368         angrt: angrt,
    4369         angrtvb: angrtvb,
    4370         angrtvbd: angrtvbd,
    4371         angsph: angsph,
    4372         angst: angst,
    4373         angzarr: angzarr,
    4374         Aogon: Aogon,
    4375         aogon: aogon,
    4376         Aopf: Aopf,
    4377         aopf: aopf,
    4378         apacir: apacir,
    4379         ap: ap,
    4380         apE: apE,
    4381         ape: ape,
    4382         apid: apid,
    4383         apos: apos,
    4384         ApplyFunction: ApplyFunction,
    4385         approx: approx,
    4386         approxeq: approxeq,
    4387         Aring: Aring,
    4388         aring: aring,
    4389         Ascr: Ascr,
    4390         ascr: ascr,
    4391         Assign: Assign,
    4392         ast: ast,
    4393         asymp: asymp,
    4394         asympeq: asympeq,
    4395         Atilde: Atilde,
    4396         atilde: atilde,
    4397         Auml: Auml,
    4398         auml: auml,
    4399         awconint: awconint,
    4400         awint: awint,
    4401         backcong: backcong,
    4402         backepsilon: backepsilon,
    4403         backprime: backprime,
    4404         backsim: backsim,
    4405         backsimeq: backsimeq,
    4406         Backslash: Backslash,
    4407         Barv: Barv,
    4408         barvee: barvee,
    4409         barwed: barwed,
    4410         Barwed: Barwed,
    4411         barwedge: barwedge,
    4412         bbrk: bbrk,
    4413         bbrktbrk: bbrktbrk,
    4414         bcong: bcong,
    4415         Bcy: Bcy,
    4416         bcy: bcy,
    4417         bdquo: bdquo,
    4418         becaus: becaus,
    4419         because: because,
    4420         Because: Because,
    4421         bemptyv: bemptyv,
    4422         bepsi: bepsi,
    4423         bernou: bernou,
    4424         Bernoullis: Bernoullis,
    4425         Beta: Beta,
    4426         beta: beta,
    4427         beth: beth,
    4428         between: between,
    4429         Bfr: Bfr,
    4430         bfr: bfr,
    4431         bigcap: bigcap,
    4432         bigcirc: bigcirc,
    4433         bigcup: bigcup,
    4434         bigodot: bigodot,
    4435         bigoplus: bigoplus,
    4436         bigotimes: bigotimes,
    4437         bigsqcup: bigsqcup,
    4438         bigstar: bigstar,
    4439         bigtriangledown: bigtriangledown,
    4440         bigtriangleup: bigtriangleup,
    4441         biguplus: biguplus,
    4442         bigvee: bigvee,
    4443         bigwedge: bigwedge,
    4444         bkarow: bkarow,
    4445         blacklozenge: blacklozenge,
    4446         blacksquare: blacksquare,
    4447         blacktriangle: blacktriangle,
    4448         blacktriangledown: blacktriangledown,
    4449         blacktriangleleft: blacktriangleleft,
    4450         blacktriangleright: blacktriangleright,
    4451         blank: blank,
    4452         blk12: blk12,
    4453         blk14: blk14,
    4454         blk34: blk34,
    4455         block: block,
    4456         bne: bne,
    4457         bnequiv: bnequiv,
    4458         bNot: bNot,
    4459         bnot: bnot,
    4460         Bopf: Bopf,
    4461         bopf: bopf,
    4462         bot: bot,
    4463         bottom: bottom,
    4464         bowtie: bowtie,
    4465         boxbox: boxbox,
    4466         boxdl: boxdl,
    4467         boxdL: boxdL,
    4468         boxDl: boxDl,
    4469         boxDL: boxDL,
    4470         boxdr: boxdr,
    4471         boxdR: boxdR,
    4472         boxDr: boxDr,
    4473         boxDR: boxDR,
    4474         boxh: boxh,
    4475         boxH: boxH,
    4476         boxhd: boxhd,
    4477         boxHd: boxHd,
    4478         boxhD: boxhD,
    4479         boxHD: boxHD,
    4480         boxhu: boxhu,
    4481         boxHu: boxHu,
    4482         boxhU: boxhU,
    4483         boxHU: boxHU,
    4484         boxminus: boxminus,
    4485         boxplus: boxplus,
    4486         boxtimes: boxtimes,
    4487         boxul: boxul,
    4488         boxuL: boxuL,
    4489         boxUl: boxUl,
    4490         boxUL: boxUL,
    4491         boxur: boxur,
    4492         boxuR: boxuR,
    4493         boxUr: boxUr,
    4494         boxUR: boxUR,
    4495         boxv: boxv,
    4496         boxV: boxV,
    4497         boxvh: boxvh,
    4498         boxvH: boxvH,
    4499         boxVh: boxVh,
    4500         boxVH: boxVH,
    4501         boxvl: boxvl,
    4502         boxvL: boxvL,
    4503         boxVl: boxVl,
    4504         boxVL: boxVL,
    4505         boxvr: boxvr,
    4506         boxvR: boxvR,
    4507         boxVr: boxVr,
    4508         boxVR: boxVR,
    4509         bprime: bprime,
    4510         breve: breve,
    4511         Breve: Breve,
    4512         brvbar: brvbar,
    4513         bscr: bscr,
    4514         Bscr: Bscr,
    4515         bsemi: bsemi,
    4516         bsim: bsim,
    4517         bsime: bsime,
    4518         bsolb: bsolb,
    4519         bsol: bsol,
    4520         bsolhsub: bsolhsub,
    4521         bull: bull,
    4522         bullet: bullet,
    4523         bump: bump,
    4524         bumpE: bumpE,
    4525         bumpe: bumpe,
    4526         Bumpeq: Bumpeq,
    4527         bumpeq: bumpeq,
    4528         Cacute: Cacute,
    4529         cacute: cacute,
    4530         capand: capand,
    4531         capbrcup: capbrcup,
    4532         capcap: capcap,
    4533         cap: cap,
    4534         Cap: Cap,
    4535         capcup: capcup,
    4536         capdot: capdot,
    4537         CapitalDifferentialD: CapitalDifferentialD,
    4538         caps: caps,
    4539         caret: caret,
    4540         caron: caron,
    4541         Cayleys: Cayleys,
    4542         ccaps: ccaps,
    4543         Ccaron: Ccaron,
    4544         ccaron: ccaron,
    4545         Ccedil: Ccedil,
    4546         ccedil: ccedil,
    4547         Ccirc: Ccirc,
    4548         ccirc: ccirc,
    4549         Cconint: Cconint,
    4550         ccups: ccups,
    4551         ccupssm: ccupssm,
    4552         Cdot: Cdot,
    4553         cdot: cdot,
    4554         cedil: cedil,
    4555         Cedilla: Cedilla,
    4556         cemptyv: cemptyv,
    4557         cent: cent,
    4558         centerdot: centerdot,
    4559         CenterDot: CenterDot,
    4560         cfr: cfr,
    4561         Cfr: Cfr,
    4562         CHcy: CHcy,
    4563         chcy: chcy,
    4564         check: check,
    4565         checkmark: checkmark,
    4566         Chi: Chi,
    4567         chi: chi,
    4568         circ: circ,
    4569         circeq: circeq,
    4570         circlearrowleft: circlearrowleft,
    4571         circlearrowright: circlearrowright,
    4572         circledast: circledast,
    4573         circledcirc: circledcirc,
    4574         circleddash: circleddash,
    4575         CircleDot: CircleDot,
    4576         circledR: circledR,
    4577         circledS: circledS,
    4578         CircleMinus: CircleMinus,
    4579         CirclePlus: CirclePlus,
    4580         CircleTimes: CircleTimes,
    4581         cir: cir,
    4582         cirE: cirE,
    4583         cire: cire,
    4584         cirfnint: cirfnint,
    4585         cirmid: cirmid,
    4586         cirscir: cirscir,
    4587         ClockwiseContourIntegral: ClockwiseContourIntegral,
    4588         CloseCurlyDoubleQuote: CloseCurlyDoubleQuote,
    4589         CloseCurlyQuote: CloseCurlyQuote,
    4590         clubs: clubs,
    4591         clubsuit: clubsuit,
    4592         colon: colon,
    4593         Colon: Colon,
    4594         Colone: Colone,
    4595         colone: colone,
    4596         coloneq: coloneq,
    4597         comma: comma,
    4598         commat: commat,
    4599         comp: comp,
    4600         compfn: compfn,
    4601         complement: complement,
    4602         complexes: complexes,
    4603         cong: cong,
    4604         congdot: congdot,
    4605         Congruent: Congruent,
    4606         conint: conint,
    4607         Conint: Conint,
    4608         ContourIntegral: ContourIntegral,
    4609         copf: copf,
    4610         Copf: Copf,
    4611         coprod: coprod,
    4612         Coproduct: Coproduct,
    4613         copy: copy,
    4614         COPY: COPY,
    4615         copysr: copysr,
    4616         CounterClockwiseContourIntegral: CounterClockwiseContourIntegral,
    4617         crarr: crarr,
    4618         cross: cross,
    4619         Cross: Cross,
    4620         Cscr: Cscr,
    4621         cscr: cscr,
    4622         csub: csub,
    4623         csube: csube,
    4624         csup: csup,
    4625         csupe: csupe,
    4626         ctdot: ctdot,
    4627         cudarrl: cudarrl,
    4628         cudarrr: cudarrr,
    4629         cuepr: cuepr,
    4630         cuesc: cuesc,
    4631         cularr: cularr,
    4632         cularrp: cularrp,
    4633         cupbrcap: cupbrcap,
    4634         cupcap: cupcap,
    4635         CupCap: CupCap,
    4636         cup: cup,
    4637         Cup: Cup,
    4638         cupcup: cupcup,
    4639         cupdot: cupdot,
    4640         cupor: cupor,
    4641         cups: cups,
    4642         curarr: curarr,
    4643         curarrm: curarrm,
    4644         curlyeqprec: curlyeqprec,
    4645         curlyeqsucc: curlyeqsucc,
    4646         curlyvee: curlyvee,
    4647         curlywedge: curlywedge,
    4648         curren: curren,
    4649         curvearrowleft: curvearrowleft,
    4650         curvearrowright: curvearrowright,
    4651         cuvee: cuvee,
    4652         cuwed: cuwed,
    4653         cwconint: cwconint,
    4654         cwint: cwint,
    4655         cylcty: cylcty,
    4656         dagger: dagger,
    4657         Dagger: Dagger,
    4658         daleth: daleth,
    4659         darr: darr,
    4660         Darr: Darr,
    4661         dArr: dArr,
    4662         dash: dash,
    4663         Dashv: Dashv,
    4664         dashv: dashv,
    4665         dbkarow: dbkarow,
    4666         dblac: dblac,
    4667         Dcaron: Dcaron,
    4668         dcaron: dcaron,
    4669         Dcy: Dcy,
    4670         dcy: dcy,
    4671         ddagger: ddagger,
    4672         ddarr: ddarr,
    4673         DD: DD,
    4674         dd: dd,
    4675         DDotrahd: DDotrahd,
    4676         ddotseq: ddotseq,
    4677         deg: deg,
    4678         Del: Del,
    4679         Delta: Delta,
    4680         delta: delta,
    4681         demptyv: demptyv,
    4682         dfisht: dfisht,
    4683         Dfr: Dfr,
    4684         dfr: dfr,
    4685         dHar: dHar,
    4686         dharl: dharl,
    4687         dharr: dharr,
    4688         DiacriticalAcute: DiacriticalAcute,
    4689         DiacriticalDot: DiacriticalDot,
    4690         DiacriticalDoubleAcute: DiacriticalDoubleAcute,
    4691         DiacriticalGrave: DiacriticalGrave,
    4692         DiacriticalTilde: DiacriticalTilde,
    4693         diam: diam,
    4694         diamond: diamond,
    4695         Diamond: Diamond,
    4696         diamondsuit: diamondsuit,
    4697         diams: diams,
    4698         die: die,
    4699         DifferentialD: DifferentialD,
    4700         digamma: digamma,
    4701         disin: disin,
    4702         div: div,
    4703         divide: divide,
    4704         divideontimes: divideontimes,
    4705         divonx: divonx,
    4706         DJcy: DJcy,
    4707         djcy: djcy,
    4708         dlcorn: dlcorn,
    4709         dlcrop: dlcrop,
    4710         dollar: dollar,
    4711         Dopf: Dopf,
    4712         dopf: dopf,
    4713         Dot: Dot,
    4714         dot: dot,
    4715         DotDot: DotDot,
    4716         doteq: doteq,
    4717         doteqdot: doteqdot,
    4718         DotEqual: DotEqual,
    4719         dotminus: dotminus,
    4720         dotplus: dotplus,
    4721         dotsquare: dotsquare,
    4722         doublebarwedge: doublebarwedge,
    4723         DoubleContourIntegral: DoubleContourIntegral,
    4724         DoubleDot: DoubleDot,
    4725         DoubleDownArrow: DoubleDownArrow,
    4726         DoubleLeftArrow: DoubleLeftArrow,
    4727         DoubleLeftRightArrow: DoubleLeftRightArrow,
    4728         DoubleLeftTee: DoubleLeftTee,
    4729         DoubleLongLeftArrow: DoubleLongLeftArrow,
    4730         DoubleLongLeftRightArrow: DoubleLongLeftRightArrow,
    4731         DoubleLongRightArrow: DoubleLongRightArrow,
    4732         DoubleRightArrow: DoubleRightArrow,
    4733         DoubleRightTee: DoubleRightTee,
    4734         DoubleUpArrow: DoubleUpArrow,
    4735         DoubleUpDownArrow: DoubleUpDownArrow,
    4736         DoubleVerticalBar: DoubleVerticalBar,
    4737         DownArrowBar: DownArrowBar,
    4738         downarrow: downarrow,
    4739         DownArrow: DownArrow,
    4740         Downarrow: Downarrow,
    4741         DownArrowUpArrow: DownArrowUpArrow,
    4742         DownBreve: DownBreve,
    4743         downdownarrows: downdownarrows,
    4744         downharpoonleft: downharpoonleft,
    4745         downharpoonright: downharpoonright,
    4746         DownLeftRightVector: DownLeftRightVector,
    4747         DownLeftTeeVector: DownLeftTeeVector,
    4748         DownLeftVectorBar: DownLeftVectorBar,
    4749         DownLeftVector: DownLeftVector,
    4750         DownRightTeeVector: DownRightTeeVector,
    4751         DownRightVectorBar: DownRightVectorBar,
    4752         DownRightVector: DownRightVector,
    4753         DownTeeArrow: DownTeeArrow,
    4754         DownTee: DownTee,
    4755         drbkarow: drbkarow,
    4756         drcorn: drcorn,
    4757         drcrop: drcrop,
    4758         Dscr: Dscr,
    4759         dscr: dscr,
    4760         DScy: DScy,
    4761         dscy: dscy,
    4762         dsol: dsol,
    4763         Dstrok: Dstrok,
    4764         dstrok: dstrok,
    4765         dtdot: dtdot,
    4766         dtri: dtri,
    4767         dtrif: dtrif,
    4768         duarr: duarr,
    4769         duhar: duhar,
    4770         dwangle: dwangle,
    4771         DZcy: DZcy,
    4772         dzcy: dzcy,
    4773         dzigrarr: dzigrarr,
    4774         Eacute: Eacute,
    4775         eacute: eacute,
    4776         easter: easter,
    4777         Ecaron: Ecaron,
    4778         ecaron: ecaron,
    4779         Ecirc: Ecirc,
    4780         ecirc: ecirc,
    4781         ecir: ecir,
    4782         ecolon: ecolon,
    4783         Ecy: Ecy,
    4784         ecy: ecy,
    4785         eDDot: eDDot,
    4786         Edot: Edot,
    4787         edot: edot,
    4788         eDot: eDot,
    4789         ee: ee,
    4790         efDot: efDot,
    4791         Efr: Efr,
    4792         efr: efr,
    4793         eg: eg,
    4794         Egrave: Egrave,
    4795         egrave: egrave,
    4796         egs: egs,
    4797         egsdot: egsdot,
    4798         el: el,
    4799         Element: Element,
    4800         elinters: elinters,
    4801         ell: ell,
    4802         els: els,
    4803         elsdot: elsdot,
    4804         Emacr: Emacr,
    4805         emacr: emacr,
    4806         empty: empty,
    4807         emptyset: emptyset,
    4808         EmptySmallSquare: EmptySmallSquare,
    4809         emptyv: emptyv,
    4810         EmptyVerySmallSquare: EmptyVerySmallSquare,
    4811         emsp13: emsp13,
    4812         emsp14: emsp14,
    4813         emsp: emsp,
    4814         ENG: ENG,
    4815         eng: eng,
    4816         ensp: ensp,
    4817         Eogon: Eogon,
    4818         eogon: eogon,
    4819         Eopf: Eopf,
    4820         eopf: eopf,
    4821         epar: epar,
    4822         eparsl: eparsl,
    4823         eplus: eplus,
    4824         epsi: epsi,
    4825         Epsilon: Epsilon,
    4826         epsilon: epsilon,
    4827         epsiv: epsiv,
    4828         eqcirc: eqcirc,
    4829         eqcolon: eqcolon,
    4830         eqsim: eqsim,
    4831         eqslantgtr: eqslantgtr,
    4832         eqslantless: eqslantless,
    4833         Equal: Equal,
    4834         equals: equals,
    4835         EqualTilde: EqualTilde,
    4836         equest: equest,
    4837         Equilibrium: Equilibrium,
    4838         equiv: equiv,
    4839         equivDD: equivDD,
    4840         eqvparsl: eqvparsl,
    4841         erarr: erarr,
    4842         erDot: erDot,
    4843         escr: escr,
    4844         Escr: Escr,
    4845         esdot: esdot,
    4846         Esim: Esim,
    4847         esim: esim,
    4848         Eta: Eta,
    4849         eta: eta,
    4850         ETH: ETH,
    4851         eth: eth,
    4852         Euml: Euml,
    4853         euml: euml,
    4854         euro: euro,
    4855         excl: excl,
    4856         exist: exist,
    4857         Exists: Exists,
    4858         expectation: expectation,
    4859         exponentiale: exponentiale,
    4860         ExponentialE: ExponentialE,
    4861         fallingdotseq: fallingdotseq,
    4862         Fcy: Fcy,
    4863         fcy: fcy,
    4864         female: female,
    4865         ffilig: ffilig,
    4866         fflig: fflig,
    4867         ffllig: ffllig,
    4868         Ffr: Ffr,
    4869         ffr: ffr,
    4870         filig: filig,
    4871         FilledSmallSquare: FilledSmallSquare,
    4872         FilledVerySmallSquare: FilledVerySmallSquare,
    4873         fjlig: fjlig,
    4874         flat: flat,
    4875         fllig: fllig,
    4876         fltns: fltns,
    4877         fnof: fnof,
    4878         Fopf: Fopf,
    4879         fopf: fopf,
    4880         forall: forall,
    4881         ForAll: ForAll,
    4882         fork: fork,
    4883         forkv: forkv,
    4884         Fouriertrf: Fouriertrf,
    4885         fpartint: fpartint,
    4886         frac12: frac12,
    4887         frac13: frac13,
    4888         frac14: frac14,
    4889         frac15: frac15,
    4890         frac16: frac16,
    4891         frac18: frac18,
    4892         frac23: frac23,
    4893         frac25: frac25,
    4894         frac34: frac34,
    4895         frac35: frac35,
    4896         frac38: frac38,
    4897         frac45: frac45,
    4898         frac56: frac56,
    4899         frac58: frac58,
    4900         frac78: frac78,
    4901         frasl: frasl,
    4902         frown: frown,
    4903         fscr: fscr,
    4904         Fscr: Fscr,
    4905         gacute: gacute,
    4906         Gamma: Gamma,
    4907         gamma: gamma,
    4908         Gammad: Gammad,
    4909         gammad: gammad,
    4910         gap: gap,
    4911         Gbreve: Gbreve,
    4912         gbreve: gbreve,
    4913         Gcedil: Gcedil,
    4914         Gcirc: Gcirc,
    4915         gcirc: gcirc,
    4916         Gcy: Gcy,
    4917         gcy: gcy,
    4918         Gdot: Gdot,
    4919         gdot: gdot,
    4920         ge: ge,
    4921         gE: gE,
    4922         gEl: gEl,
    4923         gel: gel,
    4924         geq: geq,
    4925         geqq: geqq,
    4926         geqslant: geqslant,
    4927         gescc: gescc,
    4928         ges: ges,
    4929         gesdot: gesdot,
    4930         gesdoto: gesdoto,
    4931         gesdotol: gesdotol,
    4932         gesl: gesl,
    4933         gesles: gesles,
    4934         Gfr: Gfr,
    4935         gfr: gfr,
    4936         gg: gg,
    4937         Gg: Gg,
    4938         ggg: ggg,
    4939         gimel: gimel,
    4940         GJcy: GJcy,
    4941         gjcy: gjcy,
    4942         gla: gla,
    4943         gl: gl,
    4944         glE: glE,
    4945         glj: glj,
    4946         gnap: gnap,
    4947         gnapprox: gnapprox,
    4948         gne: gne,
    4949         gnE: gnE,
    4950         gneq: gneq,
    4951         gneqq: gneqq,
    4952         gnsim: gnsim,
    4953         Gopf: Gopf,
    4954         gopf: gopf,
    4955         grave: grave,
    4956         GreaterEqual: GreaterEqual,
    4957         GreaterEqualLess: GreaterEqualLess,
    4958         GreaterFullEqual: GreaterFullEqual,
    4959         GreaterGreater: GreaterGreater,
    4960         GreaterLess: GreaterLess,
    4961         GreaterSlantEqual: GreaterSlantEqual,
    4962         GreaterTilde: GreaterTilde,
    4963         Gscr: Gscr,
    4964         gscr: gscr,
    4965         gsim: gsim,
    4966         gsime: gsime,
    4967         gsiml: gsiml,
    4968         gtcc: gtcc,
    4969         gtcir: gtcir,
    4970         gt: gt,
    4971         GT: GT,
    4972         Gt: Gt,
    4973         gtdot: gtdot,
    4974         gtlPar: gtlPar,
    4975         gtquest: gtquest,
    4976         gtrapprox: gtrapprox,
    4977         gtrarr: gtrarr,
    4978         gtrdot: gtrdot,
    4979         gtreqless: gtreqless,
    4980         gtreqqless: gtreqqless,
    4981         gtrless: gtrless,
    4982         gtrsim: gtrsim,
    4983         gvertneqq: gvertneqq,
    4984         gvnE: gvnE,
    4985         Hacek: Hacek,
    4986         hairsp: hairsp,
    4987         half: half,
    4988         hamilt: hamilt,
    4989         HARDcy: HARDcy,
    4990         hardcy: hardcy,
    4991         harrcir: harrcir,
    4992         harr: harr,
    4993         hArr: hArr,
    4994         harrw: harrw,
    4995         Hat: Hat,
    4996         hbar: hbar,
    4997         Hcirc: Hcirc,
    4998         hcirc: hcirc,
    4999         hearts: hearts,
    5000         heartsuit: heartsuit,
    5001         hellip: hellip,
    5002         hercon: hercon,
    5003         hfr: hfr,
    5004         Hfr: Hfr,
    5005         HilbertSpace: HilbertSpace,
    5006         hksearow: hksearow,
    5007         hkswarow: hkswarow,
    5008         hoarr: hoarr,
    5009         homtht: homtht,
    5010         hookleftarrow: hookleftarrow,
    5011         hookrightarrow: hookrightarrow,
    5012         hopf: hopf,
    5013         Hopf: Hopf,
    5014         horbar: horbar,
    5015         HorizontalLine: HorizontalLine,
    5016         hscr: hscr,
    5017         Hscr: Hscr,
    5018         hslash: hslash,
    5019         Hstrok: Hstrok,
    5020         hstrok: hstrok,
    5021         HumpDownHump: HumpDownHump,
    5022         HumpEqual: HumpEqual,
    5023         hybull: hybull,
    5024         hyphen: hyphen,
    5025         Iacute: Iacute,
    5026         iacute: iacute,
    5027         ic: ic,
    5028         Icirc: Icirc,
    5029         icirc: icirc,
    5030         Icy: Icy,
    5031         icy: icy,
    5032         Idot: Idot,
    5033         IEcy: IEcy,
    5034         iecy: iecy,
    5035         iexcl: iexcl,
    5036         iff: iff,
    5037         ifr: ifr,
    5038         Ifr: Ifr,
    5039         Igrave: Igrave,
    5040         igrave: igrave,
    5041         ii: ii,
    5042         iiiint: iiiint,
    5043         iiint: iiint,
    5044         iinfin: iinfin,
    5045         iiota: iiota,
    5046         IJlig: IJlig,
    5047         ijlig: ijlig,
    5048         Imacr: Imacr,
    5049         imacr: imacr,
    5050         image: image,
    5051         ImaginaryI: ImaginaryI,
    5052         imagline: imagline,
    5053         imagpart: imagpart,
    5054         imath: imath,
    5055         Im: Im,
    5056         imof: imof,
    5057         imped: imped,
    5058         Implies: Implies,
    5059         incare: incare,
    5060         infin: infin,
    5061         infintie: infintie,
    5062         inodot: inodot,
    5063         intcal: intcal,
    5064         int: int,
    5065         Int: Int,
    5066         integers: integers,
    5067         Integral: Integral,
    5068         intercal: intercal,
    5069         Intersection: Intersection,
    5070         intlarhk: intlarhk,
    5071         intprod: intprod,
    5072         InvisibleComma: InvisibleComma,
    5073         InvisibleTimes: InvisibleTimes,
    5074         IOcy: IOcy,
    5075         iocy: iocy,
    5076         Iogon: Iogon,
    5077         iogon: iogon,
    5078         Iopf: Iopf,
    5079         iopf: iopf,
    5080         Iota: Iota,
    5081         iota: iota,
    5082         iprod: iprod,
    5083         iquest: iquest,
    5084         iscr: iscr,
    5085         Iscr: Iscr,
    5086         isin: isin,
    5087         isindot: isindot,
    5088         isinE: isinE,
    5089         isins: isins,
    5090         isinsv: isinsv,
    5091         isinv: isinv,
    5092         it: it,
    5093         Itilde: Itilde,
    5094         itilde: itilde,
    5095         Iukcy: Iukcy,
    5096         iukcy: iukcy,
    5097         Iuml: Iuml,
    5098         iuml: iuml,
    5099         Jcirc: Jcirc,
    5100         jcirc: jcirc,
    5101         Jcy: Jcy,
    5102         jcy: jcy,
    5103         Jfr: Jfr,
    5104         jfr: jfr,
    5105         jmath: jmath,
    5106         Jopf: Jopf,
    5107         jopf: jopf,
    5108         Jscr: Jscr,
    5109         jscr: jscr,
    5110         Jsercy: Jsercy,
    5111         jsercy: jsercy,
    5112         Jukcy: Jukcy,
    5113         jukcy: jukcy,
    5114         Kappa: Kappa,
    5115         kappa: kappa,
    5116         kappav: kappav,
    5117         Kcedil: Kcedil,
    5118         kcedil: kcedil,
    5119         Kcy: Kcy,
    5120         kcy: kcy,
    5121         Kfr: Kfr,
    5122         kfr: kfr,
    5123         kgreen: kgreen,
    5124         KHcy: KHcy,
    5125         khcy: khcy,
    5126         KJcy: KJcy,
    5127         kjcy: kjcy,
    5128         Kopf: Kopf,
    5129         kopf: kopf,
    5130         Kscr: Kscr,
    5131         kscr: kscr,
    5132         lAarr: lAarr,
    5133         Lacute: Lacute,
    5134         lacute: lacute,
    5135         laemptyv: laemptyv,
    5136         lagran: lagran,
    5137         Lambda: Lambda,
    5138         lambda: lambda,
    5139         lang: lang,
    5140         Lang: Lang,
    5141         langd: langd,
    5142         langle: langle,
    5143         lap: lap,
    5144         Laplacetrf: Laplacetrf,
    5145         laquo: laquo,
    5146         larrb: larrb,
    5147         larrbfs: larrbfs,
    5148         larr: larr,
    5149         Larr: Larr,
    5150         lArr: lArr,
    5151         larrfs: larrfs,
    5152         larrhk: larrhk,
    5153         larrlp: larrlp,
    5154         larrpl: larrpl,
    5155         larrsim: larrsim,
    5156         larrtl: larrtl,
    5157         latail: latail,
    5158         lAtail: lAtail,
    5159         lat: lat,
    5160         late: late,
    5161         lates: lates,
    5162         lbarr: lbarr,
    5163         lBarr: lBarr,
    5164         lbbrk: lbbrk,
    5165         lbrace: lbrace,
    5166         lbrack: lbrack,
    5167         lbrke: lbrke,
    5168         lbrksld: lbrksld,
    5169         lbrkslu: lbrkslu,
    5170         Lcaron: Lcaron,
    5171         lcaron: lcaron,
    5172         Lcedil: Lcedil,
    5173         lcedil: lcedil,
    5174         lceil: lceil,
    5175         lcub: lcub,
    5176         Lcy: Lcy,
    5177         lcy: lcy,
    5178         ldca: ldca,
    5179         ldquo: ldquo,
    5180         ldquor: ldquor,
    5181         ldrdhar: ldrdhar,
    5182         ldrushar: ldrushar,
    5183         ldsh: ldsh,
    5184         le: le,
    5185         lE: lE,
    5186         LeftAngleBracket: LeftAngleBracket,
    5187         LeftArrowBar: LeftArrowBar,
    5188         leftarrow: leftarrow,
    5189         LeftArrow: LeftArrow,
    5190         Leftarrow: Leftarrow,
    5191         LeftArrowRightArrow: LeftArrowRightArrow,
    5192         leftarrowtail: leftarrowtail,
    5193         LeftCeiling: LeftCeiling,
    5194         LeftDoubleBracket: LeftDoubleBracket,
    5195         LeftDownTeeVector: LeftDownTeeVector,
    5196         LeftDownVectorBar: LeftDownVectorBar,
    5197         LeftDownVector: LeftDownVector,
    5198         LeftFloor: LeftFloor,
    5199         leftharpoondown: leftharpoondown,
    5200         leftharpoonup: leftharpoonup,
    5201         leftleftarrows: leftleftarrows,
    5202         leftrightarrow: leftrightarrow,
    5203         LeftRightArrow: LeftRightArrow,
    5204         Leftrightarrow: Leftrightarrow,
    5205         leftrightarrows: leftrightarrows,
    5206         leftrightharpoons: leftrightharpoons,
    5207         leftrightsquigarrow: leftrightsquigarrow,
    5208         LeftRightVector: LeftRightVector,
    5209         LeftTeeArrow: LeftTeeArrow,
    5210         LeftTee: LeftTee,
    5211         LeftTeeVector: LeftTeeVector,
    5212         leftthreetimes: leftthreetimes,
    5213         LeftTriangleBar: LeftTriangleBar,
    5214         LeftTriangle: LeftTriangle,
    5215         LeftTriangleEqual: LeftTriangleEqual,
    5216         LeftUpDownVector: LeftUpDownVector,
    5217         LeftUpTeeVector: LeftUpTeeVector,
    5218         LeftUpVectorBar: LeftUpVectorBar,
    5219         LeftUpVector: LeftUpVector,
    5220         LeftVectorBar: LeftVectorBar,
    5221         LeftVector: LeftVector,
    5222         lEg: lEg,
    5223         leg: leg,
    5224         leq: leq,
    5225         leqq: leqq,
    5226         leqslant: leqslant,
    5227         lescc: lescc,
    5228         les: les,
    5229         lesdot: lesdot,
    5230         lesdoto: lesdoto,
    5231         lesdotor: lesdotor,
    5232         lesg: lesg,
    5233         lesges: lesges,
    5234         lessapprox: lessapprox,
    5235         lessdot: lessdot,
    5236         lesseqgtr: lesseqgtr,
    5237         lesseqqgtr: lesseqqgtr,
    5238         LessEqualGreater: LessEqualGreater,
    5239         LessFullEqual: LessFullEqual,
    5240         LessGreater: LessGreater,
    5241         lessgtr: lessgtr,
    5242         LessLess: LessLess,
    5243         lesssim: lesssim,
    5244         LessSlantEqual: LessSlantEqual,
    5245         LessTilde: LessTilde,
    5246         lfisht: lfisht,
    5247         lfloor: lfloor,
    5248         Lfr: Lfr,
    5249         lfr: lfr,
    5250         lg: lg,
    5251         lgE: lgE,
    5252         lHar: lHar,
    5253         lhard: lhard,
    5254         lharu: lharu,
    5255         lharul: lharul,
    5256         lhblk: lhblk,
    5257         LJcy: LJcy,
    5258         ljcy: ljcy,
    5259         llarr: llarr,
    5260         ll: ll,
    5261         Ll: Ll,
    5262         llcorner: llcorner,
    5263         Lleftarrow: Lleftarrow,
    5264         llhard: llhard,
    5265         lltri: lltri,
    5266         Lmidot: Lmidot,
    5267         lmidot: lmidot,
    5268         lmoustache: lmoustache,
    5269         lmoust: lmoust,
    5270         lnap: lnap,
    5271         lnapprox: lnapprox,
    5272         lne: lne,
    5273         lnE: lnE,
    5274         lneq: lneq,
    5275         lneqq: lneqq,
    5276         lnsim: lnsim,
    5277         loang: loang,
    5278         loarr: loarr,
    5279         lobrk: lobrk,
    5280         longleftarrow: longleftarrow,
    5281         LongLeftArrow: LongLeftArrow,
    5282         Longleftarrow: Longleftarrow,
    5283         longleftrightarrow: longleftrightarrow,
    5284         LongLeftRightArrow: LongLeftRightArrow,
    5285         Longleftrightarrow: Longleftrightarrow,
    5286         longmapsto: longmapsto,
    5287         longrightarrow: longrightarrow,
    5288         LongRightArrow: LongRightArrow,
    5289         Longrightarrow: Longrightarrow,
    5290         looparrowleft: looparrowleft,
    5291         looparrowright: looparrowright,
    5292         lopar: lopar,
    5293         Lopf: Lopf,
    5294         lopf: lopf,
    5295         loplus: loplus,
    5296         lotimes: lotimes,
    5297         lowast: lowast,
    5298         lowbar: lowbar,
    5299         LowerLeftArrow: LowerLeftArrow,
    5300         LowerRightArrow: LowerRightArrow,
    5301         loz: loz,
    5302         lozenge: lozenge,
    5303         lozf: lozf,
    5304         lpar: lpar,
    5305         lparlt: lparlt,
    5306         lrarr: lrarr,
    5307         lrcorner: lrcorner,
    5308         lrhar: lrhar,
    5309         lrhard: lrhard,
    5310         lrm: lrm,
    5311         lrtri: lrtri,
    5312         lsaquo: lsaquo,
    5313         lscr: lscr,
    5314         Lscr: Lscr,
    5315         lsh: lsh,
    5316         Lsh: Lsh,
    5317         lsim: lsim,
    5318         lsime: lsime,
    5319         lsimg: lsimg,
    5320         lsqb: lsqb,
    5321         lsquo: lsquo,
    5322         lsquor: lsquor,
    5323         Lstrok: Lstrok,
    5324         lstrok: lstrok,
    5325         ltcc: ltcc,
    5326         ltcir: ltcir,
    5327         lt: lt,
    5328         LT: LT,
    5329         Lt: Lt,
    5330         ltdot: ltdot,
    5331         lthree: lthree,
    5332         ltimes: ltimes,
    5333         ltlarr: ltlarr,
    5334         ltquest: ltquest,
    5335         ltri: ltri,
    5336         ltrie: ltrie,
    5337         ltrif: ltrif,
    5338         ltrPar: ltrPar,
    5339         lurdshar: lurdshar,
    5340         luruhar: luruhar,
    5341         lvertneqq: lvertneqq,
    5342         lvnE: lvnE,
    5343         macr: macr,
    5344         male: male,
    5345         malt: malt,
    5346         maltese: maltese,
    5347         map: map,
    5348         mapsto: mapsto,
    5349         mapstodown: mapstodown,
    5350         mapstoleft: mapstoleft,
    5351         mapstoup: mapstoup,
    5352         marker: marker,
    5353         mcomma: mcomma,
    5354         Mcy: Mcy,
    5355         mcy: mcy,
    5356         mdash: mdash,
    5357         mDDot: mDDot,
    5358         measuredangle: measuredangle,
    5359         MediumSpace: MediumSpace,
    5360         Mellintrf: Mellintrf,
    5361         Mfr: Mfr,
    5362         mfr: mfr,
    5363         mho: mho,
    5364         micro: micro,
    5365         midast: midast,
    5366         midcir: midcir,
    5367         mid: mid,
    5368         middot: middot,
    5369         minusb: minusb,
    5370         minus: minus,
    5371         minusd: minusd,
    5372         minusdu: minusdu,
    5373         MinusPlus: MinusPlus,
    5374         mlcp: mlcp,
    5375         mldr: mldr,
    5376         mnplus: mnplus,
    5377         models: models,
    5378         Mopf: Mopf,
    5379         mopf: mopf,
    5380         mp: mp,
    5381         mscr: mscr,
    5382         Mscr: Mscr,
    5383         mstpos: mstpos,
    5384         Mu: Mu,
    5385         mu: mu,
    5386         multimap: multimap,
    5387         mumap: mumap,
    5388         nabla: nabla,
    5389         Nacute: Nacute,
    5390         nacute: nacute,
    5391         nang: nang,
    5392         nap: nap,
    5393         napE: napE,
    5394         napid: napid,
    5395         napos: napos,
    5396         napprox: napprox,
    5397         natural: natural,
    5398         naturals: naturals,
    5399         natur: natur,
    5400         nbsp: nbsp,
    5401         nbump: nbump,
    5402         nbumpe: nbumpe,
    5403         ncap: ncap,
    5404         Ncaron: Ncaron,
    5405         ncaron: ncaron,
    5406         Ncedil: Ncedil,
    5407         ncedil: ncedil,
    5408         ncong: ncong,
    5409         ncongdot: ncongdot,
    5410         ncup: ncup,
    5411         Ncy: Ncy,
    5412         ncy: ncy,
    5413         ndash: ndash,
    5414         nearhk: nearhk,
    5415         nearr: nearr,
    5416         neArr: neArr,
    5417         nearrow: nearrow,
    5418         ne: ne,
    5419         nedot: nedot,
    5420         NegativeMediumSpace: NegativeMediumSpace,
    5421         NegativeThickSpace: NegativeThickSpace,
    5422         NegativeThinSpace: NegativeThinSpace,
    5423         NegativeVeryThinSpace: NegativeVeryThinSpace,
    5424         nequiv: nequiv,
    5425         nesear: nesear,
    5426         nesim: nesim,
    5427         NestedGreaterGreater: NestedGreaterGreater,
    5428         NestedLessLess: NestedLessLess,
    5429         NewLine: NewLine,
    5430         nexist: nexist,
    5431         nexists: nexists,
    5432         Nfr: Nfr,
    5433         nfr: nfr,
    5434         ngE: ngE,
    5435         nge: nge,
    5436         ngeq: ngeq,
    5437         ngeqq: ngeqq,
    5438         ngeqslant: ngeqslant,
    5439         nges: nges,
    5440         nGg: nGg,
    5441         ngsim: ngsim,
    5442         nGt: nGt,
    5443         ngt: ngt,
    5444         ngtr: ngtr,
    5445         nGtv: nGtv,
    5446         nharr: nharr,
    5447         nhArr: nhArr,
    5448         nhpar: nhpar,
    5449         ni: ni,
    5450         nis: nis,
    5451         nisd: nisd,
    5452         niv: niv,
    5453         NJcy: NJcy,
    5454         njcy: njcy,
    5455         nlarr: nlarr,
    5456         nlArr: nlArr,
    5457         nldr: nldr,
    5458         nlE: nlE,
    5459         nle: nle,
    5460         nleftarrow: nleftarrow,
    5461         nLeftarrow: nLeftarrow,
    5462         nleftrightarrow: nleftrightarrow,
    5463         nLeftrightarrow: nLeftrightarrow,
    5464         nleq: nleq,
    5465         nleqq: nleqq,
    5466         nleqslant: nleqslant,
    5467         nles: nles,
    5468         nless: nless,
    5469         nLl: nLl,
    5470         nlsim: nlsim,
    5471         nLt: nLt,
    5472         nlt: nlt,
    5473         nltri: nltri,
    5474         nltrie: nltrie,
    5475         nLtv: nLtv,
    5476         nmid: nmid,
    5477         NoBreak: NoBreak,
    5478         NonBreakingSpace: NonBreakingSpace,
    5479         nopf: nopf,
    5480         Nopf: Nopf,
    5481         Not: Not,
    5482         not: not,
    5483         NotCongruent: NotCongruent,
    5484         NotCupCap: NotCupCap,
    5485         NotDoubleVerticalBar: NotDoubleVerticalBar,
    5486         NotElement: NotElement,
    5487         NotEqual: NotEqual,
    5488         NotEqualTilde: NotEqualTilde,
    5489         NotExists: NotExists,
    5490         NotGreater: NotGreater,
    5491         NotGreaterEqual: NotGreaterEqual,
    5492         NotGreaterFullEqual: NotGreaterFullEqual,
    5493         NotGreaterGreater: NotGreaterGreater,
    5494         NotGreaterLess: NotGreaterLess,
    5495         NotGreaterSlantEqual: NotGreaterSlantEqual,
    5496         NotGreaterTilde: NotGreaterTilde,
    5497         NotHumpDownHump: NotHumpDownHump,
    5498         NotHumpEqual: NotHumpEqual,
    5499         notin: notin,
    5500         notindot: notindot,
    5501         notinE: notinE,
    5502         notinva: notinva,
    5503         notinvb: notinvb,
    5504         notinvc: notinvc,
    5505         NotLeftTriangleBar: NotLeftTriangleBar,
    5506         NotLeftTriangle: NotLeftTriangle,
    5507         NotLeftTriangleEqual: NotLeftTriangleEqual,
    5508         NotLess: NotLess,
    5509         NotLessEqual: NotLessEqual,
    5510         NotLessGreater: NotLessGreater,
    5511         NotLessLess: NotLessLess,
    5512         NotLessSlantEqual: NotLessSlantEqual,
    5513         NotLessTilde: NotLessTilde,
    5514         NotNestedGreaterGreater: NotNestedGreaterGreater,
    5515         NotNestedLessLess: NotNestedLessLess,
    5516         notni: notni,
    5517         notniva: notniva,
    5518         notnivb: notnivb,
    5519         notnivc: notnivc,
    5520         NotPrecedes: NotPrecedes,
    5521         NotPrecedesEqual: NotPrecedesEqual,
    5522         NotPrecedesSlantEqual: NotPrecedesSlantEqual,
    5523         NotReverseElement: NotReverseElement,
    5524         NotRightTriangleBar: NotRightTriangleBar,
    5525         NotRightTriangle: NotRightTriangle,
    5526         NotRightTriangleEqual: NotRightTriangleEqual,
    5527         NotSquareSubset: NotSquareSubset,
    5528         NotSquareSubsetEqual: NotSquareSubsetEqual,
    5529         NotSquareSuperset: NotSquareSuperset,
    5530         NotSquareSupersetEqual: NotSquareSupersetEqual,
    5531         NotSubset: NotSubset,
    5532         NotSubsetEqual: NotSubsetEqual,
    5533         NotSucceeds: NotSucceeds,
    5534         NotSucceedsEqual: NotSucceedsEqual,
    5535         NotSucceedsSlantEqual: NotSucceedsSlantEqual,
    5536         NotSucceedsTilde: NotSucceedsTilde,
    5537         NotSuperset: NotSuperset,
    5538         NotSupersetEqual: NotSupersetEqual,
    5539         NotTilde: NotTilde,
    5540         NotTildeEqual: NotTildeEqual,
    5541         NotTildeFullEqual: NotTildeFullEqual,
    5542         NotTildeTilde: NotTildeTilde,
    5543         NotVerticalBar: NotVerticalBar,
    5544         nparallel: nparallel,
    5545         npar: npar,
    5546         nparsl: nparsl,
    5547         npart: npart,
    5548         npolint: npolint,
    5549         npr: npr,
    5550         nprcue: nprcue,
    5551         nprec: nprec,
    5552         npreceq: npreceq,
    5553         npre: npre,
    5554         nrarrc: nrarrc,
    5555         nrarr: nrarr,
    5556         nrArr: nrArr,
    5557         nrarrw: nrarrw,
    5558         nrightarrow: nrightarrow,
    5559         nRightarrow: nRightarrow,
    5560         nrtri: nrtri,
    5561         nrtrie: nrtrie,
    5562         nsc: nsc,
    5563         nsccue: nsccue,
    5564         nsce: nsce,
    5565         Nscr: Nscr,
    5566         nscr: nscr,
    5567         nshortmid: nshortmid,
    5568         nshortparallel: nshortparallel,
    5569         nsim: nsim,
    5570         nsime: nsime,
    5571         nsimeq: nsimeq,
    5572         nsmid: nsmid,
    5573         nspar: nspar,
    5574         nsqsube: nsqsube,
    5575         nsqsupe: nsqsupe,
    5576         nsub: nsub,
    5577         nsubE: nsubE,
    5578         nsube: nsube,
    5579         nsubset: nsubset,
    5580         nsubseteq: nsubseteq,
    5581         nsubseteqq: nsubseteqq,
    5582         nsucc: nsucc,
    5583         nsucceq: nsucceq,
    5584         nsup: nsup,
    5585         nsupE: nsupE,
    5586         nsupe: nsupe,
    5587         nsupset: nsupset,
    5588         nsupseteq: nsupseteq,
    5589         nsupseteqq: nsupseteqq,
    5590         ntgl: ntgl,
    5591         Ntilde: Ntilde,
    5592         ntilde: ntilde,
    5593         ntlg: ntlg,
    5594         ntriangleleft: ntriangleleft,
    5595         ntrianglelefteq: ntrianglelefteq,
    5596         ntriangleright: ntriangleright,
    5597         ntrianglerighteq: ntrianglerighteq,
    5598         Nu: Nu,
    5599         nu: nu,
    5600         num: num,
    5601         numero: numero,
    5602         numsp: numsp,
    5603         nvap: nvap,
    5604         nvdash: nvdash,
    5605         nvDash: nvDash,
    5606         nVdash: nVdash,
    5607         nVDash: nVDash,
    5608         nvge: nvge,
    5609         nvgt: nvgt,
    5610         nvHarr: nvHarr,
    5611         nvinfin: nvinfin,
    5612         nvlArr: nvlArr,
    5613         nvle: nvle,
    5614         nvlt: nvlt,
    5615         nvltrie: nvltrie,
    5616         nvrArr: nvrArr,
    5617         nvrtrie: nvrtrie,
    5618         nvsim: nvsim,
    5619         nwarhk: nwarhk,
    5620         nwarr: nwarr,
    5621         nwArr: nwArr,
    5622         nwarrow: nwarrow,
    5623         nwnear: nwnear,
    5624         Oacute: Oacute,
    5625         oacute: oacute,
    5626         oast: oast,
    5627         Ocirc: Ocirc,
    5628         ocirc: ocirc,
    5629         ocir: ocir,
    5630         Ocy: Ocy,
    5631         ocy: ocy,
    5632         odash: odash,
    5633         Odblac: Odblac,
    5634         odblac: odblac,
    5635         odiv: odiv,
    5636         odot: odot,
    5637         odsold: odsold,
    5638         OElig: OElig,
    5639         oelig: oelig,
    5640         ofcir: ofcir,
    5641         Ofr: Ofr,
    5642         ofr: ofr,
    5643         ogon: ogon,
    5644         Ograve: Ograve,
    5645         ograve: ograve,
    5646         ogt: ogt,
    5647         ohbar: ohbar,
    5648         ohm: ohm,
    5649         oint: oint,
    5650         olarr: olarr,
    5651         olcir: olcir,
    5652         olcross: olcross,
    5653         oline: oline,
    5654         olt: olt,
    5655         Omacr: Omacr,
    5656         omacr: omacr,
    5657         Omega: Omega,
    5658         omega: omega,
    5659         Omicron: Omicron,
    5660         omicron: omicron,
    5661         omid: omid,
    5662         ominus: ominus,
    5663         Oopf: Oopf,
    5664         oopf: oopf,
    5665         opar: opar,
    5666         OpenCurlyDoubleQuote: OpenCurlyDoubleQuote,
    5667         OpenCurlyQuote: OpenCurlyQuote,
    5668         operp: operp,
    5669         oplus: oplus,
    5670         orarr: orarr,
    5671         Or: Or,
    5672         or: or,
    5673         ord: ord,
    5674         order: order,
    5675         orderof: orderof,
    5676         ordf: ordf,
    5677         ordm: ordm,
    5678         origof: origof,
    5679         oror: oror,
    5680         orslope: orslope,
    5681         orv: orv,
    5682         oS: oS,
    5683         Oscr: Oscr,
    5684         oscr: oscr,
    5685         Oslash: Oslash,
    5686         oslash: oslash,
    5687         osol: osol,
    5688         Otilde: Otilde,
    5689         otilde: otilde,
    5690         otimesas: otimesas,
    5691         Otimes: Otimes,
    5692         otimes: otimes,
    5693         Ouml: Ouml,
    5694         ouml: ouml,
    5695         ovbar: ovbar,
    5696         OverBar: OverBar,
    5697         OverBrace: OverBrace,
    5698         OverBracket: OverBracket,
    5699         OverParenthesis: OverParenthesis,
    5700         para: para,
    5701         parallel: parallel,
    5702         par: par,
    5703         parsim: parsim,
    5704         parsl: parsl,
    5705         part: part,
    5706         PartialD: PartialD,
    5707         Pcy: Pcy,
    5708         pcy: pcy,
    5709         percnt: percnt,
    5710         period: period,
    5711         permil: permil,
    5712         perp: perp,
    5713         pertenk: pertenk,
    5714         Pfr: Pfr,
    5715         pfr: pfr,
    5716         Phi: Phi,
    5717         phi: phi,
    5718         phiv: phiv,
    5719         phmmat: phmmat,
    5720         phone: phone,
    5721         Pi: Pi,
    5722         pi: pi,
    5723         pitchfork: pitchfork,
    5724         piv: piv,
    5725         planck: planck,
    5726         planckh: planckh,
    5727         plankv: plankv,
    5728         plusacir: plusacir,
    5729         plusb: plusb,
    5730         pluscir: pluscir,
    5731         plus: plus,
    5732         plusdo: plusdo,
    5733         plusdu: plusdu,
    5734         pluse: pluse,
    5735         PlusMinus: PlusMinus,
    5736         plusmn: plusmn,
    5737         plussim: plussim,
    5738         plustwo: plustwo,
    5739         pm: pm,
    5740         Poincareplane: Poincareplane,
    5741         pointint: pointint,
    5742         popf: popf,
    5743         Popf: Popf,
    5744         pound: pound,
    5745         prap: prap,
    5746         Pr: Pr,
    5747         pr: pr,
    5748         prcue: prcue,
    5749         precapprox: precapprox,
    5750         prec: prec,
    5751         preccurlyeq: preccurlyeq,
    5752         Precedes: Precedes,
    5753         PrecedesEqual: PrecedesEqual,
    5754         PrecedesSlantEqual: PrecedesSlantEqual,
    5755         PrecedesTilde: PrecedesTilde,
    5756         preceq: preceq,
    5757         precnapprox: precnapprox,
    5758         precneqq: precneqq,
    5759         precnsim: precnsim,
    5760         pre: pre,
    5761         prE: prE,
    5762         precsim: precsim,
    5763         prime: prime,
    5764         Prime: Prime,
    5765         primes: primes,
    5766         prnap: prnap,
    5767         prnE: prnE,
    5768         prnsim: prnsim,
    5769         prod: prod,
    5770         Product: Product,
    5771         profalar: profalar,
    5772         profline: profline,
    5773         profsurf: profsurf,
    5774         prop: prop,
    5775         Proportional: Proportional,
    5776         Proportion: Proportion,
    5777         propto: propto,
    5778         prsim: prsim,
    5779         prurel: prurel,
    5780         Pscr: Pscr,
    5781         pscr: pscr,
    5782         Psi: Psi,
    5783         psi: psi,
    5784         puncsp: puncsp,
    5785         Qfr: Qfr,
    5786         qfr: qfr,
    5787         qint: qint,
    5788         qopf: qopf,
    5789         Qopf: Qopf,
    5790         qprime: qprime,
    5791         Qscr: Qscr,
    5792         qscr: qscr,
    5793         quaternions: quaternions,
    5794         quatint: quatint,
    5795         quest: quest,
    5796         questeq: questeq,
    5797         quot: quot,
    5798         QUOT: QUOT,
    5799         rAarr: rAarr,
    5800         race: race,
    5801         Racute: Racute,
    5802         racute: racute,
    5803         radic: radic,
    5804         raemptyv: raemptyv,
    5805         rang: rang,
    5806         Rang: Rang,
    5807         rangd: rangd,
    5808         range: range,
    5809         rangle: rangle,
    5810         raquo: raquo,
    5811         rarrap: rarrap,
    5812         rarrb: rarrb,
    5813         rarrbfs: rarrbfs,
    5814         rarrc: rarrc,
    5815         rarr: rarr,
    5816         Rarr: Rarr,
    5817         rArr: rArr,
    5818         rarrfs: rarrfs,
    5819         rarrhk: rarrhk,
    5820         rarrlp: rarrlp,
    5821         rarrpl: rarrpl,
    5822         rarrsim: rarrsim,
    5823         Rarrtl: Rarrtl,
    5824         rarrtl: rarrtl,
    5825         rarrw: rarrw,
    5826         ratail: ratail,
    5827         rAtail: rAtail,
    5828         ratio: ratio,
    5829         rationals: rationals,
    5830         rbarr: rbarr,
    5831         rBarr: rBarr,
    5832         RBarr: RBarr,
    5833         rbbrk: rbbrk,
    5834         rbrace: rbrace,
    5835         rbrack: rbrack,
    5836         rbrke: rbrke,
    5837         rbrksld: rbrksld,
    5838         rbrkslu: rbrkslu,
    5839         Rcaron: Rcaron,
    5840         rcaron: rcaron,
    5841         Rcedil: Rcedil,
    5842         rcedil: rcedil,
    5843         rceil: rceil,
    5844         rcub: rcub,
    5845         Rcy: Rcy,
    5846         rcy: rcy,
    5847         rdca: rdca,
    5848         rdldhar: rdldhar,
    5849         rdquo: rdquo,
    5850         rdquor: rdquor,
    5851         rdsh: rdsh,
    5852         real: real,
    5853         realine: realine,
    5854         realpart: realpart,
    5855         reals: reals,
    5856         Re: Re,
    5857         rect: rect,
    5858         reg: reg,
    5859         REG: REG,
    5860         ReverseElement: ReverseElement,
    5861         ReverseEquilibrium: ReverseEquilibrium,
    5862         ReverseUpEquilibrium: ReverseUpEquilibrium,
    5863         rfisht: rfisht,
    5864         rfloor: rfloor,
    5865         rfr: rfr,
    5866         Rfr: Rfr,
    5867         rHar: rHar,
    5868         rhard: rhard,
    5869         rharu: rharu,
    5870         rharul: rharul,
    5871         Rho: Rho,
    5872         rho: rho,
    5873         rhov: rhov,
    5874         RightAngleBracket: RightAngleBracket,
    5875         RightArrowBar: RightArrowBar,
    5876         rightarrow: rightarrow,
    5877         RightArrow: RightArrow,
    5878         Rightarrow: Rightarrow,
    5879         RightArrowLeftArrow: RightArrowLeftArrow,
    5880         rightarrowtail: rightarrowtail,
    5881         RightCeiling: RightCeiling,
    5882         RightDoubleBracket: RightDoubleBracket,
    5883         RightDownTeeVector: RightDownTeeVector,
    5884         RightDownVectorBar: RightDownVectorBar,
    5885         RightDownVector: RightDownVector,
    5886         RightFloor: RightFloor,
    5887         rightharpoondown: rightharpoondown,
    5888         rightharpoonup: rightharpoonup,
    5889         rightleftarrows: rightleftarrows,
    5890         rightleftharpoons: rightleftharpoons,
    5891         rightrightarrows: rightrightarrows,
    5892         rightsquigarrow: rightsquigarrow,
    5893         RightTeeArrow: RightTeeArrow,
    5894         RightTee: RightTee,
    5895         RightTeeVector: RightTeeVector,
    5896         rightthreetimes: rightthreetimes,
    5897         RightTriangleBar: RightTriangleBar,
    5898         RightTriangle: RightTriangle,
    5899         RightTriangleEqual: RightTriangleEqual,
    5900         RightUpDownVector: RightUpDownVector,
    5901         RightUpTeeVector: RightUpTeeVector,
    5902         RightUpVectorBar: RightUpVectorBar,
    5903         RightUpVector: RightUpVector,
    5904         RightVectorBar: RightVectorBar,
    5905         RightVector: RightVector,
    5906         ring: ring,
    5907         risingdotseq: risingdotseq,
    5908         rlarr: rlarr,
    5909         rlhar: rlhar,
    5910         rlm: rlm,
    5911         rmoustache: rmoustache,
    5912         rmoust: rmoust,
    5913         rnmid: rnmid,
    5914         roang: roang,
    5915         roarr: roarr,
    5916         robrk: robrk,
    5917         ropar: ropar,
    5918         ropf: ropf,
    5919         Ropf: Ropf,
    5920         roplus: roplus,
    5921         rotimes: rotimes,
    5922         RoundImplies: RoundImplies,
    5923         rpar: rpar,
    5924         rpargt: rpargt,
    5925         rppolint: rppolint,
    5926         rrarr: rrarr,
    5927         Rrightarrow: Rrightarrow,
    5928         rsaquo: rsaquo,
    5929         rscr: rscr,
    5930         Rscr: Rscr,
    5931         rsh: rsh,
    5932         Rsh: Rsh,
    5933         rsqb: rsqb,
    5934         rsquo: rsquo,
    5935         rsquor: rsquor,
    5936         rthree: rthree,
    5937         rtimes: rtimes,
    5938         rtri: rtri,
    5939         rtrie: rtrie,
    5940         rtrif: rtrif,
    5941         rtriltri: rtriltri,
    5942         RuleDelayed: RuleDelayed,
    5943         ruluhar: ruluhar,
    5944         rx: rx,
    5945         Sacute: Sacute,
    5946         sacute: sacute,
    5947         sbquo: sbquo,
    5948         scap: scap,
    5949         Scaron: Scaron,
    5950         scaron: scaron,
    5951         Sc: Sc,
    5952         sc: sc,
    5953         sccue: sccue,
    5954         sce: sce,
    5955         scE: scE,
    5956         Scedil: Scedil,
    5957         scedil: scedil,
    5958         Scirc: Scirc,
    5959         scirc: scirc,
    5960         scnap: scnap,
    5961         scnE: scnE,
    5962         scnsim: scnsim,
    5963         scpolint: scpolint,
    5964         scsim: scsim,
    5965         Scy: Scy,
    5966         scy: scy,
    5967         sdotb: sdotb,
    5968         sdot: sdot,
    5969         sdote: sdote,
    5970         searhk: searhk,
    5971         searr: searr,
    5972         seArr: seArr,
    5973         searrow: searrow,
    5974         sect: sect,
    5975         semi: semi,
    5976         seswar: seswar,
    5977         setminus: setminus,
    5978         setmn: setmn,
    5979         sext: sext,
    5980         Sfr: Sfr,
    5981         sfr: sfr,
    5982         sfrown: sfrown,
    5983         sharp: sharp,
    5984         SHCHcy: SHCHcy,
    5985         shchcy: shchcy,
    5986         SHcy: SHcy,
    5987         shcy: shcy,
    5988         ShortDownArrow: ShortDownArrow,
    5989         ShortLeftArrow: ShortLeftArrow,
    5990         shortmid: shortmid,
    5991         shortparallel: shortparallel,
    5992         ShortRightArrow: ShortRightArrow,
    5993         ShortUpArrow: ShortUpArrow,
    5994         shy: shy,
    5995         Sigma: Sigma,
    5996         sigma: sigma,
    5997         sigmaf: sigmaf,
    5998         sigmav: sigmav,
    5999         sim: sim,
    6000         simdot: simdot,
    6001         sime: sime,
    6002         simeq: simeq,
    6003         simg: simg,
    6004         simgE: simgE,
    6005         siml: siml,
    6006         simlE: simlE,
    6007         simne: simne,
    6008         simplus: simplus,
    6009         simrarr: simrarr,
    6010         slarr: slarr,
    6011         SmallCircle: SmallCircle,
    6012         smallsetminus: smallsetminus,
    6013         smashp: smashp,
    6014         smeparsl: smeparsl,
    6015         smid: smid,
    6016         smile: smile,
    6017         smt: smt,
    6018         smte: smte,
    6019         smtes: smtes,
    6020         SOFTcy: SOFTcy,
    6021         softcy: softcy,
    6022         solbar: solbar,
    6023         solb: solb,
    6024         sol: sol,
    6025         Sopf: Sopf,
    6026         sopf: sopf,
    6027         spades: spades,
    6028         spadesuit: spadesuit,
    6029         spar: spar,
    6030         sqcap: sqcap,
    6031         sqcaps: sqcaps,
    6032         sqcup: sqcup,
    6033         sqcups: sqcups,
    6034         Sqrt: Sqrt,
    6035         sqsub: sqsub,
    6036         sqsube: sqsube,
    6037         sqsubset: sqsubset,
    6038         sqsubseteq: sqsubseteq,
    6039         sqsup: sqsup,
    6040         sqsupe: sqsupe,
    6041         sqsupset: sqsupset,
    6042         sqsupseteq: sqsupseteq,
    6043         square: square,
    6044         Square: Square,
    6045         SquareIntersection: SquareIntersection,
    6046         SquareSubset: SquareSubset,
    6047         SquareSubsetEqual: SquareSubsetEqual,
    6048         SquareSuperset: SquareSuperset,
    6049         SquareSupersetEqual: SquareSupersetEqual,
    6050         SquareUnion: SquareUnion,
    6051         squarf: squarf,
    6052         squ: squ,
    6053         squf: squf,
    6054         srarr: srarr,
    6055         Sscr: Sscr,
    6056         sscr: sscr,
    6057         ssetmn: ssetmn,
    6058         ssmile: ssmile,
    6059         sstarf: sstarf,
    6060         Star: Star,
    6061         star: star,
    6062         starf: starf,
    6063         straightepsilon: straightepsilon,
    6064         straightphi: straightphi,
    6065         strns: strns,
    6066         sub: sub,
    6067         Sub: Sub,
    6068         subdot: subdot,
    6069         subE: subE,
    6070         sube: sube,
    6071         subedot: subedot,
    6072         submult: submult,
    6073         subnE: subnE,
    6074         subne: subne,
    6075         subplus: subplus,
    6076         subrarr: subrarr,
    6077         subset: subset,
    6078         Subset: Subset,
    6079         subseteq: subseteq,
    6080         subseteqq: subseteqq,
    6081         SubsetEqual: SubsetEqual,
    6082         subsetneq: subsetneq,
    6083         subsetneqq: subsetneqq,
    6084         subsim: subsim,
    6085         subsub: subsub,
    6086         subsup: subsup,
    6087         succapprox: succapprox,
    6088         succ: succ,
    6089         succcurlyeq: succcurlyeq,
    6090         Succeeds: Succeeds,
    6091         SucceedsEqual: SucceedsEqual,
    6092         SucceedsSlantEqual: SucceedsSlantEqual,
    6093         SucceedsTilde: SucceedsTilde,
    6094         succeq: succeq,
    6095         succnapprox: succnapprox,
    6096         succneqq: succneqq,
    6097         succnsim: succnsim,
    6098         succsim: succsim,
    6099         SuchThat: SuchThat,
    6100         sum: sum,
    6101         Sum: Sum,
    6102         sung: sung,
    6103         sup1: sup1,
    6104         sup2: sup2,
    6105         sup3: sup3,
    6106         sup: sup,
    6107         Sup: Sup,
    6108         supdot: supdot,
    6109         supdsub: supdsub,
    6110         supE: supE,
    6111         supe: supe,
    6112         supedot: supedot,
    6113         Superset: Superset,
    6114         SupersetEqual: SupersetEqual,
    6115         suphsol: suphsol,
    6116         suphsub: suphsub,
    6117         suplarr: suplarr,
    6118         supmult: supmult,
    6119         supnE: supnE,
    6120         supne: supne,
    6121         supplus: supplus,
    6122         supset: supset,
    6123         Supset: Supset,
    6124         supseteq: supseteq,
    6125         supseteqq: supseteqq,
    6126         supsetneq: supsetneq,
    6127         supsetneqq: supsetneqq,
    6128         supsim: supsim,
    6129         supsub: supsub,
    6130         supsup: supsup,
    6131         swarhk: swarhk,
    6132         swarr: swarr,
    6133         swArr: swArr,
    6134         swarrow: swarrow,
    6135         swnwar: swnwar,
    6136         szlig: szlig,
    6137         Tab: Tab,
    6138         target: target,
    6139         Tau: Tau,
    6140         tau: tau,
    6141         tbrk: tbrk,
    6142         Tcaron: Tcaron,
    6143         tcaron: tcaron,
    6144         Tcedil: Tcedil,
    6145         tcedil: tcedil,
    6146         Tcy: Tcy,
    6147         tcy: tcy,
    6148         tdot: tdot,
    6149         telrec: telrec,
    6150         Tfr: Tfr,
    6151         tfr: tfr,
    6152         there4: there4,
    6153         therefore: therefore,
    6154         Therefore: Therefore,
    6155         Theta: Theta,
    6156         theta: theta,
    6157         thetasym: thetasym,
    6158         thetav: thetav,
    6159         thickapprox: thickapprox,
    6160         thicksim: thicksim,
    6161         ThickSpace: ThickSpace,
    6162         ThinSpace: ThinSpace,
    6163         thinsp: thinsp,
    6164         thkap: thkap,
    6165         thksim: thksim,
    6166         THORN: THORN,
    6167         thorn: thorn,
    6168         tilde: tilde,
    6169         Tilde: Tilde,
    6170         TildeEqual: TildeEqual,
    6171         TildeFullEqual: TildeFullEqual,
    6172         TildeTilde: TildeTilde,
    6173         timesbar: timesbar,
    6174         timesb: timesb,
    6175         times: times,
    6176         timesd: timesd,
    6177         tint: tint,
    6178         toea: toea,
    6179         topbot: topbot,
    6180         topcir: topcir,
    6181         top: top,
    6182         Topf: Topf,
    6183         topf: topf,
    6184         topfork: topfork,
    6185         tosa: tosa,
    6186         tprime: tprime,
    6187         trade: trade,
    6188         TRADE: TRADE,
    6189         triangle: triangle,
    6190         triangledown: triangledown,
    6191         triangleleft: triangleleft,
    6192         trianglelefteq: trianglelefteq,
    6193         triangleq: triangleq,
    6194         triangleright: triangleright,
    6195         trianglerighteq: trianglerighteq,
    6196         tridot: tridot,
    6197         trie: trie,
    6198         triminus: triminus,
    6199         TripleDot: TripleDot,
    6200         triplus: triplus,
    6201         trisb: trisb,
    6202         tritime: tritime,
    6203         trpezium: trpezium,
    6204         Tscr: Tscr,
    6205         tscr: tscr,
    6206         TScy: TScy,
    6207         tscy: tscy,
    6208         TSHcy: TSHcy,
    6209         tshcy: tshcy,
    6210         Tstrok: Tstrok,
    6211         tstrok: tstrok,
    6212         twixt: twixt,
    6213         twoheadleftarrow: twoheadleftarrow,
    6214         twoheadrightarrow: twoheadrightarrow,
    6215         Uacute: Uacute,
    6216         uacute: uacute,
    6217         uarr: uarr,
    6218         Uarr: Uarr,
    6219         uArr: uArr,
    6220         Uarrocir: Uarrocir,
    6221         Ubrcy: Ubrcy,
    6222         ubrcy: ubrcy,
    6223         Ubreve: Ubreve,
    6224         ubreve: ubreve,
    6225         Ucirc: Ucirc,
    6226         ucirc: ucirc,
    6227         Ucy: Ucy,
    6228         ucy: ucy,
    6229         udarr: udarr,
    6230         Udblac: Udblac,
    6231         udblac: udblac,
    6232         udhar: udhar,
    6233         ufisht: ufisht,
    6234         Ufr: Ufr,
    6235         ufr: ufr,
    6236         Ugrave: Ugrave,
    6237         ugrave: ugrave,
    6238         uHar: uHar,
    6239         uharl: uharl,
    6240         uharr: uharr,
    6241         uhblk: uhblk,
    6242         ulcorn: ulcorn,
    6243         ulcorner: ulcorner,
    6244         ulcrop: ulcrop,
    6245         ultri: ultri,
    6246         Umacr: Umacr,
    6247         umacr: umacr,
    6248         uml: uml,
    6249         UnderBar: UnderBar,
    6250         UnderBrace: UnderBrace,
    6251         UnderBracket: UnderBracket,
    6252         UnderParenthesis: UnderParenthesis,
    6253         Union: Union,
    6254         UnionPlus: UnionPlus,
    6255         Uogon: Uogon,
    6256         uogon: uogon,
    6257         Uopf: Uopf,
    6258         uopf: uopf,
    6259         UpArrowBar: UpArrowBar,
    6260         uparrow: uparrow,
    6261         UpArrow: UpArrow,
    6262         Uparrow: Uparrow,
    6263         UpArrowDownArrow: UpArrowDownArrow,
    6264         updownarrow: updownarrow,
    6265         UpDownArrow: UpDownArrow,
    6266         Updownarrow: Updownarrow,
    6267         UpEquilibrium: UpEquilibrium,
    6268         upharpoonleft: upharpoonleft,
    6269         upharpoonright: upharpoonright,
    6270         uplus: uplus,
    6271         UpperLeftArrow: UpperLeftArrow,
    6272         UpperRightArrow: UpperRightArrow,
    6273         upsi: upsi,
    6274         Upsi: Upsi,
    6275         upsih: upsih,
    6276         Upsilon: Upsilon,
    6277         upsilon: upsilon,
    6278         UpTeeArrow: UpTeeArrow,
    6279         UpTee: UpTee,
    6280         upuparrows: upuparrows,
    6281         urcorn: urcorn,
    6282         urcorner: urcorner,
    6283         urcrop: urcrop,
    6284         Uring: Uring,
    6285         uring: uring,
    6286         urtri: urtri,
    6287         Uscr: Uscr,
    6288         uscr: uscr,
    6289         utdot: utdot,
    6290         Utilde: Utilde,
    6291         utilde: utilde,
    6292         utri: utri,
    6293         utrif: utrif,
    6294         uuarr: uuarr,
    6295         Uuml: Uuml,
    6296         uuml: uuml,
    6297         uwangle: uwangle,
    6298         vangrt: vangrt,
    6299         varepsilon: varepsilon,
    6300         varkappa: varkappa,
    6301         varnothing: varnothing,
    6302         varphi: varphi,
    6303         varpi: varpi,
    6304         varpropto: varpropto,
    6305         varr: varr,
    6306         vArr: vArr,
    6307         varrho: varrho,
    6308         varsigma: varsigma,
    6309         varsubsetneq: varsubsetneq,
    6310         varsubsetneqq: varsubsetneqq,
    6311         varsupsetneq: varsupsetneq,
    6312         varsupsetneqq: varsupsetneqq,
    6313         vartheta: vartheta,
    6314         vartriangleleft: vartriangleleft,
    6315         vartriangleright: vartriangleright,
    6316         vBar: vBar,
    6317         Vbar: Vbar,
    6318         vBarv: vBarv,
    6319         Vcy: Vcy,
    6320         vcy: vcy,
    6321         vdash: vdash,
    6322         vDash: vDash,
    6323         Vdash: Vdash,
    6324         VDash: VDash,
    6325         Vdashl: Vdashl,
    6326         veebar: veebar,
    6327         vee: vee,
    6328         Vee: Vee,
    6329         veeeq: veeeq,
    6330         vellip: vellip,
    6331         verbar: verbar,
    6332         Verbar: Verbar,
    6333         vert: vert,
    6334         Vert: Vert,
    6335         VerticalBar: VerticalBar,
    6336         VerticalLine: VerticalLine,
    6337         VerticalSeparator: VerticalSeparator,
    6338         VerticalTilde: VerticalTilde,
    6339         VeryThinSpace: VeryThinSpace,
    6340         Vfr: Vfr,
    6341         vfr: vfr,
    6342         vltri: vltri,
    6343         vnsub: vnsub,
    6344         vnsup: vnsup,
    6345         Vopf: Vopf,
    6346         vopf: vopf,
    6347         vprop: vprop,
    6348         vrtri: vrtri,
    6349         Vscr: Vscr,
    6350         vscr: vscr,
    6351         vsubnE: vsubnE,
    6352         vsubne: vsubne,
    6353         vsupnE: vsupnE,
    6354         vsupne: vsupne,
    6355         Vvdash: Vvdash,
    6356         vzigzag: vzigzag,
    6357         Wcirc: Wcirc,
    6358         wcirc: wcirc,
    6359         wedbar: wedbar,
    6360         wedge: wedge,
    6361         Wedge: Wedge,
    6362         wedgeq: wedgeq,
    6363         weierp: weierp,
    6364         Wfr: Wfr,
    6365         wfr: wfr,
    6366         Wopf: Wopf,
    6367         wopf: wopf,
    6368         wp: wp,
    6369         wr: wr,
    6370         wreath: wreath,
    6371         Wscr: Wscr,
    6372         wscr: wscr,
    6373         xcap: xcap,
    6374         xcirc: xcirc,
    6375         xcup: xcup,
    6376         xdtri: xdtri,
    6377         Xfr: Xfr,
    6378         xfr: xfr,
    6379         xharr: xharr,
    6380         xhArr: xhArr,
    6381         Xi: Xi,
    6382         xi: xi,
    6383         xlarr: xlarr,
    6384         xlArr: xlArr,
    6385         xmap: xmap,
    6386         xnis: xnis,
    6387         xodot: xodot,
    6388         Xopf: Xopf,
    6389         xopf: xopf,
    6390         xoplus: xoplus,
    6391         xotime: xotime,
    6392         xrarr: xrarr,
    6393         xrArr: xrArr,
    6394         Xscr: Xscr,
    6395         xscr: xscr,
    6396         xsqcup: xsqcup,
    6397         xuplus: xuplus,
    6398         xutri: xutri,
    6399         xvee: xvee,
    6400         xwedge: xwedge,
    6401         Yacute: Yacute,
    6402         yacute: yacute,
    6403         YAcy: YAcy,
    6404         yacy: yacy,
    6405         Ycirc: Ycirc,
    6406         ycirc: ycirc,
    6407         Ycy: Ycy,
    6408         ycy: ycy,
    6409         yen: yen,
    6410         Yfr: Yfr,
    6411         yfr: yfr,
    6412         YIcy: YIcy,
    6413         yicy: yicy,
    6414         Yopf: Yopf,
    6415         yopf: yopf,
    6416         Yscr: Yscr,
    6417         yscr: yscr,
    6418         YUcy: YUcy,
    6419         yucy: yucy,
    6420         yuml: yuml,
    6421         Yuml: Yuml,
    6422         Zacute: Zacute,
    6423         zacute: zacute,
    6424         Zcaron: Zcaron,
    6425         zcaron: zcaron,
    6426         Zcy: Zcy,
    6427         zcy: zcy,
    6428         Zdot: Zdot,
    6429         zdot: zdot,
    6430         zeetrf: zeetrf,
    6431         ZeroWidthSpace: ZeroWidthSpace,
    6432         Zeta: Zeta,
    6433         zeta: zeta,
    6434         zfr: zfr,
    6435         Zfr: Zfr,
    6436         ZHcy: ZHcy,
    6437         zhcy: zhcy,
    6438         zigrarr: zigrarr,
    6439         zopf: zopf,
    6440         Zopf: Zopf,
    6441         Zscr: Zscr,
    6442         zscr: zscr,
    6443         zwj: zwj,
    6444         zwnj: zwnj,
    6445         'default': entities
    6446 };
    6447 
    6448 var Aacute$1 = "Á";
    6449 var aacute$1 = "á";
    6450 var Acirc$1 = "Â";
    6451 var acirc$1 = "â";
    6452 var acute$1 = "´";
    6453 var AElig$1 = "Æ";
    6454 var aelig$1 = "æ";
    6455 var Agrave$1 = "À";
    6456 var agrave$1 = "à";
    6457 var amp$1 = "&";
    6458 var AMP$1 = "&";
    6459 var Aring$1 = "Å";
    6460 var aring$1 = "å";
    6461 var Atilde$1 = "Ã";
    6462 var atilde$1 = "ã";
    6463 var Auml$1 = "Ä";
    6464 var auml$1 = "ä";
    6465 var brvbar$1 = "¦";
    6466 var Ccedil$1 = "Ç";
    6467 var ccedil$1 = "ç";
    6468 var cedil$1 = "¸";
    6469 var cent$1 = "¢";
    6470 var copy$1 = "©";
    6471 var COPY$1 = "©";
    6472 var curren$1 = "¤";
    6473 var deg$1 = "°";
    6474 var divide$1 = "÷";
    6475 var Eacute$1 = "É";
    6476 var eacute$1 = "é";
    6477 var Ecirc$1 = "Ê";
    6478 var ecirc$1 = "ê";
    6479 var Egrave$1 = "È";
    6480 var egrave$1 = "è";
    6481 var ETH$1 = "Ð";
    6482 var eth$1 = "ð";
    6483 var Euml$1 = "Ë";
    6484 var euml$1 = "ë";
    6485 var frac12$1 = "½";
    6486 var frac14$1 = "¼";
    6487 var frac34$1 = "¾";
    6488 var gt$1 = ">";
    6489 var GT$1 = ">";
    6490 var Iacute$1 = "Í";
    6491 var iacute$1 = "í";
    6492 var Icirc$1 = "Î";
    6493 var icirc$1 = "î";
    6494 var iexcl$1 = "¡";
    6495 var Igrave$1 = "Ì";
    6496 var igrave$1 = "ì";
    6497 var iquest$1 = "¿";
    6498 var Iuml$1 = "Ï";
    6499 var iuml$1 = "ï";
    6500 var laquo$1 = "«";
    6501 var lt$1 = "<";
    6502 var LT$1 = "<";
    6503 var macr$1 = "¯";
    6504 var micro$1 = "µ";
    6505 var middot$1 = "·";
    6506 var nbsp$1 = " ";
    6507 var not$1 = "¬";
    6508 var Ntilde$1 = "Ñ";
    6509 var ntilde$1 = "ñ";
    6510 var Oacute$1 = "Ó";
    6511 var oacute$1 = "ó";
    6512 var Ocirc$1 = "Ô";
    6513 var ocirc$1 = "ô";
    6514 var Ograve$1 = "Ò";
    6515 var ograve$1 = "ò";
    6516 var ordf$1 = "ª";
    6517 var ordm$1 = "º";
    6518 var Oslash$1 = "Ø";
    6519 var oslash$1 = "ø";
    6520 var Otilde$1 = "Õ";
    6521 var otilde$1 = "õ";
    6522 var Ouml$1 = "Ö";
    6523 var ouml$1 = "ö";
    6524 var para$1 = "¶";
    6525 var plusmn$1 = "±";
    6526 var pound$1 = "£";
    6527 var quot$1 = "\"";
    6528 var QUOT$1 = "\"";
    6529 var raquo$1 = "»";
    6530 var reg$1 = "®";
    6531 var REG$1 = "®";
    6532 var sect$1 = "§";
    6533 var shy$1 = "­";
    6534 var sup1$1 = "¹";
    6535 var sup2$1 = "²";
    6536 var sup3$1 = "³";
    6537 var szlig$1 = "ß";
    6538 var THORN$1 = "Þ";
    6539 var thorn$1 = "þ";
    6540 var times$1 = "×";
    6541 var Uacute$1 = "Ú";
    6542 var uacute$1 = "ú";
    6543 var Ucirc$1 = "Û";
    6544 var ucirc$1 = "û";
    6545 var Ugrave$1 = "Ù";
    6546 var ugrave$1 = "ù";
    6547 var uml$1 = "¨";
    6548 var Uuml$1 = "Ü";
    6549 var uuml$1 = "ü";
    6550 var Yacute$1 = "Ý";
    6551 var yacute$1 = "ý";
    6552 var yen$1 = "¥";
    6553 var yuml$1 = "ÿ";
    6554 var legacy = {
    6555         Aacute: Aacute$1,
    6556         aacute: aacute$1,
    6557         Acirc: Acirc$1,
    6558         acirc: acirc$1,
    6559         acute: acute$1,
    6560         AElig: AElig$1,
    6561         aelig: aelig$1,
    6562         Agrave: Agrave$1,
    6563         agrave: agrave$1,
    6564         amp: amp$1,
    6565         AMP: AMP$1,
    6566         Aring: Aring$1,
    6567         aring: aring$1,
    6568         Atilde: Atilde$1,
    6569         atilde: atilde$1,
    6570         Auml: Auml$1,
    6571         auml: auml$1,
    6572         brvbar: brvbar$1,
    6573         Ccedil: Ccedil$1,
    6574         ccedil: ccedil$1,
    6575         cedil: cedil$1,
    6576         cent: cent$1,
    6577         copy: copy$1,
    6578         COPY: COPY$1,
    6579         curren: curren$1,
    6580         deg: deg$1,
    6581         divide: divide$1,
    6582         Eacute: Eacute$1,
    6583         eacute: eacute$1,
    6584         Ecirc: Ecirc$1,
    6585         ecirc: ecirc$1,
    6586         Egrave: Egrave$1,
    6587         egrave: egrave$1,
    6588         ETH: ETH$1,
    6589         eth: eth$1,
    6590         Euml: Euml$1,
    6591         euml: euml$1,
    6592         frac12: frac12$1,
    6593         frac14: frac14$1,
    6594         frac34: frac34$1,
    6595         gt: gt$1,
    6596         GT: GT$1,
    6597         Iacute: Iacute$1,
    6598         iacute: iacute$1,
    6599         Icirc: Icirc$1,
    6600         icirc: icirc$1,
    6601         iexcl: iexcl$1,
    6602         Igrave: Igrave$1,
    6603         igrave: igrave$1,
    6604         iquest: iquest$1,
    6605         Iuml: Iuml$1,
    6606         iuml: iuml$1,
    6607         laquo: laquo$1,
    6608         lt: lt$1,
    6609         LT: LT$1,
    6610         macr: macr$1,
    6611         micro: micro$1,
    6612         middot: middot$1,
    6613         nbsp: nbsp$1,
    6614         not: not$1,
    6615         Ntilde: Ntilde$1,
    6616         ntilde: ntilde$1,
    6617         Oacute: Oacute$1,
    6618         oacute: oacute$1,
    6619         Ocirc: Ocirc$1,
    6620         ocirc: ocirc$1,
    6621         Ograve: Ograve$1,
    6622         ograve: ograve$1,
    6623         ordf: ordf$1,
    6624         ordm: ordm$1,
    6625         Oslash: Oslash$1,
    6626         oslash: oslash$1,
    6627         Otilde: Otilde$1,
    6628         otilde: otilde$1,
    6629         Ouml: Ouml$1,
    6630         ouml: ouml$1,
    6631         para: para$1,
    6632         plusmn: plusmn$1,
    6633         pound: pound$1,
    6634         quot: quot$1,
    6635         QUOT: QUOT$1,
    6636         raquo: raquo$1,
    6637         reg: reg$1,
    6638         REG: REG$1,
    6639         sect: sect$1,
    6640         shy: shy$1,
    6641         sup1: sup1$1,
    6642         sup2: sup2$1,
    6643         sup3: sup3$1,
    6644         szlig: szlig$1,
    6645         THORN: THORN$1,
    6646         thorn: thorn$1,
    6647         times: times$1,
    6648         Uacute: Uacute$1,
    6649         uacute: uacute$1,
    6650         Ucirc: Ucirc$1,
    6651         ucirc: ucirc$1,
    6652         Ugrave: Ugrave$1,
    6653         ugrave: ugrave$1,
    6654         uml: uml$1,
    6655         Uuml: Uuml$1,
    6656         uuml: uuml$1,
    6657         Yacute: Yacute$1,
    6658         yacute: yacute$1,
    6659         yen: yen$1,
    6660         yuml: yuml$1
    6661 };
    6662 
    6663 var legacy$1 = {
    6664         __proto__: null,
    6665         Aacute: Aacute$1,
    6666         aacute: aacute$1,
    6667         Acirc: Acirc$1,
    6668         acirc: acirc$1,
    6669         acute: acute$1,
    6670         AElig: AElig$1,
    6671         aelig: aelig$1,
    6672         Agrave: Agrave$1,
    6673         agrave: agrave$1,
    6674         amp: amp$1,
    6675         AMP: AMP$1,
    6676         Aring: Aring$1,
    6677         aring: aring$1,
    6678         Atilde: Atilde$1,
    6679         atilde: atilde$1,
    6680         Auml: Auml$1,
    6681         auml: auml$1,
    6682         brvbar: brvbar$1,
    6683         Ccedil: Ccedil$1,
    6684         ccedil: ccedil$1,
    6685         cedil: cedil$1,
    6686         cent: cent$1,
    6687         copy: copy$1,
    6688         COPY: COPY$1,
    6689         curren: curren$1,
    6690         deg: deg$1,
    6691         divide: divide$1,
    6692         Eacute: Eacute$1,
    6693         eacute: eacute$1,
    6694         Ecirc: Ecirc$1,
    6695         ecirc: ecirc$1,
    6696         Egrave: Egrave$1,
    6697         egrave: egrave$1,
    6698         ETH: ETH$1,
    6699         eth: eth$1,
    6700         Euml: Euml$1,
    6701         euml: euml$1,
    6702         frac12: frac12$1,
    6703         frac14: frac14$1,
    6704         frac34: frac34$1,
    6705         gt: gt$1,
    6706         GT: GT$1,
    6707         Iacute: Iacute$1,
    6708         iacute: iacute$1,
    6709         Icirc: Icirc$1,
    6710         icirc: icirc$1,
    6711         iexcl: iexcl$1,
    6712         Igrave: Igrave$1,
    6713         igrave: igrave$1,
    6714         iquest: iquest$1,
    6715         Iuml: Iuml$1,
    6716         iuml: iuml$1,
    6717         laquo: laquo$1,
    6718         lt: lt$1,
    6719         LT: LT$1,
    6720         macr: macr$1,
    6721         micro: micro$1,
    6722         middot: middot$1,
    6723         nbsp: nbsp$1,
    6724         not: not$1,
    6725         Ntilde: Ntilde$1,
    6726         ntilde: ntilde$1,
    6727         Oacute: Oacute$1,
    6728         oacute: oacute$1,
    6729         Ocirc: Ocirc$1,
    6730         ocirc: ocirc$1,
    6731         Ograve: Ograve$1,
    6732         ograve: ograve$1,
    6733         ordf: ordf$1,
    6734         ordm: ordm$1,
    6735         Oslash: Oslash$1,
    6736         oslash: oslash$1,
    6737         Otilde: Otilde$1,
    6738         otilde: otilde$1,
    6739         Ouml: Ouml$1,
    6740         ouml: ouml$1,
    6741         para: para$1,
    6742         plusmn: plusmn$1,
    6743         pound: pound$1,
    6744         quot: quot$1,
    6745         QUOT: QUOT$1,
    6746         raquo: raquo$1,
    6747         reg: reg$1,
    6748         REG: REG$1,
    6749         sect: sect$1,
    6750         shy: shy$1,
    6751         sup1: sup1$1,
    6752         sup2: sup2$1,
    6753         sup3: sup3$1,
    6754         szlig: szlig$1,
    6755         THORN: THORN$1,
    6756         thorn: thorn$1,
    6757         times: times$1,
    6758         Uacute: Uacute$1,
    6759         uacute: uacute$1,
    6760         Ucirc: Ucirc$1,
    6761         ucirc: ucirc$1,
    6762         Ugrave: Ugrave$1,
    6763         ugrave: ugrave$1,
    6764         uml: uml$1,
    6765         Uuml: Uuml$1,
    6766         uuml: uuml$1,
    6767         Yacute: Yacute$1,
    6768         yacute: yacute$1,
    6769         yen: yen$1,
    6770         yuml: yuml$1,
    6771         'default': legacy
    6772 };
    6773 
    6774 var amp$2 = "&";
    6775 var apos$1 = "'";
    6776 var gt$2 = ">";
    6777 var lt$2 = "<";
    6778 var quot$2 = "\"";
    6779 var xml = {
    6780         amp: amp$2,
    6781         apos: apos$1,
    6782         gt: gt$2,
    6783         lt: lt$2,
    6784         quot: quot$2
    6785 };
    6786 
    6787 var xml$1 = {
    6788         __proto__: null,
    6789         amp: amp$2,
    6790         apos: apos$1,
    6791         gt: gt$2,
    6792         lt: lt$2,
    6793         quot: quot$2,
    6794         'default': xml
    6795 };
    6796 
    6797 var decode = {
    6798         "0": 65533,
    6799         "128": 8364,
    6800         "130": 8218,
    6801         "131": 402,
    6802         "132": 8222,
    6803         "133": 8230,
    6804         "134": 8224,
    6805         "135": 8225,
    6806         "136": 710,
    6807         "137": 8240,
    6808         "138": 352,
    6809         "139": 8249,
    6810         "140": 338,
    6811         "142": 381,
    6812         "145": 8216,
    6813         "146": 8217,
    6814         "147": 8220,
    6815         "148": 8221,
    6816         "149": 8226,
    6817         "150": 8211,
    6818         "151": 8212,
    6819         "152": 732,
    6820         "153": 8482,
    6821         "154": 353,
    6822         "155": 8250,
    6823         "156": 339,
    6824         "158": 382,
    6825         "159": 376
    6826 };
    6827 
    6828 var decode$1 = {
    6829         __proto__: null,
    6830         'default': decode
    6831 };
    6832 
    6833 var require$$0 = getCjsExportFromNamespace(decode$1);
    6834 
    6835 var decode_codepoint = createCommonjsModule(function (module, exports) {
    6836 var __importDefault = (commonjsGlobal && commonjsGlobal.__importDefault) || function (mod) {
    6837     return (mod && mod.__esModule) ? mod : { "default": mod };
    6838 };
    6839 Object.defineProperty(exports, "__esModule", { value: true });
    6840 var decode_json_1 = __importDefault(require$$0);
    6841 // modified version of https://github.com/mathiasbynens/he/blob/master/src/he.js#L94-L119
    6842 function decodeCodePoint(codePoint) {
    6843     if ((codePoint >= 0xd800 && codePoint <= 0xdfff) || codePoint > 0x10ffff) {
    6844         return "\uFFFD";
    6845     }
    6846     if (codePoint in decode_json_1.default) {
    6847         codePoint = decode_json_1.default[codePoint];
    6848     }
    6849     var output = "";
    6850     if (codePoint > 0xffff) {
    6851         codePoint -= 0x10000;
    6852         output += String.fromCharCode(((codePoint >>> 10) & 0x3ff) | 0xd800);
    6853         codePoint = 0xdc00 | (codePoint & 0x3ff);
    6854     }
    6855     output += String.fromCharCode(codePoint);
    6856     return output;
    6857 }
    6858 exports.default = decodeCodePoint;
    6859 });
    6860 
    6861 var require$$1 = getCjsExportFromNamespace(entities$1);
    6862 
    6863 var require$$1$1 = getCjsExportFromNamespace(legacy$1);
    6864 
    6865 var require$$0$1 = getCjsExportFromNamespace(xml$1);
    6866 
    6867 var decode$2 = createCommonjsModule(function (module, exports) {
    6868 var __importDefault = (commonjsGlobal && commonjsGlobal.__importDefault) || function (mod) {
    6869     return (mod && mod.__esModule) ? mod : { "default": mod };
    6870 };
    6871 Object.defineProperty(exports, "__esModule", { value: true });
    6872 exports.decodeHTML = exports.decodeHTMLStrict = exports.decodeXML = void 0;
    6873 var entities_json_1 = __importDefault(require$$1);
    6874 var legacy_json_1 = __importDefault(require$$1$1);
    6875 var xml_json_1 = __importDefault(require$$0$1);
    6876 var decode_codepoint_1 = __importDefault(decode_codepoint);
    6877 exports.decodeXML = getStrictDecoder(xml_json_1.default);
    6878 exports.decodeHTMLStrict = getStrictDecoder(entities_json_1.default);
    6879 function getStrictDecoder(map) {
    6880     var keys = Object.keys(map).join("|");
    6881     var replace = getReplacer(map);
    6882     keys += "|#[xX][\\da-fA-F]+|#\\d+";
    6883     var re = new RegExp("&(?:" + keys + ");", "g");
    6884     return function (str) { return String(str).replace(re, replace); };
    6885 }
    6886 var sorter = function (a, b) { return (a < b ? 1 : -1); };
    6887 exports.decodeHTML = (function () {
    6888     var legacy = Object.keys(legacy_json_1.default).sort(sorter);
    6889     var keys = Object.keys(entities_json_1.default).sort(sorter);
    6890     for (var i = 0, j = 0; i < keys.length; i++) {
    6891         if (legacy[j] === keys[i]) {
    6892             keys[i] += ";?";
    6893             j++;
    6894         }
    6895         else {
    6896             keys[i] += ";";
    6897         }
    6898     }
    6899     var re = new RegExp("&(?:" + keys.join("|") + "|#[xX][\\da-fA-F]+;?|#\\d+;?)", "g");
    6900     var replace = getReplacer(entities_json_1.default);
    6901     function replacer(str) {
    6902         if (str.substr(-1) !== ";")
    6903             str += ";";
    6904         return replace(str);
    6905     }
    6906     //TODO consider creating a merged map
    6907     return function (str) { return String(str).replace(re, replacer); };
    6908 })();
    6909 function getReplacer(map) {
    6910     return function replace(str) {
    6911         if (str.charAt(1) === "#") {
    6912             var secondChar = str.charAt(2);
    6913             if (secondChar === "X" || secondChar === "x") {
    6914                 return decode_codepoint_1.default(parseInt(str.substr(3), 16));
    6915             }
    6916             return decode_codepoint_1.default(parseInt(str.substr(2), 10));
    6917         }
    6918         return map[str.slice(1, -1)];
    6919     };
    6920 }
    6921 });
    6922 
    6923 var encode = createCommonjsModule(function (module, exports) {
    6924 var __importDefault = (commonjsGlobal && commonjsGlobal.__importDefault) || function (mod) {
    6925     return (mod && mod.__esModule) ? mod : { "default": mod };
    6926 };
    6927 Object.defineProperty(exports, "__esModule", { value: true });
    6928 exports.escape = exports.encodeHTML = exports.encodeXML = void 0;
    6929 var xml_json_1 = __importDefault(require$$0$1);
    6930 var inverseXML = getInverseObj(xml_json_1.default);
    6931 var xmlReplacer = getInverseReplacer(inverseXML);
    6932 exports.encodeXML = getInverse(inverseXML, xmlReplacer);
    6933 var entities_json_1 = __importDefault(require$$1);
    6934 var inverseHTML = getInverseObj(entities_json_1.default);
    6935 var htmlReplacer = getInverseReplacer(inverseHTML);
    6936 exports.encodeHTML = getInverse(inverseHTML, htmlReplacer);
    6937 function getInverseObj(obj) {
    6938     return Object.keys(obj)
    6939         .sort()
    6940         .reduce(function (inverse, name) {
    6941         inverse[obj[name]] = "&" + name + ";";
    6942         return inverse;
    6943     }, {});
    6944 }
    6945 function getInverseReplacer(inverse) {
    6946     var single = [];
    6947     var multiple = [];
    6948     for (var _i = 0, _a = Object.keys(inverse); _i < _a.length; _i++) {
    6949         var k = _a[_i];
    6950         if (k.length === 1) {
    6951             // Add value to single array
    6952             single.push("\\" + k);
    6953         }
    6954         else {
    6955             // Add value to multiple array
    6956             multiple.push(k);
    6957         }
    6958     }
    6959     // Add ranges to single characters.
    6960     single.sort();
    6961     for (var start = 0; start < single.length - 1; start++) {
    6962         // Find the end of a run of characters
    6963         var end = start;
    6964         while (end < single.length - 1 &&
    6965             single[end].charCodeAt(1) + 1 === single[end + 1].charCodeAt(1)) {
    6966             end += 1;
    6967         }
    6968         var count = 1 + end - start;
    6969         // We want to replace at least three characters
    6970         if (count < 3)
    6971             continue;
    6972         single.splice(start, count, single[start] + "-" + single[end]);
    6973     }
    6974     multiple.unshift("[" + single.join("") + "]");
    6975     return new RegExp(multiple.join("|"), "g");
    6976 }
    6977 var reNonASCII = /(?:[\x80-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])/g;
    6978 function singleCharReplacer(c) {
    6979     // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
    6980     return "&#x" + c.codePointAt(0).toString(16).toUpperCase() + ";";
    6981 }
    6982 function getInverse(inverse, re) {
    6983     return function (data) {
    6984         return data
    6985             .replace(re, function (name) { return inverse[name]; })
    6986             .replace(reNonASCII, singleCharReplacer);
    6987     };
    6988 }
    6989 var reXmlChars = getInverseReplacer(inverseXML);
    6990 function escape(data) {
    6991     return data
    6992         .replace(reXmlChars, singleCharReplacer)
    6993         .replace(reNonASCII, singleCharReplacer);
    6994 }
    6995 exports.escape = escape;
    6996 });
    6997 
    6998 var lib$1 = createCommonjsModule(function (module, exports) {
    6999 Object.defineProperty(exports, "__esModule", { value: true });
    7000 exports.encode = exports.decodeStrict = exports.decode = void 0;
    7001 
    7002 
    7003 /**
    7004  * Decodes a string with entities.
    7005  *
    7006  * @param data String to decode.
    7007  * @param level Optional level to decode at. 0 = XML, 1 = HTML. Default is 0.
    7008  */
    7009 function decode(data, level) {
    7010     return (!level || level <= 0 ? decode$2.decodeXML : decode$2.decodeHTML)(data);
    7011 }
    7012 exports.decode = decode;
    7013 /**
    7014  * Decodes a string with entities. Does not allow missing trailing semicolons for entities.
    7015  *
    7016  * @param data String to decode.
    7017  * @param level Optional level to decode at. 0 = XML, 1 = HTML. Default is 0.
    7018  */
    7019 function decodeStrict(data, level) {
    7020     return (!level || level <= 0 ? decode$2.decodeXML : decode$2.decodeHTMLStrict)(data);
    7021 }
    7022 exports.decodeStrict = decodeStrict;
    7023 /**
    7024  * Encodes a string with entities.
    7025  *
    7026  * @param data String to encode.
    7027  * @param level Optional level to encode at. 0 = XML, 1 = HTML. Default is 0.
    7028  */
    7029 function encode$1(data, level) {
    7030     return (!level || level <= 0 ? encode.encodeXML : encode.encodeHTML)(data);
    7031 }
    7032 exports.encode = encode$1;
    7033 var encode_2 = encode;
    7034 Object.defineProperty(exports, "encodeXML", { enumerable: true, get: function () { return encode_2.encodeXML; } });
    7035 Object.defineProperty(exports, "encodeHTML", { enumerable: true, get: function () { return encode_2.encodeHTML; } });
    7036 Object.defineProperty(exports, "escape", { enumerable: true, get: function () { return encode_2.escape; } });
    7037 // Legacy aliases
    7038 Object.defineProperty(exports, "encodeHTML4", { enumerable: true, get: function () { return encode_2.encodeHTML; } });
    7039 Object.defineProperty(exports, "encodeHTML5", { enumerable: true, get: function () { return encode_2.encodeHTML; } });
    7040 var decode_2 = decode$2;
    7041 Object.defineProperty(exports, "decodeXML", { enumerable: true, get: function () { return decode_2.decodeXML; } });
    7042 Object.defineProperty(exports, "decodeHTML", { enumerable: true, get: function () { return decode_2.decodeHTML; } });
    7043 Object.defineProperty(exports, "decodeHTMLStrict", { enumerable: true, get: function () { return decode_2.decodeHTMLStrict; } });
    7044 // Legacy aliases
    7045 Object.defineProperty(exports, "decodeHTML4", { enumerable: true, get: function () { return decode_2.decodeHTML; } });
    7046 Object.defineProperty(exports, "decodeHTML5", { enumerable: true, get: function () { return decode_2.decodeHTML; } });
    7047 Object.defineProperty(exports, "decodeHTML4Strict", { enumerable: true, get: function () { return decode_2.decodeHTMLStrict; } });
    7048 Object.defineProperty(exports, "decodeHTML5Strict", { enumerable: true, get: function () { return decode_2.decodeHTMLStrict; } });
    7049 Object.defineProperty(exports, "decodeXMLStrict", { enumerable: true, get: function () { return decode_2.decodeXML; } });
    7050 });
    7051 
    7052 var elementNames = {
    7053         altglyph: "altGlyph",
    7054         altglyphdef: "altGlyphDef",
    7055         altglyphitem: "altGlyphItem",
    7056         animatecolor: "animateColor",
    7057         animatemotion: "animateMotion",
    7058         animatetransform: "animateTransform",
    7059         clippath: "clipPath",
    7060         feblend: "feBlend",
    7061         fecolormatrix: "feColorMatrix",
    7062         fecomponenttransfer: "feComponentTransfer",
    7063         fecomposite: "feComposite",
    7064         feconvolvematrix: "feConvolveMatrix",
    7065         fediffuselighting: "feDiffuseLighting",
    7066         fedisplacementmap: "feDisplacementMap",
    7067         fedistantlight: "feDistantLight",
    7068         fedropshadow: "feDropShadow",
    7069         feflood: "feFlood",
    7070         fefunca: "feFuncA",
    7071         fefuncb: "feFuncB",
    7072         fefuncg: "feFuncG",
    7073         fefuncr: "feFuncR",
    7074         fegaussianblur: "feGaussianBlur",
    7075         feimage: "feImage",
    7076         femerge: "feMerge",
    7077         femergenode: "feMergeNode",
    7078         femorphology: "feMorphology",
    7079         feoffset: "feOffset",
    7080         fepointlight: "fePointLight",
    7081         fespecularlighting: "feSpecularLighting",
    7082         fespotlight: "feSpotLight",
    7083         fetile: "feTile",
    7084         feturbulence: "feTurbulence",
    7085         foreignobject: "foreignObject",
    7086         glyphref: "glyphRef",
    7087         lineargradient: "linearGradient",
    7088         radialgradient: "radialGradient",
    7089         textpath: "textPath"
    7090 };
    7091 var attributeNames = {
    7092         definitionurl: "definitionURL",
    7093         attributename: "attributeName",
    7094         attributetype: "attributeType",
    7095         basefrequency: "baseFrequency",
    7096         baseprofile: "baseProfile",
    7097         calcmode: "calcMode",
    7098         clippathunits: "clipPathUnits",
    7099         diffuseconstant: "diffuseConstant",
    7100         edgemode: "edgeMode",
    7101         filterunits: "filterUnits",
    7102         glyphref: "glyphRef",
    7103         gradienttransform: "gradientTransform",
    7104         gradientunits: "gradientUnits",
    7105         kernelmatrix: "kernelMatrix",
    7106         kernelunitlength: "kernelUnitLength",
    7107         keypoints: "keyPoints",
    7108         keysplines: "keySplines",
    7109         keytimes: "keyTimes",
    7110         lengthadjust: "lengthAdjust",
    7111         limitingconeangle: "limitingConeAngle",
    7112         markerheight: "markerHeight",
    7113         markerunits: "markerUnits",
    7114         markerwidth: "markerWidth",
    7115         maskcontentunits: "maskContentUnits",
    7116         maskunits: "maskUnits",
    7117         numoctaves: "numOctaves",
    7118         pathlength: "pathLength",
    7119         patterncontentunits: "patternContentUnits",
    7120         patterntransform: "patternTransform",
    7121         patternunits: "patternUnits",
    7122         pointsatx: "pointsAtX",
    7123         pointsaty: "pointsAtY",
    7124         pointsatz: "pointsAtZ",
    7125         preservealpha: "preserveAlpha",
    7126         preserveaspectratio: "preserveAspectRatio",
    7127         primitiveunits: "primitiveUnits",
    7128         refx: "refX",
    7129         refy: "refY",
    7130         repeatcount: "repeatCount",
    7131         repeatdur: "repeatDur",
    7132         requiredextensions: "requiredExtensions",
    7133         requiredfeatures: "requiredFeatures",
    7134         specularconstant: "specularConstant",
    7135         specularexponent: "specularExponent",
    7136         spreadmethod: "spreadMethod",
    7137         startoffset: "startOffset",
    7138         stddeviation: "stdDeviation",
    7139         stitchtiles: "stitchTiles",
    7140         surfacescale: "surfaceScale",
    7141         systemlanguage: "systemLanguage",
    7142         tablevalues: "tableValues",
    7143         targetx: "targetX",
    7144         targety: "targetY",
    7145         textlength: "textLength",
    7146         viewbox: "viewBox",
    7147         viewtarget: "viewTarget",
    7148         xchannelselector: "xChannelSelector",
    7149         ychannelselector: "yChannelSelector",
    7150         zoomandpan: "zoomAndPan"
    7151 };
    7152 var foreignNames = {
    7153         elementNames: elementNames,
    7154         attributeNames: attributeNames
    7155 };
    7156 
    7157 var foreignNames$1 = {
    7158         __proto__: null,
    7159         elementNames: elementNames,
    7160         attributeNames: attributeNames,
    7161         'default': foreignNames
    7162 };
    7163 
    7164 var foreignNames$2 = getCjsExportFromNamespace(foreignNames$1);
    7165 
    7166 var domSerializer = createCommonjsModule(function (module) {
    7167 /*
    7168   Module dependencies
    7169 */
    7170 
    7171 
    7172 
    7173 /* mixed-case SVG and MathML tags & attributes
    7174    recognized by the HTML parser, see
    7175    https://html.spec.whatwg.org/multipage/parsing.html#parsing-main-inforeign
    7176 */
    7177 
    7178 foreignNames$2.elementNames.__proto__ = null; /* use as a simple dictionary */
    7179 foreignNames$2.attributeNames.__proto__ = null;
    7180 
    7181 var unencodedElements = {
    7182   __proto__: null,
    7183   style: true,
    7184   script: true,
    7185   xmp: true,
    7186   iframe: true,
    7187   noembed: true,
    7188   noframes: true,
    7189   plaintext: true,
    7190   noscript: true
    7191 };
    7192 
    7193 /*
    7194   Format attributes
    7195 */
    7196 function formatAttrs(attributes, opts) {
    7197   if (!attributes) return;
    7198 
    7199   var output = '';
    7200   var value;
    7201 
    7202   // Loop through the attributes
    7203   for (var key in attributes) {
    7204     value = attributes[key];
    7205     if (output) {
    7206       output += ' ';
    7207     }
    7208 
    7209     if (opts.xmlMode === 'foreign') {
    7210       /* fix up mixed-case attribute names */
    7211       key = foreignNames$2.attributeNames[key] || key;
    7212     }
    7213     output += key;
    7214     if ((value !== null && value !== '') || opts.xmlMode) {
    7215       output +=
    7216         '="' +
    7217         (opts.decodeEntities
    7218           ? lib$1.encodeXML(value)
    7219           : value.replace(/\"/g, '&quot;')) +
    7220         '"';
    7221     }
    7222   }
    7223 
    7224   return output;
    7225 }
    7226 
    7227 /*
    7228   Self-enclosing tags (stolen from node-htmlparser)
    7229 */
    7230 var singleTag = {
    7231   __proto__: null,
    7232   area: true,
    7233   base: true,
    7234   basefont: true,
    7235   br: true,
    7236   col: true,
    7237   command: true,
    7238   embed: true,
    7239   frame: true,
    7240   hr: true,
    7241   img: true,
    7242   input: true,
    7243   isindex: true,
    7244   keygen: true,
    7245   link: true,
    7246   meta: true,
    7247   param: true,
    7248   source: true,
    7249   track: true,
    7250   wbr: true
    7251 };
    7252 
    7253 var render = (module.exports = function(dom, opts) {
    7254   if (!Array.isArray(dom) && !dom.cheerio) dom = [dom];
    7255   opts = opts || {};
    7256 
    7257   var output = '';
    7258 
    7259   for (var i = 0; i < dom.length; i++) {
    7260     var elem = dom[i];
    7261 
    7262     if (elem.type === 'root') output += render(elem.children, opts);
    7263     else if (lib.isTag(elem)) output += renderTag(elem, opts);
    7264     else if (elem.type === lib.Directive)
    7265       output += renderDirective(elem);
    7266     else if (elem.type === lib.Comment) output += renderComment(elem);
    7267     else if (elem.type === lib.CDATA) output += renderCdata(elem);
    7268     else output += renderText(elem, opts);
    7269   }
    7270 
    7271   return output;
    7272 });
    7273 
    7274 var foreignModeIntegrationPoints = [
    7275   'mi',
    7276   'mo',
    7277   'mn',
    7278   'ms',
    7279   'mtext',
    7280   'annotation-xml',
    7281   'foreignObject',
    7282   'desc',
    7283   'title'
    7284 ];
    7285 
    7286 function renderTag(elem, opts) {
    7287   // Handle SVG / MathML in HTML
    7288   if (opts.xmlMode === 'foreign') {
    7289     /* fix up mixed-case element names */
    7290     elem.name = foreignNames$2.elementNames[elem.name] || elem.name;
    7291     /* exit foreign mode at integration points */
    7292     if (
    7293       elem.parent &&
    7294       foreignModeIntegrationPoints.indexOf(elem.parent.name) >= 0
    7295     )
    7296       opts = Object.assign({}, opts, { xmlMode: false });
    7297   }
    7298   if (!opts.xmlMode && ['svg', 'math'].indexOf(elem.name) >= 0) {
    7299     opts = Object.assign({}, opts, { xmlMode: 'foreign' });
    7300   }
    7301 
    7302   var tag = '<' + elem.name;
    7303   var attribs = formatAttrs(elem.attribs, opts);
    7304 
    7305   if (attribs) {
    7306     tag += ' ' + attribs;
    7307   }
    7308 
    7309   if (opts.xmlMode && (!elem.children || elem.children.length === 0)) {
    7310     tag += '/>';
    7311   } else {
    7312     tag += '>';
    7313     if (elem.children) {
    7314       tag += render(elem.children, opts);
    7315     }
    7316 
    7317     if (!singleTag[elem.name] || opts.xmlMode) {
    7318       tag += '</' + elem.name + '>';
    7319     }
    7320   }
    7321 
    7322   return tag;
    7323 }
    7324 
    7325 function renderDirective(elem) {
    7326   return '<' + elem.data + '>';
    7327 }
    7328 
    7329 function renderText(elem, opts) {
    7330   var data = elem.data || '';
    7331 
    7332   // if entities weren't decoded, no need to encode them back
    7333   if (
    7334     opts.decodeEntities &&
    7335     !(elem.parent && elem.parent.name in unencodedElements)
    7336   ) {
    7337     data = lib$1.encodeXML(data);
    7338   }
    7339 
    7340   return data;
    7341 }
    7342 
    7343 function renderCdata(elem) {
    7344   return '<![CDATA[' + elem.children[0].data + ']]>';
    7345 }
    7346 
    7347 function renderComment(elem) {
    7348   return '<!--' + elem.data + '-->';
    7349 }
    7350 });
    7351 
    7352 var isTag = domelementtype.isTag;
    7353 
    7354 var stringify = {
    7355         getInnerHTML: getInnerHTML,
    7356         getOuterHTML: domSerializer,
    7357         getText: getText
    7358 };
    7359 
    7360 function getInnerHTML(elem, opts){
    7361         return elem.children ? elem.children.map(function(elem){
    7362                 return domSerializer(elem, opts);
    7363         }).join("") : "";
    7364 }
    7365 
    7366 function getText(elem){
    7367         if(Array.isArray(elem)) return elem.map(getText).join("");
    7368         if(isTag(elem) || elem.type === domelementtype.CDATA) return getText(elem.children);
    7369         if(elem.type === domelementtype.Text) return elem.data;
    7370         return "";
    7371 }
    7372 
    7373 var traversal = createCommonjsModule(function (module, exports) {
    7374 var getChildren = exports.getChildren = function(elem){
    7375         return elem.children;
    7376 };
    7377 
    7378 var getParent = exports.getParent = function(elem){
    7379         return elem.parent;
    7380 };
    7381 
    7382 exports.getSiblings = function(elem){
    7383         var parent = getParent(elem);
    7384         return parent ? getChildren(parent) : [elem];
    7385 };
    7386 
    7387 exports.getAttributeValue = function(elem, name){
    7388         return elem.attribs && elem.attribs[name];
    7389 };
    7390 
    7391 exports.hasAttrib = function(elem, name){
    7392         return !!elem.attribs && hasOwnProperty.call(elem.attribs, name);
    7393 };
    7394 
    7395 exports.getName = function(elem){
    7396         return elem.name;
    7397 };
    7398 });
    7399 
    7400 var removeElement = function(elem){
    7401         if(elem.prev) elem.prev.next = elem.next;
    7402         if(elem.next) elem.next.prev = elem.prev;
    7403 
    7404         if(elem.parent){
    7405                 var childs = elem.parent.children;
    7406                 childs.splice(childs.lastIndexOf(elem), 1);
    7407         }
    7408 };
    7409 
    7410 var replaceElement = function(elem, replacement){
    7411         var prev = replacement.prev = elem.prev;
    7412         if(prev){
    7413                 prev.next = replacement;
    7414         }
    7415 
    7416         var next = replacement.next = elem.next;
    7417         if(next){
    7418                 next.prev = replacement;
    7419         }
    7420 
    7421         var parent = replacement.parent = elem.parent;
    7422         if(parent){
    7423                 var childs = parent.children;
    7424                 childs[childs.lastIndexOf(elem)] = replacement;
    7425         }
    7426 };
    7427 
    7428 var appendChild = function(elem, child){
    7429         child.parent = elem;
    7430 
    7431         if(elem.children.push(child) !== 1){
    7432                 var sibling = elem.children[elem.children.length - 2];
    7433                 sibling.next = child;
    7434                 child.prev = sibling;
    7435                 child.next = null;
    7436         }
    7437 };
    7438 
    7439 var append = function(elem, next){
    7440         var parent = elem.parent,
    7441                 currNext = elem.next;
    7442 
    7443         next.next = currNext;
    7444         next.prev = elem;
    7445         elem.next = next;
    7446         next.parent = parent;
    7447 
    7448         if(currNext){
    7449                 currNext.prev = next;
    7450                 if(parent){
    7451                         var childs = parent.children;
    7452                         childs.splice(childs.lastIndexOf(currNext), 0, next);
    7453                 }
    7454         } else if(parent){
    7455                 parent.children.push(next);
    7456         }
    7457 };
    7458 
    7459 var prepend = function(elem, prev){
    7460         var parent = elem.parent;
    7461         if(parent){
    7462                 var childs = parent.children;
    7463                 childs.splice(childs.lastIndexOf(elem), 0, prev);
    7464         }
    7465 
    7466         if(elem.prev){
    7467                 elem.prev.next = prev;
    7468         }
    7469        
    7470         prev.parent = parent;
    7471         prev.prev = elem.prev;
    7472         prev.next = elem;
    7473         elem.prev = prev;
    7474 };
    7475 
    7476 var manipulation = {
    7477         removeElement: removeElement,
    7478         replaceElement: replaceElement,
    7479         appendChild: appendChild,
    7480         append: append,
    7481         prepend: prepend
    7482 };
    7483 
    7484 var isTag$1 = domelementtype.isTag;
    7485 
    7486 var querying = {
    7487         filter: filter,
    7488         find: find,
    7489         findOneChild: findOneChild,
    7490         findOne: findOne,
    7491         existsOne: existsOne,
    7492         findAll: findAll
    7493 };
    7494 
    7495 function filter(test, element, recurse, limit){
    7496         if(!Array.isArray(element)) element = [element];
    7497 
    7498         if(typeof limit !== "number" || !isFinite(limit)){
    7499                 limit = Infinity;
    7500         }
    7501         return find(test, element, recurse !== false, limit);
    7502 }
    7503 
    7504 function find(test, elems, recurse, limit){
    7505         var result = [], childs;
    7506 
    7507         for(var i = 0, j = elems.length; i < j; i++){
    7508                 if(test(elems[i])){
    7509                         result.push(elems[i]);
    7510                         if(--limit <= 0) break;
    7511                 }
    7512 
    7513                 childs = elems[i].children;
    7514                 if(recurse && childs && childs.length > 0){
    7515                         childs = find(test, childs, recurse, limit);
    7516                         result = result.concat(childs);
    7517                         limit -= childs.length;
    7518                         if(limit <= 0) break;
    7519                 }
    7520         }
    7521 
    7522         return result;
    7523 }
    7524 
    7525 function findOneChild(test, elems){
    7526         for(var i = 0, l = elems.length; i < l; i++){
    7527                 if(test(elems[i])) return elems[i];
    7528         }
    7529 
    7530         return null;
    7531 }
    7532 
    7533 function findOne(test, elems){
    7534         var elem = null;
    7535 
    7536         for(var i = 0, l = elems.length; i < l && !elem; i++){
    7537                 if(!isTag$1(elems[i])){
    7538                         continue;
    7539                 } else if(test(elems[i])){
    7540                         elem = elems[i];
    7541                 } else if(elems[i].children.length > 0){
    7542                         elem = findOne(test, elems[i].children);
    7543                 }
    7544         }
    7545 
    7546         return elem;
    7547 }
    7548 
    7549 function existsOne(test, elems){
    7550         for(var i = 0, l = elems.length; i < l; i++){
    7551                 if(
    7552                         isTag$1(elems[i]) && (
    7553                                 test(elems[i]) || (
    7554                                         elems[i].children.length > 0 &&
    7555                                         existsOne(test, elems[i].children)
    7556                                 )
    7557                         )
    7558                 ){
    7559                         return true;
    7560                 }
    7561         }
    7562 
    7563         return false;
    7564 }
    7565 
    7566 function findAll(test, elems){
    7567         var result = [];
    7568         for(var i = 0, j = elems.length; i < j; i++){
    7569                 if(!isTag$1(elems[i])) continue;
    7570                 if(test(elems[i])) result.push(elems[i]);
    7571 
    7572                 if(elems[i].children.length > 0){
    7573                         result = result.concat(findAll(test, elems[i].children));
    7574                 }
    7575         }
    7576         return result;
    7577 }
    7578 
    7579 var legacy$2 = createCommonjsModule(function (module, exports) {
    7580 var isTag = exports.isTag = domelementtype.isTag;
    7581 
    7582 exports.testElement = function(options, element){
    7583         for(var key in options){
    7584                 if(!options.hasOwnProperty(key));
    7585                 else if(key === "tag_name"){
    7586                         if(!isTag(element) || !options.tag_name(element.name)){
    7587                                 return false;
    7588                         }
    7589                 } else if(key === "tag_type"){
    7590                         if(!options.tag_type(element.type)) return false;
    7591                 } else if(key === "tag_contains"){
    7592                         if(isTag(element) || !options.tag_contains(element.data)){
    7593                                 return false;
    7594                         }
    7595                 } else if(!element.attribs || !options[key](element.attribs[key])){
    7596                         return false;
    7597                 }
    7598         }
    7599         return true;
    7600 };
    7601 
    7602 var Checks = {
    7603         tag_name: function(name){
    7604                 if(typeof name === "function"){
    7605                         return function(elem){ return isTag(elem) && name(elem.name); };
    7606                 } else if(name === "*"){
    7607                         return isTag;
    7608                 } else {
    7609                         return function(elem){ return isTag(elem) && elem.name === name; };
    7610                 }
    7611         },
    7612         tag_type: function(type){
    7613                 if(typeof type === "function"){
    7614                         return function(elem){ return type(elem.type); };
    7615                 } else {
    7616                         return function(elem){ return elem.type === type; };
    7617                 }
    7618         },
    7619         tag_contains: function(data){
    7620                 if(typeof data === "function"){
    7621                         return function(elem){ return !isTag(elem) && data(elem.data); };
    7622                 } else {
    7623                         return function(elem){ return !isTag(elem) && elem.data === data; };
    7624                 }
    7625         }
    7626 };
    7627 
    7628 function getAttribCheck(attrib, value){
    7629         if(typeof value === "function"){
    7630                 return function(elem){ return elem.attribs && value(elem.attribs[attrib]); };
    7631         } else {
    7632                 return function(elem){ return elem.attribs && elem.attribs[attrib] === value; };
    7633         }
    7634 }
    7635 
    7636 function combineFuncs(a, b){
    7637         return function(elem){
    7638                 return a(elem) || b(elem);
    7639         };
    7640 }
    7641 
    7642 exports.getElements = function(options, element, recurse, limit){
    7643         var funcs = Object.keys(options).map(function(key){
    7644                 var value = options[key];
    7645                 return key in Checks ? Checks[key](value) : getAttribCheck(key, value);
    7646         });
    7647 
    7648         return funcs.length === 0 ? [] : this.filter(
    7649                 funcs.reduce(combineFuncs),
    7650                 element, recurse, limit
    7651         );
    7652 };
    7653 
    7654 exports.getElementById = function(id, element, recurse){
    7655         if(!Array.isArray(element)) element = [element];
    7656         return this.findOne(getAttribCheck("id", id), element, recurse !== false);
    7657 };
    7658 
    7659 exports.getElementsByTagName = function(name, element, recurse, limit){
    7660         return this.filter(Checks.tag_name(name), element, recurse, limit);
    7661 };
    7662 
    7663 exports.getElementsByTagType = function(type, element, recurse, limit){
    7664         return this.filter(Checks.tag_type(type), element, recurse, limit);
    7665 };
    7666 });
    7667 
    7668 var helpers = createCommonjsModule(function (module, exports) {
    7669 // removeSubsets
    7670 // Given an array of nodes, remove any member that is contained by another.
    7671 exports.removeSubsets = function(nodes) {
    7672         var idx = nodes.length, node, ancestor, replace;
    7673 
    7674         // Check if each node (or one of its ancestors) is already contained in the
    7675         // array.
    7676         while (--idx > -1) {
    7677                 node = ancestor = nodes[idx];
    7678 
    7679                 // Temporarily remove the node under consideration
    7680                 nodes[idx] = null;
    7681                 replace = true;
    7682 
    7683                 while (ancestor) {
    7684                         if (nodes.indexOf(ancestor) > -1) {
    7685                                 replace = false;
    7686                                 nodes.splice(idx, 1);
    7687                                 break;
    7688                         }
    7689                         ancestor = ancestor.parent;
    7690                 }
    7691 
    7692                 // If the node has been found to be unique, re-insert it.
    7693                 if (replace) {
    7694                         nodes[idx] = node;
    7695                 }
    7696         }
    7697 
    7698         return nodes;
    7699 };
    7700 
    7701 // Source: http://dom.spec.whatwg.org/#dom-node-comparedocumentposition
    7702 var POSITION = {
    7703         DISCONNECTED: 1,
    7704         PRECEDING: 2,
    7705         FOLLOWING: 4,
    7706         CONTAINS: 8,
    7707         CONTAINED_BY: 16
    7708 };
    7709 
    7710 // Compare the position of one node against another node in any other document.
    7711 // The return value is a bitmask with the following values:
    7712 //
    7713 // document order:
    7714 // > There is an ordering, document order, defined on all the nodes in the
    7715 // > document corresponding to the order in which the first character of the
    7716 // > XML representation of each node occurs in the XML representation of the
    7717 // > document after expansion of general entities. Thus, the document element
    7718 // > node will be the first node. Element nodes occur before their children.
    7719 // > Thus, document order orders element nodes in order of the occurrence of
    7720 // > their start-tag in the XML (after expansion of entities). The attribute
    7721 // > nodes of an element occur after the element and before its children. The
    7722 // > relative order of attribute nodes is implementation-dependent./
    7723 // Source:
    7724 // http://www.w3.org/TR/DOM-Level-3-Core/glossary.html#dt-document-order
    7725 //
    7726 // @argument {Node} nodaA The first node to use in the comparison
    7727 // @argument {Node} nodeB The second node to use in the comparison
    7728 //
    7729 // @return {Number} A bitmask describing the input nodes' relative position.
    7730 //         See http://dom.spec.whatwg.org/#dom-node-comparedocumentposition for
    7731 //         a description of these values.
    7732 var comparePos = exports.compareDocumentPosition = function(nodeA, nodeB) {
    7733         var aParents = [];
    7734         var bParents = [];
    7735         var current, sharedParent, siblings, aSibling, bSibling, idx;
    7736 
    7737         if (nodeA === nodeB) {
    7738                 return 0;
    7739         }
    7740 
    7741         current = nodeA;
    7742         while (current) {
    7743                 aParents.unshift(current);
    7744                 current = current.parent;
    7745         }
    7746         current = nodeB;
    7747         while (current) {
    7748                 bParents.unshift(current);
    7749                 current = current.parent;
    7750         }
    7751 
    7752         idx = 0;
    7753         while (aParents[idx] === bParents[idx]) {
    7754                 idx++;
    7755         }
    7756 
    7757         if (idx === 0) {
    7758                 return POSITION.DISCONNECTED;
    7759         }
    7760 
    7761         sharedParent = aParents[idx - 1];
    7762         siblings = sharedParent.children;
    7763         aSibling = aParents[idx];
    7764         bSibling = bParents[idx];
    7765 
    7766         if (siblings.indexOf(aSibling) > siblings.indexOf(bSibling)) {
    7767                 if (sharedParent === nodeB) {
    7768                         return POSITION.FOLLOWING | POSITION.CONTAINED_BY;
    7769                 }
    7770                 return POSITION.FOLLOWING;
    7771         } else {
    7772                 if (sharedParent === nodeA) {
    7773                         return POSITION.PRECEDING | POSITION.CONTAINS;
    7774                 }
    7775                 return POSITION.PRECEDING;
    7776         }
    7777 };
    7778 
    7779 // Sort an array of nodes based on their relative position in the document and
    7780 // remove any duplicate nodes. If the array contains nodes that do not belong
    7781 // to the same document, sort order is unspecified.
    7782 //
    7783 // @argument {Array} nodes Array of DOM nodes
    7784 //
    7785 // @returns {Array} collection of unique nodes, sorted in document order
    7786 exports.uniqueSort = function(nodes) {
    7787         var idx = nodes.length, node, position;
    7788 
    7789         nodes = nodes.slice();
    7790 
    7791         while (--idx > -1) {
    7792                 node = nodes[idx];
    7793                 position = nodes.indexOf(node);
    7794                 if (position > -1 && position < idx) {
    7795                         nodes.splice(idx, 1);
    7796                 }
    7797         }
    7798         nodes.sort(function(a, b) {
    7799                 var relative = comparePos(a, b);
    7800                 if (relative & POSITION.PRECEDING) {
    7801                         return -1;
    7802                 } else if (relative & POSITION.FOLLOWING) {
    7803                         return 1;
    7804                 }
    7805                 return 0;
    7806         });
    7807 
    7808         return nodes;
    7809 };
    7810 });
    7811 
    7812 var domutils = createCommonjsModule(function (module) {
    7813 var DomUtils = module.exports;
    7814 
    7815 [
    7816         stringify,
    7817         traversal,
    7818         manipulation,
    7819         querying,
    7820         legacy$2,
    7821         helpers
    7822 ].forEach(function(ext){
    7823         Object.keys(ext).forEach(function(key){
    7824                 DomUtils[key] = ext[key].bind(DomUtils);
    7825         });
    7826 });
    7827 });
    7828 
    7829 var parse_1 = parse;
    7830 
    7831 //following http://www.w3.org/TR/css3-selectors/#nth-child-pseudo
    7832 
    7833 //[ ['-'|'+']? INTEGER? {N} [ S* ['-'|'+'] S* INTEGER ]?
    7834 var re_nthElement = /^([+\-]?\d*n)?\s*(?:([+\-]?)\s*(\d+))?$/;
    7835 
    7836 /*
    7837         parses a nth-check formula, returns an array of two numbers
    7838 */
    7839 function parse(formula){
    7840         formula = formula.trim().toLowerCase();
    7841 
    7842         if(formula === "even"){
    7843                 return [2, 0];
    7844         } else if(formula === "odd"){
    7845                 return [2, 1];
    7846         } else {
    7847                 var parsed = formula.match(re_nthElement);
    7848 
    7849                 if(!parsed){
    7850                         throw new SyntaxError("n-th rule couldn't be parsed ('" + formula + "')");
    7851                 }
    7852 
    7853                 var a;
    7854 
    7855                 if(parsed[1]){
    7856                         a = parseInt(parsed[1], 10);
    7857                         if(isNaN(a)){
    7858                                 if(parsed[1].charAt(0) === "-") a = -1;
    7859                                 else a = 1;
    7860                         }
    7861                 } else a = 0;
    7862 
    7863                 return [
    7864                         a,
    7865                         parsed[3] ? parseInt((parsed[2] || "") + parsed[3], 10) : 0
    7866                 ];
    7867         }
    7868 }
    7869 
    7870 var boolbase = {
    7871         trueFunc: function trueFunc(){
    7872                 return true;
    7873         },
    7874         falseFunc: function falseFunc(){
    7875                 return false;
    7876         }
    7877 };
    7878 
    7879 var compile_1 = compile;
    7880 
    7881 var trueFunc  = boolbase.trueFunc,
    7882     falseFunc = boolbase.falseFunc;
    7883 
    7884 /*
    7885         returns a function that checks if an elements index matches the given rule
    7886         highly optimized to return the fastest solution
    7887 */
    7888 function compile(parsed){
    7889         var a = parsed[0],
    7890             b = parsed[1] - 1;
    7891 
    7892         //when b <= 0, a*n won't be possible for any matches when a < 0
    7893         //besides, the specification says that no element is matched when a and b are 0
    7894         if(b < 0 && a <= 0) return falseFunc;
    7895 
    7896         //when a is in the range -1..1, it matches any element (so only b is checked)
    7897         if(a ===-1) return function(pos){ return pos <= b; };
    7898         if(a === 0) return function(pos){ return pos === b; };
    7899         //when b <= 0 and a === 1, they match any element
    7900         if(a === 1) return b < 0 ? trueFunc : function(pos){ return pos >= b; };
    7901 
    7902         //when a > 0, modulo can be used to check if there is a match
    7903         var bMod = b % a;
    7904         if(bMod < 0) bMod += a;
    7905 
    7906         if(a > 1){
    7907                 return function(pos){
    7908                         return pos >= b && pos % a === bMod;
    7909                 };
    7910         }
    7911 
    7912         a *= -1; //make `a` positive
    7913 
    7914         return function(pos){
    7915                 return pos <= b && pos % a === bMod;
    7916         };
    7917 }
    7918 
    7919 var nthCheck = function nthCheck(formula){
    7920         return compile_1(parse_1(formula));
    7921 };
    7922 
    7923 var parse_1$1 = parse_1;
    7924 var compile_1$1 = compile_1;
    7925 nthCheck.parse = parse_1$1;
    7926 nthCheck.compile = compile_1$1;
    7927 
    7928 var hasAttrib = domutils.hasAttrib,
    7929     getAttributeValue = domutils.getAttributeValue,
    7930     falseFunc$1 = boolbase.falseFunc;
    7931 
    7932 //https://github.com/slevithan/XRegExp/blob/master/src/xregexp.js#L469
    7933 var reChars = /[-[\]{}()*+?.,\\^$|#\s]/g;
    7934 
    7935 /*
    7936         attribute selectors
    7937 */
    7938 
    7939 var attributeRules = {
    7940         __proto__: null,
    7941         equals: function(next, data){
    7942                 var name  = data.name,
    7943                     value = data.value;
    7944 
    7945                 if(data.ignoreCase){
    7946                         value = value.toLowerCase();
    7947 
    7948                         return function equalsIC(elem){
    7949                                 var attr = getAttributeValue(elem, name);
    7950                                 return attr != null && attr.toLowerCase() === value && next(elem);
    7951                         };
    7952                 }
    7953 
    7954                 return function equals(elem){
    7955                         return getAttributeValue(elem, name) === value && next(elem);
    7956                 };
    7957         },
    7958         hyphen: function(next, data){
    7959                 var name  = data.name,
    7960                     value = data.value,
    7961                     len = value.length;
    7962 
    7963                 if(data.ignoreCase){
    7964                         value = value.toLowerCase();
    7965 
    7966                         return function hyphenIC(elem){
    7967                                 var attr = getAttributeValue(elem, name);
    7968                                 return attr != null &&
    7969                                                 (attr.length === len || attr.charAt(len) === "-") &&
    7970                                                 attr.substr(0, len).toLowerCase() === value &&
    7971                                                 next(elem);
    7972                         };
    7973                 }
    7974 
    7975                 return function hyphen(elem){
    7976                         var attr = getAttributeValue(elem, name);
    7977                         return attr != null &&
    7978                                         attr.substr(0, len) === value &&
    7979                                         (attr.length === len || attr.charAt(len) === "-") &&
    7980                                         next(elem);
    7981                 };
    7982         },
    7983         element: function(next, data){
    7984                 var name = data.name,
    7985                     value = data.value;
    7986 
    7987                 if(/\s/.test(value)){
    7988                         return falseFunc$1;
    7989                 }
    7990 
    7991                 value = value.replace(reChars, "\\$&");
    7992 
    7993                 var pattern = "(?:^|\\s)" + value + "(?:$|\\s)",
    7994                     flags = data.ignoreCase ? "i" : "",
    7995                     regex = new RegExp(pattern, flags);
    7996 
    7997                 return function element(elem){
    7998                         var attr = getAttributeValue(elem, name);
    7999                         return attr != null && regex.test(attr) && next(elem);
    8000                 };
    8001         },
    8002         exists: function(next, data){
    8003                 var name = data.name;
    8004                 return function exists(elem){
    8005                         return hasAttrib(elem, name) && next(elem);
    8006                 };
    8007         },
    8008         start: function(next, data){
    8009                 var name  = data.name,
    8010                     value = data.value,
    8011                     len = value.length;
    8012 
    8013                 if(len === 0){
    8014                         return falseFunc$1;
    8015                 }
    8016                
    8017                 if(data.ignoreCase){
    8018                         value = value.toLowerCase();
    8019 
    8020                         return function startIC(elem){
    8021                                 var attr = getAttributeValue(elem, name);
    8022                                 return attr != null && attr.substr(0, len).toLowerCase() === value && next(elem);
    8023                         };
    8024                 }
    8025 
    8026                 return function start(elem){
    8027                         var attr = getAttributeValue(elem, name);
    8028                         return attr != null && attr.substr(0, len) === value && next(elem);
    8029                 };
    8030         },
    8031         end: function(next, data){
    8032                 var name  = data.name,
    8033                     value = data.value,
    8034                     len   = -value.length;
    8035 
    8036                 if(len === 0){
    8037                         return falseFunc$1;
    8038                 }
    8039 
    8040                 if(data.ignoreCase){
    8041                         value = value.toLowerCase();
    8042 
    8043                         return function endIC(elem){
    8044                                 var attr = getAttributeValue(elem, name);
    8045                                 return attr != null && attr.substr(len).toLowerCase() === value && next(elem);
    8046                         };
    8047                 }
    8048 
    8049                 return function end(elem){
    8050                         var attr = getAttributeValue(elem, name);
    8051                         return attr != null && attr.substr(len) === value && next(elem);
    8052                 };
    8053         },
    8054         any: function(next, data){
    8055                 var name  = data.name,
    8056                     value = data.value;
    8057 
    8058                 if(value === ""){
    8059                         return falseFunc$1;
    8060                 }
    8061 
    8062                 if(data.ignoreCase){
    8063                         var regex = new RegExp(value.replace(reChars, "\\$&"), "i");
    8064 
    8065                         return function anyIC(elem){
    8066                                 var attr = getAttributeValue(elem, name);
    8067                                 return attr != null && regex.test(attr) && next(elem);
    8068                         };
    8069                 }
    8070 
    8071                 return function any(elem){
    8072                         var attr = getAttributeValue(elem, name);
    8073                         return attr != null && attr.indexOf(value) >= 0 && next(elem);
    8074                 };
    8075         },
    8076         not: function(next, data){
    8077                 var name  = data.name,
    8078                     value = data.value;
    8079 
    8080                 if(value === ""){
    8081                         return function notEmpty(elem){
    8082                                 return !!getAttributeValue(elem, name) && next(elem);
    8083                         };
    8084                 } else if(data.ignoreCase){
    8085                         value = value.toLowerCase();
    8086 
    8087                         return function notIC(elem){
    8088                                 var attr = getAttributeValue(elem, name);
    8089                                 return attr != null && attr.toLowerCase() !== value && next(elem);
    8090                         };
    8091                 }
    8092 
    8093                 return function not(elem){
    8094                         return getAttributeValue(elem, name) !== value && next(elem);
    8095                 };
    8096         }
    8097 };
    8098 
    8099 var attributes = {
    8100         compile: function(next, data, options){
    8101                 if(options && options.strict && (
    8102                         data.ignoreCase || data.action === "not"
    8103                 )) throw SyntaxError("Unsupported attribute selector");
    8104                 return attributeRules[data.action](next, data);
    8105         },
    8106         rules: attributeRules
    8107 };
    8108 
    8109 /*
    8110         pseudo selectors
    8111 
    8112         ---
    8113 
    8114         they are available in two forms:
    8115         * filters called when the selector
    8116           is compiled and return a function
    8117           that needs to return next()
    8118         * pseudos get called on execution
    8119           they need to return a boolean
    8120 */
    8121 
    8122 var isTag$2       = domutils.isTag,
    8123     getText$1     = domutils.getText,
    8124     getParent   = domutils.getParent,
    8125     getChildren = domutils.getChildren,
    8126     getSiblings = domutils.getSiblings,
    8127     hasAttrib$1   = domutils.hasAttrib,
    8128     getName     = domutils.getName,
    8129     getAttribute= domutils.getAttributeValue,
    8130     checkAttrib = attributes.rules.equals,
    8131     trueFunc$1    = boolbase.trueFunc,
    8132     falseFunc$2   = boolbase.falseFunc;
    8133 
    8134 //helper methods
    8135 function getFirstElement(elems){
    8136         for(var i = 0; elems && i < elems.length; i++){
    8137                 if(isTag$2(elems[i])) return elems[i];
    8138         }
    8139 }
    8140 
    8141 function getAttribFunc(name, value){
    8142         var data = {name: name, value: value};
    8143         return function attribFunc(next){
    8144                 return checkAttrib(next, data);
    8145         };
    8146 }
    8147 
    8148 function getChildFunc(next){
    8149         return function(elem){
    8150                 return !!getParent(elem) && next(elem);
    8151         };
    8152 }
    8153 
    8154 var filters = {
    8155         contains: function(next, text){
    8156                 return function contains(elem){
    8157                         return next(elem) && getText$1(elem).indexOf(text) >= 0;
    8158                 };
    8159         },
    8160         icontains: function(next, text){
    8161                 var itext = text.toLowerCase();
    8162                 return function icontains(elem){
    8163                         return next(elem) &&
    8164                                 getText$1(elem).toLowerCase().indexOf(itext) >= 0;
    8165                 };
    8166         },
    8167 
    8168         //location specific methods
    8169         "nth-child": function(next, rule){
    8170                 var func = nthCheck(rule);
    8171 
    8172                 if(func === falseFunc$2) return func;
    8173                 if(func === trueFunc$1)  return getChildFunc(next);
    8174 
    8175                 return function nthChild(elem){
    8176                         var siblings = getSiblings(elem);
    8177 
    8178                         for(var i = 0, pos = 0; i < siblings.length; i++){
    8179                                 if(isTag$2(siblings[i])){
    8180                                         if(siblings[i] === elem) break;
    8181                                         else pos++;
    8182                                 }
    8183                         }
    8184 
    8185                         return func(pos) && next(elem);
    8186                 };
    8187         },
    8188         "nth-last-child": function(next, rule){
    8189                 var func = nthCheck(rule);
    8190 
    8191                 if(func === falseFunc$2) return func;
    8192                 if(func === trueFunc$1)  return getChildFunc(next);
    8193 
    8194                 return function nthLastChild(elem){
    8195                         var siblings = getSiblings(elem);
    8196 
    8197                         for(var pos = 0, i = siblings.length - 1; i >= 0; i--){
    8198                                 if(isTag$2(siblings[i])){
    8199                                         if(siblings[i] === elem) break;
    8200                                         else pos++;
    8201                                 }
    8202                         }
    8203 
    8204                         return func(pos) && next(elem);
    8205                 };
    8206         },
    8207         "nth-of-type": function(next, rule){
    8208                 var func = nthCheck(rule);
    8209 
    8210                 if(func === falseFunc$2) return func;
    8211                 if(func === trueFunc$1)  return getChildFunc(next);
    8212 
    8213                 return function nthOfType(elem){
    8214                         var siblings = getSiblings(elem);
    8215 
    8216                         for(var pos = 0, i = 0; i < siblings.length; i++){
    8217                                 if(isTag$2(siblings[i])){
    8218                                         if(siblings[i] === elem) break;
    8219                                         if(getName(siblings[i]) === getName(elem)) pos++;
    8220                                 }
    8221                         }
    8222 
    8223                         return func(pos) && next(elem);
    8224                 };
    8225         },
    8226         "nth-last-of-type": function(next, rule){
    8227                 var func = nthCheck(rule);
    8228 
    8229                 if(func === falseFunc$2) return func;
    8230                 if(func === trueFunc$1)  return getChildFunc(next);
    8231 
    8232                 return function nthLastOfType(elem){
    8233                         var siblings = getSiblings(elem);
    8234 
    8235                         for(var pos = 0, i = siblings.length - 1; i >= 0; i--){
    8236                                 if(isTag$2(siblings[i])){
    8237                                         if(siblings[i] === elem) break;
    8238                                         if(getName(siblings[i]) === getName(elem)) pos++;
    8239                                 }
    8240                         }
    8241 
    8242                         return func(pos) && next(elem);
    8243                 };
    8244         },
    8245 
    8246     //TODO determine the actual root element
    8247     root: function(next){
    8248         return function(elem){
    8249             return !getParent(elem) && next(elem);
    8250         };
    8251     },
    8252 
    8253     scope: function(next, rule, options, context){
    8254         if(!context || context.length === 0){
    8255             //equivalent to :root
    8256             return filters.root(next);
    8257         }
    8258 
    8259         if(context.length === 1){
    8260             //NOTE: can't be unpacked, as :has uses this for side-effects
    8261             return function(elem){
    8262                 return context[0] === elem && next(elem);
    8263             };
    8264         }
    8265 
    8266         return function(elem){
    8267             return context.indexOf(elem) >= 0 && next(elem);
    8268         };
    8269     },
    8270 
    8271         //jQuery extensions (others follow as pseudos)
    8272         checkbox: getAttribFunc("type", "checkbox"),
    8273         file: getAttribFunc("type", "file"),
    8274         password: getAttribFunc("type", "password"),
    8275         radio: getAttribFunc("type", "radio"),
    8276         reset: getAttribFunc("type", "reset"),
    8277         image: getAttribFunc("type", "image"),
    8278         submit: getAttribFunc("type", "submit")
    8279 };
    8280 
    8281 //while filters are precompiled, pseudos get called when they are needed
    8282 var pseudos = {
    8283         empty: function(elem){
    8284                 return !getChildren(elem).some(function(elem){
    8285                         return isTag$2(elem) || elem.type === "text";
    8286                 });
    8287         },
    8288 
    8289         "first-child": function(elem){
    8290                 return getFirstElement(getSiblings(elem)) === elem;
    8291         },
    8292         "last-child": function(elem){
    8293                 var siblings = getSiblings(elem);
    8294 
    8295                 for(var i = siblings.length - 1; i >= 0; i--){
    8296                         if(siblings[i] === elem) return true;
    8297                         if(isTag$2(siblings[i])) break;
    8298                 }
    8299 
    8300                 return false;
    8301         },
    8302         "first-of-type": function(elem){
    8303                 var siblings = getSiblings(elem);
    8304 
    8305                 for(var i = 0; i < siblings.length; i++){
    8306                         if(isTag$2(siblings[i])){
    8307                                 if(siblings[i] === elem) return true;
    8308                                 if(getName(siblings[i]) === getName(elem)) break;
    8309                         }
    8310                 }
    8311 
    8312                 return false;
    8313         },
    8314         "last-of-type": function(elem){
    8315                 var siblings = getSiblings(elem);
    8316 
    8317                 for(var i = siblings.length-1; i >= 0; i--){
    8318                         if(isTag$2(siblings[i])){
    8319                                 if(siblings[i] === elem) return true;
    8320                                 if(getName(siblings[i]) === getName(elem)) break;
    8321                         }
    8322                 }
    8323 
    8324                 return false;
    8325         },
    8326         "only-of-type": function(elem){
    8327                 var siblings = getSiblings(elem);
    8328 
    8329                 for(var i = 0, j = siblings.length; i < j; i++){
    8330                         if(isTag$2(siblings[i])){
    8331                                 if(siblings[i] === elem) continue;
    8332                                 if(getName(siblings[i]) === getName(elem)) return false;
    8333                         }
    8334                 }
    8335 
    8336                 return true;
    8337         },
    8338         "only-child": function(elem){
    8339                 var siblings = getSiblings(elem);
    8340 
    8341                 for(var i = 0; i < siblings.length; i++){
    8342                         if(isTag$2(siblings[i]) && siblings[i] !== elem) return false;
    8343                 }
    8344 
    8345                 return true;
    8346         },
    8347 
    8348         //:matches(a, area, link)[href]
    8349         link: function(elem){
    8350                 return hasAttrib$1(elem, "href");
    8351         },
    8352         visited: falseFunc$2, //seems to be a valid implementation
    8353         //TODO: :any-link once the name is finalized (as an alias of :link)
    8354 
    8355         //forms
    8356         //to consider: :target
    8357 
    8358         //:matches([selected], select:not([multiple]):not(> option[selected]) > option:first-of-type)
    8359         selected: function(elem){
    8360                 if(hasAttrib$1(elem, "selected")) return true;
    8361                 else if(getName(elem) !== "option") return false;
    8362 
    8363                 //the first <option> in a <select> is also selected
    8364                 var parent = getParent(elem);
    8365 
    8366                 if(
    8367                         !parent ||
    8368                         getName(parent) !== "select" ||
    8369                         hasAttrib$1(parent, "multiple")
    8370                 ) return false;
    8371 
    8372                 var siblings = getChildren(parent),
    8373                         sawElem  = false;
    8374 
    8375                 for(var i = 0; i < siblings.length; i++){
    8376                         if(isTag$2(siblings[i])){
    8377                                 if(siblings[i] === elem){
    8378                                         sawElem = true;
    8379                                 } else if(!sawElem){
    8380                                         return false;
    8381                                 } else if(hasAttrib$1(siblings[i], "selected")){
    8382                                         return false;
    8383                                 }
    8384                         }
    8385                 }
    8386 
    8387                 return sawElem;
    8388         },
    8389         //https://html.spec.whatwg.org/multipage/scripting.html#disabled-elements
    8390         //:matches(
    8391         //  :matches(button, input, select, textarea, menuitem, optgroup, option)[disabled],
    8392         //  optgroup[disabled] > option),
    8393         // fieldset[disabled] * //TODO not child of first <legend>
    8394         //)
    8395         disabled: function(elem){
    8396                 return hasAttrib$1(elem, "disabled");
    8397         },
    8398         enabled: function(elem){
    8399                 return !hasAttrib$1(elem, "disabled");
    8400         },
    8401         //:matches(:matches(:radio, :checkbox)[checked], :selected) (TODO menuitem)
    8402         checked: function(elem){
    8403                 return hasAttrib$1(elem, "checked") || pseudos.selected(elem);
    8404         },
    8405         //:matches(input, select, textarea)[required]
    8406         required: function(elem){
    8407                 return hasAttrib$1(elem, "required");
    8408         },
    8409         //:matches(input, select, textarea):not([required])
    8410         optional: function(elem){
    8411                 return !hasAttrib$1(elem, "required");
    8412         },
    8413 
    8414         //jQuery extensions
    8415 
    8416         //:not(:empty)
    8417         parent: function(elem){
    8418                 return !pseudos.empty(elem);
    8419         },
    8420         //:matches(h1, h2, h3, h4, h5, h6)
    8421         header: function(elem){
    8422                 var name = getName(elem);
    8423                 return name === "h1" ||
    8424                        name === "h2" ||
    8425                        name === "h3" ||
    8426                        name === "h4" ||
    8427                        name === "h5" ||
    8428                        name === "h6";
    8429         },
    8430 
    8431         //:matches(button, input[type=button])
    8432         button: function(elem){
    8433                 var name = getName(elem);
    8434                 return name === "button" ||
    8435                        name === "input" &&
    8436                        getAttribute(elem, "type") === "button";
    8437         },
    8438         //:matches(input, textarea, select, button)
    8439         input: function(elem){
    8440                 var name = getName(elem);
    8441                 return name === "input" ||
    8442                        name === "textarea" ||
    8443                        name === "select" ||
    8444                        name === "button";
    8445         },
    8446         //input:matches(:not([type!='']), [type='text' i])
    8447         text: function(elem){
    8448                 var attr;
    8449                 return getName(elem) === "input" && (
    8450                         !(attr = getAttribute(elem, "type")) ||
    8451                         attr.toLowerCase() === "text"
    8452                 );
    8453         }
    8454 };
    8455 
    8456 function verifyArgs(func, name, subselect){
    8457         if(subselect === null){
    8458                 if(func.length > 1 && name !== "scope"){
    8459                         throw new SyntaxError("pseudo-selector :" + name + " requires an argument");
    8460                 }
    8461         } else {
    8462                 if(func.length === 1){
    8463                         throw new SyntaxError("pseudo-selector :" + name + " doesn't have any arguments");
    8464                 }
    8465         }
    8466 }
    8467 
    8468 //FIXME this feels hacky
    8469 var re_CSS3 = /^(?:(?:nth|last|first|only)-(?:child|of-type)|root|empty|(?:en|dis)abled|checked|not)$/;
    8470 
    8471 var pseudos_1 = {
    8472         compile: function(next, data, options, context){
    8473                 var name = data.name,
    8474                         subselect = data.data;
    8475 
    8476                 if(options && options.strict && !re_CSS3.test(name)){
    8477                         throw SyntaxError(":" + name + " isn't part of CSS3");
    8478                 }
    8479 
    8480                 if(typeof filters[name] === "function"){
    8481                         verifyArgs(filters[name], name,  subselect);
    8482                         return filters[name](next, subselect, options, context);
    8483                 } else if(typeof pseudos[name] === "function"){
    8484                         var func = pseudos[name];
    8485                         verifyArgs(func, name, subselect);
    8486 
    8487                         if(next === trueFunc$1) return func;
    8488 
    8489                         return function pseudoArgs(elem){
    8490                                 return func(elem, subselect) && next(elem);
    8491                         };
    8492                 } else {
    8493                         throw new SyntaxError("unmatched pseudo-class :" + name);
    8494                 }
    8495         },
    8496         filters: filters,
    8497         pseudos: pseudos
    8498 };
    8499 
    8500 var cssWhat = parse$1;
    8501 
    8502 var re_name = /^(?:\\.|[\w\-\u00b0-\uFFFF])+/,
    8503     re_escape = /\\([\da-f]{1,6}\s?|(\s)|.)/ig,
    8504     //modified version of https://github.com/jquery/sizzle/blob/master/src/sizzle.js#L87
    8505     re_attr = /^\s*((?:\\.|[\w\u00b0-\uFFFF\-])+)\s*(?:(\S?)=\s*(?:(['"])([^]*?)\3|(#?(?:\\.|[\w\u00b0-\uFFFF\-])*)|)|)\s*(i)?\]/;
    8506 
    8507 var actionTypes = {
    8508         __proto__: null,
    8509         "undefined": "exists",
    8510         "":  "equals",
    8511         "~": "element",
    8512         "^": "start",
    8513         "$": "end",
    8514         "*": "any",
    8515         "!": "not",
    8516         "|": "hyphen"
    8517 };
    8518 
    8519 var simpleSelectors = {
    8520         __proto__: null,
    8521         ">": "child",
    8522         "<": "parent",
    8523         "~": "sibling",
    8524         "+": "adjacent"
    8525 };
    8526 
    8527 var attribSelectors = {
    8528         __proto__: null,
    8529         "#": ["id", "equals"],
    8530         ".": ["class", "element"]
    8531 };
    8532 
    8533 //pseudos, whose data-property is parsed as well
    8534 var unpackPseudos = {
    8535         __proto__: null,
    8536         "has": true,
    8537         "not": true,
    8538         "matches": true
    8539 };
    8540 
    8541 var stripQuotesFromPseudos = {
    8542         __proto__: null,
    8543         "contains": true,
    8544         "icontains": true
    8545 };
    8546 
    8547 var quotes = {
    8548         __proto__: null,
    8549         "\"": true,
    8550         "'": true
    8551 };
    8552 
    8553 //unescape function taken from https://github.com/jquery/sizzle/blob/master/src/sizzle.js#L139
    8554 function funescape( _, escaped, escapedWhitespace ) {
    8555         var high = "0x" + escaped - 0x10000;
    8556         // NaN means non-codepoint
    8557         // Support: Firefox
    8558         // Workaround erroneous numeric interpretation of +"0x"
    8559         return high !== high || escapedWhitespace ?
    8560                 escaped :
    8561                 // BMP codepoint
    8562                 high < 0 ?
    8563                         String.fromCharCode( high + 0x10000 ) :
    8564                         // Supplemental Plane codepoint (surrogate pair)
    8565                         String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
    8566 }
    8567 
    8568 function unescapeCSS(str){
    8569         return str.replace(re_escape, funescape);
    8570 }
    8571 
    8572 function isWhitespace(c){
    8573         return c === " " || c === "\n" || c === "\t" || c === "\f" || c === "\r";
    8574 }
    8575 
    8576 function parse$1(selector, options){
    8577         var subselects = [];
    8578 
    8579         selector = parseSelector(subselects, selector + "", options);
    8580 
    8581         if(selector !== ""){
    8582                 throw new SyntaxError("Unmatched selector: " + selector);
    8583         }
    8584 
    8585         return subselects;
    8586 }
    8587 
    8588 function parseSelector(subselects, selector, options){
    8589         var tokens = [],
    8590                 sawWS = false,
    8591                 data, firstChar, name, quot;
    8592 
    8593         function getName(){
    8594                 var sub = selector.match(re_name)[0];
    8595                 selector = selector.substr(sub.length);
    8596                 return unescapeCSS(sub);
    8597         }
    8598 
    8599         function stripWhitespace(start){
    8600                 while(isWhitespace(selector.charAt(start))) start++;
    8601                 selector = selector.substr(start);
    8602         }
    8603 
    8604         function isEscaped(pos) {
    8605                 var slashCount = 0;
    8606 
    8607                 while (selector.charAt(--pos) === "\\") slashCount++;
    8608                 return (slashCount & 1) === 1;
    8609         }
    8610 
    8611         stripWhitespace(0);
    8612 
    8613         while(selector !== ""){
    8614                 firstChar = selector.charAt(0);
    8615 
    8616                 if(isWhitespace(firstChar)){
    8617                         sawWS = true;
    8618                         stripWhitespace(1);
    8619                 } else if(firstChar in simpleSelectors){
    8620                         tokens.push({type: simpleSelectors[firstChar]});
    8621                         sawWS = false;
    8622 
    8623                         stripWhitespace(1);
    8624                 } else if(firstChar === ","){
    8625                         if(tokens.length === 0){
    8626                                 throw new SyntaxError("empty sub-selector");
    8627                         }
    8628                         subselects.push(tokens);
    8629                         tokens = [];
    8630                         sawWS = false;
    8631                         stripWhitespace(1);
    8632                 } else {
    8633                         if(sawWS){
    8634                                 if(tokens.length > 0){
    8635                                         tokens.push({type: "descendant"});
    8636                                 }
    8637                                 sawWS = false;
    8638                         }
    8639 
    8640                         if(firstChar === "*"){
    8641                                 selector = selector.substr(1);
    8642                                 tokens.push({type: "universal"});
    8643                         } else if(firstChar in attribSelectors){
    8644                                 selector = selector.substr(1);
    8645                                 tokens.push({
    8646                                         type: "attribute",
    8647                                         name: attribSelectors[firstChar][0],
    8648                                         action: attribSelectors[firstChar][1],
    8649                                         value: getName(),
    8650                                         ignoreCase: false
    8651                                 });
    8652                         } else if(firstChar === "["){
    8653                                 selector = selector.substr(1);
    8654                                 data = selector.match(re_attr);
    8655                                 if(!data){
    8656                                         throw new SyntaxError("Malformed attribute selector: " + selector);
    8657                                 }
    8658                                 selector = selector.substr(data[0].length);
    8659                                 name = unescapeCSS(data[1]);
    8660 
    8661                                 if(
    8662                                         !options || (
    8663                                                 "lowerCaseAttributeNames" in options ?
    8664                                                         options.lowerCaseAttributeNames :
    8665                                                         !options.xmlMode
    8666                                         )
    8667                                 ){
    8668                                         name = name.toLowerCase();
    8669                                 }
    8670 
    8671                                 tokens.push({
    8672                                         type: "attribute",
    8673                                         name: name,
    8674                                         action: actionTypes[data[2]],
    8675                                         value: unescapeCSS(data[4] || data[5] || ""),
    8676                                         ignoreCase: !!data[6]
    8677                                 });
    8678 
    8679                         } else if(firstChar === ":"){
    8680                                 if(selector.charAt(1) === ":"){
    8681                                         selector = selector.substr(2);
    8682                                         tokens.push({type: "pseudo-element", name: getName().toLowerCase()});
    8683                                         continue;
    8684                                 }
    8685 
    8686                                 selector = selector.substr(1);
    8687 
    8688                                 name = getName().toLowerCase();
    8689                                 data = null;
    8690 
    8691                                 if(selector.charAt(0) === "("){
    8692                                         if(name in unpackPseudos){
    8693                                                 quot = selector.charAt(1);
    8694                                                 var quoted = quot in quotes;
    8695 
    8696                                                 selector = selector.substr(quoted + 1);
    8697 
    8698                                                 data = [];
    8699                                                 selector = parseSelector(data, selector, options);
    8700 
    8701                                                 if(quoted){
    8702                                                         if(selector.charAt(0) !== quot){
    8703                                                                 throw new SyntaxError("unmatched quotes in :" + name);
    8704                                                         } else {
    8705                                                                 selector = selector.substr(1);
    8706                                                         }
    8707                                                 }
    8708 
    8709                                                 if(selector.charAt(0) !== ")"){
    8710                                                         throw new SyntaxError("missing closing parenthesis in :" + name + " " + selector);
    8711                                                 }
    8712 
    8713                                                 selector = selector.substr(1);
    8714                                         } else {
    8715                                                 var pos = 1, counter = 1;
    8716 
    8717                                                 for(; counter > 0 && pos < selector.length; pos++){
    8718                                                         if(selector.charAt(pos) === "(" && !isEscaped(pos)) counter++;
    8719                                                         else if(selector.charAt(pos) === ")" && !isEscaped(pos)) counter--;
    8720                                                 }
    8721 
    8722                                                 if(counter){
    8723                                                         throw new SyntaxError("parenthesis not matched");
    8724                                                 }
    8725 
    8726                                                 data = selector.substr(1, pos - 2);
    8727                                                 selector = selector.substr(pos);
    8728 
    8729                                                 if(name in stripQuotesFromPseudos){
    8730                                                         quot = data.charAt(0);
    8731 
    8732                                                         if(quot === data.slice(-1) && quot in quotes){
    8733                                                                 data = data.slice(1, -1);
    8734                                                         }
    8735 
    8736                                                         data = unescapeCSS(data);
    8737                                                 }
    8738                                         }
    8739                                 }
    8740 
    8741                                 tokens.push({type: "pseudo", name: name, data: data});
    8742                         } else if(re_name.test(selector)){
    8743                                 name = getName();
    8744 
    8745                                 if(!options || ("lowerCaseTags" in options ? options.lowerCaseTags : !options.xmlMode)){
    8746                                         name = name.toLowerCase();
    8747                                 }
    8748 
    8749                                 tokens.push({type: "tag", name: name});
    8750                         } else {
    8751                                 if(tokens.length && tokens[tokens.length - 1].type === "descendant"){
    8752                                         tokens.pop();
    8753                                 }
    8754                                 addToken(subselects, tokens);
    8755                                 return selector;
    8756                         }
    8757                 }
    8758         }
    8759 
    8760         addToken(subselects, tokens);
    8761 
    8762         return selector;
    8763 }
    8764 
    8765 function addToken(subselects, tokens){
    8766         if(subselects.length > 0 && tokens.length === 0){
    8767                 throw new SyntaxError("empty sub-selector");
    8768         }
    8769 
    8770         subselects.push(tokens);
    8771 }
    8772 
    8773 var isTag$3       = domutils.isTag,
    8774     getParent$1   = domutils.getParent,
    8775     getChildren$1 = domutils.getChildren,
    8776     getSiblings$1 = domutils.getSiblings,
    8777     getName$1     = domutils.getName;
    8778 
    8779 /*
    8780         all available rules
    8781 */
    8782 var general = {
    8783         __proto__: null,
    8784 
    8785         attribute: attributes.compile,
    8786         pseudo: pseudos_1.compile,
    8787 
    8788         //tags
    8789         tag: function(next, data){
    8790                 var name = data.name;
    8791                 return function tag(elem){
    8792                         return getName$1(elem) === name && next(elem);
    8793                 };
    8794         },
    8795 
    8796         //traversal
    8797         descendant: function(next, rule, options, context, acceptSelf){
    8798                 return function descendant(elem){
    8799 
    8800                         if (acceptSelf && next(elem)) return true;
    8801 
    8802                         var found = false;
    8803 
    8804                         while(!found && (elem = getParent$1(elem))){
    8805                                 found = next(elem);
    8806                         }
    8807 
    8808                         return found;
    8809                 };
    8810         },
    8811         parent: function(next, data, options){
    8812                 if(options && options.strict) throw SyntaxError("Parent selector isn't part of CSS3");
    8813 
    8814                 return function parent(elem){
    8815                         return getChildren$1(elem).some(test);
    8816                 };
    8817 
    8818                 function test(elem){
    8819                         return isTag$3(elem) && next(elem);
    8820                 }
    8821         },
    8822         child: function(next){
    8823                 return function child(elem){
    8824                         var parent = getParent$1(elem);
    8825                         return !!parent && next(parent);
    8826                 };
    8827         },
    8828         sibling: function(next){
    8829                 return function sibling(elem){
    8830                         var siblings = getSiblings$1(elem);
    8831 
    8832                         for(var i = 0; i < siblings.length; i++){
    8833                                 if(isTag$3(siblings[i])){
    8834                                         if(siblings[i] === elem) break;
    8835                                         if(next(siblings[i])) return true;
    8836                                 }
    8837                         }
    8838 
    8839                         return false;
    8840                 };
    8841         },
    8842         adjacent: function(next){
    8843                 return function adjacent(elem){
    8844                         var siblings = getSiblings$1(elem),
    8845                             lastElement;
    8846 
    8847                         for(var i = 0; i < siblings.length; i++){
    8848                                 if(isTag$3(siblings[i])){
    8849                                         if(siblings[i] === elem) break;
    8850                                         lastElement = siblings[i];
    8851                                 }
    8852                         }
    8853 
    8854                         return !!lastElement && next(lastElement);
    8855                 };
    8856         },
    8857         universal: function(next){
    8858                 return next;
    8859         }
    8860 };
    8861 
    8862 var universal = 50;
    8863 var tag = 30;
    8864 var attribute = 1;
    8865 var pseudo = 0;
    8866 var descendant = -1;
    8867 var child = -1;
    8868 var parent = -1;
    8869 var sibling = -1;
    8870 var adjacent = -1;
    8871 var procedure = {
    8872         universal: universal,
    8873         tag: tag,
    8874         attribute: attribute,
    8875         pseudo: pseudo,
    8876         descendant: descendant,
    8877         child: child,
    8878         parent: parent,
    8879         sibling: sibling,
    8880         adjacent: adjacent
    8881 };
    8882 
    8883 var procedure$1 = {
    8884         __proto__: null,
    8885         universal: universal,
    8886         tag: tag,
    8887         attribute: attribute,
    8888         pseudo: pseudo,
    8889         descendant: descendant,
    8890         child: child,
    8891         parent: parent,
    8892         sibling: sibling,
    8893         adjacent: adjacent,
    8894         'default': procedure
    8895 };
    8896 
    8897 var procedure$2 = getCjsExportFromNamespace(procedure$1);
    8898 
    8899 var sort = sortByProcedure;
    8900 
    8901 /*
    8902         sort the parts of the passed selector,
    8903         as there is potential for optimization
    8904         (some types of selectors are faster than others)
    8905 */
    8906 
    8907 
    8908 
    8909 var attributes$1 = {
    8910         __proto__: null,
    8911         exists: 10,
    8912         equals: 8,
    8913         not: 7,
    8914         start: 6,
    8915         end: 6,
    8916         any: 5,
    8917         hyphen: 4,
    8918         element: 4
    8919 };
    8920 
    8921 function sortByProcedure(arr){
    8922         var procs = arr.map(getProcedure);
    8923         for(var i = 1; i < arr.length; i++){
    8924                 var procNew = procs[i];
    8925 
    8926                 if(procNew < 0) continue;
    8927 
    8928                 for(var j = i - 1; j >= 0 && procNew < procs[j]; j--){
    8929                         var token = arr[j + 1];
    8930                         arr[j + 1] = arr[j];
    8931                         arr[j] = token;
    8932                         procs[j + 1] = procs[j];
    8933                         procs[j] = procNew;
    8934                 }
    8935         }
    8936 }
    8937 
    8938 function getProcedure(token){
    8939         var proc = procedure$2[token.type];
    8940 
    8941         if(proc === procedure$2.attribute){
    8942                 proc = attributes$1[token.action];
    8943 
    8944                 if(proc === attributes$1.equals && token.name === "id"){
    8945                         //prefer ID selectors (eg. #ID)
    8946                         proc = 9;
    8947                 }
    8948 
    8949                 if(token.ignoreCase){
    8950                         //ignoreCase adds some overhead, prefer "normal" token
    8951                         //this is a binary operation, to ensure it's still an int
    8952                         proc >>= 1;
    8953                 }
    8954         } else if(proc === procedure$2.pseudo){
    8955                 if(!token.data){
    8956                         proc = 3;
    8957                 } else if(token.name === "has" || token.name === "contains"){
    8958                         proc = 0; //expensive in any case
    8959                 } else if(token.name === "matches" || token.name === "not"){
    8960                         proc = 0;
    8961                         for(var i = 0; i < token.data.length; i++){
    8962                                 //TODO better handling of complex selectors
    8963                                 if(token.data[i].length !== 1) continue;
    8964                                 var cur = getProcedure(token.data[i][0]);
    8965                                 //avoid executing :has or :contains
    8966                                 if(cur === 0){
    8967                                         proc = 0;
    8968                                         break;
    8969                                 }
    8970                                 if(cur > proc) proc = cur;
    8971                         }
    8972                         if(token.data.length > 1 && proc > 0) proc -= 1;
    8973                 } else {
    8974                         proc = 1;
    8975                 }
    8976         }
    8977         return proc;
    8978 }
    8979 
    8980 /*
    8981         compiles a selector to an executable function
    8982 */
    8983 
    8984 var compile_1$2 = compile$1;
    8985 var compileUnsafe_1 = compileUnsafe;
    8986 var compileToken_1 = compileToken;
    8987 
    8988 var isTag$4       = domutils.isTag,
    8989     trueFunc$2    = boolbase.trueFunc,
    8990     falseFunc$3   = boolbase.falseFunc;
    8991 
    8992 function compile$1(selector, options, context){
    8993         var next = compileUnsafe(selector, options, context);
    8994         return wrap(next);
    8995 }
    8996 
    8997 function wrap(next){
    8998         return function base(elem){
    8999                 return isTag$4(elem) && next(elem);
    9000         };
    9001 }
    9002 
    9003 function compileUnsafe(selector, options, context){
    9004         var token = cssWhat(selector, options);
    9005         return compileToken(token, options, context);
    9006 }
    9007 
    9008 function includesScopePseudo(t){
    9009     return t.type === "pseudo" && (
    9010         t.name === "scope" || (
    9011             Array.isArray(t.data) &&
    9012             t.data.some(function(data){
    9013                 return data.some(includesScopePseudo);
    9014             })
    9015         )
    9016     );
    9017 }
    9018 
    9019 var DESCENDANT_TOKEN = {type: "descendant"},
    9020     SCOPE_TOKEN = {type: "pseudo", name: "scope"},
    9021     PLACEHOLDER_ELEMENT = {},
    9022     getParent$2 = domutils.getParent;
    9023 
    9024 //CSS 4 Spec (Draft): 3.3.1. Absolutizing a Scope-relative Selector
    9025 //http://www.w3.org/TR/selectors4/#absolutizing
    9026 function absolutize(token, context){
    9027     //TODO better check if context is document
    9028     var hasContext = !!context && !!context.length && context.every(function(e){
    9029         return e === PLACEHOLDER_ELEMENT || !!getParent$2(e);
    9030     });
    9031 
    9032 
    9033     token.forEach(function(t){
    9034         if(t.length > 0 && isTraversal(t[0]) && t[0].type !== "descendant"); else if(hasContext && !includesScopePseudo(t)){
    9035             t.unshift(DESCENDANT_TOKEN);
    9036         } else {
    9037             return;
    9038         }
    9039 
    9040         t.unshift(SCOPE_TOKEN);
    9041     });
    9042 }
    9043 
    9044 function compileToken(token, options, context){
    9045     token = token.filter(function(t){ return t.length > 0; });
    9046 
    9047         token.forEach(sort);
    9048 
    9049         var isArrayContext = Array.isArray(context);
    9050 
    9051     context = (options && options.context) || context;
    9052 
    9053     if(context && !isArrayContext) context = [context];
    9054 
    9055     absolutize(token, context);
    9056 
    9057         return token
    9058                 .map(function(rules){ return compileRules(rules, options, context, isArrayContext); })
    9059                 .reduce(reduceRules, falseFunc$3);
    9060 }
    9061 
    9062 function isTraversal(t){
    9063         return procedure$2[t.type] < 0;
    9064 }
    9065 
    9066 function compileRules(rules, options, context, isArrayContext){
    9067         var acceptSelf = (isArrayContext && rules[0].name === "scope" && rules[1].type === "descendant");
    9068         return rules.reduce(function(func, rule, index){
    9069                 if(func === falseFunc$3) return func;
    9070                 return general[rule.type](func, rule, options, context, acceptSelf && index === 1);
    9071         }, options && options.rootFunc || trueFunc$2);
    9072 }
    9073 
    9074 function reduceRules(a, b){
    9075         if(b === falseFunc$3 || a === trueFunc$2){
    9076                 return a;
    9077         }
    9078         if(a === falseFunc$3 || b === trueFunc$2){
    9079                 return b;
    9080         }
    9081 
    9082         return function combine(elem){
    9083                 return a(elem) || b(elem);
    9084         };
    9085 }
    9086 
    9087 //:not, :has and :matches have to compile selectors
    9088 //doing this in lib/pseudos.js would lead to circular dependencies,
    9089 //so we add them here
    9090 
    9091 var filters$1     = pseudos_1.filters,
    9092     existsOne$1   = domutils.existsOne,
    9093     isTag$4       = domutils.isTag,
    9094     getChildren$2 = domutils.getChildren;
    9095 
    9096 
    9097 function containsTraversal(t){
    9098         return t.some(isTraversal);
    9099 }
    9100 
    9101 filters$1.not = function(next, token, options, context){
    9102         var opts = {
    9103                 xmlMode: !!(options && options.xmlMode),
    9104                 strict: !!(options && options.strict)
    9105             };
    9106 
    9107         if(opts.strict){
    9108                 if(token.length > 1 || token.some(containsTraversal)){
    9109                         throw new SyntaxError("complex selectors in :not aren't allowed in strict mode");
    9110                 }
    9111         }
    9112 
    9113     var func = compileToken(token, opts, context);
    9114 
    9115         if(func === falseFunc$3) return next;
    9116         if(func === trueFunc$2)  return falseFunc$3;
    9117 
    9118         return function(elem){
    9119                 return !func(elem) && next(elem);
    9120         };
    9121 };
    9122 
    9123 filters$1.has = function(next, token, options){
    9124         var opts = {
    9125                 xmlMode: !!(options && options.xmlMode),
    9126                 strict: !!(options && options.strict)
    9127         };
    9128 
    9129     //FIXME: Uses an array as a pointer to the current element (side effects)
    9130     var context = token.some(containsTraversal) ? [PLACEHOLDER_ELEMENT] : null;
    9131 
    9132         var func = compileToken(token, opts, context);
    9133 
    9134         if(func === falseFunc$3) return falseFunc$3;
    9135         if(func === trueFunc$2)  return function(elem){
    9136                         return getChildren$2(elem).some(isTag$4) && next(elem);
    9137                 };
    9138 
    9139         func = wrap(func);
    9140 
    9141     if(context){
    9142         return function has(elem){
    9143                 return next(elem) && (
    9144                 (context[0] = elem), existsOne$1(func, getChildren$2(elem))
    9145             );
    9146         };
    9147     }
    9148 
    9149     return function has(elem){
    9150                 return next(elem) && existsOne$1(func, getChildren$2(elem));
    9151         };
    9152 };
    9153 
    9154 filters$1.matches = function(next, token, options, context){
    9155         var opts = {
    9156                 xmlMode: !!(options && options.xmlMode),
    9157                 strict: !!(options && options.strict),
    9158                 rootFunc: next
    9159         };
    9160 
    9161         return compileToken(token, opts, context);
    9162 };
    9163 compile_1$2.compileUnsafe = compileUnsafe_1;
    9164 compile_1$2.compileToken = compileToken_1;
    9165 
    9166 var cssSelect = CSSselect;
    9167 
    9168 var findOne$1       = domutils.findOne,
    9169     findAll$1       = domutils.findAll,
    9170     getChildren$3   = domutils.getChildren,
    9171     removeSubsets = domutils.removeSubsets,
    9172     falseFunc$4     = boolbase.falseFunc,
    9173     compileUnsafe$1 = compile_1$2.compileUnsafe,
    9174     compileToken$1  = compile_1$2.compileToken;
    9175 
    9176 function getSelectorFunc(searchFunc){
    9177         return function select(query, elems, options){
    9178         if(typeof query !== "function") query = compileUnsafe$1(query, options, elems);
    9179         if(!Array.isArray(elems)) elems = getChildren$3(elems);
    9180                 else elems = removeSubsets(elems);
    9181                 return searchFunc(query, elems);
    9182         };
    9183 }
    9184 
    9185 var selectAll = getSelectorFunc(function selectAll(query, elems){
    9186         return (query === falseFunc$4 || !elems || elems.length === 0) ? [] : findAll$1(query, elems);
    9187 });
    9188 
    9189 var selectOne = getSelectorFunc(function selectOne(query, elems){
    9190         return (query === falseFunc$4 || !elems || elems.length === 0) ? null : findOne$1(query, elems);
    9191 });
    9192 
    9193 function is(elem, query, options){
    9194         return (typeof query === "function" ? query : compile_1$2(query, options))(elem);
    9195 }
    9196 
    9197 /*
    9198         the exported interface
    9199 */
    9200 function CSSselect(query, elems, options){
    9201         return selectAll(query, elems, options);
    9202 }
    9203 
    9204 CSSselect.compile = compile_1$2;
    9205 CSSselect.filters = pseudos_1.filters;
    9206 CSSselect.pseudos = pseudos_1.pseudos;
    9207 
    9208 CSSselect.selectAll = selectAll;
    9209 CSSselect.selectOne = selectOne;
    9210 
    9211 CSSselect.is = is;
    9212 
    9213 //legacy methods (might be removed)
    9214 CSSselect.parse = compile_1$2;
    9215 CSSselect.iterate = selectAll;
    9216 
    9217 //hooks
    9218 CSSselect._compileUnsafe = compileUnsafe$1;
    9219 CSSselect._compileToken = compileToken$1;
    922010
    922111/**
     
    923525 */
    923626
    9237 const treeAdapter = require('parse5-htmlparser2-tree-adapter');
    9238 
    923927const PARSE5_OPTS = {
    924028  treeAdapter
     
    924735
    924836function createDocument(html) {
    9249   const document = parse5.parse(html, PARSE5_OPTS);
     37  const document =
     38  /** @type {HTMLDocument} */
     39  parse5.parse(html, PARSE5_OPTS);
    925040  defineProperties(document, DocumentExtensions); // Extend Element.prototype with DOM manipulation methods.
    925141
     
    926050/**
    926151 * Serialize a Document to an HTML String
    9262  * @param {Document} document   A Document, such as one created via `createDocument()`
     52 * @param {HTMLDocument} document   A Document, such as one created via `createDocument()`
    926353 */
    926454
     
    926656  return parse5.serialize(document, PARSE5_OPTS);
    926757}
     58/** @typedef {treeAdapter.Document & typeof ElementExtensions} HTMLDocument */
     59
    926860/**
    926961 * Methods and descriptors to mix into Element.prototype
     62 * @private
    927063 */
    927164
    927265const ElementExtensions = {
    9273   /** @extends htmlparser2.Element.prototype */
     66  /** @extends treeAdapter.Element.prototype */
    927467  nodeName: {
    927568    get() {
     
    930295  textContent: {
    930396    get() {
    9304       return getText$2(this);
     97      return getText(this);
    930598    },
    930699
     
    9347140
    9348141const DocumentExtensions = {
    9349   /** @extends htmlparser2.Document.prototype */
     142  /** @extends treeAdapter.Document.prototype */
    9350143  // document is just an Element in htmlparser2, giving it a nodeType of ELEMENT_NODE.
    9351144  // TODO: verify if these are needed for css-select
     
    9418211    }
    9419212
    9420     return cssSelect(sel, this.documentElement);
     213    return cssSelect.selectAll(sel, this.documentElement);
    9421214  }
    9422215
     
    9460253
    9461254
    9462 function getText$2(node) {
    9463   if (Array.isArray(node)) return node.map(getText$2).join('');
    9464   if (treeAdapter.isElementNode(node)) return node.name === 'br' ? '\n' : getText$2(node.children);
     255function getText(node) {
     256  if (Array.isArray(node)) return node.map(getText).join('');
     257  if (treeAdapter.isElementNode(node)) return node.name === 'br' ? '\n' : getText(node.children);
    9465258  if (treeAdapter.isTextNode(node)) return node.data;
    9466259  return '';
     
    9484277/**
    9485278 * Parse a textual CSS Stylesheet into a Stylesheet instance.
    9486  * Stylesheet is a mutable ReworkCSS AST with format similar to CSSOM.
    9487  * @see https://github.com/reworkcss/css
     279 * Stylesheet is a mutable postcss AST with format similar to CSSOM.
     280 * @see https://github.com/postcss/postcss/
    9488281 * @private
    9489282 * @param {String} stylesheet
     
    9492285
    9493286function parseStylesheet(stylesheet) {
    9494   return css.parse(stylesheet);
    9495 }
    9496 /**
    9497  * Serialize a ReworkCSS Stylesheet to a String of CSS.
     287  return postcss.parse(stylesheet);
     288}
     289/**
     290 * Serialize a postcss Stylesheet to a String of CSS.
    9498291 * @private
    9499292 * @param {css.Stylesheet} ast          A Stylesheet to serialize, such as one returned from `parseStylesheet()`
    9500  * @param {Object} options              Options to pass to `css.stringify()`
     293 * @param {Object} options              Options used by the stringify logic
    9501294 * @param {Boolean} [options.compress]  Compress CSS output (removes comments, whitespace, etc)
    9502295 */
    9503296
    9504297function serializeStylesheet(ast, options) {
    9505   return css.stringify(ast, options);
     298  let cssStr = '';
     299  postcss.stringify(ast, (result, node, type) => {
     300    var _node$raws;
     301
     302    if (!options.compress) {
     303      cssStr += result;
     304      return;
     305    } // Simple minification logic
     306
     307
     308    if ((node == null ? void 0 : node.type) === 'comment') return;
     309
     310    if ((node == null ? void 0 : node.type) === 'decl') {
     311      const prefix = node.prop + node.raws.between;
     312      cssStr += result.replace(prefix, prefix.trim());
     313      return;
     314    }
     315
     316    if (type === 'start') {
     317      if (node.type === 'rule' && node.selectors) {
     318        cssStr += node.selectors.join(',') + '{';
     319      } else {
     320        cssStr += result.replace(/\s\{$/, '{');
     321      }
     322
     323      return;
     324    }
     325
     326    if (type === 'end' && result === '}' && node != null && (_node$raws = node.raws) != null && _node$raws.semicolon) {
     327      cssStr = cssStr.slice(0, -1);
     328    }
     329
     330    cssStr += result.trim();
     331  });
     332  return cssStr;
    9506333}
    9507334/**
     
    9534361 * @private
    9535362 * @param {css.Rule} rule The Rule to apply marked selectors to (if they exist).
    9536 */
     363 */
    9537364
    9538365function applyMarkedSelectors(rule) {
     
    9553380
    9554381function walkStyleRules(node, iterator) {
    9555   if (node.stylesheet) return walkStyleRules(node.stylesheet, iterator);
    9556   node.rules = node.rules.filter(rule => {
    9557     if (rule.rules) {
     382  node.nodes = node.nodes.filter(rule => {
     383    if (hasNestedRules(rule)) {
    9558384      walkStyleRules(rule, iterator);
    9559385    }
     
    9574400function walkStyleRulesWithReverseMirror(node, node2, iterator) {
    9575401  if (node2 === null) return walkStyleRules(node, iterator);
    9576   if (node.stylesheet) return walkStyleRulesWithReverseMirror(node.stylesheet, node2.stylesheet, iterator);
    9577   [node.rules, node2.rules] = splitFilter(node.rules, node2.rules, (rule, index, rules, rules2) => {
     402  [node.nodes, node2.nodes] = splitFilter(node.nodes, node2.nodes, (rule, index, rules, rules2) => {
    9578403    const rule2 = rules2[index];
    9579404
    9580     if (rule.rules) {
     405    if (hasNestedRules(rule)) {
    9581406      walkStyleRulesWithReverseMirror(rule, rule2, iterator);
    9582407    }
     
    9586411    return iterator(rule) !== false;
    9587412  });
     413} // Checks if a node has nested rules, like @media
     414// @keyframes are an exception since they are evaluated as a whole
     415
     416function hasNestedRules(rule) {
     417  return rule.nodes && rule.nodes.length && rule.nodes.some(n => n.type === 'rule' || n.type === 'atrule') && rule.name !== 'keyframes';
    9588418} // Like [].filter(), but applies the opposite filtering result to a second copy of the Array without a second pass.
    9589419// This is just a quicker version of generating the compliment of the set returned from a filter operation.
     420
    9590421
    9591422function splitFilter(a, b, predicate) {
     
    9670501/**
    9671502 * The mechanism to use for lazy-loading stylesheets.
     503 *
    9672504 * Note: <kbd>JS</kbd> indicates a strategy requiring JavaScript (falls back to `<noscript>` unless disabled).
    9673505 *
     
    9750582 */
    9751583
    9752 function _catch(body, recover) {
    9753   try {
    9754     var result = body();
    9755   } catch (e) {
    9756     return recover(e);
    9757   }
    9758 
    9759   if (result && result.then) {
    9760     return result.then(void 0, recover);
    9761   }
    9762 
    9763   return result;
    9764 }
    9765 
    9766584class Critters {
    9767585  /** @private */
     
    9807625
    9808626
    9809   process(html) {
    9810     try {
    9811       const _this = this;
    9812 
    9813       function _temp4() {
    9814         // go through all the style tags in the document and reduce them to only critical CSS
    9815         const styles = _this.getAffectedStyleTags(document);
    9816 
    9817         return Promise.resolve(Promise.all(styles.map(style => _this.processStyle(style, document)))).then(function () {
    9818           function _temp2() {
    9819             // serialize the document back to HTML and we're done
    9820             const output = serializeDocument(document);
    9821             const end = process.hrtime.bigint();
    9822 
    9823             _this.logger.info('Time ' + parseFloat(end - start) / 1000000.0);
    9824 
    9825             return output;
    9826           }
    9827 
    9828           const _temp = function () {
    9829             if (_this.options.mergeStylesheets !== false && styles.length !== 0) {
    9830               return Promise.resolve(_this.mergeStylesheets(document)).then(function () {});
    9831             }
    9832           }();
    9833 
    9834           return _temp && _temp.then ? _temp.then(_temp2) : _temp2(_temp);
    9835         });
    9836       }
    9837 
    9838       const start = process.hrtime.bigint(); // Parse the generated HTML in a DOM we can mutate
    9839 
    9840       const document = createDocument(html);
    9841 
    9842       if (_this.options.additionalStylesheets.length > 0) {
    9843         _this.embedAdditionalStylesheet(document);
    9844       } // `external:false` skips processing of external sheets
    9845 
    9846 
    9847       const _temp3 = function () {
    9848         if (_this.options.external !== false) {
    9849           const externalSheets = [].slice.call(document.querySelectorAll('link[rel="stylesheet"]'));
    9850           return Promise.resolve(Promise.all(externalSheets.map(link => _this.embedLinkedStylesheet(link, document)))).then(function () {});
    9851         }
    9852       }();
    9853 
    9854       return Promise.resolve(_temp3 && _temp3.then ? _temp3.then(_temp4) : _temp4(_temp3));
    9855     } catch (e) {
    9856       return Promise.reject(e);
    9857     }
     627  async process(html) {
     628    const start = process.hrtime.bigint(); // Parse the generated HTML in a DOM we can mutate
     629
     630    const document = createDocument(html);
     631
     632    if (this.options.additionalStylesheets.length > 0) {
     633      this.embedAdditionalStylesheet(document);
     634    } // `external:false` skips processing of external sheets
     635
     636
     637    if (this.options.external !== false) {
     638      const externalSheets = [].slice.call(document.querySelectorAll('link[rel="stylesheet"]'));
     639      await Promise.all(externalSheets.map(link => this.embedLinkedStylesheet(link, document)));
     640    } // go through all the style tags in the document and reduce them to only critical CSS
     641
     642
     643    const styles = this.getAffectedStyleTags(document);
     644    await Promise.all(styles.map(style => this.processStyle(style, document)));
     645
     646    if (this.options.mergeStylesheets !== false && styles.length !== 0) {
     647      await this.mergeStylesheets(document);
     648    } // serialize the document back to HTML and we're done
     649
     650
     651    const output = serializeDocument(document);
     652    const end = process.hrtime.bigint();
     653    this.logger.info('Time ' + parseFloat(end - start) / 1000000.0);
     654    return output;
    9858655  }
    9859656  /**
     
    9872669  }
    9873670
    9874   mergeStylesheets(document) {
    9875     try {
    9876       const _this2 = this;
    9877 
    9878       const styles = _this2.getAffectedStyleTags(document);
    9879 
    9880       if (styles.length === 0) {
    9881         _this2.logger.warn('Merging inline stylesheets into a single <style> tag skipped, no inline stylesheets to merge');
    9882 
    9883         return Promise.resolve();
    9884       }
    9885 
    9886       const first = styles[0];
    9887       let sheet = first.textContent;
    9888 
    9889       for (let i = 1; i < styles.length; i++) {
    9890         const node = styles[i];
    9891         sheet += node.textContent;
    9892         node.remove();
    9893       }
    9894 
    9895       first.textContent = sheet;
    9896       return Promise.resolve();
    9897     } catch (e) {
    9898       return Promise.reject(e);
    9899     }
     671  async mergeStylesheets(document) {
     672    const styles = this.getAffectedStyleTags(document);
     673
     674    if (styles.length === 0) {
     675      this.logger.warn('Merging inline stylesheets into a single <style> tag skipped, no inline stylesheets to merge');
     676      return;
     677    }
     678
     679    const first = styles[0];
     680    let sheet = first.textContent;
     681
     682    for (let i = 1; i < styles.length; i++) {
     683      const node = styles[i];
     684      sheet += node.textContent;
     685      node.remove();
     686    }
     687
     688    first.textContent = sheet;
    9900689  }
    9901690  /**
     
    9904693
    9905694
    9906   getCssAsset(href) {
     695  async getCssAsset(href) {
     696    const outputPath = this.options.path;
     697    const publicPath = this.options.publicPath; // CHECK - the output path
     698    // path on disk (with output.publicPath removed)
     699
     700    let normalizedPath = href.replace(/^\//, '');
     701    const pathPrefix = (publicPath || '').replace(/(^\/|\/$)/g, '') + '/';
     702
     703    if (normalizedPath.indexOf(pathPrefix) === 0) {
     704      normalizedPath = normalizedPath.substring(pathPrefix.length).replace(/^\//, '');
     705    } // Ignore remote stylesheets
     706
     707
     708    if (/^https:\/\//.test(normalizedPath) || href.startsWith('//')) {
     709      return undefined;
     710    }
     711
     712    const filename = path.resolve(outputPath, normalizedPath);
     713    let sheet;
     714
    9907715    try {
    9908       const _this3 = this;
    9909 
    9910       const outputPath = _this3.options.path;
    9911       const publicPath = _this3.options.publicPath; // CHECK - the output path
    9912       // path on disk (with output.publicPath removed)
    9913 
    9914       let normalizedPath = href.replace(/^\//, '');
    9915       const pathPrefix = (publicPath || '').replace(/(^\/|\/$)/g, '') + '/';
    9916 
    9917       if (normalizedPath.indexOf(pathPrefix) === 0) {
    9918         normalizedPath = normalizedPath.substring(pathPrefix.length).replace(/^\//, '');
    9919       }
    9920 
    9921       const filename = path.resolve(outputPath, normalizedPath);
    9922       let sheet;
    9923 
    9924       const _temp5 = _catch(function () {
    9925         return Promise.resolve(_this3.readFile(filename)).then(function (_this3$readFile) {
    9926           sheet = _this3$readFile;
    9927         });
    9928       }, function () {
    9929         _this3.logger.warn(`Unable to locate stylesheet: ${filename}`);
    9930       });
    9931 
    9932       return Promise.resolve(_temp5 && _temp5.then ? _temp5.then(function () {
    9933         return sheet;
    9934       }) : sheet);
     716      sheet = await this.readFile(filename);
    9935717    } catch (e) {
    9936       return Promise.reject(e);
    9937     }
     718      this.logger.warn(`Unable to locate stylesheet: ${filename}`);
     719    }
     720
     721    return sheet;
    9938722  }
    9939723
     
    9954738
    9955739
    9956   embedAdditionalStylesheet(document) {
    9957     try {
    9958       const _this4 = this;
    9959 
    9960       const styleSheetsIncluded = [];
    9961       return Promise.resolve(Promise.all(_this4.options.additionalStylesheets.map(cssFile => {
    9962         if (styleSheetsIncluded.includes(cssFile)) {
    9963           return;
    9964         }
    9965 
    9966         styleSheetsIncluded.push(cssFile);
    9967         const style = document.createElement('style');
    9968         style.$$external = true;
    9969         return _this4.getCssAsset(cssFile, style).then(sheet => [sheet, style]);
    9970       }))).then(function (sources) {
    9971         sources.forEach(([sheet, style]) => {
    9972           if (!sheet) return;
    9973           style.textContent = sheet;
    9974           document.head.appendChild(style);
    9975         });
    9976       });
    9977     } catch (e) {
    9978       return Promise.reject(e);
    9979     }
     740  async embedAdditionalStylesheet(document) {
     741    const styleSheetsIncluded = [];
     742    const sources = await Promise.all(this.options.additionalStylesheets.map(cssFile => {
     743      if (styleSheetsIncluded.includes(cssFile)) {
     744        return;
     745      }
     746
     747      styleSheetsIncluded.push(cssFile);
     748      const style = document.createElement('style');
     749      style.$$external = true;
     750      return this.getCssAsset(cssFile, style).then(sheet => [sheet, style]);
     751    }));
     752    sources.forEach(([sheet, style]) => {
     753      if (!sheet) return;
     754      style.textContent = sheet;
     755      document.head.appendChild(style);
     756    });
    9980757  }
    9981758  /**
     
    9984761
    9985762
    9986   embedLinkedStylesheet(link, document) {
    9987     try {
    9988       const _this5 = this;
    9989 
    9990       const href = link.getAttribute('href');
    9991       const media = link.getAttribute('media');
    9992       const preloadMode = _this5.options.preload; // skip filtered resources, or network resources if no filter is provided
    9993 
    9994       if (_this5.urlFilter ? _this5.urlFilter(href) : !(href || '').match(/\.css$/)) {
    9995         return Promise.resolve();
    9996       } // the reduced critical CSS gets injected into a new <style> tag
    9997 
    9998 
    9999       const style = document.createElement('style');
    10000       style.$$external = true;
    10001       return Promise.resolve(_this5.getCssAsset(href, style)).then(function (sheet) {
    10002         if (!sheet) {
    10003           return;
    10004         }
    10005 
    10006         style.textContent = sheet;
    10007         style.$$name = href;
    10008         style.$$links = [link];
    10009         link.parentNode.insertBefore(style, link);
    10010 
    10011         if (_this5.checkInlineThreshold(link, style, sheet)) {
    10012           return;
    10013         } // CSS loader is only injected for the first sheet, then this becomes an empty string
    10014 
    10015 
    10016         let cssLoaderPreamble = "function $loadcss(u,m,l){(l=document.createElement('link')).rel='stylesheet';l.href=u;document.head.appendChild(l)}";
    10017         const lazy = preloadMode === 'js-lazy';
    10018 
    10019         if (lazy) {
    10020           cssLoaderPreamble = cssLoaderPreamble.replace('l.href', "l.media='print';l.onload=function(){l.media=m};l.href");
    10021         } // Allow disabling any mutation of the stylesheet link:
    10022 
    10023 
    10024         if (preloadMode === false) return;
    10025         let noscriptFallback = false;
    10026 
    10027         if (preloadMode === 'body') {
    10028           document.body.appendChild(link);
    10029         } else {
    10030           link.setAttribute('rel', 'preload');
    10031           link.setAttribute('as', 'style');
    10032 
    10033           if (preloadMode === 'js' || preloadMode === 'js-lazy') {
    10034             const script = document.createElement('script');
    10035             const js = `${cssLoaderPreamble}$loadcss(${JSON.stringify(href)}${lazy ? ',' + JSON.stringify(media || 'all') : ''})`; // script.appendChild(document.createTextNode(js));
    10036 
    10037             script.textContent = js;
    10038             link.parentNode.insertBefore(script, link.nextSibling);
    10039             style.$$links.push(script);
    10040             cssLoaderPreamble = '';
    10041             noscriptFallback = true;
    10042           } else if (preloadMode === 'media') {
    10043             // @see https://github.com/filamentgroup/loadCSS/blob/af1106cfe0bf70147e22185afa7ead96c01dec48/src/loadCSS.js#L26
    10044             link.setAttribute('rel', 'stylesheet');
    10045             link.removeAttribute('as');
    10046             link.setAttribute('media', 'print');
    10047             link.setAttribute('onload', `this.media='${media || 'all'}'`);
    10048             noscriptFallback = true;
    10049           } else if (preloadMode === 'swap-high') {
    10050             // @see http://filamentgroup.github.io/loadCSS/test/new-high.html
    10051             link.setAttribute('rel', 'alternate stylesheet preload');
    10052             link.setAttribute('title', 'styles');
    10053             link.setAttribute('onload', `this.title='';this.rel='stylesheet'`);
    10054             noscriptFallback = true;
    10055           } else if (preloadMode === 'swap') {
    10056             link.setAttribute('onload', "this.rel='stylesheet'");
    10057             noscriptFallback = true;
    10058           } else {
    10059             const bodyLink = document.createElement('link');
    10060             bodyLink.setAttribute('rel', 'stylesheet');
    10061             if (media) bodyLink.setAttribute('media', media);
    10062             bodyLink.setAttribute('href', href);
    10063             document.body.appendChild(bodyLink);
    10064             style.$$links.push(bodyLink);
    10065           }
    10066         }
    10067 
    10068         if (_this5.options.noscriptFallback !== false && noscriptFallback) {
    10069           const noscript = document.createElement('noscript');
    10070           const noscriptLink = document.createElement('link');
    10071           noscriptLink.setAttribute('rel', 'stylesheet');
    10072           noscriptLink.setAttribute('href', href);
    10073           if (media) noscriptLink.setAttribute('media', media);
    10074           noscript.appendChild(noscriptLink);
    10075           link.parentNode.insertBefore(noscript, link.nextSibling);
    10076           style.$$links.push(noscript);
    10077         }
    10078       });
    10079     } catch (e) {
    10080       return Promise.reject(e);
     763  async embedLinkedStylesheet(link, document) {
     764    const href = link.getAttribute('href');
     765    const media = link.getAttribute('media');
     766    const preloadMode = this.options.preload; // skip filtered resources, or network resources if no filter is provided
     767
     768    if (this.urlFilter ? this.urlFilter(href) : !(href || '').match(/\.css$/)) {
     769      return Promise.resolve();
     770    } // the reduced critical CSS gets injected into a new <style> tag
     771
     772
     773    const style = document.createElement('style');
     774    style.$$external = true;
     775    const sheet = await this.getCssAsset(href, style);
     776
     777    if (!sheet) {
     778      return;
     779    }
     780
     781    style.textContent = sheet;
     782    style.$$name = href;
     783    style.$$links = [link];
     784    link.parentNode.insertBefore(style, link);
     785
     786    if (this.checkInlineThreshold(link, style, sheet)) {
     787      return;
     788    } // CSS loader is only injected for the first sheet, then this becomes an empty string
     789
     790
     791    let cssLoaderPreamble = "function $loadcss(u,m,l){(l=document.createElement('link')).rel='stylesheet';l.href=u;document.head.appendChild(l)}";
     792    const lazy = preloadMode === 'js-lazy';
     793
     794    if (lazy) {
     795      cssLoaderPreamble = cssLoaderPreamble.replace('l.href', "l.media='print';l.onload=function(){l.media=m};l.href");
     796    } // Allow disabling any mutation of the stylesheet link:
     797
     798
     799    if (preloadMode === false) return;
     800    let noscriptFallback = false;
     801
     802    if (preloadMode === 'body') {
     803      document.body.appendChild(link);
     804    } else {
     805      link.setAttribute('rel', 'preload');
     806      link.setAttribute('as', 'style');
     807
     808      if (preloadMode === 'js' || preloadMode === 'js-lazy') {
     809        const script = document.createElement('script');
     810        const js = `${cssLoaderPreamble}$loadcss(${JSON.stringify(href)}${lazy ? ',' + JSON.stringify(media || 'all') : ''})`; // script.appendChild(document.createTextNode(js));
     811
     812        script.textContent = js;
     813        link.parentNode.insertBefore(script, link.nextSibling);
     814        style.$$links.push(script);
     815        cssLoaderPreamble = '';
     816        noscriptFallback = true;
     817      } else if (preloadMode === 'media') {
     818        // @see https://github.com/filamentgroup/loadCSS/blob/af1106cfe0bf70147e22185afa7ead96c01dec48/src/loadCSS.js#L26
     819        link.setAttribute('rel', 'stylesheet');
     820        link.removeAttribute('as');
     821        link.setAttribute('media', 'print');
     822        link.setAttribute('onload', `this.media='${media || 'all'}'`);
     823        noscriptFallback = true;
     824      } else if (preloadMode === 'swap-high') {
     825        // @see http://filamentgroup.github.io/loadCSS/test/new-high.html
     826        link.setAttribute('rel', 'alternate stylesheet preload');
     827        link.setAttribute('title', 'styles');
     828        link.setAttribute('onload', `this.title='';this.rel='stylesheet'`);
     829        noscriptFallback = true;
     830      } else if (preloadMode === 'swap') {
     831        link.setAttribute('onload', "this.rel='stylesheet'");
     832        noscriptFallback = true;
     833      } else {
     834        const bodyLink = document.createElement('link');
     835        bodyLink.setAttribute('rel', 'stylesheet');
     836        if (media) bodyLink.setAttribute('media', media);
     837        bodyLink.setAttribute('href', href);
     838        document.body.appendChild(bodyLink);
     839        style.$$links.push(bodyLink);
     840      }
     841    }
     842
     843    if (this.options.noscriptFallback !== false && noscriptFallback) {
     844      const noscript = document.createElement('noscript');
     845      const noscriptLink = document.createElement('link');
     846      noscriptLink.setAttribute('rel', 'stylesheet');
     847      noscriptLink.setAttribute('href', href);
     848      if (media) noscriptLink.setAttribute('media', media);
     849      noscript.appendChild(noscriptLink);
     850      link.parentNode.insertBefore(noscript, link.nextSibling);
     851      style.$$links.push(noscript);
    10081852    }
    10082853  }
     
    10112883
    10113884
    10114   processStyle(style, document) {
    10115     try {
    10116       const _this6 = this;
    10117 
    10118       if (style.$$reduce === false) return Promise.resolve();
    10119       const name = style.$$name ? style.$$name.replace(/^\//, '') : 'inline CSS';
    10120       const options = _this6.options; // const document = style.ownerDocument;
    10121 
    10122       const head = document.querySelector('head');
    10123       let keyframesMode = options.keyframes || 'critical'; // we also accept a boolean value for options.keyframes
    10124 
    10125       if (keyframesMode === true) keyframesMode = 'all';
    10126       if (keyframesMode === false) keyframesMode = 'none';
    10127       let sheet = style.textContent; // store a reference to the previous serialized stylesheet for reporting stats
    10128 
    10129       const before = sheet; // Skip empty stylesheets
    10130 
    10131       if (!sheet) return Promise.resolve();
    10132       const ast = parseStylesheet(sheet);
    10133       const astInverse = options.pruneSource ? parseStylesheet(sheet) : null; // a string to search for font names (very loose)
    10134 
    10135       let criticalFonts = '';
    10136       const failedSelectors = [];
    10137       const criticalKeyframeNames = []; // Walk all CSS rules, marking unused rules with `.$$remove=true` for removal in the second pass.
    10138       // This first pass is also used to collect font and keyframe usage used in the second pass.
    10139 
    10140       walkStyleRules(ast, markOnly(rule => {
    10141         if (rule.type === 'rule') {
    10142           // Filter the selector list down to only those match
    10143           rule.filterSelectors(sel => {
    10144             // Strip pseudo-elements and pseudo-classes, since we only care that their associated elements exist.
    10145             // This means any selector for a pseudo-element or having a pseudo-class will be inlined if the rest of the selector matches.
    10146             if (sel === ':root' || sel.match(/^::?(before|after)$/)) {
    10147               return true;
    10148             }
    10149 
    10150             sel = sel.replace(/(?<!\\)::?[a-z-]+(?![a-z-(])/gi, '').replace(/::?not\(\s*\)/g, '').trim();
    10151             if (!sel) return false;
    10152 
    10153             try {
    10154               return document.querySelector(sel) != null;
    10155             } catch (e) {
    10156               failedSelectors.push(sel + ' -> ' + e.message);
    10157               return false;
    10158             }
    10159           }); // If there are no matched selectors, remove the rule:
    10160 
    10161           if (rule.selectors.length === 0) {
     885  async processStyle(style, document) {
     886    if (style.$$reduce === false) return;
     887    const name = style.$$name ? style.$$name.replace(/^\//, '') : 'inline CSS';
     888    const options = this.options; // const document = style.ownerDocument;
     889
     890    const head = document.querySelector('head');
     891    let keyframesMode = options.keyframes || 'critical'; // we also accept a boolean value for options.keyframes
     892
     893    if (keyframesMode === true) keyframesMode = 'all';
     894    if (keyframesMode === false) keyframesMode = 'none';
     895    let sheet = style.textContent; // store a reference to the previous serialized stylesheet for reporting stats
     896
     897    const before = sheet; // Skip empty stylesheets
     898
     899    if (!sheet) return;
     900    const ast = parseStylesheet(sheet);
     901    const astInverse = options.pruneSource ? parseStylesheet(sheet) : null; // a string to search for font names (very loose)
     902
     903    let criticalFonts = '';
     904    const failedSelectors = [];
     905    const criticalKeyframeNames = []; // Walk all CSS rules, marking unused rules with `.$$remove=true` for removal in the second pass.
     906    // This first pass is also used to collect font and keyframe usage used in the second pass.
     907
     908    walkStyleRules(ast, markOnly(rule => {
     909      if (rule.type === 'rule') {
     910        // Filter the selector list down to only those match
     911        rule.filterSelectors(sel => {
     912          // Strip pseudo-elements and pseudo-classes, since we only care that their associated elements exist.
     913          // This means any selector for a pseudo-element or having a pseudo-class will be inlined if the rest of the selector matches.
     914          if (sel === ':root' || sel.match(/^::?(before|after)$/)) {
     915            return true;
     916          }
     917
     918          sel = sel.replace(/(?<!\\)::?[a-z-]+(?![a-z-(])/gi, '').replace(/::?not\(\s*\)/g, '').trim();
     919          if (!sel) return false;
     920
     921          try {
     922            return document.querySelector(sel) != null;
     923          } catch (e) {
     924            failedSelectors.push(sel + ' -> ' + e.message);
    10162925            return false;
    10163926          }
    10164 
    10165           if (rule.declarations) {
    10166             for (let i = 0; i < rule.declarations.length; i++) {
    10167               const decl = rule.declarations[i]; // detect used fonts
    10168 
    10169               if (decl.property && decl.property.match(/\bfont(-family)?\b/i)) {
    10170                 criticalFonts += ' ' + decl.value;
    10171               } // detect used keyframes
    10172 
    10173 
    10174               if (decl.property === 'animation' || decl.property === 'animation-name') {
    10175                 // @todo: parse animation declarations and extract only the name. for now we'll do a lazy match.
    10176                 const names = decl.value.split(/\s+/);
    10177 
    10178                 for (let j = 0; j < names.length; j++) {
    10179                   const name = names[j].trim();
    10180                   if (name) criticalKeyframeNames.push(name);
    10181                 }
     927        }); // If there are no matched selectors, remove the rule:
     928
     929        if (!rule.selector) {
     930          return false;
     931        }
     932
     933        if (rule.nodes) {
     934          for (let i = 0; i < rule.nodes.length; i++) {
     935            const decl = rule.nodes[i]; // detect used fonts
     936
     937            if (decl.prop && decl.prop.match(/\bfont(-family)?\b/i)) {
     938              criticalFonts += ' ' + decl.value;
     939            } // detect used keyframes
     940
     941
     942            if (decl.prop === 'animation' || decl.prop === 'animation-name') {
     943              // @todo: parse animation declarations and extract only the name. for now we'll do a lazy match.
     944              const names = decl.value.split(/\s+/);
     945
     946              for (let j = 0; j < names.length; j++) {
     947                const name = names[j].trim();
     948                if (name) criticalKeyframeNames.push(name);
    10182949              }
    10183950            }
    10184951          }
    10185         } // keep font rules, they're handled in the second pass:
    10186 
    10187 
    10188         if (rule.type === 'font-face') return; // If there are no remaining rules, remove the whole rule:
    10189 
    10190         const rules = rule.rules && rule.rules.filter(rule => !rule.$$remove);
    10191         return !rules || rules.length !== 0;
    10192       }));
    10193 
    10194       if (failedSelectors.length !== 0) {
    10195         _this6.logger.warn(`${failedSelectors.length} rules skipped due to selector errors:\n  ${failedSelectors.join('\n  ')}`);
    10196       }
    10197 
    10198       const shouldPreloadFonts = options.fonts === true || options.preloadFonts === true;
    10199       const shouldInlineFonts = options.fonts !== false && options.inlineFonts === true;
    10200       const preloadedFonts = []; // Second pass, using data picked up from the first
    10201 
    10202       walkStyleRulesWithReverseMirror(ast, astInverse, rule => {
    10203         // remove any rules marked in the first pass
    10204         if (rule.$$remove === true) return false;
    10205         applyMarkedSelectors(rule); // prune @keyframes rules
    10206 
    10207         if (rule.type === 'keyframes') {
    10208           if (keyframesMode === 'none') return false;
    10209           if (keyframesMode === 'all') return true;
    10210           return criticalKeyframeNames.indexOf(rule.name) !== -1;
    10211         } // prune @font-face rules
    10212 
    10213 
    10214         if (rule.type === 'font-face') {
    10215           let family, src;
    10216 
    10217           for (let i = 0; i < rule.declarations.length; i++) {
    10218             const decl = rule.declarations[i];
    10219 
    10220             if (decl.property === 'src') {
    10221               // @todo parse this properly and generate multiple preloads with type="font/woff2" etc
    10222               src = (decl.value.match(/url\s*\(\s*(['"]?)(.+?)\1\s*\)/) || [])[2];
    10223             } else if (decl.property === 'font-family') {
    10224               family = decl.value;
    10225             }
    10226           }
    10227 
    10228           if (src && shouldPreloadFonts && preloadedFonts.indexOf(src) === -1) {
    10229             preloadedFonts.push(src);
    10230             const preload = document.createElement('link');
    10231             preload.setAttribute('rel', 'preload');
    10232             preload.setAttribute('as', 'font');
    10233             preload.setAttribute('crossorigin', 'anonymous');
    10234             preload.setAttribute('href', src.trim());
    10235             head.appendChild(preload);
    10236           } // if we're missing info, if the font is unused, or if critical font inlining is disabled, remove the rule:
    10237 
    10238 
    10239           if (!family || !src || criticalFonts.indexOf(family) === -1 || !shouldInlineFonts) {
    10240             return false;
     952        }
     953      } // keep font rules, they're handled in the second pass:
     954
     955
     956      if (rule.type === 'atrule' && rule.name === 'font-face') return; // If there are no remaining rules, remove the whole rule:
     957
     958      const rules = rule.nodes && rule.nodes.filter(rule => !rule.$$remove);
     959      return !rules || rules.length !== 0;
     960    }));
     961
     962    if (failedSelectors.length !== 0) {
     963      this.logger.warn(`${failedSelectors.length} rules skipped due to selector errors:\n  ${failedSelectors.join('\n  ')}`);
     964    }
     965
     966    const shouldPreloadFonts = options.fonts === true || options.preloadFonts === true;
     967    const shouldInlineFonts = options.fonts !== false && options.inlineFonts === true;
     968    const preloadedFonts = []; // Second pass, using data picked up from the first
     969
     970    walkStyleRulesWithReverseMirror(ast, astInverse, rule => {
     971      // remove any rules marked in the first pass
     972      if (rule.$$remove === true) return false;
     973      applyMarkedSelectors(rule); // prune @keyframes rules
     974
     975      if (rule.type === 'atrule' && rule.name === 'keyframes') {
     976        if (keyframesMode === 'none') return false;
     977        if (keyframesMode === 'all') return true;
     978        return criticalKeyframeNames.indexOf(rule.params) !== -1;
     979      } // prune @font-face rules
     980
     981
     982      if (rule.type === 'atrule' && rule.name === 'font-face') {
     983        let family, src;
     984
     985        for (let i = 0; i < rule.nodes.length; i++) {
     986          const decl = rule.nodes[i];
     987
     988          if (decl.prop === 'src') {
     989            // @todo parse this properly and generate multiple preloads with type="font/woff2" etc
     990            src = (decl.value.match(/url\s*\(\s*(['"]?)(.+?)\1\s*\)/) || [])[2];
     991          } else if (decl.prop === 'font-family') {
     992            family = decl.value;
    10241993          }
    10242994        }
     995
     996        if (src && shouldPreloadFonts && preloadedFonts.indexOf(src) === -1) {
     997          preloadedFonts.push(src);
     998          const preload = document.createElement('link');
     999          preload.setAttribute('rel', 'preload');
     1000          preload.setAttribute('as', 'font');
     1001          preload.setAttribute('crossorigin', 'anonymous');
     1002          preload.setAttribute('href', src.trim());
     1003          head.appendChild(preload);
     1004        } // if we're missing info, if the font is unused, or if critical font inlining is disabled, remove the rule:
     1005
     1006
     1007        if (!family || !src || criticalFonts.indexOf(family) === -1 || !shouldInlineFonts) {
     1008          return false;
     1009        }
     1010      }
     1011    });
     1012    sheet = serializeStylesheet(ast, {
     1013      compress: this.options.compress !== false
     1014    }); // If all rules were removed, get rid of the style element entirely
     1015
     1016    if (sheet.trim().length === 0) {
     1017      if (style.parentNode) {
     1018        style.remove();
     1019      }
     1020
     1021      return;
     1022    }
     1023
     1024    let afterText = '';
     1025    let styleInlinedCompletely = false;
     1026
     1027    if (options.pruneSource) {
     1028      const sheetInverse = serializeStylesheet(astInverse, {
     1029        compress: this.options.compress !== false
    102431030      });
    10244       sheet = serializeStylesheet(ast, {
    10245         compress: _this6.options.compress !== false
    10246       }).trim(); // If all rules were removed, get rid of the style element entirely
    10247 
    10248       if (sheet.trim().length === 0) {
    10249         if (style.parentNode) {
    10250           style.remove();
    10251         }
    10252 
    10253         return Promise.resolve();
     1031      styleInlinedCompletely = this.pruneSource(style, before, sheetInverse);
     1032
     1033      if (styleInlinedCompletely) {
     1034        const percent = sheetInverse.length / before.length * 100;
     1035        afterText = `, reducing non-inlined size ${percent | 0}% to ${prettyBytes(sheetInverse.length)}`;
    102541036      }
    10255 
    10256       let afterText = '';
    10257       let styleInlinedCompletely = false;
    10258 
    10259       if (options.pruneSource) {
    10260         const sheetInverse = serializeStylesheet(astInverse, {
    10261           compress: _this6.options.compress !== false
    10262         });
    10263         styleInlinedCompletely = _this6.pruneSource(style, before, sheetInverse);
    10264 
    10265         if (styleInlinedCompletely) {
    10266           const percent = sheetInverse.length / before.length * 100;
    10267           afterText = `, reducing non-inlined size ${percent | 0}% to ${prettyBytes(sheetInverse.length)}`;
    10268         }
    10269       } // replace the inline stylesheet with its critical'd counterpart
    10270 
    10271 
    10272       if (!styleInlinedCompletely) {
    10273         style.textContent = sheet;
    10274       } // output stats
    10275 
    10276 
    10277       const percent = sheet.length / before.length * 100 | 0;
    10278 
    10279       _this6.logger.info('\u001b[32mInlined ' + prettyBytes(sheet.length) + ' (' + percent + '% of original ' + prettyBytes(before.length) + ') of ' + name + afterText + '.\u001b[39m');
    10280 
    10281       return Promise.resolve();
    10282     } catch (e) {
    10283       return Promise.reject(e);
    10284     }
     1037    } // replace the inline stylesheet with its critical'd counterpart
     1038
     1039
     1040    if (!styleInlinedCompletely) {
     1041      style.textContent = sheet;
     1042    } // output stats
     1043
     1044
     1045    const percent = sheet.length / before.length * 100 | 0;
     1046    this.logger.info('\u001b[32mInlined ' + prettyBytes(sheet.length) + ' (' + percent + '% of original ' + prettyBytes(before.length) + ') of ' + name + afterText + '.\u001b[39m');
    102851047  }
    102861048
     
    102881050
    102891051module.exports = Critters;
    10290 //# sourceMappingURL=critters.js.map
  • trip-planner-front/node_modules/critters/package.json

    r59329aa re29cc2e  
    11{
    2   "_args": [
    3     [
    4       "critters@0.0.10",
    5       "C:\\Users\\DELL\\Desktop\\bachelor-thesis\\trip-planner-front"
    6     ]
    7   ],
    8   "_development": true,
    9   "_from": "critters@0.0.10",
    10   "_id": "critters@0.0.10",
     2  "_from": "critters@0.0.12",
     3  "_id": "critters@0.0.12",
    114  "_inBundle": false,
    12   "_integrity": "sha512-p5VKhP1803+f+0Jq5P03w1SbiHtpAKm+1EpJHkiPxQPq0Vu9QLZHviJ02GRrWi0dlcJqrmzMWInbwp4d22RsGw==",
     5  "_integrity": "sha512-ujxKtKc/mWpjrOKeaACTaQ1aP0O31M0ZPWhfl85jZF1smPU4Ivb9va5Ox2poif4zVJQQo0LCFlzGtEZAsCAPcw==",
    136  "_location": "/critters",
    14   "_phantomChildren": {},
     7  "_phantomChildren": {
     8    "nanoid": "3.1.30",
     9    "source-map-js": "0.6.2"
     10  },
    1511  "_requested": {
    1612    "type": "version",
    1713    "registry": true,
    18     "raw": "critters@0.0.10",
     14    "raw": "critters@0.0.12",
    1915    "name": "critters",
    2016    "escapedName": "critters",
    21     "rawSpec": "0.0.10",
     17    "rawSpec": "0.0.12",
    2218    "saveSpec": null,
    23     "fetchSpec": "0.0.10"
     19    "fetchSpec": "0.0.12"
    2420  },
    2521  "_requiredBy": [
    2622    "/@angular-devkit/build-angular"
    2723  ],
    28   "_resolved": "https://registry.npmjs.org/critters/-/critters-0.0.10.tgz",
    29   "_spec": "0.0.10",
    30   "_where": "C:\\Users\\DELL\\Desktop\\bachelor-thesis\\trip-planner-front",
     24  "_resolved": "https://registry.npmjs.org/critters/-/critters-0.0.12.tgz",
     25  "_shasum": "32baa87526e053a41b67e19921673ed92264e2ab",
     26  "_spec": "critters@0.0.12",
     27  "_where": "C:\\Users\\DELL\\Desktop\\bachelor-thesis\\trip-planner-front\\node_modules\\@angular-devkit\\build-angular",
    3128  "author": {
    3229    "name": "The Chromium Authors"
     
    3532    "url": "https://github.com/GoogleChromeLabs/critters/issues"
    3633  },
     34  "bundleDependencies": false,
    3735  "contributors": [
    3836    {
     
    4745  "dependencies": {
    4846    "chalk": "^4.1.0",
    49     "css": "^3.0.0",
     47    "css-select": "^4.1.3",
    5048    "parse5": "^6.0.1",
    5149    "parse5-htmlparser2-tree-adapter": "^6.0.1",
     50    "postcss": "^8.3.7",
    5251    "pretty-bytes": "^5.3.0"
    5352  },
    54   "description": "Plugin to inline critical CSS and lazy-load the rest.",
     53  "deprecated": false,
     54  "description": "Inline critical CSS and lazy-load the rest.",
    5555  "devDependencies": {
    56     "@babel/preset-env": "^7.11.0",
    57     "babel-core": "^6.26.0",
    58     "babel-jest": "^26.3.0",
    59     "css-loader": "^4.2.1",
    60     "documentation": "^13.0.2",
    61     "eslint": "^7.6.0",
    62     "eslint-config-prettier": "^6.11.0",
    63     "eslint-config-standard": "^14.1.1",
    64     "eslint-plugin-import": "^2.11.0",
    65     "eslint-plugin-jest": "^23.20.0",
    66     "eslint-plugin-node": "^11.1.0",
    67     "eslint-plugin-promise": "^4.2.1",
    68     "eslint-plugin-standard": "^4.0.1",
    69     "file-loader": "^6.0.0",
    70     "html-webpack-plugin": "^3.2.0",
    71     "jest": "^26.3.0",
    72     "microbundle": "^0.12.3",
    73     "mini-css-extract-plugin": "^0.10.0",
    74     "webpack": "^4.6.0",
    75     "webpack-log": "^3.0.2"
     56    "microbundle": "^0.12.3"
     57  },
     58  "exports": {
     59    "import": "./dist/critters.mjs",
     60    "require": "./dist/critters.js",
     61    "default": "./dist/critters.mjs"
    7662  },
    7763  "files": [
     
    8066  ],
    8167  "homepage": "https://github.com/GoogleChromeLabs/critters#readme",
    82   "jest": {
    83     "testEnvironment": "jsdom",
    84     "testURL": "http://localhost",
    85     "coverageReporters": [
    86       "text"
    87     ],
    88     "collectCoverageFrom": [
    89       "src/**/*.js"
    90     ],
    91     "watchPathIgnorePatterns": [
    92       "node_modules",
    93       "dist"
    94     ]
    95   },
    9668  "keywords": [
    9769    "critical css",
     
    10476  "license": "Apache-2.0",
    10577  "main": "dist/critters.js",
     78  "module": "dist/critters.mjs",
    10679  "name": "critters",
    10780  "repository": {
    10881    "type": "git",
    109     "url": "git+https://github.com/GoogleChromeLabs/critters.git"
     82    "url": "git+https://github.com/GoogleChromeLabs/critters.git",
     83    "directory": "packages/critters"
    11084  },
    11185  "scripts": {
    112     "build": "npm run -s build:main && npm run -s build:webpack",
    113     "build:main": "microbundle --target node",
    114     "build:webpack": "cd packages/critters-webpack-plugin && npm run -s build",
     86    "build": "microbundle --target node --no-sourcemap -f cjs,esm",
    11587    "docs": "documentation readme -q --no-markdown-toc -a public -s Usage --sort-order alpha src",
    116     "prepare": "npm run -s build",
    117     "release": "npm run build -s && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish",
    118     "test": "jest --coverage"
     88    "prepare": "npm run -s build"
    11989  },
    12090  "source": "src/index.js",
    12191  "typings": "src/index.d.ts",
    122   "version": "0.0.10"
     92  "version": "0.0.12"
    12393}
  • trip-planner-front/node_modules/critters/src/css.js

    r59329aa re29cc2e  
    1515 */
    1616
    17 import css from 'css';
     17import { parse, stringify } from 'postcss';
    1818
    1919/**
    2020 * Parse a textual CSS Stylesheet into a Stylesheet instance.
    21  * Stylesheet is a mutable ReworkCSS AST with format similar to CSSOM.
    22  * @see https://github.com/reworkcss/css
     21 * Stylesheet is a mutable postcss AST with format similar to CSSOM.
     22 * @see https://github.com/postcss/postcss/
    2323 * @private
    2424 * @param {String} stylesheet
    2525 * @returns {css.Stylesheet} ast
    2626 */
    27 export function parseStylesheet (stylesheet) {
    28   return css.parse(stylesheet);
     27export function parseStylesheet(stylesheet) {
     28  return parse(stylesheet);
    2929}
    3030
    3131/**
    32  * Serialize a ReworkCSS Stylesheet to a String of CSS.
     32 * Serialize a postcss Stylesheet to a String of CSS.
    3333 * @private
    3434 * @param {css.Stylesheet} ast          A Stylesheet to serialize, such as one returned from `parseStylesheet()`
    35  * @param {Object} options              Options to pass to `css.stringify()`
     35 * @param {Object} options              Options used by the stringify logic
    3636 * @param {Boolean} [options.compress]  Compress CSS output (removes comments, whitespace, etc)
    3737 */
    38 export function serializeStylesheet (ast, options) {
    39   return css.stringify(ast, options);
     38export function serializeStylesheet(ast, options) {
     39  let cssStr = '';
     40
     41  stringify(ast, (result, node, type) => {
     42    if (!options.compress) {
     43      cssStr += result;
     44      return;
     45    }
     46
     47    // Simple minification logic
     48    if (node?.type === 'comment') return;
     49
     50    if (node?.type === 'decl') {
     51      const prefix = node.prop + node.raws.between;
     52
     53      cssStr += result.replace(prefix, prefix.trim());
     54      return;
     55    }
     56
     57    if (type === 'start') {
     58      if (node.type === 'rule' && node.selectors) {
     59        cssStr += node.selectors.join(',') + '{';
     60      } else {
     61        cssStr += result.replace(/\s\{$/, '{');
     62      }
     63      return;
     64    }
     65
     66    if (type === 'end' && result === '}' && node?.raws?.semicolon) {
     67      cssStr = cssStr.slice(0, -1);
     68    }
     69
     70    cssStr += result.trim();
     71  });
     72
     73  return cssStr;
    4074}
    4175
     
    4781 * @returns {(rule) => void} nonDestructiveIterator
    4882 */
    49 export function markOnly (predicate) {
    50   return rule => {
     83export function markOnly(predicate) {
     84  return (rule) => {
    5185    const sel = rule.selectors;
    5286    if (predicate(rule) === false) {
     
    6599 * @private
    66100 * @param {css.Rule} rule The Rule to apply marked selectors to (if they exist).
    67 */
    68 export function applyMarkedSelectors (rule) {
     101 */
     102export function applyMarkedSelectors(rule) {
    69103  if (rule.$$markedSelectors) {
    70104    rule.selectors = rule.$$markedSelectors;
     
    81115 * @param {Function} iterator   Invoked on each node in the tree. Return `false` to remove that node.
    82116 */
    83 export function walkStyleRules (node, iterator) {
    84   if (node.stylesheet) return walkStyleRules(node.stylesheet, iterator);
    85 
    86   node.rules = node.rules.filter(rule => {
    87     if (rule.rules) {
     117export function walkStyleRules(node, iterator) {
     118  node.nodes = node.nodes.filter((rule) => {
     119    if (hasNestedRules(rule)) {
    88120      walkStyleRules(rule, iterator);
    89121    }
     
    101133 * @param {Function} iterator   Invoked on each node in the tree. Return `false` to remove that node from the first tree, true to remove it from the second.
    102134 */
    103 export function walkStyleRulesWithReverseMirror (node, node2, iterator) {
     135export function walkStyleRulesWithReverseMirror(node, node2, iterator) {
    104136  if (node2 === null) return walkStyleRules(node, iterator);
    105137
    106   if (node.stylesheet) return walkStyleRulesWithReverseMirror(node.stylesheet, node2.stylesheet, iterator);
     138  [node.nodes, node2.nodes] = splitFilter(
     139    node.nodes,
     140    node2.nodes,
     141    (rule, index, rules, rules2) => {
     142      const rule2 = rules2[index];
     143      if (hasNestedRules(rule)) {
     144        walkStyleRulesWithReverseMirror(rule, rule2, iterator);
     145      }
     146      rule._other = rule2;
     147      rule.filterSelectors = filterSelectors;
     148      return iterator(rule) !== false;
     149    }
     150  );
     151}
    107152
    108   [node.rules, node2.rules] = splitFilter(node.rules, node2.rules, (rule, index, rules, rules2) => {
    109     const rule2 = rules2[index];
    110     if (rule.rules) {
    111       walkStyleRulesWithReverseMirror(rule, rule2, iterator);
    112     }
    113     rule._other = rule2;
    114     rule.filterSelectors = filterSelectors;
    115     return iterator(rule) !== false;
    116   });
     153// Checks if a node has nested rules, like @media
     154// @keyframes are an exception since they are evaluated as a whole
     155function hasNestedRules(rule) {
     156  return (
     157    rule.nodes &&
     158    rule.nodes.length &&
     159    rule.nodes.some((n) => n.type === 'rule' || n.type === 'atrule') &&
     160    rule.name !== 'keyframes'
     161  );
    117162}
    118163
    119164// Like [].filter(), but applies the opposite filtering result to a second copy of the Array without a second pass.
    120165// This is just a quicker version of generating the compliment of the set returned from a filter operation.
    121 function splitFilter (a, b, predicate) {
     166function splitFilter(a, b, predicate) {
    122167  const aOut = [];
    123168  const bOut = [];
     
    133178
    134179// can be invoked on a style rule to subset its selectors (with reverse mirroring)
    135 function filterSelectors (predicate) {
     180function filterSelectors(predicate) {
    136181  if (this._other) {
    137     const [a, b] = splitFilter(this.selectors, this._other.selectors, predicate);
     182    const [a, b] = splitFilter(
     183      this.selectors,
     184      this._other.selectors,
     185      predicate
     186    );
    138187    this.selectors = a;
    139188    this._other.selectors = b;
  • trip-planner-front/node_modules/critters/src/dom.js

    r59329aa re29cc2e  
    1616
    1717import parse5 from 'parse5';
    18 import select from 'css-select';
     18import { selectAll, selectOne } from 'css-select';
     19import treeAdapter from 'parse5-htmlparser2-tree-adapter';
    1920
    2021// htmlparser2 has a relatively DOM-like tree format, which we'll massage into a DOM elsewhere
    21 const treeAdapter = require('parse5-htmlparser2-tree-adapter');
    22 
    2322const PARSE5_OPTS = {
    2423  treeAdapter
     
    3130 */
    3231export function createDocument(html) {
    33   const document = parse5.parse(html, PARSE5_OPTS);
     32  const document = /** @type {HTMLDocument} */ (
     33    parse5.parse(html, PARSE5_OPTS)
     34  );
    3435
    3536  defineProperties(document, DocumentExtensions);
     
    4849/**
    4950 * Serialize a Document to an HTML String
    50  * @param {Document} document   A Document, such as one created via `createDocument()`
     51 * @param {HTMLDocument} document   A Document, such as one created via `createDocument()`
    5152 */
    5253export function serializeDocument(document) {
     
    5455}
    5556
     57/** @typedef {treeAdapter.Document & typeof ElementExtensions} HTMLDocument */
     58
    5659/**
    5760 * Methods and descriptors to mix into Element.prototype
     61 * @private
    5862 */
    5963const ElementExtensions = {
    60   /** @extends htmlparser2.Element.prototype */
     64  /** @extends treeAdapter.Element.prototype */
    6165
    6266  nodeName: {
     
    131135 */
    132136const DocumentExtensions = {
    133   /** @extends htmlparser2.Document.prototype */
     137  /** @extends treeAdapter.Document.prototype */
    134138
    135139  // document is just an Element in htmlparser2, giving it a nodeType of ELEMENT_NODE.
     
    196200
    197201  querySelector(sel) {
    198     return select.selectOne(sel, this.documentElement);
     202    return selectOne(sel, this.documentElement);
    199203  },
    200204
     
    203207      return this;
    204208    }
    205     return select(sel, this.documentElement);
     209    return selectAll(sel, this.documentElement);
    206210  }
    207211};
  • trip-planner-front/node_modules/critters/src/index.d.ts

    r59329aa re29cc2e  
    1515 */
    1616
    17 declare module 'critters' {
    18   export interface Options {
    19     path?: string;
    20     publicPath?: string;
    21     external?: boolean;
    22     inlineThreshold?: number;
    23     minimumExternalSize?: number;
    24     pruneSource?: boolean;
    25     mergeStylesheets?: boolean;
    26     additionalStylesheets?: string[];
    27     preload?: 'body' | 'media' | 'swap' | 'js' | 'js-lazy';
    28     noscriptFallback?: boolean;
    29     inlineFonts?: boolean;
    30     preloadFonts?: boolean;
    31     fonts?: boolean;
    32     keyframes?: string;
    33     compress?: boolean;
    34     logLevel?: 'info' | 'warn' | 'error' | 'trace' | 'debug' | 'silent';
    35     reduceInlineStyles?: boolean;
    36     logger?: Logger;
    37   }
     17export default class Critters {
     18  /**
     19   * Create an instance of Critters with custom options.
     20   * The `.process()` method can be called repeatedly to re-use this instance and its cache.
     21   */
     22  constructor(options: Options);
     23  /**
     24   * Process an HTML document to inline critical CSS from its stylesheets.
     25   * @param {string} html String containing a full HTML document to be parsed.
     26   * @returns {string} A modified copy of the provided HTML with critical CSS inlined.
     27   */
     28  process(html: string): Promise<string>;
     29  /**
     30   * Read the contents of a file from the specified filesystem or disk.
     31   * Override this method to customize how stylesheets are loaded.
     32   */
     33  readFile(filename: string): Promise<string> | string;
     34  /**
     35   * Given a stylesheet URL, returns the corresponding CSS asset.
     36   * Overriding this method requires doing your own URL normalization, so it's generally better to override `readFile()`.
     37   */
     38  getCssAsset(href: string): Promise<string | undefined> | string | undefined;
     39}
    3840
    39   export interface Logger {
    40     trace?: (message: string) => void;
    41     debug?: (message: string) => void;
    42     info?: (message: string) => void;
    43     warn?: (message: string) => void;
    44     error?: (message: string) => void;
    45   }
     41export interface Options {
     42  path?: string;
     43  publicPath?: string;
     44  external?: boolean;
     45  inlineThreshold?: number;
     46  minimumExternalSize?: number;
     47  pruneSource?: boolean;
     48  mergeStylesheets?: boolean;
     49  additionalStylesheets?: string[];
     50  preload?: 'body' | 'media' | 'swap' | 'js' | 'js-lazy';
     51  noscriptFallback?: boolean;
     52  inlineFonts?: boolean;
     53  preloadFonts?: boolean;
     54  fonts?: boolean;
     55  keyframes?: string;
     56  compress?: boolean;
     57  logLevel?: 'info' | 'warn' | 'error' | 'trace' | 'debug' | 'silent';
     58  reduceInlineStyles?: boolean;
     59  logger?: Logger;
     60}
    4661
    47   class Critters {
    48     constructor(options: Options);
    49     process(html: string): Promise<string>;
    50   }
    51 
    52   export default Critters;
     62export interface Logger {
     63  trace?: (message: string) => void;
     64  debug?: (message: string) => void;
     65  info?: (message: string) => void;
     66  warn?: (message: string) => void;
     67  error?: (message: string) => void;
    5368}
  • trip-planner-front/node_modules/critters/src/index.js

    r59329aa re29cc2e  
    3030/**
    3131 * The mechanism to use for lazy-loading stylesheets.
     32 *
    3233 * Note: <kbd>JS</kbd> indicates a strategy requiring JavaScript (falls back to `<noscript>` unless disabled).
    3334 *
     
    242243        .replace(/^\//, '');
    243244    }
     245
     246    // Ignore remote stylesheets
     247    if (/^https:\/\//.test(normalizedPath) || href.startsWith('//')) {
     248      return undefined;
     249    }
     250
    244251    const filename = path.resolve(outputPath, normalizedPath);
    245252
     
    484491            }
    485492          });
     493
    486494          // If there are no matched selectors, remove the rule:
    487           if (rule.selectors.length === 0) {
     495          if (!rule.selector) {
    488496            return false;
    489497          }
    490498
    491           if (rule.declarations) {
    492             for (let i = 0; i < rule.declarations.length; i++) {
    493               const decl = rule.declarations[i];
     499          if (rule.nodes) {
     500            for (let i = 0; i < rule.nodes.length; i++) {
     501              const decl = rule.nodes[i];
    494502
    495503              // detect used fonts
    496               if (decl.property && decl.property.match(/\bfont(-family)?\b/i)) {
     504              if (decl.prop && decl.prop.match(/\bfont(-family)?\b/i)) {
    497505                criticalFonts += ' ' + decl.value;
    498506              }
    499507
    500508              // detect used keyframes
    501               if (
    502                 decl.property === 'animation' ||
    503                 decl.property === 'animation-name'
    504               ) {
     509              if (decl.prop === 'animation' || decl.prop === 'animation-name') {
    505510                // @todo: parse animation declarations and extract only the name. for now we'll do a lazy match.
    506511                const names = decl.value.split(/\s+/);
     
    515520
    516521        // keep font rules, they're handled in the second pass:
    517         if (rule.type === 'font-face') return;
     522        if (rule.type === 'atrule' && rule.name === 'font-face') return;
    518523
    519524        // If there are no remaining rules, remove the whole rule:
    520         const rules = rule.rules && rule.rules.filter((rule) => !rule.$$remove);
     525        const rules = rule.nodes && rule.nodes.filter((rule) => !rule.$$remove);
    521526        return !rules || rules.length !== 0;
    522527      })
     
    547552
    548553      // prune @keyframes rules
    549       if (rule.type === 'keyframes') {
     554      if (rule.type === 'atrule' && rule.name === 'keyframes') {
    550555        if (keyframesMode === 'none') return false;
    551556        if (keyframesMode === 'all') return true;
    552         return criticalKeyframeNames.indexOf(rule.name) !== -1;
     557        return criticalKeyframeNames.indexOf(rule.params) !== -1;
    553558      }
    554559
    555560      // prune @font-face rules
    556       if (rule.type === 'font-face') {
     561      if (rule.type === 'atrule' && rule.name === 'font-face') {
    557562        let family, src;
    558         for (let i = 0; i < rule.declarations.length; i++) {
    559           const decl = rule.declarations[i];
    560           if (decl.property === 'src') {
     563        for (let i = 0; i < rule.nodes.length; i++) {
     564          const decl = rule.nodes[i];
     565          if (decl.prop === 'src') {
    561566            // @todo parse this properly and generate multiple preloads with type="font/woff2" etc
    562567            src = (decl.value.match(/url\s*\(\s*(['"]?)(.+?)\1\s*\)/) || [])[2];
    563           } else if (decl.property === 'font-family') {
     568          } else if (decl.prop === 'font-family') {
    564569            family = decl.value;
    565570          }
     
    590595    sheet = serializeStylesheet(ast, {
    591596      compress: this.options.compress !== false
    592     }).trim();
     597    });
    593598
    594599    // If all rules were removed, get rid of the style element entirely
Note: See TracChangeset for help on using the changeset viewer.