@jay-framework/compiler-jay-html 0.6.10 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { RenderFragment, Imports, Import, JayImportedType, isObjectType as isObjectType$1, isImportedType, JayUnknown, WithValidations, isArrayType as isArrayType$1, isAtomicType, isEnumType, hasRefs, GenerateTarget, JayComponentType, JayTypeAlias, mkRefsTree, mkRef, equalJayTypes, JayUnionType, JayHTMLType, getModeFileExtension, RuntimeMode, ImportsFor, nestRefs, mergeRefsTrees, JayObjectType, JayArrayType, JayEnumType, JAY_CONTRACT_EXTENSION, resolvePrimitiveType, SourceFileFormat } from "@jay-framework/compiler-shared";
1
+ import { RenderFragment, Imports, Import, JayImportedType, isObjectType as isObjectType$1, isImportedType, isRecursiveType, JayUnknown, WithValidations, isArrayType as isArrayType$1, isAtomicType, isPromiseType, isEnumType, hasRefs, GenerateTarget, JayComponentType, JayTypeAlias, mkRefsTree, mkRef, equalJayTypes, JayUnionType, JayHTMLType, getModeFileExtension, RuntimeMode, ImportsFor, nestRefs, JayErrorType, mergeRefsTrees, JayObjectType, JayArrayType, JayPromiseType, JAY_CONTRACT_EXTENSION, JayRecursiveType, JayEnumType, resolvePrimitiveType, SourceFileFormat } from "@jay-framework/compiler-shared";
2
2
  import path from "path";
3
3
  import fs from "fs/promises";
4
4
  import { analyzeExportedTypes } from "@jay-framework/compiler-analyze-exported-types";
@@ -6008,38 +6008,62 @@ function peg$parse(input, options) {
6008
6008
  }
6009
6009
  }, peg$c50 = function(cond) {
6010
6010
  return cond.map((_) => `${vars.currentVar} => ${_}`);
6011
- }, peg$c51 = function(not, head) {
6011
+ }, peg$c51 = "||", peg$c52 = peg$literalExpectation("||", false), peg$c53 = function(head, tail) {
6012
+ if (tail.length === 0)
6013
+ return head;
6014
+ return tail.reduce((acc, curr) => {
6015
+ const right = curr[3];
6016
+ return RenderFragment2.merge(
6017
+ acc.map((_) => `(${_})`),
6018
+ right.map((_) => `(${_})`),
6019
+ " || "
6020
+ );
6021
+ }, head);
6022
+ }, peg$c54 = "&&", peg$c55 = peg$literalExpectation("&&", false), peg$c56 = function(head, tail) {
6023
+ if (tail.length === 0)
6024
+ return head;
6025
+ return tail.reduce((acc, curr) => {
6026
+ const right = curr[3];
6027
+ return RenderFragment2.merge(
6028
+ acc.map((_) => `(${_})`),
6029
+ right.map((_) => `(${_})`),
6030
+ " && "
6031
+ );
6032
+ }, head);
6033
+ }, peg$c57 = function(cond) {
6034
+ return cond;
6035
+ }, peg$c58 = function(not, head) {
6012
6036
  return not ? head.render().map((_) => `!${_}`) : head.render();
6013
- }, peg$c52 = function(head, oper, val) {
6037
+ }, peg$c59 = function(head, oper, val) {
6014
6038
  if (oper.length === 2)
6015
6039
  oper = oper + "=";
6016
6040
  return head.render().map((_) => `${_} ${oper} ${head.resolvedType.name}.${val}`);
6017
- }, peg$c53 = ".", peg$c54 = peg$literalExpectation(".", false), peg$c55 = function() {
6041
+ }, peg$c60 = ".", peg$c61 = peg$literalExpectation(".", false), peg$c62 = function() {
6018
6042
  return vars.resolveAccessor(["."]);
6019
- }, peg$c56 = function(head, tail) {
6043
+ }, peg$c63 = function(head, tail) {
6020
6044
  let terms = [head, ...tail.map((_) => _[3])];
6021
6045
  let accessor = vars.resolveAccessor(terms);
6022
6046
  return accessor;
6023
- }, peg$c57 = peg$otherExpectation("integer"), peg$c58 = /^[0-9]/, peg$c59 = peg$classExpectation([["0", "9"]], false, false), peg$c60 = peg$otherExpectation("whitespace"), peg$c61 = /^[ \t\n\r]/, peg$c62 = peg$classExpectation([" ", " ", "\n", "\r"], false, false), peg$c63 = /^[^{} \t\n\r]/, peg$c64 = peg$classExpectation(["{", "}", " ", " ", "\n", "\r"], true, false), peg$c65 = function() {
6047
+ }, peg$c64 = peg$otherExpectation("integer"), peg$c65 = /^[0-9]/, peg$c66 = peg$classExpectation([["0", "9"]], false, false), peg$c67 = peg$otherExpectation("whitespace"), peg$c68 = /^[ \t\n\r]/, peg$c69 = peg$classExpectation([" ", " ", "\n", "\r"], false, false), peg$c70 = /^[^{} \t\n\r]/, peg$c71 = peg$classExpectation(["{", "}", " ", " ", "\n", "\r"], true, false), peg$c72 = function() {
6024
6048
  return text2();
6025
- }, peg$c66 = "!", peg$c67 = peg$literalExpectation("!", false), peg$c68 = "===", peg$c69 = peg$literalExpectation("===", false), peg$c70 = "!==", peg$c71 = peg$literalExpectation("!==", false), peg$c72 = "==", peg$c73 = peg$literalExpectation("==", false), peg$c74 = "!=", peg$c75 = peg$literalExpectation("!=", false), peg$c76 = function(name) {
6049
+ }, peg$c73 = "!", peg$c74 = peg$literalExpectation("!", false), peg$c75 = "===", peg$c76 = peg$literalExpectation("===", false), peg$c77 = "!==", peg$c78 = peg$literalExpectation("!==", false), peg$c79 = "==", peg$c80 = peg$literalExpectation("==", false), peg$c81 = "!=", peg$c82 = peg$literalExpectation("!=", false), peg$c83 = function(name) {
6026
6050
  return text2();
6027
- }, peg$c77 = peg$otherExpectation("identifier"), peg$c78 = function(head, tail) {
6051
+ }, peg$c84 = peg$otherExpectation("identifier"), peg$c85 = function(head, tail) {
6028
6052
  return {
6029
6053
  type: "Identifier",
6030
6054
  name: head + tail.join("")
6031
6055
  };
6032
- }, peg$c79 = "$", peg$c80 = peg$literalExpectation("$", false), peg$c81 = "_", peg$c82 = peg$literalExpectation("_", false), peg$c83 = "\\", peg$c84 = peg$literalExpectation("\\", false), peg$c85 = function(sequence) {
6056
+ }, peg$c86 = "$", peg$c87 = peg$literalExpectation("$", false), peg$c88 = "_", peg$c89 = peg$literalExpectation("_", false), peg$c90 = "\\", peg$c91 = peg$literalExpectation("\\", false), peg$c92 = function(sequence) {
6033
6057
  return sequence;
6034
- }, peg$c86 = "‌", peg$c87 = peg$literalExpectation("‌", false), peg$c88 = "‍", peg$c89 = peg$literalExpectation("‍", false), peg$c90 = "u", peg$c91 = peg$literalExpectation("u", false), peg$c92 = function(digits) {
6058
+ }, peg$c93 = "‌", peg$c94 = peg$literalExpectation("‌", false), peg$c95 = "‍", peg$c96 = peg$literalExpectation("‍", false), peg$c97 = "u", peg$c98 = peg$literalExpectation("u", false), peg$c99 = function(digits) {
6035
6059
  return String.fromCharCode(parseInt(digits, 16));
6036
- }, peg$c93 = function() {
6060
+ }, peg$c100 = function() {
6037
6061
  return { type: "Literal", value: null };
6038
- }, peg$c94 = function() {
6062
+ }, peg$c101 = function() {
6039
6063
  return { type: "Literal", value: true };
6040
- }, peg$c95 = function() {
6064
+ }, peg$c102 = function() {
6041
6065
  return { type: "Literal", value: false };
6042
- }, peg$c96 = /^[A-Z\xC0-\xD6\xD8-\xDE\u0100\u0102\u0104\u0106\u0108\u010A\u010C\u010E\u0110\u0112\u0114\u0116\u0118\u011A\u011C\u011E\u0120\u0122\u0124\u0126\u0128\u012A\u012C\u012E\u0130\u0132\u0134\u0136\u0139\u013B\u013D\u013F\u0141\u0143\u0145\u0147\u014A\u014C\u014E\u0150\u0152\u0154\u0156\u0158\u015A\u015C\u015E\u0160\u0162\u0164\u0166\u0168\u016A\u016C\u016E\u0170\u0172\u0174\u0176\u0178-\u0179\u017B\u017D\u0181-\u0182\u0184\u0186-\u0187\u0189-\u018B\u018E-\u0191\u0193-\u0194\u0196-\u0198\u019C-\u019D\u019F-\u01A0\u01A2\u01A4\u01A6-\u01A7\u01A9\u01AC\u01AE-\u01AF\u01B1-\u01B3\u01B5\u01B7-\u01B8\u01BC\u01C4\u01C7\u01CA\u01CD\u01CF\u01D1\u01D3\u01D5\u01D7\u01D9\u01DB\u01DE\u01E0\u01E2\u01E4\u01E6\u01E8\u01EA\u01EC\u01EE\u01F1\u01F4\u01F6-\u01F8\u01FA\u01FC\u01FE\u0200\u0202\u0204\u0206\u0208\u020A\u020C\u020E\u0210\u0212\u0214\u0216\u0218\u021A\u021C\u021E\u0220\u0222\u0224\u0226\u0228\u022A\u022C\u022E\u0230\u0232\u023A-\u023B\u023D-\u023E\u0241\u0243-\u0246\u0248\u024A\u024C\u024E\u0370\u0372\u0376\u037F\u0386\u0388-\u038A\u038C\u038E-\u038F\u0391-\u03A1\u03A3-\u03AB\u03CF\u03D2-\u03D4\u03D8\u03DA\u03DC\u03DE\u03E0\u03E2\u03E4\u03E6\u03E8\u03EA\u03EC\u03EE\u03F4\u03F7\u03F9-\u03FA\u03FD-\u042F\u0460\u0462\u0464\u0466\u0468\u046A\u046C\u046E\u0470\u0472\u0474\u0476\u0478\u047A\u047C\u047E\u0480\u048A\u048C\u048E\u0490\u0492\u0494\u0496\u0498\u049A\u049C\u049E\u04A0\u04A2\u04A4\u04A6\u04A8\u04AA\u04AC\u04AE\u04B0\u04B2\u04B4\u04B6\u04B8\u04BA\u04BC\u04BE\u04C0-\u04C1\u04C3\u04C5\u04C7\u04C9\u04CB\u04CD\u04D0\u04D2\u04D4\u04D6\u04D8\u04DA\u04DC\u04DE\u04E0\u04E2\u04E4\u04E6\u04E8\u04EA\u04EC\u04EE\u04F0\u04F2\u04F4\u04F6\u04F8\u04FA\u04FC\u04FE\u0500\u0502\u0504\u0506\u0508\u050A\u050C\u050E\u0510\u0512\u0514\u0516\u0518\u051A\u051C\u051E\u0520\u0522\u0524\u0526\u0528\u052A\u052C\u052E\u0531-\u0556\u10A0-\u10C5\u10C7\u10CD\u13A0-\u13F5\u1C90-\u1CBA\u1CBD-\u1CBF\u1E00\u1E02\u1E04\u1E06\u1E08\u1E0A\u1E0C\u1E0E\u1E10\u1E12\u1E14\u1E16\u1E18\u1E1A\u1E1C\u1E1E\u1E20\u1E22\u1E24\u1E26\u1E28\u1E2A\u1E2C\u1E2E\u1E30\u1E32\u1E34\u1E36\u1E38\u1E3A\u1E3C\u1E3E\u1E40\u1E42\u1E44\u1E46\u1E48\u1E4A\u1E4C\u1E4E\u1E50\u1E52\u1E54\u1E56\u1E58\u1E5A\u1E5C\u1E5E\u1E60\u1E62\u1E64\u1E66\u1E68\u1E6A\u1E6C\u1E6E\u1E70\u1E72\u1E74\u1E76\u1E78\u1E7A\u1E7C\u1E7E\u1E80\u1E82\u1E84\u1E86\u1E88\u1E8A\u1E8C\u1E8E\u1E90\u1E92\u1E94\u1E9E\u1EA0\u1EA2\u1EA4\u1EA6\u1EA8\u1EAA\u1EAC\u1EAE\u1EB0\u1EB2\u1EB4\u1EB6\u1EB8\u1EBA\u1EBC\u1EBE\u1EC0\u1EC2\u1EC4\u1EC6\u1EC8\u1ECA\u1ECC\u1ECE\u1ED0\u1ED2\u1ED4\u1ED6\u1ED8\u1EDA\u1EDC\u1EDE\u1EE0\u1EE2\u1EE4\u1EE6\u1EE8\u1EEA\u1EEC\u1EEE\u1EF0\u1EF2\u1EF4\u1EF6\u1EF8\u1EFA\u1EFC\u1EFE\u1F08-\u1F0F\u1F18-\u1F1D\u1F28-\u1F2F\u1F38-\u1F3F\u1F48-\u1F4D\u1F59\u1F5B\u1F5D\u1F5F\u1F68-\u1F6F\u1FB8-\u1FBB\u1FC8-\u1FCB\u1FD8-\u1FDB\u1FE8-\u1FEC\u1FF8-\u1FFB\u2102\u2107\u210B-\u210D\u2110-\u2112\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u2130-\u2133\u213E-\u213F\u2145\u2183\u2C00-\u2C2E\u2C60\u2C62-\u2C64\u2C67\u2C69\u2C6B\u2C6D-\u2C70\u2C72\u2C75\u2C7E-\u2C80\u2C82\u2C84\u2C86\u2C88\u2C8A\u2C8C\u2C8E\u2C90\u2C92\u2C94\u2C96\u2C98\u2C9A\u2C9C\u2C9E\u2CA0\u2CA2\u2CA4\u2CA6\u2CA8\u2CAA\u2CAC\u2CAE\u2CB0\u2CB2\u2CB4\u2CB6\u2CB8\u2CBA\u2CBC\u2CBE\u2CC0\u2CC2\u2CC4\u2CC6\u2CC8\u2CCA\u2CCC\u2CCE\u2CD0\u2CD2\u2CD4\u2CD6\u2CD8\u2CDA\u2CDC\u2CDE\u2CE0\u2CE2\u2CEB\u2CED\u2CF2\uA640\uA642\uA644\uA646\uA648\uA64A\uA64C\uA64E\uA650\uA652\uA654\uA656\uA658\uA65A\uA65C\uA65E\uA660\uA662\uA664\uA666\uA668\uA66A\uA66C\uA680\uA682\uA684\uA686\uA688\uA68A\uA68C\uA68E\uA690\uA692\uA694\uA696\uA698\uA69A\uA722\uA724\uA726\uA728\uA72A\uA72C\uA72E\uA732\uA734\uA736\uA738\uA73A\uA73C\uA73E\uA740\uA742\uA744\uA746\uA748\uA74A\uA74C\uA74E\uA750\uA752\uA754\uA756\uA758\uA75A\uA75C\uA75E\uA760\uA762\uA764\uA766\uA768\uA76A\uA76C\uA76E\uA779\uA77B\uA77D-\uA77E\uA780\uA782\uA784\uA786\uA78B\uA78D\uA790\uA792\uA796\uA798\uA79A\uA79C\uA79E\uA7A0\uA7A2\uA7A4\uA7A6\uA7A8\uA7AA-\uA7AE\uA7B0-\uA7B4\uA7B6\uA7B8\uFF21-\uFF3A]/, peg$c97 = peg$classExpectation([["A", "Z"], ["À", "Ö"], ["Ø", "Þ"], "Ā", "Ă", "Ą", "Ć", "Ĉ", "Ċ", "Č", "Ď", "Đ", "Ē", "Ĕ", "Ė", "Ę", "Ě", "Ĝ", "Ğ", "Ġ", "Ģ", "Ĥ", "Ħ", "Ĩ", "Ī", "Ĭ", "Į", "İ", "IJ", "Ĵ", "Ķ", "Ĺ", "Ļ", "Ľ", "Ŀ", "Ł", "Ń", "Ņ", "Ň", "Ŋ", "Ō", "Ŏ", "Ő", "Œ", "Ŕ", "Ŗ", "Ř", "Ś", "Ŝ", "Ş", "Š", "Ţ", "Ť", "Ŧ", "Ũ", "Ū", "Ŭ", "Ů", "Ű", "Ų", "Ŵ", "Ŷ", ["Ÿ", "Ź"], "Ż", "Ž", ["Ɓ", "Ƃ"], "Ƅ", ["Ɔ", "Ƈ"], ["Ɖ", "Ƌ"], ["Ǝ", "Ƒ"], ["Ɠ", "Ɣ"], ["Ɩ", "Ƙ"], ["Ɯ", "Ɲ"], ["Ɵ", "Ơ"], "Ƣ", "Ƥ", ["Ʀ", "Ƨ"], "Ʃ", "Ƭ", ["Ʈ", "Ư"], ["Ʊ", "Ƴ"], "Ƶ", ["Ʒ", "Ƹ"], "Ƽ", "DŽ", "LJ", "NJ", "Ǎ", "Ǐ", "Ǒ", "Ǔ", "Ǖ", "Ǘ", "Ǚ", "Ǜ", "Ǟ", "Ǡ", "Ǣ", "Ǥ", "Ǧ", "Ǩ", "Ǫ", "Ǭ", "Ǯ", "DZ", "Ǵ", ["Ƕ", "Ǹ"], "Ǻ", "Ǽ", "Ǿ", "Ȁ", "Ȃ", "Ȅ", "Ȇ", "Ȉ", "Ȋ", "Ȍ", "Ȏ", "Ȑ", "Ȓ", "Ȕ", "Ȗ", "Ș", "Ț", "Ȝ", "Ȟ", "Ƞ", "Ȣ", "Ȥ", "Ȧ", "Ȩ", "Ȫ", "Ȭ", "Ȯ", "Ȱ", "Ȳ", ["Ⱥ", "Ȼ"], ["Ƚ", "Ⱦ"], "Ɂ", ["Ƀ", "Ɇ"], "Ɉ", "Ɋ", "Ɍ", "Ɏ", "Ͱ", "Ͳ", "Ͷ", "Ϳ", "Ά", ["Έ", "Ί"], "Ό", ["Ύ", "Ώ"], ["Α", "Ρ"], ["Σ", "Ϋ"], "Ϗ", ["ϒ", "ϔ"], "Ϙ", "Ϛ", "Ϝ", "Ϟ", "Ϡ", "Ϣ", "Ϥ", "Ϧ", "Ϩ", "Ϫ", "Ϭ", "Ϯ", "ϴ", "Ϸ", ["Ϲ", "Ϻ"], ["Ͻ", "Я"], "Ѡ", "Ѣ", "Ѥ", "Ѧ", "Ѩ", "Ѫ", "Ѭ", "Ѯ", "Ѱ", "Ѳ", "Ѵ", "Ѷ", "Ѹ", "Ѻ", "Ѽ", "Ѿ", "Ҁ", "Ҋ", "Ҍ", "Ҏ", "Ґ", "Ғ", "Ҕ", "Җ", "Ҙ", "Қ", "Ҝ", "Ҟ", "Ҡ", "Ң", "Ҥ", "Ҧ", "Ҩ", "Ҫ", "Ҭ", "Ү", "Ұ", "Ҳ", "Ҵ", "Ҷ", "Ҹ", "Һ", "Ҽ", "Ҿ", ["Ӏ", "Ӂ"], "Ӄ", "Ӆ", "Ӈ", "Ӊ", "Ӌ", "Ӎ", "Ӑ", "Ӓ", "Ӕ", "Ӗ", "Ә", "Ӛ", "Ӝ", "Ӟ", "Ӡ", "Ӣ", "Ӥ", "Ӧ", "Ө", "Ӫ", "Ӭ", "Ӯ", "Ӱ", "Ӳ", "Ӵ", "Ӷ", "Ӹ", "Ӻ", "Ӽ", "Ӿ", "Ԁ", "Ԃ", "Ԅ", "Ԇ", "Ԉ", "Ԋ", "Ԍ", "Ԏ", "Ԑ", "Ԓ", "Ԕ", "Ԗ", "Ԙ", "Ԛ", "Ԝ", "Ԟ", "Ԡ", "Ԣ", "Ԥ", "Ԧ", "Ԩ", "Ԫ", "Ԭ", "Ԯ", ["Ա", "Ֆ"], ["Ⴀ", "Ⴥ"], "Ⴧ", "Ⴭ", ["Ꭰ", "Ᏽ"], ["Ა", "Ჺ"], ["Ჽ", "Ჿ"], "Ḁ", "Ḃ", "Ḅ", "Ḇ", "Ḉ", "Ḋ", "Ḍ", "Ḏ", "Ḑ", "Ḓ", "Ḕ", "Ḗ", "Ḙ", "Ḛ", "Ḝ", "Ḟ", "Ḡ", "Ḣ", "Ḥ", "Ḧ", "Ḩ", "Ḫ", "Ḭ", "Ḯ", "Ḱ", "Ḳ", "Ḵ", "Ḷ", "Ḹ", "Ḻ", "Ḽ", "Ḿ", "Ṁ", "Ṃ", "Ṅ", "Ṇ", "Ṉ", "Ṋ", "Ṍ", "Ṏ", "Ṑ", "Ṓ", "Ṕ", "Ṗ", "Ṙ", "Ṛ", "Ṝ", "Ṟ", "Ṡ", "Ṣ", "Ṥ", "Ṧ", "Ṩ", "Ṫ", "Ṭ", "Ṯ", "Ṱ", "Ṳ", "Ṵ", "Ṷ", "Ṹ", "Ṻ", "Ṽ", "Ṿ", "Ẁ", "Ẃ", "Ẅ", "Ẇ", "Ẉ", "Ẋ", "Ẍ", "Ẏ", "Ẑ", "Ẓ", "Ẕ", "ẞ", "Ạ", "Ả", "Ấ", "Ầ", "Ẩ", "Ẫ", "Ậ", "Ắ", "Ằ", "Ẳ", "Ẵ", "Ặ", "Ẹ", "Ẻ", "Ẽ", "Ế", "Ề", "Ể", "Ễ", "Ệ", "Ỉ", "Ị", "Ọ", "Ỏ", "Ố", "Ồ", "Ổ", "Ỗ", "Ộ", "Ớ", "Ờ", "Ở", "Ỡ", "Ợ", "Ụ", "Ủ", "Ứ", "Ừ", "Ử", "Ữ", "Ự", "Ỳ", "Ỵ", "Ỷ", "Ỹ", "Ỻ", "Ỽ", "Ỿ", ["Ἀ", "Ἇ"], ["Ἐ", "Ἕ"], ["Ἠ", "Ἧ"], ["Ἰ", "Ἷ"], ["Ὀ", "Ὅ"], "Ὑ", "Ὓ", "Ὕ", "Ὗ", ["Ὠ", "Ὧ"], ["Ᾰ", "Ά"], ["Ὲ", "Ή"], ["Ῐ", "Ί"], ["Ῠ", "Ῥ"], ["Ὸ", "Ώ"], "ℂ", "ℇ", ["ℋ", "ℍ"], ["ℐ", "ℒ"], "ℕ", ["ℙ", "ℝ"], "ℤ", "Ω", "ℨ", ["K", "ℭ"], ["ℰ", "ℳ"], ["ℾ", "ℿ"], "ⅅ", "Ↄ", ["Ⰰ", "Ⱞ"], "Ⱡ", ["Ɫ", "Ɽ"], "Ⱨ", "Ⱪ", "Ⱬ", ["Ɑ", "Ɒ"], "Ⱳ", "Ⱶ", ["Ȿ", "Ⲁ"], "Ⲃ", "Ⲅ", "Ⲇ", "Ⲉ", "Ⲋ", "Ⲍ", "Ⲏ", "Ⲑ", "Ⲓ", "Ⲕ", "Ⲗ", "Ⲙ", "Ⲛ", "Ⲝ", "Ⲟ", "Ⲡ", "Ⲣ", "Ⲥ", "Ⲧ", "Ⲩ", "Ⲫ", "Ⲭ", "Ⲯ", "Ⲱ", "Ⲳ", "Ⲵ", "Ⲷ", "Ⲹ", "Ⲻ", "Ⲽ", "Ⲿ", "Ⳁ", "Ⳃ", "Ⳅ", "Ⳇ", "Ⳉ", "Ⳋ", "Ⳍ", "Ⳏ", "Ⳑ", "Ⳓ", "Ⳕ", "Ⳗ", "Ⳙ", "Ⳛ", "Ⳝ", "Ⳟ", "Ⳡ", "Ⳣ", "Ⳬ", "Ⳮ", "Ⳳ", "Ꙁ", "Ꙃ", "Ꙅ", "Ꙇ", "Ꙉ", "Ꙋ", "Ꙍ", "Ꙏ", "Ꙑ", "Ꙓ", "Ꙕ", "Ꙗ", "Ꙙ", "Ꙛ", "Ꙝ", "Ꙟ", "Ꙡ", "Ꙣ", "Ꙥ", "Ꙧ", "Ꙩ", "Ꙫ", "Ꙭ", "Ꚁ", "Ꚃ", "Ꚅ", "Ꚇ", "Ꚉ", "Ꚋ", "Ꚍ", "Ꚏ", "Ꚑ", "Ꚓ", "Ꚕ", "Ꚗ", "Ꚙ", "Ꚛ", "Ꜣ", "Ꜥ", "Ꜧ", "Ꜩ", "Ꜫ", "Ꜭ", "Ꜯ", "Ꜳ", "Ꜵ", "Ꜷ", "Ꜹ", "Ꜻ", "Ꜽ", "Ꜿ", "Ꝁ", "Ꝃ", "Ꝅ", "Ꝇ", "Ꝉ", "Ꝋ", "Ꝍ", "Ꝏ", "Ꝑ", "Ꝓ", "Ꝕ", "Ꝗ", "Ꝙ", "Ꝛ", "Ꝝ", "Ꝟ", "Ꝡ", "Ꝣ", "Ꝥ", "Ꝧ", "Ꝩ", "Ꝫ", "Ꝭ", "Ꝯ", "Ꝺ", "Ꝼ", ["Ᵹ", "Ꝿ"], "Ꞁ", "Ꞃ", "Ꞅ", "Ꞇ", "Ꞌ", "Ɥ", "Ꞑ", "Ꞓ", "Ꞗ", "Ꞙ", "Ꞛ", "Ꞝ", "Ꞟ", "Ꞡ", "Ꞣ", "Ꞥ", "Ꞧ", "Ꞩ", ["Ɦ", "Ɪ"], ["Ʞ", "Ꞵ"], "Ꞷ", "Ꞹ", ["A", "Z"]], false, false), peg$c98 = /^[a-z\xB5\xDF-\xF6\xF8-\xFF\u0101\u0103\u0105\u0107\u0109\u010B\u010D\u010F\u0111\u0113\u0115\u0117\u0119\u011B\u011D\u011F\u0121\u0123\u0125\u0127\u0129\u012B\u012D\u012F\u0131\u0133\u0135\u0137-\u0138\u013A\u013C\u013E\u0140\u0142\u0144\u0146\u0148-\u0149\u014B\u014D\u014F\u0151\u0153\u0155\u0157\u0159\u015B\u015D\u015F\u0161\u0163\u0165\u0167\u0169\u016B\u016D\u016F\u0171\u0173\u0175\u0177\u017A\u017C\u017E-\u0180\u0183\u0185\u0188\u018C-\u018D\u0192\u0195\u0199-\u019B\u019E\u01A1\u01A3\u01A5\u01A8\u01AA-\u01AB\u01AD\u01B0\u01B4\u01B6\u01B9-\u01BA\u01BD-\u01BF\u01C6\u01C9\u01CC\u01CE\u01D0\u01D2\u01D4\u01D6\u01D8\u01DA\u01DC-\u01DD\u01DF\u01E1\u01E3\u01E5\u01E7\u01E9\u01EB\u01ED\u01EF-\u01F0\u01F3\u01F5\u01F9\u01FB\u01FD\u01FF\u0201\u0203\u0205\u0207\u0209\u020B\u020D\u020F\u0211\u0213\u0215\u0217\u0219\u021B\u021D\u021F\u0221\u0223\u0225\u0227\u0229\u022B\u022D\u022F\u0231\u0233-\u0239\u023C\u023F-\u0240\u0242\u0247\u0249\u024B\u024D\u024F-\u0293\u0295-\u02AF\u0371\u0373\u0377\u037B-\u037D\u0390\u03AC-\u03CE\u03D0-\u03D1\u03D5-\u03D7\u03D9\u03DB\u03DD\u03DF\u03E1\u03E3\u03E5\u03E7\u03E9\u03EB\u03ED\u03EF-\u03F3\u03F5\u03F8\u03FB-\u03FC\u0430-\u045F\u0461\u0463\u0465\u0467\u0469\u046B\u046D\u046F\u0471\u0473\u0475\u0477\u0479\u047B\u047D\u047F\u0481\u048B\u048D\u048F\u0491\u0493\u0495\u0497\u0499\u049B\u049D\u049F\u04A1\u04A3\u04A5\u04A7\u04A9\u04AB\u04AD\u04AF\u04B1\u04B3\u04B5\u04B7\u04B9\u04BB\u04BD\u04BF\u04C2\u04C4\u04C6\u04C8\u04CA\u04CC\u04CE-\u04CF\u04D1\u04D3\u04D5\u04D7\u04D9\u04DB\u04DD\u04DF\u04E1\u04E3\u04E5\u04E7\u04E9\u04EB\u04ED\u04EF\u04F1\u04F3\u04F5\u04F7\u04F9\u04FB\u04FD\u04FF\u0501\u0503\u0505\u0507\u0509\u050B\u050D\u050F\u0511\u0513\u0515\u0517\u0519\u051B\u051D\u051F\u0521\u0523\u0525\u0527\u0529\u052B\u052D\u052F\u0560-\u0588\u10D0-\u10FA\u10FD-\u10FF\u13F8-\u13FD\u1C80-\u1C88\u1D00-\u1D2B\u1D6B-\u1D77\u1D79-\u1D9A\u1E01\u1E03\u1E05\u1E07\u1E09\u1E0B\u1E0D\u1E0F\u1E11\u1E13\u1E15\u1E17\u1E19\u1E1B\u1E1D\u1E1F\u1E21\u1E23\u1E25\u1E27\u1E29\u1E2B\u1E2D\u1E2F\u1E31\u1E33\u1E35\u1E37\u1E39\u1E3B\u1E3D\u1E3F\u1E41\u1E43\u1E45\u1E47\u1E49\u1E4B\u1E4D\u1E4F\u1E51\u1E53\u1E55\u1E57\u1E59\u1E5B\u1E5D\u1E5F\u1E61\u1E63\u1E65\u1E67\u1E69\u1E6B\u1E6D\u1E6F\u1E71\u1E73\u1E75\u1E77\u1E79\u1E7B\u1E7D\u1E7F\u1E81\u1E83\u1E85\u1E87\u1E89\u1E8B\u1E8D\u1E8F\u1E91\u1E93\u1E95-\u1E9D\u1E9F\u1EA1\u1EA3\u1EA5\u1EA7\u1EA9\u1EAB\u1EAD\u1EAF\u1EB1\u1EB3\u1EB5\u1EB7\u1EB9\u1EBB\u1EBD\u1EBF\u1EC1\u1EC3\u1EC5\u1EC7\u1EC9\u1ECB\u1ECD\u1ECF\u1ED1\u1ED3\u1ED5\u1ED7\u1ED9\u1EDB\u1EDD\u1EDF\u1EE1\u1EE3\u1EE5\u1EE7\u1EE9\u1EEB\u1EED\u1EEF\u1EF1\u1EF3\u1EF5\u1EF7\u1EF9\u1EFB\u1EFD\u1EFF-\u1F07\u1F10-\u1F15\u1F20-\u1F27\u1F30-\u1F37\u1F40-\u1F45\u1F50-\u1F57\u1F60-\u1F67\u1F70-\u1F7D\u1F80-\u1F87\u1F90-\u1F97\u1FA0-\u1FA7\u1FB0-\u1FB4\u1FB6-\u1FB7\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FC7\u1FD0-\u1FD3\u1FD6-\u1FD7\u1FE0-\u1FE7\u1FF2-\u1FF4\u1FF6-\u1FF7\u210A\u210E-\u210F\u2113\u212F\u2134\u2139\u213C-\u213D\u2146-\u2149\u214E\u2184\u2C30-\u2C5E\u2C61\u2C65-\u2C66\u2C68\u2C6A\u2C6C\u2C71\u2C73-\u2C74\u2C76-\u2C7B\u2C81\u2C83\u2C85\u2C87\u2C89\u2C8B\u2C8D\u2C8F\u2C91\u2C93\u2C95\u2C97\u2C99\u2C9B\u2C9D\u2C9F\u2CA1\u2CA3\u2CA5\u2CA7\u2CA9\u2CAB\u2CAD\u2CAF\u2CB1\u2CB3\u2CB5\u2CB7\u2CB9\u2CBB\u2CBD\u2CBF\u2CC1\u2CC3\u2CC5\u2CC7\u2CC9\u2CCB\u2CCD\u2CCF\u2CD1\u2CD3\u2CD5\u2CD7\u2CD9\u2CDB\u2CDD\u2CDF\u2CE1\u2CE3-\u2CE4\u2CEC\u2CEE\u2CF3\u2D00-\u2D25\u2D27\u2D2D\uA641\uA643\uA645\uA647\uA649\uA64B\uA64D\uA64F\uA651\uA653\uA655\uA657\uA659\uA65B\uA65D\uA65F\uA661\uA663\uA665\uA667\uA669\uA66B\uA66D\uA681\uA683\uA685\uA687\uA689\uA68B\uA68D\uA68F\uA691\uA693\uA695\uA697\uA699\uA69B\uA723\uA725\uA727\uA729\uA72B\uA72D\uA72F-\uA731\uA733\uA735\uA737\uA739\uA73B\uA73D\uA73F\uA741\uA743\uA745\uA747\uA749\uA74B\uA74D\uA74F\uA751\uA753\uA755\uA757\uA759\uA75B\uA75D\uA75F\uA761\uA763\uA765\uA767\uA769\uA76B\uA76D\uA76F\uA771-\uA778\uA77A\uA77C\uA77F\uA781\uA783\uA785\uA787\uA78C\uA78E\uA791\uA793-\uA795\uA797\uA799\uA79B\uA79D\uA79F\uA7A1\uA7A3\uA7A5\uA7A7\uA7A9\uA7AF\uA7B5\uA7B7\uA7B9\uA7FA\uAB30-\uAB5A\uAB60-\uAB65\uAB70-\uABBF\uFB00-\uFB06\uFB13-\uFB17\uFF41-\uFF5A]/, peg$c99 = peg$classExpectation([["a", "z"], "µ", ["ß", "ö"], ["ø", "ÿ"], "ā", "ă", "ą", "ć", "ĉ", "ċ", "č", "ď", "đ", "ē", "ĕ", "ė", "ę", "ě", "ĝ", "ğ", "ġ", "ģ", "ĥ", "ħ", "ĩ", "ī", "ĭ", "į", "ı", "ij", "ĵ", ["ķ", "ĸ"], "ĺ", "ļ", "ľ", "ŀ", "ł", "ń", "ņ", ["ň", "ʼn"], "ŋ", "ō", "ŏ", "ő", "œ", "ŕ", "ŗ", "ř", "ś", "ŝ", "ş", "š", "ţ", "ť", "ŧ", "ũ", "ū", "ŭ", "ů", "ű", "ų", "ŵ", "ŷ", "ź", "ż", ["ž", "ƀ"], "ƃ", "ƅ", "ƈ", ["ƌ", "ƍ"], "ƒ", "ƕ", ["ƙ", "ƛ"], "ƞ", "ơ", "ƣ", "ƥ", "ƨ", ["ƪ", "ƫ"], "ƭ", "ư", "ƴ", "ƶ", ["ƹ", "ƺ"], ["ƽ", "ƿ"], "dž", "lj", "nj", "ǎ", "ǐ", "ǒ", "ǔ", "ǖ", "ǘ", "ǚ", ["ǜ", "ǝ"], "ǟ", "ǡ", "ǣ", "ǥ", "ǧ", "ǩ", "ǫ", "ǭ", ["ǯ", "ǰ"], "dz", "ǵ", "ǹ", "ǻ", "ǽ", "ǿ", "ȁ", "ȃ", "ȅ", "ȇ", "ȉ", "ȋ", "ȍ", "ȏ", "ȑ", "ȓ", "ȕ", "ȗ", "ș", "ț", "ȝ", "ȟ", "ȡ", "ȣ", "ȥ", "ȧ", "ȩ", "ȫ", "ȭ", "ȯ", "ȱ", ["ȳ", "ȹ"], "ȼ", ["ȿ", "ɀ"], "ɂ", "ɇ", "ɉ", "ɋ", "ɍ", ["ɏ", "ʓ"], ["ʕ", "ʯ"], "ͱ", "ͳ", "ͷ", ["ͻ", "ͽ"], "ΐ", ["ά", "ώ"], ["ϐ", "ϑ"], ["ϕ", "ϗ"], "ϙ", "ϛ", "ϝ", "ϟ", "ϡ", "ϣ", "ϥ", "ϧ", "ϩ", "ϫ", "ϭ", ["ϯ", "ϳ"], "ϵ", "ϸ", ["ϻ", "ϼ"], ["а", "џ"], "ѡ", "ѣ", "ѥ", "ѧ", "ѩ", "ѫ", "ѭ", "ѯ", "ѱ", "ѳ", "ѵ", "ѷ", "ѹ", "ѻ", "ѽ", "ѿ", "ҁ", "ҋ", "ҍ", "ҏ", "ґ", "ғ", "ҕ", "җ", "ҙ", "қ", "ҝ", "ҟ", "ҡ", "ң", "ҥ", "ҧ", "ҩ", "ҫ", "ҭ", "ү", "ұ", "ҳ", "ҵ", "ҷ", "ҹ", "һ", "ҽ", "ҿ", "ӂ", "ӄ", "ӆ", "ӈ", "ӊ", "ӌ", ["ӎ", "ӏ"], "ӑ", "ӓ", "ӕ", "ӗ", "ә", "ӛ", "ӝ", "ӟ", "ӡ", "ӣ", "ӥ", "ӧ", "ө", "ӫ", "ӭ", "ӯ", "ӱ", "ӳ", "ӵ", "ӷ", "ӹ", "ӻ", "ӽ", "ӿ", "ԁ", "ԃ", "ԅ", "ԇ", "ԉ", "ԋ", "ԍ", "ԏ", "ԑ", "ԓ", "ԕ", "ԗ", "ԙ", "ԛ", "ԝ", "ԟ", "ԡ", "ԣ", "ԥ", "ԧ", "ԩ", "ԫ", "ԭ", "ԯ", ["ՠ", "ֈ"], ["ა", "ჺ"], ["ჽ", "ჿ"], ["ᏸ", "ᏽ"], ["ᲀ", "ᲈ"], ["ᴀ", "ᴫ"], ["ᵫ", "ᵷ"], ["ᵹ", "ᶚ"], "ḁ", "ḃ", "ḅ", "ḇ", "ḉ", "ḋ", "ḍ", "ḏ", "ḑ", "ḓ", "ḕ", "ḗ", "ḙ", "ḛ", "ḝ", "ḟ", "ḡ", "ḣ", "ḥ", "ḧ", "ḩ", "ḫ", "ḭ", "ḯ", "ḱ", "ḳ", "ḵ", "ḷ", "ḹ", "ḻ", "ḽ", "ḿ", "ṁ", "ṃ", "ṅ", "ṇ", "ṉ", "ṋ", "ṍ", "ṏ", "ṑ", "ṓ", "ṕ", "ṗ", "ṙ", "ṛ", "ṝ", "ṟ", "ṡ", "ṣ", "ṥ", "ṧ", "ṩ", "ṫ", "ṭ", "ṯ", "ṱ", "ṳ", "ṵ", "ṷ", "ṹ", "ṻ", "ṽ", "ṿ", "ẁ", "ẃ", "ẅ", "ẇ", "ẉ", "ẋ", "ẍ", "ẏ", "ẑ", "ẓ", ["ẕ", "ẝ"], "ẟ", "ạ", "ả", "ấ", "ầ", "ẩ", "ẫ", "ậ", "ắ", "ằ", "ẳ", "ẵ", "ặ", "ẹ", "ẻ", "ẽ", "ế", "ề", "ể", "ễ", "ệ", "ỉ", "ị", "ọ", "ỏ", "ố", "ồ", "ổ", "ỗ", "ộ", "ớ", "ờ", "ở", "ỡ", "ợ", "ụ", "ủ", "ứ", "ừ", "ử", "ữ", "ự", "ỳ", "ỵ", "ỷ", "ỹ", "ỻ", "ỽ", ["ỿ", "ἇ"], ["ἐ", "ἕ"], ["ἠ", "ἧ"], ["ἰ", "ἷ"], ["ὀ", "ὅ"], ["ὐ", "ὗ"], ["ὠ", "ὧ"], ["ὰ", "ώ"], ["ᾀ", "ᾇ"], ["ᾐ", "ᾗ"], ["ᾠ", "ᾧ"], ["ᾰ", "ᾴ"], ["ᾶ", "ᾷ"], "ι", ["ῂ", "ῄ"], ["ῆ", "ῇ"], ["ῐ", "ΐ"], ["ῖ", "ῗ"], ["ῠ", "ῧ"], ["ῲ", "ῴ"], ["ῶ", "ῷ"], "ℊ", ["ℎ", "ℏ"], "ℓ", "ℯ", "ℴ", "ℹ", ["ℼ", "ℽ"], ["ⅆ", "ⅉ"], "ⅎ", "ↄ", ["ⰰ", "ⱞ"], "ⱡ", ["ⱥ", "ⱦ"], "ⱨ", "ⱪ", "ⱬ", "ⱱ", ["ⱳ", "ⱴ"], ["ⱶ", "ⱻ"], "ⲁ", "ⲃ", "ⲅ", "ⲇ", "ⲉ", "ⲋ", "ⲍ", "ⲏ", "ⲑ", "ⲓ", "ⲕ", "ⲗ", "ⲙ", "ⲛ", "ⲝ", "ⲟ", "ⲡ", "ⲣ", "ⲥ", "ⲧ", "ⲩ", "ⲫ", "ⲭ", "ⲯ", "ⲱ", "ⲳ", "ⲵ", "ⲷ", "ⲹ", "ⲻ", "ⲽ", "ⲿ", "ⳁ", "ⳃ", "ⳅ", "ⳇ", "ⳉ", "ⳋ", "ⳍ", "ⳏ", "ⳑ", "ⳓ", "ⳕ", "ⳗ", "ⳙ", "ⳛ", "ⳝ", "ⳟ", "ⳡ", ["ⳣ", "ⳤ"], "ⳬ", "ⳮ", "ⳳ", ["ⴀ", "ⴥ"], "ⴧ", "ⴭ", "ꙁ", "ꙃ", "ꙅ", "ꙇ", "ꙉ", "ꙋ", "ꙍ", "ꙏ", "ꙑ", "ꙓ", "ꙕ", "ꙗ", "ꙙ", "ꙛ", "ꙝ", "ꙟ", "ꙡ", "ꙣ", "ꙥ", "ꙧ", "ꙩ", "ꙫ", "ꙭ", "ꚁ", "ꚃ", "ꚅ", "ꚇ", "ꚉ", "ꚋ", "ꚍ", "ꚏ", "ꚑ", "ꚓ", "ꚕ", "ꚗ", "ꚙ", "ꚛ", "ꜣ", "ꜥ", "ꜧ", "ꜩ", "ꜫ", "ꜭ", ["ꜯ", "ꜱ"], "ꜳ", "ꜵ", "ꜷ", "ꜹ", "ꜻ", "ꜽ", "ꜿ", "ꝁ", "ꝃ", "ꝅ", "ꝇ", "ꝉ", "ꝋ", "ꝍ", "ꝏ", "ꝑ", "ꝓ", "ꝕ", "ꝗ", "ꝙ", "ꝛ", "ꝝ", "ꝟ", "ꝡ", "ꝣ", "ꝥ", "ꝧ", "ꝩ", "ꝫ", "ꝭ", "ꝯ", ["ꝱ", "ꝸ"], "ꝺ", "ꝼ", "ꝿ", "ꞁ", "ꞃ", "ꞅ", "ꞇ", "ꞌ", "ꞎ", "ꞑ", ["ꞓ", "ꞕ"], "ꞗ", "ꞙ", "ꞛ", "ꞝ", "ꞟ", "ꞡ", "ꞣ", "ꞥ", "ꞧ", "ꞩ", "ꞯ", "ꞵ", "ꞷ", "ꞹ", "ꟺ", ["ꬰ", "ꭚ"], ["ꭠ", "ꭥ"], ["ꭰ", "ꮿ"], ["ff", "st"], ["ﬓ", "ﬗ"], ["a", "z"]], false, false), peg$c100 = /^[\u01C5\u01C8\u01CB\u01F2\u1F88-\u1F8F\u1F98-\u1F9F\u1FA8-\u1FAF\u1FBC\u1FCC\u1FFC]/, peg$c101 = peg$classExpectation(["Dž", "Lj", "Nj", "Dz", ["ᾈ", "ᾏ"], ["ᾘ", "ᾟ"], ["ᾨ", "ᾯ"], "ᾼ", "ῌ", "ῼ"], false, false), peg$c102 = /^[\u02B0-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0374\u037A\u0559\u0640\u06E5-\u06E6\u07F4-\u07F5\u07FA\u081A\u0824\u0828\u0971\u0E46\u0EC6\u10FC\u17D7\u1843\u1AA7\u1C78-\u1C7D\u1D2C-\u1D6A\u1D78\u1D9B-\u1DBF\u2071\u207F\u2090-\u209C\u2C7C-\u2C7D\u2D6F\u2E2F\u3005\u3031-\u3035\u303B\u309D-\u309E\u30FC-\u30FE\uA015\uA4F8-\uA4FD\uA60C\uA67F\uA69C-\uA69D\uA717-\uA71F\uA770\uA788\uA7F8-\uA7F9\uA9CF\uA9E6\uAA70\uAADD\uAAF3-\uAAF4\uAB5C-\uAB5F\uFF70\uFF9E-\uFF9F]/, peg$c103 = peg$classExpectation([["ʰ", "ˁ"], ["ˆ", "ˑ"], ["ˠ", "ˤ"], "ˬ", "ˮ", "ʹ", "ͺ", "ՙ", "ـ", ["ۥ", "ۦ"], ["ߴ", "ߵ"], "ߺ", "ࠚ", "ࠤ", "ࠨ", "ॱ", "ๆ", "ໆ", "ჼ", "ៗ", "ᡃ", "ᪧ", ["ᱸ", "ᱽ"], ["ᴬ", "ᵪ"], "ᵸ", ["ᶛ", "ᶿ"], "ⁱ", "ⁿ", ["ₐ", "ₜ"], ["ⱼ", "ⱽ"], "ⵯ", "ⸯ", "々", ["〱", "〵"], "〻", ["ゝ", "ゞ"], ["ー", "ヾ"], "ꀕ", ["ꓸ", "ꓽ"], "ꘌ", "ꙿ", ["ꚜ", "ꚝ"], ["ꜗ", "ꜟ"], "ꝰ", "ꞈ", ["ꟸ", "ꟹ"], "ꧏ", "ꧦ", "ꩰ", "ꫝ", ["ꫳ", "ꫴ"], ["ꭜ", "ꭟ"], "ー", ["゙", "゚"]], false, false), peg$c104 = /^[\xAA\xBA\u01BB\u01C0-\u01C3\u0294\u05D0-\u05EA\u05EF-\u05F2\u0620-\u063F\u0641-\u064A\u066E-\u066F\u0671-\u06D3\u06D5\u06EE-\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u0800-\u0815\u0840-\u0858\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u0904-\u0939\u093D\u0950\u0958-\u0961\u0972-\u0980\u0985-\u098C\u098F-\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC-\u09DD\u09DF-\u09E1\u09F0-\u09F1\u09FC\u0A05-\u0A0A\u0A0F-\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32-\u0A33\u0A35-\u0A36\u0A38-\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2-\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0-\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F-\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32-\u0B33\u0B35-\u0B39\u0B3D\u0B5C-\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99-\u0B9A\u0B9C\u0B9E-\u0B9F\u0BA3-\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60-\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0-\u0CE1\u0CF1-\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32-\u0E33\u0E40-\u0E45\u0E81-\u0E82\u0E84\u0E87-\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA-\u0EAB\u0EAD-\u0EB0\u0EB2-\u0EB3\u0EBD\u0EC0-\u0EC4\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065-\u1066\u106E-\u1070\u1075-\u1081\u108E\u1100-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17DC\u1820-\u1842\u1844-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE-\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C77\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5-\u1CF6\u2135-\u2138\u2D30-\u2D67\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3006\u303C\u3041-\u3096\u309F\u30A1-\u30FA\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEF\uA000-\uA014\uA016-\uA48C\uA4D0-\uA4F7\uA500-\uA60B\uA610-\uA61F\uA62A-\uA62B\uA66E\uA6A0-\uA6E5\uA78F\uA7F7\uA7FB-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD-\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9E0-\uA9E4\uA9E7-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA6F\uAA71-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5-\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADC\uAAE0-\uAAEA\uAAF2\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40-\uFB41\uFB43-\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF66-\uFF6F\uFF71-\uFF9D\uFFA0-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]/, peg$c105 = peg$classExpectation(["ª", "º", "ƻ", ["ǀ", "ǃ"], "ʔ", ["א", "ת"], ["ׯ", "ײ"], ["ؠ", "ؿ"], ["ف", "ي"], ["ٮ", "ٯ"], ["ٱ", "ۓ"], "ە", ["ۮ", "ۯ"], ["ۺ", "ۼ"], "ۿ", "ܐ", ["ܒ", "ܯ"], ["ݍ", "ޥ"], "ޱ", ["ߊ", "ߪ"], ["ࠀ", "ࠕ"], ["ࡀ", "ࡘ"], ["ࡠ", "ࡪ"], ["ࢠ", "ࢴ"], ["ࢶ", "ࢽ"], ["ऄ", "ह"], "ऽ", "ॐ", ["क़", "ॡ"], ["ॲ", "ঀ"], ["অ", "ঌ"], ["এ", "ঐ"], ["ও", "ন"], ["প", "র"], "ল", ["শ", "হ"], "ঽ", "ৎ", ["ড়", "ঢ়"], ["য়", "ৡ"], ["ৰ", "ৱ"], "ৼ", ["ਅ", "ਊ"], ["ਏ", "ਐ"], ["ਓ", "ਨ"], ["ਪ", "ਰ"], ["ਲ", "ਲ਼"], ["ਵ", "ਸ਼"], ["ਸ", "ਹ"], ["ਖ਼", "ੜ"], "ਫ਼", ["ੲ", "ੴ"], ["અ", "ઍ"], ["એ", "ઑ"], ["ઓ", "ન"], ["પ", "ર"], ["લ", "ળ"], ["વ", "હ"], "ઽ", "ૐ", ["ૠ", "ૡ"], "ૹ", ["ଅ", "ଌ"], ["ଏ", "ଐ"], ["ଓ", "ନ"], ["ପ", "ର"], ["ଲ", "ଳ"], ["ଵ", "ହ"], "ଽ", ["ଡ଼", "ଢ଼"], ["ୟ", "ୡ"], "ୱ", "ஃ", ["அ", "ஊ"], ["எ", "ஐ"], ["ஒ", "க"], ["ங", "ச"], "ஜ", ["ஞ", "ட"], ["ண", "த"], ["ந", "ப"], ["ம", "ஹ"], "ௐ", ["అ", "ఌ"], ["ఎ", "ఐ"], ["ఒ", "న"], ["ప", "హ"], "ఽ", ["ౘ", "ౚ"], ["ౠ", "ౡ"], "ಀ", ["ಅ", "ಌ"], ["ಎ", "ಐ"], ["ಒ", "ನ"], ["ಪ", "ಳ"], ["ವ", "ಹ"], "ಽ", "ೞ", ["ೠ", "ೡ"], ["ೱ", "ೲ"], ["അ", "ഌ"], ["എ", "ഐ"], ["ഒ", "ഺ"], "ഽ", "ൎ", ["ൔ", "ൖ"], ["ൟ", "ൡ"], ["ൺ", "ൿ"], ["අ", "ඖ"], ["ක", "න"], ["ඳ", "ර"], "ල", ["ව", "ෆ"], ["ก", "ะ"], ["า", "ำ"], ["เ", "ๅ"], ["ກ", "ຂ"], "ຄ", ["ງ", "ຈ"], "ຊ", "ຍ", ["ດ", "ທ"], ["ນ", "ຟ"], ["ມ", "ຣ"], "ລ", "ວ", ["ສ", "ຫ"], ["ອ", "ະ"], ["າ", "ຳ"], "ຽ", ["ເ", "ໄ"], ["ໜ", "ໟ"], "ༀ", ["ཀ", "ཇ"], ["ཉ", "ཬ"], ["ྈ", "ྌ"], ["က", "ဪ"], "ဿ", ["ၐ", "ၕ"], ["ၚ", "ၝ"], "ၡ", ["ၥ", "ၦ"], ["ၮ", "ၰ"], ["ၵ", "ႁ"], "ႎ", ["ᄀ", "ቈ"], ["ቊ", "ቍ"], ["ቐ", "ቖ"], "ቘ", ["ቚ", "ቝ"], ["በ", "ኈ"], ["ኊ", "ኍ"], ["ነ", "ኰ"], ["ኲ", "ኵ"], ["ኸ", "ኾ"], "ዀ", ["ዂ", "ዅ"], ["ወ", "ዖ"], ["ዘ", "ጐ"], ["ጒ", "ጕ"], ["ጘ", "ፚ"], ["ᎀ", "ᎏ"], ["ᐁ", "ᙬ"], ["ᙯ", "ᙿ"], ["ᚁ", "ᚚ"], ["ᚠ", "ᛪ"], ["ᛱ", "ᛸ"], ["ᜀ", "ᜌ"], ["ᜎ", "ᜑ"], ["ᜠ", "ᜱ"], ["ᝀ", "ᝑ"], ["ᝠ", "ᝬ"], ["ᝮ", "ᝰ"], ["ក", "ឳ"], "ៜ", ["ᠠ", "ᡂ"], ["ᡄ", "ᡸ"], ["ᢀ", "ᢄ"], ["ᢇ", "ᢨ"], "ᢪ", ["ᢰ", "ᣵ"], ["ᤀ", "ᤞ"], ["ᥐ", "ᥭ"], ["ᥰ", "ᥴ"], ["ᦀ", "ᦫ"], ["ᦰ", "ᧉ"], ["ᨀ", "ᨖ"], ["ᨠ", "ᩔ"], ["ᬅ", "ᬳ"], ["ᭅ", "ᭋ"], ["ᮃ", "ᮠ"], ["ᮮ", "ᮯ"], ["ᮺ", "ᯥ"], ["ᰀ", "ᰣ"], ["ᱍ", "ᱏ"], ["ᱚ", "ᱷ"], ["ᳩ", "ᳬ"], ["ᳮ", "ᳱ"], ["ᳵ", "ᳶ"], ["ℵ", "ℸ"], ["ⴰ", "ⵧ"], ["ⶀ", "ⶖ"], ["ⶠ", "ⶦ"], ["ⶨ", "ⶮ"], ["ⶰ", "ⶶ"], ["ⶸ", "ⶾ"], ["ⷀ", "ⷆ"], ["ⷈ", "ⷎ"], ["ⷐ", "ⷖ"], ["ⷘ", "ⷞ"], "〆", "〼", ["ぁ", "ゖ"], "ゟ", ["ァ", "ヺ"], "ヿ", ["ㄅ", "ㄯ"], ["ㄱ", "ㆎ"], ["ㆠ", "ㆺ"], ["ㇰ", "ㇿ"], ["㐀", "䶵"], ["一", "鿯"], ["ꀀ", "ꀔ"], ["ꀖ", "ꒌ"], ["ꓐ", "ꓷ"], ["ꔀ", "ꘋ"], ["ꘐ", "ꘟ"], ["ꘪ", "ꘫ"], "ꙮ", ["ꚠ", "ꛥ"], "ꞏ", "ꟷ", ["ꟻ", "ꠁ"], ["ꠃ", "ꠅ"], ["ꠇ", "ꠊ"], ["ꠌ", "ꠢ"], ["ꡀ", "ꡳ"], ["ꢂ", "ꢳ"], ["ꣲ", "ꣷ"], "ꣻ", ["ꣽ", "ꣾ"], ["ꤊ", "ꤥ"], ["ꤰ", "ꥆ"], ["ꥠ", "ꥼ"], ["ꦄ", "ꦲ"], ["ꧠ", "ꧤ"], ["ꧧ", "ꧯ"], ["ꧺ", "ꧾ"], ["ꨀ", "ꨨ"], ["ꩀ", "ꩂ"], ["ꩄ", "ꩋ"], ["ꩠ", "ꩯ"], ["ꩱ", "ꩶ"], "ꩺ", ["ꩾ", "ꪯ"], "ꪱ", ["ꪵ", "ꪶ"], ["ꪹ", "ꪽ"], "ꫀ", "ꫂ", ["ꫛ", "ꫜ"], ["ꫠ", "ꫪ"], "ꫲ", ["ꬁ", "ꬆ"], ["ꬉ", "ꬎ"], ["ꬑ", "ꬖ"], ["ꬠ", "ꬦ"], ["ꬨ", "ꬮ"], ["ꯀ", "ꯢ"], ["가", "힣"], ["ힰ", "ퟆ"], ["ퟋ", "ퟻ"], ["豈", "舘"], ["並", "龎"], "יִ", ["ײַ", "ﬨ"], ["שׁ", "זּ"], ["טּ", "לּ"], "מּ", ["נּ", "סּ"], ["ףּ", "פּ"], ["צּ", "ﮱ"], ["ﯓ", "ﴽ"], ["ﵐ", "ﶏ"], ["ﶒ", "ﷇ"], ["ﷰ", "ﷻ"], ["ﹰ", "ﹴ"], ["ﹶ", "ﻼ"], ["ヲ", "ッ"], ["ア", "ン"], ["ᅠ", "ᄒ"], ["ᅡ", "ᅦ"], ["ᅧ", "ᅬ"], ["ᅭ", "ᅲ"], ["ᅳ", "ᅵ"]], false, false), peg$c106 = /^[\u16EE-\u16F0\u2160-\u2182\u2185-\u2188\u3007\u3021-\u3029\u3038-\u303A\uA6E6-\uA6EF]/, peg$c107 = peg$classExpectation([["ᛮ", "ᛰ"], ["Ⅰ", "ↂ"], ["ↅ", "ↈ"], "〇", ["〡", "〩"], ["〸", "〺"], ["ꛦ", "ꛯ"]], false, false), peg$c108 = /^[\u0300-\u036F\u0483-\u0487\u0591-\u05BD\u05BF\u05C1-\u05C2\u05C4-\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7-\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u07FD\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08D3-\u08E1\u08E3-\u0902\u093A\u093C\u0941-\u0948\u094D\u0951-\u0957\u0962-\u0963\u0981\u09BC\u09C1-\u09C4\u09CD\u09E2-\u09E3\u09FE\u0A01-\u0A02\u0A3C\u0A41-\u0A42\u0A47-\u0A48\u0A4B-\u0A4D\u0A51\u0A70-\u0A71\u0A75\u0A81-\u0A82\u0ABC\u0AC1-\u0AC5\u0AC7-\u0AC8\u0ACD\u0AE2-\u0AE3\u0AFA-\u0AFF\u0B01\u0B3C\u0B3F\u0B41-\u0B44\u0B4D\u0B56\u0B62-\u0B63\u0B82\u0BC0\u0BCD\u0C00\u0C04\u0C3E-\u0C40\u0C46-\u0C48\u0C4A-\u0C4D\u0C55-\u0C56\u0C62-\u0C63\u0C81\u0CBC\u0CBF\u0CC6\u0CCC-\u0CCD\u0CE2-\u0CE3\u0D00-\u0D01\u0D3B-\u0D3C\u0D41-\u0D44\u0D4D\u0D62-\u0D63\u0DCA\u0DD2-\u0DD4\u0DD6\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB-\u0EBC\u0EC8-\u0ECD\u0F18-\u0F19\u0F35\u0F37\u0F39\u0F71-\u0F7E\u0F80-\u0F84\u0F86-\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102D-\u1030\u1032-\u1037\u1039-\u103A\u103D-\u103E\u1058-\u1059\u105E-\u1060\u1071-\u1074\u1082\u1085-\u1086\u108D\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752-\u1753\u1772-\u1773\u17B4-\u17B5\u17B7-\u17BD\u17C6\u17C9-\u17D3\u17DD\u180B-\u180D\u1885-\u1886\u18A9\u1920-\u1922\u1927-\u1928\u1932\u1939-\u193B\u1A17-\u1A18\u1A1B\u1A56\u1A58-\u1A5E\u1A60\u1A62\u1A65-\u1A6C\u1A73-\u1A7C\u1A7F\u1AB0-\u1ABD\u1B00-\u1B03\u1B34\u1B36-\u1B3A\u1B3C\u1B42\u1B6B-\u1B73\u1B80-\u1B81\u1BA2-\u1BA5\u1BA8-\u1BA9\u1BAB-\u1BAD\u1BE6\u1BE8-\u1BE9\u1BED\u1BEF-\u1BF1\u1C2C-\u1C33\u1C36-\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE0\u1CE2-\u1CE8\u1CED\u1CF4\u1CF8-\u1CF9\u1DC0-\u1DF9\u1DFB-\u1DFF\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302D\u3099-\u309A\uA66F\uA674-\uA67D\uA69E-\uA69F\uA6F0-\uA6F1\uA802\uA806\uA80B\uA825-\uA826\uA8C4-\uA8C5\uA8E0-\uA8F1\uA8FF\uA926-\uA92D\uA947-\uA951\uA980-\uA982\uA9B3\uA9B6-\uA9B9\uA9BC\uA9E5\uAA29-\uAA2E\uAA31-\uAA32\uAA35-\uAA36\uAA43\uAA4C\uAA7C\uAAB0\uAAB2-\uAAB4\uAAB7-\uAAB8\uAABE-\uAABF\uAAC1\uAAEC-\uAAED\uAAF6\uABE5\uABE8\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F]/, peg$c109 = peg$classExpectation([["̀", "ͯ"], ["҃", "҇"], ["֑", "ֽ"], "ֿ", ["ׁ", "ׂ"], ["ׄ", "ׅ"], "ׇ", ["ؐ", "ؚ"], ["ً", "ٟ"], "ٰ", ["ۖ", "ۜ"], ["۟", "ۤ"], ["ۧ", "ۨ"], ["۪", "ۭ"], "ܑ", ["ܰ", "݊"], ["ަ", "ް"], ["߫", "߳"], "߽", ["ࠖ", "࠙"], ["ࠛ", "ࠣ"], ["ࠥ", "ࠧ"], ["ࠩ", "࠭"], ["࡙", "࡛"], ["࣓", "࣡"], ["ࣣ", "ं"], "ऺ", "़", ["ु", "ै"], "्", ["॑", "ॗ"], ["ॢ", "ॣ"], "ঁ", "়", ["ু", "ৄ"], "্", ["ৢ", "ৣ"], "৾", ["ਁ", "ਂ"], "਼", ["ੁ", "ੂ"], ["ੇ", "ੈ"], ["ੋ", "੍"], "ੑ", ["ੰ", "ੱ"], "ੵ", ["ઁ", "ં"], "઼", ["ુ", "ૅ"], ["ે", "ૈ"], "્", ["ૢ", "ૣ"], ["ૺ", "૿"], "ଁ", "଼", "ି", ["ୁ", "ୄ"], "୍", "ୖ", ["ୢ", "ୣ"], "ஂ", "ீ", "்", "ఀ", "ఄ", ["ా", "ీ"], ["ె", "ై"], ["ొ", "్"], ["ౕ", "ౖ"], ["ౢ", "ౣ"], "ಁ", "಼", "ಿ", "ೆ", ["ೌ", "್"], ["ೢ", "ೣ"], ["ഀ", "ഁ"], ["഻", "഼"], ["ു", "ൄ"], "്", ["ൢ", "ൣ"], "්", ["ි", "ු"], "ූ", "ั", ["ิ", "ฺ"], ["็", "๎"], "ັ", ["ິ", "ູ"], ["ົ", "ຼ"], ["່", "ໍ"], ["༘", "༙"], "༵", "༷", "༹", ["ཱ", "ཾ"], ["ྀ", "྄"], ["྆", "྇"], ["ྍ", "ྗ"], ["ྙ", "ྼ"], "࿆", ["ိ", "ူ"], ["ဲ", "့"], ["္", "်"], ["ွ", "ှ"], ["ၘ", "ၙ"], ["ၞ", "ၠ"], ["ၱ", "ၴ"], "ႂ", ["ႅ", "ႆ"], "ႍ", "ႝ", ["፝", "፟"], ["ᜒ", "᜔"], ["ᜲ", "᜴"], ["ᝒ", "ᝓ"], ["ᝲ", "ᝳ"], ["឴", "឵"], ["ិ", "ួ"], "ំ", ["៉", "៓"], "៝", ["᠋", "᠍"], ["ᢅ", "ᢆ"], "ᢩ", ["ᤠ", "ᤢ"], ["ᤧ", "ᤨ"], "ᤲ", ["᤹", "᤻"], ["ᨗ", "ᨘ"], "ᨛ", "ᩖ", ["ᩘ", "ᩞ"], "᩠", "ᩢ", ["ᩥ", "ᩬ"], ["ᩳ", "᩼"], "᩿", ["᪰", "᪽"], ["ᬀ", "ᬃ"], "᬴", ["ᬶ", "ᬺ"], "ᬼ", "ᭂ", ["᭫", "᭳"], ["ᮀ", "ᮁ"], ["ᮢ", "ᮥ"], ["ᮨ", "ᮩ"], ["᮫", "ᮭ"], "᯦", ["ᯨ", "ᯩ"], "ᯭ", ["ᯯ", "ᯱ"], ["ᰬ", "ᰳ"], ["ᰶ", "᰷"], ["᳐", "᳒"], ["᳔", "᳠"], ["᳢", "᳨"], "᳭", "᳴", ["᳸", "᳹"], ["᷀", "᷹"], ["᷻", "᷿"], ["⃐", "⃜"], "⃡", ["⃥", "⃰"], ["⳯", "⳱"], "⵿", ["ⷠ", "ⷿ"], ["〪", "〭"], ["゙", "゚"], "꙯", ["ꙴ", "꙽"], ["ꚞ", "ꚟ"], ["꛰", "꛱"], "ꠂ", "꠆", "ꠋ", ["ꠥ", "ꠦ"], ["꣄", "ꣅ"], ["꣠", "꣱"], "ꣿ", ["ꤦ", "꤭"], ["ꥇ", "ꥑ"], ["ꦀ", "ꦂ"], "꦳", ["ꦶ", "ꦹ"], "ꦼ", "ꧥ", ["ꨩ", "ꨮ"], ["ꨱ", "ꨲ"], ["ꨵ", "ꨶ"], "ꩃ", "ꩌ", "ꩼ", "ꪰ", ["ꪲ", "ꪴ"], ["ꪷ", "ꪸ"], ["ꪾ", "꪿"], "꫁", ["ꫬ", "ꫭ"], "꫶", "ꯥ", "ꯨ", "꯭", "ﬞ", ["︀", "️"], ["︠", "︯"]], false, false), peg$c110 = /^[\u0903\u093B\u093E-\u0940\u0949-\u094C\u094E-\u094F\u0982-\u0983\u09BE-\u09C0\u09C7-\u09C8\u09CB-\u09CC\u09D7\u0A03\u0A3E-\u0A40\u0A83\u0ABE-\u0AC0\u0AC9\u0ACB-\u0ACC\u0B02-\u0B03\u0B3E\u0B40\u0B47-\u0B48\u0B4B-\u0B4C\u0B57\u0BBE-\u0BBF\u0BC1-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCC\u0BD7\u0C01-\u0C03\u0C41-\u0C44\u0C82-\u0C83\u0CBE\u0CC0-\u0CC4\u0CC7-\u0CC8\u0CCA-\u0CCB\u0CD5-\u0CD6\u0D02-\u0D03\u0D3E-\u0D40\u0D46-\u0D48\u0D4A-\u0D4C\u0D57\u0D82-\u0D83\u0DCF-\u0DD1\u0DD8-\u0DDF\u0DF2-\u0DF3\u0F3E-\u0F3F\u0F7F\u102B-\u102C\u1031\u1038\u103B-\u103C\u1056-\u1057\u1062-\u1064\u1067-\u106D\u1083-\u1084\u1087-\u108C\u108F\u109A-\u109C\u17B6\u17BE-\u17C5\u17C7-\u17C8\u1923-\u1926\u1929-\u192B\u1930-\u1931\u1933-\u1938\u1A19-\u1A1A\u1A55\u1A57\u1A61\u1A63-\u1A64\u1A6D-\u1A72\u1B04\u1B35\u1B3B\u1B3D-\u1B41\u1B43-\u1B44\u1B82\u1BA1\u1BA6-\u1BA7\u1BAA\u1BE7\u1BEA-\u1BEC\u1BEE\u1BF2-\u1BF3\u1C24-\u1C2B\u1C34-\u1C35\u1CE1\u1CF2-\u1CF3\u1CF7\u302E-\u302F\uA823-\uA824\uA827\uA880-\uA881\uA8B4-\uA8C3\uA952-\uA953\uA983\uA9B4-\uA9B5\uA9BA-\uA9BB\uA9BD-\uA9C0\uAA2F-\uAA30\uAA33-\uAA34\uAA4D\uAA7B\uAA7D\uAAEB\uAAEE-\uAAEF\uAAF5\uABE3-\uABE4\uABE6-\uABE7\uABE9-\uABEA\uABEC]/, peg$c111 = peg$classExpectation(["ः", "ऻ", ["ा", "ी"], ["ॉ", "ौ"], ["ॎ", "ॏ"], ["ং", "ঃ"], ["া", "ী"], ["ে", "ৈ"], ["ো", "ৌ"], "ৗ", "ਃ", ["ਾ", "ੀ"], "ઃ", ["ા", "ી"], "ૉ", ["ો", "ૌ"], ["ଂ", "ଃ"], "ା", "ୀ", ["େ", "ୈ"], ["ୋ", "ୌ"], "ୗ", ["ா", "ி"], ["ு", "ூ"], ["ெ", "ை"], ["ொ", "ௌ"], "ௗ", ["ఁ", "ః"], ["ు", "ౄ"], ["ಂ", "ಃ"], "ಾ", ["ೀ", "ೄ"], ["ೇ", "ೈ"], ["ೊ", "ೋ"], ["ೕ", "ೖ"], ["ം", "ഃ"], ["ാ", "ീ"], ["െ", "ൈ"], ["ൊ", "ൌ"], "ൗ", ["ං", "ඃ"], ["ා", "ෑ"], ["ෘ", "ෟ"], ["ෲ", "ෳ"], ["༾", "༿"], "ཿ", ["ါ", "ာ"], "ေ", "း", ["ျ", "ြ"], ["ၖ", "ၗ"], ["ၢ", "ၤ"], ["ၧ", "ၭ"], ["ႃ", "ႄ"], ["ႇ", "ႌ"], "ႏ", ["ႚ", "ႜ"], "ា", ["ើ", "ៅ"], ["ះ", "ៈ"], ["ᤣ", "ᤦ"], ["ᤩ", "ᤫ"], ["ᤰ", "ᤱ"], ["ᤳ", "ᤸ"], ["ᨙ", "ᨚ"], "ᩕ", "ᩗ", "ᩡ", ["ᩣ", "ᩤ"], ["ᩭ", "ᩲ"], "ᬄ", "ᬵ", "ᬻ", ["ᬽ", "ᭁ"], ["ᭃ", "᭄"], "ᮂ", "ᮡ", ["ᮦ", "ᮧ"], "᮪", "ᯧ", ["ᯪ", "ᯬ"], "ᯮ", ["᯲", "᯳"], ["ᰤ", "ᰫ"], ["ᰴ", "ᰵ"], "᳡", ["ᳲ", "ᳳ"], "᳷", ["〮", "〯"], ["ꠣ", "ꠤ"], "ꠧ", ["ꢀ", "ꢁ"], ["ꢴ", "ꣃ"], ["ꥒ", "꥓"], "ꦃ", ["ꦴ", "ꦵ"], ["ꦺ", "ꦻ"], ["ꦽ", "꧀"], ["ꨯ", "ꨰ"], ["ꨳ", "ꨴ"], "ꩍ", "ꩻ", "ꩽ", "ꫫ", ["ꫮ", "ꫯ"], "ꫵ", ["ꯣ", "ꯤ"], ["ꯦ", "ꯧ"], ["ꯩ", "ꯪ"], "꯬"], false, false), peg$c112 = /^[0-9\u0660-\u0669\u06F0-\u06F9\u07C0-\u07C9\u0966-\u096F\u09E6-\u09EF\u0A66-\u0A6F\u0AE6-\u0AEF\u0B66-\u0B6F\u0BE6-\u0BEF\u0C66-\u0C6F\u0CE6-\u0CEF\u0D66-\u0D6F\u0DE6-\u0DEF\u0E50-\u0E59\u0ED0-\u0ED9\u0F20-\u0F29\u1040-\u1049\u1090-\u1099\u17E0-\u17E9\u1810-\u1819\u1946-\u194F\u19D0-\u19D9\u1A80-\u1A89\u1A90-\u1A99\u1B50-\u1B59\u1BB0-\u1BB9\u1C40-\u1C49\u1C50-\u1C59\uA620-\uA629\uA8D0-\uA8D9\uA900-\uA909\uA9D0-\uA9D9\uA9F0-\uA9F9\uAA50-\uAA59\uABF0-\uABF9\uFF10-\uFF19]/, peg$c113 = peg$classExpectation([["0", "9"], ["٠", "٩"], ["۰", "۹"], ["߀", "߉"], ["०", "९"], ["০", "৯"], ["੦", "੯"], ["૦", "૯"], ["୦", "୯"], ["௦", "௯"], ["౦", "౯"], ["೦", "೯"], ["൦", "൯"], ["෦", "෯"], ["๐", "๙"], ["໐", "໙"], ["༠", "༩"], ["၀", "၉"], ["႐", "႙"], ["០", "៩"], ["᠐", "᠙"], ["᥆", "᥏"], ["᧐", "᧙"], ["᪀", "᪉"], ["᪐", "᪙"], ["᭐", "᭙"], ["᮰", "᮹"], ["᱀", "᱉"], ["᱐", "᱙"], ["꘠", "꘩"], ["꣐", "꣙"], ["꤀", "꤉"], ["꧐", "꧙"], ["꧰", "꧹"], ["꩐", "꩙"], ["꯰", "꯹"], ["0", "9"]], false, false), peg$c114 = /^[_\u203F-\u2040\u2054\uFE33-\uFE34\uFE4D-\uFE4F\uFF3F]/, peg$c115 = peg$classExpectation(["_", ["‿", "⁀"], "⁔", ["︳", "︴"], ["﹍", "﹏"], "_"], false, false), peg$c118 = /^[0-9a-f]/i, peg$c119 = peg$classExpectation([["0", "9"], ["a", "f"]], false, true), peg$c120 = "break", peg$c121 = peg$literalExpectation("break", false), peg$c122 = "case", peg$c123 = peg$literalExpectation("case", false), peg$c124 = "catch", peg$c125 = peg$literalExpectation("catch", false), peg$c126 = "class", peg$c127 = peg$literalExpectation("class", false), peg$c128 = "const", peg$c129 = peg$literalExpectation("const", false), peg$c130 = "continue", peg$c131 = peg$literalExpectation("continue", false), peg$c132 = "debugger", peg$c133 = peg$literalExpectation("debugger", false), peg$c134 = "default", peg$c135 = peg$literalExpectation("default", false), peg$c136 = "delete", peg$c137 = peg$literalExpectation("delete", false), peg$c138 = "do", peg$c139 = peg$literalExpectation("do", false), peg$c140 = "else", peg$c141 = peg$literalExpectation("else", false), peg$c142 = "export", peg$c143 = peg$literalExpectation("export", false), peg$c144 = "extends", peg$c145 = peg$literalExpectation("extends", false), peg$c146 = "false", peg$c147 = peg$literalExpectation("false", false), peg$c148 = "finally", peg$c149 = peg$literalExpectation("finally", false), peg$c150 = "for", peg$c151 = peg$literalExpectation("for", false), peg$c152 = "function", peg$c153 = peg$literalExpectation("function", false), peg$c156 = "if", peg$c157 = peg$literalExpectation("if", false), peg$c158 = "import", peg$c159 = peg$literalExpectation("import", false), peg$c160 = "instanceof", peg$c161 = peg$literalExpectation("instanceof", false), peg$c162 = "in", peg$c163 = peg$literalExpectation("in", false), peg$c164 = "new", peg$c165 = peg$literalExpectation("new", false), peg$c166 = "null", peg$c167 = peg$literalExpectation("null", false), peg$c168 = "return", peg$c169 = peg$literalExpectation("return", false), peg$c172 = "super", peg$c173 = peg$literalExpectation("super", false), peg$c174 = "switch", peg$c175 = peg$literalExpectation("switch", false), peg$c176 = "this", peg$c177 = peg$literalExpectation("this", false), peg$c178 = "throw", peg$c179 = peg$literalExpectation("throw", false), peg$c180 = "true", peg$c181 = peg$literalExpectation("true", false), peg$c182 = "try", peg$c183 = peg$literalExpectation("try", false), peg$c184 = "typeof", peg$c185 = peg$literalExpectation("typeof", false), peg$c186 = "var", peg$c187 = peg$literalExpectation("var", false), peg$c188 = "void", peg$c189 = peg$literalExpectation("void", false), peg$c190 = "while", peg$c191 = peg$literalExpectation("while", false), peg$c192 = "with", peg$c193 = peg$literalExpectation("with", false), peg$currPos = 0, peg$savedPos = 0, peg$posDetailsCache = [{ line: 1, column: 1 }], peg$maxFailPos = 0, peg$maxFailExpected = [], peg$silentFails = 0, peg$result;
6066
+ }, peg$c103 = /^[A-Z\xC0-\xD6\xD8-\xDE\u0100\u0102\u0104\u0106\u0108\u010A\u010C\u010E\u0110\u0112\u0114\u0116\u0118\u011A\u011C\u011E\u0120\u0122\u0124\u0126\u0128\u012A\u012C\u012E\u0130\u0132\u0134\u0136\u0139\u013B\u013D\u013F\u0141\u0143\u0145\u0147\u014A\u014C\u014E\u0150\u0152\u0154\u0156\u0158\u015A\u015C\u015E\u0160\u0162\u0164\u0166\u0168\u016A\u016C\u016E\u0170\u0172\u0174\u0176\u0178-\u0179\u017B\u017D\u0181-\u0182\u0184\u0186-\u0187\u0189-\u018B\u018E-\u0191\u0193-\u0194\u0196-\u0198\u019C-\u019D\u019F-\u01A0\u01A2\u01A4\u01A6-\u01A7\u01A9\u01AC\u01AE-\u01AF\u01B1-\u01B3\u01B5\u01B7-\u01B8\u01BC\u01C4\u01C7\u01CA\u01CD\u01CF\u01D1\u01D3\u01D5\u01D7\u01D9\u01DB\u01DE\u01E0\u01E2\u01E4\u01E6\u01E8\u01EA\u01EC\u01EE\u01F1\u01F4\u01F6-\u01F8\u01FA\u01FC\u01FE\u0200\u0202\u0204\u0206\u0208\u020A\u020C\u020E\u0210\u0212\u0214\u0216\u0218\u021A\u021C\u021E\u0220\u0222\u0224\u0226\u0228\u022A\u022C\u022E\u0230\u0232\u023A-\u023B\u023D-\u023E\u0241\u0243-\u0246\u0248\u024A\u024C\u024E\u0370\u0372\u0376\u037F\u0386\u0388-\u038A\u038C\u038E-\u038F\u0391-\u03A1\u03A3-\u03AB\u03CF\u03D2-\u03D4\u03D8\u03DA\u03DC\u03DE\u03E0\u03E2\u03E4\u03E6\u03E8\u03EA\u03EC\u03EE\u03F4\u03F7\u03F9-\u03FA\u03FD-\u042F\u0460\u0462\u0464\u0466\u0468\u046A\u046C\u046E\u0470\u0472\u0474\u0476\u0478\u047A\u047C\u047E\u0480\u048A\u048C\u048E\u0490\u0492\u0494\u0496\u0498\u049A\u049C\u049E\u04A0\u04A2\u04A4\u04A6\u04A8\u04AA\u04AC\u04AE\u04B0\u04B2\u04B4\u04B6\u04B8\u04BA\u04BC\u04BE\u04C0-\u04C1\u04C3\u04C5\u04C7\u04C9\u04CB\u04CD\u04D0\u04D2\u04D4\u04D6\u04D8\u04DA\u04DC\u04DE\u04E0\u04E2\u04E4\u04E6\u04E8\u04EA\u04EC\u04EE\u04F0\u04F2\u04F4\u04F6\u04F8\u04FA\u04FC\u04FE\u0500\u0502\u0504\u0506\u0508\u050A\u050C\u050E\u0510\u0512\u0514\u0516\u0518\u051A\u051C\u051E\u0520\u0522\u0524\u0526\u0528\u052A\u052C\u052E\u0531-\u0556\u10A0-\u10C5\u10C7\u10CD\u13A0-\u13F5\u1C90-\u1CBA\u1CBD-\u1CBF\u1E00\u1E02\u1E04\u1E06\u1E08\u1E0A\u1E0C\u1E0E\u1E10\u1E12\u1E14\u1E16\u1E18\u1E1A\u1E1C\u1E1E\u1E20\u1E22\u1E24\u1E26\u1E28\u1E2A\u1E2C\u1E2E\u1E30\u1E32\u1E34\u1E36\u1E38\u1E3A\u1E3C\u1E3E\u1E40\u1E42\u1E44\u1E46\u1E48\u1E4A\u1E4C\u1E4E\u1E50\u1E52\u1E54\u1E56\u1E58\u1E5A\u1E5C\u1E5E\u1E60\u1E62\u1E64\u1E66\u1E68\u1E6A\u1E6C\u1E6E\u1E70\u1E72\u1E74\u1E76\u1E78\u1E7A\u1E7C\u1E7E\u1E80\u1E82\u1E84\u1E86\u1E88\u1E8A\u1E8C\u1E8E\u1E90\u1E92\u1E94\u1E9E\u1EA0\u1EA2\u1EA4\u1EA6\u1EA8\u1EAA\u1EAC\u1EAE\u1EB0\u1EB2\u1EB4\u1EB6\u1EB8\u1EBA\u1EBC\u1EBE\u1EC0\u1EC2\u1EC4\u1EC6\u1EC8\u1ECA\u1ECC\u1ECE\u1ED0\u1ED2\u1ED4\u1ED6\u1ED8\u1EDA\u1EDC\u1EDE\u1EE0\u1EE2\u1EE4\u1EE6\u1EE8\u1EEA\u1EEC\u1EEE\u1EF0\u1EF2\u1EF4\u1EF6\u1EF8\u1EFA\u1EFC\u1EFE\u1F08-\u1F0F\u1F18-\u1F1D\u1F28-\u1F2F\u1F38-\u1F3F\u1F48-\u1F4D\u1F59\u1F5B\u1F5D\u1F5F\u1F68-\u1F6F\u1FB8-\u1FBB\u1FC8-\u1FCB\u1FD8-\u1FDB\u1FE8-\u1FEC\u1FF8-\u1FFB\u2102\u2107\u210B-\u210D\u2110-\u2112\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u2130-\u2133\u213E-\u213F\u2145\u2183\u2C00-\u2C2E\u2C60\u2C62-\u2C64\u2C67\u2C69\u2C6B\u2C6D-\u2C70\u2C72\u2C75\u2C7E-\u2C80\u2C82\u2C84\u2C86\u2C88\u2C8A\u2C8C\u2C8E\u2C90\u2C92\u2C94\u2C96\u2C98\u2C9A\u2C9C\u2C9E\u2CA0\u2CA2\u2CA4\u2CA6\u2CA8\u2CAA\u2CAC\u2CAE\u2CB0\u2CB2\u2CB4\u2CB6\u2CB8\u2CBA\u2CBC\u2CBE\u2CC0\u2CC2\u2CC4\u2CC6\u2CC8\u2CCA\u2CCC\u2CCE\u2CD0\u2CD2\u2CD4\u2CD6\u2CD8\u2CDA\u2CDC\u2CDE\u2CE0\u2CE2\u2CEB\u2CED\u2CF2\uA640\uA642\uA644\uA646\uA648\uA64A\uA64C\uA64E\uA650\uA652\uA654\uA656\uA658\uA65A\uA65C\uA65E\uA660\uA662\uA664\uA666\uA668\uA66A\uA66C\uA680\uA682\uA684\uA686\uA688\uA68A\uA68C\uA68E\uA690\uA692\uA694\uA696\uA698\uA69A\uA722\uA724\uA726\uA728\uA72A\uA72C\uA72E\uA732\uA734\uA736\uA738\uA73A\uA73C\uA73E\uA740\uA742\uA744\uA746\uA748\uA74A\uA74C\uA74E\uA750\uA752\uA754\uA756\uA758\uA75A\uA75C\uA75E\uA760\uA762\uA764\uA766\uA768\uA76A\uA76C\uA76E\uA779\uA77B\uA77D-\uA77E\uA780\uA782\uA784\uA786\uA78B\uA78D\uA790\uA792\uA796\uA798\uA79A\uA79C\uA79E\uA7A0\uA7A2\uA7A4\uA7A6\uA7A8\uA7AA-\uA7AE\uA7B0-\uA7B4\uA7B6\uA7B8\uFF21-\uFF3A]/, peg$c104 = peg$classExpectation([["A", "Z"], ["À", "Ö"], ["Ø", "Þ"], "Ā", "Ă", "Ą", "Ć", "Ĉ", "Ċ", "Č", "Ď", "Đ", "Ē", "Ĕ", "Ė", "Ę", "Ě", "Ĝ", "Ğ", "Ġ", "Ģ", "Ĥ", "Ħ", "Ĩ", "Ī", "Ĭ", "Į", "İ", "IJ", "Ĵ", "Ķ", "Ĺ", "Ļ", "Ľ", "Ŀ", "Ł", "Ń", "Ņ", "Ň", "Ŋ", "Ō", "Ŏ", "Ő", "Œ", "Ŕ", "Ŗ", "Ř", "Ś", "Ŝ", "Ş", "Š", "Ţ", "Ť", "Ŧ", "Ũ", "Ū", "Ŭ", "Ů", "Ű", "Ų", "Ŵ", "Ŷ", ["Ÿ", "Ź"], "Ż", "Ž", ["Ɓ", "Ƃ"], "Ƅ", ["Ɔ", "Ƈ"], ["Ɖ", "Ƌ"], ["Ǝ", "Ƒ"], ["Ɠ", "Ɣ"], ["Ɩ", "Ƙ"], ["Ɯ", "Ɲ"], ["Ɵ", "Ơ"], "Ƣ", "Ƥ", ["Ʀ", "Ƨ"], "Ʃ", "Ƭ", ["Ʈ", "Ư"], ["Ʊ", "Ƴ"], "Ƶ", ["Ʒ", "Ƹ"], "Ƽ", "DŽ", "LJ", "NJ", "Ǎ", "Ǐ", "Ǒ", "Ǔ", "Ǖ", "Ǘ", "Ǚ", "Ǜ", "Ǟ", "Ǡ", "Ǣ", "Ǥ", "Ǧ", "Ǩ", "Ǫ", "Ǭ", "Ǯ", "DZ", "Ǵ", ["Ƕ", "Ǹ"], "Ǻ", "Ǽ", "Ǿ", "Ȁ", "Ȃ", "Ȅ", "Ȇ", "Ȉ", "Ȋ", "Ȍ", "Ȏ", "Ȑ", "Ȓ", "Ȕ", "Ȗ", "Ș", "Ț", "Ȝ", "Ȟ", "Ƞ", "Ȣ", "Ȥ", "Ȧ", "Ȩ", "Ȫ", "Ȭ", "Ȯ", "Ȱ", "Ȳ", ["Ⱥ", "Ȼ"], ["Ƚ", "Ⱦ"], "Ɂ", ["Ƀ", "Ɇ"], "Ɉ", "Ɋ", "Ɍ", "Ɏ", "Ͱ", "Ͳ", "Ͷ", "Ϳ", "Ά", ["Έ", "Ί"], "Ό", ["Ύ", "Ώ"], ["Α", "Ρ"], ["Σ", "Ϋ"], "Ϗ", ["ϒ", "ϔ"], "Ϙ", "Ϛ", "Ϝ", "Ϟ", "Ϡ", "Ϣ", "Ϥ", "Ϧ", "Ϩ", "Ϫ", "Ϭ", "Ϯ", "ϴ", "Ϸ", ["Ϲ", "Ϻ"], ["Ͻ", "Я"], "Ѡ", "Ѣ", "Ѥ", "Ѧ", "Ѩ", "Ѫ", "Ѭ", "Ѯ", "Ѱ", "Ѳ", "Ѵ", "Ѷ", "Ѹ", "Ѻ", "Ѽ", "Ѿ", "Ҁ", "Ҋ", "Ҍ", "Ҏ", "Ґ", "Ғ", "Ҕ", "Җ", "Ҙ", "Қ", "Ҝ", "Ҟ", "Ҡ", "Ң", "Ҥ", "Ҧ", "Ҩ", "Ҫ", "Ҭ", "Ү", "Ұ", "Ҳ", "Ҵ", "Ҷ", "Ҹ", "Һ", "Ҽ", "Ҿ", ["Ӏ", "Ӂ"], "Ӄ", "Ӆ", "Ӈ", "Ӊ", "Ӌ", "Ӎ", "Ӑ", "Ӓ", "Ӕ", "Ӗ", "Ә", "Ӛ", "Ӝ", "Ӟ", "Ӡ", "Ӣ", "Ӥ", "Ӧ", "Ө", "Ӫ", "Ӭ", "Ӯ", "Ӱ", "Ӳ", "Ӵ", "Ӷ", "Ӹ", "Ӻ", "Ӽ", "Ӿ", "Ԁ", "Ԃ", "Ԅ", "Ԇ", "Ԉ", "Ԋ", "Ԍ", "Ԏ", "Ԑ", "Ԓ", "Ԕ", "Ԗ", "Ԙ", "Ԛ", "Ԝ", "Ԟ", "Ԡ", "Ԣ", "Ԥ", "Ԧ", "Ԩ", "Ԫ", "Ԭ", "Ԯ", ["Ա", "Ֆ"], ["Ⴀ", "Ⴥ"], "Ⴧ", "Ⴭ", ["Ꭰ", "Ᏽ"], ["Ა", "Ჺ"], ["Ჽ", "Ჿ"], "Ḁ", "Ḃ", "Ḅ", "Ḇ", "Ḉ", "Ḋ", "Ḍ", "Ḏ", "Ḑ", "Ḓ", "Ḕ", "Ḗ", "Ḙ", "Ḛ", "Ḝ", "Ḟ", "Ḡ", "Ḣ", "Ḥ", "Ḧ", "Ḩ", "Ḫ", "Ḭ", "Ḯ", "Ḱ", "Ḳ", "Ḵ", "Ḷ", "Ḹ", "Ḻ", "Ḽ", "Ḿ", "Ṁ", "Ṃ", "Ṅ", "Ṇ", "Ṉ", "Ṋ", "Ṍ", "Ṏ", "Ṑ", "Ṓ", "Ṕ", "Ṗ", "Ṙ", "Ṛ", "Ṝ", "Ṟ", "Ṡ", "Ṣ", "Ṥ", "Ṧ", "Ṩ", "Ṫ", "Ṭ", "Ṯ", "Ṱ", "Ṳ", "Ṵ", "Ṷ", "Ṹ", "Ṻ", "Ṽ", "Ṿ", "Ẁ", "Ẃ", "Ẅ", "Ẇ", "Ẉ", "Ẋ", "Ẍ", "Ẏ", "Ẑ", "Ẓ", "Ẕ", "ẞ", "Ạ", "Ả", "Ấ", "Ầ", "Ẩ", "Ẫ", "Ậ", "Ắ", "Ằ", "Ẳ", "Ẵ", "Ặ", "Ẹ", "Ẻ", "Ẽ", "Ế", "Ề", "Ể", "Ễ", "Ệ", "Ỉ", "Ị", "Ọ", "Ỏ", "Ố", "Ồ", "Ổ", "Ỗ", "Ộ", "Ớ", "Ờ", "Ở", "Ỡ", "Ợ", "Ụ", "Ủ", "Ứ", "Ừ", "Ử", "Ữ", "Ự", "Ỳ", "Ỵ", "Ỷ", "Ỹ", "Ỻ", "Ỽ", "Ỿ", ["Ἀ", "Ἇ"], ["Ἐ", "Ἕ"], ["Ἠ", "Ἧ"], ["Ἰ", "Ἷ"], ["Ὀ", "Ὅ"], "Ὑ", "Ὓ", "Ὕ", "Ὗ", ["Ὠ", "Ὧ"], ["Ᾰ", "Ά"], ["Ὲ", "Ή"], ["Ῐ", "Ί"], ["Ῠ", "Ῥ"], ["Ὸ", "Ώ"], "ℂ", "ℇ", ["ℋ", "ℍ"], ["ℐ", "ℒ"], "ℕ", ["ℙ", "ℝ"], "ℤ", "Ω", "ℨ", ["K", "ℭ"], ["ℰ", "ℳ"], ["ℾ", "ℿ"], "ⅅ", "Ↄ", ["Ⰰ", "Ⱞ"], "Ⱡ", ["Ɫ", "Ɽ"], "Ⱨ", "Ⱪ", "Ⱬ", ["Ɑ", "Ɒ"], "Ⱳ", "Ⱶ", ["Ȿ", "Ⲁ"], "Ⲃ", "Ⲅ", "Ⲇ", "Ⲉ", "Ⲋ", "Ⲍ", "Ⲏ", "Ⲑ", "Ⲓ", "Ⲕ", "Ⲗ", "Ⲙ", "Ⲛ", "Ⲝ", "Ⲟ", "Ⲡ", "Ⲣ", "Ⲥ", "Ⲧ", "Ⲩ", "Ⲫ", "Ⲭ", "Ⲯ", "Ⲱ", "Ⲳ", "Ⲵ", "Ⲷ", "Ⲹ", "Ⲻ", "Ⲽ", "Ⲿ", "Ⳁ", "Ⳃ", "Ⳅ", "Ⳇ", "Ⳉ", "Ⳋ", "Ⳍ", "Ⳏ", "Ⳑ", "Ⳓ", "Ⳕ", "Ⳗ", "Ⳙ", "Ⳛ", "Ⳝ", "Ⳟ", "Ⳡ", "Ⳣ", "Ⳬ", "Ⳮ", "Ⳳ", "Ꙁ", "Ꙃ", "Ꙅ", "Ꙇ", "Ꙉ", "Ꙋ", "Ꙍ", "Ꙏ", "Ꙑ", "Ꙓ", "Ꙕ", "Ꙗ", "Ꙙ", "Ꙛ", "Ꙝ", "Ꙟ", "Ꙡ", "Ꙣ", "Ꙥ", "Ꙧ", "Ꙩ", "Ꙫ", "Ꙭ", "Ꚁ", "Ꚃ", "Ꚅ", "Ꚇ", "Ꚉ", "Ꚋ", "Ꚍ", "Ꚏ", "Ꚑ", "Ꚓ", "Ꚕ", "Ꚗ", "Ꚙ", "Ꚛ", "Ꜣ", "Ꜥ", "Ꜧ", "Ꜩ", "Ꜫ", "Ꜭ", "Ꜯ", "Ꜳ", "Ꜵ", "Ꜷ", "Ꜹ", "Ꜻ", "Ꜽ", "Ꜿ", "Ꝁ", "Ꝃ", "Ꝅ", "Ꝇ", "Ꝉ", "Ꝋ", "Ꝍ", "Ꝏ", "Ꝑ", "Ꝓ", "Ꝕ", "Ꝗ", "Ꝙ", "Ꝛ", "Ꝝ", "Ꝟ", "Ꝡ", "Ꝣ", "Ꝥ", "Ꝧ", "Ꝩ", "Ꝫ", "Ꝭ", "Ꝯ", "Ꝺ", "Ꝼ", ["Ᵹ", "Ꝿ"], "Ꞁ", "Ꞃ", "Ꞅ", "Ꞇ", "Ꞌ", "Ɥ", "Ꞑ", "Ꞓ", "Ꞗ", "Ꞙ", "Ꞛ", "Ꞝ", "Ꞟ", "Ꞡ", "Ꞣ", "Ꞥ", "Ꞧ", "Ꞩ", ["Ɦ", "Ɪ"], ["Ʞ", "Ꞵ"], "Ꞷ", "Ꞹ", ["A", "Z"]], false, false), peg$c105 = /^[a-z\xB5\xDF-\xF6\xF8-\xFF\u0101\u0103\u0105\u0107\u0109\u010B\u010D\u010F\u0111\u0113\u0115\u0117\u0119\u011B\u011D\u011F\u0121\u0123\u0125\u0127\u0129\u012B\u012D\u012F\u0131\u0133\u0135\u0137-\u0138\u013A\u013C\u013E\u0140\u0142\u0144\u0146\u0148-\u0149\u014B\u014D\u014F\u0151\u0153\u0155\u0157\u0159\u015B\u015D\u015F\u0161\u0163\u0165\u0167\u0169\u016B\u016D\u016F\u0171\u0173\u0175\u0177\u017A\u017C\u017E-\u0180\u0183\u0185\u0188\u018C-\u018D\u0192\u0195\u0199-\u019B\u019E\u01A1\u01A3\u01A5\u01A8\u01AA-\u01AB\u01AD\u01B0\u01B4\u01B6\u01B9-\u01BA\u01BD-\u01BF\u01C6\u01C9\u01CC\u01CE\u01D0\u01D2\u01D4\u01D6\u01D8\u01DA\u01DC-\u01DD\u01DF\u01E1\u01E3\u01E5\u01E7\u01E9\u01EB\u01ED\u01EF-\u01F0\u01F3\u01F5\u01F9\u01FB\u01FD\u01FF\u0201\u0203\u0205\u0207\u0209\u020B\u020D\u020F\u0211\u0213\u0215\u0217\u0219\u021B\u021D\u021F\u0221\u0223\u0225\u0227\u0229\u022B\u022D\u022F\u0231\u0233-\u0239\u023C\u023F-\u0240\u0242\u0247\u0249\u024B\u024D\u024F-\u0293\u0295-\u02AF\u0371\u0373\u0377\u037B-\u037D\u0390\u03AC-\u03CE\u03D0-\u03D1\u03D5-\u03D7\u03D9\u03DB\u03DD\u03DF\u03E1\u03E3\u03E5\u03E7\u03E9\u03EB\u03ED\u03EF-\u03F3\u03F5\u03F8\u03FB-\u03FC\u0430-\u045F\u0461\u0463\u0465\u0467\u0469\u046B\u046D\u046F\u0471\u0473\u0475\u0477\u0479\u047B\u047D\u047F\u0481\u048B\u048D\u048F\u0491\u0493\u0495\u0497\u0499\u049B\u049D\u049F\u04A1\u04A3\u04A5\u04A7\u04A9\u04AB\u04AD\u04AF\u04B1\u04B3\u04B5\u04B7\u04B9\u04BB\u04BD\u04BF\u04C2\u04C4\u04C6\u04C8\u04CA\u04CC\u04CE-\u04CF\u04D1\u04D3\u04D5\u04D7\u04D9\u04DB\u04DD\u04DF\u04E1\u04E3\u04E5\u04E7\u04E9\u04EB\u04ED\u04EF\u04F1\u04F3\u04F5\u04F7\u04F9\u04FB\u04FD\u04FF\u0501\u0503\u0505\u0507\u0509\u050B\u050D\u050F\u0511\u0513\u0515\u0517\u0519\u051B\u051D\u051F\u0521\u0523\u0525\u0527\u0529\u052B\u052D\u052F\u0560-\u0588\u10D0-\u10FA\u10FD-\u10FF\u13F8-\u13FD\u1C80-\u1C88\u1D00-\u1D2B\u1D6B-\u1D77\u1D79-\u1D9A\u1E01\u1E03\u1E05\u1E07\u1E09\u1E0B\u1E0D\u1E0F\u1E11\u1E13\u1E15\u1E17\u1E19\u1E1B\u1E1D\u1E1F\u1E21\u1E23\u1E25\u1E27\u1E29\u1E2B\u1E2D\u1E2F\u1E31\u1E33\u1E35\u1E37\u1E39\u1E3B\u1E3D\u1E3F\u1E41\u1E43\u1E45\u1E47\u1E49\u1E4B\u1E4D\u1E4F\u1E51\u1E53\u1E55\u1E57\u1E59\u1E5B\u1E5D\u1E5F\u1E61\u1E63\u1E65\u1E67\u1E69\u1E6B\u1E6D\u1E6F\u1E71\u1E73\u1E75\u1E77\u1E79\u1E7B\u1E7D\u1E7F\u1E81\u1E83\u1E85\u1E87\u1E89\u1E8B\u1E8D\u1E8F\u1E91\u1E93\u1E95-\u1E9D\u1E9F\u1EA1\u1EA3\u1EA5\u1EA7\u1EA9\u1EAB\u1EAD\u1EAF\u1EB1\u1EB3\u1EB5\u1EB7\u1EB9\u1EBB\u1EBD\u1EBF\u1EC1\u1EC3\u1EC5\u1EC7\u1EC9\u1ECB\u1ECD\u1ECF\u1ED1\u1ED3\u1ED5\u1ED7\u1ED9\u1EDB\u1EDD\u1EDF\u1EE1\u1EE3\u1EE5\u1EE7\u1EE9\u1EEB\u1EED\u1EEF\u1EF1\u1EF3\u1EF5\u1EF7\u1EF9\u1EFB\u1EFD\u1EFF-\u1F07\u1F10-\u1F15\u1F20-\u1F27\u1F30-\u1F37\u1F40-\u1F45\u1F50-\u1F57\u1F60-\u1F67\u1F70-\u1F7D\u1F80-\u1F87\u1F90-\u1F97\u1FA0-\u1FA7\u1FB0-\u1FB4\u1FB6-\u1FB7\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FC7\u1FD0-\u1FD3\u1FD6-\u1FD7\u1FE0-\u1FE7\u1FF2-\u1FF4\u1FF6-\u1FF7\u210A\u210E-\u210F\u2113\u212F\u2134\u2139\u213C-\u213D\u2146-\u2149\u214E\u2184\u2C30-\u2C5E\u2C61\u2C65-\u2C66\u2C68\u2C6A\u2C6C\u2C71\u2C73-\u2C74\u2C76-\u2C7B\u2C81\u2C83\u2C85\u2C87\u2C89\u2C8B\u2C8D\u2C8F\u2C91\u2C93\u2C95\u2C97\u2C99\u2C9B\u2C9D\u2C9F\u2CA1\u2CA3\u2CA5\u2CA7\u2CA9\u2CAB\u2CAD\u2CAF\u2CB1\u2CB3\u2CB5\u2CB7\u2CB9\u2CBB\u2CBD\u2CBF\u2CC1\u2CC3\u2CC5\u2CC7\u2CC9\u2CCB\u2CCD\u2CCF\u2CD1\u2CD3\u2CD5\u2CD7\u2CD9\u2CDB\u2CDD\u2CDF\u2CE1\u2CE3-\u2CE4\u2CEC\u2CEE\u2CF3\u2D00-\u2D25\u2D27\u2D2D\uA641\uA643\uA645\uA647\uA649\uA64B\uA64D\uA64F\uA651\uA653\uA655\uA657\uA659\uA65B\uA65D\uA65F\uA661\uA663\uA665\uA667\uA669\uA66B\uA66D\uA681\uA683\uA685\uA687\uA689\uA68B\uA68D\uA68F\uA691\uA693\uA695\uA697\uA699\uA69B\uA723\uA725\uA727\uA729\uA72B\uA72D\uA72F-\uA731\uA733\uA735\uA737\uA739\uA73B\uA73D\uA73F\uA741\uA743\uA745\uA747\uA749\uA74B\uA74D\uA74F\uA751\uA753\uA755\uA757\uA759\uA75B\uA75D\uA75F\uA761\uA763\uA765\uA767\uA769\uA76B\uA76D\uA76F\uA771-\uA778\uA77A\uA77C\uA77F\uA781\uA783\uA785\uA787\uA78C\uA78E\uA791\uA793-\uA795\uA797\uA799\uA79B\uA79D\uA79F\uA7A1\uA7A3\uA7A5\uA7A7\uA7A9\uA7AF\uA7B5\uA7B7\uA7B9\uA7FA\uAB30-\uAB5A\uAB60-\uAB65\uAB70-\uABBF\uFB00-\uFB06\uFB13-\uFB17\uFF41-\uFF5A]/, peg$c106 = peg$classExpectation([["a", "z"], "µ", ["ß", "ö"], ["ø", "ÿ"], "ā", "ă", "ą", "ć", "ĉ", "ċ", "č", "ď", "đ", "ē", "ĕ", "ė", "ę", "ě", "ĝ", "ğ", "ġ", "ģ", "ĥ", "ħ", "ĩ", "ī", "ĭ", "į", "ı", "ij", "ĵ", ["ķ", "ĸ"], "ĺ", "ļ", "ľ", "ŀ", "ł", "ń", "ņ", ["ň", "ʼn"], "ŋ", "ō", "ŏ", "ő", "œ", "ŕ", "ŗ", "ř", "ś", "ŝ", "ş", "š", "ţ", "ť", "ŧ", "ũ", "ū", "ŭ", "ů", "ű", "ų", "ŵ", "ŷ", "ź", "ż", ["ž", "ƀ"], "ƃ", "ƅ", "ƈ", ["ƌ", "ƍ"], "ƒ", "ƕ", ["ƙ", "ƛ"], "ƞ", "ơ", "ƣ", "ƥ", "ƨ", ["ƪ", "ƫ"], "ƭ", "ư", "ƴ", "ƶ", ["ƹ", "ƺ"], ["ƽ", "ƿ"], "dž", "lj", "nj", "ǎ", "ǐ", "ǒ", "ǔ", "ǖ", "ǘ", "ǚ", ["ǜ", "ǝ"], "ǟ", "ǡ", "ǣ", "ǥ", "ǧ", "ǩ", "ǫ", "ǭ", ["ǯ", "ǰ"], "dz", "ǵ", "ǹ", "ǻ", "ǽ", "ǿ", "ȁ", "ȃ", "ȅ", "ȇ", "ȉ", "ȋ", "ȍ", "ȏ", "ȑ", "ȓ", "ȕ", "ȗ", "ș", "ț", "ȝ", "ȟ", "ȡ", "ȣ", "ȥ", "ȧ", "ȩ", "ȫ", "ȭ", "ȯ", "ȱ", ["ȳ", "ȹ"], "ȼ", ["ȿ", "ɀ"], "ɂ", "ɇ", "ɉ", "ɋ", "ɍ", ["ɏ", "ʓ"], ["ʕ", "ʯ"], "ͱ", "ͳ", "ͷ", ["ͻ", "ͽ"], "ΐ", ["ά", "ώ"], ["ϐ", "ϑ"], ["ϕ", "ϗ"], "ϙ", "ϛ", "ϝ", "ϟ", "ϡ", "ϣ", "ϥ", "ϧ", "ϩ", "ϫ", "ϭ", ["ϯ", "ϳ"], "ϵ", "ϸ", ["ϻ", "ϼ"], ["а", "џ"], "ѡ", "ѣ", "ѥ", "ѧ", "ѩ", "ѫ", "ѭ", "ѯ", "ѱ", "ѳ", "ѵ", "ѷ", "ѹ", "ѻ", "ѽ", "ѿ", "ҁ", "ҋ", "ҍ", "ҏ", "ґ", "ғ", "ҕ", "җ", "ҙ", "қ", "ҝ", "ҟ", "ҡ", "ң", "ҥ", "ҧ", "ҩ", "ҫ", "ҭ", "ү", "ұ", "ҳ", "ҵ", "ҷ", "ҹ", "һ", "ҽ", "ҿ", "ӂ", "ӄ", "ӆ", "ӈ", "ӊ", "ӌ", ["ӎ", "ӏ"], "ӑ", "ӓ", "ӕ", "ӗ", "ә", "ӛ", "ӝ", "ӟ", "ӡ", "ӣ", "ӥ", "ӧ", "ө", "ӫ", "ӭ", "ӯ", "ӱ", "ӳ", "ӵ", "ӷ", "ӹ", "ӻ", "ӽ", "ӿ", "ԁ", "ԃ", "ԅ", "ԇ", "ԉ", "ԋ", "ԍ", "ԏ", "ԑ", "ԓ", "ԕ", "ԗ", "ԙ", "ԛ", "ԝ", "ԟ", "ԡ", "ԣ", "ԥ", "ԧ", "ԩ", "ԫ", "ԭ", "ԯ", ["ՠ", "ֈ"], ["ა", "ჺ"], ["ჽ", "ჿ"], ["ᏸ", "ᏽ"], ["ᲀ", "ᲈ"], ["ᴀ", "ᴫ"], ["ᵫ", "ᵷ"], ["ᵹ", "ᶚ"], "ḁ", "ḃ", "ḅ", "ḇ", "ḉ", "ḋ", "ḍ", "ḏ", "ḑ", "ḓ", "ḕ", "ḗ", "ḙ", "ḛ", "ḝ", "ḟ", "ḡ", "ḣ", "ḥ", "ḧ", "ḩ", "ḫ", "ḭ", "ḯ", "ḱ", "ḳ", "ḵ", "ḷ", "ḹ", "ḻ", "ḽ", "ḿ", "ṁ", "ṃ", "ṅ", "ṇ", "ṉ", "ṋ", "ṍ", "ṏ", "ṑ", "ṓ", "ṕ", "ṗ", "ṙ", "ṛ", "ṝ", "ṟ", "ṡ", "ṣ", "ṥ", "ṧ", "ṩ", "ṫ", "ṭ", "ṯ", "ṱ", "ṳ", "ṵ", "ṷ", "ṹ", "ṻ", "ṽ", "ṿ", "ẁ", "ẃ", "ẅ", "ẇ", "ẉ", "ẋ", "ẍ", "ẏ", "ẑ", "ẓ", ["ẕ", "ẝ"], "ẟ", "ạ", "ả", "ấ", "ầ", "ẩ", "ẫ", "ậ", "ắ", "ằ", "ẳ", "ẵ", "ặ", "ẹ", "ẻ", "ẽ", "ế", "ề", "ể", "ễ", "ệ", "ỉ", "ị", "ọ", "ỏ", "ố", "ồ", "ổ", "ỗ", "ộ", "ớ", "ờ", "ở", "ỡ", "ợ", "ụ", "ủ", "ứ", "ừ", "ử", "ữ", "ự", "ỳ", "ỵ", "ỷ", "ỹ", "ỻ", "ỽ", ["ỿ", "ἇ"], ["ἐ", "ἕ"], ["ἠ", "ἧ"], ["ἰ", "ἷ"], ["ὀ", "ὅ"], ["ὐ", "ὗ"], ["ὠ", "ὧ"], ["ὰ", "ώ"], ["ᾀ", "ᾇ"], ["ᾐ", "ᾗ"], ["ᾠ", "ᾧ"], ["ᾰ", "ᾴ"], ["ᾶ", "ᾷ"], "ι", ["ῂ", "ῄ"], ["ῆ", "ῇ"], ["ῐ", "ΐ"], ["ῖ", "ῗ"], ["ῠ", "ῧ"], ["ῲ", "ῴ"], ["ῶ", "ῷ"], "ℊ", ["ℎ", "ℏ"], "ℓ", "ℯ", "ℴ", "ℹ", ["ℼ", "ℽ"], ["ⅆ", "ⅉ"], "ⅎ", "ↄ", ["ⰰ", "ⱞ"], "ⱡ", ["ⱥ", "ⱦ"], "ⱨ", "ⱪ", "ⱬ", "ⱱ", ["ⱳ", "ⱴ"], ["ⱶ", "ⱻ"], "ⲁ", "ⲃ", "ⲅ", "ⲇ", "ⲉ", "ⲋ", "ⲍ", "ⲏ", "ⲑ", "ⲓ", "ⲕ", "ⲗ", "ⲙ", "ⲛ", "ⲝ", "ⲟ", "ⲡ", "ⲣ", "ⲥ", "ⲧ", "ⲩ", "ⲫ", "ⲭ", "ⲯ", "ⲱ", "ⲳ", "ⲵ", "ⲷ", "ⲹ", "ⲻ", "ⲽ", "ⲿ", "ⳁ", "ⳃ", "ⳅ", "ⳇ", "ⳉ", "ⳋ", "ⳍ", "ⳏ", "ⳑ", "ⳓ", "ⳕ", "ⳗ", "ⳙ", "ⳛ", "ⳝ", "ⳟ", "ⳡ", ["ⳣ", "ⳤ"], "ⳬ", "ⳮ", "ⳳ", ["ⴀ", "ⴥ"], "ⴧ", "ⴭ", "ꙁ", "ꙃ", "ꙅ", "ꙇ", "ꙉ", "ꙋ", "ꙍ", "ꙏ", "ꙑ", "ꙓ", "ꙕ", "ꙗ", "ꙙ", "ꙛ", "ꙝ", "ꙟ", "ꙡ", "ꙣ", "ꙥ", "ꙧ", "ꙩ", "ꙫ", "ꙭ", "ꚁ", "ꚃ", "ꚅ", "ꚇ", "ꚉ", "ꚋ", "ꚍ", "ꚏ", "ꚑ", "ꚓ", "ꚕ", "ꚗ", "ꚙ", "ꚛ", "ꜣ", "ꜥ", "ꜧ", "ꜩ", "ꜫ", "ꜭ", ["ꜯ", "ꜱ"], "ꜳ", "ꜵ", "ꜷ", "ꜹ", "ꜻ", "ꜽ", "ꜿ", "ꝁ", "ꝃ", "ꝅ", "ꝇ", "ꝉ", "ꝋ", "ꝍ", "ꝏ", "ꝑ", "ꝓ", "ꝕ", "ꝗ", "ꝙ", "ꝛ", "ꝝ", "ꝟ", "ꝡ", "ꝣ", "ꝥ", "ꝧ", "ꝩ", "ꝫ", "ꝭ", "ꝯ", ["ꝱ", "ꝸ"], "ꝺ", "ꝼ", "ꝿ", "ꞁ", "ꞃ", "ꞅ", "ꞇ", "ꞌ", "ꞎ", "ꞑ", ["ꞓ", "ꞕ"], "ꞗ", "ꞙ", "ꞛ", "ꞝ", "ꞟ", "ꞡ", "ꞣ", "ꞥ", "ꞧ", "ꞩ", "ꞯ", "ꞵ", "ꞷ", "ꞹ", "ꟺ", ["ꬰ", "ꭚ"], ["ꭠ", "ꭥ"], ["ꭰ", "ꮿ"], ["ff", "st"], ["ﬓ", "ﬗ"], ["a", "z"]], false, false), peg$c107 = /^[\u01C5\u01C8\u01CB\u01F2\u1F88-\u1F8F\u1F98-\u1F9F\u1FA8-\u1FAF\u1FBC\u1FCC\u1FFC]/, peg$c108 = peg$classExpectation(["Dž", "Lj", "Nj", "Dz", ["ᾈ", "ᾏ"], ["ᾘ", "ᾟ"], ["ᾨ", "ᾯ"], "ᾼ", "ῌ", "ῼ"], false, false), peg$c109 = /^[\u02B0-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0374\u037A\u0559\u0640\u06E5-\u06E6\u07F4-\u07F5\u07FA\u081A\u0824\u0828\u0971\u0E46\u0EC6\u10FC\u17D7\u1843\u1AA7\u1C78-\u1C7D\u1D2C-\u1D6A\u1D78\u1D9B-\u1DBF\u2071\u207F\u2090-\u209C\u2C7C-\u2C7D\u2D6F\u2E2F\u3005\u3031-\u3035\u303B\u309D-\u309E\u30FC-\u30FE\uA015\uA4F8-\uA4FD\uA60C\uA67F\uA69C-\uA69D\uA717-\uA71F\uA770\uA788\uA7F8-\uA7F9\uA9CF\uA9E6\uAA70\uAADD\uAAF3-\uAAF4\uAB5C-\uAB5F\uFF70\uFF9E-\uFF9F]/, peg$c110 = peg$classExpectation([["ʰ", "ˁ"], ["ˆ", "ˑ"], ["ˠ", "ˤ"], "ˬ", "ˮ", "ʹ", "ͺ", "ՙ", "ـ", ["ۥ", "ۦ"], ["ߴ", "ߵ"], "ߺ", "ࠚ", "ࠤ", "ࠨ", "ॱ", "ๆ", "ໆ", "ჼ", "ៗ", "ᡃ", "ᪧ", ["ᱸ", "ᱽ"], ["ᴬ", "ᵪ"], "ᵸ", ["ᶛ", "ᶿ"], "ⁱ", "ⁿ", ["ₐ", "ₜ"], ["ⱼ", "ⱽ"], "ⵯ", "ⸯ", "々", ["〱", "〵"], "〻", ["ゝ", "ゞ"], ["ー", "ヾ"], "ꀕ", ["ꓸ", "ꓽ"], "ꘌ", "ꙿ", ["ꚜ", "ꚝ"], ["ꜗ", "ꜟ"], "ꝰ", "ꞈ", ["ꟸ", "ꟹ"], "ꧏ", "ꧦ", "ꩰ", "ꫝ", ["ꫳ", "ꫴ"], ["ꭜ", "ꭟ"], "ー", ["゙", "゚"]], false, false), peg$c111 = /^[\xAA\xBA\u01BB\u01C0-\u01C3\u0294\u05D0-\u05EA\u05EF-\u05F2\u0620-\u063F\u0641-\u064A\u066E-\u066F\u0671-\u06D3\u06D5\u06EE-\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u0800-\u0815\u0840-\u0858\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u0904-\u0939\u093D\u0950\u0958-\u0961\u0972-\u0980\u0985-\u098C\u098F-\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC-\u09DD\u09DF-\u09E1\u09F0-\u09F1\u09FC\u0A05-\u0A0A\u0A0F-\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32-\u0A33\u0A35-\u0A36\u0A38-\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2-\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0-\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F-\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32-\u0B33\u0B35-\u0B39\u0B3D\u0B5C-\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99-\u0B9A\u0B9C\u0B9E-\u0B9F\u0BA3-\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60-\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0-\u0CE1\u0CF1-\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32-\u0E33\u0E40-\u0E45\u0E81-\u0E82\u0E84\u0E87-\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA-\u0EAB\u0EAD-\u0EB0\u0EB2-\u0EB3\u0EBD\u0EC0-\u0EC4\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065-\u1066\u106E-\u1070\u1075-\u1081\u108E\u1100-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17DC\u1820-\u1842\u1844-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE-\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C77\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5-\u1CF6\u2135-\u2138\u2D30-\u2D67\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3006\u303C\u3041-\u3096\u309F\u30A1-\u30FA\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEF\uA000-\uA014\uA016-\uA48C\uA4D0-\uA4F7\uA500-\uA60B\uA610-\uA61F\uA62A-\uA62B\uA66E\uA6A0-\uA6E5\uA78F\uA7F7\uA7FB-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD-\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9E0-\uA9E4\uA9E7-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA6F\uAA71-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5-\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADC\uAAE0-\uAAEA\uAAF2\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40-\uFB41\uFB43-\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF66-\uFF6F\uFF71-\uFF9D\uFFA0-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]/, peg$c112 = peg$classExpectation(["ª", "º", "ƻ", ["ǀ", "ǃ"], "ʔ", ["א", "ת"], ["ׯ", "ײ"], ["ؠ", "ؿ"], ["ف", "ي"], ["ٮ", "ٯ"], ["ٱ", "ۓ"], "ە", ["ۮ", "ۯ"], ["ۺ", "ۼ"], "ۿ", "ܐ", ["ܒ", "ܯ"], ["ݍ", "ޥ"], "ޱ", ["ߊ", "ߪ"], ["ࠀ", "ࠕ"], ["ࡀ", "ࡘ"], ["ࡠ", "ࡪ"], ["ࢠ", "ࢴ"], ["ࢶ", "ࢽ"], ["ऄ", "ह"], "ऽ", "ॐ", ["क़", "ॡ"], ["ॲ", "ঀ"], ["অ", "ঌ"], ["এ", "ঐ"], ["ও", "ন"], ["প", "র"], "ল", ["শ", "হ"], "ঽ", "ৎ", ["ড়", "ঢ়"], ["য়", "ৡ"], ["ৰ", "ৱ"], "ৼ", ["ਅ", "ਊ"], ["ਏ", "ਐ"], ["ਓ", "ਨ"], ["ਪ", "ਰ"], ["ਲ", "ਲ਼"], ["ਵ", "ਸ਼"], ["ਸ", "ਹ"], ["ਖ਼", "ੜ"], "ਫ਼", ["ੲ", "ੴ"], ["અ", "ઍ"], ["એ", "ઑ"], ["ઓ", "ન"], ["પ", "ર"], ["લ", "ળ"], ["વ", "હ"], "ઽ", "ૐ", ["ૠ", "ૡ"], "ૹ", ["ଅ", "ଌ"], ["ଏ", "ଐ"], ["ଓ", "ନ"], ["ପ", "ର"], ["ଲ", "ଳ"], ["ଵ", "ହ"], "ଽ", ["ଡ଼", "ଢ଼"], ["ୟ", "ୡ"], "ୱ", "ஃ", ["அ", "ஊ"], ["எ", "ஐ"], ["ஒ", "க"], ["ங", "ச"], "ஜ", ["ஞ", "ட"], ["ண", "த"], ["ந", "ப"], ["ம", "ஹ"], "ௐ", ["అ", "ఌ"], ["ఎ", "ఐ"], ["ఒ", "న"], ["ప", "హ"], "ఽ", ["ౘ", "ౚ"], ["ౠ", "ౡ"], "ಀ", ["ಅ", "ಌ"], ["ಎ", "ಐ"], ["ಒ", "ನ"], ["ಪ", "ಳ"], ["ವ", "ಹ"], "ಽ", "ೞ", ["ೠ", "ೡ"], ["ೱ", "ೲ"], ["അ", "ഌ"], ["എ", "ഐ"], ["ഒ", "ഺ"], "ഽ", "ൎ", ["ൔ", "ൖ"], ["ൟ", "ൡ"], ["ൺ", "ൿ"], ["අ", "ඖ"], ["ක", "න"], ["ඳ", "ර"], "ල", ["ව", "ෆ"], ["ก", "ะ"], ["า", "ำ"], ["เ", "ๅ"], ["ກ", "ຂ"], "ຄ", ["ງ", "ຈ"], "ຊ", "ຍ", ["ດ", "ທ"], ["ນ", "ຟ"], ["ມ", "ຣ"], "ລ", "ວ", ["ສ", "ຫ"], ["ອ", "ະ"], ["າ", "ຳ"], "ຽ", ["ເ", "ໄ"], ["ໜ", "ໟ"], "ༀ", ["ཀ", "ཇ"], ["ཉ", "ཬ"], ["ྈ", "ྌ"], ["က", "ဪ"], "ဿ", ["ၐ", "ၕ"], ["ၚ", "ၝ"], "ၡ", ["ၥ", "ၦ"], ["ၮ", "ၰ"], ["ၵ", "ႁ"], "ႎ", ["ᄀ", "ቈ"], ["ቊ", "ቍ"], ["ቐ", "ቖ"], "ቘ", ["ቚ", "ቝ"], ["በ", "ኈ"], ["ኊ", "ኍ"], ["ነ", "ኰ"], ["ኲ", "ኵ"], ["ኸ", "ኾ"], "ዀ", ["ዂ", "ዅ"], ["ወ", "ዖ"], ["ዘ", "ጐ"], ["ጒ", "ጕ"], ["ጘ", "ፚ"], ["ᎀ", "ᎏ"], ["ᐁ", "ᙬ"], ["ᙯ", "ᙿ"], ["ᚁ", "ᚚ"], ["ᚠ", "ᛪ"], ["ᛱ", "ᛸ"], ["ᜀ", "ᜌ"], ["ᜎ", "ᜑ"], ["ᜠ", "ᜱ"], ["ᝀ", "ᝑ"], ["ᝠ", "ᝬ"], ["ᝮ", "ᝰ"], ["ក", "ឳ"], "ៜ", ["ᠠ", "ᡂ"], ["ᡄ", "ᡸ"], ["ᢀ", "ᢄ"], ["ᢇ", "ᢨ"], "ᢪ", ["ᢰ", "ᣵ"], ["ᤀ", "ᤞ"], ["ᥐ", "ᥭ"], ["ᥰ", "ᥴ"], ["ᦀ", "ᦫ"], ["ᦰ", "ᧉ"], ["ᨀ", "ᨖ"], ["ᨠ", "ᩔ"], ["ᬅ", "ᬳ"], ["ᭅ", "ᭋ"], ["ᮃ", "ᮠ"], ["ᮮ", "ᮯ"], ["ᮺ", "ᯥ"], ["ᰀ", "ᰣ"], ["ᱍ", "ᱏ"], ["ᱚ", "ᱷ"], ["ᳩ", "ᳬ"], ["ᳮ", "ᳱ"], ["ᳵ", "ᳶ"], ["ℵ", "ℸ"], ["ⴰ", "ⵧ"], ["ⶀ", "ⶖ"], ["ⶠ", "ⶦ"], ["ⶨ", "ⶮ"], ["ⶰ", "ⶶ"], ["ⶸ", "ⶾ"], ["ⷀ", "ⷆ"], ["ⷈ", "ⷎ"], ["ⷐ", "ⷖ"], ["ⷘ", "ⷞ"], "〆", "〼", ["ぁ", "ゖ"], "ゟ", ["ァ", "ヺ"], "ヿ", ["ㄅ", "ㄯ"], ["ㄱ", "ㆎ"], ["ㆠ", "ㆺ"], ["ㇰ", "ㇿ"], ["㐀", "䶵"], ["一", "鿯"], ["ꀀ", "ꀔ"], ["ꀖ", "ꒌ"], ["ꓐ", "ꓷ"], ["ꔀ", "ꘋ"], ["ꘐ", "ꘟ"], ["ꘪ", "ꘫ"], "ꙮ", ["ꚠ", "ꛥ"], "ꞏ", "ꟷ", ["ꟻ", "ꠁ"], ["ꠃ", "ꠅ"], ["ꠇ", "ꠊ"], ["ꠌ", "ꠢ"], ["ꡀ", "ꡳ"], ["ꢂ", "ꢳ"], ["ꣲ", "ꣷ"], "ꣻ", ["ꣽ", "ꣾ"], ["ꤊ", "ꤥ"], ["ꤰ", "ꥆ"], ["ꥠ", "ꥼ"], ["ꦄ", "ꦲ"], ["ꧠ", "ꧤ"], ["ꧧ", "ꧯ"], ["ꧺ", "ꧾ"], ["ꨀ", "ꨨ"], ["ꩀ", "ꩂ"], ["ꩄ", "ꩋ"], ["ꩠ", "ꩯ"], ["ꩱ", "ꩶ"], "ꩺ", ["ꩾ", "ꪯ"], "ꪱ", ["ꪵ", "ꪶ"], ["ꪹ", "ꪽ"], "ꫀ", "ꫂ", ["ꫛ", "ꫜ"], ["ꫠ", "ꫪ"], "ꫲ", ["ꬁ", "ꬆ"], ["ꬉ", "ꬎ"], ["ꬑ", "ꬖ"], ["ꬠ", "ꬦ"], ["ꬨ", "ꬮ"], ["ꯀ", "ꯢ"], ["가", "힣"], ["ힰ", "ퟆ"], ["ퟋ", "ퟻ"], ["豈", "舘"], ["並", "龎"], "יִ", ["ײַ", "ﬨ"], ["שׁ", "זּ"], ["טּ", "לּ"], "מּ", ["נּ", "סּ"], ["ףּ", "פּ"], ["צּ", "ﮱ"], ["ﯓ", "ﴽ"], ["ﵐ", "ﶏ"], ["ﶒ", "ﷇ"], ["ﷰ", "ﷻ"], ["ﹰ", "ﹴ"], ["ﹶ", "ﻼ"], ["ヲ", "ッ"], ["ア", "ン"], ["ᅠ", "ᄒ"], ["ᅡ", "ᅦ"], ["ᅧ", "ᅬ"], ["ᅭ", "ᅲ"], ["ᅳ", "ᅵ"]], false, false), peg$c113 = /^[\u16EE-\u16F0\u2160-\u2182\u2185-\u2188\u3007\u3021-\u3029\u3038-\u303A\uA6E6-\uA6EF]/, peg$c114 = peg$classExpectation([["ᛮ", "ᛰ"], ["Ⅰ", "ↂ"], ["ↅ", "ↈ"], "〇", ["〡", "〩"], ["〸", "〺"], ["ꛦ", "ꛯ"]], false, false), peg$c115 = /^[\u0300-\u036F\u0483-\u0487\u0591-\u05BD\u05BF\u05C1-\u05C2\u05C4-\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7-\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u07FD\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08D3-\u08E1\u08E3-\u0902\u093A\u093C\u0941-\u0948\u094D\u0951-\u0957\u0962-\u0963\u0981\u09BC\u09C1-\u09C4\u09CD\u09E2-\u09E3\u09FE\u0A01-\u0A02\u0A3C\u0A41-\u0A42\u0A47-\u0A48\u0A4B-\u0A4D\u0A51\u0A70-\u0A71\u0A75\u0A81-\u0A82\u0ABC\u0AC1-\u0AC5\u0AC7-\u0AC8\u0ACD\u0AE2-\u0AE3\u0AFA-\u0AFF\u0B01\u0B3C\u0B3F\u0B41-\u0B44\u0B4D\u0B56\u0B62-\u0B63\u0B82\u0BC0\u0BCD\u0C00\u0C04\u0C3E-\u0C40\u0C46-\u0C48\u0C4A-\u0C4D\u0C55-\u0C56\u0C62-\u0C63\u0C81\u0CBC\u0CBF\u0CC6\u0CCC-\u0CCD\u0CE2-\u0CE3\u0D00-\u0D01\u0D3B-\u0D3C\u0D41-\u0D44\u0D4D\u0D62-\u0D63\u0DCA\u0DD2-\u0DD4\u0DD6\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB-\u0EBC\u0EC8-\u0ECD\u0F18-\u0F19\u0F35\u0F37\u0F39\u0F71-\u0F7E\u0F80-\u0F84\u0F86-\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102D-\u1030\u1032-\u1037\u1039-\u103A\u103D-\u103E\u1058-\u1059\u105E-\u1060\u1071-\u1074\u1082\u1085-\u1086\u108D\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752-\u1753\u1772-\u1773\u17B4-\u17B5\u17B7-\u17BD\u17C6\u17C9-\u17D3\u17DD\u180B-\u180D\u1885-\u1886\u18A9\u1920-\u1922\u1927-\u1928\u1932\u1939-\u193B\u1A17-\u1A18\u1A1B\u1A56\u1A58-\u1A5E\u1A60\u1A62\u1A65-\u1A6C\u1A73-\u1A7C\u1A7F\u1AB0-\u1ABD\u1B00-\u1B03\u1B34\u1B36-\u1B3A\u1B3C\u1B42\u1B6B-\u1B73\u1B80-\u1B81\u1BA2-\u1BA5\u1BA8-\u1BA9\u1BAB-\u1BAD\u1BE6\u1BE8-\u1BE9\u1BED\u1BEF-\u1BF1\u1C2C-\u1C33\u1C36-\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE0\u1CE2-\u1CE8\u1CED\u1CF4\u1CF8-\u1CF9\u1DC0-\u1DF9\u1DFB-\u1DFF\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302D\u3099-\u309A\uA66F\uA674-\uA67D\uA69E-\uA69F\uA6F0-\uA6F1\uA802\uA806\uA80B\uA825-\uA826\uA8C4-\uA8C5\uA8E0-\uA8F1\uA8FF\uA926-\uA92D\uA947-\uA951\uA980-\uA982\uA9B3\uA9B6-\uA9B9\uA9BC\uA9E5\uAA29-\uAA2E\uAA31-\uAA32\uAA35-\uAA36\uAA43\uAA4C\uAA7C\uAAB0\uAAB2-\uAAB4\uAAB7-\uAAB8\uAABE-\uAABF\uAAC1\uAAEC-\uAAED\uAAF6\uABE5\uABE8\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F]/, peg$c116 = peg$classExpectation([["̀", "ͯ"], ["҃", "҇"], ["֑", "ֽ"], "ֿ", ["ׁ", "ׂ"], ["ׄ", "ׅ"], "ׇ", ["ؐ", "ؚ"], ["ً", "ٟ"], "ٰ", ["ۖ", "ۜ"], ["۟", "ۤ"], ["ۧ", "ۨ"], ["۪", "ۭ"], "ܑ", ["ܰ", "݊"], ["ަ", "ް"], ["߫", "߳"], "߽", ["ࠖ", "࠙"], ["ࠛ", "ࠣ"], ["ࠥ", "ࠧ"], ["ࠩ", "࠭"], ["࡙", "࡛"], ["࣓", "࣡"], ["ࣣ", "ं"], "ऺ", "़", ["ु", "ै"], "्", ["॑", "ॗ"], ["ॢ", "ॣ"], "ঁ", "়", ["ু", "ৄ"], "্", ["ৢ", "ৣ"], "৾", ["ਁ", "ਂ"], "਼", ["ੁ", "ੂ"], ["ੇ", "ੈ"], ["ੋ", "੍"], "ੑ", ["ੰ", "ੱ"], "ੵ", ["ઁ", "ં"], "઼", ["ુ", "ૅ"], ["ે", "ૈ"], "્", ["ૢ", "ૣ"], ["ૺ", "૿"], "ଁ", "଼", "ି", ["ୁ", "ୄ"], "୍", "ୖ", ["ୢ", "ୣ"], "ஂ", "ீ", "்", "ఀ", "ఄ", ["ా", "ీ"], ["ె", "ై"], ["ొ", "్"], ["ౕ", "ౖ"], ["ౢ", "ౣ"], "ಁ", "಼", "ಿ", "ೆ", ["ೌ", "್"], ["ೢ", "ೣ"], ["ഀ", "ഁ"], ["഻", "഼"], ["ു", "ൄ"], "്", ["ൢ", "ൣ"], "්", ["ි", "ු"], "ූ", "ั", ["ิ", "ฺ"], ["็", "๎"], "ັ", ["ິ", "ູ"], ["ົ", "ຼ"], ["່", "ໍ"], ["༘", "༙"], "༵", "༷", "༹", ["ཱ", "ཾ"], ["ྀ", "྄"], ["྆", "྇"], ["ྍ", "ྗ"], ["ྙ", "ྼ"], "࿆", ["ိ", "ူ"], ["ဲ", "့"], ["္", "်"], ["ွ", "ှ"], ["ၘ", "ၙ"], ["ၞ", "ၠ"], ["ၱ", "ၴ"], "ႂ", ["ႅ", "ႆ"], "ႍ", "ႝ", ["፝", "፟"], ["ᜒ", "᜔"], ["ᜲ", "᜴"], ["ᝒ", "ᝓ"], ["ᝲ", "ᝳ"], ["឴", "឵"], ["ិ", "ួ"], "ំ", ["៉", "៓"], "៝", ["᠋", "᠍"], ["ᢅ", "ᢆ"], "ᢩ", ["ᤠ", "ᤢ"], ["ᤧ", "ᤨ"], "ᤲ", ["᤹", "᤻"], ["ᨗ", "ᨘ"], "ᨛ", "ᩖ", ["ᩘ", "ᩞ"], "᩠", "ᩢ", ["ᩥ", "ᩬ"], ["ᩳ", "᩼"], "᩿", ["᪰", "᪽"], ["ᬀ", "ᬃ"], "᬴", ["ᬶ", "ᬺ"], "ᬼ", "ᭂ", ["᭫", "᭳"], ["ᮀ", "ᮁ"], ["ᮢ", "ᮥ"], ["ᮨ", "ᮩ"], ["᮫", "ᮭ"], "᯦", ["ᯨ", "ᯩ"], "ᯭ", ["ᯯ", "ᯱ"], ["ᰬ", "ᰳ"], ["ᰶ", "᰷"], ["᳐", "᳒"], ["᳔", "᳠"], ["᳢", "᳨"], "᳭", "᳴", ["᳸", "᳹"], ["᷀", "᷹"], ["᷻", "᷿"], ["⃐", "⃜"], "⃡", ["⃥", "⃰"], ["⳯", "⳱"], "⵿", ["ⷠ", "ⷿ"], ["〪", "〭"], ["゙", "゚"], "꙯", ["ꙴ", "꙽"], ["ꚞ", "ꚟ"], ["꛰", "꛱"], "ꠂ", "꠆", "ꠋ", ["ꠥ", "ꠦ"], ["꣄", "ꣅ"], ["꣠", "꣱"], "ꣿ", ["ꤦ", "꤭"], ["ꥇ", "ꥑ"], ["ꦀ", "ꦂ"], "꦳", ["ꦶ", "ꦹ"], "ꦼ", "ꧥ", ["ꨩ", "ꨮ"], ["ꨱ", "ꨲ"], ["ꨵ", "ꨶ"], "ꩃ", "ꩌ", "ꩼ", "ꪰ", ["ꪲ", "ꪴ"], ["ꪷ", "ꪸ"], ["ꪾ", "꪿"], "꫁", ["ꫬ", "ꫭ"], "꫶", "ꯥ", "ꯨ", "꯭", "ﬞ", ["︀", "️"], ["︠", "︯"]], false, false), peg$c117 = /^[\u0903\u093B\u093E-\u0940\u0949-\u094C\u094E-\u094F\u0982-\u0983\u09BE-\u09C0\u09C7-\u09C8\u09CB-\u09CC\u09D7\u0A03\u0A3E-\u0A40\u0A83\u0ABE-\u0AC0\u0AC9\u0ACB-\u0ACC\u0B02-\u0B03\u0B3E\u0B40\u0B47-\u0B48\u0B4B-\u0B4C\u0B57\u0BBE-\u0BBF\u0BC1-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCC\u0BD7\u0C01-\u0C03\u0C41-\u0C44\u0C82-\u0C83\u0CBE\u0CC0-\u0CC4\u0CC7-\u0CC8\u0CCA-\u0CCB\u0CD5-\u0CD6\u0D02-\u0D03\u0D3E-\u0D40\u0D46-\u0D48\u0D4A-\u0D4C\u0D57\u0D82-\u0D83\u0DCF-\u0DD1\u0DD8-\u0DDF\u0DF2-\u0DF3\u0F3E-\u0F3F\u0F7F\u102B-\u102C\u1031\u1038\u103B-\u103C\u1056-\u1057\u1062-\u1064\u1067-\u106D\u1083-\u1084\u1087-\u108C\u108F\u109A-\u109C\u17B6\u17BE-\u17C5\u17C7-\u17C8\u1923-\u1926\u1929-\u192B\u1930-\u1931\u1933-\u1938\u1A19-\u1A1A\u1A55\u1A57\u1A61\u1A63-\u1A64\u1A6D-\u1A72\u1B04\u1B35\u1B3B\u1B3D-\u1B41\u1B43-\u1B44\u1B82\u1BA1\u1BA6-\u1BA7\u1BAA\u1BE7\u1BEA-\u1BEC\u1BEE\u1BF2-\u1BF3\u1C24-\u1C2B\u1C34-\u1C35\u1CE1\u1CF2-\u1CF3\u1CF7\u302E-\u302F\uA823-\uA824\uA827\uA880-\uA881\uA8B4-\uA8C3\uA952-\uA953\uA983\uA9B4-\uA9B5\uA9BA-\uA9BB\uA9BD-\uA9C0\uAA2F-\uAA30\uAA33-\uAA34\uAA4D\uAA7B\uAA7D\uAAEB\uAAEE-\uAAEF\uAAF5\uABE3-\uABE4\uABE6-\uABE7\uABE9-\uABEA\uABEC]/, peg$c118 = peg$classExpectation(["ः", "ऻ", ["ा", "ी"], ["ॉ", "ौ"], ["ॎ", "ॏ"], ["ং", "ঃ"], ["া", "ী"], ["ে", "ৈ"], ["ো", "ৌ"], "ৗ", "ਃ", ["ਾ", "ੀ"], "ઃ", ["ા", "ી"], "ૉ", ["ો", "ૌ"], ["ଂ", "ଃ"], "ା", "ୀ", ["େ", "ୈ"], ["ୋ", "ୌ"], "ୗ", ["ா", "ி"], ["ு", "ூ"], ["ெ", "ை"], ["ொ", "ௌ"], "ௗ", ["ఁ", "ః"], ["ు", "ౄ"], ["ಂ", "ಃ"], "ಾ", ["ೀ", "ೄ"], ["ೇ", "ೈ"], ["ೊ", "ೋ"], ["ೕ", "ೖ"], ["ം", "ഃ"], ["ാ", "ീ"], ["െ", "ൈ"], ["ൊ", "ൌ"], "ൗ", ["ං", "ඃ"], ["ා", "ෑ"], ["ෘ", "ෟ"], ["ෲ", "ෳ"], ["༾", "༿"], "ཿ", ["ါ", "ာ"], "ေ", "း", ["ျ", "ြ"], ["ၖ", "ၗ"], ["ၢ", "ၤ"], ["ၧ", "ၭ"], ["ႃ", "ႄ"], ["ႇ", "ႌ"], "ႏ", ["ႚ", "ႜ"], "ា", ["ើ", "ៅ"], ["ះ", "ៈ"], ["ᤣ", "ᤦ"], ["ᤩ", "ᤫ"], ["ᤰ", "ᤱ"], ["ᤳ", "ᤸ"], ["ᨙ", "ᨚ"], "ᩕ", "ᩗ", "ᩡ", ["ᩣ", "ᩤ"], ["ᩭ", "ᩲ"], "ᬄ", "ᬵ", "ᬻ", ["ᬽ", "ᭁ"], ["ᭃ", "᭄"], "ᮂ", "ᮡ", ["ᮦ", "ᮧ"], "᮪", "ᯧ", ["ᯪ", "ᯬ"], "ᯮ", ["᯲", "᯳"], ["ᰤ", "ᰫ"], ["ᰴ", "ᰵ"], "᳡", ["ᳲ", "ᳳ"], "᳷", ["〮", "〯"], ["ꠣ", "ꠤ"], "ꠧ", ["ꢀ", "ꢁ"], ["ꢴ", "ꣃ"], ["ꥒ", "꥓"], "ꦃ", ["ꦴ", "ꦵ"], ["ꦺ", "ꦻ"], ["ꦽ", "꧀"], ["ꨯ", "ꨰ"], ["ꨳ", "ꨴ"], "ꩍ", "ꩻ", "ꩽ", "ꫫ", ["ꫮ", "ꫯ"], "ꫵ", ["ꯣ", "ꯤ"], ["ꯦ", "ꯧ"], ["ꯩ", "ꯪ"], "꯬"], false, false), peg$c119 = /^[0-9\u0660-\u0669\u06F0-\u06F9\u07C0-\u07C9\u0966-\u096F\u09E6-\u09EF\u0A66-\u0A6F\u0AE6-\u0AEF\u0B66-\u0B6F\u0BE6-\u0BEF\u0C66-\u0C6F\u0CE6-\u0CEF\u0D66-\u0D6F\u0DE6-\u0DEF\u0E50-\u0E59\u0ED0-\u0ED9\u0F20-\u0F29\u1040-\u1049\u1090-\u1099\u17E0-\u17E9\u1810-\u1819\u1946-\u194F\u19D0-\u19D9\u1A80-\u1A89\u1A90-\u1A99\u1B50-\u1B59\u1BB0-\u1BB9\u1C40-\u1C49\u1C50-\u1C59\uA620-\uA629\uA8D0-\uA8D9\uA900-\uA909\uA9D0-\uA9D9\uA9F0-\uA9F9\uAA50-\uAA59\uABF0-\uABF9\uFF10-\uFF19]/, peg$c120 = peg$classExpectation([["0", "9"], ["٠", "٩"], ["۰", "۹"], ["߀", "߉"], ["०", "९"], ["০", "৯"], ["੦", "੯"], ["૦", "૯"], ["୦", "୯"], ["௦", "௯"], ["౦", "౯"], ["೦", "೯"], ["൦", "൯"], ["෦", "෯"], ["๐", "๙"], ["໐", "໙"], ["༠", "༩"], ["၀", "၉"], ["႐", "႙"], ["០", "៩"], ["᠐", "᠙"], ["᥆", "᥏"], ["᧐", "᧙"], ["᪀", "᪉"], ["᪐", "᪙"], ["᭐", "᭙"], ["᮰", "᮹"], ["᱀", "᱉"], ["᱐", "᱙"], ["꘠", "꘩"], ["꣐", "꣙"], ["꤀", "꤉"], ["꧐", "꧙"], ["꧰", "꧹"], ["꩐", "꩙"], ["꯰", "꯹"], ["0", "9"]], false, false), peg$c121 = /^[_\u203F-\u2040\u2054\uFE33-\uFE34\uFE4D-\uFE4F\uFF3F]/, peg$c122 = peg$classExpectation(["_", ["‿", "⁀"], "⁔", ["︳", "︴"], ["﹍", "﹏"], "_"], false, false), peg$c125 = /^[0-9a-f]/i, peg$c126 = peg$classExpectation([["0", "9"], ["a", "f"]], false, true), peg$c127 = "break", peg$c128 = peg$literalExpectation("break", false), peg$c129 = "case", peg$c130 = peg$literalExpectation("case", false), peg$c131 = "catch", peg$c132 = peg$literalExpectation("catch", false), peg$c133 = "class", peg$c134 = peg$literalExpectation("class", false), peg$c135 = "const", peg$c136 = peg$literalExpectation("const", false), peg$c137 = "continue", peg$c138 = peg$literalExpectation("continue", false), peg$c139 = "debugger", peg$c140 = peg$literalExpectation("debugger", false), peg$c141 = "default", peg$c142 = peg$literalExpectation("default", false), peg$c143 = "delete", peg$c144 = peg$literalExpectation("delete", false), peg$c145 = "do", peg$c146 = peg$literalExpectation("do", false), peg$c147 = "else", peg$c148 = peg$literalExpectation("else", false), peg$c149 = "export", peg$c150 = peg$literalExpectation("export", false), peg$c151 = "extends", peg$c152 = peg$literalExpectation("extends", false), peg$c153 = "false", peg$c154 = peg$literalExpectation("false", false), peg$c155 = "finally", peg$c156 = peg$literalExpectation("finally", false), peg$c157 = "for", peg$c158 = peg$literalExpectation("for", false), peg$c159 = "function", peg$c160 = peg$literalExpectation("function", false), peg$c163 = "if", peg$c164 = peg$literalExpectation("if", false), peg$c165 = "import", peg$c166 = peg$literalExpectation("import", false), peg$c167 = "instanceof", peg$c168 = peg$literalExpectation("instanceof", false), peg$c169 = "in", peg$c170 = peg$literalExpectation("in", false), peg$c171 = "new", peg$c172 = peg$literalExpectation("new", false), peg$c173 = "null", peg$c174 = peg$literalExpectation("null", false), peg$c175 = "return", peg$c176 = peg$literalExpectation("return", false), peg$c179 = "super", peg$c180 = peg$literalExpectation("super", false), peg$c181 = "switch", peg$c182 = peg$literalExpectation("switch", false), peg$c183 = "this", peg$c184 = peg$literalExpectation("this", false), peg$c185 = "throw", peg$c186 = peg$literalExpectation("throw", false), peg$c187 = "true", peg$c188 = peg$literalExpectation("true", false), peg$c189 = "try", peg$c190 = peg$literalExpectation("try", false), peg$c191 = "typeof", peg$c192 = peg$literalExpectation("typeof", false), peg$c193 = "var", peg$c194 = peg$literalExpectation("var", false), peg$c195 = "void", peg$c196 = peg$literalExpectation("void", false), peg$c197 = "while", peg$c198 = peg$literalExpectation("while", false), peg$c199 = "with", peg$c200 = peg$literalExpectation("with", false), peg$currPos = 0, peg$savedPos = 0, peg$posDetailsCache = [{ line: 1, column: 1 }], peg$maxFailPos = 0, peg$maxFailExpected = [], peg$silentFails = 0, peg$result;
6043
6067
  if ("startRule" in options) {
6044
6068
  if (!(options.startRule in peg$startRuleFunctions)) {
6045
6069
  throw new Error(`Can't start parsing from rule "` + options.startRule + '".');
@@ -6334,7 +6358,7 @@ function peg$parse(input, options) {
6334
6358
  if (s1 !== peg$FAILED) {
6335
6359
  s2 = peg$parse_();
6336
6360
  if (s2 !== peg$FAILED) {
6337
- s3 = peg$parsecondition();
6361
+ s3 = peg$parselogicalOrCondition();
6338
6362
  if (s3 !== peg$FAILED) {
6339
6363
  s4 = peg$parse_();
6340
6364
  if (s4 !== peg$FAILED) {
@@ -7610,7 +7634,7 @@ function peg$parse(input, options) {
7610
7634
  function peg$parseconditionFunc() {
7611
7635
  var s0, s1;
7612
7636
  s0 = peg$currPos;
7613
- s1 = peg$parsecondition();
7637
+ s1 = peg$parselogicalOrCondition();
7614
7638
  if (s1 !== peg$FAILED) {
7615
7639
  peg$savedPos = s0;
7616
7640
  s1 = peg$c50(s1);
@@ -7620,9 +7644,252 @@ function peg$parse(input, options) {
7620
7644
  }
7621
7645
  function peg$parsecondition() {
7622
7646
  var s0;
7623
- s0 = peg$parseenumCondition();
7647
+ s0 = peg$parselogicalOrCondition();
7648
+ return s0;
7649
+ }
7650
+ function peg$parselogicalOrCondition() {
7651
+ var s0, s1, s2, s3, s4, s5, s6, s7;
7652
+ s0 = peg$currPos;
7653
+ s1 = peg$parselogicalAndCondition();
7654
+ if (s1 !== peg$FAILED) {
7655
+ s2 = [];
7656
+ s3 = peg$currPos;
7657
+ s4 = peg$parse_();
7658
+ if (s4 !== peg$FAILED) {
7659
+ if (input.substr(peg$currPos, 2) === peg$c51) {
7660
+ s5 = peg$c51;
7661
+ peg$currPos += 2;
7662
+ } else {
7663
+ s5 = peg$FAILED;
7664
+ if (peg$silentFails === 0) {
7665
+ peg$fail(peg$c52);
7666
+ }
7667
+ }
7668
+ if (s5 !== peg$FAILED) {
7669
+ s6 = peg$parse_();
7670
+ if (s6 !== peg$FAILED) {
7671
+ s7 = peg$parselogicalAndCondition();
7672
+ if (s7 !== peg$FAILED) {
7673
+ s4 = [s4, s5, s6, s7];
7674
+ s3 = s4;
7675
+ } else {
7676
+ peg$currPos = s3;
7677
+ s3 = peg$FAILED;
7678
+ }
7679
+ } else {
7680
+ peg$currPos = s3;
7681
+ s3 = peg$FAILED;
7682
+ }
7683
+ } else {
7684
+ peg$currPos = s3;
7685
+ s3 = peg$FAILED;
7686
+ }
7687
+ } else {
7688
+ peg$currPos = s3;
7689
+ s3 = peg$FAILED;
7690
+ }
7691
+ while (s3 !== peg$FAILED) {
7692
+ s2.push(s3);
7693
+ s3 = peg$currPos;
7694
+ s4 = peg$parse_();
7695
+ if (s4 !== peg$FAILED) {
7696
+ if (input.substr(peg$currPos, 2) === peg$c51) {
7697
+ s5 = peg$c51;
7698
+ peg$currPos += 2;
7699
+ } else {
7700
+ s5 = peg$FAILED;
7701
+ if (peg$silentFails === 0) {
7702
+ peg$fail(peg$c52);
7703
+ }
7704
+ }
7705
+ if (s5 !== peg$FAILED) {
7706
+ s6 = peg$parse_();
7707
+ if (s6 !== peg$FAILED) {
7708
+ s7 = peg$parselogicalAndCondition();
7709
+ if (s7 !== peg$FAILED) {
7710
+ s4 = [s4, s5, s6, s7];
7711
+ s3 = s4;
7712
+ } else {
7713
+ peg$currPos = s3;
7714
+ s3 = peg$FAILED;
7715
+ }
7716
+ } else {
7717
+ peg$currPos = s3;
7718
+ s3 = peg$FAILED;
7719
+ }
7720
+ } else {
7721
+ peg$currPos = s3;
7722
+ s3 = peg$FAILED;
7723
+ }
7724
+ } else {
7725
+ peg$currPos = s3;
7726
+ s3 = peg$FAILED;
7727
+ }
7728
+ }
7729
+ if (s2 !== peg$FAILED) {
7730
+ peg$savedPos = s0;
7731
+ s1 = peg$c53(s1, s2);
7732
+ s0 = s1;
7733
+ } else {
7734
+ peg$currPos = s0;
7735
+ s0 = peg$FAILED;
7736
+ }
7737
+ } else {
7738
+ peg$currPos = s0;
7739
+ s0 = peg$FAILED;
7740
+ }
7741
+ return s0;
7742
+ }
7743
+ function peg$parselogicalAndCondition() {
7744
+ var s0, s1, s2, s3, s4, s5, s6, s7;
7745
+ s0 = peg$currPos;
7746
+ s1 = peg$parseprimaryCondition();
7747
+ if (s1 !== peg$FAILED) {
7748
+ s2 = [];
7749
+ s3 = peg$currPos;
7750
+ s4 = peg$parse_();
7751
+ if (s4 !== peg$FAILED) {
7752
+ if (input.substr(peg$currPos, 2) === peg$c54) {
7753
+ s5 = peg$c54;
7754
+ peg$currPos += 2;
7755
+ } else {
7756
+ s5 = peg$FAILED;
7757
+ if (peg$silentFails === 0) {
7758
+ peg$fail(peg$c55);
7759
+ }
7760
+ }
7761
+ if (s5 !== peg$FAILED) {
7762
+ s6 = peg$parse_();
7763
+ if (s6 !== peg$FAILED) {
7764
+ s7 = peg$parseprimaryCondition();
7765
+ if (s7 !== peg$FAILED) {
7766
+ s4 = [s4, s5, s6, s7];
7767
+ s3 = s4;
7768
+ } else {
7769
+ peg$currPos = s3;
7770
+ s3 = peg$FAILED;
7771
+ }
7772
+ } else {
7773
+ peg$currPos = s3;
7774
+ s3 = peg$FAILED;
7775
+ }
7776
+ } else {
7777
+ peg$currPos = s3;
7778
+ s3 = peg$FAILED;
7779
+ }
7780
+ } else {
7781
+ peg$currPos = s3;
7782
+ s3 = peg$FAILED;
7783
+ }
7784
+ while (s3 !== peg$FAILED) {
7785
+ s2.push(s3);
7786
+ s3 = peg$currPos;
7787
+ s4 = peg$parse_();
7788
+ if (s4 !== peg$FAILED) {
7789
+ if (input.substr(peg$currPos, 2) === peg$c54) {
7790
+ s5 = peg$c54;
7791
+ peg$currPos += 2;
7792
+ } else {
7793
+ s5 = peg$FAILED;
7794
+ if (peg$silentFails === 0) {
7795
+ peg$fail(peg$c55);
7796
+ }
7797
+ }
7798
+ if (s5 !== peg$FAILED) {
7799
+ s6 = peg$parse_();
7800
+ if (s6 !== peg$FAILED) {
7801
+ s7 = peg$parseprimaryCondition();
7802
+ if (s7 !== peg$FAILED) {
7803
+ s4 = [s4, s5, s6, s7];
7804
+ s3 = s4;
7805
+ } else {
7806
+ peg$currPos = s3;
7807
+ s3 = peg$FAILED;
7808
+ }
7809
+ } else {
7810
+ peg$currPos = s3;
7811
+ s3 = peg$FAILED;
7812
+ }
7813
+ } else {
7814
+ peg$currPos = s3;
7815
+ s3 = peg$FAILED;
7816
+ }
7817
+ } else {
7818
+ peg$currPos = s3;
7819
+ s3 = peg$FAILED;
7820
+ }
7821
+ }
7822
+ if (s2 !== peg$FAILED) {
7823
+ peg$savedPos = s0;
7824
+ s1 = peg$c56(s1, s2);
7825
+ s0 = s1;
7826
+ } else {
7827
+ peg$currPos = s0;
7828
+ s0 = peg$FAILED;
7829
+ }
7830
+ } else {
7831
+ peg$currPos = s0;
7832
+ s0 = peg$FAILED;
7833
+ }
7834
+ return s0;
7835
+ }
7836
+ function peg$parseprimaryCondition() {
7837
+ var s0, s1, s2, s3, s4, s5;
7838
+ s0 = peg$currPos;
7839
+ if (input.charCodeAt(peg$currPos) === 40) {
7840
+ s1 = peg$c30;
7841
+ peg$currPos++;
7842
+ } else {
7843
+ s1 = peg$FAILED;
7844
+ if (peg$silentFails === 0) {
7845
+ peg$fail(peg$c31);
7846
+ }
7847
+ }
7848
+ if (s1 !== peg$FAILED) {
7849
+ s2 = peg$parse_();
7850
+ if (s2 !== peg$FAILED) {
7851
+ s3 = peg$parselogicalOrCondition();
7852
+ if (s3 !== peg$FAILED) {
7853
+ s4 = peg$parse_();
7854
+ if (s4 !== peg$FAILED) {
7855
+ if (input.charCodeAt(peg$currPos) === 41) {
7856
+ s5 = peg$c37;
7857
+ peg$currPos++;
7858
+ } else {
7859
+ s5 = peg$FAILED;
7860
+ if (peg$silentFails === 0) {
7861
+ peg$fail(peg$c38);
7862
+ }
7863
+ }
7864
+ if (s5 !== peg$FAILED) {
7865
+ peg$savedPos = s0;
7866
+ s1 = peg$c57(s3);
7867
+ s0 = s1;
7868
+ } else {
7869
+ peg$currPos = s0;
7870
+ s0 = peg$FAILED;
7871
+ }
7872
+ } else {
7873
+ peg$currPos = s0;
7874
+ s0 = peg$FAILED;
7875
+ }
7876
+ } else {
7877
+ peg$currPos = s0;
7878
+ s0 = peg$FAILED;
7879
+ }
7880
+ } else {
7881
+ peg$currPos = s0;
7882
+ s0 = peg$FAILED;
7883
+ }
7884
+ } else {
7885
+ peg$currPos = s0;
7886
+ s0 = peg$FAILED;
7887
+ }
7624
7888
  if (s0 === peg$FAILED) {
7625
- s0 = peg$parsebooleanCondition();
7889
+ s0 = peg$parseenumCondition();
7890
+ if (s0 === peg$FAILED) {
7891
+ s0 = peg$parsebooleanCondition();
7892
+ }
7626
7893
  }
7627
7894
  return s0;
7628
7895
  }
@@ -7637,7 +7904,7 @@ function peg$parse(input, options) {
7637
7904
  s2 = peg$parseaccessor();
7638
7905
  if (s2 !== peg$FAILED) {
7639
7906
  peg$savedPos = s0;
7640
- s1 = peg$c51(s1, s2);
7907
+ s1 = peg$c58(s1, s2);
7641
7908
  s0 = s1;
7642
7909
  } else {
7643
7910
  peg$currPos = s0;
@@ -7663,7 +7930,7 @@ function peg$parse(input, options) {
7663
7930
  s5 = peg$parseIdentifier();
7664
7931
  if (s5 !== peg$FAILED) {
7665
7932
  peg$savedPos = s0;
7666
- s1 = peg$c52(s1, s3, s5);
7933
+ s1 = peg$c59(s1, s3, s5);
7667
7934
  s0 = s1;
7668
7935
  } else {
7669
7936
  peg$currPos = s0;
@@ -7699,17 +7966,17 @@ function peg$parse(input, options) {
7699
7966
  var s0, s1;
7700
7967
  s0 = peg$currPos;
7701
7968
  if (input.charCodeAt(peg$currPos) === 46) {
7702
- s1 = peg$c53;
7969
+ s1 = peg$c60;
7703
7970
  peg$currPos++;
7704
7971
  } else {
7705
7972
  s1 = peg$FAILED;
7706
7973
  if (peg$silentFails === 0) {
7707
- peg$fail(peg$c54);
7974
+ peg$fail(peg$c61);
7708
7975
  }
7709
7976
  }
7710
7977
  if (s1 !== peg$FAILED) {
7711
7978
  peg$savedPos = s0;
7712
- s1 = peg$c55();
7979
+ s1 = peg$c62();
7713
7980
  }
7714
7981
  s0 = s1;
7715
7982
  return s0;
@@ -7724,12 +7991,12 @@ function peg$parse(input, options) {
7724
7991
  s4 = peg$parse_();
7725
7992
  if (s4 !== peg$FAILED) {
7726
7993
  if (input.charCodeAt(peg$currPos) === 46) {
7727
- s5 = peg$c53;
7994
+ s5 = peg$c60;
7728
7995
  peg$currPos++;
7729
7996
  } else {
7730
7997
  s5 = peg$FAILED;
7731
7998
  if (peg$silentFails === 0) {
7732
- peg$fail(peg$c54);
7999
+ peg$fail(peg$c61);
7733
8000
  }
7734
8001
  }
7735
8002
  if (s5 !== peg$FAILED) {
@@ -7761,12 +8028,12 @@ function peg$parse(input, options) {
7761
8028
  s4 = peg$parse_();
7762
8029
  if (s4 !== peg$FAILED) {
7763
8030
  if (input.charCodeAt(peg$currPos) === 46) {
7764
- s5 = peg$c53;
8031
+ s5 = peg$c60;
7765
8032
  peg$currPos++;
7766
8033
  } else {
7767
8034
  s5 = peg$FAILED;
7768
8035
  if (peg$silentFails === 0) {
7769
- peg$fail(peg$c54);
8036
+ peg$fail(peg$c61);
7770
8037
  }
7771
8038
  }
7772
8039
  if (s5 !== peg$FAILED) {
@@ -7795,7 +8062,7 @@ function peg$parse(input, options) {
7795
8062
  }
7796
8063
  if (s2 !== peg$FAILED) {
7797
8064
  peg$savedPos = s0;
7798
- s1 = peg$c56(s1, s2);
8065
+ s1 = peg$c63(s1, s2);
7799
8066
  s0 = s1;
7800
8067
  } else {
7801
8068
  peg$currPos = s0;
@@ -7814,25 +8081,25 @@ function peg$parse(input, options) {
7814
8081
  s1 = peg$parse_();
7815
8082
  if (s1 !== peg$FAILED) {
7816
8083
  s2 = [];
7817
- if (peg$c58.test(input.charAt(peg$currPos))) {
8084
+ if (peg$c65.test(input.charAt(peg$currPos))) {
7818
8085
  s3 = input.charAt(peg$currPos);
7819
8086
  peg$currPos++;
7820
8087
  } else {
7821
8088
  s3 = peg$FAILED;
7822
8089
  if (peg$silentFails === 0) {
7823
- peg$fail(peg$c59);
8090
+ peg$fail(peg$c66);
7824
8091
  }
7825
8092
  }
7826
8093
  if (s3 !== peg$FAILED) {
7827
8094
  while (s3 !== peg$FAILED) {
7828
8095
  s2.push(s3);
7829
- if (peg$c58.test(input.charAt(peg$currPos))) {
8096
+ if (peg$c65.test(input.charAt(peg$currPos))) {
7830
8097
  s3 = input.charAt(peg$currPos);
7831
8098
  peg$currPos++;
7832
8099
  } else {
7833
8100
  s3 = peg$FAILED;
7834
8101
  if (peg$silentFails === 0) {
7835
- peg$fail(peg$c59);
8102
+ peg$fail(peg$c66);
7836
8103
  }
7837
8104
  }
7838
8105
  }
@@ -7855,7 +8122,7 @@ function peg$parse(input, options) {
7855
8122
  if (s0 === peg$FAILED) {
7856
8123
  s1 = peg$FAILED;
7857
8124
  if (peg$silentFails === 0) {
7858
- peg$fail(peg$c57);
8125
+ peg$fail(peg$c64);
7859
8126
  }
7860
8127
  }
7861
8128
  return s0;
@@ -7864,24 +8131,24 @@ function peg$parse(input, options) {
7864
8131
  var s0, s1;
7865
8132
  peg$silentFails++;
7866
8133
  s0 = [];
7867
- if (peg$c61.test(input.charAt(peg$currPos))) {
8134
+ if (peg$c68.test(input.charAt(peg$currPos))) {
7868
8135
  s1 = input.charAt(peg$currPos);
7869
8136
  peg$currPos++;
7870
8137
  } else {
7871
8138
  s1 = peg$FAILED;
7872
8139
  if (peg$silentFails === 0) {
7873
- peg$fail(peg$c62);
8140
+ peg$fail(peg$c69);
7874
8141
  }
7875
8142
  }
7876
8143
  while (s1 !== peg$FAILED) {
7877
8144
  s0.push(s1);
7878
- if (peg$c61.test(input.charAt(peg$currPos))) {
8145
+ if (peg$c68.test(input.charAt(peg$currPos))) {
7879
8146
  s1 = input.charAt(peg$currPos);
7880
8147
  peg$currPos++;
7881
8148
  } else {
7882
8149
  s1 = peg$FAILED;
7883
8150
  if (peg$silentFails === 0) {
7884
- peg$fail(peg$c62);
8151
+ peg$fail(peg$c69);
7885
8152
  }
7886
8153
  }
7887
8154
  }
@@ -7889,7 +8156,7 @@ function peg$parse(input, options) {
7889
8156
  if (s0 === peg$FAILED) {
7890
8157
  s1 = peg$FAILED;
7891
8158
  if (peg$silentFails === 0) {
7892
- peg$fail(peg$c60);
8159
+ peg$fail(peg$c67);
7893
8160
  }
7894
8161
  }
7895
8162
  return s0;
@@ -7898,25 +8165,25 @@ function peg$parse(input, options) {
7898
8165
  var s0, s1, s2;
7899
8166
  s0 = peg$currPos;
7900
8167
  s1 = [];
7901
- if (peg$c63.test(input.charAt(peg$currPos))) {
8168
+ if (peg$c70.test(input.charAt(peg$currPos))) {
7902
8169
  s2 = input.charAt(peg$currPos);
7903
8170
  peg$currPos++;
7904
8171
  } else {
7905
8172
  s2 = peg$FAILED;
7906
8173
  if (peg$silentFails === 0) {
7907
- peg$fail(peg$c64);
8174
+ peg$fail(peg$c71);
7908
8175
  }
7909
8176
  }
7910
8177
  if (s2 !== peg$FAILED) {
7911
8178
  while (s2 !== peg$FAILED) {
7912
8179
  s1.push(s2);
7913
- if (peg$c63.test(input.charAt(peg$currPos))) {
8180
+ if (peg$c70.test(input.charAt(peg$currPos))) {
7914
8181
  s2 = input.charAt(peg$currPos);
7915
8182
  peg$currPos++;
7916
8183
  } else {
7917
8184
  s2 = peg$FAILED;
7918
8185
  if (peg$silentFails === 0) {
7919
- peg$fail(peg$c64);
8186
+ peg$fail(peg$c71);
7920
8187
  }
7921
8188
  }
7922
8189
  }
@@ -7925,7 +8192,7 @@ function peg$parse(input, options) {
7925
8192
  }
7926
8193
  if (s1 !== peg$FAILED) {
7927
8194
  peg$savedPos = s0;
7928
- s1 = peg$c65();
8195
+ s1 = peg$c72();
7929
8196
  }
7930
8197
  s0 = s1;
7931
8198
  return s0;
@@ -7933,55 +8200,55 @@ function peg$parse(input, options) {
7933
8200
  function peg$parsebang() {
7934
8201
  var s0;
7935
8202
  if (input.charCodeAt(peg$currPos) === 33) {
7936
- s0 = peg$c66;
8203
+ s0 = peg$c73;
7937
8204
  peg$currPos++;
7938
8205
  } else {
7939
8206
  s0 = peg$FAILED;
7940
8207
  if (peg$silentFails === 0) {
7941
- peg$fail(peg$c67);
8208
+ peg$fail(peg$c74);
7942
8209
  }
7943
8210
  }
7944
8211
  return s0;
7945
8212
  }
7946
8213
  function peg$parseEqualityOperator() {
7947
8214
  var s0;
7948
- if (input.substr(peg$currPos, 3) === peg$c68) {
7949
- s0 = peg$c68;
8215
+ if (input.substr(peg$currPos, 3) === peg$c75) {
8216
+ s0 = peg$c75;
7950
8217
  peg$currPos += 3;
7951
8218
  } else {
7952
8219
  s0 = peg$FAILED;
7953
8220
  if (peg$silentFails === 0) {
7954
- peg$fail(peg$c69);
8221
+ peg$fail(peg$c76);
7955
8222
  }
7956
8223
  }
7957
8224
  if (s0 === peg$FAILED) {
7958
- if (input.substr(peg$currPos, 3) === peg$c70) {
7959
- s0 = peg$c70;
8225
+ if (input.substr(peg$currPos, 3) === peg$c77) {
8226
+ s0 = peg$c77;
7960
8227
  peg$currPos += 3;
7961
8228
  } else {
7962
8229
  s0 = peg$FAILED;
7963
8230
  if (peg$silentFails === 0) {
7964
- peg$fail(peg$c71);
8231
+ peg$fail(peg$c78);
7965
8232
  }
7966
8233
  }
7967
8234
  if (s0 === peg$FAILED) {
7968
- if (input.substr(peg$currPos, 2) === peg$c72) {
7969
- s0 = peg$c72;
8235
+ if (input.substr(peg$currPos, 2) === peg$c79) {
8236
+ s0 = peg$c79;
7970
8237
  peg$currPos += 2;
7971
8238
  } else {
7972
8239
  s0 = peg$FAILED;
7973
8240
  if (peg$silentFails === 0) {
7974
- peg$fail(peg$c73);
8241
+ peg$fail(peg$c80);
7975
8242
  }
7976
8243
  }
7977
8244
  if (s0 === peg$FAILED) {
7978
- if (input.substr(peg$currPos, 2) === peg$c74) {
7979
- s0 = peg$c74;
8245
+ if (input.substr(peg$currPos, 2) === peg$c81) {
8246
+ s0 = peg$c81;
7980
8247
  peg$currPos += 2;
7981
8248
  } else {
7982
8249
  s0 = peg$FAILED;
7983
8250
  if (peg$silentFails === 0) {
7984
- peg$fail(peg$c75);
8251
+ peg$fail(peg$c82);
7985
8252
  }
7986
8253
  }
7987
8254
  }
@@ -8006,7 +8273,7 @@ function peg$parse(input, options) {
8006
8273
  s2 = peg$parseIdentifierName();
8007
8274
  if (s2 !== peg$FAILED) {
8008
8275
  peg$savedPos = s0;
8009
- s1 = peg$c76();
8276
+ s1 = peg$c83();
8010
8277
  s0 = s1;
8011
8278
  } else {
8012
8279
  peg$currPos = s0;
@@ -8032,7 +8299,7 @@ function peg$parse(input, options) {
8032
8299
  }
8033
8300
  if (s2 !== peg$FAILED) {
8034
8301
  peg$savedPos = s0;
8035
- s1 = peg$c78(s1, s2);
8302
+ s1 = peg$c85(s1, s2);
8036
8303
  s0 = s1;
8037
8304
  } else {
8038
8305
  peg$currPos = s0;
@@ -8046,7 +8313,7 @@ function peg$parse(input, options) {
8046
8313
  if (s0 === peg$FAILED) {
8047
8314
  s1 = peg$FAILED;
8048
8315
  if (peg$silentFails === 0) {
8049
- peg$fail(peg$c77);
8316
+ peg$fail(peg$c84);
8050
8317
  }
8051
8318
  }
8052
8319
  return s0;
@@ -8056,40 +8323,40 @@ function peg$parse(input, options) {
8056
8323
  s0 = peg$parseUnicodeLetter();
8057
8324
  if (s0 === peg$FAILED) {
8058
8325
  if (input.charCodeAt(peg$currPos) === 36) {
8059
- s0 = peg$c79;
8326
+ s0 = peg$c86;
8060
8327
  peg$currPos++;
8061
8328
  } else {
8062
8329
  s0 = peg$FAILED;
8063
8330
  if (peg$silentFails === 0) {
8064
- peg$fail(peg$c80);
8331
+ peg$fail(peg$c87);
8065
8332
  }
8066
8333
  }
8067
8334
  if (s0 === peg$FAILED) {
8068
8335
  if (input.charCodeAt(peg$currPos) === 95) {
8069
- s0 = peg$c81;
8336
+ s0 = peg$c88;
8070
8337
  peg$currPos++;
8071
8338
  } else {
8072
8339
  s0 = peg$FAILED;
8073
8340
  if (peg$silentFails === 0) {
8074
- peg$fail(peg$c82);
8341
+ peg$fail(peg$c89);
8075
8342
  }
8076
8343
  }
8077
8344
  if (s0 === peg$FAILED) {
8078
8345
  s0 = peg$currPos;
8079
8346
  if (input.charCodeAt(peg$currPos) === 92) {
8080
- s1 = peg$c83;
8347
+ s1 = peg$c90;
8081
8348
  peg$currPos++;
8082
8349
  } else {
8083
8350
  s1 = peg$FAILED;
8084
8351
  if (peg$silentFails === 0) {
8085
- peg$fail(peg$c84);
8352
+ peg$fail(peg$c91);
8086
8353
  }
8087
8354
  }
8088
8355
  if (s1 !== peg$FAILED) {
8089
8356
  s2 = peg$parseUnicodeEscapeSequence();
8090
8357
  if (s2 !== peg$FAILED) {
8091
8358
  peg$savedPos = s0;
8092
- s1 = peg$c85(s2);
8359
+ s1 = peg$c92(s2);
8093
8360
  s0 = s1;
8094
8361
  } else {
8095
8362
  peg$currPos = s0;
@@ -8115,22 +8382,22 @@ function peg$parse(input, options) {
8115
8382
  s0 = peg$parsePc();
8116
8383
  if (s0 === peg$FAILED) {
8117
8384
  if (input.charCodeAt(peg$currPos) === 8204) {
8118
- s0 = peg$c86;
8385
+ s0 = peg$c93;
8119
8386
  peg$currPos++;
8120
8387
  } else {
8121
8388
  s0 = peg$FAILED;
8122
8389
  if (peg$silentFails === 0) {
8123
- peg$fail(peg$c87);
8390
+ peg$fail(peg$c94);
8124
8391
  }
8125
8392
  }
8126
8393
  if (s0 === peg$FAILED) {
8127
8394
  if (input.charCodeAt(peg$currPos) === 8205) {
8128
- s0 = peg$c88;
8395
+ s0 = peg$c95;
8129
8396
  peg$currPos++;
8130
8397
  } else {
8131
8398
  s0 = peg$FAILED;
8132
8399
  if (peg$silentFails === 0) {
8133
- peg$fail(peg$c89);
8400
+ peg$fail(peg$c96);
8134
8401
  }
8135
8402
  }
8136
8403
  }
@@ -8178,12 +8445,12 @@ function peg$parse(input, options) {
8178
8445
  var s0, s1, s2, s3, s4, s5, s6, s7;
8179
8446
  s0 = peg$currPos;
8180
8447
  if (input.charCodeAt(peg$currPos) === 117) {
8181
- s1 = peg$c90;
8448
+ s1 = peg$c97;
8182
8449
  peg$currPos++;
8183
8450
  } else {
8184
8451
  s1 = peg$FAILED;
8185
8452
  if (peg$silentFails === 0) {
8186
- peg$fail(peg$c91);
8453
+ peg$fail(peg$c98);
8187
8454
  }
8188
8455
  }
8189
8456
  if (s1 !== peg$FAILED) {
@@ -8222,7 +8489,7 @@ function peg$parse(input, options) {
8222
8489
  }
8223
8490
  if (s2 !== peg$FAILED) {
8224
8491
  peg$savedPos = s0;
8225
- s1 = peg$c92(s2);
8492
+ s1 = peg$c99(s2);
8226
8493
  s0 = s1;
8227
8494
  } else {
8228
8495
  peg$currPos = s0;
@@ -8351,7 +8618,7 @@ function peg$parse(input, options) {
8351
8618
  s1 = peg$parseNullToken();
8352
8619
  if (s1 !== peg$FAILED) {
8353
8620
  peg$savedPos = s0;
8354
- s1 = peg$c93();
8621
+ s1 = peg$c100();
8355
8622
  }
8356
8623
  s0 = s1;
8357
8624
  return s0;
@@ -8362,7 +8629,7 @@ function peg$parse(input, options) {
8362
8629
  s1 = peg$parseTrueToken();
8363
8630
  if (s1 !== peg$FAILED) {
8364
8631
  peg$savedPos = s0;
8365
- s1 = peg$c94();
8632
+ s1 = peg$c101();
8366
8633
  }
8367
8634
  s0 = s1;
8368
8635
  if (s0 === peg$FAILED) {
@@ -8370,7 +8637,7 @@ function peg$parse(input, options) {
8370
8637
  s1 = peg$parseFalseToken();
8371
8638
  if (s1 !== peg$FAILED) {
8372
8639
  peg$savedPos = s0;
8373
- s1 = peg$c95();
8640
+ s1 = peg$c102();
8374
8641
  }
8375
8642
  s0 = s1;
8376
8643
  }
@@ -8378,143 +8645,143 @@ function peg$parse(input, options) {
8378
8645
  }
8379
8646
  function peg$parseLu() {
8380
8647
  var s0;
8381
- if (peg$c96.test(input.charAt(peg$currPos))) {
8648
+ if (peg$c103.test(input.charAt(peg$currPos))) {
8382
8649
  s0 = input.charAt(peg$currPos);
8383
8650
  peg$currPos++;
8384
8651
  } else {
8385
8652
  s0 = peg$FAILED;
8386
8653
  if (peg$silentFails === 0) {
8387
- peg$fail(peg$c97);
8654
+ peg$fail(peg$c104);
8388
8655
  }
8389
8656
  }
8390
8657
  return s0;
8391
8658
  }
8392
8659
  function peg$parseLl() {
8393
8660
  var s0;
8394
- if (peg$c98.test(input.charAt(peg$currPos))) {
8661
+ if (peg$c105.test(input.charAt(peg$currPos))) {
8395
8662
  s0 = input.charAt(peg$currPos);
8396
8663
  peg$currPos++;
8397
8664
  } else {
8398
8665
  s0 = peg$FAILED;
8399
8666
  if (peg$silentFails === 0) {
8400
- peg$fail(peg$c99);
8667
+ peg$fail(peg$c106);
8401
8668
  }
8402
8669
  }
8403
8670
  return s0;
8404
8671
  }
8405
8672
  function peg$parseLt() {
8406
8673
  var s0;
8407
- if (peg$c100.test(input.charAt(peg$currPos))) {
8674
+ if (peg$c107.test(input.charAt(peg$currPos))) {
8408
8675
  s0 = input.charAt(peg$currPos);
8409
8676
  peg$currPos++;
8410
8677
  } else {
8411
8678
  s0 = peg$FAILED;
8412
8679
  if (peg$silentFails === 0) {
8413
- peg$fail(peg$c101);
8680
+ peg$fail(peg$c108);
8414
8681
  }
8415
8682
  }
8416
8683
  return s0;
8417
8684
  }
8418
8685
  function peg$parseLm() {
8419
8686
  var s0;
8420
- if (peg$c102.test(input.charAt(peg$currPos))) {
8687
+ if (peg$c109.test(input.charAt(peg$currPos))) {
8421
8688
  s0 = input.charAt(peg$currPos);
8422
8689
  peg$currPos++;
8423
8690
  } else {
8424
8691
  s0 = peg$FAILED;
8425
8692
  if (peg$silentFails === 0) {
8426
- peg$fail(peg$c103);
8693
+ peg$fail(peg$c110);
8427
8694
  }
8428
8695
  }
8429
8696
  return s0;
8430
8697
  }
8431
8698
  function peg$parseLo() {
8432
8699
  var s0;
8433
- if (peg$c104.test(input.charAt(peg$currPos))) {
8700
+ if (peg$c111.test(input.charAt(peg$currPos))) {
8434
8701
  s0 = input.charAt(peg$currPos);
8435
8702
  peg$currPos++;
8436
8703
  } else {
8437
8704
  s0 = peg$FAILED;
8438
8705
  if (peg$silentFails === 0) {
8439
- peg$fail(peg$c105);
8706
+ peg$fail(peg$c112);
8440
8707
  }
8441
8708
  }
8442
8709
  return s0;
8443
8710
  }
8444
8711
  function peg$parseNl() {
8445
8712
  var s0;
8446
- if (peg$c106.test(input.charAt(peg$currPos))) {
8713
+ if (peg$c113.test(input.charAt(peg$currPos))) {
8447
8714
  s0 = input.charAt(peg$currPos);
8448
8715
  peg$currPos++;
8449
8716
  } else {
8450
8717
  s0 = peg$FAILED;
8451
8718
  if (peg$silentFails === 0) {
8452
- peg$fail(peg$c107);
8719
+ peg$fail(peg$c114);
8453
8720
  }
8454
8721
  }
8455
8722
  return s0;
8456
8723
  }
8457
8724
  function peg$parseMn() {
8458
8725
  var s0;
8459
- if (peg$c108.test(input.charAt(peg$currPos))) {
8726
+ if (peg$c115.test(input.charAt(peg$currPos))) {
8460
8727
  s0 = input.charAt(peg$currPos);
8461
8728
  peg$currPos++;
8462
8729
  } else {
8463
8730
  s0 = peg$FAILED;
8464
8731
  if (peg$silentFails === 0) {
8465
- peg$fail(peg$c109);
8732
+ peg$fail(peg$c116);
8466
8733
  }
8467
8734
  }
8468
8735
  return s0;
8469
8736
  }
8470
8737
  function peg$parseMc() {
8471
8738
  var s0;
8472
- if (peg$c110.test(input.charAt(peg$currPos))) {
8739
+ if (peg$c117.test(input.charAt(peg$currPos))) {
8473
8740
  s0 = input.charAt(peg$currPos);
8474
8741
  peg$currPos++;
8475
8742
  } else {
8476
8743
  s0 = peg$FAILED;
8477
8744
  if (peg$silentFails === 0) {
8478
- peg$fail(peg$c111);
8745
+ peg$fail(peg$c118);
8479
8746
  }
8480
8747
  }
8481
8748
  return s0;
8482
8749
  }
8483
8750
  function peg$parseNd() {
8484
8751
  var s0;
8485
- if (peg$c112.test(input.charAt(peg$currPos))) {
8752
+ if (peg$c119.test(input.charAt(peg$currPos))) {
8486
8753
  s0 = input.charAt(peg$currPos);
8487
8754
  peg$currPos++;
8488
8755
  } else {
8489
8756
  s0 = peg$FAILED;
8490
8757
  if (peg$silentFails === 0) {
8491
- peg$fail(peg$c113);
8758
+ peg$fail(peg$c120);
8492
8759
  }
8493
8760
  }
8494
8761
  return s0;
8495
8762
  }
8496
8763
  function peg$parsePc() {
8497
8764
  var s0;
8498
- if (peg$c114.test(input.charAt(peg$currPos))) {
8765
+ if (peg$c121.test(input.charAt(peg$currPos))) {
8499
8766
  s0 = input.charAt(peg$currPos);
8500
8767
  peg$currPos++;
8501
8768
  } else {
8502
8769
  s0 = peg$FAILED;
8503
8770
  if (peg$silentFails === 0) {
8504
- peg$fail(peg$c115);
8771
+ peg$fail(peg$c122);
8505
8772
  }
8506
8773
  }
8507
8774
  return s0;
8508
8775
  }
8509
8776
  function peg$parseHexDigit() {
8510
8777
  var s0;
8511
- if (peg$c118.test(input.charAt(peg$currPos))) {
8778
+ if (peg$c125.test(input.charAt(peg$currPos))) {
8512
8779
  s0 = input.charAt(peg$currPos);
8513
8780
  peg$currPos++;
8514
8781
  } else {
8515
8782
  s0 = peg$FAILED;
8516
8783
  if (peg$silentFails === 0) {
8517
- peg$fail(peg$c119);
8784
+ peg$fail(peg$c126);
8518
8785
  }
8519
8786
  }
8520
8787
  return s0;
@@ -8522,13 +8789,13 @@ function peg$parse(input, options) {
8522
8789
  function peg$parseBreakToken() {
8523
8790
  var s0, s1, s2, s3;
8524
8791
  s0 = peg$currPos;
8525
- if (input.substr(peg$currPos, 5) === peg$c120) {
8526
- s1 = peg$c120;
8792
+ if (input.substr(peg$currPos, 5) === peg$c127) {
8793
+ s1 = peg$c127;
8527
8794
  peg$currPos += 5;
8528
8795
  } else {
8529
8796
  s1 = peg$FAILED;
8530
8797
  if (peg$silentFails === 0) {
8531
- peg$fail(peg$c121);
8798
+ peg$fail(peg$c128);
8532
8799
  }
8533
8800
  }
8534
8801
  if (s1 !== peg$FAILED) {
@@ -8558,13 +8825,13 @@ function peg$parse(input, options) {
8558
8825
  function peg$parseCaseToken() {
8559
8826
  var s0, s1, s2, s3;
8560
8827
  s0 = peg$currPos;
8561
- if (input.substr(peg$currPos, 4) === peg$c122) {
8562
- s1 = peg$c122;
8828
+ if (input.substr(peg$currPos, 4) === peg$c129) {
8829
+ s1 = peg$c129;
8563
8830
  peg$currPos += 4;
8564
8831
  } else {
8565
8832
  s1 = peg$FAILED;
8566
8833
  if (peg$silentFails === 0) {
8567
- peg$fail(peg$c123);
8834
+ peg$fail(peg$c130);
8568
8835
  }
8569
8836
  }
8570
8837
  if (s1 !== peg$FAILED) {
@@ -8594,13 +8861,13 @@ function peg$parse(input, options) {
8594
8861
  function peg$parseCatchToken() {
8595
8862
  var s0, s1, s2, s3;
8596
8863
  s0 = peg$currPos;
8597
- if (input.substr(peg$currPos, 5) === peg$c124) {
8598
- s1 = peg$c124;
8864
+ if (input.substr(peg$currPos, 5) === peg$c131) {
8865
+ s1 = peg$c131;
8599
8866
  peg$currPos += 5;
8600
8867
  } else {
8601
8868
  s1 = peg$FAILED;
8602
8869
  if (peg$silentFails === 0) {
8603
- peg$fail(peg$c125);
8870
+ peg$fail(peg$c132);
8604
8871
  }
8605
8872
  }
8606
8873
  if (s1 !== peg$FAILED) {
@@ -8630,13 +8897,13 @@ function peg$parse(input, options) {
8630
8897
  function peg$parseClassToken() {
8631
8898
  var s0, s1, s2, s3;
8632
8899
  s0 = peg$currPos;
8633
- if (input.substr(peg$currPos, 5) === peg$c126) {
8634
- s1 = peg$c126;
8900
+ if (input.substr(peg$currPos, 5) === peg$c133) {
8901
+ s1 = peg$c133;
8635
8902
  peg$currPos += 5;
8636
8903
  } else {
8637
8904
  s1 = peg$FAILED;
8638
8905
  if (peg$silentFails === 0) {
8639
- peg$fail(peg$c127);
8906
+ peg$fail(peg$c134);
8640
8907
  }
8641
8908
  }
8642
8909
  if (s1 !== peg$FAILED) {
@@ -8666,13 +8933,13 @@ function peg$parse(input, options) {
8666
8933
  function peg$parseConstToken() {
8667
8934
  var s0, s1, s2, s3;
8668
8935
  s0 = peg$currPos;
8669
- if (input.substr(peg$currPos, 5) === peg$c128) {
8670
- s1 = peg$c128;
8936
+ if (input.substr(peg$currPos, 5) === peg$c135) {
8937
+ s1 = peg$c135;
8671
8938
  peg$currPos += 5;
8672
8939
  } else {
8673
8940
  s1 = peg$FAILED;
8674
8941
  if (peg$silentFails === 0) {
8675
- peg$fail(peg$c129);
8942
+ peg$fail(peg$c136);
8676
8943
  }
8677
8944
  }
8678
8945
  if (s1 !== peg$FAILED) {
@@ -8702,13 +8969,13 @@ function peg$parse(input, options) {
8702
8969
  function peg$parseContinueToken() {
8703
8970
  var s0, s1, s2, s3;
8704
8971
  s0 = peg$currPos;
8705
- if (input.substr(peg$currPos, 8) === peg$c130) {
8706
- s1 = peg$c130;
8972
+ if (input.substr(peg$currPos, 8) === peg$c137) {
8973
+ s1 = peg$c137;
8707
8974
  peg$currPos += 8;
8708
8975
  } else {
8709
8976
  s1 = peg$FAILED;
8710
8977
  if (peg$silentFails === 0) {
8711
- peg$fail(peg$c131);
8978
+ peg$fail(peg$c138);
8712
8979
  }
8713
8980
  }
8714
8981
  if (s1 !== peg$FAILED) {
@@ -8738,13 +9005,13 @@ function peg$parse(input, options) {
8738
9005
  function peg$parseDebuggerToken() {
8739
9006
  var s0, s1, s2, s3;
8740
9007
  s0 = peg$currPos;
8741
- if (input.substr(peg$currPos, 8) === peg$c132) {
8742
- s1 = peg$c132;
9008
+ if (input.substr(peg$currPos, 8) === peg$c139) {
9009
+ s1 = peg$c139;
8743
9010
  peg$currPos += 8;
8744
9011
  } else {
8745
9012
  s1 = peg$FAILED;
8746
9013
  if (peg$silentFails === 0) {
8747
- peg$fail(peg$c133);
9014
+ peg$fail(peg$c140);
8748
9015
  }
8749
9016
  }
8750
9017
  if (s1 !== peg$FAILED) {
@@ -8774,13 +9041,13 @@ function peg$parse(input, options) {
8774
9041
  function peg$parseDefaultToken() {
8775
9042
  var s0, s1, s2, s3;
8776
9043
  s0 = peg$currPos;
8777
- if (input.substr(peg$currPos, 7) === peg$c134) {
8778
- s1 = peg$c134;
9044
+ if (input.substr(peg$currPos, 7) === peg$c141) {
9045
+ s1 = peg$c141;
8779
9046
  peg$currPos += 7;
8780
9047
  } else {
8781
9048
  s1 = peg$FAILED;
8782
9049
  if (peg$silentFails === 0) {
8783
- peg$fail(peg$c135);
9050
+ peg$fail(peg$c142);
8784
9051
  }
8785
9052
  }
8786
9053
  if (s1 !== peg$FAILED) {
@@ -8810,13 +9077,13 @@ function peg$parse(input, options) {
8810
9077
  function peg$parseDeleteToken() {
8811
9078
  var s0, s1, s2, s3;
8812
9079
  s0 = peg$currPos;
8813
- if (input.substr(peg$currPos, 6) === peg$c136) {
8814
- s1 = peg$c136;
9080
+ if (input.substr(peg$currPos, 6) === peg$c143) {
9081
+ s1 = peg$c143;
8815
9082
  peg$currPos += 6;
8816
9083
  } else {
8817
9084
  s1 = peg$FAILED;
8818
9085
  if (peg$silentFails === 0) {
8819
- peg$fail(peg$c137);
9086
+ peg$fail(peg$c144);
8820
9087
  }
8821
9088
  }
8822
9089
  if (s1 !== peg$FAILED) {
@@ -8846,13 +9113,13 @@ function peg$parse(input, options) {
8846
9113
  function peg$parseDoToken() {
8847
9114
  var s0, s1, s2, s3;
8848
9115
  s0 = peg$currPos;
8849
- if (input.substr(peg$currPos, 2) === peg$c138) {
8850
- s1 = peg$c138;
9116
+ if (input.substr(peg$currPos, 2) === peg$c145) {
9117
+ s1 = peg$c145;
8851
9118
  peg$currPos += 2;
8852
9119
  } else {
8853
9120
  s1 = peg$FAILED;
8854
9121
  if (peg$silentFails === 0) {
8855
- peg$fail(peg$c139);
9122
+ peg$fail(peg$c146);
8856
9123
  }
8857
9124
  }
8858
9125
  if (s1 !== peg$FAILED) {
@@ -8882,13 +9149,13 @@ function peg$parse(input, options) {
8882
9149
  function peg$parseElseToken() {
8883
9150
  var s0, s1, s2, s3;
8884
9151
  s0 = peg$currPos;
8885
- if (input.substr(peg$currPos, 4) === peg$c140) {
8886
- s1 = peg$c140;
9152
+ if (input.substr(peg$currPos, 4) === peg$c147) {
9153
+ s1 = peg$c147;
8887
9154
  peg$currPos += 4;
8888
9155
  } else {
8889
9156
  s1 = peg$FAILED;
8890
9157
  if (peg$silentFails === 0) {
8891
- peg$fail(peg$c141);
9158
+ peg$fail(peg$c148);
8892
9159
  }
8893
9160
  }
8894
9161
  if (s1 !== peg$FAILED) {
@@ -8954,13 +9221,13 @@ function peg$parse(input, options) {
8954
9221
  function peg$parseExportToken() {
8955
9222
  var s0, s1, s2, s3;
8956
9223
  s0 = peg$currPos;
8957
- if (input.substr(peg$currPos, 6) === peg$c142) {
8958
- s1 = peg$c142;
9224
+ if (input.substr(peg$currPos, 6) === peg$c149) {
9225
+ s1 = peg$c149;
8959
9226
  peg$currPos += 6;
8960
9227
  } else {
8961
9228
  s1 = peg$FAILED;
8962
9229
  if (peg$silentFails === 0) {
8963
- peg$fail(peg$c143);
9230
+ peg$fail(peg$c150);
8964
9231
  }
8965
9232
  }
8966
9233
  if (s1 !== peg$FAILED) {
@@ -8990,13 +9257,13 @@ function peg$parse(input, options) {
8990
9257
  function peg$parseExtendsToken() {
8991
9258
  var s0, s1, s2, s3;
8992
9259
  s0 = peg$currPos;
8993
- if (input.substr(peg$currPos, 7) === peg$c144) {
8994
- s1 = peg$c144;
9260
+ if (input.substr(peg$currPos, 7) === peg$c151) {
9261
+ s1 = peg$c151;
8995
9262
  peg$currPos += 7;
8996
9263
  } else {
8997
9264
  s1 = peg$FAILED;
8998
9265
  if (peg$silentFails === 0) {
8999
- peg$fail(peg$c145);
9266
+ peg$fail(peg$c152);
9000
9267
  }
9001
9268
  }
9002
9269
  if (s1 !== peg$FAILED) {
@@ -9026,13 +9293,13 @@ function peg$parse(input, options) {
9026
9293
  function peg$parseFalseToken() {
9027
9294
  var s0, s1, s2, s3;
9028
9295
  s0 = peg$currPos;
9029
- if (input.substr(peg$currPos, 5) === peg$c146) {
9030
- s1 = peg$c146;
9296
+ if (input.substr(peg$currPos, 5) === peg$c153) {
9297
+ s1 = peg$c153;
9031
9298
  peg$currPos += 5;
9032
9299
  } else {
9033
9300
  s1 = peg$FAILED;
9034
9301
  if (peg$silentFails === 0) {
9035
- peg$fail(peg$c147);
9302
+ peg$fail(peg$c154);
9036
9303
  }
9037
9304
  }
9038
9305
  if (s1 !== peg$FAILED) {
@@ -9062,13 +9329,13 @@ function peg$parse(input, options) {
9062
9329
  function peg$parseFinallyToken() {
9063
9330
  var s0, s1, s2, s3;
9064
9331
  s0 = peg$currPos;
9065
- if (input.substr(peg$currPos, 7) === peg$c148) {
9066
- s1 = peg$c148;
9332
+ if (input.substr(peg$currPos, 7) === peg$c155) {
9333
+ s1 = peg$c155;
9067
9334
  peg$currPos += 7;
9068
9335
  } else {
9069
9336
  s1 = peg$FAILED;
9070
9337
  if (peg$silentFails === 0) {
9071
- peg$fail(peg$c149);
9338
+ peg$fail(peg$c156);
9072
9339
  }
9073
9340
  }
9074
9341
  if (s1 !== peg$FAILED) {
@@ -9098,13 +9365,13 @@ function peg$parse(input, options) {
9098
9365
  function peg$parseForToken() {
9099
9366
  var s0, s1, s2, s3;
9100
9367
  s0 = peg$currPos;
9101
- if (input.substr(peg$currPos, 3) === peg$c150) {
9102
- s1 = peg$c150;
9368
+ if (input.substr(peg$currPos, 3) === peg$c157) {
9369
+ s1 = peg$c157;
9103
9370
  peg$currPos += 3;
9104
9371
  } else {
9105
9372
  s1 = peg$FAILED;
9106
9373
  if (peg$silentFails === 0) {
9107
- peg$fail(peg$c151);
9374
+ peg$fail(peg$c158);
9108
9375
  }
9109
9376
  }
9110
9377
  if (s1 !== peg$FAILED) {
@@ -9134,13 +9401,13 @@ function peg$parse(input, options) {
9134
9401
  function peg$parseFunctionToken() {
9135
9402
  var s0, s1, s2, s3;
9136
9403
  s0 = peg$currPos;
9137
- if (input.substr(peg$currPos, 8) === peg$c152) {
9138
- s1 = peg$c152;
9404
+ if (input.substr(peg$currPos, 8) === peg$c159) {
9405
+ s1 = peg$c159;
9139
9406
  peg$currPos += 8;
9140
9407
  } else {
9141
9408
  s1 = peg$FAILED;
9142
9409
  if (peg$silentFails === 0) {
9143
- peg$fail(peg$c153);
9410
+ peg$fail(peg$c160);
9144
9411
  }
9145
9412
  }
9146
9413
  if (s1 !== peg$FAILED) {
@@ -9170,13 +9437,13 @@ function peg$parse(input, options) {
9170
9437
  function peg$parseIfToken() {
9171
9438
  var s0, s1, s2, s3;
9172
9439
  s0 = peg$currPos;
9173
- if (input.substr(peg$currPos, 2) === peg$c156) {
9174
- s1 = peg$c156;
9440
+ if (input.substr(peg$currPos, 2) === peg$c163) {
9441
+ s1 = peg$c163;
9175
9442
  peg$currPos += 2;
9176
9443
  } else {
9177
9444
  s1 = peg$FAILED;
9178
9445
  if (peg$silentFails === 0) {
9179
- peg$fail(peg$c157);
9446
+ peg$fail(peg$c164);
9180
9447
  }
9181
9448
  }
9182
9449
  if (s1 !== peg$FAILED) {
@@ -9206,13 +9473,13 @@ function peg$parse(input, options) {
9206
9473
  function peg$parseImportToken() {
9207
9474
  var s0, s1, s2, s3;
9208
9475
  s0 = peg$currPos;
9209
- if (input.substr(peg$currPos, 6) === peg$c158) {
9210
- s1 = peg$c158;
9476
+ if (input.substr(peg$currPos, 6) === peg$c165) {
9477
+ s1 = peg$c165;
9211
9478
  peg$currPos += 6;
9212
9479
  } else {
9213
9480
  s1 = peg$FAILED;
9214
9481
  if (peg$silentFails === 0) {
9215
- peg$fail(peg$c159);
9482
+ peg$fail(peg$c166);
9216
9483
  }
9217
9484
  }
9218
9485
  if (s1 !== peg$FAILED) {
@@ -9242,13 +9509,13 @@ function peg$parse(input, options) {
9242
9509
  function peg$parseInstanceofToken() {
9243
9510
  var s0, s1, s2, s3;
9244
9511
  s0 = peg$currPos;
9245
- if (input.substr(peg$currPos, 10) === peg$c160) {
9246
- s1 = peg$c160;
9512
+ if (input.substr(peg$currPos, 10) === peg$c167) {
9513
+ s1 = peg$c167;
9247
9514
  peg$currPos += 10;
9248
9515
  } else {
9249
9516
  s1 = peg$FAILED;
9250
9517
  if (peg$silentFails === 0) {
9251
- peg$fail(peg$c161);
9518
+ peg$fail(peg$c168);
9252
9519
  }
9253
9520
  }
9254
9521
  if (s1 !== peg$FAILED) {
@@ -9278,13 +9545,13 @@ function peg$parse(input, options) {
9278
9545
  function peg$parseInToken() {
9279
9546
  var s0, s1, s2, s3;
9280
9547
  s0 = peg$currPos;
9281
- if (input.substr(peg$currPos, 2) === peg$c162) {
9282
- s1 = peg$c162;
9548
+ if (input.substr(peg$currPos, 2) === peg$c169) {
9549
+ s1 = peg$c169;
9283
9550
  peg$currPos += 2;
9284
9551
  } else {
9285
9552
  s1 = peg$FAILED;
9286
9553
  if (peg$silentFails === 0) {
9287
- peg$fail(peg$c163);
9554
+ peg$fail(peg$c170);
9288
9555
  }
9289
9556
  }
9290
9557
  if (s1 !== peg$FAILED) {
@@ -9314,13 +9581,13 @@ function peg$parse(input, options) {
9314
9581
  function peg$parseNewToken() {
9315
9582
  var s0, s1, s2, s3;
9316
9583
  s0 = peg$currPos;
9317
- if (input.substr(peg$currPos, 3) === peg$c164) {
9318
- s1 = peg$c164;
9584
+ if (input.substr(peg$currPos, 3) === peg$c171) {
9585
+ s1 = peg$c171;
9319
9586
  peg$currPos += 3;
9320
9587
  } else {
9321
9588
  s1 = peg$FAILED;
9322
9589
  if (peg$silentFails === 0) {
9323
- peg$fail(peg$c165);
9590
+ peg$fail(peg$c172);
9324
9591
  }
9325
9592
  }
9326
9593
  if (s1 !== peg$FAILED) {
@@ -9350,13 +9617,13 @@ function peg$parse(input, options) {
9350
9617
  function peg$parseNullToken() {
9351
9618
  var s0, s1, s2, s3;
9352
9619
  s0 = peg$currPos;
9353
- if (input.substr(peg$currPos, 4) === peg$c166) {
9354
- s1 = peg$c166;
9620
+ if (input.substr(peg$currPos, 4) === peg$c173) {
9621
+ s1 = peg$c173;
9355
9622
  peg$currPos += 4;
9356
9623
  } else {
9357
9624
  s1 = peg$FAILED;
9358
9625
  if (peg$silentFails === 0) {
9359
- peg$fail(peg$c167);
9626
+ peg$fail(peg$c174);
9360
9627
  }
9361
9628
  }
9362
9629
  if (s1 !== peg$FAILED) {
@@ -9386,13 +9653,13 @@ function peg$parse(input, options) {
9386
9653
  function peg$parseReturnToken() {
9387
9654
  var s0, s1, s2, s3;
9388
9655
  s0 = peg$currPos;
9389
- if (input.substr(peg$currPos, 6) === peg$c168) {
9390
- s1 = peg$c168;
9656
+ if (input.substr(peg$currPos, 6) === peg$c175) {
9657
+ s1 = peg$c175;
9391
9658
  peg$currPos += 6;
9392
9659
  } else {
9393
9660
  s1 = peg$FAILED;
9394
9661
  if (peg$silentFails === 0) {
9395
- peg$fail(peg$c169);
9662
+ peg$fail(peg$c176);
9396
9663
  }
9397
9664
  }
9398
9665
  if (s1 !== peg$FAILED) {
@@ -9422,13 +9689,13 @@ function peg$parse(input, options) {
9422
9689
  function peg$parseSuperToken() {
9423
9690
  var s0, s1, s2, s3;
9424
9691
  s0 = peg$currPos;
9425
- if (input.substr(peg$currPos, 5) === peg$c172) {
9426
- s1 = peg$c172;
9692
+ if (input.substr(peg$currPos, 5) === peg$c179) {
9693
+ s1 = peg$c179;
9427
9694
  peg$currPos += 5;
9428
9695
  } else {
9429
9696
  s1 = peg$FAILED;
9430
9697
  if (peg$silentFails === 0) {
9431
- peg$fail(peg$c173);
9698
+ peg$fail(peg$c180);
9432
9699
  }
9433
9700
  }
9434
9701
  if (s1 !== peg$FAILED) {
@@ -9458,13 +9725,13 @@ function peg$parse(input, options) {
9458
9725
  function peg$parseSwitchToken() {
9459
9726
  var s0, s1, s2, s3;
9460
9727
  s0 = peg$currPos;
9461
- if (input.substr(peg$currPos, 6) === peg$c174) {
9462
- s1 = peg$c174;
9728
+ if (input.substr(peg$currPos, 6) === peg$c181) {
9729
+ s1 = peg$c181;
9463
9730
  peg$currPos += 6;
9464
9731
  } else {
9465
9732
  s1 = peg$FAILED;
9466
9733
  if (peg$silentFails === 0) {
9467
- peg$fail(peg$c175);
9734
+ peg$fail(peg$c182);
9468
9735
  }
9469
9736
  }
9470
9737
  if (s1 !== peg$FAILED) {
@@ -9494,13 +9761,13 @@ function peg$parse(input, options) {
9494
9761
  function peg$parseThisToken() {
9495
9762
  var s0, s1, s2, s3;
9496
9763
  s0 = peg$currPos;
9497
- if (input.substr(peg$currPos, 4) === peg$c176) {
9498
- s1 = peg$c176;
9764
+ if (input.substr(peg$currPos, 4) === peg$c183) {
9765
+ s1 = peg$c183;
9499
9766
  peg$currPos += 4;
9500
9767
  } else {
9501
9768
  s1 = peg$FAILED;
9502
9769
  if (peg$silentFails === 0) {
9503
- peg$fail(peg$c177);
9770
+ peg$fail(peg$c184);
9504
9771
  }
9505
9772
  }
9506
9773
  if (s1 !== peg$FAILED) {
@@ -9530,13 +9797,13 @@ function peg$parse(input, options) {
9530
9797
  function peg$parseThrowToken() {
9531
9798
  var s0, s1, s2, s3;
9532
9799
  s0 = peg$currPos;
9533
- if (input.substr(peg$currPos, 5) === peg$c178) {
9534
- s1 = peg$c178;
9800
+ if (input.substr(peg$currPos, 5) === peg$c185) {
9801
+ s1 = peg$c185;
9535
9802
  peg$currPos += 5;
9536
9803
  } else {
9537
9804
  s1 = peg$FAILED;
9538
9805
  if (peg$silentFails === 0) {
9539
- peg$fail(peg$c179);
9806
+ peg$fail(peg$c186);
9540
9807
  }
9541
9808
  }
9542
9809
  if (s1 !== peg$FAILED) {
@@ -9566,13 +9833,13 @@ function peg$parse(input, options) {
9566
9833
  function peg$parseTrueToken() {
9567
9834
  var s0, s1, s2, s3;
9568
9835
  s0 = peg$currPos;
9569
- if (input.substr(peg$currPos, 4) === peg$c180) {
9570
- s1 = peg$c180;
9836
+ if (input.substr(peg$currPos, 4) === peg$c187) {
9837
+ s1 = peg$c187;
9571
9838
  peg$currPos += 4;
9572
9839
  } else {
9573
9840
  s1 = peg$FAILED;
9574
9841
  if (peg$silentFails === 0) {
9575
- peg$fail(peg$c181);
9842
+ peg$fail(peg$c188);
9576
9843
  }
9577
9844
  }
9578
9845
  if (s1 !== peg$FAILED) {
@@ -9602,13 +9869,13 @@ function peg$parse(input, options) {
9602
9869
  function peg$parseTryToken() {
9603
9870
  var s0, s1, s2, s3;
9604
9871
  s0 = peg$currPos;
9605
- if (input.substr(peg$currPos, 3) === peg$c182) {
9606
- s1 = peg$c182;
9872
+ if (input.substr(peg$currPos, 3) === peg$c189) {
9873
+ s1 = peg$c189;
9607
9874
  peg$currPos += 3;
9608
9875
  } else {
9609
9876
  s1 = peg$FAILED;
9610
9877
  if (peg$silentFails === 0) {
9611
- peg$fail(peg$c183);
9878
+ peg$fail(peg$c190);
9612
9879
  }
9613
9880
  }
9614
9881
  if (s1 !== peg$FAILED) {
@@ -9638,13 +9905,13 @@ function peg$parse(input, options) {
9638
9905
  function peg$parseTypeofToken() {
9639
9906
  var s0, s1, s2, s3;
9640
9907
  s0 = peg$currPos;
9641
- if (input.substr(peg$currPos, 6) === peg$c184) {
9642
- s1 = peg$c184;
9908
+ if (input.substr(peg$currPos, 6) === peg$c191) {
9909
+ s1 = peg$c191;
9643
9910
  peg$currPos += 6;
9644
9911
  } else {
9645
9912
  s1 = peg$FAILED;
9646
9913
  if (peg$silentFails === 0) {
9647
- peg$fail(peg$c185);
9914
+ peg$fail(peg$c192);
9648
9915
  }
9649
9916
  }
9650
9917
  if (s1 !== peg$FAILED) {
@@ -9674,13 +9941,13 @@ function peg$parse(input, options) {
9674
9941
  function peg$parseVarToken() {
9675
9942
  var s0, s1, s2, s3;
9676
9943
  s0 = peg$currPos;
9677
- if (input.substr(peg$currPos, 3) === peg$c186) {
9678
- s1 = peg$c186;
9944
+ if (input.substr(peg$currPos, 3) === peg$c193) {
9945
+ s1 = peg$c193;
9679
9946
  peg$currPos += 3;
9680
9947
  } else {
9681
9948
  s1 = peg$FAILED;
9682
9949
  if (peg$silentFails === 0) {
9683
- peg$fail(peg$c187);
9950
+ peg$fail(peg$c194);
9684
9951
  }
9685
9952
  }
9686
9953
  if (s1 !== peg$FAILED) {
@@ -9710,13 +9977,13 @@ function peg$parse(input, options) {
9710
9977
  function peg$parseVoidToken() {
9711
9978
  var s0, s1, s2, s3;
9712
9979
  s0 = peg$currPos;
9713
- if (input.substr(peg$currPos, 4) === peg$c188) {
9714
- s1 = peg$c188;
9980
+ if (input.substr(peg$currPos, 4) === peg$c195) {
9981
+ s1 = peg$c195;
9715
9982
  peg$currPos += 4;
9716
9983
  } else {
9717
9984
  s1 = peg$FAILED;
9718
9985
  if (peg$silentFails === 0) {
9719
- peg$fail(peg$c189);
9986
+ peg$fail(peg$c196);
9720
9987
  }
9721
9988
  }
9722
9989
  if (s1 !== peg$FAILED) {
@@ -9746,13 +10013,13 @@ function peg$parse(input, options) {
9746
10013
  function peg$parseWhileToken() {
9747
10014
  var s0, s1, s2, s3;
9748
10015
  s0 = peg$currPos;
9749
- if (input.substr(peg$currPos, 5) === peg$c190) {
9750
- s1 = peg$c190;
10016
+ if (input.substr(peg$currPos, 5) === peg$c197) {
10017
+ s1 = peg$c197;
9751
10018
  peg$currPos += 5;
9752
10019
  } else {
9753
10020
  s1 = peg$FAILED;
9754
10021
  if (peg$silentFails === 0) {
9755
- peg$fail(peg$c191);
10022
+ peg$fail(peg$c198);
9756
10023
  }
9757
10024
  }
9758
10025
  if (s1 !== peg$FAILED) {
@@ -9782,13 +10049,13 @@ function peg$parse(input, options) {
9782
10049
  function peg$parseWithToken() {
9783
10050
  var s0, s1, s2, s3;
9784
10051
  s0 = peg$currPos;
9785
- if (input.substr(peg$currPos, 4) === peg$c192) {
9786
- s1 = peg$c192;
10052
+ if (input.substr(peg$currPos, 4) === peg$c199) {
10053
+ s1 = peg$c199;
9787
10054
  peg$currPos += 4;
9788
10055
  } else {
9789
10056
  s1 = peg$FAILED;
9790
10057
  if (peg$silentFails === 0) {
9791
- peg$fail(peg$c193);
10058
+ peg$fail(peg$c200);
9792
10059
  }
9793
10060
  }
9794
10061
  if (s1 !== peg$FAILED) {
@@ -9880,6 +10147,8 @@ class Variables {
9880
10147
  curr = curr.props[member];
9881
10148
  if (isImportedType(curr))
9882
10149
  curr = curr.type;
10150
+ if (isRecursiveType(curr) && curr.resolvedType)
10151
+ curr = curr.resolvedType;
9883
10152
  } else {
9884
10153
  validations.push(`the data field [${accessor.join(".")}] not found in Jay data`);
9885
10154
  curr = JayUnknown;
@@ -10059,6 +10328,50 @@ function isConditional(node2) {
10059
10328
  function isForEach(node2) {
10060
10329
  return node2.nodeType !== NodeType.TEXT_NODE && node2.hasAttribute("forEach");
10061
10330
  }
10331
+ function isRecurse(node2) {
10332
+ return node2.nodeType !== NodeType.TEXT_NODE && node2.rawTagName?.toLowerCase() === "recurse";
10333
+ }
10334
+ function isRecurseWithData(node2) {
10335
+ if (!isRecurse(node2))
10336
+ return false;
10337
+ const accessor = node2.getAttribute("accessor");
10338
+ return accessor != null && accessor !== ".";
10339
+ }
10340
+ function isWithData(node2) {
10341
+ if (node2.nodeType === NodeType.TEXT_NODE)
10342
+ return false;
10343
+ const element = node2;
10344
+ if (!element.rawTagName)
10345
+ return false;
10346
+ return element.rawTagName.toLowerCase() === "with-data";
10347
+ }
10348
+ const AsyncDirectiveTypes = {
10349
+ resolved: {
10350
+ directive: "when-resolved",
10351
+ import: Import.resolved,
10352
+ name: "resolved",
10353
+ isAsync: true
10354
+ },
10355
+ loading: { directive: "when-loading", import: Import.pending, name: "pending", isAsync: true },
10356
+ rejected: {
10357
+ directive: "when-rejected",
10358
+ import: Import.rejected,
10359
+ name: "rejected",
10360
+ isAsync: true
10361
+ },
10362
+ notAsync: { isAsync: false }
10363
+ };
10364
+ function checkAsync(node2) {
10365
+ if (node2.nodeType !== NodeType.TEXT_NODE) {
10366
+ if (node2.hasAttribute(AsyncDirectiveTypes.resolved.directive))
10367
+ return AsyncDirectiveTypes.resolved;
10368
+ else if (node2.hasAttribute(AsyncDirectiveTypes.loading.directive))
10369
+ return AsyncDirectiveTypes.loading;
10370
+ else if (node2.hasAttribute(AsyncDirectiveTypes.rejected.directive))
10371
+ return AsyncDirectiveTypes.rejected;
10372
+ }
10373
+ return AsyncDirectiveTypes.notAsync;
10374
+ }
10062
10375
  function ensureSingleChildElement(node2) {
10063
10376
  const elements = node2.childNodes.filter((child) => child.nodeType === NodeType.ELEMENT_NODE);
10064
10377
  if (elements.length === 1) {
@@ -10081,7 +10394,8 @@ function renderInterface(aType) {
10081
10394
  genInterface += Object.keys(aType.props).map((prop) => {
10082
10395
  let childType = aType.props[prop];
10083
10396
  if (childType instanceof JayImportedType) {
10084
- return ` ${prop}: ${childType.name}`;
10397
+ const optional = childType.isOptional ? "?" : "";
10398
+ return ` ${prop}${optional}: ${childType.name}`;
10085
10399
  } else if (isObjectType$1(childType)) {
10086
10400
  childInterfaces.push(renderInterface(childType));
10087
10401
  return ` ${prop}: ${childType.name}`;
@@ -10093,17 +10407,42 @@ function renderInterface(aType) {
10093
10407
  }
10094
10408
  if (arrayItemType instanceof JayImportedType) {
10095
10409
  return ` ${prop}: Array<${arrayItemType.name}>`;
10410
+ } else if (isRecursiveType(arrayItemType)) {
10411
+ if (!arrayItemType.resolvedType) {
10412
+ throw new Error(
10413
+ `Recursive type not resolved: ${arrayItemType.referencePath}`
10414
+ );
10415
+ }
10416
+ return ` ${prop}: Array<${arrayItemType.resolvedType.name}>`;
10096
10417
  } else {
10097
10418
  throw new Error("not implemented yet");
10098
10419
  }
10099
- } else if (isAtomicType(childType))
10420
+ } else if (isAtomicType(childType)) {
10100
10421
  return ` ${prop}: ${childType.name}`;
10101
- else if (isEnumType(childType)) {
10422
+ } else if (isPromiseType(childType)) {
10423
+ let promiseItemType = childType.itemType;
10424
+ if (isAtomicType(promiseItemType))
10425
+ return ` ${prop}: Promise<${promiseItemType.name}>`;
10426
+ else if (isObjectType$1(promiseItemType)) {
10427
+ childInterfaces.push(renderInterface(promiseItemType));
10428
+ return ` ${prop}: Promise<${promiseItemType.name}>`;
10429
+ } else if (isArrayType$1(promiseItemType) && isObjectType$1(promiseItemType.itemType)) {
10430
+ childInterfaces.push(renderInterface(promiseItemType.itemType));
10431
+ return ` ${prop}: Promise<Array<${promiseItemType.itemType.name}>>`;
10432
+ }
10433
+ } else if (isEnumType(childType)) {
10102
10434
  let genEnum = `export enum ${childType.name} {
10103
10435
  ${childType.values.map((_) => " " + _).join(",\n")}
10104
10436
  }`;
10105
10437
  childInterfaces.push(genEnum);
10106
10438
  return ` ${prop}: ${childType.name}`;
10439
+ } else if (isRecursiveType(childType)) {
10440
+ if (!childType.resolvedType) {
10441
+ throw new Error(
10442
+ `Recursive type not resolved: ${childType.referencePath}`
10443
+ );
10444
+ }
10445
+ return ` ${prop}: ${childType.resolvedType.name} | null`;
10107
10446
  } else
10108
10447
  throw new Error(`unknown type ${childType.name}, ${childType.kind}`);
10109
10448
  }).join(",\n");
@@ -10403,7 +10742,7 @@ function markAutoOnImportedRefs(deDuplicated, headlessImports) {
10403
10742
  deDuplicated?.imported?.repeatedRefsTypeName
10404
10743
  );
10405
10744
  }
10406
- function optimizeRefs({ rendered, imports, validations, refs }, headlessImports = []) {
10745
+ function optimizeRefs({ rendered, imports, validations, refs, recursiveRegions }, headlessImports = []) {
10407
10746
  const deDuplicateRefsTree = (refs2) => {
10408
10747
  const mergedRefsMap = refs2.refs.reduce((refsMap, ref) => {
10409
10748
  if (refsMap[ref.ref] === ref.ref) {
@@ -10455,7 +10794,7 @@ function optimizeRefs({ rendered, imports, validations, refs }, headlessImports
10455
10794
  { ...markedAutoOnImported.children, ...importedRefs },
10456
10795
  markedAutoOnImported.repeated
10457
10796
  );
10458
- return new RenderFragment(rendered, imports, validations, combined);
10797
+ return new RenderFragment(rendered, imports, validations, combined, recursiveRegions);
10459
10798
  }
10460
10799
  var ReferenceManagerTarget = /* @__PURE__ */ ((ReferenceManagerTarget2) => {
10461
10800
  ReferenceManagerTarget2[ReferenceManagerTarget2["element"] = 0] = "element";
@@ -10711,7 +11050,7 @@ function renderAttributes$1(element, { variables }) {
10711
11050
  Object.keys(attributes2).forEach((attrName) => {
10712
11051
  let attrCanonical = attrName.toLowerCase();
10713
11052
  let attrKey = attrCanonical.match(attributesRequiresQuotes$1) ? `"${attrCanonical}"` : attrCanonical;
10714
- if (attrCanonical === "if" || attrCanonical === "foreach" || attrCanonical === "trackby" || attrCanonical === "ref")
11053
+ if (attrCanonical === "if" || attrCanonical === "foreach" || attrCanonical === "trackby" || attrCanonical === "ref" || attrCanonical === AsyncDirectiveTypes.loading.directive || attrCanonical === AsyncDirectiveTypes.resolved.directive || attrCanonical === AsyncDirectiveTypes.rejected.directive)
10715
11054
  return;
10716
11055
  if (attrCanonical === "style")
10717
11056
  renderedAttributes.push(
@@ -10831,7 +11170,8 @@ function renderNode(node2, context) {
10831
11170
  `${currIndent.firstLine}${tagFunc.elementFunction}('${tagFunc.tag}', ${attributes2.rendered}, [${children.rendered}${currIndent.lastLine}]${refWithPrefixComma})`,
10832
11171
  children.imports.plus(Import.dynamicElement).plus(attributes2.imports).plus(ref.imports).plus(tagFunc.import),
10833
11172
  [...attributes2.validations, ...children.validations, ...ref.validations],
10834
- mergeRefsTrees(attributes2.refs, children.refs, ref.refs)
11173
+ mergeRefsTrees(attributes2.refs, children.refs, ref.refs),
11174
+ [...attributes2.recursiveRegions, ...children.recursiveRegions, ...ref.recursiveRegions]
10835
11175
  );
10836
11176
  }
10837
11177
  function e2(tagName, attributes2, children, ref, currIndent = indent) {
@@ -10841,31 +11181,49 @@ function renderNode(node2, context) {
10841
11181
  `${currIndent.firstLine}${tagFunc.elementFunction}('${tagFunc.tag}', ${attributes2.rendered}, [${children.rendered}${currIndent.lastLine}]${refWithPrefixComma})`,
10842
11182
  children.imports.plus(Import.element).plus(attributes2.imports).plus(ref.imports).plus(tagFunc.import),
10843
11183
  [...attributes2.validations, ...children.validations, ...ref.validations],
10844
- mergeRefsTrees(attributes2.refs, children.refs, ref.refs)
11184
+ mergeRefsTrees(attributes2.refs, children.refs, ref.refs),
11185
+ [...attributes2.recursiveRegions, ...children.recursiveRegions, ...ref.recursiveRegions]
10845
11186
  );
10846
11187
  }
10847
11188
  function renderHtmlElement(htmlElement, newContext) {
10848
11189
  if (importedSymbols.has(htmlElement.rawTagName))
10849
11190
  return renderNestedComponent(htmlElement, newContext);
11191
+ let contextForChildren = newContext;
11192
+ let currentRegion = null;
11193
+ if (htmlElement.hasAttribute("ref")) {
11194
+ const refName = htmlElement.getAttribute("ref");
11195
+ currentRegion = {
11196
+ refName,
11197
+ hasRecurse: false,
11198
+ isInsideGuard: newContext.isInsideGuard
11199
+ };
11200
+ contextForChildren = {
11201
+ ...newContext,
11202
+ recursiveRegions: [...newContext.recursiveRegions, currentRegion]
11203
+ };
11204
+ }
10850
11205
  let childNodes = node2.childNodes.length > 1 ? node2.childNodes.filter(
10851
11206
  (_) => _.nodeType !== NodeType.TEXT_NODE || _.innerText.trim() !== ""
10852
11207
  ) : node2.childNodes;
10853
- let childIndent = newContext.indent.child();
11208
+ let childIndent = contextForChildren.indent.child();
10854
11209
  if (childNodes.length === 1 && childNodes[0].nodeType === NodeType.TEXT_NODE)
10855
11210
  childIndent = childIndent.noFirstLineBreak();
10856
- let needDynamicElement = childNodes.map((_) => isConditional(_) || isForEach(_)).reduce((prev, current) => prev || current, false);
10857
- let childRenders = childNodes.length === 0 ? RenderFragment.empty() : childNodes.map((_) => renderNode(_, newContext)).reduce(
11211
+ let needDynamicElement = childNodes.map(
11212
+ (_) => isConditional(_) || isForEach(_) || isRecurseWithData(_) || isWithData(_) || checkAsync(_).isAsync
11213
+ ).reduce((prev, current) => prev || current, false);
11214
+ let childRenders = childNodes.length === 0 ? RenderFragment.empty() : childNodes.map((_) => renderNode(_, contextForChildren)).reduce(
10858
11215
  (prev, current) => RenderFragment.merge(prev, current, ",\n"),
10859
11216
  RenderFragment.empty()
10860
11217
  ).map(
10861
11218
  (children) => childIndent.firstLineBreak ? `
10862
11219
  ${children}
10863
- ${newContext.indent.firstLine}` : children
11220
+ ${contextForChildren.indent.firstLine}` : children
10864
11221
  );
10865
- let attributes2 = renderAttributes$1(htmlElement, newContext);
10866
- let renderedRef = renderElementRef$1(htmlElement, newContext);
11222
+ let attributes2 = renderAttributes$1(htmlElement, contextForChildren);
11223
+ let renderedRef = renderElementRef$1(htmlElement, contextForChildren);
11224
+ let result;
10867
11225
  if (needDynamicElement)
10868
- return de2(
11226
+ result = de2(
10869
11227
  htmlElement.rawTagName,
10870
11228
  attributes2,
10871
11229
  childRenders,
@@ -10873,13 +11231,30 @@ ${newContext.indent.firstLine}` : children
10873
11231
  newContext.indent
10874
11232
  );
10875
11233
  else
10876
- return e2(
11234
+ result = e2(
10877
11235
  htmlElement.rawTagName,
10878
11236
  attributes2,
10879
11237
  childRenders,
10880
11238
  renderedRef,
10881
11239
  newContext.indent
10882
11240
  );
11241
+ if (currentRegion && currentRegion.hasRecurse) {
11242
+ const functionName = `renderRecursiveRegion_${currentRegion.refName}`;
11243
+ const recursiveRegion = {
11244
+ refName: currentRegion.refName,
11245
+ renderedContent: result.rendered,
11246
+ viewStateType: contextForChildren.variables.currentType.name
11247
+ };
11248
+ const functionCall = `${newContext.indent.firstLine}${functionName}()`;
11249
+ result = new RenderFragment(
11250
+ functionCall,
11251
+ result.imports.plus(Import.baseJayElement),
11252
+ result.validations,
11253
+ result.refs,
11254
+ [...result.recursiveRegions, recursiveRegion]
11255
+ );
11256
+ }
11257
+ return result;
10883
11258
  }
10884
11259
  function c(renderedCondition, childElement) {
10885
11260
  return new RenderFragment(
@@ -10888,7 +11263,8 @@ ${newContext.indent.firstLine}` : children
10888
11263
  ${indent.firstLine})`,
10889
11264
  Imports.merge(childElement.imports, renderedCondition.imports).plus(Import.conditional),
10890
11265
  [...renderedCondition.validations, ...childElement.validations],
10891
- mergeRefsTrees(renderedCondition.refs, childElement.refs)
11266
+ mergeRefsTrees(renderedCondition.refs, childElement.refs),
11267
+ [...renderedCondition.recursiveRegions, ...childElement.recursiveRegions]
10892
11268
  );
10893
11269
  }
10894
11270
  function renderForEach(renderedForEach, collectionVariables, trackBy, childElement) {
@@ -10897,7 +11273,17 @@ ${indent.firstLine})`,
10897
11273
  ${indent.curr}return ${childElement.rendered}}, '${trackBy}')`,
10898
11274
  childElement.imports.plus(Import.forEach),
10899
11275
  [...renderedForEach.validations, ...childElement.validations],
10900
- childElement.refs
11276
+ childElement.refs,
11277
+ [...renderedForEach.recursiveRegions, ...childElement.recursiveRegions]
11278
+ );
11279
+ }
11280
+ function renderAsync(asyncType, getPromiseFragment, childElement, resolvedGenericTypes) {
11281
+ return new RenderFragment(
11282
+ `${indent.firstLine}${asyncType.name}${resolvedGenericTypes}(${getPromiseFragment.rendered}, () => ${childElement.rendered.trim()})`,
11283
+ childElement.imports.plus(asyncType.import),
11284
+ [...getPromiseFragment.validations, ...childElement.validations],
11285
+ childElement.refs,
11286
+ [...getPromiseFragment.recursiveRegions, ...childElement.recursiveRegions]
10901
11287
  );
10902
11288
  }
10903
11289
  function renderNestedComponent(htmlElement, newContext) {
@@ -10927,11 +11313,90 @@ ${indent.curr}return ${childElement.rendered}}, '${trackBy}')`,
10927
11313
  return renderTextNode(variables, text2, indent);
10928
11314
  case NodeType.ELEMENT_NODE:
10929
11315
  let htmlElement = node2;
10930
- if (isConditional(htmlElement)) {
11316
+ if (isWithData(htmlElement)) {
11317
+ const accessor = htmlElement.getAttribute("accessor");
11318
+ if (!accessor) {
11319
+ return new RenderFragment("", Imports.none(), [
11320
+ '<with-data> element must have an "accessor" attribute'
11321
+ ]);
11322
+ }
11323
+ const accessorExpr = parseAccessor(accessor, variables);
11324
+ let depth = 1;
11325
+ let parent = variables;
11326
+ const maxDepth = 100;
11327
+ while (parent && parent.parent && depth < maxDepth) {
11328
+ depth++;
11329
+ parent = parent.parent;
11330
+ }
11331
+ const newVariables = new Variables(accessorExpr.resolvedType, variables, depth);
11332
+ const childNodes = htmlElement.childNodes.filter(
11333
+ (child) => child.nodeType !== NodeType.TEXT_NODE || child.innerText.trim() !== ""
11334
+ );
11335
+ if (childNodes.length !== 1) {
11336
+ return new RenderFragment("", Imports.none(), [
11337
+ `<with-data> element must have exactly one child element, but found ${childNodes.length}`
11338
+ ]);
11339
+ }
11340
+ const childElement = renderNode(childNodes[0], {
11341
+ ...context,
11342
+ variables: newVariables,
11343
+ indent
11344
+ });
11345
+ const accessorFunction = `(${variables.currentVar}: ${variables.currentType.name}) => ${accessorExpr.render().rendered}`;
11346
+ const nestedChildElement = nestRefs(accessorExpr.terms, childElement);
11347
+ return new RenderFragment(
11348
+ `${indent.firstLine}withData(${accessorFunction}, () => ${nestedChildElement.rendered})`,
11349
+ nestedChildElement.imports.plus(Import.withData).plus(accessorExpr.render().imports),
11350
+ [...accessorExpr.validations, ...nestedChildElement.validations],
11351
+ nestedChildElement.refs,
11352
+ nestedChildElement.recursiveRegions
11353
+ );
11354
+ } else if (isRecurse(htmlElement)) {
11355
+ const refAttr = htmlElement.getAttribute("ref");
11356
+ const accessorAttr = htmlElement.getAttribute("accessor");
11357
+ if (!refAttr) {
11358
+ return new RenderFragment("", Imports.none(), [
11359
+ '<recurse> element must have a "ref" attribute'
11360
+ ]);
11361
+ }
11362
+ const region = context.recursiveRegions.find((r) => r.refName === refAttr);
11363
+ if (!region) {
11364
+ return new RenderFragment("", Imports.none(), [
11365
+ `<recurse ref="${refAttr}"> references unknown ref - no element with ref="${refAttr}" found as ancestor`
11366
+ ]);
11367
+ }
11368
+ if ((!accessorAttr || accessorAttr === ".") && !context.isInsideGuard) {
11369
+ return new RenderFragment("", Imports.none(), [
11370
+ `<recurse ref="${refAttr}"> without accessor must be inside a forEach loop or conditional (if="...") to provide context and prevent infinite recursion. Suggestions: 1) Wrap in a forEach loop if iterating over an array (e.g., <li forEach="children" trackBy="id"><recurse ref="${refAttr}"/></li>), 2) Add an accessor attribute if accessing a nested property (e.g., <recurse ref="${refAttr}" accessor="child"/>), or 3) Wrap in a conditional to guard the recursion (e.g., <div if="hasChild"><recurse ref="${refAttr}" accessor="child"/></div>).`
11371
+ ]);
11372
+ }
11373
+ region.hasRecurse = true;
11374
+ const functionName = `renderRecursiveRegion_${refAttr}`;
11375
+ if (accessorAttr && accessorAttr !== ".") {
11376
+ const accessor = parseAccessor(accessorAttr, variables);
11377
+ const accessorCode = accessor.render();
11378
+ const accessorFunction = `(${variables.currentVar}) => ${accessorCode.rendered}`;
11379
+ return new RenderFragment(
11380
+ `${indent.firstLine}withData(${accessorFunction}, () => ${functionName}())`,
11381
+ Imports.for(Import.withData).plus(accessorCode.imports),
11382
+ [...accessor.validations, ...accessorCode.validations],
11383
+ mkRefsTree([], {})
11384
+ );
11385
+ } else {
11386
+ return new RenderFragment(
11387
+ `${indent.firstLine}${functionName}()`,
11388
+ Imports.none(),
11389
+ [],
11390
+ mkRefsTree([], {})
11391
+ );
11392
+ }
11393
+ } else if (isConditional(htmlElement)) {
10931
11394
  let condition = htmlElement.getAttribute("if");
10932
11395
  let childElement = renderHtmlElement(htmlElement, {
10933
11396
  ...context,
10934
- indent: indent.child()
11397
+ indent: indent.child(),
11398
+ isInsideGuard: true
11399
+ // Mark that we're inside a guard
10935
11400
  });
10936
11401
  let renderedCondition = parseCondition(condition, variables);
10937
11402
  return c(renderedCondition, childElement);
@@ -10956,13 +11421,66 @@ ${indent.curr}return ${childElement.rendered}}, '${trackBy}')`,
10956
11421
  ...context,
10957
11422
  variables: forEachVariables,
10958
11423
  indent: indent.child().noFirstLineBreak().withLastLineBreak(),
10959
- dynamicRef: true
11424
+ dynamicRef: true,
11425
+ isInsideGuard: true
11426
+ // Mark that we're inside a guard
10960
11427
  };
10961
11428
  let childElement = renderHtmlElement(htmlElement, newContext);
10962
11429
  return nestRefs(
10963
11430
  forEachAccessPath,
10964
11431
  renderForEach(forEachFragment, forEachVariables, trackBy, childElement)
10965
11432
  );
11433
+ } else if (checkAsync(htmlElement).isAsync) {
11434
+ const asyncDirective = checkAsync(htmlElement);
11435
+ const asyncProperty = htmlElement.getAttribute(asyncDirective.directive);
11436
+ const asyncAccessor = parseAccessor(asyncProperty, variables);
11437
+ const asyncAccessPath = asyncAccessor.terms;
11438
+ if (asyncAccessor.resolvedType === JayUnknown)
11439
+ return new RenderFragment("", Imports.none(), [
11440
+ `async directive - failed to resolve type for ${asyncDirective}=${asyncProperty}`
11441
+ ]);
11442
+ if (!isPromiseType(asyncAccessor.resolvedType))
11443
+ return new RenderFragment("", Imports.none(), [
11444
+ `async directive - resolved type for ${asyncDirective}=${asyncProperty} is not a promise, found ${asyncAccessor.resolvedType.name}`
11445
+ ]);
11446
+ const getPromiseFragment = asyncAccessor.render().map((_) => `vs => ${_}`);
11447
+ if (asyncDirective === AsyncDirectiveTypes.resolved) {
11448
+ const promiseResolvedType = asyncAccessor.resolvedType.itemType;
11449
+ const childVariables = new Variables(promiseResolvedType, variables, 1);
11450
+ let newContext = {
11451
+ ...context,
11452
+ variables: childVariables,
11453
+ indent: indent.child().noFirstLineBreak().withLastLineBreak()
11454
+ };
11455
+ let childElement = renderHtmlElement(htmlElement, newContext);
11456
+ return nestRefs(
11457
+ asyncAccessPath,
11458
+ renderAsync(
11459
+ asyncDirective,
11460
+ getPromiseFragment,
11461
+ childElement,
11462
+ `<${variables.currentType.name}, ${childVariables.currentType.name}>`
11463
+ )
11464
+ );
11465
+ } else if (asyncDirective === AsyncDirectiveTypes.loading) {
11466
+ let childElement = renderHtmlElement(htmlElement, context);
11467
+ return nestRefs(
11468
+ asyncAccessPath,
11469
+ renderAsync(asyncDirective, getPromiseFragment, childElement, "")
11470
+ );
11471
+ } else if (asyncDirective === AsyncDirectiveTypes.rejected) {
11472
+ const childVariables = new Variables(JayErrorType, variables, 1);
11473
+ let newContext = {
11474
+ ...context,
11475
+ variables: childVariables,
11476
+ indent: indent.child().noFirstLineBreak().withLastLineBreak()
11477
+ };
11478
+ let childElement = renderHtmlElement(htmlElement, newContext);
11479
+ return nestRefs(
11480
+ asyncAccessPath,
11481
+ renderAsync(asyncDirective, getPromiseFragment, childElement, "")
11482
+ );
11483
+ }
10966
11484
  } else {
10967
11485
  return renderHtmlElement(htmlElement, context);
10968
11486
  }
@@ -10999,6 +11517,18 @@ function generateCssImport(jayFile) {
10999
11517
  }
11000
11518
  return `import './${jayFile.filename}.css';`;
11001
11519
  }
11520
+ function generateRecursiveFunctions(recursiveRegions) {
11521
+ if (recursiveRegions.length === 0) {
11522
+ return "";
11523
+ }
11524
+ return recursiveRegions.map((region) => {
11525
+ const functionName = `renderRecursiveRegion_${region.refName}`;
11526
+ const returnType = `BaseJayElement<${region.viewStateType}>`;
11527
+ return ` function ${functionName}(): ${returnType} {
11528
+ return ${region.renderedContent};
11529
+ }`;
11530
+ }).join("\n\n");
11531
+ }
11002
11532
  function renderFunctionImplementation$1(types2, rootBodyElement, importStatements, baseElementName, namespaces, headlessImports, importerMode, headLinks = []) {
11003
11533
  const variables = new Variables(types2);
11004
11534
  const { importedSymbols, importedSandboxedSymbols } = processImportedComponents(importStatements);
@@ -11006,17 +11536,34 @@ function renderFunctionImplementation$1(types2, rootBodyElement, importStatement
11006
11536
  const rootElement = ensureSingleChildElement(rootBodyElement);
11007
11537
  let renderedRoot;
11008
11538
  if (rootElement.val) {
11539
+ const needsWrapper = isWithData(rootElement.val) || isForEach(rootElement.val) || isConditional(rootElement.val) || isRecurse(rootElement.val) || checkAsync(rootElement.val).isAsync;
11540
+ const indent = needsWrapper ? new Indent(" ") : new Indent(" ");
11009
11541
  renderedRoot = renderNode(rootElement.val, {
11010
11542
  variables,
11011
11543
  importedSymbols,
11012
- indent: new Indent(" "),
11544
+ indent,
11013
11545
  dynamicRef: false,
11014
11546
  importedSandboxedSymbols,
11015
11547
  refNameGenerator: new RefNameGenerator(),
11016
11548
  importerMode,
11017
11549
  namespaces,
11018
- importedRefNameToRef
11550
+ importedRefNameToRef,
11551
+ recursiveRegions: [],
11552
+ // Initialize empty recursive regions stack
11553
+ isInsideGuard: false
11554
+ // Not inside any guard initially
11019
11555
  });
11556
+ if (needsWrapper) {
11557
+ renderedRoot = new RenderFragment(
11558
+ `de('div', {}, [
11559
+ ${renderedRoot.rendered}
11560
+ ])`,
11561
+ renderedRoot.imports.plus(Import.dynamicElement),
11562
+ renderedRoot.validations,
11563
+ renderedRoot.refs,
11564
+ renderedRoot.recursiveRegions
11565
+ );
11566
+ }
11020
11567
  renderedRoot = optimizeRefs(renderedRoot, headlessImports);
11021
11568
  } else
11022
11569
  renderedRoot = new RenderFragment("", Imports.none(), rootElement.validations);
@@ -11051,9 +11598,14 @@ ${Indent.forceIndent(code, 4)},
11051
11598
  );
11052
11599
  const headLinksInjection = headLinks.length > 0 ? ` injectHeadLinks(${renderHeadLinksArray(headLinks)});
11053
11600
  ` : "";
11601
+ const recursiveFunctions = generateRecursiveFunctions(renderedRoot.recursiveRegions);
11602
+ const recursiveFunctionsSection = recursiveFunctions ? `
11603
+ ${recursiveFunctions}
11604
+
11605
+ ` : "";
11054
11606
  const body = `export function render(options?: RenderElementOptions): ${preRenderType} {
11055
11607
  ${renderedRefsManager}
11056
- ${headLinksInjection}const render = (viewState: ${viewStateType}) => ConstructContext.withRootContext(
11608
+ ${headLinksInjection}${recursiveFunctionsSection} const render = (viewState: ${viewStateType}) => ConstructContext.withRootContext(
11057
11609
  viewState, refManager,
11058
11610
  () => ${renderedRoot.rendered.trim()}
11059
11611
  ) as ${elementType};
@@ -11169,7 +11721,11 @@ function renderBridge(types2, rootBodyElement, importStatements, elementType, pr
11169
11721
  refNameGenerator: new RefNameGenerator(),
11170
11722
  importerMode: RuntimeMode.WorkerSandbox,
11171
11723
  namespaces: [],
11172
- importedRefNameToRef
11724
+ importedRefNameToRef,
11725
+ recursiveRegions: [],
11726
+ // Initialize empty recursive regions stack
11727
+ isInsideGuard: false
11728
+ // Not inside any guard initially
11173
11729
  });
11174
11730
  renderedBridge = optimizeRefs(renderedBridge, headlessImports);
11175
11731
  const { renderedRefsManager, refsManagerImport } = renderReferenceManager(
@@ -11202,7 +11758,11 @@ function renderSandboxRoot(types2, rootBodyElement, importStatements, headlessIm
11202
11758
  refNameGenerator: new RefNameGenerator(),
11203
11759
  importerMode: RuntimeMode.WorkerSandbox,
11204
11760
  namespaces: [],
11205
- importedRefNameToRef
11761
+ importedRefNameToRef,
11762
+ recursiveRegions: [],
11763
+ // Initialize empty recursive regions stack
11764
+ isInsideGuard: false
11765
+ // Not inside any guard initially
11206
11766
  });
11207
11767
  let refsPart = renderedBridge.rendered.length > 0 ? `
11208
11768
  ${renderedBridge.rendered}
@@ -14927,7 +15487,7 @@ var ContractTagType = /* @__PURE__ */ ((ContractTagType2) => {
14927
15487
  return ContractTagType2;
14928
15488
  })(ContractTagType || {});
14929
15489
  async function traverseTags(tags, typeName, context) {
14930
- const { isRepeated } = context;
15490
+ const { isRepeated, isAsync } = context;
14931
15491
  const objectTypeMembers = {};
14932
15492
  let importLinks = [];
14933
15493
  const refs = [];
@@ -14940,7 +15500,8 @@ async function traverseTags(tags, typeName, context) {
14940
15500
  const subContractTypes = await traverseSubContractTag(subTag, {
14941
15501
  ...context,
14942
15502
  viewStateType: objectType,
14943
- isRepeated: isRepeated || subTag.repeated
15503
+ isRepeated: isRepeated || subTag.repeated,
15504
+ isAsync: subTag.async
14944
15505
  });
14945
15506
  if (subContractTypes.val) {
14946
15507
  const result = subContractTypes.val;
@@ -14965,14 +15526,15 @@ async function traverseTags(tags, typeName, context) {
14965
15526
  result.type && (objectTypeMembers[camelCase(subTag.tag)] = result.type);
14966
15527
  }
14967
15528
  }
14968
- const type2 = isRepeated ? new JayArrayType(objectType) : objectType;
15529
+ const maybeArray = isRepeated ? new JayArrayType(objectType) : objectType;
15530
+ const type2 = isAsync ? new JayPromiseType(maybeArray) : maybeArray;
14969
15531
  return new WithValidations(
14970
15532
  { type: type2, refs: mkRefsTree(refs, childRefs, context.isRepeated), importLinks, enumsToImport },
14971
15533
  validations
14972
15534
  );
14973
15535
  }
14974
15536
  async function traverseLinkedSubContract(tag, context) {
14975
- const { importResolver, isRepeated } = context;
15537
+ const { importResolver, isRepeated, isAsync } = context;
14976
15538
  const linkWithExtension = tag.link.endsWith(JAY_CONTRACT_EXTENSION) ? tag.link : tag.link + JAY_CONTRACT_EXTENSION;
14977
15539
  const subContractPath = importResolver.resolveLink(
14978
15540
  path.dirname(context.contractFilePath),
@@ -14997,7 +15559,8 @@ async function traverseLinkedSubContract(tag, context) {
14997
15559
  refs: subContractRefsTree,
14998
15560
  enumsToImport
14999
15561
  } = subContractTypes.val;
15000
- const type2 = isArrayType$1(subContractType) ? new JayArrayType(new JayImportedType(viewState, subContractType.itemType)) : new JayImportedType(viewState, subContractType);
15562
+ const maybeArrayType = isArrayType$1(subContractType) ? new JayArrayType(new JayImportedType(viewState, subContractType.itemType)) : new JayImportedType(viewState, subContractType);
15563
+ const type2 = isAsync ? new JayPromiseType(maybeArrayType) : maybeArrayType;
15001
15564
  const importLinks = [
15002
15565
  {
15003
15566
  module: subContractFile,
@@ -15025,11 +15588,34 @@ async function traverseLinkedSubContract(tag, context) {
15025
15588
  return new WithValidations(void 0, subContract.validations);
15026
15589
  }
15027
15590
  }
15591
+ function isRecursiveLink(link) {
15592
+ return link.startsWith("$/");
15593
+ }
15594
+ function traverseRecursiveSubContract(tag, context) {
15595
+ const { isRepeated, isAsync } = context;
15596
+ const referencePath = tag.link;
15597
+ const recursiveType = new JayRecursiveType(referencePath);
15598
+ const maybeArrayType = isRepeated ? new JayArrayType(recursiveType) : recursiveType;
15599
+ const type2 = isAsync ? new JayPromiseType(maybeArrayType) : maybeArrayType;
15600
+ return new WithValidations({
15601
+ type: type2,
15602
+ refs: mkRefsTree([], {}, isRepeated),
15603
+ importLinks: [],
15604
+ enumsToImport: []
15605
+ });
15606
+ }
15028
15607
  async function traverseSubContractTag(tag, context) {
15029
15608
  if (tag.link) {
15609
+ if (isRecursiveLink(tag.link)) {
15610
+ return traverseRecursiveSubContract(tag, context);
15611
+ }
15030
15612
  return await traverseLinkedSubContract(tag, context);
15031
15613
  }
15032
- return await traverseTags(tag.tags, pascalCase(tag.tag), context);
15614
+ return await traverseTags(
15615
+ tag.tags,
15616
+ toInterfaceName([context.viewStateType.name, tag.tag]),
15617
+ context
15618
+ );
15033
15619
  }
15034
15620
  async function traverseTag(tag, context) {
15035
15621
  const { viewStateType, isRepeated } = context;
@@ -15047,18 +15633,72 @@ async function traverseTag(tag, context) {
15047
15633
  new JayHTMLType(elementType)
15048
15634
  );
15049
15635
  return { ref, ...tag.dataType ? { type: tag.dataType } : {} };
15050
- } else if (tag.type.includes(ContractTagType.variant) && tag.dataType instanceof JayEnumType) {
15636
+ } else if (tag.type.includes(ContractTagType.variant) && isEnumType(tag.dataType)) {
15051
15637
  return { type: tag.dataType };
15052
15638
  } else {
15053
15639
  return { type: tag.dataType || JayUnknown };
15054
15640
  }
15055
15641
  }
15056
- async function contractToImportsViewStateAndRefs(contract, contractFilePath, jayImportResolver, isRepeated = false) {
15057
- return await traverseTags(contract.tags, pascalCase(contract.name + "ViewState"), {
15642
+ function resolveRecursiveReferences$1(type2, rootType) {
15643
+ if (!type2)
15644
+ return;
15645
+ if (isRecursiveType(type2)) {
15646
+ if (type2.referencePath === "$/") {
15647
+ type2.resolvedType = rootType;
15648
+ } else if (type2.referencePath.startsWith("$/")) {
15649
+ const path2 = type2.referencePath.substring(2);
15650
+ const pathParts = path2.split("/");
15651
+ let currentType = rootType;
15652
+ for (const part of pathParts) {
15653
+ if (isObjectType$1(currentType)) {
15654
+ const camelCasePart = camelCase(part);
15655
+ currentType = currentType.props[camelCasePart];
15656
+ if (!currentType) {
15657
+ break;
15658
+ }
15659
+ } else {
15660
+ break;
15661
+ }
15662
+ }
15663
+ type2.resolvedType = currentType || rootType;
15664
+ }
15665
+ } else if (isArrayType$1(type2)) {
15666
+ resolveRecursiveReferences$1(type2.itemType, rootType);
15667
+ } else if (isObjectType$1(type2) && type2.props) {
15668
+ for (const memberType of Object.values(type2.props)) {
15669
+ resolveRecursiveReferences$1(memberType, rootType);
15670
+ }
15671
+ } else if (isPromiseType(type2)) {
15672
+ resolveRecursiveReferences$1(type2.itemType, rootType);
15673
+ }
15674
+ }
15675
+ function getRootObjectType(type2) {
15676
+ if (!type2)
15677
+ return void 0;
15678
+ if (isArrayType$1(type2)) {
15679
+ return getRootObjectType(type2.itemType);
15680
+ }
15681
+ if (isPromiseType(type2)) {
15682
+ return getRootObjectType(type2.itemType);
15683
+ }
15684
+ return type2;
15685
+ }
15686
+ async function contractToImportsViewStateAndRefs(contract, contractFilePath, jayImportResolver, isRepeated = false, isAsync = false) {
15687
+ const result = await traverseTags(contract.tags, pascalCase(contract.name + "ViewState"), {
15058
15688
  viewStateType: void 0,
15059
15689
  isRepeated,
15060
15690
  contractFilePath,
15061
- importResolver: jayImportResolver
15691
+ importResolver: jayImportResolver,
15692
+ isAsync
15693
+ });
15694
+ return result.map((r) => {
15695
+ if (r.type) {
15696
+ const rootType = getRootObjectType(r.type);
15697
+ if (rootType) {
15698
+ resolveRecursiveReferences$1(r.type, rootType);
15699
+ }
15700
+ }
15701
+ return r;
15062
15702
  });
15063
15703
  }
15064
15704
  function refsToRepeated(refsTreeNode) {
@@ -15161,7 +15801,8 @@ function parseType(type2, tagName) {
15161
15801
  return new WithValidations([], [`Tag [${tagName}] has an unknown tag type [${type2}]`]);
15162
15802
  }
15163
15803
  function parseTag(tag) {
15164
- const types2 = parseType(tag.type || "data", tag.tag);
15804
+ const types2 = parseType(tag.type || (tag.tags ? "sub-contract" : "data"), tag.tag);
15805
+ const typesAsString = types2.val.map((_) => ContractTagType[_]).join(", ");
15165
15806
  const validations = types2.validations;
15166
15807
  if (types2.val.includes(ContractTagType.subContract) && types2.val.length > 1) {
15167
15808
  validations.push(`Tag [${tag.tag}] cannot be both sub-contract and other types`);
@@ -15188,25 +15829,31 @@ function parseTag(tag) {
15188
15829
  if (tag.elementType) {
15189
15830
  validations.push(`Tag [${tag.tag}] of type [sub-contract] cannot have an elementType`);
15190
15831
  }
15832
+ } else {
15833
+ if (tag.tags)
15834
+ validations.push(`Tag [${tag.tag}] of type [${typesAsString}] cannot have tags`);
15835
+ if (tag.link)
15836
+ validations.push(`Tag [${tag.tag}] of type [${typesAsString}] cannot have link`);
15191
15837
  }
15192
- const parsedDataType = parseDataType(tag.tag, dataType);
15193
15838
  const description = parseDescription(tag.description);
15194
15839
  const elementType = parseElementType(tag.elementType);
15195
15840
  const required = tag.required;
15196
- if (tag.link) {
15197
- return new WithValidations(
15198
- {
15199
- tag: tag.tag,
15200
- type: [ContractTagType.subContract],
15201
- ...required && { required },
15202
- ...description && { description },
15203
- ...tag.repeated && { repeated: tag.repeated },
15204
- link: tag.link
15205
- },
15206
- validations
15207
- );
15208
- }
15209
- if (tag.tags) {
15841
+ if (validations.length > 0)
15842
+ return new WithValidations(void 0, validations);
15843
+ if (types2.val.includes(ContractTagType.subContract)) {
15844
+ if (tag.link) {
15845
+ return new WithValidations(
15846
+ {
15847
+ tag: tag.tag,
15848
+ type: [ContractTagType.subContract],
15849
+ ...required && { required },
15850
+ ...description && { description },
15851
+ ...tag.repeated && { repeated: tag.repeated },
15852
+ link: tag.link
15853
+ },
15854
+ validations
15855
+ );
15856
+ }
15210
15857
  const subTagResults = tag.tags.map((subTag) => parseTag(subTag));
15211
15858
  const subTagValidations = subTagResults.flatMap((tr) => tr.validations);
15212
15859
  const parsedSubTags = subTagResults.map((tr) => tr.val).filter((tag2) => !!tag2);
@@ -15227,20 +15874,24 @@ function parseTag(tag) {
15227
15874
  ...required && { required },
15228
15875
  ...description && { description },
15229
15876
  tags: parsedSubTags,
15230
- ...tag.repeated && { repeated: tag.repeated }
15877
+ ...tag.repeated && { repeated: tag.repeated },
15878
+ ...tag.async && { async: tag.async }
15231
15879
  },
15232
15880
  [...validations, ...subTagValidations, ...duplicateTagValidations]
15233
15881
  );
15882
+ } else {
15883
+ const parsedDataType = tag.async === true ? new JayPromiseType(parseDataType(tag.tag, dataType)) : parseDataType(tag.tag, dataType);
15884
+ const contractTag = {
15885
+ tag: tag.tag,
15886
+ type: types2.val,
15887
+ ...required && { required },
15888
+ ...parsedDataType && { dataType: parsedDataType },
15889
+ ...description && { description },
15890
+ ...elementType && { elementType },
15891
+ ...tag.async && { async: tag.async }
15892
+ };
15893
+ return new WithValidations(contractTag, validations);
15234
15894
  }
15235
- const contractTag = {
15236
- tag: tag.tag,
15237
- type: types2.val,
15238
- ...required && { required },
15239
- ...parsedDataType && { dataType: parsedDataType },
15240
- ...description && { description },
15241
- ...elementType && { elementType }
15242
- };
15243
- return new WithValidations(contractTag, validations);
15244
15895
  }
15245
15896
  function parseContract(contractYaml, fileName) {
15246
15897
  try {
@@ -15289,24 +15940,99 @@ function resolveImportedType(imports, type2) {
15289
15940
  } else
15290
15941
  return JayUnknown;
15291
15942
  }
15292
- function resolveType(data, validations, path2, imports) {
15943
+ function isRecursiveReference(typeString) {
15944
+ return typeof typeString === "string" && typeString.startsWith("$/");
15945
+ }
15946
+ function parseArrayRecursiveReference(typeString) {
15947
+ if (typeof typeString !== "string")
15948
+ return null;
15949
+ const match = typeString.match(/^array<(\$\/.*)>$/);
15950
+ if (match && match[1]) {
15951
+ return match[1];
15952
+ }
15953
+ return null;
15954
+ }
15955
+ function validateRecursivePath(referencePath, rootData, currentPath) {
15956
+ const parts = referencePath.split("/").filter((p) => p);
15957
+ if (parts.length === 0 || parts[0] !== "$") {
15958
+ return `Recursive reference must start with "$/" (got: ${referencePath}). Use "$/data" or "$/data/path" format.`;
15959
+ }
15960
+ const pathParts = parts.slice(1);
15961
+ if (pathParts.length === 0) {
15962
+ return `Recursive reference path is incomplete (got: ${referencePath}). Use "$/data" or "$/data/path" format.`;
15963
+ }
15964
+ if (pathParts[0] !== "data") {
15965
+ return `Recursive reference path must start with "$/data" (got: ${referencePath}). The reference should point to your data structure.`;
15966
+ }
15967
+ if (pathParts.length === 1) {
15968
+ return void 0;
15969
+ }
15970
+ let currentData = rootData;
15971
+ const traversedPath = ["data"];
15972
+ for (let i = 1; i < pathParts.length; i++) {
15973
+ const part = pathParts[i];
15974
+ if (Array.isArray(currentData)) {
15975
+ if (currentData.length === 0) {
15976
+ return `Cannot navigate through empty array at path "$/` + traversedPath.join("/") + `"`;
15977
+ }
15978
+ currentData = currentData[0];
15979
+ }
15980
+ if (!currentData || typeof currentData !== "object" || !(part in currentData)) {
15981
+ const availableKeys = currentData && typeof currentData === "object" ? Object.keys(currentData) : [];
15982
+ return `Property "${part}" not found at path "$/` + traversedPath.join("/") + `"` + (availableKeys.length > 0 ? `. Available properties: ${availableKeys.join(", ")}` : "");
15983
+ }
15984
+ currentData = currentData[part];
15985
+ traversedPath.push(part);
15986
+ }
15987
+ return void 0;
15988
+ }
15989
+ function resolveType(data, validations, path2, imports, rootData) {
15293
15990
  let types2 = {};
15294
- for (let prop in data) {
15295
- if (resolvePrimitiveType(data[prop]) !== JayUnknown)
15296
- types2[prop] = resolvePrimitiveType(data[prop]);
15297
- else if (isArrayType(data[prop]))
15298
- types2[prop] = new JayArrayType(
15299
- resolveType(data[prop][0], validations, [...path2, prop], imports)
15991
+ for (let propKey in data) {
15992
+ const isAsyncProp = propKey.startsWith("async ");
15993
+ const prop = isAsyncProp ? propKey.substring(6) : propKey;
15994
+ const checkAsync2 = (type2) => isAsyncProp ? new JayPromiseType(type2) : type2;
15995
+ const resolvedPrimitive = resolvePrimitiveType(data[propKey]);
15996
+ if (resolvedPrimitive !== JayUnknown) {
15997
+ types2[prop] = checkAsync2(resolvedPrimitive);
15998
+ } else if (isArrayType(data[propKey])) {
15999
+ types2[prop] = checkAsync2(
16000
+ new JayArrayType(
16001
+ resolveType(data[propKey][0], validations, [...path2, prop], imports, rootData)
16002
+ )
16003
+ );
16004
+ } else if (isObjectType(data[propKey])) {
16005
+ types2[prop] = checkAsync2(
16006
+ resolveType(data[propKey], validations, [...path2, prop], imports, rootData)
15300
16007
  );
15301
- else if (isObjectType(data[prop])) {
15302
- types2[prop] = resolveType(data[prop], validations, [...path2, prop], imports);
15303
- } else if (resolveImportedType(imports, data[prop]) !== JayUnknown) {
15304
- types2[prop] = resolveImportedType(imports, data[prop]);
15305
- } else if (parseIsEnum(data[prop])) {
15306
- types2[prop] = new JayEnumType(
15307
- toInterfaceName([...path2, prop]),
15308
- parseEnumValues(data[prop])
16008
+ } else if (resolveImportedType(imports, data[propKey]) !== JayUnknown) {
16009
+ types2[prop] = checkAsync2(resolveImportedType(imports, data[prop]));
16010
+ } else if (parseIsEnum(data[propKey])) {
16011
+ types2[prop] = checkAsync2(
16012
+ new JayEnumType(toInterfaceName([...path2, prop]), parseEnumValues(data[prop]))
15309
16013
  );
16014
+ } else if (isRecursiveReference(data[propKey])) {
16015
+ const referencePath = data[propKey];
16016
+ const validationError = validateRecursivePath(referencePath, rootData || data);
16017
+ if (validationError) {
16018
+ let [, ...pathTail] = path2;
16019
+ validations.push(
16020
+ `invalid recursive reference [${referencePath}] found at [${["data", ...pathTail, prop].join(".")}] - ${validationError}`
16021
+ );
16022
+ } else {
16023
+ types2[prop] = checkAsync2(new JayRecursiveType(referencePath));
16024
+ }
16025
+ } else if (parseArrayRecursiveReference(data[propKey])) {
16026
+ const referencePath = parseArrayRecursiveReference(data[propKey]);
16027
+ const validationError = validateRecursivePath(referencePath, rootData || data);
16028
+ if (validationError) {
16029
+ let [, ...pathTail] = path2;
16030
+ validations.push(
16031
+ `invalid recursive reference [${referencePath}] found at [${["data", ...pathTail, prop].join(".")}] - ${validationError}`
16032
+ );
16033
+ } else {
16034
+ types2[prop] = checkAsync2(new JayArrayType(new JayRecursiveType(referencePath)));
16035
+ }
15310
16036
  } else {
15311
16037
  let [, ...pathTail] = path2;
15312
16038
  validations.push(
@@ -15316,21 +16042,74 @@ function resolveType(data, validations, path2, imports) {
15316
16042
  }
15317
16043
  return new JayObjectType(toInterfaceName(path2), types2);
15318
16044
  }
16045
+ function resolveRecursiveReferences(type2, rootType, validations) {
16046
+ if (type2 instanceof JayRecursiveType) {
16047
+ const parts = type2.referencePath.split("/").filter((p) => p);
16048
+ if (parts.length >= 2 && parts[0] === "$" && parts[1] === "data") {
16049
+ let resolvedType = rootType;
16050
+ const traversedPath = ["$", "data"];
16051
+ for (let i = 2; i < parts.length; i++) {
16052
+ const pathSegment = parts[i];
16053
+ if (resolvedType instanceof JayObjectType && pathSegment in resolvedType.props) {
16054
+ resolvedType = resolvedType.props[pathSegment];
16055
+ traversedPath.push(pathSegment);
16056
+ } else if (resolvedType instanceof JayArrayType) {
16057
+ if (resolvedType.itemType instanceof JayObjectType && pathSegment in resolvedType.itemType.props) {
16058
+ resolvedType = resolvedType.itemType.props[pathSegment];
16059
+ traversedPath.push(pathSegment);
16060
+ } else {
16061
+ const availableProps = resolvedType.itemType instanceof JayObjectType ? Object.keys(resolvedType.itemType.props) : [];
16062
+ validations.push(
16063
+ `Recursive reference "${type2.referencePath}" failed: property "${pathSegment}" not found at path "${traversedPath.join("/")}"` + (availableProps.length > 0 ? `. Available properties: ${availableProps.join(", ")}` : ". The array item type has no properties.")
16064
+ );
16065
+ return;
16066
+ }
16067
+ } else {
16068
+ const availableProps = resolvedType instanceof JayObjectType ? Object.keys(resolvedType.props) : [];
16069
+ validations.push(
16070
+ `Recursive reference "${type2.referencePath}" failed: property "${pathSegment}" not found at path "${traversedPath.join("/")}"` + (availableProps.length > 0 ? `. Available properties: ${availableProps.join(", ")}` : ". The current type has no properties.")
16071
+ );
16072
+ return;
16073
+ }
16074
+ }
16075
+ type2.resolvedType = resolvedType;
16076
+ } else if (parts.length < 2 || parts[0] !== "$" || parts[1] !== "data") {
16077
+ validations.push(
16078
+ `Invalid recursive reference "${type2.referencePath}". Recursive references must start with "$/data" (e.g., "$/data" or "$/data/tree")`
16079
+ );
16080
+ }
16081
+ } else if (type2 instanceof JayArrayType) {
16082
+ resolveRecursiveReferences(type2.itemType, rootType, validations);
16083
+ } else if (type2 instanceof JayObjectType) {
16084
+ for (const propKey in type2.props) {
16085
+ resolveRecursiveReferences(type2.props[propKey], rootType, validations);
16086
+ }
16087
+ } else if (type2 instanceof JayPromiseType) {
16088
+ resolveRecursiveReferences(type2.itemType, rootType, validations);
16089
+ }
16090
+ }
15319
16091
  function parseTypes(jayYaml, validations, baseElementName, imports, headlessImports) {
15320
16092
  if (typeof jayYaml.data === "object") {
15321
16093
  const resolvedType = resolveType(
15322
16094
  jayYaml.data,
15323
16095
  validations,
15324
16096
  [baseElementName + "ViewState"],
15325
- imports
16097
+ imports,
16098
+ jayYaml.data
16099
+ // Pass root data for recursive reference validation
15326
16100
  );
15327
16101
  const headlessImportedTypes = Object.fromEntries(
15328
- headlessImports.map((_) => [_.key, new JayImportedType(_.rootType.name, _.rootType)])
16102
+ headlessImports.map((_) => [
16103
+ _.key,
16104
+ new JayImportedType(_.rootType.name, _.rootType, true)
16105
+ ])
15329
16106
  );
15330
- return new JayObjectType(resolvedType.name, {
16107
+ const finalType = new JayObjectType(resolvedType.name, {
15331
16108
  ...headlessImportedTypes,
15332
16109
  ...resolvedType.props
15333
16110
  });
16111
+ resolveRecursiveReferences(finalType, finalType, validations);
16112
+ return finalType;
15334
16113
  } else if (typeof jayYaml.data === "string")
15335
16114
  return resolveImportedType(imports, jayYaml.data);
15336
16115
  }