@irrelon/battlescript 4.1.2 → 5.0.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.
Files changed (47) hide show
  1. package/bin/index.js +357 -278
  2. package/bin/index.js.map +1 -1
  3. package/dist/bin/functionality.cjs +357 -278
  4. package/dist/bin/functionality.cjs.map +1 -1
  5. package/dist/bin/functionality.mjs +357 -278
  6. package/dist/bin/functionality.mjs.map +1 -1
  7. package/dist/exports/typescript/enums/EnumNodeProp.d.ts +11 -7
  8. package/dist/exports/typescript/enums/EnumNodeProp.d.ts.map +1 -1
  9. package/dist/exports/typescript/enums/EnumOperator.d.ts +7 -4
  10. package/dist/exports/typescript/enums/EnumOperator.d.ts.map +1 -1
  11. package/dist/index.cjs +378 -285
  12. package/dist/index.cjs.map +1 -1
  13. package/dist/index.mjs +377 -286
  14. package/dist/index.mjs.map +1 -1
  15. package/dist/services/grammar/ts/language/BattleScriptLexer.d.ts.map +1 -1
  16. package/dist/services/miniAst/binaryTypeToByteSize.d.ts +1 -1
  17. package/dist/services/utils.d.ts +10 -0
  18. package/dist/services/utils.d.ts.map +1 -1
  19. package/dist/tests/ast/compoundAssignment.test.d.ts +2 -0
  20. package/dist/tests/ast/compoundAssignment.test.d.ts.map +1 -0
  21. package/dist/tests/ast/hex-literal.test.d.ts +2 -0
  22. package/dist/tests/ast/hex-literal.test.d.ts.map +1 -0
  23. package/dist/tests/ast/number-literal.test.d.ts +2 -0
  24. package/dist/tests/ast/number-literal.test.d.ts.map +1 -0
  25. package/dist/tsconfig.types.tsbuildinfo +1 -1
  26. package/dist/types/ast/nodes/AssignmentExpressionNode.d.ts +6 -0
  27. package/dist/types/ast/nodes/AssignmentExpressionNode.d.ts.map +1 -1
  28. package/dist/types/ast/nodes/ForwardStatementNode.d.ts +2 -0
  29. package/dist/types/ast/nodes/ForwardStatementNode.d.ts.map +1 -1
  30. package/dist/types/ast/nodes/LiteralIntNode.d.ts +10 -0
  31. package/dist/types/ast/nodes/LiteralIntNode.d.ts.map +1 -1
  32. package/dist/types/ast/nodes/OffsetStatementNode.d.ts +2 -0
  33. package/dist/types/ast/nodes/OffsetStatementNode.d.ts.map +1 -1
  34. package/dist/types/ast/nodes/OptimisedAssignmentExpressionNode.d.ts.map +1 -1
  35. package/dist/types/ast/nodes/ProtocolReadTypeNode.d.ts +2 -0
  36. package/dist/types/ast/nodes/ProtocolReadTypeNode.d.ts.map +1 -1
  37. package/dist/types/ast/nodes/ProtocolTypeNode.d.ts +2 -0
  38. package/dist/types/ast/nodes/ProtocolTypeNode.d.ts.map +1 -1
  39. package/dist/types/ast/nodes/RewindStatementNode.d.ts +2 -0
  40. package/dist/types/ast/nodes/RewindStatementNode.d.ts.map +1 -1
  41. package/dist/types/ast/nodes/RuleStatementNode.d.ts +4 -0
  42. package/dist/types/ast/nodes/RuleStatementNode.d.ts.map +1 -1
  43. package/dist/types/ast/operators/ArithmaticOperator.d.ts +1 -1
  44. package/dist/types/ast/operators/ArithmaticOperator.d.ts.map +1 -1
  45. package/dist/types/ast/operators/OtherOperator.d.ts +1 -1
  46. package/dist/types/ast/operators/OtherOperator.d.ts.map +1 -1
  47. package/package.json +1 -1
package/bin/index.js CHANGED
@@ -23891,7 +23891,7 @@ BattleScriptLexer._SYMBOLIC_NAMES = [
23891
23891
  ];
23892
23892
  BattleScriptLexer.VOCABULARY = new VocabularyImplExports.VocabularyImpl(BattleScriptLexer._LITERAL_NAMES, BattleScriptLexer._SYMBOLIC_NAMES, []);
23893
23893
  BattleScriptLexer._serializedATNSegments = 2;
23894
- BattleScriptLexer._serializedATNSegment0 = "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x02r\u0378\b\x01" +
23894
+ BattleScriptLexer._serializedATNSegment0 = "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x02r\u037F\b\x01" +
23895
23895
  "\x04\x02\t\x02\x04\x03\t\x03\x04\x04\t\x04\x04\x05\t\x05\x04\x06\t\x06" +
23896
23896
  "\x04\x07\t\x07\x04\b\t\b\x04\t\t\t\x04\n\t\n\x04\v\t\v\x04\f\t\f\x04\r" +
23897
23897
  "\t\r\x04\x0E\t\x0E\x04\x0F\t\x0F\x04\x10\t\x10\x04\x11\t\x11\x04\x12\t" +
@@ -23947,77 +23947,78 @@ BattleScriptLexer._serializedATNSegment0 = "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u
23947
23947
  "A\x03A\x03A\x03B\x03B\x03B\x03B\x03C\x03C\x03C\x03C\x03C\x03D\x03D\x03" +
23948
23948
  "D\x03D\x03D\x03D\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03F\x03F\x03F\x03" +
23949
23949
  "F\x03F\x03G\x03G\x03G\x03G\x03G\x03H\x03H\x03H\x03H\x03H\x03I\x03I\x03" +
