text: import { LRParser } from '@lezer/lr';
  import { NodeProp } from '@lezer/common';
  import { LRLanguage, LanguageSupport } from '@codemirror/language';
  import { styleTags, tags } from '@codemirror/highlight';
  
  // This file was generated by lezer-generator. You probably shouldn't edit it.
  const spec_identifier = {__proto__:null,inline:12, if:18, then:22, else:24, end:26, iff:30, not:34, and:38, or:40, from:44, module:48, forall:52, for:56, in:58, implies:62, def:66, output:72, with:78, use:80, ic:84, doc:88, entity:94, true:100, false:100, Int:114, String:118, Any:122, Number:126, Char:130, Missing:134, Floating:138, UnsignedInt:142, SignedInt:146, Rational:150, FixedDecimal:154, RelName:158, Entity:162, AutoNumber:166, Hash:170, FilePos:174, Date:178, DateTime:182, Year:186, Month:190, Week:194, Day:198, Hour:202, Minute:206, Second:210, Millisecond:214, Microsecond:218, Nanosecond:222};
  const parser = LRParser.deserialize({
    version: 13,
    states: "2fO`QPOOO$qOQO'#DZOOQO'#FO'#FOOOQO'#D^'#D^OOQO'#FP'#FPOOQO'#De'#DeOOQO'#Ev'#EvOOQO'#Ep'#EpQ`QPOOO$yQPO'#CaO`QPO'#CdO`QPO'#CjO`QPO'#ClO`QPO'#CnO%OQPO'#CqO%OQPO'#CsO`QPO'#CuO%OQPO'#CwO`QPO'#CzO%TQPO'#C|O%OQPO'#DSO%OQPO'#DVO$lQPO'#DXO%OQPO'#D[O%]QPO'#DfO(}QPO'#DhO,oQPO'#DjO0aQPO'#DlO4RQPO'#DnO7sQPO'#DpO;eQPO'#DrO?VQPO'#DtOBwQPO'#DvOFiQPO'#DxOJZQPO'#DzOM{QPO'#D|O!#mQPO'#EOO!'_QPO'#EQO!+PQPO'#ESO!.qQPO'#EUO!2cQPO'#EWO!6TQPO'#EYO!9uQPO'#E[O!=gQPO'#E^O!AXQPO'#E`O!DyQPO'#EbO!HkQPO'#EdO!L]QPO'#EfO# }QPO'#EhO#%oQPO'#EjO#)aQPO'#ElO#-RQPO'#EnOOOO'#Er'#ErO#0sOQO,59uOOQO,59u,59uOOQO-E8n-E8nO#0{QPO,58{O#4mQPO'#CfO#4zQPO,59OOOQO,59U,59UOOQO,59W,59WOOQO,59Y,59YOOQO'#Cc'#CcOOQO,59],59]O`QPO,59_O`QPO,59aO#5VQPO,59cOOQO,59f,59fO#5[QPO,59hO#8|QPO,59kO#<qQPO,59nO#<vQPO,59qOOQO,59s,59sOOQO,59v,59vOOQO,5:Q,5:QOOQO,5:S,5:SOOQO,5:U,5:UOOQO,5:W,5:WOOQO,5:Y,5:YOOQO,5:[,5:[OOQO,5:^,5:^OOQO,5:`,5:`OOQO,5:b,5:bOOQO,5:d,5:dOOQO,5:f,5:fOOQO,5:h,5:hOOQO,5:j,5:jOOQO,5:l,5:lOOQO,5:n,5:nOOQO,5:p,5:pOOQO,5:r,5:rOOQO,5:t,5:tOOQO,5:v,5:vOOQO,5:x,5:xOOQO,5:z,5:zOOQO,5:|,5:|OOQO,5;O,5;OOOQO,5;Q,5;QOOQO,5;S,5;SOOQO,5;U,5;UOOQO,5;W,5;WOOQO,5;Y,5;YOOOO-E8p-E8pOOQO1G/a1G/aOOQO1G.g1G.gO#=OQPO1G.jO`QPO'#EqOOQO1G.j1G.jO`QPO1G.jO#=ZQPO1G.yOOQO1G.{1G.{O%OQPO1G.}OOQO'#DO'#DOOOQO1G/S1G/SOOQO'#DR'#DROOQO1G/V1G/VO#=`QPO1G/VO%OQPO1G/YOOQO1G/]1G/]O%OQPO1G/]OOQO-E8o-E8oOOQO7+$U7+$UO`QPO7+$UOOQO,5;],5;]O#AQQPO7+$UOOQO7+$e7+$eOOQO7+$i7+$iOOQO7+$q7+$qOOQO7+$t7+$tO#AVQPO7+$wO#A[QPO<<GpOOQO<<Gp<<GpOOQO<<Hc<<HcOOQOAN=[AN=[",
    stateData: "#Ai~O#iOSPOSQOSROS~OXYO_ZOa[Oc]Od]Of^Oh_Oj`OlaOobOqcOwdOzeO|fO!PgO!RQO!SQO!TQO!UQO!VQO!WQO!ZhO!]iO!_jO!akO!clO!emO!gnO!ioO!kpO!mqO!orO!qsO!stO!uuO!wvO!ywO!{xO!}yO#PzO#R{O#T|O#V}O#X!OO#Z!PO#]!QO#_!RO#a!SO#c!TO#kXO#pPO~O#p!WO#q!UO~OU!YO~O#l!`O~Ot!gO#l!`O~O#l!`OX!YX_!YXa!YXc!YXd!YXf!YXh!YXj!YXl!YXo!YXq!YXw!YXz!YX|!YX!P!YX!R!YX!S!YX!T!YX!U!YX!V!YX!W!YX!Z!YX!]!YX!_!YX!a!YX!c!YX!e!YX!g!YX!i!YX!k!YX!m!YX!o!YX!q!YX!s!YX!u!YX!w!YX!y!YX!{!YX!}!YX#P!YX#R!YX#T!YX#V!YX#X!YX#Z!YX#]!YX#_!YX#a!YX#c!YX#g!YX#k!YX#p!YXZ!YX[!YX]!YX~O#l!`OX![X_![Xa![Xc![Xd![Xf![Xh![Xj![Xl![Xo![Xq![Xw![Xz![X|![X!P![X!R![X!S![X!T![X!U![X!V![X!W![X!Z![X!]![X!_![X!a![X!c![X!e![X!g![X!i![X!k![X!m![X!o![X!q![X!s![X!u![X!w![X!y![X!{![X!}![X#P![X#R![X#T![X#V![X#X![X#Z![X#]![X#_![X#a![X#c![X#g![X#k![X#p![XZ![X[![X]![X~O#l!`OX!^X_!^Xa!^Xc!^Xd!^Xf!^Xh!^Xj!^Xl!^Xo!^Xq!^Xw!^Xz!^X|!^X!P!^X!R!^X!S!^X!T!^X!U!^X!V!^X!W!^X!Z!^X!]!^X!_!^X!a!^X!c!^X!e!^X!g!^X!i!^X!k!^X!m!^X!o!^X!q!^X!s!^X!u!^X!w!^X!y!^X!{!^X!}!^X#P!^X#R!^X#T!^X#V!^X#X!^X#Z!^X#]!^X#_!^X#a!^X#c!^X#g!^X#k!^X#p!^XZ!^X[!^X]!^X~O#l!`OX!`X_!`Xa!`Xc!`Xd!`Xf!`Xh!`Xj!`Xl!`Xo!`Xq!`Xw!`Xz!`X|!`X!P!`X!R!`X!S!`X!T!`X!U!`X!V!`X!W!`X!Z!`X!]!`X!_!`X!a!`X!c!`X!e!`X!g!`X!i!`X!k!`X!m!`X!o!`X!q!`X!s!`X!u!`X!w!`X!y!`X!{!`X!}!`X#P!`X#R!`X#T!`X#V!`X#X!`X#Z!`X#]!`X#_!`X#a!`X#c!`X#g!`X#k!`X#p!`XZ!`X[!`X]!`X~O#l!`OX!bX_!bXa!bXc!bXd!bXf!bXh!bXj!bXl!bXo!bXq!bXw!bXz!bX|!bX!P!bX!R!bX!S!bX!T!bX!U!bX!V!bX!W!bX!Z!bX!]!bX!_!bX!a!bX!c!bX!e!bX!g!bX!i!bX!k!bX!m!bX!o!bX!q!bX!s!bX!u!bX!w!bX!y!bX!{!bX!}!bX#P!bX#R!bX#T!bX#V!bX#X!bX#Z!bX#]!bX#_!bX#a!bX#c!bX#g!bX#k!bX#p!bXZ!bX[!bX]!bX~O#l!`OX!dX_!dXa!dXc!dXd!dXf!dXh!dXj!dXl!dXo!dXq!dXw!dXz!dX|!dX!P!dX!R!dX!S!dX!T!dX!U!dX!V!dX!W!dX!Z!dX!]!dX!_!dX!a!dX!c!dX!e!dX!g!dX!i!dX!k!dX!m!dX!o!dX!q!dX!s!dX!u!dX!w!dX!y!dX!{!dX!}!dX#P!dX#R!dX#T!dX#V!dX#X!dX#Z!dX#]!dX#_!dX#a!dX#c!dX#g!dX#k!dX#p!dXZ!dX[!dX]!dX~O#l!`OX!fX_!fXa!fXc!fXd!fXf!fXh!fXj!fXl!fXo!fXq!fXw!fXz!fX|!fX!P!fX!R!fX!S!fX!T!fX!U!fX!V!fX!W!fX!Z!fX!]!fX!_!fX!a!fX!c!fX!e!fX!g!fX!i!fX!k!fX!m!fX!o!fX!q!fX!s!fX!u!fX!w!fX!y!fX!{!fX!}!fX#P!fX#R!fX#T!fX#V!fX#X!fX#Z!fX#]!fX#_!fX#a!fX#c!fX#g!fX#k!fX#p!fXZ!fX[!fX]!fX~O#l!`OX!hX_!hXa!hXc!hXd!hXf!hXh!hXj!hXl!hXo!hXq!hXw!hXz!hX|!hX!P!hX!R!hX!S!hX!T!hX!U!hX!V!hX!W!hX!Z!hX!]!hX!_!hX!a!hX!c!hX!e!hX!g!hX!i!hX!k!hX!m!hX!o!hX!q!hX!s!hX!u!hX!w!hX!y!hX!{!hX!}!hX#P!hX#R!hX#T!hX#V!hX#X!hX#Z!hX#]!hX#_!hX#a!hX#c!hX#g!hX#k!hX#p!hXZ!hX[!hX]!hX~O#l!`OX!jX_!jXa!jXc!jXd!jXf!jXh!jXj!jXl!jXo!jXq!jXw!jXz!jX|!jX!P!jX!R!jX!S!jX!T!jX!U!jX!V!jX!W!jX!Z!jX!]!jX!_!jX!a!jX!c!jX!e!jX!g!jX!i!jX!k!jX!m!jX!o!jX!q!jX!s!jX!u!jX!w!jX!y!jX!{!jX!}!jX#P!jX#R!jX#T!jX#V!jX#X!jX#Z!jX#]!jX#_!jX#a!jX#c!jX#g!jX#k!jX#p!jXZ!jX[!jX]!jX~O#l!`OX!lX_!lXa!lXc!lXd!lXf!lXh!lXj!lXl!lXo!lXq!lXw!lXz!lX|!lX!P!lX!R!lX!S!lX!T!lX!U!lX!V!lX!W!lX!Z!lX!]!lX!_!lX!a!lX!c!lX!e!lX!g!lX!i!lX!k!lX!m!lX!o!lX!q!lX!s!lX!u!lX!w!lX!y!lX!{!lX!}!lX#P!lX#R!lX#T!lX#V!lX#X!lX#Z!lX#]!lX#_!lX#a!lX#c!lX#g!lX#k!lX#p!lXZ!lX[!lX]!lX~O#l!`OX!nX_!nXa!nXc!nXd!nXf!nXh!nXj!nXl!nXo!nXq!nXw!nXz!nX|!nX!P!nX!R!nX!S!nX!T!nX!U!nX!V!nX!W!nX!Z!nX!]!nX!_!nX!a!nX!c!nX!e!nX!g!nX!i!nX!k!nX!m!nX!o!nX!q!nX!s!nX!u!nX!w!nX!y!nX!{!nX!}!nX#P!nX#R!nX#T!nX#V!nX#X!nX#Z!nX#]!nX#_!nX#a!nX#c!nX#g!nX#k!nX#p!nXZ!nX[!nX]!nX~O#l!`OX!pX_!pXa!pXc!pXd!pXf!pXh!pXj!pXl!pXo!pXq!pXw!pXz!pX|!pX!P!pX!R!pX!S!pX!T!pX!U!pX!V!pX!W!pX!Z!pX!]!pX!_!pX!a!pX!c!pX!e!pX!g!pX!i!pX!k!pX!m!pX!o!pX!q!pX!s!pX!u!pX!w!pX!y!pX!{!pX!}!pX#P!pX#R!pX#T!pX#V!pX#X!pX#Z!pX#]!pX#_!pX#a!pX#c!pX#g!pX#k!pX#p!pXZ!pX[!pX]!pX~O#l!`OX!rX_!rXa!rXc!rXd!rXf!rXh!rXj!rXl!rXo!rXq!rXw!rXz!rX|!rX!P!rX!R!rX!S!rX!T!rX!U!rX!V!rX!W!rX!Z!rX!]!rX!_!rX!a!rX!c!rX!e!rX!g!rX!i!rX!k!rX!m!rX!o!rX!q!rX!s!rX!u!rX!w!rX!y!rX!{!rX!}!rX#P!rX#R!rX#T!rX#V!rX#X!rX#Z!rX#]!rX#_!rX#a!rX#c!rX#g!rX#k!rX#p!rXZ!rX[!rX]!rX~O#l!`OX!tX_!tXa!tXc!tXd!tXf!tXh!tXj!tXl!tXo!tXq!tXw!tXz!tX|!tX!P!tX!R!tX!S!tX!T!tX!U!tX!V!tX!W!tX!Z!tX!]!tX!_!tX!a!tX!c!tX!e!tX!g!tX!i!tX!k!tX!m!tX!o!tX!q!tX!s!tX!u!tX!w!tX!y!tX!{!tX!}!tX#P!tX#R!tX#T!tX#V!tX#X!tX#Z!tX#]!tX#_!tX#a!tX#c!tX#g!tX#k!tX#p!tXZ!tX[!tX]!tX~O#l!`OX!vX_!vXa!vXc!vXd!vXf!vXh!vXj!vXl!vXo!vXq!vXw!vXz!vX|!vX!P!vX!R!vX!S!vX!T!vX!U!vX!V!vX!W!vX!Z!vX!]!vX!_!vX!a!vX!c!vX!e!vX!g!vX!i!vX!k!vX!m!vX!o!vX!q!vX!s!vX!u!vX!w!vX!y!vX!{!vX!}!vX#P!vX#R!vX#T!vX#V!vX#X!vX#Z!vX#]!vX#_!vX#a!vX#c!vX#g!vX#k!vX#p!vXZ!vX[!vX]!vX~O#l!`OX!xX_!xXa!xXc!xXd!xXf!xXh!xXj!xXl!xXo!xXq!xXw!xXz!xX|!xX!P!xX!R!xX!S!xX!T!xX!U!xX!V!xX!W!xX!Z!xX!]!xX!_!xX!a!xX!c!xX!e!xX!g!xX!i!xX!k!xX!m!xX!o!xX!q!xX!s!xX!u!xX!w!xX!y!xX!{!xX!}!xX#P!xX#R!xX#T!xX#V!xX#X!xX#Z!xX#]!xX#_!xX#a!xX#c!xX#g!xX#k!xX#p!xXZ!xX[!xX]!xX~O#l!`OX!zX_!zXa!zXc!zXd!zXf!zXh!zXj!zXl!zXo!zXq!zXw!zXz!zX|!zX!P!zX!R!zX!S!zX!T!zX!U!zX!V!zX!W!zX!Z!zX!]!zX!_!zX!a!zX!c!zX!e!zX!g!zX!i!zX!k!zX!m!zX!o!zX!q!zX!s!zX!u!zX!w!zX!y!zX!{!zX!}!zX#P!zX#R!zX#T!zX#V!zX#X!zX#Z!zX#]!zX#_!zX#a!zX#c!zX#g!zX#k!zX#p!zXZ!zX[!zX]!zX~O#l!`OX!|X_!|Xa!|Xc!|Xd!|Xf!|Xh!|Xj!|Xl!|Xo!|Xq!|Xw!|Xz!|X|!|X!P!|X!R!|X!S!|X!T!|X!U!|X!V!|X!W!|X!Z!|X!]!|X!_!|X!a!|X!c!|X!e!|X!g!|X!i!|X!k!|X!m!|X!o!|X!q!|X!s!|X!u!|X!w!|X!y!|X!{!|X!}!|X#P!|X#R!|X#T!|X#V!|X#X!|X#Z!|X#]!|X#_!|X#a!|X#c!|X#g!|X#k!|X#p!|XZ!|X[!|X]!|X~O#l!`OX#OX_#OXa#OXc#OXd#OXf#OXh#OXj#OXl#OXo#OXq#OXw#OXz#OX|#OX!P#OX!R#OX!S#OX!T#OX!U#OX!V#OX!W#OX!Z#OX!]#OX!_#OX!a#OX!c#OX!e#OX!g#OX!i#OX!k#OX!m#OX!o#OX!q#OX!s#OX!u#OX!w#OX!y#OX!{#OX!}#OX#P#OX#R#OX#T#OX#V#OX#X#OX#Z#OX#]#OX#_#OX#a#OX#c#OX#g#OX#k#OX#p#OXZ#OX[#OX]#OX~O#l!`OX#QX_#QXa#QXc#QXd#QXf#QXh#QXj#QXl#QXo#QXq#QXw#QXz#QX|#QX!P#QX!R#QX!S#QX!T#QX!U#QX!V#QX!W#QX!Z#QX!]#QX!_#QX!a#QX!c#QX!e#QX!g#QX!i#QX!k#QX!m#QX!o#QX!q#QX!s#QX!u#QX!w#QX!y#QX!{#QX!}#QX#P#QX#R#QX#T#QX#V#QX#X#QX#Z#QX#]#QX#_#QX#a#QX#c#QX#g#QX#k#QX#p#QXZ#QX[#QX]#QX~O#l!`OX#SX_#SXa#SXc#SXd#SXf#SXh#SXj#SXl#SXo#SXq#SXw#SXz#SX|#SX!P#SX!R#SX!S#SX!T#SX!U#SX!V#SX!W#SX!Z#SX!]#SX!_#SX!a#SX!c#SX!e#SX!g#SX!i#SX!k#SX!m#SX!o#SX!q#SX!s#SX!u#SX!w#SX!y#SX!{#SX!}#SX#P#SX#R#SX#T#SX#V#SX#X#SX#Z#SX#]#SX#_#SX#a#SX#c#SX#g#SX#k#SX#p#SXZ#SX[#SX]#SX~O#l!`OX#UX_#UXa#UXc#UXd#UXf#UXh#UXj#UXl#UXo#UXq#UXw#UXz#UX|#UX!P#UX!R#UX!S#UX!T#UX!U#UX!V#UX!W#UX!Z#UX!]#UX!_#UX!a#UX!c#UX!e#UX!g#UX!i#UX!k#UX!m#UX!o#UX!q#UX!s#UX!u#UX!w#UX!y#UX!{#UX!}#UX#P#UX#R#UX#T#UX#V#UX#X#UX#Z#UX#]#UX#_#UX#a#UX#c#UX#g#UX#k#UX#p#UXZ#UX[#UX]#UX~O#l!`OX#WX_#WXa#WXc#WXd#WXf#WXh#WXj#WXl#WXo#WXq#WXw#WXz#WX|#WX!P#WX!R#WX!S#WX!T#WX!U#WX!V#WX!W#WX!Z#WX!]#WX!_#WX!a#WX!c#WX!e#WX!g#WX!i#WX!k#WX!m#WX!o#WX!q#WX!s#WX!u#WX!w#WX!y#WX!{#WX!}#WX#P#WX#R#WX#T#WX#V#WX#X#WX#Z#WX#]#WX#_#WX#a#WX#c#WX#g#WX#k#WX#p#WXZ#WX[#WX]#WX~O#l!`OX#YX_#YXa#YXc#YXd#YXf#YXh#YXj#YXl#YXo#YXq#YXw#YXz#YX|#YX!P#YX!R#YX!S#YX!T#YX!U#YX!V#YX!W#YX!Z#YX!]#YX!_#YX!a#YX!c#YX!e#YX!g#YX!i#YX!k#YX!m#YX!o#YX!q#YX!s#YX!u#YX!w#YX!y#YX!{#YX!}#YX#P#YX#R#YX#T#YX#V#YX#X#YX#Z#YX#]#YX#_#YX#a#YX#c#YX#g#YX#k#YX#p#YXZ#YX[#YX]#YX~O#l!`OX#[X_#[Xa#[Xc#[Xd#[Xf#[Xh#[Xj#[Xl#[Xo#[Xq#[Xw#[Xz#[X|#[X!P#[X!R#[X!S#[X!T#[X!U#[X!V#[X!W#[X!Z#[X!]#[X!_#[X!a#[X!c#[X!e#[X!g#[X!i#[X!k#[X!m#[X!o#[X!q#[X!s#[X!u#[X!w#[X!y#[X!{#[X!}#[X#P#[X#R#[X#T#[X#V#[X#X#[X#Z#[X#]#[X#_#[X#a#[X#c#[X#g#[X#k#[X#p#[XZ#[X[#[X]#[X~O#l!`OX#^X_#^Xa#^Xc#^Xd#^Xf#^Xh#^Xj#^Xl#^Xo#^Xq#^Xw#^Xz#^X|#^X!P#^X!R#^X!S#^X!T#^X!U#^X!V#^X!W#^X!Z#^X!]#^X!_#^X!a#^X!c#^X!e#^X!g#^X!i#^X!k#^X!m#^X!o#^X!q#^X!s#^X!u#^X!w#^X!y#^X!{#^X!}#^X#P#^X#R#^X#T#^X#V#^X#X#^X#Z#^X#]#^X#_#^X#a#^X#c#^X#g#^X#k#^X#p#^XZ#^X[#^X]#^X~O#l!`OX#`X_#`Xa#`Xc#`Xd#`Xf#`Xh#`Xj#`Xl#`Xo#`Xq#`Xw#`Xz#`X|#`X!P#`X!R#`X!S#`X!T#`X!U#`X!V#`X!W#`X!Z#`X!]#`X!_#`X!a#`X!c#`X!e#`X!g#`X!i#`X!k#`X!m#`X!o#`X!q#`X!s#`X!u#`X!w#`X!y#`X!{#`X!}#`X#P#`X#R#`X#T#`X#V#`X#X#`X#Z#`X#]#`X#_#`X#a#`X#c#`X#g#`X#k#`X#p#`XZ#`X[#`X]#`X~O#l!`OX#bX_#bXa#bXc#bXd#bXf#bXh#bXj#bXl#bXo#bXq#bXw#bXz#bX|#bX!P#bX!R#bX!S#bX!T#bX!U#bX!V#bX!W#bX!Z#bX!]#bX!_#bX!a#bX!c#bX!e#bX!g#bX!i#bX!k#bX!m#bX!o#bX!q#bX!s#bX!u#bX!w#bX!y#bX!{#bX!}#bX#P#bX#R#bX#T#bX#V#bX#X#bX#Z#bX#]#bX#_#bX#a#bX#c#bX#g#bX#k#bX#p#bXZ#bX[#bX]#bX~O#p#ZO#q!UO~O#l!`OXTa_TaaTacTadTafTahTajTalTaoTaqTawTazTa|Ta!PTa!RTa!STa!TTa!UTa!VTa!WTa!ZTa!]Ta!_Ta!aTa!cTa!eTa!gTa!iTa!kTa!mTa!oTa!qTa!sTa!uTa!wTa!yTa!{Ta!}Ta#PTa#RTa#TTa#VTa#XTa#ZTa#]Ta#_Ta#aTa#cTa#gTa#kTa#pTaZTa[Ta]Ta~OZYX[YX]YX~P`OZ#^O[#`O]#_O~Om#cO~O#m#dOXpa_paapacpadpafpahpajpalpaopaqpawpazpa|pa!Ppa!Rpa!Spa!Tpa!Upa!Vpa!Wpa!Zpa!]pa!_pa!apa!cpa!epa!gpa!ipa!kpa!mpa!opa!qpa!spa!upa!wpa!ypa!{pa!}pa#Ppa#Rpa#Tpa#Vpa#Xpa#Zpa#]pa#_pa#apa#cpa#gpa#kpa#ppaZpa[pa]pa~O#l!`O#m#fOXsa_saasacsadsafsahsajsalsaosaqsawsazsa|sa!Psa!Rsa!Ssa!Tsa!Usa!Vsa!Wsa!Zsa!]sa!_sa!asa!csa!esa!gsa!isa!ksa!msa!osa!qsa!ssa!usa!wsa!ysa!{sa!}sa#Psa#Rsa#Tsa#Vsa#Xsa#Zsa#]sa#_sa#asa#csa#gsa#ksa#psaZsa[sa]sa~Ox#iO~O#m#jO#n#kO~OZ#^O[#nO]#mO~O]#qO~O#l!`OXsi_siasicsidsifsihsijsilsiosiqsiwsizsi|si!Psi!Rsi!Ssi!Tsi!Usi!Vsi!Wsi!Zsi!]si!_si!asi!csi!esi!gsi!isi!ksi!msi!osi!qsi!ssi!usi!wsi!ysi!{si!}si#Psi#Rsi#Tsi#Vsi#Xsi#Zsi#]si#_si#asi#csi#gsi#ksi#psiZsi[si]si~O]#wO~O#o#xO~O]#yO~OQP!U#q!T!R!T~",
    goto: ")z#tPPPPP#uP$V#uP&vPPP#uP#uP#uPP#uP#uP#uP#uPP#uP#uP'V#uP'Y#uPP#uP#uP']#uP#uPPPPPP#u'pP'pP'pP'pP'pP'pP'pP'pP'pP'pP'pP'pP'pP'pP'pP'pP'pP'pP'pP'pP'pP'pP'pP'pP'pP'pP'pP'pP(Q(`(fPPP(lPPPPPPP)Y)jmUOWYZ[]`b!Z!b!c#^#`#nQ!a^Q!b_Q!daQ!fcQ!hdQ!ieQ!kgQ!lhQ!miQ!njQ!okQ!plQ!qmQ!rnQ!soQ!tpQ!uqQ!vrQ!wsQ!xtQ!yuQ!zvQ!{wQ!|xQ!}yQ#OzQ#P{Q#Q|Q#R}Q#S!OQ#T!PQ#U!QQ#V!RQ#W!SQ#X!TQ#[!YQ#g!gQ#r#cQ#s#hQ#t#iR#u#kQ![YQ#a!bQ#o#^Q#p#`R#v#nR#e!fR#h!glQOWYZ[]`b!Z!b!c#^#`#nR!jfmSOWYZ[]`b!Z!b!c#^#`#nQWOS!XW!ZZ!ZY!b#^#`#nQ#]![R#l#]Q!VPR#Y!V`VOWY!Z!b#^#`#nQ!]ZQ!^[Q!_]Q!c`Q!ebR#b!cmROWYZ[]`b!Z!b!c#^#`#nmTOWYZ[]`b!Z!b!c#^#`#n",
    nodeNames: "⚠ LineComment BlockComment StringLiteral Rel InlineStatement inline VariableName IfStatement if Body then else end IffStatement iff NotStatement not AndOrStatement and or FromStatement from ModuleStatement module ForallStatement forall ForInStatement for in ImpliesStatement implies DefineStatement def AssignOp OutputDefinitionStatement output AssignOp WithUseStatement with use ConstraintStatement ic DocStringLiteral doc MultilineStringLiteral EntityStatement entity ExpressionStatement Number BooleanLiteral DateLiteral DatetimeLiteral RelnameLiteral RelnameStringLiteral TypeStatement IntType Int StringType String AnyType Any NumberType Number CharType Char MissingType Missing FloatingType Floating UnsignedIntType UnsignedInt SignedIntType SignedInt RationalType Rational FixedDecimalType FixedDecimal RelNameType RelName EntityType Entity AutoNumberType AutoNumber HashType Hash FilePosType FilePos DateType Date DateTimeType DateTime YearType Year MonthType Month WeekType Week DayType Day HourType Hour MinuteType Minute SecondType Second MillisecondType Millisecond MicrosecondType Microsecond NanosecondType Nanosecond",
    maxTerm: 127,
    nodeProps: [
      [NodeProp.group, -7,45,49,50,51,52,53,54,"Expression",-28,56,58,60,62,64,66,68,70,72,74,76,78,80,82,84,86,88,90,92,94,96,98,100,102,104,106,108,110,"Type"]
    ],
    skippedNodes: [0,1,2,3],
    repeatNodeCount: 3,
    tokenData: "!D]~RrOX#]XY${YZ%rZ]#]]^${^p#]pq${qr#]rs&hsw#]wx,]x!O#]!O!P2P!P!Q5e!Q!R=X!R![!$d![!]!%d!]!_#]!_!`!?y!`!b#]!b!c!@a!c!}!@w!}#R#]#R#S!BT#S#T#]#T#o!@w#o#p!C_#p#q#]#q#r!Cu#r4w#]4w5b!@w5b5i#]5i6S!@w6S~#]Q#bT#qQOY#]YZ#qZr#]rs#vs~#]Q#vO#qQQ#yTOY$YYZ#qZr$Yrs$ls~$YQ$]TOY#]YZ#qZr#]rs#vs~#]Q$oSOY$YYZ#qZr$Ys~$YR%SY#iP#qQOX#]XY${YZ%rZ]#]]^${^p#]pq${qr#]rs#vs~#]R%yS#iP#qQXY&VYZ&V]^&Vpq&VP&[S#iPXY&VYZ&V]^&Vpq&V~&mVR~OY'SYZ#qZr'Srs+rs#O'S#O#P+`#P~'S~'XVR~OY'nYZ#qZr'nrs([s#O'n#O#P(p#P~'n~'uV#qQR~OY'nYZ#qZr'nrs([s#O'n#O#P(p#P~'n~(aTR~OY$YYZ#qZr$Yrs$ls~$Y~(uT#qQOY'nYZ)UZr'nrs*cs~'n~)]U#qQR~OY)oZr)ors*Ws#O)o#O#P*]#P~)o~)tUR~OY)oZr)ors*Ws#O)o#O#P*]#P~)o~*]OR~~*`PO~)o~*hVR~OY'SYZ#qZr'Srs*}s#O'S#O#P+`#P~'S~+SSR~OY$YYZ#qZr$Ys~$Y~+cTOY'nYZ)UZr'nrs*cs~'n~+wTR~OY$YYZ#qZr$Yrs,Ws~$Y~,]O#p~~,dX#qQR~OY,]YZ#qZr,]rs-Psw,]wx.cx#O,]#O#P.y#P~,]~-UXR~OY-qYZ#qZr-qrs0gsw-qwx1Xx#O-q#O#P1m#P~-q~-vXR~OY,]YZ#qZr,]rs-Psw,]wx.cx#O,]#O#P.y#P~,]~.jT#qQR~OY#]YZ#qZr#]rs#vs~#]~/OT#qQOY,]YZ/_Zr,]rs-Ps~,]~/fU#qQR~OY/xZw/xwx*Wx#O/x#O#P0a#P~/x~/}UR~OY/xZw/xwx*Wx#O/x#O#P0a#P~/x~0dPO~/x~0lXR~OY-qYZ#qZr-qrs/xsw-qwx1Xx#O-q#O#P1m#P~-q~1^TR~OY#]YZ#qZr#]rs#vs~#]~1pTOY,]YZ/_Zr,]rs-Ps~,]R2UV#qQOY#]YZ#qZr#]rs#vs!Q#]!Q![2k![~#]R2rZ#qQ!RPOY#]YZ#qZr#]rs#vs!Q#]!Q![2k![!g#]!g!h3e!h#X#]#X#Y3e#Y~#]R3jZ#qQOY#]YZ#qZr#]rs#vs{#]{|4]|}#]}!O4]!O!Q#]!Q![4w![~#]R4bV#qQOY#]YZ#qZr#]rs#vs!Q#]!Q![4w![~#]R5OV#qQ!RPOY#]YZ#qZr#]rs#vs!Q#]!Q![4w![~#]R5jX#qQOY#]YZ#qZr#]rs#vsz#]z{6V{!P#]!P!Q;W!Q~#]R6[V#qQOY6VYZ6qZr6Vrs7tsz6Vz{8v{~6VR6vR#qQOz7Pz{7]{~7PP7SROz7Pz{7]{~7PP7`TOz7Pz{7]{!P7P!P!Q7o!Q~7PP7tOQPR7wVOY8^YZ6qZr8^rs:Osz8^z{:h{~8^R8aVOY6VYZ6qZr6Vrs7tsz6Vz{8v{~6VR8{X#qQOY6VYZ6qZr6Vrs7tsz6Vz{8v{!P6V!P!Q9h!Q~6VR9oTQP#qQOY#]YZ#qZr#]rs#vs~#]R:RVOY8^YZ6qZr8^rs7Psz8^z{:h{~8^R:kXOY6VYZ6qZr6Vrs7tsz6Vz{8v{!P6V!P!Q9h!Q~6VR;_TPP#qQOY;WYZ#qZr;Wrs;ns~;WR;sTPPOY<SYZ#qZr<Srs<hs~<SR<XTPPOY;WYZ#qZr;Wrs;ns~;WR<mTPPOY<SYZ#qZr<Srs<|s~<SP=RQPPOY<|Z~<|R=`a#qQ!RPOY#]YZ#qZr#]rs#vs!O#]!O!P>e!P!Q#]!Q![?]![!g#]!g!h3e!h#X#]#X#Y3e#Y#c#]#c#d! j#d#l#]#l#m!!r#m~#]R>jZ#qQOY#]YZ#qZr#]rs#vs!Q#]!Q![>e![!g#]!g!h3e!h#X#]#X#Y3e#Y~#]R?d]#qQ!RPOY#]YZ#qZr#]rs#vs!O#]!O!P>e!P!Q#]!Q![@]![!g#]!g!h3e!h#X#]#X#Y3e#Y~#]R@d]#qQ!RPOY#]YZ#qZr#]rs#vs!O#]!O!P>e!P!Q#]!Q![A]![!g#]!g!h3e!h#X#]#X#Y3e#Y~#]RAd^#qQ!RPOY#]YZ#qZr#]rs#vs}#]}!OB`!O!P>e!P!Q#]!Q![Nj![!g#]!g!h3e!h#X#]#X#Y3e#Y~#]RBeV#qQOY#]YZ#qZr#]rs#vs!Q#]!Q![Bz![~#]RCPV#qQOY#]YZ#qZr#]rs#vs!Q#]!Q![Cf![~#]RCkV#qQOY#]YZ#qZr#]rs#vs}#]}!ODQ!O~#]RDVV#qQOY#]YZ#qZr#]rs#vs!Q#]!Q![Dl![~#]RDqV#qQOY#]YZ#qZr#]rs#vs!Q#]!Q![EW![~#]RE_V#qQ!TPOY#]YZ#qZr#]rs#vs!v#]!v!wEt!w~#]REyV#qQOY#]YZ#qZr#]rs#vs!Q#]!Q![F`![~#]RFeV#qQOY#]YZ#qZr#]rs#vs!Q#]!Q![Fz![~#]RGPV#qQOY#]YZ#qZr#]rs#vs![#]![!]Gf!]~#]RGkV#qQOY#]YZ#qZr#]rs#vs!Q#]!Q![HQ![~#]RHVV#qQOY#]YZ#qZr#]rs#vs!Q#]!Q![Hl![~#]RHqV#qQOY#]YZ#qZr#]rs#vs![#]![!]IW!]~#]RI]V#qQOY#]YZ#qZr#]rs#vs!Q#]!Q![Ir![~#]RIwV#qQOY#]YZ#qZr#]rs#vs!Q#]!Q![J^![~#]RJc]#qQOY#]YZ#qZr#]rs#vs{#]{|K[|}#]}!OK[!O!Q#]!Q![Kv![!|#]!|!}NS!}~#]RKaV#qQOY#]YZ#qZr#]rs#vs!Q#]!Q![Kv![~#]RK{V#qQOY#]YZ#qZr#]rs#vs!Q#]!Q![Lb![~#]RLgV#qQOY#]YZ#qZr#]rs#vs![#]![!]L|!]~#]RMRV#qQOY#]YZ#qZr#]rs#vs!Q#]!Q![Mh![~#]RMmV#qQOY#]YZ#qZr#]rs#vs!Q#]!Q![NS![~#]RNZT!UP#qQOY#]YZ#qZr#]rs#vs~#]RNq]#qQ!RPOY#]YZ#qZr#]rs#vs!O#]!O!P>e!P!Q#]!Q![Nj![!g#]!g!h3e!h#X#]#X#Y3e#Y~#]R! oV#qQOY#]YZ#qZr#]rs#vs!Q#]!Q!Y!!U!Y~#]R!!]V#qQ!RPOY#]YZ#qZr#]rs#vs!Q#]!Q!Y!!U!Y~#]R!!wZ#qQOY#]YZ#qZr#]rs#vs!Q#]!Q![!#j![!c#]!c!i!#j!i#T#]#T#Z!#j#Z~#]R!#qZ#qQ!RPOY#]YZ#qZr#]rs#vs!Q#]!Q![!#j![!c#]!c!i!#j!i#T#]#T#Z!#j#Z~#]R!$k]#qQ!RPOY#]YZ#qZr#]rs#vs!O#]!O!P>e!P!Q#]!Q![?]![!g#]!g!h3e!h#X#]#X#Y3e#Y~#]R!%i`#qQOY#]YZ#qZr#]rs!&ks!c#]!c!}!=k!}#O!>w#O#R#]#R#S!=k#S#T#]#T#o!=k#o4w#]4w5b!=k5b5i#]5i6S!=k6S~#]R!&nZOY$YYZ!'aZ]$Y]^!-R^r$Yrs!/gs#O$Y#O#P!0_#P#Q$Y#Q#R!-R#R~$YR!'fT#qQYZ!'u]^!'urs!(X#O#P!(m#Q#R!'uP!'xTYZ!'u]^!'urs!(X#O#P!(m#Q#R!'uP!(^T!WPYZ!'u]^!'urs!(X#O#P!(m#Q#R!'uP!(peYZ!'u]^!'urs!(X!Q!R!*R!R!S!*R!S!T!*R!T!U!*R!U!Y!*h!w!x!*}#O#P!(m#Q#R!'u#T#U!'u#U#V!'u#X#Y!'u#Y#Z!'u#b#c!'u#f#g!'u#h#i!'u#i#j!,P#j#k!'u#l#m!,iP!*UUYZ!'u]^!'urs!(X!Q!Y!*h#O#P!(m#Q#R!'uP!*kUYZ!'u]^!'urs!(X!Q!Y!'u#O#P!(m#Q#R!'uP!+QR!Q![!+Z!c!i!+Z#T#Z!+ZP!+^R!Q![!+g!c!i!+g#T#Z!+gP!+jR!Q![!+s!c!i!+s#T#Z!+sP!+vR!Q![!,P!c!i!,P#T#Z!,PP!,SR!Q![!,]!c!i!,]#T#Z!,]P!,`R!Q![!,i!c!i!,i#T#Z!,iP!,lR!Q![!,u!c!i!,u#T#Z!,uP!,xR!Q![!'u!c!i!'u#T#Z!'uR!-UZOY#]YZ!'aZ]#]]^!-w^r#]rs!.os#O#]#O#P!4k#P#Q#]#Q#R!-w#R~#]R!-|Z#qQOY#]YZ!'aZ]#]]^!-w^r#]rs!.os#O#]#O#P!4k#P#Q#]#Q#R!-w#R~#]R!.tZ!WPOY$YYZ!'aZ]$Y]^!-R^r$Yrs!/gs#O$Y#O#P!0_#P#Q$Y#Q#R!-R#R~$YR!/lZ!WPOY$YYZ!'aZ]$Y]^!-R^r$Yrs!(Xs#O$Y#O#P!0_#P#Q$Y#Q#R!-R#R~$YR!0bsOY#]YZ!'aZ]#]]^!-w^r#]rs!.os!Q#]!Q!R!2o!R!S!2o!S!T!2o!T!U!2o!U!Y!3m!Y!w#]!w!x!6}!x#O#]#O#P!4k#P#Q#]#Q#R!-w#R#T#]#T#U!-w#U#V!-w#V#X#]#X#Y!-w#Y#Z!-w#Z#b#]#b#c!-w#c#f#]#f#g!-w#g#h#]#h#i!-w#i#j!:]#j#k!-w#k#l#]#l#m!;{#m~#]R!2t]#qQOY#]YZ!'aZ]#]]^!-w^r#]rs!.os!Q#]!Q!Y!3m!Y#O#]#O#P!4k#P#Q#]#Q#R!-w#R~#]R!3r]#qQOY#]YZ!'aZ]#]]^!-w^r#]rs!.os!Q#]!Q!Y!-w!Y#O#]#O#P!4k#P#Q#]#Q#R!-w#R~#]R!4ps#qQOY#]YZ!'aZ]#]]^!-w^r#]rs!.os!Q#]!Q!R!2o!R!S!2o!S!T!2o!T!U!2o!U!Y!3m!Y!w#]!w!x!6}!x#O#]#O#P!4k#P#Q#]#Q#R!-w#R#T#]#T#U!-w#U#V!-w#V#X#]#X#Y!-w#Y#Z!-w#Z#b#]#b#c!-w#c#f#]#f#g!-w#g#h#]#h#i!-w#i#j!:]#j#k!-w#k#l#]#l#m!;{#m~#]R!7SZ#qQOY#]YZ#qZr#]rs#vs!Q#]!Q![!7u![!c#]!c!i!7u!i#T#]#T#Z!7u#Z~#]R!7zZ#qQOY#]YZ#qZr#]rs#vs!Q#]!Q![!8m![!c#]!c!i!8m!i#T#]#T#Z!8m#Z~#]R!8rZ#qQOY#]YZ#qZr#]rs#vs!Q#]!Q![!9e![!c#]!c!i!9e!i#T#]#T#Z!9e#Z~#]R!9jZ#qQOY#]YZ#qZr#]rs#vs!Q#]!Q![!:]![!c#]!c!i!:]!i#T#]#T#Z!:]#Z~#]R!:bZ#qQOY#]YZ#qZr#]rs#vs!Q#]!Q![!;T![!c#]!c!i!;T!i#T#]#T#Z!;T#Z~#]R!;YZ#qQOY#]YZ#qZr#]rs#vs!Q#]!Q![!;{![!c#]!c!i!;{!i#T#]#T#Z!;{#Z~#]R!<QZ#qQOY#]YZ#qZr#]rs#vs!Q#]!Q![!<s![!c#]!c!i!<s!i#T#]#T#Z!<s#Z~#]R!<xZ#qQOY#]YZ#qZr#]rs#vs!Q#]!Q![!-w![!c#]!c!i!-w!i#T#]#T#Z!-w#Z~#]R!=ra!VP#qQOY#]YZ#qZr#]rs#vs!Q#]!Q![!=k![!c#]!c!}!=k!}#R#]#R#S!=k#S#T#]#T#o!=k#o4w#]4w5b!=k5b5i#]5i6S!=k6S~#]R!>|V#qQOY#]YZ#qZr#]rs#vs#P#]#P#Q!?c#Q~#]R!?jT!VP#qQOY#]YZ#qZr#]rs#vs~#]R!@QT#mP#qQOY#]YZ#qZr#]rs#vs~#]R!@hT#kP#qQOY#]YZ#qZr#]rs#vs~#]R!AOa#lP#qQOY#]YZ#qZr#]rs#vs!Q#]!Q![!@w![!c#]!c!}!@w!}#R#]#R#S!@w#S#T#]#T#o!@w#o4w#]4w5b!@w5b5i#]5i6S!@w6S~#]R!BYa#qQOY#]YZ#qZr#]rs#vs!Q#]!Q![!@w![!c#]!c!}!@w!}#R#]#R#S!@w#S#T#]#T#o!@w#o4w#]4w5b!@w5b5i#]5i6S!@w6S~#]R!CfT#nP#qQOY#]YZ#qZr#]rs#vs~#]R!C|T#oP#qQOY#]YZ#qZr#]rs#vs~#]",
    tokenizers: [0, 1],
    topRules: {"Rel":[0,4]},
    specialized: [{term: 120, get: value => spec_identifier[value] || -1}],
    tokenPrec: 5721
  });
  
  // import {completeFromList} from "@codemirror/autocomplete"
  const relLanguage = LRLanguage.define({
      parser: parser.configure({
          props: [
              // indentNodeProp.add({
              //   Application: delimitedIndent({closing: ")", align: false})
              // }),
              // foldNodeProp.add({
              //   Application: foldInside
              // }),
              styleTags({
                  'use forall for in iff if then else end where with select implies': tags.controlKeyword,
                  'not and or xor': tags.operatorKeyword,
                  'as from output inline ic doc entity': tags.keyword,
                  'def': tags.definitionKeyword,
                  'module': tags.moduleKeyword,
                  'Any String Int Number Char Missing Floating UnsignedInt SignedInt Rational FixedDecimal RelName Entity AutoNumber Hash FilePos Date DateTime Year Month Week Day Hour Minute Second Millisecond Microsecond Nanosecond Boolean': tags.typeName,
                  Number: tags.number,
                  BooleanLiteral: tags.bool,
                  StringLiteral: tags.string,
                  MultilineStringLiteral: tags.string,
                  AssignOp: tags.definitionOperator,
                  LineComment: tags.lineComment,
                  BlockComment: tags.blockComment,
                  VariableName: tags.definition(tags.variableName),
                  Atom: tags.atom,
                  RelnameLiteral: tags.literal,
                  RelnameStringLiteral: tags.literal,
                  DefineStatement: tags.atom,
                  DateLiteral: tags.string,
                  DateTimeLiteral: tags.string,
                  '( )': tags.paren,
                  '[ ]': tags.squareBracket,
                  '{ }': tags.brace,
                  ':': tags.derefOperator,
                  ', ;': tags.separator
              })
          ]
      }),
      languageData: {
          closeBrackets: { brackets: ["(", "[", "{", "'", '"', "`", '"""'] },
          commentTokens: { line: "//", block: { open: "/*", close: "*/" } },
          // indentOnInput: /^\s*(?:case |default:|\{|\}|<\/)$/,
          wordChars: "$"
      }
  });
  // Autocomplete
  // export const relCompletion = relLanguage.data.of({
  //   autocomplete: completeFromList([
  //     { label: "Any", type: "type" },
  //     { label: "AutoNumber", type: "type" },
  //     { label: "Boolean", type: "type" },
  //     { label: "Char", type: "type" },
  //     { label: "Day", type: "type" },
  //     { label: "Date", type: "type" },
  //     { label: "DateTime", type: "type" },
  //     { label: "Year", type: "type" },
  //     { label: "Month", type: "type" },
  //     { label: "Week", type: "type" },
  //     { label: "Hour", type: "type" },
  //     { label: "Minute", type: "type" },
  //     { label: "Second", type: "type" },
  //     { label: "Millisecond", type: "type" },
  //     { label: "Microsecond", type: "type" },
  //     { label: "Nanosecond", type: "type" },
  //     { label: "Entity", type: "type" },
  //     { label: "Int", type: "type" },
  //     { label: "Number", type: "type" },
  //     { label: "Missing", type: "type" },
  //     { label: "Floating", type: "type" },
  //     { label: "UnsignedInt", type: "type" },
  //     { label: "SignedInt", type: "type" },
  //     { label: "Rational", type: "type" },
  //     { label: "FixedDecimal", type: "type" },
  //     { label: "Hash", type: "type" },
  //     { label: "FilePos", type: "type" },
  //     { label: "String", type: "type" },
  //     { label: "def", type: "keyword" },
  //     { label: "output", type: "keyword" },
  //     { label: "from", type: "keyword" },
  //     { label: "if", type: "keyword" },
  //     { label: "iff", type: "keyword" },
  //     { label: "then", type: "keyword" },
  //     { label: "else", type: "keyword" },
  //     { label: "end", type: "keyword" },
  //     { label: "exists", type: "keyword" },
  //     { label: "where", type: "keyword" },
  //     { label: "with", type: "keyword" },
  //     { label: "select", type: "keyword" },
  //     { label: "implies", type: "keyword" },
  //     { label: "use", type: "keyword" },
  //     { label: "forall", type: "keyword" },
  //     { label: "in", type: "keyword" },
  //     { label: "ic", type: "keyword" },
  //     { label: "not", type: "keyword" },
  //     { label: "and", type: "keyword" },
  //     { label: "or", type: "keyword" },
  //     { label: "xor", type: "keyword" },
  //     { label: "union", type: "keyword" },
  //   ])
  // })
  function rel() {
      // return new LanguageSupport(relLanguage, [relCompletion])
      return new LanguageSupport(relLanguage);
  }
  
  export { rel, relLanguage };
  