From 0eb1244ae37057ba3f434681aa35d2da08b0d633 Mon Sep 17 00:00:00 2001 From: sam bacha Date: Thu, 27 Jul 2023 22:29:11 -0700 Subject: [PATCH 1/7] combined updates (Consensys#1) (#1) Co-authored-by: cl --- .github/workflows/python.yml | 32 + .gitignore | 2 + LICENSE.txt | 22 + scripts/antlr4.sh | 21 +- setup.py | 27 +- solidity-antlr4 | 2 +- solidity_parser/parser.py | 14 +- .../solidity_antlr4/Solidity.interp | 32 +- .../solidity_antlr4/Solidity.tokens | 250 +- .../solidity_antlr4/SolidityLexer.interp | 26 +- .../solidity_antlr4/SolidityLexer.py | 1704 ++++--- .../solidity_antlr4/SolidityLexer.tokens | 250 +- .../solidity_antlr4/SolidityListener.py | 76 +- .../solidity_antlr4/SolidityParser.py | 4179 +++++++++-------- .../solidity_antlr4/SolidityVisitor.py | 42 +- 15 files changed, 3510 insertions(+), 3169 deletions(-) create mode 100644 .github/workflows/python.yml create mode 100644 LICENSE.txt mode change 100644 => 100755 scripts/antlr4.sh diff --git a/.github/workflows/python.yml b/.github/workflows/python.yml new file mode 100644 index 0000000..ff68d53 --- /dev/null +++ b/.github/workflows/python.yml @@ -0,0 +1,32 @@ +name: Python package + +on: [push] + +jobs: + build: + + runs-on: ubuntu-latest + strategy: + matrix: + python-version: ["3.7", "3.8", "3.9", "3.10", "3.11"] + + steps: + - uses: actions/checkout@v3 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install ruff pytest + if [ -f requirements.txt ]; then pip install -r requirements.txt; fi + - name: Lint with ruff + run: | + # stop the build if there are Python syntax errors or undefined names + ruff --format=github --select=E9,F63,F7,F82 --target-version=py37 . + # default set of ruff rules with GitHub Annotations + ruff --format=github --target-version=py37 . + - name: Test with pytest + run: | + pytest diff --git a/.gitignore b/.gitignore index 0447b8b..c21c37c 100644 --- a/.gitignore +++ b/.gitignore @@ -114,3 +114,5 @@ dmypy.json # Pyre type checker .pyre/ +.DS_Store +.env diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..4842e7d --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,22 @@ +MIT License + +Copyright (c) 2020 Consensys, Inc. +Copyright (c) 2023 Manifold Finance, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/scripts/antlr4.sh b/scripts/antlr4.sh old mode 100644 new mode 100755 index 26169bc..5187cf3 --- a/scripts/antlr4.sh +++ b/scripts/antlr4.sh @@ -1,11 +1,26 @@ -#!/usr/bin/env sh - +#!/usr/bin/env bash set -o errexit -antlr -Dlanguage=Python3 solidity-antlr4/Solidity.g4 -o src -visitor +# antlr -Dlanguage=Python3 solidity-antlr4/Solidity.g4 -o src -visitor + + +git submodule sync --recursive && git submodule update --init --recursive +git submodule foreach --recursive git clean -ffdx +git submodule update --remote --rebase solidity-antlr4 + + +bash solidity-antlr4/build.sh +sleep 1 + +[ ! -f ./solidity-antlr4/antlr4.jar ] && { echo "ANTLR4 Jar does not exist."; exit 1; } + +chmod +x ./solidity-antlr4/antlr4.jar +java -jar ./solidity-antlr4/antlr4.jar -Dlanguage=Python3 solidity-antlr4/Solidity.g4 -o src -visitor || exit 1 mv src/solidity-antlr4/* solidity_parser/solidity_antlr4 rm -rf src/solidity-antlr4 touch solidity_parser/solidity_antlr4/__init__.py touch solidity_parser/solidity_antlr4/__AUTOGENERATED__ +echo "Autogeneration and update FINISHED" +exit 0 diff --git a/setup.py b/setup.py index 1632585..e962ecf 100644 --- a/setup.py +++ b/setup.py @@ -1,7 +1,7 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # -*- coding: utf-8 -*- -''' +""" deps (requires up2date version): *) pip install --upgrade pip wheel setuptools twine @@ -9,7 +9,7 @@ 1) #> python setup.py sdist bdist_wheel 2) #> twine upload dist/* #; #optional --repository or --repository-url -''' +""" import os from setuptools import setup, find_packages @@ -18,8 +18,8 @@ def read(fname): return open(os.path.join(os.path.dirname(__file__), fname)).read() -version = "0.1.1" -name = "solidity-parser" +version = "0.1.3" +name = "python-solidity-parser" setup( name=name, @@ -28,15 +28,16 @@ def read(fname): author="tintinweb", author_email="tintinweb@oststrom.com", description=( - "A Solidity parser for Python built on top of a robust ANTLR4 grammar"), + "A Solidity parser for Python built on top of a robust ANTLR4 grammar" + ), license="MIT", - keywords=["solidity","parser","antlr"], - url="https://github.com/consensys/python-%s/"%name, - download_url="https://github.com/consensys/python-%s/tarball/v%s"%(name, version), + keywords=["solidity", "parser", "antlr"], + url="https://github.com/consensys/python-%s/" % name, + download_url="https://github.com/consensys/python-%s/tarball/v%s" % (name, version), long_description=read("README.md") if os.path.isfile("README.md") else "", - long_description_content_type='text/markdown', - #python setup.py register -r https://testpypi.python.org/pypi + long_description_content_type="text/markdown", + # python setup.py register -r https://testpypi.python.org/pypi install_requires=["antlr4-python3-runtime==4.9.3"], - #test_suite="nose.collector", - #tests_require=["nose"], + # test_suite="nose.collector", + # tests_require=["nose"], ) diff --git a/solidity-antlr4 b/solidity-antlr4 index b6b34ca..1048147 160000 --- a/solidity-antlr4 +++ b/solidity-antlr4 @@ -1 +1 @@ -Subproject commit b6b34ca743ba04cc6f976413bc175b2175aa0bc2 +Subproject commit 104814708338d8d20e4e3f2deda64c557b7b2756 diff --git a/solidity_parser/parser.py b/solidity_parser/parser.py index 10fb82f..672786b 100644 --- a/solidity_parser/parser.py +++ b/solidity_parser/parser.py @@ -181,7 +181,8 @@ def visitFunctionDefinition(self, ctx: SolidityParser.FunctionDefinitionContext) elif fd.identifier(): name = fd.identifier().getText() else: - name = ctx.getText() + name = '' # handle old style fallback function: function(){ ... } + isFallback = True parameters = self.visit(ctx.parameterList()) returnParameters = self.visit(ctx.returnParameters()) if ctx.returnParameters() else [] @@ -744,9 +745,11 @@ def visitVariableDeclarationList(self, ctx: SolidityParser.VariableDeclarationLi if decl == None: return None + ident = decl.identifier() + name = ident and ident.getText() or '_' result.append(self._createNode(ctx=ctx, type='VariableDeclaration', - name=decl.identifier().getText(), + name=name, typeName=self.visit(decl.typeName()), isStateVar=False, isIndexed=False, @@ -845,9 +848,14 @@ def visitAssemblyExpression(self, ctx): return self.visit(ctx.getChild(0)) def visitAssemblyMember(self, ctx): + if type(ctx.identifier()) == list: + # handle the case, eg. x.slot + name = ctx.identifier()[0].getText() + else: + name = ctx.identifier().getText() return Node(ctx=ctx, type='AssemblyMember', - name=ctx.identifier().getText()) + name=name) def visitAssemblyCall(self, ctx): functionName = ctx.getChild(0).getText() diff --git a/solidity_parser/solidity_antlr4/Solidity.interp b/solidity_parser/solidity_antlr4/Solidity.interp index 4ef6e32..ce9ffb8 100644 --- a/solidity_parser/solidity_antlr4/Solidity.interp +++ b/solidity_parser/solidity_antlr4/Solidity.interp @@ -2,6 +2,7 @@ token literal names: null 'pragma' ';' +'*' '||' '^' '~' @@ -12,7 +13,6 @@ null '=' 'as' 'import' -'*' 'from' '{' ',' @@ -27,6 +27,14 @@ null 'error' 'using' 'for' +'|' +'&' +'+' +'-' +'/' +'%' +'==' +'!=' 'struct' 'modifier' 'function' @@ -62,20 +70,11 @@ null '--' 'new' ':' -'+' -'-' -'after' 'delete' '!' '**' -'/' -'%' '<<' '>>' -'&' -'|' -'==' -'!=' '&&' '?' '|=' @@ -124,6 +123,7 @@ null 'pure' 'type' 'view' +'global' 'constructor' 'fallback' 'receive' @@ -232,7 +232,6 @@ null null null null -null Int Uint Byte @@ -260,6 +259,7 @@ VirtualKeyword PureKeyword TypeKeyword ViewKeyword +GlobalKeyword ConstructorKeyword FallbackKeyword ReceiveKeyword @@ -289,6 +289,9 @@ fileLevelConstant customErrorDefinition typeDefinition usingForDeclaration +usingForObject +usingForObjectDirective +userDefinableOperators structDefinition modifierDefinition modifierInvocation @@ -310,6 +313,8 @@ typeName userDefinedTypeName mappingKey mapping +mappingKeyName +mappingValueName functionTypeName storageLocation stateMutability @@ -324,6 +329,7 @@ simpleStatement uncheckedStatement forStatement inlineAssemblyStatement +inlineAssemblyStatementFlag doWhileStatement continueStatement breakStatement @@ -360,9 +366,7 @@ assemblyFunctionReturns assemblyFor assemblyIf assemblyLiteral -subAssembly tupleExpression -typeNameExpression numberLiteral identifier hexLiteral @@ -371,4 +375,4 @@ stringLiteral atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 135, 1133, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 4, 85, 9, 85, 4, 86, 9, 86, 4, 87, 9, 87, 4, 88, 9, 88, 4, 89, 9, 89, 4, 90, 9, 90, 4, 91, 9, 91, 4, 92, 9, 92, 4, 93, 9, 93, 4, 94, 9, 94, 4, 95, 9, 95, 4, 96, 9, 96, 4, 97, 9, 97, 4, 98, 9, 98, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 7, 2, 206, 10, 2, 12, 2, 14, 2, 209, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 5, 3, 5, 5, 5, 222, 10, 5, 3, 6, 3, 6, 5, 6, 226, 10, 6, 3, 6, 7, 6, 229, 10, 6, 12, 6, 14, 6, 232, 11, 6, 3, 7, 3, 7, 3, 8, 5, 8, 237, 10, 8, 3, 8, 3, 8, 5, 8, 241, 10, 8, 3, 8, 5, 8, 244, 10, 8, 3, 9, 3, 9, 3, 9, 5, 9, 249, 10, 9, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 255, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 262, 10, 10, 3, 10, 3, 10, 5, 10, 266, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 7, 10, 277, 10, 10, 12, 10, 14, 10, 280, 11, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 287, 10, 10, 3, 11, 3, 11, 3, 12, 5, 12, 292, 10, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 7, 12, 300, 10, 12, 12, 12, 14, 12, 303, 11, 12, 5, 12, 305, 10, 12, 3, 12, 3, 12, 7, 12, 309, 10, 12, 12, 12, 14, 12, 312, 11, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 5, 13, 319, 10, 13, 3, 13, 5, 13, 322, 10, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 333, 10, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 7, 15, 342, 10, 15, 12, 15, 14, 15, 345, 11, 15, 3, 15, 3, 15, 3, 15, 5, 15, 350, 10, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 5, 19, 377, 10, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 7, 20, 389, 10, 20, 12, 20, 14, 20, 392, 11, 20, 5, 20, 394, 10, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 5, 21, 401, 10, 21, 3, 21, 3, 21, 7, 21, 405, 10, 21, 12, 21, 14, 21, 408, 11, 21, 3, 21, 3, 21, 5, 21, 412, 10, 21, 3, 22, 3, 22, 3, 22, 5, 22, 417, 10, 22, 3, 22, 5, 22, 420, 10, 22, 3, 23, 3, 23, 3, 23, 3, 23, 5, 23, 426, 10, 23, 3, 23, 3, 23, 5, 23, 430, 10, 23, 3, 24, 3, 24, 5, 24, 434, 10, 24, 3, 24, 3, 24, 3, 24, 5, 24, 439, 10, 24, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 7, 26, 452, 10, 26, 12, 26, 14, 26, 455, 11, 26, 3, 27, 3, 27, 3, 27, 3, 27, 5, 27, 461, 10, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 5, 29, 471, 10, 29, 3, 29, 3, 29, 7, 29, 475, 10, 29, 12, 29, 14, 29, 478, 11, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 7, 30, 486, 10, 30, 12, 30, 14, 30, 489, 11, 30, 5, 30, 491, 10, 30, 3, 30, 3, 30, 3, 31, 3, 31, 5, 31, 497, 10, 31, 3, 31, 5, 31, 500, 10, 31, 3, 32, 3, 32, 3, 32, 3, 32, 7, 32, 506, 10, 32, 12, 32, 14, 32, 509, 11, 32, 5, 32, 511, 10, 32, 3, 32, 3, 32, 3, 33, 3, 33, 5, 33, 517, 10, 33, 3, 33, 5, 33, 520, 10, 33, 3, 34, 3, 34, 3, 34, 3, 34, 7, 34, 526, 10, 34, 12, 34, 14, 34, 529, 11, 34, 5, 34, 531, 10, 34, 3, 34, 3, 34, 3, 35, 3, 35, 5, 35, 537, 10, 35, 3, 36, 3, 36, 5, 36, 541, 10, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 5, 37, 552, 10, 37, 3, 37, 3, 37, 3, 37, 5, 37, 557, 10, 37, 3, 37, 7, 37, 560, 10, 37, 12, 37, 14, 37, 563, 11, 37, 3, 38, 3, 38, 3, 38, 7, 38, 568, 10, 38, 12, 38, 14, 38, 571, 11, 38, 3, 39, 3, 39, 5, 39, 575, 10, 39, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 7, 41, 589, 10, 41, 12, 41, 14, 41, 592, 11, 41, 3, 41, 3, 41, 5, 41, 596, 10, 41, 3, 42, 3, 42, 3, 43, 3, 43, 3, 44, 3, 44, 7, 44, 604, 10, 44, 12, 44, 14, 44, 607, 11, 44, 3, 44, 3, 44, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 5, 45, 626, 10, 45, 3, 46, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 5, 47, 638, 10, 47, 3, 48, 3, 48, 3, 48, 5, 48, 643, 10, 48, 3, 48, 3, 48, 6, 48, 647, 10, 48, 13, 48, 14, 48, 648, 3, 49, 3, 49, 5, 49, 653, 10, 49, 3, 49, 5, 49, 656, 10, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 5, 51, 668, 10, 51, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 53, 5, 53, 677, 10, 53, 3, 53, 3, 53, 5, 53, 681, 10, 53, 3, 53, 5, 53, 684, 10, 53, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 5, 54, 691, 10, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 5, 58, 711, 10, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 5, 62, 733, 10, 62, 3, 62, 3, 62, 5, 62, 737, 10, 62, 3, 62, 3, 62, 3, 63, 5, 63, 742, 10, 63, 3, 63, 3, 63, 5, 63, 746, 10, 63, 7, 63, 748, 10, 63, 12, 63, 14, 63, 751, 11, 63, 3, 64, 3, 64, 5, 64, 755, 10, 64, 3, 64, 7, 64, 758, 10, 64, 12, 64, 14, 64, 761, 11, 64, 3, 64, 5, 64, 764, 10, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 5, 66, 788, 10, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 5, 66, 842, 10, 66, 3, 66, 3, 66, 5, 66, 846, 10, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 7, 66, 862, 10, 66, 12, 66, 14, 66, 865, 11, 66, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 5, 67, 874, 10, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 5, 67, 882, 10, 67, 5, 67, 884, 10, 67, 3, 68, 3, 68, 3, 68, 7, 68, 889, 10, 68, 12, 68, 14, 68, 892, 11, 68, 3, 69, 3, 69, 3, 69, 7, 69, 897, 10, 69, 12, 69, 14, 69, 900, 11, 69, 3, 69, 5, 69, 903, 10, 69, 3, 70, 3, 70, 3, 70, 3, 70, 3, 71, 3, 71, 5, 71, 911, 10, 71, 3, 71, 3, 71, 5, 71, 915, 10, 71, 5, 71, 917, 10, 71, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 73, 3, 73, 7, 73, 926, 10, 73, 12, 73, 14, 73, 929, 11, 73, 3, 73, 3, 73, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 5, 74, 951, 10, 74, 3, 75, 3, 75, 3, 75, 5, 75, 956, 10, 75, 3, 76, 3, 76, 3, 76, 3, 76, 3, 77, 3, 77, 3, 77, 3, 77, 5, 77, 966, 10, 77, 3, 77, 3, 77, 5, 77, 970, 10, 77, 3, 77, 3, 77, 7, 77, 974, 10, 77, 12, 77, 14, 77, 977, 11, 77, 3, 77, 5, 77, 980, 10, 77, 3, 78, 3, 78, 3, 78, 3, 78, 5, 78, 986, 10, 78, 3, 79, 3, 79, 3, 79, 3, 79, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 5, 80, 998, 10, 80, 3, 81, 3, 81, 3, 81, 7, 81, 1003, 10, 81, 12, 81, 14, 81, 1006, 11, 81, 3, 82, 3, 82, 3, 82, 3, 83, 3, 83, 3, 83, 3, 84, 3, 84, 3, 84, 7, 84, 1017, 10, 84, 12, 84, 14, 84, 1020, 11, 84, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 5, 85, 1028, 10, 85, 3, 86, 3, 86, 3, 86, 3, 86, 5, 86, 1034, 10, 86, 3, 86, 3, 86, 5, 86, 1038, 10, 86, 3, 86, 3, 86, 3, 87, 3, 87, 3, 87, 3, 88, 3, 88, 3, 88, 5, 88, 1048, 10, 88, 3, 88, 3, 88, 3, 88, 5, 88, 1053, 10, 88, 3, 88, 3, 88, 3, 89, 3, 89, 3, 89, 3, 89, 3, 90, 3, 90, 3, 90, 3, 90, 5, 90, 1065, 10, 90, 3, 91, 3, 91, 3, 91, 3, 91, 3, 92, 3, 92, 5, 92, 1073, 10, 92, 3, 92, 3, 92, 5, 92, 1077, 10, 92, 7, 92, 1079, 10, 92, 12, 92, 14, 92, 1082, 11, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 7, 92, 1089, 10, 92, 12, 92, 14, 92, 1092, 11, 92, 5, 92, 1094, 10, 92, 3, 92, 5, 92, 1097, 10, 92, 3, 93, 3, 93, 5, 93, 1101, 10, 93, 3, 94, 3, 94, 5, 94, 1105, 10, 94, 3, 95, 3, 95, 3, 96, 6, 96, 1110, 10, 96, 13, 96, 14, 96, 1111, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 7, 97, 1119, 10, 97, 12, 97, 14, 97, 1122, 11, 97, 3, 97, 3, 97, 5, 97, 1126, 10, 97, 3, 98, 6, 98, 1129, 10, 98, 13, 98, 14, 98, 1130, 3, 98, 2, 4, 72, 130, 99, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 2, 17, 3, 2, 6, 12, 3, 2, 21, 23, 3, 2, 42, 44, 6, 2, 113, 113, 120, 120, 124, 124, 126, 126, 5, 2, 38, 38, 57, 60, 100, 104, 3, 2, 61, 62, 3, 2, 65, 66, 3, 2, 67, 68, 4, 2, 15, 15, 71, 72, 3, 2, 73, 74, 3, 2, 8, 11, 3, 2, 77, 78, 4, 2, 12, 12, 81, 90, 3, 2, 106, 107, 11, 2, 16, 16, 27, 27, 44, 44, 56, 56, 98, 98, 116, 116, 120, 120, 127, 127, 129, 130, 2, 1258, 2, 207, 3, 2, 2, 2, 4, 212, 3, 2, 2, 2, 6, 217, 3, 2, 2, 2, 8, 221, 3, 2, 2, 2, 10, 223, 3, 2, 2, 2, 12, 233, 3, 2, 2, 2, 14, 243, 3, 2, 2, 2, 16, 245, 3, 2, 2, 2, 18, 286, 3, 2, 2, 2, 20, 288, 3, 2, 2, 2, 22, 291, 3, 2, 2, 2, 24, 315, 3, 2, 2, 2, 26, 332, 3, 2, 2, 2, 28, 334, 3, 2, 2, 2, 30, 353, 3, 2, 2, 2, 32, 360, 3, 2, 2, 2, 34, 365, 3, 2, 2, 2, 36, 371, 3, 2, 2, 2, 38, 380, 3, 2, 2, 2, 40, 397, 3, 2, 2, 2, 42, 413, 3, 2, 2, 2, 44, 421, 3, 2, 2, 2, 46, 438, 3, 2, 2, 2, 48, 440, 3, 2, 2, 2, 50, 453, 3, 2, 2, 2, 52, 456, 3, 2, 2, 2, 54, 464, 3, 2, 2, 2, 56, 466, 3, 2, 2, 2, 58, 481, 3, 2, 2, 2, 60, 494, 3, 2, 2, 2, 62, 501, 3, 2, 2, 2, 64, 514, 3, 2, 2, 2, 66, 521, 3, 2, 2, 2, 68, 534, 3, 2, 2, 2, 70, 538, 3, 2, 2, 2, 72, 551, 3, 2, 2, 2, 74, 564, 3, 2, 2, 2, 76, 574, 3, 2, 2, 2, 78, 576, 3, 2, 2, 2, 80, 583, 3, 2, 2, 2, 82, 597, 3, 2, 2, 2, 84, 599, 3, 2, 2, 2, 86, 601, 3, 2, 2, 2, 88, 625, 3, 2, 2, 2, 90, 627, 3, 2, 2, 2, 92, 630, 3, 2, 2, 2, 94, 639, 3, 2, 2, 2, 96, 650, 3, 2, 2, 2, 98, 659, 3, 2, 2, 2, 100, 667, 3, 2, 2, 2, 102, 669, 3, 2, 2, 2, 104, 672, 3, 2, 2, 2, 106, 688, 3, 2, 2, 2, 108, 694, 3, 2, 2, 2, 110, 702, 3, 2, 2, 2, 112, 705, 3, 2, 2, 2, 114, 708, 3, 2, 2, 2, 116, 714, 3, 2, 2, 2, 118, 717, 3, 2, 2, 2, 120, 721, 3, 2, 2, 2, 122, 732, 3, 2, 2, 2, 124, 741, 3, 2, 2, 2, 126, 752, 3, 2, 2, 2, 128, 767, 3, 2, 2, 2, 130, 787, 3, 2, 2, 2, 132, 883, 3, 2, 2, 2, 134, 885, 3, 2, 2, 2, 136, 893, 3, 2, 2, 2, 138, 904, 3, 2, 2, 2, 140, 916, 3, 2, 2, 2, 142, 918, 3, 2, 2, 2, 144, 923, 3, 2, 2, 2, 146, 950, 3, 2, 2, 2, 148, 955, 3, 2, 2, 2, 150, 957, 3, 2, 2, 2, 152, 965, 3, 2, 2, 2, 154, 981, 3, 2, 2, 2, 156, 987, 3, 2, 2, 2, 158, 997, 3, 2, 2, 2, 160, 999, 3, 2, 2, 2, 162, 1007, 3, 2, 2, 2, 164, 1010, 3, 2, 2, 2, 166, 1013, 3, 2, 2, 2, 168, 1027, 3, 2, 2, 2, 170, 1029, 3, 2, 2, 2, 172, 1041, 3, 2, 2, 2, 174, 1044, 3, 2, 2, 2, 176, 1056, 3, 2, 2, 2, 178, 1064, 3, 2, 2, 2, 180, 1066, 3, 2, 2, 2, 182, 1096, 3, 2, 2, 2, 184, 1100, 3, 2, 2, 2, 186, 1102, 3, 2, 2, 2, 188, 1106, 3, 2, 2, 2, 190, 1109, 3, 2, 2, 2, 192, 1113, 3, 2, 2, 2, 194, 1128, 3, 2, 2, 2, 196, 206, 5, 4, 3, 2, 197, 206, 5, 18, 10, 2, 198, 206, 5, 22, 12, 2, 199, 206, 5, 56, 29, 2, 200, 206, 5, 38, 20, 2, 201, 206, 5, 44, 23, 2, 202, 206, 5, 30, 16, 2, 203, 206, 5, 32, 17, 2, 204, 206, 5, 34, 18, 2, 205, 196, 3, 2, 2, 2, 205, 197, 3, 2, 2, 2, 205, 198, 3, 2, 2, 2, 205, 199, 3, 2, 2, 2, 205, 200, 3, 2, 2, 2, 205, 201, 3, 2, 2, 2, 205, 202, 3, 2, 2, 2, 205, 203, 3, 2, 2, 2, 205, 204, 3, 2, 2, 2, 206, 209, 3, 2, 2, 2, 207, 205, 3, 2, 2, 2, 207, 208, 3, 2, 2, 2, 208, 210, 3, 2, 2, 2, 209, 207, 3, 2, 2, 2, 210, 211, 7, 2, 2, 3, 211, 3, 3, 2, 2, 2, 212, 213, 7, 3, 2, 2, 213, 214, 5, 6, 4, 2, 214, 215, 5, 8, 5, 2, 215, 216, 7, 4, 2, 2, 216, 5, 3, 2, 2, 2, 217, 218, 5, 188, 95, 2, 218, 7, 3, 2, 2, 2, 219, 222, 5, 10, 6, 2, 220, 222, 5, 130, 66, 2, 221, 219, 3, 2, 2, 2, 221, 220, 3, 2, 2, 2, 222, 9, 3, 2, 2, 2, 223, 230, 5, 14, 8, 2, 224, 226, 7, 5, 2, 2, 225, 224, 3, 2, 2, 2, 225, 226, 3, 2, 2, 2, 226, 227, 3, 2, 2, 2, 227, 229, 5, 14, 8, 2, 228, 225, 3, 2, 2, 2, 229, 232, 3, 2, 2, 2, 230, 228, 3, 2, 2, 2, 230, 231, 3, 2, 2, 2, 231, 11, 3, 2, 2, 2, 232, 230, 3, 2, 2, 2, 233, 234, 9, 2, 2, 2, 234, 13, 3, 2, 2, 2, 235, 237, 5, 12, 7, 2, 236, 235, 3, 2, 2, 2, 236, 237, 3, 2, 2, 2, 237, 238, 3, 2, 2, 2, 238, 244, 7, 132, 2, 2, 239, 241, 5, 12, 7, 2, 240, 239, 3, 2, 2, 2, 240, 241, 3, 2, 2, 2, 241, 242, 3, 2, 2, 2, 242, 244, 7, 106, 2, 2, 243, 236, 3, 2, 2, 2, 243, 240, 3, 2, 2, 2, 244, 15, 3, 2, 2, 2, 245, 248, 5, 188, 95, 2, 246, 247, 7, 13, 2, 2, 247, 249, 5, 188, 95, 2, 248, 246, 3, 2, 2, 2, 248, 249, 3, 2, 2, 2, 249, 17, 3, 2, 2, 2, 250, 251, 7, 14, 2, 2, 251, 254, 5, 20, 11, 2, 252, 253, 7, 13, 2, 2, 253, 255, 5, 188, 95, 2, 254, 252, 3, 2, 2, 2, 254, 255, 3, 2, 2, 2, 255, 256, 3, 2, 2, 2, 256, 257, 7, 4, 2, 2, 257, 287, 3, 2, 2, 2, 258, 261, 7, 14, 2, 2, 259, 262, 7, 15, 2, 2, 260, 262, 5, 188, 95, 2, 261, 259, 3, 2, 2, 2, 261, 260, 3, 2, 2, 2, 262, 265, 3, 2, 2, 2, 263, 264, 7, 13, 2, 2, 264, 266, 5, 188, 95, 2, 265, 263, 3, 2, 2, 2, 265, 266, 3, 2, 2, 2, 266, 267, 3, 2, 2, 2, 267, 268, 7, 16, 2, 2, 268, 269, 5, 20, 11, 2, 269, 270, 7, 4, 2, 2, 270, 287, 3, 2, 2, 2, 271, 272, 7, 14, 2, 2, 272, 273, 7, 17, 2, 2, 273, 278, 5, 16, 9, 2, 274, 275, 7, 18, 2, 2, 275, 277, 5, 16, 9, 2, 276, 274, 3, 2, 2, 2, 277, 280, 3, 2, 2, 2, 278, 276, 3, 2, 2, 2, 278, 279, 3, 2, 2, 2, 279, 281, 3, 2, 2, 2, 280, 278, 3, 2, 2, 2, 281, 282, 7, 19, 2, 2, 282, 283, 7, 16, 2, 2, 283, 284, 5, 20, 11, 2, 284, 285, 7, 4, 2, 2, 285, 287, 3, 2, 2, 2, 286, 250, 3, 2, 2, 2, 286, 258, 3, 2, 2, 2, 286, 271, 3, 2, 2, 2, 287, 19, 3, 2, 2, 2, 288, 289, 7, 131, 2, 2, 289, 21, 3, 2, 2, 2, 290, 292, 7, 20, 2, 2, 291, 290, 3, 2, 2, 2, 291, 292, 3, 2, 2, 2, 292, 293, 3, 2, 2, 2, 293, 294, 9, 3, 2, 2, 294, 304, 5, 188, 95, 2, 295, 296, 7, 24, 2, 2, 296, 301, 5, 24, 13, 2, 297, 298, 7, 18, 2, 2, 298, 300, 5, 24, 13, 2, 299, 297, 3, 2, 2, 2, 300, 303, 3, 2, 2, 2, 301, 299, 3, 2, 2, 2, 301, 302, 3, 2, 2, 2, 302, 305, 3, 2, 2, 2, 303, 301, 3, 2, 2, 2, 304, 295, 3, 2, 2, 2, 304, 305, 3, 2, 2, 2, 305, 306, 3, 2, 2, 2, 306, 310, 7, 17, 2, 2, 307, 309, 5, 26, 14, 2, 308, 307, 3, 2, 2, 2, 309, 312, 3, 2, 2, 2, 310, 308, 3, 2, 2, 2, 310, 311, 3, 2, 2, 2, 311, 313, 3, 2, 2, 2, 312, 310, 3, 2, 2, 2, 313, 314, 7, 19, 2, 2, 314, 23, 3, 2, 2, 2, 315, 321, 5, 74, 38, 2, 316, 318, 7, 25, 2, 2, 317, 319, 5, 134, 68, 2, 318, 317, 3, 2, 2, 2, 318, 319, 3, 2, 2, 2, 319, 320, 3, 2, 2, 2, 320, 322, 7, 26, 2, 2, 321, 316, 3, 2, 2, 2, 321, 322, 3, 2, 2, 2, 322, 25, 3, 2, 2, 2, 323, 333, 5, 28, 15, 2, 324, 333, 5, 36, 19, 2, 325, 333, 5, 38, 20, 2, 326, 333, 5, 40, 21, 2, 327, 333, 5, 44, 23, 2, 328, 333, 5, 52, 27, 2, 329, 333, 5, 56, 29, 2, 330, 333, 5, 32, 17, 2, 331, 333, 5, 34, 18, 2, 332, 323, 3, 2, 2, 2, 332, 324, 3, 2, 2, 2, 332, 325, 3, 2, 2, 2, 332, 326, 3, 2, 2, 2, 332, 327, 3, 2, 2, 2, 332, 328, 3, 2, 2, 2, 332, 329, 3, 2, 2, 2, 332, 330, 3, 2, 2, 2, 332, 331, 3, 2, 2, 2, 333, 27, 3, 2, 2, 2, 334, 343, 5, 72, 37, 2, 335, 342, 7, 122, 2, 2, 336, 342, 7, 119, 2, 2, 337, 342, 7, 121, 2, 2, 338, 342, 7, 113, 2, 2, 339, 342, 7, 114, 2, 2, 340, 342, 5, 192, 97, 2, 341, 335, 3, 2, 2, 2, 341, 336, 3, 2, 2, 2, 341, 337, 3, 2, 2, 2, 341, 338, 3, 2, 2, 2, 341, 339, 3, 2, 2, 2, 341, 340, 3, 2, 2, 2, 342, 345, 3, 2, 2, 2, 343, 341, 3, 2, 2, 2, 343, 344, 3, 2, 2, 2, 344, 346, 3, 2, 2, 2, 345, 343, 3, 2, 2, 2, 346, 349, 5, 188, 95, 2, 347, 348, 7, 12, 2, 2, 348, 350, 5, 130, 66, 2, 349, 347, 3, 2, 2, 2, 349, 350, 3, 2, 2, 2, 350, 351, 3, 2, 2, 2, 351, 352, 7, 4, 2, 2, 352, 29, 3, 2, 2, 2, 353, 354, 5, 72, 37, 2, 354, 355, 7, 113, 2, 2, 355, 356, 5, 188, 95, 2, 356, 357, 7, 12, 2, 2, 357, 358, 5, 130, 66, 2, 358, 359, 7, 4, 2, 2, 359, 31, 3, 2, 2, 2, 360, 361, 7, 27, 2, 2, 361, 362, 5, 188, 95, 2, 362, 363, 5, 58, 30, 2, 363, 364, 7, 4, 2, 2, 364, 33, 3, 2, 2, 2, 365, 366, 7, 125, 2, 2, 366, 367, 5, 188, 95, 2, 367, 368, 7, 24, 2, 2, 368, 369, 5, 128, 65, 2, 369, 370, 7, 4, 2, 2, 370, 35, 3, 2, 2, 2, 371, 372, 7, 28, 2, 2, 372, 373, 5, 188, 95, 2, 373, 376, 7, 29, 2, 2, 374, 377, 7, 15, 2, 2, 375, 377, 5, 72, 37, 2, 376, 374, 3, 2, 2, 2, 376, 375, 3, 2, 2, 2, 377, 378, 3, 2, 2, 2, 378, 379, 7, 4, 2, 2, 379, 37, 3, 2, 2, 2, 380, 381, 7, 30, 2, 2, 381, 382, 5, 188, 95, 2, 382, 393, 7, 17, 2, 2, 383, 384, 5, 70, 36, 2, 384, 390, 7, 4, 2, 2, 385, 386, 5, 70, 36, 2, 386, 387, 7, 4, 2, 2, 387, 389, 3, 2, 2, 2, 388, 385, 3, 2, 2, 2, 389, 392, 3, 2, 2, 2, 390, 388, 3, 2, 2, 2, 390, 391, 3, 2, 2, 2, 391, 394, 3, 2, 2, 2, 392, 390, 3, 2, 2, 2, 393, 383, 3, 2, 2, 2, 393, 394, 3, 2, 2, 2, 394, 395, 3, 2, 2, 2, 395, 396, 7, 19, 2, 2, 396, 39, 3, 2, 2, 2, 397, 398, 7, 31, 2, 2, 398, 400, 5, 188, 95, 2, 399, 401, 5, 58, 30, 2, 400, 399, 3, 2, 2, 2, 400, 401, 3, 2, 2, 2, 401, 406, 3, 2, 2, 2, 402, 405, 7, 123, 2, 2, 403, 405, 5, 192, 97, 2, 404, 402, 3, 2, 2, 2, 404, 403, 3, 2, 2, 2, 405, 408, 3, 2, 2, 2, 406, 404, 3, 2, 2, 2, 406, 407, 3, 2, 2, 2, 407, 411, 3, 2, 2, 2, 408, 406, 3, 2, 2, 2, 409, 412, 7, 4, 2, 2, 410, 412, 5, 86, 44, 2, 411, 409, 3, 2, 2, 2, 411, 410, 3, 2, 2, 2, 412, 41, 3, 2, 2, 2, 413, 419, 5, 188, 95, 2, 414, 416, 7, 25, 2, 2, 415, 417, 5, 134, 68, 2, 416, 415, 3, 2, 2, 2, 416, 417, 3, 2, 2, 2, 417, 418, 3, 2, 2, 2, 418, 420, 7, 26, 2, 2, 419, 414, 3, 2, 2, 2, 419, 420, 3, 2, 2, 2, 420, 43, 3, 2, 2, 2, 421, 422, 5, 46, 24, 2, 422, 423, 5, 58, 30, 2, 423, 425, 5, 50, 26, 2, 424, 426, 5, 48, 25, 2, 425, 424, 3, 2, 2, 2, 425, 426, 3, 2, 2, 2, 426, 429, 3, 2, 2, 2, 427, 430, 7, 4, 2, 2, 428, 430, 5, 86, 44, 2, 429, 427, 3, 2, 2, 2, 429, 428, 3, 2, 2, 2, 430, 45, 3, 2, 2, 2, 431, 433, 7, 32, 2, 2, 432, 434, 5, 188, 95, 2, 433, 432, 3, 2, 2, 2, 433, 434, 3, 2, 2, 2, 434, 439, 3, 2, 2, 2, 435, 439, 7, 127, 2, 2, 436, 439, 7, 128, 2, 2, 437, 439, 7, 129, 2, 2, 438, 431, 3, 2, 2, 2, 438, 435, 3, 2, 2, 2, 438, 436, 3, 2, 2, 2, 438, 437, 3, 2, 2, 2, 439, 47, 3, 2, 2, 2, 440, 441, 7, 33, 2, 2, 441, 442, 5, 58, 30, 2, 442, 49, 3, 2, 2, 2, 443, 452, 7, 117, 2, 2, 444, 452, 7, 122, 2, 2, 445, 452, 7, 119, 2, 2, 446, 452, 7, 121, 2, 2, 447, 452, 7, 123, 2, 2, 448, 452, 5, 84, 43, 2, 449, 452, 5, 42, 22, 2, 450, 452, 5, 192, 97, 2, 451, 443, 3, 2, 2, 2, 451, 444, 3, 2, 2, 2, 451, 445, 3, 2, 2, 2, 451, 446, 3, 2, 2, 2, 451, 447, 3, 2, 2, 2, 451, 448, 3, 2, 2, 2, 451, 449, 3, 2, 2, 2, 451, 450, 3, 2, 2, 2, 452, 455, 3, 2, 2, 2, 453, 451, 3, 2, 2, 2, 453, 454, 3, 2, 2, 2, 454, 51, 3, 2, 2, 2, 455, 453, 3, 2, 2, 2, 456, 457, 7, 34, 2, 2, 457, 458, 5, 188, 95, 2, 458, 460, 5, 62, 32, 2, 459, 461, 7, 111, 2, 2, 460, 459, 3, 2, 2, 2, 460, 461, 3, 2, 2, 2, 461, 462, 3, 2, 2, 2, 462, 463, 7, 4, 2, 2, 463, 53, 3, 2, 2, 2, 464, 465, 5, 188, 95, 2, 465, 55, 3, 2, 2, 2, 466, 467, 7, 35, 2, 2, 467, 468, 5, 188, 95, 2, 468, 470, 7, 17, 2, 2, 469, 471, 5, 54, 28, 2, 470, 469, 3, 2, 2, 2, 470, 471, 3, 2, 2, 2, 471, 476, 3, 2, 2, 2, 472, 473, 7, 18, 2, 2, 473, 475, 5, 54, 28, 2, 474, 472, 3, 2, 2, 2, 475, 478, 3, 2, 2, 2, 476, 474, 3, 2, 2, 2, 476, 477, 3, 2, 2, 2, 477, 479, 3, 2, 2, 2, 478, 476, 3, 2, 2, 2, 479, 480, 7, 19, 2, 2, 480, 57, 3, 2, 2, 2, 481, 490, 7, 25, 2, 2, 482, 487, 5, 60, 31, 2, 483, 484, 7, 18, 2, 2, 484, 486, 5, 60, 31, 2, 485, 483, 3, 2, 2, 2, 486, 489, 3, 2, 2, 2, 487, 485, 3, 2, 2, 2, 487, 488, 3, 2, 2, 2, 488, 491, 3, 2, 2, 2, 489, 487, 3, 2, 2, 2, 490, 482, 3, 2, 2, 2, 490, 491, 3, 2, 2, 2, 491, 492, 3, 2, 2, 2, 492, 493, 7, 26, 2, 2, 493, 59, 3, 2, 2, 2, 494, 496, 5, 72, 37, 2, 495, 497, 5, 82, 42, 2, 496, 495, 3, 2, 2, 2, 496, 497, 3, 2, 2, 2, 497, 499, 3, 2, 2, 2, 498, 500, 5, 188, 95, 2, 499, 498, 3, 2, 2, 2, 499, 500, 3, 2, 2, 2, 500, 61, 3, 2, 2, 2, 501, 510, 7, 25, 2, 2, 502, 507, 5, 64, 33, 2, 503, 504, 7, 18, 2, 2, 504, 506, 5, 64, 33, 2, 505, 503, 3, 2, 2, 2, 506, 509, 3, 2, 2, 2, 507, 505, 3, 2, 2, 2, 507, 508, 3, 2, 2, 2, 508, 511, 3, 2, 2, 2, 509, 507, 3, 2, 2, 2, 510, 502, 3, 2, 2, 2, 510, 511, 3, 2, 2, 2, 511, 512, 3, 2, 2, 2, 512, 513, 7, 26, 2, 2, 513, 63, 3, 2, 2, 2, 514, 516, 5, 72, 37, 2, 515, 517, 7, 118, 2, 2, 516, 515, 3, 2, 2, 2, 516, 517, 3, 2, 2, 2, 517, 519, 3, 2, 2, 2, 518, 520, 5, 188, 95, 2, 519, 518, 3, 2, 2, 2, 519, 520, 3, 2, 2, 2, 520, 65, 3, 2, 2, 2, 521, 530, 7, 25, 2, 2, 522, 527, 5, 68, 35, 2, 523, 524, 7, 18, 2, 2, 524, 526, 5, 68, 35, 2, 525, 523, 3, 2, 2, 2, 526, 529, 3, 2, 2, 2, 527, 525, 3, 2, 2, 2, 527, 528, 3, 2, 2, 2, 528, 531, 3, 2, 2, 2, 529, 527, 3, 2, 2, 2, 530, 522, 3, 2, 2, 2, 530, 531, 3, 2, 2, 2, 531, 532, 3, 2, 2, 2, 532, 533, 7, 26, 2, 2, 533, 67, 3, 2, 2, 2, 534, 536, 5, 72, 37, 2, 535, 537, 5, 82, 42, 2, 536, 535, 3, 2, 2, 2, 536, 537, 3, 2, 2, 2, 537, 69, 3, 2, 2, 2, 538, 540, 5, 72, 37, 2, 539, 541, 5, 82, 42, 2, 540, 539, 3, 2, 2, 2, 540, 541, 3, 2, 2, 2, 541, 542, 3, 2, 2, 2, 542, 543, 5, 188, 95, 2, 543, 71, 3, 2, 2, 2, 544, 545, 8, 37, 1, 2, 545, 552, 5, 128, 65, 2, 546, 552, 5, 74, 38, 2, 547, 552, 5, 78, 40, 2, 548, 552, 5, 80, 41, 2, 549, 550, 7, 38, 2, 2, 550, 552, 7, 120, 2, 2, 551, 544, 3, 2, 2, 2, 551, 546, 3, 2, 2, 2, 551, 547, 3, 2, 2, 2, 551, 548, 3, 2, 2, 2, 551, 549, 3, 2, 2, 2, 552, 561, 3, 2, 2, 2, 553, 554, 12, 5, 2, 2, 554, 556, 7, 36, 2, 2, 555, 557, 5, 130, 66, 2, 556, 555, 3, 2, 2, 2, 556, 557, 3, 2, 2, 2, 557, 558, 3, 2, 2, 2, 558, 560, 7, 37, 2, 2, 559, 553, 3, 2, 2, 2, 560, 563, 3, 2, 2, 2, 561, 559, 3, 2, 2, 2, 561, 562, 3, 2, 2, 2, 562, 73, 3, 2, 2, 2, 563, 561, 3, 2, 2, 2, 564, 569, 5, 188, 95, 2, 565, 566, 7, 39, 2, 2, 566, 568, 5, 188, 95, 2, 567, 565, 3, 2, 2, 2, 568, 571, 3, 2, 2, 2, 569, 567, 3, 2, 2, 2, 569, 570, 3, 2, 2, 2, 570, 75, 3, 2, 2, 2, 571, 569, 3, 2, 2, 2, 572, 575, 5, 128, 65, 2, 573, 575, 5, 74, 38, 2, 574, 572, 3, 2, 2, 2, 574, 573, 3, 2, 2, 2, 575, 77, 3, 2, 2, 2, 576, 577, 7, 40, 2, 2, 577, 578, 7, 25, 2, 2, 578, 579, 5, 76, 39, 2, 579, 580, 7, 41, 2, 2, 580, 581, 5, 72, 37, 2, 581, 582, 7, 26, 2, 2, 582, 79, 3, 2, 2, 2, 583, 584, 7, 32, 2, 2, 584, 590, 5, 66, 34, 2, 585, 589, 7, 119, 2, 2, 586, 589, 7, 117, 2, 2, 587, 589, 5, 84, 43, 2, 588, 585, 3, 2, 2, 2, 588, 586, 3, 2, 2, 2, 588, 587, 3, 2, 2, 2, 589, 592, 3, 2, 2, 2, 590, 588, 3, 2, 2, 2, 590, 591, 3, 2, 2, 2, 591, 595, 3, 2, 2, 2, 592, 590, 3, 2, 2, 2, 593, 594, 7, 33, 2, 2, 594, 596, 5, 66, 34, 2, 595, 593, 3, 2, 2, 2, 595, 596, 3, 2, 2, 2, 596, 81, 3, 2, 2, 2, 597, 598, 9, 4, 2, 2, 598, 83, 3, 2, 2, 2, 599, 600, 9, 5, 2, 2, 600, 85, 3, 2, 2, 2, 601, 605, 7, 17, 2, 2, 602, 604, 5, 88, 45, 2, 603, 602, 3, 2, 2, 2, 604, 607, 3, 2, 2, 2, 605, 603, 3, 2, 2, 2, 605, 606, 3, 2, 2, 2, 606, 608, 3, 2, 2, 2, 607, 605, 3, 2, 2, 2, 608, 609, 7, 19, 2, 2, 609, 87, 3, 2, 2, 2, 610, 626, 5, 92, 47, 2, 611, 626, 5, 94, 48, 2, 612, 626, 5, 98, 50, 2, 613, 626, 5, 104, 53, 2, 614, 626, 5, 86, 44, 2, 615, 626, 5, 106, 54, 2, 616, 626, 5, 108, 55, 2, 617, 626, 5, 110, 56, 2, 618, 626, 5, 112, 57, 2, 619, 626, 5, 114, 58, 2, 620, 626, 5, 116, 59, 2, 621, 626, 5, 118, 60, 2, 622, 626, 5, 100, 51, 2, 623, 626, 5, 102, 52, 2, 624, 626, 5, 120, 61, 2, 625, 610, 3, 2, 2, 2, 625, 611, 3, 2, 2, 2, 625, 612, 3, 2, 2, 2, 625, 613, 3, 2, 2, 2, 625, 614, 3, 2, 2, 2, 625, 615, 3, 2, 2, 2, 625, 616, 3, 2, 2, 2, 625, 617, 3, 2, 2, 2, 625, 618, 3, 2, 2, 2, 625, 619, 3, 2, 2, 2, 625, 620, 3, 2, 2, 2, 625, 621, 3, 2, 2, 2, 625, 622, 3, 2, 2, 2, 625, 623, 3, 2, 2, 2, 625, 624, 3, 2, 2, 2, 626, 89, 3, 2, 2, 2, 627, 628, 5, 130, 66, 2, 628, 629, 7, 4, 2, 2, 629, 91, 3, 2, 2, 2, 630, 631, 7, 45, 2, 2, 631, 632, 7, 25, 2, 2, 632, 633, 5, 130, 66, 2, 633, 634, 7, 26, 2, 2, 634, 637, 5, 88, 45, 2, 635, 636, 7, 46, 2, 2, 636, 638, 5, 88, 45, 2, 637, 635, 3, 2, 2, 2, 637, 638, 3, 2, 2, 2, 638, 93, 3, 2, 2, 2, 639, 640, 7, 47, 2, 2, 640, 642, 5, 130, 66, 2, 641, 643, 5, 48, 25, 2, 642, 641, 3, 2, 2, 2, 642, 643, 3, 2, 2, 2, 643, 644, 3, 2, 2, 2, 644, 646, 5, 86, 44, 2, 645, 647, 5, 96, 49, 2, 646, 645, 3, 2, 2, 2, 647, 648, 3, 2, 2, 2, 648, 646, 3, 2, 2, 2, 648, 649, 3, 2, 2, 2, 649, 95, 3, 2, 2, 2, 650, 655, 7, 48, 2, 2, 651, 653, 5, 188, 95, 2, 652, 651, 3, 2, 2, 2, 652, 653, 3, 2, 2, 2, 653, 654, 3, 2, 2, 2, 654, 656, 5, 58, 30, 2, 655, 652, 3, 2, 2, 2, 655, 656, 3, 2, 2, 2, 656, 657, 3, 2, 2, 2, 657, 658, 5, 86, 44, 2, 658, 97, 3, 2, 2, 2, 659, 660, 7, 49, 2, 2, 660, 661, 7, 25, 2, 2, 661, 662, 5, 130, 66, 2, 662, 663, 7, 26, 2, 2, 663, 664, 5, 88, 45, 2, 664, 99, 3, 2, 2, 2, 665, 668, 5, 122, 62, 2, 666, 668, 5, 90, 46, 2, 667, 665, 3, 2, 2, 2, 667, 666, 3, 2, 2, 2, 668, 101, 3, 2, 2, 2, 669, 670, 7, 50, 2, 2, 670, 671, 5, 86, 44, 2, 671, 103, 3, 2, 2, 2, 672, 673, 7, 29, 2, 2, 673, 676, 7, 25, 2, 2, 674, 677, 5, 100, 51, 2, 675, 677, 7, 4, 2, 2, 676, 674, 3, 2, 2, 2, 676, 675, 3, 2, 2, 2, 677, 680, 3, 2, 2, 2, 678, 681, 5, 90, 46, 2, 679, 681, 7, 4, 2, 2, 680, 678, 3, 2, 2, 2, 680, 679, 3, 2, 2, 2, 681, 683, 3, 2, 2, 2, 682, 684, 5, 130, 66, 2, 683, 682, 3, 2, 2, 2, 683, 684, 3, 2, 2, 2, 684, 685, 3, 2, 2, 2, 685, 686, 7, 26, 2, 2, 686, 687, 5, 88, 45, 2, 687, 105, 3, 2, 2, 2, 688, 690, 7, 51, 2, 2, 689, 691, 7, 131, 2, 2, 690, 689, 3, 2, 2, 2, 690, 691, 3, 2, 2, 2, 691, 692, 3, 2, 2, 2, 692, 693, 5, 144, 73, 2, 693, 107, 3, 2, 2, 2, 694, 695, 7, 52, 2, 2, 695, 696, 5, 88, 45, 2, 696, 697, 7, 49, 2, 2, 697, 698, 7, 25, 2, 2, 698, 699, 5, 130, 66, 2, 699, 700, 7, 26, 2, 2, 700, 701, 7, 4, 2, 2, 701, 109, 3, 2, 2, 2, 702, 703, 7, 115, 2, 2, 703, 704, 7, 4, 2, 2, 704, 111, 3, 2, 2, 2, 705, 706, 7, 112, 2, 2, 706, 707, 7, 4, 2, 2, 707, 113, 3, 2, 2, 2, 708, 710, 7, 53, 2, 2, 709, 711, 5, 130, 66, 2, 710, 709, 3, 2, 2, 2, 710, 711, 3, 2, 2, 2, 711, 712, 3, 2, 2, 2, 712, 713, 7, 4, 2, 2, 713, 115, 3, 2, 2, 2, 714, 715, 7, 54, 2, 2, 715, 716, 7, 4, 2, 2, 716, 117, 3, 2, 2, 2, 717, 718, 7, 55, 2, 2, 718, 719, 5, 142, 72, 2, 719, 720, 7, 4, 2, 2, 720, 119, 3, 2, 2, 2, 721, 722, 7, 56, 2, 2, 722, 723, 5, 142, 72, 2, 723, 724, 7, 4, 2, 2, 724, 121, 3, 2, 2, 2, 725, 726, 7, 57, 2, 2, 726, 733, 5, 126, 64, 2, 727, 733, 5, 70, 36, 2, 728, 729, 7, 25, 2, 2, 729, 730, 5, 124, 63, 2, 730, 731, 7, 26, 2, 2, 731, 733, 3, 2, 2, 2, 732, 725, 3, 2, 2, 2, 732, 727, 3, 2, 2, 2, 732, 728, 3, 2, 2, 2, 733, 736, 3, 2, 2, 2, 734, 735, 7, 12, 2, 2, 735, 737, 5, 130, 66, 2, 736, 734, 3, 2, 2, 2, 736, 737, 3, 2, 2, 2, 737, 738, 3, 2, 2, 2, 738, 739, 7, 4, 2, 2, 739, 123, 3, 2, 2, 2, 740, 742, 5, 70, 36, 2, 741, 740, 3, 2, 2, 2, 741, 742, 3, 2, 2, 2, 742, 749, 3, 2, 2, 2, 743, 745, 7, 18, 2, 2, 744, 746, 5, 70, 36, 2, 745, 744, 3, 2, 2, 2, 745, 746, 3, 2, 2, 2, 746, 748, 3, 2, 2, 2, 747, 743, 3, 2, 2, 2, 748, 751, 3, 2, 2, 2, 749, 747, 3, 2, 2, 2, 749, 750, 3, 2, 2, 2, 750, 125, 3, 2, 2, 2, 751, 749, 3, 2, 2, 2, 752, 759, 7, 25, 2, 2, 753, 755, 5, 188, 95, 2, 754, 753, 3, 2, 2, 2, 754, 755, 3, 2, 2, 2, 755, 756, 3, 2, 2, 2, 756, 758, 7, 18, 2, 2, 757, 754, 3, 2, 2, 2, 758, 761, 3, 2, 2, 2, 759, 757, 3, 2, 2, 2, 759, 760, 3, 2, 2, 2, 760, 763, 3, 2, 2, 2, 761, 759, 3, 2, 2, 2, 762, 764, 5, 188, 95, 2, 763, 762, 3, 2, 2, 2, 763, 764, 3, 2, 2, 2, 764, 765, 3, 2, 2, 2, 765, 766, 7, 26, 2, 2, 766, 127, 3, 2, 2, 2, 767, 768, 9, 6, 2, 2, 768, 129, 3, 2, 2, 2, 769, 770, 8, 66, 1, 2, 770, 771, 7, 63, 2, 2, 771, 788, 5, 72, 37, 2, 772, 773, 7, 25, 2, 2, 773, 774, 5, 130, 66, 2, 774, 775, 7, 26, 2, 2, 775, 788, 3, 2, 2, 2, 776, 777, 9, 7, 2, 2, 777, 788, 5, 130, 66, 21, 778, 779, 9, 8, 2, 2, 779, 788, 5, 130, 66, 20, 780, 781, 9, 9, 2, 2, 781, 788, 5, 130, 66, 19, 782, 783, 7, 69, 2, 2, 783, 788, 5, 130, 66, 18, 784, 785, 7, 7, 2, 2, 785, 788, 5, 130, 66, 17, 786, 788, 5, 132, 67, 2, 787, 769, 3, 2, 2, 2, 787, 772, 3, 2, 2, 2, 787, 776, 3, 2, 2, 2, 787, 778, 3, 2, 2, 2, 787, 780, 3, 2, 2, 2, 787, 782, 3, 2, 2, 2, 787, 784, 3, 2, 2, 2, 787, 786, 3, 2, 2, 2, 788, 863, 3, 2, 2, 2, 789, 790, 12, 16, 2, 2, 790, 791, 7, 70, 2, 2, 791, 862, 5, 130, 66, 17, 792, 793, 12, 15, 2, 2, 793, 794, 9, 10, 2, 2, 794, 862, 5, 130, 66, 16, 795, 796, 12, 14, 2, 2, 796, 797, 9, 8, 2, 2, 797, 862, 5, 130, 66, 15, 798, 799, 12, 13, 2, 2, 799, 800, 9, 11, 2, 2, 800, 862, 5, 130, 66, 14, 801, 802, 12, 12, 2, 2, 802, 803, 7, 75, 2, 2, 803, 862, 5, 130, 66, 13, 804, 805, 12, 11, 2, 2, 805, 806, 7, 6, 2, 2, 806, 862, 5, 130, 66, 12, 807, 808, 12, 10, 2, 2, 808, 809, 7, 76, 2, 2, 809, 862, 5, 130, 66, 11, 810, 811, 12, 9, 2, 2, 811, 812, 9, 12, 2, 2, 812, 862, 5, 130, 66, 10, 813, 814, 12, 8, 2, 2, 814, 815, 9, 13, 2, 2, 815, 862, 5, 130, 66, 9, 816, 817, 12, 7, 2, 2, 817, 818, 7, 79, 2, 2, 818, 862, 5, 130, 66, 8, 819, 820, 12, 6, 2, 2, 820, 821, 7, 5, 2, 2, 821, 862, 5, 130, 66, 7, 822, 823, 12, 5, 2, 2, 823, 824, 7, 80, 2, 2, 824, 825, 5, 130, 66, 2, 825, 826, 7, 64, 2, 2, 826, 827, 5, 130, 66, 6, 827, 862, 3, 2, 2, 2, 828, 829, 12, 4, 2, 2, 829, 830, 9, 14, 2, 2, 830, 862, 5, 130, 66, 5, 831, 832, 12, 29, 2, 2, 832, 862, 9, 7, 2, 2, 833, 834, 12, 27, 2, 2, 834, 835, 7, 36, 2, 2, 835, 836, 5, 130, 66, 2, 836, 837, 7, 37, 2, 2, 837, 862, 3, 2, 2, 2, 838, 839, 12, 26, 2, 2, 839, 841, 7, 36, 2, 2, 840, 842, 5, 130, 66, 2, 841, 840, 3, 2, 2, 2, 841, 842, 3, 2, 2, 2, 842, 843, 3, 2, 2, 2, 843, 845, 7, 64, 2, 2, 844, 846, 5, 130, 66, 2, 845, 844, 3, 2, 2, 2, 845, 846, 3, 2, 2, 2, 846, 847, 3, 2, 2, 2, 847, 862, 7, 37, 2, 2, 848, 849, 12, 25, 2, 2, 849, 850, 7, 39, 2, 2, 850, 862, 5, 188, 95, 2, 851, 852, 12, 24, 2, 2, 852, 853, 7, 17, 2, 2, 853, 854, 5, 136, 69, 2, 854, 855, 7, 19, 2, 2, 855, 862, 3, 2, 2, 2, 856, 857, 12, 23, 2, 2, 857, 858, 7, 25, 2, 2, 858, 859, 5, 140, 71, 2, 859, 860, 7, 26, 2, 2, 860, 862, 3, 2, 2, 2, 861, 789, 3, 2, 2, 2, 861, 792, 3, 2, 2, 2, 861, 795, 3, 2, 2, 2, 861, 798, 3, 2, 2, 2, 861, 801, 3, 2, 2, 2, 861, 804, 3, 2, 2, 2, 861, 807, 3, 2, 2, 2, 861, 810, 3, 2, 2, 2, 861, 813, 3, 2, 2, 2, 861, 816, 3, 2, 2, 2, 861, 819, 3, 2, 2, 2, 861, 822, 3, 2, 2, 2, 861, 828, 3, 2, 2, 2, 861, 831, 3, 2, 2, 2, 861, 833, 3, 2, 2, 2, 861, 838, 3, 2, 2, 2, 861, 848, 3, 2, 2, 2, 861, 851, 3, 2, 2, 2, 861, 856, 3, 2, 2, 2, 862, 865, 3, 2, 2, 2, 863, 861, 3, 2, 2, 2, 863, 864, 3, 2, 2, 2, 864, 131, 3, 2, 2, 2, 865, 863, 3, 2, 2, 2, 866, 884, 7, 105, 2, 2, 867, 884, 5, 186, 94, 2, 868, 884, 5, 190, 96, 2, 869, 884, 5, 194, 98, 2, 870, 873, 5, 188, 95, 2, 871, 872, 7, 36, 2, 2, 872, 874, 7, 37, 2, 2, 873, 871, 3, 2, 2, 2, 873, 874, 3, 2, 2, 2, 874, 884, 3, 2, 2, 2, 875, 884, 7, 125, 2, 2, 876, 884, 7, 120, 2, 2, 877, 884, 5, 182, 92, 2, 878, 881, 5, 184, 93, 2, 879, 880, 7, 36, 2, 2, 880, 882, 7, 37, 2, 2, 881, 879, 3, 2, 2, 2, 881, 882, 3, 2, 2, 2, 882, 884, 3, 2, 2, 2, 883, 866, 3, 2, 2, 2, 883, 867, 3, 2, 2, 2, 883, 868, 3, 2, 2, 2, 883, 869, 3, 2, 2, 2, 883, 870, 3, 2, 2, 2, 883, 875, 3, 2, 2, 2, 883, 876, 3, 2, 2, 2, 883, 877, 3, 2, 2, 2, 883, 878, 3, 2, 2, 2, 884, 133, 3, 2, 2, 2, 885, 890, 5, 130, 66, 2, 886, 887, 7, 18, 2, 2, 887, 889, 5, 130, 66, 2, 888, 886, 3, 2, 2, 2, 889, 892, 3, 2, 2, 2, 890, 888, 3, 2, 2, 2, 890, 891, 3, 2, 2, 2, 891, 135, 3, 2, 2, 2, 892, 890, 3, 2, 2, 2, 893, 898, 5, 138, 70, 2, 894, 895, 7, 18, 2, 2, 895, 897, 5, 138, 70, 2, 896, 894, 3, 2, 2, 2, 897, 900, 3, 2, 2, 2, 898, 896, 3, 2, 2, 2, 898, 899, 3, 2, 2, 2, 899, 902, 3, 2, 2, 2, 900, 898, 3, 2, 2, 2, 901, 903, 7, 18, 2, 2, 902, 901, 3, 2, 2, 2, 902, 903, 3, 2, 2, 2, 903, 137, 3, 2, 2, 2, 904, 905, 5, 188, 95, 2, 905, 906, 7, 64, 2, 2, 906, 907, 5, 130, 66, 2, 907, 139, 3, 2, 2, 2, 908, 910, 7, 17, 2, 2, 909, 911, 5, 136, 69, 2, 910, 909, 3, 2, 2, 2, 910, 911, 3, 2, 2, 2, 911, 912, 3, 2, 2, 2, 912, 917, 7, 19, 2, 2, 913, 915, 5, 134, 68, 2, 914, 913, 3, 2, 2, 2, 914, 915, 3, 2, 2, 2, 915, 917, 3, 2, 2, 2, 916, 908, 3, 2, 2, 2, 916, 914, 3, 2, 2, 2, 917, 141, 3, 2, 2, 2, 918, 919, 5, 130, 66, 2, 919, 920, 7, 25, 2, 2, 920, 921, 5, 140, 71, 2, 921, 922, 7, 26, 2, 2, 922, 143, 3, 2, 2, 2, 923, 927, 7, 17, 2, 2, 924, 926, 5, 146, 74, 2, 925, 924, 3, 2, 2, 2, 926, 929, 3, 2, 2, 2, 927, 925, 3, 2, 2, 2, 927, 928, 3, 2, 2, 2, 928, 930, 3, 2, 2, 2, 929, 927, 3, 2, 2, 2, 930, 931, 7, 19, 2, 2, 931, 145, 3, 2, 2, 2, 932, 951, 5, 188, 95, 2, 933, 951, 5, 144, 73, 2, 934, 951, 5, 148, 75, 2, 935, 951, 5, 154, 78, 2, 936, 951, 5, 156, 79, 2, 937, 951, 5, 162, 82, 2, 938, 951, 5, 164, 83, 2, 939, 951, 5, 166, 84, 2, 940, 951, 5, 170, 86, 2, 941, 951, 5, 174, 88, 2, 942, 951, 5, 176, 89, 2, 943, 951, 7, 112, 2, 2, 944, 951, 7, 115, 2, 2, 945, 951, 7, 116, 2, 2, 946, 951, 5, 180, 91, 2, 947, 951, 5, 186, 94, 2, 948, 951, 5, 194, 98, 2, 949, 951, 5, 190, 96, 2, 950, 932, 3, 2, 2, 2, 950, 933, 3, 2, 2, 2, 950, 934, 3, 2, 2, 2, 950, 935, 3, 2, 2, 2, 950, 936, 3, 2, 2, 2, 950, 937, 3, 2, 2, 2, 950, 938, 3, 2, 2, 2, 950, 939, 3, 2, 2, 2, 950, 940, 3, 2, 2, 2, 950, 941, 3, 2, 2, 2, 950, 942, 3, 2, 2, 2, 950, 943, 3, 2, 2, 2, 950, 944, 3, 2, 2, 2, 950, 945, 3, 2, 2, 2, 950, 946, 3, 2, 2, 2, 950, 947, 3, 2, 2, 2, 950, 948, 3, 2, 2, 2, 950, 949, 3, 2, 2, 2, 951, 147, 3, 2, 2, 2, 952, 956, 5, 152, 77, 2, 953, 956, 5, 178, 90, 2, 954, 956, 5, 150, 76, 2, 955, 952, 3, 2, 2, 2, 955, 953, 3, 2, 2, 2, 955, 954, 3, 2, 2, 2, 956, 149, 3, 2, 2, 2, 957, 958, 5, 188, 95, 2, 958, 959, 7, 39, 2, 2, 959, 960, 5, 188, 95, 2, 960, 151, 3, 2, 2, 2, 961, 966, 7, 53, 2, 2, 962, 966, 7, 38, 2, 2, 963, 966, 7, 60, 2, 2, 964, 966, 5, 188, 95, 2, 965, 961, 3, 2, 2, 2, 965, 962, 3, 2, 2, 2, 965, 963, 3, 2, 2, 2, 965, 964, 3, 2, 2, 2, 966, 979, 3, 2, 2, 2, 967, 969, 7, 25, 2, 2, 968, 970, 5, 148, 75, 2, 969, 968, 3, 2, 2, 2, 969, 970, 3, 2, 2, 2, 970, 975, 3, 2, 2, 2, 971, 972, 7, 18, 2, 2, 972, 974, 5, 148, 75, 2, 973, 971, 3, 2, 2, 2, 974, 977, 3, 2, 2, 2, 975, 973, 3, 2, 2, 2, 975, 976, 3, 2, 2, 2, 976, 978, 3, 2, 2, 2, 977, 975, 3, 2, 2, 2, 978, 980, 7, 26, 2, 2, 979, 967, 3, 2, 2, 2, 979, 980, 3, 2, 2, 2, 980, 153, 3, 2, 2, 2, 981, 982, 7, 91, 2, 2, 982, 985, 5, 158, 80, 2, 983, 984, 7, 92, 2, 2, 984, 986, 5, 148, 75, 2, 985, 983, 3, 2, 2, 2, 985, 986, 3, 2, 2, 2, 986, 155, 3, 2, 2, 2, 987, 988, 5, 158, 80, 2, 988, 989, 7, 92, 2, 2, 989, 990, 5, 148, 75, 2, 990, 157, 3, 2, 2, 2, 991, 998, 5, 188, 95, 2, 992, 998, 5, 150, 76, 2, 993, 994, 7, 25, 2, 2, 994, 995, 5, 160, 81, 2, 995, 996, 7, 26, 2, 2, 996, 998, 3, 2, 2, 2, 997, 991, 3, 2, 2, 2, 997, 992, 3, 2, 2, 2, 997, 993, 3, 2, 2, 2, 998, 159, 3, 2, 2, 2, 999, 1004, 5, 188, 95, 2, 1000, 1001, 7, 18, 2, 2, 1001, 1003, 5, 188, 95, 2, 1002, 1000, 3, 2, 2, 2, 1003, 1006, 3, 2, 2, 2, 1004, 1002, 3, 2, 2, 2, 1004, 1005, 3, 2, 2, 2, 1005, 161, 3, 2, 2, 2, 1006, 1004, 3, 2, 2, 2, 1007, 1008, 7, 93, 2, 2, 1008, 1009, 5, 188, 95, 2, 1009, 163, 3, 2, 2, 2, 1010, 1011, 5, 188, 95, 2, 1011, 1012, 7, 64, 2, 2, 1012, 165, 3, 2, 2, 2, 1013, 1014, 7, 94, 2, 2, 1014, 1018, 5, 148, 75, 2, 1015, 1017, 5, 168, 85, 2, 1016, 1015, 3, 2, 2, 2, 1017, 1020, 3, 2, 2, 2, 1018, 1016, 3, 2, 2, 2, 1018, 1019, 3, 2, 2, 2, 1019, 167, 3, 2, 2, 2, 1020, 1018, 3, 2, 2, 2, 1021, 1022, 7, 95, 2, 2, 1022, 1023, 5, 178, 90, 2, 1023, 1024, 5, 144, 73, 2, 1024, 1028, 3, 2, 2, 2, 1025, 1026, 7, 96, 2, 2, 1026, 1028, 5, 144, 73, 2, 1027, 1021, 3, 2, 2, 2, 1027, 1025, 3, 2, 2, 2, 1028, 169, 3, 2, 2, 2, 1029, 1030, 7, 32, 2, 2, 1030, 1031, 5, 188, 95, 2, 1031, 1033, 7, 25, 2, 2, 1032, 1034, 5, 160, 81, 2, 1033, 1032, 3, 2, 2, 2, 1033, 1034, 3, 2, 2, 2, 1034, 1035, 3, 2, 2, 2, 1035, 1037, 7, 26, 2, 2, 1036, 1038, 5, 172, 87, 2, 1037, 1036, 3, 2, 2, 2, 1037, 1038, 3, 2, 2, 2, 1038, 1039, 3, 2, 2, 2, 1039, 1040, 5, 144, 73, 2, 1040, 171, 3, 2, 2, 2, 1041, 1042, 7, 97, 2, 2, 1042, 1043, 5, 160, 81, 2, 1043, 173, 3, 2, 2, 2, 1044, 1047, 7, 29, 2, 2, 1045, 1048, 5, 144, 73, 2, 1046, 1048, 5, 148, 75, 2, 1047, 1045, 3, 2, 2, 2, 1047, 1046, 3, 2, 2, 2, 1048, 1049, 3, 2, 2, 2, 1049, 1052, 5, 148, 75, 2, 1050, 1053, 5, 144, 73, 2, 1051, 1053, 5, 148, 75, 2, 1052, 1050, 3, 2, 2, 2, 1052, 1051, 3, 2, 2, 2, 1053, 1054, 3, 2, 2, 2, 1054, 1055, 5, 144, 73, 2, 1055, 175, 3, 2, 2, 2, 1056, 1057, 7, 45, 2, 2, 1057, 1058, 5, 148, 75, 2, 1058, 1059, 5, 144, 73, 2, 1059, 177, 3, 2, 2, 2, 1060, 1065, 5, 194, 98, 2, 1061, 1065, 7, 106, 2, 2, 1062, 1065, 7, 107, 2, 2, 1063, 1065, 5, 190, 96, 2, 1064, 1060, 3, 2, 2, 2, 1064, 1061, 3, 2, 2, 2, 1064, 1062, 3, 2, 2, 2, 1064, 1063, 3, 2, 2, 2, 1065, 179, 3, 2, 2, 2, 1066, 1067, 7, 51, 2, 2, 1067, 1068, 5, 188, 95, 2, 1068, 1069, 5, 144, 73, 2, 1069, 181, 3, 2, 2, 2, 1070, 1072, 7, 25, 2, 2, 1071, 1073, 5, 130, 66, 2, 1072, 1071, 3, 2, 2, 2, 1072, 1073, 3, 2, 2, 2, 1073, 1080, 3, 2, 2, 2, 1074, 1076, 7, 18, 2, 2, 1075, 1077, 5, 130, 66, 2, 1076, 1075, 3, 2, 2, 2, 1076, 1077, 3, 2, 2, 2, 1077, 1079, 3, 2, 2, 2, 1078, 1074, 3, 2, 2, 2, 1079, 1082, 3, 2, 2, 2, 1080, 1078, 3, 2, 2, 2, 1080, 1081, 3, 2, 2, 2, 1081, 1083, 3, 2, 2, 2, 1082, 1080, 3, 2, 2, 2, 1083, 1097, 7, 26, 2, 2, 1084, 1093, 7, 36, 2, 2, 1085, 1090, 5, 130, 66, 2, 1086, 1087, 7, 18, 2, 2, 1087, 1089, 5, 130, 66, 2, 1088, 1086, 3, 2, 2, 2, 1089, 1092, 3, 2, 2, 2, 1090, 1088, 3, 2, 2, 2, 1090, 1091, 3, 2, 2, 2, 1091, 1094, 3, 2, 2, 2, 1092, 1090, 3, 2, 2, 2, 1093, 1085, 3, 2, 2, 2, 1093, 1094, 3, 2, 2, 2, 1094, 1095, 3, 2, 2, 2, 1095, 1097, 7, 37, 2, 2, 1096, 1070, 3, 2, 2, 2, 1096, 1084, 3, 2, 2, 2, 1097, 183, 3, 2, 2, 2, 1098, 1101, 5, 128, 65, 2, 1099, 1101, 5, 74, 38, 2, 1100, 1098, 3, 2, 2, 2, 1100, 1099, 3, 2, 2, 2, 1101, 185, 3, 2, 2, 2, 1102, 1104, 9, 15, 2, 2, 1103, 1105, 7, 108, 2, 2, 1104, 1103, 3, 2, 2, 2, 1104, 1105, 3, 2, 2, 2, 1105, 187, 3, 2, 2, 2, 1106, 1107, 9, 16, 2, 2, 1107, 189, 3, 2, 2, 2, 1108, 1110, 7, 109, 2, 2, 1109, 1108, 3, 2, 2, 2, 1110, 1111, 3, 2, 2, 2, 1111, 1109, 3, 2, 2, 2, 1111, 1112, 3, 2, 2, 2, 1112, 191, 3, 2, 2, 2, 1113, 1125, 7, 99, 2, 2, 1114, 1115, 7, 25, 2, 2, 1115, 1120, 5, 74, 38, 2, 1116, 1117, 7, 18, 2, 2, 1117, 1119, 5, 74, 38, 2, 1118, 1116, 3, 2, 2, 2, 1119, 1122, 3, 2, 2, 2, 1120, 1118, 3, 2, 2, 2, 1120, 1121, 3, 2, 2, 2, 1121, 1123, 3, 2, 2, 2, 1122, 1120, 3, 2, 2, 2, 1123, 1124, 7, 26, 2, 2, 1124, 1126, 3, 2, 2, 2, 1125, 1114, 3, 2, 2, 2, 1125, 1126, 3, 2, 2, 2, 1126, 193, 3, 2, 2, 2, 1127, 1129, 7, 131, 2, 2, 1128, 1127, 3, 2, 2, 2, 1129, 1130, 3, 2, 2, 2, 1130, 1128, 3, 2, 2, 2, 1130, 1131, 3, 2, 2, 2, 1131, 195, 3, 2, 2, 2, 128, 205, 207, 221, 225, 230, 236, 240, 243, 248, 254, 261, 265, 278, 286, 291, 301, 304, 310, 318, 321, 332, 341, 343, 349, 376, 390, 393, 400, 404, 406, 411, 416, 419, 425, 429, 433, 438, 451, 453, 460, 470, 476, 487, 490, 496, 499, 507, 510, 516, 519, 527, 530, 536, 540, 551, 556, 561, 569, 574, 588, 590, 595, 605, 625, 637, 642, 648, 652, 655, 667, 676, 680, 683, 690, 710, 732, 736, 741, 745, 749, 754, 759, 763, 787, 841, 845, 861, 863, 873, 881, 883, 890, 898, 902, 910, 914, 916, 927, 950, 955, 965, 969, 975, 979, 985, 997, 1004, 1018, 1027, 1033, 1037, 1047, 1052, 1064, 1072, 1076, 1080, 1090, 1093, 1096, 1100, 1104, 1111, 1120, 1125, 1130] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 135, 1171, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 4, 85, 9, 85, 4, 86, 9, 86, 4, 87, 9, 87, 4, 88, 9, 88, 4, 89, 9, 89, 4, 90, 9, 90, 4, 91, 9, 91, 4, 92, 9, 92, 4, 93, 9, 93, 4, 94, 9, 94, 4, 95, 9, 95, 4, 96, 9, 96, 4, 97, 9, 97, 4, 98, 9, 98, 4, 99, 9, 99, 4, 100, 9, 100, 4, 101, 9, 101, 4, 102, 9, 102, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 7, 2, 215, 10, 2, 12, 2, 14, 2, 218, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 5, 5, 232, 10, 5, 3, 6, 3, 6, 5, 6, 236, 10, 6, 3, 6, 7, 6, 239, 10, 6, 12, 6, 14, 6, 242, 11, 6, 3, 7, 3, 7, 3, 8, 5, 8, 247, 10, 8, 3, 8, 3, 8, 5, 8, 251, 10, 8, 3, 8, 5, 8, 254, 10, 8, 3, 9, 3, 9, 3, 9, 5, 9, 259, 10, 9, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 265, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 272, 10, 10, 3, 10, 3, 10, 5, 10, 276, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 7, 10, 287, 10, 10, 12, 10, 14, 10, 290, 11, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 297, 10, 10, 3, 11, 3, 11, 3, 12, 5, 12, 302, 10, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 7, 12, 310, 10, 12, 12, 12, 14, 12, 313, 11, 12, 5, 12, 315, 10, 12, 3, 12, 3, 12, 7, 12, 319, 10, 12, 12, 12, 14, 12, 322, 11, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 5, 13, 329, 10, 13, 3, 13, 5, 13, 332, 10, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 343, 10, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 7, 15, 352, 10, 15, 12, 15, 14, 15, 355, 11, 15, 3, 15, 3, 15, 3, 15, 5, 15, 360, 10, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 5, 19, 387, 10, 19, 3, 19, 5, 19, 390, 10, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 7, 20, 399, 10, 20, 12, 20, 14, 20, 402, 11, 20, 3, 20, 3, 20, 5, 20, 406, 10, 20, 3, 21, 3, 21, 3, 21, 5, 21, 411, 10, 21, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 7, 23, 423, 10, 23, 12, 23, 14, 23, 426, 11, 23, 5, 23, 428, 10, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 5, 24, 435, 10, 24, 3, 24, 3, 24, 7, 24, 439, 10, 24, 12, 24, 14, 24, 442, 11, 24, 3, 24, 3, 24, 5, 24, 446, 10, 24, 3, 25, 3, 25, 3, 25, 5, 25, 451, 10, 25, 3, 25, 5, 25, 454, 10, 25, 3, 26, 3, 26, 3, 26, 3, 26, 5, 26, 460, 10, 26, 3, 26, 3, 26, 5, 26, 464, 10, 26, 3, 27, 3, 27, 5, 27, 468, 10, 27, 3, 27, 3, 27, 3, 27, 5, 27, 473, 10, 27, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 7, 29, 486, 10, 29, 12, 29, 14, 29, 489, 11, 29, 3, 30, 3, 30, 3, 30, 3, 30, 5, 30, 495, 10, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 5, 32, 505, 10, 32, 3, 32, 3, 32, 7, 32, 509, 10, 32, 12, 32, 14, 32, 512, 11, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 33, 7, 33, 520, 10, 33, 12, 33, 14, 33, 523, 11, 33, 5, 33, 525, 10, 33, 3, 33, 3, 33, 3, 34, 3, 34, 5, 34, 531, 10, 34, 3, 34, 5, 34, 534, 10, 34, 3, 35, 3, 35, 3, 35, 3, 35, 7, 35, 540, 10, 35, 12, 35, 14, 35, 543, 11, 35, 5, 35, 545, 10, 35, 3, 35, 3, 35, 3, 36, 3, 36, 5, 36, 551, 10, 36, 3, 36, 5, 36, 554, 10, 36, 3, 37, 3, 37, 3, 37, 3, 37, 7, 37, 560, 10, 37, 12, 37, 14, 37, 563, 11, 37, 5, 37, 565, 10, 37, 3, 37, 3, 37, 3, 38, 3, 38, 5, 38, 571, 10, 38, 3, 39, 3, 39, 5, 39, 575, 10, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 5, 40, 586, 10, 40, 3, 40, 3, 40, 3, 40, 5, 40, 591, 10, 40, 3, 40, 7, 40, 594, 10, 40, 12, 40, 14, 40, 597, 11, 40, 3, 41, 3, 41, 3, 41, 7, 41, 602, 10, 41, 12, 41, 14, 41, 605, 11, 41, 3, 42, 3, 42, 5, 42, 609, 10, 42, 3, 43, 3, 43, 3, 43, 3, 43, 5, 43, 615, 10, 43, 3, 43, 3, 43, 3, 43, 5, 43, 620, 10, 43, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 7, 46, 633, 10, 46, 12, 46, 14, 46, 636, 11, 46, 3, 46, 3, 46, 5, 46, 640, 10, 46, 3, 47, 3, 47, 3, 48, 3, 48, 3, 49, 3, 49, 7, 49, 648, 10, 49, 12, 49, 14, 49, 651, 11, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 5, 50, 670, 10, 50, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 5, 52, 682, 10, 52, 3, 53, 3, 53, 3, 53, 5, 53, 687, 10, 53, 3, 53, 3, 53, 6, 53, 691, 10, 53, 13, 53, 14, 53, 692, 3, 54, 3, 54, 5, 54, 697, 10, 54, 3, 54, 5, 54, 700, 10, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 5, 56, 712, 10, 56, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 58, 5, 58, 721, 10, 58, 3, 58, 3, 58, 5, 58, 725, 10, 58, 3, 58, 5, 58, 728, 10, 58, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 5, 59, 735, 10, 59, 3, 59, 3, 59, 3, 59, 3, 59, 5, 59, 741, 10, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 5, 64, 763, 10, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 66, 3, 67, 3, 67, 3, 67, 3, 67, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 5, 68, 785, 10, 68, 3, 68, 3, 68, 5, 68, 789, 10, 68, 3, 68, 3, 68, 3, 69, 5, 69, 794, 10, 69, 3, 69, 3, 69, 5, 69, 798, 10, 69, 7, 69, 800, 10, 69, 12, 69, 14, 69, 803, 11, 69, 3, 70, 3, 70, 5, 70, 807, 10, 70, 3, 70, 7, 70, 810, 10, 70, 12, 70, 14, 70, 813, 11, 70, 3, 70, 5, 70, 816, 10, 70, 3, 70, 3, 70, 3, 71, 3, 71, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 5, 72, 840, 10, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 5, 72, 894, 10, 72, 3, 72, 3, 72, 5, 72, 898, 10, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 7, 72, 914, 10, 72, 12, 72, 14, 72, 917, 11, 72, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 5, 73, 928, 10, 73, 3, 74, 3, 74, 3, 74, 7, 74, 933, 10, 74, 12, 74, 14, 74, 936, 11, 74, 3, 75, 3, 75, 3, 75, 7, 75, 941, 10, 75, 12, 75, 14, 75, 944, 11, 75, 3, 75, 5, 75, 947, 10, 75, 3, 76, 3, 76, 3, 76, 3, 76, 3, 77, 3, 77, 5, 77, 955, 10, 77, 3, 77, 3, 77, 5, 77, 959, 10, 77, 5, 77, 961, 10, 77, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 79, 3, 79, 7, 79, 970, 10, 79, 12, 79, 14, 79, 973, 11, 79, 3, 79, 3, 79, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 5, 80, 994, 10, 80, 3, 81, 3, 81, 3, 81, 5, 81, 999, 10, 81, 3, 82, 3, 82, 3, 82, 3, 82, 3, 83, 3, 83, 3, 83, 3, 83, 5, 83, 1009, 10, 83, 3, 83, 3, 83, 5, 83, 1013, 10, 83, 3, 83, 3, 83, 7, 83, 1017, 10, 83, 12, 83, 14, 83, 1020, 11, 83, 3, 83, 5, 83, 1023, 10, 83, 3, 84, 3, 84, 3, 84, 3, 84, 5, 84, 1029, 10, 84, 3, 85, 3, 85, 3, 85, 3, 85, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 5, 86, 1042, 10, 86, 3, 87, 3, 87, 3, 87, 7, 87, 1047, 10, 87, 12, 87, 14, 87, 1050, 11, 87, 3, 88, 3, 88, 3, 88, 3, 88, 3, 89, 3, 89, 3, 89, 3, 90, 3, 90, 3, 90, 7, 90, 1062, 10, 90, 12, 90, 14, 90, 1065, 11, 90, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 5, 91, 1073, 10, 91, 3, 92, 3, 92, 3, 92, 3, 92, 5, 92, 1079, 10, 92, 3, 92, 3, 92, 5, 92, 1083, 10, 92, 3, 92, 3, 92, 3, 93, 3, 93, 3, 93, 3, 94, 3, 94, 3, 94, 5, 94, 1093, 10, 94, 3, 94, 3, 94, 3, 94, 5, 94, 1098, 10, 94, 3, 94, 3, 94, 3, 95, 3, 95, 3, 95, 3, 95, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 5, 96, 1111, 10, 96, 3, 97, 3, 97, 5, 97, 1115, 10, 97, 3, 97, 3, 97, 5, 97, 1119, 10, 97, 7, 97, 1121, 10, 97, 12, 97, 14, 97, 1124, 11, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 7, 97, 1131, 10, 97, 12, 97, 14, 97, 1134, 11, 97, 5, 97, 1136, 10, 97, 3, 97, 5, 97, 1139, 10, 97, 3, 98, 3, 98, 5, 98, 1143, 10, 98, 3, 99, 3, 99, 3, 100, 6, 100, 1148, 10, 100, 13, 100, 14, 100, 1149, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 7, 101, 1157, 10, 101, 12, 101, 14, 101, 1160, 11, 101, 3, 101, 3, 101, 5, 101, 1164, 10, 101, 3, 102, 6, 102, 1167, 10, 102, 13, 102, 14, 102, 1168, 3, 102, 2, 4, 78, 142, 103, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 2, 17, 3, 2, 7, 13, 3, 2, 21, 23, 5, 2, 5, 5, 7, 12, 30, 37, 3, 2, 50, 52, 6, 2, 112, 112, 119, 119, 123, 123, 125, 125, 5, 2, 46, 46, 65, 68, 99, 103, 3, 2, 69, 70, 3, 2, 32, 33, 4, 2, 5, 5, 34, 35, 3, 2, 76, 77, 3, 2, 9, 12, 3, 2, 36, 37, 4, 2, 13, 13, 80, 89, 3, 2, 105, 106, 12, 2, 16, 16, 27, 27, 46, 46, 52, 52, 64, 64, 97, 97, 115, 115, 119, 119, 126, 127, 129, 130, 2, 1299, 2, 216, 3, 2, 2, 2, 4, 221, 3, 2, 2, 2, 6, 226, 3, 2, 2, 2, 8, 231, 3, 2, 2, 2, 10, 233, 3, 2, 2, 2, 12, 243, 3, 2, 2, 2, 14, 253, 3, 2, 2, 2, 16, 255, 3, 2, 2, 2, 18, 296, 3, 2, 2, 2, 20, 298, 3, 2, 2, 2, 22, 301, 3, 2, 2, 2, 24, 325, 3, 2, 2, 2, 26, 342, 3, 2, 2, 2, 28, 344, 3, 2, 2, 2, 30, 363, 3, 2, 2, 2, 32, 370, 3, 2, 2, 2, 34, 375, 3, 2, 2, 2, 36, 381, 3, 2, 2, 2, 38, 405, 3, 2, 2, 2, 40, 407, 3, 2, 2, 2, 42, 412, 3, 2, 2, 2, 44, 414, 3, 2, 2, 2, 46, 431, 3, 2, 2, 2, 48, 447, 3, 2, 2, 2, 50, 455, 3, 2, 2, 2, 52, 472, 3, 2, 2, 2, 54, 474, 3, 2, 2, 2, 56, 487, 3, 2, 2, 2, 58, 490, 3, 2, 2, 2, 60, 498, 3, 2, 2, 2, 62, 500, 3, 2, 2, 2, 64, 515, 3, 2, 2, 2, 66, 528, 3, 2, 2, 2, 68, 535, 3, 2, 2, 2, 70, 548, 3, 2, 2, 2, 72, 555, 3, 2, 2, 2, 74, 568, 3, 2, 2, 2, 76, 572, 3, 2, 2, 2, 78, 585, 3, 2, 2, 2, 80, 598, 3, 2, 2, 2, 82, 608, 3, 2, 2, 2, 84, 610, 3, 2, 2, 2, 86, 623, 3, 2, 2, 2, 88, 625, 3, 2, 2, 2, 90, 627, 3, 2, 2, 2, 92, 641, 3, 2, 2, 2, 94, 643, 3, 2, 2, 2, 96, 645, 3, 2, 2, 2, 98, 669, 3, 2, 2, 2, 100, 671, 3, 2, 2, 2, 102, 674, 3, 2, 2, 2, 104, 683, 3, 2, 2, 2, 106, 694, 3, 2, 2, 2, 108, 703, 3, 2, 2, 2, 110, 711, 3, 2, 2, 2, 112, 713, 3, 2, 2, 2, 114, 716, 3, 2, 2, 2, 116, 732, 3, 2, 2, 2, 118, 744, 3, 2, 2, 2, 120, 746, 3, 2, 2, 2, 122, 754, 3, 2, 2, 2, 124, 757, 3, 2, 2, 2, 126, 760, 3, 2, 2, 2, 128, 766, 3, 2, 2, 2, 130, 769, 3, 2, 2, 2, 132, 773, 3, 2, 2, 2, 134, 784, 3, 2, 2, 2, 136, 793, 3, 2, 2, 2, 138, 804, 3, 2, 2, 2, 140, 819, 3, 2, 2, 2, 142, 839, 3, 2, 2, 2, 144, 927, 3, 2, 2, 2, 146, 929, 3, 2, 2, 2, 148, 937, 3, 2, 2, 2, 150, 948, 3, 2, 2, 2, 152, 960, 3, 2, 2, 2, 154, 962, 3, 2, 2, 2, 156, 967, 3, 2, 2, 2, 158, 993, 3, 2, 2, 2, 160, 998, 3, 2, 2, 2, 162, 1000, 3, 2, 2, 2, 164, 1008, 3, 2, 2, 2, 166, 1024, 3, 2, 2, 2, 168, 1030, 3, 2, 2, 2, 170, 1041, 3, 2, 2, 2, 172, 1043, 3, 2, 2, 2, 174, 1051, 3, 2, 2, 2, 176, 1055, 3, 2, 2, 2, 178, 1058, 3, 2, 2, 2, 180, 1072, 3, 2, 2, 2, 182, 1074, 3, 2, 2, 2, 184, 1086, 3, 2, 2, 2, 186, 1089, 3, 2, 2, 2, 188, 1101, 3, 2, 2, 2, 190, 1110, 3, 2, 2, 2, 192, 1138, 3, 2, 2, 2, 194, 1140, 3, 2, 2, 2, 196, 1144, 3, 2, 2, 2, 198, 1147, 3, 2, 2, 2, 200, 1151, 3, 2, 2, 2, 202, 1166, 3, 2, 2, 2, 204, 215, 5, 4, 3, 2, 205, 215, 5, 18, 10, 2, 206, 215, 5, 22, 12, 2, 207, 215, 5, 62, 32, 2, 208, 215, 5, 44, 23, 2, 209, 215, 5, 50, 26, 2, 210, 215, 5, 30, 16, 2, 211, 215, 5, 32, 17, 2, 212, 215, 5, 34, 18, 2, 213, 215, 5, 36, 19, 2, 214, 204, 3, 2, 2, 2, 214, 205, 3, 2, 2, 2, 214, 206, 3, 2, 2, 2, 214, 207, 3, 2, 2, 2, 214, 208, 3, 2, 2, 2, 214, 209, 3, 2, 2, 2, 214, 210, 3, 2, 2, 2, 214, 211, 3, 2, 2, 2, 214, 212, 3, 2, 2, 2, 214, 213, 3, 2, 2, 2, 215, 218, 3, 2, 2, 2, 216, 214, 3, 2, 2, 2, 216, 217, 3, 2, 2, 2, 217, 219, 3, 2, 2, 2, 218, 216, 3, 2, 2, 2, 219, 220, 7, 2, 2, 3, 220, 3, 3, 2, 2, 2, 221, 222, 7, 3, 2, 2, 222, 223, 5, 6, 4, 2, 223, 224, 5, 8, 5, 2, 224, 225, 7, 4, 2, 2, 225, 5, 3, 2, 2, 2, 226, 227, 5, 196, 99, 2, 227, 7, 3, 2, 2, 2, 228, 232, 7, 5, 2, 2, 229, 232, 5, 10, 6, 2, 230, 232, 5, 142, 72, 2, 231, 228, 3, 2, 2, 2, 231, 229, 3, 2, 2, 2, 231, 230, 3, 2, 2, 2, 232, 9, 3, 2, 2, 2, 233, 240, 5, 14, 8, 2, 234, 236, 7, 6, 2, 2, 235, 234, 3, 2, 2, 2, 235, 236, 3, 2, 2, 2, 236, 237, 3, 2, 2, 2, 237, 239, 5, 14, 8, 2, 238, 235, 3, 2, 2, 2, 239, 242, 3, 2, 2, 2, 240, 238, 3, 2, 2, 2, 240, 241, 3, 2, 2, 2, 241, 11, 3, 2, 2, 2, 242, 240, 3, 2, 2, 2, 243, 244, 9, 2, 2, 2, 244, 13, 3, 2, 2, 2, 245, 247, 5, 12, 7, 2, 246, 245, 3, 2, 2, 2, 246, 247, 3, 2, 2, 2, 247, 248, 3, 2, 2, 2, 248, 254, 7, 132, 2, 2, 249, 251, 5, 12, 7, 2, 250, 249, 3, 2, 2, 2, 250, 251, 3, 2, 2, 2, 251, 252, 3, 2, 2, 2, 252, 254, 7, 105, 2, 2, 253, 246, 3, 2, 2, 2, 253, 250, 3, 2, 2, 2, 254, 15, 3, 2, 2, 2, 255, 258, 5, 196, 99, 2, 256, 257, 7, 14, 2, 2, 257, 259, 5, 196, 99, 2, 258, 256, 3, 2, 2, 2, 258, 259, 3, 2, 2, 2, 259, 17, 3, 2, 2, 2, 260, 261, 7, 15, 2, 2, 261, 264, 5, 20, 11, 2, 262, 263, 7, 14, 2, 2, 263, 265, 5, 196, 99, 2, 264, 262, 3, 2, 2, 2, 264, 265, 3, 2, 2, 2, 265, 266, 3, 2, 2, 2, 266, 267, 7, 4, 2, 2, 267, 297, 3, 2, 2, 2, 268, 271, 7, 15, 2, 2, 269, 272, 7, 5, 2, 2, 270, 272, 5, 196, 99, 2, 271, 269, 3, 2, 2, 2, 271, 270, 3, 2, 2, 2, 272, 275, 3, 2, 2, 2, 273, 274, 7, 14, 2, 2, 274, 276, 5, 196, 99, 2, 275, 273, 3, 2, 2, 2, 275, 276, 3, 2, 2, 2, 276, 277, 3, 2, 2, 2, 277, 278, 7, 16, 2, 2, 278, 279, 5, 20, 11, 2, 279, 280, 7, 4, 2, 2, 280, 297, 3, 2, 2, 2, 281, 282, 7, 15, 2, 2, 282, 283, 7, 17, 2, 2, 283, 288, 5, 16, 9, 2, 284, 285, 7, 18, 2, 2, 285, 287, 5, 16, 9, 2, 286, 284, 3, 2, 2, 2, 287, 290, 3, 2, 2, 2, 288, 286, 3, 2, 2, 2, 288, 289, 3, 2, 2, 2, 289, 291, 3, 2, 2, 2, 290, 288, 3, 2, 2, 2, 291, 292, 7, 19, 2, 2, 292, 293, 7, 16, 2, 2, 293, 294, 5, 20, 11, 2, 294, 295, 7, 4, 2, 2, 295, 297, 3, 2, 2, 2, 296, 260, 3, 2, 2, 2, 296, 268, 3, 2, 2, 2, 296, 281, 3, 2, 2, 2, 297, 19, 3, 2, 2, 2, 298, 299, 7, 131, 2, 2, 299, 21, 3, 2, 2, 2, 300, 302, 7, 20, 2, 2, 301, 300, 3, 2, 2, 2, 301, 302, 3, 2, 2, 2, 302, 303, 3, 2, 2, 2, 303, 304, 9, 3, 2, 2, 304, 314, 5, 196, 99, 2, 305, 306, 7, 24, 2, 2, 306, 311, 5, 24, 13, 2, 307, 308, 7, 18, 2, 2, 308, 310, 5, 24, 13, 2, 309, 307, 3, 2, 2, 2, 310, 313, 3, 2, 2, 2, 311, 309, 3, 2, 2, 2, 311, 312, 3, 2, 2, 2, 312, 315, 3, 2, 2, 2, 313, 311, 3, 2, 2, 2, 314, 305, 3, 2, 2, 2, 314, 315, 3, 2, 2, 2, 315, 316, 3, 2, 2, 2, 316, 320, 7, 17, 2, 2, 317, 319, 5, 26, 14, 2, 318, 317, 3, 2, 2, 2, 319, 322, 3, 2, 2, 2, 320, 318, 3, 2, 2, 2, 320, 321, 3, 2, 2, 2, 321, 323, 3, 2, 2, 2, 322, 320, 3, 2, 2, 2, 323, 324, 7, 19, 2, 2, 324, 23, 3, 2, 2, 2, 325, 331, 5, 80, 41, 2, 326, 328, 7, 25, 2, 2, 327, 329, 5, 146, 74, 2, 328, 327, 3, 2, 2, 2, 328, 329, 3, 2, 2, 2, 329, 330, 3, 2, 2, 2, 330, 332, 7, 26, 2, 2, 331, 326, 3, 2, 2, 2, 331, 332, 3, 2, 2, 2, 332, 25, 3, 2, 2, 2, 333, 343, 5, 28, 15, 2, 334, 343, 5, 36, 19, 2, 335, 343, 5, 44, 23, 2, 336, 343, 5, 46, 24, 2, 337, 343, 5, 50, 26, 2, 338, 343, 5, 58, 30, 2, 339, 343, 5, 62, 32, 2, 340, 343, 5, 32, 17, 2, 341, 343, 5, 34, 18, 2, 342, 333, 3, 2, 2, 2, 342, 334, 3, 2, 2, 2, 342, 335, 3, 2, 2, 2, 342, 336, 3, 2, 2, 2, 342, 337, 3, 2, 2, 2, 342, 338, 3, 2, 2, 2, 342, 339, 3, 2, 2, 2, 342, 340, 3, 2, 2, 2, 342, 341, 3, 2, 2, 2, 343, 27, 3, 2, 2, 2, 344, 353, 5, 78, 40, 2, 345, 352, 7, 121, 2, 2, 346, 352, 7, 118, 2, 2, 347, 352, 7, 120, 2, 2, 348, 352, 7, 112, 2, 2, 349, 352, 7, 113, 2, 2, 350, 352, 5, 200, 101, 2, 351, 345, 3, 2, 2, 2, 351, 346, 3, 2, 2, 2, 351, 347, 3, 2, 2, 2, 351, 348, 3, 2, 2, 2, 351, 349, 3, 2, 2, 2, 351, 350, 3, 2, 2, 2, 352, 355, 3, 2, 2, 2, 353, 351, 3, 2, 2, 2, 353, 354, 3, 2, 2, 2, 354, 356, 3, 2, 2, 2, 355, 353, 3, 2, 2, 2, 356, 359, 5, 196, 99, 2, 357, 358, 7, 13, 2, 2, 358, 360, 5, 142, 72, 2, 359, 357, 3, 2, 2, 2, 359, 360, 3, 2, 2, 2, 360, 361, 3, 2, 2, 2, 361, 362, 7, 4, 2, 2, 362, 29, 3, 2, 2, 2, 363, 364, 5, 78, 40, 2, 364, 365, 7, 112, 2, 2, 365, 366, 5, 196, 99, 2, 366, 367, 7, 13, 2, 2, 367, 368, 5, 142, 72, 2, 368, 369, 7, 4, 2, 2, 369, 31, 3, 2, 2, 2, 370, 371, 7, 27, 2, 2, 371, 372, 5, 196, 99, 2, 372, 373, 5, 64, 33, 2, 373, 374, 7, 4, 2, 2, 374, 33, 3, 2, 2, 2, 375, 376, 7, 124, 2, 2, 376, 377, 5, 196, 99, 2, 377, 378, 7, 24, 2, 2, 378, 379, 5, 140, 71, 2, 379, 380, 7, 4, 2, 2, 380, 35, 3, 2, 2, 2, 381, 382, 7, 28, 2, 2, 382, 383, 5, 38, 20, 2, 383, 386, 7, 29, 2, 2, 384, 387, 7, 5, 2, 2, 385, 387, 5, 78, 40, 2, 386, 384, 3, 2, 2, 2, 386, 385, 3, 2, 2, 2, 387, 389, 3, 2, 2, 2, 388, 390, 7, 126, 2, 2, 389, 388, 3, 2, 2, 2, 389, 390, 3, 2, 2, 2, 390, 391, 3, 2, 2, 2, 391, 392, 7, 4, 2, 2, 392, 37, 3, 2, 2, 2, 393, 406, 5, 80, 41, 2, 394, 395, 7, 17, 2, 2, 395, 400, 5, 40, 21, 2, 396, 397, 7, 18, 2, 2, 397, 399, 5, 40, 21, 2, 398, 396, 3, 2, 2, 2, 399, 402, 3, 2, 2, 2, 400, 398, 3, 2, 2, 2, 400, 401, 3, 2, 2, 2, 401, 403, 3, 2, 2, 2, 402, 400, 3, 2, 2, 2, 403, 404, 7, 19, 2, 2, 404, 406, 3, 2, 2, 2, 405, 393, 3, 2, 2, 2, 405, 394, 3, 2, 2, 2, 406, 39, 3, 2, 2, 2, 407, 410, 5, 80, 41, 2, 408, 409, 7, 14, 2, 2, 409, 411, 5, 42, 22, 2, 410, 408, 3, 2, 2, 2, 410, 411, 3, 2, 2, 2, 411, 41, 3, 2, 2, 2, 412, 413, 9, 4, 2, 2, 413, 43, 3, 2, 2, 2, 414, 415, 7, 38, 2, 2, 415, 416, 5, 196, 99, 2, 416, 427, 7, 17, 2, 2, 417, 418, 5, 76, 39, 2, 418, 424, 7, 4, 2, 2, 419, 420, 5, 76, 39, 2, 420, 421, 7, 4, 2, 2, 421, 423, 3, 2, 2, 2, 422, 419, 3, 2, 2, 2, 423, 426, 3, 2, 2, 2, 424, 422, 3, 2, 2, 2, 424, 425, 3, 2, 2, 2, 425, 428, 3, 2, 2, 2, 426, 424, 3, 2, 2, 2, 427, 417, 3, 2, 2, 2, 427, 428, 3, 2, 2, 2, 428, 429, 3, 2, 2, 2, 429, 430, 7, 19, 2, 2, 430, 45, 3, 2, 2, 2, 431, 432, 7, 39, 2, 2, 432, 434, 5, 196, 99, 2, 433, 435, 5, 64, 33, 2, 434, 433, 3, 2, 2, 2, 434, 435, 3, 2, 2, 2, 435, 440, 3, 2, 2, 2, 436, 439, 7, 122, 2, 2, 437, 439, 5, 200, 101, 2, 438, 436, 3, 2, 2, 2, 438, 437, 3, 2, 2, 2, 439, 442, 3, 2, 2, 2, 440, 438, 3, 2, 2, 2, 440, 441, 3, 2, 2, 2, 441, 445, 3, 2, 2, 2, 442, 440, 3, 2, 2, 2, 443, 446, 7, 4, 2, 2, 444, 446, 5, 96, 49, 2, 445, 443, 3, 2, 2, 2, 445, 444, 3, 2, 2, 2, 446, 47, 3, 2, 2, 2, 447, 453, 5, 196, 99, 2, 448, 450, 7, 25, 2, 2, 449, 451, 5, 146, 74, 2, 450, 449, 3, 2, 2, 2, 450, 451, 3, 2, 2, 2, 451, 452, 3, 2, 2, 2, 452, 454, 7, 26, 2, 2, 453, 448, 3, 2, 2, 2, 453, 454, 3, 2, 2, 2, 454, 49, 3, 2, 2, 2, 455, 456, 5, 52, 27, 2, 456, 457, 5, 64, 33, 2, 457, 459, 5, 56, 29, 2, 458, 460, 5, 54, 28, 2, 459, 458, 3, 2, 2, 2, 459, 460, 3, 2, 2, 2, 460, 463, 3, 2, 2, 2, 461, 464, 7, 4, 2, 2, 462, 464, 5, 96, 49, 2, 463, 461, 3, 2, 2, 2, 463, 462, 3, 2, 2, 2, 464, 51, 3, 2, 2, 2, 465, 467, 7, 40, 2, 2, 466, 468, 5, 196, 99, 2, 467, 466, 3, 2, 2, 2, 467, 468, 3, 2, 2, 2, 468, 473, 3, 2, 2, 2, 469, 473, 7, 127, 2, 2, 470, 473, 7, 128, 2, 2, 471, 473, 7, 129, 2, 2, 472, 465, 3, 2, 2, 2, 472, 469, 3, 2, 2, 2, 472, 470, 3, 2, 2, 2, 472, 471, 3, 2, 2, 2, 473, 53, 3, 2, 2, 2, 474, 475, 7, 41, 2, 2, 475, 476, 5, 64, 33, 2, 476, 55, 3, 2, 2, 2, 477, 486, 7, 116, 2, 2, 478, 486, 7, 121, 2, 2, 479, 486, 7, 118, 2, 2, 480, 486, 7, 120, 2, 2, 481, 486, 7, 122, 2, 2, 482, 486, 5, 94, 48, 2, 483, 486, 5, 48, 25, 2, 484, 486, 5, 200, 101, 2, 485, 477, 3, 2, 2, 2, 485, 478, 3, 2, 2, 2, 485, 479, 3, 2, 2, 2, 485, 480, 3, 2, 2, 2, 485, 481, 3, 2, 2, 2, 485, 482, 3, 2, 2, 2, 485, 483, 3, 2, 2, 2, 485, 484, 3, 2, 2, 2, 486, 489, 3, 2, 2, 2, 487, 485, 3, 2, 2, 2, 487, 488, 3, 2, 2, 2, 488, 57, 3, 2, 2, 2, 489, 487, 3, 2, 2, 2, 490, 491, 7, 42, 2, 2, 491, 492, 5, 196, 99, 2, 492, 494, 5, 68, 35, 2, 493, 495, 7, 110, 2, 2, 494, 493, 3, 2, 2, 2, 494, 495, 3, 2, 2, 2, 495, 496, 3, 2, 2, 2, 496, 497, 7, 4, 2, 2, 497, 59, 3, 2, 2, 2, 498, 499, 5, 196, 99, 2, 499, 61, 3, 2, 2, 2, 500, 501, 7, 43, 2, 2, 501, 502, 5, 196, 99, 2, 502, 504, 7, 17, 2, 2, 503, 505, 5, 60, 31, 2, 504, 503, 3, 2, 2, 2, 504, 505, 3, 2, 2, 2, 505, 510, 3, 2, 2, 2, 506, 507, 7, 18, 2, 2, 507, 509, 5, 60, 31, 2, 508, 506, 3, 2, 2, 2, 509, 512, 3, 2, 2, 2, 510, 508, 3, 2, 2, 2, 510, 511, 3, 2, 2, 2, 511, 513, 3, 2, 2, 2, 512, 510, 3, 2, 2, 2, 513, 514, 7, 19, 2, 2, 514, 63, 3, 2, 2, 2, 515, 524, 7, 25, 2, 2, 516, 521, 5, 66, 34, 2, 517, 518, 7, 18, 2, 2, 518, 520, 5, 66, 34, 2, 519, 517, 3, 2, 2, 2, 520, 523, 3, 2, 2, 2, 521, 519, 3, 2, 2, 2, 521, 522, 3, 2, 2, 2, 522, 525, 3, 2, 2, 2, 523, 521, 3, 2, 2, 2, 524, 516, 3, 2, 2, 2, 524, 525, 3, 2, 2, 2, 525, 526, 3, 2, 2, 2, 526, 527, 7, 26, 2, 2, 527, 65, 3, 2, 2, 2, 528, 530, 5, 78, 40, 2, 529, 531, 5, 92, 47, 2, 530, 529, 3, 2, 2, 2, 530, 531, 3, 2, 2, 2, 531, 533, 3, 2, 2, 2, 532, 534, 5, 196, 99, 2, 533, 532, 3, 2, 2, 2, 533, 534, 3, 2, 2, 2, 534, 67, 3, 2, 2, 2, 535, 544, 7, 25, 2, 2, 536, 541, 5, 70, 36, 2, 537, 538, 7, 18, 2, 2, 538, 540, 5, 70, 36, 2, 539, 537, 3, 2, 2, 2, 540, 543, 3, 2, 2, 2, 541, 539, 3, 2, 2, 2, 541, 542, 3, 2, 2, 2, 542, 545, 3, 2, 2, 2, 543, 541, 3, 2, 2, 2, 544, 536, 3, 2, 2, 2, 544, 545, 3, 2, 2, 2, 545, 546, 3, 2, 2, 2, 546, 547, 7, 26, 2, 2, 547, 69, 3, 2, 2, 2, 548, 550, 5, 78, 40, 2, 549, 551, 7, 117, 2, 2, 550, 549, 3, 2, 2, 2, 550, 551, 3, 2, 2, 2, 551, 553, 3, 2, 2, 2, 552, 554, 5, 196, 99, 2, 553, 552, 3, 2, 2, 2, 553, 554, 3, 2, 2, 2, 554, 71, 3, 2, 2, 2, 555, 564, 7, 25, 2, 2, 556, 561, 5, 74, 38, 2, 557, 558, 7, 18, 2, 2, 558, 560, 5, 74, 38, 2, 559, 557, 3, 2, 2, 2, 560, 563, 3, 2, 2, 2, 561, 559, 3, 2, 2, 2, 561, 562, 3, 2, 2, 2, 562, 565, 3, 2, 2, 2, 563, 561, 3, 2, 2, 2, 564, 556, 3, 2, 2, 2, 564, 565, 3, 2, 2, 2, 565, 566, 3, 2, 2, 2, 566, 567, 7, 26, 2, 2, 567, 73, 3, 2, 2, 2, 568, 570, 5, 78, 40, 2, 569, 571, 5, 92, 47, 2, 570, 569, 3, 2, 2, 2, 570, 571, 3, 2, 2, 2, 571, 75, 3, 2, 2, 2, 572, 574, 5, 78, 40, 2, 573, 575, 5, 92, 47, 2, 574, 573, 3, 2, 2, 2, 574, 575, 3, 2, 2, 2, 575, 576, 3, 2, 2, 2, 576, 577, 5, 196, 99, 2, 577, 77, 3, 2, 2, 2, 578, 579, 8, 40, 1, 2, 579, 586, 5, 140, 71, 2, 580, 586, 5, 80, 41, 2, 581, 586, 5, 84, 43, 2, 582, 586, 5, 90, 46, 2, 583, 584, 7, 46, 2, 2, 584, 586, 7, 119, 2, 2, 585, 578, 3, 2, 2, 2, 585, 580, 3, 2, 2, 2, 585, 581, 3, 2, 2, 2, 585, 582, 3, 2, 2, 2, 585, 583, 3, 2, 2, 2, 586, 595, 3, 2, 2, 2, 587, 588, 12, 5, 2, 2, 588, 590, 7, 44, 2, 2, 589, 591, 5, 142, 72, 2, 590, 589, 3, 2, 2, 2, 590, 591, 3, 2, 2, 2, 591, 592, 3, 2, 2, 2, 592, 594, 7, 45, 2, 2, 593, 587, 3, 2, 2, 2, 594, 597, 3, 2, 2, 2, 595, 593, 3, 2, 2, 2, 595, 596, 3, 2, 2, 2, 596, 79, 3, 2, 2, 2, 597, 595, 3, 2, 2, 2, 598, 603, 5, 196, 99, 2, 599, 600, 7, 47, 2, 2, 600, 602, 5, 196, 99, 2, 601, 599, 3, 2, 2, 2, 602, 605, 3, 2, 2, 2, 603, 601, 3, 2, 2, 2, 603, 604, 3, 2, 2, 2, 604, 81, 3, 2, 2, 2, 605, 603, 3, 2, 2, 2, 606, 609, 5, 140, 71, 2, 607, 609, 5, 80, 41, 2, 608, 606, 3, 2, 2, 2, 608, 607, 3, 2, 2, 2, 609, 83, 3, 2, 2, 2, 610, 611, 7, 48, 2, 2, 611, 612, 7, 25, 2, 2, 612, 614, 5, 82, 42, 2, 613, 615, 5, 86, 44, 2, 614, 613, 3, 2, 2, 2, 614, 615, 3, 2, 2, 2, 615, 616, 3, 2, 2, 2, 616, 617, 7, 49, 2, 2, 617, 619, 5, 78, 40, 2, 618, 620, 5, 88, 45, 2, 619, 618, 3, 2, 2, 2, 619, 620, 3, 2, 2, 2, 620, 621, 3, 2, 2, 2, 621, 622, 7, 26, 2, 2, 622, 85, 3, 2, 2, 2, 623, 624, 5, 196, 99, 2, 624, 87, 3, 2, 2, 2, 625, 626, 5, 196, 99, 2, 626, 89, 3, 2, 2, 2, 627, 628, 7, 40, 2, 2, 628, 634, 5, 72, 37, 2, 629, 633, 7, 118, 2, 2, 630, 633, 7, 116, 2, 2, 631, 633, 5, 94, 48, 2, 632, 629, 3, 2, 2, 2, 632, 630, 3, 2, 2, 2, 632, 631, 3, 2, 2, 2, 633, 636, 3, 2, 2, 2, 634, 632, 3, 2, 2, 2, 634, 635, 3, 2, 2, 2, 635, 639, 3, 2, 2, 2, 636, 634, 3, 2, 2, 2, 637, 638, 7, 41, 2, 2, 638, 640, 5, 72, 37, 2, 639, 637, 3, 2, 2, 2, 639, 640, 3, 2, 2, 2, 640, 91, 3, 2, 2, 2, 641, 642, 9, 5, 2, 2, 642, 93, 3, 2, 2, 2, 643, 644, 9, 6, 2, 2, 644, 95, 3, 2, 2, 2, 645, 649, 7, 17, 2, 2, 646, 648, 5, 98, 50, 2, 647, 646, 3, 2, 2, 2, 648, 651, 3, 2, 2, 2, 649, 647, 3, 2, 2, 2, 649, 650, 3, 2, 2, 2, 650, 652, 3, 2, 2, 2, 651, 649, 3, 2, 2, 2, 652, 653, 7, 19, 2, 2, 653, 97, 3, 2, 2, 2, 654, 670, 5, 102, 52, 2, 655, 670, 5, 104, 53, 2, 656, 670, 5, 108, 55, 2, 657, 670, 5, 114, 58, 2, 658, 670, 5, 96, 49, 2, 659, 670, 5, 116, 59, 2, 660, 670, 5, 120, 61, 2, 661, 670, 5, 122, 62, 2, 662, 670, 5, 124, 63, 2, 663, 670, 5, 126, 64, 2, 664, 670, 5, 128, 65, 2, 665, 670, 5, 130, 66, 2, 666, 670, 5, 110, 56, 2, 667, 670, 5, 112, 57, 2, 668, 670, 5, 132, 67, 2, 669, 654, 3, 2, 2, 2, 669, 655, 3, 2, 2, 2, 669, 656, 3, 2, 2, 2, 669, 657, 3, 2, 2, 2, 669, 658, 3, 2, 2, 2, 669, 659, 3, 2, 2, 2, 669, 660, 3, 2, 2, 2, 669, 661, 3, 2, 2, 2, 669, 662, 3, 2, 2, 2, 669, 663, 3, 2, 2, 2, 669, 664, 3, 2, 2, 2, 669, 665, 3, 2, 2, 2, 669, 666, 3, 2, 2, 2, 669, 667, 3, 2, 2, 2, 669, 668, 3, 2, 2, 2, 670, 99, 3, 2, 2, 2, 671, 672, 5, 142, 72, 2, 672, 673, 7, 4, 2, 2, 673, 101, 3, 2, 2, 2, 674, 675, 7, 53, 2, 2, 675, 676, 7, 25, 2, 2, 676, 677, 5, 142, 72, 2, 677, 678, 7, 26, 2, 2, 678, 681, 5, 98, 50, 2, 679, 680, 7, 54, 2, 2, 680, 682, 5, 98, 50, 2, 681, 679, 3, 2, 2, 2, 681, 682, 3, 2, 2, 2, 682, 103, 3, 2, 2, 2, 683, 684, 7, 55, 2, 2, 684, 686, 5, 142, 72, 2, 685, 687, 5, 54, 28, 2, 686, 685, 3, 2, 2, 2, 686, 687, 3, 2, 2, 2, 687, 688, 3, 2, 2, 2, 688, 690, 5, 96, 49, 2, 689, 691, 5, 106, 54, 2, 690, 689, 3, 2, 2, 2, 691, 692, 3, 2, 2, 2, 692, 690, 3, 2, 2, 2, 692, 693, 3, 2, 2, 2, 693, 105, 3, 2, 2, 2, 694, 699, 7, 56, 2, 2, 695, 697, 5, 196, 99, 2, 696, 695, 3, 2, 2, 2, 696, 697, 3, 2, 2, 2, 697, 698, 3, 2, 2, 2, 698, 700, 5, 64, 33, 2, 699, 696, 3, 2, 2, 2, 699, 700, 3, 2, 2, 2, 700, 701, 3, 2, 2, 2, 701, 702, 5, 96, 49, 2, 702, 107, 3, 2, 2, 2, 703, 704, 7, 57, 2, 2, 704, 705, 7, 25, 2, 2, 705, 706, 5, 142, 72, 2, 706, 707, 7, 26, 2, 2, 707, 708, 5, 98, 50, 2, 708, 109, 3, 2, 2, 2, 709, 712, 5, 134, 68, 2, 710, 712, 5, 100, 51, 2, 711, 709, 3, 2, 2, 2, 711, 710, 3, 2, 2, 2, 712, 111, 3, 2, 2, 2, 713, 714, 7, 58, 2, 2, 714, 715, 5, 96, 49, 2, 715, 113, 3, 2, 2, 2, 716, 717, 7, 29, 2, 2, 717, 720, 7, 25, 2, 2, 718, 721, 5, 110, 56, 2, 719, 721, 7, 4, 2, 2, 720, 718, 3, 2, 2, 2, 720, 719, 3, 2, 2, 2, 721, 724, 3, 2, 2, 2, 722, 725, 5, 100, 51, 2, 723, 725, 7, 4, 2, 2, 724, 722, 3, 2, 2, 2, 724, 723, 3, 2, 2, 2, 725, 727, 3, 2, 2, 2, 726, 728, 5, 142, 72, 2, 727, 726, 3, 2, 2, 2, 727, 728, 3, 2, 2, 2, 728, 729, 3, 2, 2, 2, 729, 730, 7, 26, 2, 2, 730, 731, 5, 98, 50, 2, 731, 115, 3, 2, 2, 2, 732, 734, 7, 59, 2, 2, 733, 735, 7, 131, 2, 2, 734, 733, 3, 2, 2, 2, 734, 735, 3, 2, 2, 2, 735, 740, 3, 2, 2, 2, 736, 737, 7, 25, 2, 2, 737, 738, 5, 118, 60, 2, 738, 739, 7, 26, 2, 2, 739, 741, 3, 2, 2, 2, 740, 736, 3, 2, 2, 2, 740, 741, 3, 2, 2, 2, 741, 742, 3, 2, 2, 2, 742, 743, 5, 156, 79, 2, 743, 117, 3, 2, 2, 2, 744, 745, 5, 202, 102, 2, 745, 119, 3, 2, 2, 2, 746, 747, 7, 60, 2, 2, 747, 748, 5, 98, 50, 2, 748, 749, 7, 57, 2, 2, 749, 750, 7, 25, 2, 2, 750, 751, 5, 142, 72, 2, 751, 752, 7, 26, 2, 2, 752, 753, 7, 4, 2, 2, 753, 121, 3, 2, 2, 2, 754, 755, 7, 114, 2, 2, 755, 756, 7, 4, 2, 2, 756, 123, 3, 2, 2, 2, 757, 758, 7, 111, 2, 2, 758, 759, 7, 4, 2, 2, 759, 125, 3, 2, 2, 2, 760, 762, 7, 61, 2, 2, 761, 763, 5, 142, 72, 2, 762, 761, 3, 2, 2, 2, 762, 763, 3, 2, 2, 2, 763, 764, 3, 2, 2, 2, 764, 765, 7, 4, 2, 2, 765, 127, 3, 2, 2, 2, 766, 767, 7, 62, 2, 2, 767, 768, 7, 4, 2, 2, 768, 129, 3, 2, 2, 2, 769, 770, 7, 63, 2, 2, 770, 771, 5, 154, 78, 2, 771, 772, 7, 4, 2, 2, 772, 131, 3, 2, 2, 2, 773, 774, 7, 64, 2, 2, 774, 775, 5, 154, 78, 2, 775, 776, 7, 4, 2, 2, 776, 133, 3, 2, 2, 2, 777, 778, 7, 65, 2, 2, 778, 785, 5, 138, 70, 2, 779, 785, 5, 76, 39, 2, 780, 781, 7, 25, 2, 2, 781, 782, 5, 136, 69, 2, 782, 783, 7, 26, 2, 2, 783, 785, 3, 2, 2, 2, 784, 777, 3, 2, 2, 2, 784, 779, 3, 2, 2, 2, 784, 780, 3, 2, 2, 2, 785, 788, 3, 2, 2, 2, 786, 787, 7, 13, 2, 2, 787, 789, 5, 142, 72, 2, 788, 786, 3, 2, 2, 2, 788, 789, 3, 2, 2, 2, 789, 790, 3, 2, 2, 2, 790, 791, 7, 4, 2, 2, 791, 135, 3, 2, 2, 2, 792, 794, 5, 76, 39, 2, 793, 792, 3, 2, 2, 2, 793, 794, 3, 2, 2, 2, 794, 801, 3, 2, 2, 2, 795, 797, 7, 18, 2, 2, 796, 798, 5, 76, 39, 2, 797, 796, 3, 2, 2, 2, 797, 798, 3, 2, 2, 2, 798, 800, 3, 2, 2, 2, 799, 795, 3, 2, 2, 2, 800, 803, 3, 2, 2, 2, 801, 799, 3, 2, 2, 2, 801, 802, 3, 2, 2, 2, 802, 137, 3, 2, 2, 2, 803, 801, 3, 2, 2, 2, 804, 811, 7, 25, 2, 2, 805, 807, 5, 196, 99, 2, 806, 805, 3, 2, 2, 2, 806, 807, 3, 2, 2, 2, 807, 808, 3, 2, 2, 2, 808, 810, 7, 18, 2, 2, 809, 806, 3, 2, 2, 2, 810, 813, 3, 2, 2, 2, 811, 809, 3, 2, 2, 2, 811, 812, 3, 2, 2, 2, 812, 815, 3, 2, 2, 2, 813, 811, 3, 2, 2, 2, 814, 816, 5, 196, 99, 2, 815, 814, 3, 2, 2, 2, 815, 816, 3, 2, 2, 2, 816, 817, 3, 2, 2, 2, 817, 818, 7, 26, 2, 2, 818, 139, 3, 2, 2, 2, 819, 820, 9, 7, 2, 2, 820, 141, 3, 2, 2, 2, 821, 822, 8, 72, 1, 2, 822, 823, 7, 71, 2, 2, 823, 840, 5, 78, 40, 2, 824, 825, 7, 25, 2, 2, 825, 826, 5, 142, 72, 2, 826, 827, 7, 26, 2, 2, 827, 840, 3, 2, 2, 2, 828, 829, 9, 8, 2, 2, 829, 840, 5, 142, 72, 21, 830, 831, 9, 9, 2, 2, 831, 840, 5, 142, 72, 20, 832, 833, 7, 73, 2, 2, 833, 840, 5, 142, 72, 19, 834, 835, 7, 74, 2, 2, 835, 840, 5, 142, 72, 18, 836, 837, 7, 8, 2, 2, 837, 840, 5, 142, 72, 17, 838, 840, 5, 144, 73, 2, 839, 821, 3, 2, 2, 2, 839, 824, 3, 2, 2, 2, 839, 828, 3, 2, 2, 2, 839, 830, 3, 2, 2, 2, 839, 832, 3, 2, 2, 2, 839, 834, 3, 2, 2, 2, 839, 836, 3, 2, 2, 2, 839, 838, 3, 2, 2, 2, 840, 915, 3, 2, 2, 2, 841, 842, 12, 16, 2, 2, 842, 843, 7, 75, 2, 2, 843, 914, 5, 142, 72, 17, 844, 845, 12, 15, 2, 2, 845, 846, 9, 10, 2, 2, 846, 914, 5, 142, 72, 16, 847, 848, 12, 14, 2, 2, 848, 849, 9, 9, 2, 2, 849, 914, 5, 142, 72, 15, 850, 851, 12, 13, 2, 2, 851, 852, 9, 11, 2, 2, 852, 914, 5, 142, 72, 14, 853, 854, 12, 12, 2, 2, 854, 855, 7, 31, 2, 2, 855, 914, 5, 142, 72, 13, 856, 857, 12, 11, 2, 2, 857, 858, 7, 7, 2, 2, 858, 914, 5, 142, 72, 12, 859, 860, 12, 10, 2, 2, 860, 861, 7, 30, 2, 2, 861, 914, 5, 142, 72, 11, 862, 863, 12, 9, 2, 2, 863, 864, 9, 12, 2, 2, 864, 914, 5, 142, 72, 10, 865, 866, 12, 8, 2, 2, 866, 867, 9, 13, 2, 2, 867, 914, 5, 142, 72, 9, 868, 869, 12, 7, 2, 2, 869, 870, 7, 78, 2, 2, 870, 914, 5, 142, 72, 8, 871, 872, 12, 6, 2, 2, 872, 873, 7, 6, 2, 2, 873, 914, 5, 142, 72, 7, 874, 875, 12, 5, 2, 2, 875, 876, 7, 79, 2, 2, 876, 877, 5, 142, 72, 2, 877, 878, 7, 72, 2, 2, 878, 879, 5, 142, 72, 6, 879, 914, 3, 2, 2, 2, 880, 881, 12, 4, 2, 2, 881, 882, 9, 14, 2, 2, 882, 914, 5, 142, 72, 5, 883, 884, 12, 29, 2, 2, 884, 914, 9, 8, 2, 2, 885, 886, 12, 27, 2, 2, 886, 887, 7, 44, 2, 2, 887, 888, 5, 142, 72, 2, 888, 889, 7, 45, 2, 2, 889, 914, 3, 2, 2, 2, 890, 891, 12, 26, 2, 2, 891, 893, 7, 44, 2, 2, 892, 894, 5, 142, 72, 2, 893, 892, 3, 2, 2, 2, 893, 894, 3, 2, 2, 2, 894, 895, 3, 2, 2, 2, 895, 897, 7, 72, 2, 2, 896, 898, 5, 142, 72, 2, 897, 896, 3, 2, 2, 2, 897, 898, 3, 2, 2, 2, 898, 899, 3, 2, 2, 2, 899, 914, 7, 45, 2, 2, 900, 901, 12, 25, 2, 2, 901, 902, 7, 47, 2, 2, 902, 914, 5, 196, 99, 2, 903, 904, 12, 24, 2, 2, 904, 905, 7, 17, 2, 2, 905, 906, 5, 148, 75, 2, 906, 907, 7, 19, 2, 2, 907, 914, 3, 2, 2, 2, 908, 909, 12, 23, 2, 2, 909, 910, 7, 25, 2, 2, 910, 911, 5, 152, 77, 2, 911, 912, 7, 26, 2, 2, 912, 914, 3, 2, 2, 2, 913, 841, 3, 2, 2, 2, 913, 844, 3, 2, 2, 2, 913, 847, 3, 2, 2, 2, 913, 850, 3, 2, 2, 2, 913, 853, 3, 2, 2, 2, 913, 856, 3, 2, 2, 2, 913, 859, 3, 2, 2, 2, 913, 862, 3, 2, 2, 2, 913, 865, 3, 2, 2, 2, 913, 868, 3, 2, 2, 2, 913, 871, 3, 2, 2, 2, 913, 874, 3, 2, 2, 2, 913, 880, 3, 2, 2, 2, 913, 883, 3, 2, 2, 2, 913, 885, 3, 2, 2, 2, 913, 890, 3, 2, 2, 2, 913, 900, 3, 2, 2, 2, 913, 903, 3, 2, 2, 2, 913, 908, 3, 2, 2, 2, 914, 917, 3, 2, 2, 2, 915, 913, 3, 2, 2, 2, 915, 916, 3, 2, 2, 2, 916, 143, 3, 2, 2, 2, 917, 915, 3, 2, 2, 2, 918, 928, 7, 104, 2, 2, 919, 928, 5, 194, 98, 2, 920, 928, 5, 198, 100, 2, 921, 928, 5, 202, 102, 2, 922, 928, 5, 196, 99, 2, 923, 928, 7, 124, 2, 2, 924, 928, 7, 119, 2, 2, 925, 928, 5, 192, 97, 2, 926, 928, 5, 78, 40, 2, 927, 918, 3, 2, 2, 2, 927, 919, 3, 2, 2, 2, 927, 920, 3, 2, 2, 2, 927, 921, 3, 2, 2, 2, 927, 922, 3, 2, 2, 2, 927, 923, 3, 2, 2, 2, 927, 924, 3, 2, 2, 2, 927, 925, 3, 2, 2, 2, 927, 926, 3, 2, 2, 2, 928, 145, 3, 2, 2, 2, 929, 934, 5, 142, 72, 2, 930, 931, 7, 18, 2, 2, 931, 933, 5, 142, 72, 2, 932, 930, 3, 2, 2, 2, 933, 936, 3, 2, 2, 2, 934, 932, 3, 2, 2, 2, 934, 935, 3, 2, 2, 2, 935, 147, 3, 2, 2, 2, 936, 934, 3, 2, 2, 2, 937, 942, 5, 150, 76, 2, 938, 939, 7, 18, 2, 2, 939, 941, 5, 150, 76, 2, 940, 938, 3, 2, 2, 2, 941, 944, 3, 2, 2, 2, 942, 940, 3, 2, 2, 2, 942, 943, 3, 2, 2, 2, 943, 946, 3, 2, 2, 2, 944, 942, 3, 2, 2, 2, 945, 947, 7, 18, 2, 2, 946, 945, 3, 2, 2, 2, 946, 947, 3, 2, 2, 2, 947, 149, 3, 2, 2, 2, 948, 949, 5, 196, 99, 2, 949, 950, 7, 72, 2, 2, 950, 951, 5, 142, 72, 2, 951, 151, 3, 2, 2, 2, 952, 954, 7, 17, 2, 2, 953, 955, 5, 148, 75, 2, 954, 953, 3, 2, 2, 2, 954, 955, 3, 2, 2, 2, 955, 956, 3, 2, 2, 2, 956, 961, 7, 19, 2, 2, 957, 959, 5, 146, 74, 2, 958, 957, 3, 2, 2, 2, 958, 959, 3, 2, 2, 2, 959, 961, 3, 2, 2, 2, 960, 952, 3, 2, 2, 2, 960, 958, 3, 2, 2, 2, 961, 153, 3, 2, 2, 2, 962, 963, 5, 142, 72, 2, 963, 964, 7, 25, 2, 2, 964, 965, 5, 152, 77, 2, 965, 966, 7, 26, 2, 2, 966, 155, 3, 2, 2, 2, 967, 971, 7, 17, 2, 2, 968, 970, 5, 158, 80, 2, 969, 968, 3, 2, 2, 2, 970, 973, 3, 2, 2, 2, 971, 969, 3, 2, 2, 2, 971, 972, 3, 2, 2, 2, 972, 974, 3, 2, 2, 2, 973, 971, 3, 2, 2, 2, 974, 975, 7, 19, 2, 2, 975, 157, 3, 2, 2, 2, 976, 994, 5, 196, 99, 2, 977, 994, 5, 156, 79, 2, 978, 994, 5, 160, 81, 2, 979, 994, 5, 166, 84, 2, 980, 994, 5, 168, 85, 2, 981, 994, 5, 174, 88, 2, 982, 994, 5, 176, 89, 2, 983, 994, 5, 178, 90, 2, 984, 994, 5, 182, 92, 2, 985, 994, 5, 186, 94, 2, 986, 994, 5, 188, 95, 2, 987, 994, 7, 111, 2, 2, 988, 994, 7, 114, 2, 2, 989, 994, 7, 115, 2, 2, 990, 994, 5, 194, 98, 2, 991, 994, 5, 202, 102, 2, 992, 994, 5, 198, 100, 2, 993, 976, 3, 2, 2, 2, 993, 977, 3, 2, 2, 2, 993, 978, 3, 2, 2, 2, 993, 979, 3, 2, 2, 2, 993, 980, 3, 2, 2, 2, 993, 981, 3, 2, 2, 2, 993, 982, 3, 2, 2, 2, 993, 983, 3, 2, 2, 2, 993, 984, 3, 2, 2, 2, 993, 985, 3, 2, 2, 2, 993, 986, 3, 2, 2, 2, 993, 987, 3, 2, 2, 2, 993, 988, 3, 2, 2, 2, 993, 989, 3, 2, 2, 2, 993, 990, 3, 2, 2, 2, 993, 991, 3, 2, 2, 2, 993, 992, 3, 2, 2, 2, 994, 159, 3, 2, 2, 2, 995, 999, 5, 164, 83, 2, 996, 999, 5, 190, 96, 2, 997, 999, 5, 162, 82, 2, 998, 995, 3, 2, 2, 2, 998, 996, 3, 2, 2, 2, 998, 997, 3, 2, 2, 2, 999, 161, 3, 2, 2, 2, 1000, 1001, 5, 196, 99, 2, 1001, 1002, 7, 47, 2, 2, 1002, 1003, 5, 196, 99, 2, 1003, 163, 3, 2, 2, 2, 1004, 1009, 7, 61, 2, 2, 1005, 1009, 7, 46, 2, 2, 1006, 1009, 7, 68, 2, 2, 1007, 1009, 5, 196, 99, 2, 1008, 1004, 3, 2, 2, 2, 1008, 1005, 3, 2, 2, 2, 1008, 1006, 3, 2, 2, 2, 1008, 1007, 3, 2, 2, 2, 1009, 1022, 3, 2, 2, 2, 1010, 1012, 7, 25, 2, 2, 1011, 1013, 5, 160, 81, 2, 1012, 1011, 3, 2, 2, 2, 1012, 1013, 3, 2, 2, 2, 1013, 1018, 3, 2, 2, 2, 1014, 1015, 7, 18, 2, 2, 1015, 1017, 5, 160, 81, 2, 1016, 1014, 3, 2, 2, 2, 1017, 1020, 3, 2, 2, 2, 1018, 1016, 3, 2, 2, 2, 1018, 1019, 3, 2, 2, 2, 1019, 1021, 3, 2, 2, 2, 1020, 1018, 3, 2, 2, 2, 1021, 1023, 7, 26, 2, 2, 1022, 1010, 3, 2, 2, 2, 1022, 1023, 3, 2, 2, 2, 1023, 165, 3, 2, 2, 2, 1024, 1025, 7, 90, 2, 2, 1025, 1028, 5, 170, 86, 2, 1026, 1027, 7, 91, 2, 2, 1027, 1029, 5, 160, 81, 2, 1028, 1026, 3, 2, 2, 2, 1028, 1029, 3, 2, 2, 2, 1029, 167, 3, 2, 2, 2, 1030, 1031, 5, 170, 86, 2, 1031, 1032, 7, 91, 2, 2, 1032, 1033, 5, 160, 81, 2, 1033, 169, 3, 2, 2, 2, 1034, 1042, 5, 196, 99, 2, 1035, 1042, 5, 162, 82, 2, 1036, 1042, 5, 172, 87, 2, 1037, 1038, 7, 25, 2, 2, 1038, 1039, 5, 172, 87, 2, 1039, 1040, 7, 26, 2, 2, 1040, 1042, 3, 2, 2, 2, 1041, 1034, 3, 2, 2, 2, 1041, 1035, 3, 2, 2, 2, 1041, 1036, 3, 2, 2, 2, 1041, 1037, 3, 2, 2, 2, 1042, 171, 3, 2, 2, 2, 1043, 1048, 5, 196, 99, 2, 1044, 1045, 7, 18, 2, 2, 1045, 1047, 5, 196, 99, 2, 1046, 1044, 3, 2, 2, 2, 1047, 1050, 3, 2, 2, 2, 1048, 1046, 3, 2, 2, 2, 1048, 1049, 3, 2, 2, 2, 1049, 173, 3, 2, 2, 2, 1050, 1048, 3, 2, 2, 2, 1051, 1052, 5, 160, 81, 2, 1052, 1053, 7, 92, 2, 2, 1053, 1054, 5, 196, 99, 2, 1054, 175, 3, 2, 2, 2, 1055, 1056, 5, 196, 99, 2, 1056, 1057, 7, 72, 2, 2, 1057, 177, 3, 2, 2, 2, 1058, 1059, 7, 93, 2, 2, 1059, 1063, 5, 160, 81, 2, 1060, 1062, 5, 180, 91, 2, 1061, 1060, 3, 2, 2, 2, 1062, 1065, 3, 2, 2, 2, 1063, 1061, 3, 2, 2, 2, 1063, 1064, 3, 2, 2, 2, 1064, 179, 3, 2, 2, 2, 1065, 1063, 3, 2, 2, 2, 1066, 1067, 7, 94, 2, 2, 1067, 1068, 5, 190, 96, 2, 1068, 1069, 5, 156, 79, 2, 1069, 1073, 3, 2, 2, 2, 1070, 1071, 7, 95, 2, 2, 1071, 1073, 5, 156, 79, 2, 1072, 1066, 3, 2, 2, 2, 1072, 1070, 3, 2, 2, 2, 1073, 181, 3, 2, 2, 2, 1074, 1075, 7, 40, 2, 2, 1075, 1076, 5, 196, 99, 2, 1076, 1078, 7, 25, 2, 2, 1077, 1079, 5, 172, 87, 2, 1078, 1077, 3, 2, 2, 2, 1078, 1079, 3, 2, 2, 2, 1079, 1080, 3, 2, 2, 2, 1080, 1082, 7, 26, 2, 2, 1081, 1083, 5, 184, 93, 2, 1082, 1081, 3, 2, 2, 2, 1082, 1083, 3, 2, 2, 2, 1083, 1084, 3, 2, 2, 2, 1084, 1085, 5, 156, 79, 2, 1085, 183, 3, 2, 2, 2, 1086, 1087, 7, 96, 2, 2, 1087, 1088, 5, 172, 87, 2, 1088, 185, 3, 2, 2, 2, 1089, 1092, 7, 29, 2, 2, 1090, 1093, 5, 156, 79, 2, 1091, 1093, 5, 160, 81, 2, 1092, 1090, 3, 2, 2, 2, 1092, 1091, 3, 2, 2, 2, 1093, 1094, 3, 2, 2, 2, 1094, 1097, 5, 160, 81, 2, 1095, 1098, 5, 156, 79, 2, 1096, 1098, 5, 160, 81, 2, 1097, 1095, 3, 2, 2, 2, 1097, 1096, 3, 2, 2, 2, 1098, 1099, 3, 2, 2, 2, 1099, 1100, 5, 156, 79, 2, 1100, 187, 3, 2, 2, 2, 1101, 1102, 7, 53, 2, 2, 1102, 1103, 5, 160, 81, 2, 1103, 1104, 5, 156, 79, 2, 1104, 189, 3, 2, 2, 2, 1105, 1111, 5, 202, 102, 2, 1106, 1111, 7, 105, 2, 2, 1107, 1111, 7, 106, 2, 2, 1108, 1111, 5, 198, 100, 2, 1109, 1111, 7, 104, 2, 2, 1110, 1105, 3, 2, 2, 2, 1110, 1106, 3, 2, 2, 2, 1110, 1107, 3, 2, 2, 2, 1110, 1108, 3, 2, 2, 2, 1110, 1109, 3, 2, 2, 2, 1111, 191, 3, 2, 2, 2, 1112, 1114, 7, 25, 2, 2, 1113, 1115, 5, 142, 72, 2, 1114, 1113, 3, 2, 2, 2, 1114, 1115, 3, 2, 2, 2, 1115, 1122, 3, 2, 2, 2, 1116, 1118, 7, 18, 2, 2, 1117, 1119, 5, 142, 72, 2, 1118, 1117, 3, 2, 2, 2, 1118, 1119, 3, 2, 2, 2, 1119, 1121, 3, 2, 2, 2, 1120, 1116, 3, 2, 2, 2, 1121, 1124, 3, 2, 2, 2, 1122, 1120, 3, 2, 2, 2, 1122, 1123, 3, 2, 2, 2, 1123, 1125, 3, 2, 2, 2, 1124, 1122, 3, 2, 2, 2, 1125, 1139, 7, 26, 2, 2, 1126, 1135, 7, 44, 2, 2, 1127, 1132, 5, 142, 72, 2, 1128, 1129, 7, 18, 2, 2, 1129, 1131, 5, 142, 72, 2, 1130, 1128, 3, 2, 2, 2, 1131, 1134, 3, 2, 2, 2, 1132, 1130, 3, 2, 2, 2, 1132, 1133, 3, 2, 2, 2, 1133, 1136, 3, 2, 2, 2, 1134, 1132, 3, 2, 2, 2, 1135, 1127, 3, 2, 2, 2, 1135, 1136, 3, 2, 2, 2, 1136, 1137, 3, 2, 2, 2, 1137, 1139, 7, 45, 2, 2, 1138, 1112, 3, 2, 2, 2, 1138, 1126, 3, 2, 2, 2, 1139, 193, 3, 2, 2, 2, 1140, 1142, 9, 15, 2, 2, 1141, 1143, 7, 107, 2, 2, 1142, 1141, 3, 2, 2, 2, 1142, 1143, 3, 2, 2, 2, 1143, 195, 3, 2, 2, 2, 1144, 1145, 9, 16, 2, 2, 1145, 197, 3, 2, 2, 2, 1146, 1148, 7, 108, 2, 2, 1147, 1146, 3, 2, 2, 2, 1148, 1149, 3, 2, 2, 2, 1149, 1147, 3, 2, 2, 2, 1149, 1150, 3, 2, 2, 2, 1150, 199, 3, 2, 2, 2, 1151, 1163, 7, 98, 2, 2, 1152, 1153, 7, 25, 2, 2, 1153, 1158, 5, 80, 41, 2, 1154, 1155, 7, 18, 2, 2, 1155, 1157, 5, 80, 41, 2, 1156, 1154, 3, 2, 2, 2, 1157, 1160, 3, 2, 2, 2, 1158, 1156, 3, 2, 2, 2, 1158, 1159, 3, 2, 2, 2, 1159, 1161, 3, 2, 2, 2, 1160, 1158, 3, 2, 2, 2, 1161, 1162, 7, 26, 2, 2, 1162, 1164, 3, 2, 2, 2, 1163, 1152, 3, 2, 2, 2, 1163, 1164, 3, 2, 2, 2, 1164, 201, 3, 2, 2, 2, 1165, 1167, 7, 131, 2, 2, 1166, 1165, 3, 2, 2, 2, 1167, 1168, 3, 2, 2, 2, 1168, 1166, 3, 2, 2, 2, 1168, 1169, 3, 2, 2, 2, 1169, 203, 3, 2, 2, 2, 132, 214, 216, 231, 235, 240, 246, 250, 253, 258, 264, 271, 275, 288, 296, 301, 311, 314, 320, 328, 331, 342, 351, 353, 359, 386, 389, 400, 405, 410, 424, 427, 434, 438, 440, 445, 450, 453, 459, 463, 467, 472, 485, 487, 494, 504, 510, 521, 524, 530, 533, 541, 544, 550, 553, 561, 564, 570, 574, 585, 590, 595, 603, 608, 614, 619, 632, 634, 639, 649, 669, 681, 686, 692, 696, 699, 711, 720, 724, 727, 734, 740, 762, 784, 788, 793, 797, 801, 806, 811, 815, 839, 893, 897, 913, 915, 927, 934, 942, 946, 954, 958, 960, 971, 993, 998, 1008, 1012, 1018, 1022, 1028, 1041, 1048, 1063, 1072, 1078, 1082, 1092, 1097, 1110, 1114, 1118, 1122, 1132, 1135, 1138, 1142, 1149, 1158, 1163, 1168] \ No newline at end of file diff --git a/solidity_parser/solidity_antlr4/Solidity.tokens b/solidity_parser/solidity_antlr4/Solidity.tokens index 58e78b7..4064f6f 100644 --- a/solidity_parser/solidity_antlr4/Solidity.tokens +++ b/solidity_parser/solidity_antlr4/Solidity.tokens @@ -94,34 +94,34 @@ T__92=93 T__93=94 T__94=95 T__95=96 -T__96=97 -Int=98 -Uint=99 -Byte=100 -Fixed=101 -Ufixed=102 -BooleanLiteral=103 -DecimalNumber=104 -HexNumber=105 -NumberUnit=106 -HexLiteralFragment=107 -ReservedKeyword=108 -AnonymousKeyword=109 -BreakKeyword=110 -ConstantKeyword=111 -ImmutableKeyword=112 -ContinueKeyword=113 -LeaveKeyword=114 -ExternalKeyword=115 -IndexedKeyword=116 -InternalKeyword=117 -PayableKeyword=118 -PrivateKeyword=119 -PublicKeyword=120 -VirtualKeyword=121 -PureKeyword=122 -TypeKeyword=123 -ViewKeyword=124 +Int=97 +Uint=98 +Byte=99 +Fixed=100 +Ufixed=101 +BooleanLiteral=102 +DecimalNumber=103 +HexNumber=104 +NumberUnit=105 +HexLiteralFragment=106 +ReservedKeyword=107 +AnonymousKeyword=108 +BreakKeyword=109 +ConstantKeyword=110 +ImmutableKeyword=111 +ContinueKeyword=112 +LeaveKeyword=113 +ExternalKeyword=114 +IndexedKeyword=115 +InternalKeyword=116 +PayableKeyword=117 +PrivateKeyword=118 +PublicKeyword=119 +VirtualKeyword=120 +PureKeyword=121 +TypeKeyword=122 +ViewKeyword=123 +GlobalKeyword=124 ConstructorKeyword=125 FallbackKeyword=126 ReceiveKeyword=127 @@ -133,17 +133,17 @@ COMMENT=132 LINE_COMMENT=133 'pragma'=1 ';'=2 -'||'=3 -'^'=4 -'~'=5 -'>='=6 -'>'=7 -'<'=8 -'<='=9 -'='=10 -'as'=11 -'import'=12 -'*'=13 +'*'=3 +'||'=4 +'^'=5 +'~'=6 +'>='=7 +'>'=8 +'<'=9 +'<='=10 +'='=11 +'as'=12 +'import'=13 'from'=14 '{'=15 ','=16 @@ -158,92 +158,92 @@ LINE_COMMENT=133 'error'=25 'using'=26 'for'=27 -'struct'=28 -'modifier'=29 -'function'=30 -'returns'=31 -'event'=32 -'enum'=33 -'['=34 -']'=35 -'address'=36 -'.'=37 -'mapping'=38 -'=>'=39 -'memory'=40 -'storage'=41 -'calldata'=42 -'if'=43 -'else'=44 -'try'=45 -'catch'=46 -'while'=47 -'unchecked'=48 -'assembly'=49 -'do'=50 -'return'=51 -'throw'=52 -'emit'=53 -'revert'=54 -'var'=55 -'bool'=56 -'string'=57 -'byte'=58 -'++'=59 -'--'=60 -'new'=61 -':'=62 -'+'=63 -'-'=64 -'after'=65 -'delete'=66 -'!'=67 -'**'=68 -'/'=69 -'%'=70 -'<<'=71 -'>>'=72 -'&'=73 -'|'=74 -'=='=75 -'!='=76 -'&&'=77 -'?'=78 -'|='=79 -'^='=80 -'&='=81 -'<<='=82 -'>>='=83 -'+='=84 -'-='=85 -'*='=86 -'/='=87 -'%='=88 -'let'=89 -':='=90 -'=:'=91 -'switch'=92 -'case'=93 -'default'=94 -'->'=95 -'callback'=96 -'override'=97 -'anonymous'=109 -'break'=110 -'constant'=111 -'immutable'=112 -'continue'=113 -'leave'=114 -'external'=115 -'indexed'=116 -'internal'=117 -'payable'=118 -'private'=119 -'public'=120 -'virtual'=121 -'pure'=122 -'type'=123 -'view'=124 +'|'=28 +'&'=29 +'+'=30 +'-'=31 +'/'=32 +'%'=33 +'=='=34 +'!='=35 +'struct'=36 +'modifier'=37 +'function'=38 +'returns'=39 +'event'=40 +'enum'=41 +'['=42 +']'=43 +'address'=44 +'.'=45 +'mapping'=46 +'=>'=47 +'memory'=48 +'storage'=49 +'calldata'=50 +'if'=51 +'else'=52 +'try'=53 +'catch'=54 +'while'=55 +'unchecked'=56 +'assembly'=57 +'do'=58 +'return'=59 +'throw'=60 +'emit'=61 +'revert'=62 +'var'=63 +'bool'=64 +'string'=65 +'byte'=66 +'++'=67 +'--'=68 +'new'=69 +':'=70 +'delete'=71 +'!'=72 +'**'=73 +'<<'=74 +'>>'=75 +'&&'=76 +'?'=77 +'|='=78 +'^='=79 +'&='=80 +'<<='=81 +'>>='=82 +'+='=83 +'-='=84 +'*='=85 +'/='=86 +'%='=87 +'let'=88 +':='=89 +'=:'=90 +'switch'=91 +'case'=92 +'default'=93 +'->'=94 +'callback'=95 +'override'=96 +'anonymous'=108 +'break'=109 +'constant'=110 +'immutable'=111 +'continue'=112 +'leave'=113 +'external'=114 +'indexed'=115 +'internal'=116 +'payable'=117 +'private'=118 +'public'=119 +'virtual'=120 +'pure'=121 +'type'=122 +'view'=123 +'global'=124 'constructor'=125 'fallback'=126 'receive'=127 diff --git a/solidity_parser/solidity_antlr4/SolidityLexer.interp b/solidity_parser/solidity_antlr4/SolidityLexer.interp index 6fb4bb7..5d6d48b 100644 --- a/solidity_parser/solidity_antlr4/SolidityLexer.interp +++ b/solidity_parser/solidity_antlr4/SolidityLexer.interp @@ -2,6 +2,7 @@ token literal names: null 'pragma' ';' +'*' '||' '^' '~' @@ -12,7 +13,6 @@ null '=' 'as' 'import' -'*' 'from' '{' ',' @@ -27,6 +27,14 @@ null 'error' 'using' 'for' +'|' +'&' +'+' +'-' +'/' +'%' +'==' +'!=' 'struct' 'modifier' 'function' @@ -62,20 +70,11 @@ null '--' 'new' ':' -'+' -'-' -'after' 'delete' '!' '**' -'/' -'%' '<<' '>>' -'&' -'|' -'==' -'!=' '&&' '?' '|=' @@ -124,6 +123,7 @@ null 'pure' 'type' 'view' +'global' 'constructor' 'fallback' 'receive' @@ -232,7 +232,6 @@ null null null null -null Int Uint Byte @@ -260,6 +259,7 @@ VirtualKeyword PureKeyword TypeKeyword ViewKeyword +GlobalKeyword ConstructorKeyword FallbackKeyword ReceiveKeyword @@ -367,7 +367,6 @@ T__92 T__93 T__94 T__95 -T__96 Int Uint Byte @@ -399,6 +398,7 @@ VirtualKeyword PureKeyword TypeKeyword ViewKeyword +GlobalKeyword ConstructorKeyword FallbackKeyword ReceiveKeyword @@ -421,4 +421,4 @@ mode names: DEFAULT_MODE atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 135, 1870, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 4, 85, 9, 85, 4, 86, 9, 86, 4, 87, 9, 87, 4, 88, 9, 88, 4, 89, 9, 89, 4, 90, 9, 90, 4, 91, 9, 91, 4, 92, 9, 92, 4, 93, 9, 93, 4, 94, 9, 94, 4, 95, 9, 95, 4, 96, 9, 96, 4, 97, 9, 97, 4, 98, 9, 98, 4, 99, 9, 99, 4, 100, 9, 100, 4, 101, 9, 101, 4, 102, 9, 102, 4, 103, 9, 103, 4, 104, 9, 104, 4, 105, 9, 105, 4, 106, 9, 106, 4, 107, 9, 107, 4, 108, 9, 108, 4, 109, 9, 109, 4, 110, 9, 110, 4, 111, 9, 111, 4, 112, 9, 112, 4, 113, 9, 113, 4, 114, 9, 114, 4, 115, 9, 115, 4, 116, 9, 116, 4, 117, 9, 117, 4, 118, 9, 118, 4, 119, 9, 119, 4, 120, 9, 120, 4, 121, 9, 121, 4, 122, 9, 122, 4, 123, 9, 123, 4, 124, 9, 124, 4, 125, 9, 125, 4, 126, 9, 126, 4, 127, 9, 127, 4, 128, 9, 128, 4, 129, 9, 129, 4, 130, 9, 130, 4, 131, 9, 131, 4, 132, 9, 132, 4, 133, 9, 133, 4, 134, 9, 134, 4, 135, 9, 135, 4, 136, 9, 136, 4, 137, 9, 137, 4, 138, 9, 138, 4, 139, 9, 139, 4, 140, 9, 140, 4, 141, 9, 141, 4, 142, 9, 142, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 44, 3, 44, 3, 44, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 64, 3, 64, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 68, 3, 68, 3, 69, 3, 69, 3, 69, 3, 70, 3, 70, 3, 71, 3, 71, 3, 72, 3, 72, 3, 72, 3, 73, 3, 73, 3, 73, 3, 74, 3, 74, 3, 75, 3, 75, 3, 76, 3, 76, 3, 76, 3, 77, 3, 77, 3, 77, 3, 78, 3, 78, 3, 78, 3, 79, 3, 79, 3, 80, 3, 80, 3, 80, 3, 81, 3, 81, 3, 81, 3, 82, 3, 82, 3, 82, 3, 83, 3, 83, 3, 83, 3, 83, 3, 84, 3, 84, 3, 84, 3, 84, 3, 85, 3, 85, 3, 85, 3, 86, 3, 86, 3, 86, 3, 87, 3, 87, 3, 87, 3, 88, 3, 88, 3, 88, 3, 89, 3, 89, 3, 89, 3, 90, 3, 90, 3, 90, 3, 90, 3, 91, 3, 91, 3, 91, 3, 92, 3, 92, 3, 92, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 96, 3, 96, 3, 96, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 5, 99, 905, 10, 99, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 5, 100, 1122, 10, 100, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 5, 101, 1344, 10, 101, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 6, 102, 1358, 10, 102, 13, 102, 14, 102, 1359, 3, 102, 3, 102, 6, 102, 1364, 10, 102, 13, 102, 14, 102, 1365, 5, 102, 1368, 10, 102, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 6, 103, 1384, 10, 103, 13, 103, 14, 103, 1385, 3, 103, 3, 103, 6, 103, 1390, 10, 103, 13, 103, 14, 103, 1391, 5, 103, 1394, 10, 103, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 5, 104, 1405, 10, 104, 3, 105, 3, 105, 5, 105, 1409, 10, 105, 3, 105, 3, 105, 5, 105, 1413, 10, 105, 3, 105, 3, 105, 5, 105, 1417, 10, 105, 3, 106, 3, 106, 5, 106, 1421, 10, 106, 3, 106, 7, 106, 1424, 10, 106, 12, 106, 14, 106, 1427, 11, 106, 3, 107, 3, 107, 3, 107, 3, 107, 3, 108, 3, 108, 5, 108, 1435, 10, 108, 3, 108, 7, 108, 1438, 10, 108, 12, 108, 14, 108, 1441, 11, 108, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 5, 109, 1499, 10, 109, 3, 110, 3, 110, 3, 110, 3, 110, 3, 110, 3, 110, 5, 110, 1507, 10, 110, 3, 110, 3, 110, 3, 110, 5, 110, 1512, 10, 110, 3, 110, 5, 110, 1515, 10, 110, 3, 111, 3, 111, 3, 111, 3, 112, 3, 112, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 5, 113, 1610, 10, 113, 3, 114, 3, 114, 3, 114, 3, 114, 3, 114, 3, 114, 3, 114, 3, 114, 3, 114, 3, 114, 3, 115, 3, 115, 3, 115, 3, 115, 3, 115, 3, 115, 3, 116, 3, 116, 3, 116, 3, 116, 3, 116, 3, 116, 3, 116, 3, 116, 3, 116, 3, 117, 3, 117, 3, 117, 3, 117, 3, 117, 3, 117, 3, 117, 3, 117, 3, 117, 3, 117, 3, 118, 3, 118, 3, 118, 3, 118, 3, 118, 3, 118, 3, 118, 3, 118, 3, 118, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 120, 3, 120, 3, 120, 3, 120, 3, 120, 3, 120, 3, 120, 3, 120, 3, 120, 3, 121, 3, 121, 3, 121, 3, 121, 3, 121, 3, 121, 3, 121, 3, 121, 3, 122, 3, 122, 3, 122, 3, 122, 3, 122, 3, 122, 3, 122, 3, 122, 3, 122, 3, 123, 3, 123, 3, 123, 3, 123, 3, 123, 3, 123, 3, 123, 3, 123, 3, 124, 3, 124, 3, 124, 3, 124, 3, 124, 3, 124, 3, 124, 3, 124, 3, 125, 3, 125, 3, 125, 3, 125, 3, 125, 3, 125, 3, 125, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 127, 3, 127, 3, 127, 3, 127, 3, 127, 3, 128, 3, 128, 3, 128, 3, 128, 3, 128, 3, 129, 3, 129, 3, 129, 3, 129, 3, 129, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 131, 3, 131, 3, 131, 3, 131, 3, 131, 3, 131, 3, 131, 3, 131, 3, 131, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 133, 3, 133, 7, 133, 1765, 10, 133, 12, 133, 14, 133, 1768, 11, 133, 3, 134, 3, 134, 3, 135, 3, 135, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 5, 136, 1781, 10, 136, 3, 136, 3, 136, 7, 136, 1785, 10, 136, 12, 136, 14, 136, 1788, 11, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 5, 136, 1798, 10, 136, 3, 136, 3, 136, 7, 136, 1802, 10, 136, 12, 136, 14, 136, 1805, 11, 136, 3, 136, 5, 136, 1808, 10, 136, 3, 137, 3, 137, 3, 137, 5, 137, 1813, 10, 137, 3, 138, 3, 138, 3, 138, 5, 138, 1818, 10, 138, 3, 139, 6, 139, 1821, 10, 139, 13, 139, 14, 139, 1822, 3, 139, 3, 139, 6, 139, 1827, 10, 139, 13, 139, 14, 139, 1828, 3, 139, 3, 139, 6, 139, 1833, 10, 139, 13, 139, 14, 139, 1834, 5, 139, 1837, 10, 139, 3, 140, 6, 140, 1840, 10, 140, 13, 140, 14, 140, 1841, 3, 140, 3, 140, 3, 141, 3, 141, 3, 141, 3, 141, 7, 141, 1850, 10, 141, 12, 141, 14, 141, 1853, 11, 141, 3, 141, 3, 141, 3, 141, 3, 141, 3, 141, 3, 142, 3, 142, 3, 142, 3, 142, 7, 142, 1864, 10, 142, 12, 142, 14, 142, 1867, 11, 142, 3, 142, 3, 142, 3, 1851, 2, 143, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 57, 113, 58, 115, 59, 117, 60, 119, 61, 121, 62, 123, 63, 125, 64, 127, 65, 129, 66, 131, 67, 133, 68, 135, 69, 137, 70, 139, 71, 141, 72, 143, 73, 145, 74, 147, 75, 149, 76, 151, 77, 153, 78, 155, 79, 157, 80, 159, 81, 161, 82, 163, 83, 165, 84, 167, 85, 169, 86, 171, 87, 173, 88, 175, 89, 177, 90, 179, 91, 181, 92, 183, 93, 185, 94, 187, 95, 189, 96, 191, 97, 193, 98, 195, 99, 197, 100, 199, 101, 201, 102, 203, 103, 205, 104, 207, 105, 209, 106, 211, 2, 213, 107, 215, 2, 217, 108, 219, 109, 221, 2, 223, 2, 225, 110, 227, 111, 229, 112, 231, 113, 233, 114, 235, 115, 237, 116, 239, 117, 241, 118, 243, 119, 245, 120, 247, 121, 249, 122, 251, 123, 253, 124, 255, 125, 257, 126, 259, 127, 261, 128, 263, 129, 265, 130, 267, 2, 269, 2, 271, 131, 273, 2, 275, 2, 277, 132, 279, 133, 281, 134, 283, 135, 3, 2, 12, 3, 2, 50, 59, 4, 2, 71, 71, 103, 103, 4, 2, 90, 90, 122, 122, 5, 2, 50, 59, 67, 72, 99, 104, 6, 2, 38, 38, 67, 92, 97, 97, 99, 124, 7, 2, 38, 38, 50, 59, 67, 92, 97, 97, 99, 124, 6, 2, 12, 12, 15, 15, 36, 36, 94, 94, 6, 2, 12, 12, 15, 15, 41, 41, 94, 94, 5, 2, 11, 12, 14, 15, 34, 34, 4, 2, 12, 12, 15, 15, 2, 2015, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 2, 143, 3, 2, 2, 2, 2, 145, 3, 2, 2, 2, 2, 147, 3, 2, 2, 2, 2, 149, 3, 2, 2, 2, 2, 151, 3, 2, 2, 2, 2, 153, 3, 2, 2, 2, 2, 155, 3, 2, 2, 2, 2, 157, 3, 2, 2, 2, 2, 159, 3, 2, 2, 2, 2, 161, 3, 2, 2, 2, 2, 163, 3, 2, 2, 2, 2, 165, 3, 2, 2, 2, 2, 167, 3, 2, 2, 2, 2, 169, 3, 2, 2, 2, 2, 171, 3, 2, 2, 2, 2, 173, 3, 2, 2, 2, 2, 175, 3, 2, 2, 2, 2, 177, 3, 2, 2, 2, 2, 179, 3, 2, 2, 2, 2, 181, 3, 2, 2, 2, 2, 183, 3, 2, 2, 2, 2, 185, 3, 2, 2, 2, 2, 187, 3, 2, 2, 2, 2, 189, 3, 2, 2, 2, 2, 191, 3, 2, 2, 2, 2, 193, 3, 2, 2, 2, 2, 195, 3, 2, 2, 2, 2, 197, 3, 2, 2, 2, 2, 199, 3, 2, 2, 2, 2, 201, 3, 2, 2, 2, 2, 203, 3, 2, 2, 2, 2, 205, 3, 2, 2, 2, 2, 207, 3, 2, 2, 2, 2, 209, 3, 2, 2, 2, 2, 213, 3, 2, 2, 2, 2, 217, 3, 2, 2, 2, 2, 219, 3, 2, 2, 2, 2, 225, 3, 2, 2, 2, 2, 227, 3, 2, 2, 2, 2, 229, 3, 2, 2, 2, 2, 231, 3, 2, 2, 2, 2, 233, 3, 2, 2, 2, 2, 235, 3, 2, 2, 2, 2, 237, 3, 2, 2, 2, 2, 239, 3, 2, 2, 2, 2, 241, 3, 2, 2, 2, 2, 243, 3, 2, 2, 2, 2, 245, 3, 2, 2, 2, 2, 247, 3, 2, 2, 2, 2, 249, 3, 2, 2, 2, 2, 251, 3, 2, 2, 2, 2, 253, 3, 2, 2, 2, 2, 255, 3, 2, 2, 2, 2, 257, 3, 2, 2, 2, 2, 259, 3, 2, 2, 2, 2, 261, 3, 2, 2, 2, 2, 263, 3, 2, 2, 2, 2, 265, 3, 2, 2, 2, 2, 271, 3, 2, 2, 2, 2, 277, 3, 2, 2, 2, 2, 279, 3, 2, 2, 2, 2, 281, 3, 2, 2, 2, 2, 283, 3, 2, 2, 2, 3, 285, 3, 2, 2, 2, 5, 292, 3, 2, 2, 2, 7, 294, 3, 2, 2, 2, 9, 297, 3, 2, 2, 2, 11, 299, 3, 2, 2, 2, 13, 301, 3, 2, 2, 2, 15, 304, 3, 2, 2, 2, 17, 306, 3, 2, 2, 2, 19, 308, 3, 2, 2, 2, 21, 311, 3, 2, 2, 2, 23, 313, 3, 2, 2, 2, 25, 316, 3, 2, 2, 2, 27, 323, 3, 2, 2, 2, 29, 325, 3, 2, 2, 2, 31, 330, 3, 2, 2, 2, 33, 332, 3, 2, 2, 2, 35, 334, 3, 2, 2, 2, 37, 336, 3, 2, 2, 2, 39, 345, 3, 2, 2, 2, 41, 354, 3, 2, 2, 2, 43, 364, 3, 2, 2, 2, 45, 372, 3, 2, 2, 2, 47, 375, 3, 2, 2, 2, 49, 377, 3, 2, 2, 2, 51, 379, 3, 2, 2, 2, 53, 385, 3, 2, 2, 2, 55, 391, 3, 2, 2, 2, 57, 395, 3, 2, 2, 2, 59, 402, 3, 2, 2, 2, 61, 411, 3, 2, 2, 2, 63, 420, 3, 2, 2, 2, 65, 428, 3, 2, 2, 2, 67, 434, 3, 2, 2, 2, 69, 439, 3, 2, 2, 2, 71, 441, 3, 2, 2, 2, 73, 443, 3, 2, 2, 2, 75, 451, 3, 2, 2, 2, 77, 453, 3, 2, 2, 2, 79, 461, 3, 2, 2, 2, 81, 464, 3, 2, 2, 2, 83, 471, 3, 2, 2, 2, 85, 479, 3, 2, 2, 2, 87, 488, 3, 2, 2, 2, 89, 491, 3, 2, 2, 2, 91, 496, 3, 2, 2, 2, 93, 500, 3, 2, 2, 2, 95, 506, 3, 2, 2, 2, 97, 512, 3, 2, 2, 2, 99, 522, 3, 2, 2, 2, 101, 531, 3, 2, 2, 2, 103, 534, 3, 2, 2, 2, 105, 541, 3, 2, 2, 2, 107, 547, 3, 2, 2, 2, 109, 552, 3, 2, 2, 2, 111, 559, 3, 2, 2, 2, 113, 563, 3, 2, 2, 2, 115, 568, 3, 2, 2, 2, 117, 575, 3, 2, 2, 2, 119, 580, 3, 2, 2, 2, 121, 583, 3, 2, 2, 2, 123, 586, 3, 2, 2, 2, 125, 590, 3, 2, 2, 2, 127, 592, 3, 2, 2, 2, 129, 594, 3, 2, 2, 2, 131, 596, 3, 2, 2, 2, 133, 602, 3, 2, 2, 2, 135, 609, 3, 2, 2, 2, 137, 611, 3, 2, 2, 2, 139, 614, 3, 2, 2, 2, 141, 616, 3, 2, 2, 2, 143, 618, 3, 2, 2, 2, 145, 621, 3, 2, 2, 2, 147, 624, 3, 2, 2, 2, 149, 626, 3, 2, 2, 2, 151, 628, 3, 2, 2, 2, 153, 631, 3, 2, 2, 2, 155, 634, 3, 2, 2, 2, 157, 637, 3, 2, 2, 2, 159, 639, 3, 2, 2, 2, 161, 642, 3, 2, 2, 2, 163, 645, 3, 2, 2, 2, 165, 648, 3, 2, 2, 2, 167, 652, 3, 2, 2, 2, 169, 656, 3, 2, 2, 2, 171, 659, 3, 2, 2, 2, 173, 662, 3, 2, 2, 2, 175, 665, 3, 2, 2, 2, 177, 668, 3, 2, 2, 2, 179, 671, 3, 2, 2, 2, 181, 675, 3, 2, 2, 2, 183, 678, 3, 2, 2, 2, 185, 681, 3, 2, 2, 2, 187, 688, 3, 2, 2, 2, 189, 693, 3, 2, 2, 2, 191, 701, 3, 2, 2, 2, 193, 704, 3, 2, 2, 2, 195, 713, 3, 2, 2, 2, 197, 904, 3, 2, 2, 2, 199, 1121, 3, 2, 2, 2, 201, 1343, 3, 2, 2, 2, 203, 1367, 3, 2, 2, 2, 205, 1393, 3, 2, 2, 2, 207, 1404, 3, 2, 2, 2, 209, 1412, 3, 2, 2, 2, 211, 1418, 3, 2, 2, 2, 213, 1428, 3, 2, 2, 2, 215, 1432, 3, 2, 2, 2, 217, 1498, 3, 2, 2, 2, 219, 1500, 3, 2, 2, 2, 221, 1516, 3, 2, 2, 2, 223, 1519, 3, 2, 2, 2, 225, 1609, 3, 2, 2, 2, 227, 1611, 3, 2, 2, 2, 229, 1621, 3, 2, 2, 2, 231, 1627, 3, 2, 2, 2, 233, 1636, 3, 2, 2, 2, 235, 1646, 3, 2, 2, 2, 237, 1655, 3, 2, 2, 2, 239, 1661, 3, 2, 2, 2, 241, 1670, 3, 2, 2, 2, 243, 1678, 3, 2, 2, 2, 245, 1687, 3, 2, 2, 2, 247, 1695, 3, 2, 2, 2, 249, 1703, 3, 2, 2, 2, 251, 1710, 3, 2, 2, 2, 253, 1718, 3, 2, 2, 2, 255, 1723, 3, 2, 2, 2, 257, 1728, 3, 2, 2, 2, 259, 1733, 3, 2, 2, 2, 261, 1745, 3, 2, 2, 2, 263, 1754, 3, 2, 2, 2, 265, 1762, 3, 2, 2, 2, 267, 1769, 3, 2, 2, 2, 269, 1771, 3, 2, 2, 2, 271, 1807, 3, 2, 2, 2, 273, 1812, 3, 2, 2, 2, 275, 1817, 3, 2, 2, 2, 277, 1820, 3, 2, 2, 2, 279, 1839, 3, 2, 2, 2, 281, 1845, 3, 2, 2, 2, 283, 1859, 3, 2, 2, 2, 285, 286, 7, 114, 2, 2, 286, 287, 7, 116, 2, 2, 287, 288, 7, 99, 2, 2, 288, 289, 7, 105, 2, 2, 289, 290, 7, 111, 2, 2, 290, 291, 7, 99, 2, 2, 291, 4, 3, 2, 2, 2, 292, 293, 7, 61, 2, 2, 293, 6, 3, 2, 2, 2, 294, 295, 7, 126, 2, 2, 295, 296, 7, 126, 2, 2, 296, 8, 3, 2, 2, 2, 297, 298, 7, 96, 2, 2, 298, 10, 3, 2, 2, 2, 299, 300, 7, 128, 2, 2, 300, 12, 3, 2, 2, 2, 301, 302, 7, 64, 2, 2, 302, 303, 7, 63, 2, 2, 303, 14, 3, 2, 2, 2, 304, 305, 7, 64, 2, 2, 305, 16, 3, 2, 2, 2, 306, 307, 7, 62, 2, 2, 307, 18, 3, 2, 2, 2, 308, 309, 7, 62, 2, 2, 309, 310, 7, 63, 2, 2, 310, 20, 3, 2, 2, 2, 311, 312, 7, 63, 2, 2, 312, 22, 3, 2, 2, 2, 313, 314, 7, 99, 2, 2, 314, 315, 7, 117, 2, 2, 315, 24, 3, 2, 2, 2, 316, 317, 7, 107, 2, 2, 317, 318, 7, 111, 2, 2, 318, 319, 7, 114, 2, 2, 319, 320, 7, 113, 2, 2, 320, 321, 7, 116, 2, 2, 321, 322, 7, 118, 2, 2, 322, 26, 3, 2, 2, 2, 323, 324, 7, 44, 2, 2, 324, 28, 3, 2, 2, 2, 325, 326, 7, 104, 2, 2, 326, 327, 7, 116, 2, 2, 327, 328, 7, 113, 2, 2, 328, 329, 7, 111, 2, 2, 329, 30, 3, 2, 2, 2, 330, 331, 7, 125, 2, 2, 331, 32, 3, 2, 2, 2, 332, 333, 7, 46, 2, 2, 333, 34, 3, 2, 2, 2, 334, 335, 7, 127, 2, 2, 335, 36, 3, 2, 2, 2, 336, 337, 7, 99, 2, 2, 337, 338, 7, 100, 2, 2, 338, 339, 7, 117, 2, 2, 339, 340, 7, 118, 2, 2, 340, 341, 7, 116, 2, 2, 341, 342, 7, 99, 2, 2, 342, 343, 7, 101, 2, 2, 343, 344, 7, 118, 2, 2, 344, 38, 3, 2, 2, 2, 345, 346, 7, 101, 2, 2, 346, 347, 7, 113, 2, 2, 347, 348, 7, 112, 2, 2, 348, 349, 7, 118, 2, 2, 349, 350, 7, 116, 2, 2, 350, 351, 7, 99, 2, 2, 351, 352, 7, 101, 2, 2, 352, 353, 7, 118, 2, 2, 353, 40, 3, 2, 2, 2, 354, 355, 7, 107, 2, 2, 355, 356, 7, 112, 2, 2, 356, 357, 7, 118, 2, 2, 357, 358, 7, 103, 2, 2, 358, 359, 7, 116, 2, 2, 359, 360, 7, 104, 2, 2, 360, 361, 7, 99, 2, 2, 361, 362, 7, 101, 2, 2, 362, 363, 7, 103, 2, 2, 363, 42, 3, 2, 2, 2, 364, 365, 7, 110, 2, 2, 365, 366, 7, 107, 2, 2, 366, 367, 7, 100, 2, 2, 367, 368, 7, 116, 2, 2, 368, 369, 7, 99, 2, 2, 369, 370, 7, 116, 2, 2, 370, 371, 7, 123, 2, 2, 371, 44, 3, 2, 2, 2, 372, 373, 7, 107, 2, 2, 373, 374, 7, 117, 2, 2, 374, 46, 3, 2, 2, 2, 375, 376, 7, 42, 2, 2, 376, 48, 3, 2, 2, 2, 377, 378, 7, 43, 2, 2, 378, 50, 3, 2, 2, 2, 379, 380, 7, 103, 2, 2, 380, 381, 7, 116, 2, 2, 381, 382, 7, 116, 2, 2, 382, 383, 7, 113, 2, 2, 383, 384, 7, 116, 2, 2, 384, 52, 3, 2, 2, 2, 385, 386, 7, 119, 2, 2, 386, 387, 7, 117, 2, 2, 387, 388, 7, 107, 2, 2, 388, 389, 7, 112, 2, 2, 389, 390, 7, 105, 2, 2, 390, 54, 3, 2, 2, 2, 391, 392, 7, 104, 2, 2, 392, 393, 7, 113, 2, 2, 393, 394, 7, 116, 2, 2, 394, 56, 3, 2, 2, 2, 395, 396, 7, 117, 2, 2, 396, 397, 7, 118, 2, 2, 397, 398, 7, 116, 2, 2, 398, 399, 7, 119, 2, 2, 399, 400, 7, 101, 2, 2, 400, 401, 7, 118, 2, 2, 401, 58, 3, 2, 2, 2, 402, 403, 7, 111, 2, 2, 403, 404, 7, 113, 2, 2, 404, 405, 7, 102, 2, 2, 405, 406, 7, 107, 2, 2, 406, 407, 7, 104, 2, 2, 407, 408, 7, 107, 2, 2, 408, 409, 7, 103, 2, 2, 409, 410, 7, 116, 2, 2, 410, 60, 3, 2, 2, 2, 411, 412, 7, 104, 2, 2, 412, 413, 7, 119, 2, 2, 413, 414, 7, 112, 2, 2, 414, 415, 7, 101, 2, 2, 415, 416, 7, 118, 2, 2, 416, 417, 7, 107, 2, 2, 417, 418, 7, 113, 2, 2, 418, 419, 7, 112, 2, 2, 419, 62, 3, 2, 2, 2, 420, 421, 7, 116, 2, 2, 421, 422, 7, 103, 2, 2, 422, 423, 7, 118, 2, 2, 423, 424, 7, 119, 2, 2, 424, 425, 7, 116, 2, 2, 425, 426, 7, 112, 2, 2, 426, 427, 7, 117, 2, 2, 427, 64, 3, 2, 2, 2, 428, 429, 7, 103, 2, 2, 429, 430, 7, 120, 2, 2, 430, 431, 7, 103, 2, 2, 431, 432, 7, 112, 2, 2, 432, 433, 7, 118, 2, 2, 433, 66, 3, 2, 2, 2, 434, 435, 7, 103, 2, 2, 435, 436, 7, 112, 2, 2, 436, 437, 7, 119, 2, 2, 437, 438, 7, 111, 2, 2, 438, 68, 3, 2, 2, 2, 439, 440, 7, 93, 2, 2, 440, 70, 3, 2, 2, 2, 441, 442, 7, 95, 2, 2, 442, 72, 3, 2, 2, 2, 443, 444, 7, 99, 2, 2, 444, 445, 7, 102, 2, 2, 445, 446, 7, 102, 2, 2, 446, 447, 7, 116, 2, 2, 447, 448, 7, 103, 2, 2, 448, 449, 7, 117, 2, 2, 449, 450, 7, 117, 2, 2, 450, 74, 3, 2, 2, 2, 451, 452, 7, 48, 2, 2, 452, 76, 3, 2, 2, 2, 453, 454, 7, 111, 2, 2, 454, 455, 7, 99, 2, 2, 455, 456, 7, 114, 2, 2, 456, 457, 7, 114, 2, 2, 457, 458, 7, 107, 2, 2, 458, 459, 7, 112, 2, 2, 459, 460, 7, 105, 2, 2, 460, 78, 3, 2, 2, 2, 461, 462, 7, 63, 2, 2, 462, 463, 7, 64, 2, 2, 463, 80, 3, 2, 2, 2, 464, 465, 7, 111, 2, 2, 465, 466, 7, 103, 2, 2, 466, 467, 7, 111, 2, 2, 467, 468, 7, 113, 2, 2, 468, 469, 7, 116, 2, 2, 469, 470, 7, 123, 2, 2, 470, 82, 3, 2, 2, 2, 471, 472, 7, 117, 2, 2, 472, 473, 7, 118, 2, 2, 473, 474, 7, 113, 2, 2, 474, 475, 7, 116, 2, 2, 475, 476, 7, 99, 2, 2, 476, 477, 7, 105, 2, 2, 477, 478, 7, 103, 2, 2, 478, 84, 3, 2, 2, 2, 479, 480, 7, 101, 2, 2, 480, 481, 7, 99, 2, 2, 481, 482, 7, 110, 2, 2, 482, 483, 7, 110, 2, 2, 483, 484, 7, 102, 2, 2, 484, 485, 7, 99, 2, 2, 485, 486, 7, 118, 2, 2, 486, 487, 7, 99, 2, 2, 487, 86, 3, 2, 2, 2, 488, 489, 7, 107, 2, 2, 489, 490, 7, 104, 2, 2, 490, 88, 3, 2, 2, 2, 491, 492, 7, 103, 2, 2, 492, 493, 7, 110, 2, 2, 493, 494, 7, 117, 2, 2, 494, 495, 7, 103, 2, 2, 495, 90, 3, 2, 2, 2, 496, 497, 7, 118, 2, 2, 497, 498, 7, 116, 2, 2, 498, 499, 7, 123, 2, 2, 499, 92, 3, 2, 2, 2, 500, 501, 7, 101, 2, 2, 501, 502, 7, 99, 2, 2, 502, 503, 7, 118, 2, 2, 503, 504, 7, 101, 2, 2, 504, 505, 7, 106, 2, 2, 505, 94, 3, 2, 2, 2, 506, 507, 7, 121, 2, 2, 507, 508, 7, 106, 2, 2, 508, 509, 7, 107, 2, 2, 509, 510, 7, 110, 2, 2, 510, 511, 7, 103, 2, 2, 511, 96, 3, 2, 2, 2, 512, 513, 7, 119, 2, 2, 513, 514, 7, 112, 2, 2, 514, 515, 7, 101, 2, 2, 515, 516, 7, 106, 2, 2, 516, 517, 7, 103, 2, 2, 517, 518, 7, 101, 2, 2, 518, 519, 7, 109, 2, 2, 519, 520, 7, 103, 2, 2, 520, 521, 7, 102, 2, 2, 521, 98, 3, 2, 2, 2, 522, 523, 7, 99, 2, 2, 523, 524, 7, 117, 2, 2, 524, 525, 7, 117, 2, 2, 525, 526, 7, 103, 2, 2, 526, 527, 7, 111, 2, 2, 527, 528, 7, 100, 2, 2, 528, 529, 7, 110, 2, 2, 529, 530, 7, 123, 2, 2, 530, 100, 3, 2, 2, 2, 531, 532, 7, 102, 2, 2, 532, 533, 7, 113, 2, 2, 533, 102, 3, 2, 2, 2, 534, 535, 7, 116, 2, 2, 535, 536, 7, 103, 2, 2, 536, 537, 7, 118, 2, 2, 537, 538, 7, 119, 2, 2, 538, 539, 7, 116, 2, 2, 539, 540, 7, 112, 2, 2, 540, 104, 3, 2, 2, 2, 541, 542, 7, 118, 2, 2, 542, 543, 7, 106, 2, 2, 543, 544, 7, 116, 2, 2, 544, 545, 7, 113, 2, 2, 545, 546, 7, 121, 2, 2, 546, 106, 3, 2, 2, 2, 547, 548, 7, 103, 2, 2, 548, 549, 7, 111, 2, 2, 549, 550, 7, 107, 2, 2, 550, 551, 7, 118, 2, 2, 551, 108, 3, 2, 2, 2, 552, 553, 7, 116, 2, 2, 553, 554, 7, 103, 2, 2, 554, 555, 7, 120, 2, 2, 555, 556, 7, 103, 2, 2, 556, 557, 7, 116, 2, 2, 557, 558, 7, 118, 2, 2, 558, 110, 3, 2, 2, 2, 559, 560, 7, 120, 2, 2, 560, 561, 7, 99, 2, 2, 561, 562, 7, 116, 2, 2, 562, 112, 3, 2, 2, 2, 563, 564, 7, 100, 2, 2, 564, 565, 7, 113, 2, 2, 565, 566, 7, 113, 2, 2, 566, 567, 7, 110, 2, 2, 567, 114, 3, 2, 2, 2, 568, 569, 7, 117, 2, 2, 569, 570, 7, 118, 2, 2, 570, 571, 7, 116, 2, 2, 571, 572, 7, 107, 2, 2, 572, 573, 7, 112, 2, 2, 573, 574, 7, 105, 2, 2, 574, 116, 3, 2, 2, 2, 575, 576, 7, 100, 2, 2, 576, 577, 7, 123, 2, 2, 577, 578, 7, 118, 2, 2, 578, 579, 7, 103, 2, 2, 579, 118, 3, 2, 2, 2, 580, 581, 7, 45, 2, 2, 581, 582, 7, 45, 2, 2, 582, 120, 3, 2, 2, 2, 583, 584, 7, 47, 2, 2, 584, 585, 7, 47, 2, 2, 585, 122, 3, 2, 2, 2, 586, 587, 7, 112, 2, 2, 587, 588, 7, 103, 2, 2, 588, 589, 7, 121, 2, 2, 589, 124, 3, 2, 2, 2, 590, 591, 7, 60, 2, 2, 591, 126, 3, 2, 2, 2, 592, 593, 7, 45, 2, 2, 593, 128, 3, 2, 2, 2, 594, 595, 7, 47, 2, 2, 595, 130, 3, 2, 2, 2, 596, 597, 7, 99, 2, 2, 597, 598, 7, 104, 2, 2, 598, 599, 7, 118, 2, 2, 599, 600, 7, 103, 2, 2, 600, 601, 7, 116, 2, 2, 601, 132, 3, 2, 2, 2, 602, 603, 7, 102, 2, 2, 603, 604, 7, 103, 2, 2, 604, 605, 7, 110, 2, 2, 605, 606, 7, 103, 2, 2, 606, 607, 7, 118, 2, 2, 607, 608, 7, 103, 2, 2, 608, 134, 3, 2, 2, 2, 609, 610, 7, 35, 2, 2, 610, 136, 3, 2, 2, 2, 611, 612, 7, 44, 2, 2, 612, 613, 7, 44, 2, 2, 613, 138, 3, 2, 2, 2, 614, 615, 7, 49, 2, 2, 615, 140, 3, 2, 2, 2, 616, 617, 7, 39, 2, 2, 617, 142, 3, 2, 2, 2, 618, 619, 7, 62, 2, 2, 619, 620, 7, 62, 2, 2, 620, 144, 3, 2, 2, 2, 621, 622, 7, 64, 2, 2, 622, 623, 7, 64, 2, 2, 623, 146, 3, 2, 2, 2, 624, 625, 7, 40, 2, 2, 625, 148, 3, 2, 2, 2, 626, 627, 7, 126, 2, 2, 627, 150, 3, 2, 2, 2, 628, 629, 7, 63, 2, 2, 629, 630, 7, 63, 2, 2, 630, 152, 3, 2, 2, 2, 631, 632, 7, 35, 2, 2, 632, 633, 7, 63, 2, 2, 633, 154, 3, 2, 2, 2, 634, 635, 7, 40, 2, 2, 635, 636, 7, 40, 2, 2, 636, 156, 3, 2, 2, 2, 637, 638, 7, 65, 2, 2, 638, 158, 3, 2, 2, 2, 639, 640, 7, 126, 2, 2, 640, 641, 7, 63, 2, 2, 641, 160, 3, 2, 2, 2, 642, 643, 7, 96, 2, 2, 643, 644, 7, 63, 2, 2, 644, 162, 3, 2, 2, 2, 645, 646, 7, 40, 2, 2, 646, 647, 7, 63, 2, 2, 647, 164, 3, 2, 2, 2, 648, 649, 7, 62, 2, 2, 649, 650, 7, 62, 2, 2, 650, 651, 7, 63, 2, 2, 651, 166, 3, 2, 2, 2, 652, 653, 7, 64, 2, 2, 653, 654, 7, 64, 2, 2, 654, 655, 7, 63, 2, 2, 655, 168, 3, 2, 2, 2, 656, 657, 7, 45, 2, 2, 657, 658, 7, 63, 2, 2, 658, 170, 3, 2, 2, 2, 659, 660, 7, 47, 2, 2, 660, 661, 7, 63, 2, 2, 661, 172, 3, 2, 2, 2, 662, 663, 7, 44, 2, 2, 663, 664, 7, 63, 2, 2, 664, 174, 3, 2, 2, 2, 665, 666, 7, 49, 2, 2, 666, 667, 7, 63, 2, 2, 667, 176, 3, 2, 2, 2, 668, 669, 7, 39, 2, 2, 669, 670, 7, 63, 2, 2, 670, 178, 3, 2, 2, 2, 671, 672, 7, 110, 2, 2, 672, 673, 7, 103, 2, 2, 673, 674, 7, 118, 2, 2, 674, 180, 3, 2, 2, 2, 675, 676, 7, 60, 2, 2, 676, 677, 7, 63, 2, 2, 677, 182, 3, 2, 2, 2, 678, 679, 7, 63, 2, 2, 679, 680, 7, 60, 2, 2, 680, 184, 3, 2, 2, 2, 681, 682, 7, 117, 2, 2, 682, 683, 7, 121, 2, 2, 683, 684, 7, 107, 2, 2, 684, 685, 7, 118, 2, 2, 685, 686, 7, 101, 2, 2, 686, 687, 7, 106, 2, 2, 687, 186, 3, 2, 2, 2, 688, 689, 7, 101, 2, 2, 689, 690, 7, 99, 2, 2, 690, 691, 7, 117, 2, 2, 691, 692, 7, 103, 2, 2, 692, 188, 3, 2, 2, 2, 693, 694, 7, 102, 2, 2, 694, 695, 7, 103, 2, 2, 695, 696, 7, 104, 2, 2, 696, 697, 7, 99, 2, 2, 697, 698, 7, 119, 2, 2, 698, 699, 7, 110, 2, 2, 699, 700, 7, 118, 2, 2, 700, 190, 3, 2, 2, 2, 701, 702, 7, 47, 2, 2, 702, 703, 7, 64, 2, 2, 703, 192, 3, 2, 2, 2, 704, 705, 7, 101, 2, 2, 705, 706, 7, 99, 2, 2, 706, 707, 7, 110, 2, 2, 707, 708, 7, 110, 2, 2, 708, 709, 7, 100, 2, 2, 709, 710, 7, 99, 2, 2, 710, 711, 7, 101, 2, 2, 711, 712, 7, 109, 2, 2, 712, 194, 3, 2, 2, 2, 713, 714, 7, 113, 2, 2, 714, 715, 7, 120, 2, 2, 715, 716, 7, 103, 2, 2, 716, 717, 7, 116, 2, 2, 717, 718, 7, 116, 2, 2, 718, 719, 7, 107, 2, 2, 719, 720, 7, 102, 2, 2, 720, 721, 7, 103, 2, 2, 721, 196, 3, 2, 2, 2, 722, 723, 7, 107, 2, 2, 723, 724, 7, 112, 2, 2, 724, 905, 7, 118, 2, 2, 725, 726, 7, 107, 2, 2, 726, 727, 7, 112, 2, 2, 727, 728, 7, 118, 2, 2, 728, 905, 7, 58, 2, 2, 729, 730, 7, 107, 2, 2, 730, 731, 7, 112, 2, 2, 731, 732, 7, 118, 2, 2, 732, 733, 7, 51, 2, 2, 733, 905, 7, 56, 2, 2, 734, 735, 7, 107, 2, 2, 735, 736, 7, 112, 2, 2, 736, 737, 7, 118, 2, 2, 737, 738, 7, 52, 2, 2, 738, 905, 7, 54, 2, 2, 739, 740, 7, 107, 2, 2, 740, 741, 7, 112, 2, 2, 741, 742, 7, 118, 2, 2, 742, 743, 7, 53, 2, 2, 743, 905, 7, 52, 2, 2, 744, 745, 7, 107, 2, 2, 745, 746, 7, 112, 2, 2, 746, 747, 7, 118, 2, 2, 747, 748, 7, 54, 2, 2, 748, 905, 7, 50, 2, 2, 749, 750, 7, 107, 2, 2, 750, 751, 7, 112, 2, 2, 751, 752, 7, 118, 2, 2, 752, 753, 7, 54, 2, 2, 753, 905, 7, 58, 2, 2, 754, 755, 7, 107, 2, 2, 755, 756, 7, 112, 2, 2, 756, 757, 7, 118, 2, 2, 757, 758, 7, 55, 2, 2, 758, 905, 7, 56, 2, 2, 759, 760, 7, 107, 2, 2, 760, 761, 7, 112, 2, 2, 761, 762, 7, 118, 2, 2, 762, 763, 7, 56, 2, 2, 763, 905, 7, 54, 2, 2, 764, 765, 7, 107, 2, 2, 765, 766, 7, 112, 2, 2, 766, 767, 7, 118, 2, 2, 767, 768, 7, 57, 2, 2, 768, 905, 7, 52, 2, 2, 769, 770, 7, 107, 2, 2, 770, 771, 7, 112, 2, 2, 771, 772, 7, 118, 2, 2, 772, 773, 7, 58, 2, 2, 773, 905, 7, 50, 2, 2, 774, 775, 7, 107, 2, 2, 775, 776, 7, 112, 2, 2, 776, 777, 7, 118, 2, 2, 777, 778, 7, 58, 2, 2, 778, 905, 7, 58, 2, 2, 779, 780, 7, 107, 2, 2, 780, 781, 7, 112, 2, 2, 781, 782, 7, 118, 2, 2, 782, 783, 7, 59, 2, 2, 783, 905, 7, 56, 2, 2, 784, 785, 7, 107, 2, 2, 785, 786, 7, 112, 2, 2, 786, 787, 7, 118, 2, 2, 787, 788, 7, 51, 2, 2, 788, 789, 7, 50, 2, 2, 789, 905, 7, 54, 2, 2, 790, 791, 7, 107, 2, 2, 791, 792, 7, 112, 2, 2, 792, 793, 7, 118, 2, 2, 793, 794, 7, 51, 2, 2, 794, 795, 7, 51, 2, 2, 795, 905, 7, 52, 2, 2, 796, 797, 7, 107, 2, 2, 797, 798, 7, 112, 2, 2, 798, 799, 7, 118, 2, 2, 799, 800, 7, 51, 2, 2, 800, 801, 7, 52, 2, 2, 801, 905, 7, 50, 2, 2, 802, 803, 7, 107, 2, 2, 803, 804, 7, 112, 2, 2, 804, 805, 7, 118, 2, 2, 805, 806, 7, 51, 2, 2, 806, 807, 7, 52, 2, 2, 807, 905, 7, 58, 2, 2, 808, 809, 7, 107, 2, 2, 809, 810, 7, 112, 2, 2, 810, 811, 7, 118, 2, 2, 811, 812, 7, 51, 2, 2, 812, 813, 7, 53, 2, 2, 813, 905, 7, 56, 2, 2, 814, 815, 7, 107, 2, 2, 815, 816, 7, 112, 2, 2, 816, 817, 7, 118, 2, 2, 817, 818, 7, 51, 2, 2, 818, 819, 7, 54, 2, 2, 819, 905, 7, 54, 2, 2, 820, 821, 7, 107, 2, 2, 821, 822, 7, 112, 2, 2, 822, 823, 7, 118, 2, 2, 823, 824, 7, 51, 2, 2, 824, 825, 7, 55, 2, 2, 825, 905, 7, 52, 2, 2, 826, 827, 7, 107, 2, 2, 827, 828, 7, 112, 2, 2, 828, 829, 7, 118, 2, 2, 829, 830, 7, 51, 2, 2, 830, 831, 7, 56, 2, 2, 831, 905, 7, 50, 2, 2, 832, 833, 7, 107, 2, 2, 833, 834, 7, 112, 2, 2, 834, 835, 7, 118, 2, 2, 835, 836, 7, 51, 2, 2, 836, 837, 7, 56, 2, 2, 837, 905, 7, 58, 2, 2, 838, 839, 7, 107, 2, 2, 839, 840, 7, 112, 2, 2, 840, 841, 7, 118, 2, 2, 841, 842, 7, 51, 2, 2, 842, 843, 7, 57, 2, 2, 843, 905, 7, 56, 2, 2, 844, 845, 7, 107, 2, 2, 845, 846, 7, 112, 2, 2, 846, 847, 7, 118, 2, 2, 847, 848, 7, 51, 2, 2, 848, 849, 7, 58, 2, 2, 849, 905, 7, 54, 2, 2, 850, 851, 7, 107, 2, 2, 851, 852, 7, 112, 2, 2, 852, 853, 7, 118, 2, 2, 853, 854, 7, 51, 2, 2, 854, 855, 7, 59, 2, 2, 855, 905, 7, 52, 2, 2, 856, 857, 7, 107, 2, 2, 857, 858, 7, 112, 2, 2, 858, 859, 7, 118, 2, 2, 859, 860, 7, 52, 2, 2, 860, 861, 7, 50, 2, 2, 861, 905, 7, 50, 2, 2, 862, 863, 7, 107, 2, 2, 863, 864, 7, 112, 2, 2, 864, 865, 7, 118, 2, 2, 865, 866, 7, 52, 2, 2, 866, 867, 7, 50, 2, 2, 867, 905, 7, 58, 2, 2, 868, 869, 7, 107, 2, 2, 869, 870, 7, 112, 2, 2, 870, 871, 7, 118, 2, 2, 871, 872, 7, 52, 2, 2, 872, 873, 7, 51, 2, 2, 873, 905, 7, 56, 2, 2, 874, 875, 7, 107, 2, 2, 875, 876, 7, 112, 2, 2, 876, 877, 7, 118, 2, 2, 877, 878, 7, 52, 2, 2, 878, 879, 7, 52, 2, 2, 879, 905, 7, 54, 2, 2, 880, 881, 7, 107, 2, 2, 881, 882, 7, 112, 2, 2, 882, 883, 7, 118, 2, 2, 883, 884, 7, 52, 2, 2, 884, 885, 7, 53, 2, 2, 885, 905, 7, 52, 2, 2, 886, 887, 7, 107, 2, 2, 887, 888, 7, 112, 2, 2, 888, 889, 7, 118, 2, 2, 889, 890, 7, 52, 2, 2, 890, 891, 7, 54, 2, 2, 891, 905, 7, 50, 2, 2, 892, 893, 7, 107, 2, 2, 893, 894, 7, 112, 2, 2, 894, 895, 7, 118, 2, 2, 895, 896, 7, 52, 2, 2, 896, 897, 7, 54, 2, 2, 897, 905, 7, 58, 2, 2, 898, 899, 7, 107, 2, 2, 899, 900, 7, 112, 2, 2, 900, 901, 7, 118, 2, 2, 901, 902, 7, 52, 2, 2, 902, 903, 7, 55, 2, 2, 903, 905, 7, 56, 2, 2, 904, 722, 3, 2, 2, 2, 904, 725, 3, 2, 2, 2, 904, 729, 3, 2, 2, 2, 904, 734, 3, 2, 2, 2, 904, 739, 3, 2, 2, 2, 904, 744, 3, 2, 2, 2, 904, 749, 3, 2, 2, 2, 904, 754, 3, 2, 2, 2, 904, 759, 3, 2, 2, 2, 904, 764, 3, 2, 2, 2, 904, 769, 3, 2, 2, 2, 904, 774, 3, 2, 2, 2, 904, 779, 3, 2, 2, 2, 904, 784, 3, 2, 2, 2, 904, 790, 3, 2, 2, 2, 904, 796, 3, 2, 2, 2, 904, 802, 3, 2, 2, 2, 904, 808, 3, 2, 2, 2, 904, 814, 3, 2, 2, 2, 904, 820, 3, 2, 2, 2, 904, 826, 3, 2, 2, 2, 904, 832, 3, 2, 2, 2, 904, 838, 3, 2, 2, 2, 904, 844, 3, 2, 2, 2, 904, 850, 3, 2, 2, 2, 904, 856, 3, 2, 2, 2, 904, 862, 3, 2, 2, 2, 904, 868, 3, 2, 2, 2, 904, 874, 3, 2, 2, 2, 904, 880, 3, 2, 2, 2, 904, 886, 3, 2, 2, 2, 904, 892, 3, 2, 2, 2, 904, 898, 3, 2, 2, 2, 905, 198, 3, 2, 2, 2, 906, 907, 7, 119, 2, 2, 907, 908, 7, 107, 2, 2, 908, 909, 7, 112, 2, 2, 909, 1122, 7, 118, 2, 2, 910, 911, 7, 119, 2, 2, 911, 912, 7, 107, 2, 2, 912, 913, 7, 112, 2, 2, 913, 914, 7, 118, 2, 2, 914, 1122, 7, 58, 2, 2, 915, 916, 7, 119, 2, 2, 916, 917, 7, 107, 2, 2, 917, 918, 7, 112, 2, 2, 918, 919, 7, 118, 2, 2, 919, 920, 7, 51, 2, 2, 920, 1122, 7, 56, 2, 2, 921, 922, 7, 119, 2, 2, 922, 923, 7, 107, 2, 2, 923, 924, 7, 112, 2, 2, 924, 925, 7, 118, 2, 2, 925, 926, 7, 52, 2, 2, 926, 1122, 7, 54, 2, 2, 927, 928, 7, 119, 2, 2, 928, 929, 7, 107, 2, 2, 929, 930, 7, 112, 2, 2, 930, 931, 7, 118, 2, 2, 931, 932, 7, 53, 2, 2, 932, 1122, 7, 52, 2, 2, 933, 934, 7, 119, 2, 2, 934, 935, 7, 107, 2, 2, 935, 936, 7, 112, 2, 2, 936, 937, 7, 118, 2, 2, 937, 938, 7, 54, 2, 2, 938, 1122, 7, 50, 2, 2, 939, 940, 7, 119, 2, 2, 940, 941, 7, 107, 2, 2, 941, 942, 7, 112, 2, 2, 942, 943, 7, 118, 2, 2, 943, 944, 7, 54, 2, 2, 944, 1122, 7, 58, 2, 2, 945, 946, 7, 119, 2, 2, 946, 947, 7, 107, 2, 2, 947, 948, 7, 112, 2, 2, 948, 949, 7, 118, 2, 2, 949, 950, 7, 55, 2, 2, 950, 1122, 7, 56, 2, 2, 951, 952, 7, 119, 2, 2, 952, 953, 7, 107, 2, 2, 953, 954, 7, 112, 2, 2, 954, 955, 7, 118, 2, 2, 955, 956, 7, 56, 2, 2, 956, 1122, 7, 54, 2, 2, 957, 958, 7, 119, 2, 2, 958, 959, 7, 107, 2, 2, 959, 960, 7, 112, 2, 2, 960, 961, 7, 118, 2, 2, 961, 962, 7, 57, 2, 2, 962, 1122, 7, 52, 2, 2, 963, 964, 7, 119, 2, 2, 964, 965, 7, 107, 2, 2, 965, 966, 7, 112, 2, 2, 966, 967, 7, 118, 2, 2, 967, 968, 7, 58, 2, 2, 968, 1122, 7, 50, 2, 2, 969, 970, 7, 119, 2, 2, 970, 971, 7, 107, 2, 2, 971, 972, 7, 112, 2, 2, 972, 973, 7, 118, 2, 2, 973, 974, 7, 58, 2, 2, 974, 1122, 7, 58, 2, 2, 975, 976, 7, 119, 2, 2, 976, 977, 7, 107, 2, 2, 977, 978, 7, 112, 2, 2, 978, 979, 7, 118, 2, 2, 979, 980, 7, 59, 2, 2, 980, 1122, 7, 56, 2, 2, 981, 982, 7, 119, 2, 2, 982, 983, 7, 107, 2, 2, 983, 984, 7, 112, 2, 2, 984, 985, 7, 118, 2, 2, 985, 986, 7, 51, 2, 2, 986, 987, 7, 50, 2, 2, 987, 1122, 7, 54, 2, 2, 988, 989, 7, 119, 2, 2, 989, 990, 7, 107, 2, 2, 990, 991, 7, 112, 2, 2, 991, 992, 7, 118, 2, 2, 992, 993, 7, 51, 2, 2, 993, 994, 7, 51, 2, 2, 994, 1122, 7, 52, 2, 2, 995, 996, 7, 119, 2, 2, 996, 997, 7, 107, 2, 2, 997, 998, 7, 112, 2, 2, 998, 999, 7, 118, 2, 2, 999, 1000, 7, 51, 2, 2, 1000, 1001, 7, 52, 2, 2, 1001, 1122, 7, 50, 2, 2, 1002, 1003, 7, 119, 2, 2, 1003, 1004, 7, 107, 2, 2, 1004, 1005, 7, 112, 2, 2, 1005, 1006, 7, 118, 2, 2, 1006, 1007, 7, 51, 2, 2, 1007, 1008, 7, 52, 2, 2, 1008, 1122, 7, 58, 2, 2, 1009, 1010, 7, 119, 2, 2, 1010, 1011, 7, 107, 2, 2, 1011, 1012, 7, 112, 2, 2, 1012, 1013, 7, 118, 2, 2, 1013, 1014, 7, 51, 2, 2, 1014, 1015, 7, 53, 2, 2, 1015, 1122, 7, 56, 2, 2, 1016, 1017, 7, 119, 2, 2, 1017, 1018, 7, 107, 2, 2, 1018, 1019, 7, 112, 2, 2, 1019, 1020, 7, 118, 2, 2, 1020, 1021, 7, 51, 2, 2, 1021, 1022, 7, 54, 2, 2, 1022, 1122, 7, 54, 2, 2, 1023, 1024, 7, 119, 2, 2, 1024, 1025, 7, 107, 2, 2, 1025, 1026, 7, 112, 2, 2, 1026, 1027, 7, 118, 2, 2, 1027, 1028, 7, 51, 2, 2, 1028, 1029, 7, 55, 2, 2, 1029, 1122, 7, 52, 2, 2, 1030, 1031, 7, 119, 2, 2, 1031, 1032, 7, 107, 2, 2, 1032, 1033, 7, 112, 2, 2, 1033, 1034, 7, 118, 2, 2, 1034, 1035, 7, 51, 2, 2, 1035, 1036, 7, 56, 2, 2, 1036, 1122, 7, 50, 2, 2, 1037, 1038, 7, 119, 2, 2, 1038, 1039, 7, 107, 2, 2, 1039, 1040, 7, 112, 2, 2, 1040, 1041, 7, 118, 2, 2, 1041, 1042, 7, 51, 2, 2, 1042, 1043, 7, 56, 2, 2, 1043, 1122, 7, 58, 2, 2, 1044, 1045, 7, 119, 2, 2, 1045, 1046, 7, 107, 2, 2, 1046, 1047, 7, 112, 2, 2, 1047, 1048, 7, 118, 2, 2, 1048, 1049, 7, 51, 2, 2, 1049, 1050, 7, 57, 2, 2, 1050, 1122, 7, 56, 2, 2, 1051, 1052, 7, 119, 2, 2, 1052, 1053, 7, 107, 2, 2, 1053, 1054, 7, 112, 2, 2, 1054, 1055, 7, 118, 2, 2, 1055, 1056, 7, 51, 2, 2, 1056, 1057, 7, 58, 2, 2, 1057, 1122, 7, 54, 2, 2, 1058, 1059, 7, 119, 2, 2, 1059, 1060, 7, 107, 2, 2, 1060, 1061, 7, 112, 2, 2, 1061, 1062, 7, 118, 2, 2, 1062, 1063, 7, 51, 2, 2, 1063, 1064, 7, 59, 2, 2, 1064, 1122, 7, 52, 2, 2, 1065, 1066, 7, 119, 2, 2, 1066, 1067, 7, 107, 2, 2, 1067, 1068, 7, 112, 2, 2, 1068, 1069, 7, 118, 2, 2, 1069, 1070, 7, 52, 2, 2, 1070, 1071, 7, 50, 2, 2, 1071, 1122, 7, 50, 2, 2, 1072, 1073, 7, 119, 2, 2, 1073, 1074, 7, 107, 2, 2, 1074, 1075, 7, 112, 2, 2, 1075, 1076, 7, 118, 2, 2, 1076, 1077, 7, 52, 2, 2, 1077, 1078, 7, 50, 2, 2, 1078, 1122, 7, 58, 2, 2, 1079, 1080, 7, 119, 2, 2, 1080, 1081, 7, 107, 2, 2, 1081, 1082, 7, 112, 2, 2, 1082, 1083, 7, 118, 2, 2, 1083, 1084, 7, 52, 2, 2, 1084, 1085, 7, 51, 2, 2, 1085, 1122, 7, 56, 2, 2, 1086, 1087, 7, 119, 2, 2, 1087, 1088, 7, 107, 2, 2, 1088, 1089, 7, 112, 2, 2, 1089, 1090, 7, 118, 2, 2, 1090, 1091, 7, 52, 2, 2, 1091, 1092, 7, 52, 2, 2, 1092, 1122, 7, 54, 2, 2, 1093, 1094, 7, 119, 2, 2, 1094, 1095, 7, 107, 2, 2, 1095, 1096, 7, 112, 2, 2, 1096, 1097, 7, 118, 2, 2, 1097, 1098, 7, 52, 2, 2, 1098, 1099, 7, 53, 2, 2, 1099, 1122, 7, 52, 2, 2, 1100, 1101, 7, 119, 2, 2, 1101, 1102, 7, 107, 2, 2, 1102, 1103, 7, 112, 2, 2, 1103, 1104, 7, 118, 2, 2, 1104, 1105, 7, 52, 2, 2, 1105, 1106, 7, 54, 2, 2, 1106, 1122, 7, 50, 2, 2, 1107, 1108, 7, 119, 2, 2, 1108, 1109, 7, 107, 2, 2, 1109, 1110, 7, 112, 2, 2, 1110, 1111, 7, 118, 2, 2, 1111, 1112, 7, 52, 2, 2, 1112, 1113, 7, 54, 2, 2, 1113, 1122, 7, 58, 2, 2, 1114, 1115, 7, 119, 2, 2, 1115, 1116, 7, 107, 2, 2, 1116, 1117, 7, 112, 2, 2, 1117, 1118, 7, 118, 2, 2, 1118, 1119, 7, 52, 2, 2, 1119, 1120, 7, 55, 2, 2, 1120, 1122, 7, 56, 2, 2, 1121, 906, 3, 2, 2, 2, 1121, 910, 3, 2, 2, 2, 1121, 915, 3, 2, 2, 2, 1121, 921, 3, 2, 2, 2, 1121, 927, 3, 2, 2, 2, 1121, 933, 3, 2, 2, 2, 1121, 939, 3, 2, 2, 2, 1121, 945, 3, 2, 2, 2, 1121, 951, 3, 2, 2, 2, 1121, 957, 3, 2, 2, 2, 1121, 963, 3, 2, 2, 2, 1121, 969, 3, 2, 2, 2, 1121, 975, 3, 2, 2, 2, 1121, 981, 3, 2, 2, 2, 1121, 988, 3, 2, 2, 2, 1121, 995, 3, 2, 2, 2, 1121, 1002, 3, 2, 2, 2, 1121, 1009, 3, 2, 2, 2, 1121, 1016, 3, 2, 2, 2, 1121, 1023, 3, 2, 2, 2, 1121, 1030, 3, 2, 2, 2, 1121, 1037, 3, 2, 2, 2, 1121, 1044, 3, 2, 2, 2, 1121, 1051, 3, 2, 2, 2, 1121, 1058, 3, 2, 2, 2, 1121, 1065, 3, 2, 2, 2, 1121, 1072, 3, 2, 2, 2, 1121, 1079, 3, 2, 2, 2, 1121, 1086, 3, 2, 2, 2, 1121, 1093, 3, 2, 2, 2, 1121, 1100, 3, 2, 2, 2, 1121, 1107, 3, 2, 2, 2, 1121, 1114, 3, 2, 2, 2, 1122, 200, 3, 2, 2, 2, 1123, 1124, 7, 100, 2, 2, 1124, 1125, 7, 123, 2, 2, 1125, 1126, 7, 118, 2, 2, 1126, 1127, 7, 103, 2, 2, 1127, 1344, 7, 117, 2, 2, 1128, 1129, 7, 100, 2, 2, 1129, 1130, 7, 123, 2, 2, 1130, 1131, 7, 118, 2, 2, 1131, 1132, 7, 103, 2, 2, 1132, 1133, 7, 117, 2, 2, 1133, 1344, 7, 51, 2, 2, 1134, 1135, 7, 100, 2, 2, 1135, 1136, 7, 123, 2, 2, 1136, 1137, 7, 118, 2, 2, 1137, 1138, 7, 103, 2, 2, 1138, 1139, 7, 117, 2, 2, 1139, 1344, 7, 52, 2, 2, 1140, 1141, 7, 100, 2, 2, 1141, 1142, 7, 123, 2, 2, 1142, 1143, 7, 118, 2, 2, 1143, 1144, 7, 103, 2, 2, 1144, 1145, 7, 117, 2, 2, 1145, 1344, 7, 53, 2, 2, 1146, 1147, 7, 100, 2, 2, 1147, 1148, 7, 123, 2, 2, 1148, 1149, 7, 118, 2, 2, 1149, 1150, 7, 103, 2, 2, 1150, 1151, 7, 117, 2, 2, 1151, 1344, 7, 54, 2, 2, 1152, 1153, 7, 100, 2, 2, 1153, 1154, 7, 123, 2, 2, 1154, 1155, 7, 118, 2, 2, 1155, 1156, 7, 103, 2, 2, 1156, 1157, 7, 117, 2, 2, 1157, 1344, 7, 55, 2, 2, 1158, 1159, 7, 100, 2, 2, 1159, 1160, 7, 123, 2, 2, 1160, 1161, 7, 118, 2, 2, 1161, 1162, 7, 103, 2, 2, 1162, 1163, 7, 117, 2, 2, 1163, 1344, 7, 56, 2, 2, 1164, 1165, 7, 100, 2, 2, 1165, 1166, 7, 123, 2, 2, 1166, 1167, 7, 118, 2, 2, 1167, 1168, 7, 103, 2, 2, 1168, 1169, 7, 117, 2, 2, 1169, 1344, 7, 57, 2, 2, 1170, 1171, 7, 100, 2, 2, 1171, 1172, 7, 123, 2, 2, 1172, 1173, 7, 118, 2, 2, 1173, 1174, 7, 103, 2, 2, 1174, 1175, 7, 117, 2, 2, 1175, 1344, 7, 58, 2, 2, 1176, 1177, 7, 100, 2, 2, 1177, 1178, 7, 123, 2, 2, 1178, 1179, 7, 118, 2, 2, 1179, 1180, 7, 103, 2, 2, 1180, 1181, 7, 117, 2, 2, 1181, 1344, 7, 59, 2, 2, 1182, 1183, 7, 100, 2, 2, 1183, 1184, 7, 123, 2, 2, 1184, 1185, 7, 118, 2, 2, 1185, 1186, 7, 103, 2, 2, 1186, 1187, 7, 117, 2, 2, 1187, 1188, 7, 51, 2, 2, 1188, 1344, 7, 50, 2, 2, 1189, 1190, 7, 100, 2, 2, 1190, 1191, 7, 123, 2, 2, 1191, 1192, 7, 118, 2, 2, 1192, 1193, 7, 103, 2, 2, 1193, 1194, 7, 117, 2, 2, 1194, 1195, 7, 51, 2, 2, 1195, 1344, 7, 51, 2, 2, 1196, 1197, 7, 100, 2, 2, 1197, 1198, 7, 123, 2, 2, 1198, 1199, 7, 118, 2, 2, 1199, 1200, 7, 103, 2, 2, 1200, 1201, 7, 117, 2, 2, 1201, 1202, 7, 51, 2, 2, 1202, 1344, 7, 52, 2, 2, 1203, 1204, 7, 100, 2, 2, 1204, 1205, 7, 123, 2, 2, 1205, 1206, 7, 118, 2, 2, 1206, 1207, 7, 103, 2, 2, 1207, 1208, 7, 117, 2, 2, 1208, 1209, 7, 51, 2, 2, 1209, 1344, 7, 53, 2, 2, 1210, 1211, 7, 100, 2, 2, 1211, 1212, 7, 123, 2, 2, 1212, 1213, 7, 118, 2, 2, 1213, 1214, 7, 103, 2, 2, 1214, 1215, 7, 117, 2, 2, 1215, 1216, 7, 51, 2, 2, 1216, 1344, 7, 54, 2, 2, 1217, 1218, 7, 100, 2, 2, 1218, 1219, 7, 123, 2, 2, 1219, 1220, 7, 118, 2, 2, 1220, 1221, 7, 103, 2, 2, 1221, 1222, 7, 117, 2, 2, 1222, 1223, 7, 51, 2, 2, 1223, 1344, 7, 55, 2, 2, 1224, 1225, 7, 100, 2, 2, 1225, 1226, 7, 123, 2, 2, 1226, 1227, 7, 118, 2, 2, 1227, 1228, 7, 103, 2, 2, 1228, 1229, 7, 117, 2, 2, 1229, 1230, 7, 51, 2, 2, 1230, 1344, 7, 56, 2, 2, 1231, 1232, 7, 100, 2, 2, 1232, 1233, 7, 123, 2, 2, 1233, 1234, 7, 118, 2, 2, 1234, 1235, 7, 103, 2, 2, 1235, 1236, 7, 117, 2, 2, 1236, 1237, 7, 51, 2, 2, 1237, 1344, 7, 57, 2, 2, 1238, 1239, 7, 100, 2, 2, 1239, 1240, 7, 123, 2, 2, 1240, 1241, 7, 118, 2, 2, 1241, 1242, 7, 103, 2, 2, 1242, 1243, 7, 117, 2, 2, 1243, 1244, 7, 51, 2, 2, 1244, 1344, 7, 58, 2, 2, 1245, 1246, 7, 100, 2, 2, 1246, 1247, 7, 123, 2, 2, 1247, 1248, 7, 118, 2, 2, 1248, 1249, 7, 103, 2, 2, 1249, 1250, 7, 117, 2, 2, 1250, 1251, 7, 51, 2, 2, 1251, 1344, 7, 59, 2, 2, 1252, 1253, 7, 100, 2, 2, 1253, 1254, 7, 123, 2, 2, 1254, 1255, 7, 118, 2, 2, 1255, 1256, 7, 103, 2, 2, 1256, 1257, 7, 117, 2, 2, 1257, 1258, 7, 52, 2, 2, 1258, 1344, 7, 50, 2, 2, 1259, 1260, 7, 100, 2, 2, 1260, 1261, 7, 123, 2, 2, 1261, 1262, 7, 118, 2, 2, 1262, 1263, 7, 103, 2, 2, 1263, 1264, 7, 117, 2, 2, 1264, 1265, 7, 52, 2, 2, 1265, 1344, 7, 51, 2, 2, 1266, 1267, 7, 100, 2, 2, 1267, 1268, 7, 123, 2, 2, 1268, 1269, 7, 118, 2, 2, 1269, 1270, 7, 103, 2, 2, 1270, 1271, 7, 117, 2, 2, 1271, 1272, 7, 52, 2, 2, 1272, 1344, 7, 52, 2, 2, 1273, 1274, 7, 100, 2, 2, 1274, 1275, 7, 123, 2, 2, 1275, 1276, 7, 118, 2, 2, 1276, 1277, 7, 103, 2, 2, 1277, 1278, 7, 117, 2, 2, 1278, 1279, 7, 52, 2, 2, 1279, 1344, 7, 53, 2, 2, 1280, 1281, 7, 100, 2, 2, 1281, 1282, 7, 123, 2, 2, 1282, 1283, 7, 118, 2, 2, 1283, 1284, 7, 103, 2, 2, 1284, 1285, 7, 117, 2, 2, 1285, 1286, 7, 52, 2, 2, 1286, 1344, 7, 54, 2, 2, 1287, 1288, 7, 100, 2, 2, 1288, 1289, 7, 123, 2, 2, 1289, 1290, 7, 118, 2, 2, 1290, 1291, 7, 103, 2, 2, 1291, 1292, 7, 117, 2, 2, 1292, 1293, 7, 52, 2, 2, 1293, 1344, 7, 55, 2, 2, 1294, 1295, 7, 100, 2, 2, 1295, 1296, 7, 123, 2, 2, 1296, 1297, 7, 118, 2, 2, 1297, 1298, 7, 103, 2, 2, 1298, 1299, 7, 117, 2, 2, 1299, 1300, 7, 52, 2, 2, 1300, 1344, 7, 56, 2, 2, 1301, 1302, 7, 100, 2, 2, 1302, 1303, 7, 123, 2, 2, 1303, 1304, 7, 118, 2, 2, 1304, 1305, 7, 103, 2, 2, 1305, 1306, 7, 117, 2, 2, 1306, 1307, 7, 52, 2, 2, 1307, 1344, 7, 57, 2, 2, 1308, 1309, 7, 100, 2, 2, 1309, 1310, 7, 123, 2, 2, 1310, 1311, 7, 118, 2, 2, 1311, 1312, 7, 103, 2, 2, 1312, 1313, 7, 117, 2, 2, 1313, 1314, 7, 52, 2, 2, 1314, 1344, 7, 58, 2, 2, 1315, 1316, 7, 100, 2, 2, 1316, 1317, 7, 123, 2, 2, 1317, 1318, 7, 118, 2, 2, 1318, 1319, 7, 103, 2, 2, 1319, 1320, 7, 117, 2, 2, 1320, 1321, 7, 52, 2, 2, 1321, 1344, 7, 59, 2, 2, 1322, 1323, 7, 100, 2, 2, 1323, 1324, 7, 123, 2, 2, 1324, 1325, 7, 118, 2, 2, 1325, 1326, 7, 103, 2, 2, 1326, 1327, 7, 117, 2, 2, 1327, 1328, 7, 53, 2, 2, 1328, 1344, 7, 50, 2, 2, 1329, 1330, 7, 100, 2, 2, 1330, 1331, 7, 123, 2, 2, 1331, 1332, 7, 118, 2, 2, 1332, 1333, 7, 103, 2, 2, 1333, 1334, 7, 117, 2, 2, 1334, 1335, 7, 53, 2, 2, 1335, 1344, 7, 51, 2, 2, 1336, 1337, 7, 100, 2, 2, 1337, 1338, 7, 123, 2, 2, 1338, 1339, 7, 118, 2, 2, 1339, 1340, 7, 103, 2, 2, 1340, 1341, 7, 117, 2, 2, 1341, 1342, 7, 53, 2, 2, 1342, 1344, 7, 52, 2, 2, 1343, 1123, 3, 2, 2, 2, 1343, 1128, 3, 2, 2, 2, 1343, 1134, 3, 2, 2, 2, 1343, 1140, 3, 2, 2, 2, 1343, 1146, 3, 2, 2, 2, 1343, 1152, 3, 2, 2, 2, 1343, 1158, 3, 2, 2, 2, 1343, 1164, 3, 2, 2, 2, 1343, 1170, 3, 2, 2, 2, 1343, 1176, 3, 2, 2, 2, 1343, 1182, 3, 2, 2, 2, 1343, 1189, 3, 2, 2, 2, 1343, 1196, 3, 2, 2, 2, 1343, 1203, 3, 2, 2, 2, 1343, 1210, 3, 2, 2, 2, 1343, 1217, 3, 2, 2, 2, 1343, 1224, 3, 2, 2, 2, 1343, 1231, 3, 2, 2, 2, 1343, 1238, 3, 2, 2, 2, 1343, 1245, 3, 2, 2, 2, 1343, 1252, 3, 2, 2, 2, 1343, 1259, 3, 2, 2, 2, 1343, 1266, 3, 2, 2, 2, 1343, 1273, 3, 2, 2, 2, 1343, 1280, 3, 2, 2, 2, 1343, 1287, 3, 2, 2, 2, 1343, 1294, 3, 2, 2, 2, 1343, 1301, 3, 2, 2, 2, 1343, 1308, 3, 2, 2, 2, 1343, 1315, 3, 2, 2, 2, 1343, 1322, 3, 2, 2, 2, 1343, 1329, 3, 2, 2, 2, 1343, 1336, 3, 2, 2, 2, 1344, 202, 3, 2, 2, 2, 1345, 1346, 7, 104, 2, 2, 1346, 1347, 7, 107, 2, 2, 1347, 1348, 7, 122, 2, 2, 1348, 1349, 7, 103, 2, 2, 1349, 1368, 7, 102, 2, 2, 1350, 1351, 7, 104, 2, 2, 1351, 1352, 7, 107, 2, 2, 1352, 1353, 7, 122, 2, 2, 1353, 1354, 7, 103, 2, 2, 1354, 1355, 7, 102, 2, 2, 1355, 1357, 3, 2, 2, 2, 1356, 1358, 9, 2, 2, 2, 1357, 1356, 3, 2, 2, 2, 1358, 1359, 3, 2, 2, 2, 1359, 1357, 3, 2, 2, 2, 1359, 1360, 3, 2, 2, 2, 1360, 1361, 3, 2, 2, 2, 1361, 1363, 7, 122, 2, 2, 1362, 1364, 9, 2, 2, 2, 1363, 1362, 3, 2, 2, 2, 1364, 1365, 3, 2, 2, 2, 1365, 1363, 3, 2, 2, 2, 1365, 1366, 3, 2, 2, 2, 1366, 1368, 3, 2, 2, 2, 1367, 1345, 3, 2, 2, 2, 1367, 1350, 3, 2, 2, 2, 1368, 204, 3, 2, 2, 2, 1369, 1370, 7, 119, 2, 2, 1370, 1371, 7, 104, 2, 2, 1371, 1372, 7, 107, 2, 2, 1372, 1373, 7, 122, 2, 2, 1373, 1374, 7, 103, 2, 2, 1374, 1394, 7, 102, 2, 2, 1375, 1376, 7, 119, 2, 2, 1376, 1377, 7, 104, 2, 2, 1377, 1378, 7, 107, 2, 2, 1378, 1379, 7, 122, 2, 2, 1379, 1380, 7, 103, 2, 2, 1380, 1381, 7, 102, 2, 2, 1381, 1383, 3, 2, 2, 2, 1382, 1384, 9, 2, 2, 2, 1383, 1382, 3, 2, 2, 2, 1384, 1385, 3, 2, 2, 2, 1385, 1383, 3, 2, 2, 2, 1385, 1386, 3, 2, 2, 2, 1386, 1387, 3, 2, 2, 2, 1387, 1389, 7, 122, 2, 2, 1388, 1390, 9, 2, 2, 2, 1389, 1388, 3, 2, 2, 2, 1390, 1391, 3, 2, 2, 2, 1391, 1389, 3, 2, 2, 2, 1391, 1392, 3, 2, 2, 2, 1392, 1394, 3, 2, 2, 2, 1393, 1369, 3, 2, 2, 2, 1393, 1375, 3, 2, 2, 2, 1394, 206, 3, 2, 2, 2, 1395, 1396, 7, 118, 2, 2, 1396, 1397, 7, 116, 2, 2, 1397, 1398, 7, 119, 2, 2, 1398, 1405, 7, 103, 2, 2, 1399, 1400, 7, 104, 2, 2, 1400, 1401, 7, 99, 2, 2, 1401, 1402, 7, 110, 2, 2, 1402, 1403, 7, 117, 2, 2, 1403, 1405, 7, 103, 2, 2, 1404, 1395, 3, 2, 2, 2, 1404, 1399, 3, 2, 2, 2, 1405, 208, 3, 2, 2, 2, 1406, 1413, 5, 211, 106, 2, 1407, 1409, 5, 211, 106, 2, 1408, 1407, 3, 2, 2, 2, 1408, 1409, 3, 2, 2, 2, 1409, 1410, 3, 2, 2, 2, 1410, 1411, 7, 48, 2, 2, 1411, 1413, 5, 211, 106, 2, 1412, 1406, 3, 2, 2, 2, 1412, 1408, 3, 2, 2, 2, 1413, 1416, 3, 2, 2, 2, 1414, 1415, 9, 3, 2, 2, 1415, 1417, 5, 211, 106, 2, 1416, 1414, 3, 2, 2, 2, 1416, 1417, 3, 2, 2, 2, 1417, 210, 3, 2, 2, 2, 1418, 1425, 9, 2, 2, 2, 1419, 1421, 7, 97, 2, 2, 1420, 1419, 3, 2, 2, 2, 1420, 1421, 3, 2, 2, 2, 1421, 1422, 3, 2, 2, 2, 1422, 1424, 9, 2, 2, 2, 1423, 1420, 3, 2, 2, 2, 1424, 1427, 3, 2, 2, 2, 1425, 1423, 3, 2, 2, 2, 1425, 1426, 3, 2, 2, 2, 1426, 212, 3, 2, 2, 2, 1427, 1425, 3, 2, 2, 2, 1428, 1429, 7, 50, 2, 2, 1429, 1430, 9, 4, 2, 2, 1430, 1431, 5, 215, 108, 2, 1431, 214, 3, 2, 2, 2, 1432, 1439, 5, 223, 112, 2, 1433, 1435, 7, 97, 2, 2, 1434, 1433, 3, 2, 2, 2, 1434, 1435, 3, 2, 2, 2, 1435, 1436, 3, 2, 2, 2, 1436, 1438, 5, 223, 112, 2, 1437, 1434, 3, 2, 2, 2, 1438, 1441, 3, 2, 2, 2, 1439, 1437, 3, 2, 2, 2, 1439, 1440, 3, 2, 2, 2, 1440, 216, 3, 2, 2, 2, 1441, 1439, 3, 2, 2, 2, 1442, 1443, 7, 121, 2, 2, 1443, 1444, 7, 103, 2, 2, 1444, 1499, 7, 107, 2, 2, 1445, 1446, 7, 105, 2, 2, 1446, 1447, 7, 121, 2, 2, 1447, 1448, 7, 103, 2, 2, 1448, 1499, 7, 107, 2, 2, 1449, 1450, 7, 117, 2, 2, 1450, 1451, 7, 124, 2, 2, 1451, 1452, 7, 99, 2, 2, 1452, 1453, 7, 100, 2, 2, 1453, 1499, 7, 113, 2, 2, 1454, 1455, 7, 104, 2, 2, 1455, 1456, 7, 107, 2, 2, 1456, 1457, 7, 112, 2, 2, 1457, 1458, 7, 112, 2, 2, 1458, 1459, 7, 103, 2, 2, 1459, 1499, 7, 123, 2, 2, 1460, 1461, 7, 103, 2, 2, 1461, 1462, 7, 118, 2, 2, 1462, 1463, 7, 106, 2, 2, 1463, 1464, 7, 103, 2, 2, 1464, 1499, 7, 116, 2, 2, 1465, 1466, 7, 117, 2, 2, 1466, 1467, 7, 103, 2, 2, 1467, 1468, 7, 101, 2, 2, 1468, 1469, 7, 113, 2, 2, 1469, 1470, 7, 112, 2, 2, 1470, 1471, 7, 102, 2, 2, 1471, 1499, 7, 117, 2, 2, 1472, 1473, 7, 111, 2, 2, 1473, 1474, 7, 107, 2, 2, 1474, 1475, 7, 112, 2, 2, 1475, 1476, 7, 119, 2, 2, 1476, 1477, 7, 118, 2, 2, 1477, 1478, 7, 103, 2, 2, 1478, 1499, 7, 117, 2, 2, 1479, 1480, 7, 106, 2, 2, 1480, 1481, 7, 113, 2, 2, 1481, 1482, 7, 119, 2, 2, 1482, 1483, 7, 116, 2, 2, 1483, 1499, 7, 117, 2, 2, 1484, 1485, 7, 102, 2, 2, 1485, 1486, 7, 99, 2, 2, 1486, 1487, 7, 123, 2, 2, 1487, 1499, 7, 117, 2, 2, 1488, 1489, 7, 121, 2, 2, 1489, 1490, 7, 103, 2, 2, 1490, 1491, 7, 103, 2, 2, 1491, 1492, 7, 109, 2, 2, 1492, 1499, 7, 117, 2, 2, 1493, 1494, 7, 123, 2, 2, 1494, 1495, 7, 103, 2, 2, 1495, 1496, 7, 99, 2, 2, 1496, 1497, 7, 116, 2, 2, 1497, 1499, 7, 117, 2, 2, 1498, 1442, 3, 2, 2, 2, 1498, 1445, 3, 2, 2, 2, 1498, 1449, 3, 2, 2, 2, 1498, 1454, 3, 2, 2, 2, 1498, 1460, 3, 2, 2, 2, 1498, 1465, 3, 2, 2, 2, 1498, 1472, 3, 2, 2, 2, 1498, 1479, 3, 2, 2, 2, 1498, 1484, 3, 2, 2, 2, 1498, 1488, 3, 2, 2, 2, 1498, 1493, 3, 2, 2, 2, 1499, 218, 3, 2, 2, 2, 1500, 1501, 7, 106, 2, 2, 1501, 1502, 7, 103, 2, 2, 1502, 1503, 7, 122, 2, 2, 1503, 1514, 3, 2, 2, 2, 1504, 1506, 7, 36, 2, 2, 1505, 1507, 5, 215, 108, 2, 1506, 1505, 3, 2, 2, 2, 1506, 1507, 3, 2, 2, 2, 1507, 1508, 3, 2, 2, 2, 1508, 1515, 7, 36, 2, 2, 1509, 1511, 7, 41, 2, 2, 1510, 1512, 5, 215, 108, 2, 1511, 1510, 3, 2, 2, 2, 1511, 1512, 3, 2, 2, 2, 1512, 1513, 3, 2, 2, 2, 1513, 1515, 7, 41, 2, 2, 1514, 1504, 3, 2, 2, 2, 1514, 1509, 3, 2, 2, 2, 1515, 220, 3, 2, 2, 2, 1516, 1517, 5, 223, 112, 2, 1517, 1518, 5, 223, 112, 2, 1518, 222, 3, 2, 2, 2, 1519, 1520, 9, 5, 2, 2, 1520, 224, 3, 2, 2, 2, 1521, 1522, 7, 99, 2, 2, 1522, 1523, 7, 100, 2, 2, 1523, 1524, 7, 117, 2, 2, 1524, 1525, 7, 118, 2, 2, 1525, 1526, 7, 116, 2, 2, 1526, 1527, 7, 99, 2, 2, 1527, 1528, 7, 101, 2, 2, 1528, 1610, 7, 118, 2, 2, 1529, 1530, 7, 99, 2, 2, 1530, 1531, 7, 104, 2, 2, 1531, 1532, 7, 118, 2, 2, 1532, 1533, 7, 103, 2, 2, 1533, 1610, 7, 116, 2, 2, 1534, 1535, 7, 101, 2, 2, 1535, 1536, 7, 99, 2, 2, 1536, 1537, 7, 117, 2, 2, 1537, 1610, 7, 103, 2, 2, 1538, 1539, 7, 101, 2, 2, 1539, 1540, 7, 99, 2, 2, 1540, 1541, 7, 118, 2, 2, 1541, 1542, 7, 101, 2, 2, 1542, 1610, 7, 106, 2, 2, 1543, 1544, 7, 102, 2, 2, 1544, 1545, 7, 103, 2, 2, 1545, 1546, 7, 104, 2, 2, 1546, 1547, 7, 99, 2, 2, 1547, 1548, 7, 119, 2, 2, 1548, 1549, 7, 110, 2, 2, 1549, 1610, 7, 118, 2, 2, 1550, 1551, 7, 104, 2, 2, 1551, 1552, 7, 107, 2, 2, 1552, 1553, 7, 112, 2, 2, 1553, 1554, 7, 99, 2, 2, 1554, 1610, 7, 110, 2, 2, 1555, 1556, 7, 107, 2, 2, 1556, 1610, 7, 112, 2, 2, 1557, 1558, 7, 107, 2, 2, 1558, 1559, 7, 112, 2, 2, 1559, 1560, 7, 110, 2, 2, 1560, 1561, 7, 107, 2, 2, 1561, 1562, 7, 112, 2, 2, 1562, 1610, 7, 103, 2, 2, 1563, 1564, 7, 110, 2, 2, 1564, 1565, 7, 103, 2, 2, 1565, 1610, 7, 118, 2, 2, 1566, 1567, 7, 111, 2, 2, 1567, 1568, 7, 99, 2, 2, 1568, 1569, 7, 118, 2, 2, 1569, 1570, 7, 101, 2, 2, 1570, 1610, 7, 106, 2, 2, 1571, 1572, 7, 112, 2, 2, 1572, 1573, 7, 119, 2, 2, 1573, 1574, 7, 110, 2, 2, 1574, 1610, 7, 110, 2, 2, 1575, 1576, 7, 113, 2, 2, 1576, 1610, 7, 104, 2, 2, 1577, 1578, 7, 116, 2, 2, 1578, 1579, 7, 103, 2, 2, 1579, 1580, 7, 110, 2, 2, 1580, 1581, 7, 113, 2, 2, 1581, 1582, 7, 101, 2, 2, 1582, 1583, 7, 99, 2, 2, 1583, 1584, 7, 118, 2, 2, 1584, 1585, 7, 99, 2, 2, 1585, 1586, 7, 100, 2, 2, 1586, 1587, 7, 110, 2, 2, 1587, 1610, 7, 103, 2, 2, 1588, 1589, 7, 117, 2, 2, 1589, 1590, 7, 118, 2, 2, 1590, 1591, 7, 99, 2, 2, 1591, 1592, 7, 118, 2, 2, 1592, 1593, 7, 107, 2, 2, 1593, 1610, 7, 101, 2, 2, 1594, 1595, 7, 117, 2, 2, 1595, 1596, 7, 121, 2, 2, 1596, 1597, 7, 107, 2, 2, 1597, 1598, 7, 118, 2, 2, 1598, 1599, 7, 101, 2, 2, 1599, 1610, 7, 106, 2, 2, 1600, 1601, 7, 118, 2, 2, 1601, 1602, 7, 116, 2, 2, 1602, 1610, 7, 123, 2, 2, 1603, 1604, 7, 118, 2, 2, 1604, 1605, 7, 123, 2, 2, 1605, 1606, 7, 114, 2, 2, 1606, 1607, 7, 103, 2, 2, 1607, 1608, 7, 113, 2, 2, 1608, 1610, 7, 104, 2, 2, 1609, 1521, 3, 2, 2, 2, 1609, 1529, 3, 2, 2, 2, 1609, 1534, 3, 2, 2, 2, 1609, 1538, 3, 2, 2, 2, 1609, 1543, 3, 2, 2, 2, 1609, 1550, 3, 2, 2, 2, 1609, 1555, 3, 2, 2, 2, 1609, 1557, 3, 2, 2, 2, 1609, 1563, 3, 2, 2, 2, 1609, 1566, 3, 2, 2, 2, 1609, 1571, 3, 2, 2, 2, 1609, 1575, 3, 2, 2, 2, 1609, 1577, 3, 2, 2, 2, 1609, 1588, 3, 2, 2, 2, 1609, 1594, 3, 2, 2, 2, 1609, 1600, 3, 2, 2, 2, 1609, 1603, 3, 2, 2, 2, 1610, 226, 3, 2, 2, 2, 1611, 1612, 7, 99, 2, 2, 1612, 1613, 7, 112, 2, 2, 1613, 1614, 7, 113, 2, 2, 1614, 1615, 7, 112, 2, 2, 1615, 1616, 7, 123, 2, 2, 1616, 1617, 7, 111, 2, 2, 1617, 1618, 7, 113, 2, 2, 1618, 1619, 7, 119, 2, 2, 1619, 1620, 7, 117, 2, 2, 1620, 228, 3, 2, 2, 2, 1621, 1622, 7, 100, 2, 2, 1622, 1623, 7, 116, 2, 2, 1623, 1624, 7, 103, 2, 2, 1624, 1625, 7, 99, 2, 2, 1625, 1626, 7, 109, 2, 2, 1626, 230, 3, 2, 2, 2, 1627, 1628, 7, 101, 2, 2, 1628, 1629, 7, 113, 2, 2, 1629, 1630, 7, 112, 2, 2, 1630, 1631, 7, 117, 2, 2, 1631, 1632, 7, 118, 2, 2, 1632, 1633, 7, 99, 2, 2, 1633, 1634, 7, 112, 2, 2, 1634, 1635, 7, 118, 2, 2, 1635, 232, 3, 2, 2, 2, 1636, 1637, 7, 107, 2, 2, 1637, 1638, 7, 111, 2, 2, 1638, 1639, 7, 111, 2, 2, 1639, 1640, 7, 119, 2, 2, 1640, 1641, 7, 118, 2, 2, 1641, 1642, 7, 99, 2, 2, 1642, 1643, 7, 100, 2, 2, 1643, 1644, 7, 110, 2, 2, 1644, 1645, 7, 103, 2, 2, 1645, 234, 3, 2, 2, 2, 1646, 1647, 7, 101, 2, 2, 1647, 1648, 7, 113, 2, 2, 1648, 1649, 7, 112, 2, 2, 1649, 1650, 7, 118, 2, 2, 1650, 1651, 7, 107, 2, 2, 1651, 1652, 7, 112, 2, 2, 1652, 1653, 7, 119, 2, 2, 1653, 1654, 7, 103, 2, 2, 1654, 236, 3, 2, 2, 2, 1655, 1656, 7, 110, 2, 2, 1656, 1657, 7, 103, 2, 2, 1657, 1658, 7, 99, 2, 2, 1658, 1659, 7, 120, 2, 2, 1659, 1660, 7, 103, 2, 2, 1660, 238, 3, 2, 2, 2, 1661, 1662, 7, 103, 2, 2, 1662, 1663, 7, 122, 2, 2, 1663, 1664, 7, 118, 2, 2, 1664, 1665, 7, 103, 2, 2, 1665, 1666, 7, 116, 2, 2, 1666, 1667, 7, 112, 2, 2, 1667, 1668, 7, 99, 2, 2, 1668, 1669, 7, 110, 2, 2, 1669, 240, 3, 2, 2, 2, 1670, 1671, 7, 107, 2, 2, 1671, 1672, 7, 112, 2, 2, 1672, 1673, 7, 102, 2, 2, 1673, 1674, 7, 103, 2, 2, 1674, 1675, 7, 122, 2, 2, 1675, 1676, 7, 103, 2, 2, 1676, 1677, 7, 102, 2, 2, 1677, 242, 3, 2, 2, 2, 1678, 1679, 7, 107, 2, 2, 1679, 1680, 7, 112, 2, 2, 1680, 1681, 7, 118, 2, 2, 1681, 1682, 7, 103, 2, 2, 1682, 1683, 7, 116, 2, 2, 1683, 1684, 7, 112, 2, 2, 1684, 1685, 7, 99, 2, 2, 1685, 1686, 7, 110, 2, 2, 1686, 244, 3, 2, 2, 2, 1687, 1688, 7, 114, 2, 2, 1688, 1689, 7, 99, 2, 2, 1689, 1690, 7, 123, 2, 2, 1690, 1691, 7, 99, 2, 2, 1691, 1692, 7, 100, 2, 2, 1692, 1693, 7, 110, 2, 2, 1693, 1694, 7, 103, 2, 2, 1694, 246, 3, 2, 2, 2, 1695, 1696, 7, 114, 2, 2, 1696, 1697, 7, 116, 2, 2, 1697, 1698, 7, 107, 2, 2, 1698, 1699, 7, 120, 2, 2, 1699, 1700, 7, 99, 2, 2, 1700, 1701, 7, 118, 2, 2, 1701, 1702, 7, 103, 2, 2, 1702, 248, 3, 2, 2, 2, 1703, 1704, 7, 114, 2, 2, 1704, 1705, 7, 119, 2, 2, 1705, 1706, 7, 100, 2, 2, 1706, 1707, 7, 110, 2, 2, 1707, 1708, 7, 107, 2, 2, 1708, 1709, 7, 101, 2, 2, 1709, 250, 3, 2, 2, 2, 1710, 1711, 7, 120, 2, 2, 1711, 1712, 7, 107, 2, 2, 1712, 1713, 7, 116, 2, 2, 1713, 1714, 7, 118, 2, 2, 1714, 1715, 7, 119, 2, 2, 1715, 1716, 7, 99, 2, 2, 1716, 1717, 7, 110, 2, 2, 1717, 252, 3, 2, 2, 2, 1718, 1719, 7, 114, 2, 2, 1719, 1720, 7, 119, 2, 2, 1720, 1721, 7, 116, 2, 2, 1721, 1722, 7, 103, 2, 2, 1722, 254, 3, 2, 2, 2, 1723, 1724, 7, 118, 2, 2, 1724, 1725, 7, 123, 2, 2, 1725, 1726, 7, 114, 2, 2, 1726, 1727, 7, 103, 2, 2, 1727, 256, 3, 2, 2, 2, 1728, 1729, 7, 120, 2, 2, 1729, 1730, 7, 107, 2, 2, 1730, 1731, 7, 103, 2, 2, 1731, 1732, 7, 121, 2, 2, 1732, 258, 3, 2, 2, 2, 1733, 1734, 7, 101, 2, 2, 1734, 1735, 7, 113, 2, 2, 1735, 1736, 7, 112, 2, 2, 1736, 1737, 7, 117, 2, 2, 1737, 1738, 7, 118, 2, 2, 1738, 1739, 7, 116, 2, 2, 1739, 1740, 7, 119, 2, 2, 1740, 1741, 7, 101, 2, 2, 1741, 1742, 7, 118, 2, 2, 1742, 1743, 7, 113, 2, 2, 1743, 1744, 7, 116, 2, 2, 1744, 260, 3, 2, 2, 2, 1745, 1746, 7, 104, 2, 2, 1746, 1747, 7, 99, 2, 2, 1747, 1748, 7, 110, 2, 2, 1748, 1749, 7, 110, 2, 2, 1749, 1750, 7, 100, 2, 2, 1750, 1751, 7, 99, 2, 2, 1751, 1752, 7, 101, 2, 2, 1752, 1753, 7, 109, 2, 2, 1753, 262, 3, 2, 2, 2, 1754, 1755, 7, 116, 2, 2, 1755, 1756, 7, 103, 2, 2, 1756, 1757, 7, 101, 2, 2, 1757, 1758, 7, 103, 2, 2, 1758, 1759, 7, 107, 2, 2, 1759, 1760, 7, 120, 2, 2, 1760, 1761, 7, 103, 2, 2, 1761, 264, 3, 2, 2, 2, 1762, 1766, 5, 267, 134, 2, 1763, 1765, 5, 269, 135, 2, 1764, 1763, 3, 2, 2, 2, 1765, 1768, 3, 2, 2, 2, 1766, 1764, 3, 2, 2, 2, 1766, 1767, 3, 2, 2, 2, 1767, 266, 3, 2, 2, 2, 1768, 1766, 3, 2, 2, 2, 1769, 1770, 9, 6, 2, 2, 1770, 268, 3, 2, 2, 2, 1771, 1772, 9, 7, 2, 2, 1772, 270, 3, 2, 2, 2, 1773, 1774, 7, 119, 2, 2, 1774, 1775, 7, 112, 2, 2, 1775, 1776, 7, 107, 2, 2, 1776, 1777, 7, 101, 2, 2, 1777, 1778, 7, 113, 2, 2, 1778, 1779, 7, 102, 2, 2, 1779, 1781, 7, 103, 2, 2, 1780, 1773, 3, 2, 2, 2, 1780, 1781, 3, 2, 2, 2, 1781, 1782, 3, 2, 2, 2, 1782, 1786, 7, 36, 2, 2, 1783, 1785, 5, 273, 137, 2, 1784, 1783, 3, 2, 2, 2, 1785, 1788, 3, 2, 2, 2, 1786, 1784, 3, 2, 2, 2, 1786, 1787, 3, 2, 2, 2, 1787, 1789, 3, 2, 2, 2, 1788, 1786, 3, 2, 2, 2, 1789, 1808, 7, 36, 2, 2, 1790, 1791, 7, 119, 2, 2, 1791, 1792, 7, 112, 2, 2, 1792, 1793, 7, 107, 2, 2, 1793, 1794, 7, 101, 2, 2, 1794, 1795, 7, 113, 2, 2, 1795, 1796, 7, 102, 2, 2, 1796, 1798, 7, 103, 2, 2, 1797, 1790, 3, 2, 2, 2, 1797, 1798, 3, 2, 2, 2, 1798, 1799, 3, 2, 2, 2, 1799, 1803, 7, 41, 2, 2, 1800, 1802, 5, 275, 138, 2, 1801, 1800, 3, 2, 2, 2, 1802, 1805, 3, 2, 2, 2, 1803, 1801, 3, 2, 2, 2, 1803, 1804, 3, 2, 2, 2, 1804, 1806, 3, 2, 2, 2, 1805, 1803, 3, 2, 2, 2, 1806, 1808, 7, 41, 2, 2, 1807, 1780, 3, 2, 2, 2, 1807, 1797, 3, 2, 2, 2, 1808, 272, 3, 2, 2, 2, 1809, 1813, 10, 8, 2, 2, 1810, 1811, 7, 94, 2, 2, 1811, 1813, 11, 2, 2, 2, 1812, 1809, 3, 2, 2, 2, 1812, 1810, 3, 2, 2, 2, 1813, 274, 3, 2, 2, 2, 1814, 1818, 10, 9, 2, 2, 1815, 1816, 7, 94, 2, 2, 1816, 1818, 11, 2, 2, 2, 1817, 1814, 3, 2, 2, 2, 1817, 1815, 3, 2, 2, 2, 1818, 276, 3, 2, 2, 2, 1819, 1821, 9, 2, 2, 2, 1820, 1819, 3, 2, 2, 2, 1821, 1822, 3, 2, 2, 2, 1822, 1820, 3, 2, 2, 2, 1822, 1823, 3, 2, 2, 2, 1823, 1824, 3, 2, 2, 2, 1824, 1826, 7, 48, 2, 2, 1825, 1827, 9, 2, 2, 2, 1826, 1825, 3, 2, 2, 2, 1827, 1828, 3, 2, 2, 2, 1828, 1826, 3, 2, 2, 2, 1828, 1829, 3, 2, 2, 2, 1829, 1836, 3, 2, 2, 2, 1830, 1832, 7, 48, 2, 2, 1831, 1833, 9, 2, 2, 2, 1832, 1831, 3, 2, 2, 2, 1833, 1834, 3, 2, 2, 2, 1834, 1832, 3, 2, 2, 2, 1834, 1835, 3, 2, 2, 2, 1835, 1837, 3, 2, 2, 2, 1836, 1830, 3, 2, 2, 2, 1836, 1837, 3, 2, 2, 2, 1837, 278, 3, 2, 2, 2, 1838, 1840, 9, 10, 2, 2, 1839, 1838, 3, 2, 2, 2, 1840, 1841, 3, 2, 2, 2, 1841, 1839, 3, 2, 2, 2, 1841, 1842, 3, 2, 2, 2, 1842, 1843, 3, 2, 2, 2, 1843, 1844, 8, 140, 2, 2, 1844, 280, 3, 2, 2, 2, 1845, 1846, 7, 49, 2, 2, 1846, 1847, 7, 44, 2, 2, 1847, 1851, 3, 2, 2, 2, 1848, 1850, 11, 2, 2, 2, 1849, 1848, 3, 2, 2, 2, 1850, 1853, 3, 2, 2, 2, 1851, 1852, 3, 2, 2, 2, 1851, 1849, 3, 2, 2, 2, 1852, 1854, 3, 2, 2, 2, 1853, 1851, 3, 2, 2, 2, 1854, 1855, 7, 44, 2, 2, 1855, 1856, 7, 49, 2, 2, 1856, 1857, 3, 2, 2, 2, 1857, 1858, 8, 141, 3, 2, 1858, 282, 3, 2, 2, 2, 1859, 1860, 7, 49, 2, 2, 1860, 1861, 7, 49, 2, 2, 1861, 1865, 3, 2, 2, 2, 1862, 1864, 10, 11, 2, 2, 1863, 1862, 3, 2, 2, 2, 1864, 1867, 3, 2, 2, 2, 1865, 1863, 3, 2, 2, 2, 1865, 1866, 3, 2, 2, 2, 1866, 1868, 3, 2, 2, 2, 1867, 1865, 3, 2, 2, 2, 1868, 1869, 8, 142, 3, 2, 1869, 284, 3, 2, 2, 2, 40, 2, 904, 1121, 1343, 1359, 1365, 1367, 1385, 1391, 1393, 1404, 1408, 1412, 1416, 1420, 1425, 1434, 1439, 1498, 1506, 1511, 1514, 1609, 1766, 1780, 1786, 1797, 1803, 1807, 1812, 1817, 1822, 1828, 1834, 1836, 1841, 1851, 1865, 4, 8, 2, 2, 2, 3, 2] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 135, 1871, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 4, 85, 9, 85, 4, 86, 9, 86, 4, 87, 9, 87, 4, 88, 9, 88, 4, 89, 9, 89, 4, 90, 9, 90, 4, 91, 9, 91, 4, 92, 9, 92, 4, 93, 9, 93, 4, 94, 9, 94, 4, 95, 9, 95, 4, 96, 9, 96, 4, 97, 9, 97, 4, 98, 9, 98, 4, 99, 9, 99, 4, 100, 9, 100, 4, 101, 9, 101, 4, 102, 9, 102, 4, 103, 9, 103, 4, 104, 9, 104, 4, 105, 9, 105, 4, 106, 9, 106, 4, 107, 9, 107, 4, 108, 9, 108, 4, 109, 9, 109, 4, 110, 9, 110, 4, 111, 9, 111, 4, 112, 9, 112, 4, 113, 9, 113, 4, 114, 9, 114, 4, 115, 9, 115, 4, 116, 9, 116, 4, 117, 9, 117, 4, 118, 9, 118, 4, 119, 9, 119, 4, 120, 9, 120, 4, 121, 9, 121, 4, 122, 9, 122, 4, 123, 9, 123, 4, 124, 9, 124, 4, 125, 9, 125, 4, 126, 9, 126, 4, 127, 9, 127, 4, 128, 9, 128, 4, 129, 9, 129, 4, 130, 9, 130, 4, 131, 9, 131, 4, 132, 9, 132, 4, 133, 9, 133, 4, 134, 9, 134, 4, 135, 9, 135, 4, 136, 9, 136, 4, 137, 9, 137, 4, 138, 9, 138, 4, 139, 9, 139, 4, 140, 9, 140, 4, 141, 9, 141, 4, 142, 9, 142, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 30, 3, 30, 3, 31, 3, 31, 3, 32, 3, 32, 3, 33, 3, 33, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 68, 3, 68, 3, 68, 3, 69, 3, 69, 3, 69, 3, 70, 3, 70, 3, 70, 3, 70, 3, 71, 3, 71, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 73, 3, 73, 3, 74, 3, 74, 3, 74, 3, 75, 3, 75, 3, 75, 3, 76, 3, 76, 3, 76, 3, 77, 3, 77, 3, 77, 3, 78, 3, 78, 3, 79, 3, 79, 3, 79, 3, 80, 3, 80, 3, 80, 3, 81, 3, 81, 3, 81, 3, 82, 3, 82, 3, 82, 3, 82, 3, 83, 3, 83, 3, 83, 3, 83, 3, 84, 3, 84, 3, 84, 3, 85, 3, 85, 3, 85, 3, 86, 3, 86, 3, 86, 3, 87, 3, 87, 3, 87, 3, 88, 3, 88, 3, 88, 3, 89, 3, 89, 3, 89, 3, 89, 3, 90, 3, 90, 3, 90, 3, 91, 3, 91, 3, 91, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 95, 3, 95, 3, 95, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 5, 98, 899, 10, 98, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 5, 99, 1116, 10, 99, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 5, 100, 1338, 10, 100, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 6, 101, 1352, 10, 101, 13, 101, 14, 101, 1353, 3, 101, 3, 101, 6, 101, 1358, 10, 101, 13, 101, 14, 101, 1359, 5, 101, 1362, 10, 101, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 6, 102, 1378, 10, 102, 13, 102, 14, 102, 1379, 3, 102, 3, 102, 6, 102, 1384, 10, 102, 13, 102, 14, 102, 1385, 5, 102, 1388, 10, 102, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 5, 103, 1399, 10, 103, 3, 104, 3, 104, 5, 104, 1403, 10, 104, 3, 104, 3, 104, 5, 104, 1407, 10, 104, 3, 104, 3, 104, 5, 104, 1411, 10, 104, 3, 105, 3, 105, 5, 105, 1415, 10, 105, 3, 105, 7, 105, 1418, 10, 105, 12, 105, 14, 105, 1421, 11, 105, 3, 106, 3, 106, 3, 106, 3, 106, 3, 107, 3, 107, 5, 107, 1429, 10, 107, 3, 107, 7, 107, 1432, 10, 107, 12, 107, 14, 107, 1435, 11, 107, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 5, 108, 1493, 10, 108, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 5, 109, 1501, 10, 109, 3, 109, 3, 109, 3, 109, 5, 109, 1506, 10, 109, 3, 109, 5, 109, 1509, 10, 109, 3, 110, 3, 110, 3, 110, 3, 111, 3, 111, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 5, 112, 1604, 10, 112, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 114, 3, 114, 3, 114, 3, 114, 3, 114, 3, 114, 3, 115, 3, 115, 3, 115, 3, 115, 3, 115, 3, 115, 3, 115, 3, 115, 3, 115, 3, 116, 3, 116, 3, 116, 3, 116, 3, 116, 3, 116, 3, 116, 3, 116, 3, 116, 3, 116, 3, 117, 3, 117, 3, 117, 3, 117, 3, 117, 3, 117, 3, 117, 3, 117, 3, 117, 3, 118, 3, 118, 3, 118, 3, 118, 3, 118, 3, 118, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 120, 3, 120, 3, 120, 3, 120, 3, 120, 3, 120, 3, 120, 3, 120, 3, 121, 3, 121, 3, 121, 3, 121, 3, 121, 3, 121, 3, 121, 3, 121, 3, 121, 3, 122, 3, 122, 3, 122, 3, 122, 3, 122, 3, 122, 3, 122, 3, 122, 3, 123, 3, 123, 3, 123, 3, 123, 3, 123, 3, 123, 3, 123, 3, 123, 3, 124, 3, 124, 3, 124, 3, 124, 3, 124, 3, 124, 3, 124, 3, 125, 3, 125, 3, 125, 3, 125, 3, 125, 3, 125, 3, 125, 3, 125, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 127, 3, 127, 3, 127, 3, 127, 3, 127, 3, 128, 3, 128, 3, 128, 3, 128, 3, 128, 3, 129, 3, 129, 3, 129, 3, 129, 3, 129, 3, 129, 3, 129, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 131, 3, 131, 3, 131, 3, 131, 3, 131, 3, 131, 3, 131, 3, 131, 3, 131, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 133, 3, 133, 7, 133, 1766, 10, 133, 12, 133, 14, 133, 1769, 11, 133, 3, 134, 3, 134, 3, 135, 3, 135, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 5, 136, 1782, 10, 136, 3, 136, 3, 136, 7, 136, 1786, 10, 136, 12, 136, 14, 136, 1789, 11, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 5, 136, 1799, 10, 136, 3, 136, 3, 136, 7, 136, 1803, 10, 136, 12, 136, 14, 136, 1806, 11, 136, 3, 136, 5, 136, 1809, 10, 136, 3, 137, 3, 137, 3, 137, 5, 137, 1814, 10, 137, 3, 138, 3, 138, 3, 138, 5, 138, 1819, 10, 138, 3, 139, 6, 139, 1822, 10, 139, 13, 139, 14, 139, 1823, 3, 139, 3, 139, 6, 139, 1828, 10, 139, 13, 139, 14, 139, 1829, 3, 139, 3, 139, 6, 139, 1834, 10, 139, 13, 139, 14, 139, 1835, 5, 139, 1838, 10, 139, 3, 140, 6, 140, 1841, 10, 140, 13, 140, 14, 140, 1842, 3, 140, 3, 140, 3, 141, 3, 141, 3, 141, 3, 141, 7, 141, 1851, 10, 141, 12, 141, 14, 141, 1854, 11, 141, 3, 141, 3, 141, 3, 141, 3, 141, 3, 141, 3, 142, 3, 142, 3, 142, 3, 142, 7, 142, 1865, 10, 142, 12, 142, 14, 142, 1868, 11, 142, 3, 142, 3, 142, 3, 1852, 2, 143, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 57, 113, 58, 115, 59, 117, 60, 119, 61, 121, 62, 123, 63, 125, 64, 127, 65, 129, 66, 131, 67, 133, 68, 135, 69, 137, 70, 139, 71, 141, 72, 143, 73, 145, 74, 147, 75, 149, 76, 151, 77, 153, 78, 155, 79, 157, 80, 159, 81, 161, 82, 163, 83, 165, 84, 167, 85, 169, 86, 171, 87, 173, 88, 175, 89, 177, 90, 179, 91, 181, 92, 183, 93, 185, 94, 187, 95, 189, 96, 191, 97, 193, 98, 195, 99, 197, 100, 199, 101, 201, 102, 203, 103, 205, 104, 207, 105, 209, 2, 211, 106, 213, 2, 215, 107, 217, 108, 219, 2, 221, 2, 223, 109, 225, 110, 227, 111, 229, 112, 231, 113, 233, 114, 235, 115, 237, 116, 239, 117, 241, 118, 243, 119, 245, 120, 247, 121, 249, 122, 251, 123, 253, 124, 255, 125, 257, 126, 259, 127, 261, 128, 263, 129, 265, 130, 267, 2, 269, 2, 271, 131, 273, 2, 275, 2, 277, 132, 279, 133, 281, 134, 283, 135, 3, 2, 12, 3, 2, 50, 59, 4, 2, 71, 71, 103, 103, 4, 2, 90, 90, 122, 122, 5, 2, 50, 59, 67, 72, 99, 104, 6, 2, 38, 38, 67, 92, 97, 97, 99, 124, 7, 2, 38, 38, 50, 59, 67, 92, 97, 97, 99, 124, 6, 2, 12, 12, 15, 15, 36, 36, 94, 94, 6, 2, 12, 12, 15, 15, 41, 41, 94, 94, 5, 2, 11, 12, 14, 15, 34, 34, 4, 2, 12, 12, 15, 15, 2, 2016, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 2, 143, 3, 2, 2, 2, 2, 145, 3, 2, 2, 2, 2, 147, 3, 2, 2, 2, 2, 149, 3, 2, 2, 2, 2, 151, 3, 2, 2, 2, 2, 153, 3, 2, 2, 2, 2, 155, 3, 2, 2, 2, 2, 157, 3, 2, 2, 2, 2, 159, 3, 2, 2, 2, 2, 161, 3, 2, 2, 2, 2, 163, 3, 2, 2, 2, 2, 165, 3, 2, 2, 2, 2, 167, 3, 2, 2, 2, 2, 169, 3, 2, 2, 2, 2, 171, 3, 2, 2, 2, 2, 173, 3, 2, 2, 2, 2, 175, 3, 2, 2, 2, 2, 177, 3, 2, 2, 2, 2, 179, 3, 2, 2, 2, 2, 181, 3, 2, 2, 2, 2, 183, 3, 2, 2, 2, 2, 185, 3, 2, 2, 2, 2, 187, 3, 2, 2, 2, 2, 189, 3, 2, 2, 2, 2, 191, 3, 2, 2, 2, 2, 193, 3, 2, 2, 2, 2, 195, 3, 2, 2, 2, 2, 197, 3, 2, 2, 2, 2, 199, 3, 2, 2, 2, 2, 201, 3, 2, 2, 2, 2, 203, 3, 2, 2, 2, 2, 205, 3, 2, 2, 2, 2, 207, 3, 2, 2, 2, 2, 211, 3, 2, 2, 2, 2, 215, 3, 2, 2, 2, 2, 217, 3, 2, 2, 2, 2, 223, 3, 2, 2, 2, 2, 225, 3, 2, 2, 2, 2, 227, 3, 2, 2, 2, 2, 229, 3, 2, 2, 2, 2, 231, 3, 2, 2, 2, 2, 233, 3, 2, 2, 2, 2, 235, 3, 2, 2, 2, 2, 237, 3, 2, 2, 2, 2, 239, 3, 2, 2, 2, 2, 241, 3, 2, 2, 2, 2, 243, 3, 2, 2, 2, 2, 245, 3, 2, 2, 2, 2, 247, 3, 2, 2, 2, 2, 249, 3, 2, 2, 2, 2, 251, 3, 2, 2, 2, 2, 253, 3, 2, 2, 2, 2, 255, 3, 2, 2, 2, 2, 257, 3, 2, 2, 2, 2, 259, 3, 2, 2, 2, 2, 261, 3, 2, 2, 2, 2, 263, 3, 2, 2, 2, 2, 265, 3, 2, 2, 2, 2, 271, 3, 2, 2, 2, 2, 277, 3, 2, 2, 2, 2, 279, 3, 2, 2, 2, 2, 281, 3, 2, 2, 2, 2, 283, 3, 2, 2, 2, 3, 285, 3, 2, 2, 2, 5, 292, 3, 2, 2, 2, 7, 294, 3, 2, 2, 2, 9, 296, 3, 2, 2, 2, 11, 299, 3, 2, 2, 2, 13, 301, 3, 2, 2, 2, 15, 303, 3, 2, 2, 2, 17, 306, 3, 2, 2, 2, 19, 308, 3, 2, 2, 2, 21, 310, 3, 2, 2, 2, 23, 313, 3, 2, 2, 2, 25, 315, 3, 2, 2, 2, 27, 318, 3, 2, 2, 2, 29, 325, 3, 2, 2, 2, 31, 330, 3, 2, 2, 2, 33, 332, 3, 2, 2, 2, 35, 334, 3, 2, 2, 2, 37, 336, 3, 2, 2, 2, 39, 345, 3, 2, 2, 2, 41, 354, 3, 2, 2, 2, 43, 364, 3, 2, 2, 2, 45, 372, 3, 2, 2, 2, 47, 375, 3, 2, 2, 2, 49, 377, 3, 2, 2, 2, 51, 379, 3, 2, 2, 2, 53, 385, 3, 2, 2, 2, 55, 391, 3, 2, 2, 2, 57, 395, 3, 2, 2, 2, 59, 397, 3, 2, 2, 2, 61, 399, 3, 2, 2, 2, 63, 401, 3, 2, 2, 2, 65, 403, 3, 2, 2, 2, 67, 405, 3, 2, 2, 2, 69, 407, 3, 2, 2, 2, 71, 410, 3, 2, 2, 2, 73, 413, 3, 2, 2, 2, 75, 420, 3, 2, 2, 2, 77, 429, 3, 2, 2, 2, 79, 438, 3, 2, 2, 2, 81, 446, 3, 2, 2, 2, 83, 452, 3, 2, 2, 2, 85, 457, 3, 2, 2, 2, 87, 459, 3, 2, 2, 2, 89, 461, 3, 2, 2, 2, 91, 469, 3, 2, 2, 2, 93, 471, 3, 2, 2, 2, 95, 479, 3, 2, 2, 2, 97, 482, 3, 2, 2, 2, 99, 489, 3, 2, 2, 2, 101, 497, 3, 2, 2, 2, 103, 506, 3, 2, 2, 2, 105, 509, 3, 2, 2, 2, 107, 514, 3, 2, 2, 2, 109, 518, 3, 2, 2, 2, 111, 524, 3, 2, 2, 2, 113, 530, 3, 2, 2, 2, 115, 540, 3, 2, 2, 2, 117, 549, 3, 2, 2, 2, 119, 552, 3, 2, 2, 2, 121, 559, 3, 2, 2, 2, 123, 565, 3, 2, 2, 2, 125, 570, 3, 2, 2, 2, 127, 577, 3, 2, 2, 2, 129, 581, 3, 2, 2, 2, 131, 586, 3, 2, 2, 2, 133, 593, 3, 2, 2, 2, 135, 598, 3, 2, 2, 2, 137, 601, 3, 2, 2, 2, 139, 604, 3, 2, 2, 2, 141, 608, 3, 2, 2, 2, 143, 610, 3, 2, 2, 2, 145, 617, 3, 2, 2, 2, 147, 619, 3, 2, 2, 2, 149, 622, 3, 2, 2, 2, 151, 625, 3, 2, 2, 2, 153, 628, 3, 2, 2, 2, 155, 631, 3, 2, 2, 2, 157, 633, 3, 2, 2, 2, 159, 636, 3, 2, 2, 2, 161, 639, 3, 2, 2, 2, 163, 642, 3, 2, 2, 2, 165, 646, 3, 2, 2, 2, 167, 650, 3, 2, 2, 2, 169, 653, 3, 2, 2, 2, 171, 656, 3, 2, 2, 2, 173, 659, 3, 2, 2, 2, 175, 662, 3, 2, 2, 2, 177, 665, 3, 2, 2, 2, 179, 669, 3, 2, 2, 2, 181, 672, 3, 2, 2, 2, 183, 675, 3, 2, 2, 2, 185, 682, 3, 2, 2, 2, 187, 687, 3, 2, 2, 2, 189, 695, 3, 2, 2, 2, 191, 698, 3, 2, 2, 2, 193, 707, 3, 2, 2, 2, 195, 898, 3, 2, 2, 2, 197, 1115, 3, 2, 2, 2, 199, 1337, 3, 2, 2, 2, 201, 1361, 3, 2, 2, 2, 203, 1387, 3, 2, 2, 2, 205, 1398, 3, 2, 2, 2, 207, 1406, 3, 2, 2, 2, 209, 1412, 3, 2, 2, 2, 211, 1422, 3, 2, 2, 2, 213, 1426, 3, 2, 2, 2, 215, 1492, 3, 2, 2, 2, 217, 1494, 3, 2, 2, 2, 219, 1510, 3, 2, 2, 2, 221, 1513, 3, 2, 2, 2, 223, 1603, 3, 2, 2, 2, 225, 1605, 3, 2, 2, 2, 227, 1615, 3, 2, 2, 2, 229, 1621, 3, 2, 2, 2, 231, 1630, 3, 2, 2, 2, 233, 1640, 3, 2, 2, 2, 235, 1649, 3, 2, 2, 2, 237, 1655, 3, 2, 2, 2, 239, 1664, 3, 2, 2, 2, 241, 1672, 3, 2, 2, 2, 243, 1681, 3, 2, 2, 2, 245, 1689, 3, 2, 2, 2, 247, 1697, 3, 2, 2, 2, 249, 1704, 3, 2, 2, 2, 251, 1712, 3, 2, 2, 2, 253, 1717, 3, 2, 2, 2, 255, 1722, 3, 2, 2, 2, 257, 1727, 3, 2, 2, 2, 259, 1734, 3, 2, 2, 2, 261, 1746, 3, 2, 2, 2, 263, 1755, 3, 2, 2, 2, 265, 1763, 3, 2, 2, 2, 267, 1770, 3, 2, 2, 2, 269, 1772, 3, 2, 2, 2, 271, 1808, 3, 2, 2, 2, 273, 1813, 3, 2, 2, 2, 275, 1818, 3, 2, 2, 2, 277, 1821, 3, 2, 2, 2, 279, 1840, 3, 2, 2, 2, 281, 1846, 3, 2, 2, 2, 283, 1860, 3, 2, 2, 2, 285, 286, 7, 114, 2, 2, 286, 287, 7, 116, 2, 2, 287, 288, 7, 99, 2, 2, 288, 289, 7, 105, 2, 2, 289, 290, 7, 111, 2, 2, 290, 291, 7, 99, 2, 2, 291, 4, 3, 2, 2, 2, 292, 293, 7, 61, 2, 2, 293, 6, 3, 2, 2, 2, 294, 295, 7, 44, 2, 2, 295, 8, 3, 2, 2, 2, 296, 297, 7, 126, 2, 2, 297, 298, 7, 126, 2, 2, 298, 10, 3, 2, 2, 2, 299, 300, 7, 96, 2, 2, 300, 12, 3, 2, 2, 2, 301, 302, 7, 128, 2, 2, 302, 14, 3, 2, 2, 2, 303, 304, 7, 64, 2, 2, 304, 305, 7, 63, 2, 2, 305, 16, 3, 2, 2, 2, 306, 307, 7, 64, 2, 2, 307, 18, 3, 2, 2, 2, 308, 309, 7, 62, 2, 2, 309, 20, 3, 2, 2, 2, 310, 311, 7, 62, 2, 2, 311, 312, 7, 63, 2, 2, 312, 22, 3, 2, 2, 2, 313, 314, 7, 63, 2, 2, 314, 24, 3, 2, 2, 2, 315, 316, 7, 99, 2, 2, 316, 317, 7, 117, 2, 2, 317, 26, 3, 2, 2, 2, 318, 319, 7, 107, 2, 2, 319, 320, 7, 111, 2, 2, 320, 321, 7, 114, 2, 2, 321, 322, 7, 113, 2, 2, 322, 323, 7, 116, 2, 2, 323, 324, 7, 118, 2, 2, 324, 28, 3, 2, 2, 2, 325, 326, 7, 104, 2, 2, 326, 327, 7, 116, 2, 2, 327, 328, 7, 113, 2, 2, 328, 329, 7, 111, 2, 2, 329, 30, 3, 2, 2, 2, 330, 331, 7, 125, 2, 2, 331, 32, 3, 2, 2, 2, 332, 333, 7, 46, 2, 2, 333, 34, 3, 2, 2, 2, 334, 335, 7, 127, 2, 2, 335, 36, 3, 2, 2, 2, 336, 337, 7, 99, 2, 2, 337, 338, 7, 100, 2, 2, 338, 339, 7, 117, 2, 2, 339, 340, 7, 118, 2, 2, 340, 341, 7, 116, 2, 2, 341, 342, 7, 99, 2, 2, 342, 343, 7, 101, 2, 2, 343, 344, 7, 118, 2, 2, 344, 38, 3, 2, 2, 2, 345, 346, 7, 101, 2, 2, 346, 347, 7, 113, 2, 2, 347, 348, 7, 112, 2, 2, 348, 349, 7, 118, 2, 2, 349, 350, 7, 116, 2, 2, 350, 351, 7, 99, 2, 2, 351, 352, 7, 101, 2, 2, 352, 353, 7, 118, 2, 2, 353, 40, 3, 2, 2, 2, 354, 355, 7, 107, 2, 2, 355, 356, 7, 112, 2, 2, 356, 357, 7, 118, 2, 2, 357, 358, 7, 103, 2, 2, 358, 359, 7, 116, 2, 2, 359, 360, 7, 104, 2, 2, 360, 361, 7, 99, 2, 2, 361, 362, 7, 101, 2, 2, 362, 363, 7, 103, 2, 2, 363, 42, 3, 2, 2, 2, 364, 365, 7, 110, 2, 2, 365, 366, 7, 107, 2, 2, 366, 367, 7, 100, 2, 2, 367, 368, 7, 116, 2, 2, 368, 369, 7, 99, 2, 2, 369, 370, 7, 116, 2, 2, 370, 371, 7, 123, 2, 2, 371, 44, 3, 2, 2, 2, 372, 373, 7, 107, 2, 2, 373, 374, 7, 117, 2, 2, 374, 46, 3, 2, 2, 2, 375, 376, 7, 42, 2, 2, 376, 48, 3, 2, 2, 2, 377, 378, 7, 43, 2, 2, 378, 50, 3, 2, 2, 2, 379, 380, 7, 103, 2, 2, 380, 381, 7, 116, 2, 2, 381, 382, 7, 116, 2, 2, 382, 383, 7, 113, 2, 2, 383, 384, 7, 116, 2, 2, 384, 52, 3, 2, 2, 2, 385, 386, 7, 119, 2, 2, 386, 387, 7, 117, 2, 2, 387, 388, 7, 107, 2, 2, 388, 389, 7, 112, 2, 2, 389, 390, 7, 105, 2, 2, 390, 54, 3, 2, 2, 2, 391, 392, 7, 104, 2, 2, 392, 393, 7, 113, 2, 2, 393, 394, 7, 116, 2, 2, 394, 56, 3, 2, 2, 2, 395, 396, 7, 126, 2, 2, 396, 58, 3, 2, 2, 2, 397, 398, 7, 40, 2, 2, 398, 60, 3, 2, 2, 2, 399, 400, 7, 45, 2, 2, 400, 62, 3, 2, 2, 2, 401, 402, 7, 47, 2, 2, 402, 64, 3, 2, 2, 2, 403, 404, 7, 49, 2, 2, 404, 66, 3, 2, 2, 2, 405, 406, 7, 39, 2, 2, 406, 68, 3, 2, 2, 2, 407, 408, 7, 63, 2, 2, 408, 409, 7, 63, 2, 2, 409, 70, 3, 2, 2, 2, 410, 411, 7, 35, 2, 2, 411, 412, 7, 63, 2, 2, 412, 72, 3, 2, 2, 2, 413, 414, 7, 117, 2, 2, 414, 415, 7, 118, 2, 2, 415, 416, 7, 116, 2, 2, 416, 417, 7, 119, 2, 2, 417, 418, 7, 101, 2, 2, 418, 419, 7, 118, 2, 2, 419, 74, 3, 2, 2, 2, 420, 421, 7, 111, 2, 2, 421, 422, 7, 113, 2, 2, 422, 423, 7, 102, 2, 2, 423, 424, 7, 107, 2, 2, 424, 425, 7, 104, 2, 2, 425, 426, 7, 107, 2, 2, 426, 427, 7, 103, 2, 2, 427, 428, 7, 116, 2, 2, 428, 76, 3, 2, 2, 2, 429, 430, 7, 104, 2, 2, 430, 431, 7, 119, 2, 2, 431, 432, 7, 112, 2, 2, 432, 433, 7, 101, 2, 2, 433, 434, 7, 118, 2, 2, 434, 435, 7, 107, 2, 2, 435, 436, 7, 113, 2, 2, 436, 437, 7, 112, 2, 2, 437, 78, 3, 2, 2, 2, 438, 439, 7, 116, 2, 2, 439, 440, 7, 103, 2, 2, 440, 441, 7, 118, 2, 2, 441, 442, 7, 119, 2, 2, 442, 443, 7, 116, 2, 2, 443, 444, 7, 112, 2, 2, 444, 445, 7, 117, 2, 2, 445, 80, 3, 2, 2, 2, 446, 447, 7, 103, 2, 2, 447, 448, 7, 120, 2, 2, 448, 449, 7, 103, 2, 2, 449, 450, 7, 112, 2, 2, 450, 451, 7, 118, 2, 2, 451, 82, 3, 2, 2, 2, 452, 453, 7, 103, 2, 2, 453, 454, 7, 112, 2, 2, 454, 455, 7, 119, 2, 2, 455, 456, 7, 111, 2, 2, 456, 84, 3, 2, 2, 2, 457, 458, 7, 93, 2, 2, 458, 86, 3, 2, 2, 2, 459, 460, 7, 95, 2, 2, 460, 88, 3, 2, 2, 2, 461, 462, 7, 99, 2, 2, 462, 463, 7, 102, 2, 2, 463, 464, 7, 102, 2, 2, 464, 465, 7, 116, 2, 2, 465, 466, 7, 103, 2, 2, 466, 467, 7, 117, 2, 2, 467, 468, 7, 117, 2, 2, 468, 90, 3, 2, 2, 2, 469, 470, 7, 48, 2, 2, 470, 92, 3, 2, 2, 2, 471, 472, 7, 111, 2, 2, 472, 473, 7, 99, 2, 2, 473, 474, 7, 114, 2, 2, 474, 475, 7, 114, 2, 2, 475, 476, 7, 107, 2, 2, 476, 477, 7, 112, 2, 2, 477, 478, 7, 105, 2, 2, 478, 94, 3, 2, 2, 2, 479, 480, 7, 63, 2, 2, 480, 481, 7, 64, 2, 2, 481, 96, 3, 2, 2, 2, 482, 483, 7, 111, 2, 2, 483, 484, 7, 103, 2, 2, 484, 485, 7, 111, 2, 2, 485, 486, 7, 113, 2, 2, 486, 487, 7, 116, 2, 2, 487, 488, 7, 123, 2, 2, 488, 98, 3, 2, 2, 2, 489, 490, 7, 117, 2, 2, 490, 491, 7, 118, 2, 2, 491, 492, 7, 113, 2, 2, 492, 493, 7, 116, 2, 2, 493, 494, 7, 99, 2, 2, 494, 495, 7, 105, 2, 2, 495, 496, 7, 103, 2, 2, 496, 100, 3, 2, 2, 2, 497, 498, 7, 101, 2, 2, 498, 499, 7, 99, 2, 2, 499, 500, 7, 110, 2, 2, 500, 501, 7, 110, 2, 2, 501, 502, 7, 102, 2, 2, 502, 503, 7, 99, 2, 2, 503, 504, 7, 118, 2, 2, 504, 505, 7, 99, 2, 2, 505, 102, 3, 2, 2, 2, 506, 507, 7, 107, 2, 2, 507, 508, 7, 104, 2, 2, 508, 104, 3, 2, 2, 2, 509, 510, 7, 103, 2, 2, 510, 511, 7, 110, 2, 2, 511, 512, 7, 117, 2, 2, 512, 513, 7, 103, 2, 2, 513, 106, 3, 2, 2, 2, 514, 515, 7, 118, 2, 2, 515, 516, 7, 116, 2, 2, 516, 517, 7, 123, 2, 2, 517, 108, 3, 2, 2, 2, 518, 519, 7, 101, 2, 2, 519, 520, 7, 99, 2, 2, 520, 521, 7, 118, 2, 2, 521, 522, 7, 101, 2, 2, 522, 523, 7, 106, 2, 2, 523, 110, 3, 2, 2, 2, 524, 525, 7, 121, 2, 2, 525, 526, 7, 106, 2, 2, 526, 527, 7, 107, 2, 2, 527, 528, 7, 110, 2, 2, 528, 529, 7, 103, 2, 2, 529, 112, 3, 2, 2, 2, 530, 531, 7, 119, 2, 2, 531, 532, 7, 112, 2, 2, 532, 533, 7, 101, 2, 2, 533, 534, 7, 106, 2, 2, 534, 535, 7, 103, 2, 2, 535, 536, 7, 101, 2, 2, 536, 537, 7, 109, 2, 2, 537, 538, 7, 103, 2, 2, 538, 539, 7, 102, 2, 2, 539, 114, 3, 2, 2, 2, 540, 541, 7, 99, 2, 2, 541, 542, 7, 117, 2, 2, 542, 543, 7, 117, 2, 2, 543, 544, 7, 103, 2, 2, 544, 545, 7, 111, 2, 2, 545, 546, 7, 100, 2, 2, 546, 547, 7, 110, 2, 2, 547, 548, 7, 123, 2, 2, 548, 116, 3, 2, 2, 2, 549, 550, 7, 102, 2, 2, 550, 551, 7, 113, 2, 2, 551, 118, 3, 2, 2, 2, 552, 553, 7, 116, 2, 2, 553, 554, 7, 103, 2, 2, 554, 555, 7, 118, 2, 2, 555, 556, 7, 119, 2, 2, 556, 557, 7, 116, 2, 2, 557, 558, 7, 112, 2, 2, 558, 120, 3, 2, 2, 2, 559, 560, 7, 118, 2, 2, 560, 561, 7, 106, 2, 2, 561, 562, 7, 116, 2, 2, 562, 563, 7, 113, 2, 2, 563, 564, 7, 121, 2, 2, 564, 122, 3, 2, 2, 2, 565, 566, 7, 103, 2, 2, 566, 567, 7, 111, 2, 2, 567, 568, 7, 107, 2, 2, 568, 569, 7, 118, 2, 2, 569, 124, 3, 2, 2, 2, 570, 571, 7, 116, 2, 2, 571, 572, 7, 103, 2, 2, 572, 573, 7, 120, 2, 2, 573, 574, 7, 103, 2, 2, 574, 575, 7, 116, 2, 2, 575, 576, 7, 118, 2, 2, 576, 126, 3, 2, 2, 2, 577, 578, 7, 120, 2, 2, 578, 579, 7, 99, 2, 2, 579, 580, 7, 116, 2, 2, 580, 128, 3, 2, 2, 2, 581, 582, 7, 100, 2, 2, 582, 583, 7, 113, 2, 2, 583, 584, 7, 113, 2, 2, 584, 585, 7, 110, 2, 2, 585, 130, 3, 2, 2, 2, 586, 587, 7, 117, 2, 2, 587, 588, 7, 118, 2, 2, 588, 589, 7, 116, 2, 2, 589, 590, 7, 107, 2, 2, 590, 591, 7, 112, 2, 2, 591, 592, 7, 105, 2, 2, 592, 132, 3, 2, 2, 2, 593, 594, 7, 100, 2, 2, 594, 595, 7, 123, 2, 2, 595, 596, 7, 118, 2, 2, 596, 597, 7, 103, 2, 2, 597, 134, 3, 2, 2, 2, 598, 599, 7, 45, 2, 2, 599, 600, 7, 45, 2, 2, 600, 136, 3, 2, 2, 2, 601, 602, 7, 47, 2, 2, 602, 603, 7, 47, 2, 2, 603, 138, 3, 2, 2, 2, 604, 605, 7, 112, 2, 2, 605, 606, 7, 103, 2, 2, 606, 607, 7, 121, 2, 2, 607, 140, 3, 2, 2, 2, 608, 609, 7, 60, 2, 2, 609, 142, 3, 2, 2, 2, 610, 611, 7, 102, 2, 2, 611, 612, 7, 103, 2, 2, 612, 613, 7, 110, 2, 2, 613, 614, 7, 103, 2, 2, 614, 615, 7, 118, 2, 2, 615, 616, 7, 103, 2, 2, 616, 144, 3, 2, 2, 2, 617, 618, 7, 35, 2, 2, 618, 146, 3, 2, 2, 2, 619, 620, 7, 44, 2, 2, 620, 621, 7, 44, 2, 2, 621, 148, 3, 2, 2, 2, 622, 623, 7, 62, 2, 2, 623, 624, 7, 62, 2, 2, 624, 150, 3, 2, 2, 2, 625, 626, 7, 64, 2, 2, 626, 627, 7, 64, 2, 2, 627, 152, 3, 2, 2, 2, 628, 629, 7, 40, 2, 2, 629, 630, 7, 40, 2, 2, 630, 154, 3, 2, 2, 2, 631, 632, 7, 65, 2, 2, 632, 156, 3, 2, 2, 2, 633, 634, 7, 126, 2, 2, 634, 635, 7, 63, 2, 2, 635, 158, 3, 2, 2, 2, 636, 637, 7, 96, 2, 2, 637, 638, 7, 63, 2, 2, 638, 160, 3, 2, 2, 2, 639, 640, 7, 40, 2, 2, 640, 641, 7, 63, 2, 2, 641, 162, 3, 2, 2, 2, 642, 643, 7, 62, 2, 2, 643, 644, 7, 62, 2, 2, 644, 645, 7, 63, 2, 2, 645, 164, 3, 2, 2, 2, 646, 647, 7, 64, 2, 2, 647, 648, 7, 64, 2, 2, 648, 649, 7, 63, 2, 2, 649, 166, 3, 2, 2, 2, 650, 651, 7, 45, 2, 2, 651, 652, 7, 63, 2, 2, 652, 168, 3, 2, 2, 2, 653, 654, 7, 47, 2, 2, 654, 655, 7, 63, 2, 2, 655, 170, 3, 2, 2, 2, 656, 657, 7, 44, 2, 2, 657, 658, 7, 63, 2, 2, 658, 172, 3, 2, 2, 2, 659, 660, 7, 49, 2, 2, 660, 661, 7, 63, 2, 2, 661, 174, 3, 2, 2, 2, 662, 663, 7, 39, 2, 2, 663, 664, 7, 63, 2, 2, 664, 176, 3, 2, 2, 2, 665, 666, 7, 110, 2, 2, 666, 667, 7, 103, 2, 2, 667, 668, 7, 118, 2, 2, 668, 178, 3, 2, 2, 2, 669, 670, 7, 60, 2, 2, 670, 671, 7, 63, 2, 2, 671, 180, 3, 2, 2, 2, 672, 673, 7, 63, 2, 2, 673, 674, 7, 60, 2, 2, 674, 182, 3, 2, 2, 2, 675, 676, 7, 117, 2, 2, 676, 677, 7, 121, 2, 2, 677, 678, 7, 107, 2, 2, 678, 679, 7, 118, 2, 2, 679, 680, 7, 101, 2, 2, 680, 681, 7, 106, 2, 2, 681, 184, 3, 2, 2, 2, 682, 683, 7, 101, 2, 2, 683, 684, 7, 99, 2, 2, 684, 685, 7, 117, 2, 2, 685, 686, 7, 103, 2, 2, 686, 186, 3, 2, 2, 2, 687, 688, 7, 102, 2, 2, 688, 689, 7, 103, 2, 2, 689, 690, 7, 104, 2, 2, 690, 691, 7, 99, 2, 2, 691, 692, 7, 119, 2, 2, 692, 693, 7, 110, 2, 2, 693, 694, 7, 118, 2, 2, 694, 188, 3, 2, 2, 2, 695, 696, 7, 47, 2, 2, 696, 697, 7, 64, 2, 2, 697, 190, 3, 2, 2, 2, 698, 699, 7, 101, 2, 2, 699, 700, 7, 99, 2, 2, 700, 701, 7, 110, 2, 2, 701, 702, 7, 110, 2, 2, 702, 703, 7, 100, 2, 2, 703, 704, 7, 99, 2, 2, 704, 705, 7, 101, 2, 2, 705, 706, 7, 109, 2, 2, 706, 192, 3, 2, 2, 2, 707, 708, 7, 113, 2, 2, 708, 709, 7, 120, 2, 2, 709, 710, 7, 103, 2, 2, 710, 711, 7, 116, 2, 2, 711, 712, 7, 116, 2, 2, 712, 713, 7, 107, 2, 2, 713, 714, 7, 102, 2, 2, 714, 715, 7, 103, 2, 2, 715, 194, 3, 2, 2, 2, 716, 717, 7, 107, 2, 2, 717, 718, 7, 112, 2, 2, 718, 899, 7, 118, 2, 2, 719, 720, 7, 107, 2, 2, 720, 721, 7, 112, 2, 2, 721, 722, 7, 118, 2, 2, 722, 899, 7, 58, 2, 2, 723, 724, 7, 107, 2, 2, 724, 725, 7, 112, 2, 2, 725, 726, 7, 118, 2, 2, 726, 727, 7, 51, 2, 2, 727, 899, 7, 56, 2, 2, 728, 729, 7, 107, 2, 2, 729, 730, 7, 112, 2, 2, 730, 731, 7, 118, 2, 2, 731, 732, 7, 52, 2, 2, 732, 899, 7, 54, 2, 2, 733, 734, 7, 107, 2, 2, 734, 735, 7, 112, 2, 2, 735, 736, 7, 118, 2, 2, 736, 737, 7, 53, 2, 2, 737, 899, 7, 52, 2, 2, 738, 739, 7, 107, 2, 2, 739, 740, 7, 112, 2, 2, 740, 741, 7, 118, 2, 2, 741, 742, 7, 54, 2, 2, 742, 899, 7, 50, 2, 2, 743, 744, 7, 107, 2, 2, 744, 745, 7, 112, 2, 2, 745, 746, 7, 118, 2, 2, 746, 747, 7, 54, 2, 2, 747, 899, 7, 58, 2, 2, 748, 749, 7, 107, 2, 2, 749, 750, 7, 112, 2, 2, 750, 751, 7, 118, 2, 2, 751, 752, 7, 55, 2, 2, 752, 899, 7, 56, 2, 2, 753, 754, 7, 107, 2, 2, 754, 755, 7, 112, 2, 2, 755, 756, 7, 118, 2, 2, 756, 757, 7, 56, 2, 2, 757, 899, 7, 54, 2, 2, 758, 759, 7, 107, 2, 2, 759, 760, 7, 112, 2, 2, 760, 761, 7, 118, 2, 2, 761, 762, 7, 57, 2, 2, 762, 899, 7, 52, 2, 2, 763, 764, 7, 107, 2, 2, 764, 765, 7, 112, 2, 2, 765, 766, 7, 118, 2, 2, 766, 767, 7, 58, 2, 2, 767, 899, 7, 50, 2, 2, 768, 769, 7, 107, 2, 2, 769, 770, 7, 112, 2, 2, 770, 771, 7, 118, 2, 2, 771, 772, 7, 58, 2, 2, 772, 899, 7, 58, 2, 2, 773, 774, 7, 107, 2, 2, 774, 775, 7, 112, 2, 2, 775, 776, 7, 118, 2, 2, 776, 777, 7, 59, 2, 2, 777, 899, 7, 56, 2, 2, 778, 779, 7, 107, 2, 2, 779, 780, 7, 112, 2, 2, 780, 781, 7, 118, 2, 2, 781, 782, 7, 51, 2, 2, 782, 783, 7, 50, 2, 2, 783, 899, 7, 54, 2, 2, 784, 785, 7, 107, 2, 2, 785, 786, 7, 112, 2, 2, 786, 787, 7, 118, 2, 2, 787, 788, 7, 51, 2, 2, 788, 789, 7, 51, 2, 2, 789, 899, 7, 52, 2, 2, 790, 791, 7, 107, 2, 2, 791, 792, 7, 112, 2, 2, 792, 793, 7, 118, 2, 2, 793, 794, 7, 51, 2, 2, 794, 795, 7, 52, 2, 2, 795, 899, 7, 50, 2, 2, 796, 797, 7, 107, 2, 2, 797, 798, 7, 112, 2, 2, 798, 799, 7, 118, 2, 2, 799, 800, 7, 51, 2, 2, 800, 801, 7, 52, 2, 2, 801, 899, 7, 58, 2, 2, 802, 803, 7, 107, 2, 2, 803, 804, 7, 112, 2, 2, 804, 805, 7, 118, 2, 2, 805, 806, 7, 51, 2, 2, 806, 807, 7, 53, 2, 2, 807, 899, 7, 56, 2, 2, 808, 809, 7, 107, 2, 2, 809, 810, 7, 112, 2, 2, 810, 811, 7, 118, 2, 2, 811, 812, 7, 51, 2, 2, 812, 813, 7, 54, 2, 2, 813, 899, 7, 54, 2, 2, 814, 815, 7, 107, 2, 2, 815, 816, 7, 112, 2, 2, 816, 817, 7, 118, 2, 2, 817, 818, 7, 51, 2, 2, 818, 819, 7, 55, 2, 2, 819, 899, 7, 52, 2, 2, 820, 821, 7, 107, 2, 2, 821, 822, 7, 112, 2, 2, 822, 823, 7, 118, 2, 2, 823, 824, 7, 51, 2, 2, 824, 825, 7, 56, 2, 2, 825, 899, 7, 50, 2, 2, 826, 827, 7, 107, 2, 2, 827, 828, 7, 112, 2, 2, 828, 829, 7, 118, 2, 2, 829, 830, 7, 51, 2, 2, 830, 831, 7, 56, 2, 2, 831, 899, 7, 58, 2, 2, 832, 833, 7, 107, 2, 2, 833, 834, 7, 112, 2, 2, 834, 835, 7, 118, 2, 2, 835, 836, 7, 51, 2, 2, 836, 837, 7, 57, 2, 2, 837, 899, 7, 56, 2, 2, 838, 839, 7, 107, 2, 2, 839, 840, 7, 112, 2, 2, 840, 841, 7, 118, 2, 2, 841, 842, 7, 51, 2, 2, 842, 843, 7, 58, 2, 2, 843, 899, 7, 54, 2, 2, 844, 845, 7, 107, 2, 2, 845, 846, 7, 112, 2, 2, 846, 847, 7, 118, 2, 2, 847, 848, 7, 51, 2, 2, 848, 849, 7, 59, 2, 2, 849, 899, 7, 52, 2, 2, 850, 851, 7, 107, 2, 2, 851, 852, 7, 112, 2, 2, 852, 853, 7, 118, 2, 2, 853, 854, 7, 52, 2, 2, 854, 855, 7, 50, 2, 2, 855, 899, 7, 50, 2, 2, 856, 857, 7, 107, 2, 2, 857, 858, 7, 112, 2, 2, 858, 859, 7, 118, 2, 2, 859, 860, 7, 52, 2, 2, 860, 861, 7, 50, 2, 2, 861, 899, 7, 58, 2, 2, 862, 863, 7, 107, 2, 2, 863, 864, 7, 112, 2, 2, 864, 865, 7, 118, 2, 2, 865, 866, 7, 52, 2, 2, 866, 867, 7, 51, 2, 2, 867, 899, 7, 56, 2, 2, 868, 869, 7, 107, 2, 2, 869, 870, 7, 112, 2, 2, 870, 871, 7, 118, 2, 2, 871, 872, 7, 52, 2, 2, 872, 873, 7, 52, 2, 2, 873, 899, 7, 54, 2, 2, 874, 875, 7, 107, 2, 2, 875, 876, 7, 112, 2, 2, 876, 877, 7, 118, 2, 2, 877, 878, 7, 52, 2, 2, 878, 879, 7, 53, 2, 2, 879, 899, 7, 52, 2, 2, 880, 881, 7, 107, 2, 2, 881, 882, 7, 112, 2, 2, 882, 883, 7, 118, 2, 2, 883, 884, 7, 52, 2, 2, 884, 885, 7, 54, 2, 2, 885, 899, 7, 50, 2, 2, 886, 887, 7, 107, 2, 2, 887, 888, 7, 112, 2, 2, 888, 889, 7, 118, 2, 2, 889, 890, 7, 52, 2, 2, 890, 891, 7, 54, 2, 2, 891, 899, 7, 58, 2, 2, 892, 893, 7, 107, 2, 2, 893, 894, 7, 112, 2, 2, 894, 895, 7, 118, 2, 2, 895, 896, 7, 52, 2, 2, 896, 897, 7, 55, 2, 2, 897, 899, 7, 56, 2, 2, 898, 716, 3, 2, 2, 2, 898, 719, 3, 2, 2, 2, 898, 723, 3, 2, 2, 2, 898, 728, 3, 2, 2, 2, 898, 733, 3, 2, 2, 2, 898, 738, 3, 2, 2, 2, 898, 743, 3, 2, 2, 2, 898, 748, 3, 2, 2, 2, 898, 753, 3, 2, 2, 2, 898, 758, 3, 2, 2, 2, 898, 763, 3, 2, 2, 2, 898, 768, 3, 2, 2, 2, 898, 773, 3, 2, 2, 2, 898, 778, 3, 2, 2, 2, 898, 784, 3, 2, 2, 2, 898, 790, 3, 2, 2, 2, 898, 796, 3, 2, 2, 2, 898, 802, 3, 2, 2, 2, 898, 808, 3, 2, 2, 2, 898, 814, 3, 2, 2, 2, 898, 820, 3, 2, 2, 2, 898, 826, 3, 2, 2, 2, 898, 832, 3, 2, 2, 2, 898, 838, 3, 2, 2, 2, 898, 844, 3, 2, 2, 2, 898, 850, 3, 2, 2, 2, 898, 856, 3, 2, 2, 2, 898, 862, 3, 2, 2, 2, 898, 868, 3, 2, 2, 2, 898, 874, 3, 2, 2, 2, 898, 880, 3, 2, 2, 2, 898, 886, 3, 2, 2, 2, 898, 892, 3, 2, 2, 2, 899, 196, 3, 2, 2, 2, 900, 901, 7, 119, 2, 2, 901, 902, 7, 107, 2, 2, 902, 903, 7, 112, 2, 2, 903, 1116, 7, 118, 2, 2, 904, 905, 7, 119, 2, 2, 905, 906, 7, 107, 2, 2, 906, 907, 7, 112, 2, 2, 907, 908, 7, 118, 2, 2, 908, 1116, 7, 58, 2, 2, 909, 910, 7, 119, 2, 2, 910, 911, 7, 107, 2, 2, 911, 912, 7, 112, 2, 2, 912, 913, 7, 118, 2, 2, 913, 914, 7, 51, 2, 2, 914, 1116, 7, 56, 2, 2, 915, 916, 7, 119, 2, 2, 916, 917, 7, 107, 2, 2, 917, 918, 7, 112, 2, 2, 918, 919, 7, 118, 2, 2, 919, 920, 7, 52, 2, 2, 920, 1116, 7, 54, 2, 2, 921, 922, 7, 119, 2, 2, 922, 923, 7, 107, 2, 2, 923, 924, 7, 112, 2, 2, 924, 925, 7, 118, 2, 2, 925, 926, 7, 53, 2, 2, 926, 1116, 7, 52, 2, 2, 927, 928, 7, 119, 2, 2, 928, 929, 7, 107, 2, 2, 929, 930, 7, 112, 2, 2, 930, 931, 7, 118, 2, 2, 931, 932, 7, 54, 2, 2, 932, 1116, 7, 50, 2, 2, 933, 934, 7, 119, 2, 2, 934, 935, 7, 107, 2, 2, 935, 936, 7, 112, 2, 2, 936, 937, 7, 118, 2, 2, 937, 938, 7, 54, 2, 2, 938, 1116, 7, 58, 2, 2, 939, 940, 7, 119, 2, 2, 940, 941, 7, 107, 2, 2, 941, 942, 7, 112, 2, 2, 942, 943, 7, 118, 2, 2, 943, 944, 7, 55, 2, 2, 944, 1116, 7, 56, 2, 2, 945, 946, 7, 119, 2, 2, 946, 947, 7, 107, 2, 2, 947, 948, 7, 112, 2, 2, 948, 949, 7, 118, 2, 2, 949, 950, 7, 56, 2, 2, 950, 1116, 7, 54, 2, 2, 951, 952, 7, 119, 2, 2, 952, 953, 7, 107, 2, 2, 953, 954, 7, 112, 2, 2, 954, 955, 7, 118, 2, 2, 955, 956, 7, 57, 2, 2, 956, 1116, 7, 52, 2, 2, 957, 958, 7, 119, 2, 2, 958, 959, 7, 107, 2, 2, 959, 960, 7, 112, 2, 2, 960, 961, 7, 118, 2, 2, 961, 962, 7, 58, 2, 2, 962, 1116, 7, 50, 2, 2, 963, 964, 7, 119, 2, 2, 964, 965, 7, 107, 2, 2, 965, 966, 7, 112, 2, 2, 966, 967, 7, 118, 2, 2, 967, 968, 7, 58, 2, 2, 968, 1116, 7, 58, 2, 2, 969, 970, 7, 119, 2, 2, 970, 971, 7, 107, 2, 2, 971, 972, 7, 112, 2, 2, 972, 973, 7, 118, 2, 2, 973, 974, 7, 59, 2, 2, 974, 1116, 7, 56, 2, 2, 975, 976, 7, 119, 2, 2, 976, 977, 7, 107, 2, 2, 977, 978, 7, 112, 2, 2, 978, 979, 7, 118, 2, 2, 979, 980, 7, 51, 2, 2, 980, 981, 7, 50, 2, 2, 981, 1116, 7, 54, 2, 2, 982, 983, 7, 119, 2, 2, 983, 984, 7, 107, 2, 2, 984, 985, 7, 112, 2, 2, 985, 986, 7, 118, 2, 2, 986, 987, 7, 51, 2, 2, 987, 988, 7, 51, 2, 2, 988, 1116, 7, 52, 2, 2, 989, 990, 7, 119, 2, 2, 990, 991, 7, 107, 2, 2, 991, 992, 7, 112, 2, 2, 992, 993, 7, 118, 2, 2, 993, 994, 7, 51, 2, 2, 994, 995, 7, 52, 2, 2, 995, 1116, 7, 50, 2, 2, 996, 997, 7, 119, 2, 2, 997, 998, 7, 107, 2, 2, 998, 999, 7, 112, 2, 2, 999, 1000, 7, 118, 2, 2, 1000, 1001, 7, 51, 2, 2, 1001, 1002, 7, 52, 2, 2, 1002, 1116, 7, 58, 2, 2, 1003, 1004, 7, 119, 2, 2, 1004, 1005, 7, 107, 2, 2, 1005, 1006, 7, 112, 2, 2, 1006, 1007, 7, 118, 2, 2, 1007, 1008, 7, 51, 2, 2, 1008, 1009, 7, 53, 2, 2, 1009, 1116, 7, 56, 2, 2, 1010, 1011, 7, 119, 2, 2, 1011, 1012, 7, 107, 2, 2, 1012, 1013, 7, 112, 2, 2, 1013, 1014, 7, 118, 2, 2, 1014, 1015, 7, 51, 2, 2, 1015, 1016, 7, 54, 2, 2, 1016, 1116, 7, 54, 2, 2, 1017, 1018, 7, 119, 2, 2, 1018, 1019, 7, 107, 2, 2, 1019, 1020, 7, 112, 2, 2, 1020, 1021, 7, 118, 2, 2, 1021, 1022, 7, 51, 2, 2, 1022, 1023, 7, 55, 2, 2, 1023, 1116, 7, 52, 2, 2, 1024, 1025, 7, 119, 2, 2, 1025, 1026, 7, 107, 2, 2, 1026, 1027, 7, 112, 2, 2, 1027, 1028, 7, 118, 2, 2, 1028, 1029, 7, 51, 2, 2, 1029, 1030, 7, 56, 2, 2, 1030, 1116, 7, 50, 2, 2, 1031, 1032, 7, 119, 2, 2, 1032, 1033, 7, 107, 2, 2, 1033, 1034, 7, 112, 2, 2, 1034, 1035, 7, 118, 2, 2, 1035, 1036, 7, 51, 2, 2, 1036, 1037, 7, 56, 2, 2, 1037, 1116, 7, 58, 2, 2, 1038, 1039, 7, 119, 2, 2, 1039, 1040, 7, 107, 2, 2, 1040, 1041, 7, 112, 2, 2, 1041, 1042, 7, 118, 2, 2, 1042, 1043, 7, 51, 2, 2, 1043, 1044, 7, 57, 2, 2, 1044, 1116, 7, 56, 2, 2, 1045, 1046, 7, 119, 2, 2, 1046, 1047, 7, 107, 2, 2, 1047, 1048, 7, 112, 2, 2, 1048, 1049, 7, 118, 2, 2, 1049, 1050, 7, 51, 2, 2, 1050, 1051, 7, 58, 2, 2, 1051, 1116, 7, 54, 2, 2, 1052, 1053, 7, 119, 2, 2, 1053, 1054, 7, 107, 2, 2, 1054, 1055, 7, 112, 2, 2, 1055, 1056, 7, 118, 2, 2, 1056, 1057, 7, 51, 2, 2, 1057, 1058, 7, 59, 2, 2, 1058, 1116, 7, 52, 2, 2, 1059, 1060, 7, 119, 2, 2, 1060, 1061, 7, 107, 2, 2, 1061, 1062, 7, 112, 2, 2, 1062, 1063, 7, 118, 2, 2, 1063, 1064, 7, 52, 2, 2, 1064, 1065, 7, 50, 2, 2, 1065, 1116, 7, 50, 2, 2, 1066, 1067, 7, 119, 2, 2, 1067, 1068, 7, 107, 2, 2, 1068, 1069, 7, 112, 2, 2, 1069, 1070, 7, 118, 2, 2, 1070, 1071, 7, 52, 2, 2, 1071, 1072, 7, 50, 2, 2, 1072, 1116, 7, 58, 2, 2, 1073, 1074, 7, 119, 2, 2, 1074, 1075, 7, 107, 2, 2, 1075, 1076, 7, 112, 2, 2, 1076, 1077, 7, 118, 2, 2, 1077, 1078, 7, 52, 2, 2, 1078, 1079, 7, 51, 2, 2, 1079, 1116, 7, 56, 2, 2, 1080, 1081, 7, 119, 2, 2, 1081, 1082, 7, 107, 2, 2, 1082, 1083, 7, 112, 2, 2, 1083, 1084, 7, 118, 2, 2, 1084, 1085, 7, 52, 2, 2, 1085, 1086, 7, 52, 2, 2, 1086, 1116, 7, 54, 2, 2, 1087, 1088, 7, 119, 2, 2, 1088, 1089, 7, 107, 2, 2, 1089, 1090, 7, 112, 2, 2, 1090, 1091, 7, 118, 2, 2, 1091, 1092, 7, 52, 2, 2, 1092, 1093, 7, 53, 2, 2, 1093, 1116, 7, 52, 2, 2, 1094, 1095, 7, 119, 2, 2, 1095, 1096, 7, 107, 2, 2, 1096, 1097, 7, 112, 2, 2, 1097, 1098, 7, 118, 2, 2, 1098, 1099, 7, 52, 2, 2, 1099, 1100, 7, 54, 2, 2, 1100, 1116, 7, 50, 2, 2, 1101, 1102, 7, 119, 2, 2, 1102, 1103, 7, 107, 2, 2, 1103, 1104, 7, 112, 2, 2, 1104, 1105, 7, 118, 2, 2, 1105, 1106, 7, 52, 2, 2, 1106, 1107, 7, 54, 2, 2, 1107, 1116, 7, 58, 2, 2, 1108, 1109, 7, 119, 2, 2, 1109, 1110, 7, 107, 2, 2, 1110, 1111, 7, 112, 2, 2, 1111, 1112, 7, 118, 2, 2, 1112, 1113, 7, 52, 2, 2, 1113, 1114, 7, 55, 2, 2, 1114, 1116, 7, 56, 2, 2, 1115, 900, 3, 2, 2, 2, 1115, 904, 3, 2, 2, 2, 1115, 909, 3, 2, 2, 2, 1115, 915, 3, 2, 2, 2, 1115, 921, 3, 2, 2, 2, 1115, 927, 3, 2, 2, 2, 1115, 933, 3, 2, 2, 2, 1115, 939, 3, 2, 2, 2, 1115, 945, 3, 2, 2, 2, 1115, 951, 3, 2, 2, 2, 1115, 957, 3, 2, 2, 2, 1115, 963, 3, 2, 2, 2, 1115, 969, 3, 2, 2, 2, 1115, 975, 3, 2, 2, 2, 1115, 982, 3, 2, 2, 2, 1115, 989, 3, 2, 2, 2, 1115, 996, 3, 2, 2, 2, 1115, 1003, 3, 2, 2, 2, 1115, 1010, 3, 2, 2, 2, 1115, 1017, 3, 2, 2, 2, 1115, 1024, 3, 2, 2, 2, 1115, 1031, 3, 2, 2, 2, 1115, 1038, 3, 2, 2, 2, 1115, 1045, 3, 2, 2, 2, 1115, 1052, 3, 2, 2, 2, 1115, 1059, 3, 2, 2, 2, 1115, 1066, 3, 2, 2, 2, 1115, 1073, 3, 2, 2, 2, 1115, 1080, 3, 2, 2, 2, 1115, 1087, 3, 2, 2, 2, 1115, 1094, 3, 2, 2, 2, 1115, 1101, 3, 2, 2, 2, 1115, 1108, 3, 2, 2, 2, 1116, 198, 3, 2, 2, 2, 1117, 1118, 7, 100, 2, 2, 1118, 1119, 7, 123, 2, 2, 1119, 1120, 7, 118, 2, 2, 1120, 1121, 7, 103, 2, 2, 1121, 1338, 7, 117, 2, 2, 1122, 1123, 7, 100, 2, 2, 1123, 1124, 7, 123, 2, 2, 1124, 1125, 7, 118, 2, 2, 1125, 1126, 7, 103, 2, 2, 1126, 1127, 7, 117, 2, 2, 1127, 1338, 7, 51, 2, 2, 1128, 1129, 7, 100, 2, 2, 1129, 1130, 7, 123, 2, 2, 1130, 1131, 7, 118, 2, 2, 1131, 1132, 7, 103, 2, 2, 1132, 1133, 7, 117, 2, 2, 1133, 1338, 7, 52, 2, 2, 1134, 1135, 7, 100, 2, 2, 1135, 1136, 7, 123, 2, 2, 1136, 1137, 7, 118, 2, 2, 1137, 1138, 7, 103, 2, 2, 1138, 1139, 7, 117, 2, 2, 1139, 1338, 7, 53, 2, 2, 1140, 1141, 7, 100, 2, 2, 1141, 1142, 7, 123, 2, 2, 1142, 1143, 7, 118, 2, 2, 1143, 1144, 7, 103, 2, 2, 1144, 1145, 7, 117, 2, 2, 1145, 1338, 7, 54, 2, 2, 1146, 1147, 7, 100, 2, 2, 1147, 1148, 7, 123, 2, 2, 1148, 1149, 7, 118, 2, 2, 1149, 1150, 7, 103, 2, 2, 1150, 1151, 7, 117, 2, 2, 1151, 1338, 7, 55, 2, 2, 1152, 1153, 7, 100, 2, 2, 1153, 1154, 7, 123, 2, 2, 1154, 1155, 7, 118, 2, 2, 1155, 1156, 7, 103, 2, 2, 1156, 1157, 7, 117, 2, 2, 1157, 1338, 7, 56, 2, 2, 1158, 1159, 7, 100, 2, 2, 1159, 1160, 7, 123, 2, 2, 1160, 1161, 7, 118, 2, 2, 1161, 1162, 7, 103, 2, 2, 1162, 1163, 7, 117, 2, 2, 1163, 1338, 7, 57, 2, 2, 1164, 1165, 7, 100, 2, 2, 1165, 1166, 7, 123, 2, 2, 1166, 1167, 7, 118, 2, 2, 1167, 1168, 7, 103, 2, 2, 1168, 1169, 7, 117, 2, 2, 1169, 1338, 7, 58, 2, 2, 1170, 1171, 7, 100, 2, 2, 1171, 1172, 7, 123, 2, 2, 1172, 1173, 7, 118, 2, 2, 1173, 1174, 7, 103, 2, 2, 1174, 1175, 7, 117, 2, 2, 1175, 1338, 7, 59, 2, 2, 1176, 1177, 7, 100, 2, 2, 1177, 1178, 7, 123, 2, 2, 1178, 1179, 7, 118, 2, 2, 1179, 1180, 7, 103, 2, 2, 1180, 1181, 7, 117, 2, 2, 1181, 1182, 7, 51, 2, 2, 1182, 1338, 7, 50, 2, 2, 1183, 1184, 7, 100, 2, 2, 1184, 1185, 7, 123, 2, 2, 1185, 1186, 7, 118, 2, 2, 1186, 1187, 7, 103, 2, 2, 1187, 1188, 7, 117, 2, 2, 1188, 1189, 7, 51, 2, 2, 1189, 1338, 7, 51, 2, 2, 1190, 1191, 7, 100, 2, 2, 1191, 1192, 7, 123, 2, 2, 1192, 1193, 7, 118, 2, 2, 1193, 1194, 7, 103, 2, 2, 1194, 1195, 7, 117, 2, 2, 1195, 1196, 7, 51, 2, 2, 1196, 1338, 7, 52, 2, 2, 1197, 1198, 7, 100, 2, 2, 1198, 1199, 7, 123, 2, 2, 1199, 1200, 7, 118, 2, 2, 1200, 1201, 7, 103, 2, 2, 1201, 1202, 7, 117, 2, 2, 1202, 1203, 7, 51, 2, 2, 1203, 1338, 7, 53, 2, 2, 1204, 1205, 7, 100, 2, 2, 1205, 1206, 7, 123, 2, 2, 1206, 1207, 7, 118, 2, 2, 1207, 1208, 7, 103, 2, 2, 1208, 1209, 7, 117, 2, 2, 1209, 1210, 7, 51, 2, 2, 1210, 1338, 7, 54, 2, 2, 1211, 1212, 7, 100, 2, 2, 1212, 1213, 7, 123, 2, 2, 1213, 1214, 7, 118, 2, 2, 1214, 1215, 7, 103, 2, 2, 1215, 1216, 7, 117, 2, 2, 1216, 1217, 7, 51, 2, 2, 1217, 1338, 7, 55, 2, 2, 1218, 1219, 7, 100, 2, 2, 1219, 1220, 7, 123, 2, 2, 1220, 1221, 7, 118, 2, 2, 1221, 1222, 7, 103, 2, 2, 1222, 1223, 7, 117, 2, 2, 1223, 1224, 7, 51, 2, 2, 1224, 1338, 7, 56, 2, 2, 1225, 1226, 7, 100, 2, 2, 1226, 1227, 7, 123, 2, 2, 1227, 1228, 7, 118, 2, 2, 1228, 1229, 7, 103, 2, 2, 1229, 1230, 7, 117, 2, 2, 1230, 1231, 7, 51, 2, 2, 1231, 1338, 7, 57, 2, 2, 1232, 1233, 7, 100, 2, 2, 1233, 1234, 7, 123, 2, 2, 1234, 1235, 7, 118, 2, 2, 1235, 1236, 7, 103, 2, 2, 1236, 1237, 7, 117, 2, 2, 1237, 1238, 7, 51, 2, 2, 1238, 1338, 7, 58, 2, 2, 1239, 1240, 7, 100, 2, 2, 1240, 1241, 7, 123, 2, 2, 1241, 1242, 7, 118, 2, 2, 1242, 1243, 7, 103, 2, 2, 1243, 1244, 7, 117, 2, 2, 1244, 1245, 7, 51, 2, 2, 1245, 1338, 7, 59, 2, 2, 1246, 1247, 7, 100, 2, 2, 1247, 1248, 7, 123, 2, 2, 1248, 1249, 7, 118, 2, 2, 1249, 1250, 7, 103, 2, 2, 1250, 1251, 7, 117, 2, 2, 1251, 1252, 7, 52, 2, 2, 1252, 1338, 7, 50, 2, 2, 1253, 1254, 7, 100, 2, 2, 1254, 1255, 7, 123, 2, 2, 1255, 1256, 7, 118, 2, 2, 1256, 1257, 7, 103, 2, 2, 1257, 1258, 7, 117, 2, 2, 1258, 1259, 7, 52, 2, 2, 1259, 1338, 7, 51, 2, 2, 1260, 1261, 7, 100, 2, 2, 1261, 1262, 7, 123, 2, 2, 1262, 1263, 7, 118, 2, 2, 1263, 1264, 7, 103, 2, 2, 1264, 1265, 7, 117, 2, 2, 1265, 1266, 7, 52, 2, 2, 1266, 1338, 7, 52, 2, 2, 1267, 1268, 7, 100, 2, 2, 1268, 1269, 7, 123, 2, 2, 1269, 1270, 7, 118, 2, 2, 1270, 1271, 7, 103, 2, 2, 1271, 1272, 7, 117, 2, 2, 1272, 1273, 7, 52, 2, 2, 1273, 1338, 7, 53, 2, 2, 1274, 1275, 7, 100, 2, 2, 1275, 1276, 7, 123, 2, 2, 1276, 1277, 7, 118, 2, 2, 1277, 1278, 7, 103, 2, 2, 1278, 1279, 7, 117, 2, 2, 1279, 1280, 7, 52, 2, 2, 1280, 1338, 7, 54, 2, 2, 1281, 1282, 7, 100, 2, 2, 1282, 1283, 7, 123, 2, 2, 1283, 1284, 7, 118, 2, 2, 1284, 1285, 7, 103, 2, 2, 1285, 1286, 7, 117, 2, 2, 1286, 1287, 7, 52, 2, 2, 1287, 1338, 7, 55, 2, 2, 1288, 1289, 7, 100, 2, 2, 1289, 1290, 7, 123, 2, 2, 1290, 1291, 7, 118, 2, 2, 1291, 1292, 7, 103, 2, 2, 1292, 1293, 7, 117, 2, 2, 1293, 1294, 7, 52, 2, 2, 1294, 1338, 7, 56, 2, 2, 1295, 1296, 7, 100, 2, 2, 1296, 1297, 7, 123, 2, 2, 1297, 1298, 7, 118, 2, 2, 1298, 1299, 7, 103, 2, 2, 1299, 1300, 7, 117, 2, 2, 1300, 1301, 7, 52, 2, 2, 1301, 1338, 7, 57, 2, 2, 1302, 1303, 7, 100, 2, 2, 1303, 1304, 7, 123, 2, 2, 1304, 1305, 7, 118, 2, 2, 1305, 1306, 7, 103, 2, 2, 1306, 1307, 7, 117, 2, 2, 1307, 1308, 7, 52, 2, 2, 1308, 1338, 7, 58, 2, 2, 1309, 1310, 7, 100, 2, 2, 1310, 1311, 7, 123, 2, 2, 1311, 1312, 7, 118, 2, 2, 1312, 1313, 7, 103, 2, 2, 1313, 1314, 7, 117, 2, 2, 1314, 1315, 7, 52, 2, 2, 1315, 1338, 7, 59, 2, 2, 1316, 1317, 7, 100, 2, 2, 1317, 1318, 7, 123, 2, 2, 1318, 1319, 7, 118, 2, 2, 1319, 1320, 7, 103, 2, 2, 1320, 1321, 7, 117, 2, 2, 1321, 1322, 7, 53, 2, 2, 1322, 1338, 7, 50, 2, 2, 1323, 1324, 7, 100, 2, 2, 1324, 1325, 7, 123, 2, 2, 1325, 1326, 7, 118, 2, 2, 1326, 1327, 7, 103, 2, 2, 1327, 1328, 7, 117, 2, 2, 1328, 1329, 7, 53, 2, 2, 1329, 1338, 7, 51, 2, 2, 1330, 1331, 7, 100, 2, 2, 1331, 1332, 7, 123, 2, 2, 1332, 1333, 7, 118, 2, 2, 1333, 1334, 7, 103, 2, 2, 1334, 1335, 7, 117, 2, 2, 1335, 1336, 7, 53, 2, 2, 1336, 1338, 7, 52, 2, 2, 1337, 1117, 3, 2, 2, 2, 1337, 1122, 3, 2, 2, 2, 1337, 1128, 3, 2, 2, 2, 1337, 1134, 3, 2, 2, 2, 1337, 1140, 3, 2, 2, 2, 1337, 1146, 3, 2, 2, 2, 1337, 1152, 3, 2, 2, 2, 1337, 1158, 3, 2, 2, 2, 1337, 1164, 3, 2, 2, 2, 1337, 1170, 3, 2, 2, 2, 1337, 1176, 3, 2, 2, 2, 1337, 1183, 3, 2, 2, 2, 1337, 1190, 3, 2, 2, 2, 1337, 1197, 3, 2, 2, 2, 1337, 1204, 3, 2, 2, 2, 1337, 1211, 3, 2, 2, 2, 1337, 1218, 3, 2, 2, 2, 1337, 1225, 3, 2, 2, 2, 1337, 1232, 3, 2, 2, 2, 1337, 1239, 3, 2, 2, 2, 1337, 1246, 3, 2, 2, 2, 1337, 1253, 3, 2, 2, 2, 1337, 1260, 3, 2, 2, 2, 1337, 1267, 3, 2, 2, 2, 1337, 1274, 3, 2, 2, 2, 1337, 1281, 3, 2, 2, 2, 1337, 1288, 3, 2, 2, 2, 1337, 1295, 3, 2, 2, 2, 1337, 1302, 3, 2, 2, 2, 1337, 1309, 3, 2, 2, 2, 1337, 1316, 3, 2, 2, 2, 1337, 1323, 3, 2, 2, 2, 1337, 1330, 3, 2, 2, 2, 1338, 200, 3, 2, 2, 2, 1339, 1340, 7, 104, 2, 2, 1340, 1341, 7, 107, 2, 2, 1341, 1342, 7, 122, 2, 2, 1342, 1343, 7, 103, 2, 2, 1343, 1362, 7, 102, 2, 2, 1344, 1345, 7, 104, 2, 2, 1345, 1346, 7, 107, 2, 2, 1346, 1347, 7, 122, 2, 2, 1347, 1348, 7, 103, 2, 2, 1348, 1349, 7, 102, 2, 2, 1349, 1351, 3, 2, 2, 2, 1350, 1352, 9, 2, 2, 2, 1351, 1350, 3, 2, 2, 2, 1352, 1353, 3, 2, 2, 2, 1353, 1351, 3, 2, 2, 2, 1353, 1354, 3, 2, 2, 2, 1354, 1355, 3, 2, 2, 2, 1355, 1357, 7, 122, 2, 2, 1356, 1358, 9, 2, 2, 2, 1357, 1356, 3, 2, 2, 2, 1358, 1359, 3, 2, 2, 2, 1359, 1357, 3, 2, 2, 2, 1359, 1360, 3, 2, 2, 2, 1360, 1362, 3, 2, 2, 2, 1361, 1339, 3, 2, 2, 2, 1361, 1344, 3, 2, 2, 2, 1362, 202, 3, 2, 2, 2, 1363, 1364, 7, 119, 2, 2, 1364, 1365, 7, 104, 2, 2, 1365, 1366, 7, 107, 2, 2, 1366, 1367, 7, 122, 2, 2, 1367, 1368, 7, 103, 2, 2, 1368, 1388, 7, 102, 2, 2, 1369, 1370, 7, 119, 2, 2, 1370, 1371, 7, 104, 2, 2, 1371, 1372, 7, 107, 2, 2, 1372, 1373, 7, 122, 2, 2, 1373, 1374, 7, 103, 2, 2, 1374, 1375, 7, 102, 2, 2, 1375, 1377, 3, 2, 2, 2, 1376, 1378, 9, 2, 2, 2, 1377, 1376, 3, 2, 2, 2, 1378, 1379, 3, 2, 2, 2, 1379, 1377, 3, 2, 2, 2, 1379, 1380, 3, 2, 2, 2, 1380, 1381, 3, 2, 2, 2, 1381, 1383, 7, 122, 2, 2, 1382, 1384, 9, 2, 2, 2, 1383, 1382, 3, 2, 2, 2, 1384, 1385, 3, 2, 2, 2, 1385, 1383, 3, 2, 2, 2, 1385, 1386, 3, 2, 2, 2, 1386, 1388, 3, 2, 2, 2, 1387, 1363, 3, 2, 2, 2, 1387, 1369, 3, 2, 2, 2, 1388, 204, 3, 2, 2, 2, 1389, 1390, 7, 118, 2, 2, 1390, 1391, 7, 116, 2, 2, 1391, 1392, 7, 119, 2, 2, 1392, 1399, 7, 103, 2, 2, 1393, 1394, 7, 104, 2, 2, 1394, 1395, 7, 99, 2, 2, 1395, 1396, 7, 110, 2, 2, 1396, 1397, 7, 117, 2, 2, 1397, 1399, 7, 103, 2, 2, 1398, 1389, 3, 2, 2, 2, 1398, 1393, 3, 2, 2, 2, 1399, 206, 3, 2, 2, 2, 1400, 1407, 5, 209, 105, 2, 1401, 1403, 5, 209, 105, 2, 1402, 1401, 3, 2, 2, 2, 1402, 1403, 3, 2, 2, 2, 1403, 1404, 3, 2, 2, 2, 1404, 1405, 7, 48, 2, 2, 1405, 1407, 5, 209, 105, 2, 1406, 1400, 3, 2, 2, 2, 1406, 1402, 3, 2, 2, 2, 1407, 1410, 3, 2, 2, 2, 1408, 1409, 9, 3, 2, 2, 1409, 1411, 5, 209, 105, 2, 1410, 1408, 3, 2, 2, 2, 1410, 1411, 3, 2, 2, 2, 1411, 208, 3, 2, 2, 2, 1412, 1419, 9, 2, 2, 2, 1413, 1415, 7, 97, 2, 2, 1414, 1413, 3, 2, 2, 2, 1414, 1415, 3, 2, 2, 2, 1415, 1416, 3, 2, 2, 2, 1416, 1418, 9, 2, 2, 2, 1417, 1414, 3, 2, 2, 2, 1418, 1421, 3, 2, 2, 2, 1419, 1417, 3, 2, 2, 2, 1419, 1420, 3, 2, 2, 2, 1420, 210, 3, 2, 2, 2, 1421, 1419, 3, 2, 2, 2, 1422, 1423, 7, 50, 2, 2, 1423, 1424, 9, 4, 2, 2, 1424, 1425, 5, 213, 107, 2, 1425, 212, 3, 2, 2, 2, 1426, 1433, 5, 221, 111, 2, 1427, 1429, 7, 97, 2, 2, 1428, 1427, 3, 2, 2, 2, 1428, 1429, 3, 2, 2, 2, 1429, 1430, 3, 2, 2, 2, 1430, 1432, 5, 221, 111, 2, 1431, 1428, 3, 2, 2, 2, 1432, 1435, 3, 2, 2, 2, 1433, 1431, 3, 2, 2, 2, 1433, 1434, 3, 2, 2, 2, 1434, 214, 3, 2, 2, 2, 1435, 1433, 3, 2, 2, 2, 1436, 1437, 7, 121, 2, 2, 1437, 1438, 7, 103, 2, 2, 1438, 1493, 7, 107, 2, 2, 1439, 1440, 7, 105, 2, 2, 1440, 1441, 7, 121, 2, 2, 1441, 1442, 7, 103, 2, 2, 1442, 1493, 7, 107, 2, 2, 1443, 1444, 7, 117, 2, 2, 1444, 1445, 7, 124, 2, 2, 1445, 1446, 7, 99, 2, 2, 1446, 1447, 7, 100, 2, 2, 1447, 1493, 7, 113, 2, 2, 1448, 1449, 7, 104, 2, 2, 1449, 1450, 7, 107, 2, 2, 1450, 1451, 7, 112, 2, 2, 1451, 1452, 7, 112, 2, 2, 1452, 1453, 7, 103, 2, 2, 1453, 1493, 7, 123, 2, 2, 1454, 1455, 7, 103, 2, 2, 1455, 1456, 7, 118, 2, 2, 1456, 1457, 7, 106, 2, 2, 1457, 1458, 7, 103, 2, 2, 1458, 1493, 7, 116, 2, 2, 1459, 1460, 7, 117, 2, 2, 1460, 1461, 7, 103, 2, 2, 1461, 1462, 7, 101, 2, 2, 1462, 1463, 7, 113, 2, 2, 1463, 1464, 7, 112, 2, 2, 1464, 1465, 7, 102, 2, 2, 1465, 1493, 7, 117, 2, 2, 1466, 1467, 7, 111, 2, 2, 1467, 1468, 7, 107, 2, 2, 1468, 1469, 7, 112, 2, 2, 1469, 1470, 7, 119, 2, 2, 1470, 1471, 7, 118, 2, 2, 1471, 1472, 7, 103, 2, 2, 1472, 1493, 7, 117, 2, 2, 1473, 1474, 7, 106, 2, 2, 1474, 1475, 7, 113, 2, 2, 1475, 1476, 7, 119, 2, 2, 1476, 1477, 7, 116, 2, 2, 1477, 1493, 7, 117, 2, 2, 1478, 1479, 7, 102, 2, 2, 1479, 1480, 7, 99, 2, 2, 1480, 1481, 7, 123, 2, 2, 1481, 1493, 7, 117, 2, 2, 1482, 1483, 7, 121, 2, 2, 1483, 1484, 7, 103, 2, 2, 1484, 1485, 7, 103, 2, 2, 1485, 1486, 7, 109, 2, 2, 1486, 1493, 7, 117, 2, 2, 1487, 1488, 7, 123, 2, 2, 1488, 1489, 7, 103, 2, 2, 1489, 1490, 7, 99, 2, 2, 1490, 1491, 7, 116, 2, 2, 1491, 1493, 7, 117, 2, 2, 1492, 1436, 3, 2, 2, 2, 1492, 1439, 3, 2, 2, 2, 1492, 1443, 3, 2, 2, 2, 1492, 1448, 3, 2, 2, 2, 1492, 1454, 3, 2, 2, 2, 1492, 1459, 3, 2, 2, 2, 1492, 1466, 3, 2, 2, 2, 1492, 1473, 3, 2, 2, 2, 1492, 1478, 3, 2, 2, 2, 1492, 1482, 3, 2, 2, 2, 1492, 1487, 3, 2, 2, 2, 1493, 216, 3, 2, 2, 2, 1494, 1495, 7, 106, 2, 2, 1495, 1496, 7, 103, 2, 2, 1496, 1497, 7, 122, 2, 2, 1497, 1508, 3, 2, 2, 2, 1498, 1500, 7, 36, 2, 2, 1499, 1501, 5, 213, 107, 2, 1500, 1499, 3, 2, 2, 2, 1500, 1501, 3, 2, 2, 2, 1501, 1502, 3, 2, 2, 2, 1502, 1509, 7, 36, 2, 2, 1503, 1505, 7, 41, 2, 2, 1504, 1506, 5, 213, 107, 2, 1505, 1504, 3, 2, 2, 2, 1505, 1506, 3, 2, 2, 2, 1506, 1507, 3, 2, 2, 2, 1507, 1509, 7, 41, 2, 2, 1508, 1498, 3, 2, 2, 2, 1508, 1503, 3, 2, 2, 2, 1509, 218, 3, 2, 2, 2, 1510, 1511, 5, 221, 111, 2, 1511, 1512, 5, 221, 111, 2, 1512, 220, 3, 2, 2, 2, 1513, 1514, 9, 5, 2, 2, 1514, 222, 3, 2, 2, 2, 1515, 1516, 7, 99, 2, 2, 1516, 1517, 7, 100, 2, 2, 1517, 1518, 7, 117, 2, 2, 1518, 1519, 7, 118, 2, 2, 1519, 1520, 7, 116, 2, 2, 1520, 1521, 7, 99, 2, 2, 1521, 1522, 7, 101, 2, 2, 1522, 1604, 7, 118, 2, 2, 1523, 1524, 7, 99, 2, 2, 1524, 1525, 7, 104, 2, 2, 1525, 1526, 7, 118, 2, 2, 1526, 1527, 7, 103, 2, 2, 1527, 1604, 7, 116, 2, 2, 1528, 1529, 7, 101, 2, 2, 1529, 1530, 7, 99, 2, 2, 1530, 1531, 7, 117, 2, 2, 1531, 1604, 7, 103, 2, 2, 1532, 1533, 7, 101, 2, 2, 1533, 1534, 7, 99, 2, 2, 1534, 1535, 7, 118, 2, 2, 1535, 1536, 7, 101, 2, 2, 1536, 1604, 7, 106, 2, 2, 1537, 1538, 7, 102, 2, 2, 1538, 1539, 7, 103, 2, 2, 1539, 1540, 7, 104, 2, 2, 1540, 1541, 7, 99, 2, 2, 1541, 1542, 7, 119, 2, 2, 1542, 1543, 7, 110, 2, 2, 1543, 1604, 7, 118, 2, 2, 1544, 1545, 7, 104, 2, 2, 1545, 1546, 7, 107, 2, 2, 1546, 1547, 7, 112, 2, 2, 1547, 1548, 7, 99, 2, 2, 1548, 1604, 7, 110, 2, 2, 1549, 1550, 7, 107, 2, 2, 1550, 1604, 7, 112, 2, 2, 1551, 1552, 7, 107, 2, 2, 1552, 1553, 7, 112, 2, 2, 1553, 1554, 7, 110, 2, 2, 1554, 1555, 7, 107, 2, 2, 1555, 1556, 7, 112, 2, 2, 1556, 1604, 7, 103, 2, 2, 1557, 1558, 7, 110, 2, 2, 1558, 1559, 7, 103, 2, 2, 1559, 1604, 7, 118, 2, 2, 1560, 1561, 7, 111, 2, 2, 1561, 1562, 7, 99, 2, 2, 1562, 1563, 7, 118, 2, 2, 1563, 1564, 7, 101, 2, 2, 1564, 1604, 7, 106, 2, 2, 1565, 1566, 7, 112, 2, 2, 1566, 1567, 7, 119, 2, 2, 1567, 1568, 7, 110, 2, 2, 1568, 1604, 7, 110, 2, 2, 1569, 1570, 7, 113, 2, 2, 1570, 1604, 7, 104, 2, 2, 1571, 1572, 7, 116, 2, 2, 1572, 1573, 7, 103, 2, 2, 1573, 1574, 7, 110, 2, 2, 1574, 1575, 7, 113, 2, 2, 1575, 1576, 7, 101, 2, 2, 1576, 1577, 7, 99, 2, 2, 1577, 1578, 7, 118, 2, 2, 1578, 1579, 7, 99, 2, 2, 1579, 1580, 7, 100, 2, 2, 1580, 1581, 7, 110, 2, 2, 1581, 1604, 7, 103, 2, 2, 1582, 1583, 7, 117, 2, 2, 1583, 1584, 7, 118, 2, 2, 1584, 1585, 7, 99, 2, 2, 1585, 1586, 7, 118, 2, 2, 1586, 1587, 7, 107, 2, 2, 1587, 1604, 7, 101, 2, 2, 1588, 1589, 7, 117, 2, 2, 1589, 1590, 7, 121, 2, 2, 1590, 1591, 7, 107, 2, 2, 1591, 1592, 7, 118, 2, 2, 1592, 1593, 7, 101, 2, 2, 1593, 1604, 7, 106, 2, 2, 1594, 1595, 7, 118, 2, 2, 1595, 1596, 7, 116, 2, 2, 1596, 1604, 7, 123, 2, 2, 1597, 1598, 7, 118, 2, 2, 1598, 1599, 7, 123, 2, 2, 1599, 1600, 7, 114, 2, 2, 1600, 1601, 7, 103, 2, 2, 1601, 1602, 7, 113, 2, 2, 1602, 1604, 7, 104, 2, 2, 1603, 1515, 3, 2, 2, 2, 1603, 1523, 3, 2, 2, 2, 1603, 1528, 3, 2, 2, 2, 1603, 1532, 3, 2, 2, 2, 1603, 1537, 3, 2, 2, 2, 1603, 1544, 3, 2, 2, 2, 1603, 1549, 3, 2, 2, 2, 1603, 1551, 3, 2, 2, 2, 1603, 1557, 3, 2, 2, 2, 1603, 1560, 3, 2, 2, 2, 1603, 1565, 3, 2, 2, 2, 1603, 1569, 3, 2, 2, 2, 1603, 1571, 3, 2, 2, 2, 1603, 1582, 3, 2, 2, 2, 1603, 1588, 3, 2, 2, 2, 1603, 1594, 3, 2, 2, 2, 1603, 1597, 3, 2, 2, 2, 1604, 224, 3, 2, 2, 2, 1605, 1606, 7, 99, 2, 2, 1606, 1607, 7, 112, 2, 2, 1607, 1608, 7, 113, 2, 2, 1608, 1609, 7, 112, 2, 2, 1609, 1610, 7, 123, 2, 2, 1610, 1611, 7, 111, 2, 2, 1611, 1612, 7, 113, 2, 2, 1612, 1613, 7, 119, 2, 2, 1613, 1614, 7, 117, 2, 2, 1614, 226, 3, 2, 2, 2, 1615, 1616, 7, 100, 2, 2, 1616, 1617, 7, 116, 2, 2, 1617, 1618, 7, 103, 2, 2, 1618, 1619, 7, 99, 2, 2, 1619, 1620, 7, 109, 2, 2, 1620, 228, 3, 2, 2, 2, 1621, 1622, 7, 101, 2, 2, 1622, 1623, 7, 113, 2, 2, 1623, 1624, 7, 112, 2, 2, 1624, 1625, 7, 117, 2, 2, 1625, 1626, 7, 118, 2, 2, 1626, 1627, 7, 99, 2, 2, 1627, 1628, 7, 112, 2, 2, 1628, 1629, 7, 118, 2, 2, 1629, 230, 3, 2, 2, 2, 1630, 1631, 7, 107, 2, 2, 1631, 1632, 7, 111, 2, 2, 1632, 1633, 7, 111, 2, 2, 1633, 1634, 7, 119, 2, 2, 1634, 1635, 7, 118, 2, 2, 1635, 1636, 7, 99, 2, 2, 1636, 1637, 7, 100, 2, 2, 1637, 1638, 7, 110, 2, 2, 1638, 1639, 7, 103, 2, 2, 1639, 232, 3, 2, 2, 2, 1640, 1641, 7, 101, 2, 2, 1641, 1642, 7, 113, 2, 2, 1642, 1643, 7, 112, 2, 2, 1643, 1644, 7, 118, 2, 2, 1644, 1645, 7, 107, 2, 2, 1645, 1646, 7, 112, 2, 2, 1646, 1647, 7, 119, 2, 2, 1647, 1648, 7, 103, 2, 2, 1648, 234, 3, 2, 2, 2, 1649, 1650, 7, 110, 2, 2, 1650, 1651, 7, 103, 2, 2, 1651, 1652, 7, 99, 2, 2, 1652, 1653, 7, 120, 2, 2, 1653, 1654, 7, 103, 2, 2, 1654, 236, 3, 2, 2, 2, 1655, 1656, 7, 103, 2, 2, 1656, 1657, 7, 122, 2, 2, 1657, 1658, 7, 118, 2, 2, 1658, 1659, 7, 103, 2, 2, 1659, 1660, 7, 116, 2, 2, 1660, 1661, 7, 112, 2, 2, 1661, 1662, 7, 99, 2, 2, 1662, 1663, 7, 110, 2, 2, 1663, 238, 3, 2, 2, 2, 1664, 1665, 7, 107, 2, 2, 1665, 1666, 7, 112, 2, 2, 1666, 1667, 7, 102, 2, 2, 1667, 1668, 7, 103, 2, 2, 1668, 1669, 7, 122, 2, 2, 1669, 1670, 7, 103, 2, 2, 1670, 1671, 7, 102, 2, 2, 1671, 240, 3, 2, 2, 2, 1672, 1673, 7, 107, 2, 2, 1673, 1674, 7, 112, 2, 2, 1674, 1675, 7, 118, 2, 2, 1675, 1676, 7, 103, 2, 2, 1676, 1677, 7, 116, 2, 2, 1677, 1678, 7, 112, 2, 2, 1678, 1679, 7, 99, 2, 2, 1679, 1680, 7, 110, 2, 2, 1680, 242, 3, 2, 2, 2, 1681, 1682, 7, 114, 2, 2, 1682, 1683, 7, 99, 2, 2, 1683, 1684, 7, 123, 2, 2, 1684, 1685, 7, 99, 2, 2, 1685, 1686, 7, 100, 2, 2, 1686, 1687, 7, 110, 2, 2, 1687, 1688, 7, 103, 2, 2, 1688, 244, 3, 2, 2, 2, 1689, 1690, 7, 114, 2, 2, 1690, 1691, 7, 116, 2, 2, 1691, 1692, 7, 107, 2, 2, 1692, 1693, 7, 120, 2, 2, 1693, 1694, 7, 99, 2, 2, 1694, 1695, 7, 118, 2, 2, 1695, 1696, 7, 103, 2, 2, 1696, 246, 3, 2, 2, 2, 1697, 1698, 7, 114, 2, 2, 1698, 1699, 7, 119, 2, 2, 1699, 1700, 7, 100, 2, 2, 1700, 1701, 7, 110, 2, 2, 1701, 1702, 7, 107, 2, 2, 1702, 1703, 7, 101, 2, 2, 1703, 248, 3, 2, 2, 2, 1704, 1705, 7, 120, 2, 2, 1705, 1706, 7, 107, 2, 2, 1706, 1707, 7, 116, 2, 2, 1707, 1708, 7, 118, 2, 2, 1708, 1709, 7, 119, 2, 2, 1709, 1710, 7, 99, 2, 2, 1710, 1711, 7, 110, 2, 2, 1711, 250, 3, 2, 2, 2, 1712, 1713, 7, 114, 2, 2, 1713, 1714, 7, 119, 2, 2, 1714, 1715, 7, 116, 2, 2, 1715, 1716, 7, 103, 2, 2, 1716, 252, 3, 2, 2, 2, 1717, 1718, 7, 118, 2, 2, 1718, 1719, 7, 123, 2, 2, 1719, 1720, 7, 114, 2, 2, 1720, 1721, 7, 103, 2, 2, 1721, 254, 3, 2, 2, 2, 1722, 1723, 7, 120, 2, 2, 1723, 1724, 7, 107, 2, 2, 1724, 1725, 7, 103, 2, 2, 1725, 1726, 7, 121, 2, 2, 1726, 256, 3, 2, 2, 2, 1727, 1728, 7, 105, 2, 2, 1728, 1729, 7, 110, 2, 2, 1729, 1730, 7, 113, 2, 2, 1730, 1731, 7, 100, 2, 2, 1731, 1732, 7, 99, 2, 2, 1732, 1733, 7, 110, 2, 2, 1733, 258, 3, 2, 2, 2, 1734, 1735, 7, 101, 2, 2, 1735, 1736, 7, 113, 2, 2, 1736, 1737, 7, 112, 2, 2, 1737, 1738, 7, 117, 2, 2, 1738, 1739, 7, 118, 2, 2, 1739, 1740, 7, 116, 2, 2, 1740, 1741, 7, 119, 2, 2, 1741, 1742, 7, 101, 2, 2, 1742, 1743, 7, 118, 2, 2, 1743, 1744, 7, 113, 2, 2, 1744, 1745, 7, 116, 2, 2, 1745, 260, 3, 2, 2, 2, 1746, 1747, 7, 104, 2, 2, 1747, 1748, 7, 99, 2, 2, 1748, 1749, 7, 110, 2, 2, 1749, 1750, 7, 110, 2, 2, 1750, 1751, 7, 100, 2, 2, 1751, 1752, 7, 99, 2, 2, 1752, 1753, 7, 101, 2, 2, 1753, 1754, 7, 109, 2, 2, 1754, 262, 3, 2, 2, 2, 1755, 1756, 7, 116, 2, 2, 1756, 1757, 7, 103, 2, 2, 1757, 1758, 7, 101, 2, 2, 1758, 1759, 7, 103, 2, 2, 1759, 1760, 7, 107, 2, 2, 1760, 1761, 7, 120, 2, 2, 1761, 1762, 7, 103, 2, 2, 1762, 264, 3, 2, 2, 2, 1763, 1767, 5, 267, 134, 2, 1764, 1766, 5, 269, 135, 2, 1765, 1764, 3, 2, 2, 2, 1766, 1769, 3, 2, 2, 2, 1767, 1765, 3, 2, 2, 2, 1767, 1768, 3, 2, 2, 2, 1768, 266, 3, 2, 2, 2, 1769, 1767, 3, 2, 2, 2, 1770, 1771, 9, 6, 2, 2, 1771, 268, 3, 2, 2, 2, 1772, 1773, 9, 7, 2, 2, 1773, 270, 3, 2, 2, 2, 1774, 1775, 7, 119, 2, 2, 1775, 1776, 7, 112, 2, 2, 1776, 1777, 7, 107, 2, 2, 1777, 1778, 7, 101, 2, 2, 1778, 1779, 7, 113, 2, 2, 1779, 1780, 7, 102, 2, 2, 1780, 1782, 7, 103, 2, 2, 1781, 1774, 3, 2, 2, 2, 1781, 1782, 3, 2, 2, 2, 1782, 1783, 3, 2, 2, 2, 1783, 1787, 7, 36, 2, 2, 1784, 1786, 5, 273, 137, 2, 1785, 1784, 3, 2, 2, 2, 1786, 1789, 3, 2, 2, 2, 1787, 1785, 3, 2, 2, 2, 1787, 1788, 3, 2, 2, 2, 1788, 1790, 3, 2, 2, 2, 1789, 1787, 3, 2, 2, 2, 1790, 1809, 7, 36, 2, 2, 1791, 1792, 7, 119, 2, 2, 1792, 1793, 7, 112, 2, 2, 1793, 1794, 7, 107, 2, 2, 1794, 1795, 7, 101, 2, 2, 1795, 1796, 7, 113, 2, 2, 1796, 1797, 7, 102, 2, 2, 1797, 1799, 7, 103, 2, 2, 1798, 1791, 3, 2, 2, 2, 1798, 1799, 3, 2, 2, 2, 1799, 1800, 3, 2, 2, 2, 1800, 1804, 7, 41, 2, 2, 1801, 1803, 5, 275, 138, 2, 1802, 1801, 3, 2, 2, 2, 1803, 1806, 3, 2, 2, 2, 1804, 1802, 3, 2, 2, 2, 1804, 1805, 3, 2, 2, 2, 1805, 1807, 3, 2, 2, 2, 1806, 1804, 3, 2, 2, 2, 1807, 1809, 7, 41, 2, 2, 1808, 1781, 3, 2, 2, 2, 1808, 1798, 3, 2, 2, 2, 1809, 272, 3, 2, 2, 2, 1810, 1814, 10, 8, 2, 2, 1811, 1812, 7, 94, 2, 2, 1812, 1814, 11, 2, 2, 2, 1813, 1810, 3, 2, 2, 2, 1813, 1811, 3, 2, 2, 2, 1814, 274, 3, 2, 2, 2, 1815, 1819, 10, 9, 2, 2, 1816, 1817, 7, 94, 2, 2, 1817, 1819, 11, 2, 2, 2, 1818, 1815, 3, 2, 2, 2, 1818, 1816, 3, 2, 2, 2, 1819, 276, 3, 2, 2, 2, 1820, 1822, 9, 2, 2, 2, 1821, 1820, 3, 2, 2, 2, 1822, 1823, 3, 2, 2, 2, 1823, 1821, 3, 2, 2, 2, 1823, 1824, 3, 2, 2, 2, 1824, 1825, 3, 2, 2, 2, 1825, 1827, 7, 48, 2, 2, 1826, 1828, 9, 2, 2, 2, 1827, 1826, 3, 2, 2, 2, 1828, 1829, 3, 2, 2, 2, 1829, 1827, 3, 2, 2, 2, 1829, 1830, 3, 2, 2, 2, 1830, 1837, 3, 2, 2, 2, 1831, 1833, 7, 48, 2, 2, 1832, 1834, 9, 2, 2, 2, 1833, 1832, 3, 2, 2, 2, 1834, 1835, 3, 2, 2, 2, 1835, 1833, 3, 2, 2, 2, 1835, 1836, 3, 2, 2, 2, 1836, 1838, 3, 2, 2, 2, 1837, 1831, 3, 2, 2, 2, 1837, 1838, 3, 2, 2, 2, 1838, 278, 3, 2, 2, 2, 1839, 1841, 9, 10, 2, 2, 1840, 1839, 3, 2, 2, 2, 1841, 1842, 3, 2, 2, 2, 1842, 1840, 3, 2, 2, 2, 1842, 1843, 3, 2, 2, 2, 1843, 1844, 3, 2, 2, 2, 1844, 1845, 8, 140, 2, 2, 1845, 280, 3, 2, 2, 2, 1846, 1847, 7, 49, 2, 2, 1847, 1848, 7, 44, 2, 2, 1848, 1852, 3, 2, 2, 2, 1849, 1851, 11, 2, 2, 2, 1850, 1849, 3, 2, 2, 2, 1851, 1854, 3, 2, 2, 2, 1852, 1853, 3, 2, 2, 2, 1852, 1850, 3, 2, 2, 2, 1853, 1855, 3, 2, 2, 2, 1854, 1852, 3, 2, 2, 2, 1855, 1856, 7, 44, 2, 2, 1856, 1857, 7, 49, 2, 2, 1857, 1858, 3, 2, 2, 2, 1858, 1859, 8, 141, 3, 2, 1859, 282, 3, 2, 2, 2, 1860, 1861, 7, 49, 2, 2, 1861, 1862, 7, 49, 2, 2, 1862, 1866, 3, 2, 2, 2, 1863, 1865, 10, 11, 2, 2, 1864, 1863, 3, 2, 2, 2, 1865, 1868, 3, 2, 2, 2, 1866, 1864, 3, 2, 2, 2, 1866, 1867, 3, 2, 2, 2, 1867, 1869, 3, 2, 2, 2, 1868, 1866, 3, 2, 2, 2, 1869, 1870, 8, 142, 3, 2, 1870, 284, 3, 2, 2, 2, 40, 2, 898, 1115, 1337, 1353, 1359, 1361, 1379, 1385, 1387, 1398, 1402, 1406, 1410, 1414, 1419, 1428, 1433, 1492, 1500, 1505, 1508, 1603, 1767, 1781, 1787, 1798, 1804, 1808, 1813, 1818, 1823, 1829, 1835, 1837, 1842, 1852, 1866, 4, 8, 2, 2, 2, 3, 2] \ No newline at end of file diff --git a/solidity_parser/solidity_antlr4/SolidityLexer.py b/solidity_parser/solidity_antlr4/SolidityLexer.py index 7c5a6b5..22ba59c 100644 --- a/solidity_parser/solidity_antlr4/SolidityLexer.py +++ b/solidity_parser/solidity_antlr4/SolidityLexer.py @@ -1,18 +1,15 @@ -# Generated from solidity-antlr4/Solidity.g4 by ANTLR 4.9.3 +# Generated from solidity-antlr4/Solidity.g4 by ANTLR 4.7.2 from antlr4 import * from io import StringIO +from typing.io import TextIO import sys -if sys.version_info[1] > 5: - from typing import TextIO -else: - from typing.io import TextIO def serializedATN(): with StringIO() as buf: buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\u0087") - buf.write("\u074e\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") + buf.write("\u074f\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") buf.write("\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r") buf.write("\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22\4\23") buf.write("\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30") @@ -34,36 +31,46 @@ def serializedATN(): buf.write("\t\u0087\4\u0088\t\u0088\4\u0089\t\u0089\4\u008a\t\u008a") buf.write("\4\u008b\t\u008b\4\u008c\t\u008c\4\u008d\t\u008d\4\u008e") buf.write("\t\u008e\3\2\3\2\3\2\3\2\3\2\3\2\3\2\3\3\3\3\3\4\3\4\3") - buf.write("\4\3\5\3\5\3\6\3\6\3\7\3\7\3\7\3\b\3\b\3\t\3\t\3\n\3\n") - buf.write("\3\n\3\13\3\13\3\f\3\f\3\f\3\r\3\r\3\r\3\r\3\r\3\r\3\r") - buf.write("\3\16\3\16\3\17\3\17\3\17\3\17\3\17\3\20\3\20\3\21\3\21") - buf.write("\3\22\3\22\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23") - buf.write("\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\25\3\25") - buf.write("\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\26\3\26\3\26") - buf.write("\3\26\3\26\3\26\3\26\3\26\3\27\3\27\3\27\3\30\3\30\3\31") - buf.write("\3\31\3\32\3\32\3\32\3\32\3\32\3\32\3\33\3\33\3\33\3\33") - buf.write("\3\33\3\33\3\34\3\34\3\34\3\34\3\35\3\35\3\35\3\35\3\35") - buf.write("\3\35\3\35\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3\36") - buf.write("\3\37\3\37\3\37\3\37\3\37\3\37\3\37\3\37\3\37\3 \3 \3") - buf.write(" \3 \3 \3 \3 \3 \3!\3!\3!\3!\3!\3!\3\"\3\"\3\"\3\"\3\"") - buf.write("\3#\3#\3$\3$\3%\3%\3%\3%\3%\3%\3%\3%\3&\3&\3\'\3\'\3\'") - buf.write("\3\'\3\'\3\'\3\'\3\'\3(\3(\3(\3)\3)\3)\3)\3)\3)\3)\3*") - buf.write("\3*\3*\3*\3*\3*\3*\3*\3+\3+\3+\3+\3+\3+\3+\3+\3+\3,\3") - buf.write(",\3,\3-\3-\3-\3-\3-\3.\3.\3.\3.\3/\3/\3/\3/\3/\3/\3\60") - buf.write("\3\60\3\60\3\60\3\60\3\60\3\61\3\61\3\61\3\61\3\61\3\61") - buf.write("\3\61\3\61\3\61\3\61\3\62\3\62\3\62\3\62\3\62\3\62\3\62") - buf.write("\3\62\3\62\3\63\3\63\3\63\3\64\3\64\3\64\3\64\3\64\3\64") - buf.write("\3\64\3\65\3\65\3\65\3\65\3\65\3\65\3\66\3\66\3\66\3\66") - buf.write("\3\66\3\67\3\67\3\67\3\67\3\67\3\67\3\67\38\38\38\38\3") - buf.write("9\39\39\39\39\3:\3:\3:\3:\3:\3:\3:\3;\3;\3;\3;\3;\3<\3") - buf.write("<\3<\3=\3=\3=\3>\3>\3>\3>\3?\3?\3@\3@\3A\3A\3B\3B\3B\3") - buf.write("B\3B\3B\3C\3C\3C\3C\3C\3C\3C\3D\3D\3E\3E\3E\3F\3F\3G\3") - buf.write("G\3H\3H\3H\3I\3I\3I\3J\3J\3K\3K\3L\3L\3L\3M\3M\3M\3N\3") - buf.write("N\3N\3O\3O\3P\3P\3P\3Q\3Q\3Q\3R\3R\3R\3S\3S\3S\3S\3T\3") + buf.write("\5\3\5\3\5\3\6\3\6\3\7\3\7\3\b\3\b\3\b\3\t\3\t\3\n\3\n") + buf.write("\3\13\3\13\3\13\3\f\3\f\3\r\3\r\3\r\3\16\3\16\3\16\3\16") + buf.write("\3\16\3\16\3\16\3\17\3\17\3\17\3\17\3\17\3\20\3\20\3\21") + buf.write("\3\21\3\22\3\22\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23") + buf.write("\3\23\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\25") + buf.write("\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\26\3\26") + buf.write("\3\26\3\26\3\26\3\26\3\26\3\26\3\27\3\27\3\27\3\30\3\30") + buf.write("\3\31\3\31\3\32\3\32\3\32\3\32\3\32\3\32\3\33\3\33\3\33") + buf.write("\3\33\3\33\3\33\3\34\3\34\3\34\3\34\3\35\3\35\3\36\3\36") + buf.write("\3\37\3\37\3 \3 \3!\3!\3\"\3\"\3#\3#\3#\3$\3$\3$\3%\3") + buf.write("%\3%\3%\3%\3%\3%\3&\3&\3&\3&\3&\3&\3&\3&\3&\3\'\3\'\3") + buf.write("\'\3\'\3\'\3\'\3\'\3\'\3\'\3(\3(\3(\3(\3(\3(\3(\3(\3)") + buf.write("\3)\3)\3)\3)\3)\3*\3*\3*\3*\3*\3+\3+\3,\3,\3-\3-\3-\3") + buf.write("-\3-\3-\3-\3-\3.\3.\3/\3/\3/\3/\3/\3/\3/\3/\3\60\3\60") + buf.write("\3\60\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\62\3\62\3\62") + buf.write("\3\62\3\62\3\62\3\62\3\62\3\63\3\63\3\63\3\63\3\63\3\63") + buf.write("\3\63\3\63\3\63\3\64\3\64\3\64\3\65\3\65\3\65\3\65\3\65") + buf.write("\3\66\3\66\3\66\3\66\3\67\3\67\3\67\3\67\3\67\3\67\38") + buf.write("\38\38\38\38\38\39\39\39\39\39\39\39\39\39\39\3:\3:\3") + buf.write(":\3:\3:\3:\3:\3:\3:\3;\3;\3;\3<\3<\3<\3<\3<\3<\3<\3=\3") + buf.write("=\3=\3=\3=\3=\3>\3>\3>\3>\3>\3?\3?\3?\3?\3?\3?\3?\3@\3") + buf.write("@\3@\3@\3A\3A\3A\3A\3A\3B\3B\3B\3B\3B\3B\3B\3C\3C\3C\3") + buf.write("C\3C\3D\3D\3D\3E\3E\3E\3F\3F\3F\3F\3G\3G\3H\3H\3H\3H\3") + buf.write("H\3H\3H\3I\3I\3J\3J\3J\3K\3K\3K\3L\3L\3L\3M\3M\3M\3N\3") + buf.write("N\3O\3O\3O\3P\3P\3P\3Q\3Q\3Q\3R\3R\3R\3R\3S\3S\3S\3S\3") buf.write("T\3T\3T\3U\3U\3U\3V\3V\3V\3W\3W\3W\3X\3X\3X\3Y\3Y\3Y\3") - buf.write("Z\3Z\3Z\3Z\3[\3[\3[\3\\\3\\\3\\\3]\3]\3]\3]\3]\3]\3]\3") - buf.write("^\3^\3^\3^\3^\3_\3_\3_\3_\3_\3_\3_\3_\3`\3`\3`\3a\3a\3") - buf.write("a\3a\3a\3a\3a\3a\3a\3b\3b\3b\3b\3b\3b\3b\3b\3b\3c\3c\3") + buf.write("Y\3Z\3Z\3Z\3[\3[\3[\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3]\3]") + buf.write("\3]\3]\3]\3^\3^\3^\3^\3^\3^\3^\3^\3_\3_\3_\3`\3`\3`\3") + buf.write("`\3`\3`\3`\3`\3`\3a\3a\3a\3a\3a\3a\3a\3a\3a\3b\3b\3b\3") + buf.write("b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3") + buf.write("b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3") + buf.write("b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3") + buf.write("b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3") + buf.write("b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3") + buf.write("b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3") + buf.write("b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3") + buf.write("b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3") + buf.write("b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3") + buf.write("b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\3b\5b\u0383") + buf.write("\nb\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3") buf.write("c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3") buf.write("c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3") buf.write("c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3") @@ -73,8 +80,9 @@ def serializedATN(): buf.write("c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3") buf.write("c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3") buf.write("c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3") - buf.write("c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\5") - buf.write("c\u0389\nc\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3") + buf.write("c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3") + buf.write("c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3c\3") + buf.write("c\5c\u045c\nc\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3") buf.write("d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3") buf.write("d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3") buf.write("d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3") @@ -86,777 +94,766 @@ def serializedATN(): buf.write("d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3") buf.write("d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3") buf.write("d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3") - buf.write("d\3d\3d\5d\u0462\nd\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3") - buf.write("e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3") - buf.write("e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3") - buf.write("e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3") - buf.write("e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3") - buf.write("e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3") - buf.write("e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3") - buf.write("e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3") - buf.write("e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3") - buf.write("e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3") - buf.write("e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3") - buf.write("e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3") - buf.write("e\3e\3e\3e\3e\3e\3e\3e\3e\3e\3e\5e\u0540\ne\3f\3f\3f\3") - buf.write("f\3f\3f\3f\3f\3f\3f\3f\3f\6f\u054e\nf\rf\16f\u054f\3f") - buf.write("\3f\6f\u0554\nf\rf\16f\u0555\5f\u0558\nf\3g\3g\3g\3g\3") - buf.write("g\3g\3g\3g\3g\3g\3g\3g\3g\3g\6g\u0568\ng\rg\16g\u0569") - buf.write("\3g\3g\6g\u056e\ng\rg\16g\u056f\5g\u0572\ng\3h\3h\3h\3") - buf.write("h\3h\3h\3h\3h\3h\5h\u057d\nh\3i\3i\5i\u0581\ni\3i\3i\5") - buf.write("i\u0585\ni\3i\3i\5i\u0589\ni\3j\3j\5j\u058d\nj\3j\7j\u0590") - buf.write("\nj\fj\16j\u0593\13j\3k\3k\3k\3k\3l\3l\5l\u059b\nl\3l") - buf.write("\7l\u059e\nl\fl\16l\u05a1\13l\3m\3m\3m\3m\3m\3m\3m\3m") - buf.write("\3m\3m\3m\3m\3m\3m\3m\3m\3m\3m\3m\3m\3m\3m\3m\3m\3m\3") - buf.write("m\3m\3m\3m\3m\3m\3m\3m\3m\3m\3m\3m\3m\3m\3m\3m\3m\3m\3") - buf.write("m\3m\3m\3m\3m\3m\3m\3m\3m\3m\3m\3m\3m\5m\u05db\nm\3n\3") - buf.write("n\3n\3n\3n\3n\5n\u05e3\nn\3n\3n\3n\5n\u05e8\nn\3n\5n\u05eb") - buf.write("\nn\3o\3o\3o\3p\3p\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3") - buf.write("q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3") - buf.write("q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3") - buf.write("q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3") - buf.write("q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3") - buf.write("q\3q\3q\3q\3q\5q\u064a\nq\3r\3r\3r\3r\3r\3r\3r\3r\3r\3") - buf.write("r\3s\3s\3s\3s\3s\3s\3t\3t\3t\3t\3t\3t\3t\3t\3t\3u\3u\3") - buf.write("u\3u\3u\3u\3u\3u\3u\3u\3v\3v\3v\3v\3v\3v\3v\3v\3v\3w\3") - buf.write("w\3w\3w\3w\3w\3x\3x\3x\3x\3x\3x\3x\3x\3x\3y\3y\3y\3y\3") - buf.write("y\3y\3y\3y\3z\3z\3z\3z\3z\3z\3z\3z\3z\3{\3{\3{\3{\3{\3") - buf.write("{\3{\3{\3|\3|\3|\3|\3|\3|\3|\3|\3}\3}\3}\3}\3}\3}\3}\3") - buf.write("~\3~\3~\3~\3~\3~\3~\3~\3\177\3\177\3\177\3\177\3\177\3") - buf.write("\u0080\3\u0080\3\u0080\3\u0080\3\u0080\3\u0081\3\u0081") - buf.write("\3\u0081\3\u0081\3\u0081\3\u0082\3\u0082\3\u0082\3\u0082") + buf.write("d\3d\3d\3d\3d\3d\3d\3d\3d\5d\u053a\nd\3e\3e\3e\3e\3e\3") + buf.write("e\3e\3e\3e\3e\3e\3e\6e\u0548\ne\re\16e\u0549\3e\3e\6e") + buf.write("\u054e\ne\re\16e\u054f\5e\u0552\ne\3f\3f\3f\3f\3f\3f\3") + buf.write("f\3f\3f\3f\3f\3f\3f\3f\6f\u0562\nf\rf\16f\u0563\3f\3f") + buf.write("\6f\u0568\nf\rf\16f\u0569\5f\u056c\nf\3g\3g\3g\3g\3g\3") + buf.write("g\3g\3g\3g\5g\u0577\ng\3h\3h\5h\u057b\nh\3h\3h\5h\u057f") + buf.write("\nh\3h\3h\5h\u0583\nh\3i\3i\5i\u0587\ni\3i\7i\u058a\n") + buf.write("i\fi\16i\u058d\13i\3j\3j\3j\3j\3k\3k\5k\u0595\nk\3k\7") + buf.write("k\u0598\nk\fk\16k\u059b\13k\3l\3l\3l\3l\3l\3l\3l\3l\3") + buf.write("l\3l\3l\3l\3l\3l\3l\3l\3l\3l\3l\3l\3l\3l\3l\3l\3l\3l\3") + buf.write("l\3l\3l\3l\3l\3l\3l\3l\3l\3l\3l\3l\3l\3l\3l\3l\3l\3l\3") + buf.write("l\3l\3l\3l\3l\3l\3l\3l\3l\3l\3l\3l\5l\u05d5\nl\3m\3m\3") + buf.write("m\3m\3m\3m\5m\u05dd\nm\3m\3m\3m\5m\u05e2\nm\3m\5m\u05e5") + buf.write("\nm\3n\3n\3n\3o\3o\3p\3p\3p\3p\3p\3p\3p\3p\3p\3p\3p\3") + buf.write("p\3p\3p\3p\3p\3p\3p\3p\3p\3p\3p\3p\3p\3p\3p\3p\3p\3p\3") + buf.write("p\3p\3p\3p\3p\3p\3p\3p\3p\3p\3p\3p\3p\3p\3p\3p\3p\3p\3") + buf.write("p\3p\3p\3p\3p\3p\3p\3p\3p\3p\3p\3p\3p\3p\3p\3p\3p\3p\3") + buf.write("p\3p\3p\3p\3p\3p\3p\3p\3p\3p\3p\3p\3p\3p\3p\3p\3p\3p\3") + buf.write("p\3p\3p\3p\3p\5p\u0644\np\3q\3q\3q\3q\3q\3q\3q\3q\3q\3") + buf.write("q\3r\3r\3r\3r\3r\3r\3s\3s\3s\3s\3s\3s\3s\3s\3s\3t\3t\3") + buf.write("t\3t\3t\3t\3t\3t\3t\3t\3u\3u\3u\3u\3u\3u\3u\3u\3u\3v\3") + buf.write("v\3v\3v\3v\3v\3w\3w\3w\3w\3w\3w\3w\3w\3w\3x\3x\3x\3x\3") + buf.write("x\3x\3x\3x\3y\3y\3y\3y\3y\3y\3y\3y\3y\3z\3z\3z\3z\3z\3") + buf.write("z\3z\3z\3{\3{\3{\3{\3{\3{\3{\3{\3|\3|\3|\3|\3|\3|\3|\3") + buf.write("}\3}\3}\3}\3}\3}\3}\3}\3~\3~\3~\3~\3~\3\177\3\177\3\177") + buf.write("\3\177\3\177\3\u0080\3\u0080\3\u0080\3\u0080\3\u0080\3") + buf.write("\u0081\3\u0081\3\u0081\3\u0081\3\u0081\3\u0081\3\u0081") buf.write("\3\u0082\3\u0082\3\u0082\3\u0082\3\u0082\3\u0082\3\u0082") - buf.write("\3\u0082\3\u0083\3\u0083\3\u0083\3\u0083\3\u0083\3\u0083") - buf.write("\3\u0083\3\u0083\3\u0083\3\u0084\3\u0084\3\u0084\3\u0084") - buf.write("\3\u0084\3\u0084\3\u0084\3\u0084\3\u0085\3\u0085\7\u0085") - buf.write("\u06e5\n\u0085\f\u0085\16\u0085\u06e8\13\u0085\3\u0086") - buf.write("\3\u0086\3\u0087\3\u0087\3\u0088\3\u0088\3\u0088\3\u0088") - buf.write("\3\u0088\3\u0088\3\u0088\5\u0088\u06f5\n\u0088\3\u0088") - buf.write("\3\u0088\7\u0088\u06f9\n\u0088\f\u0088\16\u0088\u06fc") - buf.write("\13\u0088\3\u0088\3\u0088\3\u0088\3\u0088\3\u0088\3\u0088") - buf.write("\3\u0088\3\u0088\5\u0088\u0706\n\u0088\3\u0088\3\u0088") - buf.write("\7\u0088\u070a\n\u0088\f\u0088\16\u0088\u070d\13\u0088") - buf.write("\3\u0088\5\u0088\u0710\n\u0088\3\u0089\3\u0089\3\u0089") - buf.write("\5\u0089\u0715\n\u0089\3\u008a\3\u008a\3\u008a\5\u008a") - buf.write("\u071a\n\u008a\3\u008b\6\u008b\u071d\n\u008b\r\u008b\16") - buf.write("\u008b\u071e\3\u008b\3\u008b\6\u008b\u0723\n\u008b\r\u008b") - buf.write("\16\u008b\u0724\3\u008b\3\u008b\6\u008b\u0729\n\u008b") - buf.write("\r\u008b\16\u008b\u072a\5\u008b\u072d\n\u008b\3\u008c") - buf.write("\6\u008c\u0730\n\u008c\r\u008c\16\u008c\u0731\3\u008c") - buf.write("\3\u008c\3\u008d\3\u008d\3\u008d\3\u008d\7\u008d\u073a") - buf.write("\n\u008d\f\u008d\16\u008d\u073d\13\u008d\3\u008d\3\u008d") - buf.write("\3\u008d\3\u008d\3\u008d\3\u008e\3\u008e\3\u008e\3\u008e") - buf.write("\7\u008e\u0748\n\u008e\f\u008e\16\u008e\u074b\13\u008e") - buf.write("\3\u008e\3\u008e\3\u073b\2\u008f\3\3\5\4\7\5\t\6\13\7") - buf.write("\r\b\17\t\21\n\23\13\25\f\27\r\31\16\33\17\35\20\37\21") - buf.write("!\22#\23%\24\'\25)\26+\27-\30/\31\61\32\63\33\65\34\67") - buf.write("\359\36;\37= ?!A\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61") - buf.write("a\62c\63e\64g\65i\66k\67m8o9q:s;u{?}@\177A\u0081") - buf.write("B\u0083C\u0085D\u0087E\u0089F\u008bG\u008dH\u008fI\u0091") - buf.write("J\u0093K\u0095L\u0097M\u0099N\u009bO\u009dP\u009fQ\u00a1") - buf.write("R\u00a3S\u00a5T\u00a7U\u00a9V\u00abW\u00adX\u00afY\u00b1") - buf.write("Z\u00b3[\u00b5\\\u00b7]\u00b9^\u00bb_\u00bd`\u00bfa\u00c1") - buf.write("b\u00c3c\u00c5d\u00c7e\u00c9f\u00cbg\u00cdh\u00cfi\u00d1") - buf.write("j\u00d3\2\u00d5k\u00d7\2\u00d9l\u00dbm\u00dd\2\u00df\2") - buf.write("\u00e1n\u00e3o\u00e5p\u00e7q\u00e9r\u00ebs\u00edt\u00ef") - buf.write("u\u00f1v\u00f3w\u00f5x\u00f7y\u00f9z\u00fb{\u00fd|\u00ff") - buf.write("}\u0101~\u0103\177\u0105\u0080\u0107\u0081\u0109\u0082") - buf.write("\u010b\2\u010d\2\u010f\u0083\u0111\2\u0113\2\u0115\u0084") - buf.write("\u0117\u0085\u0119\u0086\u011b\u0087\3\2\f\3\2\62;\4\2") - buf.write("GGgg\4\2ZZzz\5\2\62;CHch\6\2&&C\\aac|\7\2&&\62;C\\aac") - buf.write("|\6\2\f\f\17\17$$^^\6\2\f\f\17\17))^^\5\2\13\f\16\17\"") - buf.write("\"\4\2\f\f\17\17\2\u07df\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3") - buf.write("\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2") - buf.write("\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2") - buf.write("\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2") - buf.write("!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2") - buf.write("\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2\63\3") - buf.write("\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2\2") - buf.write("\2=\3\2\2\2\2?\3\2\2\2\2A\3\2\2\2\2C\3\2\2\2\2E\3\2\2") - buf.write("\2\2G\3\2\2\2\2I\3\2\2\2\2K\3\2\2\2\2M\3\2\2\2\2O\3\2") - buf.write("\2\2\2Q\3\2\2\2\2S\3\2\2\2\2U\3\2\2\2\2W\3\2\2\2\2Y\3") - buf.write("\2\2\2\2[\3\2\2\2\2]\3\2\2\2\2_\3\2\2\2\2a\3\2\2\2\2c") - buf.write("\3\2\2\2\2e\3\2\2\2\2g\3\2\2\2\2i\3\2\2\2\2k\3\2\2\2\2") - buf.write("m\3\2\2\2\2o\3\2\2\2\2q\3\2\2\2\2s\3\2\2\2\2u\3\2\2\2") - buf.write("\2w\3\2\2\2\2y\3\2\2\2\2{\3\2\2\2\2}\3\2\2\2\2\177\3\2") - buf.write("\2\2\2\u0081\3\2\2\2\2\u0083\3\2\2\2\2\u0085\3\2\2\2\2") - buf.write("\u0087\3\2\2\2\2\u0089\3\2\2\2\2\u008b\3\2\2\2\2\u008d") - buf.write("\3\2\2\2\2\u008f\3\2\2\2\2\u0091\3\2\2\2\2\u0093\3\2\2") - buf.write("\2\2\u0095\3\2\2\2\2\u0097\3\2\2\2\2\u0099\3\2\2\2\2\u009b") - buf.write("\3\2\2\2\2\u009d\3\2\2\2\2\u009f\3\2\2\2\2\u00a1\3\2\2") - buf.write("\2\2\u00a3\3\2\2\2\2\u00a5\3\2\2\2\2\u00a7\3\2\2\2\2\u00a9") - buf.write("\3\2\2\2\2\u00ab\3\2\2\2\2\u00ad\3\2\2\2\2\u00af\3\2\2") - buf.write("\2\2\u00b1\3\2\2\2\2\u00b3\3\2\2\2\2\u00b5\3\2\2\2\2\u00b7") - buf.write("\3\2\2\2\2\u00b9\3\2\2\2\2\u00bb\3\2\2\2\2\u00bd\3\2\2") - buf.write("\2\2\u00bf\3\2\2\2\2\u00c1\3\2\2\2\2\u00c3\3\2\2\2\2\u00c5") - buf.write("\3\2\2\2\2\u00c7\3\2\2\2\2\u00c9\3\2\2\2\2\u00cb\3\2\2") - buf.write("\2\2\u00cd\3\2\2\2\2\u00cf\3\2\2\2\2\u00d1\3\2\2\2\2\u00d5") - buf.write("\3\2\2\2\2\u00d9\3\2\2\2\2\u00db\3\2\2\2\2\u00e1\3\2\2") - buf.write("\2\2\u00e3\3\2\2\2\2\u00e5\3\2\2\2\2\u00e7\3\2\2\2\2\u00e9") - buf.write("\3\2\2\2\2\u00eb\3\2\2\2\2\u00ed\3\2\2\2\2\u00ef\3\2\2") - buf.write("\2\2\u00f1\3\2\2\2\2\u00f3\3\2\2\2\2\u00f5\3\2\2\2\2\u00f7") - buf.write("\3\2\2\2\2\u00f9\3\2\2\2\2\u00fb\3\2\2\2\2\u00fd\3\2\2") - buf.write("\2\2\u00ff\3\2\2\2\2\u0101\3\2\2\2\2\u0103\3\2\2\2\2\u0105") - buf.write("\3\2\2\2\2\u0107\3\2\2\2\2\u0109\3\2\2\2\2\u010f\3\2\2") - buf.write("\2\2\u0115\3\2\2\2\2\u0117\3\2\2\2\2\u0119\3\2\2\2\2\u011b") - buf.write("\3\2\2\2\3\u011d\3\2\2\2\5\u0124\3\2\2\2\7\u0126\3\2\2") - buf.write("\2\t\u0129\3\2\2\2\13\u012b\3\2\2\2\r\u012d\3\2\2\2\17") - buf.write("\u0130\3\2\2\2\21\u0132\3\2\2\2\23\u0134\3\2\2\2\25\u0137") - buf.write("\3\2\2\2\27\u0139\3\2\2\2\31\u013c\3\2\2\2\33\u0143\3") - buf.write("\2\2\2\35\u0145\3\2\2\2\37\u014a\3\2\2\2!\u014c\3\2\2") - buf.write("\2#\u014e\3\2\2\2%\u0150\3\2\2\2\'\u0159\3\2\2\2)\u0162") - buf.write("\3\2\2\2+\u016c\3\2\2\2-\u0174\3\2\2\2/\u0177\3\2\2\2") - buf.write("\61\u0179\3\2\2\2\63\u017b\3\2\2\2\65\u0181\3\2\2\2\67") - buf.write("\u0187\3\2\2\29\u018b\3\2\2\2;\u0192\3\2\2\2=\u019b\3") - buf.write("\2\2\2?\u01a4\3\2\2\2A\u01ac\3\2\2\2C\u01b2\3\2\2\2E\u01b7") - buf.write("\3\2\2\2G\u01b9\3\2\2\2I\u01bb\3\2\2\2K\u01c3\3\2\2\2") - buf.write("M\u01c5\3\2\2\2O\u01cd\3\2\2\2Q\u01d0\3\2\2\2S\u01d7\3") - buf.write("\2\2\2U\u01df\3\2\2\2W\u01e8\3\2\2\2Y\u01eb\3\2\2\2[\u01f0") - buf.write("\3\2\2\2]\u01f4\3\2\2\2_\u01fa\3\2\2\2a\u0200\3\2\2\2") - buf.write("c\u020a\3\2\2\2e\u0213\3\2\2\2g\u0216\3\2\2\2i\u021d\3") - buf.write("\2\2\2k\u0223\3\2\2\2m\u0228\3\2\2\2o\u022f\3\2\2\2q\u0233") - buf.write("\3\2\2\2s\u0238\3\2\2\2u\u023f\3\2\2\2w\u0244\3\2\2\2") - buf.write("y\u0247\3\2\2\2{\u024a\3\2\2\2}\u024e\3\2\2\2\177\u0250") - buf.write("\3\2\2\2\u0081\u0252\3\2\2\2\u0083\u0254\3\2\2\2\u0085") - buf.write("\u025a\3\2\2\2\u0087\u0261\3\2\2\2\u0089\u0263\3\2\2\2") - buf.write("\u008b\u0266\3\2\2\2\u008d\u0268\3\2\2\2\u008f\u026a\3") - buf.write("\2\2\2\u0091\u026d\3\2\2\2\u0093\u0270\3\2\2\2\u0095\u0272") - buf.write("\3\2\2\2\u0097\u0274\3\2\2\2\u0099\u0277\3\2\2\2\u009b") - buf.write("\u027a\3\2\2\2\u009d\u027d\3\2\2\2\u009f\u027f\3\2\2\2") - buf.write("\u00a1\u0282\3\2\2\2\u00a3\u0285\3\2\2\2\u00a5\u0288\3") - buf.write("\2\2\2\u00a7\u028c\3\2\2\2\u00a9\u0290\3\2\2\2\u00ab\u0293") - buf.write("\3\2\2\2\u00ad\u0296\3\2\2\2\u00af\u0299\3\2\2\2\u00b1") - buf.write("\u029c\3\2\2\2\u00b3\u029f\3\2\2\2\u00b5\u02a3\3\2\2\2") - buf.write("\u00b7\u02a6\3\2\2\2\u00b9\u02a9\3\2\2\2\u00bb\u02b0\3") - buf.write("\2\2\2\u00bd\u02b5\3\2\2\2\u00bf\u02bd\3\2\2\2\u00c1\u02c0") - buf.write("\3\2\2\2\u00c3\u02c9\3\2\2\2\u00c5\u0388\3\2\2\2\u00c7") - buf.write("\u0461\3\2\2\2\u00c9\u053f\3\2\2\2\u00cb\u0557\3\2\2\2") - buf.write("\u00cd\u0571\3\2\2\2\u00cf\u057c\3\2\2\2\u00d1\u0584\3") - buf.write("\2\2\2\u00d3\u058a\3\2\2\2\u00d5\u0594\3\2\2\2\u00d7\u0598") - buf.write("\3\2\2\2\u00d9\u05da\3\2\2\2\u00db\u05dc\3\2\2\2\u00dd") - buf.write("\u05ec\3\2\2\2\u00df\u05ef\3\2\2\2\u00e1\u0649\3\2\2\2") - buf.write("\u00e3\u064b\3\2\2\2\u00e5\u0655\3\2\2\2\u00e7\u065b\3") - buf.write("\2\2\2\u00e9\u0664\3\2\2\2\u00eb\u066e\3\2\2\2\u00ed\u0677") - buf.write("\3\2\2\2\u00ef\u067d\3\2\2\2\u00f1\u0686\3\2\2\2\u00f3") - buf.write("\u068e\3\2\2\2\u00f5\u0697\3\2\2\2\u00f7\u069f\3\2\2\2") - buf.write("\u00f9\u06a7\3\2\2\2\u00fb\u06ae\3\2\2\2\u00fd\u06b6\3") - buf.write("\2\2\2\u00ff\u06bb\3\2\2\2\u0101\u06c0\3\2\2\2\u0103\u06c5") - buf.write("\3\2\2\2\u0105\u06d1\3\2\2\2\u0107\u06da\3\2\2\2\u0109") - buf.write("\u06e2\3\2\2\2\u010b\u06e9\3\2\2\2\u010d\u06eb\3\2\2\2") - buf.write("\u010f\u070f\3\2\2\2\u0111\u0714\3\2\2\2\u0113\u0719\3") - buf.write("\2\2\2\u0115\u071c\3\2\2\2\u0117\u072f\3\2\2\2\u0119\u0735") - buf.write("\3\2\2\2\u011b\u0743\3\2\2\2\u011d\u011e\7r\2\2\u011e") - buf.write("\u011f\7t\2\2\u011f\u0120\7c\2\2\u0120\u0121\7i\2\2\u0121") - buf.write("\u0122\7o\2\2\u0122\u0123\7c\2\2\u0123\4\3\2\2\2\u0124") - buf.write("\u0125\7=\2\2\u0125\6\3\2\2\2\u0126\u0127\7~\2\2\u0127") - buf.write("\u0128\7~\2\2\u0128\b\3\2\2\2\u0129\u012a\7`\2\2\u012a") - buf.write("\n\3\2\2\2\u012b\u012c\7\u0080\2\2\u012c\f\3\2\2\2\u012d") - buf.write("\u012e\7@\2\2\u012e\u012f\7?\2\2\u012f\16\3\2\2\2\u0130") - buf.write("\u0131\7@\2\2\u0131\20\3\2\2\2\u0132\u0133\7>\2\2\u0133") - buf.write("\22\3\2\2\2\u0134\u0135\7>\2\2\u0135\u0136\7?\2\2\u0136") - buf.write("\24\3\2\2\2\u0137\u0138\7?\2\2\u0138\26\3\2\2\2\u0139") - buf.write("\u013a\7c\2\2\u013a\u013b\7u\2\2\u013b\30\3\2\2\2\u013c") - buf.write("\u013d\7k\2\2\u013d\u013e\7o\2\2\u013e\u013f\7r\2\2\u013f") - buf.write("\u0140\7q\2\2\u0140\u0141\7t\2\2\u0141\u0142\7v\2\2\u0142") - buf.write("\32\3\2\2\2\u0143\u0144\7,\2\2\u0144\34\3\2\2\2\u0145") - buf.write("\u0146\7h\2\2\u0146\u0147\7t\2\2\u0147\u0148\7q\2\2\u0148") - buf.write("\u0149\7o\2\2\u0149\36\3\2\2\2\u014a\u014b\7}\2\2\u014b") - buf.write(" \3\2\2\2\u014c\u014d\7.\2\2\u014d\"\3\2\2\2\u014e\u014f") - buf.write("\7\177\2\2\u014f$\3\2\2\2\u0150\u0151\7c\2\2\u0151\u0152") - buf.write("\7d\2\2\u0152\u0153\7u\2\2\u0153\u0154\7v\2\2\u0154\u0155") - buf.write("\7t\2\2\u0155\u0156\7c\2\2\u0156\u0157\7e\2\2\u0157\u0158") - buf.write("\7v\2\2\u0158&\3\2\2\2\u0159\u015a\7e\2\2\u015a\u015b") - buf.write("\7q\2\2\u015b\u015c\7p\2\2\u015c\u015d\7v\2\2\u015d\u015e") - buf.write("\7t\2\2\u015e\u015f\7c\2\2\u015f\u0160\7e\2\2\u0160\u0161") - buf.write("\7v\2\2\u0161(\3\2\2\2\u0162\u0163\7k\2\2\u0163\u0164") - buf.write("\7p\2\2\u0164\u0165\7v\2\2\u0165\u0166\7g\2\2\u0166\u0167") - buf.write("\7t\2\2\u0167\u0168\7h\2\2\u0168\u0169\7c\2\2\u0169\u016a") - buf.write("\7e\2\2\u016a\u016b\7g\2\2\u016b*\3\2\2\2\u016c\u016d") - buf.write("\7n\2\2\u016d\u016e\7k\2\2\u016e\u016f\7d\2\2\u016f\u0170") - buf.write("\7t\2\2\u0170\u0171\7c\2\2\u0171\u0172\7t\2\2\u0172\u0173") - buf.write("\7{\2\2\u0173,\3\2\2\2\u0174\u0175\7k\2\2\u0175\u0176") - buf.write("\7u\2\2\u0176.\3\2\2\2\u0177\u0178\7*\2\2\u0178\60\3\2") - buf.write("\2\2\u0179\u017a\7+\2\2\u017a\62\3\2\2\2\u017b\u017c\7") - buf.write("g\2\2\u017c\u017d\7t\2\2\u017d\u017e\7t\2\2\u017e\u017f") - buf.write("\7q\2\2\u017f\u0180\7t\2\2\u0180\64\3\2\2\2\u0181\u0182") - buf.write("\7w\2\2\u0182\u0183\7u\2\2\u0183\u0184\7k\2\2\u0184\u0185") - buf.write("\7p\2\2\u0185\u0186\7i\2\2\u0186\66\3\2\2\2\u0187\u0188") - buf.write("\7h\2\2\u0188\u0189\7q\2\2\u0189\u018a\7t\2\2\u018a8\3") - buf.write("\2\2\2\u018b\u018c\7u\2\2\u018c\u018d\7v\2\2\u018d\u018e") - buf.write("\7t\2\2\u018e\u018f\7w\2\2\u018f\u0190\7e\2\2\u0190\u0191") - buf.write("\7v\2\2\u0191:\3\2\2\2\u0192\u0193\7o\2\2\u0193\u0194") - buf.write("\7q\2\2\u0194\u0195\7f\2\2\u0195\u0196\7k\2\2\u0196\u0197") - buf.write("\7h\2\2\u0197\u0198\7k\2\2\u0198\u0199\7g\2\2\u0199\u019a") - buf.write("\7t\2\2\u019a<\3\2\2\2\u019b\u019c\7h\2\2\u019c\u019d") - buf.write("\7w\2\2\u019d\u019e\7p\2\2\u019e\u019f\7e\2\2\u019f\u01a0") - buf.write("\7v\2\2\u01a0\u01a1\7k\2\2\u01a1\u01a2\7q\2\2\u01a2\u01a3") - buf.write("\7p\2\2\u01a3>\3\2\2\2\u01a4\u01a5\7t\2\2\u01a5\u01a6") - buf.write("\7g\2\2\u01a6\u01a7\7v\2\2\u01a7\u01a8\7w\2\2\u01a8\u01a9") - buf.write("\7t\2\2\u01a9\u01aa\7p\2\2\u01aa\u01ab\7u\2\2\u01ab@\3") - buf.write("\2\2\2\u01ac\u01ad\7g\2\2\u01ad\u01ae\7x\2\2\u01ae\u01af") - buf.write("\7g\2\2\u01af\u01b0\7p\2\2\u01b0\u01b1\7v\2\2\u01b1B\3") - buf.write("\2\2\2\u01b2\u01b3\7g\2\2\u01b3\u01b4\7p\2\2\u01b4\u01b5") - buf.write("\7w\2\2\u01b5\u01b6\7o\2\2\u01b6D\3\2\2\2\u01b7\u01b8") - buf.write("\7]\2\2\u01b8F\3\2\2\2\u01b9\u01ba\7_\2\2\u01baH\3\2\2") - buf.write("\2\u01bb\u01bc\7c\2\2\u01bc\u01bd\7f\2\2\u01bd\u01be\7") - buf.write("f\2\2\u01be\u01bf\7t\2\2\u01bf\u01c0\7g\2\2\u01c0\u01c1") - buf.write("\7u\2\2\u01c1\u01c2\7u\2\2\u01c2J\3\2\2\2\u01c3\u01c4") - buf.write("\7\60\2\2\u01c4L\3\2\2\2\u01c5\u01c6\7o\2\2\u01c6\u01c7") - buf.write("\7c\2\2\u01c7\u01c8\7r\2\2\u01c8\u01c9\7r\2\2\u01c9\u01ca") - buf.write("\7k\2\2\u01ca\u01cb\7p\2\2\u01cb\u01cc\7i\2\2\u01ccN\3") - buf.write("\2\2\2\u01cd\u01ce\7?\2\2\u01ce\u01cf\7@\2\2\u01cfP\3") - buf.write("\2\2\2\u01d0\u01d1\7o\2\2\u01d1\u01d2\7g\2\2\u01d2\u01d3") - buf.write("\7o\2\2\u01d3\u01d4\7q\2\2\u01d4\u01d5\7t\2\2\u01d5\u01d6") - buf.write("\7{\2\2\u01d6R\3\2\2\2\u01d7\u01d8\7u\2\2\u01d8\u01d9") - buf.write("\7v\2\2\u01d9\u01da\7q\2\2\u01da\u01db\7t\2\2\u01db\u01dc") - buf.write("\7c\2\2\u01dc\u01dd\7i\2\2\u01dd\u01de\7g\2\2\u01deT\3") - buf.write("\2\2\2\u01df\u01e0\7e\2\2\u01e0\u01e1\7c\2\2\u01e1\u01e2") - buf.write("\7n\2\2\u01e2\u01e3\7n\2\2\u01e3\u01e4\7f\2\2\u01e4\u01e5") - buf.write("\7c\2\2\u01e5\u01e6\7v\2\2\u01e6\u01e7\7c\2\2\u01e7V\3") - buf.write("\2\2\2\u01e8\u01e9\7k\2\2\u01e9\u01ea\7h\2\2\u01eaX\3") - buf.write("\2\2\2\u01eb\u01ec\7g\2\2\u01ec\u01ed\7n\2\2\u01ed\u01ee") - buf.write("\7u\2\2\u01ee\u01ef\7g\2\2\u01efZ\3\2\2\2\u01f0\u01f1") - buf.write("\7v\2\2\u01f1\u01f2\7t\2\2\u01f2\u01f3\7{\2\2\u01f3\\") - buf.write("\3\2\2\2\u01f4\u01f5\7e\2\2\u01f5\u01f6\7c\2\2\u01f6\u01f7") - buf.write("\7v\2\2\u01f7\u01f8\7e\2\2\u01f8\u01f9\7j\2\2\u01f9^\3") - buf.write("\2\2\2\u01fa\u01fb\7y\2\2\u01fb\u01fc\7j\2\2\u01fc\u01fd") - buf.write("\7k\2\2\u01fd\u01fe\7n\2\2\u01fe\u01ff\7g\2\2\u01ff`\3") - buf.write("\2\2\2\u0200\u0201\7w\2\2\u0201\u0202\7p\2\2\u0202\u0203") - buf.write("\7e\2\2\u0203\u0204\7j\2\2\u0204\u0205\7g\2\2\u0205\u0206") - buf.write("\7e\2\2\u0206\u0207\7m\2\2\u0207\u0208\7g\2\2\u0208\u0209") - buf.write("\7f\2\2\u0209b\3\2\2\2\u020a\u020b\7c\2\2\u020b\u020c") - buf.write("\7u\2\2\u020c\u020d\7u\2\2\u020d\u020e\7g\2\2\u020e\u020f") - buf.write("\7o\2\2\u020f\u0210\7d\2\2\u0210\u0211\7n\2\2\u0211\u0212") - buf.write("\7{\2\2\u0212d\3\2\2\2\u0213\u0214\7f\2\2\u0214\u0215") - buf.write("\7q\2\2\u0215f\3\2\2\2\u0216\u0217\7t\2\2\u0217\u0218") - buf.write("\7g\2\2\u0218\u0219\7v\2\2\u0219\u021a\7w\2\2\u021a\u021b") - buf.write("\7t\2\2\u021b\u021c\7p\2\2\u021ch\3\2\2\2\u021d\u021e") - buf.write("\7v\2\2\u021e\u021f\7j\2\2\u021f\u0220\7t\2\2\u0220\u0221") - buf.write("\7q\2\2\u0221\u0222\7y\2\2\u0222j\3\2\2\2\u0223\u0224") - buf.write("\7g\2\2\u0224\u0225\7o\2\2\u0225\u0226\7k\2\2\u0226\u0227") - buf.write("\7v\2\2\u0227l\3\2\2\2\u0228\u0229\7t\2\2\u0229\u022a") - buf.write("\7g\2\2\u022a\u022b\7x\2\2\u022b\u022c\7g\2\2\u022c\u022d") - buf.write("\7t\2\2\u022d\u022e\7v\2\2\u022en\3\2\2\2\u022f\u0230") - buf.write("\7x\2\2\u0230\u0231\7c\2\2\u0231\u0232\7t\2\2\u0232p\3") - buf.write("\2\2\2\u0233\u0234\7d\2\2\u0234\u0235\7q\2\2\u0235\u0236") - buf.write("\7q\2\2\u0236\u0237\7n\2\2\u0237r\3\2\2\2\u0238\u0239") - buf.write("\7u\2\2\u0239\u023a\7v\2\2\u023a\u023b\7t\2\2\u023b\u023c") - buf.write("\7k\2\2\u023c\u023d\7p\2\2\u023d\u023e\7i\2\2\u023et\3") - buf.write("\2\2\2\u023f\u0240\7d\2\2\u0240\u0241\7{\2\2\u0241\u0242") - buf.write("\7v\2\2\u0242\u0243\7g\2\2\u0243v\3\2\2\2\u0244\u0245") - buf.write("\7-\2\2\u0245\u0246\7-\2\2\u0246x\3\2\2\2\u0247\u0248") - buf.write("\7/\2\2\u0248\u0249\7/\2\2\u0249z\3\2\2\2\u024a\u024b") - buf.write("\7p\2\2\u024b\u024c\7g\2\2\u024c\u024d\7y\2\2\u024d|\3") - buf.write("\2\2\2\u024e\u024f\7<\2\2\u024f~\3\2\2\2\u0250\u0251\7") - buf.write("-\2\2\u0251\u0080\3\2\2\2\u0252\u0253\7/\2\2\u0253\u0082") - buf.write("\3\2\2\2\u0254\u0255\7c\2\2\u0255\u0256\7h\2\2\u0256\u0257") - buf.write("\7v\2\2\u0257\u0258\7g\2\2\u0258\u0259\7t\2\2\u0259\u0084") - buf.write("\3\2\2\2\u025a\u025b\7f\2\2\u025b\u025c\7g\2\2\u025c\u025d") - buf.write("\7n\2\2\u025d\u025e\7g\2\2\u025e\u025f\7v\2\2\u025f\u0260") - buf.write("\7g\2\2\u0260\u0086\3\2\2\2\u0261\u0262\7#\2\2\u0262\u0088") - buf.write("\3\2\2\2\u0263\u0264\7,\2\2\u0264\u0265\7,\2\2\u0265\u008a") - buf.write("\3\2\2\2\u0266\u0267\7\61\2\2\u0267\u008c\3\2\2\2\u0268") - buf.write("\u0269\7\'\2\2\u0269\u008e\3\2\2\2\u026a\u026b\7>\2\2") - buf.write("\u026b\u026c\7>\2\2\u026c\u0090\3\2\2\2\u026d\u026e\7") - buf.write("@\2\2\u026e\u026f\7@\2\2\u026f\u0092\3\2\2\2\u0270\u0271") - buf.write("\7(\2\2\u0271\u0094\3\2\2\2\u0272\u0273\7~\2\2\u0273\u0096") - buf.write("\3\2\2\2\u0274\u0275\7?\2\2\u0275\u0276\7?\2\2\u0276\u0098") - buf.write("\3\2\2\2\u0277\u0278\7#\2\2\u0278\u0279\7?\2\2\u0279\u009a") - buf.write("\3\2\2\2\u027a\u027b\7(\2\2\u027b\u027c\7(\2\2\u027c\u009c") - buf.write("\3\2\2\2\u027d\u027e\7A\2\2\u027e\u009e\3\2\2\2\u027f") - buf.write("\u0280\7~\2\2\u0280\u0281\7?\2\2\u0281\u00a0\3\2\2\2\u0282") - buf.write("\u0283\7`\2\2\u0283\u0284\7?\2\2\u0284\u00a2\3\2\2\2\u0285") - buf.write("\u0286\7(\2\2\u0286\u0287\7?\2\2\u0287\u00a4\3\2\2\2\u0288") - buf.write("\u0289\7>\2\2\u0289\u028a\7>\2\2\u028a\u028b\7?\2\2\u028b") - buf.write("\u00a6\3\2\2\2\u028c\u028d\7@\2\2\u028d\u028e\7@\2\2\u028e") - buf.write("\u028f\7?\2\2\u028f\u00a8\3\2\2\2\u0290\u0291\7-\2\2\u0291") - buf.write("\u0292\7?\2\2\u0292\u00aa\3\2\2\2\u0293\u0294\7/\2\2\u0294") - buf.write("\u0295\7?\2\2\u0295\u00ac\3\2\2\2\u0296\u0297\7,\2\2\u0297") - buf.write("\u0298\7?\2\2\u0298\u00ae\3\2\2\2\u0299\u029a\7\61\2\2") - buf.write("\u029a\u029b\7?\2\2\u029b\u00b0\3\2\2\2\u029c\u029d\7") - buf.write("\'\2\2\u029d\u029e\7?\2\2\u029e\u00b2\3\2\2\2\u029f\u02a0") - buf.write("\7n\2\2\u02a0\u02a1\7g\2\2\u02a1\u02a2\7v\2\2\u02a2\u00b4") - buf.write("\3\2\2\2\u02a3\u02a4\7<\2\2\u02a4\u02a5\7?\2\2\u02a5\u00b6") - buf.write("\3\2\2\2\u02a6\u02a7\7?\2\2\u02a7\u02a8\7<\2\2\u02a8\u00b8") - buf.write("\3\2\2\2\u02a9\u02aa\7u\2\2\u02aa\u02ab\7y\2\2\u02ab\u02ac") - buf.write("\7k\2\2\u02ac\u02ad\7v\2\2\u02ad\u02ae\7e\2\2\u02ae\u02af") - buf.write("\7j\2\2\u02af\u00ba\3\2\2\2\u02b0\u02b1\7e\2\2\u02b1\u02b2") - buf.write("\7c\2\2\u02b2\u02b3\7u\2\2\u02b3\u02b4\7g\2\2\u02b4\u00bc") - buf.write("\3\2\2\2\u02b5\u02b6\7f\2\2\u02b6\u02b7\7g\2\2\u02b7\u02b8") - buf.write("\7h\2\2\u02b8\u02b9\7c\2\2\u02b9\u02ba\7w\2\2\u02ba\u02bb") - buf.write("\7n\2\2\u02bb\u02bc\7v\2\2\u02bc\u00be\3\2\2\2\u02bd\u02be") - buf.write("\7/\2\2\u02be\u02bf\7@\2\2\u02bf\u00c0\3\2\2\2\u02c0\u02c1") - buf.write("\7e\2\2\u02c1\u02c2\7c\2\2\u02c2\u02c3\7n\2\2\u02c3\u02c4") - buf.write("\7n\2\2\u02c4\u02c5\7d\2\2\u02c5\u02c6\7c\2\2\u02c6\u02c7") - buf.write("\7e\2\2\u02c7\u02c8\7m\2\2\u02c8\u00c2\3\2\2\2\u02c9\u02ca") - buf.write("\7q\2\2\u02ca\u02cb\7x\2\2\u02cb\u02cc\7g\2\2\u02cc\u02cd") - buf.write("\7t\2\2\u02cd\u02ce\7t\2\2\u02ce\u02cf\7k\2\2\u02cf\u02d0") - buf.write("\7f\2\2\u02d0\u02d1\7g\2\2\u02d1\u00c4\3\2\2\2\u02d2\u02d3") - buf.write("\7k\2\2\u02d3\u02d4\7p\2\2\u02d4\u0389\7v\2\2\u02d5\u02d6") - buf.write("\7k\2\2\u02d6\u02d7\7p\2\2\u02d7\u02d8\7v\2\2\u02d8\u0389") - buf.write("\7:\2\2\u02d9\u02da\7k\2\2\u02da\u02db\7p\2\2\u02db\u02dc") - buf.write("\7v\2\2\u02dc\u02dd\7\63\2\2\u02dd\u0389\78\2\2\u02de") - buf.write("\u02df\7k\2\2\u02df\u02e0\7p\2\2\u02e0\u02e1\7v\2\2\u02e1") - buf.write("\u02e2\7\64\2\2\u02e2\u0389\7\66\2\2\u02e3\u02e4\7k\2") - buf.write("\2\u02e4\u02e5\7p\2\2\u02e5\u02e6\7v\2\2\u02e6\u02e7\7") - buf.write("\65\2\2\u02e7\u0389\7\64\2\2\u02e8\u02e9\7k\2\2\u02e9") - buf.write("\u02ea\7p\2\2\u02ea\u02eb\7v\2\2\u02eb\u02ec\7\66\2\2") - buf.write("\u02ec\u0389\7\62\2\2\u02ed\u02ee\7k\2\2\u02ee\u02ef\7") - buf.write("p\2\2\u02ef\u02f0\7v\2\2\u02f0\u02f1\7\66\2\2\u02f1\u0389") - buf.write("\7:\2\2\u02f2\u02f3\7k\2\2\u02f3\u02f4\7p\2\2\u02f4\u02f5") - buf.write("\7v\2\2\u02f5\u02f6\7\67\2\2\u02f6\u0389\78\2\2\u02f7") - buf.write("\u02f8\7k\2\2\u02f8\u02f9\7p\2\2\u02f9\u02fa\7v\2\2\u02fa") - buf.write("\u02fb\78\2\2\u02fb\u0389\7\66\2\2\u02fc\u02fd\7k\2\2") - buf.write("\u02fd\u02fe\7p\2\2\u02fe\u02ff\7v\2\2\u02ff\u0300\79") - buf.write("\2\2\u0300\u0389\7\64\2\2\u0301\u0302\7k\2\2\u0302\u0303") - buf.write("\7p\2\2\u0303\u0304\7v\2\2\u0304\u0305\7:\2\2\u0305\u0389") - buf.write("\7\62\2\2\u0306\u0307\7k\2\2\u0307\u0308\7p\2\2\u0308") - buf.write("\u0309\7v\2\2\u0309\u030a\7:\2\2\u030a\u0389\7:\2\2\u030b") - buf.write("\u030c\7k\2\2\u030c\u030d\7p\2\2\u030d\u030e\7v\2\2\u030e") - buf.write("\u030f\7;\2\2\u030f\u0389\78\2\2\u0310\u0311\7k\2\2\u0311") - buf.write("\u0312\7p\2\2\u0312\u0313\7v\2\2\u0313\u0314\7\63\2\2") - buf.write("\u0314\u0315\7\62\2\2\u0315\u0389\7\66\2\2\u0316\u0317") - buf.write("\7k\2\2\u0317\u0318\7p\2\2\u0318\u0319\7v\2\2\u0319\u031a") - buf.write("\7\63\2\2\u031a\u031b\7\63\2\2\u031b\u0389\7\64\2\2\u031c") - buf.write("\u031d\7k\2\2\u031d\u031e\7p\2\2\u031e\u031f\7v\2\2\u031f") - buf.write("\u0320\7\63\2\2\u0320\u0321\7\64\2\2\u0321\u0389\7\62") - buf.write("\2\2\u0322\u0323\7k\2\2\u0323\u0324\7p\2\2\u0324\u0325") - buf.write("\7v\2\2\u0325\u0326\7\63\2\2\u0326\u0327\7\64\2\2\u0327") - buf.write("\u0389\7:\2\2\u0328\u0329\7k\2\2\u0329\u032a\7p\2\2\u032a") - buf.write("\u032b\7v\2\2\u032b\u032c\7\63\2\2\u032c\u032d\7\65\2") - buf.write("\2\u032d\u0389\78\2\2\u032e\u032f\7k\2\2\u032f\u0330\7") - buf.write("p\2\2\u0330\u0331\7v\2\2\u0331\u0332\7\63\2\2\u0332\u0333") - buf.write("\7\66\2\2\u0333\u0389\7\66\2\2\u0334\u0335\7k\2\2\u0335") - buf.write("\u0336\7p\2\2\u0336\u0337\7v\2\2\u0337\u0338\7\63\2\2") - buf.write("\u0338\u0339\7\67\2\2\u0339\u0389\7\64\2\2\u033a\u033b") - buf.write("\7k\2\2\u033b\u033c\7p\2\2\u033c\u033d\7v\2\2\u033d\u033e") - buf.write("\7\63\2\2\u033e\u033f\78\2\2\u033f\u0389\7\62\2\2\u0340") - buf.write("\u0341\7k\2\2\u0341\u0342\7p\2\2\u0342\u0343\7v\2\2\u0343") - buf.write("\u0344\7\63\2\2\u0344\u0345\78\2\2\u0345\u0389\7:\2\2") - buf.write("\u0346\u0347\7k\2\2\u0347\u0348\7p\2\2\u0348\u0349\7v") - buf.write("\2\2\u0349\u034a\7\63\2\2\u034a\u034b\79\2\2\u034b\u0389") - buf.write("\78\2\2\u034c\u034d\7k\2\2\u034d\u034e\7p\2\2\u034e\u034f") - buf.write("\7v\2\2\u034f\u0350\7\63\2\2\u0350\u0351\7:\2\2\u0351") - buf.write("\u0389\7\66\2\2\u0352\u0353\7k\2\2\u0353\u0354\7p\2\2") - buf.write("\u0354\u0355\7v\2\2\u0355\u0356\7\63\2\2\u0356\u0357\7") - buf.write(";\2\2\u0357\u0389\7\64\2\2\u0358\u0359\7k\2\2\u0359\u035a") - buf.write("\7p\2\2\u035a\u035b\7v\2\2\u035b\u035c\7\64\2\2\u035c") - buf.write("\u035d\7\62\2\2\u035d\u0389\7\62\2\2\u035e\u035f\7k\2") - buf.write("\2\u035f\u0360\7p\2\2\u0360\u0361\7v\2\2\u0361\u0362\7") - buf.write("\64\2\2\u0362\u0363\7\62\2\2\u0363\u0389\7:\2\2\u0364") - buf.write("\u0365\7k\2\2\u0365\u0366\7p\2\2\u0366\u0367\7v\2\2\u0367") - buf.write("\u0368\7\64\2\2\u0368\u0369\7\63\2\2\u0369\u0389\78\2") - buf.write("\2\u036a\u036b\7k\2\2\u036b\u036c\7p\2\2\u036c\u036d\7") - buf.write("v\2\2\u036d\u036e\7\64\2\2\u036e\u036f\7\64\2\2\u036f") - buf.write("\u0389\7\66\2\2\u0370\u0371\7k\2\2\u0371\u0372\7p\2\2") - buf.write("\u0372\u0373\7v\2\2\u0373\u0374\7\64\2\2\u0374\u0375\7") - buf.write("\65\2\2\u0375\u0389\7\64\2\2\u0376\u0377\7k\2\2\u0377") - buf.write("\u0378\7p\2\2\u0378\u0379\7v\2\2\u0379\u037a\7\64\2\2") - buf.write("\u037a\u037b\7\66\2\2\u037b\u0389\7\62\2\2\u037c\u037d") - buf.write("\7k\2\2\u037d\u037e\7p\2\2\u037e\u037f\7v\2\2\u037f\u0380") - buf.write("\7\64\2\2\u0380\u0381\7\66\2\2\u0381\u0389\7:\2\2\u0382") - buf.write("\u0383\7k\2\2\u0383\u0384\7p\2\2\u0384\u0385\7v\2\2\u0385") - buf.write("\u0386\7\64\2\2\u0386\u0387\7\67\2\2\u0387\u0389\78\2") - buf.write("\2\u0388\u02d2\3\2\2\2\u0388\u02d5\3\2\2\2\u0388\u02d9") - buf.write("\3\2\2\2\u0388\u02de\3\2\2\2\u0388\u02e3\3\2\2\2\u0388") - buf.write("\u02e8\3\2\2\2\u0388\u02ed\3\2\2\2\u0388\u02f2\3\2\2\2") - buf.write("\u0388\u02f7\3\2\2\2\u0388\u02fc\3\2\2\2\u0388\u0301\3") - buf.write("\2\2\2\u0388\u0306\3\2\2\2\u0388\u030b\3\2\2\2\u0388\u0310") - buf.write("\3\2\2\2\u0388\u0316\3\2\2\2\u0388\u031c\3\2\2\2\u0388") - buf.write("\u0322\3\2\2\2\u0388\u0328\3\2\2\2\u0388\u032e\3\2\2\2") - buf.write("\u0388\u0334\3\2\2\2\u0388\u033a\3\2\2\2\u0388\u0340\3") - buf.write("\2\2\2\u0388\u0346\3\2\2\2\u0388\u034c\3\2\2\2\u0388\u0352") - buf.write("\3\2\2\2\u0388\u0358\3\2\2\2\u0388\u035e\3\2\2\2\u0388") - buf.write("\u0364\3\2\2\2\u0388\u036a\3\2\2\2\u0388\u0370\3\2\2\2") - buf.write("\u0388\u0376\3\2\2\2\u0388\u037c\3\2\2\2\u0388\u0382\3") - buf.write("\2\2\2\u0389\u00c6\3\2\2\2\u038a\u038b\7w\2\2\u038b\u038c") - buf.write("\7k\2\2\u038c\u038d\7p\2\2\u038d\u0462\7v\2\2\u038e\u038f") - buf.write("\7w\2\2\u038f\u0390\7k\2\2\u0390\u0391\7p\2\2\u0391\u0392") - buf.write("\7v\2\2\u0392\u0462\7:\2\2\u0393\u0394\7w\2\2\u0394\u0395") - buf.write("\7k\2\2\u0395\u0396\7p\2\2\u0396\u0397\7v\2\2\u0397\u0398") - buf.write("\7\63\2\2\u0398\u0462\78\2\2\u0399\u039a\7w\2\2\u039a") - buf.write("\u039b\7k\2\2\u039b\u039c\7p\2\2\u039c\u039d\7v\2\2\u039d") - buf.write("\u039e\7\64\2\2\u039e\u0462\7\66\2\2\u039f\u03a0\7w\2") - buf.write("\2\u03a0\u03a1\7k\2\2\u03a1\u03a2\7p\2\2\u03a2\u03a3\7") - buf.write("v\2\2\u03a3\u03a4\7\65\2\2\u03a4\u0462\7\64\2\2\u03a5") - buf.write("\u03a6\7w\2\2\u03a6\u03a7\7k\2\2\u03a7\u03a8\7p\2\2\u03a8") - buf.write("\u03a9\7v\2\2\u03a9\u03aa\7\66\2\2\u03aa\u0462\7\62\2") - buf.write("\2\u03ab\u03ac\7w\2\2\u03ac\u03ad\7k\2\2\u03ad\u03ae\7") - buf.write("p\2\2\u03ae\u03af\7v\2\2\u03af\u03b0\7\66\2\2\u03b0\u0462") - buf.write("\7:\2\2\u03b1\u03b2\7w\2\2\u03b2\u03b3\7k\2\2\u03b3\u03b4") - buf.write("\7p\2\2\u03b4\u03b5\7v\2\2\u03b5\u03b6\7\67\2\2\u03b6") - buf.write("\u0462\78\2\2\u03b7\u03b8\7w\2\2\u03b8\u03b9\7k\2\2\u03b9") - buf.write("\u03ba\7p\2\2\u03ba\u03bb\7v\2\2\u03bb\u03bc\78\2\2\u03bc") - buf.write("\u0462\7\66\2\2\u03bd\u03be\7w\2\2\u03be\u03bf\7k\2\2") - buf.write("\u03bf\u03c0\7p\2\2\u03c0\u03c1\7v\2\2\u03c1\u03c2\79") - buf.write("\2\2\u03c2\u0462\7\64\2\2\u03c3\u03c4\7w\2\2\u03c4\u03c5") - buf.write("\7k\2\2\u03c5\u03c6\7p\2\2\u03c6\u03c7\7v\2\2\u03c7\u03c8") - buf.write("\7:\2\2\u03c8\u0462\7\62\2\2\u03c9\u03ca\7w\2\2\u03ca") - buf.write("\u03cb\7k\2\2\u03cb\u03cc\7p\2\2\u03cc\u03cd\7v\2\2\u03cd") - buf.write("\u03ce\7:\2\2\u03ce\u0462\7:\2\2\u03cf\u03d0\7w\2\2\u03d0") - buf.write("\u03d1\7k\2\2\u03d1\u03d2\7p\2\2\u03d2\u03d3\7v\2\2\u03d3") - buf.write("\u03d4\7;\2\2\u03d4\u0462\78\2\2\u03d5\u03d6\7w\2\2\u03d6") - buf.write("\u03d7\7k\2\2\u03d7\u03d8\7p\2\2\u03d8\u03d9\7v\2\2\u03d9") - buf.write("\u03da\7\63\2\2\u03da\u03db\7\62\2\2\u03db\u0462\7\66") - buf.write("\2\2\u03dc\u03dd\7w\2\2\u03dd\u03de\7k\2\2\u03de\u03df") - buf.write("\7p\2\2\u03df\u03e0\7v\2\2\u03e0\u03e1\7\63\2\2\u03e1") - buf.write("\u03e2\7\63\2\2\u03e2\u0462\7\64\2\2\u03e3\u03e4\7w\2") - buf.write("\2\u03e4\u03e5\7k\2\2\u03e5\u03e6\7p\2\2\u03e6\u03e7\7") - buf.write("v\2\2\u03e7\u03e8\7\63\2\2\u03e8\u03e9\7\64\2\2\u03e9") - buf.write("\u0462\7\62\2\2\u03ea\u03eb\7w\2\2\u03eb\u03ec\7k\2\2") - buf.write("\u03ec\u03ed\7p\2\2\u03ed\u03ee\7v\2\2\u03ee\u03ef\7\63") - buf.write("\2\2\u03ef\u03f0\7\64\2\2\u03f0\u0462\7:\2\2\u03f1\u03f2") - buf.write("\7w\2\2\u03f2\u03f3\7k\2\2\u03f3\u03f4\7p\2\2\u03f4\u03f5") - buf.write("\7v\2\2\u03f5\u03f6\7\63\2\2\u03f6\u03f7\7\65\2\2\u03f7") - buf.write("\u0462\78\2\2\u03f8\u03f9\7w\2\2\u03f9\u03fa\7k\2\2\u03fa") - buf.write("\u03fb\7p\2\2\u03fb\u03fc\7v\2\2\u03fc\u03fd\7\63\2\2") - buf.write("\u03fd\u03fe\7\66\2\2\u03fe\u0462\7\66\2\2\u03ff\u0400") - buf.write("\7w\2\2\u0400\u0401\7k\2\2\u0401\u0402\7p\2\2\u0402\u0403") - buf.write("\7v\2\2\u0403\u0404\7\63\2\2\u0404\u0405\7\67\2\2\u0405") - buf.write("\u0462\7\64\2\2\u0406\u0407\7w\2\2\u0407\u0408\7k\2\2") - buf.write("\u0408\u0409\7p\2\2\u0409\u040a\7v\2\2\u040a\u040b\7\63") - buf.write("\2\2\u040b\u040c\78\2\2\u040c\u0462\7\62\2\2\u040d\u040e") - buf.write("\7w\2\2\u040e\u040f\7k\2\2\u040f\u0410\7p\2\2\u0410\u0411") - buf.write("\7v\2\2\u0411\u0412\7\63\2\2\u0412\u0413\78\2\2\u0413") - buf.write("\u0462\7:\2\2\u0414\u0415\7w\2\2\u0415\u0416\7k\2\2\u0416") - buf.write("\u0417\7p\2\2\u0417\u0418\7v\2\2\u0418\u0419\7\63\2\2") - buf.write("\u0419\u041a\79\2\2\u041a\u0462\78\2\2\u041b\u041c\7w") - buf.write("\2\2\u041c\u041d\7k\2\2\u041d\u041e\7p\2\2\u041e\u041f") - buf.write("\7v\2\2\u041f\u0420\7\63\2\2\u0420\u0421\7:\2\2\u0421") - buf.write("\u0462\7\66\2\2\u0422\u0423\7w\2\2\u0423\u0424\7k\2\2") - buf.write("\u0424\u0425\7p\2\2\u0425\u0426\7v\2\2\u0426\u0427\7\63") - buf.write("\2\2\u0427\u0428\7;\2\2\u0428\u0462\7\64\2\2\u0429\u042a") - buf.write("\7w\2\2\u042a\u042b\7k\2\2\u042b\u042c\7p\2\2\u042c\u042d") - buf.write("\7v\2\2\u042d\u042e\7\64\2\2\u042e\u042f\7\62\2\2\u042f") - buf.write("\u0462\7\62\2\2\u0430\u0431\7w\2\2\u0431\u0432\7k\2\2") - buf.write("\u0432\u0433\7p\2\2\u0433\u0434\7v\2\2\u0434\u0435\7\64") - buf.write("\2\2\u0435\u0436\7\62\2\2\u0436\u0462\7:\2\2\u0437\u0438") - buf.write("\7w\2\2\u0438\u0439\7k\2\2\u0439\u043a\7p\2\2\u043a\u043b") - buf.write("\7v\2\2\u043b\u043c\7\64\2\2\u043c\u043d\7\63\2\2\u043d") - buf.write("\u0462\78\2\2\u043e\u043f\7w\2\2\u043f\u0440\7k\2\2\u0440") - buf.write("\u0441\7p\2\2\u0441\u0442\7v\2\2\u0442\u0443\7\64\2\2") - buf.write("\u0443\u0444\7\64\2\2\u0444\u0462\7\66\2\2\u0445\u0446") - buf.write("\7w\2\2\u0446\u0447\7k\2\2\u0447\u0448\7p\2\2\u0448\u0449") - buf.write("\7v\2\2\u0449\u044a\7\64\2\2\u044a\u044b\7\65\2\2\u044b") - buf.write("\u0462\7\64\2\2\u044c\u044d\7w\2\2\u044d\u044e\7k\2\2") - buf.write("\u044e\u044f\7p\2\2\u044f\u0450\7v\2\2\u0450\u0451\7\64") - buf.write("\2\2\u0451\u0452\7\66\2\2\u0452\u0462\7\62\2\2\u0453\u0454") - buf.write("\7w\2\2\u0454\u0455\7k\2\2\u0455\u0456\7p\2\2\u0456\u0457") - buf.write("\7v\2\2\u0457\u0458\7\64\2\2\u0458\u0459\7\66\2\2\u0459") - buf.write("\u0462\7:\2\2\u045a\u045b\7w\2\2\u045b\u045c\7k\2\2\u045c") - buf.write("\u045d\7p\2\2\u045d\u045e\7v\2\2\u045e\u045f\7\64\2\2") - buf.write("\u045f\u0460\7\67\2\2\u0460\u0462\78\2\2\u0461\u038a\3") - buf.write("\2\2\2\u0461\u038e\3\2\2\2\u0461\u0393\3\2\2\2\u0461\u0399") - buf.write("\3\2\2\2\u0461\u039f\3\2\2\2\u0461\u03a5\3\2\2\2\u0461") - buf.write("\u03ab\3\2\2\2\u0461\u03b1\3\2\2\2\u0461\u03b7\3\2\2\2") - buf.write("\u0461\u03bd\3\2\2\2\u0461\u03c3\3\2\2\2\u0461\u03c9\3") - buf.write("\2\2\2\u0461\u03cf\3\2\2\2\u0461\u03d5\3\2\2\2\u0461\u03dc") - buf.write("\3\2\2\2\u0461\u03e3\3\2\2\2\u0461\u03ea\3\2\2\2\u0461") - buf.write("\u03f1\3\2\2\2\u0461\u03f8\3\2\2\2\u0461\u03ff\3\2\2\2") - buf.write("\u0461\u0406\3\2\2\2\u0461\u040d\3\2\2\2\u0461\u0414\3") - buf.write("\2\2\2\u0461\u041b\3\2\2\2\u0461\u0422\3\2\2\2\u0461\u0429") - buf.write("\3\2\2\2\u0461\u0430\3\2\2\2\u0461\u0437\3\2\2\2\u0461") - buf.write("\u043e\3\2\2\2\u0461\u0445\3\2\2\2\u0461\u044c\3\2\2\2") - buf.write("\u0461\u0453\3\2\2\2\u0461\u045a\3\2\2\2\u0462\u00c8\3") - buf.write("\2\2\2\u0463\u0464\7d\2\2\u0464\u0465\7{\2\2\u0465\u0466") - buf.write("\7v\2\2\u0466\u0467\7g\2\2\u0467\u0540\7u\2\2\u0468\u0469") - buf.write("\7d\2\2\u0469\u046a\7{\2\2\u046a\u046b\7v\2\2\u046b\u046c") - buf.write("\7g\2\2\u046c\u046d\7u\2\2\u046d\u0540\7\63\2\2\u046e") - buf.write("\u046f\7d\2\2\u046f\u0470\7{\2\2\u0470\u0471\7v\2\2\u0471") - buf.write("\u0472\7g\2\2\u0472\u0473\7u\2\2\u0473\u0540\7\64\2\2") - buf.write("\u0474\u0475\7d\2\2\u0475\u0476\7{\2\2\u0476\u0477\7v") - buf.write("\2\2\u0477\u0478\7g\2\2\u0478\u0479\7u\2\2\u0479\u0540") - buf.write("\7\65\2\2\u047a\u047b\7d\2\2\u047b\u047c\7{\2\2\u047c") - buf.write("\u047d\7v\2\2\u047d\u047e\7g\2\2\u047e\u047f\7u\2\2\u047f") - buf.write("\u0540\7\66\2\2\u0480\u0481\7d\2\2\u0481\u0482\7{\2\2") - buf.write("\u0482\u0483\7v\2\2\u0483\u0484\7g\2\2\u0484\u0485\7u") - buf.write("\2\2\u0485\u0540\7\67\2\2\u0486\u0487\7d\2\2\u0487\u0488") - buf.write("\7{\2\2\u0488\u0489\7v\2\2\u0489\u048a\7g\2\2\u048a\u048b") - buf.write("\7u\2\2\u048b\u0540\78\2\2\u048c\u048d\7d\2\2\u048d\u048e") - buf.write("\7{\2\2\u048e\u048f\7v\2\2\u048f\u0490\7g\2\2\u0490\u0491") - buf.write("\7u\2\2\u0491\u0540\79\2\2\u0492\u0493\7d\2\2\u0493\u0494") - buf.write("\7{\2\2\u0494\u0495\7v\2\2\u0495\u0496\7g\2\2\u0496\u0497") - buf.write("\7u\2\2\u0497\u0540\7:\2\2\u0498\u0499\7d\2\2\u0499\u049a") - buf.write("\7{\2\2\u049a\u049b\7v\2\2\u049b\u049c\7g\2\2\u049c\u049d") - buf.write("\7u\2\2\u049d\u0540\7;\2\2\u049e\u049f\7d\2\2\u049f\u04a0") - buf.write("\7{\2\2\u04a0\u04a1\7v\2\2\u04a1\u04a2\7g\2\2\u04a2\u04a3") - buf.write("\7u\2\2\u04a3\u04a4\7\63\2\2\u04a4\u0540\7\62\2\2\u04a5") - buf.write("\u04a6\7d\2\2\u04a6\u04a7\7{\2\2\u04a7\u04a8\7v\2\2\u04a8") - buf.write("\u04a9\7g\2\2\u04a9\u04aa\7u\2\2\u04aa\u04ab\7\63\2\2") - buf.write("\u04ab\u0540\7\63\2\2\u04ac\u04ad\7d\2\2\u04ad\u04ae\7") - buf.write("{\2\2\u04ae\u04af\7v\2\2\u04af\u04b0\7g\2\2\u04b0\u04b1") - buf.write("\7u\2\2\u04b1\u04b2\7\63\2\2\u04b2\u0540\7\64\2\2\u04b3") - buf.write("\u04b4\7d\2\2\u04b4\u04b5\7{\2\2\u04b5\u04b6\7v\2\2\u04b6") - buf.write("\u04b7\7g\2\2\u04b7\u04b8\7u\2\2\u04b8\u04b9\7\63\2\2") - buf.write("\u04b9\u0540\7\65\2\2\u04ba\u04bb\7d\2\2\u04bb\u04bc\7") - buf.write("{\2\2\u04bc\u04bd\7v\2\2\u04bd\u04be\7g\2\2\u04be\u04bf") - buf.write("\7u\2\2\u04bf\u04c0\7\63\2\2\u04c0\u0540\7\66\2\2\u04c1") - buf.write("\u04c2\7d\2\2\u04c2\u04c3\7{\2\2\u04c3\u04c4\7v\2\2\u04c4") - buf.write("\u04c5\7g\2\2\u04c5\u04c6\7u\2\2\u04c6\u04c7\7\63\2\2") - buf.write("\u04c7\u0540\7\67\2\2\u04c8\u04c9\7d\2\2\u04c9\u04ca\7") - buf.write("{\2\2\u04ca\u04cb\7v\2\2\u04cb\u04cc\7g\2\2\u04cc\u04cd") - buf.write("\7u\2\2\u04cd\u04ce\7\63\2\2\u04ce\u0540\78\2\2\u04cf") - buf.write("\u04d0\7d\2\2\u04d0\u04d1\7{\2\2\u04d1\u04d2\7v\2\2\u04d2") - buf.write("\u04d3\7g\2\2\u04d3\u04d4\7u\2\2\u04d4\u04d5\7\63\2\2") - buf.write("\u04d5\u0540\79\2\2\u04d6\u04d7\7d\2\2\u04d7\u04d8\7{") - buf.write("\2\2\u04d8\u04d9\7v\2\2\u04d9\u04da\7g\2\2\u04da\u04db") - buf.write("\7u\2\2\u04db\u04dc\7\63\2\2\u04dc\u0540\7:\2\2\u04dd") - buf.write("\u04de\7d\2\2\u04de\u04df\7{\2\2\u04df\u04e0\7v\2\2\u04e0") - buf.write("\u04e1\7g\2\2\u04e1\u04e2\7u\2\2\u04e2\u04e3\7\63\2\2") - buf.write("\u04e3\u0540\7;\2\2\u04e4\u04e5\7d\2\2\u04e5\u04e6\7{") - buf.write("\2\2\u04e6\u04e7\7v\2\2\u04e7\u04e8\7g\2\2\u04e8\u04e9") - buf.write("\7u\2\2\u04e9\u04ea\7\64\2\2\u04ea\u0540\7\62\2\2\u04eb") - buf.write("\u04ec\7d\2\2\u04ec\u04ed\7{\2\2\u04ed\u04ee\7v\2\2\u04ee") - buf.write("\u04ef\7g\2\2\u04ef\u04f0\7u\2\2\u04f0\u04f1\7\64\2\2") - buf.write("\u04f1\u0540\7\63\2\2\u04f2\u04f3\7d\2\2\u04f3\u04f4\7") - buf.write("{\2\2\u04f4\u04f5\7v\2\2\u04f5\u04f6\7g\2\2\u04f6\u04f7") - buf.write("\7u\2\2\u04f7\u04f8\7\64\2\2\u04f8\u0540\7\64\2\2\u04f9") - buf.write("\u04fa\7d\2\2\u04fa\u04fb\7{\2\2\u04fb\u04fc\7v\2\2\u04fc") - buf.write("\u04fd\7g\2\2\u04fd\u04fe\7u\2\2\u04fe\u04ff\7\64\2\2") - buf.write("\u04ff\u0540\7\65\2\2\u0500\u0501\7d\2\2\u0501\u0502\7") - buf.write("{\2\2\u0502\u0503\7v\2\2\u0503\u0504\7g\2\2\u0504\u0505") - buf.write("\7u\2\2\u0505\u0506\7\64\2\2\u0506\u0540\7\66\2\2\u0507") - buf.write("\u0508\7d\2\2\u0508\u0509\7{\2\2\u0509\u050a\7v\2\2\u050a") - buf.write("\u050b\7g\2\2\u050b\u050c\7u\2\2\u050c\u050d\7\64\2\2") - buf.write("\u050d\u0540\7\67\2\2\u050e\u050f\7d\2\2\u050f\u0510\7") - buf.write("{\2\2\u0510\u0511\7v\2\2\u0511\u0512\7g\2\2\u0512\u0513") - buf.write("\7u\2\2\u0513\u0514\7\64\2\2\u0514\u0540\78\2\2\u0515") - buf.write("\u0516\7d\2\2\u0516\u0517\7{\2\2\u0517\u0518\7v\2\2\u0518") - buf.write("\u0519\7g\2\2\u0519\u051a\7u\2\2\u051a\u051b\7\64\2\2") - buf.write("\u051b\u0540\79\2\2\u051c\u051d\7d\2\2\u051d\u051e\7{") - buf.write("\2\2\u051e\u051f\7v\2\2\u051f\u0520\7g\2\2\u0520\u0521") - buf.write("\7u\2\2\u0521\u0522\7\64\2\2\u0522\u0540\7:\2\2\u0523") - buf.write("\u0524\7d\2\2\u0524\u0525\7{\2\2\u0525\u0526\7v\2\2\u0526") - buf.write("\u0527\7g\2\2\u0527\u0528\7u\2\2\u0528\u0529\7\64\2\2") - buf.write("\u0529\u0540\7;\2\2\u052a\u052b\7d\2\2\u052b\u052c\7{") - buf.write("\2\2\u052c\u052d\7v\2\2\u052d\u052e\7g\2\2\u052e\u052f") - buf.write("\7u\2\2\u052f\u0530\7\65\2\2\u0530\u0540\7\62\2\2\u0531") - buf.write("\u0532\7d\2\2\u0532\u0533\7{\2\2\u0533\u0534\7v\2\2\u0534") - buf.write("\u0535\7g\2\2\u0535\u0536\7u\2\2\u0536\u0537\7\65\2\2") - buf.write("\u0537\u0540\7\63\2\2\u0538\u0539\7d\2\2\u0539\u053a\7") - buf.write("{\2\2\u053a\u053b\7v\2\2\u053b\u053c\7g\2\2\u053c\u053d") - buf.write("\7u\2\2\u053d\u053e\7\65\2\2\u053e\u0540\7\64\2\2\u053f") - buf.write("\u0463\3\2\2\2\u053f\u0468\3\2\2\2\u053f\u046e\3\2\2\2") - buf.write("\u053f\u0474\3\2\2\2\u053f\u047a\3\2\2\2\u053f\u0480\3") - buf.write("\2\2\2\u053f\u0486\3\2\2\2\u053f\u048c\3\2\2\2\u053f\u0492") - buf.write("\3\2\2\2\u053f\u0498\3\2\2\2\u053f\u049e\3\2\2\2\u053f") - buf.write("\u04a5\3\2\2\2\u053f\u04ac\3\2\2\2\u053f\u04b3\3\2\2\2") - buf.write("\u053f\u04ba\3\2\2\2\u053f\u04c1\3\2\2\2\u053f\u04c8\3") - buf.write("\2\2\2\u053f\u04cf\3\2\2\2\u053f\u04d6\3\2\2\2\u053f\u04dd") - buf.write("\3\2\2\2\u053f\u04e4\3\2\2\2\u053f\u04eb\3\2\2\2\u053f") - buf.write("\u04f2\3\2\2\2\u053f\u04f9\3\2\2\2\u053f\u0500\3\2\2\2") - buf.write("\u053f\u0507\3\2\2\2\u053f\u050e\3\2\2\2\u053f\u0515\3") - buf.write("\2\2\2\u053f\u051c\3\2\2\2\u053f\u0523\3\2\2\2\u053f\u052a") - buf.write("\3\2\2\2\u053f\u0531\3\2\2\2\u053f\u0538\3\2\2\2\u0540") - buf.write("\u00ca\3\2\2\2\u0541\u0542\7h\2\2\u0542\u0543\7k\2\2\u0543") - buf.write("\u0544\7z\2\2\u0544\u0545\7g\2\2\u0545\u0558\7f\2\2\u0546") - buf.write("\u0547\7h\2\2\u0547\u0548\7k\2\2\u0548\u0549\7z\2\2\u0549") - buf.write("\u054a\7g\2\2\u054a\u054b\7f\2\2\u054b\u054d\3\2\2\2\u054c") - buf.write("\u054e\t\2\2\2\u054d\u054c\3\2\2\2\u054e\u054f\3\2\2\2") - buf.write("\u054f\u054d\3\2\2\2\u054f\u0550\3\2\2\2\u0550\u0551\3") - buf.write("\2\2\2\u0551\u0553\7z\2\2\u0552\u0554\t\2\2\2\u0553\u0552") - buf.write("\3\2\2\2\u0554\u0555\3\2\2\2\u0555\u0553\3\2\2\2\u0555") - buf.write("\u0556\3\2\2\2\u0556\u0558\3\2\2\2\u0557\u0541\3\2\2\2") - buf.write("\u0557\u0546\3\2\2\2\u0558\u00cc\3\2\2\2\u0559\u055a\7") - buf.write("w\2\2\u055a\u055b\7h\2\2\u055b\u055c\7k\2\2\u055c\u055d") - buf.write("\7z\2\2\u055d\u055e\7g\2\2\u055e\u0572\7f\2\2\u055f\u0560") - buf.write("\7w\2\2\u0560\u0561\7h\2\2\u0561\u0562\7k\2\2\u0562\u0563") - buf.write("\7z\2\2\u0563\u0564\7g\2\2\u0564\u0565\7f\2\2\u0565\u0567") - buf.write("\3\2\2\2\u0566\u0568\t\2\2\2\u0567\u0566\3\2\2\2\u0568") - buf.write("\u0569\3\2\2\2\u0569\u0567\3\2\2\2\u0569\u056a\3\2\2\2") - buf.write("\u056a\u056b\3\2\2\2\u056b\u056d\7z\2\2\u056c\u056e\t") - buf.write("\2\2\2\u056d\u056c\3\2\2\2\u056e\u056f\3\2\2\2\u056f\u056d") - buf.write("\3\2\2\2\u056f\u0570\3\2\2\2\u0570\u0572\3\2\2\2\u0571") - buf.write("\u0559\3\2\2\2\u0571\u055f\3\2\2\2\u0572\u00ce\3\2\2\2") - buf.write("\u0573\u0574\7v\2\2\u0574\u0575\7t\2\2\u0575\u0576\7w") - buf.write("\2\2\u0576\u057d\7g\2\2\u0577\u0578\7h\2\2\u0578\u0579") - buf.write("\7c\2\2\u0579\u057a\7n\2\2\u057a\u057b\7u\2\2\u057b\u057d") - buf.write("\7g\2\2\u057c\u0573\3\2\2\2\u057c\u0577\3\2\2\2\u057d") - buf.write("\u00d0\3\2\2\2\u057e\u0585\5\u00d3j\2\u057f\u0581\5\u00d3") - buf.write("j\2\u0580\u057f\3\2\2\2\u0580\u0581\3\2\2\2\u0581\u0582") - buf.write("\3\2\2\2\u0582\u0583\7\60\2\2\u0583\u0585\5\u00d3j\2\u0584") - buf.write("\u057e\3\2\2\2\u0584\u0580\3\2\2\2\u0585\u0588\3\2\2\2") - buf.write("\u0586\u0587\t\3\2\2\u0587\u0589\5\u00d3j\2\u0588\u0586") - buf.write("\3\2\2\2\u0588\u0589\3\2\2\2\u0589\u00d2\3\2\2\2\u058a") - buf.write("\u0591\t\2\2\2\u058b\u058d\7a\2\2\u058c\u058b\3\2\2\2") - buf.write("\u058c\u058d\3\2\2\2\u058d\u058e\3\2\2\2\u058e\u0590\t") - buf.write("\2\2\2\u058f\u058c\3\2\2\2\u0590\u0593\3\2\2\2\u0591\u058f") - buf.write("\3\2\2\2\u0591\u0592\3\2\2\2\u0592\u00d4\3\2\2\2\u0593") - buf.write("\u0591\3\2\2\2\u0594\u0595\7\62\2\2\u0595\u0596\t\4\2") - buf.write("\2\u0596\u0597\5\u00d7l\2\u0597\u00d6\3\2\2\2\u0598\u059f") - buf.write("\5\u00dfp\2\u0599\u059b\7a\2\2\u059a\u0599\3\2\2\2\u059a") - buf.write("\u059b\3\2\2\2\u059b\u059c\3\2\2\2\u059c\u059e\5\u00df") - buf.write("p\2\u059d\u059a\3\2\2\2\u059e\u05a1\3\2\2\2\u059f\u059d") - buf.write("\3\2\2\2\u059f\u05a0\3\2\2\2\u05a0\u00d8\3\2\2\2\u05a1") - buf.write("\u059f\3\2\2\2\u05a2\u05a3\7y\2\2\u05a3\u05a4\7g\2\2\u05a4") - buf.write("\u05db\7k\2\2\u05a5\u05a6\7i\2\2\u05a6\u05a7\7y\2\2\u05a7") - buf.write("\u05a8\7g\2\2\u05a8\u05db\7k\2\2\u05a9\u05aa\7u\2\2\u05aa") - buf.write("\u05ab\7|\2\2\u05ab\u05ac\7c\2\2\u05ac\u05ad\7d\2\2\u05ad") - buf.write("\u05db\7q\2\2\u05ae\u05af\7h\2\2\u05af\u05b0\7k\2\2\u05b0") - buf.write("\u05b1\7p\2\2\u05b1\u05b2\7p\2\2\u05b2\u05b3\7g\2\2\u05b3") - buf.write("\u05db\7{\2\2\u05b4\u05b5\7g\2\2\u05b5\u05b6\7v\2\2\u05b6") - buf.write("\u05b7\7j\2\2\u05b7\u05b8\7g\2\2\u05b8\u05db\7t\2\2\u05b9") - buf.write("\u05ba\7u\2\2\u05ba\u05bb\7g\2\2\u05bb\u05bc\7e\2\2\u05bc") - buf.write("\u05bd\7q\2\2\u05bd\u05be\7p\2\2\u05be\u05bf\7f\2\2\u05bf") - buf.write("\u05db\7u\2\2\u05c0\u05c1\7o\2\2\u05c1\u05c2\7k\2\2\u05c2") - buf.write("\u05c3\7p\2\2\u05c3\u05c4\7w\2\2\u05c4\u05c5\7v\2\2\u05c5") - buf.write("\u05c6\7g\2\2\u05c6\u05db\7u\2\2\u05c7\u05c8\7j\2\2\u05c8") - buf.write("\u05c9\7q\2\2\u05c9\u05ca\7w\2\2\u05ca\u05cb\7t\2\2\u05cb") - buf.write("\u05db\7u\2\2\u05cc\u05cd\7f\2\2\u05cd\u05ce\7c\2\2\u05ce") - buf.write("\u05cf\7{\2\2\u05cf\u05db\7u\2\2\u05d0\u05d1\7y\2\2\u05d1") - buf.write("\u05d2\7g\2\2\u05d2\u05d3\7g\2\2\u05d3\u05d4\7m\2\2\u05d4") - buf.write("\u05db\7u\2\2\u05d5\u05d6\7{\2\2\u05d6\u05d7\7g\2\2\u05d7") - buf.write("\u05d8\7c\2\2\u05d8\u05d9\7t\2\2\u05d9\u05db\7u\2\2\u05da") - buf.write("\u05a2\3\2\2\2\u05da\u05a5\3\2\2\2\u05da\u05a9\3\2\2\2") - buf.write("\u05da\u05ae\3\2\2\2\u05da\u05b4\3\2\2\2\u05da\u05b9\3") - buf.write("\2\2\2\u05da\u05c0\3\2\2\2\u05da\u05c7\3\2\2\2\u05da\u05cc") - buf.write("\3\2\2\2\u05da\u05d0\3\2\2\2\u05da\u05d5\3\2\2\2\u05db") - buf.write("\u00da\3\2\2\2\u05dc\u05dd\7j\2\2\u05dd\u05de\7g\2\2\u05de") - buf.write("\u05df\7z\2\2\u05df\u05ea\3\2\2\2\u05e0\u05e2\7$\2\2\u05e1") - buf.write("\u05e3\5\u00d7l\2\u05e2\u05e1\3\2\2\2\u05e2\u05e3\3\2") - buf.write("\2\2\u05e3\u05e4\3\2\2\2\u05e4\u05eb\7$\2\2\u05e5\u05e7") - buf.write("\7)\2\2\u05e6\u05e8\5\u00d7l\2\u05e7\u05e6\3\2\2\2\u05e7") - buf.write("\u05e8\3\2\2\2\u05e8\u05e9\3\2\2\2\u05e9\u05eb\7)\2\2") - buf.write("\u05ea\u05e0\3\2\2\2\u05ea\u05e5\3\2\2\2\u05eb\u00dc\3") - buf.write("\2\2\2\u05ec\u05ed\5\u00dfp\2\u05ed\u05ee\5\u00dfp\2\u05ee") - buf.write("\u00de\3\2\2\2\u05ef\u05f0\t\5\2\2\u05f0\u00e0\3\2\2\2") - buf.write("\u05f1\u05f2\7c\2\2\u05f2\u05f3\7d\2\2\u05f3\u05f4\7u") - buf.write("\2\2\u05f4\u05f5\7v\2\2\u05f5\u05f6\7t\2\2\u05f6\u05f7") - buf.write("\7c\2\2\u05f7\u05f8\7e\2\2\u05f8\u064a\7v\2\2\u05f9\u05fa") - buf.write("\7c\2\2\u05fa\u05fb\7h\2\2\u05fb\u05fc\7v\2\2\u05fc\u05fd") - buf.write("\7g\2\2\u05fd\u064a\7t\2\2\u05fe\u05ff\7e\2\2\u05ff\u0600") - buf.write("\7c\2\2\u0600\u0601\7u\2\2\u0601\u064a\7g\2\2\u0602\u0603") - buf.write("\7e\2\2\u0603\u0604\7c\2\2\u0604\u0605\7v\2\2\u0605\u0606") - buf.write("\7e\2\2\u0606\u064a\7j\2\2\u0607\u0608\7f\2\2\u0608\u0609") - buf.write("\7g\2\2\u0609\u060a\7h\2\2\u060a\u060b\7c\2\2\u060b\u060c") - buf.write("\7w\2\2\u060c\u060d\7n\2\2\u060d\u064a\7v\2\2\u060e\u060f") - buf.write("\7h\2\2\u060f\u0610\7k\2\2\u0610\u0611\7p\2\2\u0611\u0612") - buf.write("\7c\2\2\u0612\u064a\7n\2\2\u0613\u0614\7k\2\2\u0614\u064a") - buf.write("\7p\2\2\u0615\u0616\7k\2\2\u0616\u0617\7p\2\2\u0617\u0618") - buf.write("\7n\2\2\u0618\u0619\7k\2\2\u0619\u061a\7p\2\2\u061a\u064a") - buf.write("\7g\2\2\u061b\u061c\7n\2\2\u061c\u061d\7g\2\2\u061d\u064a") - buf.write("\7v\2\2\u061e\u061f\7o\2\2\u061f\u0620\7c\2\2\u0620\u0621") - buf.write("\7v\2\2\u0621\u0622\7e\2\2\u0622\u064a\7j\2\2\u0623\u0624") - buf.write("\7p\2\2\u0624\u0625\7w\2\2\u0625\u0626\7n\2\2\u0626\u064a") - buf.write("\7n\2\2\u0627\u0628\7q\2\2\u0628\u064a\7h\2\2\u0629\u062a") - buf.write("\7t\2\2\u062a\u062b\7g\2\2\u062b\u062c\7n\2\2\u062c\u062d") - buf.write("\7q\2\2\u062d\u062e\7e\2\2\u062e\u062f\7c\2\2\u062f\u0630") - buf.write("\7v\2\2\u0630\u0631\7c\2\2\u0631\u0632\7d\2\2\u0632\u0633") - buf.write("\7n\2\2\u0633\u064a\7g\2\2\u0634\u0635\7u\2\2\u0635\u0636") - buf.write("\7v\2\2\u0636\u0637\7c\2\2\u0637\u0638\7v\2\2\u0638\u0639") - buf.write("\7k\2\2\u0639\u064a\7e\2\2\u063a\u063b\7u\2\2\u063b\u063c") - buf.write("\7y\2\2\u063c\u063d\7k\2\2\u063d\u063e\7v\2\2\u063e\u063f") - buf.write("\7e\2\2\u063f\u064a\7j\2\2\u0640\u0641\7v\2\2\u0641\u0642") - buf.write("\7t\2\2\u0642\u064a\7{\2\2\u0643\u0644\7v\2\2\u0644\u0645") - buf.write("\7{\2\2\u0645\u0646\7r\2\2\u0646\u0647\7g\2\2\u0647\u0648") - buf.write("\7q\2\2\u0648\u064a\7h\2\2\u0649\u05f1\3\2\2\2\u0649\u05f9") - buf.write("\3\2\2\2\u0649\u05fe\3\2\2\2\u0649\u0602\3\2\2\2\u0649") - buf.write("\u0607\3\2\2\2\u0649\u060e\3\2\2\2\u0649\u0613\3\2\2\2") - buf.write("\u0649\u0615\3\2\2\2\u0649\u061b\3\2\2\2\u0649\u061e\3") - buf.write("\2\2\2\u0649\u0623\3\2\2\2\u0649\u0627\3\2\2\2\u0649\u0629") - buf.write("\3\2\2\2\u0649\u0634\3\2\2\2\u0649\u063a\3\2\2\2\u0649") - buf.write("\u0640\3\2\2\2\u0649\u0643\3\2\2\2\u064a\u00e2\3\2\2\2") - buf.write("\u064b\u064c\7c\2\2\u064c\u064d\7p\2\2\u064d\u064e\7q") - buf.write("\2\2\u064e\u064f\7p\2\2\u064f\u0650\7{\2\2\u0650\u0651") - buf.write("\7o\2\2\u0651\u0652\7q\2\2\u0652\u0653\7w\2\2\u0653\u0654") - buf.write("\7u\2\2\u0654\u00e4\3\2\2\2\u0655\u0656\7d\2\2\u0656\u0657") - buf.write("\7t\2\2\u0657\u0658\7g\2\2\u0658\u0659\7c\2\2\u0659\u065a") - buf.write("\7m\2\2\u065a\u00e6\3\2\2\2\u065b\u065c\7e\2\2\u065c\u065d") - buf.write("\7q\2\2\u065d\u065e\7p\2\2\u065e\u065f\7u\2\2\u065f\u0660") - buf.write("\7v\2\2\u0660\u0661\7c\2\2\u0661\u0662\7p\2\2\u0662\u0663") - buf.write("\7v\2\2\u0663\u00e8\3\2\2\2\u0664\u0665\7k\2\2\u0665\u0666") - buf.write("\7o\2\2\u0666\u0667\7o\2\2\u0667\u0668\7w\2\2\u0668\u0669") - buf.write("\7v\2\2\u0669\u066a\7c\2\2\u066a\u066b\7d\2\2\u066b\u066c") - buf.write("\7n\2\2\u066c\u066d\7g\2\2\u066d\u00ea\3\2\2\2\u066e\u066f") - buf.write("\7e\2\2\u066f\u0670\7q\2\2\u0670\u0671\7p\2\2\u0671\u0672") - buf.write("\7v\2\2\u0672\u0673\7k\2\2\u0673\u0674\7p\2\2\u0674\u0675") - buf.write("\7w\2\2\u0675\u0676\7g\2\2\u0676\u00ec\3\2\2\2\u0677\u0678") - buf.write("\7n\2\2\u0678\u0679\7g\2\2\u0679\u067a\7c\2\2\u067a\u067b") - buf.write("\7x\2\2\u067b\u067c\7g\2\2\u067c\u00ee\3\2\2\2\u067d\u067e") - buf.write("\7g\2\2\u067e\u067f\7z\2\2\u067f\u0680\7v\2\2\u0680\u0681") - buf.write("\7g\2\2\u0681\u0682\7t\2\2\u0682\u0683\7p\2\2\u0683\u0684") - buf.write("\7c\2\2\u0684\u0685\7n\2\2\u0685\u00f0\3\2\2\2\u0686\u0687") - buf.write("\7k\2\2\u0687\u0688\7p\2\2\u0688\u0689\7f\2\2\u0689\u068a") - buf.write("\7g\2\2\u068a\u068b\7z\2\2\u068b\u068c\7g\2\2\u068c\u068d") - buf.write("\7f\2\2\u068d\u00f2\3\2\2\2\u068e\u068f\7k\2\2\u068f\u0690") - buf.write("\7p\2\2\u0690\u0691\7v\2\2\u0691\u0692\7g\2\2\u0692\u0693") - buf.write("\7t\2\2\u0693\u0694\7p\2\2\u0694\u0695\7c\2\2\u0695\u0696") - buf.write("\7n\2\2\u0696\u00f4\3\2\2\2\u0697\u0698\7r\2\2\u0698\u0699") - buf.write("\7c\2\2\u0699\u069a\7{\2\2\u069a\u069b\7c\2\2\u069b\u069c") - buf.write("\7d\2\2\u069c\u069d\7n\2\2\u069d\u069e\7g\2\2\u069e\u00f6") - buf.write("\3\2\2\2\u069f\u06a0\7r\2\2\u06a0\u06a1\7t\2\2\u06a1\u06a2") - buf.write("\7k\2\2\u06a2\u06a3\7x\2\2\u06a3\u06a4\7c\2\2\u06a4\u06a5") - buf.write("\7v\2\2\u06a5\u06a6\7g\2\2\u06a6\u00f8\3\2\2\2\u06a7\u06a8") - buf.write("\7r\2\2\u06a8\u06a9\7w\2\2\u06a9\u06aa\7d\2\2\u06aa\u06ab") - buf.write("\7n\2\2\u06ab\u06ac\7k\2\2\u06ac\u06ad\7e\2\2\u06ad\u00fa") - buf.write("\3\2\2\2\u06ae\u06af\7x\2\2\u06af\u06b0\7k\2\2\u06b0\u06b1") - buf.write("\7t\2\2\u06b1\u06b2\7v\2\2\u06b2\u06b3\7w\2\2\u06b3\u06b4") - buf.write("\7c\2\2\u06b4\u06b5\7n\2\2\u06b5\u00fc\3\2\2\2\u06b6\u06b7") - buf.write("\7r\2\2\u06b7\u06b8\7w\2\2\u06b8\u06b9\7t\2\2\u06b9\u06ba") - buf.write("\7g\2\2\u06ba\u00fe\3\2\2\2\u06bb\u06bc\7v\2\2\u06bc\u06bd") - buf.write("\7{\2\2\u06bd\u06be\7r\2\2\u06be\u06bf\7g\2\2\u06bf\u0100") - buf.write("\3\2\2\2\u06c0\u06c1\7x\2\2\u06c1\u06c2\7k\2\2\u06c2\u06c3") - buf.write("\7g\2\2\u06c3\u06c4\7y\2\2\u06c4\u0102\3\2\2\2\u06c5\u06c6") - buf.write("\7e\2\2\u06c6\u06c7\7q\2\2\u06c7\u06c8\7p\2\2\u06c8\u06c9") - buf.write("\7u\2\2\u06c9\u06ca\7v\2\2\u06ca\u06cb\7t\2\2\u06cb\u06cc") - buf.write("\7w\2\2\u06cc\u06cd\7e\2\2\u06cd\u06ce\7v\2\2\u06ce\u06cf") - buf.write("\7q\2\2\u06cf\u06d0\7t\2\2\u06d0\u0104\3\2\2\2\u06d1\u06d2") - buf.write("\7h\2\2\u06d2\u06d3\7c\2\2\u06d3\u06d4\7n\2\2\u06d4\u06d5") - buf.write("\7n\2\2\u06d5\u06d6\7d\2\2\u06d6\u06d7\7c\2\2\u06d7\u06d8") - buf.write("\7e\2\2\u06d8\u06d9\7m\2\2\u06d9\u0106\3\2\2\2\u06da\u06db") - buf.write("\7t\2\2\u06db\u06dc\7g\2\2\u06dc\u06dd\7e\2\2\u06dd\u06de") - buf.write("\7g\2\2\u06de\u06df\7k\2\2\u06df\u06e0\7x\2\2\u06e0\u06e1") - buf.write("\7g\2\2\u06e1\u0108\3\2\2\2\u06e2\u06e6\5\u010b\u0086") - buf.write("\2\u06e3\u06e5\5\u010d\u0087\2\u06e4\u06e3\3\2\2\2\u06e5") - buf.write("\u06e8\3\2\2\2\u06e6\u06e4\3\2\2\2\u06e6\u06e7\3\2\2\2") - buf.write("\u06e7\u010a\3\2\2\2\u06e8\u06e6\3\2\2\2\u06e9\u06ea\t") - buf.write("\6\2\2\u06ea\u010c\3\2\2\2\u06eb\u06ec\t\7\2\2\u06ec\u010e") - buf.write("\3\2\2\2\u06ed\u06ee\7w\2\2\u06ee\u06ef\7p\2\2\u06ef\u06f0") - buf.write("\7k\2\2\u06f0\u06f1\7e\2\2\u06f1\u06f2\7q\2\2\u06f2\u06f3") - buf.write("\7f\2\2\u06f3\u06f5\7g\2\2\u06f4\u06ed\3\2\2\2\u06f4\u06f5") - buf.write("\3\2\2\2\u06f5\u06f6\3\2\2\2\u06f6\u06fa\7$\2\2\u06f7") - buf.write("\u06f9\5\u0111\u0089\2\u06f8\u06f7\3\2\2\2\u06f9\u06fc") - buf.write("\3\2\2\2\u06fa\u06f8\3\2\2\2\u06fa\u06fb\3\2\2\2\u06fb") - buf.write("\u06fd\3\2\2\2\u06fc\u06fa\3\2\2\2\u06fd\u0710\7$\2\2") - buf.write("\u06fe\u06ff\7w\2\2\u06ff\u0700\7p\2\2\u0700\u0701\7k") - buf.write("\2\2\u0701\u0702\7e\2\2\u0702\u0703\7q\2\2\u0703\u0704") - buf.write("\7f\2\2\u0704\u0706\7g\2\2\u0705\u06fe\3\2\2\2\u0705\u0706") - buf.write("\3\2\2\2\u0706\u0707\3\2\2\2\u0707\u070b\7)\2\2\u0708") - buf.write("\u070a\5\u0113\u008a\2\u0709\u0708\3\2\2\2\u070a\u070d") - buf.write("\3\2\2\2\u070b\u0709\3\2\2\2\u070b\u070c\3\2\2\2\u070c") - buf.write("\u070e\3\2\2\2\u070d\u070b\3\2\2\2\u070e\u0710\7)\2\2") - buf.write("\u070f\u06f4\3\2\2\2\u070f\u0705\3\2\2\2\u0710\u0110\3") - buf.write("\2\2\2\u0711\u0715\n\b\2\2\u0712\u0713\7^\2\2\u0713\u0715") - buf.write("\13\2\2\2\u0714\u0711\3\2\2\2\u0714\u0712\3\2\2\2\u0715") - buf.write("\u0112\3\2\2\2\u0716\u071a\n\t\2\2\u0717\u0718\7^\2\2") - buf.write("\u0718\u071a\13\2\2\2\u0719\u0716\3\2\2\2\u0719\u0717") - buf.write("\3\2\2\2\u071a\u0114\3\2\2\2\u071b\u071d\t\2\2\2\u071c") - buf.write("\u071b\3\2\2\2\u071d\u071e\3\2\2\2\u071e\u071c\3\2\2\2") - buf.write("\u071e\u071f\3\2\2\2\u071f\u0720\3\2\2\2\u0720\u0722\7") - buf.write("\60\2\2\u0721\u0723\t\2\2\2\u0722\u0721\3\2\2\2\u0723") - buf.write("\u0724\3\2\2\2\u0724\u0722\3\2\2\2\u0724\u0725\3\2\2\2") - buf.write("\u0725\u072c\3\2\2\2\u0726\u0728\7\60\2\2\u0727\u0729") - buf.write("\t\2\2\2\u0728\u0727\3\2\2\2\u0729\u072a\3\2\2\2\u072a") - buf.write("\u0728\3\2\2\2\u072a\u072b\3\2\2\2\u072b\u072d\3\2\2\2") - buf.write("\u072c\u0726\3\2\2\2\u072c\u072d\3\2\2\2\u072d\u0116\3") - buf.write("\2\2\2\u072e\u0730\t\n\2\2\u072f\u072e\3\2\2\2\u0730\u0731") - buf.write("\3\2\2\2\u0731\u072f\3\2\2\2\u0731\u0732\3\2\2\2\u0732") - buf.write("\u0733\3\2\2\2\u0733\u0734\b\u008c\2\2\u0734\u0118\3\2") - buf.write("\2\2\u0735\u0736\7\61\2\2\u0736\u0737\7,\2\2\u0737\u073b") - buf.write("\3\2\2\2\u0738\u073a\13\2\2\2\u0739\u0738\3\2\2\2\u073a") - buf.write("\u073d\3\2\2\2\u073b\u073c\3\2\2\2\u073b\u0739\3\2\2\2") - buf.write("\u073c\u073e\3\2\2\2\u073d\u073b\3\2\2\2\u073e\u073f\7") - buf.write(",\2\2\u073f\u0740\7\61\2\2\u0740\u0741\3\2\2\2\u0741\u0742") - buf.write("\b\u008d\3\2\u0742\u011a\3\2\2\2\u0743\u0744\7\61\2\2") - buf.write("\u0744\u0745\7\61\2\2\u0745\u0749\3\2\2\2\u0746\u0748") - buf.write("\n\13\2\2\u0747\u0746\3\2\2\2\u0748\u074b\3\2\2\2\u0749") - buf.write("\u0747\3\2\2\2\u0749\u074a\3\2\2\2\u074a\u074c\3\2\2\2") - buf.write("\u074b\u0749\3\2\2\2\u074c\u074d\b\u008e\3\2\u074d\u011c") - buf.write("\3\2\2\2(\2\u0388\u0461\u053f\u054f\u0555\u0557\u0569") - buf.write("\u056f\u0571\u057c\u0580\u0584\u0588\u058c\u0591\u059a") - buf.write("\u059f\u05da\u05e2\u05e7\u05ea\u0649\u06e6\u06f4\u06fa") - buf.write("\u0705\u070b\u070f\u0714\u0719\u071e\u0724\u072a\u072c") - buf.write("\u0731\u073b\u0749\4\b\2\2\2\3\2") + buf.write("\3\u0082\3\u0082\3\u0082\3\u0082\3\u0082\3\u0083\3\u0083") + buf.write("\3\u0083\3\u0083\3\u0083\3\u0083\3\u0083\3\u0083\3\u0083") + buf.write("\3\u0084\3\u0084\3\u0084\3\u0084\3\u0084\3\u0084\3\u0084") + buf.write("\3\u0084\3\u0085\3\u0085\7\u0085\u06e6\n\u0085\f\u0085") + buf.write("\16\u0085\u06e9\13\u0085\3\u0086\3\u0086\3\u0087\3\u0087") + buf.write("\3\u0088\3\u0088\3\u0088\3\u0088\3\u0088\3\u0088\3\u0088") + buf.write("\5\u0088\u06f6\n\u0088\3\u0088\3\u0088\7\u0088\u06fa\n") + buf.write("\u0088\f\u0088\16\u0088\u06fd\13\u0088\3\u0088\3\u0088") + buf.write("\3\u0088\3\u0088\3\u0088\3\u0088\3\u0088\3\u0088\5\u0088") + buf.write("\u0707\n\u0088\3\u0088\3\u0088\7\u0088\u070b\n\u0088\f") + buf.write("\u0088\16\u0088\u070e\13\u0088\3\u0088\5\u0088\u0711\n") + buf.write("\u0088\3\u0089\3\u0089\3\u0089\5\u0089\u0716\n\u0089\3") + buf.write("\u008a\3\u008a\3\u008a\5\u008a\u071b\n\u008a\3\u008b\6") + buf.write("\u008b\u071e\n\u008b\r\u008b\16\u008b\u071f\3\u008b\3") + buf.write("\u008b\6\u008b\u0724\n\u008b\r\u008b\16\u008b\u0725\3") + buf.write("\u008b\3\u008b\6\u008b\u072a\n\u008b\r\u008b\16\u008b") + buf.write("\u072b\5\u008b\u072e\n\u008b\3\u008c\6\u008c\u0731\n\u008c") + buf.write("\r\u008c\16\u008c\u0732\3\u008c\3\u008c\3\u008d\3\u008d") + buf.write("\3\u008d\3\u008d\7\u008d\u073b\n\u008d\f\u008d\16\u008d") + buf.write("\u073e\13\u008d\3\u008d\3\u008d\3\u008d\3\u008d\3\u008d") + buf.write("\3\u008e\3\u008e\3\u008e\3\u008e\7\u008e\u0749\n\u008e") + buf.write("\f\u008e\16\u008e\u074c\13\u008e\3\u008e\3\u008e\3\u073c") + buf.write("\2\u008f\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f") + buf.write("\27\r\31\16\33\17\35\20\37\21!\22#\23%\24\'\25)\26+\27") + buf.write("-\30/\31\61\32\63\33\65\34\67\359\36;\37= ?!A\"C#E$G%") + buf.write("I&K\'M(O)Q*S+U,W-Y.[/]\60_\61a\62c\63e\64g\65i\66k\67") + buf.write("m8o9q:s;u{?}@\177A\u0081B\u0083C\u0085D\u0087E\u0089") + buf.write("F\u008bG\u008dH\u008fI\u0091J\u0093K\u0095L\u0097M\u0099") + buf.write("N\u009bO\u009dP\u009fQ\u00a1R\u00a3S\u00a5T\u00a7U\u00a9") + buf.write("V\u00abW\u00adX\u00afY\u00b1Z\u00b3[\u00b5\\\u00b7]\u00b9") + buf.write("^\u00bb_\u00bd`\u00bfa\u00c1b\u00c3c\u00c5d\u00c7e\u00c9") + buf.write("f\u00cbg\u00cdh\u00cfi\u00d1\2\u00d3j\u00d5\2\u00d7k\u00d9") + buf.write("l\u00db\2\u00dd\2\u00dfm\u00e1n\u00e3o\u00e5p\u00e7q\u00e9") + buf.write("r\u00ebs\u00edt\u00efu\u00f1v\u00f3w\u00f5x\u00f7y\u00f9") + buf.write("z\u00fb{\u00fd|\u00ff}\u0101~\u0103\177\u0105\u0080\u0107") + buf.write("\u0081\u0109\u0082\u010b\2\u010d\2\u010f\u0083\u0111\2") + buf.write("\u0113\2\u0115\u0084\u0117\u0085\u0119\u0086\u011b\u0087") + buf.write("\3\2\f\3\2\62;\4\2GGgg\4\2ZZzz\5\2\62;CHch\6\2&&C\\aa") + buf.write("c|\7\2&&\62;C\\aac|\6\2\f\f\17\17$$^^\6\2\f\f\17\17))") + buf.write("^^\5\2\13\f\16\17\"\"\4\2\f\f\17\17\2\u07e0\2\3\3\2\2") + buf.write("\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2") + buf.write("\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25") + buf.write("\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3") + buf.write("\2\2\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2") + buf.write("\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2") + buf.write("\2\61\3\2\2\2\2\63\3\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2\2") + buf.write("9\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2A\3\2\2\2") + buf.write("\2C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2\2K\3\2\2") + buf.write("\2\2M\3\2\2\2\2O\3\2\2\2\2Q\3\2\2\2\2S\3\2\2\2\2U\3\2") + buf.write("\2\2\2W\3\2\2\2\2Y\3\2\2\2\2[\3\2\2\2\2]\3\2\2\2\2_\3") + buf.write("\2\2\2\2a\3\2\2\2\2c\3\2\2\2\2e\3\2\2\2\2g\3\2\2\2\2i") + buf.write("\3\2\2\2\2k\3\2\2\2\2m\3\2\2\2\2o\3\2\2\2\2q\3\2\2\2\2") + buf.write("s\3\2\2\2\2u\3\2\2\2\2w\3\2\2\2\2y\3\2\2\2\2{\3\2\2\2") + buf.write("\2}\3\2\2\2\2\177\3\2\2\2\2\u0081\3\2\2\2\2\u0083\3\2") + buf.write("\2\2\2\u0085\3\2\2\2\2\u0087\3\2\2\2\2\u0089\3\2\2\2\2") + buf.write("\u008b\3\2\2\2\2\u008d\3\2\2\2\2\u008f\3\2\2\2\2\u0091") + buf.write("\3\2\2\2\2\u0093\3\2\2\2\2\u0095\3\2\2\2\2\u0097\3\2\2") + buf.write("\2\2\u0099\3\2\2\2\2\u009b\3\2\2\2\2\u009d\3\2\2\2\2\u009f") + buf.write("\3\2\2\2\2\u00a1\3\2\2\2\2\u00a3\3\2\2\2\2\u00a5\3\2\2") + buf.write("\2\2\u00a7\3\2\2\2\2\u00a9\3\2\2\2\2\u00ab\3\2\2\2\2\u00ad") + buf.write("\3\2\2\2\2\u00af\3\2\2\2\2\u00b1\3\2\2\2\2\u00b3\3\2\2") + buf.write("\2\2\u00b5\3\2\2\2\2\u00b7\3\2\2\2\2\u00b9\3\2\2\2\2\u00bb") + buf.write("\3\2\2\2\2\u00bd\3\2\2\2\2\u00bf\3\2\2\2\2\u00c1\3\2\2") + buf.write("\2\2\u00c3\3\2\2\2\2\u00c5\3\2\2\2\2\u00c7\3\2\2\2\2\u00c9") + buf.write("\3\2\2\2\2\u00cb\3\2\2\2\2\u00cd\3\2\2\2\2\u00cf\3\2\2") + buf.write("\2\2\u00d3\3\2\2\2\2\u00d7\3\2\2\2\2\u00d9\3\2\2\2\2\u00df") + buf.write("\3\2\2\2\2\u00e1\3\2\2\2\2\u00e3\3\2\2\2\2\u00e5\3\2\2") + buf.write("\2\2\u00e7\3\2\2\2\2\u00e9\3\2\2\2\2\u00eb\3\2\2\2\2\u00ed") + buf.write("\3\2\2\2\2\u00ef\3\2\2\2\2\u00f1\3\2\2\2\2\u00f3\3\2\2") + buf.write("\2\2\u00f5\3\2\2\2\2\u00f7\3\2\2\2\2\u00f9\3\2\2\2\2\u00fb") + buf.write("\3\2\2\2\2\u00fd\3\2\2\2\2\u00ff\3\2\2\2\2\u0101\3\2\2") + buf.write("\2\2\u0103\3\2\2\2\2\u0105\3\2\2\2\2\u0107\3\2\2\2\2\u0109") + buf.write("\3\2\2\2\2\u010f\3\2\2\2\2\u0115\3\2\2\2\2\u0117\3\2\2") + buf.write("\2\2\u0119\3\2\2\2\2\u011b\3\2\2\2\3\u011d\3\2\2\2\5\u0124") + buf.write("\3\2\2\2\7\u0126\3\2\2\2\t\u0128\3\2\2\2\13\u012b\3\2") + buf.write("\2\2\r\u012d\3\2\2\2\17\u012f\3\2\2\2\21\u0132\3\2\2\2") + buf.write("\23\u0134\3\2\2\2\25\u0136\3\2\2\2\27\u0139\3\2\2\2\31") + buf.write("\u013b\3\2\2\2\33\u013e\3\2\2\2\35\u0145\3\2\2\2\37\u014a") + buf.write("\3\2\2\2!\u014c\3\2\2\2#\u014e\3\2\2\2%\u0150\3\2\2\2") + buf.write("\'\u0159\3\2\2\2)\u0162\3\2\2\2+\u016c\3\2\2\2-\u0174") + buf.write("\3\2\2\2/\u0177\3\2\2\2\61\u0179\3\2\2\2\63\u017b\3\2") + buf.write("\2\2\65\u0181\3\2\2\2\67\u0187\3\2\2\29\u018b\3\2\2\2") + buf.write(";\u018d\3\2\2\2=\u018f\3\2\2\2?\u0191\3\2\2\2A\u0193\3") + buf.write("\2\2\2C\u0195\3\2\2\2E\u0197\3\2\2\2G\u019a\3\2\2\2I\u019d") + buf.write("\3\2\2\2K\u01a4\3\2\2\2M\u01ad\3\2\2\2O\u01b6\3\2\2\2") + buf.write("Q\u01be\3\2\2\2S\u01c4\3\2\2\2U\u01c9\3\2\2\2W\u01cb\3") + buf.write("\2\2\2Y\u01cd\3\2\2\2[\u01d5\3\2\2\2]\u01d7\3\2\2\2_\u01df") + buf.write("\3\2\2\2a\u01e2\3\2\2\2c\u01e9\3\2\2\2e\u01f1\3\2\2\2") + buf.write("g\u01fa\3\2\2\2i\u01fd\3\2\2\2k\u0202\3\2\2\2m\u0206\3") + buf.write("\2\2\2o\u020c\3\2\2\2q\u0212\3\2\2\2s\u021c\3\2\2\2u\u0225") + buf.write("\3\2\2\2w\u0228\3\2\2\2y\u022f\3\2\2\2{\u0235\3\2\2\2") + buf.write("}\u023a\3\2\2\2\177\u0241\3\2\2\2\u0081\u0245\3\2\2\2") + buf.write("\u0083\u024a\3\2\2\2\u0085\u0251\3\2\2\2\u0087\u0256\3") + buf.write("\2\2\2\u0089\u0259\3\2\2\2\u008b\u025c\3\2\2\2\u008d\u0260") + buf.write("\3\2\2\2\u008f\u0262\3\2\2\2\u0091\u0269\3\2\2\2\u0093") + buf.write("\u026b\3\2\2\2\u0095\u026e\3\2\2\2\u0097\u0271\3\2\2\2") + buf.write("\u0099\u0274\3\2\2\2\u009b\u0277\3\2\2\2\u009d\u0279\3") + buf.write("\2\2\2\u009f\u027c\3\2\2\2\u00a1\u027f\3\2\2\2\u00a3\u0282") + buf.write("\3\2\2\2\u00a5\u0286\3\2\2\2\u00a7\u028a\3\2\2\2\u00a9") + buf.write("\u028d\3\2\2\2\u00ab\u0290\3\2\2\2\u00ad\u0293\3\2\2\2") + buf.write("\u00af\u0296\3\2\2\2\u00b1\u0299\3\2\2\2\u00b3\u029d\3") + buf.write("\2\2\2\u00b5\u02a0\3\2\2\2\u00b7\u02a3\3\2\2\2\u00b9\u02aa") + buf.write("\3\2\2\2\u00bb\u02af\3\2\2\2\u00bd\u02b7\3\2\2\2\u00bf") + buf.write("\u02ba\3\2\2\2\u00c1\u02c3\3\2\2\2\u00c3\u0382\3\2\2\2") + buf.write("\u00c5\u045b\3\2\2\2\u00c7\u0539\3\2\2\2\u00c9\u0551\3") + buf.write("\2\2\2\u00cb\u056b\3\2\2\2\u00cd\u0576\3\2\2\2\u00cf\u057e") + buf.write("\3\2\2\2\u00d1\u0584\3\2\2\2\u00d3\u058e\3\2\2\2\u00d5") + buf.write("\u0592\3\2\2\2\u00d7\u05d4\3\2\2\2\u00d9\u05d6\3\2\2\2") + buf.write("\u00db\u05e6\3\2\2\2\u00dd\u05e9\3\2\2\2\u00df\u0643\3") + buf.write("\2\2\2\u00e1\u0645\3\2\2\2\u00e3\u064f\3\2\2\2\u00e5\u0655") + buf.write("\3\2\2\2\u00e7\u065e\3\2\2\2\u00e9\u0668\3\2\2\2\u00eb") + buf.write("\u0671\3\2\2\2\u00ed\u0677\3\2\2\2\u00ef\u0680\3\2\2\2") + buf.write("\u00f1\u0688\3\2\2\2\u00f3\u0691\3\2\2\2\u00f5\u0699\3") + buf.write("\2\2\2\u00f7\u06a1\3\2\2\2\u00f9\u06a8\3\2\2\2\u00fb\u06b0") + buf.write("\3\2\2\2\u00fd\u06b5\3\2\2\2\u00ff\u06ba\3\2\2\2\u0101") + buf.write("\u06bf\3\2\2\2\u0103\u06c6\3\2\2\2\u0105\u06d2\3\2\2\2") + buf.write("\u0107\u06db\3\2\2\2\u0109\u06e3\3\2\2\2\u010b\u06ea\3") + buf.write("\2\2\2\u010d\u06ec\3\2\2\2\u010f\u0710\3\2\2\2\u0111\u0715") + buf.write("\3\2\2\2\u0113\u071a\3\2\2\2\u0115\u071d\3\2\2\2\u0117") + buf.write("\u0730\3\2\2\2\u0119\u0736\3\2\2\2\u011b\u0744\3\2\2\2") + buf.write("\u011d\u011e\7r\2\2\u011e\u011f\7t\2\2\u011f\u0120\7c") + buf.write("\2\2\u0120\u0121\7i\2\2\u0121\u0122\7o\2\2\u0122\u0123") + buf.write("\7c\2\2\u0123\4\3\2\2\2\u0124\u0125\7=\2\2\u0125\6\3\2") + buf.write("\2\2\u0126\u0127\7,\2\2\u0127\b\3\2\2\2\u0128\u0129\7") + buf.write("~\2\2\u0129\u012a\7~\2\2\u012a\n\3\2\2\2\u012b\u012c\7") + buf.write("`\2\2\u012c\f\3\2\2\2\u012d\u012e\7\u0080\2\2\u012e\16") + buf.write("\3\2\2\2\u012f\u0130\7@\2\2\u0130\u0131\7?\2\2\u0131\20") + buf.write("\3\2\2\2\u0132\u0133\7@\2\2\u0133\22\3\2\2\2\u0134\u0135") + buf.write("\7>\2\2\u0135\24\3\2\2\2\u0136\u0137\7>\2\2\u0137\u0138") + buf.write("\7?\2\2\u0138\26\3\2\2\2\u0139\u013a\7?\2\2\u013a\30\3") + buf.write("\2\2\2\u013b\u013c\7c\2\2\u013c\u013d\7u\2\2\u013d\32") + buf.write("\3\2\2\2\u013e\u013f\7k\2\2\u013f\u0140\7o\2\2\u0140\u0141") + buf.write("\7r\2\2\u0141\u0142\7q\2\2\u0142\u0143\7t\2\2\u0143\u0144") + buf.write("\7v\2\2\u0144\34\3\2\2\2\u0145\u0146\7h\2\2\u0146\u0147") + buf.write("\7t\2\2\u0147\u0148\7q\2\2\u0148\u0149\7o\2\2\u0149\36") + buf.write("\3\2\2\2\u014a\u014b\7}\2\2\u014b \3\2\2\2\u014c\u014d") + buf.write("\7.\2\2\u014d\"\3\2\2\2\u014e\u014f\7\177\2\2\u014f$\3") + buf.write("\2\2\2\u0150\u0151\7c\2\2\u0151\u0152\7d\2\2\u0152\u0153") + buf.write("\7u\2\2\u0153\u0154\7v\2\2\u0154\u0155\7t\2\2\u0155\u0156") + buf.write("\7c\2\2\u0156\u0157\7e\2\2\u0157\u0158\7v\2\2\u0158&\3") + buf.write("\2\2\2\u0159\u015a\7e\2\2\u015a\u015b\7q\2\2\u015b\u015c") + buf.write("\7p\2\2\u015c\u015d\7v\2\2\u015d\u015e\7t\2\2\u015e\u015f") + buf.write("\7c\2\2\u015f\u0160\7e\2\2\u0160\u0161\7v\2\2\u0161(\3") + buf.write("\2\2\2\u0162\u0163\7k\2\2\u0163\u0164\7p\2\2\u0164\u0165") + buf.write("\7v\2\2\u0165\u0166\7g\2\2\u0166\u0167\7t\2\2\u0167\u0168") + buf.write("\7h\2\2\u0168\u0169\7c\2\2\u0169\u016a\7e\2\2\u016a\u016b") + buf.write("\7g\2\2\u016b*\3\2\2\2\u016c\u016d\7n\2\2\u016d\u016e") + buf.write("\7k\2\2\u016e\u016f\7d\2\2\u016f\u0170\7t\2\2\u0170\u0171") + buf.write("\7c\2\2\u0171\u0172\7t\2\2\u0172\u0173\7{\2\2\u0173,\3") + buf.write("\2\2\2\u0174\u0175\7k\2\2\u0175\u0176\7u\2\2\u0176.\3") + buf.write("\2\2\2\u0177\u0178\7*\2\2\u0178\60\3\2\2\2\u0179\u017a") + buf.write("\7+\2\2\u017a\62\3\2\2\2\u017b\u017c\7g\2\2\u017c\u017d") + buf.write("\7t\2\2\u017d\u017e\7t\2\2\u017e\u017f\7q\2\2\u017f\u0180") + buf.write("\7t\2\2\u0180\64\3\2\2\2\u0181\u0182\7w\2\2\u0182\u0183") + buf.write("\7u\2\2\u0183\u0184\7k\2\2\u0184\u0185\7p\2\2\u0185\u0186") + buf.write("\7i\2\2\u0186\66\3\2\2\2\u0187\u0188\7h\2\2\u0188\u0189") + buf.write("\7q\2\2\u0189\u018a\7t\2\2\u018a8\3\2\2\2\u018b\u018c") + buf.write("\7~\2\2\u018c:\3\2\2\2\u018d\u018e\7(\2\2\u018e<\3\2\2") + buf.write("\2\u018f\u0190\7-\2\2\u0190>\3\2\2\2\u0191\u0192\7/\2") + buf.write("\2\u0192@\3\2\2\2\u0193\u0194\7\61\2\2\u0194B\3\2\2\2") + buf.write("\u0195\u0196\7\'\2\2\u0196D\3\2\2\2\u0197\u0198\7?\2\2") + buf.write("\u0198\u0199\7?\2\2\u0199F\3\2\2\2\u019a\u019b\7#\2\2") + buf.write("\u019b\u019c\7?\2\2\u019cH\3\2\2\2\u019d\u019e\7u\2\2") + buf.write("\u019e\u019f\7v\2\2\u019f\u01a0\7t\2\2\u01a0\u01a1\7w") + buf.write("\2\2\u01a1\u01a2\7e\2\2\u01a2\u01a3\7v\2\2\u01a3J\3\2") + buf.write("\2\2\u01a4\u01a5\7o\2\2\u01a5\u01a6\7q\2\2\u01a6\u01a7") + buf.write("\7f\2\2\u01a7\u01a8\7k\2\2\u01a8\u01a9\7h\2\2\u01a9\u01aa") + buf.write("\7k\2\2\u01aa\u01ab\7g\2\2\u01ab\u01ac\7t\2\2\u01acL\3") + buf.write("\2\2\2\u01ad\u01ae\7h\2\2\u01ae\u01af\7w\2\2\u01af\u01b0") + buf.write("\7p\2\2\u01b0\u01b1\7e\2\2\u01b1\u01b2\7v\2\2\u01b2\u01b3") + buf.write("\7k\2\2\u01b3\u01b4\7q\2\2\u01b4\u01b5\7p\2\2\u01b5N\3") + buf.write("\2\2\2\u01b6\u01b7\7t\2\2\u01b7\u01b8\7g\2\2\u01b8\u01b9") + buf.write("\7v\2\2\u01b9\u01ba\7w\2\2\u01ba\u01bb\7t\2\2\u01bb\u01bc") + buf.write("\7p\2\2\u01bc\u01bd\7u\2\2\u01bdP\3\2\2\2\u01be\u01bf") + buf.write("\7g\2\2\u01bf\u01c0\7x\2\2\u01c0\u01c1\7g\2\2\u01c1\u01c2") + buf.write("\7p\2\2\u01c2\u01c3\7v\2\2\u01c3R\3\2\2\2\u01c4\u01c5") + buf.write("\7g\2\2\u01c5\u01c6\7p\2\2\u01c6\u01c7\7w\2\2\u01c7\u01c8") + buf.write("\7o\2\2\u01c8T\3\2\2\2\u01c9\u01ca\7]\2\2\u01caV\3\2\2") + buf.write("\2\u01cb\u01cc\7_\2\2\u01ccX\3\2\2\2\u01cd\u01ce\7c\2") + buf.write("\2\u01ce\u01cf\7f\2\2\u01cf\u01d0\7f\2\2\u01d0\u01d1\7") + buf.write("t\2\2\u01d1\u01d2\7g\2\2\u01d2\u01d3\7u\2\2\u01d3\u01d4") + buf.write("\7u\2\2\u01d4Z\3\2\2\2\u01d5\u01d6\7\60\2\2\u01d6\\\3") + buf.write("\2\2\2\u01d7\u01d8\7o\2\2\u01d8\u01d9\7c\2\2\u01d9\u01da") + buf.write("\7r\2\2\u01da\u01db\7r\2\2\u01db\u01dc\7k\2\2\u01dc\u01dd") + buf.write("\7p\2\2\u01dd\u01de\7i\2\2\u01de^\3\2\2\2\u01df\u01e0") + buf.write("\7?\2\2\u01e0\u01e1\7@\2\2\u01e1`\3\2\2\2\u01e2\u01e3") + buf.write("\7o\2\2\u01e3\u01e4\7g\2\2\u01e4\u01e5\7o\2\2\u01e5\u01e6") + buf.write("\7q\2\2\u01e6\u01e7\7t\2\2\u01e7\u01e8\7{\2\2\u01e8b\3") + buf.write("\2\2\2\u01e9\u01ea\7u\2\2\u01ea\u01eb\7v\2\2\u01eb\u01ec") + buf.write("\7q\2\2\u01ec\u01ed\7t\2\2\u01ed\u01ee\7c\2\2\u01ee\u01ef") + buf.write("\7i\2\2\u01ef\u01f0\7g\2\2\u01f0d\3\2\2\2\u01f1\u01f2") + buf.write("\7e\2\2\u01f2\u01f3\7c\2\2\u01f3\u01f4\7n\2\2\u01f4\u01f5") + buf.write("\7n\2\2\u01f5\u01f6\7f\2\2\u01f6\u01f7\7c\2\2\u01f7\u01f8") + buf.write("\7v\2\2\u01f8\u01f9\7c\2\2\u01f9f\3\2\2\2\u01fa\u01fb") + buf.write("\7k\2\2\u01fb\u01fc\7h\2\2\u01fch\3\2\2\2\u01fd\u01fe") + buf.write("\7g\2\2\u01fe\u01ff\7n\2\2\u01ff\u0200\7u\2\2\u0200\u0201") + buf.write("\7g\2\2\u0201j\3\2\2\2\u0202\u0203\7v\2\2\u0203\u0204") + buf.write("\7t\2\2\u0204\u0205\7{\2\2\u0205l\3\2\2\2\u0206\u0207") + buf.write("\7e\2\2\u0207\u0208\7c\2\2\u0208\u0209\7v\2\2\u0209\u020a") + buf.write("\7e\2\2\u020a\u020b\7j\2\2\u020bn\3\2\2\2\u020c\u020d") + buf.write("\7y\2\2\u020d\u020e\7j\2\2\u020e\u020f\7k\2\2\u020f\u0210") + buf.write("\7n\2\2\u0210\u0211\7g\2\2\u0211p\3\2\2\2\u0212\u0213") + buf.write("\7w\2\2\u0213\u0214\7p\2\2\u0214\u0215\7e\2\2\u0215\u0216") + buf.write("\7j\2\2\u0216\u0217\7g\2\2\u0217\u0218\7e\2\2\u0218\u0219") + buf.write("\7m\2\2\u0219\u021a\7g\2\2\u021a\u021b\7f\2\2\u021br\3") + buf.write("\2\2\2\u021c\u021d\7c\2\2\u021d\u021e\7u\2\2\u021e\u021f") + buf.write("\7u\2\2\u021f\u0220\7g\2\2\u0220\u0221\7o\2\2\u0221\u0222") + buf.write("\7d\2\2\u0222\u0223\7n\2\2\u0223\u0224\7{\2\2\u0224t\3") + buf.write("\2\2\2\u0225\u0226\7f\2\2\u0226\u0227\7q\2\2\u0227v\3") + buf.write("\2\2\2\u0228\u0229\7t\2\2\u0229\u022a\7g\2\2\u022a\u022b") + buf.write("\7v\2\2\u022b\u022c\7w\2\2\u022c\u022d\7t\2\2\u022d\u022e") + buf.write("\7p\2\2\u022ex\3\2\2\2\u022f\u0230\7v\2\2\u0230\u0231") + buf.write("\7j\2\2\u0231\u0232\7t\2\2\u0232\u0233\7q\2\2\u0233\u0234") + buf.write("\7y\2\2\u0234z\3\2\2\2\u0235\u0236\7g\2\2\u0236\u0237") + buf.write("\7o\2\2\u0237\u0238\7k\2\2\u0238\u0239\7v\2\2\u0239|\3") + buf.write("\2\2\2\u023a\u023b\7t\2\2\u023b\u023c\7g\2\2\u023c\u023d") + buf.write("\7x\2\2\u023d\u023e\7g\2\2\u023e\u023f\7t\2\2\u023f\u0240") + buf.write("\7v\2\2\u0240~\3\2\2\2\u0241\u0242\7x\2\2\u0242\u0243") + buf.write("\7c\2\2\u0243\u0244\7t\2\2\u0244\u0080\3\2\2\2\u0245\u0246") + buf.write("\7d\2\2\u0246\u0247\7q\2\2\u0247\u0248\7q\2\2\u0248\u0249") + buf.write("\7n\2\2\u0249\u0082\3\2\2\2\u024a\u024b\7u\2\2\u024b\u024c") + buf.write("\7v\2\2\u024c\u024d\7t\2\2\u024d\u024e\7k\2\2\u024e\u024f") + buf.write("\7p\2\2\u024f\u0250\7i\2\2\u0250\u0084\3\2\2\2\u0251\u0252") + buf.write("\7d\2\2\u0252\u0253\7{\2\2\u0253\u0254\7v\2\2\u0254\u0255") + buf.write("\7g\2\2\u0255\u0086\3\2\2\2\u0256\u0257\7-\2\2\u0257\u0258") + buf.write("\7-\2\2\u0258\u0088\3\2\2\2\u0259\u025a\7/\2\2\u025a\u025b") + buf.write("\7/\2\2\u025b\u008a\3\2\2\2\u025c\u025d\7p\2\2\u025d\u025e") + buf.write("\7g\2\2\u025e\u025f\7y\2\2\u025f\u008c\3\2\2\2\u0260\u0261") + buf.write("\7<\2\2\u0261\u008e\3\2\2\2\u0262\u0263\7f\2\2\u0263\u0264") + buf.write("\7g\2\2\u0264\u0265\7n\2\2\u0265\u0266\7g\2\2\u0266\u0267") + buf.write("\7v\2\2\u0267\u0268\7g\2\2\u0268\u0090\3\2\2\2\u0269\u026a") + buf.write("\7#\2\2\u026a\u0092\3\2\2\2\u026b\u026c\7,\2\2\u026c\u026d") + buf.write("\7,\2\2\u026d\u0094\3\2\2\2\u026e\u026f\7>\2\2\u026f\u0270") + buf.write("\7>\2\2\u0270\u0096\3\2\2\2\u0271\u0272\7@\2\2\u0272\u0273") + buf.write("\7@\2\2\u0273\u0098\3\2\2\2\u0274\u0275\7(\2\2\u0275\u0276") + buf.write("\7(\2\2\u0276\u009a\3\2\2\2\u0277\u0278\7A\2\2\u0278\u009c") + buf.write("\3\2\2\2\u0279\u027a\7~\2\2\u027a\u027b\7?\2\2\u027b\u009e") + buf.write("\3\2\2\2\u027c\u027d\7`\2\2\u027d\u027e\7?\2\2\u027e\u00a0") + buf.write("\3\2\2\2\u027f\u0280\7(\2\2\u0280\u0281\7?\2\2\u0281\u00a2") + buf.write("\3\2\2\2\u0282\u0283\7>\2\2\u0283\u0284\7>\2\2\u0284\u0285") + buf.write("\7?\2\2\u0285\u00a4\3\2\2\2\u0286\u0287\7@\2\2\u0287\u0288") + buf.write("\7@\2\2\u0288\u0289\7?\2\2\u0289\u00a6\3\2\2\2\u028a\u028b") + buf.write("\7-\2\2\u028b\u028c\7?\2\2\u028c\u00a8\3\2\2\2\u028d\u028e") + buf.write("\7/\2\2\u028e\u028f\7?\2\2\u028f\u00aa\3\2\2\2\u0290\u0291") + buf.write("\7,\2\2\u0291\u0292\7?\2\2\u0292\u00ac\3\2\2\2\u0293\u0294") + buf.write("\7\61\2\2\u0294\u0295\7?\2\2\u0295\u00ae\3\2\2\2\u0296") + buf.write("\u0297\7\'\2\2\u0297\u0298\7?\2\2\u0298\u00b0\3\2\2\2") + buf.write("\u0299\u029a\7n\2\2\u029a\u029b\7g\2\2\u029b\u029c\7v") + buf.write("\2\2\u029c\u00b2\3\2\2\2\u029d\u029e\7<\2\2\u029e\u029f") + buf.write("\7?\2\2\u029f\u00b4\3\2\2\2\u02a0\u02a1\7?\2\2\u02a1\u02a2") + buf.write("\7<\2\2\u02a2\u00b6\3\2\2\2\u02a3\u02a4\7u\2\2\u02a4\u02a5") + buf.write("\7y\2\2\u02a5\u02a6\7k\2\2\u02a6\u02a7\7v\2\2\u02a7\u02a8") + buf.write("\7e\2\2\u02a8\u02a9\7j\2\2\u02a9\u00b8\3\2\2\2\u02aa\u02ab") + buf.write("\7e\2\2\u02ab\u02ac\7c\2\2\u02ac\u02ad\7u\2\2\u02ad\u02ae") + buf.write("\7g\2\2\u02ae\u00ba\3\2\2\2\u02af\u02b0\7f\2\2\u02b0\u02b1") + buf.write("\7g\2\2\u02b1\u02b2\7h\2\2\u02b2\u02b3\7c\2\2\u02b3\u02b4") + buf.write("\7w\2\2\u02b4\u02b5\7n\2\2\u02b5\u02b6\7v\2\2\u02b6\u00bc") + buf.write("\3\2\2\2\u02b7\u02b8\7/\2\2\u02b8\u02b9\7@\2\2\u02b9\u00be") + buf.write("\3\2\2\2\u02ba\u02bb\7e\2\2\u02bb\u02bc\7c\2\2\u02bc\u02bd") + buf.write("\7n\2\2\u02bd\u02be\7n\2\2\u02be\u02bf\7d\2\2\u02bf\u02c0") + buf.write("\7c\2\2\u02c0\u02c1\7e\2\2\u02c1\u02c2\7m\2\2\u02c2\u00c0") + buf.write("\3\2\2\2\u02c3\u02c4\7q\2\2\u02c4\u02c5\7x\2\2\u02c5\u02c6") + buf.write("\7g\2\2\u02c6\u02c7\7t\2\2\u02c7\u02c8\7t\2\2\u02c8\u02c9") + buf.write("\7k\2\2\u02c9\u02ca\7f\2\2\u02ca\u02cb\7g\2\2\u02cb\u00c2") + buf.write("\3\2\2\2\u02cc\u02cd\7k\2\2\u02cd\u02ce\7p\2\2\u02ce\u0383") + buf.write("\7v\2\2\u02cf\u02d0\7k\2\2\u02d0\u02d1\7p\2\2\u02d1\u02d2") + buf.write("\7v\2\2\u02d2\u0383\7:\2\2\u02d3\u02d4\7k\2\2\u02d4\u02d5") + buf.write("\7p\2\2\u02d5\u02d6\7v\2\2\u02d6\u02d7\7\63\2\2\u02d7") + buf.write("\u0383\78\2\2\u02d8\u02d9\7k\2\2\u02d9\u02da\7p\2\2\u02da") + buf.write("\u02db\7v\2\2\u02db\u02dc\7\64\2\2\u02dc\u0383\7\66\2") + buf.write("\2\u02dd\u02de\7k\2\2\u02de\u02df\7p\2\2\u02df\u02e0\7") + buf.write("v\2\2\u02e0\u02e1\7\65\2\2\u02e1\u0383\7\64\2\2\u02e2") + buf.write("\u02e3\7k\2\2\u02e3\u02e4\7p\2\2\u02e4\u02e5\7v\2\2\u02e5") + buf.write("\u02e6\7\66\2\2\u02e6\u0383\7\62\2\2\u02e7\u02e8\7k\2") + buf.write("\2\u02e8\u02e9\7p\2\2\u02e9\u02ea\7v\2\2\u02ea\u02eb\7") + buf.write("\66\2\2\u02eb\u0383\7:\2\2\u02ec\u02ed\7k\2\2\u02ed\u02ee") + buf.write("\7p\2\2\u02ee\u02ef\7v\2\2\u02ef\u02f0\7\67\2\2\u02f0") + buf.write("\u0383\78\2\2\u02f1\u02f2\7k\2\2\u02f2\u02f3\7p\2\2\u02f3") + buf.write("\u02f4\7v\2\2\u02f4\u02f5\78\2\2\u02f5\u0383\7\66\2\2") + buf.write("\u02f6\u02f7\7k\2\2\u02f7\u02f8\7p\2\2\u02f8\u02f9\7v") + buf.write("\2\2\u02f9\u02fa\79\2\2\u02fa\u0383\7\64\2\2\u02fb\u02fc") + buf.write("\7k\2\2\u02fc\u02fd\7p\2\2\u02fd\u02fe\7v\2\2\u02fe\u02ff") + buf.write("\7:\2\2\u02ff\u0383\7\62\2\2\u0300\u0301\7k\2\2\u0301") + buf.write("\u0302\7p\2\2\u0302\u0303\7v\2\2\u0303\u0304\7:\2\2\u0304") + buf.write("\u0383\7:\2\2\u0305\u0306\7k\2\2\u0306\u0307\7p\2\2\u0307") + buf.write("\u0308\7v\2\2\u0308\u0309\7;\2\2\u0309\u0383\78\2\2\u030a") + buf.write("\u030b\7k\2\2\u030b\u030c\7p\2\2\u030c\u030d\7v\2\2\u030d") + buf.write("\u030e\7\63\2\2\u030e\u030f\7\62\2\2\u030f\u0383\7\66") + buf.write("\2\2\u0310\u0311\7k\2\2\u0311\u0312\7p\2\2\u0312\u0313") + buf.write("\7v\2\2\u0313\u0314\7\63\2\2\u0314\u0315\7\63\2\2\u0315") + buf.write("\u0383\7\64\2\2\u0316\u0317\7k\2\2\u0317\u0318\7p\2\2") + buf.write("\u0318\u0319\7v\2\2\u0319\u031a\7\63\2\2\u031a\u031b\7") + buf.write("\64\2\2\u031b\u0383\7\62\2\2\u031c\u031d\7k\2\2\u031d") + buf.write("\u031e\7p\2\2\u031e\u031f\7v\2\2\u031f\u0320\7\63\2\2") + buf.write("\u0320\u0321\7\64\2\2\u0321\u0383\7:\2\2\u0322\u0323\7") + buf.write("k\2\2\u0323\u0324\7p\2\2\u0324\u0325\7v\2\2\u0325\u0326") + buf.write("\7\63\2\2\u0326\u0327\7\65\2\2\u0327\u0383\78\2\2\u0328") + buf.write("\u0329\7k\2\2\u0329\u032a\7p\2\2\u032a\u032b\7v\2\2\u032b") + buf.write("\u032c\7\63\2\2\u032c\u032d\7\66\2\2\u032d\u0383\7\66") + buf.write("\2\2\u032e\u032f\7k\2\2\u032f\u0330\7p\2\2\u0330\u0331") + buf.write("\7v\2\2\u0331\u0332\7\63\2\2\u0332\u0333\7\67\2\2\u0333") + buf.write("\u0383\7\64\2\2\u0334\u0335\7k\2\2\u0335\u0336\7p\2\2") + buf.write("\u0336\u0337\7v\2\2\u0337\u0338\7\63\2\2\u0338\u0339\7") + buf.write("8\2\2\u0339\u0383\7\62\2\2\u033a\u033b\7k\2\2\u033b\u033c") + buf.write("\7p\2\2\u033c\u033d\7v\2\2\u033d\u033e\7\63\2\2\u033e") + buf.write("\u033f\78\2\2\u033f\u0383\7:\2\2\u0340\u0341\7k\2\2\u0341") + buf.write("\u0342\7p\2\2\u0342\u0343\7v\2\2\u0343\u0344\7\63\2\2") + buf.write("\u0344\u0345\79\2\2\u0345\u0383\78\2\2\u0346\u0347\7k") + buf.write("\2\2\u0347\u0348\7p\2\2\u0348\u0349\7v\2\2\u0349\u034a") + buf.write("\7\63\2\2\u034a\u034b\7:\2\2\u034b\u0383\7\66\2\2\u034c") + buf.write("\u034d\7k\2\2\u034d\u034e\7p\2\2\u034e\u034f\7v\2\2\u034f") + buf.write("\u0350\7\63\2\2\u0350\u0351\7;\2\2\u0351\u0383\7\64\2") + buf.write("\2\u0352\u0353\7k\2\2\u0353\u0354\7p\2\2\u0354\u0355\7") + buf.write("v\2\2\u0355\u0356\7\64\2\2\u0356\u0357\7\62\2\2\u0357") + buf.write("\u0383\7\62\2\2\u0358\u0359\7k\2\2\u0359\u035a\7p\2\2") + buf.write("\u035a\u035b\7v\2\2\u035b\u035c\7\64\2\2\u035c\u035d\7") + buf.write("\62\2\2\u035d\u0383\7:\2\2\u035e\u035f\7k\2\2\u035f\u0360") + buf.write("\7p\2\2\u0360\u0361\7v\2\2\u0361\u0362\7\64\2\2\u0362") + buf.write("\u0363\7\63\2\2\u0363\u0383\78\2\2\u0364\u0365\7k\2\2") + buf.write("\u0365\u0366\7p\2\2\u0366\u0367\7v\2\2\u0367\u0368\7\64") + buf.write("\2\2\u0368\u0369\7\64\2\2\u0369\u0383\7\66\2\2\u036a\u036b") + buf.write("\7k\2\2\u036b\u036c\7p\2\2\u036c\u036d\7v\2\2\u036d\u036e") + buf.write("\7\64\2\2\u036e\u036f\7\65\2\2\u036f\u0383\7\64\2\2\u0370") + buf.write("\u0371\7k\2\2\u0371\u0372\7p\2\2\u0372\u0373\7v\2\2\u0373") + buf.write("\u0374\7\64\2\2\u0374\u0375\7\66\2\2\u0375\u0383\7\62") + buf.write("\2\2\u0376\u0377\7k\2\2\u0377\u0378\7p\2\2\u0378\u0379") + buf.write("\7v\2\2\u0379\u037a\7\64\2\2\u037a\u037b\7\66\2\2\u037b") + buf.write("\u0383\7:\2\2\u037c\u037d\7k\2\2\u037d\u037e\7p\2\2\u037e") + buf.write("\u037f\7v\2\2\u037f\u0380\7\64\2\2\u0380\u0381\7\67\2") + buf.write("\2\u0381\u0383\78\2\2\u0382\u02cc\3\2\2\2\u0382\u02cf") + buf.write("\3\2\2\2\u0382\u02d3\3\2\2\2\u0382\u02d8\3\2\2\2\u0382") + buf.write("\u02dd\3\2\2\2\u0382\u02e2\3\2\2\2\u0382\u02e7\3\2\2\2") + buf.write("\u0382\u02ec\3\2\2\2\u0382\u02f1\3\2\2\2\u0382\u02f6\3") + buf.write("\2\2\2\u0382\u02fb\3\2\2\2\u0382\u0300\3\2\2\2\u0382\u0305") + buf.write("\3\2\2\2\u0382\u030a\3\2\2\2\u0382\u0310\3\2\2\2\u0382") + buf.write("\u0316\3\2\2\2\u0382\u031c\3\2\2\2\u0382\u0322\3\2\2\2") + buf.write("\u0382\u0328\3\2\2\2\u0382\u032e\3\2\2\2\u0382\u0334\3") + buf.write("\2\2\2\u0382\u033a\3\2\2\2\u0382\u0340\3\2\2\2\u0382\u0346") + buf.write("\3\2\2\2\u0382\u034c\3\2\2\2\u0382\u0352\3\2\2\2\u0382") + buf.write("\u0358\3\2\2\2\u0382\u035e\3\2\2\2\u0382\u0364\3\2\2\2") + buf.write("\u0382\u036a\3\2\2\2\u0382\u0370\3\2\2\2\u0382\u0376\3") + buf.write("\2\2\2\u0382\u037c\3\2\2\2\u0383\u00c4\3\2\2\2\u0384\u0385") + buf.write("\7w\2\2\u0385\u0386\7k\2\2\u0386\u0387\7p\2\2\u0387\u045c") + buf.write("\7v\2\2\u0388\u0389\7w\2\2\u0389\u038a\7k\2\2\u038a\u038b") + buf.write("\7p\2\2\u038b\u038c\7v\2\2\u038c\u045c\7:\2\2\u038d\u038e") + buf.write("\7w\2\2\u038e\u038f\7k\2\2\u038f\u0390\7p\2\2\u0390\u0391") + buf.write("\7v\2\2\u0391\u0392\7\63\2\2\u0392\u045c\78\2\2\u0393") + buf.write("\u0394\7w\2\2\u0394\u0395\7k\2\2\u0395\u0396\7p\2\2\u0396") + buf.write("\u0397\7v\2\2\u0397\u0398\7\64\2\2\u0398\u045c\7\66\2") + buf.write("\2\u0399\u039a\7w\2\2\u039a\u039b\7k\2\2\u039b\u039c\7") + buf.write("p\2\2\u039c\u039d\7v\2\2\u039d\u039e\7\65\2\2\u039e\u045c") + buf.write("\7\64\2\2\u039f\u03a0\7w\2\2\u03a0\u03a1\7k\2\2\u03a1") + buf.write("\u03a2\7p\2\2\u03a2\u03a3\7v\2\2\u03a3\u03a4\7\66\2\2") + buf.write("\u03a4\u045c\7\62\2\2\u03a5\u03a6\7w\2\2\u03a6\u03a7\7") + buf.write("k\2\2\u03a7\u03a8\7p\2\2\u03a8\u03a9\7v\2\2\u03a9\u03aa") + buf.write("\7\66\2\2\u03aa\u045c\7:\2\2\u03ab\u03ac\7w\2\2\u03ac") + buf.write("\u03ad\7k\2\2\u03ad\u03ae\7p\2\2\u03ae\u03af\7v\2\2\u03af") + buf.write("\u03b0\7\67\2\2\u03b0\u045c\78\2\2\u03b1\u03b2\7w\2\2") + buf.write("\u03b2\u03b3\7k\2\2\u03b3\u03b4\7p\2\2\u03b4\u03b5\7v") + buf.write("\2\2\u03b5\u03b6\78\2\2\u03b6\u045c\7\66\2\2\u03b7\u03b8") + buf.write("\7w\2\2\u03b8\u03b9\7k\2\2\u03b9\u03ba\7p\2\2\u03ba\u03bb") + buf.write("\7v\2\2\u03bb\u03bc\79\2\2\u03bc\u045c\7\64\2\2\u03bd") + buf.write("\u03be\7w\2\2\u03be\u03bf\7k\2\2\u03bf\u03c0\7p\2\2\u03c0") + buf.write("\u03c1\7v\2\2\u03c1\u03c2\7:\2\2\u03c2\u045c\7\62\2\2") + buf.write("\u03c3\u03c4\7w\2\2\u03c4\u03c5\7k\2\2\u03c5\u03c6\7p") + buf.write("\2\2\u03c6\u03c7\7v\2\2\u03c7\u03c8\7:\2\2\u03c8\u045c") + buf.write("\7:\2\2\u03c9\u03ca\7w\2\2\u03ca\u03cb\7k\2\2\u03cb\u03cc") + buf.write("\7p\2\2\u03cc\u03cd\7v\2\2\u03cd\u03ce\7;\2\2\u03ce\u045c") + buf.write("\78\2\2\u03cf\u03d0\7w\2\2\u03d0\u03d1\7k\2\2\u03d1\u03d2") + buf.write("\7p\2\2\u03d2\u03d3\7v\2\2\u03d3\u03d4\7\63\2\2\u03d4") + buf.write("\u03d5\7\62\2\2\u03d5\u045c\7\66\2\2\u03d6\u03d7\7w\2") + buf.write("\2\u03d7\u03d8\7k\2\2\u03d8\u03d9\7p\2\2\u03d9\u03da\7") + buf.write("v\2\2\u03da\u03db\7\63\2\2\u03db\u03dc\7\63\2\2\u03dc") + buf.write("\u045c\7\64\2\2\u03dd\u03de\7w\2\2\u03de\u03df\7k\2\2") + buf.write("\u03df\u03e0\7p\2\2\u03e0\u03e1\7v\2\2\u03e1\u03e2\7\63") + buf.write("\2\2\u03e2\u03e3\7\64\2\2\u03e3\u045c\7\62\2\2\u03e4\u03e5") + buf.write("\7w\2\2\u03e5\u03e6\7k\2\2\u03e6\u03e7\7p\2\2\u03e7\u03e8") + buf.write("\7v\2\2\u03e8\u03e9\7\63\2\2\u03e9\u03ea\7\64\2\2\u03ea") + buf.write("\u045c\7:\2\2\u03eb\u03ec\7w\2\2\u03ec\u03ed\7k\2\2\u03ed") + buf.write("\u03ee\7p\2\2\u03ee\u03ef\7v\2\2\u03ef\u03f0\7\63\2\2") + buf.write("\u03f0\u03f1\7\65\2\2\u03f1\u045c\78\2\2\u03f2\u03f3\7") + buf.write("w\2\2\u03f3\u03f4\7k\2\2\u03f4\u03f5\7p\2\2\u03f5\u03f6") + buf.write("\7v\2\2\u03f6\u03f7\7\63\2\2\u03f7\u03f8\7\66\2\2\u03f8") + buf.write("\u045c\7\66\2\2\u03f9\u03fa\7w\2\2\u03fa\u03fb\7k\2\2") + buf.write("\u03fb\u03fc\7p\2\2\u03fc\u03fd\7v\2\2\u03fd\u03fe\7\63") + buf.write("\2\2\u03fe\u03ff\7\67\2\2\u03ff\u045c\7\64\2\2\u0400\u0401") + buf.write("\7w\2\2\u0401\u0402\7k\2\2\u0402\u0403\7p\2\2\u0403\u0404") + buf.write("\7v\2\2\u0404\u0405\7\63\2\2\u0405\u0406\78\2\2\u0406") + buf.write("\u045c\7\62\2\2\u0407\u0408\7w\2\2\u0408\u0409\7k\2\2") + buf.write("\u0409\u040a\7p\2\2\u040a\u040b\7v\2\2\u040b\u040c\7\63") + buf.write("\2\2\u040c\u040d\78\2\2\u040d\u045c\7:\2\2\u040e\u040f") + buf.write("\7w\2\2\u040f\u0410\7k\2\2\u0410\u0411\7p\2\2\u0411\u0412") + buf.write("\7v\2\2\u0412\u0413\7\63\2\2\u0413\u0414\79\2\2\u0414") + buf.write("\u045c\78\2\2\u0415\u0416\7w\2\2\u0416\u0417\7k\2\2\u0417") + buf.write("\u0418\7p\2\2\u0418\u0419\7v\2\2\u0419\u041a\7\63\2\2") + buf.write("\u041a\u041b\7:\2\2\u041b\u045c\7\66\2\2\u041c\u041d\7") + buf.write("w\2\2\u041d\u041e\7k\2\2\u041e\u041f\7p\2\2\u041f\u0420") + buf.write("\7v\2\2\u0420\u0421\7\63\2\2\u0421\u0422\7;\2\2\u0422") + buf.write("\u045c\7\64\2\2\u0423\u0424\7w\2\2\u0424\u0425\7k\2\2") + buf.write("\u0425\u0426\7p\2\2\u0426\u0427\7v\2\2\u0427\u0428\7\64") + buf.write("\2\2\u0428\u0429\7\62\2\2\u0429\u045c\7\62\2\2\u042a\u042b") + buf.write("\7w\2\2\u042b\u042c\7k\2\2\u042c\u042d\7p\2\2\u042d\u042e") + buf.write("\7v\2\2\u042e\u042f\7\64\2\2\u042f\u0430\7\62\2\2\u0430") + buf.write("\u045c\7:\2\2\u0431\u0432\7w\2\2\u0432\u0433\7k\2\2\u0433") + buf.write("\u0434\7p\2\2\u0434\u0435\7v\2\2\u0435\u0436\7\64\2\2") + buf.write("\u0436\u0437\7\63\2\2\u0437\u045c\78\2\2\u0438\u0439\7") + buf.write("w\2\2\u0439\u043a\7k\2\2\u043a\u043b\7p\2\2\u043b\u043c") + buf.write("\7v\2\2\u043c\u043d\7\64\2\2\u043d\u043e\7\64\2\2\u043e") + buf.write("\u045c\7\66\2\2\u043f\u0440\7w\2\2\u0440\u0441\7k\2\2") + buf.write("\u0441\u0442\7p\2\2\u0442\u0443\7v\2\2\u0443\u0444\7\64") + buf.write("\2\2\u0444\u0445\7\65\2\2\u0445\u045c\7\64\2\2\u0446\u0447") + buf.write("\7w\2\2\u0447\u0448\7k\2\2\u0448\u0449\7p\2\2\u0449\u044a") + buf.write("\7v\2\2\u044a\u044b\7\64\2\2\u044b\u044c\7\66\2\2\u044c") + buf.write("\u045c\7\62\2\2\u044d\u044e\7w\2\2\u044e\u044f\7k\2\2") + buf.write("\u044f\u0450\7p\2\2\u0450\u0451\7v\2\2\u0451\u0452\7\64") + buf.write("\2\2\u0452\u0453\7\66\2\2\u0453\u045c\7:\2\2\u0454\u0455") + buf.write("\7w\2\2\u0455\u0456\7k\2\2\u0456\u0457\7p\2\2\u0457\u0458") + buf.write("\7v\2\2\u0458\u0459\7\64\2\2\u0459\u045a\7\67\2\2\u045a") + buf.write("\u045c\78\2\2\u045b\u0384\3\2\2\2\u045b\u0388\3\2\2\2") + buf.write("\u045b\u038d\3\2\2\2\u045b\u0393\3\2\2\2\u045b\u0399\3") + buf.write("\2\2\2\u045b\u039f\3\2\2\2\u045b\u03a5\3\2\2\2\u045b\u03ab") + buf.write("\3\2\2\2\u045b\u03b1\3\2\2\2\u045b\u03b7\3\2\2\2\u045b") + buf.write("\u03bd\3\2\2\2\u045b\u03c3\3\2\2\2\u045b\u03c9\3\2\2\2") + buf.write("\u045b\u03cf\3\2\2\2\u045b\u03d6\3\2\2\2\u045b\u03dd\3") + buf.write("\2\2\2\u045b\u03e4\3\2\2\2\u045b\u03eb\3\2\2\2\u045b\u03f2") + buf.write("\3\2\2\2\u045b\u03f9\3\2\2\2\u045b\u0400\3\2\2\2\u045b") + buf.write("\u0407\3\2\2\2\u045b\u040e\3\2\2\2\u045b\u0415\3\2\2\2") + buf.write("\u045b\u041c\3\2\2\2\u045b\u0423\3\2\2\2\u045b\u042a\3") + buf.write("\2\2\2\u045b\u0431\3\2\2\2\u045b\u0438\3\2\2\2\u045b\u043f") + buf.write("\3\2\2\2\u045b\u0446\3\2\2\2\u045b\u044d\3\2\2\2\u045b") + buf.write("\u0454\3\2\2\2\u045c\u00c6\3\2\2\2\u045d\u045e\7d\2\2") + buf.write("\u045e\u045f\7{\2\2\u045f\u0460\7v\2\2\u0460\u0461\7g") + buf.write("\2\2\u0461\u053a\7u\2\2\u0462\u0463\7d\2\2\u0463\u0464") + buf.write("\7{\2\2\u0464\u0465\7v\2\2\u0465\u0466\7g\2\2\u0466\u0467") + buf.write("\7u\2\2\u0467\u053a\7\63\2\2\u0468\u0469\7d\2\2\u0469") + buf.write("\u046a\7{\2\2\u046a\u046b\7v\2\2\u046b\u046c\7g\2\2\u046c") + buf.write("\u046d\7u\2\2\u046d\u053a\7\64\2\2\u046e\u046f\7d\2\2") + buf.write("\u046f\u0470\7{\2\2\u0470\u0471\7v\2\2\u0471\u0472\7g") + buf.write("\2\2\u0472\u0473\7u\2\2\u0473\u053a\7\65\2\2\u0474\u0475") + buf.write("\7d\2\2\u0475\u0476\7{\2\2\u0476\u0477\7v\2\2\u0477\u0478") + buf.write("\7g\2\2\u0478\u0479\7u\2\2\u0479\u053a\7\66\2\2\u047a") + buf.write("\u047b\7d\2\2\u047b\u047c\7{\2\2\u047c\u047d\7v\2\2\u047d") + buf.write("\u047e\7g\2\2\u047e\u047f\7u\2\2\u047f\u053a\7\67\2\2") + buf.write("\u0480\u0481\7d\2\2\u0481\u0482\7{\2\2\u0482\u0483\7v") + buf.write("\2\2\u0483\u0484\7g\2\2\u0484\u0485\7u\2\2\u0485\u053a") + buf.write("\78\2\2\u0486\u0487\7d\2\2\u0487\u0488\7{\2\2\u0488\u0489") + buf.write("\7v\2\2\u0489\u048a\7g\2\2\u048a\u048b\7u\2\2\u048b\u053a") + buf.write("\79\2\2\u048c\u048d\7d\2\2\u048d\u048e\7{\2\2\u048e\u048f") + buf.write("\7v\2\2\u048f\u0490\7g\2\2\u0490\u0491\7u\2\2\u0491\u053a") + buf.write("\7:\2\2\u0492\u0493\7d\2\2\u0493\u0494\7{\2\2\u0494\u0495") + buf.write("\7v\2\2\u0495\u0496\7g\2\2\u0496\u0497\7u\2\2\u0497\u053a") + buf.write("\7;\2\2\u0498\u0499\7d\2\2\u0499\u049a\7{\2\2\u049a\u049b") + buf.write("\7v\2\2\u049b\u049c\7g\2\2\u049c\u049d\7u\2\2\u049d\u049e") + buf.write("\7\63\2\2\u049e\u053a\7\62\2\2\u049f\u04a0\7d\2\2\u04a0") + buf.write("\u04a1\7{\2\2\u04a1\u04a2\7v\2\2\u04a2\u04a3\7g\2\2\u04a3") + buf.write("\u04a4\7u\2\2\u04a4\u04a5\7\63\2\2\u04a5\u053a\7\63\2") + buf.write("\2\u04a6\u04a7\7d\2\2\u04a7\u04a8\7{\2\2\u04a8\u04a9\7") + buf.write("v\2\2\u04a9\u04aa\7g\2\2\u04aa\u04ab\7u\2\2\u04ab\u04ac") + buf.write("\7\63\2\2\u04ac\u053a\7\64\2\2\u04ad\u04ae\7d\2\2\u04ae") + buf.write("\u04af\7{\2\2\u04af\u04b0\7v\2\2\u04b0\u04b1\7g\2\2\u04b1") + buf.write("\u04b2\7u\2\2\u04b2\u04b3\7\63\2\2\u04b3\u053a\7\65\2") + buf.write("\2\u04b4\u04b5\7d\2\2\u04b5\u04b6\7{\2\2\u04b6\u04b7\7") + buf.write("v\2\2\u04b7\u04b8\7g\2\2\u04b8\u04b9\7u\2\2\u04b9\u04ba") + buf.write("\7\63\2\2\u04ba\u053a\7\66\2\2\u04bb\u04bc\7d\2\2\u04bc") + buf.write("\u04bd\7{\2\2\u04bd\u04be\7v\2\2\u04be\u04bf\7g\2\2\u04bf") + buf.write("\u04c0\7u\2\2\u04c0\u04c1\7\63\2\2\u04c1\u053a\7\67\2") + buf.write("\2\u04c2\u04c3\7d\2\2\u04c3\u04c4\7{\2\2\u04c4\u04c5\7") + buf.write("v\2\2\u04c5\u04c6\7g\2\2\u04c6\u04c7\7u\2\2\u04c7\u04c8") + buf.write("\7\63\2\2\u04c8\u053a\78\2\2\u04c9\u04ca\7d\2\2\u04ca") + buf.write("\u04cb\7{\2\2\u04cb\u04cc\7v\2\2\u04cc\u04cd\7g\2\2\u04cd") + buf.write("\u04ce\7u\2\2\u04ce\u04cf\7\63\2\2\u04cf\u053a\79\2\2") + buf.write("\u04d0\u04d1\7d\2\2\u04d1\u04d2\7{\2\2\u04d2\u04d3\7v") + buf.write("\2\2\u04d3\u04d4\7g\2\2\u04d4\u04d5\7u\2\2\u04d5\u04d6") + buf.write("\7\63\2\2\u04d6\u053a\7:\2\2\u04d7\u04d8\7d\2\2\u04d8") + buf.write("\u04d9\7{\2\2\u04d9\u04da\7v\2\2\u04da\u04db\7g\2\2\u04db") + buf.write("\u04dc\7u\2\2\u04dc\u04dd\7\63\2\2\u04dd\u053a\7;\2\2") + buf.write("\u04de\u04df\7d\2\2\u04df\u04e0\7{\2\2\u04e0\u04e1\7v") + buf.write("\2\2\u04e1\u04e2\7g\2\2\u04e2\u04e3\7u\2\2\u04e3\u04e4") + buf.write("\7\64\2\2\u04e4\u053a\7\62\2\2\u04e5\u04e6\7d\2\2\u04e6") + buf.write("\u04e7\7{\2\2\u04e7\u04e8\7v\2\2\u04e8\u04e9\7g\2\2\u04e9") + buf.write("\u04ea\7u\2\2\u04ea\u04eb\7\64\2\2\u04eb\u053a\7\63\2") + buf.write("\2\u04ec\u04ed\7d\2\2\u04ed\u04ee\7{\2\2\u04ee\u04ef\7") + buf.write("v\2\2\u04ef\u04f0\7g\2\2\u04f0\u04f1\7u\2\2\u04f1\u04f2") + buf.write("\7\64\2\2\u04f2\u053a\7\64\2\2\u04f3\u04f4\7d\2\2\u04f4") + buf.write("\u04f5\7{\2\2\u04f5\u04f6\7v\2\2\u04f6\u04f7\7g\2\2\u04f7") + buf.write("\u04f8\7u\2\2\u04f8\u04f9\7\64\2\2\u04f9\u053a\7\65\2") + buf.write("\2\u04fa\u04fb\7d\2\2\u04fb\u04fc\7{\2\2\u04fc\u04fd\7") + buf.write("v\2\2\u04fd\u04fe\7g\2\2\u04fe\u04ff\7u\2\2\u04ff\u0500") + buf.write("\7\64\2\2\u0500\u053a\7\66\2\2\u0501\u0502\7d\2\2\u0502") + buf.write("\u0503\7{\2\2\u0503\u0504\7v\2\2\u0504\u0505\7g\2\2\u0505") + buf.write("\u0506\7u\2\2\u0506\u0507\7\64\2\2\u0507\u053a\7\67\2") + buf.write("\2\u0508\u0509\7d\2\2\u0509\u050a\7{\2\2\u050a\u050b\7") + buf.write("v\2\2\u050b\u050c\7g\2\2\u050c\u050d\7u\2\2\u050d\u050e") + buf.write("\7\64\2\2\u050e\u053a\78\2\2\u050f\u0510\7d\2\2\u0510") + buf.write("\u0511\7{\2\2\u0511\u0512\7v\2\2\u0512\u0513\7g\2\2\u0513") + buf.write("\u0514\7u\2\2\u0514\u0515\7\64\2\2\u0515\u053a\79\2\2") + buf.write("\u0516\u0517\7d\2\2\u0517\u0518\7{\2\2\u0518\u0519\7v") + buf.write("\2\2\u0519\u051a\7g\2\2\u051a\u051b\7u\2\2\u051b\u051c") + buf.write("\7\64\2\2\u051c\u053a\7:\2\2\u051d\u051e\7d\2\2\u051e") + buf.write("\u051f\7{\2\2\u051f\u0520\7v\2\2\u0520\u0521\7g\2\2\u0521") + buf.write("\u0522\7u\2\2\u0522\u0523\7\64\2\2\u0523\u053a\7;\2\2") + buf.write("\u0524\u0525\7d\2\2\u0525\u0526\7{\2\2\u0526\u0527\7v") + buf.write("\2\2\u0527\u0528\7g\2\2\u0528\u0529\7u\2\2\u0529\u052a") + buf.write("\7\65\2\2\u052a\u053a\7\62\2\2\u052b\u052c\7d\2\2\u052c") + buf.write("\u052d\7{\2\2\u052d\u052e\7v\2\2\u052e\u052f\7g\2\2\u052f") + buf.write("\u0530\7u\2\2\u0530\u0531\7\65\2\2\u0531\u053a\7\63\2") + buf.write("\2\u0532\u0533\7d\2\2\u0533\u0534\7{\2\2\u0534\u0535\7") + buf.write("v\2\2\u0535\u0536\7g\2\2\u0536\u0537\7u\2\2\u0537\u0538") + buf.write("\7\65\2\2\u0538\u053a\7\64\2\2\u0539\u045d\3\2\2\2\u0539") + buf.write("\u0462\3\2\2\2\u0539\u0468\3\2\2\2\u0539\u046e\3\2\2\2") + buf.write("\u0539\u0474\3\2\2\2\u0539\u047a\3\2\2\2\u0539\u0480\3") + buf.write("\2\2\2\u0539\u0486\3\2\2\2\u0539\u048c\3\2\2\2\u0539\u0492") + buf.write("\3\2\2\2\u0539\u0498\3\2\2\2\u0539\u049f\3\2\2\2\u0539") + buf.write("\u04a6\3\2\2\2\u0539\u04ad\3\2\2\2\u0539\u04b4\3\2\2\2") + buf.write("\u0539\u04bb\3\2\2\2\u0539\u04c2\3\2\2\2\u0539\u04c9\3") + buf.write("\2\2\2\u0539\u04d0\3\2\2\2\u0539\u04d7\3\2\2\2\u0539\u04de") + buf.write("\3\2\2\2\u0539\u04e5\3\2\2\2\u0539\u04ec\3\2\2\2\u0539") + buf.write("\u04f3\3\2\2\2\u0539\u04fa\3\2\2\2\u0539\u0501\3\2\2\2") + buf.write("\u0539\u0508\3\2\2\2\u0539\u050f\3\2\2\2\u0539\u0516\3") + buf.write("\2\2\2\u0539\u051d\3\2\2\2\u0539\u0524\3\2\2\2\u0539\u052b") + buf.write("\3\2\2\2\u0539\u0532\3\2\2\2\u053a\u00c8\3\2\2\2\u053b") + buf.write("\u053c\7h\2\2\u053c\u053d\7k\2\2\u053d\u053e\7z\2\2\u053e") + buf.write("\u053f\7g\2\2\u053f\u0552\7f\2\2\u0540\u0541\7h\2\2\u0541") + buf.write("\u0542\7k\2\2\u0542\u0543\7z\2\2\u0543\u0544\7g\2\2\u0544") + buf.write("\u0545\7f\2\2\u0545\u0547\3\2\2\2\u0546\u0548\t\2\2\2") + buf.write("\u0547\u0546\3\2\2\2\u0548\u0549\3\2\2\2\u0549\u0547\3") + buf.write("\2\2\2\u0549\u054a\3\2\2\2\u054a\u054b\3\2\2\2\u054b\u054d") + buf.write("\7z\2\2\u054c\u054e\t\2\2\2\u054d\u054c\3\2\2\2\u054e") + buf.write("\u054f\3\2\2\2\u054f\u054d\3\2\2\2\u054f\u0550\3\2\2\2") + buf.write("\u0550\u0552\3\2\2\2\u0551\u053b\3\2\2\2\u0551\u0540\3") + buf.write("\2\2\2\u0552\u00ca\3\2\2\2\u0553\u0554\7w\2\2\u0554\u0555") + buf.write("\7h\2\2\u0555\u0556\7k\2\2\u0556\u0557\7z\2\2\u0557\u0558") + buf.write("\7g\2\2\u0558\u056c\7f\2\2\u0559\u055a\7w\2\2\u055a\u055b") + buf.write("\7h\2\2\u055b\u055c\7k\2\2\u055c\u055d\7z\2\2\u055d\u055e") + buf.write("\7g\2\2\u055e\u055f\7f\2\2\u055f\u0561\3\2\2\2\u0560\u0562") + buf.write("\t\2\2\2\u0561\u0560\3\2\2\2\u0562\u0563\3\2\2\2\u0563") + buf.write("\u0561\3\2\2\2\u0563\u0564\3\2\2\2\u0564\u0565\3\2\2\2") + buf.write("\u0565\u0567\7z\2\2\u0566\u0568\t\2\2\2\u0567\u0566\3") + buf.write("\2\2\2\u0568\u0569\3\2\2\2\u0569\u0567\3\2\2\2\u0569\u056a") + buf.write("\3\2\2\2\u056a\u056c\3\2\2\2\u056b\u0553\3\2\2\2\u056b") + buf.write("\u0559\3\2\2\2\u056c\u00cc\3\2\2\2\u056d\u056e\7v\2\2") + buf.write("\u056e\u056f\7t\2\2\u056f\u0570\7w\2\2\u0570\u0577\7g") + buf.write("\2\2\u0571\u0572\7h\2\2\u0572\u0573\7c\2\2\u0573\u0574") + buf.write("\7n\2\2\u0574\u0575\7u\2\2\u0575\u0577\7g\2\2\u0576\u056d") + buf.write("\3\2\2\2\u0576\u0571\3\2\2\2\u0577\u00ce\3\2\2\2\u0578") + buf.write("\u057f\5\u00d1i\2\u0579\u057b\5\u00d1i\2\u057a\u0579\3") + buf.write("\2\2\2\u057a\u057b\3\2\2\2\u057b\u057c\3\2\2\2\u057c\u057d") + buf.write("\7\60\2\2\u057d\u057f\5\u00d1i\2\u057e\u0578\3\2\2\2\u057e") + buf.write("\u057a\3\2\2\2\u057f\u0582\3\2\2\2\u0580\u0581\t\3\2\2") + buf.write("\u0581\u0583\5\u00d1i\2\u0582\u0580\3\2\2\2\u0582\u0583") + buf.write("\3\2\2\2\u0583\u00d0\3\2\2\2\u0584\u058b\t\2\2\2\u0585") + buf.write("\u0587\7a\2\2\u0586\u0585\3\2\2\2\u0586\u0587\3\2\2\2") + buf.write("\u0587\u0588\3\2\2\2\u0588\u058a\t\2\2\2\u0589\u0586\3") + buf.write("\2\2\2\u058a\u058d\3\2\2\2\u058b\u0589\3\2\2\2\u058b\u058c") + buf.write("\3\2\2\2\u058c\u00d2\3\2\2\2\u058d\u058b\3\2\2\2\u058e") + buf.write("\u058f\7\62\2\2\u058f\u0590\t\4\2\2\u0590\u0591\5\u00d5") + buf.write("k\2\u0591\u00d4\3\2\2\2\u0592\u0599\5\u00ddo\2\u0593\u0595") + buf.write("\7a\2\2\u0594\u0593\3\2\2\2\u0594\u0595\3\2\2\2\u0595") + buf.write("\u0596\3\2\2\2\u0596\u0598\5\u00ddo\2\u0597\u0594\3\2") + buf.write("\2\2\u0598\u059b\3\2\2\2\u0599\u0597\3\2\2\2\u0599\u059a") + buf.write("\3\2\2\2\u059a\u00d6\3\2\2\2\u059b\u0599\3\2\2\2\u059c") + buf.write("\u059d\7y\2\2\u059d\u059e\7g\2\2\u059e\u05d5\7k\2\2\u059f") + buf.write("\u05a0\7i\2\2\u05a0\u05a1\7y\2\2\u05a1\u05a2\7g\2\2\u05a2") + buf.write("\u05d5\7k\2\2\u05a3\u05a4\7u\2\2\u05a4\u05a5\7|\2\2\u05a5") + buf.write("\u05a6\7c\2\2\u05a6\u05a7\7d\2\2\u05a7\u05d5\7q\2\2\u05a8") + buf.write("\u05a9\7h\2\2\u05a9\u05aa\7k\2\2\u05aa\u05ab\7p\2\2\u05ab") + buf.write("\u05ac\7p\2\2\u05ac\u05ad\7g\2\2\u05ad\u05d5\7{\2\2\u05ae") + buf.write("\u05af\7g\2\2\u05af\u05b0\7v\2\2\u05b0\u05b1\7j\2\2\u05b1") + buf.write("\u05b2\7g\2\2\u05b2\u05d5\7t\2\2\u05b3\u05b4\7u\2\2\u05b4") + buf.write("\u05b5\7g\2\2\u05b5\u05b6\7e\2\2\u05b6\u05b7\7q\2\2\u05b7") + buf.write("\u05b8\7p\2\2\u05b8\u05b9\7f\2\2\u05b9\u05d5\7u\2\2\u05ba") + buf.write("\u05bb\7o\2\2\u05bb\u05bc\7k\2\2\u05bc\u05bd\7p\2\2\u05bd") + buf.write("\u05be\7w\2\2\u05be\u05bf\7v\2\2\u05bf\u05c0\7g\2\2\u05c0") + buf.write("\u05d5\7u\2\2\u05c1\u05c2\7j\2\2\u05c2\u05c3\7q\2\2\u05c3") + buf.write("\u05c4\7w\2\2\u05c4\u05c5\7t\2\2\u05c5\u05d5\7u\2\2\u05c6") + buf.write("\u05c7\7f\2\2\u05c7\u05c8\7c\2\2\u05c8\u05c9\7{\2\2\u05c9") + buf.write("\u05d5\7u\2\2\u05ca\u05cb\7y\2\2\u05cb\u05cc\7g\2\2\u05cc") + buf.write("\u05cd\7g\2\2\u05cd\u05ce\7m\2\2\u05ce\u05d5\7u\2\2\u05cf") + buf.write("\u05d0\7{\2\2\u05d0\u05d1\7g\2\2\u05d1\u05d2\7c\2\2\u05d2") + buf.write("\u05d3\7t\2\2\u05d3\u05d5\7u\2\2\u05d4\u059c\3\2\2\2\u05d4") + buf.write("\u059f\3\2\2\2\u05d4\u05a3\3\2\2\2\u05d4\u05a8\3\2\2\2") + buf.write("\u05d4\u05ae\3\2\2\2\u05d4\u05b3\3\2\2\2\u05d4\u05ba\3") + buf.write("\2\2\2\u05d4\u05c1\3\2\2\2\u05d4\u05c6\3\2\2\2\u05d4\u05ca") + buf.write("\3\2\2\2\u05d4\u05cf\3\2\2\2\u05d5\u00d8\3\2\2\2\u05d6") + buf.write("\u05d7\7j\2\2\u05d7\u05d8\7g\2\2\u05d8\u05d9\7z\2\2\u05d9") + buf.write("\u05e4\3\2\2\2\u05da\u05dc\7$\2\2\u05db\u05dd\5\u00d5") + buf.write("k\2\u05dc\u05db\3\2\2\2\u05dc\u05dd\3\2\2\2\u05dd\u05de") + buf.write("\3\2\2\2\u05de\u05e5\7$\2\2\u05df\u05e1\7)\2\2\u05e0\u05e2") + buf.write("\5\u00d5k\2\u05e1\u05e0\3\2\2\2\u05e1\u05e2\3\2\2\2\u05e2") + buf.write("\u05e3\3\2\2\2\u05e3\u05e5\7)\2\2\u05e4\u05da\3\2\2\2") + buf.write("\u05e4\u05df\3\2\2\2\u05e5\u00da\3\2\2\2\u05e6\u05e7\5") + buf.write("\u00ddo\2\u05e7\u05e8\5\u00ddo\2\u05e8\u00dc\3\2\2\2\u05e9") + buf.write("\u05ea\t\5\2\2\u05ea\u00de\3\2\2\2\u05eb\u05ec\7c\2\2") + buf.write("\u05ec\u05ed\7d\2\2\u05ed\u05ee\7u\2\2\u05ee\u05ef\7v") + buf.write("\2\2\u05ef\u05f0\7t\2\2\u05f0\u05f1\7c\2\2\u05f1\u05f2") + buf.write("\7e\2\2\u05f2\u0644\7v\2\2\u05f3\u05f4\7c\2\2\u05f4\u05f5") + buf.write("\7h\2\2\u05f5\u05f6\7v\2\2\u05f6\u05f7\7g\2\2\u05f7\u0644") + buf.write("\7t\2\2\u05f8\u05f9\7e\2\2\u05f9\u05fa\7c\2\2\u05fa\u05fb") + buf.write("\7u\2\2\u05fb\u0644\7g\2\2\u05fc\u05fd\7e\2\2\u05fd\u05fe") + buf.write("\7c\2\2\u05fe\u05ff\7v\2\2\u05ff\u0600\7e\2\2\u0600\u0644") + buf.write("\7j\2\2\u0601\u0602\7f\2\2\u0602\u0603\7g\2\2\u0603\u0604") + buf.write("\7h\2\2\u0604\u0605\7c\2\2\u0605\u0606\7w\2\2\u0606\u0607") + buf.write("\7n\2\2\u0607\u0644\7v\2\2\u0608\u0609\7h\2\2\u0609\u060a") + buf.write("\7k\2\2\u060a\u060b\7p\2\2\u060b\u060c\7c\2\2\u060c\u0644") + buf.write("\7n\2\2\u060d\u060e\7k\2\2\u060e\u0644\7p\2\2\u060f\u0610") + buf.write("\7k\2\2\u0610\u0611\7p\2\2\u0611\u0612\7n\2\2\u0612\u0613") + buf.write("\7k\2\2\u0613\u0614\7p\2\2\u0614\u0644\7g\2\2\u0615\u0616") + buf.write("\7n\2\2\u0616\u0617\7g\2\2\u0617\u0644\7v\2\2\u0618\u0619") + buf.write("\7o\2\2\u0619\u061a\7c\2\2\u061a\u061b\7v\2\2\u061b\u061c") + buf.write("\7e\2\2\u061c\u0644\7j\2\2\u061d\u061e\7p\2\2\u061e\u061f") + buf.write("\7w\2\2\u061f\u0620\7n\2\2\u0620\u0644\7n\2\2\u0621\u0622") + buf.write("\7q\2\2\u0622\u0644\7h\2\2\u0623\u0624\7t\2\2\u0624\u0625") + buf.write("\7g\2\2\u0625\u0626\7n\2\2\u0626\u0627\7q\2\2\u0627\u0628") + buf.write("\7e\2\2\u0628\u0629\7c\2\2\u0629\u062a\7v\2\2\u062a\u062b") + buf.write("\7c\2\2\u062b\u062c\7d\2\2\u062c\u062d\7n\2\2\u062d\u0644") + buf.write("\7g\2\2\u062e\u062f\7u\2\2\u062f\u0630\7v\2\2\u0630\u0631") + buf.write("\7c\2\2\u0631\u0632\7v\2\2\u0632\u0633\7k\2\2\u0633\u0644") + buf.write("\7e\2\2\u0634\u0635\7u\2\2\u0635\u0636\7y\2\2\u0636\u0637") + buf.write("\7k\2\2\u0637\u0638\7v\2\2\u0638\u0639\7e\2\2\u0639\u0644") + buf.write("\7j\2\2\u063a\u063b\7v\2\2\u063b\u063c\7t\2\2\u063c\u0644") + buf.write("\7{\2\2\u063d\u063e\7v\2\2\u063e\u063f\7{\2\2\u063f\u0640") + buf.write("\7r\2\2\u0640\u0641\7g\2\2\u0641\u0642\7q\2\2\u0642\u0644") + buf.write("\7h\2\2\u0643\u05eb\3\2\2\2\u0643\u05f3\3\2\2\2\u0643") + buf.write("\u05f8\3\2\2\2\u0643\u05fc\3\2\2\2\u0643\u0601\3\2\2\2") + buf.write("\u0643\u0608\3\2\2\2\u0643\u060d\3\2\2\2\u0643\u060f\3") + buf.write("\2\2\2\u0643\u0615\3\2\2\2\u0643\u0618\3\2\2\2\u0643\u061d") + buf.write("\3\2\2\2\u0643\u0621\3\2\2\2\u0643\u0623\3\2\2\2\u0643") + buf.write("\u062e\3\2\2\2\u0643\u0634\3\2\2\2\u0643\u063a\3\2\2\2") + buf.write("\u0643\u063d\3\2\2\2\u0644\u00e0\3\2\2\2\u0645\u0646\7") + buf.write("c\2\2\u0646\u0647\7p\2\2\u0647\u0648\7q\2\2\u0648\u0649") + buf.write("\7p\2\2\u0649\u064a\7{\2\2\u064a\u064b\7o\2\2\u064b\u064c") + buf.write("\7q\2\2\u064c\u064d\7w\2\2\u064d\u064e\7u\2\2\u064e\u00e2") + buf.write("\3\2\2\2\u064f\u0650\7d\2\2\u0650\u0651\7t\2\2\u0651\u0652") + buf.write("\7g\2\2\u0652\u0653\7c\2\2\u0653\u0654\7m\2\2\u0654\u00e4") + buf.write("\3\2\2\2\u0655\u0656\7e\2\2\u0656\u0657\7q\2\2\u0657\u0658") + buf.write("\7p\2\2\u0658\u0659\7u\2\2\u0659\u065a\7v\2\2\u065a\u065b") + buf.write("\7c\2\2\u065b\u065c\7p\2\2\u065c\u065d\7v\2\2\u065d\u00e6") + buf.write("\3\2\2\2\u065e\u065f\7k\2\2\u065f\u0660\7o\2\2\u0660\u0661") + buf.write("\7o\2\2\u0661\u0662\7w\2\2\u0662\u0663\7v\2\2\u0663\u0664") + buf.write("\7c\2\2\u0664\u0665\7d\2\2\u0665\u0666\7n\2\2\u0666\u0667") + buf.write("\7g\2\2\u0667\u00e8\3\2\2\2\u0668\u0669\7e\2\2\u0669\u066a") + buf.write("\7q\2\2\u066a\u066b\7p\2\2\u066b\u066c\7v\2\2\u066c\u066d") + buf.write("\7k\2\2\u066d\u066e\7p\2\2\u066e\u066f\7w\2\2\u066f\u0670") + buf.write("\7g\2\2\u0670\u00ea\3\2\2\2\u0671\u0672\7n\2\2\u0672\u0673") + buf.write("\7g\2\2\u0673\u0674\7c\2\2\u0674\u0675\7x\2\2\u0675\u0676") + buf.write("\7g\2\2\u0676\u00ec\3\2\2\2\u0677\u0678\7g\2\2\u0678\u0679") + buf.write("\7z\2\2\u0679\u067a\7v\2\2\u067a\u067b\7g\2\2\u067b\u067c") + buf.write("\7t\2\2\u067c\u067d\7p\2\2\u067d\u067e\7c\2\2\u067e\u067f") + buf.write("\7n\2\2\u067f\u00ee\3\2\2\2\u0680\u0681\7k\2\2\u0681\u0682") + buf.write("\7p\2\2\u0682\u0683\7f\2\2\u0683\u0684\7g\2\2\u0684\u0685") + buf.write("\7z\2\2\u0685\u0686\7g\2\2\u0686\u0687\7f\2\2\u0687\u00f0") + buf.write("\3\2\2\2\u0688\u0689\7k\2\2\u0689\u068a\7p\2\2\u068a\u068b") + buf.write("\7v\2\2\u068b\u068c\7g\2\2\u068c\u068d\7t\2\2\u068d\u068e") + buf.write("\7p\2\2\u068e\u068f\7c\2\2\u068f\u0690\7n\2\2\u0690\u00f2") + buf.write("\3\2\2\2\u0691\u0692\7r\2\2\u0692\u0693\7c\2\2\u0693\u0694") + buf.write("\7{\2\2\u0694\u0695\7c\2\2\u0695\u0696\7d\2\2\u0696\u0697") + buf.write("\7n\2\2\u0697\u0698\7g\2\2\u0698\u00f4\3\2\2\2\u0699\u069a") + buf.write("\7r\2\2\u069a\u069b\7t\2\2\u069b\u069c\7k\2\2\u069c\u069d") + buf.write("\7x\2\2\u069d\u069e\7c\2\2\u069e\u069f\7v\2\2\u069f\u06a0") + buf.write("\7g\2\2\u06a0\u00f6\3\2\2\2\u06a1\u06a2\7r\2\2\u06a2\u06a3") + buf.write("\7w\2\2\u06a3\u06a4\7d\2\2\u06a4\u06a5\7n\2\2\u06a5\u06a6") + buf.write("\7k\2\2\u06a6\u06a7\7e\2\2\u06a7\u00f8\3\2\2\2\u06a8\u06a9") + buf.write("\7x\2\2\u06a9\u06aa\7k\2\2\u06aa\u06ab\7t\2\2\u06ab\u06ac") + buf.write("\7v\2\2\u06ac\u06ad\7w\2\2\u06ad\u06ae\7c\2\2\u06ae\u06af") + buf.write("\7n\2\2\u06af\u00fa\3\2\2\2\u06b0\u06b1\7r\2\2\u06b1\u06b2") + buf.write("\7w\2\2\u06b2\u06b3\7t\2\2\u06b3\u06b4\7g\2\2\u06b4\u00fc") + buf.write("\3\2\2\2\u06b5\u06b6\7v\2\2\u06b6\u06b7\7{\2\2\u06b7\u06b8") + buf.write("\7r\2\2\u06b8\u06b9\7g\2\2\u06b9\u00fe\3\2\2\2\u06ba\u06bb") + buf.write("\7x\2\2\u06bb\u06bc\7k\2\2\u06bc\u06bd\7g\2\2\u06bd\u06be") + buf.write("\7y\2\2\u06be\u0100\3\2\2\2\u06bf\u06c0\7i\2\2\u06c0\u06c1") + buf.write("\7n\2\2\u06c1\u06c2\7q\2\2\u06c2\u06c3\7d\2\2\u06c3\u06c4") + buf.write("\7c\2\2\u06c4\u06c5\7n\2\2\u06c5\u0102\3\2\2\2\u06c6\u06c7") + buf.write("\7e\2\2\u06c7\u06c8\7q\2\2\u06c8\u06c9\7p\2\2\u06c9\u06ca") + buf.write("\7u\2\2\u06ca\u06cb\7v\2\2\u06cb\u06cc\7t\2\2\u06cc\u06cd") + buf.write("\7w\2\2\u06cd\u06ce\7e\2\2\u06ce\u06cf\7v\2\2\u06cf\u06d0") + buf.write("\7q\2\2\u06d0\u06d1\7t\2\2\u06d1\u0104\3\2\2\2\u06d2\u06d3") + buf.write("\7h\2\2\u06d3\u06d4\7c\2\2\u06d4\u06d5\7n\2\2\u06d5\u06d6") + buf.write("\7n\2\2\u06d6\u06d7\7d\2\2\u06d7\u06d8\7c\2\2\u06d8\u06d9") + buf.write("\7e\2\2\u06d9\u06da\7m\2\2\u06da\u0106\3\2\2\2\u06db\u06dc") + buf.write("\7t\2\2\u06dc\u06dd\7g\2\2\u06dd\u06de\7e\2\2\u06de\u06df") + buf.write("\7g\2\2\u06df\u06e0\7k\2\2\u06e0\u06e1\7x\2\2\u06e1\u06e2") + buf.write("\7g\2\2\u06e2\u0108\3\2\2\2\u06e3\u06e7\5\u010b\u0086") + buf.write("\2\u06e4\u06e6\5\u010d\u0087\2\u06e5\u06e4\3\2\2\2\u06e6") + buf.write("\u06e9\3\2\2\2\u06e7\u06e5\3\2\2\2\u06e7\u06e8\3\2\2\2") + buf.write("\u06e8\u010a\3\2\2\2\u06e9\u06e7\3\2\2\2\u06ea\u06eb\t") + buf.write("\6\2\2\u06eb\u010c\3\2\2\2\u06ec\u06ed\t\7\2\2\u06ed\u010e") + buf.write("\3\2\2\2\u06ee\u06ef\7w\2\2\u06ef\u06f0\7p\2\2\u06f0\u06f1") + buf.write("\7k\2\2\u06f1\u06f2\7e\2\2\u06f2\u06f3\7q\2\2\u06f3\u06f4") + buf.write("\7f\2\2\u06f4\u06f6\7g\2\2\u06f5\u06ee\3\2\2\2\u06f5\u06f6") + buf.write("\3\2\2\2\u06f6\u06f7\3\2\2\2\u06f7\u06fb\7$\2\2\u06f8") + buf.write("\u06fa\5\u0111\u0089\2\u06f9\u06f8\3\2\2\2\u06fa\u06fd") + buf.write("\3\2\2\2\u06fb\u06f9\3\2\2\2\u06fb\u06fc\3\2\2\2\u06fc") + buf.write("\u06fe\3\2\2\2\u06fd\u06fb\3\2\2\2\u06fe\u0711\7$\2\2") + buf.write("\u06ff\u0700\7w\2\2\u0700\u0701\7p\2\2\u0701\u0702\7k") + buf.write("\2\2\u0702\u0703\7e\2\2\u0703\u0704\7q\2\2\u0704\u0705") + buf.write("\7f\2\2\u0705\u0707\7g\2\2\u0706\u06ff\3\2\2\2\u0706\u0707") + buf.write("\3\2\2\2\u0707\u0708\3\2\2\2\u0708\u070c\7)\2\2\u0709") + buf.write("\u070b\5\u0113\u008a\2\u070a\u0709\3\2\2\2\u070b\u070e") + buf.write("\3\2\2\2\u070c\u070a\3\2\2\2\u070c\u070d\3\2\2\2\u070d") + buf.write("\u070f\3\2\2\2\u070e\u070c\3\2\2\2\u070f\u0711\7)\2\2") + buf.write("\u0710\u06f5\3\2\2\2\u0710\u0706\3\2\2\2\u0711\u0110\3") + buf.write("\2\2\2\u0712\u0716\n\b\2\2\u0713\u0714\7^\2\2\u0714\u0716") + buf.write("\13\2\2\2\u0715\u0712\3\2\2\2\u0715\u0713\3\2\2\2\u0716") + buf.write("\u0112\3\2\2\2\u0717\u071b\n\t\2\2\u0718\u0719\7^\2\2") + buf.write("\u0719\u071b\13\2\2\2\u071a\u0717\3\2\2\2\u071a\u0718") + buf.write("\3\2\2\2\u071b\u0114\3\2\2\2\u071c\u071e\t\2\2\2\u071d") + buf.write("\u071c\3\2\2\2\u071e\u071f\3\2\2\2\u071f\u071d\3\2\2\2") + buf.write("\u071f\u0720\3\2\2\2\u0720\u0721\3\2\2\2\u0721\u0723\7") + buf.write("\60\2\2\u0722\u0724\t\2\2\2\u0723\u0722\3\2\2\2\u0724") + buf.write("\u0725\3\2\2\2\u0725\u0723\3\2\2\2\u0725\u0726\3\2\2\2") + buf.write("\u0726\u072d\3\2\2\2\u0727\u0729\7\60\2\2\u0728\u072a") + buf.write("\t\2\2\2\u0729\u0728\3\2\2\2\u072a\u072b\3\2\2\2\u072b") + buf.write("\u0729\3\2\2\2\u072b\u072c\3\2\2\2\u072c\u072e\3\2\2\2") + buf.write("\u072d\u0727\3\2\2\2\u072d\u072e\3\2\2\2\u072e\u0116\3") + buf.write("\2\2\2\u072f\u0731\t\n\2\2\u0730\u072f\3\2\2\2\u0731\u0732") + buf.write("\3\2\2\2\u0732\u0730\3\2\2\2\u0732\u0733\3\2\2\2\u0733") + buf.write("\u0734\3\2\2\2\u0734\u0735\b\u008c\2\2\u0735\u0118\3\2") + buf.write("\2\2\u0736\u0737\7\61\2\2\u0737\u0738\7,\2\2\u0738\u073c") + buf.write("\3\2\2\2\u0739\u073b\13\2\2\2\u073a\u0739\3\2\2\2\u073b") + buf.write("\u073e\3\2\2\2\u073c\u073d\3\2\2\2\u073c\u073a\3\2\2\2") + buf.write("\u073d\u073f\3\2\2\2\u073e\u073c\3\2\2\2\u073f\u0740\7") + buf.write(",\2\2\u0740\u0741\7\61\2\2\u0741\u0742\3\2\2\2\u0742\u0743") + buf.write("\b\u008d\3\2\u0743\u011a\3\2\2\2\u0744\u0745\7\61\2\2") + buf.write("\u0745\u0746\7\61\2\2\u0746\u074a\3\2\2\2\u0747\u0749") + buf.write("\n\13\2\2\u0748\u0747\3\2\2\2\u0749\u074c\3\2\2\2\u074a") + buf.write("\u0748\3\2\2\2\u074a\u074b\3\2\2\2\u074b\u074d\3\2\2\2") + buf.write("\u074c\u074a\3\2\2\2\u074d\u074e\b\u008e\3\2\u074e\u011c") + buf.write("\3\2\2\2(\2\u0382\u045b\u0539\u0549\u054f\u0551\u0563") + buf.write("\u0569\u056b\u0576\u057a\u057e\u0582\u0586\u058b\u0594") + buf.write("\u0599\u05d4\u05dc\u05e1\u05e4\u0643\u06e7\u06f5\u06fb") + buf.write("\u0706\u070c\u0710\u0715\u071a\u071f\u0725\u072b\u072d") + buf.write("\u0732\u073c\u074a\4\b\2\2\2\3\2") return buf.getvalue() @@ -962,34 +959,34 @@ class SolidityLexer(Lexer): T__93 = 94 T__94 = 95 T__95 = 96 - T__96 = 97 - Int = 98 - Uint = 99 - Byte = 100 - Fixed = 101 - Ufixed = 102 - BooleanLiteral = 103 - DecimalNumber = 104 - HexNumber = 105 - NumberUnit = 106 - HexLiteralFragment = 107 - ReservedKeyword = 108 - AnonymousKeyword = 109 - BreakKeyword = 110 - ConstantKeyword = 111 - ImmutableKeyword = 112 - ContinueKeyword = 113 - LeaveKeyword = 114 - ExternalKeyword = 115 - IndexedKeyword = 116 - InternalKeyword = 117 - PayableKeyword = 118 - PrivateKeyword = 119 - PublicKeyword = 120 - VirtualKeyword = 121 - PureKeyword = 122 - TypeKeyword = 123 - ViewKeyword = 124 + Int = 97 + Uint = 98 + Byte = 99 + Fixed = 100 + Ufixed = 101 + BooleanLiteral = 102 + DecimalNumber = 103 + HexNumber = 104 + NumberUnit = 105 + HexLiteralFragment = 106 + ReservedKeyword = 107 + AnonymousKeyword = 108 + BreakKeyword = 109 + ConstantKeyword = 110 + ImmutableKeyword = 111 + ContinueKeyword = 112 + LeaveKeyword = 113 + ExternalKeyword = 114 + IndexedKeyword = 115 + InternalKeyword = 116 + PayableKeyword = 117 + PrivateKeyword = 118 + PublicKeyword = 119 + VirtualKeyword = 120 + PureKeyword = 121 + TypeKeyword = 122 + ViewKeyword = 123 + GlobalKeyword = 124 ConstructorKeyword = 125 FallbackKeyword = 126 ReceiveKeyword = 127 @@ -1005,24 +1002,25 @@ class SolidityLexer(Lexer): modeNames = [ "DEFAULT_MODE" ] literalNames = [ "", - "'pragma'", "';'", "'||'", "'^'", "'~'", "'>='", "'>'", "'<'", - "'<='", "'='", "'as'", "'import'", "'*'", "'from'", "'{'", "','", + "'pragma'", "';'", "'*'", "'||'", "'^'", "'~'", "'>='", "'>'", + "'<'", "'<='", "'='", "'as'", "'import'", "'from'", "'{'", "','", "'}'", "'abstract'", "'contract'", "'interface'", "'library'", - "'is'", "'('", "')'", "'error'", "'using'", "'for'", "'struct'", + "'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'", "':'", "'+'", "'-'", "'after'", - "'delete'", "'!'", "'**'", "'/'", "'%'", "'<<'", "'>>'", "'&'", - "'|'", "'=='", "'!='", "'&&'", "'?'", "'|='", "'^='", "'&='", + "'byte'", "'++'", "'--'", "'new'", "':'", "'delete'", "'!'", + "'**'", "'<<'", "'>>'", "'&&'", "'?'", "'|='", "'^='", "'&='", "'<<='", "'>>='", "'+='", "'-='", "'*='", "'/='", "'%='", "'let'", "':='", "'=:'", "'switch'", "'case'", "'default'", "'->'", "'callback'", "'override'", "'anonymous'", "'break'", "'constant'", "'immutable'", "'continue'", "'leave'", "'external'", "'indexed'", "'internal'", "'payable'", "'private'", "'public'", "'virtual'", "'pure'", - "'type'", "'view'", "'constructor'", "'fallback'", "'receive'" ] + "'type'", "'view'", "'global'", "'constructor'", "'fallback'", + "'receive'" ] symbolicNames = [ "", "Int", "Uint", "Byte", "Fixed", "Ufixed", "BooleanLiteral", @@ -1031,9 +1029,9 @@ class SolidityLexer(Lexer): "ImmutableKeyword", "ContinueKeyword", "LeaveKeyword", "ExternalKeyword", "IndexedKeyword", "InternalKeyword", "PayableKeyword", "PrivateKeyword", "PublicKeyword", "VirtualKeyword", "PureKeyword", "TypeKeyword", - "ViewKeyword", "ConstructorKeyword", "FallbackKeyword", "ReceiveKeyword", - "Identifier", "StringLiteralFragment", "VersionLiteral", "WS", - "COMMENT", "LINE_COMMENT" ] + "ViewKeyword", "GlobalKeyword", "ConstructorKeyword", "FallbackKeyword", + "ReceiveKeyword", "Identifier", "StringLiteralFragment", "VersionLiteral", + "WS", "COMMENT", "LINE_COMMENT" ] ruleNames = [ "T__0", "T__1", "T__2", "T__3", "T__4", "T__5", "T__6", "T__7", "T__8", "T__9", "T__10", "T__11", "T__12", "T__13", @@ -1050,25 +1048,25 @@ class SolidityLexer(Lexer): "T__74", "T__75", "T__76", "T__77", "T__78", "T__79", "T__80", "T__81", "T__82", "T__83", "T__84", "T__85", "T__86", "T__87", "T__88", "T__89", "T__90", "T__91", - "T__92", "T__93", "T__94", "T__95", "T__96", "Int", "Uint", - "Byte", "Fixed", "Ufixed", "BooleanLiteral", "DecimalNumber", + "T__92", "T__93", "T__94", "T__95", "Int", "Uint", "Byte", + "Fixed", "Ufixed", "BooleanLiteral", "DecimalNumber", "DecimalDigits", "HexNumber", "HexDigits", "NumberUnit", "HexLiteralFragment", "HexPair", "HexCharacter", "ReservedKeyword", "AnonymousKeyword", "BreakKeyword", "ConstantKeyword", "ImmutableKeyword", "ContinueKeyword", "LeaveKeyword", "ExternalKeyword", "IndexedKeyword", "InternalKeyword", "PayableKeyword", "PrivateKeyword", "PublicKeyword", "VirtualKeyword", - "PureKeyword", "TypeKeyword", "ViewKeyword", "ConstructorKeyword", - "FallbackKeyword", "ReceiveKeyword", "Identifier", "IdentifierStart", - "IdentifierPart", "StringLiteralFragment", "DoubleQuotedStringCharacter", - "SingleQuotedStringCharacter", "VersionLiteral", "WS", - "COMMENT", "LINE_COMMENT" ] + "PureKeyword", "TypeKeyword", "ViewKeyword", "GlobalKeyword", + "ConstructorKeyword", "FallbackKeyword", "ReceiveKeyword", + "Identifier", "IdentifierStart", "IdentifierPart", "StringLiteralFragment", + "DoubleQuotedStringCharacter", "SingleQuotedStringCharacter", + "VersionLiteral", "WS", "COMMENT", "LINE_COMMENT" ] grammarFileName = "Solidity.g4" def __init__(self, input=None, output:TextIO = sys.stdout): super().__init__(input, output) - self.checkVersion("4.9.3") + self.checkVersion("4.7.2") self._interp = LexerATNSimulator(self, self.atn, self.decisionsToDFA, PredictionContextCache()) self._actions = None self._predicates = None diff --git a/solidity_parser/solidity_antlr4/SolidityLexer.tokens b/solidity_parser/solidity_antlr4/SolidityLexer.tokens index 58e78b7..4064f6f 100644 --- a/solidity_parser/solidity_antlr4/SolidityLexer.tokens +++ b/solidity_parser/solidity_antlr4/SolidityLexer.tokens @@ -94,34 +94,34 @@ T__92=93 T__93=94 T__94=95 T__95=96 -T__96=97 -Int=98 -Uint=99 -Byte=100 -Fixed=101 -Ufixed=102 -BooleanLiteral=103 -DecimalNumber=104 -HexNumber=105 -NumberUnit=106 -HexLiteralFragment=107 -ReservedKeyword=108 -AnonymousKeyword=109 -BreakKeyword=110 -ConstantKeyword=111 -ImmutableKeyword=112 -ContinueKeyword=113 -LeaveKeyword=114 -ExternalKeyword=115 -IndexedKeyword=116 -InternalKeyword=117 -PayableKeyword=118 -PrivateKeyword=119 -PublicKeyword=120 -VirtualKeyword=121 -PureKeyword=122 -TypeKeyword=123 -ViewKeyword=124 +Int=97 +Uint=98 +Byte=99 +Fixed=100 +Ufixed=101 +BooleanLiteral=102 +DecimalNumber=103 +HexNumber=104 +NumberUnit=105 +HexLiteralFragment=106 +ReservedKeyword=107 +AnonymousKeyword=108 +BreakKeyword=109 +ConstantKeyword=110 +ImmutableKeyword=111 +ContinueKeyword=112 +LeaveKeyword=113 +ExternalKeyword=114 +IndexedKeyword=115 +InternalKeyword=116 +PayableKeyword=117 +PrivateKeyword=118 +PublicKeyword=119 +VirtualKeyword=120 +PureKeyword=121 +TypeKeyword=122 +ViewKeyword=123 +GlobalKeyword=124 ConstructorKeyword=125 FallbackKeyword=126 ReceiveKeyword=127 @@ -133,17 +133,17 @@ COMMENT=132 LINE_COMMENT=133 'pragma'=1 ';'=2 -'||'=3 -'^'=4 -'~'=5 -'>='=6 -'>'=7 -'<'=8 -'<='=9 -'='=10 -'as'=11 -'import'=12 -'*'=13 +'*'=3 +'||'=4 +'^'=5 +'~'=6 +'>='=7 +'>'=8 +'<'=9 +'<='=10 +'='=11 +'as'=12 +'import'=13 'from'=14 '{'=15 ','=16 @@ -158,92 +158,92 @@ LINE_COMMENT=133 'error'=25 'using'=26 'for'=27 -'struct'=28 -'modifier'=29 -'function'=30 -'returns'=31 -'event'=32 -'enum'=33 -'['=34 -']'=35 -'address'=36 -'.'=37 -'mapping'=38 -'=>'=39 -'memory'=40 -'storage'=41 -'calldata'=42 -'if'=43 -'else'=44 -'try'=45 -'catch'=46 -'while'=47 -'unchecked'=48 -'assembly'=49 -'do'=50 -'return'=51 -'throw'=52 -'emit'=53 -'revert'=54 -'var'=55 -'bool'=56 -'string'=57 -'byte'=58 -'++'=59 -'--'=60 -'new'=61 -':'=62 -'+'=63 -'-'=64 -'after'=65 -'delete'=66 -'!'=67 -'**'=68 -'/'=69 -'%'=70 -'<<'=71 -'>>'=72 -'&'=73 -'|'=74 -'=='=75 -'!='=76 -'&&'=77 -'?'=78 -'|='=79 -'^='=80 -'&='=81 -'<<='=82 -'>>='=83 -'+='=84 -'-='=85 -'*='=86 -'/='=87 -'%='=88 -'let'=89 -':='=90 -'=:'=91 -'switch'=92 -'case'=93 -'default'=94 -'->'=95 -'callback'=96 -'override'=97 -'anonymous'=109 -'break'=110 -'constant'=111 -'immutable'=112 -'continue'=113 -'leave'=114 -'external'=115 -'indexed'=116 -'internal'=117 -'payable'=118 -'private'=119 -'public'=120 -'virtual'=121 -'pure'=122 -'type'=123 -'view'=124 +'|'=28 +'&'=29 +'+'=30 +'-'=31 +'/'=32 +'%'=33 +'=='=34 +'!='=35 +'struct'=36 +'modifier'=37 +'function'=38 +'returns'=39 +'event'=40 +'enum'=41 +'['=42 +']'=43 +'address'=44 +'.'=45 +'mapping'=46 +'=>'=47 +'memory'=48 +'storage'=49 +'calldata'=50 +'if'=51 +'else'=52 +'try'=53 +'catch'=54 +'while'=55 +'unchecked'=56 +'assembly'=57 +'do'=58 +'return'=59 +'throw'=60 +'emit'=61 +'revert'=62 +'var'=63 +'bool'=64 +'string'=65 +'byte'=66 +'++'=67 +'--'=68 +'new'=69 +':'=70 +'delete'=71 +'!'=72 +'**'=73 +'<<'=74 +'>>'=75 +'&&'=76 +'?'=77 +'|='=78 +'^='=79 +'&='=80 +'<<='=81 +'>>='=82 +'+='=83 +'-='=84 +'*='=85 +'/='=86 +'%='=87 +'let'=88 +':='=89 +'=:'=90 +'switch'=91 +'case'=92 +'default'=93 +'->'=94 +'callback'=95 +'override'=96 +'anonymous'=108 +'break'=109 +'constant'=110 +'immutable'=111 +'continue'=112 +'leave'=113 +'external'=114 +'indexed'=115 +'internal'=116 +'payable'=117 +'private'=118 +'public'=119 +'virtual'=120 +'pure'=121 +'type'=122 +'view'=123 +'global'=124 'constructor'=125 'fallback'=126 'receive'=127 diff --git a/solidity_parser/solidity_antlr4/SolidityListener.py b/solidity_parser/solidity_antlr4/SolidityListener.py index 0cd5c6d..4bd3369 100644 --- a/solidity_parser/solidity_antlr4/SolidityListener.py +++ b/solidity_parser/solidity_antlr4/SolidityListener.py @@ -1,4 +1,4 @@ -# Generated from solidity-antlr4/Solidity.g4 by ANTLR 4.9.3 +# Generated from solidity-antlr4/Solidity.g4 by ANTLR 4.7.2 from antlr4 import * if __name__ is not None and "." in __name__: from .SolidityParser import SolidityParser @@ -170,6 +170,33 @@ def exitUsingForDeclaration(self, ctx:SolidityParser.UsingForDeclarationContext) pass + # Enter a parse tree produced by SolidityParser#usingForObject. + def enterUsingForObject(self, ctx:SolidityParser.UsingForObjectContext): + pass + + # Exit a parse tree produced by SolidityParser#usingForObject. + def exitUsingForObject(self, ctx:SolidityParser.UsingForObjectContext): + pass + + + # Enter a parse tree produced by SolidityParser#usingForObjectDirective. + def enterUsingForObjectDirective(self, ctx:SolidityParser.UsingForObjectDirectiveContext): + pass + + # Exit a parse tree produced by SolidityParser#usingForObjectDirective. + def exitUsingForObjectDirective(self, ctx:SolidityParser.UsingForObjectDirectiveContext): + pass + + + # Enter a parse tree produced by SolidityParser#userDefinableOperators. + def enterUserDefinableOperators(self, ctx:SolidityParser.UserDefinableOperatorsContext): + pass + + # Exit a parse tree produced by SolidityParser#userDefinableOperators. + def exitUserDefinableOperators(self, ctx:SolidityParser.UserDefinableOperatorsContext): + pass + + # Enter a parse tree produced by SolidityParser#structDefinition. def enterStructDefinition(self, ctx:SolidityParser.StructDefinitionContext): pass @@ -359,6 +386,24 @@ def exitMapping(self, ctx:SolidityParser.MappingContext): pass + # Enter a parse tree produced by SolidityParser#mappingKeyName. + def enterMappingKeyName(self, ctx:SolidityParser.MappingKeyNameContext): + pass + + # Exit a parse tree produced by SolidityParser#mappingKeyName. + def exitMappingKeyName(self, ctx:SolidityParser.MappingKeyNameContext): + pass + + + # Enter a parse tree produced by SolidityParser#mappingValueName. + def enterMappingValueName(self, ctx:SolidityParser.MappingValueNameContext): + pass + + # Exit a parse tree produced by SolidityParser#mappingValueName. + def exitMappingValueName(self, ctx:SolidityParser.MappingValueNameContext): + pass + + # Enter a parse tree produced by SolidityParser#functionTypeName. def enterFunctionTypeName(self, ctx:SolidityParser.FunctionTypeNameContext): pass @@ -485,6 +530,15 @@ def exitInlineAssemblyStatement(self, ctx:SolidityParser.InlineAssemblyStatement pass + # Enter a parse tree produced by SolidityParser#inlineAssemblyStatementFlag. + def enterInlineAssemblyStatementFlag(self, ctx:SolidityParser.InlineAssemblyStatementFlagContext): + pass + + # Exit a parse tree produced by SolidityParser#inlineAssemblyStatementFlag. + def exitInlineAssemblyStatementFlag(self, ctx:SolidityParser.InlineAssemblyStatementFlagContext): + pass + + # Enter a parse tree produced by SolidityParser#doWhileStatement. def enterDoWhileStatement(self, ctx:SolidityParser.DoWhileStatementContext): pass @@ -809,15 +863,6 @@ def exitAssemblyLiteral(self, ctx:SolidityParser.AssemblyLiteralContext): pass - # Enter a parse tree produced by SolidityParser#subAssembly. - def enterSubAssembly(self, ctx:SolidityParser.SubAssemblyContext): - pass - - # Exit a parse tree produced by SolidityParser#subAssembly. - def exitSubAssembly(self, ctx:SolidityParser.SubAssemblyContext): - pass - - # Enter a parse tree produced by SolidityParser#tupleExpression. def enterTupleExpression(self, ctx:SolidityParser.TupleExpressionContext): pass @@ -827,15 +872,6 @@ def exitTupleExpression(self, ctx:SolidityParser.TupleExpressionContext): pass - # Enter a parse tree produced by SolidityParser#typeNameExpression. - def enterTypeNameExpression(self, ctx:SolidityParser.TypeNameExpressionContext): - pass - - # Exit a parse tree produced by SolidityParser#typeNameExpression. - def exitTypeNameExpression(self, ctx:SolidityParser.TypeNameExpressionContext): - pass - - # Enter a parse tree produced by SolidityParser#numberLiteral. def enterNumberLiteral(self, ctx:SolidityParser.NumberLiteralContext): pass @@ -881,5 +917,3 @@ def exitStringLiteral(self, ctx:SolidityParser.StringLiteralContext): pass - -del SolidityParser \ No newline at end of file diff --git a/solidity_parser/solidity_antlr4/SolidityParser.py b/solidity_parser/solidity_antlr4/SolidityParser.py index 791b283..86f2246 100644 --- a/solidity_parser/solidity_antlr4/SolidityParser.py +++ b/solidity_parser/solidity_antlr4/SolidityParser.py @@ -1,18 +1,15 @@ -# Generated from solidity-antlr4/Solidity.g4 by ANTLR 4.9.3 +# Generated from solidity-antlr4/Solidity.g4 by ANTLR 4.7.2 # encoding: utf-8 from antlr4 import * from io import StringIO +from typing.io import TextIO import sys -if sys.version_info[1] > 5: - from typing import TextIO -else: - from typing.io import TextIO def serializedATN(): with StringIO() as buf: buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\u0087") - buf.write("\u046d\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") + buf.write("\u0493\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") buf.write("\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r\4\16") buf.write("\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22\4\23\t\23") buf.write("\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31") @@ -25,568 +22,587 @@ def serializedATN(): buf.write("D\4E\tE\4F\tF\4G\tG\4H\tH\4I\tI\4J\tJ\4K\tK\4L\tL\4M\t") buf.write("M\4N\tN\4O\tO\4P\tP\4Q\tQ\4R\tR\4S\tS\4T\tT\4U\tU\4V\t") buf.write("V\4W\tW\4X\tX\4Y\tY\4Z\tZ\4[\t[\4\\\t\\\4]\t]\4^\t^\4") - buf.write("_\t_\4`\t`\4a\ta\4b\tb\3\2\3\2\3\2\3\2\3\2\3\2\3\2\3\2") - buf.write("\3\2\7\2\u00ce\n\2\f\2\16\2\u00d1\13\2\3\2\3\2\3\3\3\3") - buf.write("\3\3\3\3\3\3\3\4\3\4\3\5\3\5\5\5\u00de\n\5\3\6\3\6\5\6") - buf.write("\u00e2\n\6\3\6\7\6\u00e5\n\6\f\6\16\6\u00e8\13\6\3\7\3") - buf.write("\7\3\b\5\b\u00ed\n\b\3\b\3\b\5\b\u00f1\n\b\3\b\5\b\u00f4") - buf.write("\n\b\3\t\3\t\3\t\5\t\u00f9\n\t\3\n\3\n\3\n\3\n\5\n\u00ff") - buf.write("\n\n\3\n\3\n\3\n\3\n\3\n\5\n\u0106\n\n\3\n\3\n\5\n\u010a") - buf.write("\n\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\7\n\u0115\n\n") - buf.write("\f\n\16\n\u0118\13\n\3\n\3\n\3\n\3\n\3\n\5\n\u011f\n\n") - buf.write("\3\13\3\13\3\f\5\f\u0124\n\f\3\f\3\f\3\f\3\f\3\f\3\f\7") - buf.write("\f\u012c\n\f\f\f\16\f\u012f\13\f\5\f\u0131\n\f\3\f\3\f") - buf.write("\7\f\u0135\n\f\f\f\16\f\u0138\13\f\3\f\3\f\3\r\3\r\3\r") - buf.write("\5\r\u013f\n\r\3\r\5\r\u0142\n\r\3\16\3\16\3\16\3\16\3") - buf.write("\16\3\16\3\16\3\16\3\16\5\16\u014d\n\16\3\17\3\17\3\17") - buf.write("\3\17\3\17\3\17\3\17\7\17\u0156\n\17\f\17\16\17\u0159") - buf.write("\13\17\3\17\3\17\3\17\5\17\u015e\n\17\3\17\3\17\3\20\3") - buf.write("\20\3\20\3\20\3\20\3\20\3\20\3\21\3\21\3\21\3\21\3\21") - buf.write("\3\22\3\22\3\22\3\22\3\22\3\22\3\23\3\23\3\23\3\23\3\23") - buf.write("\5\23\u0179\n\23\3\23\3\23\3\24\3\24\3\24\3\24\3\24\3") - buf.write("\24\3\24\3\24\7\24\u0185\n\24\f\24\16\24\u0188\13\24\5") - buf.write("\24\u018a\n\24\3\24\3\24\3\25\3\25\3\25\5\25\u0191\n\25") - buf.write("\3\25\3\25\7\25\u0195\n\25\f\25\16\25\u0198\13\25\3\25") - buf.write("\3\25\5\25\u019c\n\25\3\26\3\26\3\26\5\26\u01a1\n\26\3") - buf.write("\26\5\26\u01a4\n\26\3\27\3\27\3\27\3\27\5\27\u01aa\n\27") - buf.write("\3\27\3\27\5\27\u01ae\n\27\3\30\3\30\5\30\u01b2\n\30\3") - buf.write("\30\3\30\3\30\5\30\u01b7\n\30\3\31\3\31\3\31\3\32\3\32") - buf.write("\3\32\3\32\3\32\3\32\3\32\3\32\7\32\u01c4\n\32\f\32\16") - buf.write("\32\u01c7\13\32\3\33\3\33\3\33\3\33\5\33\u01cd\n\33\3") - buf.write("\33\3\33\3\34\3\34\3\35\3\35\3\35\3\35\5\35\u01d7\n\35") - buf.write("\3\35\3\35\7\35\u01db\n\35\f\35\16\35\u01de\13\35\3\35") - buf.write("\3\35\3\36\3\36\3\36\3\36\7\36\u01e6\n\36\f\36\16\36\u01e9") - buf.write("\13\36\5\36\u01eb\n\36\3\36\3\36\3\37\3\37\5\37\u01f1") - buf.write("\n\37\3\37\5\37\u01f4\n\37\3 \3 \3 \3 \7 \u01fa\n \f ") - buf.write("\16 \u01fd\13 \5 \u01ff\n \3 \3 \3!\3!\5!\u0205\n!\3!") - buf.write("\5!\u0208\n!\3\"\3\"\3\"\3\"\7\"\u020e\n\"\f\"\16\"\u0211") - buf.write("\13\"\5\"\u0213\n\"\3\"\3\"\3#\3#\5#\u0219\n#\3$\3$\5") - buf.write("$\u021d\n$\3$\3$\3%\3%\3%\3%\3%\3%\3%\5%\u0228\n%\3%\3") - buf.write("%\3%\5%\u022d\n%\3%\7%\u0230\n%\f%\16%\u0233\13%\3&\3") - buf.write("&\3&\7&\u0238\n&\f&\16&\u023b\13&\3\'\3\'\5\'\u023f\n") - buf.write("\'\3(\3(\3(\3(\3(\3(\3(\3)\3)\3)\3)\3)\7)\u024d\n)\f)") - buf.write("\16)\u0250\13)\3)\3)\5)\u0254\n)\3*\3*\3+\3+\3,\3,\7,") - buf.write("\u025c\n,\f,\16,\u025f\13,\3,\3,\3-\3-\3-\3-\3-\3-\3-") - buf.write("\3-\3-\3-\3-\3-\3-\3-\3-\5-\u0272\n-\3.\3.\3.\3/\3/\3") - buf.write("/\3/\3/\3/\3/\5/\u027e\n/\3\60\3\60\3\60\5\60\u0283\n") - buf.write("\60\3\60\3\60\6\60\u0287\n\60\r\60\16\60\u0288\3\61\3") - buf.write("\61\5\61\u028d\n\61\3\61\5\61\u0290\n\61\3\61\3\61\3\62") - buf.write("\3\62\3\62\3\62\3\62\3\62\3\63\3\63\5\63\u029c\n\63\3") - buf.write("\64\3\64\3\64\3\65\3\65\3\65\3\65\5\65\u02a5\n\65\3\65") - buf.write("\3\65\5\65\u02a9\n\65\3\65\5\65\u02ac\n\65\3\65\3\65\3") - buf.write("\65\3\66\3\66\5\66\u02b3\n\66\3\66\3\66\3\67\3\67\3\67") - buf.write("\3\67\3\67\3\67\3\67\3\67\38\38\38\39\39\39\3:\3:\5:\u02c7") - buf.write("\n:\3:\3:\3;\3;\3;\3<\3<\3<\3<\3=\3=\3=\3=\3>\3>\3>\3") - buf.write(">\3>\3>\3>\5>\u02dd\n>\3>\3>\5>\u02e1\n>\3>\3>\3?\5?\u02e6") - buf.write("\n?\3?\3?\5?\u02ea\n?\7?\u02ec\n?\f?\16?\u02ef\13?\3@") - buf.write("\3@\5@\u02f3\n@\3@\7@\u02f6\n@\f@\16@\u02f9\13@\3@\5@") - buf.write("\u02fc\n@\3@\3@\3A\3A\3B\3B\3B\3B\3B\3B\3B\3B\3B\3B\3") - buf.write("B\3B\3B\3B\3B\3B\3B\3B\5B\u0314\nB\3B\3B\3B\3B\3B\3B\3") - buf.write("B\3B\3B\3B\3B\3B\3B\3B\3B\3B\3B\3B\3B\3B\3B\3B\3B\3B\3") - buf.write("B\3B\3B\3B\3B\3B\3B\3B\3B\3B\3B\3B\3B\3B\3B\3B\3B\3B\3") - buf.write("B\3B\3B\3B\3B\3B\3B\3B\3B\3B\5B\u034a\nB\3B\3B\5B\u034e") - buf.write("\nB\3B\3B\3B\3B\3B\3B\3B\3B\3B\3B\3B\3B\3B\3B\7B\u035e") - buf.write("\nB\fB\16B\u0361\13B\3C\3C\3C\3C\3C\3C\3C\5C\u036a\nC") - buf.write("\3C\3C\3C\3C\3C\3C\5C\u0372\nC\5C\u0374\nC\3D\3D\3D\7") - buf.write("D\u0379\nD\fD\16D\u037c\13D\3E\3E\3E\7E\u0381\nE\fE\16") - buf.write("E\u0384\13E\3E\5E\u0387\nE\3F\3F\3F\3F\3G\3G\5G\u038f") - buf.write("\nG\3G\3G\5G\u0393\nG\5G\u0395\nG\3H\3H\3H\3H\3H\3I\3") - buf.write("I\7I\u039e\nI\fI\16I\u03a1\13I\3I\3I\3J\3J\3J\3J\3J\3") - buf.write("J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\5J\u03b7\nJ\3K\3") - buf.write("K\3K\5K\u03bc\nK\3L\3L\3L\3L\3M\3M\3M\3M\5M\u03c6\nM\3") - buf.write("M\3M\5M\u03ca\nM\3M\3M\7M\u03ce\nM\fM\16M\u03d1\13M\3") - buf.write("M\5M\u03d4\nM\3N\3N\3N\3N\5N\u03da\nN\3O\3O\3O\3O\3P\3") - buf.write("P\3P\3P\3P\3P\5P\u03e6\nP\3Q\3Q\3Q\7Q\u03eb\nQ\fQ\16Q") - buf.write("\u03ee\13Q\3R\3R\3R\3S\3S\3S\3T\3T\3T\7T\u03f9\nT\fT\16") - buf.write("T\u03fc\13T\3U\3U\3U\3U\3U\3U\5U\u0404\nU\3V\3V\3V\3V") - buf.write("\5V\u040a\nV\3V\3V\5V\u040e\nV\3V\3V\3W\3W\3W\3X\3X\3") - buf.write("X\5X\u0418\nX\3X\3X\3X\5X\u041d\nX\3X\3X\3Y\3Y\3Y\3Y\3") - buf.write("Z\3Z\3Z\3Z\5Z\u0429\nZ\3[\3[\3[\3[\3\\\3\\\5\\\u0431\n") - buf.write("\\\3\\\3\\\5\\\u0435\n\\\7\\\u0437\n\\\f\\\16\\\u043a") - buf.write("\13\\\3\\\3\\\3\\\3\\\3\\\7\\\u0441\n\\\f\\\16\\\u0444") - buf.write("\13\\\5\\\u0446\n\\\3\\\5\\\u0449\n\\\3]\3]\5]\u044d\n") - buf.write("]\3^\3^\5^\u0451\n^\3_\3_\3`\6`\u0456\n`\r`\16`\u0457") - buf.write("\3a\3a\3a\3a\3a\7a\u045f\na\fa\16a\u0462\13a\3a\3a\5a") - buf.write("\u0466\na\3b\6b\u0469\nb\rb\16b\u046a\3b\2\4H\u0082c\2") - buf.write("\4\6\b\n\f\16\20\22\24\26\30\32\34\36 \"$&(*,.\60\62\64") - buf.write("\668:<>@BDFHJLNPRTVXZ\\^`bdfhjlnprtvxz|~\u0080\u0082\u0084") - buf.write("\u0086\u0088\u008a\u008c\u008e\u0090\u0092\u0094\u0096") - buf.write("\u0098\u009a\u009c\u009e\u00a0\u00a2\u00a4\u00a6\u00a8") - buf.write("\u00aa\u00ac\u00ae\u00b0\u00b2\u00b4\u00b6\u00b8\u00ba") - buf.write("\u00bc\u00be\u00c0\u00c2\2\21\3\2\6\f\3\2\25\27\3\2*,") - buf.write("\6\2qqxx||~~\5\2&&9\3\2AB\3\2CD\4\2\17\17GH\3") - buf.write("\2IJ\3\2\b\13\3\2MN\4\2\f\fQZ\3\2jk\13\2\20\20\33\33,") - buf.write(",88bbttxx\177\177\u0081\u0082\2\u04ea\2\u00cf\3\2\2\2") - buf.write("\4\u00d4\3\2\2\2\6\u00d9\3\2\2\2\b\u00dd\3\2\2\2\n\u00df") - buf.write("\3\2\2\2\f\u00e9\3\2\2\2\16\u00f3\3\2\2\2\20\u00f5\3\2") - buf.write("\2\2\22\u011e\3\2\2\2\24\u0120\3\2\2\2\26\u0123\3\2\2") - buf.write("\2\30\u013b\3\2\2\2\32\u014c\3\2\2\2\34\u014e\3\2\2\2") - buf.write("\36\u0161\3\2\2\2 \u0168\3\2\2\2\"\u016d\3\2\2\2$\u0173") - buf.write("\3\2\2\2&\u017c\3\2\2\2(\u018d\3\2\2\2*\u019d\3\2\2\2") - buf.write(",\u01a5\3\2\2\2.\u01b6\3\2\2\2\60\u01b8\3\2\2\2\62\u01c5") - buf.write("\3\2\2\2\64\u01c8\3\2\2\2\66\u01d0\3\2\2\28\u01d2\3\2") - buf.write("\2\2:\u01e1\3\2\2\2<\u01ee\3\2\2\2>\u01f5\3\2\2\2@\u0202") - buf.write("\3\2\2\2B\u0209\3\2\2\2D\u0216\3\2\2\2F\u021a\3\2\2\2") - buf.write("H\u0227\3\2\2\2J\u0234\3\2\2\2L\u023e\3\2\2\2N\u0240\3") - buf.write("\2\2\2P\u0247\3\2\2\2R\u0255\3\2\2\2T\u0257\3\2\2\2V\u0259") - buf.write("\3\2\2\2X\u0271\3\2\2\2Z\u0273\3\2\2\2\\\u0276\3\2\2\2") - buf.write("^\u027f\3\2\2\2`\u028a\3\2\2\2b\u0293\3\2\2\2d\u029b\3") - buf.write("\2\2\2f\u029d\3\2\2\2h\u02a0\3\2\2\2j\u02b0\3\2\2\2l\u02b6") - buf.write("\3\2\2\2n\u02be\3\2\2\2p\u02c1\3\2\2\2r\u02c4\3\2\2\2") - buf.write("t\u02ca\3\2\2\2v\u02cd\3\2\2\2x\u02d1\3\2\2\2z\u02dc\3") - buf.write("\2\2\2|\u02e5\3\2\2\2~\u02f0\3\2\2\2\u0080\u02ff\3\2\2") - buf.write("\2\u0082\u0313\3\2\2\2\u0084\u0373\3\2\2\2\u0086\u0375") - buf.write("\3\2\2\2\u0088\u037d\3\2\2\2\u008a\u0388\3\2\2\2\u008c") - buf.write("\u0394\3\2\2\2\u008e\u0396\3\2\2\2\u0090\u039b\3\2\2\2") - buf.write("\u0092\u03b6\3\2\2\2\u0094\u03bb\3\2\2\2\u0096\u03bd\3") - buf.write("\2\2\2\u0098\u03c5\3\2\2\2\u009a\u03d5\3\2\2\2\u009c\u03db") - buf.write("\3\2\2\2\u009e\u03e5\3\2\2\2\u00a0\u03e7\3\2\2\2\u00a2") - buf.write("\u03ef\3\2\2\2\u00a4\u03f2\3\2\2\2\u00a6\u03f5\3\2\2\2") - buf.write("\u00a8\u0403\3\2\2\2\u00aa\u0405\3\2\2\2\u00ac\u0411\3") - buf.write("\2\2\2\u00ae\u0414\3\2\2\2\u00b0\u0420\3\2\2\2\u00b2\u0428") - buf.write("\3\2\2\2\u00b4\u042a\3\2\2\2\u00b6\u0448\3\2\2\2\u00b8") - buf.write("\u044c\3\2\2\2\u00ba\u044e\3\2\2\2\u00bc\u0452\3\2\2\2") - buf.write("\u00be\u0455\3\2\2\2\u00c0\u0459\3\2\2\2\u00c2\u0468\3") - buf.write("\2\2\2\u00c4\u00ce\5\4\3\2\u00c5\u00ce\5\22\n\2\u00c6") - buf.write("\u00ce\5\26\f\2\u00c7\u00ce\58\35\2\u00c8\u00ce\5&\24") - buf.write("\2\u00c9\u00ce\5,\27\2\u00ca\u00ce\5\36\20\2\u00cb\u00ce") - buf.write("\5 \21\2\u00cc\u00ce\5\"\22\2\u00cd\u00c4\3\2\2\2\u00cd") - buf.write("\u00c5\3\2\2\2\u00cd\u00c6\3\2\2\2\u00cd\u00c7\3\2\2\2") - buf.write("\u00cd\u00c8\3\2\2\2\u00cd\u00c9\3\2\2\2\u00cd\u00ca\3") - buf.write("\2\2\2\u00cd\u00cb\3\2\2\2\u00cd\u00cc\3\2\2\2\u00ce\u00d1") - buf.write("\3\2\2\2\u00cf\u00cd\3\2\2\2\u00cf\u00d0\3\2\2\2\u00d0") - buf.write("\u00d2\3\2\2\2\u00d1\u00cf\3\2\2\2\u00d2\u00d3\7\2\2\3") - buf.write("\u00d3\3\3\2\2\2\u00d4\u00d5\7\3\2\2\u00d5\u00d6\5\6\4") - buf.write("\2\u00d6\u00d7\5\b\5\2\u00d7\u00d8\7\4\2\2\u00d8\5\3\2") - buf.write("\2\2\u00d9\u00da\5\u00bc_\2\u00da\7\3\2\2\2\u00db\u00de") - buf.write("\5\n\6\2\u00dc\u00de\5\u0082B\2\u00dd\u00db\3\2\2\2\u00dd") - buf.write("\u00dc\3\2\2\2\u00de\t\3\2\2\2\u00df\u00e6\5\16\b\2\u00e0") - buf.write("\u00e2\7\5\2\2\u00e1\u00e0\3\2\2\2\u00e1\u00e2\3\2\2\2") - buf.write("\u00e2\u00e3\3\2\2\2\u00e3\u00e5\5\16\b\2\u00e4\u00e1") - buf.write("\3\2\2\2\u00e5\u00e8\3\2\2\2\u00e6\u00e4\3\2\2\2\u00e6") - buf.write("\u00e7\3\2\2\2\u00e7\13\3\2\2\2\u00e8\u00e6\3\2\2\2\u00e9") - buf.write("\u00ea\t\2\2\2\u00ea\r\3\2\2\2\u00eb\u00ed\5\f\7\2\u00ec") - buf.write("\u00eb\3\2\2\2\u00ec\u00ed\3\2\2\2\u00ed\u00ee\3\2\2\2") - buf.write("\u00ee\u00f4\7\u0084\2\2\u00ef\u00f1\5\f\7\2\u00f0\u00ef") - buf.write("\3\2\2\2\u00f0\u00f1\3\2\2\2\u00f1\u00f2\3\2\2\2\u00f2") - buf.write("\u00f4\7j\2\2\u00f3\u00ec\3\2\2\2\u00f3\u00f0\3\2\2\2") - buf.write("\u00f4\17\3\2\2\2\u00f5\u00f8\5\u00bc_\2\u00f6\u00f7\7") - buf.write("\r\2\2\u00f7\u00f9\5\u00bc_\2\u00f8\u00f6\3\2\2\2\u00f8") - buf.write("\u00f9\3\2\2\2\u00f9\21\3\2\2\2\u00fa\u00fb\7\16\2\2\u00fb") - buf.write("\u00fe\5\24\13\2\u00fc\u00fd\7\r\2\2\u00fd\u00ff\5\u00bc") - buf.write("_\2\u00fe\u00fc\3\2\2\2\u00fe\u00ff\3\2\2\2\u00ff\u0100") - buf.write("\3\2\2\2\u0100\u0101\7\4\2\2\u0101\u011f\3\2\2\2\u0102") - buf.write("\u0105\7\16\2\2\u0103\u0106\7\17\2\2\u0104\u0106\5\u00bc") - buf.write("_\2\u0105\u0103\3\2\2\2\u0105\u0104\3\2\2\2\u0106\u0109") - buf.write("\3\2\2\2\u0107\u0108\7\r\2\2\u0108\u010a\5\u00bc_\2\u0109") - buf.write("\u0107\3\2\2\2\u0109\u010a\3\2\2\2\u010a\u010b\3\2\2\2") - buf.write("\u010b\u010c\7\20\2\2\u010c\u010d\5\24\13\2\u010d\u010e") - buf.write("\7\4\2\2\u010e\u011f\3\2\2\2\u010f\u0110\7\16\2\2\u0110") - buf.write("\u0111\7\21\2\2\u0111\u0116\5\20\t\2\u0112\u0113\7\22") - buf.write("\2\2\u0113\u0115\5\20\t\2\u0114\u0112\3\2\2\2\u0115\u0118") - buf.write("\3\2\2\2\u0116\u0114\3\2\2\2\u0116\u0117\3\2\2\2\u0117") - buf.write("\u0119\3\2\2\2\u0118\u0116\3\2\2\2\u0119\u011a\7\23\2") - buf.write("\2\u011a\u011b\7\20\2\2\u011b\u011c\5\24\13\2\u011c\u011d") - buf.write("\7\4\2\2\u011d\u011f\3\2\2\2\u011e\u00fa\3\2\2\2\u011e") - buf.write("\u0102\3\2\2\2\u011e\u010f\3\2\2\2\u011f\23\3\2\2\2\u0120") - buf.write("\u0121\7\u0083\2\2\u0121\25\3\2\2\2\u0122\u0124\7\24\2") - buf.write("\2\u0123\u0122\3\2\2\2\u0123\u0124\3\2\2\2\u0124\u0125") - buf.write("\3\2\2\2\u0125\u0126\t\3\2\2\u0126\u0130\5\u00bc_\2\u0127") - buf.write("\u0128\7\30\2\2\u0128\u012d\5\30\r\2\u0129\u012a\7\22") - buf.write("\2\2\u012a\u012c\5\30\r\2\u012b\u0129\3\2\2\2\u012c\u012f") - buf.write("\3\2\2\2\u012d\u012b\3\2\2\2\u012d\u012e\3\2\2\2\u012e") - buf.write("\u0131\3\2\2\2\u012f\u012d\3\2\2\2\u0130\u0127\3\2\2\2") - buf.write("\u0130\u0131\3\2\2\2\u0131\u0132\3\2\2\2\u0132\u0136\7") - buf.write("\21\2\2\u0133\u0135\5\32\16\2\u0134\u0133\3\2\2\2\u0135") - buf.write("\u0138\3\2\2\2\u0136\u0134\3\2\2\2\u0136\u0137\3\2\2\2") - buf.write("\u0137\u0139\3\2\2\2\u0138\u0136\3\2\2\2\u0139\u013a\7") - buf.write("\23\2\2\u013a\27\3\2\2\2\u013b\u0141\5J&\2\u013c\u013e") - buf.write("\7\31\2\2\u013d\u013f\5\u0086D\2\u013e\u013d\3\2\2\2\u013e") - buf.write("\u013f\3\2\2\2\u013f\u0140\3\2\2\2\u0140\u0142\7\32\2") - buf.write("\2\u0141\u013c\3\2\2\2\u0141\u0142\3\2\2\2\u0142\31\3") - buf.write("\2\2\2\u0143\u014d\5\34\17\2\u0144\u014d\5$\23\2\u0145") - buf.write("\u014d\5&\24\2\u0146\u014d\5(\25\2\u0147\u014d\5,\27\2") - buf.write("\u0148\u014d\5\64\33\2\u0149\u014d\58\35\2\u014a\u014d") - buf.write("\5 \21\2\u014b\u014d\5\"\22\2\u014c\u0143\3\2\2\2\u014c") - buf.write("\u0144\3\2\2\2\u014c\u0145\3\2\2\2\u014c\u0146\3\2\2\2") - buf.write("\u014c\u0147\3\2\2\2\u014c\u0148\3\2\2\2\u014c\u0149\3") - buf.write("\2\2\2\u014c\u014a\3\2\2\2\u014c\u014b\3\2\2\2\u014d\33") - buf.write("\3\2\2\2\u014e\u0157\5H%\2\u014f\u0156\7z\2\2\u0150\u0156") - buf.write("\7w\2\2\u0151\u0156\7y\2\2\u0152\u0156\7q\2\2\u0153\u0156") - buf.write("\7r\2\2\u0154\u0156\5\u00c0a\2\u0155\u014f\3\2\2\2\u0155") - buf.write("\u0150\3\2\2\2\u0155\u0151\3\2\2\2\u0155\u0152\3\2\2\2") - buf.write("\u0155\u0153\3\2\2\2\u0155\u0154\3\2\2\2\u0156\u0159\3") - buf.write("\2\2\2\u0157\u0155\3\2\2\2\u0157\u0158\3\2\2\2\u0158\u015a") - buf.write("\3\2\2\2\u0159\u0157\3\2\2\2\u015a\u015d\5\u00bc_\2\u015b") - buf.write("\u015c\7\f\2\2\u015c\u015e\5\u0082B\2\u015d\u015b\3\2") - buf.write("\2\2\u015d\u015e\3\2\2\2\u015e\u015f\3\2\2\2\u015f\u0160") - buf.write("\7\4\2\2\u0160\35\3\2\2\2\u0161\u0162\5H%\2\u0162\u0163") - buf.write("\7q\2\2\u0163\u0164\5\u00bc_\2\u0164\u0165\7\f\2\2\u0165") - buf.write("\u0166\5\u0082B\2\u0166\u0167\7\4\2\2\u0167\37\3\2\2\2") - buf.write("\u0168\u0169\7\33\2\2\u0169\u016a\5\u00bc_\2\u016a\u016b") - buf.write("\5:\36\2\u016b\u016c\7\4\2\2\u016c!\3\2\2\2\u016d\u016e") - buf.write("\7}\2\2\u016e\u016f\5\u00bc_\2\u016f\u0170\7\30\2\2\u0170") - buf.write("\u0171\5\u0080A\2\u0171\u0172\7\4\2\2\u0172#\3\2\2\2\u0173") - buf.write("\u0174\7\34\2\2\u0174\u0175\5\u00bc_\2\u0175\u0178\7\35") - buf.write("\2\2\u0176\u0179\7\17\2\2\u0177\u0179\5H%\2\u0178\u0176") - buf.write("\3\2\2\2\u0178\u0177\3\2\2\2\u0179\u017a\3\2\2\2\u017a") - buf.write("\u017b\7\4\2\2\u017b%\3\2\2\2\u017c\u017d\7\36\2\2\u017d") - buf.write("\u017e\5\u00bc_\2\u017e\u0189\7\21\2\2\u017f\u0180\5F") - buf.write("$\2\u0180\u0186\7\4\2\2\u0181\u0182\5F$\2\u0182\u0183") - buf.write("\7\4\2\2\u0183\u0185\3\2\2\2\u0184\u0181\3\2\2\2\u0185") - buf.write("\u0188\3\2\2\2\u0186\u0184\3\2\2\2\u0186\u0187\3\2\2\2") - buf.write("\u0187\u018a\3\2\2\2\u0188\u0186\3\2\2\2\u0189\u017f\3") - buf.write("\2\2\2\u0189\u018a\3\2\2\2\u018a\u018b\3\2\2\2\u018b\u018c") - buf.write("\7\23\2\2\u018c\'\3\2\2\2\u018d\u018e\7\37\2\2\u018e\u0190") - buf.write("\5\u00bc_\2\u018f\u0191\5:\36\2\u0190\u018f\3\2\2\2\u0190") - buf.write("\u0191\3\2\2\2\u0191\u0196\3\2\2\2\u0192\u0195\7{\2\2") - buf.write("\u0193\u0195\5\u00c0a\2\u0194\u0192\3\2\2\2\u0194\u0193") - buf.write("\3\2\2\2\u0195\u0198\3\2\2\2\u0196\u0194\3\2\2\2\u0196") - buf.write("\u0197\3\2\2\2\u0197\u019b\3\2\2\2\u0198\u0196\3\2\2\2") - buf.write("\u0199\u019c\7\4\2\2\u019a\u019c\5V,\2\u019b\u0199\3\2") - buf.write("\2\2\u019b\u019a\3\2\2\2\u019c)\3\2\2\2\u019d\u01a3\5") - buf.write("\u00bc_\2\u019e\u01a0\7\31\2\2\u019f\u01a1\5\u0086D\2") - buf.write("\u01a0\u019f\3\2\2\2\u01a0\u01a1\3\2\2\2\u01a1\u01a2\3") - buf.write("\2\2\2\u01a2\u01a4\7\32\2\2\u01a3\u019e\3\2\2\2\u01a3") - buf.write("\u01a4\3\2\2\2\u01a4+\3\2\2\2\u01a5\u01a6\5.\30\2\u01a6") - buf.write("\u01a7\5:\36\2\u01a7\u01a9\5\62\32\2\u01a8\u01aa\5\60") - buf.write("\31\2\u01a9\u01a8\3\2\2\2\u01a9\u01aa\3\2\2\2\u01aa\u01ad") - buf.write("\3\2\2\2\u01ab\u01ae\7\4\2\2\u01ac\u01ae\5V,\2\u01ad\u01ab") - buf.write("\3\2\2\2\u01ad\u01ac\3\2\2\2\u01ae-\3\2\2\2\u01af\u01b1") - buf.write("\7 \2\2\u01b0\u01b2\5\u00bc_\2\u01b1\u01b0\3\2\2\2\u01b1") - buf.write("\u01b2\3\2\2\2\u01b2\u01b7\3\2\2\2\u01b3\u01b7\7\177\2") - buf.write("\2\u01b4\u01b7\7\u0080\2\2\u01b5\u01b7\7\u0081\2\2\u01b6") - buf.write("\u01af\3\2\2\2\u01b6\u01b3\3\2\2\2\u01b6\u01b4\3\2\2\2") - buf.write("\u01b6\u01b5\3\2\2\2\u01b7/\3\2\2\2\u01b8\u01b9\7!\2\2") - buf.write("\u01b9\u01ba\5:\36\2\u01ba\61\3\2\2\2\u01bb\u01c4\7u\2") - buf.write("\2\u01bc\u01c4\7z\2\2\u01bd\u01c4\7w\2\2\u01be\u01c4\7") - buf.write("y\2\2\u01bf\u01c4\7{\2\2\u01c0\u01c4\5T+\2\u01c1\u01c4") - buf.write("\5*\26\2\u01c2\u01c4\5\u00c0a\2\u01c3\u01bb\3\2\2\2\u01c3") - buf.write("\u01bc\3\2\2\2\u01c3\u01bd\3\2\2\2\u01c3\u01be\3\2\2\2") - buf.write("\u01c3\u01bf\3\2\2\2\u01c3\u01c0\3\2\2\2\u01c3\u01c1\3") - buf.write("\2\2\2\u01c3\u01c2\3\2\2\2\u01c4\u01c7\3\2\2\2\u01c5\u01c3") - buf.write("\3\2\2\2\u01c5\u01c6\3\2\2\2\u01c6\63\3\2\2\2\u01c7\u01c5") - buf.write("\3\2\2\2\u01c8\u01c9\7\"\2\2\u01c9\u01ca\5\u00bc_\2\u01ca") - buf.write("\u01cc\5> \2\u01cb\u01cd\7o\2\2\u01cc\u01cb\3\2\2\2\u01cc") - buf.write("\u01cd\3\2\2\2\u01cd\u01ce\3\2\2\2\u01ce\u01cf\7\4\2\2") - buf.write("\u01cf\65\3\2\2\2\u01d0\u01d1\5\u00bc_\2\u01d1\67\3\2") - buf.write("\2\2\u01d2\u01d3\7#\2\2\u01d3\u01d4\5\u00bc_\2\u01d4\u01d6") - buf.write("\7\21\2\2\u01d5\u01d7\5\66\34\2\u01d6\u01d5\3\2\2\2\u01d6") - buf.write("\u01d7\3\2\2\2\u01d7\u01dc\3\2\2\2\u01d8\u01d9\7\22\2") - buf.write("\2\u01d9\u01db\5\66\34\2\u01da\u01d8\3\2\2\2\u01db\u01de") - buf.write("\3\2\2\2\u01dc\u01da\3\2\2\2\u01dc\u01dd\3\2\2\2\u01dd") - buf.write("\u01df\3\2\2\2\u01de\u01dc\3\2\2\2\u01df\u01e0\7\23\2") - buf.write("\2\u01e09\3\2\2\2\u01e1\u01ea\7\31\2\2\u01e2\u01e7\5<") - buf.write("\37\2\u01e3\u01e4\7\22\2\2\u01e4\u01e6\5<\37\2\u01e5\u01e3") - buf.write("\3\2\2\2\u01e6\u01e9\3\2\2\2\u01e7\u01e5\3\2\2\2\u01e7") - buf.write("\u01e8\3\2\2\2\u01e8\u01eb\3\2\2\2\u01e9\u01e7\3\2\2\2") - buf.write("\u01ea\u01e2\3\2\2\2\u01ea\u01eb\3\2\2\2\u01eb\u01ec\3") - buf.write("\2\2\2\u01ec\u01ed\7\32\2\2\u01ed;\3\2\2\2\u01ee\u01f0") - buf.write("\5H%\2\u01ef\u01f1\5R*\2\u01f0\u01ef\3\2\2\2\u01f0\u01f1") - buf.write("\3\2\2\2\u01f1\u01f3\3\2\2\2\u01f2\u01f4\5\u00bc_\2\u01f3") - buf.write("\u01f2\3\2\2\2\u01f3\u01f4\3\2\2\2\u01f4=\3\2\2\2\u01f5") - buf.write("\u01fe\7\31\2\2\u01f6\u01fb\5@!\2\u01f7\u01f8\7\22\2\2") - buf.write("\u01f8\u01fa\5@!\2\u01f9\u01f7\3\2\2\2\u01fa\u01fd\3\2") - buf.write("\2\2\u01fb\u01f9\3\2\2\2\u01fb\u01fc\3\2\2\2\u01fc\u01ff") - buf.write("\3\2\2\2\u01fd\u01fb\3\2\2\2\u01fe\u01f6\3\2\2\2\u01fe") - buf.write("\u01ff\3\2\2\2\u01ff\u0200\3\2\2\2\u0200\u0201\7\32\2") - buf.write("\2\u0201?\3\2\2\2\u0202\u0204\5H%\2\u0203\u0205\7v\2\2") - buf.write("\u0204\u0203\3\2\2\2\u0204\u0205\3\2\2\2\u0205\u0207\3") - buf.write("\2\2\2\u0206\u0208\5\u00bc_\2\u0207\u0206\3\2\2\2\u0207") - buf.write("\u0208\3\2\2\2\u0208A\3\2\2\2\u0209\u0212\7\31\2\2\u020a") - buf.write("\u020f\5D#\2\u020b\u020c\7\22\2\2\u020c\u020e\5D#\2\u020d") - buf.write("\u020b\3\2\2\2\u020e\u0211\3\2\2\2\u020f\u020d\3\2\2\2") - buf.write("\u020f\u0210\3\2\2\2\u0210\u0213\3\2\2\2\u0211\u020f\3") - buf.write("\2\2\2\u0212\u020a\3\2\2\2\u0212\u0213\3\2\2\2\u0213\u0214") - buf.write("\3\2\2\2\u0214\u0215\7\32\2\2\u0215C\3\2\2\2\u0216\u0218") - buf.write("\5H%\2\u0217\u0219\5R*\2\u0218\u0217\3\2\2\2\u0218\u0219") - buf.write("\3\2\2\2\u0219E\3\2\2\2\u021a\u021c\5H%\2\u021b\u021d") - buf.write("\5R*\2\u021c\u021b\3\2\2\2\u021c\u021d\3\2\2\2\u021d\u021e") - buf.write("\3\2\2\2\u021e\u021f\5\u00bc_\2\u021fG\3\2\2\2\u0220\u0221") - buf.write("\b%\1\2\u0221\u0228\5\u0080A\2\u0222\u0228\5J&\2\u0223") - buf.write("\u0228\5N(\2\u0224\u0228\5P)\2\u0225\u0226\7&\2\2\u0226") - buf.write("\u0228\7x\2\2\u0227\u0220\3\2\2\2\u0227\u0222\3\2\2\2") - buf.write("\u0227\u0223\3\2\2\2\u0227\u0224\3\2\2\2\u0227\u0225\3") - buf.write("\2\2\2\u0228\u0231\3\2\2\2\u0229\u022a\f\5\2\2\u022a\u022c") - buf.write("\7$\2\2\u022b\u022d\5\u0082B\2\u022c\u022b\3\2\2\2\u022c") - buf.write("\u022d\3\2\2\2\u022d\u022e\3\2\2\2\u022e\u0230\7%\2\2") - buf.write("\u022f\u0229\3\2\2\2\u0230\u0233\3\2\2\2\u0231\u022f\3") - buf.write("\2\2\2\u0231\u0232\3\2\2\2\u0232I\3\2\2\2\u0233\u0231") - buf.write("\3\2\2\2\u0234\u0239\5\u00bc_\2\u0235\u0236\7\'\2\2\u0236") - buf.write("\u0238\5\u00bc_\2\u0237\u0235\3\2\2\2\u0238\u023b\3\2") - buf.write("\2\2\u0239\u0237\3\2\2\2\u0239\u023a\3\2\2\2\u023aK\3") - buf.write("\2\2\2\u023b\u0239\3\2\2\2\u023c\u023f\5\u0080A\2\u023d") - buf.write("\u023f\5J&\2\u023e\u023c\3\2\2\2\u023e\u023d\3\2\2\2\u023f") - buf.write("M\3\2\2\2\u0240\u0241\7(\2\2\u0241\u0242\7\31\2\2\u0242") - buf.write("\u0243\5L\'\2\u0243\u0244\7)\2\2\u0244\u0245\5H%\2\u0245") - buf.write("\u0246\7\32\2\2\u0246O\3\2\2\2\u0247\u0248\7 \2\2\u0248") - buf.write("\u024e\5B\"\2\u0249\u024d\7w\2\2\u024a\u024d\7u\2\2\u024b") - buf.write("\u024d\5T+\2\u024c\u0249\3\2\2\2\u024c\u024a\3\2\2\2\u024c") - buf.write("\u024b\3\2\2\2\u024d\u0250\3\2\2\2\u024e\u024c\3\2\2\2") - buf.write("\u024e\u024f\3\2\2\2\u024f\u0253\3\2\2\2\u0250\u024e\3") - buf.write("\2\2\2\u0251\u0252\7!\2\2\u0252\u0254\5B\"\2\u0253\u0251") - buf.write("\3\2\2\2\u0253\u0254\3\2\2\2\u0254Q\3\2\2\2\u0255\u0256") - buf.write("\t\4\2\2\u0256S\3\2\2\2\u0257\u0258\t\5\2\2\u0258U\3\2") - buf.write("\2\2\u0259\u025d\7\21\2\2\u025a\u025c\5X-\2\u025b\u025a") - buf.write("\3\2\2\2\u025c\u025f\3\2\2\2\u025d\u025b\3\2\2\2\u025d") - buf.write("\u025e\3\2\2\2\u025e\u0260\3\2\2\2\u025f\u025d\3\2\2\2") - buf.write("\u0260\u0261\7\23\2\2\u0261W\3\2\2\2\u0262\u0272\5\\/") - buf.write("\2\u0263\u0272\5^\60\2\u0264\u0272\5b\62\2\u0265\u0272") - buf.write("\5h\65\2\u0266\u0272\5V,\2\u0267\u0272\5j\66\2\u0268\u0272") - buf.write("\5l\67\2\u0269\u0272\5n8\2\u026a\u0272\5p9\2\u026b\u0272") - buf.write("\5r:\2\u026c\u0272\5t;\2\u026d\u0272\5v<\2\u026e\u0272") - buf.write("\5d\63\2\u026f\u0272\5f\64\2\u0270\u0272\5x=\2\u0271\u0262") - buf.write("\3\2\2\2\u0271\u0263\3\2\2\2\u0271\u0264\3\2\2\2\u0271") - buf.write("\u0265\3\2\2\2\u0271\u0266\3\2\2\2\u0271\u0267\3\2\2\2") - buf.write("\u0271\u0268\3\2\2\2\u0271\u0269\3\2\2\2\u0271\u026a\3") - buf.write("\2\2\2\u0271\u026b\3\2\2\2\u0271\u026c\3\2\2\2\u0271\u026d") - buf.write("\3\2\2\2\u0271\u026e\3\2\2\2\u0271\u026f\3\2\2\2\u0271") - buf.write("\u0270\3\2\2\2\u0272Y\3\2\2\2\u0273\u0274\5\u0082B\2\u0274") - buf.write("\u0275\7\4\2\2\u0275[\3\2\2\2\u0276\u0277\7-\2\2\u0277") - buf.write("\u0278\7\31\2\2\u0278\u0279\5\u0082B\2\u0279\u027a\7\32") - buf.write("\2\2\u027a\u027d\5X-\2\u027b\u027c\7.\2\2\u027c\u027e") - buf.write("\5X-\2\u027d\u027b\3\2\2\2\u027d\u027e\3\2\2\2\u027e]") - buf.write("\3\2\2\2\u027f\u0280\7/\2\2\u0280\u0282\5\u0082B\2\u0281") - buf.write("\u0283\5\60\31\2\u0282\u0281\3\2\2\2\u0282\u0283\3\2\2") - buf.write("\2\u0283\u0284\3\2\2\2\u0284\u0286\5V,\2\u0285\u0287\5") - buf.write("`\61\2\u0286\u0285\3\2\2\2\u0287\u0288\3\2\2\2\u0288\u0286") - buf.write("\3\2\2\2\u0288\u0289\3\2\2\2\u0289_\3\2\2\2\u028a\u028f") - buf.write("\7\60\2\2\u028b\u028d\5\u00bc_\2\u028c\u028b\3\2\2\2\u028c") - buf.write("\u028d\3\2\2\2\u028d\u028e\3\2\2\2\u028e\u0290\5:\36\2") - buf.write("\u028f\u028c\3\2\2\2\u028f\u0290\3\2\2\2\u0290\u0291\3") - buf.write("\2\2\2\u0291\u0292\5V,\2\u0292a\3\2\2\2\u0293\u0294\7") - buf.write("\61\2\2\u0294\u0295\7\31\2\2\u0295\u0296\5\u0082B\2\u0296") - buf.write("\u0297\7\32\2\2\u0297\u0298\5X-\2\u0298c\3\2\2\2\u0299") - buf.write("\u029c\5z>\2\u029a\u029c\5Z.\2\u029b\u0299\3\2\2\2\u029b") - buf.write("\u029a\3\2\2\2\u029ce\3\2\2\2\u029d\u029e\7\62\2\2\u029e") - buf.write("\u029f\5V,\2\u029fg\3\2\2\2\u02a0\u02a1\7\35\2\2\u02a1") - buf.write("\u02a4\7\31\2\2\u02a2\u02a5\5d\63\2\u02a3\u02a5\7\4\2") - buf.write("\2\u02a4\u02a2\3\2\2\2\u02a4\u02a3\3\2\2\2\u02a5\u02a8") - buf.write("\3\2\2\2\u02a6\u02a9\5Z.\2\u02a7\u02a9\7\4\2\2\u02a8\u02a6") - buf.write("\3\2\2\2\u02a8\u02a7\3\2\2\2\u02a9\u02ab\3\2\2\2\u02aa") - buf.write("\u02ac\5\u0082B\2\u02ab\u02aa\3\2\2\2\u02ab\u02ac\3\2") - buf.write("\2\2\u02ac\u02ad\3\2\2\2\u02ad\u02ae\7\32\2\2\u02ae\u02af") - buf.write("\5X-\2\u02afi\3\2\2\2\u02b0\u02b2\7\63\2\2\u02b1\u02b3") - buf.write("\7\u0083\2\2\u02b2\u02b1\3\2\2\2\u02b2\u02b3\3\2\2\2\u02b3") - buf.write("\u02b4\3\2\2\2\u02b4\u02b5\5\u0090I\2\u02b5k\3\2\2\2\u02b6") - buf.write("\u02b7\7\64\2\2\u02b7\u02b8\5X-\2\u02b8\u02b9\7\61\2\2") - buf.write("\u02b9\u02ba\7\31\2\2\u02ba\u02bb\5\u0082B\2\u02bb\u02bc") - buf.write("\7\32\2\2\u02bc\u02bd\7\4\2\2\u02bdm\3\2\2\2\u02be\u02bf") - buf.write("\7s\2\2\u02bf\u02c0\7\4\2\2\u02c0o\3\2\2\2\u02c1\u02c2") - buf.write("\7p\2\2\u02c2\u02c3\7\4\2\2\u02c3q\3\2\2\2\u02c4\u02c6") - buf.write("\7\65\2\2\u02c5\u02c7\5\u0082B\2\u02c6\u02c5\3\2\2\2\u02c6") - buf.write("\u02c7\3\2\2\2\u02c7\u02c8\3\2\2\2\u02c8\u02c9\7\4\2\2") - buf.write("\u02c9s\3\2\2\2\u02ca\u02cb\7\66\2\2\u02cb\u02cc\7\4\2") - buf.write("\2\u02ccu\3\2\2\2\u02cd\u02ce\7\67\2\2\u02ce\u02cf\5\u008e") - buf.write("H\2\u02cf\u02d0\7\4\2\2\u02d0w\3\2\2\2\u02d1\u02d2\78") - buf.write("\2\2\u02d2\u02d3\5\u008eH\2\u02d3\u02d4\7\4\2\2\u02d4") - buf.write("y\3\2\2\2\u02d5\u02d6\79\2\2\u02d6\u02dd\5~@\2\u02d7\u02dd") - buf.write("\5F$\2\u02d8\u02d9\7\31\2\2\u02d9\u02da\5|?\2\u02da\u02db") - buf.write("\7\32\2\2\u02db\u02dd\3\2\2\2\u02dc\u02d5\3\2\2\2\u02dc") - buf.write("\u02d7\3\2\2\2\u02dc\u02d8\3\2\2\2\u02dd\u02e0\3\2\2\2") - buf.write("\u02de\u02df\7\f\2\2\u02df\u02e1\5\u0082B\2\u02e0\u02de") - buf.write("\3\2\2\2\u02e0\u02e1\3\2\2\2\u02e1\u02e2\3\2\2\2\u02e2") - buf.write("\u02e3\7\4\2\2\u02e3{\3\2\2\2\u02e4\u02e6\5F$\2\u02e5") - buf.write("\u02e4\3\2\2\2\u02e5\u02e6\3\2\2\2\u02e6\u02ed\3\2\2\2") - buf.write("\u02e7\u02e9\7\22\2\2\u02e8\u02ea\5F$\2\u02e9\u02e8\3") - buf.write("\2\2\2\u02e9\u02ea\3\2\2\2\u02ea\u02ec\3\2\2\2\u02eb\u02e7") - buf.write("\3\2\2\2\u02ec\u02ef\3\2\2\2\u02ed\u02eb\3\2\2\2\u02ed") - buf.write("\u02ee\3\2\2\2\u02ee}\3\2\2\2\u02ef\u02ed\3\2\2\2\u02f0") - buf.write("\u02f7\7\31\2\2\u02f1\u02f3\5\u00bc_\2\u02f2\u02f1\3\2") - buf.write("\2\2\u02f2\u02f3\3\2\2\2\u02f3\u02f4\3\2\2\2\u02f4\u02f6") - buf.write("\7\22\2\2\u02f5\u02f2\3\2\2\2\u02f6\u02f9\3\2\2\2\u02f7") - buf.write("\u02f5\3\2\2\2\u02f7\u02f8\3\2\2\2\u02f8\u02fb\3\2\2\2") - buf.write("\u02f9\u02f7\3\2\2\2\u02fa\u02fc\5\u00bc_\2\u02fb\u02fa") - buf.write("\3\2\2\2\u02fb\u02fc\3\2\2\2\u02fc\u02fd\3\2\2\2\u02fd") - buf.write("\u02fe\7\32\2\2\u02fe\177\3\2\2\2\u02ff\u0300\t\6\2\2") - buf.write("\u0300\u0081\3\2\2\2\u0301\u0302\bB\1\2\u0302\u0303\7") - buf.write("?\2\2\u0303\u0314\5H%\2\u0304\u0305\7\31\2\2\u0305\u0306") - buf.write("\5\u0082B\2\u0306\u0307\7\32\2\2\u0307\u0314\3\2\2\2\u0308") - buf.write("\u0309\t\7\2\2\u0309\u0314\5\u0082B\25\u030a\u030b\t\b") - buf.write("\2\2\u030b\u0314\5\u0082B\24\u030c\u030d\t\t\2\2\u030d") - buf.write("\u0314\5\u0082B\23\u030e\u030f\7E\2\2\u030f\u0314\5\u0082") - buf.write("B\22\u0310\u0311\7\7\2\2\u0311\u0314\5\u0082B\21\u0312") - buf.write("\u0314\5\u0084C\2\u0313\u0301\3\2\2\2\u0313\u0304\3\2") - buf.write("\2\2\u0313\u0308\3\2\2\2\u0313\u030a\3\2\2\2\u0313\u030c") - buf.write("\3\2\2\2\u0313\u030e\3\2\2\2\u0313\u0310\3\2\2\2\u0313") - buf.write("\u0312\3\2\2\2\u0314\u035f\3\2\2\2\u0315\u0316\f\20\2") - buf.write("\2\u0316\u0317\7F\2\2\u0317\u035e\5\u0082B\21\u0318\u0319") - buf.write("\f\17\2\2\u0319\u031a\t\n\2\2\u031a\u035e\5\u0082B\20") - buf.write("\u031b\u031c\f\16\2\2\u031c\u031d\t\b\2\2\u031d\u035e") - buf.write("\5\u0082B\17\u031e\u031f\f\r\2\2\u031f\u0320\t\13\2\2") - buf.write("\u0320\u035e\5\u0082B\16\u0321\u0322\f\f\2\2\u0322\u0323") - buf.write("\7K\2\2\u0323\u035e\5\u0082B\r\u0324\u0325\f\13\2\2\u0325") - buf.write("\u0326\7\6\2\2\u0326\u035e\5\u0082B\f\u0327\u0328\f\n") - buf.write("\2\2\u0328\u0329\7L\2\2\u0329\u035e\5\u0082B\13\u032a") - buf.write("\u032b\f\t\2\2\u032b\u032c\t\f\2\2\u032c\u035e\5\u0082") - buf.write("B\n\u032d\u032e\f\b\2\2\u032e\u032f\t\r\2\2\u032f\u035e") - buf.write("\5\u0082B\t\u0330\u0331\f\7\2\2\u0331\u0332\7O\2\2\u0332") - buf.write("\u035e\5\u0082B\b\u0333\u0334\f\6\2\2\u0334\u0335\7\5") - buf.write("\2\2\u0335\u035e\5\u0082B\7\u0336\u0337\f\5\2\2\u0337") - buf.write("\u0338\7P\2\2\u0338\u0339\5\u0082B\2\u0339\u033a\7@\2") - buf.write("\2\u033a\u033b\5\u0082B\6\u033b\u035e\3\2\2\2\u033c\u033d") - buf.write("\f\4\2\2\u033d\u033e\t\16\2\2\u033e\u035e\5\u0082B\5\u033f") - buf.write("\u0340\f\35\2\2\u0340\u035e\t\7\2\2\u0341\u0342\f\33\2") - buf.write("\2\u0342\u0343\7$\2\2\u0343\u0344\5\u0082B\2\u0344\u0345") - buf.write("\7%\2\2\u0345\u035e\3\2\2\2\u0346\u0347\f\32\2\2\u0347") - buf.write("\u0349\7$\2\2\u0348\u034a\5\u0082B\2\u0349\u0348\3\2\2") - buf.write("\2\u0349\u034a\3\2\2\2\u034a\u034b\3\2\2\2\u034b\u034d") - buf.write("\7@\2\2\u034c\u034e\5\u0082B\2\u034d\u034c\3\2\2\2\u034d") - buf.write("\u034e\3\2\2\2\u034e\u034f\3\2\2\2\u034f\u035e\7%\2\2") - buf.write("\u0350\u0351\f\31\2\2\u0351\u0352\7\'\2\2\u0352\u035e") - buf.write("\5\u00bc_\2\u0353\u0354\f\30\2\2\u0354\u0355\7\21\2\2") - buf.write("\u0355\u0356\5\u0088E\2\u0356\u0357\7\23\2\2\u0357\u035e") - buf.write("\3\2\2\2\u0358\u0359\f\27\2\2\u0359\u035a\7\31\2\2\u035a") - buf.write("\u035b\5\u008cG\2\u035b\u035c\7\32\2\2\u035c\u035e\3\2") - buf.write("\2\2\u035d\u0315\3\2\2\2\u035d\u0318\3\2\2\2\u035d\u031b") - buf.write("\3\2\2\2\u035d\u031e\3\2\2\2\u035d\u0321\3\2\2\2\u035d") - buf.write("\u0324\3\2\2\2\u035d\u0327\3\2\2\2\u035d\u032a\3\2\2\2") - buf.write("\u035d\u032d\3\2\2\2\u035d\u0330\3\2\2\2\u035d\u0333\3") - buf.write("\2\2\2\u035d\u0336\3\2\2\2\u035d\u033c\3\2\2\2\u035d\u033f") - buf.write("\3\2\2\2\u035d\u0341\3\2\2\2\u035d\u0346\3\2\2\2\u035d") - buf.write("\u0350\3\2\2\2\u035d\u0353\3\2\2\2\u035d\u0358\3\2\2\2") - buf.write("\u035e\u0361\3\2\2\2\u035f\u035d\3\2\2\2\u035f\u0360\3") - buf.write("\2\2\2\u0360\u0083\3\2\2\2\u0361\u035f\3\2\2\2\u0362\u0374") - buf.write("\7i\2\2\u0363\u0374\5\u00ba^\2\u0364\u0374\5\u00be`\2") - buf.write("\u0365\u0374\5\u00c2b\2\u0366\u0369\5\u00bc_\2\u0367\u0368") - buf.write("\7$\2\2\u0368\u036a\7%\2\2\u0369\u0367\3\2\2\2\u0369\u036a") - buf.write("\3\2\2\2\u036a\u0374\3\2\2\2\u036b\u0374\7}\2\2\u036c") - buf.write("\u0374\7x\2\2\u036d\u0374\5\u00b6\\\2\u036e\u0371\5\u00b8") - buf.write("]\2\u036f\u0370\7$\2\2\u0370\u0372\7%\2\2\u0371\u036f") - buf.write("\3\2\2\2\u0371\u0372\3\2\2\2\u0372\u0374\3\2\2\2\u0373") - buf.write("\u0362\3\2\2\2\u0373\u0363\3\2\2\2\u0373\u0364\3\2\2\2") - buf.write("\u0373\u0365\3\2\2\2\u0373\u0366\3\2\2\2\u0373\u036b\3") - buf.write("\2\2\2\u0373\u036c\3\2\2\2\u0373\u036d\3\2\2\2\u0373\u036e") - buf.write("\3\2\2\2\u0374\u0085\3\2\2\2\u0375\u037a\5\u0082B\2\u0376") - buf.write("\u0377\7\22\2\2\u0377\u0379\5\u0082B\2\u0378\u0376\3\2") - buf.write("\2\2\u0379\u037c\3\2\2\2\u037a\u0378\3\2\2\2\u037a\u037b") - buf.write("\3\2\2\2\u037b\u0087\3\2\2\2\u037c\u037a\3\2\2\2\u037d") - buf.write("\u0382\5\u008aF\2\u037e\u037f\7\22\2\2\u037f\u0381\5\u008a") - buf.write("F\2\u0380\u037e\3\2\2\2\u0381\u0384\3\2\2\2\u0382\u0380") - buf.write("\3\2\2\2\u0382\u0383\3\2\2\2\u0383\u0386\3\2\2\2\u0384") - buf.write("\u0382\3\2\2\2\u0385\u0387\7\22\2\2\u0386\u0385\3\2\2") - buf.write("\2\u0386\u0387\3\2\2\2\u0387\u0089\3\2\2\2\u0388\u0389") - buf.write("\5\u00bc_\2\u0389\u038a\7@\2\2\u038a\u038b\5\u0082B\2") - buf.write("\u038b\u008b\3\2\2\2\u038c\u038e\7\21\2\2\u038d\u038f") - buf.write("\5\u0088E\2\u038e\u038d\3\2\2\2\u038e\u038f\3\2\2\2\u038f") - buf.write("\u0390\3\2\2\2\u0390\u0395\7\23\2\2\u0391\u0393\5\u0086") - buf.write("D\2\u0392\u0391\3\2\2\2\u0392\u0393\3\2\2\2\u0393\u0395") - buf.write("\3\2\2\2\u0394\u038c\3\2\2\2\u0394\u0392\3\2\2\2\u0395") - buf.write("\u008d\3\2\2\2\u0396\u0397\5\u0082B\2\u0397\u0398\7\31") - buf.write("\2\2\u0398\u0399\5\u008cG\2\u0399\u039a\7\32\2\2\u039a") - buf.write("\u008f\3\2\2\2\u039b\u039f\7\21\2\2\u039c\u039e\5\u0092") - buf.write("J\2\u039d\u039c\3\2\2\2\u039e\u03a1\3\2\2\2\u039f\u039d") - buf.write("\3\2\2\2\u039f\u03a0\3\2\2\2\u03a0\u03a2\3\2\2\2\u03a1") - buf.write("\u039f\3\2\2\2\u03a2\u03a3\7\23\2\2\u03a3\u0091\3\2\2") - buf.write("\2\u03a4\u03b7\5\u00bc_\2\u03a5\u03b7\5\u0090I\2\u03a6") - buf.write("\u03b7\5\u0094K\2\u03a7\u03b7\5\u009aN\2\u03a8\u03b7\5") - buf.write("\u009cO\2\u03a9\u03b7\5\u00a2R\2\u03aa\u03b7\5\u00a4S") - buf.write("\2\u03ab\u03b7\5\u00a6T\2\u03ac\u03b7\5\u00aaV\2\u03ad") - buf.write("\u03b7\5\u00aeX\2\u03ae\u03b7\5\u00b0Y\2\u03af\u03b7\7") - buf.write("p\2\2\u03b0\u03b7\7s\2\2\u03b1\u03b7\7t\2\2\u03b2\u03b7") - buf.write("\5\u00b4[\2\u03b3\u03b7\5\u00ba^\2\u03b4\u03b7\5\u00c2") - buf.write("b\2\u03b5\u03b7\5\u00be`\2\u03b6\u03a4\3\2\2\2\u03b6\u03a5") - buf.write("\3\2\2\2\u03b6\u03a6\3\2\2\2\u03b6\u03a7\3\2\2\2\u03b6") - buf.write("\u03a8\3\2\2\2\u03b6\u03a9\3\2\2\2\u03b6\u03aa\3\2\2\2") - buf.write("\u03b6\u03ab\3\2\2\2\u03b6\u03ac\3\2\2\2\u03b6\u03ad\3") - buf.write("\2\2\2\u03b6\u03ae\3\2\2\2\u03b6\u03af\3\2\2\2\u03b6\u03b0") - buf.write("\3\2\2\2\u03b6\u03b1\3\2\2\2\u03b6\u03b2\3\2\2\2\u03b6") - buf.write("\u03b3\3\2\2\2\u03b6\u03b4\3\2\2\2\u03b6\u03b5\3\2\2\2") - buf.write("\u03b7\u0093\3\2\2\2\u03b8\u03bc\5\u0098M\2\u03b9\u03bc") - buf.write("\5\u00b2Z\2\u03ba\u03bc\5\u0096L\2\u03bb\u03b8\3\2\2\2") - buf.write("\u03bb\u03b9\3\2\2\2\u03bb\u03ba\3\2\2\2\u03bc\u0095\3") - buf.write("\2\2\2\u03bd\u03be\5\u00bc_\2\u03be\u03bf\7\'\2\2\u03bf") - buf.write("\u03c0\5\u00bc_\2\u03c0\u0097\3\2\2\2\u03c1\u03c6\7\65") - buf.write("\2\2\u03c2\u03c6\7&\2\2\u03c3\u03c6\7<\2\2\u03c4\u03c6") - buf.write("\5\u00bc_\2\u03c5\u03c1\3\2\2\2\u03c5\u03c2\3\2\2\2\u03c5") - buf.write("\u03c3\3\2\2\2\u03c5\u03c4\3\2\2\2\u03c6\u03d3\3\2\2\2") - buf.write("\u03c7\u03c9\7\31\2\2\u03c8\u03ca\5\u0094K\2\u03c9\u03c8") - buf.write("\3\2\2\2\u03c9\u03ca\3\2\2\2\u03ca\u03cf\3\2\2\2\u03cb") - buf.write("\u03cc\7\22\2\2\u03cc\u03ce\5\u0094K\2\u03cd\u03cb\3\2") - buf.write("\2\2\u03ce\u03d1\3\2\2\2\u03cf\u03cd\3\2\2\2\u03cf\u03d0") - buf.write("\3\2\2\2\u03d0\u03d2\3\2\2\2\u03d1\u03cf\3\2\2\2\u03d2") - buf.write("\u03d4\7\32\2\2\u03d3\u03c7\3\2\2\2\u03d3\u03d4\3\2\2") - buf.write("\2\u03d4\u0099\3\2\2\2\u03d5\u03d6\7[\2\2\u03d6\u03d9") - buf.write("\5\u009eP\2\u03d7\u03d8\7\\\2\2\u03d8\u03da\5\u0094K\2") - buf.write("\u03d9\u03d7\3\2\2\2\u03d9\u03da\3\2\2\2\u03da\u009b\3") - buf.write("\2\2\2\u03db\u03dc\5\u009eP\2\u03dc\u03dd\7\\\2\2\u03dd") - buf.write("\u03de\5\u0094K\2\u03de\u009d\3\2\2\2\u03df\u03e6\5\u00bc") - buf.write("_\2\u03e0\u03e6\5\u0096L\2\u03e1\u03e2\7\31\2\2\u03e2") - buf.write("\u03e3\5\u00a0Q\2\u03e3\u03e4\7\32\2\2\u03e4\u03e6\3\2") - buf.write("\2\2\u03e5\u03df\3\2\2\2\u03e5\u03e0\3\2\2\2\u03e5\u03e1") - buf.write("\3\2\2\2\u03e6\u009f\3\2\2\2\u03e7\u03ec\5\u00bc_\2\u03e8") - buf.write("\u03e9\7\22\2\2\u03e9\u03eb\5\u00bc_\2\u03ea\u03e8\3\2") - buf.write("\2\2\u03eb\u03ee\3\2\2\2\u03ec\u03ea\3\2\2\2\u03ec\u03ed") - buf.write("\3\2\2\2\u03ed\u00a1\3\2\2\2\u03ee\u03ec\3\2\2\2\u03ef") - buf.write("\u03f0\7]\2\2\u03f0\u03f1\5\u00bc_\2\u03f1\u00a3\3\2\2") - buf.write("\2\u03f2\u03f3\5\u00bc_\2\u03f3\u03f4\7@\2\2\u03f4\u00a5") - buf.write("\3\2\2\2\u03f5\u03f6\7^\2\2\u03f6\u03fa\5\u0094K\2\u03f7") - buf.write("\u03f9\5\u00a8U\2\u03f8\u03f7\3\2\2\2\u03f9\u03fc\3\2") - buf.write("\2\2\u03fa\u03f8\3\2\2\2\u03fa\u03fb\3\2\2\2\u03fb\u00a7") - buf.write("\3\2\2\2\u03fc\u03fa\3\2\2\2\u03fd\u03fe\7_\2\2\u03fe") - buf.write("\u03ff\5\u00b2Z\2\u03ff\u0400\5\u0090I\2\u0400\u0404\3") - buf.write("\2\2\2\u0401\u0402\7`\2\2\u0402\u0404\5\u0090I\2\u0403") - buf.write("\u03fd\3\2\2\2\u0403\u0401\3\2\2\2\u0404\u00a9\3\2\2\2") - buf.write("\u0405\u0406\7 \2\2\u0406\u0407\5\u00bc_\2\u0407\u0409") - buf.write("\7\31\2\2\u0408\u040a\5\u00a0Q\2\u0409\u0408\3\2\2\2\u0409") - buf.write("\u040a\3\2\2\2\u040a\u040b\3\2\2\2\u040b\u040d\7\32\2") - buf.write("\2\u040c\u040e\5\u00acW\2\u040d\u040c\3\2\2\2\u040d\u040e") - buf.write("\3\2\2\2\u040e\u040f\3\2\2\2\u040f\u0410\5\u0090I\2\u0410") - buf.write("\u00ab\3\2\2\2\u0411\u0412\7a\2\2\u0412\u0413\5\u00a0") - buf.write("Q\2\u0413\u00ad\3\2\2\2\u0414\u0417\7\35\2\2\u0415\u0418") - buf.write("\5\u0090I\2\u0416\u0418\5\u0094K\2\u0417\u0415\3\2\2\2") - buf.write("\u0417\u0416\3\2\2\2\u0418\u0419\3\2\2\2\u0419\u041c\5") - buf.write("\u0094K\2\u041a\u041d\5\u0090I\2\u041b\u041d\5\u0094K") - buf.write("\2\u041c\u041a\3\2\2\2\u041c\u041b\3\2\2\2\u041d\u041e") - buf.write("\3\2\2\2\u041e\u041f\5\u0090I\2\u041f\u00af\3\2\2\2\u0420") - buf.write("\u0421\7-\2\2\u0421\u0422\5\u0094K\2\u0422\u0423\5\u0090") - buf.write("I\2\u0423\u00b1\3\2\2\2\u0424\u0429\5\u00c2b\2\u0425\u0429") - buf.write("\7j\2\2\u0426\u0429\7k\2\2\u0427\u0429\5\u00be`\2\u0428") - buf.write("\u0424\3\2\2\2\u0428\u0425\3\2\2\2\u0428\u0426\3\2\2\2") - buf.write("\u0428\u0427\3\2\2\2\u0429\u00b3\3\2\2\2\u042a\u042b\7") - buf.write("\63\2\2\u042b\u042c\5\u00bc_\2\u042c\u042d\5\u0090I\2") - buf.write("\u042d\u00b5\3\2\2\2\u042e\u0430\7\31\2\2\u042f\u0431") - buf.write("\5\u0082B\2\u0430\u042f\3\2\2\2\u0430\u0431\3\2\2\2\u0431") - buf.write("\u0438\3\2\2\2\u0432\u0434\7\22\2\2\u0433\u0435\5\u0082") - buf.write("B\2\u0434\u0433\3\2\2\2\u0434\u0435\3\2\2\2\u0435\u0437") - buf.write("\3\2\2\2\u0436\u0432\3\2\2\2\u0437\u043a\3\2\2\2\u0438") - buf.write("\u0436\3\2\2\2\u0438\u0439\3\2\2\2\u0439\u043b\3\2\2\2") - buf.write("\u043a\u0438\3\2\2\2\u043b\u0449\7\32\2\2\u043c\u0445") - buf.write("\7$\2\2\u043d\u0442\5\u0082B\2\u043e\u043f\7\22\2\2\u043f") - buf.write("\u0441\5\u0082B\2\u0440\u043e\3\2\2\2\u0441\u0444\3\2") - buf.write("\2\2\u0442\u0440\3\2\2\2\u0442\u0443\3\2\2\2\u0443\u0446") - buf.write("\3\2\2\2\u0444\u0442\3\2\2\2\u0445\u043d\3\2\2\2\u0445") - buf.write("\u0446\3\2\2\2\u0446\u0447\3\2\2\2\u0447\u0449\7%\2\2") - buf.write("\u0448\u042e\3\2\2\2\u0448\u043c\3\2\2\2\u0449\u00b7\3") - buf.write("\2\2\2\u044a\u044d\5\u0080A\2\u044b\u044d\5J&\2\u044c") - buf.write("\u044a\3\2\2\2\u044c\u044b\3\2\2\2\u044d\u00b9\3\2\2\2") - buf.write("\u044e\u0450\t\17\2\2\u044f\u0451\7l\2\2\u0450\u044f\3") - buf.write("\2\2\2\u0450\u0451\3\2\2\2\u0451\u00bb\3\2\2\2\u0452\u0453") - buf.write("\t\20\2\2\u0453\u00bd\3\2\2\2\u0454\u0456\7m\2\2\u0455") - buf.write("\u0454\3\2\2\2\u0456\u0457\3\2\2\2\u0457\u0455\3\2\2\2") - buf.write("\u0457\u0458\3\2\2\2\u0458\u00bf\3\2\2\2\u0459\u0465\7") - buf.write("c\2\2\u045a\u045b\7\31\2\2\u045b\u0460\5J&\2\u045c\u045d") - buf.write("\7\22\2\2\u045d\u045f\5J&\2\u045e\u045c\3\2\2\2\u045f") - buf.write("\u0462\3\2\2\2\u0460\u045e\3\2\2\2\u0460\u0461\3\2\2\2") - buf.write("\u0461\u0463\3\2\2\2\u0462\u0460\3\2\2\2\u0463\u0464\7") - buf.write("\32\2\2\u0464\u0466\3\2\2\2\u0465\u045a\3\2\2\2\u0465") - buf.write("\u0466\3\2\2\2\u0466\u00c1\3\2\2\2\u0467\u0469\7\u0083") - buf.write("\2\2\u0468\u0467\3\2\2\2\u0469\u046a\3\2\2\2\u046a\u0468") - buf.write("\3\2\2\2\u046a\u046b\3\2\2\2\u046b\u00c3\3\2\2\2\u0080") - buf.write("\u00cd\u00cf\u00dd\u00e1\u00e6\u00ec\u00f0\u00f3\u00f8") - buf.write("\u00fe\u0105\u0109\u0116\u011e\u0123\u012d\u0130\u0136") - buf.write("\u013e\u0141\u014c\u0155\u0157\u015d\u0178\u0186\u0189") - buf.write("\u0190\u0194\u0196\u019b\u01a0\u01a3\u01a9\u01ad\u01b1") - buf.write("\u01b6\u01c3\u01c5\u01cc\u01d6\u01dc\u01e7\u01ea\u01f0") - buf.write("\u01f3\u01fb\u01fe\u0204\u0207\u020f\u0212\u0218\u021c") - buf.write("\u0227\u022c\u0231\u0239\u023e\u024c\u024e\u0253\u025d") - buf.write("\u0271\u027d\u0282\u0288\u028c\u028f\u029b\u02a4\u02a8") - buf.write("\u02ab\u02b2\u02c6\u02dc\u02e0\u02e5\u02e9\u02ed\u02f2") - buf.write("\u02f7\u02fb\u0313\u0349\u034d\u035d\u035f\u0369\u0371") - buf.write("\u0373\u037a\u0382\u0386\u038e\u0392\u0394\u039f\u03b6") - buf.write("\u03bb\u03c5\u03c9\u03cf\u03d3\u03d9\u03e5\u03ec\u03fa") - buf.write("\u0403\u0409\u040d\u0417\u041c\u0428\u0430\u0434\u0438") - buf.write("\u0442\u0445\u0448\u044c\u0450\u0457\u0460\u0465\u046a") + buf.write("_\t_\4`\t`\4a\ta\4b\tb\4c\tc\4d\td\4e\te\4f\tf\3\2\3\2") + buf.write("\3\2\3\2\3\2\3\2\3\2\3\2\3\2\3\2\7\2\u00d7\n\2\f\2\16") + buf.write("\2\u00da\13\2\3\2\3\2\3\3\3\3\3\3\3\3\3\3\3\4\3\4\3\5") + buf.write("\3\5\3\5\5\5\u00e8\n\5\3\6\3\6\5\6\u00ec\n\6\3\6\7\6\u00ef") + buf.write("\n\6\f\6\16\6\u00f2\13\6\3\7\3\7\3\b\5\b\u00f7\n\b\3\b") + buf.write("\3\b\5\b\u00fb\n\b\3\b\5\b\u00fe\n\b\3\t\3\t\3\t\5\t\u0103") + buf.write("\n\t\3\n\3\n\3\n\3\n\5\n\u0109\n\n\3\n\3\n\3\n\3\n\3\n") + buf.write("\5\n\u0110\n\n\3\n\3\n\5\n\u0114\n\n\3\n\3\n\3\n\3\n\3") + buf.write("\n\3\n\3\n\3\n\3\n\7\n\u011f\n\n\f\n\16\n\u0122\13\n\3") + buf.write("\n\3\n\3\n\3\n\3\n\5\n\u0129\n\n\3\13\3\13\3\f\5\f\u012e") + buf.write("\n\f\3\f\3\f\3\f\3\f\3\f\3\f\7\f\u0136\n\f\f\f\16\f\u0139") + buf.write("\13\f\5\f\u013b\n\f\3\f\3\f\7\f\u013f\n\f\f\f\16\f\u0142") + buf.write("\13\f\3\f\3\f\3\r\3\r\3\r\5\r\u0149\n\r\3\r\5\r\u014c") + buf.write("\n\r\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\5\16") + buf.write("\u0157\n\16\3\17\3\17\3\17\3\17\3\17\3\17\3\17\7\17\u0160") + buf.write("\n\17\f\17\16\17\u0163\13\17\3\17\3\17\3\17\5\17\u0168") + buf.write("\n\17\3\17\3\17\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\21") + buf.write("\3\21\3\21\3\21\3\21\3\22\3\22\3\22\3\22\3\22\3\22\3\23") + buf.write("\3\23\3\23\3\23\3\23\5\23\u0183\n\23\3\23\5\23\u0186\n") + buf.write("\23\3\23\3\23\3\24\3\24\3\24\3\24\3\24\7\24\u018f\n\24") + buf.write("\f\24\16\24\u0192\13\24\3\24\3\24\5\24\u0196\n\24\3\25") + buf.write("\3\25\3\25\5\25\u019b\n\25\3\26\3\26\3\27\3\27\3\27\3") + buf.write("\27\3\27\3\27\3\27\3\27\7\27\u01a7\n\27\f\27\16\27\u01aa") + buf.write("\13\27\5\27\u01ac\n\27\3\27\3\27\3\30\3\30\3\30\5\30\u01b3") + buf.write("\n\30\3\30\3\30\7\30\u01b7\n\30\f\30\16\30\u01ba\13\30") + buf.write("\3\30\3\30\5\30\u01be\n\30\3\31\3\31\3\31\5\31\u01c3\n") + buf.write("\31\3\31\5\31\u01c6\n\31\3\32\3\32\3\32\3\32\5\32\u01cc") + buf.write("\n\32\3\32\3\32\5\32\u01d0\n\32\3\33\3\33\5\33\u01d4\n") + buf.write("\33\3\33\3\33\3\33\5\33\u01d9\n\33\3\34\3\34\3\34\3\35") + buf.write("\3\35\3\35\3\35\3\35\3\35\3\35\3\35\7\35\u01e6\n\35\f") + buf.write("\35\16\35\u01e9\13\35\3\36\3\36\3\36\3\36\5\36\u01ef\n") + buf.write("\36\3\36\3\36\3\37\3\37\3 \3 \3 \3 \5 \u01f9\n \3 \3 ") + buf.write("\7 \u01fd\n \f \16 \u0200\13 \3 \3 \3!\3!\3!\3!\7!\u0208") + buf.write("\n!\f!\16!\u020b\13!\5!\u020d\n!\3!\3!\3\"\3\"\5\"\u0213") + buf.write("\n\"\3\"\5\"\u0216\n\"\3#\3#\3#\3#\7#\u021c\n#\f#\16#") + buf.write("\u021f\13#\5#\u0221\n#\3#\3#\3$\3$\5$\u0227\n$\3$\5$\u022a") + buf.write("\n$\3%\3%\3%\3%\7%\u0230\n%\f%\16%\u0233\13%\5%\u0235") + buf.write("\n%\3%\3%\3&\3&\5&\u023b\n&\3\'\3\'\5\'\u023f\n\'\3\'") + buf.write("\3\'\3(\3(\3(\3(\3(\3(\3(\5(\u024a\n(\3(\3(\3(\5(\u024f") + buf.write("\n(\3(\7(\u0252\n(\f(\16(\u0255\13(\3)\3)\3)\7)\u025a") + buf.write("\n)\f)\16)\u025d\13)\3*\3*\5*\u0261\n*\3+\3+\3+\3+\5+") + buf.write("\u0267\n+\3+\3+\3+\5+\u026c\n+\3+\3+\3,\3,\3-\3-\3.\3") + buf.write(".\3.\3.\3.\7.\u0279\n.\f.\16.\u027c\13.\3.\3.\5.\u0280") + buf.write("\n.\3/\3/\3\60\3\60\3\61\3\61\7\61\u0288\n\61\f\61\16") + buf.write("\61\u028b\13\61\3\61\3\61\3\62\3\62\3\62\3\62\3\62\3\62") + buf.write("\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\5\62\u029e") + buf.write("\n\62\3\63\3\63\3\63\3\64\3\64\3\64\3\64\3\64\3\64\3\64") + buf.write("\5\64\u02aa\n\64\3\65\3\65\3\65\5\65\u02af\n\65\3\65\3") + buf.write("\65\6\65\u02b3\n\65\r\65\16\65\u02b4\3\66\3\66\5\66\u02b9") + buf.write("\n\66\3\66\5\66\u02bc\n\66\3\66\3\66\3\67\3\67\3\67\3") + buf.write("\67\3\67\3\67\38\38\58\u02c8\n8\39\39\39\3:\3:\3:\3:\5") + buf.write(":\u02d1\n:\3:\3:\5:\u02d5\n:\3:\5:\u02d8\n:\3:\3:\3:\3") + buf.write(";\3;\5;\u02df\n;\3;\3;\3;\3;\5;\u02e5\n;\3;\3;\3<\3<\3") + buf.write("=\3=\3=\3=\3=\3=\3=\3=\3>\3>\3>\3?\3?\3?\3@\3@\5@\u02fb") + buf.write("\n@\3@\3@\3A\3A\3A\3B\3B\3B\3B\3C\3C\3C\3C\3D\3D\3D\3") + buf.write("D\3D\3D\3D\5D\u0311\nD\3D\3D\5D\u0315\nD\3D\3D\3E\5E\u031a") + buf.write("\nE\3E\3E\5E\u031e\nE\7E\u0320\nE\fE\16E\u0323\13E\3F") + buf.write("\3F\5F\u0327\nF\3F\7F\u032a\nF\fF\16F\u032d\13F\3F\5F") + buf.write("\u0330\nF\3F\3F\3G\3G\3H\3H\3H\3H\3H\3H\3H\3H\3H\3H\3") + buf.write("H\3H\3H\3H\3H\3H\3H\3H\5H\u0348\nH\3H\3H\3H\3H\3H\3H\3") + buf.write("H\3H\3H\3H\3H\3H\3H\3H\3H\3H\3H\3H\3H\3H\3H\3H\3H\3H\3") + buf.write("H\3H\3H\3H\3H\3H\3H\3H\3H\3H\3H\3H\3H\3H\3H\3H\3H\3H\3") + buf.write("H\3H\3H\3H\3H\3H\3H\3H\3H\3H\5H\u037e\nH\3H\3H\5H\u0382") + buf.write("\nH\3H\3H\3H\3H\3H\3H\3H\3H\3H\3H\3H\3H\3H\3H\7H\u0392") + buf.write("\nH\fH\16H\u0395\13H\3I\3I\3I\3I\3I\3I\3I\3I\3I\5I\u03a0") + buf.write("\nI\3J\3J\3J\7J\u03a5\nJ\fJ\16J\u03a8\13J\3K\3K\3K\7K") + buf.write("\u03ad\nK\fK\16K\u03b0\13K\3K\5K\u03b3\nK\3L\3L\3L\3L") + buf.write("\3M\3M\5M\u03bb\nM\3M\3M\5M\u03bf\nM\5M\u03c1\nM\3N\3") + buf.write("N\3N\3N\3N\3O\3O\7O\u03ca\nO\fO\16O\u03cd\13O\3O\3O\3") + buf.write("P\3P\3P\3P\3P\3P\3P\3P\3P\3P\3P\3P\3P\3P\3P\3P\3P\5P\u03e2") + buf.write("\nP\3Q\3Q\3Q\5Q\u03e7\nQ\3R\3R\3R\3R\3S\3S\3S\3S\5S\u03f1") + buf.write("\nS\3S\3S\5S\u03f5\nS\3S\3S\7S\u03f9\nS\fS\16S\u03fc\13") + buf.write("S\3S\5S\u03ff\nS\3T\3T\3T\3T\5T\u0405\nT\3U\3U\3U\3U\3") + buf.write("V\3V\3V\3V\3V\3V\3V\5V\u0412\nV\3W\3W\3W\7W\u0417\nW\f") + buf.write("W\16W\u041a\13W\3X\3X\3X\3X\3Y\3Y\3Y\3Z\3Z\3Z\7Z\u0426") + buf.write("\nZ\fZ\16Z\u0429\13Z\3[\3[\3[\3[\3[\3[\5[\u0431\n[\3\\") + buf.write("\3\\\3\\\3\\\5\\\u0437\n\\\3\\\3\\\5\\\u043b\n\\\3\\\3") + buf.write("\\\3]\3]\3]\3^\3^\3^\5^\u0445\n^\3^\3^\3^\5^\u044a\n^") + buf.write("\3^\3^\3_\3_\3_\3_\3`\3`\3`\3`\3`\5`\u0457\n`\3a\3a\5") + buf.write("a\u045b\na\3a\3a\5a\u045f\na\7a\u0461\na\fa\16a\u0464") + buf.write("\13a\3a\3a\3a\3a\3a\7a\u046b\na\fa\16a\u046e\13a\5a\u0470") + buf.write("\na\3a\5a\u0473\na\3b\3b\5b\u0477\nb\3c\3c\3d\6d\u047c") + buf.write("\nd\rd\16d\u047d\3e\3e\3e\3e\3e\7e\u0485\ne\fe\16e\u0488") + buf.write("\13e\3e\3e\5e\u048c\ne\3f\6f\u048f\nf\rf\16f\u0490\3f") + buf.write("\2\4N\u008eg\2\4\6\b\n\f\16\20\22\24\26\30\32\34\36 \"") + buf.write("$&(*,.\60\62\64\668:<>@BDFHJLNPRTVXZ\\^`bdfhjlnprtvxz") + buf.write("|~\u0080\u0082\u0084\u0086\u0088\u008a\u008c\u008e\u0090") + buf.write("\u0092\u0094\u0096\u0098\u009a\u009c\u009e\u00a0\u00a2") + buf.write("\u00a4\u00a6\u00a8\u00aa\u00ac\u00ae\u00b0\u00b2\u00b4") + buf.write("\u00b6\u00b8\u00ba\u00bc\u00be\u00c0\u00c2\u00c4\u00c6") + buf.write("\u00c8\u00ca\2\21\3\2\7\r\3\2\25\27\5\2\5\5\7\f\36%\3") + buf.write("\2\62\64\6\2ppww{{}}\5\2..ADcg\3\2EF\3\2 !\4\2\5\5\"#") + buf.write("\3\2LM\3\2\t\f\3\2$%\4\2\r\rPY\3\2ij\f\2\20\20\33\33.") + buf.write(".\64\64@@aassww~\177\u0081\u0082\2\u0513\2\u00d8\3\2\2") + buf.write("\2\4\u00dd\3\2\2\2\6\u00e2\3\2\2\2\b\u00e7\3\2\2\2\n\u00e9") + buf.write("\3\2\2\2\f\u00f3\3\2\2\2\16\u00fd\3\2\2\2\20\u00ff\3\2") + buf.write("\2\2\22\u0128\3\2\2\2\24\u012a\3\2\2\2\26\u012d\3\2\2") + buf.write("\2\30\u0145\3\2\2\2\32\u0156\3\2\2\2\34\u0158\3\2\2\2") + buf.write("\36\u016b\3\2\2\2 \u0172\3\2\2\2\"\u0177\3\2\2\2$\u017d") + buf.write("\3\2\2\2&\u0195\3\2\2\2(\u0197\3\2\2\2*\u019c\3\2\2\2") + buf.write(",\u019e\3\2\2\2.\u01af\3\2\2\2\60\u01bf\3\2\2\2\62\u01c7") + buf.write("\3\2\2\2\64\u01d8\3\2\2\2\66\u01da\3\2\2\28\u01e7\3\2") + buf.write("\2\2:\u01ea\3\2\2\2<\u01f2\3\2\2\2>\u01f4\3\2\2\2@\u0203") + buf.write("\3\2\2\2B\u0210\3\2\2\2D\u0217\3\2\2\2F\u0224\3\2\2\2") + buf.write("H\u022b\3\2\2\2J\u0238\3\2\2\2L\u023c\3\2\2\2N\u0249\3") + buf.write("\2\2\2P\u0256\3\2\2\2R\u0260\3\2\2\2T\u0262\3\2\2\2V\u026f") + buf.write("\3\2\2\2X\u0271\3\2\2\2Z\u0273\3\2\2\2\\\u0281\3\2\2\2") + buf.write("^\u0283\3\2\2\2`\u0285\3\2\2\2b\u029d\3\2\2\2d\u029f\3") + buf.write("\2\2\2f\u02a2\3\2\2\2h\u02ab\3\2\2\2j\u02b6\3\2\2\2l\u02bf") + buf.write("\3\2\2\2n\u02c7\3\2\2\2p\u02c9\3\2\2\2r\u02cc\3\2\2\2") + buf.write("t\u02dc\3\2\2\2v\u02e8\3\2\2\2x\u02ea\3\2\2\2z\u02f2\3") + buf.write("\2\2\2|\u02f5\3\2\2\2~\u02f8\3\2\2\2\u0080\u02fe\3\2\2") + buf.write("\2\u0082\u0301\3\2\2\2\u0084\u0305\3\2\2\2\u0086\u0310") + buf.write("\3\2\2\2\u0088\u0319\3\2\2\2\u008a\u0324\3\2\2\2\u008c") + buf.write("\u0333\3\2\2\2\u008e\u0347\3\2\2\2\u0090\u039f\3\2\2\2") + buf.write("\u0092\u03a1\3\2\2\2\u0094\u03a9\3\2\2\2\u0096\u03b4\3") + buf.write("\2\2\2\u0098\u03c0\3\2\2\2\u009a\u03c2\3\2\2\2\u009c\u03c7") + buf.write("\3\2\2\2\u009e\u03e1\3\2\2\2\u00a0\u03e6\3\2\2\2\u00a2") + buf.write("\u03e8\3\2\2\2\u00a4\u03f0\3\2\2\2\u00a6\u0400\3\2\2\2") + buf.write("\u00a8\u0406\3\2\2\2\u00aa\u0411\3\2\2\2\u00ac\u0413\3") + buf.write("\2\2\2\u00ae\u041b\3\2\2\2\u00b0\u041f\3\2\2\2\u00b2\u0422") + buf.write("\3\2\2\2\u00b4\u0430\3\2\2\2\u00b6\u0432\3\2\2\2\u00b8") + buf.write("\u043e\3\2\2\2\u00ba\u0441\3\2\2\2\u00bc\u044d\3\2\2\2") + buf.write("\u00be\u0456\3\2\2\2\u00c0\u0472\3\2\2\2\u00c2\u0474\3") + buf.write("\2\2\2\u00c4\u0478\3\2\2\2\u00c6\u047b\3\2\2\2\u00c8\u047f") + buf.write("\3\2\2\2\u00ca\u048e\3\2\2\2\u00cc\u00d7\5\4\3\2\u00cd") + buf.write("\u00d7\5\22\n\2\u00ce\u00d7\5\26\f\2\u00cf\u00d7\5> \2") + buf.write("\u00d0\u00d7\5,\27\2\u00d1\u00d7\5\62\32\2\u00d2\u00d7") + buf.write("\5\36\20\2\u00d3\u00d7\5 \21\2\u00d4\u00d7\5\"\22\2\u00d5") + buf.write("\u00d7\5$\23\2\u00d6\u00cc\3\2\2\2\u00d6\u00cd\3\2\2\2") + buf.write("\u00d6\u00ce\3\2\2\2\u00d6\u00cf\3\2\2\2\u00d6\u00d0\3") + buf.write("\2\2\2\u00d6\u00d1\3\2\2\2\u00d6\u00d2\3\2\2\2\u00d6\u00d3") + buf.write("\3\2\2\2\u00d6\u00d4\3\2\2\2\u00d6\u00d5\3\2\2\2\u00d7") + buf.write("\u00da\3\2\2\2\u00d8\u00d6\3\2\2\2\u00d8\u00d9\3\2\2\2") + buf.write("\u00d9\u00db\3\2\2\2\u00da\u00d8\3\2\2\2\u00db\u00dc\7") + buf.write("\2\2\3\u00dc\3\3\2\2\2\u00dd\u00de\7\3\2\2\u00de\u00df") + buf.write("\5\6\4\2\u00df\u00e0\5\b\5\2\u00e0\u00e1\7\4\2\2\u00e1") + buf.write("\5\3\2\2\2\u00e2\u00e3\5\u00c4c\2\u00e3\7\3\2\2\2\u00e4") + buf.write("\u00e8\7\5\2\2\u00e5\u00e8\5\n\6\2\u00e6\u00e8\5\u008e") + buf.write("H\2\u00e7\u00e4\3\2\2\2\u00e7\u00e5\3\2\2\2\u00e7\u00e6") + buf.write("\3\2\2\2\u00e8\t\3\2\2\2\u00e9\u00f0\5\16\b\2\u00ea\u00ec") + buf.write("\7\6\2\2\u00eb\u00ea\3\2\2\2\u00eb\u00ec\3\2\2\2\u00ec") + buf.write("\u00ed\3\2\2\2\u00ed\u00ef\5\16\b\2\u00ee\u00eb\3\2\2") + buf.write("\2\u00ef\u00f2\3\2\2\2\u00f0\u00ee\3\2\2\2\u00f0\u00f1") + buf.write("\3\2\2\2\u00f1\13\3\2\2\2\u00f2\u00f0\3\2\2\2\u00f3\u00f4") + buf.write("\t\2\2\2\u00f4\r\3\2\2\2\u00f5\u00f7\5\f\7\2\u00f6\u00f5") + buf.write("\3\2\2\2\u00f6\u00f7\3\2\2\2\u00f7\u00f8\3\2\2\2\u00f8") + buf.write("\u00fe\7\u0084\2\2\u00f9\u00fb\5\f\7\2\u00fa\u00f9\3\2") + buf.write("\2\2\u00fa\u00fb\3\2\2\2\u00fb\u00fc\3\2\2\2\u00fc\u00fe") + buf.write("\7i\2\2\u00fd\u00f6\3\2\2\2\u00fd\u00fa\3\2\2\2\u00fe") + buf.write("\17\3\2\2\2\u00ff\u0102\5\u00c4c\2\u0100\u0101\7\16\2") + buf.write("\2\u0101\u0103\5\u00c4c\2\u0102\u0100\3\2\2\2\u0102\u0103") + buf.write("\3\2\2\2\u0103\21\3\2\2\2\u0104\u0105\7\17\2\2\u0105\u0108") + buf.write("\5\24\13\2\u0106\u0107\7\16\2\2\u0107\u0109\5\u00c4c\2") + buf.write("\u0108\u0106\3\2\2\2\u0108\u0109\3\2\2\2\u0109\u010a\3") + buf.write("\2\2\2\u010a\u010b\7\4\2\2\u010b\u0129\3\2\2\2\u010c\u010f") + buf.write("\7\17\2\2\u010d\u0110\7\5\2\2\u010e\u0110\5\u00c4c\2\u010f") + buf.write("\u010d\3\2\2\2\u010f\u010e\3\2\2\2\u0110\u0113\3\2\2\2") + buf.write("\u0111\u0112\7\16\2\2\u0112\u0114\5\u00c4c\2\u0113\u0111") + buf.write("\3\2\2\2\u0113\u0114\3\2\2\2\u0114\u0115\3\2\2\2\u0115") + buf.write("\u0116\7\20\2\2\u0116\u0117\5\24\13\2\u0117\u0118\7\4") + buf.write("\2\2\u0118\u0129\3\2\2\2\u0119\u011a\7\17\2\2\u011a\u011b") + buf.write("\7\21\2\2\u011b\u0120\5\20\t\2\u011c\u011d\7\22\2\2\u011d") + buf.write("\u011f\5\20\t\2\u011e\u011c\3\2\2\2\u011f\u0122\3\2\2") + buf.write("\2\u0120\u011e\3\2\2\2\u0120\u0121\3\2\2\2\u0121\u0123") + buf.write("\3\2\2\2\u0122\u0120\3\2\2\2\u0123\u0124\7\23\2\2\u0124") + buf.write("\u0125\7\20\2\2\u0125\u0126\5\24\13\2\u0126\u0127\7\4") + buf.write("\2\2\u0127\u0129\3\2\2\2\u0128\u0104\3\2\2\2\u0128\u010c") + buf.write("\3\2\2\2\u0128\u0119\3\2\2\2\u0129\23\3\2\2\2\u012a\u012b") + buf.write("\7\u0083\2\2\u012b\25\3\2\2\2\u012c\u012e\7\24\2\2\u012d") + buf.write("\u012c\3\2\2\2\u012d\u012e\3\2\2\2\u012e\u012f\3\2\2\2") + buf.write("\u012f\u0130\t\3\2\2\u0130\u013a\5\u00c4c\2\u0131\u0132") + buf.write("\7\30\2\2\u0132\u0137\5\30\r\2\u0133\u0134\7\22\2\2\u0134") + buf.write("\u0136\5\30\r\2\u0135\u0133\3\2\2\2\u0136\u0139\3\2\2") + buf.write("\2\u0137\u0135\3\2\2\2\u0137\u0138\3\2\2\2\u0138\u013b") + buf.write("\3\2\2\2\u0139\u0137\3\2\2\2\u013a\u0131\3\2\2\2\u013a") + buf.write("\u013b\3\2\2\2\u013b\u013c\3\2\2\2\u013c\u0140\7\21\2") + buf.write("\2\u013d\u013f\5\32\16\2\u013e\u013d\3\2\2\2\u013f\u0142") + buf.write("\3\2\2\2\u0140\u013e\3\2\2\2\u0140\u0141\3\2\2\2\u0141") + buf.write("\u0143\3\2\2\2\u0142\u0140\3\2\2\2\u0143\u0144\7\23\2") + buf.write("\2\u0144\27\3\2\2\2\u0145\u014b\5P)\2\u0146\u0148\7\31") + buf.write("\2\2\u0147\u0149\5\u0092J\2\u0148\u0147\3\2\2\2\u0148") + buf.write("\u0149\3\2\2\2\u0149\u014a\3\2\2\2\u014a\u014c\7\32\2") + buf.write("\2\u014b\u0146\3\2\2\2\u014b\u014c\3\2\2\2\u014c\31\3") + buf.write("\2\2\2\u014d\u0157\5\34\17\2\u014e\u0157\5$\23\2\u014f") + buf.write("\u0157\5,\27\2\u0150\u0157\5.\30\2\u0151\u0157\5\62\32") + buf.write("\2\u0152\u0157\5:\36\2\u0153\u0157\5> \2\u0154\u0157\5") + buf.write(" \21\2\u0155\u0157\5\"\22\2\u0156\u014d\3\2\2\2\u0156") + buf.write("\u014e\3\2\2\2\u0156\u014f\3\2\2\2\u0156\u0150\3\2\2\2") + buf.write("\u0156\u0151\3\2\2\2\u0156\u0152\3\2\2\2\u0156\u0153\3") + buf.write("\2\2\2\u0156\u0154\3\2\2\2\u0156\u0155\3\2\2\2\u0157\33") + buf.write("\3\2\2\2\u0158\u0161\5N(\2\u0159\u0160\7y\2\2\u015a\u0160") + buf.write("\7v\2\2\u015b\u0160\7x\2\2\u015c\u0160\7p\2\2\u015d\u0160") + buf.write("\7q\2\2\u015e\u0160\5\u00c8e\2\u015f\u0159\3\2\2\2\u015f") + buf.write("\u015a\3\2\2\2\u015f\u015b\3\2\2\2\u015f\u015c\3\2\2\2") + buf.write("\u015f\u015d\3\2\2\2\u015f\u015e\3\2\2\2\u0160\u0163\3") + buf.write("\2\2\2\u0161\u015f\3\2\2\2\u0161\u0162\3\2\2\2\u0162\u0164") + buf.write("\3\2\2\2\u0163\u0161\3\2\2\2\u0164\u0167\5\u00c4c\2\u0165") + buf.write("\u0166\7\r\2\2\u0166\u0168\5\u008eH\2\u0167\u0165\3\2") + buf.write("\2\2\u0167\u0168\3\2\2\2\u0168\u0169\3\2\2\2\u0169\u016a") + buf.write("\7\4\2\2\u016a\35\3\2\2\2\u016b\u016c\5N(\2\u016c\u016d") + buf.write("\7p\2\2\u016d\u016e\5\u00c4c\2\u016e\u016f\7\r\2\2\u016f") + buf.write("\u0170\5\u008eH\2\u0170\u0171\7\4\2\2\u0171\37\3\2\2\2") + buf.write("\u0172\u0173\7\33\2\2\u0173\u0174\5\u00c4c\2\u0174\u0175") + buf.write("\5@!\2\u0175\u0176\7\4\2\2\u0176!\3\2\2\2\u0177\u0178") + buf.write("\7|\2\2\u0178\u0179\5\u00c4c\2\u0179\u017a\7\30\2\2\u017a") + buf.write("\u017b\5\u008cG\2\u017b\u017c\7\4\2\2\u017c#\3\2\2\2\u017d") + buf.write("\u017e\7\34\2\2\u017e\u017f\5&\24\2\u017f\u0182\7\35\2") + buf.write("\2\u0180\u0183\7\5\2\2\u0181\u0183\5N(\2\u0182\u0180\3") + buf.write("\2\2\2\u0182\u0181\3\2\2\2\u0183\u0185\3\2\2\2\u0184\u0186") + buf.write("\7~\2\2\u0185\u0184\3\2\2\2\u0185\u0186\3\2\2\2\u0186") + buf.write("\u0187\3\2\2\2\u0187\u0188\7\4\2\2\u0188%\3\2\2\2\u0189") + buf.write("\u0196\5P)\2\u018a\u018b\7\21\2\2\u018b\u0190\5(\25\2") + buf.write("\u018c\u018d\7\22\2\2\u018d\u018f\5(\25\2\u018e\u018c") + buf.write("\3\2\2\2\u018f\u0192\3\2\2\2\u0190\u018e\3\2\2\2\u0190") + buf.write("\u0191\3\2\2\2\u0191\u0193\3\2\2\2\u0192\u0190\3\2\2\2") + buf.write("\u0193\u0194\7\23\2\2\u0194\u0196\3\2\2\2\u0195\u0189") + buf.write("\3\2\2\2\u0195\u018a\3\2\2\2\u0196\'\3\2\2\2\u0197\u019a") + buf.write("\5P)\2\u0198\u0199\7\16\2\2\u0199\u019b\5*\26\2\u019a") + buf.write("\u0198\3\2\2\2\u019a\u019b\3\2\2\2\u019b)\3\2\2\2\u019c") + buf.write("\u019d\t\4\2\2\u019d+\3\2\2\2\u019e\u019f\7&\2\2\u019f") + buf.write("\u01a0\5\u00c4c\2\u01a0\u01ab\7\21\2\2\u01a1\u01a2\5L") + buf.write("\'\2\u01a2\u01a8\7\4\2\2\u01a3\u01a4\5L\'\2\u01a4\u01a5") + buf.write("\7\4\2\2\u01a5\u01a7\3\2\2\2\u01a6\u01a3\3\2\2\2\u01a7") + buf.write("\u01aa\3\2\2\2\u01a8\u01a6\3\2\2\2\u01a8\u01a9\3\2\2\2") + buf.write("\u01a9\u01ac\3\2\2\2\u01aa\u01a8\3\2\2\2\u01ab\u01a1\3") + buf.write("\2\2\2\u01ab\u01ac\3\2\2\2\u01ac\u01ad\3\2\2\2\u01ad\u01ae") + buf.write("\7\23\2\2\u01ae-\3\2\2\2\u01af\u01b0\7\'\2\2\u01b0\u01b2") + buf.write("\5\u00c4c\2\u01b1\u01b3\5@!\2\u01b2\u01b1\3\2\2\2\u01b2") + buf.write("\u01b3\3\2\2\2\u01b3\u01b8\3\2\2\2\u01b4\u01b7\7z\2\2") + buf.write("\u01b5\u01b7\5\u00c8e\2\u01b6\u01b4\3\2\2\2\u01b6\u01b5") + buf.write("\3\2\2\2\u01b7\u01ba\3\2\2\2\u01b8\u01b6\3\2\2\2\u01b8") + buf.write("\u01b9\3\2\2\2\u01b9\u01bd\3\2\2\2\u01ba\u01b8\3\2\2\2") + buf.write("\u01bb\u01be\7\4\2\2\u01bc\u01be\5`\61\2\u01bd\u01bb\3") + buf.write("\2\2\2\u01bd\u01bc\3\2\2\2\u01be/\3\2\2\2\u01bf\u01c5") + buf.write("\5\u00c4c\2\u01c0\u01c2\7\31\2\2\u01c1\u01c3\5\u0092J") + buf.write("\2\u01c2\u01c1\3\2\2\2\u01c2\u01c3\3\2\2\2\u01c3\u01c4") + buf.write("\3\2\2\2\u01c4\u01c6\7\32\2\2\u01c5\u01c0\3\2\2\2\u01c5") + buf.write("\u01c6\3\2\2\2\u01c6\61\3\2\2\2\u01c7\u01c8\5\64\33\2") + buf.write("\u01c8\u01c9\5@!\2\u01c9\u01cb\58\35\2\u01ca\u01cc\5\66") + buf.write("\34\2\u01cb\u01ca\3\2\2\2\u01cb\u01cc\3\2\2\2\u01cc\u01cf") + buf.write("\3\2\2\2\u01cd\u01d0\7\4\2\2\u01ce\u01d0\5`\61\2\u01cf") + buf.write("\u01cd\3\2\2\2\u01cf\u01ce\3\2\2\2\u01d0\63\3\2\2\2\u01d1") + buf.write("\u01d3\7(\2\2\u01d2\u01d4\5\u00c4c\2\u01d3\u01d2\3\2\2") + buf.write("\2\u01d3\u01d4\3\2\2\2\u01d4\u01d9\3\2\2\2\u01d5\u01d9") + buf.write("\7\177\2\2\u01d6\u01d9\7\u0080\2\2\u01d7\u01d9\7\u0081") + buf.write("\2\2\u01d8\u01d1\3\2\2\2\u01d8\u01d5\3\2\2\2\u01d8\u01d6") + buf.write("\3\2\2\2\u01d8\u01d7\3\2\2\2\u01d9\65\3\2\2\2\u01da\u01db") + buf.write("\7)\2\2\u01db\u01dc\5@!\2\u01dc\67\3\2\2\2\u01dd\u01e6") + buf.write("\7t\2\2\u01de\u01e6\7y\2\2\u01df\u01e6\7v\2\2\u01e0\u01e6") + buf.write("\7x\2\2\u01e1\u01e6\7z\2\2\u01e2\u01e6\5^\60\2\u01e3\u01e6") + buf.write("\5\60\31\2\u01e4\u01e6\5\u00c8e\2\u01e5\u01dd\3\2\2\2") + buf.write("\u01e5\u01de\3\2\2\2\u01e5\u01df\3\2\2\2\u01e5\u01e0\3") + buf.write("\2\2\2\u01e5\u01e1\3\2\2\2\u01e5\u01e2\3\2\2\2\u01e5\u01e3") + buf.write("\3\2\2\2\u01e5\u01e4\3\2\2\2\u01e6\u01e9\3\2\2\2\u01e7") + buf.write("\u01e5\3\2\2\2\u01e7\u01e8\3\2\2\2\u01e89\3\2\2\2\u01e9") + buf.write("\u01e7\3\2\2\2\u01ea\u01eb\7*\2\2\u01eb\u01ec\5\u00c4") + buf.write("c\2\u01ec\u01ee\5D#\2\u01ed\u01ef\7n\2\2\u01ee\u01ed\3") + buf.write("\2\2\2\u01ee\u01ef\3\2\2\2\u01ef\u01f0\3\2\2\2\u01f0\u01f1") + buf.write("\7\4\2\2\u01f1;\3\2\2\2\u01f2\u01f3\5\u00c4c\2\u01f3=") + buf.write("\3\2\2\2\u01f4\u01f5\7+\2\2\u01f5\u01f6\5\u00c4c\2\u01f6") + buf.write("\u01f8\7\21\2\2\u01f7\u01f9\5<\37\2\u01f8\u01f7\3\2\2") + buf.write("\2\u01f8\u01f9\3\2\2\2\u01f9\u01fe\3\2\2\2\u01fa\u01fb") + buf.write("\7\22\2\2\u01fb\u01fd\5<\37\2\u01fc\u01fa\3\2\2\2\u01fd") + buf.write("\u0200\3\2\2\2\u01fe\u01fc\3\2\2\2\u01fe\u01ff\3\2\2\2") + buf.write("\u01ff\u0201\3\2\2\2\u0200\u01fe\3\2\2\2\u0201\u0202\7") + buf.write("\23\2\2\u0202?\3\2\2\2\u0203\u020c\7\31\2\2\u0204\u0209") + buf.write("\5B\"\2\u0205\u0206\7\22\2\2\u0206\u0208\5B\"\2\u0207") + buf.write("\u0205\3\2\2\2\u0208\u020b\3\2\2\2\u0209\u0207\3\2\2\2") + buf.write("\u0209\u020a\3\2\2\2\u020a\u020d\3\2\2\2\u020b\u0209\3") + buf.write("\2\2\2\u020c\u0204\3\2\2\2\u020c\u020d\3\2\2\2\u020d\u020e") + buf.write("\3\2\2\2\u020e\u020f\7\32\2\2\u020fA\3\2\2\2\u0210\u0212") + buf.write("\5N(\2\u0211\u0213\5\\/\2\u0212\u0211\3\2\2\2\u0212\u0213") + buf.write("\3\2\2\2\u0213\u0215\3\2\2\2\u0214\u0216\5\u00c4c\2\u0215") + buf.write("\u0214\3\2\2\2\u0215\u0216\3\2\2\2\u0216C\3\2\2\2\u0217") + buf.write("\u0220\7\31\2\2\u0218\u021d\5F$\2\u0219\u021a\7\22\2\2") + buf.write("\u021a\u021c\5F$\2\u021b\u0219\3\2\2\2\u021c\u021f\3\2") + buf.write("\2\2\u021d\u021b\3\2\2\2\u021d\u021e\3\2\2\2\u021e\u0221") + buf.write("\3\2\2\2\u021f\u021d\3\2\2\2\u0220\u0218\3\2\2\2\u0220") + buf.write("\u0221\3\2\2\2\u0221\u0222\3\2\2\2\u0222\u0223\7\32\2") + buf.write("\2\u0223E\3\2\2\2\u0224\u0226\5N(\2\u0225\u0227\7u\2\2") + buf.write("\u0226\u0225\3\2\2\2\u0226\u0227\3\2\2\2\u0227\u0229\3") + buf.write("\2\2\2\u0228\u022a\5\u00c4c\2\u0229\u0228\3\2\2\2\u0229") + buf.write("\u022a\3\2\2\2\u022aG\3\2\2\2\u022b\u0234\7\31\2\2\u022c") + buf.write("\u0231\5J&\2\u022d\u022e\7\22\2\2\u022e\u0230\5J&\2\u022f") + buf.write("\u022d\3\2\2\2\u0230\u0233\3\2\2\2\u0231\u022f\3\2\2\2") + buf.write("\u0231\u0232\3\2\2\2\u0232\u0235\3\2\2\2\u0233\u0231\3") + buf.write("\2\2\2\u0234\u022c\3\2\2\2\u0234\u0235\3\2\2\2\u0235\u0236") + buf.write("\3\2\2\2\u0236\u0237\7\32\2\2\u0237I\3\2\2\2\u0238\u023a") + buf.write("\5N(\2\u0239\u023b\5\\/\2\u023a\u0239\3\2\2\2\u023a\u023b") + buf.write("\3\2\2\2\u023bK\3\2\2\2\u023c\u023e\5N(\2\u023d\u023f") + buf.write("\5\\/\2\u023e\u023d\3\2\2\2\u023e\u023f\3\2\2\2\u023f") + buf.write("\u0240\3\2\2\2\u0240\u0241\5\u00c4c\2\u0241M\3\2\2\2\u0242") + buf.write("\u0243\b(\1\2\u0243\u024a\5\u008cG\2\u0244\u024a\5P)\2") + buf.write("\u0245\u024a\5T+\2\u0246\u024a\5Z.\2\u0247\u0248\7.\2") + buf.write("\2\u0248\u024a\7w\2\2\u0249\u0242\3\2\2\2\u0249\u0244") + buf.write("\3\2\2\2\u0249\u0245\3\2\2\2\u0249\u0246\3\2\2\2\u0249") + buf.write("\u0247\3\2\2\2\u024a\u0253\3\2\2\2\u024b\u024c\f\5\2\2") + buf.write("\u024c\u024e\7,\2\2\u024d\u024f\5\u008eH\2\u024e\u024d") + buf.write("\3\2\2\2\u024e\u024f\3\2\2\2\u024f\u0250\3\2\2\2\u0250") + buf.write("\u0252\7-\2\2\u0251\u024b\3\2\2\2\u0252\u0255\3\2\2\2") + buf.write("\u0253\u0251\3\2\2\2\u0253\u0254\3\2\2\2\u0254O\3\2\2") + buf.write("\2\u0255\u0253\3\2\2\2\u0256\u025b\5\u00c4c\2\u0257\u0258") + buf.write("\7/\2\2\u0258\u025a\5\u00c4c\2\u0259\u0257\3\2\2\2\u025a") + buf.write("\u025d\3\2\2\2\u025b\u0259\3\2\2\2\u025b\u025c\3\2\2\2") + buf.write("\u025cQ\3\2\2\2\u025d\u025b\3\2\2\2\u025e\u0261\5\u008c") + buf.write("G\2\u025f\u0261\5P)\2\u0260\u025e\3\2\2\2\u0260\u025f") + buf.write("\3\2\2\2\u0261S\3\2\2\2\u0262\u0263\7\60\2\2\u0263\u0264") + buf.write("\7\31\2\2\u0264\u0266\5R*\2\u0265\u0267\5V,\2\u0266\u0265") + buf.write("\3\2\2\2\u0266\u0267\3\2\2\2\u0267\u0268\3\2\2\2\u0268") + buf.write("\u0269\7\61\2\2\u0269\u026b\5N(\2\u026a\u026c\5X-\2\u026b") + buf.write("\u026a\3\2\2\2\u026b\u026c\3\2\2\2\u026c\u026d\3\2\2\2") + buf.write("\u026d\u026e\7\32\2\2\u026eU\3\2\2\2\u026f\u0270\5\u00c4") + buf.write("c\2\u0270W\3\2\2\2\u0271\u0272\5\u00c4c\2\u0272Y\3\2\2") + buf.write("\2\u0273\u0274\7(\2\2\u0274\u027a\5H%\2\u0275\u0279\7") + buf.write("v\2\2\u0276\u0279\7t\2\2\u0277\u0279\5^\60\2\u0278\u0275") + buf.write("\3\2\2\2\u0278\u0276\3\2\2\2\u0278\u0277\3\2\2\2\u0279") + buf.write("\u027c\3\2\2\2\u027a\u0278\3\2\2\2\u027a\u027b\3\2\2\2") + buf.write("\u027b\u027f\3\2\2\2\u027c\u027a\3\2\2\2\u027d\u027e\7") + buf.write(")\2\2\u027e\u0280\5H%\2\u027f\u027d\3\2\2\2\u027f\u0280") + buf.write("\3\2\2\2\u0280[\3\2\2\2\u0281\u0282\t\5\2\2\u0282]\3\2") + buf.write("\2\2\u0283\u0284\t\6\2\2\u0284_\3\2\2\2\u0285\u0289\7") + buf.write("\21\2\2\u0286\u0288\5b\62\2\u0287\u0286\3\2\2\2\u0288") + buf.write("\u028b\3\2\2\2\u0289\u0287\3\2\2\2\u0289\u028a\3\2\2\2") + buf.write("\u028a\u028c\3\2\2\2\u028b\u0289\3\2\2\2\u028c\u028d\7") + buf.write("\23\2\2\u028da\3\2\2\2\u028e\u029e\5f\64\2\u028f\u029e") + buf.write("\5h\65\2\u0290\u029e\5l\67\2\u0291\u029e\5r:\2\u0292\u029e") + buf.write("\5`\61\2\u0293\u029e\5t;\2\u0294\u029e\5x=\2\u0295\u029e") + buf.write("\5z>\2\u0296\u029e\5|?\2\u0297\u029e\5~@\2\u0298\u029e") + buf.write("\5\u0080A\2\u0299\u029e\5\u0082B\2\u029a\u029e\5n8\2\u029b") + buf.write("\u029e\5p9\2\u029c\u029e\5\u0084C\2\u029d\u028e\3\2\2") + buf.write("\2\u029d\u028f\3\2\2\2\u029d\u0290\3\2\2\2\u029d\u0291") + buf.write("\3\2\2\2\u029d\u0292\3\2\2\2\u029d\u0293\3\2\2\2\u029d") + buf.write("\u0294\3\2\2\2\u029d\u0295\3\2\2\2\u029d\u0296\3\2\2\2") + buf.write("\u029d\u0297\3\2\2\2\u029d\u0298\3\2\2\2\u029d\u0299\3") + buf.write("\2\2\2\u029d\u029a\3\2\2\2\u029d\u029b\3\2\2\2\u029d\u029c") + buf.write("\3\2\2\2\u029ec\3\2\2\2\u029f\u02a0\5\u008eH\2\u02a0\u02a1") + buf.write("\7\4\2\2\u02a1e\3\2\2\2\u02a2\u02a3\7\65\2\2\u02a3\u02a4") + buf.write("\7\31\2\2\u02a4\u02a5\5\u008eH\2\u02a5\u02a6\7\32\2\2") + buf.write("\u02a6\u02a9\5b\62\2\u02a7\u02a8\7\66\2\2\u02a8\u02aa") + buf.write("\5b\62\2\u02a9\u02a7\3\2\2\2\u02a9\u02aa\3\2\2\2\u02aa") + buf.write("g\3\2\2\2\u02ab\u02ac\7\67\2\2\u02ac\u02ae\5\u008eH\2") + buf.write("\u02ad\u02af\5\66\34\2\u02ae\u02ad\3\2\2\2\u02ae\u02af") + buf.write("\3\2\2\2\u02af\u02b0\3\2\2\2\u02b0\u02b2\5`\61\2\u02b1") + buf.write("\u02b3\5j\66\2\u02b2\u02b1\3\2\2\2\u02b3\u02b4\3\2\2\2") + buf.write("\u02b4\u02b2\3\2\2\2\u02b4\u02b5\3\2\2\2\u02b5i\3\2\2") + buf.write("\2\u02b6\u02bb\78\2\2\u02b7\u02b9\5\u00c4c\2\u02b8\u02b7") + buf.write("\3\2\2\2\u02b8\u02b9\3\2\2\2\u02b9\u02ba\3\2\2\2\u02ba") + buf.write("\u02bc\5@!\2\u02bb\u02b8\3\2\2\2\u02bb\u02bc\3\2\2\2\u02bc") + buf.write("\u02bd\3\2\2\2\u02bd\u02be\5`\61\2\u02bek\3\2\2\2\u02bf") + buf.write("\u02c0\79\2\2\u02c0\u02c1\7\31\2\2\u02c1\u02c2\5\u008e") + buf.write("H\2\u02c2\u02c3\7\32\2\2\u02c3\u02c4\5b\62\2\u02c4m\3") + buf.write("\2\2\2\u02c5\u02c8\5\u0086D\2\u02c6\u02c8\5d\63\2\u02c7") + buf.write("\u02c5\3\2\2\2\u02c7\u02c6\3\2\2\2\u02c8o\3\2\2\2\u02c9") + buf.write("\u02ca\7:\2\2\u02ca\u02cb\5`\61\2\u02cbq\3\2\2\2\u02cc") + buf.write("\u02cd\7\35\2\2\u02cd\u02d0\7\31\2\2\u02ce\u02d1\5n8\2") + buf.write("\u02cf\u02d1\7\4\2\2\u02d0\u02ce\3\2\2\2\u02d0\u02cf\3") + buf.write("\2\2\2\u02d1\u02d4\3\2\2\2\u02d2\u02d5\5d\63\2\u02d3\u02d5") + buf.write("\7\4\2\2\u02d4\u02d2\3\2\2\2\u02d4\u02d3\3\2\2\2\u02d5") + buf.write("\u02d7\3\2\2\2\u02d6\u02d8\5\u008eH\2\u02d7\u02d6\3\2") + buf.write("\2\2\u02d7\u02d8\3\2\2\2\u02d8\u02d9\3\2\2\2\u02d9\u02da") + buf.write("\7\32\2\2\u02da\u02db\5b\62\2\u02dbs\3\2\2\2\u02dc\u02de") + buf.write("\7;\2\2\u02dd\u02df\7\u0083\2\2\u02de\u02dd\3\2\2\2\u02de") + buf.write("\u02df\3\2\2\2\u02df\u02e4\3\2\2\2\u02e0\u02e1\7\31\2") + buf.write("\2\u02e1\u02e2\5v<\2\u02e2\u02e3\7\32\2\2\u02e3\u02e5") + buf.write("\3\2\2\2\u02e4\u02e0\3\2\2\2\u02e4\u02e5\3\2\2\2\u02e5") + buf.write("\u02e6\3\2\2\2\u02e6\u02e7\5\u009cO\2\u02e7u\3\2\2\2\u02e8") + buf.write("\u02e9\5\u00caf\2\u02e9w\3\2\2\2\u02ea\u02eb\7<\2\2\u02eb") + buf.write("\u02ec\5b\62\2\u02ec\u02ed\79\2\2\u02ed\u02ee\7\31\2\2") + buf.write("\u02ee\u02ef\5\u008eH\2\u02ef\u02f0\7\32\2\2\u02f0\u02f1") + buf.write("\7\4\2\2\u02f1y\3\2\2\2\u02f2\u02f3\7r\2\2\u02f3\u02f4") + buf.write("\7\4\2\2\u02f4{\3\2\2\2\u02f5\u02f6\7o\2\2\u02f6\u02f7") + buf.write("\7\4\2\2\u02f7}\3\2\2\2\u02f8\u02fa\7=\2\2\u02f9\u02fb") + buf.write("\5\u008eH\2\u02fa\u02f9\3\2\2\2\u02fa\u02fb\3\2\2\2\u02fb") + buf.write("\u02fc\3\2\2\2\u02fc\u02fd\7\4\2\2\u02fd\177\3\2\2\2\u02fe") + buf.write("\u02ff\7>\2\2\u02ff\u0300\7\4\2\2\u0300\u0081\3\2\2\2") + buf.write("\u0301\u0302\7?\2\2\u0302\u0303\5\u009aN\2\u0303\u0304") + buf.write("\7\4\2\2\u0304\u0083\3\2\2\2\u0305\u0306\7@\2\2\u0306") + buf.write("\u0307\5\u009aN\2\u0307\u0308\7\4\2\2\u0308\u0085\3\2") + buf.write("\2\2\u0309\u030a\7A\2\2\u030a\u0311\5\u008aF\2\u030b\u0311") + buf.write("\5L\'\2\u030c\u030d\7\31\2\2\u030d\u030e\5\u0088E\2\u030e") + buf.write("\u030f\7\32\2\2\u030f\u0311\3\2\2\2\u0310\u0309\3\2\2") + buf.write("\2\u0310\u030b\3\2\2\2\u0310\u030c\3\2\2\2\u0311\u0314") + buf.write("\3\2\2\2\u0312\u0313\7\r\2\2\u0313\u0315\5\u008eH\2\u0314") + buf.write("\u0312\3\2\2\2\u0314\u0315\3\2\2\2\u0315\u0316\3\2\2\2") + buf.write("\u0316\u0317\7\4\2\2\u0317\u0087\3\2\2\2\u0318\u031a\5") + buf.write("L\'\2\u0319\u0318\3\2\2\2\u0319\u031a\3\2\2\2\u031a\u0321") + buf.write("\3\2\2\2\u031b\u031d\7\22\2\2\u031c\u031e\5L\'\2\u031d") + buf.write("\u031c\3\2\2\2\u031d\u031e\3\2\2\2\u031e\u0320\3\2\2\2") + buf.write("\u031f\u031b\3\2\2\2\u0320\u0323\3\2\2\2\u0321\u031f\3") + buf.write("\2\2\2\u0321\u0322\3\2\2\2\u0322\u0089\3\2\2\2\u0323\u0321") + buf.write("\3\2\2\2\u0324\u032b\7\31\2\2\u0325\u0327\5\u00c4c\2\u0326") + buf.write("\u0325\3\2\2\2\u0326\u0327\3\2\2\2\u0327\u0328\3\2\2\2") + buf.write("\u0328\u032a\7\22\2\2\u0329\u0326\3\2\2\2\u032a\u032d") + buf.write("\3\2\2\2\u032b\u0329\3\2\2\2\u032b\u032c\3\2\2\2\u032c") + buf.write("\u032f\3\2\2\2\u032d\u032b\3\2\2\2\u032e\u0330\5\u00c4") + buf.write("c\2\u032f\u032e\3\2\2\2\u032f\u0330\3\2\2\2\u0330\u0331") + buf.write("\3\2\2\2\u0331\u0332\7\32\2\2\u0332\u008b\3\2\2\2\u0333") + buf.write("\u0334\t\7\2\2\u0334\u008d\3\2\2\2\u0335\u0336\bH\1\2") + buf.write("\u0336\u0337\7G\2\2\u0337\u0348\5N(\2\u0338\u0339\7\31") + buf.write("\2\2\u0339\u033a\5\u008eH\2\u033a\u033b\7\32\2\2\u033b") + buf.write("\u0348\3\2\2\2\u033c\u033d\t\b\2\2\u033d\u0348\5\u008e") + buf.write("H\25\u033e\u033f\t\t\2\2\u033f\u0348\5\u008eH\24\u0340") + buf.write("\u0341\7I\2\2\u0341\u0348\5\u008eH\23\u0342\u0343\7J\2") + buf.write("\2\u0343\u0348\5\u008eH\22\u0344\u0345\7\b\2\2\u0345\u0348") + buf.write("\5\u008eH\21\u0346\u0348\5\u0090I\2\u0347\u0335\3\2\2") + buf.write("\2\u0347\u0338\3\2\2\2\u0347\u033c\3\2\2\2\u0347\u033e") + buf.write("\3\2\2\2\u0347\u0340\3\2\2\2\u0347\u0342\3\2\2\2\u0347") + buf.write("\u0344\3\2\2\2\u0347\u0346\3\2\2\2\u0348\u0393\3\2\2\2") + buf.write("\u0349\u034a\f\20\2\2\u034a\u034b\7K\2\2\u034b\u0392\5") + buf.write("\u008eH\21\u034c\u034d\f\17\2\2\u034d\u034e\t\n\2\2\u034e") + buf.write("\u0392\5\u008eH\20\u034f\u0350\f\16\2\2\u0350\u0351\t") + buf.write("\t\2\2\u0351\u0392\5\u008eH\17\u0352\u0353\f\r\2\2\u0353") + buf.write("\u0354\t\13\2\2\u0354\u0392\5\u008eH\16\u0355\u0356\f") + buf.write("\f\2\2\u0356\u0357\7\37\2\2\u0357\u0392\5\u008eH\r\u0358") + buf.write("\u0359\f\13\2\2\u0359\u035a\7\7\2\2\u035a\u0392\5\u008e") + buf.write("H\f\u035b\u035c\f\n\2\2\u035c\u035d\7\36\2\2\u035d\u0392") + buf.write("\5\u008eH\13\u035e\u035f\f\t\2\2\u035f\u0360\t\f\2\2\u0360") + buf.write("\u0392\5\u008eH\n\u0361\u0362\f\b\2\2\u0362\u0363\t\r") + buf.write("\2\2\u0363\u0392\5\u008eH\t\u0364\u0365\f\7\2\2\u0365") + buf.write("\u0366\7N\2\2\u0366\u0392\5\u008eH\b\u0367\u0368\f\6\2") + buf.write("\2\u0368\u0369\7\6\2\2\u0369\u0392\5\u008eH\7\u036a\u036b") + buf.write("\f\5\2\2\u036b\u036c\7O\2\2\u036c\u036d\5\u008eH\2\u036d") + buf.write("\u036e\7H\2\2\u036e\u036f\5\u008eH\6\u036f\u0392\3\2\2") + buf.write("\2\u0370\u0371\f\4\2\2\u0371\u0372\t\16\2\2\u0372\u0392") + buf.write("\5\u008eH\5\u0373\u0374\f\35\2\2\u0374\u0392\t\b\2\2\u0375") + buf.write("\u0376\f\33\2\2\u0376\u0377\7,\2\2\u0377\u0378\5\u008e") + buf.write("H\2\u0378\u0379\7-\2\2\u0379\u0392\3\2\2\2\u037a\u037b") + buf.write("\f\32\2\2\u037b\u037d\7,\2\2\u037c\u037e\5\u008eH\2\u037d") + buf.write("\u037c\3\2\2\2\u037d\u037e\3\2\2\2\u037e\u037f\3\2\2\2") + buf.write("\u037f\u0381\7H\2\2\u0380\u0382\5\u008eH\2\u0381\u0380") + buf.write("\3\2\2\2\u0381\u0382\3\2\2\2\u0382\u0383\3\2\2\2\u0383") + buf.write("\u0392\7-\2\2\u0384\u0385\f\31\2\2\u0385\u0386\7/\2\2") + buf.write("\u0386\u0392\5\u00c4c\2\u0387\u0388\f\30\2\2\u0388\u0389") + buf.write("\7\21\2\2\u0389\u038a\5\u0094K\2\u038a\u038b\7\23\2\2") + buf.write("\u038b\u0392\3\2\2\2\u038c\u038d\f\27\2\2\u038d\u038e") + buf.write("\7\31\2\2\u038e\u038f\5\u0098M\2\u038f\u0390\7\32\2\2") + buf.write("\u0390\u0392\3\2\2\2\u0391\u0349\3\2\2\2\u0391\u034c\3") + buf.write("\2\2\2\u0391\u034f\3\2\2\2\u0391\u0352\3\2\2\2\u0391\u0355") + buf.write("\3\2\2\2\u0391\u0358\3\2\2\2\u0391\u035b\3\2\2\2\u0391") + buf.write("\u035e\3\2\2\2\u0391\u0361\3\2\2\2\u0391\u0364\3\2\2\2") + buf.write("\u0391\u0367\3\2\2\2\u0391\u036a\3\2\2\2\u0391\u0370\3") + buf.write("\2\2\2\u0391\u0373\3\2\2\2\u0391\u0375\3\2\2\2\u0391\u037a") + buf.write("\3\2\2\2\u0391\u0384\3\2\2\2\u0391\u0387\3\2\2\2\u0391") + buf.write("\u038c\3\2\2\2\u0392\u0395\3\2\2\2\u0393\u0391\3\2\2\2") + buf.write("\u0393\u0394\3\2\2\2\u0394\u008f\3\2\2\2\u0395\u0393\3") + buf.write("\2\2\2\u0396\u03a0\7h\2\2\u0397\u03a0\5\u00c2b\2\u0398") + buf.write("\u03a0\5\u00c6d\2\u0399\u03a0\5\u00caf\2\u039a\u03a0\5") + buf.write("\u00c4c\2\u039b\u03a0\7|\2\2\u039c\u03a0\7w\2\2\u039d") + buf.write("\u03a0\5\u00c0a\2\u039e\u03a0\5N(\2\u039f\u0396\3\2\2") + buf.write("\2\u039f\u0397\3\2\2\2\u039f\u0398\3\2\2\2\u039f\u0399") + buf.write("\3\2\2\2\u039f\u039a\3\2\2\2\u039f\u039b\3\2\2\2\u039f") + buf.write("\u039c\3\2\2\2\u039f\u039d\3\2\2\2\u039f\u039e\3\2\2\2") + buf.write("\u03a0\u0091\3\2\2\2\u03a1\u03a6\5\u008eH\2\u03a2\u03a3") + buf.write("\7\22\2\2\u03a3\u03a5\5\u008eH\2\u03a4\u03a2\3\2\2\2\u03a5") + buf.write("\u03a8\3\2\2\2\u03a6\u03a4\3\2\2\2\u03a6\u03a7\3\2\2\2") + buf.write("\u03a7\u0093\3\2\2\2\u03a8\u03a6\3\2\2\2\u03a9\u03ae\5") + buf.write("\u0096L\2\u03aa\u03ab\7\22\2\2\u03ab\u03ad\5\u0096L\2") + buf.write("\u03ac\u03aa\3\2\2\2\u03ad\u03b0\3\2\2\2\u03ae\u03ac\3") + buf.write("\2\2\2\u03ae\u03af\3\2\2\2\u03af\u03b2\3\2\2\2\u03b0\u03ae") + buf.write("\3\2\2\2\u03b1\u03b3\7\22\2\2\u03b2\u03b1\3\2\2\2\u03b2") + buf.write("\u03b3\3\2\2\2\u03b3\u0095\3\2\2\2\u03b4\u03b5\5\u00c4") + buf.write("c\2\u03b5\u03b6\7H\2\2\u03b6\u03b7\5\u008eH\2\u03b7\u0097") + buf.write("\3\2\2\2\u03b8\u03ba\7\21\2\2\u03b9\u03bb\5\u0094K\2\u03ba") + buf.write("\u03b9\3\2\2\2\u03ba\u03bb\3\2\2\2\u03bb\u03bc\3\2\2\2") + buf.write("\u03bc\u03c1\7\23\2\2\u03bd\u03bf\5\u0092J\2\u03be\u03bd") + buf.write("\3\2\2\2\u03be\u03bf\3\2\2\2\u03bf\u03c1\3\2\2\2\u03c0") + buf.write("\u03b8\3\2\2\2\u03c0\u03be\3\2\2\2\u03c1\u0099\3\2\2\2") + buf.write("\u03c2\u03c3\5\u008eH\2\u03c3\u03c4\7\31\2\2\u03c4\u03c5") + buf.write("\5\u0098M\2\u03c5\u03c6\7\32\2\2\u03c6\u009b\3\2\2\2\u03c7") + buf.write("\u03cb\7\21\2\2\u03c8\u03ca\5\u009eP\2\u03c9\u03c8\3\2") + buf.write("\2\2\u03ca\u03cd\3\2\2\2\u03cb\u03c9\3\2\2\2\u03cb\u03cc") + buf.write("\3\2\2\2\u03cc\u03ce\3\2\2\2\u03cd\u03cb\3\2\2\2\u03ce") + buf.write("\u03cf\7\23\2\2\u03cf\u009d\3\2\2\2\u03d0\u03e2\5\u00c4") + buf.write("c\2\u03d1\u03e2\5\u009cO\2\u03d2\u03e2\5\u00a0Q\2\u03d3") + buf.write("\u03e2\5\u00a6T\2\u03d4\u03e2\5\u00a8U\2\u03d5\u03e2\5") + buf.write("\u00aeX\2\u03d6\u03e2\5\u00b0Y\2\u03d7\u03e2\5\u00b2Z") + buf.write("\2\u03d8\u03e2\5\u00b6\\\2\u03d9\u03e2\5\u00ba^\2\u03da") + buf.write("\u03e2\5\u00bc_\2\u03db\u03e2\7o\2\2\u03dc\u03e2\7r\2") + buf.write("\2\u03dd\u03e2\7s\2\2\u03de\u03e2\5\u00c2b\2\u03df\u03e2") + buf.write("\5\u00caf\2\u03e0\u03e2\5\u00c6d\2\u03e1\u03d0\3\2\2\2") + buf.write("\u03e1\u03d1\3\2\2\2\u03e1\u03d2\3\2\2\2\u03e1\u03d3\3") + buf.write("\2\2\2\u03e1\u03d4\3\2\2\2\u03e1\u03d5\3\2\2\2\u03e1\u03d6") + buf.write("\3\2\2\2\u03e1\u03d7\3\2\2\2\u03e1\u03d8\3\2\2\2\u03e1") + buf.write("\u03d9\3\2\2\2\u03e1\u03da\3\2\2\2\u03e1\u03db\3\2\2\2") + buf.write("\u03e1\u03dc\3\2\2\2\u03e1\u03dd\3\2\2\2\u03e1\u03de\3") + buf.write("\2\2\2\u03e1\u03df\3\2\2\2\u03e1\u03e0\3\2\2\2\u03e2\u009f") + buf.write("\3\2\2\2\u03e3\u03e7\5\u00a4S\2\u03e4\u03e7\5\u00be`\2") + buf.write("\u03e5\u03e7\5\u00a2R\2\u03e6\u03e3\3\2\2\2\u03e6\u03e4") + buf.write("\3\2\2\2\u03e6\u03e5\3\2\2\2\u03e7\u00a1\3\2\2\2\u03e8") + buf.write("\u03e9\5\u00c4c\2\u03e9\u03ea\7/\2\2\u03ea\u03eb\5\u00c4") + buf.write("c\2\u03eb\u00a3\3\2\2\2\u03ec\u03f1\7=\2\2\u03ed\u03f1") + buf.write("\7.\2\2\u03ee\u03f1\7D\2\2\u03ef\u03f1\5\u00c4c\2\u03f0") + buf.write("\u03ec\3\2\2\2\u03f0\u03ed\3\2\2\2\u03f0\u03ee\3\2\2\2") + buf.write("\u03f0\u03ef\3\2\2\2\u03f1\u03fe\3\2\2\2\u03f2\u03f4\7") + buf.write("\31\2\2\u03f3\u03f5\5\u00a0Q\2\u03f4\u03f3\3\2\2\2\u03f4") + buf.write("\u03f5\3\2\2\2\u03f5\u03fa\3\2\2\2\u03f6\u03f7\7\22\2") + buf.write("\2\u03f7\u03f9\5\u00a0Q\2\u03f8\u03f6\3\2\2\2\u03f9\u03fc") + buf.write("\3\2\2\2\u03fa\u03f8\3\2\2\2\u03fa\u03fb\3\2\2\2\u03fb") + buf.write("\u03fd\3\2\2\2\u03fc\u03fa\3\2\2\2\u03fd\u03ff\7\32\2") + buf.write("\2\u03fe\u03f2\3\2\2\2\u03fe\u03ff\3\2\2\2\u03ff\u00a5") + buf.write("\3\2\2\2\u0400\u0401\7Z\2\2\u0401\u0404\5\u00aaV\2\u0402") + buf.write("\u0403\7[\2\2\u0403\u0405\5\u00a0Q\2\u0404\u0402\3\2\2") + buf.write("\2\u0404\u0405\3\2\2\2\u0405\u00a7\3\2\2\2\u0406\u0407") + buf.write("\5\u00aaV\2\u0407\u0408\7[\2\2\u0408\u0409\5\u00a0Q\2") + buf.write("\u0409\u00a9\3\2\2\2\u040a\u0412\5\u00c4c\2\u040b\u0412") + buf.write("\5\u00a2R\2\u040c\u0412\5\u00acW\2\u040d\u040e\7\31\2") + buf.write("\2\u040e\u040f\5\u00acW\2\u040f\u0410\7\32\2\2\u0410\u0412") + buf.write("\3\2\2\2\u0411\u040a\3\2\2\2\u0411\u040b\3\2\2\2\u0411") + buf.write("\u040c\3\2\2\2\u0411\u040d\3\2\2\2\u0412\u00ab\3\2\2\2") + buf.write("\u0413\u0418\5\u00c4c\2\u0414\u0415\7\22\2\2\u0415\u0417") + buf.write("\5\u00c4c\2\u0416\u0414\3\2\2\2\u0417\u041a\3\2\2\2\u0418") + buf.write("\u0416\3\2\2\2\u0418\u0419\3\2\2\2\u0419\u00ad\3\2\2\2") + buf.write("\u041a\u0418\3\2\2\2\u041b\u041c\5\u00a0Q\2\u041c\u041d") + buf.write("\7\\\2\2\u041d\u041e\5\u00c4c\2\u041e\u00af\3\2\2\2\u041f") + buf.write("\u0420\5\u00c4c\2\u0420\u0421\7H\2\2\u0421\u00b1\3\2\2") + buf.write("\2\u0422\u0423\7]\2\2\u0423\u0427\5\u00a0Q\2\u0424\u0426") + buf.write("\5\u00b4[\2\u0425\u0424\3\2\2\2\u0426\u0429\3\2\2\2\u0427") + buf.write("\u0425\3\2\2\2\u0427\u0428\3\2\2\2\u0428\u00b3\3\2\2\2") + buf.write("\u0429\u0427\3\2\2\2\u042a\u042b\7^\2\2\u042b\u042c\5") + buf.write("\u00be`\2\u042c\u042d\5\u009cO\2\u042d\u0431\3\2\2\2\u042e") + buf.write("\u042f\7_\2\2\u042f\u0431\5\u009cO\2\u0430\u042a\3\2\2") + buf.write("\2\u0430\u042e\3\2\2\2\u0431\u00b5\3\2\2\2\u0432\u0433") + buf.write("\7(\2\2\u0433\u0434\5\u00c4c\2\u0434\u0436\7\31\2\2\u0435") + buf.write("\u0437\5\u00acW\2\u0436\u0435\3\2\2\2\u0436\u0437\3\2") + buf.write("\2\2\u0437\u0438\3\2\2\2\u0438\u043a\7\32\2\2\u0439\u043b") + buf.write("\5\u00b8]\2\u043a\u0439\3\2\2\2\u043a\u043b\3\2\2\2\u043b") + buf.write("\u043c\3\2\2\2\u043c\u043d\5\u009cO\2\u043d\u00b7\3\2") + buf.write("\2\2\u043e\u043f\7`\2\2\u043f\u0440\5\u00acW\2\u0440\u00b9") + buf.write("\3\2\2\2\u0441\u0444\7\35\2\2\u0442\u0445\5\u009cO\2\u0443") + buf.write("\u0445\5\u00a0Q\2\u0444\u0442\3\2\2\2\u0444\u0443\3\2") + buf.write("\2\2\u0445\u0446\3\2\2\2\u0446\u0449\5\u00a0Q\2\u0447") + buf.write("\u044a\5\u009cO\2\u0448\u044a\5\u00a0Q\2\u0449\u0447\3") + buf.write("\2\2\2\u0449\u0448\3\2\2\2\u044a\u044b\3\2\2\2\u044b\u044c") + buf.write("\5\u009cO\2\u044c\u00bb\3\2\2\2\u044d\u044e\7\65\2\2\u044e") + buf.write("\u044f\5\u00a0Q\2\u044f\u0450\5\u009cO\2\u0450\u00bd\3") + buf.write("\2\2\2\u0451\u0457\5\u00caf\2\u0452\u0457\7i\2\2\u0453") + buf.write("\u0457\7j\2\2\u0454\u0457\5\u00c6d\2\u0455\u0457\7h\2") + buf.write("\2\u0456\u0451\3\2\2\2\u0456\u0452\3\2\2\2\u0456\u0453") + buf.write("\3\2\2\2\u0456\u0454\3\2\2\2\u0456\u0455\3\2\2\2\u0457") + buf.write("\u00bf\3\2\2\2\u0458\u045a\7\31\2\2\u0459\u045b\5\u008e") + buf.write("H\2\u045a\u0459\3\2\2\2\u045a\u045b\3\2\2\2\u045b\u0462") + buf.write("\3\2\2\2\u045c\u045e\7\22\2\2\u045d\u045f\5\u008eH\2\u045e") + buf.write("\u045d\3\2\2\2\u045e\u045f\3\2\2\2\u045f\u0461\3\2\2\2") + buf.write("\u0460\u045c\3\2\2\2\u0461\u0464\3\2\2\2\u0462\u0460\3") + buf.write("\2\2\2\u0462\u0463\3\2\2\2\u0463\u0465\3\2\2\2\u0464\u0462") + buf.write("\3\2\2\2\u0465\u0473\7\32\2\2\u0466\u046f\7,\2\2\u0467") + buf.write("\u046c\5\u008eH\2\u0468\u0469\7\22\2\2\u0469\u046b\5\u008e") + buf.write("H\2\u046a\u0468\3\2\2\2\u046b\u046e\3\2\2\2\u046c\u046a") + buf.write("\3\2\2\2\u046c\u046d\3\2\2\2\u046d\u0470\3\2\2\2\u046e") + buf.write("\u046c\3\2\2\2\u046f\u0467\3\2\2\2\u046f\u0470\3\2\2\2") + buf.write("\u0470\u0471\3\2\2\2\u0471\u0473\7-\2\2\u0472\u0458\3") + buf.write("\2\2\2\u0472\u0466\3\2\2\2\u0473\u00c1\3\2\2\2\u0474\u0476") + buf.write("\t\17\2\2\u0475\u0477\7k\2\2\u0476\u0475\3\2\2\2\u0476") + buf.write("\u0477\3\2\2\2\u0477\u00c3\3\2\2\2\u0478\u0479\t\20\2") + buf.write("\2\u0479\u00c5\3\2\2\2\u047a\u047c\7l\2\2\u047b\u047a") + buf.write("\3\2\2\2\u047c\u047d\3\2\2\2\u047d\u047b\3\2\2\2\u047d") + buf.write("\u047e\3\2\2\2\u047e\u00c7\3\2\2\2\u047f\u048b\7b\2\2") + buf.write("\u0480\u0481\7\31\2\2\u0481\u0486\5P)\2\u0482\u0483\7") + buf.write("\22\2\2\u0483\u0485\5P)\2\u0484\u0482\3\2\2\2\u0485\u0488") + buf.write("\3\2\2\2\u0486\u0484\3\2\2\2\u0486\u0487\3\2\2\2\u0487") + buf.write("\u0489\3\2\2\2\u0488\u0486\3\2\2\2\u0489\u048a\7\32\2") + buf.write("\2\u048a\u048c\3\2\2\2\u048b\u0480\3\2\2\2\u048b\u048c") + buf.write("\3\2\2\2\u048c\u00c9\3\2\2\2\u048d\u048f\7\u0083\2\2\u048e") + buf.write("\u048d\3\2\2\2\u048f\u0490\3\2\2\2\u0490\u048e\3\2\2\2") + buf.write("\u0490\u0491\3\2\2\2\u0491\u00cb\3\2\2\2\u0084\u00d6\u00d8") + buf.write("\u00e7\u00eb\u00f0\u00f6\u00fa\u00fd\u0102\u0108\u010f") + buf.write("\u0113\u0120\u0128\u012d\u0137\u013a\u0140\u0148\u014b") + buf.write("\u0156\u015f\u0161\u0167\u0182\u0185\u0190\u0195\u019a") + buf.write("\u01a8\u01ab\u01b2\u01b6\u01b8\u01bd\u01c2\u01c5\u01cb") + buf.write("\u01cf\u01d3\u01d8\u01e5\u01e7\u01ee\u01f8\u01fe\u0209") + buf.write("\u020c\u0212\u0215\u021d\u0220\u0226\u0229\u0231\u0234") + buf.write("\u023a\u023e\u0249\u024e\u0253\u025b\u0260\u0266\u026b") + buf.write("\u0278\u027a\u027f\u0289\u029d\u02a9\u02ae\u02b4\u02b8") + buf.write("\u02bb\u02c7\u02d0\u02d4\u02d7\u02de\u02e4\u02fa\u0310") + buf.write("\u0314\u0319\u031d\u0321\u0326\u032b\u032f\u0347\u037d") + buf.write("\u0381\u0391\u0393\u039f\u03a6\u03ae\u03b2\u03ba\u03be") + buf.write("\u03c0\u03cb\u03e1\u03e6\u03f0\u03f4\u03fa\u03fe\u0404") + buf.write("\u0411\u0418\u0427\u0430\u0436\u043a\u0444\u0449\u0456") + buf.write("\u045a\u045e\u0462\u046c\u046f\u0472\u0476\u047d\u0486") + buf.write("\u048b\u0490") return buf.getvalue() @@ -600,20 +616,20 @@ class SolidityParser ( Parser ): sharedContextCache = PredictionContextCache() - literalNames = [ "", "'pragma'", "';'", "'||'", "'^'", "'~'", - "'>='", "'>'", "'<'", "'<='", "'='", "'as'", "'import'", - "'*'", "'from'", "'{'", "','", "'}'", "'abstract'", + literalNames = [ "", "'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'", "':'", "'+'", "'-'", "'after'", "'delete'", - "'!'", "'**'", "'/'", "'%'", "'<<'", "'>>'", "'&'", - "'|'", "'=='", "'!='", "'&&'", "'?'", "'|='", "'^='", + "')'", "'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'", "", @@ -623,7 +639,8 @@ class SolidityParser ( Parser ): "'constant'", "'immutable'", "'continue'", "'leave'", "'external'", "'indexed'", "'internal'", "'payable'", "'private'", "'public'", "'virtual'", "'pure'", "'type'", - "'view'", "'constructor'", "'fallback'", "'receive'" ] + "'view'", "'global'", "'constructor'", "'fallback'", + "'receive'" ] symbolicNames = [ "", "", "", "", "", "", "", "", @@ -649,14 +666,14 @@ class SolidityParser ( Parser ): "", "", "", "", "", "", "", "", "", "", "", "", - "", "", "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", + "", "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" ] @@ -679,105 +696,111 @@ class SolidityParser ( Parser ): RULE_customErrorDefinition = 15 RULE_typeDefinition = 16 RULE_usingForDeclaration = 17 - RULE_structDefinition = 18 - RULE_modifierDefinition = 19 - RULE_modifierInvocation = 20 - RULE_functionDefinition = 21 - RULE_functionDescriptor = 22 - RULE_returnParameters = 23 - RULE_modifierList = 24 - RULE_eventDefinition = 25 - RULE_enumValue = 26 - RULE_enumDefinition = 27 - RULE_parameterList = 28 - RULE_parameter = 29 - RULE_eventParameterList = 30 - RULE_eventParameter = 31 - RULE_functionTypeParameterList = 32 - RULE_functionTypeParameter = 33 - RULE_variableDeclaration = 34 - RULE_typeName = 35 - RULE_userDefinedTypeName = 36 - RULE_mappingKey = 37 - RULE_mapping = 38 - RULE_functionTypeName = 39 - RULE_storageLocation = 40 - RULE_stateMutability = 41 - RULE_block = 42 - RULE_statement = 43 - RULE_expressionStatement = 44 - RULE_ifStatement = 45 - RULE_tryStatement = 46 - RULE_catchClause = 47 - RULE_whileStatement = 48 - RULE_simpleStatement = 49 - RULE_uncheckedStatement = 50 - RULE_forStatement = 51 - RULE_inlineAssemblyStatement = 52 - RULE_doWhileStatement = 53 - RULE_continueStatement = 54 - RULE_breakStatement = 55 - RULE_returnStatement = 56 - RULE_throwStatement = 57 - RULE_emitStatement = 58 - RULE_revertStatement = 59 - RULE_variableDeclarationStatement = 60 - RULE_variableDeclarationList = 61 - RULE_identifierList = 62 - RULE_elementaryTypeName = 63 - RULE_expression = 64 - RULE_primaryExpression = 65 - RULE_expressionList = 66 - RULE_nameValueList = 67 - RULE_nameValue = 68 - RULE_functionCallArguments = 69 - RULE_functionCall = 70 - RULE_assemblyBlock = 71 - RULE_assemblyItem = 72 - RULE_assemblyExpression = 73 - RULE_assemblyMember = 74 - RULE_assemblyCall = 75 - RULE_assemblyLocalDefinition = 76 - RULE_assemblyAssignment = 77 - RULE_assemblyIdentifierOrList = 78 - RULE_assemblyIdentifierList = 79 - RULE_assemblyStackAssignment = 80 - RULE_labelDefinition = 81 - RULE_assemblySwitch = 82 - RULE_assemblyCase = 83 - RULE_assemblyFunctionDefinition = 84 - RULE_assemblyFunctionReturns = 85 - RULE_assemblyFor = 86 - RULE_assemblyIf = 87 - RULE_assemblyLiteral = 88 - RULE_subAssembly = 89 - RULE_tupleExpression = 90 - RULE_typeNameExpression = 91 - RULE_numberLiteral = 92 - RULE_identifier = 93 - RULE_hexLiteral = 94 - RULE_overrideSpecifier = 95 - RULE_stringLiteral = 96 + RULE_usingForObject = 18 + RULE_usingForObjectDirective = 19 + RULE_userDefinableOperators = 20 + RULE_structDefinition = 21 + RULE_modifierDefinition = 22 + RULE_modifierInvocation = 23 + RULE_functionDefinition = 24 + RULE_functionDescriptor = 25 + RULE_returnParameters = 26 + RULE_modifierList = 27 + RULE_eventDefinition = 28 + RULE_enumValue = 29 + RULE_enumDefinition = 30 + RULE_parameterList = 31 + RULE_parameter = 32 + RULE_eventParameterList = 33 + RULE_eventParameter = 34 + RULE_functionTypeParameterList = 35 + RULE_functionTypeParameter = 36 + RULE_variableDeclaration = 37 + RULE_typeName = 38 + RULE_userDefinedTypeName = 39 + RULE_mappingKey = 40 + RULE_mapping = 41 + RULE_mappingKeyName = 42 + RULE_mappingValueName = 43 + RULE_functionTypeName = 44 + RULE_storageLocation = 45 + RULE_stateMutability = 46 + RULE_block = 47 + RULE_statement = 48 + RULE_expressionStatement = 49 + RULE_ifStatement = 50 + RULE_tryStatement = 51 + RULE_catchClause = 52 + RULE_whileStatement = 53 + RULE_simpleStatement = 54 + RULE_uncheckedStatement = 55 + RULE_forStatement = 56 + RULE_inlineAssemblyStatement = 57 + RULE_inlineAssemblyStatementFlag = 58 + RULE_doWhileStatement = 59 + RULE_continueStatement = 60 + RULE_breakStatement = 61 + RULE_returnStatement = 62 + RULE_throwStatement = 63 + RULE_emitStatement = 64 + RULE_revertStatement = 65 + RULE_variableDeclarationStatement = 66 + RULE_variableDeclarationList = 67 + RULE_identifierList = 68 + RULE_elementaryTypeName = 69 + RULE_expression = 70 + RULE_primaryExpression = 71 + RULE_expressionList = 72 + RULE_nameValueList = 73 + RULE_nameValue = 74 + RULE_functionCallArguments = 75 + RULE_functionCall = 76 + RULE_assemblyBlock = 77 + RULE_assemblyItem = 78 + RULE_assemblyExpression = 79 + RULE_assemblyMember = 80 + RULE_assemblyCall = 81 + RULE_assemblyLocalDefinition = 82 + RULE_assemblyAssignment = 83 + RULE_assemblyIdentifierOrList = 84 + RULE_assemblyIdentifierList = 85 + RULE_assemblyStackAssignment = 86 + RULE_labelDefinition = 87 + RULE_assemblySwitch = 88 + RULE_assemblyCase = 89 + RULE_assemblyFunctionDefinition = 90 + RULE_assemblyFunctionReturns = 91 + RULE_assemblyFor = 92 + RULE_assemblyIf = 93 + RULE_assemblyLiteral = 94 + RULE_tupleExpression = 95 + RULE_numberLiteral = 96 + RULE_identifier = 97 + RULE_hexLiteral = 98 + RULE_overrideSpecifier = 99 + RULE_stringLiteral = 100 ruleNames = [ "sourceUnit", "pragmaDirective", "pragmaName", "pragmaValue", "version", "versionOperator", "versionConstraint", "importDeclaration", "importDirective", "importPath", "contractDefinition", "inheritanceSpecifier", "contractPart", "stateVariableDeclaration", "fileLevelConstant", "customErrorDefinition", "typeDefinition", - "usingForDeclaration", "structDefinition", "modifierDefinition", + "usingForDeclaration", "usingForObject", "usingForObjectDirective", + "userDefinableOperators", "structDefinition", "modifierDefinition", "modifierInvocation", "functionDefinition", "functionDescriptor", "returnParameters", "modifierList", "eventDefinition", "enumValue", "enumDefinition", "parameterList", "parameter", "eventParameterList", "eventParameter", "functionTypeParameterList", "functionTypeParameter", "variableDeclaration", "typeName", - "userDefinedTypeName", "mappingKey", "mapping", "functionTypeName", - "storageLocation", "stateMutability", "block", "statement", - "expressionStatement", "ifStatement", "tryStatement", - "catchClause", "whileStatement", "simpleStatement", "uncheckedStatement", - "forStatement", "inlineAssemblyStatement", "doWhileStatement", - "continueStatement", "breakStatement", "returnStatement", - "throwStatement", "emitStatement", "revertStatement", - "variableDeclarationStatement", "variableDeclarationList", + "userDefinedTypeName", "mappingKey", "mapping", "mappingKeyName", + "mappingValueName", "functionTypeName", "storageLocation", + "stateMutability", "block", "statement", "expressionStatement", + "ifStatement", "tryStatement", "catchClause", "whileStatement", + "simpleStatement", "uncheckedStatement", "forStatement", + "inlineAssemblyStatement", "inlineAssemblyStatementFlag", + "doWhileStatement", "continueStatement", "breakStatement", + "returnStatement", "throwStatement", "emitStatement", + "revertStatement", "variableDeclarationStatement", "variableDeclarationList", "identifierList", "elementaryTypeName", "expression", "primaryExpression", "expressionList", "nameValueList", "nameValue", "functionCallArguments", "functionCall", @@ -786,9 +809,9 @@ class SolidityParser ( Parser ): "assemblyAssignment", "assemblyIdentifierOrList", "assemblyIdentifierList", "assemblyStackAssignment", "labelDefinition", "assemblySwitch", "assemblyCase", "assemblyFunctionDefinition", "assemblyFunctionReturns", - "assemblyFor", "assemblyIf", "assemblyLiteral", "subAssembly", - "tupleExpression", "typeNameExpression", "numberLiteral", - "identifier", "hexLiteral", "overrideSpecifier", "stringLiteral" ] + "assemblyFor", "assemblyIf", "assemblyLiteral", "tupleExpression", + "numberLiteral", "identifier", "hexLiteral", "overrideSpecifier", + "stringLiteral" ] EOF = Token.EOF T__0=1 @@ -887,34 +910,34 @@ class SolidityParser ( Parser ): T__93=94 T__94=95 T__95=96 - T__96=97 - Int=98 - Uint=99 - Byte=100 - Fixed=101 - Ufixed=102 - BooleanLiteral=103 - DecimalNumber=104 - HexNumber=105 - NumberUnit=106 - HexLiteralFragment=107 - ReservedKeyword=108 - AnonymousKeyword=109 - BreakKeyword=110 - ConstantKeyword=111 - ImmutableKeyword=112 - ContinueKeyword=113 - LeaveKeyword=114 - ExternalKeyword=115 - IndexedKeyword=116 - InternalKeyword=117 - PayableKeyword=118 - PrivateKeyword=119 - PublicKeyword=120 - VirtualKeyword=121 - PureKeyword=122 - TypeKeyword=123 - ViewKeyword=124 + Int=97 + Uint=98 + Byte=99 + Fixed=100 + Ufixed=101 + BooleanLiteral=102 + DecimalNumber=103 + HexNumber=104 + NumberUnit=105 + HexLiteralFragment=106 + ReservedKeyword=107 + AnonymousKeyword=108 + BreakKeyword=109 + ConstantKeyword=110 + ImmutableKeyword=111 + ContinueKeyword=112 + LeaveKeyword=113 + ExternalKeyword=114 + IndexedKeyword=115 + InternalKeyword=116 + PayableKeyword=117 + PrivateKeyword=118 + PublicKeyword=119 + VirtualKeyword=120 + PureKeyword=121 + TypeKeyword=122 + ViewKeyword=123 + GlobalKeyword=124 ConstructorKeyword=125 FallbackKeyword=126 ReceiveKeyword=127 @@ -927,7 +950,7 @@ class SolidityParser ( Parser ): def __init__(self, input:TokenStream, output:TextIO = sys.stdout): super().__init__(input, output) - self.checkVersion("4.9.3") + self.checkVersion("4.7.2") self._interp = ParserATNSimulator(self, self.atn, self.decisionsToDFA, self.sharedContextCache) self._predicates = None @@ -935,7 +958,6 @@ def __init__(self, input:TokenStream, output:TextIO = sys.stdout): class SourceUnitContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -1007,6 +1029,13 @@ def typeDefinition(self, i:int=None): return self.getTypedRuleContext(SolidityParser.TypeDefinitionContext,i) + def usingForDeclaration(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(SolidityParser.UsingForDeclarationContext) + else: + return self.getTypedRuleContext(SolidityParser.UsingForDeclarationContext,i) + + def getRuleIndex(self): return SolidityParser.RULE_sourceUnit @@ -1034,64 +1063,69 @@ def sourceUnit(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 205 + self.state = 214 self._errHandler.sync(self) _la = self._input.LA(1) - while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__0) | (1 << SolidityParser.T__11) | (1 << SolidityParser.T__13) | (1 << SolidityParser.T__17) | (1 << SolidityParser.T__18) | (1 << SolidityParser.T__19) | (1 << SolidityParser.T__20) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__27) | (1 << SolidityParser.T__29) | (1 << SolidityParser.T__32) | (1 << SolidityParser.T__35) | (1 << SolidityParser.T__37) | (1 << SolidityParser.T__41) | (1 << SolidityParser.T__53) | (1 << SolidityParser.T__54) | (1 << SolidityParser.T__55) | (1 << SolidityParser.T__56) | (1 << SolidityParser.T__57))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.Int - 96)) | (1 << (SolidityParser.Uint - 96)) | (1 << (SolidityParser.Byte - 96)) | (1 << (SolidityParser.Fixed - 96)) | (1 << (SolidityParser.Ufixed - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.TypeKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.FallbackKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)))) != 0): - self.state = 203 + while ((((_la - 1)) & ~0x3f) == 0 and ((1 << (_la - 1)) & ((1 << (SolidityParser.T__0 - 1)) | (1 << (SolidityParser.T__12 - 1)) | (1 << (SolidityParser.T__13 - 1)) | (1 << (SolidityParser.T__17 - 1)) | (1 << (SolidityParser.T__18 - 1)) | (1 << (SolidityParser.T__19 - 1)) | (1 << (SolidityParser.T__20 - 1)) | (1 << (SolidityParser.T__24 - 1)) | (1 << (SolidityParser.T__25 - 1)) | (1 << (SolidityParser.T__35 - 1)) | (1 << (SolidityParser.T__37 - 1)) | (1 << (SolidityParser.T__40 - 1)) | (1 << (SolidityParser.T__43 - 1)) | (1 << (SolidityParser.T__45 - 1)) | (1 << (SolidityParser.T__49 - 1)) | (1 << (SolidityParser.T__61 - 1)) | (1 << (SolidityParser.T__62 - 1)) | (1 << (SolidityParser.T__63 - 1)))) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & ((1 << (SolidityParser.T__64 - 65)) | (1 << (SolidityParser.T__65 - 65)) | (1 << (SolidityParser.T__94 - 65)) | (1 << (SolidityParser.Int - 65)) | (1 << (SolidityParser.Uint - 65)) | (1 << (SolidityParser.Byte - 65)) | (1 << (SolidityParser.Fixed - 65)) | (1 << (SolidityParser.Ufixed - 65)) | (1 << (SolidityParser.LeaveKeyword - 65)) | (1 << (SolidityParser.PayableKeyword - 65)) | (1 << (SolidityParser.TypeKeyword - 65)) | (1 << (SolidityParser.GlobalKeyword - 65)) | (1 << (SolidityParser.ConstructorKeyword - 65)) | (1 << (SolidityParser.FallbackKeyword - 65)) | (1 << (SolidityParser.ReceiveKeyword - 65)) | (1 << (SolidityParser.Identifier - 65)))) != 0): + self.state = 212 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,0,self._ctx) if la_ == 1: - self.state = 194 + self.state = 202 self.pragmaDirective() pass elif la_ == 2: - self.state = 195 + self.state = 203 self.importDirective() pass elif la_ == 3: - self.state = 196 + self.state = 204 self.contractDefinition() pass elif la_ == 4: - self.state = 197 + self.state = 205 self.enumDefinition() pass elif la_ == 5: - self.state = 198 + self.state = 206 self.structDefinition() pass elif la_ == 6: - self.state = 199 + self.state = 207 self.functionDefinition() pass elif la_ == 7: - self.state = 200 + self.state = 208 self.fileLevelConstant() pass elif la_ == 8: - self.state = 201 + self.state = 209 self.customErrorDefinition() pass elif la_ == 9: - self.state = 202 + self.state = 210 self.typeDefinition() pass + elif la_ == 10: + self.state = 211 + self.usingForDeclaration() + pass + - self.state = 207 + self.state = 216 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 208 + self.state = 217 self.match(SolidityParser.EOF) except RecognitionException as re: localctx.exception = re @@ -1103,7 +1137,6 @@ def sourceUnit(self): class PragmaDirectiveContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -1143,13 +1176,13 @@ def pragmaDirective(self): self.enterRule(localctx, 2, self.RULE_pragmaDirective) try: self.enterOuterAlt(localctx, 1) - self.state = 210 + self.state = 219 self.match(SolidityParser.T__0) - self.state = 211 + self.state = 220 self.pragmaName() - self.state = 212 + self.state = 221 self.pragmaValue() - self.state = 213 + self.state = 222 self.match(SolidityParser.T__1) except RecognitionException as re: localctx.exception = re @@ -1161,7 +1194,6 @@ def pragmaDirective(self): class PragmaNameContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -1197,7 +1229,7 @@ def pragmaName(self): self.enterRule(localctx, 4, self.RULE_pragmaName) try: self.enterOuterAlt(localctx, 1) - self.state = 215 + self.state = 224 self.identifier() except RecognitionException as re: localctx.exception = re @@ -1209,7 +1241,6 @@ def pragmaName(self): class PragmaValueContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -1248,18 +1279,24 @@ def pragmaValue(self): localctx = SolidityParser.PragmaValueContext(self, self._ctx, self.state) self.enterRule(localctx, 6, self.RULE_pragmaValue) try: - self.state = 219 + self.state = 229 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,2,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 217 - self.version() + self.state = 226 + self.match(SolidityParser.T__2) pass elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 218 + self.state = 227 + self.version() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 228 self.expression(0) pass @@ -1274,7 +1311,6 @@ def pragmaValue(self): class VersionContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -1314,23 +1350,23 @@ def version(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 221 + self.state = 231 self.versionConstraint() - self.state = 228 + self.state = 238 self._errHandler.sync(self) _la = self._input.LA(1) - while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__2) | (1 << SolidityParser.T__3) | (1 << SolidityParser.T__4) | (1 << SolidityParser.T__5) | (1 << SolidityParser.T__6) | (1 << SolidityParser.T__7) | (1 << SolidityParser.T__8) | (1 << SolidityParser.T__9))) != 0) or _la==SolidityParser.DecimalNumber or _la==SolidityParser.VersionLiteral: - self.state = 223 + while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__3) | (1 << SolidityParser.T__4) | (1 << SolidityParser.T__5) | (1 << SolidityParser.T__6) | (1 << SolidityParser.T__7) | (1 << SolidityParser.T__8) | (1 << SolidityParser.T__9) | (1 << SolidityParser.T__10))) != 0) or _la==SolidityParser.DecimalNumber or _la==SolidityParser.VersionLiteral: + self.state = 233 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==SolidityParser.T__2: - self.state = 222 - self.match(SolidityParser.T__2) + if _la==SolidityParser.T__3: + self.state = 232 + self.match(SolidityParser.T__3) - self.state = 225 + self.state = 235 self.versionConstraint() - self.state = 230 + self.state = 240 self._errHandler.sync(self) _la = self._input.LA(1) @@ -1344,7 +1380,6 @@ def version(self): class VersionOperatorContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -1378,9 +1413,9 @@ def versionOperator(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 231 + self.state = 241 _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__3) | (1 << SolidityParser.T__4) | (1 << SolidityParser.T__5) | (1 << SolidityParser.T__6) | (1 << SolidityParser.T__7) | (1 << SolidityParser.T__8) | (1 << SolidityParser.T__9))) != 0)): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__4) | (1 << SolidityParser.T__5) | (1 << SolidityParser.T__6) | (1 << SolidityParser.T__7) | (1 << SolidityParser.T__8) | (1 << SolidityParser.T__9) | (1 << SolidityParser.T__10))) != 0)): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -1395,7 +1430,6 @@ def versionOperator(self): class VersionConstraintContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -1437,34 +1471,34 @@ def versionConstraint(self): self.enterRule(localctx, 12, self.RULE_versionConstraint) self._la = 0 # Token type try: - self.state = 241 + self.state = 251 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,7,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 234 + self.state = 244 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__3) | (1 << SolidityParser.T__4) | (1 << SolidityParser.T__5) | (1 << SolidityParser.T__6) | (1 << SolidityParser.T__7) | (1 << SolidityParser.T__8) | (1 << SolidityParser.T__9))) != 0): - self.state = 233 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__4) | (1 << SolidityParser.T__5) | (1 << SolidityParser.T__6) | (1 << SolidityParser.T__7) | (1 << SolidityParser.T__8) | (1 << SolidityParser.T__9) | (1 << SolidityParser.T__10))) != 0): + self.state = 243 self.versionOperator() - self.state = 236 + self.state = 246 self.match(SolidityParser.VersionLiteral) pass elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 238 + self.state = 248 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__3) | (1 << SolidityParser.T__4) | (1 << SolidityParser.T__5) | (1 << SolidityParser.T__6) | (1 << SolidityParser.T__7) | (1 << SolidityParser.T__8) | (1 << SolidityParser.T__9))) != 0): - self.state = 237 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__4) | (1 << SolidityParser.T__5) | (1 << SolidityParser.T__6) | (1 << SolidityParser.T__7) | (1 << SolidityParser.T__8) | (1 << SolidityParser.T__9) | (1 << SolidityParser.T__10))) != 0): + self.state = 247 self.versionOperator() - self.state = 240 + self.state = 250 self.match(SolidityParser.DecimalNumber) pass @@ -1479,7 +1513,6 @@ def versionConstraint(self): class ImportDeclarationContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -1519,15 +1552,15 @@ def importDeclaration(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 243 + self.state = 253 self.identifier() - self.state = 246 + self.state = 256 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==SolidityParser.T__10: - self.state = 244 - self.match(SolidityParser.T__10) - self.state = 245 + if _la==SolidityParser.T__11: + self.state = 254 + self.match(SolidityParser.T__11) + self.state = 255 self.identifier() @@ -1541,7 +1574,6 @@ def importDeclaration(self): class ImportDirectiveContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -1591,92 +1623,92 @@ def importDirective(self): self.enterRule(localctx, 16, self.RULE_importDirective) self._la = 0 # Token type try: - self.state = 284 + self.state = 294 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,13,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 248 - self.match(SolidityParser.T__11) - self.state = 249 + self.state = 258 + self.match(SolidityParser.T__12) + self.state = 259 self.importPath() - self.state = 252 + self.state = 262 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==SolidityParser.T__10: - self.state = 250 - self.match(SolidityParser.T__10) - self.state = 251 + if _la==SolidityParser.T__11: + self.state = 260 + self.match(SolidityParser.T__11) + self.state = 261 self.identifier() - self.state = 254 + self.state = 264 self.match(SolidityParser.T__1) pass elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 256 - self.match(SolidityParser.T__11) - self.state = 259 + self.state = 266 + self.match(SolidityParser.T__12) + self.state = 269 self._errHandler.sync(self) token = self._input.LA(1) - if token in [SolidityParser.T__12]: - self.state = 257 - self.match(SolidityParser.T__12) + if token in [SolidityParser.T__2]: + self.state = 267 + self.match(SolidityParser.T__2) pass - elif token in [SolidityParser.T__13, SolidityParser.T__24, SolidityParser.T__41, SolidityParser.T__53, SolidityParser.T__95, SolidityParser.LeaveKeyword, SolidityParser.PayableKeyword, SolidityParser.ConstructorKeyword, SolidityParser.ReceiveKeyword, SolidityParser.Identifier]: - self.state = 258 + elif token in [SolidityParser.T__13, SolidityParser.T__24, SolidityParser.T__43, SolidityParser.T__49, SolidityParser.T__61, SolidityParser.T__94, SolidityParser.LeaveKeyword, SolidityParser.PayableKeyword, SolidityParser.GlobalKeyword, SolidityParser.ConstructorKeyword, SolidityParser.ReceiveKeyword, SolidityParser.Identifier]: + self.state = 268 self.identifier() pass else: raise NoViableAltException(self) - self.state = 263 + self.state = 273 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==SolidityParser.T__10: - self.state = 261 - self.match(SolidityParser.T__10) - self.state = 262 + if _la==SolidityParser.T__11: + self.state = 271 + self.match(SolidityParser.T__11) + self.state = 272 self.identifier() - self.state = 265 + self.state = 275 self.match(SolidityParser.T__13) - self.state = 266 + self.state = 276 self.importPath() - self.state = 267 + self.state = 277 self.match(SolidityParser.T__1) pass elif la_ == 3: self.enterOuterAlt(localctx, 3) - self.state = 269 - self.match(SolidityParser.T__11) - self.state = 270 + self.state = 279 + self.match(SolidityParser.T__12) + self.state = 280 self.match(SolidityParser.T__14) - self.state = 271 + self.state = 281 self.importDeclaration() - self.state = 276 + self.state = 286 self._errHandler.sync(self) _la = self._input.LA(1) while _la==SolidityParser.T__15: - self.state = 272 + self.state = 282 self.match(SolidityParser.T__15) - self.state = 273 + self.state = 283 self.importDeclaration() - self.state = 278 + self.state = 288 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 279 + self.state = 289 self.match(SolidityParser.T__16) - self.state = 280 + self.state = 290 self.match(SolidityParser.T__13) - self.state = 281 + self.state = 291 self.importPath() - self.state = 282 + self.state = 292 self.match(SolidityParser.T__1) pass @@ -1691,7 +1723,6 @@ def importDirective(self): class ImportPathContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -1726,7 +1757,7 @@ def importPath(self): self.enterRule(localctx, 18, self.RULE_importPath) try: self.enterOuterAlt(localctx, 1) - self.state = 286 + self.state = 296 self.match(SolidityParser.StringLiteralFragment) except RecognitionException as re: localctx.exception = re @@ -1738,7 +1769,6 @@ def importPath(self): class ContractDefinitionContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -1789,58 +1819,58 @@ def contractDefinition(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 289 + self.state = 299 self._errHandler.sync(self) _la = self._input.LA(1) if _la==SolidityParser.T__17: - self.state = 288 + self.state = 298 self.match(SolidityParser.T__17) - self.state = 291 + self.state = 301 _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__18) | (1 << SolidityParser.T__19) | (1 << SolidityParser.T__20))) != 0)): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 292 - self.identifier() self.state = 302 + self.identifier() + self.state = 312 self._errHandler.sync(self) _la = self._input.LA(1) if _la==SolidityParser.T__21: - self.state = 293 + self.state = 303 self.match(SolidityParser.T__21) - self.state = 294 + self.state = 304 self.inheritanceSpecifier() - self.state = 299 + self.state = 309 self._errHandler.sync(self) _la = self._input.LA(1) while _la==SolidityParser.T__15: - self.state = 295 + self.state = 305 self.match(SolidityParser.T__15) - self.state = 296 + self.state = 306 self.inheritanceSpecifier() - self.state = 301 + self.state = 311 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 304 + self.state = 314 self.match(SolidityParser.T__14) - self.state = 308 + self.state = 318 self._errHandler.sync(self) _la = self._input.LA(1) - while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__25) | (1 << SolidityParser.T__27) | (1 << SolidityParser.T__28) | (1 << SolidityParser.T__29) | (1 << SolidityParser.T__31) | (1 << SolidityParser.T__32) | (1 << SolidityParser.T__35) | (1 << SolidityParser.T__37) | (1 << SolidityParser.T__41) | (1 << SolidityParser.T__53) | (1 << SolidityParser.T__54) | (1 << SolidityParser.T__55) | (1 << SolidityParser.T__56) | (1 << SolidityParser.T__57))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.Int - 96)) | (1 << (SolidityParser.Uint - 96)) | (1 << (SolidityParser.Byte - 96)) | (1 << (SolidityParser.Fixed - 96)) | (1 << (SolidityParser.Ufixed - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.TypeKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.FallbackKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)))) != 0): - self.state = 305 + while ((((_la - 14)) & ~0x3f) == 0 and ((1 << (_la - 14)) & ((1 << (SolidityParser.T__13 - 14)) | (1 << (SolidityParser.T__24 - 14)) | (1 << (SolidityParser.T__25 - 14)) | (1 << (SolidityParser.T__35 - 14)) | (1 << (SolidityParser.T__36 - 14)) | (1 << (SolidityParser.T__37 - 14)) | (1 << (SolidityParser.T__39 - 14)) | (1 << (SolidityParser.T__40 - 14)) | (1 << (SolidityParser.T__43 - 14)) | (1 << (SolidityParser.T__45 - 14)) | (1 << (SolidityParser.T__49 - 14)) | (1 << (SolidityParser.T__61 - 14)) | (1 << (SolidityParser.T__62 - 14)) | (1 << (SolidityParser.T__63 - 14)) | (1 << (SolidityParser.T__64 - 14)) | (1 << (SolidityParser.T__65 - 14)))) != 0) or ((((_la - 95)) & ~0x3f) == 0 and ((1 << (_la - 95)) & ((1 << (SolidityParser.T__94 - 95)) | (1 << (SolidityParser.Int - 95)) | (1 << (SolidityParser.Uint - 95)) | (1 << (SolidityParser.Byte - 95)) | (1 << (SolidityParser.Fixed - 95)) | (1 << (SolidityParser.Ufixed - 95)) | (1 << (SolidityParser.LeaveKeyword - 95)) | (1 << (SolidityParser.PayableKeyword - 95)) | (1 << (SolidityParser.TypeKeyword - 95)) | (1 << (SolidityParser.GlobalKeyword - 95)) | (1 << (SolidityParser.ConstructorKeyword - 95)) | (1 << (SolidityParser.FallbackKeyword - 95)) | (1 << (SolidityParser.ReceiveKeyword - 95)) | (1 << (SolidityParser.Identifier - 95)))) != 0): + self.state = 315 self.contractPart() - self.state = 310 + self.state = 320 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 311 + self.state = 321 self.match(SolidityParser.T__16) except RecognitionException as re: localctx.exception = re @@ -1852,7 +1882,6 @@ def contractDefinition(self): class InheritanceSpecifierContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -1893,23 +1922,23 @@ def inheritanceSpecifier(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 313 + self.state = 323 self.userDefinedTypeName() - self.state = 319 + self.state = 329 self._errHandler.sync(self) _la = self._input.LA(1) if _la==SolidityParser.T__22: - self.state = 314 + self.state = 324 self.match(SolidityParser.T__22) - self.state = 316 + self.state = 326 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 5)) & ~0x3f) == 0 and ((1 << (_la - 5)) & ((1 << (SolidityParser.T__4 - 5)) | (1 << (SolidityParser.T__13 - 5)) | (1 << (SolidityParser.T__22 - 5)) | (1 << (SolidityParser.T__24 - 5)) | (1 << (SolidityParser.T__33 - 5)) | (1 << (SolidityParser.T__35 - 5)) | (1 << (SolidityParser.T__41 - 5)) | (1 << (SolidityParser.T__53 - 5)) | (1 << (SolidityParser.T__54 - 5)) | (1 << (SolidityParser.T__55 - 5)) | (1 << (SolidityParser.T__56 - 5)) | (1 << (SolidityParser.T__57 - 5)) | (1 << (SolidityParser.T__58 - 5)) | (1 << (SolidityParser.T__59 - 5)) | (1 << (SolidityParser.T__60 - 5)) | (1 << (SolidityParser.T__62 - 5)) | (1 << (SolidityParser.T__63 - 5)) | (1 << (SolidityParser.T__64 - 5)) | (1 << (SolidityParser.T__65 - 5)) | (1 << (SolidityParser.T__66 - 5)))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.Int - 96)) | (1 << (SolidityParser.Uint - 96)) | (1 << (SolidityParser.Byte - 96)) | (1 << (SolidityParser.Fixed - 96)) | (1 << (SolidityParser.Ufixed - 96)) | (1 << (SolidityParser.BooleanLiteral - 96)) | (1 << (SolidityParser.DecimalNumber - 96)) | (1 << (SolidityParser.HexNumber - 96)) | (1 << (SolidityParser.HexLiteralFragment - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.TypeKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)) | (1 << (SolidityParser.StringLiteralFragment - 96)))) != 0): - self.state = 315 + if ((((_la - 6)) & ~0x3f) == 0 and ((1 << (_la - 6)) & ((1 << (SolidityParser.T__5 - 6)) | (1 << (SolidityParser.T__13 - 6)) | (1 << (SolidityParser.T__22 - 6)) | (1 << (SolidityParser.T__24 - 6)) | (1 << (SolidityParser.T__29 - 6)) | (1 << (SolidityParser.T__30 - 6)) | (1 << (SolidityParser.T__37 - 6)) | (1 << (SolidityParser.T__41 - 6)) | (1 << (SolidityParser.T__43 - 6)) | (1 << (SolidityParser.T__45 - 6)) | (1 << (SolidityParser.T__49 - 6)) | (1 << (SolidityParser.T__61 - 6)) | (1 << (SolidityParser.T__62 - 6)) | (1 << (SolidityParser.T__63 - 6)) | (1 << (SolidityParser.T__64 - 6)) | (1 << (SolidityParser.T__65 - 6)) | (1 << (SolidityParser.T__66 - 6)) | (1 << (SolidityParser.T__67 - 6)) | (1 << (SolidityParser.T__68 - 6)))) != 0) or ((((_la - 71)) & ~0x3f) == 0 and ((1 << (_la - 71)) & ((1 << (SolidityParser.T__70 - 71)) | (1 << (SolidityParser.T__71 - 71)) | (1 << (SolidityParser.T__94 - 71)) | (1 << (SolidityParser.Int - 71)) | (1 << (SolidityParser.Uint - 71)) | (1 << (SolidityParser.Byte - 71)) | (1 << (SolidityParser.Fixed - 71)) | (1 << (SolidityParser.Ufixed - 71)) | (1 << (SolidityParser.BooleanLiteral - 71)) | (1 << (SolidityParser.DecimalNumber - 71)) | (1 << (SolidityParser.HexNumber - 71)) | (1 << (SolidityParser.HexLiteralFragment - 71)) | (1 << (SolidityParser.LeaveKeyword - 71)) | (1 << (SolidityParser.PayableKeyword - 71)) | (1 << (SolidityParser.TypeKeyword - 71)) | (1 << (SolidityParser.GlobalKeyword - 71)) | (1 << (SolidityParser.ConstructorKeyword - 71)) | (1 << (SolidityParser.ReceiveKeyword - 71)) | (1 << (SolidityParser.Identifier - 71)) | (1 << (SolidityParser.StringLiteralFragment - 71)))) != 0): + self.state = 325 self.expressionList() - self.state = 318 + self.state = 328 self.match(SolidityParser.T__23) @@ -1923,7 +1952,6 @@ def inheritanceSpecifier(self): class ContractPartContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -1990,60 +2018,60 @@ def contractPart(self): localctx = SolidityParser.ContractPartContext(self, self._ctx, self.state) self.enterRule(localctx, 24, self.RULE_contractPart) try: - self.state = 330 + self.state = 340 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,20,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 321 + self.state = 331 self.stateVariableDeclaration() pass elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 322 + self.state = 332 self.usingForDeclaration() pass elif la_ == 3: self.enterOuterAlt(localctx, 3) - self.state = 323 + self.state = 333 self.structDefinition() pass elif la_ == 4: self.enterOuterAlt(localctx, 4) - self.state = 324 + self.state = 334 self.modifierDefinition() pass elif la_ == 5: self.enterOuterAlt(localctx, 5) - self.state = 325 + self.state = 335 self.functionDefinition() pass elif la_ == 6: self.enterOuterAlt(localctx, 6) - self.state = 326 + self.state = 336 self.eventDefinition() pass elif la_ == 7: self.enterOuterAlt(localctx, 7) - self.state = 327 + self.state = 337 self.enumDefinition() pass elif la_ == 8: self.enterOuterAlt(localctx, 8) - self.state = 328 + self.state = 338 self.customErrorDefinition() pass elif la_ == 9: self.enterOuterAlt(localctx, 9) - self.state = 329 + self.state = 339 self.typeDefinition() pass @@ -2058,7 +2086,6 @@ def contractPart(self): class StateVariableDeclarationContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -2140,59 +2167,59 @@ def stateVariableDeclaration(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 332 + self.state = 342 self.typeName(0) - self.state = 341 + self.state = 351 self._errHandler.sync(self) _la = self._input.LA(1) - while ((((_la - 97)) & ~0x3f) == 0 and ((1 << (_la - 97)) & ((1 << (SolidityParser.T__96 - 97)) | (1 << (SolidityParser.ConstantKeyword - 97)) | (1 << (SolidityParser.ImmutableKeyword - 97)) | (1 << (SolidityParser.InternalKeyword - 97)) | (1 << (SolidityParser.PrivateKeyword - 97)) | (1 << (SolidityParser.PublicKeyword - 97)))) != 0): - self.state = 339 + while ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.ConstantKeyword - 96)) | (1 << (SolidityParser.ImmutableKeyword - 96)) | (1 << (SolidityParser.InternalKeyword - 96)) | (1 << (SolidityParser.PrivateKeyword - 96)) | (1 << (SolidityParser.PublicKeyword - 96)))) != 0): + self.state = 349 self._errHandler.sync(self) token = self._input.LA(1) if token in [SolidityParser.PublicKeyword]: - self.state = 333 + self.state = 343 self.match(SolidityParser.PublicKeyword) pass elif token in [SolidityParser.InternalKeyword]: - self.state = 334 + self.state = 344 self.match(SolidityParser.InternalKeyword) pass elif token in [SolidityParser.PrivateKeyword]: - self.state = 335 + self.state = 345 self.match(SolidityParser.PrivateKeyword) pass elif token in [SolidityParser.ConstantKeyword]: - self.state = 336 + self.state = 346 self.match(SolidityParser.ConstantKeyword) pass elif token in [SolidityParser.ImmutableKeyword]: - self.state = 337 + self.state = 347 self.match(SolidityParser.ImmutableKeyword) pass - elif token in [SolidityParser.T__96]: - self.state = 338 + elif token in [SolidityParser.T__95]: + self.state = 348 self.overrideSpecifier() pass else: raise NoViableAltException(self) - self.state = 343 + self.state = 353 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 344 + self.state = 354 self.identifier() - self.state = 347 + self.state = 357 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==SolidityParser.T__9: - self.state = 345 - self.match(SolidityParser.T__9) - self.state = 346 + if _la==SolidityParser.T__10: + self.state = 355 + self.match(SolidityParser.T__10) + self.state = 356 self.expression(0) - self.state = 349 + self.state = 359 self.match(SolidityParser.T__1) except RecognitionException as re: localctx.exception = re @@ -2204,7 +2231,6 @@ def stateVariableDeclaration(self): class FileLevelConstantContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -2251,17 +2277,17 @@ def fileLevelConstant(self): self.enterRule(localctx, 28, self.RULE_fileLevelConstant) try: self.enterOuterAlt(localctx, 1) - self.state = 351 + self.state = 361 self.typeName(0) - self.state = 352 + self.state = 362 self.match(SolidityParser.ConstantKeyword) - self.state = 353 + self.state = 363 self.identifier() - self.state = 354 - self.match(SolidityParser.T__9) - self.state = 355 + self.state = 364 + self.match(SolidityParser.T__10) + self.state = 365 self.expression(0) - self.state = 356 + self.state = 366 self.match(SolidityParser.T__1) except RecognitionException as re: localctx.exception = re @@ -2273,7 +2299,6 @@ def fileLevelConstant(self): class CustomErrorDefinitionContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -2313,13 +2338,13 @@ def customErrorDefinition(self): self.enterRule(localctx, 30, self.RULE_customErrorDefinition) try: self.enterOuterAlt(localctx, 1) - self.state = 358 + self.state = 368 self.match(SolidityParser.T__24) - self.state = 359 + self.state = 369 self.identifier() - self.state = 360 + self.state = 370 self.parameterList() - self.state = 361 + self.state = 371 self.match(SolidityParser.T__1) except RecognitionException as re: localctx.exception = re @@ -2331,7 +2356,6 @@ def customErrorDefinition(self): class TypeDefinitionContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -2374,15 +2398,15 @@ def typeDefinition(self): self.enterRule(localctx, 32, self.RULE_typeDefinition) try: self.enterOuterAlt(localctx, 1) - self.state = 363 + self.state = 373 self.match(SolidityParser.TypeKeyword) - self.state = 364 + self.state = 374 self.identifier() - self.state = 365 + self.state = 375 self.match(SolidityParser.T__21) - self.state = 366 + self.state = 376 self.elementaryTypeName() - self.state = 367 + self.state = 377 self.match(SolidityParser.T__1) except RecognitionException as re: localctx.exception = re @@ -2394,20 +2418,22 @@ def typeDefinition(self): class UsingForDeclarationContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) self.parser = parser - def identifier(self): - return self.getTypedRuleContext(SolidityParser.IdentifierContext,0) + def usingForObject(self): + return self.getTypedRuleContext(SolidityParser.UsingForObjectContext,0) def typeName(self): return self.getTypedRuleContext(SolidityParser.TypeNameContext,0) + def GlobalKeyword(self): + return self.getToken(SolidityParser.GlobalKeyword, 0) + def getRuleIndex(self): return SolidityParser.RULE_usingForDeclaration @@ -2432,29 +2458,38 @@ def usingForDeclaration(self): localctx = SolidityParser.UsingForDeclarationContext(self, self._ctx, self.state) self.enterRule(localctx, 34, self.RULE_usingForDeclaration) + self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 369 + self.state = 379 self.match(SolidityParser.T__25) - self.state = 370 - self.identifier() - self.state = 371 + self.state = 380 + self.usingForObject() + self.state = 381 self.match(SolidityParser.T__26) - self.state = 374 + self.state = 384 self._errHandler.sync(self) token = self._input.LA(1) - if token in [SolidityParser.T__12]: - self.state = 372 - self.match(SolidityParser.T__12) + if token in [SolidityParser.T__2]: + self.state = 382 + self.match(SolidityParser.T__2) pass - elif token in [SolidityParser.T__13, SolidityParser.T__24, SolidityParser.T__29, SolidityParser.T__35, SolidityParser.T__37, SolidityParser.T__41, SolidityParser.T__53, SolidityParser.T__54, SolidityParser.T__55, SolidityParser.T__56, SolidityParser.T__57, SolidityParser.T__95, SolidityParser.Int, SolidityParser.Uint, SolidityParser.Byte, SolidityParser.Fixed, SolidityParser.Ufixed, SolidityParser.LeaveKeyword, SolidityParser.PayableKeyword, SolidityParser.ConstructorKeyword, SolidityParser.ReceiveKeyword, SolidityParser.Identifier]: - self.state = 373 + elif token in [SolidityParser.T__13, SolidityParser.T__24, SolidityParser.T__37, SolidityParser.T__43, SolidityParser.T__45, SolidityParser.T__49, SolidityParser.T__61, SolidityParser.T__62, SolidityParser.T__63, SolidityParser.T__64, SolidityParser.T__65, SolidityParser.T__94, SolidityParser.Int, SolidityParser.Uint, SolidityParser.Byte, SolidityParser.Fixed, SolidityParser.Ufixed, SolidityParser.LeaveKeyword, SolidityParser.PayableKeyword, SolidityParser.GlobalKeyword, SolidityParser.ConstructorKeyword, SolidityParser.ReceiveKeyword, SolidityParser.Identifier]: + self.state = 383 self.typeName(0) pass else: raise NoViableAltException(self) - self.state = 376 + self.state = 387 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==SolidityParser.GlobalKeyword: + self.state = 386 + self.match(SolidityParser.GlobalKeyword) + + + self.state = 389 self.match(SolidityParser.T__1) except RecognitionException as re: localctx.exception = re @@ -2465,8 +2500,203 @@ def usingForDeclaration(self): return localctx + class UsingForObjectContext(ParserRuleContext): + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def userDefinedTypeName(self): + return self.getTypedRuleContext(SolidityParser.UserDefinedTypeNameContext,0) + + + def usingForObjectDirective(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(SolidityParser.UsingForObjectDirectiveContext) + else: + return self.getTypedRuleContext(SolidityParser.UsingForObjectDirectiveContext,i) + + + def getRuleIndex(self): + return SolidityParser.RULE_usingForObject + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterUsingForObject" ): + listener.enterUsingForObject(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitUsingForObject" ): + listener.exitUsingForObject(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitUsingForObject" ): + return visitor.visitUsingForObject(self) + else: + return visitor.visitChildren(self) + + + + + def usingForObject(self): + + localctx = SolidityParser.UsingForObjectContext(self, self._ctx, self.state) + self.enterRule(localctx, 36, self.RULE_usingForObject) + self._la = 0 # Token type + try: + self.state = 403 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [SolidityParser.T__13, SolidityParser.T__24, SolidityParser.T__43, SolidityParser.T__49, SolidityParser.T__61, SolidityParser.T__94, SolidityParser.LeaveKeyword, SolidityParser.PayableKeyword, SolidityParser.GlobalKeyword, SolidityParser.ConstructorKeyword, SolidityParser.ReceiveKeyword, SolidityParser.Identifier]: + self.enterOuterAlt(localctx, 1) + self.state = 391 + self.userDefinedTypeName() + pass + elif token in [SolidityParser.T__14]: + self.enterOuterAlt(localctx, 2) + self.state = 392 + self.match(SolidityParser.T__14) + self.state = 393 + self.usingForObjectDirective() + self.state = 398 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==SolidityParser.T__15: + self.state = 394 + self.match(SolidityParser.T__15) + self.state = 395 + self.usingForObjectDirective() + self.state = 400 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 401 + self.match(SolidityParser.T__16) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class UsingForObjectDirectiveContext(ParserRuleContext): + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def userDefinedTypeName(self): + return self.getTypedRuleContext(SolidityParser.UserDefinedTypeNameContext,0) + + + def userDefinableOperators(self): + return self.getTypedRuleContext(SolidityParser.UserDefinableOperatorsContext,0) + + + def getRuleIndex(self): + return SolidityParser.RULE_usingForObjectDirective + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterUsingForObjectDirective" ): + listener.enterUsingForObjectDirective(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitUsingForObjectDirective" ): + listener.exitUsingForObjectDirective(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitUsingForObjectDirective" ): + return visitor.visitUsingForObjectDirective(self) + else: + return visitor.visitChildren(self) + + + + + def usingForObjectDirective(self): + + localctx = SolidityParser.UsingForObjectDirectiveContext(self, self._ctx, self.state) + self.enterRule(localctx, 38, self.RULE_usingForObjectDirective) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 405 + self.userDefinedTypeName() + self.state = 408 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==SolidityParser.T__11: + self.state = 406 + self.match(SolidityParser.T__11) + self.state = 407 + self.userDefinableOperators() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class UserDefinableOperatorsContext(ParserRuleContext): + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + + def getRuleIndex(self): + return SolidityParser.RULE_userDefinableOperators + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterUserDefinableOperators" ): + listener.enterUserDefinableOperators(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitUserDefinableOperators" ): + listener.exitUserDefinableOperators(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitUserDefinableOperators" ): + return visitor.visitUserDefinableOperators(self) + else: + return visitor.visitChildren(self) + + + + + def userDefinableOperators(self): + + localctx = SolidityParser.UserDefinableOperatorsContext(self, self._ctx, self.state) + self.enterRule(localctx, 40, self.RULE_userDefinableOperators) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 410 + _la = self._input.LA(1) + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__2) | (1 << SolidityParser.T__4) | (1 << SolidityParser.T__5) | (1 << SolidityParser.T__6) | (1 << SolidityParser.T__7) | (1 << SolidityParser.T__8) | (1 << SolidityParser.T__9) | (1 << SolidityParser.T__27) | (1 << SolidityParser.T__28) | (1 << SolidityParser.T__29) | (1 << SolidityParser.T__30) | (1 << SolidityParser.T__31) | (1 << SolidityParser.T__32) | (1 << SolidityParser.T__33) | (1 << SolidityParser.T__34))) != 0)): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class StructDefinitionContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -2506,39 +2736,39 @@ def accept(self, visitor:ParseTreeVisitor): def structDefinition(self): localctx = SolidityParser.StructDefinitionContext(self, self._ctx, self.state) - self.enterRule(localctx, 36, self.RULE_structDefinition) + self.enterRule(localctx, 42, self.RULE_structDefinition) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 378 - self.match(SolidityParser.T__27) - self.state = 379 + self.state = 412 + self.match(SolidityParser.T__35) + self.state = 413 self.identifier() - self.state = 380 + self.state = 414 self.match(SolidityParser.T__14) - self.state = 391 + self.state = 425 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__29) | (1 << SolidityParser.T__35) | (1 << SolidityParser.T__37) | (1 << SolidityParser.T__41) | (1 << SolidityParser.T__53) | (1 << SolidityParser.T__54) | (1 << SolidityParser.T__55) | (1 << SolidityParser.T__56) | (1 << SolidityParser.T__57))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.Int - 96)) | (1 << (SolidityParser.Uint - 96)) | (1 << (SolidityParser.Byte - 96)) | (1 << (SolidityParser.Fixed - 96)) | (1 << (SolidityParser.Ufixed - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)))) != 0): - self.state = 381 + if ((((_la - 14)) & ~0x3f) == 0 and ((1 << (_la - 14)) & ((1 << (SolidityParser.T__13 - 14)) | (1 << (SolidityParser.T__24 - 14)) | (1 << (SolidityParser.T__37 - 14)) | (1 << (SolidityParser.T__43 - 14)) | (1 << (SolidityParser.T__45 - 14)) | (1 << (SolidityParser.T__49 - 14)) | (1 << (SolidityParser.T__61 - 14)) | (1 << (SolidityParser.T__62 - 14)) | (1 << (SolidityParser.T__63 - 14)) | (1 << (SolidityParser.T__64 - 14)) | (1 << (SolidityParser.T__65 - 14)))) != 0) or ((((_la - 95)) & ~0x3f) == 0 and ((1 << (_la - 95)) & ((1 << (SolidityParser.T__94 - 95)) | (1 << (SolidityParser.Int - 95)) | (1 << (SolidityParser.Uint - 95)) | (1 << (SolidityParser.Byte - 95)) | (1 << (SolidityParser.Fixed - 95)) | (1 << (SolidityParser.Ufixed - 95)) | (1 << (SolidityParser.LeaveKeyword - 95)) | (1 << (SolidityParser.PayableKeyword - 95)) | (1 << (SolidityParser.GlobalKeyword - 95)) | (1 << (SolidityParser.ConstructorKeyword - 95)) | (1 << (SolidityParser.ReceiveKeyword - 95)) | (1 << (SolidityParser.Identifier - 95)))) != 0): + self.state = 415 self.variableDeclaration() - self.state = 382 + self.state = 416 self.match(SolidityParser.T__1) - self.state = 388 + self.state = 422 self._errHandler.sync(self) _la = self._input.LA(1) - while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__29) | (1 << SolidityParser.T__35) | (1 << SolidityParser.T__37) | (1 << SolidityParser.T__41) | (1 << SolidityParser.T__53) | (1 << SolidityParser.T__54) | (1 << SolidityParser.T__55) | (1 << SolidityParser.T__56) | (1 << SolidityParser.T__57))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.Int - 96)) | (1 << (SolidityParser.Uint - 96)) | (1 << (SolidityParser.Byte - 96)) | (1 << (SolidityParser.Fixed - 96)) | (1 << (SolidityParser.Ufixed - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)))) != 0): - self.state = 383 + while ((((_la - 14)) & ~0x3f) == 0 and ((1 << (_la - 14)) & ((1 << (SolidityParser.T__13 - 14)) | (1 << (SolidityParser.T__24 - 14)) | (1 << (SolidityParser.T__37 - 14)) | (1 << (SolidityParser.T__43 - 14)) | (1 << (SolidityParser.T__45 - 14)) | (1 << (SolidityParser.T__49 - 14)) | (1 << (SolidityParser.T__61 - 14)) | (1 << (SolidityParser.T__62 - 14)) | (1 << (SolidityParser.T__63 - 14)) | (1 << (SolidityParser.T__64 - 14)) | (1 << (SolidityParser.T__65 - 14)))) != 0) or ((((_la - 95)) & ~0x3f) == 0 and ((1 << (_la - 95)) & ((1 << (SolidityParser.T__94 - 95)) | (1 << (SolidityParser.Int - 95)) | (1 << (SolidityParser.Uint - 95)) | (1 << (SolidityParser.Byte - 95)) | (1 << (SolidityParser.Fixed - 95)) | (1 << (SolidityParser.Ufixed - 95)) | (1 << (SolidityParser.LeaveKeyword - 95)) | (1 << (SolidityParser.PayableKeyword - 95)) | (1 << (SolidityParser.GlobalKeyword - 95)) | (1 << (SolidityParser.ConstructorKeyword - 95)) | (1 << (SolidityParser.ReceiveKeyword - 95)) | (1 << (SolidityParser.Identifier - 95)))) != 0): + self.state = 417 self.variableDeclaration() - self.state = 384 + self.state = 418 self.match(SolidityParser.T__1) - self.state = 390 + self.state = 424 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 393 + self.state = 427 self.match(SolidityParser.T__16) except RecognitionException as re: localctx.exception = re @@ -2550,7 +2780,6 @@ def structDefinition(self): class ModifierDefinitionContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -2604,53 +2833,53 @@ def accept(self, visitor:ParseTreeVisitor): def modifierDefinition(self): localctx = SolidityParser.ModifierDefinitionContext(self, self._ctx, self.state) - self.enterRule(localctx, 38, self.RULE_modifierDefinition) + self.enterRule(localctx, 44, self.RULE_modifierDefinition) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 395 - self.match(SolidityParser.T__28) - self.state = 396 + self.state = 429 + self.match(SolidityParser.T__36) + self.state = 430 self.identifier() - self.state = 398 + self.state = 432 self._errHandler.sync(self) _la = self._input.LA(1) if _la==SolidityParser.T__22: - self.state = 397 + self.state = 431 self.parameterList() - self.state = 404 + self.state = 438 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==SolidityParser.T__96 or _la==SolidityParser.VirtualKeyword: - self.state = 402 + while _la==SolidityParser.T__95 or _la==SolidityParser.VirtualKeyword: + self.state = 436 self._errHandler.sync(self) token = self._input.LA(1) if token in [SolidityParser.VirtualKeyword]: - self.state = 400 + self.state = 434 self.match(SolidityParser.VirtualKeyword) pass - elif token in [SolidityParser.T__96]: - self.state = 401 + elif token in [SolidityParser.T__95]: + self.state = 435 self.overrideSpecifier() pass else: raise NoViableAltException(self) - self.state = 406 + self.state = 440 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 409 + self.state = 443 self._errHandler.sync(self) token = self._input.LA(1) if token in [SolidityParser.T__1]: - self.state = 407 + self.state = 441 self.match(SolidityParser.T__1) pass elif token in [SolidityParser.T__14]: - self.state = 408 + self.state = 442 self.block() pass else: @@ -2666,7 +2895,6 @@ def modifierDefinition(self): class ModifierInvocationContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -2703,27 +2931,27 @@ def accept(self, visitor:ParseTreeVisitor): def modifierInvocation(self): localctx = SolidityParser.ModifierInvocationContext(self, self._ctx, self.state) - self.enterRule(localctx, 40, self.RULE_modifierInvocation) + self.enterRule(localctx, 46, self.RULE_modifierInvocation) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 411 + self.state = 445 self.identifier() - self.state = 417 + self.state = 451 self._errHandler.sync(self) _la = self._input.LA(1) if _la==SolidityParser.T__22: - self.state = 412 + self.state = 446 self.match(SolidityParser.T__22) - self.state = 414 + self.state = 448 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 5)) & ~0x3f) == 0 and ((1 << (_la - 5)) & ((1 << (SolidityParser.T__4 - 5)) | (1 << (SolidityParser.T__13 - 5)) | (1 << (SolidityParser.T__22 - 5)) | (1 << (SolidityParser.T__24 - 5)) | (1 << (SolidityParser.T__33 - 5)) | (1 << (SolidityParser.T__35 - 5)) | (1 << (SolidityParser.T__41 - 5)) | (1 << (SolidityParser.T__53 - 5)) | (1 << (SolidityParser.T__54 - 5)) | (1 << (SolidityParser.T__55 - 5)) | (1 << (SolidityParser.T__56 - 5)) | (1 << (SolidityParser.T__57 - 5)) | (1 << (SolidityParser.T__58 - 5)) | (1 << (SolidityParser.T__59 - 5)) | (1 << (SolidityParser.T__60 - 5)) | (1 << (SolidityParser.T__62 - 5)) | (1 << (SolidityParser.T__63 - 5)) | (1 << (SolidityParser.T__64 - 5)) | (1 << (SolidityParser.T__65 - 5)) | (1 << (SolidityParser.T__66 - 5)))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.Int - 96)) | (1 << (SolidityParser.Uint - 96)) | (1 << (SolidityParser.Byte - 96)) | (1 << (SolidityParser.Fixed - 96)) | (1 << (SolidityParser.Ufixed - 96)) | (1 << (SolidityParser.BooleanLiteral - 96)) | (1 << (SolidityParser.DecimalNumber - 96)) | (1 << (SolidityParser.HexNumber - 96)) | (1 << (SolidityParser.HexLiteralFragment - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.TypeKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)) | (1 << (SolidityParser.StringLiteralFragment - 96)))) != 0): - self.state = 413 + if ((((_la - 6)) & ~0x3f) == 0 and ((1 << (_la - 6)) & ((1 << (SolidityParser.T__5 - 6)) | (1 << (SolidityParser.T__13 - 6)) | (1 << (SolidityParser.T__22 - 6)) | (1 << (SolidityParser.T__24 - 6)) | (1 << (SolidityParser.T__29 - 6)) | (1 << (SolidityParser.T__30 - 6)) | (1 << (SolidityParser.T__37 - 6)) | (1 << (SolidityParser.T__41 - 6)) | (1 << (SolidityParser.T__43 - 6)) | (1 << (SolidityParser.T__45 - 6)) | (1 << (SolidityParser.T__49 - 6)) | (1 << (SolidityParser.T__61 - 6)) | (1 << (SolidityParser.T__62 - 6)) | (1 << (SolidityParser.T__63 - 6)) | (1 << (SolidityParser.T__64 - 6)) | (1 << (SolidityParser.T__65 - 6)) | (1 << (SolidityParser.T__66 - 6)) | (1 << (SolidityParser.T__67 - 6)) | (1 << (SolidityParser.T__68 - 6)))) != 0) or ((((_la - 71)) & ~0x3f) == 0 and ((1 << (_la - 71)) & ((1 << (SolidityParser.T__70 - 71)) | (1 << (SolidityParser.T__71 - 71)) | (1 << (SolidityParser.T__94 - 71)) | (1 << (SolidityParser.Int - 71)) | (1 << (SolidityParser.Uint - 71)) | (1 << (SolidityParser.Byte - 71)) | (1 << (SolidityParser.Fixed - 71)) | (1 << (SolidityParser.Ufixed - 71)) | (1 << (SolidityParser.BooleanLiteral - 71)) | (1 << (SolidityParser.DecimalNumber - 71)) | (1 << (SolidityParser.HexNumber - 71)) | (1 << (SolidityParser.HexLiteralFragment - 71)) | (1 << (SolidityParser.LeaveKeyword - 71)) | (1 << (SolidityParser.PayableKeyword - 71)) | (1 << (SolidityParser.TypeKeyword - 71)) | (1 << (SolidityParser.GlobalKeyword - 71)) | (1 << (SolidityParser.ConstructorKeyword - 71)) | (1 << (SolidityParser.ReceiveKeyword - 71)) | (1 << (SolidityParser.Identifier - 71)) | (1 << (SolidityParser.StringLiteralFragment - 71)))) != 0): + self.state = 447 self.expressionList() - self.state = 416 + self.state = 450 self.match(SolidityParser.T__23) @@ -2737,7 +2965,6 @@ def modifierInvocation(self): class FunctionDefinitionContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -2786,33 +3013,33 @@ def accept(self, visitor:ParseTreeVisitor): def functionDefinition(self): localctx = SolidityParser.FunctionDefinitionContext(self, self._ctx, self.state) - self.enterRule(localctx, 42, self.RULE_functionDefinition) + self.enterRule(localctx, 48, self.RULE_functionDefinition) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 419 + self.state = 453 self.functionDescriptor() - self.state = 420 + self.state = 454 self.parameterList() - self.state = 421 + self.state = 455 self.modifierList() - self.state = 423 + self.state = 457 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==SolidityParser.T__30: - self.state = 422 + if _la==SolidityParser.T__38: + self.state = 456 self.returnParameters() - self.state = 427 + self.state = 461 self._errHandler.sync(self) token = self._input.LA(1) if token in [SolidityParser.T__1]: - self.state = 425 + self.state = 459 self.match(SolidityParser.T__1) pass elif token in [SolidityParser.T__14]: - self.state = 426 + self.state = 460 self.block() pass else: @@ -2828,7 +3055,6 @@ def functionDefinition(self): class FunctionDescriptorContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -2870,38 +3096,38 @@ def accept(self, visitor:ParseTreeVisitor): def functionDescriptor(self): localctx = SolidityParser.FunctionDescriptorContext(self, self._ctx, self.state) - self.enterRule(localctx, 44, self.RULE_functionDescriptor) + self.enterRule(localctx, 50, self.RULE_functionDescriptor) self._la = 0 # Token type try: - self.state = 436 + self.state = 470 self._errHandler.sync(self) token = self._input.LA(1) - if token in [SolidityParser.T__29]: + if token in [SolidityParser.T__37]: self.enterOuterAlt(localctx, 1) - self.state = 429 - self.match(SolidityParser.T__29) - self.state = 431 + self.state = 463 + self.match(SolidityParser.T__37) + self.state = 465 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__41) | (1 << SolidityParser.T__53))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)))) != 0): - self.state = 430 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__43) | (1 << SolidityParser.T__49) | (1 << SolidityParser.T__61))) != 0) or ((((_la - 95)) & ~0x3f) == 0 and ((1 << (_la - 95)) & ((1 << (SolidityParser.T__94 - 95)) | (1 << (SolidityParser.LeaveKeyword - 95)) | (1 << (SolidityParser.PayableKeyword - 95)) | (1 << (SolidityParser.GlobalKeyword - 95)) | (1 << (SolidityParser.ConstructorKeyword - 95)) | (1 << (SolidityParser.ReceiveKeyword - 95)) | (1 << (SolidityParser.Identifier - 95)))) != 0): + self.state = 464 self.identifier() pass elif token in [SolidityParser.ConstructorKeyword]: self.enterOuterAlt(localctx, 2) - self.state = 433 + self.state = 467 self.match(SolidityParser.ConstructorKeyword) pass elif token in [SolidityParser.FallbackKeyword]: self.enterOuterAlt(localctx, 3) - self.state = 434 + self.state = 468 self.match(SolidityParser.FallbackKeyword) pass elif token in [SolidityParser.ReceiveKeyword]: self.enterOuterAlt(localctx, 4) - self.state = 435 + self.state = 469 self.match(SolidityParser.ReceiveKeyword) pass else: @@ -2917,7 +3143,6 @@ def functionDescriptor(self): class ReturnParametersContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -2950,12 +3175,12 @@ def accept(self, visitor:ParseTreeVisitor): def returnParameters(self): localctx = SolidityParser.ReturnParametersContext(self, self._ctx, self.state) - self.enterRule(localctx, 46, self.RULE_returnParameters) + self.enterRule(localctx, 52, self.RULE_returnParameters) try: self.enterOuterAlt(localctx, 1) - self.state = 438 - self.match(SolidityParser.T__30) - self.state = 439 + self.state = 472 + self.match(SolidityParser.T__38) + self.state = 473 self.parameterList() except RecognitionException as re: localctx.exception = re @@ -2967,7 +3192,6 @@ def returnParameters(self): class ModifierListContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -3047,59 +3271,59 @@ def accept(self, visitor:ParseTreeVisitor): def modifierList(self): localctx = SolidityParser.ModifierListContext(self, self._ctx, self.state) - self.enterRule(localctx, 48, self.RULE_modifierList) + self.enterRule(localctx, 54, self.RULE_modifierList) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 451 + self.state = 485 self._errHandler.sync(self) _la = self._input.LA(1) - while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__41) | (1 << SolidityParser.T__53))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.T__96 - 96)) | (1 << (SolidityParser.ConstantKeyword - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.ExternalKeyword - 96)) | (1 << (SolidityParser.InternalKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.PrivateKeyword - 96)) | (1 << (SolidityParser.PublicKeyword - 96)) | (1 << (SolidityParser.VirtualKeyword - 96)) | (1 << (SolidityParser.PureKeyword - 96)) | (1 << (SolidityParser.ViewKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)))) != 0): - self.state = 449 + while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__43) | (1 << SolidityParser.T__49) | (1 << SolidityParser.T__61))) != 0) or ((((_la - 95)) & ~0x3f) == 0 and ((1 << (_la - 95)) & ((1 << (SolidityParser.T__94 - 95)) | (1 << (SolidityParser.T__95 - 95)) | (1 << (SolidityParser.ConstantKeyword - 95)) | (1 << (SolidityParser.LeaveKeyword - 95)) | (1 << (SolidityParser.ExternalKeyword - 95)) | (1 << (SolidityParser.InternalKeyword - 95)) | (1 << (SolidityParser.PayableKeyword - 95)) | (1 << (SolidityParser.PrivateKeyword - 95)) | (1 << (SolidityParser.PublicKeyword - 95)) | (1 << (SolidityParser.VirtualKeyword - 95)) | (1 << (SolidityParser.PureKeyword - 95)) | (1 << (SolidityParser.ViewKeyword - 95)) | (1 << (SolidityParser.GlobalKeyword - 95)) | (1 << (SolidityParser.ConstructorKeyword - 95)) | (1 << (SolidityParser.ReceiveKeyword - 95)) | (1 << (SolidityParser.Identifier - 95)))) != 0): + self.state = 483 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,37,self._ctx) + la_ = self._interp.adaptivePredict(self._input,41,self._ctx) if la_ == 1: - self.state = 441 + self.state = 475 self.match(SolidityParser.ExternalKeyword) pass elif la_ == 2: - self.state = 442 + self.state = 476 self.match(SolidityParser.PublicKeyword) pass elif la_ == 3: - self.state = 443 + self.state = 477 self.match(SolidityParser.InternalKeyword) pass elif la_ == 4: - self.state = 444 + self.state = 478 self.match(SolidityParser.PrivateKeyword) pass elif la_ == 5: - self.state = 445 + self.state = 479 self.match(SolidityParser.VirtualKeyword) pass elif la_ == 6: - self.state = 446 + self.state = 480 self.stateMutability() pass elif la_ == 7: - self.state = 447 + self.state = 481 self.modifierInvocation() pass elif la_ == 8: - self.state = 448 + self.state = 482 self.overrideSpecifier() pass - self.state = 453 + self.state = 487 self._errHandler.sync(self) _la = self._input.LA(1) @@ -3113,7 +3337,6 @@ def modifierList(self): class EventDefinitionContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -3153,25 +3376,25 @@ def accept(self, visitor:ParseTreeVisitor): def eventDefinition(self): localctx = SolidityParser.EventDefinitionContext(self, self._ctx, self.state) - self.enterRule(localctx, 50, self.RULE_eventDefinition) + self.enterRule(localctx, 56, self.RULE_eventDefinition) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 454 - self.match(SolidityParser.T__31) - self.state = 455 + self.state = 488 + self.match(SolidityParser.T__39) + self.state = 489 self.identifier() - self.state = 456 + self.state = 490 self.eventParameterList() - self.state = 458 + self.state = 492 self._errHandler.sync(self) _la = self._input.LA(1) if _la==SolidityParser.AnonymousKeyword: - self.state = 457 + self.state = 491 self.match(SolidityParser.AnonymousKeyword) - self.state = 460 + self.state = 494 self.match(SolidityParser.T__1) except RecognitionException as re: localctx.exception = re @@ -3183,7 +3406,6 @@ def eventDefinition(self): class EnumValueContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -3216,10 +3438,10 @@ def accept(self, visitor:ParseTreeVisitor): def enumValue(self): localctx = SolidityParser.EnumValueContext(self, self._ctx, self.state) - self.enterRule(localctx, 52, self.RULE_enumValue) + self.enterRule(localctx, 58, self.RULE_enumValue) try: self.enterOuterAlt(localctx, 1) - self.state = 462 + self.state = 496 self.identifier() except RecognitionException as re: localctx.exception = re @@ -3231,7 +3453,6 @@ def enumValue(self): class EnumDefinitionContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -3271,37 +3492,37 @@ def accept(self, visitor:ParseTreeVisitor): def enumDefinition(self): localctx = SolidityParser.EnumDefinitionContext(self, self._ctx, self.state) - self.enterRule(localctx, 54, self.RULE_enumDefinition) + self.enterRule(localctx, 60, self.RULE_enumDefinition) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 464 - self.match(SolidityParser.T__32) - self.state = 465 + self.state = 498 + self.match(SolidityParser.T__40) + self.state = 499 self.identifier() - self.state = 466 + self.state = 500 self.match(SolidityParser.T__14) - self.state = 468 + self.state = 502 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__41) | (1 << SolidityParser.T__53))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)))) != 0): - self.state = 467 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__43) | (1 << SolidityParser.T__49) | (1 << SolidityParser.T__61))) != 0) or ((((_la - 95)) & ~0x3f) == 0 and ((1 << (_la - 95)) & ((1 << (SolidityParser.T__94 - 95)) | (1 << (SolidityParser.LeaveKeyword - 95)) | (1 << (SolidityParser.PayableKeyword - 95)) | (1 << (SolidityParser.GlobalKeyword - 95)) | (1 << (SolidityParser.ConstructorKeyword - 95)) | (1 << (SolidityParser.ReceiveKeyword - 95)) | (1 << (SolidityParser.Identifier - 95)))) != 0): + self.state = 501 self.enumValue() - self.state = 474 + self.state = 508 self._errHandler.sync(self) _la = self._input.LA(1) while _la==SolidityParser.T__15: - self.state = 470 + self.state = 504 self.match(SolidityParser.T__15) - self.state = 471 + self.state = 505 self.enumValue() - self.state = 476 + self.state = 510 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 477 + self.state = 511 self.match(SolidityParser.T__16) except RecognitionException as re: localctx.exception = re @@ -3313,7 +3534,6 @@ def enumDefinition(self): class ParameterListContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -3349,33 +3569,33 @@ def accept(self, visitor:ParseTreeVisitor): def parameterList(self): localctx = SolidityParser.ParameterListContext(self, self._ctx, self.state) - self.enterRule(localctx, 56, self.RULE_parameterList) + self.enterRule(localctx, 62, self.RULE_parameterList) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 479 + self.state = 513 self.match(SolidityParser.T__22) - self.state = 488 + self.state = 522 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__29) | (1 << SolidityParser.T__35) | (1 << SolidityParser.T__37) | (1 << SolidityParser.T__41) | (1 << SolidityParser.T__53) | (1 << SolidityParser.T__54) | (1 << SolidityParser.T__55) | (1 << SolidityParser.T__56) | (1 << SolidityParser.T__57))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.Int - 96)) | (1 << (SolidityParser.Uint - 96)) | (1 << (SolidityParser.Byte - 96)) | (1 << (SolidityParser.Fixed - 96)) | (1 << (SolidityParser.Ufixed - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)))) != 0): - self.state = 480 + if ((((_la - 14)) & ~0x3f) == 0 and ((1 << (_la - 14)) & ((1 << (SolidityParser.T__13 - 14)) | (1 << (SolidityParser.T__24 - 14)) | (1 << (SolidityParser.T__37 - 14)) | (1 << (SolidityParser.T__43 - 14)) | (1 << (SolidityParser.T__45 - 14)) | (1 << (SolidityParser.T__49 - 14)) | (1 << (SolidityParser.T__61 - 14)) | (1 << (SolidityParser.T__62 - 14)) | (1 << (SolidityParser.T__63 - 14)) | (1 << (SolidityParser.T__64 - 14)) | (1 << (SolidityParser.T__65 - 14)))) != 0) or ((((_la - 95)) & ~0x3f) == 0 and ((1 << (_la - 95)) & ((1 << (SolidityParser.T__94 - 95)) | (1 << (SolidityParser.Int - 95)) | (1 << (SolidityParser.Uint - 95)) | (1 << (SolidityParser.Byte - 95)) | (1 << (SolidityParser.Fixed - 95)) | (1 << (SolidityParser.Ufixed - 95)) | (1 << (SolidityParser.LeaveKeyword - 95)) | (1 << (SolidityParser.PayableKeyword - 95)) | (1 << (SolidityParser.GlobalKeyword - 95)) | (1 << (SolidityParser.ConstructorKeyword - 95)) | (1 << (SolidityParser.ReceiveKeyword - 95)) | (1 << (SolidityParser.Identifier - 95)))) != 0): + self.state = 514 self.parameter() - self.state = 485 + self.state = 519 self._errHandler.sync(self) _la = self._input.LA(1) while _la==SolidityParser.T__15: - self.state = 481 + self.state = 515 self.match(SolidityParser.T__15) - self.state = 482 + self.state = 516 self.parameter() - self.state = 487 + self.state = 521 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 490 + self.state = 524 self.match(SolidityParser.T__23) except RecognitionException as re: localctx.exception = re @@ -3387,7 +3607,6 @@ def parameterList(self): class ParameterContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -3428,25 +3647,25 @@ def accept(self, visitor:ParseTreeVisitor): def parameter(self): localctx = SolidityParser.ParameterContext(self, self._ctx, self.state) - self.enterRule(localctx, 58, self.RULE_parameter) + self.enterRule(localctx, 64, self.RULE_parameter) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 492 + self.state = 526 self.typeName(0) - self.state = 494 + self.state = 528 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,44,self._ctx) + la_ = self._interp.adaptivePredict(self._input,48,self._ctx) if la_ == 1: - self.state = 493 + self.state = 527 self.storageLocation() - self.state = 497 + self.state = 531 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__41) | (1 << SolidityParser.T__53))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)))) != 0): - self.state = 496 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__43) | (1 << SolidityParser.T__49) | (1 << SolidityParser.T__61))) != 0) or ((((_la - 95)) & ~0x3f) == 0 and ((1 << (_la - 95)) & ((1 << (SolidityParser.T__94 - 95)) | (1 << (SolidityParser.LeaveKeyword - 95)) | (1 << (SolidityParser.PayableKeyword - 95)) | (1 << (SolidityParser.GlobalKeyword - 95)) | (1 << (SolidityParser.ConstructorKeyword - 95)) | (1 << (SolidityParser.ReceiveKeyword - 95)) | (1 << (SolidityParser.Identifier - 95)))) != 0): + self.state = 530 self.identifier() @@ -3460,7 +3679,6 @@ def parameter(self): class EventParameterListContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -3496,33 +3714,33 @@ def accept(self, visitor:ParseTreeVisitor): def eventParameterList(self): localctx = SolidityParser.EventParameterListContext(self, self._ctx, self.state) - self.enterRule(localctx, 60, self.RULE_eventParameterList) + self.enterRule(localctx, 66, self.RULE_eventParameterList) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 499 + self.state = 533 self.match(SolidityParser.T__22) - self.state = 508 + self.state = 542 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__29) | (1 << SolidityParser.T__35) | (1 << SolidityParser.T__37) | (1 << SolidityParser.T__41) | (1 << SolidityParser.T__53) | (1 << SolidityParser.T__54) | (1 << SolidityParser.T__55) | (1 << SolidityParser.T__56) | (1 << SolidityParser.T__57))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.Int - 96)) | (1 << (SolidityParser.Uint - 96)) | (1 << (SolidityParser.Byte - 96)) | (1 << (SolidityParser.Fixed - 96)) | (1 << (SolidityParser.Ufixed - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)))) != 0): - self.state = 500 + if ((((_la - 14)) & ~0x3f) == 0 and ((1 << (_la - 14)) & ((1 << (SolidityParser.T__13 - 14)) | (1 << (SolidityParser.T__24 - 14)) | (1 << (SolidityParser.T__37 - 14)) | (1 << (SolidityParser.T__43 - 14)) | (1 << (SolidityParser.T__45 - 14)) | (1 << (SolidityParser.T__49 - 14)) | (1 << (SolidityParser.T__61 - 14)) | (1 << (SolidityParser.T__62 - 14)) | (1 << (SolidityParser.T__63 - 14)) | (1 << (SolidityParser.T__64 - 14)) | (1 << (SolidityParser.T__65 - 14)))) != 0) or ((((_la - 95)) & ~0x3f) == 0 and ((1 << (_la - 95)) & ((1 << (SolidityParser.T__94 - 95)) | (1 << (SolidityParser.Int - 95)) | (1 << (SolidityParser.Uint - 95)) | (1 << (SolidityParser.Byte - 95)) | (1 << (SolidityParser.Fixed - 95)) | (1 << (SolidityParser.Ufixed - 95)) | (1 << (SolidityParser.LeaveKeyword - 95)) | (1 << (SolidityParser.PayableKeyword - 95)) | (1 << (SolidityParser.GlobalKeyword - 95)) | (1 << (SolidityParser.ConstructorKeyword - 95)) | (1 << (SolidityParser.ReceiveKeyword - 95)) | (1 << (SolidityParser.Identifier - 95)))) != 0): + self.state = 534 self.eventParameter() - self.state = 505 + self.state = 539 self._errHandler.sync(self) _la = self._input.LA(1) while _la==SolidityParser.T__15: - self.state = 501 + self.state = 535 self.match(SolidityParser.T__15) - self.state = 502 + self.state = 536 self.eventParameter() - self.state = 507 + self.state = 541 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 510 + self.state = 544 self.match(SolidityParser.T__23) except RecognitionException as re: localctx.exception = re @@ -3534,7 +3752,6 @@ def eventParameterList(self): class EventParameterContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -3574,25 +3791,25 @@ def accept(self, visitor:ParseTreeVisitor): def eventParameter(self): localctx = SolidityParser.EventParameterContext(self, self._ctx, self.state) - self.enterRule(localctx, 62, self.RULE_eventParameter) + self.enterRule(localctx, 68, self.RULE_eventParameter) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 512 + self.state = 546 self.typeName(0) - self.state = 514 + self.state = 548 self._errHandler.sync(self) _la = self._input.LA(1) if _la==SolidityParser.IndexedKeyword: - self.state = 513 + self.state = 547 self.match(SolidityParser.IndexedKeyword) - self.state = 517 + self.state = 551 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__41) | (1 << SolidityParser.T__53))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)))) != 0): - self.state = 516 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__43) | (1 << SolidityParser.T__49) | (1 << SolidityParser.T__61))) != 0) or ((((_la - 95)) & ~0x3f) == 0 and ((1 << (_la - 95)) & ((1 << (SolidityParser.T__94 - 95)) | (1 << (SolidityParser.LeaveKeyword - 95)) | (1 << (SolidityParser.PayableKeyword - 95)) | (1 << (SolidityParser.GlobalKeyword - 95)) | (1 << (SolidityParser.ConstructorKeyword - 95)) | (1 << (SolidityParser.ReceiveKeyword - 95)) | (1 << (SolidityParser.Identifier - 95)))) != 0): + self.state = 550 self.identifier() @@ -3606,7 +3823,6 @@ def eventParameter(self): class FunctionTypeParameterListContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -3642,33 +3858,33 @@ def accept(self, visitor:ParseTreeVisitor): def functionTypeParameterList(self): localctx = SolidityParser.FunctionTypeParameterListContext(self, self._ctx, self.state) - self.enterRule(localctx, 64, self.RULE_functionTypeParameterList) + self.enterRule(localctx, 70, self.RULE_functionTypeParameterList) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 519 + self.state = 553 self.match(SolidityParser.T__22) - self.state = 528 + self.state = 562 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__29) | (1 << SolidityParser.T__35) | (1 << SolidityParser.T__37) | (1 << SolidityParser.T__41) | (1 << SolidityParser.T__53) | (1 << SolidityParser.T__54) | (1 << SolidityParser.T__55) | (1 << SolidityParser.T__56) | (1 << SolidityParser.T__57))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.Int - 96)) | (1 << (SolidityParser.Uint - 96)) | (1 << (SolidityParser.Byte - 96)) | (1 << (SolidityParser.Fixed - 96)) | (1 << (SolidityParser.Ufixed - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)))) != 0): - self.state = 520 + if ((((_la - 14)) & ~0x3f) == 0 and ((1 << (_la - 14)) & ((1 << (SolidityParser.T__13 - 14)) | (1 << (SolidityParser.T__24 - 14)) | (1 << (SolidityParser.T__37 - 14)) | (1 << (SolidityParser.T__43 - 14)) | (1 << (SolidityParser.T__45 - 14)) | (1 << (SolidityParser.T__49 - 14)) | (1 << (SolidityParser.T__61 - 14)) | (1 << (SolidityParser.T__62 - 14)) | (1 << (SolidityParser.T__63 - 14)) | (1 << (SolidityParser.T__64 - 14)) | (1 << (SolidityParser.T__65 - 14)))) != 0) or ((((_la - 95)) & ~0x3f) == 0 and ((1 << (_la - 95)) & ((1 << (SolidityParser.T__94 - 95)) | (1 << (SolidityParser.Int - 95)) | (1 << (SolidityParser.Uint - 95)) | (1 << (SolidityParser.Byte - 95)) | (1 << (SolidityParser.Fixed - 95)) | (1 << (SolidityParser.Ufixed - 95)) | (1 << (SolidityParser.LeaveKeyword - 95)) | (1 << (SolidityParser.PayableKeyword - 95)) | (1 << (SolidityParser.GlobalKeyword - 95)) | (1 << (SolidityParser.ConstructorKeyword - 95)) | (1 << (SolidityParser.ReceiveKeyword - 95)) | (1 << (SolidityParser.Identifier - 95)))) != 0): + self.state = 554 self.functionTypeParameter() - self.state = 525 + self.state = 559 self._errHandler.sync(self) _la = self._input.LA(1) while _la==SolidityParser.T__15: - self.state = 521 + self.state = 555 self.match(SolidityParser.T__15) - self.state = 522 + self.state = 556 self.functionTypeParameter() - self.state = 527 + self.state = 561 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 530 + self.state = 564 self.match(SolidityParser.T__23) except RecognitionException as re: localctx.exception = re @@ -3680,7 +3896,6 @@ def functionTypeParameterList(self): class FunctionTypeParameterContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -3717,17 +3932,17 @@ def accept(self, visitor:ParseTreeVisitor): def functionTypeParameter(self): localctx = SolidityParser.FunctionTypeParameterContext(self, self._ctx, self.state) - self.enterRule(localctx, 66, self.RULE_functionTypeParameter) + self.enterRule(localctx, 72, self.RULE_functionTypeParameter) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 532 + self.state = 566 self.typeName(0) - self.state = 534 + self.state = 568 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__39) | (1 << SolidityParser.T__40) | (1 << SolidityParser.T__41))) != 0): - self.state = 533 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__47) | (1 << SolidityParser.T__48) | (1 << SolidityParser.T__49))) != 0): + self.state = 567 self.storageLocation() @@ -3741,7 +3956,6 @@ def functionTypeParameter(self): class VariableDeclarationContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -3782,20 +3996,20 @@ def accept(self, visitor:ParseTreeVisitor): def variableDeclaration(self): localctx = SolidityParser.VariableDeclarationContext(self, self._ctx, self.state) - self.enterRule(localctx, 68, self.RULE_variableDeclaration) + self.enterRule(localctx, 74, self.RULE_variableDeclaration) try: self.enterOuterAlt(localctx, 1) - self.state = 536 + self.state = 570 self.typeName(0) - self.state = 538 + self.state = 572 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,53,self._ctx) + la_ = self._interp.adaptivePredict(self._input,57,self._ctx) if la_ == 1: - self.state = 537 + self.state = 571 self.storageLocation() - self.state = 540 + self.state = 574 self.identifier() except RecognitionException as re: localctx.exception = re @@ -3807,7 +4021,6 @@ def variableDeclaration(self): class TypeNameContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -3864,46 +4077,46 @@ def typeName(self, _p:int=0): _parentState = self.state localctx = SolidityParser.TypeNameContext(self, self._ctx, _parentState) _prevctx = localctx - _startState = 70 - self.enterRecursionRule(localctx, 70, self.RULE_typeName, _p) + _startState = 76 + self.enterRecursionRule(localctx, 76, self.RULE_typeName, _p) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 549 + self.state = 583 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,54,self._ctx) + la_ = self._interp.adaptivePredict(self._input,58,self._ctx) if la_ == 1: - self.state = 543 + self.state = 577 self.elementaryTypeName() pass elif la_ == 2: - self.state = 544 + self.state = 578 self.userDefinedTypeName() pass elif la_ == 3: - self.state = 545 + self.state = 579 self.mapping() pass elif la_ == 4: - self.state = 546 + self.state = 580 self.functionTypeName() pass elif la_ == 5: - self.state = 547 - self.match(SolidityParser.T__35) - self.state = 548 + self.state = 581 + self.match(SolidityParser.T__43) + self.state = 582 self.match(SolidityParser.PayableKeyword) pass self._ctx.stop = self._input.LT(-1) - self.state = 559 + self.state = 593 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,56,self._ctx) + _alt = self._interp.adaptivePredict(self._input,60,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: if self._parseListeners is not None: @@ -3911,25 +4124,25 @@ def typeName(self, _p:int=0): _prevctx = localctx localctx = SolidityParser.TypeNameContext(self, _parentctx, _parentState) self.pushNewRecursionContext(localctx, _startState, self.RULE_typeName) - self.state = 551 + self.state = 585 if not self.precpred(self._ctx, 3): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") - self.state = 552 - self.match(SolidityParser.T__33) - self.state = 554 + self.state = 586 + self.match(SolidityParser.T__41) + self.state = 588 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 5)) & ~0x3f) == 0 and ((1 << (_la - 5)) & ((1 << (SolidityParser.T__4 - 5)) | (1 << (SolidityParser.T__13 - 5)) | (1 << (SolidityParser.T__22 - 5)) | (1 << (SolidityParser.T__24 - 5)) | (1 << (SolidityParser.T__33 - 5)) | (1 << (SolidityParser.T__35 - 5)) | (1 << (SolidityParser.T__41 - 5)) | (1 << (SolidityParser.T__53 - 5)) | (1 << (SolidityParser.T__54 - 5)) | (1 << (SolidityParser.T__55 - 5)) | (1 << (SolidityParser.T__56 - 5)) | (1 << (SolidityParser.T__57 - 5)) | (1 << (SolidityParser.T__58 - 5)) | (1 << (SolidityParser.T__59 - 5)) | (1 << (SolidityParser.T__60 - 5)) | (1 << (SolidityParser.T__62 - 5)) | (1 << (SolidityParser.T__63 - 5)) | (1 << (SolidityParser.T__64 - 5)) | (1 << (SolidityParser.T__65 - 5)) | (1 << (SolidityParser.T__66 - 5)))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.Int - 96)) | (1 << (SolidityParser.Uint - 96)) | (1 << (SolidityParser.Byte - 96)) | (1 << (SolidityParser.Fixed - 96)) | (1 << (SolidityParser.Ufixed - 96)) | (1 << (SolidityParser.BooleanLiteral - 96)) | (1 << (SolidityParser.DecimalNumber - 96)) | (1 << (SolidityParser.HexNumber - 96)) | (1 << (SolidityParser.HexLiteralFragment - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.TypeKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)) | (1 << (SolidityParser.StringLiteralFragment - 96)))) != 0): - self.state = 553 + if ((((_la - 6)) & ~0x3f) == 0 and ((1 << (_la - 6)) & ((1 << (SolidityParser.T__5 - 6)) | (1 << (SolidityParser.T__13 - 6)) | (1 << (SolidityParser.T__22 - 6)) | (1 << (SolidityParser.T__24 - 6)) | (1 << (SolidityParser.T__29 - 6)) | (1 << (SolidityParser.T__30 - 6)) | (1 << (SolidityParser.T__37 - 6)) | (1 << (SolidityParser.T__41 - 6)) | (1 << (SolidityParser.T__43 - 6)) | (1 << (SolidityParser.T__45 - 6)) | (1 << (SolidityParser.T__49 - 6)) | (1 << (SolidityParser.T__61 - 6)) | (1 << (SolidityParser.T__62 - 6)) | (1 << (SolidityParser.T__63 - 6)) | (1 << (SolidityParser.T__64 - 6)) | (1 << (SolidityParser.T__65 - 6)) | (1 << (SolidityParser.T__66 - 6)) | (1 << (SolidityParser.T__67 - 6)) | (1 << (SolidityParser.T__68 - 6)))) != 0) or ((((_la - 71)) & ~0x3f) == 0 and ((1 << (_la - 71)) & ((1 << (SolidityParser.T__70 - 71)) | (1 << (SolidityParser.T__71 - 71)) | (1 << (SolidityParser.T__94 - 71)) | (1 << (SolidityParser.Int - 71)) | (1 << (SolidityParser.Uint - 71)) | (1 << (SolidityParser.Byte - 71)) | (1 << (SolidityParser.Fixed - 71)) | (1 << (SolidityParser.Ufixed - 71)) | (1 << (SolidityParser.BooleanLiteral - 71)) | (1 << (SolidityParser.DecimalNumber - 71)) | (1 << (SolidityParser.HexNumber - 71)) | (1 << (SolidityParser.HexLiteralFragment - 71)) | (1 << (SolidityParser.LeaveKeyword - 71)) | (1 << (SolidityParser.PayableKeyword - 71)) | (1 << (SolidityParser.TypeKeyword - 71)) | (1 << (SolidityParser.GlobalKeyword - 71)) | (1 << (SolidityParser.ConstructorKeyword - 71)) | (1 << (SolidityParser.ReceiveKeyword - 71)) | (1 << (SolidityParser.Identifier - 71)) | (1 << (SolidityParser.StringLiteralFragment - 71)))) != 0): + self.state = 587 self.expression(0) - self.state = 556 - self.match(SolidityParser.T__34) - self.state = 561 + self.state = 590 + self.match(SolidityParser.T__42) + self.state = 595 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,56,self._ctx) + _alt = self._interp.adaptivePredict(self._input,60,self._ctx) except RecognitionException as re: localctx.exception = re @@ -3941,7 +4154,6 @@ def typeName(self, _p:int=0): class UserDefinedTypeNameContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -3962,39 +4174,189 @@ def enterRule(self, listener:ParseTreeListener): listener.enterUserDefinedTypeName(self) def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitUserDefinedTypeName" ): - listener.exitUserDefinedTypeName(self) + if hasattr( listener, "exitUserDefinedTypeName" ): + listener.exitUserDefinedTypeName(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitUserDefinedTypeName" ): + return visitor.visitUserDefinedTypeName(self) + else: + return visitor.visitChildren(self) + + + + + def userDefinedTypeName(self): + + localctx = SolidityParser.UserDefinedTypeNameContext(self, self._ctx, self.state) + self.enterRule(localctx, 78, self.RULE_userDefinedTypeName) + try: + self.enterOuterAlt(localctx, 1) + self.state = 596 + self.identifier() + self.state = 601 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,61,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 597 + self.match(SolidityParser.T__44) + self.state = 598 + self.identifier() + self.state = 603 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,61,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class MappingKeyContext(ParserRuleContext): + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def elementaryTypeName(self): + return self.getTypedRuleContext(SolidityParser.ElementaryTypeNameContext,0) + + + def userDefinedTypeName(self): + return self.getTypedRuleContext(SolidityParser.UserDefinedTypeNameContext,0) + + + def getRuleIndex(self): + return SolidityParser.RULE_mappingKey + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterMappingKey" ): + listener.enterMappingKey(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitMappingKey" ): + listener.exitMappingKey(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitMappingKey" ): + return visitor.visitMappingKey(self) + else: + return visitor.visitChildren(self) + + + + + def mappingKey(self): + + localctx = SolidityParser.MappingKeyContext(self, self._ctx, self.state) + self.enterRule(localctx, 80, self.RULE_mappingKey) + try: + self.state = 606 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,62,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 604 + self.elementaryTypeName() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 605 + self.userDefinedTypeName() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class MappingContext(ParserRuleContext): + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def mappingKey(self): + return self.getTypedRuleContext(SolidityParser.MappingKeyContext,0) + + + def typeName(self): + return self.getTypedRuleContext(SolidityParser.TypeNameContext,0) + + + def mappingKeyName(self): + return self.getTypedRuleContext(SolidityParser.MappingKeyNameContext,0) + + + def mappingValueName(self): + return self.getTypedRuleContext(SolidityParser.MappingValueNameContext,0) + + + def getRuleIndex(self): + return SolidityParser.RULE_mapping + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterMapping" ): + listener.enterMapping(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitMapping" ): + listener.exitMapping(self) def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitUserDefinedTypeName" ): - return visitor.visitUserDefinedTypeName(self) + if hasattr( visitor, "visitMapping" ): + return visitor.visitMapping(self) else: return visitor.visitChildren(self) - def userDefinedTypeName(self): + def mapping(self): - localctx = SolidityParser.UserDefinedTypeNameContext(self, self._ctx, self.state) - self.enterRule(localctx, 72, self.RULE_userDefinedTypeName) + localctx = SolidityParser.MappingContext(self, self._ctx, self.state) + self.enterRule(localctx, 82, self.RULE_mapping) + self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 562 - self.identifier() - self.state = 567 + self.state = 608 + self.match(SolidityParser.T__45) + self.state = 609 + self.match(SolidityParser.T__22) + self.state = 610 + self.mappingKey() + self.state = 612 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,57,self._ctx) - while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: - if _alt==1: - self.state = 563 - self.match(SolidityParser.T__36) - self.state = 564 - self.identifier() - self.state = 569 - self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,57,self._ctx) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__43) | (1 << SolidityParser.T__49) | (1 << SolidityParser.T__61))) != 0) or ((((_la - 95)) & ~0x3f) == 0 and ((1 << (_la - 95)) & ((1 << (SolidityParser.T__94 - 95)) | (1 << (SolidityParser.LeaveKeyword - 95)) | (1 << (SolidityParser.PayableKeyword - 95)) | (1 << (SolidityParser.GlobalKeyword - 95)) | (1 << (SolidityParser.ConstructorKeyword - 95)) | (1 << (SolidityParser.ReceiveKeyword - 95)) | (1 << (SolidityParser.Identifier - 95)))) != 0): + self.state = 611 + self.mappingKeyName() + + + self.state = 614 + self.match(SolidityParser.T__46) + self.state = 615 + self.typeName(0) + self.state = 617 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__43) | (1 << SolidityParser.T__49) | (1 << SolidityParser.T__61))) != 0) or ((((_la - 95)) & ~0x3f) == 0 and ((1 << (_la - 95)) & ((1 << (SolidityParser.T__94 - 95)) | (1 << (SolidityParser.LeaveKeyword - 95)) | (1 << (SolidityParser.PayableKeyword - 95)) | (1 << (SolidityParser.GlobalKeyword - 95)) | (1 << (SolidityParser.ConstructorKeyword - 95)) | (1 << (SolidityParser.ReceiveKeyword - 95)) | (1 << (SolidityParser.Identifier - 95)))) != 0): + self.state = 616 + self.mappingValueName() + + self.state = 619 + self.match(SolidityParser.T__23) except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -4004,62 +4366,44 @@ def userDefinedTypeName(self): return localctx - class MappingKeyContext(ParserRuleContext): - __slots__ = 'parser' + class MappingKeyNameContext(ParserRuleContext): def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) self.parser = parser - def elementaryTypeName(self): - return self.getTypedRuleContext(SolidityParser.ElementaryTypeNameContext,0) - - - def userDefinedTypeName(self): - return self.getTypedRuleContext(SolidityParser.UserDefinedTypeNameContext,0) + def identifier(self): + return self.getTypedRuleContext(SolidityParser.IdentifierContext,0) def getRuleIndex(self): - return SolidityParser.RULE_mappingKey + return SolidityParser.RULE_mappingKeyName def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterMappingKey" ): - listener.enterMappingKey(self) + if hasattr( listener, "enterMappingKeyName" ): + listener.enterMappingKeyName(self) def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitMappingKey" ): - listener.exitMappingKey(self) + if hasattr( listener, "exitMappingKeyName" ): + listener.exitMappingKeyName(self) def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitMappingKey" ): - return visitor.visitMappingKey(self) + if hasattr( visitor, "visitMappingKeyName" ): + return visitor.visitMappingKeyName(self) else: return visitor.visitChildren(self) - def mappingKey(self): + def mappingKeyName(self): - localctx = SolidityParser.MappingKeyContext(self, self._ctx, self.state) - self.enterRule(localctx, 74, self.RULE_mappingKey) + localctx = SolidityParser.MappingKeyNameContext(self, self._ctx, self.state) + self.enterRule(localctx, 84, self.RULE_mappingKeyName) try: - self.state = 572 - self._errHandler.sync(self) - token = self._input.LA(1) - if token in [SolidityParser.T__35, SolidityParser.T__54, SolidityParser.T__55, SolidityParser.T__56, SolidityParser.T__57, SolidityParser.Int, SolidityParser.Uint, SolidityParser.Byte, SolidityParser.Fixed, SolidityParser.Ufixed]: - self.enterOuterAlt(localctx, 1) - self.state = 570 - self.elementaryTypeName() - pass - elif token in [SolidityParser.T__13, SolidityParser.T__24, SolidityParser.T__41, SolidityParser.T__53, SolidityParser.T__95, SolidityParser.LeaveKeyword, SolidityParser.PayableKeyword, SolidityParser.ConstructorKeyword, SolidityParser.ReceiveKeyword, SolidityParser.Identifier]: - self.enterOuterAlt(localctx, 2) - self.state = 571 - self.userDefinedTypeName() - pass - else: - raise NoViableAltException(self) - + self.enterOuterAlt(localctx, 1) + self.state = 621 + self.identifier() except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -4069,59 +4413,44 @@ def mappingKey(self): return localctx - class MappingContext(ParserRuleContext): - __slots__ = 'parser' + class MappingValueNameContext(ParserRuleContext): def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) self.parser = parser - def mappingKey(self): - return self.getTypedRuleContext(SolidityParser.MappingKeyContext,0) - - - def typeName(self): - return self.getTypedRuleContext(SolidityParser.TypeNameContext,0) + def identifier(self): + return self.getTypedRuleContext(SolidityParser.IdentifierContext,0) def getRuleIndex(self): - return SolidityParser.RULE_mapping + return SolidityParser.RULE_mappingValueName def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterMapping" ): - listener.enterMapping(self) + if hasattr( listener, "enterMappingValueName" ): + listener.enterMappingValueName(self) def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitMapping" ): - listener.exitMapping(self) + if hasattr( listener, "exitMappingValueName" ): + listener.exitMappingValueName(self) def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitMapping" ): - return visitor.visitMapping(self) + if hasattr( visitor, "visitMappingValueName" ): + return visitor.visitMappingValueName(self) else: return visitor.visitChildren(self) - def mapping(self): + def mappingValueName(self): - localctx = SolidityParser.MappingContext(self, self._ctx, self.state) - self.enterRule(localctx, 76, self.RULE_mapping) + localctx = SolidityParser.MappingValueNameContext(self, self._ctx, self.state) + self.enterRule(localctx, 86, self.RULE_mappingValueName) try: self.enterOuterAlt(localctx, 1) - self.state = 574 - self.match(SolidityParser.T__37) - self.state = 575 - self.match(SolidityParser.T__22) - self.state = 576 - self.mappingKey() - self.state = 577 - self.match(SolidityParser.T__38) - self.state = 578 - self.typeName(0) - self.state = 579 - self.match(SolidityParser.T__23) + self.state = 623 + self.identifier() except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -4132,7 +4461,6 @@ def mapping(self): class FunctionTypeNameContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -4187,47 +4515,47 @@ def accept(self, visitor:ParseTreeVisitor): def functionTypeName(self): localctx = SolidityParser.FunctionTypeNameContext(self, self._ctx, self.state) - self.enterRule(localctx, 78, self.RULE_functionTypeName) + self.enterRule(localctx, 88, self.RULE_functionTypeName) try: self.enterOuterAlt(localctx, 1) - self.state = 581 - self.match(SolidityParser.T__29) - self.state = 582 + self.state = 625 + self.match(SolidityParser.T__37) + self.state = 626 self.functionTypeParameterList() - self.state = 588 + self.state = 632 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,60,self._ctx) + _alt = self._interp.adaptivePredict(self._input,66,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 586 + self.state = 630 self._errHandler.sync(self) token = self._input.LA(1) if token in [SolidityParser.InternalKeyword]: - self.state = 583 + self.state = 627 self.match(SolidityParser.InternalKeyword) pass elif token in [SolidityParser.ExternalKeyword]: - self.state = 584 + self.state = 628 self.match(SolidityParser.ExternalKeyword) pass elif token in [SolidityParser.ConstantKeyword, SolidityParser.PayableKeyword, SolidityParser.PureKeyword, SolidityParser.ViewKeyword]: - self.state = 585 + self.state = 629 self.stateMutability() pass else: raise NoViableAltException(self) - self.state = 590 + self.state = 634 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,60,self._ctx) + _alt = self._interp.adaptivePredict(self._input,66,self._ctx) - self.state = 593 + self.state = 637 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,61,self._ctx) + la_ = self._interp.adaptivePredict(self._input,67,self._ctx) if la_ == 1: - self.state = 591 - self.match(SolidityParser.T__30) - self.state = 592 + self.state = 635 + self.match(SolidityParser.T__38) + self.state = 636 self.functionTypeParameterList() @@ -4241,7 +4569,6 @@ def functionTypeName(self): class StorageLocationContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -4271,13 +4598,13 @@ def accept(self, visitor:ParseTreeVisitor): def storageLocation(self): localctx = SolidityParser.StorageLocationContext(self, self._ctx, self.state) - self.enterRule(localctx, 80, self.RULE_storageLocation) + self.enterRule(localctx, 90, self.RULE_storageLocation) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 595 + self.state = 639 _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__39) | (1 << SolidityParser.T__40) | (1 << SolidityParser.T__41))) != 0)): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__47) | (1 << SolidityParser.T__48) | (1 << SolidityParser.T__49))) != 0)): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -4292,7 +4619,6 @@ def storageLocation(self): class StateMutabilityContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -4333,13 +4659,13 @@ def accept(self, visitor:ParseTreeVisitor): def stateMutability(self): localctx = SolidityParser.StateMutabilityContext(self, self._ctx, self.state) - self.enterRule(localctx, 82, self.RULE_stateMutability) + self.enterRule(localctx, 92, self.RULE_stateMutability) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 597 + self.state = 641 _la = self._input.LA(1) - if not(((((_la - 111)) & ~0x3f) == 0 and ((1 << (_la - 111)) & ((1 << (SolidityParser.ConstantKeyword - 111)) | (1 << (SolidityParser.PayableKeyword - 111)) | (1 << (SolidityParser.PureKeyword - 111)) | (1 << (SolidityParser.ViewKeyword - 111)))) != 0)): + if not(((((_la - 110)) & ~0x3f) == 0 and ((1 << (_la - 110)) & ((1 << (SolidityParser.ConstantKeyword - 110)) | (1 << (SolidityParser.PayableKeyword - 110)) | (1 << (SolidityParser.PureKeyword - 110)) | (1 << (SolidityParser.ViewKeyword - 110)))) != 0)): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -4354,7 +4680,6 @@ def stateMutability(self): class BlockContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -4390,23 +4715,23 @@ def accept(self, visitor:ParseTreeVisitor): def block(self): localctx = SolidityParser.BlockContext(self, self._ctx, self.state) - self.enterRule(localctx, 84, self.RULE_block) + self.enterRule(localctx, 94, self.RULE_block) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 599 + self.state = 643 self.match(SolidityParser.T__14) - self.state = 603 + self.state = 647 self._errHandler.sync(self) _la = self._input.LA(1) - while ((((_la - 5)) & ~0x3f) == 0 and ((1 << (_la - 5)) & ((1 << (SolidityParser.T__4 - 5)) | (1 << (SolidityParser.T__13 - 5)) | (1 << (SolidityParser.T__14 - 5)) | (1 << (SolidityParser.T__22 - 5)) | (1 << (SolidityParser.T__24 - 5)) | (1 << (SolidityParser.T__26 - 5)) | (1 << (SolidityParser.T__29 - 5)) | (1 << (SolidityParser.T__33 - 5)) | (1 << (SolidityParser.T__35 - 5)) | (1 << (SolidityParser.T__37 - 5)) | (1 << (SolidityParser.T__41 - 5)) | (1 << (SolidityParser.T__42 - 5)) | (1 << (SolidityParser.T__44 - 5)) | (1 << (SolidityParser.T__46 - 5)) | (1 << (SolidityParser.T__47 - 5)) | (1 << (SolidityParser.T__48 - 5)) | (1 << (SolidityParser.T__49 - 5)) | (1 << (SolidityParser.T__50 - 5)) | (1 << (SolidityParser.T__51 - 5)) | (1 << (SolidityParser.T__52 - 5)) | (1 << (SolidityParser.T__53 - 5)) | (1 << (SolidityParser.T__54 - 5)) | (1 << (SolidityParser.T__55 - 5)) | (1 << (SolidityParser.T__56 - 5)) | (1 << (SolidityParser.T__57 - 5)) | (1 << (SolidityParser.T__58 - 5)) | (1 << (SolidityParser.T__59 - 5)) | (1 << (SolidityParser.T__60 - 5)) | (1 << (SolidityParser.T__62 - 5)) | (1 << (SolidityParser.T__63 - 5)) | (1 << (SolidityParser.T__64 - 5)) | (1 << (SolidityParser.T__65 - 5)) | (1 << (SolidityParser.T__66 - 5)))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.Int - 96)) | (1 << (SolidityParser.Uint - 96)) | (1 << (SolidityParser.Byte - 96)) | (1 << (SolidityParser.Fixed - 96)) | (1 << (SolidityParser.Ufixed - 96)) | (1 << (SolidityParser.BooleanLiteral - 96)) | (1 << (SolidityParser.DecimalNumber - 96)) | (1 << (SolidityParser.HexNumber - 96)) | (1 << (SolidityParser.HexLiteralFragment - 96)) | (1 << (SolidityParser.BreakKeyword - 96)) | (1 << (SolidityParser.ContinueKeyword - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.TypeKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)) | (1 << (SolidityParser.StringLiteralFragment - 96)))) != 0): - self.state = 600 + while ((((_la - 6)) & ~0x3f) == 0 and ((1 << (_la - 6)) & ((1 << (SolidityParser.T__5 - 6)) | (1 << (SolidityParser.T__13 - 6)) | (1 << (SolidityParser.T__14 - 6)) | (1 << (SolidityParser.T__22 - 6)) | (1 << (SolidityParser.T__24 - 6)) | (1 << (SolidityParser.T__26 - 6)) | (1 << (SolidityParser.T__29 - 6)) | (1 << (SolidityParser.T__30 - 6)) | (1 << (SolidityParser.T__37 - 6)) | (1 << (SolidityParser.T__41 - 6)) | (1 << (SolidityParser.T__43 - 6)) | (1 << (SolidityParser.T__45 - 6)) | (1 << (SolidityParser.T__49 - 6)) | (1 << (SolidityParser.T__50 - 6)) | (1 << (SolidityParser.T__52 - 6)) | (1 << (SolidityParser.T__54 - 6)) | (1 << (SolidityParser.T__55 - 6)) | (1 << (SolidityParser.T__56 - 6)) | (1 << (SolidityParser.T__57 - 6)) | (1 << (SolidityParser.T__58 - 6)) | (1 << (SolidityParser.T__59 - 6)) | (1 << (SolidityParser.T__60 - 6)) | (1 << (SolidityParser.T__61 - 6)) | (1 << (SolidityParser.T__62 - 6)) | (1 << (SolidityParser.T__63 - 6)) | (1 << (SolidityParser.T__64 - 6)) | (1 << (SolidityParser.T__65 - 6)) | (1 << (SolidityParser.T__66 - 6)) | (1 << (SolidityParser.T__67 - 6)) | (1 << (SolidityParser.T__68 - 6)))) != 0) or ((((_la - 71)) & ~0x3f) == 0 and ((1 << (_la - 71)) & ((1 << (SolidityParser.T__70 - 71)) | (1 << (SolidityParser.T__71 - 71)) | (1 << (SolidityParser.T__94 - 71)) | (1 << (SolidityParser.Int - 71)) | (1 << (SolidityParser.Uint - 71)) | (1 << (SolidityParser.Byte - 71)) | (1 << (SolidityParser.Fixed - 71)) | (1 << (SolidityParser.Ufixed - 71)) | (1 << (SolidityParser.BooleanLiteral - 71)) | (1 << (SolidityParser.DecimalNumber - 71)) | (1 << (SolidityParser.HexNumber - 71)) | (1 << (SolidityParser.HexLiteralFragment - 71)) | (1 << (SolidityParser.BreakKeyword - 71)) | (1 << (SolidityParser.ContinueKeyword - 71)) | (1 << (SolidityParser.LeaveKeyword - 71)) | (1 << (SolidityParser.PayableKeyword - 71)) | (1 << (SolidityParser.TypeKeyword - 71)) | (1 << (SolidityParser.GlobalKeyword - 71)) | (1 << (SolidityParser.ConstructorKeyword - 71)) | (1 << (SolidityParser.ReceiveKeyword - 71)) | (1 << (SolidityParser.Identifier - 71)) | (1 << (SolidityParser.StringLiteralFragment - 71)))) != 0): + self.state = 644 self.statement() - self.state = 605 + self.state = 649 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 606 + self.state = 650 self.match(SolidityParser.T__16) except RecognitionException as re: localctx.exception = re @@ -4418,7 +4743,6 @@ def block(self): class StatementContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -4507,98 +4831,98 @@ def accept(self, visitor:ParseTreeVisitor): def statement(self): localctx = SolidityParser.StatementContext(self, self._ctx, self.state) - self.enterRule(localctx, 86, self.RULE_statement) + self.enterRule(localctx, 96, self.RULE_statement) try: - self.state = 623 + self.state = 667 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,63,self._ctx) + la_ = self._interp.adaptivePredict(self._input,69,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 608 + self.state = 652 self.ifStatement() pass elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 609 + self.state = 653 self.tryStatement() pass elif la_ == 3: self.enterOuterAlt(localctx, 3) - self.state = 610 + self.state = 654 self.whileStatement() pass elif la_ == 4: self.enterOuterAlt(localctx, 4) - self.state = 611 + self.state = 655 self.forStatement() pass elif la_ == 5: self.enterOuterAlt(localctx, 5) - self.state = 612 + self.state = 656 self.block() pass elif la_ == 6: self.enterOuterAlt(localctx, 6) - self.state = 613 + self.state = 657 self.inlineAssemblyStatement() pass elif la_ == 7: self.enterOuterAlt(localctx, 7) - self.state = 614 + self.state = 658 self.doWhileStatement() pass elif la_ == 8: self.enterOuterAlt(localctx, 8) - self.state = 615 + self.state = 659 self.continueStatement() pass elif la_ == 9: self.enterOuterAlt(localctx, 9) - self.state = 616 + self.state = 660 self.breakStatement() pass elif la_ == 10: self.enterOuterAlt(localctx, 10) - self.state = 617 + self.state = 661 self.returnStatement() pass elif la_ == 11: self.enterOuterAlt(localctx, 11) - self.state = 618 + self.state = 662 self.throwStatement() pass elif la_ == 12: self.enterOuterAlt(localctx, 12) - self.state = 619 + self.state = 663 self.emitStatement() pass elif la_ == 13: self.enterOuterAlt(localctx, 13) - self.state = 620 + self.state = 664 self.simpleStatement() pass elif la_ == 14: self.enterOuterAlt(localctx, 14) - self.state = 621 + self.state = 665 self.uncheckedStatement() pass elif la_ == 15: self.enterOuterAlt(localctx, 15) - self.state = 622 + self.state = 666 self.revertStatement() pass @@ -4613,7 +4937,6 @@ def statement(self): class ExpressionStatementContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -4646,12 +4969,12 @@ def accept(self, visitor:ParseTreeVisitor): def expressionStatement(self): localctx = SolidityParser.ExpressionStatementContext(self, self._ctx, self.state) - self.enterRule(localctx, 88, self.RULE_expressionStatement) + self.enterRule(localctx, 98, self.RULE_expressionStatement) try: self.enterOuterAlt(localctx, 1) - self.state = 625 + self.state = 669 self.expression(0) - self.state = 626 + self.state = 670 self.match(SolidityParser.T__1) except RecognitionException as re: localctx.exception = re @@ -4663,7 +4986,6 @@ def expressionStatement(self): class IfStatementContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -4703,26 +5025,26 @@ def accept(self, visitor:ParseTreeVisitor): def ifStatement(self): localctx = SolidityParser.IfStatementContext(self, self._ctx, self.state) - self.enterRule(localctx, 90, self.RULE_ifStatement) + self.enterRule(localctx, 100, self.RULE_ifStatement) try: self.enterOuterAlt(localctx, 1) - self.state = 628 - self.match(SolidityParser.T__42) - self.state = 629 + self.state = 672 + self.match(SolidityParser.T__50) + self.state = 673 self.match(SolidityParser.T__22) - self.state = 630 + self.state = 674 self.expression(0) - self.state = 631 + self.state = 675 self.match(SolidityParser.T__23) - self.state = 632 + self.state = 676 self.statement() - self.state = 635 + self.state = 679 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,64,self._ctx) + la_ = self._interp.adaptivePredict(self._input,70,self._ctx) if la_ == 1: - self.state = 633 - self.match(SolidityParser.T__43) - self.state = 634 + self.state = 677 + self.match(SolidityParser.T__51) + self.state = 678 self.statement() @@ -4736,7 +5058,6 @@ def ifStatement(self): class TryStatementContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -4784,34 +5105,34 @@ def accept(self, visitor:ParseTreeVisitor): def tryStatement(self): localctx = SolidityParser.TryStatementContext(self, self._ctx, self.state) - self.enterRule(localctx, 92, self.RULE_tryStatement) + self.enterRule(localctx, 102, self.RULE_tryStatement) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 637 - self.match(SolidityParser.T__44) - self.state = 638 + self.state = 681 + self.match(SolidityParser.T__52) + self.state = 682 self.expression(0) - self.state = 640 + self.state = 684 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==SolidityParser.T__30: - self.state = 639 + if _la==SolidityParser.T__38: + self.state = 683 self.returnParameters() - self.state = 642 + self.state = 686 self.block() - self.state = 644 + self.state = 688 self._errHandler.sync(self) _la = self._input.LA(1) while True: - self.state = 643 + self.state = 687 self.catchClause() - self.state = 646 + self.state = 690 self._errHandler.sync(self) _la = self._input.LA(1) - if not (_la==SolidityParser.T__45): + if not (_la==SolidityParser.T__53): break except RecognitionException as re: @@ -4824,7 +5145,6 @@ def tryStatement(self): class CatchClauseContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -4865,29 +5185,29 @@ def accept(self, visitor:ParseTreeVisitor): def catchClause(self): localctx = SolidityParser.CatchClauseContext(self, self._ctx, self.state) - self.enterRule(localctx, 94, self.RULE_catchClause) + self.enterRule(localctx, 104, self.RULE_catchClause) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 648 - self.match(SolidityParser.T__45) - self.state = 653 + self.state = 692 + self.match(SolidityParser.T__53) + self.state = 697 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__22) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__41) | (1 << SolidityParser.T__53))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)))) != 0): - self.state = 650 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__22) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__43) | (1 << SolidityParser.T__49) | (1 << SolidityParser.T__61))) != 0) or ((((_la - 95)) & ~0x3f) == 0 and ((1 << (_la - 95)) & ((1 << (SolidityParser.T__94 - 95)) | (1 << (SolidityParser.LeaveKeyword - 95)) | (1 << (SolidityParser.PayableKeyword - 95)) | (1 << (SolidityParser.GlobalKeyword - 95)) | (1 << (SolidityParser.ConstructorKeyword - 95)) | (1 << (SolidityParser.ReceiveKeyword - 95)) | (1 << (SolidityParser.Identifier - 95)))) != 0): + self.state = 694 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__41) | (1 << SolidityParser.T__53))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)))) != 0): - self.state = 649 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__43) | (1 << SolidityParser.T__49) | (1 << SolidityParser.T__61))) != 0) or ((((_la - 95)) & ~0x3f) == 0 and ((1 << (_la - 95)) & ((1 << (SolidityParser.T__94 - 95)) | (1 << (SolidityParser.LeaveKeyword - 95)) | (1 << (SolidityParser.PayableKeyword - 95)) | (1 << (SolidityParser.GlobalKeyword - 95)) | (1 << (SolidityParser.ConstructorKeyword - 95)) | (1 << (SolidityParser.ReceiveKeyword - 95)) | (1 << (SolidityParser.Identifier - 95)))) != 0): + self.state = 693 self.identifier() - self.state = 652 + self.state = 696 self.parameterList() - self.state = 655 + self.state = 699 self.block() except RecognitionException as re: localctx.exception = re @@ -4899,7 +5219,6 @@ def catchClause(self): class WhileStatementContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -4936,18 +5255,18 @@ def accept(self, visitor:ParseTreeVisitor): def whileStatement(self): localctx = SolidityParser.WhileStatementContext(self, self._ctx, self.state) - self.enterRule(localctx, 96, self.RULE_whileStatement) + self.enterRule(localctx, 106, self.RULE_whileStatement) try: self.enterOuterAlt(localctx, 1) - self.state = 657 - self.match(SolidityParser.T__46) - self.state = 658 + self.state = 701 + self.match(SolidityParser.T__54) + self.state = 702 self.match(SolidityParser.T__22) - self.state = 659 + self.state = 703 self.expression(0) - self.state = 660 + self.state = 704 self.match(SolidityParser.T__23) - self.state = 661 + self.state = 705 self.statement() except RecognitionException as re: localctx.exception = re @@ -4959,7 +5278,6 @@ def whileStatement(self): class SimpleStatementContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -4996,19 +5314,19 @@ def accept(self, visitor:ParseTreeVisitor): def simpleStatement(self): localctx = SolidityParser.SimpleStatementContext(self, self._ctx, self.state) - self.enterRule(localctx, 98, self.RULE_simpleStatement) + self.enterRule(localctx, 108, self.RULE_simpleStatement) try: self.enterOuterAlt(localctx, 1) - self.state = 665 + self.state = 709 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,69,self._ctx) + la_ = self._interp.adaptivePredict(self._input,75,self._ctx) if la_ == 1: - self.state = 663 + self.state = 707 self.variableDeclarationStatement() pass elif la_ == 2: - self.state = 664 + self.state = 708 self.expressionStatement() pass @@ -5023,7 +5341,6 @@ def simpleStatement(self): class UncheckedStatementContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -5056,12 +5373,12 @@ def accept(self, visitor:ParseTreeVisitor): def uncheckedStatement(self): localctx = SolidityParser.UncheckedStatementContext(self, self._ctx, self.state) - self.enterRule(localctx, 100, self.RULE_uncheckedStatement) + self.enterRule(localctx, 110, self.RULE_uncheckedStatement) try: self.enterOuterAlt(localctx, 1) - self.state = 667 - self.match(SolidityParser.T__47) - self.state = 668 + self.state = 711 + self.match(SolidityParser.T__55) + self.state = 712 self.block() except RecognitionException as re: localctx.exception = re @@ -5073,7 +5390,6 @@ def uncheckedStatement(self): class ForStatementContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -5118,53 +5434,53 @@ def accept(self, visitor:ParseTreeVisitor): def forStatement(self): localctx = SolidityParser.ForStatementContext(self, self._ctx, self.state) - self.enterRule(localctx, 102, self.RULE_forStatement) + self.enterRule(localctx, 112, self.RULE_forStatement) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 670 + self.state = 714 self.match(SolidityParser.T__26) - self.state = 671 + self.state = 715 self.match(SolidityParser.T__22) - self.state = 674 + self.state = 718 self._errHandler.sync(self) token = self._input.LA(1) - if token in [SolidityParser.T__4, SolidityParser.T__13, SolidityParser.T__22, SolidityParser.T__24, SolidityParser.T__29, SolidityParser.T__33, SolidityParser.T__35, SolidityParser.T__37, SolidityParser.T__41, SolidityParser.T__53, SolidityParser.T__54, SolidityParser.T__55, SolidityParser.T__56, SolidityParser.T__57, SolidityParser.T__58, SolidityParser.T__59, SolidityParser.T__60, SolidityParser.T__62, SolidityParser.T__63, SolidityParser.T__64, SolidityParser.T__65, SolidityParser.T__66, SolidityParser.T__95, SolidityParser.Int, SolidityParser.Uint, SolidityParser.Byte, SolidityParser.Fixed, SolidityParser.Ufixed, SolidityParser.BooleanLiteral, SolidityParser.DecimalNumber, SolidityParser.HexNumber, SolidityParser.HexLiteralFragment, SolidityParser.LeaveKeyword, SolidityParser.PayableKeyword, SolidityParser.TypeKeyword, SolidityParser.ConstructorKeyword, SolidityParser.ReceiveKeyword, SolidityParser.Identifier, SolidityParser.StringLiteralFragment]: - self.state = 672 + if token in [SolidityParser.T__5, SolidityParser.T__13, SolidityParser.T__22, SolidityParser.T__24, SolidityParser.T__29, SolidityParser.T__30, SolidityParser.T__37, SolidityParser.T__41, SolidityParser.T__43, SolidityParser.T__45, SolidityParser.T__49, SolidityParser.T__61, SolidityParser.T__62, SolidityParser.T__63, SolidityParser.T__64, SolidityParser.T__65, SolidityParser.T__66, SolidityParser.T__67, SolidityParser.T__68, SolidityParser.T__70, SolidityParser.T__71, SolidityParser.T__94, SolidityParser.Int, SolidityParser.Uint, SolidityParser.Byte, SolidityParser.Fixed, SolidityParser.Ufixed, SolidityParser.BooleanLiteral, SolidityParser.DecimalNumber, SolidityParser.HexNumber, SolidityParser.HexLiteralFragment, SolidityParser.LeaveKeyword, SolidityParser.PayableKeyword, SolidityParser.TypeKeyword, SolidityParser.GlobalKeyword, SolidityParser.ConstructorKeyword, SolidityParser.ReceiveKeyword, SolidityParser.Identifier, SolidityParser.StringLiteralFragment]: + self.state = 716 self.simpleStatement() pass elif token in [SolidityParser.T__1]: - self.state = 673 + self.state = 717 self.match(SolidityParser.T__1) pass else: raise NoViableAltException(self) - self.state = 678 + self.state = 722 self._errHandler.sync(self) token = self._input.LA(1) - if token in [SolidityParser.T__4, SolidityParser.T__13, SolidityParser.T__22, SolidityParser.T__24, SolidityParser.T__33, SolidityParser.T__35, SolidityParser.T__41, SolidityParser.T__53, SolidityParser.T__54, SolidityParser.T__55, SolidityParser.T__56, SolidityParser.T__57, SolidityParser.T__58, SolidityParser.T__59, SolidityParser.T__60, SolidityParser.T__62, SolidityParser.T__63, SolidityParser.T__64, SolidityParser.T__65, SolidityParser.T__66, SolidityParser.T__95, SolidityParser.Int, SolidityParser.Uint, SolidityParser.Byte, SolidityParser.Fixed, SolidityParser.Ufixed, SolidityParser.BooleanLiteral, SolidityParser.DecimalNumber, SolidityParser.HexNumber, SolidityParser.HexLiteralFragment, SolidityParser.LeaveKeyword, SolidityParser.PayableKeyword, SolidityParser.TypeKeyword, SolidityParser.ConstructorKeyword, SolidityParser.ReceiveKeyword, SolidityParser.Identifier, SolidityParser.StringLiteralFragment]: - self.state = 676 + if token in [SolidityParser.T__5, SolidityParser.T__13, SolidityParser.T__22, SolidityParser.T__24, SolidityParser.T__29, SolidityParser.T__30, SolidityParser.T__37, SolidityParser.T__41, SolidityParser.T__43, SolidityParser.T__45, SolidityParser.T__49, SolidityParser.T__61, SolidityParser.T__62, SolidityParser.T__63, SolidityParser.T__64, SolidityParser.T__65, SolidityParser.T__66, SolidityParser.T__67, SolidityParser.T__68, SolidityParser.T__70, SolidityParser.T__71, SolidityParser.T__94, SolidityParser.Int, SolidityParser.Uint, SolidityParser.Byte, SolidityParser.Fixed, SolidityParser.Ufixed, SolidityParser.BooleanLiteral, SolidityParser.DecimalNumber, SolidityParser.HexNumber, SolidityParser.HexLiteralFragment, SolidityParser.LeaveKeyword, SolidityParser.PayableKeyword, SolidityParser.TypeKeyword, SolidityParser.GlobalKeyword, SolidityParser.ConstructorKeyword, SolidityParser.ReceiveKeyword, SolidityParser.Identifier, SolidityParser.StringLiteralFragment]: + self.state = 720 self.expressionStatement() pass elif token in [SolidityParser.T__1]: - self.state = 677 + self.state = 721 self.match(SolidityParser.T__1) pass else: raise NoViableAltException(self) - self.state = 681 + self.state = 725 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 5)) & ~0x3f) == 0 and ((1 << (_la - 5)) & ((1 << (SolidityParser.T__4 - 5)) | (1 << (SolidityParser.T__13 - 5)) | (1 << (SolidityParser.T__22 - 5)) | (1 << (SolidityParser.T__24 - 5)) | (1 << (SolidityParser.T__33 - 5)) | (1 << (SolidityParser.T__35 - 5)) | (1 << (SolidityParser.T__41 - 5)) | (1 << (SolidityParser.T__53 - 5)) | (1 << (SolidityParser.T__54 - 5)) | (1 << (SolidityParser.T__55 - 5)) | (1 << (SolidityParser.T__56 - 5)) | (1 << (SolidityParser.T__57 - 5)) | (1 << (SolidityParser.T__58 - 5)) | (1 << (SolidityParser.T__59 - 5)) | (1 << (SolidityParser.T__60 - 5)) | (1 << (SolidityParser.T__62 - 5)) | (1 << (SolidityParser.T__63 - 5)) | (1 << (SolidityParser.T__64 - 5)) | (1 << (SolidityParser.T__65 - 5)) | (1 << (SolidityParser.T__66 - 5)))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.Int - 96)) | (1 << (SolidityParser.Uint - 96)) | (1 << (SolidityParser.Byte - 96)) | (1 << (SolidityParser.Fixed - 96)) | (1 << (SolidityParser.Ufixed - 96)) | (1 << (SolidityParser.BooleanLiteral - 96)) | (1 << (SolidityParser.DecimalNumber - 96)) | (1 << (SolidityParser.HexNumber - 96)) | (1 << (SolidityParser.HexLiteralFragment - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.TypeKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)) | (1 << (SolidityParser.StringLiteralFragment - 96)))) != 0): - self.state = 680 + if ((((_la - 6)) & ~0x3f) == 0 and ((1 << (_la - 6)) & ((1 << (SolidityParser.T__5 - 6)) | (1 << (SolidityParser.T__13 - 6)) | (1 << (SolidityParser.T__22 - 6)) | (1 << (SolidityParser.T__24 - 6)) | (1 << (SolidityParser.T__29 - 6)) | (1 << (SolidityParser.T__30 - 6)) | (1 << (SolidityParser.T__37 - 6)) | (1 << (SolidityParser.T__41 - 6)) | (1 << (SolidityParser.T__43 - 6)) | (1 << (SolidityParser.T__45 - 6)) | (1 << (SolidityParser.T__49 - 6)) | (1 << (SolidityParser.T__61 - 6)) | (1 << (SolidityParser.T__62 - 6)) | (1 << (SolidityParser.T__63 - 6)) | (1 << (SolidityParser.T__64 - 6)) | (1 << (SolidityParser.T__65 - 6)) | (1 << (SolidityParser.T__66 - 6)) | (1 << (SolidityParser.T__67 - 6)) | (1 << (SolidityParser.T__68 - 6)))) != 0) or ((((_la - 71)) & ~0x3f) == 0 and ((1 << (_la - 71)) & ((1 << (SolidityParser.T__70 - 71)) | (1 << (SolidityParser.T__71 - 71)) | (1 << (SolidityParser.T__94 - 71)) | (1 << (SolidityParser.Int - 71)) | (1 << (SolidityParser.Uint - 71)) | (1 << (SolidityParser.Byte - 71)) | (1 << (SolidityParser.Fixed - 71)) | (1 << (SolidityParser.Ufixed - 71)) | (1 << (SolidityParser.BooleanLiteral - 71)) | (1 << (SolidityParser.DecimalNumber - 71)) | (1 << (SolidityParser.HexNumber - 71)) | (1 << (SolidityParser.HexLiteralFragment - 71)) | (1 << (SolidityParser.LeaveKeyword - 71)) | (1 << (SolidityParser.PayableKeyword - 71)) | (1 << (SolidityParser.TypeKeyword - 71)) | (1 << (SolidityParser.GlobalKeyword - 71)) | (1 << (SolidityParser.ConstructorKeyword - 71)) | (1 << (SolidityParser.ReceiveKeyword - 71)) | (1 << (SolidityParser.Identifier - 71)) | (1 << (SolidityParser.StringLiteralFragment - 71)))) != 0): + self.state = 724 self.expression(0) - self.state = 683 + self.state = 727 self.match(SolidityParser.T__23) - self.state = 684 + self.state = 728 self.statement() except RecognitionException as re: localctx.exception = re @@ -5176,7 +5492,6 @@ def forStatement(self): class InlineAssemblyStatementContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -5189,6 +5504,10 @@ def assemblyBlock(self): def StringLiteralFragment(self): return self.getToken(SolidityParser.StringLiteralFragment, 0) + def inlineAssemblyStatementFlag(self): + return self.getTypedRuleContext(SolidityParser.InlineAssemblyStatementFlagContext,0) + + def getRuleIndex(self): return SolidityParser.RULE_inlineAssemblyStatement @@ -5212,21 +5531,33 @@ def accept(self, visitor:ParseTreeVisitor): def inlineAssemblyStatement(self): localctx = SolidityParser.InlineAssemblyStatementContext(self, self._ctx, self.state) - self.enterRule(localctx, 104, self.RULE_inlineAssemblyStatement) + self.enterRule(localctx, 114, self.RULE_inlineAssemblyStatement) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 686 - self.match(SolidityParser.T__48) - self.state = 688 + self.state = 730 + self.match(SolidityParser.T__56) + self.state = 732 self._errHandler.sync(self) _la = self._input.LA(1) if _la==SolidityParser.StringLiteralFragment: - self.state = 687 + self.state = 731 self.match(SolidityParser.StringLiteralFragment) - self.state = 690 + self.state = 738 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==SolidityParser.T__22: + self.state = 734 + self.match(SolidityParser.T__22) + self.state = 735 + self.inlineAssemblyStatementFlag() + self.state = 736 + self.match(SolidityParser.T__23) + + + self.state = 740 self.assemblyBlock() except RecognitionException as re: localctx.exception = re @@ -5237,8 +5568,54 @@ def inlineAssemblyStatement(self): return localctx + class InlineAssemblyStatementFlagContext(ParserRuleContext): + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def stringLiteral(self): + return self.getTypedRuleContext(SolidityParser.StringLiteralContext,0) + + + def getRuleIndex(self): + return SolidityParser.RULE_inlineAssemblyStatementFlag + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterInlineAssemblyStatementFlag" ): + listener.enterInlineAssemblyStatementFlag(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitInlineAssemblyStatementFlag" ): + listener.exitInlineAssemblyStatementFlag(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitInlineAssemblyStatementFlag" ): + return visitor.visitInlineAssemblyStatementFlag(self) + else: + return visitor.visitChildren(self) + + + + + def inlineAssemblyStatementFlag(self): + + localctx = SolidityParser.InlineAssemblyStatementFlagContext(self, self._ctx, self.state) + self.enterRule(localctx, 116, self.RULE_inlineAssemblyStatementFlag) + try: + self.enterOuterAlt(localctx, 1) + self.state = 742 + self.stringLiteral() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class DoWhileStatementContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -5275,22 +5652,22 @@ def accept(self, visitor:ParseTreeVisitor): def doWhileStatement(self): localctx = SolidityParser.DoWhileStatementContext(self, self._ctx, self.state) - self.enterRule(localctx, 106, self.RULE_doWhileStatement) + self.enterRule(localctx, 118, self.RULE_doWhileStatement) try: self.enterOuterAlt(localctx, 1) - self.state = 692 - self.match(SolidityParser.T__49) - self.state = 693 + self.state = 744 + self.match(SolidityParser.T__57) + self.state = 745 self.statement() - self.state = 694 - self.match(SolidityParser.T__46) - self.state = 695 + self.state = 746 + self.match(SolidityParser.T__54) + self.state = 747 self.match(SolidityParser.T__22) - self.state = 696 + self.state = 748 self.expression(0) - self.state = 697 + self.state = 749 self.match(SolidityParser.T__23) - self.state = 698 + self.state = 750 self.match(SolidityParser.T__1) except RecognitionException as re: localctx.exception = re @@ -5302,7 +5679,6 @@ def doWhileStatement(self): class ContinueStatementContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -5334,12 +5710,12 @@ def accept(self, visitor:ParseTreeVisitor): def continueStatement(self): localctx = SolidityParser.ContinueStatementContext(self, self._ctx, self.state) - self.enterRule(localctx, 108, self.RULE_continueStatement) + self.enterRule(localctx, 120, self.RULE_continueStatement) try: self.enterOuterAlt(localctx, 1) - self.state = 700 + self.state = 752 self.match(SolidityParser.ContinueKeyword) - self.state = 701 + self.state = 753 self.match(SolidityParser.T__1) except RecognitionException as re: localctx.exception = re @@ -5351,7 +5727,6 @@ def continueStatement(self): class BreakStatementContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -5383,12 +5758,12 @@ def accept(self, visitor:ParseTreeVisitor): def breakStatement(self): localctx = SolidityParser.BreakStatementContext(self, self._ctx, self.state) - self.enterRule(localctx, 110, self.RULE_breakStatement) + self.enterRule(localctx, 122, self.RULE_breakStatement) try: self.enterOuterAlt(localctx, 1) - self.state = 703 + self.state = 755 self.match(SolidityParser.BreakKeyword) - self.state = 704 + self.state = 756 self.match(SolidityParser.T__1) except RecognitionException as re: localctx.exception = re @@ -5400,7 +5775,6 @@ def breakStatement(self): class ReturnStatementContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -5433,21 +5807,21 @@ def accept(self, visitor:ParseTreeVisitor): def returnStatement(self): localctx = SolidityParser.ReturnStatementContext(self, self._ctx, self.state) - self.enterRule(localctx, 112, self.RULE_returnStatement) + self.enterRule(localctx, 124, self.RULE_returnStatement) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 706 - self.match(SolidityParser.T__50) - self.state = 708 + self.state = 758 + self.match(SolidityParser.T__58) + self.state = 760 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 5)) & ~0x3f) == 0 and ((1 << (_la - 5)) & ((1 << (SolidityParser.T__4 - 5)) | (1 << (SolidityParser.T__13 - 5)) | (1 << (SolidityParser.T__22 - 5)) | (1 << (SolidityParser.T__24 - 5)) | (1 << (SolidityParser.T__33 - 5)) | (1 << (SolidityParser.T__35 - 5)) | (1 << (SolidityParser.T__41 - 5)) | (1 << (SolidityParser.T__53 - 5)) | (1 << (SolidityParser.T__54 - 5)) | (1 << (SolidityParser.T__55 - 5)) | (1 << (SolidityParser.T__56 - 5)) | (1 << (SolidityParser.T__57 - 5)) | (1 << (SolidityParser.T__58 - 5)) | (1 << (SolidityParser.T__59 - 5)) | (1 << (SolidityParser.T__60 - 5)) | (1 << (SolidityParser.T__62 - 5)) | (1 << (SolidityParser.T__63 - 5)) | (1 << (SolidityParser.T__64 - 5)) | (1 << (SolidityParser.T__65 - 5)) | (1 << (SolidityParser.T__66 - 5)))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.Int - 96)) | (1 << (SolidityParser.Uint - 96)) | (1 << (SolidityParser.Byte - 96)) | (1 << (SolidityParser.Fixed - 96)) | (1 << (SolidityParser.Ufixed - 96)) | (1 << (SolidityParser.BooleanLiteral - 96)) | (1 << (SolidityParser.DecimalNumber - 96)) | (1 << (SolidityParser.HexNumber - 96)) | (1 << (SolidityParser.HexLiteralFragment - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.TypeKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)) | (1 << (SolidityParser.StringLiteralFragment - 96)))) != 0): - self.state = 707 + if ((((_la - 6)) & ~0x3f) == 0 and ((1 << (_la - 6)) & ((1 << (SolidityParser.T__5 - 6)) | (1 << (SolidityParser.T__13 - 6)) | (1 << (SolidityParser.T__22 - 6)) | (1 << (SolidityParser.T__24 - 6)) | (1 << (SolidityParser.T__29 - 6)) | (1 << (SolidityParser.T__30 - 6)) | (1 << (SolidityParser.T__37 - 6)) | (1 << (SolidityParser.T__41 - 6)) | (1 << (SolidityParser.T__43 - 6)) | (1 << (SolidityParser.T__45 - 6)) | (1 << (SolidityParser.T__49 - 6)) | (1 << (SolidityParser.T__61 - 6)) | (1 << (SolidityParser.T__62 - 6)) | (1 << (SolidityParser.T__63 - 6)) | (1 << (SolidityParser.T__64 - 6)) | (1 << (SolidityParser.T__65 - 6)) | (1 << (SolidityParser.T__66 - 6)) | (1 << (SolidityParser.T__67 - 6)) | (1 << (SolidityParser.T__68 - 6)))) != 0) or ((((_la - 71)) & ~0x3f) == 0 and ((1 << (_la - 71)) & ((1 << (SolidityParser.T__70 - 71)) | (1 << (SolidityParser.T__71 - 71)) | (1 << (SolidityParser.T__94 - 71)) | (1 << (SolidityParser.Int - 71)) | (1 << (SolidityParser.Uint - 71)) | (1 << (SolidityParser.Byte - 71)) | (1 << (SolidityParser.Fixed - 71)) | (1 << (SolidityParser.Ufixed - 71)) | (1 << (SolidityParser.BooleanLiteral - 71)) | (1 << (SolidityParser.DecimalNumber - 71)) | (1 << (SolidityParser.HexNumber - 71)) | (1 << (SolidityParser.HexLiteralFragment - 71)) | (1 << (SolidityParser.LeaveKeyword - 71)) | (1 << (SolidityParser.PayableKeyword - 71)) | (1 << (SolidityParser.TypeKeyword - 71)) | (1 << (SolidityParser.GlobalKeyword - 71)) | (1 << (SolidityParser.ConstructorKeyword - 71)) | (1 << (SolidityParser.ReceiveKeyword - 71)) | (1 << (SolidityParser.Identifier - 71)) | (1 << (SolidityParser.StringLiteralFragment - 71)))) != 0): + self.state = 759 self.expression(0) - self.state = 710 + self.state = 762 self.match(SolidityParser.T__1) except RecognitionException as re: localctx.exception = re @@ -5459,7 +5833,6 @@ def returnStatement(self): class ThrowStatementContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -5489,12 +5862,12 @@ def accept(self, visitor:ParseTreeVisitor): def throwStatement(self): localctx = SolidityParser.ThrowStatementContext(self, self._ctx, self.state) - self.enterRule(localctx, 114, self.RULE_throwStatement) + self.enterRule(localctx, 126, self.RULE_throwStatement) try: self.enterOuterAlt(localctx, 1) - self.state = 712 - self.match(SolidityParser.T__51) - self.state = 713 + self.state = 764 + self.match(SolidityParser.T__59) + self.state = 765 self.match(SolidityParser.T__1) except RecognitionException as re: localctx.exception = re @@ -5506,7 +5879,6 @@ def throwStatement(self): class EmitStatementContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -5539,14 +5911,14 @@ def accept(self, visitor:ParseTreeVisitor): def emitStatement(self): localctx = SolidityParser.EmitStatementContext(self, self._ctx, self.state) - self.enterRule(localctx, 116, self.RULE_emitStatement) + self.enterRule(localctx, 128, self.RULE_emitStatement) try: self.enterOuterAlt(localctx, 1) - self.state = 715 - self.match(SolidityParser.T__52) - self.state = 716 + self.state = 767 + self.match(SolidityParser.T__60) + self.state = 768 self.functionCall() - self.state = 717 + self.state = 769 self.match(SolidityParser.T__1) except RecognitionException as re: localctx.exception = re @@ -5558,7 +5930,6 @@ def emitStatement(self): class RevertStatementContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -5591,14 +5962,14 @@ def accept(self, visitor:ParseTreeVisitor): def revertStatement(self): localctx = SolidityParser.RevertStatementContext(self, self._ctx, self.state) - self.enterRule(localctx, 118, self.RULE_revertStatement) + self.enterRule(localctx, 130, self.RULE_revertStatement) try: self.enterOuterAlt(localctx, 1) - self.state = 719 - self.match(SolidityParser.T__53) - self.state = 720 + self.state = 771 + self.match(SolidityParser.T__61) + self.state = 772 self.functionCall() - self.state = 721 + self.state = 773 self.match(SolidityParser.T__1) except RecognitionException as re: localctx.exception = re @@ -5610,7 +5981,6 @@ def revertStatement(self): class VariableDeclarationStatementContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -5655,46 +6025,46 @@ def accept(self, visitor:ParseTreeVisitor): def variableDeclarationStatement(self): localctx = SolidityParser.VariableDeclarationStatementContext(self, self._ctx, self.state) - self.enterRule(localctx, 120, self.RULE_variableDeclarationStatement) + self.enterRule(localctx, 132, self.RULE_variableDeclarationStatement) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 730 + self.state = 782 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,75,self._ctx) + la_ = self._interp.adaptivePredict(self._input,82,self._ctx) if la_ == 1: - self.state = 723 - self.match(SolidityParser.T__54) - self.state = 724 + self.state = 775 + self.match(SolidityParser.T__62) + self.state = 776 self.identifierList() pass elif la_ == 2: - self.state = 725 + self.state = 777 self.variableDeclaration() pass elif la_ == 3: - self.state = 726 + self.state = 778 self.match(SolidityParser.T__22) - self.state = 727 + self.state = 779 self.variableDeclarationList() - self.state = 728 + self.state = 780 self.match(SolidityParser.T__23) pass - self.state = 734 + self.state = 786 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==SolidityParser.T__9: - self.state = 732 - self.match(SolidityParser.T__9) - self.state = 733 + if _la==SolidityParser.T__10: + self.state = 784 + self.match(SolidityParser.T__10) + self.state = 785 self.expression(0) - self.state = 736 + self.state = 788 self.match(SolidityParser.T__1) except RecognitionException as re: localctx.exception = re @@ -5706,7 +6076,6 @@ def variableDeclarationStatement(self): class VariableDeclarationListContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -5742,33 +6111,33 @@ def accept(self, visitor:ParseTreeVisitor): def variableDeclarationList(self): localctx = SolidityParser.VariableDeclarationListContext(self, self._ctx, self.state) - self.enterRule(localctx, 122, self.RULE_variableDeclarationList) + self.enterRule(localctx, 134, self.RULE_variableDeclarationList) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 739 + self.state = 791 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__29) | (1 << SolidityParser.T__35) | (1 << SolidityParser.T__37) | (1 << SolidityParser.T__41) | (1 << SolidityParser.T__53) | (1 << SolidityParser.T__54) | (1 << SolidityParser.T__55) | (1 << SolidityParser.T__56) | (1 << SolidityParser.T__57))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.Int - 96)) | (1 << (SolidityParser.Uint - 96)) | (1 << (SolidityParser.Byte - 96)) | (1 << (SolidityParser.Fixed - 96)) | (1 << (SolidityParser.Ufixed - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)))) != 0): - self.state = 738 + if ((((_la - 14)) & ~0x3f) == 0 and ((1 << (_la - 14)) & ((1 << (SolidityParser.T__13 - 14)) | (1 << (SolidityParser.T__24 - 14)) | (1 << (SolidityParser.T__37 - 14)) | (1 << (SolidityParser.T__43 - 14)) | (1 << (SolidityParser.T__45 - 14)) | (1 << (SolidityParser.T__49 - 14)) | (1 << (SolidityParser.T__61 - 14)) | (1 << (SolidityParser.T__62 - 14)) | (1 << (SolidityParser.T__63 - 14)) | (1 << (SolidityParser.T__64 - 14)) | (1 << (SolidityParser.T__65 - 14)))) != 0) or ((((_la - 95)) & ~0x3f) == 0 and ((1 << (_la - 95)) & ((1 << (SolidityParser.T__94 - 95)) | (1 << (SolidityParser.Int - 95)) | (1 << (SolidityParser.Uint - 95)) | (1 << (SolidityParser.Byte - 95)) | (1 << (SolidityParser.Fixed - 95)) | (1 << (SolidityParser.Ufixed - 95)) | (1 << (SolidityParser.LeaveKeyword - 95)) | (1 << (SolidityParser.PayableKeyword - 95)) | (1 << (SolidityParser.GlobalKeyword - 95)) | (1 << (SolidityParser.ConstructorKeyword - 95)) | (1 << (SolidityParser.ReceiveKeyword - 95)) | (1 << (SolidityParser.Identifier - 95)))) != 0): + self.state = 790 self.variableDeclaration() - self.state = 747 + self.state = 799 self._errHandler.sync(self) _la = self._input.LA(1) while _la==SolidityParser.T__15: - self.state = 741 + self.state = 793 self.match(SolidityParser.T__15) - self.state = 743 + self.state = 795 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__29) | (1 << SolidityParser.T__35) | (1 << SolidityParser.T__37) | (1 << SolidityParser.T__41) | (1 << SolidityParser.T__53) | (1 << SolidityParser.T__54) | (1 << SolidityParser.T__55) | (1 << SolidityParser.T__56) | (1 << SolidityParser.T__57))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.Int - 96)) | (1 << (SolidityParser.Uint - 96)) | (1 << (SolidityParser.Byte - 96)) | (1 << (SolidityParser.Fixed - 96)) | (1 << (SolidityParser.Ufixed - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)))) != 0): - self.state = 742 + if ((((_la - 14)) & ~0x3f) == 0 and ((1 << (_la - 14)) & ((1 << (SolidityParser.T__13 - 14)) | (1 << (SolidityParser.T__24 - 14)) | (1 << (SolidityParser.T__37 - 14)) | (1 << (SolidityParser.T__43 - 14)) | (1 << (SolidityParser.T__45 - 14)) | (1 << (SolidityParser.T__49 - 14)) | (1 << (SolidityParser.T__61 - 14)) | (1 << (SolidityParser.T__62 - 14)) | (1 << (SolidityParser.T__63 - 14)) | (1 << (SolidityParser.T__64 - 14)) | (1 << (SolidityParser.T__65 - 14)))) != 0) or ((((_la - 95)) & ~0x3f) == 0 and ((1 << (_la - 95)) & ((1 << (SolidityParser.T__94 - 95)) | (1 << (SolidityParser.Int - 95)) | (1 << (SolidityParser.Uint - 95)) | (1 << (SolidityParser.Byte - 95)) | (1 << (SolidityParser.Fixed - 95)) | (1 << (SolidityParser.Ufixed - 95)) | (1 << (SolidityParser.LeaveKeyword - 95)) | (1 << (SolidityParser.PayableKeyword - 95)) | (1 << (SolidityParser.GlobalKeyword - 95)) | (1 << (SolidityParser.ConstructorKeyword - 95)) | (1 << (SolidityParser.ReceiveKeyword - 95)) | (1 << (SolidityParser.Identifier - 95)))) != 0): + self.state = 794 self.variableDeclaration() - self.state = 749 + self.state = 801 self._errHandler.sync(self) _la = self._input.LA(1) @@ -5782,7 +6151,6 @@ def variableDeclarationList(self): class IdentifierListContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -5818,40 +6186,40 @@ def accept(self, visitor:ParseTreeVisitor): def identifierList(self): localctx = SolidityParser.IdentifierListContext(self, self._ctx, self.state) - self.enterRule(localctx, 124, self.RULE_identifierList) + self.enterRule(localctx, 136, self.RULE_identifierList) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 750 + self.state = 802 self.match(SolidityParser.T__22) - self.state = 757 + self.state = 809 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,81,self._ctx) + _alt = self._interp.adaptivePredict(self._input,88,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 752 + self.state = 804 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__41) | (1 << SolidityParser.T__53))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)))) != 0): - self.state = 751 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__43) | (1 << SolidityParser.T__49) | (1 << SolidityParser.T__61))) != 0) or ((((_la - 95)) & ~0x3f) == 0 and ((1 << (_la - 95)) & ((1 << (SolidityParser.T__94 - 95)) | (1 << (SolidityParser.LeaveKeyword - 95)) | (1 << (SolidityParser.PayableKeyword - 95)) | (1 << (SolidityParser.GlobalKeyword - 95)) | (1 << (SolidityParser.ConstructorKeyword - 95)) | (1 << (SolidityParser.ReceiveKeyword - 95)) | (1 << (SolidityParser.Identifier - 95)))) != 0): + self.state = 803 self.identifier() - self.state = 754 + self.state = 806 self.match(SolidityParser.T__15) - self.state = 759 + self.state = 811 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,81,self._ctx) + _alt = self._interp.adaptivePredict(self._input,88,self._ctx) - self.state = 761 + self.state = 813 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__41) | (1 << SolidityParser.T__53))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)))) != 0): - self.state = 760 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__43) | (1 << SolidityParser.T__49) | (1 << SolidityParser.T__61))) != 0) or ((((_la - 95)) & ~0x3f) == 0 and ((1 << (_la - 95)) & ((1 << (SolidityParser.T__94 - 95)) | (1 << (SolidityParser.LeaveKeyword - 95)) | (1 << (SolidityParser.PayableKeyword - 95)) | (1 << (SolidityParser.GlobalKeyword - 95)) | (1 << (SolidityParser.ConstructorKeyword - 95)) | (1 << (SolidityParser.ReceiveKeyword - 95)) | (1 << (SolidityParser.Identifier - 95)))) != 0): + self.state = 812 self.identifier() - self.state = 763 + self.state = 815 self.match(SolidityParser.T__23) except RecognitionException as re: localctx.exception = re @@ -5863,7 +6231,6 @@ def identifierList(self): class ElementaryTypeNameContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -5907,13 +6274,13 @@ def accept(self, visitor:ParseTreeVisitor): def elementaryTypeName(self): localctx = SolidityParser.ElementaryTypeNameContext(self, self._ctx, self.state) - self.enterRule(localctx, 126, self.RULE_elementaryTypeName) + self.enterRule(localctx, 138, self.RULE_elementaryTypeName) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 765 + self.state = 817 _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__35) | (1 << SolidityParser.T__54) | (1 << SolidityParser.T__55) | (1 << SolidityParser.T__56) | (1 << SolidityParser.T__57))) != 0) or ((((_la - 98)) & ~0x3f) == 0 and ((1 << (_la - 98)) & ((1 << (SolidityParser.Int - 98)) | (1 << (SolidityParser.Uint - 98)) | (1 << (SolidityParser.Byte - 98)) | (1 << (SolidityParser.Fixed - 98)) | (1 << (SolidityParser.Ufixed - 98)))) != 0)): + if not(((((_la - 44)) & ~0x3f) == 0 and ((1 << (_la - 44)) & ((1 << (SolidityParser.T__43 - 44)) | (1 << (SolidityParser.T__62 - 44)) | (1 << (SolidityParser.T__63 - 44)) | (1 << (SolidityParser.T__64 - 44)) | (1 << (SolidityParser.T__65 - 44)) | (1 << (SolidityParser.Int - 44)) | (1 << (SolidityParser.Uint - 44)) | (1 << (SolidityParser.Byte - 44)) | (1 << (SolidityParser.Fixed - 44)) | (1 << (SolidityParser.Ufixed - 44)))) != 0)): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -5928,7 +6295,6 @@ def elementaryTypeName(self): class ExpressionContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -5985,311 +6351,306 @@ def expression(self, _p:int=0): _parentState = self.state localctx = SolidityParser.ExpressionContext(self, self._ctx, _parentState) _prevctx = localctx - _startState = 128 - self.enterRecursionRule(localctx, 128, self.RULE_expression, _p) + _startState = 140 + self.enterRecursionRule(localctx, 140, self.RULE_expression, _p) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 785 + self.state = 837 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,83,self._ctx) + la_ = self._interp.adaptivePredict(self._input,90,self._ctx) if la_ == 1: - self.state = 768 - self.match(SolidityParser.T__60) - self.state = 769 + self.state = 820 + self.match(SolidityParser.T__68) + self.state = 821 self.typeName(0) pass elif la_ == 2: - self.state = 770 + self.state = 822 self.match(SolidityParser.T__22) - self.state = 771 + self.state = 823 self.expression(0) - self.state = 772 + self.state = 824 self.match(SolidityParser.T__23) pass elif la_ == 3: - self.state = 774 + self.state = 826 _la = self._input.LA(1) - if not(_la==SolidityParser.T__58 or _la==SolidityParser.T__59): + if not(_la==SolidityParser.T__66 or _la==SolidityParser.T__67): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 775 + self.state = 827 self.expression(19) pass elif la_ == 4: - self.state = 776 + self.state = 828 _la = self._input.LA(1) - if not(_la==SolidityParser.T__62 or _la==SolidityParser.T__63): + if not(_la==SolidityParser.T__29 or _la==SolidityParser.T__30): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 777 + self.state = 829 self.expression(18) pass elif la_ == 5: - self.state = 778 - _la = self._input.LA(1) - if not(_la==SolidityParser.T__64 or _la==SolidityParser.T__65): - self._errHandler.recoverInline(self) - else: - self._errHandler.reportMatch(self) - self.consume() - self.state = 779 + self.state = 830 + self.match(SolidityParser.T__70) + self.state = 831 self.expression(17) pass elif la_ == 6: - self.state = 780 - self.match(SolidityParser.T__66) - self.state = 781 + self.state = 832 + self.match(SolidityParser.T__71) + self.state = 833 self.expression(16) pass elif la_ == 7: - self.state = 782 - self.match(SolidityParser.T__4) - self.state = 783 + self.state = 834 + self.match(SolidityParser.T__5) + self.state = 835 self.expression(15) pass elif la_ == 8: - self.state = 784 + self.state = 836 self.primaryExpression() pass self._ctx.stop = self._input.LT(-1) - self.state = 861 + self.state = 913 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,87,self._ctx) + _alt = self._interp.adaptivePredict(self._input,94,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 859 + self.state = 911 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,86,self._ctx) + la_ = self._interp.adaptivePredict(self._input,93,self._ctx) if la_ == 1: localctx = SolidityParser.ExpressionContext(self, _parentctx, _parentState) self.pushNewRecursionContext(localctx, _startState, self.RULE_expression) - self.state = 787 + self.state = 839 if not self.precpred(self._ctx, 14): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 14)") - self.state = 788 - self.match(SolidityParser.T__67) - self.state = 789 + self.state = 840 + self.match(SolidityParser.T__72) + self.state = 841 self.expression(15) pass elif la_ == 2: localctx = SolidityParser.ExpressionContext(self, _parentctx, _parentState) self.pushNewRecursionContext(localctx, _startState, self.RULE_expression) - self.state = 790 + self.state = 842 if not self.precpred(self._ctx, 13): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 13)") - self.state = 791 + self.state = 843 _la = self._input.LA(1) - if not(((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (SolidityParser.T__12 - 13)) | (1 << (SolidityParser.T__68 - 13)) | (1 << (SolidityParser.T__69 - 13)))) != 0)): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__2) | (1 << SolidityParser.T__31) | (1 << SolidityParser.T__32))) != 0)): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 792 + self.state = 844 self.expression(14) pass elif la_ == 3: localctx = SolidityParser.ExpressionContext(self, _parentctx, _parentState) self.pushNewRecursionContext(localctx, _startState, self.RULE_expression) - self.state = 793 + self.state = 845 if not self.precpred(self._ctx, 12): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 12)") - self.state = 794 + self.state = 846 _la = self._input.LA(1) - if not(_la==SolidityParser.T__62 or _la==SolidityParser.T__63): + if not(_la==SolidityParser.T__29 or _la==SolidityParser.T__30): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 795 + self.state = 847 self.expression(13) pass elif la_ == 4: localctx = SolidityParser.ExpressionContext(self, _parentctx, _parentState) self.pushNewRecursionContext(localctx, _startState, self.RULE_expression) - self.state = 796 + self.state = 848 if not self.precpred(self._ctx, 11): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 11)") - self.state = 797 + self.state = 849 _la = self._input.LA(1) - if not(_la==SolidityParser.T__70 or _la==SolidityParser.T__71): + if not(_la==SolidityParser.T__73 or _la==SolidityParser.T__74): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 798 + self.state = 850 self.expression(12) pass elif la_ == 5: localctx = SolidityParser.ExpressionContext(self, _parentctx, _parentState) self.pushNewRecursionContext(localctx, _startState, self.RULE_expression) - self.state = 799 + self.state = 851 if not self.precpred(self._ctx, 10): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 10)") - self.state = 800 - self.match(SolidityParser.T__72) - self.state = 801 + self.state = 852 + self.match(SolidityParser.T__28) + self.state = 853 self.expression(11) pass elif la_ == 6: localctx = SolidityParser.ExpressionContext(self, _parentctx, _parentState) self.pushNewRecursionContext(localctx, _startState, self.RULE_expression) - self.state = 802 + self.state = 854 if not self.precpred(self._ctx, 9): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 9)") - self.state = 803 - self.match(SolidityParser.T__3) - self.state = 804 + self.state = 855 + self.match(SolidityParser.T__4) + self.state = 856 self.expression(10) pass elif la_ == 7: localctx = SolidityParser.ExpressionContext(self, _parentctx, _parentState) self.pushNewRecursionContext(localctx, _startState, self.RULE_expression) - self.state = 805 + self.state = 857 if not self.precpred(self._ctx, 8): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 8)") - self.state = 806 - self.match(SolidityParser.T__73) - self.state = 807 + self.state = 858 + self.match(SolidityParser.T__27) + self.state = 859 self.expression(9) pass elif la_ == 8: localctx = SolidityParser.ExpressionContext(self, _parentctx, _parentState) self.pushNewRecursionContext(localctx, _startState, self.RULE_expression) - self.state = 808 + self.state = 860 if not self.precpred(self._ctx, 7): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 7)") - self.state = 809 + self.state = 861 _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__5) | (1 << SolidityParser.T__6) | (1 << SolidityParser.T__7) | (1 << SolidityParser.T__8))) != 0)): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__6) | (1 << SolidityParser.T__7) | (1 << SolidityParser.T__8) | (1 << SolidityParser.T__9))) != 0)): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 810 + self.state = 862 self.expression(8) pass elif la_ == 9: localctx = SolidityParser.ExpressionContext(self, _parentctx, _parentState) self.pushNewRecursionContext(localctx, _startState, self.RULE_expression) - self.state = 811 + self.state = 863 if not self.precpred(self._ctx, 6): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 6)") - self.state = 812 + self.state = 864 _la = self._input.LA(1) - if not(_la==SolidityParser.T__74 or _la==SolidityParser.T__75): + if not(_la==SolidityParser.T__33 or _la==SolidityParser.T__34): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 813 + self.state = 865 self.expression(7) pass elif la_ == 10: localctx = SolidityParser.ExpressionContext(self, _parentctx, _parentState) self.pushNewRecursionContext(localctx, _startState, self.RULE_expression) - self.state = 814 + self.state = 866 if not self.precpred(self._ctx, 5): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 5)") - self.state = 815 - self.match(SolidityParser.T__76) - self.state = 816 + self.state = 867 + self.match(SolidityParser.T__75) + self.state = 868 self.expression(6) pass elif la_ == 11: localctx = SolidityParser.ExpressionContext(self, _parentctx, _parentState) self.pushNewRecursionContext(localctx, _startState, self.RULE_expression) - self.state = 817 + self.state = 869 if not self.precpred(self._ctx, 4): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 4)") - self.state = 818 - self.match(SolidityParser.T__2) - self.state = 819 + self.state = 870 + self.match(SolidityParser.T__3) + self.state = 871 self.expression(5) pass elif la_ == 12: localctx = SolidityParser.ExpressionContext(self, _parentctx, _parentState) self.pushNewRecursionContext(localctx, _startState, self.RULE_expression) - self.state = 820 + self.state = 872 if not self.precpred(self._ctx, 3): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") - self.state = 821 - self.match(SolidityParser.T__77) - self.state = 822 + self.state = 873 + self.match(SolidityParser.T__76) + self.state = 874 self.expression(0) - self.state = 823 - self.match(SolidityParser.T__61) - self.state = 824 + self.state = 875 + self.match(SolidityParser.T__69) + self.state = 876 self.expression(4) pass elif la_ == 13: localctx = SolidityParser.ExpressionContext(self, _parentctx, _parentState) self.pushNewRecursionContext(localctx, _startState, self.RULE_expression) - self.state = 826 + self.state = 878 if not self.precpred(self._ctx, 2): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") - self.state = 827 + self.state = 879 _la = self._input.LA(1) - if not(_la==SolidityParser.T__9 or ((((_la - 79)) & ~0x3f) == 0 and ((1 << (_la - 79)) & ((1 << (SolidityParser.T__78 - 79)) | (1 << (SolidityParser.T__79 - 79)) | (1 << (SolidityParser.T__80 - 79)) | (1 << (SolidityParser.T__81 - 79)) | (1 << (SolidityParser.T__82 - 79)) | (1 << (SolidityParser.T__83 - 79)) | (1 << (SolidityParser.T__84 - 79)) | (1 << (SolidityParser.T__85 - 79)) | (1 << (SolidityParser.T__86 - 79)) | (1 << (SolidityParser.T__87 - 79)))) != 0)): + if not(_la==SolidityParser.T__10 or ((((_la - 78)) & ~0x3f) == 0 and ((1 << (_la - 78)) & ((1 << (SolidityParser.T__77 - 78)) | (1 << (SolidityParser.T__78 - 78)) | (1 << (SolidityParser.T__79 - 78)) | (1 << (SolidityParser.T__80 - 78)) | (1 << (SolidityParser.T__81 - 78)) | (1 << (SolidityParser.T__82 - 78)) | (1 << (SolidityParser.T__83 - 78)) | (1 << (SolidityParser.T__84 - 78)) | (1 << (SolidityParser.T__85 - 78)) | (1 << (SolidityParser.T__86 - 78)))) != 0)): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 828 + self.state = 880 self.expression(3) pass elif la_ == 14: localctx = SolidityParser.ExpressionContext(self, _parentctx, _parentState) self.pushNewRecursionContext(localctx, _startState, self.RULE_expression) - self.state = 829 + self.state = 881 if not self.precpred(self._ctx, 27): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 27)") - self.state = 830 + self.state = 882 _la = self._input.LA(1) - if not(_la==SolidityParser.T__58 or _la==SolidityParser.T__59): + if not(_la==SolidityParser.T__66 or _la==SolidityParser.T__67): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -6299,96 +6660,96 @@ def expression(self, _p:int=0): elif la_ == 15: localctx = SolidityParser.ExpressionContext(self, _parentctx, _parentState) self.pushNewRecursionContext(localctx, _startState, self.RULE_expression) - self.state = 831 + self.state = 883 if not self.precpred(self._ctx, 25): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 25)") - self.state = 832 - self.match(SolidityParser.T__33) - self.state = 833 + self.state = 884 + self.match(SolidityParser.T__41) + self.state = 885 self.expression(0) - self.state = 834 - self.match(SolidityParser.T__34) + self.state = 886 + self.match(SolidityParser.T__42) pass elif la_ == 16: localctx = SolidityParser.ExpressionContext(self, _parentctx, _parentState) self.pushNewRecursionContext(localctx, _startState, self.RULE_expression) - self.state = 836 + self.state = 888 if not self.precpred(self._ctx, 24): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 24)") - self.state = 837 - self.match(SolidityParser.T__33) - self.state = 839 + self.state = 889 + self.match(SolidityParser.T__41) + self.state = 891 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 5)) & ~0x3f) == 0 and ((1 << (_la - 5)) & ((1 << (SolidityParser.T__4 - 5)) | (1 << (SolidityParser.T__13 - 5)) | (1 << (SolidityParser.T__22 - 5)) | (1 << (SolidityParser.T__24 - 5)) | (1 << (SolidityParser.T__33 - 5)) | (1 << (SolidityParser.T__35 - 5)) | (1 << (SolidityParser.T__41 - 5)) | (1 << (SolidityParser.T__53 - 5)) | (1 << (SolidityParser.T__54 - 5)) | (1 << (SolidityParser.T__55 - 5)) | (1 << (SolidityParser.T__56 - 5)) | (1 << (SolidityParser.T__57 - 5)) | (1 << (SolidityParser.T__58 - 5)) | (1 << (SolidityParser.T__59 - 5)) | (1 << (SolidityParser.T__60 - 5)) | (1 << (SolidityParser.T__62 - 5)) | (1 << (SolidityParser.T__63 - 5)) | (1 << (SolidityParser.T__64 - 5)) | (1 << (SolidityParser.T__65 - 5)) | (1 << (SolidityParser.T__66 - 5)))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.Int - 96)) | (1 << (SolidityParser.Uint - 96)) | (1 << (SolidityParser.Byte - 96)) | (1 << (SolidityParser.Fixed - 96)) | (1 << (SolidityParser.Ufixed - 96)) | (1 << (SolidityParser.BooleanLiteral - 96)) | (1 << (SolidityParser.DecimalNumber - 96)) | (1 << (SolidityParser.HexNumber - 96)) | (1 << (SolidityParser.HexLiteralFragment - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.TypeKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)) | (1 << (SolidityParser.StringLiteralFragment - 96)))) != 0): - self.state = 838 + if ((((_la - 6)) & ~0x3f) == 0 and ((1 << (_la - 6)) & ((1 << (SolidityParser.T__5 - 6)) | (1 << (SolidityParser.T__13 - 6)) | (1 << (SolidityParser.T__22 - 6)) | (1 << (SolidityParser.T__24 - 6)) | (1 << (SolidityParser.T__29 - 6)) | (1 << (SolidityParser.T__30 - 6)) | (1 << (SolidityParser.T__37 - 6)) | (1 << (SolidityParser.T__41 - 6)) | (1 << (SolidityParser.T__43 - 6)) | (1 << (SolidityParser.T__45 - 6)) | (1 << (SolidityParser.T__49 - 6)) | (1 << (SolidityParser.T__61 - 6)) | (1 << (SolidityParser.T__62 - 6)) | (1 << (SolidityParser.T__63 - 6)) | (1 << (SolidityParser.T__64 - 6)) | (1 << (SolidityParser.T__65 - 6)) | (1 << (SolidityParser.T__66 - 6)) | (1 << (SolidityParser.T__67 - 6)) | (1 << (SolidityParser.T__68 - 6)))) != 0) or ((((_la - 71)) & ~0x3f) == 0 and ((1 << (_la - 71)) & ((1 << (SolidityParser.T__70 - 71)) | (1 << (SolidityParser.T__71 - 71)) | (1 << (SolidityParser.T__94 - 71)) | (1 << (SolidityParser.Int - 71)) | (1 << (SolidityParser.Uint - 71)) | (1 << (SolidityParser.Byte - 71)) | (1 << (SolidityParser.Fixed - 71)) | (1 << (SolidityParser.Ufixed - 71)) | (1 << (SolidityParser.BooleanLiteral - 71)) | (1 << (SolidityParser.DecimalNumber - 71)) | (1 << (SolidityParser.HexNumber - 71)) | (1 << (SolidityParser.HexLiteralFragment - 71)) | (1 << (SolidityParser.LeaveKeyword - 71)) | (1 << (SolidityParser.PayableKeyword - 71)) | (1 << (SolidityParser.TypeKeyword - 71)) | (1 << (SolidityParser.GlobalKeyword - 71)) | (1 << (SolidityParser.ConstructorKeyword - 71)) | (1 << (SolidityParser.ReceiveKeyword - 71)) | (1 << (SolidityParser.Identifier - 71)) | (1 << (SolidityParser.StringLiteralFragment - 71)))) != 0): + self.state = 890 self.expression(0) - self.state = 841 - self.match(SolidityParser.T__61) - self.state = 843 + self.state = 893 + self.match(SolidityParser.T__69) + self.state = 895 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 5)) & ~0x3f) == 0 and ((1 << (_la - 5)) & ((1 << (SolidityParser.T__4 - 5)) | (1 << (SolidityParser.T__13 - 5)) | (1 << (SolidityParser.T__22 - 5)) | (1 << (SolidityParser.T__24 - 5)) | (1 << (SolidityParser.T__33 - 5)) | (1 << (SolidityParser.T__35 - 5)) | (1 << (SolidityParser.T__41 - 5)) | (1 << (SolidityParser.T__53 - 5)) | (1 << (SolidityParser.T__54 - 5)) | (1 << (SolidityParser.T__55 - 5)) | (1 << (SolidityParser.T__56 - 5)) | (1 << (SolidityParser.T__57 - 5)) | (1 << (SolidityParser.T__58 - 5)) | (1 << (SolidityParser.T__59 - 5)) | (1 << (SolidityParser.T__60 - 5)) | (1 << (SolidityParser.T__62 - 5)) | (1 << (SolidityParser.T__63 - 5)) | (1 << (SolidityParser.T__64 - 5)) | (1 << (SolidityParser.T__65 - 5)) | (1 << (SolidityParser.T__66 - 5)))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.Int - 96)) | (1 << (SolidityParser.Uint - 96)) | (1 << (SolidityParser.Byte - 96)) | (1 << (SolidityParser.Fixed - 96)) | (1 << (SolidityParser.Ufixed - 96)) | (1 << (SolidityParser.BooleanLiteral - 96)) | (1 << (SolidityParser.DecimalNumber - 96)) | (1 << (SolidityParser.HexNumber - 96)) | (1 << (SolidityParser.HexLiteralFragment - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.TypeKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)) | (1 << (SolidityParser.StringLiteralFragment - 96)))) != 0): - self.state = 842 + if ((((_la - 6)) & ~0x3f) == 0 and ((1 << (_la - 6)) & ((1 << (SolidityParser.T__5 - 6)) | (1 << (SolidityParser.T__13 - 6)) | (1 << (SolidityParser.T__22 - 6)) | (1 << (SolidityParser.T__24 - 6)) | (1 << (SolidityParser.T__29 - 6)) | (1 << (SolidityParser.T__30 - 6)) | (1 << (SolidityParser.T__37 - 6)) | (1 << (SolidityParser.T__41 - 6)) | (1 << (SolidityParser.T__43 - 6)) | (1 << (SolidityParser.T__45 - 6)) | (1 << (SolidityParser.T__49 - 6)) | (1 << (SolidityParser.T__61 - 6)) | (1 << (SolidityParser.T__62 - 6)) | (1 << (SolidityParser.T__63 - 6)) | (1 << (SolidityParser.T__64 - 6)) | (1 << (SolidityParser.T__65 - 6)) | (1 << (SolidityParser.T__66 - 6)) | (1 << (SolidityParser.T__67 - 6)) | (1 << (SolidityParser.T__68 - 6)))) != 0) or ((((_la - 71)) & ~0x3f) == 0 and ((1 << (_la - 71)) & ((1 << (SolidityParser.T__70 - 71)) | (1 << (SolidityParser.T__71 - 71)) | (1 << (SolidityParser.T__94 - 71)) | (1 << (SolidityParser.Int - 71)) | (1 << (SolidityParser.Uint - 71)) | (1 << (SolidityParser.Byte - 71)) | (1 << (SolidityParser.Fixed - 71)) | (1 << (SolidityParser.Ufixed - 71)) | (1 << (SolidityParser.BooleanLiteral - 71)) | (1 << (SolidityParser.DecimalNumber - 71)) | (1 << (SolidityParser.HexNumber - 71)) | (1 << (SolidityParser.HexLiteralFragment - 71)) | (1 << (SolidityParser.LeaveKeyword - 71)) | (1 << (SolidityParser.PayableKeyword - 71)) | (1 << (SolidityParser.TypeKeyword - 71)) | (1 << (SolidityParser.GlobalKeyword - 71)) | (1 << (SolidityParser.ConstructorKeyword - 71)) | (1 << (SolidityParser.ReceiveKeyword - 71)) | (1 << (SolidityParser.Identifier - 71)) | (1 << (SolidityParser.StringLiteralFragment - 71)))) != 0): + self.state = 894 self.expression(0) - self.state = 845 - self.match(SolidityParser.T__34) + self.state = 897 + self.match(SolidityParser.T__42) pass elif la_ == 17: localctx = SolidityParser.ExpressionContext(self, _parentctx, _parentState) self.pushNewRecursionContext(localctx, _startState, self.RULE_expression) - self.state = 846 + self.state = 898 if not self.precpred(self._ctx, 23): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 23)") - self.state = 847 - self.match(SolidityParser.T__36) - self.state = 848 + self.state = 899 + self.match(SolidityParser.T__44) + self.state = 900 self.identifier() pass elif la_ == 18: localctx = SolidityParser.ExpressionContext(self, _parentctx, _parentState) self.pushNewRecursionContext(localctx, _startState, self.RULE_expression) - self.state = 849 + self.state = 901 if not self.precpred(self._ctx, 22): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 22)") - self.state = 850 + self.state = 902 self.match(SolidityParser.T__14) - self.state = 851 + self.state = 903 self.nameValueList() - self.state = 852 + self.state = 904 self.match(SolidityParser.T__16) pass elif la_ == 19: localctx = SolidityParser.ExpressionContext(self, _parentctx, _parentState) self.pushNewRecursionContext(localctx, _startState, self.RULE_expression) - self.state = 854 + self.state = 906 if not self.precpred(self._ctx, 21): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 21)") - self.state = 855 + self.state = 907 self.match(SolidityParser.T__22) - self.state = 856 + self.state = 908 self.functionCallArguments() - self.state = 857 + self.state = 909 self.match(SolidityParser.T__23) pass - self.state = 863 + self.state = 915 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,87,self._ctx) + _alt = self._interp.adaptivePredict(self._input,94,self._ctx) except RecognitionException as re: localctx.exception = re @@ -6400,7 +6761,6 @@ def expression(self, _p:int=0): class PrimaryExpressionContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -6435,8 +6795,8 @@ def tupleExpression(self): return self.getTypedRuleContext(SolidityParser.TupleExpressionContext,0) - def typeNameExpression(self): - return self.getTypedRuleContext(SolidityParser.TypeNameExpressionContext,0) + def typeName(self): + return self.getTypedRuleContext(SolidityParser.TypeNameContext,0) def getRuleIndex(self): @@ -6462,83 +6822,63 @@ def accept(self, visitor:ParseTreeVisitor): def primaryExpression(self): localctx = SolidityParser.PrimaryExpressionContext(self, self._ctx, self.state) - self.enterRule(localctx, 130, self.RULE_primaryExpression) + self.enterRule(localctx, 142, self.RULE_primaryExpression) try: - self.state = 881 + self.state = 925 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,90,self._ctx) + la_ = self._interp.adaptivePredict(self._input,95,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 864 + self.state = 916 self.match(SolidityParser.BooleanLiteral) pass elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 865 + self.state = 917 self.numberLiteral() pass elif la_ == 3: self.enterOuterAlt(localctx, 3) - self.state = 866 + self.state = 918 self.hexLiteral() pass elif la_ == 4: self.enterOuterAlt(localctx, 4) - self.state = 867 + self.state = 919 self.stringLiteral() pass elif la_ == 5: self.enterOuterAlt(localctx, 5) - self.state = 868 + self.state = 920 self.identifier() - self.state = 871 - self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,88,self._ctx) - if la_ == 1: - self.state = 869 - self.match(SolidityParser.T__33) - self.state = 870 - self.match(SolidityParser.T__34) - - pass elif la_ == 6: self.enterOuterAlt(localctx, 6) - self.state = 873 + self.state = 921 self.match(SolidityParser.TypeKeyword) pass elif la_ == 7: self.enterOuterAlt(localctx, 7) - self.state = 874 + self.state = 922 self.match(SolidityParser.PayableKeyword) pass elif la_ == 8: self.enterOuterAlt(localctx, 8) - self.state = 875 + self.state = 923 self.tupleExpression() pass elif la_ == 9: self.enterOuterAlt(localctx, 9) - self.state = 876 - self.typeNameExpression() - self.state = 879 - self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,89,self._ctx) - if la_ == 1: - self.state = 877 - self.match(SolidityParser.T__33) - self.state = 878 - self.match(SolidityParser.T__34) - - + self.state = 924 + self.typeName(0) pass @@ -6552,7 +6892,6 @@ def primaryExpression(self): class ExpressionListContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -6588,21 +6927,21 @@ def accept(self, visitor:ParseTreeVisitor): def expressionList(self): localctx = SolidityParser.ExpressionListContext(self, self._ctx, self.state) - self.enterRule(localctx, 132, self.RULE_expressionList) + self.enterRule(localctx, 144, self.RULE_expressionList) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 883 + self.state = 927 self.expression(0) - self.state = 888 + self.state = 932 self._errHandler.sync(self) _la = self._input.LA(1) while _la==SolidityParser.T__15: - self.state = 884 + self.state = 928 self.match(SolidityParser.T__15) - self.state = 885 + self.state = 929 self.expression(0) - self.state = 890 + self.state = 934 self._errHandler.sync(self) _la = self._input.LA(1) @@ -6616,7 +6955,6 @@ def expressionList(self): class NameValueListContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -6652,30 +6990,30 @@ def accept(self, visitor:ParseTreeVisitor): def nameValueList(self): localctx = SolidityParser.NameValueListContext(self, self._ctx, self.state) - self.enterRule(localctx, 134, self.RULE_nameValueList) + self.enterRule(localctx, 146, self.RULE_nameValueList) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 891 + self.state = 935 self.nameValue() - self.state = 896 + self.state = 940 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,92,self._ctx) + _alt = self._interp.adaptivePredict(self._input,97,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 892 + self.state = 936 self.match(SolidityParser.T__15) - self.state = 893 + self.state = 937 self.nameValue() - self.state = 898 + self.state = 942 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,92,self._ctx) + _alt = self._interp.adaptivePredict(self._input,97,self._ctx) - self.state = 900 + self.state = 944 self._errHandler.sync(self) _la = self._input.LA(1) if _la==SolidityParser.T__15: - self.state = 899 + self.state = 943 self.match(SolidityParser.T__15) @@ -6689,7 +7027,6 @@ def nameValueList(self): class NameValueContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -6726,14 +7063,14 @@ def accept(self, visitor:ParseTreeVisitor): def nameValue(self): localctx = SolidityParser.NameValueContext(self, self._ctx, self.state) - self.enterRule(localctx, 136, self.RULE_nameValue) + self.enterRule(localctx, 148, self.RULE_nameValue) try: self.enterOuterAlt(localctx, 1) - self.state = 902 + self.state = 946 self.identifier() - self.state = 903 - self.match(SolidityParser.T__61) - self.state = 904 + self.state = 947 + self.match(SolidityParser.T__69) + self.state = 948 self.expression(0) except RecognitionException as re: localctx.exception = re @@ -6745,7 +7082,6 @@ def nameValue(self): class FunctionCallArgumentsContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -6782,34 +7118,34 @@ def accept(self, visitor:ParseTreeVisitor): def functionCallArguments(self): localctx = SolidityParser.FunctionCallArgumentsContext(self, self._ctx, self.state) - self.enterRule(localctx, 138, self.RULE_functionCallArguments) + self.enterRule(localctx, 150, self.RULE_functionCallArguments) self._la = 0 # Token type try: - self.state = 914 + self.state = 958 self._errHandler.sync(self) token = self._input.LA(1) if token in [SolidityParser.T__14]: self.enterOuterAlt(localctx, 1) - self.state = 906 + self.state = 950 self.match(SolidityParser.T__14) - self.state = 908 + self.state = 952 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__41) | (1 << SolidityParser.T__53))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)))) != 0): - self.state = 907 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__43) | (1 << SolidityParser.T__49) | (1 << SolidityParser.T__61))) != 0) or ((((_la - 95)) & ~0x3f) == 0 and ((1 << (_la - 95)) & ((1 << (SolidityParser.T__94 - 95)) | (1 << (SolidityParser.LeaveKeyword - 95)) | (1 << (SolidityParser.PayableKeyword - 95)) | (1 << (SolidityParser.GlobalKeyword - 95)) | (1 << (SolidityParser.ConstructorKeyword - 95)) | (1 << (SolidityParser.ReceiveKeyword - 95)) | (1 << (SolidityParser.Identifier - 95)))) != 0): + self.state = 951 self.nameValueList() - self.state = 910 + self.state = 954 self.match(SolidityParser.T__16) pass - elif token in [SolidityParser.T__4, SolidityParser.T__13, SolidityParser.T__22, SolidityParser.T__23, SolidityParser.T__24, SolidityParser.T__33, SolidityParser.T__35, SolidityParser.T__41, SolidityParser.T__53, SolidityParser.T__54, SolidityParser.T__55, SolidityParser.T__56, SolidityParser.T__57, SolidityParser.T__58, SolidityParser.T__59, SolidityParser.T__60, SolidityParser.T__62, SolidityParser.T__63, SolidityParser.T__64, SolidityParser.T__65, SolidityParser.T__66, SolidityParser.T__95, SolidityParser.Int, SolidityParser.Uint, SolidityParser.Byte, SolidityParser.Fixed, SolidityParser.Ufixed, SolidityParser.BooleanLiteral, SolidityParser.DecimalNumber, SolidityParser.HexNumber, SolidityParser.HexLiteralFragment, SolidityParser.LeaveKeyword, SolidityParser.PayableKeyword, SolidityParser.TypeKeyword, SolidityParser.ConstructorKeyword, SolidityParser.ReceiveKeyword, SolidityParser.Identifier, SolidityParser.StringLiteralFragment]: + elif token in [SolidityParser.T__5, SolidityParser.T__13, SolidityParser.T__22, SolidityParser.T__23, SolidityParser.T__24, SolidityParser.T__29, SolidityParser.T__30, SolidityParser.T__37, SolidityParser.T__41, SolidityParser.T__43, SolidityParser.T__45, SolidityParser.T__49, SolidityParser.T__61, SolidityParser.T__62, SolidityParser.T__63, SolidityParser.T__64, SolidityParser.T__65, SolidityParser.T__66, SolidityParser.T__67, SolidityParser.T__68, SolidityParser.T__70, SolidityParser.T__71, SolidityParser.T__94, SolidityParser.Int, SolidityParser.Uint, SolidityParser.Byte, SolidityParser.Fixed, SolidityParser.Ufixed, SolidityParser.BooleanLiteral, SolidityParser.DecimalNumber, SolidityParser.HexNumber, SolidityParser.HexLiteralFragment, SolidityParser.LeaveKeyword, SolidityParser.PayableKeyword, SolidityParser.TypeKeyword, SolidityParser.GlobalKeyword, SolidityParser.ConstructorKeyword, SolidityParser.ReceiveKeyword, SolidityParser.Identifier, SolidityParser.StringLiteralFragment]: self.enterOuterAlt(localctx, 2) - self.state = 912 + self.state = 956 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 5)) & ~0x3f) == 0 and ((1 << (_la - 5)) & ((1 << (SolidityParser.T__4 - 5)) | (1 << (SolidityParser.T__13 - 5)) | (1 << (SolidityParser.T__22 - 5)) | (1 << (SolidityParser.T__24 - 5)) | (1 << (SolidityParser.T__33 - 5)) | (1 << (SolidityParser.T__35 - 5)) | (1 << (SolidityParser.T__41 - 5)) | (1 << (SolidityParser.T__53 - 5)) | (1 << (SolidityParser.T__54 - 5)) | (1 << (SolidityParser.T__55 - 5)) | (1 << (SolidityParser.T__56 - 5)) | (1 << (SolidityParser.T__57 - 5)) | (1 << (SolidityParser.T__58 - 5)) | (1 << (SolidityParser.T__59 - 5)) | (1 << (SolidityParser.T__60 - 5)) | (1 << (SolidityParser.T__62 - 5)) | (1 << (SolidityParser.T__63 - 5)) | (1 << (SolidityParser.T__64 - 5)) | (1 << (SolidityParser.T__65 - 5)) | (1 << (SolidityParser.T__66 - 5)))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.Int - 96)) | (1 << (SolidityParser.Uint - 96)) | (1 << (SolidityParser.Byte - 96)) | (1 << (SolidityParser.Fixed - 96)) | (1 << (SolidityParser.Ufixed - 96)) | (1 << (SolidityParser.BooleanLiteral - 96)) | (1 << (SolidityParser.DecimalNumber - 96)) | (1 << (SolidityParser.HexNumber - 96)) | (1 << (SolidityParser.HexLiteralFragment - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.TypeKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)) | (1 << (SolidityParser.StringLiteralFragment - 96)))) != 0): - self.state = 911 + if ((((_la - 6)) & ~0x3f) == 0 and ((1 << (_la - 6)) & ((1 << (SolidityParser.T__5 - 6)) | (1 << (SolidityParser.T__13 - 6)) | (1 << (SolidityParser.T__22 - 6)) | (1 << (SolidityParser.T__24 - 6)) | (1 << (SolidityParser.T__29 - 6)) | (1 << (SolidityParser.T__30 - 6)) | (1 << (SolidityParser.T__37 - 6)) | (1 << (SolidityParser.T__41 - 6)) | (1 << (SolidityParser.T__43 - 6)) | (1 << (SolidityParser.T__45 - 6)) | (1 << (SolidityParser.T__49 - 6)) | (1 << (SolidityParser.T__61 - 6)) | (1 << (SolidityParser.T__62 - 6)) | (1 << (SolidityParser.T__63 - 6)) | (1 << (SolidityParser.T__64 - 6)) | (1 << (SolidityParser.T__65 - 6)) | (1 << (SolidityParser.T__66 - 6)) | (1 << (SolidityParser.T__67 - 6)) | (1 << (SolidityParser.T__68 - 6)))) != 0) or ((((_la - 71)) & ~0x3f) == 0 and ((1 << (_la - 71)) & ((1 << (SolidityParser.T__70 - 71)) | (1 << (SolidityParser.T__71 - 71)) | (1 << (SolidityParser.T__94 - 71)) | (1 << (SolidityParser.Int - 71)) | (1 << (SolidityParser.Uint - 71)) | (1 << (SolidityParser.Byte - 71)) | (1 << (SolidityParser.Fixed - 71)) | (1 << (SolidityParser.Ufixed - 71)) | (1 << (SolidityParser.BooleanLiteral - 71)) | (1 << (SolidityParser.DecimalNumber - 71)) | (1 << (SolidityParser.HexNumber - 71)) | (1 << (SolidityParser.HexLiteralFragment - 71)) | (1 << (SolidityParser.LeaveKeyword - 71)) | (1 << (SolidityParser.PayableKeyword - 71)) | (1 << (SolidityParser.TypeKeyword - 71)) | (1 << (SolidityParser.GlobalKeyword - 71)) | (1 << (SolidityParser.ConstructorKeyword - 71)) | (1 << (SolidityParser.ReceiveKeyword - 71)) | (1 << (SolidityParser.Identifier - 71)) | (1 << (SolidityParser.StringLiteralFragment - 71)))) != 0): + self.state = 955 self.expressionList() @@ -6827,7 +7163,6 @@ def functionCallArguments(self): class FunctionCallContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -6864,16 +7199,16 @@ def accept(self, visitor:ParseTreeVisitor): def functionCall(self): localctx = SolidityParser.FunctionCallContext(self, self._ctx, self.state) - self.enterRule(localctx, 140, self.RULE_functionCall) + self.enterRule(localctx, 152, self.RULE_functionCall) try: self.enterOuterAlt(localctx, 1) - self.state = 916 + self.state = 960 self.expression(0) - self.state = 917 + self.state = 961 self.match(SolidityParser.T__22) - self.state = 918 + self.state = 962 self.functionCallArguments() - self.state = 919 + self.state = 963 self.match(SolidityParser.T__23) except RecognitionException as re: localctx.exception = re @@ -6885,7 +7220,6 @@ def functionCall(self): class AssemblyBlockContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -6921,23 +7255,23 @@ def accept(self, visitor:ParseTreeVisitor): def assemblyBlock(self): localctx = SolidityParser.AssemblyBlockContext(self, self._ctx, self.state) - self.enterRule(localctx, 142, self.RULE_assemblyBlock) + self.enterRule(localctx, 154, self.RULE_assemblyBlock) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 921 + self.state = 965 self.match(SolidityParser.T__14) - self.state = 925 + self.state = 969 self._errHandler.sync(self) _la = self._input.LA(1) - while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__14) | (1 << SolidityParser.T__22) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__26) | (1 << SolidityParser.T__29) | (1 << SolidityParser.T__35) | (1 << SolidityParser.T__41) | (1 << SolidityParser.T__42) | (1 << SolidityParser.T__48) | (1 << SolidityParser.T__50) | (1 << SolidityParser.T__53) | (1 << SolidityParser.T__57))) != 0) or ((((_la - 89)) & ~0x3f) == 0 and ((1 << (_la - 89)) & ((1 << (SolidityParser.T__88 - 89)) | (1 << (SolidityParser.T__90 - 89)) | (1 << (SolidityParser.T__91 - 89)) | (1 << (SolidityParser.T__95 - 89)) | (1 << (SolidityParser.DecimalNumber - 89)) | (1 << (SolidityParser.HexNumber - 89)) | (1 << (SolidityParser.HexLiteralFragment - 89)) | (1 << (SolidityParser.BreakKeyword - 89)) | (1 << (SolidityParser.ContinueKeyword - 89)) | (1 << (SolidityParser.LeaveKeyword - 89)) | (1 << (SolidityParser.PayableKeyword - 89)) | (1 << (SolidityParser.ConstructorKeyword - 89)) | (1 << (SolidityParser.ReceiveKeyword - 89)) | (1 << (SolidityParser.Identifier - 89)) | (1 << (SolidityParser.StringLiteralFragment - 89)))) != 0): - self.state = 922 + while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__14) | (1 << SolidityParser.T__22) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__26) | (1 << SolidityParser.T__37) | (1 << SolidityParser.T__43) | (1 << SolidityParser.T__49) | (1 << SolidityParser.T__50) | (1 << SolidityParser.T__58) | (1 << SolidityParser.T__61))) != 0) or ((((_la - 66)) & ~0x3f) == 0 and ((1 << (_la - 66)) & ((1 << (SolidityParser.T__65 - 66)) | (1 << (SolidityParser.T__87 - 66)) | (1 << (SolidityParser.T__90 - 66)) | (1 << (SolidityParser.T__94 - 66)) | (1 << (SolidityParser.BooleanLiteral - 66)) | (1 << (SolidityParser.DecimalNumber - 66)) | (1 << (SolidityParser.HexNumber - 66)) | (1 << (SolidityParser.HexLiteralFragment - 66)) | (1 << (SolidityParser.BreakKeyword - 66)) | (1 << (SolidityParser.ContinueKeyword - 66)) | (1 << (SolidityParser.LeaveKeyword - 66)) | (1 << (SolidityParser.PayableKeyword - 66)) | (1 << (SolidityParser.GlobalKeyword - 66)) | (1 << (SolidityParser.ConstructorKeyword - 66)) | (1 << (SolidityParser.ReceiveKeyword - 66)) | (1 << (SolidityParser.Identifier - 66)) | (1 << (SolidityParser.StringLiteralFragment - 66)))) != 0): + self.state = 966 self.assemblyItem() - self.state = 927 + self.state = 971 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 928 + self.state = 972 self.match(SolidityParser.T__16) except RecognitionException as re: localctx.exception = re @@ -6949,7 +7283,6 @@ def assemblyBlock(self): class AssemblyItemContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -7008,10 +7341,6 @@ def ContinueKeyword(self): def LeaveKeyword(self): return self.getToken(SolidityParser.LeaveKeyword, 0) - def subAssembly(self): - return self.getTypedRuleContext(SolidityParser.SubAssemblyContext,0) - - def numberLiteral(self): return self.getTypedRuleContext(SolidityParser.NumberLiteralContext,0) @@ -7047,116 +7376,110 @@ def accept(self, visitor:ParseTreeVisitor): def assemblyItem(self): localctx = SolidityParser.AssemblyItemContext(self, self._ctx, self.state) - self.enterRule(localctx, 144, self.RULE_assemblyItem) + self.enterRule(localctx, 156, self.RULE_assemblyItem) try: - self.state = 948 + self.state = 991 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,98,self._ctx) + la_ = self._interp.adaptivePredict(self._input,103,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 930 + self.state = 974 self.identifier() pass elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 931 + self.state = 975 self.assemblyBlock() pass elif la_ == 3: self.enterOuterAlt(localctx, 3) - self.state = 932 + self.state = 976 self.assemblyExpression() pass elif la_ == 4: self.enterOuterAlt(localctx, 4) - self.state = 933 + self.state = 977 self.assemblyLocalDefinition() pass elif la_ == 5: self.enterOuterAlt(localctx, 5) - self.state = 934 + self.state = 978 self.assemblyAssignment() pass elif la_ == 6: self.enterOuterAlt(localctx, 6) - self.state = 935 + self.state = 979 self.assemblyStackAssignment() pass elif la_ == 7: self.enterOuterAlt(localctx, 7) - self.state = 936 + self.state = 980 self.labelDefinition() pass elif la_ == 8: self.enterOuterAlt(localctx, 8) - self.state = 937 + self.state = 981 self.assemblySwitch() pass elif la_ == 9: self.enterOuterAlt(localctx, 9) - self.state = 938 + self.state = 982 self.assemblyFunctionDefinition() pass elif la_ == 10: self.enterOuterAlt(localctx, 10) - self.state = 939 + self.state = 983 self.assemblyFor() pass elif la_ == 11: self.enterOuterAlt(localctx, 11) - self.state = 940 + self.state = 984 self.assemblyIf() pass elif la_ == 12: self.enterOuterAlt(localctx, 12) - self.state = 941 + self.state = 985 self.match(SolidityParser.BreakKeyword) pass elif la_ == 13: self.enterOuterAlt(localctx, 13) - self.state = 942 + self.state = 986 self.match(SolidityParser.ContinueKeyword) pass elif la_ == 14: self.enterOuterAlt(localctx, 14) - self.state = 943 + self.state = 987 self.match(SolidityParser.LeaveKeyword) pass elif la_ == 15: self.enterOuterAlt(localctx, 15) - self.state = 944 - self.subAssembly() + self.state = 988 + self.numberLiteral() pass elif la_ == 16: self.enterOuterAlt(localctx, 16) - self.state = 945 - self.numberLiteral() + self.state = 989 + self.stringLiteral() pass elif la_ == 17: self.enterOuterAlt(localctx, 17) - self.state = 946 - self.stringLiteral() - pass - - elif la_ == 18: - self.enterOuterAlt(localctx, 18) - self.state = 947 + self.state = 990 self.hexLiteral() pass @@ -7171,7 +7494,6 @@ def assemblyItem(self): class AssemblyExpressionContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -7212,26 +7534,26 @@ def accept(self, visitor:ParseTreeVisitor): def assemblyExpression(self): localctx = SolidityParser.AssemblyExpressionContext(self, self._ctx, self.state) - self.enterRule(localctx, 146, self.RULE_assemblyExpression) + self.enterRule(localctx, 158, self.RULE_assemblyExpression) try: - self.state = 953 + self.state = 996 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,99,self._ctx) + la_ = self._interp.adaptivePredict(self._input,104,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 950 + self.state = 993 self.assemblyCall() pass elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 951 + self.state = 994 self.assemblyLiteral() pass elif la_ == 3: self.enterOuterAlt(localctx, 3) - self.state = 952 + self.state = 995 self.assemblyMember() pass @@ -7246,7 +7568,6 @@ def assemblyExpression(self): class AssemblyMemberContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -7282,14 +7603,14 @@ def accept(self, visitor:ParseTreeVisitor): def assemblyMember(self): localctx = SolidityParser.AssemblyMemberContext(self, self._ctx, self.state) - self.enterRule(localctx, 148, self.RULE_assemblyMember) + self.enterRule(localctx, 160, self.RULE_assemblyMember) try: self.enterOuterAlt(localctx, 1) - self.state = 955 + self.state = 998 self.identifier() - self.state = 956 - self.match(SolidityParser.T__36) - self.state = 957 + self.state = 999 + self.match(SolidityParser.T__44) + self.state = 1000 self.identifier() except RecognitionException as re: localctx.exception = re @@ -7301,7 +7622,6 @@ def assemblyMember(self): class AssemblyCallContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -7341,59 +7661,61 @@ def accept(self, visitor:ParseTreeVisitor): def assemblyCall(self): localctx = SolidityParser.AssemblyCallContext(self, self._ctx, self.state) - self.enterRule(localctx, 150, self.RULE_assemblyCall) + self.enterRule(localctx, 162, self.RULE_assemblyCall) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 963 + self.state = 1006 self._errHandler.sync(self) - token = self._input.LA(1) - if token in [SolidityParser.T__50]: - self.state = 959 - self.match(SolidityParser.T__50) + la_ = self._interp.adaptivePredict(self._input,105,self._ctx) + if la_ == 1: + self.state = 1002 + self.match(SolidityParser.T__58) pass - elif token in [SolidityParser.T__35]: - self.state = 960 - self.match(SolidityParser.T__35) + + elif la_ == 2: + self.state = 1003 + self.match(SolidityParser.T__43) pass - elif token in [SolidityParser.T__57]: - self.state = 961 - self.match(SolidityParser.T__57) + + elif la_ == 3: + self.state = 1004 + self.match(SolidityParser.T__65) pass - elif token in [SolidityParser.T__13, SolidityParser.T__24, SolidityParser.T__41, SolidityParser.T__53, SolidityParser.T__95, SolidityParser.LeaveKeyword, SolidityParser.PayableKeyword, SolidityParser.ConstructorKeyword, SolidityParser.ReceiveKeyword, SolidityParser.Identifier]: - self.state = 962 + + elif la_ == 4: + self.state = 1005 self.identifier() pass - else: - raise NoViableAltException(self) - self.state = 977 + + self.state = 1020 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,103,self._ctx) + la_ = self._interp.adaptivePredict(self._input,108,self._ctx) if la_ == 1: - self.state = 965 + self.state = 1008 self.match(SolidityParser.T__22) - self.state = 967 + self.state = 1010 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__35) | (1 << SolidityParser.T__41) | (1 << SolidityParser.T__50) | (1 << SolidityParser.T__53) | (1 << SolidityParser.T__57))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.DecimalNumber - 96)) | (1 << (SolidityParser.HexNumber - 96)) | (1 << (SolidityParser.HexLiteralFragment - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)) | (1 << (SolidityParser.StringLiteralFragment - 96)))) != 0): - self.state = 966 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__43) | (1 << SolidityParser.T__49) | (1 << SolidityParser.T__58) | (1 << SolidityParser.T__61))) != 0) or ((((_la - 66)) & ~0x3f) == 0 and ((1 << (_la - 66)) & ((1 << (SolidityParser.T__65 - 66)) | (1 << (SolidityParser.T__94 - 66)) | (1 << (SolidityParser.BooleanLiteral - 66)) | (1 << (SolidityParser.DecimalNumber - 66)) | (1 << (SolidityParser.HexNumber - 66)) | (1 << (SolidityParser.HexLiteralFragment - 66)) | (1 << (SolidityParser.LeaveKeyword - 66)) | (1 << (SolidityParser.PayableKeyword - 66)) | (1 << (SolidityParser.GlobalKeyword - 66)) | (1 << (SolidityParser.ConstructorKeyword - 66)) | (1 << (SolidityParser.ReceiveKeyword - 66)) | (1 << (SolidityParser.Identifier - 66)) | (1 << (SolidityParser.StringLiteralFragment - 66)))) != 0): + self.state = 1009 self.assemblyExpression() - self.state = 973 + self.state = 1016 self._errHandler.sync(self) _la = self._input.LA(1) while _la==SolidityParser.T__15: - self.state = 969 + self.state = 1012 self.match(SolidityParser.T__15) - self.state = 970 + self.state = 1013 self.assemblyExpression() - self.state = 975 + self.state = 1018 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 976 + self.state = 1019 self.match(SolidityParser.T__23) @@ -7407,7 +7729,6 @@ def assemblyCall(self): class AssemblyLocalDefinitionContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -7444,21 +7765,21 @@ def accept(self, visitor:ParseTreeVisitor): def assemblyLocalDefinition(self): localctx = SolidityParser.AssemblyLocalDefinitionContext(self, self._ctx, self.state) - self.enterRule(localctx, 152, self.RULE_assemblyLocalDefinition) + self.enterRule(localctx, 164, self.RULE_assemblyLocalDefinition) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 979 - self.match(SolidityParser.T__88) - self.state = 980 + self.state = 1022 + self.match(SolidityParser.T__87) + self.state = 1023 self.assemblyIdentifierOrList() - self.state = 983 + self.state = 1026 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==SolidityParser.T__89: - self.state = 981 - self.match(SolidityParser.T__89) - self.state = 982 + if _la==SolidityParser.T__88: + self.state = 1024 + self.match(SolidityParser.T__88) + self.state = 1025 self.assemblyExpression() @@ -7472,7 +7793,6 @@ def assemblyLocalDefinition(self): class AssemblyAssignmentContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -7509,14 +7829,14 @@ def accept(self, visitor:ParseTreeVisitor): def assemblyAssignment(self): localctx = SolidityParser.AssemblyAssignmentContext(self, self._ctx, self.state) - self.enterRule(localctx, 154, self.RULE_assemblyAssignment) + self.enterRule(localctx, 166, self.RULE_assemblyAssignment) try: self.enterOuterAlt(localctx, 1) - self.state = 985 + self.state = 1028 self.assemblyIdentifierOrList() - self.state = 986 - self.match(SolidityParser.T__89) - self.state = 987 + self.state = 1029 + self.match(SolidityParser.T__88) + self.state = 1030 self.assemblyExpression() except RecognitionException as re: localctx.exception = re @@ -7528,7 +7848,6 @@ def assemblyAssignment(self): class AssemblyIdentifierOrListContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -7569,30 +7888,36 @@ def accept(self, visitor:ParseTreeVisitor): def assemblyIdentifierOrList(self): localctx = SolidityParser.AssemblyIdentifierOrListContext(self, self._ctx, self.state) - self.enterRule(localctx, 156, self.RULE_assemblyIdentifierOrList) + self.enterRule(localctx, 168, self.RULE_assemblyIdentifierOrList) try: - self.state = 995 + self.state = 1039 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,105,self._ctx) + la_ = self._interp.adaptivePredict(self._input,110,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 989 + self.state = 1032 self.identifier() pass elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 990 + self.state = 1033 self.assemblyMember() pass elif la_ == 3: self.enterOuterAlt(localctx, 3) - self.state = 991 + self.state = 1034 + self.assemblyIdentifierList() + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 1035 self.match(SolidityParser.T__22) - self.state = 992 + self.state = 1036 self.assemblyIdentifierList() - self.state = 993 + self.state = 1037 self.match(SolidityParser.T__23) pass @@ -7607,7 +7932,6 @@ def assemblyIdentifierOrList(self): class AssemblyIdentifierListContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -7643,21 +7967,21 @@ def accept(self, visitor:ParseTreeVisitor): def assemblyIdentifierList(self): localctx = SolidityParser.AssemblyIdentifierListContext(self, self._ctx, self.state) - self.enterRule(localctx, 158, self.RULE_assemblyIdentifierList) + self.enterRule(localctx, 170, self.RULE_assemblyIdentifierList) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 997 + self.state = 1041 self.identifier() - self.state = 1002 + self.state = 1046 self._errHandler.sync(self) _la = self._input.LA(1) while _la==SolidityParser.T__15: - self.state = 998 + self.state = 1042 self.match(SolidityParser.T__15) - self.state = 999 + self.state = 1043 self.identifier() - self.state = 1004 + self.state = 1048 self._errHandler.sync(self) _la = self._input.LA(1) @@ -7671,12 +7995,15 @@ def assemblyIdentifierList(self): class AssemblyStackAssignmentContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) self.parser = parser + def assemblyExpression(self): + return self.getTypedRuleContext(SolidityParser.AssemblyExpressionContext,0) + + def identifier(self): return self.getTypedRuleContext(SolidityParser.IdentifierContext,0) @@ -7704,12 +8031,14 @@ def accept(self, visitor:ParseTreeVisitor): def assemblyStackAssignment(self): localctx = SolidityParser.AssemblyStackAssignmentContext(self, self._ctx, self.state) - self.enterRule(localctx, 160, self.RULE_assemblyStackAssignment) + self.enterRule(localctx, 172, self.RULE_assemblyStackAssignment) try: self.enterOuterAlt(localctx, 1) - self.state = 1005 - self.match(SolidityParser.T__90) - self.state = 1006 + self.state = 1049 + self.assemblyExpression() + self.state = 1050 + self.match(SolidityParser.T__89) + self.state = 1051 self.identifier() except RecognitionException as re: localctx.exception = re @@ -7721,7 +8050,6 @@ def assemblyStackAssignment(self): class LabelDefinitionContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -7754,13 +8082,13 @@ def accept(self, visitor:ParseTreeVisitor): def labelDefinition(self): localctx = SolidityParser.LabelDefinitionContext(self, self._ctx, self.state) - self.enterRule(localctx, 162, self.RULE_labelDefinition) + self.enterRule(localctx, 174, self.RULE_labelDefinition) try: self.enterOuterAlt(localctx, 1) - self.state = 1008 + self.state = 1053 self.identifier() - self.state = 1009 - self.match(SolidityParser.T__61) + self.state = 1054 + self.match(SolidityParser.T__69) except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -7771,7 +8099,6 @@ def labelDefinition(self): class AssemblySwitchContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -7811,21 +8138,21 @@ def accept(self, visitor:ParseTreeVisitor): def assemblySwitch(self): localctx = SolidityParser.AssemblySwitchContext(self, self._ctx, self.state) - self.enterRule(localctx, 164, self.RULE_assemblySwitch) + self.enterRule(localctx, 176, self.RULE_assemblySwitch) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 1011 - self.match(SolidityParser.T__91) - self.state = 1012 + self.state = 1056 + self.match(SolidityParser.T__90) + self.state = 1057 self.assemblyExpression() - self.state = 1016 + self.state = 1061 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==SolidityParser.T__92 or _la==SolidityParser.T__93: - self.state = 1013 + while _la==SolidityParser.T__91 or _la==SolidityParser.T__92: + self.state = 1058 self.assemblyCase() - self.state = 1018 + self.state = 1063 self._errHandler.sync(self) _la = self._input.LA(1) @@ -7839,7 +8166,6 @@ def assemblySwitch(self): class AssemblyCaseContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -7876,25 +8202,25 @@ def accept(self, visitor:ParseTreeVisitor): def assemblyCase(self): localctx = SolidityParser.AssemblyCaseContext(self, self._ctx, self.state) - self.enterRule(localctx, 166, self.RULE_assemblyCase) + self.enterRule(localctx, 178, self.RULE_assemblyCase) try: - self.state = 1025 + self.state = 1070 self._errHandler.sync(self) token = self._input.LA(1) - if token in [SolidityParser.T__92]: + if token in [SolidityParser.T__91]: self.enterOuterAlt(localctx, 1) - self.state = 1019 - self.match(SolidityParser.T__92) - self.state = 1020 + self.state = 1064 + self.match(SolidityParser.T__91) + self.state = 1065 self.assemblyLiteral() - self.state = 1021 + self.state = 1066 self.assemblyBlock() pass - elif token in [SolidityParser.T__93]: + elif token in [SolidityParser.T__92]: self.enterOuterAlt(localctx, 2) - self.state = 1023 - self.match(SolidityParser.T__93) - self.state = 1024 + self.state = 1068 + self.match(SolidityParser.T__92) + self.state = 1069 self.assemblyBlock() pass else: @@ -7910,7 +8236,6 @@ def assemblyCase(self): class AssemblyFunctionDefinitionContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -7955,35 +8280,35 @@ def accept(self, visitor:ParseTreeVisitor): def assemblyFunctionDefinition(self): localctx = SolidityParser.AssemblyFunctionDefinitionContext(self, self._ctx, self.state) - self.enterRule(localctx, 168, self.RULE_assemblyFunctionDefinition) + self.enterRule(localctx, 180, self.RULE_assemblyFunctionDefinition) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 1027 - self.match(SolidityParser.T__29) - self.state = 1028 + self.state = 1072 + self.match(SolidityParser.T__37) + self.state = 1073 self.identifier() - self.state = 1029 + self.state = 1074 self.match(SolidityParser.T__22) - self.state = 1031 + self.state = 1076 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__41) | (1 << SolidityParser.T__53))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)))) != 0): - self.state = 1030 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__43) | (1 << SolidityParser.T__49) | (1 << SolidityParser.T__61))) != 0) or ((((_la - 95)) & ~0x3f) == 0 and ((1 << (_la - 95)) & ((1 << (SolidityParser.T__94 - 95)) | (1 << (SolidityParser.LeaveKeyword - 95)) | (1 << (SolidityParser.PayableKeyword - 95)) | (1 << (SolidityParser.GlobalKeyword - 95)) | (1 << (SolidityParser.ConstructorKeyword - 95)) | (1 << (SolidityParser.ReceiveKeyword - 95)) | (1 << (SolidityParser.Identifier - 95)))) != 0): + self.state = 1075 self.assemblyIdentifierList() - self.state = 1033 + self.state = 1078 self.match(SolidityParser.T__23) - self.state = 1035 + self.state = 1080 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==SolidityParser.T__94: - self.state = 1034 + if _la==SolidityParser.T__93: + self.state = 1079 self.assemblyFunctionReturns() - self.state = 1037 + self.state = 1082 self.assemblyBlock() except RecognitionException as re: localctx.exception = re @@ -7995,7 +8320,6 @@ def assemblyFunctionDefinition(self): class AssemblyFunctionReturnsContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -8028,12 +8352,12 @@ def accept(self, visitor:ParseTreeVisitor): def assemblyFunctionReturns(self): localctx = SolidityParser.AssemblyFunctionReturnsContext(self, self._ctx, self.state) - self.enterRule(localctx, 170, self.RULE_assemblyFunctionReturns) + self.enterRule(localctx, 182, self.RULE_assemblyFunctionReturns) try: self.enterOuterAlt(localctx, 1) - self.state = 1039 - self.match(SolidityParser.T__94) - self.state = 1040 + self.state = 1084 + self.match(SolidityParser.T__93) + self.state = 1085 self.assemblyIdentifierList() except RecognitionException as re: localctx.exception = re @@ -8045,7 +8369,6 @@ def assemblyFunctionReturns(self): class AssemblyForContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -8088,42 +8411,42 @@ def accept(self, visitor:ParseTreeVisitor): def assemblyFor(self): localctx = SolidityParser.AssemblyForContext(self, self._ctx, self.state) - self.enterRule(localctx, 172, self.RULE_assemblyFor) + self.enterRule(localctx, 184, self.RULE_assemblyFor) try: self.enterOuterAlt(localctx, 1) - self.state = 1042 + self.state = 1087 self.match(SolidityParser.T__26) - self.state = 1045 + self.state = 1090 self._errHandler.sync(self) token = self._input.LA(1) if token in [SolidityParser.T__14]: - self.state = 1043 + self.state = 1088 self.assemblyBlock() pass - elif token in [SolidityParser.T__13, SolidityParser.T__24, SolidityParser.T__35, SolidityParser.T__41, SolidityParser.T__50, SolidityParser.T__53, SolidityParser.T__57, SolidityParser.T__95, SolidityParser.DecimalNumber, SolidityParser.HexNumber, SolidityParser.HexLiteralFragment, SolidityParser.LeaveKeyword, SolidityParser.PayableKeyword, SolidityParser.ConstructorKeyword, SolidityParser.ReceiveKeyword, SolidityParser.Identifier, SolidityParser.StringLiteralFragment]: - self.state = 1044 + elif token in [SolidityParser.T__13, SolidityParser.T__24, SolidityParser.T__43, SolidityParser.T__49, SolidityParser.T__58, SolidityParser.T__61, SolidityParser.T__65, SolidityParser.T__94, SolidityParser.BooleanLiteral, SolidityParser.DecimalNumber, SolidityParser.HexNumber, SolidityParser.HexLiteralFragment, SolidityParser.LeaveKeyword, SolidityParser.PayableKeyword, SolidityParser.GlobalKeyword, SolidityParser.ConstructorKeyword, SolidityParser.ReceiveKeyword, SolidityParser.Identifier, SolidityParser.StringLiteralFragment]: + self.state = 1089 self.assemblyExpression() pass else: raise NoViableAltException(self) - self.state = 1047 + self.state = 1092 self.assemblyExpression() - self.state = 1050 + self.state = 1095 self._errHandler.sync(self) token = self._input.LA(1) if token in [SolidityParser.T__14]: - self.state = 1048 + self.state = 1093 self.assemblyBlock() pass - elif token in [SolidityParser.T__13, SolidityParser.T__24, SolidityParser.T__35, SolidityParser.T__41, SolidityParser.T__50, SolidityParser.T__53, SolidityParser.T__57, SolidityParser.T__95, SolidityParser.DecimalNumber, SolidityParser.HexNumber, SolidityParser.HexLiteralFragment, SolidityParser.LeaveKeyword, SolidityParser.PayableKeyword, SolidityParser.ConstructorKeyword, SolidityParser.ReceiveKeyword, SolidityParser.Identifier, SolidityParser.StringLiteralFragment]: - self.state = 1049 + elif token in [SolidityParser.T__13, SolidityParser.T__24, SolidityParser.T__43, SolidityParser.T__49, SolidityParser.T__58, SolidityParser.T__61, SolidityParser.T__65, SolidityParser.T__94, SolidityParser.BooleanLiteral, SolidityParser.DecimalNumber, SolidityParser.HexNumber, SolidityParser.HexLiteralFragment, SolidityParser.LeaveKeyword, SolidityParser.PayableKeyword, SolidityParser.GlobalKeyword, SolidityParser.ConstructorKeyword, SolidityParser.ReceiveKeyword, SolidityParser.Identifier, SolidityParser.StringLiteralFragment]: + self.state = 1094 self.assemblyExpression() pass else: raise NoViableAltException(self) - self.state = 1052 + self.state = 1097 self.assemblyBlock() except RecognitionException as re: localctx.exception = re @@ -8135,7 +8458,6 @@ def assemblyFor(self): class AssemblyIfContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -8172,14 +8494,14 @@ def accept(self, visitor:ParseTreeVisitor): def assemblyIf(self): localctx = SolidityParser.AssemblyIfContext(self, self._ctx, self.state) - self.enterRule(localctx, 174, self.RULE_assemblyIf) + self.enterRule(localctx, 186, self.RULE_assemblyIf) try: self.enterOuterAlt(localctx, 1) - self.state = 1054 - self.match(SolidityParser.T__42) - self.state = 1055 + self.state = 1099 + self.match(SolidityParser.T__50) + self.state = 1100 self.assemblyExpression() - self.state = 1056 + self.state = 1101 self.assemblyBlock() except RecognitionException as re: localctx.exception = re @@ -8191,7 +8513,6 @@ def assemblyIf(self): class AssemblyLiteralContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -8211,6 +8532,9 @@ def hexLiteral(self): return self.getTypedRuleContext(SolidityParser.HexLiteralContext,0) + def BooleanLiteral(self): + return self.getToken(SolidityParser.BooleanLiteral, 0) + def getRuleIndex(self): return SolidityParser.RULE_assemblyLiteral @@ -8234,31 +8558,36 @@ def accept(self, visitor:ParseTreeVisitor): def assemblyLiteral(self): localctx = SolidityParser.AssemblyLiteralContext(self, self._ctx, self.state) - self.enterRule(localctx, 176, self.RULE_assemblyLiteral) + self.enterRule(localctx, 188, self.RULE_assemblyLiteral) try: - self.state = 1062 + self.state = 1108 self._errHandler.sync(self) token = self._input.LA(1) if token in [SolidityParser.StringLiteralFragment]: self.enterOuterAlt(localctx, 1) - self.state = 1058 + self.state = 1103 self.stringLiteral() pass elif token in [SolidityParser.DecimalNumber]: self.enterOuterAlt(localctx, 2) - self.state = 1059 + self.state = 1104 self.match(SolidityParser.DecimalNumber) pass elif token in [SolidityParser.HexNumber]: self.enterOuterAlt(localctx, 3) - self.state = 1060 + self.state = 1105 self.match(SolidityParser.HexNumber) pass elif token in [SolidityParser.HexLiteralFragment]: self.enterOuterAlt(localctx, 4) - self.state = 1061 + self.state = 1106 self.hexLiteral() pass + elif token in [SolidityParser.BooleanLiteral]: + self.enterOuterAlt(localctx, 5) + self.state = 1107 + self.match(SolidityParser.BooleanLiteral) + pass else: raise NoViableAltException(self) @@ -8271,64 +8600,7 @@ def assemblyLiteral(self): return localctx - class SubAssemblyContext(ParserRuleContext): - __slots__ = 'parser' - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): - super().__init__(parent, invokingState) - self.parser = parser - - def identifier(self): - return self.getTypedRuleContext(SolidityParser.IdentifierContext,0) - - - def assemblyBlock(self): - return self.getTypedRuleContext(SolidityParser.AssemblyBlockContext,0) - - - def getRuleIndex(self): - return SolidityParser.RULE_subAssembly - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterSubAssembly" ): - listener.enterSubAssembly(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitSubAssembly" ): - listener.exitSubAssembly(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitSubAssembly" ): - return visitor.visitSubAssembly(self) - else: - return visitor.visitChildren(self) - - - - - def subAssembly(self): - - localctx = SolidityParser.SubAssemblyContext(self, self._ctx, self.state) - self.enterRule(localctx, 178, self.RULE_subAssembly) - try: - self.enterOuterAlt(localctx, 1) - self.state = 1064 - self.match(SolidityParser.T__48) - self.state = 1065 - self.identifier() - self.state = 1066 - self.assemblyBlock() - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - class TupleExpressionContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -8364,137 +8636,72 @@ def accept(self, visitor:ParseTreeVisitor): def tupleExpression(self): localctx = SolidityParser.TupleExpressionContext(self, self._ctx, self.state) - self.enterRule(localctx, 180, self.RULE_tupleExpression) + self.enterRule(localctx, 190, self.RULE_tupleExpression) self._la = 0 # Token type try: - self.state = 1094 + self.state = 1136 self._errHandler.sync(self) token = self._input.LA(1) if token in [SolidityParser.T__22]: self.enterOuterAlt(localctx, 1) - self.state = 1068 + self.state = 1110 self.match(SolidityParser.T__22) - self.state = 1070 + self.state = 1112 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 5)) & ~0x3f) == 0 and ((1 << (_la - 5)) & ((1 << (SolidityParser.T__4 - 5)) | (1 << (SolidityParser.T__13 - 5)) | (1 << (SolidityParser.T__22 - 5)) | (1 << (SolidityParser.T__24 - 5)) | (1 << (SolidityParser.T__33 - 5)) | (1 << (SolidityParser.T__35 - 5)) | (1 << (SolidityParser.T__41 - 5)) | (1 << (SolidityParser.T__53 - 5)) | (1 << (SolidityParser.T__54 - 5)) | (1 << (SolidityParser.T__55 - 5)) | (1 << (SolidityParser.T__56 - 5)) | (1 << (SolidityParser.T__57 - 5)) | (1 << (SolidityParser.T__58 - 5)) | (1 << (SolidityParser.T__59 - 5)) | (1 << (SolidityParser.T__60 - 5)) | (1 << (SolidityParser.T__62 - 5)) | (1 << (SolidityParser.T__63 - 5)) | (1 << (SolidityParser.T__64 - 5)) | (1 << (SolidityParser.T__65 - 5)) | (1 << (SolidityParser.T__66 - 5)))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.Int - 96)) | (1 << (SolidityParser.Uint - 96)) | (1 << (SolidityParser.Byte - 96)) | (1 << (SolidityParser.Fixed - 96)) | (1 << (SolidityParser.Ufixed - 96)) | (1 << (SolidityParser.BooleanLiteral - 96)) | (1 << (SolidityParser.DecimalNumber - 96)) | (1 << (SolidityParser.HexNumber - 96)) | (1 << (SolidityParser.HexLiteralFragment - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.TypeKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)) | (1 << (SolidityParser.StringLiteralFragment - 96)))) != 0): - self.state = 1069 + if ((((_la - 6)) & ~0x3f) == 0 and ((1 << (_la - 6)) & ((1 << (SolidityParser.T__5 - 6)) | (1 << (SolidityParser.T__13 - 6)) | (1 << (SolidityParser.T__22 - 6)) | (1 << (SolidityParser.T__24 - 6)) | (1 << (SolidityParser.T__29 - 6)) | (1 << (SolidityParser.T__30 - 6)) | (1 << (SolidityParser.T__37 - 6)) | (1 << (SolidityParser.T__41 - 6)) | (1 << (SolidityParser.T__43 - 6)) | (1 << (SolidityParser.T__45 - 6)) | (1 << (SolidityParser.T__49 - 6)) | (1 << (SolidityParser.T__61 - 6)) | (1 << (SolidityParser.T__62 - 6)) | (1 << (SolidityParser.T__63 - 6)) | (1 << (SolidityParser.T__64 - 6)) | (1 << (SolidityParser.T__65 - 6)) | (1 << (SolidityParser.T__66 - 6)) | (1 << (SolidityParser.T__67 - 6)) | (1 << (SolidityParser.T__68 - 6)))) != 0) or ((((_la - 71)) & ~0x3f) == 0 and ((1 << (_la - 71)) & ((1 << (SolidityParser.T__70 - 71)) | (1 << (SolidityParser.T__71 - 71)) | (1 << (SolidityParser.T__94 - 71)) | (1 << (SolidityParser.Int - 71)) | (1 << (SolidityParser.Uint - 71)) | (1 << (SolidityParser.Byte - 71)) | (1 << (SolidityParser.Fixed - 71)) | (1 << (SolidityParser.Ufixed - 71)) | (1 << (SolidityParser.BooleanLiteral - 71)) | (1 << (SolidityParser.DecimalNumber - 71)) | (1 << (SolidityParser.HexNumber - 71)) | (1 << (SolidityParser.HexLiteralFragment - 71)) | (1 << (SolidityParser.LeaveKeyword - 71)) | (1 << (SolidityParser.PayableKeyword - 71)) | (1 << (SolidityParser.TypeKeyword - 71)) | (1 << (SolidityParser.GlobalKeyword - 71)) | (1 << (SolidityParser.ConstructorKeyword - 71)) | (1 << (SolidityParser.ReceiveKeyword - 71)) | (1 << (SolidityParser.Identifier - 71)) | (1 << (SolidityParser.StringLiteralFragment - 71)))) != 0): + self.state = 1111 self.expression(0) - self.state = 1078 + self.state = 1120 self._errHandler.sync(self) _la = self._input.LA(1) while _la==SolidityParser.T__15: - self.state = 1072 + self.state = 1114 self.match(SolidityParser.T__15) - self.state = 1074 + self.state = 1116 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 5)) & ~0x3f) == 0 and ((1 << (_la - 5)) & ((1 << (SolidityParser.T__4 - 5)) | (1 << (SolidityParser.T__13 - 5)) | (1 << (SolidityParser.T__22 - 5)) | (1 << (SolidityParser.T__24 - 5)) | (1 << (SolidityParser.T__33 - 5)) | (1 << (SolidityParser.T__35 - 5)) | (1 << (SolidityParser.T__41 - 5)) | (1 << (SolidityParser.T__53 - 5)) | (1 << (SolidityParser.T__54 - 5)) | (1 << (SolidityParser.T__55 - 5)) | (1 << (SolidityParser.T__56 - 5)) | (1 << (SolidityParser.T__57 - 5)) | (1 << (SolidityParser.T__58 - 5)) | (1 << (SolidityParser.T__59 - 5)) | (1 << (SolidityParser.T__60 - 5)) | (1 << (SolidityParser.T__62 - 5)) | (1 << (SolidityParser.T__63 - 5)) | (1 << (SolidityParser.T__64 - 5)) | (1 << (SolidityParser.T__65 - 5)) | (1 << (SolidityParser.T__66 - 5)))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.Int - 96)) | (1 << (SolidityParser.Uint - 96)) | (1 << (SolidityParser.Byte - 96)) | (1 << (SolidityParser.Fixed - 96)) | (1 << (SolidityParser.Ufixed - 96)) | (1 << (SolidityParser.BooleanLiteral - 96)) | (1 << (SolidityParser.DecimalNumber - 96)) | (1 << (SolidityParser.HexNumber - 96)) | (1 << (SolidityParser.HexLiteralFragment - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.TypeKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)) | (1 << (SolidityParser.StringLiteralFragment - 96)))) != 0): - self.state = 1073 + if ((((_la - 6)) & ~0x3f) == 0 and ((1 << (_la - 6)) & ((1 << (SolidityParser.T__5 - 6)) | (1 << (SolidityParser.T__13 - 6)) | (1 << (SolidityParser.T__22 - 6)) | (1 << (SolidityParser.T__24 - 6)) | (1 << (SolidityParser.T__29 - 6)) | (1 << (SolidityParser.T__30 - 6)) | (1 << (SolidityParser.T__37 - 6)) | (1 << (SolidityParser.T__41 - 6)) | (1 << (SolidityParser.T__43 - 6)) | (1 << (SolidityParser.T__45 - 6)) | (1 << (SolidityParser.T__49 - 6)) | (1 << (SolidityParser.T__61 - 6)) | (1 << (SolidityParser.T__62 - 6)) | (1 << (SolidityParser.T__63 - 6)) | (1 << (SolidityParser.T__64 - 6)) | (1 << (SolidityParser.T__65 - 6)) | (1 << (SolidityParser.T__66 - 6)) | (1 << (SolidityParser.T__67 - 6)) | (1 << (SolidityParser.T__68 - 6)))) != 0) or ((((_la - 71)) & ~0x3f) == 0 and ((1 << (_la - 71)) & ((1 << (SolidityParser.T__70 - 71)) | (1 << (SolidityParser.T__71 - 71)) | (1 << (SolidityParser.T__94 - 71)) | (1 << (SolidityParser.Int - 71)) | (1 << (SolidityParser.Uint - 71)) | (1 << (SolidityParser.Byte - 71)) | (1 << (SolidityParser.Fixed - 71)) | (1 << (SolidityParser.Ufixed - 71)) | (1 << (SolidityParser.BooleanLiteral - 71)) | (1 << (SolidityParser.DecimalNumber - 71)) | (1 << (SolidityParser.HexNumber - 71)) | (1 << (SolidityParser.HexLiteralFragment - 71)) | (1 << (SolidityParser.LeaveKeyword - 71)) | (1 << (SolidityParser.PayableKeyword - 71)) | (1 << (SolidityParser.TypeKeyword - 71)) | (1 << (SolidityParser.GlobalKeyword - 71)) | (1 << (SolidityParser.ConstructorKeyword - 71)) | (1 << (SolidityParser.ReceiveKeyword - 71)) | (1 << (SolidityParser.Identifier - 71)) | (1 << (SolidityParser.StringLiteralFragment - 71)))) != 0): + self.state = 1115 self.expression(0) - self.state = 1080 + self.state = 1122 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 1081 + self.state = 1123 self.match(SolidityParser.T__23) pass - elif token in [SolidityParser.T__33]: + elif token in [SolidityParser.T__41]: self.enterOuterAlt(localctx, 2) - self.state = 1082 - self.match(SolidityParser.T__33) - self.state = 1091 + self.state = 1124 + self.match(SolidityParser.T__41) + self.state = 1133 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 5)) & ~0x3f) == 0 and ((1 << (_la - 5)) & ((1 << (SolidityParser.T__4 - 5)) | (1 << (SolidityParser.T__13 - 5)) | (1 << (SolidityParser.T__22 - 5)) | (1 << (SolidityParser.T__24 - 5)) | (1 << (SolidityParser.T__33 - 5)) | (1 << (SolidityParser.T__35 - 5)) | (1 << (SolidityParser.T__41 - 5)) | (1 << (SolidityParser.T__53 - 5)) | (1 << (SolidityParser.T__54 - 5)) | (1 << (SolidityParser.T__55 - 5)) | (1 << (SolidityParser.T__56 - 5)) | (1 << (SolidityParser.T__57 - 5)) | (1 << (SolidityParser.T__58 - 5)) | (1 << (SolidityParser.T__59 - 5)) | (1 << (SolidityParser.T__60 - 5)) | (1 << (SolidityParser.T__62 - 5)) | (1 << (SolidityParser.T__63 - 5)) | (1 << (SolidityParser.T__64 - 5)) | (1 << (SolidityParser.T__65 - 5)) | (1 << (SolidityParser.T__66 - 5)))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.Int - 96)) | (1 << (SolidityParser.Uint - 96)) | (1 << (SolidityParser.Byte - 96)) | (1 << (SolidityParser.Fixed - 96)) | (1 << (SolidityParser.Ufixed - 96)) | (1 << (SolidityParser.BooleanLiteral - 96)) | (1 << (SolidityParser.DecimalNumber - 96)) | (1 << (SolidityParser.HexNumber - 96)) | (1 << (SolidityParser.HexLiteralFragment - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.TypeKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)) | (1 << (SolidityParser.StringLiteralFragment - 96)))) != 0): - self.state = 1083 + if ((((_la - 6)) & ~0x3f) == 0 and ((1 << (_la - 6)) & ((1 << (SolidityParser.T__5 - 6)) | (1 << (SolidityParser.T__13 - 6)) | (1 << (SolidityParser.T__22 - 6)) | (1 << (SolidityParser.T__24 - 6)) | (1 << (SolidityParser.T__29 - 6)) | (1 << (SolidityParser.T__30 - 6)) | (1 << (SolidityParser.T__37 - 6)) | (1 << (SolidityParser.T__41 - 6)) | (1 << (SolidityParser.T__43 - 6)) | (1 << (SolidityParser.T__45 - 6)) | (1 << (SolidityParser.T__49 - 6)) | (1 << (SolidityParser.T__61 - 6)) | (1 << (SolidityParser.T__62 - 6)) | (1 << (SolidityParser.T__63 - 6)) | (1 << (SolidityParser.T__64 - 6)) | (1 << (SolidityParser.T__65 - 6)) | (1 << (SolidityParser.T__66 - 6)) | (1 << (SolidityParser.T__67 - 6)) | (1 << (SolidityParser.T__68 - 6)))) != 0) or ((((_la - 71)) & ~0x3f) == 0 and ((1 << (_la - 71)) & ((1 << (SolidityParser.T__70 - 71)) | (1 << (SolidityParser.T__71 - 71)) | (1 << (SolidityParser.T__94 - 71)) | (1 << (SolidityParser.Int - 71)) | (1 << (SolidityParser.Uint - 71)) | (1 << (SolidityParser.Byte - 71)) | (1 << (SolidityParser.Fixed - 71)) | (1 << (SolidityParser.Ufixed - 71)) | (1 << (SolidityParser.BooleanLiteral - 71)) | (1 << (SolidityParser.DecimalNumber - 71)) | (1 << (SolidityParser.HexNumber - 71)) | (1 << (SolidityParser.HexLiteralFragment - 71)) | (1 << (SolidityParser.LeaveKeyword - 71)) | (1 << (SolidityParser.PayableKeyword - 71)) | (1 << (SolidityParser.TypeKeyword - 71)) | (1 << (SolidityParser.GlobalKeyword - 71)) | (1 << (SolidityParser.ConstructorKeyword - 71)) | (1 << (SolidityParser.ReceiveKeyword - 71)) | (1 << (SolidityParser.Identifier - 71)) | (1 << (SolidityParser.StringLiteralFragment - 71)))) != 0): + self.state = 1125 self.expression(0) - self.state = 1088 + self.state = 1130 self._errHandler.sync(self) _la = self._input.LA(1) while _la==SolidityParser.T__15: - self.state = 1084 + self.state = 1126 self.match(SolidityParser.T__15) - self.state = 1085 + self.state = 1127 self.expression(0) - self.state = 1090 + self.state = 1132 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 1093 - self.match(SolidityParser.T__34) - pass - else: - raise NoViableAltException(self) - - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - - class TypeNameExpressionContext(ParserRuleContext): - __slots__ = 'parser' - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): - super().__init__(parent, invokingState) - self.parser = parser - - def elementaryTypeName(self): - return self.getTypedRuleContext(SolidityParser.ElementaryTypeNameContext,0) - - - def userDefinedTypeName(self): - return self.getTypedRuleContext(SolidityParser.UserDefinedTypeNameContext,0) - - - def getRuleIndex(self): - return SolidityParser.RULE_typeNameExpression - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterTypeNameExpression" ): - listener.enterTypeNameExpression(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitTypeNameExpression" ): - listener.exitTypeNameExpression(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitTypeNameExpression" ): - return visitor.visitTypeNameExpression(self) - else: - return visitor.visitChildren(self) - - - - - def typeNameExpression(self): - - localctx = SolidityParser.TypeNameExpressionContext(self, self._ctx, self.state) - self.enterRule(localctx, 182, self.RULE_typeNameExpression) - try: - self.state = 1098 - self._errHandler.sync(self) - token = self._input.LA(1) - if token in [SolidityParser.T__35, SolidityParser.T__54, SolidityParser.T__55, SolidityParser.T__56, SolidityParser.T__57, SolidityParser.Int, SolidityParser.Uint, SolidityParser.Byte, SolidityParser.Fixed, SolidityParser.Ufixed]: - self.enterOuterAlt(localctx, 1) - self.state = 1096 - self.elementaryTypeName() - pass - elif token in [SolidityParser.T__13, SolidityParser.T__24, SolidityParser.T__41, SolidityParser.T__53, SolidityParser.T__95, SolidityParser.LeaveKeyword, SolidityParser.PayableKeyword, SolidityParser.ConstructorKeyword, SolidityParser.ReceiveKeyword, SolidityParser.Identifier]: - self.enterOuterAlt(localctx, 2) - self.state = 1097 - self.userDefinedTypeName() + self.state = 1135 + self.match(SolidityParser.T__42) pass else: raise NoViableAltException(self) @@ -8509,7 +8716,6 @@ def typeNameExpression(self): class NumberLiteralContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -8547,22 +8753,22 @@ def accept(self, visitor:ParseTreeVisitor): def numberLiteral(self): localctx = SolidityParser.NumberLiteralContext(self, self._ctx, self.state) - self.enterRule(localctx, 184, self.RULE_numberLiteral) + self.enterRule(localctx, 192, self.RULE_numberLiteral) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 1100 + self.state = 1138 _la = self._input.LA(1) if not(_la==SolidityParser.DecimalNumber or _la==SolidityParser.HexNumber): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 1102 + self.state = 1140 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,121,self._ctx) + la_ = self._interp.adaptivePredict(self._input,125,self._ctx) if la_ == 1: - self.state = 1101 + self.state = 1139 self.match(SolidityParser.NumberUnit) @@ -8576,7 +8782,6 @@ def numberLiteral(self): class IdentifierContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -8585,6 +8790,9 @@ def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): def ReceiveKeyword(self): return self.getToken(SolidityParser.ReceiveKeyword, 0) + def GlobalKeyword(self): + return self.getToken(SolidityParser.GlobalKeyword, 0) + def ConstructorKeyword(self): return self.getToken(SolidityParser.ConstructorKeyword, 0) @@ -8620,13 +8828,13 @@ def accept(self, visitor:ParseTreeVisitor): def identifier(self): localctx = SolidityParser.IdentifierContext(self, self._ctx, self.state) - self.enterRule(localctx, 186, self.RULE_identifier) + self.enterRule(localctx, 194, self.RULE_identifier) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 1104 + self.state = 1142 _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__41) | (1 << SolidityParser.T__53))) != 0) or ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.LeaveKeyword - 96)) | (1 << (SolidityParser.PayableKeyword - 96)) | (1 << (SolidityParser.ConstructorKeyword - 96)) | (1 << (SolidityParser.ReceiveKeyword - 96)) | (1 << (SolidityParser.Identifier - 96)))) != 0)): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__43) | (1 << SolidityParser.T__49) | (1 << SolidityParser.T__61))) != 0) or ((((_la - 95)) & ~0x3f) == 0 and ((1 << (_la - 95)) & ((1 << (SolidityParser.T__94 - 95)) | (1 << (SolidityParser.LeaveKeyword - 95)) | (1 << (SolidityParser.PayableKeyword - 95)) | (1 << (SolidityParser.GlobalKeyword - 95)) | (1 << (SolidityParser.ConstructorKeyword - 95)) | (1 << (SolidityParser.ReceiveKeyword - 95)) | (1 << (SolidityParser.Identifier - 95)))) != 0)): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -8641,7 +8849,6 @@ def identifier(self): class HexLiteralContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -8676,22 +8883,22 @@ def accept(self, visitor:ParseTreeVisitor): def hexLiteral(self): localctx = SolidityParser.HexLiteralContext(self, self._ctx, self.state) - self.enterRule(localctx, 188, self.RULE_hexLiteral) + self.enterRule(localctx, 196, self.RULE_hexLiteral) try: self.enterOuterAlt(localctx, 1) - self.state = 1107 + self.state = 1145 self._errHandler.sync(self) _alt = 1 while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt == 1: - self.state = 1106 + self.state = 1144 self.match(SolidityParser.HexLiteralFragment) else: raise NoViableAltException(self) - self.state = 1109 + self.state = 1147 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,122,self._ctx) + _alt = self._interp.adaptivePredict(self._input,126,self._ctx) except RecognitionException as re: localctx.exception = re @@ -8703,7 +8910,6 @@ def hexLiteral(self): class OverrideSpecifierContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -8739,33 +8945,33 @@ def accept(self, visitor:ParseTreeVisitor): def overrideSpecifier(self): localctx = SolidityParser.OverrideSpecifierContext(self, self._ctx, self.state) - self.enterRule(localctx, 190, self.RULE_overrideSpecifier) + self.enterRule(localctx, 198, self.RULE_overrideSpecifier) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 1111 - self.match(SolidityParser.T__96) - self.state = 1123 + self.state = 1149 + self.match(SolidityParser.T__95) + self.state = 1161 self._errHandler.sync(self) _la = self._input.LA(1) if _la==SolidityParser.T__22: - self.state = 1112 + self.state = 1150 self.match(SolidityParser.T__22) - self.state = 1113 + self.state = 1151 self.userDefinedTypeName() - self.state = 1118 + self.state = 1156 self._errHandler.sync(self) _la = self._input.LA(1) while _la==SolidityParser.T__15: - self.state = 1114 + self.state = 1152 self.match(SolidityParser.T__15) - self.state = 1115 + self.state = 1153 self.userDefinedTypeName() - self.state = 1120 + self.state = 1158 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 1121 + self.state = 1159 self.match(SolidityParser.T__23) @@ -8779,7 +8985,6 @@ def overrideSpecifier(self): class StringLiteralContext(ParserRuleContext): - __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -8814,22 +9019,22 @@ def accept(self, visitor:ParseTreeVisitor): def stringLiteral(self): localctx = SolidityParser.StringLiteralContext(self, self._ctx, self.state) - self.enterRule(localctx, 192, self.RULE_stringLiteral) + self.enterRule(localctx, 200, self.RULE_stringLiteral) try: self.enterOuterAlt(localctx, 1) - self.state = 1126 + self.state = 1164 self._errHandler.sync(self) _alt = 1 while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt == 1: - self.state = 1125 + self.state = 1163 self.match(SolidityParser.StringLiteralFragment) else: raise NoViableAltException(self) - self.state = 1128 + self.state = 1166 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,125,self._ctx) + _alt = self._interp.adaptivePredict(self._input,129,self._ctx) except RecognitionException as re: localctx.exception = re @@ -8844,8 +9049,8 @@ def stringLiteral(self): def sempred(self, localctx:RuleContext, ruleIndex:int, predIndex:int): if self._predicates == None: self._predicates = dict() - self._predicates[35] = self.typeName_sempred - self._predicates[64] = self.expression_sempred + self._predicates[38] = self.typeName_sempred + self._predicates[70] = self.expression_sempred pred = self._predicates.get(ruleIndex, None) if pred is None: raise Exception("No predicate with index:" + str(ruleIndex)) diff --git a/solidity_parser/solidity_antlr4/SolidityVisitor.py b/solidity_parser/solidity_antlr4/SolidityVisitor.py index a2b2b76..953502b 100644 --- a/solidity_parser/solidity_antlr4/SolidityVisitor.py +++ b/solidity_parser/solidity_antlr4/SolidityVisitor.py @@ -1,4 +1,4 @@ -# Generated from solidity-antlr4/Solidity.g4 by ANTLR 4.9.3 +# Generated from solidity-antlr4/Solidity.g4 by ANTLR 4.7.2 from antlr4 import * if __name__ is not None and "." in __name__: from .SolidityParser import SolidityParser @@ -99,6 +99,21 @@ def visitUsingForDeclaration(self, ctx:SolidityParser.UsingForDeclarationContext return self.visitChildren(ctx) + # Visit a parse tree produced by SolidityParser#usingForObject. + def visitUsingForObject(self, ctx:SolidityParser.UsingForObjectContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by SolidityParser#usingForObjectDirective. + def visitUsingForObjectDirective(self, ctx:SolidityParser.UsingForObjectDirectiveContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by SolidityParser#userDefinableOperators. + def visitUserDefinableOperators(self, ctx:SolidityParser.UserDefinableOperatorsContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by SolidityParser#structDefinition. def visitStructDefinition(self, ctx:SolidityParser.StructDefinitionContext): return self.visitChildren(ctx) @@ -204,6 +219,16 @@ def visitMapping(self, ctx:SolidityParser.MappingContext): return self.visitChildren(ctx) + # Visit a parse tree produced by SolidityParser#mappingKeyName. + def visitMappingKeyName(self, ctx:SolidityParser.MappingKeyNameContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by SolidityParser#mappingValueName. + def visitMappingValueName(self, ctx:SolidityParser.MappingValueNameContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by SolidityParser#functionTypeName. def visitFunctionTypeName(self, ctx:SolidityParser.FunctionTypeNameContext): return self.visitChildren(ctx) @@ -274,6 +299,11 @@ def visitInlineAssemblyStatement(self, ctx:SolidityParser.InlineAssemblyStatemen return self.visitChildren(ctx) + # Visit a parse tree produced by SolidityParser#inlineAssemblyStatementFlag. + def visitInlineAssemblyStatementFlag(self, ctx:SolidityParser.InlineAssemblyStatementFlagContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by SolidityParser#doWhileStatement. def visitDoWhileStatement(self, ctx:SolidityParser.DoWhileStatementContext): return self.visitChildren(ctx) @@ -454,21 +484,11 @@ def visitAssemblyLiteral(self, ctx:SolidityParser.AssemblyLiteralContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#subAssembly. - def visitSubAssembly(self, ctx:SolidityParser.SubAssemblyContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by SolidityParser#tupleExpression. def visitTupleExpression(self, ctx:SolidityParser.TupleExpressionContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#typeNameExpression. - def visitTypeNameExpression(self, ctx:SolidityParser.TypeNameExpressionContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by SolidityParser#numberLiteral. def visitNumberLiteral(self, ctx:SolidityParser.NumberLiteralContext): return self.visitChildren(ctx) From 7177d8841781b78fe02d1c56e8aa2dd21fa08cb2 Mon Sep 17 00:00:00 2001 From: sam bacha Date: Tue, 15 Aug 2023 09:31:51 -0700 Subject: [PATCH 2/7] feat(lint): fixes --- setup.py | 6 +- solidity_parser/__main__.py | 40 +- solidity_parser/parser.py | 1059 +-- .../solidity_antlr4/SolidityLexer.py | 404 +- .../solidity_antlr4/SolidityListener.py | 579 +- .../solidity_antlr4/SolidityParser.py | 6940 +++++++++++------ .../solidity_antlr4/SolidityVisitor.py | 344 +- 7 files changed, 5709 insertions(+), 3663 deletions(-) diff --git a/setup.py b/setup.py index e962ecf..ac8b1fc 100644 --- a/setup.py +++ b/setup.py @@ -19,7 +19,7 @@ def read(fname): version = "0.1.3" -name = "python-solidity-parser" +name = "solidity-parser" setup( name=name, @@ -32,8 +32,8 @@ def read(fname): ), license="MIT", keywords=["solidity", "parser", "antlr"], - url="https://github.com/consensys/python-%s/" % name, - download_url="https://github.com/consensys/python-%s/tarball/v%s" % (name, version), + url="https://github.com/manifoldfinance/python-%s/" % name, + download_url="https://github.com/manifoldfinance/python-%s/tarball/v%s" % (name, version), long_description=read("README.md") if os.path.isfile("README.md") else "", long_description_content_type="text/markdown", # python setup.py register -r https://testpypi.python.org/pypi diff --git a/solidity_parser/__main__.py b/solidity_parser/__main__.py index a24b3d1..8de7ad7 100644 --- a/solidity_parser/__main__.py +++ b/solidity_parser/__main__.py @@ -6,7 +6,7 @@ from . import parser if __name__ == "__main__": - if not len(sys.argv)>2 or sys.argv[1] not in ("parse","outline"): + if not len(sys.argv) > 2 or sys.argv[1] not in ("parse", "outline"): print("\n- missing subcommand or path to solidity file.\n") print("#> python -m solidity_parser ") print("") @@ -16,26 +16,32 @@ sys.exit(1) node = parser.parse_file(sys.argv[2], loc=False) - if sys.argv[1]=="parse": + if sys.argv[1] == "parse": pprint.pprint(node) - elif sys.argv[1]=="outline": + elif sys.argv[1] == "outline": level = 0 sourceUnitObject = parser.objectify(node) print("=== pragmas ===") - level +=1 + level += 1 for p in sourceUnitObject.pragmas: print(("\t" * level) + "* " + str(p)) - level -=1 + level -= 1 print("=== imports ===") - level +=1 + level += 1 for p in sourceUnitObject.imports: print(("\t" * level) + "* " + str(p)) level = 0 for contract_name, contract_object in sourceUnitObject.contracts.items(): print("=== contract: " + contract_name) - level +=1 + level += 1 - print(("\t" * level) + "=== Inherited Contracts: " + ','.join([bc.baseName.namePath for bc in contract_object._node.baseContracts])) + print( + ("\t" * level) + + "=== Inherited Contracts: " + + ",".join( + [bc.baseName.namePath for bc in contract_object._node.baseContracts] + ) + ) ## statevars print(("\t" * level) + "=== Enums") level += 2 @@ -49,11 +55,11 @@ print(("\t" * level) + "* " + str(name)) level -= 2 ## statevars - print(("\t" * level) + "=== statevars" ) - level +=2 + print(("\t" * level) + "=== statevars") + level += 2 for name in contract_object.stateVars.keys(): - print(("\t" * level) + "* " + str(name) ) - level -=2 + print(("\t" * level) + "* " + str(name)) + level -= 2 ## modifiers print(("\t" * level) + "=== modifiers") level += 2 @@ -69,6 +75,12 @@ txtAttribs.append(funcObj.visibility) if funcObj.stateMutability: txtAttribs.append(funcObj.stateMutability) - print(("\t" * level) + "* " + str(name) + "\t\t (" + ','.join(txtAttribs)+ ")") + print( + ("\t" * level) + + "* " + + str(name) + + "\t\t (" + + ",".join(txtAttribs) + + ")" + ) level -= 2 - diff --git a/solidity_parser/parser.py b/solidity_parser/parser.py index 672786b..8d83f1b 100644 --- a/solidity_parser/parser.py +++ b/solidity_parser/parser.py @@ -16,8 +16,9 @@ class Node(dict): """ provide a dict interface and object attrib access """ + ENABLE_LOC = False - NONCHILD_KEYS = ("type","name","loc") + NONCHILD_KEYS = ("type", "name", "loc") def __init__(self, ctx, **kwargs): for k, v in kwargs.items(): @@ -35,19 +36,12 @@ def __setattr__(self, name, value): @staticmethod def _get_loc(ctx): return { - 'start': { - 'line': ctx.start.line, - 'column': ctx.start.column - }, - 'end': { - 'line': ctx.stop.line, - 'column': ctx.stop.column - } + "start": {"line": ctx.start.line, "column": ctx.start.column}, + "end": {"line": ctx.stop.line, "column": ctx.stop.column}, } class AstVisitor(SolidityVisitor): - def _mapCommasToNulls(self, children): if not children or len(children) == 0: return [] @@ -57,14 +51,14 @@ def _mapCommasToNulls(self, children): for el in children: if comma: - if el.getText() == ',': + if el.getText() == ",": values.append(None) else: values.append(el) comma = False else: - if el.getText() != ',': - raise Exception('expected comma') + if el.getText() != ",": + raise Exception("expected comma") comma = True @@ -109,64 +103,73 @@ def _visit_nodes(self, nodes): # ******************************************************** def visitSourceUnit(self, ctx): - return Node(ctx=ctx, - type="SourceUnit", - children=self.visit(ctx.children[:-1])) # skip EOF + return Node( + ctx=ctx, type="SourceUnit", children=self.visit(ctx.children[:-1]) + ) # skip EOF def visitEnumDefinition(self, ctx): - return Node(ctx=ctx, - type="EnumDefinition", - name=ctx.identifier().getText(), - members=self.visit(ctx.enumValue())) + return Node( + ctx=ctx, + type="EnumDefinition", + name=ctx.identifier().getText(), + members=self.visit(ctx.enumValue()), + ) def visitEnumValue(self, ctx): - return Node(ctx=ctx, - type="EnumValue", - name=ctx.identifier().getText()) + return Node(ctx=ctx, type="EnumValue", name=ctx.identifier().getText()) def visitTypeDefinition(self, ctx): - return Node(ctx=ctx, - type="TypeDefinition", - typeKeyword=ctx.TypeKeyword().getText(), - elementaryTypeName=self.visit(ctx.elementaryTypeName())) - + return Node( + ctx=ctx, + type="TypeDefinition", + typeKeyword=ctx.TypeKeyword().getText(), + elementaryTypeName=self.visit(ctx.elementaryTypeName()), + ) def visitCustomErrorDefinition(self, ctx): - return Node(ctx=ctx, - type="CustomErrorDefinition", - name=self.visit(ctx.identifier()), - parameterList=self.visit(ctx.parameterList())) + return Node( + ctx=ctx, + type="CustomErrorDefinition", + name=self.visit(ctx.identifier()), + parameterList=self.visit(ctx.parameterList()), + ) def visitFileLevelConstant(self, ctx): - return Node(ctx=ctx, - type="FileLevelConstant", - name=self.visit(ctx.identifier()), - typeName=self.visit(ctx.typeName()), - ConstantKeyword=self.visit(ctx.ConstantKeyword())) - + return Node( + ctx=ctx, + type="FileLevelConstant", + name=self.visit(ctx.identifier()), + typeName=self.visit(ctx.typeName()), + ConstantKeyword=self.visit(ctx.ConstantKeyword()), + ) def visitUsingForDeclaration(self, ctx: SolidityParser.UsingForDeclarationContext): typename = None - if ctx.getChild(3) != '*': + if ctx.getChild(3) != "*": typename = self.visit(ctx.getChild(3)) - return Node(ctx=ctx, - type="UsingForDeclaration", - typeName=typename, - libraryName=ctx.identifier().getText()) - - def visitInheritanceSpecifier(self, ctx: SolidityParser.InheritanceSpecifierContext): - return Node(ctx=ctx, - type="InheritanceSpecifier", - baseName=self.visit(ctx.userDefinedTypeName()), - arguments=self.visit(ctx.expressionList())) + return Node( + ctx=ctx, + type="UsingForDeclaration", + typeName=typename, + libraryName=ctx.identifier().getText(), + ) + + def visitInheritanceSpecifier( + self, ctx: SolidityParser.InheritanceSpecifierContext + ): + return Node( + ctx=ctx, + type="InheritanceSpecifier", + baseName=self.visit(ctx.userDefinedTypeName()), + arguments=self.visit(ctx.expressionList()), + ) def visitContractPart(self, ctx: SolidityParser.ContractPartContext): return self.visit(ctx.children[0]) - def visitFunctionDefinition(self, ctx: SolidityParser.FunctionDefinitionContext): - isConstructor = isFallback =isReceive = False + isConstructor = isFallback = isReceive = False fd = ctx.functionDescriptor() if fd.ConstructorKeyword(): @@ -181,11 +184,13 @@ def visitFunctionDefinition(self, ctx: SolidityParser.FunctionDefinitionContext) elif fd.identifier(): name = fd.identifier().getText() else: - name = '' # handle old style fallback function: function(){ ... } + name = "" # handle old style fallback function: function(){ ... } isFallback = True parameters = self.visit(ctx.parameterList()) - returnParameters = self.visit(ctx.returnParameters()) if ctx.returnParameters() else [] + returnParameters = ( + self.visit(ctx.returnParameters()) if ctx.returnParameters() else [] + ) block = self.visit(ctx.block()) if ctx.block() else [] modifiers = [self.visit(i) for i in ctx.modifierList().modifierInvocation()] @@ -198,48 +203,50 @@ def visitFunctionDefinition(self, ctx: SolidityParser.FunctionDefinitionContext) elif ctx.modifierList().PrivateKeyword(0): visibility = "private" else: - visibility = 'default' + visibility = "default" if ctx.modifierList().stateMutability(0): stateMutability = ctx.modifierList().stateMutability(0).getText() else: stateMutability = None - return Node(ctx=ctx, - type="FunctionDefinition", - name=name, - parameters=parameters, - returnParameters=returnParameters, - body=block, - visibility=visibility, - modifiers=modifiers, - isConstructor=isConstructor, - isFallback=isFallback, - isReceive=isReceive, - stateMutability=stateMutability) + return Node( + ctx=ctx, + type="FunctionDefinition", + name=name, + parameters=parameters, + returnParameters=returnParameters, + body=block, + visibility=visibility, + modifiers=modifiers, + isConstructor=isConstructor, + isFallback=isFallback, + isReceive=isReceive, + stateMutability=stateMutability, + ) def visitReturnParameters(self, ctx: SolidityParser.ReturnParametersContext): return self.visit(ctx.parameterList()) def visitParameterList(self, ctx: SolidityParser.ParameterListContext): parameters = [self.visit(p) for p in ctx.parameter()] - return Node(ctx=ctx, - type="ParameterList", - parameters=parameters) + return Node(ctx=ctx, type="ParameterList", parameters=parameters) def visitParameter(self, ctx: SolidityParser.ParameterContext): - - storageLocation = ctx.storageLocation().getText() if ctx.storageLocation() else None + storageLocation = ( + ctx.storageLocation().getText() if ctx.storageLocation() else None + ) name = ctx.identifier().getText() if ctx.identifier() else None - return Node(ctx=ctx, - type="Parameter", - typeName=self.visit(ctx.typeName()), - name=name, - storageLocation=storageLocation, - isStateVar=False, - isIndexed=False - ) + return Node( + ctx=ctx, + type="Parameter", + typeName=self.visit(ctx.typeName()), + name=name, + storageLocation=storageLocation, + isStateVar=False, + isIndexed=False, + ) def visitModifierInvocation(self, ctx): exprList = ctx.expressionList() @@ -249,15 +256,19 @@ def visitModifierInvocation(self, ctx): else: args = [] - return Node(ctx=ctx, - type='ModifierInvocation', - name=ctx.identifier().getText(), - arguments=args) + return Node( + ctx=ctx, + type="ModifierInvocation", + name=ctx.identifier().getText(), + arguments=args, + ) def visitElementaryTypeNameExpression(self, ctx): - return Node(ctx=ctx, - type='ElementaryTypeNameExpression', - typeName=self.visit(ctx.elementaryTypeName())) + return Node( + ctx=ctx, + type="ElementaryTypeNameExpression", + typeName=self.visit(ctx.elementaryTypeName()), + ) def visitTypeName(self, ctx): if len(ctx.children) > 2: @@ -265,42 +276,54 @@ def visitTypeName(self, ctx): if len(ctx.children) == 4: length = self.visit(ctx.getChild(2)) - return Node(ctx=ctx, - type='ArrayTypeName', - baseTypeName=self.visit(ctx.getChild(0)), - length=length) + return Node( + ctx=ctx, + type="ArrayTypeName", + baseTypeName=self.visit(ctx.getChild(0)), + length=length, + ) if len(ctx.children) == 2: - return Node(ctx=ctx, - type='ElementaryTypeName', - name=ctx.getChild(0).getText(), - stateMutability=ctx.getChild(1).getText()) + return Node( + ctx=ctx, + type="ElementaryTypeName", + name=ctx.getChild(0).getText(), + stateMutability=ctx.getChild(1).getText(), + ) return self.visit(ctx.getChild(0)) def visitFunctionTypeName(self, ctx): - parameterTypes = [self.visit(p) for p in ctx.functionTypeParameterList(0).functionTypeParameter()] + parameterTypes = [ + self.visit(p) + for p in ctx.functionTypeParameterList(0).functionTypeParameter() + ] returnTypes = [] if ctx.functionTypeParameterList(1): - returnTypes = [self.visit(p) for p in ctx.functionTypeParameterList(1).functionTypeParameter()] + returnTypes = [ + self.visit(p) + for p in ctx.functionTypeParameterList(1).functionTypeParameter() + ] - visibility = 'default' + visibility = "default" if ctx.InternalKeyword(0): - visibility = 'internal' + visibility = "internal" elif ctx.ExternalKeyword(0): - visibility = 'external' + visibility = "external" stateMutability = None if ctx.stateMutability(0): stateMutability = ctx.stateMutability(0).getText() - return Node(ctx=ctx, - type='FunctionTypeName', - parameterTypes=parameterTypes, - returnTypes=returnTypes, - visibility=visibility, - stateMutability=stateMutability) + return Node( + ctx=ctx, + type="FunctionTypeName", + parameterTypes=parameterTypes, + returnTypes=returnTypes, + visibility=visibility, + stateMutability=stateMutability, + ) def visitFunctionCall(self, ctx): args = [] @@ -316,26 +339,29 @@ def visitFunctionCall(self, ctx): args.append(self.visit(nameValue.expression())) names.append(nameValue.identifier().getText()) - return Node(ctx=ctx, - type='FunctionCall', - expression=self.visit(ctx.expression()), - arguments=args, - names=names) + return Node( + ctx=ctx, + type="FunctionCall", + expression=self.visit(ctx.expression()), + arguments=args, + names=names, + ) def visitEmitStatement(self, ctx): - return Node(ctx=ctx, - type='EmitStatement', - eventCall=self.visit(ctx.getChild(1))) + return Node( + ctx=ctx, type="EmitStatement", eventCall=self.visit(ctx.getChild(1)) + ) def visitThrowStatement(self, ctx): - return Node(ctx=ctx, - type='ThrowStatement') + return Node(ctx=ctx, type="ThrowStatement") def visitStructDefinition(self, ctx): - return Node(ctx=ctx, - type='StructDefinition', - name=ctx.identifier().getText(), - members=self.visit(ctx.variableDeclaration())) + return Node( + ctx=ctx, + type="StructDefinition", + name=ctx.identifier().getText(), + members=self.visit(ctx.variableDeclaration()), + ) def visitVariableDeclaration(self, ctx): storageLocation = None @@ -343,11 +369,13 @@ def visitVariableDeclaration(self, ctx): if ctx.storageLocation(): storageLocation = ctx.storageLocation().getText() - return Node(ctx=ctx, - type='VariableDeclaration', - typeName=self.visit(ctx.typeName()), - name=ctx.identifier().getText(), - storageLocation=storageLocation) + return Node( + ctx=ctx, + type="VariableDeclaration", + typeName=self.visit(ctx.typeName()), + name=ctx.identifier().getText(), + storageLocation=storageLocation, + ) def visitEventParameter(self, ctx): storageLocation = None @@ -357,13 +385,15 @@ def visitEventParameter(self, ctx): # if (ctx.storageLocation(0)): # storageLocation = ctx.storageLocation(0).getText() - return Node(ctx=ctx, - type='VariableDeclaration', - typeName=self.visit(ctx.typeName()), - name=ctx.identifier().getText(), - storageLocation=storageLocation, - isStateVar=False, - isIndexed=not not ctx.IndexedKeyword()) + return Node( + ctx=ctx, + type="VariableDeclaration", + typeName=self.visit(ctx.typeName()), + name=ctx.identifier().getText(), + storageLocation=storageLocation, + isStateVar=False, + isIndexed=not not ctx.IndexedKeyword(), + ) def visitFunctionTypeParameter(self, ctx): storageLocation = None @@ -371,74 +401,79 @@ def visitFunctionTypeParameter(self, ctx): if ctx.storageLocation(): storageLocation = ctx.storageLocation().getText() - return Node(ctx=ctx, - type='VariableDeclaration', - typeName=self.visit(ctx.typeName()), - name=None, - storageLocation=storageLocation, - isStateVar=False, - isIndexed=False) + return Node( + ctx=ctx, + type="VariableDeclaration", + typeName=self.visit(ctx.typeName()), + name=None, + storageLocation=storageLocation, + isStateVar=False, + isIndexed=False, + ) def visitWhileStatement(self, ctx): - return Node(ctx=ctx, - type='WhileStatement', - condition=self.visit(ctx.expression()), - body=self.visit(ctx.statement())) + return Node( + ctx=ctx, + type="WhileStatement", + condition=self.visit(ctx.expression()), + body=self.visit(ctx.statement()), + ) def visitDoWhileStatement(self, ctx): - return Node(ctx=ctx, - type='DoWhileStatement', - condition=self.visit(ctx.expression()), - body=self.visit(ctx.statement())) + return Node( + ctx=ctx, + type="DoWhileStatement", + condition=self.visit(ctx.expression()), + body=self.visit(ctx.statement()), + ) def visitIfStatement(self, ctx): - TrueBody = self.visit(ctx.statement(0)) FalseBody = None if len(ctx.statement()) > 1: FalseBody = self.visit(ctx.statement(1)) - return Node(ctx=ctx, - type='IfStatement', - condition=self.visit(ctx.expression()), - TrueBody=TrueBody, - FalseBody=FalseBody) + return Node( + ctx=ctx, + type="IfStatement", + condition=self.visit(ctx.expression()), + TrueBody=TrueBody, + FalseBody=FalseBody, + ) def visitTryStatement(self, ctx): - return Node(ctx=ctx, - type='TryStatement', - expression=self.visit(ctx.expression()), - block=self.visit(ctx.block()), - returnParameters=self.visit(ctx.returnParameters()), - catchClause=self.visit(ctx.catchClause())) + return Node( + ctx=ctx, + type="TryStatement", + expression=self.visit(ctx.expression()), + block=self.visit(ctx.block()), + returnParameters=self.visit(ctx.returnParameters()), + catchClause=self.visit(ctx.catchClause()), + ) def visitCatchClause(self, ctx): - return Node(ctx=ctx, - type='CatchClause', - identifier=self.visit(ctx.identifier()), - parameterList=self.visit(ctx.parameterList()), - block=self.visit(ctx.block())) + return Node( + ctx=ctx, + type="CatchClause", + identifier=self.visit(ctx.identifier()), + parameterList=self.visit(ctx.parameterList()), + block=self.visit(ctx.block()), + ) def visitUserDefinedTypeName(self, ctx): - return Node(ctx=ctx, - type='UserDefinedTypeName', - namePath=ctx.getText()) + return Node(ctx=ctx, type="UserDefinedTypeName", namePath=ctx.getText()) def visitElementaryTypeName(self, ctx): - return Node(ctx=ctx, - type='ElementaryTypeName', - name=ctx.getText()) + return Node(ctx=ctx, type="ElementaryTypeName", name=ctx.getText()) def visitBlock(self, ctx): - return Node(ctx=ctx, - type='Block', - statements=self.visit(ctx.statement())) + return Node(ctx=ctx, type="Block", statements=self.visit(ctx.statement())) def visitExpressionStatement(self, ctx): - return Node(ctx=ctx, - type='ExpressionStatement', - expression=self.visit(ctx.expression())) + return Node( + ctx=ctx, type="ExpressionStatement", expression=self.visit(ctx.expression()) + ) def visitNumberLiteral(self, ctx): number = ctx.getChild(0).getText() @@ -447,16 +482,20 @@ def visitNumberLiteral(self, ctx): if len(ctx.children) == 2: subdenomination = ctx.getChild(1).getText() - return Node(ctx=ctx, - type='NumberLiteral', - number=number, - subdenomination=subdenomination) + return Node( + ctx=ctx, + type="NumberLiteral", + number=number, + subdenomination=subdenomination, + ) def visitMapping(self, ctx): - return Node(ctx=ctx, - type='Mapping', - keyType=self.visit(ctx.mappingKey()), - valueType=self.visit(ctx.typeName())) + return Node( + ctx=ctx, + type="Mapping", + keyType=self.visit(ctx.mappingKey()), + valueType=self.visit(ctx.typeName()), + ) def visitModifierDefinition(self, ctx): parameters = [] @@ -464,11 +503,13 @@ def visitModifierDefinition(self, ctx): if ctx.parameterList(): parameters = self.visit(ctx.parameterList()) - return Node(ctx=ctx, - type='ModifierDefinition', - name=ctx.identifier().getText(), - parameters=parameters, - body=self.visit(ctx.block())) + return Node( + ctx=ctx, + type="ModifierDefinition", + name=ctx.identifier().getText(), + parameters=parameters, + body=self.visit(ctx.block()), + ) def visitStatement(self, ctx): return self.visit(ctx.getChild(0)) @@ -477,147 +518,161 @@ def visitSimpleStatement(self, ctx): return self.visit(ctx.getChild(0)) def visitUncheckedStatement(self, ctx): - return Node(ctx=ctx, - type='UncheckedStatement', - body=self.visit(ctx.block())) + return Node(ctx=ctx, type="UncheckedStatement", body=self.visit(ctx.block())) def visitRevertStatement(self, ctx): - return Node(ctx=ctx, - type='RevertStatement', - functionCall=self.visit(ctx.functionCall())) + return Node( + ctx=ctx, type="RevertStatement", functionCall=self.visit(ctx.functionCall()) + ) def visitExpression(self, ctx): - children_length = len(ctx.children) if children_length == 1: return self.visit(ctx.getChild(0)) elif children_length == 2: op = ctx.getChild(0).getText() - if op == 'new': - return Node(ctx=ctx, - type='NewExpression', - typeName=self.visit(ctx.typeName())) - - if op in ['+', '-', '++', '--', '!', '~', 'after', 'delete']: - return Node(ctx=ctx, - type='UnaryOperation', - operator=op, - subExpression=self.visit(ctx.getChild(1)), - isPrefix=True) + if op == "new": + return Node( + ctx=ctx, type="NewExpression", typeName=self.visit(ctx.typeName()) + ) + + if op in ["+", "-", "++", "--", "!", "~", "after", "delete"]: + return Node( + ctx=ctx, + type="UnaryOperation", + operator=op, + subExpression=self.visit(ctx.getChild(1)), + isPrefix=True, + ) op = ctx.getChild(1).getText() - if op in ['++', '--']: - return Node(ctx=ctx, - type='UnaryOperation', - operator=op, - subExpression=self.visit(ctx.getChild(0)), - isPrefix=False) + if op in ["++", "--"]: + return Node( + ctx=ctx, + type="UnaryOperation", + operator=op, + subExpression=self.visit(ctx.getChild(0)), + isPrefix=False, + ) elif children_length == 3: - if ctx.getChild(0).getText() == '(' and ctx.getChild(2).getText() == ')': - return Node(ctx=ctx, - type='TupleExpression', - components=[self.visit(ctx.getChild(1))], - isArray=False) + if ctx.getChild(0).getText() == "(" and ctx.getChild(2).getText() == ")": + return Node( + ctx=ctx, + type="TupleExpression", + components=[self.visit(ctx.getChild(1))], + isArray=False, + ) op = ctx.getChild(1).getText() - if op == ',': - return Node(ctx=ctx, - type='TupleExpression', - components=[ - self.visit(ctx.getChild(0)), - self.visit(ctx.getChild(2)) - ], - isArray=False) - - - elif op == '.': + if op == ",": + return Node( + ctx=ctx, + type="TupleExpression", + components=[ + self.visit(ctx.getChild(0)), + self.visit(ctx.getChild(2)), + ], + isArray=False, + ) + + elif op == ".": expression = self.visit(ctx.getChild(0)) memberName = ctx.getChild(2).getText() - return Node(ctx=ctx, - type='MemberAccess', - expression=expression, - memberName=memberName) + return Node( + ctx=ctx, + type="MemberAccess", + expression=expression, + memberName=memberName, + ) binOps = [ - '+', - '-', - '*', - '/', - '**', - '%', - '<<', - '>>', - '&&', - '||', - '&', - '|', - '^', - '<', - '>', - '<=', - '>=', - '==', - '!=', - '=', - '|=', - '^=', - '&=', - '<<=', - '>>=', - '+=', - '-=', - '*=', - '/=', - '%=' + "+", + "-", + "*", + "/", + "**", + "%", + "<<", + ">>", + "&&", + "||", + "&", + "|", + "^", + "<", + ">", + "<=", + ">=", + "==", + "!=", + "=", + "|=", + "^=", + "&=", + "<<=", + ">>=", + "+=", + "-=", + "*=", + "/=", + "%=", ] if op in binOps: - return Node(ctx=ctx, - type='BinaryOperation', - operator=op, - left=self.visit(ctx.getChild(0)), - right=self.visit(ctx.getChild(2))) + return Node( + ctx=ctx, + type="BinaryOperation", + operator=op, + left=self.visit(ctx.getChild(0)), + right=self.visit(ctx.getChild(2)), + ) elif children_length == 4: - - if ctx.getChild(1).getText() == '(' and ctx.getChild(3).getText() == ')': + if ctx.getChild(1).getText() == "(" and ctx.getChild(3).getText() == ")": args = [] names = [] ctxArgs = ctx.functionCallArguments() if ctxArgs.expressionList(): - args = [self.visit(a) for a in ctxArgs.expressionList().expression()] + args = [ + self.visit(a) for a in ctxArgs.expressionList().expression() + ] elif ctxArgs.nameValueList(): for nameValue in ctxArgs.nameValueList().nameValue(): args.append(self.visit(nameValue.expression())) names.append(nameValue.identifier().getText()) - return Node(ctx=ctx, - type='FunctionCall', - expression=self.visit(ctx.getChild(0)), - arguments=args, - names=names) + return Node( + ctx=ctx, + type="FunctionCall", + expression=self.visit(ctx.getChild(0)), + arguments=args, + names=names, + ) - if ctx.getChild(1).getText() == '[' and ctx.getChild(3).getText() == ']': - return Node(ctx=ctx, - type='IndexAccess', - base=self.visit(ctx.getChild(0)), - index=self.visit(ctx.getChild(2))) + if ctx.getChild(1).getText() == "[" and ctx.getChild(3).getText() == "]": + return Node( + ctx=ctx, + type="IndexAccess", + base=self.visit(ctx.getChild(0)), + index=self.visit(ctx.getChild(2)), + ) elif children_length == 5: # ternary - if ctx.getChild(1).getText() == '?' and ctx.getChild(3).getText() == ':': - return Node(ctx=ctx, - type='Conditional', - condition=self.visit(ctx.getChild(0)), - TrueExpression=self.visit(ctx.getChild(2)), - FalseExpression=self.visit(ctx.getChild(4))) + if ctx.getChild(1).getText() == "?" and ctx.getChild(3).getText() == ":": + return Node( + ctx=ctx, + type="Conditional", + condition=self.visit(ctx.getChild(0)), + TrueExpression=self.visit(ctx.getChild(2)), + FalseExpression=self.visit(ctx.getChild(4)), + ) return self.visit(list(ctx.getChildren())) - def visitStateVariableDeclaration(self, ctx): type = self.visit(ctx.typeName()) iden = ctx.identifier() @@ -628,14 +683,14 @@ def visitStateVariableDeclaration(self, ctx): if ctx.expression(): expression = self.visit(ctx.expression()) - visibility = 'default' + visibility = "default" if ctx.InternalKeyword(0): - visibility = 'internal' + visibility = "internal" elif ctx.PublicKeyword(0): - visibility = 'public' + visibility = "public" elif ctx.PrivateKeyword(0): - visibility = 'private' + visibility = "private" isDeclaredConst = False if ctx.ConstantKeyword(0): @@ -643,84 +698,92 @@ def visitStateVariableDeclaration(self, ctx): decl = self._createNode( ctx=ctx, - type='VariableDeclaration', + type="VariableDeclaration", typeName=type, name=name, expression=expression, visibility=visibility, isStateVar=True, isDeclaredConst=isDeclaredConst, - isIndexed=False) + isIndexed=False, + ) - return Node(ctx=ctx, - type='StateVariableDeclaration', - variables=[decl], - initialValue=expression) + return Node( + ctx=ctx, + type="StateVariableDeclaration", + variables=[decl], + initialValue=expression, + ) def visitForStatement(self, ctx): - conditionExpression = self.visit(ctx.expressionStatement()) if ctx.expressionStatement() else None + conditionExpression = ( + self.visit(ctx.expressionStatement()) if ctx.expressionStatement() else None + ) if conditionExpression: conditionExpression = conditionExpression.expression - return Node(ctx=ctx, - type='ForStatement', - initExpression=self.visit(ctx.simpleStatement()), - conditionExpression=conditionExpression, - loopExpression=Node(ctx=ctx, - type='ExpressionStatement', - expression=self.visit(ctx.expression())), - body=self.visit(ctx.statement()) - ) + return Node( + ctx=ctx, + type="ForStatement", + initExpression=self.visit(ctx.simpleStatement()), + conditionExpression=conditionExpression, + loopExpression=Node( + ctx=ctx, + type="ExpressionStatement", + expression=self.visit(ctx.expression()), + ), + body=self.visit(ctx.statement()), + ) def visitPrimaryExpression(self, ctx): if ctx.BooleanLiteral(): - return Node(ctx=ctx, - type='BooleanLiteral', - value=ctx.BooleanLiteral().getText() == 'true') + return Node( + ctx=ctx, + type="BooleanLiteral", + value=ctx.BooleanLiteral().getText() == "true", + ) if ctx.hexLiteral(): - return Node(ctx=ctx, - type='hexLiteral', - value=ctx.hexLiteral().getText()) + return Node(ctx=ctx, type="hexLiteral", value=ctx.hexLiteral().getText()) if ctx.stringLiteral(): text = ctx.getText() - return Node(ctx=ctx, - type='stringLiteral', - value=text[1: len(text) - 1]) + return Node(ctx=ctx, type="stringLiteral", value=text[1 : len(text) - 1]) - if len(ctx.children) == 3 and ctx.getChild(1).getText() == '[' and ctx.getChild(2).getText() == ']': + if ( + len(ctx.children) == 3 + and ctx.getChild(1).getText() == "[" + and ctx.getChild(2).getText() == "]" + ): node = self.visit(ctx.getChild(0)) - if node.type == 'Identifier': - node = Node(ctx=ctx, - type='UserDefinedTypeName', - namePath=node.name) + if node.type == "Identifier": + node = Node(ctx=ctx, type="UserDefinedTypeName", namePath=node.name) else: - node = Node(ctx=ctx, - type='ElementaryTypeName', - name=ctx.getChild(0).getText()) + node = Node( + ctx=ctx, type="ElementaryTypeName", name=ctx.getChild(0).getText() + ) - return Node(ctx=ctx, - type='ArrayTypeName', - baseTypeName=node, - length=None) + return Node(ctx=ctx, type="ArrayTypeName", baseTypeName=node, length=None) return self.visit(ctx.getChild(0)) def visitIdentifier(self, ctx): - return Node(ctx=ctx, - type="Identifier", - name=ctx.getText()) + return Node(ctx=ctx, type="Identifier", name=ctx.getText()) def visitTupleExpression(self, ctx): children = ctx.children[1:-1] - components = [None if e is None else self.visit(e) for e in self._mapCommasToNulls(children)] + components = [ + None if e is None else self.visit(e) + for e in self._mapCommasToNulls(children) + ] - return Node(ctx=ctx, - type='TupleExpression', - components=components, - isArray=ctx.getChild(0).getText() == '[') + return Node( + ctx=ctx, + type="TupleExpression", + components=components, + isArray=ctx.getChild(0).getText() == "[", + ) def visitIdentifierList(self, ctx: SolidityParser.IdentifierListContext): children = ctx.children[1:-1] @@ -730,35 +793,44 @@ def visitIdentifierList(self, ctx: SolidityParser.IdentifierListContext): if iden == None: result.append(None) else: - result.append(self._createNode(ctx=ctx, - type="VariableDeclaration", - name=iden.getText(), - isStateVar=False, - isIndexed=False, - iden=iden)) + result.append( + self._createNode( + ctx=ctx, + type="VariableDeclaration", + name=iden.getText(), + isStateVar=False, + isIndexed=False, + iden=iden, + ) + ) return result - def visitVariableDeclarationList(self, ctx: SolidityParser.VariableDeclarationListContext): + def visitVariableDeclarationList( + self, ctx: SolidityParser.VariableDeclarationListContext + ): result = [] for decl in self._mapCommasToNulls(ctx.children): if decl == None: return None ident = decl.identifier() - name = ident and ident.getText() or '_' - result.append(self._createNode(ctx=ctx, - type='VariableDeclaration', - name=name, - typeName=self.visit(decl.typeName()), - isStateVar=False, - isIndexed=False, - decl=decl)) + name = ident and ident.getText() or "_" + result.append( + self._createNode( + ctx=ctx, + type="VariableDeclaration", + name=name, + typeName=self.visit(decl.typeName()), + isStateVar=False, + isIndexed=False, + decl=decl, + ) + ) return result def visitVariableDeclarationStatement(self, ctx): - if ctx.variableDeclaration(): variables = [self.visit(ctx.variableDeclaration())] elif ctx.identifierList(): @@ -771,17 +843,21 @@ def visitVariableDeclarationStatement(self, ctx): if ctx.expression(): initialValue = self.visit(ctx.expression()) - return Node(ctx=ctx, - type='VariableDeclarationStatement', - variables=variables, - initialValue=initialValue) + return Node( + ctx=ctx, + type="VariableDeclarationStatement", + variables=variables, + initialValue=initialValue, + ) def visitEventDefinition(self, ctx): - return Node(ctx=ctx, - type='EventDefinition', - name=ctx.identifier().getText(), - parameters=self.visit(ctx.eventParameterList()), - isAnonymous=not not ctx.AnonymousKeyword()) + return Node( + ctx=ctx, + type="EventDefinition", + name=ctx.identifier().getText(), + parameters=self.visit(ctx.eventParameterList()), + isAnonymous=not not ctx.AnonymousKeyword(), + ) def visitEventParameterList(self, ctx): parameters = [] @@ -791,56 +867,51 @@ def visitEventParameterList(self, ctx): if paramCtx.identifier(): name = paramCtx.identifier().getText() - parameters.append(self._createNode(ctx=ctx, - type='VariableDeclaration', - typeName=type, - name=name, - isStateVar=False, - isIndexed=not not paramCtx.IndexedKeyword())) + parameters.append( + self._createNode( + ctx=ctx, + type="VariableDeclaration", + typeName=type, + name=name, + isStateVar=False, + isIndexed=not not paramCtx.IndexedKeyword(), + ) + ) - return Node(ctx=ctx, - type='ParameterList', - parameters=parameters) + return Node(ctx=ctx, type="ParameterList", parameters=parameters) def visitInlineAssemblyStatement(self, ctx): language = None if ctx.StringLiteralFragment(): language = ctx.StringLiteralFragment().getText() - language = language[1: len(language) - 1] + language = language[1 : len(language) - 1] - return Node(ctx=ctx, - type='InLineAssemblyStatement', - language=language, - body=self.visit(ctx.assemblyBlock())) + return Node( + ctx=ctx, + type="InLineAssemblyStatement", + language=language, + body=self.visit(ctx.assemblyBlock()), + ) def visitAssemblyBlock(self, ctx): operations = [self.visit(it) for it in ctx.assemblyItem()] - return Node(ctx=ctx, - type='AssemblyBlock', - operations=operations) + return Node(ctx=ctx, type="AssemblyBlock", operations=operations) def visitAssemblyItem(self, ctx): - if ctx.hexLiteral(): - return Node(ctx=ctx, - type='HexLiteral', - value=ctx.hexLiteral().getText()) + return Node(ctx=ctx, type="HexLiteral", value=ctx.hexLiteral().getText()) if ctx.stringLiteral(): text = ctx.stringLiteral().getText() - return Node(ctx=ctx, - type='StringLiteral', - value=text[1: len(text) - 1]) + return Node(ctx=ctx, type="StringLiteral", value=text[1 : len(text) - 1]) if ctx.BreakKeyword(): - return Node(ctx=ctx, - type='Break') + return Node(ctx=ctx, type="Break") if ctx.ContinueKeyword(): - return Node(ctx=ctx, - type='Continue') + return Node(ctx=ctx, type="Continue") return self.visit(ctx.getChild(0)) @@ -853,64 +924,61 @@ def visitAssemblyMember(self, ctx): name = ctx.identifier()[0].getText() else: name = ctx.identifier().getText() - return Node(ctx=ctx, - type='AssemblyMember', - name=name) + return Node(ctx=ctx, type="AssemblyMember", name=name) def visitAssemblyCall(self, ctx): functionName = ctx.getChild(0).getText() args = [self.visit(arg) for arg in ctx.assemblyExpression()] - return Node(ctx=ctx, - type='AssemblyExpression', - functionName=functionName, - arguments=args) + return Node( + ctx=ctx, + type="AssemblyExpression", + functionName=functionName, + arguments=args, + ) def visitAssemblyLiteral(self, ctx): - if ctx.stringLiteral(): text = ctx.getText() - return Node(ctx=ctx, - type='StringLiteral', - value=text[1: len(text) - 1]) + return Node(ctx=ctx, type="StringLiteral", value=text[1 : len(text) - 1]) if ctx.DecimalNumber(): - return Node(ctx=ctx, - type='DecimalNumber', - value=ctx.getText()) + return Node(ctx=ctx, type="DecimalNumber", value=ctx.getText()) if ctx.HexNumber(): - return Node(ctx=ctx, - type='HexNumber', - value=ctx.getText()) + return Node(ctx=ctx, type="HexNumber", value=ctx.getText()) if ctx.hexLiteral(): - return Node(ctx=ctx, - type='HexLiteral', - value=ctx.getText()) + return Node(ctx=ctx, type="HexLiteral", value=ctx.getText()) def visitAssemblySwitch(self, ctx): - return Node(ctx=ctx, - type='AssemblySwitch', - expression=self.visit(ctx.assemblyExpression()), - cases=[self.visit(c) for c in ctx.assemblyCase()]) + return Node( + ctx=ctx, + type="AssemblySwitch", + expression=self.visit(ctx.assemblyExpression()), + cases=[self.visit(c) for c in ctx.assemblyCase()], + ) def visitAssemblyCase(self, ctx): value = None - if ctx.getChild(0).getText() == 'case': + if ctx.getChild(0).getText() == "case": value = self.visit(ctx.assemblyLiteral()) if value != None: - node = Node(ctx=ctx, - type="AssemblyCase", - block=self.visit(ctx.assemblyBlock()), - value=value) + node = Node( + ctx=ctx, + type="AssemblyCase", + block=self.visit(ctx.assemblyBlock()), + value=value, + ) else: - node = Node(ctx=ctx, - type="AssemblyCase", - block=self.visit(ctx.assemblyBlock()), - default=True) + node = Node( + ctx=ctx, + type="AssemblyCase", + block=self.visit(ctx.assemblyBlock()), + default=True, + ) return node @@ -922,21 +990,25 @@ def visitAssemblyLocalDefinition(self, ctx): else: names = self.visit(names.assemblyIdentifierList().identifier()) - return Node(ctx=ctx, - type='AssemblyLocalDefinition', - names=names, - expression=self.visit(ctx.assemblyExpression())) + return Node( + ctx=ctx, + type="AssemblyLocalDefinition", + names=names, + expression=self.visit(ctx.assemblyExpression()), + ) def visitAssemblyFunctionDefinition(self, ctx): args = ctx.assemblyIdentifierList().identifier() returnArgs = ctx.assemblyFunctionReturns().assemblyIdentifierList().identifier() - return Node(ctx=ctx, - type='AssemblyFunctionDefinition', - name=ctx.identifier().getText(), - arguments=self.visit(args), - returnArguments=self.visit(returnArgs), - body=self.visit(ctx.assemblyBlock())) + return Node( + ctx=ctx, + type="AssemblyFunctionDefinition", + name=ctx.identifier().getText(), + arguments=self.visit(args), + returnArguments=self.visit(returnArgs), + body=self.visit(ctx.assemblyBlock()), + ) def visitAssemblyAssignment(self, ctx): names = ctx.assemblyIdentifierOrList() @@ -946,42 +1018,48 @@ def visitAssemblyAssignment(self, ctx): else: names = self.visit(names.assemblyIdentifierList().identifier()) - return Node(ctx=ctx, - type='AssemblyAssignment', - names=names, - expression=self.visit(ctx.assemblyExpression())) + return Node( + ctx=ctx, + type="AssemblyAssignment", + names=names, + expression=self.visit(ctx.assemblyExpression()), + ) def visitLabelDefinition(self, ctx): - return Node(ctx=ctx, - type='LabelDefinition', - name=ctx.identifier().getText()) + return Node(ctx=ctx, type="LabelDefinition", name=ctx.identifier().getText()) def visitAssemblyStackAssignment(self, ctx): - return Node(ctx=ctx, - type='AssemblyStackAssignment', - name=ctx.identifier().getText()) + return Node( + ctx=ctx, type="AssemblyStackAssignment", name=ctx.identifier().getText() + ) def visitAssemblyFor(self, ctx): - return Node(ctx=ctx, - type='AssemblyFor', - pre=self.visit(ctx.getChild(1)), - condition=self.visit(ctx.getChild(2)), - post=self.visit(ctx.getChild(3)), - body=self.visit(ctx.getChild(4))) + return Node( + ctx=ctx, + type="AssemblyFor", + pre=self.visit(ctx.getChild(1)), + condition=self.visit(ctx.getChild(2)), + post=self.visit(ctx.getChild(3)), + body=self.visit(ctx.getChild(4)), + ) def visitAssemblyIf(self, ctx): - return Node(ctx=ctx, - type='AssemblyIf', - condition=self.visit(ctx.assemblyExpression()), - body=self.visit(ctx.assemblyBlock())) + return Node( + ctx=ctx, + type="AssemblyIf", + condition=self.visit(ctx.assemblyExpression()), + body=self.visit(ctx.assemblyBlock()), + ) ### /*************************************************** def visitPragmaDirective(self, ctx): - return Node(ctx=ctx, - type="PragmaDirective", - name=ctx.pragmaName().getText(), - value=ctx.pragmaValue().getText()) + return Node( + ctx=ctx, + type="PragmaDirective", + name=ctx.pragmaName().getText(), + value=ctx.pragmaValue().getText(), + ) def visitImportDirective(self, ctx): symbol_aliases = {} @@ -989,7 +1067,6 @@ def visitImportDirective(self, ctx): if len(ctx.importDeclaration()) > 0: for item in ctx.importDeclaration(): - try: alias = item.identifier(1).getText() except: @@ -1002,26 +1079,27 @@ def visitImportDirective(self, ctx): elif len(ctx.children) == 5: unit_alias = ctx.getChild(3).getText() - return Node(ctx=ctx, - type="ImportDirective", - path=ctx.importPath().getText().strip('"'), - symbolAliases=symbol_aliases, - unitAlias=unit_alias - ) + return Node( + ctx=ctx, + type="ImportDirective", + path=ctx.importPath().getText().strip('"'), + symbolAliases=symbol_aliases, + unitAlias=unit_alias, + ) def visitContractDefinition(self, ctx): self._currentContract = ctx.identifier().getText() - return Node(ctx=ctx, - type="ContractDefinition", - name=ctx.identifier().getText(), - baseContracts=self.visit(ctx.inheritanceSpecifier()), - subNodes=self.visit(ctx.contractPart()), - kind=ctx.getChild(0).getText()) + return Node( + ctx=ctx, + type="ContractDefinition", + name=ctx.identifier().getText(), + baseContracts=self.visit(ctx.inheritanceSpecifier()), + subNodes=self.visit(ctx.contractPart()), + kind=ctx.getChild(0).getText(), + ) def visitUserDefinedTypename(self, ctx): - return Node(ctx=ctx, - type="UserDefinedTypename", - name=ctx.getText()) + return Node(ctx=ctx, type="UserDefinedTypename", name=ctx.getText()) def visitReturnStatement(self, ctx): return self.visit(ctx.expression()) @@ -1047,7 +1125,7 @@ def parse(text, start="sourceUnit", loc=False, strict=False): def parse_file(path, start="sourceUnit", loc=False, strict=False): - with open(path, 'r', encoding="utf-8") as f: + with open(path, "r", encoding="utf-8") as f: return parse(f.read(), start=start, loc=loc, strict=strict) @@ -1065,10 +1143,10 @@ def visit(node, callback_object): return node # call callback if it is available - if hasattr(callback_object, "visit"+node.type): - getattr(callback_object, "visit"+node.type)(node) + if hasattr(callback_object, "visit" + node.type): + getattr(callback_object, "visit" + node.type)(node) - for k,v in node.items(): + for k, v in node.items(): if k in node.NONCHILD_KEYS: # skip non child items continue @@ -1103,7 +1181,6 @@ def objectify(start_node): current_function = None class ObjectifyContractVisitor(object): - def __init__(self, node): self._node = node self.name = node.name @@ -1120,19 +1197,16 @@ def __init__(self, node): self.constructor = None self.inherited_names = {} - def visitEnumDefinition(self, _node): - self.enums[_node.name]=_node - self.names[_node.name]=_node + self.enums[_node.name] = _node + self.names[_node.name] = _node def visitStructDefinition(self, _node): - self.structs[_node.name]=_node - self.names[_node.name]=_node + self.structs[_node.name] = _node + self.names[_node.name] = _node def visitStateVariableDeclaration(self, _node): - class VarDecVisitor(object): - def __init__(self, current_contract): self._current_contract = current_contract @@ -1143,7 +1217,6 @@ def visitVariableDeclaration(self, __node): visit(_node, VarDecVisitor(self)) def visitEventDefinition(self, _node): - class EventFunctionVisitor(object): def __init__(self, node): self.arguments = {} @@ -1159,14 +1232,11 @@ def visitVariableDeclaration(self, __node): self.names[_node.name] = current_function self.events[_node.name] = current_function - def visitFunctionDefinition(self, _node, _definition_type=None): - class FunctionObject(object): - def __init__(self, node): self._node = node - if(node.type=="FunctionDefinition"): + if node.type == "FunctionDefinition": self.visibility = node.visibility self.stateMutability = node.stateMutability self.isConstructor = node.isConstructor @@ -1176,11 +1246,8 @@ def __init__(self, node): self.returns = {} self.declarations = {} self.identifiers = [] - - class FunctionArgumentVisitor(object): - def __init__(self): self.parameters = {} @@ -1188,7 +1255,6 @@ def visitParameter(self, __node): self.parameters[__node.name] = __node class VarDecVisitor(object): - def __init__(self): self.variable_declarations = {} @@ -1196,7 +1262,6 @@ def visitVariableDeclaration(self, __node): self.variable_declarations[__node.name] = __node class IdentifierDecVisitor(object): - def __init__(self): self.idents = [] @@ -1208,7 +1273,7 @@ def visitAssemblyCall(self, __node): current_function = FunctionObject(_node) self.names[_node.name] = current_function - if _definition_type=="ModifierDefinition": + if _definition_type == "ModifierDefinition": self.modifiers[_node.name] = current_function else: self.functions[_node.name] = current_function @@ -1221,7 +1286,6 @@ def visitAssemblyCall(self, __node): current_function.arguments = funcargvisitor.parameters current_function.declarations.update(current_function.arguments) - ## get returnParams if _node.get("returnParameters"): # because modifiers dont @@ -1230,7 +1294,6 @@ def visitAssemblyCall(self, __node): current_function.returns = funcargvisitor.parameters current_function.declarations.update(current_function.returns) - ## get vardecs in body vardecs = VarDecVisitor() visit(_node.body, vardecs) @@ -1244,9 +1307,7 @@ def visitAssemblyCall(self, __node): def visitModifierDefinition(self, _node): return self.visitFunctionDefinition(_node, "ModifierDefinition") - class ObjectifySourceUnitVisitor(object): - def __init__(self, node): self._node = node self.imports = [] diff --git a/solidity_parser/solidity_antlr4/SolidityLexer.py b/solidity_parser/solidity_antlr4/SolidityLexer.py index 22ba59c..5577c9e 100644 --- a/solidity_parser/solidity_antlr4/SolidityLexer.py +++ b/solidity_parser/solidity_antlr4/SolidityLexer.py @@ -5,7 +5,6 @@ import sys - def serializedATN(): with StringIO() as buf: buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\u0087") @@ -14,8 +13,8 @@ def serializedATN(): buf.write("\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22\4\23") buf.write("\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30") buf.write("\4\31\t\31\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36") - buf.write("\t\36\4\37\t\37\4 \t \4!\t!\4\"\t\"\4#\t#\4$\t$\4%\t%") - buf.write("\4&\t&\4\'\t\'\4(\t(\4)\t)\4*\t*\4+\t+\4,\t,\4-\t-\4.") + buf.write('\t\36\4\37\t\37\4 \t \4!\t!\4"\t"\4#\t#\4$\t$\4%\t%') + buf.write("\4&\t&\4'\t'\4(\t(\4)\t)\4*\t*\4+\t+\4,\t,\4-\t-\4.") buf.write("\t.\4/\t/\4\60\t\60\4\61\t\61\4\62\t\62\4\63\t\63\4\64") buf.write("\t\64\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\49\t9\4:\t:") buf.write("\4;\t;\4<\t<\4=\t=\4>\t>\4?\t?\4@\t@\4A\tA\4B\tB\4C\t") @@ -40,9 +39,9 @@ def serializedATN(): buf.write("\3\26\3\26\3\26\3\26\3\26\3\26\3\27\3\27\3\27\3\30\3\30") buf.write("\3\31\3\31\3\32\3\32\3\32\3\32\3\32\3\32\3\33\3\33\3\33") buf.write("\3\33\3\33\3\33\3\34\3\34\3\34\3\34\3\35\3\35\3\36\3\36") - buf.write("\3\37\3\37\3 \3 \3!\3!\3\"\3\"\3#\3#\3#\3$\3$\3$\3%\3") - buf.write("%\3%\3%\3%\3%\3%\3&\3&\3&\3&\3&\3&\3&\3&\3&\3\'\3\'\3") - buf.write("\'\3\'\3\'\3\'\3\'\3\'\3\'\3(\3(\3(\3(\3(\3(\3(\3(\3)") + buf.write('\3\37\3\37\3 \3 \3!\3!\3"\3"\3#\3#\3#\3$\3$\3$\3%\3') + buf.write("%\3%\3%\3%\3%\3%\3&\3&\3&\3&\3&\3&\3&\3&\3&\3'\3'\3") + buf.write("'\3'\3'\3'\3'\3'\3'\3(\3(\3(\3(\3(\3(\3(\3(\3)") buf.write("\3)\3)\3)\3)\3)\3*\3*\3*\3*\3*\3+\3+\3,\3,\3-\3-\3-\3") buf.write("-\3-\3-\3-\3-\3.\3.\3/\3/\3/\3/\3/\3/\3/\3/\3\60\3\60") buf.write("\3\60\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\62\3\62\3\62") @@ -145,9 +144,9 @@ def serializedATN(): buf.write("\3\u008e\3\u008e\3\u008e\3\u008e\7\u008e\u0749\n\u008e") buf.write("\f\u008e\16\u008e\u074c\13\u008e\3\u008e\3\u008e\3\u073c") buf.write("\2\u008f\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f") - buf.write("\27\r\31\16\33\17\35\20\37\21!\22#\23%\24\'\25)\26+\27") - buf.write("-\30/\31\61\32\63\33\65\34\67\359\36;\37= ?!A\"C#E$G%") - buf.write("I&K\'M(O)Q*S+U,W-Y.[/]\60_\61a\62c\63e\64g\65i\66k\67") + buf.write("\27\r\31\16\33\17\35\20\37\21!\22#\23%\24'\25)\26+\27") + buf.write('-\30/\31\61\32\63\33\65\34\67\359\36;\37= ?!A"C#E$G%') + buf.write("I&K'M(O)Q*S+U,W-Y.[/]\60_\61a\62c\63e\64g\65i\66k\67") buf.write("m8o9q:s;u{?}@\177A\u0081B\u0083C\u0085D\u0087E\u0089") buf.write("F\u008bG\u008dH\u008fI\u0091J\u0093K\u0095L\u0097M\u0099") buf.write("N\u009bO\u009dP\u009fQ\u00a1R\u00a3S\u00a5T\u00a7U\u00a9") @@ -161,12 +160,12 @@ def serializedATN(): buf.write("\u0113\2\u0115\u0084\u0117\u0085\u0119\u0086\u011b\u0087") buf.write("\3\2\f\3\2\62;\4\2GGgg\4\2ZZzz\5\2\62;CHch\6\2&&C\\aa") buf.write("c|\7\2&&\62;C\\aac|\6\2\f\f\17\17$$^^\6\2\f\f\17\17))") - buf.write("^^\5\2\13\f\16\17\"\"\4\2\f\f\17\17\2\u07e0\2\3\3\2\2") + buf.write('^^\5\2\13\f\16\17""\4\2\f\f\17\17\2\u07e0\2\3\3\2\2') buf.write("\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2") buf.write("\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25") buf.write("\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3") buf.write("\2\2\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2") - buf.write("\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2") + buf.write("'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2") buf.write("\2\61\3\2\2\2\2\63\3\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2\2") buf.write("9\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2A\3\2\2\2") buf.write("\2C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2\2K\3\2\2") @@ -201,7 +200,7 @@ def serializedATN(): buf.write("\23\u0134\3\2\2\2\25\u0136\3\2\2\2\27\u0139\3\2\2\2\31") buf.write("\u013b\3\2\2\2\33\u013e\3\2\2\2\35\u0145\3\2\2\2\37\u014a") buf.write("\3\2\2\2!\u014c\3\2\2\2#\u014e\3\2\2\2%\u0150\3\2\2\2") - buf.write("\'\u0159\3\2\2\2)\u0162\3\2\2\2+\u016c\3\2\2\2-\u0174") + buf.write("'\u0159\3\2\2\2)\u0162\3\2\2\2+\u016c\3\2\2\2-\u0174") buf.write("\3\2\2\2/\u0177\3\2\2\2\61\u0179\3\2\2\2\63\u017b\3\2") buf.write("\2\2\65\u0181\3\2\2\2\67\u0187\3\2\2\29\u018b\3\2\2\2") buf.write(";\u018d\3\2\2\2=\u018f\3\2\2\2?\u0191\3\2\2\2A\u0193\3") @@ -258,7 +257,7 @@ def serializedATN(): buf.write("\7v\2\2\u0144\34\3\2\2\2\u0145\u0146\7h\2\2\u0146\u0147") buf.write("\7t\2\2\u0147\u0148\7q\2\2\u0148\u0149\7o\2\2\u0149\36") buf.write("\3\2\2\2\u014a\u014b\7}\2\2\u014b \3\2\2\2\u014c\u014d") - buf.write("\7.\2\2\u014d\"\3\2\2\2\u014e\u014f\7\177\2\2\u014f$\3") + buf.write('\7.\2\2\u014d"\3\2\2\2\u014e\u014f\7\177\2\2\u014f$\3') buf.write("\2\2\2\u0150\u0151\7c\2\2\u0151\u0152\7d\2\2\u0152\u0153") buf.write("\7u\2\2\u0153\u0154\7v\2\2\u0154\u0155\7t\2\2\u0155\u0156") buf.write("\7c\2\2\u0156\u0157\7e\2\2\u0157\u0158\7v\2\2\u0158&\3") @@ -282,7 +281,7 @@ def serializedATN(): buf.write("\7~\2\2\u018c:\3\2\2\2\u018d\u018e\7(\2\2\u018e<\3\2\2") buf.write("\2\u018f\u0190\7-\2\2\u0190>\3\2\2\2\u0191\u0192\7/\2") buf.write("\2\u0192@\3\2\2\2\u0193\u0194\7\61\2\2\u0194B\3\2\2\2") - buf.write("\u0195\u0196\7\'\2\2\u0196D\3\2\2\2\u0197\u0198\7?\2\2") + buf.write("\u0195\u0196\7'\2\2\u0196D\3\2\2\2\u0197\u0198\7?\2\2") buf.write("\u0198\u0199\7?\2\2\u0199F\3\2\2\2\u019a\u019b\7#\2\2") buf.write("\u019b\u019c\7?\2\2\u019cH\3\2\2\2\u019d\u019e\7u\2\2") buf.write("\u019e\u019f\7v\2\2\u019f\u01a0\7t\2\2\u01a0\u01a1\7w") @@ -368,7 +367,7 @@ def serializedATN(): buf.write("\7/\2\2\u028e\u028f\7?\2\2\u028f\u00aa\3\2\2\2\u0290\u0291") buf.write("\7,\2\2\u0291\u0292\7?\2\2\u0292\u00ac\3\2\2\2\u0293\u0294") buf.write("\7\61\2\2\u0294\u0295\7?\2\2\u0295\u00ae\3\2\2\2\u0296") - buf.write("\u0297\7\'\2\2\u0297\u0298\7?\2\2\u0298\u00b0\3\2\2\2") + buf.write("\u0297\7'\2\2\u0297\u0298\7?\2\2\u0298\u00b0\3\2\2\2") buf.write("\u0299\u029a\7n\2\2\u029a\u029b\7g\2\2\u029b\u029c\7v") buf.write("\2\2\u029c\u00b2\3\2\2\2\u029d\u029e\7<\2\2\u029e\u029f") buf.write("\7?\2\2\u029f\u00b4\3\2\2\2\u02a0\u02a1\7?\2\2\u02a1\u02a2") @@ -858,10 +857,9 @@ def serializedATN(): class SolidityLexer(Lexer): - atn = ATNDeserializer().deserialize(serializedATN()) - decisionsToDFA = [ DFA(ds, i) for i, ds in enumerate(atn.decisionToState) ] + decisionsToDFA = [DFA(ds, i) for i, ds in enumerate(atn.decisionToState)] T__0 = 1 T__1 = 2 @@ -997,78 +995,322 @@ class SolidityLexer(Lexer): COMMENT = 132 LINE_COMMENT = 133 - channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ] + channelNames = ["DEFAULT_TOKEN_CHANNEL", "HIDDEN"] - modeNames = [ "DEFAULT_MODE" ] + modeNames = ["DEFAULT_MODE"] - literalNames = [ "", - "'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'", "'anonymous'", "'break'", "'constant'", "'immutable'", - "'continue'", "'leave'", "'external'", "'indexed'", "'internal'", - "'payable'", "'private'", "'public'", "'virtual'", "'pure'", - "'type'", "'view'", "'global'", "'constructor'", "'fallback'", - "'receive'" ] + literalNames = [ + "", + "'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'", + "'anonymous'", + "'break'", + "'constant'", + "'immutable'", + "'continue'", + "'leave'", + "'external'", + "'indexed'", + "'internal'", + "'payable'", + "'private'", + "'public'", + "'virtual'", + "'pure'", + "'type'", + "'view'", + "'global'", + "'constructor'", + "'fallback'", + "'receive'", + ] - symbolicNames = [ "", - "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" ] + symbolicNames = [ + "", + "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", + ] - ruleNames = [ "T__0", "T__1", "T__2", "T__3", "T__4", "T__5", "T__6", - "T__7", "T__8", "T__9", "T__10", "T__11", "T__12", "T__13", - "T__14", "T__15", "T__16", "T__17", "T__18", "T__19", - "T__20", "T__21", "T__22", "T__23", "T__24", "T__25", - "T__26", "T__27", "T__28", "T__29", "T__30", "T__31", - "T__32", "T__33", "T__34", "T__35", "T__36", "T__37", - "T__38", "T__39", "T__40", "T__41", "T__42", "T__43", - "T__44", "T__45", "T__46", "T__47", "T__48", "T__49", - "T__50", "T__51", "T__52", "T__53", "T__54", "T__55", - "T__56", "T__57", "T__58", "T__59", "T__60", "T__61", - "T__62", "T__63", "T__64", "T__65", "T__66", "T__67", - "T__68", "T__69", "T__70", "T__71", "T__72", "T__73", - "T__74", "T__75", "T__76", "T__77", "T__78", "T__79", - "T__80", "T__81", "T__82", "T__83", "T__84", "T__85", - "T__86", "T__87", "T__88", "T__89", "T__90", "T__91", - "T__92", "T__93", "T__94", "T__95", "Int", "Uint", "Byte", - "Fixed", "Ufixed", "BooleanLiteral", "DecimalNumber", - "DecimalDigits", "HexNumber", "HexDigits", "NumberUnit", - "HexLiteralFragment", "HexPair", "HexCharacter", "ReservedKeyword", - "AnonymousKeyword", "BreakKeyword", "ConstantKeyword", - "ImmutableKeyword", "ContinueKeyword", "LeaveKeyword", - "ExternalKeyword", "IndexedKeyword", "InternalKeyword", - "PayableKeyword", "PrivateKeyword", "PublicKeyword", "VirtualKeyword", - "PureKeyword", "TypeKeyword", "ViewKeyword", "GlobalKeyword", - "ConstructorKeyword", "FallbackKeyword", "ReceiveKeyword", - "Identifier", "IdentifierStart", "IdentifierPart", "StringLiteralFragment", - "DoubleQuotedStringCharacter", "SingleQuotedStringCharacter", - "VersionLiteral", "WS", "COMMENT", "LINE_COMMENT" ] + ruleNames = [ + "T__0", + "T__1", + "T__2", + "T__3", + "T__4", + "T__5", + "T__6", + "T__7", + "T__8", + "T__9", + "T__10", + "T__11", + "T__12", + "T__13", + "T__14", + "T__15", + "T__16", + "T__17", + "T__18", + "T__19", + "T__20", + "T__21", + "T__22", + "T__23", + "T__24", + "T__25", + "T__26", + "T__27", + "T__28", + "T__29", + "T__30", + "T__31", + "T__32", + "T__33", + "T__34", + "T__35", + "T__36", + "T__37", + "T__38", + "T__39", + "T__40", + "T__41", + "T__42", + "T__43", + "T__44", + "T__45", + "T__46", + "T__47", + "T__48", + "T__49", + "T__50", + "T__51", + "T__52", + "T__53", + "T__54", + "T__55", + "T__56", + "T__57", + "T__58", + "T__59", + "T__60", + "T__61", + "T__62", + "T__63", + "T__64", + "T__65", + "T__66", + "T__67", + "T__68", + "T__69", + "T__70", + "T__71", + "T__72", + "T__73", + "T__74", + "T__75", + "T__76", + "T__77", + "T__78", + "T__79", + "T__80", + "T__81", + "T__82", + "T__83", + "T__84", + "T__85", + "T__86", + "T__87", + "T__88", + "T__89", + "T__90", + "T__91", + "T__92", + "T__93", + "T__94", + "T__95", + "Int", + "Uint", + "Byte", + "Fixed", + "Ufixed", + "BooleanLiteral", + "DecimalNumber", + "DecimalDigits", + "HexNumber", + "HexDigits", + "NumberUnit", + "HexLiteralFragment", + "HexPair", + "HexCharacter", + "ReservedKeyword", + "AnonymousKeyword", + "BreakKeyword", + "ConstantKeyword", + "ImmutableKeyword", + "ContinueKeyword", + "LeaveKeyword", + "ExternalKeyword", + "IndexedKeyword", + "InternalKeyword", + "PayableKeyword", + "PrivateKeyword", + "PublicKeyword", + "VirtualKeyword", + "PureKeyword", + "TypeKeyword", + "ViewKeyword", + "GlobalKeyword", + "ConstructorKeyword", + "FallbackKeyword", + "ReceiveKeyword", + "Identifier", + "IdentifierStart", + "IdentifierPart", + "StringLiteralFragment", + "DoubleQuotedStringCharacter", + "SingleQuotedStringCharacter", + "VersionLiteral", + "WS", + "COMMENT", + "LINE_COMMENT", + ] grammarFileName = "Solidity.g4" - def __init__(self, input=None, output:TextIO = sys.stdout): + def __init__(self, input=None, output: TextIO = sys.stdout): super().__init__(input, output) self.checkVersion("4.7.2") - self._interp = LexerATNSimulator(self, self.atn, self.decisionsToDFA, PredictionContextCache()) + self._interp = LexerATNSimulator( + self, self.atn, self.decisionsToDFA, PredictionContextCache() + ) self._actions = None self._predicates = None - - diff --git a/solidity_parser/solidity_antlr4/SolidityListener.py b/solidity_parser/solidity_antlr4/SolidityListener.py index 4bd3369..c249ad6 100644 --- a/solidity_parser/solidity_antlr4/SolidityListener.py +++ b/solidity_parser/solidity_antlr4/SolidityListener.py @@ -1,919 +1,888 @@ # Generated from solidity-antlr4/Solidity.g4 by ANTLR 4.7.2 from antlr4 import * + if __name__ is not None and "." in __name__: from .SolidityParser import SolidityParser else: from SolidityParser import SolidityParser + # This class defines a complete listener for a parse tree produced by SolidityParser. class SolidityListener(ParseTreeListener): - # Enter a parse tree produced by SolidityParser#sourceUnit. - def enterSourceUnit(self, ctx:SolidityParser.SourceUnitContext): + def enterSourceUnit(self, ctx: SolidityParser.SourceUnitContext): pass # Exit a parse tree produced by SolidityParser#sourceUnit. - def exitSourceUnit(self, ctx:SolidityParser.SourceUnitContext): + def exitSourceUnit(self, ctx: SolidityParser.SourceUnitContext): pass - # Enter a parse tree produced by SolidityParser#pragmaDirective. - def enterPragmaDirective(self, ctx:SolidityParser.PragmaDirectiveContext): + def enterPragmaDirective(self, ctx: SolidityParser.PragmaDirectiveContext): pass # Exit a parse tree produced by SolidityParser#pragmaDirective. - def exitPragmaDirective(self, ctx:SolidityParser.PragmaDirectiveContext): + def exitPragmaDirective(self, ctx: SolidityParser.PragmaDirectiveContext): pass - # Enter a parse tree produced by SolidityParser#pragmaName. - def enterPragmaName(self, ctx:SolidityParser.PragmaNameContext): + def enterPragmaName(self, ctx: SolidityParser.PragmaNameContext): pass # Exit a parse tree produced by SolidityParser#pragmaName. - def exitPragmaName(self, ctx:SolidityParser.PragmaNameContext): + def exitPragmaName(self, ctx: SolidityParser.PragmaNameContext): pass - # Enter a parse tree produced by SolidityParser#pragmaValue. - def enterPragmaValue(self, ctx:SolidityParser.PragmaValueContext): + def enterPragmaValue(self, ctx: SolidityParser.PragmaValueContext): pass # Exit a parse tree produced by SolidityParser#pragmaValue. - def exitPragmaValue(self, ctx:SolidityParser.PragmaValueContext): + def exitPragmaValue(self, ctx: SolidityParser.PragmaValueContext): pass - # Enter a parse tree produced by SolidityParser#version. - def enterVersion(self, ctx:SolidityParser.VersionContext): + def enterVersion(self, ctx: SolidityParser.VersionContext): pass # Exit a parse tree produced by SolidityParser#version. - def exitVersion(self, ctx:SolidityParser.VersionContext): + def exitVersion(self, ctx: SolidityParser.VersionContext): pass - # Enter a parse tree produced by SolidityParser#versionOperator. - def enterVersionOperator(self, ctx:SolidityParser.VersionOperatorContext): + def enterVersionOperator(self, ctx: SolidityParser.VersionOperatorContext): pass # Exit a parse tree produced by SolidityParser#versionOperator. - def exitVersionOperator(self, ctx:SolidityParser.VersionOperatorContext): + def exitVersionOperator(self, ctx: SolidityParser.VersionOperatorContext): pass - # Enter a parse tree produced by SolidityParser#versionConstraint. - def enterVersionConstraint(self, ctx:SolidityParser.VersionConstraintContext): + def enterVersionConstraint(self, ctx: SolidityParser.VersionConstraintContext): pass # Exit a parse tree produced by SolidityParser#versionConstraint. - def exitVersionConstraint(self, ctx:SolidityParser.VersionConstraintContext): + def exitVersionConstraint(self, ctx: SolidityParser.VersionConstraintContext): pass - # Enter a parse tree produced by SolidityParser#importDeclaration. - def enterImportDeclaration(self, ctx:SolidityParser.ImportDeclarationContext): + def enterImportDeclaration(self, ctx: SolidityParser.ImportDeclarationContext): pass # Exit a parse tree produced by SolidityParser#importDeclaration. - def exitImportDeclaration(self, ctx:SolidityParser.ImportDeclarationContext): + def exitImportDeclaration(self, ctx: SolidityParser.ImportDeclarationContext): pass - # Enter a parse tree produced by SolidityParser#importDirective. - def enterImportDirective(self, ctx:SolidityParser.ImportDirectiveContext): + def enterImportDirective(self, ctx: SolidityParser.ImportDirectiveContext): pass # Exit a parse tree produced by SolidityParser#importDirective. - def exitImportDirective(self, ctx:SolidityParser.ImportDirectiveContext): + def exitImportDirective(self, ctx: SolidityParser.ImportDirectiveContext): pass - # Enter a parse tree produced by SolidityParser#importPath. - def enterImportPath(self, ctx:SolidityParser.ImportPathContext): + def enterImportPath(self, ctx: SolidityParser.ImportPathContext): pass # Exit a parse tree produced by SolidityParser#importPath. - def exitImportPath(self, ctx:SolidityParser.ImportPathContext): + def exitImportPath(self, ctx: SolidityParser.ImportPathContext): pass - # Enter a parse tree produced by SolidityParser#contractDefinition. - def enterContractDefinition(self, ctx:SolidityParser.ContractDefinitionContext): + def enterContractDefinition(self, ctx: SolidityParser.ContractDefinitionContext): pass # Exit a parse tree produced by SolidityParser#contractDefinition. - def exitContractDefinition(self, ctx:SolidityParser.ContractDefinitionContext): + def exitContractDefinition(self, ctx: SolidityParser.ContractDefinitionContext): pass - # Enter a parse tree produced by SolidityParser#inheritanceSpecifier. - def enterInheritanceSpecifier(self, ctx:SolidityParser.InheritanceSpecifierContext): + def enterInheritanceSpecifier( + self, ctx: SolidityParser.InheritanceSpecifierContext + ): pass # Exit a parse tree produced by SolidityParser#inheritanceSpecifier. - def exitInheritanceSpecifier(self, ctx:SolidityParser.InheritanceSpecifierContext): + def exitInheritanceSpecifier(self, ctx: SolidityParser.InheritanceSpecifierContext): pass - # Enter a parse tree produced by SolidityParser#contractPart. - def enterContractPart(self, ctx:SolidityParser.ContractPartContext): + def enterContractPart(self, ctx: SolidityParser.ContractPartContext): pass # Exit a parse tree produced by SolidityParser#contractPart. - def exitContractPart(self, ctx:SolidityParser.ContractPartContext): + def exitContractPart(self, ctx: SolidityParser.ContractPartContext): pass - # Enter a parse tree produced by SolidityParser#stateVariableDeclaration. - def enterStateVariableDeclaration(self, ctx:SolidityParser.StateVariableDeclarationContext): + def enterStateVariableDeclaration( + self, ctx: SolidityParser.StateVariableDeclarationContext + ): pass # Exit a parse tree produced by SolidityParser#stateVariableDeclaration. - def exitStateVariableDeclaration(self, ctx:SolidityParser.StateVariableDeclarationContext): + def exitStateVariableDeclaration( + self, ctx: SolidityParser.StateVariableDeclarationContext + ): pass - # Enter a parse tree produced by SolidityParser#fileLevelConstant. - def enterFileLevelConstant(self, ctx:SolidityParser.FileLevelConstantContext): + def enterFileLevelConstant(self, ctx: SolidityParser.FileLevelConstantContext): pass # Exit a parse tree produced by SolidityParser#fileLevelConstant. - def exitFileLevelConstant(self, ctx:SolidityParser.FileLevelConstantContext): + def exitFileLevelConstant(self, ctx: SolidityParser.FileLevelConstantContext): pass - # Enter a parse tree produced by SolidityParser#customErrorDefinition. - def enterCustomErrorDefinition(self, ctx:SolidityParser.CustomErrorDefinitionContext): + def enterCustomErrorDefinition( + self, ctx: SolidityParser.CustomErrorDefinitionContext + ): pass # Exit a parse tree produced by SolidityParser#customErrorDefinition. - def exitCustomErrorDefinition(self, ctx:SolidityParser.CustomErrorDefinitionContext): + def exitCustomErrorDefinition( + self, ctx: SolidityParser.CustomErrorDefinitionContext + ): pass - # Enter a parse tree produced by SolidityParser#typeDefinition. - def enterTypeDefinition(self, ctx:SolidityParser.TypeDefinitionContext): + def enterTypeDefinition(self, ctx: SolidityParser.TypeDefinitionContext): pass # Exit a parse tree produced by SolidityParser#typeDefinition. - def exitTypeDefinition(self, ctx:SolidityParser.TypeDefinitionContext): + def exitTypeDefinition(self, ctx: SolidityParser.TypeDefinitionContext): pass - # Enter a parse tree produced by SolidityParser#usingForDeclaration. - def enterUsingForDeclaration(self, ctx:SolidityParser.UsingForDeclarationContext): + def enterUsingForDeclaration(self, ctx: SolidityParser.UsingForDeclarationContext): pass # Exit a parse tree produced by SolidityParser#usingForDeclaration. - def exitUsingForDeclaration(self, ctx:SolidityParser.UsingForDeclarationContext): + def exitUsingForDeclaration(self, ctx: SolidityParser.UsingForDeclarationContext): pass - # Enter a parse tree produced by SolidityParser#usingForObject. - def enterUsingForObject(self, ctx:SolidityParser.UsingForObjectContext): + def enterUsingForObject(self, ctx: SolidityParser.UsingForObjectContext): pass # Exit a parse tree produced by SolidityParser#usingForObject. - def exitUsingForObject(self, ctx:SolidityParser.UsingForObjectContext): + def exitUsingForObject(self, ctx: SolidityParser.UsingForObjectContext): pass - # Enter a parse tree produced by SolidityParser#usingForObjectDirective. - def enterUsingForObjectDirective(self, ctx:SolidityParser.UsingForObjectDirectiveContext): + def enterUsingForObjectDirective( + self, ctx: SolidityParser.UsingForObjectDirectiveContext + ): pass # Exit a parse tree produced by SolidityParser#usingForObjectDirective. - def exitUsingForObjectDirective(self, ctx:SolidityParser.UsingForObjectDirectiveContext): + def exitUsingForObjectDirective( + self, ctx: SolidityParser.UsingForObjectDirectiveContext + ): pass - # Enter a parse tree produced by SolidityParser#userDefinableOperators. - def enterUserDefinableOperators(self, ctx:SolidityParser.UserDefinableOperatorsContext): + def enterUserDefinableOperators( + self, ctx: SolidityParser.UserDefinableOperatorsContext + ): pass # Exit a parse tree produced by SolidityParser#userDefinableOperators. - def exitUserDefinableOperators(self, ctx:SolidityParser.UserDefinableOperatorsContext): + def exitUserDefinableOperators( + self, ctx: SolidityParser.UserDefinableOperatorsContext + ): pass - # Enter a parse tree produced by SolidityParser#structDefinition. - def enterStructDefinition(self, ctx:SolidityParser.StructDefinitionContext): + def enterStructDefinition(self, ctx: SolidityParser.StructDefinitionContext): pass # Exit a parse tree produced by SolidityParser#structDefinition. - def exitStructDefinition(self, ctx:SolidityParser.StructDefinitionContext): + def exitStructDefinition(self, ctx: SolidityParser.StructDefinitionContext): pass - # Enter a parse tree produced by SolidityParser#modifierDefinition. - def enterModifierDefinition(self, ctx:SolidityParser.ModifierDefinitionContext): + def enterModifierDefinition(self, ctx: SolidityParser.ModifierDefinitionContext): pass # Exit a parse tree produced by SolidityParser#modifierDefinition. - def exitModifierDefinition(self, ctx:SolidityParser.ModifierDefinitionContext): + def exitModifierDefinition(self, ctx: SolidityParser.ModifierDefinitionContext): pass - # Enter a parse tree produced by SolidityParser#modifierInvocation. - def enterModifierInvocation(self, ctx:SolidityParser.ModifierInvocationContext): + def enterModifierInvocation(self, ctx: SolidityParser.ModifierInvocationContext): pass # Exit a parse tree produced by SolidityParser#modifierInvocation. - def exitModifierInvocation(self, ctx:SolidityParser.ModifierInvocationContext): + def exitModifierInvocation(self, ctx: SolidityParser.ModifierInvocationContext): pass - # Enter a parse tree produced by SolidityParser#functionDefinition. - def enterFunctionDefinition(self, ctx:SolidityParser.FunctionDefinitionContext): + def enterFunctionDefinition(self, ctx: SolidityParser.FunctionDefinitionContext): pass # Exit a parse tree produced by SolidityParser#functionDefinition. - def exitFunctionDefinition(self, ctx:SolidityParser.FunctionDefinitionContext): + def exitFunctionDefinition(self, ctx: SolidityParser.FunctionDefinitionContext): pass - # Enter a parse tree produced by SolidityParser#functionDescriptor. - def enterFunctionDescriptor(self, ctx:SolidityParser.FunctionDescriptorContext): + def enterFunctionDescriptor(self, ctx: SolidityParser.FunctionDescriptorContext): pass # Exit a parse tree produced by SolidityParser#functionDescriptor. - def exitFunctionDescriptor(self, ctx:SolidityParser.FunctionDescriptorContext): + def exitFunctionDescriptor(self, ctx: SolidityParser.FunctionDescriptorContext): pass - # Enter a parse tree produced by SolidityParser#returnParameters. - def enterReturnParameters(self, ctx:SolidityParser.ReturnParametersContext): + def enterReturnParameters(self, ctx: SolidityParser.ReturnParametersContext): pass # Exit a parse tree produced by SolidityParser#returnParameters. - def exitReturnParameters(self, ctx:SolidityParser.ReturnParametersContext): + def exitReturnParameters(self, ctx: SolidityParser.ReturnParametersContext): pass - # Enter a parse tree produced by SolidityParser#modifierList. - def enterModifierList(self, ctx:SolidityParser.ModifierListContext): + def enterModifierList(self, ctx: SolidityParser.ModifierListContext): pass # Exit a parse tree produced by SolidityParser#modifierList. - def exitModifierList(self, ctx:SolidityParser.ModifierListContext): + def exitModifierList(self, ctx: SolidityParser.ModifierListContext): pass - # Enter a parse tree produced by SolidityParser#eventDefinition. - def enterEventDefinition(self, ctx:SolidityParser.EventDefinitionContext): + def enterEventDefinition(self, ctx: SolidityParser.EventDefinitionContext): pass # Exit a parse tree produced by SolidityParser#eventDefinition. - def exitEventDefinition(self, ctx:SolidityParser.EventDefinitionContext): + def exitEventDefinition(self, ctx: SolidityParser.EventDefinitionContext): pass - # Enter a parse tree produced by SolidityParser#enumValue. - def enterEnumValue(self, ctx:SolidityParser.EnumValueContext): + def enterEnumValue(self, ctx: SolidityParser.EnumValueContext): pass # Exit a parse tree produced by SolidityParser#enumValue. - def exitEnumValue(self, ctx:SolidityParser.EnumValueContext): + def exitEnumValue(self, ctx: SolidityParser.EnumValueContext): pass - # Enter a parse tree produced by SolidityParser#enumDefinition. - def enterEnumDefinition(self, ctx:SolidityParser.EnumDefinitionContext): + def enterEnumDefinition(self, ctx: SolidityParser.EnumDefinitionContext): pass # Exit a parse tree produced by SolidityParser#enumDefinition. - def exitEnumDefinition(self, ctx:SolidityParser.EnumDefinitionContext): + def exitEnumDefinition(self, ctx: SolidityParser.EnumDefinitionContext): pass - # Enter a parse tree produced by SolidityParser#parameterList. - def enterParameterList(self, ctx:SolidityParser.ParameterListContext): + def enterParameterList(self, ctx: SolidityParser.ParameterListContext): pass # Exit a parse tree produced by SolidityParser#parameterList. - def exitParameterList(self, ctx:SolidityParser.ParameterListContext): + def exitParameterList(self, ctx: SolidityParser.ParameterListContext): pass - # Enter a parse tree produced by SolidityParser#parameter. - def enterParameter(self, ctx:SolidityParser.ParameterContext): + def enterParameter(self, ctx: SolidityParser.ParameterContext): pass # Exit a parse tree produced by SolidityParser#parameter. - def exitParameter(self, ctx:SolidityParser.ParameterContext): + def exitParameter(self, ctx: SolidityParser.ParameterContext): pass - # Enter a parse tree produced by SolidityParser#eventParameterList. - def enterEventParameterList(self, ctx:SolidityParser.EventParameterListContext): + def enterEventParameterList(self, ctx: SolidityParser.EventParameterListContext): pass # Exit a parse tree produced by SolidityParser#eventParameterList. - def exitEventParameterList(self, ctx:SolidityParser.EventParameterListContext): + def exitEventParameterList(self, ctx: SolidityParser.EventParameterListContext): pass - # Enter a parse tree produced by SolidityParser#eventParameter. - def enterEventParameter(self, ctx:SolidityParser.EventParameterContext): + def enterEventParameter(self, ctx: SolidityParser.EventParameterContext): pass # Exit a parse tree produced by SolidityParser#eventParameter. - def exitEventParameter(self, ctx:SolidityParser.EventParameterContext): + def exitEventParameter(self, ctx: SolidityParser.EventParameterContext): pass - # Enter a parse tree produced by SolidityParser#functionTypeParameterList. - def enterFunctionTypeParameterList(self, ctx:SolidityParser.FunctionTypeParameterListContext): + def enterFunctionTypeParameterList( + self, ctx: SolidityParser.FunctionTypeParameterListContext + ): pass # Exit a parse tree produced by SolidityParser#functionTypeParameterList. - def exitFunctionTypeParameterList(self, ctx:SolidityParser.FunctionTypeParameterListContext): + def exitFunctionTypeParameterList( + self, ctx: SolidityParser.FunctionTypeParameterListContext + ): pass - # Enter a parse tree produced by SolidityParser#functionTypeParameter. - def enterFunctionTypeParameter(self, ctx:SolidityParser.FunctionTypeParameterContext): + def enterFunctionTypeParameter( + self, ctx: SolidityParser.FunctionTypeParameterContext + ): pass # Exit a parse tree produced by SolidityParser#functionTypeParameter. - def exitFunctionTypeParameter(self, ctx:SolidityParser.FunctionTypeParameterContext): + def exitFunctionTypeParameter( + self, ctx: SolidityParser.FunctionTypeParameterContext + ): pass - # Enter a parse tree produced by SolidityParser#variableDeclaration. - def enterVariableDeclaration(self, ctx:SolidityParser.VariableDeclarationContext): + def enterVariableDeclaration(self, ctx: SolidityParser.VariableDeclarationContext): pass # Exit a parse tree produced by SolidityParser#variableDeclaration. - def exitVariableDeclaration(self, ctx:SolidityParser.VariableDeclarationContext): + def exitVariableDeclaration(self, ctx: SolidityParser.VariableDeclarationContext): pass - # Enter a parse tree produced by SolidityParser#typeName. - def enterTypeName(self, ctx:SolidityParser.TypeNameContext): + def enterTypeName(self, ctx: SolidityParser.TypeNameContext): pass # Exit a parse tree produced by SolidityParser#typeName. - def exitTypeName(self, ctx:SolidityParser.TypeNameContext): + def exitTypeName(self, ctx: SolidityParser.TypeNameContext): pass - # Enter a parse tree produced by SolidityParser#userDefinedTypeName. - def enterUserDefinedTypeName(self, ctx:SolidityParser.UserDefinedTypeNameContext): + def enterUserDefinedTypeName(self, ctx: SolidityParser.UserDefinedTypeNameContext): pass # Exit a parse tree produced by SolidityParser#userDefinedTypeName. - def exitUserDefinedTypeName(self, ctx:SolidityParser.UserDefinedTypeNameContext): + def exitUserDefinedTypeName(self, ctx: SolidityParser.UserDefinedTypeNameContext): pass - # Enter a parse tree produced by SolidityParser#mappingKey. - def enterMappingKey(self, ctx:SolidityParser.MappingKeyContext): + def enterMappingKey(self, ctx: SolidityParser.MappingKeyContext): pass # Exit a parse tree produced by SolidityParser#mappingKey. - def exitMappingKey(self, ctx:SolidityParser.MappingKeyContext): + def exitMappingKey(self, ctx: SolidityParser.MappingKeyContext): pass - # Enter a parse tree produced by SolidityParser#mapping. - def enterMapping(self, ctx:SolidityParser.MappingContext): + def enterMapping(self, ctx: SolidityParser.MappingContext): pass # Exit a parse tree produced by SolidityParser#mapping. - def exitMapping(self, ctx:SolidityParser.MappingContext): + def exitMapping(self, ctx: SolidityParser.MappingContext): pass - # Enter a parse tree produced by SolidityParser#mappingKeyName. - def enterMappingKeyName(self, ctx:SolidityParser.MappingKeyNameContext): + def enterMappingKeyName(self, ctx: SolidityParser.MappingKeyNameContext): pass # Exit a parse tree produced by SolidityParser#mappingKeyName. - def exitMappingKeyName(self, ctx:SolidityParser.MappingKeyNameContext): + def exitMappingKeyName(self, ctx: SolidityParser.MappingKeyNameContext): pass - # Enter a parse tree produced by SolidityParser#mappingValueName. - def enterMappingValueName(self, ctx:SolidityParser.MappingValueNameContext): + def enterMappingValueName(self, ctx: SolidityParser.MappingValueNameContext): pass # Exit a parse tree produced by SolidityParser#mappingValueName. - def exitMappingValueName(self, ctx:SolidityParser.MappingValueNameContext): + def exitMappingValueName(self, ctx: SolidityParser.MappingValueNameContext): pass - # Enter a parse tree produced by SolidityParser#functionTypeName. - def enterFunctionTypeName(self, ctx:SolidityParser.FunctionTypeNameContext): + def enterFunctionTypeName(self, ctx: SolidityParser.FunctionTypeNameContext): pass # Exit a parse tree produced by SolidityParser#functionTypeName. - def exitFunctionTypeName(self, ctx:SolidityParser.FunctionTypeNameContext): + def exitFunctionTypeName(self, ctx: SolidityParser.FunctionTypeNameContext): pass - # Enter a parse tree produced by SolidityParser#storageLocation. - def enterStorageLocation(self, ctx:SolidityParser.StorageLocationContext): + def enterStorageLocation(self, ctx: SolidityParser.StorageLocationContext): pass # Exit a parse tree produced by SolidityParser#storageLocation. - def exitStorageLocation(self, ctx:SolidityParser.StorageLocationContext): + def exitStorageLocation(self, ctx: SolidityParser.StorageLocationContext): pass - # Enter a parse tree produced by SolidityParser#stateMutability. - def enterStateMutability(self, ctx:SolidityParser.StateMutabilityContext): + def enterStateMutability(self, ctx: SolidityParser.StateMutabilityContext): pass # Exit a parse tree produced by SolidityParser#stateMutability. - def exitStateMutability(self, ctx:SolidityParser.StateMutabilityContext): + def exitStateMutability(self, ctx: SolidityParser.StateMutabilityContext): pass - # Enter a parse tree produced by SolidityParser#block. - def enterBlock(self, ctx:SolidityParser.BlockContext): + def enterBlock(self, ctx: SolidityParser.BlockContext): pass # Exit a parse tree produced by SolidityParser#block. - def exitBlock(self, ctx:SolidityParser.BlockContext): + def exitBlock(self, ctx: SolidityParser.BlockContext): pass - # Enter a parse tree produced by SolidityParser#statement. - def enterStatement(self, ctx:SolidityParser.StatementContext): + def enterStatement(self, ctx: SolidityParser.StatementContext): pass # Exit a parse tree produced by SolidityParser#statement. - def exitStatement(self, ctx:SolidityParser.StatementContext): + def exitStatement(self, ctx: SolidityParser.StatementContext): pass - # Enter a parse tree produced by SolidityParser#expressionStatement. - def enterExpressionStatement(self, ctx:SolidityParser.ExpressionStatementContext): + def enterExpressionStatement(self, ctx: SolidityParser.ExpressionStatementContext): pass # Exit a parse tree produced by SolidityParser#expressionStatement. - def exitExpressionStatement(self, ctx:SolidityParser.ExpressionStatementContext): + def exitExpressionStatement(self, ctx: SolidityParser.ExpressionStatementContext): pass - # Enter a parse tree produced by SolidityParser#ifStatement. - def enterIfStatement(self, ctx:SolidityParser.IfStatementContext): + def enterIfStatement(self, ctx: SolidityParser.IfStatementContext): pass # Exit a parse tree produced by SolidityParser#ifStatement. - def exitIfStatement(self, ctx:SolidityParser.IfStatementContext): + def exitIfStatement(self, ctx: SolidityParser.IfStatementContext): pass - # Enter a parse tree produced by SolidityParser#tryStatement. - def enterTryStatement(self, ctx:SolidityParser.TryStatementContext): + def enterTryStatement(self, ctx: SolidityParser.TryStatementContext): pass # Exit a parse tree produced by SolidityParser#tryStatement. - def exitTryStatement(self, ctx:SolidityParser.TryStatementContext): + def exitTryStatement(self, ctx: SolidityParser.TryStatementContext): pass - # Enter a parse tree produced by SolidityParser#catchClause. - def enterCatchClause(self, ctx:SolidityParser.CatchClauseContext): + def enterCatchClause(self, ctx: SolidityParser.CatchClauseContext): pass # Exit a parse tree produced by SolidityParser#catchClause. - def exitCatchClause(self, ctx:SolidityParser.CatchClauseContext): + def exitCatchClause(self, ctx: SolidityParser.CatchClauseContext): pass - # Enter a parse tree produced by SolidityParser#whileStatement. - def enterWhileStatement(self, ctx:SolidityParser.WhileStatementContext): + def enterWhileStatement(self, ctx: SolidityParser.WhileStatementContext): pass # Exit a parse tree produced by SolidityParser#whileStatement. - def exitWhileStatement(self, ctx:SolidityParser.WhileStatementContext): + def exitWhileStatement(self, ctx: SolidityParser.WhileStatementContext): pass - # Enter a parse tree produced by SolidityParser#simpleStatement. - def enterSimpleStatement(self, ctx:SolidityParser.SimpleStatementContext): + def enterSimpleStatement(self, ctx: SolidityParser.SimpleStatementContext): pass # Exit a parse tree produced by SolidityParser#simpleStatement. - def exitSimpleStatement(self, ctx:SolidityParser.SimpleStatementContext): + def exitSimpleStatement(self, ctx: SolidityParser.SimpleStatementContext): pass - # Enter a parse tree produced by SolidityParser#uncheckedStatement. - def enterUncheckedStatement(self, ctx:SolidityParser.UncheckedStatementContext): + def enterUncheckedStatement(self, ctx: SolidityParser.UncheckedStatementContext): pass # Exit a parse tree produced by SolidityParser#uncheckedStatement. - def exitUncheckedStatement(self, ctx:SolidityParser.UncheckedStatementContext): + def exitUncheckedStatement(self, ctx: SolidityParser.UncheckedStatementContext): pass - # Enter a parse tree produced by SolidityParser#forStatement. - def enterForStatement(self, ctx:SolidityParser.ForStatementContext): + def enterForStatement(self, ctx: SolidityParser.ForStatementContext): pass # Exit a parse tree produced by SolidityParser#forStatement. - def exitForStatement(self, ctx:SolidityParser.ForStatementContext): + def exitForStatement(self, ctx: SolidityParser.ForStatementContext): pass - # Enter a parse tree produced by SolidityParser#inlineAssemblyStatement. - def enterInlineAssemblyStatement(self, ctx:SolidityParser.InlineAssemblyStatementContext): + def enterInlineAssemblyStatement( + self, ctx: SolidityParser.InlineAssemblyStatementContext + ): pass # Exit a parse tree produced by SolidityParser#inlineAssemblyStatement. - def exitInlineAssemblyStatement(self, ctx:SolidityParser.InlineAssemblyStatementContext): + def exitInlineAssemblyStatement( + self, ctx: SolidityParser.InlineAssemblyStatementContext + ): pass - # Enter a parse tree produced by SolidityParser#inlineAssemblyStatementFlag. - def enterInlineAssemblyStatementFlag(self, ctx:SolidityParser.InlineAssemblyStatementFlagContext): + def enterInlineAssemblyStatementFlag( + self, ctx: SolidityParser.InlineAssemblyStatementFlagContext + ): pass # Exit a parse tree produced by SolidityParser#inlineAssemblyStatementFlag. - def exitInlineAssemblyStatementFlag(self, ctx:SolidityParser.InlineAssemblyStatementFlagContext): + def exitInlineAssemblyStatementFlag( + self, ctx: SolidityParser.InlineAssemblyStatementFlagContext + ): pass - # Enter a parse tree produced by SolidityParser#doWhileStatement. - def enterDoWhileStatement(self, ctx:SolidityParser.DoWhileStatementContext): + def enterDoWhileStatement(self, ctx: SolidityParser.DoWhileStatementContext): pass # Exit a parse tree produced by SolidityParser#doWhileStatement. - def exitDoWhileStatement(self, ctx:SolidityParser.DoWhileStatementContext): + def exitDoWhileStatement(self, ctx: SolidityParser.DoWhileStatementContext): pass - # Enter a parse tree produced by SolidityParser#continueStatement. - def enterContinueStatement(self, ctx:SolidityParser.ContinueStatementContext): + def enterContinueStatement(self, ctx: SolidityParser.ContinueStatementContext): pass # Exit a parse tree produced by SolidityParser#continueStatement. - def exitContinueStatement(self, ctx:SolidityParser.ContinueStatementContext): + def exitContinueStatement(self, ctx: SolidityParser.ContinueStatementContext): pass - # Enter a parse tree produced by SolidityParser#breakStatement. - def enterBreakStatement(self, ctx:SolidityParser.BreakStatementContext): + def enterBreakStatement(self, ctx: SolidityParser.BreakStatementContext): pass # Exit a parse tree produced by SolidityParser#breakStatement. - def exitBreakStatement(self, ctx:SolidityParser.BreakStatementContext): + def exitBreakStatement(self, ctx: SolidityParser.BreakStatementContext): pass - # Enter a parse tree produced by SolidityParser#returnStatement. - def enterReturnStatement(self, ctx:SolidityParser.ReturnStatementContext): + def enterReturnStatement(self, ctx: SolidityParser.ReturnStatementContext): pass # Exit a parse tree produced by SolidityParser#returnStatement. - def exitReturnStatement(self, ctx:SolidityParser.ReturnStatementContext): + def exitReturnStatement(self, ctx: SolidityParser.ReturnStatementContext): pass - # Enter a parse tree produced by SolidityParser#throwStatement. - def enterThrowStatement(self, ctx:SolidityParser.ThrowStatementContext): + def enterThrowStatement(self, ctx: SolidityParser.ThrowStatementContext): pass # Exit a parse tree produced by SolidityParser#throwStatement. - def exitThrowStatement(self, ctx:SolidityParser.ThrowStatementContext): + def exitThrowStatement(self, ctx: SolidityParser.ThrowStatementContext): pass - # Enter a parse tree produced by SolidityParser#emitStatement. - def enterEmitStatement(self, ctx:SolidityParser.EmitStatementContext): + def enterEmitStatement(self, ctx: SolidityParser.EmitStatementContext): pass # Exit a parse tree produced by SolidityParser#emitStatement. - def exitEmitStatement(self, ctx:SolidityParser.EmitStatementContext): + def exitEmitStatement(self, ctx: SolidityParser.EmitStatementContext): pass - # Enter a parse tree produced by SolidityParser#revertStatement. - def enterRevertStatement(self, ctx:SolidityParser.RevertStatementContext): + def enterRevertStatement(self, ctx: SolidityParser.RevertStatementContext): pass # Exit a parse tree produced by SolidityParser#revertStatement. - def exitRevertStatement(self, ctx:SolidityParser.RevertStatementContext): + def exitRevertStatement(self, ctx: SolidityParser.RevertStatementContext): pass - # Enter a parse tree produced by SolidityParser#variableDeclarationStatement. - def enterVariableDeclarationStatement(self, ctx:SolidityParser.VariableDeclarationStatementContext): + def enterVariableDeclarationStatement( + self, ctx: SolidityParser.VariableDeclarationStatementContext + ): pass # Exit a parse tree produced by SolidityParser#variableDeclarationStatement. - def exitVariableDeclarationStatement(self, ctx:SolidityParser.VariableDeclarationStatementContext): + def exitVariableDeclarationStatement( + self, ctx: SolidityParser.VariableDeclarationStatementContext + ): pass - # Enter a parse tree produced by SolidityParser#variableDeclarationList. - def enterVariableDeclarationList(self, ctx:SolidityParser.VariableDeclarationListContext): + def enterVariableDeclarationList( + self, ctx: SolidityParser.VariableDeclarationListContext + ): pass # Exit a parse tree produced by SolidityParser#variableDeclarationList. - def exitVariableDeclarationList(self, ctx:SolidityParser.VariableDeclarationListContext): + def exitVariableDeclarationList( + self, ctx: SolidityParser.VariableDeclarationListContext + ): pass - # Enter a parse tree produced by SolidityParser#identifierList. - def enterIdentifierList(self, ctx:SolidityParser.IdentifierListContext): + def enterIdentifierList(self, ctx: SolidityParser.IdentifierListContext): pass # Exit a parse tree produced by SolidityParser#identifierList. - def exitIdentifierList(self, ctx:SolidityParser.IdentifierListContext): + def exitIdentifierList(self, ctx: SolidityParser.IdentifierListContext): pass - # Enter a parse tree produced by SolidityParser#elementaryTypeName. - def enterElementaryTypeName(self, ctx:SolidityParser.ElementaryTypeNameContext): + def enterElementaryTypeName(self, ctx: SolidityParser.ElementaryTypeNameContext): pass # Exit a parse tree produced by SolidityParser#elementaryTypeName. - def exitElementaryTypeName(self, ctx:SolidityParser.ElementaryTypeNameContext): + def exitElementaryTypeName(self, ctx: SolidityParser.ElementaryTypeNameContext): pass - # Enter a parse tree produced by SolidityParser#expression. - def enterExpression(self, ctx:SolidityParser.ExpressionContext): + def enterExpression(self, ctx: SolidityParser.ExpressionContext): pass # Exit a parse tree produced by SolidityParser#expression. - def exitExpression(self, ctx:SolidityParser.ExpressionContext): + def exitExpression(self, ctx: SolidityParser.ExpressionContext): pass - # Enter a parse tree produced by SolidityParser#primaryExpression. - def enterPrimaryExpression(self, ctx:SolidityParser.PrimaryExpressionContext): + def enterPrimaryExpression(self, ctx: SolidityParser.PrimaryExpressionContext): pass # Exit a parse tree produced by SolidityParser#primaryExpression. - def exitPrimaryExpression(self, ctx:SolidityParser.PrimaryExpressionContext): + def exitPrimaryExpression(self, ctx: SolidityParser.PrimaryExpressionContext): pass - # Enter a parse tree produced by SolidityParser#expressionList. - def enterExpressionList(self, ctx:SolidityParser.ExpressionListContext): + def enterExpressionList(self, ctx: SolidityParser.ExpressionListContext): pass # Exit a parse tree produced by SolidityParser#expressionList. - def exitExpressionList(self, ctx:SolidityParser.ExpressionListContext): + def exitExpressionList(self, ctx: SolidityParser.ExpressionListContext): pass - # Enter a parse tree produced by SolidityParser#nameValueList. - def enterNameValueList(self, ctx:SolidityParser.NameValueListContext): + def enterNameValueList(self, ctx: SolidityParser.NameValueListContext): pass # Exit a parse tree produced by SolidityParser#nameValueList. - def exitNameValueList(self, ctx:SolidityParser.NameValueListContext): + def exitNameValueList(self, ctx: SolidityParser.NameValueListContext): pass - # Enter a parse tree produced by SolidityParser#nameValue. - def enterNameValue(self, ctx:SolidityParser.NameValueContext): + def enterNameValue(self, ctx: SolidityParser.NameValueContext): pass # Exit a parse tree produced by SolidityParser#nameValue. - def exitNameValue(self, ctx:SolidityParser.NameValueContext): + def exitNameValue(self, ctx: SolidityParser.NameValueContext): pass - # Enter a parse tree produced by SolidityParser#functionCallArguments. - def enterFunctionCallArguments(self, ctx:SolidityParser.FunctionCallArgumentsContext): + def enterFunctionCallArguments( + self, ctx: SolidityParser.FunctionCallArgumentsContext + ): pass # Exit a parse tree produced by SolidityParser#functionCallArguments. - def exitFunctionCallArguments(self, ctx:SolidityParser.FunctionCallArgumentsContext): + def exitFunctionCallArguments( + self, ctx: SolidityParser.FunctionCallArgumentsContext + ): pass - # Enter a parse tree produced by SolidityParser#functionCall. - def enterFunctionCall(self, ctx:SolidityParser.FunctionCallContext): + def enterFunctionCall(self, ctx: SolidityParser.FunctionCallContext): pass # Exit a parse tree produced by SolidityParser#functionCall. - def exitFunctionCall(self, ctx:SolidityParser.FunctionCallContext): + def exitFunctionCall(self, ctx: SolidityParser.FunctionCallContext): pass - # Enter a parse tree produced by SolidityParser#assemblyBlock. - def enterAssemblyBlock(self, ctx:SolidityParser.AssemblyBlockContext): + def enterAssemblyBlock(self, ctx: SolidityParser.AssemblyBlockContext): pass # Exit a parse tree produced by SolidityParser#assemblyBlock. - def exitAssemblyBlock(self, ctx:SolidityParser.AssemblyBlockContext): + def exitAssemblyBlock(self, ctx: SolidityParser.AssemblyBlockContext): pass - # Enter a parse tree produced by SolidityParser#assemblyItem. - def enterAssemblyItem(self, ctx:SolidityParser.AssemblyItemContext): + def enterAssemblyItem(self, ctx: SolidityParser.AssemblyItemContext): pass # Exit a parse tree produced by SolidityParser#assemblyItem. - def exitAssemblyItem(self, ctx:SolidityParser.AssemblyItemContext): + def exitAssemblyItem(self, ctx: SolidityParser.AssemblyItemContext): pass - # Enter a parse tree produced by SolidityParser#assemblyExpression. - def enterAssemblyExpression(self, ctx:SolidityParser.AssemblyExpressionContext): + def enterAssemblyExpression(self, ctx: SolidityParser.AssemblyExpressionContext): pass # Exit a parse tree produced by SolidityParser#assemblyExpression. - def exitAssemblyExpression(self, ctx:SolidityParser.AssemblyExpressionContext): + def exitAssemblyExpression(self, ctx: SolidityParser.AssemblyExpressionContext): pass - # Enter a parse tree produced by SolidityParser#assemblyMember. - def enterAssemblyMember(self, ctx:SolidityParser.AssemblyMemberContext): + def enterAssemblyMember(self, ctx: SolidityParser.AssemblyMemberContext): pass # Exit a parse tree produced by SolidityParser#assemblyMember. - def exitAssemblyMember(self, ctx:SolidityParser.AssemblyMemberContext): + def exitAssemblyMember(self, ctx: SolidityParser.AssemblyMemberContext): pass - # Enter a parse tree produced by SolidityParser#assemblyCall. - def enterAssemblyCall(self, ctx:SolidityParser.AssemblyCallContext): + def enterAssemblyCall(self, ctx: SolidityParser.AssemblyCallContext): pass # Exit a parse tree produced by SolidityParser#assemblyCall. - def exitAssemblyCall(self, ctx:SolidityParser.AssemblyCallContext): + def exitAssemblyCall(self, ctx: SolidityParser.AssemblyCallContext): pass - # Enter a parse tree produced by SolidityParser#assemblyLocalDefinition. - def enterAssemblyLocalDefinition(self, ctx:SolidityParser.AssemblyLocalDefinitionContext): + def enterAssemblyLocalDefinition( + self, ctx: SolidityParser.AssemblyLocalDefinitionContext + ): pass # Exit a parse tree produced by SolidityParser#assemblyLocalDefinition. - def exitAssemblyLocalDefinition(self, ctx:SolidityParser.AssemblyLocalDefinitionContext): + def exitAssemblyLocalDefinition( + self, ctx: SolidityParser.AssemblyLocalDefinitionContext + ): pass - # Enter a parse tree produced by SolidityParser#assemblyAssignment. - def enterAssemblyAssignment(self, ctx:SolidityParser.AssemblyAssignmentContext): + def enterAssemblyAssignment(self, ctx: SolidityParser.AssemblyAssignmentContext): pass # Exit a parse tree produced by SolidityParser#assemblyAssignment. - def exitAssemblyAssignment(self, ctx:SolidityParser.AssemblyAssignmentContext): + def exitAssemblyAssignment(self, ctx: SolidityParser.AssemblyAssignmentContext): pass - # Enter a parse tree produced by SolidityParser#assemblyIdentifierOrList. - def enterAssemblyIdentifierOrList(self, ctx:SolidityParser.AssemblyIdentifierOrListContext): + def enterAssemblyIdentifierOrList( + self, ctx: SolidityParser.AssemblyIdentifierOrListContext + ): pass # Exit a parse tree produced by SolidityParser#assemblyIdentifierOrList. - def exitAssemblyIdentifierOrList(self, ctx:SolidityParser.AssemblyIdentifierOrListContext): + def exitAssemblyIdentifierOrList( + self, ctx: SolidityParser.AssemblyIdentifierOrListContext + ): pass - # Enter a parse tree produced by SolidityParser#assemblyIdentifierList. - def enterAssemblyIdentifierList(self, ctx:SolidityParser.AssemblyIdentifierListContext): + def enterAssemblyIdentifierList( + self, ctx: SolidityParser.AssemblyIdentifierListContext + ): pass # Exit a parse tree produced by SolidityParser#assemblyIdentifierList. - def exitAssemblyIdentifierList(self, ctx:SolidityParser.AssemblyIdentifierListContext): + def exitAssemblyIdentifierList( + self, ctx: SolidityParser.AssemblyIdentifierListContext + ): pass - # Enter a parse tree produced by SolidityParser#assemblyStackAssignment. - def enterAssemblyStackAssignment(self, ctx:SolidityParser.AssemblyStackAssignmentContext): + def enterAssemblyStackAssignment( + self, ctx: SolidityParser.AssemblyStackAssignmentContext + ): pass # Exit a parse tree produced by SolidityParser#assemblyStackAssignment. - def exitAssemblyStackAssignment(self, ctx:SolidityParser.AssemblyStackAssignmentContext): + def exitAssemblyStackAssignment( + self, ctx: SolidityParser.AssemblyStackAssignmentContext + ): pass - # Enter a parse tree produced by SolidityParser#labelDefinition. - def enterLabelDefinition(self, ctx:SolidityParser.LabelDefinitionContext): + def enterLabelDefinition(self, ctx: SolidityParser.LabelDefinitionContext): pass # Exit a parse tree produced by SolidityParser#labelDefinition. - def exitLabelDefinition(self, ctx:SolidityParser.LabelDefinitionContext): + def exitLabelDefinition(self, ctx: SolidityParser.LabelDefinitionContext): pass - # Enter a parse tree produced by SolidityParser#assemblySwitch. - def enterAssemblySwitch(self, ctx:SolidityParser.AssemblySwitchContext): + def enterAssemblySwitch(self, ctx: SolidityParser.AssemblySwitchContext): pass # Exit a parse tree produced by SolidityParser#assemblySwitch. - def exitAssemblySwitch(self, ctx:SolidityParser.AssemblySwitchContext): + def exitAssemblySwitch(self, ctx: SolidityParser.AssemblySwitchContext): pass - # Enter a parse tree produced by SolidityParser#assemblyCase. - def enterAssemblyCase(self, ctx:SolidityParser.AssemblyCaseContext): + def enterAssemblyCase(self, ctx: SolidityParser.AssemblyCaseContext): pass # Exit a parse tree produced by SolidityParser#assemblyCase. - def exitAssemblyCase(self, ctx:SolidityParser.AssemblyCaseContext): + def exitAssemblyCase(self, ctx: SolidityParser.AssemblyCaseContext): pass - # Enter a parse tree produced by SolidityParser#assemblyFunctionDefinition. - def enterAssemblyFunctionDefinition(self, ctx:SolidityParser.AssemblyFunctionDefinitionContext): + def enterAssemblyFunctionDefinition( + self, ctx: SolidityParser.AssemblyFunctionDefinitionContext + ): pass # Exit a parse tree produced by SolidityParser#assemblyFunctionDefinition. - def exitAssemblyFunctionDefinition(self, ctx:SolidityParser.AssemblyFunctionDefinitionContext): + def exitAssemblyFunctionDefinition( + self, ctx: SolidityParser.AssemblyFunctionDefinitionContext + ): pass - # Enter a parse tree produced by SolidityParser#assemblyFunctionReturns. - def enterAssemblyFunctionReturns(self, ctx:SolidityParser.AssemblyFunctionReturnsContext): + def enterAssemblyFunctionReturns( + self, ctx: SolidityParser.AssemblyFunctionReturnsContext + ): pass # Exit a parse tree produced by SolidityParser#assemblyFunctionReturns. - def exitAssemblyFunctionReturns(self, ctx:SolidityParser.AssemblyFunctionReturnsContext): + def exitAssemblyFunctionReturns( + self, ctx: SolidityParser.AssemblyFunctionReturnsContext + ): pass - # Enter a parse tree produced by SolidityParser#assemblyFor. - def enterAssemblyFor(self, ctx:SolidityParser.AssemblyForContext): + def enterAssemblyFor(self, ctx: SolidityParser.AssemblyForContext): pass # Exit a parse tree produced by SolidityParser#assemblyFor. - def exitAssemblyFor(self, ctx:SolidityParser.AssemblyForContext): + def exitAssemblyFor(self, ctx: SolidityParser.AssemblyForContext): pass - # Enter a parse tree produced by SolidityParser#assemblyIf. - def enterAssemblyIf(self, ctx:SolidityParser.AssemblyIfContext): + def enterAssemblyIf(self, ctx: SolidityParser.AssemblyIfContext): pass # Exit a parse tree produced by SolidityParser#assemblyIf. - def exitAssemblyIf(self, ctx:SolidityParser.AssemblyIfContext): + def exitAssemblyIf(self, ctx: SolidityParser.AssemblyIfContext): pass - # Enter a parse tree produced by SolidityParser#assemblyLiteral. - def enterAssemblyLiteral(self, ctx:SolidityParser.AssemblyLiteralContext): + def enterAssemblyLiteral(self, ctx: SolidityParser.AssemblyLiteralContext): pass # Exit a parse tree produced by SolidityParser#assemblyLiteral. - def exitAssemblyLiteral(self, ctx:SolidityParser.AssemblyLiteralContext): + def exitAssemblyLiteral(self, ctx: SolidityParser.AssemblyLiteralContext): pass - # Enter a parse tree produced by SolidityParser#tupleExpression. - def enterTupleExpression(self, ctx:SolidityParser.TupleExpressionContext): + def enterTupleExpression(self, ctx: SolidityParser.TupleExpressionContext): pass # Exit a parse tree produced by SolidityParser#tupleExpression. - def exitTupleExpression(self, ctx:SolidityParser.TupleExpressionContext): + def exitTupleExpression(self, ctx: SolidityParser.TupleExpressionContext): pass - # Enter a parse tree produced by SolidityParser#numberLiteral. - def enterNumberLiteral(self, ctx:SolidityParser.NumberLiteralContext): + def enterNumberLiteral(self, ctx: SolidityParser.NumberLiteralContext): pass # Exit a parse tree produced by SolidityParser#numberLiteral. - def exitNumberLiteral(self, ctx:SolidityParser.NumberLiteralContext): + def exitNumberLiteral(self, ctx: SolidityParser.NumberLiteralContext): pass - # Enter a parse tree produced by SolidityParser#identifier. - def enterIdentifier(self, ctx:SolidityParser.IdentifierContext): + def enterIdentifier(self, ctx: SolidityParser.IdentifierContext): pass # Exit a parse tree produced by SolidityParser#identifier. - def exitIdentifier(self, ctx:SolidityParser.IdentifierContext): + def exitIdentifier(self, ctx: SolidityParser.IdentifierContext): pass - # Enter a parse tree produced by SolidityParser#hexLiteral. - def enterHexLiteral(self, ctx:SolidityParser.HexLiteralContext): + def enterHexLiteral(self, ctx: SolidityParser.HexLiteralContext): pass # Exit a parse tree produced by SolidityParser#hexLiteral. - def exitHexLiteral(self, ctx:SolidityParser.HexLiteralContext): + def exitHexLiteral(self, ctx: SolidityParser.HexLiteralContext): pass - # Enter a parse tree produced by SolidityParser#overrideSpecifier. - def enterOverrideSpecifier(self, ctx:SolidityParser.OverrideSpecifierContext): + def enterOverrideSpecifier(self, ctx: SolidityParser.OverrideSpecifierContext): pass # Exit a parse tree produced by SolidityParser#overrideSpecifier. - def exitOverrideSpecifier(self, ctx:SolidityParser.OverrideSpecifierContext): + def exitOverrideSpecifier(self, ctx: SolidityParser.OverrideSpecifierContext): pass - # Enter a parse tree produced by SolidityParser#stringLiteral. - def enterStringLiteral(self, ctx:SolidityParser.StringLiteralContext): + def enterStringLiteral(self, ctx: SolidityParser.StringLiteralContext): pass # Exit a parse tree produced by SolidityParser#stringLiteral. - def exitStringLiteral(self, ctx:SolidityParser.StringLiteralContext): + def exitStringLiteral(self, ctx: SolidityParser.StringLiteralContext): pass - - diff --git a/solidity_parser/solidity_antlr4/SolidityParser.py b/solidity_parser/solidity_antlr4/SolidityParser.py index 86f2246..387aa3c 100644 --- a/solidity_parser/solidity_antlr4/SolidityParser.py +++ b/solidity_parser/solidity_antlr4/SolidityParser.py @@ -14,8 +14,8 @@ def serializedATN(): buf.write("\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22\4\23\t\23") buf.write("\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31") buf.write("\t\31\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36\t\36") - buf.write("\4\37\t\37\4 \t \4!\t!\4\"\t\"\4#\t#\4$\t$\4%\t%\4&\t") - buf.write("&\4\'\t\'\4(\t(\4)\t)\4*\t*\4+\t+\4,\t,\4-\t-\4.\t.\4") + buf.write('\4\37\t\37\4 \t \4!\t!\4"\t"\4#\t#\4$\t$\4%\t%\4&\t') + buf.write("&\4'\t'\4(\t(\4)\t)\4*\t*\4+\t+\4,\t,\4-\t-\4.\t.\4") buf.write("/\t/\4\60\t\60\4\61\t\61\4\62\t\62\4\63\t\63\4\64\t\64") buf.write("\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\49\t9\4:\t:\4;\t") buf.write(";\4<\t<\4=\t=\4>\t>\4?\t?\4@\t@\4A\tA\4B\tB\4C\tC\4D\t") @@ -55,12 +55,12 @@ def serializedATN(): buf.write("\35\16\35\u01e9\13\35\3\36\3\36\3\36\3\36\5\36\u01ef\n") buf.write("\36\3\36\3\36\3\37\3\37\3 \3 \3 \3 \5 \u01f9\n \3 \3 ") buf.write("\7 \u01fd\n \f \16 \u0200\13 \3 \3 \3!\3!\3!\3!\7!\u0208") - buf.write("\n!\f!\16!\u020b\13!\5!\u020d\n!\3!\3!\3\"\3\"\5\"\u0213") - buf.write("\n\"\3\"\5\"\u0216\n\"\3#\3#\3#\3#\7#\u021c\n#\f#\16#") + buf.write('\n!\f!\16!\u020b\13!\5!\u020d\n!\3!\3!\3"\3"\5"\u0213') + buf.write('\n"\3"\5"\u0216\n"\3#\3#\3#\3#\7#\u021c\n#\f#\16#') buf.write("\u021f\13#\5#\u0221\n#\3#\3#\3$\3$\5$\u0227\n$\3$\5$\u022a") buf.write("\n$\3%\3%\3%\3%\7%\u0230\n%\f%\16%\u0233\13%\5%\u0235") - buf.write("\n%\3%\3%\3&\3&\5&\u023b\n&\3\'\3\'\5\'\u023f\n\'\3\'") - buf.write("\3\'\3(\3(\3(\3(\3(\3(\3(\5(\u024a\n(\3(\3(\3(\5(\u024f") + buf.write("\n%\3%\3%\3&\3&\5&\u023b\n&\3'\3'\5'\u023f\n'\3'") + buf.write("\3'\3(\3(\3(\3(\3(\3(\3(\5(\u024a\n(\3(\3(\3(\5(\u024f") buf.write("\n(\3(\7(\u0252\n(\f(\16(\u0255\13(\3)\3)\3)\7)\u025a") buf.write("\n)\f)\16)\u025d\13)\3*\3*\5*\u0261\n*\3+\3+\3+\3+\5+") buf.write("\u0267\n+\3+\3+\3+\5+\u026c\n+\3+\3+\3,\3,\3-\3-\3.\3") @@ -106,21 +106,21 @@ def serializedATN(): buf.write("\na\3a\5a\u0473\na\3b\3b\5b\u0477\nb\3c\3c\3d\6d\u047c") buf.write("\nd\rd\16d\u047d\3e\3e\3e\3e\3e\7e\u0485\ne\fe\16e\u0488") buf.write("\13e\3e\3e\5e\u048c\ne\3f\6f\u048f\nf\rf\16f\u0490\3f") - buf.write("\2\4N\u008eg\2\4\6\b\n\f\16\20\22\24\26\30\32\34\36 \"") + buf.write('\2\4N\u008eg\2\4\6\b\n\f\16\20\22\24\26\30\32\34\36 "') buf.write("$&(*,.\60\62\64\668:<>@BDFHJLNPRTVXZ\\^`bdfhjlnprtvxz") buf.write("|~\u0080\u0082\u0084\u0086\u0088\u008a\u008c\u008e\u0090") buf.write("\u0092\u0094\u0096\u0098\u009a\u009c\u009e\u00a0\u00a2") buf.write("\u00a4\u00a6\u00a8\u00aa\u00ac\u00ae\u00b0\u00b2\u00b4") buf.write("\u00b6\u00b8\u00ba\u00bc\u00be\u00c0\u00c2\u00c4\u00c6") buf.write("\u00c8\u00ca\2\21\3\2\7\r\3\2\25\27\5\2\5\5\7\f\36%\3") - buf.write("\2\62\64\6\2ppww{{}}\5\2..ADcg\3\2EF\3\2 !\4\2\5\5\"#") + buf.write('\2\62\64\6\2ppww{{}}\5\2..ADcg\3\2EF\3\2 !\4\2\5\5"#') buf.write("\3\2LM\3\2\t\f\3\2$%\4\2\r\rPY\3\2ij\f\2\20\20\33\33.") buf.write(".\64\64@@aassww~\177\u0081\u0082\2\u0513\2\u00d8\3\2\2") buf.write("\2\4\u00dd\3\2\2\2\6\u00e2\3\2\2\2\b\u00e7\3\2\2\2\n\u00e9") buf.write("\3\2\2\2\f\u00f3\3\2\2\2\16\u00fd\3\2\2\2\20\u00ff\3\2") buf.write("\2\2\22\u0128\3\2\2\2\24\u012a\3\2\2\2\26\u012d\3\2\2") buf.write("\2\30\u0145\3\2\2\2\32\u0156\3\2\2\2\34\u0158\3\2\2\2") - buf.write("\36\u016b\3\2\2\2 \u0172\3\2\2\2\"\u0177\3\2\2\2$\u017d") + buf.write('\36\u016b\3\2\2\2 \u0172\3\2\2\2"\u0177\3\2\2\2$\u017d') buf.write("\3\2\2\2&\u0195\3\2\2\2(\u0197\3\2\2\2*\u019c\3\2\2\2") buf.write(",\u019e\3\2\2\2.\u01af\3\2\2\2\60\u01bf\3\2\2\2\62\u01c7") buf.write("\3\2\2\2\64\u01d8\3\2\2\2\66\u01da\3\2\2\28\u01e7\3\2") @@ -150,7 +150,7 @@ def serializedATN(): buf.write("\3\2\2\2\u00ca\u048e\3\2\2\2\u00cc\u00d7\5\4\3\2\u00cd") buf.write("\u00d7\5\22\n\2\u00ce\u00d7\5\26\f\2\u00cf\u00d7\5> \2") buf.write("\u00d0\u00d7\5,\27\2\u00d1\u00d7\5\62\32\2\u00d2\u00d7") - buf.write("\5\36\20\2\u00d3\u00d7\5 \21\2\u00d4\u00d7\5\"\22\2\u00d5") + buf.write('\5\36\20\2\u00d3\u00d7\5 \21\2\u00d4\u00d7\5"\22\2\u00d5') buf.write("\u00d7\5$\23\2\u00d6\u00cc\3\2\2\2\u00d6\u00cd\3\2\2\2") buf.write("\u00d6\u00ce\3\2\2\2\u00d6\u00cf\3\2\2\2\u00d6\u00d0\3") buf.write("\2\2\2\u00d6\u00d1\3\2\2\2\u00d6\u00d2\3\2\2\2\u00d6\u00d3") @@ -209,7 +209,7 @@ def serializedATN(): buf.write("\2\2\2\u014d\u0157\5\34\17\2\u014e\u0157\5$\23\2\u014f") buf.write("\u0157\5,\27\2\u0150\u0157\5.\30\2\u0151\u0157\5\62\32") buf.write("\2\u0152\u0157\5:\36\2\u0153\u0157\5> \2\u0154\u0157\5") - buf.write(" \21\2\u0155\u0157\5\"\22\2\u0156\u014d\3\2\2\2\u0156") + buf.write(' \21\2\u0155\u0157\5"\22\2\u0156\u014d\3\2\2\2\u0156') buf.write("\u014e\3\2\2\2\u0156\u014f\3\2\2\2\u0156\u0150\3\2\2\2") buf.write("\u0156\u0151\3\2\2\2\u0156\u0152\3\2\2\2\u0156\u0153\3") buf.write("\2\2\2\u0156\u0154\3\2\2\2\u0156\u0155\3\2\2\2\u0157\33") @@ -239,17 +239,17 @@ def serializedATN(): buf.write("\3\2\2\2\u018f\u0192\3\2\2\2\u0190\u018e\3\2\2\2\u0190") buf.write("\u0191\3\2\2\2\u0191\u0193\3\2\2\2\u0192\u0190\3\2\2\2") buf.write("\u0193\u0194\7\23\2\2\u0194\u0196\3\2\2\2\u0195\u0189") - buf.write("\3\2\2\2\u0195\u018a\3\2\2\2\u0196\'\3\2\2\2\u0197\u019a") + buf.write("\3\2\2\2\u0195\u018a\3\2\2\2\u0196'\3\2\2\2\u0197\u019a") buf.write("\5P)\2\u0198\u0199\7\16\2\2\u0199\u019b\5*\26\2\u019a") buf.write("\u0198\3\2\2\2\u019a\u019b\3\2\2\2\u019b)\3\2\2\2\u019c") buf.write("\u019d\t\4\2\2\u019d+\3\2\2\2\u019e\u019f\7&\2\2\u019f") buf.write("\u01a0\5\u00c4c\2\u01a0\u01ab\7\21\2\2\u01a1\u01a2\5L") - buf.write("\'\2\u01a2\u01a8\7\4\2\2\u01a3\u01a4\5L\'\2\u01a4\u01a5") + buf.write("'\2\u01a2\u01a8\7\4\2\2\u01a3\u01a4\5L'\2\u01a4\u01a5") buf.write("\7\4\2\2\u01a5\u01a7\3\2\2\2\u01a6\u01a3\3\2\2\2\u01a7") buf.write("\u01aa\3\2\2\2\u01a8\u01a6\3\2\2\2\u01a8\u01a9\3\2\2\2") buf.write("\u01a9\u01ac\3\2\2\2\u01aa\u01a8\3\2\2\2\u01ab\u01a1\3") buf.write("\2\2\2\u01ab\u01ac\3\2\2\2\u01ac\u01ad\3\2\2\2\u01ad\u01ae") - buf.write("\7\23\2\2\u01ae-\3\2\2\2\u01af\u01b0\7\'\2\2\u01b0\u01b2") + buf.write("\7\23\2\2\u01ae-\3\2\2\2\u01af\u01b0\7'\2\2\u01b0\u01b2") buf.write("\5\u00c4c\2\u01b1\u01b3\5@!\2\u01b2\u01b1\3\2\2\2\u01b2") buf.write("\u01b3\3\2\2\2\u01b3\u01b8\3\2\2\2\u01b4\u01b7\7z\2\2") buf.write("\u01b5\u01b7\5\u00c8e\2\u01b6\u01b4\3\2\2\2\u01b6\u01b5") @@ -289,7 +289,7 @@ def serializedATN(): buf.write("\u0200\3\2\2\2\u01fe\u01fc\3\2\2\2\u01fe\u01ff\3\2\2\2") buf.write("\u01ff\u0201\3\2\2\2\u0200\u01fe\3\2\2\2\u0201\u0202\7") buf.write("\23\2\2\u0202?\3\2\2\2\u0203\u020c\7\31\2\2\u0204\u0209") - buf.write("\5B\"\2\u0205\u0206\7\22\2\2\u0206\u0208\5B\"\2\u0207") + buf.write('\5B"\2\u0205\u0206\7\22\2\2\u0206\u0208\5B"\2\u0207') buf.write("\u0205\3\2\2\2\u0208\u020b\3\2\2\2\u0209\u0207\3\2\2\2") buf.write("\u0209\u020a\3\2\2\2\u020a\u020d\3\2\2\2\u020b\u0209\3") buf.write("\2\2\2\u020c\u0204\3\2\2\2\u020c\u020d\3\2\2\2\u020d\u020e") @@ -402,14 +402,14 @@ def serializedATN(): buf.write("\7\4\2\2\u0304\u0083\3\2\2\2\u0305\u0306\7@\2\2\u0306") buf.write("\u0307\5\u009aN\2\u0307\u0308\7\4\2\2\u0308\u0085\3\2") buf.write("\2\2\u0309\u030a\7A\2\2\u030a\u0311\5\u008aF\2\u030b\u0311") - buf.write("\5L\'\2\u030c\u030d\7\31\2\2\u030d\u030e\5\u0088E\2\u030e") + buf.write("\5L'\2\u030c\u030d\7\31\2\2\u030d\u030e\5\u0088E\2\u030e") buf.write("\u030f\7\32\2\2\u030f\u0311\3\2\2\2\u0310\u0309\3\2\2") buf.write("\2\u0310\u030b\3\2\2\2\u0310\u030c\3\2\2\2\u0311\u0314") buf.write("\3\2\2\2\u0312\u0313\7\r\2\2\u0313\u0315\5\u008eH\2\u0314") buf.write("\u0312\3\2\2\2\u0314\u0315\3\2\2\2\u0315\u0316\3\2\2\2") buf.write("\u0316\u0317\7\4\2\2\u0317\u0087\3\2\2\2\u0318\u031a\5") - buf.write("L\'\2\u0319\u0318\3\2\2\2\u0319\u031a\3\2\2\2\u031a\u0321") - buf.write("\3\2\2\2\u031b\u031d\7\22\2\2\u031c\u031e\5L\'\2\u031d") + buf.write("L'\2\u0319\u0318\3\2\2\2\u0319\u031a\3\2\2\2\u031a\u0321") + buf.write("\3\2\2\2\u031b\u031d\7\22\2\2\u031c\u031e\5L'\2\u031d") buf.write("\u031c\3\2\2\2\u031d\u031e\3\2\2\2\u031e\u0320\3\2\2\2") buf.write("\u031f\u031b\3\2\2\2\u0320\u0323\3\2\2\2\u0321\u031f\3") buf.write("\2\2\2\u0321\u0322\3\2\2\2\u0322\u0089\3\2\2\2\u0323\u0321") @@ -606,77 +606,282 @@ def serializedATN(): return buf.getvalue() -class SolidityParser ( Parser ): - +class SolidityParser(Parser): grammarFileName = "Solidity.g4" atn = ATNDeserializer().deserialize(serializedATN()) - decisionsToDFA = [ DFA(ds, i) for i, ds in enumerate(atn.decisionToState) ] + decisionsToDFA = [DFA(ds, i) for i, ds in enumerate(atn.decisionToState)] sharedContextCache = PredictionContextCache() - literalNames = [ "", "'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'", "", - "", "", "", "", - "", "", "", "", - "", "", "'anonymous'", "'break'", - "'constant'", "'immutable'", "'continue'", "'leave'", - "'external'", "'indexed'", "'internal'", "'payable'", - "'private'", "'public'", "'virtual'", "'pure'", "'type'", - "'view'", "'global'", "'constructor'", "'fallback'", - "'receive'" ] - - symbolicNames = [ "", "", "", "", - "", "", "", "", - "", "", "", "", - "", "", "", "", - "", "", "", "", - "", "", "", "", - "", "", "", "", - "", "", "", "", - "", "", "", "", - "", "", "", "", - "", "", "", "", - "", "", "", "", - "", "", "", "", - "", "", "", "", - "", "", "", "", - "", "", "", "", - "", "", "", "", - "", "", "", "", - "", "", "", "", - "", "", "", "", - "", "", "", "", - "", "", "", "", - "", "", "", "", - "", "", "", "", - "", "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" ] + literalNames = [ + "", + "'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'", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "'anonymous'", + "'break'", + "'constant'", + "'immutable'", + "'continue'", + "'leave'", + "'external'", + "'indexed'", + "'internal'", + "'payable'", + "'private'", + "'public'", + "'virtual'", + "'pure'", + "'type'", + "'view'", + "'global'", + "'constructor'", + "'fallback'", + "'receive'", + ] + + symbolicNames = [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "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", + ] RULE_sourceUnit = 0 RULE_pragmaDirective = 1 @@ -780,296 +985,429 @@ class SolidityParser ( Parser ): RULE_overrideSpecifier = 99 RULE_stringLiteral = 100 - ruleNames = [ "sourceUnit", "pragmaDirective", "pragmaName", "pragmaValue", - "version", "versionOperator", "versionConstraint", "importDeclaration", - "importDirective", "importPath", "contractDefinition", - "inheritanceSpecifier", "contractPart", "stateVariableDeclaration", - "fileLevelConstant", "customErrorDefinition", "typeDefinition", - "usingForDeclaration", "usingForObject", "usingForObjectDirective", - "userDefinableOperators", "structDefinition", "modifierDefinition", - "modifierInvocation", "functionDefinition", "functionDescriptor", - "returnParameters", "modifierList", "eventDefinition", - "enumValue", "enumDefinition", "parameterList", "parameter", - "eventParameterList", "eventParameter", "functionTypeParameterList", - "functionTypeParameter", "variableDeclaration", "typeName", - "userDefinedTypeName", "mappingKey", "mapping", "mappingKeyName", - "mappingValueName", "functionTypeName", "storageLocation", - "stateMutability", "block", "statement", "expressionStatement", - "ifStatement", "tryStatement", "catchClause", "whileStatement", - "simpleStatement", "uncheckedStatement", "forStatement", - "inlineAssemblyStatement", "inlineAssemblyStatementFlag", - "doWhileStatement", "continueStatement", "breakStatement", - "returnStatement", "throwStatement", "emitStatement", - "revertStatement", "variableDeclarationStatement", "variableDeclarationList", - "identifierList", "elementaryTypeName", "expression", - "primaryExpression", "expressionList", "nameValueList", - "nameValue", "functionCallArguments", "functionCall", - "assemblyBlock", "assemblyItem", "assemblyExpression", - "assemblyMember", "assemblyCall", "assemblyLocalDefinition", - "assemblyAssignment", "assemblyIdentifierOrList", "assemblyIdentifierList", - "assemblyStackAssignment", "labelDefinition", "assemblySwitch", - "assemblyCase", "assemblyFunctionDefinition", "assemblyFunctionReturns", - "assemblyFor", "assemblyIf", "assemblyLiteral", "tupleExpression", - "numberLiteral", "identifier", "hexLiteral", "overrideSpecifier", - "stringLiteral" ] + ruleNames = [ + "sourceUnit", + "pragmaDirective", + "pragmaName", + "pragmaValue", + "version", + "versionOperator", + "versionConstraint", + "importDeclaration", + "importDirective", + "importPath", + "contractDefinition", + "inheritanceSpecifier", + "contractPart", + "stateVariableDeclaration", + "fileLevelConstant", + "customErrorDefinition", + "typeDefinition", + "usingForDeclaration", + "usingForObject", + "usingForObjectDirective", + "userDefinableOperators", + "structDefinition", + "modifierDefinition", + "modifierInvocation", + "functionDefinition", + "functionDescriptor", + "returnParameters", + "modifierList", + "eventDefinition", + "enumValue", + "enumDefinition", + "parameterList", + "parameter", + "eventParameterList", + "eventParameter", + "functionTypeParameterList", + "functionTypeParameter", + "variableDeclaration", + "typeName", + "userDefinedTypeName", + "mappingKey", + "mapping", + "mappingKeyName", + "mappingValueName", + "functionTypeName", + "storageLocation", + "stateMutability", + "block", + "statement", + "expressionStatement", + "ifStatement", + "tryStatement", + "catchClause", + "whileStatement", + "simpleStatement", + "uncheckedStatement", + "forStatement", + "inlineAssemblyStatement", + "inlineAssemblyStatementFlag", + "doWhileStatement", + "continueStatement", + "breakStatement", + "returnStatement", + "throwStatement", + "emitStatement", + "revertStatement", + "variableDeclarationStatement", + "variableDeclarationList", + "identifierList", + "elementaryTypeName", + "expression", + "primaryExpression", + "expressionList", + "nameValueList", + "nameValue", + "functionCallArguments", + "functionCall", + "assemblyBlock", + "assemblyItem", + "assemblyExpression", + "assemblyMember", + "assemblyCall", + "assemblyLocalDefinition", + "assemblyAssignment", + "assemblyIdentifierOrList", + "assemblyIdentifierList", + "assemblyStackAssignment", + "labelDefinition", + "assemblySwitch", + "assemblyCase", + "assemblyFunctionDefinition", + "assemblyFunctionReturns", + "assemblyFor", + "assemblyIf", + "assemblyLiteral", + "tupleExpression", + "numberLiteral", + "identifier", + "hexLiteral", + "overrideSpecifier", + "stringLiteral", + ] EOF = Token.EOF - T__0=1 - T__1=2 - T__2=3 - T__3=4 - T__4=5 - T__5=6 - T__6=7 - T__7=8 - T__8=9 - T__9=10 - T__10=11 - T__11=12 - T__12=13 - T__13=14 - T__14=15 - T__15=16 - T__16=17 - T__17=18 - T__18=19 - T__19=20 - T__20=21 - T__21=22 - T__22=23 - T__23=24 - T__24=25 - T__25=26 - T__26=27 - T__27=28 - T__28=29 - T__29=30 - T__30=31 - T__31=32 - T__32=33 - T__33=34 - T__34=35 - T__35=36 - T__36=37 - T__37=38 - T__38=39 - T__39=40 - T__40=41 - T__41=42 - T__42=43 - T__43=44 - T__44=45 - T__45=46 - T__46=47 - T__47=48 - T__48=49 - T__49=50 - T__50=51 - T__51=52 - T__52=53 - T__53=54 - T__54=55 - T__55=56 - T__56=57 - T__57=58 - T__58=59 - T__59=60 - T__60=61 - T__61=62 - T__62=63 - T__63=64 - T__64=65 - T__65=66 - T__66=67 - T__67=68 - T__68=69 - T__69=70 - T__70=71 - T__71=72 - T__72=73 - T__73=74 - T__74=75 - T__75=76 - T__76=77 - T__77=78 - T__78=79 - T__79=80 - T__80=81 - T__81=82 - T__82=83 - T__83=84 - T__84=85 - T__85=86 - T__86=87 - T__87=88 - T__88=89 - T__89=90 - T__90=91 - T__91=92 - T__92=93 - T__93=94 - T__94=95 - T__95=96 - Int=97 - Uint=98 - Byte=99 - Fixed=100 - Ufixed=101 - BooleanLiteral=102 - DecimalNumber=103 - HexNumber=104 - NumberUnit=105 - HexLiteralFragment=106 - ReservedKeyword=107 - AnonymousKeyword=108 - BreakKeyword=109 - ConstantKeyword=110 - ImmutableKeyword=111 - ContinueKeyword=112 - LeaveKeyword=113 - ExternalKeyword=114 - IndexedKeyword=115 - InternalKeyword=116 - PayableKeyword=117 - PrivateKeyword=118 - PublicKeyword=119 - VirtualKeyword=120 - PureKeyword=121 - TypeKeyword=122 - ViewKeyword=123 - GlobalKeyword=124 - ConstructorKeyword=125 - FallbackKeyword=126 - ReceiveKeyword=127 - Identifier=128 - StringLiteralFragment=129 - VersionLiteral=130 - WS=131 - COMMENT=132 - LINE_COMMENT=133 - - def __init__(self, input:TokenStream, output:TextIO = sys.stdout): + T__0 = 1 + T__1 = 2 + T__2 = 3 + T__3 = 4 + T__4 = 5 + T__5 = 6 + T__6 = 7 + T__7 = 8 + T__8 = 9 + T__9 = 10 + T__10 = 11 + T__11 = 12 + T__12 = 13 + T__13 = 14 + T__14 = 15 + T__15 = 16 + T__16 = 17 + T__17 = 18 + T__18 = 19 + T__19 = 20 + T__20 = 21 + T__21 = 22 + T__22 = 23 + T__23 = 24 + T__24 = 25 + T__25 = 26 + T__26 = 27 + T__27 = 28 + T__28 = 29 + T__29 = 30 + T__30 = 31 + T__31 = 32 + T__32 = 33 + T__33 = 34 + T__34 = 35 + T__35 = 36 + T__36 = 37 + T__37 = 38 + T__38 = 39 + T__39 = 40 + T__40 = 41 + T__41 = 42 + T__42 = 43 + T__43 = 44 + T__44 = 45 + T__45 = 46 + T__46 = 47 + T__47 = 48 + T__48 = 49 + T__49 = 50 + T__50 = 51 + T__51 = 52 + T__52 = 53 + T__53 = 54 + T__54 = 55 + T__55 = 56 + T__56 = 57 + T__57 = 58 + T__58 = 59 + T__59 = 60 + T__60 = 61 + T__61 = 62 + T__62 = 63 + T__63 = 64 + T__64 = 65 + T__65 = 66 + T__66 = 67 + T__67 = 68 + T__68 = 69 + T__69 = 70 + T__70 = 71 + T__71 = 72 + T__72 = 73 + T__73 = 74 + T__74 = 75 + T__75 = 76 + T__76 = 77 + T__77 = 78 + T__78 = 79 + T__79 = 80 + T__80 = 81 + T__81 = 82 + T__82 = 83 + T__83 = 84 + T__84 = 85 + T__85 = 86 + T__86 = 87 + T__87 = 88 + T__88 = 89 + T__89 = 90 + T__90 = 91 + T__91 = 92 + T__92 = 93 + T__93 = 94 + T__94 = 95 + T__95 = 96 + Int = 97 + Uint = 98 + Byte = 99 + Fixed = 100 + Ufixed = 101 + BooleanLiteral = 102 + DecimalNumber = 103 + HexNumber = 104 + NumberUnit = 105 + HexLiteralFragment = 106 + ReservedKeyword = 107 + AnonymousKeyword = 108 + BreakKeyword = 109 + ConstantKeyword = 110 + ImmutableKeyword = 111 + ContinueKeyword = 112 + LeaveKeyword = 113 + ExternalKeyword = 114 + IndexedKeyword = 115 + InternalKeyword = 116 + PayableKeyword = 117 + PrivateKeyword = 118 + PublicKeyword = 119 + VirtualKeyword = 120 + PureKeyword = 121 + TypeKeyword = 122 + ViewKeyword = 123 + GlobalKeyword = 124 + ConstructorKeyword = 125 + FallbackKeyword = 126 + ReceiveKeyword = 127 + Identifier = 128 + StringLiteralFragment = 129 + VersionLiteral = 130 + WS = 131 + COMMENT = 132 + LINE_COMMENT = 133 + + def __init__(self, input: TokenStream, output: TextIO = sys.stdout): super().__init__(input, output) self.checkVersion("4.7.2") - self._interp = ParserATNSimulator(self, self.atn, self.decisionsToDFA, self.sharedContextCache) + self._interp = ParserATNSimulator( + self, self.atn, self.decisionsToDFA, self.sharedContextCache + ) self._predicates = None - - - class SourceUnitContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser def EOF(self): return self.getToken(SolidityParser.EOF, 0) - def pragmaDirective(self, i:int=None): + def pragmaDirective(self, i: int = None): if i is None: return self.getTypedRuleContexts(SolidityParser.PragmaDirectiveContext) else: - return self.getTypedRuleContext(SolidityParser.PragmaDirectiveContext,i) - + return self.getTypedRuleContext( + SolidityParser.PragmaDirectiveContext, i + ) - def importDirective(self, i:int=None): + def importDirective(self, i: int = None): if i is None: return self.getTypedRuleContexts(SolidityParser.ImportDirectiveContext) else: - return self.getTypedRuleContext(SolidityParser.ImportDirectiveContext,i) + return self.getTypedRuleContext( + SolidityParser.ImportDirectiveContext, i + ) - - def contractDefinition(self, i:int=None): + def contractDefinition(self, i: int = None): if i is None: - return self.getTypedRuleContexts(SolidityParser.ContractDefinitionContext) + return self.getTypedRuleContexts( + SolidityParser.ContractDefinitionContext + ) else: - return self.getTypedRuleContext(SolidityParser.ContractDefinitionContext,i) - + return self.getTypedRuleContext( + SolidityParser.ContractDefinitionContext, i + ) - def enumDefinition(self, i:int=None): + def enumDefinition(self, i: int = None): if i is None: return self.getTypedRuleContexts(SolidityParser.EnumDefinitionContext) else: - return self.getTypedRuleContext(SolidityParser.EnumDefinitionContext,i) + return self.getTypedRuleContext(SolidityParser.EnumDefinitionContext, i) - - def structDefinition(self, i:int=None): + def structDefinition(self, i: int = None): if i is None: return self.getTypedRuleContexts(SolidityParser.StructDefinitionContext) else: - return self.getTypedRuleContext(SolidityParser.StructDefinitionContext,i) - + return self.getTypedRuleContext( + SolidityParser.StructDefinitionContext, i + ) - def functionDefinition(self, i:int=None): + def functionDefinition(self, i: int = None): if i is None: - return self.getTypedRuleContexts(SolidityParser.FunctionDefinitionContext) + return self.getTypedRuleContexts( + SolidityParser.FunctionDefinitionContext + ) else: - return self.getTypedRuleContext(SolidityParser.FunctionDefinitionContext,i) + return self.getTypedRuleContext( + SolidityParser.FunctionDefinitionContext, i + ) - - def fileLevelConstant(self, i:int=None): + def fileLevelConstant(self, i: int = None): if i is None: - return self.getTypedRuleContexts(SolidityParser.FileLevelConstantContext) + return self.getTypedRuleContexts( + SolidityParser.FileLevelConstantContext + ) else: - return self.getTypedRuleContext(SolidityParser.FileLevelConstantContext,i) - + return self.getTypedRuleContext( + SolidityParser.FileLevelConstantContext, i + ) - def customErrorDefinition(self, i:int=None): + def customErrorDefinition(self, i: int = None): if i is None: - return self.getTypedRuleContexts(SolidityParser.CustomErrorDefinitionContext) + return self.getTypedRuleContexts( + SolidityParser.CustomErrorDefinitionContext + ) else: - return self.getTypedRuleContext(SolidityParser.CustomErrorDefinitionContext,i) + return self.getTypedRuleContext( + SolidityParser.CustomErrorDefinitionContext, i + ) - - def typeDefinition(self, i:int=None): + def typeDefinition(self, i: int = None): if i is None: return self.getTypedRuleContexts(SolidityParser.TypeDefinitionContext) else: - return self.getTypedRuleContext(SolidityParser.TypeDefinitionContext,i) - + return self.getTypedRuleContext(SolidityParser.TypeDefinitionContext, i) - def usingForDeclaration(self, i:int=None): + def usingForDeclaration(self, i: int = None): if i is None: - return self.getTypedRuleContexts(SolidityParser.UsingForDeclarationContext) + return self.getTypedRuleContexts( + SolidityParser.UsingForDeclarationContext + ) else: - return self.getTypedRuleContext(SolidityParser.UsingForDeclarationContext,i) - + return self.getTypedRuleContext( + SolidityParser.UsingForDeclarationContext, i + ) def getRuleIndex(self): return SolidityParser.RULE_sourceUnit - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterSourceUnit" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterSourceUnit"): listener.enterSourceUnit(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitSourceUnit" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitSourceUnit"): listener.exitSourceUnit(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitSourceUnit" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitSourceUnit"): return visitor.visitSourceUnit(self) else: return visitor.visitChildren(self) - - - def sourceUnit(self): - localctx = SolidityParser.SourceUnitContext(self, self._ctx, self.state) self.enterRule(localctx, 0, self.RULE_sourceUnit) - self._la = 0 # Token type + self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) self.state = 214 self._errHandler.sync(self) _la = self._input.LA(1) - while ((((_la - 1)) & ~0x3f) == 0 and ((1 << (_la - 1)) & ((1 << (SolidityParser.T__0 - 1)) | (1 << (SolidityParser.T__12 - 1)) | (1 << (SolidityParser.T__13 - 1)) | (1 << (SolidityParser.T__17 - 1)) | (1 << (SolidityParser.T__18 - 1)) | (1 << (SolidityParser.T__19 - 1)) | (1 << (SolidityParser.T__20 - 1)) | (1 << (SolidityParser.T__24 - 1)) | (1 << (SolidityParser.T__25 - 1)) | (1 << (SolidityParser.T__35 - 1)) | (1 << (SolidityParser.T__37 - 1)) | (1 << (SolidityParser.T__40 - 1)) | (1 << (SolidityParser.T__43 - 1)) | (1 << (SolidityParser.T__45 - 1)) | (1 << (SolidityParser.T__49 - 1)) | (1 << (SolidityParser.T__61 - 1)) | (1 << (SolidityParser.T__62 - 1)) | (1 << (SolidityParser.T__63 - 1)))) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & ((1 << (SolidityParser.T__64 - 65)) | (1 << (SolidityParser.T__65 - 65)) | (1 << (SolidityParser.T__94 - 65)) | (1 << (SolidityParser.Int - 65)) | (1 << (SolidityParser.Uint - 65)) | (1 << (SolidityParser.Byte - 65)) | (1 << (SolidityParser.Fixed - 65)) | (1 << (SolidityParser.Ufixed - 65)) | (1 << (SolidityParser.LeaveKeyword - 65)) | (1 << (SolidityParser.PayableKeyword - 65)) | (1 << (SolidityParser.TypeKeyword - 65)) | (1 << (SolidityParser.GlobalKeyword - 65)) | (1 << (SolidityParser.ConstructorKeyword - 65)) | (1 << (SolidityParser.FallbackKeyword - 65)) | (1 << (SolidityParser.ReceiveKeyword - 65)) | (1 << (SolidityParser.Identifier - 65)))) != 0): + while ( + (((_la - 1)) & ~0x3F) == 0 + and ( + (1 << (_la - 1)) + & ( + (1 << (SolidityParser.T__0 - 1)) + | (1 << (SolidityParser.T__12 - 1)) + | (1 << (SolidityParser.T__13 - 1)) + | (1 << (SolidityParser.T__17 - 1)) + | (1 << (SolidityParser.T__18 - 1)) + | (1 << (SolidityParser.T__19 - 1)) + | (1 << (SolidityParser.T__20 - 1)) + | (1 << (SolidityParser.T__24 - 1)) + | (1 << (SolidityParser.T__25 - 1)) + | (1 << (SolidityParser.T__35 - 1)) + | (1 << (SolidityParser.T__37 - 1)) + | (1 << (SolidityParser.T__40 - 1)) + | (1 << (SolidityParser.T__43 - 1)) + | (1 << (SolidityParser.T__45 - 1)) + | (1 << (SolidityParser.T__49 - 1)) + | (1 << (SolidityParser.T__61 - 1)) + | (1 << (SolidityParser.T__62 - 1)) + | (1 << (SolidityParser.T__63 - 1)) + ) + ) + != 0 + ) or ( + (((_la - 65)) & ~0x3F) == 0 + and ( + (1 << (_la - 65)) + & ( + (1 << (SolidityParser.T__64 - 65)) + | (1 << (SolidityParser.T__65 - 65)) + | (1 << (SolidityParser.T__94 - 65)) + | (1 << (SolidityParser.Int - 65)) + | (1 << (SolidityParser.Uint - 65)) + | (1 << (SolidityParser.Byte - 65)) + | (1 << (SolidityParser.Fixed - 65)) + | (1 << (SolidityParser.Ufixed - 65)) + | (1 << (SolidityParser.LeaveKeyword - 65)) + | (1 << (SolidityParser.PayableKeyword - 65)) + | (1 << (SolidityParser.TypeKeyword - 65)) + | (1 << (SolidityParser.GlobalKeyword - 65)) + | (1 << (SolidityParser.ConstructorKeyword - 65)) + | (1 << (SolidityParser.FallbackKeyword - 65)) + | (1 << (SolidityParser.ReceiveKeyword - 65)) + | (1 << (SolidityParser.Identifier - 65)) + ) + ) + != 0 + ): self.state = 212 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,0,self._ctx) + la_ = self._interp.adaptivePredict(self._input, 0, self._ctx) if la_ == 1: self.state = 202 self.pragmaDirective() @@ -1120,7 +1458,6 @@ def sourceUnit(self): self.usingForDeclaration() pass - self.state = 216 self._errHandler.sync(self) _la = self._input.LA(1) @@ -1135,43 +1472,37 @@ def sourceUnit(self): self.exitRule() return localctx - class PragmaDirectiveContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser def pragmaName(self): - return self.getTypedRuleContext(SolidityParser.PragmaNameContext,0) - + return self.getTypedRuleContext(SolidityParser.PragmaNameContext, 0) def pragmaValue(self): - return self.getTypedRuleContext(SolidityParser.PragmaValueContext,0) - + return self.getTypedRuleContext(SolidityParser.PragmaValueContext, 0) def getRuleIndex(self): return SolidityParser.RULE_pragmaDirective - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterPragmaDirective" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterPragmaDirective"): listener.enterPragmaDirective(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitPragmaDirective" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitPragmaDirective"): listener.exitPragmaDirective(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitPragmaDirective" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitPragmaDirective"): return visitor.visitPragmaDirective(self) else: return visitor.visitChildren(self) - - - def pragmaDirective(self): - localctx = SolidityParser.PragmaDirectiveContext(self, self._ctx, self.state) self.enterRule(localctx, 2, self.RULE_pragmaDirective) try: @@ -1192,39 +1523,34 @@ def pragmaDirective(self): self.exitRule() return localctx - class PragmaNameContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser def identifier(self): - return self.getTypedRuleContext(SolidityParser.IdentifierContext,0) - + return self.getTypedRuleContext(SolidityParser.IdentifierContext, 0) def getRuleIndex(self): return SolidityParser.RULE_pragmaName - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterPragmaName" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterPragmaName"): listener.enterPragmaName(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitPragmaName" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitPragmaName"): listener.exitPragmaName(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitPragmaName" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitPragmaName"): return visitor.visitPragmaName(self) else: return visitor.visitChildren(self) - - - def pragmaName(self): - localctx = SolidityParser.PragmaNameContext(self, self._ctx, self.state) self.enterRule(localctx, 4, self.RULE_pragmaName) try: @@ -1239,49 +1565,43 @@ def pragmaName(self): self.exitRule() return localctx - class PragmaValueContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser def version(self): - return self.getTypedRuleContext(SolidityParser.VersionContext,0) - + return self.getTypedRuleContext(SolidityParser.VersionContext, 0) def expression(self): - return self.getTypedRuleContext(SolidityParser.ExpressionContext,0) - + return self.getTypedRuleContext(SolidityParser.ExpressionContext, 0) def getRuleIndex(self): return SolidityParser.RULE_pragmaValue - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterPragmaValue" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterPragmaValue"): listener.enterPragmaValue(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitPragmaValue" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitPragmaValue"): listener.exitPragmaValue(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitPragmaValue" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitPragmaValue"): return visitor.visitPragmaValue(self) else: return visitor.visitChildren(self) - - - def pragmaValue(self): - localctx = SolidityParser.PragmaValueContext(self, self._ctx, self.state) self.enterRule(localctx, 6, self.RULE_pragmaValue) try: self.state = 229 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,2,self._ctx) + la_ = self._interp.adaptivePredict(self._input, 2, self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) self.state = 226 @@ -1300,7 +1620,6 @@ def pragmaValue(self): self.expression(0) pass - except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -1309,45 +1628,44 @@ def pragmaValue(self): self.exitRule() return localctx - class VersionContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser - def versionConstraint(self, i:int=None): + def versionConstraint(self, i: int = None): if i is None: - return self.getTypedRuleContexts(SolidityParser.VersionConstraintContext) + return self.getTypedRuleContexts( + SolidityParser.VersionConstraintContext + ) else: - return self.getTypedRuleContext(SolidityParser.VersionConstraintContext,i) - + return self.getTypedRuleContext( + SolidityParser.VersionConstraintContext, i + ) def getRuleIndex(self): return SolidityParser.RULE_version - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterVersion" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterVersion"): listener.enterVersion(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitVersion" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitVersion"): listener.exitVersion(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitVersion" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitVersion"): return visitor.visitVersion(self) else: return visitor.visitChildren(self) - - - def version(self): - localctx = SolidityParser.VersionContext(self, self._ctx, self.state) self.enterRule(localctx, 8, self.RULE_version) - self._la = 0 # Token type + self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) self.state = 231 @@ -1355,15 +1673,34 @@ def version(self): self.state = 238 self._errHandler.sync(self) _la = self._input.LA(1) - while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__3) | (1 << SolidityParser.T__4) | (1 << SolidityParser.T__5) | (1 << SolidityParser.T__6) | (1 << SolidityParser.T__7) | (1 << SolidityParser.T__8) | (1 << SolidityParser.T__9) | (1 << SolidityParser.T__10))) != 0) or _la==SolidityParser.DecimalNumber or _la==SolidityParser.VersionLiteral: + while ( + ( + ((_la) & ~0x3F) == 0 + and ( + (1 << _la) + & ( + (1 << SolidityParser.T__3) + | (1 << SolidityParser.T__4) + | (1 << SolidityParser.T__5) + | (1 << SolidityParser.T__6) + | (1 << SolidityParser.T__7) + | (1 << SolidityParser.T__8) + | (1 << SolidityParser.T__9) + | (1 << SolidityParser.T__10) + ) + ) + != 0 + ) + or _la == SolidityParser.DecimalNumber + or _la == SolidityParser.VersionLiteral + ): self.state = 233 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==SolidityParser.T__3: + if _la == SolidityParser.T__3: self.state = 232 self.match(SolidityParser.T__3) - self.state = 235 self.versionConstraint() self.state = 240 @@ -1378,44 +1715,56 @@ def version(self): self.exitRule() return localctx - class VersionOperatorContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser - def getRuleIndex(self): return SolidityParser.RULE_versionOperator - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterVersionOperator" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterVersionOperator"): listener.enterVersionOperator(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitVersionOperator" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitVersionOperator"): listener.exitVersionOperator(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitVersionOperator" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitVersionOperator"): return visitor.visitVersionOperator(self) else: return visitor.visitChildren(self) - - - def versionOperator(self): - localctx = SolidityParser.VersionOperatorContext(self, self._ctx, self.state) self.enterRule(localctx, 10, self.RULE_versionOperator) - self._la = 0 # Token type + self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) self.state = 241 _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__4) | (1 << SolidityParser.T__5) | (1 << SolidityParser.T__6) | (1 << SolidityParser.T__7) | (1 << SolidityParser.T__8) | (1 << SolidityParser.T__9) | (1 << SolidityParser.T__10))) != 0)): + if not ( + ( + ((_la) & ~0x3F) == 0 + and ( + (1 << _la) + & ( + (1 << SolidityParser.T__4) + | (1 << SolidityParser.T__5) + | (1 << SolidityParser.T__6) + | (1 << SolidityParser.T__7) + | (1 << SolidityParser.T__8) + | (1 << SolidityParser.T__9) + | (1 << SolidityParser.T__10) + ) + ) + != 0 + ) + ): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -1428,10 +1777,10 @@ def versionOperator(self): self.exitRule() return localctx - class VersionConstraintContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser @@ -1439,8 +1788,7 @@ def VersionLiteral(self): return self.getToken(SolidityParser.VersionLiteral, 0) def versionOperator(self): - return self.getTypedRuleContext(SolidityParser.VersionOperatorContext,0) - + return self.getTypedRuleContext(SolidityParser.VersionOperatorContext, 0) def DecimalNumber(self): return self.getToken(SolidityParser.DecimalNumber, 0) @@ -1448,42 +1796,48 @@ def DecimalNumber(self): def getRuleIndex(self): return SolidityParser.RULE_versionConstraint - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterVersionConstraint" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterVersionConstraint"): listener.enterVersionConstraint(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitVersionConstraint" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitVersionConstraint"): listener.exitVersionConstraint(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitVersionConstraint" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitVersionConstraint"): return visitor.visitVersionConstraint(self) else: return visitor.visitChildren(self) - - - def versionConstraint(self): - localctx = SolidityParser.VersionConstraintContext(self, self._ctx, self.state) self.enterRule(localctx, 12, self.RULE_versionConstraint) - self._la = 0 # Token type + self._la = 0 # Token type try: self.state = 251 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,7,self._ctx) + la_ = self._interp.adaptivePredict(self._input, 7, self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) self.state = 244 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__4) | (1 << SolidityParser.T__5) | (1 << SolidityParser.T__6) | (1 << SolidityParser.T__7) | (1 << SolidityParser.T__8) | (1 << SolidityParser.T__9) | (1 << SolidityParser.T__10))) != 0): + if ((_la) & ~0x3F) == 0 and ( + (1 << _la) + & ( + (1 << SolidityParser.T__4) + | (1 << SolidityParser.T__5) + | (1 << SolidityParser.T__6) + | (1 << SolidityParser.T__7) + | (1 << SolidityParser.T__8) + | (1 << SolidityParser.T__9) + | (1 << SolidityParser.T__10) + ) + ) != 0: self.state = 243 self.versionOperator() - self.state = 246 self.match(SolidityParser.VersionLiteral) pass @@ -1493,16 +1847,25 @@ def versionConstraint(self): self.state = 248 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__4) | (1 << SolidityParser.T__5) | (1 << SolidityParser.T__6) | (1 << SolidityParser.T__7) | (1 << SolidityParser.T__8) | (1 << SolidityParser.T__9) | (1 << SolidityParser.T__10))) != 0): + if ((_la) & ~0x3F) == 0 and ( + (1 << _la) + & ( + (1 << SolidityParser.T__4) + | (1 << SolidityParser.T__5) + | (1 << SolidityParser.T__6) + | (1 << SolidityParser.T__7) + | (1 << SolidityParser.T__8) + | (1 << SolidityParser.T__9) + | (1 << SolidityParser.T__10) + ) + ) != 0: self.state = 247 self.versionOperator() - self.state = 250 self.match(SolidityParser.DecimalNumber) pass - except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -1511,45 +1874,40 @@ def versionConstraint(self): self.exitRule() return localctx - class ImportDeclarationContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser - def identifier(self, i:int=None): + def identifier(self, i: int = None): if i is None: return self.getTypedRuleContexts(SolidityParser.IdentifierContext) else: - return self.getTypedRuleContext(SolidityParser.IdentifierContext,i) - + return self.getTypedRuleContext(SolidityParser.IdentifierContext, i) def getRuleIndex(self): return SolidityParser.RULE_importDeclaration - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterImportDeclaration" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterImportDeclaration"): listener.enterImportDeclaration(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitImportDeclaration" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitImportDeclaration"): listener.exitImportDeclaration(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitImportDeclaration" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitImportDeclaration"): return visitor.visitImportDeclaration(self) else: return visitor.visitChildren(self) - - - def importDeclaration(self): - localctx = SolidityParser.ImportDeclarationContext(self, self._ctx, self.state) self.enterRule(localctx, 14, self.RULE_importDeclaration) - self._la = 0 # Token type + self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) self.state = 253 @@ -1557,13 +1915,12 @@ def importDeclaration(self): self.state = 256 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==SolidityParser.T__11: + if _la == SolidityParser.T__11: self.state = 254 self.match(SolidityParser.T__11) self.state = 255 self.identifier() - except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -1572,60 +1929,57 @@ def importDeclaration(self): self.exitRule() return localctx - class ImportDirectiveContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser def importPath(self): - return self.getTypedRuleContext(SolidityParser.ImportPathContext,0) - + return self.getTypedRuleContext(SolidityParser.ImportPathContext, 0) - def identifier(self, i:int=None): + def identifier(self, i: int = None): if i is None: return self.getTypedRuleContexts(SolidityParser.IdentifierContext) else: - return self.getTypedRuleContext(SolidityParser.IdentifierContext,i) + return self.getTypedRuleContext(SolidityParser.IdentifierContext, i) - - def importDeclaration(self, i:int=None): + def importDeclaration(self, i: int = None): if i is None: - return self.getTypedRuleContexts(SolidityParser.ImportDeclarationContext) + return self.getTypedRuleContexts( + SolidityParser.ImportDeclarationContext + ) else: - return self.getTypedRuleContext(SolidityParser.ImportDeclarationContext,i) - + return self.getTypedRuleContext( + SolidityParser.ImportDeclarationContext, i + ) def getRuleIndex(self): return SolidityParser.RULE_importDirective - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterImportDirective" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterImportDirective"): listener.enterImportDirective(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitImportDirective" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitImportDirective"): listener.exitImportDirective(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitImportDirective" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitImportDirective"): return visitor.visitImportDirective(self) else: return visitor.visitChildren(self) - - - def importDirective(self): - localctx = SolidityParser.ImportDirectiveContext(self, self._ctx, self.state) self.enterRule(localctx, 16, self.RULE_importDirective) - self._la = 0 # Token type + self._la = 0 # Token type try: self.state = 294 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,13,self._ctx) + la_ = self._interp.adaptivePredict(self._input, 13, self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) self.state = 258 @@ -1635,13 +1989,12 @@ def importDirective(self): self.state = 262 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==SolidityParser.T__11: + if _la == SolidityParser.T__11: self.state = 260 self.match(SolidityParser.T__11) self.state = 261 self.identifier() - self.state = 264 self.match(SolidityParser.T__1) pass @@ -1657,7 +2010,20 @@ def importDirective(self): self.state = 267 self.match(SolidityParser.T__2) pass - elif token in [SolidityParser.T__13, SolidityParser.T__24, SolidityParser.T__43, SolidityParser.T__49, SolidityParser.T__61, SolidityParser.T__94, SolidityParser.LeaveKeyword, SolidityParser.PayableKeyword, SolidityParser.GlobalKeyword, SolidityParser.ConstructorKeyword, SolidityParser.ReceiveKeyword, SolidityParser.Identifier]: + elif token in [ + SolidityParser.T__13, + SolidityParser.T__24, + SolidityParser.T__43, + SolidityParser.T__49, + SolidityParser.T__61, + SolidityParser.T__94, + SolidityParser.LeaveKeyword, + SolidityParser.PayableKeyword, + SolidityParser.GlobalKeyword, + SolidityParser.ConstructorKeyword, + SolidityParser.ReceiveKeyword, + SolidityParser.Identifier, + ]: self.state = 268 self.identifier() pass @@ -1667,13 +2033,12 @@ def importDirective(self): self.state = 273 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==SolidityParser.T__11: + if _la == SolidityParser.T__11: self.state = 271 self.match(SolidityParser.T__11) self.state = 272 self.identifier() - self.state = 275 self.match(SolidityParser.T__13) self.state = 276 @@ -1693,7 +2058,7 @@ def importDirective(self): self.state = 286 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==SolidityParser.T__15: + while _la == SolidityParser.T__15: self.state = 282 self.match(SolidityParser.T__15) self.state = 283 @@ -1712,7 +2077,6 @@ def importDirective(self): self.match(SolidityParser.T__1) pass - except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -1721,10 +2085,10 @@ def importDirective(self): self.exitRule() return localctx - class ImportPathContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser @@ -1734,25 +2098,21 @@ def StringLiteralFragment(self): def getRuleIndex(self): return SolidityParser.RULE_importPath - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterImportPath" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterImportPath"): listener.enterImportPath(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitImportPath" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitImportPath"): listener.exitImportPath(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitImportPath" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitImportPath"): return visitor.visitImportPath(self) else: return visitor.visitChildren(self) - - - def importPath(self): - localctx = SolidityParser.ImportPathContext(self, self._ctx, self.state) self.enterRule(localctx, 18, self.RULE_importPath) try: @@ -1767,69 +2127,78 @@ def importPath(self): self.exitRule() return localctx - class ContractDefinitionContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser def identifier(self): - return self.getTypedRuleContext(SolidityParser.IdentifierContext,0) - + return self.getTypedRuleContext(SolidityParser.IdentifierContext, 0) - def inheritanceSpecifier(self, i:int=None): + def inheritanceSpecifier(self, i: int = None): if i is None: - return self.getTypedRuleContexts(SolidityParser.InheritanceSpecifierContext) + return self.getTypedRuleContexts( + SolidityParser.InheritanceSpecifierContext + ) else: - return self.getTypedRuleContext(SolidityParser.InheritanceSpecifierContext,i) + return self.getTypedRuleContext( + SolidityParser.InheritanceSpecifierContext, i + ) - - def contractPart(self, i:int=None): + def contractPart(self, i: int = None): if i is None: return self.getTypedRuleContexts(SolidityParser.ContractPartContext) else: - return self.getTypedRuleContext(SolidityParser.ContractPartContext,i) - + return self.getTypedRuleContext(SolidityParser.ContractPartContext, i) def getRuleIndex(self): return SolidityParser.RULE_contractDefinition - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterContractDefinition" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterContractDefinition"): listener.enterContractDefinition(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitContractDefinition" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitContractDefinition"): listener.exitContractDefinition(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitContractDefinition" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitContractDefinition"): return visitor.visitContractDefinition(self) else: return visitor.visitChildren(self) - - - def contractDefinition(self): - localctx = SolidityParser.ContractDefinitionContext(self, self._ctx, self.state) self.enterRule(localctx, 20, self.RULE_contractDefinition) - self._la = 0 # Token type + self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) self.state = 299 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==SolidityParser.T__17: + if _la == SolidityParser.T__17: self.state = 298 self.match(SolidityParser.T__17) - self.state = 301 _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__18) | (1 << SolidityParser.T__19) | (1 << SolidityParser.T__20))) != 0)): + if not ( + ( + ((_la) & ~0x3F) == 0 + and ( + (1 << _la) + & ( + (1 << SolidityParser.T__18) + | (1 << SolidityParser.T__19) + | (1 << SolidityParser.T__20) + ) + ) + != 0 + ) + ): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -1839,7 +2208,7 @@ def contractDefinition(self): self.state = 312 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==SolidityParser.T__21: + if _la == SolidityParser.T__21: self.state = 303 self.match(SolidityParser.T__21) self.state = 304 @@ -1847,7 +2216,7 @@ def contractDefinition(self): self.state = 309 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==SolidityParser.T__15: + while _la == SolidityParser.T__15: self.state = 305 self.match(SolidityParser.T__15) self.state = 306 @@ -1856,14 +2225,58 @@ def contractDefinition(self): self._errHandler.sync(self) _la = self._input.LA(1) - - self.state = 314 self.match(SolidityParser.T__14) self.state = 318 self._errHandler.sync(self) _la = self._input.LA(1) - while ((((_la - 14)) & ~0x3f) == 0 and ((1 << (_la - 14)) & ((1 << (SolidityParser.T__13 - 14)) | (1 << (SolidityParser.T__24 - 14)) | (1 << (SolidityParser.T__25 - 14)) | (1 << (SolidityParser.T__35 - 14)) | (1 << (SolidityParser.T__36 - 14)) | (1 << (SolidityParser.T__37 - 14)) | (1 << (SolidityParser.T__39 - 14)) | (1 << (SolidityParser.T__40 - 14)) | (1 << (SolidityParser.T__43 - 14)) | (1 << (SolidityParser.T__45 - 14)) | (1 << (SolidityParser.T__49 - 14)) | (1 << (SolidityParser.T__61 - 14)) | (1 << (SolidityParser.T__62 - 14)) | (1 << (SolidityParser.T__63 - 14)) | (1 << (SolidityParser.T__64 - 14)) | (1 << (SolidityParser.T__65 - 14)))) != 0) or ((((_la - 95)) & ~0x3f) == 0 and ((1 << (_la - 95)) & ((1 << (SolidityParser.T__94 - 95)) | (1 << (SolidityParser.Int - 95)) | (1 << (SolidityParser.Uint - 95)) | (1 << (SolidityParser.Byte - 95)) | (1 << (SolidityParser.Fixed - 95)) | (1 << (SolidityParser.Ufixed - 95)) | (1 << (SolidityParser.LeaveKeyword - 95)) | (1 << (SolidityParser.PayableKeyword - 95)) | (1 << (SolidityParser.TypeKeyword - 95)) | (1 << (SolidityParser.GlobalKeyword - 95)) | (1 << (SolidityParser.ConstructorKeyword - 95)) | (1 << (SolidityParser.FallbackKeyword - 95)) | (1 << (SolidityParser.ReceiveKeyword - 95)) | (1 << (SolidityParser.Identifier - 95)))) != 0): + while ( + (((_la - 14)) & ~0x3F) == 0 + and ( + (1 << (_la - 14)) + & ( + (1 << (SolidityParser.T__13 - 14)) + | (1 << (SolidityParser.T__24 - 14)) + | (1 << (SolidityParser.T__25 - 14)) + | (1 << (SolidityParser.T__35 - 14)) + | (1 << (SolidityParser.T__36 - 14)) + | (1 << (SolidityParser.T__37 - 14)) + | (1 << (SolidityParser.T__39 - 14)) + | (1 << (SolidityParser.T__40 - 14)) + | (1 << (SolidityParser.T__43 - 14)) + | (1 << (SolidityParser.T__45 - 14)) + | (1 << (SolidityParser.T__49 - 14)) + | (1 << (SolidityParser.T__61 - 14)) + | (1 << (SolidityParser.T__62 - 14)) + | (1 << (SolidityParser.T__63 - 14)) + | (1 << (SolidityParser.T__64 - 14)) + | (1 << (SolidityParser.T__65 - 14)) + ) + ) + != 0 + ) or ( + (((_la - 95)) & ~0x3F) == 0 + and ( + (1 << (_la - 95)) + & ( + (1 << (SolidityParser.T__94 - 95)) + | (1 << (SolidityParser.Int - 95)) + | (1 << (SolidityParser.Uint - 95)) + | (1 << (SolidityParser.Byte - 95)) + | (1 << (SolidityParser.Fixed - 95)) + | (1 << (SolidityParser.Ufixed - 95)) + | (1 << (SolidityParser.LeaveKeyword - 95)) + | (1 << (SolidityParser.PayableKeyword - 95)) + | (1 << (SolidityParser.TypeKeyword - 95)) + | (1 << (SolidityParser.GlobalKeyword - 95)) + | (1 << (SolidityParser.ConstructorKeyword - 95)) + | (1 << (SolidityParser.FallbackKeyword - 95)) + | (1 << (SolidityParser.ReceiveKeyword - 95)) + | (1 << (SolidityParser.Identifier - 95)) + ) + ) + != 0 + ): self.state = 315 self.contractPart() self.state = 320 @@ -1880,46 +2293,44 @@ def contractDefinition(self): self.exitRule() return localctx - class InheritanceSpecifierContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser def userDefinedTypeName(self): - return self.getTypedRuleContext(SolidityParser.UserDefinedTypeNameContext,0) - + return self.getTypedRuleContext( + SolidityParser.UserDefinedTypeNameContext, 0 + ) def expressionList(self): - return self.getTypedRuleContext(SolidityParser.ExpressionListContext,0) - + return self.getTypedRuleContext(SolidityParser.ExpressionListContext, 0) def getRuleIndex(self): return SolidityParser.RULE_inheritanceSpecifier - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterInheritanceSpecifier" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterInheritanceSpecifier"): listener.enterInheritanceSpecifier(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitInheritanceSpecifier" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitInheritanceSpecifier"): listener.exitInheritanceSpecifier(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitInheritanceSpecifier" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitInheritanceSpecifier"): return visitor.visitInheritanceSpecifier(self) else: return visitor.visitChildren(self) - - - def inheritanceSpecifier(self): - - localctx = SolidityParser.InheritanceSpecifierContext(self, self._ctx, self.state) + localctx = SolidityParser.InheritanceSpecifierContext( + self, self._ctx, self.state + ) self.enterRule(localctx, 22, self.RULE_inheritanceSpecifier) - self._la = 0 # Token type + self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) self.state = 323 @@ -1927,21 +2338,74 @@ def inheritanceSpecifier(self): self.state = 329 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==SolidityParser.T__22: + if _la == SolidityParser.T__22: self.state = 324 self.match(SolidityParser.T__22) self.state = 326 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 6)) & ~0x3f) == 0 and ((1 << (_la - 6)) & ((1 << (SolidityParser.T__5 - 6)) | (1 << (SolidityParser.T__13 - 6)) | (1 << (SolidityParser.T__22 - 6)) | (1 << (SolidityParser.T__24 - 6)) | (1 << (SolidityParser.T__29 - 6)) | (1 << (SolidityParser.T__30 - 6)) | (1 << (SolidityParser.T__37 - 6)) | (1 << (SolidityParser.T__41 - 6)) | (1 << (SolidityParser.T__43 - 6)) | (1 << (SolidityParser.T__45 - 6)) | (1 << (SolidityParser.T__49 - 6)) | (1 << (SolidityParser.T__61 - 6)) | (1 << (SolidityParser.T__62 - 6)) | (1 << (SolidityParser.T__63 - 6)) | (1 << (SolidityParser.T__64 - 6)) | (1 << (SolidityParser.T__65 - 6)) | (1 << (SolidityParser.T__66 - 6)) | (1 << (SolidityParser.T__67 - 6)) | (1 << (SolidityParser.T__68 - 6)))) != 0) or ((((_la - 71)) & ~0x3f) == 0 and ((1 << (_la - 71)) & ((1 << (SolidityParser.T__70 - 71)) | (1 << (SolidityParser.T__71 - 71)) | (1 << (SolidityParser.T__94 - 71)) | (1 << (SolidityParser.Int - 71)) | (1 << (SolidityParser.Uint - 71)) | (1 << (SolidityParser.Byte - 71)) | (1 << (SolidityParser.Fixed - 71)) | (1 << (SolidityParser.Ufixed - 71)) | (1 << (SolidityParser.BooleanLiteral - 71)) | (1 << (SolidityParser.DecimalNumber - 71)) | (1 << (SolidityParser.HexNumber - 71)) | (1 << (SolidityParser.HexLiteralFragment - 71)) | (1 << (SolidityParser.LeaveKeyword - 71)) | (1 << (SolidityParser.PayableKeyword - 71)) | (1 << (SolidityParser.TypeKeyword - 71)) | (1 << (SolidityParser.GlobalKeyword - 71)) | (1 << (SolidityParser.ConstructorKeyword - 71)) | (1 << (SolidityParser.ReceiveKeyword - 71)) | (1 << (SolidityParser.Identifier - 71)) | (1 << (SolidityParser.StringLiteralFragment - 71)))) != 0): + if ( + (((_la - 6)) & ~0x3F) == 0 + and ( + (1 << (_la - 6)) + & ( + (1 << (SolidityParser.T__5 - 6)) + | (1 << (SolidityParser.T__13 - 6)) + | (1 << (SolidityParser.T__22 - 6)) + | (1 << (SolidityParser.T__24 - 6)) + | (1 << (SolidityParser.T__29 - 6)) + | (1 << (SolidityParser.T__30 - 6)) + | (1 << (SolidityParser.T__37 - 6)) + | (1 << (SolidityParser.T__41 - 6)) + | (1 << (SolidityParser.T__43 - 6)) + | (1 << (SolidityParser.T__45 - 6)) + | (1 << (SolidityParser.T__49 - 6)) + | (1 << (SolidityParser.T__61 - 6)) + | (1 << (SolidityParser.T__62 - 6)) + | (1 << (SolidityParser.T__63 - 6)) + | (1 << (SolidityParser.T__64 - 6)) + | (1 << (SolidityParser.T__65 - 6)) + | (1 << (SolidityParser.T__66 - 6)) + | (1 << (SolidityParser.T__67 - 6)) + | (1 << (SolidityParser.T__68 - 6)) + ) + ) + != 0 + ) or ( + (((_la - 71)) & ~0x3F) == 0 + and ( + (1 << (_la - 71)) + & ( + (1 << (SolidityParser.T__70 - 71)) + | (1 << (SolidityParser.T__71 - 71)) + | (1 << (SolidityParser.T__94 - 71)) + | (1 << (SolidityParser.Int - 71)) + | (1 << (SolidityParser.Uint - 71)) + | (1 << (SolidityParser.Byte - 71)) + | (1 << (SolidityParser.Fixed - 71)) + | (1 << (SolidityParser.Ufixed - 71)) + | (1 << (SolidityParser.BooleanLiteral - 71)) + | (1 << (SolidityParser.DecimalNumber - 71)) + | (1 << (SolidityParser.HexNumber - 71)) + | (1 << (SolidityParser.HexLiteralFragment - 71)) + | (1 << (SolidityParser.LeaveKeyword - 71)) + | (1 << (SolidityParser.PayableKeyword - 71)) + | (1 << (SolidityParser.TypeKeyword - 71)) + | (1 << (SolidityParser.GlobalKeyword - 71)) + | (1 << (SolidityParser.ConstructorKeyword - 71)) + | (1 << (SolidityParser.ReceiveKeyword - 71)) + | (1 << (SolidityParser.Identifier - 71)) + | (1 << (SolidityParser.StringLiteralFragment - 71)) + ) + ) + != 0 + ): self.state = 325 self.expressionList() - self.state = 328 self.match(SolidityParser.T__23) - except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -1950,77 +2414,70 @@ def inheritanceSpecifier(self): self.exitRule() return localctx - class ContractPartContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser def stateVariableDeclaration(self): - return self.getTypedRuleContext(SolidityParser.StateVariableDeclarationContext,0) - + return self.getTypedRuleContext( + SolidityParser.StateVariableDeclarationContext, 0 + ) def usingForDeclaration(self): - return self.getTypedRuleContext(SolidityParser.UsingForDeclarationContext,0) - + return self.getTypedRuleContext( + SolidityParser.UsingForDeclarationContext, 0 + ) def structDefinition(self): - return self.getTypedRuleContext(SolidityParser.StructDefinitionContext,0) - + return self.getTypedRuleContext(SolidityParser.StructDefinitionContext, 0) def modifierDefinition(self): - return self.getTypedRuleContext(SolidityParser.ModifierDefinitionContext,0) - + return self.getTypedRuleContext(SolidityParser.ModifierDefinitionContext, 0) def functionDefinition(self): - return self.getTypedRuleContext(SolidityParser.FunctionDefinitionContext,0) - + return self.getTypedRuleContext(SolidityParser.FunctionDefinitionContext, 0) def eventDefinition(self): - return self.getTypedRuleContext(SolidityParser.EventDefinitionContext,0) - + return self.getTypedRuleContext(SolidityParser.EventDefinitionContext, 0) def enumDefinition(self): - return self.getTypedRuleContext(SolidityParser.EnumDefinitionContext,0) - + return self.getTypedRuleContext(SolidityParser.EnumDefinitionContext, 0) def customErrorDefinition(self): - return self.getTypedRuleContext(SolidityParser.CustomErrorDefinitionContext,0) - + return self.getTypedRuleContext( + SolidityParser.CustomErrorDefinitionContext, 0 + ) def typeDefinition(self): - return self.getTypedRuleContext(SolidityParser.TypeDefinitionContext,0) - + return self.getTypedRuleContext(SolidityParser.TypeDefinitionContext, 0) def getRuleIndex(self): return SolidityParser.RULE_contractPart - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterContractPart" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterContractPart"): listener.enterContractPart(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitContractPart" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitContractPart"): listener.exitContractPart(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitContractPart" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitContractPart"): return visitor.visitContractPart(self) else: return visitor.visitChildren(self) - - - def contractPart(self): - localctx = SolidityParser.ContractPartContext(self, self._ctx, self.state) self.enterRule(localctx, 24, self.RULE_contractPart) try: self.state = 340 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,20,self._ctx) + la_ = self._interp.adaptivePredict(self._input, 20, self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) self.state = 331 @@ -2075,7 +2532,6 @@ def contractPart(self): self.typeDefinition() pass - except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -2084,87 +2540,85 @@ def contractPart(self): self.exitRule() return localctx - class StateVariableDeclarationContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser def typeName(self): - return self.getTypedRuleContext(SolidityParser.TypeNameContext,0) - + return self.getTypedRuleContext(SolidityParser.TypeNameContext, 0) def identifier(self): - return self.getTypedRuleContext(SolidityParser.IdentifierContext,0) + return self.getTypedRuleContext(SolidityParser.IdentifierContext, 0) - - def PublicKeyword(self, i:int=None): + def PublicKeyword(self, i: int = None): if i is None: return self.getTokens(SolidityParser.PublicKeyword) else: return self.getToken(SolidityParser.PublicKeyword, i) - def InternalKeyword(self, i:int=None): + def InternalKeyword(self, i: int = None): if i is None: return self.getTokens(SolidityParser.InternalKeyword) else: return self.getToken(SolidityParser.InternalKeyword, i) - def PrivateKeyword(self, i:int=None): + def PrivateKeyword(self, i: int = None): if i is None: return self.getTokens(SolidityParser.PrivateKeyword) else: return self.getToken(SolidityParser.PrivateKeyword, i) - def ConstantKeyword(self, i:int=None): + def ConstantKeyword(self, i: int = None): if i is None: return self.getTokens(SolidityParser.ConstantKeyword) else: return self.getToken(SolidityParser.ConstantKeyword, i) - def ImmutableKeyword(self, i:int=None): + def ImmutableKeyword(self, i: int = None): if i is None: return self.getTokens(SolidityParser.ImmutableKeyword) else: return self.getToken(SolidityParser.ImmutableKeyword, i) - def overrideSpecifier(self, i:int=None): + def overrideSpecifier(self, i: int = None): if i is None: - return self.getTypedRuleContexts(SolidityParser.OverrideSpecifierContext) + return self.getTypedRuleContexts( + SolidityParser.OverrideSpecifierContext + ) else: - return self.getTypedRuleContext(SolidityParser.OverrideSpecifierContext,i) - + return self.getTypedRuleContext( + SolidityParser.OverrideSpecifierContext, i + ) def expression(self): - return self.getTypedRuleContext(SolidityParser.ExpressionContext,0) - + return self.getTypedRuleContext(SolidityParser.ExpressionContext, 0) def getRuleIndex(self): return SolidityParser.RULE_stateVariableDeclaration - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterStateVariableDeclaration" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterStateVariableDeclaration"): listener.enterStateVariableDeclaration(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitStateVariableDeclaration" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitStateVariableDeclaration"): listener.exitStateVariableDeclaration(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitStateVariableDeclaration" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitStateVariableDeclaration"): return visitor.visitStateVariableDeclaration(self) else: return visitor.visitChildren(self) - - - def stateVariableDeclaration(self): - - localctx = SolidityParser.StateVariableDeclarationContext(self, self._ctx, self.state) + localctx = SolidityParser.StateVariableDeclarationContext( + self, self._ctx, self.state + ) self.enterRule(localctx, 26, self.RULE_stateVariableDeclaration) - self._la = 0 # Token type + self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) self.state = 342 @@ -2172,7 +2626,17 @@ def stateVariableDeclaration(self): self.state = 351 self._errHandler.sync(self) _la = self._input.LA(1) - while ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & ((1 << (SolidityParser.T__95 - 96)) | (1 << (SolidityParser.ConstantKeyword - 96)) | (1 << (SolidityParser.ImmutableKeyword - 96)) | (1 << (SolidityParser.InternalKeyword - 96)) | (1 << (SolidityParser.PrivateKeyword - 96)) | (1 << (SolidityParser.PublicKeyword - 96)))) != 0): + while (((_la - 96)) & ~0x3F) == 0 and ( + (1 << (_la - 96)) + & ( + (1 << (SolidityParser.T__95 - 96)) + | (1 << (SolidityParser.ConstantKeyword - 96)) + | (1 << (SolidityParser.ImmutableKeyword - 96)) + | (1 << (SolidityParser.InternalKeyword - 96)) + | (1 << (SolidityParser.PrivateKeyword - 96)) + | (1 << (SolidityParser.PublicKeyword - 96)) + ) + ) != 0: self.state = 349 self._errHandler.sync(self) token = self._input.LA(1) @@ -2212,13 +2676,12 @@ def stateVariableDeclaration(self): self.state = 357 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==SolidityParser.T__10: + if _la == SolidityParser.T__10: self.state = 355 self.match(SolidityParser.T__10) self.state = 356 self.expression(0) - self.state = 359 self.match(SolidityParser.T__1) except RecognitionException as re: @@ -2229,50 +2692,43 @@ def stateVariableDeclaration(self): self.exitRule() return localctx - class FileLevelConstantContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser def typeName(self): - return self.getTypedRuleContext(SolidityParser.TypeNameContext,0) - + return self.getTypedRuleContext(SolidityParser.TypeNameContext, 0) def ConstantKeyword(self): return self.getToken(SolidityParser.ConstantKeyword, 0) def identifier(self): - return self.getTypedRuleContext(SolidityParser.IdentifierContext,0) - + return self.getTypedRuleContext(SolidityParser.IdentifierContext, 0) def expression(self): - return self.getTypedRuleContext(SolidityParser.ExpressionContext,0) - + return self.getTypedRuleContext(SolidityParser.ExpressionContext, 0) def getRuleIndex(self): return SolidityParser.RULE_fileLevelConstant - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterFileLevelConstant" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterFileLevelConstant"): listener.enterFileLevelConstant(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitFileLevelConstant" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitFileLevelConstant"): listener.exitFileLevelConstant(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitFileLevelConstant" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitFileLevelConstant"): return visitor.visitFileLevelConstant(self) else: return visitor.visitChildren(self) - - - def fileLevelConstant(self): - localctx = SolidityParser.FileLevelConstantContext(self, self._ctx, self.state) self.enterRule(localctx, 28, self.RULE_fileLevelConstant) try: @@ -2297,44 +2753,40 @@ def fileLevelConstant(self): self.exitRule() return localctx - class CustomErrorDefinitionContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser def identifier(self): - return self.getTypedRuleContext(SolidityParser.IdentifierContext,0) - + return self.getTypedRuleContext(SolidityParser.IdentifierContext, 0) def parameterList(self): - return self.getTypedRuleContext(SolidityParser.ParameterListContext,0) - + return self.getTypedRuleContext(SolidityParser.ParameterListContext, 0) def getRuleIndex(self): return SolidityParser.RULE_customErrorDefinition - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterCustomErrorDefinition" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterCustomErrorDefinition"): listener.enterCustomErrorDefinition(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitCustomErrorDefinition" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitCustomErrorDefinition"): listener.exitCustomErrorDefinition(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitCustomErrorDefinition" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitCustomErrorDefinition"): return visitor.visitCustomErrorDefinition(self) else: return visitor.visitChildren(self) - - - def customErrorDefinition(self): - - localctx = SolidityParser.CustomErrorDefinitionContext(self, self._ctx, self.state) + localctx = SolidityParser.CustomErrorDefinitionContext( + self, self._ctx, self.state + ) self.enterRule(localctx, 30, self.RULE_customErrorDefinition) try: self.enterOuterAlt(localctx, 1) @@ -2354,10 +2806,10 @@ def customErrorDefinition(self): self.exitRule() return localctx - class TypeDefinitionContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser @@ -2365,35 +2817,29 @@ def TypeKeyword(self): return self.getToken(SolidityParser.TypeKeyword, 0) def identifier(self): - return self.getTypedRuleContext(SolidityParser.IdentifierContext,0) - + return self.getTypedRuleContext(SolidityParser.IdentifierContext, 0) def elementaryTypeName(self): - return self.getTypedRuleContext(SolidityParser.ElementaryTypeNameContext,0) - + return self.getTypedRuleContext(SolidityParser.ElementaryTypeNameContext, 0) def getRuleIndex(self): return SolidityParser.RULE_typeDefinition - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterTypeDefinition" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterTypeDefinition"): listener.enterTypeDefinition(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitTypeDefinition" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitTypeDefinition"): listener.exitTypeDefinition(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitTypeDefinition" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitTypeDefinition"): return visitor.visitTypeDefinition(self) else: return visitor.visitChildren(self) - - - def typeDefinition(self): - localctx = SolidityParser.TypeDefinitionContext(self, self._ctx, self.state) self.enterRule(localctx, 32, self.RULE_typeDefinition) try: @@ -2416,20 +2862,18 @@ def typeDefinition(self): self.exitRule() return localctx - class UsingForDeclarationContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser def usingForObject(self): - return self.getTypedRuleContext(SolidityParser.UsingForObjectContext,0) - + return self.getTypedRuleContext(SolidityParser.UsingForObjectContext, 0) def typeName(self): - return self.getTypedRuleContext(SolidityParser.TypeNameContext,0) - + return self.getTypedRuleContext(SolidityParser.TypeNameContext, 0) def GlobalKeyword(self): return self.getToken(SolidityParser.GlobalKeyword, 0) @@ -2437,28 +2881,26 @@ def GlobalKeyword(self): def getRuleIndex(self): return SolidityParser.RULE_usingForDeclaration - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterUsingForDeclaration" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterUsingForDeclaration"): listener.enterUsingForDeclaration(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitUsingForDeclaration" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitUsingForDeclaration"): listener.exitUsingForDeclaration(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitUsingForDeclaration" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitUsingForDeclaration"): return visitor.visitUsingForDeclaration(self) else: return visitor.visitChildren(self) - - - def usingForDeclaration(self): - - localctx = SolidityParser.UsingForDeclarationContext(self, self._ctx, self.state) + localctx = SolidityParser.UsingForDeclarationContext( + self, self._ctx, self.state + ) self.enterRule(localctx, 34, self.RULE_usingForDeclaration) - self._la = 0 # Token type + self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) self.state = 379 @@ -2474,7 +2916,31 @@ def usingForDeclaration(self): self.state = 382 self.match(SolidityParser.T__2) pass - elif token in [SolidityParser.T__13, SolidityParser.T__24, SolidityParser.T__37, SolidityParser.T__43, SolidityParser.T__45, SolidityParser.T__49, SolidityParser.T__61, SolidityParser.T__62, SolidityParser.T__63, SolidityParser.T__64, SolidityParser.T__65, SolidityParser.T__94, SolidityParser.Int, SolidityParser.Uint, SolidityParser.Byte, SolidityParser.Fixed, SolidityParser.Ufixed, SolidityParser.LeaveKeyword, SolidityParser.PayableKeyword, SolidityParser.GlobalKeyword, SolidityParser.ConstructorKeyword, SolidityParser.ReceiveKeyword, SolidityParser.Identifier]: + elif token in [ + SolidityParser.T__13, + SolidityParser.T__24, + SolidityParser.T__37, + SolidityParser.T__43, + SolidityParser.T__45, + SolidityParser.T__49, + SolidityParser.T__61, + SolidityParser.T__62, + SolidityParser.T__63, + SolidityParser.T__64, + SolidityParser.T__65, + SolidityParser.T__94, + SolidityParser.Int, + SolidityParser.Uint, + SolidityParser.Byte, + SolidityParser.Fixed, + SolidityParser.Ufixed, + SolidityParser.LeaveKeyword, + SolidityParser.PayableKeyword, + SolidityParser.GlobalKeyword, + SolidityParser.ConstructorKeyword, + SolidityParser.ReceiveKeyword, + SolidityParser.Identifier, + ]: self.state = 383 self.typeName(0) pass @@ -2484,11 +2950,10 @@ def usingForDeclaration(self): self.state = 387 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==SolidityParser.GlobalKeyword: + if _la == SolidityParser.GlobalKeyword: self.state = 386 self.match(SolidityParser.GlobalKeyword) - self.state = 389 self.match(SolidityParser.T__1) except RecognitionException as re: @@ -2499,54 +2964,67 @@ def usingForDeclaration(self): self.exitRule() return localctx - class UsingForObjectContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser def userDefinedTypeName(self): - return self.getTypedRuleContext(SolidityParser.UserDefinedTypeNameContext,0) + return self.getTypedRuleContext( + SolidityParser.UserDefinedTypeNameContext, 0 + ) - - def usingForObjectDirective(self, i:int=None): + def usingForObjectDirective(self, i: int = None): if i is None: - return self.getTypedRuleContexts(SolidityParser.UsingForObjectDirectiveContext) + return self.getTypedRuleContexts( + SolidityParser.UsingForObjectDirectiveContext + ) else: - return self.getTypedRuleContext(SolidityParser.UsingForObjectDirectiveContext,i) - + return self.getTypedRuleContext( + SolidityParser.UsingForObjectDirectiveContext, i + ) def getRuleIndex(self): return SolidityParser.RULE_usingForObject - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterUsingForObject" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterUsingForObject"): listener.enterUsingForObject(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitUsingForObject" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitUsingForObject"): listener.exitUsingForObject(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitUsingForObject" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitUsingForObject"): return visitor.visitUsingForObject(self) else: return visitor.visitChildren(self) - - - def usingForObject(self): - localctx = SolidityParser.UsingForObjectContext(self, self._ctx, self.state) self.enterRule(localctx, 36, self.RULE_usingForObject) - self._la = 0 # Token type + self._la = 0 # Token type try: self.state = 403 self._errHandler.sync(self) token = self._input.LA(1) - if token in [SolidityParser.T__13, SolidityParser.T__24, SolidityParser.T__43, SolidityParser.T__49, SolidityParser.T__61, SolidityParser.T__94, SolidityParser.LeaveKeyword, SolidityParser.PayableKeyword, SolidityParser.GlobalKeyword, SolidityParser.ConstructorKeyword, SolidityParser.ReceiveKeyword, SolidityParser.Identifier]: + if token in [ + SolidityParser.T__13, + SolidityParser.T__24, + SolidityParser.T__43, + SolidityParser.T__49, + SolidityParser.T__61, + SolidityParser.T__94, + SolidityParser.LeaveKeyword, + SolidityParser.PayableKeyword, + SolidityParser.GlobalKeyword, + SolidityParser.ConstructorKeyword, + SolidityParser.ReceiveKeyword, + SolidityParser.Identifier, + ]: self.enterOuterAlt(localctx, 1) self.state = 391 self.userDefinedTypeName() @@ -2560,7 +3038,7 @@ def usingForObject(self): self.state = 398 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==SolidityParser.T__15: + while _la == SolidityParser.T__15: self.state = 394 self.match(SolidityParser.T__15) self.state = 395 @@ -2583,46 +3061,46 @@ def usingForObject(self): self.exitRule() return localctx - class UsingForObjectDirectiveContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser def userDefinedTypeName(self): - return self.getTypedRuleContext(SolidityParser.UserDefinedTypeNameContext,0) - + return self.getTypedRuleContext( + SolidityParser.UserDefinedTypeNameContext, 0 + ) def userDefinableOperators(self): - return self.getTypedRuleContext(SolidityParser.UserDefinableOperatorsContext,0) - + return self.getTypedRuleContext( + SolidityParser.UserDefinableOperatorsContext, 0 + ) def getRuleIndex(self): return SolidityParser.RULE_usingForObjectDirective - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterUsingForObjectDirective" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterUsingForObjectDirective"): listener.enterUsingForObjectDirective(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitUsingForObjectDirective" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitUsingForObjectDirective"): listener.exitUsingForObjectDirective(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitUsingForObjectDirective" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitUsingForObjectDirective"): return visitor.visitUsingForObjectDirective(self) else: return visitor.visitChildren(self) - - - def usingForObjectDirective(self): - - localctx = SolidityParser.UsingForObjectDirectiveContext(self, self._ctx, self.state) + localctx = SolidityParser.UsingForObjectDirectiveContext( + self, self._ctx, self.state + ) self.enterRule(localctx, 38, self.RULE_usingForObjectDirective) - self._la = 0 # Token type + self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) self.state = 405 @@ -2630,13 +3108,12 @@ def usingForObjectDirective(self): self.state = 408 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==SolidityParser.T__11: + if _la == SolidityParser.T__11: self.state = 406 self.match(SolidityParser.T__11) self.state = 407 self.userDefinableOperators() - except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -2645,44 +3122,66 @@ def usingForObjectDirective(self): self.exitRule() return localctx - class UserDefinableOperatorsContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser - def getRuleIndex(self): return SolidityParser.RULE_userDefinableOperators - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterUserDefinableOperators" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterUserDefinableOperators"): listener.enterUserDefinableOperators(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitUserDefinableOperators" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitUserDefinableOperators"): listener.exitUserDefinableOperators(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitUserDefinableOperators" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitUserDefinableOperators"): return visitor.visitUserDefinableOperators(self) else: return visitor.visitChildren(self) - - - def userDefinableOperators(self): - - localctx = SolidityParser.UserDefinableOperatorsContext(self, self._ctx, self.state) + localctx = SolidityParser.UserDefinableOperatorsContext( + self, self._ctx, self.state + ) self.enterRule(localctx, 40, self.RULE_userDefinableOperators) - self._la = 0 # Token type + self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) self.state = 410 _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__2) | (1 << SolidityParser.T__4) | (1 << SolidityParser.T__5) | (1 << SolidityParser.T__6) | (1 << SolidityParser.T__7) | (1 << SolidityParser.T__8) | (1 << SolidityParser.T__9) | (1 << SolidityParser.T__27) | (1 << SolidityParser.T__28) | (1 << SolidityParser.T__29) | (1 << SolidityParser.T__30) | (1 << SolidityParser.T__31) | (1 << SolidityParser.T__32) | (1 << SolidityParser.T__33) | (1 << SolidityParser.T__34))) != 0)): + if not ( + ( + ((_la) & ~0x3F) == 0 + and ( + (1 << _la) + & ( + (1 << SolidityParser.T__2) + | (1 << SolidityParser.T__4) + | (1 << SolidityParser.T__5) + | (1 << SolidityParser.T__6) + | (1 << SolidityParser.T__7) + | (1 << SolidityParser.T__8) + | (1 << SolidityParser.T__9) + | (1 << SolidityParser.T__27) + | (1 << SolidityParser.T__28) + | (1 << SolidityParser.T__29) + | (1 << SolidityParser.T__30) + | (1 << SolidityParser.T__31) + | (1 << SolidityParser.T__32) + | (1 << SolidityParser.T__33) + | (1 << SolidityParser.T__34) + ) + ) + != 0 + ) + ): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -2695,49 +3194,47 @@ def userDefinableOperators(self): self.exitRule() return localctx - class StructDefinitionContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser def identifier(self): - return self.getTypedRuleContext(SolidityParser.IdentifierContext,0) + return self.getTypedRuleContext(SolidityParser.IdentifierContext, 0) - - def variableDeclaration(self, i:int=None): + def variableDeclaration(self, i: int = None): if i is None: - return self.getTypedRuleContexts(SolidityParser.VariableDeclarationContext) + return self.getTypedRuleContexts( + SolidityParser.VariableDeclarationContext + ) else: - return self.getTypedRuleContext(SolidityParser.VariableDeclarationContext,i) - + return self.getTypedRuleContext( + SolidityParser.VariableDeclarationContext, i + ) def getRuleIndex(self): return SolidityParser.RULE_structDefinition - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterStructDefinition" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterStructDefinition"): listener.enterStructDefinition(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitStructDefinition" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitStructDefinition"): listener.exitStructDefinition(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitStructDefinition" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitStructDefinition"): return visitor.visitStructDefinition(self) else: return visitor.visitChildren(self) - - - def structDefinition(self): - localctx = SolidityParser.StructDefinitionContext(self, self._ctx, self.state) self.enterRule(localctx, 42, self.RULE_structDefinition) - self._la = 0 # Token type + self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) self.state = 412 @@ -2749,7 +3246,46 @@ def structDefinition(self): self.state = 425 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 14)) & ~0x3f) == 0 and ((1 << (_la - 14)) & ((1 << (SolidityParser.T__13 - 14)) | (1 << (SolidityParser.T__24 - 14)) | (1 << (SolidityParser.T__37 - 14)) | (1 << (SolidityParser.T__43 - 14)) | (1 << (SolidityParser.T__45 - 14)) | (1 << (SolidityParser.T__49 - 14)) | (1 << (SolidityParser.T__61 - 14)) | (1 << (SolidityParser.T__62 - 14)) | (1 << (SolidityParser.T__63 - 14)) | (1 << (SolidityParser.T__64 - 14)) | (1 << (SolidityParser.T__65 - 14)))) != 0) or ((((_la - 95)) & ~0x3f) == 0 and ((1 << (_la - 95)) & ((1 << (SolidityParser.T__94 - 95)) | (1 << (SolidityParser.Int - 95)) | (1 << (SolidityParser.Uint - 95)) | (1 << (SolidityParser.Byte - 95)) | (1 << (SolidityParser.Fixed - 95)) | (1 << (SolidityParser.Ufixed - 95)) | (1 << (SolidityParser.LeaveKeyword - 95)) | (1 << (SolidityParser.PayableKeyword - 95)) | (1 << (SolidityParser.GlobalKeyword - 95)) | (1 << (SolidityParser.ConstructorKeyword - 95)) | (1 << (SolidityParser.ReceiveKeyword - 95)) | (1 << (SolidityParser.Identifier - 95)))) != 0): + if ( + (((_la - 14)) & ~0x3F) == 0 + and ( + (1 << (_la - 14)) + & ( + (1 << (SolidityParser.T__13 - 14)) + | (1 << (SolidityParser.T__24 - 14)) + | (1 << (SolidityParser.T__37 - 14)) + | (1 << (SolidityParser.T__43 - 14)) + | (1 << (SolidityParser.T__45 - 14)) + | (1 << (SolidityParser.T__49 - 14)) + | (1 << (SolidityParser.T__61 - 14)) + | (1 << (SolidityParser.T__62 - 14)) + | (1 << (SolidityParser.T__63 - 14)) + | (1 << (SolidityParser.T__64 - 14)) + | (1 << (SolidityParser.T__65 - 14)) + ) + ) + != 0 + ) or ( + (((_la - 95)) & ~0x3F) == 0 + and ( + (1 << (_la - 95)) + & ( + (1 << (SolidityParser.T__94 - 95)) + | (1 << (SolidityParser.Int - 95)) + | (1 << (SolidityParser.Uint - 95)) + | (1 << (SolidityParser.Byte - 95)) + | (1 << (SolidityParser.Fixed - 95)) + | (1 << (SolidityParser.Ufixed - 95)) + | (1 << (SolidityParser.LeaveKeyword - 95)) + | (1 << (SolidityParser.PayableKeyword - 95)) + | (1 << (SolidityParser.GlobalKeyword - 95)) + | (1 << (SolidityParser.ConstructorKeyword - 95)) + | (1 << (SolidityParser.ReceiveKeyword - 95)) + | (1 << (SolidityParser.Identifier - 95)) + ) + ) + != 0 + ): self.state = 415 self.variableDeclaration() self.state = 416 @@ -2757,7 +3293,46 @@ def structDefinition(self): self.state = 422 self._errHandler.sync(self) _la = self._input.LA(1) - while ((((_la - 14)) & ~0x3f) == 0 and ((1 << (_la - 14)) & ((1 << (SolidityParser.T__13 - 14)) | (1 << (SolidityParser.T__24 - 14)) | (1 << (SolidityParser.T__37 - 14)) | (1 << (SolidityParser.T__43 - 14)) | (1 << (SolidityParser.T__45 - 14)) | (1 << (SolidityParser.T__49 - 14)) | (1 << (SolidityParser.T__61 - 14)) | (1 << (SolidityParser.T__62 - 14)) | (1 << (SolidityParser.T__63 - 14)) | (1 << (SolidityParser.T__64 - 14)) | (1 << (SolidityParser.T__65 - 14)))) != 0) or ((((_la - 95)) & ~0x3f) == 0 and ((1 << (_la - 95)) & ((1 << (SolidityParser.T__94 - 95)) | (1 << (SolidityParser.Int - 95)) | (1 << (SolidityParser.Uint - 95)) | (1 << (SolidityParser.Byte - 95)) | (1 << (SolidityParser.Fixed - 95)) | (1 << (SolidityParser.Ufixed - 95)) | (1 << (SolidityParser.LeaveKeyword - 95)) | (1 << (SolidityParser.PayableKeyword - 95)) | (1 << (SolidityParser.GlobalKeyword - 95)) | (1 << (SolidityParser.ConstructorKeyword - 95)) | (1 << (SolidityParser.ReceiveKeyword - 95)) | (1 << (SolidityParser.Identifier - 95)))) != 0): + while ( + (((_la - 14)) & ~0x3F) == 0 + and ( + (1 << (_la - 14)) + & ( + (1 << (SolidityParser.T__13 - 14)) + | (1 << (SolidityParser.T__24 - 14)) + | (1 << (SolidityParser.T__37 - 14)) + | (1 << (SolidityParser.T__43 - 14)) + | (1 << (SolidityParser.T__45 - 14)) + | (1 << (SolidityParser.T__49 - 14)) + | (1 << (SolidityParser.T__61 - 14)) + | (1 << (SolidityParser.T__62 - 14)) + | (1 << (SolidityParser.T__63 - 14)) + | (1 << (SolidityParser.T__64 - 14)) + | (1 << (SolidityParser.T__65 - 14)) + ) + ) + != 0 + ) or ( + (((_la - 95)) & ~0x3F) == 0 + and ( + (1 << (_la - 95)) + & ( + (1 << (SolidityParser.T__94 - 95)) + | (1 << (SolidityParser.Int - 95)) + | (1 << (SolidityParser.Uint - 95)) + | (1 << (SolidityParser.Byte - 95)) + | (1 << (SolidityParser.Fixed - 95)) + | (1 << (SolidityParser.Ufixed - 95)) + | (1 << (SolidityParser.LeaveKeyword - 95)) + | (1 << (SolidityParser.PayableKeyword - 95)) + | (1 << (SolidityParser.GlobalKeyword - 95)) + | (1 << (SolidityParser.ConstructorKeyword - 95)) + | (1 << (SolidityParser.ReceiveKeyword - 95)) + | (1 << (SolidityParser.Identifier - 95)) + ) + ) + != 0 + ): self.state = 417 self.variableDeclaration() self.state = 418 @@ -2766,8 +3341,6 @@ def structDefinition(self): self._errHandler.sync(self) _la = self._input.LA(1) - - self.state = 427 self.match(SolidityParser.T__16) except RecognitionException as re: @@ -2778,63 +3351,59 @@ def structDefinition(self): self.exitRule() return localctx - class ModifierDefinitionContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser def identifier(self): - return self.getTypedRuleContext(SolidityParser.IdentifierContext,0) - + return self.getTypedRuleContext(SolidityParser.IdentifierContext, 0) def block(self): - return self.getTypedRuleContext(SolidityParser.BlockContext,0) - + return self.getTypedRuleContext(SolidityParser.BlockContext, 0) def parameterList(self): - return self.getTypedRuleContext(SolidityParser.ParameterListContext,0) + return self.getTypedRuleContext(SolidityParser.ParameterListContext, 0) - - def VirtualKeyword(self, i:int=None): + def VirtualKeyword(self, i: int = None): if i is None: return self.getTokens(SolidityParser.VirtualKeyword) else: return self.getToken(SolidityParser.VirtualKeyword, i) - def overrideSpecifier(self, i:int=None): + def overrideSpecifier(self, i: int = None): if i is None: - return self.getTypedRuleContexts(SolidityParser.OverrideSpecifierContext) + return self.getTypedRuleContexts( + SolidityParser.OverrideSpecifierContext + ) else: - return self.getTypedRuleContext(SolidityParser.OverrideSpecifierContext,i) - + return self.getTypedRuleContext( + SolidityParser.OverrideSpecifierContext, i + ) def getRuleIndex(self): return SolidityParser.RULE_modifierDefinition - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterModifierDefinition" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterModifierDefinition"): listener.enterModifierDefinition(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitModifierDefinition" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitModifierDefinition"): listener.exitModifierDefinition(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitModifierDefinition" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitModifierDefinition"): return visitor.visitModifierDefinition(self) else: return visitor.visitChildren(self) - - - def modifierDefinition(self): - localctx = SolidityParser.ModifierDefinitionContext(self, self._ctx, self.state) self.enterRule(localctx, 44, self.RULE_modifierDefinition) - self._la = 0 # Token type + self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) self.state = 429 @@ -2844,15 +3413,14 @@ def modifierDefinition(self): self.state = 432 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==SolidityParser.T__22: + if _la == SolidityParser.T__22: self.state = 431 self.parameterList() - self.state = 438 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==SolidityParser.T__95 or _la==SolidityParser.VirtualKeyword: + while _la == SolidityParser.T__95 or _la == SolidityParser.VirtualKeyword: self.state = 436 self._errHandler.sync(self) token = self._input.LA(1) @@ -2893,46 +3461,40 @@ def modifierDefinition(self): self.exitRule() return localctx - class ModifierInvocationContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser def identifier(self): - return self.getTypedRuleContext(SolidityParser.IdentifierContext,0) - + return self.getTypedRuleContext(SolidityParser.IdentifierContext, 0) def expressionList(self): - return self.getTypedRuleContext(SolidityParser.ExpressionListContext,0) - + return self.getTypedRuleContext(SolidityParser.ExpressionListContext, 0) def getRuleIndex(self): return SolidityParser.RULE_modifierInvocation - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterModifierInvocation" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterModifierInvocation"): listener.enterModifierInvocation(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitModifierInvocation" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitModifierInvocation"): listener.exitModifierInvocation(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitModifierInvocation" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitModifierInvocation"): return visitor.visitModifierInvocation(self) else: return visitor.visitChildren(self) - - - def modifierInvocation(self): - localctx = SolidityParser.ModifierInvocationContext(self, self._ctx, self.state) self.enterRule(localctx, 46, self.RULE_modifierInvocation) - self._la = 0 # Token type + self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) self.state = 445 @@ -2940,21 +3502,74 @@ def modifierInvocation(self): self.state = 451 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==SolidityParser.T__22: + if _la == SolidityParser.T__22: self.state = 446 self.match(SolidityParser.T__22) self.state = 448 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 6)) & ~0x3f) == 0 and ((1 << (_la - 6)) & ((1 << (SolidityParser.T__5 - 6)) | (1 << (SolidityParser.T__13 - 6)) | (1 << (SolidityParser.T__22 - 6)) | (1 << (SolidityParser.T__24 - 6)) | (1 << (SolidityParser.T__29 - 6)) | (1 << (SolidityParser.T__30 - 6)) | (1 << (SolidityParser.T__37 - 6)) | (1 << (SolidityParser.T__41 - 6)) | (1 << (SolidityParser.T__43 - 6)) | (1 << (SolidityParser.T__45 - 6)) | (1 << (SolidityParser.T__49 - 6)) | (1 << (SolidityParser.T__61 - 6)) | (1 << (SolidityParser.T__62 - 6)) | (1 << (SolidityParser.T__63 - 6)) | (1 << (SolidityParser.T__64 - 6)) | (1 << (SolidityParser.T__65 - 6)) | (1 << (SolidityParser.T__66 - 6)) | (1 << (SolidityParser.T__67 - 6)) | (1 << (SolidityParser.T__68 - 6)))) != 0) or ((((_la - 71)) & ~0x3f) == 0 and ((1 << (_la - 71)) & ((1 << (SolidityParser.T__70 - 71)) | (1 << (SolidityParser.T__71 - 71)) | (1 << (SolidityParser.T__94 - 71)) | (1 << (SolidityParser.Int - 71)) | (1 << (SolidityParser.Uint - 71)) | (1 << (SolidityParser.Byte - 71)) | (1 << (SolidityParser.Fixed - 71)) | (1 << (SolidityParser.Ufixed - 71)) | (1 << (SolidityParser.BooleanLiteral - 71)) | (1 << (SolidityParser.DecimalNumber - 71)) | (1 << (SolidityParser.HexNumber - 71)) | (1 << (SolidityParser.HexLiteralFragment - 71)) | (1 << (SolidityParser.LeaveKeyword - 71)) | (1 << (SolidityParser.PayableKeyword - 71)) | (1 << (SolidityParser.TypeKeyword - 71)) | (1 << (SolidityParser.GlobalKeyword - 71)) | (1 << (SolidityParser.ConstructorKeyword - 71)) | (1 << (SolidityParser.ReceiveKeyword - 71)) | (1 << (SolidityParser.Identifier - 71)) | (1 << (SolidityParser.StringLiteralFragment - 71)))) != 0): + if ( + (((_la - 6)) & ~0x3F) == 0 + and ( + (1 << (_la - 6)) + & ( + (1 << (SolidityParser.T__5 - 6)) + | (1 << (SolidityParser.T__13 - 6)) + | (1 << (SolidityParser.T__22 - 6)) + | (1 << (SolidityParser.T__24 - 6)) + | (1 << (SolidityParser.T__29 - 6)) + | (1 << (SolidityParser.T__30 - 6)) + | (1 << (SolidityParser.T__37 - 6)) + | (1 << (SolidityParser.T__41 - 6)) + | (1 << (SolidityParser.T__43 - 6)) + | (1 << (SolidityParser.T__45 - 6)) + | (1 << (SolidityParser.T__49 - 6)) + | (1 << (SolidityParser.T__61 - 6)) + | (1 << (SolidityParser.T__62 - 6)) + | (1 << (SolidityParser.T__63 - 6)) + | (1 << (SolidityParser.T__64 - 6)) + | (1 << (SolidityParser.T__65 - 6)) + | (1 << (SolidityParser.T__66 - 6)) + | (1 << (SolidityParser.T__67 - 6)) + | (1 << (SolidityParser.T__68 - 6)) + ) + ) + != 0 + ) or ( + (((_la - 71)) & ~0x3F) == 0 + and ( + (1 << (_la - 71)) + & ( + (1 << (SolidityParser.T__70 - 71)) + | (1 << (SolidityParser.T__71 - 71)) + | (1 << (SolidityParser.T__94 - 71)) + | (1 << (SolidityParser.Int - 71)) + | (1 << (SolidityParser.Uint - 71)) + | (1 << (SolidityParser.Byte - 71)) + | (1 << (SolidityParser.Fixed - 71)) + | (1 << (SolidityParser.Ufixed - 71)) + | (1 << (SolidityParser.BooleanLiteral - 71)) + | (1 << (SolidityParser.DecimalNumber - 71)) + | (1 << (SolidityParser.HexNumber - 71)) + | (1 << (SolidityParser.HexLiteralFragment - 71)) + | (1 << (SolidityParser.LeaveKeyword - 71)) + | (1 << (SolidityParser.PayableKeyword - 71)) + | (1 << (SolidityParser.TypeKeyword - 71)) + | (1 << (SolidityParser.GlobalKeyword - 71)) + | (1 << (SolidityParser.ConstructorKeyword - 71)) + | (1 << (SolidityParser.ReceiveKeyword - 71)) + | (1 << (SolidityParser.Identifier - 71)) + | (1 << (SolidityParser.StringLiteralFragment - 71)) + ) + ) + != 0 + ): self.state = 447 self.expressionList() - self.state = 450 self.match(SolidityParser.T__23) - except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -2963,58 +3578,49 @@ def modifierInvocation(self): self.exitRule() return localctx - class FunctionDefinitionContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser def functionDescriptor(self): - return self.getTypedRuleContext(SolidityParser.FunctionDescriptorContext,0) - + return self.getTypedRuleContext(SolidityParser.FunctionDescriptorContext, 0) def parameterList(self): - return self.getTypedRuleContext(SolidityParser.ParameterListContext,0) - + return self.getTypedRuleContext(SolidityParser.ParameterListContext, 0) def modifierList(self): - return self.getTypedRuleContext(SolidityParser.ModifierListContext,0) - + return self.getTypedRuleContext(SolidityParser.ModifierListContext, 0) def block(self): - return self.getTypedRuleContext(SolidityParser.BlockContext,0) - + return self.getTypedRuleContext(SolidityParser.BlockContext, 0) def returnParameters(self): - return self.getTypedRuleContext(SolidityParser.ReturnParametersContext,0) - + return self.getTypedRuleContext(SolidityParser.ReturnParametersContext, 0) def getRuleIndex(self): return SolidityParser.RULE_functionDefinition - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterFunctionDefinition" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterFunctionDefinition"): listener.enterFunctionDefinition(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitFunctionDefinition" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitFunctionDefinition"): listener.exitFunctionDefinition(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitFunctionDefinition" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitFunctionDefinition"): return visitor.visitFunctionDefinition(self) else: return visitor.visitChildren(self) - - - def functionDefinition(self): - localctx = SolidityParser.FunctionDefinitionContext(self, self._ctx, self.state) self.enterRule(localctx, 48, self.RULE_functionDefinition) - self._la = 0 # Token type + self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) self.state = 453 @@ -3026,11 +3632,10 @@ def functionDefinition(self): self.state = 457 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==SolidityParser.T__38: + if _la == SolidityParser.T__38: self.state = 456 self.returnParameters() - self.state = 461 self._errHandler.sync(self) token = self._input.LA(1) @@ -3053,16 +3658,15 @@ def functionDefinition(self): self.exitRule() return localctx - class FunctionDescriptorContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser def identifier(self): - return self.getTypedRuleContext(SolidityParser.IdentifierContext,0) - + return self.getTypedRuleContext(SolidityParser.IdentifierContext, 0) def ConstructorKeyword(self): return self.getToken(SolidityParser.ConstructorKeyword, 0) @@ -3076,28 +3680,24 @@ def ReceiveKeyword(self): def getRuleIndex(self): return SolidityParser.RULE_functionDescriptor - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterFunctionDescriptor" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterFunctionDescriptor"): listener.enterFunctionDescriptor(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitFunctionDescriptor" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitFunctionDescriptor"): listener.exitFunctionDescriptor(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitFunctionDescriptor" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitFunctionDescriptor"): return visitor.visitFunctionDescriptor(self) else: return visitor.visitChildren(self) - - - def functionDescriptor(self): - localctx = SolidityParser.FunctionDescriptorContext(self, self._ctx, self.state) self.enterRule(localctx, 50, self.RULE_functionDescriptor) - self._la = 0 # Token type + self._la = 0 # Token type try: self.state = 470 self._errHandler.sync(self) @@ -3109,11 +3709,38 @@ def functionDescriptor(self): self.state = 465 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__43) | (1 << SolidityParser.T__49) | (1 << SolidityParser.T__61))) != 0) or ((((_la - 95)) & ~0x3f) == 0 and ((1 << (_la - 95)) & ((1 << (SolidityParser.T__94 - 95)) | (1 << (SolidityParser.LeaveKeyword - 95)) | (1 << (SolidityParser.PayableKeyword - 95)) | (1 << (SolidityParser.GlobalKeyword - 95)) | (1 << (SolidityParser.ConstructorKeyword - 95)) | (1 << (SolidityParser.ReceiveKeyword - 95)) | (1 << (SolidityParser.Identifier - 95)))) != 0): + if ( + ((_la) & ~0x3F) == 0 + and ( + (1 << _la) + & ( + (1 << SolidityParser.T__13) + | (1 << SolidityParser.T__24) + | (1 << SolidityParser.T__43) + | (1 << SolidityParser.T__49) + | (1 << SolidityParser.T__61) + ) + ) + != 0 + ) or ( + (((_la - 95)) & ~0x3F) == 0 + and ( + (1 << (_la - 95)) + & ( + (1 << (SolidityParser.T__94 - 95)) + | (1 << (SolidityParser.LeaveKeyword - 95)) + | (1 << (SolidityParser.PayableKeyword - 95)) + | (1 << (SolidityParser.GlobalKeyword - 95)) + | (1 << (SolidityParser.ConstructorKeyword - 95)) + | (1 << (SolidityParser.ReceiveKeyword - 95)) + | (1 << (SolidityParser.Identifier - 95)) + ) + ) + != 0 + ): self.state = 464 self.identifier() - pass elif token in [SolidityParser.ConstructorKeyword]: self.enterOuterAlt(localctx, 2) @@ -3141,39 +3768,34 @@ def functionDescriptor(self): self.exitRule() return localctx - class ReturnParametersContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser def parameterList(self): - return self.getTypedRuleContext(SolidityParser.ParameterListContext,0) - + return self.getTypedRuleContext(SolidityParser.ParameterListContext, 0) def getRuleIndex(self): return SolidityParser.RULE_returnParameters - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterReturnParameters" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterReturnParameters"): listener.enterReturnParameters(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitReturnParameters" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitReturnParameters"): listener.exitReturnParameters(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitReturnParameters" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitReturnParameters"): return visitor.visitReturnParameters(self) else: return visitor.visitChildren(self) - - - def returnParameters(self): - localctx = SolidityParser.ReturnParametersContext(self, self._ctx, self.state) self.enterRule(localctx, 52, self.RULE_returnParameters) try: @@ -3190,98 +3812,138 @@ def returnParameters(self): self.exitRule() return localctx - class ModifierListContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser - def ExternalKeyword(self, i:int=None): + def ExternalKeyword(self, i: int = None): if i is None: return self.getTokens(SolidityParser.ExternalKeyword) else: return self.getToken(SolidityParser.ExternalKeyword, i) - def PublicKeyword(self, i:int=None): + def PublicKeyword(self, i: int = None): if i is None: return self.getTokens(SolidityParser.PublicKeyword) else: return self.getToken(SolidityParser.PublicKeyword, i) - def InternalKeyword(self, i:int=None): + def InternalKeyword(self, i: int = None): if i is None: return self.getTokens(SolidityParser.InternalKeyword) else: return self.getToken(SolidityParser.InternalKeyword, i) - def PrivateKeyword(self, i:int=None): + def PrivateKeyword(self, i: int = None): if i is None: return self.getTokens(SolidityParser.PrivateKeyword) else: return self.getToken(SolidityParser.PrivateKeyword, i) - def VirtualKeyword(self, i:int=None): + def VirtualKeyword(self, i: int = None): if i is None: return self.getTokens(SolidityParser.VirtualKeyword) else: return self.getToken(SolidityParser.VirtualKeyword, i) - def stateMutability(self, i:int=None): + def stateMutability(self, i: int = None): if i is None: return self.getTypedRuleContexts(SolidityParser.StateMutabilityContext) else: - return self.getTypedRuleContext(SolidityParser.StateMutabilityContext,i) - + return self.getTypedRuleContext( + SolidityParser.StateMutabilityContext, i + ) - def modifierInvocation(self, i:int=None): + def modifierInvocation(self, i: int = None): if i is None: - return self.getTypedRuleContexts(SolidityParser.ModifierInvocationContext) + return self.getTypedRuleContexts( + SolidityParser.ModifierInvocationContext + ) else: - return self.getTypedRuleContext(SolidityParser.ModifierInvocationContext,i) + return self.getTypedRuleContext( + SolidityParser.ModifierInvocationContext, i + ) - - def overrideSpecifier(self, i:int=None): + def overrideSpecifier(self, i: int = None): if i is None: - return self.getTypedRuleContexts(SolidityParser.OverrideSpecifierContext) + return self.getTypedRuleContexts( + SolidityParser.OverrideSpecifierContext + ) else: - return self.getTypedRuleContext(SolidityParser.OverrideSpecifierContext,i) - + return self.getTypedRuleContext( + SolidityParser.OverrideSpecifierContext, i + ) def getRuleIndex(self): return SolidityParser.RULE_modifierList - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterModifierList" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterModifierList"): listener.enterModifierList(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitModifierList" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitModifierList"): listener.exitModifierList(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitModifierList" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitModifierList"): return visitor.visitModifierList(self) else: return visitor.visitChildren(self) - - - def modifierList(self): - localctx = SolidityParser.ModifierListContext(self, self._ctx, self.state) self.enterRule(localctx, 54, self.RULE_modifierList) - self._la = 0 # Token type + self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) self.state = 485 self._errHandler.sync(self) _la = self._input.LA(1) - while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__43) | (1 << SolidityParser.T__49) | (1 << SolidityParser.T__61))) != 0) or ((((_la - 95)) & ~0x3f) == 0 and ((1 << (_la - 95)) & ((1 << (SolidityParser.T__94 - 95)) | (1 << (SolidityParser.T__95 - 95)) | (1 << (SolidityParser.ConstantKeyword - 95)) | (1 << (SolidityParser.LeaveKeyword - 95)) | (1 << (SolidityParser.ExternalKeyword - 95)) | (1 << (SolidityParser.InternalKeyword - 95)) | (1 << (SolidityParser.PayableKeyword - 95)) | (1 << (SolidityParser.PrivateKeyword - 95)) | (1 << (SolidityParser.PublicKeyword - 95)) | (1 << (SolidityParser.VirtualKeyword - 95)) | (1 << (SolidityParser.PureKeyword - 95)) | (1 << (SolidityParser.ViewKeyword - 95)) | (1 << (SolidityParser.GlobalKeyword - 95)) | (1 << (SolidityParser.ConstructorKeyword - 95)) | (1 << (SolidityParser.ReceiveKeyword - 95)) | (1 << (SolidityParser.Identifier - 95)))) != 0): + while ( + ((_la) & ~0x3F) == 0 + and ( + (1 << _la) + & ( + (1 << SolidityParser.T__13) + | (1 << SolidityParser.T__24) + | (1 << SolidityParser.T__43) + | (1 << SolidityParser.T__49) + | (1 << SolidityParser.T__61) + ) + ) + != 0 + ) or ( + (((_la - 95)) & ~0x3F) == 0 + and ( + (1 << (_la - 95)) + & ( + (1 << (SolidityParser.T__94 - 95)) + | (1 << (SolidityParser.T__95 - 95)) + | (1 << (SolidityParser.ConstantKeyword - 95)) + | (1 << (SolidityParser.LeaveKeyword - 95)) + | (1 << (SolidityParser.ExternalKeyword - 95)) + | (1 << (SolidityParser.InternalKeyword - 95)) + | (1 << (SolidityParser.PayableKeyword - 95)) + | (1 << (SolidityParser.PrivateKeyword - 95)) + | (1 << (SolidityParser.PublicKeyword - 95)) + | (1 << (SolidityParser.VirtualKeyword - 95)) + | (1 << (SolidityParser.PureKeyword - 95)) + | (1 << (SolidityParser.ViewKeyword - 95)) + | (1 << (SolidityParser.GlobalKeyword - 95)) + | (1 << (SolidityParser.ConstructorKeyword - 95)) + | (1 << (SolidityParser.ReceiveKeyword - 95)) + | (1 << (SolidityParser.Identifier - 95)) + ) + ) + != 0 + ): self.state = 483 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,41,self._ctx) + la_ = self._interp.adaptivePredict(self._input, 41, self._ctx) if la_ == 1: self.state = 475 self.match(SolidityParser.ExternalKeyword) @@ -3322,7 +3984,6 @@ def modifierList(self): self.overrideSpecifier() pass - self.state = 487 self._errHandler.sync(self) _la = self._input.LA(1) @@ -3335,20 +3996,18 @@ def modifierList(self): self.exitRule() return localctx - class EventDefinitionContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser def identifier(self): - return self.getTypedRuleContext(SolidityParser.IdentifierContext,0) - + return self.getTypedRuleContext(SolidityParser.IdentifierContext, 0) def eventParameterList(self): - return self.getTypedRuleContext(SolidityParser.EventParameterListContext,0) - + return self.getTypedRuleContext(SolidityParser.EventParameterListContext, 0) def AnonymousKeyword(self): return self.getToken(SolidityParser.AnonymousKeyword, 0) @@ -3356,28 +4015,24 @@ def AnonymousKeyword(self): def getRuleIndex(self): return SolidityParser.RULE_eventDefinition - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterEventDefinition" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterEventDefinition"): listener.enterEventDefinition(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitEventDefinition" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitEventDefinition"): listener.exitEventDefinition(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitEventDefinition" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitEventDefinition"): return visitor.visitEventDefinition(self) else: return visitor.visitChildren(self) - - - def eventDefinition(self): - localctx = SolidityParser.EventDefinitionContext(self, self._ctx, self.state) self.enterRule(localctx, 56, self.RULE_eventDefinition) - self._la = 0 # Token type + self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) self.state = 488 @@ -3389,11 +4044,10 @@ def eventDefinition(self): self.state = 492 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==SolidityParser.AnonymousKeyword: + if _la == SolidityParser.AnonymousKeyword: self.state = 491 self.match(SolidityParser.AnonymousKeyword) - self.state = 494 self.match(SolidityParser.T__1) except RecognitionException as re: @@ -3404,39 +4058,34 @@ def eventDefinition(self): self.exitRule() return localctx - class EnumValueContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser def identifier(self): - return self.getTypedRuleContext(SolidityParser.IdentifierContext,0) - + return self.getTypedRuleContext(SolidityParser.IdentifierContext, 0) def getRuleIndex(self): return SolidityParser.RULE_enumValue - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterEnumValue" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterEnumValue"): listener.enterEnumValue(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitEnumValue" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitEnumValue"): listener.exitEnumValue(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitEnumValue" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitEnumValue"): return visitor.visitEnumValue(self) else: return visitor.visitChildren(self) - - - def enumValue(self): - localctx = SolidityParser.EnumValueContext(self, self._ctx, self.state) self.enterRule(localctx, 58, self.RULE_enumValue) try: @@ -3451,49 +4100,43 @@ def enumValue(self): self.exitRule() return localctx - class EnumDefinitionContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser def identifier(self): - return self.getTypedRuleContext(SolidityParser.IdentifierContext,0) + return self.getTypedRuleContext(SolidityParser.IdentifierContext, 0) - - def enumValue(self, i:int=None): + def enumValue(self, i: int = None): if i is None: return self.getTypedRuleContexts(SolidityParser.EnumValueContext) else: - return self.getTypedRuleContext(SolidityParser.EnumValueContext,i) - + return self.getTypedRuleContext(SolidityParser.EnumValueContext, i) def getRuleIndex(self): return SolidityParser.RULE_enumDefinition - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterEnumDefinition" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterEnumDefinition"): listener.enterEnumDefinition(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitEnumDefinition" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitEnumDefinition"): listener.exitEnumDefinition(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitEnumDefinition" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitEnumDefinition"): return visitor.visitEnumDefinition(self) else: return visitor.visitChildren(self) - - - def enumDefinition(self): - localctx = SolidityParser.EnumDefinitionContext(self, self._ctx, self.state) self.enterRule(localctx, 60, self.RULE_enumDefinition) - self._la = 0 # Token type + self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) self.state = 498 @@ -3505,15 +4148,42 @@ def enumDefinition(self): self.state = 502 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__43) | (1 << SolidityParser.T__49) | (1 << SolidityParser.T__61))) != 0) or ((((_la - 95)) & ~0x3f) == 0 and ((1 << (_la - 95)) & ((1 << (SolidityParser.T__94 - 95)) | (1 << (SolidityParser.LeaveKeyword - 95)) | (1 << (SolidityParser.PayableKeyword - 95)) | (1 << (SolidityParser.GlobalKeyword - 95)) | (1 << (SolidityParser.ConstructorKeyword - 95)) | (1 << (SolidityParser.ReceiveKeyword - 95)) | (1 << (SolidityParser.Identifier - 95)))) != 0): + if ( + ((_la) & ~0x3F) == 0 + and ( + (1 << _la) + & ( + (1 << SolidityParser.T__13) + | (1 << SolidityParser.T__24) + | (1 << SolidityParser.T__43) + | (1 << SolidityParser.T__49) + | (1 << SolidityParser.T__61) + ) + ) + != 0 + ) or ( + (((_la - 95)) & ~0x3F) == 0 + and ( + (1 << (_la - 95)) + & ( + (1 << (SolidityParser.T__94 - 95)) + | (1 << (SolidityParser.LeaveKeyword - 95)) + | (1 << (SolidityParser.PayableKeyword - 95)) + | (1 << (SolidityParser.GlobalKeyword - 95)) + | (1 << (SolidityParser.ConstructorKeyword - 95)) + | (1 << (SolidityParser.ReceiveKeyword - 95)) + | (1 << (SolidityParser.Identifier - 95)) + ) + ) + != 0 + ): self.state = 501 self.enumValue() - self.state = 508 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==SolidityParser.T__15: + while _la == SolidityParser.T__15: self.state = 504 self.match(SolidityParser.T__15) self.state = 505 @@ -3532,45 +4202,40 @@ def enumDefinition(self): self.exitRule() return localctx - class ParameterListContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser - def parameter(self, i:int=None): + def parameter(self, i: int = None): if i is None: return self.getTypedRuleContexts(SolidityParser.ParameterContext) else: - return self.getTypedRuleContext(SolidityParser.ParameterContext,i) - + return self.getTypedRuleContext(SolidityParser.ParameterContext, i) def getRuleIndex(self): return SolidityParser.RULE_parameterList - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterParameterList" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterParameterList"): listener.enterParameterList(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitParameterList" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitParameterList"): listener.exitParameterList(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitParameterList" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitParameterList"): return visitor.visitParameterList(self) else: return visitor.visitChildren(self) - - - def parameterList(self): - localctx = SolidityParser.ParameterListContext(self, self._ctx, self.state) self.enterRule(localctx, 62, self.RULE_parameterList) - self._la = 0 # Token type + self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) self.state = 513 @@ -3578,13 +4243,52 @@ def parameterList(self): self.state = 522 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 14)) & ~0x3f) == 0 and ((1 << (_la - 14)) & ((1 << (SolidityParser.T__13 - 14)) | (1 << (SolidityParser.T__24 - 14)) | (1 << (SolidityParser.T__37 - 14)) | (1 << (SolidityParser.T__43 - 14)) | (1 << (SolidityParser.T__45 - 14)) | (1 << (SolidityParser.T__49 - 14)) | (1 << (SolidityParser.T__61 - 14)) | (1 << (SolidityParser.T__62 - 14)) | (1 << (SolidityParser.T__63 - 14)) | (1 << (SolidityParser.T__64 - 14)) | (1 << (SolidityParser.T__65 - 14)))) != 0) or ((((_la - 95)) & ~0x3f) == 0 and ((1 << (_la - 95)) & ((1 << (SolidityParser.T__94 - 95)) | (1 << (SolidityParser.Int - 95)) | (1 << (SolidityParser.Uint - 95)) | (1 << (SolidityParser.Byte - 95)) | (1 << (SolidityParser.Fixed - 95)) | (1 << (SolidityParser.Ufixed - 95)) | (1 << (SolidityParser.LeaveKeyword - 95)) | (1 << (SolidityParser.PayableKeyword - 95)) | (1 << (SolidityParser.GlobalKeyword - 95)) | (1 << (SolidityParser.ConstructorKeyword - 95)) | (1 << (SolidityParser.ReceiveKeyword - 95)) | (1 << (SolidityParser.Identifier - 95)))) != 0): + if ( + (((_la - 14)) & ~0x3F) == 0 + and ( + (1 << (_la - 14)) + & ( + (1 << (SolidityParser.T__13 - 14)) + | (1 << (SolidityParser.T__24 - 14)) + | (1 << (SolidityParser.T__37 - 14)) + | (1 << (SolidityParser.T__43 - 14)) + | (1 << (SolidityParser.T__45 - 14)) + | (1 << (SolidityParser.T__49 - 14)) + | (1 << (SolidityParser.T__61 - 14)) + | (1 << (SolidityParser.T__62 - 14)) + | (1 << (SolidityParser.T__63 - 14)) + | (1 << (SolidityParser.T__64 - 14)) + | (1 << (SolidityParser.T__65 - 14)) + ) + ) + != 0 + ) or ( + (((_la - 95)) & ~0x3F) == 0 + and ( + (1 << (_la - 95)) + & ( + (1 << (SolidityParser.T__94 - 95)) + | (1 << (SolidityParser.Int - 95)) + | (1 << (SolidityParser.Uint - 95)) + | (1 << (SolidityParser.Byte - 95)) + | (1 << (SolidityParser.Fixed - 95)) + | (1 << (SolidityParser.Ufixed - 95)) + | (1 << (SolidityParser.LeaveKeyword - 95)) + | (1 << (SolidityParser.PayableKeyword - 95)) + | (1 << (SolidityParser.GlobalKeyword - 95)) + | (1 << (SolidityParser.ConstructorKeyword - 95)) + | (1 << (SolidityParser.ReceiveKeyword - 95)) + | (1 << (SolidityParser.Identifier - 95)) + ) + ) + != 0 + ): self.state = 514 self.parameter() self.state = 519 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==SolidityParser.T__15: + while _la == SolidityParser.T__15: self.state = 515 self.match(SolidityParser.T__15) self.state = 516 @@ -3593,8 +4297,6 @@ def parameterList(self): self._errHandler.sync(self) _la = self._input.LA(1) - - self.state = 524 self.match(SolidityParser.T__23) except RecognitionException as re: @@ -3605,70 +4307,89 @@ def parameterList(self): self.exitRule() return localctx - class ParameterContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser def typeName(self): - return self.getTypedRuleContext(SolidityParser.TypeNameContext,0) - + return self.getTypedRuleContext(SolidityParser.TypeNameContext, 0) def storageLocation(self): - return self.getTypedRuleContext(SolidityParser.StorageLocationContext,0) - + return self.getTypedRuleContext(SolidityParser.StorageLocationContext, 0) def identifier(self): - return self.getTypedRuleContext(SolidityParser.IdentifierContext,0) - + return self.getTypedRuleContext(SolidityParser.IdentifierContext, 0) def getRuleIndex(self): return SolidityParser.RULE_parameter - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterParameter" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterParameter"): listener.enterParameter(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitParameter" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitParameter"): listener.exitParameter(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitParameter" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitParameter"): return visitor.visitParameter(self) else: return visitor.visitChildren(self) - - - def parameter(self): - localctx = SolidityParser.ParameterContext(self, self._ctx, self.state) self.enterRule(localctx, 64, self.RULE_parameter) - self._la = 0 # Token type + self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) self.state = 526 self.typeName(0) self.state = 528 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,48,self._ctx) + la_ = self._interp.adaptivePredict(self._input, 48, self._ctx) if la_ == 1: self.state = 527 self.storageLocation() - self.state = 531 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__43) | (1 << SolidityParser.T__49) | (1 << SolidityParser.T__61))) != 0) or ((((_la - 95)) & ~0x3f) == 0 and ((1 << (_la - 95)) & ((1 << (SolidityParser.T__94 - 95)) | (1 << (SolidityParser.LeaveKeyword - 95)) | (1 << (SolidityParser.PayableKeyword - 95)) | (1 << (SolidityParser.GlobalKeyword - 95)) | (1 << (SolidityParser.ConstructorKeyword - 95)) | (1 << (SolidityParser.ReceiveKeyword - 95)) | (1 << (SolidityParser.Identifier - 95)))) != 0): + if ( + ((_la) & ~0x3F) == 0 + and ( + (1 << _la) + & ( + (1 << SolidityParser.T__13) + | (1 << SolidityParser.T__24) + | (1 << SolidityParser.T__43) + | (1 << SolidityParser.T__49) + | (1 << SolidityParser.T__61) + ) + ) + != 0 + ) or ( + (((_la - 95)) & ~0x3F) == 0 + and ( + (1 << (_la - 95)) + & ( + (1 << (SolidityParser.T__94 - 95)) + | (1 << (SolidityParser.LeaveKeyword - 95)) + | (1 << (SolidityParser.PayableKeyword - 95)) + | (1 << (SolidityParser.GlobalKeyword - 95)) + | (1 << (SolidityParser.ConstructorKeyword - 95)) + | (1 << (SolidityParser.ReceiveKeyword - 95)) + | (1 << (SolidityParser.Identifier - 95)) + ) + ) + != 0 + ): self.state = 530 self.identifier() - except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -3677,45 +4398,40 @@ def parameter(self): self.exitRule() return localctx - class EventParameterListContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser - def eventParameter(self, i:int=None): + def eventParameter(self, i: int = None): if i is None: return self.getTypedRuleContexts(SolidityParser.EventParameterContext) else: - return self.getTypedRuleContext(SolidityParser.EventParameterContext,i) - + return self.getTypedRuleContext(SolidityParser.EventParameterContext, i) def getRuleIndex(self): return SolidityParser.RULE_eventParameterList - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterEventParameterList" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterEventParameterList"): listener.enterEventParameterList(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitEventParameterList" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitEventParameterList"): listener.exitEventParameterList(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitEventParameterList" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitEventParameterList"): return visitor.visitEventParameterList(self) else: return visitor.visitChildren(self) - - - def eventParameterList(self): - localctx = SolidityParser.EventParameterListContext(self, self._ctx, self.state) self.enterRule(localctx, 66, self.RULE_eventParameterList) - self._la = 0 # Token type + self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) self.state = 533 @@ -3723,13 +4439,52 @@ def eventParameterList(self): self.state = 542 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 14)) & ~0x3f) == 0 and ((1 << (_la - 14)) & ((1 << (SolidityParser.T__13 - 14)) | (1 << (SolidityParser.T__24 - 14)) | (1 << (SolidityParser.T__37 - 14)) | (1 << (SolidityParser.T__43 - 14)) | (1 << (SolidityParser.T__45 - 14)) | (1 << (SolidityParser.T__49 - 14)) | (1 << (SolidityParser.T__61 - 14)) | (1 << (SolidityParser.T__62 - 14)) | (1 << (SolidityParser.T__63 - 14)) | (1 << (SolidityParser.T__64 - 14)) | (1 << (SolidityParser.T__65 - 14)))) != 0) or ((((_la - 95)) & ~0x3f) == 0 and ((1 << (_la - 95)) & ((1 << (SolidityParser.T__94 - 95)) | (1 << (SolidityParser.Int - 95)) | (1 << (SolidityParser.Uint - 95)) | (1 << (SolidityParser.Byte - 95)) | (1 << (SolidityParser.Fixed - 95)) | (1 << (SolidityParser.Ufixed - 95)) | (1 << (SolidityParser.LeaveKeyword - 95)) | (1 << (SolidityParser.PayableKeyword - 95)) | (1 << (SolidityParser.GlobalKeyword - 95)) | (1 << (SolidityParser.ConstructorKeyword - 95)) | (1 << (SolidityParser.ReceiveKeyword - 95)) | (1 << (SolidityParser.Identifier - 95)))) != 0): + if ( + (((_la - 14)) & ~0x3F) == 0 + and ( + (1 << (_la - 14)) + & ( + (1 << (SolidityParser.T__13 - 14)) + | (1 << (SolidityParser.T__24 - 14)) + | (1 << (SolidityParser.T__37 - 14)) + | (1 << (SolidityParser.T__43 - 14)) + | (1 << (SolidityParser.T__45 - 14)) + | (1 << (SolidityParser.T__49 - 14)) + | (1 << (SolidityParser.T__61 - 14)) + | (1 << (SolidityParser.T__62 - 14)) + | (1 << (SolidityParser.T__63 - 14)) + | (1 << (SolidityParser.T__64 - 14)) + | (1 << (SolidityParser.T__65 - 14)) + ) + ) + != 0 + ) or ( + (((_la - 95)) & ~0x3F) == 0 + and ( + (1 << (_la - 95)) + & ( + (1 << (SolidityParser.T__94 - 95)) + | (1 << (SolidityParser.Int - 95)) + | (1 << (SolidityParser.Uint - 95)) + | (1 << (SolidityParser.Byte - 95)) + | (1 << (SolidityParser.Fixed - 95)) + | (1 << (SolidityParser.Ufixed - 95)) + | (1 << (SolidityParser.LeaveKeyword - 95)) + | (1 << (SolidityParser.PayableKeyword - 95)) + | (1 << (SolidityParser.GlobalKeyword - 95)) + | (1 << (SolidityParser.ConstructorKeyword - 95)) + | (1 << (SolidityParser.ReceiveKeyword - 95)) + | (1 << (SolidityParser.Identifier - 95)) + ) + ) + != 0 + ): self.state = 534 self.eventParameter() self.state = 539 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==SolidityParser.T__15: + while _la == SolidityParser.T__15: self.state = 535 self.match(SolidityParser.T__15) self.state = 536 @@ -3738,8 +4493,6 @@ def eventParameterList(self): self._errHandler.sync(self) _la = self._input.LA(1) - - self.state = 544 self.match(SolidityParser.T__23) except RecognitionException as re: @@ -3750,49 +4503,43 @@ def eventParameterList(self): self.exitRule() return localctx - class EventParameterContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser def typeName(self): - return self.getTypedRuleContext(SolidityParser.TypeNameContext,0) - + return self.getTypedRuleContext(SolidityParser.TypeNameContext, 0) def IndexedKeyword(self): return self.getToken(SolidityParser.IndexedKeyword, 0) def identifier(self): - return self.getTypedRuleContext(SolidityParser.IdentifierContext,0) - + return self.getTypedRuleContext(SolidityParser.IdentifierContext, 0) def getRuleIndex(self): return SolidityParser.RULE_eventParameter - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterEventParameter" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterEventParameter"): listener.enterEventParameter(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitEventParameter" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitEventParameter"): listener.exitEventParameter(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitEventParameter" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitEventParameter"): return visitor.visitEventParameter(self) else: return visitor.visitChildren(self) - - - def eventParameter(self): - localctx = SolidityParser.EventParameterContext(self, self._ctx, self.state) self.enterRule(localctx, 68, self.RULE_eventParameter) - self._la = 0 # Token type + self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) self.state = 546 @@ -3800,19 +4547,45 @@ def eventParameter(self): self.state = 548 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==SolidityParser.IndexedKeyword: + if _la == SolidityParser.IndexedKeyword: self.state = 547 self.match(SolidityParser.IndexedKeyword) - self.state = 551 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__43) | (1 << SolidityParser.T__49) | (1 << SolidityParser.T__61))) != 0) or ((((_la - 95)) & ~0x3f) == 0 and ((1 << (_la - 95)) & ((1 << (SolidityParser.T__94 - 95)) | (1 << (SolidityParser.LeaveKeyword - 95)) | (1 << (SolidityParser.PayableKeyword - 95)) | (1 << (SolidityParser.GlobalKeyword - 95)) | (1 << (SolidityParser.ConstructorKeyword - 95)) | (1 << (SolidityParser.ReceiveKeyword - 95)) | (1 << (SolidityParser.Identifier - 95)))) != 0): + if ( + ((_la) & ~0x3F) == 0 + and ( + (1 << _la) + & ( + (1 << SolidityParser.T__13) + | (1 << SolidityParser.T__24) + | (1 << SolidityParser.T__43) + | (1 << SolidityParser.T__49) + | (1 << SolidityParser.T__61) + ) + ) + != 0 + ) or ( + (((_la - 95)) & ~0x3F) == 0 + and ( + (1 << (_la - 95)) + & ( + (1 << (SolidityParser.T__94 - 95)) + | (1 << (SolidityParser.LeaveKeyword - 95)) + | (1 << (SolidityParser.PayableKeyword - 95)) + | (1 << (SolidityParser.GlobalKeyword - 95)) + | (1 << (SolidityParser.ConstructorKeyword - 95)) + | (1 << (SolidityParser.ReceiveKeyword - 95)) + | (1 << (SolidityParser.Identifier - 95)) + ) + ) + != 0 + ): self.state = 550 self.identifier() - except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -3821,45 +4594,46 @@ def eventParameter(self): self.exitRule() return localctx - class FunctionTypeParameterListContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser - def functionTypeParameter(self, i:int=None): + def functionTypeParameter(self, i: int = None): if i is None: - return self.getTypedRuleContexts(SolidityParser.FunctionTypeParameterContext) + return self.getTypedRuleContexts( + SolidityParser.FunctionTypeParameterContext + ) else: - return self.getTypedRuleContext(SolidityParser.FunctionTypeParameterContext,i) - + return self.getTypedRuleContext( + SolidityParser.FunctionTypeParameterContext, i + ) def getRuleIndex(self): return SolidityParser.RULE_functionTypeParameterList - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterFunctionTypeParameterList" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterFunctionTypeParameterList"): listener.enterFunctionTypeParameterList(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitFunctionTypeParameterList" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitFunctionTypeParameterList"): listener.exitFunctionTypeParameterList(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitFunctionTypeParameterList" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitFunctionTypeParameterList"): return visitor.visitFunctionTypeParameterList(self) else: return visitor.visitChildren(self) - - - def functionTypeParameterList(self): - - localctx = SolidityParser.FunctionTypeParameterListContext(self, self._ctx, self.state) + localctx = SolidityParser.FunctionTypeParameterListContext( + self, self._ctx, self.state + ) self.enterRule(localctx, 70, self.RULE_functionTypeParameterList) - self._la = 0 # Token type + self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) self.state = 553 @@ -3867,13 +4641,52 @@ def functionTypeParameterList(self): self.state = 562 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 14)) & ~0x3f) == 0 and ((1 << (_la - 14)) & ((1 << (SolidityParser.T__13 - 14)) | (1 << (SolidityParser.T__24 - 14)) | (1 << (SolidityParser.T__37 - 14)) | (1 << (SolidityParser.T__43 - 14)) | (1 << (SolidityParser.T__45 - 14)) | (1 << (SolidityParser.T__49 - 14)) | (1 << (SolidityParser.T__61 - 14)) | (1 << (SolidityParser.T__62 - 14)) | (1 << (SolidityParser.T__63 - 14)) | (1 << (SolidityParser.T__64 - 14)) | (1 << (SolidityParser.T__65 - 14)))) != 0) or ((((_la - 95)) & ~0x3f) == 0 and ((1 << (_la - 95)) & ((1 << (SolidityParser.T__94 - 95)) | (1 << (SolidityParser.Int - 95)) | (1 << (SolidityParser.Uint - 95)) | (1 << (SolidityParser.Byte - 95)) | (1 << (SolidityParser.Fixed - 95)) | (1 << (SolidityParser.Ufixed - 95)) | (1 << (SolidityParser.LeaveKeyword - 95)) | (1 << (SolidityParser.PayableKeyword - 95)) | (1 << (SolidityParser.GlobalKeyword - 95)) | (1 << (SolidityParser.ConstructorKeyword - 95)) | (1 << (SolidityParser.ReceiveKeyword - 95)) | (1 << (SolidityParser.Identifier - 95)))) != 0): + if ( + (((_la - 14)) & ~0x3F) == 0 + and ( + (1 << (_la - 14)) + & ( + (1 << (SolidityParser.T__13 - 14)) + | (1 << (SolidityParser.T__24 - 14)) + | (1 << (SolidityParser.T__37 - 14)) + | (1 << (SolidityParser.T__43 - 14)) + | (1 << (SolidityParser.T__45 - 14)) + | (1 << (SolidityParser.T__49 - 14)) + | (1 << (SolidityParser.T__61 - 14)) + | (1 << (SolidityParser.T__62 - 14)) + | (1 << (SolidityParser.T__63 - 14)) + | (1 << (SolidityParser.T__64 - 14)) + | (1 << (SolidityParser.T__65 - 14)) + ) + ) + != 0 + ) or ( + (((_la - 95)) & ~0x3F) == 0 + and ( + (1 << (_la - 95)) + & ( + (1 << (SolidityParser.T__94 - 95)) + | (1 << (SolidityParser.Int - 95)) + | (1 << (SolidityParser.Uint - 95)) + | (1 << (SolidityParser.Byte - 95)) + | (1 << (SolidityParser.Fixed - 95)) + | (1 << (SolidityParser.Ufixed - 95)) + | (1 << (SolidityParser.LeaveKeyword - 95)) + | (1 << (SolidityParser.PayableKeyword - 95)) + | (1 << (SolidityParser.GlobalKeyword - 95)) + | (1 << (SolidityParser.ConstructorKeyword - 95)) + | (1 << (SolidityParser.ReceiveKeyword - 95)) + | (1 << (SolidityParser.Identifier - 95)) + ) + ) + != 0 + ): self.state = 554 self.functionTypeParameter() self.state = 559 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==SolidityParser.T__15: + while _la == SolidityParser.T__15: self.state = 555 self.match(SolidityParser.T__15) self.state = 556 @@ -3882,8 +4695,6 @@ def functionTypeParameterList(self): self._errHandler.sync(self) _la = self._input.LA(1) - - self.state = 564 self.match(SolidityParser.T__23) except RecognitionException as re: @@ -3894,46 +4705,42 @@ def functionTypeParameterList(self): self.exitRule() return localctx - class FunctionTypeParameterContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser def typeName(self): - return self.getTypedRuleContext(SolidityParser.TypeNameContext,0) - + return self.getTypedRuleContext(SolidityParser.TypeNameContext, 0) def storageLocation(self): - return self.getTypedRuleContext(SolidityParser.StorageLocationContext,0) - + return self.getTypedRuleContext(SolidityParser.StorageLocationContext, 0) def getRuleIndex(self): return SolidityParser.RULE_functionTypeParameter - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterFunctionTypeParameter" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterFunctionTypeParameter"): listener.enterFunctionTypeParameter(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitFunctionTypeParameter" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitFunctionTypeParameter"): listener.exitFunctionTypeParameter(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitFunctionTypeParameter" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitFunctionTypeParameter"): return visitor.visitFunctionTypeParameter(self) else: return visitor.visitChildren(self) - - - def functionTypeParameter(self): - - localctx = SolidityParser.FunctionTypeParameterContext(self, self._ctx, self.state) + localctx = SolidityParser.FunctionTypeParameterContext( + self, self._ctx, self.state + ) self.enterRule(localctx, 72, self.RULE_functionTypeParameter) - self._la = 0 # Token type + self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) self.state = 566 @@ -3941,11 +4748,17 @@ def functionTypeParameter(self): self.state = 568 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__47) | (1 << SolidityParser.T__48) | (1 << SolidityParser.T__49))) != 0): + if ((_la) & ~0x3F) == 0 and ( + (1 << _la) + & ( + (1 << SolidityParser.T__47) + | (1 << SolidityParser.T__48) + | (1 << SolidityParser.T__49) + ) + ) != 0: self.state = 567 self.storageLocation() - except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -3954,48 +4767,43 @@ def functionTypeParameter(self): self.exitRule() return localctx - class VariableDeclarationContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser def typeName(self): - return self.getTypedRuleContext(SolidityParser.TypeNameContext,0) - + return self.getTypedRuleContext(SolidityParser.TypeNameContext, 0) def identifier(self): - return self.getTypedRuleContext(SolidityParser.IdentifierContext,0) - + return self.getTypedRuleContext(SolidityParser.IdentifierContext, 0) def storageLocation(self): - return self.getTypedRuleContext(SolidityParser.StorageLocationContext,0) - + return self.getTypedRuleContext(SolidityParser.StorageLocationContext, 0) def getRuleIndex(self): return SolidityParser.RULE_variableDeclaration - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterVariableDeclaration" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterVariableDeclaration"): listener.enterVariableDeclaration(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitVariableDeclaration" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitVariableDeclaration"): listener.exitVariableDeclaration(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitVariableDeclaration" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitVariableDeclaration"): return visitor.visitVariableDeclaration(self) else: return visitor.visitChildren(self) - - - def variableDeclaration(self): - - localctx = SolidityParser.VariableDeclarationContext(self, self._ctx, self.state) + localctx = SolidityParser.VariableDeclarationContext( + self, self._ctx, self.state + ) self.enterRule(localctx, 74, self.RULE_variableDeclaration) try: self.enterOuterAlt(localctx, 1) @@ -4003,12 +4811,11 @@ def variableDeclaration(self): self.typeName(0) self.state = 572 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,57,self._ctx) + la_ = self._interp.adaptivePredict(self._input, 57, self._ctx) if la_ == 1: self.state = 571 self.storageLocation() - self.state = 574 self.identifier() except RecognitionException as re: @@ -4019,72 +4826,66 @@ def variableDeclaration(self): self.exitRule() return localctx - class TypeNameContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser def elementaryTypeName(self): - return self.getTypedRuleContext(SolidityParser.ElementaryTypeNameContext,0) - + return self.getTypedRuleContext(SolidityParser.ElementaryTypeNameContext, 0) def userDefinedTypeName(self): - return self.getTypedRuleContext(SolidityParser.UserDefinedTypeNameContext,0) - + return self.getTypedRuleContext( + SolidityParser.UserDefinedTypeNameContext, 0 + ) def mapping(self): - return self.getTypedRuleContext(SolidityParser.MappingContext,0) - + return self.getTypedRuleContext(SolidityParser.MappingContext, 0) def functionTypeName(self): - return self.getTypedRuleContext(SolidityParser.FunctionTypeNameContext,0) - + return self.getTypedRuleContext(SolidityParser.FunctionTypeNameContext, 0) def PayableKeyword(self): return self.getToken(SolidityParser.PayableKeyword, 0) def typeName(self): - return self.getTypedRuleContext(SolidityParser.TypeNameContext,0) - + return self.getTypedRuleContext(SolidityParser.TypeNameContext, 0) def expression(self): - return self.getTypedRuleContext(SolidityParser.ExpressionContext,0) - + return self.getTypedRuleContext(SolidityParser.ExpressionContext, 0) def getRuleIndex(self): return SolidityParser.RULE_typeName - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterTypeName" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterTypeName"): listener.enterTypeName(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitTypeName" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitTypeName"): listener.exitTypeName(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitTypeName" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitTypeName"): return visitor.visitTypeName(self) else: return visitor.visitChildren(self) - - - def typeName(self, _p:int=0): + def typeName(self, _p: int = 0): _parentctx = self._ctx _parentState = self.state localctx = SolidityParser.TypeNameContext(self, self._ctx, _parentState) _prevctx = localctx _startState = 76 self.enterRecursionRule(localctx, 76, self.RULE_typeName, _p) - self._la = 0 # Token type + self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) self.state = 583 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,58,self._ctx) + la_ = self._interp.adaptivePredict(self._input, 58, self._ctx) if la_ == 1: self.state = 577 self.elementaryTypeName() @@ -4112,37 +4913,97 @@ def typeName(self, _p:int=0): self.match(SolidityParser.PayableKeyword) pass - self._ctx.stop = self._input.LT(-1) self.state = 593 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,60,self._ctx) - while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: - if _alt==1: + _alt = self._interp.adaptivePredict(self._input, 60, self._ctx) + while _alt != 2 and _alt != ATN.INVALID_ALT_NUMBER: + if _alt == 1: if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - localctx = SolidityParser.TypeNameContext(self, _parentctx, _parentState) - self.pushNewRecursionContext(localctx, _startState, self.RULE_typeName) + localctx = SolidityParser.TypeNameContext( + self, _parentctx, _parentState + ) + self.pushNewRecursionContext( + localctx, _startState, self.RULE_typeName + ) self.state = 585 if not self.precpred(self._ctx, 3): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") + + raise FailedPredicateException( + self, "self.precpred(self._ctx, 3)" + ) self.state = 586 self.match(SolidityParser.T__41) self.state = 588 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 6)) & ~0x3f) == 0 and ((1 << (_la - 6)) & ((1 << (SolidityParser.T__5 - 6)) | (1 << (SolidityParser.T__13 - 6)) | (1 << (SolidityParser.T__22 - 6)) | (1 << (SolidityParser.T__24 - 6)) | (1 << (SolidityParser.T__29 - 6)) | (1 << (SolidityParser.T__30 - 6)) | (1 << (SolidityParser.T__37 - 6)) | (1 << (SolidityParser.T__41 - 6)) | (1 << (SolidityParser.T__43 - 6)) | (1 << (SolidityParser.T__45 - 6)) | (1 << (SolidityParser.T__49 - 6)) | (1 << (SolidityParser.T__61 - 6)) | (1 << (SolidityParser.T__62 - 6)) | (1 << (SolidityParser.T__63 - 6)) | (1 << (SolidityParser.T__64 - 6)) | (1 << (SolidityParser.T__65 - 6)) | (1 << (SolidityParser.T__66 - 6)) | (1 << (SolidityParser.T__67 - 6)) | (1 << (SolidityParser.T__68 - 6)))) != 0) or ((((_la - 71)) & ~0x3f) == 0 and ((1 << (_la - 71)) & ((1 << (SolidityParser.T__70 - 71)) | (1 << (SolidityParser.T__71 - 71)) | (1 << (SolidityParser.T__94 - 71)) | (1 << (SolidityParser.Int - 71)) | (1 << (SolidityParser.Uint - 71)) | (1 << (SolidityParser.Byte - 71)) | (1 << (SolidityParser.Fixed - 71)) | (1 << (SolidityParser.Ufixed - 71)) | (1 << (SolidityParser.BooleanLiteral - 71)) | (1 << (SolidityParser.DecimalNumber - 71)) | (1 << (SolidityParser.HexNumber - 71)) | (1 << (SolidityParser.HexLiteralFragment - 71)) | (1 << (SolidityParser.LeaveKeyword - 71)) | (1 << (SolidityParser.PayableKeyword - 71)) | (1 << (SolidityParser.TypeKeyword - 71)) | (1 << (SolidityParser.GlobalKeyword - 71)) | (1 << (SolidityParser.ConstructorKeyword - 71)) | (1 << (SolidityParser.ReceiveKeyword - 71)) | (1 << (SolidityParser.Identifier - 71)) | (1 << (SolidityParser.StringLiteralFragment - 71)))) != 0): + if ( + (((_la - 6)) & ~0x3F) == 0 + and ( + (1 << (_la - 6)) + & ( + (1 << (SolidityParser.T__5 - 6)) + | (1 << (SolidityParser.T__13 - 6)) + | (1 << (SolidityParser.T__22 - 6)) + | (1 << (SolidityParser.T__24 - 6)) + | (1 << (SolidityParser.T__29 - 6)) + | (1 << (SolidityParser.T__30 - 6)) + | (1 << (SolidityParser.T__37 - 6)) + | (1 << (SolidityParser.T__41 - 6)) + | (1 << (SolidityParser.T__43 - 6)) + | (1 << (SolidityParser.T__45 - 6)) + | (1 << (SolidityParser.T__49 - 6)) + | (1 << (SolidityParser.T__61 - 6)) + | (1 << (SolidityParser.T__62 - 6)) + | (1 << (SolidityParser.T__63 - 6)) + | (1 << (SolidityParser.T__64 - 6)) + | (1 << (SolidityParser.T__65 - 6)) + | (1 << (SolidityParser.T__66 - 6)) + | (1 << (SolidityParser.T__67 - 6)) + | (1 << (SolidityParser.T__68 - 6)) + ) + ) + != 0 + ) or ( + (((_la - 71)) & ~0x3F) == 0 + and ( + (1 << (_la - 71)) + & ( + (1 << (SolidityParser.T__70 - 71)) + | (1 << (SolidityParser.T__71 - 71)) + | (1 << (SolidityParser.T__94 - 71)) + | (1 << (SolidityParser.Int - 71)) + | (1 << (SolidityParser.Uint - 71)) + | (1 << (SolidityParser.Byte - 71)) + | (1 << (SolidityParser.Fixed - 71)) + | (1 << (SolidityParser.Ufixed - 71)) + | (1 << (SolidityParser.BooleanLiteral - 71)) + | (1 << (SolidityParser.DecimalNumber - 71)) + | (1 << (SolidityParser.HexNumber - 71)) + | (1 << (SolidityParser.HexLiteralFragment - 71)) + | (1 << (SolidityParser.LeaveKeyword - 71)) + | (1 << (SolidityParser.PayableKeyword - 71)) + | (1 << (SolidityParser.TypeKeyword - 71)) + | (1 << (SolidityParser.GlobalKeyword - 71)) + | (1 << (SolidityParser.ConstructorKeyword - 71)) + | (1 << (SolidityParser.ReceiveKeyword - 71)) + | (1 << (SolidityParser.Identifier - 71)) + | (1 << (SolidityParser.StringLiteralFragment - 71)) + ) + ) + != 0 + ): self.state = 587 self.expression(0) - self.state = 590 - self.match(SolidityParser.T__42) + self.match(SolidityParser.T__42) self.state = 595 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,60,self._ctx) + _alt = self._interp.adaptivePredict(self._input, 60, self._ctx) except RecognitionException as re: localctx.exception = re @@ -4152,43 +5013,40 @@ def typeName(self, _p:int=0): self.unrollRecursionContexts(_parentctx) return localctx - class UserDefinedTypeNameContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser - def identifier(self, i:int=None): + def identifier(self, i: int = None): if i is None: return self.getTypedRuleContexts(SolidityParser.IdentifierContext) else: - return self.getTypedRuleContext(SolidityParser.IdentifierContext,i) - + return self.getTypedRuleContext(SolidityParser.IdentifierContext, i) def getRuleIndex(self): return SolidityParser.RULE_userDefinedTypeName - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterUserDefinedTypeName" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterUserDefinedTypeName"): listener.enterUserDefinedTypeName(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitUserDefinedTypeName" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitUserDefinedTypeName"): listener.exitUserDefinedTypeName(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitUserDefinedTypeName" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitUserDefinedTypeName"): return visitor.visitUserDefinedTypeName(self) else: return visitor.visitChildren(self) - - - def userDefinedTypeName(self): - - localctx = SolidityParser.UserDefinedTypeNameContext(self, self._ctx, self.state) + localctx = SolidityParser.UserDefinedTypeNameContext( + self, self._ctx, self.state + ) self.enterRule(localctx, 78, self.RULE_userDefinedTypeName) try: self.enterOuterAlt(localctx, 1) @@ -4196,16 +5054,16 @@ def userDefinedTypeName(self): self.identifier() self.state = 601 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,61,self._ctx) - while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: - if _alt==1: + _alt = self._interp.adaptivePredict(self._input, 61, self._ctx) + while _alt != 2 and _alt != ATN.INVALID_ALT_NUMBER: + if _alt == 1: self.state = 597 self.match(SolidityParser.T__44) self.state = 598 - self.identifier() + self.identifier() self.state = 603 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,61,self._ctx) + _alt = self._interp.adaptivePredict(self._input, 61, self._ctx) except RecognitionException as re: localctx.exception = re @@ -4215,49 +5073,45 @@ def userDefinedTypeName(self): self.exitRule() return localctx - class MappingKeyContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser def elementaryTypeName(self): - return self.getTypedRuleContext(SolidityParser.ElementaryTypeNameContext,0) - + return self.getTypedRuleContext(SolidityParser.ElementaryTypeNameContext, 0) def userDefinedTypeName(self): - return self.getTypedRuleContext(SolidityParser.UserDefinedTypeNameContext,0) - + return self.getTypedRuleContext( + SolidityParser.UserDefinedTypeNameContext, 0 + ) def getRuleIndex(self): return SolidityParser.RULE_mappingKey - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterMappingKey" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterMappingKey"): listener.enterMappingKey(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitMappingKey" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitMappingKey"): listener.exitMappingKey(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitMappingKey" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitMappingKey"): return visitor.visitMappingKey(self) else: return visitor.visitChildren(self) - - - def mappingKey(self): - localctx = SolidityParser.MappingKeyContext(self, self._ctx, self.state) self.enterRule(localctx, 80, self.RULE_mappingKey) try: self.state = 606 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,62,self._ctx) + la_ = self._interp.adaptivePredict(self._input, 62, self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) self.state = 604 @@ -4270,7 +5124,6 @@ def mappingKey(self): self.userDefinedTypeName() pass - except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -4279,54 +5132,46 @@ def mappingKey(self): self.exitRule() return localctx - class MappingContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser def mappingKey(self): - return self.getTypedRuleContext(SolidityParser.MappingKeyContext,0) - + return self.getTypedRuleContext(SolidityParser.MappingKeyContext, 0) def typeName(self): - return self.getTypedRuleContext(SolidityParser.TypeNameContext,0) - + return self.getTypedRuleContext(SolidityParser.TypeNameContext, 0) def mappingKeyName(self): - return self.getTypedRuleContext(SolidityParser.MappingKeyNameContext,0) - + return self.getTypedRuleContext(SolidityParser.MappingKeyNameContext, 0) def mappingValueName(self): - return self.getTypedRuleContext(SolidityParser.MappingValueNameContext,0) - + return self.getTypedRuleContext(SolidityParser.MappingValueNameContext, 0) def getRuleIndex(self): return SolidityParser.RULE_mapping - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterMapping" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterMapping"): listener.enterMapping(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitMapping" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitMapping"): listener.exitMapping(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitMapping" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitMapping"): return visitor.visitMapping(self) else: return visitor.visitChildren(self) - - - def mapping(self): - localctx = SolidityParser.MappingContext(self, self._ctx, self.state) self.enterRule(localctx, 82, self.RULE_mapping) - self._la = 0 # Token type + self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) self.state = 608 @@ -4338,11 +5183,38 @@ def mapping(self): self.state = 612 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__43) | (1 << SolidityParser.T__49) | (1 << SolidityParser.T__61))) != 0) or ((((_la - 95)) & ~0x3f) == 0 and ((1 << (_la - 95)) & ((1 << (SolidityParser.T__94 - 95)) | (1 << (SolidityParser.LeaveKeyword - 95)) | (1 << (SolidityParser.PayableKeyword - 95)) | (1 << (SolidityParser.GlobalKeyword - 95)) | (1 << (SolidityParser.ConstructorKeyword - 95)) | (1 << (SolidityParser.ReceiveKeyword - 95)) | (1 << (SolidityParser.Identifier - 95)))) != 0): + if ( + ((_la) & ~0x3F) == 0 + and ( + (1 << _la) + & ( + (1 << SolidityParser.T__13) + | (1 << SolidityParser.T__24) + | (1 << SolidityParser.T__43) + | (1 << SolidityParser.T__49) + | (1 << SolidityParser.T__61) + ) + ) + != 0 + ) or ( + (((_la - 95)) & ~0x3F) == 0 + and ( + (1 << (_la - 95)) + & ( + (1 << (SolidityParser.T__94 - 95)) + | (1 << (SolidityParser.LeaveKeyword - 95)) + | (1 << (SolidityParser.PayableKeyword - 95)) + | (1 << (SolidityParser.GlobalKeyword - 95)) + | (1 << (SolidityParser.ConstructorKeyword - 95)) + | (1 << (SolidityParser.ReceiveKeyword - 95)) + | (1 << (SolidityParser.Identifier - 95)) + ) + ) + != 0 + ): self.state = 611 self.mappingKeyName() - self.state = 614 self.match(SolidityParser.T__46) self.state = 615 @@ -4350,11 +5222,38 @@ def mapping(self): self.state = 617 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__43) | (1 << SolidityParser.T__49) | (1 << SolidityParser.T__61))) != 0) or ((((_la - 95)) & ~0x3f) == 0 and ((1 << (_la - 95)) & ((1 << (SolidityParser.T__94 - 95)) | (1 << (SolidityParser.LeaveKeyword - 95)) | (1 << (SolidityParser.PayableKeyword - 95)) | (1 << (SolidityParser.GlobalKeyword - 95)) | (1 << (SolidityParser.ConstructorKeyword - 95)) | (1 << (SolidityParser.ReceiveKeyword - 95)) | (1 << (SolidityParser.Identifier - 95)))) != 0): + if ( + ((_la) & ~0x3F) == 0 + and ( + (1 << _la) + & ( + (1 << SolidityParser.T__13) + | (1 << SolidityParser.T__24) + | (1 << SolidityParser.T__43) + | (1 << SolidityParser.T__49) + | (1 << SolidityParser.T__61) + ) + ) + != 0 + ) or ( + (((_la - 95)) & ~0x3F) == 0 + and ( + (1 << (_la - 95)) + & ( + (1 << (SolidityParser.T__94 - 95)) + | (1 << (SolidityParser.LeaveKeyword - 95)) + | (1 << (SolidityParser.PayableKeyword - 95)) + | (1 << (SolidityParser.GlobalKeyword - 95)) + | (1 << (SolidityParser.ConstructorKeyword - 95)) + | (1 << (SolidityParser.ReceiveKeyword - 95)) + | (1 << (SolidityParser.Identifier - 95)) + ) + ) + != 0 + ): self.state = 616 self.mappingValueName() - self.state = 619 self.match(SolidityParser.T__23) except RecognitionException as re: @@ -4365,39 +5264,34 @@ def mapping(self): self.exitRule() return localctx - class MappingKeyNameContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser def identifier(self): - return self.getTypedRuleContext(SolidityParser.IdentifierContext,0) - + return self.getTypedRuleContext(SolidityParser.IdentifierContext, 0) def getRuleIndex(self): return SolidityParser.RULE_mappingKeyName - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterMappingKeyName" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterMappingKeyName"): listener.enterMappingKeyName(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitMappingKeyName" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitMappingKeyName"): listener.exitMappingKeyName(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitMappingKeyName" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitMappingKeyName"): return visitor.visitMappingKeyName(self) else: return visitor.visitChildren(self) - - - def mappingKeyName(self): - localctx = SolidityParser.MappingKeyNameContext(self, self._ctx, self.state) self.enterRule(localctx, 84, self.RULE_mappingKeyName) try: @@ -4412,39 +5306,34 @@ def mappingKeyName(self): self.exitRule() return localctx - class MappingValueNameContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser def identifier(self): - return self.getTypedRuleContext(SolidityParser.IdentifierContext,0) - + return self.getTypedRuleContext(SolidityParser.IdentifierContext, 0) def getRuleIndex(self): return SolidityParser.RULE_mappingValueName - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterMappingValueName" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterMappingValueName"): listener.enterMappingValueName(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitMappingValueName" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitMappingValueName"): listener.exitMappingValueName(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitMappingValueName" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitMappingValueName"): return visitor.visitMappingValueName(self) else: return visitor.visitChildren(self) - - - def mappingValueName(self): - localctx = SolidityParser.MappingValueNameContext(self, self._ctx, self.state) self.enterRule(localctx, 86, self.RULE_mappingValueName) try: @@ -4459,61 +5348,61 @@ def mappingValueName(self): self.exitRule() return localctx - class FunctionTypeNameContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser - def functionTypeParameterList(self, i:int=None): + def functionTypeParameterList(self, i: int = None): if i is None: - return self.getTypedRuleContexts(SolidityParser.FunctionTypeParameterListContext) + return self.getTypedRuleContexts( + SolidityParser.FunctionTypeParameterListContext + ) else: - return self.getTypedRuleContext(SolidityParser.FunctionTypeParameterListContext,i) - + return self.getTypedRuleContext( + SolidityParser.FunctionTypeParameterListContext, i + ) - def InternalKeyword(self, i:int=None): + def InternalKeyword(self, i: int = None): if i is None: return self.getTokens(SolidityParser.InternalKeyword) else: return self.getToken(SolidityParser.InternalKeyword, i) - def ExternalKeyword(self, i:int=None): + def ExternalKeyword(self, i: int = None): if i is None: return self.getTokens(SolidityParser.ExternalKeyword) else: return self.getToken(SolidityParser.ExternalKeyword, i) - def stateMutability(self, i:int=None): + def stateMutability(self, i: int = None): if i is None: return self.getTypedRuleContexts(SolidityParser.StateMutabilityContext) else: - return self.getTypedRuleContext(SolidityParser.StateMutabilityContext,i) - + return self.getTypedRuleContext( + SolidityParser.StateMutabilityContext, i + ) def getRuleIndex(self): return SolidityParser.RULE_functionTypeName - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterFunctionTypeName" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterFunctionTypeName"): listener.enterFunctionTypeName(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitFunctionTypeName" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitFunctionTypeName"): listener.exitFunctionTypeName(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitFunctionTypeName" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitFunctionTypeName"): return visitor.visitFunctionTypeName(self) else: return visitor.visitChildren(self) - - - def functionTypeName(self): - localctx = SolidityParser.FunctionTypeNameContext(self, self._ctx, self.state) self.enterRule(localctx, 88, self.RULE_functionTypeName) try: @@ -4524,9 +5413,9 @@ def functionTypeName(self): self.functionTypeParameterList() self.state = 632 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,66,self._ctx) - while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: - if _alt==1: + _alt = self._interp.adaptivePredict(self._input, 66, self._ctx) + while _alt != 2 and _alt != ATN.INVALID_ALT_NUMBER: + if _alt == 1: self.state = 630 self._errHandler.sync(self) token = self._input.LA(1) @@ -4538,27 +5427,31 @@ def functionTypeName(self): self.state = 628 self.match(SolidityParser.ExternalKeyword) pass - elif token in [SolidityParser.ConstantKeyword, SolidityParser.PayableKeyword, SolidityParser.PureKeyword, SolidityParser.ViewKeyword]: + elif token in [ + SolidityParser.ConstantKeyword, + SolidityParser.PayableKeyword, + SolidityParser.PureKeyword, + SolidityParser.ViewKeyword, + ]: self.state = 629 self.stateMutability() pass else: raise NoViableAltException(self) - + self.state = 634 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,66,self._ctx) + _alt = self._interp.adaptivePredict(self._input, 66, self._ctx) self.state = 637 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,67,self._ctx) + la_ = self._interp.adaptivePredict(self._input, 67, self._ctx) if la_ == 1: self.state = 635 self.match(SolidityParser.T__38) self.state = 636 self.functionTypeParameterList() - except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -4567,44 +5460,52 @@ def functionTypeName(self): self.exitRule() return localctx - class StorageLocationContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser - def getRuleIndex(self): return SolidityParser.RULE_storageLocation - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterStorageLocation" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterStorageLocation"): listener.enterStorageLocation(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitStorageLocation" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitStorageLocation"): listener.exitStorageLocation(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitStorageLocation" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitStorageLocation"): return visitor.visitStorageLocation(self) else: return visitor.visitChildren(self) - - - def storageLocation(self): - localctx = SolidityParser.StorageLocationContext(self, self._ctx, self.state) self.enterRule(localctx, 90, self.RULE_storageLocation) - self._la = 0 # Token type + self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) self.state = 639 _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__47) | (1 << SolidityParser.T__48) | (1 << SolidityParser.T__49))) != 0)): + if not ( + ( + ((_la) & ~0x3F) == 0 + and ( + (1 << _la) + & ( + (1 << SolidityParser.T__47) + | (1 << SolidityParser.T__48) + | (1 << SolidityParser.T__49) + ) + ) + != 0 + ) + ): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -4617,10 +5518,10 @@ def storageLocation(self): self.exitRule() return localctx - class StateMutabilityContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser @@ -4639,33 +5540,43 @@ def PayableKeyword(self): def getRuleIndex(self): return SolidityParser.RULE_stateMutability - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterStateMutability" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterStateMutability"): listener.enterStateMutability(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitStateMutability" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitStateMutability"): listener.exitStateMutability(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitStateMutability" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitStateMutability"): return visitor.visitStateMutability(self) else: return visitor.visitChildren(self) - - - def stateMutability(self): - localctx = SolidityParser.StateMutabilityContext(self, self._ctx, self.state) self.enterRule(localctx, 92, self.RULE_stateMutability) - self._la = 0 # Token type + self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) self.state = 641 _la = self._input.LA(1) - if not(((((_la - 110)) & ~0x3f) == 0 and ((1 << (_la - 110)) & ((1 << (SolidityParser.ConstantKeyword - 110)) | (1 << (SolidityParser.PayableKeyword - 110)) | (1 << (SolidityParser.PureKeyword - 110)) | (1 << (SolidityParser.ViewKeyword - 110)))) != 0)): + if not ( + ( + (((_la - 110)) & ~0x3F) == 0 + and ( + (1 << (_la - 110)) + & ( + (1 << (SolidityParser.ConstantKeyword - 110)) + | (1 << (SolidityParser.PayableKeyword - 110)) + | (1 << (SolidityParser.PureKeyword - 110)) + | (1 << (SolidityParser.ViewKeyword - 110)) + ) + ) + != 0 + ) + ): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -4678,45 +5589,40 @@ def stateMutability(self): self.exitRule() return localctx - class BlockContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser - def statement(self, i:int=None): + def statement(self, i: int = None): if i is None: return self.getTypedRuleContexts(SolidityParser.StatementContext) else: - return self.getTypedRuleContext(SolidityParser.StatementContext,i) - + return self.getTypedRuleContext(SolidityParser.StatementContext, i) def getRuleIndex(self): return SolidityParser.RULE_block - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterBlock" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterBlock"): listener.enterBlock(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitBlock" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitBlock"): listener.exitBlock(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitBlock" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitBlock"): return visitor.visitBlock(self) else: return visitor.visitChildren(self) - - - def block(self): - localctx = SolidityParser.BlockContext(self, self._ctx, self.state) self.enterRule(localctx, 94, self.RULE_block) - self._la = 0 # Token type + self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) self.state = 643 @@ -4724,7 +5630,75 @@ def block(self): self.state = 647 self._errHandler.sync(self) _la = self._input.LA(1) - while ((((_la - 6)) & ~0x3f) == 0 and ((1 << (_la - 6)) & ((1 << (SolidityParser.T__5 - 6)) | (1 << (SolidityParser.T__13 - 6)) | (1 << (SolidityParser.T__14 - 6)) | (1 << (SolidityParser.T__22 - 6)) | (1 << (SolidityParser.T__24 - 6)) | (1 << (SolidityParser.T__26 - 6)) | (1 << (SolidityParser.T__29 - 6)) | (1 << (SolidityParser.T__30 - 6)) | (1 << (SolidityParser.T__37 - 6)) | (1 << (SolidityParser.T__41 - 6)) | (1 << (SolidityParser.T__43 - 6)) | (1 << (SolidityParser.T__45 - 6)) | (1 << (SolidityParser.T__49 - 6)) | (1 << (SolidityParser.T__50 - 6)) | (1 << (SolidityParser.T__52 - 6)) | (1 << (SolidityParser.T__54 - 6)) | (1 << (SolidityParser.T__55 - 6)) | (1 << (SolidityParser.T__56 - 6)) | (1 << (SolidityParser.T__57 - 6)) | (1 << (SolidityParser.T__58 - 6)) | (1 << (SolidityParser.T__59 - 6)) | (1 << (SolidityParser.T__60 - 6)) | (1 << (SolidityParser.T__61 - 6)) | (1 << (SolidityParser.T__62 - 6)) | (1 << (SolidityParser.T__63 - 6)) | (1 << (SolidityParser.T__64 - 6)) | (1 << (SolidityParser.T__65 - 6)) | (1 << (SolidityParser.T__66 - 6)) | (1 << (SolidityParser.T__67 - 6)) | (1 << (SolidityParser.T__68 - 6)))) != 0) or ((((_la - 71)) & ~0x3f) == 0 and ((1 << (_la - 71)) & ((1 << (SolidityParser.T__70 - 71)) | (1 << (SolidityParser.T__71 - 71)) | (1 << (SolidityParser.T__94 - 71)) | (1 << (SolidityParser.Int - 71)) | (1 << (SolidityParser.Uint - 71)) | (1 << (SolidityParser.Byte - 71)) | (1 << (SolidityParser.Fixed - 71)) | (1 << (SolidityParser.Ufixed - 71)) | (1 << (SolidityParser.BooleanLiteral - 71)) | (1 << (SolidityParser.DecimalNumber - 71)) | (1 << (SolidityParser.HexNumber - 71)) | (1 << (SolidityParser.HexLiteralFragment - 71)) | (1 << (SolidityParser.BreakKeyword - 71)) | (1 << (SolidityParser.ContinueKeyword - 71)) | (1 << (SolidityParser.LeaveKeyword - 71)) | (1 << (SolidityParser.PayableKeyword - 71)) | (1 << (SolidityParser.TypeKeyword - 71)) | (1 << (SolidityParser.GlobalKeyword - 71)) | (1 << (SolidityParser.ConstructorKeyword - 71)) | (1 << (SolidityParser.ReceiveKeyword - 71)) | (1 << (SolidityParser.Identifier - 71)) | (1 << (SolidityParser.StringLiteralFragment - 71)))) != 0): + while ( + (((_la - 6)) & ~0x3F) == 0 + and ( + (1 << (_la - 6)) + & ( + (1 << (SolidityParser.T__5 - 6)) + | (1 << (SolidityParser.T__13 - 6)) + | (1 << (SolidityParser.T__14 - 6)) + | (1 << (SolidityParser.T__22 - 6)) + | (1 << (SolidityParser.T__24 - 6)) + | (1 << (SolidityParser.T__26 - 6)) + | (1 << (SolidityParser.T__29 - 6)) + | (1 << (SolidityParser.T__30 - 6)) + | (1 << (SolidityParser.T__37 - 6)) + | (1 << (SolidityParser.T__41 - 6)) + | (1 << (SolidityParser.T__43 - 6)) + | (1 << (SolidityParser.T__45 - 6)) + | (1 << (SolidityParser.T__49 - 6)) + | (1 << (SolidityParser.T__50 - 6)) + | (1 << (SolidityParser.T__52 - 6)) + | (1 << (SolidityParser.T__54 - 6)) + | (1 << (SolidityParser.T__55 - 6)) + | (1 << (SolidityParser.T__56 - 6)) + | (1 << (SolidityParser.T__57 - 6)) + | (1 << (SolidityParser.T__58 - 6)) + | (1 << (SolidityParser.T__59 - 6)) + | (1 << (SolidityParser.T__60 - 6)) + | (1 << (SolidityParser.T__61 - 6)) + | (1 << (SolidityParser.T__62 - 6)) + | (1 << (SolidityParser.T__63 - 6)) + | (1 << (SolidityParser.T__64 - 6)) + | (1 << (SolidityParser.T__65 - 6)) + | (1 << (SolidityParser.T__66 - 6)) + | (1 << (SolidityParser.T__67 - 6)) + | (1 << (SolidityParser.T__68 - 6)) + ) + ) + != 0 + ) or ( + (((_la - 71)) & ~0x3F) == 0 + and ( + (1 << (_la - 71)) + & ( + (1 << (SolidityParser.T__70 - 71)) + | (1 << (SolidityParser.T__71 - 71)) + | (1 << (SolidityParser.T__94 - 71)) + | (1 << (SolidityParser.Int - 71)) + | (1 << (SolidityParser.Uint - 71)) + | (1 << (SolidityParser.Byte - 71)) + | (1 << (SolidityParser.Fixed - 71)) + | (1 << (SolidityParser.Ufixed - 71)) + | (1 << (SolidityParser.BooleanLiteral - 71)) + | (1 << (SolidityParser.DecimalNumber - 71)) + | (1 << (SolidityParser.HexNumber - 71)) + | (1 << (SolidityParser.HexLiteralFragment - 71)) + | (1 << (SolidityParser.BreakKeyword - 71)) + | (1 << (SolidityParser.ContinueKeyword - 71)) + | (1 << (SolidityParser.LeaveKeyword - 71)) + | (1 << (SolidityParser.PayableKeyword - 71)) + | (1 << (SolidityParser.TypeKeyword - 71)) + | (1 << (SolidityParser.GlobalKeyword - 71)) + | (1 << (SolidityParser.ConstructorKeyword - 71)) + | (1 << (SolidityParser.ReceiveKeyword - 71)) + | (1 << (SolidityParser.Identifier - 71)) + | (1 << (SolidityParser.StringLiteralFragment - 71)) + ) + ) + != 0 + ): self.state = 644 self.statement() self.state = 649 @@ -4741,101 +5715,84 @@ def block(self): self.exitRule() return localctx - class StatementContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser def ifStatement(self): - return self.getTypedRuleContext(SolidityParser.IfStatementContext,0) - + return self.getTypedRuleContext(SolidityParser.IfStatementContext, 0) def tryStatement(self): - return self.getTypedRuleContext(SolidityParser.TryStatementContext,0) - + return self.getTypedRuleContext(SolidityParser.TryStatementContext, 0) def whileStatement(self): - return self.getTypedRuleContext(SolidityParser.WhileStatementContext,0) - + return self.getTypedRuleContext(SolidityParser.WhileStatementContext, 0) def forStatement(self): - return self.getTypedRuleContext(SolidityParser.ForStatementContext,0) - + return self.getTypedRuleContext(SolidityParser.ForStatementContext, 0) def block(self): - return self.getTypedRuleContext(SolidityParser.BlockContext,0) - + return self.getTypedRuleContext(SolidityParser.BlockContext, 0) def inlineAssemblyStatement(self): - return self.getTypedRuleContext(SolidityParser.InlineAssemblyStatementContext,0) - + return self.getTypedRuleContext( + SolidityParser.InlineAssemblyStatementContext, 0 + ) def doWhileStatement(self): - return self.getTypedRuleContext(SolidityParser.DoWhileStatementContext,0) - + return self.getTypedRuleContext(SolidityParser.DoWhileStatementContext, 0) def continueStatement(self): - return self.getTypedRuleContext(SolidityParser.ContinueStatementContext,0) - + return self.getTypedRuleContext(SolidityParser.ContinueStatementContext, 0) def breakStatement(self): - return self.getTypedRuleContext(SolidityParser.BreakStatementContext,0) - + return self.getTypedRuleContext(SolidityParser.BreakStatementContext, 0) def returnStatement(self): - return self.getTypedRuleContext(SolidityParser.ReturnStatementContext,0) - + return self.getTypedRuleContext(SolidityParser.ReturnStatementContext, 0) def throwStatement(self): - return self.getTypedRuleContext(SolidityParser.ThrowStatementContext,0) - + return self.getTypedRuleContext(SolidityParser.ThrowStatementContext, 0) def emitStatement(self): - return self.getTypedRuleContext(SolidityParser.EmitStatementContext,0) - + return self.getTypedRuleContext(SolidityParser.EmitStatementContext, 0) def simpleStatement(self): - return self.getTypedRuleContext(SolidityParser.SimpleStatementContext,0) - + return self.getTypedRuleContext(SolidityParser.SimpleStatementContext, 0) def uncheckedStatement(self): - return self.getTypedRuleContext(SolidityParser.UncheckedStatementContext,0) - + return self.getTypedRuleContext(SolidityParser.UncheckedStatementContext, 0) def revertStatement(self): - return self.getTypedRuleContext(SolidityParser.RevertStatementContext,0) - + return self.getTypedRuleContext(SolidityParser.RevertStatementContext, 0) def getRuleIndex(self): return SolidityParser.RULE_statement - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterStatement" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterStatement"): listener.enterStatement(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitStatement" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitStatement"): listener.exitStatement(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitStatement" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitStatement"): return visitor.visitStatement(self) else: return visitor.visitChildren(self) - - - def statement(self): - localctx = SolidityParser.StatementContext(self, self._ctx, self.state) self.enterRule(localctx, 96, self.RULE_statement) try: self.state = 667 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,69,self._ctx) + la_ = self._interp.adaptivePredict(self._input, 69, self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) self.state = 652 @@ -4926,7 +5883,6 @@ def statement(self): self.revertStatement() pass - except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -4935,40 +5891,37 @@ def statement(self): self.exitRule() return localctx - class ExpressionStatementContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser def expression(self): - return self.getTypedRuleContext(SolidityParser.ExpressionContext,0) - + return self.getTypedRuleContext(SolidityParser.ExpressionContext, 0) def getRuleIndex(self): return SolidityParser.RULE_expressionStatement - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterExpressionStatement" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterExpressionStatement"): listener.enterExpressionStatement(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitExpressionStatement" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitExpressionStatement"): listener.exitExpressionStatement(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitExpressionStatement" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitExpressionStatement"): return visitor.visitExpressionStatement(self) else: return visitor.visitChildren(self) - - - def expressionStatement(self): - - localctx = SolidityParser.ExpressionStatementContext(self, self._ctx, self.state) + localctx = SolidityParser.ExpressionStatementContext( + self, self._ctx, self.state + ) self.enterRule(localctx, 98, self.RULE_expressionStatement) try: self.enterOuterAlt(localctx, 1) @@ -4984,46 +5937,40 @@ def expressionStatement(self): self.exitRule() return localctx - class IfStatementContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser def expression(self): - return self.getTypedRuleContext(SolidityParser.ExpressionContext,0) - + return self.getTypedRuleContext(SolidityParser.ExpressionContext, 0) - def statement(self, i:int=None): + def statement(self, i: int = None): if i is None: return self.getTypedRuleContexts(SolidityParser.StatementContext) else: - return self.getTypedRuleContext(SolidityParser.StatementContext,i) - + return self.getTypedRuleContext(SolidityParser.StatementContext, i) def getRuleIndex(self): return SolidityParser.RULE_ifStatement - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterIfStatement" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterIfStatement"): listener.enterIfStatement(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitIfStatement" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitIfStatement"): listener.exitIfStatement(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitIfStatement" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitIfStatement"): return visitor.visitIfStatement(self) else: return visitor.visitChildren(self) - - - def ifStatement(self): - localctx = SolidityParser.IfStatementContext(self, self._ctx, self.state) self.enterRule(localctx, 100, self.RULE_ifStatement) try: @@ -5040,14 +5987,13 @@ def ifStatement(self): self.statement() self.state = 679 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,70,self._ctx) + la_ = self._interp.adaptivePredict(self._input, 70, self._ctx) if la_ == 1: self.state = 677 self.match(SolidityParser.T__51) self.state = 678 self.statement() - except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -5056,57 +6002,49 @@ def ifStatement(self): self.exitRule() return localctx - class TryStatementContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser def expression(self): - return self.getTypedRuleContext(SolidityParser.ExpressionContext,0) - + return self.getTypedRuleContext(SolidityParser.ExpressionContext, 0) def block(self): - return self.getTypedRuleContext(SolidityParser.BlockContext,0) - + return self.getTypedRuleContext(SolidityParser.BlockContext, 0) def returnParameters(self): - return self.getTypedRuleContext(SolidityParser.ReturnParametersContext,0) - + return self.getTypedRuleContext(SolidityParser.ReturnParametersContext, 0) - def catchClause(self, i:int=None): + def catchClause(self, i: int = None): if i is None: return self.getTypedRuleContexts(SolidityParser.CatchClauseContext) else: - return self.getTypedRuleContext(SolidityParser.CatchClauseContext,i) - + return self.getTypedRuleContext(SolidityParser.CatchClauseContext, i) def getRuleIndex(self): return SolidityParser.RULE_tryStatement - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterTryStatement" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterTryStatement"): listener.enterTryStatement(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitTryStatement" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitTryStatement"): listener.exitTryStatement(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitTryStatement" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitTryStatement"): return visitor.visitTryStatement(self) else: return visitor.visitChildren(self) - - - def tryStatement(self): - localctx = SolidityParser.TryStatementContext(self, self._ctx, self.state) self.enterRule(localctx, 102, self.RULE_tryStatement) - self._la = 0 # Token type + self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) self.state = 681 @@ -5116,23 +6054,22 @@ def tryStatement(self): self.state = 684 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==SolidityParser.T__38: + if _la == SolidityParser.T__38: self.state = 683 self.returnParameters() - self.state = 686 self.block() - self.state = 688 + self.state = 688 self._errHandler.sync(self) _la = self._input.LA(1) while True: self.state = 687 self.catchClause() - self.state = 690 + self.state = 690 self._errHandler.sync(self) _la = self._input.LA(1) - if not (_la==SolidityParser.T__53): + if not (_la == SolidityParser.T__53): break except RecognitionException as re: @@ -5143,50 +6080,43 @@ def tryStatement(self): self.exitRule() return localctx - class CatchClauseContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser def block(self): - return self.getTypedRuleContext(SolidityParser.BlockContext,0) - + return self.getTypedRuleContext(SolidityParser.BlockContext, 0) def parameterList(self): - return self.getTypedRuleContext(SolidityParser.ParameterListContext,0) - + return self.getTypedRuleContext(SolidityParser.ParameterListContext, 0) def identifier(self): - return self.getTypedRuleContext(SolidityParser.IdentifierContext,0) - + return self.getTypedRuleContext(SolidityParser.IdentifierContext, 0) def getRuleIndex(self): return SolidityParser.RULE_catchClause - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterCatchClause" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterCatchClause"): listener.enterCatchClause(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitCatchClause" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitCatchClause"): listener.exitCatchClause(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitCatchClause" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitCatchClause"): return visitor.visitCatchClause(self) else: return visitor.visitChildren(self) - - - def catchClause(self): - localctx = SolidityParser.CatchClauseContext(self, self._ctx, self.state) self.enterRule(localctx, 104, self.RULE_catchClause) - self._la = 0 # Token type + self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) self.state = 692 @@ -5194,19 +6124,74 @@ def catchClause(self): self.state = 697 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__22) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__43) | (1 << SolidityParser.T__49) | (1 << SolidityParser.T__61))) != 0) or ((((_la - 95)) & ~0x3f) == 0 and ((1 << (_la - 95)) & ((1 << (SolidityParser.T__94 - 95)) | (1 << (SolidityParser.LeaveKeyword - 95)) | (1 << (SolidityParser.PayableKeyword - 95)) | (1 << (SolidityParser.GlobalKeyword - 95)) | (1 << (SolidityParser.ConstructorKeyword - 95)) | (1 << (SolidityParser.ReceiveKeyword - 95)) | (1 << (SolidityParser.Identifier - 95)))) != 0): + if ( + ((_la) & ~0x3F) == 0 + and ( + (1 << _la) + & ( + (1 << SolidityParser.T__13) + | (1 << SolidityParser.T__22) + | (1 << SolidityParser.T__24) + | (1 << SolidityParser.T__43) + | (1 << SolidityParser.T__49) + | (1 << SolidityParser.T__61) + ) + ) + != 0 + ) or ( + (((_la - 95)) & ~0x3F) == 0 + and ( + (1 << (_la - 95)) + & ( + (1 << (SolidityParser.T__94 - 95)) + | (1 << (SolidityParser.LeaveKeyword - 95)) + | (1 << (SolidityParser.PayableKeyword - 95)) + | (1 << (SolidityParser.GlobalKeyword - 95)) + | (1 << (SolidityParser.ConstructorKeyword - 95)) + | (1 << (SolidityParser.ReceiveKeyword - 95)) + | (1 << (SolidityParser.Identifier - 95)) + ) + ) + != 0 + ): self.state = 694 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__43) | (1 << SolidityParser.T__49) | (1 << SolidityParser.T__61))) != 0) or ((((_la - 95)) & ~0x3f) == 0 and ((1 << (_la - 95)) & ((1 << (SolidityParser.T__94 - 95)) | (1 << (SolidityParser.LeaveKeyword - 95)) | (1 << (SolidityParser.PayableKeyword - 95)) | (1 << (SolidityParser.GlobalKeyword - 95)) | (1 << (SolidityParser.ConstructorKeyword - 95)) | (1 << (SolidityParser.ReceiveKeyword - 95)) | (1 << (SolidityParser.Identifier - 95)))) != 0): + if ( + ((_la) & ~0x3F) == 0 + and ( + (1 << _la) + & ( + (1 << SolidityParser.T__13) + | (1 << SolidityParser.T__24) + | (1 << SolidityParser.T__43) + | (1 << SolidityParser.T__49) + | (1 << SolidityParser.T__61) + ) + ) + != 0 + ) or ( + (((_la - 95)) & ~0x3F) == 0 + and ( + (1 << (_la - 95)) + & ( + (1 << (SolidityParser.T__94 - 95)) + | (1 << (SolidityParser.LeaveKeyword - 95)) + | (1 << (SolidityParser.PayableKeyword - 95)) + | (1 << (SolidityParser.GlobalKeyword - 95)) + | (1 << (SolidityParser.ConstructorKeyword - 95)) + | (1 << (SolidityParser.ReceiveKeyword - 95)) + | (1 << (SolidityParser.Identifier - 95)) + ) + ) + != 0 + ): self.state = 693 self.identifier() - self.state = 696 self.parameterList() - self.state = 699 self.block() except RecognitionException as re: @@ -5217,43 +6202,37 @@ def catchClause(self): self.exitRule() return localctx - class WhileStatementContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser def expression(self): - return self.getTypedRuleContext(SolidityParser.ExpressionContext,0) - + return self.getTypedRuleContext(SolidityParser.ExpressionContext, 0) def statement(self): - return self.getTypedRuleContext(SolidityParser.StatementContext,0) - + return self.getTypedRuleContext(SolidityParser.StatementContext, 0) def getRuleIndex(self): return SolidityParser.RULE_whileStatement - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterWhileStatement" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterWhileStatement"): listener.enterWhileStatement(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitWhileStatement" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitWhileStatement"): listener.exitWhileStatement(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitWhileStatement" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitWhileStatement"): return visitor.visitWhileStatement(self) else: return visitor.visitChildren(self) - - - def whileStatement(self): - localctx = SolidityParser.WhileStatementContext(self, self._ctx, self.state) self.enterRule(localctx, 106, self.RULE_whileStatement) try: @@ -5276,50 +6255,48 @@ def whileStatement(self): self.exitRule() return localctx - class SimpleStatementContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser def variableDeclarationStatement(self): - return self.getTypedRuleContext(SolidityParser.VariableDeclarationStatementContext,0) - + return self.getTypedRuleContext( + SolidityParser.VariableDeclarationStatementContext, 0 + ) def expressionStatement(self): - return self.getTypedRuleContext(SolidityParser.ExpressionStatementContext,0) - + return self.getTypedRuleContext( + SolidityParser.ExpressionStatementContext, 0 + ) def getRuleIndex(self): return SolidityParser.RULE_simpleStatement - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterSimpleStatement" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterSimpleStatement"): listener.enterSimpleStatement(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitSimpleStatement" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitSimpleStatement"): listener.exitSimpleStatement(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitSimpleStatement" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitSimpleStatement"): return visitor.visitSimpleStatement(self) else: return visitor.visitChildren(self) - - - def simpleStatement(self): - localctx = SolidityParser.SimpleStatementContext(self, self._ctx, self.state) self.enterRule(localctx, 108, self.RULE_simpleStatement) try: self.enterOuterAlt(localctx, 1) self.state = 709 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,75,self._ctx) + la_ = self._interp.adaptivePredict(self._input, 75, self._ctx) if la_ == 1: self.state = 707 self.variableDeclarationStatement() @@ -5330,7 +6307,6 @@ def simpleStatement(self): self.expressionStatement() pass - except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -5339,39 +6315,34 @@ def simpleStatement(self): self.exitRule() return localctx - class UncheckedStatementContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser def block(self): - return self.getTypedRuleContext(SolidityParser.BlockContext,0) - + return self.getTypedRuleContext(SolidityParser.BlockContext, 0) def getRuleIndex(self): return SolidityParser.RULE_uncheckedStatement - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterUncheckedStatement" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterUncheckedStatement"): listener.enterUncheckedStatement(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitUncheckedStatement" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitUncheckedStatement"): listener.exitUncheckedStatement(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitUncheckedStatement" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitUncheckedStatement"): return visitor.visitUncheckedStatement(self) else: return visitor.visitChildren(self) - - - def uncheckedStatement(self): - localctx = SolidityParser.UncheckedStatementContext(self, self._ctx, self.state) self.enterRule(localctx, 110, self.RULE_uncheckedStatement) try: @@ -5388,54 +6359,48 @@ def uncheckedStatement(self): self.exitRule() return localctx - class ForStatementContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser def statement(self): - return self.getTypedRuleContext(SolidityParser.StatementContext,0) - + return self.getTypedRuleContext(SolidityParser.StatementContext, 0) def simpleStatement(self): - return self.getTypedRuleContext(SolidityParser.SimpleStatementContext,0) - + return self.getTypedRuleContext(SolidityParser.SimpleStatementContext, 0) def expressionStatement(self): - return self.getTypedRuleContext(SolidityParser.ExpressionStatementContext,0) - + return self.getTypedRuleContext( + SolidityParser.ExpressionStatementContext, 0 + ) def expression(self): - return self.getTypedRuleContext(SolidityParser.ExpressionContext,0) - + return self.getTypedRuleContext(SolidityParser.ExpressionContext, 0) def getRuleIndex(self): return SolidityParser.RULE_forStatement - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterForStatement" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterForStatement"): listener.enterForStatement(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitForStatement" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitForStatement"): listener.exitForStatement(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitForStatement" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitForStatement"): return visitor.visitForStatement(self) else: return visitor.visitChildren(self) - - - def forStatement(self): - localctx = SolidityParser.ForStatementContext(self, self._ctx, self.state) self.enterRule(localctx, 112, self.RULE_forStatement) - self._la = 0 # Token type + self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) self.state = 714 @@ -5445,7 +6410,47 @@ def forStatement(self): self.state = 718 self._errHandler.sync(self) token = self._input.LA(1) - if token in [SolidityParser.T__5, SolidityParser.T__13, SolidityParser.T__22, SolidityParser.T__24, SolidityParser.T__29, SolidityParser.T__30, SolidityParser.T__37, SolidityParser.T__41, SolidityParser.T__43, SolidityParser.T__45, SolidityParser.T__49, SolidityParser.T__61, SolidityParser.T__62, SolidityParser.T__63, SolidityParser.T__64, SolidityParser.T__65, SolidityParser.T__66, SolidityParser.T__67, SolidityParser.T__68, SolidityParser.T__70, SolidityParser.T__71, SolidityParser.T__94, SolidityParser.Int, SolidityParser.Uint, SolidityParser.Byte, SolidityParser.Fixed, SolidityParser.Ufixed, SolidityParser.BooleanLiteral, SolidityParser.DecimalNumber, SolidityParser.HexNumber, SolidityParser.HexLiteralFragment, SolidityParser.LeaveKeyword, SolidityParser.PayableKeyword, SolidityParser.TypeKeyword, SolidityParser.GlobalKeyword, SolidityParser.ConstructorKeyword, SolidityParser.ReceiveKeyword, SolidityParser.Identifier, SolidityParser.StringLiteralFragment]: + if token in [ + SolidityParser.T__5, + SolidityParser.T__13, + SolidityParser.T__22, + SolidityParser.T__24, + SolidityParser.T__29, + SolidityParser.T__30, + SolidityParser.T__37, + SolidityParser.T__41, + SolidityParser.T__43, + SolidityParser.T__45, + SolidityParser.T__49, + SolidityParser.T__61, + SolidityParser.T__62, + SolidityParser.T__63, + SolidityParser.T__64, + SolidityParser.T__65, + SolidityParser.T__66, + SolidityParser.T__67, + SolidityParser.T__68, + SolidityParser.T__70, + SolidityParser.T__71, + SolidityParser.T__94, + SolidityParser.Int, + SolidityParser.Uint, + SolidityParser.Byte, + SolidityParser.Fixed, + SolidityParser.Ufixed, + SolidityParser.BooleanLiteral, + SolidityParser.DecimalNumber, + SolidityParser.HexNumber, + SolidityParser.HexLiteralFragment, + SolidityParser.LeaveKeyword, + SolidityParser.PayableKeyword, + SolidityParser.TypeKeyword, + SolidityParser.GlobalKeyword, + SolidityParser.ConstructorKeyword, + SolidityParser.ReceiveKeyword, + SolidityParser.Identifier, + SolidityParser.StringLiteralFragment, + ]: self.state = 716 self.simpleStatement() pass @@ -5459,7 +6464,47 @@ def forStatement(self): self.state = 722 self._errHandler.sync(self) token = self._input.LA(1) - if token in [SolidityParser.T__5, SolidityParser.T__13, SolidityParser.T__22, SolidityParser.T__24, SolidityParser.T__29, SolidityParser.T__30, SolidityParser.T__37, SolidityParser.T__41, SolidityParser.T__43, SolidityParser.T__45, SolidityParser.T__49, SolidityParser.T__61, SolidityParser.T__62, SolidityParser.T__63, SolidityParser.T__64, SolidityParser.T__65, SolidityParser.T__66, SolidityParser.T__67, SolidityParser.T__68, SolidityParser.T__70, SolidityParser.T__71, SolidityParser.T__94, SolidityParser.Int, SolidityParser.Uint, SolidityParser.Byte, SolidityParser.Fixed, SolidityParser.Ufixed, SolidityParser.BooleanLiteral, SolidityParser.DecimalNumber, SolidityParser.HexNumber, SolidityParser.HexLiteralFragment, SolidityParser.LeaveKeyword, SolidityParser.PayableKeyword, SolidityParser.TypeKeyword, SolidityParser.GlobalKeyword, SolidityParser.ConstructorKeyword, SolidityParser.ReceiveKeyword, SolidityParser.Identifier, SolidityParser.StringLiteralFragment]: + if token in [ + SolidityParser.T__5, + SolidityParser.T__13, + SolidityParser.T__22, + SolidityParser.T__24, + SolidityParser.T__29, + SolidityParser.T__30, + SolidityParser.T__37, + SolidityParser.T__41, + SolidityParser.T__43, + SolidityParser.T__45, + SolidityParser.T__49, + SolidityParser.T__61, + SolidityParser.T__62, + SolidityParser.T__63, + SolidityParser.T__64, + SolidityParser.T__65, + SolidityParser.T__66, + SolidityParser.T__67, + SolidityParser.T__68, + SolidityParser.T__70, + SolidityParser.T__71, + SolidityParser.T__94, + SolidityParser.Int, + SolidityParser.Uint, + SolidityParser.Byte, + SolidityParser.Fixed, + SolidityParser.Ufixed, + SolidityParser.BooleanLiteral, + SolidityParser.DecimalNumber, + SolidityParser.HexNumber, + SolidityParser.HexLiteralFragment, + SolidityParser.LeaveKeyword, + SolidityParser.PayableKeyword, + SolidityParser.TypeKeyword, + SolidityParser.GlobalKeyword, + SolidityParser.ConstructorKeyword, + SolidityParser.ReceiveKeyword, + SolidityParser.Identifier, + SolidityParser.StringLiteralFragment, + ]: self.state = 720 self.expressionStatement() pass @@ -5473,11 +6518,65 @@ def forStatement(self): self.state = 725 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 6)) & ~0x3f) == 0 and ((1 << (_la - 6)) & ((1 << (SolidityParser.T__5 - 6)) | (1 << (SolidityParser.T__13 - 6)) | (1 << (SolidityParser.T__22 - 6)) | (1 << (SolidityParser.T__24 - 6)) | (1 << (SolidityParser.T__29 - 6)) | (1 << (SolidityParser.T__30 - 6)) | (1 << (SolidityParser.T__37 - 6)) | (1 << (SolidityParser.T__41 - 6)) | (1 << (SolidityParser.T__43 - 6)) | (1 << (SolidityParser.T__45 - 6)) | (1 << (SolidityParser.T__49 - 6)) | (1 << (SolidityParser.T__61 - 6)) | (1 << (SolidityParser.T__62 - 6)) | (1 << (SolidityParser.T__63 - 6)) | (1 << (SolidityParser.T__64 - 6)) | (1 << (SolidityParser.T__65 - 6)) | (1 << (SolidityParser.T__66 - 6)) | (1 << (SolidityParser.T__67 - 6)) | (1 << (SolidityParser.T__68 - 6)))) != 0) or ((((_la - 71)) & ~0x3f) == 0 and ((1 << (_la - 71)) & ((1 << (SolidityParser.T__70 - 71)) | (1 << (SolidityParser.T__71 - 71)) | (1 << (SolidityParser.T__94 - 71)) | (1 << (SolidityParser.Int - 71)) | (1 << (SolidityParser.Uint - 71)) | (1 << (SolidityParser.Byte - 71)) | (1 << (SolidityParser.Fixed - 71)) | (1 << (SolidityParser.Ufixed - 71)) | (1 << (SolidityParser.BooleanLiteral - 71)) | (1 << (SolidityParser.DecimalNumber - 71)) | (1 << (SolidityParser.HexNumber - 71)) | (1 << (SolidityParser.HexLiteralFragment - 71)) | (1 << (SolidityParser.LeaveKeyword - 71)) | (1 << (SolidityParser.PayableKeyword - 71)) | (1 << (SolidityParser.TypeKeyword - 71)) | (1 << (SolidityParser.GlobalKeyword - 71)) | (1 << (SolidityParser.ConstructorKeyword - 71)) | (1 << (SolidityParser.ReceiveKeyword - 71)) | (1 << (SolidityParser.Identifier - 71)) | (1 << (SolidityParser.StringLiteralFragment - 71)))) != 0): + if ( + (((_la - 6)) & ~0x3F) == 0 + and ( + (1 << (_la - 6)) + & ( + (1 << (SolidityParser.T__5 - 6)) + | (1 << (SolidityParser.T__13 - 6)) + | (1 << (SolidityParser.T__22 - 6)) + | (1 << (SolidityParser.T__24 - 6)) + | (1 << (SolidityParser.T__29 - 6)) + | (1 << (SolidityParser.T__30 - 6)) + | (1 << (SolidityParser.T__37 - 6)) + | (1 << (SolidityParser.T__41 - 6)) + | (1 << (SolidityParser.T__43 - 6)) + | (1 << (SolidityParser.T__45 - 6)) + | (1 << (SolidityParser.T__49 - 6)) + | (1 << (SolidityParser.T__61 - 6)) + | (1 << (SolidityParser.T__62 - 6)) + | (1 << (SolidityParser.T__63 - 6)) + | (1 << (SolidityParser.T__64 - 6)) + | (1 << (SolidityParser.T__65 - 6)) + | (1 << (SolidityParser.T__66 - 6)) + | (1 << (SolidityParser.T__67 - 6)) + | (1 << (SolidityParser.T__68 - 6)) + ) + ) + != 0 + ) or ( + (((_la - 71)) & ~0x3F) == 0 + and ( + (1 << (_la - 71)) + & ( + (1 << (SolidityParser.T__70 - 71)) + | (1 << (SolidityParser.T__71 - 71)) + | (1 << (SolidityParser.T__94 - 71)) + | (1 << (SolidityParser.Int - 71)) + | (1 << (SolidityParser.Uint - 71)) + | (1 << (SolidityParser.Byte - 71)) + | (1 << (SolidityParser.Fixed - 71)) + | (1 << (SolidityParser.Ufixed - 71)) + | (1 << (SolidityParser.BooleanLiteral - 71)) + | (1 << (SolidityParser.DecimalNumber - 71)) + | (1 << (SolidityParser.HexNumber - 71)) + | (1 << (SolidityParser.HexLiteralFragment - 71)) + | (1 << (SolidityParser.LeaveKeyword - 71)) + | (1 << (SolidityParser.PayableKeyword - 71)) + | (1 << (SolidityParser.TypeKeyword - 71)) + | (1 << (SolidityParser.GlobalKeyword - 71)) + | (1 << (SolidityParser.ConstructorKeyword - 71)) + | (1 << (SolidityParser.ReceiveKeyword - 71)) + | (1 << (SolidityParser.Identifier - 71)) + | (1 << (SolidityParser.StringLiteralFragment - 71)) + ) + ) + != 0 + ): self.state = 724 self.expression(0) - self.state = 727 self.match(SolidityParser.T__23) self.state = 728 @@ -5490,49 +6589,47 @@ def forStatement(self): self.exitRule() return localctx - class InlineAssemblyStatementContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser def assemblyBlock(self): - return self.getTypedRuleContext(SolidityParser.AssemblyBlockContext,0) - + return self.getTypedRuleContext(SolidityParser.AssemblyBlockContext, 0) def StringLiteralFragment(self): return self.getToken(SolidityParser.StringLiteralFragment, 0) def inlineAssemblyStatementFlag(self): - return self.getTypedRuleContext(SolidityParser.InlineAssemblyStatementFlagContext,0) - + return self.getTypedRuleContext( + SolidityParser.InlineAssemblyStatementFlagContext, 0 + ) def getRuleIndex(self): return SolidityParser.RULE_inlineAssemblyStatement - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterInlineAssemblyStatement" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterInlineAssemblyStatement"): listener.enterInlineAssemblyStatement(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitInlineAssemblyStatement" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitInlineAssemblyStatement"): listener.exitInlineAssemblyStatement(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitInlineAssemblyStatement" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitInlineAssemblyStatement"): return visitor.visitInlineAssemblyStatement(self) else: return visitor.visitChildren(self) - - - def inlineAssemblyStatement(self): - - localctx = SolidityParser.InlineAssemblyStatementContext(self, self._ctx, self.state) + localctx = SolidityParser.InlineAssemblyStatementContext( + self, self._ctx, self.state + ) self.enterRule(localctx, 114, self.RULE_inlineAssemblyStatement) - self._la = 0 # Token type + self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) self.state = 730 @@ -5540,15 +6637,14 @@ def inlineAssemblyStatement(self): self.state = 732 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==SolidityParser.StringLiteralFragment: + if _la == SolidityParser.StringLiteralFragment: self.state = 731 self.match(SolidityParser.StringLiteralFragment) - self.state = 738 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==SolidityParser.T__22: + if _la == SolidityParser.T__22: self.state = 734 self.match(SolidityParser.T__22) self.state = 735 @@ -5556,7 +6652,6 @@ def inlineAssemblyStatement(self): self.state = 736 self.match(SolidityParser.T__23) - self.state = 740 self.assemblyBlock() except RecognitionException as re: @@ -5567,40 +6662,37 @@ def inlineAssemblyStatement(self): self.exitRule() return localctx - class InlineAssemblyStatementFlagContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser def stringLiteral(self): - return self.getTypedRuleContext(SolidityParser.StringLiteralContext,0) - + return self.getTypedRuleContext(SolidityParser.StringLiteralContext, 0) def getRuleIndex(self): return SolidityParser.RULE_inlineAssemblyStatementFlag - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterInlineAssemblyStatementFlag" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterInlineAssemblyStatementFlag"): listener.enterInlineAssemblyStatementFlag(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitInlineAssemblyStatementFlag" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitInlineAssemblyStatementFlag"): listener.exitInlineAssemblyStatementFlag(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitInlineAssemblyStatementFlag" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitInlineAssemblyStatementFlag"): return visitor.visitInlineAssemblyStatementFlag(self) else: return visitor.visitChildren(self) - - - def inlineAssemblyStatementFlag(self): - - localctx = SolidityParser.InlineAssemblyStatementFlagContext(self, self._ctx, self.state) + localctx = SolidityParser.InlineAssemblyStatementFlagContext( + self, self._ctx, self.state + ) self.enterRule(localctx, 116, self.RULE_inlineAssemblyStatementFlag) try: self.enterOuterAlt(localctx, 1) @@ -5614,43 +6706,37 @@ def inlineAssemblyStatementFlag(self): self.exitRule() return localctx - class DoWhileStatementContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser def statement(self): - return self.getTypedRuleContext(SolidityParser.StatementContext,0) - + return self.getTypedRuleContext(SolidityParser.StatementContext, 0) def expression(self): - return self.getTypedRuleContext(SolidityParser.ExpressionContext,0) - + return self.getTypedRuleContext(SolidityParser.ExpressionContext, 0) def getRuleIndex(self): return SolidityParser.RULE_doWhileStatement - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterDoWhileStatement" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterDoWhileStatement"): listener.enterDoWhileStatement(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitDoWhileStatement" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitDoWhileStatement"): listener.exitDoWhileStatement(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitDoWhileStatement" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitDoWhileStatement"): return visitor.visitDoWhileStatement(self) else: return visitor.visitChildren(self) - - - def doWhileStatement(self): - localctx = SolidityParser.DoWhileStatementContext(self, self._ctx, self.state) self.enterRule(localctx, 118, self.RULE_doWhileStatement) try: @@ -5677,10 +6763,10 @@ def doWhileStatement(self): self.exitRule() return localctx - class ContinueStatementContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser @@ -5690,25 +6776,21 @@ def ContinueKeyword(self): def getRuleIndex(self): return SolidityParser.RULE_continueStatement - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterContinueStatement" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterContinueStatement"): listener.enterContinueStatement(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitContinueStatement" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitContinueStatement"): listener.exitContinueStatement(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitContinueStatement" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitContinueStatement"): return visitor.visitContinueStatement(self) else: return visitor.visitChildren(self) - - - def continueStatement(self): - localctx = SolidityParser.ContinueStatementContext(self, self._ctx, self.state) self.enterRule(localctx, 120, self.RULE_continueStatement) try: @@ -5725,10 +6807,10 @@ def continueStatement(self): self.exitRule() return localctx - class BreakStatementContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser @@ -5738,25 +6820,21 @@ def BreakKeyword(self): def getRuleIndex(self): return SolidityParser.RULE_breakStatement - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterBreakStatement" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterBreakStatement"): listener.enterBreakStatement(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitBreakStatement" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitBreakStatement"): listener.exitBreakStatement(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitBreakStatement" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitBreakStatement"): return visitor.visitBreakStatement(self) else: return visitor.visitChildren(self) - - - def breakStatement(self): - localctx = SolidityParser.BreakStatementContext(self, self._ctx, self.state) self.enterRule(localctx, 122, self.RULE_breakStatement) try: @@ -5773,42 +6851,37 @@ def breakStatement(self): self.exitRule() return localctx - class ReturnStatementContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser def expression(self): - return self.getTypedRuleContext(SolidityParser.ExpressionContext,0) - + return self.getTypedRuleContext(SolidityParser.ExpressionContext, 0) def getRuleIndex(self): return SolidityParser.RULE_returnStatement - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterReturnStatement" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterReturnStatement"): listener.enterReturnStatement(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitReturnStatement" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitReturnStatement"): listener.exitReturnStatement(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitReturnStatement" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitReturnStatement"): return visitor.visitReturnStatement(self) else: return visitor.visitChildren(self) - - - def returnStatement(self): - localctx = SolidityParser.ReturnStatementContext(self, self._ctx, self.state) self.enterRule(localctx, 124, self.RULE_returnStatement) - self._la = 0 # Token type + self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) self.state = 758 @@ -5816,11 +6889,65 @@ def returnStatement(self): self.state = 760 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 6)) & ~0x3f) == 0 and ((1 << (_la - 6)) & ((1 << (SolidityParser.T__5 - 6)) | (1 << (SolidityParser.T__13 - 6)) | (1 << (SolidityParser.T__22 - 6)) | (1 << (SolidityParser.T__24 - 6)) | (1 << (SolidityParser.T__29 - 6)) | (1 << (SolidityParser.T__30 - 6)) | (1 << (SolidityParser.T__37 - 6)) | (1 << (SolidityParser.T__41 - 6)) | (1 << (SolidityParser.T__43 - 6)) | (1 << (SolidityParser.T__45 - 6)) | (1 << (SolidityParser.T__49 - 6)) | (1 << (SolidityParser.T__61 - 6)) | (1 << (SolidityParser.T__62 - 6)) | (1 << (SolidityParser.T__63 - 6)) | (1 << (SolidityParser.T__64 - 6)) | (1 << (SolidityParser.T__65 - 6)) | (1 << (SolidityParser.T__66 - 6)) | (1 << (SolidityParser.T__67 - 6)) | (1 << (SolidityParser.T__68 - 6)))) != 0) or ((((_la - 71)) & ~0x3f) == 0 and ((1 << (_la - 71)) & ((1 << (SolidityParser.T__70 - 71)) | (1 << (SolidityParser.T__71 - 71)) | (1 << (SolidityParser.T__94 - 71)) | (1 << (SolidityParser.Int - 71)) | (1 << (SolidityParser.Uint - 71)) | (1 << (SolidityParser.Byte - 71)) | (1 << (SolidityParser.Fixed - 71)) | (1 << (SolidityParser.Ufixed - 71)) | (1 << (SolidityParser.BooleanLiteral - 71)) | (1 << (SolidityParser.DecimalNumber - 71)) | (1 << (SolidityParser.HexNumber - 71)) | (1 << (SolidityParser.HexLiteralFragment - 71)) | (1 << (SolidityParser.LeaveKeyword - 71)) | (1 << (SolidityParser.PayableKeyword - 71)) | (1 << (SolidityParser.TypeKeyword - 71)) | (1 << (SolidityParser.GlobalKeyword - 71)) | (1 << (SolidityParser.ConstructorKeyword - 71)) | (1 << (SolidityParser.ReceiveKeyword - 71)) | (1 << (SolidityParser.Identifier - 71)) | (1 << (SolidityParser.StringLiteralFragment - 71)))) != 0): + if ( + (((_la - 6)) & ~0x3F) == 0 + and ( + (1 << (_la - 6)) + & ( + (1 << (SolidityParser.T__5 - 6)) + | (1 << (SolidityParser.T__13 - 6)) + | (1 << (SolidityParser.T__22 - 6)) + | (1 << (SolidityParser.T__24 - 6)) + | (1 << (SolidityParser.T__29 - 6)) + | (1 << (SolidityParser.T__30 - 6)) + | (1 << (SolidityParser.T__37 - 6)) + | (1 << (SolidityParser.T__41 - 6)) + | (1 << (SolidityParser.T__43 - 6)) + | (1 << (SolidityParser.T__45 - 6)) + | (1 << (SolidityParser.T__49 - 6)) + | (1 << (SolidityParser.T__61 - 6)) + | (1 << (SolidityParser.T__62 - 6)) + | (1 << (SolidityParser.T__63 - 6)) + | (1 << (SolidityParser.T__64 - 6)) + | (1 << (SolidityParser.T__65 - 6)) + | (1 << (SolidityParser.T__66 - 6)) + | (1 << (SolidityParser.T__67 - 6)) + | (1 << (SolidityParser.T__68 - 6)) + ) + ) + != 0 + ) or ( + (((_la - 71)) & ~0x3F) == 0 + and ( + (1 << (_la - 71)) + & ( + (1 << (SolidityParser.T__70 - 71)) + | (1 << (SolidityParser.T__71 - 71)) + | (1 << (SolidityParser.T__94 - 71)) + | (1 << (SolidityParser.Int - 71)) + | (1 << (SolidityParser.Uint - 71)) + | (1 << (SolidityParser.Byte - 71)) + | (1 << (SolidityParser.Fixed - 71)) + | (1 << (SolidityParser.Ufixed - 71)) + | (1 << (SolidityParser.BooleanLiteral - 71)) + | (1 << (SolidityParser.DecimalNumber - 71)) + | (1 << (SolidityParser.HexNumber - 71)) + | (1 << (SolidityParser.HexLiteralFragment - 71)) + | (1 << (SolidityParser.LeaveKeyword - 71)) + | (1 << (SolidityParser.PayableKeyword - 71)) + | (1 << (SolidityParser.TypeKeyword - 71)) + | (1 << (SolidityParser.GlobalKeyword - 71)) + | (1 << (SolidityParser.ConstructorKeyword - 71)) + | (1 << (SolidityParser.ReceiveKeyword - 71)) + | (1 << (SolidityParser.Identifier - 71)) + | (1 << (SolidityParser.StringLiteralFragment - 71)) + ) + ) + != 0 + ): self.state = 759 self.expression(0) - self.state = 762 self.match(SolidityParser.T__1) except RecognitionException as re: @@ -5831,36 +6958,31 @@ def returnStatement(self): self.exitRule() return localctx - class ThrowStatementContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser - def getRuleIndex(self): return SolidityParser.RULE_throwStatement - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterThrowStatement" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterThrowStatement"): listener.enterThrowStatement(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitThrowStatement" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitThrowStatement"): listener.exitThrowStatement(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitThrowStatement" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitThrowStatement"): return visitor.visitThrowStatement(self) else: return visitor.visitChildren(self) - - - def throwStatement(self): - localctx = SolidityParser.ThrowStatementContext(self, self._ctx, self.state) self.enterRule(localctx, 126, self.RULE_throwStatement) try: @@ -5877,39 +6999,34 @@ def throwStatement(self): self.exitRule() return localctx - class EmitStatementContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser def functionCall(self): - return self.getTypedRuleContext(SolidityParser.FunctionCallContext,0) - + return self.getTypedRuleContext(SolidityParser.FunctionCallContext, 0) def getRuleIndex(self): return SolidityParser.RULE_emitStatement - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterEmitStatement" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterEmitStatement"): listener.enterEmitStatement(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitEmitStatement" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitEmitStatement"): listener.exitEmitStatement(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitEmitStatement" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitEmitStatement"): return visitor.visitEmitStatement(self) else: return visitor.visitChildren(self) - - - def emitStatement(self): - localctx = SolidityParser.EmitStatementContext(self, self._ctx, self.state) self.enterRule(localctx, 128, self.RULE_emitStatement) try: @@ -5928,39 +7045,34 @@ def emitStatement(self): self.exitRule() return localctx - class RevertStatementContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser def functionCall(self): - return self.getTypedRuleContext(SolidityParser.FunctionCallContext,0) - + return self.getTypedRuleContext(SolidityParser.FunctionCallContext, 0) def getRuleIndex(self): return SolidityParser.RULE_revertStatement - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterRevertStatement" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterRevertStatement"): listener.enterRevertStatement(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitRevertStatement" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitRevertStatement"): listener.exitRevertStatement(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitRevertStatement" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitRevertStatement"): return visitor.visitRevertStatement(self) else: return visitor.visitChildren(self) - - - def revertStatement(self): - localctx = SolidityParser.RevertStatementContext(self, self._ctx, self.state) self.enterRule(localctx, 130, self.RULE_revertStatement) try: @@ -5979,59 +7091,57 @@ def revertStatement(self): self.exitRule() return localctx - class VariableDeclarationStatementContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser def identifierList(self): - return self.getTypedRuleContext(SolidityParser.IdentifierListContext,0) - + return self.getTypedRuleContext(SolidityParser.IdentifierListContext, 0) def variableDeclaration(self): - return self.getTypedRuleContext(SolidityParser.VariableDeclarationContext,0) - + return self.getTypedRuleContext( + SolidityParser.VariableDeclarationContext, 0 + ) def variableDeclarationList(self): - return self.getTypedRuleContext(SolidityParser.VariableDeclarationListContext,0) - + return self.getTypedRuleContext( + SolidityParser.VariableDeclarationListContext, 0 + ) def expression(self): - return self.getTypedRuleContext(SolidityParser.ExpressionContext,0) - + return self.getTypedRuleContext(SolidityParser.ExpressionContext, 0) def getRuleIndex(self): return SolidityParser.RULE_variableDeclarationStatement - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterVariableDeclarationStatement" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterVariableDeclarationStatement"): listener.enterVariableDeclarationStatement(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitVariableDeclarationStatement" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitVariableDeclarationStatement"): listener.exitVariableDeclarationStatement(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitVariableDeclarationStatement" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitVariableDeclarationStatement"): return visitor.visitVariableDeclarationStatement(self) else: return visitor.visitChildren(self) - - - def variableDeclarationStatement(self): - - localctx = SolidityParser.VariableDeclarationStatementContext(self, self._ctx, self.state) + localctx = SolidityParser.VariableDeclarationStatementContext( + self, self._ctx, self.state + ) self.enterRule(localctx, 132, self.RULE_variableDeclarationStatement) - self._la = 0 # Token type + self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) self.state = 782 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,82,self._ctx) + la_ = self._interp.adaptivePredict(self._input, 82, self._ctx) if la_ == 1: self.state = 775 self.match(SolidityParser.T__62) @@ -6053,17 +7163,15 @@ def variableDeclarationStatement(self): self.match(SolidityParser.T__23) pass - self.state = 786 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==SolidityParser.T__10: + if _la == SolidityParser.T__10: self.state = 784 self.match(SolidityParser.T__10) self.state = 785 self.expression(0) - self.state = 788 self.match(SolidityParser.T__1) except RecognitionException as re: @@ -6074,69 +7182,146 @@ def variableDeclarationStatement(self): self.exitRule() return localctx - class VariableDeclarationListContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser - def variableDeclaration(self, i:int=None): + def variableDeclaration(self, i: int = None): if i is None: - return self.getTypedRuleContexts(SolidityParser.VariableDeclarationContext) + return self.getTypedRuleContexts( + SolidityParser.VariableDeclarationContext + ) else: - return self.getTypedRuleContext(SolidityParser.VariableDeclarationContext,i) - + return self.getTypedRuleContext( + SolidityParser.VariableDeclarationContext, i + ) def getRuleIndex(self): return SolidityParser.RULE_variableDeclarationList - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterVariableDeclarationList" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterVariableDeclarationList"): listener.enterVariableDeclarationList(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitVariableDeclarationList" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitVariableDeclarationList"): listener.exitVariableDeclarationList(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitVariableDeclarationList" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitVariableDeclarationList"): return visitor.visitVariableDeclarationList(self) else: return visitor.visitChildren(self) - - - def variableDeclarationList(self): - - localctx = SolidityParser.VariableDeclarationListContext(self, self._ctx, self.state) + localctx = SolidityParser.VariableDeclarationListContext( + self, self._ctx, self.state + ) self.enterRule(localctx, 134, self.RULE_variableDeclarationList) - self._la = 0 # Token type + self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) self.state = 791 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 14)) & ~0x3f) == 0 and ((1 << (_la - 14)) & ((1 << (SolidityParser.T__13 - 14)) | (1 << (SolidityParser.T__24 - 14)) | (1 << (SolidityParser.T__37 - 14)) | (1 << (SolidityParser.T__43 - 14)) | (1 << (SolidityParser.T__45 - 14)) | (1 << (SolidityParser.T__49 - 14)) | (1 << (SolidityParser.T__61 - 14)) | (1 << (SolidityParser.T__62 - 14)) | (1 << (SolidityParser.T__63 - 14)) | (1 << (SolidityParser.T__64 - 14)) | (1 << (SolidityParser.T__65 - 14)))) != 0) or ((((_la - 95)) & ~0x3f) == 0 and ((1 << (_la - 95)) & ((1 << (SolidityParser.T__94 - 95)) | (1 << (SolidityParser.Int - 95)) | (1 << (SolidityParser.Uint - 95)) | (1 << (SolidityParser.Byte - 95)) | (1 << (SolidityParser.Fixed - 95)) | (1 << (SolidityParser.Ufixed - 95)) | (1 << (SolidityParser.LeaveKeyword - 95)) | (1 << (SolidityParser.PayableKeyword - 95)) | (1 << (SolidityParser.GlobalKeyword - 95)) | (1 << (SolidityParser.ConstructorKeyword - 95)) | (1 << (SolidityParser.ReceiveKeyword - 95)) | (1 << (SolidityParser.Identifier - 95)))) != 0): + if ( + (((_la - 14)) & ~0x3F) == 0 + and ( + (1 << (_la - 14)) + & ( + (1 << (SolidityParser.T__13 - 14)) + | (1 << (SolidityParser.T__24 - 14)) + | (1 << (SolidityParser.T__37 - 14)) + | (1 << (SolidityParser.T__43 - 14)) + | (1 << (SolidityParser.T__45 - 14)) + | (1 << (SolidityParser.T__49 - 14)) + | (1 << (SolidityParser.T__61 - 14)) + | (1 << (SolidityParser.T__62 - 14)) + | (1 << (SolidityParser.T__63 - 14)) + | (1 << (SolidityParser.T__64 - 14)) + | (1 << (SolidityParser.T__65 - 14)) + ) + ) + != 0 + ) or ( + (((_la - 95)) & ~0x3F) == 0 + and ( + (1 << (_la - 95)) + & ( + (1 << (SolidityParser.T__94 - 95)) + | (1 << (SolidityParser.Int - 95)) + | (1 << (SolidityParser.Uint - 95)) + | (1 << (SolidityParser.Byte - 95)) + | (1 << (SolidityParser.Fixed - 95)) + | (1 << (SolidityParser.Ufixed - 95)) + | (1 << (SolidityParser.LeaveKeyword - 95)) + | (1 << (SolidityParser.PayableKeyword - 95)) + | (1 << (SolidityParser.GlobalKeyword - 95)) + | (1 << (SolidityParser.ConstructorKeyword - 95)) + | (1 << (SolidityParser.ReceiveKeyword - 95)) + | (1 << (SolidityParser.Identifier - 95)) + ) + ) + != 0 + ): self.state = 790 self.variableDeclaration() - self.state = 799 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==SolidityParser.T__15: + while _la == SolidityParser.T__15: self.state = 793 self.match(SolidityParser.T__15) self.state = 795 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 14)) & ~0x3f) == 0 and ((1 << (_la - 14)) & ((1 << (SolidityParser.T__13 - 14)) | (1 << (SolidityParser.T__24 - 14)) | (1 << (SolidityParser.T__37 - 14)) | (1 << (SolidityParser.T__43 - 14)) | (1 << (SolidityParser.T__45 - 14)) | (1 << (SolidityParser.T__49 - 14)) | (1 << (SolidityParser.T__61 - 14)) | (1 << (SolidityParser.T__62 - 14)) | (1 << (SolidityParser.T__63 - 14)) | (1 << (SolidityParser.T__64 - 14)) | (1 << (SolidityParser.T__65 - 14)))) != 0) or ((((_la - 95)) & ~0x3f) == 0 and ((1 << (_la - 95)) & ((1 << (SolidityParser.T__94 - 95)) | (1 << (SolidityParser.Int - 95)) | (1 << (SolidityParser.Uint - 95)) | (1 << (SolidityParser.Byte - 95)) | (1 << (SolidityParser.Fixed - 95)) | (1 << (SolidityParser.Ufixed - 95)) | (1 << (SolidityParser.LeaveKeyword - 95)) | (1 << (SolidityParser.PayableKeyword - 95)) | (1 << (SolidityParser.GlobalKeyword - 95)) | (1 << (SolidityParser.ConstructorKeyword - 95)) | (1 << (SolidityParser.ReceiveKeyword - 95)) | (1 << (SolidityParser.Identifier - 95)))) != 0): + if ( + (((_la - 14)) & ~0x3F) == 0 + and ( + (1 << (_la - 14)) + & ( + (1 << (SolidityParser.T__13 - 14)) + | (1 << (SolidityParser.T__24 - 14)) + | (1 << (SolidityParser.T__37 - 14)) + | (1 << (SolidityParser.T__43 - 14)) + | (1 << (SolidityParser.T__45 - 14)) + | (1 << (SolidityParser.T__49 - 14)) + | (1 << (SolidityParser.T__61 - 14)) + | (1 << (SolidityParser.T__62 - 14)) + | (1 << (SolidityParser.T__63 - 14)) + | (1 << (SolidityParser.T__64 - 14)) + | (1 << (SolidityParser.T__65 - 14)) + ) + ) + != 0 + ) or ( + (((_la - 95)) & ~0x3F) == 0 + and ( + (1 << (_la - 95)) + & ( + (1 << (SolidityParser.T__94 - 95)) + | (1 << (SolidityParser.Int - 95)) + | (1 << (SolidityParser.Uint - 95)) + | (1 << (SolidityParser.Byte - 95)) + | (1 << (SolidityParser.Fixed - 95)) + | (1 << (SolidityParser.Ufixed - 95)) + | (1 << (SolidityParser.LeaveKeyword - 95)) + | (1 << (SolidityParser.PayableKeyword - 95)) + | (1 << (SolidityParser.GlobalKeyword - 95)) + | (1 << (SolidityParser.ConstructorKeyword - 95)) + | (1 << (SolidityParser.ReceiveKeyword - 95)) + | (1 << (SolidityParser.Identifier - 95)) + ) + ) + != 0 + ): self.state = 794 self.variableDeclaration() - self.state = 801 self._errHandler.sync(self) _la = self._input.LA(1) @@ -6149,76 +7334,125 @@ def variableDeclarationList(self): self.exitRule() return localctx - class IdentifierListContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser - def identifier(self, i:int=None): + def identifier(self, i: int = None): if i is None: return self.getTypedRuleContexts(SolidityParser.IdentifierContext) else: - return self.getTypedRuleContext(SolidityParser.IdentifierContext,i) - + return self.getTypedRuleContext(SolidityParser.IdentifierContext, i) def getRuleIndex(self): return SolidityParser.RULE_identifierList - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterIdentifierList" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterIdentifierList"): listener.enterIdentifierList(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitIdentifierList" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitIdentifierList"): listener.exitIdentifierList(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitIdentifierList" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitIdentifierList"): return visitor.visitIdentifierList(self) else: return visitor.visitChildren(self) - - - def identifierList(self): - localctx = SolidityParser.IdentifierListContext(self, self._ctx, self.state) self.enterRule(localctx, 136, self.RULE_identifierList) - self._la = 0 # Token type + self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) self.state = 802 self.match(SolidityParser.T__22) self.state = 809 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,88,self._ctx) - while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: - if _alt==1: + _alt = self._interp.adaptivePredict(self._input, 88, self._ctx) + while _alt != 2 and _alt != ATN.INVALID_ALT_NUMBER: + if _alt == 1: self.state = 804 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__43) | (1 << SolidityParser.T__49) | (1 << SolidityParser.T__61))) != 0) or ((((_la - 95)) & ~0x3f) == 0 and ((1 << (_la - 95)) & ((1 << (SolidityParser.T__94 - 95)) | (1 << (SolidityParser.LeaveKeyword - 95)) | (1 << (SolidityParser.PayableKeyword - 95)) | (1 << (SolidityParser.GlobalKeyword - 95)) | (1 << (SolidityParser.ConstructorKeyword - 95)) | (1 << (SolidityParser.ReceiveKeyword - 95)) | (1 << (SolidityParser.Identifier - 95)))) != 0): + if ( + ((_la) & ~0x3F) == 0 + and ( + (1 << _la) + & ( + (1 << SolidityParser.T__13) + | (1 << SolidityParser.T__24) + | (1 << SolidityParser.T__43) + | (1 << SolidityParser.T__49) + | (1 << SolidityParser.T__61) + ) + ) + != 0 + ) or ( + (((_la - 95)) & ~0x3F) == 0 + and ( + (1 << (_la - 95)) + & ( + (1 << (SolidityParser.T__94 - 95)) + | (1 << (SolidityParser.LeaveKeyword - 95)) + | (1 << (SolidityParser.PayableKeyword - 95)) + | (1 << (SolidityParser.GlobalKeyword - 95)) + | (1 << (SolidityParser.ConstructorKeyword - 95)) + | (1 << (SolidityParser.ReceiveKeyword - 95)) + | (1 << (SolidityParser.Identifier - 95)) + ) + ) + != 0 + ): self.state = 803 self.identifier() - self.state = 806 - self.match(SolidityParser.T__15) + self.match(SolidityParser.T__15) self.state = 811 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,88,self._ctx) + _alt = self._interp.adaptivePredict(self._input, 88, self._ctx) self.state = 813 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__43) | (1 << SolidityParser.T__49) | (1 << SolidityParser.T__61))) != 0) or ((((_la - 95)) & ~0x3f) == 0 and ((1 << (_la - 95)) & ((1 << (SolidityParser.T__94 - 95)) | (1 << (SolidityParser.LeaveKeyword - 95)) | (1 << (SolidityParser.PayableKeyword - 95)) | (1 << (SolidityParser.GlobalKeyword - 95)) | (1 << (SolidityParser.ConstructorKeyword - 95)) | (1 << (SolidityParser.ReceiveKeyword - 95)) | (1 << (SolidityParser.Identifier - 95)))) != 0): + if ( + ((_la) & ~0x3F) == 0 + and ( + (1 << _la) + & ( + (1 << SolidityParser.T__13) + | (1 << SolidityParser.T__24) + | (1 << SolidityParser.T__43) + | (1 << SolidityParser.T__49) + | (1 << SolidityParser.T__61) + ) + ) + != 0 + ) or ( + (((_la - 95)) & ~0x3F) == 0 + and ( + (1 << (_la - 95)) + & ( + (1 << (SolidityParser.T__94 - 95)) + | (1 << (SolidityParser.LeaveKeyword - 95)) + | (1 << (SolidityParser.PayableKeyword - 95)) + | (1 << (SolidityParser.GlobalKeyword - 95)) + | (1 << (SolidityParser.ConstructorKeyword - 95)) + | (1 << (SolidityParser.ReceiveKeyword - 95)) + | (1 << (SolidityParser.Identifier - 95)) + ) + ) + != 0 + ): self.state = 812 self.identifier() - self.state = 815 self.match(SolidityParser.T__23) except RecognitionException as re: @@ -6229,10 +7463,10 @@ def identifierList(self): self.exitRule() return localctx - class ElementaryTypeNameContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser @@ -6254,33 +7488,49 @@ def Ufixed(self): def getRuleIndex(self): return SolidityParser.RULE_elementaryTypeName - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterElementaryTypeName" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterElementaryTypeName"): listener.enterElementaryTypeName(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitElementaryTypeName" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitElementaryTypeName"): listener.exitElementaryTypeName(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitElementaryTypeName" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitElementaryTypeName"): return visitor.visitElementaryTypeName(self) else: return visitor.visitChildren(self) - - - def elementaryTypeName(self): - localctx = SolidityParser.ElementaryTypeNameContext(self, self._ctx, self.state) self.enterRule(localctx, 138, self.RULE_elementaryTypeName) - self._la = 0 # Token type + self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) self.state = 817 _la = self._input.LA(1) - if not(((((_la - 44)) & ~0x3f) == 0 and ((1 << (_la - 44)) & ((1 << (SolidityParser.T__43 - 44)) | (1 << (SolidityParser.T__62 - 44)) | (1 << (SolidityParser.T__63 - 44)) | (1 << (SolidityParser.T__64 - 44)) | (1 << (SolidityParser.T__65 - 44)) | (1 << (SolidityParser.Int - 44)) | (1 << (SolidityParser.Uint - 44)) | (1 << (SolidityParser.Byte - 44)) | (1 << (SolidityParser.Fixed - 44)) | (1 << (SolidityParser.Ufixed - 44)))) != 0)): + if not ( + ( + (((_la - 44)) & ~0x3F) == 0 + and ( + (1 << (_la - 44)) + & ( + (1 << (SolidityParser.T__43 - 44)) + | (1 << (SolidityParser.T__62 - 44)) + | (1 << (SolidityParser.T__63 - 44)) + | (1 << (SolidityParser.T__64 - 44)) + | (1 << (SolidityParser.T__65 - 44)) + | (1 << (SolidityParser.Int - 44)) + | (1 << (SolidityParser.Uint - 44)) + | (1 << (SolidityParser.Byte - 44)) + | (1 << (SolidityParser.Fixed - 44)) + | (1 << (SolidityParser.Ufixed - 44)) + ) + ) + != 0 + ) + ): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -6293,72 +7543,66 @@ def elementaryTypeName(self): self.exitRule() return localctx - class ExpressionContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser def typeName(self): - return self.getTypedRuleContext(SolidityParser.TypeNameContext,0) + return self.getTypedRuleContext(SolidityParser.TypeNameContext, 0) - - def expression(self, i:int=None): + def expression(self, i: int = None): if i is None: return self.getTypedRuleContexts(SolidityParser.ExpressionContext) else: - return self.getTypedRuleContext(SolidityParser.ExpressionContext,i) - + return self.getTypedRuleContext(SolidityParser.ExpressionContext, i) def primaryExpression(self): - return self.getTypedRuleContext(SolidityParser.PrimaryExpressionContext,0) - + return self.getTypedRuleContext(SolidityParser.PrimaryExpressionContext, 0) def identifier(self): - return self.getTypedRuleContext(SolidityParser.IdentifierContext,0) - + return self.getTypedRuleContext(SolidityParser.IdentifierContext, 0) def nameValueList(self): - return self.getTypedRuleContext(SolidityParser.NameValueListContext,0) - + return self.getTypedRuleContext(SolidityParser.NameValueListContext, 0) def functionCallArguments(self): - return self.getTypedRuleContext(SolidityParser.FunctionCallArgumentsContext,0) - + return self.getTypedRuleContext( + SolidityParser.FunctionCallArgumentsContext, 0 + ) def getRuleIndex(self): return SolidityParser.RULE_expression - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterExpression" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterExpression"): listener.enterExpression(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitExpression" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitExpression"): listener.exitExpression(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitExpression" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitExpression"): return visitor.visitExpression(self) else: return visitor.visitChildren(self) - - - def expression(self, _p:int=0): + def expression(self, _p: int = 0): _parentctx = self._ctx _parentState = self.state localctx = SolidityParser.ExpressionContext(self, self._ctx, _parentState) _prevctx = localctx _startState = 140 self.enterRecursionRule(localctx, 140, self.RULE_expression, _p) - self._la = 0 # Token type + self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) self.state = 837 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,90,self._ctx) + la_ = self._interp.adaptivePredict(self._input, 90, self._ctx) if la_ == 1: self.state = 820 self.match(SolidityParser.T__68) @@ -6378,7 +7622,7 @@ def expression(self, _p:int=0): elif la_ == 3: self.state = 826 _la = self._input.LA(1) - if not(_la==SolidityParser.T__66 or _la==SolidityParser.T__67): + if not (_la == SolidityParser.T__66 or _la == SolidityParser.T__67): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -6390,7 +7634,7 @@ def expression(self, _p:int=0): elif la_ == 4: self.state = 828 _la = self._input.LA(1) - if not(_la==SolidityParser.T__29 or _la==SolidityParser.T__30): + if not (_la == SolidityParser.T__29 or _la == SolidityParser.T__30): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -6425,26 +7669,32 @@ def expression(self, _p:int=0): self.primaryExpression() pass - self._ctx.stop = self._input.LT(-1) self.state = 913 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,94,self._ctx) - while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: - if _alt==1: + _alt = self._interp.adaptivePredict(self._input, 94, self._ctx) + while _alt != 2 and _alt != ATN.INVALID_ALT_NUMBER: + if _alt == 1: if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx self.state = 911 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,93,self._ctx) + la_ = self._interp.adaptivePredict(self._input, 93, self._ctx) if la_ == 1: - localctx = SolidityParser.ExpressionContext(self, _parentctx, _parentState) - self.pushNewRecursionContext(localctx, _startState, self.RULE_expression) + localctx = SolidityParser.ExpressionContext( + self, _parentctx, _parentState + ) + self.pushNewRecursionContext( + localctx, _startState, self.RULE_expression + ) self.state = 839 if not self.precpred(self._ctx, 14): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 14)") + + raise FailedPredicateException( + self, "self.precpred(self._ctx, 14)" + ) self.state = 840 self.match(SolidityParser.T__72) self.state = 841 @@ -6452,15 +7702,35 @@ def expression(self, _p:int=0): pass elif la_ == 2: - localctx = SolidityParser.ExpressionContext(self, _parentctx, _parentState) - self.pushNewRecursionContext(localctx, _startState, self.RULE_expression) + localctx = SolidityParser.ExpressionContext( + self, _parentctx, _parentState + ) + self.pushNewRecursionContext( + localctx, _startState, self.RULE_expression + ) self.state = 842 if not self.precpred(self._ctx, 13): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 13)") + + raise FailedPredicateException( + self, "self.precpred(self._ctx, 13)" + ) self.state = 843 _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__2) | (1 << SolidityParser.T__31) | (1 << SolidityParser.T__32))) != 0)): + if not ( + ( + ((_la) & ~0x3F) == 0 + and ( + (1 << _la) + & ( + (1 << SolidityParser.T__2) + | (1 << SolidityParser.T__31) + | (1 << SolidityParser.T__32) + ) + ) + != 0 + ) + ): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -6470,15 +7740,24 @@ def expression(self, _p:int=0): pass elif la_ == 3: - localctx = SolidityParser.ExpressionContext(self, _parentctx, _parentState) - self.pushNewRecursionContext(localctx, _startState, self.RULE_expression) + localctx = SolidityParser.ExpressionContext( + self, _parentctx, _parentState + ) + self.pushNewRecursionContext( + localctx, _startState, self.RULE_expression + ) self.state = 845 if not self.precpred(self._ctx, 12): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 12)") + + raise FailedPredicateException( + self, "self.precpred(self._ctx, 12)" + ) self.state = 846 _la = self._input.LA(1) - if not(_la==SolidityParser.T__29 or _la==SolidityParser.T__30): + if not ( + _la == SolidityParser.T__29 or _la == SolidityParser.T__30 + ): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -6488,15 +7767,24 @@ def expression(self, _p:int=0): pass elif la_ == 4: - localctx = SolidityParser.ExpressionContext(self, _parentctx, _parentState) - self.pushNewRecursionContext(localctx, _startState, self.RULE_expression) + localctx = SolidityParser.ExpressionContext( + self, _parentctx, _parentState + ) + self.pushNewRecursionContext( + localctx, _startState, self.RULE_expression + ) self.state = 848 if not self.precpred(self._ctx, 11): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 11)") + + raise FailedPredicateException( + self, "self.precpred(self._ctx, 11)" + ) self.state = 849 _la = self._input.LA(1) - if not(_la==SolidityParser.T__73 or _la==SolidityParser.T__74): + if not ( + _la == SolidityParser.T__73 or _la == SolidityParser.T__74 + ): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -6506,12 +7794,19 @@ def expression(self, _p:int=0): pass elif la_ == 5: - localctx = SolidityParser.ExpressionContext(self, _parentctx, _parentState) - self.pushNewRecursionContext(localctx, _startState, self.RULE_expression) + localctx = SolidityParser.ExpressionContext( + self, _parentctx, _parentState + ) + self.pushNewRecursionContext( + localctx, _startState, self.RULE_expression + ) self.state = 851 if not self.precpred(self._ctx, 10): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 10)") + + raise FailedPredicateException( + self, "self.precpred(self._ctx, 10)" + ) self.state = 852 self.match(SolidityParser.T__28) self.state = 853 @@ -6519,12 +7814,19 @@ def expression(self, _p:int=0): pass elif la_ == 6: - localctx = SolidityParser.ExpressionContext(self, _parentctx, _parentState) - self.pushNewRecursionContext(localctx, _startState, self.RULE_expression) + localctx = SolidityParser.ExpressionContext( + self, _parentctx, _parentState + ) + self.pushNewRecursionContext( + localctx, _startState, self.RULE_expression + ) self.state = 854 if not self.precpred(self._ctx, 9): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 9)") + + raise FailedPredicateException( + self, "self.precpred(self._ctx, 9)" + ) self.state = 855 self.match(SolidityParser.T__4) self.state = 856 @@ -6532,12 +7834,19 @@ def expression(self, _p:int=0): pass elif la_ == 7: - localctx = SolidityParser.ExpressionContext(self, _parentctx, _parentState) - self.pushNewRecursionContext(localctx, _startState, self.RULE_expression) + localctx = SolidityParser.ExpressionContext( + self, _parentctx, _parentState + ) + self.pushNewRecursionContext( + localctx, _startState, self.RULE_expression + ) self.state = 857 if not self.precpred(self._ctx, 8): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 8)") + + raise FailedPredicateException( + self, "self.precpred(self._ctx, 8)" + ) self.state = 858 self.match(SolidityParser.T__27) self.state = 859 @@ -6545,15 +7854,36 @@ def expression(self, _p:int=0): pass elif la_ == 8: - localctx = SolidityParser.ExpressionContext(self, _parentctx, _parentState) - self.pushNewRecursionContext(localctx, _startState, self.RULE_expression) + localctx = SolidityParser.ExpressionContext( + self, _parentctx, _parentState + ) + self.pushNewRecursionContext( + localctx, _startState, self.RULE_expression + ) self.state = 860 if not self.precpred(self._ctx, 7): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 7)") + + raise FailedPredicateException( + self, "self.precpred(self._ctx, 7)" + ) self.state = 861 _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__6) | (1 << SolidityParser.T__7) | (1 << SolidityParser.T__8) | (1 << SolidityParser.T__9))) != 0)): + if not ( + ( + ((_la) & ~0x3F) == 0 + and ( + (1 << _la) + & ( + (1 << SolidityParser.T__6) + | (1 << SolidityParser.T__7) + | (1 << SolidityParser.T__8) + | (1 << SolidityParser.T__9) + ) + ) + != 0 + ) + ): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -6563,15 +7893,24 @@ def expression(self, _p:int=0): pass elif la_ == 9: - localctx = SolidityParser.ExpressionContext(self, _parentctx, _parentState) - self.pushNewRecursionContext(localctx, _startState, self.RULE_expression) + localctx = SolidityParser.ExpressionContext( + self, _parentctx, _parentState + ) + self.pushNewRecursionContext( + localctx, _startState, self.RULE_expression + ) self.state = 863 if not self.precpred(self._ctx, 6): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 6)") + + raise FailedPredicateException( + self, "self.precpred(self._ctx, 6)" + ) self.state = 864 _la = self._input.LA(1) - if not(_la==SolidityParser.T__33 or _la==SolidityParser.T__34): + if not ( + _la == SolidityParser.T__33 or _la == SolidityParser.T__34 + ): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -6581,12 +7920,19 @@ def expression(self, _p:int=0): pass elif la_ == 10: - localctx = SolidityParser.ExpressionContext(self, _parentctx, _parentState) - self.pushNewRecursionContext(localctx, _startState, self.RULE_expression) + localctx = SolidityParser.ExpressionContext( + self, _parentctx, _parentState + ) + self.pushNewRecursionContext( + localctx, _startState, self.RULE_expression + ) self.state = 866 if not self.precpred(self._ctx, 5): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 5)") + + raise FailedPredicateException( + self, "self.precpred(self._ctx, 5)" + ) self.state = 867 self.match(SolidityParser.T__75) self.state = 868 @@ -6594,12 +7940,19 @@ def expression(self, _p:int=0): pass elif la_ == 11: - localctx = SolidityParser.ExpressionContext(self, _parentctx, _parentState) - self.pushNewRecursionContext(localctx, _startState, self.RULE_expression) + localctx = SolidityParser.ExpressionContext( + self, _parentctx, _parentState + ) + self.pushNewRecursionContext( + localctx, _startState, self.RULE_expression + ) self.state = 869 if not self.precpred(self._ctx, 4): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 4)") + + raise FailedPredicateException( + self, "self.precpred(self._ctx, 4)" + ) self.state = 870 self.match(SolidityParser.T__3) self.state = 871 @@ -6607,12 +7960,19 @@ def expression(self, _p:int=0): pass elif la_ == 12: - localctx = SolidityParser.ExpressionContext(self, _parentctx, _parentState) - self.pushNewRecursionContext(localctx, _startState, self.RULE_expression) + localctx = SolidityParser.ExpressionContext( + self, _parentctx, _parentState + ) + self.pushNewRecursionContext( + localctx, _startState, self.RULE_expression + ) self.state = 872 if not self.precpred(self._ctx, 3): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") + + raise FailedPredicateException( + self, "self.precpred(self._ctx, 3)" + ) self.state = 873 self.match(SolidityParser.T__76) self.state = 874 @@ -6624,15 +7984,43 @@ def expression(self, _p:int=0): pass elif la_ == 13: - localctx = SolidityParser.ExpressionContext(self, _parentctx, _parentState) - self.pushNewRecursionContext(localctx, _startState, self.RULE_expression) + localctx = SolidityParser.ExpressionContext( + self, _parentctx, _parentState + ) + self.pushNewRecursionContext( + localctx, _startState, self.RULE_expression + ) self.state = 878 if not self.precpred(self._ctx, 2): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") + + raise FailedPredicateException( + self, "self.precpred(self._ctx, 2)" + ) self.state = 879 _la = self._input.LA(1) - if not(_la==SolidityParser.T__10 or ((((_la - 78)) & ~0x3f) == 0 and ((1 << (_la - 78)) & ((1 << (SolidityParser.T__77 - 78)) | (1 << (SolidityParser.T__78 - 78)) | (1 << (SolidityParser.T__79 - 78)) | (1 << (SolidityParser.T__80 - 78)) | (1 << (SolidityParser.T__81 - 78)) | (1 << (SolidityParser.T__82 - 78)) | (1 << (SolidityParser.T__83 - 78)) | (1 << (SolidityParser.T__84 - 78)) | (1 << (SolidityParser.T__85 - 78)) | (1 << (SolidityParser.T__86 - 78)))) != 0)): + if not ( + _la == SolidityParser.T__10 + or ( + (((_la - 78)) & ~0x3F) == 0 + and ( + (1 << (_la - 78)) + & ( + (1 << (SolidityParser.T__77 - 78)) + | (1 << (SolidityParser.T__78 - 78)) + | (1 << (SolidityParser.T__79 - 78)) + | (1 << (SolidityParser.T__80 - 78)) + | (1 << (SolidityParser.T__81 - 78)) + | (1 << (SolidityParser.T__82 - 78)) + | (1 << (SolidityParser.T__83 - 78)) + | (1 << (SolidityParser.T__84 - 78)) + | (1 << (SolidityParser.T__85 - 78)) + | (1 << (SolidityParser.T__86 - 78)) + ) + ) + != 0 + ) + ): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -6642,15 +8030,24 @@ def expression(self, _p:int=0): pass elif la_ == 14: - localctx = SolidityParser.ExpressionContext(self, _parentctx, _parentState) - self.pushNewRecursionContext(localctx, _startState, self.RULE_expression) + localctx = SolidityParser.ExpressionContext( + self, _parentctx, _parentState + ) + self.pushNewRecursionContext( + localctx, _startState, self.RULE_expression + ) self.state = 881 if not self.precpred(self._ctx, 27): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 27)") + + raise FailedPredicateException( + self, "self.precpred(self._ctx, 27)" + ) self.state = 882 _la = self._input.LA(1) - if not(_la==SolidityParser.T__66 or _la==SolidityParser.T__67): + if not ( + _la == SolidityParser.T__66 or _la == SolidityParser.T__67 + ): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -6658,12 +8055,19 @@ def expression(self, _p:int=0): pass elif la_ == 15: - localctx = SolidityParser.ExpressionContext(self, _parentctx, _parentState) - self.pushNewRecursionContext(localctx, _startState, self.RULE_expression) + localctx = SolidityParser.ExpressionContext( + self, _parentctx, _parentState + ) + self.pushNewRecursionContext( + localctx, _startState, self.RULE_expression + ) self.state = 883 if not self.precpred(self._ctx, 25): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 25)") + + raise FailedPredicateException( + self, "self.precpred(self._ctx, 25)" + ) self.state = 884 self.match(SolidityParser.T__41) self.state = 885 @@ -6673,43 +8077,165 @@ def expression(self, _p:int=0): pass elif la_ == 16: - localctx = SolidityParser.ExpressionContext(self, _parentctx, _parentState) - self.pushNewRecursionContext(localctx, _startState, self.RULE_expression) + localctx = SolidityParser.ExpressionContext( + self, _parentctx, _parentState + ) + self.pushNewRecursionContext( + localctx, _startState, self.RULE_expression + ) self.state = 888 if not self.precpred(self._ctx, 24): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 24)") + + raise FailedPredicateException( + self, "self.precpred(self._ctx, 24)" + ) self.state = 889 self.match(SolidityParser.T__41) self.state = 891 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 6)) & ~0x3f) == 0 and ((1 << (_la - 6)) & ((1 << (SolidityParser.T__5 - 6)) | (1 << (SolidityParser.T__13 - 6)) | (1 << (SolidityParser.T__22 - 6)) | (1 << (SolidityParser.T__24 - 6)) | (1 << (SolidityParser.T__29 - 6)) | (1 << (SolidityParser.T__30 - 6)) | (1 << (SolidityParser.T__37 - 6)) | (1 << (SolidityParser.T__41 - 6)) | (1 << (SolidityParser.T__43 - 6)) | (1 << (SolidityParser.T__45 - 6)) | (1 << (SolidityParser.T__49 - 6)) | (1 << (SolidityParser.T__61 - 6)) | (1 << (SolidityParser.T__62 - 6)) | (1 << (SolidityParser.T__63 - 6)) | (1 << (SolidityParser.T__64 - 6)) | (1 << (SolidityParser.T__65 - 6)) | (1 << (SolidityParser.T__66 - 6)) | (1 << (SolidityParser.T__67 - 6)) | (1 << (SolidityParser.T__68 - 6)))) != 0) or ((((_la - 71)) & ~0x3f) == 0 and ((1 << (_la - 71)) & ((1 << (SolidityParser.T__70 - 71)) | (1 << (SolidityParser.T__71 - 71)) | (1 << (SolidityParser.T__94 - 71)) | (1 << (SolidityParser.Int - 71)) | (1 << (SolidityParser.Uint - 71)) | (1 << (SolidityParser.Byte - 71)) | (1 << (SolidityParser.Fixed - 71)) | (1 << (SolidityParser.Ufixed - 71)) | (1 << (SolidityParser.BooleanLiteral - 71)) | (1 << (SolidityParser.DecimalNumber - 71)) | (1 << (SolidityParser.HexNumber - 71)) | (1 << (SolidityParser.HexLiteralFragment - 71)) | (1 << (SolidityParser.LeaveKeyword - 71)) | (1 << (SolidityParser.PayableKeyword - 71)) | (1 << (SolidityParser.TypeKeyword - 71)) | (1 << (SolidityParser.GlobalKeyword - 71)) | (1 << (SolidityParser.ConstructorKeyword - 71)) | (1 << (SolidityParser.ReceiveKeyword - 71)) | (1 << (SolidityParser.Identifier - 71)) | (1 << (SolidityParser.StringLiteralFragment - 71)))) != 0): + if ( + (((_la - 6)) & ~0x3F) == 0 + and ( + (1 << (_la - 6)) + & ( + (1 << (SolidityParser.T__5 - 6)) + | (1 << (SolidityParser.T__13 - 6)) + | (1 << (SolidityParser.T__22 - 6)) + | (1 << (SolidityParser.T__24 - 6)) + | (1 << (SolidityParser.T__29 - 6)) + | (1 << (SolidityParser.T__30 - 6)) + | (1 << (SolidityParser.T__37 - 6)) + | (1 << (SolidityParser.T__41 - 6)) + | (1 << (SolidityParser.T__43 - 6)) + | (1 << (SolidityParser.T__45 - 6)) + | (1 << (SolidityParser.T__49 - 6)) + | (1 << (SolidityParser.T__61 - 6)) + | (1 << (SolidityParser.T__62 - 6)) + | (1 << (SolidityParser.T__63 - 6)) + | (1 << (SolidityParser.T__64 - 6)) + | (1 << (SolidityParser.T__65 - 6)) + | (1 << (SolidityParser.T__66 - 6)) + | (1 << (SolidityParser.T__67 - 6)) + | (1 << (SolidityParser.T__68 - 6)) + ) + ) + != 0 + ) or ( + (((_la - 71)) & ~0x3F) == 0 + and ( + (1 << (_la - 71)) + & ( + (1 << (SolidityParser.T__70 - 71)) + | (1 << (SolidityParser.T__71 - 71)) + | (1 << (SolidityParser.T__94 - 71)) + | (1 << (SolidityParser.Int - 71)) + | (1 << (SolidityParser.Uint - 71)) + | (1 << (SolidityParser.Byte - 71)) + | (1 << (SolidityParser.Fixed - 71)) + | (1 << (SolidityParser.Ufixed - 71)) + | (1 << (SolidityParser.BooleanLiteral - 71)) + | (1 << (SolidityParser.DecimalNumber - 71)) + | (1 << (SolidityParser.HexNumber - 71)) + | (1 << (SolidityParser.HexLiteralFragment - 71)) + | (1 << (SolidityParser.LeaveKeyword - 71)) + | (1 << (SolidityParser.PayableKeyword - 71)) + | (1 << (SolidityParser.TypeKeyword - 71)) + | (1 << (SolidityParser.GlobalKeyword - 71)) + | (1 << (SolidityParser.ConstructorKeyword - 71)) + | (1 << (SolidityParser.ReceiveKeyword - 71)) + | (1 << (SolidityParser.Identifier - 71)) + | (1 << (SolidityParser.StringLiteralFragment - 71)) + ) + ) + != 0 + ): self.state = 890 self.expression(0) - self.state = 893 self.match(SolidityParser.T__69) self.state = 895 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 6)) & ~0x3f) == 0 and ((1 << (_la - 6)) & ((1 << (SolidityParser.T__5 - 6)) | (1 << (SolidityParser.T__13 - 6)) | (1 << (SolidityParser.T__22 - 6)) | (1 << (SolidityParser.T__24 - 6)) | (1 << (SolidityParser.T__29 - 6)) | (1 << (SolidityParser.T__30 - 6)) | (1 << (SolidityParser.T__37 - 6)) | (1 << (SolidityParser.T__41 - 6)) | (1 << (SolidityParser.T__43 - 6)) | (1 << (SolidityParser.T__45 - 6)) | (1 << (SolidityParser.T__49 - 6)) | (1 << (SolidityParser.T__61 - 6)) | (1 << (SolidityParser.T__62 - 6)) | (1 << (SolidityParser.T__63 - 6)) | (1 << (SolidityParser.T__64 - 6)) | (1 << (SolidityParser.T__65 - 6)) | (1 << (SolidityParser.T__66 - 6)) | (1 << (SolidityParser.T__67 - 6)) | (1 << (SolidityParser.T__68 - 6)))) != 0) or ((((_la - 71)) & ~0x3f) == 0 and ((1 << (_la - 71)) & ((1 << (SolidityParser.T__70 - 71)) | (1 << (SolidityParser.T__71 - 71)) | (1 << (SolidityParser.T__94 - 71)) | (1 << (SolidityParser.Int - 71)) | (1 << (SolidityParser.Uint - 71)) | (1 << (SolidityParser.Byte - 71)) | (1 << (SolidityParser.Fixed - 71)) | (1 << (SolidityParser.Ufixed - 71)) | (1 << (SolidityParser.BooleanLiteral - 71)) | (1 << (SolidityParser.DecimalNumber - 71)) | (1 << (SolidityParser.HexNumber - 71)) | (1 << (SolidityParser.HexLiteralFragment - 71)) | (1 << (SolidityParser.LeaveKeyword - 71)) | (1 << (SolidityParser.PayableKeyword - 71)) | (1 << (SolidityParser.TypeKeyword - 71)) | (1 << (SolidityParser.GlobalKeyword - 71)) | (1 << (SolidityParser.ConstructorKeyword - 71)) | (1 << (SolidityParser.ReceiveKeyword - 71)) | (1 << (SolidityParser.Identifier - 71)) | (1 << (SolidityParser.StringLiteralFragment - 71)))) != 0): + if ( + (((_la - 6)) & ~0x3F) == 0 + and ( + (1 << (_la - 6)) + & ( + (1 << (SolidityParser.T__5 - 6)) + | (1 << (SolidityParser.T__13 - 6)) + | (1 << (SolidityParser.T__22 - 6)) + | (1 << (SolidityParser.T__24 - 6)) + | (1 << (SolidityParser.T__29 - 6)) + | (1 << (SolidityParser.T__30 - 6)) + | (1 << (SolidityParser.T__37 - 6)) + | (1 << (SolidityParser.T__41 - 6)) + | (1 << (SolidityParser.T__43 - 6)) + | (1 << (SolidityParser.T__45 - 6)) + | (1 << (SolidityParser.T__49 - 6)) + | (1 << (SolidityParser.T__61 - 6)) + | (1 << (SolidityParser.T__62 - 6)) + | (1 << (SolidityParser.T__63 - 6)) + | (1 << (SolidityParser.T__64 - 6)) + | (1 << (SolidityParser.T__65 - 6)) + | (1 << (SolidityParser.T__66 - 6)) + | (1 << (SolidityParser.T__67 - 6)) + | (1 << (SolidityParser.T__68 - 6)) + ) + ) + != 0 + ) or ( + (((_la - 71)) & ~0x3F) == 0 + and ( + (1 << (_la - 71)) + & ( + (1 << (SolidityParser.T__70 - 71)) + | (1 << (SolidityParser.T__71 - 71)) + | (1 << (SolidityParser.T__94 - 71)) + | (1 << (SolidityParser.Int - 71)) + | (1 << (SolidityParser.Uint - 71)) + | (1 << (SolidityParser.Byte - 71)) + | (1 << (SolidityParser.Fixed - 71)) + | (1 << (SolidityParser.Ufixed - 71)) + | (1 << (SolidityParser.BooleanLiteral - 71)) + | (1 << (SolidityParser.DecimalNumber - 71)) + | (1 << (SolidityParser.HexNumber - 71)) + | (1 << (SolidityParser.HexLiteralFragment - 71)) + | (1 << (SolidityParser.LeaveKeyword - 71)) + | (1 << (SolidityParser.PayableKeyword - 71)) + | (1 << (SolidityParser.TypeKeyword - 71)) + | (1 << (SolidityParser.GlobalKeyword - 71)) + | (1 << (SolidityParser.ConstructorKeyword - 71)) + | (1 << (SolidityParser.ReceiveKeyword - 71)) + | (1 << (SolidityParser.Identifier - 71)) + | (1 << (SolidityParser.StringLiteralFragment - 71)) + ) + ) + != 0 + ): self.state = 894 self.expression(0) - self.state = 897 self.match(SolidityParser.T__42) pass elif la_ == 17: - localctx = SolidityParser.ExpressionContext(self, _parentctx, _parentState) - self.pushNewRecursionContext(localctx, _startState, self.RULE_expression) + localctx = SolidityParser.ExpressionContext( + self, _parentctx, _parentState + ) + self.pushNewRecursionContext( + localctx, _startState, self.RULE_expression + ) self.state = 898 if not self.precpred(self._ctx, 23): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 23)") + + raise FailedPredicateException( + self, "self.precpred(self._ctx, 23)" + ) self.state = 899 self.match(SolidityParser.T__44) self.state = 900 @@ -6717,12 +8243,19 @@ def expression(self, _p:int=0): pass elif la_ == 18: - localctx = SolidityParser.ExpressionContext(self, _parentctx, _parentState) - self.pushNewRecursionContext(localctx, _startState, self.RULE_expression) + localctx = SolidityParser.ExpressionContext( + self, _parentctx, _parentState + ) + self.pushNewRecursionContext( + localctx, _startState, self.RULE_expression + ) self.state = 901 if not self.precpred(self._ctx, 22): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 22)") + + raise FailedPredicateException( + self, "self.precpred(self._ctx, 22)" + ) self.state = 902 self.match(SolidityParser.T__14) self.state = 903 @@ -6732,12 +8265,19 @@ def expression(self, _p:int=0): pass elif la_ == 19: - localctx = SolidityParser.ExpressionContext(self, _parentctx, _parentState) - self.pushNewRecursionContext(localctx, _startState, self.RULE_expression) + localctx = SolidityParser.ExpressionContext( + self, _parentctx, _parentState + ) + self.pushNewRecursionContext( + localctx, _startState, self.RULE_expression + ) self.state = 906 if not self.precpred(self._ctx, 21): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 21)") + + raise FailedPredicateException( + self, "self.precpred(self._ctx, 21)" + ) self.state = 907 self.match(SolidityParser.T__22) self.state = 908 @@ -6746,10 +8286,9 @@ def expression(self, _p:int=0): self.match(SolidityParser.T__23) pass - self.state = 915 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,94,self._ctx) + _alt = self._interp.adaptivePredict(self._input, 94, self._ctx) except RecognitionException as re: localctx.exception = re @@ -6759,10 +8298,10 @@ def expression(self, _p:int=0): self.unrollRecursionContexts(_parentctx) return localctx - class PrimaryExpressionContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser @@ -6770,20 +8309,16 @@ def BooleanLiteral(self): return self.getToken(SolidityParser.BooleanLiteral, 0) def numberLiteral(self): - return self.getTypedRuleContext(SolidityParser.NumberLiteralContext,0) - + return self.getTypedRuleContext(SolidityParser.NumberLiteralContext, 0) def hexLiteral(self): - return self.getTypedRuleContext(SolidityParser.HexLiteralContext,0) - + return self.getTypedRuleContext(SolidityParser.HexLiteralContext, 0) def stringLiteral(self): - return self.getTypedRuleContext(SolidityParser.StringLiteralContext,0) - + return self.getTypedRuleContext(SolidityParser.StringLiteralContext, 0) def identifier(self): - return self.getTypedRuleContext(SolidityParser.IdentifierContext,0) - + return self.getTypedRuleContext(SolidityParser.IdentifierContext, 0) def TypeKeyword(self): return self.getToken(SolidityParser.TypeKeyword, 0) @@ -6792,41 +8327,35 @@ def PayableKeyword(self): return self.getToken(SolidityParser.PayableKeyword, 0) def tupleExpression(self): - return self.getTypedRuleContext(SolidityParser.TupleExpressionContext,0) - + return self.getTypedRuleContext(SolidityParser.TupleExpressionContext, 0) def typeName(self): - return self.getTypedRuleContext(SolidityParser.TypeNameContext,0) - + return self.getTypedRuleContext(SolidityParser.TypeNameContext, 0) def getRuleIndex(self): return SolidityParser.RULE_primaryExpression - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterPrimaryExpression" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterPrimaryExpression"): listener.enterPrimaryExpression(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitPrimaryExpression" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitPrimaryExpression"): listener.exitPrimaryExpression(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitPrimaryExpression" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitPrimaryExpression"): return visitor.visitPrimaryExpression(self) else: return visitor.visitChildren(self) - - - def primaryExpression(self): - localctx = SolidityParser.PrimaryExpressionContext(self, self._ctx, self.state) self.enterRule(localctx, 142, self.RULE_primaryExpression) try: self.state = 925 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,95,self._ctx) + la_ = self._interp.adaptivePredict(self._input, 95, self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) self.state = 916 @@ -6881,7 +8410,6 @@ def primaryExpression(self): self.typeName(0) pass - except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -6890,45 +8418,40 @@ def primaryExpression(self): self.exitRule() return localctx - class ExpressionListContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser - def expression(self, i:int=None): + def expression(self, i: int = None): if i is None: return self.getTypedRuleContexts(SolidityParser.ExpressionContext) else: - return self.getTypedRuleContext(SolidityParser.ExpressionContext,i) - + return self.getTypedRuleContext(SolidityParser.ExpressionContext, i) def getRuleIndex(self): return SolidityParser.RULE_expressionList - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterExpressionList" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterExpressionList"): listener.enterExpressionList(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitExpressionList" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitExpressionList"): listener.exitExpressionList(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitExpressionList" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitExpressionList"): return visitor.visitExpressionList(self) else: return visitor.visitChildren(self) - - - def expressionList(self): - localctx = SolidityParser.ExpressionListContext(self, self._ctx, self.state) self.enterRule(localctx, 144, self.RULE_expressionList) - self._la = 0 # Token type + self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) self.state = 927 @@ -6936,7 +8459,7 @@ def expressionList(self): self.state = 932 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==SolidityParser.T__15: + while _la == SolidityParser.T__15: self.state = 928 self.match(SolidityParser.T__15) self.state = 929 @@ -6953,70 +8476,64 @@ def expressionList(self): self.exitRule() return localctx - class NameValueListContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser - def nameValue(self, i:int=None): + def nameValue(self, i: int = None): if i is None: return self.getTypedRuleContexts(SolidityParser.NameValueContext) else: - return self.getTypedRuleContext(SolidityParser.NameValueContext,i) - + return self.getTypedRuleContext(SolidityParser.NameValueContext, i) def getRuleIndex(self): return SolidityParser.RULE_nameValueList - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterNameValueList" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterNameValueList"): listener.enterNameValueList(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitNameValueList" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitNameValueList"): listener.exitNameValueList(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitNameValueList" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitNameValueList"): return visitor.visitNameValueList(self) else: return visitor.visitChildren(self) - - - def nameValueList(self): - localctx = SolidityParser.NameValueListContext(self, self._ctx, self.state) self.enterRule(localctx, 146, self.RULE_nameValueList) - self._la = 0 # Token type + self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) self.state = 935 self.nameValue() self.state = 940 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,97,self._ctx) - while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: - if _alt==1: + _alt = self._interp.adaptivePredict(self._input, 97, self._ctx) + while _alt != 2 and _alt != ATN.INVALID_ALT_NUMBER: + if _alt == 1: self.state = 936 self.match(SolidityParser.T__15) self.state = 937 - self.nameValue() + self.nameValue() self.state = 942 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,97,self._ctx) + _alt = self._interp.adaptivePredict(self._input, 97, self._ctx) self.state = 944 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==SolidityParser.T__15: + if _la == SolidityParser.T__15: self.state = 943 self.match(SolidityParser.T__15) - except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -7025,43 +8542,37 @@ def nameValueList(self): self.exitRule() return localctx - class NameValueContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser def identifier(self): - return self.getTypedRuleContext(SolidityParser.IdentifierContext,0) - + return self.getTypedRuleContext(SolidityParser.IdentifierContext, 0) def expression(self): - return self.getTypedRuleContext(SolidityParser.ExpressionContext,0) - + return self.getTypedRuleContext(SolidityParser.ExpressionContext, 0) def getRuleIndex(self): return SolidityParser.RULE_nameValue - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterNameValue" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterNameValue"): listener.enterNameValue(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitNameValue" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitNameValue"): listener.exitNameValue(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitNameValue" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitNameValue"): return visitor.visitNameValue(self) else: return visitor.visitChildren(self) - - - def nameValue(self): - localctx = SolidityParser.NameValueContext(self, self._ctx, self.state) self.enterRule(localctx, 148, self.RULE_nameValue) try: @@ -7080,46 +8591,42 @@ def nameValue(self): self.exitRule() return localctx - class FunctionCallArgumentsContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser def nameValueList(self): - return self.getTypedRuleContext(SolidityParser.NameValueListContext,0) - + return self.getTypedRuleContext(SolidityParser.NameValueListContext, 0) def expressionList(self): - return self.getTypedRuleContext(SolidityParser.ExpressionListContext,0) - + return self.getTypedRuleContext(SolidityParser.ExpressionListContext, 0) def getRuleIndex(self): return SolidityParser.RULE_functionCallArguments - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterFunctionCallArguments" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterFunctionCallArguments"): listener.enterFunctionCallArguments(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitFunctionCallArguments" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitFunctionCallArguments"): listener.exitFunctionCallArguments(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitFunctionCallArguments" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitFunctionCallArguments"): return visitor.visitFunctionCallArguments(self) else: return visitor.visitChildren(self) - - - def functionCallArguments(self): - - localctx = SolidityParser.FunctionCallArgumentsContext(self, self._ctx, self.state) + localctx = SolidityParser.FunctionCallArgumentsContext( + self, self._ctx, self.state + ) self.enterRule(localctx, 150, self.RULE_functionCallArguments) - self._la = 0 # Token type + self._la = 0 # Token type try: self.state = 958 self._errHandler.sync(self) @@ -7131,24 +8638,146 @@ def functionCallArguments(self): self.state = 952 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__43) | (1 << SolidityParser.T__49) | (1 << SolidityParser.T__61))) != 0) or ((((_la - 95)) & ~0x3f) == 0 and ((1 << (_la - 95)) & ((1 << (SolidityParser.T__94 - 95)) | (1 << (SolidityParser.LeaveKeyword - 95)) | (1 << (SolidityParser.PayableKeyword - 95)) | (1 << (SolidityParser.GlobalKeyword - 95)) | (1 << (SolidityParser.ConstructorKeyword - 95)) | (1 << (SolidityParser.ReceiveKeyword - 95)) | (1 << (SolidityParser.Identifier - 95)))) != 0): + if ( + ((_la) & ~0x3F) == 0 + and ( + (1 << _la) + & ( + (1 << SolidityParser.T__13) + | (1 << SolidityParser.T__24) + | (1 << SolidityParser.T__43) + | (1 << SolidityParser.T__49) + | (1 << SolidityParser.T__61) + ) + ) + != 0 + ) or ( + (((_la - 95)) & ~0x3F) == 0 + and ( + (1 << (_la - 95)) + & ( + (1 << (SolidityParser.T__94 - 95)) + | (1 << (SolidityParser.LeaveKeyword - 95)) + | (1 << (SolidityParser.PayableKeyword - 95)) + | (1 << (SolidityParser.GlobalKeyword - 95)) + | (1 << (SolidityParser.ConstructorKeyword - 95)) + | (1 << (SolidityParser.ReceiveKeyword - 95)) + | (1 << (SolidityParser.Identifier - 95)) + ) + ) + != 0 + ): self.state = 951 self.nameValueList() - self.state = 954 self.match(SolidityParser.T__16) pass - elif token in [SolidityParser.T__5, SolidityParser.T__13, SolidityParser.T__22, SolidityParser.T__23, SolidityParser.T__24, SolidityParser.T__29, SolidityParser.T__30, SolidityParser.T__37, SolidityParser.T__41, SolidityParser.T__43, SolidityParser.T__45, SolidityParser.T__49, SolidityParser.T__61, SolidityParser.T__62, SolidityParser.T__63, SolidityParser.T__64, SolidityParser.T__65, SolidityParser.T__66, SolidityParser.T__67, SolidityParser.T__68, SolidityParser.T__70, SolidityParser.T__71, SolidityParser.T__94, SolidityParser.Int, SolidityParser.Uint, SolidityParser.Byte, SolidityParser.Fixed, SolidityParser.Ufixed, SolidityParser.BooleanLiteral, SolidityParser.DecimalNumber, SolidityParser.HexNumber, SolidityParser.HexLiteralFragment, SolidityParser.LeaveKeyword, SolidityParser.PayableKeyword, SolidityParser.TypeKeyword, SolidityParser.GlobalKeyword, SolidityParser.ConstructorKeyword, SolidityParser.ReceiveKeyword, SolidityParser.Identifier, SolidityParser.StringLiteralFragment]: + elif token in [ + SolidityParser.T__5, + SolidityParser.T__13, + SolidityParser.T__22, + SolidityParser.T__23, + SolidityParser.T__24, + SolidityParser.T__29, + SolidityParser.T__30, + SolidityParser.T__37, + SolidityParser.T__41, + SolidityParser.T__43, + SolidityParser.T__45, + SolidityParser.T__49, + SolidityParser.T__61, + SolidityParser.T__62, + SolidityParser.T__63, + SolidityParser.T__64, + SolidityParser.T__65, + SolidityParser.T__66, + SolidityParser.T__67, + SolidityParser.T__68, + SolidityParser.T__70, + SolidityParser.T__71, + SolidityParser.T__94, + SolidityParser.Int, + SolidityParser.Uint, + SolidityParser.Byte, + SolidityParser.Fixed, + SolidityParser.Ufixed, + SolidityParser.BooleanLiteral, + SolidityParser.DecimalNumber, + SolidityParser.HexNumber, + SolidityParser.HexLiteralFragment, + SolidityParser.LeaveKeyword, + SolidityParser.PayableKeyword, + SolidityParser.TypeKeyword, + SolidityParser.GlobalKeyword, + SolidityParser.ConstructorKeyword, + SolidityParser.ReceiveKeyword, + SolidityParser.Identifier, + SolidityParser.StringLiteralFragment, + ]: self.enterOuterAlt(localctx, 2) self.state = 956 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 6)) & ~0x3f) == 0 and ((1 << (_la - 6)) & ((1 << (SolidityParser.T__5 - 6)) | (1 << (SolidityParser.T__13 - 6)) | (1 << (SolidityParser.T__22 - 6)) | (1 << (SolidityParser.T__24 - 6)) | (1 << (SolidityParser.T__29 - 6)) | (1 << (SolidityParser.T__30 - 6)) | (1 << (SolidityParser.T__37 - 6)) | (1 << (SolidityParser.T__41 - 6)) | (1 << (SolidityParser.T__43 - 6)) | (1 << (SolidityParser.T__45 - 6)) | (1 << (SolidityParser.T__49 - 6)) | (1 << (SolidityParser.T__61 - 6)) | (1 << (SolidityParser.T__62 - 6)) | (1 << (SolidityParser.T__63 - 6)) | (1 << (SolidityParser.T__64 - 6)) | (1 << (SolidityParser.T__65 - 6)) | (1 << (SolidityParser.T__66 - 6)) | (1 << (SolidityParser.T__67 - 6)) | (1 << (SolidityParser.T__68 - 6)))) != 0) or ((((_la - 71)) & ~0x3f) == 0 and ((1 << (_la - 71)) & ((1 << (SolidityParser.T__70 - 71)) | (1 << (SolidityParser.T__71 - 71)) | (1 << (SolidityParser.T__94 - 71)) | (1 << (SolidityParser.Int - 71)) | (1 << (SolidityParser.Uint - 71)) | (1 << (SolidityParser.Byte - 71)) | (1 << (SolidityParser.Fixed - 71)) | (1 << (SolidityParser.Ufixed - 71)) | (1 << (SolidityParser.BooleanLiteral - 71)) | (1 << (SolidityParser.DecimalNumber - 71)) | (1 << (SolidityParser.HexNumber - 71)) | (1 << (SolidityParser.HexLiteralFragment - 71)) | (1 << (SolidityParser.LeaveKeyword - 71)) | (1 << (SolidityParser.PayableKeyword - 71)) | (1 << (SolidityParser.TypeKeyword - 71)) | (1 << (SolidityParser.GlobalKeyword - 71)) | (1 << (SolidityParser.ConstructorKeyword - 71)) | (1 << (SolidityParser.ReceiveKeyword - 71)) | (1 << (SolidityParser.Identifier - 71)) | (1 << (SolidityParser.StringLiteralFragment - 71)))) != 0): + if ( + (((_la - 6)) & ~0x3F) == 0 + and ( + (1 << (_la - 6)) + & ( + (1 << (SolidityParser.T__5 - 6)) + | (1 << (SolidityParser.T__13 - 6)) + | (1 << (SolidityParser.T__22 - 6)) + | (1 << (SolidityParser.T__24 - 6)) + | (1 << (SolidityParser.T__29 - 6)) + | (1 << (SolidityParser.T__30 - 6)) + | (1 << (SolidityParser.T__37 - 6)) + | (1 << (SolidityParser.T__41 - 6)) + | (1 << (SolidityParser.T__43 - 6)) + | (1 << (SolidityParser.T__45 - 6)) + | (1 << (SolidityParser.T__49 - 6)) + | (1 << (SolidityParser.T__61 - 6)) + | (1 << (SolidityParser.T__62 - 6)) + | (1 << (SolidityParser.T__63 - 6)) + | (1 << (SolidityParser.T__64 - 6)) + | (1 << (SolidityParser.T__65 - 6)) + | (1 << (SolidityParser.T__66 - 6)) + | (1 << (SolidityParser.T__67 - 6)) + | (1 << (SolidityParser.T__68 - 6)) + ) + ) + != 0 + ) or ( + (((_la - 71)) & ~0x3F) == 0 + and ( + (1 << (_la - 71)) + & ( + (1 << (SolidityParser.T__70 - 71)) + | (1 << (SolidityParser.T__71 - 71)) + | (1 << (SolidityParser.T__94 - 71)) + | (1 << (SolidityParser.Int - 71)) + | (1 << (SolidityParser.Uint - 71)) + | (1 << (SolidityParser.Byte - 71)) + | (1 << (SolidityParser.Fixed - 71)) + | (1 << (SolidityParser.Ufixed - 71)) + | (1 << (SolidityParser.BooleanLiteral - 71)) + | (1 << (SolidityParser.DecimalNumber - 71)) + | (1 << (SolidityParser.HexNumber - 71)) + | (1 << (SolidityParser.HexLiteralFragment - 71)) + | (1 << (SolidityParser.LeaveKeyword - 71)) + | (1 << (SolidityParser.PayableKeyword - 71)) + | (1 << (SolidityParser.TypeKeyword - 71)) + | (1 << (SolidityParser.GlobalKeyword - 71)) + | (1 << (SolidityParser.ConstructorKeyword - 71)) + | (1 << (SolidityParser.ReceiveKeyword - 71)) + | (1 << (SolidityParser.Identifier - 71)) + | (1 << (SolidityParser.StringLiteralFragment - 71)) + ) + ) + != 0 + ): self.state = 955 self.expressionList() - pass else: raise NoViableAltException(self) @@ -7161,43 +8790,39 @@ def functionCallArguments(self): self.exitRule() return localctx - class FunctionCallContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser def expression(self): - return self.getTypedRuleContext(SolidityParser.ExpressionContext,0) - + return self.getTypedRuleContext(SolidityParser.ExpressionContext, 0) def functionCallArguments(self): - return self.getTypedRuleContext(SolidityParser.FunctionCallArgumentsContext,0) - + return self.getTypedRuleContext( + SolidityParser.FunctionCallArgumentsContext, 0 + ) def getRuleIndex(self): return SolidityParser.RULE_functionCall - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterFunctionCall" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterFunctionCall"): listener.enterFunctionCall(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitFunctionCall" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitFunctionCall"): listener.exitFunctionCall(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitFunctionCall" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitFunctionCall"): return visitor.visitFunctionCall(self) else: return visitor.visitChildren(self) - - - def functionCall(self): - localctx = SolidityParser.FunctionCallContext(self, self._ctx, self.state) self.enterRule(localctx, 152, self.RULE_functionCall) try: @@ -7218,45 +8843,40 @@ def functionCall(self): self.exitRule() return localctx - class AssemblyBlockContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser - def assemblyItem(self, i:int=None): + def assemblyItem(self, i: int = None): if i is None: return self.getTypedRuleContexts(SolidityParser.AssemblyItemContext) else: - return self.getTypedRuleContext(SolidityParser.AssemblyItemContext,i) - + return self.getTypedRuleContext(SolidityParser.AssemblyItemContext, i) def getRuleIndex(self): return SolidityParser.RULE_assemblyBlock - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterAssemblyBlock" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterAssemblyBlock"): listener.enterAssemblyBlock(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitAssemblyBlock" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitAssemblyBlock"): listener.exitAssemblyBlock(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitAssemblyBlock" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitAssemblyBlock"): return visitor.visitAssemblyBlock(self) else: return visitor.visitChildren(self) - - - def assemblyBlock(self): - localctx = SolidityParser.AssemblyBlockContext(self, self._ctx, self.state) self.enterRule(localctx, 154, self.RULE_assemblyBlock) - self._la = 0 # Token type + self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) self.state = 965 @@ -7264,7 +8884,51 @@ def assemblyBlock(self): self.state = 969 self._errHandler.sync(self) _la = self._input.LA(1) - while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__14) | (1 << SolidityParser.T__22) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__26) | (1 << SolidityParser.T__37) | (1 << SolidityParser.T__43) | (1 << SolidityParser.T__49) | (1 << SolidityParser.T__50) | (1 << SolidityParser.T__58) | (1 << SolidityParser.T__61))) != 0) or ((((_la - 66)) & ~0x3f) == 0 and ((1 << (_la - 66)) & ((1 << (SolidityParser.T__65 - 66)) | (1 << (SolidityParser.T__87 - 66)) | (1 << (SolidityParser.T__90 - 66)) | (1 << (SolidityParser.T__94 - 66)) | (1 << (SolidityParser.BooleanLiteral - 66)) | (1 << (SolidityParser.DecimalNumber - 66)) | (1 << (SolidityParser.HexNumber - 66)) | (1 << (SolidityParser.HexLiteralFragment - 66)) | (1 << (SolidityParser.BreakKeyword - 66)) | (1 << (SolidityParser.ContinueKeyword - 66)) | (1 << (SolidityParser.LeaveKeyword - 66)) | (1 << (SolidityParser.PayableKeyword - 66)) | (1 << (SolidityParser.GlobalKeyword - 66)) | (1 << (SolidityParser.ConstructorKeyword - 66)) | (1 << (SolidityParser.ReceiveKeyword - 66)) | (1 << (SolidityParser.Identifier - 66)) | (1 << (SolidityParser.StringLiteralFragment - 66)))) != 0): + while ( + ((_la) & ~0x3F) == 0 + and ( + (1 << _la) + & ( + (1 << SolidityParser.T__13) + | (1 << SolidityParser.T__14) + | (1 << SolidityParser.T__22) + | (1 << SolidityParser.T__24) + | (1 << SolidityParser.T__26) + | (1 << SolidityParser.T__37) + | (1 << SolidityParser.T__43) + | (1 << SolidityParser.T__49) + | (1 << SolidityParser.T__50) + | (1 << SolidityParser.T__58) + | (1 << SolidityParser.T__61) + ) + ) + != 0 + ) or ( + (((_la - 66)) & ~0x3F) == 0 + and ( + (1 << (_la - 66)) + & ( + (1 << (SolidityParser.T__65 - 66)) + | (1 << (SolidityParser.T__87 - 66)) + | (1 << (SolidityParser.T__90 - 66)) + | (1 << (SolidityParser.T__94 - 66)) + | (1 << (SolidityParser.BooleanLiteral - 66)) + | (1 << (SolidityParser.DecimalNumber - 66)) + | (1 << (SolidityParser.HexNumber - 66)) + | (1 << (SolidityParser.HexLiteralFragment - 66)) + | (1 << (SolidityParser.BreakKeyword - 66)) + | (1 << (SolidityParser.ContinueKeyword - 66)) + | (1 << (SolidityParser.LeaveKeyword - 66)) + | (1 << (SolidityParser.PayableKeyword - 66)) + | (1 << (SolidityParser.GlobalKeyword - 66)) + | (1 << (SolidityParser.ConstructorKeyword - 66)) + | (1 << (SolidityParser.ReceiveKeyword - 66)) + | (1 << (SolidityParser.Identifier - 66)) + | (1 << (SolidityParser.StringLiteralFragment - 66)) + ) + ) + != 0 + ): self.state = 966 self.assemblyItem() self.state = 971 @@ -7281,56 +8945,51 @@ def assemblyBlock(self): self.exitRule() return localctx - class AssemblyItemContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser def identifier(self): - return self.getTypedRuleContext(SolidityParser.IdentifierContext,0) - + return self.getTypedRuleContext(SolidityParser.IdentifierContext, 0) def assemblyBlock(self): - return self.getTypedRuleContext(SolidityParser.AssemblyBlockContext,0) - + return self.getTypedRuleContext(SolidityParser.AssemblyBlockContext, 0) def assemblyExpression(self): - return self.getTypedRuleContext(SolidityParser.AssemblyExpressionContext,0) - + return self.getTypedRuleContext(SolidityParser.AssemblyExpressionContext, 0) def assemblyLocalDefinition(self): - return self.getTypedRuleContext(SolidityParser.AssemblyLocalDefinitionContext,0) - + return self.getTypedRuleContext( + SolidityParser.AssemblyLocalDefinitionContext, 0 + ) def assemblyAssignment(self): - return self.getTypedRuleContext(SolidityParser.AssemblyAssignmentContext,0) - + return self.getTypedRuleContext(SolidityParser.AssemblyAssignmentContext, 0) def assemblyStackAssignment(self): - return self.getTypedRuleContext(SolidityParser.AssemblyStackAssignmentContext,0) - + return self.getTypedRuleContext( + SolidityParser.AssemblyStackAssignmentContext, 0 + ) def labelDefinition(self): - return self.getTypedRuleContext(SolidityParser.LabelDefinitionContext,0) - + return self.getTypedRuleContext(SolidityParser.LabelDefinitionContext, 0) def assemblySwitch(self): - return self.getTypedRuleContext(SolidityParser.AssemblySwitchContext,0) - + return self.getTypedRuleContext(SolidityParser.AssemblySwitchContext, 0) def assemblyFunctionDefinition(self): - return self.getTypedRuleContext(SolidityParser.AssemblyFunctionDefinitionContext,0) - + return self.getTypedRuleContext( + SolidityParser.AssemblyFunctionDefinitionContext, 0 + ) def assemblyFor(self): - return self.getTypedRuleContext(SolidityParser.AssemblyForContext,0) - + return self.getTypedRuleContext(SolidityParser.AssemblyForContext, 0) def assemblyIf(self): - return self.getTypedRuleContext(SolidityParser.AssemblyIfContext,0) - + return self.getTypedRuleContext(SolidityParser.AssemblyIfContext, 0) def BreakKeyword(self): return self.getToken(SolidityParser.BreakKeyword, 0) @@ -7342,45 +9001,38 @@ def LeaveKeyword(self): return self.getToken(SolidityParser.LeaveKeyword, 0) def numberLiteral(self): - return self.getTypedRuleContext(SolidityParser.NumberLiteralContext,0) - + return self.getTypedRuleContext(SolidityParser.NumberLiteralContext, 0) def stringLiteral(self): - return self.getTypedRuleContext(SolidityParser.StringLiteralContext,0) - + return self.getTypedRuleContext(SolidityParser.StringLiteralContext, 0) def hexLiteral(self): - return self.getTypedRuleContext(SolidityParser.HexLiteralContext,0) - + return self.getTypedRuleContext(SolidityParser.HexLiteralContext, 0) def getRuleIndex(self): return SolidityParser.RULE_assemblyItem - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterAssemblyItem" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterAssemblyItem"): listener.enterAssemblyItem(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitAssemblyItem" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitAssemblyItem"): listener.exitAssemblyItem(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitAssemblyItem" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitAssemblyItem"): return visitor.visitAssemblyItem(self) else: return visitor.visitChildren(self) - - - def assemblyItem(self): - localctx = SolidityParser.AssemblyItemContext(self, self._ctx, self.state) self.enterRule(localctx, 156, self.RULE_assemblyItem) try: self.state = 991 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,103,self._ctx) + la_ = self._interp.adaptivePredict(self._input, 103, self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) self.state = 974 @@ -7483,7 +9135,6 @@ def assemblyItem(self): self.hexLiteral() pass - except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -7492,53 +9143,46 @@ def assemblyItem(self): self.exitRule() return localctx - class AssemblyExpressionContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser def assemblyCall(self): - return self.getTypedRuleContext(SolidityParser.AssemblyCallContext,0) - + return self.getTypedRuleContext(SolidityParser.AssemblyCallContext, 0) def assemblyLiteral(self): - return self.getTypedRuleContext(SolidityParser.AssemblyLiteralContext,0) - + return self.getTypedRuleContext(SolidityParser.AssemblyLiteralContext, 0) def assemblyMember(self): - return self.getTypedRuleContext(SolidityParser.AssemblyMemberContext,0) - + return self.getTypedRuleContext(SolidityParser.AssemblyMemberContext, 0) def getRuleIndex(self): return SolidityParser.RULE_assemblyExpression - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterAssemblyExpression" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterAssemblyExpression"): listener.enterAssemblyExpression(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitAssemblyExpression" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitAssemblyExpression"): listener.exitAssemblyExpression(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitAssemblyExpression" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitAssemblyExpression"): return visitor.visitAssemblyExpression(self) else: return visitor.visitChildren(self) - - - def assemblyExpression(self): - localctx = SolidityParser.AssemblyExpressionContext(self, self._ctx, self.state) self.enterRule(localctx, 158, self.RULE_assemblyExpression) try: self.state = 996 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,104,self._ctx) + la_ = self._interp.adaptivePredict(self._input, 104, self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) self.state = 993 @@ -7557,7 +9201,6 @@ def assemblyExpression(self): self.assemblyMember() pass - except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -7566,42 +9209,37 @@ def assemblyExpression(self): self.exitRule() return localctx - class AssemblyMemberContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser - def identifier(self, i:int=None): + def identifier(self, i: int = None): if i is None: return self.getTypedRuleContexts(SolidityParser.IdentifierContext) else: - return self.getTypedRuleContext(SolidityParser.IdentifierContext,i) - + return self.getTypedRuleContext(SolidityParser.IdentifierContext, i) def getRuleIndex(self): return SolidityParser.RULE_assemblyMember - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterAssemblyMember" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterAssemblyMember"): listener.enterAssemblyMember(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitAssemblyMember" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitAssemblyMember"): listener.exitAssemblyMember(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitAssemblyMember" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitAssemblyMember"): return visitor.visitAssemblyMember(self) else: return visitor.visitChildren(self) - - - def assemblyMember(self): - localctx = SolidityParser.AssemblyMemberContext(self, self._ctx, self.state) self.enterRule(localctx, 160, self.RULE_assemblyMember) try: @@ -7620,54 +9258,52 @@ def assemblyMember(self): self.exitRule() return localctx - class AssemblyCallContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser def identifier(self): - return self.getTypedRuleContext(SolidityParser.IdentifierContext,0) - + return self.getTypedRuleContext(SolidityParser.IdentifierContext, 0) - def assemblyExpression(self, i:int=None): + def assemblyExpression(self, i: int = None): if i is None: - return self.getTypedRuleContexts(SolidityParser.AssemblyExpressionContext) + return self.getTypedRuleContexts( + SolidityParser.AssemblyExpressionContext + ) else: - return self.getTypedRuleContext(SolidityParser.AssemblyExpressionContext,i) - + return self.getTypedRuleContext( + SolidityParser.AssemblyExpressionContext, i + ) def getRuleIndex(self): return SolidityParser.RULE_assemblyCall - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterAssemblyCall" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterAssemblyCall"): listener.enterAssemblyCall(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitAssemblyCall" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitAssemblyCall"): listener.exitAssemblyCall(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitAssemblyCall" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitAssemblyCall"): return visitor.visitAssemblyCall(self) else: return visitor.visitChildren(self) - - - def assemblyCall(self): - localctx = SolidityParser.AssemblyCallContext(self, self._ctx, self.state) self.enterRule(localctx, 162, self.RULE_assemblyCall) - self._la = 0 # Token type + self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) self.state = 1006 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,105,self._ctx) + la_ = self._interp.adaptivePredict(self._input, 105, self._ctx) if la_ == 1: self.state = 1002 self.match(SolidityParser.T__58) @@ -7688,25 +9324,58 @@ def assemblyCall(self): self.identifier() pass - self.state = 1020 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,108,self._ctx) + la_ = self._interp.adaptivePredict(self._input, 108, self._ctx) if la_ == 1: self.state = 1008 self.match(SolidityParser.T__22) self.state = 1010 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__43) | (1 << SolidityParser.T__49) | (1 << SolidityParser.T__58) | (1 << SolidityParser.T__61))) != 0) or ((((_la - 66)) & ~0x3f) == 0 and ((1 << (_la - 66)) & ((1 << (SolidityParser.T__65 - 66)) | (1 << (SolidityParser.T__94 - 66)) | (1 << (SolidityParser.BooleanLiteral - 66)) | (1 << (SolidityParser.DecimalNumber - 66)) | (1 << (SolidityParser.HexNumber - 66)) | (1 << (SolidityParser.HexLiteralFragment - 66)) | (1 << (SolidityParser.LeaveKeyword - 66)) | (1 << (SolidityParser.PayableKeyword - 66)) | (1 << (SolidityParser.GlobalKeyword - 66)) | (1 << (SolidityParser.ConstructorKeyword - 66)) | (1 << (SolidityParser.ReceiveKeyword - 66)) | (1 << (SolidityParser.Identifier - 66)) | (1 << (SolidityParser.StringLiteralFragment - 66)))) != 0): + if ( + ((_la) & ~0x3F) == 0 + and ( + (1 << _la) + & ( + (1 << SolidityParser.T__13) + | (1 << SolidityParser.T__24) + | (1 << SolidityParser.T__43) + | (1 << SolidityParser.T__49) + | (1 << SolidityParser.T__58) + | (1 << SolidityParser.T__61) + ) + ) + != 0 + ) or ( + (((_la - 66)) & ~0x3F) == 0 + and ( + (1 << (_la - 66)) + & ( + (1 << (SolidityParser.T__65 - 66)) + | (1 << (SolidityParser.T__94 - 66)) + | (1 << (SolidityParser.BooleanLiteral - 66)) + | (1 << (SolidityParser.DecimalNumber - 66)) + | (1 << (SolidityParser.HexNumber - 66)) + | (1 << (SolidityParser.HexLiteralFragment - 66)) + | (1 << (SolidityParser.LeaveKeyword - 66)) + | (1 << (SolidityParser.PayableKeyword - 66)) + | (1 << (SolidityParser.GlobalKeyword - 66)) + | (1 << (SolidityParser.ConstructorKeyword - 66)) + | (1 << (SolidityParser.ReceiveKeyword - 66)) + | (1 << (SolidityParser.Identifier - 66)) + | (1 << (SolidityParser.StringLiteralFragment - 66)) + ) + ) + != 0 + ): self.state = 1009 self.assemblyExpression() - self.state = 1016 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==SolidityParser.T__15: + while _la == SolidityParser.T__15: self.state = 1012 self.match(SolidityParser.T__15) self.state = 1013 @@ -7718,7 +9387,6 @@ def assemblyCall(self): self.state = 1019 self.match(SolidityParser.T__23) - except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -7727,46 +9395,44 @@ def assemblyCall(self): self.exitRule() return localctx - class AssemblyLocalDefinitionContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser def assemblyIdentifierOrList(self): - return self.getTypedRuleContext(SolidityParser.AssemblyIdentifierOrListContext,0) - + return self.getTypedRuleContext( + SolidityParser.AssemblyIdentifierOrListContext, 0 + ) def assemblyExpression(self): - return self.getTypedRuleContext(SolidityParser.AssemblyExpressionContext,0) - + return self.getTypedRuleContext(SolidityParser.AssemblyExpressionContext, 0) def getRuleIndex(self): return SolidityParser.RULE_assemblyLocalDefinition - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterAssemblyLocalDefinition" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterAssemblyLocalDefinition"): listener.enterAssemblyLocalDefinition(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitAssemblyLocalDefinition" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitAssemblyLocalDefinition"): listener.exitAssemblyLocalDefinition(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitAssemblyLocalDefinition" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitAssemblyLocalDefinition"): return visitor.visitAssemblyLocalDefinition(self) else: return visitor.visitChildren(self) - - - def assemblyLocalDefinition(self): - - localctx = SolidityParser.AssemblyLocalDefinitionContext(self, self._ctx, self.state) + localctx = SolidityParser.AssemblyLocalDefinitionContext( + self, self._ctx, self.state + ) self.enterRule(localctx, 164, self.RULE_assemblyLocalDefinition) - self._la = 0 # Token type + self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) self.state = 1022 @@ -7776,13 +9442,12 @@ def assemblyLocalDefinition(self): self.state = 1026 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==SolidityParser.T__88: + if _la == SolidityParser.T__88: self.state = 1024 self.match(SolidityParser.T__88) self.state = 1025 self.assemblyExpression() - except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -7791,43 +9456,39 @@ def assemblyLocalDefinition(self): self.exitRule() return localctx - class AssemblyAssignmentContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser def assemblyIdentifierOrList(self): - return self.getTypedRuleContext(SolidityParser.AssemblyIdentifierOrListContext,0) - + return self.getTypedRuleContext( + SolidityParser.AssemblyIdentifierOrListContext, 0 + ) def assemblyExpression(self): - return self.getTypedRuleContext(SolidityParser.AssemblyExpressionContext,0) - + return self.getTypedRuleContext(SolidityParser.AssemblyExpressionContext, 0) def getRuleIndex(self): return SolidityParser.RULE_assemblyAssignment - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterAssemblyAssignment" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterAssemblyAssignment"): listener.enterAssemblyAssignment(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitAssemblyAssignment" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitAssemblyAssignment"): listener.exitAssemblyAssignment(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitAssemblyAssignment" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitAssemblyAssignment"): return visitor.visitAssemblyAssignment(self) else: return visitor.visitChildren(self) - - - def assemblyAssignment(self): - localctx = SolidityParser.AssemblyAssignmentContext(self, self._ctx, self.state) self.enterRule(localctx, 166, self.RULE_assemblyAssignment) try: @@ -7846,53 +9507,50 @@ def assemblyAssignment(self): self.exitRule() return localctx - class AssemblyIdentifierOrListContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser def identifier(self): - return self.getTypedRuleContext(SolidityParser.IdentifierContext,0) - + return self.getTypedRuleContext(SolidityParser.IdentifierContext, 0) def assemblyMember(self): - return self.getTypedRuleContext(SolidityParser.AssemblyMemberContext,0) - + return self.getTypedRuleContext(SolidityParser.AssemblyMemberContext, 0) def assemblyIdentifierList(self): - return self.getTypedRuleContext(SolidityParser.AssemblyIdentifierListContext,0) - + return self.getTypedRuleContext( + SolidityParser.AssemblyIdentifierListContext, 0 + ) def getRuleIndex(self): return SolidityParser.RULE_assemblyIdentifierOrList - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterAssemblyIdentifierOrList" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterAssemblyIdentifierOrList"): listener.enterAssemblyIdentifierOrList(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitAssemblyIdentifierOrList" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitAssemblyIdentifierOrList"): listener.exitAssemblyIdentifierOrList(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitAssemblyIdentifierOrList" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitAssemblyIdentifierOrList"): return visitor.visitAssemblyIdentifierOrList(self) else: return visitor.visitChildren(self) - - - def assemblyIdentifierOrList(self): - - localctx = SolidityParser.AssemblyIdentifierOrListContext(self, self._ctx, self.state) + localctx = SolidityParser.AssemblyIdentifierOrListContext( + self, self._ctx, self.state + ) self.enterRule(localctx, 168, self.RULE_assemblyIdentifierOrList) try: self.state = 1039 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,110,self._ctx) + la_ = self._interp.adaptivePredict(self._input, 110, self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) self.state = 1032 @@ -7921,7 +9579,6 @@ def assemblyIdentifierOrList(self): self.match(SolidityParser.T__23) pass - except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -7930,45 +9587,42 @@ def assemblyIdentifierOrList(self): self.exitRule() return localctx - class AssemblyIdentifierListContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser - def identifier(self, i:int=None): + def identifier(self, i: int = None): if i is None: return self.getTypedRuleContexts(SolidityParser.IdentifierContext) else: - return self.getTypedRuleContext(SolidityParser.IdentifierContext,i) - + return self.getTypedRuleContext(SolidityParser.IdentifierContext, i) def getRuleIndex(self): return SolidityParser.RULE_assemblyIdentifierList - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterAssemblyIdentifierList" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterAssemblyIdentifierList"): listener.enterAssemblyIdentifierList(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitAssemblyIdentifierList" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitAssemblyIdentifierList"): listener.exitAssemblyIdentifierList(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitAssemblyIdentifierList" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitAssemblyIdentifierList"): return visitor.visitAssemblyIdentifierList(self) else: return visitor.visitChildren(self) - - - def assemblyIdentifierList(self): - - localctx = SolidityParser.AssemblyIdentifierListContext(self, self._ctx, self.state) + localctx = SolidityParser.AssemblyIdentifierListContext( + self, self._ctx, self.state + ) self.enterRule(localctx, 170, self.RULE_assemblyIdentifierList) - self._la = 0 # Token type + self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) self.state = 1041 @@ -7976,7 +9630,7 @@ def assemblyIdentifierList(self): self.state = 1046 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==SolidityParser.T__15: + while _la == SolidityParser.T__15: self.state = 1042 self.match(SolidityParser.T__15) self.state = 1043 @@ -7993,44 +9647,40 @@ def assemblyIdentifierList(self): self.exitRule() return localctx - class AssemblyStackAssignmentContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser def assemblyExpression(self): - return self.getTypedRuleContext(SolidityParser.AssemblyExpressionContext,0) - + return self.getTypedRuleContext(SolidityParser.AssemblyExpressionContext, 0) def identifier(self): - return self.getTypedRuleContext(SolidityParser.IdentifierContext,0) - + return self.getTypedRuleContext(SolidityParser.IdentifierContext, 0) def getRuleIndex(self): return SolidityParser.RULE_assemblyStackAssignment - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterAssemblyStackAssignment" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterAssemblyStackAssignment"): listener.enterAssemblyStackAssignment(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitAssemblyStackAssignment" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitAssemblyStackAssignment"): listener.exitAssemblyStackAssignment(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitAssemblyStackAssignment" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitAssemblyStackAssignment"): return visitor.visitAssemblyStackAssignment(self) else: return visitor.visitChildren(self) - - - def assemblyStackAssignment(self): - - localctx = SolidityParser.AssemblyStackAssignmentContext(self, self._ctx, self.state) + localctx = SolidityParser.AssemblyStackAssignmentContext( + self, self._ctx, self.state + ) self.enterRule(localctx, 172, self.RULE_assemblyStackAssignment) try: self.enterOuterAlt(localctx, 1) @@ -8048,39 +9698,34 @@ def assemblyStackAssignment(self): self.exitRule() return localctx - class LabelDefinitionContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser def identifier(self): - return self.getTypedRuleContext(SolidityParser.IdentifierContext,0) - + return self.getTypedRuleContext(SolidityParser.IdentifierContext, 0) def getRuleIndex(self): return SolidityParser.RULE_labelDefinition - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterLabelDefinition" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterLabelDefinition"): listener.enterLabelDefinition(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitLabelDefinition" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitLabelDefinition"): listener.exitLabelDefinition(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitLabelDefinition" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitLabelDefinition"): return visitor.visitLabelDefinition(self) else: return visitor.visitChildren(self) - - - def labelDefinition(self): - localctx = SolidityParser.LabelDefinitionContext(self, self._ctx, self.state) self.enterRule(localctx, 174, self.RULE_labelDefinition) try: @@ -8097,49 +9742,43 @@ def labelDefinition(self): self.exitRule() return localctx - class AssemblySwitchContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser def assemblyExpression(self): - return self.getTypedRuleContext(SolidityParser.AssemblyExpressionContext,0) - + return self.getTypedRuleContext(SolidityParser.AssemblyExpressionContext, 0) - def assemblyCase(self, i:int=None): + def assemblyCase(self, i: int = None): if i is None: return self.getTypedRuleContexts(SolidityParser.AssemblyCaseContext) else: - return self.getTypedRuleContext(SolidityParser.AssemblyCaseContext,i) - + return self.getTypedRuleContext(SolidityParser.AssemblyCaseContext, i) def getRuleIndex(self): return SolidityParser.RULE_assemblySwitch - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterAssemblySwitch" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterAssemblySwitch"): listener.enterAssemblySwitch(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitAssemblySwitch" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitAssemblySwitch"): listener.exitAssemblySwitch(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitAssemblySwitch" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitAssemblySwitch"): return visitor.visitAssemblySwitch(self) else: return visitor.visitChildren(self) - - - def assemblySwitch(self): - localctx = SolidityParser.AssemblySwitchContext(self, self._ctx, self.state) self.enterRule(localctx, 176, self.RULE_assemblySwitch) - self._la = 0 # Token type + self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) self.state = 1056 @@ -8149,7 +9788,7 @@ def assemblySwitch(self): self.state = 1061 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==SolidityParser.T__91 or _la==SolidityParser.T__92: + while _la == SolidityParser.T__91 or _la == SolidityParser.T__92: self.state = 1058 self.assemblyCase() self.state = 1063 @@ -8164,43 +9803,37 @@ def assemblySwitch(self): self.exitRule() return localctx - class AssemblyCaseContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser def assemblyLiteral(self): - return self.getTypedRuleContext(SolidityParser.AssemblyLiteralContext,0) - + return self.getTypedRuleContext(SolidityParser.AssemblyLiteralContext, 0) def assemblyBlock(self): - return self.getTypedRuleContext(SolidityParser.AssemblyBlockContext,0) - + return self.getTypedRuleContext(SolidityParser.AssemblyBlockContext, 0) def getRuleIndex(self): return SolidityParser.RULE_assemblyCase - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterAssemblyCase" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterAssemblyCase"): listener.enterAssemblyCase(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitAssemblyCase" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitAssemblyCase"): listener.exitAssemblyCase(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitAssemblyCase" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitAssemblyCase"): return visitor.visitAssemblyCase(self) else: return visitor.visitChildren(self) - - - def assemblyCase(self): - localctx = SolidityParser.AssemblyCaseContext(self, self._ctx, self.state) self.enterRule(localctx, 178, self.RULE_assemblyCase) try: @@ -8234,54 +9867,52 @@ def assemblyCase(self): self.exitRule() return localctx - class AssemblyFunctionDefinitionContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser def identifier(self): - return self.getTypedRuleContext(SolidityParser.IdentifierContext,0) - + return self.getTypedRuleContext(SolidityParser.IdentifierContext, 0) def assemblyBlock(self): - return self.getTypedRuleContext(SolidityParser.AssemblyBlockContext,0) - + return self.getTypedRuleContext(SolidityParser.AssemblyBlockContext, 0) def assemblyIdentifierList(self): - return self.getTypedRuleContext(SolidityParser.AssemblyIdentifierListContext,0) - + return self.getTypedRuleContext( + SolidityParser.AssemblyIdentifierListContext, 0 + ) def assemblyFunctionReturns(self): - return self.getTypedRuleContext(SolidityParser.AssemblyFunctionReturnsContext,0) - + return self.getTypedRuleContext( + SolidityParser.AssemblyFunctionReturnsContext, 0 + ) def getRuleIndex(self): return SolidityParser.RULE_assemblyFunctionDefinition - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterAssemblyFunctionDefinition" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterAssemblyFunctionDefinition"): listener.enterAssemblyFunctionDefinition(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitAssemblyFunctionDefinition" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitAssemblyFunctionDefinition"): listener.exitAssemblyFunctionDefinition(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitAssemblyFunctionDefinition" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitAssemblyFunctionDefinition"): return visitor.visitAssemblyFunctionDefinition(self) else: return visitor.visitChildren(self) - - - def assemblyFunctionDefinition(self): - - localctx = SolidityParser.AssemblyFunctionDefinitionContext(self, self._ctx, self.state) + localctx = SolidityParser.AssemblyFunctionDefinitionContext( + self, self._ctx, self.state + ) self.enterRule(localctx, 180, self.RULE_assemblyFunctionDefinition) - self._la = 0 # Token type + self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) self.state = 1072 @@ -8293,21 +9924,47 @@ def assemblyFunctionDefinition(self): self.state = 1076 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__43) | (1 << SolidityParser.T__49) | (1 << SolidityParser.T__61))) != 0) or ((((_la - 95)) & ~0x3f) == 0 and ((1 << (_la - 95)) & ((1 << (SolidityParser.T__94 - 95)) | (1 << (SolidityParser.LeaveKeyword - 95)) | (1 << (SolidityParser.PayableKeyword - 95)) | (1 << (SolidityParser.GlobalKeyword - 95)) | (1 << (SolidityParser.ConstructorKeyword - 95)) | (1 << (SolidityParser.ReceiveKeyword - 95)) | (1 << (SolidityParser.Identifier - 95)))) != 0): + if ( + ((_la) & ~0x3F) == 0 + and ( + (1 << _la) + & ( + (1 << SolidityParser.T__13) + | (1 << SolidityParser.T__24) + | (1 << SolidityParser.T__43) + | (1 << SolidityParser.T__49) + | (1 << SolidityParser.T__61) + ) + ) + != 0 + ) or ( + (((_la - 95)) & ~0x3F) == 0 + and ( + (1 << (_la - 95)) + & ( + (1 << (SolidityParser.T__94 - 95)) + | (1 << (SolidityParser.LeaveKeyword - 95)) + | (1 << (SolidityParser.PayableKeyword - 95)) + | (1 << (SolidityParser.GlobalKeyword - 95)) + | (1 << (SolidityParser.ConstructorKeyword - 95)) + | (1 << (SolidityParser.ReceiveKeyword - 95)) + | (1 << (SolidityParser.Identifier - 95)) + ) + ) + != 0 + ): self.state = 1075 self.assemblyIdentifierList() - self.state = 1078 self.match(SolidityParser.T__23) self.state = 1080 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==SolidityParser.T__93: + if _la == SolidityParser.T__93: self.state = 1079 self.assemblyFunctionReturns() - self.state = 1082 self.assemblyBlock() except RecognitionException as re: @@ -8318,40 +9975,39 @@ def assemblyFunctionDefinition(self): self.exitRule() return localctx - class AssemblyFunctionReturnsContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser def assemblyIdentifierList(self): - return self.getTypedRuleContext(SolidityParser.AssemblyIdentifierListContext,0) - + return self.getTypedRuleContext( + SolidityParser.AssemblyIdentifierListContext, 0 + ) def getRuleIndex(self): return SolidityParser.RULE_assemblyFunctionReturns - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterAssemblyFunctionReturns" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterAssemblyFunctionReturns"): listener.enterAssemblyFunctionReturns(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitAssemblyFunctionReturns" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitAssemblyFunctionReturns"): listener.exitAssemblyFunctionReturns(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitAssemblyFunctionReturns" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitAssemblyFunctionReturns"): return visitor.visitAssemblyFunctionReturns(self) else: return visitor.visitChildren(self) - - - def assemblyFunctionReturns(self): - - localctx = SolidityParser.AssemblyFunctionReturnsContext(self, self._ctx, self.state) + localctx = SolidityParser.AssemblyFunctionReturnsContext( + self, self._ctx, self.state + ) self.enterRule(localctx, 182, self.RULE_assemblyFunctionReturns) try: self.enterOuterAlt(localctx, 1) @@ -8367,49 +10023,47 @@ def assemblyFunctionReturns(self): self.exitRule() return localctx - class AssemblyForContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser - def assemblyExpression(self, i:int=None): + def assemblyExpression(self, i: int = None): if i is None: - return self.getTypedRuleContexts(SolidityParser.AssemblyExpressionContext) + return self.getTypedRuleContexts( + SolidityParser.AssemblyExpressionContext + ) else: - return self.getTypedRuleContext(SolidityParser.AssemblyExpressionContext,i) + return self.getTypedRuleContext( + SolidityParser.AssemblyExpressionContext, i + ) - - def assemblyBlock(self, i:int=None): + def assemblyBlock(self, i: int = None): if i is None: return self.getTypedRuleContexts(SolidityParser.AssemblyBlockContext) else: - return self.getTypedRuleContext(SolidityParser.AssemblyBlockContext,i) - + return self.getTypedRuleContext(SolidityParser.AssemblyBlockContext, i) def getRuleIndex(self): return SolidityParser.RULE_assemblyFor - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterAssemblyFor" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterAssemblyFor"): listener.enterAssemblyFor(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitAssemblyFor" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitAssemblyFor"): listener.exitAssemblyFor(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitAssemblyFor" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitAssemblyFor"): return visitor.visitAssemblyFor(self) else: return visitor.visitChildren(self) - - - def assemblyFor(self): - localctx = SolidityParser.AssemblyForContext(self, self._ctx, self.state) self.enterRule(localctx, 184, self.RULE_assemblyFor) try: @@ -8423,7 +10077,27 @@ def assemblyFor(self): self.state = 1088 self.assemblyBlock() pass - elif token in [SolidityParser.T__13, SolidityParser.T__24, SolidityParser.T__43, SolidityParser.T__49, SolidityParser.T__58, SolidityParser.T__61, SolidityParser.T__65, SolidityParser.T__94, SolidityParser.BooleanLiteral, SolidityParser.DecimalNumber, SolidityParser.HexNumber, SolidityParser.HexLiteralFragment, SolidityParser.LeaveKeyword, SolidityParser.PayableKeyword, SolidityParser.GlobalKeyword, SolidityParser.ConstructorKeyword, SolidityParser.ReceiveKeyword, SolidityParser.Identifier, SolidityParser.StringLiteralFragment]: + elif token in [ + SolidityParser.T__13, + SolidityParser.T__24, + SolidityParser.T__43, + SolidityParser.T__49, + SolidityParser.T__58, + SolidityParser.T__61, + SolidityParser.T__65, + SolidityParser.T__94, + SolidityParser.BooleanLiteral, + SolidityParser.DecimalNumber, + SolidityParser.HexNumber, + SolidityParser.HexLiteralFragment, + SolidityParser.LeaveKeyword, + SolidityParser.PayableKeyword, + SolidityParser.GlobalKeyword, + SolidityParser.ConstructorKeyword, + SolidityParser.ReceiveKeyword, + SolidityParser.Identifier, + SolidityParser.StringLiteralFragment, + ]: self.state = 1089 self.assemblyExpression() pass @@ -8439,7 +10113,27 @@ def assemblyFor(self): self.state = 1093 self.assemblyBlock() pass - elif token in [SolidityParser.T__13, SolidityParser.T__24, SolidityParser.T__43, SolidityParser.T__49, SolidityParser.T__58, SolidityParser.T__61, SolidityParser.T__65, SolidityParser.T__94, SolidityParser.BooleanLiteral, SolidityParser.DecimalNumber, SolidityParser.HexNumber, SolidityParser.HexLiteralFragment, SolidityParser.LeaveKeyword, SolidityParser.PayableKeyword, SolidityParser.GlobalKeyword, SolidityParser.ConstructorKeyword, SolidityParser.ReceiveKeyword, SolidityParser.Identifier, SolidityParser.StringLiteralFragment]: + elif token in [ + SolidityParser.T__13, + SolidityParser.T__24, + SolidityParser.T__43, + SolidityParser.T__49, + SolidityParser.T__58, + SolidityParser.T__61, + SolidityParser.T__65, + SolidityParser.T__94, + SolidityParser.BooleanLiteral, + SolidityParser.DecimalNumber, + SolidityParser.HexNumber, + SolidityParser.HexLiteralFragment, + SolidityParser.LeaveKeyword, + SolidityParser.PayableKeyword, + SolidityParser.GlobalKeyword, + SolidityParser.ConstructorKeyword, + SolidityParser.ReceiveKeyword, + SolidityParser.Identifier, + SolidityParser.StringLiteralFragment, + ]: self.state = 1094 self.assemblyExpression() pass @@ -8456,43 +10150,37 @@ def assemblyFor(self): self.exitRule() return localctx - class AssemblyIfContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser def assemblyExpression(self): - return self.getTypedRuleContext(SolidityParser.AssemblyExpressionContext,0) - + return self.getTypedRuleContext(SolidityParser.AssemblyExpressionContext, 0) def assemblyBlock(self): - return self.getTypedRuleContext(SolidityParser.AssemblyBlockContext,0) - + return self.getTypedRuleContext(SolidityParser.AssemblyBlockContext, 0) def getRuleIndex(self): return SolidityParser.RULE_assemblyIf - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterAssemblyIf" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterAssemblyIf"): listener.enterAssemblyIf(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitAssemblyIf" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitAssemblyIf"): listener.exitAssemblyIf(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitAssemblyIf" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitAssemblyIf"): return visitor.visitAssemblyIf(self) else: return visitor.visitChildren(self) - - - def assemblyIf(self): - localctx = SolidityParser.AssemblyIfContext(self, self._ctx, self.state) self.enterRule(localctx, 186, self.RULE_assemblyIf) try: @@ -8511,16 +10199,15 @@ def assemblyIf(self): self.exitRule() return localctx - class AssemblyLiteralContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser def stringLiteral(self): - return self.getTypedRuleContext(SolidityParser.StringLiteralContext,0) - + return self.getTypedRuleContext(SolidityParser.StringLiteralContext, 0) def DecimalNumber(self): return self.getToken(SolidityParser.DecimalNumber, 0) @@ -8529,8 +10216,7 @@ def HexNumber(self): return self.getToken(SolidityParser.HexNumber, 0) def hexLiteral(self): - return self.getTypedRuleContext(SolidityParser.HexLiteralContext,0) - + return self.getTypedRuleContext(SolidityParser.HexLiteralContext, 0) def BooleanLiteral(self): return self.getToken(SolidityParser.BooleanLiteral, 0) @@ -8538,25 +10224,21 @@ def BooleanLiteral(self): def getRuleIndex(self): return SolidityParser.RULE_assemblyLiteral - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterAssemblyLiteral" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterAssemblyLiteral"): listener.enterAssemblyLiteral(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitAssemblyLiteral" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitAssemblyLiteral"): listener.exitAssemblyLiteral(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitAssemblyLiteral" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitAssemblyLiteral"): return visitor.visitAssemblyLiteral(self) else: return visitor.visitChildren(self) - - - def assemblyLiteral(self): - localctx = SolidityParser.AssemblyLiteralContext(self, self._ctx, self.state) self.enterRule(localctx, 188, self.RULE_assemblyLiteral) try: @@ -8599,45 +10281,40 @@ def assemblyLiteral(self): self.exitRule() return localctx - class TupleExpressionContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser - def expression(self, i:int=None): + def expression(self, i: int = None): if i is None: return self.getTypedRuleContexts(SolidityParser.ExpressionContext) else: - return self.getTypedRuleContext(SolidityParser.ExpressionContext,i) - + return self.getTypedRuleContext(SolidityParser.ExpressionContext, i) def getRuleIndex(self): return SolidityParser.RULE_tupleExpression - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterTupleExpression" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterTupleExpression"): listener.enterTupleExpression(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitTupleExpression" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitTupleExpression"): listener.exitTupleExpression(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitTupleExpression" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitTupleExpression"): return visitor.visitTupleExpression(self) else: return visitor.visitChildren(self) - - - def tupleExpression(self): - localctx = SolidityParser.TupleExpressionContext(self, self._ctx, self.state) self.enterRule(localctx, 190, self.RULE_tupleExpression) - self._la = 0 # Token type + self._la = 0 # Token type try: self.state = 1136 self._errHandler.sync(self) @@ -8650,25 +10327,133 @@ def tupleExpression(self): self.state = 1112 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 6)) & ~0x3f) == 0 and ((1 << (_la - 6)) & ((1 << (SolidityParser.T__5 - 6)) | (1 << (SolidityParser.T__13 - 6)) | (1 << (SolidityParser.T__22 - 6)) | (1 << (SolidityParser.T__24 - 6)) | (1 << (SolidityParser.T__29 - 6)) | (1 << (SolidityParser.T__30 - 6)) | (1 << (SolidityParser.T__37 - 6)) | (1 << (SolidityParser.T__41 - 6)) | (1 << (SolidityParser.T__43 - 6)) | (1 << (SolidityParser.T__45 - 6)) | (1 << (SolidityParser.T__49 - 6)) | (1 << (SolidityParser.T__61 - 6)) | (1 << (SolidityParser.T__62 - 6)) | (1 << (SolidityParser.T__63 - 6)) | (1 << (SolidityParser.T__64 - 6)) | (1 << (SolidityParser.T__65 - 6)) | (1 << (SolidityParser.T__66 - 6)) | (1 << (SolidityParser.T__67 - 6)) | (1 << (SolidityParser.T__68 - 6)))) != 0) or ((((_la - 71)) & ~0x3f) == 0 and ((1 << (_la - 71)) & ((1 << (SolidityParser.T__70 - 71)) | (1 << (SolidityParser.T__71 - 71)) | (1 << (SolidityParser.T__94 - 71)) | (1 << (SolidityParser.Int - 71)) | (1 << (SolidityParser.Uint - 71)) | (1 << (SolidityParser.Byte - 71)) | (1 << (SolidityParser.Fixed - 71)) | (1 << (SolidityParser.Ufixed - 71)) | (1 << (SolidityParser.BooleanLiteral - 71)) | (1 << (SolidityParser.DecimalNumber - 71)) | (1 << (SolidityParser.HexNumber - 71)) | (1 << (SolidityParser.HexLiteralFragment - 71)) | (1 << (SolidityParser.LeaveKeyword - 71)) | (1 << (SolidityParser.PayableKeyword - 71)) | (1 << (SolidityParser.TypeKeyword - 71)) | (1 << (SolidityParser.GlobalKeyword - 71)) | (1 << (SolidityParser.ConstructorKeyword - 71)) | (1 << (SolidityParser.ReceiveKeyword - 71)) | (1 << (SolidityParser.Identifier - 71)) | (1 << (SolidityParser.StringLiteralFragment - 71)))) != 0): + if ( + (((_la - 6)) & ~0x3F) == 0 + and ( + (1 << (_la - 6)) + & ( + (1 << (SolidityParser.T__5 - 6)) + | (1 << (SolidityParser.T__13 - 6)) + | (1 << (SolidityParser.T__22 - 6)) + | (1 << (SolidityParser.T__24 - 6)) + | (1 << (SolidityParser.T__29 - 6)) + | (1 << (SolidityParser.T__30 - 6)) + | (1 << (SolidityParser.T__37 - 6)) + | (1 << (SolidityParser.T__41 - 6)) + | (1 << (SolidityParser.T__43 - 6)) + | (1 << (SolidityParser.T__45 - 6)) + | (1 << (SolidityParser.T__49 - 6)) + | (1 << (SolidityParser.T__61 - 6)) + | (1 << (SolidityParser.T__62 - 6)) + | (1 << (SolidityParser.T__63 - 6)) + | (1 << (SolidityParser.T__64 - 6)) + | (1 << (SolidityParser.T__65 - 6)) + | (1 << (SolidityParser.T__66 - 6)) + | (1 << (SolidityParser.T__67 - 6)) + | (1 << (SolidityParser.T__68 - 6)) + ) + ) + != 0 + ) or ( + (((_la - 71)) & ~0x3F) == 0 + and ( + (1 << (_la - 71)) + & ( + (1 << (SolidityParser.T__70 - 71)) + | (1 << (SolidityParser.T__71 - 71)) + | (1 << (SolidityParser.T__94 - 71)) + | (1 << (SolidityParser.Int - 71)) + | (1 << (SolidityParser.Uint - 71)) + | (1 << (SolidityParser.Byte - 71)) + | (1 << (SolidityParser.Fixed - 71)) + | (1 << (SolidityParser.Ufixed - 71)) + | (1 << (SolidityParser.BooleanLiteral - 71)) + | (1 << (SolidityParser.DecimalNumber - 71)) + | (1 << (SolidityParser.HexNumber - 71)) + | (1 << (SolidityParser.HexLiteralFragment - 71)) + | (1 << (SolidityParser.LeaveKeyword - 71)) + | (1 << (SolidityParser.PayableKeyword - 71)) + | (1 << (SolidityParser.TypeKeyword - 71)) + | (1 << (SolidityParser.GlobalKeyword - 71)) + | (1 << (SolidityParser.ConstructorKeyword - 71)) + | (1 << (SolidityParser.ReceiveKeyword - 71)) + | (1 << (SolidityParser.Identifier - 71)) + | (1 << (SolidityParser.StringLiteralFragment - 71)) + ) + ) + != 0 + ): self.state = 1111 self.expression(0) - self.state = 1120 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==SolidityParser.T__15: + while _la == SolidityParser.T__15: self.state = 1114 self.match(SolidityParser.T__15) self.state = 1116 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 6)) & ~0x3f) == 0 and ((1 << (_la - 6)) & ((1 << (SolidityParser.T__5 - 6)) | (1 << (SolidityParser.T__13 - 6)) | (1 << (SolidityParser.T__22 - 6)) | (1 << (SolidityParser.T__24 - 6)) | (1 << (SolidityParser.T__29 - 6)) | (1 << (SolidityParser.T__30 - 6)) | (1 << (SolidityParser.T__37 - 6)) | (1 << (SolidityParser.T__41 - 6)) | (1 << (SolidityParser.T__43 - 6)) | (1 << (SolidityParser.T__45 - 6)) | (1 << (SolidityParser.T__49 - 6)) | (1 << (SolidityParser.T__61 - 6)) | (1 << (SolidityParser.T__62 - 6)) | (1 << (SolidityParser.T__63 - 6)) | (1 << (SolidityParser.T__64 - 6)) | (1 << (SolidityParser.T__65 - 6)) | (1 << (SolidityParser.T__66 - 6)) | (1 << (SolidityParser.T__67 - 6)) | (1 << (SolidityParser.T__68 - 6)))) != 0) or ((((_la - 71)) & ~0x3f) == 0 and ((1 << (_la - 71)) & ((1 << (SolidityParser.T__70 - 71)) | (1 << (SolidityParser.T__71 - 71)) | (1 << (SolidityParser.T__94 - 71)) | (1 << (SolidityParser.Int - 71)) | (1 << (SolidityParser.Uint - 71)) | (1 << (SolidityParser.Byte - 71)) | (1 << (SolidityParser.Fixed - 71)) | (1 << (SolidityParser.Ufixed - 71)) | (1 << (SolidityParser.BooleanLiteral - 71)) | (1 << (SolidityParser.DecimalNumber - 71)) | (1 << (SolidityParser.HexNumber - 71)) | (1 << (SolidityParser.HexLiteralFragment - 71)) | (1 << (SolidityParser.LeaveKeyword - 71)) | (1 << (SolidityParser.PayableKeyword - 71)) | (1 << (SolidityParser.TypeKeyword - 71)) | (1 << (SolidityParser.GlobalKeyword - 71)) | (1 << (SolidityParser.ConstructorKeyword - 71)) | (1 << (SolidityParser.ReceiveKeyword - 71)) | (1 << (SolidityParser.Identifier - 71)) | (1 << (SolidityParser.StringLiteralFragment - 71)))) != 0): + if ( + (((_la - 6)) & ~0x3F) == 0 + and ( + (1 << (_la - 6)) + & ( + (1 << (SolidityParser.T__5 - 6)) + | (1 << (SolidityParser.T__13 - 6)) + | (1 << (SolidityParser.T__22 - 6)) + | (1 << (SolidityParser.T__24 - 6)) + | (1 << (SolidityParser.T__29 - 6)) + | (1 << (SolidityParser.T__30 - 6)) + | (1 << (SolidityParser.T__37 - 6)) + | (1 << (SolidityParser.T__41 - 6)) + | (1 << (SolidityParser.T__43 - 6)) + | (1 << (SolidityParser.T__45 - 6)) + | (1 << (SolidityParser.T__49 - 6)) + | (1 << (SolidityParser.T__61 - 6)) + | (1 << (SolidityParser.T__62 - 6)) + | (1 << (SolidityParser.T__63 - 6)) + | (1 << (SolidityParser.T__64 - 6)) + | (1 << (SolidityParser.T__65 - 6)) + | (1 << (SolidityParser.T__66 - 6)) + | (1 << (SolidityParser.T__67 - 6)) + | (1 << (SolidityParser.T__68 - 6)) + ) + ) + != 0 + ) or ( + (((_la - 71)) & ~0x3F) == 0 + and ( + (1 << (_la - 71)) + & ( + (1 << (SolidityParser.T__70 - 71)) + | (1 << (SolidityParser.T__71 - 71)) + | (1 << (SolidityParser.T__94 - 71)) + | (1 << (SolidityParser.Int - 71)) + | (1 << (SolidityParser.Uint - 71)) + | (1 << (SolidityParser.Byte - 71)) + | (1 << (SolidityParser.Fixed - 71)) + | (1 << (SolidityParser.Ufixed - 71)) + | (1 << (SolidityParser.BooleanLiteral - 71)) + | (1 << (SolidityParser.DecimalNumber - 71)) + | (1 << (SolidityParser.HexNumber - 71)) + | (1 << (SolidityParser.HexLiteralFragment - 71)) + | (1 << (SolidityParser.LeaveKeyword - 71)) + | (1 << (SolidityParser.PayableKeyword - 71)) + | (1 << (SolidityParser.TypeKeyword - 71)) + | (1 << (SolidityParser.GlobalKeyword - 71)) + | (1 << (SolidityParser.ConstructorKeyword - 71)) + | (1 << (SolidityParser.ReceiveKeyword - 71)) + | (1 << (SolidityParser.Identifier - 71)) + | (1 << (SolidityParser.StringLiteralFragment - 71)) + ) + ) + != 0 + ): self.state = 1115 self.expression(0) - self.state = 1122 self._errHandler.sync(self) _la = self._input.LA(1) @@ -8683,13 +10468,68 @@ def tupleExpression(self): self.state = 1133 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 6)) & ~0x3f) == 0 and ((1 << (_la - 6)) & ((1 << (SolidityParser.T__5 - 6)) | (1 << (SolidityParser.T__13 - 6)) | (1 << (SolidityParser.T__22 - 6)) | (1 << (SolidityParser.T__24 - 6)) | (1 << (SolidityParser.T__29 - 6)) | (1 << (SolidityParser.T__30 - 6)) | (1 << (SolidityParser.T__37 - 6)) | (1 << (SolidityParser.T__41 - 6)) | (1 << (SolidityParser.T__43 - 6)) | (1 << (SolidityParser.T__45 - 6)) | (1 << (SolidityParser.T__49 - 6)) | (1 << (SolidityParser.T__61 - 6)) | (1 << (SolidityParser.T__62 - 6)) | (1 << (SolidityParser.T__63 - 6)) | (1 << (SolidityParser.T__64 - 6)) | (1 << (SolidityParser.T__65 - 6)) | (1 << (SolidityParser.T__66 - 6)) | (1 << (SolidityParser.T__67 - 6)) | (1 << (SolidityParser.T__68 - 6)))) != 0) or ((((_la - 71)) & ~0x3f) == 0 and ((1 << (_la - 71)) & ((1 << (SolidityParser.T__70 - 71)) | (1 << (SolidityParser.T__71 - 71)) | (1 << (SolidityParser.T__94 - 71)) | (1 << (SolidityParser.Int - 71)) | (1 << (SolidityParser.Uint - 71)) | (1 << (SolidityParser.Byte - 71)) | (1 << (SolidityParser.Fixed - 71)) | (1 << (SolidityParser.Ufixed - 71)) | (1 << (SolidityParser.BooleanLiteral - 71)) | (1 << (SolidityParser.DecimalNumber - 71)) | (1 << (SolidityParser.HexNumber - 71)) | (1 << (SolidityParser.HexLiteralFragment - 71)) | (1 << (SolidityParser.LeaveKeyword - 71)) | (1 << (SolidityParser.PayableKeyword - 71)) | (1 << (SolidityParser.TypeKeyword - 71)) | (1 << (SolidityParser.GlobalKeyword - 71)) | (1 << (SolidityParser.ConstructorKeyword - 71)) | (1 << (SolidityParser.ReceiveKeyword - 71)) | (1 << (SolidityParser.Identifier - 71)) | (1 << (SolidityParser.StringLiteralFragment - 71)))) != 0): + if ( + (((_la - 6)) & ~0x3F) == 0 + and ( + (1 << (_la - 6)) + & ( + (1 << (SolidityParser.T__5 - 6)) + | (1 << (SolidityParser.T__13 - 6)) + | (1 << (SolidityParser.T__22 - 6)) + | (1 << (SolidityParser.T__24 - 6)) + | (1 << (SolidityParser.T__29 - 6)) + | (1 << (SolidityParser.T__30 - 6)) + | (1 << (SolidityParser.T__37 - 6)) + | (1 << (SolidityParser.T__41 - 6)) + | (1 << (SolidityParser.T__43 - 6)) + | (1 << (SolidityParser.T__45 - 6)) + | (1 << (SolidityParser.T__49 - 6)) + | (1 << (SolidityParser.T__61 - 6)) + | (1 << (SolidityParser.T__62 - 6)) + | (1 << (SolidityParser.T__63 - 6)) + | (1 << (SolidityParser.T__64 - 6)) + | (1 << (SolidityParser.T__65 - 6)) + | (1 << (SolidityParser.T__66 - 6)) + | (1 << (SolidityParser.T__67 - 6)) + | (1 << (SolidityParser.T__68 - 6)) + ) + ) + != 0 + ) or ( + (((_la - 71)) & ~0x3F) == 0 + and ( + (1 << (_la - 71)) + & ( + (1 << (SolidityParser.T__70 - 71)) + | (1 << (SolidityParser.T__71 - 71)) + | (1 << (SolidityParser.T__94 - 71)) + | (1 << (SolidityParser.Int - 71)) + | (1 << (SolidityParser.Uint - 71)) + | (1 << (SolidityParser.Byte - 71)) + | (1 << (SolidityParser.Fixed - 71)) + | (1 << (SolidityParser.Ufixed - 71)) + | (1 << (SolidityParser.BooleanLiteral - 71)) + | (1 << (SolidityParser.DecimalNumber - 71)) + | (1 << (SolidityParser.HexNumber - 71)) + | (1 << (SolidityParser.HexLiteralFragment - 71)) + | (1 << (SolidityParser.LeaveKeyword - 71)) + | (1 << (SolidityParser.PayableKeyword - 71)) + | (1 << (SolidityParser.TypeKeyword - 71)) + | (1 << (SolidityParser.GlobalKeyword - 71)) + | (1 << (SolidityParser.ConstructorKeyword - 71)) + | (1 << (SolidityParser.ReceiveKeyword - 71)) + | (1 << (SolidityParser.Identifier - 71)) + | (1 << (SolidityParser.StringLiteralFragment - 71)) + ) + ) + != 0 + ): self.state = 1125 self.expression(0) self.state = 1130 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==SolidityParser.T__15: + while _la == SolidityParser.T__15: self.state = 1126 self.match(SolidityParser.T__15) self.state = 1127 @@ -8698,8 +10538,6 @@ def tupleExpression(self): self._errHandler.sync(self) _la = self._input.LA(1) - - self.state = 1135 self.match(SolidityParser.T__42) pass @@ -8714,10 +10552,10 @@ def tupleExpression(self): self.exitRule() return localctx - class NumberLiteralContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser @@ -8733,45 +10571,42 @@ def NumberUnit(self): def getRuleIndex(self): return SolidityParser.RULE_numberLiteral - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterNumberLiteral" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterNumberLiteral"): listener.enterNumberLiteral(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitNumberLiteral" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitNumberLiteral"): listener.exitNumberLiteral(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitNumberLiteral" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitNumberLiteral"): return visitor.visitNumberLiteral(self) else: return visitor.visitChildren(self) - - - def numberLiteral(self): - localctx = SolidityParser.NumberLiteralContext(self, self._ctx, self.state) self.enterRule(localctx, 192, self.RULE_numberLiteral) - self._la = 0 # Token type + self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) self.state = 1138 _la = self._input.LA(1) - if not(_la==SolidityParser.DecimalNumber or _la==SolidityParser.HexNumber): + if not ( + _la == SolidityParser.DecimalNumber or _la == SolidityParser.HexNumber + ): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() self.state = 1140 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,125,self._ctx) + la_ = self._interp.adaptivePredict(self._input, 125, self._ctx) if la_ == 1: self.state = 1139 self.match(SolidityParser.NumberUnit) - except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -8780,10 +10615,10 @@ def numberLiteral(self): self.exitRule() return localctx - class IdentifierContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser @@ -8808,33 +10643,60 @@ def Identifier(self): def getRuleIndex(self): return SolidityParser.RULE_identifier - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterIdentifier" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterIdentifier"): listener.enterIdentifier(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitIdentifier" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitIdentifier"): listener.exitIdentifier(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitIdentifier" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitIdentifier"): return visitor.visitIdentifier(self) else: return visitor.visitChildren(self) - - - def identifier(self): - localctx = SolidityParser.IdentifierContext(self, self._ctx, self.state) self.enterRule(localctx, 194, self.RULE_identifier) - self._la = 0 # Token type + self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) self.state = 1142 _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << SolidityParser.T__13) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__43) | (1 << SolidityParser.T__49) | (1 << SolidityParser.T__61))) != 0) or ((((_la - 95)) & ~0x3f) == 0 and ((1 << (_la - 95)) & ((1 << (SolidityParser.T__94 - 95)) | (1 << (SolidityParser.LeaveKeyword - 95)) | (1 << (SolidityParser.PayableKeyword - 95)) | (1 << (SolidityParser.GlobalKeyword - 95)) | (1 << (SolidityParser.ConstructorKeyword - 95)) | (1 << (SolidityParser.ReceiveKeyword - 95)) | (1 << (SolidityParser.Identifier - 95)))) != 0)): + if not ( + ( + ((_la) & ~0x3F) == 0 + and ( + (1 << _la) + & ( + (1 << SolidityParser.T__13) + | (1 << SolidityParser.T__24) + | (1 << SolidityParser.T__43) + | (1 << SolidityParser.T__49) + | (1 << SolidityParser.T__61) + ) + ) + != 0 + ) + or ( + (((_la - 95)) & ~0x3F) == 0 + and ( + (1 << (_la - 95)) + & ( + (1 << (SolidityParser.T__94 - 95)) + | (1 << (SolidityParser.LeaveKeyword - 95)) + | (1 << (SolidityParser.PayableKeyword - 95)) + | (1 << (SolidityParser.GlobalKeyword - 95)) + | (1 << (SolidityParser.ConstructorKeyword - 95)) + | (1 << (SolidityParser.ReceiveKeyword - 95)) + | (1 << (SolidityParser.Identifier - 95)) + ) + ) + != 0 + ) + ): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -8847,14 +10709,14 @@ def identifier(self): self.exitRule() return localctx - class HexLiteralContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser - def HexLiteralFragment(self, i:int=None): + def HexLiteralFragment(self, i: int = None): if i is None: return self.getTokens(SolidityParser.HexLiteralFragment) else: @@ -8863,42 +10725,38 @@ def HexLiteralFragment(self, i:int=None): def getRuleIndex(self): return SolidityParser.RULE_hexLiteral - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterHexLiteral" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterHexLiteral"): listener.enterHexLiteral(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitHexLiteral" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitHexLiteral"): listener.exitHexLiteral(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitHexLiteral" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitHexLiteral"): return visitor.visitHexLiteral(self) else: return visitor.visitChildren(self) - - - def hexLiteral(self): - localctx = SolidityParser.HexLiteralContext(self, self._ctx, self.state) self.enterRule(localctx, 196, self.RULE_hexLiteral) try: self.enterOuterAlt(localctx, 1) - self.state = 1145 + self.state = 1145 self._errHandler.sync(self) _alt = 1 - while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + while _alt != 2 and _alt != ATN.INVALID_ALT_NUMBER: if _alt == 1: self.state = 1144 self.match(SolidityParser.HexLiteralFragment) else: raise NoViableAltException(self) - self.state = 1147 + self.state = 1147 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,126,self._ctx) + _alt = self._interp.adaptivePredict(self._input, 126, self._ctx) except RecognitionException as re: localctx.exception = re @@ -8908,45 +10766,44 @@ def hexLiteral(self): self.exitRule() return localctx - class OverrideSpecifierContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser - def userDefinedTypeName(self, i:int=None): + def userDefinedTypeName(self, i: int = None): if i is None: - return self.getTypedRuleContexts(SolidityParser.UserDefinedTypeNameContext) + return self.getTypedRuleContexts( + SolidityParser.UserDefinedTypeNameContext + ) else: - return self.getTypedRuleContext(SolidityParser.UserDefinedTypeNameContext,i) - + return self.getTypedRuleContext( + SolidityParser.UserDefinedTypeNameContext, i + ) def getRuleIndex(self): return SolidityParser.RULE_overrideSpecifier - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterOverrideSpecifier" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterOverrideSpecifier"): listener.enterOverrideSpecifier(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitOverrideSpecifier" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitOverrideSpecifier"): listener.exitOverrideSpecifier(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitOverrideSpecifier" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitOverrideSpecifier"): return visitor.visitOverrideSpecifier(self) else: return visitor.visitChildren(self) - - - def overrideSpecifier(self): - localctx = SolidityParser.OverrideSpecifierContext(self, self._ctx, self.state) self.enterRule(localctx, 198, self.RULE_overrideSpecifier) - self._la = 0 # Token type + self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) self.state = 1149 @@ -8954,7 +10811,7 @@ def overrideSpecifier(self): self.state = 1161 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==SolidityParser.T__22: + if _la == SolidityParser.T__22: self.state = 1150 self.match(SolidityParser.T__22) self.state = 1151 @@ -8962,7 +10819,7 @@ def overrideSpecifier(self): self.state = 1156 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==SolidityParser.T__15: + while _la == SolidityParser.T__15: self.state = 1152 self.match(SolidityParser.T__15) self.state = 1153 @@ -8974,7 +10831,6 @@ def overrideSpecifier(self): self.state = 1159 self.match(SolidityParser.T__23) - except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -8983,14 +10839,14 @@ def overrideSpecifier(self): self.exitRule() return localctx - class StringLiteralContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): super().__init__(parent, invokingState) self.parser = parser - def StringLiteralFragment(self, i:int=None): + def StringLiteralFragment(self, i: int = None): if i is None: return self.getTokens(SolidityParser.StringLiteralFragment) else: @@ -8999,42 +10855,38 @@ def StringLiteralFragment(self, i:int=None): def getRuleIndex(self): return SolidityParser.RULE_stringLiteral - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterStringLiteral" ): + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterStringLiteral"): listener.enterStringLiteral(self) - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitStringLiteral" ): + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitStringLiteral"): listener.exitStringLiteral(self) - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitStringLiteral" ): + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitStringLiteral"): return visitor.visitStringLiteral(self) else: return visitor.visitChildren(self) - - - def stringLiteral(self): - localctx = SolidityParser.StringLiteralContext(self, self._ctx, self.state) self.enterRule(localctx, 200, self.RULE_stringLiteral) try: self.enterOuterAlt(localctx, 1) - self.state = 1164 + self.state = 1164 self._errHandler.sync(self) _alt = 1 - while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + while _alt != 2 and _alt != ATN.INVALID_ALT_NUMBER: if _alt == 1: self.state = 1163 self.match(SolidityParser.StringLiteralFragment) else: raise NoViableAltException(self) - self.state = 1166 + self.state = 1166 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,129,self._ctx) + _alt = self._interp.adaptivePredict(self._input, 129, self._ctx) except RecognitionException as re: localctx.exception = re @@ -9044,9 +10896,7 @@ def stringLiteral(self): self.exitRule() return localctx - - - def sempred(self, localctx:RuleContext, ruleIndex:int, predIndex:int): + def sempred(self, localctx: RuleContext, ruleIndex: int, predIndex: int): if self._predicates == None: self._predicates = dict() self._predicates[38] = self.typeName_sempred @@ -9057,88 +10907,64 @@ def sempred(self, localctx:RuleContext, ruleIndex:int, predIndex:int): else: return pred(localctx, predIndex) - def typeName_sempred(self, localctx:TypeNameContext, predIndex:int): - if predIndex == 0: - return self.precpred(self._ctx, 3) - - - def expression_sempred(self, localctx:ExpressionContext, predIndex:int): - if predIndex == 1: - return self.precpred(self._ctx, 14) - - - if predIndex == 2: - return self.precpred(self._ctx, 13) - - - if predIndex == 3: - return self.precpred(self._ctx, 12) - - - if predIndex == 4: - return self.precpred(self._ctx, 11) - + def typeName_sempred(self, localctx: TypeNameContext, predIndex: int): + if predIndex == 0: + return self.precpred(self._ctx, 3) - if predIndex == 5: - return self.precpred(self._ctx, 10) - + def expression_sempred(self, localctx: ExpressionContext, predIndex: int): + if predIndex == 1: + return self.precpred(self._ctx, 14) - if predIndex == 6: - return self.precpred(self._ctx, 9) - + if predIndex == 2: + return self.precpred(self._ctx, 13) - if predIndex == 7: - return self.precpred(self._ctx, 8) - + if predIndex == 3: + return self.precpred(self._ctx, 12) - if predIndex == 8: - return self.precpred(self._ctx, 7) - + if predIndex == 4: + return self.precpred(self._ctx, 11) - if predIndex == 9: - return self.precpred(self._ctx, 6) - + if predIndex == 5: + return self.precpred(self._ctx, 10) - if predIndex == 10: - return self.precpred(self._ctx, 5) - + if predIndex == 6: + return self.precpred(self._ctx, 9) - if predIndex == 11: - return self.precpred(self._ctx, 4) - + if predIndex == 7: + return self.precpred(self._ctx, 8) - if predIndex == 12: - return self.precpred(self._ctx, 3) - + if predIndex == 8: + return self.precpred(self._ctx, 7) - if predIndex == 13: - return self.precpred(self._ctx, 2) - + if predIndex == 9: + return self.precpred(self._ctx, 6) - if predIndex == 14: - return self.precpred(self._ctx, 27) - + if predIndex == 10: + return self.precpred(self._ctx, 5) - if predIndex == 15: - return self.precpred(self._ctx, 25) - + if predIndex == 11: + return self.precpred(self._ctx, 4) - if predIndex == 16: - return self.precpred(self._ctx, 24) - + if predIndex == 12: + return self.precpred(self._ctx, 3) - if predIndex == 17: - return self.precpred(self._ctx, 23) - + if predIndex == 13: + return self.precpred(self._ctx, 2) - if predIndex == 18: - return self.precpred(self._ctx, 22) - + if predIndex == 14: + return self.precpred(self._ctx, 27) - if predIndex == 19: - return self.precpred(self._ctx, 21) - + if predIndex == 15: + return self.precpred(self._ctx, 25) + if predIndex == 16: + return self.precpred(self._ctx, 24) + if predIndex == 17: + return self.precpred(self._ctx, 23) + if predIndex == 18: + return self.precpred(self._ctx, 22) + if predIndex == 19: + return self.precpred(self._ctx, 21) diff --git a/solidity_parser/solidity_antlr4/SolidityVisitor.py b/solidity_parser/solidity_antlr4/SolidityVisitor.py index 953502b..84b35d8 100644 --- a/solidity_parser/solidity_antlr4/SolidityVisitor.py +++ b/solidity_parser/solidity_antlr4/SolidityVisitor.py @@ -1,5 +1,6 @@ # Generated from solidity-antlr4/Solidity.g4 by ANTLR 4.7.2 from antlr4 import * + if __name__ is not None and "." in __name__: from .SolidityParser import SolidityParser else: @@ -7,512 +8,447 @@ # This class defines a complete generic visitor for a parse tree produced by SolidityParser. -class SolidityVisitor(ParseTreeVisitor): +class SolidityVisitor(ParseTreeVisitor): # Visit a parse tree produced by SolidityParser#sourceUnit. - def visitSourceUnit(self, ctx:SolidityParser.SourceUnitContext): + def visitSourceUnit(self, ctx: SolidityParser.SourceUnitContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#pragmaDirective. - def visitPragmaDirective(self, ctx:SolidityParser.PragmaDirectiveContext): + def visitPragmaDirective(self, ctx: SolidityParser.PragmaDirectiveContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#pragmaName. - def visitPragmaName(self, ctx:SolidityParser.PragmaNameContext): + def visitPragmaName(self, ctx: SolidityParser.PragmaNameContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#pragmaValue. - def visitPragmaValue(self, ctx:SolidityParser.PragmaValueContext): + def visitPragmaValue(self, ctx: SolidityParser.PragmaValueContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#version. - def visitVersion(self, ctx:SolidityParser.VersionContext): + def visitVersion(self, ctx: SolidityParser.VersionContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#versionOperator. - def visitVersionOperator(self, ctx:SolidityParser.VersionOperatorContext): + def visitVersionOperator(self, ctx: SolidityParser.VersionOperatorContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#versionConstraint. - def visitVersionConstraint(self, ctx:SolidityParser.VersionConstraintContext): + def visitVersionConstraint(self, ctx: SolidityParser.VersionConstraintContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#importDeclaration. - def visitImportDeclaration(self, ctx:SolidityParser.ImportDeclarationContext): + def visitImportDeclaration(self, ctx: SolidityParser.ImportDeclarationContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#importDirective. - def visitImportDirective(self, ctx:SolidityParser.ImportDirectiveContext): + def visitImportDirective(self, ctx: SolidityParser.ImportDirectiveContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#importPath. - def visitImportPath(self, ctx:SolidityParser.ImportPathContext): + def visitImportPath(self, ctx: SolidityParser.ImportPathContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#contractDefinition. - def visitContractDefinition(self, ctx:SolidityParser.ContractDefinitionContext): + def visitContractDefinition(self, ctx: SolidityParser.ContractDefinitionContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#inheritanceSpecifier. - def visitInheritanceSpecifier(self, ctx:SolidityParser.InheritanceSpecifierContext): + def visitInheritanceSpecifier( + self, ctx: SolidityParser.InheritanceSpecifierContext + ): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#contractPart. - def visitContractPart(self, ctx:SolidityParser.ContractPartContext): + def visitContractPart(self, ctx: SolidityParser.ContractPartContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#stateVariableDeclaration. - def visitStateVariableDeclaration(self, ctx:SolidityParser.StateVariableDeclarationContext): + def visitStateVariableDeclaration( + self, ctx: SolidityParser.StateVariableDeclarationContext + ): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#fileLevelConstant. - def visitFileLevelConstant(self, ctx:SolidityParser.FileLevelConstantContext): + def visitFileLevelConstant(self, ctx: SolidityParser.FileLevelConstantContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#customErrorDefinition. - def visitCustomErrorDefinition(self, ctx:SolidityParser.CustomErrorDefinitionContext): + def visitCustomErrorDefinition( + self, ctx: SolidityParser.CustomErrorDefinitionContext + ): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#typeDefinition. - def visitTypeDefinition(self, ctx:SolidityParser.TypeDefinitionContext): + def visitTypeDefinition(self, ctx: SolidityParser.TypeDefinitionContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#usingForDeclaration. - def visitUsingForDeclaration(self, ctx:SolidityParser.UsingForDeclarationContext): + def visitUsingForDeclaration(self, ctx: SolidityParser.UsingForDeclarationContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#usingForObject. - def visitUsingForObject(self, ctx:SolidityParser.UsingForObjectContext): + def visitUsingForObject(self, ctx: SolidityParser.UsingForObjectContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#usingForObjectDirective. - def visitUsingForObjectDirective(self, ctx:SolidityParser.UsingForObjectDirectiveContext): + def visitUsingForObjectDirective( + self, ctx: SolidityParser.UsingForObjectDirectiveContext + ): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#userDefinableOperators. - def visitUserDefinableOperators(self, ctx:SolidityParser.UserDefinableOperatorsContext): + def visitUserDefinableOperators( + self, ctx: SolidityParser.UserDefinableOperatorsContext + ): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#structDefinition. - def visitStructDefinition(self, ctx:SolidityParser.StructDefinitionContext): + def visitStructDefinition(self, ctx: SolidityParser.StructDefinitionContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#modifierDefinition. - def visitModifierDefinition(self, ctx:SolidityParser.ModifierDefinitionContext): + def visitModifierDefinition(self, ctx: SolidityParser.ModifierDefinitionContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#modifierInvocation. - def visitModifierInvocation(self, ctx:SolidityParser.ModifierInvocationContext): + def visitModifierInvocation(self, ctx: SolidityParser.ModifierInvocationContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#functionDefinition. - def visitFunctionDefinition(self, ctx:SolidityParser.FunctionDefinitionContext): + def visitFunctionDefinition(self, ctx: SolidityParser.FunctionDefinitionContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#functionDescriptor. - def visitFunctionDescriptor(self, ctx:SolidityParser.FunctionDescriptorContext): + def visitFunctionDescriptor(self, ctx: SolidityParser.FunctionDescriptorContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#returnParameters. - def visitReturnParameters(self, ctx:SolidityParser.ReturnParametersContext): + def visitReturnParameters(self, ctx: SolidityParser.ReturnParametersContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#modifierList. - def visitModifierList(self, ctx:SolidityParser.ModifierListContext): + def visitModifierList(self, ctx: SolidityParser.ModifierListContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#eventDefinition. - def visitEventDefinition(self, ctx:SolidityParser.EventDefinitionContext): + def visitEventDefinition(self, ctx: SolidityParser.EventDefinitionContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#enumValue. - def visitEnumValue(self, ctx:SolidityParser.EnumValueContext): + def visitEnumValue(self, ctx: SolidityParser.EnumValueContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#enumDefinition. - def visitEnumDefinition(self, ctx:SolidityParser.EnumDefinitionContext): + def visitEnumDefinition(self, ctx: SolidityParser.EnumDefinitionContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#parameterList. - def visitParameterList(self, ctx:SolidityParser.ParameterListContext): + def visitParameterList(self, ctx: SolidityParser.ParameterListContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#parameter. - def visitParameter(self, ctx:SolidityParser.ParameterContext): + def visitParameter(self, ctx: SolidityParser.ParameterContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#eventParameterList. - def visitEventParameterList(self, ctx:SolidityParser.EventParameterListContext): + def visitEventParameterList(self, ctx: SolidityParser.EventParameterListContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#eventParameter. - def visitEventParameter(self, ctx:SolidityParser.EventParameterContext): + def visitEventParameter(self, ctx: SolidityParser.EventParameterContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#functionTypeParameterList. - def visitFunctionTypeParameterList(self, ctx:SolidityParser.FunctionTypeParameterListContext): + def visitFunctionTypeParameterList( + self, ctx: SolidityParser.FunctionTypeParameterListContext + ): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#functionTypeParameter. - def visitFunctionTypeParameter(self, ctx:SolidityParser.FunctionTypeParameterContext): + def visitFunctionTypeParameter( + self, ctx: SolidityParser.FunctionTypeParameterContext + ): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#variableDeclaration. - def visitVariableDeclaration(self, ctx:SolidityParser.VariableDeclarationContext): + def visitVariableDeclaration(self, ctx: SolidityParser.VariableDeclarationContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#typeName. - def visitTypeName(self, ctx:SolidityParser.TypeNameContext): + def visitTypeName(self, ctx: SolidityParser.TypeNameContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#userDefinedTypeName. - def visitUserDefinedTypeName(self, ctx:SolidityParser.UserDefinedTypeNameContext): + def visitUserDefinedTypeName(self, ctx: SolidityParser.UserDefinedTypeNameContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#mappingKey. - def visitMappingKey(self, ctx:SolidityParser.MappingKeyContext): + def visitMappingKey(self, ctx: SolidityParser.MappingKeyContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#mapping. - def visitMapping(self, ctx:SolidityParser.MappingContext): + def visitMapping(self, ctx: SolidityParser.MappingContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#mappingKeyName. - def visitMappingKeyName(self, ctx:SolidityParser.MappingKeyNameContext): + def visitMappingKeyName(self, ctx: SolidityParser.MappingKeyNameContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#mappingValueName. - def visitMappingValueName(self, ctx:SolidityParser.MappingValueNameContext): + def visitMappingValueName(self, ctx: SolidityParser.MappingValueNameContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#functionTypeName. - def visitFunctionTypeName(self, ctx:SolidityParser.FunctionTypeNameContext): + def visitFunctionTypeName(self, ctx: SolidityParser.FunctionTypeNameContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#storageLocation. - def visitStorageLocation(self, ctx:SolidityParser.StorageLocationContext): + def visitStorageLocation(self, ctx: SolidityParser.StorageLocationContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#stateMutability. - def visitStateMutability(self, ctx:SolidityParser.StateMutabilityContext): + def visitStateMutability(self, ctx: SolidityParser.StateMutabilityContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#block. - def visitBlock(self, ctx:SolidityParser.BlockContext): + def visitBlock(self, ctx: SolidityParser.BlockContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#statement. - def visitStatement(self, ctx:SolidityParser.StatementContext): + def visitStatement(self, ctx: SolidityParser.StatementContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#expressionStatement. - def visitExpressionStatement(self, ctx:SolidityParser.ExpressionStatementContext): + def visitExpressionStatement(self, ctx: SolidityParser.ExpressionStatementContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#ifStatement. - def visitIfStatement(self, ctx:SolidityParser.IfStatementContext): + def visitIfStatement(self, ctx: SolidityParser.IfStatementContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#tryStatement. - def visitTryStatement(self, ctx:SolidityParser.TryStatementContext): + def visitTryStatement(self, ctx: SolidityParser.TryStatementContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#catchClause. - def visitCatchClause(self, ctx:SolidityParser.CatchClauseContext): + def visitCatchClause(self, ctx: SolidityParser.CatchClauseContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#whileStatement. - def visitWhileStatement(self, ctx:SolidityParser.WhileStatementContext): + def visitWhileStatement(self, ctx: SolidityParser.WhileStatementContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#simpleStatement. - def visitSimpleStatement(self, ctx:SolidityParser.SimpleStatementContext): + def visitSimpleStatement(self, ctx: SolidityParser.SimpleStatementContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#uncheckedStatement. - def visitUncheckedStatement(self, ctx:SolidityParser.UncheckedStatementContext): + def visitUncheckedStatement(self, ctx: SolidityParser.UncheckedStatementContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#forStatement. - def visitForStatement(self, ctx:SolidityParser.ForStatementContext): + def visitForStatement(self, ctx: SolidityParser.ForStatementContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#inlineAssemblyStatement. - def visitInlineAssemblyStatement(self, ctx:SolidityParser.InlineAssemblyStatementContext): + def visitInlineAssemblyStatement( + self, ctx: SolidityParser.InlineAssemblyStatementContext + ): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#inlineAssemblyStatementFlag. - def visitInlineAssemblyStatementFlag(self, ctx:SolidityParser.InlineAssemblyStatementFlagContext): + def visitInlineAssemblyStatementFlag( + self, ctx: SolidityParser.InlineAssemblyStatementFlagContext + ): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#doWhileStatement. - def visitDoWhileStatement(self, ctx:SolidityParser.DoWhileStatementContext): + def visitDoWhileStatement(self, ctx: SolidityParser.DoWhileStatementContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#continueStatement. - def visitContinueStatement(self, ctx:SolidityParser.ContinueStatementContext): + def visitContinueStatement(self, ctx: SolidityParser.ContinueStatementContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#breakStatement. - def visitBreakStatement(self, ctx:SolidityParser.BreakStatementContext): + def visitBreakStatement(self, ctx: SolidityParser.BreakStatementContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#returnStatement. - def visitReturnStatement(self, ctx:SolidityParser.ReturnStatementContext): + def visitReturnStatement(self, ctx: SolidityParser.ReturnStatementContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#throwStatement. - def visitThrowStatement(self, ctx:SolidityParser.ThrowStatementContext): + def visitThrowStatement(self, ctx: SolidityParser.ThrowStatementContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#emitStatement. - def visitEmitStatement(self, ctx:SolidityParser.EmitStatementContext): + def visitEmitStatement(self, ctx: SolidityParser.EmitStatementContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#revertStatement. - def visitRevertStatement(self, ctx:SolidityParser.RevertStatementContext): + def visitRevertStatement(self, ctx: SolidityParser.RevertStatementContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#variableDeclarationStatement. - def visitVariableDeclarationStatement(self, ctx:SolidityParser.VariableDeclarationStatementContext): + def visitVariableDeclarationStatement( + self, ctx: SolidityParser.VariableDeclarationStatementContext + ): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#variableDeclarationList. - def visitVariableDeclarationList(self, ctx:SolidityParser.VariableDeclarationListContext): + def visitVariableDeclarationList( + self, ctx: SolidityParser.VariableDeclarationListContext + ): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#identifierList. - def visitIdentifierList(self, ctx:SolidityParser.IdentifierListContext): + def visitIdentifierList(self, ctx: SolidityParser.IdentifierListContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#elementaryTypeName. - def visitElementaryTypeName(self, ctx:SolidityParser.ElementaryTypeNameContext): + def visitElementaryTypeName(self, ctx: SolidityParser.ElementaryTypeNameContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#expression. - def visitExpression(self, ctx:SolidityParser.ExpressionContext): + def visitExpression(self, ctx: SolidityParser.ExpressionContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#primaryExpression. - def visitPrimaryExpression(self, ctx:SolidityParser.PrimaryExpressionContext): + def visitPrimaryExpression(self, ctx: SolidityParser.PrimaryExpressionContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#expressionList. - def visitExpressionList(self, ctx:SolidityParser.ExpressionListContext): + def visitExpressionList(self, ctx: SolidityParser.ExpressionListContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#nameValueList. - def visitNameValueList(self, ctx:SolidityParser.NameValueListContext): + def visitNameValueList(self, ctx: SolidityParser.NameValueListContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#nameValue. - def visitNameValue(self, ctx:SolidityParser.NameValueContext): + def visitNameValue(self, ctx: SolidityParser.NameValueContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#functionCallArguments. - def visitFunctionCallArguments(self, ctx:SolidityParser.FunctionCallArgumentsContext): + def visitFunctionCallArguments( + self, ctx: SolidityParser.FunctionCallArgumentsContext + ): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#functionCall. - def visitFunctionCall(self, ctx:SolidityParser.FunctionCallContext): + def visitFunctionCall(self, ctx: SolidityParser.FunctionCallContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#assemblyBlock. - def visitAssemblyBlock(self, ctx:SolidityParser.AssemblyBlockContext): + def visitAssemblyBlock(self, ctx: SolidityParser.AssemblyBlockContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#assemblyItem. - def visitAssemblyItem(self, ctx:SolidityParser.AssemblyItemContext): + def visitAssemblyItem(self, ctx: SolidityParser.AssemblyItemContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#assemblyExpression. - def visitAssemblyExpression(self, ctx:SolidityParser.AssemblyExpressionContext): + def visitAssemblyExpression(self, ctx: SolidityParser.AssemblyExpressionContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#assemblyMember. - def visitAssemblyMember(self, ctx:SolidityParser.AssemblyMemberContext): + def visitAssemblyMember(self, ctx: SolidityParser.AssemblyMemberContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#assemblyCall. - def visitAssemblyCall(self, ctx:SolidityParser.AssemblyCallContext): + def visitAssemblyCall(self, ctx: SolidityParser.AssemblyCallContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#assemblyLocalDefinition. - def visitAssemblyLocalDefinition(self, ctx:SolidityParser.AssemblyLocalDefinitionContext): + def visitAssemblyLocalDefinition( + self, ctx: SolidityParser.AssemblyLocalDefinitionContext + ): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#assemblyAssignment. - def visitAssemblyAssignment(self, ctx:SolidityParser.AssemblyAssignmentContext): + def visitAssemblyAssignment(self, ctx: SolidityParser.AssemblyAssignmentContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#assemblyIdentifierOrList. - def visitAssemblyIdentifierOrList(self, ctx:SolidityParser.AssemblyIdentifierOrListContext): + def visitAssemblyIdentifierOrList( + self, ctx: SolidityParser.AssemblyIdentifierOrListContext + ): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#assemblyIdentifierList. - def visitAssemblyIdentifierList(self, ctx:SolidityParser.AssemblyIdentifierListContext): + def visitAssemblyIdentifierList( + self, ctx: SolidityParser.AssemblyIdentifierListContext + ): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#assemblyStackAssignment. - def visitAssemblyStackAssignment(self, ctx:SolidityParser.AssemblyStackAssignmentContext): + def visitAssemblyStackAssignment( + self, ctx: SolidityParser.AssemblyStackAssignmentContext + ): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#labelDefinition. - def visitLabelDefinition(self, ctx:SolidityParser.LabelDefinitionContext): + def visitLabelDefinition(self, ctx: SolidityParser.LabelDefinitionContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#assemblySwitch. - def visitAssemblySwitch(self, ctx:SolidityParser.AssemblySwitchContext): + def visitAssemblySwitch(self, ctx: SolidityParser.AssemblySwitchContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#assemblyCase. - def visitAssemblyCase(self, ctx:SolidityParser.AssemblyCaseContext): + def visitAssemblyCase(self, ctx: SolidityParser.AssemblyCaseContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#assemblyFunctionDefinition. - def visitAssemblyFunctionDefinition(self, ctx:SolidityParser.AssemblyFunctionDefinitionContext): + def visitAssemblyFunctionDefinition( + self, ctx: SolidityParser.AssemblyFunctionDefinitionContext + ): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#assemblyFunctionReturns. - def visitAssemblyFunctionReturns(self, ctx:SolidityParser.AssemblyFunctionReturnsContext): + def visitAssemblyFunctionReturns( + self, ctx: SolidityParser.AssemblyFunctionReturnsContext + ): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#assemblyFor. - def visitAssemblyFor(self, ctx:SolidityParser.AssemblyForContext): + def visitAssemblyFor(self, ctx: SolidityParser.AssemblyForContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#assemblyIf. - def visitAssemblyIf(self, ctx:SolidityParser.AssemblyIfContext): + def visitAssemblyIf(self, ctx: SolidityParser.AssemblyIfContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#assemblyLiteral. - def visitAssemblyLiteral(self, ctx:SolidityParser.AssemblyLiteralContext): + def visitAssemblyLiteral(self, ctx: SolidityParser.AssemblyLiteralContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#tupleExpression. - def visitTupleExpression(self, ctx:SolidityParser.TupleExpressionContext): + def visitTupleExpression(self, ctx: SolidityParser.TupleExpressionContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#numberLiteral. - def visitNumberLiteral(self, ctx:SolidityParser.NumberLiteralContext): + def visitNumberLiteral(self, ctx: SolidityParser.NumberLiteralContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#identifier. - def visitIdentifier(self, ctx:SolidityParser.IdentifierContext): + def visitIdentifier(self, ctx: SolidityParser.IdentifierContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#hexLiteral. - def visitHexLiteral(self, ctx:SolidityParser.HexLiteralContext): + def visitHexLiteral(self, ctx: SolidityParser.HexLiteralContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#overrideSpecifier. - def visitOverrideSpecifier(self, ctx:SolidityParser.OverrideSpecifierContext): + def visitOverrideSpecifier(self, ctx: SolidityParser.OverrideSpecifierContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SolidityParser#stringLiteral. - def visitStringLiteral(self, ctx:SolidityParser.StringLiteralContext): + def visitStringLiteral(self, ctx: SolidityParser.StringLiteralContext): return self.visitChildren(ctx) - -del SolidityParser \ No newline at end of file +del SolidityParser From 748d014f736d9a82bd6b5ac04e19954d8d657d4e Mon Sep 17 00:00:00 2001 From: sam bacha Date: Tue, 15 Aug 2023 09:51:08 -0700 Subject: [PATCH 3/7] build(scripts): setup build scripts --- .github/workflows/build.yml | 27 ++++++++++++++++++++++++++ scripts/antlr4.sh | 7 ------- scripts/prebuild.sh | 38 +++++++++++++++++++++++++++++++++++++ scripts/start.sh | 18 ++++++++++++++++++ 4 files changed, 83 insertions(+), 7 deletions(-) create mode 100644 .github/workflows/build.yml create mode 100755 scripts/prebuild.sh create mode 100755 scripts/start.sh diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..42913b1 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,27 @@ +# .github/workflows/pytest-ci.yml + +name: build + +on: [push, pull_request] + +jobs: + test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + # Repository name with owner. For example, actions/checkout + # Default: ${{ github.repository }} + repository: "" + submodules: recursive + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + - name: Install dependencies + run: | + python -m pip install --upgrade pip + if [ -f requirements.txt ]; then pip install -r requirements.txt; fi + python setup.py install + bash scripts/build.sh diff --git a/scripts/antlr4.sh b/scripts/antlr4.sh index 5187cf3..79ad4ae 100755 --- a/scripts/antlr4.sh +++ b/scripts/antlr4.sh @@ -3,13 +3,6 @@ set -o errexit # antlr -Dlanguage=Python3 solidity-antlr4/Solidity.g4 -o src -visitor - -git submodule sync --recursive && git submodule update --init --recursive -git submodule foreach --recursive git clean -ffdx -git submodule update --remote --rebase solidity-antlr4 - - -bash solidity-antlr4/build.sh sleep 1 [ ! -f ./solidity-antlr4/antlr4.jar ] && { echo "ANTLR4 Jar does not exist."; exit 1; } diff --git a/scripts/prebuild.sh b/scripts/prebuild.sh new file mode 100755 index 0000000..07f3a16 --- /dev/null +++ b/scripts/prebuild.sh @@ -0,0 +1,38 @@ +#!/usr/bin/env bash +# shellcheck disable=SC2034 + +echo "$JAVA_HOME" + + +ANTLR_JAR="antlr4.jar" +ANTLR_JAR_URI="https://www.antlr.org/download/antlr-4.9-complete.jar" + + +GRAMMAR="Solidity" +START_RULE="sourceUnit" +TEST_FILE="test.sol" +ERROR_PATTERN="mismatched|extraneous" + +function download_antlr4 +{ + if [[ ! -e "$ANTLR_JAR" ]] + then + curl -sL "${ANTLR_JAR_URI}" -o "${ANTLR_JAR}" + fi +} + +echo "Downloading Antlr 4.9..." + +download_antlr4 + +mkdir -p target/ + +echo "Creating parser" +( +java -jar $ANTLR_JAR $GRAMMAR.g4 -o src/ +sleep 1 +javac -classpath $ANTLR_JAR src/*.java -d target/ +) + +echo "Artifacts Generated" +exit 0 \ No newline at end of file diff --git a/scripts/start.sh b/scripts/start.sh new file mode 100755 index 0000000..04a5d26 --- /dev/null +++ b/scripts/start.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env bash +set -o errexit + +git submodule sync --recursive && git submodule update --init --recursive +git submodule foreach --recursive git clean -ffdx +git submodule update --remote --rebase solidity-antlr4 +sleep 1 + +[ ! -f ./scripts/build.sh ] && { echo "Solidity Antlr4 does not exist."; exit 1; } + +cp scripts/build.sh solidity-antlr4/setup.sh +bash solidity-antlr4/setup.sh +sleep 1 +bash scripts/anltr4.sh + +echo "Solidity Antlr4.9 build complete!" + +exit 0 \ No newline at end of file From 4f1cfbeb87dc29d1a62e6e6fbf07332bb87dfd7d Mon Sep 17 00:00:00 2001 From: sam bacha Date: Tue, 15 Aug 2023 09:51:45 -0700 Subject: [PATCH 4/7] ci(build): use start script --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 42913b1..8e37d90 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -24,4 +24,4 @@ jobs: python -m pip install --upgrade pip if [ -f requirements.txt ]; then pip install -r requirements.txt; fi python setup.py install - bash scripts/build.sh + bash scripts/start.sh From 0120617fe563d2830ac7629cbd2ee539251f7902 Mon Sep 17 00:00:00 2001 From: sam bacha Date: Tue, 15 Aug 2023 09:59:13 -0700 Subject: [PATCH 5/7] ci(build): workflow fixes --- .github/workflows/build.yml | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8e37d90..aec9938 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -2,7 +2,15 @@ name: build -on: [push, pull_request] +on: + push: + tags: + - "[0-9]+.[0-9]+" + - "[0-9]+.[0-9]+.[0-9]+" + pull_request: + paths: + - ".github/workflows/build.yml" + workflow_dispatch: {} jobs: test: @@ -10,18 +18,14 @@ jobs: steps: - uses: actions/checkout@v3 with: - # Repository name with owner. For example, actions/checkout - # Default: ${{ github.repository }} - repository: "" submodules: recursive - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v4 + - uses: actions/setup-python@v4 with: - python-version: ${{ matrix.python-version }} + python-version: "3.9" + cache: "pip" # caching pip dependencies - name: Install dependencies run: | - python -m pip install --upgrade pip - if [ -f requirements.txt ]; then pip install -r requirements.txt; fi + pip install -r requirements.txt python setup.py install bash scripts/start.sh From 0197f2f3fb2e9c57aab240860c31aa3c6257b7a5 Mon Sep 17 00:00:00 2001 From: sam bacha Date: Tue, 15 Aug 2023 10:02:31 -0700 Subject: [PATCH 6/7] fix(build): ensure submodule check --- scripts/start.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/start.sh b/scripts/start.sh index 04a5d26..552269b 100755 --- a/scripts/start.sh +++ b/scripts/start.sh @@ -6,7 +6,8 @@ git submodule foreach --recursive git clean -ffdx git submodule update --remote --rebase solidity-antlr4 sleep 1 -[ ! -f ./scripts/build.sh ] && { echo "Solidity Antlr4 does not exist."; exit 1; } +# Sanity Check that Submodules was successful +[ ! -f ./solidity-antlr4/scripts/build.sh ] && { echo "Solidity Antlr4 does not exist."; exit 1; } cp scripts/build.sh solidity-antlr4/setup.sh bash solidity-antlr4/setup.sh From 980ccd59d90ef975203deb2a427e5843d412e44c Mon Sep 17 00:00:00 2001 From: sam bacha Date: Tue, 15 Aug 2023 10:06:39 -0700 Subject: [PATCH 7/7] fix(submodules): anltr4 --- solidity-antlr4 | 1 - 1 file changed, 1 deletion(-) delete mode 160000 solidity-antlr4 diff --git a/solidity-antlr4 b/solidity-antlr4 deleted file mode 160000 index 1048147..0000000 --- a/solidity-antlr4 +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 104814708338d8d20e4e3f2deda64c557b7b2756