23950
- "I\x03I\x03I\x03I\x03I\x03I\x03I\x03I\x03J\x06J\u02B9\nJ\rJ\x0EJ\u02BA" +
23951
- "\x03J\x03J\x06J\u02BF\nJ\rJ\x0EJ\u02C0\x05J\u02C3\nJ\x03J\x03J\x05J\u02C7" +
23952
- "\nJ\x03J\x06J\u02CA\nJ\rJ\x0EJ\u02CB\x05J\u02CE\nJ\x03J\x03J\x06J\u02D2" +
23953
- "\nJ\rJ\x0EJ\u02D3\x03J\x03J\x05J\u02D8\nJ\x03J\x06J\u02DB\nJ\rJ\x0EJ\u02DC" +
23954
- "\x05J\u02DF\nJ\x05J\u02E1\nJ\x03K\x03K\x03K\x03K\x03K\x03K\x03K\x03K\x03" +
23955
- "K\x05K\u02EC\nK\x03L\x03L\x07L\u02F0\nL\fL\x0EL\u02F3\vL\x03L\x03L\x03" +
23956
- "M\x03M\x03M\x03M\x07M\u02FB\nM\fM\x0EM\u02FE\vM\x03M\x03M\x03M\x03M\x07" +
23957
- "M\u0304\nM\fM\x0EM\u0307\vM\x03M\x03M\x05M\u030B\nM\x03N\x03N\x03N\x03" +
23958
- "O\x03O\x03O\x03P\x03P\x03P\x03Q\x03Q\x03R\x03R\x03S\x03S\x03T\x03T\x03" +
23959
- "U\x03U\x03V\x03V\x03W\x03W\x03X\x03X\x03X\x03Y\x03Y\x03Y\x03Z\x03Z\x03" +
23960
- "Z\x03[\x03[\x03[\x03\\\x03\\\x03]\x03]\x03]\x03^\x03^\x03^\x03_\x03_\x03" +
23961
- "`\x03`\x03a\x03a\x03a\x03b\x03b\x03b\x03c\x03c\x03c\x03c\x03d\x03d\x03" +
23962
- "e\x03e\x03f\x03f\x03g\x03g\x03h\x03h\x03i\x03i\x03j\x03j\x03k\x03k\x03" +
23963
- "l\x03l\x03m\x03m\x03m\x03n\x03n\x03o\x03o\x03p\x03p\x07p\u0361\np\fp\x0E" +
23964
- "p\u0364\vp\x03p\x06p\u0367\np\rp\x0Ep\u0368\x03p\x06p\u036C\np\rp\x0E" +
23965
- "p\u036D\x05p\u0370\np\x03q\x06q\u0373\nq\rq\x0Eq\u0374\x03q\x03q\x03\u0305" +
23966
- "\x02\x02r\x03\x02\x03\x05\x02\x04\x07\x02\x05\t\x02\x06\v\x02\x07\r\x02" +
23967
- "\b\x0F\x02\t\x11\x02\n\x13\x02\v\x15\x02\f\x17\x02\r\x19\x02\x0E\x1B\x02" +
23968
- "\x0F\x1D\x02\x10\x1F\x02\x11!\x02\x12#\x02\x13%\x02\x14\'\x02\x15)\x02" +
23969
- "\x16+\x02\x17-\x02\x18/\x02\x191\x02\x1A3\x02\x1B5\x02\x1C7\x02\x1D9\x02" +
23970
- "\x1E;\x02\x1F=\x02 ?\x02!A\x02\"C\x02#E\x02$G\x02%I\x02&K\x02\'M\x02(" +
23971
- "O\x02)Q\x02*S\x02+U\x02,W\x02-Y\x02.[\x02/]\x020_\x021a\x022c\x023e\x02" +
23972
- "4g\x025i\x026k\x027m\x028o\x029q\x02:s\x02;u\x02<w\x02=y\x02>{\x02?}\x02" +
23973
- "@\x7F\x02A\x81\x02B\x83\x02C\x85\x02D\x87\x02E\x89\x02F\x8B\x02G\x8D\x02" +
23974
- "H\x8F\x02I\x91\x02J\x93\x02K\x95\x02L\x97\x02M\x99\x02N\x9B\x02O\x9D\x02" +
23975
- "P\x9F\x02Q\xA1\x02R\xA3\x02S\xA5\x02T\xA7\x02U\xA9\x02V\xAB\x02W\xAD\x02" +
23976
- "X\xAF\x02Y\xB1\x02Z\xB3\x02[\xB5\x02\\\xB7\x02]\xB9\x02^\xBB\x02_\xBD" +
23977
- "\x02`\xBF\x02a\xC1\x02b\xC3\x02c\xC5\x02d\xC7\x02e\xC9\x02f\xCB\x02g\xCD" +
23978
- "\x02h\xCF\x02i\xD1\x02j\xD3\x02k\xD5\x02l\xD7\x02m\xD9\x02n\xDB\x02o\xDD" +
23979
- "\x02p\xDF\x02q\xE1\x02r\x03\x02\v\x03\x022;\x04\x02GGgg\x04\x02--//\x03" +
23980
- "\x02$$\x04\x02\f\f\x0F\x0F\x05\x02&&C\\c|\x07\x02&&2;C\\aac|\x03\x02a" +
23981
- "a\x05\x02\v\f\x0F\x0F\"\"\x02\u038C\x02\x03\x03\x02\x02\x02\x02\x05\x03" +
23982
- "\x02\x02\x02\x02\x07\x03\x02\x02\x02\x02\t\x03\x02\x02\x02\x02\v\x03\x02" +
23983
- "\x02\x02\x02\r\x03\x02\x02\x02\x02\x0F\x03\x02\x02\x02\x02\x11\x03\x02" +
23984
- "\x02\x02\x02\x13\x03\x02\x02\x02\x02\x15\x03\x02\x02\x02\x02\x17\x03\x02" +
23985
- "\x02\x02\x02\x19\x03\x02\x02\x02\x02\x1B\x03\x02\x02\x02\x02\x1D\x03\x02" +
23986
- "\x02\x02\x02\x1F\x03\x02\x02\x02\x02!\x03\x02\x02\x02\x02#\x03\x02\x02" +
23987
- "\x02\x02%\x03\x02\x02\x02\x02\'\x03\x02\x02\x02\x02)\x03\x02\x02\x02\x02" +
23988
- "+\x03\x02\x02\x02\x02-\x03\x02\x02\x02\x02/\x03\x02\x02\x02\x021\x03\x02" +
23989
- "\x02\x02\x023\x03\x02\x02\x02\x025\x03\x02\x02\x02\x027\x03\x02\x02\x02" +
23990
- "\x029\x03\x02\x02\x02\x02;\x03\x02\x02\x02\x02=\x03\x02\x02\x02\x02?\x03" +
23991
- "\x02\x02\x02\x02A\x03\x02\x02\x02\x02C\x03\x02\x02\x02\x02E\x03\x02\x02" +
23992
- "\x02\x02G\x03\x02\x02\x02\x02I\x03\x02\x02\x02\x02K\x03\x02\x02\x02\x02" +
23993
- "M\x03\x02\x02\x02\x02O\x03\x02\x02\x02\x02Q\x03\x02\x02\x02\x02S\x03\x02" +
23994
- "\x02\x02\x02U\x03\x02\x02\x02\x02W\x03\x02\x02\x02\x02Y\x03\x02\x02\x02" +
23995
- "\x02[\x03\x02\x02\x02\x02]\x03\x02\x02\x02\x02_\x03\x02\x02\x02\x02a\x03" +
23996
- "\x02\x02\x02\x02c\x03\x02\x02\x02\x02e\x03\x02\x02\x02\x02g\x03\x02\x02" +
23997
- "\x02\x02i\x03\x02\x02\x02\x02k\x03\x02\x02\x02\x02m\x03\x02\x02\x02\x02" +
23998
- "o\x03\x02\x02\x02\x02q\x03\x02\x02\x02\x02s\x03\x02\x02\x02\x02u\x03\x02" +
23999
- "\x02\x02\x02w\x03\x02\x02\x02\x02y\x03\x02\x02\x02\x02{\x03\x02\x02\x02" +
24000
- "\x02}\x03\x02\x02\x02\x02\x7F\x03\x02\x02\x02\x02\x81\x03\x02\x02\x02" +
24001
- "\x02\x83\x03\x02\x02\x02\x02\x85\x03\x02\x02\x02\x02\x87\x03\x02\x02\x02" +
24002
- "\x02\x89\x03\x02\x02\x02\x02\x8B\x03\x02\x02\x02\x02\x8D\x03\x02\x02\x02" +
24003
- "\x02\x8F\x03\x02\x02\x02\x02\x91\x03\x02\x02\x02\x02\x93\x03\x02\x02\x02" +
24004
- "\x02\x95\x03\x02\x02\x02\x02\x97\x03\x02\x02\x02\x02\x99\x03\x02\x02\x02" +
24005
- "\x02\x9B\x03\x02\x02\x02\x02\x9D\x03\x02\x02\x02\x02\x9F\x03\x02\x02\x02" +
24006
- "\x02\xA1\x03\x02\x02\x02\x02\xA3\x03\x02\x02\x02\x02\xA5\x03\x02\x02\x02" +
24007
- "\x02\xA7\x03\x02\x02\x02\x02\xA9\x03\x02\x02\x02\x02\xAB\x03\x02\x02\x02" +
24008
- "\x02\xAD\x03\x02\x02\x02\x02\xAF\x03\x02\x02\x02\x02\xB1\x03\x02\x02\x02" +
24009
- "\x02\xB3\x03\x02\x02\x02\x02\xB5\x03\x02\x02\x02\x02\xB7\x03\x02\x02\x02" +
24010
- "\x02\xB9\x03\x02\x02\x02\x02\xBB\x03\x02\x02\x02\x02\xBD\x03\x02\x02\x02" +
24011
- "\x02\xBF\x03\x02\x02\x02\x02\xC1\x03\x02\x02\x02\x02\xC3\x03\x02\x02\x02" +
24012
- "\x02\xC5\x03\x02\x02\x02\x02\xC7\x03\x02\x02\x02\x02\xC9\x03\x02\x02\x02" +
24013
- "\x02\xCB\x03\x02\x02\x02\x02\xCD\x03\x02\x02\x02\x02\xCF\x03\x02\x02\x02" +
24014
- "\x02\xD1\x03\x02\x02\x02\x02\xD3\x03\x02\x02\x02\x02\xD5\x03\x02\x02\x02" +
24015
- "\x02\xD7\x03\x02\x02\x02\x02\xD9\x03\x02\x02\x02\x02\xDB\x03\x02\x02\x02" +
24016
- "\x02\xDD\x03\x02\x02\x02\x02\xDF\x03\x02\x02\x02\x02\xE1\x03\x02\x02\x02" +
24017
- "\x03\xE3\x03\x02\x02\x02\x05\xEC\x03\x02\x02\x02\x07\xF5\x03\x02\x02\x02" +
24018
- "\t\xFC\x03\x02\x02\x02\v\u0101\x03\x02\x02\x02\r\u0109\x03\x02\x02\x02" +
24019
- "\x0F\u0110\x03\x02\x02\x02\x11\u0118\x03\x02\x02\x02\x13\u011F\x03\x02" +
24020
- "\x02\x02\x15\u0123\x03\x02\x02\x02\x17\u0128\x03\x02\x02\x02\x19\u0132" +
23950
+ "I\x03I\x03I\x03I\x03I\x03I\x03I\x03I\x03J\x03J\x03J\x06J\u02BB\nJ\rJ\x0E" +
23951
+ "J\u02BC\x03J\x06J\u02C0\nJ\rJ\x0EJ\u02C1\x03J\x03J\x06J\u02C6\nJ\rJ\x0E" +
23952
+ "J\u02C7\x05J\u02CA\nJ\x03J\x03J\x05J\u02CE\nJ\x03J\x06J\u02D1\nJ\rJ\x0E" +
23953
+ "J\u02D2\x05J\u02D5\nJ\x03J\x03J\x06J\u02D9\nJ\rJ\x0EJ\u02DA\x03J\x03J" +
23954
+ "\x05J\u02DF\nJ\x03J\x06J\u02E2\nJ\rJ\x0EJ\u02E3\x05J\u02E6\nJ\x05J\u02E8" +
23955
+ "\nJ\x03K\x03K\x03K\x03K\x03K\x03K\x03K\x03K\x03K\x05K\u02F3\nK\x03L\x03" +
23956
+ "L\x07L\u02F7\nL\fL\x0EL\u02FA\vL\x03L\x03L\x03M\x03M\x03M\x03M\x07M\u0302" +
23957
+ "\nM\fM\x0EM\u0305\vM\x03M\x03M\x03M\x03M\x07M\u030B\nM\fM\x0EM\u030E\v" +
23958
+ "M\x03M\x03M\x05M\u0312\nM\x03N\x03N\x03N\x03O\x03O\x03O\x03P\x03P\x03" +
23959
+ "P\x03Q\x03Q\x03R\x03R\x03S\x03S\x03T\x03T\x03U\x03U\x03V\x03V\x03W\x03" +
23960
+ "W\x03X\x03X\x03X\x03Y\x03Y\x03Y\x03Z\x03Z\x03Z\x03[\x03[\x03[\x03\\\x03" +
23961
+ "\\\x03]\x03]\x03]\x03^\x03^\x03^\x03_\x03_\x03`\x03`\x03a\x03a\x03a\x03" +
23962
+ "b\x03b\x03b\x03c\x03c\x03c\x03c\x03d\x03d\x03e\x03e\x03f\x03f\x03g\x03" +
23963
+ "g\x03h\x03h\x03i\x03i\x03j\x03j\x03k\x03k\x03l\x03l\x03m\x03m\x03m\x03" +
23964
+ "n\x03n\x03o\x03o\x03p\x03p\x07p\u0368\np\fp\x0Ep\u036B\vp\x03p\x06p\u036E" +
23965
+ "\np\rp\x0Ep\u036F\x03p\x06p\u0373\np\rp\x0Ep\u0374\x05p\u0377\np\x03q" +
23966
+ "\x06q\u037A\nq\rq\x0Eq\u037B\x03q\x03q\x03\u030C\x02\x02r\x03\x02\x03" +
23967
+ "\x05\x02\x04\x07\x02\x05\t\x02\x06\v\x02\x07\r\x02\b\x0F\x02\t\x11\x02" +
23968
+ "\n\x13\x02\v\x15\x02\f\x17\x02\r\x19\x02\x0E\x1B\x02\x0F\x1D\x02\x10\x1F" +
23969
+ "\x02\x11!\x02\x12#\x02\x13%\x02\x14\'\x02\x15)\x02\x16+\x02\x17-\x02\x18" +
23970
+ "/\x02\x191\x02\x1A3\x02\x1B5\x02\x1C7\x02\x1D9\x02\x1E;\x02\x1F=\x02 " +
23971
+ "?\x02!A\x02\"C\x02#E\x02$G\x02%I\x02&K\x02\'M\x02(O\x02)Q\x02*S\x02+U" +
23972
+ "\x02,W\x02-Y\x02.[\x02/]\x020_\x021a\x022c\x023e\x024g\x025i\x026k\x02" +
23973
+ "7m\x028o\x029q\x02:s\x02;u\x02<w\x02=y\x02>{\x02?}\x02@\x7F\x02A\x81\x02" +
23974
+ "B\x83\x02C\x85\x02D\x87\x02E\x89\x02F\x8B\x02G\x8D\x02H\x8F\x02I\x91\x02" +
23975
+ "J\x93\x02K\x95\x02L\x97\x02M\x99\x02N\x9B\x02O\x9D\x02P\x9F\x02Q\xA1\x02" +
23976
+ "R\xA3\x02S\xA5\x02T\xA7\x02U\xA9\x02V\xAB\x02W\xAD\x02X\xAF\x02Y\xB1\x02" +
23977
+ "Z\xB3\x02[\xB5\x02\\\xB7\x02]\xB9\x02^\xBB\x02_\xBD\x02`\xBF\x02a\xC1" +
23978
+ "\x02b\xC3\x02c\xC5\x02d\xC7\x02e\xC9\x02f\xCB\x02g\xCD\x02h\xCF\x02i\xD1" +
23979
+ "\x02j\xD3\x02k\xD5\x02l\xD7\x02m\xD9\x02n\xDB\x02o\xDD\x02p\xDF\x02q\xE1" +
23980
+ "\x02r\x03\x02\r\x04\x02ZZzz\x05\x022;CHch\x03\x022;\x04\x02GGgg\x04\x02" +
23981
+ "--//\x03\x02$$\x04\x02\f\f\x0F\x0F\x05\x02&&C\\c|\x07\x02&&2;C\\aac|\x03" +
23982
+ "\x02aa\x05\x02\v\f\x0F\x0F\"\"\x02\u0395\x02\x03\x03\x02\x02\x02\x02\x05" +
23983
+ "\x03\x02\x02\x02\x02\x07\x03\x02\x02\x02\x02\t\x03\x02\x02\x02\x02\v\x03" +
23984
+ "\x02\x02\x02\x02\r\x03\x02\x02\x02\x02\x0F\x03\x02\x02\x02\x02\x11\x03" +
23985
+ "\x02\x02\x02\x02\x13\x03\x02\x02\x02\x02\x15\x03\x02\x02\x02\x02\x17\x03" +
23986
+ "\x02\x02\x02\x02\x19\x03\x02\x02\x02\x02\x1B\x03\x02\x02\x02\x02\x1D\x03" +
23987
+ "\x02\x02\x02\x02\x1F\x03\x02\x02\x02\x02!\x03\x02\x02\x02\x02#\x03\x02" +
23988
+ "\x02\x02\x02%\x03\x02\x02\x02\x02\'\x03\x02\x02\x02\x02)\x03\x02\x02\x02" +
23989
+ "\x02+\x03\x02\x02\x02\x02-\x03\x02\x02\x02\x02/\x03\x02\x02\x02\x021\x03" +
23990
+ "\x02\x02\x02\x023\x03\x02\x02\x02\x025\x03\x02\x02\x02\x027\x03\x02\x02" +
23991
+ "\x02\x029\x03\x02\x02\x02\x02;\x03\x02\x02\x02\x02=\x03\x02\x02\x02\x02" +
23992
+ "?\x03\x02\x02\x02\x02A\x03\x02\x02\x02\x02C\x03\x02\x02\x02\x02E\x03\x02" +
23993
+ "\x02\x02\x02G\x03\x02\x02\x02\x02I\x03\x02\x02\x02\x02K\x03\x02\x02\x02" +
23994
+ "\x02M\x03\x02\x02\x02\x02O\x03\x02\x02\x02\x02Q\x03\x02\x02\x02\x02S\x03" +
23995
+ "\x02\x02\x02\x02U\x03\x02\x02\x02\x02W\x03\x02\x02\x02\x02Y\x03\x02\x02" +
23996
+ "\x02\x02[\x03\x02\x02\x02\x02]\x03\x02\x02\x02\x02_\x03\x02\x02\x02\x02" +
23997
+ "a\x03\x02\x02\x02\x02c\x03\x02\x02\x02\x02e\x03\x02\x02\x02\x02g\x03\x02" +
23998
+ "\x02\x02\x02i\x03\x02\x02\x02\x02k\x03\x02\x02\x02\x02m\x03\x02\x02\x02" +
23999
+ "\x02o\x03\x02\x02\x02\x02q\x03\x02\x02\x02\x02s\x03\x02\x02\x02\x02u\x03" +
24000
+ "\x02\x02\x02\x02w\x03\x02\x02\x02\x02y\x03\x02\x02\x02\x02{\x03\x02\x02" +
24001
+ "\x02\x02}\x03\x02\x02\x02\x02\x7F\x03\x02\x02\x02\x02\x81\x03\x02\x02" +
24002
+ "\x02\x02\x83\x03\x02\x02\x02\x02\x85\x03\x02\x02\x02\x02\x87\x03\x02\x02" +
24003
+ "\x02\x02\x89\x03\x02\x02\x02\x02\x8B\x03\x02\x02\x02\x02\x8D\x03\x02\x02" +
24004
+ "\x02\x02\x8F\x03\x02\x02\x02\x02\x91\x03\x02\x02\x02\x02\x93\x03\x02\x02" +
24005
+ "\x02\x02\x95\x03\x02\x02\x02\x02\x97\x03\x02\x02\x02\x02\x99\x03\x02\x02" +
24006
+ "\x02\x02\x9B\x03\x02\x02\x02\x02\x9D\x03\x02\x02\x02\x02\x9F\x03\x02\x02" +
24007
+ "\x02\x02\xA1\x03\x02\x02\x02\x02\xA3\x03\x02\x02\x02\x02\xA5\x03\x02\x02" +
24008
+ "\x02\x02\xA7\x03\x02\x02\x02\x02\xA9\x03\x02\x02\x02\x02\xAB\x03\x02\x02" +
24009
+ "\x02\x02\xAD\x03\x02\x02\x02\x02\xAF\x03\x02\x02\x02\x02\xB1\x03\x02\x02" +
24010
+ "\x02\x02\xB3\x03\x02\x02\x02\x02\xB5\x03\x02\x02\x02\x02\xB7\x03\x02\x02" +
24011
+ "\x02\x02\xB9\x03\x02\x02\x02\x02\xBB\x03\x02\x02\x02\x02\xBD\x03\x02\x02" +
24012
+ "\x02\x02\xBF\x03\x02\x02\x02\x02\xC1\x03\x02\x02\x02\x02\xC3\x03\x02\x02" +
24013
+ "\x02\x02\xC5\x03\x02\x02\x02\x02\xC7\x03\x02\x02\x02\x02\xC9\x03\x02\x02" +
24014
+ "\x02\x02\xCB\x03\x02\x02\x02\x02\xCD\x03\x02\x02\x02\x02\xCF\x03\x02\x02" +
24015
+ "\x02\x02\xD1\x03\x02\x02\x02\x02\xD3\x03\x02\x02\x02\x02\xD5\x03\x02\x02" +
24016
+ "\x02\x02\xD7\x03\x02\x02\x02\x02\xD9\x03\x02\x02\x02\x02\xDB\x03\x02\x02" +
24017
+ "\x02\x02\xDD\x03\x02\x02\x02\x02\xDF\x03\x02\x02\x02\x02\xE1\x03\x02\x02" +
24018
+ "\x02\x03\xE3\x03\x02\x02\x02\x05\xEC\x03\x02\x02\x02\x07\xF5\x03\x02\x02" +
24019
+ "\x02\t\xFC\x03\x02\x02\x02\v\u0101\x03\x02\x02\x02\r\u0109\x03\x02\x02" +
24020
+ "\x02\x0F\u0110\x03\x02\x02\x02\x11\u0118\x03\x02\x02\x02\x13\u011F\x03" +
24021
+ "\x02\x02\x02\x15\u0123\x03\x02\x02\x02\x17\u0128\x03\x02\x02\x02\x19\u0132" +
24021
24022
  "\x03\x02\x02\x02\x1B\u013A\x03\x02\x02\x02\x1D\u0141\x03\x02\x02\x02\x1F" +
