Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@solidity-parser/parser

Package Overview
Dependencies
Maintainers
1
Versions
50
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@solidity-parser/parser - npm Package Compare versions

Comparing version 0.16.2 to 0.17.0

dist/index.esm.mjs

27

dist/src/antlr/SolidityLexer.d.ts

@@ -1,6 +0,3 @@

import { ATN } from "antlr4ts/atn/ATN";
import { CharStream } from "antlr4ts/CharStream";
import { Lexer } from "antlr4ts/Lexer";
import { Vocabulary } from "antlr4ts/Vocabulary";
export declare class SolidityLexer extends Lexer {
import { ATN, CharStream, DFA, Lexer } from "antlr4";
export default class SolidityLexer extends Lexer {
static readonly T__0 = 1;

@@ -139,22 +136,20 @@ static readonly T__1 = 2;

static readonly LINE_COMMENT = 133;
static readonly EOF: number;
static readonly channelNames: string[];
static readonly literalNames: (string | null)[];
static readonly symbolicNames: (string | null)[];
static readonly modeNames: string[];
static readonly ruleNames: string[];
private static readonly _LITERAL_NAMES;
private static readonly _SYMBOLIC_NAMES;
static readonly VOCABULARY: Vocabulary;
get vocabulary(): Vocabulary;
constructor(input: CharStream);
get grammarFileName(): string;
get literalNames(): (string | null)[];
get symbolicNames(): (string | null)[];
get ruleNames(): string[];
get serializedATN(): string;
get serializedATN(): number[];
get channelNames(): string[];
get modeNames(): string[];
private static readonly _serializedATNSegments;
private static readonly _serializedATNSegment0;
private static readonly _serializedATNSegment1;
private static readonly _serializedATNSegment2;
static readonly _serializedATN: string;
static __ATN: ATN;
static readonly _serializedATN: number[];
private static __ATN;
static get _ATN(): ATN;
static DecisionsToDFA: DFA[];
}

@@ -1,2 +0,2 @@

import { ParseTreeListener } from "antlr4ts/tree/ParseTreeListener";
import { ParseTreeListener } from "antlr4";
import { SourceUnitContext } from "./SolidityParser";

@@ -107,3 +107,3 @@ import { PragmaDirectiveContext } from "./SolidityParser";

*/
export interface SolidityListener extends ParseTreeListener {
export default class SolidityListener extends ParseTreeListener {
/**

@@ -110,0 +110,0 @@ * Enter a parse tree produced by `SolidityParser.sourceUnit`.

@@ -1,2 +0,2 @@

import { ParseTreeVisitor } from "antlr4ts/tree/ParseTreeVisitor";
import { ParseTreeVisitor } from 'antlr4';
import { SourceUnitContext } from "./SolidityParser";

@@ -110,3 +110,3 @@ import { PragmaDirectiveContext } from "./SolidityParser";

*/
export interface SolidityVisitor<Result> extends ParseTreeVisitor<Result> {
export default class SolidityVisitor<Result> extends ParseTreeVisitor<Result> {
/**

@@ -113,0 +113,0 @@ * Visit a parse tree produced by `SolidityParser.sourceUnit`.

@@ -1,5 +0,4 @@

import { ParserRuleContext } from 'antlr4ts';
import { AbstractParseTreeVisitor } from 'antlr4ts/tree/AbstractParseTreeVisitor';
import { ParserRuleContext, ParseTreeVisitor } from 'antlr4';
import * as SP from './antlr/SolidityParser';
import { SolidityVisitor } from './antlr/SolidityVisitor';
import SolidityVisitor from './antlr/SolidityVisitor';
import { ParseOptions } from './types';

@@ -11,3 +10,3 @@ import * as AST from './ast-types';

type ASTBuilderNode = AST.ASTNode & WithMeta;
export declare class ASTBuilder extends AbstractParseTreeVisitor<ASTBuilderNode> implements SolidityVisitor<ASTBuilderNode | ASTBuilderNode[]> {
export declare class ASTBuilder extends ParseTreeVisitor<ASTBuilderNode> implements SolidityVisitor<ASTBuilderNode | ASTBuilderNode[]> {
options: ParseOptions;

@@ -14,0 +13,0 @@ result: AST.SourceUnit | null;

@@ -1,3 +0,3 @@

import antlr4 from 'antlr4';
declare class ErrorListener extends antlr4.error.ErrorListener {
import { ErrorListener as AntlrErrorListener } from 'antlr4';
declare class ErrorListener extends AntlrErrorListener<any> {
private _errors;

@@ -4,0 +4,0 @@ constructor();

@@ -1,2 +0,3 @@

import { Token, AntlrToken, TokenizeOptions } from './types';
import { Token as AntlrToken } from 'antlr4';
import { Token, TokenizeOptions } from './types';
export declare function buildTokenList(tokensArg: AntlrToken[], options: TokenizeOptions): Token[];

@@ -1,6 +0,4 @@

import { Token as Antlr4TsToken } from 'antlr4ts';
export interface Node {
type: string;
}
export type AntlrToken = Antlr4TsToken;
export interface TokenizeOptions {

@@ -7,0 +5,0 @@ range?: boolean;

{
"name": "@solidity-parser/parser",
"version": "0.16.2",
"version": "0.17.0",
"description": "A Solidity parser built from a robust ANTLR 4 grammar",

@@ -16,8 +16,8 @@ "main": "dist/index.cjs.js",

"scripts": {
"antlr": "antlr4ts -visitor antlr/Solidity.g4 -o src",
"build:browser": "esbuild src/index.ts --outfile=dist/index.iife.js --bundle --loader:.tokens=file --sourcemap --format=iife --global-name=SolidityParser --define:__dirname=true --define:BROWSER=true --inject:./process-shim.js",
"build:node": "esbuild src/index.ts --outfile=dist/index.cjs.js --bundle --loader:.tokens=file --sourcemap --format=cjs --platform=node --target=node12",
"build": "npm run antlr && npm run build:node && npm run build:browser && npm run generate-types && npm run copy-files",
"antlr": "antlr4 -Dlanguage=TypeScript -visitor -o src/ antlr/Solidity.g4 && npm run tokens",
"tokens": "node ./scripts/tokens-string.js",
"build:browser": "node ./scripts/build-browser.js",
"build:node": "node ./scripts/build-node.js",
"build": "npm run antlr && npm run build:node && npm run build:browser && npm run generate-types",
"generate-types": "tsc",
"copy-files": "shx mkdir -p dist/antlr && shx cp './src/antlr/*tokens' dist/antlr",
"eslint": "eslint 'src/**' 'test/**'",

@@ -46,19 +46,14 @@ "lint": "npm run eslint && npm run prettier -- --list-different",

"license": "MIT",
"dependencies": {
"antlr4ts": "^0.5.0-alpha.4"
},
"devDependencies": {
"@types/chai": "^4.3.9",
"@types/mocha": "^10.0.3",
"@types/node": "^20.8.9",
"@typescript-eslint/eslint-plugin": "^6.9.0",
"@typescript-eslint/parser": "^6.9.0",
"antlr4": "^4.9.2",
"antlr4ts-cli": "^0.5.0-alpha.4",
"@types/chai": "^4.3.11",
"@types/mocha": "^10.0.6",
"@types/node": "^20.10.5",
"@typescript-eslint/eslint-plugin": "^6.15.0",
"@typescript-eslint/parser": "^6.15.0",
"antlr4": "^4.13.1-patch-1",
"assert": "^2.1.0",
"chai": "^4.3.10",
"esbuild": "^0.11.13",
"esbuild-register": "^2.5.0",
"eslint": "^8.52.0",
"eslint-plugin-import": "^2.29.0",
"eslint": "^8.56.0",
"eslint-plugin-import": "^2.29.1",
"eslint-plugin-node": "^11.1.0",

@@ -72,9 +67,8 @@ "eslint-plugin-promise": "^6.1.1",

"nyc": "^15.1.0",
"prettier": "^3.0.3",
"puppeteer": "^21.4.1",
"shx": "^0.3.4",
"ts-node": "^10.9.1",
"typescript": "^5.2.2",
"prettier": "^3.1.1",
"puppeteer": "^21.6.1",
"ts-node": "^10.9.2",
"typescript": "^5.3.3",
"util": "^0.12.5",
"yarn": "^1.22.19"
"yarn": "^1.22.21"
},

@@ -81,0 +75,0 @@ "nyc": {

@@ -1,19 +0,15 @@

// Generated from antlr/Solidity.g4 by ANTLR 4.9.0-SNAPSHOT
import { ATN } from "antlr4ts/atn/ATN";
import { ATNDeserializer } from "antlr4ts/atn/ATNDeserializer";
import { CharStream } from "antlr4ts/CharStream";
import { Lexer } from "antlr4ts/Lexer";
import { LexerATNSimulator } from "antlr4ts/atn/LexerATNSimulator";
import { NotNull } from "antlr4ts/Decorators";
import { Override } from "antlr4ts/Decorators";
import { RuleContext } from "antlr4ts/RuleContext";
import { Vocabulary } from "antlr4ts/Vocabulary";
import { VocabularyImpl } from "antlr4ts/VocabularyImpl";
import * as Utils from "antlr4ts/misc/Utils";
export class SolidityLexer extends Lexer {
// Generated from antlr/Solidity.g4 by ANTLR 4.13.1
// noinspection ES6UnusedImports,JSUnusedGlobalSymbols,JSUnusedLocalSymbols
import {
ATN,
ATNDeserializer,
CharStream,
DecisionState, DFA,
Lexer,
LexerATNSimulator,
RuleContext,
PredictionContextCache,
Token
} from "antlr4";
export default class SolidityLexer extends Lexer {
public static readonly T__0 = 1;

@@ -152,13 +148,166 @@ public static readonly T__1 = 2;

public static readonly LINE_COMMENT = 133;
public static readonly EOF = Token.EOF;
// tslint:disable:no-trailing-whitespace
public static readonly channelNames: string[] = [
"DEFAULT_TOKEN_CHANNEL", "HIDDEN",
];
public static readonly channelNames: string[] = [ "DEFAULT_TOKEN_CHANNEL", "HIDDEN" ];
public static readonly literalNames: (string | null)[] = [ null, "'pragma'",
"';'", "'*'",
"'||'", "'^'",
"'~'", "'>='",
"'>'", "'<'",
"'<='", "'='",
"'as'", "'import'",
"'from'", "'{'",
"','", "'}'",
"'abstract'",
"'contract'",
"'interface'",
"'library'",
"'is'", "'('",
"')'", "'error'",
"'using'", "'for'",
"'|'", "'&'",
"'+'", "'-'",
"'/'", "'%'",
"'=='", "'!='",
"'struct'",
"'modifier'",
"'function'",
"'returns'",
"'event'", "'enum'",
"'['", "']'",
"'address'",
"'.'", "'mapping'",
"'=>'", "'memory'",
"'storage'",
"'calldata'",
"'if'", "'else'",
"'try'", "'catch'",
"'while'", "'unchecked'",
"'assembly'",
"'do'", "'return'",
"'throw'", "'emit'",
"'revert'",
"'var'", "'bool'",
"'string'",
"'byte'", "'++'",
"'--'", "'new'",
"':'", "'delete'",
"'!'", "'**'",
"'<<'", "'>>'",
"'&&'", "'?'",
"'|='", "'^='",
"'&='", "'<<='",
"'>>='", "'+='",
"'-='", "'*='",
"'/='", "'%='",
"'let'", "':='",
"'=:'", "'switch'",
"'case'", "'default'",
"'->'", "'callback'",
"'override'",
null, null,
null, null,
null, null,
null, null,
null, null,
null, "'anonymous'",
"'break'", "'constant'",
"'immutable'",
"'continue'",
"'leave'", "'external'",
"'indexed'",
"'internal'",
"'payable'",
"'private'",
"'public'",
"'virtual'",
"'pure'", "'type'",
"'view'", "'global'",
"'constructor'",
"'fallback'",
"'receive'" ];
public static readonly symbolicNames: (string | null)[] = [ null, null,
null, null,
null, null,
null, null,
null, null,
null, null,
null, null,
null, null,
null, null,
null, null,
null, null,
null, null,
null, null,
null, null,
null, null,
null, null,
null, null,
null, null,
null, null,
null, null,
null, null,
null, null,
null, null,
null, null,
null, null,
null, null,
null, null,
null, null,
null, null,
null, null,
null, null,
null, null,
null, null,
null, null,
null, null,
null, null,
null, null,
null, null,
null, null,
null, null,
null, null,
null, null,
null, null,
null, null,
null, null,
null, null,
null, null,
null, null,
null, "Int",
"Uint", "Byte",
"Fixed", "Ufixed",
"BooleanLiteral",
"DecimalNumber",
"HexNumber",
"NumberUnit",
"HexLiteralFragment",
"ReservedKeyword",
"AnonymousKeyword",
"BreakKeyword",
"ConstantKeyword",
"ImmutableKeyword",
"ContinueKeyword",
"LeaveKeyword",
"ExternalKeyword",
"IndexedKeyword",
"InternalKeyword",
"PayableKeyword",
"PrivateKeyword",
"PublicKeyword",
"VirtualKeyword",
"PureKeyword",
"TypeKeyword",
"ViewKeyword",
"GlobalKeyword",
"ConstructorKeyword",
"FallbackKeyword",
"ReceiveKeyword",
"Identifier",
"StringLiteralFragment",
"VersionLiteral",
"WS", "COMMENT",
"LINE_COMMENT" ];
public static readonly modeNames: string[] = [ "DEFAULT_MODE", ];
// tslint:disable:no-trailing-whitespace
public static readonly modeNames: string[] = [
"DEFAULT_MODE",
];
public static readonly ruleNames: string[] = [

@@ -189,736 +338,487 @@ "T__0", "T__1", "T__2", "T__3", "T__4", "T__5", "T__6", "T__7", "T__8",

private static readonly _LITERAL_NAMES: Array<string | undefined> = [
undefined, "'pragma'", "';'", "'*'", "'||'", "'^'", "'~'", "'>='", "'>'",
"'<'", "'<='", "'='", "'as'", "'import'", "'from'", "'{'", "','", "'}'",
"'abstract'", "'contract'", "'interface'", "'library'", "'is'", "'('",
"')'", "'error'", "'using'", "'for'", "'|'", "'&'", "'+'", "'-'", "'/'",
"'%'", "'=='", "'!='", "'struct'", "'modifier'", "'function'", "'returns'",
"'event'", "'enum'", "'['", "']'", "'address'", "'.'", "'mapping'", "'=>'",
"'memory'", "'storage'", "'calldata'", "'if'", "'else'", "'try'", "'catch'",
"'while'", "'unchecked'", "'assembly'", "'do'", "'return'", "'throw'",
"'emit'", "'revert'", "'var'", "'bool'", "'string'", "'byte'", "'++'",
"'--'", "'new'", "':'", "'delete'", "'!'", "'**'", "'<<'", "'>>'", "'&&'",
"'?'", "'|='", "'^='", "'&='", "'<<='", "'>>='", "'+='", "'-='", "'*='",
"'/='", "'%='", "'let'", "':='", "'=:'", "'switch'", "'case'", "'default'",
"'->'", "'callback'", "'override'", undefined, undefined, undefined, undefined,
undefined, undefined, undefined, undefined, undefined, undefined, undefined,
"'anonymous'", "'break'", "'constant'", "'immutable'", "'continue'", "'leave'",
"'external'", "'indexed'", "'internal'", "'payable'", "'private'", "'public'",
"'virtual'", "'pure'", "'type'", "'view'", "'global'", "'constructor'",
"'fallback'", "'receive'",
];
private static readonly _SYMBOLIC_NAMES: Array<string | undefined> = [
undefined, undefined, undefined, undefined, undefined, undefined, undefined,
undefined, undefined, undefined, undefined, undefined, undefined, undefined,
undefined, undefined, undefined, undefined, undefined, undefined, undefined,
undefined, undefined, undefined, undefined, undefined, undefined, undefined,
undefined, undefined, undefined, undefined, undefined, undefined, undefined,
undefined, undefined, undefined, undefined, undefined, undefined, undefined,
undefined, undefined, undefined, undefined, undefined, undefined, undefined,
undefined, undefined, undefined, undefined, undefined, undefined, undefined,
undefined, undefined, undefined, undefined, undefined, undefined, undefined,
undefined, undefined, undefined, undefined, undefined, undefined, undefined,
undefined, undefined, undefined, undefined, undefined, undefined, undefined,
undefined, undefined, undefined, undefined, undefined, undefined, undefined,
undefined, undefined, undefined, undefined, undefined, undefined, undefined,
undefined, undefined, undefined, undefined, undefined, undefined, "Int",
"Uint", "Byte", "Fixed", "Ufixed", "BooleanLiteral", "DecimalNumber",
"HexNumber", "NumberUnit", "HexLiteralFragment", "ReservedKeyword", "AnonymousKeyword",
"BreakKeyword", "ConstantKeyword", "ImmutableKeyword", "ContinueKeyword",
"LeaveKeyword", "ExternalKeyword", "IndexedKeyword", "InternalKeyword",
"PayableKeyword", "PrivateKeyword", "PublicKeyword", "VirtualKeyword",
"PureKeyword", "TypeKeyword", "ViewKeyword", "GlobalKeyword", "ConstructorKeyword",
"FallbackKeyword", "ReceiveKeyword", "Identifier", "StringLiteralFragment",
"VersionLiteral", "WS", "COMMENT", "LINE_COMMENT",
];
public static readonly VOCABULARY: Vocabulary = new VocabularyImpl(SolidityLexer._LITERAL_NAMES, SolidityLexer._SYMBOLIC_NAMES, []);
// @Override
// @NotNull
public get vocabulary(): Vocabulary {
return SolidityLexer.VOCABULARY;
}
// tslint:enable:no-trailing-whitespace
constructor(input: CharStream) {
super(input);
this._interp = new LexerATNSimulator(SolidityLexer._ATN, this);
this._interp = new LexerATNSimulator(this, SolidityLexer._ATN, SolidityLexer.DecisionsToDFA, new PredictionContextCache());
}
// @Override
public get grammarFileName(): string { return "Solidity.g4"; }
// @Override
public get literalNames(): (string | null)[] { return SolidityLexer.literalNames; }
public get symbolicNames(): (string | null)[] { return SolidityLexer.symbolicNames; }
public get ruleNames(): string[] { return SolidityLexer.ruleNames; }
// @Override
public get serializedATN(): string { return SolidityLexer._serializedATN; }
public get serializedATN(): number[] { return SolidityLexer._serializedATN; }
// @Override
public get channelNames(): string[] { return SolidityLexer.channelNames; }
// @Override
public get modeNames(): string[] { return SolidityLexer.modeNames; }
private static readonly _serializedATNSegments: number = 3;
private static readonly _serializedATNSegment0: string =
"\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x02\x87\u053A\b\x01" +
"\x04\x02\t\x02\x04\x03\t\x03\x04\x04\t\x04\x04\x05\t\x05\x04\x06\t\x06" +
"\x04\x07\t\x07\x04\b\t\b\x04\t\t\t\x04\n\t\n\x04\v\t\v\x04\f\t\f\x04\r" +
"\t\r\x04\x0E\t\x0E\x04\x0F\t\x0F\x04\x10\t\x10\x04\x11\t\x11\x04\x12\t" +
"\x12\x04\x13\t\x13\x04\x14\t\x14\x04\x15\t\x15\x04\x16\t\x16\x04\x17\t" +
"\x17\x04\x18\t\x18\x04\x19\t\x19\x04\x1A\t\x1A\x04\x1B\t\x1B\x04\x1C\t" +
"\x1C\x04\x1D\t\x1D\x04\x1E\t\x1E\x04\x1F\t\x1F\x04 \t \x04!\t!\x04\"\t" +
"\"\x04#\t#\x04$\t$\x04%\t%\x04&\t&\x04\'\t\'\x04(\t(\x04)\t)\x04*\t*\x04" +
"+\t+\x04,\t,\x04-\t-\x04.\t.\x04/\t/\x040\t0\x041\t1\x042\t2\x043\t3\x04" +
"4\t4\x045\t5\x046\t6\x047\t7\x048\t8\x049\t9\x04:\t:\x04;\t;\x04<\t<\x04" +
"=\t=\x04>\t>\x04?\t?\x04@\t@\x04A\tA\x04B\tB\x04C\tC\x04D\tD\x04E\tE\x04" +
"F\tF\x04G\tG\x04H\tH\x04I\tI\x04J\tJ\x04K\tK\x04L\tL\x04M\tM\x04N\tN\x04" +
"O\tO\x04P\tP\x04Q\tQ\x04R\tR\x04S\tS\x04T\tT\x04U\tU\x04V\tV\x04W\tW\x04" +
"X\tX\x04Y\tY\x04Z\tZ\x04[\t[\x04\\\t\\\x04]\t]\x04^\t^\x04_\t_\x04`\t" +
"`\x04a\ta\x04b\tb\x04c\tc\x04d\td\x04e\te\x04f\tf\x04g\tg\x04h\th\x04" +
"i\ti\x04j\tj\x04k\tk\x04l\tl\x04m\tm\x04n\tn\x04o\to\x04p\tp\x04q\tq\x04" +
"r\tr\x04s\ts\x04t\tt\x04u\tu\x04v\tv\x04w\tw\x04x\tx\x04y\ty\x04z\tz\x04" +
"{\t{\x04|\t|\x04}\t}\x04~\t~\x04\x7F\t\x7F\x04\x80\t\x80\x04\x81\t\x81" +
"\x04\x82\t\x82\x04\x83\t\x83\x04\x84\t\x84\x04\x85\t\x85\x04\x86\t\x86" +
"\x04\x87\t\x87\x04\x88\t\x88\x04\x89\t\x89\x04\x8A\t\x8A\x04\x8B\t\x8B" +
"\x04\x8C\t\x8C\x04\x8D\t\x8D\x04\x8E\t\x8E\x04\x8F\t\x8F\x03\x02\x03\x02" +
"\x03\x02\x03\x02\x03\x02\x03\x02\x03\x02\x03\x03\x03\x03\x03\x04\x03\x04" +
"\x03\x05\x03\x05\x03\x05\x03\x06\x03\x06\x03\x07\x03\x07\x03\b\x03\b\x03" +
"\b\x03\t\x03\t\x03\n\x03\n\x03\v\x03\v\x03\v\x03\f\x03\f\x03\r\x03\r\x03" +
"\r\x03\x0E\x03\x0E\x03\x0E\x03\x0E\x03\x0E\x03\x0E\x03\x0E\x03\x0F\x03" +
"\x0F\x03\x0F\x03\x0F\x03\x0F\x03\x10\x03\x10\x03\x11\x03\x11\x03\x12\x03" +
"\x12\x03\x13\x03\x13\x03\x13\x03\x13\x03\x13\x03\x13\x03\x13\x03\x13\x03" +
"\x13\x03\x14\x03\x14\x03\x14\x03\x14\x03\x14\x03\x14\x03\x14\x03\x14\x03" +
"\x14\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03" +
"\x15\x03\x15\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03" +
"\x16\x03\x17\x03\x17\x03\x17\x03\x18\x03\x18\x03\x19\x03\x19\x03\x1A\x03" +
"\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x03" +
"\x1B\x03\x1B\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1D\x03\x1D\x03\x1E\x03" +
"\x1E\x03\x1F\x03\x1F\x03 \x03 \x03!\x03!\x03\"\x03\"\x03#\x03#\x03#\x03" +
"$\x03$\x03$\x03%\x03%\x03%\x03%\x03%\x03%\x03%\x03&\x03&\x03&\x03&\x03" +
"&\x03&\x03&\x03&\x03&\x03\'\x03\'\x03\'\x03\'\x03\'\x03\'\x03\'\x03\'" +
"\x03\'\x03(\x03(\x03(\x03(\x03(\x03(\x03(\x03(\x03)\x03)\x03)\x03)\x03" +
")\x03)\x03*\x03*\x03*\x03*\x03*\x03+\x03+\x03,\x03,\x03-\x03-\x03-\x03" +
"-\x03-\x03-\x03-\x03-\x03.\x03.\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03" +
"/\x030\x030\x030\x031\x031\x031\x031\x031\x031\x031\x032\x032\x032\x03" +
"2\x032\x032\x032\x032\x033\x033\x033\x033\x033\x033\x033\x033\x033\x03" +
"4\x034\x034\x035\x035\x035\x035\x035\x036\x036\x036\x036\x037\x037\x03" +
"7\x037\x037\x037\x038\x038\x038\x038\x038\x038\x039\x039\x039\x039\x03" +
"9\x039\x039\x039\x039\x039\x03:\x03:\x03:\x03:\x03:\x03:\x03:\x03:\x03" +
":\x03;\x03;\x03;\x03<\x03<\x03<\x03<\x03<\x03<\x03<\x03=\x03=\x03=\x03" +
"=\x03=\x03=\x03>\x03>\x03>\x03>\x03>\x03?\x03?\x03?\x03?\x03?\x03?\x03" +
"?\x03@\x03@\x03@\x03@\x03A\x03A\x03A\x03A\x03A\x03B\x03B\x03B\x03B\x03" +
"B\x03B\x03B\x03C\x03C\x03C\x03C\x03C\x03D\x03D\x03D\x03E\x03E\x03E\x03" +
"F\x03F\x03F\x03F\x03G\x03G\x03H\x03H\x03H\x03H\x03H\x03H\x03H\x03I\x03" +
"I\x03J\x03J\x03J\x03K\x03K\x03K\x03L\x03L\x03L\x03M\x03M\x03M\x03N\x03" +
"N\x03O\x03O\x03O\x03P\x03P\x03P\x03Q\x03Q\x03Q\x03R\x03R\x03R\x03R\x03" +
"S\x03S\x03S\x03S\x03T\x03T\x03T\x03U\x03U\x03U\x03V\x03V\x03V\x03W\x03" +
"W\x03W\x03X\x03X\x03X\x03Y\x03Y\x03Y\x03Y\x03Z\x03Z\x03Z\x03[\x03[\x03" +
"[\x03\\\x03\\\x03\\\x03\\\x03\\\x03\\\x03\\\x03]\x03]\x03]\x03]\x03]\x03" +
"^\x03^\x03^\x03^\x03^\x03^\x03^\x03^\x03_\x03_\x03_\x03`\x03`\x03`\x03" +
"`\x03`\x03`\x03`\x03`\x03`\x03a\x03a\x03a\x03a\x03a\x03a\x03a\x03a\x03" +
"a\x03b\x03b\x03b\x03b\x03b\x05b\u02D4\nb\x03c\x03c\x03c\x03c\x03c\x03" +
"c\x05c\u02DC\nc\x03d\x03d\x03d\x03d\x03d\x03d\x03d\x05d\u02E5\nd\x03e" +
"\x03e\x03e\x03e\x03e\x03e\x03e\x03e\x03e\x06e\u02F0\ne\re\x0Ee\u02F1\x05" +
"e\u02F4\ne\x03f\x03f\x03f\x03f\x03f\x03f\x03f\x03f\x03f\x03f\x06f\u0300" +
"\nf\rf\x0Ef\u0301\x05f\u0304\nf\x03g\x03g\x03g\x03g\x03g\x03g\x03g\x03" +
"g\x03g\x03g\x03g\x03g\x03g\x03g\x03g\x03g\x03g\x03g\x03g\x03g\x03g\x03" +
"g\x03g\x03g\x03g\x03g\x03g\x03g\x03g\x03g\x03g\x03g\x03g\x03g\x03g\x03" +
"g\x03g\x03g\x03g\x03g\x03g\x03g\x03g\x03g\x03g\x03g\x03g\x03g\x03g\x03" +
"g\x03g\x03g\x03g\x03g\x03g\x03g\x03g\x03g\x03g\x03g\x03g\x03g\x03g\x03" +
"g\x03g\x03g\x03g\x03g\x03g\x03g\x03g\x03g\x03g\x03g\x03g\x03g\x03g\x03" +
"g\x03g\x03g\x03g\x03g\x03g\x05g\u0359\ng\x03h\x03h\x03h\x03h\x03h\x05" +
"h\u0360\nh\x03i\x03i\x03i\x03i\x03i\x03i\x03i\x03i\x03i\x05i\u036B\ni" +
"\x03j\x03j\x05j\u036F\nj\x03j\x03j\x05j\u0373\nj\x03j\x03j\x05j\u0377" +
"\nj\x03j\x05j\u037A\nj\x03k\x03k\x05k\u037E\nk\x03k\x07k\u0381\nk\fk\x0E" +
"k\u0384\vk\x03l\x03l\x03l\x03l\x03m\x03m\x05m\u038C\nm\x03m\x07m\u038F" +
"\nm\fm\x0Em\u0392\vm\x03n\x03n\x03n\x03n\x03n\x03n\x03n\x03n\x03n\x03" +
"n\x03n\x03n\x03n\x03n\x03n\x03n\x03n\x03n\x03n\x03n\x03n\x03n\x03n\x03" +
"n\x03n\x03n\x03n\x03n\x03n\x03n\x03n\x03n\x03n\x03n\x03n\x03n\x03n\x03" +
"n\x03n\x03n\x03n\x03n\x03n\x03n\x03n\x03n\x03n\x03n\x03n\x03n\x03n\x03" +
"n\x03n\x03n\x03n\x03n\x05n\u03CC\nn\x03o\x03o\x03o\x03o\x03o\x03o\x05" +
"o\u03D4\no\x03o\x03o\x03o\x05o\u03D9\no\x03o\x05o\u03DC\no\x03p\x03p\x03" +
"q\x03q\x03q\x03q\x03q\x03q\x03q\x03q\x03q\x03q\x03q\x03q\x03q\x03q\x03" +
"q\x03q\x03q\x03q\x03q\x03q\x03q\x03q\x03q\x03q\x03q\x03q\x03q\x03q\x03" +
"q\x03q\x03q\x03q\x03q\x03q\x03q\x03q\x03q\x03q\x03q\x03q\x03q\x03q\x03" +
"q\x03q\x03q\x03q\x03q\x03q\x03q\x03q\x03q\x03q\x03q\x03q\x03q\x03q\x03" +
"q\x03q\x03q\x03q\x03q\x03q\x03q\x03q\x03q\x03q\x03q\x03q\x03q\x03q\x03" +
"q\x03q\x03q\x03q\x03q\x03q\x03q\x03q\x03q\x03q\x03q\x03q\x03q\x03q\x03" +
"q\x03q\x03q\x03q\x05q\u0438\nq\x03r\x03r\x03r\x03r\x03r\x03r\x03r\x03" +
"r\x03r\x03r\x03s\x03s\x03s\x03s\x03s\x03s\x03t\x03t\x03t\x03t\x03t\x03" +
"t\x03t\x03t\x03t\x03u\x03u\x03u\x03u\x03u\x03u\x03u\x03u\x03u\x03u\x03" +
"v\x03v\x03v\x03v\x03v\x03v\x03v\x03v\x03v\x03w\x03w\x03w\x03w\x03w\x03" +
"w\x03x\x03x\x03x\x03x\x03x\x03x\x03x\x03x\x03x\x03y\x03y\x03y\x03y\x03" +
"y\x03y\x03y\x03y\x03z\x03z\x03z\x03z\x03z\x03z\x03z\x03z\x03z\x03{\x03" +
"{\x03{\x03{\x03{\x03{\x03{\x03{\x03|\x03|\x03|\x03|\x03|\x03|\x03|\x03" +
"|\x03}\x03}\x03}\x03}\x03}\x03}\x03}\x03~\x03~\x03~\x03~\x03~\x03~\x03" +
"~\x03~\x03\x7F\x03\x7F\x03\x7F\x03\x7F\x03\x7F\x03\x80\x03\x80\x03\x80" +
"\x03\x80\x03\x80\x03\x81\x03\x81\x03\x81\x03\x81\x03\x81\x03\x82\x03\x82" +
"\x03\x82\x03\x82\x03\x82\x03\x82\x03\x82\x03\x83\x03\x83\x03\x83\x03\x83" +
"\x03\x83\x03\x83\x03\x83\x03\x83\x03\x83\x03\x83\x03\x83\x03\x83\x03\x84" +
"\x03\x84\x03\x84\x03\x84\x03\x84\x03\x84\x03\x84\x03\x84\x03\x84\x03\x85" +
"\x03\x85\x03\x85\x03\x85\x03\x85\x03\x85\x03\x85\x03\x85\x03\x86\x03\x86" +
"\x07\x86\u04DA\n\x86\f\x86\x0E\x86\u04DD\v\x86\x03\x87\x03\x87\x03\x88" +
"\x03\x88\x03\x89\x03\x89\x03\x89\x03\x89\x03\x89\x03\x89\x03\x89\x05\x89" +
"\u04EA\n\x89\x03\x89\x03\x89\x07\x89\u04EE\n\x89\f\x89\x0E\x89\u04F1\v" +
"\x89\x03\x89\x03\x89\x03\x89\x07\x89\u04F6\n\x89\f\x89\x0E\x89\u04F9\v" +
"\x89\x03\x89\x05\x89\u04FC\n\x89\x03\x8A\x03\x8A\x03\x8A\x05\x8A\u0501" +
"\n\x8A\x03\x8B\x03\x8B\x03\x8B\x05\x8B\u0506\n\x8B\x03\x8C\x06\x8C\u0509" +
"\n\x8C\r\x8C\x0E\x8C\u050A\x03\x8C\x03\x8C\x06\x8C\u050F\n\x8C\r\x8C\x0E" +
"\x8C\u0510\x03\x8C\x03\x8C\x06\x8C\u0515\n\x8C\r\x8C\x0E\x8C\u0516\x05" +
"\x8C\u0519\n\x8C\x03\x8D\x06\x8D\u051C\n\x8D\r\x8D\x0E\x8D\u051D\x03\x8D" +
"\x03\x8D\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x07\x8E\u0526\n\x8E\f\x8E\x0E" +
"\x8E\u0529\v\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8F\x03\x8F" +
"\x03\x8F\x03\x8F\x07\x8F\u0534\n\x8F\f\x8F\x0E\x8F\u0537\v\x8F\x03\x8F" +
"\x03\x8F\x03\u0527\x02\x02\x90\x03\x02\x03\x05\x02\x04\x07\x02\x05\t\x02" +
"\x06\v\x02\x07\r\x02\b\x0F\x02\t\x11\x02\n\x13\x02\v\x15\x02\f\x17\x02" +
"\r\x19\x02\x0E\x1B\x02\x0F\x1D\x02\x10\x1F\x02\x11!\x02\x12#\x02\x13%" +
"\x02\x14\'\x02\x15)\x02\x16+\x02\x17-\x02\x18/\x02\x191\x02\x1A3\x02\x1B" +
"5\x02\x1C7\x02\x1D9\x02\x1E;\x02\x1F=\x02 ?\x02!A\x02\"C\x02#E\x02$G\x02" +
"%I\x02&K\x02\'M\x02(O\x02)Q\x02*S\x02+U\x02,W\x02-Y\x02.[\x02/]\x020_" +
"\x021a\x022c\x023e\x024g\x025i\x026k\x027m\x028o\x029q\x02:s\x02;u\x02" +
"<w\x02=y\x02>{\x02?}\x02@\x7F\x02A\x81\x02B\x83\x02C\x85\x02D\x87\x02" +
"E\x89\x02F\x8B\x02G\x8D\x02H\x8F\x02I\x91\x02J\x93\x02K\x95\x02L\x97\x02" +
"M\x99\x02N\x9B\x02O\x9D\x02P\x9F\x02Q\xA1\x02R\xA3\x02S\xA5\x02T\xA7\x02" +
"U\xA9\x02V\xAB\x02W\xAD\x02X\xAF\x02Y\xB1\x02Z\xB3\x02[\xB5\x02\\\xB7" +
"\x02]\xB9\x02^\xBB\x02_\xBD\x02`\xBF\x02a\xC1\x02b\xC3\x02c\xC5\x02d\xC7" +
"\x02e\xC9\x02f\xCB\x02g\xCD\x02\x02\xCF\x02\x02\xD1\x02h\xD3\x02i\xD5" +
"\x02\x02\xD7\x02j\xD9\x02\x02\xDB\x02k\xDD\x02l\xDF\x02\x02\xE1\x02m\xE3" +
"\x02n\xE5\x02o\xE7\x02p\xE9\x02q\xEB\x02r\xED\x02s\xEF\x02t\xF1\x02u\xF3" +
"\x02v\xF5\x02w\xF7\x02x\xF9\x02y\xFB\x02z\xFD\x02{\xFF\x02|\u0101\x02" +
"}\u0103\x02~\u0105\x02\x7F\u0107\x02\x80\u0109\x02\x81\u010B\x02\x82\u010D" +
"\x02\x02\u010F\x02\x02\u0111\x02\x83\u0113\x02\x02\u0115\x02\x02\u0117" +
"\x02\x84\u0119\x02\x85\u011B\x02\x86\u011D\x02\x87\x03\x02\x0F\x03\x02" +
"2;\x03\x023;\x03\x0234\x03\x0224\x04\x02GGgg\x04\x02ZZzz\x05\x022;CHc" +
"h\x06\x02&&C\\aac|\x07\x02&&2;C\\aac|\x06\x02\f\f\x0F\x0F$$^^\x06\x02" +
"\f\f\x0F\x0F))^^\x05\x02\v\f\x0E\x0F\"\"\x04\x02\f\f\x0F\x0F\x02\u058C" +
"\x02\x03\x03\x02\x02\x02\x02\x05\x03\x02\x02\x02\x02\x07\x03\x02\x02\x02" +
"\x02\t\x03\x02\x02\x02\x02\v\x03\x02\x02\x02\x02\r\x03\x02\x02\x02\x02" +
"\x0F\x03\x02\x02\x02\x02\x11\x03\x02\x02\x02\x02\x13\x03\x02\x02\x02\x02" +
"\x15\x03\x02\x02\x02\x02\x17\x03\x02\x02\x02\x02\x19\x03\x02\x02\x02\x02" +
"\x1B\x03\x02\x02\x02\x02\x1D\x03\x02\x02\x02\x02\x1F\x03\x02\x02\x02\x02" +
"!\x03\x02\x02\x02\x02#\x03\x02\x02\x02\x02%\x03\x02\x02\x02\x02\'\x03" +
"\x02\x02\x02\x02)\x03\x02\x02\x02\x02+\x03\x02\x02\x02\x02-\x03\x02\x02" +
"\x02\x02/\x03\x02\x02\x02\x021\x03\x02\x02\x02\x023\x03\x02\x02\x02\x02" +
"5\x03\x02\x02\x02\x027\x03\x02\x02\x02\x029\x03\x02\x02\x02\x02;\x03\x02" +
"\x02\x02\x02=\x03\x02\x02\x02\x02?\x03\x02\x02\x02\x02A\x03\x02\x02\x02" +
"\x02C\x03\x02\x02\x02\x02E\x03\x02\x02\x02\x02G\x03\x02\x02\x02\x02I\x03" +
"\x02\x02\x02\x02K\x03\x02\x02\x02\x02M\x03\x02\x02\x02\x02O\x03\x02\x02" +
"\x02\x02Q\x03\x02\x02\x02\x02S\x03\x02\x02\x02\x02U\x03\x02\x02\x02\x02" +
"W\x03\x02\x02\x02\x02Y\x03\x02\x02\x02\x02[\x03\x02\x02\x02\x02]\x03\x02" +
"\x02\x02\x02_\x03\x02\x02\x02\x02a\x03\x02\x02\x02\x02c\x03\x02\x02\x02" +
"\x02e\x03\x02\x02\x02\x02g\x03\x02\x02\x02\x02i\x03\x02\x02\x02\x02k\x03" +
"\x02\x02\x02\x02m\x03\x02\x02\x02\x02o\x03\x02\x02\x02\x02q\x03\x02\x02" +
"\x02\x02s\x03\x02\x02\x02\x02u\x03\x02\x02\x02\x02w\x03\x02\x02\x02\x02" +
"y\x03\x02\x02\x02\x02{\x03\x02\x02\x02\x02}\x03\x02\x02\x02\x02\x7F\x03" +
"\x02\x02\x02\x02\x81\x03\x02\x02\x02\x02\x83\x03\x02\x02\x02\x02\x85\x03" +
"\x02\x02\x02\x02\x87\x03\x02\x02\x02\x02\x89\x03\x02\x02\x02\x02\x8B\x03" +
"\x02\x02\x02\x02\x8D\x03\x02\x02\x02\x02\x8F\x03\x02\x02\x02\x02\x91\x03" +
"\x02\x02\x02\x02\x93\x03\x02\x02\x02\x02\x95\x03\x02\x02\x02\x02\x97\x03" +
"\x02\x02\x02\x02\x99\x03\x02\x02\x02\x02\x9B\x03\x02\x02\x02\x02\x9D\x03" +
"\x02\x02\x02\x02\x9F\x03\x02\x02\x02\x02\xA1\x03\x02\x02\x02\x02\xA3\x03" +
"\x02\x02\x02\x02\xA5\x03\x02\x02\x02\x02\xA7\x03\x02\x02\x02\x02\xA9\x03" +
"\x02\x02\x02\x02\xAB\x03\x02\x02\x02\x02\xAD\x03\x02\x02\x02\x02\xAF\x03" +
"\x02\x02\x02\x02\xB1\x03\x02\x02\x02\x02\xB3\x03\x02\x02\x02\x02\xB5\x03" +
"\x02\x02\x02\x02\xB7\x03\x02\x02\x02\x02\xB9\x03\x02\x02\x02\x02\xBB\x03" +
"\x02\x02\x02\x02\xBD\x03\x02\x02\x02\x02\xBF\x03\x02\x02\x02\x02\xC1\x03" +
"\x02\x02\x02\x02\xC3\x03\x02\x02\x02\x02\xC5\x03\x02\x02\x02\x02\xC7\x03" +
"\x02\x02\x02\x02\xC9\x03\x02\x02\x02\x02\xCB\x03\x02\x02\x02\x02\xD1\x03" +
"\x02\x02\x02\x02\xD3\x03\x02\x02\x02\x02\xD7\x03\x02\x02\x02\x02\xDB\x03" +
"\x02\x02\x02\x02\xDD\x03\x02\x02\x02\x02\xE1\x03\x02\x02\x02\x02\xE3\x03" +
"\x02\x02\x02\x02\xE5\x03\x02\x02\x02\x02\xE7\x03\x02\x02\x02\x02\xE9\x03" +
"\x02\x02\x02\x02\xEB\x03\x02\x02\x02\x02\xED\x03\x02\x02\x02\x02\xEF\x03" +
"\x02\x02\x02\x02\xF1\x03\x02\x02\x02\x02\xF3\x03\x02\x02\x02\x02\xF5\x03" +
"\x02\x02\x02\x02\xF7\x03\x02\x02\x02\x02\xF9\x03\x02\x02\x02\x02\xFB\x03" +
"\x02\x02\x02\x02\xFD\x03\x02\x02\x02\x02\xFF\x03\x02\x02\x02\x02\u0101" +
"\x03\x02\x02\x02\x02\u0103\x03\x02\x02\x02\x02\u0105\x03\x02\x02\x02\x02" +
"\u0107\x03\x02\x02\x02\x02\u0109\x03\x02\x02\x02\x02\u010B\x03\x02\x02" +
"\x02\x02\u0111\x03\x02\x02\x02\x02\u0117\x03\x02\x02\x02\x02\u0119\x03" +
"\x02\x02\x02\x02\u011B\x03\x02\x02\x02\x02\u011D\x03\x02\x02\x02\x03\u011F" +
"\x03\x02\x02\x02\x05\u0126\x03\x02\x02\x02\x07\u0128\x03\x02\x02\x02\t" +
"\u012A\x03\x02\x02\x02\v\u012D\x03\x02\x02\x02\r\u012F\x03\x02\x02\x02" +
"\x0F\u0131\x03\x02\x02\x02\x11\u0134\x03\x02\x02\x02\x13\u0136\x03\x02" +
"\x02\x02\x15\u0138\x03\x02\x02\x02\x17\u013B\x03\x02\x02\x02\x19\u013D" +
"\x03\x02\x02\x02\x1B\u0140\x03\x02\x02\x02\x1D\u0147\x03\x02\x02\x02\x1F" +
"\u014C\x03\x02\x02\x02!\u014E\x03\x02\x02\x02#\u0150\x03\x02\x02\x02%" +
"\u0152\x03\x02\x02\x02\'\u015B\x03\x02\x02\x02)\u0164\x03\x02\x02\x02" +
"+\u016E\x03\x02\x02\x02-\u0176\x03\x02\x02\x02/\u0179\x03\x02\x02\x02" +
"1\u017B\x03\x02\x02\x023\u017D\x03\x02\x02\x025\u0183\x03\x02\x02\x02" +
"7\u0189\x03\x02\x02\x029\u018D\x03\x02\x02\x02;\u018F\x03\x02\x02\x02" +
"=\u0191\x03\x02\x02\x02?\u0193\x03\x02\x02\x02A\u0195\x03\x02\x02\x02" +
"C\u0197\x03\x02\x02\x02E\u0199\x03\x02\x02\x02G\u019C\x03\x02\x02\x02" +
"I\u019F\x03\x02\x02\x02K\u01A6\x03\x02\x02\x02M\u01AF\x03\x02\x02\x02" +
"O\u01B8\x03\x02\x02\x02Q\u01C0\x03\x02\x02\x02S\u01C6\x03\x02\x02\x02" +
"U\u01CB\x03\x02\x02\x02W\u01CD\x03\x02\x02\x02Y\u01CF\x03\x02\x02\x02" +
"[\u01D7\x03\x02\x02\x02]\u01D9\x03\x02\x02\x02_\u01E1\x03\x02\x02\x02" +
"a\u01E4\x03\x02\x02\x02c\u01EB\x03\x02\x02\x02e\u01F3\x03\x02\x02\x02" +
"g\u01FC\x03\x02\x02\x02i\u01FF\x03\x02\x02\x02k\u0204\x03\x02\x02\x02" +
"m\u0208\x03\x02\x02\x02o\u020E\x03\x02\x02\x02q\u0214\x03\x02\x02\x02" +
"s\u021E\x03\x02\x02\x02u\u0227\x03\x02\x02\x02w\u022A\x03\x02\x02\x02" +
"y\u0231\x03\x02\x02\x02{\u0237\x03\x02\x02\x02}\u023C\x03\x02\x02\x02" +
"\x7F\u0243\x03\x02\x02\x02\x81\u0247\x03\x02\x02\x02\x83\u024C\x03\x02" +
"\x02\x02\x85\u0253\x03\x02\x02\x02\x87\u0258\x03\x02\x02\x02\x89\u025B" +
"\x03\x02\x02\x02\x8B\u025E\x03\x02\x02\x02\x8D\u0262\x03\x02\x02\x02\x8F" +
"\u0264\x03\x02\x02\x02\x91\u026B\x03\x02\x02\x02\x93\u026D\x03\x02\x02" +
"\x02\x95\u0270\x03\x02\x02\x02\x97\u0273\x03\x02\x02\x02\x99\u0276\x03" +
"\x02\x02\x02\x9B\u0279\x03\x02\x02\x02\x9D\u027B\x03\x02\x02\x02\x9F\u027E" +
"\x03\x02\x02\x02\xA1\u0281\x03\x02\x02\x02\xA3\u0284\x03\x02\x02\x02\xA5" +
"\u0288\x03\x02\x02\x02\xA7\u028C\x03\x02\x02\x02\xA9\u028F\x03\x02\x02" +
"\x02\xAB\u0292\x03\x02\x02\x02\xAD\u0295\x03\x02\x02\x02\xAF\u0298\x03" +
"\x02\x02\x02\xB1\u029B\x03\x02\x02\x02\xB3\u029F\x03\x02\x02\x02\xB5\u02A2" +
"\x03\x02\x02\x02\xB7\u02A5\x03\x02\x02\x02\xB9\u02AC\x03\x02\x02\x02\xBB" +
"\u02B1\x03\x02\x02\x02\xBD\u02B9\x03\x02\x02\x02\xBF\u02BC\x03\x02\x02" +
"\x02\xC1\u02C5\x03\x02\x02\x02\xC3\u02CE\x03\x02\x02\x02\xC5\u02D5\x03" +
"\x02\x02\x02\xC7\u02DD\x03\x02\x02\x02\xC9\u02E6\x03\x02\x02\x02\xCB\u02F5" +
"\x03\x02\x02\x02\xCD\u0358\x03\x02\x02\x02\xCF\u035F\x03\x02\x02\x02\xD1" +
"\u036A\x03\x02\x02\x02\xD3\u0372\x03\x02\x02\x02\xD5\u037B\x03\x02\x02" +
"\x02\xD7\u0385\x03\x02\x02\x02\xD9\u0389\x03\x02\x02\x02\xDB\u03CB\x03" +
"\x02\x02\x02\xDD\u03CD\x03\x02\x02\x02\xDF\u03DD\x03\x02\x02\x02\xE1\u0437" +
"\x03\x02\x02\x02\xE3\u0439\x03\x02\x02\x02\xE5\u0443\x03\x02\x02\x02\xE7" +
"\u0449\x03\x02\x02\x02\xE9\u0452\x03\x02\x02\x02\xEB\u045C\x03\x02\x02" +
"\x02\xED\u0465\x03\x02\x02\x02\xEF\u046B\x03\x02\x02\x02\xF1\u0474\x03" +
"\x02\x02\x02\xF3\u047C\x03\x02\x02\x02\xF5\u0485\x03\x02\x02\x02\xF7\u048D" +
"\x03\x02\x02\x02\xF9\u0495\x03\x02\x02\x02\xFB\u049C\x03\x02\x02\x02\xFD" +
"\u04A4\x03\x02\x02\x02\xFF\u04A9\x03\x02\x02\x02\u0101\u04AE\x03\x02\x02" +
"\x02\u0103\u04B3\x03\x02\x02\x02\u0105\u04BA\x03\x02\x02\x02\u0107\u04C6" +
"\x03\x02\x02\x02\u0109\u04CF\x03\x02\x02\x02\u010B\u04D7\x03\x02\x02\x02" +
"\u010D\u04DE\x03\x02\x02\x02\u010F\u04E0\x03\x02\x02\x02\u0111\u04E9\x03" +
"\x02\x02\x02\u0113\u0500\x03\x02\x02\x02\u0115\u0505\x03\x02\x02\x02\u0117" +
"\u0508\x03\x02\x02\x02\u0119\u051B\x03\x02\x02\x02\u011B\u0521\x03\x02" +
"\x02\x02\u011D\u052F\x03\x02\x02\x02\u011F\u0120\x07r\x02\x02\u0120\u0121" +
"\x07t\x02\x02\u0121\u0122\x07c\x02\x02\u0122\u0123\x07i\x02\x02\u0123" +
"\u0124\x07o\x02\x02\u0124\u0125\x07c\x02\x02\u0125\x04\x03\x02\x02\x02" +
"\u0126\u0127\x07=\x02\x02\u0127\x06\x03\x02\x02\x02\u0128\u0129\x07,\x02" +
"\x02\u0129\b\x03\x02\x02\x02\u012A\u012B\x07~\x02\x02\u012B\u012C\x07" +
"~\x02\x02\u012C\n\x03\x02\x02\x02\u012D\u012E\x07`";
private static readonly _serializedATNSegment1: string =
"\x02\x02\u012E\f\x03\x02\x02\x02\u012F\u0130\x07\x80\x02\x02\u0130\x0E" +
"\x03\x02\x02\x02\u0131\u0132\x07@\x02\x02\u0132\u0133\x07?\x02\x02\u0133" +
"\x10\x03\x02\x02\x02\u0134\u0135\x07@\x02\x02\u0135\x12\x03\x02\x02\x02" +
"\u0136\u0137\x07>\x02\x02\u0137\x14\x03\x02\x02\x02\u0138\u0139\x07>\x02" +
"\x02\u0139\u013A\x07?\x02\x02\u013A\x16\x03\x02\x02\x02\u013B\u013C\x07" +
"?\x02\x02\u013C\x18\x03\x02\x02\x02\u013D\u013E\x07c\x02\x02\u013E\u013F" +
"\x07u\x02\x02\u013F\x1A\x03\x02\x02\x02\u0140\u0141\x07k\x02\x02\u0141" +
"\u0142\x07o\x02\x02\u0142\u0143\x07r\x02\x02\u0143\u0144\x07q\x02\x02" +
"\u0144\u0145\x07t\x02\x02\u0145\u0146\x07v\x02\x02\u0146\x1C\x03\x02\x02" +
"\x02\u0147\u0148\x07h\x02\x02\u0148\u0149\x07t\x02\x02\u0149\u014A\x07" +
"q\x02\x02\u014A\u014B\x07o\x02\x02\u014B\x1E\x03\x02\x02\x02\u014C\u014D" +
"\x07}\x02\x02\u014D \x03\x02\x02\x02\u014E\u014F\x07.\x02\x02\u014F\"" +
"\x03\x02\x02\x02\u0150\u0151\x07\x7F\x02\x02\u0151$\x03\x02\x02\x02\u0152" +
"\u0153\x07c\x02\x02\u0153\u0154\x07d\x02\x02\u0154\u0155\x07u\x02\x02" +
"\u0155\u0156\x07v\x02\x02\u0156\u0157\x07t\x02\x02\u0157\u0158\x07c\x02" +
"\x02\u0158\u0159\x07e\x02\x02\u0159\u015A\x07v\x02\x02\u015A&\x03\x02" +
"\x02\x02\u015B\u015C\x07e\x02\x02\u015C\u015D\x07q\x02\x02\u015D\u015E" +
"\x07p\x02\x02\u015E\u015F\x07v\x02\x02\u015F\u0160\x07t\x02\x02\u0160" +
"\u0161\x07c\x02\x02\u0161\u0162\x07e\x02\x02\u0162\u0163\x07v\x02\x02" +
"\u0163(\x03\x02\x02\x02\u0164\u0165\x07k\x02\x02\u0165\u0166\x07p\x02" +
"\x02\u0166\u0167\x07v\x02\x02\u0167\u0168\x07g\x02\x02\u0168\u0169\x07" +
"t\x02\x02\u0169\u016A\x07h\x02\x02\u016A\u016B\x07c\x02\x02\u016B\u016C" +
"\x07e\x02\x02\u016C\u016D\x07g\x02\x02\u016D*\x03\x02\x02\x02\u016E\u016F" +
"\x07n\x02\x02\u016F\u0170\x07k\x02\x02\u0170\u0171\x07d\x02\x02\u0171" +
"\u0172\x07t\x02\x02\u0172\u0173\x07c\x02\x02\u0173\u0174\x07t\x02\x02" +
"\u0174\u0175\x07{\x02\x02\u0175,\x03\x02\x02\x02\u0176\u0177\x07k\x02" +
"\x02\u0177\u0178\x07u\x02\x02\u0178.\x03\x02\x02\x02\u0179\u017A\x07*" +
"\x02\x02\u017A0\x03\x02\x02\x02\u017B\u017C\x07+\x02\x02\u017C2\x03\x02" +
"\x02\x02\u017D\u017E\x07g\x02\x02\u017E\u017F\x07t\x02\x02\u017F\u0180" +
"\x07t\x02\x02\u0180\u0181\x07q\x02\x02\u0181\u0182\x07t\x02\x02\u0182" +
"4\x03\x02\x02\x02\u0183\u0184\x07w\x02\x02\u0184\u0185\x07u\x02\x02\u0185" +
"\u0186\x07k\x02\x02\u0186\u0187\x07p\x02\x02\u0187\u0188\x07i\x02\x02" +
"\u01886\x03\x02\x02\x02\u0189\u018A\x07h\x02\x02\u018A\u018B\x07q\x02" +
"\x02\u018B\u018C\x07t\x02\x02\u018C8\x03\x02\x02\x02\u018D\u018E\x07~" +
"\x02\x02\u018E:\x03\x02\x02\x02\u018F\u0190\x07(\x02\x02\u0190<\x03\x02" +
"\x02\x02\u0191\u0192\x07-\x02\x02\u0192>\x03\x02\x02\x02\u0193\u0194\x07" +
"/\x02\x02\u0194@\x03\x02\x02\x02\u0195\u0196\x071\x02\x02\u0196B\x03\x02" +
"\x02\x02\u0197\u0198\x07\'\x02\x02\u0198D\x03\x02\x02\x02\u0199\u019A" +
"\x07?\x02\x02\u019A\u019B\x07?\x02\x02\u019BF\x03\x02\x02\x02\u019C\u019D" +
"\x07#\x02\x02\u019D\u019E\x07?\x02\x02\u019EH\x03\x02\x02\x02\u019F\u01A0" +
"\x07u\x02\x02\u01A0\u01A1\x07v\x02\x02\u01A1\u01A2\x07t\x02\x02\u01A2" +
"\u01A3\x07w\x02\x02\u01A3\u01A4\x07e\x02\x02\u01A4\u01A5\x07v\x02\x02" +
"\u01A5J\x03\x02\x02\x02\u01A6\u01A7\x07o\x02\x02\u01A7\u01A8\x07q\x02" +
"\x02\u01A8\u01A9\x07f\x02\x02\u01A9\u01AA\x07k\x02\x02\u01AA\u01AB\x07" +
"h\x02\x02\u01AB\u01AC\x07k\x02\x02\u01AC\u01AD\x07g\x02\x02\u01AD\u01AE" +
"\x07t\x02\x02\u01AEL\x03\x02\x02\x02\u01AF\u01B0\x07h\x02\x02\u01B0\u01B1" +
"\x07w\x02\x02\u01B1\u01B2\x07p\x02\x02\u01B2\u01B3\x07e\x02\x02\u01B3" +
"\u01B4\x07v\x02\x02\u01B4\u01B5\x07k\x02\x02\u01B5\u01B6\x07q\x02\x02" +
"\u01B6\u01B7\x07p\x02\x02\u01B7N\x03\x02\x02\x02\u01B8\u01B9\x07t\x02" +
"\x02\u01B9\u01BA\x07g\x02\x02\u01BA\u01BB\x07v\x02\x02\u01BB\u01BC\x07" +
"w\x02\x02\u01BC\u01BD\x07t\x02\x02\u01BD\u01BE\x07p\x02\x02\u01BE\u01BF" +
"\x07u\x02\x02\u01BFP\x03\x02\x02\x02\u01C0\u01C1\x07g\x02\x02\u01C1\u01C2" +
"\x07x\x02\x02\u01C2\u01C3\x07g\x02\x02\u01C3\u01C4\x07p\x02\x02\u01C4" +
"\u01C5\x07v\x02\x02\u01C5R\x03\x02\x02\x02\u01C6\u01C7\x07g\x02\x02\u01C7" +
"\u01C8\x07p\x02\x02\u01C8\u01C9\x07w\x02\x02\u01C9\u01CA\x07o\x02\x02" +
"\u01CAT\x03\x02\x02\x02\u01CB\u01CC\x07]\x02\x02\u01CCV\x03\x02\x02\x02" +
"\u01CD\u01CE\x07_\x02\x02\u01CEX\x03\x02\x02\x02\u01CF\u01D0\x07c\x02" +
"\x02\u01D0\u01D1\x07f\x02\x02\u01D1\u01D2\x07f\x02\x02\u01D2\u01D3\x07" +
"t\x02\x02\u01D3\u01D4\x07g\x02\x02\u01D4\u01D5\x07u\x02\x02\u01D5\u01D6" +
"\x07u\x02\x02\u01D6Z\x03\x02\x02\x02\u01D7\u01D8\x070\x02\x02\u01D8\\" +
"\x03\x02\x02\x02\u01D9\u01DA\x07o\x02\x02\u01DA\u01DB\x07c\x02\x02\u01DB" +
"\u01DC\x07r\x02\x02\u01DC\u01DD\x07r\x02\x02\u01DD\u01DE\x07k\x02\x02" +
"\u01DE\u01DF\x07p\x02\x02\u01DF\u01E0\x07i\x02\x02\u01E0^\x03\x02\x02" +
"\x02\u01E1\u01E2\x07?\x02\x02\u01E2\u01E3\x07@\x02\x02\u01E3`\x03\x02" +
"\x02\x02\u01E4\u01E5\x07o\x02\x02\u01E5\u01E6\x07g\x02\x02\u01E6\u01E7" +
"\x07o\x02\x02\u01E7\u01E8\x07q\x02\x02\u01E8\u01E9\x07t\x02\x02\u01E9" +
"\u01EA\x07{\x02\x02\u01EAb\x03\x02\x02\x02\u01EB\u01EC\x07u\x02\x02\u01EC" +
"\u01ED\x07v\x02\x02\u01ED\u01EE\x07q\x02\x02\u01EE\u01EF\x07t\x02\x02" +
"\u01EF\u01F0\x07c\x02\x02\u01F0\u01F1\x07i\x02\x02\u01F1\u01F2\x07g\x02" +
"\x02\u01F2d\x03\x02\x02\x02\u01F3\u01F4\x07e\x02\x02\u01F4\u01F5\x07c" +
"\x02\x02\u01F5\u01F6\x07n\x02\x02\u01F6\u01F7\x07n\x02\x02\u01F7\u01F8" +
"\x07f\x02\x02\u01F8\u01F9\x07c\x02\x02\u01F9\u01FA\x07v\x02\x02\u01FA" +
"\u01FB\x07c\x02\x02\u01FBf\x03\x02\x02\x02\u01FC\u01FD\x07k\x02\x02\u01FD" +
"\u01FE\x07h\x02\x02\u01FEh\x03\x02\x02\x02\u01FF\u0200\x07g\x02\x02\u0200" +
"\u0201\x07n\x02\x02\u0201\u0202\x07u\x02\x02\u0202\u0203\x07g\x02\x02" +
"\u0203j\x03\x02\x02\x02\u0204\u0205\x07v\x02\x02\u0205\u0206\x07t\x02" +
"\x02\u0206\u0207\x07{\x02\x02\u0207l\x03\x02\x02\x02\u0208\u0209\x07e" +
"\x02\x02\u0209\u020A\x07c\x02\x02\u020A\u020B\x07v\x02\x02\u020B\u020C" +
"\x07e\x02\x02\u020C\u020D\x07j\x02\x02\u020Dn\x03\x02\x02\x02\u020E\u020F" +
"\x07y\x02\x02\u020F\u0210\x07j\x02\x02\u0210\u0211\x07k\x02\x02\u0211" +
"\u0212\x07n\x02\x02\u0212\u0213\x07g\x02\x02\u0213p\x03\x02\x02\x02\u0214" +
"\u0215\x07w\x02\x02\u0215\u0216\x07p\x02\x02\u0216\u0217\x07e\x02\x02" +
"\u0217\u0218\x07j\x02\x02\u0218\u0219\x07g\x02\x02\u0219\u021A\x07e\x02" +
"\x02\u021A\u021B\x07m\x02\x02\u021B\u021C\x07g\x02\x02\u021C\u021D\x07" +
"f\x02\x02\u021Dr\x03\x02\x02\x02\u021E\u021F\x07c\x02\x02\u021F\u0220" +
"\x07u\x02\x02\u0220\u0221\x07u\x02\x02\u0221\u0222\x07g\x02\x02\u0222" +
"\u0223\x07o\x02\x02\u0223\u0224\x07d\x02\x02\u0224\u0225\x07n\x02\x02" +
"\u0225\u0226\x07{\x02\x02\u0226t\x03\x02\x02\x02\u0227\u0228\x07f\x02" +
"\x02\u0228\u0229\x07q\x02\x02\u0229v\x03\x02\x02\x02\u022A\u022B\x07t" +
"\x02\x02\u022B\u022C\x07g\x02\x02\u022C\u022D\x07v\x02\x02\u022D\u022E" +
"\x07w\x02\x02\u022E\u022F\x07t\x02\x02\u022F\u0230\x07p\x02\x02\u0230" +
"x\x03\x02\x02\x02\u0231\u0232\x07v\x02\x02\u0232\u0233\x07j\x02\x02\u0233" +
"\u0234\x07t\x02\x02\u0234\u0235\x07q\x02\x02\u0235\u0236\x07y\x02\x02" +
"\u0236z\x03\x02\x02\x02\u0237\u0238\x07g\x02\x02\u0238\u0239\x07o\x02" +
"\x02\u0239\u023A\x07k\x02\x02\u023A\u023B\x07v\x02\x02\u023B|\x03\x02" +
"\x02\x02\u023C\u023D\x07t\x02\x02\u023D\u023E\x07g\x02\x02\u023E\u023F" +
"\x07x\x02\x02\u023F\u0240\x07g\x02\x02\u0240\u0241\x07t\x02\x02\u0241" +
"\u0242\x07v\x02\x02\u0242~\x03\x02\x02\x02\u0243\u0244\x07x\x02\x02\u0244" +
"\u0245\x07c\x02\x02\u0245\u0246\x07t\x02\x02\u0246\x80\x03\x02\x02\x02" +
"\u0247\u0248\x07d\x02\x02\u0248\u0249\x07q\x02\x02\u0249\u024A\x07q\x02" +
"\x02\u024A\u024B\x07n\x02\x02\u024B\x82\x03\x02\x02\x02\u024C\u024D\x07" +
"u\x02\x02\u024D\u024E\x07v\x02\x02\u024E\u024F\x07t\x02\x02\u024F\u0250" +
"\x07k\x02\x02\u0250\u0251\x07p\x02\x02\u0251\u0252\x07i\x02\x02\u0252" +
"\x84\x03\x02\x02\x02\u0253\u0254\x07d\x02\x02\u0254\u0255\x07{\x02\x02" +
"\u0255\u0256\x07v\x02\x02\u0256\u0257\x07g\x02\x02\u0257\x86\x03\x02\x02" +
"\x02\u0258\u0259\x07-\x02\x02\u0259\u025A\x07-\x02\x02\u025A\x88\x03\x02" +
"\x02\x02\u025B\u025C\x07/\x02\x02\u025C\u025D\x07/\x02\x02\u025D\x8A\x03" +
"\x02\x02\x02\u025E\u025F\x07p\x02\x02\u025F\u0260\x07g\x02\x02\u0260\u0261" +
"\x07y\x02\x02\u0261\x8C\x03\x02\x02\x02\u0262\u0263\x07<\x02\x02\u0263" +
"\x8E\x03\x02\x02\x02\u0264\u0265\x07f\x02\x02\u0265\u0266\x07g\x02\x02" +
"\u0266\u0267\x07n\x02\x02\u0267\u0268\x07g\x02\x02\u0268\u0269\x07v\x02" +
"\x02\u0269\u026A\x07g\x02\x02\u026A\x90\x03\x02\x02\x02\u026B\u026C\x07" +
"#\x02\x02\u026C\x92\x03\x02\x02\x02\u026D\u026E\x07,\x02\x02\u026E\u026F" +
"\x07,\x02\x02\u026F\x94\x03\x02\x02\x02\u0270\u0271\x07>\x02\x02\u0271" +
"\u0272\x07>\x02\x02\u0272\x96\x03\x02\x02\x02\u0273\u0274\x07@\x02\x02" +
"\u0274\u0275\x07@\x02\x02\u0275\x98\x03\x02\x02\x02\u0276\u0277\x07(\x02" +
"\x02\u0277\u0278\x07(\x02\x02\u0278\x9A\x03\x02\x02\x02\u0279\u027A\x07" +
"A\x02\x02\u027A\x9C\x03\x02\x02\x02\u027B\u027C\x07~\x02\x02\u027C\u027D" +
"\x07?\x02\x02\u027D\x9E\x03\x02\x02\x02\u027E\u027F\x07`\x02\x02\u027F" +
"\u0280\x07?\x02\x02\u0280\xA0\x03\x02\x02\x02\u0281\u0282\x07(\x02\x02" +
"\u0282\u0283\x07?\x02\x02\u0283\xA2\x03\x02\x02\x02\u0284\u0285\x07>\x02" +
"\x02\u0285\u0286\x07>\x02\x02\u0286\u0287\x07?\x02\x02\u0287\xA4\x03\x02" +
"\x02\x02\u0288\u0289\x07@\x02\x02\u0289\u028A\x07@\x02\x02\u028A\u028B" +
"\x07?\x02\x02\u028B\xA6\x03\x02\x02\x02\u028C\u028D\x07-\x02\x02\u028D" +
"\u028E\x07?\x02\x02\u028E\xA8\x03\x02\x02\x02\u028F\u0290\x07/\x02\x02" +
"\u0290\u0291\x07?\x02\x02\u0291\xAA\x03\x02\x02\x02\u0292\u0293\x07,\x02" +
"\x02\u0293\u0294\x07?\x02\x02\u0294\xAC\x03\x02\x02\x02\u0295\u0296\x07" +
"1\x02\x02\u0296\u0297\x07?\x02\x02\u0297\xAE\x03\x02\x02\x02\u0298\u0299" +
"\x07\'\x02\x02\u0299\u029A\x07?\x02\x02\u029A\xB0\x03\x02\x02\x02\u029B" +
"\u029C\x07n\x02\x02\u029C\u029D\x07g\x02\x02\u029D\u029E\x07v\x02\x02" +
"\u029E\xB2\x03\x02\x02\x02\u029F\u02A0\x07<\x02\x02\u02A0\u02A1\x07?\x02" +
"\x02\u02A1\xB4\x03\x02\x02\x02\u02A2\u02A3\x07?\x02\x02\u02A3\u02A4\x07" +
"<\x02\x02\u02A4\xB6\x03\x02\x02\x02\u02A5\u02A6\x07u\x02\x02\u02A6\u02A7" +
"\x07y\x02\x02\u02A7\u02A8\x07k\x02\x02\u02A8\u02A9\x07v\x02\x02\u02A9" +
"\u02AA\x07e\x02\x02\u02AA\u02AB\x07j\x02\x02\u02AB\xB8\x03\x02\x02\x02" +
"\u02AC\u02AD\x07e\x02\x02\u02AD\u02AE\x07c\x02\x02\u02AE\u02AF\x07u\x02" +
"\x02\u02AF\u02B0\x07g\x02\x02\u02B0\xBA\x03\x02\x02\x02\u02B1\u02B2\x07" +
"f\x02\x02\u02B2\u02B3\x07g\x02\x02\u02B3\u02B4\x07h\x02\x02\u02B4\u02B5" +
"\x07c\x02\x02\u02B5\u02B6\x07w\x02\x02\u02B6\u02B7\x07n\x02\x02\u02B7" +
"\u02B8\x07v\x02\x02\u02B8\xBC\x03\x02\x02\x02\u02B9\u02BA\x07/\x02\x02" +
"\u02BA\u02BB\x07@\x02\x02\u02BB\xBE\x03\x02\x02\x02\u02BC\u02BD\x07e\x02" +
"\x02\u02BD\u02BE\x07c\x02\x02\u02BE\u02BF\x07n\x02\x02\u02BF\u02C0\x07" +
"n\x02\x02\u02C0\u02C1\x07d\x02\x02\u02C1\u02C2\x07c\x02\x02\u02C2\u02C3" +
"\x07e\x02\x02\u02C3\u02C4\x07m\x02\x02\u02C4\xC0\x03\x02\x02\x02\u02C5" +
"\u02C6\x07q\x02\x02\u02C6\u02C7\x07x\x02\x02\u02C7\u02C8\x07g\x02\x02" +
"\u02C8\u02C9\x07t\x02\x02\u02C9\u02CA\x07t\x02\x02\u02CA\u02CB\x07k\x02" +
"\x02\u02CB\u02CC\x07f\x02\x02\u02CC\u02CD\x07g\x02\x02\u02CD\xC2\x03\x02" +
"\x02\x02\u02CE\u02CF\x07k\x02\x02\u02CF\u02D0\x07p\x02\x02\u02D0\u02D1" +
"\x07v\x02\x02\u02D1\u02D3\x03\x02\x02\x02\u02D2\u02D4\x05\xCDg\x02\u02D3" +
"\u02D2\x03\x02\x02\x02\u02D3\u02D4\x03\x02\x02\x02\u02D4\xC4\x03\x02\x02" +
"\x02\u02D5\u02D6\x07w\x02\x02\u02D6\u02D7\x07k\x02\x02\u02D7\u02D8\x07" +
"p\x02\x02\u02D8\u02D9\x07v\x02\x02\u02D9\u02DB\x03\x02\x02\x02\u02DA\u02DC" +
"\x05\xCDg\x02\u02DB\u02DA\x03\x02\x02\x02\u02DB\u02DC\x03\x02\x02\x02" +
"\u02DC\xC6\x03\x02\x02\x02\u02DD\u02DE\x07d\x02\x02\u02DE\u02DF\x07{\x02" +
"\x02\u02DF\u02E0\x07v\x02\x02\u02E0\u02E1\x07g\x02\x02\u02E1\u02E2\x07" +
"u\x02\x02\u02E2\u02E4\x03\x02\x02\x02\u02E3\u02E5\x05\xCFh\x02\u02E4\u02E3" +
"\x03\x02\x02\x02\u02E4\u02E5\x03\x02\x02\x02\u02E5\xC8\x03\x02\x02\x02" +
"\u02E6\u02E7\x07h\x02\x02\u02E7\u02E8\x07k\x02\x02\u02E8\u02E9\x07z\x02" +
"\x02\u02E9\u02EA\x07g\x02\x02\u02EA\u02EB\x07f\x02\x02\u02EB\u02F3\x03" +
"\x02\x02\x02\u02EC\u02ED\x05\xCDg\x02\u02ED\u02EF\x07z\x02\x02\u02EE\u02F0" +
"\t\x02\x02\x02\u02EF\u02EE\x03\x02\x02\x02\u02F0\u02F1\x03\x02\x02\x02" +
"\u02F1\u02EF\x03\x02\x02\x02\u02F1\u02F2\x03\x02\x02\x02\u02F2\u02F4\x03" +
"\x02\x02\x02\u02F3\u02EC\x03\x02\x02\x02\u02F3\u02F4\x03\x02\x02\x02\u02F4" +
"\xCA\x03\x02\x02\x02\u02F5\u02F6\x07w\x02\x02\u02F6\u02F7\x07h\x02\x02" +
"\u02F7\u02F8\x07k\x02\x02\u02F8\u02F9\x07z\x02\x02\u02F9\u02FA\x07g\x02" +
"\x02\u02FA\u02FB\x07f\x02\x02\u02FB\u0303\x03\x02\x02\x02\u02FC\u02FD" +
"\x05\xCDg\x02\u02FD\u02FF\x07z\x02\x02\u02FE\u0300\t\x02\x02\x02\u02FF" +
"\u02FE\x03\x02\x02\x02\u0300\u0301\x03\x02\x02\x02\u0301\u02FF\x03\x02" +
"\x02\x02\u0301\u0302\x03\x02\x02\x02\u0302\u0304\x03\x02\x02\x02\u0303" +
"\u02FC\x03\x02\x02\x02\u0303\u0304\x03\x02\x02\x02\u0304\xCC\x03\x02\x02" +
"\x02\u0305\u0359\x07:\x02\x02\u0306\u0307\x073\x02\x02\u0307\u0359\x07" +
"8\x02\x02\u0308\u0309\x074\x02\x02\u0309\u0359\x076\x02\x02\u030A\u030B" +
"\x075\x02\x02\u030B\u0359\x074\x02\x02\u030C\u030D\x076\x02\x02\u030D" +
"\u0359\x072\x02\x02\u030E\u030F\x076\x02\x02\u030F\u0359\x07:\x02\x02" +
"\u0310\u0311\x077\x02\x02\u0311\u0359\x078\x02\x02\u0312\u0313\x078\x02" +
"\x02\u0313\u0359\x076\x02\x02\u0314\u0315\x079\x02\x02\u0315\u0359\x07" +
"4\x02\x02\u0316\u0317\x07:\x02\x02\u0317\u0359\x072\x02\x02\u0318\u0319" +
"\x07:\x02\x02\u0319\u0359\x07:\x02\x02\u031A\u031B\x07;\x02\x02\u031B" +
"\u0359\x078\x02\x02\u031C\u031D\x073\x02\x02\u031D\u031E\x072\x02\x02" +
"\u031E\u0359\x076\x02\x02\u031F\u0320\x073\x02\x02\u0320\u0321\x073\x02" +
"\x02\u0321\u0359\x074\x02\x02\u0322\u0323\x073\x02\x02\u0323\u0324\x07" +
"4\x02\x02\u0324\u0359\x072\x02\x02\u0325\u0326\x073\x02\x02\u0326\u0327" +
"\x074\x02\x02\u0327\u0359\x07:\x02\x02\u0328\u0329\x073\x02\x02\u0329" +
"\u032A\x075\x02\x02\u032A\u0359\x078\x02\x02\u032B\u032C\x073\x02\x02" +
"\u032C\u032D\x076\x02\x02\u032D\u0359\x076\x02\x02\u032E\u032F\x073\x02" +
"\x02\u032F\u0330\x077\x02\x02\u0330\u0359\x074\x02\x02\u0331\u0332\x07" +
"3\x02\x02\u0332\u0333\x078\x02\x02\u0333\u0359\x072\x02\x02\u0334\u0335" +
"\x073\x02\x02\u0335\u0336\x078\x02\x02\u0336\u0359\x07:\x02\x02\u0337" +
"\u0338\x073\x02\x02\u0338\u0339\x079\x02\x02\u0339\u0359\x078\x02\x02" +
"\u033A\u033B\x073\x02\x02\u033B\u033C\x07:\x02\x02\u033C\u0359\x076\x02" +
"\x02\u033D\u033E\x073\x02\x02\u033E\u033F\x07;\x02\x02\u033F\u0359\x07" +
"4\x02\x02\u0340\u0341\x074\x02\x02\u0341\u0342\x072\x02\x02\u0342\u0359" +
"\x072\x02\x02\u0343\u0344\x074\x02\x02\u0344\u0345\x072\x02\x02\u0345" +
"\u0359\x07:\x02\x02\u0346\u0347\x074\x02\x02\u0347\u0348\x073\x02\x02" +
"\u0348\u0359\x078\x02\x02\u0349\u034A\x074\x02\x02\u034A\u034B\x074\x02" +
"\x02\u034B\u0359\x076\x02\x02\u034C\u034D\x074\x02\x02\u034D\u034E\x07" +
"5\x02\x02\u034E\u0359\x074\x02\x02\u034F\u0350\x074\x02\x02\u0350\u0351" +
"\x076\x02\x02\u0351\u0359\x072\x02\x02\u0352\u0353\x074\x02\x02\u0353" +
"\u0354\x076\x02\x02\u0354\u0359\x07:\x02\x02\u0355\u0356\x074\x02\x02" +
"\u0356\u0357\x077\x02\x02\u0357\u0359\x078\x02\x02\u0358\u0305\x03\x02" +
"\x02\x02\u0358\u0306\x03\x02\x02\x02\u0358\u0308\x03\x02\x02\x02\u0358" +
"\u030A\x03\x02\x02\x02\u0358\u030C\x03\x02\x02\x02\u0358\u030E\x03\x02" +
"\x02\x02\u0358\u0310\x03\x02\x02\x02\u0358\u0312\x03\x02\x02\x02\u0358" +
"\u0314\x03\x02\x02\x02\u0358\u0316\x03\x02\x02\x02\u0358\u0318\x03\x02" +
"\x02\x02\u0358\u031A\x03\x02\x02\x02\u0358\u031C\x03\x02\x02\x02\u0358" +
"\u031F\x03\x02\x02\x02\u0358\u0322\x03\x02\x02\x02\u0358\u0325\x03\x02" +
"\x02\x02\u0358\u0328\x03\x02\x02\x02\u0358\u032B\x03\x02\x02\x02\u0358" +
"\u032E\x03\x02\x02\x02\u0358\u0331\x03\x02\x02\x02\u0358\u0334\x03\x02" +
"\x02\x02\u0358\u0337\x03\x02\x02\x02\u0358\u033A\x03\x02\x02\x02\u0358" +
"\u033D\x03\x02\x02\x02\u0358\u0340\x03\x02\x02\x02\u0358\u0343\x03\x02" +
"\x02\x02\u0358\u0346\x03\x02\x02\x02\u0358\u0349\x03\x02\x02\x02\u0358" +
"\u034C\x03\x02\x02\x02\u0358\u034F\x03\x02\x02\x02\u0358\u0352\x03\x02" +
"\x02\x02\u0358\u0355\x03\x02\x02\x02\u0359\xCE\x03\x02\x02\x02\u035A\u0360" +
"\t\x03\x02\x02\u035B\u035C\t\x04\x02\x02\u035C\u0360\t\x02\x02\x02\u035D" +
"\u035E\x075\x02\x02\u035E\u0360\t\x05\x02\x02\u035F\u035A\x03\x02\x02" +
"\x02\u035F\u035B\x03\x02\x02\x02\u035F\u035D\x03\x02\x02\x02\u0360\xD0" +
"\x03\x02\x02\x02\u0361\u0362\x07v\x02\x02\u0362\u0363\x07t\x02\x02\u0363" +
"\u0364\x07w\x02\x02\u0364\u036B\x07g\x02\x02\u0365\u0366\x07h\x02\x02" +
"\u0366\u0367\x07c\x02\x02\u0367\u0368\x07n\x02\x02\u0368\u0369\x07u\x02" +
"\x02\u0369\u036B\x07g\x02\x02\u036A\u0361\x03\x02\x02\x02\u036A\u0365" +
"\x03\x02\x02\x02\u036B\xD2\x03\x02\x02\x02\u036C\u0373\x05\xD5k\x02\u036D" +
"\u036F\x05\xD5k\x02\u036E\u036D\x03\x02\x02\x02\u036E\u036F\x03\x02\x02" +
"\x02\u036F\u0370\x03\x02\x02\x02\u0370\u0371\x070\x02\x02\u0371\u0373" +
"\x05\xD5k\x02\u0372\u036C\x03\x02\x02\x02\u0372\u036E\x03\x02\x02\x02" +
"\u0373\u0379\x03\x02\x02\x02\u0374\u0376\t\x06\x02\x02\u0375\u0377\x07" +
"/\x02\x02\u0376\u0375\x03\x02\x02\x02\u0376\u0377\x03\x02\x02\x02\u0377" +
"\u0378\x03\x02\x02\x02\u0378\u037A\x05\xD5k\x02\u0379\u0374\x03\x02\x02" +
"\x02\u0379\u037A\x03\x02\x02\x02\u037A\xD4\x03\x02\x02\x02\u037B\u0382" +
"\t\x02\x02\x02\u037C\u037E\x07a\x02\x02\u037D\u037C\x03\x02\x02\x02\u037D" +
"\u037E\x03\x02\x02\x02\u037E\u037F\x03\x02\x02\x02\u037F\u0381\t\x02\x02" +
"\x02\u0380\u037D\x03\x02\x02\x02\u0381\u0384\x03\x02\x02\x02\u0382\u0380" +
"\x03\x02\x02\x02\u0382\u0383\x03\x02\x02\x02\u0383\xD6\x03\x02\x02\x02" +
"\u0384\u0382\x03\x02\x02\x02\u0385\u0386\x072\x02\x02\u0386\u0387\t\x07" +
"\x02\x02\u0387\u0388\x05\xD9m\x02\u0388\xD8\x03\x02\x02\x02\u0389\u0390" +
"\x05\xDFp\x02\u038A\u038C\x07a\x02\x02\u038B\u038A\x03\x02\x02\x02\u038B" +
"\u038C\x03\x02\x02\x02\u038C\u038D\x03\x02\x02\x02\u038D\u038F\x05\xDF" +
"p\x02\u038E\u038B\x03\x02\x02\x02\u038F\u0392\x03\x02\x02\x02\u0390\u038E" +
"\x03\x02\x02\x02\u0390\u0391\x03\x02\x02\x02\u0391\xDA\x03\x02\x02\x02" +
"\u0392\u0390\x03\x02\x02\x02\u0393\u0394\x07y\x02\x02\u0394\u0395\x07" +
"g\x02\x02\u0395\u03CC\x07k\x02\x02\u0396\u0397\x07i\x02\x02\u0397\u0398" +
"\x07y\x02\x02\u0398\u0399\x07g\x02\x02\u0399\u03CC\x07k\x02\x02\u039A" +
"\u039B\x07u\x02\x02\u039B\u039C\x07|\x02\x02\u039C\u039D\x07c\x02\x02" +
"\u039D\u039E\x07d\x02\x02\u039E\u03CC\x07q\x02\x02\u039F\u03A0\x07h\x02" +
"\x02\u03A0\u03A1\x07k\x02\x02\u03A1\u03A2\x07p\x02\x02\u03A2\u03A3\x07" +
"p\x02\x02\u03A3\u03A4\x07g\x02\x02\u03A4\u03CC\x07{\x02\x02\u03A5\u03A6" +
"\x07g\x02\x02\u03A6\u03A7\x07v\x02\x02\u03A7\u03A8\x07j\x02\x02\u03A8" +
"\u03A9\x07g\x02\x02\u03A9\u03CC\x07t\x02\x02\u03AA\u03AB\x07u\x02\x02" +
"\u03AB\u03AC\x07g\x02\x02\u03AC\u03AD\x07e\x02\x02\u03AD\u03AE\x07q\x02" +
"\x02\u03AE\u03AF\x07p\x02\x02\u03AF\u03B0\x07f\x02\x02\u03B0\u03CC\x07" +
"u\x02\x02\u03B1\u03B2\x07o\x02\x02\u03B2\u03B3\x07k\x02\x02\u03B3\u03B4" +
"\x07p\x02\x02\u03B4\u03B5\x07w\x02\x02\u03B5\u03B6\x07v\x02\x02\u03B6" +
"\u03B7\x07g\x02\x02\u03B7\u03CC\x07u\x02\x02\u03B8\u03B9\x07j\x02\x02" +
"\u03B9\u03BA\x07q\x02\x02\u03BA\u03BB\x07w\x02\x02\u03BB\u03BC\x07t\x02" +
"\x02\u03BC\u03CC\x07u\x02\x02\u03BD\u03BE\x07f\x02\x02\u03BE\u03BF\x07" +
"c\x02\x02\u03BF\u03C0\x07{\x02\x02\u03C0\u03CC\x07u\x02\x02\u03C1\u03C2" +
"\x07y\x02\x02\u03C2\u03C3\x07g\x02\x02\u03C3\u03C4\x07g\x02\x02\u03C4" +
"\u03C5\x07m\x02\x02\u03C5\u03CC\x07u\x02\x02\u03C6\u03C7\x07{\x02\x02" +
"\u03C7\u03C8\x07g\x02\x02\u03C8\u03C9\x07c\x02\x02\u03C9\u03CA\x07t\x02" +
"\x02\u03CA\u03CC\x07u\x02\x02\u03CB\u0393\x03\x02\x02\x02\u03CB\u0396" +
"\x03\x02\x02\x02\u03CB\u039A\x03\x02\x02\x02\u03CB\u039F\x03\x02\x02\x02" +
"\u03CB\u03A5\x03\x02\x02\x02\u03CB\u03AA\x03\x02\x02\x02\u03CB\u03B1\x03" +
"\x02\x02\x02\u03CB\u03B8\x03\x02\x02\x02\u03CB\u03BD\x03\x02\x02\x02\u03CB" +
"\u03C1\x03\x02\x02\x02\u03CB\u03C6\x03\x02\x02\x02\u03CC\xDC\x03\x02\x02" +
"\x02\u03CD\u03CE\x07j\x02\x02\u03CE\u03CF\x07g\x02\x02\u03CF\u03D0\x07" +
"z\x02\x02\u03D0\u03DB\x03\x02\x02\x02\u03D1\u03D3\x07$\x02\x02\u03D2\u03D4" +
"\x05\xD9m\x02\u03D3\u03D2\x03\x02\x02\x02\u03D3\u03D4\x03\x02\x02\x02" +
"\u03D4\u03D5\x03\x02\x02\x02\u03D5\u03DC\x07$\x02\x02\u03D6\u03D8\x07" +
")\x02\x02\u03D7\u03D9\x05\xD9m\x02\u03D8\u03D7\x03\x02\x02\x02\u03D8\u03D9" +
"\x03\x02\x02\x02\u03D9\u03DA\x03\x02\x02\x02\u03DA\u03DC\x07)\x02\x02" +
"\u03DB\u03D1\x03\x02\x02\x02\u03DB\u03D6\x03\x02\x02\x02\u03DC\xDE\x03" +
"\x02\x02\x02\u03DD\u03DE\t\b\x02\x02\u03DE\xE0\x03\x02\x02\x02\u03DF\u03E0" +
"\x07c\x02\x02\u03E0\u03E1\x07d\x02\x02\u03E1\u03E2\x07u\x02\x02\u03E2" +
"\u03E3\x07v\x02\x02\u03E3\u03E4\x07t\x02\x02\u03E4\u03E5\x07c\x02\x02" +
"\u03E5\u03E6\x07e\x02\x02\u03E6\u0438\x07v\x02\x02\u03E7\u03E8\x07c\x02" +
"\x02\u03E8\u03E9\x07h\x02\x02\u03E9\u03EA\x07v\x02\x02\u03EA\u03EB\x07" +
"g\x02\x02\u03EB\u0438\x07t\x02\x02\u03EC\u03ED\x07e\x02\x02\u03ED\u03EE" +
"\x07c\x02\x02\u03EE\u03EF\x07u\x02\x02\u03EF\u0438\x07g\x02\x02\u03F0" +
"\u03F1\x07e\x02\x02\u03F1\u03F2\x07c\x02\x02\u03F2\u03F3\x07v\x02\x02" +
"\u03F3\u03F4\x07e\x02\x02\u03F4\u0438\x07j\x02\x02\u03F5\u03F6\x07f\x02" +
"\x02\u03F6\u03F7\x07g\x02\x02\u03F7\u03F8\x07h\x02\x02\u03F8\u03F9\x07" +
"c\x02\x02\u03F9\u03FA\x07w\x02\x02\u03FA\u03FB\x07n\x02\x02\u03FB\u0438" +
"\x07v\x02\x02\u03FC\u03FD\x07h\x02\x02\u03FD\u03FE\x07k\x02\x02\u03FE" +
"\u03FF\x07p\x02\x02\u03FF\u0400\x07c\x02\x02\u0400\u0438\x07n\x02\x02" +
"\u0401\u0402\x07k\x02\x02\u0402\u0438\x07p\x02\x02\u0403\u0404\x07k\x02" +
"\x02\u0404\u0405\x07p\x02\x02\u0405\u0406\x07n\x02\x02\u0406\u0407\x07" +
"k\x02\x02\u0407\u0408\x07p\x02\x02\u0408\u0438\x07g\x02\x02\u0409\u040A" +
"\x07n\x02\x02\u040A\u040B\x07g\x02\x02\u040B\u0438\x07v\x02\x02\u040C" +
"\u040D\x07o\x02\x02\u040D\u040E\x07c\x02\x02\u040E\u040F\x07v\x02\x02" +
"\u040F\u0410\x07e\x02\x02\u0410\u0438\x07j\x02\x02\u0411\u0412\x07p\x02" +
"\x02\u0412\u0413\x07w\x02\x02\u0413\u0414\x07n\x02\x02\u0414\u0438\x07" +
"n\x02\x02\u0415\u0416\x07q\x02\x02\u0416\u0438\x07h\x02\x02\u0417\u0418" +
"\x07t\x02\x02\u0418\u0419\x07g\x02\x02\u0419\u041A\x07n\x02\x02\u041A" +
"\u041B\x07q\x02\x02\u041B\u041C\x07e\x02\x02\u041C\u041D\x07c\x02\x02" +
"\u041D\u041E\x07v\x02\x02\u041E\u041F\x07c\x02\x02\u041F\u0420\x07d\x02" +
"\x02\u0420\u0421\x07n\x02\x02\u0421\u0438\x07g\x02\x02\u0422\u0423\x07" +
"u\x02\x02\u0423\u0424\x07v\x02\x02\u0424\u0425\x07c\x02\x02\u0425\u0426" +
"\x07v\x02\x02\u0426\u0427\x07k\x02\x02\u0427\u0438\x07e\x02\x02\u0428" +
"\u0429\x07u\x02\x02\u0429\u042A\x07y\x02\x02\u042A\u042B\x07k\x02\x02" +
"\u042B\u042C\x07v\x02\x02\u042C\u042D\x07e\x02\x02\u042D\u0438\x07j\x02" +
"\x02\u042E\u042F\x07v\x02\x02\u042F\u0430\x07t\x02\x02\u0430\u0438\x07" +
"{\x02\x02";
private static readonly _serializedATNSegment2: string =
"\u0431\u0432\x07v\x02\x02\u0432\u0433\x07{\x02\x02\u0433\u0434\x07r\x02" +
"\x02\u0434\u0435\x07g\x02\x02\u0435\u0436\x07q\x02\x02\u0436\u0438\x07" +
"h\x02\x02\u0437\u03DF\x03\x02\x02\x02\u0437\u03E7\x03\x02\x02\x02\u0437" +
"\u03EC\x03\x02\x02\x02\u0437\u03F0\x03\x02\x02\x02\u0437\u03F5\x03\x02" +
"\x02\x02\u0437\u03FC\x03\x02\x02\x02\u0437\u0401\x03\x02\x02\x02\u0437" +
"\u0403\x03\x02\x02\x02\u0437\u0409\x03\x02\x02\x02\u0437\u040C\x03\x02" +
"\x02\x02\u0437\u0411\x03\x02\x02\x02\u0437\u0415\x03\x02\x02\x02\u0437" +
"\u0417\x03\x02\x02\x02\u0437\u0422\x03\x02\x02\x02\u0437\u0428\x03\x02" +
"\x02\x02\u0437\u042E\x03\x02\x02\x02\u0437\u0431\x03\x02\x02\x02\u0438" +
"\xE2\x03\x02\x02\x02\u0439\u043A\x07c\x02\x02\u043A\u043B\x07p\x02\x02" +
"\u043B\u043C\x07q\x02\x02\u043C\u043D\x07p\x02\x02\u043D\u043E\x07{\x02" +
"\x02\u043E\u043F\x07o\x02\x02\u043F\u0440\x07q\x02\x02\u0440\u0441\x07" +
"w\x02\x02\u0441\u0442\x07u\x02\x02\u0442\xE4\x03\x02\x02\x02\u0443\u0444" +
"\x07d\x02\x02\u0444\u0445\x07t\x02\x02\u0445\u0446\x07g\x02\x02\u0446" +
"\u0447\x07c\x02\x02\u0447\u0448\x07m\x02\x02\u0448\xE6\x03\x02\x02\x02" +
"\u0449\u044A\x07e\x02\x02\u044A\u044B\x07q\x02\x02\u044B\u044C\x07p\x02" +
"\x02\u044C\u044D\x07u\x02\x02\u044D\u044E\x07v\x02\x02\u044E\u044F\x07" +
"c\x02\x02\u044F\u0450\x07p\x02\x02\u0450\u0451\x07v\x02\x02\u0451\xE8" +
"\x03\x02\x02\x02\u0452\u0453\x07k\x02\x02\u0453\u0454\x07o\x02\x02\u0454" +
"\u0455\x07o\x02\x02\u0455\u0456\x07w\x02\x02\u0456\u0457\x07v\x02\x02" +
"\u0457\u0458\x07c\x02\x02\u0458\u0459\x07d\x02\x02\u0459\u045A\x07n\x02" +
"\x02\u045A\u045B\x07g\x02\x02\u045B\xEA\x03\x02\x02\x02\u045C\u045D\x07" +
"e\x02\x02\u045D\u045E\x07q\x02\x02\u045E\u045F\x07p\x02\x02\u045F\u0460" +
"\x07v\x02\x02\u0460\u0461\x07k\x02\x02\u0461\u0462\x07p\x02\x02\u0462" +
"\u0463\x07w\x02\x02\u0463\u0464\x07g\x02\x02\u0464\xEC\x03\x02\x02\x02" +
"\u0465\u0466\x07n\x02\x02\u0466\u0467\x07g\x02\x02\u0467\u0468\x07c\x02" +
"\x02\u0468\u0469\x07x\x02\x02\u0469\u046A\x07g\x02\x02\u046A\xEE\x03\x02" +
"\x02\x02\u046B\u046C\x07g\x02\x02\u046C\u046D\x07z\x02\x02\u046D\u046E" +
"\x07v\x02\x02\u046E\u046F\x07g\x02\x02\u046F\u0470\x07t\x02\x02\u0470" +
"\u0471\x07p\x02\x02\u0471\u0472\x07c\x02\x02\u0472\u0473\x07n\x02\x02" +
"\u0473\xF0\x03\x02\x02\x02\u0474\u0475\x07k\x02\x02\u0475\u0476\x07p\x02" +
"\x02\u0476\u0477\x07f\x02\x02\u0477\u0478\x07g\x02\x02\u0478\u0479\x07" +
"z\x02\x02\u0479\u047A\x07g\x02\x02\u047A\u047B\x07f\x02\x02\u047B\xF2" +
"\x03\x02\x02\x02\u047C\u047D\x07k\x02\x02\u047D\u047E\x07p\x02\x02\u047E" +
"\u047F\x07v\x02\x02\u047F\u0480\x07g\x02\x02\u0480\u0481\x07t\x02\x02" +
"\u0481\u0482\x07p\x02\x02\u0482\u0483\x07c\x02\x02\u0483\u0484\x07n\x02" +
"\x02\u0484\xF4\x03\x02\x02\x02\u0485\u0486\x07r\x02\x02\u0486\u0487\x07" +
"c\x02\x02\u0487\u0488\x07{\x02\x02\u0488\u0489\x07c\x02\x02\u0489\u048A" +
"\x07d\x02\x02\u048A\u048B\x07n\x02\x02\u048B\u048C\x07g\x02\x02\u048C" +
"\xF6\x03\x02\x02\x02\u048D\u048E\x07r\x02\x02\u048E\u048F\x07t\x02\x02" +
"\u048F\u0490\x07k\x02\x02\u0490\u0491\x07x\x02\x02\u0491\u0492\x07c\x02" +
"\x02\u0492\u0493\x07v\x02\x02\u0493\u0494\x07g\x02\x02\u0494\xF8\x03\x02" +
"\x02\x02\u0495\u0496\x07r\x02\x02\u0496\u0497\x07w\x02\x02\u0497\u0498" +
"\x07d\x02\x02\u0498\u0499\x07n\x02\x02\u0499\u049A\x07k\x02\x02\u049A" +
"\u049B\x07e\x02\x02\u049B\xFA\x03\x02\x02\x02\u049C\u049D\x07x\x02\x02" +
"\u049D\u049E\x07k\x02\x02\u049E\u049F\x07t\x02\x02\u049F\u04A0\x07v\x02" +
"\x02\u04A0\u04A1\x07w\x02\x02\u04A1\u04A2\x07c\x02\x02\u04A2\u04A3\x07" +
"n\x02\x02\u04A3\xFC\x03\x02\x02\x02\u04A4\u04A5\x07r\x02\x02\u04A5\u04A6" +
"\x07w\x02\x02\u04A6\u04A7\x07t\x02\x02\u04A7\u04A8\x07g\x02\x02\u04A8" +
"\xFE\x03\x02\x02\x02\u04A9\u04AA\x07v\x02\x02\u04AA\u04AB\x07{\x02\x02" +
"\u04AB\u04AC\x07r\x02\x02\u04AC\u04AD\x07g\x02\x02\u04AD\u0100\x03\x02" +
"\x02\x02\u04AE\u04AF\x07x\x02\x02\u04AF\u04B0\x07k\x02\x02\u04B0\u04B1" +
"\x07g\x02\x02\u04B1\u04B2\x07y\x02\x02\u04B2\u0102\x03\x02\x02\x02\u04B3" +
"\u04B4\x07i\x02\x02\u04B4\u04B5\x07n\x02\x02\u04B5\u04B6\x07q\x02\x02" +
"\u04B6\u04B7\x07d\x02\x02\u04B7\u04B8\x07c\x02\x02\u04B8\u04B9\x07n\x02" +
"\x02\u04B9\u0104\x03\x02\x02\x02\u04BA\u04BB\x07e\x02\x02\u04BB\u04BC" +
"\x07q\x02\x02\u04BC\u04BD\x07p\x02\x02\u04BD\u04BE\x07u\x02\x02\u04BE" +
"\u04BF\x07v\x02\x02\u04BF\u04C0\x07t\x02\x02\u04C0\u04C1\x07w\x02\x02" +
"\u04C1\u04C2\x07e\x02\x02\u04C2\u04C3\x07v\x02\x02\u04C3\u04C4\x07q\x02" +
"\x02\u04C4\u04C5\x07t\x02\x02\u04C5\u0106\x03\x02\x02\x02\u04C6\u04C7" +
"\x07h\x02\x02\u04C7\u04C8\x07c\x02\x02\u04C8\u04C9\x07n\x02\x02\u04C9" +
"\u04CA\x07n\x02\x02\u04CA\u04CB\x07d\x02\x02\u04CB\u04CC\x07c\x02\x02" +
"\u04CC\u04CD\x07e\x02\x02\u04CD\u04CE\x07m\x02\x02\u04CE\u0108\x03\x02" +
"\x02\x02\u04CF\u04D0\x07t\x02\x02\u04D0\u04D1\x07g\x02\x02\u04D1\u04D2" +
"\x07e\x02\x02\u04D2\u04D3\x07g\x02\x02\u04D3\u04D4\x07k\x02\x02\u04D4" +
"\u04D5\x07x\x02\x02\u04D5\u04D6\x07g\x02\x02\u04D6\u010A\x03\x02\x02\x02" +
"\u04D7\u04DB\x05\u010D\x87\x02\u04D8\u04DA\x05\u010F\x88\x02\u04D9\u04D8" +
"\x03\x02\x02\x02\u04DA\u04DD\x03\x02\x02\x02\u04DB\u04D9\x03\x02\x02\x02" +
"\u04DB\u04DC\x03\x02\x02\x02\u04DC\u010C\x03\x02\x02\x02\u04DD\u04DB\x03" +
"\x02\x02\x02\u04DE\u04DF\t\t\x02\x02\u04DF\u010E\x03\x02\x02\x02\u04E0" +
"\u04E1\t\n\x02\x02\u04E1\u0110\x03\x02\x02\x02\u04E2\u04E3\x07w\x02\x02" +
"\u04E3\u04E4\x07p\x02\x02\u04E4\u04E5\x07k\x02\x02\u04E5\u04E6\x07e\x02" +
"\x02\u04E6\u04E7\x07q\x02\x02\u04E7\u04E8\x07f\x02\x02\u04E8\u04EA\x07" +
"g\x02\x02\u04E9\u04E2\x03\x02\x02\x02\u04E9\u04EA\x03\x02\x02\x02\u04EA" +
"\u04FB\x03\x02\x02\x02\u04EB\u04EF\x07$\x02\x02\u04EC\u04EE\x05\u0113" +
"\x8A\x02\u04ED\u04EC\x03\x02\x02\x02\u04EE\u04F1\x03\x02\x02\x02\u04EF" +
"\u04ED\x03\x02\x02\x02\u04EF\u04F0\x03\x02\x02\x02\u04F0\u04F2\x03\x02" +
"\x02\x02\u04F1\u04EF\x03\x02\x02\x02\u04F2\u04FC\x07$\x02\x02\u04F3\u04F7" +
"\x07)\x02\x02\u04F4\u04F6\x05\u0115\x8B\x02\u04F5\u04F4\x03\x02\x02\x02" +
"\u04F6\u04F9\x03\x02\x02\x02\u04F7\u04F5\x03\x02\x02\x02\u04F7\u04F8\x03" +
"\x02\x02\x02\u04F8\u04FA\x03\x02\x02\x02\u04F9\u04F7\x03\x02\x02\x02\u04FA" +
"\u04FC\x07)\x02\x02\u04FB\u04EB\x03\x02\x02\x02\u04FB\u04F3\x03\x02\x02" +
"\x02\u04FC\u0112\x03\x02\x02\x02\u04FD\u0501\n\v\x02\x02\u04FE\u04FF\x07" +
"^\x02\x02\u04FF\u0501\v\x02\x02\x02\u0500\u04FD\x03\x02\x02\x02\u0500" +
"\u04FE\x03\x02\x02\x02\u0501\u0114\x03\x02\x02\x02\u0502\u0506\n\f\x02" +
"\x02\u0503\u0504\x07^\x02\x02\u0504\u0506\v\x02\x02\x02\u0505\u0502\x03" +
"\x02\x02\x02\u0505\u0503\x03\x02\x02\x02\u0506\u0116\x03\x02\x02\x02\u0507" +
"\u0509\t\x02\x02\x02\u0508\u0507\x03\x02\x02\x02\u0509\u050A\x03\x02\x02" +
"\x02\u050A\u0508\x03\x02\x02\x02\u050A\u050B\x03\x02\x02\x02\u050B\u050C" +
"\x03\x02\x02\x02\u050C\u050E\x070\x02\x02\u050D\u050F\t\x02\x02\x02\u050E" +
"\u050D\x03\x02\x02\x02\u050F\u0510\x03\x02\x02\x02\u0510\u050E\x03\x02" +
"\x02\x02\u0510\u0511\x03\x02\x02\x02\u0511\u0518\x03\x02\x02\x02\u0512" +
"\u0514\x070\x02\x02\u0513\u0515\t\x02\x02\x02\u0514\u0513\x03\x02\x02" +
"\x02\u0515\u0516\x03\x02\x02\x02\u0516\u0514\x03\x02\x02\x02\u0516\u0517" +
"\x03\x02\x02\x02\u0517\u0519\x03\x02\x02\x02\u0518\u0512\x03\x02\x02\x02" +
"\u0518\u0519\x03\x02\x02\x02\u0519\u0118\x03\x02\x02\x02\u051A\u051C\t" +
"\r\x02\x02\u051B\u051A\x03\x02\x02\x02\u051C\u051D\x03\x02\x02\x02\u051D" +
"\u051B\x03\x02\x02\x02\u051D\u051E\x03\x02\x02\x02\u051E\u051F\x03\x02" +
"\x02\x02\u051F\u0520\b\x8D\x02\x02\u0520\u011A\x03\x02\x02\x02\u0521\u0522" +
"\x071\x02\x02\u0522\u0523\x07,\x02\x02\u0523\u0527\x03\x02\x02\x02\u0524" +
"\u0526\v\x02\x02\x02\u0525\u0524\x03\x02\x02\x02\u0526\u0529\x03\x02\x02" +
"\x02\u0527\u0528\x03\x02\x02\x02\u0527\u0525\x03\x02\x02\x02\u0528\u052A" +
"\x03\x02\x02\x02\u0529\u0527\x03\x02\x02\x02\u052A\u052B\x07,\x02\x02" +
"\u052B\u052C\x071\x02\x02\u052C\u052D\x03\x02\x02\x02\u052D\u052E\b\x8E" +
"\x03\x02\u052E\u011C\x03\x02\x02\x02\u052F\u0530\x071\x02\x02\u0530\u0531" +
"\x071\x02\x02\u0531\u0535\x03\x02\x02\x02\u0532\u0534\n\x0E\x02\x02\u0533" +
"\u0532\x03\x02\x02\x02\u0534\u0537\x03\x02\x02\x02\u0535\u0533\x03\x02" +
"\x02\x02\u0535\u0536\x03\x02\x02\x02\u0536\u0538\x03\x02\x02\x02\u0537" +
"\u0535\x03\x02\x02\x02\u0538\u0539\b\x8F\x03\x02\u0539\u011E\x03\x02\x02" +
"\x02(\x02\u02D3\u02DB\u02E4\u02F1\u02F3\u0301\u0303\u0358\u035F\u036A" +
"\u036E\u0372\u0376\u0379\u037D\u0382\u038B\u0390\u03CB\u03D3\u03D8\u03DB" +
"\u0437\u04DB\u04E9\u04EF\u04F7\u04FB\u0500\u0505\u050A\u0510\u0516\u0518" +
"\u051D\u0527\u0535\x04\b\x02\x02\x02\x03\x02";
public static readonly _serializedATN: string = Utils.join(
[
SolidityLexer._serializedATNSegment0,
SolidityLexer._serializedATNSegment1,
SolidityLexer._serializedATNSegment2,
],
"",
);
public static __ATN: ATN;
public static readonly _serializedATN: number[] = [4,0,133,1336,6,-1,2,
0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6,7,6,2,7,7,7,2,8,7,8,2,
9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,2,13,7,13,2,14,7,14,2,15,7,15,2,16,
7,16,2,17,7,17,2,18,7,18,2,19,7,19,2,20,7,20,2,21,7,21,2,22,7,22,2,23,7,
23,2,24,7,24,2,25,7,25,2,26,7,26,2,27,7,27,2,28,7,28,2,29,7,29,2,30,7,30,
2,31,7,31,2,32,7,32,2,33,7,33,2,34,7,34,2,35,7,35,2,36,7,36,2,37,7,37,2,
38,7,38,2,39,7,39,2,40,7,40,2,41,7,41,2,42,7,42,2,43,7,43,2,44,7,44,2,45,
7,45,2,46,7,46,2,47,7,47,2,48,7,48,2,49,7,49,2,50,7,50,2,51,7,51,2,52,7,
52,2,53,7,53,2,54,7,54,2,55,7,55,2,56,7,56,2,57,7,57,2,58,7,58,2,59,7,59,
2,60,7,60,2,61,7,61,2,62,7,62,2,63,7,63,2,64,7,64,2,65,7,65,2,66,7,66,2,
67,7,67,2,68,7,68,2,69,7,69,2,70,7,70,2,71,7,71,2,72,7,72,2,73,7,73,2,74,
7,74,2,75,7,75,2,76,7,76,2,77,7,77,2,78,7,78,2,79,7,79,2,80,7,80,2,81,7,
81,2,82,7,82,2,83,7,83,2,84,7,84,2,85,7,85,2,86,7,86,2,87,7,87,2,88,7,88,
2,89,7,89,2,90,7,90,2,91,7,91,2,92,7,92,2,93,7,93,2,94,7,94,2,95,7,95,2,
96,7,96,2,97,7,97,2,98,7,98,2,99,7,99,2,100,7,100,2,101,7,101,2,102,7,102,
2,103,7,103,2,104,7,104,2,105,7,105,2,106,7,106,2,107,7,107,2,108,7,108,
2,109,7,109,2,110,7,110,2,111,7,111,2,112,7,112,2,113,7,113,2,114,7,114,
2,115,7,115,2,116,7,116,2,117,7,117,2,118,7,118,2,119,7,119,2,120,7,120,
2,121,7,121,2,122,7,122,2,123,7,123,2,124,7,124,2,125,7,125,2,126,7,126,
2,127,7,127,2,128,7,128,2,129,7,129,2,130,7,130,2,131,7,131,2,132,7,132,
2,133,7,133,2,134,7,134,2,135,7,135,2,136,7,136,2,137,7,137,2,138,7,138,
2,139,7,139,2,140,7,140,2,141,7,141,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,1,1,
1,2,1,2,1,3,1,3,1,3,1,4,1,4,1,5,1,5,1,6,1,6,1,6,1,7,1,7,1,8,1,8,1,9,1,9,
1,9,1,10,1,10,1,11,1,11,1,11,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,13,1,
13,1,13,1,13,1,13,1,14,1,14,1,15,1,15,1,16,1,16,1,17,1,17,1,17,1,17,1,17,
1,17,1,17,1,17,1,17,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,19,1,
19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,20,1,20,1,20,1,20,1,20,1,20,
1,20,1,20,1,21,1,21,1,21,1,22,1,22,1,23,1,23,1,24,1,24,1,24,1,24,1,24,1,
24,1,25,1,25,1,25,1,25,1,25,1,25,1,26,1,26,1,26,1,26,1,27,1,27,1,28,1,28,
1,29,1,29,1,30,1,30,1,31,1,31,1,32,1,32,1,33,1,33,1,33,1,34,1,34,1,34,1,
35,1,35,1,35,1,35,1,35,1,35,1,35,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,
1,36,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,38,1,38,1,38,1,38,1,
38,1,38,1,38,1,38,1,39,1,39,1,39,1,39,1,39,1,39,1,40,1,40,1,40,1,40,1,40,
1,41,1,41,1,42,1,42,1,43,1,43,1,43,1,43,1,43,1,43,1,43,1,43,1,44,1,44,1,
45,1,45,1,45,1,45,1,45,1,45,1,45,1,45,1,46,1,46,1,46,1,47,1,47,1,47,1,47,
1,47,1,47,1,47,1,48,1,48,1,48,1,48,1,48,1,48,1,48,1,48,1,49,1,49,1,49,1,
49,1,49,1,49,1,49,1,49,1,49,1,50,1,50,1,50,1,51,1,51,1,51,1,51,1,51,1,52,
1,52,1,52,1,52,1,53,1,53,1,53,1,53,1,53,1,53,1,54,1,54,1,54,1,54,1,54,1,
54,1,55,1,55,1,55,1,55,1,55,1,55,1,55,1,55,1,55,1,55,1,56,1,56,1,56,1,56,
1,56,1,56,1,56,1,56,1,56,1,57,1,57,1,57,1,58,1,58,1,58,1,58,1,58,1,58,1,
58,1,59,1,59,1,59,1,59,1,59,1,59,1,60,1,60,1,60,1,60,1,60,1,61,1,61,1,61,
1,61,1,61,1,61,1,61,1,62,1,62,1,62,1,62,1,63,1,63,1,63,1,63,1,63,1,64,1,
64,1,64,1,64,1,64,1,64,1,64,1,65,1,65,1,65,1,65,1,65,1,66,1,66,1,66,1,67,
1,67,1,67,1,68,1,68,1,68,1,68,1,69,1,69,1,70,1,70,1,70,1,70,1,70,1,70,1,
70,1,71,1,71,1,72,1,72,1,72,1,73,1,73,1,73,1,74,1,74,1,74,1,75,1,75,1,75,
1,76,1,76,1,77,1,77,1,77,1,78,1,78,1,78,1,79,1,79,1,79,1,80,1,80,1,80,1,
80,1,81,1,81,1,81,1,81,1,82,1,82,1,82,1,83,1,83,1,83,1,84,1,84,1,84,1,85,
1,85,1,85,1,86,1,86,1,86,1,87,1,87,1,87,1,87,1,88,1,88,1,88,1,89,1,89,1,
89,1,90,1,90,1,90,1,90,1,90,1,90,1,90,1,91,1,91,1,91,1,91,1,91,1,92,1,92,
1,92,1,92,1,92,1,92,1,92,1,92,1,93,1,93,1,93,1,94,1,94,1,94,1,94,1,94,1,
94,1,94,1,94,1,94,1,95,1,95,1,95,1,95,1,95,1,95,1,95,1,95,1,95,1,96,1,96,
1,96,1,96,1,96,3,96,722,8,96,1,97,1,97,1,97,1,97,1,97,1,97,3,97,730,8,97,
1,98,1,98,1,98,1,98,1,98,1,98,1,98,3,98,739,8,98,1,99,1,99,1,99,1,99,1,
99,1,99,1,99,1,99,1,99,4,99,750,8,99,11,99,12,99,751,3,99,754,8,99,1,100,
1,100,1,100,1,100,1,100,1,100,1,100,1,100,1,100,1,100,4,100,766,8,100,11,
100,12,100,767,3,100,770,8,100,1,101,1,101,1,101,1,101,1,101,1,101,1,101,
1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,101,
1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,101,
1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,101,
1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,101,
1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,101,
1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,101,
1,101,1,101,1,101,1,101,3,101,855,8,101,1,102,1,102,1,102,1,102,1,102,3,
102,862,8,102,1,103,1,103,1,103,1,103,1,103,1,103,1,103,1,103,1,103,3,103,
873,8,103,1,104,1,104,3,104,877,8,104,1,104,1,104,3,104,881,8,104,1,104,
1,104,3,104,885,8,104,1,104,3,104,888,8,104,1,105,1,105,3,105,892,8,105,
1,105,5,105,895,8,105,10,105,12,105,898,9,105,1,106,1,106,1,106,1,106,1,
107,1,107,3,107,906,8,107,1,107,5,107,909,8,107,10,107,12,107,912,9,107,
1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,108,
1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,108,
1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,108,
1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,108,
1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,108,3,108,970,8,108,1,109,1,
109,1,109,1,109,1,109,1,109,3,109,978,8,109,1,109,1,109,1,109,3,109,983,
8,109,1,109,3,109,986,8,109,1,110,1,110,1,111,1,111,1,111,1,111,1,111,1,
111,1,111,1,111,1,111,1,111,1,111,1,111,1,111,1,111,1,111,1,111,1,111,1,
111,1,111,1,111,1,111,1,111,1,111,1,111,1,111,1,111,1,111,1,111,1,111,1,
111,1,111,1,111,1,111,1,111,1,111,1,111,1,111,1,111,1,111,1,111,1,111,1,
111,1,111,1,111,1,111,1,111,1,111,1,111,1,111,1,111,1,111,1,111,1,111,1,
111,1,111,1,111,1,111,1,111,1,111,1,111,1,111,1,111,1,111,1,111,1,111,1,
111,1,111,1,111,1,111,1,111,1,111,1,111,1,111,1,111,1,111,1,111,1,111,1,
111,1,111,1,111,1,111,1,111,1,111,1,111,1,111,1,111,1,111,1,111,3,111,1078,
8,111,1,112,1,112,1,112,1,112,1,112,1,112,1,112,1,112,1,112,1,112,1,113,
1,113,1,113,1,113,1,113,1,113,1,114,1,114,1,114,1,114,1,114,1,114,1,114,
1,114,1,114,1,115,1,115,1,115,1,115,1,115,1,115,1,115,1,115,1,115,1,115,
1,116,1,116,1,116,1,116,1,116,1,116,1,116,1,116,1,116,1,117,1,117,1,117,
1,117,1,117,1,117,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,
1,119,1,119,1,119,1,119,1,119,1,119,1,119,1,119,1,120,1,120,1,120,1,120,
1,120,1,120,1,120,1,120,1,120,1,121,1,121,1,121,1,121,1,121,1,121,1,121,
1,121,1,122,1,122,1,122,1,122,1,122,1,122,1,122,1,122,1,123,1,123,1,123,
1,123,1,123,1,123,1,123,1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,124,
1,125,1,125,1,125,1,125,1,125,1,126,1,126,1,126,1,126,1,126,1,127,1,127,
1,127,1,127,1,127,1,128,1,128,1,128,1,128,1,128,1,128,1,128,1,129,1,129,
1,129,1,129,1,129,1,129,1,129,1,129,1,129,1,129,1,129,1,129,1,130,1,130,
1,130,1,130,1,130,1,130,1,130,1,130,1,130,1,131,1,131,1,131,1,131,1,131,
1,131,1,131,1,131,1,132,1,132,5,132,1240,8,132,10,132,12,132,1243,9,132,
1,133,1,133,1,134,1,134,1,135,1,135,1,135,1,135,1,135,1,135,1,135,3,135,
1256,8,135,1,135,1,135,5,135,1260,8,135,10,135,12,135,1263,9,135,1,135,
1,135,1,135,5,135,1268,8,135,10,135,12,135,1271,9,135,1,135,3,135,1274,
8,135,1,136,1,136,1,136,3,136,1279,8,136,1,137,1,137,1,137,3,137,1284,8,
137,1,138,4,138,1287,8,138,11,138,12,138,1288,1,138,1,138,4,138,1293,8,
138,11,138,12,138,1294,1,138,1,138,4,138,1299,8,138,11,138,12,138,1300,
3,138,1303,8,138,1,139,4,139,1306,8,139,11,139,12,139,1307,1,139,1,139,
1,140,1,140,1,140,1,140,5,140,1316,8,140,10,140,12,140,1319,9,140,1,140,
1,140,1,140,1,140,1,140,1,141,1,141,1,141,1,141,5,141,1330,8,141,10,141,
12,141,1333,9,141,1,141,1,141,1,1317,0,142,1,1,3,2,5,3,7,4,9,5,11,6,13,
7,15,8,17,9,19,10,21,11,23,12,25,13,27,14,29,15,31,16,33,17,35,18,37,19,
39,20,41,21,43,22,45,23,47,24,49,25,51,26,53,27,55,28,57,29,59,30,61,31,
63,32,65,33,67,34,69,35,71,36,73,37,75,38,77,39,79,40,81,41,83,42,85,43,
87,44,89,45,91,46,93,47,95,48,97,49,99,50,101,51,103,52,105,53,107,54,109,
55,111,56,113,57,115,58,117,59,119,60,121,61,123,62,125,63,127,64,129,65,
131,66,133,67,135,68,137,69,139,70,141,71,143,72,145,73,147,74,149,75,151,
76,153,77,155,78,157,79,159,80,161,81,163,82,165,83,167,84,169,85,171,86,
173,87,175,88,177,89,179,90,181,91,183,92,185,93,187,94,189,95,191,96,193,
97,195,98,197,99,199,100,201,101,203,0,205,0,207,102,209,103,211,0,213,
104,215,0,217,105,219,106,221,0,223,107,225,108,227,109,229,110,231,111,
233,112,235,113,237,114,239,115,241,116,243,117,245,118,247,119,249,120,
251,121,253,122,255,123,257,124,259,125,261,126,263,127,265,128,267,0,269,
0,271,129,273,0,275,0,277,130,279,131,281,132,283,133,1,0,13,1,0,48,57,
1,0,49,57,1,0,49,50,1,0,48,50,2,0,69,69,101,101,2,0,88,88,120,120,3,0,48,
57,65,70,97,102,4,0,36,36,65,90,95,95,97,122,5,0,36,36,48,57,65,90,95,95,
97,122,4,0,10,10,13,13,34,34,92,92,4,0,10,10,13,13,39,39,92,92,3,0,9,10,
12,13,32,32,2,0,10,10,13,13,1418,0,1,1,0,0,0,0,3,1,0,0,0,0,5,1,0,0,0,0,
7,1,0,0,0,0,9,1,0,0,0,0,11,1,0,0,0,0,13,1,0,0,0,0,15,1,0,0,0,0,17,1,0,0,
0,0,19,1,0,0,0,0,21,1,0,0,0,0,23,1,0,0,0,0,25,1,0,0,0,0,27,1,0,0,0,0,29,
1,0,0,0,0,31,1,0,0,0,0,33,1,0,0,0,0,35,1,0,0,0,0,37,1,0,0,0,0,39,1,0,0,
0,0,41,1,0,0,0,0,43,1,0,0,0,0,45,1,0,0,0,0,47,1,0,0,0,0,49,1,0,0,0,0,51,
1,0,0,0,0,53,1,0,0,0,0,55,1,0,0,0,0,57,1,0,0,0,0,59,1,0,0,0,0,61,1,0,0,
0,0,63,1,0,0,0,0,65,1,0,0,0,0,67,1,0,0,0,0,69,1,0,0,0,0,71,1,0,0,0,0,73,
1,0,0,0,0,75,1,0,0,0,0,77,1,0,0,0,0,79,1,0,0,0,0,81,1,0,0,0,0,83,1,0,0,
0,0,85,1,0,0,0,0,87,1,0,0,0,0,89,1,0,0,0,0,91,1,0,0,0,0,93,1,0,0,0,0,95,
1,0,0,0,0,97,1,0,0,0,0,99,1,0,0,0,0,101,1,0,0,0,0,103,1,0,0,0,0,105,1,0,
0,0,0,107,1,0,0,0,0,109,1,0,0,0,0,111,1,0,0,0,0,113,1,0,0,0,0,115,1,0,0,
0,0,117,1,0,0,0,0,119,1,0,0,0,0,121,1,0,0,0,0,123,1,0,0,0,0,125,1,0,0,0,
0,127,1,0,0,0,0,129,1,0,0,0,0,131,1,0,0,0,0,133,1,0,0,0,0,135,1,0,0,0,0,
137,1,0,0,0,0,139,1,0,0,0,0,141,1,0,0,0,0,143,1,0,0,0,0,145,1,0,0,0,0,147,
1,0,0,0,0,149,1,0,0,0,0,151,1,0,0,0,0,153,1,0,0,0,0,155,1,0,0,0,0,157,1,
0,0,0,0,159,1,0,0,0,0,161,1,0,0,0,0,163,1,0,0,0,0,165,1,0,0,0,0,167,1,0,
0,0,0,169,1,0,0,0,0,171,1,0,0,0,0,173,1,0,0,0,0,175,1,0,0,0,0,177,1,0,0,
0,0,179,1,0,0,0,0,181,1,0,0,0,0,183,1,0,0,0,0,185,1,0,0,0,0,187,1,0,0,0,
0,189,1,0,0,0,0,191,1,0,0,0,0,193,1,0,0,0,0,195,1,0,0,0,0,197,1,0,0,0,0,
199,1,0,0,0,0,201,1,0,0,0,0,207,1,0,0,0,0,209,1,0,0,0,0,213,1,0,0,0,0,217,
1,0,0,0,0,219,1,0,0,0,0,223,1,0,0,0,0,225,1,0,0,0,0,227,1,0,0,0,0,229,1,
0,0,0,0,231,1,0,0,0,0,233,1,0,0,0,0,235,1,0,0,0,0,237,1,0,0,0,0,239,1,0,
0,0,0,241,1,0,0,0,0,243,1,0,0,0,0,245,1,0,0,0,0,247,1,0,0,0,0,249,1,0,0,
0,0,251,1,0,0,0,0,253,1,0,0,0,0,255,1,0,0,0,0,257,1,0,0,0,0,259,1,0,0,0,
0,261,1,0,0,0,0,263,1,0,0,0,0,265,1,0,0,0,0,271,1,0,0,0,0,277,1,0,0,0,0,
279,1,0,0,0,0,281,1,0,0,0,0,283,1,0,0,0,1,285,1,0,0,0,3,292,1,0,0,0,5,294,
1,0,0,0,7,296,1,0,0,0,9,299,1,0,0,0,11,301,1,0,0,0,13,303,1,0,0,0,15,306,
1,0,0,0,17,308,1,0,0,0,19,310,1,0,0,0,21,313,1,0,0,0,23,315,1,0,0,0,25,
318,1,0,0,0,27,325,1,0,0,0,29,330,1,0,0,0,31,332,1,0,0,0,33,334,1,0,0,0,
35,336,1,0,0,0,37,345,1,0,0,0,39,354,1,0,0,0,41,364,1,0,0,0,43,372,1,0,
0,0,45,375,1,0,0,0,47,377,1,0,0,0,49,379,1,0,0,0,51,385,1,0,0,0,53,391,
1,0,0,0,55,395,1,0,0,0,57,397,1,0,0,0,59,399,1,0,0,0,61,401,1,0,0,0,63,
403,1,0,0,0,65,405,1,0,0,0,67,407,1,0,0,0,69,410,1,0,0,0,71,413,1,0,0,0,
73,420,1,0,0,0,75,429,1,0,0,0,77,438,1,0,0,0,79,446,1,0,0,0,81,452,1,0,
0,0,83,457,1,0,0,0,85,459,1,0,0,0,87,461,1,0,0,0,89,469,1,0,0,0,91,471,
1,0,0,0,93,479,1,0,0,0,95,482,1,0,0,0,97,489,1,0,0,0,99,497,1,0,0,0,101,
506,1,0,0,0,103,509,1,0,0,0,105,514,1,0,0,0,107,518,1,0,0,0,109,524,1,0,
0,0,111,530,1,0,0,0,113,540,1,0,0,0,115,549,1,0,0,0,117,552,1,0,0,0,119,
559,1,0,0,0,121,565,1,0,0,0,123,570,1,0,0,0,125,577,1,0,0,0,127,581,1,0,
0,0,129,586,1,0,0,0,131,593,1,0,0,0,133,598,1,0,0,0,135,601,1,0,0,0,137,
604,1,0,0,0,139,608,1,0,0,0,141,610,1,0,0,0,143,617,1,0,0,0,145,619,1,0,
0,0,147,622,1,0,0,0,149,625,1,0,0,0,151,628,1,0,0,0,153,631,1,0,0,0,155,
633,1,0,0,0,157,636,1,0,0,0,159,639,1,0,0,0,161,642,1,0,0,0,163,646,1,0,
0,0,165,650,1,0,0,0,167,653,1,0,0,0,169,656,1,0,0,0,171,659,1,0,0,0,173,
662,1,0,0,0,175,665,1,0,0,0,177,669,1,0,0,0,179,672,1,0,0,0,181,675,1,0,
0,0,183,682,1,0,0,0,185,687,1,0,0,0,187,695,1,0,0,0,189,698,1,0,0,0,191,
707,1,0,0,0,193,716,1,0,0,0,195,723,1,0,0,0,197,731,1,0,0,0,199,740,1,0,
0,0,201,755,1,0,0,0,203,854,1,0,0,0,205,861,1,0,0,0,207,872,1,0,0,0,209,
880,1,0,0,0,211,889,1,0,0,0,213,899,1,0,0,0,215,903,1,0,0,0,217,969,1,0,
0,0,219,971,1,0,0,0,221,987,1,0,0,0,223,1077,1,0,0,0,225,1079,1,0,0,0,227,
1089,1,0,0,0,229,1095,1,0,0,0,231,1104,1,0,0,0,233,1114,1,0,0,0,235,1123,
1,0,0,0,237,1129,1,0,0,0,239,1138,1,0,0,0,241,1146,1,0,0,0,243,1155,1,0,
0,0,245,1163,1,0,0,0,247,1171,1,0,0,0,249,1178,1,0,0,0,251,1186,1,0,0,0,
253,1191,1,0,0,0,255,1196,1,0,0,0,257,1201,1,0,0,0,259,1208,1,0,0,0,261,
1220,1,0,0,0,263,1229,1,0,0,0,265,1237,1,0,0,0,267,1244,1,0,0,0,269,1246,
1,0,0,0,271,1255,1,0,0,0,273,1278,1,0,0,0,275,1283,1,0,0,0,277,1286,1,0,
0,0,279,1305,1,0,0,0,281,1311,1,0,0,0,283,1325,1,0,0,0,285,286,5,112,0,
0,286,287,5,114,0,0,287,288,5,97,0,0,288,289,5,103,0,0,289,290,5,109,0,
0,290,291,5,97,0,0,291,2,1,0,0,0,292,293,5,59,0,0,293,4,1,0,0,0,294,295,
5,42,0,0,295,6,1,0,0,0,296,297,5,124,0,0,297,298,5,124,0,0,298,8,1,0,0,
0,299,300,5,94,0,0,300,10,1,0,0,0,301,302,5,126,0,0,302,12,1,0,0,0,303,
304,5,62,0,0,304,305,5,61,0,0,305,14,1,0,0,0,306,307,5,62,0,0,307,16,1,
0,0,0,308,309,5,60,0,0,309,18,1,0,0,0,310,311,5,60,0,0,311,312,5,61,0,0,
312,20,1,0,0,0,313,314,5,61,0,0,314,22,1,0,0,0,315,316,5,97,0,0,316,317,
5,115,0,0,317,24,1,0,0,0,318,319,5,105,0,0,319,320,5,109,0,0,320,321,5,
112,0,0,321,322,5,111,0,0,322,323,5,114,0,0,323,324,5,116,0,0,324,26,1,
0,0,0,325,326,5,102,0,0,326,327,5,114,0,0,327,328,5,111,0,0,328,329,5,109,
0,0,329,28,1,0,0,0,330,331,5,123,0,0,331,30,1,0,0,0,332,333,5,44,0,0,333,
32,1,0,0,0,334,335,5,125,0,0,335,34,1,0,0,0,336,337,5,97,0,0,337,338,5,
98,0,0,338,339,5,115,0,0,339,340,5,116,0,0,340,341,5,114,0,0,341,342,5,
97,0,0,342,343,5,99,0,0,343,344,5,116,0,0,344,36,1,0,0,0,345,346,5,99,0,
0,346,347,5,111,0,0,347,348,5,110,0,0,348,349,5,116,0,0,349,350,5,114,0,
0,350,351,5,97,0,0,351,352,5,99,0,0,352,353,5,116,0,0,353,38,1,0,0,0,354,
355,5,105,0,0,355,356,5,110,0,0,356,357,5,116,0,0,357,358,5,101,0,0,358,
359,5,114,0,0,359,360,5,102,0,0,360,361,5,97,0,0,361,362,5,99,0,0,362,363,
5,101,0,0,363,40,1,0,0,0,364,365,5,108,0,0,365,366,5,105,0,0,366,367,5,
98,0,0,367,368,5,114,0,0,368,369,5,97,0,0,369,370,5,114,0,0,370,371,5,121,
0,0,371,42,1,0,0,0,372,373,5,105,0,0,373,374,5,115,0,0,374,44,1,0,0,0,375,
376,5,40,0,0,376,46,1,0,0,0,377,378,5,41,0,0,378,48,1,0,0,0,379,380,5,101,
0,0,380,381,5,114,0,0,381,382,5,114,0,0,382,383,5,111,0,0,383,384,5,114,
0,0,384,50,1,0,0,0,385,386,5,117,0,0,386,387,5,115,0,0,387,388,5,105,0,
0,388,389,5,110,0,0,389,390,5,103,0,0,390,52,1,0,0,0,391,392,5,102,0,0,
392,393,5,111,0,0,393,394,5,114,0,0,394,54,1,0,0,0,395,396,5,124,0,0,396,
56,1,0,0,0,397,398,5,38,0,0,398,58,1,0,0,0,399,400,5,43,0,0,400,60,1,0,
0,0,401,402,5,45,0,0,402,62,1,0,0,0,403,404,5,47,0,0,404,64,1,0,0,0,405,
406,5,37,0,0,406,66,1,0,0,0,407,408,5,61,0,0,408,409,5,61,0,0,409,68,1,
0,0,0,410,411,5,33,0,0,411,412,5,61,0,0,412,70,1,0,0,0,413,414,5,115,0,
0,414,415,5,116,0,0,415,416,5,114,0,0,416,417,5,117,0,0,417,418,5,99,0,
0,418,419,5,116,0,0,419,72,1,0,0,0,420,421,5,109,0,0,421,422,5,111,0,0,
422,423,5,100,0,0,423,424,5,105,0,0,424,425,5,102,0,0,425,426,5,105,0,0,
426,427,5,101,0,0,427,428,5,114,0,0,428,74,1,0,0,0,429,430,5,102,0,0,430,
431,5,117,0,0,431,432,5,110,0,0,432,433,5,99,0,0,433,434,5,116,0,0,434,
435,5,105,0,0,435,436,5,111,0,0,436,437,5,110,0,0,437,76,1,0,0,0,438,439,
5,114,0,0,439,440,5,101,0,0,440,441,5,116,0,0,441,442,5,117,0,0,442,443,
5,114,0,0,443,444,5,110,0,0,444,445,5,115,0,0,445,78,1,0,0,0,446,447,5,
101,0,0,447,448,5,118,0,0,448,449,5,101,0,0,449,450,5,110,0,0,450,451,5,
116,0,0,451,80,1,0,0,0,452,453,5,101,0,0,453,454,5,110,0,0,454,455,5,117,
0,0,455,456,5,109,0,0,456,82,1,0,0,0,457,458,5,91,0,0,458,84,1,0,0,0,459,
460,5,93,0,0,460,86,1,0,0,0,461,462,5,97,0,0,462,463,5,100,0,0,463,464,
5,100,0,0,464,465,5,114,0,0,465,466,5,101,0,0,466,467,5,115,0,0,467,468,
5,115,0,0,468,88,1,0,0,0,469,470,5,46,0,0,470,90,1,0,0,0,471,472,5,109,
0,0,472,473,5,97,0,0,473,474,5,112,0,0,474,475,5,112,0,0,475,476,5,105,
0,0,476,477,5,110,0,0,477,478,5,103,0,0,478,92,1,0,0,0,479,480,5,61,0,0,
480,481,5,62,0,0,481,94,1,0,0,0,482,483,5,109,0,0,483,484,5,101,0,0,484,
485,5,109,0,0,485,486,5,111,0,0,486,487,5,114,0,0,487,488,5,121,0,0,488,
96,1,0,0,0,489,490,5,115,0,0,490,491,5,116,0,0,491,492,5,111,0,0,492,493,
5,114,0,0,493,494,5,97,0,0,494,495,5,103,0,0,495,496,5,101,0,0,496,98,1,
0,0,0,497,498,5,99,0,0,498,499,5,97,0,0,499,500,5,108,0,0,500,501,5,108,
0,0,501,502,5,100,0,0,502,503,5,97,0,0,503,504,5,116,0,0,504,505,5,97,0,
0,505,100,1,0,0,0,506,507,5,105,0,0,507,508,5,102,0,0,508,102,1,0,0,0,509,
510,5,101,0,0,510,511,5,108,0,0,511,512,5,115,0,0,512,513,5,101,0,0,513,
104,1,0,0,0,514,515,5,116,0,0,515,516,5,114,0,0,516,517,5,121,0,0,517,106,
1,0,0,0,518,519,5,99,0,0,519,520,5,97,0,0,520,521,5,116,0,0,521,522,5,99,
0,0,522,523,5,104,0,0,523,108,1,0,0,0,524,525,5,119,0,0,525,526,5,104,0,
0,526,527,5,105,0,0,527,528,5,108,0,0,528,529,5,101,0,0,529,110,1,0,0,0,
530,531,5,117,0,0,531,532,5,110,0,0,532,533,5,99,0,0,533,534,5,104,0,0,
534,535,5,101,0,0,535,536,5,99,0,0,536,537,5,107,0,0,537,538,5,101,0,0,
538,539,5,100,0,0,539,112,1,0,0,0,540,541,5,97,0,0,541,542,5,115,0,0,542,
543,5,115,0,0,543,544,5,101,0,0,544,545,5,109,0,0,545,546,5,98,0,0,546,
547,5,108,0,0,547,548,5,121,0,0,548,114,1,0,0,0,549,550,5,100,0,0,550,551,
5,111,0,0,551,116,1,0,0,0,552,553,5,114,0,0,553,554,5,101,0,0,554,555,5,
116,0,0,555,556,5,117,0,0,556,557,5,114,0,0,557,558,5,110,0,0,558,118,1,
0,0,0,559,560,5,116,0,0,560,561,5,104,0,0,561,562,5,114,0,0,562,563,5,111,
0,0,563,564,5,119,0,0,564,120,1,0,0,0,565,566,5,101,0,0,566,567,5,109,0,
0,567,568,5,105,0,0,568,569,5,116,0,0,569,122,1,0,0,0,570,571,5,114,0,0,
571,572,5,101,0,0,572,573,5,118,0,0,573,574,5,101,0,0,574,575,5,114,0,0,
575,576,5,116,0,0,576,124,1,0,0,0,577,578,5,118,0,0,578,579,5,97,0,0,579,
580,5,114,0,0,580,126,1,0,0,0,581,582,5,98,0,0,582,583,5,111,0,0,583,584,
5,111,0,0,584,585,5,108,0,0,585,128,1,0,0,0,586,587,5,115,0,0,587,588,5,
116,0,0,588,589,5,114,0,0,589,590,5,105,0,0,590,591,5,110,0,0,591,592,5,
103,0,0,592,130,1,0,0,0,593,594,5,98,0,0,594,595,5,121,0,0,595,596,5,116,
0,0,596,597,5,101,0,0,597,132,1,0,0,0,598,599,5,43,0,0,599,600,5,43,0,0,
600,134,1,0,0,0,601,602,5,45,0,0,602,603,5,45,0,0,603,136,1,0,0,0,604,605,
5,110,0,0,605,606,5,101,0,0,606,607,5,119,0,0,607,138,1,0,0,0,608,609,5,
58,0,0,609,140,1,0,0,0,610,611,5,100,0,0,611,612,5,101,0,0,612,613,5,108,
0,0,613,614,5,101,0,0,614,615,5,116,0,0,615,616,5,101,0,0,616,142,1,0,0,
0,617,618,5,33,0,0,618,144,1,0,0,0,619,620,5,42,0,0,620,621,5,42,0,0,621,
146,1,0,0,0,622,623,5,60,0,0,623,624,5,60,0,0,624,148,1,0,0,0,625,626,5,
62,0,0,626,627,5,62,0,0,627,150,1,0,0,0,628,629,5,38,0,0,629,630,5,38,0,
0,630,152,1,0,0,0,631,632,5,63,0,0,632,154,1,0,0,0,633,634,5,124,0,0,634,
635,5,61,0,0,635,156,1,0,0,0,636,637,5,94,0,0,637,638,5,61,0,0,638,158,
1,0,0,0,639,640,5,38,0,0,640,641,5,61,0,0,641,160,1,0,0,0,642,643,5,60,
0,0,643,644,5,60,0,0,644,645,5,61,0,0,645,162,1,0,0,0,646,647,5,62,0,0,
647,648,5,62,0,0,648,649,5,61,0,0,649,164,1,0,0,0,650,651,5,43,0,0,651,
652,5,61,0,0,652,166,1,0,0,0,653,654,5,45,0,0,654,655,5,61,0,0,655,168,
1,0,0,0,656,657,5,42,0,0,657,658,5,61,0,0,658,170,1,0,0,0,659,660,5,47,
0,0,660,661,5,61,0,0,661,172,1,0,0,0,662,663,5,37,0,0,663,664,5,61,0,0,
664,174,1,0,0,0,665,666,5,108,0,0,666,667,5,101,0,0,667,668,5,116,0,0,668,
176,1,0,0,0,669,670,5,58,0,0,670,671,5,61,0,0,671,178,1,0,0,0,672,673,5,
61,0,0,673,674,5,58,0,0,674,180,1,0,0,0,675,676,5,115,0,0,676,677,5,119,
0,0,677,678,5,105,0,0,678,679,5,116,0,0,679,680,5,99,0,0,680,681,5,104,
0,0,681,182,1,0,0,0,682,683,5,99,0,0,683,684,5,97,0,0,684,685,5,115,0,0,
685,686,5,101,0,0,686,184,1,0,0,0,687,688,5,100,0,0,688,689,5,101,0,0,689,
690,5,102,0,0,690,691,5,97,0,0,691,692,5,117,0,0,692,693,5,108,0,0,693,
694,5,116,0,0,694,186,1,0,0,0,695,696,5,45,0,0,696,697,5,62,0,0,697,188,
1,0,0,0,698,699,5,99,0,0,699,700,5,97,0,0,700,701,5,108,0,0,701,702,5,108,
0,0,702,703,5,98,0,0,703,704,5,97,0,0,704,705,5,99,0,0,705,706,5,107,0,
0,706,190,1,0,0,0,707,708,5,111,0,0,708,709,5,118,0,0,709,710,5,101,0,0,
710,711,5,114,0,0,711,712,5,114,0,0,712,713,5,105,0,0,713,714,5,100,0,0,
714,715,5,101,0,0,715,192,1,0,0,0,716,717,5,105,0,0,717,718,5,110,0,0,718,
719,5,116,0,0,719,721,1,0,0,0,720,722,3,203,101,0,721,720,1,0,0,0,721,722,
1,0,0,0,722,194,1,0,0,0,723,724,5,117,0,0,724,725,5,105,0,0,725,726,5,110,
0,0,726,727,5,116,0,0,727,729,1,0,0,0,728,730,3,203,101,0,729,728,1,0,0,
0,729,730,1,0,0,0,730,196,1,0,0,0,731,732,5,98,0,0,732,733,5,121,0,0,733,
734,5,116,0,0,734,735,5,101,0,0,735,736,5,115,0,0,736,738,1,0,0,0,737,739,
3,205,102,0,738,737,1,0,0,0,738,739,1,0,0,0,739,198,1,0,0,0,740,741,5,102,
0,0,741,742,5,105,0,0,742,743,5,120,0,0,743,744,5,101,0,0,744,745,5,100,
0,0,745,753,1,0,0,0,746,747,3,203,101,0,747,749,5,120,0,0,748,750,7,0,0,
0,749,748,1,0,0,0,750,751,1,0,0,0,751,749,1,0,0,0,751,752,1,0,0,0,752,754,
1,0,0,0,753,746,1,0,0,0,753,754,1,0,0,0,754,200,1,0,0,0,755,756,5,117,0,
0,756,757,5,102,0,0,757,758,5,105,0,0,758,759,5,120,0,0,759,760,5,101,0,
0,760,761,5,100,0,0,761,769,1,0,0,0,762,763,3,203,101,0,763,765,5,120,0,
0,764,766,7,0,0,0,765,764,1,0,0,0,766,767,1,0,0,0,767,765,1,0,0,0,767,768,
1,0,0,0,768,770,1,0,0,0,769,762,1,0,0,0,769,770,1,0,0,0,770,202,1,0,0,0,
771,855,5,56,0,0,772,773,5,49,0,0,773,855,5,54,0,0,774,775,5,50,0,0,775,
855,5,52,0,0,776,777,5,51,0,0,777,855,5,50,0,0,778,779,5,52,0,0,779,855,
5,48,0,0,780,781,5,52,0,0,781,855,5,56,0,0,782,783,5,53,0,0,783,855,5,54,
0,0,784,785,5,54,0,0,785,855,5,52,0,0,786,787,5,55,0,0,787,855,5,50,0,0,
788,789,5,56,0,0,789,855,5,48,0,0,790,791,5,56,0,0,791,855,5,56,0,0,792,
793,5,57,0,0,793,855,5,54,0,0,794,795,5,49,0,0,795,796,5,48,0,0,796,855,
5,52,0,0,797,798,5,49,0,0,798,799,5,49,0,0,799,855,5,50,0,0,800,801,5,49,
0,0,801,802,5,50,0,0,802,855,5,48,0,0,803,804,5,49,0,0,804,805,5,50,0,0,
805,855,5,56,0,0,806,807,5,49,0,0,807,808,5,51,0,0,808,855,5,54,0,0,809,
810,5,49,0,0,810,811,5,52,0,0,811,855,5,52,0,0,812,813,5,49,0,0,813,814,
5,53,0,0,814,855,5,50,0,0,815,816,5,49,0,0,816,817,5,54,0,0,817,855,5,48,
0,0,818,819,5,49,0,0,819,820,5,54,0,0,820,855,5,56,0,0,821,822,5,49,0,0,
822,823,5,55,0,0,823,855,5,54,0,0,824,825,5,49,0,0,825,826,5,56,0,0,826,
855,5,52,0,0,827,828,5,49,0,0,828,829,5,57,0,0,829,855,5,50,0,0,830,831,
5,50,0,0,831,832,5,48,0,0,832,855,5,48,0,0,833,834,5,50,0,0,834,835,5,48,
0,0,835,855,5,56,0,0,836,837,5,50,0,0,837,838,5,49,0,0,838,855,5,54,0,0,
839,840,5,50,0,0,840,841,5,50,0,0,841,855,5,52,0,0,842,843,5,50,0,0,843,
844,5,51,0,0,844,855,5,50,0,0,845,846,5,50,0,0,846,847,5,52,0,0,847,855,
5,48,0,0,848,849,5,50,0,0,849,850,5,52,0,0,850,855,5,56,0,0,851,852,5,50,
0,0,852,853,5,53,0,0,853,855,5,54,0,0,854,771,1,0,0,0,854,772,1,0,0,0,854,
774,1,0,0,0,854,776,1,0,0,0,854,778,1,0,0,0,854,780,1,0,0,0,854,782,1,0,
0,0,854,784,1,0,0,0,854,786,1,0,0,0,854,788,1,0,0,0,854,790,1,0,0,0,854,
792,1,0,0,0,854,794,1,0,0,0,854,797,1,0,0,0,854,800,1,0,0,0,854,803,1,0,
0,0,854,806,1,0,0,0,854,809,1,0,0,0,854,812,1,0,0,0,854,815,1,0,0,0,854,
818,1,0,0,0,854,821,1,0,0,0,854,824,1,0,0,0,854,827,1,0,0,0,854,830,1,0,
0,0,854,833,1,0,0,0,854,836,1,0,0,0,854,839,1,0,0,0,854,842,1,0,0,0,854,
845,1,0,0,0,854,848,1,0,0,0,854,851,1,0,0,0,855,204,1,0,0,0,856,862,7,1,
0,0,857,858,7,2,0,0,858,862,7,0,0,0,859,860,5,51,0,0,860,862,7,3,0,0,861,
856,1,0,0,0,861,857,1,0,0,0,861,859,1,0,0,0,862,206,1,0,0,0,863,864,5,116,
0,0,864,865,5,114,0,0,865,866,5,117,0,0,866,873,5,101,0,0,867,868,5,102,
0,0,868,869,5,97,0,0,869,870,5,108,0,0,870,871,5,115,0,0,871,873,5,101,
0,0,872,863,1,0,0,0,872,867,1,0,0,0,873,208,1,0,0,0,874,881,3,211,105,0,
875,877,3,211,105,0,876,875,1,0,0,0,876,877,1,0,0,0,877,878,1,0,0,0,878,
879,5,46,0,0,879,881,3,211,105,0,880,874,1,0,0,0,880,876,1,0,0,0,881,887,
1,0,0,0,882,884,7,4,0,0,883,885,5,45,0,0,884,883,1,0,0,0,884,885,1,0,0,
0,885,886,1,0,0,0,886,888,3,211,105,0,887,882,1,0,0,0,887,888,1,0,0,0,888,
210,1,0,0,0,889,896,7,0,0,0,890,892,5,95,0,0,891,890,1,0,0,0,891,892,1,
0,0,0,892,893,1,0,0,0,893,895,7,0,0,0,894,891,1,0,0,0,895,898,1,0,0,0,896,
894,1,0,0,0,896,897,1,0,0,0,897,212,1,0,0,0,898,896,1,0,0,0,899,900,5,48,
0,0,900,901,7,5,0,0,901,902,3,215,107,0,902,214,1,0,0,0,903,910,3,221,110,
0,904,906,5,95,0,0,905,904,1,0,0,0,905,906,1,0,0,0,906,907,1,0,0,0,907,
909,3,221,110,0,908,905,1,0,0,0,909,912,1,0,0,0,910,908,1,0,0,0,910,911,
1,0,0,0,911,216,1,0,0,0,912,910,1,0,0,0,913,914,5,119,0,0,914,915,5,101,
0,0,915,970,5,105,0,0,916,917,5,103,0,0,917,918,5,119,0,0,918,919,5,101,
0,0,919,970,5,105,0,0,920,921,5,115,0,0,921,922,5,122,0,0,922,923,5,97,
0,0,923,924,5,98,0,0,924,970,5,111,0,0,925,926,5,102,0,0,926,927,5,105,
0,0,927,928,5,110,0,0,928,929,5,110,0,0,929,930,5,101,0,0,930,970,5,121,
0,0,931,932,5,101,0,0,932,933,5,116,0,0,933,934,5,104,0,0,934,935,5,101,
0,0,935,970,5,114,0,0,936,937,5,115,0,0,937,938,5,101,0,0,938,939,5,99,
0,0,939,940,5,111,0,0,940,941,5,110,0,0,941,942,5,100,0,0,942,970,5,115,
0,0,943,944,5,109,0,0,944,945,5,105,0,0,945,946,5,110,0,0,946,947,5,117,
0,0,947,948,5,116,0,0,948,949,5,101,0,0,949,970,5,115,0,0,950,951,5,104,
0,0,951,952,5,111,0,0,952,953,5,117,0,0,953,954,5,114,0,0,954,970,5,115,
0,0,955,956,5,100,0,0,956,957,5,97,0,0,957,958,5,121,0,0,958,970,5,115,
0,0,959,960,5,119,0,0,960,961,5,101,0,0,961,962,5,101,0,0,962,963,5,107,
0,0,963,970,5,115,0,0,964,965,5,121,0,0,965,966,5,101,0,0,966,967,5,97,
0,0,967,968,5,114,0,0,968,970,5,115,0,0,969,913,1,0,0,0,969,916,1,0,0,0,
969,920,1,0,0,0,969,925,1,0,0,0,969,931,1,0,0,0,969,936,1,0,0,0,969,943,
1,0,0,0,969,950,1,0,0,0,969,955,1,0,0,0,969,959,1,0,0,0,969,964,1,0,0,0,
970,218,1,0,0,0,971,972,5,104,0,0,972,973,5,101,0,0,973,974,5,120,0,0,974,
985,1,0,0,0,975,977,5,34,0,0,976,978,3,215,107,0,977,976,1,0,0,0,977,978,
1,0,0,0,978,979,1,0,0,0,979,986,5,34,0,0,980,982,5,39,0,0,981,983,3,215,
107,0,982,981,1,0,0,0,982,983,1,0,0,0,983,984,1,0,0,0,984,986,5,39,0,0,
985,975,1,0,0,0,985,980,1,0,0,0,986,220,1,0,0,0,987,988,7,6,0,0,988,222,
1,0,0,0,989,990,5,97,0,0,990,991,5,98,0,0,991,992,5,115,0,0,992,993,5,116,
0,0,993,994,5,114,0,0,994,995,5,97,0,0,995,996,5,99,0,0,996,1078,5,116,
0,0,997,998,5,97,0,0,998,999,5,102,0,0,999,1000,5,116,0,0,1000,1001,5,101,
0,0,1001,1078,5,114,0,0,1002,1003,5,99,0,0,1003,1004,5,97,0,0,1004,1005,
5,115,0,0,1005,1078,5,101,0,0,1006,1007,5,99,0,0,1007,1008,5,97,0,0,1008,
1009,5,116,0,0,1009,1010,5,99,0,0,1010,1078,5,104,0,0,1011,1012,5,100,0,
0,1012,1013,5,101,0,0,1013,1014,5,102,0,0,1014,1015,5,97,0,0,1015,1016,
5,117,0,0,1016,1017,5,108,0,0,1017,1078,5,116,0,0,1018,1019,5,102,0,0,1019,
1020,5,105,0,0,1020,1021,5,110,0,0,1021,1022,5,97,0,0,1022,1078,5,108,0,
0,1023,1024,5,105,0,0,1024,1078,5,110,0,0,1025,1026,5,105,0,0,1026,1027,
5,110,0,0,1027,1028,5,108,0,0,1028,1029,5,105,0,0,1029,1030,5,110,0,0,1030,
1078,5,101,0,0,1031,1032,5,108,0,0,1032,1033,5,101,0,0,1033,1078,5,116,
0,0,1034,1035,5,109,0,0,1035,1036,5,97,0,0,1036,1037,5,116,0,0,1037,1038,
5,99,0,0,1038,1078,5,104,0,0,1039,1040,5,110,0,0,1040,1041,5,117,0,0,1041,
1042,5,108,0,0,1042,1078,5,108,0,0,1043,1044,5,111,0,0,1044,1078,5,102,
0,0,1045,1046,5,114,0,0,1046,1047,5,101,0,0,1047,1048,5,108,0,0,1048,1049,
5,111,0,0,1049,1050,5,99,0,0,1050,1051,5,97,0,0,1051,1052,5,116,0,0,1052,
1053,5,97,0,0,1053,1054,5,98,0,0,1054,1055,5,108,0,0,1055,1078,5,101,0,
0,1056,1057,5,115,0,0,1057,1058,5,116,0,0,1058,1059,5,97,0,0,1059,1060,
5,116,0,0,1060,1061,5,105,0,0,1061,1078,5,99,0,0,1062,1063,5,115,0,0,1063,
1064,5,119,0,0,1064,1065,5,105,0,0,1065,1066,5,116,0,0,1066,1067,5,99,0,
0,1067,1078,5,104,0,0,1068,1069,5,116,0,0,1069,1070,5,114,0,0,1070,1078,
5,121,0,0,1071,1072,5,116,0,0,1072,1073,5,121,0,0,1073,1074,5,112,0,0,1074,
1075,5,101,0,0,1075,1076,5,111,0,0,1076,1078,5,102,0,0,1077,989,1,0,0,0,
1077,997,1,0,0,0,1077,1002,1,0,0,0,1077,1006,1,0,0,0,1077,1011,1,0,0,0,
1077,1018,1,0,0,0,1077,1023,1,0,0,0,1077,1025,1,0,0,0,1077,1031,1,0,0,0,
1077,1034,1,0,0,0,1077,1039,1,0,0,0,1077,1043,1,0,0,0,1077,1045,1,0,0,0,
1077,1056,1,0,0,0,1077,1062,1,0,0,0,1077,1068,1,0,0,0,1077,1071,1,0,0,0,
1078,224,1,0,0,0,1079,1080,5,97,0,0,1080,1081,5,110,0,0,1081,1082,5,111,
0,0,1082,1083,5,110,0,0,1083,1084,5,121,0,0,1084,1085,5,109,0,0,1085,1086,
5,111,0,0,1086,1087,5,117,0,0,1087,1088,5,115,0,0,1088,226,1,0,0,0,1089,
1090,5,98,0,0,1090,1091,5,114,0,0,1091,1092,5,101,0,0,1092,1093,5,97,0,
0,1093,1094,5,107,0,0,1094,228,1,0,0,0,1095,1096,5,99,0,0,1096,1097,5,111,
0,0,1097,1098,5,110,0,0,1098,1099,5,115,0,0,1099,1100,5,116,0,0,1100,1101,
5,97,0,0,1101,1102,5,110,0,0,1102,1103,5,116,0,0,1103,230,1,0,0,0,1104,
1105,5,105,0,0,1105,1106,5,109,0,0,1106,1107,5,109,0,0,1107,1108,5,117,
0,0,1108,1109,5,116,0,0,1109,1110,5,97,0,0,1110,1111,5,98,0,0,1111,1112,
5,108,0,0,1112,1113,5,101,0,0,1113,232,1,0,0,0,1114,1115,5,99,0,0,1115,
1116,5,111,0,0,1116,1117,5,110,0,0,1117,1118,5,116,0,0,1118,1119,5,105,
0,0,1119,1120,5,110,0,0,1120,1121,5,117,0,0,1121,1122,5,101,0,0,1122,234,
1,0,0,0,1123,1124,5,108,0,0,1124,1125,5,101,0,0,1125,1126,5,97,0,0,1126,
1127,5,118,0,0,1127,1128,5,101,0,0,1128,236,1,0,0,0,1129,1130,5,101,0,0,
1130,1131,5,120,0,0,1131,1132,5,116,0,0,1132,1133,5,101,0,0,1133,1134,5,
114,0,0,1134,1135,5,110,0,0,1135,1136,5,97,0,0,1136,1137,5,108,0,0,1137,
238,1,0,0,0,1138,1139,5,105,0,0,1139,1140,5,110,0,0,1140,1141,5,100,0,0,
1141,1142,5,101,0,0,1142,1143,5,120,0,0,1143,1144,5,101,0,0,1144,1145,5,
100,0,0,1145,240,1,0,0,0,1146,1147,5,105,0,0,1147,1148,5,110,0,0,1148,1149,
5,116,0,0,1149,1150,5,101,0,0,1150,1151,5,114,0,0,1151,1152,5,110,0,0,1152,
1153,5,97,0,0,1153,1154,5,108,0,0,1154,242,1,0,0,0,1155,1156,5,112,0,0,
1156,1157,5,97,0,0,1157,1158,5,121,0,0,1158,1159,5,97,0,0,1159,1160,5,98,
0,0,1160,1161,5,108,0,0,1161,1162,5,101,0,0,1162,244,1,0,0,0,1163,1164,
5,112,0,0,1164,1165,5,114,0,0,1165,1166,5,105,0,0,1166,1167,5,118,0,0,1167,
1168,5,97,0,0,1168,1169,5,116,0,0,1169,1170,5,101,0,0,1170,246,1,0,0,0,
1171,1172,5,112,0,0,1172,1173,5,117,0,0,1173,1174,5,98,0,0,1174,1175,5,
108,0,0,1175,1176,5,105,0,0,1176,1177,5,99,0,0,1177,248,1,0,0,0,1178,1179,
5,118,0,0,1179,1180,5,105,0,0,1180,1181,5,114,0,0,1181,1182,5,116,0,0,1182,
1183,5,117,0,0,1183,1184,5,97,0,0,1184,1185,5,108,0,0,1185,250,1,0,0,0,
1186,1187,5,112,0,0,1187,1188,5,117,0,0,1188,1189,5,114,0,0,1189,1190,5,
101,0,0,1190,252,1,0,0,0,1191,1192,5,116,0,0,1192,1193,5,121,0,0,1193,1194,
5,112,0,0,1194,1195,5,101,0,0,1195,254,1,0,0,0,1196,1197,5,118,0,0,1197,
1198,5,105,0,0,1198,1199,5,101,0,0,1199,1200,5,119,0,0,1200,256,1,0,0,0,
1201,1202,5,103,0,0,1202,1203,5,108,0,0,1203,1204,5,111,0,0,1204,1205,5,
98,0,0,1205,1206,5,97,0,0,1206,1207,5,108,0,0,1207,258,1,0,0,0,1208,1209,
5,99,0,0,1209,1210,5,111,0,0,1210,1211,5,110,0,0,1211,1212,5,115,0,0,1212,
1213,5,116,0,0,1213,1214,5,114,0,0,1214,1215,5,117,0,0,1215,1216,5,99,0,
0,1216,1217,5,116,0,0,1217,1218,5,111,0,0,1218,1219,5,114,0,0,1219,260,
1,0,0,0,1220,1221,5,102,0,0,1221,1222,5,97,0,0,1222,1223,5,108,0,0,1223,
1224,5,108,0,0,1224,1225,5,98,0,0,1225,1226,5,97,0,0,1226,1227,5,99,0,0,
1227,1228,5,107,0,0,1228,262,1,0,0,0,1229,1230,5,114,0,0,1230,1231,5,101,
0,0,1231,1232,5,99,0,0,1232,1233,5,101,0,0,1233,1234,5,105,0,0,1234,1235,
5,118,0,0,1235,1236,5,101,0,0,1236,264,1,0,0,0,1237,1241,3,267,133,0,1238,
1240,3,269,134,0,1239,1238,1,0,0,0,1240,1243,1,0,0,0,1241,1239,1,0,0,0,
1241,1242,1,0,0,0,1242,266,1,0,0,0,1243,1241,1,0,0,0,1244,1245,7,7,0,0,
1245,268,1,0,0,0,1246,1247,7,8,0,0,1247,270,1,0,0,0,1248,1249,5,117,0,0,
1249,1250,5,110,0,0,1250,1251,5,105,0,0,1251,1252,5,99,0,0,1252,1253,5,
111,0,0,1253,1254,5,100,0,0,1254,1256,5,101,0,0,1255,1248,1,0,0,0,1255,
1256,1,0,0,0,1256,1273,1,0,0,0,1257,1261,5,34,0,0,1258,1260,3,273,136,0,
1259,1258,1,0,0,0,1260,1263,1,0,0,0,1261,1259,1,0,0,0,1261,1262,1,0,0,0,
1262,1264,1,0,0,0,1263,1261,1,0,0,0,1264,1274,5,34,0,0,1265,1269,5,39,0,
0,1266,1268,3,275,137,0,1267,1266,1,0,0,0,1268,1271,1,0,0,0,1269,1267,1,
0,0,0,1269,1270,1,0,0,0,1270,1272,1,0,0,0,1271,1269,1,0,0,0,1272,1274,5,
39,0,0,1273,1257,1,0,0,0,1273,1265,1,0,0,0,1274,272,1,0,0,0,1275,1279,8,
9,0,0,1276,1277,5,92,0,0,1277,1279,9,0,0,0,1278,1275,1,0,0,0,1278,1276,
1,0,0,0,1279,274,1,0,0,0,1280,1284,8,10,0,0,1281,1282,5,92,0,0,1282,1284,
9,0,0,0,1283,1280,1,0,0,0,1283,1281,1,0,0,0,1284,276,1,0,0,0,1285,1287,
7,0,0,0,1286,1285,1,0,0,0,1287,1288,1,0,0,0,1288,1286,1,0,0,0,1288,1289,
1,0,0,0,1289,1290,1,0,0,0,1290,1292,5,46,0,0,1291,1293,7,0,0,0,1292,1291,
1,0,0,0,1293,1294,1,0,0,0,1294,1292,1,0,0,0,1294,1295,1,0,0,0,1295,1302,
1,0,0,0,1296,1298,5,46,0,0,1297,1299,7,0,0,0,1298,1297,1,0,0,0,1299,1300,
1,0,0,0,1300,1298,1,0,0,0,1300,1301,1,0,0,0,1301,1303,1,0,0,0,1302,1296,
1,0,0,0,1302,1303,1,0,0,0,1303,278,1,0,0,0,1304,1306,7,11,0,0,1305,1304,
1,0,0,0,1306,1307,1,0,0,0,1307,1305,1,0,0,0,1307,1308,1,0,0,0,1308,1309,
1,0,0,0,1309,1310,6,139,0,0,1310,280,1,0,0,0,1311,1312,5,47,0,0,1312,1313,
5,42,0,0,1313,1317,1,0,0,0,1314,1316,9,0,0,0,1315,1314,1,0,0,0,1316,1319,
1,0,0,0,1317,1318,1,0,0,0,1317,1315,1,0,0,0,1318,1320,1,0,0,0,1319,1317,
1,0,0,0,1320,1321,5,42,0,0,1321,1322,5,47,0,0,1322,1323,1,0,0,0,1323,1324,
6,140,1,0,1324,282,1,0,0,0,1325,1326,5,47,0,0,1326,1327,5,47,0,0,1327,1331,
1,0,0,0,1328,1330,8,12,0,0,1329,1328,1,0,0,0,1330,1333,1,0,0,0,1331,1329,
1,0,0,0,1331,1332,1,0,0,0,1332,1334,1,0,0,0,1333,1331,1,0,0,0,1334,1335,
6,141,1,0,1335,284,1,0,0,0,38,0,721,729,738,751,753,767,769,854,861,872,
876,880,884,887,891,896,905,910,969,977,982,985,1077,1241,1255,1261,1269,
1273,1278,1283,1288,1294,1300,1302,1307,1317,1331,2,6,0,0,0,1,0];
private static __ATN: ATN;
public static get _ATN(): ATN {
if (!SolidityLexer.__ATN) {
SolidityLexer.__ATN = new ATNDeserializer().deserialize(Utils.toCharArray(SolidityLexer._serializedATN));
SolidityLexer.__ATN = new ATNDeserializer().deserialize(SolidityLexer._serializedATN);
}

@@ -929,3 +829,4 @@

}
static DecisionsToDFA = SolidityLexer._ATN.decisionToState.map( (ds: DecisionState, index: number) => new DFA(ds, index) );
}

@@ -1,5 +0,5 @@

// Generated from antlr/Solidity.g4 by ANTLR 4.9.0-SNAPSHOT
// Generated from antlr/Solidity.g4 by ANTLR 4.13.1
import {ParseTreeListener} from "antlr4";
import { ParseTreeListener } from "antlr4ts/tree/ParseTreeListener";

@@ -113,3 +113,3 @@ import { SourceUnitContext } from "./SolidityParser";

*/
export interface SolidityListener extends ParseTreeListener {
export default class SolidityListener extends ParseTreeListener {
/**

@@ -125,3 +125,2 @@ * Enter a parse tree produced by `SolidityParser.sourceUnit`.

exitSourceUnit?: (ctx: SourceUnitContext) => void;
/**

@@ -137,3 +136,2 @@ * Enter a parse tree produced by `SolidityParser.pragmaDirective`.

exitPragmaDirective?: (ctx: PragmaDirectiveContext) => void;
/**

@@ -149,3 +147,2 @@ * Enter a parse tree produced by `SolidityParser.pragmaName`.

exitPragmaName?: (ctx: PragmaNameContext) => void;
/**

@@ -161,3 +158,2 @@ * Enter a parse tree produced by `SolidityParser.pragmaValue`.

exitPragmaValue?: (ctx: PragmaValueContext) => void;
/**

@@ -173,3 +169,2 @@ * Enter a parse tree produced by `SolidityParser.version`.

exitVersion?: (ctx: VersionContext) => void;
/**

@@ -185,3 +180,2 @@ * Enter a parse tree produced by `SolidityParser.versionOperator`.

exitVersionOperator?: (ctx: VersionOperatorContext) => void;
/**

@@ -197,3 +191,2 @@ * Enter a parse tree produced by `SolidityParser.versionConstraint`.

exitVersionConstraint?: (ctx: VersionConstraintContext) => void;
/**

@@ -209,3 +202,2 @@ * Enter a parse tree produced by `SolidityParser.importDeclaration`.

exitImportDeclaration?: (ctx: ImportDeclarationContext) => void;
/**

@@ -221,3 +213,2 @@ * Enter a parse tree produced by `SolidityParser.importDirective`.

exitImportDirective?: (ctx: ImportDirectiveContext) => void;
/**

@@ -233,3 +224,2 @@ * Enter a parse tree produced by `SolidityParser.importPath`.

exitImportPath?: (ctx: ImportPathContext) => void;
/**

@@ -245,3 +235,2 @@ * Enter a parse tree produced by `SolidityParser.contractDefinition`.

exitContractDefinition?: (ctx: ContractDefinitionContext) => void;
/**

@@ -257,3 +246,2 @@ * Enter a parse tree produced by `SolidityParser.inheritanceSpecifier`.

exitInheritanceSpecifier?: (ctx: InheritanceSpecifierContext) => void;
/**

@@ -269,3 +257,2 @@ * Enter a parse tree produced by `SolidityParser.contractPart`.

exitContractPart?: (ctx: ContractPartContext) => void;
/**

@@ -281,3 +268,2 @@ * Enter a parse tree produced by `SolidityParser.stateVariableDeclaration`.

exitStateVariableDeclaration?: (ctx: StateVariableDeclarationContext) => void;
/**

@@ -293,3 +279,2 @@ * Enter a parse tree produced by `SolidityParser.fileLevelConstant`.

exitFileLevelConstant?: (ctx: FileLevelConstantContext) => void;
/**

@@ -305,3 +290,2 @@ * Enter a parse tree produced by `SolidityParser.customErrorDefinition`.

exitCustomErrorDefinition?: (ctx: CustomErrorDefinitionContext) => void;
/**

@@ -317,3 +301,2 @@ * Enter a parse tree produced by `SolidityParser.typeDefinition`.

exitTypeDefinition?: (ctx: TypeDefinitionContext) => void;
/**

@@ -329,3 +312,2 @@ * Enter a parse tree produced by `SolidityParser.usingForDeclaration`.

exitUsingForDeclaration?: (ctx: UsingForDeclarationContext) => void;
/**

@@ -341,3 +323,2 @@ * Enter a parse tree produced by `SolidityParser.usingForObject`.

exitUsingForObject?: (ctx: UsingForObjectContext) => void;
/**

@@ -353,3 +334,2 @@ * Enter a parse tree produced by `SolidityParser.usingForObjectDirective`.

exitUsingForObjectDirective?: (ctx: UsingForObjectDirectiveContext) => void;
/**

@@ -365,3 +345,2 @@ * Enter a parse tree produced by `SolidityParser.userDefinableOperators`.

exitUserDefinableOperators?: (ctx: UserDefinableOperatorsContext) => void;
/**

@@ -377,3 +356,2 @@ * Enter a parse tree produced by `SolidityParser.structDefinition`.

exitStructDefinition?: (ctx: StructDefinitionContext) => void;
/**

@@ -389,3 +367,2 @@ * Enter a parse tree produced by `SolidityParser.modifierDefinition`.

exitModifierDefinition?: (ctx: ModifierDefinitionContext) => void;
/**

@@ -401,3 +378,2 @@ * Enter a parse tree produced by `SolidityParser.modifierInvocation`.

exitModifierInvocation?: (ctx: ModifierInvocationContext) => void;
/**

@@ -413,3 +389,2 @@ * Enter a parse tree produced by `SolidityParser.functionDefinition`.

exitFunctionDefinition?: (ctx: FunctionDefinitionContext) => void;
/**

@@ -425,3 +400,2 @@ * Enter a parse tree produced by `SolidityParser.functionDescriptor`.

exitFunctionDescriptor?: (ctx: FunctionDescriptorContext) => void;
/**

@@ -437,3 +411,2 @@ * Enter a parse tree produced by `SolidityParser.returnParameters`.

exitReturnParameters?: (ctx: ReturnParametersContext) => void;
/**

@@ -449,3 +422,2 @@ * Enter a parse tree produced by `SolidityParser.modifierList`.

exitModifierList?: (ctx: ModifierListContext) => void;
/**

@@ -461,3 +433,2 @@ * Enter a parse tree produced by `SolidityParser.eventDefinition`.

exitEventDefinition?: (ctx: EventDefinitionContext) => void;
/**

@@ -473,3 +444,2 @@ * Enter a parse tree produced by `SolidityParser.enumValue`.

exitEnumValue?: (ctx: EnumValueContext) => void;
/**

@@ -485,3 +455,2 @@ * Enter a parse tree produced by `SolidityParser.enumDefinition`.

exitEnumDefinition?: (ctx: EnumDefinitionContext) => void;
/**

@@ -497,3 +466,2 @@ * Enter a parse tree produced by `SolidityParser.parameterList`.

exitParameterList?: (ctx: ParameterListContext) => void;
/**

@@ -509,3 +477,2 @@ * Enter a parse tree produced by `SolidityParser.parameter`.

exitParameter?: (ctx: ParameterContext) => void;
/**

@@ -521,3 +488,2 @@ * Enter a parse tree produced by `SolidityParser.eventParameterList`.

exitEventParameterList?: (ctx: EventParameterListContext) => void;
/**

@@ -533,3 +499,2 @@ * Enter a parse tree produced by `SolidityParser.eventParameter`.

exitEventParameter?: (ctx: EventParameterContext) => void;
/**

@@ -545,3 +510,2 @@ * Enter a parse tree produced by `SolidityParser.functionTypeParameterList`.

exitFunctionTypeParameterList?: (ctx: FunctionTypeParameterListContext) => void;
/**

@@ -557,3 +521,2 @@ * Enter a parse tree produced by `SolidityParser.functionTypeParameter`.

exitFunctionTypeParameter?: (ctx: FunctionTypeParameterContext) => void;
/**

@@ -569,3 +532,2 @@ * Enter a parse tree produced by `SolidityParser.variableDeclaration`.

exitVariableDeclaration?: (ctx: VariableDeclarationContext) => void;
/**

@@ -581,3 +543,2 @@ * Enter a parse tree produced by `SolidityParser.typeName`.

exitTypeName?: (ctx: TypeNameContext) => void;
/**

@@ -593,3 +554,2 @@ * Enter a parse tree produced by `SolidityParser.userDefinedTypeName`.

exitUserDefinedTypeName?: (ctx: UserDefinedTypeNameContext) => void;
/**

@@ -605,3 +565,2 @@ * Enter a parse tree produced by `SolidityParser.mappingKey`.

exitMappingKey?: (ctx: MappingKeyContext) => void;
/**

@@ -617,3 +576,2 @@ * Enter a parse tree produced by `SolidityParser.mapping`.

exitMapping?: (ctx: MappingContext) => void;
/**

@@ -629,3 +587,2 @@ * Enter a parse tree produced by `SolidityParser.mappingKeyName`.

exitMappingKeyName?: (ctx: MappingKeyNameContext) => void;
/**

@@ -641,3 +598,2 @@ * Enter a parse tree produced by `SolidityParser.mappingValueName`.

exitMappingValueName?: (ctx: MappingValueNameContext) => void;
/**

@@ -653,3 +609,2 @@ * Enter a parse tree produced by `SolidityParser.functionTypeName`.

exitFunctionTypeName?: (ctx: FunctionTypeNameContext) => void;
/**

@@ -665,3 +620,2 @@ * Enter a parse tree produced by `SolidityParser.storageLocation`.

exitStorageLocation?: (ctx: StorageLocationContext) => void;
/**

@@ -677,3 +631,2 @@ * Enter a parse tree produced by `SolidityParser.stateMutability`.

exitStateMutability?: (ctx: StateMutabilityContext) => void;
/**

@@ -689,3 +642,2 @@ * Enter a parse tree produced by `SolidityParser.block`.

exitBlock?: (ctx: BlockContext) => void;
/**

@@ -701,3 +653,2 @@ * Enter a parse tree produced by `SolidityParser.statement`.

exitStatement?: (ctx: StatementContext) => void;
/**

@@ -713,3 +664,2 @@ * Enter a parse tree produced by `SolidityParser.expressionStatement`.

exitExpressionStatement?: (ctx: ExpressionStatementContext) => void;
/**

@@ -725,3 +675,2 @@ * Enter a parse tree produced by `SolidityParser.ifStatement`.

exitIfStatement?: (ctx: IfStatementContext) => void;
/**

@@ -737,3 +686,2 @@ * Enter a parse tree produced by `SolidityParser.tryStatement`.

exitTryStatement?: (ctx: TryStatementContext) => void;
/**

@@ -749,3 +697,2 @@ * Enter a parse tree produced by `SolidityParser.catchClause`.

exitCatchClause?: (ctx: CatchClauseContext) => void;
/**

@@ -761,3 +708,2 @@ * Enter a parse tree produced by `SolidityParser.whileStatement`.

exitWhileStatement?: (ctx: WhileStatementContext) => void;
/**

@@ -773,3 +719,2 @@ * Enter a parse tree produced by `SolidityParser.simpleStatement`.

exitSimpleStatement?: (ctx: SimpleStatementContext) => void;
/**

@@ -785,3 +730,2 @@ * Enter a parse tree produced by `SolidityParser.uncheckedStatement`.

exitUncheckedStatement?: (ctx: UncheckedStatementContext) => void;
/**

@@ -797,3 +741,2 @@ * Enter a parse tree produced by `SolidityParser.forStatement`.

exitForStatement?: (ctx: ForStatementContext) => void;
/**

@@ -809,3 +752,2 @@ * Enter a parse tree produced by `SolidityParser.inlineAssemblyStatement`.

exitInlineAssemblyStatement?: (ctx: InlineAssemblyStatementContext) => void;
/**

@@ -821,3 +763,2 @@ * Enter a parse tree produced by `SolidityParser.inlineAssemblyStatementFlag`.

exitInlineAssemblyStatementFlag?: (ctx: InlineAssemblyStatementFlagContext) => void;
/**

@@ -833,3 +774,2 @@ * Enter a parse tree produced by `SolidityParser.doWhileStatement`.

exitDoWhileStatement?: (ctx: DoWhileStatementContext) => void;
/**

@@ -845,3 +785,2 @@ * Enter a parse tree produced by `SolidityParser.continueStatement`.

exitContinueStatement?: (ctx: ContinueStatementContext) => void;
/**

@@ -857,3 +796,2 @@ * Enter a parse tree produced by `SolidityParser.breakStatement`.

exitBreakStatement?: (ctx: BreakStatementContext) => void;
/**

@@ -869,3 +807,2 @@ * Enter a parse tree produced by `SolidityParser.returnStatement`.

exitReturnStatement?: (ctx: ReturnStatementContext) => void;
/**

@@ -881,3 +818,2 @@ * Enter a parse tree produced by `SolidityParser.throwStatement`.

exitThrowStatement?: (ctx: ThrowStatementContext) => void;
/**

@@ -893,3 +829,2 @@ * Enter a parse tree produced by `SolidityParser.emitStatement`.

exitEmitStatement?: (ctx: EmitStatementContext) => void;
/**

@@ -905,3 +840,2 @@ * Enter a parse tree produced by `SolidityParser.revertStatement`.

exitRevertStatement?: (ctx: RevertStatementContext) => void;
/**

@@ -917,3 +851,2 @@ * Enter a parse tree produced by `SolidityParser.variableDeclarationStatement`.

exitVariableDeclarationStatement?: (ctx: VariableDeclarationStatementContext) => void;
/**

@@ -929,3 +862,2 @@ * Enter a parse tree produced by `SolidityParser.variableDeclarationList`.

exitVariableDeclarationList?: (ctx: VariableDeclarationListContext) => void;
/**

@@ -941,3 +873,2 @@ * Enter a parse tree produced by `SolidityParser.identifierList`.

exitIdentifierList?: (ctx: IdentifierListContext) => void;
/**

@@ -953,3 +884,2 @@ * Enter a parse tree produced by `SolidityParser.elementaryTypeName`.

exitElementaryTypeName?: (ctx: ElementaryTypeNameContext) => void;
/**

@@ -965,3 +895,2 @@ * Enter a parse tree produced by `SolidityParser.expression`.

exitExpression?: (ctx: ExpressionContext) => void;
/**

@@ -977,3 +906,2 @@ * Enter a parse tree produced by `SolidityParser.primaryExpression`.

exitPrimaryExpression?: (ctx: PrimaryExpressionContext) => void;
/**

@@ -989,3 +917,2 @@ * Enter a parse tree produced by `SolidityParser.expressionList`.

exitExpressionList?: (ctx: ExpressionListContext) => void;
/**

@@ -1001,3 +928,2 @@ * Enter a parse tree produced by `SolidityParser.nameValueList`.

exitNameValueList?: (ctx: NameValueListContext) => void;
/**

@@ -1013,3 +939,2 @@ * Enter a parse tree produced by `SolidityParser.nameValue`.

exitNameValue?: (ctx: NameValueContext) => void;
/**

@@ -1025,3 +950,2 @@ * Enter a parse tree produced by `SolidityParser.functionCallArguments`.

exitFunctionCallArguments?: (ctx: FunctionCallArgumentsContext) => void;
/**

@@ -1037,3 +961,2 @@ * Enter a parse tree produced by `SolidityParser.functionCall`.

exitFunctionCall?: (ctx: FunctionCallContext) => void;
/**

@@ -1049,3 +972,2 @@ * Enter a parse tree produced by `SolidityParser.assemblyBlock`.

exitAssemblyBlock?: (ctx: AssemblyBlockContext) => void;
/**

@@ -1061,3 +983,2 @@ * Enter a parse tree produced by `SolidityParser.assemblyItem`.

exitAssemblyItem?: (ctx: AssemblyItemContext) => void;
/**

@@ -1073,3 +994,2 @@ * Enter a parse tree produced by `SolidityParser.assemblyExpression`.

exitAssemblyExpression?: (ctx: AssemblyExpressionContext) => void;
/**

@@ -1085,3 +1005,2 @@ * Enter a parse tree produced by `SolidityParser.assemblyMember`.

exitAssemblyMember?: (ctx: AssemblyMemberContext) => void;
/**

@@ -1097,3 +1016,2 @@ * Enter a parse tree produced by `SolidityParser.assemblyCall`.

exitAssemblyCall?: (ctx: AssemblyCallContext) => void;
/**

@@ -1109,3 +1027,2 @@ * Enter a parse tree produced by `SolidityParser.assemblyLocalDefinition`.

exitAssemblyLocalDefinition?: (ctx: AssemblyLocalDefinitionContext) => void;
/**

@@ -1121,3 +1038,2 @@ * Enter a parse tree produced by `SolidityParser.assemblyAssignment`.

exitAssemblyAssignment?: (ctx: AssemblyAssignmentContext) => void;
/**

@@ -1133,3 +1049,2 @@ * Enter a parse tree produced by `SolidityParser.assemblyIdentifierOrList`.

exitAssemblyIdentifierOrList?: (ctx: AssemblyIdentifierOrListContext) => void;
/**

@@ -1145,3 +1060,2 @@ * Enter a parse tree produced by `SolidityParser.assemblyIdentifierList`.

exitAssemblyIdentifierList?: (ctx: AssemblyIdentifierListContext) => void;
/**

@@ -1157,3 +1071,2 @@ * Enter a parse tree produced by `SolidityParser.assemblyStackAssignment`.

exitAssemblyStackAssignment?: (ctx: AssemblyStackAssignmentContext) => void;
/**

@@ -1169,3 +1082,2 @@ * Enter a parse tree produced by `SolidityParser.labelDefinition`.

exitLabelDefinition?: (ctx: LabelDefinitionContext) => void;
/**

@@ -1181,3 +1093,2 @@ * Enter a parse tree produced by `SolidityParser.assemblySwitch`.

exitAssemblySwitch?: (ctx: AssemblySwitchContext) => void;
/**

@@ -1193,3 +1104,2 @@ * Enter a parse tree produced by `SolidityParser.assemblyCase`.

exitAssemblyCase?: (ctx: AssemblyCaseContext) => void;
/**

@@ -1205,3 +1115,2 @@ * Enter a parse tree produced by `SolidityParser.assemblyFunctionDefinition`.

exitAssemblyFunctionDefinition?: (ctx: AssemblyFunctionDefinitionContext) => void;
/**

@@ -1217,3 +1126,2 @@ * Enter a parse tree produced by `SolidityParser.assemblyFunctionReturns`.

exitAssemblyFunctionReturns?: (ctx: AssemblyFunctionReturnsContext) => void;
/**

@@ -1229,3 +1137,2 @@ * Enter a parse tree produced by `SolidityParser.assemblyFor`.

exitAssemblyFor?: (ctx: AssemblyForContext) => void;
/**

@@ -1241,3 +1148,2 @@ * Enter a parse tree produced by `SolidityParser.assemblyIf`.

exitAssemblyIf?: (ctx: AssemblyIfContext) => void;
/**

@@ -1253,3 +1159,2 @@ * Enter a parse tree produced by `SolidityParser.assemblyLiteral`.

exitAssemblyLiteral?: (ctx: AssemblyLiteralContext) => void;
/**

@@ -1265,3 +1170,2 @@ * Enter a parse tree produced by `SolidityParser.tupleExpression`.

exitTupleExpression?: (ctx: TupleExpressionContext) => void;
/**

@@ -1277,3 +1181,2 @@ * Enter a parse tree produced by `SolidityParser.numberLiteral`.

exitNumberLiteral?: (ctx: NumberLiteralContext) => void;
/**

@@ -1289,3 +1192,2 @@ * Enter a parse tree produced by `SolidityParser.identifier`.

exitIdentifier?: (ctx: IdentifierContext) => void;
/**

@@ -1301,3 +1203,2 @@ * Enter a parse tree produced by `SolidityParser.hexLiteral`.

exitHexLiteral?: (ctx: HexLiteralContext) => void;
/**

@@ -1313,3 +1214,2 @@ * Enter a parse tree produced by `SolidityParser.overrideSpecifier`.

exitOverrideSpecifier?: (ctx: OverrideSpecifierContext) => void;
/**

@@ -1316,0 +1216,0 @@ * Enter a parse tree produced by `SolidityParser.stringLiteral`.

@@ -1,5 +0,5 @@

// Generated from antlr/Solidity.g4 by ANTLR 4.9.0-SNAPSHOT
// Generated from antlr/Solidity.g4 by ANTLR 4.13.1
import {ParseTreeVisitor} from 'antlr4';
import { ParseTreeVisitor } from "antlr4ts/tree/ParseTreeVisitor";

@@ -116,3 +116,3 @@ import { SourceUnitContext } from "./SolidityParser";

*/
export interface SolidityVisitor<Result> extends ParseTreeVisitor<Result> {
export default class SolidityVisitor<Result> extends ParseTreeVisitor<Result> {
/**

@@ -124,3 +124,2 @@ * Visit a parse tree produced by `SolidityParser.sourceUnit`.

visitSourceUnit?: (ctx: SourceUnitContext) => Result;
/**

@@ -132,3 +131,2 @@ * Visit a parse tree produced by `SolidityParser.pragmaDirective`.

visitPragmaDirective?: (ctx: PragmaDirectiveContext) => Result;
/**

@@ -140,3 +138,2 @@ * Visit a parse tree produced by `SolidityParser.pragmaName`.

visitPragmaName?: (ctx: PragmaNameContext) => Result;
/**

@@ -148,3 +145,2 @@ * Visit a parse tree produced by `SolidityParser.pragmaValue`.

visitPragmaValue?: (ctx: PragmaValueContext) => Result;
/**

@@ -156,3 +152,2 @@ * Visit a parse tree produced by `SolidityParser.version`.

visitVersion?: (ctx: VersionContext) => Result;
/**

@@ -164,3 +159,2 @@ * Visit a parse tree produced by `SolidityParser.versionOperator`.

visitVersionOperator?: (ctx: VersionOperatorContext) => Result;
/**

@@ -172,3 +166,2 @@ * Visit a parse tree produced by `SolidityParser.versionConstraint`.

visitVersionConstraint?: (ctx: VersionConstraintContext) => Result;
/**

@@ -180,3 +173,2 @@ * Visit a parse tree produced by `SolidityParser.importDeclaration`.

visitImportDeclaration?: (ctx: ImportDeclarationContext) => Result;
/**

@@ -188,3 +180,2 @@ * Visit a parse tree produced by `SolidityParser.importDirective`.

visitImportDirective?: (ctx: ImportDirectiveContext) => Result;
/**

@@ -196,3 +187,2 @@ * Visit a parse tree produced by `SolidityParser.importPath`.

visitImportPath?: (ctx: ImportPathContext) => Result;
/**

@@ -204,3 +194,2 @@ * Visit a parse tree produced by `SolidityParser.contractDefinition`.

visitContractDefinition?: (ctx: ContractDefinitionContext) => Result;
/**

@@ -212,3 +201,2 @@ * Visit a parse tree produced by `SolidityParser.inheritanceSpecifier`.

visitInheritanceSpecifier?: (ctx: InheritanceSpecifierContext) => Result;
/**

@@ -220,3 +208,2 @@ * Visit a parse tree produced by `SolidityParser.contractPart`.

visitContractPart?: (ctx: ContractPartContext) => Result;
/**

@@ -228,3 +215,2 @@ * Visit a parse tree produced by `SolidityParser.stateVariableDeclaration`.

visitStateVariableDeclaration?: (ctx: StateVariableDeclarationContext) => Result;
/**

@@ -236,3 +222,2 @@ * Visit a parse tree produced by `SolidityParser.fileLevelConstant`.

visitFileLevelConstant?: (ctx: FileLevelConstantContext) => Result;
/**

@@ -244,3 +229,2 @@ * Visit a parse tree produced by `SolidityParser.customErrorDefinition`.

visitCustomErrorDefinition?: (ctx: CustomErrorDefinitionContext) => Result;
/**

@@ -252,3 +236,2 @@ * Visit a parse tree produced by `SolidityParser.typeDefinition`.

visitTypeDefinition?: (ctx: TypeDefinitionContext) => Result;
/**

@@ -260,3 +243,2 @@ * Visit a parse tree produced by `SolidityParser.usingForDeclaration`.

visitUsingForDeclaration?: (ctx: UsingForDeclarationContext) => Result;
/**

@@ -268,3 +250,2 @@ * Visit a parse tree produced by `SolidityParser.usingForObject`.

visitUsingForObject?: (ctx: UsingForObjectContext) => Result;
/**

@@ -276,3 +257,2 @@ * Visit a parse tree produced by `SolidityParser.usingForObjectDirective`.

visitUsingForObjectDirective?: (ctx: UsingForObjectDirectiveContext) => Result;
/**

@@ -284,3 +264,2 @@ * Visit a parse tree produced by `SolidityParser.userDefinableOperators`.

visitUserDefinableOperators?: (ctx: UserDefinableOperatorsContext) => Result;
/**

@@ -292,3 +271,2 @@ * Visit a parse tree produced by `SolidityParser.structDefinition`.

visitStructDefinition?: (ctx: StructDefinitionContext) => Result;
/**

@@ -300,3 +278,2 @@ * Visit a parse tree produced by `SolidityParser.modifierDefinition`.

visitModifierDefinition?: (ctx: ModifierDefinitionContext) => Result;
/**

@@ -308,3 +285,2 @@ * Visit a parse tree produced by `SolidityParser.modifierInvocation`.

visitModifierInvocation?: (ctx: ModifierInvocationContext) => Result;
/**

@@ -316,3 +292,2 @@ * Visit a parse tree produced by `SolidityParser.functionDefinition`.

visitFunctionDefinition?: (ctx: FunctionDefinitionContext) => Result;
/**

@@ -324,3 +299,2 @@ * Visit a parse tree produced by `SolidityParser.functionDescriptor`.

visitFunctionDescriptor?: (ctx: FunctionDescriptorContext) => Result;
/**

@@ -332,3 +306,2 @@ * Visit a parse tree produced by `SolidityParser.returnParameters`.

visitReturnParameters?: (ctx: ReturnParametersContext) => Result;
/**

@@ -340,3 +313,2 @@ * Visit a parse tree produced by `SolidityParser.modifierList`.

visitModifierList?: (ctx: ModifierListContext) => Result;
/**

@@ -348,3 +320,2 @@ * Visit a parse tree produced by `SolidityParser.eventDefinition`.

visitEventDefinition?: (ctx: EventDefinitionContext) => Result;
/**

@@ -356,3 +327,2 @@ * Visit a parse tree produced by `SolidityParser.enumValue`.

visitEnumValue?: (ctx: EnumValueContext) => Result;
/**

@@ -364,3 +334,2 @@ * Visit a parse tree produced by `SolidityParser.enumDefinition`.

visitEnumDefinition?: (ctx: EnumDefinitionContext) => Result;
/**

@@ -372,3 +341,2 @@ * Visit a parse tree produced by `SolidityParser.parameterList`.

visitParameterList?: (ctx: ParameterListContext) => Result;
/**

@@ -380,3 +348,2 @@ * Visit a parse tree produced by `SolidityParser.parameter`.

visitParameter?: (ctx: ParameterContext) => Result;
/**

@@ -388,3 +355,2 @@ * Visit a parse tree produced by `SolidityParser.eventParameterList`.

visitEventParameterList?: (ctx: EventParameterListContext) => Result;
/**

@@ -396,3 +362,2 @@ * Visit a parse tree produced by `SolidityParser.eventParameter`.

visitEventParameter?: (ctx: EventParameterContext) => Result;
/**

@@ -404,3 +369,2 @@ * Visit a parse tree produced by `SolidityParser.functionTypeParameterList`.

visitFunctionTypeParameterList?: (ctx: FunctionTypeParameterListContext) => Result;
/**

@@ -412,3 +376,2 @@ * Visit a parse tree produced by `SolidityParser.functionTypeParameter`.

visitFunctionTypeParameter?: (ctx: FunctionTypeParameterContext) => Result;
/**

@@ -420,3 +383,2 @@ * Visit a parse tree produced by `SolidityParser.variableDeclaration`.

visitVariableDeclaration?: (ctx: VariableDeclarationContext) => Result;
/**

@@ -428,3 +390,2 @@ * Visit a parse tree produced by `SolidityParser.typeName`.

visitTypeName?: (ctx: TypeNameContext) => Result;
/**

@@ -436,3 +397,2 @@ * Visit a parse tree produced by `SolidityParser.userDefinedTypeName`.

visitUserDefinedTypeName?: (ctx: UserDefinedTypeNameContext) => Result;
/**

@@ -444,3 +404,2 @@ * Visit a parse tree produced by `SolidityParser.mappingKey`.

visitMappingKey?: (ctx: MappingKeyContext) => Result;
/**

@@ -452,3 +411,2 @@ * Visit a parse tree produced by `SolidityParser.mapping`.

visitMapping?: (ctx: MappingContext) => Result;
/**

@@ -460,3 +418,2 @@ * Visit a parse tree produced by `SolidityParser.mappingKeyName`.

visitMappingKeyName?: (ctx: MappingKeyNameContext) => Result;
/**

@@ -468,3 +425,2 @@ * Visit a parse tree produced by `SolidityParser.mappingValueName`.

visitMappingValueName?: (ctx: MappingValueNameContext) => Result;
/**

@@ -476,3 +432,2 @@ * Visit a parse tree produced by `SolidityParser.functionTypeName`.

visitFunctionTypeName?: (ctx: FunctionTypeNameContext) => Result;
/**

@@ -484,3 +439,2 @@ * Visit a parse tree produced by `SolidityParser.storageLocation`.

visitStorageLocation?: (ctx: StorageLocationContext) => Result;
/**

@@ -492,3 +446,2 @@ * Visit a parse tree produced by `SolidityParser.stateMutability`.

visitStateMutability?: (ctx: StateMutabilityContext) => Result;
/**

@@ -500,3 +453,2 @@ * Visit a parse tree produced by `SolidityParser.block`.

visitBlock?: (ctx: BlockContext) => Result;
/**

@@ -508,3 +460,2 @@ * Visit a parse tree produced by `SolidityParser.statement`.

visitStatement?: (ctx: StatementContext) => Result;
/**

@@ -516,3 +467,2 @@ * Visit a parse tree produced by `SolidityParser.expressionStatement`.

visitExpressionStatement?: (ctx: ExpressionStatementContext) => Result;
/**

@@ -524,3 +474,2 @@ * Visit a parse tree produced by `SolidityParser.ifStatement`.

visitIfStatement?: (ctx: IfStatementContext) => Result;
/**

@@ -532,3 +481,2 @@ * Visit a parse tree produced by `SolidityParser.tryStatement`.

visitTryStatement?: (ctx: TryStatementContext) => Result;
/**

@@ -540,3 +488,2 @@ * Visit a parse tree produced by `SolidityParser.catchClause`.

visitCatchClause?: (ctx: CatchClauseContext) => Result;
/**

@@ -548,3 +495,2 @@ * Visit a parse tree produced by `SolidityParser.whileStatement`.

visitWhileStatement?: (ctx: WhileStatementContext) => Result;
/**

@@ -556,3 +502,2 @@ * Visit a parse tree produced by `SolidityParser.simpleStatement`.

visitSimpleStatement?: (ctx: SimpleStatementContext) => Result;
/**

@@ -564,3 +509,2 @@ * Visit a parse tree produced by `SolidityParser.uncheckedStatement`.

visitUncheckedStatement?: (ctx: UncheckedStatementContext) => Result;
/**

@@ -572,3 +516,2 @@ * Visit a parse tree produced by `SolidityParser.forStatement`.

visitForStatement?: (ctx: ForStatementContext) => Result;
/**

@@ -580,3 +523,2 @@ * Visit a parse tree produced by `SolidityParser.inlineAssemblyStatement`.

visitInlineAssemblyStatement?: (ctx: InlineAssemblyStatementContext) => Result;
/**

@@ -588,3 +530,2 @@ * Visit a parse tree produced by `SolidityParser.inlineAssemblyStatementFlag`.

visitInlineAssemblyStatementFlag?: (ctx: InlineAssemblyStatementFlagContext) => Result;
/**

@@ -596,3 +537,2 @@ * Visit a parse tree produced by `SolidityParser.doWhileStatement`.

visitDoWhileStatement?: (ctx: DoWhileStatementContext) => Result;
/**

@@ -604,3 +544,2 @@ * Visit a parse tree produced by `SolidityParser.continueStatement`.

visitContinueStatement?: (ctx: ContinueStatementContext) => Result;
/**

@@ -612,3 +551,2 @@ * Visit a parse tree produced by `SolidityParser.breakStatement`.

visitBreakStatement?: (ctx: BreakStatementContext) => Result;
/**

@@ -620,3 +558,2 @@ * Visit a parse tree produced by `SolidityParser.returnStatement`.

visitReturnStatement?: (ctx: ReturnStatementContext) => Result;
/**

@@ -628,3 +565,2 @@ * Visit a parse tree produced by `SolidityParser.throwStatement`.

visitThrowStatement?: (ctx: ThrowStatementContext) => Result;
/**

@@ -636,3 +572,2 @@ * Visit a parse tree produced by `SolidityParser.emitStatement`.

visitEmitStatement?: (ctx: EmitStatementContext) => Result;
/**

@@ -644,3 +579,2 @@ * Visit a parse tree produced by `SolidityParser.revertStatement`.

visitRevertStatement?: (ctx: RevertStatementContext) => Result;
/**

@@ -652,3 +586,2 @@ * Visit a parse tree produced by `SolidityParser.variableDeclarationStatement`.

visitVariableDeclarationStatement?: (ctx: VariableDeclarationStatementContext) => Result;
/**

@@ -660,3 +593,2 @@ * Visit a parse tree produced by `SolidityParser.variableDeclarationList`.

visitVariableDeclarationList?: (ctx: VariableDeclarationListContext) => Result;
/**

@@ -668,3 +600,2 @@ * Visit a parse tree produced by `SolidityParser.identifierList`.

visitIdentifierList?: (ctx: IdentifierListContext) => Result;
/**

@@ -676,3 +607,2 @@ * Visit a parse tree produced by `SolidityParser.elementaryTypeName`.

visitElementaryTypeName?: (ctx: ElementaryTypeNameContext) => Result;
/**

@@ -684,3 +614,2 @@ * Visit a parse tree produced by `SolidityParser.expression`.

visitExpression?: (ctx: ExpressionContext) => Result;
/**

@@ -692,3 +621,2 @@ * Visit a parse tree produced by `SolidityParser.primaryExpression`.

visitPrimaryExpression?: (ctx: PrimaryExpressionContext) => Result;
/**

@@ -700,3 +628,2 @@ * Visit a parse tree produced by `SolidityParser.expressionList`.

visitExpressionList?: (ctx: ExpressionListContext) => Result;
/**

@@ -708,3 +635,2 @@ * Visit a parse tree produced by `SolidityParser.nameValueList`.

visitNameValueList?: (ctx: NameValueListContext) => Result;
/**

@@ -716,3 +642,2 @@ * Visit a parse tree produced by `SolidityParser.nameValue`.

visitNameValue?: (ctx: NameValueContext) => Result;
/**

@@ -724,3 +649,2 @@ * Visit a parse tree produced by `SolidityParser.functionCallArguments`.

visitFunctionCallArguments?: (ctx: FunctionCallArgumentsContext) => Result;
/**

@@ -732,3 +656,2 @@ * Visit a parse tree produced by `SolidityParser.functionCall`.

visitFunctionCall?: (ctx: FunctionCallContext) => Result;
/**

@@ -740,3 +663,2 @@ * Visit a parse tree produced by `SolidityParser.assemblyBlock`.

visitAssemblyBlock?: (ctx: AssemblyBlockContext) => Result;
/**

@@ -748,3 +670,2 @@ * Visit a parse tree produced by `SolidityParser.assemblyItem`.

visitAssemblyItem?: (ctx: AssemblyItemContext) => Result;
/**

@@ -756,3 +677,2 @@ * Visit a parse tree produced by `SolidityParser.assemblyExpression`.

visitAssemblyExpression?: (ctx: AssemblyExpressionContext) => Result;
/**

@@ -764,3 +684,2 @@ * Visit a parse tree produced by `SolidityParser.assemblyMember`.

visitAssemblyMember?: (ctx: AssemblyMemberContext) => Result;
/**

@@ -772,3 +691,2 @@ * Visit a parse tree produced by `SolidityParser.assemblyCall`.

visitAssemblyCall?: (ctx: AssemblyCallContext) => Result;
/**

@@ -780,3 +698,2 @@ * Visit a parse tree produced by `SolidityParser.assemblyLocalDefinition`.

visitAssemblyLocalDefinition?: (ctx: AssemblyLocalDefinitionContext) => Result;
/**

@@ -788,3 +705,2 @@ * Visit a parse tree produced by `SolidityParser.assemblyAssignment`.

visitAssemblyAssignment?: (ctx: AssemblyAssignmentContext) => Result;
/**

@@ -796,3 +712,2 @@ * Visit a parse tree produced by `SolidityParser.assemblyIdentifierOrList`.

visitAssemblyIdentifierOrList?: (ctx: AssemblyIdentifierOrListContext) => Result;
/**

@@ -804,3 +719,2 @@ * Visit a parse tree produced by `SolidityParser.assemblyIdentifierList`.

visitAssemblyIdentifierList?: (ctx: AssemblyIdentifierListContext) => Result;
/**

@@ -812,3 +726,2 @@ * Visit a parse tree produced by `SolidityParser.assemblyStackAssignment`.

visitAssemblyStackAssignment?: (ctx: AssemblyStackAssignmentContext) => Result;
/**

@@ -820,3 +733,2 @@ * Visit a parse tree produced by `SolidityParser.labelDefinition`.

visitLabelDefinition?: (ctx: LabelDefinitionContext) => Result;
/**

@@ -828,3 +740,2 @@ * Visit a parse tree produced by `SolidityParser.assemblySwitch`.

visitAssemblySwitch?: (ctx: AssemblySwitchContext) => Result;
/**

@@ -836,3 +747,2 @@ * Visit a parse tree produced by `SolidityParser.assemblyCase`.

visitAssemblyCase?: (ctx: AssemblyCaseContext) => Result;
/**

@@ -844,3 +754,2 @@ * Visit a parse tree produced by `SolidityParser.assemblyFunctionDefinition`.

visitAssemblyFunctionDefinition?: (ctx: AssemblyFunctionDefinitionContext) => Result;
/**

@@ -852,3 +761,2 @@ * Visit a parse tree produced by `SolidityParser.assemblyFunctionReturns`.

visitAssemblyFunctionReturns?: (ctx: AssemblyFunctionReturnsContext) => Result;
/**

@@ -860,3 +768,2 @@ * Visit a parse tree produced by `SolidityParser.assemblyFor`.

visitAssemblyFor?: (ctx: AssemblyForContext) => Result;
/**

@@ -868,3 +775,2 @@ * Visit a parse tree produced by `SolidityParser.assemblyIf`.

visitAssemblyIf?: (ctx: AssemblyIfContext) => Result;
/**

@@ -876,3 +782,2 @@ * Visit a parse tree produced by `SolidityParser.assemblyLiteral`.

visitAssemblyLiteral?: (ctx: AssemblyLiteralContext) => Result;
/**

@@ -884,3 +789,2 @@ * Visit a parse tree produced by `SolidityParser.tupleExpression`.

visitTupleExpression?: (ctx: TupleExpressionContext) => Result;
/**

@@ -892,3 +796,2 @@ * Visit a parse tree produced by `SolidityParser.numberLiteral`.

visitNumberLiteral?: (ctx: NumberLiteralContext) => Result;
/**

@@ -900,3 +803,2 @@ * Visit a parse tree produced by `SolidityParser.identifier`.

visitIdentifier?: (ctx: IdentifierContext) => Result;
/**

@@ -908,3 +810,2 @@ * Visit a parse tree produced by `SolidityParser.hexLiteral`.

visitHexLiteral?: (ctx: HexLiteralContext) => Result;
/**

@@ -916,3 +817,2 @@ * Visit a parse tree produced by `SolidityParser.overrideSpecifier`.

visitOverrideSpecifier?: (ctx: OverrideSpecifierContext) => Result;
/**

@@ -919,0 +819,0 @@ * Visit a parse tree produced by `SolidityParser.stringLiteral`.

@@ -1,10 +0,6 @@

import { ParserRuleContext } from 'antlr4ts'
import { AbstractParseTreeVisitor } from 'antlr4ts/tree/AbstractParseTreeVisitor'
import { ParseTree } from 'antlr4ts/tree/ParseTree'
import { ParserRuleContext, ParseTreeVisitor, ParseTree } from 'antlr4'
import * as SP from './antlr/SolidityParser'
import { SolidityVisitor } from './antlr/SolidityVisitor'
import SolidityVisitor from './antlr/SolidityVisitor'
import { ParseOptions } from './types'
import * as AST from './ast-types'
import { ErrorNode } from 'antlr4ts/tree/ErrorNode'

@@ -29,3 +25,3 @@ interface SourceLocation {

export class ASTBuilder
extends AbstractParseTreeVisitor<ASTBuilderNode>
extends ParseTreeVisitor<ASTBuilderNode>
implements SolidityVisitor<ASTBuilderNode | ASTBuilderNode[]>

@@ -49,5 +45,3 @@ {

public visitSourceUnit(ctx: SP.SourceUnitContext): AST.SourceUnit & WithMeta {
const children = (ctx.children ?? []).filter(
(x) => !(x instanceof ErrorNode)
)
const children = ctx.children ?? []

@@ -80,5 +74,5 @@ const node: AST.SourceUnit = {

baseContracts: ctx
.inheritanceSpecifier()
.inheritanceSpecifier_list()
.map((x) => this.visitInheritanceSpecifier(x)),
subNodes: ctx.contractPart().map((x) => this.visit(x)),
subNodes: ctx.contractPart_list().map((x) => this.visit(x)),
kind,

@@ -104,7 +98,7 @@ }

let visibility: AST.VariableDeclaration['visibility'] = 'default'
if (ctx.InternalKeyword().length > 0) {
if (ctx.InternalKeyword_list().length > 0) {
visibility = 'internal'
} else if (ctx.PublicKeyword().length > 0) {
} else if (ctx.PublicKeyword_list().length > 0) {
visibility = 'public'
} else if (ctx.PrivateKeyword().length > 0) {
} else if (ctx.PrivateKeyword_list().length > 0) {
visibility = 'private'

@@ -114,3 +108,3 @@ }

let isDeclaredConst = false
if (ctx.ConstantKeyword().length > 0) {
if (ctx.ConstantKeyword_list().length > 0) {
isDeclaredConst = true

@@ -120,3 +114,3 @@ }

let override
const overrideSpecifier = ctx.overrideSpecifier()
const overrideSpecifier = ctx.overrideSpecifier_list()
if (overrideSpecifier.length === 0) {

@@ -126,3 +120,3 @@ override = null

override = overrideSpecifier[0]
.userDefinedTypeName()
.userDefinedTypeName_list()
.map((x) => this.visitUserDefinedTypeName(x))

@@ -132,3 +126,3 @@ }

let isImmutable = false
if (ctx.ImmutableKeyword().length > 0) {
if (ctx.ImmutableKeyword_list().length > 0) {
isImmutable = true

@@ -193,5 +187,5 @@ }

const ctxVariableDeclarationList = ctx.variableDeclarationList()
if (ctxVariableDeclaration !== undefined) {
if (ctxVariableDeclaration) {
variables = [this.visitVariableDeclaration(ctxVariableDeclaration)]
} else if (ctxIdentifierList !== undefined) {
} else if (ctxIdentifierList) {
variables = this.buildIdentifierList(ctxIdentifierList)

@@ -228,3 +222,3 @@ } else if (ctxVariableDeclarationList) {

.eventParameterList()
.eventParameter()
.eventParameter_list()
.map((paramCtx) => {

@@ -242,8 +236,7 @@ const type = this.visitTypeName(paramCtx.typeName())

name,
identifier:
paramCtxIdentifier !== undefined
? this.visitIdentifier(paramCtxIdentifier)
: null,
identifier: paramCtxIdentifier
? this.visitIdentifier(paramCtxIdentifier)
: null,
isStateVar: false,
isIndexed: paramCtx.IndexedKeyword() !== undefined,
isIndexed: Boolean(paramCtx.IndexedKeyword()),
storageLocation: null,

@@ -259,3 +252,3 @@ expression: null,

parameters,
isAnonymous: ctx.AnonymousKeyword() !== undefined,
isAnonymous: Boolean(ctx.AnonymousKeyword()),
}

@@ -269,3 +262,3 @@

type: 'Block',
statements: ctx.statement().map((x) => this.visitStatement(x)),
statements: ctx.statement_list().map((x) => this.visitStatement(x)),
}

@@ -279,3 +272,3 @@

const ctxStorageLocation = ctx.storageLocation()
if (ctxStorageLocation !== undefined) {
if (ctxStorageLocation) {
storageLocation = this._toText(ctxStorageLocation)

@@ -286,3 +279,3 @@ }

const ctxIdentifier = ctx.identifier()
if (ctxIdentifier !== undefined) {
if (ctxIdentifier) {
name = this._toText(ctxIdentifier)

@@ -295,6 +288,3 @@ }

name,
identifier:
ctxIdentifier !== undefined
? this.visitIdentifier(ctxIdentifier)
: null,
identifier: ctxIdentifier ? this.visitIdentifier(ctxIdentifier) : null,
storageLocation,

@@ -323,3 +313,3 @@ isStateVar: false,

const ctxBlock = ctx.block()
if (ctxBlock !== undefined) {
if (ctxBlock) {
block = this.visitBlock(ctxBlock)

@@ -330,7 +320,7 @@ }

.modifierList()
.modifierInvocation()
.modifierInvocation_list()
.map((mod) => this.visitModifierInvocation(mod))
let stateMutability = null
if (ctx.modifierList().stateMutability().length > 0) {
if (ctx.modifierList().stateMutability_list().length > 0) {
stateMutability = this._stateMutabilityToText(

@@ -347,9 +337,9 @@ ctx.modifierList().stateMutability(0)

.parameterList()
.parameter()
.parameter_list()
.map((x) => this.visit(x))
// error out on incorrect function visibility
if (ctx.modifierList().InternalKeyword().length > 0) {
if (ctx.modifierList().InternalKeyword_list().length > 0) {
visibility = 'internal'
} else if (ctx.modifierList().PublicKeyword().length > 0) {
} else if (ctx.modifierList().PublicKeyword_list().length > 0) {
visibility = 'public'

@@ -365,8 +355,7 @@ } else {

.parameterList()
.parameter()
.parameter_list()
.map((x) => this.visit(x))
returnParameters =
ctxReturnParameters !== undefined
? this.visitReturnParameters(ctxReturnParameters)
: null
returnParameters = ctxReturnParameters
? this.visitReturnParameters(ctxReturnParameters)
: null

@@ -382,21 +371,20 @@ visibility = 'external'

const identifier = ctx.functionDescriptor().identifier()
name = identifier !== undefined ? this._toText(identifier) : ''
name = identifier ? this._toText(identifier) : ''
parameters = ctx
.parameterList()
.parameter()
.parameter_list()
.map((x) => this.visit(x))
returnParameters =
ctxReturnParameters !== undefined
? this.visitReturnParameters(ctxReturnParameters)
: null
returnParameters = ctxReturnParameters
? this.visitReturnParameters(ctxReturnParameters)
: null
// parse function visibility
if (ctx.modifierList().ExternalKeyword().length > 0) {
if (ctx.modifierList().ExternalKeyword_list().length > 0) {
visibility = 'external'
} else if (ctx.modifierList().InternalKeyword().length > 0) {
} else if (ctx.modifierList().InternalKeyword_list().length > 0) {
visibility = 'internal'
} else if (ctx.modifierList().PublicKeyword().length > 0) {
} else if (ctx.modifierList().PublicKeyword_list().length > 0) {
visibility = 'public'
} else if (ctx.modifierList().PrivateKeyword().length > 0) {
} else if (ctx.modifierList().PrivateKeyword_list().length > 0) {
visibility = 'private'

@@ -412,3 +400,3 @@ }

// check if function is virtual
if (ctx.modifierList().VirtualKeyword().length > 0) {
if (ctx.modifierList().VirtualKeyword_list().length > 0) {
isVirtual = true

@@ -418,3 +406,3 @@ }

let override: AST.UserDefinedTypeName[] | null
const overrideSpecifier = ctx.modifierList().overrideSpecifier()
const overrideSpecifier = ctx.modifierList().overrideSpecifier_list()
if (overrideSpecifier.length === 0) {

@@ -424,3 +412,3 @@ override = null

override = overrideSpecifier[0]
.userDefinedTypeName()
.userDefinedTypeName_list()
.map((x) => this.visitUserDefinedTypeName(x))

@@ -454,3 +442,3 @@ }

name: this._toText(ctx.identifier()),
members: ctx.enumValue().map((x) => this.visitEnumValue(x)),
members: ctx.enumValue_list().map((x) => this.visitEnumValue(x)),
}

@@ -490,7 +478,7 @@

public visitTypeName(ctx: SP.TypeNameContext): AST.TypeName & WithMeta {
if (ctx.children !== undefined && ctx.children.length > 2) {
if (ctx.children && ctx.children.length > 2) {
let length = null
if (ctx.children.length === 4) {
const expression = ctx.expression()
if (expression === undefined) {
if (expression === undefined || expression === null) {
throw new Error(

@@ -503,7 +491,5 @@ 'Assertion error: a typeName with 4 children should have an expression'

const ctxTypeName = ctx.typeName()
const node: AST.ArrayTypeName = {
type: 'ArrayTypeName',
baseTypeName: this.visitTypeName(ctxTypeName!),
baseTypeName: this.visitTypeName(ctx.typeName()),
length,

@@ -525,15 +511,15 @@ }

if (ctx.elementaryTypeName() !== undefined) {
if (ctx.elementaryTypeName()) {
return this.visitElementaryTypeName(ctx.elementaryTypeName()!)
}
if (ctx.userDefinedTypeName() !== undefined) {
if (ctx.userDefinedTypeName()) {
return this.visitUserDefinedTypeName(ctx.userDefinedTypeName()!)
}
if (ctx.mapping() !== undefined) {
if (ctx.mapping()) {
return this.visitMapping(ctx.mapping()!)
}
if (ctx.functionTypeName() !== undefined) {
if (ctx.functionTypeName()) {
return this.visitFunctionTypeName(ctx.functionTypeName()!)

@@ -561,7 +547,7 @@ }

const ctxTypeName = ctx.typeName()
if (ctxTypeName !== undefined) {
if (ctxTypeName) {
typeName = this.visitTypeName(ctxTypeName)
}
const isGlobal = ctx.GlobalKeyword() !== undefined
const isGlobal = Boolean(ctx.GlobalKeyword())

@@ -573,3 +559,3 @@ const usingForObjectCtx = ctx.usingForObject()

let node: AST.UsingForDeclaration
if (userDefinedTypeNameCtx !== undefined) {
if (userDefinedTypeNameCtx) {
// using Lib for ...

@@ -587,3 +573,3 @@ node = {

const usingForObjectDirectives =
usingForObjectCtx.usingForObjectDirective()
usingForObjectCtx.usingForObjectDirective_list()
const functions: string[] = []

@@ -597,3 +583,3 @@ const operators: Array<string | null> = []

const operator = usingForObjectDirective.userDefinableOperators()
if (operator !== undefined) {
if (operator) {
operators.push(this._toText(operator))

@@ -626,3 +612,3 @@ } else {

let value = this._toText(ctx.pragmaValue())
if (versionContext?.children !== undefined) {
if (versionContext?.children) {
value = versionContext.children.map((x) => this._toText(x)).join(' ')

@@ -644,6 +630,5 @@ }

const exprList = ctx.expressionList()
const args =
exprList !== undefined
? exprList.expression().map((x) => this.visitExpression(x))
: []
const args = exprList
? exprList.expression_list().map((x) => this.visitExpression(x))
: []

@@ -666,4 +651,4 @@ const node: AST.InheritanceSpecifier = {

if (exprList != null) {
args = exprList.expression().map((x) => this.visit(x))
} else if (ctx.children !== undefined && ctx.children.length > 1) {
args = exprList.expression_list().map((x) => this.visit(x))
} else if (ctx.children && ctx.children.length > 1) {
args = []

@@ -687,10 +672,10 @@ } else {

.functionTypeParameterList(0)
.functionTypeParameter()
.functionTypeParameter_list()
.map((typeCtx) => this.visitFunctionTypeParameter(typeCtx))
let returnTypes: AST.VariableDeclaration[] = []
if (ctx.functionTypeParameterList().length > 1) {
if (ctx.functionTypeParameterList_list().length > 1) {
returnTypes = ctx
.functionTypeParameterList(1)
.functionTypeParameter()
.functionTypeParameter_list()
.map((typeCtx) => this.visitFunctionTypeParameter(typeCtx))

@@ -700,5 +685,5 @@ }

let visibility = 'default'
if (ctx.InternalKeyword().length > 0) {
if (ctx.InternalKeyword_list().length > 0) {
visibility = 'internal'
} else if (ctx.ExternalKeyword().length > 0) {
} else if (ctx.ExternalKeyword_list().length > 0) {
visibility = 'external'

@@ -708,3 +693,3 @@ }

let stateMutability = null
if (ctx.stateMutability().length > 0) {
if (ctx.stateMutability_list().length > 0) {
stateMutability = this._toText(ctx.stateMutability(0))

@@ -831,6 +816,6 @@ }

args = ctxArgsExpressionList
.expression()
.expression_list()
.map((exprCtx) => this.visitExpression(exprCtx))
} else if (ctxArgsNameValueList) {
for (const nameValue of ctxArgsNameValueList.nameValue()) {
for (const nameValue of ctxArgsNameValueList.nameValue_list()) {
args.push(this.visitExpression(nameValue.expression()))

@@ -860,3 +845,3 @@ names.push(this._toText(nameValue.identifier()))

members: ctx
.variableDeclaration()
.variableDeclaration_list()
.map((x) => this.visitVariableDeclaration(x)),

@@ -898,3 +883,3 @@ }

let falseBody = null
if (ctx.statement().length > 1) {
if (ctx.statement_list().length > 1) {
falseBody = this.visitStatement(ctx.statement(1))

@@ -918,3 +903,3 @@ }

const ctxReturnParameters = ctx.returnParameters()
if (ctxReturnParameters !== undefined) {
if (ctxReturnParameters) {
returnParameters = this.visitReturnParameters(ctxReturnParameters)

@@ -924,3 +909,3 @@ }

const catchClauses = ctx
.catchClause()
.catchClause_list()
.map((exprCtx) => this.visitCatchClause(exprCtx))

@@ -957,3 +942,3 @@

const ctxIdentifier = ctx.identifier()
if (ctxIdentifier !== undefined) {
if (ctxIdentifier) {
kind = this._toText(ctxIdentifier)

@@ -1029,11 +1014,9 @@ }

keyType: this.visitMappingKey(ctx.mappingKey()),
keyName:
mappingKeyNameCtx === undefined
? null
: this.visitIdentifier(mappingKeyNameCtx.identifier()),
keyName: mappingKeyNameCtx
? this.visitIdentifier(mappingKeyNameCtx.identifier())
: null,
valueType: this.visitTypeName(ctx.typeName()),
valueName:
mappingValueNameCtx === undefined
? null
: this.visitIdentifier(mappingValueNameCtx.identifier()),
valueName: mappingValueNameCtx
? this.visitIdentifier(mappingValueNameCtx.identifier())
: null,
}

@@ -1053,3 +1036,3 @@

let isVirtual = false
if (ctx.VirtualKeyword().length > 0) {
if (ctx.VirtualKeyword_list().length > 0) {
isVirtual = true

@@ -1059,3 +1042,3 @@ }

let override
const overrideSpecifier = ctx.overrideSpecifier()
const overrideSpecifier = ctx.overrideSpecifier_list()
if (overrideSpecifier.length === 0) {

@@ -1065,3 +1048,3 @@ override = null

override = overrideSpecifier[0]
.userDefinedTypeName()
.userDefinedTypeName_list()
.map((x) => this.visitUserDefinedTypeName(x))

@@ -1072,3 +1055,3 @@ }

const blockCtx = ctx.block()
if (blockCtx !== undefined) {
if (blockCtx) {
body = this.visitBlock(blockCtx)

@@ -1106,7 +1089,7 @@ }

// primary expression
const primaryExpressionCtx = ctx.tryGetRuleContext(
0,
SP.PrimaryExpressionContext
)
if (primaryExpressionCtx === undefined) {
const primaryExpressionCtx = ctx.primaryExpression()
if (
primaryExpressionCtx === undefined ||
primaryExpressionCtx === null
) {
throw new Error(

@@ -1135,5 +1118,3 @@ 'Assertion error: primary expression should exist when children length is 1'

operator: op as AST.UnaryOp,
subExpression: this.visitExpression(
ctx.getRuleContext(0, SP.ExpressionContext)
),
subExpression: this.visitExpression(ctx.expression(0)),
isPrefix: true,

@@ -1151,5 +1132,3 @@ }

operator: op as AST.UnaryOp,
subExpression: this.visitExpression(
ctx.getRuleContext(0, SP.ExpressionContext)
),
subExpression: this.visitExpression(ctx.expression(0)),
isPrefix: false,

@@ -1169,5 +1148,3 @@ }

type: 'TupleExpression',
components: [
this.visitExpression(ctx.getRuleContext(0, SP.ExpressionContext)),
],
components: [this.visitExpression(ctx.expression(0))],
isArray: false,

@@ -1215,6 +1192,6 @@ }

.expressionList()!
.expression()
.expression_list()
.map((exprCtx) => this.visitExpression(exprCtx))
} else if (ctxArgs.nameValueList()) {
for (const nameValue of ctxArgs.nameValueList()!.nameValue()) {
for (const nameValue of ctxArgs.nameValueList()!.nameValue_list()) {
args.push(this.visitExpression(nameValue.expression()))

@@ -1242,3 +1219,3 @@ names.push(this._toText(nameValue.identifier()))

) {
if (ctx.getChild(2).text === ':') {
if (ctx.getChild(2).getText() === ':') {
const node: AST.IndexRangeAccess = {

@@ -1350,3 +1327,3 @@ type: 'IndexRangeAccess',

for (const nameValue of ctx.nameValue()) {
for (const nameValue of ctx.nameValue_list()) {
names.push(this._toText(nameValue.identifier()))

@@ -1369,4 +1346,3 @@ identifiers.push(this.visitIdentifier(nameValue.identifier()))

const type = this.visitTypeName(ctx.typeName())
const iden = ctx.identifier()
const name = this._toText(iden)
const name = this._toText(ctx.identifier())

@@ -1402,6 +1378,5 @@ const expression = this.visitExpression(ctx.expression())

type: 'ExpressionStatement',
expression:
ctx.expression() !== undefined
? this.visitExpression(ctx.expression()!)
: null,
expression: ctx.expression()
? this.visitExpression(ctx.expression()!)
: null,
},

@@ -1416,3 +1391,3 @@ body: this.visitStatement(ctx.statement()),

const parts = ctx
.HexLiteralFragment()
.HexLiteralFragment_list()
.map((x) => this._toText(x))

@@ -1449,3 +1424,3 @@ .map((x) => x.substring(4, x.length - 1))

.stringLiteral()!
.StringLiteralFragment()
.StringLiteralFragment_list()
.map((stringLiteralFragmentCtx) => {

@@ -1524,7 +1499,7 @@ let text = this._toText(stringLiteralFragmentCtx)!

const children = ctx.children!.slice(1, -1)
const identifiers = ctx.identifier()
const identifiers = ctx.identifier_list()
let i = 0
return this._mapCommasToNulls(children).map((idenOrNull) => {
return this._mapCommasToNulls(children).map((identifierOrNull) => {
// add a null for each empty value
if (!idenOrNull) {
if (identifierOrNull === null) {
return null

@@ -1554,3 +1529,3 @@ }

): Array<(AST.VariableDeclaration & WithMeta) | null> {
const variableDeclarations = ctx.variableDeclaration()
const variableDeclarations = ctx.variableDeclaration_list()
let i = 0

@@ -1595,7 +1570,7 @@ return this._mapCommasToNulls(ctx.children ?? []).map((declOrNull) => {

if (ctx.importDeclaration().length > 0) {
symbolAliases = ctx.importDeclaration().map((decl) => {
if (ctx.importDeclaration_list().length > 0) {
symbolAliases = ctx.importDeclaration_list().map((decl) => {
const symbol = this._toText(decl.identifier(0))
let alias = null
if (decl.identifier().length > 1) {
if (decl.identifier_list().length > 1) {
alias = this._toText(decl.identifier(1))

@@ -1605,6 +1580,6 @@ }

})
symbolAliasesIdentifiers = ctx.importDeclaration().map((decl) => {
symbolAliasesIdentifiers = ctx.importDeclaration_list().map((decl) => {
const symbolIdentifier = this.visitIdentifier(decl.identifier(0))
let aliasIdentifier = null
if (decl.identifier().length > 1) {
if (decl.identifier_list().length > 1) {
aliasIdentifier = this.visitIdentifier(decl.identifier(1))

@@ -1618,3 +1593,3 @@ }

} else {
const identifierCtxList = ctx.identifier()
const identifierCtxList = ctx.identifier_list()
if (identifierCtxList.length === 0) {

@@ -1660,3 +1635,3 @@ // nothing to do

public buildEventParameterList(ctx: SP.EventParameterListContext) {
return ctx.eventParameter().map((paramCtx) => {
return ctx.eventParameter_list().map((paramCtx) => {
const type = this.visit(paramCtx.typeName())

@@ -1685,3 +1660,3 @@ const identifier = paramCtx.identifier()

): (AST.VariableDeclaration & WithMeta)[] {
return ctx.parameter().map((paramCtx) => this.visitParameter(paramCtx))
return ctx.parameter_list().map((paramCtx) => this.visitParameter(paramCtx))
}

@@ -1698,3 +1673,3 @@

const flag = ctx.inlineAssemblyStatementFlag()
if (flag !== undefined) {
if (flag) {
const flagString = this._toText(flag.stringLiteral())

@@ -1718,3 +1693,3 @@ flags.push(flagString.slice(1, flagString.length - 1))

const operations = ctx
.assemblyItem()
.assemblyItem_list()
.map((item) => this.visitAssemblyItem(item))

@@ -1778,3 +1753,3 @@

const args = ctx
.assemblyExpression()
.assemblyExpression_list()
.map((assemblyExpr) => this.visitAssemblyExpression(assemblyExpr))

@@ -1847,3 +1822,3 @@

expression: this.visitAssemblyExpression(ctx.assemblyExpression()),
cases: ctx.assemblyCase().map((c) => this.visitAssemblyCase(c)),
cases: ctx.assemblyCase_list().map((c) => this.visitAssemblyCase(c)),
}

@@ -1886,3 +1861,3 @@

.assemblyIdentifierList()!
.identifier()!
.identifier_list()!
.map((x) => this.visitIdentifier(x))

@@ -1892,3 +1867,3 @@ }

let expression: AST.AssemblyExpression | null = null
if (ctx.assemblyExpression() !== undefined) {
if (ctx.assemblyExpression()) {
expression = this.visitAssemblyExpression(ctx.assemblyExpression()!)

@@ -1910,8 +1885,7 @@ }

const ctxAssemblyIdentifierList = ctx.assemblyIdentifierList()
const args =
ctxAssemblyIdentifierList !== undefined
? ctxAssemblyIdentifierList
.identifier()
.map((x) => this.visitIdentifier(x))
: []
const args = ctxAssemblyIdentifierList
? ctxAssemblyIdentifierList
.identifier_list()
.map((x) => this.visitIdentifier(x))
: []

@@ -1922,3 +1896,3 @@ const ctxAssemblyFunctionReturns = ctx.assemblyFunctionReturns()

.assemblyIdentifierList()!
.identifier()
.identifier_list()
.map((x) => this.visitIdentifier(x))

@@ -1950,3 +1924,3 @@ : []

.assemblyIdentifierList()!
.identifier()
.identifier_list()
.map((x) => this.visitIdentifier(x))

@@ -1967,3 +1941,3 @@ }

): AST.AssemblyMemberAccess & WithMeta {
const [accessed, member] = ctx.identifier()
const [accessed, member] = ctx.identifier_list()
const node: AST.AssemblyMemberAccess = {

@@ -2045,5 +2019,5 @@ type: 'AssemblyMemberAccess',

private _toText(ctx: ParserRuleContext | ParseTree): string {
const text = ctx.text
if (text === undefined) {
throw new Error('Assertion error: text should never be undefiend')
const text = ctx.getText()
if (text === undefined || text === null) {
throw new Error('Assertion error: text should never be undefined')
}

@@ -2057,12 +2031,12 @@

): AST.FunctionDefinition['stateMutability'] {
if (ctx.PureKeyword() !== undefined) {
if (ctx.PureKeyword()) {
return 'pure'
}
if (ctx.ConstantKeyword() !== undefined) {
if (ctx.ConstantKeyword()) {
return 'constant'
}
if (ctx.PayableKeyword() !== undefined) {
if (ctx.PayableKeyword()) {
return 'payable'
}
if (ctx.ViewKeyword() !== undefined) {
if (ctx.ViewKeyword()) {
return 'view'

@@ -2078,9 +2052,7 @@ }

line: ctx.start.line,
column: ctx.start.charPositionInLine,
column: ctx.start.column,
},
end: {
line: ctx.stop ? ctx.stop.line : ctx.start.line,
column: ctx.stop
? ctx.stop.charPositionInLine
: ctx.start.charPositionInLine,
column: ctx.stop ? ctx.stop.column : ctx.start.column,
},

@@ -2092,3 +2064,3 @@ }

_range(ctx: ParserRuleContext): [number, number] {
return [ctx.start.startIndex, ctx.stop?.stopIndex ?? ctx.start.startIndex]
return [ctx.start.start, ctx.stop?.stop ?? ctx.start.start]
}

@@ -2095,0 +2067,0 @@

@@ -1,4 +0,4 @@

import antlr4 from 'antlr4'
import { ErrorListener as AntlrErrorListener } from 'antlr4'
class ErrorListener extends antlr4.error.ErrorListener {
class ErrorListener extends AntlrErrorListener<any> {
private _errors: any[]

@@ -5,0 +5,0 @@

@@ -1,5 +0,5 @@

import { ANTLRInputStream, CommonTokenStream } from 'antlr4ts'
import { CharStream, CommonTokenStream } from 'antlr4'
import { SolidityLexer } from './antlr/SolidityLexer'
import { SolidityParser } from './antlr/SolidityParser'
import SolidityLexer from './antlr/SolidityLexer'
import SolidityParser from './antlr/SolidityParser'
import {

@@ -46,3 +46,3 @@ ASTNode,

export function tokenize(input: string, options: TokenizeOptions = {}): any {
const inputStream = new ANTLRInputStream(input)
const inputStream = new CharStream(input)
const lexer = new SolidityLexer(inputStream)

@@ -54,3 +54,3 @@

export function parse(input: string, options: ParseOptions = {}): ParseResult {
const inputStream = new ANTLRInputStream(input)
const inputStream = new CharStream(input)
const lexer = new SolidityLexer(inputStream)

@@ -66,3 +66,3 @@ const tokenStream = new CommonTokenStream(lexer)

parser.addErrorListener(listener)
parser.buildParseTree = true
parser.buildParseTrees = true

@@ -83,3 +83,3 @@ const sourceUnit = parser.sourceUnit()

if (options.tokens === true) {
tokenList = buildTokenList(tokenStream.getTokens(), options)
tokenList = buildTokenList(tokenStream.tokens, options)
}

@@ -86,0 +86,0 @@

@@ -1,6 +0,5 @@

import { Token, AntlrToken, TokenizeOptions } from './types'
import untypedTokens from './tokens-string'
import { Token as AntlrToken } from 'antlr4'
import { Token, TokenizeOptions } from './types'
import { tokens } from './antlr/solidity-tokens'
const tokens = untypedTokens as string
const TYPE_TOKENS = [

@@ -18,17 +17,2 @@ 'var',

function rsplit(str: string, value: string) {
const index = str.lastIndexOf(value)
return [str.substring(0, index), str.substring(index + 1, str.length)]
}
function normalizeTokenType(value: string) {
if (value.endsWith("'")) {
value = value.substring(0, value.length - 1)
}
if (value.startsWith("'")) {
value = value.substring(1, value.length)
}
return value
}
function getTokenType(value: string) {

@@ -60,12 +44,2 @@ if (value === 'Identifier' || value === 'from') {

function getTokenTypeMap() {
return tokens
.split('\n')
.map((line) => rsplit(line, '='))
.reduce((acum: { [key: number]: string }, [value, key]) => {
acum[parseInt(key, 10)] = normalizeTokenType(value)
return acum
}, {})
}
export function buildTokenList(

@@ -75,16 +49,14 @@ tokensArg: AntlrToken[],

): Token[] {
const tokenTypes = getTokenTypeMap()
const result = tokensArg.map((token) => {
const type = getTokenType(tokenTypes[token.type])
const type = getTokenType(tokens[token.type.toString()])
const node: Token = { type, value: token.text }
if (options.range === true) {
node.range = [token.startIndex, token.stopIndex + 1]
node.range = [token.start, token.stop + 1]
}
if (options.loc === true) {
node.loc = {
start: { line: token.line, column: token.charPositionInLine },
start: { line: token.line, column: token.column },
end: {
line: token.line,
column: token.charPositionInLine + (token.text?.length ?? 0),
column: token.column + (token.text?.length ?? 0),
},

@@ -91,0 +63,0 @@ }

@@ -1,2 +0,1 @@

import { Token as Antlr4TsToken } from 'antlr4ts'
export interface Node {

@@ -6,4 +5,2 @@ type: string

export type AntlrToken = Antlr4TsToken
export interface TokenizeOptions {

@@ -10,0 +7,0 @@ range?: boolean

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc