From f9560de10d67f49105759fdd10e7476465dc70b9 Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Thu, 26 Mar 2020 09:13:48 +0100 Subject: [PATCH] Standard C array syntax implemented char x[8]. The KickC syntax char[8] x is still supported, but will be removed. Closes #162 --- .../dk/camelot64/kickc/parser/KickCLexer.java | 1100 ++++----- .../dk/camelot64/kickc/parser/KickCParser.g4 | 9 +- .../camelot64/kickc/parser/KickCParser.java | 2133 +++++++++-------- .../camelot64/kickc/parser/KickCParser.tokens | 247 +- .../kickc/parser/KickCParserBaseListener.java | 24 + .../kickc/parser/KickCParserBaseVisitor.java | 14 + .../kickc/parser/KickCParserListener.java | 24 + .../kickc/parser/KickCParserVisitor.java | 14 + .../Pass0GenerateStatementSequence.java | 34 +- src/test/kc/arrays-init.kc | 6 +- src/test/kc/examples/3d/3d.kc | 100 +- src/test/kc/examples/3d/perspective.kc | 18 +- .../kc/examples/bresenham/bitmap-bresenham.kc | 4 +- .../kc/examples/chargen/chargen-analysis.kc | 2 +- .../kc/examples/fastmultiply/fastmultiply8.kc | 6 +- src/test/kc/examples/fire/fire.kc | 4 +- src/test/kc/examples/fire/sid.kc | 2 +- src/test/kc/examples/font-2x2/font-2x2.kc | 2 +- src/test/kc/examples/kernalload/kernalload.kc | 2 +- src/test/kc/examples/linking/linking.kc | 2 +- .../multiplexer/simple-multiplexer.kc | 2 +- src/test/kc/examples/nmisamples/nmisamples.kc | 2 +- src/test/kc/examples/plasma/plasma-unroll.kc | 8 +- src/test/kc/examples/plasma/plasma.kc | 8 +- .../kc/examples/rasterbars/raster-bars.kc | 2 +- src/test/kc/examples/rotate/rotate.kc | 14 +- src/test/kc/examples/scroll/scroll.kc | 2 +- .../kc/examples/sinsprites/sinus-sprites.kc | 14 +- src/test/kc/examples/zpcode/zpcode.kc | 2 +- src/test/ref/examples/3d/3d.asm | 8 +- src/test/ref/examples/3d/3d.log | 16 +- src/test/ref/examples/3d/perspective.asm | 4 +- src/test/ref/examples/3d/perspective.log | 4 +- .../ref/examples/chargen/chargen-analysis.asm | 6 +- .../ref/examples/chargen/chargen-analysis.log | 6 +- src/test/ref/examples/fire/fire.asm | 2 +- src/test/ref/examples/fire/fire.log | 2 +- 37 files changed, 2053 insertions(+), 1796 deletions(-) diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCLexer.java b/src/main/java/dk/camelot64/kickc/parser/KickCLexer.java index 440aa026e..d90dde762 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCLexer.java +++ b/src/main/java/dk/camelot64/kickc/parser/KickCLexer.java @@ -27,24 +27,24 @@ public class KickCLexer extends Lexer { GREATER_THAN_EQUAL=32, GREATER_THAN=33, LOGIC_AND=34, LOGIC_OR=35, ASSIGN=36, ASSIGN_COMPOUND=37, IMPORT=38, TYPEDEF=39, PRAGMA=40, RESERVE=41, PC=42, TARGET=43, LINK=44, CPU=45, CODESEG=46, DATASEG=47, ENCODING=48, CONST=49, - EXTERN=50, EXPORT=51, ALIGN=52, INLINE=53, VOLATILE=54, INTERRUPT=55, - REGISTER=56, ADDRESS=57, ADDRESS_ZEROPAGE=58, ADDRESS_MAINMEM=59, FORM_SSA=60, - FORM_MA=61, CALLING=62, CALLINGCONVENTION=63, VARMODEL=64, IF=65, ELSE=66, - WHILE=67, DO=68, FOR=69, SWITCH=70, RETURN=71, BREAK=72, CONTINUE=73, - ASM=74, DEFAULT=75, CASE=76, STRUCT=77, ENUM=78, SIZEOF=79, TYPEID=80, - KICKASM=81, RESOURCE=82, USES=83, CLOBBERS=84, BYTES=85, CYCLES=86, LOGIC_NOT=87, - SIGNEDNESS=88, SIMPLETYPE=89, BOOLEAN=90, KICKASM_BODY=91, STRING=92, - CHAR=93, NUMBER=94, NUMFLOAT=95, BINFLOAT=96, DECFLOAT=97, HEXFLOAT=98, - NUMINT=99, BININTEGER=100, DECINTEGER=101, HEXINTEGER=102, NAME=103, WS=104, - COMMENT_LINE=105, COMMENT_BLOCK=106, ASM_BYTE=107, ASM_MNEMONIC=108, ASM_IMM=109, - ASM_COLON=110, ASM_COMMA=111, ASM_PAR_BEGIN=112, ASM_PAR_END=113, ASM_BRACKET_BEGIN=114, - ASM_BRACKET_END=115, ASM_DOT=116, ASM_SHIFT_LEFT=117, ASM_SHIFT_RIGHT=118, - ASM_PLUS=119, ASM_MINUS=120, ASM_LESS_THAN=121, ASM_GREATER_THAN=122, - ASM_MULTIPLY=123, ASM_DIVIDE=124, ASM_CURLY_BEGIN=125, ASM_CURLY_END=126, - ASM_NUMBER=127, ASM_NUMFLOAT=128, ASM_BINFLOAT=129, ASM_DECFLOAT=130, - ASM_HEXFLOAT=131, ASM_NUMINT=132, ASM_BININTEGER=133, ASM_DECINTEGER=134, - ASM_HEXINTEGER=135, ASM_CHAR=136, ASM_MULTI_REL=137, ASM_MULTI_NAME=138, - ASM_NAME=139, ASM_WS=140, ASM_COMMENT_LINE=141, ASM_COMMENT_BLOCK=142; + EXTERN=50, EXPORT=51, ALIGN=52, INLINE=53, VOLATILE=54, STATIC=55, INTERRUPT=56, + REGISTER=57, ADDRESS=58, ADDRESS_ZEROPAGE=59, ADDRESS_MAINMEM=60, FORM_SSA=61, + FORM_MA=62, CALLING=63, CALLINGCONVENTION=64, VARMODEL=65, IF=66, ELSE=67, + WHILE=68, DO=69, FOR=70, SWITCH=71, RETURN=72, BREAK=73, CONTINUE=74, + ASM=75, DEFAULT=76, CASE=77, STRUCT=78, ENUM=79, SIZEOF=80, TYPEID=81, + KICKASM=82, RESOURCE=83, USES=84, CLOBBERS=85, BYTES=86, CYCLES=87, LOGIC_NOT=88, + SIGNEDNESS=89, SIMPLETYPE=90, BOOLEAN=91, KICKASM_BODY=92, STRING=93, + CHAR=94, NUMBER=95, NUMFLOAT=96, BINFLOAT=97, DECFLOAT=98, HEXFLOAT=99, + NUMINT=100, BININTEGER=101, DECINTEGER=102, HEXINTEGER=103, NAME=104, + WS=105, COMMENT_LINE=106, COMMENT_BLOCK=107, ASM_BYTE=108, ASM_MNEMONIC=109, + ASM_IMM=110, ASM_COLON=111, ASM_COMMA=112, ASM_PAR_BEGIN=113, ASM_PAR_END=114, + ASM_BRACKET_BEGIN=115, ASM_BRACKET_END=116, ASM_DOT=117, ASM_SHIFT_LEFT=118, + ASM_SHIFT_RIGHT=119, ASM_PLUS=120, ASM_MINUS=121, ASM_LESS_THAN=122, ASM_GREATER_THAN=123, + ASM_MULTIPLY=124, ASM_DIVIDE=125, ASM_CURLY_BEGIN=126, ASM_CURLY_END=127, + ASM_NUMBER=128, ASM_NUMFLOAT=129, ASM_BINFLOAT=130, ASM_DECFLOAT=131, + ASM_HEXFLOAT=132, ASM_NUMINT=133, ASM_BININTEGER=134, ASM_DECINTEGER=135, + ASM_HEXINTEGER=136, ASM_CHAR=137, ASM_MULTI_REL=138, ASM_MULTI_NAME=139, + ASM_NAME=140, ASM_WS=141, ASM_COMMENT_LINE=142, ASM_COMMENT_BLOCK=143; public static final int ASM_MODE=1; public static String[] channelNames = { @@ -65,7 +65,7 @@ public class KickCLexer extends Lexer { "LOGIC_AND", "LOGIC_OR", "ASSIGN", "ASSIGN_COMPOUND", "IMPORT", "TYPEDEF", "PRAGMA", "RESERVE", "PC", "TARGET", "LINK", "CPU", "CODESEG", "DATASEG", "ENCODING", "CONST", "EXTERN", "EXPORT", "ALIGN", "INLINE", "VOLATILE", - "INTERRUPT", "REGISTER", "ADDRESS", "ADDRESS_ZEROPAGE", "ADDRESS_MAINMEM", + "STATIC", "INTERRUPT", "REGISTER", "ADDRESS", "ADDRESS_ZEROPAGE", "ADDRESS_MAINMEM", "FORM_SSA", "FORM_MA", "CALLING", "CALLINGCONVENTION", "VARMODEL", "IF", "ELSE", "WHILE", "DO", "FOR", "SWITCH", "RETURN", "BREAK", "CONTINUE", "ASM", "DEFAULT", "CASE", "STRUCT", "ENUM", "SIZEOF", "TYPEID", "KICKASM", @@ -95,13 +95,14 @@ public class KickCLexer extends Lexer { null, "'&&'", "'||'", "'='", null, "'import'", "'typedef'", "'#pragma'", "'reserve'", "'pc'", "'target'", "'link'", "'cpu'", "'code_seg'", "'data_seg'", "'encoding'", "'const'", "'extern'", "'export'", "'align'", "'inline'", - "'volatile'", "'interrupt'", "'register'", "'__address'", "'__zp'", "'__mem'", - "'__ssa'", "'__ma'", "'calling'", null, "'var_model'", "'if'", "'else'", - "'while'", "'do'", "'for'", "'switch'", "'return'", "'break'", "'continue'", - "'asm'", "'default'", "'case'", "'struct'", "'enum'", "'sizeof'", "'typeid'", - "'kickasm'", "'resource'", "'uses'", "'clobbers'", "'bytes'", "'cycles'", - "'!'", null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, "'.byte'", null, "'#'" + "'volatile'", "'static'", "'interrupt'", "'register'", "'__address'", + "'__zp'", "'__mem'", "'__ssa'", "'__ma'", "'calling'", null, "'var_model'", + "'if'", "'else'", "'while'", "'do'", "'for'", "'switch'", "'return'", + "'break'", "'continue'", "'asm'", "'default'", "'case'", "'struct'", + "'enum'", "'sizeof'", "'typeid'", "'kickasm'", "'resource'", "'uses'", + "'clobbers'", "'bytes'", "'cycles'", "'!'", null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, "'.byte'", null, "'#'" }; } private static final String[] _LITERAL_NAMES = makeLiteralNames(); @@ -115,7 +116,7 @@ public class KickCLexer extends Lexer { "GREATER_THAN", "LOGIC_AND", "LOGIC_OR", "ASSIGN", "ASSIGN_COMPOUND", "IMPORT", "TYPEDEF", "PRAGMA", "RESERVE", "PC", "TARGET", "LINK", "CPU", "CODESEG", "DATASEG", "ENCODING", "CONST", "EXTERN", "EXPORT", "ALIGN", - "INLINE", "VOLATILE", "INTERRUPT", "REGISTER", "ADDRESS", "ADDRESS_ZEROPAGE", + "INLINE", "VOLATILE", "STATIC", "INTERRUPT", "REGISTER", "ADDRESS", "ADDRESS_ZEROPAGE", "ADDRESS_MAINMEM", "FORM_SSA", "FORM_MA", "CALLING", "CALLINGCONVENTION", "VARMODEL", "IF", "ELSE", "WHILE", "DO", "FOR", "SWITCH", "RETURN", "BREAK", "CONTINUE", "ASM", "DEFAULT", "CASE", "STRUCT", "ENUM", "SIZEOF", "TYPEID", @@ -215,19 +216,19 @@ public class KickCLexer extends Lexer { case 36: IMPORT_action((RuleContext)_localctx, actionIndex); break; - case 72: + case 73: ASM_action((RuleContext)_localctx, actionIndex); break; - case 90: + case 91: STRING_action((RuleContext)_localctx, actionIndex); break; - case 104: + case 105: NAME_action((RuleContext)_localctx, actionIndex); break; - case 128: + case 129: ASM_CURLY_BEGIN_action((RuleContext)_localctx, actionIndex); break; - case 129: + case 130: ASM_CURLY_END_action((RuleContext)_localctx, actionIndex); break; } @@ -283,7 +284,7 @@ public class KickCLexer extends Lexer { } public static final String _serializedATN = - "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\u0090\u059d\b\1\b"+ + "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\u0091\u05a6\b\1\b"+ "\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n"+ "\t\n\4\13\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21"+ "\4\22\t\22\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30"+ @@ -302,521 +303,524 @@ public class KickCLexer extends Lexer { "\t\u0089\4\u008a\t\u008a\4\u008b\t\u008b\4\u008c\t\u008c\4\u008d\t\u008d"+ "\4\u008e\t\u008e\4\u008f\t\u008f\4\u0090\t\u0090\4\u0091\t\u0091\4\u0092"+ "\t\u0092\4\u0093\t\u0093\4\u0094\t\u0094\4\u0095\t\u0095\4\u0096\t\u0096"+ - "\4\u0097\t\u0097\4\u0098\t\u0098\3\2\3\2\3\2\3\3\3\3\3\4\3\4\3\5\3\5\3"+ - "\6\3\6\3\7\3\7\3\b\3\b\3\t\3\t\3\n\3\n\3\13\3\13\3\13\3\f\3\f\3\r\3\r"+ - "\3\16\3\16\3\16\3\17\3\17\3\20\3\20\3\21\3\21\3\22\3\22\3\23\3\23\3\24"+ - "\3\24\3\24\3\25\3\25\3\25\3\26\3\26\3\27\3\27\3\30\3\30\3\31\3\31\3\32"+ - "\3\32\3\32\3\33\3\33\3\33\3\34\3\34\3\34\3\35\3\35\3\35\3\36\3\36\3\37"+ - "\3\37\3\37\3 \3 \3 \3!\3!\3\"\3\"\3\"\3#\3#\3#\3$\3$\3%\3%\3%\3%\3%\3"+ - "%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\5%\u019c\n%\3&\3&\3"+ - "&\3&\3&\3&\3&\3&\3&\3\'\3\'\3\'\3\'\3\'\3\'\3\'\3\'\3(\3(\3(\3(\3(\3("+ - "\3(\3(\3)\3)\3)\3)\3)\3)\3)\3)\3*\3*\3*\3+\3+\3+\3+\3+\3+\3+\3,\3,\3,"+ - "\3,\3,\3-\3-\3-\3-\3.\3.\3.\3.\3.\3.\3.\3.\3.\3/\3/\3/\3/\3/\3/\3/\3/"+ - "\3/\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\61\3\61\3\61\3\61\3"+ - "\61\3\61\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\63\3\63\3\63\3\63\3\63\3"+ - "\63\3\63\3\64\3\64\3\64\3\64\3\64\3\64\3\65\3\65\3\65\3\65\3\65\3\65\3"+ - "\65\3\66\3\66\3\66\3\66\3\66\3\66\3\66\3\66\3\66\3\67\3\67\3\67\3\67\3"+ - "\67\3\67\3\67\3\67\3\67\3\67\38\38\38\38\38\38\38\38\38\39\39\39\39\3"+ - "9\39\39\39\39\39\3:\3:\3:\3:\3:\3;\3;\3;\3;\3;\3;\3<\3<\3<\3<\3<\3<\3"+ - "=\3=\3=\3=\3=\3>\3>\3>\3>\3>\3>\3>\3>\3?\3?\3?\3?\3?\3?\3?\3?\3?\3?\3"+ - "?\3?\3?\3?\3?\3?\3?\3?\3?\3?\5?\u0266\n?\3@\3@\3@\3@\3@\3@\3@\3@\3@\3"+ - "@\3A\3A\3A\3B\3B\3B\3B\3B\3C\3C\3C\3C\3C\3C\3D\3D\3D\3E\3E\3E\3E\3F\3"+ - "F\3F\3F\3F\3F\3F\3G\3G\3G\3G\3G\3G\3G\3H\3H\3H\3H\3H\3H\3I\3I\3I\3I\3"+ - "I\3I\3I\3I\3I\3J\3J\3J\3J\3J\3J\3K\3K\3K\3K\3K\3K\3K\3K\3L\3L\3L\3L\3"+ - "L\3M\3M\3M\3M\3M\3M\3M\3N\3N\3N\3N\3N\3O\3O\3O\3O\3O\3O\3O\3P\3P\3P\3"+ - "P\3P\3P\3P\3Q\3Q\3Q\3Q\3Q\3Q\3Q\3Q\3R\3R\3R\3R\3R\3R\3R\3R\3R\3S\3S\3"+ - "S\3S\3S\3T\3T\3T\3T\3T\3T\3T\3T\3T\3U\3U\3U\3U\3U\3U\3V\3V\3V\3V\3V\3"+ - "V\3V\3W\3W\3X\3X\3X\3X\3X\3X\3X\3X\3X\3X\3X\3X\3X\3X\5X\u030d\nX\3Y\3"+ - "Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3"+ - "Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\5Y\u0334\nY\3Z\3Z\3Z\3Z\3Z\3Z\3"+ - "Z\3Z\3Z\5Z\u033f\nZ\3[\3[\3[\3[\7[\u0345\n[\f[\16[\u0348\13[\3[\3[\3["+ - "\3\\\3\\\3\\\3\\\7\\\u0351\n\\\f\\\16\\\u0354\13\\\3\\\3\\\5\\\u0358\n"+ - "\\\3\\\3\\\5\\\u035c\n\\\5\\\u035e\n\\\3\\\5\\\u0361\n\\\3\\\3\\\3]\3"+ - "]\3]\3]\5]\u0369\n]\3]\3]\3^\3^\5^\u036f\n^\3_\3_\3_\5_\u0374\n_\3`\3"+ - "`\3`\3`\3`\5`\u037b\n`\3`\7`\u037e\n`\f`\16`\u0381\13`\3`\3`\6`\u0385"+ - "\n`\r`\16`\u0386\3a\7a\u038a\na\fa\16a\u038d\13a\3a\3a\6a\u0391\na\ra"+ - "\16a\u0392\3b\3b\3b\3b\3b\5b\u039a\nb\3b\7b\u039d\nb\fb\16b\u03a0\13b"+ - "\3b\3b\6b\u03a4\nb\rb\16b\u03a5\3c\3c\3c\5c\u03ab\nc\3c\3c\3c\5c\u03b0"+ - "\nc\3d\3d\3d\6d\u03b5\nd\rd\16d\u03b6\3d\3d\6d\u03bb\nd\rd\16d\u03bc\5"+ - "d\u03bf\nd\3e\6e\u03c2\ne\re\16e\u03c3\3f\3f\3f\3f\3f\5f\u03cb\nf\3f\6"+ - "f\u03ce\nf\rf\16f\u03cf\3g\3g\3h\3h\3i\3i\3j\3j\7j\u03da\nj\fj\16j\u03dd"+ - "\13j\3j\3j\3k\3k\3l\3l\3m\6m\u03e6\nm\rm\16m\u03e7\3m\3m\3n\3n\3n\3n\7"+ - "n\u03f0\nn\fn\16n\u03f3\13n\3n\3n\3o\3o\3o\3o\7o\u03fb\no\fo\16o\u03fe"+ - "\13o\3o\3o\3o\3o\3o\3p\3p\3p\3p\3p\3p\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3"+ - "q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3"+ - "q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3"+ - "q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3"+ - "q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3"+ - "q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3"+ - "q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3"+ - "q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3"+ - "q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3"+ - "q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3"+ - "q\3q\3q\3q\3q\5q\u04e9\nq\3r\3r\3s\3s\3t\3t\3u\3u\3v\3v\3w\3w\3x\3x\3"+ - "y\3y\3z\3z\3z\3{\3{\3{\3|\3|\3}\3}\3~\3~\3\177\3\177\3\u0080\3\u0080\3"+ - "\u0081\3\u0081\3\u0082\3\u0082\3\u0082\3\u0083\3\u0083\3\u0083\3\u0084"+ - "\3\u0084\5\u0084\u0515\n\u0084\3\u0085\3\u0085\3\u0085\5\u0085\u051a\n"+ - "\u0085\3\u0086\3\u0086\7\u0086\u051e\n\u0086\f\u0086\16\u0086\u0521\13"+ - "\u0086\3\u0086\3\u0086\6\u0086\u0525\n\u0086\r\u0086\16\u0086\u0526\3"+ - "\u0087\7\u0087\u052a\n\u0087\f\u0087\16\u0087\u052d\13\u0087\3\u0087\3"+ - "\u0087\6\u0087\u0531\n\u0087\r\u0087\16\u0087\u0532\3\u0088\3\u0088\7"+ - "\u0088\u0537\n\u0088\f\u0088\16\u0088\u053a\13\u0088\3\u0088\3\u0088\6"+ - "\u0088\u053e\n\u0088\r\u0088\16\u0088\u053f\3\u0089\3\u0089\3\u0089\5"+ - "\u0089\u0545\n\u0089\3\u008a\3\u008a\6\u008a\u0549\n\u008a\r\u008a\16"+ - "\u008a\u054a\3\u008b\6\u008b\u054e\n\u008b\r\u008b\16\u008b\u054f\3\u008c"+ - "\3\u008c\6\u008c\u0554\n\u008c\r\u008c\16\u008c\u0555\3\u008d\3\u008d"+ - "\3\u008e\3\u008e\3\u008f\3\u008f\3\u0090\3\u0090\3\u0090\3\u0090\5\u0090"+ - "\u0562\n\u0090\3\u0090\3\u0090\3\u0091\3\u0091\6\u0091\u0568\n\u0091\r"+ - "\u0091\16\u0091\u0569\3\u0092\3\u0092\7\u0092\u056e\n\u0092\f\u0092\16"+ - "\u0092\u0571\13\u0092\3\u0093\3\u0093\7\u0093\u0575\n\u0093\f\u0093\16"+ - "\u0093\u0578\13\u0093\3\u0094\3\u0094\3\u0095\3\u0095\3\u0096\6\u0096"+ - "\u057f\n\u0096\r\u0096\16\u0096\u0580\3\u0096\3\u0096\3\u0097\3\u0097"+ - "\3\u0097\3\u0097\7\u0097\u0589\n\u0097\f\u0097\16\u0097\u058c\13\u0097"+ - "\3\u0097\3\u0097\3\u0098\3\u0098\3\u0098\3\u0098\7\u0098\u0594\n\u0098"+ - "\f\u0098\16\u0098\u0597\13\u0098\3\u0098\3\u0098\3\u0098\3\u0098\3\u0098"+ - "\5\u0346\u03fc\u0595\2\u0099\4\4\6\5\b\6\n\7\f\b\16\t\20\n\22\13\24\f"+ - "\26\r\30\16\32\17\34\20\36\21 \22\"\23$\24&\25(\26*\27,\30.\31\60\32\62"+ - "\33\64\34\66\358\36:\37< >!@\"B#D$F%H&J\'L(N)P*R+T,V-X.Z/\\\60^\61`\62"+ - "b\63d\64f\65h\66j\67l8n9p:r;tz?|@~A\u0080B\u0082C\u0084D\u0086E\u0088"+ - "F\u008aG\u008cH\u008eI\u0090J\u0092K\u0094L\u0096M\u0098N\u009aO\u009c"+ - "P\u009eQ\u00a0R\u00a2S\u00a4T\u00a6U\u00a8V\u00aaW\u00acX\u00aeY\u00b0"+ - "Z\u00b2[\u00b4\\\u00b6]\u00b8^\u00ba_\u00bc`\u00bea\u00c0b\u00c2c\u00c4"+ - "d\u00c6e\u00c8f\u00cag\u00cch\u00ce\2\u00d0\2\u00d2\2\u00d4i\u00d6\2\u00d8"+ - "\2\u00daj\u00dck\u00del\u00e0m\u00e2n\u00e4o\u00e6p\u00e8q\u00ear\u00ec"+ - "s\u00eet\u00f0u\u00f2v\u00f4w\u00f6x\u00f8y\u00faz\u00fc{\u00fe|\u0100"+ - "}\u0102~\u0104\177\u0106\u0080\u0108\u0081\u010a\u0082\u010c\u0083\u010e"+ - "\u0084\u0110\u0085\u0112\u0086\u0114\u0087\u0116\u0088\u0118\u0089\u011a"+ - "\2\u011c\2\u011e\2\u0120\u008a\u0122\u008b\u0124\u008c\u0126\u008d\u0128"+ - "\2\u012a\2\u012c\u008e\u012e\u008f\u0130\u0090\4\2\3\23\3\2$$\3\2||\4"+ - "\2rruu\4\2ooww\7\2$$))hhpptt\3\2))\4\2uuww\7\2dfkknnuuyy\4\2DDdd\3\2\62"+ - "\63\3\2\62;\5\2\62;CHch\5\2C\\aac|\6\2\62;C\\aac|\6\2\13\f\17\17\"\"\u00a2"+ - "\u00a2\4\2\f\f\17\17\4\2--//\2\u0627\2\4\3\2\2\2\2\6\3\2\2\2\2\b\3\2\2"+ - "\2\2\n\3\2\2\2\2\f\3\2\2\2\2\16\3\2\2\2\2\20\3\2\2\2\2\22\3\2\2\2\2\24"+ - "\3\2\2\2\2\26\3\2\2\2\2\30\3\2\2\2\2\32\3\2\2\2\2\34\3\2\2\2\2\36\3\2"+ - "\2\2\2 \3\2\2\2\2\"\3\2\2\2\2$\3\2\2\2\2&\3\2\2\2\2(\3\2\2\2\2*\3\2\2"+ - "\2\2,\3\2\2\2\2.\3\2\2\2\2\60\3\2\2\2\2\62\3\2\2\2\2\64\3\2\2\2\2\66\3"+ - "\2\2\2\28\3\2\2\2\2:\3\2\2\2\2<\3\2\2\2\2>\3\2\2\2\2@\3\2\2\2\2B\3\2\2"+ - "\2\2D\3\2\2\2\2F\3\2\2\2\2H\3\2\2\2\2J\3\2\2\2\2L\3\2\2\2\2N\3\2\2\2\2"+ - "P\3\2\2\2\2R\3\2\2\2\2T\3\2\2\2\2V\3\2\2\2\2X\3\2\2\2\2Z\3\2\2\2\2\\\3"+ - "\2\2\2\2^\3\2\2\2\2`\3\2\2\2\2b\3\2\2\2\2d\3\2\2\2\2f\3\2\2\2\2h\3\2\2"+ - "\2\2j\3\2\2\2\2l\3\2\2\2\2n\3\2\2\2\2p\3\2\2\2\2r\3\2\2\2\2t\3\2\2\2\2"+ - "v\3\2\2\2\2x\3\2\2\2\2z\3\2\2\2\2|\3\2\2\2\2~\3\2\2\2\2\u0080\3\2\2\2"+ - "\2\u0082\3\2\2\2\2\u0084\3\2\2\2\2\u0086\3\2\2\2\2\u0088\3\2\2\2\2\u008a"+ - "\3\2\2\2\2\u008c\3\2\2\2\2\u008e\3\2\2\2\2\u0090\3\2\2\2\2\u0092\3\2\2"+ - "\2\2\u0094\3\2\2\2\2\u0096\3\2\2\2\2\u0098\3\2\2\2\2\u009a\3\2\2\2\2\u009c"+ - "\3\2\2\2\2\u009e\3\2\2\2\2\u00a0\3\2\2\2\2\u00a2\3\2\2\2\2\u00a4\3\2\2"+ - "\2\2\u00a6\3\2\2\2\2\u00a8\3\2\2\2\2\u00aa\3\2\2\2\2\u00ac\3\2\2\2\2\u00ae"+ - "\3\2\2\2\2\u00b0\3\2\2\2\2\u00b2\3\2\2\2\2\u00b4\3\2\2\2\2\u00b6\3\2\2"+ - "\2\2\u00b8\3\2\2\2\2\u00ba\3\2\2\2\2\u00bc\3\2\2\2\2\u00be\3\2\2\2\2\u00c0"+ - "\3\2\2\2\2\u00c2\3\2\2\2\2\u00c4\3\2\2\2\2\u00c6\3\2\2\2\2\u00c8\3\2\2"+ - "\2\2\u00ca\3\2\2\2\2\u00cc\3\2\2\2\2\u00d4\3\2\2\2\2\u00da\3\2\2\2\2\u00dc"+ - "\3\2\2\2\2\u00de\3\2\2\2\3\u00e0\3\2\2\2\3\u00e2\3\2\2\2\3\u00e4\3\2\2"+ - "\2\3\u00e6\3\2\2\2\3\u00e8\3\2\2\2\3\u00ea\3\2\2\2\3\u00ec\3\2\2\2\3\u00ee"+ - "\3\2\2\2\3\u00f0\3\2\2\2\3\u00f2\3\2\2\2\3\u00f4\3\2\2\2\3\u00f6\3\2\2"+ - "\2\3\u00f8\3\2\2\2\3\u00fa\3\2\2\2\3\u00fc\3\2\2\2\3\u00fe\3\2\2\2\3\u0100"+ - "\3\2\2\2\3\u0102\3\2\2\2\3\u0104\3\2\2\2\3\u0106\3\2\2\2\3\u0108\3\2\2"+ - "\2\3\u010a\3\2\2\2\3\u010c\3\2\2\2\3\u010e\3\2\2\2\3\u0110\3\2\2\2\3\u0112"+ - "\3\2\2\2\3\u0114\3\2\2\2\3\u0116\3\2\2\2\3\u0118\3\2\2\2\3\u0120\3\2\2"+ - "\2\3\u0122\3\2\2\2\3\u0124\3\2\2\2\3\u0126\3\2\2\2\3\u012c\3\2\2\2\3\u012e"+ - "\3\2\2\2\3\u0130\3\2\2\2\4\u0132\3\2\2\2\6\u0135\3\2\2\2\b\u0137\3\2\2"+ - "\2\n\u0139\3\2\2\2\f\u013b\3\2\2\2\16\u013d\3\2\2\2\20\u013f\3\2\2\2\22"+ - "\u0141\3\2\2\2\24\u0143\3\2\2\2\26\u0145\3\2\2\2\30\u0148\3\2\2\2\32\u014a"+ - "\3\2\2\2\34\u014c\3\2\2\2\36\u014f\3\2\2\2 \u0151\3\2\2\2\"\u0153\3\2"+ - "\2\2$\u0155\3\2\2\2&\u0157\3\2\2\2(\u0159\3\2\2\2*\u015c\3\2\2\2,\u015f"+ - "\3\2\2\2.\u0161\3\2\2\2\60\u0163\3\2\2\2\62\u0165\3\2\2\2\64\u0167\3\2"+ - "\2\2\66\u016a\3\2\2\28\u016d\3\2\2\2:\u0170\3\2\2\2<\u0173\3\2\2\2>\u0175"+ - "\3\2\2\2@\u0178\3\2\2\2B\u017b\3\2\2\2D\u017d\3\2\2\2F\u0180\3\2\2\2H"+ - "\u0183\3\2\2\2J\u019b\3\2\2\2L\u019d\3\2\2\2N\u01a6\3\2\2\2P\u01ae\3\2"+ - "\2\2R\u01b6\3\2\2\2T\u01be\3\2\2\2V\u01c1\3\2\2\2X\u01c8\3\2\2\2Z\u01cd"+ - "\3\2\2\2\\\u01d1\3\2\2\2^\u01da\3\2\2\2`\u01e3\3\2\2\2b\u01ec\3\2\2\2"+ - "d\u01f2\3\2\2\2f\u01f9\3\2\2\2h\u0200\3\2\2\2j\u0206\3\2\2\2l\u020d\3"+ - "\2\2\2n\u0216\3\2\2\2p\u0220\3\2\2\2r\u0229\3\2\2\2t\u0233\3\2\2\2v\u0238"+ - "\3\2\2\2x\u023e\3\2\2\2z\u0244\3\2\2\2|\u0249\3\2\2\2~\u0265\3\2\2\2\u0080"+ - "\u0267\3\2\2\2\u0082\u0271\3\2\2\2\u0084\u0274\3\2\2\2\u0086\u0279\3\2"+ - "\2\2\u0088\u027f\3\2\2\2\u008a\u0282\3\2\2\2\u008c\u0286\3\2\2\2\u008e"+ - "\u028d\3\2\2\2\u0090\u0294\3\2\2\2\u0092\u029a\3\2\2\2\u0094\u02a3\3\2"+ - "\2\2\u0096\u02a9\3\2\2\2\u0098\u02b1\3\2\2\2\u009a\u02b6\3\2\2\2\u009c"+ - "\u02bd\3\2\2\2\u009e\u02c2\3\2\2\2\u00a0\u02c9\3\2\2\2\u00a2\u02d0\3\2"+ - "\2\2\u00a4\u02d8\3\2\2\2\u00a6\u02e1\3\2\2\2\u00a8\u02e6\3\2\2\2\u00aa"+ - "\u02ef\3\2\2\2\u00ac\u02f5\3\2\2\2\u00ae\u02fc\3\2\2\2\u00b0\u030c\3\2"+ - "\2\2\u00b2\u0333\3\2\2\2\u00b4\u033e\3\2\2\2\u00b6\u0340\3\2\2\2\u00b8"+ - "\u034c\3\2\2\2\u00ba\u0364\3\2\2\2\u00bc\u036e\3\2\2\2\u00be\u0373\3\2"+ - "\2\2\u00c0\u037a\3\2\2\2\u00c2\u038b\3\2\2\2\u00c4\u0399\3\2\2\2\u00c6"+ - "\u03aa\3\2\2\2\u00c8\u03be\3\2\2\2\u00ca\u03c1\3\2\2\2\u00cc\u03ca\3\2"+ - "\2\2\u00ce\u03d1\3\2\2\2\u00d0\u03d3\3\2\2\2\u00d2\u03d5\3\2\2\2\u00d4"+ - "\u03d7\3\2\2\2\u00d6\u03e0\3\2\2\2\u00d8\u03e2\3\2\2\2\u00da\u03e5\3\2"+ - "\2\2\u00dc\u03eb\3\2\2\2\u00de\u03f6\3\2\2\2\u00e0\u0404\3\2\2\2\u00e2"+ - "\u04e8\3\2\2\2\u00e4\u04ea\3\2\2\2\u00e6\u04ec\3\2\2\2\u00e8\u04ee\3\2"+ - "\2\2\u00ea\u04f0\3\2\2\2\u00ec\u04f2\3\2\2\2\u00ee\u04f4\3\2\2\2\u00f0"+ - "\u04f6\3\2\2\2\u00f2\u04f8\3\2\2\2\u00f4\u04fa\3\2\2\2\u00f6\u04fd\3\2"+ - "\2\2\u00f8\u0500\3\2\2\2\u00fa\u0502\3\2\2\2\u00fc\u0504\3\2\2\2\u00fe"+ - "\u0506\3\2\2\2\u0100\u0508\3\2\2\2\u0102\u050a\3\2\2\2\u0104\u050c\3\2"+ - "\2\2\u0106\u050f\3\2\2\2\u0108\u0514\3\2\2\2\u010a\u0519\3\2\2\2\u010c"+ - "\u051b\3\2\2\2\u010e\u052b\3\2\2\2\u0110\u0534\3\2\2\2\u0112\u0544\3\2"+ - "\2\2\u0114\u0546\3\2\2\2\u0116\u054d\3\2\2\2\u0118\u0551\3\2\2\2\u011a"+ - "\u0557\3\2\2\2\u011c\u0559\3\2\2\2\u011e\u055b\3\2\2\2\u0120\u055d\3\2"+ - "\2\2\u0122\u0565\3\2\2\2\u0124\u056b\3\2\2\2\u0126\u0572\3\2\2\2\u0128"+ - "\u0579\3\2\2\2\u012a\u057b\3\2\2\2\u012c\u057e\3\2\2\2\u012e\u0584\3\2"+ - "\2\2\u0130\u058f\3\2\2\2\u0132\u0133\7}\2\2\u0133\u0134\b\2\2\2\u0134"+ - "\5\3\2\2\2\u0135\u0136\7\177\2\2\u0136\7\3\2\2\2\u0137\u0138\7]\2\2\u0138"+ - "\t\3\2\2\2\u0139\u013a\7_\2\2\u013a\13\3\2\2\2\u013b\u013c\7*\2\2\u013c"+ - "\r\3\2\2\2\u013d\u013e\7+\2\2\u013e\17\3\2\2\2\u013f\u0140\7=\2\2\u0140"+ - "\21\3\2\2\2\u0141\u0142\7<\2\2\u0142\23\3\2\2\2\u0143\u0144\7.\2\2\u0144"+ - "\25\3\2\2\2\u0145\u0146\7\60\2\2\u0146\u0147\7\60\2\2\u0147\27\3\2\2\2"+ - "\u0148\u0149\7A\2\2\u0149\31\3\2\2\2\u014a\u014b\7\60\2\2\u014b\33\3\2"+ - "\2\2\u014c\u014d\7/\2\2\u014d\u014e\7@\2\2\u014e\35\3\2\2\2\u014f\u0150"+ - "\7-\2\2\u0150\37\3\2\2\2\u0151\u0152\7/\2\2\u0152!\3\2\2\2\u0153\u0154"+ - "\7,\2\2\u0154#\3\2\2\2\u0155\u0156\7\61\2\2\u0156%\3\2\2\2\u0157\u0158"+ - "\7\'\2\2\u0158\'\3\2\2\2\u0159\u015a\7-\2\2\u015a\u015b\7-\2\2\u015b)"+ - "\3\2\2\2\u015c\u015d\7/\2\2\u015d\u015e\7/\2\2\u015e+\3\2\2\2\u015f\u0160"+ - "\7(\2\2\u0160-\3\2\2\2\u0161\u0162\7\u0080\2\2\u0162/\3\2\2\2\u0163\u0164"+ - "\7`\2\2\u0164\61\3\2\2\2\u0165\u0166\7~\2\2\u0166\63\3\2\2\2\u0167\u0168"+ - "\7>\2\2\u0168\u0169\7>\2\2\u0169\65\3\2\2\2\u016a\u016b\7@\2\2\u016b\u016c"+ - "\7@\2\2\u016c\67\3\2\2\2\u016d\u016e\7?\2\2\u016e\u016f\7?\2\2\u016f9"+ - "\3\2\2\2\u0170\u0171\7#\2\2\u0171\u0172\7?\2\2\u0172;\3\2\2\2\u0173\u0174"+ - "\7>\2\2\u0174=\3\2\2\2\u0175\u0176\7>\2\2\u0176\u0177\7?\2\2\u0177?\3"+ - "\2\2\2\u0178\u0179\7@\2\2\u0179\u017a\7?\2\2\u017aA\3\2\2\2\u017b\u017c"+ - "\7@\2\2\u017cC\3\2\2\2\u017d\u017e\7(\2\2\u017e\u017f\7(\2\2\u017fE\3"+ - "\2\2\2\u0180\u0181\7~\2\2\u0181\u0182\7~\2\2\u0182G\3\2\2\2\u0183\u0184"+ - "\7?\2\2\u0184I\3\2\2\2\u0185\u0186\7-\2\2\u0186\u019c\7?\2\2\u0187\u0188"+ - "\7/\2\2\u0188\u019c\7?\2\2\u0189\u018a\7,\2\2\u018a\u019c\7?\2\2\u018b"+ - "\u018c\7\61\2\2\u018c\u019c\7?\2\2\u018d\u018e\7\'\2\2\u018e\u019c\7?"+ - "\2\2\u018f\u0190\7>\2\2\u0190\u0191\7>\2\2\u0191\u019c\7?\2\2\u0192\u0193"+ - "\7@\2\2\u0193\u0194\7@\2\2\u0194\u019c\7?\2\2\u0195\u0196\7(\2\2\u0196"+ - "\u019c\7?\2\2\u0197\u0198\7~\2\2\u0198\u019c\7?\2\2\u0199\u019a\7`\2\2"+ - "\u019a\u019c\7?\2\2\u019b\u0185\3\2\2\2\u019b\u0187\3\2\2\2\u019b\u0189"+ - "\3\2\2\2\u019b\u018b\3\2\2\2\u019b\u018d\3\2\2\2\u019b\u018f\3\2\2\2\u019b"+ - "\u0192\3\2\2\2\u019b\u0195\3\2\2\2\u019b\u0197\3\2\2\2\u019b\u0199\3\2"+ - "\2\2\u019cK\3\2\2\2\u019d\u019e\7k\2\2\u019e\u019f\7o\2\2\u019f\u01a0"+ - "\7r\2\2\u01a0\u01a1\7q\2\2\u01a1\u01a2\7t\2\2\u01a2\u01a3\7v\2\2\u01a3"+ - "\u01a4\3\2\2\2\u01a4\u01a5\b&\3\2\u01a5M\3\2\2\2\u01a6\u01a7\7v\2\2\u01a7"+ - "\u01a8\7{\2\2\u01a8\u01a9\7r\2\2\u01a9\u01aa\7g\2\2\u01aa\u01ab\7f\2\2"+ - "\u01ab\u01ac\7g\2\2\u01ac\u01ad\7h\2\2\u01adO\3\2\2\2\u01ae\u01af\7%\2"+ - "\2\u01af\u01b0\7r\2\2\u01b0\u01b1\7t\2\2\u01b1\u01b2\7c\2\2\u01b2\u01b3"+ - "\7i\2\2\u01b3\u01b4\7o\2\2\u01b4\u01b5\7c\2\2\u01b5Q\3\2\2\2\u01b6\u01b7"+ - "\7t\2\2\u01b7\u01b8\7g\2\2\u01b8\u01b9\7u\2\2\u01b9\u01ba\7g\2\2\u01ba"+ - "\u01bb\7t\2\2\u01bb\u01bc\7x\2\2\u01bc\u01bd\7g\2\2\u01bdS\3\2\2\2\u01be"+ - "\u01bf\7r\2\2\u01bf\u01c0\7e\2\2\u01c0U\3\2\2\2\u01c1\u01c2\7v\2\2\u01c2"+ - "\u01c3\7c\2\2\u01c3\u01c4\7t\2\2\u01c4\u01c5\7i\2\2\u01c5\u01c6\7g\2\2"+ - "\u01c6\u01c7\7v\2\2\u01c7W\3\2\2\2\u01c8\u01c9\7n\2\2\u01c9\u01ca\7k\2"+ - "\2\u01ca\u01cb\7p\2\2\u01cb\u01cc\7m\2\2\u01ccY\3\2\2\2\u01cd\u01ce\7"+ - "e\2\2\u01ce\u01cf\7r\2\2\u01cf\u01d0\7w\2\2\u01d0[\3\2\2\2\u01d1\u01d2"+ - "\7e\2\2\u01d2\u01d3\7q\2\2\u01d3\u01d4\7f\2\2\u01d4\u01d5\7g\2\2\u01d5"+ - "\u01d6\7a\2\2\u01d6\u01d7\7u\2\2\u01d7\u01d8\7g\2\2\u01d8\u01d9\7i\2\2"+ - "\u01d9]\3\2\2\2\u01da\u01db\7f\2\2\u01db\u01dc\7c\2\2\u01dc\u01dd\7v\2"+ - "\2\u01dd\u01de\7c\2\2\u01de\u01df\7a\2\2\u01df\u01e0\7u\2\2\u01e0\u01e1"+ - "\7g\2\2\u01e1\u01e2\7i\2\2\u01e2_\3\2\2\2\u01e3\u01e4\7g\2\2\u01e4\u01e5"+ - "\7p\2\2\u01e5\u01e6\7e\2\2\u01e6\u01e7\7q\2\2\u01e7\u01e8\7f\2\2\u01e8"+ - "\u01e9\7k\2\2\u01e9\u01ea\7p\2\2\u01ea\u01eb\7i\2\2\u01eba\3\2\2\2\u01ec"+ - "\u01ed\7e\2\2\u01ed\u01ee\7q\2\2\u01ee\u01ef\7p\2\2\u01ef\u01f0\7u\2\2"+ - "\u01f0\u01f1\7v\2\2\u01f1c\3\2\2\2\u01f2\u01f3\7g\2\2\u01f3\u01f4\7z\2"+ - "\2\u01f4\u01f5\7v\2\2\u01f5\u01f6\7g\2\2\u01f6\u01f7\7t\2\2\u01f7\u01f8"+ - "\7p\2\2\u01f8e\3\2\2\2\u01f9\u01fa\7g\2\2\u01fa\u01fb\7z\2\2\u01fb\u01fc"+ - "\7r\2\2\u01fc\u01fd\7q\2\2\u01fd\u01fe\7t\2\2\u01fe\u01ff\7v\2\2\u01ff"+ - "g\3\2\2\2\u0200\u0201\7c\2\2\u0201\u0202\7n\2\2\u0202\u0203\7k\2\2\u0203"+ - "\u0204\7i\2\2\u0204\u0205\7p\2\2\u0205i\3\2\2\2\u0206\u0207\7k\2\2\u0207"+ - "\u0208\7p\2\2\u0208\u0209\7n\2\2\u0209\u020a\7k\2\2\u020a\u020b\7p\2\2"+ - "\u020b\u020c\7g\2\2\u020ck\3\2\2\2\u020d\u020e\7x\2\2\u020e\u020f\7q\2"+ - "\2\u020f\u0210\7n\2\2\u0210\u0211\7c\2\2\u0211\u0212\7v\2\2\u0212\u0213"+ - "\7k\2\2\u0213\u0214\7n\2\2\u0214\u0215\7g\2\2\u0215m\3\2\2\2\u0216\u0217"+ - "\7k\2\2\u0217\u0218\7p\2\2\u0218\u0219\7v\2\2\u0219\u021a\7g\2\2\u021a"+ - "\u021b\7t\2\2\u021b\u021c\7t\2\2\u021c\u021d\7w\2\2\u021d\u021e\7r\2\2"+ - "\u021e\u021f\7v\2\2\u021fo\3\2\2\2\u0220\u0221\7t\2\2\u0221\u0222\7g\2"+ - "\2\u0222\u0223\7i\2\2\u0223\u0224\7k\2\2\u0224\u0225\7u\2\2\u0225\u0226"+ - "\7v\2\2\u0226\u0227\7g\2\2\u0227\u0228\7t\2\2\u0228q\3\2\2\2\u0229\u022a"+ - "\7a\2\2\u022a\u022b\7a\2\2\u022b\u022c\7c\2\2\u022c\u022d\7f\2\2\u022d"+ - "\u022e\7f\2\2\u022e\u022f\7t\2\2\u022f\u0230\7g\2\2\u0230\u0231\7u\2\2"+ - "\u0231\u0232\7u\2\2\u0232s\3\2\2\2\u0233\u0234\7a\2\2\u0234\u0235\7a\2"+ - "\2\u0235\u0236\7|\2\2\u0236\u0237\7r\2\2\u0237u\3\2\2\2\u0238\u0239\7"+ - "a\2\2\u0239\u023a\7a\2\2\u023a\u023b\7o\2\2\u023b\u023c\7g\2\2\u023c\u023d"+ - "\7o\2\2\u023dw\3\2\2\2\u023e\u023f\7a\2\2\u023f\u0240\7a\2\2\u0240\u0241"+ - "\7u\2\2\u0241\u0242\7u\2\2\u0242\u0243\7c\2\2\u0243y\3\2\2\2\u0244\u0245"+ - "\7a\2\2\u0245\u0246\7a\2\2\u0246\u0247\7o\2\2\u0247\u0248\7c\2\2\u0248"+ - "{\3\2\2\2\u0249\u024a\7e\2\2\u024a\u024b\7c\2\2\u024b\u024c\7n\2\2\u024c"+ - "\u024d\7n\2\2\u024d\u024e\7k\2\2\u024e\u024f\7p\2\2\u024f\u0250\7i\2\2"+ - "\u0250}\3\2\2\2\u0251\u0252\7a\2\2\u0252\u0253\7a\2\2\u0253\u0254\7u\2"+ - "\2\u0254\u0255\7v\2\2\u0255\u0256\7c\2\2\u0256\u0257\7e\2\2\u0257\u0258"+ - "\7m\2\2\u0258\u0259\7e\2\2\u0259\u025a\7c\2\2\u025a\u025b\7n\2\2\u025b"+ - "\u0266\7n\2\2\u025c\u025d\7a\2\2\u025d\u025e\7a\2\2\u025e\u025f\7r\2\2"+ - "\u025f\u0260\7j\2\2\u0260\u0261\7k\2\2\u0261\u0262\7e\2\2\u0262\u0263"+ - "\7c\2\2\u0263\u0264\7n\2\2\u0264\u0266\7n\2\2\u0265\u0251\3\2\2\2\u0265"+ - "\u025c\3\2\2\2\u0266\177\3\2\2\2\u0267\u0268\7x\2\2\u0268\u0269\7c\2\2"+ - "\u0269\u026a\7t\2\2\u026a\u026b\7a\2\2\u026b\u026c\7o\2\2\u026c\u026d"+ - "\7q\2\2\u026d\u026e\7f\2\2\u026e\u026f\7g\2\2\u026f\u0270\7n\2\2\u0270"+ - "\u0081\3\2\2\2\u0271\u0272\7k\2\2\u0272\u0273\7h\2\2\u0273\u0083\3\2\2"+ - "\2\u0274\u0275\7g\2\2\u0275\u0276\7n\2\2\u0276\u0277\7u\2\2\u0277\u0278"+ - "\7g\2\2\u0278\u0085\3\2\2\2\u0279\u027a\7y\2\2\u027a\u027b\7j\2\2\u027b"+ - "\u027c\7k\2\2\u027c\u027d\7n\2\2\u027d\u027e\7g\2\2\u027e\u0087\3\2\2"+ - "\2\u027f\u0280\7f\2\2\u0280\u0281\7q\2\2\u0281\u0089\3\2\2\2\u0282\u0283"+ - "\7h\2\2\u0283\u0284\7q\2\2\u0284\u0285\7t\2\2\u0285\u008b\3\2\2\2\u0286"+ - "\u0287\7u\2\2\u0287\u0288\7y\2\2\u0288\u0289\7k\2\2\u0289\u028a\7v\2\2"+ - "\u028a\u028b\7e\2\2\u028b\u028c\7j\2\2\u028c\u008d\3\2\2\2\u028d\u028e"+ - "\7t\2\2\u028e\u028f\7g\2\2\u028f\u0290\7v\2\2\u0290\u0291\7w\2\2\u0291"+ - "\u0292\7t\2\2\u0292\u0293\7p\2\2\u0293\u008f\3\2\2\2\u0294\u0295\7d\2"+ - "\2\u0295\u0296\7t\2\2\u0296\u0297\7g\2\2\u0297\u0298\7c\2\2\u0298\u0299"+ - "\7m\2\2\u0299\u0091\3\2\2\2\u029a\u029b\7e\2\2\u029b\u029c\7q\2\2\u029c"+ - "\u029d\7p\2\2\u029d\u029e\7v\2\2\u029e\u029f\7k\2\2\u029f\u02a0\7p\2\2"+ - "\u02a0\u02a1\7w\2\2\u02a1\u02a2\7g\2\2\u02a2\u0093\3\2\2\2\u02a3\u02a4"+ - "\7c\2\2\u02a4\u02a5\7u\2\2\u02a5\u02a6\7o\2\2\u02a6\u02a7\3\2\2\2\u02a7"+ - "\u02a8\bJ\4\2\u02a8\u0095\3\2\2\2\u02a9\u02aa\7f\2\2\u02aa\u02ab\7g\2"+ - "\2\u02ab\u02ac\7h\2\2\u02ac\u02ad\7c\2\2\u02ad\u02ae\7w\2\2\u02ae\u02af"+ - "\7n\2\2\u02af\u02b0\7v\2\2\u02b0\u0097\3\2\2\2\u02b1\u02b2\7e\2\2\u02b2"+ - "\u02b3\7c\2\2\u02b3\u02b4\7u\2\2\u02b4\u02b5\7g\2\2\u02b5\u0099\3\2\2"+ - "\2\u02b6\u02b7\7u\2\2\u02b7\u02b8\7v\2\2\u02b8\u02b9\7t\2\2\u02b9\u02ba"+ - "\7w\2\2\u02ba\u02bb\7e\2\2\u02bb\u02bc\7v\2\2\u02bc\u009b\3\2\2\2\u02bd"+ - "\u02be\7g\2\2\u02be\u02bf\7p\2\2\u02bf\u02c0\7w\2\2\u02c0\u02c1\7o\2\2"+ - "\u02c1\u009d\3\2\2\2\u02c2\u02c3\7u\2\2\u02c3\u02c4\7k\2\2\u02c4\u02c5"+ - "\7|\2\2\u02c5\u02c6\7g\2\2\u02c6\u02c7\7q\2\2\u02c7\u02c8\7h\2\2\u02c8"+ - "\u009f\3\2\2\2\u02c9\u02ca\7v\2\2\u02ca\u02cb\7{\2\2\u02cb\u02cc\7r\2"+ - "\2\u02cc\u02cd\7g\2\2\u02cd\u02ce\7k\2\2\u02ce\u02cf\7f\2\2\u02cf\u00a1"+ - "\3\2\2\2\u02d0\u02d1\7m\2\2\u02d1\u02d2\7k\2\2\u02d2\u02d3\7e\2\2\u02d3"+ - "\u02d4\7m\2\2\u02d4\u02d5\7c\2\2\u02d5\u02d6\7u\2\2\u02d6\u02d7\7o\2\2"+ - "\u02d7\u00a3\3\2\2\2\u02d8\u02d9\7t\2\2\u02d9\u02da\7g\2\2\u02da\u02db"+ - "\7u\2\2\u02db\u02dc\7q\2\2\u02dc\u02dd\7w\2\2\u02dd\u02de\7t\2\2\u02de"+ - "\u02df\7e\2\2\u02df\u02e0\7g\2\2\u02e0\u00a5\3\2\2\2\u02e1\u02e2\7w\2"+ - "\2\u02e2\u02e3\7u\2\2\u02e3\u02e4\7g\2\2\u02e4\u02e5\7u\2\2\u02e5\u00a7"+ - "\3\2\2\2\u02e6\u02e7\7e\2\2\u02e7\u02e8\7n\2\2\u02e8\u02e9\7q\2\2\u02e9"+ - "\u02ea\7d\2\2\u02ea\u02eb\7d\2\2\u02eb\u02ec\7g\2\2\u02ec\u02ed\7t\2\2"+ - "\u02ed\u02ee\7u\2\2\u02ee\u00a9\3\2\2\2\u02ef\u02f0\7d\2\2\u02f0\u02f1"+ - "\7{\2\2\u02f1\u02f2\7v\2\2\u02f2\u02f3\7g\2\2\u02f3\u02f4\7u\2\2\u02f4"+ - "\u00ab\3\2\2\2\u02f5\u02f6\7e\2\2\u02f6\u02f7\7{\2\2\u02f7\u02f8\7e\2"+ - "\2\u02f8\u02f9\7n\2\2\u02f9\u02fa\7g\2\2\u02fa\u02fb\7u\2\2\u02fb\u00ad"+ - "\3\2\2\2\u02fc\u02fd\7#\2\2\u02fd\u00af\3\2\2\2\u02fe\u02ff\7u\2\2\u02ff"+ - "\u0300\7k\2\2\u0300\u0301\7i\2\2\u0301\u0302\7p\2\2\u0302\u0303\7g\2\2"+ - "\u0303\u030d\7f\2\2\u0304\u0305\7w\2\2\u0305\u0306\7p\2\2\u0306\u0307"+ - "\7u\2\2\u0307\u0308\7k\2\2\u0308\u0309\7i\2\2\u0309\u030a\7p\2\2\u030a"+ - "\u030b\7g\2\2\u030b\u030d\7f\2\2\u030c\u02fe\3\2\2\2\u030c\u0304\3\2\2"+ - "\2\u030d\u00b1\3\2\2\2\u030e\u030f\7d\2\2\u030f\u0310\7{\2\2\u0310\u0311"+ - "\7v\2\2\u0311\u0334\7g\2\2\u0312\u0313\7y\2\2\u0313\u0314\7q\2\2\u0314"+ - "\u0315\7t\2\2\u0315\u0334\7f\2\2\u0316\u0317\7f\2\2\u0317\u0318\7y\2\2"+ - "\u0318\u0319\7q\2\2\u0319\u031a\7t\2\2\u031a\u0334\7f\2\2\u031b\u031c"+ - "\7d\2\2\u031c\u031d\7q\2\2\u031d\u031e\7q\2\2\u031e\u0334\7n\2\2\u031f"+ - "\u0320\7e\2\2\u0320\u0321\7j\2\2\u0321\u0322\7c\2\2\u0322\u0334\7t\2\2"+ - "\u0323\u0324\7u\2\2\u0324\u0325\7j\2\2\u0325\u0326\7q\2\2\u0326\u0327"+ - "\7t\2\2\u0327\u0334\7v\2\2\u0328\u0329\7k\2\2\u0329\u032a\7p\2\2\u032a"+ - "\u0334\7v\2\2\u032b\u032c\7n\2\2\u032c\u032d\7q\2\2\u032d\u032e\7p\2\2"+ - "\u032e\u0334\7i\2\2\u032f\u0330\7x\2\2\u0330\u0331\7q\2\2\u0331\u0332"+ - "\7k\2\2\u0332\u0334\7f\2\2\u0333\u030e\3\2\2\2\u0333\u0312\3\2\2\2\u0333"+ - "\u0316\3\2\2\2\u0333\u031b\3\2\2\2\u0333\u031f\3\2\2\2\u0333\u0323\3\2"+ - "\2\2\u0333\u0328\3\2\2\2\u0333\u032b\3\2\2\2\u0333\u032f\3\2\2\2\u0334"+ - "\u00b3\3\2\2\2\u0335\u0336\7v\2\2\u0336\u0337\7t\2\2\u0337\u0338\7w\2"+ - "\2\u0338\u033f\7g\2\2\u0339\u033a\7h\2\2\u033a\u033b\7c\2\2\u033b\u033c"+ - "\7n\2\2\u033c\u033d\7u\2\2\u033d\u033f\7g\2\2\u033e\u0335\3\2\2\2\u033e"+ - "\u0339\3\2\2\2\u033f\u00b5\3\2\2\2\u0340\u0341\7}\2\2\u0341\u0342\7}\2"+ - "\2\u0342\u0346\3\2\2\2\u0343\u0345\13\2\2\2\u0344\u0343\3\2\2\2\u0345"+ - "\u0348\3\2\2\2\u0346\u0347\3\2\2\2\u0346\u0344\3\2\2\2\u0347\u0349\3\2"+ - "\2\2\u0348\u0346\3\2\2\2\u0349\u034a\7\177\2\2\u034a\u034b\7\177\2\2\u034b"+ - "\u00b7\3\2\2\2\u034c\u0352\7$\2\2\u034d\u034e\7^\2\2\u034e\u0351\7$\2"+ - "\2\u034f\u0351\n\2\2\2\u0350\u034d\3\2\2\2\u0350\u034f\3\2\2\2\u0351\u0354"+ - "\3\2\2\2\u0352\u0350\3\2\2\2\u0352\u0353\3\2\2\2\u0353\u0355\3\2\2\2\u0354"+ - "\u0352\3\2\2\2\u0355\u0357\7$\2\2\u0356\u0358\t\3\2\2\u0357\u0356\3\2"+ - "\2\2\u0357\u0358\3\2\2\2\u0358\u035d\3\2\2\2\u0359\u035b\t\4\2\2\u035a"+ - "\u035c\t\5\2\2\u035b\u035a\3\2\2\2\u035b\u035c\3\2\2\2\u035c\u035e\3\2"+ - "\2\2\u035d\u0359\3\2\2\2\u035d\u035e\3\2\2\2\u035e\u0360\3\2\2\2\u035f"+ - "\u0361\t\3\2\2\u0360\u035f\3\2\2\2\u0360\u0361\3\2\2\2\u0361\u0362\3\2"+ - "\2\2\u0362\u0363\b\\\5\2\u0363\u00b9\3\2\2\2\u0364\u0368\7)\2\2\u0365"+ - "\u0366\7^\2\2\u0366\u0369\t\6\2\2\u0367\u0369\n\7\2\2\u0368\u0365\3\2"+ - "\2\2\u0368\u0367\3\2\2\2\u0369\u036a\3\2\2\2\u036a\u036b\7)\2\2\u036b"+ - "\u00bb\3\2\2\2\u036c\u036f\5\u00be_\2\u036d\u036f\5\u00c6c\2\u036e\u036c"+ - "\3\2\2\2\u036e\u036d\3\2\2\2\u036f\u00bd\3\2\2\2\u0370\u0374\5\u00c0`"+ - "\2\u0371\u0374\5\u00c2a\2\u0372\u0374\5\u00c4b\2\u0373\u0370\3\2\2\2\u0373"+ - "\u0371\3\2\2\2\u0373\u0372\3\2\2\2\u0374\u00bf\3\2\2\2\u0375\u037b\7\'"+ - "\2\2\u0376\u0377\7\62\2\2\u0377\u037b\7d\2\2\u0378\u0379\7\62\2\2\u0379"+ - "\u037b\7D\2\2\u037a\u0375\3\2\2\2\u037a\u0376\3\2\2\2\u037a\u0378\3\2"+ - "\2\2\u037b\u037f\3\2\2\2\u037c\u037e\5\u00ceg\2\u037d\u037c\3\2\2\2\u037e"+ - "\u0381\3\2\2\2\u037f\u037d\3\2\2\2\u037f\u0380\3\2\2\2\u0380\u0382\3\2"+ - "\2\2\u0381\u037f\3\2\2\2\u0382\u0384\7\60\2\2\u0383\u0385\5\u00ceg\2\u0384"+ - "\u0383\3\2\2\2\u0385\u0386\3\2\2\2\u0386\u0384\3\2\2\2\u0386\u0387\3\2"+ - "\2\2\u0387\u00c1\3\2\2\2\u0388\u038a\5\u00d0h\2\u0389\u0388\3\2\2\2\u038a"+ - "\u038d\3\2\2\2\u038b\u0389\3\2\2\2\u038b\u038c\3\2\2\2\u038c\u038e\3\2"+ - "\2\2\u038d\u038b\3\2\2\2\u038e\u0390\7\60\2\2\u038f\u0391\5\u00d0h\2\u0390"+ - "\u038f\3\2\2\2\u0391\u0392\3\2\2\2\u0392\u0390\3\2\2\2\u0392\u0393\3\2"+ - "\2\2\u0393\u00c3\3\2\2\2\u0394\u039a\7&\2\2\u0395\u0396\7\62\2\2\u0396"+ - "\u039a\7z\2\2\u0397\u0398\7\62\2\2\u0398\u039a\7Z\2\2\u0399\u0394\3\2"+ - "\2\2\u0399\u0395\3\2\2\2\u0399\u0397\3\2\2\2\u039a\u039e\3\2\2\2\u039b"+ - "\u039d\5\u00d2i\2\u039c\u039b\3\2\2\2\u039d\u03a0\3\2\2\2\u039e\u039c"+ - "\3\2\2\2\u039e\u039f\3\2\2\2\u039f\u03a1\3\2\2\2\u03a0\u039e\3\2\2\2\u03a1"+ - "\u03a3\7\60\2\2\u03a2\u03a4\5\u00d2i\2\u03a3\u03a2\3\2\2\2\u03a4\u03a5"+ - "\3\2\2\2\u03a5\u03a3\3\2\2\2\u03a5\u03a6\3\2\2\2\u03a6\u00c5\3\2\2\2\u03a7"+ - "\u03ab\5\u00cae\2\u03a8\u03ab\5\u00ccf\2\u03a9\u03ab\5\u00c8d\2\u03aa"+ - "\u03a7\3\2\2\2\u03aa\u03a8\3\2\2\2\u03aa\u03a9\3\2\2\2\u03ab\u03af\3\2"+ - "\2\2\u03ac\u03ad\t\b\2\2\u03ad\u03b0\t\t\2\2\u03ae\u03b0\7n\2\2\u03af"+ - "\u03ac\3\2\2\2\u03af\u03ae\3\2\2\2\u03af\u03b0\3\2\2\2\u03b0\u00c7\3\2"+ - "\2\2\u03b1\u03b2\7\62\2\2\u03b2\u03b4\t\n\2\2\u03b3\u03b5\5\u00ceg\2\u03b4"+ - "\u03b3\3\2\2\2\u03b5\u03b6\3\2\2\2\u03b6\u03b4\3\2\2\2\u03b6\u03b7\3\2"+ - "\2\2\u03b7\u03bf\3\2\2\2\u03b8\u03ba\7\'\2\2\u03b9\u03bb\5\u00ceg\2\u03ba"+ - "\u03b9\3\2\2\2\u03bb\u03bc\3\2\2\2\u03bc\u03ba\3\2\2\2\u03bc\u03bd\3\2"+ - "\2\2\u03bd\u03bf\3\2\2\2\u03be\u03b1\3\2\2\2\u03be\u03b8\3\2\2\2\u03bf"+ - "\u00c9\3\2\2\2\u03c0\u03c2\5\u00d0h\2\u03c1\u03c0\3\2\2\2\u03c2\u03c3"+ - "\3\2\2\2\u03c3\u03c1\3\2\2\2\u03c3\u03c4\3\2\2\2\u03c4\u00cb\3\2\2\2\u03c5"+ - "\u03cb\7&\2\2\u03c6\u03c7\7\62\2\2\u03c7\u03cb\7z\2\2\u03c8\u03c9\7\62"+ - "\2\2\u03c9\u03cb\7Z\2\2\u03ca\u03c5\3\2\2\2\u03ca\u03c6\3\2\2\2\u03ca"+ - "\u03c8\3\2\2\2\u03cb\u03cd\3\2\2\2\u03cc\u03ce\5\u00d2i\2\u03cd\u03cc"+ - "\3\2\2\2\u03ce\u03cf\3\2\2\2\u03cf\u03cd\3\2\2\2\u03cf\u03d0\3\2\2\2\u03d0"+ - "\u00cd\3\2\2\2\u03d1\u03d2\t\13\2\2\u03d2\u00cf\3\2\2\2\u03d3\u03d4\t"+ - "\f\2\2\u03d4\u00d1\3\2\2\2\u03d5\u03d6\t\r\2\2\u03d6\u00d3\3\2\2\2\u03d7"+ - "\u03db\5\u00d6k\2\u03d8\u03da\5\u00d8l\2\u03d9\u03d8\3\2\2\2\u03da\u03dd"+ - "\3\2\2\2\u03db\u03d9\3\2\2\2\u03db\u03dc\3\2\2\2\u03dc\u03de\3\2\2\2\u03dd"+ - "\u03db\3\2\2\2\u03de\u03df\bj\6\2\u03df\u00d5\3\2\2\2\u03e0\u03e1\t\16"+ - "\2\2\u03e1\u00d7\3\2\2\2\u03e2\u03e3\t\17\2\2\u03e3\u00d9\3\2\2\2\u03e4"+ - "\u03e6\t\20\2\2\u03e5\u03e4\3\2\2\2\u03e6\u03e7\3\2\2\2\u03e7\u03e5\3"+ - "\2\2\2\u03e7\u03e8\3\2\2\2\u03e8\u03e9\3\2\2\2\u03e9\u03ea\bm\7\2\u03ea"+ - "\u00db\3\2\2\2\u03eb\u03ec\7\61\2\2\u03ec\u03ed\7\61\2\2\u03ed\u03f1\3"+ - "\2\2\2\u03ee\u03f0\n\21\2\2\u03ef\u03ee\3\2\2\2\u03f0\u03f3\3\2\2\2\u03f1"+ - "\u03ef\3\2\2\2\u03f1\u03f2\3\2\2\2\u03f2\u03f4\3\2\2\2\u03f3\u03f1\3\2"+ - "\2\2\u03f4\u03f5\bn\b\2\u03f5\u00dd\3\2\2\2\u03f6\u03f7\7\61\2\2\u03f7"+ - "\u03f8\7,\2\2\u03f8\u03fc\3\2\2\2\u03f9\u03fb\13\2\2\2\u03fa\u03f9\3\2"+ - "\2\2\u03fb\u03fe\3\2\2\2\u03fc\u03fd\3\2\2\2\u03fc\u03fa\3\2\2\2\u03fd"+ - "\u03ff\3\2\2\2\u03fe\u03fc\3\2\2\2\u03ff\u0400\7,\2\2\u0400\u0401\7\61"+ - "\2\2\u0401\u0402\3\2\2\2\u0402\u0403\bo\b\2\u0403\u00df\3\2\2\2\u0404"+ - "\u0405\7\60\2\2\u0405\u0406\7d\2\2\u0406\u0407\7{\2\2\u0407\u0408\7v\2"+ - "\2\u0408\u0409\7g\2\2\u0409\u00e1\3\2\2\2\u040a\u040b\7d\2\2\u040b\u040c"+ - "\7t\2\2\u040c\u04e9\7m\2\2\u040d\u040e\7q\2\2\u040e\u040f\7t\2\2\u040f"+ - "\u04e9\7c\2\2\u0410\u0411\7m\2\2\u0411\u0412\7k\2\2\u0412\u04e9\7n\2\2"+ - "\u0413\u0414\7u\2\2\u0414\u0415\7n\2\2\u0415\u04e9\7q\2\2\u0416\u0417"+ - "\7p\2\2\u0417\u0418\7q\2\2\u0418\u04e9\7r\2\2\u0419\u041a\7c\2\2\u041a"+ - "\u041b\7u\2\2\u041b\u04e9\7n\2\2\u041c\u041d\7r\2\2\u041d\u041e\7j\2\2"+ - "\u041e\u04e9\7r\2\2\u041f\u0420\7c\2\2\u0420\u0421\7p\2\2\u0421\u04e9"+ - "\7e\2\2\u0422\u0423\7d\2\2\u0423\u0424\7r\2\2\u0424\u04e9\7n\2\2\u0425"+ - "\u0426\7e\2\2\u0426\u0427\7n\2\2\u0427\u04e9\7e\2\2\u0428\u0429\7l\2\2"+ - "\u0429\u042a\7u\2\2\u042a\u04e9\7t\2\2\u042b\u042c\7c\2\2\u042c\u042d"+ - "\7p\2\2\u042d\u04e9\7f\2\2\u042e\u042f\7t\2\2\u042f\u0430\7n\2\2\u0430"+ - "\u04e9\7c\2\2\u0431\u0432\7d\2\2\u0432\u0433\7k\2\2\u0433\u04e9\7v\2\2"+ - "\u0434\u0435\7t\2\2\u0435\u0436\7q\2\2\u0436\u04e9\7n\2\2\u0437\u0438"+ - "\7r\2\2\u0438\u0439\7n\2\2\u0439\u04e9\7c\2\2\u043a\u043b\7r\2\2\u043b"+ - "\u043c\7n\2\2\u043c\u04e9\7r\2\2\u043d\u043e\7d\2\2\u043e\u043f\7o\2\2"+ - "\u043f\u04e9\7k\2\2\u0440\u0441\7u\2\2\u0441\u0442\7g\2\2\u0442\u04e9"+ - "\7e\2\2\u0443\u0444\7t\2\2\u0444\u0445\7v\2\2\u0445\u04e9\7k\2\2\u0446"+ - "\u0447\7g\2\2\u0447\u0448\7q\2\2\u0448\u04e9\7t\2\2\u0449\u044a\7u\2\2"+ - "\u044a\u044b\7t\2\2\u044b\u04e9\7g\2\2\u044c\u044d\7n\2\2\u044d\u044e"+ - "\7u\2\2\u044e\u04e9\7t\2\2\u044f\u0450\7r\2\2\u0450\u0451\7j\2\2\u0451"+ - "\u04e9\7c\2\2\u0452\u0453\7c\2\2\u0453\u0454\7n\2\2\u0454\u04e9\7t\2\2"+ - "\u0455\u0456\7l\2\2\u0456\u0457\7o\2\2\u0457\u04e9\7r\2\2\u0458\u0459"+ - "\7d\2\2\u0459\u045a\7x\2\2\u045a\u04e9\7e\2\2\u045b\u045c\7e\2\2\u045c"+ - "\u045d\7n\2\2\u045d\u04e9\7k\2\2\u045e\u045f\7t\2\2\u045f\u0460\7v\2\2"+ - "\u0460\u04e9\7u\2\2\u0461\u0462\7c\2\2\u0462\u0463\7f\2\2\u0463\u04e9"+ - "\7e\2\2\u0464\u0465\7t\2\2\u0465\u0466\7t\2\2\u0466\u04e9\7c\2\2\u0467"+ - "\u0468\7d\2\2\u0468\u0469\7x\2\2\u0469\u04e9\7u\2\2\u046a\u046b\7u\2\2"+ - "\u046b\u046c\7g\2\2\u046c\u04e9\7k\2\2\u046d\u046e\7u\2\2\u046e\u046f"+ - "\7c\2\2\u046f\u04e9\7z\2\2\u0470\u0471\7u\2\2\u0471\u0472\7v\2\2\u0472"+ - "\u04e9\7{\2\2\u0473\u0474\7u\2\2\u0474\u0475\7v\2\2\u0475\u04e9\7c\2\2"+ - "\u0476\u0477\7u\2\2\u0477\u0478\7v\2\2\u0478\u04e9\7z\2\2\u0479\u047a"+ - "\7f\2\2\u047a\u047b\7g\2\2\u047b\u04e9\7{\2\2\u047c\u047d\7v\2\2\u047d"+ - "\u047e\7z\2\2\u047e\u04e9\7c\2\2\u047f\u0480\7z\2\2\u0480\u0481\7c\2\2"+ - "\u0481\u04e9\7c\2\2\u0482\u0483\7d\2\2\u0483\u0484\7e\2\2\u0484\u04e9"+ - "\7e\2\2\u0485\u0486\7c\2\2\u0486\u0487\7j\2\2\u0487\u04e9\7z\2\2\u0488"+ - "\u0489\7v\2\2\u0489\u048a\7{\2\2\u048a\u04e9\7c\2\2\u048b\u048c\7v\2\2"+ - "\u048c\u048d\7z\2\2\u048d\u04e9\7u\2\2\u048e\u048f\7v\2\2\u048f\u0490"+ - "\7c\2\2\u0490\u04e9\7u\2\2\u0491\u0492\7u\2\2\u0492\u0493\7j\2\2\u0493"+ - "\u04e9\7{\2\2\u0494\u0495\7u\2\2\u0495\u0496\7j\2\2\u0496\u04e9\7z\2\2"+ - "\u0497\u0498\7n\2\2\u0498\u0499\7f\2\2\u0499\u04e9\7{\2\2\u049a\u049b"+ - "\7n\2\2\u049b\u049c\7f\2\2\u049c\u04e9\7c\2\2\u049d\u049e\7n\2\2\u049e"+ - "\u049f\7f\2\2\u049f\u04e9\7z\2\2\u04a0\u04a1\7n\2\2\u04a1\u04a2\7c\2\2"+ - "\u04a2\u04e9\7z\2\2\u04a3\u04a4\7v\2\2\u04a4\u04a5\7c\2\2\u04a5\u04e9"+ - "\7{\2\2\u04a6\u04a7\7v\2\2\u04a7\u04a8\7c\2\2\u04a8\u04e9\7z\2\2\u04a9"+ - "\u04aa\7d\2\2\u04aa\u04ab\7e\2\2\u04ab\u04e9\7u\2\2\u04ac\u04ad\7e\2\2"+ - "\u04ad\u04ae\7n\2\2\u04ae\u04e9\7x\2\2\u04af\u04b0\7v\2\2\u04b0\u04b1"+ - "\7u\2\2\u04b1\u04e9\7z\2\2\u04b2\u04b3\7n\2\2\u04b3\u04b4\7c\2\2\u04b4"+ - "\u04e9\7u\2\2\u04b5\u04b6\7e\2\2\u04b6\u04b7\7r\2\2\u04b7\u04e9\7{\2\2"+ - "\u04b8\u04b9\7e\2\2\u04b9\u04ba\7o\2\2\u04ba\u04e9\7r\2\2\u04bb\u04bc"+ - "\7e\2\2\u04bc\u04bd\7r\2\2\u04bd\u04e9\7z\2\2\u04be\u04bf\7f\2\2\u04bf"+ - "\u04c0\7e\2\2\u04c0\u04e9\7r\2\2\u04c1\u04c2\7f\2\2\u04c2\u04c3\7g\2\2"+ - "\u04c3\u04e9\7e\2\2\u04c4\u04c5\7k\2\2\u04c5\u04c6\7p\2\2\u04c6\u04e9"+ - "\7e\2\2\u04c7\u04c8\7c\2\2\u04c8\u04c9\7z\2\2\u04c9\u04e9\7u\2\2\u04ca"+ - "\u04cb\7d\2\2\u04cb\u04cc\7p\2\2\u04cc\u04e9\7g\2\2\u04cd\u04ce\7e\2\2"+ - "\u04ce\u04cf\7n\2\2\u04cf\u04e9\7f\2\2\u04d0\u04d1\7u\2\2\u04d1\u04d2"+ - "\7d\2\2\u04d2\u04e9\7e\2\2\u04d3\u04d4\7k\2\2\u04d4\u04d5\7u\2\2\u04d5"+ - "\u04e9\7e\2\2\u04d6\u04d7\7k\2\2\u04d7\u04d8\7p\2\2\u04d8\u04e9\7z\2\2"+ - "\u04d9\u04da\7d\2\2\u04da\u04db\7g\2\2\u04db\u04e9\7s\2\2\u04dc\u04dd"+ - "\7u\2\2\u04dd\u04de\7g\2\2\u04de\u04e9\7f\2\2\u04df\u04e0\7f\2\2\u04e0"+ - "\u04e1\7g\2\2\u04e1\u04e9\7z\2\2\u04e2\u04e3\7k\2\2\u04e3\u04e4\7p\2\2"+ - "\u04e4\u04e9\7{\2\2\u04e5\u04e6\7t\2\2\u04e6\u04e7\7q\2\2\u04e7\u04e9"+ - "\7t\2\2\u04e8\u040a\3\2\2\2\u04e8\u040d\3\2\2\2\u04e8\u0410\3\2\2\2\u04e8"+ - "\u0413\3\2\2\2\u04e8\u0416\3\2\2\2\u04e8\u0419\3\2\2\2\u04e8\u041c\3\2"+ - "\2\2\u04e8\u041f\3\2\2\2\u04e8\u0422\3\2\2\2\u04e8\u0425\3\2\2\2\u04e8"+ - "\u0428\3\2\2\2\u04e8\u042b\3\2\2\2\u04e8\u042e\3\2\2\2\u04e8\u0431\3\2"+ - "\2\2\u04e8\u0434\3\2\2\2\u04e8\u0437\3\2\2\2\u04e8\u043a\3\2\2\2\u04e8"+ - "\u043d\3\2\2\2\u04e8\u0440\3\2\2\2\u04e8\u0443\3\2\2\2\u04e8\u0446\3\2"+ - "\2\2\u04e8\u0449\3\2\2\2\u04e8\u044c\3\2\2\2\u04e8\u044f\3\2\2\2\u04e8"+ - "\u0452\3\2\2\2\u04e8\u0455\3\2\2\2\u04e8\u0458\3\2\2\2\u04e8\u045b\3\2"+ - "\2\2\u04e8\u045e\3\2\2\2\u04e8\u0461\3\2\2\2\u04e8\u0464\3\2\2\2\u04e8"+ - "\u0467\3\2\2\2\u04e8\u046a\3\2\2\2\u04e8\u046d\3\2\2\2\u04e8\u0470\3\2"+ - "\2\2\u04e8\u0473\3\2\2\2\u04e8\u0476\3\2\2\2\u04e8\u0479\3\2\2\2\u04e8"+ - "\u047c\3\2\2\2\u04e8\u047f\3\2\2\2\u04e8\u0482\3\2\2\2\u04e8\u0485\3\2"+ - "\2\2\u04e8\u0488\3\2\2\2\u04e8\u048b\3\2\2\2\u04e8\u048e\3\2\2\2\u04e8"+ - "\u0491\3\2\2\2\u04e8\u0494\3\2\2\2\u04e8\u0497\3\2\2\2\u04e8\u049a\3\2"+ - "\2\2\u04e8\u049d\3\2\2\2\u04e8\u04a0\3\2\2\2\u04e8\u04a3\3\2\2\2\u04e8"+ - "\u04a6\3\2\2\2\u04e8\u04a9\3\2\2\2\u04e8\u04ac\3\2\2\2\u04e8\u04af\3\2"+ - "\2\2\u04e8\u04b2\3\2\2\2\u04e8\u04b5\3\2\2\2\u04e8\u04b8\3\2\2\2\u04e8"+ - "\u04bb\3\2\2\2\u04e8\u04be\3\2\2\2\u04e8\u04c1\3\2\2\2\u04e8\u04c4\3\2"+ - "\2\2\u04e8\u04c7\3\2\2\2\u04e8\u04ca\3\2\2\2\u04e8\u04cd\3\2\2\2\u04e8"+ - "\u04d0\3\2\2\2\u04e8\u04d3\3\2\2\2\u04e8\u04d6\3\2\2\2\u04e8\u04d9\3\2"+ - "\2\2\u04e8\u04dc\3\2\2\2\u04e8\u04df\3\2\2\2\u04e8\u04e2\3\2\2\2\u04e8"+ - "\u04e5\3\2\2\2\u04e9\u00e3\3\2\2\2\u04ea\u04eb\7%\2\2\u04eb\u00e5\3\2"+ - "\2\2\u04ec\u04ed\7<\2\2\u04ed\u00e7\3\2\2\2\u04ee\u04ef\7.\2\2\u04ef\u00e9"+ - "\3\2\2\2\u04f0\u04f1\7*\2\2\u04f1\u00eb\3\2\2\2\u04f2\u04f3\7+\2\2\u04f3"+ - "\u00ed\3\2\2\2\u04f4\u04f5\7]\2\2\u04f5\u00ef\3\2\2\2\u04f6\u04f7\7_\2"+ - "\2\u04f7\u00f1\3\2\2\2\u04f8\u04f9\7\60\2\2\u04f9\u00f3\3\2\2\2\u04fa"+ - "\u04fb\7>\2\2\u04fb\u04fc\7>\2\2\u04fc\u00f5\3\2\2\2\u04fd\u04fe\7@\2"+ - "\2\u04fe\u04ff\7@\2\2\u04ff\u00f7\3\2\2\2\u0500\u0501\7-\2\2\u0501\u00f9"+ - "\3\2\2\2\u0502\u0503\7/\2\2\u0503\u00fb\3\2\2\2\u0504\u0505\7>\2\2\u0505"+ - "\u00fd\3\2\2\2\u0506\u0507\7@\2\2\u0507\u00ff\3\2\2\2\u0508\u0509\7,\2"+ - "\2\u0509\u0101\3\2\2\2\u050a\u050b\7\61\2\2\u050b\u0103\3\2\2\2\u050c"+ - "\u050d\7}\2\2\u050d\u050e\b\u0082\t\2\u050e\u0105\3\2\2\2\u050f\u0510"+ - "\7\177\2\2\u0510\u0511\b\u0083\n\2\u0511\u0107\3\2\2\2\u0512\u0515\5\u010a"+ - "\u0085\2\u0513\u0515\5\u0112\u0089\2\u0514\u0512\3\2\2\2\u0514\u0513\3"+ - "\2\2\2\u0515\u0109\3\2\2\2\u0516\u051a\5\u010c\u0086\2\u0517\u051a\5\u010e"+ - "\u0087\2\u0518\u051a\5\u0110\u0088\2\u0519\u0516\3\2\2\2\u0519\u0517\3"+ - "\2\2\2\u0519\u0518\3\2\2\2\u051a\u010b\3\2\2\2\u051b\u051f\7\'\2\2\u051c"+ - "\u051e\5\u011a\u008d\2\u051d\u051c\3\2\2\2\u051e\u0521\3\2\2\2\u051f\u051d"+ - "\3\2\2\2\u051f\u0520\3\2\2\2\u0520\u0522\3\2\2\2\u0521\u051f\3\2\2\2\u0522"+ - "\u0524\7\60\2\2\u0523\u0525\5\u011a\u008d\2\u0524\u0523\3\2\2\2\u0525"+ - "\u0526\3\2\2\2\u0526\u0524\3\2\2\2\u0526\u0527\3\2\2\2\u0527\u010d\3\2"+ - "\2\2\u0528\u052a\5\u011c\u008e\2\u0529\u0528\3\2\2\2\u052a\u052d\3\2\2"+ - "\2\u052b\u0529\3\2\2\2\u052b\u052c\3\2\2\2\u052c\u052e\3\2\2\2\u052d\u052b"+ - "\3\2\2\2\u052e\u0530\7\60\2\2\u052f\u0531\5\u011c\u008e\2\u0530\u052f"+ - "\3\2\2\2\u0531\u0532\3\2\2\2\u0532\u0530\3\2\2\2\u0532\u0533\3\2\2\2\u0533"+ - "\u010f\3\2\2\2\u0534\u0538\7&\2\2\u0535\u0537\5\u011e\u008f\2\u0536\u0535"+ - "\3\2\2\2\u0537\u053a\3\2\2\2\u0538\u0536\3\2\2\2\u0538\u0539\3\2\2\2\u0539"+ - "\u053b\3\2\2\2\u053a\u0538\3\2\2\2\u053b\u053d\7\60\2\2\u053c\u053e\5"+ - "\u011e\u008f\2\u053d\u053c\3\2\2\2\u053e\u053f\3\2\2\2\u053f\u053d\3\2"+ - "\2\2\u053f\u0540\3\2\2\2\u0540\u0111\3\2\2\2\u0541\u0545\5\u0116\u008b"+ - "\2\u0542\u0545\5\u0118\u008c\2\u0543\u0545\5\u0114\u008a\2\u0544\u0541"+ - "\3\2\2\2\u0544\u0542\3\2\2\2\u0544\u0543\3\2\2\2\u0545\u0113\3\2\2\2\u0546"+ - "\u0548\7\'\2\2\u0547\u0549\5\u011a\u008d\2\u0548\u0547\3\2\2\2\u0549\u054a"+ - "\3\2\2\2\u054a\u0548\3\2\2\2\u054a\u054b\3\2\2\2\u054b\u0115\3\2\2\2\u054c"+ - "\u054e\5\u011c\u008e\2\u054d\u054c\3\2\2\2\u054e\u054f\3\2\2\2\u054f\u054d"+ - "\3\2\2\2\u054f\u0550\3\2\2\2\u0550\u0117\3\2\2\2\u0551\u0553\7&\2\2\u0552"+ - "\u0554\5\u011e\u008f\2\u0553\u0552\3\2\2\2\u0554\u0555\3\2\2\2\u0555\u0553"+ - "\3\2\2\2\u0555\u0556\3\2\2\2\u0556\u0119\3\2\2\2\u0557\u0558\t\13\2\2"+ - "\u0558\u011b\3\2\2\2\u0559\u055a\t\f\2\2\u055a\u011d\3\2\2\2\u055b\u055c"+ - "\t\r\2\2\u055c\u011f\3\2\2\2\u055d\u0561\7)\2\2\u055e\u055f\7^\2\2\u055f"+ - "\u0562\t\6\2\2\u0560\u0562\n\7\2\2\u0561\u055e\3\2\2\2\u0561\u0560\3\2"+ - "\2\2\u0562\u0563\3\2\2\2\u0563\u0564\7)\2\2\u0564\u0121\3\2\2\2\u0565"+ - "\u0567\5\u0124\u0092\2\u0566\u0568\t\22\2\2\u0567\u0566\3\2\2\2\u0568"+ - "\u0569\3\2\2\2\u0569\u0567\3\2\2\2\u0569\u056a\3\2\2\2\u056a\u0123\3\2"+ - "\2\2\u056b\u056f\7#\2\2\u056c\u056e\5\u012a\u0095\2\u056d\u056c\3\2\2"+ - "\2\u056e\u0571\3\2\2\2\u056f\u056d\3\2\2\2\u056f\u0570\3\2\2\2\u0570\u0125"+ - "\3\2\2\2\u0571\u056f\3\2\2\2\u0572\u0576\5\u0128\u0094\2\u0573\u0575\5"+ - "\u012a\u0095\2\u0574\u0573\3\2\2\2\u0575\u0578\3\2\2\2\u0576\u0574\3\2"+ - "\2\2\u0576\u0577\3\2\2\2\u0577\u0127\3\2\2\2\u0578\u0576\3\2\2\2\u0579"+ - "\u057a\t\16\2\2\u057a\u0129\3\2\2\2\u057b\u057c\t\17\2\2\u057c\u012b\3"+ - "\2\2\2\u057d\u057f\t\20\2\2\u057e\u057d\3\2\2\2\u057f\u0580\3\2\2\2\u0580"+ - "\u057e\3\2\2\2\u0580\u0581\3\2\2\2\u0581\u0582\3\2\2\2\u0582\u0583\b\u0096"+ - "\7\2\u0583\u012d\3\2\2\2\u0584\u0585\7\61\2\2\u0585\u0586\7\61\2\2\u0586"+ - "\u058a\3\2\2\2\u0587\u0589\n\21\2\2\u0588\u0587\3\2\2\2\u0589\u058c\3"+ - "\2\2\2\u058a\u0588\3\2\2\2\u058a\u058b\3\2\2\2\u058b\u058d\3\2\2\2\u058c"+ - "\u058a\3\2\2\2\u058d\u058e\b\u0097\b\2\u058e\u012f\3\2\2\2\u058f\u0590"+ - "\7\61\2\2\u0590\u0591\7,\2\2\u0591\u0595\3\2\2\2\u0592\u0594\13\2\2\2"+ - "\u0593\u0592\3\2\2\2\u0594\u0597\3\2\2\2\u0595\u0596\3\2\2\2\u0595\u0593"+ - "\3\2\2\2\u0596\u0598\3\2\2\2\u0597\u0595\3\2\2\2\u0598\u0599\7,\2\2\u0599"+ - "\u059a\7\61\2\2\u059a\u059b\3\2\2\2\u059b\u059c\b\u0098\b\2\u059c\u0131"+ - "\3\2\2\2;\2\3\u019b\u0265\u030c\u0333\u033e\u0346\u0350\u0352\u0357\u035b"+ - "\u035d\u0360\u0368\u036e\u0373\u037a\u037f\u0386\u038b\u0392\u0399\u039e"+ - "\u03a5\u03aa\u03af\u03b6\u03bc\u03be\u03c3\u03ca\u03cf\u03db\u03e7\u03f1"+ - "\u03fc\u04e8\u0514\u0519\u051f\u0526\u052b\u0532\u0538\u053f\u0544\u054a"+ - "\u054f\u0555\u0561\u0569\u056f\u0576\u0580\u058a\u0595\13\3\2\2\3&\3\3"+ - "J\4\3\\\5\3j\6\2\3\2\2\4\2\3\u0082\7\3\u0083\b"; + "\4\u0097\t\u0097\4\u0098\t\u0098\4\u0099\t\u0099\3\2\3\2\3\2\3\3\3\3\3"+ + "\4\3\4\3\5\3\5\3\6\3\6\3\7\3\7\3\b\3\b\3\t\3\t\3\n\3\n\3\13\3\13\3\13"+ + "\3\f\3\f\3\r\3\r\3\16\3\16\3\16\3\17\3\17\3\20\3\20\3\21\3\21\3\22\3\22"+ + "\3\23\3\23\3\24\3\24\3\24\3\25\3\25\3\25\3\26\3\26\3\27\3\27\3\30\3\30"+ + "\3\31\3\31\3\32\3\32\3\32\3\33\3\33\3\33\3\34\3\34\3\34\3\35\3\35\3\35"+ + "\3\36\3\36\3\37\3\37\3\37\3 \3 \3 \3!\3!\3\"\3\"\3\"\3#\3#\3#\3$\3$\3"+ + "%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\5%\u019e"+ + "\n%\3&\3&\3&\3&\3&\3&\3&\3&\3&\3\'\3\'\3\'\3\'\3\'\3\'\3\'\3\'\3(\3(\3"+ + "(\3(\3(\3(\3(\3(\3)\3)\3)\3)\3)\3)\3)\3)\3*\3*\3*\3+\3+\3+\3+\3+\3+\3"+ + "+\3,\3,\3,\3,\3,\3-\3-\3-\3-\3.\3.\3.\3.\3.\3.\3.\3.\3.\3/\3/\3/\3/\3"+ + "/\3/\3/\3/\3/\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\61\3\61\3"+ + "\61\3\61\3\61\3\61\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\63\3\63\3\63\3"+ + "\63\3\63\3\63\3\63\3\64\3\64\3\64\3\64\3\64\3\64\3\65\3\65\3\65\3\65\3"+ + "\65\3\65\3\65\3\66\3\66\3\66\3\66\3\66\3\66\3\66\3\66\3\66\3\67\3\67\3"+ + "\67\3\67\3\67\3\67\3\67\38\38\38\38\38\38\38\38\38\38\39\39\39\39\39\3"+ + "9\39\39\39\3:\3:\3:\3:\3:\3:\3:\3:\3:\3:\3;\3;\3;\3;\3;\3<\3<\3<\3<\3"+ + "<\3<\3=\3=\3=\3=\3=\3=\3>\3>\3>\3>\3>\3?\3?\3?\3?\3?\3?\3?\3?\3@\3@\3"+ + "@\3@\3@\3@\3@\3@\3@\3@\3@\3@\3@\3@\3@\3@\3@\3@\3@\3@\5@\u026f\n@\3A\3"+ + "A\3A\3A\3A\3A\3A\3A\3A\3A\3B\3B\3B\3C\3C\3C\3C\3C\3D\3D\3D\3D\3D\3D\3"+ + "E\3E\3E\3F\3F\3F\3F\3G\3G\3G\3G\3G\3G\3G\3H\3H\3H\3H\3H\3H\3H\3I\3I\3"+ + "I\3I\3I\3I\3J\3J\3J\3J\3J\3J\3J\3J\3J\3K\3K\3K\3K\3K\3K\3L\3L\3L\3L\3"+ + "L\3L\3L\3L\3M\3M\3M\3M\3M\3N\3N\3N\3N\3N\3N\3N\3O\3O\3O\3O\3O\3P\3P\3"+ + "P\3P\3P\3P\3P\3Q\3Q\3Q\3Q\3Q\3Q\3Q\3R\3R\3R\3R\3R\3R\3R\3R\3S\3S\3S\3"+ + "S\3S\3S\3S\3S\3S\3T\3T\3T\3T\3T\3U\3U\3U\3U\3U\3U\3U\3U\3U\3V\3V\3V\3"+ + "V\3V\3V\3W\3W\3W\3W\3W\3W\3W\3X\3X\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3"+ + "Y\3Y\3Y\5Y\u0316\nY\3Z\3Z\3Z\3Z\3Z\3Z\3Z\3Z\3Z\3Z\3Z\3Z\3Z\3Z\3Z\3Z\3"+ + "Z\3Z\3Z\3Z\3Z\3Z\3Z\3Z\3Z\3Z\3Z\3Z\3Z\3Z\3Z\3Z\3Z\3Z\3Z\3Z\3Z\5Z\u033d"+ + "\nZ\3[\3[\3[\3[\3[\3[\3[\3[\3[\5[\u0348\n[\3\\\3\\\3\\\3\\\7\\\u034e\n"+ + "\\\f\\\16\\\u0351\13\\\3\\\3\\\3\\\3]\3]\3]\3]\7]\u035a\n]\f]\16]\u035d"+ + "\13]\3]\3]\5]\u0361\n]\3]\3]\5]\u0365\n]\5]\u0367\n]\3]\5]\u036a\n]\3"+ + "]\3]\3^\3^\3^\3^\5^\u0372\n^\3^\3^\3_\3_\5_\u0378\n_\3`\3`\3`\5`\u037d"+ + "\n`\3a\3a\3a\3a\3a\5a\u0384\na\3a\7a\u0387\na\fa\16a\u038a\13a\3a\3a\6"+ + "a\u038e\na\ra\16a\u038f\3b\7b\u0393\nb\fb\16b\u0396\13b\3b\3b\6b\u039a"+ + "\nb\rb\16b\u039b\3c\3c\3c\3c\3c\5c\u03a3\nc\3c\7c\u03a6\nc\fc\16c\u03a9"+ + "\13c\3c\3c\6c\u03ad\nc\rc\16c\u03ae\3d\3d\3d\5d\u03b4\nd\3d\3d\3d\5d\u03b9"+ + "\nd\3e\3e\3e\6e\u03be\ne\re\16e\u03bf\3e\3e\6e\u03c4\ne\re\16e\u03c5\5"+ + "e\u03c8\ne\3f\6f\u03cb\nf\rf\16f\u03cc\3g\3g\3g\3g\3g\5g\u03d4\ng\3g\6"+ + "g\u03d7\ng\rg\16g\u03d8\3h\3h\3i\3i\3j\3j\3k\3k\7k\u03e3\nk\fk\16k\u03e6"+ + "\13k\3k\3k\3l\3l\3m\3m\3n\6n\u03ef\nn\rn\16n\u03f0\3n\3n\3o\3o\3o\3o\7"+ + "o\u03f9\no\fo\16o\u03fc\13o\3o\3o\3p\3p\3p\3p\7p\u0404\np\fp\16p\u0407"+ + "\13p\3p\3p\3p\3p\3p\3q\3q\3q\3q\3q\3q\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3"+ + "r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3"+ + "r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3"+ + "r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3"+ + "r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3"+ + "r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3"+ + "r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3"+ + "r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3"+ + "r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3"+ + "r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3r\3"+ + "r\3r\3r\3r\3r\5r\u04f2\nr\3s\3s\3t\3t\3u\3u\3v\3v\3w\3w\3x\3x\3y\3y\3"+ + "z\3z\3{\3{\3{\3|\3|\3|\3}\3}\3~\3~\3\177\3\177\3\u0080\3\u0080\3\u0081"+ + "\3\u0081\3\u0082\3\u0082\3\u0083\3\u0083\3\u0083\3\u0084\3\u0084\3\u0084"+ + "\3\u0085\3\u0085\5\u0085\u051e\n\u0085\3\u0086\3\u0086\3\u0086\5\u0086"+ + "\u0523\n\u0086\3\u0087\3\u0087\7\u0087\u0527\n\u0087\f\u0087\16\u0087"+ + "\u052a\13\u0087\3\u0087\3\u0087\6\u0087\u052e\n\u0087\r\u0087\16\u0087"+ + "\u052f\3\u0088\7\u0088\u0533\n\u0088\f\u0088\16\u0088\u0536\13\u0088\3"+ + "\u0088\3\u0088\6\u0088\u053a\n\u0088\r\u0088\16\u0088\u053b\3\u0089\3"+ + "\u0089\7\u0089\u0540\n\u0089\f\u0089\16\u0089\u0543\13\u0089\3\u0089\3"+ + "\u0089\6\u0089\u0547\n\u0089\r\u0089\16\u0089\u0548\3\u008a\3\u008a\3"+ + "\u008a\5\u008a\u054e\n\u008a\3\u008b\3\u008b\6\u008b\u0552\n\u008b\r\u008b"+ + "\16\u008b\u0553\3\u008c\6\u008c\u0557\n\u008c\r\u008c\16\u008c\u0558\3"+ + "\u008d\3\u008d\6\u008d\u055d\n\u008d\r\u008d\16\u008d\u055e\3\u008e\3"+ + "\u008e\3\u008f\3\u008f\3\u0090\3\u0090\3\u0091\3\u0091\3\u0091\3\u0091"+ + "\5\u0091\u056b\n\u0091\3\u0091\3\u0091\3\u0092\3\u0092\6\u0092\u0571\n"+ + "\u0092\r\u0092\16\u0092\u0572\3\u0093\3\u0093\7\u0093\u0577\n\u0093\f"+ + "\u0093\16\u0093\u057a\13\u0093\3\u0094\3\u0094\7\u0094\u057e\n\u0094\f"+ + "\u0094\16\u0094\u0581\13\u0094\3\u0095\3\u0095\3\u0096\3\u0096\3\u0097"+ + "\6\u0097\u0588\n\u0097\r\u0097\16\u0097\u0589\3\u0097\3\u0097\3\u0098"+ + "\3\u0098\3\u0098\3\u0098\7\u0098\u0592\n\u0098\f\u0098\16\u0098\u0595"+ + "\13\u0098\3\u0098\3\u0098\3\u0099\3\u0099\3\u0099\3\u0099\7\u0099\u059d"+ + "\n\u0099\f\u0099\16\u0099\u05a0\13\u0099\3\u0099\3\u0099\3\u0099\3\u0099"+ + "\3\u0099\5\u034f\u0405\u059e\2\u009a\4\4\6\5\b\6\n\7\f\b\16\t\20\n\22"+ + "\13\24\f\26\r\30\16\32\17\34\20\36\21 \22\"\23$\24&\25(\26*\27,\30.\31"+ + "\60\32\62\33\64\34\66\358\36:\37< >!@\"B#D$F%H&J\'L(N)P*R+T,V-X.Z/\\\60"+ + "^\61`\62b\63d\64f\65h\66j\67l8n9p:r;tz?|@~A\u0080B\u0082C\u0084D"+ + "\u0086E\u0088F\u008aG\u008cH\u008eI\u0090J\u0092K\u0094L\u0096M\u0098"+ + "N\u009aO\u009cP\u009eQ\u00a0R\u00a2S\u00a4T\u00a6U\u00a8V\u00aaW\u00ac"+ + "X\u00aeY\u00b0Z\u00b2[\u00b4\\\u00b6]\u00b8^\u00ba_\u00bc`\u00bea\u00c0"+ + "b\u00c2c\u00c4d\u00c6e\u00c8f\u00cag\u00cch\u00cei\u00d0\2\u00d2\2\u00d4"+ + "\2\u00d6j\u00d8\2\u00da\2\u00dck\u00del\u00e0m\u00e2n\u00e4o\u00e6p\u00e8"+ + "q\u00ear\u00ecs\u00eet\u00f0u\u00f2v\u00f4w\u00f6x\u00f8y\u00faz\u00fc"+ + "{\u00fe|\u0100}\u0102~\u0104\177\u0106\u0080\u0108\u0081\u010a\u0082\u010c"+ + "\u0083\u010e\u0084\u0110\u0085\u0112\u0086\u0114\u0087\u0116\u0088\u0118"+ + "\u0089\u011a\u008a\u011c\2\u011e\2\u0120\2\u0122\u008b\u0124\u008c\u0126"+ + "\u008d\u0128\u008e\u012a\2\u012c\2\u012e\u008f\u0130\u0090\u0132\u0091"+ + "\4\2\3\23\3\2$$\3\2||\4\2rruu\4\2ooww\7\2$$))hhpptt\3\2))\4\2uuww\7\2"+ + "dfkknnuuyy\4\2DDdd\3\2\62\63\3\2\62;\5\2\62;CHch\5\2C\\aac|\6\2\62;C\\"+ + "aac|\6\2\13\f\17\17\"\"\u00a2\u00a2\4\2\f\f\17\17\4\2--//\2\u0630\2\4"+ + "\3\2\2\2\2\6\3\2\2\2\2\b\3\2\2\2\2\n\3\2\2\2\2\f\3\2\2\2\2\16\3\2\2\2"+ + "\2\20\3\2\2\2\2\22\3\2\2\2\2\24\3\2\2\2\2\26\3\2\2\2\2\30\3\2\2\2\2\32"+ + "\3\2\2\2\2\34\3\2\2\2\2\36\3\2\2\2\2 \3\2\2\2\2\"\3\2\2\2\2$\3\2\2\2\2"+ + "&\3\2\2\2\2(\3\2\2\2\2*\3\2\2\2\2,\3\2\2\2\2.\3\2\2\2\2\60\3\2\2\2\2\62"+ + "\3\2\2\2\2\64\3\2\2\2\2\66\3\2\2\2\28\3\2\2\2\2:\3\2\2\2\2<\3\2\2\2\2"+ + ">\3\2\2\2\2@\3\2\2\2\2B\3\2\2\2\2D\3\2\2\2\2F\3\2\2\2\2H\3\2\2\2\2J\3"+ + "\2\2\2\2L\3\2\2\2\2N\3\2\2\2\2P\3\2\2\2\2R\3\2\2\2\2T\3\2\2\2\2V\3\2\2"+ + "\2\2X\3\2\2\2\2Z\3\2\2\2\2\\\3\2\2\2\2^\3\2\2\2\2`\3\2\2\2\2b\3\2\2\2"+ + "\2d\3\2\2\2\2f\3\2\2\2\2h\3\2\2\2\2j\3\2\2\2\2l\3\2\2\2\2n\3\2\2\2\2p"+ + "\3\2\2\2\2r\3\2\2\2\2t\3\2\2\2\2v\3\2\2\2\2x\3\2\2\2\2z\3\2\2\2\2|\3\2"+ + "\2\2\2~\3\2\2\2\2\u0080\3\2\2\2\2\u0082\3\2\2\2\2\u0084\3\2\2\2\2\u0086"+ + "\3\2\2\2\2\u0088\3\2\2\2\2\u008a\3\2\2\2\2\u008c\3\2\2\2\2\u008e\3\2\2"+ + "\2\2\u0090\3\2\2\2\2\u0092\3\2\2\2\2\u0094\3\2\2\2\2\u0096\3\2\2\2\2\u0098"+ + "\3\2\2\2\2\u009a\3\2\2\2\2\u009c\3\2\2\2\2\u009e\3\2\2\2\2\u00a0\3\2\2"+ + "\2\2\u00a2\3\2\2\2\2\u00a4\3\2\2\2\2\u00a6\3\2\2\2\2\u00a8\3\2\2\2\2\u00aa"+ + "\3\2\2\2\2\u00ac\3\2\2\2\2\u00ae\3\2\2\2\2\u00b0\3\2\2\2\2\u00b2\3\2\2"+ + "\2\2\u00b4\3\2\2\2\2\u00b6\3\2\2\2\2\u00b8\3\2\2\2\2\u00ba\3\2\2\2\2\u00bc"+ + "\3\2\2\2\2\u00be\3\2\2\2\2\u00c0\3\2\2\2\2\u00c2\3\2\2\2\2\u00c4\3\2\2"+ + "\2\2\u00c6\3\2\2\2\2\u00c8\3\2\2\2\2\u00ca\3\2\2\2\2\u00cc\3\2\2\2\2\u00ce"+ + "\3\2\2\2\2\u00d6\3\2\2\2\2\u00dc\3\2\2\2\2\u00de\3\2\2\2\2\u00e0\3\2\2"+ + "\2\3\u00e2\3\2\2\2\3\u00e4\3\2\2\2\3\u00e6\3\2\2\2\3\u00e8\3\2\2\2\3\u00ea"+ + "\3\2\2\2\3\u00ec\3\2\2\2\3\u00ee\3\2\2\2\3\u00f0\3\2\2\2\3\u00f2\3\2\2"+ + "\2\3\u00f4\3\2\2\2\3\u00f6\3\2\2\2\3\u00f8\3\2\2\2\3\u00fa\3\2\2\2\3\u00fc"+ + "\3\2\2\2\3\u00fe\3\2\2\2\3\u0100\3\2\2\2\3\u0102\3\2\2\2\3\u0104\3\2\2"+ + "\2\3\u0106\3\2\2\2\3\u0108\3\2\2\2\3\u010a\3\2\2\2\3\u010c\3\2\2\2\3\u010e"+ + "\3\2\2\2\3\u0110\3\2\2\2\3\u0112\3\2\2\2\3\u0114\3\2\2\2\3\u0116\3\2\2"+ + "\2\3\u0118\3\2\2\2\3\u011a\3\2\2\2\3\u0122\3\2\2\2\3\u0124\3\2\2\2\3\u0126"+ + "\3\2\2\2\3\u0128\3\2\2\2\3\u012e\3\2\2\2\3\u0130\3\2\2\2\3\u0132\3\2\2"+ + "\2\4\u0134\3\2\2\2\6\u0137\3\2\2\2\b\u0139\3\2\2\2\n\u013b\3\2\2\2\f\u013d"+ + "\3\2\2\2\16\u013f\3\2\2\2\20\u0141\3\2\2\2\22\u0143\3\2\2\2\24\u0145\3"+ + "\2\2\2\26\u0147\3\2\2\2\30\u014a\3\2\2\2\32\u014c\3\2\2\2\34\u014e\3\2"+ + "\2\2\36\u0151\3\2\2\2 \u0153\3\2\2\2\"\u0155\3\2\2\2$\u0157\3\2\2\2&\u0159"+ + "\3\2\2\2(\u015b\3\2\2\2*\u015e\3\2\2\2,\u0161\3\2\2\2.\u0163\3\2\2\2\60"+ + "\u0165\3\2\2\2\62\u0167\3\2\2\2\64\u0169\3\2\2\2\66\u016c\3\2\2\28\u016f"+ + "\3\2\2\2:\u0172\3\2\2\2<\u0175\3\2\2\2>\u0177\3\2\2\2@\u017a\3\2\2\2B"+ + "\u017d\3\2\2\2D\u017f\3\2\2\2F\u0182\3\2\2\2H\u0185\3\2\2\2J\u019d\3\2"+ + "\2\2L\u019f\3\2\2\2N\u01a8\3\2\2\2P\u01b0\3\2\2\2R\u01b8\3\2\2\2T\u01c0"+ + "\3\2\2\2V\u01c3\3\2\2\2X\u01ca\3\2\2\2Z\u01cf\3\2\2\2\\\u01d3\3\2\2\2"+ + "^\u01dc\3\2\2\2`\u01e5\3\2\2\2b\u01ee\3\2\2\2d\u01f4\3\2\2\2f\u01fb\3"+ + "\2\2\2h\u0202\3\2\2\2j\u0208\3\2\2\2l\u020f\3\2\2\2n\u0218\3\2\2\2p\u021f"+ + "\3\2\2\2r\u0229\3\2\2\2t\u0232\3\2\2\2v\u023c\3\2\2\2x\u0241\3\2\2\2z"+ + "\u0247\3\2\2\2|\u024d\3\2\2\2~\u0252\3\2\2\2\u0080\u026e\3\2\2\2\u0082"+ + "\u0270\3\2\2\2\u0084\u027a\3\2\2\2\u0086\u027d\3\2\2\2\u0088\u0282\3\2"+ + "\2\2\u008a\u0288\3\2\2\2\u008c\u028b\3\2\2\2\u008e\u028f\3\2\2\2\u0090"+ + "\u0296\3\2\2\2\u0092\u029d\3\2\2\2\u0094\u02a3\3\2\2\2\u0096\u02ac\3\2"+ + "\2\2\u0098\u02b2\3\2\2\2\u009a\u02ba\3\2\2\2\u009c\u02bf\3\2\2\2\u009e"+ + "\u02c6\3\2\2\2\u00a0\u02cb\3\2\2\2\u00a2\u02d2\3\2\2\2\u00a4\u02d9\3\2"+ + "\2\2\u00a6\u02e1\3\2\2\2\u00a8\u02ea\3\2\2\2\u00aa\u02ef\3\2\2\2\u00ac"+ + "\u02f8\3\2\2\2\u00ae\u02fe\3\2\2\2\u00b0\u0305\3\2\2\2\u00b2\u0315\3\2"+ + "\2\2\u00b4\u033c\3\2\2\2\u00b6\u0347\3\2\2\2\u00b8\u0349\3\2\2\2\u00ba"+ + "\u0355\3\2\2\2\u00bc\u036d\3\2\2\2\u00be\u0377\3\2\2\2\u00c0\u037c\3\2"+ + "\2\2\u00c2\u0383\3\2\2\2\u00c4\u0394\3\2\2\2\u00c6\u03a2\3\2\2\2\u00c8"+ + "\u03b3\3\2\2\2\u00ca\u03c7\3\2\2\2\u00cc\u03ca\3\2\2\2\u00ce\u03d3\3\2"+ + "\2\2\u00d0\u03da\3\2\2\2\u00d2\u03dc\3\2\2\2\u00d4\u03de\3\2\2\2\u00d6"+ + "\u03e0\3\2\2\2\u00d8\u03e9\3\2\2\2\u00da\u03eb\3\2\2\2\u00dc\u03ee\3\2"+ + "\2\2\u00de\u03f4\3\2\2\2\u00e0\u03ff\3\2\2\2\u00e2\u040d\3\2\2\2\u00e4"+ + "\u04f1\3\2\2\2\u00e6\u04f3\3\2\2\2\u00e8\u04f5\3\2\2\2\u00ea\u04f7\3\2"+ + "\2\2\u00ec\u04f9\3\2\2\2\u00ee\u04fb\3\2\2\2\u00f0\u04fd\3\2\2\2\u00f2"+ + "\u04ff\3\2\2\2\u00f4\u0501\3\2\2\2\u00f6\u0503\3\2\2\2\u00f8\u0506\3\2"+ + "\2\2\u00fa\u0509\3\2\2\2\u00fc\u050b\3\2\2\2\u00fe\u050d\3\2\2\2\u0100"+ + "\u050f\3\2\2\2\u0102\u0511\3\2\2\2\u0104\u0513\3\2\2\2\u0106\u0515\3\2"+ + "\2\2\u0108\u0518\3\2\2\2\u010a\u051d\3\2\2\2\u010c\u0522\3\2\2\2\u010e"+ + "\u0524\3\2\2\2\u0110\u0534\3\2\2\2\u0112\u053d\3\2\2\2\u0114\u054d\3\2"+ + "\2\2\u0116\u054f\3\2\2\2\u0118\u0556\3\2\2\2\u011a\u055a\3\2\2\2\u011c"+ + "\u0560\3\2\2\2\u011e\u0562\3\2\2\2\u0120\u0564\3\2\2\2\u0122\u0566\3\2"+ + "\2\2\u0124\u056e\3\2\2\2\u0126\u0574\3\2\2\2\u0128\u057b\3\2\2\2\u012a"+ + "\u0582\3\2\2\2\u012c\u0584\3\2\2\2\u012e\u0587\3\2\2\2\u0130\u058d\3\2"+ + "\2\2\u0132\u0598\3\2\2\2\u0134\u0135\7}\2\2\u0135\u0136\b\2\2\2\u0136"+ + "\5\3\2\2\2\u0137\u0138\7\177\2\2\u0138\7\3\2\2\2\u0139\u013a\7]\2\2\u013a"+ + "\t\3\2\2\2\u013b\u013c\7_\2\2\u013c\13\3\2\2\2\u013d\u013e\7*\2\2\u013e"+ + "\r\3\2\2\2\u013f\u0140\7+\2\2\u0140\17\3\2\2\2\u0141\u0142\7=\2\2\u0142"+ + "\21\3\2\2\2\u0143\u0144\7<\2\2\u0144\23\3\2\2\2\u0145\u0146\7.\2\2\u0146"+ + "\25\3\2\2\2\u0147\u0148\7\60\2\2\u0148\u0149\7\60\2\2\u0149\27\3\2\2\2"+ + "\u014a\u014b\7A\2\2\u014b\31\3\2\2\2\u014c\u014d\7\60\2\2\u014d\33\3\2"+ + "\2\2\u014e\u014f\7/\2\2\u014f\u0150\7@\2\2\u0150\35\3\2\2\2\u0151\u0152"+ + "\7-\2\2\u0152\37\3\2\2\2\u0153\u0154\7/\2\2\u0154!\3\2\2\2\u0155\u0156"+ + "\7,\2\2\u0156#\3\2\2\2\u0157\u0158\7\61\2\2\u0158%\3\2\2\2\u0159\u015a"+ + "\7\'\2\2\u015a\'\3\2\2\2\u015b\u015c\7-\2\2\u015c\u015d\7-\2\2\u015d)"+ + "\3\2\2\2\u015e\u015f\7/\2\2\u015f\u0160\7/\2\2\u0160+\3\2\2\2\u0161\u0162"+ + "\7(\2\2\u0162-\3\2\2\2\u0163\u0164\7\u0080\2\2\u0164/\3\2\2\2\u0165\u0166"+ + "\7`\2\2\u0166\61\3\2\2\2\u0167\u0168\7~\2\2\u0168\63\3\2\2\2\u0169\u016a"+ + "\7>\2\2\u016a\u016b\7>\2\2\u016b\65\3\2\2\2\u016c\u016d\7@\2\2\u016d\u016e"+ + "\7@\2\2\u016e\67\3\2\2\2\u016f\u0170\7?\2\2\u0170\u0171\7?\2\2\u01719"+ + "\3\2\2\2\u0172\u0173\7#\2\2\u0173\u0174\7?\2\2\u0174;\3\2\2\2\u0175\u0176"+ + "\7>\2\2\u0176=\3\2\2\2\u0177\u0178\7>\2\2\u0178\u0179\7?\2\2\u0179?\3"+ + "\2\2\2\u017a\u017b\7@\2\2\u017b\u017c\7?\2\2\u017cA\3\2\2\2\u017d\u017e"+ + "\7@\2\2\u017eC\3\2\2\2\u017f\u0180\7(\2\2\u0180\u0181\7(\2\2\u0181E\3"+ + "\2\2\2\u0182\u0183\7~\2\2\u0183\u0184\7~\2\2\u0184G\3\2\2\2\u0185\u0186"+ + "\7?\2\2\u0186I\3\2\2\2\u0187\u0188\7-\2\2\u0188\u019e\7?\2\2\u0189\u018a"+ + "\7/\2\2\u018a\u019e\7?\2\2\u018b\u018c\7,\2\2\u018c\u019e\7?\2\2\u018d"+ + "\u018e\7\61\2\2\u018e\u019e\7?\2\2\u018f\u0190\7\'\2\2\u0190\u019e\7?"+ + "\2\2\u0191\u0192\7>\2\2\u0192\u0193\7>\2\2\u0193\u019e\7?\2\2\u0194\u0195"+ + "\7@\2\2\u0195\u0196\7@\2\2\u0196\u019e\7?\2\2\u0197\u0198\7(\2\2\u0198"+ + "\u019e\7?\2\2\u0199\u019a\7~\2\2\u019a\u019e\7?\2\2\u019b\u019c\7`\2\2"+ + "\u019c\u019e\7?\2\2\u019d\u0187\3\2\2\2\u019d\u0189\3\2\2\2\u019d\u018b"+ + "\3\2\2\2\u019d\u018d\3\2\2\2\u019d\u018f\3\2\2\2\u019d\u0191\3\2\2\2\u019d"+ + "\u0194\3\2\2\2\u019d\u0197\3\2\2\2\u019d\u0199\3\2\2\2\u019d\u019b\3\2"+ + "\2\2\u019eK\3\2\2\2\u019f\u01a0\7k\2\2\u01a0\u01a1\7o\2\2\u01a1\u01a2"+ + "\7r\2\2\u01a2\u01a3\7q\2\2\u01a3\u01a4\7t\2\2\u01a4\u01a5\7v\2\2\u01a5"+ + "\u01a6\3\2\2\2\u01a6\u01a7\b&\3\2\u01a7M\3\2\2\2\u01a8\u01a9\7v\2\2\u01a9"+ + "\u01aa\7{\2\2\u01aa\u01ab\7r\2\2\u01ab\u01ac\7g\2\2\u01ac\u01ad\7f\2\2"+ + "\u01ad\u01ae\7g\2\2\u01ae\u01af\7h\2\2\u01afO\3\2\2\2\u01b0\u01b1\7%\2"+ + "\2\u01b1\u01b2\7r\2\2\u01b2\u01b3\7t\2\2\u01b3\u01b4\7c\2\2\u01b4\u01b5"+ + "\7i\2\2\u01b5\u01b6\7o\2\2\u01b6\u01b7\7c\2\2\u01b7Q\3\2\2\2\u01b8\u01b9"+ + "\7t\2\2\u01b9\u01ba\7g\2\2\u01ba\u01bb\7u\2\2\u01bb\u01bc\7g\2\2\u01bc"+ + "\u01bd\7t\2\2\u01bd\u01be\7x\2\2\u01be\u01bf\7g\2\2\u01bfS\3\2\2\2\u01c0"+ + "\u01c1\7r\2\2\u01c1\u01c2\7e\2\2\u01c2U\3\2\2\2\u01c3\u01c4\7v\2\2\u01c4"+ + "\u01c5\7c\2\2\u01c5\u01c6\7t\2\2\u01c6\u01c7\7i\2\2\u01c7\u01c8\7g\2\2"+ + "\u01c8\u01c9\7v\2\2\u01c9W\3\2\2\2\u01ca\u01cb\7n\2\2\u01cb\u01cc\7k\2"+ + "\2\u01cc\u01cd\7p\2\2\u01cd\u01ce\7m\2\2\u01ceY\3\2\2\2\u01cf\u01d0\7"+ + "e\2\2\u01d0\u01d1\7r\2\2\u01d1\u01d2\7w\2\2\u01d2[\3\2\2\2\u01d3\u01d4"+ + "\7e\2\2\u01d4\u01d5\7q\2\2\u01d5\u01d6\7f\2\2\u01d6\u01d7\7g\2\2\u01d7"+ + "\u01d8\7a\2\2\u01d8\u01d9\7u\2\2\u01d9\u01da\7g\2\2\u01da\u01db\7i\2\2"+ + "\u01db]\3\2\2\2\u01dc\u01dd\7f\2\2\u01dd\u01de\7c\2\2\u01de\u01df\7v\2"+ + "\2\u01df\u01e0\7c\2\2\u01e0\u01e1\7a\2\2\u01e1\u01e2\7u\2\2\u01e2\u01e3"+ + "\7g\2\2\u01e3\u01e4\7i\2\2\u01e4_\3\2\2\2\u01e5\u01e6\7g\2\2\u01e6\u01e7"+ + "\7p\2\2\u01e7\u01e8\7e\2\2\u01e8\u01e9\7q\2\2\u01e9\u01ea\7f\2\2\u01ea"+ + "\u01eb\7k\2\2\u01eb\u01ec\7p\2\2\u01ec\u01ed\7i\2\2\u01eda\3\2\2\2\u01ee"+ + "\u01ef\7e\2\2\u01ef\u01f0\7q\2\2\u01f0\u01f1\7p\2\2\u01f1\u01f2\7u\2\2"+ + "\u01f2\u01f3\7v\2\2\u01f3c\3\2\2\2\u01f4\u01f5\7g\2\2\u01f5\u01f6\7z\2"+ + "\2\u01f6\u01f7\7v\2\2\u01f7\u01f8\7g\2\2\u01f8\u01f9\7t\2\2\u01f9\u01fa"+ + "\7p\2\2\u01fae\3\2\2\2\u01fb\u01fc\7g\2\2\u01fc\u01fd\7z\2\2\u01fd\u01fe"+ + "\7r\2\2\u01fe\u01ff\7q\2\2\u01ff\u0200\7t\2\2\u0200\u0201\7v\2\2\u0201"+ + "g\3\2\2\2\u0202\u0203\7c\2\2\u0203\u0204\7n\2\2\u0204\u0205\7k\2\2\u0205"+ + "\u0206\7i\2\2\u0206\u0207\7p\2\2\u0207i\3\2\2\2\u0208\u0209\7k\2\2\u0209"+ + "\u020a\7p\2\2\u020a\u020b\7n\2\2\u020b\u020c\7k\2\2\u020c\u020d\7p\2\2"+ + "\u020d\u020e\7g\2\2\u020ek\3\2\2\2\u020f\u0210\7x\2\2\u0210\u0211\7q\2"+ + "\2\u0211\u0212\7n\2\2\u0212\u0213\7c\2\2\u0213\u0214\7v\2\2\u0214\u0215"+ + "\7k\2\2\u0215\u0216\7n\2\2\u0216\u0217\7g\2\2\u0217m\3\2\2\2\u0218\u0219"+ + "\7u\2\2\u0219\u021a\7v\2\2\u021a\u021b\7c\2\2\u021b\u021c\7v\2\2\u021c"+ + "\u021d\7k\2\2\u021d\u021e\7e\2\2\u021eo\3\2\2\2\u021f\u0220\7k\2\2\u0220"+ + "\u0221\7p\2\2\u0221\u0222\7v\2\2\u0222\u0223\7g\2\2\u0223\u0224\7t\2\2"+ + "\u0224\u0225\7t\2\2\u0225\u0226\7w\2\2\u0226\u0227\7r\2\2\u0227\u0228"+ + "\7v\2\2\u0228q\3\2\2\2\u0229\u022a\7t\2\2\u022a\u022b\7g\2\2\u022b\u022c"+ + "\7i\2\2\u022c\u022d\7k\2\2\u022d\u022e\7u\2\2\u022e\u022f\7v\2\2\u022f"+ + "\u0230\7g\2\2\u0230\u0231\7t\2\2\u0231s\3\2\2\2\u0232\u0233\7a\2\2\u0233"+ + "\u0234\7a\2\2\u0234\u0235\7c\2\2\u0235\u0236\7f\2\2\u0236\u0237\7f\2\2"+ + "\u0237\u0238\7t\2\2\u0238\u0239\7g\2\2\u0239\u023a\7u\2\2\u023a\u023b"+ + "\7u\2\2\u023bu\3\2\2\2\u023c\u023d\7a\2\2\u023d\u023e\7a\2\2\u023e\u023f"+ + "\7|\2\2\u023f\u0240\7r\2\2\u0240w\3\2\2\2\u0241\u0242\7a\2\2\u0242\u0243"+ + "\7a\2\2\u0243\u0244\7o\2\2\u0244\u0245\7g\2\2\u0245\u0246\7o\2\2\u0246"+ + "y\3\2\2\2\u0247\u0248\7a\2\2\u0248\u0249\7a\2\2\u0249\u024a\7u\2\2\u024a"+ + "\u024b\7u\2\2\u024b\u024c\7c\2\2\u024c{\3\2\2\2\u024d\u024e\7a\2\2\u024e"+ + "\u024f\7a\2\2\u024f\u0250\7o\2\2\u0250\u0251\7c\2\2\u0251}\3\2\2\2\u0252"+ + "\u0253\7e\2\2\u0253\u0254\7c\2\2\u0254\u0255\7n\2\2\u0255\u0256\7n\2\2"+ + "\u0256\u0257\7k\2\2\u0257\u0258\7p\2\2\u0258\u0259\7i\2\2\u0259\177\3"+ + "\2\2\2\u025a\u025b\7a\2\2\u025b\u025c\7a\2\2\u025c\u025d\7u\2\2\u025d"+ + "\u025e\7v\2\2\u025e\u025f\7c\2\2\u025f\u0260\7e\2\2\u0260\u0261\7m\2\2"+ + "\u0261\u0262\7e\2\2\u0262\u0263\7c\2\2\u0263\u0264\7n\2\2\u0264\u026f"+ + "\7n\2\2\u0265\u0266\7a\2\2\u0266\u0267\7a\2\2\u0267\u0268\7r\2\2\u0268"+ + "\u0269\7j\2\2\u0269\u026a\7k\2\2\u026a\u026b\7e\2\2\u026b\u026c\7c\2\2"+ + "\u026c\u026d\7n\2\2\u026d\u026f\7n\2\2\u026e\u025a\3\2\2\2\u026e\u0265"+ + "\3\2\2\2\u026f\u0081\3\2\2\2\u0270\u0271\7x\2\2\u0271\u0272\7c\2\2\u0272"+ + "\u0273\7t\2\2\u0273\u0274\7a\2\2\u0274\u0275\7o\2\2\u0275\u0276\7q\2\2"+ + "\u0276\u0277\7f\2\2\u0277\u0278\7g\2\2\u0278\u0279\7n\2\2\u0279\u0083"+ + "\3\2\2\2\u027a\u027b\7k\2\2\u027b\u027c\7h\2\2\u027c\u0085\3\2\2\2\u027d"+ + "\u027e\7g\2\2\u027e\u027f\7n\2\2\u027f\u0280\7u\2\2\u0280\u0281\7g\2\2"+ + "\u0281\u0087\3\2\2\2\u0282\u0283\7y\2\2\u0283\u0284\7j\2\2\u0284\u0285"+ + "\7k\2\2\u0285\u0286\7n\2\2\u0286\u0287\7g\2\2\u0287\u0089\3\2\2\2\u0288"+ + "\u0289\7f\2\2\u0289\u028a\7q\2\2\u028a\u008b\3\2\2\2\u028b\u028c\7h\2"+ + "\2\u028c\u028d\7q\2\2\u028d\u028e\7t\2\2\u028e\u008d\3\2\2\2\u028f\u0290"+ + "\7u\2\2\u0290\u0291\7y\2\2\u0291\u0292\7k\2\2\u0292\u0293\7v\2\2\u0293"+ + "\u0294\7e\2\2\u0294\u0295\7j\2\2\u0295\u008f\3\2\2\2\u0296\u0297\7t\2"+ + "\2\u0297\u0298\7g\2\2\u0298\u0299\7v\2\2\u0299\u029a\7w\2\2\u029a\u029b"+ + "\7t\2\2\u029b\u029c\7p\2\2\u029c\u0091\3\2\2\2\u029d\u029e\7d\2\2\u029e"+ + "\u029f\7t\2\2\u029f\u02a0\7g\2\2\u02a0\u02a1\7c\2\2\u02a1\u02a2\7m\2\2"+ + "\u02a2\u0093\3\2\2\2\u02a3\u02a4\7e\2\2\u02a4\u02a5\7q\2\2\u02a5\u02a6"+ + "\7p\2\2\u02a6\u02a7\7v\2\2\u02a7\u02a8\7k\2\2\u02a8\u02a9\7p\2\2\u02a9"+ + "\u02aa\7w\2\2\u02aa\u02ab\7g\2\2\u02ab\u0095\3\2\2\2\u02ac\u02ad\7c\2"+ + "\2\u02ad\u02ae\7u\2\2\u02ae\u02af\7o\2\2\u02af\u02b0\3\2\2\2\u02b0\u02b1"+ + "\bK\4\2\u02b1\u0097\3\2\2\2\u02b2\u02b3\7f\2\2\u02b3\u02b4\7g\2\2\u02b4"+ + "\u02b5\7h\2\2\u02b5\u02b6\7c\2\2\u02b6\u02b7\7w\2\2\u02b7\u02b8\7n\2\2"+ + "\u02b8\u02b9\7v\2\2\u02b9\u0099\3\2\2\2\u02ba\u02bb\7e\2\2\u02bb\u02bc"+ + "\7c\2\2\u02bc\u02bd\7u\2\2\u02bd\u02be\7g\2\2\u02be\u009b\3\2\2\2\u02bf"+ + "\u02c0\7u\2\2\u02c0\u02c1\7v\2\2\u02c1\u02c2\7t\2\2\u02c2\u02c3\7w\2\2"+ + "\u02c3\u02c4\7e\2\2\u02c4\u02c5\7v\2\2\u02c5\u009d\3\2\2\2\u02c6\u02c7"+ + "\7g\2\2\u02c7\u02c8\7p\2\2\u02c8\u02c9\7w\2\2\u02c9\u02ca\7o\2\2\u02ca"+ + "\u009f\3\2\2\2\u02cb\u02cc\7u\2\2\u02cc\u02cd\7k\2\2\u02cd\u02ce\7|\2"+ + "\2\u02ce\u02cf\7g\2\2\u02cf\u02d0\7q\2\2\u02d0\u02d1\7h\2\2\u02d1\u00a1"+ + "\3\2\2\2\u02d2\u02d3\7v\2\2\u02d3\u02d4\7{\2\2\u02d4\u02d5\7r\2\2\u02d5"+ + "\u02d6\7g\2\2\u02d6\u02d7\7k\2\2\u02d7\u02d8\7f\2\2\u02d8\u00a3\3\2\2"+ + "\2\u02d9\u02da\7m\2\2\u02da\u02db\7k\2\2\u02db\u02dc\7e\2\2\u02dc\u02dd"+ + "\7m\2\2\u02dd\u02de\7c\2\2\u02de\u02df\7u\2\2\u02df\u02e0\7o\2\2\u02e0"+ + "\u00a5\3\2\2\2\u02e1\u02e2\7t\2\2\u02e2\u02e3\7g\2\2\u02e3\u02e4\7u\2"+ + "\2\u02e4\u02e5\7q\2\2\u02e5\u02e6\7w\2\2\u02e6\u02e7\7t\2\2\u02e7\u02e8"+ + "\7e\2\2\u02e8\u02e9\7g\2\2\u02e9\u00a7\3\2\2\2\u02ea\u02eb\7w\2\2\u02eb"+ + "\u02ec\7u\2\2\u02ec\u02ed\7g\2\2\u02ed\u02ee\7u\2\2\u02ee\u00a9\3\2\2"+ + "\2\u02ef\u02f0\7e\2\2\u02f0\u02f1\7n\2\2\u02f1\u02f2\7q\2\2\u02f2\u02f3"+ + "\7d\2\2\u02f3\u02f4\7d\2\2\u02f4\u02f5\7g\2\2\u02f5\u02f6\7t\2\2\u02f6"+ + "\u02f7\7u\2\2\u02f7\u00ab\3\2\2\2\u02f8\u02f9\7d\2\2\u02f9\u02fa\7{\2"+ + "\2\u02fa\u02fb\7v\2\2\u02fb\u02fc\7g\2\2\u02fc\u02fd\7u\2\2\u02fd\u00ad"+ + "\3\2\2\2\u02fe\u02ff\7e\2\2\u02ff\u0300\7{\2\2\u0300\u0301\7e\2\2\u0301"+ + "\u0302\7n\2\2\u0302\u0303\7g\2\2\u0303\u0304\7u\2\2\u0304\u00af\3\2\2"+ + "\2\u0305\u0306\7#\2\2\u0306\u00b1\3\2\2\2\u0307\u0308\7u\2\2\u0308\u0309"+ + "\7k\2\2\u0309\u030a\7i\2\2\u030a\u030b\7p\2\2\u030b\u030c\7g\2\2\u030c"+ + "\u0316\7f\2\2\u030d\u030e\7w\2\2\u030e\u030f\7p\2\2\u030f\u0310\7u\2\2"+ + "\u0310\u0311\7k\2\2\u0311\u0312\7i\2\2\u0312\u0313\7p\2\2\u0313\u0314"+ + "\7g\2\2\u0314\u0316\7f\2\2\u0315\u0307\3\2\2\2\u0315\u030d\3\2\2\2\u0316"+ + "\u00b3\3\2\2\2\u0317\u0318\7d\2\2\u0318\u0319\7{\2\2\u0319\u031a\7v\2"+ + "\2\u031a\u033d\7g\2\2\u031b\u031c\7y\2\2\u031c\u031d\7q\2\2\u031d\u031e"+ + "\7t\2\2\u031e\u033d\7f\2\2\u031f\u0320\7f\2\2\u0320\u0321\7y\2\2\u0321"+ + "\u0322\7q\2\2\u0322\u0323\7t\2\2\u0323\u033d\7f\2\2\u0324\u0325\7d\2\2"+ + "\u0325\u0326\7q\2\2\u0326\u0327\7q\2\2\u0327\u033d\7n\2\2\u0328\u0329"+ + "\7e\2\2\u0329\u032a\7j\2\2\u032a\u032b\7c\2\2\u032b\u033d\7t\2\2\u032c"+ + "\u032d\7u\2\2\u032d\u032e\7j\2\2\u032e\u032f\7q\2\2\u032f\u0330\7t\2\2"+ + "\u0330\u033d\7v\2\2\u0331\u0332\7k\2\2\u0332\u0333\7p\2\2\u0333\u033d"+ + "\7v\2\2\u0334\u0335\7n\2\2\u0335\u0336\7q\2\2\u0336\u0337\7p\2\2\u0337"+ + "\u033d\7i\2\2\u0338\u0339\7x\2\2\u0339\u033a\7q\2\2\u033a\u033b\7k\2\2"+ + "\u033b\u033d\7f\2\2\u033c\u0317\3\2\2\2\u033c\u031b\3\2\2\2\u033c\u031f"+ + "\3\2\2\2\u033c\u0324\3\2\2\2\u033c\u0328\3\2\2\2\u033c\u032c\3\2\2\2\u033c"+ + "\u0331\3\2\2\2\u033c\u0334\3\2\2\2\u033c\u0338\3\2\2\2\u033d\u00b5\3\2"+ + "\2\2\u033e\u033f\7v\2\2\u033f\u0340\7t\2\2\u0340\u0341\7w\2\2\u0341\u0348"+ + "\7g\2\2\u0342\u0343\7h\2\2\u0343\u0344\7c\2\2\u0344\u0345\7n\2\2\u0345"+ + "\u0346\7u\2\2\u0346\u0348\7g\2\2\u0347\u033e\3\2\2\2\u0347\u0342\3\2\2"+ + "\2\u0348\u00b7\3\2\2\2\u0349\u034a\7}\2\2\u034a\u034b\7}\2\2\u034b\u034f"+ + "\3\2\2\2\u034c\u034e\13\2\2\2\u034d\u034c\3\2\2\2\u034e\u0351\3\2\2\2"+ + "\u034f\u0350\3\2\2\2\u034f\u034d\3\2\2\2\u0350\u0352\3\2\2\2\u0351\u034f"+ + "\3\2\2\2\u0352\u0353\7\177\2\2\u0353\u0354\7\177\2\2\u0354\u00b9\3\2\2"+ + "\2\u0355\u035b\7$\2\2\u0356\u0357\7^\2\2\u0357\u035a\7$\2\2\u0358\u035a"+ + "\n\2\2\2\u0359\u0356\3\2\2\2\u0359\u0358\3\2\2\2\u035a\u035d\3\2\2\2\u035b"+ + "\u0359\3\2\2\2\u035b\u035c\3\2\2\2\u035c\u035e\3\2\2\2\u035d\u035b\3\2"+ + "\2\2\u035e\u0360\7$\2\2\u035f\u0361\t\3\2\2\u0360\u035f\3\2\2\2\u0360"+ + "\u0361\3\2\2\2\u0361\u0366\3\2\2\2\u0362\u0364\t\4\2\2\u0363\u0365\t\5"+ + "\2\2\u0364\u0363\3\2\2\2\u0364\u0365\3\2\2\2\u0365\u0367\3\2\2\2\u0366"+ + "\u0362\3\2\2\2\u0366\u0367\3\2\2\2\u0367\u0369\3\2\2\2\u0368\u036a\t\3"+ + "\2\2\u0369\u0368\3\2\2\2\u0369\u036a\3\2\2\2\u036a\u036b\3\2\2\2\u036b"+ + "\u036c\b]\5\2\u036c\u00bb\3\2\2\2\u036d\u0371\7)\2\2\u036e\u036f\7^\2"+ + "\2\u036f\u0372\t\6\2\2\u0370\u0372\n\7\2\2\u0371\u036e\3\2\2\2\u0371\u0370"+ + "\3\2\2\2\u0372\u0373\3\2\2\2\u0373\u0374\7)\2\2\u0374\u00bd\3\2\2\2\u0375"+ + "\u0378\5\u00c0`\2\u0376\u0378\5\u00c8d\2\u0377\u0375\3\2\2\2\u0377\u0376"+ + "\3\2\2\2\u0378\u00bf\3\2\2\2\u0379\u037d\5\u00c2a\2\u037a\u037d\5\u00c4"+ + "b\2\u037b\u037d\5\u00c6c\2\u037c\u0379\3\2\2\2\u037c\u037a\3\2\2\2\u037c"+ + "\u037b\3\2\2\2\u037d\u00c1\3\2\2\2\u037e\u0384\7\'\2\2\u037f\u0380\7\62"+ + "\2\2\u0380\u0384\7d\2\2\u0381\u0382\7\62\2\2\u0382\u0384\7D\2\2\u0383"+ + "\u037e\3\2\2\2\u0383\u037f\3\2\2\2\u0383\u0381\3\2\2\2\u0384\u0388\3\2"+ + "\2\2\u0385\u0387\5\u00d0h\2\u0386\u0385\3\2\2\2\u0387\u038a\3\2\2\2\u0388"+ + "\u0386\3\2\2\2\u0388\u0389\3\2\2\2\u0389\u038b\3\2\2\2\u038a\u0388\3\2"+ + "\2\2\u038b\u038d\7\60\2\2\u038c\u038e\5\u00d0h\2\u038d\u038c\3\2\2\2\u038e"+ + "\u038f\3\2\2\2\u038f\u038d\3\2\2\2\u038f\u0390\3\2\2\2\u0390\u00c3\3\2"+ + "\2\2\u0391\u0393\5\u00d2i\2\u0392\u0391\3\2\2\2\u0393\u0396\3\2\2\2\u0394"+ + "\u0392\3\2\2\2\u0394\u0395\3\2\2\2\u0395\u0397\3\2\2\2\u0396\u0394\3\2"+ + "\2\2\u0397\u0399\7\60\2\2\u0398\u039a\5\u00d2i\2\u0399\u0398\3\2\2\2\u039a"+ + "\u039b\3\2\2\2\u039b\u0399\3\2\2\2\u039b\u039c\3\2\2\2\u039c\u00c5\3\2"+ + "\2\2\u039d\u03a3\7&\2\2\u039e\u039f\7\62\2\2\u039f\u03a3\7z\2\2\u03a0"+ + "\u03a1\7\62\2\2\u03a1\u03a3\7Z\2\2\u03a2\u039d\3\2\2\2\u03a2\u039e\3\2"+ + "\2\2\u03a2\u03a0\3\2\2\2\u03a3\u03a7\3\2\2\2\u03a4\u03a6\5\u00d4j\2\u03a5"+ + "\u03a4\3\2\2\2\u03a6\u03a9\3\2\2\2\u03a7\u03a5\3\2\2\2\u03a7\u03a8\3\2"+ + "\2\2\u03a8\u03aa\3\2\2\2\u03a9\u03a7\3\2\2\2\u03aa\u03ac\7\60\2\2\u03ab"+ + "\u03ad\5\u00d4j\2\u03ac\u03ab\3\2\2\2\u03ad\u03ae\3\2\2\2\u03ae\u03ac"+ + "\3\2\2\2\u03ae\u03af\3\2\2\2\u03af\u00c7\3\2\2\2\u03b0\u03b4\5\u00ccf"+ + "\2\u03b1\u03b4\5\u00ceg\2\u03b2\u03b4\5\u00cae\2\u03b3\u03b0\3\2\2\2\u03b3"+ + "\u03b1\3\2\2\2\u03b3\u03b2\3\2\2\2\u03b4\u03b8\3\2\2\2\u03b5\u03b6\t\b"+ + "\2\2\u03b6\u03b9\t\t\2\2\u03b7\u03b9\7n\2\2\u03b8\u03b5\3\2\2\2\u03b8"+ + "\u03b7\3\2\2\2\u03b8\u03b9\3\2\2\2\u03b9\u00c9\3\2\2\2\u03ba\u03bb\7\62"+ + "\2\2\u03bb\u03bd\t\n\2\2\u03bc\u03be\5\u00d0h\2\u03bd\u03bc\3\2\2\2\u03be"+ + "\u03bf\3\2\2\2\u03bf\u03bd\3\2\2\2\u03bf\u03c0\3\2\2\2\u03c0\u03c8\3\2"+ + "\2\2\u03c1\u03c3\7\'\2\2\u03c2\u03c4\5\u00d0h\2\u03c3\u03c2\3\2\2\2\u03c4"+ + "\u03c5\3\2\2\2\u03c5\u03c3\3\2\2\2\u03c5\u03c6\3\2\2\2\u03c6\u03c8\3\2"+ + "\2\2\u03c7\u03ba\3\2\2\2\u03c7\u03c1\3\2\2\2\u03c8\u00cb\3\2\2\2\u03c9"+ + "\u03cb\5\u00d2i\2\u03ca\u03c9\3\2\2\2\u03cb\u03cc\3\2\2\2\u03cc\u03ca"+ + "\3\2\2\2\u03cc\u03cd\3\2\2\2\u03cd\u00cd\3\2\2\2\u03ce\u03d4\7&\2\2\u03cf"+ + "\u03d0\7\62\2\2\u03d0\u03d4\7z\2\2\u03d1\u03d2\7\62\2\2\u03d2\u03d4\7"+ + "Z\2\2\u03d3\u03ce\3\2\2\2\u03d3\u03cf\3\2\2\2\u03d3\u03d1\3\2\2\2\u03d4"+ + "\u03d6\3\2\2\2\u03d5\u03d7\5\u00d4j\2\u03d6\u03d5\3\2\2\2\u03d7\u03d8"+ + "\3\2\2\2\u03d8\u03d6\3\2\2\2\u03d8\u03d9\3\2\2\2\u03d9\u00cf\3\2\2\2\u03da"+ + "\u03db\t\13\2\2\u03db\u00d1\3\2\2\2\u03dc\u03dd\t\f\2\2\u03dd\u00d3\3"+ + "\2\2\2\u03de\u03df\t\r\2\2\u03df\u00d5\3\2\2\2\u03e0\u03e4\5\u00d8l\2"+ + "\u03e1\u03e3\5\u00dam\2\u03e2\u03e1\3\2\2\2\u03e3\u03e6\3\2\2\2\u03e4"+ + "\u03e2\3\2\2\2\u03e4\u03e5\3\2\2\2\u03e5\u03e7\3\2\2\2\u03e6\u03e4\3\2"+ + "\2\2\u03e7\u03e8\bk\6\2\u03e8\u00d7\3\2\2\2\u03e9\u03ea\t\16\2\2\u03ea"+ + "\u00d9\3\2\2\2\u03eb\u03ec\t\17\2\2\u03ec\u00db\3\2\2\2\u03ed\u03ef\t"+ + "\20\2\2\u03ee\u03ed\3\2\2\2\u03ef\u03f0\3\2\2\2\u03f0\u03ee\3\2\2\2\u03f0"+ + "\u03f1\3\2\2\2\u03f1\u03f2\3\2\2\2\u03f2\u03f3\bn\7\2\u03f3\u00dd\3\2"+ + "\2\2\u03f4\u03f5\7\61\2\2\u03f5\u03f6\7\61\2\2\u03f6\u03fa\3\2\2\2\u03f7"+ + "\u03f9\n\21\2\2\u03f8\u03f7\3\2\2\2\u03f9\u03fc\3\2\2\2\u03fa\u03f8\3"+ + "\2\2\2\u03fa\u03fb\3\2\2\2\u03fb\u03fd\3\2\2\2\u03fc\u03fa\3\2\2\2\u03fd"+ + "\u03fe\bo\b\2\u03fe\u00df\3\2\2\2\u03ff\u0400\7\61\2\2\u0400\u0401\7,"+ + "\2\2\u0401\u0405\3\2\2\2\u0402\u0404\13\2\2\2\u0403\u0402\3\2\2\2\u0404"+ + "\u0407\3\2\2\2\u0405\u0406\3\2\2\2\u0405\u0403\3\2\2\2\u0406\u0408\3\2"+ + "\2\2\u0407\u0405\3\2\2\2\u0408\u0409\7,\2\2\u0409\u040a\7\61\2\2\u040a"+ + "\u040b\3\2\2\2\u040b\u040c\bp\b\2\u040c\u00e1\3\2\2\2\u040d\u040e\7\60"+ + "\2\2\u040e\u040f\7d\2\2\u040f\u0410\7{\2\2\u0410\u0411\7v\2\2\u0411\u0412"+ + "\7g\2\2\u0412\u00e3\3\2\2\2\u0413\u0414\7d\2\2\u0414\u0415\7t\2\2\u0415"+ + "\u04f2\7m\2\2\u0416\u0417\7q\2\2\u0417\u0418\7t\2\2\u0418\u04f2\7c\2\2"+ + "\u0419\u041a\7m\2\2\u041a\u041b\7k\2\2\u041b\u04f2\7n\2\2\u041c\u041d"+ + "\7u\2\2\u041d\u041e\7n\2\2\u041e\u04f2\7q\2\2\u041f\u0420\7p\2\2\u0420"+ + "\u0421\7q\2\2\u0421\u04f2\7r\2\2\u0422\u0423\7c\2\2\u0423\u0424\7u\2\2"+ + "\u0424\u04f2\7n\2\2\u0425\u0426\7r\2\2\u0426\u0427\7j\2\2\u0427\u04f2"+ + "\7r\2\2\u0428\u0429\7c\2\2\u0429\u042a\7p\2\2\u042a\u04f2\7e\2\2\u042b"+ + "\u042c\7d\2\2\u042c\u042d\7r\2\2\u042d\u04f2\7n\2\2\u042e\u042f\7e\2\2"+ + "\u042f\u0430\7n\2\2\u0430\u04f2\7e\2\2\u0431\u0432\7l\2\2\u0432\u0433"+ + "\7u\2\2\u0433\u04f2\7t\2\2\u0434\u0435\7c\2\2\u0435\u0436\7p\2\2\u0436"+ + "\u04f2\7f\2\2\u0437\u0438\7t\2\2\u0438\u0439\7n\2\2\u0439\u04f2\7c\2\2"+ + "\u043a\u043b\7d\2\2\u043b\u043c\7k\2\2\u043c\u04f2\7v\2\2\u043d\u043e"+ + "\7t\2\2\u043e\u043f\7q\2\2\u043f\u04f2\7n\2\2\u0440\u0441\7r\2\2\u0441"+ + "\u0442\7n\2\2\u0442\u04f2\7c\2\2\u0443\u0444\7r\2\2\u0444\u0445\7n\2\2"+ + "\u0445\u04f2\7r\2\2\u0446\u0447\7d\2\2\u0447\u0448\7o\2\2\u0448\u04f2"+ + "\7k\2\2\u0449\u044a\7u\2\2\u044a\u044b\7g\2\2\u044b\u04f2\7e\2\2\u044c"+ + "\u044d\7t\2\2\u044d\u044e\7v\2\2\u044e\u04f2\7k\2\2\u044f\u0450\7g\2\2"+ + "\u0450\u0451\7q\2\2\u0451\u04f2\7t\2\2\u0452\u0453\7u\2\2\u0453\u0454"+ + "\7t\2\2\u0454\u04f2\7g\2\2\u0455\u0456\7n\2\2\u0456\u0457\7u\2\2\u0457"+ + "\u04f2\7t\2\2\u0458\u0459\7r\2\2\u0459\u045a\7j\2\2\u045a\u04f2\7c\2\2"+ + "\u045b\u045c\7c\2\2\u045c\u045d\7n\2\2\u045d\u04f2\7t\2\2\u045e\u045f"+ + "\7l\2\2\u045f\u0460\7o\2\2\u0460\u04f2\7r\2\2\u0461\u0462\7d\2\2\u0462"+ + "\u0463\7x\2\2\u0463\u04f2\7e\2\2\u0464\u0465\7e\2\2\u0465\u0466\7n\2\2"+ + "\u0466\u04f2\7k\2\2\u0467\u0468\7t\2\2\u0468\u0469\7v\2\2\u0469\u04f2"+ + "\7u\2\2\u046a\u046b\7c\2\2\u046b\u046c\7f\2\2\u046c\u04f2\7e\2\2\u046d"+ + "\u046e\7t\2\2\u046e\u046f\7t\2\2\u046f\u04f2\7c\2\2\u0470\u0471\7d\2\2"+ + "\u0471\u0472\7x\2\2\u0472\u04f2\7u\2\2\u0473\u0474\7u\2\2\u0474\u0475"+ + "\7g\2\2\u0475\u04f2\7k\2\2\u0476\u0477\7u\2\2\u0477\u0478\7c\2\2\u0478"+ + "\u04f2\7z\2\2\u0479\u047a\7u\2\2\u047a\u047b\7v\2\2\u047b\u04f2\7{\2\2"+ + "\u047c\u047d\7u\2\2\u047d\u047e\7v\2\2\u047e\u04f2\7c\2\2\u047f\u0480"+ + "\7u\2\2\u0480\u0481\7v\2\2\u0481\u04f2\7z\2\2\u0482\u0483\7f\2\2\u0483"+ + "\u0484\7g\2\2\u0484\u04f2\7{\2\2\u0485\u0486\7v\2\2\u0486\u0487\7z\2\2"+ + "\u0487\u04f2\7c\2\2\u0488\u0489\7z\2\2\u0489\u048a\7c\2\2\u048a\u04f2"+ + "\7c\2\2\u048b\u048c\7d\2\2\u048c\u048d\7e\2\2\u048d\u04f2\7e\2\2\u048e"+ + "\u048f\7c\2\2\u048f\u0490\7j\2\2\u0490\u04f2\7z\2\2\u0491\u0492\7v\2\2"+ + "\u0492\u0493\7{\2\2\u0493\u04f2\7c\2\2\u0494\u0495\7v\2\2\u0495\u0496"+ + "\7z\2\2\u0496\u04f2\7u\2\2\u0497\u0498\7v\2\2\u0498\u0499\7c\2\2\u0499"+ + "\u04f2\7u\2\2\u049a\u049b\7u\2\2\u049b\u049c\7j\2\2\u049c\u04f2\7{\2\2"+ + "\u049d\u049e\7u\2\2\u049e\u049f\7j\2\2\u049f\u04f2\7z\2\2\u04a0\u04a1"+ + "\7n\2\2\u04a1\u04a2\7f\2\2\u04a2\u04f2\7{\2\2\u04a3\u04a4\7n\2\2\u04a4"+ + "\u04a5\7f\2\2\u04a5\u04f2\7c\2\2\u04a6\u04a7\7n\2\2\u04a7\u04a8\7f\2\2"+ + "\u04a8\u04f2\7z\2\2\u04a9\u04aa\7n\2\2\u04aa\u04ab\7c\2\2\u04ab\u04f2"+ + "\7z\2\2\u04ac\u04ad\7v\2\2\u04ad\u04ae\7c\2\2\u04ae\u04f2\7{\2\2\u04af"+ + "\u04b0\7v\2\2\u04b0\u04b1\7c\2\2\u04b1\u04f2\7z\2\2\u04b2\u04b3\7d\2\2"+ + "\u04b3\u04b4\7e\2\2\u04b4\u04f2\7u\2\2\u04b5\u04b6\7e\2\2\u04b6\u04b7"+ + "\7n\2\2\u04b7\u04f2\7x\2\2\u04b8\u04b9\7v\2\2\u04b9\u04ba\7u\2\2\u04ba"+ + "\u04f2\7z\2\2\u04bb\u04bc\7n\2\2\u04bc\u04bd\7c\2\2\u04bd\u04f2\7u\2\2"+ + "\u04be\u04bf\7e\2\2\u04bf\u04c0\7r\2\2\u04c0\u04f2\7{\2\2\u04c1\u04c2"+ + "\7e\2\2\u04c2\u04c3\7o\2\2\u04c3\u04f2\7r\2\2\u04c4\u04c5\7e\2\2\u04c5"+ + "\u04c6\7r\2\2\u04c6\u04f2\7z\2\2\u04c7\u04c8\7f\2\2\u04c8\u04c9\7e\2\2"+ + "\u04c9\u04f2\7r\2\2\u04ca\u04cb\7f\2\2\u04cb\u04cc\7g\2\2\u04cc\u04f2"+ + "\7e\2\2\u04cd\u04ce\7k\2\2\u04ce\u04cf\7p\2\2\u04cf\u04f2\7e\2\2\u04d0"+ + "\u04d1\7c\2\2\u04d1\u04d2\7z\2\2\u04d2\u04f2\7u\2\2\u04d3\u04d4\7d\2\2"+ + "\u04d4\u04d5\7p\2\2\u04d5\u04f2\7g\2\2\u04d6\u04d7\7e\2\2\u04d7\u04d8"+ + "\7n\2\2\u04d8\u04f2\7f\2\2\u04d9\u04da\7u\2\2\u04da\u04db\7d\2\2\u04db"+ + "\u04f2\7e\2\2\u04dc\u04dd\7k\2\2\u04dd\u04de\7u\2\2\u04de\u04f2\7e\2\2"+ + "\u04df\u04e0\7k\2\2\u04e0\u04e1\7p\2\2\u04e1\u04f2\7z\2\2\u04e2\u04e3"+ + "\7d\2\2\u04e3\u04e4\7g\2\2\u04e4\u04f2\7s\2\2\u04e5\u04e6\7u\2\2\u04e6"+ + "\u04e7\7g\2\2\u04e7\u04f2\7f\2\2\u04e8\u04e9\7f\2\2\u04e9\u04ea\7g\2\2"+ + "\u04ea\u04f2\7z\2\2\u04eb\u04ec\7k\2\2\u04ec\u04ed\7p\2\2\u04ed\u04f2"+ + "\7{\2\2\u04ee\u04ef\7t\2\2\u04ef\u04f0\7q\2\2\u04f0\u04f2\7t\2\2\u04f1"+ + "\u0413\3\2\2\2\u04f1\u0416\3\2\2\2\u04f1\u0419\3\2\2\2\u04f1\u041c\3\2"+ + "\2\2\u04f1\u041f\3\2\2\2\u04f1\u0422\3\2\2\2\u04f1\u0425\3\2\2\2\u04f1"+ + "\u0428\3\2\2\2\u04f1\u042b\3\2\2\2\u04f1\u042e\3\2\2\2\u04f1\u0431\3\2"+ + "\2\2\u04f1\u0434\3\2\2\2\u04f1\u0437\3\2\2\2\u04f1\u043a\3\2\2\2\u04f1"+ + "\u043d\3\2\2\2\u04f1\u0440\3\2\2\2\u04f1\u0443\3\2\2\2\u04f1\u0446\3\2"+ + "\2\2\u04f1\u0449\3\2\2\2\u04f1\u044c\3\2\2\2\u04f1\u044f\3\2\2\2\u04f1"+ + "\u0452\3\2\2\2\u04f1\u0455\3\2\2\2\u04f1\u0458\3\2\2\2\u04f1\u045b\3\2"+ + "\2\2\u04f1\u045e\3\2\2\2\u04f1\u0461\3\2\2\2\u04f1\u0464\3\2\2\2\u04f1"+ + "\u0467\3\2\2\2\u04f1\u046a\3\2\2\2\u04f1\u046d\3\2\2\2\u04f1\u0470\3\2"+ + "\2\2\u04f1\u0473\3\2\2\2\u04f1\u0476\3\2\2\2\u04f1\u0479\3\2\2\2\u04f1"+ + "\u047c\3\2\2\2\u04f1\u047f\3\2\2\2\u04f1\u0482\3\2\2\2\u04f1\u0485\3\2"+ + "\2\2\u04f1\u0488\3\2\2\2\u04f1\u048b\3\2\2\2\u04f1\u048e\3\2\2\2\u04f1"+ + "\u0491\3\2\2\2\u04f1\u0494\3\2\2\2\u04f1\u0497\3\2\2\2\u04f1\u049a\3\2"+ + "\2\2\u04f1\u049d\3\2\2\2\u04f1\u04a0\3\2\2\2\u04f1\u04a3\3\2\2\2\u04f1"+ + "\u04a6\3\2\2\2\u04f1\u04a9\3\2\2\2\u04f1\u04ac\3\2\2\2\u04f1\u04af\3\2"+ + "\2\2\u04f1\u04b2\3\2\2\2\u04f1\u04b5\3\2\2\2\u04f1\u04b8\3\2\2\2\u04f1"+ + "\u04bb\3\2\2\2\u04f1\u04be\3\2\2\2\u04f1\u04c1\3\2\2\2\u04f1\u04c4\3\2"+ + "\2\2\u04f1\u04c7\3\2\2\2\u04f1\u04ca\3\2\2\2\u04f1\u04cd\3\2\2\2\u04f1"+ + "\u04d0\3\2\2\2\u04f1\u04d3\3\2\2\2\u04f1\u04d6\3\2\2\2\u04f1\u04d9\3\2"+ + "\2\2\u04f1\u04dc\3\2\2\2\u04f1\u04df\3\2\2\2\u04f1\u04e2\3\2\2\2\u04f1"+ + "\u04e5\3\2\2\2\u04f1\u04e8\3\2\2\2\u04f1\u04eb\3\2\2\2\u04f1\u04ee\3\2"+ + "\2\2\u04f2\u00e5\3\2\2\2\u04f3\u04f4\7%\2\2\u04f4\u00e7\3\2\2\2\u04f5"+ + "\u04f6\7<\2\2\u04f6\u00e9\3\2\2\2\u04f7\u04f8\7.\2\2\u04f8\u00eb\3\2\2"+ + "\2\u04f9\u04fa\7*\2\2\u04fa\u00ed\3\2\2\2\u04fb\u04fc\7+\2\2\u04fc\u00ef"+ + "\3\2\2\2\u04fd\u04fe\7]\2\2\u04fe\u00f1\3\2\2\2\u04ff\u0500\7_\2\2\u0500"+ + "\u00f3\3\2\2\2\u0501\u0502\7\60\2\2\u0502\u00f5\3\2\2\2\u0503\u0504\7"+ + ">\2\2\u0504\u0505\7>\2\2\u0505\u00f7\3\2\2\2\u0506\u0507\7@\2\2\u0507"+ + "\u0508\7@\2\2\u0508\u00f9\3\2\2\2\u0509\u050a\7-\2\2\u050a\u00fb\3\2\2"+ + "\2\u050b\u050c\7/\2\2\u050c\u00fd\3\2\2\2\u050d\u050e\7>\2\2\u050e\u00ff"+ + "\3\2\2\2\u050f\u0510\7@\2\2\u0510\u0101\3\2\2\2\u0511\u0512\7,\2\2\u0512"+ + "\u0103\3\2\2\2\u0513\u0514\7\61\2\2\u0514\u0105\3\2\2\2\u0515\u0516\7"+ + "}\2\2\u0516\u0517\b\u0083\t\2\u0517\u0107\3\2\2\2\u0518\u0519\7\177\2"+ + "\2\u0519\u051a\b\u0084\n\2\u051a\u0109\3\2\2\2\u051b\u051e\5\u010c\u0086"+ + "\2\u051c\u051e\5\u0114\u008a\2\u051d\u051b\3\2\2\2\u051d\u051c\3\2\2\2"+ + "\u051e\u010b\3\2\2\2\u051f\u0523\5\u010e\u0087\2\u0520\u0523\5\u0110\u0088"+ + "\2\u0521\u0523\5\u0112\u0089\2\u0522\u051f\3\2\2\2\u0522\u0520\3\2\2\2"+ + "\u0522\u0521\3\2\2\2\u0523\u010d\3\2\2\2\u0524\u0528\7\'\2\2\u0525\u0527"+ + "\5\u011c\u008e\2\u0526\u0525\3\2\2\2\u0527\u052a\3\2\2\2\u0528\u0526\3"+ + "\2\2\2\u0528\u0529\3\2\2\2\u0529\u052b\3\2\2\2\u052a\u0528\3\2\2\2\u052b"+ + "\u052d\7\60\2\2\u052c\u052e\5\u011c\u008e\2\u052d\u052c\3\2\2\2\u052e"+ + "\u052f\3\2\2\2\u052f\u052d\3\2\2\2\u052f\u0530\3\2\2\2\u0530\u010f\3\2"+ + "\2\2\u0531\u0533\5\u011e\u008f\2\u0532\u0531\3\2\2\2\u0533\u0536\3\2\2"+ + "\2\u0534\u0532\3\2\2\2\u0534\u0535\3\2\2\2\u0535\u0537\3\2\2\2\u0536\u0534"+ + "\3\2\2\2\u0537\u0539\7\60\2\2\u0538\u053a\5\u011e\u008f\2\u0539\u0538"+ + "\3\2\2\2\u053a\u053b\3\2\2\2\u053b\u0539\3\2\2\2\u053b\u053c\3\2\2\2\u053c"+ + "\u0111\3\2\2\2\u053d\u0541\7&\2\2\u053e\u0540\5\u0120\u0090\2\u053f\u053e"+ + "\3\2\2\2\u0540\u0543\3\2\2\2\u0541\u053f\3\2\2\2\u0541\u0542\3\2\2\2\u0542"+ + "\u0544\3\2\2\2\u0543\u0541\3\2\2\2\u0544\u0546\7\60\2\2\u0545\u0547\5"+ + "\u0120\u0090\2\u0546\u0545\3\2\2\2\u0547\u0548\3\2\2\2\u0548\u0546\3\2"+ + "\2\2\u0548\u0549\3\2\2\2\u0549\u0113\3\2\2\2\u054a\u054e\5\u0118\u008c"+ + "\2\u054b\u054e\5\u011a\u008d\2\u054c\u054e\5\u0116\u008b\2\u054d\u054a"+ + "\3\2\2\2\u054d\u054b\3\2\2\2\u054d\u054c\3\2\2\2\u054e\u0115\3\2\2\2\u054f"+ + "\u0551\7\'\2\2\u0550\u0552\5\u011c\u008e\2\u0551\u0550\3\2\2\2\u0552\u0553"+ + "\3\2\2\2\u0553\u0551\3\2\2\2\u0553\u0554\3\2\2\2\u0554\u0117\3\2\2\2\u0555"+ + "\u0557\5\u011e\u008f\2\u0556\u0555\3\2\2\2\u0557\u0558\3\2\2\2\u0558\u0556"+ + "\3\2\2\2\u0558\u0559\3\2\2\2\u0559\u0119\3\2\2\2\u055a\u055c\7&\2\2\u055b"+ + "\u055d\5\u0120\u0090\2\u055c\u055b\3\2\2\2\u055d\u055e\3\2\2\2\u055e\u055c"+ + "\3\2\2\2\u055e\u055f\3\2\2\2\u055f\u011b\3\2\2\2\u0560\u0561\t\13\2\2"+ + "\u0561\u011d\3\2\2\2\u0562\u0563\t\f\2\2\u0563\u011f\3\2\2\2\u0564\u0565"+ + "\t\r\2\2\u0565\u0121\3\2\2\2\u0566\u056a\7)\2\2\u0567\u0568\7^\2\2\u0568"+ + "\u056b\t\6\2\2\u0569\u056b\n\7\2\2\u056a\u0567\3\2\2\2\u056a\u0569\3\2"+ + "\2\2\u056b\u056c\3\2\2\2\u056c\u056d\7)\2\2\u056d\u0123\3\2\2\2\u056e"+ + "\u0570\5\u0126\u0093\2\u056f\u0571\t\22\2\2\u0570\u056f\3\2\2\2\u0571"+ + "\u0572\3\2\2\2\u0572\u0570\3\2\2\2\u0572\u0573\3\2\2\2\u0573\u0125\3\2"+ + "\2\2\u0574\u0578\7#\2\2\u0575\u0577\5\u012c\u0096\2\u0576\u0575\3\2\2"+ + "\2\u0577\u057a\3\2\2\2\u0578\u0576\3\2\2\2\u0578\u0579\3\2\2\2\u0579\u0127"+ + "\3\2\2\2\u057a\u0578\3\2\2\2\u057b\u057f\5\u012a\u0095\2\u057c\u057e\5"+ + "\u012c\u0096\2\u057d\u057c\3\2\2\2\u057e\u0581\3\2\2\2\u057f\u057d\3\2"+ + "\2\2\u057f\u0580\3\2\2\2\u0580\u0129\3\2\2\2\u0581\u057f\3\2\2\2\u0582"+ + "\u0583\t\16\2\2\u0583\u012b\3\2\2\2\u0584\u0585\t\17\2\2\u0585\u012d\3"+ + "\2\2\2\u0586\u0588\t\20\2\2\u0587\u0586\3\2\2\2\u0588\u0589\3\2\2\2\u0589"+ + "\u0587\3\2\2\2\u0589\u058a\3\2\2\2\u058a\u058b\3\2\2\2\u058b\u058c\b\u0097"+ + "\7\2\u058c\u012f\3\2\2\2\u058d\u058e\7\61\2\2\u058e\u058f\7\61\2\2\u058f"+ + "\u0593\3\2\2\2\u0590\u0592\n\21\2\2\u0591\u0590\3\2\2\2\u0592\u0595\3"+ + "\2\2\2\u0593\u0591\3\2\2\2\u0593\u0594\3\2\2\2\u0594\u0596\3\2\2\2\u0595"+ + "\u0593\3\2\2\2\u0596\u0597\b\u0098\b\2\u0597\u0131\3\2\2\2\u0598\u0599"+ + "\7\61\2\2\u0599\u059a\7,\2\2\u059a\u059e\3\2\2\2\u059b\u059d\13\2\2\2"+ + "\u059c\u059b\3\2\2\2\u059d\u05a0\3\2\2\2\u059e\u059f\3\2\2\2\u059e\u059c"+ + "\3\2\2\2\u059f\u05a1\3\2\2\2\u05a0\u059e\3\2\2\2\u05a1\u05a2\7,\2\2\u05a2"+ + "\u05a3\7\61\2\2\u05a3\u05a4\3\2\2\2\u05a4\u05a5\b\u0099\b\2\u05a5\u0133"+ + "\3\2\2\2;\2\3\u019d\u026e\u0315\u033c\u0347\u034f\u0359\u035b\u0360\u0364"+ + "\u0366\u0369\u0371\u0377\u037c\u0383\u0388\u038f\u0394\u039b\u03a2\u03a7"+ + "\u03ae\u03b3\u03b8\u03bf\u03c5\u03c7\u03cc\u03d3\u03d8\u03e4\u03f0\u03fa"+ + "\u0405\u04f1\u051d\u0522\u0528\u052f\u0534\u053b\u0541\u0548\u054d\u0553"+ + "\u0558\u055e\u056a\u0572\u0578\u057f\u0589\u0593\u059e\13\3\2\2\3&\3\3"+ + "K\4\3]\5\3k\6\2\3\2\2\4\2\3\u0083\7\3\u0084\b"; public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray()); static { diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCParser.g4 b/src/main/java/dk/camelot64/kickc/parser/KickCParser.g4 index 9cf570df4..50ae80833 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCParser.g4 +++ b/src/main/java/dk/camelot64/kickc/parser/KickCParser.g4 @@ -66,8 +66,13 @@ declVariableList ; declVariableInit - : NAME ('=' expr)? #declVariableInitExpr - | NAME '=' declKasm #declVariableInitKasm + : declVariable ('=' expr)? #declVariableInitExpr + | declVariable '=' declKasm #declVariableInitKasm + ; + +declVariable + : NAME #declVariableName + | declVariable BRACKET_BEGIN (expr)? BRACKET_END #declVariableArray ; declFunction diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCParser.java b/src/main/java/dk/camelot64/kickc/parser/KickCParser.java index 6551fc67d..c9a5df8ff 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCParser.java +++ b/src/main/java/dk/camelot64/kickc/parser/KickCParser.java @@ -27,45 +27,45 @@ public class KickCParser extends Parser { GREATER_THAN_EQUAL=32, GREATER_THAN=33, LOGIC_AND=34, LOGIC_OR=35, ASSIGN=36, ASSIGN_COMPOUND=37, IMPORT=38, TYPEDEF=39, PRAGMA=40, RESERVE=41, PC=42, TARGET=43, LINK=44, CPU=45, CODESEG=46, DATASEG=47, ENCODING=48, CONST=49, - EXTERN=50, EXPORT=51, ALIGN=52, INLINE=53, VOLATILE=54, INTERRUPT=55, - REGISTER=56, ADDRESS=57, ADDRESS_ZEROPAGE=58, ADDRESS_MAINMEM=59, FORM_SSA=60, - FORM_MA=61, CALLING=62, CALLINGCONVENTION=63, VARMODEL=64, IF=65, ELSE=66, - WHILE=67, DO=68, FOR=69, SWITCH=70, RETURN=71, BREAK=72, CONTINUE=73, - ASM=74, DEFAULT=75, CASE=76, STRUCT=77, ENUM=78, SIZEOF=79, TYPEID=80, - KICKASM=81, RESOURCE=82, USES=83, CLOBBERS=84, BYTES=85, CYCLES=86, LOGIC_NOT=87, - SIGNEDNESS=88, SIMPLETYPE=89, BOOLEAN=90, KICKASM_BODY=91, STRING=92, - CHAR=93, NUMBER=94, NUMFLOAT=95, BINFLOAT=96, DECFLOAT=97, HEXFLOAT=98, - NUMINT=99, BININTEGER=100, DECINTEGER=101, HEXINTEGER=102, NAME=103, WS=104, - COMMENT_LINE=105, COMMENT_BLOCK=106, ASM_BYTE=107, ASM_MNEMONIC=108, ASM_IMM=109, - ASM_COLON=110, ASM_COMMA=111, ASM_PAR_BEGIN=112, ASM_PAR_END=113, ASM_BRACKET_BEGIN=114, - ASM_BRACKET_END=115, ASM_DOT=116, ASM_SHIFT_LEFT=117, ASM_SHIFT_RIGHT=118, - ASM_PLUS=119, ASM_MINUS=120, ASM_LESS_THAN=121, ASM_GREATER_THAN=122, - ASM_MULTIPLY=123, ASM_DIVIDE=124, ASM_CURLY_BEGIN=125, ASM_CURLY_END=126, - ASM_NUMBER=127, ASM_NUMFLOAT=128, ASM_BINFLOAT=129, ASM_DECFLOAT=130, - ASM_HEXFLOAT=131, ASM_NUMINT=132, ASM_BININTEGER=133, ASM_DECINTEGER=134, - ASM_HEXINTEGER=135, ASM_CHAR=136, ASM_MULTI_REL=137, ASM_MULTI_NAME=138, - ASM_NAME=139, ASM_WS=140, ASM_COMMENT_LINE=141, ASM_COMMENT_BLOCK=142, - STATIC=143; + EXTERN=50, EXPORT=51, ALIGN=52, INLINE=53, VOLATILE=54, STATIC=55, INTERRUPT=56, + REGISTER=57, ADDRESS=58, ADDRESS_ZEROPAGE=59, ADDRESS_MAINMEM=60, FORM_SSA=61, + FORM_MA=62, CALLING=63, CALLINGCONVENTION=64, VARMODEL=65, IF=66, ELSE=67, + WHILE=68, DO=69, FOR=70, SWITCH=71, RETURN=72, BREAK=73, CONTINUE=74, + ASM=75, DEFAULT=76, CASE=77, STRUCT=78, ENUM=79, SIZEOF=80, TYPEID=81, + KICKASM=82, RESOURCE=83, USES=84, CLOBBERS=85, BYTES=86, CYCLES=87, LOGIC_NOT=88, + SIGNEDNESS=89, SIMPLETYPE=90, BOOLEAN=91, KICKASM_BODY=92, STRING=93, + CHAR=94, NUMBER=95, NUMFLOAT=96, BINFLOAT=97, DECFLOAT=98, HEXFLOAT=99, + NUMINT=100, BININTEGER=101, DECINTEGER=102, HEXINTEGER=103, NAME=104, + WS=105, COMMENT_LINE=106, COMMENT_BLOCK=107, ASM_BYTE=108, ASM_MNEMONIC=109, + ASM_IMM=110, ASM_COLON=111, ASM_COMMA=112, ASM_PAR_BEGIN=113, ASM_PAR_END=114, + ASM_BRACKET_BEGIN=115, ASM_BRACKET_END=116, ASM_DOT=117, ASM_SHIFT_LEFT=118, + ASM_SHIFT_RIGHT=119, ASM_PLUS=120, ASM_MINUS=121, ASM_LESS_THAN=122, ASM_GREATER_THAN=123, + ASM_MULTIPLY=124, ASM_DIVIDE=125, ASM_CURLY_BEGIN=126, ASM_CURLY_END=127, + ASM_NUMBER=128, ASM_NUMFLOAT=129, ASM_BINFLOAT=130, ASM_DECFLOAT=131, + ASM_HEXFLOAT=132, ASM_NUMINT=133, ASM_BININTEGER=134, ASM_DECINTEGER=135, + ASM_HEXINTEGER=136, ASM_CHAR=137, ASM_MULTI_REL=138, ASM_MULTI_NAME=139, + ASM_NAME=140, ASM_WS=141, ASM_COMMENT_LINE=142, ASM_COMMENT_BLOCK=143; public static final int RULE_file = 0, RULE_asmFile = 1, RULE_declSeq = 2, RULE_declOrImport = 3, RULE_importDecl = 4, RULE_decl = 5, RULE_typeDef = 6, RULE_declTypes = 7, RULE_declVariables = 8, RULE_declVariableList = 9, RULE_declVariableInit = 10, - RULE_declFunction = 11, RULE_parameterListDecl = 12, RULE_parameterDecl = 13, - RULE_globalDirective = 14, RULE_directive = 15, RULE_stmtSeq = 16, RULE_stmt = 17, - RULE_switchCases = 18, RULE_switchCase = 19, RULE_forLoop = 20, RULE_forClassicInit = 21, - RULE_typeDecl = 22, RULE_structRef = 23, RULE_structDef = 24, RULE_structMembers = 25, - RULE_enumRef = 26, RULE_enumDef = 27, RULE_enumMemberList = 28, RULE_enumMember = 29, - RULE_commaExpr = 30, RULE_expr = 31, RULE_parameterList = 32, RULE_declKasm = 33, - RULE_asmDirectives = 34, RULE_asmDirective = 35, RULE_asmLines = 36, RULE_asmLine = 37, - RULE_asmLabel = 38, RULE_asmInstruction = 39, RULE_asmBytes = 40, RULE_asmParamMode = 41, - RULE_asmExpr = 42; + RULE_declVariable = 11, RULE_declFunction = 12, RULE_parameterListDecl = 13, + RULE_parameterDecl = 14, RULE_globalDirective = 15, RULE_directive = 16, + RULE_stmtSeq = 17, RULE_stmt = 18, RULE_switchCases = 19, RULE_switchCase = 20, + RULE_forLoop = 21, RULE_forClassicInit = 22, RULE_typeDecl = 23, RULE_structRef = 24, + RULE_structDef = 25, RULE_structMembers = 26, RULE_enumRef = 27, RULE_enumDef = 28, + RULE_enumMemberList = 29, RULE_enumMember = 30, RULE_commaExpr = 31, RULE_expr = 32, + RULE_parameterList = 33, RULE_declKasm = 34, RULE_asmDirectives = 35, + RULE_asmDirective = 36, RULE_asmLines = 37, RULE_asmLine = 38, RULE_asmLabel = 39, + RULE_asmInstruction = 40, RULE_asmBytes = 41, RULE_asmParamMode = 42, + RULE_asmExpr = 43; private static String[] makeRuleNames() { return new String[] { "file", "asmFile", "declSeq", "declOrImport", "importDecl", "decl", "typeDef", "declTypes", "declVariables", "declVariableList", "declVariableInit", - "declFunction", "parameterListDecl", "parameterDecl", "globalDirective", - "directive", "stmtSeq", "stmt", "switchCases", "switchCase", "forLoop", - "forClassicInit", "typeDecl", "structRef", "structDef", "structMembers", + "declVariable", "declFunction", "parameterListDecl", "parameterDecl", + "globalDirective", "directive", "stmtSeq", "stmt", "switchCases", "switchCase", + "forLoop", "forClassicInit", "typeDecl", "structRef", "structDef", "structMembers", "enumRef", "enumDef", "enumMemberList", "enumMember", "commaExpr", "expr", "parameterList", "declKasm", "asmDirectives", "asmDirective", "asmLines", "asmLine", "asmLabel", "asmInstruction", "asmBytes", "asmParamMode", @@ -82,13 +82,14 @@ public class KickCParser extends Parser { null, "'&&'", "'||'", "'='", null, "'import'", "'typedef'", "'#pragma'", "'reserve'", "'pc'", "'target'", "'link'", "'cpu'", "'code_seg'", "'data_seg'", "'encoding'", "'const'", "'extern'", "'export'", "'align'", "'inline'", - "'volatile'", "'interrupt'", "'register'", "'__address'", "'__zp'", "'__mem'", - "'__ssa'", "'__ma'", "'calling'", null, "'var_model'", "'if'", "'else'", - "'while'", "'do'", "'for'", "'switch'", "'return'", "'break'", "'continue'", - "'asm'", "'default'", "'case'", "'struct'", "'enum'", "'sizeof'", "'typeid'", - "'kickasm'", "'resource'", "'uses'", "'clobbers'", "'bytes'", "'cycles'", - "'!'", null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, "'.byte'", null, "'#'" + "'volatile'", "'static'", "'interrupt'", "'register'", "'__address'", + "'__zp'", "'__mem'", "'__ssa'", "'__ma'", "'calling'", null, "'var_model'", + "'if'", "'else'", "'while'", "'do'", "'for'", "'switch'", "'return'", + "'break'", "'continue'", "'asm'", "'default'", "'case'", "'struct'", + "'enum'", "'sizeof'", "'typeid'", "'kickasm'", "'resource'", "'uses'", + "'clobbers'", "'bytes'", "'cycles'", "'!'", null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, "'.byte'", null, "'#'" }; } private static final String[] _LITERAL_NAMES = makeLiteralNames(); @@ -102,7 +103,7 @@ public class KickCParser extends Parser { "GREATER_THAN", "LOGIC_AND", "LOGIC_OR", "ASSIGN", "ASSIGN_COMPOUND", "IMPORT", "TYPEDEF", "PRAGMA", "RESERVE", "PC", "TARGET", "LINK", "CPU", "CODESEG", "DATASEG", "ENCODING", "CONST", "EXTERN", "EXPORT", "ALIGN", - "INLINE", "VOLATILE", "INTERRUPT", "REGISTER", "ADDRESS", "ADDRESS_ZEROPAGE", + "INLINE", "VOLATILE", "STATIC", "INTERRUPT", "REGISTER", "ADDRESS", "ADDRESS_ZEROPAGE", "ADDRESS_MAINMEM", "FORM_SSA", "FORM_MA", "CALLING", "CALLINGCONVENTION", "VARMODEL", "IF", "ELSE", "WHILE", "DO", "FOR", "SWITCH", "RETURN", "BREAK", "CONTINUE", "ASM", "DEFAULT", "CASE", "STRUCT", "ENUM", "SIZEOF", "TYPEID", @@ -116,8 +117,7 @@ public class KickCParser extends Parser { "ASM_MULTIPLY", "ASM_DIVIDE", "ASM_CURLY_BEGIN", "ASM_CURLY_END", "ASM_NUMBER", "ASM_NUMFLOAT", "ASM_BINFLOAT", "ASM_DECFLOAT", "ASM_HEXFLOAT", "ASM_NUMINT", "ASM_BININTEGER", "ASM_DECINTEGER", "ASM_HEXINTEGER", "ASM_CHAR", "ASM_MULTI_REL", - "ASM_MULTI_NAME", "ASM_NAME", "ASM_WS", "ASM_COMMENT_LINE", "ASM_COMMENT_BLOCK", - "STATIC" + "ASM_MULTI_NAME", "ASM_NAME", "ASM_WS", "ASM_COMMENT_LINE", "ASM_COMMENT_BLOCK" }; } private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); @@ -210,9 +210,9 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(86); + setState(88); declSeq(); - setState(87); + setState(89); match(EOF); } } @@ -257,9 +257,9 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(89); + setState(91); asmLines(); - setState(90); + setState(92); match(EOF); } } @@ -307,17 +307,17 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(95); + setState(97); _errHandler.sync(this); _la = _input.LA(1); - while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << PAR_BEGIN) | (1L << IMPORT) | (1L << TYPEDEF) | (1L << PRAGMA) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA) | (1L << CALLINGCONVENTION))) != 0) || ((((_la - 77)) & ~0x3f) == 0 && ((1L << (_la - 77)) & ((1L << (STRUCT - 77)) | (1L << (ENUM - 77)) | (1L << (KICKASM - 77)) | (1L << (SIGNEDNESS - 77)) | (1L << (SIMPLETYPE - 77)))) != 0) || _la==STATIC) { + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << PAR_BEGIN) | (1L << IMPORT) | (1L << TYPEDEF) | (1L << PRAGMA) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << STATIC) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (CALLINGCONVENTION - 64)) | (1L << (STRUCT - 64)) | (1L << (ENUM - 64)) | (1L << (KICKASM - 64)) | (1L << (SIGNEDNESS - 64)) | (1L << (SIMPLETYPE - 64)))) != 0)) { { { - setState(92); + setState(94); declOrImport(); } } - setState(97); + setState(99); _errHandler.sync(this); _la = _input.LA(1); } @@ -364,7 +364,7 @@ public class KickCParser extends Parser { DeclOrImportContext _localctx = new DeclOrImportContext(_ctx, getState()); enterRule(_localctx, 6, RULE_declOrImport); try { - setState(100); + setState(102); _errHandler.sync(this); switch (_input.LA(1)) { case TYPEDEFNAME: @@ -378,6 +378,7 @@ public class KickCParser extends Parser { case ALIGN: case INLINE: case VOLATILE: + case STATIC: case INTERRUPT: case REGISTER: case ADDRESS: @@ -391,17 +392,16 @@ public class KickCParser extends Parser { case KICKASM: case SIGNEDNESS: case SIMPLETYPE: - case STATIC: enterOuterAlt(_localctx, 1); { - setState(98); + setState(100); decl(); } break; case IMPORT: enterOuterAlt(_localctx, 2); { - setState(99); + setState(101); importDecl(); } break; @@ -448,9 +448,9 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(102); + setState(104); match(IMPORT); - setState(103); + setState(105); match(STRING); } } @@ -511,63 +511,63 @@ public class KickCParser extends Parser { DeclContext _localctx = new DeclContext(_ctx, getState()); enterRule(_localctx, 10, RULE_decl); try { - setState(120); + setState(122); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,2,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(105); + setState(107); declVariables(); - setState(106); + setState(108); match(SEMICOLON); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(108); + setState(110); structDef(); - setState(109); + setState(111); match(SEMICOLON); } break; case 3: enterOuterAlt(_localctx, 3); { - setState(111); + setState(113); enumDef(); - setState(112); + setState(114); match(SEMICOLON); } break; case 4: enterOuterAlt(_localctx, 4); { - setState(114); + setState(116); declFunction(); } break; case 5: enterOuterAlt(_localctx, 5); { - setState(115); + setState(117); declKasm(); } break; case 6: enterOuterAlt(_localctx, 6); { - setState(116); + setState(118); globalDirective(); } break; case 7: enterOuterAlt(_localctx, 7); { - setState(117); + setState(119); typeDef(); - setState(118); + setState(120); match(SEMICOLON); } break; @@ -616,11 +616,11 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(122); - match(TYPEDEF); - setState(123); - typeDecl(0); setState(124); + match(TYPEDEF); + setState(125); + typeDecl(0); + setState(126); ((TypeDefContext)_localctx).NAME = match(NAME); cParser.addTypedef((((TypeDefContext)_localctx).NAME!=null?((TypeDefContext)_localctx).NAME.getText():null)); } @@ -672,33 +672,33 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(130); + setState(132); _errHandler.sync(this); _la = _input.LA(1); - while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA) | (1L << CALLINGCONVENTION))) != 0) || _la==STATIC) { + while (((((_la - 41)) & ~0x3f) == 0 && ((1L << (_la - 41)) & ((1L << (RESERVE - 41)) | (1L << (CONST - 41)) | (1L << (EXTERN - 41)) | (1L << (EXPORT - 41)) | (1L << (ALIGN - 41)) | (1L << (INLINE - 41)) | (1L << (VOLATILE - 41)) | (1L << (STATIC - 41)) | (1L << (INTERRUPT - 41)) | (1L << (REGISTER - 41)) | (1L << (ADDRESS - 41)) | (1L << (ADDRESS_ZEROPAGE - 41)) | (1L << (ADDRESS_MAINMEM - 41)) | (1L << (FORM_SSA - 41)) | (1L << (FORM_MA - 41)) | (1L << (CALLINGCONVENTION - 41)))) != 0)) { { { - setState(127); + setState(129); directive(); } } - setState(132); + setState(134); _errHandler.sync(this); _la = _input.LA(1); } - setState(133); + setState(135); typeDecl(0); - setState(137); + setState(139); _errHandler.sync(this); _la = _input.LA(1); - while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA) | (1L << CALLINGCONVENTION))) != 0) || _la==STATIC) { + while (((((_la - 41)) & ~0x3f) == 0 && ((1L << (_la - 41)) & ((1L << (RESERVE - 41)) | (1L << (CONST - 41)) | (1L << (EXTERN - 41)) | (1L << (EXPORT - 41)) | (1L << (ALIGN - 41)) | (1L << (INLINE - 41)) | (1L << (VOLATILE - 41)) | (1L << (STATIC - 41)) | (1L << (INTERRUPT - 41)) | (1L << (REGISTER - 41)) | (1L << (ADDRESS - 41)) | (1L << (ADDRESS_ZEROPAGE - 41)) | (1L << (ADDRESS_MAINMEM - 41)) | (1L << (FORM_SSA - 41)) | (1L << (FORM_MA - 41)) | (1L << (CALLINGCONVENTION - 41)))) != 0)) { { { - setState(134); + setState(136); directive(); } } - setState(139); + setState(141); _errHandler.sync(this); _la = _input.LA(1); } @@ -747,9 +747,9 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(140); + setState(142); declTypes(); - setState(141); + setState(143); declVariableList(0); } } @@ -807,11 +807,11 @@ public class KickCParser extends Parser { enterOuterAlt(_localctx, 1); { { - setState(144); + setState(146); declVariableInit(); } _ctx.stop = _input.LT(-1); - setState(151); + setState(153); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,5,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { @@ -822,16 +822,16 @@ public class KickCParser extends Parser { { _localctx = new DeclVariableListContext(_parentctx, _parentState); pushNewRecursionContext(_localctx, _startState, RULE_declVariableList); - setState(146); - if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); - setState(147); - match(COMMA); setState(148); + if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); + setState(149); + match(COMMA); + setState(150); declVariableInit(); } } } - setState(153); + setState(155); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,5,_ctx); } @@ -860,7 +860,9 @@ public class KickCParser extends Parser { } } public static class DeclVariableInitKasmContext extends DeclVariableInitContext { - public TerminalNode NAME() { return getToken(KickCParser.NAME, 0); } + public DeclVariableContext declVariable() { + return getRuleContext(DeclVariableContext.class,0); + } public TerminalNode ASSIGN() { return getToken(KickCParser.ASSIGN, 0); } public DeclKasmContext declKasm() { return getRuleContext(DeclKasmContext.class,0); @@ -881,7 +883,9 @@ public class KickCParser extends Parser { } } public static class DeclVariableInitExprContext extends DeclVariableInitContext { - public TerminalNode NAME() { return getToken(KickCParser.NAME, 0); } + public DeclVariableContext declVariable() { + return getRuleContext(DeclVariableContext.class,0); + } public TerminalNode ASSIGN() { return getToken(KickCParser.ASSIGN, 0); } public ExprContext expr() { return getRuleContext(ExprContext.class,0); @@ -906,23 +910,23 @@ public class KickCParser extends Parser { DeclVariableInitContext _localctx = new DeclVariableInitContext(_ctx, getState()); enterRule(_localctx, 20, RULE_declVariableInit); try { - setState(162); + setState(165); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,7,_ctx) ) { case 1: _localctx = new DeclVariableInitExprContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(154); - match(NAME); - setState(157); + setState(156); + declVariable(0); + setState(159); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,6,_ctx) ) { case 1: { - setState(155); + setState(157); match(ASSIGN); - setState(156); + setState(158); expr(0); } break; @@ -933,11 +937,11 @@ public class KickCParser extends Parser { _localctx = new DeclVariableInitKasmContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(159); - match(NAME); - setState(160); - match(ASSIGN); setState(161); + declVariable(0); + setState(162); + match(ASSIGN); + setState(163); declKasm(); } break; @@ -954,6 +958,131 @@ public class KickCParser extends Parser { return _localctx; } + public static class DeclVariableContext extends ParserRuleContext { + public DeclVariableContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_declVariable; } + + public DeclVariableContext() { } + public void copyFrom(DeclVariableContext ctx) { + super.copyFrom(ctx); + } + } + public static class DeclVariableArrayContext extends DeclVariableContext { + public DeclVariableContext declVariable() { + return getRuleContext(DeclVariableContext.class,0); + } + public TerminalNode BRACKET_BEGIN() { return getToken(KickCParser.BRACKET_BEGIN, 0); } + public TerminalNode BRACKET_END() { return getToken(KickCParser.BRACKET_END, 0); } + public ExprContext expr() { + return getRuleContext(ExprContext.class,0); + } + public DeclVariableArrayContext(DeclVariableContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KickCParserListener ) ((KickCParserListener)listener).enterDeclVariableArray(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KickCParserListener ) ((KickCParserListener)listener).exitDeclVariableArray(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof KickCParserVisitor ) return ((KickCParserVisitor)visitor).visitDeclVariableArray(this); + else return visitor.visitChildren(this); + } + } + public static class DeclVariableNameContext extends DeclVariableContext { + public TerminalNode NAME() { return getToken(KickCParser.NAME, 0); } + public DeclVariableNameContext(DeclVariableContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KickCParserListener ) ((KickCParserListener)listener).enterDeclVariableName(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KickCParserListener ) ((KickCParserListener)listener).exitDeclVariableName(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof KickCParserVisitor ) return ((KickCParserVisitor)visitor).visitDeclVariableName(this); + else return visitor.visitChildren(this); + } + } + + public final DeclVariableContext declVariable() throws RecognitionException { + return declVariable(0); + } + + private DeclVariableContext declVariable(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + DeclVariableContext _localctx = new DeclVariableContext(_ctx, _parentState); + DeclVariableContext _prevctx = _localctx; + int _startState = 22; + enterRecursionRule(_localctx, 22, RULE_declVariable, _p); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + { + _localctx = new DeclVariableNameContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + + setState(168); + match(NAME); + } + _ctx.stop = _input.LT(-1); + setState(178); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,9,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + { + _localctx = new DeclVariableArrayContext(new DeclVariableContext(_parentctx, _parentState)); + pushNewRecursionContext(_localctx, _startState, RULE_declVariable); + setState(170); + if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); + setState(171); + match(BRACKET_BEGIN); + setState(173); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN))) != 0) || ((((_la - 80)) & ~0x3f) == 0 && ((1L << (_la - 80)) & ((1L << (SIZEOF - 80)) | (1L << (TYPEID - 80)) | (1L << (LOGIC_NOT - 80)) | (1L << (BOOLEAN - 80)) | (1L << (STRING - 80)) | (1L << (CHAR - 80)) | (1L << (NUMBER - 80)) | (1L << (NAME - 80)))) != 0)) { + { + setState(172); + expr(0); + } + } + + setState(175); + match(BRACKET_END); + } + } + } + setState(180); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,9,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + public static class DeclFunctionContext extends ParserRuleContext { public DeclTypesContext declTypes() { return getRuleContext(DeclTypesContext.class,0); @@ -990,42 +1119,42 @@ public class KickCParser extends Parser { public final DeclFunctionContext declFunction() throws RecognitionException { DeclFunctionContext _localctx = new DeclFunctionContext(_ctx, getState()); - enterRule(_localctx, 22, RULE_declFunction); + enterRule(_localctx, 24, RULE_declFunction); int _la; try { enterOuterAlt(_localctx, 1); { - setState(164); + setState(181); declTypes(); - setState(165); + setState(182); match(NAME); - setState(166); + setState(183); match(PAR_BEGIN); - setState(168); + setState(185); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << PAR_BEGIN) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA) | (1L << CALLINGCONVENTION))) != 0) || ((((_la - 77)) & ~0x3f) == 0 && ((1L << (_la - 77)) & ((1L << (STRUCT - 77)) | (1L << (ENUM - 77)) | (1L << (SIGNEDNESS - 77)) | (1L << (SIMPLETYPE - 77)))) != 0) || _la==STATIC) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << PAR_BEGIN) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << STATIC) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (CALLINGCONVENTION - 64)) | (1L << (STRUCT - 64)) | (1L << (ENUM - 64)) | (1L << (SIGNEDNESS - 64)) | (1L << (SIMPLETYPE - 64)))) != 0)) { { - setState(167); + setState(184); parameterListDecl(); } } - setState(170); + setState(187); match(PAR_END); - setState(171); + setState(188); match(CURLY_BEGIN); - setState(173); + setState(190); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA) | (1L << CALLINGCONVENTION))) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & ((1L << (IF - 65)) | (1L << (WHILE - 65)) | (1L << (DO - 65)) | (1L << (FOR - 65)) | (1L << (SWITCH - 65)) | (1L << (RETURN - 65)) | (1L << (BREAK - 65)) | (1L << (CONTINUE - 65)) | (1L << (ASM - 65)) | (1L << (STRUCT - 65)) | (1L << (ENUM - 65)) | (1L << (SIZEOF - 65)) | (1L << (TYPEID - 65)) | (1L << (KICKASM - 65)) | (1L << (LOGIC_NOT - 65)) | (1L << (SIGNEDNESS - 65)) | (1L << (SIMPLETYPE - 65)) | (1L << (BOOLEAN - 65)) | (1L << (STRING - 65)) | (1L << (CHAR - 65)) | (1L << (NUMBER - 65)) | (1L << (NAME - 65)))) != 0) || _la==STATIC) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << STATIC) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (CALLINGCONVENTION - 64)) | (1L << (IF - 64)) | (1L << (WHILE - 64)) | (1L << (DO - 64)) | (1L << (FOR - 64)) | (1L << (SWITCH - 64)) | (1L << (RETURN - 64)) | (1L << (BREAK - 64)) | (1L << (CONTINUE - 64)) | (1L << (ASM - 64)) | (1L << (STRUCT - 64)) | (1L << (ENUM - 64)) | (1L << (SIZEOF - 64)) | (1L << (TYPEID - 64)) | (1L << (KICKASM - 64)) | (1L << (LOGIC_NOT - 64)) | (1L << (SIGNEDNESS - 64)) | (1L << (SIMPLETYPE - 64)) | (1L << (BOOLEAN - 64)) | (1L << (STRING - 64)) | (1L << (CHAR - 64)) | (1L << (NUMBER - 64)) | (1L << (NAME - 64)))) != 0)) { { - setState(172); + setState(189); stmtSeq(); } } - setState(175); + setState(192); match(CURLY_END); } } @@ -1072,26 +1201,26 @@ public class KickCParser extends Parser { public final ParameterListDeclContext parameterListDecl() throws RecognitionException { ParameterListDeclContext _localctx = new ParameterListDeclContext(_ctx, getState()); - enterRule(_localctx, 24, RULE_parameterListDecl); + enterRule(_localctx, 26, RULE_parameterListDecl); int _la; try { enterOuterAlt(_localctx, 1); { - setState(177); + setState(194); parameterDecl(); - setState(182); + setState(199); _errHandler.sync(this); _la = _input.LA(1); while (_la==COMMA) { { { - setState(178); + setState(195); match(COMMA); - setState(179); + setState(196); parameterDecl(); } } - setState(184); + setState(201); _errHandler.sync(this); _la = _input.LA(1); } @@ -1159,18 +1288,18 @@ public class KickCParser extends Parser { public final ParameterDeclContext parameterDecl() throws RecognitionException { ParameterDeclContext _localctx = new ParameterDeclContext(_ctx, getState()); - enterRule(_localctx, 26, RULE_parameterDecl); + enterRule(_localctx, 28, RULE_parameterDecl); try { - setState(189); + setState(206); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,11,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,13,_ctx) ) { case 1: _localctx = new ParameterDeclTypeContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(185); + setState(202); declTypes(); - setState(186); + setState(203); match(NAME); } break; @@ -1178,7 +1307,7 @@ public class KickCParser extends Parser { _localctx = new ParameterDeclVoidContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(188); + setState(205); match(SIMPLETYPE); } break; @@ -1433,43 +1562,43 @@ public class KickCParser extends Parser { public final GlobalDirectiveContext globalDirective() throws RecognitionException { GlobalDirectiveContext _localctx = new GlobalDirectiveContext(_ctx, getState()); - enterRule(_localctx, 28, RULE_globalDirective); + enterRule(_localctx, 30, RULE_globalDirective); int _la; try { - setState(265); + setState(282); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,14,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,16,_ctx) ) { case 1: _localctx = new GlobalDirectiveReserveContext(_localctx); enterOuterAlt(_localctx, 1); { { - setState(191); + setState(208); match(PRAGMA); - setState(192); + setState(209); match(RESERVE); } - setState(194); + setState(211); match(PAR_BEGIN); - setState(195); + setState(212); match(NUMBER); - setState(200); + setState(217); _errHandler.sync(this); _la = _input.LA(1); while (_la==COMMA) { { { - setState(196); + setState(213); match(COMMA); - setState(197); + setState(214); match(NUMBER); } } - setState(202); + setState(219); _errHandler.sync(this); _la = _input.LA(1); } - setState(203); + setState(220); match(PAR_END); } break; @@ -1478,16 +1607,16 @@ public class KickCParser extends Parser { enterOuterAlt(_localctx, 2); { { - setState(204); + setState(221); match(PRAGMA); - setState(205); + setState(222); match(PC); } - setState(207); + setState(224); match(PAR_BEGIN); - setState(208); + setState(225); match(NUMBER); - setState(209); + setState(226); match(PAR_END); } break; @@ -1496,16 +1625,16 @@ public class KickCParser extends Parser { enterOuterAlt(_localctx, 3); { { - setState(210); + setState(227); match(PRAGMA); - setState(211); + setState(228); match(TARGET); } - setState(213); + setState(230); match(PAR_BEGIN); - setState(214); + setState(231); match(NAME); - setState(215); + setState(232); match(PAR_END); } break; @@ -1514,16 +1643,16 @@ public class KickCParser extends Parser { enterOuterAlt(_localctx, 4); { { - setState(216); + setState(233); match(PRAGMA); - setState(217); + setState(234); match(CPU); } - setState(219); + setState(236); match(PAR_BEGIN); - setState(220); + setState(237); match(NAME); - setState(221); + setState(238); match(PAR_END); } break; @@ -1532,16 +1661,16 @@ public class KickCParser extends Parser { enterOuterAlt(_localctx, 5); { { - setState(222); + setState(239); match(PRAGMA); - setState(223); + setState(240); match(LINK); } - setState(225); + setState(242); match(PAR_BEGIN); - setState(226); + setState(243); match(STRING); - setState(227); + setState(244); match(PAR_END); } break; @@ -1550,16 +1679,16 @@ public class KickCParser extends Parser { enterOuterAlt(_localctx, 6); { { - setState(228); + setState(245); match(PRAGMA); - setState(229); + setState(246); match(CODESEG); } - setState(231); + setState(248); match(PAR_BEGIN); - setState(232); + setState(249); match(NAME); - setState(233); + setState(250); match(PAR_END); } break; @@ -1568,16 +1697,16 @@ public class KickCParser extends Parser { enterOuterAlt(_localctx, 7); { { - setState(234); + setState(251); match(PRAGMA); - setState(235); + setState(252); match(DATASEG); } - setState(237); + setState(254); match(PAR_BEGIN); - setState(238); + setState(255); match(NAME); - setState(239); + setState(256); match(PAR_END); } break; @@ -1586,16 +1715,16 @@ public class KickCParser extends Parser { enterOuterAlt(_localctx, 8); { { - setState(240); + setState(257); match(PRAGMA); - setState(241); + setState(258); match(ENCODING); } - setState(243); + setState(260); match(PAR_BEGIN); - setState(244); + setState(261); match(NAME); - setState(245); + setState(262); match(PAR_END); } break; @@ -1604,16 +1733,16 @@ public class KickCParser extends Parser { enterOuterAlt(_localctx, 9); { { - setState(246); + setState(263); match(PRAGMA); - setState(247); + setState(264); match(CALLING); } - setState(249); + setState(266); match(PAR_BEGIN); - setState(250); + setState(267); match(CALLINGCONVENTION); - setState(251); + setState(268); match(PAR_END); } break; @@ -1622,32 +1751,32 @@ public class KickCParser extends Parser { enterOuterAlt(_localctx, 10); { { - setState(252); + setState(269); match(PRAGMA); - setState(253); + setState(270); match(VARMODEL); } - setState(255); + setState(272); match(PAR_BEGIN); - setState(256); + setState(273); match(NAME); - setState(261); + setState(278); _errHandler.sync(this); _la = _input.LA(1); while (_la==COMMA) { { { - setState(257); + setState(274); match(COMMA); - setState(258); + setState(275); match(NAME); } } - setState(263); + setState(280); _errHandler.sync(this); _la = _input.LA(1); } - setState(264); + setState(281); match(PAR_END); } break; @@ -1972,17 +2101,17 @@ public class KickCParser extends Parser { public final DirectiveContext directive() throws RecognitionException { DirectiveContext _localctx = new DirectiveContext(_ctx, getState()); - enterRule(_localctx, 30, RULE_directive); + enterRule(_localctx, 32, RULE_directive); int _la; try { - setState(309); + setState(326); _errHandler.sync(this); switch (_input.LA(1)) { case CONST: _localctx = new DirectiveConstContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(267); + setState(284); match(CONST); } break; @@ -1990,13 +2119,13 @@ public class KickCParser extends Parser { _localctx = new DirectiveAlignContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(268); + setState(285); match(ALIGN); - setState(269); + setState(286); match(PAR_BEGIN); - setState(270); + setState(287); match(NUMBER); - setState(271); + setState(288); match(PAR_END); } break; @@ -2004,20 +2133,20 @@ public class KickCParser extends Parser { _localctx = new DirectiveRegisterContext(_localctx); enterOuterAlt(_localctx, 3); { - setState(272); + setState(289); match(REGISTER); - setState(276); + setState(293); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,15,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,17,_ctx) ) { case 1: { - setState(273); + setState(290); match(PAR_BEGIN); { - setState(274); + setState(291); match(NAME); } - setState(275); + setState(292); match(PAR_END); } break; @@ -2028,7 +2157,7 @@ public class KickCParser extends Parser { _localctx = new DirectiveMemoryAreaZpContext(_localctx); enterOuterAlt(_localctx, 4); { - setState(278); + setState(295); match(ADDRESS_ZEROPAGE); } break; @@ -2036,7 +2165,7 @@ public class KickCParser extends Parser { _localctx = new DirectiveMemoryAreaMainContext(_localctx); enterOuterAlt(_localctx, 5); { - setState(279); + setState(296); match(ADDRESS_MAINMEM); } break; @@ -2044,15 +2173,15 @@ public class KickCParser extends Parser { _localctx = new DirectiveMemoryAreaAddressContext(_localctx); enterOuterAlt(_localctx, 6); { - setState(280); + setState(297); match(ADDRESS); - setState(281); + setState(298); match(PAR_BEGIN); { - setState(282); + setState(299); match(NUMBER); } - setState(283); + setState(300); match(PAR_END); } break; @@ -2060,7 +2189,7 @@ public class KickCParser extends Parser { _localctx = new DirectiveVolatileContext(_localctx); enterOuterAlt(_localctx, 7); { - setState(284); + setState(301); match(VOLATILE); } break; @@ -2068,7 +2197,7 @@ public class KickCParser extends Parser { _localctx = new DirectiveStaticContext(_localctx); enterOuterAlt(_localctx, 8); { - setState(285); + setState(302); match(STATIC); } break; @@ -2076,7 +2205,7 @@ public class KickCParser extends Parser { _localctx = new DirectiveFormSsaContext(_localctx); enterOuterAlt(_localctx, 9); { - setState(286); + setState(303); match(FORM_SSA); } break; @@ -2084,7 +2213,7 @@ public class KickCParser extends Parser { _localctx = new DirectiveFormMaContext(_localctx); enterOuterAlt(_localctx, 10); { - setState(287); + setState(304); match(FORM_MA); } break; @@ -2092,7 +2221,7 @@ public class KickCParser extends Parser { _localctx = new DirectiveExternContext(_localctx); enterOuterAlt(_localctx, 11); { - setState(288); + setState(305); match(EXTERN); } break; @@ -2100,7 +2229,7 @@ public class KickCParser extends Parser { _localctx = new DirectiveExportContext(_localctx); enterOuterAlt(_localctx, 12); { - setState(289); + setState(306); match(EXPORT); } break; @@ -2108,7 +2237,7 @@ public class KickCParser extends Parser { _localctx = new DirectiveInlineContext(_localctx); enterOuterAlt(_localctx, 13); { - setState(290); + setState(307); match(INLINE); } break; @@ -2116,18 +2245,18 @@ public class KickCParser extends Parser { _localctx = new DirectiveInterruptContext(_localctx); enterOuterAlt(_localctx, 14); { - setState(291); + setState(308); match(INTERRUPT); - setState(295); + setState(312); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,16,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,18,_ctx) ) { case 1: { - setState(292); + setState(309); match(PAR_BEGIN); - setState(293); + setState(310); match(NAME); - setState(294); + setState(311); match(PAR_END); } break; @@ -2138,29 +2267,29 @@ public class KickCParser extends Parser { _localctx = new DirectiveReserveZpContext(_localctx); enterOuterAlt(_localctx, 15); { - setState(297); + setState(314); match(RESERVE); - setState(298); + setState(315); match(PAR_BEGIN); - setState(299); + setState(316); match(NUMBER); - setState(304); + setState(321); _errHandler.sync(this); _la = _input.LA(1); while (_la==COMMA) { { { - setState(300); + setState(317); match(COMMA); - setState(301); + setState(318); match(NUMBER); } } - setState(306); + setState(323); _errHandler.sync(this); _la = _input.LA(1); } - setState(307); + setState(324); match(PAR_END); } break; @@ -2168,7 +2297,7 @@ public class KickCParser extends Parser { _localctx = new DirectiveCallingConventionContext(_localctx); enterOuterAlt(_localctx, 16); { - setState(308); + setState(325); match(CALLINGCONVENTION); } break; @@ -2215,25 +2344,25 @@ public class KickCParser extends Parser { public final StmtSeqContext stmtSeq() throws RecognitionException { StmtSeqContext _localctx = new StmtSeqContext(_ctx, getState()); - enterRule(_localctx, 32, RULE_stmtSeq); + enterRule(_localctx, 34, RULE_stmtSeq); int _la; try { enterOuterAlt(_localctx, 1); { - setState(312); + setState(329); _errHandler.sync(this); _la = _input.LA(1); do { { { - setState(311); + setState(328); stmt(); } } - setState(314); + setState(331); _errHandler.sync(this); _la = _input.LA(1); - } while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA) | (1L << CALLINGCONVENTION))) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & ((1L << (IF - 65)) | (1L << (WHILE - 65)) | (1L << (DO - 65)) | (1L << (FOR - 65)) | (1L << (SWITCH - 65)) | (1L << (RETURN - 65)) | (1L << (BREAK - 65)) | (1L << (CONTINUE - 65)) | (1L << (ASM - 65)) | (1L << (STRUCT - 65)) | (1L << (ENUM - 65)) | (1L << (SIZEOF - 65)) | (1L << (TYPEID - 65)) | (1L << (KICKASM - 65)) | (1L << (LOGIC_NOT - 65)) | (1L << (SIGNEDNESS - 65)) | (1L << (SIMPLETYPE - 65)) | (1L << (BOOLEAN - 65)) | (1L << (STRING - 65)) | (1L << (CHAR - 65)) | (1L << (NUMBER - 65)) | (1L << (NAME - 65)))) != 0) || _la==STATIC ); + } while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << STATIC) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (CALLINGCONVENTION - 64)) | (1L << (IF - 64)) | (1L << (WHILE - 64)) | (1L << (DO - 64)) | (1L << (FOR - 64)) | (1L << (SWITCH - 64)) | (1L << (RETURN - 64)) | (1L << (BREAK - 64)) | (1L << (CONTINUE - 64)) | (1L << (ASM - 64)) | (1L << (STRUCT - 64)) | (1L << (ENUM - 64)) | (1L << (SIZEOF - 64)) | (1L << (TYPEID - 64)) | (1L << (KICKASM - 64)) | (1L << (LOGIC_NOT - 64)) | (1L << (SIGNEDNESS - 64)) | (1L << (SIMPLETYPE - 64)) | (1L << (BOOLEAN - 64)) | (1L << (STRING - 64)) | (1L << (CHAR - 64)) | (1L << (NUMBER - 64)) | (1L << (NAME - 64)))) != 0) ); } } catch (RecognitionException re) { @@ -2574,19 +2703,19 @@ public class KickCParser extends Parser { public final StmtContext stmt() throws RecognitionException { StmtContext _localctx = new StmtContext(_ctx, getState()); - enterRule(_localctx, 34, RULE_stmt); + enterRule(_localctx, 36, RULE_stmt); int _la; try { - setState(400); + setState(417); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,27,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,29,_ctx) ) { case 1: _localctx = new StmtDeclVarContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(316); + setState(333); declVariables(); - setState(317); + setState(334); match(SEMICOLON); } break; @@ -2594,19 +2723,19 @@ public class KickCParser extends Parser { _localctx = new StmtBlockContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(319); + setState(336); match(CURLY_BEGIN); - setState(321); + setState(338); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA) | (1L << CALLINGCONVENTION))) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & ((1L << (IF - 65)) | (1L << (WHILE - 65)) | (1L << (DO - 65)) | (1L << (FOR - 65)) | (1L << (SWITCH - 65)) | (1L << (RETURN - 65)) | (1L << (BREAK - 65)) | (1L << (CONTINUE - 65)) | (1L << (ASM - 65)) | (1L << (STRUCT - 65)) | (1L << (ENUM - 65)) | (1L << (SIZEOF - 65)) | (1L << (TYPEID - 65)) | (1L << (KICKASM - 65)) | (1L << (LOGIC_NOT - 65)) | (1L << (SIGNEDNESS - 65)) | (1L << (SIMPLETYPE - 65)) | (1L << (BOOLEAN - 65)) | (1L << (STRING - 65)) | (1L << (CHAR - 65)) | (1L << (NUMBER - 65)) | (1L << (NAME - 65)))) != 0) || _la==STATIC) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << STATIC) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (CALLINGCONVENTION - 64)) | (1L << (IF - 64)) | (1L << (WHILE - 64)) | (1L << (DO - 64)) | (1L << (FOR - 64)) | (1L << (SWITCH - 64)) | (1L << (RETURN - 64)) | (1L << (BREAK - 64)) | (1L << (CONTINUE - 64)) | (1L << (ASM - 64)) | (1L << (STRUCT - 64)) | (1L << (ENUM - 64)) | (1L << (SIZEOF - 64)) | (1L << (TYPEID - 64)) | (1L << (KICKASM - 64)) | (1L << (LOGIC_NOT - 64)) | (1L << (SIGNEDNESS - 64)) | (1L << (SIMPLETYPE - 64)) | (1L << (BOOLEAN - 64)) | (1L << (STRING - 64)) | (1L << (CHAR - 64)) | (1L << (NUMBER - 64)) | (1L << (NAME - 64)))) != 0)) { { - setState(320); + setState(337); stmtSeq(); } } - setState(323); + setState(340); match(CURLY_END); } break; @@ -2614,9 +2743,9 @@ public class KickCParser extends Parser { _localctx = new StmtExprContext(_localctx); enterOuterAlt(_localctx, 3); { - setState(324); + setState(341); commaExpr(0); - setState(325); + setState(342); match(SEMICOLON); } break; @@ -2624,24 +2753,24 @@ public class KickCParser extends Parser { _localctx = new StmtIfElseContext(_localctx); enterOuterAlt(_localctx, 4); { - setState(327); + setState(344); match(IF); - setState(328); + setState(345); match(PAR_BEGIN); - setState(329); + setState(346); commaExpr(0); - setState(330); + setState(347); match(PAR_END); - setState(331); + setState(348); stmt(); - setState(334); + setState(351); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,21,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,23,_ctx) ) { case 1: { - setState(332); + setState(349); match(ELSE); - setState(333); + setState(350); stmt(); } break; @@ -2652,29 +2781,29 @@ public class KickCParser extends Parser { _localctx = new StmtWhileContext(_localctx); enterOuterAlt(_localctx, 5); { - setState(339); + setState(356); _errHandler.sync(this); _la = _input.LA(1); - while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA) | (1L << CALLINGCONVENTION))) != 0) || _la==STATIC) { + while (((((_la - 41)) & ~0x3f) == 0 && ((1L << (_la - 41)) & ((1L << (RESERVE - 41)) | (1L << (CONST - 41)) | (1L << (EXTERN - 41)) | (1L << (EXPORT - 41)) | (1L << (ALIGN - 41)) | (1L << (INLINE - 41)) | (1L << (VOLATILE - 41)) | (1L << (STATIC - 41)) | (1L << (INTERRUPT - 41)) | (1L << (REGISTER - 41)) | (1L << (ADDRESS - 41)) | (1L << (ADDRESS_ZEROPAGE - 41)) | (1L << (ADDRESS_MAINMEM - 41)) | (1L << (FORM_SSA - 41)) | (1L << (FORM_MA - 41)) | (1L << (CALLINGCONVENTION - 41)))) != 0)) { { { - setState(336); + setState(353); directive(); } } - setState(341); + setState(358); _errHandler.sync(this); _la = _input.LA(1); } - setState(342); + setState(359); match(WHILE); - setState(343); + setState(360); match(PAR_BEGIN); - setState(344); + setState(361); commaExpr(0); - setState(345); + setState(362); match(PAR_END); - setState(346); + setState(363); stmt(); } break; @@ -2682,33 +2811,33 @@ public class KickCParser extends Parser { _localctx = new StmtDoWhileContext(_localctx); enterOuterAlt(_localctx, 6); { - setState(351); + setState(368); _errHandler.sync(this); _la = _input.LA(1); - while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA) | (1L << CALLINGCONVENTION))) != 0) || _la==STATIC) { + while (((((_la - 41)) & ~0x3f) == 0 && ((1L << (_la - 41)) & ((1L << (RESERVE - 41)) | (1L << (CONST - 41)) | (1L << (EXTERN - 41)) | (1L << (EXPORT - 41)) | (1L << (ALIGN - 41)) | (1L << (INLINE - 41)) | (1L << (VOLATILE - 41)) | (1L << (STATIC - 41)) | (1L << (INTERRUPT - 41)) | (1L << (REGISTER - 41)) | (1L << (ADDRESS - 41)) | (1L << (ADDRESS_ZEROPAGE - 41)) | (1L << (ADDRESS_MAINMEM - 41)) | (1L << (FORM_SSA - 41)) | (1L << (FORM_MA - 41)) | (1L << (CALLINGCONVENTION - 41)))) != 0)) { { { - setState(348); + setState(365); directive(); } } - setState(353); + setState(370); _errHandler.sync(this); _la = _input.LA(1); } - setState(354); + setState(371); match(DO); - setState(355); + setState(372); stmt(); - setState(356); + setState(373); match(WHILE); - setState(357); + setState(374); match(PAR_BEGIN); - setState(358); + setState(375); commaExpr(0); - setState(359); + setState(376); match(PAR_END); - setState(360); + setState(377); match(SEMICOLON); } break; @@ -2716,29 +2845,29 @@ public class KickCParser extends Parser { _localctx = new StmtForContext(_localctx); enterOuterAlt(_localctx, 7); { - setState(365); + setState(382); _errHandler.sync(this); _la = _input.LA(1); - while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA) | (1L << CALLINGCONVENTION))) != 0) || _la==STATIC) { + while (((((_la - 41)) & ~0x3f) == 0 && ((1L << (_la - 41)) & ((1L << (RESERVE - 41)) | (1L << (CONST - 41)) | (1L << (EXTERN - 41)) | (1L << (EXPORT - 41)) | (1L << (ALIGN - 41)) | (1L << (INLINE - 41)) | (1L << (VOLATILE - 41)) | (1L << (STATIC - 41)) | (1L << (INTERRUPT - 41)) | (1L << (REGISTER - 41)) | (1L << (ADDRESS - 41)) | (1L << (ADDRESS_ZEROPAGE - 41)) | (1L << (ADDRESS_MAINMEM - 41)) | (1L << (FORM_SSA - 41)) | (1L << (FORM_MA - 41)) | (1L << (CALLINGCONVENTION - 41)))) != 0)) { { { - setState(362); + setState(379); directive(); } } - setState(367); + setState(384); _errHandler.sync(this); _la = _input.LA(1); } - setState(368); + setState(385); match(FOR); - setState(369); + setState(386); match(PAR_BEGIN); - setState(370); + setState(387); forLoop(); - setState(371); + setState(388); match(PAR_END); - setState(372); + setState(389); stmt(); } break; @@ -2746,19 +2875,19 @@ public class KickCParser extends Parser { _localctx = new StmtSwitchContext(_localctx); enterOuterAlt(_localctx, 8); { - setState(374); + setState(391); match(SWITCH); - setState(375); + setState(392); match(PAR_BEGIN); - setState(376); + setState(393); commaExpr(0); - setState(377); + setState(394); match(PAR_END); - setState(378); + setState(395); match(CURLY_BEGIN); - setState(379); + setState(396); switchCases(); - setState(380); + setState(397); match(CURLY_END); } break; @@ -2766,19 +2895,19 @@ public class KickCParser extends Parser { _localctx = new StmtReturnContext(_localctx); enterOuterAlt(_localctx, 9); { - setState(382); + setState(399); match(RETURN); - setState(384); + setState(401); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN))) != 0) || ((((_la - 79)) & ~0x3f) == 0 && ((1L << (_la - 79)) & ((1L << (SIZEOF - 79)) | (1L << (TYPEID - 79)) | (1L << (LOGIC_NOT - 79)) | (1L << (BOOLEAN - 79)) | (1L << (STRING - 79)) | (1L << (CHAR - 79)) | (1L << (NUMBER - 79)) | (1L << (NAME - 79)))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN))) != 0) || ((((_la - 80)) & ~0x3f) == 0 && ((1L << (_la - 80)) & ((1L << (SIZEOF - 80)) | (1L << (TYPEID - 80)) | (1L << (LOGIC_NOT - 80)) | (1L << (BOOLEAN - 80)) | (1L << (STRING - 80)) | (1L << (CHAR - 80)) | (1L << (NUMBER - 80)) | (1L << (NAME - 80)))) != 0)) { { - setState(383); + setState(400); commaExpr(0); } } - setState(386); + setState(403); match(SEMICOLON); } break; @@ -2786,9 +2915,9 @@ public class KickCParser extends Parser { _localctx = new StmtBreakContext(_localctx); enterOuterAlt(_localctx, 10); { - setState(387); + setState(404); match(BREAK); - setState(388); + setState(405); match(SEMICOLON); } break; @@ -2796,9 +2925,9 @@ public class KickCParser extends Parser { _localctx = new StmtContinueContext(_localctx); enterOuterAlt(_localctx, 11); { - setState(389); + setState(406); match(CONTINUE); - setState(390); + setState(407); match(SEMICOLON); } break; @@ -2806,23 +2935,23 @@ public class KickCParser extends Parser { _localctx = new StmtAsmContext(_localctx); enterOuterAlt(_localctx, 12); { - setState(391); + setState(408); match(ASM); - setState(393); + setState(410); _errHandler.sync(this); _la = _input.LA(1); if (_la==PAR_BEGIN) { { - setState(392); + setState(409); asmDirectives(); } } - setState(395); + setState(412); match(CURLY_BEGIN); - setState(396); + setState(413); asmLines(); - setState(397); + setState(414); match(ASM_CURLY_END); } break; @@ -2830,7 +2959,7 @@ public class KickCParser extends Parser { _localctx = new StmtDeclKasmContext(_localctx); enterOuterAlt(_localctx, 13); { - setState(399); + setState(416); declKasm(); } break; @@ -2880,40 +3009,40 @@ public class KickCParser extends Parser { public final SwitchCasesContext switchCases() throws RecognitionException { SwitchCasesContext _localctx = new SwitchCasesContext(_ctx, getState()); - enterRule(_localctx, 36, RULE_switchCases); + enterRule(_localctx, 38, RULE_switchCases); int _la; try { enterOuterAlt(_localctx, 1); { - setState(403); + setState(420); _errHandler.sync(this); _la = _input.LA(1); do { { { - setState(402); + setState(419); switchCase(); } } - setState(405); + setState(422); _errHandler.sync(this); _la = _input.LA(1); } while ( _la==CASE ); - setState(412); + setState(429); _errHandler.sync(this); _la = _input.LA(1); if (_la==DEFAULT) { { - setState(407); + setState(424); match(DEFAULT); - setState(408); + setState(425); match(COLON); - setState(410); + setState(427); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA) | (1L << CALLINGCONVENTION))) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & ((1L << (IF - 65)) | (1L << (WHILE - 65)) | (1L << (DO - 65)) | (1L << (FOR - 65)) | (1L << (SWITCH - 65)) | (1L << (RETURN - 65)) | (1L << (BREAK - 65)) | (1L << (CONTINUE - 65)) | (1L << (ASM - 65)) | (1L << (STRUCT - 65)) | (1L << (ENUM - 65)) | (1L << (SIZEOF - 65)) | (1L << (TYPEID - 65)) | (1L << (KICKASM - 65)) | (1L << (LOGIC_NOT - 65)) | (1L << (SIGNEDNESS - 65)) | (1L << (SIMPLETYPE - 65)) | (1L << (BOOLEAN - 65)) | (1L << (STRING - 65)) | (1L << (CHAR - 65)) | (1L << (NUMBER - 65)) | (1L << (NAME - 65)))) != 0) || _la==STATIC) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << STATIC) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (CALLINGCONVENTION - 64)) | (1L << (IF - 64)) | (1L << (WHILE - 64)) | (1L << (DO - 64)) | (1L << (FOR - 64)) | (1L << (SWITCH - 64)) | (1L << (RETURN - 64)) | (1L << (BREAK - 64)) | (1L << (CONTINUE - 64)) | (1L << (ASM - 64)) | (1L << (STRUCT - 64)) | (1L << (ENUM - 64)) | (1L << (SIZEOF - 64)) | (1L << (TYPEID - 64)) | (1L << (KICKASM - 64)) | (1L << (LOGIC_NOT - 64)) | (1L << (SIGNEDNESS - 64)) | (1L << (SIMPLETYPE - 64)) | (1L << (BOOLEAN - 64)) | (1L << (STRING - 64)) | (1L << (CHAR - 64)) | (1L << (NUMBER - 64)) | (1L << (NAME - 64)))) != 0)) { { - setState(409); + setState(426); stmtSeq(); } } @@ -2964,23 +3093,23 @@ public class KickCParser extends Parser { public final SwitchCaseContext switchCase() throws RecognitionException { SwitchCaseContext _localctx = new SwitchCaseContext(_ctx, getState()); - enterRule(_localctx, 38, RULE_switchCase); + enterRule(_localctx, 40, RULE_switchCase); int _la; try { enterOuterAlt(_localctx, 1); { - setState(414); + setState(431); match(CASE); - setState(415); + setState(432); expr(0); - setState(416); + setState(433); match(COLON); - setState(418); + setState(435); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA) | (1L << CALLINGCONVENTION))) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & ((1L << (IF - 65)) | (1L << (WHILE - 65)) | (1L << (DO - 65)) | (1L << (FOR - 65)) | (1L << (SWITCH - 65)) | (1L << (RETURN - 65)) | (1L << (BREAK - 65)) | (1L << (CONTINUE - 65)) | (1L << (ASM - 65)) | (1L << (STRUCT - 65)) | (1L << (ENUM - 65)) | (1L << (SIZEOF - 65)) | (1L << (TYPEID - 65)) | (1L << (KICKASM - 65)) | (1L << (LOGIC_NOT - 65)) | (1L << (SIGNEDNESS - 65)) | (1L << (SIMPLETYPE - 65)) | (1L << (BOOLEAN - 65)) | (1L << (STRING - 65)) | (1L << (CHAR - 65)) | (1L << (NUMBER - 65)) | (1L << (NAME - 65)))) != 0) || _la==STATIC) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << STATIC) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (CALLINGCONVENTION - 64)) | (1L << (IF - 64)) | (1L << (WHILE - 64)) | (1L << (DO - 64)) | (1L << (FOR - 64)) | (1L << (SWITCH - 64)) | (1L << (RETURN - 64)) | (1L << (BREAK - 64)) | (1L << (CONTINUE - 64)) | (1L << (ASM - 64)) | (1L << (STRUCT - 64)) | (1L << (ENUM - 64)) | (1L << (SIZEOF - 64)) | (1L << (TYPEID - 64)) | (1L << (KICKASM - 64)) | (1L << (LOGIC_NOT - 64)) | (1L << (SIGNEDNESS - 64)) | (1L << (SIMPLETYPE - 64)) | (1L << (BOOLEAN - 64)) | (1L << (STRING - 64)) | (1L << (CHAR - 64)) | (1L << (NUMBER - 64)) | (1L << (NAME - 64)))) != 0)) { { - setState(417); + setState(434); stmtSeq(); } } @@ -3069,30 +3198,30 @@ public class KickCParser extends Parser { public final ForLoopContext forLoop() throws RecognitionException { ForLoopContext _localctx = new ForLoopContext(_ctx, getState()); - enterRule(_localctx, 40, RULE_forLoop); + enterRule(_localctx, 42, RULE_forLoop); int _la; try { - setState(436); + setState(453); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,34,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,36,_ctx) ) { case 1: _localctx = new ForClassicContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(420); + setState(437); forClassicInit(); - setState(421); + setState(438); match(SEMICOLON); - setState(422); + setState(439); commaExpr(0); - setState(423); + setState(440); match(SEMICOLON); - setState(425); + setState(442); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN))) != 0) || ((((_la - 79)) & ~0x3f) == 0 && ((1L << (_la - 79)) & ((1L << (SIZEOF - 79)) | (1L << (TYPEID - 79)) | (1L << (LOGIC_NOT - 79)) | (1L << (BOOLEAN - 79)) | (1L << (STRING - 79)) | (1L << (CHAR - 79)) | (1L << (NUMBER - 79)) | (1L << (NAME - 79)))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN))) != 0) || ((((_la - 80)) & ~0x3f) == 0 && ((1L << (_la - 80)) & ((1L << (SIZEOF - 80)) | (1L << (TYPEID - 80)) | (1L << (LOGIC_NOT - 80)) | (1L << (BOOLEAN - 80)) | (1L << (STRING - 80)) | (1L << (CHAR - 80)) | (1L << (NUMBER - 80)) | (1L << (NAME - 80)))) != 0)) { { - setState(424); + setState(441); commaExpr(0); } } @@ -3103,25 +3232,25 @@ public class KickCParser extends Parser { _localctx = new ForRangeContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(428); + setState(445); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << PAR_BEGIN) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA) | (1L << CALLINGCONVENTION))) != 0) || ((((_la - 77)) & ~0x3f) == 0 && ((1L << (_la - 77)) & ((1L << (STRUCT - 77)) | (1L << (ENUM - 77)) | (1L << (SIGNEDNESS - 77)) | (1L << (SIMPLETYPE - 77)))) != 0) || _la==STATIC) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << PAR_BEGIN) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << STATIC) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (CALLINGCONVENTION - 64)) | (1L << (STRUCT - 64)) | (1L << (ENUM - 64)) | (1L << (SIGNEDNESS - 64)) | (1L << (SIMPLETYPE - 64)))) != 0)) { { - setState(427); + setState(444); declTypes(); } } - setState(430); + setState(447); match(NAME); - setState(431); + setState(448); match(COLON); - setState(432); + setState(449); expr(0); - setState(433); + setState(450); match(RANGE); - setState(434); + setState(451); expr(0); } break; @@ -3190,22 +3319,22 @@ public class KickCParser extends Parser { public final ForClassicInitContext forClassicInit() throws RecognitionException { ForClassicInitContext _localctx = new ForClassicInitContext(_ctx, getState()); - enterRule(_localctx, 42, RULE_forClassicInit); + enterRule(_localctx, 44, RULE_forClassicInit); int _la; try { - setState(442); + setState(459); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,36,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,38,_ctx) ) { case 1: _localctx = new ForClassicInitDeclContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(439); + setState(456); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << PAR_BEGIN) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA) | (1L << CALLINGCONVENTION))) != 0) || ((((_la - 77)) & ~0x3f) == 0 && ((1L << (_la - 77)) & ((1L << (STRUCT - 77)) | (1L << (ENUM - 77)) | (1L << (SIGNEDNESS - 77)) | (1L << (SIMPLETYPE - 77)))) != 0) || _la==STATIC) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << PAR_BEGIN) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << STATIC) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (CALLINGCONVENTION - 64)) | (1L << (STRUCT - 64)) | (1L << (ENUM - 64)) | (1L << (SIGNEDNESS - 64)) | (1L << (SIMPLETYPE - 64)))) != 0)) { { - setState(438); + setState(455); declVariables(); } } @@ -3216,7 +3345,7 @@ public class KickCParser extends Parser { _localctx = new ForClassicInitExprContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(441); + setState(458); commaExpr(0); } break; @@ -3468,27 +3597,27 @@ public class KickCParser extends Parser { int _parentState = getState(); TypeDeclContext _localctx = new TypeDeclContext(_ctx, _parentState); TypeDeclContext _prevctx = _localctx; - int _startState = 44; - enterRecursionRule(_localctx, 44, RULE_typeDecl, _p); + int _startState = 46; + enterRecursionRule(_localctx, 46, RULE_typeDecl, _p); int _la; try { int _alt; enterOuterAlt(_localctx, 1); { - setState(459); + setState(476); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,38,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,40,_ctx) ) { case 1: { _localctx = new TypeParContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(445); + setState(462); match(PAR_BEGIN); - setState(446); + setState(463); typeDecl(0); - setState(447); + setState(464); match(PAR_END); } break; @@ -3497,7 +3626,7 @@ public class KickCParser extends Parser { _localctx = new TypeSimpleContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(449); + setState(466); match(SIMPLETYPE); } break; @@ -3506,14 +3635,14 @@ public class KickCParser extends Parser { _localctx = new TypeSignedSimpleContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(450); + setState(467); match(SIGNEDNESS); - setState(452); + setState(469); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,37,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,39,_ctx) ) { case 1: { - setState(451); + setState(468); match(SIMPLETYPE); } break; @@ -3525,7 +3654,7 @@ public class KickCParser extends Parser { _localctx = new TypeStructDefContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(454); + setState(471); structDef(); } break; @@ -3534,7 +3663,7 @@ public class KickCParser extends Parser { _localctx = new TypeStructRefContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(455); + setState(472); structRef(); } break; @@ -3543,7 +3672,7 @@ public class KickCParser extends Parser { _localctx = new TypeEnumDefContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(456); + setState(473); enumDef(); } break; @@ -3552,7 +3681,7 @@ public class KickCParser extends Parser { _localctx = new TypeEnumRefContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(457); + setState(474); enumRef(); } break; @@ -3561,30 +3690,30 @@ public class KickCParser extends Parser { _localctx = new TypeNamedRefContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(458); + setState(475); match(TYPEDEFNAME); } break; } _ctx.stop = _input.LT(-1); - setState(474); + setState(491); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,41,_ctx); + _alt = getInterpreter().adaptivePredict(_input,43,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { if ( _parseListeners!=null ) triggerExitRuleEvent(); _prevctx = _localctx; { - setState(472); + setState(489); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,40,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,42,_ctx) ) { case 1: { _localctx = new TypePtrContext(new TypeDeclContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_typeDecl); - setState(461); + setState(478); if (!(precpred(_ctx, 8))) throw new FailedPredicateException(this, "precpred(_ctx, 8)"); - setState(462); + setState(479); match(ASTERISK); } break; @@ -3592,21 +3721,21 @@ public class KickCParser extends Parser { { _localctx = new TypeArrayContext(new TypeDeclContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_typeDecl); - setState(463); + setState(480); if (!(precpred(_ctx, 7))) throw new FailedPredicateException(this, "precpred(_ctx, 7)"); - setState(464); + setState(481); match(BRACKET_BEGIN); - setState(466); + setState(483); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN))) != 0) || ((((_la - 79)) & ~0x3f) == 0 && ((1L << (_la - 79)) & ((1L << (SIZEOF - 79)) | (1L << (TYPEID - 79)) | (1L << (LOGIC_NOT - 79)) | (1L << (BOOLEAN - 79)) | (1L << (STRING - 79)) | (1L << (CHAR - 79)) | (1L << (NUMBER - 79)) | (1L << (NAME - 79)))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN))) != 0) || ((((_la - 80)) & ~0x3f) == 0 && ((1L << (_la - 80)) & ((1L << (SIZEOF - 80)) | (1L << (TYPEID - 80)) | (1L << (LOGIC_NOT - 80)) | (1L << (BOOLEAN - 80)) | (1L << (STRING - 80)) | (1L << (CHAR - 80)) | (1L << (NUMBER - 80)) | (1L << (NAME - 80)))) != 0)) { { - setState(465); + setState(482); expr(0); } } - setState(468); + setState(485); match(BRACKET_END); } break; @@ -3614,20 +3743,20 @@ public class KickCParser extends Parser { { _localctx = new TypeProcedureContext(new TypeDeclContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_typeDecl); - setState(469); + setState(486); if (!(precpred(_ctx, 6))) throw new FailedPredicateException(this, "precpred(_ctx, 6)"); - setState(470); + setState(487); match(PAR_BEGIN); - setState(471); + setState(488); match(PAR_END); } break; } } } - setState(476); + setState(493); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,41,_ctx); + _alt = getInterpreter().adaptivePredict(_input,43,_ctx); } } } @@ -3666,13 +3795,13 @@ public class KickCParser extends Parser { public final StructRefContext structRef() throws RecognitionException { StructRefContext _localctx = new StructRefContext(_ctx, getState()); - enterRule(_localctx, 46, RULE_structRef); + enterRule(_localctx, 48, RULE_structRef); try { enterOuterAlt(_localctx, 1); { - setState(477); + setState(494); match(STRUCT); - setState(478); + setState(495); match(NAME); } } @@ -3719,40 +3848,40 @@ public class KickCParser extends Parser { public final StructDefContext structDef() throws RecognitionException { StructDefContext _localctx = new StructDefContext(_ctx, getState()); - enterRule(_localctx, 48, RULE_structDef); + enterRule(_localctx, 50, RULE_structDef); int _la; try { enterOuterAlt(_localctx, 1); { - setState(480); + setState(497); match(STRUCT); - setState(482); + setState(499); _errHandler.sync(this); _la = _input.LA(1); if (_la==NAME) { { - setState(481); + setState(498); match(NAME); } } - setState(484); + setState(501); match(CURLY_BEGIN); - setState(486); + setState(503); _errHandler.sync(this); _la = _input.LA(1); do { { { - setState(485); + setState(502); structMembers(); } } - setState(488); + setState(505); _errHandler.sync(this); _la = _input.LA(1); - } while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << PAR_BEGIN) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA) | (1L << CALLINGCONVENTION))) != 0) || ((((_la - 77)) & ~0x3f) == 0 && ((1L << (_la - 77)) & ((1L << (STRUCT - 77)) | (1L << (ENUM - 77)) | (1L << (SIGNEDNESS - 77)) | (1L << (SIMPLETYPE - 77)))) != 0) || _la==STATIC ); - setState(490); + } while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << PAR_BEGIN) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << STATIC) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (CALLINGCONVENTION - 64)) | (1L << (STRUCT - 64)) | (1L << (ENUM - 64)) | (1L << (SIGNEDNESS - 64)) | (1L << (SIMPLETYPE - 64)))) != 0) ); + setState(507); match(CURLY_END); } } @@ -3793,13 +3922,13 @@ public class KickCParser extends Parser { public final StructMembersContext structMembers() throws RecognitionException { StructMembersContext _localctx = new StructMembersContext(_ctx, getState()); - enterRule(_localctx, 50, RULE_structMembers); + enterRule(_localctx, 52, RULE_structMembers); try { enterOuterAlt(_localctx, 1); { - setState(492); + setState(509); declVariables(); - setState(493); + setState(510); match(SEMICOLON); } } @@ -3838,13 +3967,13 @@ public class KickCParser extends Parser { public final EnumRefContext enumRef() throws RecognitionException { EnumRefContext _localctx = new EnumRefContext(_ctx, getState()); - enterRule(_localctx, 52, RULE_enumRef); + enterRule(_localctx, 54, RULE_enumRef); try { enterOuterAlt(_localctx, 1); { - setState(495); + setState(512); match(ENUM); - setState(496); + setState(513); match(NAME); } } @@ -3888,28 +4017,28 @@ public class KickCParser extends Parser { public final EnumDefContext enumDef() throws RecognitionException { EnumDefContext _localctx = new EnumDefContext(_ctx, getState()); - enterRule(_localctx, 54, RULE_enumDef); + enterRule(_localctx, 56, RULE_enumDef); int _la; try { enterOuterAlt(_localctx, 1); { - setState(498); + setState(515); match(ENUM); - setState(500); + setState(517); _errHandler.sync(this); _la = _input.LA(1); if (_la==NAME) { { - setState(499); + setState(516); match(NAME); } } - setState(502); + setState(519); match(CURLY_BEGIN); - setState(503); + setState(520); enumMemberList(0); - setState(504); + setState(521); match(CURLY_END); } } @@ -3960,20 +4089,20 @@ public class KickCParser extends Parser { int _parentState = getState(); EnumMemberListContext _localctx = new EnumMemberListContext(_ctx, _parentState); EnumMemberListContext _prevctx = _localctx; - int _startState = 56; - enterRecursionRule(_localctx, 56, RULE_enumMemberList, _p); + int _startState = 58; + enterRecursionRule(_localctx, 58, RULE_enumMemberList, _p); try { int _alt; enterOuterAlt(_localctx, 1); { { - setState(507); + setState(524); enumMember(); } _ctx.stop = _input.LT(-1); - setState(514); + setState(531); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,45,_ctx); + _alt = getInterpreter().adaptivePredict(_input,47,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { if ( _parseListeners!=null ) triggerExitRuleEvent(); @@ -3982,18 +4111,18 @@ public class KickCParser extends Parser { { _localctx = new EnumMemberListContext(_parentctx, _parentState); pushNewRecursionContext(_localctx, _startState, RULE_enumMemberList); - setState(509); + setState(526); if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); - setState(510); + setState(527); match(COMMA); - setState(511); + setState(528); enumMember(); } } } - setState(516); + setState(533); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,45,_ctx); + _alt = getInterpreter().adaptivePredict(_input,47,_ctx); } } } @@ -4035,20 +4164,20 @@ public class KickCParser extends Parser { public final EnumMemberContext enumMember() throws RecognitionException { EnumMemberContext _localctx = new EnumMemberContext(_ctx, getState()); - enterRule(_localctx, 58, RULE_enumMember); + enterRule(_localctx, 60, RULE_enumMember); try { enterOuterAlt(_localctx, 1); { - setState(517); + setState(534); match(NAME); - setState(520); + setState(537); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,46,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,48,_ctx) ) { case 1: { - setState(518); + setState(535); match(ASSIGN); - setState(519); + setState(536); expr(0); } break; @@ -4129,8 +4258,8 @@ public class KickCParser extends Parser { int _parentState = getState(); CommaExprContext _localctx = new CommaExprContext(_ctx, _parentState); CommaExprContext _prevctx = _localctx; - int _startState = 60; - enterRecursionRule(_localctx, 60, RULE_commaExpr, _p); + int _startState = 62; + enterRecursionRule(_localctx, 62, RULE_commaExpr, _p); try { int _alt; enterOuterAlt(_localctx, 1); @@ -4140,13 +4269,13 @@ public class KickCParser extends Parser { _ctx = _localctx; _prevctx = _localctx; - setState(523); + setState(540); expr(0); } _ctx.stop = _input.LT(-1); - setState(530); + setState(547); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,47,_ctx); + _alt = getInterpreter().adaptivePredict(_input,49,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { if ( _parseListeners!=null ) triggerExitRuleEvent(); @@ -4155,18 +4284,18 @@ public class KickCParser extends Parser { { _localctx = new CommaSimpleContext(new CommaExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_commaExpr); - setState(525); + setState(542); if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); - setState(526); + setState(543); match(COMMA); - setState(527); + setState(544); expr(0); } } } - setState(532); + setState(549); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,47,_ctx); + _alt = getInterpreter().adaptivePredict(_input,49,_ctx); } } } @@ -4701,27 +4830,27 @@ public class KickCParser extends Parser { int _parentState = getState(); ExprContext _localctx = new ExprContext(_ctx, _parentState); ExprContext _prevctx = _localctx; - int _startState = 62; - enterRecursionRule(_localctx, 62, RULE_expr, _p); + int _startState = 64; + enterRecursionRule(_localctx, 64, RULE_expr, _p); int _la; try { int _alt; enterOuterAlt(_localctx, 1); { - setState(587); + setState(604); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,52,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,54,_ctx) ) { case 1: { _localctx = new ExprParContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(534); + setState(551); match(PAR_BEGIN); - setState(535); + setState(552); commaExpr(0); - setState(536); + setState(553); match(PAR_END); } break; @@ -4730,27 +4859,27 @@ public class KickCParser extends Parser { _localctx = new ExprSizeOfContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(538); + setState(555); match(SIZEOF); - setState(539); + setState(556); match(PAR_BEGIN); - setState(542); + setState(559); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,48,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,50,_ctx) ) { case 1: { - setState(540); + setState(557); expr(0); } break; case 2: { - setState(541); + setState(558); typeDecl(0); } break; } - setState(544); + setState(561); match(PAR_END); } break; @@ -4759,27 +4888,27 @@ public class KickCParser extends Parser { _localctx = new ExprTypeIdContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(546); + setState(563); match(TYPEID); - setState(547); + setState(564); match(PAR_BEGIN); - setState(550); + setState(567); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,49,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,51,_ctx) ) { case 1: { - setState(548); + setState(565); expr(0); } break; case 2: { - setState(549); + setState(566); typeDecl(0); } break; } - setState(552); + setState(569); match(PAR_END); } break; @@ -4788,13 +4917,13 @@ public class KickCParser extends Parser { _localctx = new ExprCastContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(554); + setState(571); match(PAR_BEGIN); - setState(555); + setState(572); typeDecl(0); - setState(556); + setState(573); match(PAR_END); - setState(557); + setState(574); expr(24); } break; @@ -4803,7 +4932,7 @@ public class KickCParser extends Parser { _localctx = new ExprPreModContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(559); + setState(576); _la = _input.LA(1); if ( !(_la==INC || _la==DEC) ) { _errHandler.recoverInline(this); @@ -4813,7 +4942,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(560); + setState(577); expr(23); } break; @@ -4822,9 +4951,9 @@ public class KickCParser extends Parser { _localctx = new ExprPtrContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(561); + setState(578); match(ASTERISK); - setState(562); + setState(579); expr(21); } break; @@ -4833,7 +4962,7 @@ public class KickCParser extends Parser { _localctx = new ExprUnaryContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(563); + setState(580); _la = _input.LA(1); if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << PLUS) | (1L << MINUS) | (1L << AND) | (1L << BIT_NOT))) != 0) || _la==LOGIC_NOT) ) { _errHandler.recoverInline(this); @@ -4843,7 +4972,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(564); + setState(581); expr(20); } break; @@ -4852,7 +4981,7 @@ public class KickCParser extends Parser { _localctx = new ExprUnaryContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(565); + setState(582); _la = _input.LA(1); if ( !(_la==LESS_THAN || _la==GREATER_THAN) ) { _errHandler.recoverInline(this); @@ -4862,7 +4991,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(566); + setState(583); expr(16); } break; @@ -4871,27 +5000,27 @@ public class KickCParser extends Parser { _localctx = new InitListContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(567); + setState(584); match(CURLY_BEGIN); - setState(568); + setState(585); expr(0); - setState(573); + setState(590); _errHandler.sync(this); _la = _input.LA(1); while (_la==COMMA) { { { - setState(569); + setState(586); match(COMMA); - setState(570); + setState(587); expr(0); } } - setState(575); + setState(592); _errHandler.sync(this); _la = _input.LA(1); } - setState(576); + setState(593); match(CURLY_END); } break; @@ -4900,7 +5029,7 @@ public class KickCParser extends Parser { _localctx = new ExprIdContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(578); + setState(595); match(NAME); } break; @@ -4909,7 +5038,7 @@ public class KickCParser extends Parser { _localctx = new ExprNumberContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(579); + setState(596); match(NUMBER); } break; @@ -4918,7 +5047,7 @@ public class KickCParser extends Parser { _localctx = new ExprStringContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(581); + setState(598); _errHandler.sync(this); _alt = 1; do { @@ -4926,7 +5055,7 @@ public class KickCParser extends Parser { case 1: { { - setState(580); + setState(597); match(STRING); } } @@ -4934,9 +5063,9 @@ public class KickCParser extends Parser { default: throw new NoViableAltException(this); } - setState(583); + setState(600); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,51,_ctx); + _alt = getInterpreter().adaptivePredict(_input,53,_ctx); } while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ); } break; @@ -4945,7 +5074,7 @@ public class KickCParser extends Parser { _localctx = new ExprCharContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(585); + setState(602); match(CHAR); } break; @@ -4954,30 +5083,30 @@ public class KickCParser extends Parser { _localctx = new ExprBoolContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(586); + setState(603); match(BOOLEAN); } break; } _ctx.stop = _input.LT(-1); - setState(649); + setState(666); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,55,_ctx); + _alt = getInterpreter().adaptivePredict(_input,57,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { if ( _parseListeners!=null ) triggerExitRuleEvent(); _prevctx = _localctx; { - setState(647); + setState(664); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,54,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,56,_ctx) ) { case 1: { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(589); + setState(606); if (!(precpred(_ctx, 19))) throw new FailedPredicateException(this, "precpred(_ctx, 19)"); - setState(590); + setState(607); _la = _input.LA(1); if ( !(_la==SHIFT_LEFT || _la==SHIFT_RIGHT) ) { _errHandler.recoverInline(this); @@ -4987,7 +5116,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(591); + setState(608); expr(20); } break; @@ -4995,9 +5124,9 @@ public class KickCParser extends Parser { { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(592); + setState(609); if (!(precpred(_ctx, 18))) throw new FailedPredicateException(this, "precpred(_ctx, 18)"); - setState(593); + setState(610); _la = _input.LA(1); if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ASTERISK) | (1L << DIVIDE) | (1L << MODULO))) != 0)) ) { _errHandler.recoverInline(this); @@ -5007,7 +5136,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(594); + setState(611); expr(19); } break; @@ -5015,9 +5144,9 @@ public class KickCParser extends Parser { { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(595); + setState(612); if (!(precpred(_ctx, 17))) throw new FailedPredicateException(this, "precpred(_ctx, 17)"); - setState(596); + setState(613); _la = _input.LA(1); if ( !(_la==PLUS || _la==MINUS) ) { _errHandler.recoverInline(this); @@ -5027,7 +5156,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(597); + setState(614); expr(18); } break; @@ -5035,9 +5164,9 @@ public class KickCParser extends Parser { { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(598); + setState(615); if (!(precpred(_ctx, 15))) throw new FailedPredicateException(this, "precpred(_ctx, 15)"); - setState(599); + setState(616); _la = _input.LA(1); if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << EQUAL) | (1L << NOT_EQUAL) | (1L << LESS_THAN) | (1L << LESS_THAN_EQUAL) | (1L << GREATER_THAN_EQUAL) | (1L << GREATER_THAN))) != 0)) ) { _errHandler.recoverInline(this); @@ -5047,7 +5176,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(600); + setState(617); expr(16); } break; @@ -5055,13 +5184,13 @@ public class KickCParser extends Parser { { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(601); + setState(618); if (!(precpred(_ctx, 14))) throw new FailedPredicateException(this, "precpred(_ctx, 14)"); { - setState(602); + setState(619); match(AND); } - setState(603); + setState(620); expr(15); } break; @@ -5069,13 +5198,13 @@ public class KickCParser extends Parser { { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(604); + setState(621); if (!(precpred(_ctx, 13))) throw new FailedPredicateException(this, "precpred(_ctx, 13)"); { - setState(605); + setState(622); match(BIT_XOR); } - setState(606); + setState(623); expr(14); } break; @@ -5083,13 +5212,13 @@ public class KickCParser extends Parser { { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(607); + setState(624); if (!(precpred(_ctx, 12))) throw new FailedPredicateException(this, "precpred(_ctx, 12)"); { - setState(608); + setState(625); match(BIT_OR); } - setState(609); + setState(626); expr(13); } break; @@ -5097,13 +5226,13 @@ public class KickCParser extends Parser { { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(610); + setState(627); if (!(precpred(_ctx, 11))) throw new FailedPredicateException(this, "precpred(_ctx, 11)"); { - setState(611); + setState(628); match(LOGIC_AND); } - setState(612); + setState(629); expr(12); } break; @@ -5111,13 +5240,13 @@ public class KickCParser extends Parser { { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(613); + setState(630); if (!(precpred(_ctx, 10))) throw new FailedPredicateException(this, "precpred(_ctx, 10)"); { - setState(614); + setState(631); match(LOGIC_OR); } - setState(615); + setState(632); expr(11); } break; @@ -5125,15 +5254,15 @@ public class KickCParser extends Parser { { _localctx = new ExprTernaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(616); + setState(633); if (!(precpred(_ctx, 9))) throw new FailedPredicateException(this, "precpred(_ctx, 9)"); - setState(617); + setState(634); match(CONDITION); - setState(618); + setState(635); expr(0); - setState(619); + setState(636); match(COLON); - setState(620); + setState(637); expr(10); } break; @@ -5141,11 +5270,11 @@ public class KickCParser extends Parser { { _localctx = new ExprAssignmentContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(622); + setState(639); if (!(precpred(_ctx, 8))) throw new FailedPredicateException(this, "precpred(_ctx, 8)"); - setState(623); + setState(640); match(ASSIGN); - setState(624); + setState(641); expr(8); } break; @@ -5153,11 +5282,11 @@ public class KickCParser extends Parser { { _localctx = new ExprAssignmentCompoundContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(625); + setState(642); if (!(precpred(_ctx, 7))) throw new FailedPredicateException(this, "precpred(_ctx, 7)"); - setState(626); + setState(643); match(ASSIGN_COMPOUND); - setState(627); + setState(644); expr(7); } break; @@ -5165,11 +5294,11 @@ public class KickCParser extends Parser { { _localctx = new ExprDotContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(628); + setState(645); if (!(precpred(_ctx, 30))) throw new FailedPredicateException(this, "precpred(_ctx, 30)"); - setState(629); + setState(646); match(DOT); - setState(630); + setState(647); match(NAME); } break; @@ -5177,11 +5306,11 @@ public class KickCParser extends Parser { { _localctx = new ExprArrowContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(631); + setState(648); if (!(precpred(_ctx, 29))) throw new FailedPredicateException(this, "precpred(_ctx, 29)"); - setState(632); + setState(649); match(ARROW); - setState(633); + setState(650); match(NAME); } break; @@ -5189,21 +5318,21 @@ public class KickCParser extends Parser { { _localctx = new ExprCallContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(634); + setState(651); if (!(precpred(_ctx, 28))) throw new FailedPredicateException(this, "precpred(_ctx, 28)"); - setState(635); + setState(652); match(PAR_BEGIN); - setState(637); + setState(654); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN))) != 0) || ((((_la - 79)) & ~0x3f) == 0 && ((1L << (_la - 79)) & ((1L << (SIZEOF - 79)) | (1L << (TYPEID - 79)) | (1L << (LOGIC_NOT - 79)) | (1L << (BOOLEAN - 79)) | (1L << (STRING - 79)) | (1L << (CHAR - 79)) | (1L << (NUMBER - 79)) | (1L << (NAME - 79)))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN))) != 0) || ((((_la - 80)) & ~0x3f) == 0 && ((1L << (_la - 80)) & ((1L << (SIZEOF - 80)) | (1L << (TYPEID - 80)) | (1L << (LOGIC_NOT - 80)) | (1L << (BOOLEAN - 80)) | (1L << (STRING - 80)) | (1L << (CHAR - 80)) | (1L << (NUMBER - 80)) | (1L << (NAME - 80)))) != 0)) { { - setState(636); + setState(653); parameterList(); } } - setState(639); + setState(656); match(PAR_END); } break; @@ -5211,13 +5340,13 @@ public class KickCParser extends Parser { { _localctx = new ExprArrayContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(640); + setState(657); if (!(precpred(_ctx, 25))) throw new FailedPredicateException(this, "precpred(_ctx, 25)"); - setState(641); + setState(658); match(BRACKET_BEGIN); - setState(642); + setState(659); commaExpr(0); - setState(643); + setState(660); match(BRACKET_END); } break; @@ -5225,9 +5354,9 @@ public class KickCParser extends Parser { { _localctx = new ExprPostModContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(645); + setState(662); if (!(precpred(_ctx, 22))) throw new FailedPredicateException(this, "precpred(_ctx, 22)"); - setState(646); + setState(663); _la = _input.LA(1); if ( !(_la==INC || _la==DEC) ) { _errHandler.recoverInline(this); @@ -5242,9 +5371,9 @@ public class KickCParser extends Parser { } } } - setState(651); + setState(668); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,55,_ctx); + _alt = getInterpreter().adaptivePredict(_input,57,_ctx); } } } @@ -5291,26 +5420,26 @@ public class KickCParser extends Parser { public final ParameterListContext parameterList() throws RecognitionException { ParameterListContext _localctx = new ParameterListContext(_ctx, getState()); - enterRule(_localctx, 64, RULE_parameterList); + enterRule(_localctx, 66, RULE_parameterList); int _la; try { enterOuterAlt(_localctx, 1); { - setState(652); + setState(669); expr(0); - setState(657); + setState(674); _errHandler.sync(this); _la = _input.LA(1); while (_la==COMMA) { { { - setState(653); + setState(670); match(COMMA); - setState(654); + setState(671); expr(0); } } - setState(659); + setState(676); _errHandler.sync(this); _la = _input.LA(1); } @@ -5354,24 +5483,24 @@ public class KickCParser extends Parser { public final DeclKasmContext declKasm() throws RecognitionException { DeclKasmContext _localctx = new DeclKasmContext(_ctx, getState()); - enterRule(_localctx, 66, RULE_declKasm); + enterRule(_localctx, 68, RULE_declKasm); int _la; try { enterOuterAlt(_localctx, 1); { - setState(660); + setState(677); match(KICKASM); - setState(662); + setState(679); _errHandler.sync(this); _la = _input.LA(1); if (_la==PAR_BEGIN) { { - setState(661); + setState(678); asmDirectives(); } } - setState(664); + setState(681); match(KICKASM_BODY); } } @@ -5420,32 +5549,32 @@ public class KickCParser extends Parser { public final AsmDirectivesContext asmDirectives() throws RecognitionException { AsmDirectivesContext _localctx = new AsmDirectivesContext(_ctx, getState()); - enterRule(_localctx, 68, RULE_asmDirectives); + enterRule(_localctx, 70, RULE_asmDirectives); int _la; try { enterOuterAlt(_localctx, 1); { - setState(666); + setState(683); match(PAR_BEGIN); - setState(667); + setState(684); asmDirective(); - setState(672); + setState(689); _errHandler.sync(this); _la = _input.LA(1); while (_la==COMMA) { { { - setState(668); + setState(685); match(COMMA); - setState(669); + setState(686); asmDirective(); } } - setState(674); + setState(691); _errHandler.sync(this); _la = _input.LA(1); } - setState(675); + setState(692); match(PAR_END); } } @@ -5589,18 +5718,18 @@ public class KickCParser extends Parser { public final AsmDirectiveContext asmDirective() throws RecognitionException { AsmDirectiveContext _localctx = new AsmDirectiveContext(_ctx, getState()); - enterRule(_localctx, 70, RULE_asmDirective); + enterRule(_localctx, 72, RULE_asmDirective); try { - setState(692); + setState(709); _errHandler.sync(this); switch (_input.LA(1)) { case RESOURCE: _localctx = new AsmDirectiveResourceContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(677); + setState(694); match(RESOURCE); - setState(678); + setState(695); match(STRING); } break; @@ -5608,9 +5737,9 @@ public class KickCParser extends Parser { _localctx = new AsmDirectiveUsesContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(679); + setState(696); match(USES); - setState(680); + setState(697); match(NAME); } break; @@ -5618,9 +5747,9 @@ public class KickCParser extends Parser { _localctx = new AsmDirectiveClobberContext(_localctx); enterOuterAlt(_localctx, 3); { - setState(681); + setState(698); match(CLOBBERS); - setState(682); + setState(699); match(STRING); } break; @@ -5628,9 +5757,9 @@ public class KickCParser extends Parser { _localctx = new AsmDirectiveBytesContext(_localctx); enterOuterAlt(_localctx, 4); { - setState(683); + setState(700); match(BYTES); - setState(684); + setState(701); expr(0); } break; @@ -5638,9 +5767,9 @@ public class KickCParser extends Parser { _localctx = new AsmDirectiveCyclesContext(_localctx); enterOuterAlt(_localctx, 5); { - setState(685); + setState(702); match(CYCLES); - setState(686); + setState(703); expr(0); } break; @@ -5648,14 +5777,14 @@ public class KickCParser extends Parser { _localctx = new AsmDirectiveAddressContext(_localctx); enterOuterAlt(_localctx, 6); { - setState(687); + setState(704); match(PC); - setState(690); + setState(707); _errHandler.sync(this); switch (_input.LA(1)) { case INLINE: { - setState(688); + setState(705); match(INLINE); } break; @@ -5679,7 +5808,7 @@ public class KickCParser extends Parser { case NUMBER: case NAME: { - setState(689); + setState(706); expr(0); } break; @@ -5731,22 +5860,22 @@ public class KickCParser extends Parser { public final AsmLinesContext asmLines() throws RecognitionException { AsmLinesContext _localctx = new AsmLinesContext(_ctx, getState()); - enterRule(_localctx, 72, RULE_asmLines); + enterRule(_localctx, 74, RULE_asmLines); int _la; try { enterOuterAlt(_localctx, 1); { - setState(697); + setState(714); _errHandler.sync(this); _la = _input.LA(1); - while (((((_la - 107)) & ~0x3f) == 0 && ((1L << (_la - 107)) & ((1L << (ASM_BYTE - 107)) | (1L << (ASM_MNEMONIC - 107)) | (1L << (ASM_MULTI_NAME - 107)) | (1L << (ASM_NAME - 107)))) != 0)) { + while (((((_la - 108)) & ~0x3f) == 0 && ((1L << (_la - 108)) & ((1L << (ASM_BYTE - 108)) | (1L << (ASM_MNEMONIC - 108)) | (1L << (ASM_MULTI_NAME - 108)) | (1L << (ASM_NAME - 108)))) != 0)) { { { - setState(694); + setState(711); asmLine(); } } - setState(699); + setState(716); _errHandler.sync(this); _la = _input.LA(1); } @@ -5794,30 +5923,30 @@ public class KickCParser extends Parser { public final AsmLineContext asmLine() throws RecognitionException { AsmLineContext _localctx = new AsmLineContext(_ctx, getState()); - enterRule(_localctx, 74, RULE_asmLine); + enterRule(_localctx, 76, RULE_asmLine); try { - setState(703); + setState(720); _errHandler.sync(this); switch (_input.LA(1)) { case ASM_MULTI_NAME: case ASM_NAME: enterOuterAlt(_localctx, 1); { - setState(700); + setState(717); asmLabel(); } break; case ASM_MNEMONIC: enterOuterAlt(_localctx, 2); { - setState(701); + setState(718); asmInstruction(); } break; case ASM_BYTE: enterOuterAlt(_localctx, 3); { - setState(702); + setState(719); asmBytes(); } break; @@ -5886,18 +6015,18 @@ public class KickCParser extends Parser { public final AsmLabelContext asmLabel() throws RecognitionException { AsmLabelContext _localctx = new AsmLabelContext(_ctx, getState()); - enterRule(_localctx, 76, RULE_asmLabel); + enterRule(_localctx, 78, RULE_asmLabel); try { - setState(709); + setState(726); _errHandler.sync(this); switch (_input.LA(1)) { case ASM_NAME: _localctx = new AsmLabelNameContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(705); + setState(722); match(ASM_NAME); - setState(706); + setState(723); match(ASM_COLON); } break; @@ -5905,9 +6034,9 @@ public class KickCParser extends Parser { _localctx = new AsmLabelMultiContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(707); + setState(724); match(ASM_MULTI_NAME); - setState(708); + setState(725); match(ASM_COLON); } break; @@ -5952,18 +6081,18 @@ public class KickCParser extends Parser { public final AsmInstructionContext asmInstruction() throws RecognitionException { AsmInstructionContext _localctx = new AsmInstructionContext(_ctx, getState()); - enterRule(_localctx, 78, RULE_asmInstruction); + enterRule(_localctx, 80, RULE_asmInstruction); try { enterOuterAlt(_localctx, 1); { - setState(711); + setState(728); match(ASM_MNEMONIC); - setState(713); + setState(730); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,64,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,66,_ctx) ) { case 1: { - setState(712); + setState(729); asmParamMode(); } break; @@ -6014,28 +6143,28 @@ public class KickCParser extends Parser { public final AsmBytesContext asmBytes() throws RecognitionException { AsmBytesContext _localctx = new AsmBytesContext(_ctx, getState()); - enterRule(_localctx, 80, RULE_asmBytes); + enterRule(_localctx, 82, RULE_asmBytes); int _la; try { enterOuterAlt(_localctx, 1); { - setState(715); + setState(732); match(ASM_BYTE); - setState(716); + setState(733); asmExpr(0); - setState(721); + setState(738); _errHandler.sync(this); _la = _input.LA(1); while (_la==ASM_COMMA) { { { - setState(717); + setState(734); match(ASM_COMMA); - setState(718); + setState(735); asmExpr(0); } } - setState(723); + setState(740); _errHandler.sync(this); _la = _input.LA(1); } @@ -6193,16 +6322,16 @@ public class KickCParser extends Parser { public final AsmParamModeContext asmParamMode() throws RecognitionException { AsmParamModeContext _localctx = new AsmParamModeContext(_ctx, getState()); - enterRule(_localctx, 82, RULE_asmParamMode); + enterRule(_localctx, 84, RULE_asmParamMode); try { - setState(747); + setState(764); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,66,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,68,_ctx) ) { case 1: _localctx = new AsmModeAbsContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(724); + setState(741); asmExpr(0); } break; @@ -6210,9 +6339,9 @@ public class KickCParser extends Parser { _localctx = new AsmModeImmContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(725); + setState(742); match(ASM_IMM); - setState(726); + setState(743); asmExpr(0); } break; @@ -6220,11 +6349,11 @@ public class KickCParser extends Parser { _localctx = new AsmModeAbsXYContext(_localctx); enterOuterAlt(_localctx, 3); { - setState(727); + setState(744); asmExpr(0); - setState(728); + setState(745); match(ASM_COMMA); - setState(729); + setState(746); match(ASM_NAME); } break; @@ -6232,15 +6361,15 @@ public class KickCParser extends Parser { _localctx = new AsmModeIndIdxXYContext(_localctx); enterOuterAlt(_localctx, 4); { - setState(731); + setState(748); match(ASM_PAR_BEGIN); - setState(732); + setState(749); asmExpr(0); - setState(733); + setState(750); match(ASM_PAR_END); - setState(734); + setState(751); match(ASM_COMMA); - setState(735); + setState(752); match(ASM_NAME); } break; @@ -6248,15 +6377,15 @@ public class KickCParser extends Parser { _localctx = new AsmModeIdxIndXYContext(_localctx); enterOuterAlt(_localctx, 5); { - setState(737); + setState(754); match(ASM_PAR_BEGIN); - setState(738); + setState(755); asmExpr(0); - setState(739); + setState(756); match(ASM_COMMA); - setState(740); + setState(757); match(ASM_NAME); - setState(741); + setState(758); match(ASM_PAR_END); } break; @@ -6264,11 +6393,11 @@ public class KickCParser extends Parser { _localctx = new AsmModeIndContext(_localctx); enterOuterAlt(_localctx, 6); { - setState(743); + setState(760); match(ASM_PAR_BEGIN); - setState(744); + setState(761); asmExpr(0); - setState(745); + setState(762); match(ASM_PAR_END); } break; @@ -6466,14 +6595,14 @@ public class KickCParser extends Parser { int _parentState = getState(); AsmExprContext _localctx = new AsmExprContext(_ctx, _parentState); AsmExprContext _prevctx = _localctx; - int _startState = 84; - enterRecursionRule(_localctx, 84, RULE_asmExpr, _p); + int _startState = 86; + enterRecursionRule(_localctx, 86, RULE_asmExpr, _p); int _la; try { int _alt; enterOuterAlt(_localctx, 1); { - setState(763); + setState(780); _errHandler.sync(this); switch (_input.LA(1)) { case ASM_BRACKET_BEGIN: @@ -6482,11 +6611,11 @@ public class KickCParser extends Parser { _ctx = _localctx; _prevctx = _localctx; - setState(750); + setState(767); match(ASM_BRACKET_BEGIN); - setState(751); + setState(768); asmExpr(0); - setState(752); + setState(769); match(ASM_BRACKET_END); } break; @@ -6498,9 +6627,9 @@ public class KickCParser extends Parser { _localctx = new AsmExprUnaryContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(754); + setState(771); _la = _input.LA(1); - if ( !(((((_la - 119)) & ~0x3f) == 0 && ((1L << (_la - 119)) & ((1L << (ASM_PLUS - 119)) | (1L << (ASM_MINUS - 119)) | (1L << (ASM_LESS_THAN - 119)) | (1L << (ASM_GREATER_THAN - 119)))) != 0)) ) { + if ( !(((((_la - 120)) & ~0x3f) == 0 && ((1L << (_la - 120)) & ((1L << (ASM_PLUS - 120)) | (1L << (ASM_MINUS - 120)) | (1L << (ASM_LESS_THAN - 120)) | (1L << (ASM_GREATER_THAN - 120)))) != 0)) ) { _errHandler.recoverInline(this); } else { @@ -6508,7 +6637,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(755); + setState(772); asmExpr(8); } break; @@ -6517,7 +6646,7 @@ public class KickCParser extends Parser { _localctx = new AsmExprLabelContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(756); + setState(773); match(ASM_NAME); } break; @@ -6526,7 +6655,7 @@ public class KickCParser extends Parser { _localctx = new AsmExprLabelRelContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(757); + setState(774); match(ASM_MULTI_REL); } break; @@ -6535,11 +6664,11 @@ public class KickCParser extends Parser { _localctx = new AsmExprReplaceContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(758); + setState(775); match(ASM_CURLY_BEGIN); - setState(759); + setState(776); match(ASM_NAME); - setState(760); + setState(777); match(ASM_CURLY_END); } break; @@ -6548,7 +6677,7 @@ public class KickCParser extends Parser { _localctx = new AsmExprIntContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(761); + setState(778); match(ASM_NUMBER); } break; @@ -6557,7 +6686,7 @@ public class KickCParser extends Parser { _localctx = new AsmExprCharContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(762); + setState(779); match(ASM_CHAR); } break; @@ -6565,28 +6694,28 @@ public class KickCParser extends Parser { throw new NoViableAltException(this); } _ctx.stop = _input.LT(-1); - setState(779); + setState(796); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,69,_ctx); + _alt = getInterpreter().adaptivePredict(_input,71,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { if ( _parseListeners!=null ) triggerExitRuleEvent(); _prevctx = _localctx; { - setState(777); + setState(794); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,68,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,70,_ctx) ) { case 1: { _localctx = new AsmExprBinaryContext(new AsmExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_asmExpr); - setState(765); + setState(782); if (!(precpred(_ctx, 10))) throw new FailedPredicateException(this, "precpred(_ctx, 10)"); { - setState(766); + setState(783); match(ASM_DOT); } - setState(767); + setState(784); asmExpr(11); } break; @@ -6594,9 +6723,9 @@ public class KickCParser extends Parser { { _localctx = new AsmExprBinaryContext(new AsmExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_asmExpr); - setState(768); + setState(785); if (!(precpred(_ctx, 9))) throw new FailedPredicateException(this, "precpred(_ctx, 9)"); - setState(769); + setState(786); _la = _input.LA(1); if ( !(_la==ASM_SHIFT_LEFT || _la==ASM_SHIFT_RIGHT) ) { _errHandler.recoverInline(this); @@ -6606,7 +6735,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(770); + setState(787); asmExpr(10); } break; @@ -6614,9 +6743,9 @@ public class KickCParser extends Parser { { _localctx = new AsmExprBinaryContext(new AsmExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_asmExpr); - setState(771); + setState(788); if (!(precpred(_ctx, 7))) throw new FailedPredicateException(this, "precpred(_ctx, 7)"); - setState(772); + setState(789); _la = _input.LA(1); if ( !(_la==ASM_MULTIPLY || _la==ASM_DIVIDE) ) { _errHandler.recoverInline(this); @@ -6626,7 +6755,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(773); + setState(790); asmExpr(8); } break; @@ -6634,9 +6763,9 @@ public class KickCParser extends Parser { { _localctx = new AsmExprBinaryContext(new AsmExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_asmExpr); - setState(774); + setState(791); if (!(precpred(_ctx, 6))) throw new FailedPredicateException(this, "precpred(_ctx, 6)"); - setState(775); + setState(792); _la = _input.LA(1); if ( !(_la==ASM_PLUS || _la==ASM_MINUS) ) { _errHandler.recoverInline(this); @@ -6646,16 +6775,16 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(776); + setState(793); asmExpr(7); } break; } } } - setState(781); + setState(798); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,69,_ctx); + _alt = getInterpreter().adaptivePredict(_input,71,_ctx); } } } @@ -6674,15 +6803,17 @@ public class KickCParser extends Parser { switch (ruleIndex) { case 9: return declVariableList_sempred((DeclVariableListContext)_localctx, predIndex); - case 22: + case 11: + return declVariable_sempred((DeclVariableContext)_localctx, predIndex); + case 23: return typeDecl_sempred((TypeDeclContext)_localctx, predIndex); - case 28: + case 29: return enumMemberList_sempred((EnumMemberListContext)_localctx, predIndex); - case 30: - return commaExpr_sempred((CommaExprContext)_localctx, predIndex); case 31: + return commaExpr_sempred((CommaExprContext)_localctx, predIndex); + case 32: return expr_sempred((ExprContext)_localctx, predIndex); - case 42: + case 43: return asmExpr_sempred((AsmExprContext)_localctx, predIndex); } return true; @@ -6694,389 +6825,405 @@ public class KickCParser extends Parser { } return true; } - private boolean typeDecl_sempred(TypeDeclContext _localctx, int predIndex) { + private boolean declVariable_sempred(DeclVariableContext _localctx, int predIndex) { switch (predIndex) { case 1: - return precpred(_ctx, 8); + return precpred(_ctx, 1); + } + return true; + } + private boolean typeDecl_sempred(TypeDeclContext _localctx, int predIndex) { + switch (predIndex) { case 2: - return precpred(_ctx, 7); + return precpred(_ctx, 8); case 3: + return precpred(_ctx, 7); + case 4: return precpred(_ctx, 6); } return true; } private boolean enumMemberList_sempred(EnumMemberListContext _localctx, int predIndex) { switch (predIndex) { - case 4: + case 5: return precpred(_ctx, 1); } return true; } private boolean commaExpr_sempred(CommaExprContext _localctx, int predIndex) { switch (predIndex) { - case 5: + case 6: return precpred(_ctx, 1); } return true; } private boolean expr_sempred(ExprContext _localctx, int predIndex) { switch (predIndex) { - case 6: - return precpred(_ctx, 19); case 7: - return precpred(_ctx, 18); + return precpred(_ctx, 19); case 8: - return precpred(_ctx, 17); + return precpred(_ctx, 18); case 9: - return precpred(_ctx, 15); + return precpred(_ctx, 17); case 10: - return precpred(_ctx, 14); + return precpred(_ctx, 15); case 11: - return precpred(_ctx, 13); + return precpred(_ctx, 14); case 12: - return precpred(_ctx, 12); + return precpred(_ctx, 13); case 13: - return precpred(_ctx, 11); + return precpred(_ctx, 12); case 14: - return precpred(_ctx, 10); + return precpred(_ctx, 11); case 15: - return precpred(_ctx, 9); + return precpred(_ctx, 10); case 16: - return precpred(_ctx, 8); + return precpred(_ctx, 9); case 17: - return precpred(_ctx, 7); + return precpred(_ctx, 8); case 18: - return precpred(_ctx, 30); + return precpred(_ctx, 7); case 19: - return precpred(_ctx, 29); + return precpred(_ctx, 30); case 20: - return precpred(_ctx, 28); + return precpred(_ctx, 29); case 21: - return precpred(_ctx, 25); + return precpred(_ctx, 28); case 22: + return precpred(_ctx, 25); + case 23: return precpred(_ctx, 22); } return true; } private boolean asmExpr_sempred(AsmExprContext _localctx, int predIndex) { switch (predIndex) { - case 23: - return precpred(_ctx, 10); case 24: - return precpred(_ctx, 9); + return precpred(_ctx, 10); case 25: - return precpred(_ctx, 7); + return precpred(_ctx, 9); case 26: + return precpred(_ctx, 7); + case 27: return precpred(_ctx, 6); } return true; } public static final String _serializedATN = - "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\u0091\u0311\4\2\t"+ + "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\u0091\u0322\4\2\t"+ "\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13"+ "\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22"+ "\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31\t\31"+ "\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36\t\36\4\37\t\37\4 \t \4!"+ "\t!\4\"\t\"\4#\t#\4$\t$\4%\t%\4&\t&\4\'\t\'\4(\t(\4)\t)\4*\t*\4+\t+\4"+ - ",\t,\3\2\3\2\3\2\3\3\3\3\3\3\3\4\7\4`\n\4\f\4\16\4c\13\4\3\5\3\5\5\5g"+ - "\n\5\3\6\3\6\3\6\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3"+ - "\7\3\7\5\7{\n\7\3\b\3\b\3\b\3\b\3\b\3\t\7\t\u0083\n\t\f\t\16\t\u0086\13"+ - "\t\3\t\3\t\7\t\u008a\n\t\f\t\16\t\u008d\13\t\3\n\3\n\3\n\3\13\3\13\3\13"+ - "\3\13\3\13\3\13\7\13\u0098\n\13\f\13\16\13\u009b\13\13\3\f\3\f\3\f\5\f"+ - "\u00a0\n\f\3\f\3\f\3\f\5\f\u00a5\n\f\3\r\3\r\3\r\3\r\5\r\u00ab\n\r\3\r"+ - "\3\r\3\r\5\r\u00b0\n\r\3\r\3\r\3\16\3\16\3\16\7\16\u00b7\n\16\f\16\16"+ - "\16\u00ba\13\16\3\17\3\17\3\17\3\17\5\17\u00c0\n\17\3\20\3\20\3\20\3\20"+ - "\3\20\3\20\3\20\7\20\u00c9\n\20\f\20\16\20\u00cc\13\20\3\20\3\20\3\20"+ - "\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20"+ - "\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20"+ - "\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20"+ - "\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\7\20\u0106\n\20"+ - "\f\20\16\20\u0109\13\20\3\20\5\20\u010c\n\20\3\21\3\21\3\21\3\21\3\21"+ - "\3\21\3\21\3\21\3\21\5\21\u0117\n\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21"+ - "\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\5\21\u012a\n\21\3\21"+ - "\3\21\3\21\3\21\3\21\7\21\u0131\n\21\f\21\16\21\u0134\13\21\3\21\3\21"+ - "\5\21\u0138\n\21\3\22\6\22\u013b\n\22\r\22\16\22\u013c\3\23\3\23\3\23"+ - "\3\23\3\23\5\23\u0144\n\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23"+ - "\3\23\3\23\5\23\u0151\n\23\3\23\7\23\u0154\n\23\f\23\16\23\u0157\13\23"+ - "\3\23\3\23\3\23\3\23\3\23\3\23\3\23\7\23\u0160\n\23\f\23\16\23\u0163\13"+ - "\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\7\23\u016e\n\23\f\23"+ - "\16\23\u0171\13\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3"+ - "\23\3\23\3\23\3\23\3\23\3\23\5\23\u0183\n\23\3\23\3\23\3\23\3\23\3\23"+ - "\3\23\3\23\5\23\u018c\n\23\3\23\3\23\3\23\3\23\3\23\5\23\u0193\n\23\3"+ - "\24\6\24\u0196\n\24\r\24\16\24\u0197\3\24\3\24\3\24\5\24\u019d\n\24\5"+ - "\24\u019f\n\24\3\25\3\25\3\25\3\25\5\25\u01a5\n\25\3\26\3\26\3\26\3\26"+ - "\3\26\5\26\u01ac\n\26\3\26\5\26\u01af\n\26\3\26\3\26\3\26\3\26\3\26\3"+ - "\26\5\26\u01b7\n\26\3\27\5\27\u01ba\n\27\3\27\5\27\u01bd\n\27\3\30\3\30"+ - "\3\30\3\30\3\30\3\30\3\30\3\30\5\30\u01c7\n\30\3\30\3\30\3\30\3\30\3\30"+ - "\5\30\u01ce\n\30\3\30\3\30\3\30\3\30\3\30\5\30\u01d5\n\30\3\30\3\30\3"+ - "\30\3\30\7\30\u01db\n\30\f\30\16\30\u01de\13\30\3\31\3\31\3\31\3\32\3"+ - "\32\5\32\u01e5\n\32\3\32\3\32\6\32\u01e9\n\32\r\32\16\32\u01ea\3\32\3"+ - "\32\3\33\3\33\3\33\3\34\3\34\3\34\3\35\3\35\5\35\u01f7\n\35\3\35\3\35"+ - "\3\35\3\35\3\36\3\36\3\36\3\36\3\36\3\36\7\36\u0203\n\36\f\36\16\36\u0206"+ - "\13\36\3\37\3\37\3\37\5\37\u020b\n\37\3 \3 \3 \3 \3 \3 \7 \u0213\n \f"+ - " \16 \u0216\13 \3!\3!\3!\3!\3!\3!\3!\3!\3!\5!\u0221\n!\3!\3!\3!\3!\3!"+ - "\3!\5!\u0229\n!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!"+ - "\3!\7!\u023e\n!\f!\16!\u0241\13!\3!\3!\3!\3!\3!\6!\u0248\n!\r!\16!\u0249"+ - "\3!\3!\5!\u024e\n!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!"+ - "\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!"+ - "\3!\3!\3!\3!\3!\3!\3!\3!\5!\u0280\n!\3!\3!\3!\3!\3!\3!\3!\3!\7!\u028a"+ - "\n!\f!\16!\u028d\13!\3\"\3\"\3\"\7\"\u0292\n\"\f\"\16\"\u0295\13\"\3#"+ - "\3#\5#\u0299\n#\3#\3#\3$\3$\3$\3$\7$\u02a1\n$\f$\16$\u02a4\13$\3$\3$\3"+ - "%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\5%\u02b5\n%\5%\u02b7\n%\3&\7&\u02ba"+ - "\n&\f&\16&\u02bd\13&\3\'\3\'\3\'\5\'\u02c2\n\'\3(\3(\3(\3(\5(\u02c8\n"+ - "(\3)\3)\5)\u02cc\n)\3*\3*\3*\3*\7*\u02d2\n*\f*\16*\u02d5\13*\3+\3+\3+"+ - "\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\5+\u02ee"+ - "\n+\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\5,\u02fe\n,\3,\3,\3,\3,"+ - "\3,\3,\3,\3,\3,\3,\3,\3,\7,\u030c\n,\f,\16,\u030f\13,\3,\2\b\24.:>@V-"+ - "\2\4\6\b\n\f\16\20\22\24\26\30\32\34\36 \"$&(*,.\60\62\64\668:<>@BDFH"+ - "JLNPRTV\2\r\3\2\26\27\5\2\21\22\30\31YY\4\2 ##\3\2\34\35\3\2\23\25\3"+ - "\2\21\22\3\2\36#\3\2y|\3\2wx\3\2}~\3\2yz\2\u0383\2X\3\2\2\2\4[\3\2\2\2"+ - "\6a\3\2\2\2\bf\3\2\2\2\nh\3\2\2\2\fz\3\2\2\2\16|\3\2\2\2\20\u0084\3\2"+ - "\2\2\22\u008e\3\2\2\2\24\u0091\3\2\2\2\26\u00a4\3\2\2\2\30\u00a6\3\2\2"+ - "\2\32\u00b3\3\2\2\2\34\u00bf\3\2\2\2\36\u010b\3\2\2\2 \u0137\3\2\2\2\""+ - "\u013a\3\2\2\2$\u0192\3\2\2\2&\u0195\3\2\2\2(\u01a0\3\2\2\2*\u01b6\3\2"+ - "\2\2,\u01bc\3\2\2\2.\u01cd\3\2\2\2\60\u01df\3\2\2\2\62\u01e2\3\2\2\2\64"+ - "\u01ee\3\2\2\2\66\u01f1\3\2\2\28\u01f4\3\2\2\2:\u01fc\3\2\2\2<\u0207\3"+ - "\2\2\2>\u020c\3\2\2\2@\u024d\3\2\2\2B\u028e\3\2\2\2D\u0296\3\2\2\2F\u029c"+ - "\3\2\2\2H\u02b6\3\2\2\2J\u02bb\3\2\2\2L\u02c1\3\2\2\2N\u02c7\3\2\2\2P"+ - "\u02c9\3\2\2\2R\u02cd\3\2\2\2T\u02ed\3\2\2\2V\u02fd\3\2\2\2XY\5\6\4\2"+ - "YZ\7\2\2\3Z\3\3\2\2\2[\\\5J&\2\\]\7\2\2\3]\5\3\2\2\2^`\5\b\5\2_^\3\2\2"+ - "\2`c\3\2\2\2a_\3\2\2\2ab\3\2\2\2b\7\3\2\2\2ca\3\2\2\2dg\5\f\7\2eg\5\n"+ - "\6\2fd\3\2\2\2fe\3\2\2\2g\t\3\2\2\2hi\7(\2\2ij\7^\2\2j\13\3\2\2\2kl\5"+ - "\22\n\2lm\7\n\2\2m{\3\2\2\2no\5\62\32\2op\7\n\2\2p{\3\2\2\2qr\58\35\2"+ - "rs\7\n\2\2s{\3\2\2\2t{\5\30\r\2u{\5D#\2v{\5\36\20\2wx\5\16\b\2xy\7\n\2"+ - "\2y{\3\2\2\2zk\3\2\2\2zn\3\2\2\2zq\3\2\2\2zt\3\2\2\2zu\3\2\2\2zv\3\2\2"+ - "\2zw\3\2\2\2{\r\3\2\2\2|}\7)\2\2}~\5.\30\2~\177\7i\2\2\177\u0080\b\b\1"+ - "\2\u0080\17\3\2\2\2\u0081\u0083\5 \21\2\u0082\u0081\3\2\2\2\u0083\u0086"+ - "\3\2\2\2\u0084\u0082\3\2\2\2\u0084\u0085\3\2\2\2\u0085\u0087\3\2\2\2\u0086"+ - "\u0084\3\2\2\2\u0087\u008b\5.\30\2\u0088\u008a\5 \21\2\u0089\u0088\3\2"+ - "\2\2\u008a\u008d\3\2\2\2\u008b\u0089\3\2\2\2\u008b\u008c\3\2\2\2\u008c"+ - "\21\3\2\2\2\u008d\u008b\3\2\2\2\u008e\u008f\5\20\t\2\u008f\u0090\5\24"+ - "\13\2\u0090\23\3\2\2\2\u0091\u0092\b\13\1\2\u0092\u0093\5\26\f\2\u0093"+ - "\u0099\3\2\2\2\u0094\u0095\f\3\2\2\u0095\u0096\7\f\2\2\u0096\u0098\5\26"+ - "\f\2\u0097\u0094\3\2\2\2\u0098\u009b\3\2\2\2\u0099\u0097\3\2\2\2\u0099"+ - "\u009a\3\2\2\2\u009a\25\3\2\2\2\u009b\u0099\3\2\2\2\u009c\u009f\7i\2\2"+ - "\u009d\u009e\7&\2\2\u009e\u00a0\5@!\2\u009f\u009d\3\2\2\2\u009f\u00a0"+ - "\3\2\2\2\u00a0\u00a5\3\2\2\2\u00a1\u00a2\7i\2\2\u00a2\u00a3\7&\2\2\u00a3"+ - "\u00a5\5D#\2\u00a4\u009c\3\2\2\2\u00a4\u00a1\3\2\2\2\u00a5\27\3\2\2\2"+ - "\u00a6\u00a7\5\20\t\2\u00a7\u00a8\7i\2\2\u00a8\u00aa\7\b\2\2\u00a9\u00ab"+ - "\5\32\16\2\u00aa\u00a9\3\2\2\2\u00aa\u00ab\3\2\2\2\u00ab\u00ac\3\2\2\2"+ - "\u00ac\u00ad\7\t\2\2\u00ad\u00af\7\4\2\2\u00ae\u00b0\5\"\22\2\u00af\u00ae"+ - "\3\2\2\2\u00af\u00b0\3\2\2\2\u00b0\u00b1\3\2\2\2\u00b1\u00b2\7\5\2\2\u00b2"+ - "\31\3\2\2\2\u00b3\u00b8\5\34\17\2\u00b4\u00b5\7\f\2\2\u00b5\u00b7\5\34"+ - "\17\2\u00b6\u00b4\3\2\2\2\u00b7\u00ba\3\2\2\2\u00b8\u00b6\3\2\2\2\u00b8"+ - "\u00b9\3\2\2\2\u00b9\33\3\2\2\2\u00ba\u00b8\3\2\2\2\u00bb\u00bc\5\20\t"+ - "\2\u00bc\u00bd\7i\2\2\u00bd\u00c0\3\2\2\2\u00be\u00c0\7[\2\2\u00bf\u00bb"+ - "\3\2\2\2\u00bf\u00be\3\2\2\2\u00c0\35\3\2\2\2\u00c1\u00c2\7*\2\2\u00c2"+ - "\u00c3\7+\2\2\u00c3\u00c4\3\2\2\2\u00c4\u00c5\7\b\2\2\u00c5\u00ca\7`\2"+ - "\2\u00c6\u00c7\7\f\2\2\u00c7\u00c9\7`\2\2\u00c8\u00c6\3\2\2\2\u00c9\u00cc"+ - "\3\2\2\2\u00ca\u00c8\3\2\2\2\u00ca\u00cb\3\2\2\2\u00cb\u00cd\3\2\2\2\u00cc"+ - "\u00ca\3\2\2\2\u00cd\u010c\7\t\2\2\u00ce\u00cf\7*\2\2\u00cf\u00d0\7,\2"+ - "\2\u00d0\u00d1\3\2\2\2\u00d1\u00d2\7\b\2\2\u00d2\u00d3\7`\2\2\u00d3\u010c"+ - "\7\t\2\2\u00d4\u00d5\7*\2\2\u00d5\u00d6\7-\2\2\u00d6\u00d7\3\2\2\2\u00d7"+ - "\u00d8\7\b\2\2\u00d8\u00d9\7i\2\2\u00d9\u010c\7\t\2\2\u00da\u00db\7*\2"+ - "\2\u00db\u00dc\7/\2\2\u00dc\u00dd\3\2\2\2\u00dd\u00de\7\b\2\2\u00de\u00df"+ - "\7i\2\2\u00df\u010c\7\t\2\2\u00e0\u00e1\7*\2\2\u00e1\u00e2\7.\2\2\u00e2"+ - "\u00e3\3\2\2\2\u00e3\u00e4\7\b\2\2\u00e4\u00e5\7^\2\2\u00e5\u010c\7\t"+ - "\2\2\u00e6\u00e7\7*\2\2\u00e7\u00e8\7\60\2\2\u00e8\u00e9\3\2\2\2\u00e9"+ - "\u00ea\7\b\2\2\u00ea\u00eb\7i\2\2\u00eb\u010c\7\t\2\2\u00ec\u00ed\7*\2"+ - "\2\u00ed\u00ee\7\61\2\2\u00ee\u00ef\3\2\2\2\u00ef\u00f0\7\b\2\2\u00f0"+ - "\u00f1\7i\2\2\u00f1\u010c\7\t\2\2\u00f2\u00f3\7*\2\2\u00f3\u00f4\7\62"+ - "\2\2\u00f4\u00f5\3\2\2\2\u00f5\u00f6\7\b\2\2\u00f6\u00f7\7i\2\2\u00f7"+ - "\u010c\7\t\2\2\u00f8\u00f9\7*\2\2\u00f9\u00fa\7@\2\2\u00fa\u00fb\3\2\2"+ - "\2\u00fb\u00fc\7\b\2\2\u00fc\u00fd\7A\2\2\u00fd\u010c\7\t\2\2\u00fe\u00ff"+ - "\7*\2\2\u00ff\u0100\7B\2\2\u0100\u0101\3\2\2\2\u0101\u0102\7\b\2\2\u0102"+ - "\u0107\7i\2\2\u0103\u0104\7\f\2\2\u0104\u0106\7i\2\2\u0105\u0103\3\2\2"+ - "\2\u0106\u0109\3\2\2\2\u0107\u0105\3\2\2\2\u0107\u0108\3\2\2\2\u0108\u010a"+ - "\3\2\2\2\u0109\u0107\3\2\2\2\u010a\u010c\7\t\2\2\u010b\u00c1\3\2\2\2\u010b"+ - "\u00ce\3\2\2\2\u010b\u00d4\3\2\2\2\u010b\u00da\3\2\2\2\u010b\u00e0\3\2"+ - "\2\2\u010b\u00e6\3\2\2\2\u010b\u00ec\3\2\2\2\u010b\u00f2\3\2\2\2\u010b"+ - "\u00f8\3\2\2\2\u010b\u00fe\3\2\2\2\u010c\37\3\2\2\2\u010d\u0138\7\63\2"+ - "\2\u010e\u010f\7\66\2\2\u010f\u0110\7\b\2\2\u0110\u0111\7`\2\2\u0111\u0138"+ - "\7\t\2\2\u0112\u0116\7:\2\2\u0113\u0114\7\b\2\2\u0114\u0115\7i\2\2\u0115"+ - "\u0117\7\t\2\2\u0116\u0113\3\2\2\2\u0116\u0117\3\2\2\2\u0117\u0138\3\2"+ - "\2\2\u0118\u0138\7<\2\2\u0119\u0138\7=\2\2\u011a\u011b\7;\2\2\u011b\u011c"+ - "\7\b\2\2\u011c\u011d\7`\2\2\u011d\u0138\7\t\2\2\u011e\u0138\78\2\2\u011f"+ - "\u0138\7\u0091\2\2\u0120\u0138\7>\2\2\u0121\u0138\7?\2\2\u0122\u0138\7"+ - "\64\2\2\u0123\u0138\7\65\2\2\u0124\u0138\7\67\2\2\u0125\u0129\79\2\2\u0126"+ - "\u0127\7\b\2\2\u0127\u0128\7i\2\2\u0128\u012a\7\t\2\2\u0129\u0126\3\2"+ - "\2\2\u0129\u012a\3\2\2\2\u012a\u0138\3\2\2\2\u012b\u012c\7+\2\2\u012c"+ - "\u012d\7\b\2\2\u012d\u0132\7`\2\2\u012e\u012f\7\f\2\2\u012f\u0131\7`\2"+ - "\2\u0130\u012e\3\2\2\2\u0131\u0134\3\2\2\2\u0132\u0130\3\2\2\2\u0132\u0133"+ - "\3\2\2\2\u0133\u0135\3\2\2\2\u0134\u0132\3\2\2\2\u0135\u0138\7\t\2\2\u0136"+ - "\u0138\7A\2\2\u0137\u010d\3\2\2\2\u0137\u010e\3\2\2\2\u0137\u0112\3\2"+ - "\2\2\u0137\u0118\3\2\2\2\u0137\u0119\3\2\2\2\u0137\u011a\3\2\2\2\u0137"+ - "\u011e\3\2\2\2\u0137\u011f\3\2\2\2\u0137\u0120\3\2\2\2\u0137\u0121\3\2"+ - "\2\2\u0137\u0122\3\2\2\2\u0137\u0123\3\2\2\2\u0137\u0124\3\2\2\2\u0137"+ - "\u0125\3\2\2\2\u0137\u012b\3\2\2\2\u0137\u0136\3\2\2\2\u0138!\3\2\2\2"+ - "\u0139\u013b\5$\23\2\u013a\u0139\3\2\2\2\u013b\u013c\3\2\2\2\u013c\u013a"+ - "\3\2\2\2\u013c\u013d\3\2\2\2\u013d#\3\2\2\2\u013e\u013f\5\22\n\2\u013f"+ - "\u0140\7\n\2\2\u0140\u0193\3\2\2\2\u0141\u0143\7\4\2\2\u0142\u0144\5\""+ - "\22\2\u0143\u0142\3\2\2\2\u0143\u0144\3\2\2\2\u0144\u0145\3\2\2\2\u0145"+ - "\u0193\7\5\2\2\u0146\u0147\5> \2\u0147\u0148\7\n\2\2\u0148\u0193\3\2\2"+ - "\2\u0149\u014a\7C\2\2\u014a\u014b\7\b\2\2\u014b\u014c\5> \2\u014c\u014d"+ - "\7\t\2\2\u014d\u0150\5$\23\2\u014e\u014f\7D\2\2\u014f\u0151\5$\23\2\u0150"+ - "\u014e\3\2\2\2\u0150\u0151\3\2\2\2\u0151\u0193\3\2\2\2\u0152\u0154\5 "+ - "\21\2\u0153\u0152\3\2\2\2\u0154\u0157\3\2\2\2\u0155\u0153\3\2\2\2\u0155"+ - "\u0156\3\2\2\2\u0156\u0158\3\2\2\2\u0157\u0155\3\2\2\2\u0158\u0159\7E"+ - "\2\2\u0159\u015a\7\b\2\2\u015a\u015b\5> \2\u015b\u015c\7\t\2\2\u015c\u015d"+ - "\5$\23\2\u015d\u0193\3\2\2\2\u015e\u0160\5 \21\2\u015f\u015e\3\2\2\2\u0160"+ - "\u0163\3\2\2\2\u0161\u015f\3\2\2\2\u0161\u0162\3\2\2\2\u0162\u0164\3\2"+ - "\2\2\u0163\u0161\3\2\2\2\u0164\u0165\7F\2\2\u0165\u0166\5$\23\2\u0166"+ - "\u0167\7E\2\2\u0167\u0168\7\b\2\2\u0168\u0169\5> \2\u0169\u016a\7\t\2"+ - "\2\u016a\u016b\7\n\2\2\u016b\u0193\3\2\2\2\u016c\u016e\5 \21\2\u016d\u016c"+ - "\3\2\2\2\u016e\u0171\3\2\2\2\u016f\u016d\3\2\2\2\u016f\u0170\3\2\2\2\u0170"+ - "\u0172\3\2\2\2\u0171\u016f\3\2\2\2\u0172\u0173\7G\2\2\u0173\u0174\7\b"+ - "\2\2\u0174\u0175\5*\26\2\u0175\u0176\7\t\2\2\u0176\u0177\5$\23\2\u0177"+ - "\u0193\3\2\2\2\u0178\u0179\7H\2\2\u0179\u017a\7\b\2\2\u017a\u017b\5> "+ - "\2\u017b\u017c\7\t\2\2\u017c\u017d\7\4\2\2\u017d\u017e\5&\24\2\u017e\u017f"+ - "\7\5\2\2\u017f\u0193\3\2\2\2\u0180\u0182\7I\2\2\u0181\u0183\5> \2\u0182"+ - "\u0181\3\2\2\2\u0182\u0183\3\2\2\2\u0183\u0184\3\2\2\2\u0184\u0193\7\n"+ - "\2\2\u0185\u0186\7J\2\2\u0186\u0193\7\n\2\2\u0187\u0188\7K\2\2\u0188\u0193"+ - "\7\n\2\2\u0189\u018b\7L\2\2\u018a\u018c\5F$\2\u018b\u018a\3\2\2\2\u018b"+ - "\u018c\3\2\2\2\u018c\u018d\3\2\2\2\u018d\u018e\7\4\2\2\u018e\u018f\5J"+ - "&\2\u018f\u0190\7\u0080\2\2\u0190\u0193\3\2\2\2\u0191\u0193\5D#\2\u0192"+ - "\u013e\3\2\2\2\u0192\u0141\3\2\2\2\u0192\u0146\3\2\2\2\u0192\u0149\3\2"+ - "\2\2\u0192\u0155\3\2\2\2\u0192\u0161\3\2\2\2\u0192\u016f\3\2\2\2\u0192"+ - "\u0178\3\2\2\2\u0192\u0180\3\2\2\2\u0192\u0185\3\2\2\2\u0192\u0187\3\2"+ - "\2\2\u0192\u0189\3\2\2\2\u0192\u0191\3\2\2\2\u0193%\3\2\2\2\u0194\u0196"+ - "\5(\25\2\u0195\u0194\3\2\2\2\u0196\u0197\3\2\2\2\u0197\u0195\3\2\2\2\u0197"+ - "\u0198\3\2\2\2\u0198\u019e\3\2\2\2\u0199\u019a\7M\2\2\u019a\u019c\7\13"+ - "\2\2\u019b\u019d\5\"\22\2\u019c\u019b\3\2\2\2\u019c\u019d\3\2\2\2\u019d"+ - "\u019f\3\2\2\2\u019e\u0199\3\2\2\2\u019e\u019f\3\2\2\2\u019f\'\3\2\2\2"+ - "\u01a0\u01a1\7N\2\2\u01a1\u01a2\5@!\2\u01a2\u01a4\7\13\2\2\u01a3\u01a5"+ - "\5\"\22\2\u01a4\u01a3\3\2\2\2\u01a4\u01a5\3\2\2\2\u01a5)\3\2\2\2\u01a6"+ - "\u01a7\5,\27\2\u01a7\u01a8\7\n\2\2\u01a8\u01a9\5> \2\u01a9\u01ab\7\n\2"+ - "\2\u01aa\u01ac\5> \2\u01ab\u01aa\3\2\2\2\u01ab\u01ac\3\2\2\2\u01ac\u01b7"+ - "\3\2\2\2\u01ad\u01af\5\20\t\2\u01ae\u01ad\3\2\2\2\u01ae\u01af\3\2\2\2"+ - "\u01af\u01b0\3\2\2\2\u01b0\u01b1\7i\2\2\u01b1\u01b2\7\13\2\2\u01b2\u01b3"+ - "\5@!\2\u01b3\u01b4\7\r\2\2\u01b4\u01b5\5@!\2\u01b5\u01b7\3\2\2\2\u01b6"+ - "\u01a6\3\2\2\2\u01b6\u01ae\3\2\2\2\u01b7+\3\2\2\2\u01b8\u01ba\5\22\n\2"+ - "\u01b9\u01b8\3\2\2\2\u01b9\u01ba\3\2\2\2\u01ba\u01bd\3\2\2\2\u01bb\u01bd"+ - "\5> \2\u01bc\u01b9\3\2\2\2\u01bc\u01bb\3\2\2\2\u01bd-\3\2\2\2\u01be\u01bf"+ - "\b\30\1\2\u01bf\u01c0\7\b\2\2\u01c0\u01c1\5.\30\2\u01c1\u01c2\7\t\2\2"+ - "\u01c2\u01ce\3\2\2\2\u01c3\u01ce\7[\2\2\u01c4\u01c6\7Z\2\2\u01c5\u01c7"+ - "\7[\2\2\u01c6\u01c5\3\2\2\2\u01c6\u01c7\3\2\2\2\u01c7\u01ce\3\2\2\2\u01c8"+ - "\u01ce\5\62\32\2\u01c9\u01ce\5\60\31\2\u01ca\u01ce\58\35\2\u01cb\u01ce"+ - "\5\66\34\2\u01cc\u01ce\7\3\2\2\u01cd\u01be\3\2\2\2\u01cd\u01c3\3\2\2\2"+ - "\u01cd\u01c4\3\2\2\2\u01cd\u01c8\3\2\2\2\u01cd\u01c9\3\2\2\2\u01cd\u01ca"+ - "\3\2\2\2\u01cd\u01cb\3\2\2\2\u01cd\u01cc\3\2\2\2\u01ce\u01dc\3\2\2\2\u01cf"+ - "\u01d0\f\n\2\2\u01d0\u01db\7\23\2\2\u01d1\u01d2\f\t\2\2\u01d2\u01d4\7"+ - "\6\2\2\u01d3\u01d5\5@!\2\u01d4\u01d3\3\2\2\2\u01d4\u01d5\3\2\2\2\u01d5"+ - "\u01d6\3\2\2\2\u01d6\u01db\7\7\2\2\u01d7\u01d8\f\b\2\2\u01d8\u01d9\7\b"+ - "\2\2\u01d9\u01db\7\t\2\2\u01da\u01cf\3\2\2\2\u01da\u01d1\3\2\2\2\u01da"+ - "\u01d7\3\2\2\2\u01db\u01de\3\2\2\2\u01dc\u01da\3\2\2\2\u01dc\u01dd\3\2"+ - "\2\2\u01dd/\3\2\2\2\u01de\u01dc\3\2\2\2\u01df\u01e0\7O\2\2\u01e0\u01e1"+ - "\7i\2\2\u01e1\61\3\2\2\2\u01e2\u01e4\7O\2\2\u01e3\u01e5\7i\2\2\u01e4\u01e3"+ - "\3\2\2\2\u01e4\u01e5\3\2\2\2\u01e5\u01e6\3\2\2\2\u01e6\u01e8\7\4\2\2\u01e7"+ - "\u01e9\5\64\33\2\u01e8\u01e7\3\2\2\2\u01e9\u01ea\3\2\2\2\u01ea\u01e8\3"+ - "\2\2\2\u01ea\u01eb\3\2\2\2\u01eb\u01ec\3\2\2\2\u01ec\u01ed\7\5\2\2\u01ed"+ - "\63\3\2\2\2\u01ee\u01ef\5\22\n\2\u01ef\u01f0\7\n\2\2\u01f0\65\3\2\2\2"+ - "\u01f1\u01f2\7P\2\2\u01f2\u01f3\7i\2\2\u01f3\67\3\2\2\2\u01f4\u01f6\7"+ - "P\2\2\u01f5\u01f7\7i\2\2\u01f6\u01f5\3\2\2\2\u01f6\u01f7\3\2\2\2\u01f7"+ - "\u01f8\3\2\2\2\u01f8\u01f9\7\4\2\2\u01f9\u01fa\5:\36\2\u01fa\u01fb\7\5"+ - "\2\2\u01fb9\3\2\2\2\u01fc\u01fd\b\36\1\2\u01fd\u01fe\5<\37\2\u01fe\u0204"+ - "\3\2\2\2\u01ff\u0200\f\3\2\2\u0200\u0201\7\f\2\2\u0201\u0203\5<\37\2\u0202"+ - "\u01ff\3\2\2\2\u0203\u0206\3\2\2\2\u0204\u0202\3\2\2\2\u0204\u0205\3\2"+ - "\2\2\u0205;\3\2\2\2\u0206\u0204\3\2\2\2\u0207\u020a\7i\2\2\u0208\u0209"+ - "\7&\2\2\u0209\u020b\5@!\2\u020a\u0208\3\2\2\2\u020a\u020b\3\2\2\2\u020b"+ - "=\3\2\2\2\u020c\u020d\b \1\2\u020d\u020e\5@!\2\u020e\u0214\3\2\2\2\u020f"+ - "\u0210\f\3\2\2\u0210\u0211\7\f\2\2\u0211\u0213\5@!\2\u0212\u020f\3\2\2"+ - "\2\u0213\u0216\3\2\2\2\u0214\u0212\3\2\2\2\u0214\u0215\3\2\2\2\u0215?"+ - "\3\2\2\2\u0216\u0214\3\2\2\2\u0217\u0218\b!\1\2\u0218\u0219\7\b\2\2\u0219"+ - "\u021a\5> \2\u021a\u021b\7\t\2\2\u021b\u024e\3\2\2\2\u021c\u021d\7Q\2"+ - "\2\u021d\u0220\7\b\2\2\u021e\u0221\5@!\2\u021f\u0221\5.\30\2\u0220\u021e"+ - "\3\2\2\2\u0220\u021f\3\2\2\2\u0221\u0222\3\2\2\2\u0222\u0223\7\t\2\2\u0223"+ - "\u024e\3\2\2\2\u0224\u0225\7R\2\2\u0225\u0228\7\b\2\2\u0226\u0229\5@!"+ - "\2\u0227\u0229\5.\30\2\u0228\u0226\3\2\2\2\u0228\u0227\3\2\2\2\u0229\u022a"+ - "\3\2\2\2\u022a\u022b\7\t\2\2\u022b\u024e\3\2\2\2\u022c\u022d\7\b\2\2\u022d"+ - "\u022e\5.\30\2\u022e\u022f\7\t\2\2\u022f\u0230\5@!\32\u0230\u024e\3\2"+ - "\2\2\u0231\u0232\t\2\2\2\u0232\u024e\5@!\31\u0233\u0234\7\23\2\2\u0234"+ - "\u024e\5@!\27\u0235\u0236\t\3\2\2\u0236\u024e\5@!\26\u0237\u0238\t\4\2"+ - "\2\u0238\u024e\5@!\22\u0239\u023a\7\4\2\2\u023a\u023f\5@!\2\u023b\u023c"+ - "\7\f\2\2\u023c\u023e\5@!\2\u023d\u023b\3\2\2\2\u023e\u0241\3\2\2\2\u023f"+ - "\u023d\3\2\2\2\u023f\u0240\3\2\2\2\u0240\u0242\3\2\2\2\u0241\u023f\3\2"+ - "\2\2\u0242\u0243\7\5\2\2\u0243\u024e\3\2\2\2\u0244\u024e\7i\2\2\u0245"+ - "\u024e\7`\2\2\u0246\u0248\7^\2\2\u0247\u0246\3\2\2\2\u0248\u0249\3\2\2"+ - "\2\u0249\u0247\3\2\2\2\u0249\u024a\3\2\2\2\u024a\u024e\3\2\2\2\u024b\u024e"+ - "\7_\2\2\u024c\u024e\7\\\2\2\u024d\u0217\3\2\2\2\u024d\u021c\3\2\2\2\u024d"+ - "\u0224\3\2\2\2\u024d\u022c\3\2\2\2\u024d\u0231\3\2\2\2\u024d\u0233\3\2"+ - "\2\2\u024d\u0235\3\2\2\2\u024d\u0237\3\2\2\2\u024d\u0239\3\2\2\2\u024d"+ - "\u0244\3\2\2\2\u024d\u0245\3\2\2\2\u024d\u0247\3\2\2\2\u024d\u024b\3\2"+ - "\2\2\u024d\u024c\3\2\2\2\u024e\u028b\3\2\2\2\u024f\u0250\f\25\2\2\u0250"+ - "\u0251\t\5\2\2\u0251\u028a\5@!\26\u0252\u0253\f\24\2\2\u0253\u0254\t\6"+ - "\2\2\u0254\u028a\5@!\25\u0255\u0256\f\23\2\2\u0256\u0257\t\7\2\2\u0257"+ - "\u028a\5@!\24\u0258\u0259\f\21\2\2\u0259\u025a\t\b\2\2\u025a\u028a\5@"+ - "!\22\u025b\u025c\f\20\2\2\u025c\u025d\7\30\2\2\u025d\u028a\5@!\21\u025e"+ - "\u025f\f\17\2\2\u025f\u0260\7\32\2\2\u0260\u028a\5@!\20\u0261\u0262\f"+ - "\16\2\2\u0262\u0263\7\33\2\2\u0263\u028a\5@!\17\u0264\u0265\f\r\2\2\u0265"+ - "\u0266\7$\2\2\u0266\u028a\5@!\16\u0267\u0268\f\f\2\2\u0268\u0269\7%\2"+ - "\2\u0269\u028a\5@!\r\u026a\u026b\f\13\2\2\u026b\u026c\7\16\2\2\u026c\u026d"+ - "\5@!\2\u026d\u026e\7\13\2\2\u026e\u026f\5@!\f\u026f\u028a\3\2\2\2\u0270"+ - "\u0271\f\n\2\2\u0271\u0272\7&\2\2\u0272\u028a\5@!\n\u0273\u0274\f\t\2"+ - "\2\u0274\u0275\7\'\2\2\u0275\u028a\5@!\t\u0276\u0277\f \2\2\u0277\u0278"+ - "\7\17\2\2\u0278\u028a\7i\2\2\u0279\u027a\f\37\2\2\u027a\u027b\7\20\2\2"+ - "\u027b\u028a\7i\2\2\u027c\u027d\f\36\2\2\u027d\u027f\7\b\2\2\u027e\u0280"+ - "\5B\"\2\u027f\u027e\3\2\2\2\u027f\u0280\3\2\2\2\u0280\u0281\3\2\2\2\u0281"+ - "\u028a\7\t\2\2\u0282\u0283\f\33\2\2\u0283\u0284\7\6\2\2\u0284\u0285\5"+ - "> \2\u0285\u0286\7\7\2\2\u0286\u028a\3\2\2\2\u0287\u0288\f\30\2\2\u0288"+ - "\u028a\t\2\2\2\u0289\u024f\3\2\2\2\u0289\u0252\3\2\2\2\u0289\u0255\3\2"+ - "\2\2\u0289\u0258\3\2\2\2\u0289\u025b\3\2\2\2\u0289\u025e\3\2\2\2\u0289"+ - "\u0261\3\2\2\2\u0289\u0264\3\2\2\2\u0289\u0267\3\2\2\2\u0289\u026a\3\2"+ - "\2\2\u0289\u0270\3\2\2\2\u0289\u0273\3\2\2\2\u0289\u0276\3\2\2\2\u0289"+ - "\u0279\3\2\2\2\u0289\u027c\3\2\2\2\u0289\u0282\3\2\2\2\u0289\u0287\3\2"+ - "\2\2\u028a\u028d\3\2\2\2\u028b\u0289\3\2\2\2\u028b\u028c\3\2\2\2\u028c"+ - "A\3\2\2\2\u028d\u028b\3\2\2\2\u028e\u0293\5@!\2\u028f\u0290\7\f\2\2\u0290"+ - "\u0292\5@!\2\u0291\u028f\3\2\2\2\u0292\u0295\3\2\2\2\u0293\u0291\3\2\2"+ - "\2\u0293\u0294\3\2\2\2\u0294C\3\2\2\2\u0295\u0293\3\2\2\2\u0296\u0298"+ - "\7S\2\2\u0297\u0299\5F$\2\u0298\u0297\3\2\2\2\u0298\u0299\3\2\2\2\u0299"+ - "\u029a\3\2\2\2\u029a\u029b\7]\2\2\u029bE\3\2\2\2\u029c\u029d\7\b\2\2\u029d"+ - "\u02a2\5H%\2\u029e\u029f\7\f\2\2\u029f\u02a1\5H%\2\u02a0\u029e\3\2\2\2"+ - "\u02a1\u02a4\3\2\2\2\u02a2\u02a0\3\2\2\2\u02a2\u02a3\3\2\2\2\u02a3\u02a5"+ - "\3\2\2\2\u02a4\u02a2\3\2\2\2\u02a5\u02a6\7\t\2\2\u02a6G\3\2\2\2\u02a7"+ - "\u02a8\7T\2\2\u02a8\u02b7\7^\2\2\u02a9\u02aa\7U\2\2\u02aa\u02b7\7i\2\2"+ - "\u02ab\u02ac\7V\2\2\u02ac\u02b7\7^\2\2\u02ad\u02ae\7W\2\2\u02ae\u02b7"+ - "\5@!\2\u02af\u02b0\7X\2\2\u02b0\u02b7\5@!\2\u02b1\u02b4\7,\2\2\u02b2\u02b5"+ - "\7\67\2\2\u02b3\u02b5\5@!\2\u02b4\u02b2\3\2\2\2\u02b4\u02b3\3\2\2\2\u02b5"+ - "\u02b7\3\2\2\2\u02b6\u02a7\3\2\2\2\u02b6\u02a9\3\2\2\2\u02b6\u02ab\3\2"+ - "\2\2\u02b6\u02ad\3\2\2\2\u02b6\u02af\3\2\2\2\u02b6\u02b1\3\2\2\2\u02b7"+ - "I\3\2\2\2\u02b8\u02ba\5L\'\2\u02b9\u02b8\3\2\2\2\u02ba\u02bd\3\2\2\2\u02bb"+ - "\u02b9\3\2\2\2\u02bb\u02bc\3\2\2\2\u02bcK\3\2\2\2\u02bd\u02bb\3\2\2\2"+ - "\u02be\u02c2\5N(\2\u02bf\u02c2\5P)\2\u02c0\u02c2\5R*\2\u02c1\u02be\3\2"+ - "\2\2\u02c1\u02bf\3\2\2\2\u02c1\u02c0\3\2\2\2\u02c2M\3\2\2\2\u02c3\u02c4"+ - "\7\u008d\2\2\u02c4\u02c8\7p\2\2\u02c5\u02c6\7\u008c\2\2\u02c6\u02c8\7"+ - "p\2\2\u02c7\u02c3\3\2\2\2\u02c7\u02c5\3\2\2\2\u02c8O\3\2\2\2\u02c9\u02cb"+ - "\7n\2\2\u02ca\u02cc\5T+\2\u02cb\u02ca\3\2\2\2\u02cb\u02cc\3\2\2\2\u02cc"+ - "Q\3\2\2\2\u02cd\u02ce\7m\2\2\u02ce\u02d3\5V,\2\u02cf\u02d0\7q\2\2\u02d0"+ - "\u02d2\5V,\2\u02d1\u02cf\3\2\2\2\u02d2\u02d5\3\2\2\2\u02d3\u02d1\3\2\2"+ - "\2\u02d3\u02d4\3\2\2\2\u02d4S\3\2\2\2\u02d5\u02d3\3\2\2\2\u02d6\u02ee"+ - "\5V,\2\u02d7\u02d8\7o\2\2\u02d8\u02ee\5V,\2\u02d9\u02da\5V,\2\u02da\u02db"+ - "\7q\2\2\u02db\u02dc\7\u008d\2\2\u02dc\u02ee\3\2\2\2\u02dd\u02de\7r\2\2"+ - "\u02de\u02df\5V,\2\u02df\u02e0\7s\2\2\u02e0\u02e1\7q\2\2\u02e1\u02e2\7"+ - "\u008d\2\2\u02e2\u02ee\3\2\2\2\u02e3\u02e4\7r\2\2\u02e4\u02e5\5V,\2\u02e5"+ - "\u02e6\7q\2\2\u02e6\u02e7\7\u008d\2\2\u02e7\u02e8\7s\2\2\u02e8\u02ee\3"+ - "\2\2\2\u02e9\u02ea\7r\2\2\u02ea\u02eb\5V,\2\u02eb\u02ec\7s\2\2\u02ec\u02ee"+ - "\3\2\2\2\u02ed\u02d6\3\2\2\2\u02ed\u02d7\3\2\2\2\u02ed\u02d9\3\2\2\2\u02ed"+ - "\u02dd\3\2\2\2\u02ed\u02e3\3\2\2\2\u02ed\u02e9\3\2\2\2\u02eeU\3\2\2\2"+ - "\u02ef\u02f0\b,\1\2\u02f0\u02f1\7t\2\2\u02f1\u02f2\5V,\2\u02f2\u02f3\7"+ - "u\2\2\u02f3\u02fe\3\2\2\2\u02f4\u02f5\t\t\2\2\u02f5\u02fe\5V,\n\u02f6"+ - "\u02fe\7\u008d\2\2\u02f7\u02fe\7\u008b\2\2\u02f8\u02f9\7\177\2\2\u02f9"+ - "\u02fa\7\u008d\2\2\u02fa\u02fe\7\u0080\2\2\u02fb\u02fe\7\u0081\2\2\u02fc"+ - "\u02fe\7\u008a\2\2\u02fd\u02ef\3\2\2\2\u02fd\u02f4\3\2\2\2\u02fd\u02f6"+ - "\3\2\2\2\u02fd\u02f7\3\2\2\2\u02fd\u02f8\3\2\2\2\u02fd\u02fb\3\2\2\2\u02fd"+ - "\u02fc\3\2\2\2\u02fe\u030d\3\2\2\2\u02ff\u0300\f\f\2\2\u0300\u0301\7v"+ - "\2\2\u0301\u030c\5V,\r\u0302\u0303\f\13\2\2\u0303\u0304\t\n\2\2\u0304"+ - "\u030c\5V,\f\u0305\u0306\f\t\2\2\u0306\u0307\t\13\2\2\u0307\u030c\5V,"+ - "\n\u0308\u0309\f\b\2\2\u0309\u030a\t\f\2\2\u030a\u030c\5V,\t\u030b\u02ff"+ - "\3\2\2\2\u030b\u0302\3\2\2\2\u030b\u0305\3\2\2\2\u030b\u0308\3\2\2\2\u030c"+ - "\u030f\3\2\2\2\u030d\u030b\3\2\2\2\u030d\u030e\3\2\2\2\u030eW\3\2\2\2"+ - "\u030f\u030d\3\2\2\2Hafz\u0084\u008b\u0099\u009f\u00a4\u00aa\u00af\u00b8"+ - "\u00bf\u00ca\u0107\u010b\u0116\u0129\u0132\u0137\u013c\u0143\u0150\u0155"+ - "\u0161\u016f\u0182\u018b\u0192\u0197\u019c\u019e\u01a4\u01ab\u01ae\u01b6"+ - "\u01b9\u01bc\u01c6\u01cd\u01d4\u01da\u01dc\u01e4\u01ea\u01f6\u0204\u020a"+ - "\u0214\u0220\u0228\u023f\u0249\u024d\u027f\u0289\u028b\u0293\u0298\u02a2"+ - "\u02b4\u02b6\u02bb\u02c1\u02c7\u02cb\u02d3\u02ed\u02fd\u030b\u030d"; + ",\t,\4-\t-\3\2\3\2\3\2\3\3\3\3\3\3\3\4\7\4b\n\4\f\4\16\4e\13\4\3\5\3\5"+ + "\5\5i\n\5\3\6\3\6\3\6\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7"+ + "\3\7\3\7\3\7\5\7}\n\7\3\b\3\b\3\b\3\b\3\b\3\t\7\t\u0085\n\t\f\t\16\t\u0088"+ + "\13\t\3\t\3\t\7\t\u008c\n\t\f\t\16\t\u008f\13\t\3\n\3\n\3\n\3\13\3\13"+ + "\3\13\3\13\3\13\3\13\7\13\u009a\n\13\f\13\16\13\u009d\13\13\3\f\3\f\3"+ + "\f\5\f\u00a2\n\f\3\f\3\f\3\f\3\f\5\f\u00a8\n\f\3\r\3\r\3\r\3\r\3\r\3\r"+ + "\5\r\u00b0\n\r\3\r\7\r\u00b3\n\r\f\r\16\r\u00b6\13\r\3\16\3\16\3\16\3"+ + "\16\5\16\u00bc\n\16\3\16\3\16\3\16\5\16\u00c1\n\16\3\16\3\16\3\17\3\17"+ + "\3\17\7\17\u00c8\n\17\f\17\16\17\u00cb\13\17\3\20\3\20\3\20\3\20\5\20"+ + "\u00d1\n\20\3\21\3\21\3\21\3\21\3\21\3\21\3\21\7\21\u00da\n\21\f\21\16"+ + "\21\u00dd\13\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21"+ + "\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21"+ + "\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21"+ + "\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21"+ + "\3\21\3\21\3\21\7\21\u0117\n\21\f\21\16\21\u011a\13\21\3\21\5\21\u011d"+ + "\n\21\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\5\22\u0128\n\22\3\22"+ + "\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22"+ + "\3\22\3\22\5\22\u013b\n\22\3\22\3\22\3\22\3\22\3\22\7\22\u0142\n\22\f"+ + "\22\16\22\u0145\13\22\3\22\3\22\5\22\u0149\n\22\3\23\6\23\u014c\n\23\r"+ + "\23\16\23\u014d\3\24\3\24\3\24\3\24\3\24\5\24\u0155\n\24\3\24\3\24\3\24"+ + "\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\5\24\u0162\n\24\3\24\7\24\u0165"+ + "\n\24\f\24\16\24\u0168\13\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\7\24\u0171"+ + "\n\24\f\24\16\24\u0174\13\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3"+ + "\24\7\24\u017f\n\24\f\24\16\24\u0182\13\24\3\24\3\24\3\24\3\24\3\24\3"+ + "\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\5\24\u0194\n\24"+ + "\3\24\3\24\3\24\3\24\3\24\3\24\3\24\5\24\u019d\n\24\3\24\3\24\3\24\3\24"+ + "\3\24\5\24\u01a4\n\24\3\25\6\25\u01a7\n\25\r\25\16\25\u01a8\3\25\3\25"+ + "\3\25\5\25\u01ae\n\25\5\25\u01b0\n\25\3\26\3\26\3\26\3\26\5\26\u01b6\n"+ + "\26\3\27\3\27\3\27\3\27\3\27\5\27\u01bd\n\27\3\27\5\27\u01c0\n\27\3\27"+ + "\3\27\3\27\3\27\3\27\3\27\5\27\u01c8\n\27\3\30\5\30\u01cb\n\30\3\30\5"+ + "\30\u01ce\n\30\3\31\3\31\3\31\3\31\3\31\3\31\3\31\3\31\5\31\u01d8\n\31"+ + "\3\31\3\31\3\31\3\31\3\31\5\31\u01df\n\31\3\31\3\31\3\31\3\31\3\31\5\31"+ + "\u01e6\n\31\3\31\3\31\3\31\3\31\7\31\u01ec\n\31\f\31\16\31\u01ef\13\31"+ + "\3\32\3\32\3\32\3\33\3\33\5\33\u01f6\n\33\3\33\3\33\6\33\u01fa\n\33\r"+ + "\33\16\33\u01fb\3\33\3\33\3\34\3\34\3\34\3\35\3\35\3\35\3\36\3\36\5\36"+ + "\u0208\n\36\3\36\3\36\3\36\3\36\3\37\3\37\3\37\3\37\3\37\3\37\7\37\u0214"+ + "\n\37\f\37\16\37\u0217\13\37\3 \3 \3 \5 \u021c\n \3!\3!\3!\3!\3!\3!\7"+ + "!\u0224\n!\f!\16!\u0227\13!\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\5\"\u0232"+ + "\n\"\3\"\3\"\3\"\3\"\3\"\3\"\5\"\u023a\n\"\3\"\3\"\3\"\3\"\3\"\3\"\3\""+ + "\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\7\"\u024f\n\"\f\"\16"+ + "\"\u0252\13\"\3\"\3\"\3\"\3\"\3\"\6\"\u0259\n\"\r\"\16\"\u025a\3\"\3\""+ + "\5\"\u025f\n\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\""+ + "\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3"+ + "\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\5\""+ + "\u0291\n\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\7\"\u029b\n\"\f\"\16\"\u029e"+ + "\13\"\3#\3#\3#\7#\u02a3\n#\f#\16#\u02a6\13#\3$\3$\5$\u02aa\n$\3$\3$\3"+ + "%\3%\3%\3%\7%\u02b2\n%\f%\16%\u02b5\13%\3%\3%\3&\3&\3&\3&\3&\3&\3&\3&"+ + "\3&\3&\3&\3&\3&\5&\u02c6\n&\5&\u02c8\n&\3\'\7\'\u02cb\n\'\f\'\16\'\u02ce"+ + "\13\'\3(\3(\3(\5(\u02d3\n(\3)\3)\3)\3)\5)\u02d9\n)\3*\3*\5*\u02dd\n*\3"+ + "+\3+\3+\3+\7+\u02e3\n+\f+\16+\u02e6\13+\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,"+ + "\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\5,\u02ff\n,\3-\3-\3-\3-\3-\3-"+ + "\3-\3-\3-\3-\3-\3-\3-\3-\5-\u030f\n-\3-\3-\3-\3-\3-\3-\3-\3-\3-\3-\3-"+ + "\3-\7-\u031d\n-\f-\16-\u0320\13-\3-\2\t\24\30\60<@BX.\2\4\6\b\n\f\16\20"+ + "\22\24\26\30\32\34\36 \"$&(*,.\60\62\64\668:<>@BDFHJLNPRTVX\2\r\3\2\26"+ + "\27\5\2\21\22\30\31ZZ\4\2 ##\3\2\34\35\3\2\23\25\3\2\21\22\3\2\36#\3"+ + "\2z}\3\2xy\3\2~\177\3\2z{\2\u0395\2Z\3\2\2\2\4]\3\2\2\2\6c\3\2\2\2\bh"+ + "\3\2\2\2\nj\3\2\2\2\f|\3\2\2\2\16~\3\2\2\2\20\u0086\3\2\2\2\22\u0090\3"+ + "\2\2\2\24\u0093\3\2\2\2\26\u00a7\3\2\2\2\30\u00a9\3\2\2\2\32\u00b7\3\2"+ + "\2\2\34\u00c4\3\2\2\2\36\u00d0\3\2\2\2 \u011c\3\2\2\2\"\u0148\3\2\2\2"+ + "$\u014b\3\2\2\2&\u01a3\3\2\2\2(\u01a6\3\2\2\2*\u01b1\3\2\2\2,\u01c7\3"+ + "\2\2\2.\u01cd\3\2\2\2\60\u01de\3\2\2\2\62\u01f0\3\2\2\2\64\u01f3\3\2\2"+ + "\2\66\u01ff\3\2\2\28\u0202\3\2\2\2:\u0205\3\2\2\2<\u020d\3\2\2\2>\u0218"+ + "\3\2\2\2@\u021d\3\2\2\2B\u025e\3\2\2\2D\u029f\3\2\2\2F\u02a7\3\2\2\2H"+ + "\u02ad\3\2\2\2J\u02c7\3\2\2\2L\u02cc\3\2\2\2N\u02d2\3\2\2\2P\u02d8\3\2"+ + "\2\2R\u02da\3\2\2\2T\u02de\3\2\2\2V\u02fe\3\2\2\2X\u030e\3\2\2\2Z[\5\6"+ + "\4\2[\\\7\2\2\3\\\3\3\2\2\2]^\5L\'\2^_\7\2\2\3_\5\3\2\2\2`b\5\b\5\2a`"+ + "\3\2\2\2be\3\2\2\2ca\3\2\2\2cd\3\2\2\2d\7\3\2\2\2ec\3\2\2\2fi\5\f\7\2"+ + "gi\5\n\6\2hf\3\2\2\2hg\3\2\2\2i\t\3\2\2\2jk\7(\2\2kl\7_\2\2l\13\3\2\2"+ + "\2mn\5\22\n\2no\7\n\2\2o}\3\2\2\2pq\5\64\33\2qr\7\n\2\2r}\3\2\2\2st\5"+ + ":\36\2tu\7\n\2\2u}\3\2\2\2v}\5\32\16\2w}\5F$\2x}\5 \21\2yz\5\16\b\2z{"+ + "\7\n\2\2{}\3\2\2\2|m\3\2\2\2|p\3\2\2\2|s\3\2\2\2|v\3\2\2\2|w\3\2\2\2|"+ + "x\3\2\2\2|y\3\2\2\2}\r\3\2\2\2~\177\7)\2\2\177\u0080\5\60\31\2\u0080\u0081"+ + "\7j\2\2\u0081\u0082\b\b\1\2\u0082\17\3\2\2\2\u0083\u0085\5\"\22\2\u0084"+ + "\u0083\3\2\2\2\u0085\u0088\3\2\2\2\u0086\u0084\3\2\2\2\u0086\u0087\3\2"+ + "\2\2\u0087\u0089\3\2\2\2\u0088\u0086\3\2\2\2\u0089\u008d\5\60\31\2\u008a"+ + "\u008c\5\"\22\2\u008b\u008a\3\2\2\2\u008c\u008f\3\2\2\2\u008d\u008b\3"+ + "\2\2\2\u008d\u008e\3\2\2\2\u008e\21\3\2\2\2\u008f\u008d\3\2\2\2\u0090"+ + "\u0091\5\20\t\2\u0091\u0092\5\24\13\2\u0092\23\3\2\2\2\u0093\u0094\b\13"+ + "\1\2\u0094\u0095\5\26\f\2\u0095\u009b\3\2\2\2\u0096\u0097\f\3\2\2\u0097"+ + "\u0098\7\f\2\2\u0098\u009a\5\26\f\2\u0099\u0096\3\2\2\2\u009a\u009d\3"+ + "\2\2\2\u009b\u0099\3\2\2\2\u009b\u009c\3\2\2\2\u009c\25\3\2\2\2\u009d"+ + "\u009b\3\2\2\2\u009e\u00a1\5\30\r\2\u009f\u00a0\7&\2\2\u00a0\u00a2\5B"+ + "\"\2\u00a1\u009f\3\2\2\2\u00a1\u00a2\3\2\2\2\u00a2\u00a8\3\2\2\2\u00a3"+ + "\u00a4\5\30\r\2\u00a4\u00a5\7&\2\2\u00a5\u00a6\5F$\2\u00a6\u00a8\3\2\2"+ + "\2\u00a7\u009e\3\2\2\2\u00a7\u00a3\3\2\2\2\u00a8\27\3\2\2\2\u00a9\u00aa"+ + "\b\r\1\2\u00aa\u00ab\7j\2\2\u00ab\u00b4\3\2\2\2\u00ac\u00ad\f\3\2\2\u00ad"+ + "\u00af\7\6\2\2\u00ae\u00b0\5B\"\2\u00af\u00ae\3\2\2\2\u00af\u00b0\3\2"+ + "\2\2\u00b0\u00b1\3\2\2\2\u00b1\u00b3\7\7\2\2\u00b2\u00ac\3\2\2\2\u00b3"+ + "\u00b6\3\2\2\2\u00b4\u00b2\3\2\2\2\u00b4\u00b5\3\2\2\2\u00b5\31\3\2\2"+ + "\2\u00b6\u00b4\3\2\2\2\u00b7\u00b8\5\20\t\2\u00b8\u00b9\7j\2\2\u00b9\u00bb"+ + "\7\b\2\2\u00ba\u00bc\5\34\17\2\u00bb\u00ba\3\2\2\2\u00bb\u00bc\3\2\2\2"+ + "\u00bc\u00bd\3\2\2\2\u00bd\u00be\7\t\2\2\u00be\u00c0\7\4\2\2\u00bf\u00c1"+ + "\5$\23\2\u00c0\u00bf\3\2\2\2\u00c0\u00c1\3\2\2\2\u00c1\u00c2\3\2\2\2\u00c2"+ + "\u00c3\7\5\2\2\u00c3\33\3\2\2\2\u00c4\u00c9\5\36\20\2\u00c5\u00c6\7\f"+ + "\2\2\u00c6\u00c8\5\36\20\2\u00c7\u00c5\3\2\2\2\u00c8\u00cb\3\2\2\2\u00c9"+ + "\u00c7\3\2\2\2\u00c9\u00ca\3\2\2\2\u00ca\35\3\2\2\2\u00cb\u00c9\3\2\2"+ + "\2\u00cc\u00cd\5\20\t\2\u00cd\u00ce\7j\2\2\u00ce\u00d1\3\2\2\2\u00cf\u00d1"+ + "\7\\\2\2\u00d0\u00cc\3\2\2\2\u00d0\u00cf\3\2\2\2\u00d1\37\3\2\2\2\u00d2"+ + "\u00d3\7*\2\2\u00d3\u00d4\7+\2\2\u00d4\u00d5\3\2\2\2\u00d5\u00d6\7\b\2"+ + "\2\u00d6\u00db\7a\2\2\u00d7\u00d8\7\f\2\2\u00d8\u00da\7a\2\2\u00d9\u00d7"+ + "\3\2\2\2\u00da\u00dd\3\2\2\2\u00db\u00d9\3\2\2\2\u00db\u00dc\3\2\2\2\u00dc"+ + "\u00de\3\2\2\2\u00dd\u00db\3\2\2\2\u00de\u011d\7\t\2\2\u00df\u00e0\7*"+ + "\2\2\u00e0\u00e1\7,\2\2\u00e1\u00e2\3\2\2\2\u00e2\u00e3\7\b\2\2\u00e3"+ + "\u00e4\7a\2\2\u00e4\u011d\7\t\2\2\u00e5\u00e6\7*\2\2\u00e6\u00e7\7-\2"+ + "\2\u00e7\u00e8\3\2\2\2\u00e8\u00e9\7\b\2\2\u00e9\u00ea\7j\2\2\u00ea\u011d"+ + "\7\t\2\2\u00eb\u00ec\7*\2\2\u00ec\u00ed\7/\2\2\u00ed\u00ee\3\2\2\2\u00ee"+ + "\u00ef\7\b\2\2\u00ef\u00f0\7j\2\2\u00f0\u011d\7\t\2\2\u00f1\u00f2\7*\2"+ + "\2\u00f2\u00f3\7.\2\2\u00f3\u00f4\3\2\2\2\u00f4\u00f5\7\b\2\2\u00f5\u00f6"+ + "\7_\2\2\u00f6\u011d\7\t\2\2\u00f7\u00f8\7*\2\2\u00f8\u00f9\7\60\2\2\u00f9"+ + "\u00fa\3\2\2\2\u00fa\u00fb\7\b\2\2\u00fb\u00fc\7j\2\2\u00fc\u011d\7\t"+ + "\2\2\u00fd\u00fe\7*\2\2\u00fe\u00ff\7\61\2\2\u00ff\u0100\3\2\2\2\u0100"+ + "\u0101\7\b\2\2\u0101\u0102\7j\2\2\u0102\u011d\7\t\2\2\u0103\u0104\7*\2"+ + "\2\u0104\u0105\7\62\2\2\u0105\u0106\3\2\2\2\u0106\u0107\7\b\2\2\u0107"+ + "\u0108\7j\2\2\u0108\u011d\7\t\2\2\u0109\u010a\7*\2\2\u010a\u010b\7A\2"+ + "\2\u010b\u010c\3\2\2\2\u010c\u010d\7\b\2\2\u010d\u010e\7B\2\2\u010e\u011d"+ + "\7\t\2\2\u010f\u0110\7*\2\2\u0110\u0111\7C\2\2\u0111\u0112\3\2\2\2\u0112"+ + "\u0113\7\b\2\2\u0113\u0118\7j\2\2\u0114\u0115\7\f\2\2\u0115\u0117\7j\2"+ + "\2\u0116\u0114\3\2\2\2\u0117\u011a\3\2\2\2\u0118\u0116\3\2\2\2\u0118\u0119"+ + "\3\2\2\2\u0119\u011b\3\2\2\2\u011a\u0118\3\2\2\2\u011b\u011d\7\t\2\2\u011c"+ + "\u00d2\3\2\2\2\u011c\u00df\3\2\2\2\u011c\u00e5\3\2\2\2\u011c\u00eb\3\2"+ + "\2\2\u011c\u00f1\3\2\2\2\u011c\u00f7\3\2\2\2\u011c\u00fd\3\2\2\2\u011c"+ + "\u0103\3\2\2\2\u011c\u0109\3\2\2\2\u011c\u010f\3\2\2\2\u011d!\3\2\2\2"+ + "\u011e\u0149\7\63\2\2\u011f\u0120\7\66\2\2\u0120\u0121\7\b\2\2\u0121\u0122"+ + "\7a\2\2\u0122\u0149\7\t\2\2\u0123\u0127\7;\2\2\u0124\u0125\7\b\2\2\u0125"+ + "\u0126\7j\2\2\u0126\u0128\7\t\2\2\u0127\u0124\3\2\2\2\u0127\u0128\3\2"+ + "\2\2\u0128\u0149\3\2\2\2\u0129\u0149\7=\2\2\u012a\u0149\7>\2\2\u012b\u012c"+ + "\7<\2\2\u012c\u012d\7\b\2\2\u012d\u012e\7a\2\2\u012e\u0149\7\t\2\2\u012f"+ + "\u0149\78\2\2\u0130\u0149\79\2\2\u0131\u0149\7?\2\2\u0132\u0149\7@\2\2"+ + "\u0133\u0149\7\64\2\2\u0134\u0149\7\65\2\2\u0135\u0149\7\67\2\2\u0136"+ + "\u013a\7:\2\2\u0137\u0138\7\b\2\2\u0138\u0139\7j\2\2\u0139\u013b\7\t\2"+ + "\2\u013a\u0137\3\2\2\2\u013a\u013b\3\2\2\2\u013b\u0149\3\2\2\2\u013c\u013d"+ + "\7+\2\2\u013d\u013e\7\b\2\2\u013e\u0143\7a\2\2\u013f\u0140\7\f\2\2\u0140"+ + "\u0142\7a\2\2\u0141\u013f\3\2\2\2\u0142\u0145\3\2\2\2\u0143\u0141\3\2"+ + "\2\2\u0143\u0144\3\2\2\2\u0144\u0146\3\2\2\2\u0145\u0143\3\2\2\2\u0146"+ + "\u0149\7\t\2\2\u0147\u0149\7B\2\2\u0148\u011e\3\2\2\2\u0148\u011f\3\2"+ + "\2\2\u0148\u0123\3\2\2\2\u0148\u0129\3\2\2\2\u0148\u012a\3\2\2\2\u0148"+ + "\u012b\3\2\2\2\u0148\u012f\3\2\2\2\u0148\u0130\3\2\2\2\u0148\u0131\3\2"+ + "\2\2\u0148\u0132\3\2\2\2\u0148\u0133\3\2\2\2\u0148\u0134\3\2\2\2\u0148"+ + "\u0135\3\2\2\2\u0148\u0136\3\2\2\2\u0148\u013c\3\2\2\2\u0148\u0147\3\2"+ + "\2\2\u0149#\3\2\2\2\u014a\u014c\5&\24\2\u014b\u014a\3\2\2\2\u014c\u014d"+ + "\3\2\2\2\u014d\u014b\3\2\2\2\u014d\u014e\3\2\2\2\u014e%\3\2\2\2\u014f"+ + "\u0150\5\22\n\2\u0150\u0151\7\n\2\2\u0151\u01a4\3\2\2\2\u0152\u0154\7"+ + "\4\2\2\u0153\u0155\5$\23\2\u0154\u0153\3\2\2\2\u0154\u0155\3\2\2\2\u0155"+ + "\u0156\3\2\2\2\u0156\u01a4\7\5\2\2\u0157\u0158\5@!\2\u0158\u0159\7\n\2"+ + "\2\u0159\u01a4\3\2\2\2\u015a\u015b\7D\2\2\u015b\u015c\7\b\2\2\u015c\u015d"+ + "\5@!\2\u015d\u015e\7\t\2\2\u015e\u0161\5&\24\2\u015f\u0160\7E\2\2\u0160"+ + "\u0162\5&\24\2\u0161\u015f\3\2\2\2\u0161\u0162\3\2\2\2\u0162\u01a4\3\2"+ + "\2\2\u0163\u0165\5\"\22\2\u0164\u0163\3\2\2\2\u0165\u0168\3\2\2\2\u0166"+ + "\u0164\3\2\2\2\u0166\u0167\3\2\2\2\u0167\u0169\3\2\2\2\u0168\u0166\3\2"+ + "\2\2\u0169\u016a\7F\2\2\u016a\u016b\7\b\2\2\u016b\u016c\5@!\2\u016c\u016d"+ + "\7\t\2\2\u016d\u016e\5&\24\2\u016e\u01a4\3\2\2\2\u016f\u0171\5\"\22\2"+ + "\u0170\u016f\3\2\2\2\u0171\u0174\3\2\2\2\u0172\u0170\3\2\2\2\u0172\u0173"+ + "\3\2\2\2\u0173\u0175\3\2\2\2\u0174\u0172\3\2\2\2\u0175\u0176\7G\2\2\u0176"+ + "\u0177\5&\24\2\u0177\u0178\7F\2\2\u0178\u0179\7\b\2\2\u0179\u017a\5@!"+ + "\2\u017a\u017b\7\t\2\2\u017b\u017c\7\n\2\2\u017c\u01a4\3\2\2\2\u017d\u017f"+ + "\5\"\22\2\u017e\u017d\3\2\2\2\u017f\u0182\3\2\2\2\u0180\u017e\3\2\2\2"+ + "\u0180\u0181\3\2\2\2\u0181\u0183\3\2\2\2\u0182\u0180\3\2\2\2\u0183\u0184"+ + "\7H\2\2\u0184\u0185\7\b\2\2\u0185\u0186\5,\27\2\u0186\u0187\7\t\2\2\u0187"+ + "\u0188\5&\24\2\u0188\u01a4\3\2\2\2\u0189\u018a\7I\2\2\u018a\u018b\7\b"+ + "\2\2\u018b\u018c\5@!\2\u018c\u018d\7\t\2\2\u018d\u018e\7\4\2\2\u018e\u018f"+ + "\5(\25\2\u018f\u0190\7\5\2\2\u0190\u01a4\3\2\2\2\u0191\u0193\7J\2\2\u0192"+ + "\u0194\5@!\2\u0193\u0192\3\2\2\2\u0193\u0194\3\2\2\2\u0194\u0195\3\2\2"+ + "\2\u0195\u01a4\7\n\2\2\u0196\u0197\7K\2\2\u0197\u01a4\7\n\2\2\u0198\u0199"+ + "\7L\2\2\u0199\u01a4\7\n\2\2\u019a\u019c\7M\2\2\u019b\u019d\5H%\2\u019c"+ + "\u019b\3\2\2\2\u019c\u019d\3\2\2\2\u019d\u019e\3\2\2\2\u019e\u019f\7\4"+ + "\2\2\u019f\u01a0\5L\'\2\u01a0\u01a1\7\u0081\2\2\u01a1\u01a4\3\2\2\2\u01a2"+ + "\u01a4\5F$\2\u01a3\u014f\3\2\2\2\u01a3\u0152\3\2\2\2\u01a3\u0157\3\2\2"+ + "\2\u01a3\u015a\3\2\2\2\u01a3\u0166\3\2\2\2\u01a3\u0172\3\2\2\2\u01a3\u0180"+ + "\3\2\2\2\u01a3\u0189\3\2\2\2\u01a3\u0191\3\2\2\2\u01a3\u0196\3\2\2\2\u01a3"+ + "\u0198\3\2\2\2\u01a3\u019a\3\2\2\2\u01a3\u01a2\3\2\2\2\u01a4\'\3\2\2\2"+ + "\u01a5\u01a7\5*\26\2\u01a6\u01a5\3\2\2\2\u01a7\u01a8\3\2\2\2\u01a8\u01a6"+ + "\3\2\2\2\u01a8\u01a9\3\2\2\2\u01a9\u01af\3\2\2\2\u01aa\u01ab\7N\2\2\u01ab"+ + "\u01ad\7\13\2\2\u01ac\u01ae\5$\23\2\u01ad\u01ac\3\2\2\2\u01ad\u01ae\3"+ + "\2\2\2\u01ae\u01b0\3\2\2\2\u01af\u01aa\3\2\2\2\u01af\u01b0\3\2\2\2\u01b0"+ + ")\3\2\2\2\u01b1\u01b2\7O\2\2\u01b2\u01b3\5B\"\2\u01b3\u01b5\7\13\2\2\u01b4"+ + "\u01b6\5$\23\2\u01b5\u01b4\3\2\2\2\u01b5\u01b6\3\2\2\2\u01b6+\3\2\2\2"+ + "\u01b7\u01b8\5.\30\2\u01b8\u01b9\7\n\2\2\u01b9\u01ba\5@!\2\u01ba\u01bc"+ + "\7\n\2\2\u01bb\u01bd\5@!\2\u01bc\u01bb\3\2\2\2\u01bc\u01bd\3\2\2\2\u01bd"+ + "\u01c8\3\2\2\2\u01be\u01c0\5\20\t\2\u01bf\u01be\3\2\2\2\u01bf\u01c0\3"+ + "\2\2\2\u01c0\u01c1\3\2\2\2\u01c1\u01c2\7j\2\2\u01c2\u01c3\7\13\2\2\u01c3"+ + "\u01c4\5B\"\2\u01c4\u01c5\7\r\2\2\u01c5\u01c6\5B\"\2\u01c6\u01c8\3\2\2"+ + "\2\u01c7\u01b7\3\2\2\2\u01c7\u01bf\3\2\2\2\u01c8-\3\2\2\2\u01c9\u01cb"+ + "\5\22\n\2\u01ca\u01c9\3\2\2\2\u01ca\u01cb\3\2\2\2\u01cb\u01ce\3\2\2\2"+ + "\u01cc\u01ce\5@!\2\u01cd\u01ca\3\2\2\2\u01cd\u01cc\3\2\2\2\u01ce/\3\2"+ + "\2\2\u01cf\u01d0\b\31\1\2\u01d0\u01d1\7\b\2\2\u01d1\u01d2\5\60\31\2\u01d2"+ + "\u01d3\7\t\2\2\u01d3\u01df\3\2\2\2\u01d4\u01df\7\\\2\2\u01d5\u01d7\7["+ + "\2\2\u01d6\u01d8\7\\\2\2\u01d7\u01d6\3\2\2\2\u01d7\u01d8\3\2\2\2\u01d8"+ + "\u01df\3\2\2\2\u01d9\u01df\5\64\33\2\u01da\u01df\5\62\32\2\u01db\u01df"+ + "\5:\36\2\u01dc\u01df\58\35\2\u01dd\u01df\7\3\2\2\u01de\u01cf\3\2\2\2\u01de"+ + "\u01d4\3\2\2\2\u01de\u01d5\3\2\2\2\u01de\u01d9\3\2\2\2\u01de\u01da\3\2"+ + "\2\2\u01de\u01db\3\2\2\2\u01de\u01dc\3\2\2\2\u01de\u01dd\3\2\2\2\u01df"+ + "\u01ed\3\2\2\2\u01e0\u01e1\f\n\2\2\u01e1\u01ec\7\23\2\2\u01e2\u01e3\f"+ + "\t\2\2\u01e3\u01e5\7\6\2\2\u01e4\u01e6\5B\"\2\u01e5\u01e4\3\2\2\2\u01e5"+ + "\u01e6\3\2\2\2\u01e6\u01e7\3\2\2\2\u01e7\u01ec\7\7\2\2\u01e8\u01e9\f\b"+ + "\2\2\u01e9\u01ea\7\b\2\2\u01ea\u01ec\7\t\2\2\u01eb\u01e0\3\2\2\2\u01eb"+ + "\u01e2\3\2\2\2\u01eb\u01e8\3\2\2\2\u01ec\u01ef\3\2\2\2\u01ed\u01eb\3\2"+ + "\2\2\u01ed\u01ee\3\2\2\2\u01ee\61\3\2\2\2\u01ef\u01ed\3\2\2\2\u01f0\u01f1"+ + "\7P\2\2\u01f1\u01f2\7j\2\2\u01f2\63\3\2\2\2\u01f3\u01f5\7P\2\2\u01f4\u01f6"+ + "\7j\2\2\u01f5\u01f4\3\2\2\2\u01f5\u01f6\3\2\2\2\u01f6\u01f7\3\2\2\2\u01f7"+ + "\u01f9\7\4\2\2\u01f8\u01fa\5\66\34\2\u01f9\u01f8\3\2\2\2\u01fa\u01fb\3"+ + "\2\2\2\u01fb\u01f9\3\2\2\2\u01fb\u01fc\3\2\2\2\u01fc\u01fd\3\2\2\2\u01fd"+ + "\u01fe\7\5\2\2\u01fe\65\3\2\2\2\u01ff\u0200\5\22\n\2\u0200\u0201\7\n\2"+ + "\2\u0201\67\3\2\2\2\u0202\u0203\7Q\2\2\u0203\u0204\7j\2\2\u02049\3\2\2"+ + "\2\u0205\u0207\7Q\2\2\u0206\u0208\7j\2\2\u0207\u0206\3\2\2\2\u0207\u0208"+ + "\3\2\2\2\u0208\u0209\3\2\2\2\u0209\u020a\7\4\2\2\u020a\u020b\5<\37\2\u020b"+ + "\u020c\7\5\2\2\u020c;\3\2\2\2\u020d\u020e\b\37\1\2\u020e\u020f\5> \2\u020f"+ + "\u0215\3\2\2\2\u0210\u0211\f\3\2\2\u0211\u0212\7\f\2\2\u0212\u0214\5>"+ + " \2\u0213\u0210\3\2\2\2\u0214\u0217\3\2\2\2\u0215\u0213\3\2\2\2\u0215"+ + "\u0216\3\2\2\2\u0216=\3\2\2\2\u0217\u0215\3\2\2\2\u0218\u021b\7j\2\2\u0219"+ + "\u021a\7&\2\2\u021a\u021c\5B\"\2\u021b\u0219\3\2\2\2\u021b\u021c\3\2\2"+ + "\2\u021c?\3\2\2\2\u021d\u021e\b!\1\2\u021e\u021f\5B\"\2\u021f\u0225\3"+ + "\2\2\2\u0220\u0221\f\3\2\2\u0221\u0222\7\f\2\2\u0222\u0224\5B\"\2\u0223"+ + "\u0220\3\2\2\2\u0224\u0227\3\2\2\2\u0225\u0223\3\2\2\2\u0225\u0226\3\2"+ + "\2\2\u0226A\3\2\2\2\u0227\u0225\3\2\2\2\u0228\u0229\b\"\1\2\u0229\u022a"+ + "\7\b\2\2\u022a\u022b\5@!\2\u022b\u022c\7\t\2\2\u022c\u025f\3\2\2\2\u022d"+ + "\u022e\7R\2\2\u022e\u0231\7\b\2\2\u022f\u0232\5B\"\2\u0230\u0232\5\60"+ + "\31\2\u0231\u022f\3\2\2\2\u0231\u0230\3\2\2\2\u0232\u0233\3\2\2\2\u0233"+ + "\u0234\7\t\2\2\u0234\u025f\3\2\2\2\u0235\u0236\7S\2\2\u0236\u0239\7\b"+ + "\2\2\u0237\u023a\5B\"\2\u0238\u023a\5\60\31\2\u0239\u0237\3\2\2\2\u0239"+ + "\u0238\3\2\2\2\u023a\u023b\3\2\2\2\u023b\u023c\7\t\2\2\u023c\u025f\3\2"+ + "\2\2\u023d\u023e\7\b\2\2\u023e\u023f\5\60\31\2\u023f\u0240\7\t\2\2\u0240"+ + "\u0241\5B\"\32\u0241\u025f\3\2\2\2\u0242\u0243\t\2\2\2\u0243\u025f\5B"+ + "\"\31\u0244\u0245\7\23\2\2\u0245\u025f\5B\"\27\u0246\u0247\t\3\2\2\u0247"+ + "\u025f\5B\"\26\u0248\u0249\t\4\2\2\u0249\u025f\5B\"\22\u024a\u024b\7\4"+ + "\2\2\u024b\u0250\5B\"\2\u024c\u024d\7\f\2\2\u024d\u024f\5B\"\2\u024e\u024c"+ + "\3\2\2\2\u024f\u0252\3\2\2\2\u0250\u024e\3\2\2\2\u0250\u0251\3\2\2\2\u0251"+ + "\u0253\3\2\2\2\u0252\u0250\3\2\2\2\u0253\u0254\7\5\2\2\u0254\u025f\3\2"+ + "\2\2\u0255\u025f\7j\2\2\u0256\u025f\7a\2\2\u0257\u0259\7_\2\2\u0258\u0257"+ + "\3\2\2\2\u0259\u025a\3\2\2\2\u025a\u0258\3\2\2\2\u025a\u025b\3\2\2\2\u025b"+ + "\u025f\3\2\2\2\u025c\u025f\7`\2\2\u025d\u025f\7]\2\2\u025e\u0228\3\2\2"+ + "\2\u025e\u022d\3\2\2\2\u025e\u0235\3\2\2\2\u025e\u023d\3\2\2\2\u025e\u0242"+ + "\3\2\2\2\u025e\u0244\3\2\2\2\u025e\u0246\3\2\2\2\u025e\u0248\3\2\2\2\u025e"+ + "\u024a\3\2\2\2\u025e\u0255\3\2\2\2\u025e\u0256\3\2\2\2\u025e\u0258\3\2"+ + "\2\2\u025e\u025c\3\2\2\2\u025e\u025d\3\2\2\2\u025f\u029c\3\2\2\2\u0260"+ + "\u0261\f\25\2\2\u0261\u0262\t\5\2\2\u0262\u029b\5B\"\26\u0263\u0264\f"+ + "\24\2\2\u0264\u0265\t\6\2\2\u0265\u029b\5B\"\25\u0266\u0267\f\23\2\2\u0267"+ + "\u0268\t\7\2\2\u0268\u029b\5B\"\24\u0269\u026a\f\21\2\2\u026a\u026b\t"+ + "\b\2\2\u026b\u029b\5B\"\22\u026c\u026d\f\20\2\2\u026d\u026e\7\30\2\2\u026e"+ + "\u029b\5B\"\21\u026f\u0270\f\17\2\2\u0270\u0271\7\32\2\2\u0271\u029b\5"+ + "B\"\20\u0272\u0273\f\16\2\2\u0273\u0274\7\33\2\2\u0274\u029b\5B\"\17\u0275"+ + "\u0276\f\r\2\2\u0276\u0277\7$\2\2\u0277\u029b\5B\"\16\u0278\u0279\f\f"+ + "\2\2\u0279\u027a\7%\2\2\u027a\u029b\5B\"\r\u027b\u027c\f\13\2\2\u027c"+ + "\u027d\7\16\2\2\u027d\u027e\5B\"\2\u027e\u027f\7\13\2\2\u027f\u0280\5"+ + "B\"\f\u0280\u029b\3\2\2\2\u0281\u0282\f\n\2\2\u0282\u0283\7&\2\2\u0283"+ + "\u029b\5B\"\n\u0284\u0285\f\t\2\2\u0285\u0286\7\'\2\2\u0286\u029b\5B\""+ + "\t\u0287\u0288\f \2\2\u0288\u0289\7\17\2\2\u0289\u029b\7j\2\2\u028a\u028b"+ + "\f\37\2\2\u028b\u028c\7\20\2\2\u028c\u029b\7j\2\2\u028d\u028e\f\36\2\2"+ + "\u028e\u0290\7\b\2\2\u028f\u0291\5D#\2\u0290\u028f\3\2\2\2\u0290\u0291"+ + "\3\2\2\2\u0291\u0292\3\2\2\2\u0292\u029b\7\t\2\2\u0293\u0294\f\33\2\2"+ + "\u0294\u0295\7\6\2\2\u0295\u0296\5@!\2\u0296\u0297\7\7\2\2\u0297\u029b"+ + "\3\2\2\2\u0298\u0299\f\30\2\2\u0299\u029b\t\2\2\2\u029a\u0260\3\2\2\2"+ + "\u029a\u0263\3\2\2\2\u029a\u0266\3\2\2\2\u029a\u0269\3\2\2\2\u029a\u026c"+ + "\3\2\2\2\u029a\u026f\3\2\2\2\u029a\u0272\3\2\2\2\u029a\u0275\3\2\2\2\u029a"+ + "\u0278\3\2\2\2\u029a\u027b\3\2\2\2\u029a\u0281\3\2\2\2\u029a\u0284\3\2"+ + "\2\2\u029a\u0287\3\2\2\2\u029a\u028a\3\2\2\2\u029a\u028d\3\2\2\2\u029a"+ + "\u0293\3\2\2\2\u029a\u0298\3\2\2\2\u029b\u029e\3\2\2\2\u029c\u029a\3\2"+ + "\2\2\u029c\u029d\3\2\2\2\u029dC\3\2\2\2\u029e\u029c\3\2\2\2\u029f\u02a4"+ + "\5B\"\2\u02a0\u02a1\7\f\2\2\u02a1\u02a3\5B\"\2\u02a2\u02a0\3\2\2\2\u02a3"+ + "\u02a6\3\2\2\2\u02a4\u02a2\3\2\2\2\u02a4\u02a5\3\2\2\2\u02a5E\3\2\2\2"+ + "\u02a6\u02a4\3\2\2\2\u02a7\u02a9\7T\2\2\u02a8\u02aa\5H%\2\u02a9\u02a8"+ + "\3\2\2\2\u02a9\u02aa\3\2\2\2\u02aa\u02ab\3\2\2\2\u02ab\u02ac\7^\2\2\u02ac"+ + "G\3\2\2\2\u02ad\u02ae\7\b\2\2\u02ae\u02b3\5J&\2\u02af\u02b0\7\f\2\2\u02b0"+ + "\u02b2\5J&\2\u02b1\u02af\3\2\2\2\u02b2\u02b5\3\2\2\2\u02b3\u02b1\3\2\2"+ + "\2\u02b3\u02b4\3\2\2\2\u02b4\u02b6\3\2\2\2\u02b5\u02b3\3\2\2\2\u02b6\u02b7"+ + "\7\t\2\2\u02b7I\3\2\2\2\u02b8\u02b9\7U\2\2\u02b9\u02c8\7_\2\2\u02ba\u02bb"+ + "\7V\2\2\u02bb\u02c8\7j\2\2\u02bc\u02bd\7W\2\2\u02bd\u02c8\7_\2\2\u02be"+ + "\u02bf\7X\2\2\u02bf\u02c8\5B\"\2\u02c0\u02c1\7Y\2\2\u02c1\u02c8\5B\"\2"+ + "\u02c2\u02c5\7,\2\2\u02c3\u02c6\7\67\2\2\u02c4\u02c6\5B\"\2\u02c5\u02c3"+ + "\3\2\2\2\u02c5\u02c4\3\2\2\2\u02c6\u02c8\3\2\2\2\u02c7\u02b8\3\2\2\2\u02c7"+ + "\u02ba\3\2\2\2\u02c7\u02bc\3\2\2\2\u02c7\u02be\3\2\2\2\u02c7\u02c0\3\2"+ + "\2\2\u02c7\u02c2\3\2\2\2\u02c8K\3\2\2\2\u02c9\u02cb\5N(\2\u02ca\u02c9"+ + "\3\2\2\2\u02cb\u02ce\3\2\2\2\u02cc\u02ca\3\2\2\2\u02cc\u02cd\3\2\2\2\u02cd"+ + "M\3\2\2\2\u02ce\u02cc\3\2\2\2\u02cf\u02d3\5P)\2\u02d0\u02d3\5R*\2\u02d1"+ + "\u02d3\5T+\2\u02d2\u02cf\3\2\2\2\u02d2\u02d0\3\2\2\2\u02d2\u02d1\3\2\2"+ + "\2\u02d3O\3\2\2\2\u02d4\u02d5\7\u008e\2\2\u02d5\u02d9\7q\2\2\u02d6\u02d7"+ + "\7\u008d\2\2\u02d7\u02d9\7q\2\2\u02d8\u02d4\3\2\2\2\u02d8\u02d6\3\2\2"+ + "\2\u02d9Q\3\2\2\2\u02da\u02dc\7o\2\2\u02db\u02dd\5V,\2\u02dc\u02db\3\2"+ + "\2\2\u02dc\u02dd\3\2\2\2\u02ddS\3\2\2\2\u02de\u02df\7n\2\2\u02df\u02e4"+ + "\5X-\2\u02e0\u02e1\7r\2\2\u02e1\u02e3\5X-\2\u02e2\u02e0\3\2\2\2\u02e3"+ + "\u02e6\3\2\2\2\u02e4\u02e2\3\2\2\2\u02e4\u02e5\3\2\2\2\u02e5U\3\2\2\2"+ + "\u02e6\u02e4\3\2\2\2\u02e7\u02ff\5X-\2\u02e8\u02e9\7p\2\2\u02e9\u02ff"+ + "\5X-\2\u02ea\u02eb\5X-\2\u02eb\u02ec\7r\2\2\u02ec\u02ed\7\u008e\2\2\u02ed"+ + "\u02ff\3\2\2\2\u02ee\u02ef\7s\2\2\u02ef\u02f0\5X-\2\u02f0\u02f1\7t\2\2"+ + "\u02f1\u02f2\7r\2\2\u02f2\u02f3\7\u008e\2\2\u02f3\u02ff\3\2\2\2\u02f4"+ + "\u02f5\7s\2\2\u02f5\u02f6\5X-\2\u02f6\u02f7\7r\2\2\u02f7\u02f8\7\u008e"+ + "\2\2\u02f8\u02f9\7t\2\2\u02f9\u02ff\3\2\2\2\u02fa\u02fb\7s\2\2\u02fb\u02fc"+ + "\5X-\2\u02fc\u02fd\7t\2\2\u02fd\u02ff\3\2\2\2\u02fe\u02e7\3\2\2\2\u02fe"+ + "\u02e8\3\2\2\2\u02fe\u02ea\3\2\2\2\u02fe\u02ee\3\2\2\2\u02fe\u02f4\3\2"+ + "\2\2\u02fe\u02fa\3\2\2\2\u02ffW\3\2\2\2\u0300\u0301\b-\1\2\u0301\u0302"+ + "\7u\2\2\u0302\u0303\5X-\2\u0303\u0304\7v\2\2\u0304\u030f\3\2\2\2\u0305"+ + "\u0306\t\t\2\2\u0306\u030f\5X-\n\u0307\u030f\7\u008e\2\2\u0308\u030f\7"+ + "\u008c\2\2\u0309\u030a\7\u0080\2\2\u030a\u030b\7\u008e\2\2\u030b\u030f"+ + "\7\u0081\2\2\u030c\u030f\7\u0082\2\2\u030d\u030f\7\u008b\2\2\u030e\u0300"+ + "\3\2\2\2\u030e\u0305\3\2\2\2\u030e\u0307\3\2\2\2\u030e\u0308\3\2\2\2\u030e"+ + "\u0309\3\2\2\2\u030e\u030c\3\2\2\2\u030e\u030d\3\2\2\2\u030f\u031e\3\2"+ + "\2\2\u0310\u0311\f\f\2\2\u0311\u0312\7w\2\2\u0312\u031d\5X-\r\u0313\u0314"+ + "\f\13\2\2\u0314\u0315\t\n\2\2\u0315\u031d\5X-\f\u0316\u0317\f\t\2\2\u0317"+ + "\u0318\t\13\2\2\u0318\u031d\5X-\n\u0319\u031a\f\b\2\2\u031a\u031b\t\f"+ + "\2\2\u031b\u031d\5X-\t\u031c\u0310\3\2\2\2\u031c\u0313\3\2\2\2\u031c\u0316"+ + "\3\2\2\2\u031c\u0319\3\2\2\2\u031d\u0320\3\2\2\2\u031e\u031c\3\2\2\2\u031e"+ + "\u031f\3\2\2\2\u031fY\3\2\2\2\u0320\u031e\3\2\2\2Jch|\u0086\u008d\u009b"+ + "\u00a1\u00a7\u00af\u00b4\u00bb\u00c0\u00c9\u00d0\u00db\u0118\u011c\u0127"+ + "\u013a\u0143\u0148\u014d\u0154\u0161\u0166\u0172\u0180\u0193\u019c\u01a3"+ + "\u01a8\u01ad\u01af\u01b5\u01bc\u01bf\u01c7\u01ca\u01cd\u01d7\u01de\u01e5"+ + "\u01eb\u01ed\u01f5\u01fb\u0207\u0215\u021b\u0225\u0231\u0239\u0250\u025a"+ + "\u025e\u0290\u029a\u029c\u02a4\u02a9\u02b3\u02c5\u02c7\u02cc\u02d2\u02d8"+ + "\u02dc\u02e4\u02fe\u030e\u031c\u031e"; public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray()); static { diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCParser.tokens b/src/main/java/dk/camelot64/kickc/parser/KickCParser.tokens index 7fbfbc819..2f6bc0fa9 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCParser.tokens +++ b/src/main/java/dk/camelot64/kickc/parser/KickCParser.tokens @@ -52,95 +52,95 @@ EXPORT=51 ALIGN=52 INLINE=53 VOLATILE=54 -INTERRUPT=55 -REGISTER=56 -ADDRESS=57 -ADDRESS_ZEROPAGE=58 -ADDRESS_MAINMEM=59 -FORM_SSA=60 -FORM_MA=61 -CALLING=62 -CALLINGCONVENTION=63 -VARMODEL=64 -IF=65 -ELSE=66 -WHILE=67 -DO=68 -FOR=69 -SWITCH=70 -RETURN=71 -BREAK=72 -CONTINUE=73 -ASM=74 -DEFAULT=75 -CASE=76 -STRUCT=77 -ENUM=78 -SIZEOF=79 -TYPEID=80 -KICKASM=81 -RESOURCE=82 -USES=83 -CLOBBERS=84 -BYTES=85 -CYCLES=86 -LOGIC_NOT=87 -SIGNEDNESS=88 -SIMPLETYPE=89 -BOOLEAN=90 -KICKASM_BODY=91 -STRING=92 -CHAR=93 -NUMBER=94 -NUMFLOAT=95 -BINFLOAT=96 -DECFLOAT=97 -HEXFLOAT=98 -NUMINT=99 -BININTEGER=100 -DECINTEGER=101 -HEXINTEGER=102 -NAME=103 -WS=104 -COMMENT_LINE=105 -COMMENT_BLOCK=106 -ASM_BYTE=107 -ASM_MNEMONIC=108 -ASM_IMM=109 -ASM_COLON=110 -ASM_COMMA=111 -ASM_PAR_BEGIN=112 -ASM_PAR_END=113 -ASM_BRACKET_BEGIN=114 -ASM_BRACKET_END=115 -ASM_DOT=116 -ASM_SHIFT_LEFT=117 -ASM_SHIFT_RIGHT=118 -ASM_PLUS=119 -ASM_MINUS=120 -ASM_LESS_THAN=121 -ASM_GREATER_THAN=122 -ASM_MULTIPLY=123 -ASM_DIVIDE=124 -ASM_CURLY_BEGIN=125 -ASM_CURLY_END=126 -ASM_NUMBER=127 -ASM_NUMFLOAT=128 -ASM_BINFLOAT=129 -ASM_DECFLOAT=130 -ASM_HEXFLOAT=131 -ASM_NUMINT=132 -ASM_BININTEGER=133 -ASM_DECINTEGER=134 -ASM_HEXINTEGER=135 -ASM_CHAR=136 -ASM_MULTI_REL=137 -ASM_MULTI_NAME=138 -ASM_NAME=139 -ASM_WS=140 -ASM_COMMENT_LINE=141 -ASM_COMMENT_BLOCK=142 -STATIC=143 +STATIC=55 +INTERRUPT=56 +REGISTER=57 +ADDRESS=58 +ADDRESS_ZEROPAGE=59 +ADDRESS_MAINMEM=60 +FORM_SSA=61 +FORM_MA=62 +CALLING=63 +CALLINGCONVENTION=64 +VARMODEL=65 +IF=66 +ELSE=67 +WHILE=68 +DO=69 +FOR=70 +SWITCH=71 +RETURN=72 +BREAK=73 +CONTINUE=74 +ASM=75 +DEFAULT=76 +CASE=77 +STRUCT=78 +ENUM=79 +SIZEOF=80 +TYPEID=81 +KICKASM=82 +RESOURCE=83 +USES=84 +CLOBBERS=85 +BYTES=86 +CYCLES=87 +LOGIC_NOT=88 +SIGNEDNESS=89 +SIMPLETYPE=90 +BOOLEAN=91 +KICKASM_BODY=92 +STRING=93 +CHAR=94 +NUMBER=95 +NUMFLOAT=96 +BINFLOAT=97 +DECFLOAT=98 +HEXFLOAT=99 +NUMINT=100 +BININTEGER=101 +DECINTEGER=102 +HEXINTEGER=103 +NAME=104 +WS=105 +COMMENT_LINE=106 +COMMENT_BLOCK=107 +ASM_BYTE=108 +ASM_MNEMONIC=109 +ASM_IMM=110 +ASM_COLON=111 +ASM_COMMA=112 +ASM_PAR_BEGIN=113 +ASM_PAR_END=114 +ASM_BRACKET_BEGIN=115 +ASM_BRACKET_END=116 +ASM_DOT=117 +ASM_SHIFT_LEFT=118 +ASM_SHIFT_RIGHT=119 +ASM_PLUS=120 +ASM_MINUS=121 +ASM_LESS_THAN=122 +ASM_GREATER_THAN=123 +ASM_MULTIPLY=124 +ASM_DIVIDE=125 +ASM_CURLY_BEGIN=126 +ASM_CURLY_END=127 +ASM_NUMBER=128 +ASM_NUMFLOAT=129 +ASM_BINFLOAT=130 +ASM_DECFLOAT=131 +ASM_HEXFLOAT=132 +ASM_NUMINT=133 +ASM_BININTEGER=134 +ASM_DECINTEGER=135 +ASM_HEXINTEGER=136 +ASM_CHAR=137 +ASM_MULTI_REL=138 +ASM_MULTI_NAME=139 +ASM_NAME=140 +ASM_WS=141 +ASM_COMMENT_LINE=142 +ASM_COMMENT_BLOCK=143 ';'=8 '..'=11 '?'=12 @@ -176,37 +176,38 @@ STATIC=143 'align'=52 'inline'=53 'volatile'=54 -'interrupt'=55 -'register'=56 -'__address'=57 -'__zp'=58 -'__mem'=59 -'__ssa'=60 -'__ma'=61 -'calling'=62 -'var_model'=64 -'if'=65 -'else'=66 -'while'=67 -'do'=68 -'for'=69 -'switch'=70 -'return'=71 -'break'=72 -'continue'=73 -'asm'=74 -'default'=75 -'case'=76 -'struct'=77 -'enum'=78 -'sizeof'=79 -'typeid'=80 -'kickasm'=81 -'resource'=82 -'uses'=83 -'clobbers'=84 -'bytes'=85 -'cycles'=86 -'!'=87 -'.byte'=107 -'#'=109 +'static'=55 +'interrupt'=56 +'register'=57 +'__address'=58 +'__zp'=59 +'__mem'=60 +'__ssa'=61 +'__ma'=62 +'calling'=63 +'var_model'=65 +'if'=66 +'else'=67 +'while'=68 +'do'=69 +'for'=70 +'switch'=71 +'return'=72 +'break'=73 +'continue'=74 +'asm'=75 +'default'=76 +'case'=77 +'struct'=78 +'enum'=79 +'sizeof'=80 +'typeid'=81 +'kickasm'=82 +'resource'=83 +'uses'=84 +'clobbers'=85 +'bytes'=86 +'cycles'=87 +'!'=88 +'.byte'=108 +'#'=110 diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCParserBaseListener.java b/src/main/java/dk/camelot64/kickc/parser/KickCParserBaseListener.java index 1df4bfc54..bd453b356 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCParserBaseListener.java +++ b/src/main/java/dk/camelot64/kickc/parser/KickCParserBaseListener.java @@ -157,6 +157,30 @@ public class KickCParserBaseListener implements KickCParserListener { *

The default implementation does nothing.

*/ @Override public void exitDeclVariableInitKasm(KickCParser.DeclVariableInitKasmContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDeclVariableArray(KickCParser.DeclVariableArrayContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDeclVariableArray(KickCParser.DeclVariableArrayContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDeclVariableName(KickCParser.DeclVariableNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDeclVariableName(KickCParser.DeclVariableNameContext ctx) { } /** * {@inheritDoc} * diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCParserBaseVisitor.java b/src/main/java/dk/camelot64/kickc/parser/KickCParserBaseVisitor.java index 5340fd937..e044d6d79 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCParserBaseVisitor.java +++ b/src/main/java/dk/camelot64/kickc/parser/KickCParserBaseVisitor.java @@ -97,6 +97,20 @@ public class KickCParserBaseVisitor extends AbstractParseTreeVisitor imple * {@link #visitChildren} on {@code ctx}.

*/ @Override public T visitDeclVariableInitKasm(KickCParser.DeclVariableInitKasmContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDeclVariableArray(KickCParser.DeclVariableArrayContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDeclVariableName(KickCParser.DeclVariableNameContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCParserListener.java b/src/main/java/dk/camelot64/kickc/parser/KickCParserListener.java index a78a45602..c9cbff122 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCParserListener.java +++ b/src/main/java/dk/camelot64/kickc/parser/KickCParserListener.java @@ -133,6 +133,30 @@ public interface KickCParserListener extends ParseTreeListener { * @param ctx the parse tree */ void exitDeclVariableInitKasm(KickCParser.DeclVariableInitKasmContext ctx); + /** + * Enter a parse tree produced by the {@code declVariableArray} + * labeled alternative in {@link KickCParser#declVariable}. + * @param ctx the parse tree + */ + void enterDeclVariableArray(KickCParser.DeclVariableArrayContext ctx); + /** + * Exit a parse tree produced by the {@code declVariableArray} + * labeled alternative in {@link KickCParser#declVariable}. + * @param ctx the parse tree + */ + void exitDeclVariableArray(KickCParser.DeclVariableArrayContext ctx); + /** + * Enter a parse tree produced by the {@code declVariableName} + * labeled alternative in {@link KickCParser#declVariable}. + * @param ctx the parse tree + */ + void enterDeclVariableName(KickCParser.DeclVariableNameContext ctx); + /** + * Exit a parse tree produced by the {@code declVariableName} + * labeled alternative in {@link KickCParser#declVariable}. + * @param ctx the parse tree + */ + void exitDeclVariableName(KickCParser.DeclVariableNameContext ctx); /** * Enter a parse tree produced by {@link KickCParser#declFunction}. * @param ctx the parse tree diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCParserVisitor.java b/src/main/java/dk/camelot64/kickc/parser/KickCParserVisitor.java index 6fcc33fba..6e853527b 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCParserVisitor.java +++ b/src/main/java/dk/camelot64/kickc/parser/KickCParserVisitor.java @@ -86,6 +86,20 @@ public interface KickCParserVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitDeclVariableInitKasm(KickCParser.DeclVariableInitKasmContext ctx); + /** + * Visit a parse tree produced by the {@code declVariableArray} + * labeled alternative in {@link KickCParser#declVariable}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDeclVariableArray(KickCParser.DeclVariableArrayContext ctx); + /** + * Visit a parse tree produced by the {@code declVariableName} + * labeled alternative in {@link KickCParser#declVariable}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDeclVariableName(KickCParser.DeclVariableNameContext ctx); /** * Visit a parse tree produced by {@link KickCParser#declFunction}. * @param ctx the parse tree diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java index 013cd44ab..6296c7abe 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java @@ -567,11 +567,11 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor(val+$80); } @@ -385,7 +385,7 @@ void rotate_matrix(signed char x, signed char y, signed char z) { // mulf_sqr tables will contain f(x)=int(x*x) and g(x) = f(1-x). // f(x) = >(( x * x )) -char[0x200] align(0x100) mulf_sqr1 = kickasm {{ +char align(0x100) mulf_sqr1[0x200] = kickasm {{ .for(var i=0;i<$200;i++) { .if(i<=159) { .byte round((i*i)/256) } .if(i>159 && i<=351 ) { .byte round(((i-256)*(i-256))/256) } @@ -394,7 +394,7 @@ char[0x200] align(0x100) mulf_sqr1 = kickasm {{ }}; // g(x) = >((( 1 - x ) * ( 1 - x ))) -char[0x200] align(0x100) mulf_sqr2 = kickasm {{ +char align(0x100) mulf_sqr2[0x200] = kickasm {{ .for(var i=0;i<$200;i++) { .if(i<=159) { .byte round((-i-1)*(-i-1)/256) } .if(i>159 && i<=351 ) { .byte round(((255-i)*(255-i))/256) } @@ -419,8 +419,8 @@ byte[512] align($100) mulf_sqr2; // Initialize the mulf_sqr multiplication tables with f(x)=int(x*x) and g(x) = f(1-x) void mulf_init() { - signed word sqr = 0; - signed word add = 1; + signed int sqr = 0; + signed int add = 1; for( byte i:0..128) { byte val = >sqr; mulf_sqr1[i] = val; @@ -447,7 +447,7 @@ kickasm(pc SPRITE, resource "balloon.png") {{ }} // Perspective multiplication table containing (d/(z0-z)[z] for each z-value -signed char[0x100] align(0x100) PERSP_Z = kickasm {{ +signed char align(0x100) PERSP_Z[0x100] = kickasm {{ { .var d = 256.0 .var z0 = 6.0 @@ -465,7 +465,7 @@ signed char[0x100] align(0x100) PERSP_Z = kickasm {{ // Sine and Cosine Tables // Angles: $00=0, $80=PI,$100=2*PI // Half Sine/Cosine: signed fixed [-$20;20] -signed char[0x140] align(0x40) SINH = kickasm {{ +signed char align(0x40) SINH[0x140] = kickasm {{ { .var min = -$2000 .var max = $2000 @@ -479,7 +479,7 @@ signed char[0x140] align(0x40) SINH = kickasm {{ signed char* COSH = SINH+$40; // sin(x) = cos(x+PI/2) // Quarter Sine/Cosine: signed fixed [-$10,$10] -signed char[0x140] align(0x40) SINQ = kickasm {{ +signed char align(0x40) SINQ[0x140] = kickasm {{ { .var min = -$1000 .var max = $1000 @@ -495,7 +495,7 @@ signed char* COSQ = SINQ+$40; // sin(x) = cos(x+PI/2) // 16 bit Sine and Cosine Tables // Angles: $00=0, $80=PI,$100=2*PI // Half Sine/Cosine: signed fixed [-$1f,$1f] -char[0x140] align(0x40) SINH_LO = kickasm {{ +char align(0x40) SINH_LO[0x140] = kickasm {{ { .var min = -$2000 .var max = $2000 @@ -508,7 +508,7 @@ char[0x140] align(0x40) SINH_LO = kickasm {{ }}; char* COSH_LO = SINH_LO+$40; // sin(x) = cos(x+PI/2) -char[0x140] align(0x40) SINH_HI = kickasm {{ +char align(0x40) SINH_HI[0x140] = kickasm {{ { .var min = -$2000 .var max = $2000 @@ -522,7 +522,7 @@ char[0x140] align(0x40) SINH_HI = kickasm {{ char* COSH_HI = SINH_HI+$40; // sin(x) = cos(x+PI/2) // Quarter Sine/Cosine: signed fixed [-$0f,$0f] -char[0x140] align(0x40) SINQ_LO = kickasm {{ +char align(0x40) SINQ_LO[0x140] = kickasm {{ { .var min = -$1000 .var max = $1000 @@ -535,7 +535,7 @@ char[0x140] align(0x40) SINQ_LO = kickasm {{ }}; char* COSQ_LO = SINQ_LO+$40; // sin(x) = cos(x+PI/2) -char[0x140] align(0x40) SINQ_HI = kickasm {{ +char align(0x40) SINQ_HI[0x140] = kickasm {{ { .var min = -$1000 .var max = $1000 diff --git a/src/test/kc/examples/3d/perspective.kc b/src/test/kc/examples/3d/perspective.kc index 9ae720a05..9c6a3170c 100644 --- a/src/test/kc/examples/3d/perspective.kc +++ b/src/test/kc/examples/3d/perspective.kc @@ -11,14 +11,14 @@ signed char* yr = $f1; signed char* zr = $f2; // Pointers used to multiply perspective (d/z0-z) onto x- & y-coordinates. Points into mulf_sqr1 / mulf_sqr2. -word* psp1 = $f3; -word* psp2 = $f5; +unsigned int* psp1 = $f3; +unsigned int* psp2 = $f5; void main() { asm { sei } mulf_init(); - *psp1 = (word)mulf_sqr1; - *psp2 = (word)mulf_sqr2; + *psp1 = (unsigned int)mulf_sqr1; + *psp2 = (unsigned int)mulf_sqr2; print_cls(); do_perspective($39, -$47, $36); /* @@ -97,14 +97,14 @@ void perspective(signed char x, signed char y, signed char z) { // - http://codebase64.org/doku.php?id=magazines:chacking16 // mulf_sqr tables will contain f(x)=int(x*x) and g(x) = f(1-x). // f(x) = >(( x * x )) -char[512] align($100) mulf_sqr1; +char align($100) mulf_sqr1[512]; // g(x) = >((( 1 - x ) * ( 1 - x ))) -char[512] align($100) mulf_sqr2; +char align($100) mulf_sqr2[512]; // Initialize the mulf_sqr multiplication tables with f(x)=int(x*x) and g(x) = f(1-x) void mulf_init() { - signed word sqr = 0; - signed word add = 1; + signed int sqr = 0; + signed int add = 1; for( char i:0..128) { char val = >sqr; mulf_sqr1[i] = val; @@ -121,7 +121,7 @@ void mulf_init() { } // Perspective multiplication table containing (d/(z0-z)[z] for each z-value -signed char[0x100] align(0x100) PERSP_Z = kickasm {{ +signed char align(0x100) PERSP_Z[0x100] = kickasm {{ { .var d = 256.0 .var z0 = 5.0 diff --git a/src/test/kc/examples/bresenham/bitmap-bresenham.kc b/src/test/kc/examples/bresenham/bitmap-bresenham.kc index a37b67b4f..8b1c09d40 100644 --- a/src/test/kc/examples/bresenham/bitmap-bresenham.kc +++ b/src/test/kc/examples/bresenham/bitmap-bresenham.kc @@ -4,8 +4,8 @@ import "bitmap-draw.kc" const char* SCREEN = $400; const char* BITMAP = $2000; -char[] lines_x = { 60, 80, 110, 80, 60, 40, 10, 40, 60 }; -char[] lines_y = { 10, 40, 60, 80, 110, 80, 60, 40, 10 }; +char lines_x[] = { 60, 80, 110, 80, 60, 40, 10, 40, 60 }; +char lines_y[] = { 10, 40, 60, 80, 110, 80, 60, 40, 10 }; char lines_cnt = 8; void main() { diff --git a/src/test/kc/examples/chargen/chargen-analysis.kc b/src/test/kc/examples/chargen/chargen-analysis.kc index c209f8fe9..c13af27ce 100644 --- a/src/test/kc/examples/chargen/chargen-analysis.kc +++ b/src/test/kc/examples/chargen/chargen-analysis.kc @@ -68,7 +68,7 @@ void print_str_at(char* str, char* at) { // Render 8x8 char (ch) as pixels on char canvas #pos void plot_chargen(char pos, char ch, char shift) { asm { sei } - char* chargen = CHARGEN+(word)ch*8; + char* chargen = CHARGEN+(unsigned int)ch*8; if(shift!=0) { chargen = chargen + $0800; } diff --git a/src/test/kc/examples/fastmultiply/fastmultiply8.kc b/src/test/kc/examples/fastmultiply/fastmultiply8.kc index 80d190912..8c7d39c68 100644 --- a/src/test/kc/examples/fastmultiply/fastmultiply8.kc +++ b/src/test/kc/examples/fastmultiply/fastmultiply8.kc @@ -8,7 +8,7 @@ import "print.kc" -signed char[] vals = {-95, -64, -32, -16, 0, 16, 32, 64, 95}; +signed char vals[] = {-95, -64, -32, -16, 0, 16, 32, 64, 95}; void main() { init_screen(); @@ -71,7 +71,7 @@ signed char fmul8(signed char a, signed char b) { // mulf_sqr tables will contain f(x)=int(x*x) and g(x) = f(1-x). // f(x) = >(( x * x )) -char[0x200] align(0x100) mulf_sqr1 = kickasm {{ +char align(0x100) mulf_sqr1[0x200] = kickasm {{ .for(var i=0;i<$200;i++) { .if(i<=159) { .byte round((i*i)/256) } .if(i>159 && i<=351 ) { .byte round(((i-256)*(i-256))/256) } @@ -81,7 +81,7 @@ char[0x200] align(0x100) mulf_sqr1 = kickasm {{ // g(x) = >((( 1 - x ) * ( 1 - x ))) -char[0x200] align(0x100) mulf_sqr2 = kickasm {{ +char align(0x100) mulf_sqr2[0x200] = kickasm {{ .for(var i=0;i<$200;i++) { .if(i<=159) { .byte round((-i-1)*(-i-1)/256) } .if(i>159 && i<=351 ) { .byte round(((255-i)*(255-i))/256) } diff --git a/src/test/kc/examples/fire/fire.kc b/src/test/kc/examples/fire/fire.kc index 13ee9559b..eb5f8e4d2 100644 --- a/src/test/kc/examples/fire/fire.kc +++ b/src/test/kc/examples/fire/fire.kc @@ -56,7 +56,7 @@ void fire(unsigned char* screenbase) { // Make a fire-friendly charset in chars $00-$3f of the passed charset void makecharset(char* charset) { - const unsigned char[8] bittab = { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 }; + const unsigned char bittab[8] = { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 }; for (unsigned char *font = charset; font != (charset+(1*8)); ++font) *font = 0x00; for (unsigned char *font = (charset+(64*8)); font != (charset+(256*8)); ++font) @@ -78,7 +78,7 @@ void makecharset(char* charset) { // Fill a screen (1000 chars) with a specific char void fillscreen(unsigned char* screen, unsigned char fill) { - for( unsigned word i : 0..999) { + for( unsigned int i : 0..999) { *screen++ = fill; } } diff --git a/src/test/kc/examples/fire/sid.kc b/src/test/kc/examples/fire/sid.kc index 869834186..f02552d16 100644 --- a/src/test/kc/examples/fire/sid.kc +++ b/src/test/kc/examples/fire/sid.kc @@ -1,5 +1,5 @@ // SID registers for random number generation -const word* SID_VOICE3_FREQ = $d40e; +const unsigned int* SID_VOICE3_FREQ = $d40e; const char* SID_VOICE3_FREQ_LOW = $d40e; const char* SID_VOICE3_FREQ_HIGH = $d40f; const char* SID_VOICE3_CONTROL = $d412; diff --git a/src/test/kc/examples/font-2x2/font-2x2.kc b/src/test/kc/examples/font-2x2/font-2x2.kc index d3f89a02c..feb6d8730 100644 --- a/src/test/kc/examples/font-2x2/font-2x2.kc +++ b/src/test/kc/examples/font-2x2/font-2x2.kc @@ -6,7 +6,7 @@ import "string" const char* SCREEN = 0x0400; const char* FONT_ORIGINAL = 0x2000; const char* FONT_COMPRESSED = 0x2800; -char[0x100] align(0x100) FONT_COMPRESSED_MAP; +char align(0x100) FONT_COMPRESSED_MAP[0x100]; void main() { // Create 2x2 font from CHARGEN diff --git a/src/test/kc/examples/kernalload/kernalload.kc b/src/test/kc/examples/kernalload/kernalload.kc index b6e5a5b61..76997b00c 100644 --- a/src/test/kc/examples/kernalload/kernalload.kc +++ b/src/test/kc/examples/kernalload/kernalload.kc @@ -8,7 +8,7 @@ import "c64" // Sprite file #pragma data_seg(Sprite) -export char[] SPRITE = kickasm(resource "sprite.png") {{ +export char SPRITE[] = kickasm(resource "sprite.png") {{ .var pic = LoadPicture("sprite.png", List().add($000000, $ffffff)) .for (var y=0; y<21; y++) .for (var x=0;x<3; x++) diff --git a/src/test/kc/examples/linking/linking.kc b/src/test/kc/examples/linking/linking.kc index 084a0f507..1b83c41bc 100644 --- a/src/test/kc/examples/linking/linking.kc +++ b/src/test/kc/examples/linking/linking.kc @@ -29,5 +29,5 @@ void fillscreen(char c) { *screen = c+base[i++]; } -char[256] base; +char base[256]; diff --git a/src/test/kc/examples/multiplexer/simple-multiplexer.kc b/src/test/kc/examples/multiplexer/simple-multiplexer.kc index 5a2e24bf7..cdaf3b6c1 100644 --- a/src/test/kc/examples/multiplexer/simple-multiplexer.kc +++ b/src/test/kc/examples/multiplexer/simple-multiplexer.kc @@ -5,7 +5,7 @@ import "multiplexer" // Location of screen & sprites char* SCREEN = $400; -char[0x100] align(0x100) YSIN = kickasm {{ +char align(0x100) YSIN[0x100] = kickasm {{ .var min = 50 .var max = 250-21 .var ampl = max-min; diff --git a/src/test/kc/examples/nmisamples/nmisamples.kc b/src/test/kc/examples/nmisamples/nmisamples.kc index 5d680450d..ed90097cf 100644 --- a/src/test/kc/examples/nmisamples/nmisamples.kc +++ b/src/test/kc/examples/nmisamples/nmisamples.kc @@ -5,7 +5,7 @@ import "c64" const unsigned int SAMPLE_SIZE = 0x6100; -char[SAMPLE_SIZE] SAMPLE = kickasm(resource "moments_sample.bin") {{ .import binary "moments_sample.bin" }}; +char SAMPLE[SAMPLE_SIZE] = kickasm(resource "moments_sample.bin") {{ .import binary "moments_sample.bin" }}; volatile char* sample = SAMPLE; diff --git a/src/test/kc/examples/plasma/plasma-unroll.kc b/src/test/kc/examples/plasma/plasma-unroll.kc index 0f961d335..3dd966a04 100644 --- a/src/test/kc/examples/plasma/plasma-unroll.kc +++ b/src/test/kc/examples/plasma/plasma-unroll.kc @@ -13,7 +13,7 @@ import "sid" const unsigned char* SCREEN1 = $2800; const unsigned char* CHARSET = $2000; -const unsigned char[0x100] align(0x100) SINTABLE = kickasm {{ +const unsigned char align(0x100) SINTABLE[0x100] = kickasm {{ .for(var i=0;i<$100;i++) .byte round(127.5+127.5*sin(toRadians(360*i/256))) }}; @@ -40,8 +40,8 @@ unsigned char c2B = 0; // Render plasma to the passed screen void doplasma(unsigned char* screen) { - unsigned char[40] xbuf; - unsigned char[25] ybuf; + unsigned char xbuf[40]; + unsigned char ybuf[25]; unsigned char c1a = c1A; unsigned char c1b = c1B; @@ -79,7 +79,7 @@ void doplasma(unsigned char* screen) { // Make a plasma-friendly charset where the chars are randomly filled void makecharset(unsigned char* charset) { - const unsigned char[8] bittab = { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 }; + const unsigned char bittab[8] = { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 }; sid_rnd_init(); print_cls(); for (unsigned int c = 0; c < 0x100; ++c) { diff --git a/src/test/kc/examples/plasma/plasma.kc b/src/test/kc/examples/plasma/plasma.kc index 3ed30b189..7f166c0d0 100644 --- a/src/test/kc/examples/plasma/plasma.kc +++ b/src/test/kc/examples/plasma/plasma.kc @@ -12,7 +12,7 @@ const char* SCREEN1 = 0x2800; const char* SCREEN2 = 0x2c00; const char* CHARSET = 0x2000; -const char[0x100] align(0x100) SINTABLE = kickasm {{ +const char align(0x100) SINTABLE[0x100] = kickasm {{ .for(var i=0;i<$100;i++) .byte round(127.5+127.5*sin(2*PI*i/256)) }}; @@ -41,8 +41,8 @@ char c2B = 0; // Render plasma to the passed screen void doplasma (char* screen) { - char[40] xbuf; - char[25] ybuf; + char xbuf[40]; + char ybuf[25]; char c1a = c1A; char c1b = c1B; @@ -72,7 +72,7 @@ void doplasma (char* screen) { // Make a plasma-friendly charset where the chars are randomly filled void makecharset(char* charset) { - const char[8] bittab = { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 }; + const char bittab[8] = { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 }; sid_rnd_init(); print_cls(); for (unsigned int c = 0; c < 0x100; ++c) { diff --git a/src/test/kc/examples/rasterbars/raster-bars.kc b/src/test/kc/examples/rasterbars/raster-bars.kc index b536e1bcd..a2ef34f1c 100644 --- a/src/test/kc/examples/rasterbars/raster-bars.kc +++ b/src/test/kc/examples/rasterbars/raster-bars.kc @@ -11,7 +11,7 @@ void main() { } while (true); } -char[] rastercols = { $b, $0, $b, $b, $c, $b, $c, $c, $f, $c, $f, $f, $1, $f, $1, $1, $f, $1, $f, $f, $c, $f, $c, $c, $b, $c, $b, $b, $0, $b, $0, $ff }; +char rastercols[] = { $b, $0, $b, $b, $c, $b, $c, $c, $f, $c, $f, $f, $1, $f, $1, $1, $f, $1, $f, $f, $c, $f, $c, $c, $b, $c, $b, $b, $0, $b, $0, $ff }; void raster() { diff --git a/src/test/kc/examples/rotate/rotate.kc b/src/test/kc/examples/rotate/rotate.kc index d66920f91..d09f1ba61 100644 --- a/src/test/kc/examples/rotate/rotate.kc +++ b/src/test/kc/examples/rotate/rotate.kc @@ -10,7 +10,7 @@ char* SCREEN = $0400; // Sine and Cosine tables // Angles: $00=0, $80=PI,$100=2*PI // Sine/Cosine: signed fixed [-$7f,$7f] -char[0x140] align(0x40) SIN = kickasm {{ +char align(0x40) SIN[0x140] = kickasm {{ .for(var i=0;i<$140;i++) .byte >round($7fff*sin(i*2*PI/256)) }}; @@ -34,8 +34,8 @@ void init() { } // Positions to rotate -signed char[8] xs = { -70, -70, -70, 0, 0, 70, 70, 70}; -signed char[8] ys = { -70, 0, 70, -70, 70, -70, 0, 70}; +signed char xs[8] = { -70, -70, -70, 0, 0, 70, 70, 70}; +signed char ys[8] = { -70, 0, 70, -70, 70, -70, 0, 70}; void anim() { char angle = 0; @@ -50,12 +50,12 @@ void anim() { signed char x = xs[i]; // signed fixed[7.0] signed char y = ys[i]; // signed fixed[7.0] mulf8s_prepare(cos_a); - signed word xr = mulf8s_prepared(x)*2; // signed fixed[8.8] - signed word yr = mulf8s_prepared(y)*2; // signed fixed[8.8] + signed int xr = mulf8s_prepared(x)*2; // signed fixed[8.8] + signed int yr = mulf8s_prepared(y)*2; // signed fixed[8.8] mulf8s_prepare(sin_a); xr -= mulf8s_prepared(y)*2; // signed fixed[8.8] yr += mulf8s_prepared(x)*2; // signed fixed[8.8] - signed word xpos = ((signed char) >xr) + 24 /*border*/ + 149 /*center*/; + signed int xpos = ((signed char) >xr) + 24 /*border*/ + 149 /*center*/; sprite_msb = sprite_msb/2; if(>xpos!=0) { sprite_msb |= $80; @@ -68,7 +68,7 @@ void anim() { *SPRITES_XMSB = sprite_msb; angle++; // Calculate the cycle count - 0x12 is the base usage of start/read - dword cyclecount = clock()-CLOCKS_PER_INIT; + unsigned long cyclecount = clock()-CLOCKS_PER_INIT; // Print cycle count print_dword_at(cyclecount, SCREEN); *BORDERCOL = LIGHT_BLUE; diff --git a/src/test/kc/examples/scroll/scroll.kc b/src/test/kc/examples/scroll/scroll.kc index 904a52db2..45c626221 100644 --- a/src/test/kc/examples/scroll/scroll.kc +++ b/src/test/kc/examples/scroll/scroll.kc @@ -2,7 +2,7 @@ const char* SCREEN = $0400; const char* RASTER = $d012; const char* BGCOL = $d020; const char* SCROLL = $d016; -const char[] TEXT = "-= this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. =- "; +const char TEXT[] = "-= this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. =- "; void main() { fillscreen(SCREEN, $20); diff --git a/src/test/kc/examples/sinsprites/sinus-sprites.kc b/src/test/kc/examples/sinsprites/sinus-sprites.kc index 15cb588a3..887754d10 100644 --- a/src/test/kc/examples/sinsprites/sinus-sprites.kc +++ b/src/test/kc/examples/sinsprites/sinus-sprites.kc @@ -3,9 +3,9 @@ import "basic-floats" import "print" const char sinlen_x = 221; -const char[221] sintab_x; +const char sintab_x[221]; const char sinlen_y = 197; -const char[197] sintab_y; +const char sintab_y[197]; const char* sprites = $2000; const char* SCREEN = $400; @@ -53,7 +53,7 @@ void progress_init(char* line) { // Done by increasing the character until the idx is 8 and then moving to the next char void progress_inc() { // Progress characters - const char[] progress_chars = { $20, $65, $74, $75, $61, $f6, $e7, $ea, $e0}; + const char progress_chars[] = { $20, $65, $74, $75, $61, $f6, $e7, $ea, $e0}; if(++progress_idx==8) { *progress_cursor = progress_chars[8]; progress_cursor++; @@ -121,7 +121,7 @@ void place_sprites() { } void gen_sprites() { - char[] cml = "camelot"z; + char cml[] = "camelot"z; char* spr = sprites; for( char i : 0..6 ) { gen_chargen_sprite(cml[i], spr); @@ -181,9 +181,9 @@ void gen_chargen_sprite(char ch, char* sprite) { // - min is the minimum value of the generated sinus // - max is the maximum value of the generated sinus void gen_sintab(char* sintab, char length, char min, char max) { - char[] f_i = {0, 0, 0, 0, 0}; // i * 2 * PI - char[] f_min = {0, 0, 0, 0, 0}; // amplitude/2 + min - char[] f_amp = {0, 0, 0, 0, 0}; // amplitude/2 + char f_i[] = {0, 0, 0, 0, 0}; // i * 2 * PI + char f_min[] = {0, 0, 0, 0, 0}; // amplitude/2 + min + char f_amp[] = {0, 0, 0, 0, 0}; // amplitude/2 char* f_2pi = $e2e5; // 2 * PI setFAC((unsigned int)max); // fac = max setARGtoFAC(); // arg = max diff --git a/src/test/kc/examples/zpcode/zpcode.kc b/src/test/kc/examples/zpcode/zpcode.kc index 9a42c1581..e2b06c211 100644 --- a/src/test/kc/examples/zpcode/zpcode.kc +++ b/src/test/kc/examples/zpcode/zpcode.kc @@ -32,7 +32,7 @@ void loop() { } // Array containing the zeropage code to be transferred to zeropage before execution -char[] zpCodeData = kickasm {{ +char zpCodeData[] = kickasm {{ .segmentout [segments="ZpCode"] }}; diff --git a/src/test/ref/examples/3d/3d.asm b/src/test/ref/examples/3d/3d.asm index ce3b37f26..b766431d5 100644 --- a/src/test/ref/examples/3d/3d.asm +++ b/src/test/ref/examples/3d/3d.asm @@ -40,13 +40,13 @@ main: { sei // sprites_init() jsr sprites_init - // *psp1 = (word)mulf_sqr1 + // *psp1 = (unsigned int)mulf_sqr1 //mulf_init(); lda #mulf_sqr1 sta psp1+1 - // *psp2 = (word)mulf_sqr2 + // *psp2 = (unsigned int)mulf_sqr2 lda #mulf_sqr2 @@ -1226,9 +1226,9 @@ sprites_init: { xrs: .fill 8, 0 yrs: .fill 8, 0 zrs: .fill 8, 0 - // Persepctive factors (from zrs) + // Perspective factors (from zrs) pps: .fill 8, 0 - // Rotated positions with persepctive + // Rotated positions with perspective xps: .fill 8, 0 yps: .fill 8, 0 // The rotation matrix diff --git a/src/test/ref/examples/3d/3d.log b/src/test/ref/examples/3d/3d.log index ac6d9d1ed..7c82aa8a0 100644 --- a/src/test/ref/examples/3d/3d.log +++ b/src/test/ref/examples/3d/3d.log @@ -6287,9 +6287,9 @@ sprites_init: { xrs: .fill 8, 0 yrs: .fill 8, 0 zrs: .fill 8, 0 - // Persepctive factors (from zrs) + // Perspective factors (from zrs) pps: .fill 8, 0 - // Rotated positions with persepctive + // Rotated positions with perspective xps: .fill 8, 0 yps: .fill 8, 0 // The rotation matrix @@ -8771,9 +8771,9 @@ sprites_init: { xrs: .fill 8, 0 yrs: .fill 8, 0 zrs: .fill 8, 0 - // Persepctive factors (from zrs) + // Perspective factors (from zrs) pps: .fill 8, 0 - // Rotated positions with persepctive + // Rotated positions with perspective xps: .fill 8, 0 yps: .fill 8, 0 // The rotation matrix @@ -9685,14 +9685,14 @@ main: { // [5] call sprites_init jsr sprites_init // main::@1 - // *psp1 = (word)mulf_sqr1 + // *psp1 = (unsigned int)mulf_sqr1 // [6] *((const word*) psp1) ← (word)(const byte*) mulf_sqr1 -- _deref_pwuc1=vwuc2 //mulf_init(); lda #mulf_sqr1 sta psp1+1 - // *psp2 = (word)mulf_sqr2 + // *psp2 = (unsigned int)mulf_sqr2 // [7] *((const word*) psp2) ← (word)(const byte*) mulf_sqr2 -- _deref_pwuc1=vwuc2 lda #mulf_sqr1 sta psp1+1 - // *psp2 = (word)mulf_sqr2 + // *psp2 = (unsigned int)mulf_sqr2 lda #mulf_sqr2 diff --git a/src/test/ref/examples/3d/perspective.log b/src/test/ref/examples/3d/perspective.log index 3f5fda753..d9a52625b 100644 --- a/src/test/ref/examples/3d/perspective.log +++ b/src/test/ref/examples/3d/perspective.log @@ -3511,13 +3511,13 @@ main: { // [88] phi from main to mulf_init [phi:main->mulf_init] jsr mulf_init // main::@1 - // *psp1 = (word)mulf_sqr1 + // *psp1 = (unsigned int)mulf_sqr1 // [6] *((const word*) psp1) ← (word)(const byte*) mulf_sqr1 -- _deref_pwuc1=vwuc2 lda #mulf_sqr1 sta psp1+1 - // *psp2 = (word)mulf_sqr2 + // *psp2 = (unsigned int)mulf_sqr2 // [7] *((const word*) psp2) ← (word)(const byte*) mulf_sqr2 -- _deref_pwuc1=vwuc2 lda #