24022
24023
  "\u0147\x03\x02\x02\x02!\u014F\x03\x02\x02\x02#\u0156\x03\x02\x02\x02%" +
24023
24024
  "\u015F\x03\x02\x02\x02\'\u0169\x03\x02\x02\x02)\u0171\x03\x02\x02\x02" +
@@ -24038,21 +24039,21 @@ BattleScriptLexer._serializedATNSegment0 = "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u
24038
24039
  "\x7F\u027B\x03\x02\x02\x02\x81\u0281\x03\x02\x02\x02\x83\u0288\x03\x02" +
24039
24040
  "\x02\x02\x85\u028C\x03\x02\x02\x02\x87\u0291\x03\x02\x02\x02\x89\u0297" +
24040
24041
  "\x03\x02\x02\x02\x8B\u029E\x03\x02\x02\x02\x8D\u02A3\x03\x02\x02\x02\x8F" +
24041
- "\u02A8\x03\x02\x02\x02\x91\u02AD\x03\x02\x02\x02\x93\u02E0\x03\x02\x02" +
24042
- "\x02\x95\u02EB\x03\x02\x02\x02\x97\u02ED\x03\x02\x02\x02\x99\u030A\x03" +
24043
- "\x02\x02\x02\x9B\u030C\x03\x02\x02\x02\x9D\u030F\x03\x02\x02\x02\x9F\u0312" +
24044
- "\x03\x02\x02\x02\xA1\u0315\x03\x02\x02\x02\xA3\u0317\x03\x02\x02\x02\xA5" +
24045
- "\u0319\x03\x02\x02\x02\xA7\u031B\x03\x02\x02\x02\xA9\u031D\x03\x02\x02" +
24046
- "\x02\xAB\u031F\x03\x02\x02\x02\xAD\u0321\x03\x02\x02\x02\xAF\u0323\x03" +
24047
- "\x02\x02\x02\xB1\u0326\x03\x02\x02\x02\xB3\u0329\x03\x02\x02\x02\xB5\u032C" +
24048
- "\x03\x02\x02\x02\xB7\u032F\x03\x02\x02\x02\xB9\u0331\x03\x02\x02\x02\xBB" +
24049
- "\u0334\x03\x02\x02\x02\xBD\u0337\x03\x02\x02\x02\xBF\u0339\x03\x02\x02" +
24050
- "\x02\xC1\u033B\x03\x02\x02\x02\xC3\u033E\x03\x02\x02\x02\xC5\u0341\x03" +
24051
- "\x02\x02\x02\xC7\u0345\x03\x02\x02\x02\xC9\u0347\x03\x02\x02\x02\xCB\u0349" +
24052
- "\x03\x02\x02\x02\xCD\u034B\x03\x02\x02\x02\xCF\u034D\x03\x02\x02\x02\xD1" +
24053
- "\u034F\x03\x02\x02\x02\xD3\u0351\x03\x02\x02\x02\xD5\u0353\x03\x02\x02" +
24054
- "\x02\xD7\u0355\x03\x02\x02\x02\xD9\u0357\x03\x02\x02\x02\xDB\u035A\x03" +
24055
- "\x02\x02\x02\xDD\u035C\x03\x02\x02\x02\xDF\u036F\x03\x02\x02\x02\xE1\u0372" +
24042
+ "\u02A8\x03\x02\x02\x02\x91\u02AD\x03\x02\x02\x02\x93\u02E7\x03\x02\x02" +
24043
+ "\x02\x95\u02F2\x03\x02\x02\x02\x97\u02F4\x03\x02\x02\x02\x99\u0311\x03" +
24044
+ "\x02\x02\x02\x9B\u0313\x03\x02\x02\x02\x9D\u0316\x03\x02\x02\x02\x9F\u0319" +
24045
+ "\x03\x02\x02\x02\xA1\u031C\x03\x02\x02\x02\xA3\u031E\x03\x02\x02\x02\xA5" +
24046
+ "\u0320\x03\x02\x02\x02\xA7\u0322\x03\x02\x02\x02\xA9\u0324\x03\x02\x02" +
24047
+ "\x02\xAB\u0326\x03\x02\x02\x02\xAD\u0328\x03\x02\x02\x02\xAF\u032A\x03" +
24048
+ "\x02\x02\x02\xB1\u032D\x03\x02\x02\x02\xB3\u0330\x03\x02\x02\x02\xB5\u0333" +
24049
+ "\x03\x02\x02\x02\xB7\u0336\x03\x02\x02\x02\xB9\u0338\x03\x02\x02\x02\xBB" +
24050
+ "\u033B\x03\x02\x02\x02\xBD\u033E\x03\x02\x02\x02\xBF\u0340\x03\x02\x02" +
24051
+ "\x02\xC1\u0342\x03\x02\x02\x02\xC3\u0345\x03\x02\x02\x02\xC5\u0348\x03" +
24052
+ "\x02\x02\x02\xC7\u034C\x03\x02\x02\x02\xC9\u034E\x03\x02\x02\x02\xCB\u0350" +
24053
+ "\x03\x02\x02\x02\xCD\u0352\x03\x02\x02\x02\xCF\u0354\x03\x02\x02\x02\xD1" +
24054
+ "\u0356\x03\x02\x02\x02\xD3\u0358\x03\x02\x02\x02\xD5\u035A\x03\x02\x02" +
24055
+ "\x02\xD7\u035C\x03\x02\x02\x02\xD9\u035E\x03\x02\x02\x02\xDB\u0361\x03" +
24056
+ "\x02\x02\x02\xDD\u0363\x03\x02\x02\x02\xDF\u0376\x03\x02\x02\x02\xE1\u0379" +
24056
24057
  "\x03\x02\x02\x02\xE3\xE4\x07f\x02\x02\xE4\xE5\x07g\x02\x02\xE5\xE6\x07" +
24057
24058
  "d\x02\x02\xE6\xE7\x07w\x02\x02\xE7\xE8\x07i\x02\x02\xE8\xE9\x07i\x02\x02" +
24058
24059
  "\xE9\xEA\x07g\x02\x02\xEA\xEB\x07t\x02\x02\xEB\x04\x03\x02\x02\x02\xEC" +
@@ -24134,172 +24135,175 @@ BattleScriptLexer._serializedATNSegment0 = "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u
24134
24135
  "\x07h\x02\x02\u01C4\u01C5\x07q\x02\x02\u01C5\u01C6\x07t\x02\x02\u01C6" +
24135
24136
  "F\x03\x02\x02\x02\u01C7\u01C8\x07g\x02\x02\u01C8\u01C9\x07x\x02\x02\u01C9" +
24136
24137
  "\u01CA\x07c\x02\x02\u01CA\u01CB\x07n\x02\x02\u01CB\u01CC\x07w\x02\x02" +
24137
- "\u01CC\u01CD\x07c\x02\x02\u01CD\u01CE\x07v\x02\x02\u01CE\u01CF\x07g\x02" +
24138
- "\x02\u01CFH\x03\x02\x02\x02\u01D0\u01D1\x07e\x02\x02\u01D1\u01D2\x07c" +
24139
- "\x02\x02\u01D2";
24140
- BattleScriptLexer._serializedATNSegment1 = "\u01D3\x07u\x02\x02\u01D3\u01D4\x07g\x02\x02\u01D4J\x03\x02\x02\x02\u01D5" +
24141
- "\u01D6\x07d\x02\x02\u01D6\u01D7\x07t\x02\x02\u01D7\u01D8\x07g\x02\x02" +
24142
- "\u01D8\u01D9\x07c\x02\x02\u01D9\u01DA\x07m\x02\x02\u01DAL\x03\x02\x02" +
24143
- "\x02\u01DB\u01DC\x07e\x02\x02\u01DC\u01DD\x07q\x02\x02\u01DD\u01DE\x07" +
24144
- "p\x02\x02\u01DE\u01DF\x07v\x02\x02\u01DF\u01E0\x07k\x02\x02\u01E0\u01E1" +
24145
- "\x07p\x02\x02\u01E1\u01E2\x07w\x02\x02\u01E2\u01E3\x07g\x02\x02\u01E3" +
24146
- "N\x03\x02\x02\x02\u01E4\u01E5\x07h\x02\x02\u01E5\u01E6\x07c\x02\x02\u01E6" +
24147
- "\u01E7\x07n\x02\x02\u01E7\u01E8\x07n\x02\x02\u01E8\u01E9\x07d\x02\x02" +
24148
- "\u01E9\u01EA\x07c\x02\x02\u01EA\u01EB\x07e\x02\x02\u01EB\u01EC\x07m\x02" +
24149
- "\x02\u01ECP\x03\x02\x02\x02\u01ED\u01EE\x07e\x02\x02\u01EE\u01EF\x07c" +
24150
- "\x02\x02\u01EF\u01F0\x07v\x02\x02\u01F0\u01F1\x07e\x02\x02\u01F1\u01F2" +
24151
- "\x07j\x02\x02\u01F2R\x03\x02\x02\x02\u01F3\u01F4\x07c\x02\x02\u01F4\u01F5" +
24152
- "\x07u\x02\x02\u01F5T\x03\x02\x02\x02\u01F6\u01F7\x07g\x02\x02\u01F7\u01F8" +
24153
- "\x07p\x02\x02\u01F8\u01F9\x07w\x02\x02\u01F9\u01FA\x07o\x02\x02\u01FA" +
24154
- "V\x03\x02\x02\x02\u01FB\u01FC\x07c\x02\x02\u01FC\u01FD\x07p\x02\x02\u01FD" +
24155
- "\u01FE\x07{\x02\x02\u01FEX\x03\x02\x02\x02\u01FF\u0200\x07r\x02\x02\u0200" +
24156
- "\u0201\x07t\x02\x02\u0201\u0202\x07q\x02\x02\u0202\u0203\x07v\x02\x02" +
24157
- "\u0203\u0204\x07q\x02\x02\u0204\u0205\x07e\x02\x02\u0205\u0206\x07q\x02" +
24158
- "\x02\u0206\u0207\x07n\x02\x02\u0207Z\x03\x02\x02\x02\u0208\u0209\x07f" +
24159
- "\x02\x02\u0209\u020A\x07g\x02\x02\u020A\u020B\x07h\x02\x02\u020B\u020C" +
24160
- "\x07k\x02\x02\u020C\u020D\x07p\x02\x02\u020D\u020E\x07g\x02\x02\u020E" +
24161
- "\\\x03\x02\x02\x02\u020F\u0210\x07t\x02\x02\u0210\u0211\x07g\x02\x02\u0211" +
24162
- "\u0212\x07s\x02\x02\u0212\u0213\x07w\x02\x02\u0213\u0214\x07k\x02\x02" +
24163
- "\u0214\u0215\x07t\x02\x02\u0215\u0216\x07g\x02\x02\u0216^\x03\x02\x02" +
24164
- "\x02\u0217\u0218\x07v\x02\x02\u0218\u0219\x07g\x02\x02\u0219\u021A\x07" +
24165
- "t\x02\x02\u021A\u021B\x07o\x02\x02\u021B\u021C\x07k\x02\x02\u021C\u021D" +
24166
- "\x07p\x02\x02\u021D\u021E\x07c\x02\x02\u021E\u021F\x07v\x02\x02\u021F" +
24167
- "\u0220\x07g\x02\x02\u0220`\x03\x02\x02\x02\u0221\u0222\x07u\x02\x02\u0222" +
24168
- "\u0223\x07v\x02\x02\u0223\u0224\x07g\x02\x02\u0224\u0225\x07r\x02\x02" +
24169
- "\u0225b\x03\x02\x02\x02\u0226\u0227\x07f\x02\x02\u0227\u0228\x07g\x02" +
24170
- "\x02\u0228\u0229\x07e\x02\x02\u0229\u022A\x07q\x02\x02\u022A\u022B\x07" +
24171
- "f\x02\x02\u022B\u022C\x07g\x02\x02\u022Cd\x03\x02\x02\x02\u022D\u022E" +
24172
- "\x07g\x02\x02\u022E\u022F\x07p\x02\x02\u022F\u0230\x07e\x02\x02\u0230" +
24173
- "\u0231\x07q\x02\x02\u0231\u0232\x07f\x02\x02\u0232\u0233\x07g\x02\x02" +
24174
- "\u0233f\x03\x02\x02\x02\u0234\u0235\x07g\x02\x02\u0235\u0236\x07p\x02" +
24175
- "\x02\u0236\u0237\x07f\x02\x02\u0237h\x03\x02\x02\x02\u0238\u0239\x07h" +
24176
- "\x02\x02\u0239\u023A\x07q\x02\x02\u023A\u023B\x07t\x02\x02\u023B\u023C" +
24177
- "\x07y\x02\x02\u023C\u023D\x07c\x02\x02\u023D\u023E\x07t\x02\x02\u023E" +
24178
- "\u023F\x07f\x02\x02\u023Fj\x03\x02\x02\x02\u0240\u0241\x07t\x02\x02\u0241" +
24179
- "\u0242\x07g\x02\x02\u0242\u0243\x07y\x02\x02\u0243\u0244\x07k\x02\x02" +
24180
- "\u0244\u0245\x07p\x02\x02\u0245\u0246\x07f\x02\x02\u0246l\x03\x02\x02" +
24181
- "\x02\u0247\u0248\x07q\x02\x02\u0248\u0249\x07h\x02\x02\u0249\u024A\x07" +
24182
- "h\x02\x02\u024A\u024B\x07u\x02\x02\u024B\u024C\x07g\x02\x02\u024C\u024D" +
24183
- "\x07v\x02\x02\u024Dn\x03\x02\x02\x02\u024E\u024F\x07z\x02\x02\u024F\u0250" +
24184
- "\x07q\x02\x02\u0250\u0251\x07t\x02\x02\u0251p\x03\x02\x02\x02\u0252\u0253" +
24185
- "\x07z\x02\x02\u0253\u0254\x07p\x02\x02\u0254\u0255\x07q\x02\x02\u0255" +
24186
- "\u0256\x07t\x02\x02\u0256r\x03\x02\x02\x02\u0257\u0258\x07d\x02\x02\u0258" +
24187
- "\u0259\x07k\x02\x02\u0259\u025A\x07v\x02\x02\u025A\u025B\x07u\x02\x02" +
24188
- "\u025Bt\x03\x02\x02\x02\u025C\u025D\x07d\x02\x02\u025D\u025E\x07{\x02" +
24189
- "\x02\u025E\u025F\x07v\x02\x02\u025F\u0260\x07g\x02\x02\u0260\u0261\x07" +
24190
- "u\x02\x02\u0261v\x03\x02\x02\x02\u0262\u0263\x07t\x02\x02\u0263\u0264" +
24191
- "\x07w\x02\x02\u0264\u0265\x07n\x02\x02\u0265\u0266\x07g\x02\x02\u0266" +
24192
- "x\x03\x02\x02\x02\u0267\u0268\x07r\x02\x02\u0268\u0269\x07c\x02\x02\u0269" +
24193
- "\u026A\x07t\x02\x02\u026A\u026B\x07k\x02\x02\u026B\u026C\x07v\x02\x02" +
24194
- "\u026C\u026D\x07{\x02\x02\u026Dz\x03\x02\x02\x02\u026E\u026F\x07e\x02" +
24195
- "\x02\u026F\u0270\x07q\x02\x02\u0270\u0271\x07p\x02\x02\u0271\u0272\x07" +
24196
- "u\x02\x02\u0272\u0273\x07v\x02\x02\u0273|\x03\x02\x02\x02\u0274\u0275" +
24197
- "\x07q\x02\x02\u0275\u0276\x07d\x02\x02\u0276\u0277\x07l\x02\x02\u0277" +
24198
- "\u0278\x07g\x02\x02\u0278\u0279\x07e\x02\x02\u0279\u027A\x07v\x02\x02" +
24199
- "\u027A~\x03\x02\x02\x02\u027B\u027C\x07c\x02\x02\u027C\u027D\x07t\x02" +
24200
- "\x02\u027D\u027E\x07t\x02\x02\u027E\u027F\x07c\x02\x02\u027F\u0280\x07" +
24201
- "{\x02\x02\u0280\x80\x03\x02\x02\x02\u0281\u0282\x07u\x02\x02\u0282\u0283" +
24202
- "\x07v\x02\x02\u0283\u0284\x07t\x02\x02\u0284\u0285\x07k\x02\x02\u0285" +
24203
- "\u0286\x07p\x02\x02\u0286\u0287\x07i\x02\x02\u0287\x82\x03\x02\x02\x02" +
24204
- "\u0288\u0289\x07k\x02\x02\u0289\u028A\x07p\x02\x02\u028A\u028B\x07v\x02" +
24205
- "\x02\u028B\x84\x03\x02\x02\x02\u028C\u028D\x07w\x02\x02\u028D\u028E\x07" +
24206
- "k\x02\x02\u028E\u028F\x07p\x02\x02\u028F\u0290\x07v\x02\x02\u0290\x86" +
24207
- "\x03\x02\x02\x02\u0291\u0292\x07h\x02\x02\u0292\u0293\x07n\x02\x02\u0293" +
24208
- "\u0294\x07q\x02\x02\u0294\u0295\x07c\x02\x02\u0295\u0296\x07v\x02\x02" +
24209
- "\u0296\x88\x03\x02\x02\x02\u0297\u0298\x07f\x02\x02\u0298\u0299\x07q\x02" +
24210
- "\x02\u0299\u029A\x07w\x02\x02\u029A\u029B\x07d\x02\x02\u029B\u029C\x07" +
24211
- "n\x02\x02\u029C\u029D\x07g\x02\x02\u029D\x8A\x03\x02\x02\x02\u029E\u029F" +
24212
- "\x07d\x02\x02\u029F\u02A0\x07q\x02\x02\u02A0\u02A1\x07q\x02\x02\u02A1" +
24213
- "\u02A2\x07n\x02\x02\u02A2\x8C\x03\x02\x02\x02\u02A3\u02A4\x07p\x02\x02" +
24214
- "\u02A4\u02A5\x07w\x02\x02\u02A5\u02A6\x07n\x02\x02\u02A6\u02A7\x07n\x02" +
24215
- "\x02\u02A7\x8E\x03\x02\x02\x02\u02A8\u02A9\x07x\x02\x02\u02A9\u02AA\x07" +
24216
- "q\x02\x02\u02AA\u02AB\x07k\x02\x02\u02AB\u02AC\x07f\x02\x02\u02AC\x90" +
24217
- "\x03\x02\x02\x02\u02AD\u02AE\x07w\x02\x02\u02AE\u02AF\x07p\x02\x02\u02AF" +
24218
- "\u02B0\x07f\x02\x02\u02B0\u02B1\x07g\x02\x02\u02B1\u02B2\x07h\x02\x02" +
24219
- "\u02B2\u02B3\x07k\x02\x02\u02B3\u02B4\x07p\x02\x02\u02B4\u02B5\x07g\x02" +
24220
- "\x02\u02B5\u02B6\x07f\x02\x02\u02B6\x92\x03\x02\x02\x02\u02B7\u02B9\t" +
24221
- "\x02\x02\x02\u02B8\u02B7\x03\x02\x02\x02\u02B9\u02BA\x03\x02\x02\x02\u02BA" +
24222
- "\u02B8\x03\x02\x02\x02\u02BA\u02BB\x03\x02\x02\x02\u02BB\u02C2\x03\x02" +
24223
- "\x02\x02\u02BC\u02BE\x070\x02\x02\u02BD\u02BF\t\x02\x02\x02\u02BE\u02BD" +
24224
- "\x03\x02\x02\x02\u02BF\u02C0\x03\x02\x02\x02\u02C0\u02BE\x03\x02\x02\x02" +
24225
- "\u02C0\u02C1\x03\x02\x02\x02\u02C1\u02C3\x03\x02\x02\x02\u02C2\u02BC\x03" +
24226
- "\x02\x02\x02\u02C2\u02C3\x03\x02\x02\x02\u02C3\u02CD\x03\x02\x02\x02\u02C4" +
24227
- "\u02C6\t\x03\x02\x02\u02C5\u02C7\t\x04\x02\x02\u02C6\u02C5\x03\x02\x02" +
24228
- "\x02\u02C6\u02C7\x03\x02\x02\x02\u02C7\u02C9\x03\x02\x02\x02\u02C8\u02CA" +
24229
- "\t\x02\x02\x02\u02C9\u02C8\x03\x02\x02\x02\u02CA\u02CB\x03\x02\x02\x02" +
24230
- "\u02CB\u02C9\x03\x02\x02\x02\u02CB\u02CC\x03\x02\x02\x02\u02CC\u02CE\x03" +
24231
- "\x02\x02\x02\u02CD\u02C4\x03\x02\x02\x02\u02CD\u02CE\x03\x02\x02\x02\u02CE" +
24232
- "\u02E1\x03\x02\x02\x02\u02CF\u02D1\x070\x02\x02\u02D0\u02D2\t\x02\x02" +
24233
- "\x02\u02D1\u02D0\x03\x02\x02\x02\u02D2\u02D3\x03\x02\x02\x02\u02D3\u02D1" +
24234
- "\x03\x02\x02\x02\u02D3\u02D4\x03\x02\x02\x02\u02D4\u02DE\x03\x02\x02\x02" +
24235
- "\u02D5\u02D7\t\x03\x02\x02\u02D6\u02D8\t\x04\x02\x02\u02D7\u02D6\x03\x02" +
24236
- "\x02\x02\u02D7\u02D8\x03\x02\x02\x02\u02D8\u02DA\x03\x02\x02\x02\u02D9" +
24237
- "\u02DB\t\x02\x02\x02\u02DA\u02D9\x03\x02\x02\x02\u02DB\u02DC\x03\x02\x02" +
24238
- "\x02\u02DC\u02DA\x03\x02\x02\x02\u02DC\u02DD\x03\x02\x02\x02\u02DD\u02DF" +
24239
- "\x03\x02\x02\x02\u02DE\u02D5\x03\x02\x02\x02\u02DE\u02DF\x03\x02\x02\x02" +
24240
- "\u02DF\u02E1\x03\x02\x02\x02\u02E0\u02B8\x03\x02\x02\x02\u02E0\u02CF\x03" +
24241
- "\x02\x02\x02\u02E1\x94\x03\x02\x02\x02\u02E2\u02E3\x07v\x02\x02\u02E3" +
24242
- "\u02E4\x07t\x02\x02\u02E4\u02E5\x07w\x02\x02\u02E5\u02EC\x07g\x02\x02" +
24243
- "\u02E6\u02E7\x07h\x02\x02\u02E7\u02E8\x07c\x02\x02\u02E8\u02E9\x07n\x02" +
24244
- "\x02\u02E9\u02EA\x07u\x02\x02\u02EA\u02EC\x07g\x02\x02\u02EB\u02E2\x03" +
24245
- "\x02\x02\x02\u02EB\u02E6\x03\x02\x02\x02\u02EC\x96\x03\x02\x02\x02\u02ED" +
24246
- "\u02F1\x07$\x02\x02\u02EE\u02F0\n\x05\x02\x02\u02EF\u02EE\x03\x02\x02" +
24247
- "\x02\u02F0\u02F3\x03\x02\x02\x02\u02F1\u02EF\x03\x02\x02\x02\u02F1\u02F2" +
24248
- "\x03\x02\x02\x02\u02F2\u02F4\x03\x02\x02\x02\u02F3\u02F1\x03\x02\x02\x02" +
24249
- "\u02F4\u02F5\x07$\x02\x02\u02F5\x98\x03\x02\x02\x02\u02F6\u02F7\x071\x02" +
24250
- "\x02\u02F7\u02F8\x071\x02\x02\u02F8\u02FC\x03\x02\x02\x02\u02F9\u02FB" +
24251
- "\n\x06\x02\x02\u02FA\u02F9\x03\x02\x02\x02\u02FB\u02FE\x03\x02\x02\x02" +
24252
- "\u02FC\u02FA\x03\x02\x02\x02\u02FC\u02FD\x03\x02\x02\x02\u02FD\u030B\x03" +
24253
- "\x02\x02\x02\u02FE\u02FC\x03\x02\x02\x02\u02FF\u0300\x071\x02\x02\u0300" +
24254
- "\u0301\x07,\x02\x02\u0301\u0305\x03\x02\x02\x02\u0302\u0304\v\x02\x02" +
24255
- "\x02\u0303\u0302\x03\x02\x02\x02\u0304\u0307\x03\x02\x02\x02\u0305\u0306" +
24256
- "\x03\x02\x02\x02\u0305\u0303\x03\x02\x02\x02\u0306\u0308\x03\x02\x02\x02" +
24257
- "\u0307\u0305\x03\x02\x02\x02\u0308\u0309\x07,\x02\x02\u0309\u030B\x07" +
24258
- "1\x02\x02\u030A\u02F6\x03\x02\x02\x02\u030A\u02FF\x03\x02\x02\x02\u030B" +
24259
- "\x9A\x03\x02\x02\x02\u030C\u030D\x07?\x02\x02\u030D\u030E\x07@\x02\x02" +
24260
- "\u030E\x9C\x03\x02\x02\x02\u030F\u0310\x07-\x02\x02\u0310\u0311\x07-\x02" +
24261
- "\x02\u0311\x9E\x03\x02\x02\x02\u0312\u0313\x07/\x02\x02\u0313\u0314\x07" +
24262
- "/\x02\x02\u0314\xA0\x03\x02\x02\x02\u0315\u0316\x07-\x02\x02\u0316\xA2" +
24263
- "\x03\x02\x02\x02\u0317\u0318\x07/\x02\x02\u0318\xA4\x03\x02\x02\x02\u0319" +
24264
- "\u031A\x071\x02\x02\u031A\xA6\x03\x02\x02\x02\u031B\u031C\x07,\x02\x02" +
24265
- "\u031C\xA8\x03\x02\x02\x02\u031D\u031E\x07\'\x02\x02\u031E\xAA\x03\x02" +
24266
- "\x02\x02\u031F\u0320\x07A\x02\x02\u0320\xAC\x03\x02\x02\x02\u0321\u0322" +
24267
- "\x07?\x02\x02\u0322\xAE\x03\x02\x02\x02\u0323\u0324\x07-\x02\x02\u0324" +
24268
- "\u0325\x07?\x02\x02\u0325\xB0\x03\x02\x02\x02\u0326\u0327\x07/\x02\x02" +
24269
- "\u0327\u0328\x07?\x02\x02\u0328\xB2\x03\x02\x02\x02\u0329\u032A\x07(\x02" +
24270
- "\x02\u032A\u032B\x07(\x02\x02\u032B\xB4\x03\x02\x02\x02\u032C\u032D\x07" +
24271
- "~\x02\x02\u032D\u032E\x07~\x02\x02\u032E\xB6\x03\x02\x02\x02\u032F\u0330" +
24272
- "\x07#\x02\x02\u0330\xB8\x03\x02\x02\x02\u0331\u0332\x07?\x02\x02\u0332" +
24273
- "\u0333\x07?\x02\x02\u0333\xBA\x03\x02\x02\x02\u0334\u0335\x07#\x02\x02" +
24274
- "\u0335\u0336\x07?\x02\x02\u0336\xBC\x03\x02\x02\x02\u0337\u0338\x07@\x02" +
24275
- "\x02\u0338\xBE\x03\x02\x02\x02\u0339\u033A\x07>\x02\x02\u033A\xC0\x03" +
24276
- "\x02\x02\x02\u033B\u033C\x07@\x02\x02\u033C\u033D\x07?\x02\x02\u033D\xC2" +
24277
- "\x03\x02\x02\x02\u033E\u033F\x07>\x02\x02\u033F\u0340\x07?\x02\x02\u0340" +
24278
- "\xC4\x03\x02\x02\x02\u0341\u0342\x070\x02\x02\u0342\u0343\x070\x02\x02" +
24279
- "\u0343\u0344\x070\x02\x02\u0344\xC6\x03\x02\x02\x02\u0345\u0346\x070\x02" +
24280
- "\x02\u0346\xC8\x03\x02\x02\x02\u0347\u0348\x07.\x02\x02\u0348\xCA\x03" +
24281
- "\x02\x02\x02\u0349\u034A\x07a\x02\x02\u034A\xCC\x03\x02\x02\x02\u034B" +
24282
- "\u034C\x07*\x02\x02\u034C\xCE\x03\x02\x02\x02\u034D\u034E\x07+\x02\x02" +
24283
- "\u034E\xD0\x03\x02\x02\x02\u034F\u0350\x07}\x02\x02\u0350\xD2\x03\x02" +
24284
- "\x02\x02\u0351\u0352\x07\x7F\x02\x02\u0352\xD4\x03\x02\x02\x02\u0353\u0354" +
24285
- "\x07]\x02\x02\u0354\xD6\x03\x02\x02\x02\u0355\u0356\x07_\x02\x02\u0356" +
24286
- "\xD8\x03\x02\x02\x02\u0357\u0358\x07<\x02\x02\u0358\u0359\x07<\x02\x02" +
24287
- "\u0359\xDA\x03\x02\x02\x02\u035A\u035B\x07=\x02\x02\u035B\xDC\x03\x02" +
24288
- "\x02\x02\u035C\u035D\x07<\x02\x02\u035D\xDE\x03\x02\x02\x02\u035E\u0362" +
24289
- "\t\x07\x02\x02\u035F\u0361\t\b\x02\x02\u0360\u035F\x03\x02\x02\x02\u0361" +
24290
- "\u0364\x03\x02\x02\x02\u0362\u0360\x03\x02\x02\x02\u0362\u0363\x03\x02" +
24291
- "\x02\x02\u0363\u0370\x03\x02\x02\x02\u0364\u0362\x03\x02\x02\x02\u0365" +
24292
- "\u0367\t\t\x02\x02\u0366\u0365\x03\x02\x02\x02\u0367\u0368\x03\x02\x02" +
24293
- "\x02\u0368\u0366\x03\x02\x02\x02\u0368\u0369\x03\x02\x02\x02\u0369\u036B" +
24294
- "\x03\x02\x02\x02\u036A\u036C\t\b\x02\x02\u036B\u036A\x03\x02\x02\x02\u036C" +
24295
- "\u036D\x03\x02\x02\x02\u036D\u036B\x03\x02\x02\x02\u036D\u036E\x03\x02" +
24296
- "\x02\x02\u036E\u0370\x03\x02\x02\x02\u036F\u035E\x03\x02\x02\x02\u036F" +
24297
- "\u0366\x03\x02\x02\x02\u0370\xE0\x03\x02\x02\x02\u0371\u0373\t\n\x02\x02" +
24298
- "\u0372\u0371\x03\x02\x02\x02\u0373\u0374\x03\x02\x02\x02\u0374\u0372\x03" +
24299
- "\x02\x02\x02\u0374\u0375\x03\x02\x02\x02\u0375\u0376\x03\x02\x02\x02\u0376" +
24300
- "\u0377\bq\x02\x02\u0377\xE2\x03\x02\x02\x02\x18\x02\u02BA\u02C0\u02C2" +
24301
- "\u02C6\u02CB\u02CD\u02D3\u02D7\u02DC\u02DE\u02E0\u02EB\u02F1\u02FC\u0305" +
24302
- "\u030A\u0362\u0368\u036D\u036F\u0374\x03\b\x02\x02";
24138
+ "\u01CC\u01CD\x07c\x02\x02\u01CD";
24139
+ BattleScriptLexer._serializedATNSegment1 = "\u01CE\x07v\x02\x02\u01CE\u01CF\x07g\x02\x02\u01CFH\x03\x02\x02\x02\u01D0" +
24140
+ "\u01D1\x07e\x02\x02\u01D1\u01D2\x07c\x02\x02\u01D2\u01D3\x07u\x02\x02" +
24141
+ "\u01D3\u01D4\x07g\x02\x02\u01D4J\x03\x02\x02\x02\u01D5\u01D6\x07d\x02" +
24142
+ "\x02\u01D6\u01D7\x07t\x02\x02\u01D7\u01D8\x07g\x02\x02\u01D8\u01D9\x07" +
24143
+ "c\x02\x02\u01D9\u01DA\x07m\x02\x02\u01DAL\x03\x02\x02\x02\u01DB\u01DC" +
24144
+ "\x07e\x02\x02\u01DC\u01DD\x07q\x02\x02\u01DD\u01DE\x07p\x02\x02\u01DE" +
24145
+ "\u01DF\x07v\x02\x02\u01DF\u01E0\x07k\x02\x02\u01E0\u01E1\x07p\x02\x02" +
24146
+ "\u01E1\u01E2\x07w\x02\x02\u01E2\u01E3\x07g\x02\x02\u01E3N\x03\x02\x02" +
24147
+ "\x02\u01E4\u01E5\x07h\x02\x02\u01E5\u01E6\x07c\x02\x02\u01E6\u01E7\x07" +
24148
+ "n\x02\x02\u01E7\u01E8\x07n\x02\x02\u01E8\u01E9\x07d\x02\x02\u01E9\u01EA" +
24149
+ "\x07c\x02\x02\u01EA\u01EB\x07e\x02\x02\u01EB\u01EC\x07m\x02\x02\u01EC" +
24150
+ "P\x03\x02\x02\x02\u01ED\u01EE\x07e\x02\x02\u01EE\u01EF\x07c\x02\x02\u01EF" +
24151
+ "\u01F0\x07v\x02\x02\u01F0\u01F1\x07e\x02\x02\u01F1\u01F2\x07j\x02\x02" +
24152
+ "\u01F2R\x03\x02\x02\x02\u01F3\u01F4\x07c\x02\x02\u01F4\u01F5\x07u\x02" +
24153
+ "\x02\u01F5T\x03\x02\x02\x02\u01F6\u01F7\x07g\x02\x02\u01F7\u01F8\x07p" +
24154
+ "\x02\x02\u01F8\u01F9\x07w\x02\x02\u01F9\u01FA\x07o\x02\x02\u01FAV\x03" +
24155
+ "\x02\x02\x02\u01FB\u01FC\x07c\x02\x02\u01FC\u01FD\x07p\x02\x02\u01FD\u01FE" +
24156
+ "\x07{\x02\x02\u01FEX\x03\x02\x02\x02\u01FF\u0200\x07r\x02\x02\u0200\u0201" +
24157
+ "\x07t\x02\x02\u0201\u0202\x07q\x02\x02\u0202\u0203\x07v\x02\x02\u0203" +
24158
+ "\u0204\x07q\x02\x02\u0204\u0205\x07e\x02\x02\u0205\u0206\x07q\x02\x02" +
24159
+ "\u0206\u0207\x07n\x02\x02\u0207Z\x03\x02\x02\x02\u0208\u0209\x07f\x02" +
24160
+ "\x02\u0209\u020A\x07g\x02\x02\u020A\u020B\x07h\x02\x02\u020B\u020C\x07" +
24161
+ "k\x02\x02\u020C\u020D\x07p\x02\x02\u020D\u020E\x07g\x02\x02\u020E\\\x03" +
24162
+ "\x02\x02\x02\u020F\u0210\x07t\x02\x02\u0210\u0211\x07g\x02\x02\u0211\u0212" +
24163
+ "\x07s\x02\x02\u0212\u0213\x07w\x02\x02\u0213\u0214\x07k\x02\x02\u0214" +
24164
+ "\u0215\x07t\x02\x02\u0215\u0216\x07g\x02\x02\u0216^\x03\x02\x02\x02\u0217" +
24165
+ "\u0218\x07v\x02\x02\u0218\u0219\x07g\x02\x02\u0219\u021A\x07t\x02\x02" +
24166
+ "\u021A\u021B\x07o\x02\x02\u021B\u021C\x07k\x02\x02\u021C\u021D\x07p\x02" +
24167
+ "\x02\u021D\u021E\x07c\x02\x02\u021E\u021F\x07v\x02\x02\u021F\u0220\x07" +
24168
+ "g\x02\x02\u0220`\x03\x02\x02\x02\u0221\u0222\x07u\x02\x02\u0222\u0223" +
24169
+ "\x07v\x02\x02\u0223\u0224\x07g\x02\x02\u0224\u0225\x07r\x02\x02\u0225" +
24170
+ "b\x03\x02\x02\x02\u0226\u0227\x07f\x02\x02\u0227\u0228\x07g\x02\x02\u0228" +
24171
+ "\u0229\x07e\x02\x02\u0229\u022A\x07q\x02\x02\u022A\u022B\x07f\x02\x02" +
24172
+ "\u022B\u022C\x07g\x02\x02\u022Cd\x03\x02\x02\x02\u022D\u022E\x07g\x02" +
24173
+ "\x02\u022E\u022F\x07p\x02\x02\u022F\u0230\x07e\x02\x02\u0230\u0231\x07" +
24174
+ "q\x02\x02\u0231\u0232\x07f\x02\x02\u0232\u0233\x07g\x02\x02\u0233f\x03" +
24175
+ "\x02\x02\x02\u0234\u0235\x07g\x02\x02\u0235\u0236\x07p\x02\x02\u0236\u0237" +
24176
+ "\x07f\x02\x02\u0237h\x03\x02\x02\x02\u0238\u0239\x07h\x02\x02\u0239\u023A" +
24177
+ "\x07q\x02\x02\u023A\u023B\x07t\x02\x02\u023B\u023C\x07y\x02\x02\u023C" +
24178
+ "\u023D\x07c\x02\x02\u023D\u023E\x07t\x02\x02\u023E\u023F\x07f\x02\x02" +
24179
+ "\u023Fj\x03\x02\x02\x02\u0240\u0241\x07t\x02\x02\u0241\u0242\x07g\x02" +
24180
+ "\x02\u0242\u0243\x07y\x02\x02\u0243\u0244\x07k\x02\x02\u0244\u0245\x07" +
24181
+ "p\x02\x02\u0245\u0246\x07f\x02\x02\u0246l\x03\x02\x02\x02\u0247\u0248" +
24182
+ "\x07q\x02\x02\u0248\u0249\x07h\x02\x02\u0249\u024A\x07h\x02\x02\u024A" +
24183
+ "\u024B\x07u\x02\x02\u024B\u024C\x07g\x02\x02\u024C\u024D\x07v\x02\x02" +
24184
+ "\u024Dn\x03\x02\x02\x02\u024E\u024F\x07z\x02\x02\u024F\u0250\x07q\x02" +
24185
+ "\x02\u0250\u0251\x07t\x02\x02\u0251p\x03\x02\x02\x02\u0252\u0253\x07z" +
24186
+ "\x02\x02\u0253\u0254\x07p\x02\x02\u0254\u0255\x07q\x02\x02\u0255\u0256" +
24187
+ "\x07t\x02\x02\u0256r\x03\x02\x02\x02\u0257\u0258\x07d\x02\x02\u0258\u0259" +
24188
+ "\x07k\x02\x02\u0259\u025A\x07v\x02\x02\u025A\u025B\x07u\x02\x02\u025B" +
24189
+ "t\x03\x02\x02\x02\u025C\u025D\x07d\x02\x02\u025D\u025E\x07{\x02\x02\u025E" +
24190
+ "\u025F\x07v\x02\x02\u025F\u0260\x07g\x02\x02\u0260\u0261\x07u\x02\x02" +
24191
+ "\u0261v\x03\x02\x02\x02\u0262\u0263\x07t\x02\x02\u0263\u0264\x07w\x02" +
24192
+ "\x02\u0264\u0265\x07n\x02\x02\u0265\u0266\x07g\x02\x02\u0266x\x03\x02" +
24193
+ "\x02\x02\u0267\u0268\x07r\x02\x02\u0268\u0269\x07c\x02\x02\u0269\u026A" +
24194
+ "\x07t\x02\x02\u026A\u026B\x07k\x02\x02\u026B\u026C\x07v\x02\x02\u026C" +
24195
+ "\u026D\x07{\x02\x02\u026Dz\x03\x02\x02\x02\u026E\u026F\x07e\x02\x02\u026F" +
24196
+ "\u0270\x07q\x02\x02\u0270\u0271\x07p\x02\x02\u0271\u0272\x07u\x02\x02" +
24197
+ "\u0272\u0273\x07v\x02\x02\u0273|\x03\x02\x02\x02\u0274\u0275\x07q\x02" +
24198
+ "\x02\u0275\u0276\x07d\x02\x02\u0276\u0277\x07l\x02\x02\u0277\u0278\x07" +
24199
+ "g\x02\x02\u0278\u0279\x07e\x02\x02\u0279\u027A\x07v\x02\x02\u027A~\x03" +
24200
+ "\x02\x02\x02\u027B\u027C\x07c\x02\x02\u027C\u027D\x07t\x02\x02\u027D\u027E" +
24201
+ "\x07t\x02\x02\u027E\u027F\x07c\x02\x02\u027F\u0280\x07{\x02\x02\u0280" +
24202
+ "\x80\x03\x02\x02\x02\u0281\u0282\x07u\x02\x02\u0282\u0283\x07v\x02\x02" +
24203
+ "\u0283\u0284\x07t\x02\x02\u0284\u0285\x07k\x02\x02\u0285\u0286\x07p\x02" +
24204
+ "\x02\u0286\u0287\x07i\x02\x02\u0287\x82\x03\x02\x02\x02\u0288\u0289\x07" +
24205
+ "k\x02\x02\u0289\u028A\x07p\x02\x02\u028A\u028B\x07v\x02\x02\u028B\x84" +
24206
+ "\x03\x02\x02\x02\u028C\u028D\x07w\x02\x02\u028D\u028E\x07k\x02\x02\u028E" +
24207
+ "\u028F\x07p\x02\x02\u028F\u0290\x07v\x02\x02\u0290\x86\x03\x02\x02\x02" +
24208
+ "\u0291\u0292\x07h\x02\x02\u0292\u0293\x07n\x02\x02\u0293\u0294\x07q\x02" +
24209
+ "\x02\u0294\u0295\x07c\x02\x02\u0295\u0296\x07v\x02\x02\u0296\x88\x03\x02" +
24210
+ "\x02\x02\u0297\u0298\x07f\x02\x02\u0298\u0299\x07q\x02\x02\u0299\u029A" +
24211
+ "\x07w\x02\x02\u029A\u029B\x07d\x02\x02\u029B\u029C\x07n\x02\x02\u029C" +
24212
+ "\u029D\x07g\x02\x02\u029D\x8A\x03\x02\x02\x02\u029E\u029F\x07d\x02\x02" +
24213
+ "\u029F\u02A0\x07q\x02\x02\u02A0\u02A1\x07q\x02\x02\u02A1\u02A2\x07n\x02" +
24214
+ "\x02\u02A2\x8C\x03\x02\x02\x02\u02A3\u02A4\x07p\x02\x02\u02A4\u02A5\x07" +
24215
+ "w\x02\x02\u02A5\u02A6\x07n\x02\x02\u02A6\u02A7\x07n\x02\x02\u02A7\x8E" +
24216
+ "\x03\x02\x02\x02\u02A8\u02A9\x07x\x02\x02\u02A9\u02AA\x07q\x02\x02\u02AA" +
24217
+ "\u02AB\x07k\x02\x02\u02AB\u02AC\x07f\x02\x02\u02AC\x90\x03\x02\x02\x02" +
24218
+ "\u02AD\u02AE\x07w\x02\x02\u02AE\u02AF\x07p\x02\x02\u02AF\u02B0\x07f\x02" +
24219
+ "\x02\u02B0\u02B1\x07g\x02\x02\u02B1\u02B2\x07h\x02\x02\u02B2\u02B3\x07" +
24220
+ "k\x02\x02\u02B3\u02B4\x07p\x02\x02\u02B4\u02B5\x07g\x02\x02\u02B5\u02B6" +
24221
+ "\x07f\x02\x02\u02B6\x92\x03\x02\x02\x02\u02B7\u02B8\x072\x02\x02\u02B8" +
24222
+ "\u02BA\t\x02\x02\x02\u02B9\u02BB\t\x03\x02\x02\u02BA\u02B9\x03\x02\x02" +
24223
+ "\x02\u02BB\u02BC\x03\x02\x02\x02\u02BC\u02BA\x03\x02\x02\x02\u02BC\u02BD" +
24224
+ "\x03\x02\x02\x02\u02BD\u02E8\x03\x02\x02\x02\u02BE\u02C0\t\x04\x02\x02" +
24225
+ "\u02BF\u02BE\x03\x02\x02\x02\u02C0\u02C1\x03\x02\x02\x02\u02C1\u02BF\x03" +
24226
+ "\x02\x02\x02\u02C1\u02C2\x03\x02\x02\x02\u02C2\u02C9\x03\x02\x02\x02\u02C3" +
24227
+ "\u02C5\x070\x02\x02\u02C4\u02C6\t\x04\x02\x02\u02C5\u02C4\x03\x02\x02" +
24228
+ "\x02\u02C6\u02C7\x03\x02\x02\x02\u02C7\u02C5\x03\x02\x02\x02\u02C7\u02C8" +
24229
+ "\x03\x02\x02\x02\u02C8\u02CA\x03\x02\x02\x02\u02C9\u02C3\x03\x02\x02\x02" +
24230
+ "\u02C9\u02CA\x03\x02\x02\x02\u02CA\u02D4\x03\x02\x02\x02\u02CB\u02CD\t" +
24231
+ "\x05\x02\x02\u02CC\u02CE\t\x06\x02\x02\u02CD\u02CC\x03\x02\x02\x02\u02CD" +
24232
+ "\u02CE\x03\x02\x02\x02\u02CE\u02D0\x03\x02\x02\x02\u02CF\u02D1\t\x04\x02" +
24233
+ "\x02\u02D0\u02CF\x03\x02\x02\x02\u02D1\u02D2\x03\x02\x02\x02\u02D2\u02D0" +
24234
+ "\x03\x02\x02\x02\u02D2\u02D3\x03\x02\x02\x02\u02D3\u02D5\x03\x02\x02\x02" +
24235
+ "\u02D4\u02CB\x03\x02\x02\x02\u02D4\u02D5\x03\x02\x02\x02\u02D5\u02E8\x03" +
24236
+ "\x02\x02\x02\u02D6\u02D8\x070\x02\x02\u02D7\u02D9\t\x04\x02\x02\u02D8" +
24237
+ "\u02D7\x03\x02\x02\x02\u02D9\u02DA\x03\x02\x02\x02\u02DA\u02D8\x03\x02" +
24238
+ "\x02\x02\u02DA\u02DB\x03\x02\x02\x02\u02DB\u02E5\x03\x02\x02\x02\u02DC" +
24239
+ "\u02DE\t\x05\x02\x02\u02DD\u02DF\t\x06\x02\x02\u02DE\u02DD\x03\x02\x02" +
24240
+ "\x02\u02DE\u02DF\x03\x02\x02\x02\u02DF\u02E1\x03\x02\x02\x02\u02E0\u02E2" +
24241
+ "\t\x04\x02\x02\u02E1\u02E0\x03\x02\x02\x02\u02E2\u02E3\x03\x02\x02\x02" +
24242
+ "\u02E3\u02E1\x03\x02\x02\x02\u02E3\u02E4\x03\x02\x02\x02\u02E4\u02E6\x03" +
24243
+ "\x02\x02\x02\u02E5\u02DC\x03\x02\x02\x02\u02E5\u02E6\x03\x02\x02\x02\u02E6" +
24244
+ "\u02E8\x03\x02\x02\x02\u02E7\u02B7\x03\x02\x02\x02\u02E7\u02BF\x03\x02" +
24245
+ "\x02\x02\u02E7\u02D6\x03\x02\x02\x02\u02E8\x94\x03\x02\x02\x02\u02E9\u02EA" +
24246
+ "\x07v\x02\x02\u02EA\u02EB\x07t\x02\x02\u02EB\u02EC\x07w\x02\x02\u02EC" +
24247
+ "\u02F3\x07g\x02\x02\u02ED\u02EE\x07h\x02\x02\u02EE\u02EF\x07c\x02\x02" +
24248
+ "\u02EF\u02F0\x07n\x02\x02\u02F0\u02F1\x07u\x02\x02\u02F1\u02F3\x07g\x02" +
24249
+ "\x02\u02F2\u02E9\x03\x02\x02\x02\u02F2\u02ED\x03\x02\x02\x02\u02F3\x96" +
24250
+ "\x03\x02\x02\x02\u02F4\u02F8\x07$\x02\x02\u02F5\u02F7\n\x07\x02\x02\u02F6" +
24251
+ "\u02F5\x03\x02\x02\x02\u02F7\u02FA\x03\x02\x02\x02\u02F8\u02F6\x03\x02" +
24252
+ "\x02\x02\u02F8\u02F9\x03\x02\x02\x02\u02F9\u02FB\x03\x02\x02\x02\u02FA" +
24253
+ "\u02F8\x03\x02\x02\x02\u02FB\u02FC\x07$\x02\x02\u02FC\x98\x03\x02\x02" +
24254
+ "\x02\u02FD\u02FE\x071\x02\x02\u02FE\u02FF\x071\x02\x02\u02FF\u0303\x03" +
24255
+ "\x02\x02\x02\u0300\u0302\n\b\x02\x02\u0301\u0300\x03\x02\x02\x02\u0302" +
24256
+ "\u0305\x03\x02\x02\x02\u0303\u0301\x03\x02\x02\x02\u0303\u0304\x03\x02" +
24257
+ "\x02\x02\u0304\u0312\x03\x02\x02\x02\u0305\u0303\x03\x02\x02\x02\u0306" +
24258
+ "\u0307\x071\x02\x02\u0307\u0308\x07,\x02\x02\u0308\u030C\x03\x02\x02\x02" +
24259
+ "\u0309\u030B\v\x02\x02\x02\u030A\u0309\x03\x02\x02\x02\u030B\u030E\x03" +
24260
+ "\x02\x02\x02\u030C\u030D\x03\x02\x02\x02\u030C\u030A\x03\x02\x02\x02\u030D" +
24261
+ "\u030F\x03\x02\x02\x02\u030E\u030C\x03\x02\x02\x02\u030F\u0310\x07,\x02" +
24262
+ "\x02\u0310\u0312\x071\x02\x02\u0311\u02FD\x03\x02\x02\x02\u0311\u0306" +
24263
+ "\x03\x02\x02\x02\u0312\x9A\x03\x02\x02\x02\u0313\u0314\x07?\x02\x02\u0314" +
24264
+ "\u0315\x07@\x02\x02\u0315\x9C\x03\x02\x02\x02\u0316\u0317\x07-\x02\x02" +
24265
+ "\u0317\u0318\x07-\x02\x02\u0318\x9E\x03\x02\x02\x02\u0319\u031A\x07/\x02" +
24266
+ "\x02\u031A\u031B\x07/\x02\x02\u031B\xA0\x03\x02\x02\x02\u031C\u031D\x07" +
24267
+ "-\x02\x02\u031D\xA2\x03\x02\x02\x02\u031E\u031F\x07/\x02\x02\u031F\xA4" +
24268
+ "\x03\x02\x02\x02\u0320\u0321\x071\x02\x02\u0321\xA6\x03\x02\x02\x02\u0322" +
24269
+ "\u0323\x07,\x02\x02\u0323\xA8\x03\x02\x02\x02\u0324\u0325\x07\'\x02\x02" +
24270
+ "\u0325\xAA\x03\x02\x02\x02\u0326\u0327\x07A\x02\x02\u0327\xAC\x03\x02" +
24271
+ "\x02\x02\u0328\u0329\x07?\x02\x02\u0329\xAE\x03\x02\x02\x02\u032A\u032B" +
24272
+ "\x07-\x02\x02\u032B\u032C\x07?\x02\x02\u032C\xB0\x03\x02\x02\x02\u032D" +
24273
+ "\u032E\x07/\x02\x02\u032E\u032F\x07?\x02\x02\u032F\xB2\x03\x02\x02\x02" +
24274
+ "\u0330\u0331\x07(\x02\x02\u0331\u0332\x07(\x02\x02\u0332\xB4\x03\x02\x02" +
24275
+ "\x02\u0333\u0334\x07~\x02\x02\u0334\u0335\x07~\x02\x02\u0335\xB6\x03\x02" +
24276
+ "\x02\x02\u0336\u0337\x07#\x02\x02\u0337\xB8\x03\x02\x02\x02\u0338\u0339" +
24277
+ "\x07?\x02\x02\u0339\u033A\x07?\x02\x02\u033A\xBA\x03\x02\x02\x02\u033B" +
24278
+ "\u033C\x07#\x02\x02\u033C\u033D\x07?\x02\x02\u033D\xBC\x03\x02\x02\x02" +
24279
+ "\u033E\u033F\x07@\x02\x02\u033F\xBE\x03\x02\x02\x02\u0340\u0341\x07>\x02" +
24280
+ "\x02\u0341\xC0\x03\x02\x02\x02\u0342\u0343\x07@\x02\x02\u0343\u0344\x07" +
24281
+ "?\x02\x02\u0344\xC2\x03\x02\x02\x02\u0345\u0346\x07>\x02\x02\u0346\u0347" +
24282
+ "\x07?\x02\x02\u0347\xC4\x03\x02\x02\x02\u0348\u0349\x070\x02\x02\u0349" +
24283
+ "\u034A\x070\x02\x02\u034A\u034B\x070\x02\x02\u034B\xC6\x03\x02\x02\x02" +
24284
+ "\u034C\u034D\x070\x02\x02\u034D\xC8\x03\x02\x02\x02\u034E\u034F\x07.\x02" +
24285
+ "\x02\u034F\xCA\x03\x02\x02\x02\u0350\u0351\x07a\x02\x02\u0351\xCC\x03" +
24286
+ "\x02\x02\x02\u0352\u0353\x07*\x02\x02\u0353\xCE\x03\x02\x02\x02\u0354" +
24287
+ "\u0355\x07+\x02\x02\u0355\xD0\x03\x02\x02\x02\u0356\u0357\x07}\x02\x02" +
24288
+ "\u0357\xD2\x03\x02\x02\x02\u0358\u0359\x07\x7F\x02\x02\u0359\xD4\x03\x02" +
24289
+ "\x02\x02\u035A\u035B\x07]\x02\x02\u035B\xD6\x03\x02\x02\x02\u035C\u035D" +
24290
+ "\x07_\x02\x02\u035D\xD8\x03\x02\x02\x02\u035E\u035F\x07<\x02\x02\u035F" +
24291
+ "\u0360\x07<\x02\x02\u0360\xDA\x03\x02\x02\x02\u0361\u0362\x07=\x02\x02" +
24292
+ "\u0362\xDC\x03\x02\x02\x02\u0363\u0364\x07<\x02\x02\u0364\xDE\x03\x02" +
24293
+ "\x02\x02\u0365\u0369\t\t\x02\x02\u0366\u0368\t\n\x02\x02\u0367\u0366\x03" +
24294
+ "\x02\x02\x02\u0368\u036B\x03\x02\x02\x02\u0369\u0367\x03\x02\x02\x02\u0369" +
24295
+ "\u036A\x03\x02\x02\x02\u036A\u0377\x03\x02\x02\x02\u036B\u0369\x03\x02" +
24296
+ "\x02\x02\u036C\u036E\t\v\x02\x02\u036D\u036C\x03\x02\x02\x02\u036E\u036F" +
24297
+ "\x03\x02\x02\x02\u036F\u036D\x03\x02\x02\x02\u036F\u0370\x03\x02\x02\x02" +
24298
+ "\u0370\u0372\x03\x02\x02\x02\u0371\u0373\t\n\x02\x02\u0372\u0371\x03\x02" +
24299
+ "\x02\x02\u0373\u0374\x03\x02\x02\x02\u0374\u0372\x03\x02\x02\x02\u0374" +
24300
+ "\u0375\x03\x02\x02\x02\u0375\u0377\x03\x02\x02\x02\u0376\u0365\x03\x02" +
24301
+ "\x02\x02\u0376\u036D\x03\x02\x02\x02\u0377\xE0\x03\x02\x02\x02\u0378\u037A" +
24302
+ "\t\f\x02\x02\u0379\u0378\x03\x02\x02\x02\u037A\u037B\x03\x02\x02\x02\u037B" +
24303
+ "\u0379\x03\x02\x02\x02\u037B\u037C\x03\x02\x02\x02\u037C\u037D\x03\x02" +
24304
+ "\x02\x02\u037D\u037E\bq\x02\x02\u037E\xE2\x03\x02\x02\x02\x19\x02\u02BC" +
24305
+ "\u02C1\u02C7\u02C9\u02CD\u02D2\u02D4\u02DA\u02DE\u02E3\u02E5\u02E7\u02F2" +
24306
+ "\u02F8\u0303\u030C\u0311\u0369\u036F\u0374\u0376\u037B\x03\b\x02\x02";
24303
24307
  BattleScriptLexer._serializedATN = UtilsExports.join([
24304
24308
  BattleScriptLexer._serializedATNSegment0,
24305
24309
  BattleScriptLexer._serializedATNSegment1,
@@ -24373,6 +24377,18 @@ const throwIfUndefined = (value, message) => {
24373
24377
  }
24374
24378
  return value;
24375
24379
  };
24380
+ /**
24381
+ * Write a number held directly on a node back to source.
24382
+ *
24383
+ * Nodes such as `forward`/`offset`/`rewind`, `rule`, and the `uint<n>`/`bits<n>` widths store a
24384
+ * decoded number rather than a literal child, so each keeps a companion `<field>Raw` holding the
24385
+ * text it was written as - otherwise `forward 0x10;` would come back as `forward 16;`. The raw
24386
+ * text is a full-AST convenience and is not in the binary layout, so a node rebuilt from a binary
24387
+ * has no raw text and falls back to decimal.
24388
+ */
24389
+ const numberToSourceCode = (value, raw) => {
24390
+ return raw ?? value.toString();
24391
+ };
24376
24392
  const applyMetaDataToFunctionDeclarationNode = (node, meta) => {
24377
24393
  return {
24378
24394
  ...node,
@@ -24452,6 +24468,18 @@ const AssignmentExpressionNodeLayout = [{
24452
24468
  key: "right",
24453
24469
  shape: [EnumNodeLayoutEntry.LAYOUT_POINTER_NODE],
24454
24470
  }];
24471
+ /**
24472
+ * The operator as written: `=`, `+=` or `-=`. The grammar gives all three the
24473
+ * same rule, so it is the token between the two expressions. It used to be
24474
+ * written as "=" whatever the source said, which turned `a += b` into `a = b`.
24475
+ */
24476
+ const assignmentOperator = (ctx) => {
24477
+ if (ctx.PLUS_ASSIGN())
24478
+ return "+=";
24479
+ if (ctx.MINUS_ASSIGN())
24480
+ return "-=";
24481
+ return "=";
24482
+ };
24455
24483
  const assignmentExpressionToAstNode = (instance, ctx) => {
24456
24484
  // Check for optimisations
24457
24485
  const canOptimise = isOptimisable(instance, ctx);
@@ -24459,7 +24487,7 @@ const assignmentExpressionToAstNode = (instance, ctx) => {
24459
24487
  return {
24460
24488
  kind: "OPTIMISED_ASSIGNMENT_EXPRESSION",
24461
24489
  left: ctx.expression(0).text,
24462
- operator: "=",
24490
+ operator: assignmentOperator(ctx),
24463
24491
  right: ctx.expression(1).text,
24464
24492
  ...instance.contextMetaData(ctx)
24465
24493
  };
@@ -24467,7 +24495,7 @@ const assignmentExpressionToAstNode = (instance, ctx) => {
24467
24495
  return {
24468
24496
  kind: "ASSIGNMENT_EXPRESSION",
24469
24497
  left: instance.visit(ctx.expression(0)),
24470
- operator: "=",
24498
+ operator: assignmentOperator(ctx),
24471
24499
  right: instance.visit(ctx.expression(1)),
24472
24500
  ...instance.contextMetaData(ctx)
24473
24501
  };
@@ -25445,24 +25473,48 @@ const LiteralIntNodeLayout = [{
25445
25473
  key: "value",
25446
25474
  shape: [EnumNodeLayoutEntry.LAYOUT_RAW_INT],
25447
25475
  }];
25476
+ /**
25477
+ * Decode the text of a NUMBER token to its numeric value.
25478
+ *
25479
+ * `Number()` rather than `JSON.parse()`, because the NUMBER rule accepts three forms JSON
25480
+ * rejects: hex (`0xFF`), a bare fraction (`.5`), and leading zeroes (`010`). Decoding those
25481
+ * with `JSON.parse` threw on source the parser had already accepted. Note that a leading zero
25482
+ * is not a base marker - BattleScript has no octal, so `010` is ten, and a C-style bitmask is
25483
+ * written `0x…`.
25484
+ */
25485
+ const decodeNumberLiteral = (raw) => {
25486
+ const value = Number(raw);
25487
+ if (Number.isNaN(value)) {
25488
+ throw new Error(`Could not decode number literal "${raw}"`);
25489
+ }
25490
+ return value;
25491
+ };
25448
25492
  // TODO: We don't currently have a way to distinguish between float and double
25449
25493
  // and would need to add support at the grammar level to do so. I think adding
25450
25494
  // support for 1.2453L with a capital L would be the best way to do this,
25451
25495
  // defaulting to 32-bit floats when L is not present.
25452
25496
  const numberLiteralToAstNode = (instance, ctx) => {
25497
+ // `raw` is kept verbatim so codegen writes the literal back exactly as it was authored -
25498
+ // a colour written as 0xFF0000 should not come back out as 16711680.
25453
25499
  const raw = ctx.NUMBER().text;
25454
- const isInteger = Number.isInteger(JSON.parse(raw));
25455
- if (isInteger) {
25500
+ const value = decodeNumberLiteral(raw);
25501
+ // Int or float is decided by how the literal was written, not by its value:
25502
+ // `2.0` and `1e3` are floats the author spelled as floats, and deciding on
25503
+ // the value made `7 / 2.0` integer division in the interpreter. Hex is
25504
+ // always an int (its digits can include `e`).
25505
+ const isHex = /^0[xX]/.test(raw);
25506
+ const writtenAsFloat = !isHex && /[.eE]/.test(raw);
25507
+ if (!writtenAsFloat) {
25456
25508
  return {
25457
25509
  kind: `LITERAL_INT`,
25458
- value: JSON.parse(raw),
25510
+ value,
25459
25511
  raw,
25460
25512
  ...instance.contextMetaData(ctx),
25461
25513
  };
25462
25514
  }
25463
25515
  return {
25464
25516
  kind: `LITERAL_FLOAT`,
25465
- value: JSON.parse(raw),
25517
+ value,
25466
25518
  raw,
25467
25519
  ...instance.contextMetaData(ctx),
25468
25520
  };
@@ -40333,8 +40385,11 @@ const ProtocolTypeNodeLayout = [{
40333
40385
  const protocolTypeToAstNode = (instance, ctx) => {
40334
40386
  const numLiteralNode = ctx.numberLiteral();
40335
40387
  let bitCount = 0;
40388
+ let bitCountRaw;
40336
40389
  if (numLiteralNode) {
40337
- bitCount = instance.visit(numLiteralNode).value;
40390
+ const literal = instance.visit(numLiteralNode);
40391
+ bitCount = literal.value;
40392
+ bitCountRaw = literal.raw;
40338
40393
  }
40339
40394
  let value = "";
40340
40395
  if (ctx.TYPE_STRING()) {
@@ -40353,13 +40408,14 @@ const protocolTypeToAstNode = (instance, ctx) => {
40353
40408
  kind: "PROTOCOL_TYPE",
40354
40409
  value,
40355
40410
  bits: bitCount,
40411
+ bitsRaw: bitCountRaw,
40356
40412
  ...instance.contextMetaData(ctx)
40357
40413
  };
40358
40414
  };
40359
40415
  const protocolTypeFromAstNode = (instance, node, options = {}) => {
40360
40416
  if (node.value === "string")
40361
40417
  return instance.raw(`${node.value}`);
40362
- return instance.raw(`${node.value}<${node.bits}>`);
40418
+ return instance.raw(`${node.value}<${numberToSourceCode(node.bits, node.bitsRaw)}>`);
40363
40419
  };
40364
40420
 
40365
40421
  const DefineStatementNodeLayout = [{
@@ -40580,20 +40636,26 @@ const RuleStatementNodeLayout = [{
40580
40636
  shape: [EnumNodeLayoutEntry.LAYOUT_RAW_INT]
40581
40637
  }];
40582
40638
  const ruleStatementToAstNode = (instance, ctx) => {
40639
+ const value = instance.visit(ctx.numberLiteral(0));
40640
+ const consequent = instance.visit(ctx.numberLiteral(1));
40641
+ const alternate = instance.visit(ctx.numberLiteral(2));
40583
40642
  return {
40584
40643
  kind: "RULE_STATEMENT",
40585
40644
  type: instance.visit(ctx.protocolType()),
40586
40645
  id: instance.visit(ctx.stringLiteral(0)).value,
40587
40646
  inspect: instance.visit(ctx.stringLiteral(1)).value,
40588
40647
  comparator: ctx.protocolComparator().text,
40589
- value: instance.visit(ctx.numberLiteral(0)).value,
40590
- consequent: instance.visit(ctx.numberLiteral(1)).value,
40591
- alternate: instance.visit(ctx.numberLiteral(2)).value,
40648
+ value: value.value,
40649
+ consequent: consequent.value,
40650
+ alternate: alternate.value,
40651
+ valueRaw: value.raw,
40652
+ consequentRaw: consequent.raw,
40653
+ alternateRaw: alternate.raw,
40592
40654
  ...instance.contextMetaData(ctx)
40593
40655
  };
40594
40656
  };
40595
40657
  const ruleStatementFromAstNode = (instance, node, options = {}) => {
40596
- return instance.inline(instance.getTokenLiteralText(BattleScriptLexer.RULE), " ", instance.visit(node.type), " ", `"${node.id}"`, " ", instance.getTokenLiteralText(BattleScriptLexer.ASSIGN), " ", `"${node.inspect}"`, " ", node.comparator, " ", node.value.toString(), " ", instance.getTokenLiteralText(BattleScriptLexer.QUESTION_MARK), " ", node.consequent.toString(), " ", instance.getTokenLiteralText(BattleScriptLexer.COLON), " ", node.alternate.toString(), ";", instance.newLine());
40658
+ return instance.inline(instance.getTokenLiteralText(BattleScriptLexer.RULE), " ", instance.visit(node.type), " ", `"${node.id}"`, " ", instance.getTokenLiteralText(BattleScriptLexer.ASSIGN), " ", `"${node.inspect}"`, " ", node.comparator, " ", numberToSourceCode(node.value, node.valueRaw), " ", instance.getTokenLiteralText(BattleScriptLexer.QUESTION_MARK), " ", numberToSourceCode(node.consequent, node.consequentRaw), " ", instance.getTokenLiteralText(BattleScriptLexer.COLON), " ", numberToSourceCode(node.alternate, node.alternateRaw), ";", instance.newLine());
40597
40659
  };
40598
40660
 
40599
40661
  const ParityDeclarationNodeLayout = [{
@@ -40649,14 +40711,16 @@ const ForwardStatementNodeLayout = [{
40649
40711
  shape: [EnumNodeLayoutEntry.LAYOUT_RAW_INT]
40650
40712
  }];
40651
40713
  const forwardStatementToAstNode = (instance, ctx) => {
40714
+ const literal = instance.visit(ctx.numberLiteral());
40652
40715
  return {
40653
40716
  kind: "FORWARD_STATEMENT",
40654
- value: instance.visit(ctx.numberLiteral()).value,
40717
+ value: literal.value,
40718
+ valueRaw: literal.raw,
40655
40719
  ...instance.contextMetaData(ctx)
40656
40720
  };
40657
40721
  };
40658
40722
  const forwardStatementFromAstNode = (instance, node, options = {}) => {
40659
- return instance.raw(instance.inline(`${instance.getTokenLiteralText(BattleScriptLexer.FORWARD)} `, node.value.toString(), ";", instance.newLine()));
40723
+ return instance.raw(instance.inline(`${instance.getTokenLiteralText(BattleScriptLexer.FORWARD)} `, numberToSourceCode(node.value, node.valueRaw), ";", instance.newLine()));
40660
40724
  };
40661
40725
 
40662
40726
  const OffsetStatementNodeLayout = [{
@@ -40667,14 +40731,16 @@ const OffsetStatementNodeLayout = [{
40667
40731
  shape: [EnumNodeLayoutEntry.LAYOUT_RAW_INT]
40668
40732
  }];
40669
40733
  const offsetStatementToAstNode = (instance, ctx) => {
40734
+ const literal = instance.visit(ctx.numberLiteral());
40670
40735
  return {
40671
40736
  kind: "OFFSET_STATEMENT",
40672
- value: instance.visit(ctx.numberLiteral()).value,
40737
+ value: literal.value,
40738
+ valueRaw: literal.raw,
40673
40739
  ...instance.contextMetaData(ctx)
40674
40740
  };
40675
40741
  };
40676
40742
  const offsetStatementFromAstNode = (instance, node, options = {}) => {
40677
- return instance.raw(instance.inline(`${instance.getTokenLiteralText(BattleScriptLexer.OFFSET)} `, node.value.toString(), ";", instance.newLine()));
40743
+ return instance.raw(instance.inline(`${instance.getTokenLiteralText(BattleScriptLexer.OFFSET)} `, numberToSourceCode(node.value, node.valueRaw), ";", instance.newLine()));
40678
40744
  };
40679
40745
 
40680
40746
  const RewindStatementNodeLayout = [{
@@ -40685,14 +40751,16 @@ const RewindStatementNodeLayout = [{
40685
40751
  shape: [EnumNodeLayoutEntry.LAYOUT_RAW_INT]
40686
40752
  }];
40687
40753
  const rewindStatementToAstNode = (instance, ctx) => {
40754
+ const literal = instance.visit(ctx.numberLiteral());
40688
40755
  return {
40689
40756
  kind: "REWIND_STATEMENT",
40690
- value: instance.visit(ctx.numberLiteral()).value,
40757
+ value: literal.value,
40758
+ valueRaw: literal.raw,
40691
40759
  ...instance.contextMetaData(ctx)
40692
40760
  };
40693
40761
  };
40694
40762
  const rewindStatementFromAstNode = (instance, node, options = {}) => {
40695
- return instance.raw(instance.inline(`${instance.getTokenLiteralText(BattleScriptLexer.REWIND)} `, node.value.toString(), ";", instance.newLine()));
40763
+ return instance.raw(instance.inline(`${instance.getTokenLiteralText(BattleScriptLexer.REWIND)} `, numberToSourceCode(node.value, node.valueRaw), ";", instance.newLine()));
40696
40764
  };
40697
40765
 
40698
40766
  const ProtocolOpStatementNodeLayout = [{
@@ -40757,10 +40825,12 @@ const protocolReadTypeToAstNode = (instance, ctx) => {
40757
40825
  else {
40758
40826
  throw new Error(`Unknown PROTOCOL_READ_TYPE type: ${ctx.text}`);
40759
40827
  }
40828
+ const literal = instance.visit(ctx.numberLiteral());
40760
40829
  return {
40761
40830
  kind: "PROTOCOL_READ_TYPE",
40762
40831
  value,
40763
- bits: instance.visit(ctx.numberLiteral()).value,
40832
+ bits: literal.value,
40833
+ bitsRaw: literal.raw,
40764
40834
  ...instance.contextMetaData(ctx)
40765
40835
  };
40766
40836
  };
@@ -40775,7 +40845,7 @@ const protocolReadTypeFromAstNode = (instance, node, options = {}) => {
40775
40845
  else {
40776
40846
  throw new Error(`Unknown PROTOCOL_READ_TYPE type (ReadDataType enum from dyna protocol repo): ${node.value}`);
40777
40847
  }
40778
- return instance.raw(`${value}<${node.bits}>`);
40848
+ return instance.raw(`${value}<${numberToSourceCode(node.bits, node.bitsRaw)}>`);
40779
40849
  };
40780
40850
 
40781
40851
  const StopStatementNodeLayout = [{
@@ -42391,10 +42461,13 @@ var EnumOperator;
42391
42461
  EnumOperator[EnumOperator["OPERATOR_SUB"] = 13] = "OPERATOR_SUB";
42392
42462
  EnumOperator[EnumOperator["OPERATOR_MUL"] = 14] = "OPERATOR_MUL";
42393
42463
  EnumOperator[EnumOperator["OPERATOR_DIV"] = 15] = "OPERATOR_DIV";
42394
- EnumOperator[EnumOperator["OPERATOR_PERIOD"] = 16] = "OPERATOR_PERIOD";
42395
- EnumOperator[EnumOperator["OPERATOR_NAMESPACE"] = 17] = "OPERATOR_NAMESPACE";
42396
- EnumOperator[EnumOperator["OPERATOR_ASSIGN"] = 18] = "OPERATOR_ASSIGN";
42397
- EnumOperator[EnumOperator["OPERATOR_ARROW"] = 19] = "OPERATOR_ARROW";
42464
+ EnumOperator[EnumOperator["OPERATOR_MOD"] = 16] = "OPERATOR_MOD";
42465
+ EnumOperator[EnumOperator["OPERATOR_PERIOD"] = 17] = "OPERATOR_PERIOD";
42466
+ EnumOperator[EnumOperator["OPERATOR_NAMESPACE"] = 18] = "OPERATOR_NAMESPACE";
42467
+ EnumOperator[EnumOperator["OPERATOR_ASSIGN"] = 19] = "OPERATOR_ASSIGN";
42468
+ EnumOperator[EnumOperator["OPERATOR_ARROW"] = 20] = "OPERATOR_ARROW";
42469
+ EnumOperator[EnumOperator["OPERATOR_ADD_ASSIGN"] = 21] = "OPERATOR_ADD_ASSIGN";
42470
+ EnumOperator[EnumOperator["OPERATOR_SUB_ASSIGN"] = 22] = "OPERATOR_SUB_ASSIGN";
42398
42471
  })(EnumOperator || (EnumOperator = {}));
42399
42472
  function EnumOperatorToString(opTor) {
42400
42473
  switch (opTor) {
@@ -42413,10 +42486,13 @@ function EnumOperatorToString(opTor) {
42413
42486
  case EnumOperator.OPERATOR_SUB: return "-";
42414
42487
  case EnumOperator.OPERATOR_MUL: return "*";
42415
42488
  case EnumOperator.OPERATOR_DIV: return "/";
42489
+ case EnumOperator.OPERATOR_MOD: return "%";
42416
42490
  case EnumOperator.OPERATOR_PERIOD: return ".";
42417
42491
  case EnumOperator.OPERATOR_NAMESPACE: return "::";
42418
42492
  case EnumOperator.OPERATOR_ASSIGN: return "=";
42419
42493
  case EnumOperator.OPERATOR_ARROW: return "=>";
42494
+ case EnumOperator.OPERATOR_ADD_ASSIGN: return "+=";
42495
+ case EnumOperator.OPERATOR_SUB_ASSIGN: return "-=";
42420
42496
  default: return "UNKNOWN";
42421
42497
  }
42422
42498
  }
@@ -42437,10 +42513,13 @@ function EnumOperatorFromString(opTor) {
42437
42513
  case "-": return EnumOperator.OPERATOR_SUB;
42438
42514
  case "*": return EnumOperator.OPERATOR_MUL;
42439
42515
  case "/": return EnumOperator.OPERATOR_DIV;
42516
+ case "%": return EnumOperator.OPERATOR_MOD;
42440
42517
  case ".": return EnumOperator.OPERATOR_PERIOD;
42441
42518
  case "::": return EnumOperator.OPERATOR_NAMESPACE;
42442
42519
  case "=": return EnumOperator.OPERATOR_ASSIGN;
42443
42520
  case "=>": return EnumOperator.OPERATOR_ARROW;
42521
+ case "+=": return EnumOperator.OPERATOR_ADD_ASSIGN;
42522
+ case "-=": return EnumOperator.OPERATOR_SUB_ASSIGN;
42444
42523
  default: return EnumOperator.OPERATOR_UNKNOWN;
42445
42524
  }
42446
42525
  }
@@ -43463,7 +43542,7 @@ function miniAstFromBinaryBuffer(data) {
43463
43542
  };
43464
43543
  }
43465
43544
 
43466
- var version = "4.1.2";
43545
+ var version = "5.0.0";
43467
43546
  var binaryVersion = 9;
43468
43547
 
43469
43548
  function miniAstToBinary$1(json, options = {}) {