From ee450a8504a53446feda9e25c60c800111dcfc9f Mon Sep 17 00:00:00 2001 From: skef <6175836+skef@users.noreply.github.com> Date: Fri, 29 Sep 2023 16:59:42 -0700 Subject: [PATCH 01/56] Fix otfstemhist bugs (#1703) * Fix otfstemhist bugs: #1697 barfs w/o any arguments #1699 cannot specify glyphs by GID #1700 cannot specify glyphs via external glyph list #1701 -h reports wrong tool name --- python/afdko/otfautohint/__main__.py | 22 +++++---- python/afdko/otfautohint/autohint.py | 68 ++++++++++++++++++---------- 2 files changed, 59 insertions(+), 31 deletions(-) diff --git a/python/afdko/otfautohint/__main__.py b/python/afdko/otfautohint/__main__.py index d2e0fd155..ee21d3cc1 100644 --- a/python/afdko/otfautohint/__main__.py +++ b/python/afdko/otfautohint/__main__.py @@ -489,7 +489,7 @@ def _parse_fontinfo_file(options, fontinfo_path): options.hCounterGlyphs.update(glyphList) -def add_common_options(parser, term): +def add_common_options(parser, term, name): parser_fonts = parser.add_argument( 'font_paths', metavar='FONT', @@ -516,9 +516,9 @@ def add_common_options(parser, term): help='comma-separated sequence of glyphs to %s\n' % term + 'The glyph identifiers may be glyph indexes, glyph names, or ' 'glyph CIDs. CID values must be prefixed with a forward slash.\n' - 'Examples:\n' - ' otfautohint -g A,B,C,69 MyFont.ufo\n' - ' otfautohint -g /103,/434,68 MyCIDFont' + 'Examples:\n' + + " otf%s -g A,B,C,69 MyFont.ufo\n" % name + + " otf%s -g /103,/434,68 MyCIDFont" % name ) glyphs_parser.add_argument( '--glyphs-file', @@ -622,12 +622,14 @@ def handle_glyph_lists(options, parsed_args): elif parsed_args.glyphs_to_hint_file: options.explicitGlyphs = True options.glyphList = _process_glyph_list_arg( - _read_txt_file(parsed_args.glyphs_to_hint_file), + _split_comma_sequence( + _read_txt_file(parsed_args.glyphs_to_hint_file)), options.nameAliases) elif parsed_args.glyphs_to_not_hint_file: options.excludeGlyphList = True options.glyphList = _process_glyph_list_arg( - _read_txt_file(parsed_args.glyphs_to_not_hint_file), + _split_comma_sequence( + _read_txt_file(parsed_args.glyphs_to_not_hint_file)), options.nameAliases) if parsed_args.overlaps_to_hint: @@ -644,7 +646,7 @@ def get_options(args): formatter_class=_CustomHelpFormatter, description=__doc__ ) - parser_fonts = add_common_options(parser, 'hint') + parser_fonts = add_common_options(parser, 'hint', 'autohint') parser.add_argument( '-o', '--output', @@ -877,7 +879,7 @@ def get_stemhist_options(args): description='Stem and Alignment zones report for PostScript, ' 'OpenType/CFF and UFO fonts.' ) - add_common_options(parser, 'report') + parser_fonts = add_common_options(parser, 'report', 'stemhist') parser.add_argument( '-o', '--output', @@ -915,6 +917,10 @@ def get_stemhist_options(args): logging_conf(parsed_args.verbose, parsed_args.log_path) + if not len(parsed_args.font_paths): + parser.error( + f"the following arguments are required: {parser_fonts.metavar}") + if (parsed_args.output_paths and len(parsed_args.font_paths) != len(parsed_args.output_paths)): parser.error("number of input and output fonts differ") diff --git a/python/afdko/otfautohint/autohint.py b/python/afdko/otfautohint/autohint.py index 5fa12095a..286da23e1 100644 --- a/python/afdko/otfautohint/autohint.py +++ b/python/afdko/otfautohint/autohint.py @@ -92,32 +92,54 @@ def justReporting(self): def getGlyphNames(glyphSpec, fontGlyphList, fDesc): - glyphNameList = [] - rangeList = glyphSpec.split("-") - try: - prevGID = fontGlyphList.index(rangeList[0]) - except ValueError: - if len(rangeList) > 1: - log.warning("glyph ID <%s> in range %s from glyph selection " - "list option is not in font. <%s>.", - rangeList[0], glyphSpec, fDesc) - else: + # If the "range" is actually in the font, just ignore its apparent + # range-ness + if glyphSpec.isnumeric(): + GID = int(glyphSpec) + if GID >= len(fontGlyphList): log.warning("glyph ID <%s> from glyph selection list option " - "is not in font. <%s>.", rangeList[0], fDesc) + "exceeds number of glyphs in font <%s>.", + glyphSpec, fDesc) + return None + return [fontGlyphList[GID]] + elif glyphSpec in fontGlyphList: + return [glyphSpec] + + rangeList = glyphSpec.split("-") + if len(rangeList) == 1: + # Not numeric, not name, not range + log.warning("glyph name <%s> from glyph selection list option is " + "not in font <%s>", glyphSpec, fDesc) + return None + elif len(rangeList) > 2: + log.warning("Too many hyphens in glyph selection range <%s>", + glyphSpec) return None - glyphNameList.append(fontGlyphList[prevGID]) - for glyphName2 in rangeList[1:]: - try: - gid = fontGlyphList.index(glyphName2) - except ValueError: - log.warning("glyph ID <%s> in range %s from glyph selection " - "list option is not in font. <%s>.", - glyphName2, glyphSpec, fDesc) - return None - for i in range(prevGID + 1, gid + 1): - glyphNameList.append(fontGlyphList[i]) - prevGID = gid + glyphName1, glyphName2 = rangeList + gidList = [] + + for r in rangeList: + if r.isnumeric(): + GID = int(r) + if GID >= len(fontGlyphList): + log.warning("glyph name <%s> in range %s from glyph " + "selection list option is not in font <%s>.", + r, glyphSpec, fDesc) + return None + else: + try: + GID = fontGlyphList.index(r) + except ValueError: + log.warning("glyph name <%s> in range %s from glyph " + "selection list option is not in font <%s>.", + r, glyphSpec, fDesc) + return None + gidList.append(GID) + + glyphNameList = [] + for i in range(gidList[0], gidList[1] + 1): + glyphNameList.append(fontGlyphList[i]) return glyphNameList From 4f06cdac3e65616826edd570e82055114e0d4aaa Mon Sep 17 00:00:00 2001 From: Josh Hadley Date: Thu, 31 Aug 2023 10:27:46 -0700 Subject: [PATCH 02/56] add macOS .DS_Store to .gitignore --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index 10f28bd0a..640a737b3 100644 --- a/.gitignore +++ b/.gitignore @@ -26,3 +26,6 @@ cov*.xml # temp output dirs created during tests **/temp_output + +# macOS cruft +.DS_Store From 041a2ed56d0173fe060e3930d59d268c2e0aa29b Mon Sep 17 00:00:00 2001 From: Josh Hadley Date: Thu, 31 Aug 2023 10:31:42 -0700 Subject: [PATCH 03/56] [sfntedit] set filename before passing to error routine In sfntedit/source/Efile.c, if `filename` is not found, `fyl` was passed to `fileError` with its `->name` unset, leading to wrong/garbage output error message from `fileError`. Moving the statement that sets `fyl->name` *before* the `fyl->fp == NULL` check fixes it. --- c/sfntedit/source/Efile.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/c/sfntedit/source/Efile.c b/c/sfntedit/source/Efile.c index 46e0a338a..d678813d4 100644 --- a/c/sfntedit/source/Efile.c +++ b/c/sfntedit/source/Efile.c @@ -45,9 +45,9 @@ int fileExists(const char *filename) { void fileOpenRead(const char *filename, File *fyl) { { fyl->fp = sysOpenSearchpath(filename); + fyl->name = filename; if (fyl->fp == NULL) fileError(fyl); - fyl->name = filename; } } From 679082f3912d662411cade5544f6b6319c723c3b Mon Sep 17 00:00:00 2001 From: Josh Hadley Date: Thu, 31 Aug 2023 10:31:59 -0700 Subject: [PATCH 04/56] [sfntedit] bump VERSION --- c/sfntedit/source/main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/c/sfntedit/source/main.c b/c/sfntedit/source/main.c index 6c431c3a1..a9515f8c8 100644 --- a/c/sfntedit/source/main.c +++ b/c/sfntedit/source/main.c @@ -39,7 +39,7 @@ jmp_buf mark; #endif /* SUNOS */ -#define VERSION "1.4.3" +#define VERSION "1.4.4" /* Data type sizes (bytes) */ #define uint16_ 2 From 67fdb12aaf04ad4f1451b569d08c2e4e0a4de497 Mon Sep 17 00:00:00 2001 From: Josh Hadley Date: Thu, 31 Aug 2023 10:32:27 -0700 Subject: [PATCH 05/56] [tests] add test for sfntedit, adding non-existing file --- tests/sfntedit_test.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tests/sfntedit_test.py b/tests/sfntedit_test.py index 21ce499ec..0c157d76e 100644 --- a/tests/sfntedit_test.py +++ b/tests/sfntedit_test.py @@ -98,3 +98,13 @@ def test_missing_table_extract_bug160(): assert b'[WARNING]: table missing (xyz )' in output expected_path = get_expected_path('head_light.tb') assert differ([expected_path, actual_path, '-m', 'bin']) + + +def test_missing_file_add_bug_1658(): + font_path = get_input_path(ITALIC) + actual_path = get_temp_file_path() + stderr_path = runner(CMD + ['-s', '-e', '-o', 'a', '_GDEF=non_existing_GDEF_file', # noqa: E501 + '-f', font_path, actual_path]) + with open(stderr_path, 'rb') as f: + output = f.read() + assert b'[FATAL]: file error [non_existing_GDEF_file]' in output # noqa: E501 From 21efe0b98419895c00506ab4c7e14120ed234c4c Mon Sep 17 00:00:00 2001 From: Josh Hadley Date: Fri, 29 Sep 2023 16:11:59 -0700 Subject: [PATCH 06/56] [requirements] fontTools 4.43.0 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index ec41c535b..144ead91a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -6,7 +6,7 @@ lxml==4.9.3 booleanOperations==0.9.0 defcon[lxml,pens]==0.10.3 fontMath==0.9.3 -fontTools[unicode,woff,lxml,ufo]==4.42.1 +fontTools[unicode,woff,lxml,ufo]==4.43.0 psautohint==2.4.0 tqdm==4.66.1 ufonormalizer==0.6.1 From 389138c84e71c55dbd109813347631306adf6aaa Mon Sep 17 00:00:00 2001 From: Josh Hadley Date: Fri, 29 Sep 2023 16:13:15 -0700 Subject: [PATCH 07/56] [tests] update buildcff2vf expected output fontTools 4.43.0 caused a change in ttx output which in turn caused a test failure for buildcff2vf --- .../expected_output/CJKVar.ttx | 414 +----------------- .../expected_output/SHSansJPVFTest.ttx | 27 +- 2 files changed, 6 insertions(+), 435 deletions(-) diff --git a/tests/buildcff2vf_data/expected_output/CJKVar.ttx b/tests/buildcff2vf_data/expected_output/CJKVar.ttx index 5abc9f8f1..cff196d87 100644 --- a/tests/buildcff2vf_data/expected_output/CJKVar.ttx +++ b/tests/buildcff2vf_data/expected_output/CJKVar.ttx @@ -1,5 +1,5 @@ - + @@ -4919,212 +4919,8 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -5136,217 +4932,13 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + diff --git a/tests/buildcff2vf_data/expected_output/SHSansJPVFTest.ttx b/tests/buildcff2vf_data/expected_output/SHSansJPVFTest.ttx index c7f1e9e34..84b4f56a5 100644 --- a/tests/buildcff2vf_data/expected_output/SHSansJPVFTest.ttx +++ b/tests/buildcff2vf_data/expected_output/SHSansJPVFTest.ttx @@ -1,5 +1,5 @@ - + @@ -381,29 +381,8 @@ - + - - - - - - - - - - - - - - - - - - - - - @@ -416,7 +395,7 @@ - + From addea135bff5478e3471b20d28e54d91ae66c5db Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 30 Sep 2023 02:24:52 +0000 Subject: [PATCH 08/56] Update all dependencies --- .github/workflows/asan.yml | 2 +- .github/workflows/build_wheels.yml | 6 +++--- .github/workflows/codeql.yml | 2 +- .github/workflows/run_cvg.yml | 2 +- .github/workflows/testpythonpackage.yml | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/asan.yml b/.github/workflows/asan.yml index 1cf409986..b02f6d70e 100644 --- a/.github/workflows/asan.yml +++ b/.github/workflows/asan.yml @@ -17,7 +17,7 @@ jobs: run: | echo "Reason for triggering: ${{ github.event.inputs.reason }}" - - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4 + - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4 with: submodules: true diff --git a/.github/workflows/build_wheels.yml b/.github/workflows/build_wheels.yml index e6f73c966..6fd149196 100644 --- a/.github/workflows/build_wheels.yml +++ b/.github/workflows/build_wheels.yml @@ -27,7 +27,7 @@ jobs: echo "Reason for triggering: ${{ github.event.inputs.reason }}" - name: Check out - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4 + uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4 with: fetch-depth: 0 # unshallow fetch for setuptools-scm @@ -38,7 +38,7 @@ jobs: - name: Build wheel (only macosx_universal2) if: matrix.os == 'macos-latest' - uses: pypa/cibuildwheel@v2.15.0 + uses: pypa/cibuildwheel@v2.16.1 with: output-dir: dist env: @@ -47,7 +47,7 @@ jobs: CIBW_ENVIRONMENT_MACOS: "CFLAGS='-arch arm64 -arch x86_64 -I/usr/include/libxml2' CXXFLAGS='-arch arm64 -arch x86_64' LDFLAGS='-arch arm64 -arch x86_64'" - name: Build wheel (except macosx_universal2) - uses: pypa/cibuildwheel@v2.15.0 + uses: pypa/cibuildwheel@v2.16.1 with: output-dir: dist env: diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index abe744d2b..4de3f34fd 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -30,7 +30,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4 + uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4 - name: Install Dependencies (python) if: ${{ matrix.language == 'python' }} diff --git a/.github/workflows/run_cvg.yml b/.github/workflows/run_cvg.yml index b360cc4dc..0b99cbec6 100644 --- a/.github/workflows/run_cvg.yml +++ b/.github/workflows/run_cvg.yml @@ -30,7 +30,7 @@ jobs: run: | echo "Reason for triggering: ${{ github.event.inputs.reason }}" - name: Check out - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4 + uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4 with: fetch-depth: 0 # unshallow fetch for setuptools-scm diff --git a/.github/workflows/testpythonpackage.yml b/.github/workflows/testpythonpackage.yml index 051f63bf0..b14928e13 100644 --- a/.github/workflows/testpythonpackage.yml +++ b/.github/workflows/testpythonpackage.yml @@ -47,7 +47,7 @@ jobs: echo "Reason for triggering: ${{ github.event.inputs.reason }}" - name: Check out - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4 + uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4 with: fetch-depth: 0 # unshallow fetch for setuptools-scm From 30eee0919e843db94ccd32f0d3a5c4c85a34101e Mon Sep 17 00:00:00 2001 From: Kamile Demir Date: Fri, 29 Sep 2023 10:34:08 -0700 Subject: [PATCH 09/56] [README] Add instructions for creating xcodeproj --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index a339b3ea2..668c9439e 100644 --- a/README.md +++ b/README.md @@ -143,6 +143,12 @@ directory of the afdko, and run: python -m pip install . +Developing +----------------- +If you'd like to develop & debug AFDKO using Xcode, run: + + CMake -G Xcode . + For further information on building from source see [docs/FDK\_Build\_Notes.md](docs/FDK_Build_Notes.md). From ca963989d6172914fd9db57a6f9a2b880d7c8851 Mon Sep 17 00:00:00 2001 From: Josh Hadley Date: Fri, 29 Sep 2023 14:50:45 -0700 Subject: [PATCH 10/56] add guards for h->otl == NULL before calling otlSubtableAdd Testing in macOS 13.x revealed that there was no check for h->otl == NULL before calling otlSubtableAdd, which accesses h->otl in GPOSFill and GSUBFill routines. Without this check, otlSubtableAdd would fail with a segfault when h->otl was passed in NULL. linter happiness --- c/makeotf/lib/hotconv/GPOS.c | 4 ++++ c/makeotf/lib/hotconv/GSUB.c | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/c/makeotf/lib/hotconv/GPOS.c b/c/makeotf/lib/hotconv/GPOS.c index 63cb918c5..fb48bf9e9 100644 --- a/c/makeotf/lib/hotconv/GPOS.c +++ b/c/makeotf/lib/hotconv/GPOS.c @@ -379,6 +379,10 @@ int GPOSFill(hotCtx g) { createAnonLookups(g, h); + if (h->otl == NULL) { + return 0; + } + /* Add OTL features */ /* See GSUB.c::GSUBFill() for an explanation of the subtable order */ diff --git a/c/makeotf/lib/hotconv/GSUB.c b/c/makeotf/lib/hotconv/GSUB.c index 0ee266653..bcbe0ad29 100644 --- a/c/makeotf/lib/hotconv/GSUB.c +++ b/c/makeotf/lib/hotconv/GSUB.c @@ -217,6 +217,10 @@ int GSUBFill(hotCtx g) { createAnonLookups(g, h); + if (h->otl == NULL) { + return 0; + } + /* Add OTL features */ /* The font tables are in the order: From 0c6ff3cf92cb826c21c8016abddb702ee587646b Mon Sep 17 00:00:00 2001 From: Josh Hadley Date: Fri, 29 Sep 2023 18:32:00 -0700 Subject: [PATCH 11/56] [hotconv] update HOT_VERSION to 1.1.1 --- c/makeotf/include/hotconv.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/c/makeotf/include/hotconv.h b/c/makeotf/include/hotconv.h index bd2a6a826..d4972bde0 100644 --- a/c/makeotf/include/hotconv.h +++ b/c/makeotf/include/hotconv.h @@ -12,7 +12,7 @@ This software is licensed as OpenSource, under the Apache License, Version 2.0. extern "C" { #endif -#define HOT_VERSION 0x010100 /* Library version (1.1.0) */ +#define HOT_VERSION 0x010101 /* Library version (1.1.1) */ /* Major, minor, build = (HOT_VERSION >> 16) & 0xff, (HOT_VERSION >> 8) & 0xff, HOT_VERSION & 0xff) */ /* Warning: this string is now part of heuristic used by CoolType to identify the first round of CoolType fonts which had the backtrack sequence of a chaining From 263b86209c9c1d34c69a32d0b4192cd6cad89974 Mon Sep 17 00:00:00 2001 From: Josh Hadley Date: Fri, 29 Sep 2023 20:13:55 -0700 Subject: [PATCH 12/56] Update bug1349.ttx hotconv version --- tests/makeotfexe_data/expected_output/bug1349.ttx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/makeotfexe_data/expected_output/bug1349.ttx b/tests/makeotfexe_data/expected_output/bug1349.ttx index c706057a0..cd98b27ab 100644 --- a/tests/makeotfexe_data/expected_output/bug1349.ttx +++ b/tests/makeotfexe_data/expected_output/bug1349.ttx @@ -18,7 +18,7 @@ Noto Sans Mono CJK JP VF - Version 2.004;hotconv 1.1.0;makeotfexe 2.6.0 + Version 2.004;hotconv 1.1.1;makeotfexe 2.6.0 NotoSansMonoCJKjpVF-Regular From 5f56887867f77e0498a6769697e7d7707228dfc2 Mon Sep 17 00:00:00 2001 From: Josh Hadley Date: Mon, 9 Oct 2023 13:41:03 -0700 Subject: [PATCH 13/56] Update testpythonpackage.yml - add 3.11 to python-version matrix - add 3.10 to exclude list for macos-latest and windows-latest --- .github/workflows/testpythonpackage.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/testpythonpackage.yml b/.github/workflows/testpythonpackage.yml index b14928e13..f4a33b330 100644 --- a/.github/workflows/testpythonpackage.yml +++ b/.github/workflows/testpythonpackage.yml @@ -28,16 +28,20 @@ jobs: strategy: matrix: os: [ubuntu-latest, macos-latest, windows-latest] - python-version: ["3.8", "3.9", "3.10"] + python-version: ["3.8", "3.9", "3.10", "3.11"] exclude: - os: macos-latest python-version: "3.8" - os: macos-latest python-version: "3.9" + - os: macos-latest + python-version: "3.10" - os: windows-latest python-version: "3.8" - os: windows-latest python-version: "3.9" + - os: windows-latest + python-version: "3.10" steps: From 7dad211b4d1e8674e8259a14600b9c956bc4578a Mon Sep 17 00:00:00 2001 From: Josh Hadley Date: Mon, 9 Oct 2023 15:09:38 -0700 Subject: [PATCH 14/56] Update README.md - replace blurb about Python 3.11 with more generic info about Python versions --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 668c9439e..0e39ee83d 100644 --- a/README.md +++ b/README.md @@ -39,8 +39,9 @@ Installation ------------ The AFDKO requires [Python](http://www.python.org/download) 3.8 -or later. -Regarding Python 3.11: while Python 3.11 itself is now relatively stable, we are waiting to let some known tool-chain problems resolve. +or later. It should work with any Python > 3.8, but occasionally +tool-chain components and dependencies don't keep pace with major +Python releases, so there might be some lag time while they catch up. Releases are available on the [Python Package Index](https://pypi.python.org/pypi/afdko) (PyPI) and can be installed From 87627675a3927a033c7143d1256b9cdf1807b883 Mon Sep 17 00:00:00 2001 From: Kamile Demir Date: Tue, 24 Oct 2023 14:49:48 -0700 Subject: [PATCH 15/56] [uforead.c] make sure to parse all of the attrs in the xmlNodePtr --- c/shared/source/uforead/uforead.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/c/shared/source/uforead/uforead.c b/c/shared/source/uforead/uforead.c index c84f224d9..f1a4df896 100644 --- a/c/shared/source/uforead/uforead.c +++ b/c/shared/source/uforead/uforead.c @@ -1682,8 +1682,11 @@ static void parseXMLGLIFKey(ufoCtx h, xmlNodePtr cur, unsigned long *unicode, in xmlAttr *attr = cur->properties; if (h->parseState.UFOFile == preParsingGLIF) { /* called from preParseGLIF */ if (xmlKeyEqual(cur, "advance")) { - if (xmlAttrEqual(attr, "width") || xmlAttrEqual(attr, "advance")) - setWidth(h, tag, strtolCheck(h, getXmlAttrValue(attr), false, NULL, 10)); + while (attr != NULL) { + if (xmlAttrEqual(attr, "width") || xmlAttrEqual(attr, "advance")) + setWidth(h, tag, strtolCheck(h, getXmlAttrValue(attr), false, NULL, 10)); + attr = attr->next; + } } else if (xmlKeyEqual(cur, "unicode")) { if (xmlAttrEqual(attr, "hex")) *unicode = strtoulCheck(h, getXmlAttrValue(attr), false, NULL, 16); From b955b771aacfac517b0f12a761073d4b1a2f9a88 Mon Sep 17 00:00:00 2001 From: Kamile Demir Date: Tue, 24 Oct 2023 15:25:56 -0700 Subject: [PATCH 16/56] [tx_test] Add test --- .../ufo-advance-height-weight.pfa | 53 +++++++++++++++++++ .../data/com.adobe.type.processedHashMap | 6 +++ .../fontinfo.plist | 43 +++++++++++++++ .../A_.glif | 35 ++++++++++++ .../contents.plist | 8 +++ .../glyphs/A_.glif | 14 +++++ .../glyphs/_notdef.glif | 4 ++ .../glyphs/contents.plist | 12 +++++ .../glyphs/space.glif | 5 ++ .../layercontents.plist | 14 +++++ .../ufo-advance-height-weight.ufo/lib.plist | 12 +++++ .../metainfo.plist | 10 ++++ tests/tx_test.py | 13 +++++ 13 files changed, 229 insertions(+) create mode 100644 tests/tx_data/expected_output/ufo-advance-height-weight.pfa create mode 100644 tests/tx_data/input/ufo-advance-height-weight.ufo/data/com.adobe.type.processedHashMap create mode 100644 tests/tx_data/input/ufo-advance-height-weight.ufo/fontinfo.plist create mode 100644 tests/tx_data/input/ufo-advance-height-weight.ufo/glyphs.com.adobe.type.processedglyphs/A_.glif create mode 100644 tests/tx_data/input/ufo-advance-height-weight.ufo/glyphs.com.adobe.type.processedglyphs/contents.plist create mode 100644 tests/tx_data/input/ufo-advance-height-weight.ufo/glyphs/A_.glif create mode 100644 tests/tx_data/input/ufo-advance-height-weight.ufo/glyphs/_notdef.glif create mode 100644 tests/tx_data/input/ufo-advance-height-weight.ufo/glyphs/contents.plist create mode 100644 tests/tx_data/input/ufo-advance-height-weight.ufo/glyphs/space.glif create mode 100644 tests/tx_data/input/ufo-advance-height-weight.ufo/layercontents.plist create mode 100644 tests/tx_data/input/ufo-advance-height-weight.ufo/lib.plist create mode 100644 tests/tx_data/input/ufo-advance-height-weight.ufo/metainfo.plist diff --git a/tests/tx_data/expected_output/ufo-advance-height-weight.pfa b/tests/tx_data/expected_output/ufo-advance-height-weight.pfa new file mode 100644 index 000000000..048ed541c --- /dev/null +++ b/tests/tx_data/expected_output/ufo-advance-height-weight.pfa @@ -0,0 +1,53 @@ +%!FontType1-1.1: Dummy-Style_01 +%ADOt1write: (1.0.35) +%%Copyright: Copyright 2023 Adobe System Incorporated. All rights reserved. +%%BeginResource: font Dummy-Style_01 +12 dict dup begin +/FontType 1 def +/FontName /Dummy-Style_01 def +/FontInfo 4 dict dup begin +/FamilyName (Dummy) def +end def +/PaintType 0 def +/FontMatrix [0.001 0 0 0.001 0 0] def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +def +/FontBBox {47 168 353 456} def +end +currentfile eexec BAB431EA06BB0A1031E1AA11919E714AC6968FC4C8AFEB +5F1C717DAFACA48FA00303519D5ACA187D3A7A07245E6211EF0746489B63BDB8 +0250FD69171FFE98581843A94F9CCED81A25205CD6D774793B21300079565F0A +4BF8837D8515ABA83CB5A7F24504D739F5F3A4B99A7943FAB759865E3004DE57 +99F6362268FB0C639E3F79E17225917725B80B87480702698D6AB89A3359AA7D +2A57D785A9BF0E5E9885B01513DF76B37CFC742EBC0B1410D1A7AB1852617B37 +0EB7E8B8DFD74F4D9E046D06F6939AADFA874ABC9679AC0AD855F15B72B24EBB +5FB8E172A2203758AA3593CFF1015CD161143ADCA4DCA397B4D7E5F0AF3A1683 +EDE4630CB25FB53C9E88DD3716C1D3C68496A09EF92FEE8C8AAE27D258F77D48 +30A3B72B10D77054438D5299CEB9C6D45F4AF2C1AC6458E860A62818A3617DAA +1F19DD688A12407C892F494A18D403392E42B8AA19B5891A3C9659F9267DF804 +CD1278B964EC5878D987800B4AFD844DC6636196F168889FDF1CA4B8898A9FD8 +17A8F64903ADA8285AFD6CF9394799092A54A749DA9C770F81B160D2705A2085 +7B085902A6D4397181E202CB5BF2750B7BF3482845DE4A0743A1143FC6C9D3A8 +EA50911EB1D0DA484F02F53238E002FBD0196F67EC218167D7F88779C62BF015 +87CE8D5826A6BB6C62130CC1140E75B45BF215E6CF63B4FD2248F95E0AAC8706 +E6D31A405CD24F41481153D90DFD8DDAC0D4040185FB0DFBCB161B35E76808B0 +212CC5E46BF999EFC8D23B5811A89F3F06A126B289DAC3AD205EC2DECA0FD118 +7E4BFFF533368DFC86697930E2DBF1A5B3B8FDEECD52CAF82F0A5B13B67A5B42 +16EAC9566B9D025DB912A9836BE21B7DF27D46C4601A46F78F1BD112D24DD1A8 +115D3F69D85B5A1FACCA83C7B0AC3E292EA27CF2C9AD1C4E25F06D510077083E +30241D95F6703041C6634FB225CFADB64CE29EE9C6F737C9992041B45E0635FD +1645DBBB7C6CC29A62A7FF5C95B4CC44D157DA302EABA329F7072F499565D337 +7A27A2EC6F2452DA3B940EE2F2C9418150DDFBC5C920CFDEFBD349E2F485B18C +D565 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndResource +%%EOF diff --git a/tests/tx_data/input/ufo-advance-height-weight.ufo/data/com.adobe.type.processedHashMap b/tests/tx_data/input/ufo-advance-height-weight.ufo/data/com.adobe.type.processedHashMap new file mode 100644 index 000000000..4ea4cc6a6 --- /dev/null +++ b/tests/tx_data/input/ufo-advance-height-weight.ufo/data/com.adobe.type.processedHashMap @@ -0,0 +1,6 @@ +{ +'.notdef': ['w100', ['checkOutlines', 'autohint']], +'A': ['w400l47243l119456l353343l273183l173168', ['checkOutlines', 'autohint']], +'hashMapVersion': (1, 0), +'space': ['w200', ['checkOutlines', 'autohint']], +} diff --git a/tests/tx_data/input/ufo-advance-height-weight.ufo/fontinfo.plist b/tests/tx_data/input/ufo-advance-height-weight.ufo/fontinfo.plist new file mode 100644 index 000000000..887fe72ad --- /dev/null +++ b/tests/tx_data/input/ufo-advance-height-weight.ufo/fontinfo.plist @@ -0,0 +1,43 @@ + + + + + ascender + 750 + capHeight + 750 + descender + -250 + familyName + Dummy + guidelines + + + postscriptBlueValues + + + postscriptFamilyBlues + + + postscriptFamilyOtherBlues + + + postscriptFontName + Dummy-Style_01 + postscriptOtherBlues + + + postscriptStemSnapH + + + postscriptStemSnapV + + + styleName + Style_01 + unitsPerEm + 1000 + xHeight + 500 + + diff --git a/tests/tx_data/input/ufo-advance-height-weight.ufo/glyphs.com.adobe.type.processedglyphs/A_.glif b/tests/tx_data/input/ufo-advance-height-weight.ufo/glyphs.com.adobe.type.processedglyphs/A_.glif new file mode 100644 index 000000000..0da30d2a1 --- /dev/null +++ b/tests/tx_data/input/ufo-advance-height-weight.ufo/glyphs.com.adobe.type.processedglyphs/A_.glif @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + com.adobe.type.autohint.v2 + + hintSetList + + + pointTag + hintSet0000 + stems + + hstem 168 288 + vstem 47 306 + + + + id + w400l47243l119456l353343l273183l173168 + + + + diff --git a/tests/tx_data/input/ufo-advance-height-weight.ufo/glyphs.com.adobe.type.processedglyphs/contents.plist b/tests/tx_data/input/ufo-advance-height-weight.ufo/glyphs.com.adobe.type.processedglyphs/contents.plist new file mode 100644 index 000000000..be1cec832 --- /dev/null +++ b/tests/tx_data/input/ufo-advance-height-weight.ufo/glyphs.com.adobe.type.processedglyphs/contents.plist @@ -0,0 +1,8 @@ + + + + + A + A_.glif + + diff --git a/tests/tx_data/input/ufo-advance-height-weight.ufo/glyphs/A_.glif b/tests/tx_data/input/ufo-advance-height-weight.ufo/glyphs/A_.glif new file mode 100644 index 000000000..d1e2cdfab --- /dev/null +++ b/tests/tx_data/input/ufo-advance-height-weight.ufo/glyphs/A_.glif @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/tests/tx_data/input/ufo-advance-height-weight.ufo/glyphs/_notdef.glif b/tests/tx_data/input/ufo-advance-height-weight.ufo/glyphs/_notdef.glif new file mode 100644 index 000000000..f505796dc --- /dev/null +++ b/tests/tx_data/input/ufo-advance-height-weight.ufo/glyphs/_notdef.glif @@ -0,0 +1,4 @@ + + + + diff --git a/tests/tx_data/input/ufo-advance-height-weight.ufo/glyphs/contents.plist b/tests/tx_data/input/ufo-advance-height-weight.ufo/glyphs/contents.plist new file mode 100644 index 000000000..bf0670d27 --- /dev/null +++ b/tests/tx_data/input/ufo-advance-height-weight.ufo/glyphs/contents.plist @@ -0,0 +1,12 @@ + + + + + .notdef + _notdef.glif + A + A_.glif + space + space.glif + + diff --git a/tests/tx_data/input/ufo-advance-height-weight.ufo/glyphs/space.glif b/tests/tx_data/input/ufo-advance-height-weight.ufo/glyphs/space.glif new file mode 100644 index 000000000..20d12349f --- /dev/null +++ b/tests/tx_data/input/ufo-advance-height-weight.ufo/glyphs/space.glif @@ -0,0 +1,5 @@ + + + + + diff --git a/tests/tx_data/input/ufo-advance-height-weight.ufo/layercontents.plist b/tests/tx_data/input/ufo-advance-height-weight.ufo/layercontents.plist new file mode 100644 index 000000000..e7ec5cadb --- /dev/null +++ b/tests/tx_data/input/ufo-advance-height-weight.ufo/layercontents.plist @@ -0,0 +1,14 @@ + + + + + + public.default + glyphs + + + com.adobe.type.processedglyphs + glyphs.com.adobe.type.processedglyphs + + + diff --git a/tests/tx_data/input/ufo-advance-height-weight.ufo/lib.plist b/tests/tx_data/input/ufo-advance-height-weight.ufo/lib.plist new file mode 100644 index 000000000..616be1835 --- /dev/null +++ b/tests/tx_data/input/ufo-advance-height-weight.ufo/lib.plist @@ -0,0 +1,12 @@ + + + + + public.glyphOrder + + .notdef + space + A + + + diff --git a/tests/tx_data/input/ufo-advance-height-weight.ufo/metainfo.plist b/tests/tx_data/input/ufo-advance-height-weight.ufo/metainfo.plist new file mode 100644 index 000000000..555d9ce4c --- /dev/null +++ b/tests/tx_data/input/ufo-advance-height-weight.ufo/metainfo.plist @@ -0,0 +1,10 @@ + + + + + creator + com.github.fonttools.ufoLib + formatVersion + 3 + + diff --git a/tests/tx_test.py b/tests/tx_test.py index 6b5db9c48..cd9842e7f 100644 --- a/tests/tx_test.py +++ b/tests/tx_test.py @@ -1678,3 +1678,16 @@ def test_alt_missing_glyph(): expected_path = generate_ps_dump(expected_path) output_path = generate_ps_dump(output_path) assert differ([expected_path, output_path]) + + +def test_parsing_attrs_bug1673(): + """ + Test parsing nested attributes within an xmlNode. + """ + input_path = get_input_path("ufo-advance-height-weight.ufo") + expected_path = get_expected_path("ufo-advance-height-weight.pfa") + output_path = get_temp_file_path() + subprocess.call([TOOL, '-t1', '-o', output_path, input_path]) + expected_path = generate_ps_dump(expected_path) + output_path = generate_ps_dump(output_path) + assert differ([expected_path, output_path, '-s', PFA_SKIP[0]]) From 6c832edbd81ecf689dbe66e840bf18ae61cf4bca Mon Sep 17 00:00:00 2001 From: skef <6175836+skef@users.noreply.github.com> Date: Mon, 6 Nov 2023 16:12:21 -0800 Subject: [PATCH 17/56] Remove psautohint from requirements.txt (#1725) --- requirements.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 144ead91a..faa60f57b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -7,7 +7,6 @@ booleanOperations==0.9.0 defcon[lxml,pens]==0.10.3 fontMath==0.9.3 fontTools[unicode,woff,lxml,ufo]==4.43.0 -psautohint==2.4.0 tqdm==4.66.1 ufonormalizer==0.6.1 ufoProcessor==1.9.0 From 21d8b26f6caa930c29c187c9f8b201d67cf4de0d Mon Sep 17 00:00:00 2001 From: Sergei Trofimovich Date: Thu, 11 Jan 2024 04:04:00 +0000 Subject: [PATCH 18/56] Fix build failures discovered by an upcoming `gcc-14` release (#1730) --- c/shared/source/t1write/t1write.c | 3 ++- c/shared/source/tx_shared/tx_shared.c | 4 ++-- c/shared/source/uforead/uforead.c | 6 +++--- tests/tx_test.py | 2 +- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/c/shared/source/t1write/t1write.c b/c/shared/source/t1write/t1write.c index 6405b6537..266a11953 100644 --- a/c/shared/source/t1write/t1write.c +++ b/c/shared/source/t1write/t1write.c @@ -345,7 +345,8 @@ static int saveCstr(t1wCtx h, abfGlyphInfo *info, if (info != NULL && info->flags & ABF_GLYPH_CID && !(h->arg.flags & T1W_TYPE_HOST)) { /* CID-keyed incremental download; write fd index */ - if (writeTmp(h, 1, &info->iFD)) + unsigned char c = info->iFD; + if (writeTmp(h, 1, &c)) return 1; cstr->length++; } diff --git a/c/shared/source/tx_shared/tx_shared.c b/c/shared/source/tx_shared/tx_shared.c index 10d51ba54..936b243c2 100644 --- a/c/shared/source/tx_shared/tx_shared.c +++ b/c/shared/source/tx_shared/tx_shared.c @@ -386,7 +386,7 @@ static long stm_tell(ctlStreamCallbacks *cb, void *stream) { } /* Read from stream. */ -static size_t stm_read(ctlStreamCallbacks *cb, Stream *stream, char **ptr) { +static size_t stm_read(ctlStreamCallbacks *cb, void *stream, char **ptr) { Stream *s = stream; switch (s->type) { case stm_Src: @@ -405,7 +405,7 @@ static size_t stm_read(ctlStreamCallbacks *cb, Stream *stream, char **ptr) { return 0; /* Suppress compiler warning */ } -static size_t stm_xml_read(ctlStreamCallbacks *cb, Stream *stream, xmlDocPtr *doc){ +static size_t stm_xml_read(ctlStreamCallbacks *cb, void *stream, xmlDocPtr *doc){ int res; int readAmt = 0; xmlParserCtxtPtr ctxt; diff --git a/c/shared/source/uforead/uforead.c b/c/shared/source/uforead/uforead.c index f1a4df896..2dea0c61c 100644 --- a/c/shared/source/uforead/uforead.c +++ b/c/shared/source/uforead/uforead.c @@ -1240,7 +1240,7 @@ static void updateGLIFRec(ufoCtx h, char* glyphName, xmlNodePtr cur) { if (fileName == NULL) { /* this is basically muted for now, as the previous check will return and skip if not parseable. We'll add this back once we add verbosity flag */ - message(h, ufoErrParse, "Encountered glyph reference %s in alternate layer's contents.plist with an empty file path. ", glyphName); + message(h, "Encountered glyph reference %s in alternate layer's contents.plist with an empty file path. ", glyphName); return; } @@ -2004,7 +2004,7 @@ static long strtolCheck(ufoCtx h, char* keyValue, bool fail, char* msg, int base fatal(h, ufoErrParse, msg); else if (msg) message(h, msg); - return NULL; + return 0; } } @@ -2019,7 +2019,7 @@ static unsigned long strtoulCheck(ufoCtx h, char* keyValue, bool fail, char* msg fatal(h, ufoErrParse, msg); else if (msg) message(h, msg); - return NULL; + return 0; } } diff --git a/tests/tx_test.py b/tests/tx_test.py index cd9842e7f..199d31f26 100644 --- a/tests/tx_test.py +++ b/tests/tx_test.py @@ -1677,7 +1677,7 @@ def test_alt_missing_glyph(): assert msg in output expected_path = generate_ps_dump(expected_path) output_path = generate_ps_dump(output_path) - assert differ([expected_path, output_path]) + assert differ([expected_path, output_path, '-s', PFA_SKIP[0]]) def test_parsing_attrs_bug1673(): From 02d20ab499ea5f0f1d40bcf89e8c92557d1caa50 Mon Sep 17 00:00:00 2001 From: Kamile Demir Date: Tue, 16 Jan 2024 10:52:55 -0800 Subject: [PATCH 19/56] Update NEWS with version 4.0.1 changes --- NEWS.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/NEWS.md b/NEWS.md index 8b32733e7..017b38f93 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,6 +1,17 @@ Changelog ========= +4.0.1 (released 2024-01-16) +--------------------------- +- [tx] Fix build failures discovered by an upcoming gcc-14 release (thanks @trofi!)([#1730](https://github.com/adobe-type-tools/afdko/pull/1730)) +- [tx] parse multiple attrs in xmlNode ([#1720](https://github.com/adobe-type-tools/afdko/pull/1720)) +- [makeotfexe] Add guards for h->otl == NULL before calling otlSubtableAdd ([#1716](https://github.com/adobe-type-tools/afdko/pull/1716)) +- [otfstemhist] Fix otfstemhist bugs ([#1703]((https://github.com/adobe-type-tools/afdko/pull/1703)) +- [sfntedit] Fix bug when attempting to add non-existent file ([#1696](https://github.com/adobe-type-tools/afdko/pull/1696)) +- [documentation] Updates ([#1711](https://github.com/adobe-type-tools/afdko/pull/1711)) +- [requirements.txt] Update dependencies, remove psautohint from dependencies ([#1725](https://github.com/adobe-type-tools/afdko/pull/1725)) +- [ci] Add Python 3.11 to CI test matrix ([#1718](https://github.com/adobe-type-tools/afdko/pull/1718)) + 4.0.0 (released 2023-09-11) --------------------------- **The Python port of psautohint was (re)integrated into the AFDKO repository as "otfautohint"** From 7da6493f8c98a9222a281baed2e9d71104ed7e69 Mon Sep 17 00:00:00 2001 From: Kamile Demir Date: Tue, 16 Jan 2024 15:42:34 -0800 Subject: [PATCH 20/56] [.flake8] ignore B038 for now, revisit later --- .flake8 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.flake8 b/.flake8 index 84a55adee..0fba9cbfb 100644 --- a/.flake8 +++ b/.flake8 @@ -5,7 +5,7 @@ select = E,F,W,B,B901,B902,B903 # ignore W504 line break before binary operator -ignore = W504,B017,E731,E741 +ignore = W504,B017,E731,E741,B038 # explicitly set line length limitation max-line-length = 79 From 150e6bbcd76ec8f41798c466a4f6beef2fffded7 Mon Sep 17 00:00:00 2001 From: Kamile Demir Date: Tue, 16 Jan 2024 16:09:56 -0800 Subject: [PATCH 21/56] [NEWS.md] Minor fix --- NEWS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NEWS.md b/NEWS.md index 017b38f93..864e85205 100644 --- a/NEWS.md +++ b/NEWS.md @@ -6,7 +6,7 @@ Changelog - [tx] Fix build failures discovered by an upcoming gcc-14 release (thanks @trofi!)([#1730](https://github.com/adobe-type-tools/afdko/pull/1730)) - [tx] parse multiple attrs in xmlNode ([#1720](https://github.com/adobe-type-tools/afdko/pull/1720)) - [makeotfexe] Add guards for h->otl == NULL before calling otlSubtableAdd ([#1716](https://github.com/adobe-type-tools/afdko/pull/1716)) -- [otfstemhist] Fix otfstemhist bugs ([#1703]((https://github.com/adobe-type-tools/afdko/pull/1703)) +- [otfstemhist] Fix otfstemhist bugs ([#1703](https://github.com/adobe-type-tools/afdko/pull/1703)) - [sfntedit] Fix bug when attempting to add non-existent file ([#1696](https://github.com/adobe-type-tools/afdko/pull/1696)) - [documentation] Updates ([#1711](https://github.com/adobe-type-tools/afdko/pull/1711)) - [requirements.txt] Update dependencies, remove psautohint from dependencies ([#1725](https://github.com/adobe-type-tools/afdko/pull/1725)) From c979eb7fd29b431ec9cfc0518dcff5a4a4c8d7f5 Mon Sep 17 00:00:00 2001 From: Miguel Sousa Date: Tue, 14 May 2024 12:06:41 -0700 Subject: [PATCH 22/56] Update installation instructions Make sure the commands don't have leading spaces --- README.md | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 0e39ee83d..3421a91ef 100644 --- a/README.md +++ b/README.md @@ -71,21 +71,29 @@ Note for Linux users (and users of other platforms that are not macOS or Windows - Create a virtual environment: - python -m venv afdko_env + ```sh + python -m venv afdko_env + ``` - Activate the virtual environment: - macOS & Linux - source afdko_env/bin/activate + ```sh + source afdko_env/bin/activate + ``` - Windows - afdko_env\Scripts\activate.bat + ```sh + afdko_env\Scripts\activate.bat + ``` - Install [afdko](https://pypi.python.org/pypi/afdko): - python -m pip install afdko + ```sh + python -m pip install afdko + ``` Installing the **afdko** inside a virtual environment prevents conflicts between its dependencies and other modules installed globally. From 4a82ba79c6895c3f53fcccf95f6f2299b1cd61d5 Mon Sep 17 00:00:00 2001 From: skef <6175836+skef@users.noreply.github.com> Date: Mon, 8 Jul 2024 00:58:12 -0700 Subject: [PATCH 23/56] Disable certain proofpdf tests that are failing for an unknown and seemingly spurious reason (#1750) * Disable certain proofpdf tests that are failing for an unknown and apparently spurious reason * Pointlessly flake8 tests --- tests/proofpdf_test.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tests/proofpdf_test.py b/tests/proofpdf_test.py index 639a22ddb..f1fbb6556 100644 --- a/tests/proofpdf_test.py +++ b/tests/proofpdf_test.py @@ -27,7 +27,7 @@ def _get_filename_label(file_name): 'fontplot', 'fontplot2', 'hintplot', - 'waterfallplot', + # 'waterfallplot', disabled until we debug problem ]) def test_glyphs_2_7(tool_name, font_filename): if 'cid' in font_filename: @@ -50,8 +50,8 @@ def test_glyphs_2_7(tool_name, font_filename): 'cidfont_noHints.otf', 'cidfont_noStems.otf', 'cidfont_noZones.otf', - 'font_noHints.otf', - 'font_noStems.otf', + # 'font_noHints.otf', Disabled until we figure out problem + # 'font_noStems.otf', Disabled until we figure out problem 'font_noZones.otf', ]) @pytest.mark.parametrize('tool_name', [ @@ -113,6 +113,7 @@ def test_fontsetplot(): '-s', '/CreationDate', '-e', 'macroman']) +@pytest.mark.skip(reason="Disable until we figure out problem") @pytest.mark.parametrize('filename', ['SourceSansPro-Black', 'SourceSansPro-BlackIt']) def test_waterfallplot(filename): From 8f4751617ababa8e673d3dc966df456f6f9bcc63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benedikt=20Bramb=C3=B6ck?= Date: Mon, 8 Jul 2024 10:34:17 +0200 Subject: [PATCH 24/56] keep all keys that start with public. (#1747) --- python/afdko/makeinstancesufo.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/afdko/makeinstancesufo.py b/python/afdko/makeinstancesufo.py index 6ed0a05dd..42d664372 100644 --- a/python/afdko/makeinstancesufo.py +++ b/python/afdko/makeinstancesufo.py @@ -112,7 +112,7 @@ def updateInstance(fontInstancePath, options): def clearCustomLibs(dFont): for key in list(dFont.lib.keys()): - if key not in ['public.glyphOrder', 'public.postscriptNames']: + if not key.startswith('public.'): del dFont.lib[key] libGlyphs = [g for g in dFont if len(g.lib)] From e8d9fa331437592e26e8396f950f47dee06f0575 Mon Sep 17 00:00:00 2001 From: skef <6175836+skef@users.noreply.github.com> Date: Tue, 9 Jul 2024 13:36:18 -0700 Subject: [PATCH 25/56] Correct inequality in measuring adjacent BlueValue zones. (#1749) --- python/afdko/otfautohint/fdTools.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/python/afdko/otfautohint/fdTools.py b/python/afdko/otfautohint/fdTools.py index ad964866f..88fbe0267 100644 --- a/python/afdko/otfautohint/fdTools.py +++ b/python/afdko/otfautohint/fdTools.py @@ -265,7 +265,7 @@ def buildBlueLists(self): "zone %s with the bottom at %s." % (self.DictName, prevPair[2], prevPair[0], pair[2], pair[1])) - elif abs(pair[1] - prevPair[0]) <= zoneBuffer: + elif abs(pair[1] - prevPair[0]) < zoneBuffer: raise FontInfoParseError( "In FDDict %s. The top of zone %s at %s is within " "the min separation limit (%s units) of zone %s " @@ -546,7 +546,7 @@ def mergeFDDicts(prevDictList): log.warning("For final FontDict, skipping zone %s in FDDict %s" " because it overlaps with zone %s in FDDict %s.", zoneName, fdDictName, prevZoneName, prevFDictName) - elif abs(zone[1] - prevZone[0]) <= zoneBuffer: + elif abs(zone[1] - prevZone[0]) < zoneBuffer: log.warning("For final FontDict, skipping zone %s in FDDict %s" " because it is within the minimum separation " "allowed (%s units) of %s in FDDict %s.", From ed6287d9a670642da24feb58e5cfb89e24366740 Mon Sep 17 00:00:00 2001 From: skef <6175836+skef@users.noreply.github.com> Date: Thu, 11 Jul 2024 15:00:12 -0700 Subject: [PATCH 26/56] Fix a couple otfautohint bugs found by testing with Momochidori (#1751) Add a flag to make the overlap mapping looser --- python/afdko/otfautohint/__main__.py | 10 +++++++ python/afdko/otfautohint/autohint.py | 1 + python/afdko/otfautohint/glyphData.py | 39 +++++++++++++++------------ python/afdko/otfautohint/hinter.py | 9 +++---- 4 files changed, 37 insertions(+), 22 deletions(-) diff --git a/python/afdko/otfautohint/__main__.py b/python/afdko/otfautohint/__main__.py index ee21d3cc1..a29d692f7 100644 --- a/python/afdko/otfautohint/__main__.py +++ b/python/afdko/otfautohint/__main__.py @@ -343,6 +343,7 @@ def __init__(self, pargs): self.writeToDefaultLayer = pargs.write_to_default_layer self.maxSegments = pargs.max_segments self.verbose = pargs.verbose + self.looseOverlapMapping = pargs.loose_overlap_mapping if pargs.force_overlap: self.overlapForcing = True elif pargs.force_no_overlap: @@ -581,6 +582,14 @@ def add_common_options(parser, term, name): 'default when hinting individual, non-variable fonts and not ' 'supplying an overlap list)' ) + overlap_parser.add_argument( + '--loose-overlap-mapping', + action='store_true', + help='Some fonts see high numbers of "Unable to map derived path ' + 'element from ..." warnings when processing overlap. This flag ' + 'loosens the matching heuristics and should lower (but not ' + 'eliminate) the number of those warnings' + ) parser.add_argument( '--log', metavar='PATH', @@ -865,6 +874,7 @@ def __init__(self, pargs): self.report_zones = pargs.alignment_zones self.report_all_stems = pargs.all_stems self.verbose = pargs.verbose + self.looseOverlapMapping = pargs.loose_overlap_mapping if pargs.force_overlap: self.overlapForcing = True elif pargs.force_no_overlap: diff --git a/python/afdko/otfautohint/autohint.py b/python/afdko/otfautohint/autohint.py index 286da23e1..9fad62f7e 100644 --- a/python/afdko/otfautohint/autohint.py +++ b/python/afdko/otfautohint/autohint.py @@ -37,6 +37,7 @@ def __init__(self): self.excludeGlyphList = False self.overlapList = [] self.overlapForcing = None + self.looseOverlapMapping = False self.hintAll = False self.readHints = True self.allowChanges = False diff --git a/python/afdko/otfautohint/glyphData.py b/python/afdko/otfautohint/glyphData.py index 9df302d7a..476b27e53 100644 --- a/python/afdko/otfautohint/glyphData.py +++ b/python/afdko/otfautohint/glyphData.py @@ -515,6 +515,7 @@ class pathElement: """ assocMatchFactor = 93 tSlop = .005 + middleMult = 2 def __init__(self, *args, is_close=False, masks=None, flex=False, position=None): @@ -625,12 +626,13 @@ def cubicParameters(self): """Returns the fontTools cubic parameters for this pathElement""" return calcCubicParameters(self.s, self.cs, self.ce, self.e) - def getAssocFactor(self): + def getAssocFactor(self, loose=False): if self.is_line: l = sqrt(self.s.distsq(self.e)) else: l = approximateCubicArcLength(self.s, self.cs, self.ce, self.e) - return l / self.assocMatchFactor + return l / (self.assocMatchFactor / 2 + if loose else self.assocMatchFactor) def containsPoint(self, p, factor, returnT=False): if self.is_line: @@ -1264,11 +1266,12 @@ def __iter__(self): # utility - def checkAssocPoint(self, segs, spe, ope, sp, op, mapEnd, factor=None): + def checkAssocPoint(self, segs, spe, ope, sp, op, mapEnd, loose, + factor=None): if factor is None: - factor = ope.getAssocFactor() + factor = ope.getAssocFactor(loose) if sp == op or ope.containsPoint(sp, factor): - if not ope.containsPoint(spe.atT(.5), factor): + if not ope.containsPoint(spe.atT(.5), factor * ope.middleMult): return False spe.association = ope return True @@ -1276,7 +1279,8 @@ def checkAssocPoint(self, segs, spe, ope, sp, op, mapEnd, factor=None): does, t = spe.containsPoint(op, factor, True) if does and spe.tSlop < t < 1 - spe.tSlop: midMapped = (1 - (1 - t) / 2) if mapEnd else t / 2 - if not ope.containsPoint(spe.atT(midMapped), factor): + if not ope.containsPoint(spe.atT(midMapped), + factor * ope.middleMult): return False following = spe.splitAt(t) if mapEnd: @@ -1293,7 +1297,7 @@ def checkAssocPoint(self, segs, spe, ope, sp, op, mapEnd, factor=None): return True return False - def associatePath(self, orig): + def associatePath(self, orig, loose=False): peMap = defaultdict(list) for oc in orig: peMap[tuple(oc.e.round(1))].append(oc) @@ -1309,13 +1313,14 @@ def associatePath(self, orig): oepel = peMap.get(tuple(c.e.round(1)), []) if oepel: for oepe in oepel: - if self.checkAssocPoint(segs, c, oepe, c.s, oepe.s, True): + if self.checkAssocPoint(segs, c, oepe, c.s, oepe.s, True, + loose): done = True break else: oepen = orig.nextInSubpath(oepe) if self.checkAssocPoint(segs, c, oepen, c.s, oepen.e, - True): + True, loose): done = True break if done: @@ -1325,24 +1330,24 @@ def associatePath(self, orig): for ospe in ospel: ospen = orig.nextInSubpath(ospe) if self.checkAssocPoint(segs, c, ospen, c.e, ospen.e, - False): + False, loose): done = True break elif self.checkAssocPoint(segs, c, ospe, c.e, ospe.s, - False): + False, loose): done = True break if done: continue cBounds = c.getBounds() for oc in orig: - factor = oc.getAssocFactor() + factor = oc.getAssocFactor(loose) if cBounds.intersects(oc.getBounds(), factor): if (oc.containsPoint(c.s, factor) and (self.checkAssocPoint(segs, c, oc, c.e, oc.e, - False, factor) or + False, loose, factor) or self.checkAssocPoint(segs, c, oc, c.e, oc.s, - False, factor))): + False, loose, factor))): done = True break if done: @@ -1351,13 +1356,13 @@ def associatePath(self, orig): # was very close to but not quite identical to another start point. # Try again from the other end. for oc in orig: - factor = oc.getAssocFactor() + factor = oc.getAssocFactor(loose) if cBounds.intersects(oc.getBounds(), factor): if (oc.containsPoint(c.e, factor) and (self.checkAssocPoint(segs, c, oc, c.s, oc.s, - True, factor) or + True, loose, factor) or self.checkAssocPoint(segs, c, oc, c.s, oc.e, - True, factor))): + True, loose, factor))): done = True break if done: diff --git a/python/afdko/otfautohint/hinter.py b/python/afdko/otfautohint/hinter.py index a21565387..740ad6846 100644 --- a/python/afdko/otfautohint/hinter.py +++ b/python/afdko/otfautohint/hinter.py @@ -667,8 +667,7 @@ def extremaSegment(self, pe, extp, extt, isMn): of the segment are within ExtremaDist of pe """ a, b, c, d = pe.cubicParameters() - loc = round(extp.o) + (-self.ExtremaDist - if isMn else self.ExtremaDist) + loc = extp.o + (-self.ExtremaDist if isMn else self.ExtremaDist) horiz = not self.isV() # When finding vertical stems solve for x sl = solveCubic(a[horiz], b[horiz], c[horiz], d[horiz] - loc) @@ -776,7 +775,8 @@ def genSegs(self): origGlyph = None self.hs.overlapRemoved = False else: - self.glyph.associatePath(origGlyph) + self.glyph.associatePath(origGlyph, + self.options.looseOverlapMapping) self.prepForSegs() self.Bonus = 0 @@ -2446,11 +2446,10 @@ def compatiblePaths(self, gllist, fddicts): gp = g.subpaths[si] dpl, gpl = len(dp), len(gp) if gpl != dpl: - # XXX decide on warning message for these if (gpl == dpl + 1 and gp[-1].isClose() and not dp[-1].isClose()): for _gi in range(i + 1): - gllist[i].addNullClose(si) + gllist[_gi].addNullClose(si) continue if (dpl == gpl + 1 and dp[-1].isClose() and not gp[-1].isClose()): From ee33bafd5d8193197021563a1e13cf141c22fc31 Mon Sep 17 00:00:00 2001 From: Miguel Sousa Date: Sun, 29 Sep 2024 17:17:30 -0700 Subject: [PATCH 27/56] [ci] Enable Python v3.12 and drop v3.8 With the imminent final release of Python v3.13, v3.8 is also reaching its EOL. See [status of Python versions](https://devguide.python.org/versions/). --- .github/workflows/testpythonpackage.yml | 10 +++++----- README.md | 6 +++--- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/testpythonpackage.yml b/.github/workflows/testpythonpackage.yml index f4a33b330..a039f7ac8 100644 --- a/.github/workflows/testpythonpackage.yml +++ b/.github/workflows/testpythonpackage.yml @@ -28,20 +28,20 @@ jobs: strategy: matrix: os: [ubuntu-latest, macos-latest, windows-latest] - python-version: ["3.8", "3.9", "3.10", "3.11"] + python-version: ["3.9", "3.10", "3.11", "3.12"] exclude: - - os: macos-latest - python-version: "3.8" - os: macos-latest python-version: "3.9" - os: macos-latest python-version: "3.10" - - os: windows-latest - python-version: "3.8" + - os: macos-latest + python-version: "3.11" - os: windows-latest python-version: "3.9" - os: windows-latest python-version: "3.10" + - os: windows-latest + python-version: "3.11" steps: diff --git a/README.md b/README.md index 3421a91ef..a3f036b84 100644 --- a/README.md +++ b/README.md @@ -38,8 +38,8 @@ More information can be found in [docs/otfautohint_Notes.md](docs/otfautohint_No Installation ------------ -The AFDKO requires [Python](http://www.python.org/download) 3.8 -or later. It should work with any Python > 3.8, but occasionally +The AFDKO requires [Python](http://www.python.org/download) 3.9 +or later. It should work with any Python > 3.9, but occasionally tool-chain components and dependencies don't keep pace with major Python releases, so there might be some lag time while they catch up. @@ -132,7 +132,7 @@ On macOS, install these with: On Linux (Ubuntu 17.10 LTS or later), install these with: - apt-get -y install python3.8 + apt-get -y install python3.9 apt-get -y install python-pip apt-get -y install python-dev apt-get -y install uuid-dev From fe10c270db52f43f76707b4f6edf8c7d93d45e89 Mon Sep 17 00:00:00 2001 From: Miguel Sousa Date: Sun, 29 Sep 2024 17:56:36 -0700 Subject: [PATCH 28/56] [ci] Update Coverage and ASAN workflows to use Python v3.11 --- .github/workflows/asan.yml | 2 +- .github/workflows/run_cvg.yml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/asan.yml b/.github/workflows/asan.yml index b02f6d70e..df7e4d8dd 100644 --- a/.github/workflows/asan.yml +++ b/.github/workflows/asan.yml @@ -24,7 +24,7 @@ jobs: - name: Set up Python uses: actions/setup-python@v4 with: - python-version: 3.8 + python-version: "3.11" - name: Install multilib packages run: sudo apt-get install gcc-multilib g++-multilib diff --git a/.github/workflows/run_cvg.yml b/.github/workflows/run_cvg.yml index 0b99cbec6..e67712bc4 100644 --- a/.github/workflows/run_cvg.yml +++ b/.github/workflows/run_cvg.yml @@ -34,10 +34,10 @@ jobs: with: fetch-depth: 0 # unshallow fetch for setuptools-scm - - name: Set up Python 3.8 + - name: Set up Python uses: actions/setup-python@v4 with: - python-version: "3.8" + python-version: "3.11" - name: Build AFDKO wheel env: From f3b2f2a37d89ae818b6228d79fc8abdc64506d5e Mon Sep 17 00:00:00 2001 From: Miguel Sousa Date: Sun, 29 Sep 2024 18:12:29 -0700 Subject: [PATCH 29/56] Update Python version in setup.py --- setup.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/setup.py b/setup.py index 79712cca2..973e28265 100644 --- a/setup.py +++ b/setup.py @@ -152,7 +152,7 @@ def main(): 'Intended Audience :: Developers', 'Topic :: Software Development :: Build Tools', 'License :: OSI Approved :: Apache Software License', - 'Programming Language :: Python :: 3.8', + 'Programming Language :: Python :: 3.9', 'Operating System :: MacOS :: MacOS X', 'Operating System :: Microsoft :: Windows', 'Operating System :: POSIX :: Linux', @@ -194,7 +194,7 @@ def main(): ], }, zip_safe=False, - python_requires='>=3.8', + python_requires='>=3.9', setup_requires=[ 'wheel', 'setuptools_scm', From c284ff70ba22c84cb12a59d978226614ed60a895 Mon Sep 17 00:00:00 2001 From: skef <6175836+skef@users.noreply.github.com> Date: Mon, 14 Oct 2024 13:29:55 -0700 Subject: [PATCH 30/56] Fix rounding in otfautohint (#1759) * Deal with rounding * Update tests to match updated otfautohint * Fix extrapolation test expected output (#1758) --------- Co-authored-by: Zachary Quinn Scheuren --- python/afdko/otfautohint/glyphData.py | 1 + python/afdko/otfautohint/hinter.py | 5 +- .../l.glif | 2 +- .../t.glif | 2 +- .../c.glif | 2 +- .../d.glif | 4 +- .../e.glif | 35 +- .../g.glif | 18 +- .../m.glif | 16 +- .../n.glif | 17 +- .../o.glif | 4 +- .../u.glif | 2 +- .../A_.glif | 2 +- .../A_acute.glif | 2 +- .../A_dieresis.glif | 2 +- .../A_tilde.glif | 2 +- .../Y_.glif | 8 +- .../Y_acute.glif | 8 +- .../Y_dieresis.glif | 10 +- .../Y_tilde.glif | 12 +- .../A_.glif | 4 +- .../A_acute.glif | 4 +- .../A_dieresis.glif | 4 +- .../A_tilde.glif | 4 +- .../Y_.glif | 24 +- .../Y_acute.glif | 26 +- .../Y_dieresis.glif | 25 +- .../Y_tilde.glif | 28 +- .../y.glif | 12 +- .../yacute.glif | 12 +- .../ydieresis.glif | 10 +- .../ytilde.glif | 18 +- .../A_.glif | 27 +- .../A_acute.glif | 28 +- .../A_dieresis.glif | 29 +- .../A_tilde.glif | 41 +- .../Y_.glif | 34 +- .../Y_acute.glif | 36 +- .../Y_dieresis.glif | 40 +- .../Y_tilde.glif | 50 +- .../y.glif | 32 +- .../yacute.glif | 32 +- .../ydieresis.glif | 34 +- .../ytilde.glif | 46 +- .../dummy/font.otf.a-z,A-Z,zero-nine.vstm.txt | 9 +- .../dummy/font.otf.all.vstm.txt | 12 +- .../expected_output/dummy/font.otf.vstm.txt | 11 +- .../otfautohint_data/input/dummy/decimals.otf | Bin 24964 -> 24960 bytes .../at.glif | 8 +- .../dummy/defaultlayer.ufo/glyphs/Q_.glif | 4 +- .../dummy/defaultlayer.ufo/glyphs/a.glif | 4 +- .../defaultlayer.ufo/glyphs/asterisk.glif | 2 +- .../dummy/defaultlayer.ufo/glyphs/at.glif | 2 +- .../dummy/defaultlayer.ufo/glyphs/b.glif | 2 +- .../dummy/defaultlayer.ufo/glyphs/d.glif | 4 +- .../dummy/defaultlayer.ufo/glyphs/n.glif | 4 +- .../dummy/defaultlayer.ufo/glyphs/p.glif | 4 +- .../dummy/defaultlayer.ufo/glyphs/q.glif | 2 +- .../dummy/defaultlayer.ufo/glyphs/r.glif | 4 +- .../dummy/defaultlayer.ufo/glyphs/t.glif | 2 +- .../dummy/defaultlayer.ufo/glyphs/u.glif | 4 +- tests/otfautohint_data/input/dummy/font.cff | Bin 9018 -> 8933 bytes tests/otfautohint_data/input/dummy/font.pfa | 725 +++++++++--------- tests/otfautohint_data/input/dummy/font.pfb | Bin 13256 -> 13132 bytes tests/otfautohint_data/input/dummy/font.ps | Bin 205449 -> 202308 bytes .../exclam.glif | 2 +- .../exclamdown.glif | 2 +- .../vf_tests/CJKSparseVar.subset.hinted.otf | Bin 6912 -> 6900 bytes 68 files changed, 647 insertions(+), 914 deletions(-) diff --git a/python/afdko/otfautohint/glyphData.py b/python/afdko/otfautohint/glyphData.py index 476b27e53..8ddbb447d 100644 --- a/python/afdko/otfautohint/glyphData.py +++ b/python/afdko/otfautohint/glyphData.py @@ -612,6 +612,7 @@ def convertToCurve(self, sRatio=.333333, eRatio=None, roundCoords=False): if eRatio is None: eRatio = sRatio self.is_line = False + # XXX deal with roundCoords properly self.cs = self.s * (1 - sRatio) + self.e * sRatio self.ce = self.s * eRatio + self.e * (1 - eRatio) diff --git a/python/afdko/otfautohint/hinter.py b/python/afdko/otfautohint/hinter.py index 740ad6846..5ce808ad5 100644 --- a/python/afdko/otfautohint/hinter.py +++ b/python/afdko/otfautohint/hinter.py @@ -456,7 +456,8 @@ def addSegment(self, fr, to, loc, pe1, pe2, typ, desc, mid=False): not pe2.e.__eq__(ope2.e, ope2.getAssocFactor())): mid2 = True pe2 = ope2 - + if self.options.roundCoords: + loc = round(loc) if not pe1 and not pe2: return self.hs.addSegment(fr, to, loc, pe1, pe2, typ, self.Bonus, @@ -988,7 +989,7 @@ def genSegsForPathElement(self, c): if abs(adist) < self.BendLength: adist = math.copysign(adist, self.BendLength) self.addSegment(aavg - adist, aavg + adist, - round(extp.o + 0.5), c, None, + extp.o, c, None, hintSegment.sType.CURVE, "curve extrema", True) diff --git a/tests/makeinstancesufo_data/expected_output/Dummy-ExtraMinus.ufo/glyphs.com.adobe.type.processedglyphs/l.glif b/tests/makeinstancesufo_data/expected_output/Dummy-ExtraMinus.ufo/glyphs.com.adobe.type.processedglyphs/l.glif index 8ee4eadbf..b4041b570 100644 --- a/tests/makeinstancesufo_data/expected_output/Dummy-ExtraMinus.ufo/glyphs.com.adobe.type.processedglyphs/l.glif +++ b/tests/makeinstancesufo_data/expected_output/Dummy-ExtraMinus.ufo/glyphs.com.adobe.type.processedglyphs/l.glif @@ -37,7 +37,7 @@ hstem -12 8 hstem 727 -20 - vstem 104 39.5 + vstem 104 40 diff --git a/tests/makeinstancesufo_data/expected_output/Dummy-ExtraMinus.ufo/glyphs.com.adobe.type.processedglyphs/t.glif b/tests/makeinstancesufo_data/expected_output/Dummy-ExtraMinus.ufo/glyphs.com.adobe.type.processedglyphs/t.glif index b691b0cf1..10dcad177 100644 --- a/tests/makeinstancesufo_data/expected_output/Dummy-ExtraMinus.ufo/glyphs.com.adobe.type.processedglyphs/t.glif +++ b/tests/makeinstancesufo_data/expected_output/Dummy-ExtraMinus.ufo/glyphs.com.adobe.type.processedglyphs/t.glif @@ -76,7 +76,7 @@ hstem -12 7 hstem 467 7 - vstem 109.5 150.5 + vstem 110 150 diff --git a/tests/makeinstancesufo_data/expected_output/Dummy-ExtraPlus.ufo/glyphs.com.adobe.type.processedglyphs/c.glif b/tests/makeinstancesufo_data/expected_output/Dummy-ExtraPlus.ufo/glyphs.com.adobe.type.processedglyphs/c.glif index 3140e9c4e..66daf475c 100644 --- a/tests/makeinstancesufo_data/expected_output/Dummy-ExtraPlus.ufo/glyphs.com.adobe.type.processedglyphs/c.glif +++ b/tests/makeinstancesufo_data/expected_output/Dummy-ExtraPlus.ufo/glyphs.com.adobe.type.processedglyphs/c.glif @@ -47,7 +47,7 @@ stems hstem 9 -21 - hstem 523 -20 + hstem 330 193 vstem 21 248 diff --git a/tests/makeinstancesufo_data/expected_output/Dummy-ExtraPlus.ufo/glyphs.com.adobe.type.processedglyphs/d.glif b/tests/makeinstancesufo_data/expected_output/Dummy-ExtraPlus.ufo/glyphs.com.adobe.type.processedglyphs/d.glif index 8be1bb3eb..3559b15bf 100644 --- a/tests/makeinstancesufo_data/expected_output/Dummy-ExtraPlus.ufo/glyphs.com.adobe.type.processedglyphs/d.glif +++ b/tests/makeinstancesufo_data/expected_output/Dummy-ExtraPlus.ufo/glyphs.com.adobe.type.processedglyphs/d.glif @@ -76,8 +76,8 @@ hintRef0002 stems - hstem 0 183.861 - hstem 523 -20 + hstem 0 184 + hstem 327 196 hstem 683 -20 vstem 27 248 vstem 318 243 diff --git a/tests/makeinstancesufo_data/expected_output/Dummy-ExtraPlus.ufo/glyphs.com.adobe.type.processedglyphs/e.glif b/tests/makeinstancesufo_data/expected_output/Dummy-ExtraPlus.ufo/glyphs.com.adobe.type.processedglyphs/e.glif index 628402797..2f8b9b933 100644 --- a/tests/makeinstancesufo_data/expected_output/Dummy-ExtraPlus.ufo/glyphs.com.adobe.type.processedglyphs/e.glif +++ b/tests/makeinstancesufo_data/expected_output/Dummy-ExtraPlus.ufo/glyphs.com.adobe.type.processedglyphs/e.glif @@ -13,7 +13,7 @@ - + @@ -24,8 +24,8 @@ - - + + @@ -33,7 +33,7 @@ - + @@ -47,8 +47,8 @@ flexList - hintRef0001 - hintRef0002 + hintRef0003 + hintRef0004 hintSetList @@ -59,7 +59,16 @@ hstem 9 -21 hstem 178 154 - hstem 523 -20 + vstem 21 494 + + + + pointTag + hintRef0001 + stems + + hstem 9 -21 + hstem 342 181 vstem 21 494 @@ -69,7 +78,17 @@ stems hstem 9 -21 - hstem 342.2869 180.7131 + hstem 178 154 + vstem 21 494 + + + + pointTag + hintRef0004 + stems + + hstem 9 -21 + hstem 342 181 vstem 21 494 diff --git a/tests/makeinstancesufo_data/expected_output/Dummy-ExtraPlus.ufo/glyphs.com.adobe.type.processedglyphs/g.glif b/tests/makeinstancesufo_data/expected_output/Dummy-ExtraPlus.ufo/glyphs.com.adobe.type.processedglyphs/g.glif index 6515a6537..3c1492014 100644 --- a/tests/makeinstancesufo_data/expected_output/Dummy-ExtraPlus.ufo/glyphs.com.adobe.type.processedglyphs/g.glif +++ b/tests/makeinstancesufo_data/expected_output/Dummy-ExtraPlus.ufo/glyphs.com.adobe.type.processedglyphs/g.glif @@ -8,11 +8,11 @@ - + - + @@ -94,7 +94,7 @@ hintRef0000 stems - hstem -192 144.9921 + hstem -192 145 hstem 339 172 vstem 25 224 vstem 330 230 @@ -116,7 +116,7 @@ hintRef0002 stems - hstem -192 144.9921 + hstem -192 145 hstem 161 139 hstem 339 172 vstem 279 206 @@ -127,7 +127,7 @@ hintRef0003 stems - hstem -192 144.9921 + hstem -192 145 hstem 339 172 vstem 279 273 @@ -137,7 +137,7 @@ hintRef0004 stems - hstem -192 144.9921 + hstem -192 145 hstem 523 -20 vstem 279 273 @@ -147,7 +147,7 @@ hintRef0005 stems - hstem -192 144.9921 + hstem -192 145 hstem 161 139 hstem 523 -20 vstem 25 224 @@ -159,7 +159,7 @@ hintRef0006 stems - hstem -192 144.9921 + hstem -192 145 hstem 366 157 vstem 25 224 vstem 330 230 @@ -170,7 +170,7 @@ hintRef0007 stems - hstem -192 144.9921 + hstem -192 145 hstem 366 157 vstem 279 273 diff --git a/tests/makeinstancesufo_data/expected_output/Dummy-ExtraPlus.ufo/glyphs.com.adobe.type.processedglyphs/m.glif b/tests/makeinstancesufo_data/expected_output/Dummy-ExtraPlus.ufo/glyphs.com.adobe.type.processedglyphs/m.glif index cb0a83d4f..f12709547 100644 --- a/tests/makeinstancesufo_data/expected_output/Dummy-ExtraPlus.ufo/glyphs.com.adobe.type.processedglyphs/m.glif +++ b/tests/makeinstancesufo_data/expected_output/Dummy-ExtraPlus.ufo/glyphs.com.adobe.type.processedglyphs/m.glif @@ -25,7 +25,7 @@ - + @@ -38,7 +38,7 @@ - + @@ -56,7 +56,7 @@ stems hstem 21 -21 - hstem 318.0075 204.9925 + hstem 318 193 vstem3 39 243 329 243 619 243 @@ -64,6 +64,16 @@ pointTag hintRef0001 stems + + hstem 21 -21 + hstem 523 -20 + vstem3 39 243 329 243 619 243 + + + + pointTag + hintRef0002 + stems hstem 21 -21 hstem 511 -20 diff --git a/tests/makeinstancesufo_data/expected_output/Dummy-ExtraPlus.ufo/glyphs.com.adobe.type.processedglyphs/n.glif b/tests/makeinstancesufo_data/expected_output/Dummy-ExtraPlus.ufo/glyphs.com.adobe.type.processedglyphs/n.glif index 6a747081f..70b4d39a5 100644 --- a/tests/makeinstancesufo_data/expected_output/Dummy-ExtraPlus.ufo/glyphs.com.adobe.type.processedglyphs/n.glif +++ b/tests/makeinstancesufo_data/expected_output/Dummy-ExtraPlus.ufo/glyphs.com.adobe.type.processedglyphs/n.glif @@ -16,14 +16,14 @@ - + - + @@ -41,7 +41,7 @@ stems hstem 21 -21 - hstem 523 -20 + hstem 318 193 vstem 39 243 vstem 330 243 @@ -50,6 +50,17 @@ pointTag hintRef0001 stems + + hstem 21 -21 + hstem 523 -20 + vstem 39 243 + vstem 330 243 + + + + pointTag + hintRef0002 + stems hstem 21 -21 hstem 511 -20 diff --git a/tests/makeinstancesufo_data/expected_output/Dummy-ExtraPlus.ufo/glyphs.com.adobe.type.processedglyphs/o.glif b/tests/makeinstancesufo_data/expected_output/Dummy-ExtraPlus.ufo/glyphs.com.adobe.type.processedglyphs/o.glif index 1aaaedd63..e1e895b39 100644 --- a/tests/makeinstancesufo_data/expected_output/Dummy-ExtraPlus.ufo/glyphs.com.adobe.type.processedglyphs/o.glif +++ b/tests/makeinstancesufo_data/expected_output/Dummy-ExtraPlus.ufo/glyphs.com.adobe.type.processedglyphs/o.glif @@ -49,8 +49,8 @@ hstem -12 193 hstem 330 193 - vstem 21 248 - vstem 305 248 + vstem 21 247 + vstem 306 247 diff --git a/tests/makeinstancesufo_data/expected_output/Dummy-ExtraPlus.ufo/glyphs.com.adobe.type.processedglyphs/u.glif b/tests/makeinstancesufo_data/expected_output/Dummy-ExtraPlus.ufo/glyphs.com.adobe.type.processedglyphs/u.glif index 96062905e..8213a2909 100644 --- a/tests/makeinstancesufo_data/expected_output/Dummy-ExtraPlus.ufo/glyphs.com.adobe.type.processedglyphs/u.glif +++ b/tests/makeinstancesufo_data/expected_output/Dummy-ExtraPlus.ufo/glyphs.com.adobe.type.processedglyphs/u.glif @@ -64,7 +64,7 @@ hintRef0002 stems - hstem 0 192.9926 + hstem 0 193 hstem 511 -20 vstem 37 243 vstem 323 243 diff --git a/tests/makeinstancesufo_data/expected_output/bold.ufo/glyphs.com.adobe.type.processedglyphs/A_.glif b/tests/makeinstancesufo_data/expected_output/bold.ufo/glyphs.com.adobe.type.processedglyphs/A_.glif index 1ad514646..6c6589b01 100644 --- a/tests/makeinstancesufo_data/expected_output/bold.ufo/glyphs.com.adobe.type.processedglyphs/A_.glif +++ b/tests/makeinstancesufo_data/expected_output/bold.ufo/glyphs.com.adobe.type.processedglyphs/A_.glif @@ -49,7 +49,7 @@ hintRef0001 stems - hstem 0 55.5 + hstem 0 56 hstem 191 58 hstem 658 -20 vstem 9 215 diff --git a/tests/makeinstancesufo_data/expected_output/bold.ufo/glyphs.com.adobe.type.processedglyphs/A_acute.glif b/tests/makeinstancesufo_data/expected_output/bold.ufo/glyphs.com.adobe.type.processedglyphs/A_acute.glif index 1f7cf7122..fd1d9ad0a 100644 --- a/tests/makeinstancesufo_data/expected_output/bold.ufo/glyphs.com.adobe.type.processedglyphs/A_acute.glif +++ b/tests/makeinstancesufo_data/expected_output/bold.ufo/glyphs.com.adobe.type.processedglyphs/A_acute.glif @@ -68,7 +68,7 @@ hintRef0001 stems - hstem 0 55.5 + hstem 0 56 hstem 191 58 hstem 658 -20 hstem 734 -20 diff --git a/tests/makeinstancesufo_data/expected_output/bold.ufo/glyphs.com.adobe.type.processedglyphs/A_dieresis.glif b/tests/makeinstancesufo_data/expected_output/bold.ufo/glyphs.com.adobe.type.processedglyphs/A_dieresis.glif index 1f682bbe7..0cfa98fdc 100644 --- a/tests/makeinstancesufo_data/expected_output/bold.ufo/glyphs.com.adobe.type.processedglyphs/A_dieresis.glif +++ b/tests/makeinstancesufo_data/expected_output/bold.ufo/glyphs.com.adobe.type.processedglyphs/A_dieresis.glif @@ -79,7 +79,7 @@ hintRef0001 stems - hstem 0 55.5 + hstem 0 56 hstem 191 58 hstem 658 -20 hstem 713 138 diff --git a/tests/makeinstancesufo_data/expected_output/bold.ufo/glyphs.com.adobe.type.processedglyphs/A_tilde.glif b/tests/makeinstancesufo_data/expected_output/bold.ufo/glyphs.com.adobe.type.processedglyphs/A_tilde.glif index 49f2e5698..7f56f9b4f 100644 --- a/tests/makeinstancesufo_data/expected_output/bold.ufo/glyphs.com.adobe.type.processedglyphs/A_tilde.glif +++ b/tests/makeinstancesufo_data/expected_output/bold.ufo/glyphs.com.adobe.type.processedglyphs/A_tilde.glif @@ -79,7 +79,7 @@ hintRef0001 stems - hstem 0 55.5 + hstem 0 56 hstem 191 58 hstem 658 -20 hstem 720 -20 diff --git a/tests/makeinstancesufo_data/expected_output/bold.ufo/glyphs.com.adobe.type.processedglyphs/Y_.glif b/tests/makeinstancesufo_data/expected_output/bold.ufo/glyphs.com.adobe.type.processedglyphs/Y_.glif index a28a32f72..fb317b0b6 100644 --- a/tests/makeinstancesufo_data/expected_output/bold.ufo/glyphs.com.adobe.type.processedglyphs/Y_.glif +++ b/tests/makeinstancesufo_data/expected_output/bold.ufo/glyphs.com.adobe.type.processedglyphs/Y_.glif @@ -42,8 +42,8 @@ hintRef0000 stems - hstem 0 58.5 - hstem 598.5 58.5 + hstem 0 58 + hstem 598 59 vstem 415 207 @@ -52,7 +52,7 @@ hintRef0001 stems - hstem 0 58.5 + hstem 0 58 hstem 600 57 vstem 230 168 @@ -62,7 +62,7 @@ hintRef0002 stems - hstem 0 58.5 + hstem 0 58 hstem 600 57 vstem 415 207 diff --git a/tests/makeinstancesufo_data/expected_output/bold.ufo/glyphs.com.adobe.type.processedglyphs/Y_acute.glif b/tests/makeinstancesufo_data/expected_output/bold.ufo/glyphs.com.adobe.type.processedglyphs/Y_acute.glif index 610b6d3b0..edf4f7d33 100644 --- a/tests/makeinstancesufo_data/expected_output/bold.ufo/glyphs.com.adobe.type.processedglyphs/Y_acute.glif +++ b/tests/makeinstancesufo_data/expected_output/bold.ufo/glyphs.com.adobe.type.processedglyphs/Y_acute.glif @@ -60,8 +60,8 @@ hintRef0000 stems - hstem 0 58.5 - hstem 598.5 58.5 + hstem 0 58 + hstem 598 59 hstem 731 -20 vstem 415 207 @@ -71,7 +71,7 @@ hintRef0001 stems - hstem 0 58.5 + hstem 0 58 hstem 600 57 hstem 731 -20 vstem 230 168 @@ -82,7 +82,7 @@ hintRef0002 stems - hstem 0 58.5 + hstem 0 58 hstem 600 57 hstem 731 -20 vstem 415 207 diff --git a/tests/makeinstancesufo_data/expected_output/bold.ufo/glyphs.com.adobe.type.processedglyphs/Y_dieresis.glif b/tests/makeinstancesufo_data/expected_output/bold.ufo/glyphs.com.adobe.type.processedglyphs/Y_dieresis.glif index 8602c1170..ac8842deb 100644 --- a/tests/makeinstancesufo_data/expected_output/bold.ufo/glyphs.com.adobe.type.processedglyphs/Y_dieresis.glif +++ b/tests/makeinstancesufo_data/expected_output/bold.ufo/glyphs.com.adobe.type.processedglyphs/Y_dieresis.glif @@ -70,8 +70,8 @@ hintRef0000 stems - hstem 0 58.5 - hstem 598.5 58.5 + hstem 0 58 + hstem 598 59 vstem 415 207 @@ -80,7 +80,7 @@ hintRef0001 stems - hstem 0 58.5 + hstem 0 58 hstem 600 57 vstem 230 168 @@ -90,7 +90,7 @@ hintRef0002 stems - hstem 0 58.5 + hstem 0 58 hstem 600 57 hstem 713 138 vstem 169 147 @@ -102,7 +102,7 @@ hintRef0003 stems - hstem 0 58.5 + hstem 0 58 hstem 600 57 hstem 713 138 vstem 418 147 diff --git a/tests/makeinstancesufo_data/expected_output/bold.ufo/glyphs.com.adobe.type.processedglyphs/Y_tilde.glif b/tests/makeinstancesufo_data/expected_output/bold.ufo/glyphs.com.adobe.type.processedglyphs/Y_tilde.glif index 443348e18..89525e70a 100644 --- a/tests/makeinstancesufo_data/expected_output/bold.ufo/glyphs.com.adobe.type.processedglyphs/Y_tilde.glif +++ b/tests/makeinstancesufo_data/expected_output/bold.ufo/glyphs.com.adobe.type.processedglyphs/Y_tilde.glif @@ -70,8 +70,8 @@ hintRef0000 stems - hstem 0 58.5 - hstem 598.5 58.5 + hstem 0 58 + hstem 598 59 hstem 720 -20 hstem 762 97 vstem 415 207 @@ -82,7 +82,7 @@ hintRef0001 stems - hstem 0 58.5 + hstem 0 58 hstem 600 57 hstem 720 -20 hstem 762 97 @@ -94,7 +94,7 @@ hintRef0002 stems - hstem 0 58.5 + hstem 0 58 hstem 600 57 hstem 720 -20 hstem 762 97 @@ -106,7 +106,7 @@ hintRef0003 stems - hstem 0 58.5 + hstem 0 58 hstem 600 57 hstem 703 97 vstem 415 207 @@ -117,7 +117,7 @@ hintRef0004 stems - hstem 0 58.5 + hstem 0 58 hstem 600 57 hstem 720 -20 hstem 762 97 diff --git a/tests/makeinstancesufo_data/expected_output/extralight.ufo/glyphs.com.adobe.type.processedglyphs/A_.glif b/tests/makeinstancesufo_data/expected_output/extralight.ufo/glyphs.com.adobe.type.processedglyphs/A_.glif index 96d71d800..ac6f44d25 100644 --- a/tests/makeinstancesufo_data/expected_output/extralight.ufo/glyphs.com.adobe.type.processedglyphs/A_.glif +++ b/tests/makeinstancesufo_data/expected_output/extralight.ufo/glyphs.com.adobe.type.processedglyphs/A_.glif @@ -38,7 +38,7 @@ hintRef0000 stems - hstem 0 22.5 + hstem 0 22 hstem 247 20 hstem 684 -20 vstem 12 639 @@ -60,7 +60,7 @@ hintRef0002 stems - hstem 0 22.5 + hstem 0 22 hstem 247 20 hstem 684 -20 vstem 12 639 diff --git a/tests/makeinstancesufo_data/expected_output/extralight.ufo/glyphs.com.adobe.type.processedglyphs/A_acute.glif b/tests/makeinstancesufo_data/expected_output/extralight.ufo/glyphs.com.adobe.type.processedglyphs/A_acute.glif index af6080571..4765228df 100644 --- a/tests/makeinstancesufo_data/expected_output/extralight.ufo/glyphs.com.adobe.type.processedglyphs/A_acute.glif +++ b/tests/makeinstancesufo_data/expected_output/extralight.ufo/glyphs.com.adobe.type.processedglyphs/A_acute.glif @@ -56,7 +56,7 @@ hintRef0000 stems - hstem 0 22.5 + hstem 0 22 hstem 247 20 hstem 636 48 hstem 741 -20 @@ -80,7 +80,7 @@ hintRef0002 stems - hstem 0 22.5 + hstem 0 22 hstem 247 20 hstem 684 -20 hstem 741 -20 diff --git a/tests/makeinstancesufo_data/expected_output/extralight.ufo/glyphs.com.adobe.type.processedglyphs/A_dieresis.glif b/tests/makeinstancesufo_data/expected_output/extralight.ufo/glyphs.com.adobe.type.processedglyphs/A_dieresis.glif index 155db80f2..f4c1e5d7c 100644 --- a/tests/makeinstancesufo_data/expected_output/extralight.ufo/glyphs.com.adobe.type.processedglyphs/A_dieresis.glif +++ b/tests/makeinstancesufo_data/expected_output/extralight.ufo/glyphs.com.adobe.type.processedglyphs/A_dieresis.glif @@ -66,7 +66,7 @@ hintRef0000 stems - hstem 0 22.5 + hstem 0 22 hstem 247 20 hstem 684 -20 hstem 756 64 @@ -92,7 +92,7 @@ hintRef0002 stems - hstem 0 22.5 + hstem 0 22 hstem 247 20 hstem 684 -20 hstem 756 64 diff --git a/tests/makeinstancesufo_data/expected_output/extralight.ufo/glyphs.com.adobe.type.processedglyphs/A_tilde.glif b/tests/makeinstancesufo_data/expected_output/extralight.ufo/glyphs.com.adobe.type.processedglyphs/A_tilde.glif index 19656da89..708822a32 100644 --- a/tests/makeinstancesufo_data/expected_output/extralight.ufo/glyphs.com.adobe.type.processedglyphs/A_tilde.glif +++ b/tests/makeinstancesufo_data/expected_output/extralight.ufo/glyphs.com.adobe.type.processedglyphs/A_tilde.glif @@ -66,7 +66,7 @@ hintRef0000 stems - hstem 0 22.5 + hstem 0 22 hstem 247 20 hstem 684 -20 hstem 753 -20 @@ -92,7 +92,7 @@ hintRef0002 stems - hstem 0 22.5 + hstem 0 22 hstem 247 20 hstem 684 -20 hstem 753 -20 diff --git a/tests/makeinstancesufo_data/expected_output/extralight.ufo/glyphs.com.adobe.type.processedglyphs/Y_.glif b/tests/makeinstancesufo_data/expected_output/extralight.ufo/glyphs.com.adobe.type.processedglyphs/Y_.glif index be83d9f9e..ee14e461a 100644 --- a/tests/makeinstancesufo_data/expected_output/extralight.ufo/glyphs.com.adobe.type.processedglyphs/Y_.glif +++ b/tests/makeinstancesufo_data/expected_output/extralight.ufo/glyphs.com.adobe.type.processedglyphs/Y_.glif @@ -11,7 +11,7 @@ - + @@ -27,7 +27,7 @@ - + @@ -41,32 +41,12 @@ pointTag hintRef0000 stems - - hstem 0 23 - hstem 653.5 23.5 - vstem 303 30 - - - - pointTag - hintRef0001 - stems hstem 0 23 hstem 654 23 vstem 303 30 - - pointTag - hintRef0002 - stems - - hstem 0 23 - hstem 653.5 23.5 - vstem 303 30 - - id 7193043de577bb93e874e3090271a9445fcf21d8829d3295811a45c0cf2621772eccc82651db6f13848eac2c2216171ca84be4e3c5e6fa93478c56d4dc2fd43c diff --git a/tests/makeinstancesufo_data/expected_output/extralight.ufo/glyphs.com.adobe.type.processedglyphs/Y_acute.glif b/tests/makeinstancesufo_data/expected_output/extralight.ufo/glyphs.com.adobe.type.processedglyphs/Y_acute.glif index f6ac51642..92e4db14b 100644 --- a/tests/makeinstancesufo_data/expected_output/extralight.ufo/glyphs.com.adobe.type.processedglyphs/Y_acute.glif +++ b/tests/makeinstancesufo_data/expected_output/extralight.ufo/glyphs.com.adobe.type.processedglyphs/Y_acute.glif @@ -11,7 +11,7 @@ - + @@ -27,7 +27,7 @@ - + @@ -59,17 +59,6 @@ pointTag hintRef0000 stems - - hstem 0 23 - hstem 653.5 23.5 - hstem 741 -20 - vstem 303 30 - - - - pointTag - hintRef0001 - stems hstem 0 23 hstem 654 23 @@ -77,17 +66,6 @@ vstem 303 30 - - pointTag - hintRef0002 - stems - - hstem 0 23 - hstem 653.5 23.5 - hstem 741 -20 - vstem 303 30 - - id 4d5e776203ad5b98d180bfeb1d5c39681f4f54b050768dfd8c44a9e92197e4616c9e7657a64df0cd838201e8bce1760fc90beff5c13f66fbeb4b2a1d2ba9fdcb diff --git a/tests/makeinstancesufo_data/expected_output/extralight.ufo/glyphs.com.adobe.type.processedglyphs/Y_dieresis.glif b/tests/makeinstancesufo_data/expected_output/extralight.ufo/glyphs.com.adobe.type.processedglyphs/Y_dieresis.glif index ec697bd97..fe64f78da 100644 --- a/tests/makeinstancesufo_data/expected_output/extralight.ufo/glyphs.com.adobe.type.processedglyphs/Y_dieresis.glif +++ b/tests/makeinstancesufo_data/expected_output/extralight.ufo/glyphs.com.adobe.type.processedglyphs/Y_dieresis.glif @@ -11,7 +11,7 @@ - + @@ -27,7 +27,7 @@ - + @@ -69,30 +69,9 @@ pointTag hintRef0000 stems - - hstem 0 23 - hstem 653.5 23.5 - vstem 195 64 - vstem 303 30 - - - - pointTag - hintRef0001 - stems hstem 0 23 hstem 654 23 - vstem 303 30 - - - - pointTag - hintRef0002 - stems - - hstem 0 23 - hstem 653.5 23.5 hstem 756 64 vstem 195 64 vstem 303 30 diff --git a/tests/makeinstancesufo_data/expected_output/extralight.ufo/glyphs.com.adobe.type.processedglyphs/Y_tilde.glif b/tests/makeinstancesufo_data/expected_output/extralight.ufo/glyphs.com.adobe.type.processedglyphs/Y_tilde.glif index 9f547ba87..bc8f62109 100644 --- a/tests/makeinstancesufo_data/expected_output/extralight.ufo/glyphs.com.adobe.type.processedglyphs/Y_tilde.glif +++ b/tests/makeinstancesufo_data/expected_output/extralight.ufo/glyphs.com.adobe.type.processedglyphs/Y_tilde.glif @@ -11,7 +11,7 @@ - + @@ -27,7 +27,7 @@ - + @@ -69,33 +69,9 @@ pointTag hintRef0000 stems - - hstem 0 23 - hstem 653.5 23.5 - hstem 753 -20 - hstem 822 23 - vstem 303 30 - - - - pointTag - hintRef0001 - stems hstem 0 23 hstem 654 23 - hstem 753 -20 - hstem 822 23 - vstem 303 30 - - - - pointTag - hintRef0002 - stems - - hstem 0 23 - hstem 653.5 23.5 hstem 741 23 hstem 822 23 vstem 303 30 diff --git a/tests/makeinstancesufo_data/expected_output/extralight.ufo/glyphs.com.adobe.type.processedglyphs/y.glif b/tests/makeinstancesufo_data/expected_output/extralight.ufo/glyphs.com.adobe.type.processedglyphs/y.glif index 6d9e0e883..f64bed3ff 100644 --- a/tests/makeinstancesufo_data/expected_output/extralight.ufo/glyphs.com.adobe.type.processedglyphs/y.glif +++ b/tests/makeinstancesufo_data/expected_output/extralight.ufo/glyphs.com.adobe.type.processedglyphs/y.glif @@ -12,8 +12,8 @@ - - + + @@ -49,7 +49,7 @@ stems hstem -255 22 - hstem 447.5 22.5 + hstem 448 22 vstem -19 512 @@ -59,7 +59,7 @@ stems hstem -255 22 - hstem 447.5 22.5 + hstem 448 22 vstem 310 183 @@ -79,7 +79,7 @@ stems hstem -255 22 - hstem 447.5 22.5 + hstem 448 22 vstem -14 194 @@ -89,7 +89,7 @@ stems hstem -255 22 - hstem 447.5 22.5 + hstem 448 22 vstem -19 512 diff --git a/tests/makeinstancesufo_data/expected_output/extralight.ufo/glyphs.com.adobe.type.processedglyphs/yacute.glif b/tests/makeinstancesufo_data/expected_output/extralight.ufo/glyphs.com.adobe.type.processedglyphs/yacute.glif index f58a220ba..ead571e29 100644 --- a/tests/makeinstancesufo_data/expected_output/extralight.ufo/glyphs.com.adobe.type.processedglyphs/yacute.glif +++ b/tests/makeinstancesufo_data/expected_output/extralight.ufo/glyphs.com.adobe.type.processedglyphs/yacute.glif @@ -12,8 +12,8 @@ - - + + @@ -67,7 +67,7 @@ stems hstem -255 22 - hstem 447.5 22.5 + hstem 448 22 hstem 738 -20 vstem -19 512 @@ -78,7 +78,7 @@ stems hstem -255 22 - hstem 447.5 22.5 + hstem 448 22 hstem 738 -20 vstem 310 183 @@ -100,7 +100,7 @@ stems hstem -255 22 - hstem 447.5 22.5 + hstem 448 22 hstem 738 -20 vstem -14 194 @@ -111,7 +111,7 @@ stems hstem -255 22 - hstem 447.5 22.5 + hstem 448 22 hstem 738 -20 vstem -19 512 diff --git a/tests/makeinstancesufo_data/expected_output/extralight.ufo/glyphs.com.adobe.type.processedglyphs/ydieresis.glif b/tests/makeinstancesufo_data/expected_output/extralight.ufo/glyphs.com.adobe.type.processedglyphs/ydieresis.glif index 82130ad2f..bbd639020 100644 --- a/tests/makeinstancesufo_data/expected_output/extralight.ufo/glyphs.com.adobe.type.processedglyphs/ydieresis.glif +++ b/tests/makeinstancesufo_data/expected_output/extralight.ufo/glyphs.com.adobe.type.processedglyphs/ydieresis.glif @@ -12,8 +12,8 @@ - - + + @@ -77,7 +77,7 @@ stems hstem -255 22 - hstem 447.5 22.5 + hstem 448 22 hstem 644 59 vstem 133 58 vstem 310 183 @@ -101,7 +101,7 @@ stems hstem -255 22 - hstem 447.5 22.5 + hstem 448 22 hstem 644 59 vstem -14 194 vstem 321 58 @@ -113,7 +113,7 @@ stems hstem -255 22 - hstem 447.5 22.5 + hstem 448 22 hstem 644 59 vstem 133 58 vstem 321 58 diff --git a/tests/makeinstancesufo_data/expected_output/extralight.ufo/glyphs.com.adobe.type.processedglyphs/ytilde.glif b/tests/makeinstancesufo_data/expected_output/extralight.ufo/glyphs.com.adobe.type.processedglyphs/ytilde.glif index 1a6a1a3d0..2f3901028 100644 --- a/tests/makeinstancesufo_data/expected_output/extralight.ufo/glyphs.com.adobe.type.processedglyphs/ytilde.glif +++ b/tests/makeinstancesufo_data/expected_output/extralight.ufo/glyphs.com.adobe.type.processedglyphs/ytilde.glif @@ -12,8 +12,8 @@ - - + + @@ -77,7 +77,7 @@ stems hstem -255 22 - hstem 447.5 22.5 + hstem 448 22 hstem 588 23 hstem 684 -20 vstem -19 512 @@ -89,7 +89,7 @@ stems hstem -255 22 - hstem 447.5 22.5 + hstem 448 22 hstem 588 23 hstem 684 -20 vstem 310 183 @@ -113,7 +113,7 @@ stems hstem -255 22 - hstem 447.5 22.5 + hstem 448 22 hstem 588 23 hstem 684 -20 vstem -14 194 @@ -125,7 +125,7 @@ stems hstem -255 22 - hstem 447.5 22.5 + hstem 448 22 hstem 588 23 hstem 669 23 vstem -19 512 @@ -137,7 +137,7 @@ stems hstem -255 22 - hstem 447.5 22.5 + hstem 448 22 hstem 588 23 hstem 679 -20 vstem -19 512 @@ -149,7 +149,7 @@ stems hstem -255 22 - hstem 447.5 22.5 + hstem 448 22 hstem 588 23 hstem 684 -20 vstem -19 512 @@ -161,7 +161,7 @@ stems hstem -255 22 - hstem 447.5 22.5 + hstem 448 22 hstem 588 23 hstem 669 23 vstem -19 512 diff --git a/tests/makeinstancesufo_data/expected_output/ufo3regular.ufo/glyphs.com.adobe.type.processedglyphs/A_.glif b/tests/makeinstancesufo_data/expected_output/ufo3regular.ufo/glyphs.com.adobe.type.processedglyphs/A_.glif index 62687a987..e53dad64d 100644 --- a/tests/makeinstancesufo_data/expected_output/ufo3regular.ufo/glyphs.com.adobe.type.processedglyphs/A_.glif +++ b/tests/makeinstancesufo_data/expected_output/ufo3regular.ufo/glyphs.com.adobe.type.processedglyphs/A_.glif @@ -12,14 +12,14 @@ - + - - + + @@ -38,7 +38,7 @@ hintRef0000 stems - hstem 0 37.5 + hstem 0 38 hstem 221 37 hstem 671 -20 vstem 11 203 @@ -49,7 +49,7 @@ hintRef0001 stems - hstem 0 37.5 + hstem 0 38 hstem 221 37 hstem 671 -20 vstem 11 646 @@ -60,7 +60,7 @@ hintRef0002 stems - hstem 0 39.5 + hstem 0 40 hstem 221 37 hstem 671 -20 vstem 11 203 @@ -82,7 +82,7 @@ hintRef0004 stems - hstem 0 37.5 + hstem 0 40 hstem 221 37 hstem 671 -20 vstem 11 646 @@ -93,18 +93,7 @@ hintRef0005 stems - hstem 0 39.5 - hstem 221 37 - hstem 671 -20 - vstem 11 646 - - - - pointTag - hintRef0006 - stems - - hstem 0 39.5 + hstem 0 40 hstem 221 37 hstem 671 -20 vstem 11 203 diff --git a/tests/makeinstancesufo_data/expected_output/ufo3regular.ufo/glyphs.com.adobe.type.processedglyphs/A_acute.glif b/tests/makeinstancesufo_data/expected_output/ufo3regular.ufo/glyphs.com.adobe.type.processedglyphs/A_acute.glif index f8c51adc7..3f969a8c8 100644 --- a/tests/makeinstancesufo_data/expected_output/ufo3regular.ufo/glyphs.com.adobe.type.processedglyphs/A_acute.glif +++ b/tests/makeinstancesufo_data/expected_output/ufo3regular.ufo/glyphs.com.adobe.type.processedglyphs/A_acute.glif @@ -17,14 +17,14 @@ - + - - + + @@ -56,7 +56,7 @@ hintRef0000 stems - hstem 0 37.5 + hstem 0 38 hstem 221 37 hstem 671 -20 hstem 736 -20 @@ -68,7 +68,7 @@ hintRef0001 stems - hstem 0 37.5 + hstem 0 38 hstem 221 37 hstem 671 -20 hstem 736 -20 @@ -80,7 +80,7 @@ hintRef0002 stems - hstem 0 39.5 + hstem 0 40 hstem 221 37 hstem 671 -20 hstem 736 -20 @@ -104,7 +104,7 @@ hintRef0004 stems - hstem 0 37.5 + hstem 0 40 hstem 221 37 hstem 671 -20 hstem 736 -20 @@ -116,19 +116,7 @@ hintRef0005 stems - hstem 0 39.5 - hstem 221 37 - hstem 671 -20 - hstem 736 -20 - vstem 11 646 - - - - pointTag - hintRef0006 - stems - - hstem 0 39.5 + hstem 0 40 hstem 221 37 hstem 671 -20 hstem 736 -20 diff --git a/tests/makeinstancesufo_data/expected_output/ufo3regular.ufo/glyphs.com.adobe.type.processedglyphs/A_dieresis.glif b/tests/makeinstancesufo_data/expected_output/ufo3regular.ufo/glyphs.com.adobe.type.processedglyphs/A_dieresis.glif index 4ec6ecbba..ff08f8eb4 100644 --- a/tests/makeinstancesufo_data/expected_output/ufo3regular.ufo/glyphs.com.adobe.type.processedglyphs/A_dieresis.glif +++ b/tests/makeinstancesufo_data/expected_output/ufo3regular.ufo/glyphs.com.adobe.type.processedglyphs/A_dieresis.glif @@ -12,13 +12,13 @@ - + - + @@ -28,7 +28,7 @@ - + @@ -66,7 +66,7 @@ hintRef0000 stems - hstem 0 37.5 + hstem 0 38 hstem 221 37 hstem 671 -20 hstem 734 98 @@ -79,7 +79,7 @@ hintRef0001 stems - hstem 0 39.5 + hstem 0 40 hstem 221 37 hstem 671 -20 hstem 734 98 @@ -96,7 +96,7 @@ hstem 221 37 hstem 671 -20 hstem 734 98 - vstem 161 102 + vstem 11 203 vstem 389 102 @@ -105,7 +105,7 @@ hintRef0003 stems - hstem 0 37.5 + hstem 0 40 hstem 221 37 hstem 671 -20 hstem 734 98 @@ -118,20 +118,7 @@ hintRef0004 stems - hstem 0 39.5 - hstem 221 37 - hstem 671 -20 - hstem 734 98 - vstem 11 203 - vstem 389 102 - - - - pointTag - hintRef0005 - stems - - hstem 0 37.5 + hstem 0 38 hstem 221 37 hstem 671 -20 hstem 734 98 diff --git a/tests/makeinstancesufo_data/expected_output/ufo3regular.ufo/glyphs.com.adobe.type.processedglyphs/A_tilde.glif b/tests/makeinstancesufo_data/expected_output/ufo3regular.ufo/glyphs.com.adobe.type.processedglyphs/A_tilde.glif index 58df5f6da..adbc61cd8 100644 --- a/tests/makeinstancesufo_data/expected_output/ufo3regular.ufo/glyphs.com.adobe.type.processedglyphs/A_tilde.glif +++ b/tests/makeinstancesufo_data/expected_output/ufo3regular.ufo/glyphs.com.adobe.type.processedglyphs/A_tilde.glif @@ -12,14 +12,14 @@ - + - - + + @@ -35,7 +35,7 @@ - + @@ -48,7 +48,7 @@ - + @@ -66,7 +66,7 @@ hintRef0000 stems - hstem 0 37.5 + hstem 0 38 hstem 221 37 hstem 671 -20 hstem 738 -20 @@ -79,7 +79,7 @@ hintRef0001 stems - hstem 0 37.5 + hstem 0 38 hstem 221 37 hstem 671 -20 hstem 738 -20 @@ -92,7 +92,7 @@ hintRef0002 stems - hstem 0 39.5 + hstem 0 40 hstem 221 37 hstem 671 -20 hstem 738 -20 @@ -118,7 +118,7 @@ hintRef0004 stems - hstem 0 37.5 + hstem 0 40 hstem 221 37 hstem 671 -20 hstem 738 -20 @@ -131,20 +131,7 @@ hintRef0005 stems - hstem 0 39.5 - hstem 221 37 - hstem 671 -20 - hstem 738 -20 - hstem 791 59 - vstem 11 646 - - - - pointTag - hintRef0006 - stems - - hstem 0 39.5 + hstem 0 40 hstem 221 37 hstem 671 -20 hstem 738 -20 @@ -154,10 +141,10 @@ pointTag - hintRef0007 + hintRef0006 stems - hstem 0 37.5 + hstem 0 38 hstem 221 37 hstem 671 -20 hstem 723 58 @@ -166,10 +153,10 @@ pointTag - hintRef0008 + hintRef0007 stems - hstem 0 37.5 + hstem 0 38 hstem 221 37 hstem 671 -20 hstem 738 -20 diff --git a/tests/makeinstancesufo_data/expected_output/ufo3regular.ufo/glyphs.com.adobe.type.processedglyphs/Y_.glif b/tests/makeinstancesufo_data/expected_output/ufo3regular.ufo/glyphs.com.adobe.type.processedglyphs/Y_.glif index 5eb714168..b2fb72dcb 100644 --- a/tests/makeinstancesufo_data/expected_output/ufo3regular.ufo/glyphs.com.adobe.type.processedglyphs/Y_.glif +++ b/tests/makeinstancesufo_data/expected_output/ufo3regular.ufo/glyphs.com.adobe.type.processedglyphs/Y_.glif @@ -7,11 +7,11 @@ - + - + - + @@ -25,7 +25,7 @@ - + @@ -43,7 +43,7 @@ stems hstem 0 39 - hstem 627.5 39.5 + hstem 628 39 vstem 268 96 vstem 401 213 @@ -52,26 +52,6 @@ pointTag hintRef0001 stems - - hstem 0 39 - hstem 628 39 - vstem 268 96 - - - - pointTag - hintRef0002 - stems - - hstem 0 39 - hstem 627.5 39.5 - vstem 268 96 - - - - pointTag - hintRef0003 - stems hstem 0 39 hstem 629 38 @@ -80,11 +60,11 @@ pointTag - hintRef0004 + hintRef0002 stems hstem 0 39 - hstem 627.5 39.5 + hstem 628 39 vstem 268 96 vstem 401 213 diff --git a/tests/makeinstancesufo_data/expected_output/ufo3regular.ufo/glyphs.com.adobe.type.processedglyphs/Y_acute.glif b/tests/makeinstancesufo_data/expected_output/ufo3regular.ufo/glyphs.com.adobe.type.processedglyphs/Y_acute.glif index 8b73f5f62..9901910e2 100644 --- a/tests/makeinstancesufo_data/expected_output/ufo3regular.ufo/glyphs.com.adobe.type.processedglyphs/Y_acute.glif +++ b/tests/makeinstancesufo_data/expected_output/ufo3regular.ufo/glyphs.com.adobe.type.processedglyphs/Y_acute.glif @@ -7,11 +7,11 @@ - + - + - + @@ -25,7 +25,7 @@ - + @@ -61,7 +61,7 @@ stems hstem 0 39 - hstem 627.5 39.5 + hstem 628 39 hstem 736 -20 vstem 268 96 vstem 401 213 @@ -71,28 +71,6 @@ pointTag hintRef0001 stems - - hstem 0 39 - hstem 628 39 - hstem 736 -20 - vstem 268 96 - - - - pointTag - hintRef0002 - stems - - hstem 0 39 - hstem 627.5 39.5 - hstem 736 -20 - vstem 268 96 - - - - pointTag - hintRef0003 - stems hstem 0 39 hstem 629 38 @@ -102,11 +80,11 @@ pointTag - hintRef0004 + hintRef0002 stems hstem 0 39 - hstem 627.5 39.5 + hstem 628 39 hstem 736 -20 vstem 268 96 vstem 401 213 diff --git a/tests/makeinstancesufo_data/expected_output/ufo3regular.ufo/glyphs.com.adobe.type.processedglyphs/Y_dieresis.glif b/tests/makeinstancesufo_data/expected_output/ufo3regular.ufo/glyphs.com.adobe.type.processedglyphs/Y_dieresis.glif index a94f966b9..b692d46b0 100644 --- a/tests/makeinstancesufo_data/expected_output/ufo3regular.ufo/glyphs.com.adobe.type.processedglyphs/Y_dieresis.glif +++ b/tests/makeinstancesufo_data/expected_output/ufo3regular.ufo/glyphs.com.adobe.type.processedglyphs/Y_dieresis.glif @@ -7,11 +7,11 @@ - + - + - + @@ -25,7 +25,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -71,7 +71,7 @@ stems hstem 0 39 - hstem 627.5 39.5 + hstem 628 39 vstem 268 96 vstem 401 213 @@ -80,26 +80,6 @@ pointTag hintRef0001 stems - - hstem 0 39 - hstem 628 39 - vstem 268 96 - - - - pointTag - hintRef0002 - stems - - hstem 0 39 - hstem 627.5 39.5 - vstem 183 102 - - - - pointTag - hintRef0003 - stems hstem 0 39 hstem 629 38 @@ -108,11 +88,11 @@ pointTag - hintRef0004 + hintRef0002 stems hstem 0 39 - hstem 627.5 39.5 + hstem 628 39 hstem 734 98 vstem 183 102 vstem 401 213 @@ -120,11 +100,11 @@ pointTag - hintRef0005 + hintRef0003 stems hstem 0 39 - hstem 627.5 39.5 + hstem 628 39 hstem 734 98 vstem 268 96 vstem 411 102 diff --git a/tests/makeinstancesufo_data/expected_output/ufo3regular.ufo/glyphs.com.adobe.type.processedglyphs/Y_tilde.glif b/tests/makeinstancesufo_data/expected_output/ufo3regular.ufo/glyphs.com.adobe.type.processedglyphs/Y_tilde.glif index 835c5c321..aaa7ce30b 100644 --- a/tests/makeinstancesufo_data/expected_output/ufo3regular.ufo/glyphs.com.adobe.type.processedglyphs/Y_tilde.glif +++ b/tests/makeinstancesufo_data/expected_output/ufo3regular.ufo/glyphs.com.adobe.type.processedglyphs/Y_tilde.glif @@ -7,11 +7,11 @@ - + - + - + @@ -25,7 +25,7 @@ - + @@ -39,7 +39,7 @@ - + @@ -52,7 +52,7 @@ - + @@ -71,7 +71,7 @@ stems hstem 0 39 - hstem 627.5 39.5 + hstem 628 39 hstem 738 -20 hstem 791 59 vstem 268 96 @@ -82,30 +82,6 @@ pointTag hintRef0001 stems - - hstem 0 39 - hstem 628 39 - hstem 738 -20 - hstem 791 59 - vstem 268 96 - - - - pointTag - hintRef0002 - stems - - hstem 0 39 - hstem 627.5 39.5 - hstem 738 -20 - hstem 791 59 - vstem 268 96 - - - - pointTag - hintRef0003 - stems hstem 0 39 hstem 629 38 @@ -116,11 +92,11 @@ pointTag - hintRef0004 + hintRef0002 stems hstem 0 39 - hstem 627.5 39.5 + hstem 628 39 hstem 738 -20 hstem 791 59 vstem 268 96 @@ -129,11 +105,11 @@ pointTag - hintRef0005 + hintRef0003 stems hstem 0 39 - hstem 627.5 39.5 + hstem 628 39 hstem 723 58 vstem 268 96 vstem 401 213 @@ -141,11 +117,11 @@ pointTag - hintRef0006 + hintRef0004 stems hstem 0 39 - hstem 627.5 39.5 + hstem 628 39 hstem 738 -20 hstem 791 59 vstem 268 96 diff --git a/tests/makeinstancesufo_data/expected_output/ufo3regular.ufo/glyphs.com.adobe.type.processedglyphs/y.glif b/tests/makeinstancesufo_data/expected_output/ufo3regular.ufo/glyphs.com.adobe.type.processedglyphs/y.glif index 84cf7fc07..425cd2172 100644 --- a/tests/makeinstancesufo_data/expected_output/ufo3regular.ufo/glyphs.com.adobe.type.processedglyphs/y.glif +++ b/tests/makeinstancesufo_data/expected_output/ufo3regular.ufo/glyphs.com.adobe.type.processedglyphs/y.glif @@ -12,12 +12,12 @@ - + - + - + @@ -30,7 +30,7 @@ - + @@ -49,7 +49,7 @@ stems hstem -246 90 - hstem 442.5 34.5 + hstem 442 35 vstem -11 522 @@ -59,7 +59,7 @@ stems hstem -246 90 - hstem 442.5 34.5 + hstem 442 35 vstem 327 184 @@ -70,26 +70,6 @@ hstem -246 90 hstem 442 35 - vstem 327 184 - - - - pointTag - hintRef0003 - stems - - hstem -246 90 - hstem 441.5 35.5 - vstem -11 522 - - - - pointTag - hintRef0004 - stems - - hstem -246 90 - hstem 442.5 34.5 vstem -11 522 diff --git a/tests/makeinstancesufo_data/expected_output/ufo3regular.ufo/glyphs.com.adobe.type.processedglyphs/yacute.glif b/tests/makeinstancesufo_data/expected_output/ufo3regular.ufo/glyphs.com.adobe.type.processedglyphs/yacute.glif index be747bbb8..b470ddbab 100644 --- a/tests/makeinstancesufo_data/expected_output/ufo3regular.ufo/glyphs.com.adobe.type.processedglyphs/yacute.glif +++ b/tests/makeinstancesufo_data/expected_output/ufo3regular.ufo/glyphs.com.adobe.type.processedglyphs/yacute.glif @@ -12,12 +12,12 @@ - + - + - + @@ -30,7 +30,7 @@ - + @@ -67,7 +67,7 @@ stems hstem -246 90 - hstem 442.5 34.5 + hstem 442 35 vstem -11 522 @@ -77,7 +77,7 @@ stems hstem -246 90 - hstem 442.5 34.5 + hstem 442 35 vstem 327 184 @@ -88,26 +88,6 @@ hstem -246 90 hstem 442 35 - vstem 327 184 - - - - pointTag - hintRef0003 - stems - - hstem -246 90 - hstem 441.5 35.5 - vstem -11 522 - - - - pointTag - hintRef0004 - stems - - hstem -246 90 - hstem 442.5 34.5 vstem -11 522 diff --git a/tests/makeinstancesufo_data/expected_output/ufo3regular.ufo/glyphs.com.adobe.type.processedglyphs/ydieresis.glif b/tests/makeinstancesufo_data/expected_output/ufo3regular.ufo/glyphs.com.adobe.type.processedglyphs/ydieresis.glif index d2df41aab..9fb4365a6 100644 --- a/tests/makeinstancesufo_data/expected_output/ufo3regular.ufo/glyphs.com.adobe.type.processedglyphs/ydieresis.glif +++ b/tests/makeinstancesufo_data/expected_output/ufo3regular.ufo/glyphs.com.adobe.type.processedglyphs/ydieresis.glif @@ -12,12 +12,12 @@ - + - + - + @@ -52,7 +52,7 @@ - + @@ -77,7 +77,7 @@ stems hstem -246 90 - hstem 442.5 34.5 + hstem 442 35 hstem 614 98 vstem 128 101 vstem 327 184 @@ -92,30 +92,6 @@ hstem 442 35 hstem 614 98 vstem 128 101 - vstem 327 184 - - - - pointTag - hintRef0002 - stems - - hstem -246 90 - hstem 441.5 35.5 - hstem 614 98 - vstem 128 101 - vstem 341 101 - - - - pointTag - hintRef0003 - stems - - hstem -246 90 - hstem 442.5 34.5 - hstem 614 98 - vstem 128 101 vstem 341 101 diff --git a/tests/makeinstancesufo_data/expected_output/ufo3regular.ufo/glyphs.com.adobe.type.processedglyphs/ytilde.glif b/tests/makeinstancesufo_data/expected_output/ufo3regular.ufo/glyphs.com.adobe.type.processedglyphs/ytilde.glif index 0effadc0b..7d4ac51ea 100644 --- a/tests/makeinstancesufo_data/expected_output/ufo3regular.ufo/glyphs.com.adobe.type.processedglyphs/ytilde.glif +++ b/tests/makeinstancesufo_data/expected_output/ufo3regular.ufo/glyphs.com.adobe.type.processedglyphs/ytilde.glif @@ -12,12 +12,12 @@ - + - + - + @@ -30,7 +30,7 @@ - + @@ -45,7 +45,7 @@ - + @@ -58,7 +58,7 @@ - + @@ -77,7 +77,7 @@ stems hstem -246 90 - hstem 442.5 34.5 + hstem 442 35 hstem 581 58 vstem -11 522 @@ -88,7 +88,7 @@ stems hstem -246 90 - hstem 442.5 34.5 + hstem 442 35 hstem 581 58 vstem 327 184 @@ -100,50 +100,28 @@ hstem -246 90 hstem 442 35 - hstem 581 58 - vstem 327 184 - - - - pointTag - hintRef0003 - stems - - hstem -246 90 - hstem 441.5 35.5 - hstem 581 58 - vstem -11 522 - - - - pointTag - hintRef0004 - stems - - hstem -246 90 - hstem 442.5 34.5 hstem 649 59 vstem -11 522 pointTag - hintRef0005 + hintRef0003 stems hstem -246 90 - hstem 442.5 34.5 + hstem 442 35 hstem 581 58 vstem -11 522 pointTag - hintRef0006 + hintRef0004 stems hstem -246 90 - hstem 442.5 34.5 + hstem 442 35 hstem 649 59 vstem -11 522 diff --git a/tests/otfautohint_data/expected_output/dummy/font.otf.a-z,A-Z,zero-nine.vstm.txt b/tests/otfautohint_data/expected_output/dummy/font.otf.a-z,A-Z,zero-nine.vstm.txt index 962d95391..7c1b1fc23 100644 --- a/tests/otfautohint_data/expected_output/dummy/font.otf.a-z,A-Z,zero-nine.vstm.txt +++ b/tests/otfautohint_data/expected_output/dummy/font.otf.a-z,A-Z,zero-nine.vstm.txt @@ -1,15 +1,16 @@ -Vertical Stem List for font.otf on Wed Sep 25 12:24:03 2019 +Vertical Stem List for /tmp/tmpd6nsoup4 on Fri Oct 11 02:12:02 2024 count width glyphs 20 82 [a b d h i j k l m n p q r t u L one] 9 84 [E F H I K T U Y] 6 83 [u B D J P R] - 4 72 [d n p r] + 5 71 [a d n p u] 3 80 [M N] - 3 70 [b m q] 2 81 [f U] 2 78 [M four] - 2 71 [a u] + 2 69 [b q] 1 157 [three] 1 77 [G] 1 76 [m] 1 74 [t] + 1 72 [r] + 1 70 [m] diff --git a/tests/otfautohint_data/expected_output/dummy/font.otf.all.vstm.txt b/tests/otfautohint_data/expected_output/dummy/font.otf.all.vstm.txt index 3717a7c87..13b514f96 100644 --- a/tests/otfautohint_data/expected_output/dummy/font.otf.all.vstm.txt +++ b/tests/otfautohint_data/expected_output/dummy/font.otf.all.vstm.txt @@ -1,30 +1,30 @@ -Vertical Stem List for /tmp/pytest-of-skef/pytest-0/popen-gw9/test_stemhist_report_stems_all0/font.otf on Sun Nov 28 13:49:47 2021 +Vertical Stem List for /tmp/tmpmry2_4gr on Fri Oct 11 02:12:03 2024 count width glyphs 22 82 [B L a b d h i j k l m n p q r t u one] 12 83 [B D J P R e s u three five] 11 84 [E F H I K P T U Y three] 9 85 [S b c d o p q] + 8 71 [a d g n p u ampersand eight] 7 86 [C D O Q seven] 7 66 [M exclam bracketleft bracketright braceright at plus] 6 80 [M N a ampersand dollar] - 6 72 [d n p r less greater] 5 81 [U f g question dollar] 5 78 [M four six nine] - 5 71 [a g u ampersand eight] 4 77 [G zero six] 4 74 [t parenleft parenright bar] - 4 70 [b m q braceleft] + 4 69 [b g q braceright] 4 61 [percent] 3 162 [period colon semicolon] 3 108 [quotesingle quotedbl] 3 79 [g two eight] 3 75 [e eight] + 3 72 [r less greater] 2 146 [exclam question] 2 132 [i j] 2 121 [braceleft braceright] 2 76 [g m] 2 73 [comma semicolon] - 2 69 [g braceright] + 2 70 [m braceleft] 2 67 [ampersand braceleft] 1 157 [three] 1 124 [zero] @@ -33,5 +33,5 @@ count width glyphs 1 63 [at] 1 60 [dollar] 1 58 [at] - 1 57 [asterisk] + 1 56 [asterisk] 1 54 [at] diff --git a/tests/otfautohint_data/expected_output/dummy/font.otf.vstm.txt b/tests/otfautohint_data/expected_output/dummy/font.otf.vstm.txt index a9ff4b30a..23ec89f1f 100644 --- a/tests/otfautohint_data/expected_output/dummy/font.otf.vstm.txt +++ b/tests/otfautohint_data/expected_output/dummy/font.otf.vstm.txt @@ -1,22 +1,23 @@ -Vertical Stem List for font.otf on Wed Sep 25 12:22:42 2019 +Vertical Stem List for /tmp/tmpdobfvdgy on Fri Oct 11 02:12:03 2024 count width glyphs 20 82 [L a b d h i j k l m n p q r t u one] 9 84 [E F H I K T U Y] 6 83 [B D J P R u] - 6 72 [d n p r less greater] + 5 71 [a d n p u] 4 66 [exclam bracketleft bracketright plus] 3 108 [quotesingle quotedbl] 3 80 [M N] - 3 70 [b m q] + 3 72 [r less greater] 2 121 [braceleft braceright] 2 81 [U f] 2 78 [M four] 2 74 [t bar] - 2 71 [a u] + 2 69 [b q] 1 157 [three] 1 77 [G] 1 76 [m] + 1 70 [m] 1 64 [at] 1 60 [dollar] - 1 57 [asterisk] + 1 56 [asterisk] 1 54 [at] diff --git a/tests/otfautohint_data/input/dummy/decimals.otf b/tests/otfautohint_data/input/dummy/decimals.otf index 12d0e8456049a24ab4e0d7fe317e5078a22509ce..063c7be77e7a6833d2c10be502a975e1cae0b5e4 100644 GIT binary patch delta 151 zcmZoU%-C?4QN}+c#Giqap@D&!LBQF~O`*h}Gm3$MGl792Y}G^=6&9J`vVe&$%8Wb{ zGi+omkG@|T&u{aUftmRQ0}x!_&@&B0Kh|5gcjJLW92%NG${BuCF#f3IVfazS^rM>D zfrmNkcj8aMpE0a5EIs^ZWP%HXWLPF_-oW`*mOXvze}*|Tyf-gV&#_=)VAw2>P{IfR Dsi`sN delta 154 zcmZoT%-C|6QN}+c#Giqap@D&!LBQF~O+lv)C};Rl!T6(+hv7#R(~oLq z2Oj3E--$m3f5x!NGBB`A;y(kVg3E+JoN1d^alVyhpE>J4!<@9V&GXcAEH?8blrRDS DXDBlM diff --git a/tests/otfautohint_data/input/dummy/decimals.ufo/glyphs.com.adobe.type.processedglyphs/at.glif b/tests/otfautohint_data/input/dummy/decimals.ufo/glyphs.com.adobe.type.processedglyphs/at.glif index 5a3cf7d1a..dd0d9f9d3 100644 --- a/tests/otfautohint_data/input/dummy/decimals.ufo/glyphs.com.adobe.type.processedglyphs/at.glif +++ b/tests/otfautohint_data/input/dummy/decimals.ufo/glyphs.com.adobe.type.processedglyphs/at.glif @@ -92,7 +92,7 @@ hstem 472.8 44 vstem 40.8 48 vstem 199.2 52.8 - vstem 394.4 39.6 + vstem 394.4 39.4051 vstem 590.4 46.4 @@ -107,7 +107,7 @@ hstem 472.8 44 vstem 40.8 48 vstem 199.2 52.8 - vstem 394.4 39.6 + vstem 394.4 39.4051 vstem 590.4 46.4 @@ -122,7 +122,7 @@ hstem 472.8 44 vstem 40.8 48 vstem 199.2 52.8 - vstem 394.4 39.6 + vstem 394.4 39.4051 vstem 590.4 46.4 @@ -137,7 +137,7 @@ hstem 472.8 44 vstem 40.8 48 vstem 199.2 52.8 - vstem 394.4 39.6 + vstem 394.4 39.4051 vstem 590.4 46.4 diff --git a/tests/otfautohint_data/input/dummy/defaultlayer.ufo/glyphs/Q_.glif b/tests/otfautohint_data/input/dummy/defaultlayer.ufo/glyphs/Q_.glif index 39c353883..0afa95f88 100644 --- a/tests/otfautohint_data/input/dummy/defaultlayer.ufo/glyphs/Q_.glif +++ b/tests/otfautohint_data/input/dummy/defaultlayer.ufo/glyphs/Q_.glif @@ -60,7 +60,7 @@ stems hstem -163 71 - hstem -12 14.5 + hstem -12 14 hstem 595 73 vstem 48 86 vstem 466 86 @@ -84,7 +84,7 @@ stems hstem -163 71 - hstem -12 14.5 + hstem -12 14 hstem 595 73 vstem 48 86 vstem 466 86 diff --git a/tests/otfautohint_data/input/dummy/defaultlayer.ufo/glyphs/a.glif b/tests/otfautohint_data/input/dummy/defaultlayer.ufo/glyphs/a.glif index 682208a01..b7424b4c2 100644 --- a/tests/otfautohint_data/input/dummy/defaultlayer.ufo/glyphs/a.glif +++ b/tests/otfautohint_data/input/dummy/defaultlayer.ufo/glyphs/a.glif @@ -58,7 +58,7 @@ hstem -12 66 hstem 430 68 vstem 81 80 - vstem 444.5 70.5 + vstem 444 71 @@ -69,7 +69,7 @@ hstem 21 -21 hstem 430 68 vstem 81 80 - vstem 444.5 70.5 + vstem 444 71 diff --git a/tests/otfautohint_data/input/dummy/defaultlayer.ufo/glyphs/asterisk.glif b/tests/otfautohint_data/input/dummy/defaultlayer.ufo/glyphs/asterisk.glif index 2fc333aeb..49de3424b 100644 --- a/tests/otfautohint_data/input/dummy/defaultlayer.ufo/glyphs/asterisk.glif +++ b/tests/otfautohint_data/input/dummy/defaultlayer.ufo/glyphs/asterisk.glif @@ -33,7 +33,7 @@ stems hstem 111 445 - vstem 271.5 57 + vstem 272 56 diff --git a/tests/otfautohint_data/input/dummy/defaultlayer.ufo/glyphs/at.glif b/tests/otfautohint_data/input/dummy/defaultlayer.ufo/glyphs/at.glif index 4a5d66d9e..f5fdd4f03 100644 --- a/tests/otfautohint_data/input/dummy/defaultlayer.ufo/glyphs/at.glif +++ b/tests/otfautohint_data/input/dummy/defaultlayer.ufo/glyphs/at.glif @@ -86,7 +86,7 @@ hstem 580 55 vstem 49 63 vstem 224 66 - vstem 492.5 53.5 + vstem 492 54 diff --git a/tests/otfautohint_data/input/dummy/defaultlayer.ufo/glyphs/b.glif b/tests/otfautohint_data/input/dummy/defaultlayer.ufo/glyphs/b.glif index d0f54b1d0..ba4d697b4 100644 --- a/tests/otfautohint_data/input/dummy/defaultlayer.ufo/glyphs/b.glif +++ b/tests/otfautohint_data/input/dummy/defaultlayer.ufo/glyphs/b.glif @@ -79,7 +79,7 @@ hstem 21 -21 hstem 429 69 hstem 712 -20 - vstem 93 69.5 + vstem 93 69 vstem 455 85 diff --git a/tests/otfautohint_data/input/dummy/defaultlayer.ufo/glyphs/d.glif b/tests/otfautohint_data/input/dummy/defaultlayer.ufo/glyphs/d.glif index c20d39229..2eb29207d 100644 --- a/tests/otfautohint_data/input/dummy/defaultlayer.ufo/glyphs/d.glif +++ b/tests/otfautohint_data/input/dummy/defaultlayer.ufo/glyphs/d.glif @@ -56,7 +56,7 @@ hstem 429 69 hstem 712 -20 vstem 60 85 - vstem 435.5 71.5 + vstem 436 71 @@ -68,7 +68,7 @@ hstem 429 69 hstem 712 -20 vstem 60 85 - vstem 435.5 71.5 + vstem 436 71 diff --git a/tests/otfautohint_data/input/dummy/defaultlayer.ufo/glyphs/n.glif b/tests/otfautohint_data/input/dummy/defaultlayer.ufo/glyphs/n.glif index bbddfe97e..ca6ade502 100644 --- a/tests/otfautohint_data/input/dummy/defaultlayer.ufo/glyphs/n.glif +++ b/tests/otfautohint_data/input/dummy/defaultlayer.ufo/glyphs/n.glif @@ -51,7 +51,7 @@ hstem 21 -21 hstem 427 71 - vstem 93 71.5 + vstem 93 71 vstem 441 82 @@ -62,7 +62,7 @@ hstem 21 -21 hstem 486 -20 - vstem 93 71.5 + vstem 93 71 vstem 441 82 diff --git a/tests/otfautohint_data/input/dummy/defaultlayer.ufo/glyphs/p.glif b/tests/otfautohint_data/input/dummy/defaultlayer.ufo/glyphs/p.glif index a5a5b8ceb..76df5aabf 100644 --- a/tests/otfautohint_data/input/dummy/defaultlayer.ufo/glyphs/p.glif +++ b/tests/otfautohint_data/input/dummy/defaultlayer.ufo/glyphs/p.glif @@ -67,7 +67,7 @@ hstem -184 -21 hstem -12 69 hstem 429 69 - vstem 93 71.5 + vstem 93 71 vstem 455 85 @@ -79,7 +79,7 @@ hstem -184 -21 hstem -12 69 hstem 486 -20 - vstem 93 71.5 + vstem 93 71 vstem 455 85 diff --git a/tests/otfautohint_data/input/dummy/defaultlayer.ufo/glyphs/q.glif b/tests/otfautohint_data/input/dummy/defaultlayer.ufo/glyphs/q.glif index 6d7b34a41..a18d8ae45 100644 --- a/tests/otfautohint_data/input/dummy/defaultlayer.ufo/glyphs/q.glif +++ b/tests/otfautohint_data/input/dummy/defaultlayer.ufo/glyphs/q.glif @@ -68,7 +68,7 @@ hstem -12 69 hstem 486 -20 vstem 60 85 - vstem 437.5 69.5 + vstem 438 69 diff --git a/tests/otfautohint_data/input/dummy/defaultlayer.ufo/glyphs/r.glif b/tests/otfautohint_data/input/dummy/defaultlayer.ufo/glyphs/r.glif index 7ceca3cf7..ab35f9880 100644 --- a/tests/otfautohint_data/input/dummy/defaultlayer.ufo/glyphs/r.glif +++ b/tests/otfautohint_data/input/dummy/defaultlayer.ufo/glyphs/r.glif @@ -48,7 +48,7 @@ hstem 21 -21 hstem 424 74 - vstem 146 71.5 + vstem 146 72 @@ -58,7 +58,7 @@ hstem 21 -21 hstem 486 -20 - vstem 146 71.5 + vstem 146 72 diff --git a/tests/otfautohint_data/input/dummy/defaultlayer.ufo/glyphs/t.glif b/tests/otfautohint_data/input/dummy/defaultlayer.ufo/glyphs/t.glif index 98faabb96..ab344aa78 100644 --- a/tests/otfautohint_data/input/dummy/defaultlayer.ufo/glyphs/t.glif +++ b/tests/otfautohint_data/input/dummy/defaultlayer.ufo/glyphs/t.glif @@ -53,7 +53,7 @@ hstem -12 67 hstem 419 67 - vstem 214.5 73.5 + vstem 214 74 diff --git a/tests/otfautohint_data/input/dummy/defaultlayer.ufo/glyphs/u.glif b/tests/otfautohint_data/input/dummy/defaultlayer.ufo/glyphs/u.glif index 19a9bb92e..6e3657dc5 100644 --- a/tests/otfautohint_data/input/dummy/defaultlayer.ufo/glyphs/u.glif +++ b/tests/otfautohint_data/input/dummy/defaultlayer.ufo/glyphs/u.glif @@ -41,7 +41,7 @@ hstem -12 71 hstem 486 -20 vstem 77 83 - vstem 434.5 70.5 + vstem 434 71 @@ -52,7 +52,7 @@ hstem 21 -21 hstem 486 -20 vstem 77 83 - vstem 434.5 70.5 + vstem 434 71 diff --git a/tests/otfautohint_data/input/dummy/font.cff b/tests/otfautohint_data/input/dummy/font.cff index c0d68f2fbda82eb9f472f7f564b1590525371960..2e433bbf024dfb116eb3f9ec6d18fbfddd2e514d 100644 GIT binary patch delta 308 zcmV-40n7fnM&(72A|@yJ8vytm0r(vZ0QepQj0^#j`;PeJ`JDy#o)7n~5VIU2y%P7Z zkxK4=Mg)BXy#&_<0|g!hq6OLpGzPc_4F`A!^9U;l&IwBioC*dCFbZ4>hYI-%tPA)I zbPUc784Xqqiw*k@I1X_Rw+{9X84raI-Vi(xjS&?Qa1rGa4-#4uk`n|IVH2Vg)f560 z9u!LyeH51!7ZsKj?iOwq+ZQt!G#G~%(-}l88HO3k8blhJ8u%M{8}%GP9J3u29dI40 z9wHun9^D@hAE+P0AXgxqAi*Hrv*Q5+1OxY^!?WxK2nPaH!L$Ahl?ehw(vzJQeFD%% zlOz|}0z}fY2N+ER0@6g2UL3Xp(nOOU9fATz(37eibOO^ulPDg$0zuW2?H*(TMAEZc GAKwEeC~21f delta 393 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 T3V;DK0ssKB(J{^elU*}w6rRX1 delta 11874 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 diff --git a/tests/otfautohint_data/input/dummy/font.ps b/tests/otfautohint_data/input/dummy/font.ps index 7f6e4d12ed6fffe8ed62331c55f61fc12c007564..6dc4669512077473f52509d02ca6b76c2fa513a3 100644 GIT binary patch delta 37539 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 hstem 14 -21 - vstem 100.5 41 + vstem 100 42 diff --git a/tests/otfautohint_data/input/dummy/hashmap_unnormalized_floats.ufo/glyphs.com.adobe.type.processedglyphs/exclamdown.glif b/tests/otfautohint_data/input/dummy/hashmap_unnormalized_floats.ufo/glyphs.com.adobe.type.processedglyphs/exclamdown.glif index 4f2fc2141..3195cb470 100644 --- a/tests/otfautohint_data/input/dummy/hashmap_unnormalized_floats.ufo/glyphs.com.adobe.type.processedglyphs/exclamdown.glif +++ b/tests/otfautohint_data/input/dummy/hashmap_unnormalized_floats.ufo/glyphs.com.adobe.type.processedglyphs/exclamdown.glif @@ -27,7 +27,7 @@ stems hstem 487 -20 - vstem 87.5 41 + vstem 88 40 diff --git a/tests/otfautohint_data/input/vf_tests/CJKSparseVar.subset.hinted.otf b/tests/otfautohint_data/input/vf_tests/CJKSparseVar.subset.hinted.otf index dc60fa0b27f1cafc810cb504df8783eef5b0d0bd..7f5d95e9f80d5623247a9bd83fec6b8eb0d95eb7 100644 GIT binary patch delta 308 zcmZoL`(kS09}?ovAjHVPz`~&5?B-@9{b4;j0|WO01_s`R?!lo>E@eKY3=EPk3=9kk z9$}6_LN%qjKz_{~&kfLLiGl@(PgP2m>lot56pQ^6voo-ic+2MZMKU z-V6*<8WTI@c|(ALSsAH`DRR;G%O`G0wmbk7P$|nTso=QIa2}}Y36L+q0CW)$H}AU7 zQ6JB5^Ob>_`2|pf;fDF|y&(Fr-u#5k0gNGBJUowhRAqQGcvLpjo=`g=X!g?a^qu3ib+T=-q|x8Qfa%|<*AdCb_j1!l?cHV6TUexW`Y-g!d5`?_UV b-MZPjdANJHdbrWJ-Q8?JD>ny7ZeRoezGPMa delta 320 zcmexj+F)kk9}?ovAjHVPz`~&5?B-_Fx%}}*1_tg03=F&*+=D}%T*`b(85kr37#J87 zJi;7Q>4yapD}SuvgH||fJ#|zNd?DshVwvGAAo!T2B3?8xcOPv z+IR8%HeVT-nL(y8+%W&W7ewD*IK6Rm0AmOjAKw!mRau~Gb9q!g2`-wvfjdz?m64T& zmFpAFr}}$6--UVwgsxr*+FbZu^ta%DhROzp&AL1fd2BiO#pZzYbqj&1IYNCP-ddsG deceC?t6Mi)HxG9YR}VLaKzBFWW*5l~i~v+STK)h4 From 1a2163580fce562c933c061838236ef6ba453be3 Mon Sep 17 00:00:00 2001 From: Kamile Demir Date: Mon, 4 Nov 2024 15:03:36 -0800 Subject: [PATCH 31/56] update build_wheels to build on python v3.11, update cibuildwheel to v2.21.1, manylinux to 2.28, env flags --- .github/workflows/build_wheels.yml | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/.github/workflows/build_wheels.yml b/.github/workflows/build_wheels.yml index 6fd149196..b80b86b64 100644 --- a/.github/workflows/build_wheels.yml +++ b/.github/workflows/build_wheels.yml @@ -31,36 +31,38 @@ jobs: with: fetch-depth: 0 # unshallow fetch for setuptools-scm - - name: Install Python 3.9 - uses: actions/setup-python@v4 + - name: Install Python 3.11 + uses: actions/setup-python@v5 with: - python-version: '3.9' + python-version: '3.11' - name: Build wheel (only macosx_universal2) if: matrix.os == 'macos-latest' - uses: pypa/cibuildwheel@v2.16.1 + uses: pypa/cibuildwheel@v2.21.1 with: output-dir: dist env: - CIBW_BUILD: "cp39-*" + CIBW_BUILD: "cp311-*" CIBW_ARCHS_MACOS: universal2 CIBW_ENVIRONMENT_MACOS: "CFLAGS='-arch arm64 -arch x86_64 -I/usr/include/libxml2' CXXFLAGS='-arch arm64 -arch x86_64' LDFLAGS='-arch arm64 -arch x86_64'" - name: Build wheel (except macosx_universal2) - uses: pypa/cibuildwheel@v2.16.1 + uses: pypa/cibuildwheel@v2.21.1 with: output-dir: dist env: - CIBW_BUILD: "cp39-*" + CIBW_BUILD: "cp311-*" CIBW_ARCHS_MACOS: x86_64 CIBW_ARCHS_WINDOWS: AMD64 CIBW_ARCHS_LINUX: x86_64 - CIBW_MANYLINUX_X86_64_IMAGE: manylinux2014 + CIBW_MANYLINUX_X86_64_IMAGE: manylinux_2_28 CIBW_SKIP: "*musllinux*" # CIBW_BEFORE_ALL_LINUX: "yum install -y libuuid-devel && yum install -y libxml2-devel" # CIBW_ENVIRONMENT_LINUX: "CFLAGS='-I/usr/include/libxml2'" - CIBW_BEFORE_ALL_LINUX: "yum install -y libuuid-devel" - CIBW_ENVIRONMENT: "FORCE_BUILD_LIBXML2=ON" + # CIBW_BEFORE_ALL_LINUX: "yum install -y libuuid-devel" + CIBW_ENVIRONMENT_MACOS: "CFLAGS='-I/usr/include/libxml2'" + CIBW_ENVIRONMENT_LINUX: "FORCE_BUILD_LIBXML2=ON" + CIBW_ENVIRONMENT_WINDOWS: "FORCE_BUILD_LIBXML2=ON" - name: Build sdist (Ubuntu only) if: matrix.os == 'ubuntu-latest' From 437fafe9b96a8d890c11064c7f0ab8f5f128895d Mon Sep 17 00:00:00 2001 From: Kamile Demir Date: Mon, 4 Nov 2024 15:16:12 -0800 Subject: [PATCH 32/56] [build_wheels.yml] Revert back to Python 3.9 --- .github/workflows/build_wheels.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build_wheels.yml b/.github/workflows/build_wheels.yml index b80b86b64..5bdfcbeac 100644 --- a/.github/workflows/build_wheels.yml +++ b/.github/workflows/build_wheels.yml @@ -31,10 +31,10 @@ jobs: with: fetch-depth: 0 # unshallow fetch for setuptools-scm - - name: Install Python 3.11 - uses: actions/setup-python@v5 + - name: Install Python 3.9 + uses: actions/setup-python@v4 with: - python-version: '3.11' + python-version: '3.9' - name: Build wheel (only macosx_universal2) if: matrix.os == 'macos-latest' @@ -42,7 +42,7 @@ jobs: with: output-dir: dist env: - CIBW_BUILD: "cp311-*" + CIBW_BUILD: "cp39-*" CIBW_ARCHS_MACOS: universal2 CIBW_ENVIRONMENT_MACOS: "CFLAGS='-arch arm64 -arch x86_64 -I/usr/include/libxml2' CXXFLAGS='-arch arm64 -arch x86_64' LDFLAGS='-arch arm64 -arch x86_64'" @@ -51,7 +51,7 @@ jobs: with: output-dir: dist env: - CIBW_BUILD: "cp311-*" + CIBW_BUILD: "cp39-*" CIBW_ARCHS_MACOS: x86_64 CIBW_ARCHS_WINDOWS: AMD64 CIBW_ARCHS_LINUX: x86_64 From c22ca68023ac5cb4b2851b6253d81a5d2443c085 Mon Sep 17 00:00:00 2001 From: Kamile Demir Date: Mon, 4 Nov 2024 15:28:48 -0800 Subject: [PATCH 33/56] Bump setuptools_scm to v8.0.4 --- requirements-dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-dev.txt b/requirements-dev.txt index 4a2bf203f..c6b293b75 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -9,5 +9,5 @@ pytest-cov>=2.6.1 pytest-xdist>=2.5.0 scikit-build>=0.11.1 setuptools>=40.8.0 -setuptools_scm>=3.2.0 +setuptools_scm==8.0.4 wheel>=0.33.1 From a38b65d48dca725f60fdc40c002b2813fdfd4c02 Mon Sep 17 00:00:00 2001 From: Kamile Demir Date: Mon, 4 Nov 2024 15:33:16 -0800 Subject: [PATCH 34/56] update setuptools_scm to just be >= v7.0.0, add tools.setuptools_scm to pyproject.toml --- pyproject.toml | 2 ++ requirements-dev.txt | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index df9007fe4..23d18ddb8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -8,3 +8,5 @@ requires = [ "ninja" ] build-backend = "setuptools.build_meta" + +[tool.setuptools_scm] diff --git a/requirements-dev.txt b/requirements-dev.txt index c6b293b75..078a91319 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -9,5 +9,5 @@ pytest-cov>=2.6.1 pytest-xdist>=2.5.0 scikit-build>=0.11.1 setuptools>=40.8.0 -setuptools_scm==8.0.4 +setuptools_scm>=7.0.0 wheel>=0.33.1 From dae25f947cd43214a016ae75a6f27d850bbc7171 Mon Sep 17 00:00:00 2001 From: Skef Iterum Date: Mon, 4 Nov 2024 15:44:49 -0800 Subject: [PATCH 35/56] Force architecture on non-universal MacOS build --- .github/workflows/build_wheels.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build_wheels.yml b/.github/workflows/build_wheels.yml index 5bdfcbeac..5fdefd9fe 100644 --- a/.github/workflows/build_wheels.yml +++ b/.github/workflows/build_wheels.yml @@ -60,7 +60,7 @@ jobs: # CIBW_BEFORE_ALL_LINUX: "yum install -y libuuid-devel && yum install -y libxml2-devel" # CIBW_ENVIRONMENT_LINUX: "CFLAGS='-I/usr/include/libxml2'" # CIBW_BEFORE_ALL_LINUX: "yum install -y libuuid-devel" - CIBW_ENVIRONMENT_MACOS: "CFLAGS='-I/usr/include/libxml2'" + CIBW_ENVIRONMENT_MACOS: "CFLAGS='-arch x86_64 -I/usr/include/libxml2' LDFLAGS='-arch x86_64'" CIBW_ENVIRONMENT_LINUX: "FORCE_BUILD_LIBXML2=ON" CIBW_ENVIRONMENT_WINDOWS: "FORCE_BUILD_LIBXML2=ON" From 0e026f16fa910df0958d8e3498ebf0eeda1f4280 Mon Sep 17 00:00:00 2001 From: Skef Iterum Date: Mon, 4 Nov 2024 15:59:59 -0800 Subject: [PATCH 36/56] Install uuid-devel for manylinux --- .github/workflows/build_wheels.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build_wheels.yml b/.github/workflows/build_wheels.yml index 5fdefd9fe..dcc521ade 100644 --- a/.github/workflows/build_wheels.yml +++ b/.github/workflows/build_wheels.yml @@ -60,6 +60,7 @@ jobs: # CIBW_BEFORE_ALL_LINUX: "yum install -y libuuid-devel && yum install -y libxml2-devel" # CIBW_ENVIRONMENT_LINUX: "CFLAGS='-I/usr/include/libxml2'" # CIBW_BEFORE_ALL_LINUX: "yum install -y libuuid-devel" + CIBW_BEFORE_ALL_LINUX: "dnf install uuid-devel" CIBW_ENVIRONMENT_MACOS: "CFLAGS='-arch x86_64 -I/usr/include/libxml2' LDFLAGS='-arch x86_64'" CIBW_ENVIRONMENT_LINUX: "FORCE_BUILD_LIBXML2=ON" CIBW_ENVIRONMENT_WINDOWS: "FORCE_BUILD_LIBXML2=ON" From 381eaafe2b16d2a766fc2004b939bb52ff3ed038 Mon Sep 17 00:00:00 2001 From: Skef Iterum Date: Tue, 5 Nov 2024 12:17:43 -0800 Subject: [PATCH 37/56] Pass CMAKE_OSX_ARCHITECTURES to antlr 4 sub-build --- .github/workflows/build_wheels.yml | 2 +- cmake/ExternalAntlr4Cpp.cmake | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build_wheels.yml b/.github/workflows/build_wheels.yml index dcc521ade..3e3e7f27a 100644 --- a/.github/workflows/build_wheels.yml +++ b/.github/workflows/build_wheels.yml @@ -61,7 +61,7 @@ jobs: # CIBW_ENVIRONMENT_LINUX: "CFLAGS='-I/usr/include/libxml2'" # CIBW_BEFORE_ALL_LINUX: "yum install -y libuuid-devel" CIBW_BEFORE_ALL_LINUX: "dnf install uuid-devel" - CIBW_ENVIRONMENT_MACOS: "CFLAGS='-arch x86_64 -I/usr/include/libxml2' LDFLAGS='-arch x86_64'" + CIBW_ENVIRONMENT_MACOS: "CFLAGS='-I/usr/include/libxml2'" CIBW_ENVIRONMENT_LINUX: "FORCE_BUILD_LIBXML2=ON" CIBW_ENVIRONMENT_WINDOWS: "FORCE_BUILD_LIBXML2=ON" diff --git a/cmake/ExternalAntlr4Cpp.cmake b/cmake/ExternalAntlr4Cpp.cmake index 5ec789792..086089732 100644 --- a/cmake/ExternalAntlr4Cpp.cmake +++ b/cmake/ExternalAntlr4Cpp.cmake @@ -89,6 +89,7 @@ if(ANTLR4_ZIP_REPOSITORY) CMAKE_CACHE_ARGS -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} -DWITH_STATIC_CRT:BOOL=${ANTLR4_WITH_STATIC_CRT} + -DCMAKE_OSX_ARCHITECTURES:STRING=${CMAKE_OSX_ARCHITECTURES} # -DCMAKE_CXX_STANDARD:STRING=17 # if desired, compile the runtime with a different C++ standard # -DCMAKE_CXX_STANDARD:STRING=${CMAKE_CXX_STANDARD} # alternatively, compile the runtime with the same C++ standard as the outer project INSTALL_COMMAND "" @@ -107,6 +108,7 @@ else() CMAKE_CACHE_ARGS -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} -DWITH_STATIC_CRT:BOOL=${ANTLR4_WITH_STATIC_CRT} + -DCMAKE_OSX_ARCHITECTURES:STRING=${CMAKE_OSX_ARCHITECTURES} # -DCMAKE_CXX_STANDARD:STRING=17 # if desired, compile the runtime with a different C++ standard # -DCMAKE_CXX_STANDARD:STRING=${CMAKE_CXX_STANDARD} # alternatively, compile the runtime with the same C++ standard as the outer project INSTALL_COMMAND "" From 720764d480d4c6f77996a3bad4ab613479727eeb Mon Sep 17 00:00:00 2001 From: Skef Iterum Date: Tue, 5 Nov 2024 12:38:10 -0800 Subject: [PATCH 38/56] Use -y flag for dnf linux buildwheels dependency --- .github/workflows/build_wheels.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build_wheels.yml b/.github/workflows/build_wheels.yml index 3e3e7f27a..99fcc646f 100644 --- a/.github/workflows/build_wheels.yml +++ b/.github/workflows/build_wheels.yml @@ -60,7 +60,7 @@ jobs: # CIBW_BEFORE_ALL_LINUX: "yum install -y libuuid-devel && yum install -y libxml2-devel" # CIBW_ENVIRONMENT_LINUX: "CFLAGS='-I/usr/include/libxml2'" # CIBW_BEFORE_ALL_LINUX: "yum install -y libuuid-devel" - CIBW_BEFORE_ALL_LINUX: "dnf install uuid-devel" + CIBW_BEFORE_ALL_LINUX: "dnf -y install uuid-devel" CIBW_ENVIRONMENT_MACOS: "CFLAGS='-I/usr/include/libxml2'" CIBW_ENVIRONMENT_LINUX: "FORCE_BUILD_LIBXML2=ON" CIBW_ENVIRONMENT_WINDOWS: "FORCE_BUILD_LIBXML2=ON" From 84efa6018fe7534fbf3e8cf89b61788a0cc656b9 Mon Sep 17 00:00:00 2001 From: Skef Iterum Date: Tue, 5 Nov 2024 13:15:51 -0800 Subject: [PATCH 39/56] Upgrade Antlr4 version to work around uuid problem --- .github/workflows/build_wheels.yml | 2 +- CMakeLists.txt | 4 +- c/makeotf/lib/hotconv/BuildGrammar.py | 2 +- c/makeotf/lib/hotconv/FeatLexer.cpp | 2179 ++++++----------- c/makeotf/lib/hotconv/FeatLexer.h | 50 +- c/makeotf/lib/hotconv/FeatLexer.interp | 2 +- c/makeotf/lib/hotconv/FeatParser.cpp | 2157 ++++++---------- c/makeotf/lib/hotconv/FeatParser.h | 264 +- c/makeotf/lib/hotconv/FeatParser.interp | 2 +- .../lib/hotconv/FeatParserBaseVisitor.cpp | 2 +- c/makeotf/lib/hotconv/FeatParserBaseVisitor.h | 224 +- c/makeotf/lib/hotconv/FeatParserVisitor.cpp | 2 +- c/makeotf/lib/hotconv/FeatParserVisitor.h | 224 +- 13 files changed, 1906 insertions(+), 3208 deletions(-) diff --git a/.github/workflows/build_wheels.yml b/.github/workflows/build_wheels.yml index 99fcc646f..31f334890 100644 --- a/.github/workflows/build_wheels.yml +++ b/.github/workflows/build_wheels.yml @@ -60,7 +60,7 @@ jobs: # CIBW_BEFORE_ALL_LINUX: "yum install -y libuuid-devel && yum install -y libxml2-devel" # CIBW_ENVIRONMENT_LINUX: "CFLAGS='-I/usr/include/libxml2'" # CIBW_BEFORE_ALL_LINUX: "yum install -y libuuid-devel" - CIBW_BEFORE_ALL_LINUX: "dnf -y install uuid-devel" + # CIBW_BEFORE_ALL_LINUX: "dnf -y install uuid-devel" CIBW_ENVIRONMENT_MACOS: "CFLAGS='-I/usr/include/libxml2'" CIBW_ENVIRONMENT_LINUX: "FORCE_BUILD_LIBXML2=ON" CIBW_ENVIRONMENT_WINDOWS: "FORCE_BUILD_LIBXML2=ON" diff --git a/CMakeLists.txt b/CMakeLists.txt index 47f8a6bb8..49b959355 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,7 +18,7 @@ if (NOT CMAKE_BUILD_TYPE) endif() message(STATUS "Build type is ${CMAKE_BUILD_TYPE}") -set(CMAKE_CXX_STANDARD 11) +set(CMAKE_CXX_STANDARD 17) # scikit-build if(SKBUILD) @@ -39,7 +39,7 @@ list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake) add_definitions(-DANTLR4CPP_STATIC) set(ANTLR4_WITH_STATIC_CRT OFF) # 4.9.3 is the latest ANTLR4 version -set(ANTLR4_TAG tags/4.9.3) +set(ANTLR4_TAG tags/4.13.2) include(ExternalAntlr4Cpp) diff --git a/c/makeotf/lib/hotconv/BuildGrammar.py b/c/makeotf/lib/hotconv/BuildGrammar.py index b3b46efe1..faf47872a 100644 --- a/c/makeotf/lib/hotconv/BuildGrammar.py +++ b/c/makeotf/lib/hotconv/BuildGrammar.py @@ -7,7 +7,7 @@ import os antlr_program = "antlr4" -antlr_version = "4.9.3" +antlr_version = "4.13.2" antlr_args = ['-no-listener', '-Dlanguage=Cpp'] diff --git a/c/makeotf/lib/hotconv/FeatLexer.cpp b/c/makeotf/lib/hotconv/FeatLexer.cpp index 5a3cae68b..8f11b5232 100644 --- a/c/makeotf/lib/hotconv/FeatLexer.cpp +++ b/c/makeotf/lib/hotconv/FeatLexer.cpp @@ -1,5 +1,5 @@ -// Generated from FeatLexer.g4 by ANTLR 4.9.3 +// Generated from FeatLexer.g4 by ANTLR 4.13.2 #include "FeatLexer.h" @@ -8,8 +8,783 @@ using namespace antlr4; + +using namespace antlr4; + +namespace { + +struct FeatLexerStaticData final { + FeatLexerStaticData(std::vector ruleNames, + std::vector channelNames, + std::vector modeNames, + std::vector literalNames, + std::vector symbolicNames) + : ruleNames(std::move(ruleNames)), channelNames(std::move(channelNames)), + modeNames(std::move(modeNames)), literalNames(std::move(literalNames)), + symbolicNames(std::move(symbolicNames)), + vocabulary(this->literalNames, this->symbolicNames) {} + + FeatLexerStaticData(const FeatLexerStaticData&) = delete; + FeatLexerStaticData(FeatLexerStaticData&&) = delete; + FeatLexerStaticData& operator=(const FeatLexerStaticData&) = delete; + FeatLexerStaticData& operator=(FeatLexerStaticData&&) = delete; + + std::vector decisionToDFA; + antlr4::atn::PredictionContextCache sharedContextCache; + const std::vector ruleNames; + const std::vector channelNames; + const std::vector modeNames; + const std::vector literalNames; + const std::vector symbolicNames; + const antlr4::dfa::Vocabulary vocabulary; + antlr4::atn::SerializedATNView serializedATN; + std::unique_ptr atn; +}; + +::antlr4::internal::OnceFlag featlexerLexerOnceFlag; +#if ANTLR4_USE_THREAD_LOCAL_CACHE +static thread_local +#endif +std::unique_ptr featlexerLexerStaticData = nullptr; + +void featlexerLexerInitialize() { +#if ANTLR4_USE_THREAD_LOCAL_CACHE + if (featlexerLexerStaticData != nullptr) { + return; + } +#else + assert(featlexerLexerStaticData == nullptr); +#endif + auto staticData = std::make_unique( + std::vector{ + "ANON", "ANON_v", "COMMENT", "WHITESPACE", "INCLUDE", "FEATURE", "TABLE", + "SCRIPT", "LANGUAGE", "LANGSYS", "SUBTABLE", "LOOKUP", "LOOKUPFLAG", + "NOTDEF", "RIGHT_TO_LEFT", "IGNORE_BASE_GLYPHS", "IGNORE_LIGATURES", + "IGNORE_MARKS", "USE_MARK_FILTERING_SET", "MARK_ATTACHMENT_TYPE", + "EXCLUDE_DFLT", "INCLUDE_DFLT", "EXCLUDE_dflt", "INCLUDE_dflt", "USE_EXTENSION", + "BEGINVALUE", "ENDVALUE", "ENUMERATE", "ENUMERATE_v", "EXCEPT", "IGNORE", + "SUBSTITUTE", "SUBSTITUTE_v", "REVERSE", "REVERSE_v", "BY", "FROM", + "POSITION", "POSITION_v", "PARAMETERS", "FEATURE_NAMES", "CV_PARAMETERS", + "CV_UI_LABEL", "CV_TOOLTIP", "CV_SAMPLE_TEXT", "CV_PARAM_LABEL", "CV_CHARACTER", + "SIZEMENUNAME", "CONTOURPOINT", "ANCHOR", "ANCHOR_DEF", "VALUE_RECORD_DEF", + "MARK", "MARK_CLASS", "CURSIVE", "MARKBASE", "MARKLIG", "MARKLIG_v", + "LIG_COMPONENT", "KNULL", "BASE", "HA_BTL", "VA_BTL", "HA_BSL", "VA_BSL", + "GDEF", "GLYPH_CLASS_DEF", "ATTACH", "LIG_CARET_BY_POS", "LIG_CARET_BY_IDX", + "HEAD", "FONT_REVISION", "HHEA", "ASCENDER", "DESCENDER", "LINE_GAP", + "CARET_OFFSET", "NAME", "NAMEID", "OS_2", "FS_TYPE", "FS_TYPE_v", + "OS2_LOWER_OP_SIZE", "OS2_UPPER_OP_SIZE", "PANOSE", "TYPO_ASCENDER", + "TYPO_DESCENDER", "TYPO_LINE_GAP", "WIN_ASCENT", "WIN_DESCENT", "X_HEIGHT", + "CAP_HEIGHT", "WEIGHT_CLASS", "WIDTH_CLASS", "VENDOR", "UNICODE_RANGE", + "CODE_PAGE_RANGE", "FAMILY_CLASS", "STAT", "ELIDED_FALLBACK_NAME", + "ELIDED_FALLBACK_NAME_ID", "DESIGN_AXIS", "AXIS_VALUE", "FLAG", "LOCATION", + "AXIS_EAVN", "AXIS_OSFA", "VHEA", "VERT_TYPO_ASCENDER", "VERT_TYPO_DESCENDER", + "VERT_TYPO_LINE_GAP", "VMTX", "VERT_ORIGIN_Y", "VERT_ADVANCE_Y", "LCBRACE", + "RCBRACE", "LBRACKET", "RBRACKET", "HYPHEN", "SEMI", "EQUALS", "MARKER", + "COMMA", "QUOTE", "GNST", "LCHR", "GCCHR", "GCLASS", "CID", "GNCHR", + "ESCGNAME", "NAMELABEL", "EXTNAME", "POINTNUM", "NUMEXT", "NUMOCT", + "NUM", "TSTART", "TCHR", "CATCHTAG", "A_WHITESPACE", "A_LABEL", "A_LBRACE", + "A_CLOSE", "A_LINE", "I_WHITESPACE", "I_RPAREN", "IFILE", "I_LPAREN", + "STRVAL", "EQUOTE" + }, + std::vector{ + "DEFAULT_TOKEN_CHANNEL", "HIDDEN" + }, + std::vector{ + "DEFAULT_MODE", "Anon", "AnonContent", "Include", "Ifile", "String" + }, + std::vector{ + "", "'anon'", "'anonymous'", "", "", "'include'", "'feature'", "'table'", + "'script'", "'language'", "'languagesystem'", "'subtable'", "'lookup'", + "'lookupflag'", "'.notdef'", "'RightToLeft'", "'IgnoreBaseGlyphs'", + "'IgnoreLigatures'", "'IgnoreMarks'", "'UseMarkFilteringSet'", "'MarkAttachmentType'", + "'excludeDFLT'", "'includeDFLT'", "'exclude_dflt'", "'include_dflt'", + "'useExtension'", "'<'", "'>'", "'enumerate'", "'enum'", "'except'", + "'ignore'", "'substitute'", "'sub'", "'reversesub'", "'rsub'", "'by'", + "'from'", "'position'", "'pos'", "'parameters'", "'featureNames'", + "'cvParameters'", "'FeatUILabelNameID'", "'FeatUITooltipTextNameID'", + "'SampleTextNameID'", "'ParamUILabelNameID'", "'Character'", "'sizemenuname'", + "'contourpoint'", "'anchor'", "'anchorDef'", "'valueRecordDef'", "'mark'", + "'markClass'", "'cursive'", "'base'", "'ligature'", "'lig'", "'ligComponent'", + "'NULL'", "'BASE'", "'HorizAxis.BaseTagList'", "'VertAxis.BaseTagList'", + "'HorizAxis.BaseScriptList'", "'VertAxis.BaseScriptList'", "'GDEF'", + "'GlyphClassDef'", "'Attach'", "'LigatureCaretByPos'", "'LigatureCaretByIndex'", + "'head'", "'FontRevision'", "'hhea'", "'Ascender'", "'Descender'", + "'LineGap'", "'CaretOffset'", "'name'", "'nameid'", "'OS/2'", "'FSType'", + "'fsType'", "'LowerOpSize'", "'UpperOpSize'", "'Panose'", "'TypoAscender'", + "'TypoDescender'", "'TypoLineGap'", "'winAscent'", "'winDescent'", + "'XHeight'", "'CapHeight'", "'WeightClass'", "'WidthClass'", "'Vendor'", + "'UnicodeRange'", "'CodePageRange'", "'FamilyClass'", "'STAT'", "'ElidedFallbackName'", + "'ElidedFallbackNameID'", "'DesignAxis'", "'AxisValue'", "'flag'", + "'location'", "'ElidableAxisValueName'", "'OlderSiblingFontAttribute'", + "'vhea'", "'VertTypoAscender'", "'VertTypoDescender'", "'VertTypoLineGap'", + "'vmtx'", "'VertOriginY'", "'VertAdvanceY'", "", "'}'", "'['", "']'", + "'-'", "';'", "'='", "'''", "','", "", "", "", "", "", "", "", "", + "", "", "", "", "", "", "", "", "", "'('", "", "')'" + }, + std::vector{ + "", "ANON", "ANON_v", "COMMENT", "WHITESPACE", "INCLUDE", "FEATURE", + "TABLE", "SCRIPT", "LANGUAGE", "LANGSYS", "SUBTABLE", "LOOKUP", "LOOKUPFLAG", + "NOTDEF", "RIGHT_TO_LEFT", "IGNORE_BASE_GLYPHS", "IGNORE_LIGATURES", + "IGNORE_MARKS", "USE_MARK_FILTERING_SET", "MARK_ATTACHMENT_TYPE", + "EXCLUDE_DFLT", "INCLUDE_DFLT", "EXCLUDE_dflt", "INCLUDE_dflt", "USE_EXTENSION", + "BEGINVALUE", "ENDVALUE", "ENUMERATE", "ENUMERATE_v", "EXCEPT", "IGNORE", + "SUBSTITUTE", "SUBSTITUTE_v", "REVERSE", "REVERSE_v", "BY", "FROM", + "POSITION", "POSITION_v", "PARAMETERS", "FEATURE_NAMES", "CV_PARAMETERS", + "CV_UI_LABEL", "CV_TOOLTIP", "CV_SAMPLE_TEXT", "CV_PARAM_LABEL", "CV_CHARACTER", + "SIZEMENUNAME", "CONTOURPOINT", "ANCHOR", "ANCHOR_DEF", "VALUE_RECORD_DEF", + "MARK", "MARK_CLASS", "CURSIVE", "MARKBASE", "MARKLIG", "MARKLIG_v", + "LIG_COMPONENT", "KNULL", "BASE", "HA_BTL", "VA_BTL", "HA_BSL", "VA_BSL", + "GDEF", "GLYPH_CLASS_DEF", "ATTACH", "LIG_CARET_BY_POS", "LIG_CARET_BY_IDX", + "HEAD", "FONT_REVISION", "HHEA", "ASCENDER", "DESCENDER", "LINE_GAP", + "CARET_OFFSET", "NAME", "NAMEID", "OS_2", "FS_TYPE", "FS_TYPE_v", + "OS2_LOWER_OP_SIZE", "OS2_UPPER_OP_SIZE", "PANOSE", "TYPO_ASCENDER", + "TYPO_DESCENDER", "TYPO_LINE_GAP", "WIN_ASCENT", "WIN_DESCENT", "X_HEIGHT", + "CAP_HEIGHT", "WEIGHT_CLASS", "WIDTH_CLASS", "VENDOR", "UNICODE_RANGE", + "CODE_PAGE_RANGE", "FAMILY_CLASS", "STAT", "ELIDED_FALLBACK_NAME", + "ELIDED_FALLBACK_NAME_ID", "DESIGN_AXIS", "AXIS_VALUE", "FLAG", "LOCATION", + "AXIS_EAVN", "AXIS_OSFA", "VHEA", "VERT_TYPO_ASCENDER", "VERT_TYPO_DESCENDER", + "VERT_TYPO_LINE_GAP", "VMTX", "VERT_ORIGIN_Y", "VERT_ADVANCE_Y", "LCBRACE", + "RCBRACE", "LBRACKET", "RBRACKET", "HYPHEN", "SEMI", "EQUALS", "MARKER", + "COMMA", "QUOTE", "GCLASS", "CID", "ESCGNAME", "NAMELABEL", "EXTNAME", + "POINTNUM", "NUMEXT", "NUMOCT", "NUM", "CATCHTAG", "A_WHITESPACE", + "A_LABEL", "A_LBRACE", "A_CLOSE", "A_LINE", "I_WHITESPACE", "I_RPAREN", + "IFILE", "I_LPAREN", "STRVAL", "EQUOTE" + } + ); + static const int32_t serializedATNSegment[] = { + 4,0,145,1780,6,-1,6,-1,6,-1,6,-1,6,-1,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2, + 3,7,3,2,4,7,4,2,5,7,5,2,6,7,6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11, + 7,11,2,12,7,12,2,13,7,13,2,14,7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18, + 7,18,2,19,7,19,2,20,7,20,2,21,7,21,2,22,7,22,2,23,7,23,2,24,7,24,2,25, + 7,25,2,26,7,26,2,27,7,27,2,28,7,28,2,29,7,29,2,30,7,30,2,31,7,31,2,32, + 7,32,2,33,7,33,2,34,7,34,2,35,7,35,2,36,7,36,2,37,7,37,2,38,7,38,2,39, + 7,39,2,40,7,40,2,41,7,41,2,42,7,42,2,43,7,43,2,44,7,44,2,45,7,45,2,46, + 7,46,2,47,7,47,2,48,7,48,2,49,7,49,2,50,7,50,2,51,7,51,2,52,7,52,2,53, + 7,53,2,54,7,54,2,55,7,55,2,56,7,56,2,57,7,57,2,58,7,58,2,59,7,59,2,60, + 7,60,2,61,7,61,2,62,7,62,2,63,7,63,2,64,7,64,2,65,7,65,2,66,7,66,2,67, + 7,67,2,68,7,68,2,69,7,69,2,70,7,70,2,71,7,71,2,72,7,72,2,73,7,73,2,74, + 7,74,2,75,7,75,2,76,7,76,2,77,7,77,2,78,7,78,2,79,7,79,2,80,7,80,2,81, + 7,81,2,82,7,82,2,83,7,83,2,84,7,84,2,85,7,85,2,86,7,86,2,87,7,87,2,88, + 7,88,2,89,7,89,2,90,7,90,2,91,7,91,2,92,7,92,2,93,7,93,2,94,7,94,2,95, + 7,95,2,96,7,96,2,97,7,97,2,98,7,98,2,99,7,99,2,100,7,100,2,101,7,101, + 2,102,7,102,2,103,7,103,2,104,7,104,2,105,7,105,2,106,7,106,2,107,7,107, + 2,108,7,108,2,109,7,109,2,110,7,110,2,111,7,111,2,112,7,112,2,113,7,113, + 2,114,7,114,2,115,7,115,2,116,7,116,2,117,7,117,2,118,7,118,2,119,7,119, + 2,120,7,120,2,121,7,121,2,122,7,122,2,123,7,123,2,124,7,124,2,125,7,125, + 2,126,7,126,2,127,7,127,2,128,7,128,2,129,7,129,2,130,7,130,2,131,7,131, + 2,132,7,132,2,133,7,133,2,134,7,134,2,135,7,135,2,136,7,136,2,137,7,137, + 2,138,7,138,2,139,7,139,2,140,7,140,2,141,7,141,2,142,7,142,2,143,7,143, + 2,144,7,144,2,145,7,145,2,146,7,146,2,147,7,147,2,148,7,148,2,149,7,149, + 2,150,7,150,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,2,1,2,5,2,330,8,2,10,2,12,2,333,9,2,1,2,1,2,1,3,4, + 3,338,8,3,11,3,12,3,339,1,3,1,3,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1, + 4,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,6,1,6,1,6,1,6,1,6,1,6,1,7,1,7,1,7, + 1,7,1,7,1,7,1,7,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,9,1,9,1,9,1,9,1, + 9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,10,1,10,1,10,1,10,1,10,1, + 10,1,10,1,10,1,10,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,12,1,12,1,12,1, + 12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,13,1,13,1,13,1,13,1,13,1,13,1, + 13,1,13,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1, + 15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1, + 15,1,15,1,15,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1, + 16,1,16,1,16,1,16,1,16,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1, + 17,1,17,1,17,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1, + 18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,19,1,19,1,19,1,19,1,19,1, + 19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1, + 20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,21,1,21,1, + 21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,22,1,22,1,22,1,22,1, + 22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,23,1,23,1,23,1,23,1,23,1, + 23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,24,1,24,1,24,1,24,1,24,1,24,1, + 24,1,24,1,24,1,24,1,24,1,24,1,24,1,25,1,25,1,26,1,26,1,27,1,27,1,27,1, + 27,1,27,1,27,1,27,1,27,1,27,1,27,1,28,1,28,1,28,1,28,1,28,1,29,1,29,1, + 29,1,29,1,29,1,29,1,29,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,31,1,31,1, + 31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,32,1,32,1,32,1,32,1,33,1, + 33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,34,1,34,1,34,1,34,1, + 34,1,35,1,35,1,35,1,36,1,36,1,36,1,36,1,36,1,37,1,37,1,37,1,37,1,37,1, + 37,1,37,1,37,1,37,1,38,1,38,1,38,1,38,1,39,1,39,1,39,1,39,1,39,1,39,1, + 39,1,39,1,39,1,39,1,39,1,40,1,40,1,40,1,40,1,40,1,40,1,40,1,40,1,40,1, + 40,1,40,1,40,1,40,1,41,1,41,1,41,1,41,1,41,1,41,1,41,1,41,1,41,1,41,1, + 41,1,41,1,41,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1, + 42,1,42,1,42,1,42,1,42,1,42,1,42,1,43,1,43,1,43,1,43,1,43,1,43,1,43,1, + 43,1,43,1,43,1,43,1,43,1,43,1,43,1,43,1,43,1,43,1,43,1,43,1,43,1,43,1, + 43,1,43,1,43,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1, + 44,1,44,1,44,1,44,1,44,1,44,1,45,1,45,1,45,1,45,1,45,1,45,1,45,1,45,1, + 45,1,45,1,45,1,45,1,45,1,45,1,45,1,45,1,45,1,45,1,45,1,46,1,46,1,46,1, + 46,1,46,1,46,1,46,1,46,1,46,1,46,1,47,1,47,1,47,1,47,1,47,1,47,1,47,1, + 47,1,47,1,47,1,47,1,47,1,47,1,48,1,48,1,48,1,48,1,48,1,48,1,48,1,48,1, + 48,1,48,1,48,1,48,1,48,1,49,1,49,1,49,1,49,1,49,1,49,1,49,1,50,1,50,1, + 50,1,50,1,50,1,50,1,50,1,50,1,50,1,50,1,51,1,51,1,51,1,51,1,51,1,51,1, + 51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,52,1,52,1,52,1,52,1,52,1, + 53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,54,1,54,1,54,1,54,1, + 54,1,54,1,54,1,54,1,55,1,55,1,55,1,55,1,55,1,56,1,56,1,56,1,56,1,56,1, + 56,1,56,1,56,1,56,1,57,1,57,1,57,1,57,1,58,1,58,1,58,1,58,1,58,1,58,1, + 58,1,58,1,58,1,58,1,58,1,58,1,58,1,59,1,59,1,59,1,59,1,59,1,60,1,60,1, + 60,1,60,1,60,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1, + 61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,62,1,62,1,62,1, + 62,1,62,1,62,1,62,1,62,1,62,1,62,1,62,1,62,1,62,1,62,1,62,1,62,1,62,1, + 62,1,62,1,62,1,62,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1, + 63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1, + 63,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1, + 64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,65,1,65,1,65,1, + 65,1,65,1,66,1,66,1,66,1,66,1,66,1,66,1,66,1,66,1,66,1,66,1,66,1,66,1, + 66,1,66,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,68,1,68,1,68,1,68,1,68,1, + 68,1,68,1,68,1,68,1,68,1,68,1,68,1,68,1,68,1,68,1,68,1,68,1,68,1,68,1, + 69,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1, + 69,1,69,1,69,1,69,1,69,1,69,1,69,1,70,1,70,1,70,1,70,1,70,1,71,1,71,1, + 71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,72,1,72,1,72,1, + 72,1,72,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,74,1,74,1,74,1, + 74,1,74,1,74,1,74,1,74,1,74,1,74,1,75,1,75,1,75,1,75,1,75,1,75,1,75,1, + 75,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,77,1, + 77,1,77,1,77,1,77,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,79,1,79,1,79,1, + 79,1,79,1,80,1,80,1,80,1,80,1,80,1,80,1,80,1,81,1,81,1,81,1,81,1,81,1, + 81,1,81,1,82,1,82,1,82,1,82,1,82,1,82,1,82,1,82,1,82,1,82,1,82,1,82,1, + 83,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,84,1,84,1, + 84,1,84,1,84,1,84,1,84,1,85,1,85,1,85,1,85,1,85,1,85,1,85,1,85,1,85,1, + 85,1,85,1,85,1,85,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1, + 86,1,86,1,86,1,86,1,87,1,87,1,87,1,87,1,87,1,87,1,87,1,87,1,87,1,87,1, + 87,1,87,1,88,1,88,1,88,1,88,1,88,1,88,1,88,1,88,1,88,1,88,1,89,1,89,1, + 89,1,89,1,89,1,89,1,89,1,89,1,89,1,89,1,89,1,90,1,90,1,90,1,90,1,90,1, + 90,1,90,1,90,1,91,1,91,1,91,1,91,1,91,1,91,1,91,1,91,1,91,1,91,1,92,1, + 92,1,92,1,92,1,92,1,92,1,92,1,92,1,92,1,92,1,92,1,92,1,93,1,93,1,93,1, + 93,1,93,1,93,1,93,1,93,1,93,1,93,1,93,1,94,1,94,1,94,1,94,1,94,1,94,1, + 94,1,95,1,95,1,95,1,95,1,95,1,95,1,95,1,95,1,95,1,95,1,95,1,95,1,95,1, + 96,1,96,1,96,1,96,1,96,1,96,1,96,1,96,1,96,1,96,1,96,1,96,1,96,1,96,1, + 97,1,97,1,97,1,97,1,97,1,97,1,97,1,97,1,97,1,97,1,97,1,97,1,98,1,98,1, + 98,1,98,1,98,1,99,1,99,1,99,1,99,1,99,1,99,1,99,1,99,1,99,1,99,1,99,1, + 99,1,99,1,99,1,99,1,99,1,99,1,99,1,99,1,100,1,100,1,100,1,100,1,100,1, + 100,1,100,1,100,1,100,1,100,1,100,1,100,1,100,1,100,1,100,1,100,1,100, + 1,100,1,100,1,100,1,100,1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,101, + 1,101,1,101,1,101,1,102,1,102,1,102,1,102,1,102,1,102,1,102,1,102,1,102, + 1,102,1,103,1,103,1,103,1,103,1,103,1,104,1,104,1,104,1,104,1,104,1,104, + 1,104,1,104,1,104,1,105,1,105,1,105,1,105,1,105,1,105,1,105,1,105,1,105, + 1,105,1,105,1,105,1,105,1,105,1,105,1,105,1,105,1,105,1,105,1,105,1,105, + 1,105,1,106,1,106,1,106,1,106,1,106,1,106,1,106,1,106,1,106,1,106,1,106, + 1,106,1,106,1,106,1,106,1,106,1,106,1,106,1,106,1,106,1,106,1,106,1,106, + 1,106,1,106,1,106,1,107,1,107,1,107,1,107,1,107,1,108,1,108,1,108,1,108, + 1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,108, + 1,108,1,109,1,109,1,109,1,109,1,109,1,109,1,109,1,109,1,109,1,109,1,109, + 1,109,1,109,1,109,1,109,1,109,1,109,1,109,1,110,1,110,1,110,1,110,1,110, + 1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,111, + 1,111,1,111,1,111,1,111,1,112,1,112,1,112,1,112,1,112,1,112,1,112,1,112, + 1,112,1,112,1,112,1,112,1,113,1,113,1,113,1,113,1,113,1,113,1,113,1,113, + 1,113,1,113,1,113,1,113,1,113,1,114,1,114,1,115,1,115,1,116,1,116,1,117, + 1,117,1,118,1,118,1,119,1,119,1,120,1,120,1,121,1,121,1,122,1,122,1,123, + 1,123,1,123,1,123,1,124,1,124,1,125,1,125,3,125,1594,8,125,1,126,1,126, + 3,126,1598,8,126,1,127,1,127,1,127,5,127,1603,8,127,10,127,12,127,1606, + 9,127,1,128,1,128,4,128,1610,8,128,11,128,12,128,1611,1,129,1,129,3,129, + 1616,8,129,1,130,1,130,1,130,5,130,1621,8,130,10,130,12,130,1624,9,130, + 1,131,1,131,5,131,1628,8,131,10,131,12,131,1631,9,131,1,132,1,132,5,132, + 1635,8,132,10,132,12,132,1638,9,132,1,133,3,133,1641,8,133,1,133,4,133, + 1644,8,133,11,133,12,133,1645,1,133,1,133,4,133,1650,8,133,11,133,12, + 133,1651,1,134,1,134,1,134,1,134,4,134,1658,8,134,11,134,12,134,1659, + 1,135,1,135,4,135,1664,8,135,11,135,12,135,1665,1,136,3,136,1669,8,136, + 1,136,1,136,5,136,1673,8,136,10,136,12,136,1676,9,136,1,136,3,136,1679, + 8,136,1,137,1,137,1,138,1,138,3,138,1685,8,138,1,139,1,139,3,139,1689, + 8,139,1,140,4,140,1692,8,140,11,140,12,140,1693,1,140,1,140,1,141,1,141, + 5,141,1700,8,141,10,141,12,141,1703,9,141,1,141,1,141,1,142,1,142,1,142, + 1,142,1,143,3,143,1712,8,143,1,143,1,143,1,143,1,143,5,143,1718,8,143, + 10,143,12,143,1721,9,143,1,143,1,143,5,143,1725,8,143,10,143,12,143,1728, + 9,143,1,143,5,143,1731,8,143,10,143,12,143,1734,9,143,1,143,1,143,1,143, + 1,143,1,143,1,144,3,144,1742,8,144,1,144,1,144,5,144,1746,8,144,10,144, + 12,144,1749,9,144,1,145,4,145,1752,8,145,11,145,12,145,1753,1,145,1,145, + 1,146,1,146,1,146,1,146,1,147,4,147,1763,8,147,11,147,12,147,1764,1,148, + 1,148,1,148,1,148,1,149,5,149,1772,8,149,10,149,12,149,1775,9,149,1,150, + 1,150,1,150,1,150,0,0,151,6,1,8,2,10,3,12,4,14,5,16,6,18,7,20,8,22,9, + 24,10,26,11,28,12,30,13,32,14,34,15,36,16,38,17,40,18,42,19,44,20,46, + 21,48,22,50,23,52,24,54,25,56,26,58,27,60,28,62,29,64,30,66,31,68,32, + 70,33,72,34,74,35,76,36,78,37,80,38,82,39,84,40,86,41,88,42,90,43,92, + 44,94,45,96,46,98,47,100,48,102,49,104,50,106,51,108,52,110,53,112,54, + 114,55,116,56,118,57,120,58,122,59,124,60,126,61,128,62,130,63,132,64, + 134,65,136,66,138,67,140,68,142,69,144,70,146,71,148,72,150,73,152,74, + 154,75,156,76,158,77,160,78,162,79,164,80,166,81,168,82,170,83,172,84, + 174,85,176,86,178,87,180,88,182,89,184,90,186,91,188,92,190,93,192,94, + 194,95,196,96,198,97,200,98,202,99,204,100,206,101,208,102,210,103,212, + 104,214,105,216,106,218,107,220,108,222,109,224,110,226,111,228,112,230, + 113,232,114,234,115,236,116,238,117,240,118,242,119,244,120,246,121,248, + 122,250,123,252,124,254,0,256,0,258,0,260,125,262,126,264,0,266,127,268, + 128,270,129,272,130,274,131,276,132,278,133,280,0,282,0,284,134,286,135, + 288,136,290,137,292,138,294,139,296,140,298,141,300,142,302,143,304,144, + 306,145,6,0,1,2,3,4,5,11,2,0,10,10,13,13,3,0,9,10,13,13,32,32,3,0,65, + 90,95,95,97,122,2,0,46,46,48,57,5,0,42,43,58,58,94,94,124,124,126,126, + 3,0,48,57,65,70,97,102,10,0,33,33,36,38,42,43,46,46,58,58,63,63,65,90, + 94,122,124,124,126,126,2,0,45,45,48,57,2,0,9,9,32,32,1,0,41,41,1,0,34, + 34,1799,0,6,1,0,0,0,0,8,1,0,0,0,0,10,1,0,0,0,0,12,1,0,0,0,0,14,1,0,0, + 0,0,16,1,0,0,0,0,18,1,0,0,0,0,20,1,0,0,0,0,22,1,0,0,0,0,24,1,0,0,0,0, + 26,1,0,0,0,0,28,1,0,0,0,0,30,1,0,0,0,0,32,1,0,0,0,0,34,1,0,0,0,0,36,1, + 0,0,0,0,38,1,0,0,0,0,40,1,0,0,0,0,42,1,0,0,0,0,44,1,0,0,0,0,46,1,0,0, + 0,0,48,1,0,0,0,0,50,1,0,0,0,0,52,1,0,0,0,0,54,1,0,0,0,0,56,1,0,0,0,0, + 58,1,0,0,0,0,60,1,0,0,0,0,62,1,0,0,0,0,64,1,0,0,0,0,66,1,0,0,0,0,68,1, + 0,0,0,0,70,1,0,0,0,0,72,1,0,0,0,0,74,1,0,0,0,0,76,1,0,0,0,0,78,1,0,0, + 0,0,80,1,0,0,0,0,82,1,0,0,0,0,84,1,0,0,0,0,86,1,0,0,0,0,88,1,0,0,0,0, + 90,1,0,0,0,0,92,1,0,0,0,0,94,1,0,0,0,0,96,1,0,0,0,0,98,1,0,0,0,0,100, + 1,0,0,0,0,102,1,0,0,0,0,104,1,0,0,0,0,106,1,0,0,0,0,108,1,0,0,0,0,110, + 1,0,0,0,0,112,1,0,0,0,0,114,1,0,0,0,0,116,1,0,0,0,0,118,1,0,0,0,0,120, + 1,0,0,0,0,122,1,0,0,0,0,124,1,0,0,0,0,126,1,0,0,0,0,128,1,0,0,0,0,130, + 1,0,0,0,0,132,1,0,0,0,0,134,1,0,0,0,0,136,1,0,0,0,0,138,1,0,0,0,0,140, + 1,0,0,0,0,142,1,0,0,0,0,144,1,0,0,0,0,146,1,0,0,0,0,148,1,0,0,0,0,150, + 1,0,0,0,0,152,1,0,0,0,0,154,1,0,0,0,0,156,1,0,0,0,0,158,1,0,0,0,0,160, + 1,0,0,0,0,162,1,0,0,0,0,164,1,0,0,0,0,166,1,0,0,0,0,168,1,0,0,0,0,170, + 1,0,0,0,0,172,1,0,0,0,0,174,1,0,0,0,0,176,1,0,0,0,0,178,1,0,0,0,0,180, + 1,0,0,0,0,182,1,0,0,0,0,184,1,0,0,0,0,186,1,0,0,0,0,188,1,0,0,0,0,190, + 1,0,0,0,0,192,1,0,0,0,0,194,1,0,0,0,0,196,1,0,0,0,0,198,1,0,0,0,0,200, + 1,0,0,0,0,202,1,0,0,0,0,204,1,0,0,0,0,206,1,0,0,0,0,208,1,0,0,0,0,210, + 1,0,0,0,0,212,1,0,0,0,0,214,1,0,0,0,0,216,1,0,0,0,0,218,1,0,0,0,0,220, + 1,0,0,0,0,222,1,0,0,0,0,224,1,0,0,0,0,226,1,0,0,0,0,228,1,0,0,0,0,230, + 1,0,0,0,0,232,1,0,0,0,0,234,1,0,0,0,0,236,1,0,0,0,0,238,1,0,0,0,0,240, + 1,0,0,0,0,242,1,0,0,0,0,244,1,0,0,0,0,246,1,0,0,0,0,248,1,0,0,0,0,250, + 1,0,0,0,0,252,1,0,0,0,0,260,1,0,0,0,0,262,1,0,0,0,0,266,1,0,0,0,0,268, + 1,0,0,0,0,270,1,0,0,0,0,272,1,0,0,0,0,274,1,0,0,0,0,276,1,0,0,0,0,278, + 1,0,0,0,0,284,1,0,0,0,1,286,1,0,0,0,1,288,1,0,0,0,1,290,1,0,0,0,2,292, + 1,0,0,0,2,294,1,0,0,0,3,296,1,0,0,0,3,298,1,0,0,0,4,300,1,0,0,0,4,302, + 1,0,0,0,5,304,1,0,0,0,5,306,1,0,0,0,6,308,1,0,0,0,8,315,1,0,0,0,10,327, + 1,0,0,0,12,337,1,0,0,0,14,343,1,0,0,0,16,353,1,0,0,0,18,361,1,0,0,0,20, + 367,1,0,0,0,22,374,1,0,0,0,24,383,1,0,0,0,26,398,1,0,0,0,28,407,1,0,0, + 0,30,414,1,0,0,0,32,425,1,0,0,0,34,433,1,0,0,0,36,445,1,0,0,0,38,462, + 1,0,0,0,40,478,1,0,0,0,42,490,1,0,0,0,44,510,1,0,0,0,46,529,1,0,0,0,48, + 541,1,0,0,0,50,553,1,0,0,0,52,566,1,0,0,0,54,579,1,0,0,0,56,592,1,0,0, + 0,58,594,1,0,0,0,60,596,1,0,0,0,62,606,1,0,0,0,64,611,1,0,0,0,66,618, + 1,0,0,0,68,625,1,0,0,0,70,636,1,0,0,0,72,640,1,0,0,0,74,651,1,0,0,0,76, + 656,1,0,0,0,78,659,1,0,0,0,80,664,1,0,0,0,82,673,1,0,0,0,84,677,1,0,0, + 0,86,688,1,0,0,0,88,701,1,0,0,0,90,714,1,0,0,0,92,732,1,0,0,0,94,756, + 1,0,0,0,96,773,1,0,0,0,98,792,1,0,0,0,100,802,1,0,0,0,102,815,1,0,0,0, + 104,828,1,0,0,0,106,835,1,0,0,0,108,845,1,0,0,0,110,860,1,0,0,0,112,865, + 1,0,0,0,114,875,1,0,0,0,116,883,1,0,0,0,118,888,1,0,0,0,120,897,1,0,0, + 0,122,901,1,0,0,0,124,914,1,0,0,0,126,919,1,0,0,0,128,924,1,0,0,0,130, + 946,1,0,0,0,132,967,1,0,0,0,134,992,1,0,0,0,136,1016,1,0,0,0,138,1021, + 1,0,0,0,140,1035,1,0,0,0,142,1042,1,0,0,0,144,1061,1,0,0,0,146,1082,1, + 0,0,0,148,1087,1,0,0,0,150,1100,1,0,0,0,152,1105,1,0,0,0,154,1114,1,0, + 0,0,156,1124,1,0,0,0,158,1132,1,0,0,0,160,1144,1,0,0,0,162,1149,1,0,0, + 0,164,1156,1,0,0,0,166,1161,1,0,0,0,168,1168,1,0,0,0,170,1175,1,0,0,0, + 172,1187,1,0,0,0,174,1199,1,0,0,0,176,1206,1,0,0,0,178,1219,1,0,0,0,180, + 1233,1,0,0,0,182,1245,1,0,0,0,184,1255,1,0,0,0,186,1266,1,0,0,0,188,1274, + 1,0,0,0,190,1284,1,0,0,0,192,1296,1,0,0,0,194,1307,1,0,0,0,196,1314,1, + 0,0,0,198,1327,1,0,0,0,200,1341,1,0,0,0,202,1353,1,0,0,0,204,1358,1,0, + 0,0,206,1377,1,0,0,0,208,1398,1,0,0,0,210,1409,1,0,0,0,212,1419,1,0,0, + 0,214,1424,1,0,0,0,216,1433,1,0,0,0,218,1455,1,0,0,0,220,1481,1,0,0,0, + 222,1486,1,0,0,0,224,1503,1,0,0,0,226,1521,1,0,0,0,228,1537,1,0,0,0,230, + 1542,1,0,0,0,232,1554,1,0,0,0,234,1567,1,0,0,0,236,1569,1,0,0,0,238,1571, + 1,0,0,0,240,1573,1,0,0,0,242,1575,1,0,0,0,244,1577,1,0,0,0,246,1579,1, + 0,0,0,248,1581,1,0,0,0,250,1583,1,0,0,0,252,1585,1,0,0,0,254,1589,1,0, + 0,0,256,1593,1,0,0,0,258,1597,1,0,0,0,260,1599,1,0,0,0,262,1607,1,0,0, + 0,264,1615,1,0,0,0,266,1617,1,0,0,0,268,1625,1,0,0,0,270,1632,1,0,0,0, + 272,1640,1,0,0,0,274,1653,1,0,0,0,276,1661,1,0,0,0,278,1668,1,0,0,0,280, + 1680,1,0,0,0,282,1684,1,0,0,0,284,1686,1,0,0,0,286,1691,1,0,0,0,288,1697, + 1,0,0,0,290,1706,1,0,0,0,292,1711,1,0,0,0,294,1741,1,0,0,0,296,1751,1, + 0,0,0,298,1757,1,0,0,0,300,1762,1,0,0,0,302,1766,1,0,0,0,304,1773,1,0, + 0,0,306,1776,1,0,0,0,308,309,5,97,0,0,309,310,5,110,0,0,310,311,5,111, + 0,0,311,312,5,110,0,0,312,313,1,0,0,0,313,314,6,0,0,0,314,7,1,0,0,0,315, + 316,5,97,0,0,316,317,5,110,0,0,317,318,5,111,0,0,318,319,5,110,0,0,319, + 320,5,121,0,0,320,321,5,109,0,0,321,322,5,111,0,0,322,323,5,117,0,0,323, + 324,5,115,0,0,324,325,1,0,0,0,325,326,6,1,0,0,326,9,1,0,0,0,327,331,5, + 35,0,0,328,330,8,0,0,0,329,328,1,0,0,0,330,333,1,0,0,0,331,329,1,0,0, + 0,331,332,1,0,0,0,332,334,1,0,0,0,333,331,1,0,0,0,334,335,6,2,1,0,335, + 11,1,0,0,0,336,338,7,1,0,0,337,336,1,0,0,0,338,339,1,0,0,0,339,337,1, + 0,0,0,339,340,1,0,0,0,340,341,1,0,0,0,341,342,6,3,1,0,342,13,1,0,0,0, + 343,344,5,105,0,0,344,345,5,110,0,0,345,346,5,99,0,0,346,347,5,108,0, + 0,347,348,5,117,0,0,348,349,5,100,0,0,349,350,5,101,0,0,350,351,1,0,0, + 0,351,352,6,4,2,0,352,15,1,0,0,0,353,354,5,102,0,0,354,355,5,101,0,0, + 355,356,5,97,0,0,356,357,5,116,0,0,357,358,5,117,0,0,358,359,5,114,0, + 0,359,360,5,101,0,0,360,17,1,0,0,0,361,362,5,116,0,0,362,363,5,97,0,0, + 363,364,5,98,0,0,364,365,5,108,0,0,365,366,5,101,0,0,366,19,1,0,0,0,367, + 368,5,115,0,0,368,369,5,99,0,0,369,370,5,114,0,0,370,371,5,105,0,0,371, + 372,5,112,0,0,372,373,5,116,0,0,373,21,1,0,0,0,374,375,5,108,0,0,375, + 376,5,97,0,0,376,377,5,110,0,0,377,378,5,103,0,0,378,379,5,117,0,0,379, + 380,5,97,0,0,380,381,5,103,0,0,381,382,5,101,0,0,382,23,1,0,0,0,383,384, + 5,108,0,0,384,385,5,97,0,0,385,386,5,110,0,0,386,387,5,103,0,0,387,388, + 5,117,0,0,388,389,5,97,0,0,389,390,5,103,0,0,390,391,5,101,0,0,391,392, + 5,115,0,0,392,393,5,121,0,0,393,394,5,115,0,0,394,395,5,116,0,0,395,396, + 5,101,0,0,396,397,5,109,0,0,397,25,1,0,0,0,398,399,5,115,0,0,399,400, + 5,117,0,0,400,401,5,98,0,0,401,402,5,116,0,0,402,403,5,97,0,0,403,404, + 5,98,0,0,404,405,5,108,0,0,405,406,5,101,0,0,406,27,1,0,0,0,407,408,5, + 108,0,0,408,409,5,111,0,0,409,410,5,111,0,0,410,411,5,107,0,0,411,412, + 5,117,0,0,412,413,5,112,0,0,413,29,1,0,0,0,414,415,5,108,0,0,415,416, + 5,111,0,0,416,417,5,111,0,0,417,418,5,107,0,0,418,419,5,117,0,0,419,420, + 5,112,0,0,420,421,5,102,0,0,421,422,5,108,0,0,422,423,5,97,0,0,423,424, + 5,103,0,0,424,31,1,0,0,0,425,426,5,46,0,0,426,427,5,110,0,0,427,428,5, + 111,0,0,428,429,5,116,0,0,429,430,5,100,0,0,430,431,5,101,0,0,431,432, + 5,102,0,0,432,33,1,0,0,0,433,434,5,82,0,0,434,435,5,105,0,0,435,436,5, + 103,0,0,436,437,5,104,0,0,437,438,5,116,0,0,438,439,5,84,0,0,439,440, + 5,111,0,0,440,441,5,76,0,0,441,442,5,101,0,0,442,443,5,102,0,0,443,444, + 5,116,0,0,444,35,1,0,0,0,445,446,5,73,0,0,446,447,5,103,0,0,447,448,5, + 110,0,0,448,449,5,111,0,0,449,450,5,114,0,0,450,451,5,101,0,0,451,452, + 5,66,0,0,452,453,5,97,0,0,453,454,5,115,0,0,454,455,5,101,0,0,455,456, + 5,71,0,0,456,457,5,108,0,0,457,458,5,121,0,0,458,459,5,112,0,0,459,460, + 5,104,0,0,460,461,5,115,0,0,461,37,1,0,0,0,462,463,5,73,0,0,463,464,5, + 103,0,0,464,465,5,110,0,0,465,466,5,111,0,0,466,467,5,114,0,0,467,468, + 5,101,0,0,468,469,5,76,0,0,469,470,5,105,0,0,470,471,5,103,0,0,471,472, + 5,97,0,0,472,473,5,116,0,0,473,474,5,117,0,0,474,475,5,114,0,0,475,476, + 5,101,0,0,476,477,5,115,0,0,477,39,1,0,0,0,478,479,5,73,0,0,479,480,5, + 103,0,0,480,481,5,110,0,0,481,482,5,111,0,0,482,483,5,114,0,0,483,484, + 5,101,0,0,484,485,5,77,0,0,485,486,5,97,0,0,486,487,5,114,0,0,487,488, + 5,107,0,0,488,489,5,115,0,0,489,41,1,0,0,0,490,491,5,85,0,0,491,492,5, + 115,0,0,492,493,5,101,0,0,493,494,5,77,0,0,494,495,5,97,0,0,495,496,5, + 114,0,0,496,497,5,107,0,0,497,498,5,70,0,0,498,499,5,105,0,0,499,500, + 5,108,0,0,500,501,5,116,0,0,501,502,5,101,0,0,502,503,5,114,0,0,503,504, + 5,105,0,0,504,505,5,110,0,0,505,506,5,103,0,0,506,507,5,83,0,0,507,508, + 5,101,0,0,508,509,5,116,0,0,509,43,1,0,0,0,510,511,5,77,0,0,511,512,5, + 97,0,0,512,513,5,114,0,0,513,514,5,107,0,0,514,515,5,65,0,0,515,516,5, + 116,0,0,516,517,5,116,0,0,517,518,5,97,0,0,518,519,5,99,0,0,519,520,5, + 104,0,0,520,521,5,109,0,0,521,522,5,101,0,0,522,523,5,110,0,0,523,524, + 5,116,0,0,524,525,5,84,0,0,525,526,5,121,0,0,526,527,5,112,0,0,527,528, + 5,101,0,0,528,45,1,0,0,0,529,530,5,101,0,0,530,531,5,120,0,0,531,532, + 5,99,0,0,532,533,5,108,0,0,533,534,5,117,0,0,534,535,5,100,0,0,535,536, + 5,101,0,0,536,537,5,68,0,0,537,538,5,70,0,0,538,539,5,76,0,0,539,540, + 5,84,0,0,540,47,1,0,0,0,541,542,5,105,0,0,542,543,5,110,0,0,543,544,5, + 99,0,0,544,545,5,108,0,0,545,546,5,117,0,0,546,547,5,100,0,0,547,548, + 5,101,0,0,548,549,5,68,0,0,549,550,5,70,0,0,550,551,5,76,0,0,551,552, + 5,84,0,0,552,49,1,0,0,0,553,554,5,101,0,0,554,555,5,120,0,0,555,556,5, + 99,0,0,556,557,5,108,0,0,557,558,5,117,0,0,558,559,5,100,0,0,559,560, + 5,101,0,0,560,561,5,95,0,0,561,562,5,100,0,0,562,563,5,102,0,0,563,564, + 5,108,0,0,564,565,5,116,0,0,565,51,1,0,0,0,566,567,5,105,0,0,567,568, + 5,110,0,0,568,569,5,99,0,0,569,570,5,108,0,0,570,571,5,117,0,0,571,572, + 5,100,0,0,572,573,5,101,0,0,573,574,5,95,0,0,574,575,5,100,0,0,575,576, + 5,102,0,0,576,577,5,108,0,0,577,578,5,116,0,0,578,53,1,0,0,0,579,580, + 5,117,0,0,580,581,5,115,0,0,581,582,5,101,0,0,582,583,5,69,0,0,583,584, + 5,120,0,0,584,585,5,116,0,0,585,586,5,101,0,0,586,587,5,110,0,0,587,588, + 5,115,0,0,588,589,5,105,0,0,589,590,5,111,0,0,590,591,5,110,0,0,591,55, + 1,0,0,0,592,593,5,60,0,0,593,57,1,0,0,0,594,595,5,62,0,0,595,59,1,0,0, + 0,596,597,5,101,0,0,597,598,5,110,0,0,598,599,5,117,0,0,599,600,5,109, + 0,0,600,601,5,101,0,0,601,602,5,114,0,0,602,603,5,97,0,0,603,604,5,116, + 0,0,604,605,5,101,0,0,605,61,1,0,0,0,606,607,5,101,0,0,607,608,5,110, + 0,0,608,609,5,117,0,0,609,610,5,109,0,0,610,63,1,0,0,0,611,612,5,101, + 0,0,612,613,5,120,0,0,613,614,5,99,0,0,614,615,5,101,0,0,615,616,5,112, + 0,0,616,617,5,116,0,0,617,65,1,0,0,0,618,619,5,105,0,0,619,620,5,103, + 0,0,620,621,5,110,0,0,621,622,5,111,0,0,622,623,5,114,0,0,623,624,5,101, + 0,0,624,67,1,0,0,0,625,626,5,115,0,0,626,627,5,117,0,0,627,628,5,98,0, + 0,628,629,5,115,0,0,629,630,5,116,0,0,630,631,5,105,0,0,631,632,5,116, + 0,0,632,633,5,117,0,0,633,634,5,116,0,0,634,635,5,101,0,0,635,69,1,0, + 0,0,636,637,5,115,0,0,637,638,5,117,0,0,638,639,5,98,0,0,639,71,1,0,0, + 0,640,641,5,114,0,0,641,642,5,101,0,0,642,643,5,118,0,0,643,644,5,101, + 0,0,644,645,5,114,0,0,645,646,5,115,0,0,646,647,5,101,0,0,647,648,5,115, + 0,0,648,649,5,117,0,0,649,650,5,98,0,0,650,73,1,0,0,0,651,652,5,114,0, + 0,652,653,5,115,0,0,653,654,5,117,0,0,654,655,5,98,0,0,655,75,1,0,0,0, + 656,657,5,98,0,0,657,658,5,121,0,0,658,77,1,0,0,0,659,660,5,102,0,0,660, + 661,5,114,0,0,661,662,5,111,0,0,662,663,5,109,0,0,663,79,1,0,0,0,664, + 665,5,112,0,0,665,666,5,111,0,0,666,667,5,115,0,0,667,668,5,105,0,0,668, + 669,5,116,0,0,669,670,5,105,0,0,670,671,5,111,0,0,671,672,5,110,0,0,672, + 81,1,0,0,0,673,674,5,112,0,0,674,675,5,111,0,0,675,676,5,115,0,0,676, + 83,1,0,0,0,677,678,5,112,0,0,678,679,5,97,0,0,679,680,5,114,0,0,680,681, + 5,97,0,0,681,682,5,109,0,0,682,683,5,101,0,0,683,684,5,116,0,0,684,685, + 5,101,0,0,685,686,5,114,0,0,686,687,5,115,0,0,687,85,1,0,0,0,688,689, + 5,102,0,0,689,690,5,101,0,0,690,691,5,97,0,0,691,692,5,116,0,0,692,693, + 5,117,0,0,693,694,5,114,0,0,694,695,5,101,0,0,695,696,5,78,0,0,696,697, + 5,97,0,0,697,698,5,109,0,0,698,699,5,101,0,0,699,700,5,115,0,0,700,87, + 1,0,0,0,701,702,5,99,0,0,702,703,5,118,0,0,703,704,5,80,0,0,704,705,5, + 97,0,0,705,706,5,114,0,0,706,707,5,97,0,0,707,708,5,109,0,0,708,709,5, + 101,0,0,709,710,5,116,0,0,710,711,5,101,0,0,711,712,5,114,0,0,712,713, + 5,115,0,0,713,89,1,0,0,0,714,715,5,70,0,0,715,716,5,101,0,0,716,717,5, + 97,0,0,717,718,5,116,0,0,718,719,5,85,0,0,719,720,5,73,0,0,720,721,5, + 76,0,0,721,722,5,97,0,0,722,723,5,98,0,0,723,724,5,101,0,0,724,725,5, + 108,0,0,725,726,5,78,0,0,726,727,5,97,0,0,727,728,5,109,0,0,728,729,5, + 101,0,0,729,730,5,73,0,0,730,731,5,68,0,0,731,91,1,0,0,0,732,733,5,70, + 0,0,733,734,5,101,0,0,734,735,5,97,0,0,735,736,5,116,0,0,736,737,5,85, + 0,0,737,738,5,73,0,0,738,739,5,84,0,0,739,740,5,111,0,0,740,741,5,111, + 0,0,741,742,5,108,0,0,742,743,5,116,0,0,743,744,5,105,0,0,744,745,5,112, + 0,0,745,746,5,84,0,0,746,747,5,101,0,0,747,748,5,120,0,0,748,749,5,116, + 0,0,749,750,5,78,0,0,750,751,5,97,0,0,751,752,5,109,0,0,752,753,5,101, + 0,0,753,754,5,73,0,0,754,755,5,68,0,0,755,93,1,0,0,0,756,757,5,83,0,0, + 757,758,5,97,0,0,758,759,5,109,0,0,759,760,5,112,0,0,760,761,5,108,0, + 0,761,762,5,101,0,0,762,763,5,84,0,0,763,764,5,101,0,0,764,765,5,120, + 0,0,765,766,5,116,0,0,766,767,5,78,0,0,767,768,5,97,0,0,768,769,5,109, + 0,0,769,770,5,101,0,0,770,771,5,73,0,0,771,772,5,68,0,0,772,95,1,0,0, + 0,773,774,5,80,0,0,774,775,5,97,0,0,775,776,5,114,0,0,776,777,5,97,0, + 0,777,778,5,109,0,0,778,779,5,85,0,0,779,780,5,73,0,0,780,781,5,76,0, + 0,781,782,5,97,0,0,782,783,5,98,0,0,783,784,5,101,0,0,784,785,5,108,0, + 0,785,786,5,78,0,0,786,787,5,97,0,0,787,788,5,109,0,0,788,789,5,101,0, + 0,789,790,5,73,0,0,790,791,5,68,0,0,791,97,1,0,0,0,792,793,5,67,0,0,793, + 794,5,104,0,0,794,795,5,97,0,0,795,796,5,114,0,0,796,797,5,97,0,0,797, + 798,5,99,0,0,798,799,5,116,0,0,799,800,5,101,0,0,800,801,5,114,0,0,801, + 99,1,0,0,0,802,803,5,115,0,0,803,804,5,105,0,0,804,805,5,122,0,0,805, + 806,5,101,0,0,806,807,5,109,0,0,807,808,5,101,0,0,808,809,5,110,0,0,809, + 810,5,117,0,0,810,811,5,110,0,0,811,812,5,97,0,0,812,813,5,109,0,0,813, + 814,5,101,0,0,814,101,1,0,0,0,815,816,5,99,0,0,816,817,5,111,0,0,817, + 818,5,110,0,0,818,819,5,116,0,0,819,820,5,111,0,0,820,821,5,117,0,0,821, + 822,5,114,0,0,822,823,5,112,0,0,823,824,5,111,0,0,824,825,5,105,0,0,825, + 826,5,110,0,0,826,827,5,116,0,0,827,103,1,0,0,0,828,829,5,97,0,0,829, + 830,5,110,0,0,830,831,5,99,0,0,831,832,5,104,0,0,832,833,5,111,0,0,833, + 834,5,114,0,0,834,105,1,0,0,0,835,836,5,97,0,0,836,837,5,110,0,0,837, + 838,5,99,0,0,838,839,5,104,0,0,839,840,5,111,0,0,840,841,5,114,0,0,841, + 842,5,68,0,0,842,843,5,101,0,0,843,844,5,102,0,0,844,107,1,0,0,0,845, + 846,5,118,0,0,846,847,5,97,0,0,847,848,5,108,0,0,848,849,5,117,0,0,849, + 850,5,101,0,0,850,851,5,82,0,0,851,852,5,101,0,0,852,853,5,99,0,0,853, + 854,5,111,0,0,854,855,5,114,0,0,855,856,5,100,0,0,856,857,5,68,0,0,857, + 858,5,101,0,0,858,859,5,102,0,0,859,109,1,0,0,0,860,861,5,109,0,0,861, + 862,5,97,0,0,862,863,5,114,0,0,863,864,5,107,0,0,864,111,1,0,0,0,865, + 866,5,109,0,0,866,867,5,97,0,0,867,868,5,114,0,0,868,869,5,107,0,0,869, + 870,5,67,0,0,870,871,5,108,0,0,871,872,5,97,0,0,872,873,5,115,0,0,873, + 874,5,115,0,0,874,113,1,0,0,0,875,876,5,99,0,0,876,877,5,117,0,0,877, + 878,5,114,0,0,878,879,5,115,0,0,879,880,5,105,0,0,880,881,5,118,0,0,881, + 882,5,101,0,0,882,115,1,0,0,0,883,884,5,98,0,0,884,885,5,97,0,0,885,886, + 5,115,0,0,886,887,5,101,0,0,887,117,1,0,0,0,888,889,5,108,0,0,889,890, + 5,105,0,0,890,891,5,103,0,0,891,892,5,97,0,0,892,893,5,116,0,0,893,894, + 5,117,0,0,894,895,5,114,0,0,895,896,5,101,0,0,896,119,1,0,0,0,897,898, + 5,108,0,0,898,899,5,105,0,0,899,900,5,103,0,0,900,121,1,0,0,0,901,902, + 5,108,0,0,902,903,5,105,0,0,903,904,5,103,0,0,904,905,5,67,0,0,905,906, + 5,111,0,0,906,907,5,109,0,0,907,908,5,112,0,0,908,909,5,111,0,0,909,910, + 5,110,0,0,910,911,5,101,0,0,911,912,5,110,0,0,912,913,5,116,0,0,913,123, + 1,0,0,0,914,915,5,78,0,0,915,916,5,85,0,0,916,917,5,76,0,0,917,918,5, + 76,0,0,918,125,1,0,0,0,919,920,5,66,0,0,920,921,5,65,0,0,921,922,5,83, + 0,0,922,923,5,69,0,0,923,127,1,0,0,0,924,925,5,72,0,0,925,926,5,111,0, + 0,926,927,5,114,0,0,927,928,5,105,0,0,928,929,5,122,0,0,929,930,5,65, + 0,0,930,931,5,120,0,0,931,932,5,105,0,0,932,933,5,115,0,0,933,934,5,46, + 0,0,934,935,5,66,0,0,935,936,5,97,0,0,936,937,5,115,0,0,937,938,5,101, + 0,0,938,939,5,84,0,0,939,940,5,97,0,0,940,941,5,103,0,0,941,942,5,76, + 0,0,942,943,5,105,0,0,943,944,5,115,0,0,944,945,5,116,0,0,945,129,1,0, + 0,0,946,947,5,86,0,0,947,948,5,101,0,0,948,949,5,114,0,0,949,950,5,116, + 0,0,950,951,5,65,0,0,951,952,5,120,0,0,952,953,5,105,0,0,953,954,5,115, + 0,0,954,955,5,46,0,0,955,956,5,66,0,0,956,957,5,97,0,0,957,958,5,115, + 0,0,958,959,5,101,0,0,959,960,5,84,0,0,960,961,5,97,0,0,961,962,5,103, + 0,0,962,963,5,76,0,0,963,964,5,105,0,0,964,965,5,115,0,0,965,966,5,116, + 0,0,966,131,1,0,0,0,967,968,5,72,0,0,968,969,5,111,0,0,969,970,5,114, + 0,0,970,971,5,105,0,0,971,972,5,122,0,0,972,973,5,65,0,0,973,974,5,120, + 0,0,974,975,5,105,0,0,975,976,5,115,0,0,976,977,5,46,0,0,977,978,5,66, + 0,0,978,979,5,97,0,0,979,980,5,115,0,0,980,981,5,101,0,0,981,982,5,83, + 0,0,982,983,5,99,0,0,983,984,5,114,0,0,984,985,5,105,0,0,985,986,5,112, + 0,0,986,987,5,116,0,0,987,988,5,76,0,0,988,989,5,105,0,0,989,990,5,115, + 0,0,990,991,5,116,0,0,991,133,1,0,0,0,992,993,5,86,0,0,993,994,5,101, + 0,0,994,995,5,114,0,0,995,996,5,116,0,0,996,997,5,65,0,0,997,998,5,120, + 0,0,998,999,5,105,0,0,999,1000,5,115,0,0,1000,1001,5,46,0,0,1001,1002, + 5,66,0,0,1002,1003,5,97,0,0,1003,1004,5,115,0,0,1004,1005,5,101,0,0,1005, + 1006,5,83,0,0,1006,1007,5,99,0,0,1007,1008,5,114,0,0,1008,1009,5,105, + 0,0,1009,1010,5,112,0,0,1010,1011,5,116,0,0,1011,1012,5,76,0,0,1012,1013, + 5,105,0,0,1013,1014,5,115,0,0,1014,1015,5,116,0,0,1015,135,1,0,0,0,1016, + 1017,5,71,0,0,1017,1018,5,68,0,0,1018,1019,5,69,0,0,1019,1020,5,70,0, + 0,1020,137,1,0,0,0,1021,1022,5,71,0,0,1022,1023,5,108,0,0,1023,1024,5, + 121,0,0,1024,1025,5,112,0,0,1025,1026,5,104,0,0,1026,1027,5,67,0,0,1027, + 1028,5,108,0,0,1028,1029,5,97,0,0,1029,1030,5,115,0,0,1030,1031,5,115, + 0,0,1031,1032,5,68,0,0,1032,1033,5,101,0,0,1033,1034,5,102,0,0,1034,139, + 1,0,0,0,1035,1036,5,65,0,0,1036,1037,5,116,0,0,1037,1038,5,116,0,0,1038, + 1039,5,97,0,0,1039,1040,5,99,0,0,1040,1041,5,104,0,0,1041,141,1,0,0,0, + 1042,1043,5,76,0,0,1043,1044,5,105,0,0,1044,1045,5,103,0,0,1045,1046, + 5,97,0,0,1046,1047,5,116,0,0,1047,1048,5,117,0,0,1048,1049,5,114,0,0, + 1049,1050,5,101,0,0,1050,1051,5,67,0,0,1051,1052,5,97,0,0,1052,1053,5, + 114,0,0,1053,1054,5,101,0,0,1054,1055,5,116,0,0,1055,1056,5,66,0,0,1056, + 1057,5,121,0,0,1057,1058,5,80,0,0,1058,1059,5,111,0,0,1059,1060,5,115, + 0,0,1060,143,1,0,0,0,1061,1062,5,76,0,0,1062,1063,5,105,0,0,1063,1064, + 5,103,0,0,1064,1065,5,97,0,0,1065,1066,5,116,0,0,1066,1067,5,117,0,0, + 1067,1068,5,114,0,0,1068,1069,5,101,0,0,1069,1070,5,67,0,0,1070,1071, + 5,97,0,0,1071,1072,5,114,0,0,1072,1073,5,101,0,0,1073,1074,5,116,0,0, + 1074,1075,5,66,0,0,1075,1076,5,121,0,0,1076,1077,5,73,0,0,1077,1078,5, + 110,0,0,1078,1079,5,100,0,0,1079,1080,5,101,0,0,1080,1081,5,120,0,0,1081, + 145,1,0,0,0,1082,1083,5,104,0,0,1083,1084,5,101,0,0,1084,1085,5,97,0, + 0,1085,1086,5,100,0,0,1086,147,1,0,0,0,1087,1088,5,70,0,0,1088,1089,5, + 111,0,0,1089,1090,5,110,0,0,1090,1091,5,116,0,0,1091,1092,5,82,0,0,1092, + 1093,5,101,0,0,1093,1094,5,118,0,0,1094,1095,5,105,0,0,1095,1096,5,115, + 0,0,1096,1097,5,105,0,0,1097,1098,5,111,0,0,1098,1099,5,110,0,0,1099, + 149,1,0,0,0,1100,1101,5,104,0,0,1101,1102,5,104,0,0,1102,1103,5,101,0, + 0,1103,1104,5,97,0,0,1104,151,1,0,0,0,1105,1106,5,65,0,0,1106,1107,5, + 115,0,0,1107,1108,5,99,0,0,1108,1109,5,101,0,0,1109,1110,5,110,0,0,1110, + 1111,5,100,0,0,1111,1112,5,101,0,0,1112,1113,5,114,0,0,1113,153,1,0,0, + 0,1114,1115,5,68,0,0,1115,1116,5,101,0,0,1116,1117,5,115,0,0,1117,1118, + 5,99,0,0,1118,1119,5,101,0,0,1119,1120,5,110,0,0,1120,1121,5,100,0,0, + 1121,1122,5,101,0,0,1122,1123,5,114,0,0,1123,155,1,0,0,0,1124,1125,5, + 76,0,0,1125,1126,5,105,0,0,1126,1127,5,110,0,0,1127,1128,5,101,0,0,1128, + 1129,5,71,0,0,1129,1130,5,97,0,0,1130,1131,5,112,0,0,1131,157,1,0,0,0, + 1132,1133,5,67,0,0,1133,1134,5,97,0,0,1134,1135,5,114,0,0,1135,1136,5, + 101,0,0,1136,1137,5,116,0,0,1137,1138,5,79,0,0,1138,1139,5,102,0,0,1139, + 1140,5,102,0,0,1140,1141,5,115,0,0,1141,1142,5,101,0,0,1142,1143,5,116, + 0,0,1143,159,1,0,0,0,1144,1145,5,110,0,0,1145,1146,5,97,0,0,1146,1147, + 5,109,0,0,1147,1148,5,101,0,0,1148,161,1,0,0,0,1149,1150,5,110,0,0,1150, + 1151,5,97,0,0,1151,1152,5,109,0,0,1152,1153,5,101,0,0,1153,1154,5,105, + 0,0,1154,1155,5,100,0,0,1155,163,1,0,0,0,1156,1157,5,79,0,0,1157,1158, + 5,83,0,0,1158,1159,5,47,0,0,1159,1160,5,50,0,0,1160,165,1,0,0,0,1161, + 1162,5,70,0,0,1162,1163,5,83,0,0,1163,1164,5,84,0,0,1164,1165,5,121,0, + 0,1165,1166,5,112,0,0,1166,1167,5,101,0,0,1167,167,1,0,0,0,1168,1169, + 5,102,0,0,1169,1170,5,115,0,0,1170,1171,5,84,0,0,1171,1172,5,121,0,0, + 1172,1173,5,112,0,0,1173,1174,5,101,0,0,1174,169,1,0,0,0,1175,1176,5, + 76,0,0,1176,1177,5,111,0,0,1177,1178,5,119,0,0,1178,1179,5,101,0,0,1179, + 1180,5,114,0,0,1180,1181,5,79,0,0,1181,1182,5,112,0,0,1182,1183,5,83, + 0,0,1183,1184,5,105,0,0,1184,1185,5,122,0,0,1185,1186,5,101,0,0,1186, + 171,1,0,0,0,1187,1188,5,85,0,0,1188,1189,5,112,0,0,1189,1190,5,112,0, + 0,1190,1191,5,101,0,0,1191,1192,5,114,0,0,1192,1193,5,79,0,0,1193,1194, + 5,112,0,0,1194,1195,5,83,0,0,1195,1196,5,105,0,0,1196,1197,5,122,0,0, + 1197,1198,5,101,0,0,1198,173,1,0,0,0,1199,1200,5,80,0,0,1200,1201,5,97, + 0,0,1201,1202,5,110,0,0,1202,1203,5,111,0,0,1203,1204,5,115,0,0,1204, + 1205,5,101,0,0,1205,175,1,0,0,0,1206,1207,5,84,0,0,1207,1208,5,121,0, + 0,1208,1209,5,112,0,0,1209,1210,5,111,0,0,1210,1211,5,65,0,0,1211,1212, + 5,115,0,0,1212,1213,5,99,0,0,1213,1214,5,101,0,0,1214,1215,5,110,0,0, + 1215,1216,5,100,0,0,1216,1217,5,101,0,0,1217,1218,5,114,0,0,1218,177, + 1,0,0,0,1219,1220,5,84,0,0,1220,1221,5,121,0,0,1221,1222,5,112,0,0,1222, + 1223,5,111,0,0,1223,1224,5,68,0,0,1224,1225,5,101,0,0,1225,1226,5,115, + 0,0,1226,1227,5,99,0,0,1227,1228,5,101,0,0,1228,1229,5,110,0,0,1229,1230, + 5,100,0,0,1230,1231,5,101,0,0,1231,1232,5,114,0,0,1232,179,1,0,0,0,1233, + 1234,5,84,0,0,1234,1235,5,121,0,0,1235,1236,5,112,0,0,1236,1237,5,111, + 0,0,1237,1238,5,76,0,0,1238,1239,5,105,0,0,1239,1240,5,110,0,0,1240,1241, + 5,101,0,0,1241,1242,5,71,0,0,1242,1243,5,97,0,0,1243,1244,5,112,0,0,1244, + 181,1,0,0,0,1245,1246,5,119,0,0,1246,1247,5,105,0,0,1247,1248,5,110,0, + 0,1248,1249,5,65,0,0,1249,1250,5,115,0,0,1250,1251,5,99,0,0,1251,1252, + 5,101,0,0,1252,1253,5,110,0,0,1253,1254,5,116,0,0,1254,183,1,0,0,0,1255, + 1256,5,119,0,0,1256,1257,5,105,0,0,1257,1258,5,110,0,0,1258,1259,5,68, + 0,0,1259,1260,5,101,0,0,1260,1261,5,115,0,0,1261,1262,5,99,0,0,1262,1263, + 5,101,0,0,1263,1264,5,110,0,0,1264,1265,5,116,0,0,1265,185,1,0,0,0,1266, + 1267,5,88,0,0,1267,1268,5,72,0,0,1268,1269,5,101,0,0,1269,1270,5,105, + 0,0,1270,1271,5,103,0,0,1271,1272,5,104,0,0,1272,1273,5,116,0,0,1273, + 187,1,0,0,0,1274,1275,5,67,0,0,1275,1276,5,97,0,0,1276,1277,5,112,0,0, + 1277,1278,5,72,0,0,1278,1279,5,101,0,0,1279,1280,5,105,0,0,1280,1281, + 5,103,0,0,1281,1282,5,104,0,0,1282,1283,5,116,0,0,1283,189,1,0,0,0,1284, + 1285,5,87,0,0,1285,1286,5,101,0,0,1286,1287,5,105,0,0,1287,1288,5,103, + 0,0,1288,1289,5,104,0,0,1289,1290,5,116,0,0,1290,1291,5,67,0,0,1291,1292, + 5,108,0,0,1292,1293,5,97,0,0,1293,1294,5,115,0,0,1294,1295,5,115,0,0, + 1295,191,1,0,0,0,1296,1297,5,87,0,0,1297,1298,5,105,0,0,1298,1299,5,100, + 0,0,1299,1300,5,116,0,0,1300,1301,5,104,0,0,1301,1302,5,67,0,0,1302,1303, + 5,108,0,0,1303,1304,5,97,0,0,1304,1305,5,115,0,0,1305,1306,5,115,0,0, + 1306,193,1,0,0,0,1307,1308,5,86,0,0,1308,1309,5,101,0,0,1309,1310,5,110, + 0,0,1310,1311,5,100,0,0,1311,1312,5,111,0,0,1312,1313,5,114,0,0,1313, + 195,1,0,0,0,1314,1315,5,85,0,0,1315,1316,5,110,0,0,1316,1317,5,105,0, + 0,1317,1318,5,99,0,0,1318,1319,5,111,0,0,1319,1320,5,100,0,0,1320,1321, + 5,101,0,0,1321,1322,5,82,0,0,1322,1323,5,97,0,0,1323,1324,5,110,0,0,1324, + 1325,5,103,0,0,1325,1326,5,101,0,0,1326,197,1,0,0,0,1327,1328,5,67,0, + 0,1328,1329,5,111,0,0,1329,1330,5,100,0,0,1330,1331,5,101,0,0,1331,1332, + 5,80,0,0,1332,1333,5,97,0,0,1333,1334,5,103,0,0,1334,1335,5,101,0,0,1335, + 1336,5,82,0,0,1336,1337,5,97,0,0,1337,1338,5,110,0,0,1338,1339,5,103, + 0,0,1339,1340,5,101,0,0,1340,199,1,0,0,0,1341,1342,5,70,0,0,1342,1343, + 5,97,0,0,1343,1344,5,109,0,0,1344,1345,5,105,0,0,1345,1346,5,108,0,0, + 1346,1347,5,121,0,0,1347,1348,5,67,0,0,1348,1349,5,108,0,0,1349,1350, + 5,97,0,0,1350,1351,5,115,0,0,1351,1352,5,115,0,0,1352,201,1,0,0,0,1353, + 1354,5,83,0,0,1354,1355,5,84,0,0,1355,1356,5,65,0,0,1356,1357,5,84,0, + 0,1357,203,1,0,0,0,1358,1359,5,69,0,0,1359,1360,5,108,0,0,1360,1361,5, + 105,0,0,1361,1362,5,100,0,0,1362,1363,5,101,0,0,1363,1364,5,100,0,0,1364, + 1365,5,70,0,0,1365,1366,5,97,0,0,1366,1367,5,108,0,0,1367,1368,5,108, + 0,0,1368,1369,5,98,0,0,1369,1370,5,97,0,0,1370,1371,5,99,0,0,1371,1372, + 5,107,0,0,1372,1373,5,78,0,0,1373,1374,5,97,0,0,1374,1375,5,109,0,0,1375, + 1376,5,101,0,0,1376,205,1,0,0,0,1377,1378,5,69,0,0,1378,1379,5,108,0, + 0,1379,1380,5,105,0,0,1380,1381,5,100,0,0,1381,1382,5,101,0,0,1382,1383, + 5,100,0,0,1383,1384,5,70,0,0,1384,1385,5,97,0,0,1385,1386,5,108,0,0,1386, + 1387,5,108,0,0,1387,1388,5,98,0,0,1388,1389,5,97,0,0,1389,1390,5,99,0, + 0,1390,1391,5,107,0,0,1391,1392,5,78,0,0,1392,1393,5,97,0,0,1393,1394, + 5,109,0,0,1394,1395,5,101,0,0,1395,1396,5,73,0,0,1396,1397,5,68,0,0,1397, + 207,1,0,0,0,1398,1399,5,68,0,0,1399,1400,5,101,0,0,1400,1401,5,115,0, + 0,1401,1402,5,105,0,0,1402,1403,5,103,0,0,1403,1404,5,110,0,0,1404,1405, + 5,65,0,0,1405,1406,5,120,0,0,1406,1407,5,105,0,0,1407,1408,5,115,0,0, + 1408,209,1,0,0,0,1409,1410,5,65,0,0,1410,1411,5,120,0,0,1411,1412,5,105, + 0,0,1412,1413,5,115,0,0,1413,1414,5,86,0,0,1414,1415,5,97,0,0,1415,1416, + 5,108,0,0,1416,1417,5,117,0,0,1417,1418,5,101,0,0,1418,211,1,0,0,0,1419, + 1420,5,102,0,0,1420,1421,5,108,0,0,1421,1422,5,97,0,0,1422,1423,5,103, + 0,0,1423,213,1,0,0,0,1424,1425,5,108,0,0,1425,1426,5,111,0,0,1426,1427, + 5,99,0,0,1427,1428,5,97,0,0,1428,1429,5,116,0,0,1429,1430,5,105,0,0,1430, + 1431,5,111,0,0,1431,1432,5,110,0,0,1432,215,1,0,0,0,1433,1434,5,69,0, + 0,1434,1435,5,108,0,0,1435,1436,5,105,0,0,1436,1437,5,100,0,0,1437,1438, + 5,97,0,0,1438,1439,5,98,0,0,1439,1440,5,108,0,0,1440,1441,5,101,0,0,1441, + 1442,5,65,0,0,1442,1443,5,120,0,0,1443,1444,5,105,0,0,1444,1445,5,115, + 0,0,1445,1446,5,86,0,0,1446,1447,5,97,0,0,1447,1448,5,108,0,0,1448,1449, + 5,117,0,0,1449,1450,5,101,0,0,1450,1451,5,78,0,0,1451,1452,5,97,0,0,1452, + 1453,5,109,0,0,1453,1454,5,101,0,0,1454,217,1,0,0,0,1455,1456,5,79,0, + 0,1456,1457,5,108,0,0,1457,1458,5,100,0,0,1458,1459,5,101,0,0,1459,1460, + 5,114,0,0,1460,1461,5,83,0,0,1461,1462,5,105,0,0,1462,1463,5,98,0,0,1463, + 1464,5,108,0,0,1464,1465,5,105,0,0,1465,1466,5,110,0,0,1466,1467,5,103, + 0,0,1467,1468,5,70,0,0,1468,1469,5,111,0,0,1469,1470,5,110,0,0,1470,1471, + 5,116,0,0,1471,1472,5,65,0,0,1472,1473,5,116,0,0,1473,1474,5,116,0,0, + 1474,1475,5,114,0,0,1475,1476,5,105,0,0,1476,1477,5,98,0,0,1477,1478, + 5,117,0,0,1478,1479,5,116,0,0,1479,1480,5,101,0,0,1480,219,1,0,0,0,1481, + 1482,5,118,0,0,1482,1483,5,104,0,0,1483,1484,5,101,0,0,1484,1485,5,97, + 0,0,1485,221,1,0,0,0,1486,1487,5,86,0,0,1487,1488,5,101,0,0,1488,1489, + 5,114,0,0,1489,1490,5,116,0,0,1490,1491,5,84,0,0,1491,1492,5,121,0,0, + 1492,1493,5,112,0,0,1493,1494,5,111,0,0,1494,1495,5,65,0,0,1495,1496, + 5,115,0,0,1496,1497,5,99,0,0,1497,1498,5,101,0,0,1498,1499,5,110,0,0, + 1499,1500,5,100,0,0,1500,1501,5,101,0,0,1501,1502,5,114,0,0,1502,223, + 1,0,0,0,1503,1504,5,86,0,0,1504,1505,5,101,0,0,1505,1506,5,114,0,0,1506, + 1507,5,116,0,0,1507,1508,5,84,0,0,1508,1509,5,121,0,0,1509,1510,5,112, + 0,0,1510,1511,5,111,0,0,1511,1512,5,68,0,0,1512,1513,5,101,0,0,1513,1514, + 5,115,0,0,1514,1515,5,99,0,0,1515,1516,5,101,0,0,1516,1517,5,110,0,0, + 1517,1518,5,100,0,0,1518,1519,5,101,0,0,1519,1520,5,114,0,0,1520,225, + 1,0,0,0,1521,1522,5,86,0,0,1522,1523,5,101,0,0,1523,1524,5,114,0,0,1524, + 1525,5,116,0,0,1525,1526,5,84,0,0,1526,1527,5,121,0,0,1527,1528,5,112, + 0,0,1528,1529,5,111,0,0,1529,1530,5,76,0,0,1530,1531,5,105,0,0,1531,1532, + 5,110,0,0,1532,1533,5,101,0,0,1533,1534,5,71,0,0,1534,1535,5,97,0,0,1535, + 1536,5,112,0,0,1536,227,1,0,0,0,1537,1538,5,118,0,0,1538,1539,5,109,0, + 0,1539,1540,5,116,0,0,1540,1541,5,120,0,0,1541,229,1,0,0,0,1542,1543, + 5,86,0,0,1543,1544,5,101,0,0,1544,1545,5,114,0,0,1545,1546,5,116,0,0, + 1546,1547,5,79,0,0,1547,1548,5,114,0,0,1548,1549,5,105,0,0,1549,1550, + 5,103,0,0,1550,1551,5,105,0,0,1551,1552,5,110,0,0,1552,1553,5,89,0,0, + 1553,231,1,0,0,0,1554,1555,5,86,0,0,1555,1556,5,101,0,0,1556,1557,5,114, + 0,0,1557,1558,5,116,0,0,1558,1559,5,65,0,0,1559,1560,5,100,0,0,1560,1561, + 5,118,0,0,1561,1562,5,97,0,0,1562,1563,5,110,0,0,1563,1564,5,99,0,0,1564, + 1565,5,101,0,0,1565,1566,5,89,0,0,1566,233,1,0,0,0,1567,1568,5,123,0, + 0,1568,235,1,0,0,0,1569,1570,5,125,0,0,1570,237,1,0,0,0,1571,1572,5,91, + 0,0,1572,239,1,0,0,0,1573,1574,5,93,0,0,1574,241,1,0,0,0,1575,1576,5, + 45,0,0,1576,243,1,0,0,0,1577,1578,5,59,0,0,1578,245,1,0,0,0,1579,1580, + 5,61,0,0,1580,247,1,0,0,0,1581,1582,5,39,0,0,1582,249,1,0,0,0,1583,1584, + 5,44,0,0,1584,251,1,0,0,0,1585,1586,5,34,0,0,1586,1587,1,0,0,0,1587,1588, + 6,123,3,0,1588,253,1,0,0,0,1589,1590,7,2,0,0,1590,255,1,0,0,0,1591,1594, + 3,254,124,0,1592,1594,7,3,0,0,1593,1591,1,0,0,0,1593,1592,1,0,0,0,1594, + 257,1,0,0,0,1595,1598,3,256,125,0,1596,1598,5,45,0,0,1597,1595,1,0,0, + 0,1597,1596,1,0,0,0,1598,259,1,0,0,0,1599,1600,5,64,0,0,1600,1604,3,254, + 124,0,1601,1603,3,258,126,0,1602,1601,1,0,0,0,1603,1606,1,0,0,0,1604, + 1602,1,0,0,0,1604,1605,1,0,0,0,1605,261,1,0,0,0,1606,1604,1,0,0,0,1607, + 1609,5,92,0,0,1608,1610,2,48,57,0,1609,1608,1,0,0,0,1610,1611,1,0,0,0, + 1611,1609,1,0,0,0,1611,1612,1,0,0,0,1612,263,1,0,0,0,1613,1616,3,258, + 126,0,1614,1616,7,4,0,0,1615,1613,1,0,0,0,1615,1614,1,0,0,0,1616,265, + 1,0,0,0,1617,1618,5,92,0,0,1618,1622,3,254,124,0,1619,1621,3,264,129, + 0,1620,1619,1,0,0,0,1621,1624,1,0,0,0,1622,1620,1,0,0,0,1622,1623,1,0, + 0,0,1623,267,1,0,0,0,1624,1622,1,0,0,0,1625,1629,3,254,124,0,1626,1628, + 3,256,125,0,1627,1626,1,0,0,0,1628,1631,1,0,0,0,1629,1627,1,0,0,0,1629, + 1630,1,0,0,0,1630,269,1,0,0,0,1631,1629,1,0,0,0,1632,1636,3,254,124,0, + 1633,1635,3,264,129,0,1634,1633,1,0,0,0,1635,1638,1,0,0,0,1636,1634,1, + 0,0,0,1636,1637,1,0,0,0,1637,271,1,0,0,0,1638,1636,1,0,0,0,1639,1641, + 5,45,0,0,1640,1639,1,0,0,0,1640,1641,1,0,0,0,1641,1643,1,0,0,0,1642,1644, + 2,48,57,0,1643,1642,1,0,0,0,1644,1645,1,0,0,0,1645,1643,1,0,0,0,1645, + 1646,1,0,0,0,1646,1647,1,0,0,0,1647,1649,5,46,0,0,1648,1650,2,48,57,0, + 1649,1648,1,0,0,0,1650,1651,1,0,0,0,1651,1649,1,0,0,0,1651,1652,1,0,0, + 0,1652,273,1,0,0,0,1653,1654,5,48,0,0,1654,1655,5,120,0,0,1655,1657,1, + 0,0,0,1656,1658,7,5,0,0,1657,1656,1,0,0,0,1658,1659,1,0,0,0,1659,1657, + 1,0,0,0,1659,1660,1,0,0,0,1660,275,1,0,0,0,1661,1663,5,48,0,0,1662,1664, + 2,48,55,0,1663,1662,1,0,0,0,1664,1665,1,0,0,0,1665,1663,1,0,0,0,1665, + 1666,1,0,0,0,1666,277,1,0,0,0,1667,1669,5,45,0,0,1668,1667,1,0,0,0,1668, + 1669,1,0,0,0,1669,1678,1,0,0,0,1670,1674,2,49,57,0,1671,1673,2,48,57, + 0,1672,1671,1,0,0,0,1673,1676,1,0,0,0,1674,1672,1,0,0,0,1674,1675,1,0, + 0,0,1675,1679,1,0,0,0,1676,1674,1,0,0,0,1677,1679,5,48,0,0,1678,1670, + 1,0,0,0,1678,1677,1,0,0,0,1679,279,1,0,0,0,1680,1681,7,6,0,0,1681,281, + 1,0,0,0,1682,1685,3,280,137,0,1683,1685,7,7,0,0,1684,1682,1,0,0,0,1684, + 1683,1,0,0,0,1685,283,1,0,0,0,1686,1688,3,280,137,0,1687,1689,3,282,138, + 0,1688,1687,1,0,0,0,1688,1689,1,0,0,0,1689,285,1,0,0,0,1690,1692,7,1, + 0,0,1691,1690,1,0,0,0,1692,1693,1,0,0,0,1693,1691,1,0,0,0,1693,1694,1, + 0,0,0,1694,1695,1,0,0,0,1695,1696,6,140,1,0,1696,287,1,0,0,0,1697,1701, + 3,280,137,0,1698,1700,3,282,138,0,1699,1698,1,0,0,0,1700,1703,1,0,0,0, + 1701,1699,1,0,0,0,1701,1702,1,0,0,0,1702,1704,1,0,0,0,1703,1701,1,0,0, + 0,1704,1705,6,141,4,0,1705,289,1,0,0,0,1706,1707,5,123,0,0,1707,1708, + 1,0,0,0,1708,1709,6,142,5,0,1709,291,1,0,0,0,1710,1712,5,13,0,0,1711, + 1710,1,0,0,0,1711,1712,1,0,0,0,1712,1713,1,0,0,0,1713,1714,5,10,0,0,1714, + 1715,5,125,0,0,1715,1719,1,0,0,0,1716,1718,7,8,0,0,1717,1716,1,0,0,0, + 1718,1721,1,0,0,0,1719,1717,1,0,0,0,1719,1720,1,0,0,0,1720,1722,1,0,0, + 0,1721,1719,1,0,0,0,1722,1726,3,280,137,0,1723,1725,3,282,138,0,1724, + 1723,1,0,0,0,1725,1728,1,0,0,0,1726,1724,1,0,0,0,1726,1727,1,0,0,0,1727, + 1732,1,0,0,0,1728,1726,1,0,0,0,1729,1731,7,8,0,0,1730,1729,1,0,0,0,1731, + 1734,1,0,0,0,1732,1730,1,0,0,0,1732,1733,1,0,0,0,1733,1735,1,0,0,0,1734, + 1732,1,0,0,0,1735,1736,5,59,0,0,1736,1737,4,143,0,0,1737,1738,1,0,0,0, + 1738,1739,6,143,6,0,1739,293,1,0,0,0,1740,1742,5,13,0,0,1741,1740,1,0, + 0,0,1741,1742,1,0,0,0,1742,1743,1,0,0,0,1743,1747,5,10,0,0,1744,1746, + 8,0,0,0,1745,1744,1,0,0,0,1746,1749,1,0,0,0,1747,1745,1,0,0,0,1747,1748, + 1,0,0,0,1748,295,1,0,0,0,1749,1747,1,0,0,0,1750,1752,7,1,0,0,1751,1750, + 1,0,0,0,1752,1753,1,0,0,0,1753,1751,1,0,0,0,1753,1754,1,0,0,0,1754,1755, + 1,0,0,0,1755,1756,6,145,1,0,1756,297,1,0,0,0,1757,1758,5,40,0,0,1758, + 1759,1,0,0,0,1759,1760,6,146,7,0,1760,299,1,0,0,0,1761,1763,8,9,0,0,1762, + 1761,1,0,0,0,1763,1764,1,0,0,0,1764,1762,1,0,0,0,1764,1765,1,0,0,0,1765, + 301,1,0,0,0,1766,1767,5,41,0,0,1767,1768,1,0,0,0,1768,1769,6,148,6,0, + 1769,303,1,0,0,0,1770,1772,8,10,0,0,1771,1770,1,0,0,0,1772,1775,1,0,0, + 0,1773,1771,1,0,0,0,1773,1774,1,0,0,0,1774,305,1,0,0,0,1775,1773,1,0, + 0,0,1776,1777,5,34,0,0,1777,1778,1,0,0,0,1778,1779,6,150,6,0,1779,307, + 1,0,0,0,37,0,1,2,3,4,5,331,339,1593,1597,1604,1611,1615,1622,1629,1636, + 1640,1645,1651,1659,1665,1668,1674,1678,1684,1688,1693,1701,1711,1719, + 1726,1732,1741,1747,1753,1764,1773,8,5,1,0,6,0,0,5,3,0,5,5,0,1,141,0, + 2,2,0,4,0,0,2,4,0 + }; + staticData->serializedATN = antlr4::atn::SerializedATNView(serializedATNSegment, sizeof(serializedATNSegment) / sizeof(serializedATNSegment[0])); + + antlr4::atn::ATNDeserializer deserializer; + staticData->atn = deserializer.deserialize(staticData->serializedATN); + + const size_t count = staticData->atn->getNumberOfDecisions(); + staticData->decisionToDFA.reserve(count); + for (size_t i = 0; i < count; i++) { + staticData->decisionToDFA.emplace_back(staticData->atn->getDecisionState(i), i); + } + featlexerLexerStaticData = std::move(staticData); +} + +} + FeatLexer::FeatLexer(CharStream *input) : Lexer(input) { - _interpreter = new atn::LexerATNSimulator(this, _atn, _decisionToDFA, _sharedContextCache); + FeatLexer::initialize(); + _interpreter = new atn::LexerATNSimulator(this, *featlexerLexerStaticData->atn, featlexerLexerStaticData->decisionToDFA, featlexerLexerStaticData->sharedContextCache); } FeatLexer::~FeatLexer() { @@ -21,31 +796,27 @@ std::string FeatLexer::getGrammarFileName() const { } const std::vector& FeatLexer::getRuleNames() const { - return _ruleNames; + return featlexerLexerStaticData->ruleNames; } const std::vector& FeatLexer::getChannelNames() const { - return _channelNames; + return featlexerLexerStaticData->channelNames; } const std::vector& FeatLexer::getModeNames() const { - return _modeNames; + return featlexerLexerStaticData->modeNames; } -const std::vector& FeatLexer::getTokenNames() const { - return _tokenNames; +const dfa::Vocabulary& FeatLexer::getVocabulary() const { + return featlexerLexerStaticData->vocabulary; } -dfa::Vocabulary& FeatLexer::getVocabulary() const { - return _vocabulary; -} - -const std::vector FeatLexer::getSerializedATN() const { - return _serializedATN; +antlr4::atn::SerializedATNView FeatLexer::getSerializedATN() const { + return featlexerLexerStaticData->serializedATN; } const atn::ATN& FeatLexer::getATN() const { - return _atn; + return *featlexerLexerStaticData->atn; } @@ -89,1378 +860,10 @@ bool FeatLexer::A_CLOSESempred(antlr4::RuleContext *_localctx, size_t predicateI } -// Static vars and initialization. -std::vector FeatLexer::_decisionToDFA; -atn::PredictionContextCache FeatLexer::_sharedContextCache; - -// We own the ATN which in turn owns the ATN states. -atn::ATN FeatLexer::_atn; -std::vector FeatLexer::_serializedATN; - -std::vector FeatLexer::_ruleNames = { - "ANON", "ANON_v", "COMMENT", "WHITESPACE", "INCLUDE", "FEATURE", "TABLE", - "SCRIPT", "LANGUAGE", "LANGSYS", "SUBTABLE", "LOOKUP", "LOOKUPFLAG", "NOTDEF", - "RIGHT_TO_LEFT", "IGNORE_BASE_GLYPHS", "IGNORE_LIGATURES", "IGNORE_MARKS", - "USE_MARK_FILTERING_SET", "MARK_ATTACHMENT_TYPE", "EXCLUDE_DFLT", "INCLUDE_DFLT", - "EXCLUDE_dflt", "INCLUDE_dflt", "USE_EXTENSION", "BEGINVALUE", "ENDVALUE", - "ENUMERATE", "ENUMERATE_v", "EXCEPT", "IGNORE", "SUBSTITUTE", "SUBSTITUTE_v", - "REVERSE", "REVERSE_v", "BY", "FROM", "POSITION", "POSITION_v", "PARAMETERS", - "FEATURE_NAMES", "CV_PARAMETERS", "CV_UI_LABEL", "CV_TOOLTIP", "CV_SAMPLE_TEXT", - "CV_PARAM_LABEL", "CV_CHARACTER", "SIZEMENUNAME", "CONTOURPOINT", "ANCHOR", - "ANCHOR_DEF", "VALUE_RECORD_DEF", "MARK", "MARK_CLASS", "CURSIVE", "MARKBASE", - "MARKLIG", "MARKLIG_v", "LIG_COMPONENT", "KNULL", "BASE", "HA_BTL", "VA_BTL", - "HA_BSL", "VA_BSL", "GDEF", "GLYPH_CLASS_DEF", "ATTACH", "LIG_CARET_BY_POS", - "LIG_CARET_BY_IDX", "HEAD", "FONT_REVISION", "HHEA", "ASCENDER", "DESCENDER", - "LINE_GAP", "CARET_OFFSET", "NAME", "NAMEID", "OS_2", "FS_TYPE", "FS_TYPE_v", - "OS2_LOWER_OP_SIZE", "OS2_UPPER_OP_SIZE", "PANOSE", "TYPO_ASCENDER", "TYPO_DESCENDER", - "TYPO_LINE_GAP", "WIN_ASCENT", "WIN_DESCENT", "X_HEIGHT", "CAP_HEIGHT", - "WEIGHT_CLASS", "WIDTH_CLASS", "VENDOR", "UNICODE_RANGE", "CODE_PAGE_RANGE", - "FAMILY_CLASS", "STAT", "ELIDED_FALLBACK_NAME", "ELIDED_FALLBACK_NAME_ID", - "DESIGN_AXIS", "AXIS_VALUE", "FLAG", "LOCATION", "AXIS_EAVN", "AXIS_OSFA", - "VHEA", "VERT_TYPO_ASCENDER", "VERT_TYPO_DESCENDER", "VERT_TYPO_LINE_GAP", - "VMTX", "VERT_ORIGIN_Y", "VERT_ADVANCE_Y", "LCBRACE", "RCBRACE", "LBRACKET", - "RBRACKET", "HYPHEN", "SEMI", "EQUALS", "MARKER", "COMMA", "QUOTE", "GNST", - "LCHR", "GCCHR", "GCLASS", "CID", "GNCHR", "ESCGNAME", "NAMELABEL", "EXTNAME", - "POINTNUM", "NUMEXT", "NUMOCT", "NUM", "TSTART", "TCHR", "CATCHTAG", "A_WHITESPACE", - "A_LABEL", "A_LBRACE", "A_CLOSE", "A_LINE", "I_WHITESPACE", "I_RPAREN", - "IFILE", "I_LPAREN", "STRVAL", "EQUOTE" -}; - -std::vector FeatLexer::_channelNames = { - "DEFAULT_TOKEN_CHANNEL", "HIDDEN" -}; - -std::vector FeatLexer::_modeNames = { - "DEFAULT_MODE", "Anon", "AnonContent", "Include", "Ifile", "String" -}; - -std::vector FeatLexer::_literalNames = { - "", "'anon'", "'anonymous'", "", "", "'include'", "'feature'", "'table'", - "'script'", "'language'", "'languagesystem'", "'subtable'", "'lookup'", - "'lookupflag'", "'.notdef'", "'RightToLeft'", "'IgnoreBaseGlyphs'", "'IgnoreLigatures'", - "'IgnoreMarks'", "'UseMarkFilteringSet'", "'MarkAttachmentType'", "'excludeDFLT'", - "'includeDFLT'", "'exclude_dflt'", "'include_dflt'", "'useExtension'", - "'<'", "'>'", "'enumerate'", "'enum'", "'except'", "'ignore'", "'substitute'", - "'sub'", "'reversesub'", "'rsub'", "'by'", "'from'", "'position'", "'pos'", - "'parameters'", "'featureNames'", "'cvParameters'", "'FeatUILabelNameID'", - "'FeatUITooltipTextNameID'", "'SampleTextNameID'", "'ParamUILabelNameID'", - "'Character'", "'sizemenuname'", "'contourpoint'", "'anchor'", "'anchorDef'", - "'valueRecordDef'", "'mark'", "'markClass'", "'cursive'", "'base'", "'ligature'", - "'lig'", "'ligComponent'", "'NULL'", "'BASE'", "'HorizAxis.BaseTagList'", - "'VertAxis.BaseTagList'", "'HorizAxis.BaseScriptList'", "'VertAxis.BaseScriptList'", - "'GDEF'", "'GlyphClassDef'", "'Attach'", "'LigatureCaretByPos'", "'LigatureCaretByIndex'", - "'head'", "'FontRevision'", "'hhea'", "'Ascender'", "'Descender'", "'LineGap'", - "'CaretOffset'", "'name'", "'nameid'", "'OS/2'", "'FSType'", "'fsType'", - "'LowerOpSize'", "'UpperOpSize'", "'Panose'", "'TypoAscender'", "'TypoDescender'", - "'TypoLineGap'", "'winAscent'", "'winDescent'", "'XHeight'", "'CapHeight'", - "'WeightClass'", "'WidthClass'", "'Vendor'", "'UnicodeRange'", "'CodePageRange'", - "'FamilyClass'", "'STAT'", "'ElidedFallbackName'", "'ElidedFallbackNameID'", - "'DesignAxis'", "'AxisValue'", "'flag'", "'location'", "'ElidableAxisValueName'", - "'OlderSiblingFontAttribute'", "'vhea'", "'VertTypoAscender'", "'VertTypoDescender'", - "'VertTypoLineGap'", "'vmtx'", "'VertOriginY'", "'VertAdvanceY'", "", - "'}'", "'['", "']'", "'-'", "';'", "'='", "'''", "','", "", "", "", "", - "", "", "", "", "", "", "", "", "", "", "", "", "", "'('", "", "')'" -}; - -std::vector FeatLexer::_symbolicNames = { - "", "ANON", "ANON_v", "COMMENT", "WHITESPACE", "INCLUDE", "FEATURE", "TABLE", - "SCRIPT", "LANGUAGE", "LANGSYS", "SUBTABLE", "LOOKUP", "LOOKUPFLAG", "NOTDEF", - "RIGHT_TO_LEFT", "IGNORE_BASE_GLYPHS", "IGNORE_LIGATURES", "IGNORE_MARKS", - "USE_MARK_FILTERING_SET", "MARK_ATTACHMENT_TYPE", "EXCLUDE_DFLT", "INCLUDE_DFLT", - "EXCLUDE_dflt", "INCLUDE_dflt", "USE_EXTENSION", "BEGINVALUE", "ENDVALUE", - "ENUMERATE", "ENUMERATE_v", "EXCEPT", "IGNORE", "SUBSTITUTE", "SUBSTITUTE_v", - "REVERSE", "REVERSE_v", "BY", "FROM", "POSITION", "POSITION_v", "PARAMETERS", - "FEATURE_NAMES", "CV_PARAMETERS", "CV_UI_LABEL", "CV_TOOLTIP", "CV_SAMPLE_TEXT", - "CV_PARAM_LABEL", "CV_CHARACTER", "SIZEMENUNAME", "CONTOURPOINT", "ANCHOR", - "ANCHOR_DEF", "VALUE_RECORD_DEF", "MARK", "MARK_CLASS", "CURSIVE", "MARKBASE", - "MARKLIG", "MARKLIG_v", "LIG_COMPONENT", "KNULL", "BASE", "HA_BTL", "VA_BTL", - "HA_BSL", "VA_BSL", "GDEF", "GLYPH_CLASS_DEF", "ATTACH", "LIG_CARET_BY_POS", - "LIG_CARET_BY_IDX", "HEAD", "FONT_REVISION", "HHEA", "ASCENDER", "DESCENDER", - "LINE_GAP", "CARET_OFFSET", "NAME", "NAMEID", "OS_2", "FS_TYPE", "FS_TYPE_v", - "OS2_LOWER_OP_SIZE", "OS2_UPPER_OP_SIZE", "PANOSE", "TYPO_ASCENDER", "TYPO_DESCENDER", - "TYPO_LINE_GAP", "WIN_ASCENT", "WIN_DESCENT", "X_HEIGHT", "CAP_HEIGHT", - "WEIGHT_CLASS", "WIDTH_CLASS", "VENDOR", "UNICODE_RANGE", "CODE_PAGE_RANGE", - "FAMILY_CLASS", "STAT", "ELIDED_FALLBACK_NAME", "ELIDED_FALLBACK_NAME_ID", - "DESIGN_AXIS", "AXIS_VALUE", "FLAG", "LOCATION", "AXIS_EAVN", "AXIS_OSFA", - "VHEA", "VERT_TYPO_ASCENDER", "VERT_TYPO_DESCENDER", "VERT_TYPO_LINE_GAP", - "VMTX", "VERT_ORIGIN_Y", "VERT_ADVANCE_Y", "LCBRACE", "RCBRACE", "LBRACKET", - "RBRACKET", "HYPHEN", "SEMI", "EQUALS", "MARKER", "COMMA", "QUOTE", "GCLASS", - "CID", "ESCGNAME", "NAMELABEL", "EXTNAME", "POINTNUM", "NUMEXT", "NUMOCT", - "NUM", "CATCHTAG", "A_WHITESPACE", "A_LABEL", "A_LBRACE", "A_CLOSE", "A_LINE", - "I_WHITESPACE", "I_RPAREN", "IFILE", "I_LPAREN", "STRVAL", "EQUOTE" -}; - -dfa::Vocabulary FeatLexer::_vocabulary(_literalNames, _symbolicNames); - -std::vector FeatLexer::_tokenNames; - -FeatLexer::Initializer::Initializer() { - // This code could be in a static initializer lambda, but VS doesn't allow access to private class members from there. - for (size_t i = 0; i < _symbolicNames.size(); ++i) { - std::string name = _vocabulary.getLiteralName(i); - if (name.empty()) { - name = _vocabulary.getSymbolicName(i); - } - - if (name.empty()) { - _tokenNames.push_back(""); - } else { - _tokenNames.push_back(name); - } - } - - static const uint16_t serializedATNSegment0[] = { - 0x3, 0x608b, 0xa72a, 0x8133, 0xb9ed, 0x417c, 0x3be7, 0x7786, 0x5964, - 0x2, 0x93, 0x6f6, 0x8, 0x1, 0x8, 0x1, 0x8, 0x1, 0x8, 0x1, 0x8, 0x1, - 0x8, 0x1, 0x4, 0x2, 0x9, 0x2, 0x4, 0x3, 0x9, 0x3, 0x4, 0x4, 0x9, - 0x4, 0x4, 0x5, 0x9, 0x5, 0x4, 0x6, 0x9, 0x6, 0x4, 0x7, 0x9, 0x7, - 0x4, 0x8, 0x9, 0x8, 0x4, 0x9, 0x9, 0x9, 0x4, 0xa, 0x9, 0xa, 0x4, - 0xb, 0x9, 0xb, 0x4, 0xc, 0x9, 0xc, 0x4, 0xd, 0x9, 0xd, 0x4, 0xe, - 0x9, 0xe, 0x4, 0xf, 0x9, 0xf, 0x4, 0x10, 0x9, 0x10, 0x4, 0x11, 0x9, - 0x11, 0x4, 0x12, 0x9, 0x12, 0x4, 0x13, 0x9, 0x13, 0x4, 0x14, 0x9, - 0x14, 0x4, 0x15, 0x9, 0x15, 0x4, 0x16, 0x9, 0x16, 0x4, 0x17, 0x9, - 0x17, 0x4, 0x18, 0x9, 0x18, 0x4, 0x19, 0x9, 0x19, 0x4, 0x1a, 0x9, - 0x1a, 0x4, 0x1b, 0x9, 0x1b, 0x4, 0x1c, 0x9, 0x1c, 0x4, 0x1d, 0x9, - 0x1d, 0x4, 0x1e, 0x9, 0x1e, 0x4, 0x1f, 0x9, 0x1f, 0x4, 0x20, 0x9, - 0x20, 0x4, 0x21, 0x9, 0x21, 0x4, 0x22, 0x9, 0x22, 0x4, 0x23, 0x9, - 0x23, 0x4, 0x24, 0x9, 0x24, 0x4, 0x25, 0x9, 0x25, 0x4, 0x26, 0x9, - 0x26, 0x4, 0x27, 0x9, 0x27, 0x4, 0x28, 0x9, 0x28, 0x4, 0x29, 0x9, - 0x29, 0x4, 0x2a, 0x9, 0x2a, 0x4, 0x2b, 0x9, 0x2b, 0x4, 0x2c, 0x9, - 0x2c, 0x4, 0x2d, 0x9, 0x2d, 0x4, 0x2e, 0x9, 0x2e, 0x4, 0x2f, 0x9, - 0x2f, 0x4, 0x30, 0x9, 0x30, 0x4, 0x31, 0x9, 0x31, 0x4, 0x32, 0x9, - 0x32, 0x4, 0x33, 0x9, 0x33, 0x4, 0x34, 0x9, 0x34, 0x4, 0x35, 0x9, - 0x35, 0x4, 0x36, 0x9, 0x36, 0x4, 0x37, 0x9, 0x37, 0x4, 0x38, 0x9, - 0x38, 0x4, 0x39, 0x9, 0x39, 0x4, 0x3a, 0x9, 0x3a, 0x4, 0x3b, 0x9, - 0x3b, 0x4, 0x3c, 0x9, 0x3c, 0x4, 0x3d, 0x9, 0x3d, 0x4, 0x3e, 0x9, - 0x3e, 0x4, 0x3f, 0x9, 0x3f, 0x4, 0x40, 0x9, 0x40, 0x4, 0x41, 0x9, - 0x41, 0x4, 0x42, 0x9, 0x42, 0x4, 0x43, 0x9, 0x43, 0x4, 0x44, 0x9, - 0x44, 0x4, 0x45, 0x9, 0x45, 0x4, 0x46, 0x9, 0x46, 0x4, 0x47, 0x9, - 0x47, 0x4, 0x48, 0x9, 0x48, 0x4, 0x49, 0x9, 0x49, 0x4, 0x4a, 0x9, - 0x4a, 0x4, 0x4b, 0x9, 0x4b, 0x4, 0x4c, 0x9, 0x4c, 0x4, 0x4d, 0x9, - 0x4d, 0x4, 0x4e, 0x9, 0x4e, 0x4, 0x4f, 0x9, 0x4f, 0x4, 0x50, 0x9, - 0x50, 0x4, 0x51, 0x9, 0x51, 0x4, 0x52, 0x9, 0x52, 0x4, 0x53, 0x9, - 0x53, 0x4, 0x54, 0x9, 0x54, 0x4, 0x55, 0x9, 0x55, 0x4, 0x56, 0x9, - 0x56, 0x4, 0x57, 0x9, 0x57, 0x4, 0x58, 0x9, 0x58, 0x4, 0x59, 0x9, - 0x59, 0x4, 0x5a, 0x9, 0x5a, 0x4, 0x5b, 0x9, 0x5b, 0x4, 0x5c, 0x9, - 0x5c, 0x4, 0x5d, 0x9, 0x5d, 0x4, 0x5e, 0x9, 0x5e, 0x4, 0x5f, 0x9, - 0x5f, 0x4, 0x60, 0x9, 0x60, 0x4, 0x61, 0x9, 0x61, 0x4, 0x62, 0x9, - 0x62, 0x4, 0x63, 0x9, 0x63, 0x4, 0x64, 0x9, 0x64, 0x4, 0x65, 0x9, - 0x65, 0x4, 0x66, 0x9, 0x66, 0x4, 0x67, 0x9, 0x67, 0x4, 0x68, 0x9, - 0x68, 0x4, 0x69, 0x9, 0x69, 0x4, 0x6a, 0x9, 0x6a, 0x4, 0x6b, 0x9, - 0x6b, 0x4, 0x6c, 0x9, 0x6c, 0x4, 0x6d, 0x9, 0x6d, 0x4, 0x6e, 0x9, - 0x6e, 0x4, 0x6f, 0x9, 0x6f, 0x4, 0x70, 0x9, 0x70, 0x4, 0x71, 0x9, - 0x71, 0x4, 0x72, 0x9, 0x72, 0x4, 0x73, 0x9, 0x73, 0x4, 0x74, 0x9, - 0x74, 0x4, 0x75, 0x9, 0x75, 0x4, 0x76, 0x9, 0x76, 0x4, 0x77, 0x9, - 0x77, 0x4, 0x78, 0x9, 0x78, 0x4, 0x79, 0x9, 0x79, 0x4, 0x7a, 0x9, - 0x7a, 0x4, 0x7b, 0x9, 0x7b, 0x4, 0x7c, 0x9, 0x7c, 0x4, 0x7d, 0x9, - 0x7d, 0x4, 0x7e, 0x9, 0x7e, 0x4, 0x7f, 0x9, 0x7f, 0x4, 0x80, 0x9, - 0x80, 0x4, 0x81, 0x9, 0x81, 0x4, 0x82, 0x9, 0x82, 0x4, 0x83, 0x9, - 0x83, 0x4, 0x84, 0x9, 0x84, 0x4, 0x85, 0x9, 0x85, 0x4, 0x86, 0x9, - 0x86, 0x4, 0x87, 0x9, 0x87, 0x4, 0x88, 0x9, 0x88, 0x4, 0x89, 0x9, - 0x89, 0x4, 0x8a, 0x9, 0x8a, 0x4, 0x8b, 0x9, 0x8b, 0x4, 0x8c, 0x9, - 0x8c, 0x4, 0x8d, 0x9, 0x8d, 0x4, 0x8e, 0x9, 0x8e, 0x4, 0x8f, 0x9, - 0x8f, 0x4, 0x90, 0x9, 0x90, 0x4, 0x91, 0x9, 0x91, 0x4, 0x92, 0x9, - 0x92, 0x4, 0x93, 0x9, 0x93, 0x4, 0x94, 0x9, 0x94, 0x4, 0x95, 0x9, - 0x95, 0x4, 0x96, 0x9, 0x96, 0x4, 0x97, 0x9, 0x97, 0x4, 0x98, 0x9, - 0x98, 0x3, 0x2, 0x3, 0x2, 0x3, 0x2, 0x3, 0x2, 0x3, 0x2, 0x3, 0x2, - 0x3, 0x2, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, - 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, - 0x3, 0x4, 0x3, 0x4, 0x7, 0x4, 0x14c, 0xa, 0x4, 0xc, 0x4, 0xe, 0x4, - 0x14f, 0xb, 0x4, 0x3, 0x4, 0x3, 0x4, 0x3, 0x5, 0x6, 0x5, 0x154, 0xa, - 0x5, 0xd, 0x5, 0xe, 0x5, 0x155, 0x3, 0x5, 0x3, 0x5, 0x3, 0x6, 0x3, - 0x6, 0x3, 0x6, 0x3, 0x6, 0x3, 0x6, 0x3, 0x6, 0x3, 0x6, 0x3, 0x6, - 0x3, 0x6, 0x3, 0x6, 0x3, 0x7, 0x3, 0x7, 0x3, 0x7, 0x3, 0x7, 0x3, - 0x7, 0x3, 0x7, 0x3, 0x7, 0x3, 0x7, 0x3, 0x8, 0x3, 0x8, 0x3, 0x8, - 0x3, 0x8, 0x3, 0x8, 0x3, 0x8, 0x3, 0x9, 0x3, 0x9, 0x3, 0x9, 0x3, - 0x9, 0x3, 0x9, 0x3, 0x9, 0x3, 0x9, 0x3, 0xa, 0x3, 0xa, 0x3, 0xa, - 0x3, 0xa, 0x3, 0xa, 0x3, 0xa, 0x3, 0xa, 0x3, 0xa, 0x3, 0xa, 0x3, - 0xb, 0x3, 0xb, 0x3, 0xb, 0x3, 0xb, 0x3, 0xb, 0x3, 0xb, 0x3, 0xb, - 0x3, 0xb, 0x3, 0xb, 0x3, 0xb, 0x3, 0xb, 0x3, 0xb, 0x3, 0xb, 0x3, - 0xb, 0x3, 0xb, 0x3, 0xc, 0x3, 0xc, 0x3, 0xc, 0x3, 0xc, 0x3, 0xc, - 0x3, 0xc, 0x3, 0xc, 0x3, 0xc, 0x3, 0xc, 0x3, 0xd, 0x3, 0xd, 0x3, - 0xd, 0x3, 0xd, 0x3, 0xd, 0x3, 0xd, 0x3, 0xd, 0x3, 0xe, 0x3, 0xe, - 0x3, 0xe, 0x3, 0xe, 0x3, 0xe, 0x3, 0xe, 0x3, 0xe, 0x3, 0xe, 0x3, - 0xe, 0x3, 0xe, 0x3, 0xe, 0x3, 0xf, 0x3, 0xf, 0x3, 0xf, 0x3, 0xf, - 0x3, 0xf, 0x3, 0xf, 0x3, 0xf, 0x3, 0xf, 0x3, 0x10, 0x3, 0x10, 0x3, - 0x10, 0x3, 0x10, 0x3, 0x10, 0x3, 0x10, 0x3, 0x10, 0x3, 0x10, 0x3, - 0x10, 0x3, 0x10, 0x3, 0x10, 0x3, 0x10, 0x3, 0x11, 0x3, 0x11, 0x3, - 0x11, 0x3, 0x11, 0x3, 0x11, 0x3, 0x11, 0x3, 0x11, 0x3, 0x11, 0x3, - 0x11, 0x3, 0x11, 0x3, 0x11, 0x3, 0x11, 0x3, 0x11, 0x3, 0x11, 0x3, - 0x11, 0x3, 0x11, 0x3, 0x11, 0x3, 0x12, 0x3, 0x12, 0x3, 0x12, 0x3, - 0x12, 0x3, 0x12, 0x3, 0x12, 0x3, 0x12, 0x3, 0x12, 0x3, 0x12, 0x3, - 0x12, 0x3, 0x12, 0x3, 0x12, 0x3, 0x12, 0x3, 0x12, 0x3, 0x12, 0x3, - 0x12, 0x3, 0x13, 0x3, 0x13, 0x3, 0x13, 0x3, 0x13, 0x3, 0x13, 0x3, - 0x13, 0x3, 0x13, 0x3, 0x13, 0x3, 0x13, 0x3, 0x13, 0x3, 0x13, 0x3, - 0x13, 0x3, 0x14, 0x3, 0x14, 0x3, 0x14, 0x3, 0x14, 0x3, 0x14, 0x3, - 0x14, 0x3, 0x14, 0x3, 0x14, 0x3, 0x14, 0x3, 0x14, 0x3, 0x14, 0x3, - 0x14, 0x3, 0x14, 0x3, 0x14, 0x3, 0x14, 0x3, 0x14, 0x3, 0x14, 0x3, - 0x14, 0x3, 0x14, 0x3, 0x14, 0x3, 0x15, 0x3, 0x15, 0x3, 0x15, 0x3, - 0x15, 0x3, 0x15, 0x3, 0x15, 0x3, 0x15, 0x3, 0x15, 0x3, 0x15, 0x3, - 0x15, 0x3, 0x15, 0x3, 0x15, 0x3, 0x15, 0x3, 0x15, 0x3, 0x15, 0x3, - 0x15, 0x3, 0x15, 0x3, 0x15, 0x3, 0x15, 0x3, 0x16, 0x3, 0x16, 0x3, - 0x16, 0x3, 0x16, 0x3, 0x16, 0x3, 0x16, 0x3, 0x16, 0x3, 0x16, 0x3, - 0x16, 0x3, 0x16, 0x3, 0x16, 0x3, 0x16, 0x3, 0x17, 0x3, 0x17, 0x3, - 0x17, 0x3, 0x17, 0x3, 0x17, 0x3, 0x17, 0x3, 0x17, 0x3, 0x17, 0x3, - 0x17, 0x3, 0x17, 0x3, 0x17, 0x3, 0x17, 0x3, 0x18, 0x3, 0x18, 0x3, - 0x18, 0x3, 0x18, 0x3, 0x18, 0x3, 0x18, 0x3, 0x18, 0x3, 0x18, 0x3, - 0x18, 0x3, 0x18, 0x3, 0x18, 0x3, 0x18, 0x3, 0x18, 0x3, 0x19, 0x3, - 0x19, 0x3, 0x19, 0x3, 0x19, 0x3, 0x19, 0x3, 0x19, 0x3, 0x19, 0x3, - 0x19, 0x3, 0x19, 0x3, 0x19, 0x3, 0x19, 0x3, 0x19, 0x3, 0x19, 0x3, - 0x1a, 0x3, 0x1a, 0x3, 0x1a, 0x3, 0x1a, 0x3, 0x1a, 0x3, 0x1a, 0x3, - 0x1a, 0x3, 0x1a, 0x3, 0x1a, 0x3, 0x1a, 0x3, 0x1a, 0x3, 0x1a, 0x3, - 0x1a, 0x3, 0x1b, 0x3, 0x1b, 0x3, 0x1c, 0x3, 0x1c, 0x3, 0x1d, 0x3, - 0x1d, 0x3, 0x1d, 0x3, 0x1d, 0x3, 0x1d, 0x3, 0x1d, 0x3, 0x1d, 0x3, - 0x1d, 0x3, 0x1d, 0x3, 0x1d, 0x3, 0x1e, 0x3, 0x1e, 0x3, 0x1e, 0x3, - 0x1e, 0x3, 0x1e, 0x3, 0x1f, 0x3, 0x1f, 0x3, 0x1f, 0x3, 0x1f, 0x3, - 0x1f, 0x3, 0x1f, 0x3, 0x1f, 0x3, 0x20, 0x3, 0x20, 0x3, 0x20, 0x3, - 0x20, 0x3, 0x20, 0x3, 0x20, 0x3, 0x20, 0x3, 0x21, 0x3, 0x21, 0x3, - 0x21, 0x3, 0x21, 0x3, 0x21, 0x3, 0x21, 0x3, 0x21, 0x3, 0x21, 0x3, - 0x21, 0x3, 0x21, 0x3, 0x21, 0x3, 0x22, 0x3, 0x22, 0x3, 0x22, 0x3, - 0x22, 0x3, 0x23, 0x3, 0x23, 0x3, 0x23, 0x3, 0x23, 0x3, 0x23, 0x3, - 0x23, 0x3, 0x23, 0x3, 0x23, 0x3, 0x23, 0x3, 0x23, 0x3, 0x23, 0x3, - 0x24, 0x3, 0x24, 0x3, 0x24, 0x3, 0x24, 0x3, 0x24, 0x3, 0x25, 0x3, - 0x25, 0x3, 0x25, 0x3, 0x26, 0x3, 0x26, 0x3, 0x26, 0x3, 0x26, 0x3, - 0x26, 0x3, 0x27, 0x3, 0x27, 0x3, 0x27, 0x3, 0x27, 0x3, 0x27, 0x3, - 0x27, 0x3, 0x27, 0x3, 0x27, 0x3, 0x27, 0x3, 0x28, 0x3, 0x28, 0x3, - 0x28, 0x3, 0x28, 0x3, 0x29, 0x3, 0x29, 0x3, 0x29, 0x3, 0x29, 0x3, - 0x29, 0x3, 0x29, 0x3, 0x29, 0x3, 0x29, 0x3, 0x29, 0x3, 0x29, 0x3, - 0x29, 0x3, 0x2a, 0x3, 0x2a, 0x3, 0x2a, 0x3, 0x2a, 0x3, 0x2a, 0x3, - 0x2a, 0x3, 0x2a, 0x3, 0x2a, 0x3, 0x2a, 0x3, 0x2a, 0x3, 0x2a, 0x3, - 0x2a, 0x3, 0x2a, 0x3, 0x2b, 0x3, 0x2b, 0x3, 0x2b, 0x3, 0x2b, 0x3, - 0x2b, 0x3, 0x2b, 0x3, 0x2b, 0x3, 0x2b, 0x3, 0x2b, 0x3, 0x2b, 0x3, - 0x2b, 0x3, 0x2b, 0x3, 0x2b, 0x3, 0x2c, 0x3, 0x2c, 0x3, 0x2c, 0x3, - 0x2c, 0x3, 0x2c, 0x3, 0x2c, 0x3, 0x2c, 0x3, 0x2c, 0x3, 0x2c, 0x3, - 0x2c, 0x3, 0x2c, 0x3, 0x2c, 0x3, 0x2c, 0x3, 0x2c, 0x3, 0x2c, 0x3, - 0x2c, 0x3, 0x2c, 0x3, 0x2c, 0x3, 0x2d, 0x3, 0x2d, 0x3, 0x2d, 0x3, - 0x2d, 0x3, 0x2d, 0x3, 0x2d, 0x3, 0x2d, 0x3, 0x2d, 0x3, 0x2d, 0x3, - 0x2d, 0x3, 0x2d, 0x3, 0x2d, 0x3, 0x2d, 0x3, 0x2d, 0x3, 0x2d, 0x3, - 0x2d, 0x3, 0x2d, 0x3, 0x2d, 0x3, 0x2d, 0x3, 0x2d, 0x3, 0x2d, 0x3, - 0x2d, 0x3, 0x2d, 0x3, 0x2d, 0x3, 0x2e, 0x3, 0x2e, 0x3, 0x2e, 0x3, - 0x2e, 0x3, 0x2e, 0x3, 0x2e, 0x3, 0x2e, 0x3, 0x2e, 0x3, 0x2e, 0x3, - 0x2e, 0x3, 0x2e, 0x3, 0x2e, 0x3, 0x2e, 0x3, 0x2e, 0x3, 0x2e, 0x3, - 0x2e, 0x3, 0x2e, 0x3, 0x2f, 0x3, 0x2f, 0x3, 0x2f, 0x3, 0x2f, 0x3, - 0x2f, 0x3, 0x2f, 0x3, 0x2f, 0x3, 0x2f, 0x3, 0x2f, 0x3, 0x2f, 0x3, - 0x2f, 0x3, 0x2f, 0x3, 0x2f, 0x3, 0x2f, 0x3, 0x2f, 0x3, 0x2f, 0x3, - 0x2f, 0x3, 0x2f, 0x3, 0x2f, 0x3, 0x30, 0x3, 0x30, 0x3, 0x30, 0x3, - 0x30, 0x3, 0x30, 0x3, 0x30, 0x3, 0x30, 0x3, 0x30, 0x3, 0x30, 0x3, - 0x30, 0x3, 0x31, 0x3, 0x31, 0x3, 0x31, 0x3, 0x31, 0x3, 0x31, 0x3, - 0x31, 0x3, 0x31, 0x3, 0x31, 0x3, 0x31, 0x3, 0x31, 0x3, 0x31, 0x3, - 0x31, 0x3, 0x31, 0x3, 0x32, 0x3, 0x32, 0x3, 0x32, 0x3, 0x32, 0x3, - 0x32, 0x3, 0x32, 0x3, 0x32, 0x3, 0x32, 0x3, 0x32, 0x3, 0x32, 0x3, - 0x32, 0x3, 0x32, 0x3, 0x32, 0x3, 0x33, 0x3, 0x33, 0x3, 0x33, 0x3, - 0x33, 0x3, 0x33, 0x3, 0x33, 0x3, 0x33, 0x3, 0x34, 0x3, 0x34, 0x3, - 0x34, 0x3, 0x34, 0x3, 0x34, 0x3, 0x34, 0x3, 0x34, 0x3, 0x34, 0x3, - 0x34, 0x3, 0x34, 0x3, 0x35, 0x3, 0x35, 0x3, 0x35, 0x3, 0x35, 0x3, - 0x35, 0x3, 0x35, 0x3, 0x35, 0x3, 0x35, 0x3, 0x35, 0x3, 0x35, 0x3, - 0x35, 0x3, 0x35, 0x3, 0x35, 0x3, 0x35, 0x3, 0x35, 0x3, 0x36, 0x3, - 0x36, 0x3, 0x36, 0x3, 0x36, 0x3, 0x36, 0x3, 0x37, 0x3, 0x37, 0x3, - 0x37, 0x3, 0x37, 0x3, 0x37, 0x3, 0x37, 0x3, 0x37, 0x3, 0x37, 0x3, - 0x37, 0x3, 0x37, 0x3, 0x38, 0x3, 0x38, 0x3, 0x38, 0x3, 0x38, 0x3, - 0x38, 0x3, 0x38, 0x3, 0x38, 0x3, 0x38, 0x3, 0x39, 0x3, 0x39, 0x3, - 0x39, 0x3, 0x39, 0x3, 0x39, 0x3, 0x3a, 0x3, 0x3a, 0x3, 0x3a, 0x3, - 0x3a, 0x3, 0x3a, 0x3, 0x3a, 0x3, 0x3a, 0x3, 0x3a, 0x3, 0x3a, 0x3, - 0x3b, 0x3, 0x3b, 0x3, 0x3b, 0x3, 0x3b, 0x3, 0x3c, 0x3, 0x3c, 0x3, - 0x3c, 0x3, 0x3c, 0x3, 0x3c, 0x3, 0x3c, 0x3, 0x3c, 0x3, 0x3c, 0x3, - 0x3c, 0x3, 0x3c, 0x3, 0x3c, 0x3, 0x3c, 0x3, 0x3c, 0x3, 0x3d, 0x3, - 0x3d, 0x3, 0x3d, 0x3, 0x3d, 0x3, 0x3d, 0x3, 0x3e, 0x3, 0x3e, 0x3, - 0x3e, 0x3, 0x3e, 0x3, 0x3e, 0x3, 0x3f, 0x3, 0x3f, 0x3, 0x3f, 0x3, - 0x3f, 0x3, 0x3f, 0x3, 0x3f, 0x3, 0x3f, 0x3, 0x3f, 0x3, 0x3f, 0x3, - 0x3f, 0x3, 0x3f, 0x3, 0x3f, 0x3, 0x3f, 0x3, 0x3f, 0x3, 0x3f, 0x3, - 0x3f, 0x3, 0x3f, 0x3, 0x3f, 0x3, 0x3f, 0x3, 0x3f, 0x3, 0x3f, 0x3, - 0x3f, 0x3, 0x40, 0x3, 0x40, 0x3, 0x40, 0x3, 0x40, 0x3, 0x40, 0x3, - 0x40, 0x3, 0x40, 0x3, 0x40, 0x3, 0x40, 0x3, 0x40, 0x3, 0x40, 0x3, - 0x40, 0x3, 0x40, 0x3, 0x40, 0x3, 0x40, 0x3, 0x40, 0x3, 0x40, 0x3, - 0x40, 0x3, 0x40, 0x3, 0x40, 0x3, 0x40, 0x3, 0x41, 0x3, 0x41, 0x3, - 0x41, 0x3, 0x41, 0x3, 0x41, 0x3, 0x41, 0x3, 0x41, 0x3, 0x41, 0x3, - 0x41, 0x3, 0x41, 0x3, 0x41, 0x3, 0x41, 0x3, 0x41, 0x3, 0x41, 0x3, - 0x41, 0x3, 0x41, 0x3, 0x41, 0x3, 0x41, 0x3, 0x41, 0x3, 0x41, 0x3, - 0x41, 0x3, 0x41, 0x3, 0x41, 0x3, 0x41, 0x3, 0x41, 0x3, 0x42, 0x3, - 0x42, 0x3, 0x42, 0x3, 0x42, 0x3, 0x42, 0x3, 0x42, 0x3, 0x42, 0x3, - 0x42, 0x3, 0x42, 0x3, 0x42, 0x3, 0x42, 0x3, 0x42, 0x3, 0x42, 0x3, - 0x42, 0x3, 0x42, 0x3, 0x42, 0x3, 0x42, 0x3, 0x42, 0x3, 0x42, 0x3, - 0x42, 0x3, 0x42, 0x3, 0x42, 0x3, 0x42, 0x3, 0x42, 0x3, 0x43, 0x3, - 0x43, 0x3, 0x43, 0x3, 0x43, 0x3, 0x43, 0x3, 0x44, 0x3, 0x44, 0x3, - 0x44, 0x3, 0x44, 0x3, 0x44, 0x3, 0x44, 0x3, 0x44, 0x3, 0x44, 0x3, - 0x44, 0x3, 0x44, 0x3, 0x44, 0x3, 0x44, 0x3, 0x44, 0x3, 0x44, 0x3, - 0x45, 0x3, 0x45, 0x3, 0x45, 0x3, 0x45, 0x3, 0x45, 0x3, 0x45, 0x3, - 0x45, 0x3, 0x46, 0x3, 0x46, 0x3, 0x46, 0x3, 0x46, 0x3, 0x46, 0x3, - 0x46, 0x3, 0x46, 0x3, 0x46, 0x3, 0x46, 0x3, 0x46, 0x3, 0x46, 0x3, - 0x46, 0x3, 0x46, 0x3, 0x46, 0x3, 0x46, 0x3, 0x46, 0x3, 0x46, 0x3, - 0x46, 0x3, 0x46, 0x3, 0x47, 0x3, 0x47, 0x3, 0x47, 0x3, 0x47, 0x3, - 0x47, 0x3, 0x47, 0x3, 0x47, 0x3, 0x47, 0x3, 0x47, 0x3, 0x47, 0x3, - 0x47, 0x3, 0x47, 0x3, 0x47, 0x3, 0x47, 0x3, 0x47, 0x3, 0x47, 0x3, - 0x47, 0x3, 0x47, 0x3, 0x47, 0x3, 0x47, 0x3, 0x47, 0x3, 0x48, 0x3, - 0x48, 0x3, 0x48, 0x3, 0x48, 0x3, 0x48, 0x3, 0x49, 0x3, 0x49, 0x3, - 0x49, 0x3, 0x49, 0x3, 0x49, 0x3, 0x49, 0x3, 0x49, 0x3, 0x49, 0x3, - 0x49, 0x3, 0x49, 0x3, 0x49, 0x3, 0x49, 0x3, 0x49, 0x3, 0x4a, 0x3, - 0x4a, 0x3, 0x4a, 0x3, 0x4a, 0x3, 0x4a, 0x3, 0x4b, 0x3, 0x4b, 0x3, - 0x4b, 0x3, 0x4b, 0x3, 0x4b, 0x3, 0x4b, 0x3, 0x4b, 0x3, 0x4b, 0x3, - 0x4b, 0x3, 0x4c, 0x3, 0x4c, 0x3, 0x4c, 0x3, 0x4c, 0x3, 0x4c, 0x3, - 0x4c, 0x3, 0x4c, 0x3, 0x4c, 0x3, 0x4c, 0x3, 0x4c, 0x3, 0x4d, 0x3, - 0x4d, 0x3, 0x4d, 0x3, 0x4d, 0x3, 0x4d, 0x3, 0x4d, 0x3, 0x4d, 0x3, - 0x4d, 0x3, 0x4e, 0x3, 0x4e, 0x3, 0x4e, 0x3, 0x4e, 0x3, 0x4e, 0x3, - 0x4e, 0x3, 0x4e, 0x3, 0x4e, 0x3, 0x4e, 0x3, 0x4e, 0x3, 0x4e, 0x3, - 0x4e, 0x3, 0x4f, 0x3, 0x4f, 0x3, 0x4f, 0x3, 0x4f, 0x3, 0x4f, 0x3, - 0x50, 0x3, 0x50, 0x3, 0x50, 0x3, 0x50, 0x3, 0x50, 0x3, 0x50, 0x3, - 0x50, 0x3, 0x51, 0x3, 0x51, 0x3, 0x51, 0x3, 0x51, 0x3, 0x51, 0x3, - 0x52, 0x3, 0x52, 0x3, 0x52, 0x3, 0x52, 0x3, 0x52, 0x3, 0x52, 0x3, - 0x52, 0x3, 0x53, 0x3, 0x53, 0x3, 0x53, 0x3, 0x53, 0x3, 0x53, 0x3, - 0x53, 0x3, 0x53, 0x3, 0x54, 0x3, 0x54, 0x3, 0x54, 0x3, 0x54, 0x3, - 0x54, 0x3, 0x54, 0x3, 0x54, 0x3, 0x54, 0x3, 0x54, 0x3, 0x54, 0x3, - 0x54, 0x3, 0x54, 0x3, 0x55, 0x3, 0x55, 0x3, 0x55, 0x3, 0x55, 0x3, - 0x55, 0x3, 0x55, 0x3, 0x55, 0x3, 0x55, 0x3, 0x55, 0x3, 0x55, 0x3, - 0x55, 0x3, 0x55, 0x3, 0x56, 0x3, 0x56, 0x3, 0x56, 0x3, 0x56, 0x3, - 0x56, 0x3, 0x56, 0x3, 0x56, 0x3, 0x57, 0x3, 0x57, 0x3, 0x57, 0x3, - 0x57, 0x3, 0x57, 0x3, 0x57, 0x3, 0x57, 0x3, 0x57, 0x3, 0x57, 0x3, - 0x57, 0x3, 0x57, 0x3, 0x57, 0x3, 0x57, 0x3, 0x58, 0x3, 0x58, 0x3, - 0x58, 0x3, 0x58, 0x3, 0x58, 0x3, 0x58, 0x3, 0x58, 0x3, 0x58, 0x3, - 0x58, 0x3, 0x58, 0x3, 0x58, 0x3, 0x58, 0x3, 0x58, 0x3, 0x58, 0x3, - 0x59, 0x3, 0x59, 0x3, 0x59, 0x3, 0x59, 0x3, 0x59, 0x3, 0x59, 0x3, - 0x59, 0x3, 0x59, 0x3, 0x59, 0x3, 0x59, 0x3, 0x59, 0x3, 0x59, 0x3, - 0x5a, 0x3, 0x5a, 0x3, 0x5a, 0x3, 0x5a, 0x3, 0x5a, 0x3, 0x5a, 0x3, - 0x5a, 0x3, 0x5a, 0x3, 0x5a, 0x3, 0x5a, 0x3, 0x5b, 0x3, 0x5b, 0x3, - 0x5b, 0x3, 0x5b, 0x3, 0x5b, 0x3, 0x5b, 0x3, 0x5b, 0x3, 0x5b, 0x3, - 0x5b, 0x3, 0x5b, 0x3, 0x5b, 0x3, 0x5c, 0x3, 0x5c, 0x3, 0x5c, 0x3, - 0x5c, 0x3, 0x5c, 0x3, 0x5c, 0x3, 0x5c, 0x3, 0x5c, 0x3, 0x5d, 0x3, - 0x5d, 0x3, 0x5d, 0x3, 0x5d, 0x3, 0x5d, 0x3, 0x5d, 0x3, 0x5d, 0x3, - 0x5d, 0x3, 0x5d, 0x3, 0x5d, 0x3, 0x5e, 0x3, 0x5e, 0x3, 0x5e, 0x3, - 0x5e, 0x3, 0x5e, 0x3, 0x5e, 0x3, 0x5e, 0x3, 0x5e, 0x3, 0x5e, 0x3, - 0x5e, 0x3, 0x5e, 0x3, 0x5e, 0x3, 0x5f, 0x3, 0x5f, 0x3, 0x5f, 0x3, - 0x5f, 0x3, 0x5f, 0x3, 0x5f, 0x3, 0x5f, 0x3, 0x5f, 0x3, 0x5f, 0x3, - 0x5f, 0x3, 0x5f, 0x3, 0x60, 0x3, 0x60, 0x3, 0x60, 0x3, 0x60, 0x3, - 0x60, 0x3, 0x60, 0x3, 0x60, 0x3, 0x61, 0x3, 0x61, 0x3, 0x61, 0x3, - 0x61, 0x3, 0x61, 0x3, 0x61, 0x3, 0x61, 0x3, 0x61, 0x3, 0x61, 0x3, - 0x61, 0x3, 0x61, 0x3, 0x61, 0x3, 0x61, 0x3, 0x62, 0x3, 0x62, 0x3, - 0x62, 0x3, 0x62, 0x3, 0x62, 0x3, 0x62, 0x3, 0x62, 0x3, 0x62, 0x3, - 0x62, 0x3, 0x62, 0x3, 0x62, 0x3, 0x62, 0x3, 0x62, 0x3, 0x62, 0x3, - 0x63, 0x3, 0x63, 0x3, 0x63, 0x3, 0x63, 0x3, 0x63, 0x3, 0x63, 0x3, - 0x63, 0x3, 0x63, 0x3, 0x63, 0x3, 0x63, 0x3, 0x63, 0x3, 0x63, 0x3, - 0x64, 0x3, 0x64, 0x3, 0x64, 0x3, 0x64, 0x3, 0x64, 0x3, 0x65, 0x3, - 0x65, 0x3, 0x65, 0x3, 0x65, 0x3, 0x65, 0x3, 0x65, 0x3, 0x65, 0x3, - 0x65, 0x3, 0x65, 0x3, 0x65, 0x3, 0x65, 0x3, 0x65, 0x3, 0x65, 0x3, - 0x65, 0x3, 0x65, 0x3, 0x65, 0x3, 0x65, 0x3, 0x65, 0x3, 0x65, 0x3, - 0x66, 0x3, 0x66, 0x3, 0x66, 0x3, 0x66, 0x3, 0x66, 0x3, 0x66, 0x3, - 0x66, 0x3, 0x66, 0x3, 0x66, 0x3, 0x66, 0x3, 0x66, 0x3, 0x66, 0x3, - 0x66, 0x3, 0x66, 0x3, 0x66, 0x3, 0x66, 0x3, 0x66, 0x3, 0x66, 0x3, - 0x66, 0x3, 0x66, 0x3, 0x66, 0x3, 0x67, 0x3, 0x67, 0x3, 0x67, 0x3, - 0x67, 0x3, 0x67, 0x3, 0x67, 0x3, 0x67, 0x3, 0x67, 0x3, 0x67, 0x3, - 0x67, 0x3, 0x67, 0x3, 0x68, 0x3, 0x68, 0x3, 0x68, 0x3, 0x68, 0x3, - 0x68, 0x3, 0x68, 0x3, 0x68, 0x3, 0x68, 0x3, 0x68, 0x3, 0x68, 0x3, - 0x69, 0x3, 0x69, 0x3, 0x69, 0x3, 0x69, 0x3, 0x69, 0x3, 0x6a, 0x3, - 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, - 0x6a, 0x3, 0x6a, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, - 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, - 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, - 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, - 0x6c, 0x3, 0x6c, 0x3, 0x6c, 0x3, 0x6c, 0x3, 0x6c, 0x3, 0x6c, 0x3, - 0x6c, 0x3, 0x6c, 0x3, 0x6c, 0x3, 0x6c, 0x3, 0x6c, 0x3, 0x6c, 0x3, - 0x6c, 0x3, 0x6c, 0x3, 0x6c, 0x3, 0x6c, 0x3, 0x6c, 0x3, 0x6c, 0x3, - 0x6c, 0x3, 0x6c, 0x3, 0x6c, 0x3, 0x6c, 0x3, 0x6c, 0x3, 0x6c, 0x3, - 0x6c, 0x3, 0x6c, 0x3, 0x6d, 0x3, 0x6d, 0x3, 0x6d, 0x3, 0x6d, 0x3, - 0x6d, 0x3, 0x6e, 0x3, 0x6e, 0x3, 0x6e, 0x3, 0x6e, 0x3, 0x6e, 0x3, - 0x6e, 0x3, 0x6e, 0x3, 0x6e, 0x3, 0x6e, 0x3, 0x6e, 0x3, 0x6e, 0x3, - 0x6e, 0x3, 0x6e, 0x3, 0x6e, 0x3, 0x6e, 0x3, 0x6e, 0x3, 0x6e, 0x3, - 0x6f, 0x3, 0x6f, 0x3, 0x6f, 0x3, 0x6f, 0x3, 0x6f, 0x3, 0x6f, 0x3, - 0x6f, 0x3, 0x6f, 0x3, 0x6f, 0x3, 0x6f, 0x3, 0x6f, 0x3, 0x6f, 0x3, - 0x6f, 0x3, 0x6f, 0x3, 0x6f, 0x3, 0x6f, 0x3, 0x6f, 0x3, 0x6f, 0x3, - 0x70, 0x3, 0x70, 0x3, 0x70, 0x3, 0x70, 0x3, 0x70, 0x3, 0x70, 0x3, - 0x70, 0x3, 0x70, 0x3, 0x70, 0x3, 0x70, 0x3, 0x70, 0x3, 0x70, 0x3, - 0x70, 0x3, 0x70, 0x3, 0x70, 0x3, 0x70, 0x3, 0x71, 0x3, 0x71, 0x3, - 0x71, 0x3, 0x71, 0x3, 0x71, 0x3, 0x72, 0x3, 0x72, 0x3, 0x72, 0x3, - 0x72, 0x3, 0x72, 0x3, 0x72, 0x3, 0x72, 0x3, 0x72, 0x3, 0x72, 0x3, - 0x72, 0x3, 0x72, 0x3, 0x72, 0x3, 0x73, 0x3, 0x73, 0x3, 0x73, 0x3, - 0x73, 0x3, 0x73, 0x3, 0x73, 0x3, 0x73, 0x3, 0x73, 0x3, 0x73, 0x3, - 0x73, 0x3, 0x73, 0x3, 0x73, 0x3, 0x73, 0x3, 0x74, 0x3, 0x74, 0x3, - 0x75, 0x3, 0x75, 0x3, 0x76, 0x3, 0x76, 0x3, 0x77, 0x3, 0x77, 0x3, - 0x78, 0x3, 0x78, 0x3, 0x79, 0x3, 0x79, 0x3, 0x7a, 0x3, 0x7a, 0x3, - 0x7b, 0x3, 0x7b, 0x3, 0x7c, 0x3, 0x7c, 0x3, 0x7d, 0x3, 0x7d, 0x3, - 0x7d, 0x3, 0x7d, 0x3, 0x7e, 0x3, 0x7e, 0x3, 0x7f, 0x3, 0x7f, 0x5, - 0x7f, 0x63c, 0xa, 0x7f, 0x3, 0x80, 0x3, 0x80, 0x5, 0x80, 0x640, 0xa, - 0x80, 0x3, 0x81, 0x3, 0x81, 0x3, 0x81, 0x7, 0x81, 0x645, 0xa, 0x81, - 0xc, 0x81, 0xe, 0x81, 0x648, 0xb, 0x81, 0x3, 0x82, 0x3, 0x82, 0x6, - 0x82, 0x64c, 0xa, 0x82, 0xd, 0x82, 0xe, 0x82, 0x64d, 0x3, 0x83, 0x3, - 0x83, 0x5, 0x83, 0x652, 0xa, 0x83, 0x3, 0x84, 0x3, 0x84, 0x3, 0x84, - 0x7, 0x84, 0x657, 0xa, 0x84, 0xc, 0x84, 0xe, 0x84, 0x65a, 0xb, 0x84, - 0x3, 0x85, 0x3, 0x85, 0x7, 0x85, 0x65e, 0xa, 0x85, 0xc, 0x85, 0xe, - 0x85, 0x661, 0xb, 0x85, 0x3, 0x86, 0x3, 0x86, 0x7, 0x86, 0x665, 0xa, - 0x86, 0xc, 0x86, 0xe, 0x86, 0x668, 0xb, 0x86, 0x3, 0x87, 0x5, 0x87, - 0x66b, 0xa, 0x87, 0x3, 0x87, 0x6, 0x87, 0x66e, 0xa, 0x87, 0xd, 0x87, - 0xe, 0x87, 0x66f, 0x3, 0x87, 0x3, 0x87, 0x6, 0x87, 0x674, 0xa, 0x87, - 0xd, 0x87, 0xe, 0x87, 0x675, 0x3, 0x88, 0x3, 0x88, 0x3, 0x88, 0x3, - 0x88, 0x6, 0x88, 0x67c, 0xa, 0x88, 0xd, 0x88, 0xe, 0x88, 0x67d, 0x3, - 0x89, 0x3, 0x89, 0x6, 0x89, 0x682, 0xa, 0x89, 0xd, 0x89, 0xe, 0x89, - 0x683, 0x3, 0x8a, 0x5, 0x8a, 0x687, 0xa, 0x8a, 0x3, 0x8a, 0x3, 0x8a, - 0x7, 0x8a, 0x68b, 0xa, 0x8a, 0xc, 0x8a, 0xe, 0x8a, 0x68e, 0xb, 0x8a, - 0x3, 0x8a, 0x5, 0x8a, 0x691, 0xa, 0x8a, 0x3, 0x8b, 0x3, 0x8b, 0x3, - 0x8c, 0x3, 0x8c, 0x5, 0x8c, 0x697, 0xa, 0x8c, 0x3, 0x8d, 0x3, 0x8d, - 0x5, 0x8d, 0x69b, 0xa, 0x8d, 0x3, 0x8e, 0x6, 0x8e, 0x69e, 0xa, 0x8e, - 0xd, 0x8e, 0xe, 0x8e, 0x69f, 0x3, 0x8e, 0x3, 0x8e, 0x3, 0x8f, 0x3, - 0x8f, 0x7, 0x8f, 0x6a6, 0xa, 0x8f, 0xc, 0x8f, 0xe, 0x8f, 0x6a9, 0xb, - 0x8f, 0x3, 0x8f, 0x3, 0x8f, 0x3, 0x90, 0x3, 0x90, 0x3, 0x90, 0x3, - 0x90, 0x3, 0x91, 0x5, 0x91, 0x6b2, 0xa, 0x91, 0x3, 0x91, 0x3, 0x91, - 0x3, 0x91, 0x3, 0x91, 0x7, 0x91, 0x6b8, 0xa, 0x91, 0xc, 0x91, 0xe, - 0x91, 0x6bb, 0xb, 0x91, 0x3, 0x91, 0x3, 0x91, 0x7, 0x91, 0x6bf, 0xa, - 0x91, 0xc, 0x91, 0xe, 0x91, 0x6c2, 0xb, 0x91, 0x3, 0x91, 0x7, 0x91, - 0x6c5, 0xa, 0x91, 0xc, 0x91, 0xe, 0x91, 0x6c8, 0xb, 0x91, 0x3, 0x91, - 0x3, 0x91, 0x3, 0x91, 0x3, 0x91, 0x3, 0x91, 0x3, 0x92, 0x5, 0x92, - 0x6d0, 0xa, 0x92, 0x3, 0x92, 0x3, 0x92, 0x7, 0x92, 0x6d4, 0xa, 0x92, - 0xc, 0x92, 0xe, 0x92, 0x6d7, 0xb, 0x92, 0x3, 0x93, 0x6, 0x93, 0x6da, - 0xa, 0x93, 0xd, 0x93, 0xe, 0x93, 0x6db, 0x3, 0x93, 0x3, 0x93, 0x3, - 0x94, 0x3, 0x94, 0x3, 0x94, 0x3, 0x94, 0x3, 0x95, 0x6, 0x95, 0x6e5, - 0xa, 0x95, 0xd, 0x95, 0xe, 0x95, 0x6e6, 0x3, 0x96, 0x3, 0x96, 0x3, - 0x96, 0x3, 0x96, 0x3, 0x97, 0x7, 0x97, 0x6ee, 0xa, 0x97, 0xc, 0x97, - 0xe, 0x97, 0x6f1, 0xb, 0x97, 0x3, 0x98, 0x3, 0x98, 0x3, 0x98, 0x3, - 0x98, 0x2, 0x2, 0x99, 0x8, 0x3, 0xa, 0x4, 0xc, 0x5, 0xe, 0x6, 0x10, - 0x7, 0x12, 0x8, 0x14, 0x9, 0x16, 0xa, 0x18, 0xb, 0x1a, 0xc, 0x1c, - 0xd, 0x1e, 0xe, 0x20, 0xf, 0x22, 0x10, 0x24, 0x11, 0x26, 0x12, 0x28, - 0x13, 0x2a, 0x14, 0x2c, 0x15, 0x2e, 0x16, 0x30, 0x17, 0x32, 0x18, - 0x34, 0x19, 0x36, 0x1a, 0x38, 0x1b, 0x3a, 0x1c, 0x3c, 0x1d, 0x3e, - 0x1e, 0x40, 0x1f, 0x42, 0x20, 0x44, 0x21, 0x46, 0x22, 0x48, 0x23, - 0x4a, 0x24, 0x4c, 0x25, 0x4e, 0x26, 0x50, 0x27, 0x52, 0x28, 0x54, - 0x29, 0x56, 0x2a, 0x58, 0x2b, 0x5a, 0x2c, 0x5c, 0x2d, 0x5e, 0x2e, - 0x60, 0x2f, 0x62, 0x30, 0x64, 0x31, 0x66, 0x32, 0x68, 0x33, 0x6a, - 0x34, 0x6c, 0x35, 0x6e, 0x36, 0x70, 0x37, 0x72, 0x38, 0x74, 0x39, - 0x76, 0x3a, 0x78, 0x3b, 0x7a, 0x3c, 0x7c, 0x3d, 0x7e, 0x3e, 0x80, - 0x3f, 0x82, 0x40, 0x84, 0x41, 0x86, 0x42, 0x88, 0x43, 0x8a, 0x44, - 0x8c, 0x45, 0x8e, 0x46, 0x90, 0x47, 0x92, 0x48, 0x94, 0x49, 0x96, - 0x4a, 0x98, 0x4b, 0x9a, 0x4c, 0x9c, 0x4d, 0x9e, 0x4e, 0xa0, 0x4f, - 0xa2, 0x50, 0xa4, 0x51, 0xa6, 0x52, 0xa8, 0x53, 0xaa, 0x54, 0xac, - 0x55, 0xae, 0x56, 0xb0, 0x57, 0xb2, 0x58, 0xb4, 0x59, 0xb6, 0x5a, - 0xb8, 0x5b, 0xba, 0x5c, 0xbc, 0x5d, 0xbe, 0x5e, 0xc0, 0x5f, 0xc2, - 0x60, 0xc4, 0x61, 0xc6, 0x62, 0xc8, 0x63, 0xca, 0x64, 0xcc, 0x65, - 0xce, 0x66, 0xd0, 0x67, 0xd2, 0x68, 0xd4, 0x69, 0xd6, 0x6a, 0xd8, - 0x6b, 0xda, 0x6c, 0xdc, 0x6d, 0xde, 0x6e, 0xe0, 0x6f, 0xe2, 0x70, - 0xe4, 0x71, 0xe6, 0x72, 0xe8, 0x73, 0xea, 0x74, 0xec, 0x75, 0xee, - 0x76, 0xf0, 0x77, 0xf2, 0x78, 0xf4, 0x79, 0xf6, 0x7a, 0xf8, 0x7b, - 0xfa, 0x7c, 0xfc, 0x7d, 0xfe, 0x7e, 0x100, 0x2, 0x102, 0x2, 0x104, - 0x2, 0x106, 0x7f, 0x108, 0x80, 0x10a, 0x2, 0x10c, 0x81, 0x10e, 0x82, - 0x110, 0x83, 0x112, 0x84, 0x114, 0x85, 0x116, 0x86, 0x118, 0x87, - 0x11a, 0x2, 0x11c, 0x2, 0x11e, 0x88, 0x120, 0x89, 0x122, 0x8a, 0x124, - 0x8b, 0x126, 0x8c, 0x128, 0x8d, 0x12a, 0x8e, 0x12c, 0x8f, 0x12e, - 0x90, 0x130, 0x91, 0x132, 0x92, 0x134, 0x93, 0x8, 0x2, 0x3, 0x4, - 0x5, 0x6, 0x7, 0xd, 0x4, 0x2, 0xc, 0xc, 0xf, 0xf, 0x5, 0x2, 0xb, - 0xc, 0xf, 0xf, 0x22, 0x22, 0x5, 0x2, 0x43, 0x5c, 0x61, 0x61, 0x63, - 0x7c, 0x4, 0x2, 0x30, 0x30, 0x32, 0x3b, 0x7, 0x2, 0x2c, 0x2d, 0x3c, - 0x3c, 0x60, 0x60, 0x7e, 0x7e, 0x80, 0x80, 0x5, 0x2, 0x32, 0x3b, 0x43, - 0x48, 0x63, 0x68, 0xc, 0x2, 0x23, 0x23, 0x26, 0x28, 0x2c, 0x2d, 0x30, - 0x30, 0x3c, 0x3c, 0x41, 0x41, 0x43, 0x5c, 0x60, 0x7c, 0x7e, 0x7e, - 0x80, 0x80, 0x4, 0x2, 0x2f, 0x2f, 0x32, 0x3b, 0x4, 0x2, 0xb, 0xb, - 0x22, 0x22, 0x3, 0x2, 0x2b, 0x2b, 0x3, 0x2, 0x24, 0x24, 0x2, 0x709, - 0x2, 0x8, 0x3, 0x2, 0x2, 0x2, 0x2, 0xa, 0x3, 0x2, 0x2, 0x2, 0x2, - 0xc, 0x3, 0x2, 0x2, 0x2, 0x2, 0xe, 0x3, 0x2, 0x2, 0x2, 0x2, 0x10, - 0x3, 0x2, 0x2, 0x2, 0x2, 0x12, 0x3, 0x2, 0x2, 0x2, 0x2, 0x14, 0x3, - 0x2, 0x2, 0x2, 0x2, 0x16, 0x3, 0x2, 0x2, 0x2, 0x2, 0x18, 0x3, 0x2, - 0x2, 0x2, 0x2, 0x1a, 0x3, 0x2, 0x2, 0x2, 0x2, 0x1c, 0x3, 0x2, 0x2, - 0x2, 0x2, 0x1e, 0x3, 0x2, 0x2, 0x2, 0x2, 0x20, 0x3, 0x2, 0x2, 0x2, - 0x2, 0x22, 0x3, 0x2, 0x2, 0x2, 0x2, 0x24, 0x3, 0x2, 0x2, 0x2, 0x2, - 0x26, 0x3, 0x2, 0x2, 0x2, 0x2, 0x28, 0x3, 0x2, 0x2, 0x2, 0x2, 0x2a, - 0x3, 0x2, 0x2, 0x2, 0x2, 0x2c, 0x3, 0x2, 0x2, 0x2, 0x2, 0x2e, 0x3, - 0x2, 0x2, 0x2, 0x2, 0x30, 0x3, 0x2, 0x2, 0x2, 0x2, 0x32, 0x3, 0x2, - 0x2, 0x2, 0x2, 0x34, 0x3, 0x2, 0x2, 0x2, 0x2, 0x36, 0x3, 0x2, 0x2, - 0x2, 0x2, 0x38, 0x3, 0x2, 0x2, 0x2, 0x2, 0x3a, 0x3, 0x2, 0x2, 0x2, - 0x2, 0x3c, 0x3, 0x2, 0x2, 0x2, 0x2, 0x3e, 0x3, 0x2, 0x2, 0x2, 0x2, - 0x40, 0x3, 0x2, 0x2, 0x2, 0x2, 0x42, 0x3, 0x2, 0x2, 0x2, 0x2, 0x44, - 0x3, 0x2, 0x2, 0x2, 0x2, 0x46, 0x3, 0x2, 0x2, 0x2, 0x2, 0x48, 0x3, - 0x2, 0x2, 0x2, 0x2, 0x4a, 0x3, 0x2, 0x2, 0x2, 0x2, 0x4c, 0x3, 0x2, - 0x2, 0x2, 0x2, 0x4e, 0x3, 0x2, 0x2, 0x2, 0x2, 0x50, 0x3, 0x2, 0x2, - 0x2, 0x2, 0x52, 0x3, 0x2, 0x2, 0x2, 0x2, 0x54, 0x3, 0x2, 0x2, 0x2, - 0x2, 0x56, 0x3, 0x2, 0x2, 0x2, 0x2, 0x58, 0x3, 0x2, 0x2, 0x2, 0x2, - 0x5a, 0x3, 0x2, 0x2, 0x2, 0x2, 0x5c, 0x3, 0x2, 0x2, 0x2, 0x2, 0x5e, - 0x3, 0x2, 0x2, 0x2, 0x2, 0x60, 0x3, 0x2, 0x2, 0x2, 0x2, 0x62, 0x3, - 0x2, 0x2, 0x2, 0x2, 0x64, 0x3, 0x2, 0x2, 0x2, 0x2, 0x66, 0x3, 0x2, - 0x2, 0x2, 0x2, 0x68, 0x3, 0x2, 0x2, 0x2, 0x2, 0x6a, 0x3, 0x2, 0x2, - 0x2, 0x2, 0x6c, 0x3, 0x2, 0x2, 0x2, 0x2, 0x6e, 0x3, 0x2, 0x2, 0x2, - 0x2, 0x70, 0x3, 0x2, 0x2, 0x2, 0x2, 0x72, 0x3, 0x2, 0x2, 0x2, 0x2, - 0x74, 0x3, 0x2, 0x2, 0x2, 0x2, 0x76, 0x3, 0x2, 0x2, 0x2, 0x2, 0x78, - 0x3, 0x2, 0x2, 0x2, 0x2, 0x7a, 0x3, 0x2, 0x2, 0x2, 0x2, 0x7c, 0x3, - 0x2, 0x2, 0x2, 0x2, 0x7e, 0x3, 0x2, 0x2, 0x2, 0x2, 0x80, 0x3, 0x2, - 0x2, 0x2, 0x2, 0x82, 0x3, 0x2, 0x2, 0x2, 0x2, 0x84, 0x3, 0x2, 0x2, - 0x2, 0x2, 0x86, 0x3, 0x2, 0x2, 0x2, 0x2, 0x88, 0x3, 0x2, 0x2, 0x2, - 0x2, 0x8a, 0x3, 0x2, 0x2, 0x2, 0x2, 0x8c, 0x3, 0x2, 0x2, 0x2, 0x2, - 0x8e, 0x3, 0x2, 0x2, 0x2, 0x2, 0x90, 0x3, 0x2, 0x2, 0x2, 0x2, 0x92, - 0x3, 0x2, 0x2, 0x2, 0x2, 0x94, 0x3, 0x2, 0x2, 0x2, 0x2, 0x96, 0x3, - 0x2, 0x2, 0x2, 0x2, 0x98, 0x3, 0x2, 0x2, 0x2, 0x2, 0x9a, 0x3, 0x2, - 0x2, 0x2, 0x2, 0x9c, 0x3, 0x2, 0x2, 0x2, 0x2, 0x9e, 0x3, 0x2, 0x2, - 0x2, 0x2, 0xa0, 0x3, 0x2, 0x2, 0x2, 0x2, 0xa2, 0x3, 0x2, 0x2, 0x2, - 0x2, 0xa4, 0x3, 0x2, 0x2, 0x2, 0x2, 0xa6, 0x3, 0x2, 0x2, 0x2, 0x2, - 0xa8, 0x3, 0x2, 0x2, 0x2, 0x2, 0xaa, 0x3, 0x2, 0x2, 0x2, 0x2, 0xac, - 0x3, 0x2, 0x2, 0x2, 0x2, 0xae, 0x3, 0x2, 0x2, 0x2, 0x2, 0xb0, 0x3, - 0x2, 0x2, 0x2, 0x2, 0xb2, 0x3, 0x2, 0x2, 0x2, 0x2, 0xb4, 0x3, 0x2, - 0x2, 0x2, 0x2, 0xb6, 0x3, 0x2, 0x2, 0x2, 0x2, 0xb8, 0x3, 0x2, 0x2, - 0x2, 0x2, 0xba, 0x3, 0x2, 0x2, 0x2, 0x2, 0xbc, 0x3, 0x2, 0x2, 0x2, - 0x2, 0xbe, 0x3, 0x2, 0x2, 0x2, 0x2, 0xc0, 0x3, 0x2, 0x2, 0x2, 0x2, - 0xc2, 0x3, 0x2, 0x2, 0x2, 0x2, 0xc4, 0x3, 0x2, 0x2, 0x2, 0x2, 0xc6, - 0x3, 0x2, 0x2, 0x2, 0x2, 0xc8, 0x3, 0x2, 0x2, 0x2, 0x2, 0xca, 0x3, - 0x2, 0x2, 0x2, 0x2, 0xcc, 0x3, 0x2, 0x2, 0x2, 0x2, 0xce, 0x3, 0x2, - 0x2, 0x2, 0x2, 0xd0, 0x3, 0x2, 0x2, 0x2, 0x2, 0xd2, 0x3, 0x2, 0x2, - 0x2, 0x2, 0xd4, 0x3, 0x2, 0x2, 0x2, 0x2, 0xd6, 0x3, 0x2, 0x2, 0x2, - 0x2, 0xd8, 0x3, 0x2, 0x2, 0x2, 0x2, 0xda, 0x3, 0x2, 0x2, 0x2, 0x2, - 0xdc, 0x3, 0x2, 0x2, 0x2, 0x2, 0xde, 0x3, 0x2, 0x2, 0x2, 0x2, 0xe0, - 0x3, 0x2, 0x2, 0x2, 0x2, 0xe2, 0x3, 0x2, 0x2, 0x2, 0x2, 0xe4, 0x3, - 0x2, 0x2, 0x2, 0x2, 0xe6, 0x3, 0x2, 0x2, 0x2, 0x2, 0xe8, 0x3, 0x2, - 0x2, 0x2, 0x2, 0xea, 0x3, 0x2, 0x2, 0x2, 0x2, 0xec, 0x3, 0x2, 0x2, - 0x2, 0x2, 0xee, 0x3, 0x2, 0x2, 0x2, 0x2, 0xf0, 0x3, 0x2, 0x2, 0x2, - 0x2, 0xf2, 0x3, 0x2, 0x2, 0x2, 0x2, 0xf4, 0x3, 0x2, 0x2, 0x2, 0x2, - 0xf6, 0x3, 0x2, 0x2, 0x2, 0x2, 0xf8, 0x3, 0x2, 0x2, 0x2, 0x2, 0xfa, - 0x3, 0x2, 0x2, 0x2, 0x2, 0xfc, 0x3, 0x2, 0x2, 0x2, 0x2, 0xfe, 0x3, - 0x2, 0x2, 0x2, 0x2, 0x106, 0x3, 0x2, 0x2, 0x2, 0x2, 0x108, 0x3, 0x2, - 0x2, 0x2, 0x2, 0x10c, 0x3, 0x2, 0x2, 0x2, 0x2, 0x10e, 0x3, 0x2, 0x2, - 0x2, 0x2, 0x110, 0x3, 0x2, 0x2, 0x2, 0x2, 0x112, 0x3, 0x2, 0x2, 0x2, - 0x2, 0x114, 0x3, 0x2, 0x2, 0x2, 0x2, 0x116, 0x3, 0x2, 0x2, 0x2, 0x2, - 0x118, 0x3, 0x2, 0x2, 0x2, 0x2, 0x11e, 0x3, 0x2, 0x2, 0x2, 0x3, 0x120, - 0x3, 0x2, 0x2, 0x2, 0x3, 0x122, 0x3, 0x2, 0x2, 0x2, 0x3, 0x124, 0x3, - 0x2, 0x2, 0x2, 0x4, 0x126, 0x3, 0x2, 0x2, 0x2, 0x4, 0x128, 0x3, 0x2, - 0x2, 0x2, 0x5, 0x12a, 0x3, 0x2, 0x2, 0x2, 0x5, 0x12c, 0x3, 0x2, 0x2, - 0x2, 0x6, 0x12e, 0x3, 0x2, 0x2, 0x2, 0x6, 0x130, 0x3, 0x2, 0x2, 0x2, - 0x7, 0x132, 0x3, 0x2, 0x2, 0x2, 0x7, 0x134, 0x3, 0x2, 0x2, 0x2, 0x8, - 0x136, 0x3, 0x2, 0x2, 0x2, 0xa, 0x13d, 0x3, 0x2, 0x2, 0x2, 0xc, 0x149, - 0x3, 0x2, 0x2, 0x2, 0xe, 0x153, 0x3, 0x2, 0x2, 0x2, 0x10, 0x159, - 0x3, 0x2, 0x2, 0x2, 0x12, 0x163, 0x3, 0x2, 0x2, 0x2, 0x14, 0x16b, - 0x3, 0x2, 0x2, 0x2, 0x16, 0x171, 0x3, 0x2, 0x2, 0x2, 0x18, 0x178, - 0x3, 0x2, 0x2, 0x2, 0x1a, 0x181, 0x3, 0x2, 0x2, 0x2, 0x1c, 0x190, - 0x3, 0x2, 0x2, 0x2, 0x1e, 0x199, 0x3, 0x2, 0x2, 0x2, 0x20, 0x1a0, - 0x3, 0x2, 0x2, 0x2, 0x22, 0x1ab, 0x3, 0x2, 0x2, 0x2, 0x24, 0x1b3, - 0x3, 0x2, 0x2, 0x2, 0x26, 0x1bf, 0x3, 0x2, 0x2, 0x2, 0x28, 0x1d0, - 0x3, 0x2, 0x2, 0x2, 0x2a, 0x1e0, 0x3, 0x2, 0x2, 0x2, 0x2c, 0x1ec, - 0x3, 0x2, 0x2, 0x2, 0x2e, 0x200, 0x3, 0x2, 0x2, 0x2, 0x30, 0x213, - 0x3, 0x2, 0x2, 0x2, 0x32, 0x21f, 0x3, 0x2, 0x2, 0x2, 0x34, 0x22b, - 0x3, 0x2, 0x2, 0x2, 0x36, 0x238, 0x3, 0x2, 0x2, 0x2, 0x38, 0x245, - 0x3, 0x2, 0x2, 0x2, 0x3a, 0x252, 0x3, 0x2, 0x2, 0x2, 0x3c, 0x254, - 0x3, 0x2, 0x2, 0x2, 0x3e, 0x256, 0x3, 0x2, 0x2, 0x2, 0x40, 0x260, - 0x3, 0x2, 0x2, 0x2, 0x42, 0x265, 0x3, 0x2, 0x2, 0x2, 0x44, 0x26c, - 0x3, 0x2, 0x2, 0x2, 0x46, 0x273, 0x3, 0x2, 0x2, 0x2, 0x48, 0x27e, - 0x3, 0x2, 0x2, 0x2, 0x4a, 0x282, 0x3, 0x2, 0x2, 0x2, 0x4c, 0x28d, - 0x3, 0x2, 0x2, 0x2, 0x4e, 0x292, 0x3, 0x2, 0x2, 0x2, 0x50, 0x295, - 0x3, 0x2, 0x2, 0x2, 0x52, 0x29a, 0x3, 0x2, 0x2, 0x2, 0x54, 0x2a3, - 0x3, 0x2, 0x2, 0x2, 0x56, 0x2a7, 0x3, 0x2, 0x2, 0x2, 0x58, 0x2b2, - 0x3, 0x2, 0x2, 0x2, 0x5a, 0x2bf, 0x3, 0x2, 0x2, 0x2, 0x5c, 0x2cc, - 0x3, 0x2, 0x2, 0x2, 0x5e, 0x2de, 0x3, 0x2, 0x2, 0x2, 0x60, 0x2f6, - 0x3, 0x2, 0x2, 0x2, 0x62, 0x307, 0x3, 0x2, 0x2, 0x2, 0x64, 0x31a, - 0x3, 0x2, 0x2, 0x2, 0x66, 0x324, 0x3, 0x2, 0x2, 0x2, 0x68, 0x331, - 0x3, 0x2, 0x2, 0x2, 0x6a, 0x33e, 0x3, 0x2, 0x2, 0x2, 0x6c, 0x345, - 0x3, 0x2, 0x2, 0x2, 0x6e, 0x34f, 0x3, 0x2, 0x2, 0x2, 0x70, 0x35e, - 0x3, 0x2, 0x2, 0x2, 0x72, 0x363, 0x3, 0x2, 0x2, 0x2, 0x74, 0x36d, - 0x3, 0x2, 0x2, 0x2, 0x76, 0x375, 0x3, 0x2, 0x2, 0x2, 0x78, 0x37a, - 0x3, 0x2, 0x2, 0x2, 0x7a, 0x383, 0x3, 0x2, 0x2, 0x2, 0x7c, 0x387, - 0x3, 0x2, 0x2, 0x2, 0x7e, 0x394, 0x3, 0x2, 0x2, 0x2, 0x80, 0x399, - 0x3, 0x2, 0x2, 0x2, 0x82, 0x39e, 0x3, 0x2, 0x2, 0x2, 0x84, 0x3b4, - 0x3, 0x2, 0x2, 0x2, 0x86, 0x3c9, 0x3, 0x2, 0x2, 0x2, 0x88, 0x3e2, - 0x3, 0x2, 0x2, 0x2, 0x8a, 0x3fa, 0x3, 0x2, 0x2, 0x2, 0x8c, 0x3ff, - 0x3, 0x2, 0x2, 0x2, 0x8e, 0x40d, 0x3, 0x2, 0x2, 0x2, 0x90, 0x414, - 0x3, 0x2, 0x2, 0x2, 0x92, 0x427, 0x3, 0x2, 0x2, 0x2, 0x94, 0x43c, - 0x3, 0x2, 0x2, 0x2, 0x96, 0x441, 0x3, 0x2, 0x2, 0x2, 0x98, 0x44e, - 0x3, 0x2, 0x2, 0x2, 0x9a, 0x453, 0x3, 0x2, 0x2, 0x2, 0x9c, 0x45c, - 0x3, 0x2, 0x2, 0x2, 0x9e, 0x466, 0x3, 0x2, 0x2, 0x2, 0xa0, 0x46e, - 0x3, 0x2, 0x2, 0x2, 0xa2, 0x47a, 0x3, 0x2, 0x2, 0x2, 0xa4, 0x47f, - 0x3, 0x2, 0x2, 0x2, 0xa6, 0x486, 0x3, 0x2, 0x2, 0x2, 0xa8, 0x48b, - 0x3, 0x2, 0x2, 0x2, 0xaa, 0x492, 0x3, 0x2, 0x2, 0x2, 0xac, 0x499, - 0x3, 0x2, 0x2, 0x2, 0xae, 0x4a5, 0x3, 0x2, 0x2, 0x2, 0xb0, 0x4b1, - 0x3, 0x2, 0x2, 0x2, 0xb2, 0x4b8, 0x3, 0x2, 0x2, 0x2, 0xb4, 0x4c5, - 0x3, 0x2, 0x2, 0x2, 0xb6, 0x4d3, 0x3, 0x2, 0x2, 0x2, 0xb8, 0x4df, - 0x3, 0x2, 0x2, 0x2, 0xba, 0x4e9, 0x3, 0x2, 0x2, 0x2, 0xbc, 0x4f4, - 0x3, 0x2, 0x2, 0x2, 0xbe, 0x4fc, 0x3, 0x2, 0x2, 0x2, 0xc0, 0x506, - 0x3, 0x2, 0x2, 0x2, 0xc2, 0x512, 0x3, 0x2, 0x2, 0x2, 0xc4, 0x51d, - 0x3, 0x2, 0x2, 0x2, 0xc6, 0x524, 0x3, 0x2, 0x2, 0x2, 0xc8, 0x531, - 0x3, 0x2, 0x2, 0x2, 0xca, 0x53f, 0x3, 0x2, 0x2, 0x2, 0xcc, 0x54b, - 0x3, 0x2, 0x2, 0x2, 0xce, 0x550, 0x3, 0x2, 0x2, 0x2, 0xd0, 0x563, - 0x3, 0x2, 0x2, 0x2, 0xd2, 0x578, 0x3, 0x2, 0x2, 0x2, 0xd4, 0x583, - 0x3, 0x2, 0x2, 0x2, 0xd6, 0x58d, 0x3, 0x2, 0x2, 0x2, 0xd8, 0x592, - 0x3, 0x2, 0x2, 0x2, 0xda, 0x59b, 0x3, 0x2, 0x2, 0x2, 0xdc, 0x5b1, - 0x3, 0x2, 0x2, 0x2, 0xde, 0x5cb, 0x3, 0x2, 0x2, 0x2, 0xe0, 0x5d0, - 0x3, 0x2, 0x2, 0x2, 0xe2, 0x5e1, 0x3, 0x2, 0x2, 0x2, 0xe4, 0x5f3, - 0x3, 0x2, 0x2, 0x2, 0xe6, 0x603, 0x3, 0x2, 0x2, 0x2, 0xe8, 0x608, - 0x3, 0x2, 0x2, 0x2, 0xea, 0x614, 0x3, 0x2, 0x2, 0x2, 0xec, 0x621, - 0x3, 0x2, 0x2, 0x2, 0xee, 0x623, 0x3, 0x2, 0x2, 0x2, 0xf0, 0x625, - 0x3, 0x2, 0x2, 0x2, 0xf2, 0x627, 0x3, 0x2, 0x2, 0x2, 0xf4, 0x629, - 0x3, 0x2, 0x2, 0x2, 0xf6, 0x62b, 0x3, 0x2, 0x2, 0x2, 0xf8, 0x62d, - 0x3, 0x2, 0x2, 0x2, 0xfa, 0x62f, 0x3, 0x2, 0x2, 0x2, 0xfc, 0x631, - 0x3, 0x2, 0x2, 0x2, 0xfe, 0x633, 0x3, 0x2, 0x2, 0x2, 0x100, 0x637, - 0x3, 0x2, 0x2, 0x2, 0x102, 0x63b, 0x3, 0x2, 0x2, 0x2, 0x104, 0x63f, - 0x3, 0x2, 0x2, 0x2, 0x106, 0x641, 0x3, 0x2, 0x2, 0x2, 0x108, 0x649, - 0x3, 0x2, 0x2, 0x2, 0x10a, 0x651, 0x3, 0x2, 0x2, 0x2, 0x10c, 0x653, - 0x3, 0x2, 0x2, 0x2, 0x10e, 0x65b, 0x3, 0x2, 0x2, 0x2, 0x110, 0x662, - 0x3, 0x2, 0x2, 0x2, 0x112, 0x66a, 0x3, 0x2, 0x2, 0x2, 0x114, 0x677, - 0x3, 0x2, 0x2, 0x2, 0x116, 0x67f, 0x3, 0x2, 0x2, 0x2, 0x118, 0x686, - 0x3, 0x2, 0x2, 0x2, 0x11a, 0x692, 0x3, 0x2, 0x2, 0x2, 0x11c, 0x696, - 0x3, 0x2, 0x2, 0x2, 0x11e, 0x698, 0x3, 0x2, 0x2, 0x2, 0x120, 0x69d, - 0x3, 0x2, 0x2, 0x2, 0x122, 0x6a3, 0x3, 0x2, 0x2, 0x2, 0x124, 0x6ac, - 0x3, 0x2, 0x2, 0x2, 0x126, 0x6b1, 0x3, 0x2, 0x2, 0x2, 0x128, 0x6cf, - 0x3, 0x2, 0x2, 0x2, 0x12a, 0x6d9, 0x3, 0x2, 0x2, 0x2, 0x12c, 0x6df, - 0x3, 0x2, 0x2, 0x2, 0x12e, 0x6e4, 0x3, 0x2, 0x2, 0x2, 0x130, 0x6e8, - 0x3, 0x2, 0x2, 0x2, 0x132, 0x6ef, 0x3, 0x2, 0x2, 0x2, 0x134, 0x6f2, - 0x3, 0x2, 0x2, 0x2, 0x136, 0x137, 0x7, 0x63, 0x2, 0x2, 0x137, 0x138, - 0x7, 0x70, 0x2, 0x2, 0x138, 0x139, 0x7, 0x71, 0x2, 0x2, 0x139, 0x13a, - 0x7, 0x70, 0x2, 0x2, 0x13a, 0x13b, 0x3, 0x2, 0x2, 0x2, 0x13b, 0x13c, - 0x8, 0x2, 0x2, 0x2, 0x13c, 0x9, 0x3, 0x2, 0x2, 0x2, 0x13d, 0x13e, - 0x7, 0x63, 0x2, 0x2, 0x13e, 0x13f, 0x7, 0x70, 0x2, 0x2, 0x13f, 0x140, - 0x7, 0x71, 0x2, 0x2, 0x140, 0x141, 0x7, 0x70, 0x2, 0x2, 0x141, 0x142, - 0x7, 0x7b, 0x2, 0x2, 0x142, 0x143, 0x7, 0x6f, 0x2, 0x2, 0x143, 0x144, - 0x7, 0x71, 0x2, 0x2, 0x144, 0x145, 0x7, 0x77, 0x2, 0x2, 0x145, 0x146, - 0x7, 0x75, 0x2, 0x2, 0x146, 0x147, 0x3, 0x2, 0x2, 0x2, 0x147, 0x148, - 0x8, 0x3, 0x2, 0x2, 0x148, 0xb, 0x3, 0x2, 0x2, 0x2, 0x149, 0x14d, - 0x7, 0x25, 0x2, 0x2, 0x14a, 0x14c, 0xa, 0x2, 0x2, 0x2, 0x14b, 0x14a, - 0x3, 0x2, 0x2, 0x2, 0x14c, 0x14f, 0x3, 0x2, 0x2, 0x2, 0x14d, 0x14b, - 0x3, 0x2, 0x2, 0x2, 0x14d, 0x14e, 0x3, 0x2, 0x2, 0x2, 0x14e, 0x150, - 0x3, 0x2, 0x2, 0x2, 0x14f, 0x14d, 0x3, 0x2, 0x2, 0x2, 0x150, 0x151, - 0x8, 0x4, 0x3, 0x2, 0x151, 0xd, 0x3, 0x2, 0x2, 0x2, 0x152, 0x154, - 0x9, 0x3, 0x2, 0x2, 0x153, 0x152, 0x3, 0x2, 0x2, 0x2, 0x154, 0x155, - 0x3, 0x2, 0x2, 0x2, 0x155, 0x153, 0x3, 0x2, 0x2, 0x2, 0x155, 0x156, - 0x3, 0x2, 0x2, 0x2, 0x156, 0x157, 0x3, 0x2, 0x2, 0x2, 0x157, 0x158, - 0x8, 0x5, 0x3, 0x2, 0x158, 0xf, 0x3, 0x2, 0x2, 0x2, 0x159, 0x15a, - 0x7, 0x6b, 0x2, 0x2, 0x15a, 0x15b, 0x7, 0x70, 0x2, 0x2, 0x15b, 0x15c, - 0x7, 0x65, 0x2, 0x2, 0x15c, 0x15d, 0x7, 0x6e, 0x2, 0x2, 0x15d, 0x15e, - 0x7, 0x77, 0x2, 0x2, 0x15e, 0x15f, 0x7, 0x66, 0x2, 0x2, 0x15f, 0x160, - 0x7, 0x67, 0x2, 0x2, 0x160, 0x161, 0x3, 0x2, 0x2, 0x2, 0x161, 0x162, - 0x8, 0x6, 0x4, 0x2, 0x162, 0x11, 0x3, 0x2, 0x2, 0x2, 0x163, 0x164, - 0x7, 0x68, 0x2, 0x2, 0x164, 0x165, 0x7, 0x67, 0x2, 0x2, 0x165, 0x166, - 0x7, 0x63, 0x2, 0x2, 0x166, 0x167, 0x7, 0x76, 0x2, 0x2, 0x167, 0x168, - 0x7, 0x77, 0x2, 0x2, 0x168, 0x169, 0x7, 0x74, 0x2, 0x2, 0x169, 0x16a, - 0x7, 0x67, 0x2, 0x2, 0x16a, 0x13, 0x3, 0x2, 0x2, 0x2, 0x16b, 0x16c, - 0x7, 0x76, 0x2, 0x2, 0x16c, 0x16d, 0x7, 0x63, 0x2, 0x2, 0x16d, 0x16e, - 0x7, 0x64, 0x2, 0x2, 0x16e, 0x16f, 0x7, 0x6e, 0x2, 0x2, 0x16f, 0x170, - 0x7, 0x67, 0x2, 0x2, 0x170, 0x15, 0x3, 0x2, 0x2, 0x2, 0x171, 0x172, - 0x7, 0x75, 0x2, 0x2, 0x172, 0x173, 0x7, 0x65, 0x2, 0x2, 0x173, 0x174, - 0x7, 0x74, 0x2, 0x2, 0x174, 0x175, 0x7, 0x6b, 0x2, 0x2, 0x175, 0x176, - 0x7, 0x72, 0x2, 0x2, 0x176, 0x177, 0x7, 0x76, 0x2, 0x2, 0x177, 0x17, - 0x3, 0x2, 0x2, 0x2, 0x178, 0x179, 0x7, 0x6e, 0x2, 0x2, 0x179, 0x17a, - 0x7, 0x63, 0x2, 0x2, 0x17a, 0x17b, 0x7, 0x70, 0x2, 0x2, 0x17b, 0x17c, - 0x7, 0x69, 0x2, 0x2, 0x17c, 0x17d, 0x7, 0x77, 0x2, 0x2, 0x17d, 0x17e, - 0x7, 0x63, 0x2, 0x2, 0x17e, 0x17f, 0x7, 0x69, 0x2, 0x2, 0x17f, 0x180, - 0x7, 0x67, 0x2, 0x2, 0x180, 0x19, 0x3, 0x2, 0x2, 0x2, 0x181, 0x182, - 0x7, 0x6e, 0x2, 0x2, 0x182, 0x183, 0x7, 0x63, 0x2, 0x2, 0x183, 0x184, - 0x7, 0x70, 0x2, 0x2, 0x184, 0x185, 0x7, 0x69, 0x2, 0x2, 0x185, 0x186, - 0x7, 0x77, 0x2, 0x2, 0x186, 0x187, 0x7, 0x63, 0x2, 0x2, 0x187, 0x188, - 0x7, 0x69, 0x2, 0x2, 0x188, 0x189, 0x7, 0x67, 0x2, 0x2, 0x189, 0x18a, - 0x7, 0x75, 0x2, 0x2, 0x18a, 0x18b, 0x7, 0x7b, 0x2, 0x2, 0x18b, 0x18c, - 0x7, 0x75, 0x2, 0x2, 0x18c, 0x18d, 0x7, 0x76, 0x2, 0x2, 0x18d, 0x18e, - 0x7, 0x67, 0x2, 0x2, 0x18e, 0x18f, 0x7, 0x6f, 0x2, 0x2, 0x18f, 0x1b, - 0x3, 0x2, 0x2, 0x2, 0x190, 0x191, 0x7, 0x75, 0x2, 0x2, 0x191, 0x192, - 0x7, 0x77, 0x2, 0x2, 0x192, 0x193, 0x7, 0x64, 0x2, 0x2, 0x193, 0x194, - 0x7, 0x76, 0x2, 0x2, 0x194, 0x195, 0x7, 0x63, 0x2, 0x2, 0x195, 0x196, - 0x7, 0x64, 0x2, 0x2, 0x196, 0x197, 0x7, 0x6e, 0x2, 0x2, 0x197, 0x198, - 0x7, 0x67, 0x2, 0x2, 0x198, 0x1d, 0x3, 0x2, 0x2, 0x2, 0x199, 0x19a, - 0x7, 0x6e, 0x2, 0x2, 0x19a, 0x19b, 0x7, 0x71, 0x2, 0x2, 0x19b, 0x19c, - 0x7, 0x71, 0x2, 0x2, 0x19c, 0x19d, 0x7, 0x6d, 0x2, 0x2, 0x19d, 0x19e, - 0x7, 0x77, 0x2, 0x2, 0x19e, 0x19f, 0x7, 0x72, 0x2, 0x2, 0x19f, 0x1f, - 0x3, 0x2, 0x2, 0x2, 0x1a0, 0x1a1, 0x7, 0x6e, 0x2, 0x2, 0x1a1, 0x1a2, - 0x7, 0x71, 0x2, 0x2, 0x1a2, 0x1a3, 0x7, 0x71, 0x2, 0x2, 0x1a3, 0x1a4, - 0x7, 0x6d, 0x2, 0x2, 0x1a4, 0x1a5, 0x7, 0x77, 0x2, 0x2, 0x1a5, 0x1a6, - 0x7, 0x72, 0x2, 0x2, 0x1a6, 0x1a7, 0x7, 0x68, 0x2, 0x2, 0x1a7, 0x1a8, - 0x7, 0x6e, 0x2, 0x2, 0x1a8, 0x1a9, 0x7, 0x63, 0x2, 0x2, 0x1a9, 0x1aa, - 0x7, 0x69, 0x2, 0x2, 0x1aa, 0x21, 0x3, 0x2, 0x2, 0x2, 0x1ab, 0x1ac, - 0x7, 0x30, 0x2, 0x2, 0x1ac, 0x1ad, 0x7, 0x70, 0x2, 0x2, 0x1ad, 0x1ae, - 0x7, 0x71, 0x2, 0x2, 0x1ae, 0x1af, 0x7, 0x76, 0x2, 0x2, 0x1af, 0x1b0, - 0x7, 0x66, 0x2, 0x2, 0x1b0, 0x1b1, 0x7, 0x67, 0x2, 0x2, 0x1b1, 0x1b2, - 0x7, 0x68, 0x2, 0x2, 0x1b2, 0x23, 0x3, 0x2, 0x2, 0x2, 0x1b3, 0x1b4, - 0x7, 0x54, 0x2, 0x2, 0x1b4, 0x1b5, 0x7, 0x6b, 0x2, 0x2, 0x1b5, 0x1b6, - 0x7, 0x69, 0x2, 0x2, 0x1b6, 0x1b7, 0x7, 0x6a, 0x2, 0x2, 0x1b7, 0x1b8, - 0x7, 0x76, 0x2, 0x2, 0x1b8, 0x1b9, 0x7, 0x56, 0x2, 0x2, 0x1b9, 0x1ba, - 0x7, 0x71, 0x2, 0x2, 0x1ba, 0x1bb, 0x7, 0x4e, 0x2, 0x2, 0x1bb, 0x1bc, - 0x7, 0x67, 0x2, 0x2, 0x1bc, 0x1bd, 0x7, 0x68, 0x2, 0x2, 0x1bd, 0x1be, - 0x7, 0x76, 0x2, 0x2, 0x1be, 0x25, 0x3, 0x2, 0x2, 0x2, 0x1bf, 0x1c0, - 0x7, 0x4b, 0x2, 0x2, 0x1c0, 0x1c1, 0x7, 0x69, 0x2, 0x2, 0x1c1, 0x1c2, - 0x7, 0x70, 0x2, 0x2, 0x1c2, 0x1c3, 0x7, 0x71, 0x2, 0x2, 0x1c3, 0x1c4, - 0x7, 0x74, 0x2, 0x2, 0x1c4, 0x1c5, 0x7, 0x67, 0x2, 0x2, 0x1c5, 0x1c6, - 0x7, 0x44, 0x2, 0x2, 0x1c6, 0x1c7, 0x7, 0x63, 0x2, 0x2, 0x1c7, 0x1c8, - 0x7, 0x75, 0x2, 0x2, 0x1c8, 0x1c9, 0x7, 0x67, 0x2, 0x2, 0x1c9, 0x1ca, - 0x7, 0x49, 0x2, 0x2, 0x1ca, 0x1cb, 0x7, 0x6e, 0x2, 0x2, 0x1cb, 0x1cc, - 0x7, 0x7b, 0x2, 0x2, 0x1cc, 0x1cd, 0x7, 0x72, 0x2, 0x2, 0x1cd, 0x1ce, - 0x7, 0x6a, 0x2, 0x2, 0x1ce, 0x1cf, 0x7, 0x75, 0x2, 0x2, 0x1cf, 0x27, - 0x3, 0x2, 0x2, 0x2, 0x1d0, 0x1d1, 0x7, 0x4b, 0x2, 0x2, 0x1d1, 0x1d2, - 0x7, 0x69, 0x2, 0x2, 0x1d2, 0x1d3, 0x7, 0x70, 0x2, 0x2, 0x1d3, 0x1d4, - 0x7, 0x71, 0x2, 0x2, 0x1d4, 0x1d5, 0x7, 0x74, 0x2, 0x2, 0x1d5, 0x1d6, - 0x7, 0x67, 0x2, 0x2, 0x1d6, 0x1d7, 0x7, 0x4e, 0x2, 0x2, 0x1d7, 0x1d8, - 0x7, 0x6b, 0x2, 0x2, 0x1d8, 0x1d9, 0x7, 0x69, 0x2, 0x2, 0x1d9, 0x1da, - 0x7, 0x63, 0x2, 0x2, 0x1da, 0x1db, 0x7, 0x76, 0x2, 0x2, 0x1db, 0x1dc, - 0x7, 0x77, 0x2, 0x2, 0x1dc, 0x1dd, 0x7, 0x74, 0x2, 0x2, 0x1dd, 0x1de, - 0x7, 0x67, 0x2, 0x2, 0x1de, 0x1df, 0x7, 0x75, 0x2, 0x2, 0x1df, 0x29, - 0x3, 0x2, 0x2, 0x2, 0x1e0, 0x1e1, 0x7, 0x4b, 0x2, 0x2, 0x1e1, 0x1e2, - 0x7, 0x69, 0x2, 0x2, 0x1e2, 0x1e3, 0x7, 0x70, 0x2, 0x2, 0x1e3, 0x1e4, - 0x7, 0x71, 0x2, 0x2, 0x1e4, 0x1e5, 0x7, 0x74, 0x2, 0x2, 0x1e5, 0x1e6, - 0x7, 0x67, 0x2, 0x2, 0x1e6, 0x1e7, 0x7, 0x4f, 0x2, 0x2, 0x1e7, 0x1e8, - 0x7, 0x63, 0x2, 0x2, 0x1e8, 0x1e9, 0x7, 0x74, 0x2, 0x2, 0x1e9, 0x1ea, - 0x7, 0x6d, 0x2, 0x2, 0x1ea, 0x1eb, 0x7, 0x75, 0x2, 0x2, 0x1eb, 0x2b, - 0x3, 0x2, 0x2, 0x2, 0x1ec, 0x1ed, 0x7, 0x57, 0x2, 0x2, 0x1ed, 0x1ee, - 0x7, 0x75, 0x2, 0x2, 0x1ee, 0x1ef, 0x7, 0x67, 0x2, 0x2, 0x1ef, 0x1f0, - 0x7, 0x4f, 0x2, 0x2, 0x1f0, 0x1f1, 0x7, 0x63, 0x2, 0x2, 0x1f1, 0x1f2, - 0x7, 0x74, 0x2, 0x2, 0x1f2, 0x1f3, 0x7, 0x6d, 0x2, 0x2, 0x1f3, 0x1f4, - 0x7, 0x48, 0x2, 0x2, 0x1f4, 0x1f5, 0x7, 0x6b, 0x2, 0x2, 0x1f5, 0x1f6, - 0x7, 0x6e, 0x2, 0x2, 0x1f6, 0x1f7, 0x7, 0x76, 0x2, 0x2, 0x1f7, 0x1f8, - 0x7, 0x67, 0x2, 0x2, 0x1f8, 0x1f9, 0x7, 0x74, 0x2, 0x2, 0x1f9, 0x1fa, - 0x7, 0x6b, 0x2, 0x2, 0x1fa, 0x1fb, 0x7, 0x70, 0x2, 0x2, 0x1fb, 0x1fc, - 0x7, 0x69, 0x2, 0x2, 0x1fc, 0x1fd, 0x7, 0x55, 0x2, 0x2, 0x1fd, 0x1fe, - 0x7, 0x67, 0x2, 0x2, 0x1fe, 0x1ff, 0x7, 0x76, 0x2, 0x2, 0x1ff, 0x2d, - 0x3, 0x2, 0x2, 0x2, 0x200, 0x201, 0x7, 0x4f, 0x2, 0x2, 0x201, 0x202, - 0x7, 0x63, 0x2, 0x2, 0x202, 0x203, 0x7, 0x74, 0x2, 0x2, 0x203, 0x204, - 0x7, 0x6d, 0x2, 0x2, 0x204, 0x205, 0x7, 0x43, 0x2, 0x2, 0x205, 0x206, - 0x7, 0x76, 0x2, 0x2, 0x206, 0x207, 0x7, 0x76, 0x2, 0x2, 0x207, 0x208, - 0x7, 0x63, 0x2, 0x2, 0x208, 0x209, 0x7, 0x65, 0x2, 0x2, 0x209, 0x20a, - 0x7, 0x6a, 0x2, 0x2, 0x20a, 0x20b, 0x7, 0x6f, 0x2, 0x2, 0x20b, 0x20c, - 0x7, 0x67, 0x2, 0x2, 0x20c, 0x20d, 0x7, 0x70, 0x2, 0x2, 0x20d, 0x20e, - 0x7, 0x76, 0x2, 0x2, 0x20e, 0x20f, 0x7, 0x56, 0x2, 0x2, 0x20f, 0x210, - 0x7, 0x7b, 0x2, 0x2, 0x210, 0x211, 0x7, 0x72, 0x2, 0x2, 0x211, 0x212, - 0x7, 0x67, 0x2, 0x2, 0x212, 0x2f, 0x3, 0x2, 0x2, 0x2, 0x213, 0x214, - 0x7, 0x67, 0x2, 0x2, 0x214, 0x215, 0x7, 0x7a, 0x2, 0x2, 0x215, 0x216, - 0x7, 0x65, 0x2, 0x2, 0x216, 0x217, 0x7, 0x6e, 0x2, 0x2, 0x217, 0x218, - 0x7, 0x77, 0x2, 0x2, 0x218, 0x219, 0x7, 0x66, 0x2, 0x2, 0x219, 0x21a, - 0x7, 0x67, 0x2, 0x2, 0x21a, 0x21b, 0x7, 0x46, 0x2, 0x2, 0x21b, 0x21c, - 0x7, 0x48, 0x2, 0x2, 0x21c, 0x21d, 0x7, 0x4e, 0x2, 0x2, 0x21d, 0x21e, - 0x7, 0x56, 0x2, 0x2, 0x21e, 0x31, 0x3, 0x2, 0x2, 0x2, 0x21f, 0x220, - 0x7, 0x6b, 0x2, 0x2, 0x220, 0x221, 0x7, 0x70, 0x2, 0x2, 0x221, 0x222, - 0x7, 0x65, 0x2, 0x2, 0x222, 0x223, 0x7, 0x6e, 0x2, 0x2, 0x223, 0x224, - 0x7, 0x77, 0x2, 0x2, 0x224, 0x225, 0x7, 0x66, 0x2, 0x2, 0x225, 0x226, - 0x7, 0x67, 0x2, 0x2, 0x226, 0x227, 0x7, 0x46, 0x2, 0x2, 0x227, 0x228, - 0x7, 0x48, 0x2, 0x2, 0x228, 0x229, 0x7, 0x4e, 0x2, 0x2, 0x229, 0x22a, - 0x7, 0x56, 0x2, 0x2, 0x22a, 0x33, 0x3, 0x2, 0x2, 0x2, 0x22b, 0x22c, - 0x7, 0x67, 0x2, 0x2, 0x22c, 0x22d, 0x7, 0x7a, 0x2, 0x2, 0x22d, 0x22e, - 0x7, 0x65, 0x2, 0x2, 0x22e, 0x22f, 0x7, 0x6e, 0x2, 0x2, 0x22f, 0x230, - 0x7, 0x77, 0x2, 0x2, 0x230, 0x231, 0x7, 0x66, 0x2, 0x2, 0x231, 0x232, - 0x7, 0x67, 0x2, 0x2, 0x232, 0x233, 0x7, 0x61, 0x2, 0x2, 0x233, 0x234, - 0x7, 0x66, 0x2, 0x2, 0x234, 0x235, 0x7, 0x68, 0x2, 0x2, 0x235, 0x236, - 0x7, 0x6e, 0x2, 0x2, 0x236, 0x237, 0x7, 0x76, 0x2, 0x2, 0x237, 0x35, - 0x3, 0x2, 0x2, 0x2, 0x238, 0x239, 0x7, 0x6b, 0x2, 0x2, 0x239, 0x23a, - 0x7, 0x70, 0x2, 0x2, 0x23a, 0x23b, 0x7, 0x65, 0x2, 0x2, 0x23b, 0x23c, - 0x7, 0x6e, 0x2, 0x2, 0x23c, 0x23d, 0x7, 0x77, 0x2, 0x2, 0x23d, 0x23e, - 0x7, 0x66, 0x2, 0x2, 0x23e, 0x23f, 0x7, 0x67, 0x2, 0x2, 0x23f, 0x240, - 0x7, 0x61, 0x2, 0x2, 0x240, 0x241, 0x7, 0x66, 0x2, 0x2, 0x241, 0x242, - 0x7, 0x68, 0x2, 0x2, 0x242, 0x243, 0x7, 0x6e, 0x2, 0x2, 0x243, 0x244, - 0x7, 0x76, 0x2, 0x2, 0x244, 0x37, 0x3, 0x2, 0x2, 0x2, 0x245, 0x246, - 0x7, 0x77, 0x2, 0x2, 0x246, 0x247, 0x7, 0x75, 0x2, 0x2, 0x247, 0x248, - 0x7, 0x67, 0x2, 0x2, 0x248, 0x249, 0x7, 0x47, 0x2, 0x2, 0x249, 0x24a, - 0x7, 0x7a, 0x2, 0x2, 0x24a, 0x24b, 0x7, 0x76, 0x2, 0x2, 0x24b, 0x24c, - 0x7, 0x67, 0x2, 0x2, 0x24c, 0x24d, 0x7, 0x70, 0x2, 0x2, 0x24d, 0x24e, - 0x7, 0x75, 0x2, 0x2, 0x24e, 0x24f, 0x7, 0x6b, 0x2, 0x2, 0x24f, 0x250, - 0x7, 0x71, 0x2, 0x2, 0x250, 0x251, 0x7, 0x70, 0x2, 0x2, 0x251, 0x39, - 0x3, 0x2, 0x2, 0x2, 0x252, 0x253, 0x7, 0x3e, 0x2, 0x2, 0x253, 0x3b, - 0x3, 0x2, 0x2, 0x2, 0x254, 0x255, 0x7, 0x40, 0x2, 0x2, 0x255, 0x3d, - 0x3, 0x2, 0x2, 0x2, 0x256, 0x257, 0x7, 0x67, 0x2, 0x2, 0x257, 0x258, - 0x7, 0x70, 0x2, 0x2, 0x258, 0x259, 0x7, 0x77, 0x2, 0x2, 0x259, 0x25a, - 0x7, 0x6f, 0x2, 0x2, 0x25a, 0x25b, 0x7, 0x67, 0x2, 0x2, 0x25b, 0x25c, - 0x7, 0x74, 0x2, 0x2, 0x25c, 0x25d, 0x7, 0x63, 0x2, 0x2, 0x25d, 0x25e, - 0x7, 0x76, 0x2, 0x2, 0x25e, 0x25f, 0x7, 0x67, 0x2, 0x2, 0x25f, 0x3f, - 0x3, 0x2, 0x2, 0x2, 0x260, 0x261, 0x7, 0x67, 0x2, 0x2, 0x261, 0x262, - 0x7, 0x70, 0x2, 0x2, 0x262, 0x263, 0x7, 0x77, 0x2, 0x2, 0x263, 0x264, - 0x7, 0x6f, 0x2, 0x2, 0x264, 0x41, 0x3, 0x2, 0x2, 0x2, 0x265, 0x266, - 0x7, 0x67, 0x2, 0x2, 0x266, 0x267, 0x7, 0x7a, 0x2, 0x2, 0x267, 0x268, - 0x7, 0x65, 0x2, 0x2, 0x268, 0x269, 0x7, 0x67, 0x2, 0x2, 0x269, 0x26a, - 0x7, 0x72, 0x2, 0x2, 0x26a, 0x26b, 0x7, 0x76, 0x2, 0x2, 0x26b, 0x43, - 0x3, 0x2, 0x2, 0x2, 0x26c, 0x26d, 0x7, 0x6b, 0x2, 0x2, 0x26d, 0x26e, - 0x7, 0x69, 0x2, 0x2, 0x26e, 0x26f, 0x7, 0x70, 0x2, 0x2, 0x26f, 0x270, - 0x7, 0x71, 0x2, 0x2, 0x270, 0x271, 0x7, 0x74, 0x2, 0x2, 0x271, 0x272, - 0x7, 0x67, 0x2, 0x2, 0x272, 0x45, 0x3, 0x2, 0x2, 0x2, 0x273, 0x274, - 0x7, 0x75, 0x2, 0x2, 0x274, 0x275, 0x7, 0x77, 0x2, 0x2, 0x275, 0x276, - 0x7, 0x64, 0x2, 0x2, 0x276, 0x277, 0x7, 0x75, 0x2, 0x2, 0x277, 0x278, - 0x7, 0x76, 0x2, 0x2, 0x278, 0x279, 0x7, 0x6b, 0x2, 0x2, 0x279, 0x27a, - 0x7, 0x76, 0x2, 0x2, 0x27a, 0x27b, 0x7, 0x77, 0x2, 0x2, 0x27b, 0x27c, - 0x7, 0x76, 0x2, 0x2, 0x27c, 0x27d, 0x7, 0x67, 0x2, 0x2, 0x27d, 0x47, - 0x3, 0x2, 0x2, 0x2, 0x27e, 0x27f, 0x7, 0x75, 0x2, 0x2, 0x27f, 0x280, - 0x7, 0x77, 0x2, 0x2, 0x280, 0x281, 0x7, 0x64, 0x2, 0x2, 0x281, 0x49, - 0x3, 0x2, 0x2, 0x2, 0x282, 0x283, 0x7, 0x74, 0x2, 0x2, 0x283, 0x284, - 0x7, 0x67, 0x2, 0x2, 0x284, 0x285, 0x7, 0x78, 0x2, 0x2, 0x285, 0x286, - 0x7, 0x67, 0x2, 0x2, 0x286, 0x287, 0x7, 0x74, 0x2, 0x2, 0x287, 0x288, - 0x7, 0x75, 0x2, 0x2, 0x288, 0x289, 0x7, 0x67, 0x2, 0x2, 0x289, 0x28a, - 0x7, 0x75, 0x2, 0x2, 0x28a, 0x28b, 0x7, 0x77, 0x2, 0x2, 0x28b, 0x28c, - 0x7, 0x64, 0x2, 0x2, 0x28c, 0x4b, 0x3, 0x2, 0x2, 0x2, 0x28d, 0x28e, - 0x7, 0x74, 0x2, 0x2, 0x28e, 0x28f, 0x7, 0x75, 0x2, 0x2, 0x28f, 0x290, - 0x7, 0x77, 0x2, 0x2, 0x290, 0x291, 0x7, 0x64, 0x2, 0x2, 0x291, 0x4d, - 0x3, 0x2, 0x2, 0x2, 0x292, 0x293, 0x7, 0x64, 0x2, 0x2, 0x293, 0x294, - 0x7, 0x7b, 0x2, 0x2, 0x294, 0x4f, 0x3, 0x2, 0x2, 0x2, 0x295, 0x296, - 0x7, 0x68, 0x2, 0x2, 0x296, 0x297, 0x7, 0x74, 0x2, 0x2, 0x297, 0x298, - 0x7, 0x71, 0x2, 0x2, 0x298, 0x299, 0x7, 0x6f, 0x2, 0x2, 0x299, 0x51, - 0x3, 0x2, 0x2, 0x2, 0x29a, 0x29b, 0x7, 0x72, 0x2, 0x2, 0x29b, 0x29c, - 0x7, 0x71, 0x2, 0x2, 0x29c, 0x29d, 0x7, 0x75, 0x2, 0x2, 0x29d, 0x29e, - 0x7, 0x6b, 0x2, 0x2, 0x29e, 0x29f, 0x7, 0x76, 0x2, 0x2, 0x29f, 0x2a0, - 0x7, 0x6b, 0x2, 0x2, 0x2a0, 0x2a1, 0x7, 0x71, 0x2, 0x2, 0x2a1, 0x2a2, - 0x7, 0x70, 0x2, 0x2, 0x2a2, 0x53, 0x3, 0x2, 0x2, 0x2, 0x2a3, 0x2a4, - 0x7, 0x72, 0x2, 0x2, 0x2a4, 0x2a5, 0x7, 0x71, 0x2, 0x2, 0x2a5, 0x2a6, - 0x7, 0x75, 0x2, 0x2, 0x2a6, 0x55, 0x3, 0x2, 0x2, 0x2, 0x2a7, 0x2a8, - 0x7, 0x72, 0x2, 0x2, 0x2a8, 0x2a9, 0x7, 0x63, 0x2, 0x2, 0x2a9, 0x2aa, - 0x7, 0x74, 0x2, 0x2, 0x2aa, 0x2ab, 0x7, 0x63, 0x2, 0x2, 0x2ab, 0x2ac, - 0x7, 0x6f, 0x2, 0x2, 0x2ac, 0x2ad, 0x7, 0x67, 0x2, 0x2, 0x2ad, 0x2ae, - 0x7, 0x76, 0x2, 0x2, 0x2ae, 0x2af, 0x7, 0x67, 0x2, 0x2, 0x2af, 0x2b0, - 0x7, 0x74, 0x2, 0x2, 0x2b0, 0x2b1, 0x7, 0x75, 0x2, 0x2, 0x2b1, 0x57, - 0x3, 0x2, 0x2, 0x2, 0x2b2, 0x2b3, 0x7, 0x68, 0x2, 0x2, 0x2b3, 0x2b4, - 0x7, 0x67, 0x2, 0x2, 0x2b4, 0x2b5, 0x7, 0x63, 0x2, 0x2, 0x2b5, 0x2b6, - 0x7, 0x76, 0x2, 0x2, 0x2b6, 0x2b7, 0x7, 0x77, 0x2, 0x2, 0x2b7, 0x2b8, - 0x7, 0x74, 0x2, 0x2, 0x2b8, 0x2b9, 0x7, 0x67, 0x2, 0x2, 0x2b9, 0x2ba, - 0x7, 0x50, 0x2, 0x2, 0x2ba, 0x2bb, 0x7, 0x63, 0x2, 0x2, 0x2bb, 0x2bc, - 0x7, 0x6f, 0x2, 0x2, 0x2bc, 0x2bd, 0x7, 0x67, 0x2, 0x2, 0x2bd, 0x2be, - 0x7, 0x75, 0x2, 0x2, 0x2be, 0x59, 0x3, 0x2, 0x2, 0x2, 0x2bf, 0x2c0, - 0x7, 0x65, 0x2, 0x2, 0x2c0, 0x2c1, 0x7, 0x78, 0x2, 0x2, 0x2c1, 0x2c2, - 0x7, 0x52, 0x2, 0x2, 0x2c2, 0x2c3, 0x7, 0x63, 0x2, 0x2, 0x2c3, 0x2c4, - 0x7, 0x74, 0x2, 0x2, 0x2c4, 0x2c5, 0x7, 0x63, 0x2, 0x2, 0x2c5, 0x2c6, - 0x7, 0x6f, 0x2, 0x2, 0x2c6, 0x2c7, 0x7, 0x67, 0x2, 0x2, 0x2c7, 0x2c8, - 0x7, 0x76, 0x2, 0x2, 0x2c8, 0x2c9, 0x7, 0x67, 0x2, 0x2, 0x2c9, 0x2ca, - 0x7, 0x74, 0x2, 0x2, 0x2ca, 0x2cb, 0x7, 0x75, 0x2, 0x2, 0x2cb, 0x5b, - 0x3, 0x2, 0x2, 0x2, 0x2cc, 0x2cd, 0x7, 0x48, 0x2, 0x2, 0x2cd, 0x2ce, - 0x7, 0x67, 0x2, 0x2, 0x2ce, 0x2cf, 0x7, 0x63, 0x2, 0x2, 0x2cf, 0x2d0, - 0x7, 0x76, 0x2, 0x2, 0x2d0, 0x2d1, 0x7, 0x57, 0x2, 0x2, 0x2d1, 0x2d2, - 0x7, 0x4b, 0x2, 0x2, 0x2d2, 0x2d3, 0x7, 0x4e, 0x2, 0x2, 0x2d3, 0x2d4, - 0x7, 0x63, 0x2, 0x2, 0x2d4, 0x2d5, 0x7, 0x64, 0x2, 0x2, 0x2d5, 0x2d6, - 0x7, 0x67, 0x2, 0x2, 0x2d6, 0x2d7, 0x7, 0x6e, 0x2, 0x2, 0x2d7, 0x2d8, - 0x7, 0x50, 0x2, 0x2, 0x2d8, 0x2d9, 0x7, 0x63, 0x2, 0x2, 0x2d9, 0x2da, - 0x7, 0x6f, 0x2, 0x2, 0x2da, 0x2db, 0x7, 0x67, 0x2, 0x2, 0x2db, 0x2dc, - 0x7, 0x4b, 0x2, 0x2, 0x2dc, 0x2dd, 0x7, 0x46, 0x2, 0x2, 0x2dd, 0x5d, - 0x3, 0x2, 0x2, 0x2, 0x2de, 0x2df, 0x7, 0x48, 0x2, 0x2, 0x2df, 0x2e0, - 0x7, 0x67, 0x2, 0x2, 0x2e0, 0x2e1, 0x7, 0x63, 0x2, 0x2, 0x2e1, 0x2e2, - 0x7, 0x76, 0x2, 0x2, 0x2e2, 0x2e3, 0x7, 0x57, 0x2, 0x2, 0x2e3, 0x2e4, - 0x7, 0x4b, 0x2, 0x2, 0x2e4, 0x2e5, 0x7, 0x56, 0x2, 0x2, 0x2e5, 0x2e6, - 0x7, 0x71, 0x2, 0x2, 0x2e6, 0x2e7, 0x7, 0x71, 0x2, 0x2, 0x2e7, 0x2e8, - 0x7, 0x6e, 0x2, 0x2, 0x2e8, 0x2e9, 0x7, 0x76, 0x2, 0x2, 0x2e9, 0x2ea, - 0x7, 0x6b, 0x2, 0x2, 0x2ea, 0x2eb, 0x7, 0x72, 0x2, 0x2, 0x2eb, 0x2ec, - 0x7, 0x56, 0x2, 0x2, 0x2ec, 0x2ed, 0x7, 0x67, 0x2, 0x2, 0x2ed, 0x2ee, - 0x7, 0x7a, 0x2, 0x2, 0x2ee, 0x2ef, 0x7, 0x76, 0x2, 0x2, 0x2ef, 0x2f0, - 0x7, 0x50, 0x2, 0x2, 0x2f0, 0x2f1, 0x7, 0x63, 0x2, 0x2, 0x2f1, 0x2f2, - 0x7, 0x6f, 0x2, 0x2, 0x2f2, 0x2f3, 0x7, 0x67, 0x2, 0x2, 0x2f3, 0x2f4, - 0x7, 0x4b, 0x2, 0x2, 0x2f4, 0x2f5, 0x7, 0x46, 0x2, 0x2, 0x2f5, 0x5f, - 0x3, 0x2, 0x2, 0x2, 0x2f6, 0x2f7, 0x7, 0x55, 0x2, 0x2, 0x2f7, 0x2f8, - 0x7, 0x63, 0x2, 0x2, 0x2f8, 0x2f9, 0x7, 0x6f, 0x2, 0x2, 0x2f9, 0x2fa, - 0x7, 0x72, 0x2, 0x2, 0x2fa, 0x2fb, 0x7, 0x6e, 0x2, 0x2, 0x2fb, 0x2fc, - 0x7, 0x67, 0x2, 0x2, 0x2fc, 0x2fd, 0x7, 0x56, 0x2, 0x2, 0x2fd, 0x2fe, - 0x7, 0x67, 0x2, 0x2, 0x2fe, 0x2ff, 0x7, 0x7a, 0x2, 0x2, 0x2ff, 0x300, - 0x7, 0x76, 0x2, 0x2, 0x300, 0x301, 0x7, 0x50, 0x2, 0x2, 0x301, 0x302, - 0x7, 0x63, 0x2, 0x2, 0x302, 0x303, 0x7, 0x6f, 0x2, 0x2, 0x303, 0x304, - 0x7, 0x67, 0x2, 0x2, 0x304, 0x305, 0x7, 0x4b, 0x2, 0x2, 0x305, 0x306, - 0x7, 0x46, 0x2, 0x2, 0x306, 0x61, 0x3, 0x2, 0x2, 0x2, 0x307, 0x308, - 0x7, 0x52, 0x2, 0x2, 0x308, 0x309, 0x7, 0x63, 0x2, 0x2, 0x309, 0x30a, - 0x7, 0x74, 0x2, 0x2, 0x30a, 0x30b, 0x7, 0x63, 0x2, 0x2, 0x30b, 0x30c, - 0x7, 0x6f, 0x2, 0x2, 0x30c, 0x30d, 0x7, 0x57, 0x2, 0x2, 0x30d, 0x30e, - 0x7, 0x4b, 0x2, 0x2, 0x30e, 0x30f, 0x7, 0x4e, 0x2, 0x2, 0x30f, 0x310, - 0x7, 0x63, 0x2, 0x2, 0x310, 0x311, 0x7, 0x64, 0x2, 0x2, 0x311, 0x312, - 0x7, 0x67, 0x2, 0x2, 0x312, 0x313, 0x7, 0x6e, 0x2, 0x2, 0x313, 0x314, - 0x7, 0x50, 0x2, 0x2, 0x314, 0x315, 0x7, 0x63, 0x2, 0x2, 0x315, 0x316, - 0x7, 0x6f, 0x2, 0x2, 0x316, 0x317, 0x7, 0x67, 0x2, 0x2, 0x317, 0x318, - 0x7, 0x4b, 0x2, 0x2, 0x318, 0x319, 0x7, 0x46, 0x2, 0x2, 0x319, 0x63, - 0x3, 0x2, 0x2, 0x2, 0x31a, 0x31b, 0x7, 0x45, 0x2, 0x2, 0x31b, 0x31c, - 0x7, 0x6a, 0x2, 0x2, 0x31c, 0x31d, 0x7, 0x63, 0x2, 0x2, 0x31d, 0x31e, - 0x7, 0x74, 0x2, 0x2, 0x31e, 0x31f, 0x7, 0x63, 0x2, 0x2, 0x31f, 0x320, - 0x7, 0x65, 0x2, 0x2, 0x320, 0x321, 0x7, 0x76, 0x2, 0x2, 0x321, 0x322, - 0x7, 0x67, 0x2, 0x2, 0x322, 0x323, 0x7, 0x74, 0x2, 0x2, 0x323, 0x65, - 0x3, 0x2, 0x2, 0x2, 0x324, 0x325, 0x7, 0x75, 0x2, 0x2, 0x325, 0x326, - 0x7, 0x6b, 0x2, 0x2, 0x326, 0x327, 0x7, 0x7c, 0x2, 0x2, 0x327, 0x328, - 0x7, 0x67, 0x2, 0x2, 0x328, 0x329, 0x7, 0x6f, 0x2, 0x2, 0x329, 0x32a, - 0x7, 0x67, 0x2, 0x2, 0x32a, 0x32b, 0x7, 0x70, 0x2, 0x2, 0x32b, 0x32c, - 0x7, 0x77, 0x2, 0x2, 0x32c, 0x32d, 0x7, 0x70, 0x2, 0x2, 0x32d, 0x32e, - 0x7, 0x63, 0x2, 0x2, 0x32e, 0x32f, 0x7, 0x6f, 0x2, 0x2, 0x32f, 0x330, - 0x7, 0x67, 0x2, 0x2, 0x330, 0x67, 0x3, 0x2, 0x2, 0x2, 0x331, 0x332, - 0x7, 0x65, 0x2, 0x2, 0x332, 0x333, 0x7, 0x71, 0x2, 0x2, 0x333, 0x334, - 0x7, 0x70, 0x2, 0x2, 0x334, 0x335, 0x7, 0x76, 0x2, 0x2, 0x335, 0x336, - 0x7, 0x71, 0x2, 0x2, 0x336, 0x337, 0x7, 0x77, 0x2, 0x2, 0x337, 0x338, - 0x7, 0x74, 0x2, 0x2, 0x338, 0x339, 0x7, 0x72, 0x2, 0x2, 0x339, 0x33a, - 0x7, 0x71, 0x2, 0x2, 0x33a, 0x33b, 0x7, 0x6b, 0x2, 0x2, 0x33b, 0x33c, - 0x7, 0x70, 0x2, 0x2, 0x33c, 0x33d, 0x7, 0x76, 0x2, 0x2, 0x33d, 0x69, - 0x3, 0x2, 0x2, 0x2, 0x33e, 0x33f, 0x7, 0x63, 0x2, 0x2, 0x33f, 0x340, - 0x7, 0x70, 0x2, 0x2, 0x340, 0x341, 0x7, 0x65, 0x2, 0x2, 0x341, 0x342, - 0x7, 0x6a, 0x2, 0x2, 0x342, 0x343, 0x7, 0x71, 0x2, 0x2, 0x343, 0x344, - 0x7, 0x74, 0x2, 0x2, 0x344, 0x6b, 0x3, 0x2, 0x2, 0x2, 0x345, 0x346, - 0x7, 0x63, 0x2, 0x2, 0x346, 0x347, 0x7, 0x70, 0x2, 0x2, 0x347, 0x348, - 0x7, 0x65, 0x2, 0x2, 0x348, 0x349, 0x7, 0x6a, 0x2, 0x2, 0x349, 0x34a, - 0x7, 0x71, 0x2, 0x2, 0x34a, 0x34b, 0x7, 0x74, 0x2, 0x2, 0x34b, 0x34c, - 0x7, 0x46, 0x2, 0x2, 0x34c, 0x34d, 0x7, 0x67, 0x2, 0x2, 0x34d, 0x34e, - 0x7, 0x68, 0x2, 0x2, 0x34e, 0x6d, 0x3, 0x2, 0x2, 0x2, 0x34f, 0x350, - 0x7, 0x78, 0x2, 0x2, 0x350, 0x351, 0x7, 0x63, 0x2, 0x2, 0x351, 0x352, - 0x7, 0x6e, 0x2, 0x2, 0x352, 0x353, 0x7, 0x77, 0x2, 0x2, 0x353, 0x354, - 0x7, 0x67, 0x2, 0x2, 0x354, 0x355, 0x7, 0x54, 0x2, 0x2, 0x355, 0x356, - 0x7, 0x67, 0x2, 0x2, 0x356, 0x357, 0x7, 0x65, 0x2, 0x2, 0x357, 0x358, - 0x7, 0x71, 0x2, 0x2, 0x358, 0x359, 0x7, 0x74, 0x2, 0x2, 0x359, 0x35a, - 0x7, 0x66, 0x2, 0x2, 0x35a, 0x35b, 0x7, 0x46, 0x2, 0x2, 0x35b, 0x35c, - 0x7, 0x67, 0x2, 0x2, 0x35c, 0x35d, 0x7, 0x68, 0x2, 0x2, 0x35d, 0x6f, - 0x3, 0x2, 0x2, 0x2, 0x35e, 0x35f, 0x7, 0x6f, 0x2, 0x2, 0x35f, 0x360, - 0x7, 0x63, 0x2, 0x2, 0x360, 0x361, 0x7, 0x74, 0x2, 0x2, 0x361, 0x362, - 0x7, 0x6d, 0x2, 0x2, 0x362, 0x71, 0x3, 0x2, 0x2, 0x2, 0x363, 0x364, - 0x7, 0x6f, 0x2, 0x2, 0x364, 0x365, 0x7, 0x63, 0x2, 0x2, 0x365, 0x366, - 0x7, 0x74, 0x2, 0x2, 0x366, 0x367, 0x7, 0x6d, 0x2, 0x2, 0x367, 0x368, - 0x7, 0x45, 0x2, 0x2, 0x368, 0x369, 0x7, 0x6e, 0x2, 0x2, 0x369, 0x36a, - 0x7, 0x63, 0x2, 0x2, 0x36a, 0x36b, 0x7, 0x75, 0x2, 0x2, 0x36b, 0x36c, - 0x7, 0x75, 0x2, 0x2, 0x36c, 0x73, 0x3, 0x2, 0x2, 0x2, 0x36d, 0x36e, - 0x7, 0x65, 0x2, 0x2, 0x36e, 0x36f, 0x7, 0x77, 0x2, 0x2, 0x36f, 0x370, - 0x7, 0x74, 0x2, 0x2, 0x370, 0x371, 0x7, 0x75, 0x2, 0x2, 0x371, 0x372, - 0x7, 0x6b, 0x2, 0x2, 0x372, 0x373, 0x7, 0x78, 0x2, 0x2, 0x373, 0x374, - 0x7, 0x67, 0x2, 0x2, 0x374, 0x75, 0x3, 0x2, 0x2, 0x2, 0x375, 0x376, - 0x7, 0x64, 0x2, 0x2, 0x376, 0x377, 0x7, 0x63, 0x2, 0x2, 0x377, 0x378, - 0x7, 0x75, 0x2, 0x2, 0x378, 0x379, 0x7, 0x67, 0x2, 0x2, 0x379, 0x77, - 0x3, 0x2, 0x2, 0x2, 0x37a, 0x37b, 0x7, 0x6e, 0x2, 0x2, 0x37b, 0x37c, - 0x7, 0x6b, 0x2, 0x2, 0x37c, 0x37d, 0x7, 0x69, 0x2, 0x2, 0x37d, 0x37e, - 0x7, 0x63, 0x2, 0x2, 0x37e, 0x37f, 0x7, 0x76, 0x2, 0x2, 0x37f, 0x380, - 0x7, 0x77, 0x2, 0x2, 0x380, 0x381, 0x7, 0x74, 0x2, 0x2, 0x381, 0x382, - 0x7, 0x67, 0x2, 0x2, 0x382, 0x79, 0x3, 0x2, 0x2, 0x2, 0x383, 0x384, - 0x7, 0x6e, 0x2, 0x2, 0x384, 0x385, 0x7, 0x6b, 0x2, 0x2, 0x385, 0x386, - 0x7, 0x69, 0x2, 0x2, 0x386, 0x7b, 0x3, 0x2, 0x2, 0x2, 0x387, 0x388, - 0x7, 0x6e, 0x2, 0x2, 0x388, 0x389, 0x7, 0x6b, 0x2, 0x2, 0x389, 0x38a, - 0x7, 0x69, 0x2, 0x2, 0x38a, 0x38b, 0x7, 0x45, 0x2, 0x2, 0x38b, 0x38c, - 0x7, 0x71, 0x2, 0x2, 0x38c, 0x38d, 0x7, 0x6f, 0x2, 0x2, 0x38d, 0x38e, - 0x7, 0x72, 0x2, 0x2, 0x38e, 0x38f, 0x7, 0x71, 0x2, 0x2, 0x38f, 0x390, - 0x7, 0x70, 0x2, 0x2, 0x390, 0x391, 0x7, 0x67, 0x2, 0x2, 0x391, 0x392, - 0x7, 0x70, 0x2, 0x2, 0x392, 0x393, 0x7, 0x76, 0x2, 0x2, 0x393, 0x7d, - 0x3, 0x2, 0x2, 0x2, 0x394, 0x395, 0x7, 0x50, 0x2, 0x2, 0x395, 0x396, - 0x7, 0x57, 0x2, 0x2, 0x396, 0x397, 0x7, 0x4e, 0x2, 0x2, 0x397, 0x398, - 0x7, 0x4e, 0x2, 0x2, 0x398, 0x7f, 0x3, 0x2, 0x2, 0x2, 0x399, 0x39a, - 0x7, 0x44, 0x2, 0x2, 0x39a, 0x39b, 0x7, 0x43, 0x2, 0x2, 0x39b, 0x39c, - 0x7, 0x55, 0x2, 0x2, 0x39c, 0x39d, 0x7, 0x47, 0x2, 0x2, 0x39d, 0x81, - 0x3, 0x2, 0x2, 0x2, 0x39e, 0x39f, 0x7, 0x4a, 0x2, 0x2, 0x39f, 0x3a0, - 0x7, 0x71, 0x2, 0x2, 0x3a0, 0x3a1, 0x7, 0x74, 0x2, 0x2, 0x3a1, 0x3a2, - 0x7, 0x6b, 0x2, 0x2, 0x3a2, 0x3a3, 0x7, 0x7c, 0x2, 0x2, 0x3a3, 0x3a4, - 0x7, 0x43, 0x2, 0x2, 0x3a4, 0x3a5, 0x7, 0x7a, 0x2, 0x2, 0x3a5, 0x3a6, - 0x7, 0x6b, 0x2, 0x2, 0x3a6, 0x3a7, 0x7, 0x75, 0x2, 0x2, 0x3a7, 0x3a8, - 0x7, 0x30, 0x2, 0x2, 0x3a8, 0x3a9, 0x7, 0x44, 0x2, 0x2, 0x3a9, 0x3aa, - 0x7, 0x63, 0x2, 0x2, 0x3aa, 0x3ab, 0x7, 0x75, 0x2, 0x2, 0x3ab, 0x3ac, - 0x7, 0x67, 0x2, 0x2, 0x3ac, 0x3ad, 0x7, 0x56, 0x2, 0x2, 0x3ad, 0x3ae, - 0x7, 0x63, 0x2, 0x2, 0x3ae, 0x3af, 0x7, 0x69, 0x2, 0x2, 0x3af, 0x3b0, - 0x7, 0x4e, 0x2, 0x2, 0x3b0, 0x3b1, 0x7, 0x6b, 0x2, 0x2, 0x3b1, 0x3b2, - 0x7, 0x75, 0x2, 0x2, 0x3b2, 0x3b3, 0x7, 0x76, 0x2, 0x2, 0x3b3, 0x83, - 0x3, 0x2, 0x2, 0x2, 0x3b4, 0x3b5, 0x7, 0x58, 0x2, 0x2, 0x3b5, 0x3b6, - 0x7, 0x67, 0x2, 0x2, 0x3b6, 0x3b7, 0x7, 0x74, 0x2, 0x2, 0x3b7, 0x3b8, - 0x7, 0x76, 0x2, 0x2, 0x3b8, 0x3b9, 0x7, 0x43, 0x2, 0x2, 0x3b9, 0x3ba, - 0x7, 0x7a, 0x2, 0x2, 0x3ba, 0x3bb, 0x7, 0x6b, 0x2, 0x2, 0x3bb, 0x3bc, - 0x7, 0x75, 0x2, 0x2, 0x3bc, 0x3bd, 0x7, 0x30, 0x2, 0x2, 0x3bd, 0x3be, - 0x7, 0x44, 0x2, 0x2, 0x3be, 0x3bf, 0x7, 0x63, 0x2, 0x2, 0x3bf, 0x3c0, - 0x7, 0x75, 0x2, 0x2, 0x3c0, 0x3c1, 0x7, 0x67, 0x2, 0x2, 0x3c1, 0x3c2, - 0x7, 0x56, 0x2, 0x2, 0x3c2, 0x3c3, 0x7, 0x63, 0x2, 0x2, 0x3c3, 0x3c4, - 0x7, 0x69, 0x2, 0x2, 0x3c4, 0x3c5, 0x7, 0x4e, 0x2, 0x2, 0x3c5, 0x3c6, - 0x7, 0x6b, 0x2, 0x2, 0x3c6, 0x3c7, 0x7, 0x75, 0x2, 0x2, 0x3c7, 0x3c8, - 0x7, 0x76, 0x2, 0x2, 0x3c8, 0x85, 0x3, 0x2, 0x2, 0x2, 0x3c9, 0x3ca, - 0x7, 0x4a, 0x2, 0x2, 0x3ca, 0x3cb, 0x7, 0x71, 0x2, 0x2, 0x3cb, 0x3cc, - 0x7, 0x74, 0x2, 0x2, 0x3cc, 0x3cd, 0x7, 0x6b, 0x2, 0x2, 0x3cd, 0x3ce, - 0x7, 0x7c, 0x2, 0x2, 0x3ce, 0x3cf, 0x7, 0x43, 0x2, 0x2, 0x3cf, 0x3d0, - 0x7, 0x7a, 0x2, 0x2, 0x3d0, 0x3d1, 0x7, 0x6b, 0x2, 0x2, 0x3d1, 0x3d2, - 0x7, 0x75, 0x2, 0x2, 0x3d2, 0x3d3, 0x7, 0x30, 0x2, 0x2, 0x3d3, 0x3d4, - 0x7, 0x44, 0x2, 0x2, 0x3d4, 0x3d5, 0x7, 0x63, 0x2, 0x2, 0x3d5, 0x3d6, - 0x7, 0x75, 0x2, 0x2, 0x3d6, 0x3d7, 0x7, 0x67, 0x2, 0x2, 0x3d7, 0x3d8, - 0x7, 0x55, 0x2, 0x2, 0x3d8, 0x3d9, 0x7, 0x65, 0x2, 0x2, 0x3d9, 0x3da, - 0x7, 0x74, 0x2, 0x2, 0x3da, 0x3db, 0x7, 0x6b, 0x2, 0x2, 0x3db, 0x3dc, - 0x7, 0x72, 0x2, 0x2, 0x3dc, 0x3dd, 0x7, 0x76, 0x2, 0x2, 0x3dd, 0x3de, - 0x7, 0x4e, 0x2, 0x2, 0x3de, 0x3df, 0x7, 0x6b, 0x2, 0x2, 0x3df, 0x3e0, - 0x7, 0x75, 0x2, 0x2, 0x3e0, 0x3e1, 0x7, 0x76, 0x2, 0x2, 0x3e1, 0x87, - 0x3, 0x2, 0x2, 0x2, 0x3e2, 0x3e3, 0x7, 0x58, 0x2, 0x2, 0x3e3, 0x3e4, - 0x7, 0x67, 0x2, 0x2, 0x3e4, 0x3e5, 0x7, 0x74, 0x2, 0x2, 0x3e5, 0x3e6, - 0x7, 0x76, 0x2, 0x2, 0x3e6, 0x3e7, 0x7, 0x43, 0x2, 0x2, 0x3e7, 0x3e8, - 0x7, 0x7a, 0x2, 0x2, 0x3e8, 0x3e9, 0x7, 0x6b, 0x2, 0x2, 0x3e9, 0x3ea, - 0x7, 0x75, 0x2, 0x2, 0x3ea, 0x3eb, 0x7, 0x30, 0x2, 0x2, 0x3eb, 0x3ec, - 0x7, 0x44, 0x2, 0x2, 0x3ec, 0x3ed, 0x7, 0x63, 0x2, 0x2, 0x3ed, 0x3ee, - 0x7, 0x75, 0x2, 0x2, 0x3ee, 0x3ef, 0x7, 0x67, 0x2, 0x2, 0x3ef, 0x3f0, - 0x7, 0x55, 0x2, 0x2, 0x3f0, 0x3f1, 0x7, 0x65, 0x2, 0x2, 0x3f1, 0x3f2, - 0x7, 0x74, 0x2, 0x2, 0x3f2, 0x3f3, 0x7, 0x6b, 0x2, 0x2, 0x3f3, 0x3f4, - 0x7, 0x72, 0x2, 0x2, 0x3f4, 0x3f5, 0x7, 0x76, 0x2, 0x2, 0x3f5, 0x3f6, - 0x7, 0x4e, 0x2, 0x2, 0x3f6, 0x3f7, 0x7, 0x6b, 0x2, 0x2, 0x3f7, 0x3f8, - 0x7, 0x75, 0x2, 0x2, 0x3f8, 0x3f9, 0x7, 0x76, 0x2, 0x2, 0x3f9, 0x89, - 0x3, 0x2, 0x2, 0x2, 0x3fa, 0x3fb, 0x7, 0x49, 0x2, 0x2, 0x3fb, 0x3fc, - 0x7, 0x46, 0x2, 0x2, 0x3fc, 0x3fd, 0x7, 0x47, 0x2, 0x2, 0x3fd, 0x3fe, - 0x7, 0x48, 0x2, 0x2, 0x3fe, 0x8b, 0x3, 0x2, 0x2, 0x2, 0x3ff, 0x400, - 0x7, 0x49, 0x2, 0x2, 0x400, 0x401, 0x7, 0x6e, 0x2, 0x2, 0x401, 0x402, - 0x7, 0x7b, 0x2, 0x2, 0x402, 0x403, 0x7, 0x72, 0x2, 0x2, 0x403, 0x404, - 0x7, 0x6a, 0x2, 0x2, 0x404, 0x405, 0x7, 0x45, 0x2, 0x2, 0x405, 0x406, - 0x7, 0x6e, 0x2, 0x2, 0x406, 0x407, 0x7, 0x63, 0x2, 0x2, 0x407, 0x408, - 0x7, 0x75, 0x2, 0x2, 0x408, 0x409, 0x7, 0x75, 0x2, 0x2, 0x409, 0x40a, - 0x7, 0x46, 0x2, 0x2, 0x40a, 0x40b, 0x7, 0x67, 0x2, 0x2, 0x40b, 0x40c, - 0x7, 0x68, 0x2, 0x2, 0x40c, 0x8d, 0x3, 0x2, 0x2, 0x2, 0x40d, 0x40e, - 0x7, 0x43, 0x2, 0x2, 0x40e, 0x40f, 0x7, 0x76, 0x2, 0x2, 0x40f, 0x410, - 0x7, 0x76, 0x2, 0x2, 0x410, 0x411, 0x7, 0x63, 0x2, 0x2, 0x411, 0x412, - 0x7, 0x65, 0x2, 0x2, 0x412, 0x413, 0x7, 0x6a, 0x2, 0x2, 0x413, 0x8f, - 0x3, 0x2, 0x2, 0x2, 0x414, 0x415, 0x7, 0x4e, 0x2, 0x2, 0x415, 0x416, - 0x7, 0x6b, 0x2, 0x2, 0x416, 0x417, 0x7, 0x69, 0x2, 0x2, 0x417, 0x418, - 0x7, 0x63, 0x2, 0x2, 0x418, 0x419, 0x7, 0x76, 0x2, 0x2, 0x419, 0x41a, - 0x7, 0x77, 0x2, 0x2, 0x41a, 0x41b, 0x7, 0x74, 0x2, 0x2, 0x41b, 0x41c, - 0x7, 0x67, 0x2, 0x2, 0x41c, 0x41d, 0x7, 0x45, 0x2, 0x2, 0x41d, 0x41e, - 0x7, 0x63, 0x2, 0x2, 0x41e, 0x41f, 0x7, 0x74, 0x2, 0x2, 0x41f, 0x420, - 0x7, 0x67, 0x2, 0x2, 0x420, 0x421, 0x7, 0x76, 0x2, 0x2, 0x421, 0x422, - 0x7, 0x44, 0x2, 0x2, 0x422, 0x423, 0x7, 0x7b, 0x2, 0x2, 0x423, 0x424, - 0x7, 0x52, 0x2, 0x2, 0x424, 0x425, 0x7, 0x71, 0x2, 0x2, 0x425, 0x426, - 0x7, 0x75, 0x2, 0x2, 0x426, 0x91, 0x3, 0x2, 0x2, 0x2, 0x427, 0x428, - 0x7, 0x4e, 0x2, 0x2, 0x428, 0x429, 0x7, 0x6b, 0x2, 0x2, 0x429, 0x42a, - 0x7, 0x69, 0x2, 0x2, 0x42a, 0x42b, 0x7, 0x63, 0x2, 0x2, 0x42b, 0x42c, - 0x7, 0x76, 0x2, 0x2, 0x42c, 0x42d, 0x7, 0x77, 0x2, 0x2, 0x42d, 0x42e, - 0x7, 0x74, 0x2, 0x2, 0x42e, 0x42f, 0x7, 0x67, 0x2, 0x2, 0x42f, 0x430, - 0x7, 0x45, 0x2, 0x2, 0x430, 0x431, 0x7, 0x63, 0x2, 0x2, 0x431, 0x432, - 0x7, 0x74, 0x2, 0x2, 0x432, 0x433, 0x7, 0x67, 0x2, 0x2, 0x433, 0x434, - 0x7, 0x76, 0x2, 0x2, 0x434, 0x435, 0x7, 0x44, 0x2, 0x2, 0x435, 0x436, - 0x7, 0x7b, 0x2, 0x2, 0x436, 0x437, 0x7, 0x4b, 0x2, 0x2, 0x437, 0x438, - 0x7, 0x70, 0x2, 0x2, 0x438, 0x439, 0x7, 0x66, 0x2, 0x2, 0x439, 0x43a, - 0x7, 0x67, 0x2, 0x2, 0x43a, 0x43b, 0x7, 0x7a, 0x2, 0x2, 0x43b, 0x93, - 0x3, 0x2, 0x2, 0x2, 0x43c, 0x43d, 0x7, 0x6a, 0x2, 0x2, 0x43d, 0x43e, - 0x7, 0x67, 0x2, 0x2, 0x43e, 0x43f, 0x7, 0x63, 0x2, 0x2, 0x43f, 0x440, - 0x7, 0x66, 0x2, 0x2, 0x440, 0x95, 0x3, 0x2, 0x2, 0x2, 0x441, 0x442, - 0x7, 0x48, 0x2, 0x2, 0x442, 0x443, 0x7, 0x71, 0x2, 0x2, 0x443, 0x444, - 0x7, 0x70, 0x2, 0x2, 0x444, 0x445, 0x7, 0x76, 0x2, 0x2, 0x445, 0x446, - 0x7, 0x54, 0x2, 0x2, 0x446, 0x447, 0x7, 0x67, 0x2, 0x2, 0x447, 0x448, - 0x7, 0x78, 0x2, 0x2, 0x448, 0x449, 0x7, 0x6b, 0x2, 0x2, 0x449, 0x44a, - 0x7, 0x75, 0x2, 0x2, 0x44a, 0x44b, 0x7, 0x6b, 0x2, 0x2, 0x44b, 0x44c, - 0x7, 0x71, 0x2, 0x2, 0x44c, 0x44d, 0x7, 0x70, 0x2, 0x2, 0x44d, 0x97, - 0x3, 0x2, 0x2, 0x2, 0x44e, 0x44f, 0x7, 0x6a, 0x2, 0x2, 0x44f, 0x450, - 0x7, 0x6a, 0x2, 0x2, 0x450, 0x451, 0x7, 0x67, 0x2, 0x2, 0x451, 0x452, - 0x7, 0x63, 0x2, 0x2, 0x452, 0x99, 0x3, 0x2, 0x2, 0x2, 0x453, 0x454, - 0x7, 0x43, 0x2, 0x2, 0x454, 0x455, 0x7, 0x75, 0x2, 0x2, 0x455, 0x456, - 0x7, 0x65, 0x2, 0x2, 0x456, 0x457, 0x7, 0x67, 0x2, 0x2, 0x457, 0x458, - 0x7, 0x70, 0x2, 0x2, 0x458, 0x459, 0x7, 0x66, 0x2, 0x2, 0x459, 0x45a, - 0x7, 0x67, 0x2, 0x2, 0x45a, 0x45b, 0x7, 0x74, 0x2, 0x2, 0x45b, 0x9b, - 0x3, 0x2, 0x2, 0x2, 0x45c, 0x45d, 0x7, 0x46, 0x2, 0x2, 0x45d, 0x45e, - 0x7, 0x67, 0x2, 0x2, 0x45e, 0x45f, 0x7, 0x75, 0x2, 0x2, 0x45f, 0x460, - 0x7, 0x65, 0x2, 0x2, 0x460, 0x461, 0x7, 0x67, 0x2, 0x2, 0x461, 0x462, - 0x7, 0x70, 0x2, 0x2, 0x462, 0x463, 0x7, 0x66, 0x2, 0x2, 0x463, 0x464, - 0x7, 0x67, 0x2, 0x2, 0x464, 0x465, 0x7, 0x74, 0x2, 0x2, 0x465, 0x9d, - 0x3, 0x2, 0x2, 0x2, 0x466, 0x467, 0x7, 0x4e, 0x2, 0x2, 0x467, 0x468, - 0x7, 0x6b, 0x2, 0x2, 0x468, 0x469, 0x7, 0x70, 0x2, 0x2, 0x469, 0x46a, - 0x7, 0x67, 0x2, 0x2, 0x46a, 0x46b, 0x7, 0x49, 0x2, 0x2, 0x46b, 0x46c, - 0x7, 0x63, 0x2, 0x2, 0x46c, 0x46d, 0x7, 0x72, 0x2, 0x2, 0x46d, 0x9f, - 0x3, 0x2, 0x2, 0x2, 0x46e, 0x46f, 0x7, 0x45, 0x2, 0x2, 0x46f, 0x470, - 0x7, 0x63, 0x2, 0x2, 0x470, 0x471, 0x7, 0x74, 0x2, 0x2, 0x471, 0x472, - 0x7, 0x67, 0x2, 0x2, 0x472, 0x473, 0x7, 0x76, 0x2, 0x2, 0x473, 0x474, - 0x7, 0x51, 0x2, 0x2, 0x474, 0x475, 0x7, 0x68, 0x2, 0x2, 0x475, 0x476, - 0x7, 0x68, 0x2, 0x2, 0x476, 0x477, 0x7, 0x75, 0x2, 0x2, 0x477, 0x478, - 0x7, 0x67, 0x2, 0x2, 0x478, 0x479, 0x7, 0x76, 0x2, 0x2, 0x479, 0xa1, - 0x3, 0x2, 0x2, 0x2, 0x47a, 0x47b, 0x7, 0x70, 0x2, 0x2, 0x47b, 0x47c, - 0x7, 0x63, 0x2, 0x2, 0x47c, 0x47d, 0x7, 0x6f, 0x2, 0x2, 0x47d, 0x47e, - 0x7, 0x67, 0x2, 0x2, 0x47e, 0xa3, 0x3, 0x2, 0x2, 0x2, 0x47f, 0x480, - 0x7, 0x70, 0x2, 0x2, 0x480, 0x481, 0x7, 0x63, 0x2, 0x2, 0x481, 0x482, - 0x7, 0x6f, 0x2, 0x2, 0x482, 0x483, 0x7, 0x67, 0x2, 0x2, 0x483, 0x484, - 0x7, 0x6b, 0x2, 0x2, 0x484, 0x485, 0x7, 0x66, 0x2, 0x2, 0x485, 0xa5, - 0x3, 0x2, 0x2, 0x2, 0x486, 0x487, 0x7, 0x51, 0x2, 0x2, 0x487, 0x488, - 0x7, 0x55, 0x2, 0x2, 0x488, 0x489, 0x7, 0x31, 0x2, 0x2, 0x489, 0x48a, - 0x7, 0x34, 0x2, 0x2, 0x48a, 0xa7, 0x3, 0x2, 0x2, 0x2, 0x48b, 0x48c, - 0x7, 0x48, 0x2, 0x2, 0x48c, 0x48d, 0x7, 0x55, 0x2, 0x2, 0x48d, 0x48e, - 0x7, 0x56, 0x2, 0x2, 0x48e, 0x48f, 0x7, 0x7b, 0x2, 0x2, 0x48f, 0x490, - 0x7, 0x72, 0x2, 0x2, 0x490, 0x491, 0x7, 0x67, 0x2, 0x2, 0x491, 0xa9, - 0x3, 0x2, 0x2, 0x2, 0x492, 0x493, 0x7, 0x68, 0x2, 0x2, 0x493, 0x494, - 0x7, 0x75, 0x2, 0x2, 0x494, 0x495, 0x7, 0x56, 0x2, 0x2, 0x495, 0x496, - 0x7, 0x7b, 0x2, 0x2, 0x496, 0x497, 0x7, 0x72, 0x2, 0x2, 0x497, 0x498, - 0x7, 0x67, 0x2, 0x2, 0x498, 0xab, 0x3, 0x2, 0x2, 0x2, 0x499, 0x49a, - 0x7, 0x4e, 0x2, 0x2, 0x49a, 0x49b, 0x7, 0x71, 0x2, 0x2, 0x49b, 0x49c, - 0x7, 0x79, 0x2, 0x2, 0x49c, 0x49d, 0x7, 0x67, 0x2, 0x2, 0x49d, 0x49e, - 0x7, 0x74, 0x2, 0x2, 0x49e, 0x49f, 0x7, 0x51, 0x2, 0x2, 0x49f, 0x4a0, - 0x7, 0x72, 0x2, 0x2, 0x4a0, 0x4a1, 0x7, 0x55, 0x2, 0x2, 0x4a1, 0x4a2, - 0x7, 0x6b, 0x2, 0x2, 0x4a2, 0x4a3, 0x7, 0x7c, 0x2, 0x2, 0x4a3, 0x4a4, - 0x7, 0x67, 0x2, 0x2, 0x4a4, 0xad, 0x3, 0x2, 0x2, 0x2, 0x4a5, 0x4a6, - 0x7, 0x57, 0x2, 0x2, 0x4a6, 0x4a7, 0x7, 0x72, 0x2, 0x2, 0x4a7, 0x4a8, - 0x7, 0x72, 0x2, 0x2, 0x4a8, 0x4a9, 0x7, 0x67, 0x2, 0x2, 0x4a9, 0x4aa, - 0x7, 0x74, 0x2, 0x2, 0x4aa, 0x4ab, 0x7, 0x51, 0x2, 0x2, 0x4ab, 0x4ac, - 0x7, 0x72, 0x2, 0x2, 0x4ac, 0x4ad, 0x7, 0x55, 0x2, 0x2, 0x4ad, 0x4ae, - 0x7, 0x6b, 0x2, 0x2, 0x4ae, 0x4af, 0x7, 0x7c, 0x2, 0x2, 0x4af, 0x4b0, - 0x7, 0x67, 0x2, 0x2, 0x4b0, 0xaf, 0x3, 0x2, 0x2, 0x2, 0x4b1, 0x4b2, - 0x7, 0x52, 0x2, 0x2, 0x4b2, 0x4b3, 0x7, 0x63, 0x2, 0x2, 0x4b3, 0x4b4, - 0x7, 0x70, 0x2, 0x2, 0x4b4, 0x4b5, 0x7, 0x71, 0x2, 0x2, 0x4b5, 0x4b6, - 0x7, 0x75, 0x2, 0x2, 0x4b6, 0x4b7, 0x7, 0x67, 0x2, 0x2, 0x4b7, 0xb1, - 0x3, 0x2, 0x2, 0x2, 0x4b8, 0x4b9, 0x7, 0x56, 0x2, 0x2, 0x4b9, 0x4ba, - 0x7, 0x7b, 0x2, 0x2, 0x4ba, 0x4bb, 0x7, 0x72, 0x2, 0x2, 0x4bb, 0x4bc, - 0x7, 0x71, 0x2, 0x2, 0x4bc, 0x4bd, 0x7, 0x43, 0x2, 0x2, 0x4bd, 0x4be, - 0x7, 0x75, 0x2, 0x2, 0x4be, 0x4bf, 0x7, 0x65, 0x2, 0x2, 0x4bf, 0x4c0, - 0x7, 0x67, 0x2, 0x2, 0x4c0, 0x4c1, 0x7, 0x70, 0x2, 0x2, 0x4c1, 0x4c2, - 0x7, 0x66, 0x2, 0x2, 0x4c2, 0x4c3, 0x7, 0x67, 0x2, 0x2, 0x4c3, 0x4c4, - 0x7, 0x74, 0x2, 0x2, 0x4c4, 0xb3, 0x3, 0x2, 0x2, 0x2, 0x4c5, 0x4c6, - 0x7, 0x56, 0x2, 0x2, 0x4c6, 0x4c7, 0x7, 0x7b, 0x2, 0x2, 0x4c7, 0x4c8, - 0x7, 0x72, 0x2, 0x2, 0x4c8, 0x4c9, 0x7, 0x71, 0x2, 0x2, 0x4c9, 0x4ca, - 0x7, 0x46, 0x2, 0x2, 0x4ca, 0x4cb, 0x7, 0x67, 0x2, 0x2, 0x4cb, 0x4cc, - 0x7, 0x75, 0x2, 0x2, 0x4cc, 0x4cd, 0x7, 0x65, 0x2, 0x2, 0x4cd, 0x4ce, - 0x7, 0x67, 0x2, 0x2, 0x4ce, 0x4cf, 0x7, 0x70, 0x2, 0x2, 0x4cf, 0x4d0, - 0x7, 0x66, 0x2, 0x2, 0x4d0, 0x4d1, 0x7, 0x67, 0x2, 0x2, 0x4d1, 0x4d2, - 0x7, 0x74, 0x2, 0x2, 0x4d2, 0xb5, 0x3, 0x2, 0x2, 0x2, 0x4d3, 0x4d4, - 0x7, 0x56, 0x2, 0x2, 0x4d4, 0x4d5, 0x7, 0x7b, 0x2, 0x2, 0x4d5, 0x4d6, - 0x7, 0x72, 0x2, 0x2, 0x4d6, 0x4d7, 0x7, 0x71, 0x2, 0x2, 0x4d7, 0x4d8, - 0x7, 0x4e, 0x2, 0x2, 0x4d8, 0x4d9, 0x7, 0x6b, 0x2, 0x2, 0x4d9, 0x4da, - 0x7, 0x70, 0x2, 0x2, 0x4da, 0x4db, 0x7, 0x67, 0x2, 0x2, 0x4db, 0x4dc, - 0x7, 0x49, 0x2, 0x2, 0x4dc, 0x4dd, 0x7, 0x63, 0x2, 0x2, 0x4dd, 0x4de, - 0x7, 0x72, 0x2, 0x2, 0x4de, 0xb7, 0x3, 0x2, 0x2, 0x2, 0x4df, 0x4e0, - 0x7, 0x79, 0x2, 0x2, 0x4e0, 0x4e1, 0x7, 0x6b, 0x2, 0x2, 0x4e1, 0x4e2, - 0x7, 0x70, 0x2, 0x2, 0x4e2, 0x4e3, 0x7, 0x43, 0x2, 0x2, 0x4e3, 0x4e4, - 0x7, 0x75, 0x2, 0x2, 0x4e4, 0x4e5, 0x7, 0x65, 0x2, 0x2, 0x4e5, 0x4e6, - 0x7, 0x67, 0x2, 0x2, 0x4e6, 0x4e7, 0x7, 0x70, 0x2, 0x2, 0x4e7, 0x4e8, - 0x7, 0x76, 0x2, 0x2, 0x4e8, 0xb9, 0x3, 0x2, 0x2, 0x2, 0x4e9, 0x4ea, - 0x7, 0x79, 0x2, 0x2, 0x4ea, 0x4eb, 0x7, 0x6b, 0x2, 0x2, 0x4eb, 0x4ec, - 0x7, 0x70, 0x2, 0x2, 0x4ec, 0x4ed, 0x7, 0x46, 0x2, 0x2, 0x4ed, 0x4ee, - 0x7, 0x67, 0x2, 0x2, 0x4ee, 0x4ef, 0x7, 0x75, 0x2, 0x2, 0x4ef, 0x4f0, - 0x7, 0x65, 0x2, 0x2, 0x4f0, 0x4f1, 0x7, 0x67, 0x2, 0x2, 0x4f1, 0x4f2, - 0x7, 0x70, 0x2, 0x2, 0x4f2, 0x4f3, 0x7, 0x76, 0x2, 0x2, 0x4f3, 0xbb, - 0x3, 0x2, 0x2, 0x2, 0x4f4, 0x4f5, 0x7, 0x5a, 0x2, 0x2, 0x4f5, 0x4f6, - 0x7, 0x4a, 0x2, 0x2, 0x4f6, 0x4f7, 0x7, 0x67, 0x2, 0x2, 0x4f7, 0x4f8, - 0x7, 0x6b, 0x2, 0x2, 0x4f8, 0x4f9, 0x7, 0x69, 0x2, 0x2, 0x4f9, 0x4fa, - 0x7, 0x6a, 0x2, 0x2, 0x4fa, 0x4fb, 0x7, 0x76, 0x2, 0x2, 0x4fb, 0xbd, - 0x3, 0x2, 0x2, 0x2, 0x4fc, 0x4fd, 0x7, 0x45, 0x2, 0x2, 0x4fd, 0x4fe, - 0x7, 0x63, 0x2, 0x2, 0x4fe, 0x4ff, 0x7, 0x72, 0x2, 0x2, 0x4ff, 0x500, - 0x7, 0x4a, 0x2, 0x2, 0x500, 0x501, 0x7, 0x67, 0x2, 0x2, 0x501, 0x502, - 0x7, 0x6b, 0x2, 0x2, 0x502, 0x503, 0x7, 0x69, 0x2, 0x2, 0x503, 0x504, - 0x7, 0x6a, 0x2, 0x2, 0x504, 0x505, 0x7, 0x76, 0x2, 0x2, 0x505, 0xbf, - 0x3, 0x2, 0x2, 0x2, 0x506, 0x507, 0x7, 0x59, 0x2, 0x2, 0x507, 0x508, - 0x7, 0x67, 0x2, 0x2, 0x508, 0x509, 0x7, 0x6b, 0x2, 0x2, 0x509, 0x50a, - 0x7, 0x69, 0x2, 0x2, 0x50a, 0x50b, 0x7, 0x6a, 0x2, 0x2, 0x50b, 0x50c, - 0x7, 0x76, 0x2, 0x2, 0x50c, 0x50d, 0x7, 0x45, 0x2, 0x2, 0x50d, 0x50e, - 0x7, 0x6e, 0x2, 0x2, 0x50e, 0x50f, 0x7, 0x63, 0x2, 0x2, 0x50f, 0x510, - 0x7, 0x75, 0x2, 0x2, 0x510, 0x511, 0x7, 0x75, 0x2, 0x2, 0x511, 0xc1, - 0x3, 0x2, 0x2, 0x2, 0x512, 0x513, 0x7, 0x59, 0x2, 0x2, 0x513, 0x514, - 0x7, 0x6b, 0x2, 0x2, 0x514, 0x515, 0x7, 0x66, 0x2, 0x2, 0x515, 0x516, - 0x7, 0x76, 0x2, 0x2, 0x516, 0x517, 0x7, 0x6a, 0x2, 0x2, 0x517, 0x518, - 0x7, 0x45, 0x2, 0x2, 0x518, 0x519, 0x7, 0x6e, 0x2, 0x2, 0x519, 0x51a, - 0x7, 0x63, 0x2, 0x2, 0x51a, 0x51b, 0x7, 0x75, 0x2, 0x2, 0x51b, 0x51c, - 0x7, 0x75, 0x2, 0x2, 0x51c, 0xc3, 0x3, 0x2, 0x2, 0x2, 0x51d, 0x51e, - 0x7, 0x58, 0x2, 0x2, 0x51e, 0x51f, 0x7, 0x67, 0x2, 0x2, 0x51f, 0x520, - 0x7, 0x70, 0x2, 0x2, 0x520, 0x521, 0x7, 0x66, 0x2, 0x2, 0x521, 0x522, - 0x7, 0x71, 0x2, 0x2, 0x522, 0x523, 0x7, 0x74, 0x2, 0x2, 0x523, 0xc5, - 0x3, 0x2, 0x2, 0x2, 0x524, 0x525, 0x7, 0x57, 0x2, 0x2, 0x525, 0x526, - 0x7, 0x70, 0x2, 0x2, 0x526, 0x527, 0x7, 0x6b, 0x2, 0x2, 0x527, 0x528, - 0x7, 0x65, 0x2, 0x2, 0x528, 0x529, 0x7, 0x71, 0x2, 0x2, 0x529, 0x52a, - 0x7, 0x66, 0x2, 0x2, 0x52a, 0x52b, 0x7, 0x67, 0x2, 0x2, 0x52b, 0x52c, - 0x7, 0x54, 0x2, 0x2, 0x52c, 0x52d, 0x7, 0x63, 0x2, 0x2, 0x52d, 0x52e, - 0x7, 0x70, 0x2, 0x2, 0x52e, 0x52f, 0x7, 0x69, 0x2, 0x2, 0x52f, 0x530, - 0x7, 0x67, 0x2, 0x2, 0x530, 0xc7, 0x3, 0x2, 0x2, 0x2, 0x531, 0x532, - 0x7, 0x45, 0x2, 0x2, 0x532, 0x533, 0x7, 0x71, 0x2, 0x2, 0x533, 0x534, - 0x7, 0x66, 0x2, 0x2, 0x534, 0x535, 0x7, 0x67, 0x2, 0x2, 0x535, 0x536, - 0x7, 0x52, 0x2, 0x2, 0x536, 0x537, 0x7, 0x63, 0x2, 0x2, 0x537, 0x538, - 0x7, 0x69, 0x2, 0x2, 0x538, 0x539, 0x7, 0x67, 0x2, 0x2, 0x539, 0x53a, - 0x7, 0x54, 0x2, 0x2, 0x53a, 0x53b, 0x7, 0x63, 0x2, 0x2, 0x53b, 0x53c, - 0x7, 0x70, 0x2, 0x2, 0x53c, 0x53d, 0x7, 0x69, 0x2, 0x2, 0x53d, 0x53e, - 0x7, 0x67, 0x2, 0x2, 0x53e, 0xc9, 0x3, 0x2, 0x2, 0x2, 0x53f, 0x540, - 0x7, 0x48, 0x2, 0x2, 0x540, 0x541, 0x7, 0x63, 0x2, 0x2, 0x541, 0x542, - 0x7, 0x6f, 0x2, 0x2, 0x542, 0x543, 0x7, 0x6b, 0x2, 0x2, 0x543, 0x544, - 0x7, 0x6e, 0x2, 0x2, 0x544, 0x545, 0x7, 0x7b, 0x2, 0x2, 0x545, 0x546, - 0x7, 0x45, 0x2, 0x2, 0x546, 0x547, 0x7, 0x6e, 0x2, 0x2, 0x547, 0x548, - 0x7, 0x63, 0x2, 0x2, 0x548, 0x549, 0x7, 0x75, 0x2, 0x2, 0x549, 0x54a, - 0x7, 0x75, 0x2, 0x2, 0x54a, 0xcb, 0x3, 0x2, 0x2, 0x2, 0x54b, 0x54c, - 0x7, 0x55, 0x2, 0x2, 0x54c, 0x54d, 0x7, 0x56, 0x2, 0x2, 0x54d, 0x54e, - 0x7, 0x43, 0x2, 0x2, 0x54e, 0x54f, 0x7, 0x56, 0x2, 0x2, 0x54f, 0xcd, - 0x3, 0x2, 0x2, 0x2, 0x550, 0x551, 0x7, 0x47, 0x2, 0x2, 0x551, 0x552, - 0x7, 0x6e, 0x2, 0x2, 0x552, 0x553, 0x7, 0x6b, 0x2, 0x2, 0x553, 0x554, - 0x7, 0x66, 0x2, 0x2, 0x554, 0x555, 0x7, 0x67, 0x2, 0x2, 0x555, 0x556, - 0x7, 0x66, 0x2, 0x2, 0x556, 0x557, 0x7, 0x48, 0x2, 0x2, 0x557, 0x558, - 0x7, 0x63, 0x2, 0x2, 0x558, 0x559, 0x7, 0x6e, 0x2, 0x2, 0x559, 0x55a, - 0x7, 0x6e, 0x2, 0x2, 0x55a, 0x55b, 0x7, 0x64, 0x2, 0x2, 0x55b, 0x55c, - 0x7, 0x63, 0x2, 0x2, 0x55c, 0x55d, 0x7, 0x65, 0x2, 0x2, 0x55d, 0x55e, - 0x7, 0x6d, 0x2, 0x2, 0x55e, 0x55f, 0x7, 0x50, 0x2, 0x2, 0x55f, 0x560, - 0x7, 0x63, 0x2, 0x2, 0x560, 0x561, 0x7, 0x6f, 0x2, 0x2, 0x561, 0x562, - 0x7, 0x67, 0x2, 0x2, 0x562, 0xcf, 0x3, 0x2, 0x2, 0x2, 0x563, 0x564, - 0x7, 0x47, 0x2, 0x2, 0x564, 0x565, 0x7, 0x6e, 0x2, 0x2, 0x565, 0x566, - 0x7, 0x6b, 0x2, 0x2, 0x566, 0x567, 0x7, 0x66, 0x2, 0x2, 0x567, 0x568, - 0x7, 0x67, 0x2, 0x2, 0x568, 0x569, 0x7, 0x66, 0x2, 0x2, 0x569, 0x56a, - 0x7, 0x48, 0x2, 0x2, 0x56a, 0x56b, 0x7, 0x63, 0x2, 0x2, 0x56b, 0x56c, - 0x7, 0x6e, 0x2, 0x2, 0x56c, 0x56d, 0x7, 0x6e, 0x2, 0x2, 0x56d, 0x56e, - 0x7, 0x64, 0x2, 0x2, 0x56e, 0x56f, 0x7, 0x63, 0x2, 0x2, 0x56f, 0x570, - 0x7, 0x65, 0x2, 0x2, 0x570, 0x571, 0x7, 0x6d, 0x2, 0x2, 0x571, 0x572, - 0x7, 0x50, 0x2, 0x2, 0x572, 0x573, 0x7, 0x63, 0x2, 0x2, 0x573, 0x574, - 0x7, 0x6f, 0x2, 0x2, 0x574, 0x575, 0x7, 0x67, 0x2, 0x2, 0x575, 0x576, - 0x7, 0x4b, 0x2, 0x2, 0x576, 0x577, 0x7, 0x46, 0x2, 0x2, 0x577, 0xd1, - 0x3, 0x2, 0x2, 0x2, 0x578, 0x579, 0x7, 0x46, 0x2, 0x2, 0x579, 0x57a, - 0x7, 0x67, 0x2, 0x2, 0x57a, 0x57b, 0x7, 0x75, 0x2, 0x2, 0x57b, 0x57c, - 0x7, 0x6b, 0x2, 0x2, 0x57c, 0x57d, 0x7, 0x69, 0x2, 0x2, 0x57d, 0x57e, - 0x7, 0x70, 0x2, 0x2, 0x57e, 0x57f, 0x7, 0x43, 0x2, 0x2, 0x57f, 0x580, - 0x7, 0x7a, 0x2, 0x2, 0x580, 0x581, 0x7, 0x6b, 0x2, 0x2, 0x581, 0x582, - 0x7, 0x75, 0x2, 0x2, 0x582, 0xd3, 0x3, 0x2, 0x2, 0x2, 0x583, 0x584, - 0x7, 0x43, 0x2, 0x2, 0x584, 0x585, 0x7, 0x7a, 0x2, 0x2, 0x585, 0x586, - 0x7, 0x6b, 0x2, 0x2, 0x586, 0x587, 0x7, 0x75, 0x2, 0x2, 0x587, 0x588, - 0x7, 0x58, 0x2, 0x2, 0x588, 0x589, 0x7, 0x63, 0x2, 0x2, 0x589, 0x58a, - 0x7, 0x6e, 0x2, 0x2, 0x58a, 0x58b, 0x7, 0x77, 0x2, 0x2, 0x58b, 0x58c, - 0x7, 0x67, 0x2, 0x2, 0x58c, 0xd5, 0x3, 0x2, 0x2, 0x2, 0x58d, 0x58e, - 0x7, 0x68, 0x2, 0x2, 0x58e, 0x58f, 0x7, 0x6e, 0x2, 0x2, 0x58f, 0x590, - 0x7, 0x63, 0x2, 0x2, 0x590, 0x591, 0x7, 0x69, 0x2, 0x2, 0x591, 0xd7, - 0x3, 0x2, 0x2, 0x2, 0x592, 0x593, 0x7, 0x6e, 0x2, 0x2, 0x593, 0x594, - 0x7, 0x71, 0x2, 0x2, 0x594, 0x595, 0x7, 0x65, 0x2, 0x2, 0x595, 0x596, - 0x7, 0x63, 0x2, 0x2, 0x596, 0x597, 0x7, 0x76, 0x2, 0x2, 0x597, 0x598, - 0x7, 0x6b, 0x2, 0x2, 0x598, 0x599, 0x7, 0x71, 0x2, 0x2, 0x599, 0x59a, - 0x7, 0x70, 0x2, 0x2, 0x59a, 0xd9, 0x3, 0x2, 0x2, 0x2, 0x59b, 0x59c, - 0x7, 0x47, 0x2, 0x2, 0x59c, 0x59d, 0x7, 0x6e, 0x2, 0x2, 0x59d, 0x59e, - 0x7, 0x6b, 0x2, 0x2, 0x59e, 0x59f, 0x7, 0x66, 0x2, 0x2, 0x59f, 0x5a0, - 0x7, 0x63, 0x2, 0x2, 0x5a0, 0x5a1, 0x7, 0x64, 0x2, 0x2, 0x5a1, 0x5a2, - 0x7, 0x6e, 0x2, 0x2, 0x5a2, 0x5a3, 0x7, 0x67, 0x2, 0x2, 0x5a3, 0x5a4, - 0x7, 0x43, 0x2, 0x2, 0x5a4, 0x5a5, 0x7, 0x7a, 0x2, 0x2, 0x5a5, 0x5a6, - 0x7, 0x6b, 0x2, 0x2, 0x5a6, 0x5a7, 0x7, 0x75, 0x2, 0x2, 0x5a7, 0x5a8, - 0x7, 0x58, 0x2, 0x2, 0x5a8, 0x5a9, 0x7, 0x63, 0x2, 0x2, 0x5a9, 0x5aa, - 0x7, 0x6e, 0x2, 0x2, 0x5aa, 0x5ab, 0x7, 0x77, 0x2, 0x2, 0x5ab, 0x5ac, - 0x7, 0x67, 0x2, 0x2, 0x5ac, 0x5ad, 0x7, 0x50, 0x2, 0x2, 0x5ad, 0x5ae, - 0x7, 0x63, 0x2, 0x2, 0x5ae, 0x5af, 0x7, 0x6f, 0x2, 0x2, 0x5af, 0x5b0, - 0x7, 0x67, 0x2, 0x2, 0x5b0, 0xdb, 0x3, 0x2, 0x2, 0x2, 0x5b1, 0x5b2, - 0x7, 0x51, 0x2, 0x2, 0x5b2, 0x5b3, 0x7, 0x6e, 0x2, 0x2, 0x5b3, 0x5b4, - 0x7, 0x66, 0x2, 0x2, 0x5b4, 0x5b5, 0x7, 0x67, 0x2, 0x2, 0x5b5, 0x5b6, - 0x7, 0x74, 0x2, 0x2, 0x5b6, 0x5b7, 0x7, 0x55, 0x2, 0x2, 0x5b7, 0x5b8, - 0x7, 0x6b, 0x2, 0x2, 0x5b8, 0x5b9, 0x7, 0x64, 0x2, 0x2, 0x5b9, 0x5ba, - 0x7, 0x6e, 0x2, 0x2, 0x5ba, 0x5bb, 0x7, 0x6b, 0x2, 0x2, 0x5bb, 0x5bc, - 0x7, 0x70, 0x2, 0x2, 0x5bc, 0x5bd, 0x7, 0x69, 0x2, 0x2, 0x5bd, 0x5be, - 0x7, 0x48, 0x2, 0x2, 0x5be, 0x5bf, 0x7, 0x71, 0x2, 0x2, 0x5bf, 0x5c0, - 0x7, 0x70, 0x2, 0x2, 0x5c0, 0x5c1, 0x7, 0x76, 0x2, 0x2, 0x5c1, 0x5c2, - 0x7, 0x43, 0x2, 0x2, 0x5c2, 0x5c3, 0x7, 0x76, 0x2, 0x2, 0x5c3, 0x5c4, - 0x7, 0x76, 0x2, 0x2, 0x5c4, 0x5c5, 0x7, 0x74, 0x2, 0x2, 0x5c5, 0x5c6, - 0x7, 0x6b, 0x2, 0x2, 0x5c6, 0x5c7, 0x7, 0x64, 0x2, 0x2, 0x5c7, 0x5c8, - 0x7, 0x77, 0x2, 0x2, 0x5c8, 0x5c9, 0x7, 0x76, 0x2, 0x2, 0x5c9, 0x5ca, - 0x7, 0x67, 0x2, 0x2, 0x5ca, 0xdd, 0x3, 0x2, 0x2, 0x2, 0x5cb, 0x5cc, - 0x7, 0x78, 0x2, 0x2, 0x5cc, 0x5cd, 0x7, 0x6a, 0x2, 0x2, 0x5cd, 0x5ce, - 0x7, 0x67, 0x2, 0x2, 0x5ce, 0x5cf, 0x7, 0x63, 0x2, 0x2, 0x5cf, 0xdf, - 0x3, 0x2, 0x2, 0x2, 0x5d0, 0x5d1, 0x7, 0x58, 0x2, 0x2, 0x5d1, 0x5d2, - 0x7, 0x67, 0x2, 0x2, 0x5d2, 0x5d3, 0x7, 0x74, 0x2, 0x2, 0x5d3, 0x5d4, - 0x7, 0x76, 0x2, 0x2, 0x5d4, 0x5d5, 0x7, 0x56, 0x2, 0x2, 0x5d5, 0x5d6, - 0x7, 0x7b, 0x2, 0x2, 0x5d6, 0x5d7, 0x7, 0x72, 0x2, 0x2, 0x5d7, 0x5d8, - 0x7, 0x71, 0x2, 0x2, 0x5d8, 0x5d9, 0x7, 0x43, 0x2, 0x2, 0x5d9, 0x5da, - 0x7, 0x75, 0x2, 0x2, 0x5da, 0x5db, 0x7, 0x65, 0x2, 0x2, 0x5db, 0x5dc, - 0x7, 0x67, 0x2, 0x2, 0x5dc, 0x5dd, 0x7, 0x70, 0x2, 0x2, 0x5dd, 0x5de, - 0x7, 0x66, 0x2, 0x2, 0x5de, 0x5df, 0x7, 0x67, 0x2, 0x2, 0x5df, 0x5e0, - 0x7, 0x74, 0x2, 0x2, 0x5e0, 0xe1, 0x3, 0x2, 0x2, 0x2, 0x5e1, 0x5e2, - 0x7, 0x58, 0x2, 0x2, 0x5e2, 0x5e3, 0x7, 0x67, 0x2, 0x2, 0x5e3, 0x5e4, - 0x7, 0x74, 0x2, 0x2, 0x5e4, 0x5e5, 0x7, 0x76, 0x2, 0x2, 0x5e5, 0x5e6, - 0x7, 0x56, 0x2, 0x2, 0x5e6, 0x5e7, 0x7, 0x7b, 0x2, 0x2, 0x5e7, 0x5e8, - 0x7, 0x72, 0x2, 0x2, 0x5e8, 0x5e9, 0x7, 0x71, 0x2, 0x2, 0x5e9, 0x5ea, - 0x7, 0x46, 0x2, 0x2, 0x5ea, 0x5eb, 0x7, 0x67, 0x2, 0x2, 0x5eb, 0x5ec, - 0x7, 0x75, 0x2, 0x2, 0x5ec, 0x5ed, 0x7, 0x65, 0x2, 0x2, 0x5ed, 0x5ee, - 0x7, 0x67, 0x2, 0x2, 0x5ee, 0x5ef, 0x7, 0x70, 0x2, 0x2, 0x5ef, 0x5f0, - 0x7, 0x66, 0x2, 0x2, 0x5f0, 0x5f1, 0x7, 0x67, 0x2, 0x2, 0x5f1, 0x5f2, - 0x7, 0x74, 0x2, 0x2, 0x5f2, 0xe3, 0x3, 0x2, 0x2, 0x2, 0x5f3, 0x5f4, - 0x7, 0x58, 0x2, 0x2, 0x5f4, 0x5f5, 0x7, 0x67, 0x2, 0x2, 0x5f5, 0x5f6, - 0x7, 0x74, 0x2, 0x2, 0x5f6, 0x5f7, 0x7, 0x76, 0x2, 0x2, 0x5f7, 0x5f8, - 0x7, 0x56, 0x2, 0x2, 0x5f8, 0x5f9, 0x7, 0x7b, 0x2, 0x2, 0x5f9, 0x5fa, - 0x7, 0x72, 0x2, 0x2, 0x5fa, 0x5fb, 0x7, 0x71, 0x2, 0x2, 0x5fb, 0x5fc, - 0x7, 0x4e, 0x2, 0x2, 0x5fc, 0x5fd, 0x7, 0x6b, 0x2, 0x2, 0x5fd, 0x5fe, - 0x7, 0x70, 0x2, 0x2, 0x5fe, 0x5ff, 0x7, 0x67, 0x2, 0x2, 0x5ff, 0x600, - 0x7, 0x49, 0x2, 0x2, 0x600, 0x601, 0x7, 0x63, 0x2, 0x2, 0x601, 0x602, - 0x7, 0x72, 0x2, 0x2, 0x602, 0xe5, 0x3, 0x2, 0x2, 0x2, 0x603, 0x604, - 0x7, 0x78, 0x2, 0x2, 0x604, 0x605, 0x7, 0x6f, 0x2, 0x2, 0x605, 0x606, - 0x7, 0x76, 0x2, 0x2, 0x606, 0x607, 0x7, 0x7a, 0x2, 0x2, 0x607, 0xe7, - 0x3, 0x2, 0x2, 0x2, 0x608, 0x609, 0x7, 0x58, 0x2, 0x2, 0x609, 0x60a, - 0x7, 0x67, 0x2, 0x2, 0x60a, 0x60b, 0x7, 0x74, 0x2, 0x2, 0x60b, 0x60c, - 0x7, 0x76, 0x2, 0x2, 0x60c, 0x60d, 0x7, 0x51, 0x2, 0x2, 0x60d, 0x60e, - 0x7, 0x74, 0x2, 0x2, 0x60e, 0x60f, 0x7, 0x6b, 0x2, 0x2, 0x60f, 0x610, - 0x7, 0x69, 0x2, 0x2, 0x610, 0x611, 0x7, 0x6b, 0x2, 0x2, 0x611, 0x612, - 0x7, 0x70, 0x2, 0x2, 0x612, 0x613, 0x7, 0x5b, 0x2, 0x2, 0x613, 0xe9, - 0x3, 0x2, 0x2, 0x2, 0x614, 0x615, 0x7, 0x58, 0x2, 0x2, 0x615, 0x616, - 0x7, 0x67, 0x2, 0x2, 0x616, 0x617, 0x7, 0x74, 0x2, 0x2, 0x617, 0x618, - 0x7, 0x76, 0x2, 0x2, 0x618, 0x619, 0x7, 0x43, 0x2, 0x2, 0x619, 0x61a, - 0x7, 0x66, 0x2, 0x2, 0x61a, 0x61b, 0x7, 0x78, 0x2, 0x2, 0x61b, 0x61c, - 0x7, 0x63, 0x2, 0x2, 0x61c, 0x61d, 0x7, 0x70, 0x2, 0x2, 0x61d, 0x61e, - 0x7, 0x65, 0x2, 0x2, 0x61e, 0x61f, 0x7, 0x67, 0x2, 0x2, 0x61f, 0x620, - 0x7, 0x5b, 0x2, 0x2, 0x620, 0xeb, 0x3, 0x2, 0x2, 0x2, 0x621, 0x622, - 0x7, 0x7d, 0x2, 0x2, 0x622, 0xed, 0x3, 0x2, 0x2, 0x2, 0x623, 0x624, - 0x7, 0x7f, 0x2, 0x2, 0x624, 0xef, 0x3, 0x2, 0x2, 0x2, 0x625, 0x626, - 0x7, 0x5d, 0x2, 0x2, 0x626, 0xf1, 0x3, 0x2, 0x2, 0x2, 0x627, 0x628, - 0x7, 0x5f, 0x2, 0x2, 0x628, 0xf3, 0x3, 0x2, 0x2, 0x2, 0x629, 0x62a, - 0x7, 0x2f, 0x2, 0x2, 0x62a, 0xf5, 0x3, 0x2, 0x2, 0x2, 0x62b, 0x62c, - 0x7, 0x3d, 0x2, 0x2, 0x62c, 0xf7, 0x3, 0x2, 0x2, 0x2, 0x62d, 0x62e, - 0x7, 0x3f, 0x2, 0x2, 0x62e, 0xf9, 0x3, 0x2, 0x2, 0x2, 0x62f, 0x630, - 0x7, 0x29, 0x2, 0x2, 0x630, 0xfb, 0x3, 0x2, 0x2, 0x2, 0x631, 0x632, - 0x7, 0x2e, 0x2, 0x2, 0x632, 0xfd, 0x3, 0x2, 0x2, 0x2, 0x633, 0x634, - 0x7, 0x24, 0x2, 0x2, 0x634, 0x635, 0x3, 0x2, 0x2, 0x2, 0x635, 0x636, - 0x8, 0x7d, 0x5, 0x2, 0x636, 0xff, 0x3, 0x2, 0x2, 0x2, 0x637, 0x638, - 0x9, 0x4, 0x2, 0x2, 0x638, 0x101, 0x3, 0x2, 0x2, 0x2, 0x639, 0x63c, - 0x5, 0x100, 0x7e, 0x2, 0x63a, 0x63c, 0x9, 0x5, 0x2, 0x2, 0x63b, 0x639, - 0x3, 0x2, 0x2, 0x2, 0x63b, 0x63a, 0x3, 0x2, 0x2, 0x2, 0x63c, 0x103, - 0x3, 0x2, 0x2, 0x2, 0x63d, 0x640, 0x5, 0x102, 0x7f, 0x2, 0x63e, 0x640, - 0x7, 0x2f, 0x2, 0x2, 0x63f, 0x63d, 0x3, 0x2, 0x2, 0x2, 0x63f, 0x63e, - 0x3, 0x2, 0x2, 0x2, 0x640, 0x105, 0x3, 0x2, 0x2, 0x2, 0x641, 0x642, - 0x7, 0x42, 0x2, 0x2, 0x642, 0x646, 0x5, 0x100, 0x7e, 0x2, 0x643, - 0x645, 0x5, 0x104, 0x80, 0x2, 0x644, 0x643, 0x3, 0x2, 0x2, 0x2, 0x645, - 0x648, 0x3, 0x2, 0x2, 0x2, 0x646, 0x644, 0x3, 0x2, 0x2, 0x2, 0x646, - 0x647, 0x3, 0x2, 0x2, 0x2, 0x647, 0x107, 0x3, 0x2, 0x2, 0x2, 0x648, - 0x646, 0x3, 0x2, 0x2, 0x2, 0x649, 0x64b, 0x7, 0x5e, 0x2, 0x2, 0x64a, - 0x64c, 0x4, 0x32, 0x3b, 0x2, 0x64b, 0x64a, 0x3, 0x2, 0x2, 0x2, 0x64c, - 0x64d, 0x3, 0x2, 0x2, 0x2, 0x64d, 0x64b, 0x3, 0x2, 0x2, 0x2, 0x64d, - 0x64e, 0x3, 0x2, 0x2, 0x2, 0x64e, 0x109, 0x3, 0x2, 0x2, 0x2, 0x64f, - 0x652, 0x5, 0x104, 0x80, 0x2, 0x650, 0x652, 0x9, 0x6, 0x2, 0x2, 0x651, - 0x64f, 0x3, 0x2, 0x2, 0x2, 0x651, 0x650, 0x3, 0x2, 0x2, 0x2, 0x652, - 0x10b, 0x3, 0x2, 0x2, 0x2, 0x653, 0x654, 0x7, 0x5e, 0x2, 0x2, 0x654, - 0x658, 0x5, 0x100, 0x7e, 0x2, 0x655, 0x657, 0x5, 0x10a, 0x83, 0x2, - 0x656, 0x655, 0x3, 0x2, 0x2, 0x2, 0x657, 0x65a, 0x3, 0x2, 0x2, 0x2, - 0x658, 0x656, 0x3, 0x2, 0x2, 0x2, 0x658, 0x659, 0x3, 0x2, 0x2, 0x2, - 0x659, 0x10d, 0x3, 0x2, 0x2, 0x2, 0x65a, 0x658, 0x3, 0x2, 0x2, 0x2, - 0x65b, 0x65f, 0x5, 0x100, 0x7e, 0x2, 0x65c, 0x65e, 0x5, 0x102, 0x7f, - 0x2, 0x65d, 0x65c, 0x3, 0x2, 0x2, 0x2, 0x65e, 0x661, 0x3, 0x2, 0x2, - 0x2, 0x65f, 0x65d, 0x3, 0x2, 0x2, 0x2, 0x65f, 0x660, 0x3, 0x2, 0x2, - 0x2, 0x660, 0x10f, 0x3, 0x2, 0x2, 0x2, 0x661, 0x65f, 0x3, 0x2, 0x2, - 0x2, 0x662, 0x666, 0x5, 0x100, 0x7e, 0x2, 0x663, 0x665, 0x5, 0x10a, - 0x83, 0x2, 0x664, 0x663, 0x3, 0x2, 0x2, 0x2, 0x665, 0x668, 0x3, 0x2, - 0x2, 0x2, 0x666, 0x664, 0x3, 0x2, 0x2, 0x2, 0x666, 0x667, 0x3, 0x2, - 0x2, 0x2, 0x667, 0x111, 0x3, 0x2, 0x2, 0x2, 0x668, 0x666, 0x3, 0x2, - 0x2, 0x2, 0x669, 0x66b, 0x7, 0x2f, 0x2, 0x2, 0x66a, 0x669, 0x3, 0x2, - 0x2, 0x2, 0x66a, 0x66b, 0x3, 0x2, 0x2, 0x2, 0x66b, 0x66d, 0x3, 0x2, - 0x2, 0x2, 0x66c, 0x66e, 0x4, 0x32, 0x3b, 0x2, 0x66d, 0x66c, 0x3, - 0x2, 0x2, 0x2, 0x66e, 0x66f, 0x3, 0x2, 0x2, 0x2, 0x66f, 0x66d, 0x3, - 0x2, 0x2, 0x2, 0x66f, 0x670, 0x3, 0x2, 0x2, 0x2, 0x670, 0x671, 0x3, - 0x2, 0x2, 0x2, 0x671, 0x673, 0x7, 0x30, 0x2, 0x2, 0x672, 0x674, 0x4, - 0x32, 0x3b, 0x2, 0x673, 0x672, 0x3, 0x2, 0x2, 0x2, 0x674, 0x675, - 0x3, 0x2, 0x2, 0x2, 0x675, 0x673, 0x3, 0x2, 0x2, 0x2, 0x675, 0x676, - 0x3, 0x2, 0x2, 0x2, 0x676, 0x113, 0x3, 0x2, 0x2, 0x2, 0x677, 0x678, - 0x7, 0x32, 0x2, 0x2, 0x678, 0x679, 0x7, 0x7a, 0x2, 0x2, 0x679, 0x67b, - 0x3, 0x2, 0x2, 0x2, 0x67a, 0x67c, 0x9, 0x7, 0x2, 0x2, 0x67b, 0x67a, - 0x3, 0x2, 0x2, 0x2, 0x67c, 0x67d, 0x3, 0x2, 0x2, 0x2, 0x67d, 0x67b, - 0x3, 0x2, 0x2, 0x2, 0x67d, 0x67e, 0x3, 0x2, 0x2, 0x2, 0x67e, 0x115, - 0x3, 0x2, 0x2, 0x2, 0x67f, 0x681, 0x7, 0x32, 0x2, 0x2, 0x680, 0x682, - 0x4, 0x32, 0x39, 0x2, 0x681, 0x680, 0x3, 0x2, 0x2, 0x2, 0x682, 0x683, - 0x3, 0x2, 0x2, 0x2, 0x683, 0x681, 0x3, 0x2, 0x2, 0x2, 0x683, 0x684, - 0x3, 0x2, 0x2, 0x2, 0x684, 0x117, 0x3, 0x2, 0x2, 0x2, 0x685, 0x687, - 0x7, 0x2f, 0x2, 0x2, 0x686, 0x685, 0x3, 0x2, 0x2, 0x2, 0x686, 0x687, - 0x3, 0x2, 0x2, 0x2, 0x687, 0x690, 0x3, 0x2, 0x2, 0x2, 0x688, 0x68c, - 0x4, 0x33, 0x3b, 0x2, 0x689, 0x68b, 0x4, 0x32, 0x3b, 0x2, 0x68a, - 0x689, 0x3, 0x2, 0x2, 0x2, 0x68b, 0x68e, 0x3, 0x2, 0x2, 0x2, 0x68c, - 0x68a, 0x3, 0x2, 0x2, 0x2, 0x68c, 0x68d, 0x3, 0x2, 0x2, 0x2, 0x68d, - 0x691, 0x3, 0x2, 0x2, 0x2, 0x68e, 0x68c, 0x3, 0x2, 0x2, 0x2, 0x68f, - 0x691, 0x7, 0x32, 0x2, 0x2, 0x690, 0x688, 0x3, 0x2, 0x2, 0x2, 0x690, - 0x68f, 0x3, 0x2, 0x2, 0x2, 0x691, 0x119, 0x3, 0x2, 0x2, 0x2, 0x692, - 0x693, 0x9, 0x8, 0x2, 0x2, 0x693, 0x11b, 0x3, 0x2, 0x2, 0x2, 0x694, - 0x697, 0x5, 0x11a, 0x8b, 0x2, 0x695, 0x697, 0x9, 0x9, 0x2, 0x2, 0x696, - 0x694, 0x3, 0x2, 0x2, 0x2, 0x696, 0x695, 0x3, 0x2, 0x2, 0x2, 0x697, - 0x11d, 0x3, 0x2, 0x2, 0x2, 0x698, 0x69a, 0x5, 0x11a, 0x8b, 0x2, 0x699, - 0x69b, 0x5, 0x11c, 0x8c, 0x2, 0x69a, 0x699, 0x3, 0x2, 0x2, 0x2, 0x69a, - 0x69b, 0x3, 0x2, 0x2, 0x2, 0x69b, 0x11f, 0x3, 0x2, 0x2, 0x2, 0x69c, - 0x69e, 0x9, 0x3, 0x2, 0x2, 0x69d, 0x69c, 0x3, 0x2, 0x2, 0x2, 0x69e, - 0x69f, 0x3, 0x2, 0x2, 0x2, 0x69f, 0x69d, 0x3, 0x2, 0x2, 0x2, 0x69f, - 0x6a0, 0x3, 0x2, 0x2, 0x2, 0x6a0, 0x6a1, 0x3, 0x2, 0x2, 0x2, 0x6a1, - 0x6a2, 0x8, 0x8e, 0x3, 0x2, 0x6a2, 0x121, 0x3, 0x2, 0x2, 0x2, 0x6a3, - 0x6a7, 0x5, 0x11a, 0x8b, 0x2, 0x6a4, 0x6a6, 0x5, 0x11c, 0x8c, 0x2, - 0x6a5, 0x6a4, 0x3, 0x2, 0x2, 0x2, 0x6a6, 0x6a9, 0x3, 0x2, 0x2, 0x2, - 0x6a7, 0x6a5, 0x3, 0x2, 0x2, 0x2, 0x6a7, 0x6a8, 0x3, 0x2, 0x2, 0x2, - 0x6a8, 0x6aa, 0x3, 0x2, 0x2, 0x2, 0x6a9, 0x6a7, 0x3, 0x2, 0x2, 0x2, - 0x6aa, 0x6ab, 0x8, 0x8f, 0x6, 0x2, 0x6ab, 0x123, 0x3, 0x2, 0x2, 0x2, - 0x6ac, 0x6ad, 0x7, 0x7d, 0x2, 0x2, 0x6ad, 0x6ae, 0x3, 0x2, 0x2, 0x2, - 0x6ae, 0x6af, 0x8, 0x90, 0x7, 0x2, 0x6af, 0x125, 0x3, 0x2, 0x2, 0x2, - 0x6b0, 0x6b2, 0x7, 0xf, 0x2, 0x2, 0x6b1, 0x6b0, 0x3, 0x2, 0x2, 0x2, - 0x6b1, 0x6b2, 0x3, 0x2, 0x2, 0x2, 0x6b2, 0x6b3, 0x3, 0x2, 0x2, 0x2, - 0x6b3, 0x6b4, 0x7, 0xc, 0x2, 0x2, 0x6b4, 0x6b5, 0x7, 0x7f, 0x2, 0x2, - 0x6b5, 0x6b9, 0x3, 0x2, 0x2, 0x2, 0x6b6, 0x6b8, 0x9, 0xa, 0x2, 0x2, - 0x6b7, 0x6b6, 0x3, 0x2, 0x2, 0x2, 0x6b8, 0x6bb, 0x3, 0x2, 0x2, 0x2, - 0x6b9, 0x6b7, 0x3, 0x2, 0x2, 0x2, 0x6b9, 0x6ba, 0x3, 0x2, 0x2, 0x2, - 0x6ba, 0x6bc, 0x3, 0x2, 0x2, 0x2, 0x6bb, 0x6b9, 0x3, 0x2, 0x2, 0x2, - 0x6bc, 0x6c0, 0x5, 0x11a, 0x8b, 0x2, 0x6bd, 0x6bf, 0x5, 0x11c, 0x8c, - 0x2, 0x6be, 0x6bd, 0x3, 0x2, 0x2, 0x2, 0x6bf, 0x6c2, 0x3, 0x2, 0x2, - 0x2, 0x6c0, 0x6be, 0x3, 0x2, 0x2, 0x2, 0x6c0, 0x6c1, 0x3, 0x2, 0x2, - 0x2, 0x6c1, 0x6c6, 0x3, 0x2, 0x2, 0x2, 0x6c2, 0x6c0, 0x3, 0x2, 0x2, - 0x2, 0x6c3, 0x6c5, 0x9, 0xa, 0x2, 0x2, 0x6c4, 0x6c3, 0x3, 0x2, 0x2, - 0x2, 0x6c5, 0x6c8, 0x3, 0x2, 0x2, 0x2, 0x6c6, 0x6c4, 0x3, 0x2, 0x2, - 0x2, 0x6c6, 0x6c7, 0x3, 0x2, 0x2, 0x2, 0x6c7, 0x6c9, 0x3, 0x2, 0x2, - 0x2, 0x6c8, 0x6c6, 0x3, 0x2, 0x2, 0x2, 0x6c9, 0x6ca, 0x7, 0x3d, 0x2, - 0x2, 0x6ca, 0x6cb, 0x6, 0x91, 0x2, 0x2, 0x6cb, 0x6cc, 0x3, 0x2, 0x2, - 0x2, 0x6cc, 0x6cd, 0x8, 0x91, 0x8, 0x2, 0x6cd, 0x127, 0x3, 0x2, 0x2, - 0x2, 0x6ce, 0x6d0, 0x7, 0xf, 0x2, 0x2, 0x6cf, 0x6ce, 0x3, 0x2, 0x2, - 0x2, 0x6cf, 0x6d0, 0x3, 0x2, 0x2, 0x2, 0x6d0, 0x6d1, 0x3, 0x2, 0x2, - 0x2, 0x6d1, 0x6d5, 0x7, 0xc, 0x2, 0x2, 0x6d2, 0x6d4, 0xa, 0x2, 0x2, - 0x2, 0x6d3, 0x6d2, 0x3, 0x2, 0x2, 0x2, 0x6d4, 0x6d7, 0x3, 0x2, 0x2, - 0x2, 0x6d5, 0x6d3, 0x3, 0x2, 0x2, 0x2, 0x6d5, 0x6d6, 0x3, 0x2, 0x2, - 0x2, 0x6d6, 0x129, 0x3, 0x2, 0x2, 0x2, 0x6d7, 0x6d5, 0x3, 0x2, 0x2, - 0x2, 0x6d8, 0x6da, 0x9, 0x3, 0x2, 0x2, 0x6d9, 0x6d8, 0x3, 0x2, 0x2, - 0x2, 0x6da, 0x6db, 0x3, 0x2, 0x2, 0x2, 0x6db, 0x6d9, 0x3, 0x2, 0x2, - 0x2, 0x6db, 0x6dc, 0x3, 0x2, 0x2, 0x2, 0x6dc, 0x6dd, 0x3, 0x2, 0x2, - 0x2, 0x6dd, 0x6de, 0x8, 0x93, 0x3, 0x2, 0x6de, 0x12b, 0x3, 0x2, 0x2, - 0x2, 0x6df, 0x6e0, 0x7, 0x2a, 0x2, 0x2, 0x6e0, 0x6e1, 0x3, 0x2, 0x2, - 0x2, 0x6e1, 0x6e2, 0x8, 0x94, 0x9, 0x2, 0x6e2, 0x12d, 0x3, 0x2, 0x2, - 0x2, 0x6e3, 0x6e5, 0xa, 0xb, 0x2, 0x2, 0x6e4, 0x6e3, 0x3, 0x2, 0x2, - 0x2, 0x6e5, 0x6e6, 0x3, 0x2, 0x2, 0x2, 0x6e6, 0x6e4, 0x3, 0x2, 0x2, - 0x2, 0x6e6, 0x6e7, 0x3, 0x2, 0x2, 0x2, 0x6e7, 0x12f, 0x3, 0x2, 0x2, - 0x2, 0x6e8, 0x6e9, 0x7, 0x2b, 0x2, 0x2, 0x6e9, 0x6ea, 0x3, 0x2, 0x2, - 0x2, 0x6ea, 0x6eb, 0x8, 0x96, 0x8, 0x2, 0x6eb, 0x131, 0x3, 0x2, 0x2, - 0x2, 0x6ec, 0x6ee, 0xa, 0xc, 0x2, 0x2, 0x6ed, 0x6ec, 0x3, 0x2, 0x2, - 0x2, 0x6ee, 0x6f1, 0x3, 0x2, 0x2, 0x2, 0x6ef, 0x6ed, 0x3, 0x2, 0x2, - 0x2, 0x6ef, 0x6f0, 0x3, 0x2, 0x2, 0x2, 0x6f0, 0x133, 0x3, 0x2, 0x2, - 0x2, 0x6f1, 0x6ef, 0x3, 0x2, 0x2, 0x2, 0x6f2, 0x6f3, 0x7, 0x24, 0x2, - 0x2, 0x6f3, 0x6f4, 0x3, 0x2, 0x2, 0x2, 0x6f4, 0x6f5, 0x8, 0x98, 0x8, - 0x2, 0x6f5, 0x135, 0x3, 0x2, 0x2, 0x2, 0x27, 0x2, 0x3, 0x4, 0x5, - 0x6, 0x7, 0x14d, 0x155, 0x63b, 0x63f, 0x646, 0x64d, 0x651, 0x658, - 0x65f, 0x666, 0x66a, 0x66f, 0x675, 0x67d, 0x683, 0x686, 0x68c, 0x690, - 0x696, 0x69a, 0x69f, 0x6a7, 0x6b1, 0x6b9, 0x6c0, 0x6c6, 0x6cf, 0x6d5, - 0x6db, 0x6e6, 0x6ef, 0xa, 0x7, 0x3, 0x2, 0x8, 0x2, 0x2, 0x7, 0x5, - 0x2, 0x7, 0x7, 0x2, 0x3, 0x8f, 0x2, 0x4, 0x4, 0x2, 0x6, 0x2, 0x2, - 0x4, 0x6, 0x2, - }; - - _serializedATN.insert(_serializedATN.end(), serializedATNSegment0, - serializedATNSegment0 + sizeof(serializedATNSegment0) / sizeof(serializedATNSegment0[0])); - - - atn::ATNDeserializer deserializer; - _atn = deserializer.deserialize(_serializedATN); - - size_t count = _atn.getNumberOfDecisions(); - _decisionToDFA.reserve(count); - for (size_t i = 0; i < count; i++) { - _decisionToDFA.emplace_back(_atn.getDecisionState(i), i); - } +void FeatLexer::initialize() { +#if ANTLR4_USE_THREAD_LOCAL_CACHE + featlexerLexerInitialize(); +#else + ::antlr4::internal::call_once(featlexerLexerOnceFlag, featlexerLexerInitialize); +#endif } - -FeatLexer::Initializer FeatLexer::_init; diff --git a/c/makeotf/lib/hotconv/FeatLexer.h b/c/makeotf/lib/hotconv/FeatLexer.h index 9febbb8c2..09fc767e2 100644 --- a/c/makeotf/lib/hotconv/FeatLexer.h +++ b/c/makeotf/lib/hotconv/FeatLexer.h @@ -1,5 +1,5 @@ -// Generated from FeatLexer.g4 by ANTLR 4.9.3 +// Generated from FeatLexer.g4 by ANTLR 4.13.2 #pragma once @@ -50,7 +50,8 @@ class FeatLexer : public antlr4::Lexer { }; explicit FeatLexer(antlr4::CharStream *input); - ~FeatLexer(); + + ~FeatLexer() override; std::string anon_tag; @@ -74,34 +75,31 @@ class FeatLexer : public antlr4::Lexer { return true; } - virtual std::string getGrammarFileName() const override; - virtual const std::vector& getRuleNames() const override; - virtual const std::vector& getChannelNames() const override; - virtual const std::vector& getModeNames() const override; - virtual const std::vector& getTokenNames() const override; // deprecated, use vocabulary instead - virtual antlr4::dfa::Vocabulary& getVocabulary() const override; + std::string getGrammarFileName() const override; - virtual const std::vector getSerializedATN() const override; - virtual const antlr4::atn::ATN& getATN() const override; + const std::vector& getRuleNames() const override; - virtual void action(antlr4::RuleContext *context, size_t ruleIndex, size_t actionIndex) override; - virtual bool sempred(antlr4::RuleContext *_localctx, size_t ruleIndex, size_t predicateIndex) override; + const std::vector& getChannelNames() const override; -private: - static std::vector _decisionToDFA; - static antlr4::atn::PredictionContextCache _sharedContextCache; - static std::vector _ruleNames; - static std::vector _tokenNames; - static std::vector _channelNames; - static std::vector _modeNames; + const std::vector& getModeNames() const override; + + const antlr4::dfa::Vocabulary& getVocabulary() const override; + + antlr4::atn::SerializedATNView getSerializedATN() const override; + + const antlr4::atn::ATN& getATN() const override; - static std::vector _literalNames; - static std::vector _symbolicNames; - static antlr4::dfa::Vocabulary _vocabulary; - static antlr4::atn::ATN _atn; - static std::vector _serializedATN; + void action(antlr4::RuleContext *context, size_t ruleIndex, size_t actionIndex) override; + bool sempred(antlr4::RuleContext *_localctx, size_t ruleIndex, size_t predicateIndex) override; + + // By default the static state used to implement the lexer is lazily initialized during the first + // call to the constructor. You can call this function if you wish to initialize the static state + // ahead of time. + static void initialize(); + +private: // Individual action functions triggered by action() above. void A_LABELAction(antlr4::RuleContext *context, size_t actionIndex); @@ -109,9 +107,5 @@ class FeatLexer : public antlr4::Lexer { // Individual semantic predicate functions triggered by sempred() above. bool A_CLOSESempred(antlr4::RuleContext *_localctx, size_t predicateIndex); - struct Initializer { - Initializer(); - }; - static Initializer _init; }; diff --git a/c/makeotf/lib/hotconv/FeatLexer.interp b/c/makeotf/lib/hotconv/FeatLexer.interp index 7e7ec4603..8ba824151 100644 --- a/c/makeotf/lib/hotconv/FeatLexer.interp +++ b/c/makeotf/lib/hotconv/FeatLexer.interp @@ -460,4 +460,4 @@ Ifile String atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 147, 1782, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 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, 4, 143, 9, 143, 4, 144, 9, 144, 4, 145, 9, 145, 4, 146, 9, 146, 4, 147, 9, 147, 4, 148, 9, 148, 4, 149, 9, 149, 4, 150, 9, 150, 4, 151, 9, 151, 4, 152, 9, 152, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 7, 4, 332, 10, 4, 12, 4, 14, 4, 335, 11, 4, 3, 4, 3, 4, 3, 5, 6, 5, 340, 10, 5, 13, 5, 14, 5, 341, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 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, 14, 3, 14, 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, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 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, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 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, 20, 3, 20, 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, 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, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 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, 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, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 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, 41, 3, 41, 3, 41, 3, 41, 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, 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, 43, 3, 43, 3, 43, 3, 43, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 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, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 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, 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, 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, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 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, 53, 3, 53, 3, 53, 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, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 56, 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, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 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, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 84, 3, 84, 3, 84, 3, 84, 3, 84, 3, 84, 3, 84, 3, 84, 3, 84, 3, 84, 3, 84, 3, 84, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 89, 3, 89, 3, 89, 3, 89, 3, 89, 3, 89, 3, 89, 3, 89, 3, 89, 3, 89, 3, 89, 3, 89, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 92, 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, 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, 94, 3, 94, 3, 94, 3, 94, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 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, 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, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 100, 3, 100, 3, 100, 3, 100, 3, 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, 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, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 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, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 110, 3, 110, 3, 110, 3, 110, 3, 110, 3, 110, 3, 110, 3, 110, 3, 110, 3, 110, 3, 110, 3, 110, 3, 110, 3, 110, 3, 110, 3, 110, 3, 110, 3, 111, 3, 111, 3, 111, 3, 111, 3, 111, 3, 111, 3, 111, 3, 111, 3, 111, 3, 111, 3, 111, 3, 111, 3, 111, 3, 111, 3, 111, 3, 111, 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, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 114, 3, 114, 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, 115, 3, 115, 3, 115, 3, 115, 3, 115, 3, 115, 3, 115, 3, 116, 3, 116, 3, 117, 3, 117, 3, 118, 3, 118, 3, 119, 3, 119, 3, 120, 3, 120, 3, 121, 3, 121, 3, 122, 3, 122, 3, 123, 3, 123, 3, 124, 3, 124, 3, 125, 3, 125, 3, 125, 3, 125, 3, 126, 3, 126, 3, 127, 3, 127, 5, 127, 1596, 10, 127, 3, 128, 3, 128, 5, 128, 1600, 10, 128, 3, 129, 3, 129, 3, 129, 7, 129, 1605, 10, 129, 12, 129, 14, 129, 1608, 11, 129, 3, 130, 3, 130, 6, 130, 1612, 10, 130, 13, 130, 14, 130, 1613, 3, 131, 3, 131, 5, 131, 1618, 10, 131, 3, 132, 3, 132, 3, 132, 7, 132, 1623, 10, 132, 12, 132, 14, 132, 1626, 11, 132, 3, 133, 3, 133, 7, 133, 1630, 10, 133, 12, 133, 14, 133, 1633, 11, 133, 3, 134, 3, 134, 7, 134, 1637, 10, 134, 12, 134, 14, 134, 1640, 11, 134, 3, 135, 5, 135, 1643, 10, 135, 3, 135, 6, 135, 1646, 10, 135, 13, 135, 14, 135, 1647, 3, 135, 3, 135, 6, 135, 1652, 10, 135, 13, 135, 14, 135, 1653, 3, 136, 3, 136, 3, 136, 3, 136, 6, 136, 1660, 10, 136, 13, 136, 14, 136, 1661, 3, 137, 3, 137, 6, 137, 1666, 10, 137, 13, 137, 14, 137, 1667, 3, 138, 5, 138, 1671, 10, 138, 3, 138, 3, 138, 7, 138, 1675, 10, 138, 12, 138, 14, 138, 1678, 11, 138, 3, 138, 5, 138, 1681, 10, 138, 3, 139, 3, 139, 3, 140, 3, 140, 5, 140, 1687, 10, 140, 3, 141, 3, 141, 5, 141, 1691, 10, 141, 3, 142, 6, 142, 1694, 10, 142, 13, 142, 14, 142, 1695, 3, 142, 3, 142, 3, 143, 3, 143, 7, 143, 1702, 10, 143, 12, 143, 14, 143, 1705, 11, 143, 3, 143, 3, 143, 3, 144, 3, 144, 3, 144, 3, 144, 3, 145, 5, 145, 1714, 10, 145, 3, 145, 3, 145, 3, 145, 3, 145, 7, 145, 1720, 10, 145, 12, 145, 14, 145, 1723, 11, 145, 3, 145, 3, 145, 7, 145, 1727, 10, 145, 12, 145, 14, 145, 1730, 11, 145, 3, 145, 7, 145, 1733, 10, 145, 12, 145, 14, 145, 1736, 11, 145, 3, 145, 3, 145, 3, 145, 3, 145, 3, 145, 3, 146, 5, 146, 1744, 10, 146, 3, 146, 3, 146, 7, 146, 1748, 10, 146, 12, 146, 14, 146, 1751, 11, 146, 3, 147, 6, 147, 1754, 10, 147, 13, 147, 14, 147, 1755, 3, 147, 3, 147, 3, 148, 3, 148, 3, 148, 3, 148, 3, 149, 6, 149, 1765, 10, 149, 13, 149, 14, 149, 1766, 3, 150, 3, 150, 3, 150, 3, 150, 3, 151, 7, 151, 1774, 10, 151, 12, 151, 14, 151, 1777, 11, 151, 3, 152, 3, 152, 3, 152, 3, 152, 2, 2, 153, 8, 3, 10, 4, 12, 5, 14, 6, 16, 7, 18, 8, 20, 9, 22, 10, 24, 11, 26, 12, 28, 13, 30, 14, 32, 15, 34, 16, 36, 17, 38, 18, 40, 19, 42, 20, 44, 21, 46, 22, 48, 23, 50, 24, 52, 25, 54, 26, 56, 27, 58, 28, 60, 29, 62, 30, 64, 31, 66, 32, 68, 33, 70, 34, 72, 35, 74, 36, 76, 37, 78, 38, 80, 39, 82, 40, 84, 41, 86, 42, 88, 43, 90, 44, 92, 45, 94, 46, 96, 47, 98, 48, 100, 49, 102, 50, 104, 51, 106, 52, 108, 53, 110, 54, 112, 55, 114, 56, 116, 57, 118, 58, 120, 59, 122, 60, 124, 61, 126, 62, 128, 63, 130, 64, 132, 65, 134, 66, 136, 67, 138, 68, 140, 69, 142, 70, 144, 71, 146, 72, 148, 73, 150, 74, 152, 75, 154, 76, 156, 77, 158, 78, 160, 79, 162, 80, 164, 81, 166, 82, 168, 83, 170, 84, 172, 85, 174, 86, 176, 87, 178, 88, 180, 89, 182, 90, 184, 91, 186, 92, 188, 93, 190, 94, 192, 95, 194, 96, 196, 97, 198, 98, 200, 99, 202, 100, 204, 101, 206, 102, 208, 103, 210, 104, 212, 105, 214, 106, 216, 107, 218, 108, 220, 109, 222, 110, 224, 111, 226, 112, 228, 113, 230, 114, 232, 115, 234, 116, 236, 117, 238, 118, 240, 119, 242, 120, 244, 121, 246, 122, 248, 123, 250, 124, 252, 125, 254, 126, 256, 2, 258, 2, 260, 2, 262, 127, 264, 128, 266, 2, 268, 129, 270, 130, 272, 131, 274, 132, 276, 133, 278, 134, 280, 135, 282, 2, 284, 2, 286, 136, 288, 137, 290, 138, 292, 139, 294, 140, 296, 141, 298, 142, 300, 143, 302, 144, 304, 145, 306, 146, 308, 147, 8, 2, 3, 4, 5, 6, 7, 13, 4, 2, 12, 12, 15, 15, 5, 2, 11, 12, 15, 15, 34, 34, 5, 2, 67, 92, 97, 97, 99, 124, 4, 2, 48, 48, 50, 59, 7, 2, 44, 45, 60, 60, 96, 96, 126, 126, 128, 128, 5, 2, 50, 59, 67, 72, 99, 104, 12, 2, 35, 35, 38, 40, 44, 45, 48, 48, 60, 60, 65, 65, 67, 92, 96, 124, 126, 126, 128, 128, 4, 2, 47, 47, 50, 59, 4, 2, 11, 11, 34, 34, 3, 2, 43, 43, 3, 2, 36, 36, 2, 1801, 2, 8, 3, 2, 2, 2, 2, 10, 3, 2, 2, 2, 2, 12, 3, 2, 2, 2, 2, 14, 3, 2, 2, 2, 2, 16, 3, 2, 2, 2, 2, 18, 3, 2, 2, 2, 2, 20, 3, 2, 2, 2, 2, 22, 3, 2, 2, 2, 2, 24, 3, 2, 2, 2, 2, 26, 3, 2, 2, 2, 2, 28, 3, 2, 2, 2, 2, 30, 3, 2, 2, 2, 2, 32, 3, 2, 2, 2, 2, 34, 3, 2, 2, 2, 2, 36, 3, 2, 2, 2, 2, 38, 3, 2, 2, 2, 2, 40, 3, 2, 2, 2, 2, 42, 3, 2, 2, 2, 2, 44, 3, 2, 2, 2, 2, 46, 3, 2, 2, 2, 2, 48, 3, 2, 2, 2, 2, 50, 3, 2, 2, 2, 2, 52, 3, 2, 2, 2, 2, 54, 3, 2, 2, 2, 2, 56, 3, 2, 2, 2, 2, 58, 3, 2, 2, 2, 2, 60, 3, 2, 2, 2, 2, 62, 3, 2, 2, 2, 2, 64, 3, 2, 2, 2, 2, 66, 3, 2, 2, 2, 2, 68, 3, 2, 2, 2, 2, 70, 3, 2, 2, 2, 2, 72, 3, 2, 2, 2, 2, 74, 3, 2, 2, 2, 2, 76, 3, 2, 2, 2, 2, 78, 3, 2, 2, 2, 2, 80, 3, 2, 2, 2, 2, 82, 3, 2, 2, 2, 2, 84, 3, 2, 2, 2, 2, 86, 3, 2, 2, 2, 2, 88, 3, 2, 2, 2, 2, 90, 3, 2, 2, 2, 2, 92, 3, 2, 2, 2, 2, 94, 3, 2, 2, 2, 2, 96, 3, 2, 2, 2, 2, 98, 3, 2, 2, 2, 2, 100, 3, 2, 2, 2, 2, 102, 3, 2, 2, 2, 2, 104, 3, 2, 2, 2, 2, 106, 3, 2, 2, 2, 2, 108, 3, 2, 2, 2, 2, 110, 3, 2, 2, 2, 2, 112, 3, 2, 2, 2, 2, 114, 3, 2, 2, 2, 2, 116, 3, 2, 2, 2, 2, 118, 3, 2, 2, 2, 2, 120, 3, 2, 2, 2, 2, 122, 3, 2, 2, 2, 2, 124, 3, 2, 2, 2, 2, 126, 3, 2, 2, 2, 2, 128, 3, 2, 2, 2, 2, 130, 3, 2, 2, 2, 2, 132, 3, 2, 2, 2, 2, 134, 3, 2, 2, 2, 2, 136, 3, 2, 2, 2, 2, 138, 3, 2, 2, 2, 2, 140, 3, 2, 2, 2, 2, 142, 3, 2, 2, 2, 2, 144, 3, 2, 2, 2, 2, 146, 3, 2, 2, 2, 2, 148, 3, 2, 2, 2, 2, 150, 3, 2, 2, 2, 2, 152, 3, 2, 2, 2, 2, 154, 3, 2, 2, 2, 2, 156, 3, 2, 2, 2, 2, 158, 3, 2, 2, 2, 2, 160, 3, 2, 2, 2, 2, 162, 3, 2, 2, 2, 2, 164, 3, 2, 2, 2, 2, 166, 3, 2, 2, 2, 2, 168, 3, 2, 2, 2, 2, 170, 3, 2, 2, 2, 2, 172, 3, 2, 2, 2, 2, 174, 3, 2, 2, 2, 2, 176, 3, 2, 2, 2, 2, 178, 3, 2, 2, 2, 2, 180, 3, 2, 2, 2, 2, 182, 3, 2, 2, 2, 2, 184, 3, 2, 2, 2, 2, 186, 3, 2, 2, 2, 2, 188, 3, 2, 2, 2, 2, 190, 3, 2, 2, 2, 2, 192, 3, 2, 2, 2, 2, 194, 3, 2, 2, 2, 2, 196, 3, 2, 2, 2, 2, 198, 3, 2, 2, 2, 2, 200, 3, 2, 2, 2, 2, 202, 3, 2, 2, 2, 2, 204, 3, 2, 2, 2, 2, 206, 3, 2, 2, 2, 2, 208, 3, 2, 2, 2, 2, 210, 3, 2, 2, 2, 2, 212, 3, 2, 2, 2, 2, 214, 3, 2, 2, 2, 2, 216, 3, 2, 2, 2, 2, 218, 3, 2, 2, 2, 2, 220, 3, 2, 2, 2, 2, 222, 3, 2, 2, 2, 2, 224, 3, 2, 2, 2, 2, 226, 3, 2, 2, 2, 2, 228, 3, 2, 2, 2, 2, 230, 3, 2, 2, 2, 2, 232, 3, 2, 2, 2, 2, 234, 3, 2, 2, 2, 2, 236, 3, 2, 2, 2, 2, 238, 3, 2, 2, 2, 2, 240, 3, 2, 2, 2, 2, 242, 3, 2, 2, 2, 2, 244, 3, 2, 2, 2, 2, 246, 3, 2, 2, 2, 2, 248, 3, 2, 2, 2, 2, 250, 3, 2, 2, 2, 2, 252, 3, 2, 2, 2, 2, 254, 3, 2, 2, 2, 2, 262, 3, 2, 2, 2, 2, 264, 3, 2, 2, 2, 2, 268, 3, 2, 2, 2, 2, 270, 3, 2, 2, 2, 2, 272, 3, 2, 2, 2, 2, 274, 3, 2, 2, 2, 2, 276, 3, 2, 2, 2, 2, 278, 3, 2, 2, 2, 2, 280, 3, 2, 2, 2, 2, 286, 3, 2, 2, 2, 3, 288, 3, 2, 2, 2, 3, 290, 3, 2, 2, 2, 3, 292, 3, 2, 2, 2, 4, 294, 3, 2, 2, 2, 4, 296, 3, 2, 2, 2, 5, 298, 3, 2, 2, 2, 5, 300, 3, 2, 2, 2, 6, 302, 3, 2, 2, 2, 6, 304, 3, 2, 2, 2, 7, 306, 3, 2, 2, 2, 7, 308, 3, 2, 2, 2, 8, 310, 3, 2, 2, 2, 10, 317, 3, 2, 2, 2, 12, 329, 3, 2, 2, 2, 14, 339, 3, 2, 2, 2, 16, 345, 3, 2, 2, 2, 18, 355, 3, 2, 2, 2, 20, 363, 3, 2, 2, 2, 22, 369, 3, 2, 2, 2, 24, 376, 3, 2, 2, 2, 26, 385, 3, 2, 2, 2, 28, 400, 3, 2, 2, 2, 30, 409, 3, 2, 2, 2, 32, 416, 3, 2, 2, 2, 34, 427, 3, 2, 2, 2, 36, 435, 3, 2, 2, 2, 38, 447, 3, 2, 2, 2, 40, 464, 3, 2, 2, 2, 42, 480, 3, 2, 2, 2, 44, 492, 3, 2, 2, 2, 46, 512, 3, 2, 2, 2, 48, 531, 3, 2, 2, 2, 50, 543, 3, 2, 2, 2, 52, 555, 3, 2, 2, 2, 54, 568, 3, 2, 2, 2, 56, 581, 3, 2, 2, 2, 58, 594, 3, 2, 2, 2, 60, 596, 3, 2, 2, 2, 62, 598, 3, 2, 2, 2, 64, 608, 3, 2, 2, 2, 66, 613, 3, 2, 2, 2, 68, 620, 3, 2, 2, 2, 70, 627, 3, 2, 2, 2, 72, 638, 3, 2, 2, 2, 74, 642, 3, 2, 2, 2, 76, 653, 3, 2, 2, 2, 78, 658, 3, 2, 2, 2, 80, 661, 3, 2, 2, 2, 82, 666, 3, 2, 2, 2, 84, 675, 3, 2, 2, 2, 86, 679, 3, 2, 2, 2, 88, 690, 3, 2, 2, 2, 90, 703, 3, 2, 2, 2, 92, 716, 3, 2, 2, 2, 94, 734, 3, 2, 2, 2, 96, 758, 3, 2, 2, 2, 98, 775, 3, 2, 2, 2, 100, 794, 3, 2, 2, 2, 102, 804, 3, 2, 2, 2, 104, 817, 3, 2, 2, 2, 106, 830, 3, 2, 2, 2, 108, 837, 3, 2, 2, 2, 110, 847, 3, 2, 2, 2, 112, 862, 3, 2, 2, 2, 114, 867, 3, 2, 2, 2, 116, 877, 3, 2, 2, 2, 118, 885, 3, 2, 2, 2, 120, 890, 3, 2, 2, 2, 122, 899, 3, 2, 2, 2, 124, 903, 3, 2, 2, 2, 126, 916, 3, 2, 2, 2, 128, 921, 3, 2, 2, 2, 130, 926, 3, 2, 2, 2, 132, 948, 3, 2, 2, 2, 134, 969, 3, 2, 2, 2, 136, 994, 3, 2, 2, 2, 138, 1018, 3, 2, 2, 2, 140, 1023, 3, 2, 2, 2, 142, 1037, 3, 2, 2, 2, 144, 1044, 3, 2, 2, 2, 146, 1063, 3, 2, 2, 2, 148, 1084, 3, 2, 2, 2, 150, 1089, 3, 2, 2, 2, 152, 1102, 3, 2, 2, 2, 154, 1107, 3, 2, 2, 2, 156, 1116, 3, 2, 2, 2, 158, 1126, 3, 2, 2, 2, 160, 1134, 3, 2, 2, 2, 162, 1146, 3, 2, 2, 2, 164, 1151, 3, 2, 2, 2, 166, 1158, 3, 2, 2, 2, 168, 1163, 3, 2, 2, 2, 170, 1170, 3, 2, 2, 2, 172, 1177, 3, 2, 2, 2, 174, 1189, 3, 2, 2, 2, 176, 1201, 3, 2, 2, 2, 178, 1208, 3, 2, 2, 2, 180, 1221, 3, 2, 2, 2, 182, 1235, 3, 2, 2, 2, 184, 1247, 3, 2, 2, 2, 186, 1257, 3, 2, 2, 2, 188, 1268, 3, 2, 2, 2, 190, 1276, 3, 2, 2, 2, 192, 1286, 3, 2, 2, 2, 194, 1298, 3, 2, 2, 2, 196, 1309, 3, 2, 2, 2, 198, 1316, 3, 2, 2, 2, 200, 1329, 3, 2, 2, 2, 202, 1343, 3, 2, 2, 2, 204, 1355, 3, 2, 2, 2, 206, 1360, 3, 2, 2, 2, 208, 1379, 3, 2, 2, 2, 210, 1400, 3, 2, 2, 2, 212, 1411, 3, 2, 2, 2, 214, 1421, 3, 2, 2, 2, 216, 1426, 3, 2, 2, 2, 218, 1435, 3, 2, 2, 2, 220, 1457, 3, 2, 2, 2, 222, 1483, 3, 2, 2, 2, 224, 1488, 3, 2, 2, 2, 226, 1505, 3, 2, 2, 2, 228, 1523, 3, 2, 2, 2, 230, 1539, 3, 2, 2, 2, 232, 1544, 3, 2, 2, 2, 234, 1556, 3, 2, 2, 2, 236, 1569, 3, 2, 2, 2, 238, 1571, 3, 2, 2, 2, 240, 1573, 3, 2, 2, 2, 242, 1575, 3, 2, 2, 2, 244, 1577, 3, 2, 2, 2, 246, 1579, 3, 2, 2, 2, 248, 1581, 3, 2, 2, 2, 250, 1583, 3, 2, 2, 2, 252, 1585, 3, 2, 2, 2, 254, 1587, 3, 2, 2, 2, 256, 1591, 3, 2, 2, 2, 258, 1595, 3, 2, 2, 2, 260, 1599, 3, 2, 2, 2, 262, 1601, 3, 2, 2, 2, 264, 1609, 3, 2, 2, 2, 266, 1617, 3, 2, 2, 2, 268, 1619, 3, 2, 2, 2, 270, 1627, 3, 2, 2, 2, 272, 1634, 3, 2, 2, 2, 274, 1642, 3, 2, 2, 2, 276, 1655, 3, 2, 2, 2, 278, 1663, 3, 2, 2, 2, 280, 1670, 3, 2, 2, 2, 282, 1682, 3, 2, 2, 2, 284, 1686, 3, 2, 2, 2, 286, 1688, 3, 2, 2, 2, 288, 1693, 3, 2, 2, 2, 290, 1699, 3, 2, 2, 2, 292, 1708, 3, 2, 2, 2, 294, 1713, 3, 2, 2, 2, 296, 1743, 3, 2, 2, 2, 298, 1753, 3, 2, 2, 2, 300, 1759, 3, 2, 2, 2, 302, 1764, 3, 2, 2, 2, 304, 1768, 3, 2, 2, 2, 306, 1775, 3, 2, 2, 2, 308, 1778, 3, 2, 2, 2, 310, 311, 7, 99, 2, 2, 311, 312, 7, 112, 2, 2, 312, 313, 7, 113, 2, 2, 313, 314, 7, 112, 2, 2, 314, 315, 3, 2, 2, 2, 315, 316, 8, 2, 2, 2, 316, 9, 3, 2, 2, 2, 317, 318, 7, 99, 2, 2, 318, 319, 7, 112, 2, 2, 319, 320, 7, 113, 2, 2, 320, 321, 7, 112, 2, 2, 321, 322, 7, 123, 2, 2, 322, 323, 7, 111, 2, 2, 323, 324, 7, 113, 2, 2, 324, 325, 7, 119, 2, 2, 325, 326, 7, 117, 2, 2, 326, 327, 3, 2, 2, 2, 327, 328, 8, 3, 2, 2, 328, 11, 3, 2, 2, 2, 329, 333, 7, 37, 2, 2, 330, 332, 10, 2, 2, 2, 331, 330, 3, 2, 2, 2, 332, 335, 3, 2, 2, 2, 333, 331, 3, 2, 2, 2, 333, 334, 3, 2, 2, 2, 334, 336, 3, 2, 2, 2, 335, 333, 3, 2, 2, 2, 336, 337, 8, 4, 3, 2, 337, 13, 3, 2, 2, 2, 338, 340, 9, 3, 2, 2, 339, 338, 3, 2, 2, 2, 340, 341, 3, 2, 2, 2, 341, 339, 3, 2, 2, 2, 341, 342, 3, 2, 2, 2, 342, 343, 3, 2, 2, 2, 343, 344, 8, 5, 3, 2, 344, 15, 3, 2, 2, 2, 345, 346, 7, 107, 2, 2, 346, 347, 7, 112, 2, 2, 347, 348, 7, 101, 2, 2, 348, 349, 7, 110, 2, 2, 349, 350, 7, 119, 2, 2, 350, 351, 7, 102, 2, 2, 351, 352, 7, 103, 2, 2, 352, 353, 3, 2, 2, 2, 353, 354, 8, 6, 4, 2, 354, 17, 3, 2, 2, 2, 355, 356, 7, 104, 2, 2, 356, 357, 7, 103, 2, 2, 357, 358, 7, 99, 2, 2, 358, 359, 7, 118, 2, 2, 359, 360, 7, 119, 2, 2, 360, 361, 7, 116, 2, 2, 361, 362, 7, 103, 2, 2, 362, 19, 3, 2, 2, 2, 363, 364, 7, 118, 2, 2, 364, 365, 7, 99, 2, 2, 365, 366, 7, 100, 2, 2, 366, 367, 7, 110, 2, 2, 367, 368, 7, 103, 2, 2, 368, 21, 3, 2, 2, 2, 369, 370, 7, 117, 2, 2, 370, 371, 7, 101, 2, 2, 371, 372, 7, 116, 2, 2, 372, 373, 7, 107, 2, 2, 373, 374, 7, 114, 2, 2, 374, 375, 7, 118, 2, 2, 375, 23, 3, 2, 2, 2, 376, 377, 7, 110, 2, 2, 377, 378, 7, 99, 2, 2, 378, 379, 7, 112, 2, 2, 379, 380, 7, 105, 2, 2, 380, 381, 7, 119, 2, 2, 381, 382, 7, 99, 2, 2, 382, 383, 7, 105, 2, 2, 383, 384, 7, 103, 2, 2, 384, 25, 3, 2, 2, 2, 385, 386, 7, 110, 2, 2, 386, 387, 7, 99, 2, 2, 387, 388, 7, 112, 2, 2, 388, 389, 7, 105, 2, 2, 389, 390, 7, 119, 2, 2, 390, 391, 7, 99, 2, 2, 391, 392, 7, 105, 2, 2, 392, 393, 7, 103, 2, 2, 393, 394, 7, 117, 2, 2, 394, 395, 7, 123, 2, 2, 395, 396, 7, 117, 2, 2, 396, 397, 7, 118, 2, 2, 397, 398, 7, 103, 2, 2, 398, 399, 7, 111, 2, 2, 399, 27, 3, 2, 2, 2, 400, 401, 7, 117, 2, 2, 401, 402, 7, 119, 2, 2, 402, 403, 7, 100, 2, 2, 403, 404, 7, 118, 2, 2, 404, 405, 7, 99, 2, 2, 405, 406, 7, 100, 2, 2, 406, 407, 7, 110, 2, 2, 407, 408, 7, 103, 2, 2, 408, 29, 3, 2, 2, 2, 409, 410, 7, 110, 2, 2, 410, 411, 7, 113, 2, 2, 411, 412, 7, 113, 2, 2, 412, 413, 7, 109, 2, 2, 413, 414, 7, 119, 2, 2, 414, 415, 7, 114, 2, 2, 415, 31, 3, 2, 2, 2, 416, 417, 7, 110, 2, 2, 417, 418, 7, 113, 2, 2, 418, 419, 7, 113, 2, 2, 419, 420, 7, 109, 2, 2, 420, 421, 7, 119, 2, 2, 421, 422, 7, 114, 2, 2, 422, 423, 7, 104, 2, 2, 423, 424, 7, 110, 2, 2, 424, 425, 7, 99, 2, 2, 425, 426, 7, 105, 2, 2, 426, 33, 3, 2, 2, 2, 427, 428, 7, 48, 2, 2, 428, 429, 7, 112, 2, 2, 429, 430, 7, 113, 2, 2, 430, 431, 7, 118, 2, 2, 431, 432, 7, 102, 2, 2, 432, 433, 7, 103, 2, 2, 433, 434, 7, 104, 2, 2, 434, 35, 3, 2, 2, 2, 435, 436, 7, 84, 2, 2, 436, 437, 7, 107, 2, 2, 437, 438, 7, 105, 2, 2, 438, 439, 7, 106, 2, 2, 439, 440, 7, 118, 2, 2, 440, 441, 7, 86, 2, 2, 441, 442, 7, 113, 2, 2, 442, 443, 7, 78, 2, 2, 443, 444, 7, 103, 2, 2, 444, 445, 7, 104, 2, 2, 445, 446, 7, 118, 2, 2, 446, 37, 3, 2, 2, 2, 447, 448, 7, 75, 2, 2, 448, 449, 7, 105, 2, 2, 449, 450, 7, 112, 2, 2, 450, 451, 7, 113, 2, 2, 451, 452, 7, 116, 2, 2, 452, 453, 7, 103, 2, 2, 453, 454, 7, 68, 2, 2, 454, 455, 7, 99, 2, 2, 455, 456, 7, 117, 2, 2, 456, 457, 7, 103, 2, 2, 457, 458, 7, 73, 2, 2, 458, 459, 7, 110, 2, 2, 459, 460, 7, 123, 2, 2, 460, 461, 7, 114, 2, 2, 461, 462, 7, 106, 2, 2, 462, 463, 7, 117, 2, 2, 463, 39, 3, 2, 2, 2, 464, 465, 7, 75, 2, 2, 465, 466, 7, 105, 2, 2, 466, 467, 7, 112, 2, 2, 467, 468, 7, 113, 2, 2, 468, 469, 7, 116, 2, 2, 469, 470, 7, 103, 2, 2, 470, 471, 7, 78, 2, 2, 471, 472, 7, 107, 2, 2, 472, 473, 7, 105, 2, 2, 473, 474, 7, 99, 2, 2, 474, 475, 7, 118, 2, 2, 475, 476, 7, 119, 2, 2, 476, 477, 7, 116, 2, 2, 477, 478, 7, 103, 2, 2, 478, 479, 7, 117, 2, 2, 479, 41, 3, 2, 2, 2, 480, 481, 7, 75, 2, 2, 481, 482, 7, 105, 2, 2, 482, 483, 7, 112, 2, 2, 483, 484, 7, 113, 2, 2, 484, 485, 7, 116, 2, 2, 485, 486, 7, 103, 2, 2, 486, 487, 7, 79, 2, 2, 487, 488, 7, 99, 2, 2, 488, 489, 7, 116, 2, 2, 489, 490, 7, 109, 2, 2, 490, 491, 7, 117, 2, 2, 491, 43, 3, 2, 2, 2, 492, 493, 7, 87, 2, 2, 493, 494, 7, 117, 2, 2, 494, 495, 7, 103, 2, 2, 495, 496, 7, 79, 2, 2, 496, 497, 7, 99, 2, 2, 497, 498, 7, 116, 2, 2, 498, 499, 7, 109, 2, 2, 499, 500, 7, 72, 2, 2, 500, 501, 7, 107, 2, 2, 501, 502, 7, 110, 2, 2, 502, 503, 7, 118, 2, 2, 503, 504, 7, 103, 2, 2, 504, 505, 7, 116, 2, 2, 505, 506, 7, 107, 2, 2, 506, 507, 7, 112, 2, 2, 507, 508, 7, 105, 2, 2, 508, 509, 7, 85, 2, 2, 509, 510, 7, 103, 2, 2, 510, 511, 7, 118, 2, 2, 511, 45, 3, 2, 2, 2, 512, 513, 7, 79, 2, 2, 513, 514, 7, 99, 2, 2, 514, 515, 7, 116, 2, 2, 515, 516, 7, 109, 2, 2, 516, 517, 7, 67, 2, 2, 517, 518, 7, 118, 2, 2, 518, 519, 7, 118, 2, 2, 519, 520, 7, 99, 2, 2, 520, 521, 7, 101, 2, 2, 521, 522, 7, 106, 2, 2, 522, 523, 7, 111, 2, 2, 523, 524, 7, 103, 2, 2, 524, 525, 7, 112, 2, 2, 525, 526, 7, 118, 2, 2, 526, 527, 7, 86, 2, 2, 527, 528, 7, 123, 2, 2, 528, 529, 7, 114, 2, 2, 529, 530, 7, 103, 2, 2, 530, 47, 3, 2, 2, 2, 531, 532, 7, 103, 2, 2, 532, 533, 7, 122, 2, 2, 533, 534, 7, 101, 2, 2, 534, 535, 7, 110, 2, 2, 535, 536, 7, 119, 2, 2, 536, 537, 7, 102, 2, 2, 537, 538, 7, 103, 2, 2, 538, 539, 7, 70, 2, 2, 539, 540, 7, 72, 2, 2, 540, 541, 7, 78, 2, 2, 541, 542, 7, 86, 2, 2, 542, 49, 3, 2, 2, 2, 543, 544, 7, 107, 2, 2, 544, 545, 7, 112, 2, 2, 545, 546, 7, 101, 2, 2, 546, 547, 7, 110, 2, 2, 547, 548, 7, 119, 2, 2, 548, 549, 7, 102, 2, 2, 549, 550, 7, 103, 2, 2, 550, 551, 7, 70, 2, 2, 551, 552, 7, 72, 2, 2, 552, 553, 7, 78, 2, 2, 553, 554, 7, 86, 2, 2, 554, 51, 3, 2, 2, 2, 555, 556, 7, 103, 2, 2, 556, 557, 7, 122, 2, 2, 557, 558, 7, 101, 2, 2, 558, 559, 7, 110, 2, 2, 559, 560, 7, 119, 2, 2, 560, 561, 7, 102, 2, 2, 561, 562, 7, 103, 2, 2, 562, 563, 7, 97, 2, 2, 563, 564, 7, 102, 2, 2, 564, 565, 7, 104, 2, 2, 565, 566, 7, 110, 2, 2, 566, 567, 7, 118, 2, 2, 567, 53, 3, 2, 2, 2, 568, 569, 7, 107, 2, 2, 569, 570, 7, 112, 2, 2, 570, 571, 7, 101, 2, 2, 571, 572, 7, 110, 2, 2, 572, 573, 7, 119, 2, 2, 573, 574, 7, 102, 2, 2, 574, 575, 7, 103, 2, 2, 575, 576, 7, 97, 2, 2, 576, 577, 7, 102, 2, 2, 577, 578, 7, 104, 2, 2, 578, 579, 7, 110, 2, 2, 579, 580, 7, 118, 2, 2, 580, 55, 3, 2, 2, 2, 581, 582, 7, 119, 2, 2, 582, 583, 7, 117, 2, 2, 583, 584, 7, 103, 2, 2, 584, 585, 7, 71, 2, 2, 585, 586, 7, 122, 2, 2, 586, 587, 7, 118, 2, 2, 587, 588, 7, 103, 2, 2, 588, 589, 7, 112, 2, 2, 589, 590, 7, 117, 2, 2, 590, 591, 7, 107, 2, 2, 591, 592, 7, 113, 2, 2, 592, 593, 7, 112, 2, 2, 593, 57, 3, 2, 2, 2, 594, 595, 7, 62, 2, 2, 595, 59, 3, 2, 2, 2, 596, 597, 7, 64, 2, 2, 597, 61, 3, 2, 2, 2, 598, 599, 7, 103, 2, 2, 599, 600, 7, 112, 2, 2, 600, 601, 7, 119, 2, 2, 601, 602, 7, 111, 2, 2, 602, 603, 7, 103, 2, 2, 603, 604, 7, 116, 2, 2, 604, 605, 7, 99, 2, 2, 605, 606, 7, 118, 2, 2, 606, 607, 7, 103, 2, 2, 607, 63, 3, 2, 2, 2, 608, 609, 7, 103, 2, 2, 609, 610, 7, 112, 2, 2, 610, 611, 7, 119, 2, 2, 611, 612, 7, 111, 2, 2, 612, 65, 3, 2, 2, 2, 613, 614, 7, 103, 2, 2, 614, 615, 7, 122, 2, 2, 615, 616, 7, 101, 2, 2, 616, 617, 7, 103, 2, 2, 617, 618, 7, 114, 2, 2, 618, 619, 7, 118, 2, 2, 619, 67, 3, 2, 2, 2, 620, 621, 7, 107, 2, 2, 621, 622, 7, 105, 2, 2, 622, 623, 7, 112, 2, 2, 623, 624, 7, 113, 2, 2, 624, 625, 7, 116, 2, 2, 625, 626, 7, 103, 2, 2, 626, 69, 3, 2, 2, 2, 627, 628, 7, 117, 2, 2, 628, 629, 7, 119, 2, 2, 629, 630, 7, 100, 2, 2, 630, 631, 7, 117, 2, 2, 631, 632, 7, 118, 2, 2, 632, 633, 7, 107, 2, 2, 633, 634, 7, 118, 2, 2, 634, 635, 7, 119, 2, 2, 635, 636, 7, 118, 2, 2, 636, 637, 7, 103, 2, 2, 637, 71, 3, 2, 2, 2, 638, 639, 7, 117, 2, 2, 639, 640, 7, 119, 2, 2, 640, 641, 7, 100, 2, 2, 641, 73, 3, 2, 2, 2, 642, 643, 7, 116, 2, 2, 643, 644, 7, 103, 2, 2, 644, 645, 7, 120, 2, 2, 645, 646, 7, 103, 2, 2, 646, 647, 7, 116, 2, 2, 647, 648, 7, 117, 2, 2, 648, 649, 7, 103, 2, 2, 649, 650, 7, 117, 2, 2, 650, 651, 7, 119, 2, 2, 651, 652, 7, 100, 2, 2, 652, 75, 3, 2, 2, 2, 653, 654, 7, 116, 2, 2, 654, 655, 7, 117, 2, 2, 655, 656, 7, 119, 2, 2, 656, 657, 7, 100, 2, 2, 657, 77, 3, 2, 2, 2, 658, 659, 7, 100, 2, 2, 659, 660, 7, 123, 2, 2, 660, 79, 3, 2, 2, 2, 661, 662, 7, 104, 2, 2, 662, 663, 7, 116, 2, 2, 663, 664, 7, 113, 2, 2, 664, 665, 7, 111, 2, 2, 665, 81, 3, 2, 2, 2, 666, 667, 7, 114, 2, 2, 667, 668, 7, 113, 2, 2, 668, 669, 7, 117, 2, 2, 669, 670, 7, 107, 2, 2, 670, 671, 7, 118, 2, 2, 671, 672, 7, 107, 2, 2, 672, 673, 7, 113, 2, 2, 673, 674, 7, 112, 2, 2, 674, 83, 3, 2, 2, 2, 675, 676, 7, 114, 2, 2, 676, 677, 7, 113, 2, 2, 677, 678, 7, 117, 2, 2, 678, 85, 3, 2, 2, 2, 679, 680, 7, 114, 2, 2, 680, 681, 7, 99, 2, 2, 681, 682, 7, 116, 2, 2, 682, 683, 7, 99, 2, 2, 683, 684, 7, 111, 2, 2, 684, 685, 7, 103, 2, 2, 685, 686, 7, 118, 2, 2, 686, 687, 7, 103, 2, 2, 687, 688, 7, 116, 2, 2, 688, 689, 7, 117, 2, 2, 689, 87, 3, 2, 2, 2, 690, 691, 7, 104, 2, 2, 691, 692, 7, 103, 2, 2, 692, 693, 7, 99, 2, 2, 693, 694, 7, 118, 2, 2, 694, 695, 7, 119, 2, 2, 695, 696, 7, 116, 2, 2, 696, 697, 7, 103, 2, 2, 697, 698, 7, 80, 2, 2, 698, 699, 7, 99, 2, 2, 699, 700, 7, 111, 2, 2, 700, 701, 7, 103, 2, 2, 701, 702, 7, 117, 2, 2, 702, 89, 3, 2, 2, 2, 703, 704, 7, 101, 2, 2, 704, 705, 7, 120, 2, 2, 705, 706, 7, 82, 2, 2, 706, 707, 7, 99, 2, 2, 707, 708, 7, 116, 2, 2, 708, 709, 7, 99, 2, 2, 709, 710, 7, 111, 2, 2, 710, 711, 7, 103, 2, 2, 711, 712, 7, 118, 2, 2, 712, 713, 7, 103, 2, 2, 713, 714, 7, 116, 2, 2, 714, 715, 7, 117, 2, 2, 715, 91, 3, 2, 2, 2, 716, 717, 7, 72, 2, 2, 717, 718, 7, 103, 2, 2, 718, 719, 7, 99, 2, 2, 719, 720, 7, 118, 2, 2, 720, 721, 7, 87, 2, 2, 721, 722, 7, 75, 2, 2, 722, 723, 7, 78, 2, 2, 723, 724, 7, 99, 2, 2, 724, 725, 7, 100, 2, 2, 725, 726, 7, 103, 2, 2, 726, 727, 7, 110, 2, 2, 727, 728, 7, 80, 2, 2, 728, 729, 7, 99, 2, 2, 729, 730, 7, 111, 2, 2, 730, 731, 7, 103, 2, 2, 731, 732, 7, 75, 2, 2, 732, 733, 7, 70, 2, 2, 733, 93, 3, 2, 2, 2, 734, 735, 7, 72, 2, 2, 735, 736, 7, 103, 2, 2, 736, 737, 7, 99, 2, 2, 737, 738, 7, 118, 2, 2, 738, 739, 7, 87, 2, 2, 739, 740, 7, 75, 2, 2, 740, 741, 7, 86, 2, 2, 741, 742, 7, 113, 2, 2, 742, 743, 7, 113, 2, 2, 743, 744, 7, 110, 2, 2, 744, 745, 7, 118, 2, 2, 745, 746, 7, 107, 2, 2, 746, 747, 7, 114, 2, 2, 747, 748, 7, 86, 2, 2, 748, 749, 7, 103, 2, 2, 749, 750, 7, 122, 2, 2, 750, 751, 7, 118, 2, 2, 751, 752, 7, 80, 2, 2, 752, 753, 7, 99, 2, 2, 753, 754, 7, 111, 2, 2, 754, 755, 7, 103, 2, 2, 755, 756, 7, 75, 2, 2, 756, 757, 7, 70, 2, 2, 757, 95, 3, 2, 2, 2, 758, 759, 7, 85, 2, 2, 759, 760, 7, 99, 2, 2, 760, 761, 7, 111, 2, 2, 761, 762, 7, 114, 2, 2, 762, 763, 7, 110, 2, 2, 763, 764, 7, 103, 2, 2, 764, 765, 7, 86, 2, 2, 765, 766, 7, 103, 2, 2, 766, 767, 7, 122, 2, 2, 767, 768, 7, 118, 2, 2, 768, 769, 7, 80, 2, 2, 769, 770, 7, 99, 2, 2, 770, 771, 7, 111, 2, 2, 771, 772, 7, 103, 2, 2, 772, 773, 7, 75, 2, 2, 773, 774, 7, 70, 2, 2, 774, 97, 3, 2, 2, 2, 775, 776, 7, 82, 2, 2, 776, 777, 7, 99, 2, 2, 777, 778, 7, 116, 2, 2, 778, 779, 7, 99, 2, 2, 779, 780, 7, 111, 2, 2, 780, 781, 7, 87, 2, 2, 781, 782, 7, 75, 2, 2, 782, 783, 7, 78, 2, 2, 783, 784, 7, 99, 2, 2, 784, 785, 7, 100, 2, 2, 785, 786, 7, 103, 2, 2, 786, 787, 7, 110, 2, 2, 787, 788, 7, 80, 2, 2, 788, 789, 7, 99, 2, 2, 789, 790, 7, 111, 2, 2, 790, 791, 7, 103, 2, 2, 791, 792, 7, 75, 2, 2, 792, 793, 7, 70, 2, 2, 793, 99, 3, 2, 2, 2, 794, 795, 7, 69, 2, 2, 795, 796, 7, 106, 2, 2, 796, 797, 7, 99, 2, 2, 797, 798, 7, 116, 2, 2, 798, 799, 7, 99, 2, 2, 799, 800, 7, 101, 2, 2, 800, 801, 7, 118, 2, 2, 801, 802, 7, 103, 2, 2, 802, 803, 7, 116, 2, 2, 803, 101, 3, 2, 2, 2, 804, 805, 7, 117, 2, 2, 805, 806, 7, 107, 2, 2, 806, 807, 7, 124, 2, 2, 807, 808, 7, 103, 2, 2, 808, 809, 7, 111, 2, 2, 809, 810, 7, 103, 2, 2, 810, 811, 7, 112, 2, 2, 811, 812, 7, 119, 2, 2, 812, 813, 7, 112, 2, 2, 813, 814, 7, 99, 2, 2, 814, 815, 7, 111, 2, 2, 815, 816, 7, 103, 2, 2, 816, 103, 3, 2, 2, 2, 817, 818, 7, 101, 2, 2, 818, 819, 7, 113, 2, 2, 819, 820, 7, 112, 2, 2, 820, 821, 7, 118, 2, 2, 821, 822, 7, 113, 2, 2, 822, 823, 7, 119, 2, 2, 823, 824, 7, 116, 2, 2, 824, 825, 7, 114, 2, 2, 825, 826, 7, 113, 2, 2, 826, 827, 7, 107, 2, 2, 827, 828, 7, 112, 2, 2, 828, 829, 7, 118, 2, 2, 829, 105, 3, 2, 2, 2, 830, 831, 7, 99, 2, 2, 831, 832, 7, 112, 2, 2, 832, 833, 7, 101, 2, 2, 833, 834, 7, 106, 2, 2, 834, 835, 7, 113, 2, 2, 835, 836, 7, 116, 2, 2, 836, 107, 3, 2, 2, 2, 837, 838, 7, 99, 2, 2, 838, 839, 7, 112, 2, 2, 839, 840, 7, 101, 2, 2, 840, 841, 7, 106, 2, 2, 841, 842, 7, 113, 2, 2, 842, 843, 7, 116, 2, 2, 843, 844, 7, 70, 2, 2, 844, 845, 7, 103, 2, 2, 845, 846, 7, 104, 2, 2, 846, 109, 3, 2, 2, 2, 847, 848, 7, 120, 2, 2, 848, 849, 7, 99, 2, 2, 849, 850, 7, 110, 2, 2, 850, 851, 7, 119, 2, 2, 851, 852, 7, 103, 2, 2, 852, 853, 7, 84, 2, 2, 853, 854, 7, 103, 2, 2, 854, 855, 7, 101, 2, 2, 855, 856, 7, 113, 2, 2, 856, 857, 7, 116, 2, 2, 857, 858, 7, 102, 2, 2, 858, 859, 7, 70, 2, 2, 859, 860, 7, 103, 2, 2, 860, 861, 7, 104, 2, 2, 861, 111, 3, 2, 2, 2, 862, 863, 7, 111, 2, 2, 863, 864, 7, 99, 2, 2, 864, 865, 7, 116, 2, 2, 865, 866, 7, 109, 2, 2, 866, 113, 3, 2, 2, 2, 867, 868, 7, 111, 2, 2, 868, 869, 7, 99, 2, 2, 869, 870, 7, 116, 2, 2, 870, 871, 7, 109, 2, 2, 871, 872, 7, 69, 2, 2, 872, 873, 7, 110, 2, 2, 873, 874, 7, 99, 2, 2, 874, 875, 7, 117, 2, 2, 875, 876, 7, 117, 2, 2, 876, 115, 3, 2, 2, 2, 877, 878, 7, 101, 2, 2, 878, 879, 7, 119, 2, 2, 879, 880, 7, 116, 2, 2, 880, 881, 7, 117, 2, 2, 881, 882, 7, 107, 2, 2, 882, 883, 7, 120, 2, 2, 883, 884, 7, 103, 2, 2, 884, 117, 3, 2, 2, 2, 885, 886, 7, 100, 2, 2, 886, 887, 7, 99, 2, 2, 887, 888, 7, 117, 2, 2, 888, 889, 7, 103, 2, 2, 889, 119, 3, 2, 2, 2, 890, 891, 7, 110, 2, 2, 891, 892, 7, 107, 2, 2, 892, 893, 7, 105, 2, 2, 893, 894, 7, 99, 2, 2, 894, 895, 7, 118, 2, 2, 895, 896, 7, 119, 2, 2, 896, 897, 7, 116, 2, 2, 897, 898, 7, 103, 2, 2, 898, 121, 3, 2, 2, 2, 899, 900, 7, 110, 2, 2, 900, 901, 7, 107, 2, 2, 901, 902, 7, 105, 2, 2, 902, 123, 3, 2, 2, 2, 903, 904, 7, 110, 2, 2, 904, 905, 7, 107, 2, 2, 905, 906, 7, 105, 2, 2, 906, 907, 7, 69, 2, 2, 907, 908, 7, 113, 2, 2, 908, 909, 7, 111, 2, 2, 909, 910, 7, 114, 2, 2, 910, 911, 7, 113, 2, 2, 911, 912, 7, 112, 2, 2, 912, 913, 7, 103, 2, 2, 913, 914, 7, 112, 2, 2, 914, 915, 7, 118, 2, 2, 915, 125, 3, 2, 2, 2, 916, 917, 7, 80, 2, 2, 917, 918, 7, 87, 2, 2, 918, 919, 7, 78, 2, 2, 919, 920, 7, 78, 2, 2, 920, 127, 3, 2, 2, 2, 921, 922, 7, 68, 2, 2, 922, 923, 7, 67, 2, 2, 923, 924, 7, 85, 2, 2, 924, 925, 7, 71, 2, 2, 925, 129, 3, 2, 2, 2, 926, 927, 7, 74, 2, 2, 927, 928, 7, 113, 2, 2, 928, 929, 7, 116, 2, 2, 929, 930, 7, 107, 2, 2, 930, 931, 7, 124, 2, 2, 931, 932, 7, 67, 2, 2, 932, 933, 7, 122, 2, 2, 933, 934, 7, 107, 2, 2, 934, 935, 7, 117, 2, 2, 935, 936, 7, 48, 2, 2, 936, 937, 7, 68, 2, 2, 937, 938, 7, 99, 2, 2, 938, 939, 7, 117, 2, 2, 939, 940, 7, 103, 2, 2, 940, 941, 7, 86, 2, 2, 941, 942, 7, 99, 2, 2, 942, 943, 7, 105, 2, 2, 943, 944, 7, 78, 2, 2, 944, 945, 7, 107, 2, 2, 945, 946, 7, 117, 2, 2, 946, 947, 7, 118, 2, 2, 947, 131, 3, 2, 2, 2, 948, 949, 7, 88, 2, 2, 949, 950, 7, 103, 2, 2, 950, 951, 7, 116, 2, 2, 951, 952, 7, 118, 2, 2, 952, 953, 7, 67, 2, 2, 953, 954, 7, 122, 2, 2, 954, 955, 7, 107, 2, 2, 955, 956, 7, 117, 2, 2, 956, 957, 7, 48, 2, 2, 957, 958, 7, 68, 2, 2, 958, 959, 7, 99, 2, 2, 959, 960, 7, 117, 2, 2, 960, 961, 7, 103, 2, 2, 961, 962, 7, 86, 2, 2, 962, 963, 7, 99, 2, 2, 963, 964, 7, 105, 2, 2, 964, 965, 7, 78, 2, 2, 965, 966, 7, 107, 2, 2, 966, 967, 7, 117, 2, 2, 967, 968, 7, 118, 2, 2, 968, 133, 3, 2, 2, 2, 969, 970, 7, 74, 2, 2, 970, 971, 7, 113, 2, 2, 971, 972, 7, 116, 2, 2, 972, 973, 7, 107, 2, 2, 973, 974, 7, 124, 2, 2, 974, 975, 7, 67, 2, 2, 975, 976, 7, 122, 2, 2, 976, 977, 7, 107, 2, 2, 977, 978, 7, 117, 2, 2, 978, 979, 7, 48, 2, 2, 979, 980, 7, 68, 2, 2, 980, 981, 7, 99, 2, 2, 981, 982, 7, 117, 2, 2, 982, 983, 7, 103, 2, 2, 983, 984, 7, 85, 2, 2, 984, 985, 7, 101, 2, 2, 985, 986, 7, 116, 2, 2, 986, 987, 7, 107, 2, 2, 987, 988, 7, 114, 2, 2, 988, 989, 7, 118, 2, 2, 989, 990, 7, 78, 2, 2, 990, 991, 7, 107, 2, 2, 991, 992, 7, 117, 2, 2, 992, 993, 7, 118, 2, 2, 993, 135, 3, 2, 2, 2, 994, 995, 7, 88, 2, 2, 995, 996, 7, 103, 2, 2, 996, 997, 7, 116, 2, 2, 997, 998, 7, 118, 2, 2, 998, 999, 7, 67, 2, 2, 999, 1000, 7, 122, 2, 2, 1000, 1001, 7, 107, 2, 2, 1001, 1002, 7, 117, 2, 2, 1002, 1003, 7, 48, 2, 2, 1003, 1004, 7, 68, 2, 2, 1004, 1005, 7, 99, 2, 2, 1005, 1006, 7, 117, 2, 2, 1006, 1007, 7, 103, 2, 2, 1007, 1008, 7, 85, 2, 2, 1008, 1009, 7, 101, 2, 2, 1009, 1010, 7, 116, 2, 2, 1010, 1011, 7, 107, 2, 2, 1011, 1012, 7, 114, 2, 2, 1012, 1013, 7, 118, 2, 2, 1013, 1014, 7, 78, 2, 2, 1014, 1015, 7, 107, 2, 2, 1015, 1016, 7, 117, 2, 2, 1016, 1017, 7, 118, 2, 2, 1017, 137, 3, 2, 2, 2, 1018, 1019, 7, 73, 2, 2, 1019, 1020, 7, 70, 2, 2, 1020, 1021, 7, 71, 2, 2, 1021, 1022, 7, 72, 2, 2, 1022, 139, 3, 2, 2, 2, 1023, 1024, 7, 73, 2, 2, 1024, 1025, 7, 110, 2, 2, 1025, 1026, 7, 123, 2, 2, 1026, 1027, 7, 114, 2, 2, 1027, 1028, 7, 106, 2, 2, 1028, 1029, 7, 69, 2, 2, 1029, 1030, 7, 110, 2, 2, 1030, 1031, 7, 99, 2, 2, 1031, 1032, 7, 117, 2, 2, 1032, 1033, 7, 117, 2, 2, 1033, 1034, 7, 70, 2, 2, 1034, 1035, 7, 103, 2, 2, 1035, 1036, 7, 104, 2, 2, 1036, 141, 3, 2, 2, 2, 1037, 1038, 7, 67, 2, 2, 1038, 1039, 7, 118, 2, 2, 1039, 1040, 7, 118, 2, 2, 1040, 1041, 7, 99, 2, 2, 1041, 1042, 7, 101, 2, 2, 1042, 1043, 7, 106, 2, 2, 1043, 143, 3, 2, 2, 2, 1044, 1045, 7, 78, 2, 2, 1045, 1046, 7, 107, 2, 2, 1046, 1047, 7, 105, 2, 2, 1047, 1048, 7, 99, 2, 2, 1048, 1049, 7, 118, 2, 2, 1049, 1050, 7, 119, 2, 2, 1050, 1051, 7, 116, 2, 2, 1051, 1052, 7, 103, 2, 2, 1052, 1053, 7, 69, 2, 2, 1053, 1054, 7, 99, 2, 2, 1054, 1055, 7, 116, 2, 2, 1055, 1056, 7, 103, 2, 2, 1056, 1057, 7, 118, 2, 2, 1057, 1058, 7, 68, 2, 2, 1058, 1059, 7, 123, 2, 2, 1059, 1060, 7, 82, 2, 2, 1060, 1061, 7, 113, 2, 2, 1061, 1062, 7, 117, 2, 2, 1062, 145, 3, 2, 2, 2, 1063, 1064, 7, 78, 2, 2, 1064, 1065, 7, 107, 2, 2, 1065, 1066, 7, 105, 2, 2, 1066, 1067, 7, 99, 2, 2, 1067, 1068, 7, 118, 2, 2, 1068, 1069, 7, 119, 2, 2, 1069, 1070, 7, 116, 2, 2, 1070, 1071, 7, 103, 2, 2, 1071, 1072, 7, 69, 2, 2, 1072, 1073, 7, 99, 2, 2, 1073, 1074, 7, 116, 2, 2, 1074, 1075, 7, 103, 2, 2, 1075, 1076, 7, 118, 2, 2, 1076, 1077, 7, 68, 2, 2, 1077, 1078, 7, 123, 2, 2, 1078, 1079, 7, 75, 2, 2, 1079, 1080, 7, 112, 2, 2, 1080, 1081, 7, 102, 2, 2, 1081, 1082, 7, 103, 2, 2, 1082, 1083, 7, 122, 2, 2, 1083, 147, 3, 2, 2, 2, 1084, 1085, 7, 106, 2, 2, 1085, 1086, 7, 103, 2, 2, 1086, 1087, 7, 99, 2, 2, 1087, 1088, 7, 102, 2, 2, 1088, 149, 3, 2, 2, 2, 1089, 1090, 7, 72, 2, 2, 1090, 1091, 7, 113, 2, 2, 1091, 1092, 7, 112, 2, 2, 1092, 1093, 7, 118, 2, 2, 1093, 1094, 7, 84, 2, 2, 1094, 1095, 7, 103, 2, 2, 1095, 1096, 7, 120, 2, 2, 1096, 1097, 7, 107, 2, 2, 1097, 1098, 7, 117, 2, 2, 1098, 1099, 7, 107, 2, 2, 1099, 1100, 7, 113, 2, 2, 1100, 1101, 7, 112, 2, 2, 1101, 151, 3, 2, 2, 2, 1102, 1103, 7, 106, 2, 2, 1103, 1104, 7, 106, 2, 2, 1104, 1105, 7, 103, 2, 2, 1105, 1106, 7, 99, 2, 2, 1106, 153, 3, 2, 2, 2, 1107, 1108, 7, 67, 2, 2, 1108, 1109, 7, 117, 2, 2, 1109, 1110, 7, 101, 2, 2, 1110, 1111, 7, 103, 2, 2, 1111, 1112, 7, 112, 2, 2, 1112, 1113, 7, 102, 2, 2, 1113, 1114, 7, 103, 2, 2, 1114, 1115, 7, 116, 2, 2, 1115, 155, 3, 2, 2, 2, 1116, 1117, 7, 70, 2, 2, 1117, 1118, 7, 103, 2, 2, 1118, 1119, 7, 117, 2, 2, 1119, 1120, 7, 101, 2, 2, 1120, 1121, 7, 103, 2, 2, 1121, 1122, 7, 112, 2, 2, 1122, 1123, 7, 102, 2, 2, 1123, 1124, 7, 103, 2, 2, 1124, 1125, 7, 116, 2, 2, 1125, 157, 3, 2, 2, 2, 1126, 1127, 7, 78, 2, 2, 1127, 1128, 7, 107, 2, 2, 1128, 1129, 7, 112, 2, 2, 1129, 1130, 7, 103, 2, 2, 1130, 1131, 7, 73, 2, 2, 1131, 1132, 7, 99, 2, 2, 1132, 1133, 7, 114, 2, 2, 1133, 159, 3, 2, 2, 2, 1134, 1135, 7, 69, 2, 2, 1135, 1136, 7, 99, 2, 2, 1136, 1137, 7, 116, 2, 2, 1137, 1138, 7, 103, 2, 2, 1138, 1139, 7, 118, 2, 2, 1139, 1140, 7, 81, 2, 2, 1140, 1141, 7, 104, 2, 2, 1141, 1142, 7, 104, 2, 2, 1142, 1143, 7, 117, 2, 2, 1143, 1144, 7, 103, 2, 2, 1144, 1145, 7, 118, 2, 2, 1145, 161, 3, 2, 2, 2, 1146, 1147, 7, 112, 2, 2, 1147, 1148, 7, 99, 2, 2, 1148, 1149, 7, 111, 2, 2, 1149, 1150, 7, 103, 2, 2, 1150, 163, 3, 2, 2, 2, 1151, 1152, 7, 112, 2, 2, 1152, 1153, 7, 99, 2, 2, 1153, 1154, 7, 111, 2, 2, 1154, 1155, 7, 103, 2, 2, 1155, 1156, 7, 107, 2, 2, 1156, 1157, 7, 102, 2, 2, 1157, 165, 3, 2, 2, 2, 1158, 1159, 7, 81, 2, 2, 1159, 1160, 7, 85, 2, 2, 1160, 1161, 7, 49, 2, 2, 1161, 1162, 7, 52, 2, 2, 1162, 167, 3, 2, 2, 2, 1163, 1164, 7, 72, 2, 2, 1164, 1165, 7, 85, 2, 2, 1165, 1166, 7, 86, 2, 2, 1166, 1167, 7, 123, 2, 2, 1167, 1168, 7, 114, 2, 2, 1168, 1169, 7, 103, 2, 2, 1169, 169, 3, 2, 2, 2, 1170, 1171, 7, 104, 2, 2, 1171, 1172, 7, 117, 2, 2, 1172, 1173, 7, 86, 2, 2, 1173, 1174, 7, 123, 2, 2, 1174, 1175, 7, 114, 2, 2, 1175, 1176, 7, 103, 2, 2, 1176, 171, 3, 2, 2, 2, 1177, 1178, 7, 78, 2, 2, 1178, 1179, 7, 113, 2, 2, 1179, 1180, 7, 121, 2, 2, 1180, 1181, 7, 103, 2, 2, 1181, 1182, 7, 116, 2, 2, 1182, 1183, 7, 81, 2, 2, 1183, 1184, 7, 114, 2, 2, 1184, 1185, 7, 85, 2, 2, 1185, 1186, 7, 107, 2, 2, 1186, 1187, 7, 124, 2, 2, 1187, 1188, 7, 103, 2, 2, 1188, 173, 3, 2, 2, 2, 1189, 1190, 7, 87, 2, 2, 1190, 1191, 7, 114, 2, 2, 1191, 1192, 7, 114, 2, 2, 1192, 1193, 7, 103, 2, 2, 1193, 1194, 7, 116, 2, 2, 1194, 1195, 7, 81, 2, 2, 1195, 1196, 7, 114, 2, 2, 1196, 1197, 7, 85, 2, 2, 1197, 1198, 7, 107, 2, 2, 1198, 1199, 7, 124, 2, 2, 1199, 1200, 7, 103, 2, 2, 1200, 175, 3, 2, 2, 2, 1201, 1202, 7, 82, 2, 2, 1202, 1203, 7, 99, 2, 2, 1203, 1204, 7, 112, 2, 2, 1204, 1205, 7, 113, 2, 2, 1205, 1206, 7, 117, 2, 2, 1206, 1207, 7, 103, 2, 2, 1207, 177, 3, 2, 2, 2, 1208, 1209, 7, 86, 2, 2, 1209, 1210, 7, 123, 2, 2, 1210, 1211, 7, 114, 2, 2, 1211, 1212, 7, 113, 2, 2, 1212, 1213, 7, 67, 2, 2, 1213, 1214, 7, 117, 2, 2, 1214, 1215, 7, 101, 2, 2, 1215, 1216, 7, 103, 2, 2, 1216, 1217, 7, 112, 2, 2, 1217, 1218, 7, 102, 2, 2, 1218, 1219, 7, 103, 2, 2, 1219, 1220, 7, 116, 2, 2, 1220, 179, 3, 2, 2, 2, 1221, 1222, 7, 86, 2, 2, 1222, 1223, 7, 123, 2, 2, 1223, 1224, 7, 114, 2, 2, 1224, 1225, 7, 113, 2, 2, 1225, 1226, 7, 70, 2, 2, 1226, 1227, 7, 103, 2, 2, 1227, 1228, 7, 117, 2, 2, 1228, 1229, 7, 101, 2, 2, 1229, 1230, 7, 103, 2, 2, 1230, 1231, 7, 112, 2, 2, 1231, 1232, 7, 102, 2, 2, 1232, 1233, 7, 103, 2, 2, 1233, 1234, 7, 116, 2, 2, 1234, 181, 3, 2, 2, 2, 1235, 1236, 7, 86, 2, 2, 1236, 1237, 7, 123, 2, 2, 1237, 1238, 7, 114, 2, 2, 1238, 1239, 7, 113, 2, 2, 1239, 1240, 7, 78, 2, 2, 1240, 1241, 7, 107, 2, 2, 1241, 1242, 7, 112, 2, 2, 1242, 1243, 7, 103, 2, 2, 1243, 1244, 7, 73, 2, 2, 1244, 1245, 7, 99, 2, 2, 1245, 1246, 7, 114, 2, 2, 1246, 183, 3, 2, 2, 2, 1247, 1248, 7, 121, 2, 2, 1248, 1249, 7, 107, 2, 2, 1249, 1250, 7, 112, 2, 2, 1250, 1251, 7, 67, 2, 2, 1251, 1252, 7, 117, 2, 2, 1252, 1253, 7, 101, 2, 2, 1253, 1254, 7, 103, 2, 2, 1254, 1255, 7, 112, 2, 2, 1255, 1256, 7, 118, 2, 2, 1256, 185, 3, 2, 2, 2, 1257, 1258, 7, 121, 2, 2, 1258, 1259, 7, 107, 2, 2, 1259, 1260, 7, 112, 2, 2, 1260, 1261, 7, 70, 2, 2, 1261, 1262, 7, 103, 2, 2, 1262, 1263, 7, 117, 2, 2, 1263, 1264, 7, 101, 2, 2, 1264, 1265, 7, 103, 2, 2, 1265, 1266, 7, 112, 2, 2, 1266, 1267, 7, 118, 2, 2, 1267, 187, 3, 2, 2, 2, 1268, 1269, 7, 90, 2, 2, 1269, 1270, 7, 74, 2, 2, 1270, 1271, 7, 103, 2, 2, 1271, 1272, 7, 107, 2, 2, 1272, 1273, 7, 105, 2, 2, 1273, 1274, 7, 106, 2, 2, 1274, 1275, 7, 118, 2, 2, 1275, 189, 3, 2, 2, 2, 1276, 1277, 7, 69, 2, 2, 1277, 1278, 7, 99, 2, 2, 1278, 1279, 7, 114, 2, 2, 1279, 1280, 7, 74, 2, 2, 1280, 1281, 7, 103, 2, 2, 1281, 1282, 7, 107, 2, 2, 1282, 1283, 7, 105, 2, 2, 1283, 1284, 7, 106, 2, 2, 1284, 1285, 7, 118, 2, 2, 1285, 191, 3, 2, 2, 2, 1286, 1287, 7, 89, 2, 2, 1287, 1288, 7, 103, 2, 2, 1288, 1289, 7, 107, 2, 2, 1289, 1290, 7, 105, 2, 2, 1290, 1291, 7, 106, 2, 2, 1291, 1292, 7, 118, 2, 2, 1292, 1293, 7, 69, 2, 2, 1293, 1294, 7, 110, 2, 2, 1294, 1295, 7, 99, 2, 2, 1295, 1296, 7, 117, 2, 2, 1296, 1297, 7, 117, 2, 2, 1297, 193, 3, 2, 2, 2, 1298, 1299, 7, 89, 2, 2, 1299, 1300, 7, 107, 2, 2, 1300, 1301, 7, 102, 2, 2, 1301, 1302, 7, 118, 2, 2, 1302, 1303, 7, 106, 2, 2, 1303, 1304, 7, 69, 2, 2, 1304, 1305, 7, 110, 2, 2, 1305, 1306, 7, 99, 2, 2, 1306, 1307, 7, 117, 2, 2, 1307, 1308, 7, 117, 2, 2, 1308, 195, 3, 2, 2, 2, 1309, 1310, 7, 88, 2, 2, 1310, 1311, 7, 103, 2, 2, 1311, 1312, 7, 112, 2, 2, 1312, 1313, 7, 102, 2, 2, 1313, 1314, 7, 113, 2, 2, 1314, 1315, 7, 116, 2, 2, 1315, 197, 3, 2, 2, 2, 1316, 1317, 7, 87, 2, 2, 1317, 1318, 7, 112, 2, 2, 1318, 1319, 7, 107, 2, 2, 1319, 1320, 7, 101, 2, 2, 1320, 1321, 7, 113, 2, 2, 1321, 1322, 7, 102, 2, 2, 1322, 1323, 7, 103, 2, 2, 1323, 1324, 7, 84, 2, 2, 1324, 1325, 7, 99, 2, 2, 1325, 1326, 7, 112, 2, 2, 1326, 1327, 7, 105, 2, 2, 1327, 1328, 7, 103, 2, 2, 1328, 199, 3, 2, 2, 2, 1329, 1330, 7, 69, 2, 2, 1330, 1331, 7, 113, 2, 2, 1331, 1332, 7, 102, 2, 2, 1332, 1333, 7, 103, 2, 2, 1333, 1334, 7, 82, 2, 2, 1334, 1335, 7, 99, 2, 2, 1335, 1336, 7, 105, 2, 2, 1336, 1337, 7, 103, 2, 2, 1337, 1338, 7, 84, 2, 2, 1338, 1339, 7, 99, 2, 2, 1339, 1340, 7, 112, 2, 2, 1340, 1341, 7, 105, 2, 2, 1341, 1342, 7, 103, 2, 2, 1342, 201, 3, 2, 2, 2, 1343, 1344, 7, 72, 2, 2, 1344, 1345, 7, 99, 2, 2, 1345, 1346, 7, 111, 2, 2, 1346, 1347, 7, 107, 2, 2, 1347, 1348, 7, 110, 2, 2, 1348, 1349, 7, 123, 2, 2, 1349, 1350, 7, 69, 2, 2, 1350, 1351, 7, 110, 2, 2, 1351, 1352, 7, 99, 2, 2, 1352, 1353, 7, 117, 2, 2, 1353, 1354, 7, 117, 2, 2, 1354, 203, 3, 2, 2, 2, 1355, 1356, 7, 85, 2, 2, 1356, 1357, 7, 86, 2, 2, 1357, 1358, 7, 67, 2, 2, 1358, 1359, 7, 86, 2, 2, 1359, 205, 3, 2, 2, 2, 1360, 1361, 7, 71, 2, 2, 1361, 1362, 7, 110, 2, 2, 1362, 1363, 7, 107, 2, 2, 1363, 1364, 7, 102, 2, 2, 1364, 1365, 7, 103, 2, 2, 1365, 1366, 7, 102, 2, 2, 1366, 1367, 7, 72, 2, 2, 1367, 1368, 7, 99, 2, 2, 1368, 1369, 7, 110, 2, 2, 1369, 1370, 7, 110, 2, 2, 1370, 1371, 7, 100, 2, 2, 1371, 1372, 7, 99, 2, 2, 1372, 1373, 7, 101, 2, 2, 1373, 1374, 7, 109, 2, 2, 1374, 1375, 7, 80, 2, 2, 1375, 1376, 7, 99, 2, 2, 1376, 1377, 7, 111, 2, 2, 1377, 1378, 7, 103, 2, 2, 1378, 207, 3, 2, 2, 2, 1379, 1380, 7, 71, 2, 2, 1380, 1381, 7, 110, 2, 2, 1381, 1382, 7, 107, 2, 2, 1382, 1383, 7, 102, 2, 2, 1383, 1384, 7, 103, 2, 2, 1384, 1385, 7, 102, 2, 2, 1385, 1386, 7, 72, 2, 2, 1386, 1387, 7, 99, 2, 2, 1387, 1388, 7, 110, 2, 2, 1388, 1389, 7, 110, 2, 2, 1389, 1390, 7, 100, 2, 2, 1390, 1391, 7, 99, 2, 2, 1391, 1392, 7, 101, 2, 2, 1392, 1393, 7, 109, 2, 2, 1393, 1394, 7, 80, 2, 2, 1394, 1395, 7, 99, 2, 2, 1395, 1396, 7, 111, 2, 2, 1396, 1397, 7, 103, 2, 2, 1397, 1398, 7, 75, 2, 2, 1398, 1399, 7, 70, 2, 2, 1399, 209, 3, 2, 2, 2, 1400, 1401, 7, 70, 2, 2, 1401, 1402, 7, 103, 2, 2, 1402, 1403, 7, 117, 2, 2, 1403, 1404, 7, 107, 2, 2, 1404, 1405, 7, 105, 2, 2, 1405, 1406, 7, 112, 2, 2, 1406, 1407, 7, 67, 2, 2, 1407, 1408, 7, 122, 2, 2, 1408, 1409, 7, 107, 2, 2, 1409, 1410, 7, 117, 2, 2, 1410, 211, 3, 2, 2, 2, 1411, 1412, 7, 67, 2, 2, 1412, 1413, 7, 122, 2, 2, 1413, 1414, 7, 107, 2, 2, 1414, 1415, 7, 117, 2, 2, 1415, 1416, 7, 88, 2, 2, 1416, 1417, 7, 99, 2, 2, 1417, 1418, 7, 110, 2, 2, 1418, 1419, 7, 119, 2, 2, 1419, 1420, 7, 103, 2, 2, 1420, 213, 3, 2, 2, 2, 1421, 1422, 7, 104, 2, 2, 1422, 1423, 7, 110, 2, 2, 1423, 1424, 7, 99, 2, 2, 1424, 1425, 7, 105, 2, 2, 1425, 215, 3, 2, 2, 2, 1426, 1427, 7, 110, 2, 2, 1427, 1428, 7, 113, 2, 2, 1428, 1429, 7, 101, 2, 2, 1429, 1430, 7, 99, 2, 2, 1430, 1431, 7, 118, 2, 2, 1431, 1432, 7, 107, 2, 2, 1432, 1433, 7, 113, 2, 2, 1433, 1434, 7, 112, 2, 2, 1434, 217, 3, 2, 2, 2, 1435, 1436, 7, 71, 2, 2, 1436, 1437, 7, 110, 2, 2, 1437, 1438, 7, 107, 2, 2, 1438, 1439, 7, 102, 2, 2, 1439, 1440, 7, 99, 2, 2, 1440, 1441, 7, 100, 2, 2, 1441, 1442, 7, 110, 2, 2, 1442, 1443, 7, 103, 2, 2, 1443, 1444, 7, 67, 2, 2, 1444, 1445, 7, 122, 2, 2, 1445, 1446, 7, 107, 2, 2, 1446, 1447, 7, 117, 2, 2, 1447, 1448, 7, 88, 2, 2, 1448, 1449, 7, 99, 2, 2, 1449, 1450, 7, 110, 2, 2, 1450, 1451, 7, 119, 2, 2, 1451, 1452, 7, 103, 2, 2, 1452, 1453, 7, 80, 2, 2, 1453, 1454, 7, 99, 2, 2, 1454, 1455, 7, 111, 2, 2, 1455, 1456, 7, 103, 2, 2, 1456, 219, 3, 2, 2, 2, 1457, 1458, 7, 81, 2, 2, 1458, 1459, 7, 110, 2, 2, 1459, 1460, 7, 102, 2, 2, 1460, 1461, 7, 103, 2, 2, 1461, 1462, 7, 116, 2, 2, 1462, 1463, 7, 85, 2, 2, 1463, 1464, 7, 107, 2, 2, 1464, 1465, 7, 100, 2, 2, 1465, 1466, 7, 110, 2, 2, 1466, 1467, 7, 107, 2, 2, 1467, 1468, 7, 112, 2, 2, 1468, 1469, 7, 105, 2, 2, 1469, 1470, 7, 72, 2, 2, 1470, 1471, 7, 113, 2, 2, 1471, 1472, 7, 112, 2, 2, 1472, 1473, 7, 118, 2, 2, 1473, 1474, 7, 67, 2, 2, 1474, 1475, 7, 118, 2, 2, 1475, 1476, 7, 118, 2, 2, 1476, 1477, 7, 116, 2, 2, 1477, 1478, 7, 107, 2, 2, 1478, 1479, 7, 100, 2, 2, 1479, 1480, 7, 119, 2, 2, 1480, 1481, 7, 118, 2, 2, 1481, 1482, 7, 103, 2, 2, 1482, 221, 3, 2, 2, 2, 1483, 1484, 7, 120, 2, 2, 1484, 1485, 7, 106, 2, 2, 1485, 1486, 7, 103, 2, 2, 1486, 1487, 7, 99, 2, 2, 1487, 223, 3, 2, 2, 2, 1488, 1489, 7, 88, 2, 2, 1489, 1490, 7, 103, 2, 2, 1490, 1491, 7, 116, 2, 2, 1491, 1492, 7, 118, 2, 2, 1492, 1493, 7, 86, 2, 2, 1493, 1494, 7, 123, 2, 2, 1494, 1495, 7, 114, 2, 2, 1495, 1496, 7, 113, 2, 2, 1496, 1497, 7, 67, 2, 2, 1497, 1498, 7, 117, 2, 2, 1498, 1499, 7, 101, 2, 2, 1499, 1500, 7, 103, 2, 2, 1500, 1501, 7, 112, 2, 2, 1501, 1502, 7, 102, 2, 2, 1502, 1503, 7, 103, 2, 2, 1503, 1504, 7, 116, 2, 2, 1504, 225, 3, 2, 2, 2, 1505, 1506, 7, 88, 2, 2, 1506, 1507, 7, 103, 2, 2, 1507, 1508, 7, 116, 2, 2, 1508, 1509, 7, 118, 2, 2, 1509, 1510, 7, 86, 2, 2, 1510, 1511, 7, 123, 2, 2, 1511, 1512, 7, 114, 2, 2, 1512, 1513, 7, 113, 2, 2, 1513, 1514, 7, 70, 2, 2, 1514, 1515, 7, 103, 2, 2, 1515, 1516, 7, 117, 2, 2, 1516, 1517, 7, 101, 2, 2, 1517, 1518, 7, 103, 2, 2, 1518, 1519, 7, 112, 2, 2, 1519, 1520, 7, 102, 2, 2, 1520, 1521, 7, 103, 2, 2, 1521, 1522, 7, 116, 2, 2, 1522, 227, 3, 2, 2, 2, 1523, 1524, 7, 88, 2, 2, 1524, 1525, 7, 103, 2, 2, 1525, 1526, 7, 116, 2, 2, 1526, 1527, 7, 118, 2, 2, 1527, 1528, 7, 86, 2, 2, 1528, 1529, 7, 123, 2, 2, 1529, 1530, 7, 114, 2, 2, 1530, 1531, 7, 113, 2, 2, 1531, 1532, 7, 78, 2, 2, 1532, 1533, 7, 107, 2, 2, 1533, 1534, 7, 112, 2, 2, 1534, 1535, 7, 103, 2, 2, 1535, 1536, 7, 73, 2, 2, 1536, 1537, 7, 99, 2, 2, 1537, 1538, 7, 114, 2, 2, 1538, 229, 3, 2, 2, 2, 1539, 1540, 7, 120, 2, 2, 1540, 1541, 7, 111, 2, 2, 1541, 1542, 7, 118, 2, 2, 1542, 1543, 7, 122, 2, 2, 1543, 231, 3, 2, 2, 2, 1544, 1545, 7, 88, 2, 2, 1545, 1546, 7, 103, 2, 2, 1546, 1547, 7, 116, 2, 2, 1547, 1548, 7, 118, 2, 2, 1548, 1549, 7, 81, 2, 2, 1549, 1550, 7, 116, 2, 2, 1550, 1551, 7, 107, 2, 2, 1551, 1552, 7, 105, 2, 2, 1552, 1553, 7, 107, 2, 2, 1553, 1554, 7, 112, 2, 2, 1554, 1555, 7, 91, 2, 2, 1555, 233, 3, 2, 2, 2, 1556, 1557, 7, 88, 2, 2, 1557, 1558, 7, 103, 2, 2, 1558, 1559, 7, 116, 2, 2, 1559, 1560, 7, 118, 2, 2, 1560, 1561, 7, 67, 2, 2, 1561, 1562, 7, 102, 2, 2, 1562, 1563, 7, 120, 2, 2, 1563, 1564, 7, 99, 2, 2, 1564, 1565, 7, 112, 2, 2, 1565, 1566, 7, 101, 2, 2, 1566, 1567, 7, 103, 2, 2, 1567, 1568, 7, 91, 2, 2, 1568, 235, 3, 2, 2, 2, 1569, 1570, 7, 125, 2, 2, 1570, 237, 3, 2, 2, 2, 1571, 1572, 7, 127, 2, 2, 1572, 239, 3, 2, 2, 2, 1573, 1574, 7, 93, 2, 2, 1574, 241, 3, 2, 2, 2, 1575, 1576, 7, 95, 2, 2, 1576, 243, 3, 2, 2, 2, 1577, 1578, 7, 47, 2, 2, 1578, 245, 3, 2, 2, 2, 1579, 1580, 7, 61, 2, 2, 1580, 247, 3, 2, 2, 2, 1581, 1582, 7, 63, 2, 2, 1582, 249, 3, 2, 2, 2, 1583, 1584, 7, 41, 2, 2, 1584, 251, 3, 2, 2, 2, 1585, 1586, 7, 46, 2, 2, 1586, 253, 3, 2, 2, 2, 1587, 1588, 7, 36, 2, 2, 1588, 1589, 3, 2, 2, 2, 1589, 1590, 8, 125, 5, 2, 1590, 255, 3, 2, 2, 2, 1591, 1592, 9, 4, 2, 2, 1592, 257, 3, 2, 2, 2, 1593, 1596, 5, 256, 126, 2, 1594, 1596, 9, 5, 2, 2, 1595, 1593, 3, 2, 2, 2, 1595, 1594, 3, 2, 2, 2, 1596, 259, 3, 2, 2, 2, 1597, 1600, 5, 258, 127, 2, 1598, 1600, 7, 47, 2, 2, 1599, 1597, 3, 2, 2, 2, 1599, 1598, 3, 2, 2, 2, 1600, 261, 3, 2, 2, 2, 1601, 1602, 7, 66, 2, 2, 1602, 1606, 5, 256, 126, 2, 1603, 1605, 5, 260, 128, 2, 1604, 1603, 3, 2, 2, 2, 1605, 1608, 3, 2, 2, 2, 1606, 1604, 3, 2, 2, 2, 1606, 1607, 3, 2, 2, 2, 1607, 263, 3, 2, 2, 2, 1608, 1606, 3, 2, 2, 2, 1609, 1611, 7, 94, 2, 2, 1610, 1612, 4, 50, 59, 2, 1611, 1610, 3, 2, 2, 2, 1612, 1613, 3, 2, 2, 2, 1613, 1611, 3, 2, 2, 2, 1613, 1614, 3, 2, 2, 2, 1614, 265, 3, 2, 2, 2, 1615, 1618, 5, 260, 128, 2, 1616, 1618, 9, 6, 2, 2, 1617, 1615, 3, 2, 2, 2, 1617, 1616, 3, 2, 2, 2, 1618, 267, 3, 2, 2, 2, 1619, 1620, 7, 94, 2, 2, 1620, 1624, 5, 256, 126, 2, 1621, 1623, 5, 266, 131, 2, 1622, 1621, 3, 2, 2, 2, 1623, 1626, 3, 2, 2, 2, 1624, 1622, 3, 2, 2, 2, 1624, 1625, 3, 2, 2, 2, 1625, 269, 3, 2, 2, 2, 1626, 1624, 3, 2, 2, 2, 1627, 1631, 5, 256, 126, 2, 1628, 1630, 5, 258, 127, 2, 1629, 1628, 3, 2, 2, 2, 1630, 1633, 3, 2, 2, 2, 1631, 1629, 3, 2, 2, 2, 1631, 1632, 3, 2, 2, 2, 1632, 271, 3, 2, 2, 2, 1633, 1631, 3, 2, 2, 2, 1634, 1638, 5, 256, 126, 2, 1635, 1637, 5, 266, 131, 2, 1636, 1635, 3, 2, 2, 2, 1637, 1640, 3, 2, 2, 2, 1638, 1636, 3, 2, 2, 2, 1638, 1639, 3, 2, 2, 2, 1639, 273, 3, 2, 2, 2, 1640, 1638, 3, 2, 2, 2, 1641, 1643, 7, 47, 2, 2, 1642, 1641, 3, 2, 2, 2, 1642, 1643, 3, 2, 2, 2, 1643, 1645, 3, 2, 2, 2, 1644, 1646, 4, 50, 59, 2, 1645, 1644, 3, 2, 2, 2, 1646, 1647, 3, 2, 2, 2, 1647, 1645, 3, 2, 2, 2, 1647, 1648, 3, 2, 2, 2, 1648, 1649, 3, 2, 2, 2, 1649, 1651, 7, 48, 2, 2, 1650, 1652, 4, 50, 59, 2, 1651, 1650, 3, 2, 2, 2, 1652, 1653, 3, 2, 2, 2, 1653, 1651, 3, 2, 2, 2, 1653, 1654, 3, 2, 2, 2, 1654, 275, 3, 2, 2, 2, 1655, 1656, 7, 50, 2, 2, 1656, 1657, 7, 122, 2, 2, 1657, 1659, 3, 2, 2, 2, 1658, 1660, 9, 7, 2, 2, 1659, 1658, 3, 2, 2, 2, 1660, 1661, 3, 2, 2, 2, 1661, 1659, 3, 2, 2, 2, 1661, 1662, 3, 2, 2, 2, 1662, 277, 3, 2, 2, 2, 1663, 1665, 7, 50, 2, 2, 1664, 1666, 4, 50, 57, 2, 1665, 1664, 3, 2, 2, 2, 1666, 1667, 3, 2, 2, 2, 1667, 1665, 3, 2, 2, 2, 1667, 1668, 3, 2, 2, 2, 1668, 279, 3, 2, 2, 2, 1669, 1671, 7, 47, 2, 2, 1670, 1669, 3, 2, 2, 2, 1670, 1671, 3, 2, 2, 2, 1671, 1680, 3, 2, 2, 2, 1672, 1676, 4, 51, 59, 2, 1673, 1675, 4, 50, 59, 2, 1674, 1673, 3, 2, 2, 2, 1675, 1678, 3, 2, 2, 2, 1676, 1674, 3, 2, 2, 2, 1676, 1677, 3, 2, 2, 2, 1677, 1681, 3, 2, 2, 2, 1678, 1676, 3, 2, 2, 2, 1679, 1681, 7, 50, 2, 2, 1680, 1672, 3, 2, 2, 2, 1680, 1679, 3, 2, 2, 2, 1681, 281, 3, 2, 2, 2, 1682, 1683, 9, 8, 2, 2, 1683, 283, 3, 2, 2, 2, 1684, 1687, 5, 282, 139, 2, 1685, 1687, 9, 9, 2, 2, 1686, 1684, 3, 2, 2, 2, 1686, 1685, 3, 2, 2, 2, 1687, 285, 3, 2, 2, 2, 1688, 1690, 5, 282, 139, 2, 1689, 1691, 5, 284, 140, 2, 1690, 1689, 3, 2, 2, 2, 1690, 1691, 3, 2, 2, 2, 1691, 287, 3, 2, 2, 2, 1692, 1694, 9, 3, 2, 2, 1693, 1692, 3, 2, 2, 2, 1694, 1695, 3, 2, 2, 2, 1695, 1693, 3, 2, 2, 2, 1695, 1696, 3, 2, 2, 2, 1696, 1697, 3, 2, 2, 2, 1697, 1698, 8, 142, 3, 2, 1698, 289, 3, 2, 2, 2, 1699, 1703, 5, 282, 139, 2, 1700, 1702, 5, 284, 140, 2, 1701, 1700, 3, 2, 2, 2, 1702, 1705, 3, 2, 2, 2, 1703, 1701, 3, 2, 2, 2, 1703, 1704, 3, 2, 2, 2, 1704, 1706, 3, 2, 2, 2, 1705, 1703, 3, 2, 2, 2, 1706, 1707, 8, 143, 6, 2, 1707, 291, 3, 2, 2, 2, 1708, 1709, 7, 125, 2, 2, 1709, 1710, 3, 2, 2, 2, 1710, 1711, 8, 144, 7, 2, 1711, 293, 3, 2, 2, 2, 1712, 1714, 7, 15, 2, 2, 1713, 1712, 3, 2, 2, 2, 1713, 1714, 3, 2, 2, 2, 1714, 1715, 3, 2, 2, 2, 1715, 1716, 7, 12, 2, 2, 1716, 1717, 7, 127, 2, 2, 1717, 1721, 3, 2, 2, 2, 1718, 1720, 9, 10, 2, 2, 1719, 1718, 3, 2, 2, 2, 1720, 1723, 3, 2, 2, 2, 1721, 1719, 3, 2, 2, 2, 1721, 1722, 3, 2, 2, 2, 1722, 1724, 3, 2, 2, 2, 1723, 1721, 3, 2, 2, 2, 1724, 1728, 5, 282, 139, 2, 1725, 1727, 5, 284, 140, 2, 1726, 1725, 3, 2, 2, 2, 1727, 1730, 3, 2, 2, 2, 1728, 1726, 3, 2, 2, 2, 1728, 1729, 3, 2, 2, 2, 1729, 1734, 3, 2, 2, 2, 1730, 1728, 3, 2, 2, 2, 1731, 1733, 9, 10, 2, 2, 1732, 1731, 3, 2, 2, 2, 1733, 1736, 3, 2, 2, 2, 1734, 1732, 3, 2, 2, 2, 1734, 1735, 3, 2, 2, 2, 1735, 1737, 3, 2, 2, 2, 1736, 1734, 3, 2, 2, 2, 1737, 1738, 7, 61, 2, 2, 1738, 1739, 6, 145, 2, 2, 1739, 1740, 3, 2, 2, 2, 1740, 1741, 8, 145, 8, 2, 1741, 295, 3, 2, 2, 2, 1742, 1744, 7, 15, 2, 2, 1743, 1742, 3, 2, 2, 2, 1743, 1744, 3, 2, 2, 2, 1744, 1745, 3, 2, 2, 2, 1745, 1749, 7, 12, 2, 2, 1746, 1748, 10, 2, 2, 2, 1747, 1746, 3, 2, 2, 2, 1748, 1751, 3, 2, 2, 2, 1749, 1747, 3, 2, 2, 2, 1749, 1750, 3, 2, 2, 2, 1750, 297, 3, 2, 2, 2, 1751, 1749, 3, 2, 2, 2, 1752, 1754, 9, 3, 2, 2, 1753, 1752, 3, 2, 2, 2, 1754, 1755, 3, 2, 2, 2, 1755, 1753, 3, 2, 2, 2, 1755, 1756, 3, 2, 2, 2, 1756, 1757, 3, 2, 2, 2, 1757, 1758, 8, 147, 3, 2, 1758, 299, 3, 2, 2, 2, 1759, 1760, 7, 42, 2, 2, 1760, 1761, 3, 2, 2, 2, 1761, 1762, 8, 148, 9, 2, 1762, 301, 3, 2, 2, 2, 1763, 1765, 10, 11, 2, 2, 1764, 1763, 3, 2, 2, 2, 1765, 1766, 3, 2, 2, 2, 1766, 1764, 3, 2, 2, 2, 1766, 1767, 3, 2, 2, 2, 1767, 303, 3, 2, 2, 2, 1768, 1769, 7, 43, 2, 2, 1769, 1770, 3, 2, 2, 2, 1770, 1771, 8, 150, 8, 2, 1771, 305, 3, 2, 2, 2, 1772, 1774, 10, 12, 2, 2, 1773, 1772, 3, 2, 2, 2, 1774, 1777, 3, 2, 2, 2, 1775, 1773, 3, 2, 2, 2, 1775, 1776, 3, 2, 2, 2, 1776, 307, 3, 2, 2, 2, 1777, 1775, 3, 2, 2, 2, 1778, 1779, 7, 36, 2, 2, 1779, 1780, 3, 2, 2, 2, 1780, 1781, 8, 152, 8, 2, 1781, 309, 3, 2, 2, 2, 39, 2, 3, 4, 5, 6, 7, 333, 341, 1595, 1599, 1606, 1613, 1617, 1624, 1631, 1638, 1642, 1647, 1653, 1661, 1667, 1670, 1676, 1680, 1686, 1690, 1695, 1703, 1713, 1721, 1728, 1734, 1743, 1749, 1755, 1766, 1775, 10, 7, 3, 2, 8, 2, 2, 7, 5, 2, 7, 7, 2, 3, 143, 2, 4, 4, 2, 6, 2, 2, 4, 6, 2] \ No newline at end of file +[4, 0, 145, 1780, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 2, 114, 7, 114, 2, 115, 7, 115, 2, 116, 7, 116, 2, 117, 7, 117, 2, 118, 7, 118, 2, 119, 7, 119, 2, 120, 7, 120, 2, 121, 7, 121, 2, 122, 7, 122, 2, 123, 7, 123, 2, 124, 7, 124, 2, 125, 7, 125, 2, 126, 7, 126, 2, 127, 7, 127, 2, 128, 7, 128, 2, 129, 7, 129, 2, 130, 7, 130, 2, 131, 7, 131, 2, 132, 7, 132, 2, 133, 7, 133, 2, 134, 7, 134, 2, 135, 7, 135, 2, 136, 7, 136, 2, 137, 7, 137, 2, 138, 7, 138, 2, 139, 7, 139, 2, 140, 7, 140, 2, 141, 7, 141, 2, 142, 7, 142, 2, 143, 7, 143, 2, 144, 7, 144, 2, 145, 7, 145, 2, 146, 7, 146, 2, 147, 7, 147, 2, 148, 7, 148, 2, 149, 7, 149, 2, 150, 7, 150, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 5, 2, 330, 8, 2, 10, 2, 12, 2, 333, 9, 2, 1, 2, 1, 2, 1, 3, 4, 3, 338, 8, 3, 11, 3, 12, 3, 339, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 114, 1, 114, 1, 115, 1, 115, 1, 116, 1, 116, 1, 117, 1, 117, 1, 118, 1, 118, 1, 119, 1, 119, 1, 120, 1, 120, 1, 121, 1, 121, 1, 122, 1, 122, 1, 123, 1, 123, 1, 123, 1, 123, 1, 124, 1, 124, 1, 125, 1, 125, 3, 125, 1594, 8, 125, 1, 126, 1, 126, 3, 126, 1598, 8, 126, 1, 127, 1, 127, 1, 127, 5, 127, 1603, 8, 127, 10, 127, 12, 127, 1606, 9, 127, 1, 128, 1, 128, 4, 128, 1610, 8, 128, 11, 128, 12, 128, 1611, 1, 129, 1, 129, 3, 129, 1616, 8, 129, 1, 130, 1, 130, 1, 130, 5, 130, 1621, 8, 130, 10, 130, 12, 130, 1624, 9, 130, 1, 131, 1, 131, 5, 131, 1628, 8, 131, 10, 131, 12, 131, 1631, 9, 131, 1, 132, 1, 132, 5, 132, 1635, 8, 132, 10, 132, 12, 132, 1638, 9, 132, 1, 133, 3, 133, 1641, 8, 133, 1, 133, 4, 133, 1644, 8, 133, 11, 133, 12, 133, 1645, 1, 133, 1, 133, 4, 133, 1650, 8, 133, 11, 133, 12, 133, 1651, 1, 134, 1, 134, 1, 134, 1, 134, 4, 134, 1658, 8, 134, 11, 134, 12, 134, 1659, 1, 135, 1, 135, 4, 135, 1664, 8, 135, 11, 135, 12, 135, 1665, 1, 136, 3, 136, 1669, 8, 136, 1, 136, 1, 136, 5, 136, 1673, 8, 136, 10, 136, 12, 136, 1676, 9, 136, 1, 136, 3, 136, 1679, 8, 136, 1, 137, 1, 137, 1, 138, 1, 138, 3, 138, 1685, 8, 138, 1, 139, 1, 139, 3, 139, 1689, 8, 139, 1, 140, 4, 140, 1692, 8, 140, 11, 140, 12, 140, 1693, 1, 140, 1, 140, 1, 141, 1, 141, 5, 141, 1700, 8, 141, 10, 141, 12, 141, 1703, 9, 141, 1, 141, 1, 141, 1, 142, 1, 142, 1, 142, 1, 142, 1, 143, 3, 143, 1712, 8, 143, 1, 143, 1, 143, 1, 143, 1, 143, 5, 143, 1718, 8, 143, 10, 143, 12, 143, 1721, 9, 143, 1, 143, 1, 143, 5, 143, 1725, 8, 143, 10, 143, 12, 143, 1728, 9, 143, 1, 143, 5, 143, 1731, 8, 143, 10, 143, 12, 143, 1734, 9, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 144, 3, 144, 1742, 8, 144, 1, 144, 1, 144, 5, 144, 1746, 8, 144, 10, 144, 12, 144, 1749, 9, 144, 1, 145, 4, 145, 1752, 8, 145, 11, 145, 12, 145, 1753, 1, 145, 1, 145, 1, 146, 1, 146, 1, 146, 1, 146, 1, 147, 4, 147, 1763, 8, 147, 11, 147, 12, 147, 1764, 1, 148, 1, 148, 1, 148, 1, 148, 1, 149, 5, 149, 1772, 8, 149, 10, 149, 12, 149, 1775, 9, 149, 1, 150, 1, 150, 1, 150, 1, 150, 0, 0, 151, 6, 1, 8, 2, 10, 3, 12, 4, 14, 5, 16, 6, 18, 7, 20, 8, 22, 9, 24, 10, 26, 11, 28, 12, 30, 13, 32, 14, 34, 15, 36, 16, 38, 17, 40, 18, 42, 19, 44, 20, 46, 21, 48, 22, 50, 23, 52, 24, 54, 25, 56, 26, 58, 27, 60, 28, 62, 29, 64, 30, 66, 31, 68, 32, 70, 33, 72, 34, 74, 35, 76, 36, 78, 37, 80, 38, 82, 39, 84, 40, 86, 41, 88, 42, 90, 43, 92, 44, 94, 45, 96, 46, 98, 47, 100, 48, 102, 49, 104, 50, 106, 51, 108, 52, 110, 53, 112, 54, 114, 55, 116, 56, 118, 57, 120, 58, 122, 59, 124, 60, 126, 61, 128, 62, 130, 63, 132, 64, 134, 65, 136, 66, 138, 67, 140, 68, 142, 69, 144, 70, 146, 71, 148, 72, 150, 73, 152, 74, 154, 75, 156, 76, 158, 77, 160, 78, 162, 79, 164, 80, 166, 81, 168, 82, 170, 83, 172, 84, 174, 85, 176, 86, 178, 87, 180, 88, 182, 89, 184, 90, 186, 91, 188, 92, 190, 93, 192, 94, 194, 95, 196, 96, 198, 97, 200, 98, 202, 99, 204, 100, 206, 101, 208, 102, 210, 103, 212, 104, 214, 105, 216, 106, 218, 107, 220, 108, 222, 109, 224, 110, 226, 111, 228, 112, 230, 113, 232, 114, 234, 115, 236, 116, 238, 117, 240, 118, 242, 119, 244, 120, 246, 121, 248, 122, 250, 123, 252, 124, 254, 0, 256, 0, 258, 0, 260, 125, 262, 126, 264, 0, 266, 127, 268, 128, 270, 129, 272, 130, 274, 131, 276, 132, 278, 133, 280, 0, 282, 0, 284, 134, 286, 135, 288, 136, 290, 137, 292, 138, 294, 139, 296, 140, 298, 141, 300, 142, 302, 143, 304, 144, 306, 145, 6, 0, 1, 2, 3, 4, 5, 11, 2, 0, 10, 10, 13, 13, 3, 0, 9, 10, 13, 13, 32, 32, 3, 0, 65, 90, 95, 95, 97, 122, 2, 0, 46, 46, 48, 57, 5, 0, 42, 43, 58, 58, 94, 94, 124, 124, 126, 126, 3, 0, 48, 57, 65, 70, 97, 102, 10, 0, 33, 33, 36, 38, 42, 43, 46, 46, 58, 58, 63, 63, 65, 90, 94, 122, 124, 124, 126, 126, 2, 0, 45, 45, 48, 57, 2, 0, 9, 9, 32, 32, 1, 0, 41, 41, 1, 0, 34, 34, 1799, 0, 6, 1, 0, 0, 0, 0, 8, 1, 0, 0, 0, 0, 10, 1, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 14, 1, 0, 0, 0, 0, 16, 1, 0, 0, 0, 0, 18, 1, 0, 0, 0, 0, 20, 1, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 24, 1, 0, 0, 0, 0, 26, 1, 0, 0, 0, 0, 28, 1, 0, 0, 0, 0, 30, 1, 0, 0, 0, 0, 32, 1, 0, 0, 0, 0, 34, 1, 0, 0, 0, 0, 36, 1, 0, 0, 0, 0, 38, 1, 0, 0, 0, 0, 40, 1, 0, 0, 0, 0, 42, 1, 0, 0, 0, 0, 44, 1, 0, 0, 0, 0, 46, 1, 0, 0, 0, 0, 48, 1, 0, 0, 0, 0, 50, 1, 0, 0, 0, 0, 52, 1, 0, 0, 0, 0, 54, 1, 0, 0, 0, 0, 56, 1, 0, 0, 0, 0, 58, 1, 0, 0, 0, 0, 60, 1, 0, 0, 0, 0, 62, 1, 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 66, 1, 0, 0, 0, 0, 68, 1, 0, 0, 0, 0, 70, 1, 0, 0, 0, 0, 72, 1, 0, 0, 0, 0, 74, 1, 0, 0, 0, 0, 76, 1, 0, 0, 0, 0, 78, 1, 0, 0, 0, 0, 80, 1, 0, 0, 0, 0, 82, 1, 0, 0, 0, 0, 84, 1, 0, 0, 0, 0, 86, 1, 0, 0, 0, 0, 88, 1, 0, 0, 0, 0, 90, 1, 0, 0, 0, 0, 92, 1, 0, 0, 0, 0, 94, 1, 0, 0, 0, 0, 96, 1, 0, 0, 0, 0, 98, 1, 0, 0, 0, 0, 100, 1, 0, 0, 0, 0, 102, 1, 0, 0, 0, 0, 104, 1, 0, 0, 0, 0, 106, 1, 0, 0, 0, 0, 108, 1, 0, 0, 0, 0, 110, 1, 0, 0, 0, 0, 112, 1, 0, 0, 0, 0, 114, 1, 0, 0, 0, 0, 116, 1, 0, 0, 0, 0, 118, 1, 0, 0, 0, 0, 120, 1, 0, 0, 0, 0, 122, 1, 0, 0, 0, 0, 124, 1, 0, 0, 0, 0, 126, 1, 0, 0, 0, 0, 128, 1, 0, 0, 0, 0, 130, 1, 0, 0, 0, 0, 132, 1, 0, 0, 0, 0, 134, 1, 0, 0, 0, 0, 136, 1, 0, 0, 0, 0, 138, 1, 0, 0, 0, 0, 140, 1, 0, 0, 0, 0, 142, 1, 0, 0, 0, 0, 144, 1, 0, 0, 0, 0, 146, 1, 0, 0, 0, 0, 148, 1, 0, 0, 0, 0, 150, 1, 0, 0, 0, 0, 152, 1, 0, 0, 0, 0, 154, 1, 0, 0, 0, 0, 156, 1, 0, 0, 0, 0, 158, 1, 0, 0, 0, 0, 160, 1, 0, 0, 0, 0, 162, 1, 0, 0, 0, 0, 164, 1, 0, 0, 0, 0, 166, 1, 0, 0, 0, 0, 168, 1, 0, 0, 0, 0, 170, 1, 0, 0, 0, 0, 172, 1, 0, 0, 0, 0, 174, 1, 0, 0, 0, 0, 176, 1, 0, 0, 0, 0, 178, 1, 0, 0, 0, 0, 180, 1, 0, 0, 0, 0, 182, 1, 0, 0, 0, 0, 184, 1, 0, 0, 0, 0, 186, 1, 0, 0, 0, 0, 188, 1, 0, 0, 0, 0, 190, 1, 0, 0, 0, 0, 192, 1, 0, 0, 0, 0, 194, 1, 0, 0, 0, 0, 196, 1, 0, 0, 0, 0, 198, 1, 0, 0, 0, 0, 200, 1, 0, 0, 0, 0, 202, 1, 0, 0, 0, 0, 204, 1, 0, 0, 0, 0, 206, 1, 0, 0, 0, 0, 208, 1, 0, 0, 0, 0, 210, 1, 0, 0, 0, 0, 212, 1, 0, 0, 0, 0, 214, 1, 0, 0, 0, 0, 216, 1, 0, 0, 0, 0, 218, 1, 0, 0, 0, 0, 220, 1, 0, 0, 0, 0, 222, 1, 0, 0, 0, 0, 224, 1, 0, 0, 0, 0, 226, 1, 0, 0, 0, 0, 228, 1, 0, 0, 0, 0, 230, 1, 0, 0, 0, 0, 232, 1, 0, 0, 0, 0, 234, 1, 0, 0, 0, 0, 236, 1, 0, 0, 0, 0, 238, 1, 0, 0, 0, 0, 240, 1, 0, 0, 0, 0, 242, 1, 0, 0, 0, 0, 244, 1, 0, 0, 0, 0, 246, 1, 0, 0, 0, 0, 248, 1, 0, 0, 0, 0, 250, 1, 0, 0, 0, 0, 252, 1, 0, 0, 0, 0, 260, 1, 0, 0, 0, 0, 262, 1, 0, 0, 0, 0, 266, 1, 0, 0, 0, 0, 268, 1, 0, 0, 0, 0, 270, 1, 0, 0, 0, 0, 272, 1, 0, 0, 0, 0, 274, 1, 0, 0, 0, 0, 276, 1, 0, 0, 0, 0, 278, 1, 0, 0, 0, 0, 284, 1, 0, 0, 0, 1, 286, 1, 0, 0, 0, 1, 288, 1, 0, 0, 0, 1, 290, 1, 0, 0, 0, 2, 292, 1, 0, 0, 0, 2, 294, 1, 0, 0, 0, 3, 296, 1, 0, 0, 0, 3, 298, 1, 0, 0, 0, 4, 300, 1, 0, 0, 0, 4, 302, 1, 0, 0, 0, 5, 304, 1, 0, 0, 0, 5, 306, 1, 0, 0, 0, 6, 308, 1, 0, 0, 0, 8, 315, 1, 0, 0, 0, 10, 327, 1, 0, 0, 0, 12, 337, 1, 0, 0, 0, 14, 343, 1, 0, 0, 0, 16, 353, 1, 0, 0, 0, 18, 361, 1, 0, 0, 0, 20, 367, 1, 0, 0, 0, 22, 374, 1, 0, 0, 0, 24, 383, 1, 0, 0, 0, 26, 398, 1, 0, 0, 0, 28, 407, 1, 0, 0, 0, 30, 414, 1, 0, 0, 0, 32, 425, 1, 0, 0, 0, 34, 433, 1, 0, 0, 0, 36, 445, 1, 0, 0, 0, 38, 462, 1, 0, 0, 0, 40, 478, 1, 0, 0, 0, 42, 490, 1, 0, 0, 0, 44, 510, 1, 0, 0, 0, 46, 529, 1, 0, 0, 0, 48, 541, 1, 0, 0, 0, 50, 553, 1, 0, 0, 0, 52, 566, 1, 0, 0, 0, 54, 579, 1, 0, 0, 0, 56, 592, 1, 0, 0, 0, 58, 594, 1, 0, 0, 0, 60, 596, 1, 0, 0, 0, 62, 606, 1, 0, 0, 0, 64, 611, 1, 0, 0, 0, 66, 618, 1, 0, 0, 0, 68, 625, 1, 0, 0, 0, 70, 636, 1, 0, 0, 0, 72, 640, 1, 0, 0, 0, 74, 651, 1, 0, 0, 0, 76, 656, 1, 0, 0, 0, 78, 659, 1, 0, 0, 0, 80, 664, 1, 0, 0, 0, 82, 673, 1, 0, 0, 0, 84, 677, 1, 0, 0, 0, 86, 688, 1, 0, 0, 0, 88, 701, 1, 0, 0, 0, 90, 714, 1, 0, 0, 0, 92, 732, 1, 0, 0, 0, 94, 756, 1, 0, 0, 0, 96, 773, 1, 0, 0, 0, 98, 792, 1, 0, 0, 0, 100, 802, 1, 0, 0, 0, 102, 815, 1, 0, 0, 0, 104, 828, 1, 0, 0, 0, 106, 835, 1, 0, 0, 0, 108, 845, 1, 0, 0, 0, 110, 860, 1, 0, 0, 0, 112, 865, 1, 0, 0, 0, 114, 875, 1, 0, 0, 0, 116, 883, 1, 0, 0, 0, 118, 888, 1, 0, 0, 0, 120, 897, 1, 0, 0, 0, 122, 901, 1, 0, 0, 0, 124, 914, 1, 0, 0, 0, 126, 919, 1, 0, 0, 0, 128, 924, 1, 0, 0, 0, 130, 946, 1, 0, 0, 0, 132, 967, 1, 0, 0, 0, 134, 992, 1, 0, 0, 0, 136, 1016, 1, 0, 0, 0, 138, 1021, 1, 0, 0, 0, 140, 1035, 1, 0, 0, 0, 142, 1042, 1, 0, 0, 0, 144, 1061, 1, 0, 0, 0, 146, 1082, 1, 0, 0, 0, 148, 1087, 1, 0, 0, 0, 150, 1100, 1, 0, 0, 0, 152, 1105, 1, 0, 0, 0, 154, 1114, 1, 0, 0, 0, 156, 1124, 1, 0, 0, 0, 158, 1132, 1, 0, 0, 0, 160, 1144, 1, 0, 0, 0, 162, 1149, 1, 0, 0, 0, 164, 1156, 1, 0, 0, 0, 166, 1161, 1, 0, 0, 0, 168, 1168, 1, 0, 0, 0, 170, 1175, 1, 0, 0, 0, 172, 1187, 1, 0, 0, 0, 174, 1199, 1, 0, 0, 0, 176, 1206, 1, 0, 0, 0, 178, 1219, 1, 0, 0, 0, 180, 1233, 1, 0, 0, 0, 182, 1245, 1, 0, 0, 0, 184, 1255, 1, 0, 0, 0, 186, 1266, 1, 0, 0, 0, 188, 1274, 1, 0, 0, 0, 190, 1284, 1, 0, 0, 0, 192, 1296, 1, 0, 0, 0, 194, 1307, 1, 0, 0, 0, 196, 1314, 1, 0, 0, 0, 198, 1327, 1, 0, 0, 0, 200, 1341, 1, 0, 0, 0, 202, 1353, 1, 0, 0, 0, 204, 1358, 1, 0, 0, 0, 206, 1377, 1, 0, 0, 0, 208, 1398, 1, 0, 0, 0, 210, 1409, 1, 0, 0, 0, 212, 1419, 1, 0, 0, 0, 214, 1424, 1, 0, 0, 0, 216, 1433, 1, 0, 0, 0, 218, 1455, 1, 0, 0, 0, 220, 1481, 1, 0, 0, 0, 222, 1486, 1, 0, 0, 0, 224, 1503, 1, 0, 0, 0, 226, 1521, 1, 0, 0, 0, 228, 1537, 1, 0, 0, 0, 230, 1542, 1, 0, 0, 0, 232, 1554, 1, 0, 0, 0, 234, 1567, 1, 0, 0, 0, 236, 1569, 1, 0, 0, 0, 238, 1571, 1, 0, 0, 0, 240, 1573, 1, 0, 0, 0, 242, 1575, 1, 0, 0, 0, 244, 1577, 1, 0, 0, 0, 246, 1579, 1, 0, 0, 0, 248, 1581, 1, 0, 0, 0, 250, 1583, 1, 0, 0, 0, 252, 1585, 1, 0, 0, 0, 254, 1589, 1, 0, 0, 0, 256, 1593, 1, 0, 0, 0, 258, 1597, 1, 0, 0, 0, 260, 1599, 1, 0, 0, 0, 262, 1607, 1, 0, 0, 0, 264, 1615, 1, 0, 0, 0, 266, 1617, 1, 0, 0, 0, 268, 1625, 1, 0, 0, 0, 270, 1632, 1, 0, 0, 0, 272, 1640, 1, 0, 0, 0, 274, 1653, 1, 0, 0, 0, 276, 1661, 1, 0, 0, 0, 278, 1668, 1, 0, 0, 0, 280, 1680, 1, 0, 0, 0, 282, 1684, 1, 0, 0, 0, 284, 1686, 1, 0, 0, 0, 286, 1691, 1, 0, 0, 0, 288, 1697, 1, 0, 0, 0, 290, 1706, 1, 0, 0, 0, 292, 1711, 1, 0, 0, 0, 294, 1741, 1, 0, 0, 0, 296, 1751, 1, 0, 0, 0, 298, 1757, 1, 0, 0, 0, 300, 1762, 1, 0, 0, 0, 302, 1766, 1, 0, 0, 0, 304, 1773, 1, 0, 0, 0, 306, 1776, 1, 0, 0, 0, 308, 309, 5, 97, 0, 0, 309, 310, 5, 110, 0, 0, 310, 311, 5, 111, 0, 0, 311, 312, 5, 110, 0, 0, 312, 313, 1, 0, 0, 0, 313, 314, 6, 0, 0, 0, 314, 7, 1, 0, 0, 0, 315, 316, 5, 97, 0, 0, 316, 317, 5, 110, 0, 0, 317, 318, 5, 111, 0, 0, 318, 319, 5, 110, 0, 0, 319, 320, 5, 121, 0, 0, 320, 321, 5, 109, 0, 0, 321, 322, 5, 111, 0, 0, 322, 323, 5, 117, 0, 0, 323, 324, 5, 115, 0, 0, 324, 325, 1, 0, 0, 0, 325, 326, 6, 1, 0, 0, 326, 9, 1, 0, 0, 0, 327, 331, 5, 35, 0, 0, 328, 330, 8, 0, 0, 0, 329, 328, 1, 0, 0, 0, 330, 333, 1, 0, 0, 0, 331, 329, 1, 0, 0, 0, 331, 332, 1, 0, 0, 0, 332, 334, 1, 0, 0, 0, 333, 331, 1, 0, 0, 0, 334, 335, 6, 2, 1, 0, 335, 11, 1, 0, 0, 0, 336, 338, 7, 1, 0, 0, 337, 336, 1, 0, 0, 0, 338, 339, 1, 0, 0, 0, 339, 337, 1, 0, 0, 0, 339, 340, 1, 0, 0, 0, 340, 341, 1, 0, 0, 0, 341, 342, 6, 3, 1, 0, 342, 13, 1, 0, 0, 0, 343, 344, 5, 105, 0, 0, 344, 345, 5, 110, 0, 0, 345, 346, 5, 99, 0, 0, 346, 347, 5, 108, 0, 0, 347, 348, 5, 117, 0, 0, 348, 349, 5, 100, 0, 0, 349, 350, 5, 101, 0, 0, 350, 351, 1, 0, 0, 0, 351, 352, 6, 4, 2, 0, 352, 15, 1, 0, 0, 0, 353, 354, 5, 102, 0, 0, 354, 355, 5, 101, 0, 0, 355, 356, 5, 97, 0, 0, 356, 357, 5, 116, 0, 0, 357, 358, 5, 117, 0, 0, 358, 359, 5, 114, 0, 0, 359, 360, 5, 101, 0, 0, 360, 17, 1, 0, 0, 0, 361, 362, 5, 116, 0, 0, 362, 363, 5, 97, 0, 0, 363, 364, 5, 98, 0, 0, 364, 365, 5, 108, 0, 0, 365, 366, 5, 101, 0, 0, 366, 19, 1, 0, 0, 0, 367, 368, 5, 115, 0, 0, 368, 369, 5, 99, 0, 0, 369, 370, 5, 114, 0, 0, 370, 371, 5, 105, 0, 0, 371, 372, 5, 112, 0, 0, 372, 373, 5, 116, 0, 0, 373, 21, 1, 0, 0, 0, 374, 375, 5, 108, 0, 0, 375, 376, 5, 97, 0, 0, 376, 377, 5, 110, 0, 0, 377, 378, 5, 103, 0, 0, 378, 379, 5, 117, 0, 0, 379, 380, 5, 97, 0, 0, 380, 381, 5, 103, 0, 0, 381, 382, 5, 101, 0, 0, 382, 23, 1, 0, 0, 0, 383, 384, 5, 108, 0, 0, 384, 385, 5, 97, 0, 0, 385, 386, 5, 110, 0, 0, 386, 387, 5, 103, 0, 0, 387, 388, 5, 117, 0, 0, 388, 389, 5, 97, 0, 0, 389, 390, 5, 103, 0, 0, 390, 391, 5, 101, 0, 0, 391, 392, 5, 115, 0, 0, 392, 393, 5, 121, 0, 0, 393, 394, 5, 115, 0, 0, 394, 395, 5, 116, 0, 0, 395, 396, 5, 101, 0, 0, 396, 397, 5, 109, 0, 0, 397, 25, 1, 0, 0, 0, 398, 399, 5, 115, 0, 0, 399, 400, 5, 117, 0, 0, 400, 401, 5, 98, 0, 0, 401, 402, 5, 116, 0, 0, 402, 403, 5, 97, 0, 0, 403, 404, 5, 98, 0, 0, 404, 405, 5, 108, 0, 0, 405, 406, 5, 101, 0, 0, 406, 27, 1, 0, 0, 0, 407, 408, 5, 108, 0, 0, 408, 409, 5, 111, 0, 0, 409, 410, 5, 111, 0, 0, 410, 411, 5, 107, 0, 0, 411, 412, 5, 117, 0, 0, 412, 413, 5, 112, 0, 0, 413, 29, 1, 0, 0, 0, 414, 415, 5, 108, 0, 0, 415, 416, 5, 111, 0, 0, 416, 417, 5, 111, 0, 0, 417, 418, 5, 107, 0, 0, 418, 419, 5, 117, 0, 0, 419, 420, 5, 112, 0, 0, 420, 421, 5, 102, 0, 0, 421, 422, 5, 108, 0, 0, 422, 423, 5, 97, 0, 0, 423, 424, 5, 103, 0, 0, 424, 31, 1, 0, 0, 0, 425, 426, 5, 46, 0, 0, 426, 427, 5, 110, 0, 0, 427, 428, 5, 111, 0, 0, 428, 429, 5, 116, 0, 0, 429, 430, 5, 100, 0, 0, 430, 431, 5, 101, 0, 0, 431, 432, 5, 102, 0, 0, 432, 33, 1, 0, 0, 0, 433, 434, 5, 82, 0, 0, 434, 435, 5, 105, 0, 0, 435, 436, 5, 103, 0, 0, 436, 437, 5, 104, 0, 0, 437, 438, 5, 116, 0, 0, 438, 439, 5, 84, 0, 0, 439, 440, 5, 111, 0, 0, 440, 441, 5, 76, 0, 0, 441, 442, 5, 101, 0, 0, 442, 443, 5, 102, 0, 0, 443, 444, 5, 116, 0, 0, 444, 35, 1, 0, 0, 0, 445, 446, 5, 73, 0, 0, 446, 447, 5, 103, 0, 0, 447, 448, 5, 110, 0, 0, 448, 449, 5, 111, 0, 0, 449, 450, 5, 114, 0, 0, 450, 451, 5, 101, 0, 0, 451, 452, 5, 66, 0, 0, 452, 453, 5, 97, 0, 0, 453, 454, 5, 115, 0, 0, 454, 455, 5, 101, 0, 0, 455, 456, 5, 71, 0, 0, 456, 457, 5, 108, 0, 0, 457, 458, 5, 121, 0, 0, 458, 459, 5, 112, 0, 0, 459, 460, 5, 104, 0, 0, 460, 461, 5, 115, 0, 0, 461, 37, 1, 0, 0, 0, 462, 463, 5, 73, 0, 0, 463, 464, 5, 103, 0, 0, 464, 465, 5, 110, 0, 0, 465, 466, 5, 111, 0, 0, 466, 467, 5, 114, 0, 0, 467, 468, 5, 101, 0, 0, 468, 469, 5, 76, 0, 0, 469, 470, 5, 105, 0, 0, 470, 471, 5, 103, 0, 0, 471, 472, 5, 97, 0, 0, 472, 473, 5, 116, 0, 0, 473, 474, 5, 117, 0, 0, 474, 475, 5, 114, 0, 0, 475, 476, 5, 101, 0, 0, 476, 477, 5, 115, 0, 0, 477, 39, 1, 0, 0, 0, 478, 479, 5, 73, 0, 0, 479, 480, 5, 103, 0, 0, 480, 481, 5, 110, 0, 0, 481, 482, 5, 111, 0, 0, 482, 483, 5, 114, 0, 0, 483, 484, 5, 101, 0, 0, 484, 485, 5, 77, 0, 0, 485, 486, 5, 97, 0, 0, 486, 487, 5, 114, 0, 0, 487, 488, 5, 107, 0, 0, 488, 489, 5, 115, 0, 0, 489, 41, 1, 0, 0, 0, 490, 491, 5, 85, 0, 0, 491, 492, 5, 115, 0, 0, 492, 493, 5, 101, 0, 0, 493, 494, 5, 77, 0, 0, 494, 495, 5, 97, 0, 0, 495, 496, 5, 114, 0, 0, 496, 497, 5, 107, 0, 0, 497, 498, 5, 70, 0, 0, 498, 499, 5, 105, 0, 0, 499, 500, 5, 108, 0, 0, 500, 501, 5, 116, 0, 0, 501, 502, 5, 101, 0, 0, 502, 503, 5, 114, 0, 0, 503, 504, 5, 105, 0, 0, 504, 505, 5, 110, 0, 0, 505, 506, 5, 103, 0, 0, 506, 507, 5, 83, 0, 0, 507, 508, 5, 101, 0, 0, 508, 509, 5, 116, 0, 0, 509, 43, 1, 0, 0, 0, 510, 511, 5, 77, 0, 0, 511, 512, 5, 97, 0, 0, 512, 513, 5, 114, 0, 0, 513, 514, 5, 107, 0, 0, 514, 515, 5, 65, 0, 0, 515, 516, 5, 116, 0, 0, 516, 517, 5, 116, 0, 0, 517, 518, 5, 97, 0, 0, 518, 519, 5, 99, 0, 0, 519, 520, 5, 104, 0, 0, 520, 521, 5, 109, 0, 0, 521, 522, 5, 101, 0, 0, 522, 523, 5, 110, 0, 0, 523, 524, 5, 116, 0, 0, 524, 525, 5, 84, 0, 0, 525, 526, 5, 121, 0, 0, 526, 527, 5, 112, 0, 0, 527, 528, 5, 101, 0, 0, 528, 45, 1, 0, 0, 0, 529, 530, 5, 101, 0, 0, 530, 531, 5, 120, 0, 0, 531, 532, 5, 99, 0, 0, 532, 533, 5, 108, 0, 0, 533, 534, 5, 117, 0, 0, 534, 535, 5, 100, 0, 0, 535, 536, 5, 101, 0, 0, 536, 537, 5, 68, 0, 0, 537, 538, 5, 70, 0, 0, 538, 539, 5, 76, 0, 0, 539, 540, 5, 84, 0, 0, 540, 47, 1, 0, 0, 0, 541, 542, 5, 105, 0, 0, 542, 543, 5, 110, 0, 0, 543, 544, 5, 99, 0, 0, 544, 545, 5, 108, 0, 0, 545, 546, 5, 117, 0, 0, 546, 547, 5, 100, 0, 0, 547, 548, 5, 101, 0, 0, 548, 549, 5, 68, 0, 0, 549, 550, 5, 70, 0, 0, 550, 551, 5, 76, 0, 0, 551, 552, 5, 84, 0, 0, 552, 49, 1, 0, 0, 0, 553, 554, 5, 101, 0, 0, 554, 555, 5, 120, 0, 0, 555, 556, 5, 99, 0, 0, 556, 557, 5, 108, 0, 0, 557, 558, 5, 117, 0, 0, 558, 559, 5, 100, 0, 0, 559, 560, 5, 101, 0, 0, 560, 561, 5, 95, 0, 0, 561, 562, 5, 100, 0, 0, 562, 563, 5, 102, 0, 0, 563, 564, 5, 108, 0, 0, 564, 565, 5, 116, 0, 0, 565, 51, 1, 0, 0, 0, 566, 567, 5, 105, 0, 0, 567, 568, 5, 110, 0, 0, 568, 569, 5, 99, 0, 0, 569, 570, 5, 108, 0, 0, 570, 571, 5, 117, 0, 0, 571, 572, 5, 100, 0, 0, 572, 573, 5, 101, 0, 0, 573, 574, 5, 95, 0, 0, 574, 575, 5, 100, 0, 0, 575, 576, 5, 102, 0, 0, 576, 577, 5, 108, 0, 0, 577, 578, 5, 116, 0, 0, 578, 53, 1, 0, 0, 0, 579, 580, 5, 117, 0, 0, 580, 581, 5, 115, 0, 0, 581, 582, 5, 101, 0, 0, 582, 583, 5, 69, 0, 0, 583, 584, 5, 120, 0, 0, 584, 585, 5, 116, 0, 0, 585, 586, 5, 101, 0, 0, 586, 587, 5, 110, 0, 0, 587, 588, 5, 115, 0, 0, 588, 589, 5, 105, 0, 0, 589, 590, 5, 111, 0, 0, 590, 591, 5, 110, 0, 0, 591, 55, 1, 0, 0, 0, 592, 593, 5, 60, 0, 0, 593, 57, 1, 0, 0, 0, 594, 595, 5, 62, 0, 0, 595, 59, 1, 0, 0, 0, 596, 597, 5, 101, 0, 0, 597, 598, 5, 110, 0, 0, 598, 599, 5, 117, 0, 0, 599, 600, 5, 109, 0, 0, 600, 601, 5, 101, 0, 0, 601, 602, 5, 114, 0, 0, 602, 603, 5, 97, 0, 0, 603, 604, 5, 116, 0, 0, 604, 605, 5, 101, 0, 0, 605, 61, 1, 0, 0, 0, 606, 607, 5, 101, 0, 0, 607, 608, 5, 110, 0, 0, 608, 609, 5, 117, 0, 0, 609, 610, 5, 109, 0, 0, 610, 63, 1, 0, 0, 0, 611, 612, 5, 101, 0, 0, 612, 613, 5, 120, 0, 0, 613, 614, 5, 99, 0, 0, 614, 615, 5, 101, 0, 0, 615, 616, 5, 112, 0, 0, 616, 617, 5, 116, 0, 0, 617, 65, 1, 0, 0, 0, 618, 619, 5, 105, 0, 0, 619, 620, 5, 103, 0, 0, 620, 621, 5, 110, 0, 0, 621, 622, 5, 111, 0, 0, 622, 623, 5, 114, 0, 0, 623, 624, 5, 101, 0, 0, 624, 67, 1, 0, 0, 0, 625, 626, 5, 115, 0, 0, 626, 627, 5, 117, 0, 0, 627, 628, 5, 98, 0, 0, 628, 629, 5, 115, 0, 0, 629, 630, 5, 116, 0, 0, 630, 631, 5, 105, 0, 0, 631, 632, 5, 116, 0, 0, 632, 633, 5, 117, 0, 0, 633, 634, 5, 116, 0, 0, 634, 635, 5, 101, 0, 0, 635, 69, 1, 0, 0, 0, 636, 637, 5, 115, 0, 0, 637, 638, 5, 117, 0, 0, 638, 639, 5, 98, 0, 0, 639, 71, 1, 0, 0, 0, 640, 641, 5, 114, 0, 0, 641, 642, 5, 101, 0, 0, 642, 643, 5, 118, 0, 0, 643, 644, 5, 101, 0, 0, 644, 645, 5, 114, 0, 0, 645, 646, 5, 115, 0, 0, 646, 647, 5, 101, 0, 0, 647, 648, 5, 115, 0, 0, 648, 649, 5, 117, 0, 0, 649, 650, 5, 98, 0, 0, 650, 73, 1, 0, 0, 0, 651, 652, 5, 114, 0, 0, 652, 653, 5, 115, 0, 0, 653, 654, 5, 117, 0, 0, 654, 655, 5, 98, 0, 0, 655, 75, 1, 0, 0, 0, 656, 657, 5, 98, 0, 0, 657, 658, 5, 121, 0, 0, 658, 77, 1, 0, 0, 0, 659, 660, 5, 102, 0, 0, 660, 661, 5, 114, 0, 0, 661, 662, 5, 111, 0, 0, 662, 663, 5, 109, 0, 0, 663, 79, 1, 0, 0, 0, 664, 665, 5, 112, 0, 0, 665, 666, 5, 111, 0, 0, 666, 667, 5, 115, 0, 0, 667, 668, 5, 105, 0, 0, 668, 669, 5, 116, 0, 0, 669, 670, 5, 105, 0, 0, 670, 671, 5, 111, 0, 0, 671, 672, 5, 110, 0, 0, 672, 81, 1, 0, 0, 0, 673, 674, 5, 112, 0, 0, 674, 675, 5, 111, 0, 0, 675, 676, 5, 115, 0, 0, 676, 83, 1, 0, 0, 0, 677, 678, 5, 112, 0, 0, 678, 679, 5, 97, 0, 0, 679, 680, 5, 114, 0, 0, 680, 681, 5, 97, 0, 0, 681, 682, 5, 109, 0, 0, 682, 683, 5, 101, 0, 0, 683, 684, 5, 116, 0, 0, 684, 685, 5, 101, 0, 0, 685, 686, 5, 114, 0, 0, 686, 687, 5, 115, 0, 0, 687, 85, 1, 0, 0, 0, 688, 689, 5, 102, 0, 0, 689, 690, 5, 101, 0, 0, 690, 691, 5, 97, 0, 0, 691, 692, 5, 116, 0, 0, 692, 693, 5, 117, 0, 0, 693, 694, 5, 114, 0, 0, 694, 695, 5, 101, 0, 0, 695, 696, 5, 78, 0, 0, 696, 697, 5, 97, 0, 0, 697, 698, 5, 109, 0, 0, 698, 699, 5, 101, 0, 0, 699, 700, 5, 115, 0, 0, 700, 87, 1, 0, 0, 0, 701, 702, 5, 99, 0, 0, 702, 703, 5, 118, 0, 0, 703, 704, 5, 80, 0, 0, 704, 705, 5, 97, 0, 0, 705, 706, 5, 114, 0, 0, 706, 707, 5, 97, 0, 0, 707, 708, 5, 109, 0, 0, 708, 709, 5, 101, 0, 0, 709, 710, 5, 116, 0, 0, 710, 711, 5, 101, 0, 0, 711, 712, 5, 114, 0, 0, 712, 713, 5, 115, 0, 0, 713, 89, 1, 0, 0, 0, 714, 715, 5, 70, 0, 0, 715, 716, 5, 101, 0, 0, 716, 717, 5, 97, 0, 0, 717, 718, 5, 116, 0, 0, 718, 719, 5, 85, 0, 0, 719, 720, 5, 73, 0, 0, 720, 721, 5, 76, 0, 0, 721, 722, 5, 97, 0, 0, 722, 723, 5, 98, 0, 0, 723, 724, 5, 101, 0, 0, 724, 725, 5, 108, 0, 0, 725, 726, 5, 78, 0, 0, 726, 727, 5, 97, 0, 0, 727, 728, 5, 109, 0, 0, 728, 729, 5, 101, 0, 0, 729, 730, 5, 73, 0, 0, 730, 731, 5, 68, 0, 0, 731, 91, 1, 0, 0, 0, 732, 733, 5, 70, 0, 0, 733, 734, 5, 101, 0, 0, 734, 735, 5, 97, 0, 0, 735, 736, 5, 116, 0, 0, 736, 737, 5, 85, 0, 0, 737, 738, 5, 73, 0, 0, 738, 739, 5, 84, 0, 0, 739, 740, 5, 111, 0, 0, 740, 741, 5, 111, 0, 0, 741, 742, 5, 108, 0, 0, 742, 743, 5, 116, 0, 0, 743, 744, 5, 105, 0, 0, 744, 745, 5, 112, 0, 0, 745, 746, 5, 84, 0, 0, 746, 747, 5, 101, 0, 0, 747, 748, 5, 120, 0, 0, 748, 749, 5, 116, 0, 0, 749, 750, 5, 78, 0, 0, 750, 751, 5, 97, 0, 0, 751, 752, 5, 109, 0, 0, 752, 753, 5, 101, 0, 0, 753, 754, 5, 73, 0, 0, 754, 755, 5, 68, 0, 0, 755, 93, 1, 0, 0, 0, 756, 757, 5, 83, 0, 0, 757, 758, 5, 97, 0, 0, 758, 759, 5, 109, 0, 0, 759, 760, 5, 112, 0, 0, 760, 761, 5, 108, 0, 0, 761, 762, 5, 101, 0, 0, 762, 763, 5, 84, 0, 0, 763, 764, 5, 101, 0, 0, 764, 765, 5, 120, 0, 0, 765, 766, 5, 116, 0, 0, 766, 767, 5, 78, 0, 0, 767, 768, 5, 97, 0, 0, 768, 769, 5, 109, 0, 0, 769, 770, 5, 101, 0, 0, 770, 771, 5, 73, 0, 0, 771, 772, 5, 68, 0, 0, 772, 95, 1, 0, 0, 0, 773, 774, 5, 80, 0, 0, 774, 775, 5, 97, 0, 0, 775, 776, 5, 114, 0, 0, 776, 777, 5, 97, 0, 0, 777, 778, 5, 109, 0, 0, 778, 779, 5, 85, 0, 0, 779, 780, 5, 73, 0, 0, 780, 781, 5, 76, 0, 0, 781, 782, 5, 97, 0, 0, 782, 783, 5, 98, 0, 0, 783, 784, 5, 101, 0, 0, 784, 785, 5, 108, 0, 0, 785, 786, 5, 78, 0, 0, 786, 787, 5, 97, 0, 0, 787, 788, 5, 109, 0, 0, 788, 789, 5, 101, 0, 0, 789, 790, 5, 73, 0, 0, 790, 791, 5, 68, 0, 0, 791, 97, 1, 0, 0, 0, 792, 793, 5, 67, 0, 0, 793, 794, 5, 104, 0, 0, 794, 795, 5, 97, 0, 0, 795, 796, 5, 114, 0, 0, 796, 797, 5, 97, 0, 0, 797, 798, 5, 99, 0, 0, 798, 799, 5, 116, 0, 0, 799, 800, 5, 101, 0, 0, 800, 801, 5, 114, 0, 0, 801, 99, 1, 0, 0, 0, 802, 803, 5, 115, 0, 0, 803, 804, 5, 105, 0, 0, 804, 805, 5, 122, 0, 0, 805, 806, 5, 101, 0, 0, 806, 807, 5, 109, 0, 0, 807, 808, 5, 101, 0, 0, 808, 809, 5, 110, 0, 0, 809, 810, 5, 117, 0, 0, 810, 811, 5, 110, 0, 0, 811, 812, 5, 97, 0, 0, 812, 813, 5, 109, 0, 0, 813, 814, 5, 101, 0, 0, 814, 101, 1, 0, 0, 0, 815, 816, 5, 99, 0, 0, 816, 817, 5, 111, 0, 0, 817, 818, 5, 110, 0, 0, 818, 819, 5, 116, 0, 0, 819, 820, 5, 111, 0, 0, 820, 821, 5, 117, 0, 0, 821, 822, 5, 114, 0, 0, 822, 823, 5, 112, 0, 0, 823, 824, 5, 111, 0, 0, 824, 825, 5, 105, 0, 0, 825, 826, 5, 110, 0, 0, 826, 827, 5, 116, 0, 0, 827, 103, 1, 0, 0, 0, 828, 829, 5, 97, 0, 0, 829, 830, 5, 110, 0, 0, 830, 831, 5, 99, 0, 0, 831, 832, 5, 104, 0, 0, 832, 833, 5, 111, 0, 0, 833, 834, 5, 114, 0, 0, 834, 105, 1, 0, 0, 0, 835, 836, 5, 97, 0, 0, 836, 837, 5, 110, 0, 0, 837, 838, 5, 99, 0, 0, 838, 839, 5, 104, 0, 0, 839, 840, 5, 111, 0, 0, 840, 841, 5, 114, 0, 0, 841, 842, 5, 68, 0, 0, 842, 843, 5, 101, 0, 0, 843, 844, 5, 102, 0, 0, 844, 107, 1, 0, 0, 0, 845, 846, 5, 118, 0, 0, 846, 847, 5, 97, 0, 0, 847, 848, 5, 108, 0, 0, 848, 849, 5, 117, 0, 0, 849, 850, 5, 101, 0, 0, 850, 851, 5, 82, 0, 0, 851, 852, 5, 101, 0, 0, 852, 853, 5, 99, 0, 0, 853, 854, 5, 111, 0, 0, 854, 855, 5, 114, 0, 0, 855, 856, 5, 100, 0, 0, 856, 857, 5, 68, 0, 0, 857, 858, 5, 101, 0, 0, 858, 859, 5, 102, 0, 0, 859, 109, 1, 0, 0, 0, 860, 861, 5, 109, 0, 0, 861, 862, 5, 97, 0, 0, 862, 863, 5, 114, 0, 0, 863, 864, 5, 107, 0, 0, 864, 111, 1, 0, 0, 0, 865, 866, 5, 109, 0, 0, 866, 867, 5, 97, 0, 0, 867, 868, 5, 114, 0, 0, 868, 869, 5, 107, 0, 0, 869, 870, 5, 67, 0, 0, 870, 871, 5, 108, 0, 0, 871, 872, 5, 97, 0, 0, 872, 873, 5, 115, 0, 0, 873, 874, 5, 115, 0, 0, 874, 113, 1, 0, 0, 0, 875, 876, 5, 99, 0, 0, 876, 877, 5, 117, 0, 0, 877, 878, 5, 114, 0, 0, 878, 879, 5, 115, 0, 0, 879, 880, 5, 105, 0, 0, 880, 881, 5, 118, 0, 0, 881, 882, 5, 101, 0, 0, 882, 115, 1, 0, 0, 0, 883, 884, 5, 98, 0, 0, 884, 885, 5, 97, 0, 0, 885, 886, 5, 115, 0, 0, 886, 887, 5, 101, 0, 0, 887, 117, 1, 0, 0, 0, 888, 889, 5, 108, 0, 0, 889, 890, 5, 105, 0, 0, 890, 891, 5, 103, 0, 0, 891, 892, 5, 97, 0, 0, 892, 893, 5, 116, 0, 0, 893, 894, 5, 117, 0, 0, 894, 895, 5, 114, 0, 0, 895, 896, 5, 101, 0, 0, 896, 119, 1, 0, 0, 0, 897, 898, 5, 108, 0, 0, 898, 899, 5, 105, 0, 0, 899, 900, 5, 103, 0, 0, 900, 121, 1, 0, 0, 0, 901, 902, 5, 108, 0, 0, 902, 903, 5, 105, 0, 0, 903, 904, 5, 103, 0, 0, 904, 905, 5, 67, 0, 0, 905, 906, 5, 111, 0, 0, 906, 907, 5, 109, 0, 0, 907, 908, 5, 112, 0, 0, 908, 909, 5, 111, 0, 0, 909, 910, 5, 110, 0, 0, 910, 911, 5, 101, 0, 0, 911, 912, 5, 110, 0, 0, 912, 913, 5, 116, 0, 0, 913, 123, 1, 0, 0, 0, 914, 915, 5, 78, 0, 0, 915, 916, 5, 85, 0, 0, 916, 917, 5, 76, 0, 0, 917, 918, 5, 76, 0, 0, 918, 125, 1, 0, 0, 0, 919, 920, 5, 66, 0, 0, 920, 921, 5, 65, 0, 0, 921, 922, 5, 83, 0, 0, 922, 923, 5, 69, 0, 0, 923, 127, 1, 0, 0, 0, 924, 925, 5, 72, 0, 0, 925, 926, 5, 111, 0, 0, 926, 927, 5, 114, 0, 0, 927, 928, 5, 105, 0, 0, 928, 929, 5, 122, 0, 0, 929, 930, 5, 65, 0, 0, 930, 931, 5, 120, 0, 0, 931, 932, 5, 105, 0, 0, 932, 933, 5, 115, 0, 0, 933, 934, 5, 46, 0, 0, 934, 935, 5, 66, 0, 0, 935, 936, 5, 97, 0, 0, 936, 937, 5, 115, 0, 0, 937, 938, 5, 101, 0, 0, 938, 939, 5, 84, 0, 0, 939, 940, 5, 97, 0, 0, 940, 941, 5, 103, 0, 0, 941, 942, 5, 76, 0, 0, 942, 943, 5, 105, 0, 0, 943, 944, 5, 115, 0, 0, 944, 945, 5, 116, 0, 0, 945, 129, 1, 0, 0, 0, 946, 947, 5, 86, 0, 0, 947, 948, 5, 101, 0, 0, 948, 949, 5, 114, 0, 0, 949, 950, 5, 116, 0, 0, 950, 951, 5, 65, 0, 0, 951, 952, 5, 120, 0, 0, 952, 953, 5, 105, 0, 0, 953, 954, 5, 115, 0, 0, 954, 955, 5, 46, 0, 0, 955, 956, 5, 66, 0, 0, 956, 957, 5, 97, 0, 0, 957, 958, 5, 115, 0, 0, 958, 959, 5, 101, 0, 0, 959, 960, 5, 84, 0, 0, 960, 961, 5, 97, 0, 0, 961, 962, 5, 103, 0, 0, 962, 963, 5, 76, 0, 0, 963, 964, 5, 105, 0, 0, 964, 965, 5, 115, 0, 0, 965, 966, 5, 116, 0, 0, 966, 131, 1, 0, 0, 0, 967, 968, 5, 72, 0, 0, 968, 969, 5, 111, 0, 0, 969, 970, 5, 114, 0, 0, 970, 971, 5, 105, 0, 0, 971, 972, 5, 122, 0, 0, 972, 973, 5, 65, 0, 0, 973, 974, 5, 120, 0, 0, 974, 975, 5, 105, 0, 0, 975, 976, 5, 115, 0, 0, 976, 977, 5, 46, 0, 0, 977, 978, 5, 66, 0, 0, 978, 979, 5, 97, 0, 0, 979, 980, 5, 115, 0, 0, 980, 981, 5, 101, 0, 0, 981, 982, 5, 83, 0, 0, 982, 983, 5, 99, 0, 0, 983, 984, 5, 114, 0, 0, 984, 985, 5, 105, 0, 0, 985, 986, 5, 112, 0, 0, 986, 987, 5, 116, 0, 0, 987, 988, 5, 76, 0, 0, 988, 989, 5, 105, 0, 0, 989, 990, 5, 115, 0, 0, 990, 991, 5, 116, 0, 0, 991, 133, 1, 0, 0, 0, 992, 993, 5, 86, 0, 0, 993, 994, 5, 101, 0, 0, 994, 995, 5, 114, 0, 0, 995, 996, 5, 116, 0, 0, 996, 997, 5, 65, 0, 0, 997, 998, 5, 120, 0, 0, 998, 999, 5, 105, 0, 0, 999, 1000, 5, 115, 0, 0, 1000, 1001, 5, 46, 0, 0, 1001, 1002, 5, 66, 0, 0, 1002, 1003, 5, 97, 0, 0, 1003, 1004, 5, 115, 0, 0, 1004, 1005, 5, 101, 0, 0, 1005, 1006, 5, 83, 0, 0, 1006, 1007, 5, 99, 0, 0, 1007, 1008, 5, 114, 0, 0, 1008, 1009, 5, 105, 0, 0, 1009, 1010, 5, 112, 0, 0, 1010, 1011, 5, 116, 0, 0, 1011, 1012, 5, 76, 0, 0, 1012, 1013, 5, 105, 0, 0, 1013, 1014, 5, 115, 0, 0, 1014, 1015, 5, 116, 0, 0, 1015, 135, 1, 0, 0, 0, 1016, 1017, 5, 71, 0, 0, 1017, 1018, 5, 68, 0, 0, 1018, 1019, 5, 69, 0, 0, 1019, 1020, 5, 70, 0, 0, 1020, 137, 1, 0, 0, 0, 1021, 1022, 5, 71, 0, 0, 1022, 1023, 5, 108, 0, 0, 1023, 1024, 5, 121, 0, 0, 1024, 1025, 5, 112, 0, 0, 1025, 1026, 5, 104, 0, 0, 1026, 1027, 5, 67, 0, 0, 1027, 1028, 5, 108, 0, 0, 1028, 1029, 5, 97, 0, 0, 1029, 1030, 5, 115, 0, 0, 1030, 1031, 5, 115, 0, 0, 1031, 1032, 5, 68, 0, 0, 1032, 1033, 5, 101, 0, 0, 1033, 1034, 5, 102, 0, 0, 1034, 139, 1, 0, 0, 0, 1035, 1036, 5, 65, 0, 0, 1036, 1037, 5, 116, 0, 0, 1037, 1038, 5, 116, 0, 0, 1038, 1039, 5, 97, 0, 0, 1039, 1040, 5, 99, 0, 0, 1040, 1041, 5, 104, 0, 0, 1041, 141, 1, 0, 0, 0, 1042, 1043, 5, 76, 0, 0, 1043, 1044, 5, 105, 0, 0, 1044, 1045, 5, 103, 0, 0, 1045, 1046, 5, 97, 0, 0, 1046, 1047, 5, 116, 0, 0, 1047, 1048, 5, 117, 0, 0, 1048, 1049, 5, 114, 0, 0, 1049, 1050, 5, 101, 0, 0, 1050, 1051, 5, 67, 0, 0, 1051, 1052, 5, 97, 0, 0, 1052, 1053, 5, 114, 0, 0, 1053, 1054, 5, 101, 0, 0, 1054, 1055, 5, 116, 0, 0, 1055, 1056, 5, 66, 0, 0, 1056, 1057, 5, 121, 0, 0, 1057, 1058, 5, 80, 0, 0, 1058, 1059, 5, 111, 0, 0, 1059, 1060, 5, 115, 0, 0, 1060, 143, 1, 0, 0, 0, 1061, 1062, 5, 76, 0, 0, 1062, 1063, 5, 105, 0, 0, 1063, 1064, 5, 103, 0, 0, 1064, 1065, 5, 97, 0, 0, 1065, 1066, 5, 116, 0, 0, 1066, 1067, 5, 117, 0, 0, 1067, 1068, 5, 114, 0, 0, 1068, 1069, 5, 101, 0, 0, 1069, 1070, 5, 67, 0, 0, 1070, 1071, 5, 97, 0, 0, 1071, 1072, 5, 114, 0, 0, 1072, 1073, 5, 101, 0, 0, 1073, 1074, 5, 116, 0, 0, 1074, 1075, 5, 66, 0, 0, 1075, 1076, 5, 121, 0, 0, 1076, 1077, 5, 73, 0, 0, 1077, 1078, 5, 110, 0, 0, 1078, 1079, 5, 100, 0, 0, 1079, 1080, 5, 101, 0, 0, 1080, 1081, 5, 120, 0, 0, 1081, 145, 1, 0, 0, 0, 1082, 1083, 5, 104, 0, 0, 1083, 1084, 5, 101, 0, 0, 1084, 1085, 5, 97, 0, 0, 1085, 1086, 5, 100, 0, 0, 1086, 147, 1, 0, 0, 0, 1087, 1088, 5, 70, 0, 0, 1088, 1089, 5, 111, 0, 0, 1089, 1090, 5, 110, 0, 0, 1090, 1091, 5, 116, 0, 0, 1091, 1092, 5, 82, 0, 0, 1092, 1093, 5, 101, 0, 0, 1093, 1094, 5, 118, 0, 0, 1094, 1095, 5, 105, 0, 0, 1095, 1096, 5, 115, 0, 0, 1096, 1097, 5, 105, 0, 0, 1097, 1098, 5, 111, 0, 0, 1098, 1099, 5, 110, 0, 0, 1099, 149, 1, 0, 0, 0, 1100, 1101, 5, 104, 0, 0, 1101, 1102, 5, 104, 0, 0, 1102, 1103, 5, 101, 0, 0, 1103, 1104, 5, 97, 0, 0, 1104, 151, 1, 0, 0, 0, 1105, 1106, 5, 65, 0, 0, 1106, 1107, 5, 115, 0, 0, 1107, 1108, 5, 99, 0, 0, 1108, 1109, 5, 101, 0, 0, 1109, 1110, 5, 110, 0, 0, 1110, 1111, 5, 100, 0, 0, 1111, 1112, 5, 101, 0, 0, 1112, 1113, 5, 114, 0, 0, 1113, 153, 1, 0, 0, 0, 1114, 1115, 5, 68, 0, 0, 1115, 1116, 5, 101, 0, 0, 1116, 1117, 5, 115, 0, 0, 1117, 1118, 5, 99, 0, 0, 1118, 1119, 5, 101, 0, 0, 1119, 1120, 5, 110, 0, 0, 1120, 1121, 5, 100, 0, 0, 1121, 1122, 5, 101, 0, 0, 1122, 1123, 5, 114, 0, 0, 1123, 155, 1, 0, 0, 0, 1124, 1125, 5, 76, 0, 0, 1125, 1126, 5, 105, 0, 0, 1126, 1127, 5, 110, 0, 0, 1127, 1128, 5, 101, 0, 0, 1128, 1129, 5, 71, 0, 0, 1129, 1130, 5, 97, 0, 0, 1130, 1131, 5, 112, 0, 0, 1131, 157, 1, 0, 0, 0, 1132, 1133, 5, 67, 0, 0, 1133, 1134, 5, 97, 0, 0, 1134, 1135, 5, 114, 0, 0, 1135, 1136, 5, 101, 0, 0, 1136, 1137, 5, 116, 0, 0, 1137, 1138, 5, 79, 0, 0, 1138, 1139, 5, 102, 0, 0, 1139, 1140, 5, 102, 0, 0, 1140, 1141, 5, 115, 0, 0, 1141, 1142, 5, 101, 0, 0, 1142, 1143, 5, 116, 0, 0, 1143, 159, 1, 0, 0, 0, 1144, 1145, 5, 110, 0, 0, 1145, 1146, 5, 97, 0, 0, 1146, 1147, 5, 109, 0, 0, 1147, 1148, 5, 101, 0, 0, 1148, 161, 1, 0, 0, 0, 1149, 1150, 5, 110, 0, 0, 1150, 1151, 5, 97, 0, 0, 1151, 1152, 5, 109, 0, 0, 1152, 1153, 5, 101, 0, 0, 1153, 1154, 5, 105, 0, 0, 1154, 1155, 5, 100, 0, 0, 1155, 163, 1, 0, 0, 0, 1156, 1157, 5, 79, 0, 0, 1157, 1158, 5, 83, 0, 0, 1158, 1159, 5, 47, 0, 0, 1159, 1160, 5, 50, 0, 0, 1160, 165, 1, 0, 0, 0, 1161, 1162, 5, 70, 0, 0, 1162, 1163, 5, 83, 0, 0, 1163, 1164, 5, 84, 0, 0, 1164, 1165, 5, 121, 0, 0, 1165, 1166, 5, 112, 0, 0, 1166, 1167, 5, 101, 0, 0, 1167, 167, 1, 0, 0, 0, 1168, 1169, 5, 102, 0, 0, 1169, 1170, 5, 115, 0, 0, 1170, 1171, 5, 84, 0, 0, 1171, 1172, 5, 121, 0, 0, 1172, 1173, 5, 112, 0, 0, 1173, 1174, 5, 101, 0, 0, 1174, 169, 1, 0, 0, 0, 1175, 1176, 5, 76, 0, 0, 1176, 1177, 5, 111, 0, 0, 1177, 1178, 5, 119, 0, 0, 1178, 1179, 5, 101, 0, 0, 1179, 1180, 5, 114, 0, 0, 1180, 1181, 5, 79, 0, 0, 1181, 1182, 5, 112, 0, 0, 1182, 1183, 5, 83, 0, 0, 1183, 1184, 5, 105, 0, 0, 1184, 1185, 5, 122, 0, 0, 1185, 1186, 5, 101, 0, 0, 1186, 171, 1, 0, 0, 0, 1187, 1188, 5, 85, 0, 0, 1188, 1189, 5, 112, 0, 0, 1189, 1190, 5, 112, 0, 0, 1190, 1191, 5, 101, 0, 0, 1191, 1192, 5, 114, 0, 0, 1192, 1193, 5, 79, 0, 0, 1193, 1194, 5, 112, 0, 0, 1194, 1195, 5, 83, 0, 0, 1195, 1196, 5, 105, 0, 0, 1196, 1197, 5, 122, 0, 0, 1197, 1198, 5, 101, 0, 0, 1198, 173, 1, 0, 0, 0, 1199, 1200, 5, 80, 0, 0, 1200, 1201, 5, 97, 0, 0, 1201, 1202, 5, 110, 0, 0, 1202, 1203, 5, 111, 0, 0, 1203, 1204, 5, 115, 0, 0, 1204, 1205, 5, 101, 0, 0, 1205, 175, 1, 0, 0, 0, 1206, 1207, 5, 84, 0, 0, 1207, 1208, 5, 121, 0, 0, 1208, 1209, 5, 112, 0, 0, 1209, 1210, 5, 111, 0, 0, 1210, 1211, 5, 65, 0, 0, 1211, 1212, 5, 115, 0, 0, 1212, 1213, 5, 99, 0, 0, 1213, 1214, 5, 101, 0, 0, 1214, 1215, 5, 110, 0, 0, 1215, 1216, 5, 100, 0, 0, 1216, 1217, 5, 101, 0, 0, 1217, 1218, 5, 114, 0, 0, 1218, 177, 1, 0, 0, 0, 1219, 1220, 5, 84, 0, 0, 1220, 1221, 5, 121, 0, 0, 1221, 1222, 5, 112, 0, 0, 1222, 1223, 5, 111, 0, 0, 1223, 1224, 5, 68, 0, 0, 1224, 1225, 5, 101, 0, 0, 1225, 1226, 5, 115, 0, 0, 1226, 1227, 5, 99, 0, 0, 1227, 1228, 5, 101, 0, 0, 1228, 1229, 5, 110, 0, 0, 1229, 1230, 5, 100, 0, 0, 1230, 1231, 5, 101, 0, 0, 1231, 1232, 5, 114, 0, 0, 1232, 179, 1, 0, 0, 0, 1233, 1234, 5, 84, 0, 0, 1234, 1235, 5, 121, 0, 0, 1235, 1236, 5, 112, 0, 0, 1236, 1237, 5, 111, 0, 0, 1237, 1238, 5, 76, 0, 0, 1238, 1239, 5, 105, 0, 0, 1239, 1240, 5, 110, 0, 0, 1240, 1241, 5, 101, 0, 0, 1241, 1242, 5, 71, 0, 0, 1242, 1243, 5, 97, 0, 0, 1243, 1244, 5, 112, 0, 0, 1244, 181, 1, 0, 0, 0, 1245, 1246, 5, 119, 0, 0, 1246, 1247, 5, 105, 0, 0, 1247, 1248, 5, 110, 0, 0, 1248, 1249, 5, 65, 0, 0, 1249, 1250, 5, 115, 0, 0, 1250, 1251, 5, 99, 0, 0, 1251, 1252, 5, 101, 0, 0, 1252, 1253, 5, 110, 0, 0, 1253, 1254, 5, 116, 0, 0, 1254, 183, 1, 0, 0, 0, 1255, 1256, 5, 119, 0, 0, 1256, 1257, 5, 105, 0, 0, 1257, 1258, 5, 110, 0, 0, 1258, 1259, 5, 68, 0, 0, 1259, 1260, 5, 101, 0, 0, 1260, 1261, 5, 115, 0, 0, 1261, 1262, 5, 99, 0, 0, 1262, 1263, 5, 101, 0, 0, 1263, 1264, 5, 110, 0, 0, 1264, 1265, 5, 116, 0, 0, 1265, 185, 1, 0, 0, 0, 1266, 1267, 5, 88, 0, 0, 1267, 1268, 5, 72, 0, 0, 1268, 1269, 5, 101, 0, 0, 1269, 1270, 5, 105, 0, 0, 1270, 1271, 5, 103, 0, 0, 1271, 1272, 5, 104, 0, 0, 1272, 1273, 5, 116, 0, 0, 1273, 187, 1, 0, 0, 0, 1274, 1275, 5, 67, 0, 0, 1275, 1276, 5, 97, 0, 0, 1276, 1277, 5, 112, 0, 0, 1277, 1278, 5, 72, 0, 0, 1278, 1279, 5, 101, 0, 0, 1279, 1280, 5, 105, 0, 0, 1280, 1281, 5, 103, 0, 0, 1281, 1282, 5, 104, 0, 0, 1282, 1283, 5, 116, 0, 0, 1283, 189, 1, 0, 0, 0, 1284, 1285, 5, 87, 0, 0, 1285, 1286, 5, 101, 0, 0, 1286, 1287, 5, 105, 0, 0, 1287, 1288, 5, 103, 0, 0, 1288, 1289, 5, 104, 0, 0, 1289, 1290, 5, 116, 0, 0, 1290, 1291, 5, 67, 0, 0, 1291, 1292, 5, 108, 0, 0, 1292, 1293, 5, 97, 0, 0, 1293, 1294, 5, 115, 0, 0, 1294, 1295, 5, 115, 0, 0, 1295, 191, 1, 0, 0, 0, 1296, 1297, 5, 87, 0, 0, 1297, 1298, 5, 105, 0, 0, 1298, 1299, 5, 100, 0, 0, 1299, 1300, 5, 116, 0, 0, 1300, 1301, 5, 104, 0, 0, 1301, 1302, 5, 67, 0, 0, 1302, 1303, 5, 108, 0, 0, 1303, 1304, 5, 97, 0, 0, 1304, 1305, 5, 115, 0, 0, 1305, 1306, 5, 115, 0, 0, 1306, 193, 1, 0, 0, 0, 1307, 1308, 5, 86, 0, 0, 1308, 1309, 5, 101, 0, 0, 1309, 1310, 5, 110, 0, 0, 1310, 1311, 5, 100, 0, 0, 1311, 1312, 5, 111, 0, 0, 1312, 1313, 5, 114, 0, 0, 1313, 195, 1, 0, 0, 0, 1314, 1315, 5, 85, 0, 0, 1315, 1316, 5, 110, 0, 0, 1316, 1317, 5, 105, 0, 0, 1317, 1318, 5, 99, 0, 0, 1318, 1319, 5, 111, 0, 0, 1319, 1320, 5, 100, 0, 0, 1320, 1321, 5, 101, 0, 0, 1321, 1322, 5, 82, 0, 0, 1322, 1323, 5, 97, 0, 0, 1323, 1324, 5, 110, 0, 0, 1324, 1325, 5, 103, 0, 0, 1325, 1326, 5, 101, 0, 0, 1326, 197, 1, 0, 0, 0, 1327, 1328, 5, 67, 0, 0, 1328, 1329, 5, 111, 0, 0, 1329, 1330, 5, 100, 0, 0, 1330, 1331, 5, 101, 0, 0, 1331, 1332, 5, 80, 0, 0, 1332, 1333, 5, 97, 0, 0, 1333, 1334, 5, 103, 0, 0, 1334, 1335, 5, 101, 0, 0, 1335, 1336, 5, 82, 0, 0, 1336, 1337, 5, 97, 0, 0, 1337, 1338, 5, 110, 0, 0, 1338, 1339, 5, 103, 0, 0, 1339, 1340, 5, 101, 0, 0, 1340, 199, 1, 0, 0, 0, 1341, 1342, 5, 70, 0, 0, 1342, 1343, 5, 97, 0, 0, 1343, 1344, 5, 109, 0, 0, 1344, 1345, 5, 105, 0, 0, 1345, 1346, 5, 108, 0, 0, 1346, 1347, 5, 121, 0, 0, 1347, 1348, 5, 67, 0, 0, 1348, 1349, 5, 108, 0, 0, 1349, 1350, 5, 97, 0, 0, 1350, 1351, 5, 115, 0, 0, 1351, 1352, 5, 115, 0, 0, 1352, 201, 1, 0, 0, 0, 1353, 1354, 5, 83, 0, 0, 1354, 1355, 5, 84, 0, 0, 1355, 1356, 5, 65, 0, 0, 1356, 1357, 5, 84, 0, 0, 1357, 203, 1, 0, 0, 0, 1358, 1359, 5, 69, 0, 0, 1359, 1360, 5, 108, 0, 0, 1360, 1361, 5, 105, 0, 0, 1361, 1362, 5, 100, 0, 0, 1362, 1363, 5, 101, 0, 0, 1363, 1364, 5, 100, 0, 0, 1364, 1365, 5, 70, 0, 0, 1365, 1366, 5, 97, 0, 0, 1366, 1367, 5, 108, 0, 0, 1367, 1368, 5, 108, 0, 0, 1368, 1369, 5, 98, 0, 0, 1369, 1370, 5, 97, 0, 0, 1370, 1371, 5, 99, 0, 0, 1371, 1372, 5, 107, 0, 0, 1372, 1373, 5, 78, 0, 0, 1373, 1374, 5, 97, 0, 0, 1374, 1375, 5, 109, 0, 0, 1375, 1376, 5, 101, 0, 0, 1376, 205, 1, 0, 0, 0, 1377, 1378, 5, 69, 0, 0, 1378, 1379, 5, 108, 0, 0, 1379, 1380, 5, 105, 0, 0, 1380, 1381, 5, 100, 0, 0, 1381, 1382, 5, 101, 0, 0, 1382, 1383, 5, 100, 0, 0, 1383, 1384, 5, 70, 0, 0, 1384, 1385, 5, 97, 0, 0, 1385, 1386, 5, 108, 0, 0, 1386, 1387, 5, 108, 0, 0, 1387, 1388, 5, 98, 0, 0, 1388, 1389, 5, 97, 0, 0, 1389, 1390, 5, 99, 0, 0, 1390, 1391, 5, 107, 0, 0, 1391, 1392, 5, 78, 0, 0, 1392, 1393, 5, 97, 0, 0, 1393, 1394, 5, 109, 0, 0, 1394, 1395, 5, 101, 0, 0, 1395, 1396, 5, 73, 0, 0, 1396, 1397, 5, 68, 0, 0, 1397, 207, 1, 0, 0, 0, 1398, 1399, 5, 68, 0, 0, 1399, 1400, 5, 101, 0, 0, 1400, 1401, 5, 115, 0, 0, 1401, 1402, 5, 105, 0, 0, 1402, 1403, 5, 103, 0, 0, 1403, 1404, 5, 110, 0, 0, 1404, 1405, 5, 65, 0, 0, 1405, 1406, 5, 120, 0, 0, 1406, 1407, 5, 105, 0, 0, 1407, 1408, 5, 115, 0, 0, 1408, 209, 1, 0, 0, 0, 1409, 1410, 5, 65, 0, 0, 1410, 1411, 5, 120, 0, 0, 1411, 1412, 5, 105, 0, 0, 1412, 1413, 5, 115, 0, 0, 1413, 1414, 5, 86, 0, 0, 1414, 1415, 5, 97, 0, 0, 1415, 1416, 5, 108, 0, 0, 1416, 1417, 5, 117, 0, 0, 1417, 1418, 5, 101, 0, 0, 1418, 211, 1, 0, 0, 0, 1419, 1420, 5, 102, 0, 0, 1420, 1421, 5, 108, 0, 0, 1421, 1422, 5, 97, 0, 0, 1422, 1423, 5, 103, 0, 0, 1423, 213, 1, 0, 0, 0, 1424, 1425, 5, 108, 0, 0, 1425, 1426, 5, 111, 0, 0, 1426, 1427, 5, 99, 0, 0, 1427, 1428, 5, 97, 0, 0, 1428, 1429, 5, 116, 0, 0, 1429, 1430, 5, 105, 0, 0, 1430, 1431, 5, 111, 0, 0, 1431, 1432, 5, 110, 0, 0, 1432, 215, 1, 0, 0, 0, 1433, 1434, 5, 69, 0, 0, 1434, 1435, 5, 108, 0, 0, 1435, 1436, 5, 105, 0, 0, 1436, 1437, 5, 100, 0, 0, 1437, 1438, 5, 97, 0, 0, 1438, 1439, 5, 98, 0, 0, 1439, 1440, 5, 108, 0, 0, 1440, 1441, 5, 101, 0, 0, 1441, 1442, 5, 65, 0, 0, 1442, 1443, 5, 120, 0, 0, 1443, 1444, 5, 105, 0, 0, 1444, 1445, 5, 115, 0, 0, 1445, 1446, 5, 86, 0, 0, 1446, 1447, 5, 97, 0, 0, 1447, 1448, 5, 108, 0, 0, 1448, 1449, 5, 117, 0, 0, 1449, 1450, 5, 101, 0, 0, 1450, 1451, 5, 78, 0, 0, 1451, 1452, 5, 97, 0, 0, 1452, 1453, 5, 109, 0, 0, 1453, 1454, 5, 101, 0, 0, 1454, 217, 1, 0, 0, 0, 1455, 1456, 5, 79, 0, 0, 1456, 1457, 5, 108, 0, 0, 1457, 1458, 5, 100, 0, 0, 1458, 1459, 5, 101, 0, 0, 1459, 1460, 5, 114, 0, 0, 1460, 1461, 5, 83, 0, 0, 1461, 1462, 5, 105, 0, 0, 1462, 1463, 5, 98, 0, 0, 1463, 1464, 5, 108, 0, 0, 1464, 1465, 5, 105, 0, 0, 1465, 1466, 5, 110, 0, 0, 1466, 1467, 5, 103, 0, 0, 1467, 1468, 5, 70, 0, 0, 1468, 1469, 5, 111, 0, 0, 1469, 1470, 5, 110, 0, 0, 1470, 1471, 5, 116, 0, 0, 1471, 1472, 5, 65, 0, 0, 1472, 1473, 5, 116, 0, 0, 1473, 1474, 5, 116, 0, 0, 1474, 1475, 5, 114, 0, 0, 1475, 1476, 5, 105, 0, 0, 1476, 1477, 5, 98, 0, 0, 1477, 1478, 5, 117, 0, 0, 1478, 1479, 5, 116, 0, 0, 1479, 1480, 5, 101, 0, 0, 1480, 219, 1, 0, 0, 0, 1481, 1482, 5, 118, 0, 0, 1482, 1483, 5, 104, 0, 0, 1483, 1484, 5, 101, 0, 0, 1484, 1485, 5, 97, 0, 0, 1485, 221, 1, 0, 0, 0, 1486, 1487, 5, 86, 0, 0, 1487, 1488, 5, 101, 0, 0, 1488, 1489, 5, 114, 0, 0, 1489, 1490, 5, 116, 0, 0, 1490, 1491, 5, 84, 0, 0, 1491, 1492, 5, 121, 0, 0, 1492, 1493, 5, 112, 0, 0, 1493, 1494, 5, 111, 0, 0, 1494, 1495, 5, 65, 0, 0, 1495, 1496, 5, 115, 0, 0, 1496, 1497, 5, 99, 0, 0, 1497, 1498, 5, 101, 0, 0, 1498, 1499, 5, 110, 0, 0, 1499, 1500, 5, 100, 0, 0, 1500, 1501, 5, 101, 0, 0, 1501, 1502, 5, 114, 0, 0, 1502, 223, 1, 0, 0, 0, 1503, 1504, 5, 86, 0, 0, 1504, 1505, 5, 101, 0, 0, 1505, 1506, 5, 114, 0, 0, 1506, 1507, 5, 116, 0, 0, 1507, 1508, 5, 84, 0, 0, 1508, 1509, 5, 121, 0, 0, 1509, 1510, 5, 112, 0, 0, 1510, 1511, 5, 111, 0, 0, 1511, 1512, 5, 68, 0, 0, 1512, 1513, 5, 101, 0, 0, 1513, 1514, 5, 115, 0, 0, 1514, 1515, 5, 99, 0, 0, 1515, 1516, 5, 101, 0, 0, 1516, 1517, 5, 110, 0, 0, 1517, 1518, 5, 100, 0, 0, 1518, 1519, 5, 101, 0, 0, 1519, 1520, 5, 114, 0, 0, 1520, 225, 1, 0, 0, 0, 1521, 1522, 5, 86, 0, 0, 1522, 1523, 5, 101, 0, 0, 1523, 1524, 5, 114, 0, 0, 1524, 1525, 5, 116, 0, 0, 1525, 1526, 5, 84, 0, 0, 1526, 1527, 5, 121, 0, 0, 1527, 1528, 5, 112, 0, 0, 1528, 1529, 5, 111, 0, 0, 1529, 1530, 5, 76, 0, 0, 1530, 1531, 5, 105, 0, 0, 1531, 1532, 5, 110, 0, 0, 1532, 1533, 5, 101, 0, 0, 1533, 1534, 5, 71, 0, 0, 1534, 1535, 5, 97, 0, 0, 1535, 1536, 5, 112, 0, 0, 1536, 227, 1, 0, 0, 0, 1537, 1538, 5, 118, 0, 0, 1538, 1539, 5, 109, 0, 0, 1539, 1540, 5, 116, 0, 0, 1540, 1541, 5, 120, 0, 0, 1541, 229, 1, 0, 0, 0, 1542, 1543, 5, 86, 0, 0, 1543, 1544, 5, 101, 0, 0, 1544, 1545, 5, 114, 0, 0, 1545, 1546, 5, 116, 0, 0, 1546, 1547, 5, 79, 0, 0, 1547, 1548, 5, 114, 0, 0, 1548, 1549, 5, 105, 0, 0, 1549, 1550, 5, 103, 0, 0, 1550, 1551, 5, 105, 0, 0, 1551, 1552, 5, 110, 0, 0, 1552, 1553, 5, 89, 0, 0, 1553, 231, 1, 0, 0, 0, 1554, 1555, 5, 86, 0, 0, 1555, 1556, 5, 101, 0, 0, 1556, 1557, 5, 114, 0, 0, 1557, 1558, 5, 116, 0, 0, 1558, 1559, 5, 65, 0, 0, 1559, 1560, 5, 100, 0, 0, 1560, 1561, 5, 118, 0, 0, 1561, 1562, 5, 97, 0, 0, 1562, 1563, 5, 110, 0, 0, 1563, 1564, 5, 99, 0, 0, 1564, 1565, 5, 101, 0, 0, 1565, 1566, 5, 89, 0, 0, 1566, 233, 1, 0, 0, 0, 1567, 1568, 5, 123, 0, 0, 1568, 235, 1, 0, 0, 0, 1569, 1570, 5, 125, 0, 0, 1570, 237, 1, 0, 0, 0, 1571, 1572, 5, 91, 0, 0, 1572, 239, 1, 0, 0, 0, 1573, 1574, 5, 93, 0, 0, 1574, 241, 1, 0, 0, 0, 1575, 1576, 5, 45, 0, 0, 1576, 243, 1, 0, 0, 0, 1577, 1578, 5, 59, 0, 0, 1578, 245, 1, 0, 0, 0, 1579, 1580, 5, 61, 0, 0, 1580, 247, 1, 0, 0, 0, 1581, 1582, 5, 39, 0, 0, 1582, 249, 1, 0, 0, 0, 1583, 1584, 5, 44, 0, 0, 1584, 251, 1, 0, 0, 0, 1585, 1586, 5, 34, 0, 0, 1586, 1587, 1, 0, 0, 0, 1587, 1588, 6, 123, 3, 0, 1588, 253, 1, 0, 0, 0, 1589, 1590, 7, 2, 0, 0, 1590, 255, 1, 0, 0, 0, 1591, 1594, 3, 254, 124, 0, 1592, 1594, 7, 3, 0, 0, 1593, 1591, 1, 0, 0, 0, 1593, 1592, 1, 0, 0, 0, 1594, 257, 1, 0, 0, 0, 1595, 1598, 3, 256, 125, 0, 1596, 1598, 5, 45, 0, 0, 1597, 1595, 1, 0, 0, 0, 1597, 1596, 1, 0, 0, 0, 1598, 259, 1, 0, 0, 0, 1599, 1600, 5, 64, 0, 0, 1600, 1604, 3, 254, 124, 0, 1601, 1603, 3, 258, 126, 0, 1602, 1601, 1, 0, 0, 0, 1603, 1606, 1, 0, 0, 0, 1604, 1602, 1, 0, 0, 0, 1604, 1605, 1, 0, 0, 0, 1605, 261, 1, 0, 0, 0, 1606, 1604, 1, 0, 0, 0, 1607, 1609, 5, 92, 0, 0, 1608, 1610, 2, 48, 57, 0, 1609, 1608, 1, 0, 0, 0, 1610, 1611, 1, 0, 0, 0, 1611, 1609, 1, 0, 0, 0, 1611, 1612, 1, 0, 0, 0, 1612, 263, 1, 0, 0, 0, 1613, 1616, 3, 258, 126, 0, 1614, 1616, 7, 4, 0, 0, 1615, 1613, 1, 0, 0, 0, 1615, 1614, 1, 0, 0, 0, 1616, 265, 1, 0, 0, 0, 1617, 1618, 5, 92, 0, 0, 1618, 1622, 3, 254, 124, 0, 1619, 1621, 3, 264, 129, 0, 1620, 1619, 1, 0, 0, 0, 1621, 1624, 1, 0, 0, 0, 1622, 1620, 1, 0, 0, 0, 1622, 1623, 1, 0, 0, 0, 1623, 267, 1, 0, 0, 0, 1624, 1622, 1, 0, 0, 0, 1625, 1629, 3, 254, 124, 0, 1626, 1628, 3, 256, 125, 0, 1627, 1626, 1, 0, 0, 0, 1628, 1631, 1, 0, 0, 0, 1629, 1627, 1, 0, 0, 0, 1629, 1630, 1, 0, 0, 0, 1630, 269, 1, 0, 0, 0, 1631, 1629, 1, 0, 0, 0, 1632, 1636, 3, 254, 124, 0, 1633, 1635, 3, 264, 129, 0, 1634, 1633, 1, 0, 0, 0, 1635, 1638, 1, 0, 0, 0, 1636, 1634, 1, 0, 0, 0, 1636, 1637, 1, 0, 0, 0, 1637, 271, 1, 0, 0, 0, 1638, 1636, 1, 0, 0, 0, 1639, 1641, 5, 45, 0, 0, 1640, 1639, 1, 0, 0, 0, 1640, 1641, 1, 0, 0, 0, 1641, 1643, 1, 0, 0, 0, 1642, 1644, 2, 48, 57, 0, 1643, 1642, 1, 0, 0, 0, 1644, 1645, 1, 0, 0, 0, 1645, 1643, 1, 0, 0, 0, 1645, 1646, 1, 0, 0, 0, 1646, 1647, 1, 0, 0, 0, 1647, 1649, 5, 46, 0, 0, 1648, 1650, 2, 48, 57, 0, 1649, 1648, 1, 0, 0, 0, 1650, 1651, 1, 0, 0, 0, 1651, 1649, 1, 0, 0, 0, 1651, 1652, 1, 0, 0, 0, 1652, 273, 1, 0, 0, 0, 1653, 1654, 5, 48, 0, 0, 1654, 1655, 5, 120, 0, 0, 1655, 1657, 1, 0, 0, 0, 1656, 1658, 7, 5, 0, 0, 1657, 1656, 1, 0, 0, 0, 1658, 1659, 1, 0, 0, 0, 1659, 1657, 1, 0, 0, 0, 1659, 1660, 1, 0, 0, 0, 1660, 275, 1, 0, 0, 0, 1661, 1663, 5, 48, 0, 0, 1662, 1664, 2, 48, 55, 0, 1663, 1662, 1, 0, 0, 0, 1664, 1665, 1, 0, 0, 0, 1665, 1663, 1, 0, 0, 0, 1665, 1666, 1, 0, 0, 0, 1666, 277, 1, 0, 0, 0, 1667, 1669, 5, 45, 0, 0, 1668, 1667, 1, 0, 0, 0, 1668, 1669, 1, 0, 0, 0, 1669, 1678, 1, 0, 0, 0, 1670, 1674, 2, 49, 57, 0, 1671, 1673, 2, 48, 57, 0, 1672, 1671, 1, 0, 0, 0, 1673, 1676, 1, 0, 0, 0, 1674, 1672, 1, 0, 0, 0, 1674, 1675, 1, 0, 0, 0, 1675, 1679, 1, 0, 0, 0, 1676, 1674, 1, 0, 0, 0, 1677, 1679, 5, 48, 0, 0, 1678, 1670, 1, 0, 0, 0, 1678, 1677, 1, 0, 0, 0, 1679, 279, 1, 0, 0, 0, 1680, 1681, 7, 6, 0, 0, 1681, 281, 1, 0, 0, 0, 1682, 1685, 3, 280, 137, 0, 1683, 1685, 7, 7, 0, 0, 1684, 1682, 1, 0, 0, 0, 1684, 1683, 1, 0, 0, 0, 1685, 283, 1, 0, 0, 0, 1686, 1688, 3, 280, 137, 0, 1687, 1689, 3, 282, 138, 0, 1688, 1687, 1, 0, 0, 0, 1688, 1689, 1, 0, 0, 0, 1689, 285, 1, 0, 0, 0, 1690, 1692, 7, 1, 0, 0, 1691, 1690, 1, 0, 0, 0, 1692, 1693, 1, 0, 0, 0, 1693, 1691, 1, 0, 0, 0, 1693, 1694, 1, 0, 0, 0, 1694, 1695, 1, 0, 0, 0, 1695, 1696, 6, 140, 1, 0, 1696, 287, 1, 0, 0, 0, 1697, 1701, 3, 280, 137, 0, 1698, 1700, 3, 282, 138, 0, 1699, 1698, 1, 0, 0, 0, 1700, 1703, 1, 0, 0, 0, 1701, 1699, 1, 0, 0, 0, 1701, 1702, 1, 0, 0, 0, 1702, 1704, 1, 0, 0, 0, 1703, 1701, 1, 0, 0, 0, 1704, 1705, 6, 141, 4, 0, 1705, 289, 1, 0, 0, 0, 1706, 1707, 5, 123, 0, 0, 1707, 1708, 1, 0, 0, 0, 1708, 1709, 6, 142, 5, 0, 1709, 291, 1, 0, 0, 0, 1710, 1712, 5, 13, 0, 0, 1711, 1710, 1, 0, 0, 0, 1711, 1712, 1, 0, 0, 0, 1712, 1713, 1, 0, 0, 0, 1713, 1714, 5, 10, 0, 0, 1714, 1715, 5, 125, 0, 0, 1715, 1719, 1, 0, 0, 0, 1716, 1718, 7, 8, 0, 0, 1717, 1716, 1, 0, 0, 0, 1718, 1721, 1, 0, 0, 0, 1719, 1717, 1, 0, 0, 0, 1719, 1720, 1, 0, 0, 0, 1720, 1722, 1, 0, 0, 0, 1721, 1719, 1, 0, 0, 0, 1722, 1726, 3, 280, 137, 0, 1723, 1725, 3, 282, 138, 0, 1724, 1723, 1, 0, 0, 0, 1725, 1728, 1, 0, 0, 0, 1726, 1724, 1, 0, 0, 0, 1726, 1727, 1, 0, 0, 0, 1727, 1732, 1, 0, 0, 0, 1728, 1726, 1, 0, 0, 0, 1729, 1731, 7, 8, 0, 0, 1730, 1729, 1, 0, 0, 0, 1731, 1734, 1, 0, 0, 0, 1732, 1730, 1, 0, 0, 0, 1732, 1733, 1, 0, 0, 0, 1733, 1735, 1, 0, 0, 0, 1734, 1732, 1, 0, 0, 0, 1735, 1736, 5, 59, 0, 0, 1736, 1737, 4, 143, 0, 0, 1737, 1738, 1, 0, 0, 0, 1738, 1739, 6, 143, 6, 0, 1739, 293, 1, 0, 0, 0, 1740, 1742, 5, 13, 0, 0, 1741, 1740, 1, 0, 0, 0, 1741, 1742, 1, 0, 0, 0, 1742, 1743, 1, 0, 0, 0, 1743, 1747, 5, 10, 0, 0, 1744, 1746, 8, 0, 0, 0, 1745, 1744, 1, 0, 0, 0, 1746, 1749, 1, 0, 0, 0, 1747, 1745, 1, 0, 0, 0, 1747, 1748, 1, 0, 0, 0, 1748, 295, 1, 0, 0, 0, 1749, 1747, 1, 0, 0, 0, 1750, 1752, 7, 1, 0, 0, 1751, 1750, 1, 0, 0, 0, 1752, 1753, 1, 0, 0, 0, 1753, 1751, 1, 0, 0, 0, 1753, 1754, 1, 0, 0, 0, 1754, 1755, 1, 0, 0, 0, 1755, 1756, 6, 145, 1, 0, 1756, 297, 1, 0, 0, 0, 1757, 1758, 5, 40, 0, 0, 1758, 1759, 1, 0, 0, 0, 1759, 1760, 6, 146, 7, 0, 1760, 299, 1, 0, 0, 0, 1761, 1763, 8, 9, 0, 0, 1762, 1761, 1, 0, 0, 0, 1763, 1764, 1, 0, 0, 0, 1764, 1762, 1, 0, 0, 0, 1764, 1765, 1, 0, 0, 0, 1765, 301, 1, 0, 0, 0, 1766, 1767, 5, 41, 0, 0, 1767, 1768, 1, 0, 0, 0, 1768, 1769, 6, 148, 6, 0, 1769, 303, 1, 0, 0, 0, 1770, 1772, 8, 10, 0, 0, 1771, 1770, 1, 0, 0, 0, 1772, 1775, 1, 0, 0, 0, 1773, 1771, 1, 0, 0, 0, 1773, 1774, 1, 0, 0, 0, 1774, 305, 1, 0, 0, 0, 1775, 1773, 1, 0, 0, 0, 1776, 1777, 5, 34, 0, 0, 1777, 1778, 1, 0, 0, 0, 1778, 1779, 6, 150, 6, 0, 1779, 307, 1, 0, 0, 0, 37, 0, 1, 2, 3, 4, 5, 331, 339, 1593, 1597, 1604, 1611, 1615, 1622, 1629, 1636, 1640, 1645, 1651, 1659, 1665, 1668, 1674, 1678, 1684, 1688, 1693, 1701, 1711, 1719, 1726, 1732, 1741, 1747, 1753, 1764, 1773, 8, 5, 1, 0, 6, 0, 0, 5, 3, 0, 5, 5, 0, 1, 141, 0, 2, 2, 0, 4, 0, 0, 2, 4, 0] \ No newline at end of file diff --git a/c/makeotf/lib/hotconv/FeatParser.cpp b/c/makeotf/lib/hotconv/FeatParser.cpp index 87e9de648..33b9c930a 100644 --- a/c/makeotf/lib/hotconv/FeatParser.cpp +++ b/c/makeotf/lib/hotconv/FeatParser.cpp @@ -1,5 +1,5 @@ -// Generated from FeatParser.g4 by ANTLR 4.9.3 +// Generated from FeatParser.g4 by ANTLR 4.13.2 #include "FeatParserVisitor.h" @@ -8,26 +8,584 @@ using namespace antlrcpp; + using namespace antlr4; -FeatParser::FeatParser(TokenStream *input) : Parser(input) { - _interpreter = new atn::ParserATNSimulator(this, _atn, _decisionToDFA, _sharedContextCache); +namespace { + +struct FeatParserStaticData final { + FeatParserStaticData(std::vector ruleNames, + std::vector literalNames, + std::vector symbolicNames) + : ruleNames(std::move(ruleNames)), literalNames(std::move(literalNames)), + symbolicNames(std::move(symbolicNames)), + vocabulary(this->literalNames, this->symbolicNames) {} + + FeatParserStaticData(const FeatParserStaticData&) = delete; + FeatParserStaticData(FeatParserStaticData&&) = delete; + FeatParserStaticData& operator=(const FeatParserStaticData&) = delete; + FeatParserStaticData& operator=(FeatParserStaticData&&) = delete; + + std::vector decisionToDFA; + antlr4::atn::PredictionContextCache sharedContextCache; + const std::vector ruleNames; + const std::vector literalNames; + const std::vector symbolicNames; + const antlr4::dfa::Vocabulary vocabulary; + antlr4::atn::SerializedATNView serializedATN; + std::unique_ptr atn; +}; + +::antlr4::internal::OnceFlag featparserParserOnceFlag; +#if ANTLR4_USE_THREAD_LOCAL_CACHE +static thread_local +#endif +std::unique_ptr featparserParserStaticData = nullptr; + +void featparserParserInitialize() { +#if ANTLR4_USE_THREAD_LOCAL_CACHE + if (featparserParserStaticData != nullptr) { + return; + } +#else + assert(featparserParserStaticData == nullptr); +#endif + auto staticData = std::make_unique( + std::vector{ + "file", "topLevelStatement", "include", "glyphClassAssign", "langsysAssign", + "mark_statement", "anchorDef", "valueRecordDef", "featureBlock", "tableBlock", + "anonBlock", "lookupBlockTopLevel", "featureStatement", "lookupBlockOrUse", + "cvParameterBlock", "cvParameterStatement", "cvParameter", "statement", + "featureUse", "scriptAssign", "langAssign", "lookupflagAssign", "lookupflagElement", + "ignoreSubOrPos", "substitute", "position", "valuePattern", "valueRecord", + "valueLiteral", "cursiveElement", "baseToMarkElement", "ligatureMarkElement", + "parameters", "sizemenuname", "featureNames", "subtable", "table_BASE", + "baseStatement", "axisTags", "axisScripts", "baseScript", "table_GDEF", + "gdefStatement", "gdefGlyphClass", "gdefAttach", "gdefLigCaretPos", + "gdefLigCaretIndex", "table_head", "headStatement", "head", "table_hhea", + "hheaStatement", "hhea", "table_vhea", "vheaStatement", "vhea", "table_name", + "nameStatement", "nameID", "table_OS_2", "os_2Statement", "os_2", + "table_STAT", "statStatement", "designAxis", "axisValue", "axisValueStatement", + "axisValueLocation", "axisValueFlags", "elidedFallbackName", "nameEntryStatement", + "elidedFallbackNameID", "nameEntry", "table_vmtx", "vmtxStatement", + "vmtx", "anchor", "lookupPattern", "lookupPatternElement", "pattern", + "patternElement", "glyphClassOptional", "glyphClass", "gcLiteral", + "gcLiteralElement", "glyph", "glyphName", "label", "tag", "fixedNum", + "genNum", "featureFile", "statementFile", "cvStatementFile", "baseFile", + "headFile", "hheaFile", "vheaFile", "gdefFile", "nameFile", "vmtxFile", + "os_2File", "statFile", "axisValueFile", "nameEntryFile", "subtok", + "revtok", "anontok", "enumtok", "postok", "markligtok" + }, + std::vector{ + "", "'anon'", "'anonymous'", "", "", "'include'", "'feature'", "'table'", + "'script'", "'language'", "'languagesystem'", "'subtable'", "'lookup'", + "'lookupflag'", "'.notdef'", "'RightToLeft'", "'IgnoreBaseGlyphs'", + "'IgnoreLigatures'", "'IgnoreMarks'", "'UseMarkFilteringSet'", "'MarkAttachmentType'", + "'excludeDFLT'", "'includeDFLT'", "'exclude_dflt'", "'include_dflt'", + "'useExtension'", "'<'", "'>'", "'enumerate'", "'enum'", "'except'", + "'ignore'", "'substitute'", "'sub'", "'reversesub'", "'rsub'", "'by'", + "'from'", "'position'", "'pos'", "'parameters'", "'featureNames'", + "'cvParameters'", "'FeatUILabelNameID'", "'FeatUITooltipTextNameID'", + "'SampleTextNameID'", "'ParamUILabelNameID'", "'Character'", "'sizemenuname'", + "'contourpoint'", "'anchor'", "'anchorDef'", "'valueRecordDef'", "'mark'", + "'markClass'", "'cursive'", "'base'", "'ligature'", "'lig'", "'ligComponent'", + "'NULL'", "'BASE'", "'HorizAxis.BaseTagList'", "'VertAxis.BaseTagList'", + "'HorizAxis.BaseScriptList'", "'VertAxis.BaseScriptList'", "'GDEF'", + "'GlyphClassDef'", "'Attach'", "'LigatureCaretByPos'", "'LigatureCaretByIndex'", + "'head'", "'FontRevision'", "'hhea'", "'Ascender'", "'Descender'", + "'LineGap'", "'CaretOffset'", "'name'", "'nameid'", "'OS/2'", "'FSType'", + "'fsType'", "'LowerOpSize'", "'UpperOpSize'", "'Panose'", "'TypoAscender'", + "'TypoDescender'", "'TypoLineGap'", "'winAscent'", "'winDescent'", + "'XHeight'", "'CapHeight'", "'WeightClass'", "'WidthClass'", "'Vendor'", + "'UnicodeRange'", "'CodePageRange'", "'FamilyClass'", "'STAT'", "'ElidedFallbackName'", + "'ElidedFallbackNameID'", "'DesignAxis'", "'AxisValue'", "'flag'", + "'location'", "'ElidableAxisValueName'", "'OlderSiblingFontAttribute'", + "'vhea'", "'VertTypoAscender'", "'VertTypoDescender'", "'VertTypoLineGap'", + "'vmtx'", "'VertOriginY'", "'VertAdvanceY'", "", "'}'", "'['", "']'", + "'-'", "';'", "'='", "'''", "','", "", "", "", "", "", "", "", "", + "", "", "", "", "", "", "", "", "", "'('", "", "')'" + }, + std::vector{ + "", "ANON", "ANON_v", "COMMENT", "WHITESPACE", "INCLUDE", "FEATURE", + "TABLE", "SCRIPT", "LANGUAGE", "LANGSYS", "SUBTABLE", "LOOKUP", "LOOKUPFLAG", + "NOTDEF", "RIGHT_TO_LEFT", "IGNORE_BASE_GLYPHS", "IGNORE_LIGATURES", + "IGNORE_MARKS", "USE_MARK_FILTERING_SET", "MARK_ATTACHMENT_TYPE", + "EXCLUDE_DFLT", "INCLUDE_DFLT", "EXCLUDE_dflt", "INCLUDE_dflt", "USE_EXTENSION", + "BEGINVALUE", "ENDVALUE", "ENUMERATE", "ENUMERATE_v", "EXCEPT", "IGNORE", + "SUBSTITUTE", "SUBSTITUTE_v", "REVERSE", "REVERSE_v", "BY", "FROM", + "POSITION", "POSITION_v", "PARAMETERS", "FEATURE_NAMES", "CV_PARAMETERS", + "CV_UI_LABEL", "CV_TOOLTIP", "CV_SAMPLE_TEXT", "CV_PARAM_LABEL", "CV_CHARACTER", + "SIZEMENUNAME", "CONTOURPOINT", "ANCHOR", "ANCHOR_DEF", "VALUE_RECORD_DEF", + "MARK", "MARK_CLASS", "CURSIVE", "MARKBASE", "MARKLIG", "MARKLIG_v", + "LIG_COMPONENT", "KNULL", "BASE", "HA_BTL", "VA_BTL", "HA_BSL", "VA_BSL", + "GDEF", "GLYPH_CLASS_DEF", "ATTACH", "LIG_CARET_BY_POS", "LIG_CARET_BY_IDX", + "HEAD", "FONT_REVISION", "HHEA", "ASCENDER", "DESCENDER", "LINE_GAP", + "CARET_OFFSET", "NAME", "NAMEID", "OS_2", "FS_TYPE", "FS_TYPE_v", + "OS2_LOWER_OP_SIZE", "OS2_UPPER_OP_SIZE", "PANOSE", "TYPO_ASCENDER", + "TYPO_DESCENDER", "TYPO_LINE_GAP", "WIN_ASCENT", "WIN_DESCENT", "X_HEIGHT", + "CAP_HEIGHT", "WEIGHT_CLASS", "WIDTH_CLASS", "VENDOR", "UNICODE_RANGE", + "CODE_PAGE_RANGE", "FAMILY_CLASS", "STAT", "ELIDED_FALLBACK_NAME", + "ELIDED_FALLBACK_NAME_ID", "DESIGN_AXIS", "AXIS_VALUE", "FLAG", "LOCATION", + "AXIS_EAVN", "AXIS_OSFA", "VHEA", "VERT_TYPO_ASCENDER", "VERT_TYPO_DESCENDER", + "VERT_TYPO_LINE_GAP", "VMTX", "VERT_ORIGIN_Y", "VERT_ADVANCE_Y", "LCBRACE", + "RCBRACE", "LBRACKET", "RBRACKET", "HYPHEN", "SEMI", "EQUALS", "MARKER", + "COMMA", "QUOTE", "GCLASS", "CID", "ESCGNAME", "NAMELABEL", "EXTNAME", + "POINTNUM", "NUMEXT", "NUMOCT", "NUM", "CATCHTAG", "A_WHITESPACE", + "A_LABEL", "A_LBRACE", "A_CLOSE", "A_LINE", "I_WHITESPACE", "I_RPAREN", + "IFILE", "I_LPAREN", "STRVAL", "EQUOTE" + } + ); + static const int32_t serializedATNSegment[] = { + 4,1,145,1156,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6,7,6, + 2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,2,13,7,13,2,14, + 7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19,7,19,2,20,7,20,2,21, + 7,21,2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25,2,26,7,26,2,27,7,27,2,28, + 7,28,2,29,7,29,2,30,7,30,2,31,7,31,2,32,7,32,2,33,7,33,2,34,7,34,2,35, + 7,35,2,36,7,36,2,37,7,37,2,38,7,38,2,39,7,39,2,40,7,40,2,41,7,41,2,42, + 7,42,2,43,7,43,2,44,7,44,2,45,7,45,2,46,7,46,2,47,7,47,2,48,7,48,2,49, + 7,49,2,50,7,50,2,51,7,51,2,52,7,52,2,53,7,53,2,54,7,54,2,55,7,55,2,56, + 7,56,2,57,7,57,2,58,7,58,2,59,7,59,2,60,7,60,2,61,7,61,2,62,7,62,2,63, + 7,63,2,64,7,64,2,65,7,65,2,66,7,66,2,67,7,67,2,68,7,68,2,69,7,69,2,70, + 7,70,2,71,7,71,2,72,7,72,2,73,7,73,2,74,7,74,2,75,7,75,2,76,7,76,2,77, + 7,77,2,78,7,78,2,79,7,79,2,80,7,80,2,81,7,81,2,82,7,82,2,83,7,83,2,84, + 7,84,2,85,7,85,2,86,7,86,2,87,7,87,2,88,7,88,2,89,7,89,2,90,7,90,2,91, + 7,91,2,92,7,92,2,93,7,93,2,94,7,94,2,95,7,95,2,96,7,96,2,97,7,97,2,98, + 7,98,2,99,7,99,2,100,7,100,2,101,7,101,2,102,7,102,2,103,7,103,2,104, + 7,104,2,105,7,105,2,106,7,106,2,107,7,107,2,108,7,108,2,109,7,109,2,110, + 7,110,1,0,1,0,1,0,1,0,1,0,5,0,228,8,0,10,0,12,0,231,9,0,1,0,1,0,1,1,1, + 1,1,1,1,1,1,1,1,1,3,1,241,8,1,1,1,1,1,1,2,1,2,1,2,1,2,1,2,1,3,1,3,1,3, + 1,3,1,4,1,4,1,4,1,4,1,5,1,5,1,5,3,5,261,8,5,1,5,1,5,1,5,1,6,1,6,1,6,1, + 6,1,6,3,6,271,8,6,1,6,1,6,1,7,1,7,1,7,1,7,1,8,1,8,1,8,3,8,282,8,8,1,8, + 1,8,4,8,286,8,8,11,8,12,8,287,1,8,1,8,1,8,1,8,1,9,1,9,1,9,1,9,1,9,1,9, + 1,9,1,9,1,9,1,9,3,9,304,8,9,1,10,1,10,1,10,1,10,5,10,310,8,10,10,10,12, + 10,313,9,10,1,10,1,10,1,11,1,11,1,11,3,11,320,8,11,1,11,1,11,4,11,324, + 8,11,11,11,12,11,325,1,11,1,11,1,11,1,11,1,12,1,12,1,12,3,12,335,8,12, + 1,13,1,13,1,13,3,13,340,8,13,1,13,1,13,4,13,344,8,13,11,13,12,13,345, + 1,13,1,13,1,13,3,13,351,8,13,1,13,1,13,1,14,1,14,1,14,5,14,358,8,14,10, + 14,12,14,361,9,14,1,14,1,14,1,14,1,15,1,15,3,15,368,8,15,1,15,1,15,1, + 16,1,16,1,16,4,16,375,8,16,11,16,12,16,376,1,16,1,16,1,16,1,16,3,16,383, + 8,16,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17, + 1,17,3,17,399,8,17,1,17,1,17,1,18,1,18,1,18,1,19,1,19,1,19,1,20,1,20, + 1,20,3,20,412,8,20,1,21,1,21,1,21,4,21,417,8,21,11,21,12,21,418,3,21, + 421,8,21,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,3,22,431,8,22,1,23,1, + 23,1,23,1,23,3,23,437,8,23,1,23,1,23,1,23,5,23,442,8,23,10,23,12,23,445, + 9,23,1,24,1,24,1,24,1,24,5,24,451,8,24,10,24,12,24,454,9,24,3,24,456, + 8,24,1,24,1,24,1,24,1,24,1,24,3,24,463,8,24,3,24,465,8,24,1,24,1,24,1, + 24,1,24,1,24,3,24,472,8,24,3,24,474,8,24,3,24,476,8,24,1,25,3,25,479, + 8,25,1,25,1,25,3,25,483,8,25,1,25,1,25,5,25,487,8,25,10,25,12,25,490, + 9,25,1,25,1,25,4,25,494,8,25,11,25,12,25,495,1,25,5,25,499,8,25,10,25, + 12,25,502,9,25,1,25,1,25,1,25,3,25,507,8,25,1,25,1,25,1,25,4,25,512,8, + 25,11,25,12,25,513,1,25,3,25,517,8,25,1,25,1,25,1,25,4,25,522,8,25,11, + 25,12,25,523,1,25,3,25,527,8,25,1,25,1,25,1,25,4,25,532,8,25,11,25,12, + 25,533,1,25,3,25,537,8,25,3,25,539,8,25,1,26,1,26,3,26,543,8,26,1,27, + 1,27,1,27,1,27,1,27,3,27,550,8,27,1,28,1,28,1,28,1,28,1,28,1,28,1,28, + 3,28,559,8,28,1,29,1,29,1,29,1,29,1,30,1,30,1,30,1,30,3,30,569,8,30,1, + 31,1,31,1,31,3,31,574,8,31,1,31,3,31,577,8,31,1,31,3,31,580,8,31,1,32, + 1,32,4,32,584,8,32,11,32,12,32,585,1,33,1,33,1,33,1,33,1,33,3,33,593, + 8,33,3,33,595,8,33,1,33,1,33,1,33,1,33,1,34,1,34,1,34,4,34,604,8,34,11, + 34,12,34,605,1,34,1,34,1,35,1,35,1,36,1,36,1,36,4,36,615,8,36,11,36,12, + 36,616,1,36,1,36,1,36,1,36,1,37,1,37,1,37,3,37,626,8,37,1,37,1,37,1,38, + 1,38,4,38,632,8,38,11,38,12,38,633,1,39,1,39,1,39,1,39,5,39,640,8,39, + 10,39,12,39,643,9,39,1,40,1,40,1,40,4,40,648,8,40,11,40,12,40,649,1,41, + 1,41,1,41,4,41,655,8,41,11,41,12,41,656,1,41,1,41,1,41,1,41,1,42,1,42, + 1,42,1,42,1,42,3,42,668,8,42,1,42,1,42,1,43,1,43,1,43,1,43,1,43,1,43, + 1,43,1,43,1,43,1,44,1,44,1,44,4,44,684,8,44,11,44,12,44,685,1,45,1,45, + 1,45,4,45,691,8,45,11,45,12,45,692,1,46,1,46,1,46,4,46,698,8,46,11,46, + 12,46,699,1,47,1,47,1,47,4,47,705,8,47,11,47,12,47,706,1,47,1,47,1,47, + 1,47,1,48,1,48,3,48,715,8,48,1,48,1,48,1,49,1,49,1,49,1,50,1,50,1,50, + 5,50,725,8,50,10,50,12,50,728,9,50,1,50,1,50,1,50,1,50,1,51,1,51,3,51, + 736,8,51,1,51,1,51,1,52,1,52,1,52,1,53,1,53,1,53,5,53,746,8,53,10,53, + 12,53,749,9,53,1,53,1,53,1,53,1,53,1,54,1,54,3,54,757,8,54,1,54,1,54, + 1,55,1,55,1,55,1,56,1,56,1,56,4,56,767,8,56,11,56,12,56,768,1,56,1,56, + 1,56,1,56,1,57,1,57,3,57,777,8,57,1,57,1,57,1,58,1,58,1,58,1,58,1,58, + 1,58,3,58,787,8,58,3,58,789,8,58,1,58,1,58,1,58,1,58,1,59,1,59,1,59,4, + 59,798,8,59,11,59,12,59,799,1,59,1,59,1,59,1,59,1,60,1,60,3,60,808,8, + 60,1,60,1,60,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1, + 61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,4,61,835,8, + 61,11,61,12,61,836,3,61,839,8,61,1,62,1,62,1,62,4,62,844,8,62,11,62,12, + 62,845,1,62,1,62,1,62,1,62,1,63,1,63,1,63,1,63,1,63,3,63,857,8,63,1,63, + 1,63,1,64,1,64,1,64,1,64,1,64,4,64,866,8,64,11,64,12,64,867,1,64,1,64, + 1,65,1,65,1,65,4,65,875,8,65,11,65,12,65,876,1,65,1,65,1,66,1,66,1,66, + 1,66,3,66,885,8,66,1,66,1,66,1,67,1,67,1,67,1,67,1,67,3,67,894,8,67,3, + 67,896,8,67,1,68,1,68,4,68,900,8,68,11,68,12,68,901,1,69,1,69,1,69,4, + 69,907,8,69,11,69,12,69,908,1,69,1,69,1,70,1,70,3,70,915,8,70,1,70,1, + 70,1,71,1,71,1,71,1,72,1,72,1,72,1,72,1,72,3,72,927,8,72,3,72,929,8,72, + 1,72,1,72,1,72,1,72,1,73,1,73,1,73,4,73,938,8,73,11,73,12,73,939,1,73, + 1,73,1,73,1,73,1,74,1,74,3,74,948,8,74,1,74,1,74,1,75,1,75,1,75,1,75, + 1,76,1,76,1,76,1,76,1,76,1,76,3,76,962,8,76,1,76,1,76,3,76,966,8,76,1, + 76,1,76,1,77,4,77,971,8,77,11,77,12,77,972,1,78,1,78,1,78,5,78,978,8, + 78,10,78,12,78,981,9,78,1,79,4,79,984,8,79,11,79,12,79,985,1,80,1,80, + 3,80,990,8,80,1,80,3,80,993,8,80,1,81,3,81,996,8,81,1,82,1,82,3,82,1000, + 8,82,1,83,1,83,4,83,1004,8,83,11,83,12,83,1005,1,83,1,83,1,84,1,84,1, + 84,3,84,1013,8,84,1,84,3,84,1016,8,84,1,85,1,85,3,85,1020,8,85,1,86,1, + 86,1,87,1,87,1,88,1,88,1,89,1,89,1,90,1,90,1,91,5,91,1033,8,91,10,91, + 12,91,1036,9,91,1,91,1,91,1,92,5,92,1041,8,92,10,92,12,92,1044,9,92,1, + 92,1,92,1,93,5,93,1049,8,93,10,93,12,93,1052,9,93,1,93,1,93,1,94,5,94, + 1057,8,94,10,94,12,94,1060,9,94,1,94,1,94,1,95,5,95,1065,8,95,10,95,12, + 95,1068,9,95,1,95,1,95,1,96,5,96,1073,8,96,10,96,12,96,1076,9,96,1,96, + 1,96,1,97,5,97,1081,8,97,10,97,12,97,1084,9,97,1,97,1,97,1,98,5,98,1089, + 8,98,10,98,12,98,1092,9,98,1,98,1,98,1,99,5,99,1097,8,99,10,99,12,99, + 1100,9,99,1,99,1,99,1,100,5,100,1105,8,100,10,100,12,100,1108,9,100,1, + 100,1,100,1,101,5,101,1113,8,101,10,101,12,101,1116,9,101,1,101,1,101, + 1,102,5,102,1121,8,102,10,102,12,102,1124,9,102,1,102,1,102,1,103,5,103, + 1129,8,103,10,103,12,103,1132,9,103,1,103,1,103,1,104,5,104,1137,8,104, + 10,104,12,104,1140,9,104,1,104,1,104,1,105,1,105,1,106,1,106,1,107,1, + 107,1,108,1,108,1,109,1,109,1,110,1,110,1,110,0,0,111,0,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,204,206,208,210,212, + 214,216,218,220,0,23,1,0,43,46,1,0,21,24,1,0,36,37,1,0,62,63,1,0,64,65, + 1,0,74,77,1,0,109,111,1,0,86,92,2,0,81,84,93,94,1,0,96,97,1,0,106,107, + 1,0,113,114,2,0,14,14,127,129,2,0,53,53,128,128,3,0,53,53,128,129,134, + 134,2,0,130,130,133,133,1,0,131,133,1,0,32,33,1,0,34,35,1,0,1,2,1,0,28, + 29,1,0,38,39,1,0,57,58,1216,0,229,1,0,0,0,2,240,1,0,0,0,4,244,1,0,0,0, + 6,249,1,0,0,0,8,253,1,0,0,0,10,257,1,0,0,0,12,265,1,0,0,0,14,274,1,0, + 0,0,16,278,1,0,0,0,18,293,1,0,0,0,20,305,1,0,0,0,22,316,1,0,0,0,24,334, + 1,0,0,0,26,336,1,0,0,0,28,354,1,0,0,0,30,367,1,0,0,0,32,382,1,0,0,0,34, + 398,1,0,0,0,36,402,1,0,0,0,38,405,1,0,0,0,40,408,1,0,0,0,42,413,1,0,0, + 0,44,430,1,0,0,0,46,432,1,0,0,0,48,455,1,0,0,0,50,478,1,0,0,0,52,540, + 1,0,0,0,54,549,1,0,0,0,56,558,1,0,0,0,58,560,1,0,0,0,60,564,1,0,0,0,62, + 570,1,0,0,0,64,581,1,0,0,0,66,587,1,0,0,0,68,600,1,0,0,0,70,609,1,0,0, + 0,72,611,1,0,0,0,74,625,1,0,0,0,76,629,1,0,0,0,78,635,1,0,0,0,80,644, + 1,0,0,0,82,651,1,0,0,0,84,667,1,0,0,0,86,671,1,0,0,0,88,680,1,0,0,0,90, + 687,1,0,0,0,92,694,1,0,0,0,94,701,1,0,0,0,96,714,1,0,0,0,98,718,1,0,0, + 0,100,721,1,0,0,0,102,735,1,0,0,0,104,739,1,0,0,0,106,742,1,0,0,0,108, + 756,1,0,0,0,110,760,1,0,0,0,112,763,1,0,0,0,114,776,1,0,0,0,116,780,1, + 0,0,0,118,794,1,0,0,0,120,807,1,0,0,0,122,838,1,0,0,0,124,840,1,0,0,0, + 126,856,1,0,0,0,128,860,1,0,0,0,130,871,1,0,0,0,132,884,1,0,0,0,134,888, + 1,0,0,0,136,897,1,0,0,0,138,903,1,0,0,0,140,914,1,0,0,0,142,918,1,0,0, + 0,144,921,1,0,0,0,146,934,1,0,0,0,148,947,1,0,0,0,150,951,1,0,0,0,152, + 955,1,0,0,0,154,970,1,0,0,0,156,974,1,0,0,0,158,983,1,0,0,0,160,989,1, + 0,0,0,162,995,1,0,0,0,164,999,1,0,0,0,166,1001,1,0,0,0,168,1015,1,0,0, + 0,170,1019,1,0,0,0,172,1021,1,0,0,0,174,1023,1,0,0,0,176,1025,1,0,0,0, + 178,1027,1,0,0,0,180,1029,1,0,0,0,182,1034,1,0,0,0,184,1042,1,0,0,0,186, + 1050,1,0,0,0,188,1058,1,0,0,0,190,1066,1,0,0,0,192,1074,1,0,0,0,194,1082, + 1,0,0,0,196,1090,1,0,0,0,198,1098,1,0,0,0,200,1106,1,0,0,0,202,1114,1, + 0,0,0,204,1122,1,0,0,0,206,1130,1,0,0,0,208,1138,1,0,0,0,210,1143,1,0, + 0,0,212,1145,1,0,0,0,214,1147,1,0,0,0,216,1149,1,0,0,0,218,1151,1,0,0, + 0,220,1153,1,0,0,0,222,228,3,2,1,0,223,228,3,16,8,0,224,228,3,18,9,0, + 225,228,3,20,10,0,226,228,3,22,11,0,227,222,1,0,0,0,227,223,1,0,0,0,227, + 224,1,0,0,0,227,225,1,0,0,0,227,226,1,0,0,0,228,231,1,0,0,0,229,227,1, + 0,0,0,229,230,1,0,0,0,230,232,1,0,0,0,231,229,1,0,0,0,232,233,5,0,0,1, + 233,1,1,0,0,0,234,241,3,4,2,0,235,241,3,6,3,0,236,241,3,8,4,0,237,241, + 3,10,5,0,238,241,3,12,6,0,239,241,3,14,7,0,240,234,1,0,0,0,240,235,1, + 0,0,0,240,236,1,0,0,0,240,237,1,0,0,0,240,238,1,0,0,0,240,239,1,0,0,0, + 241,242,1,0,0,0,242,243,5,120,0,0,243,3,1,0,0,0,244,245,5,5,0,0,245,246, + 5,141,0,0,246,247,5,142,0,0,247,248,5,143,0,0,248,5,1,0,0,0,249,250,5, + 125,0,0,250,251,5,121,0,0,251,252,3,164,82,0,252,7,1,0,0,0,253,254,5, + 10,0,0,254,255,3,176,88,0,255,256,3,176,88,0,256,9,1,0,0,0,257,260,5, + 54,0,0,258,261,3,170,85,0,259,261,3,164,82,0,260,258,1,0,0,0,260,259, + 1,0,0,0,261,262,1,0,0,0,262,263,3,152,76,0,263,264,5,125,0,0,264,11,1, + 0,0,0,265,266,5,51,0,0,266,267,5,133,0,0,267,270,5,133,0,0,268,269,5, + 49,0,0,269,271,5,133,0,0,270,268,1,0,0,0,270,271,1,0,0,0,271,272,1,0, + 0,0,272,273,3,174,87,0,273,13,1,0,0,0,274,275,5,52,0,0,275,276,3,56,28, + 0,276,277,3,174,87,0,277,15,1,0,0,0,278,279,5,6,0,0,279,281,3,176,88, + 0,280,282,5,25,0,0,281,280,1,0,0,0,281,282,1,0,0,0,282,283,1,0,0,0,283, + 285,5,115,0,0,284,286,3,24,12,0,285,284,1,0,0,0,286,287,1,0,0,0,287,285, + 1,0,0,0,287,288,1,0,0,0,288,289,1,0,0,0,289,290,5,116,0,0,290,291,3,176, + 88,0,291,292,5,120,0,0,292,17,1,0,0,0,293,303,5,7,0,0,294,304,3,72,36, + 0,295,304,3,82,41,0,296,304,3,94,47,0,297,304,3,100,50,0,298,304,3,106, + 53,0,299,304,3,112,56,0,300,304,3,118,59,0,301,304,3,124,62,0,302,304, + 3,146,73,0,303,294,1,0,0,0,303,295,1,0,0,0,303,296,1,0,0,0,303,297,1, + 0,0,0,303,298,1,0,0,0,303,299,1,0,0,0,303,300,1,0,0,0,303,301,1,0,0,0, + 303,302,1,0,0,0,304,19,1,0,0,0,305,306,3,214,107,0,306,307,5,136,0,0, + 307,311,5,137,0,0,308,310,5,139,0,0,309,308,1,0,0,0,310,313,1,0,0,0,311, + 309,1,0,0,0,311,312,1,0,0,0,312,314,1,0,0,0,313,311,1,0,0,0,314,315,5, + 138,0,0,315,21,1,0,0,0,316,317,5,12,0,0,317,319,3,174,87,0,318,320,5, + 25,0,0,319,318,1,0,0,0,319,320,1,0,0,0,320,321,1,0,0,0,321,323,5,115, + 0,0,322,324,3,34,17,0,323,322,1,0,0,0,324,325,1,0,0,0,325,323,1,0,0,0, + 325,326,1,0,0,0,326,327,1,0,0,0,327,328,5,116,0,0,328,329,3,174,87,0, + 329,330,5,120,0,0,330,23,1,0,0,0,331,335,3,34,17,0,332,335,3,26,13,0, + 333,335,3,28,14,0,334,331,1,0,0,0,334,332,1,0,0,0,334,333,1,0,0,0,335, + 25,1,0,0,0,336,337,5,12,0,0,337,350,3,174,87,0,338,340,5,25,0,0,339,338, + 1,0,0,0,339,340,1,0,0,0,340,341,1,0,0,0,341,343,5,115,0,0,342,344,3,34, + 17,0,343,342,1,0,0,0,344,345,1,0,0,0,345,343,1,0,0,0,345,346,1,0,0,0, + 346,347,1,0,0,0,347,348,5,116,0,0,348,349,3,174,87,0,349,351,1,0,0,0, + 350,339,1,0,0,0,350,351,1,0,0,0,351,352,1,0,0,0,352,353,5,120,0,0,353, + 27,1,0,0,0,354,355,5,42,0,0,355,359,5,115,0,0,356,358,3,30,15,0,357,356, + 1,0,0,0,358,361,1,0,0,0,359,357,1,0,0,0,359,360,1,0,0,0,360,362,1,0,0, + 0,361,359,1,0,0,0,362,363,5,116,0,0,363,364,5,120,0,0,364,29,1,0,0,0, + 365,368,3,32,16,0,366,368,3,4,2,0,367,365,1,0,0,0,367,366,1,0,0,0,368, + 369,1,0,0,0,369,370,5,120,0,0,370,31,1,0,0,0,371,372,7,0,0,0,372,374, + 5,115,0,0,373,375,3,140,70,0,374,373,1,0,0,0,375,376,1,0,0,0,376,374, + 1,0,0,0,376,377,1,0,0,0,377,378,1,0,0,0,378,379,5,116,0,0,379,383,1,0, + 0,0,380,381,5,47,0,0,381,383,3,180,90,0,382,371,1,0,0,0,382,380,1,0,0, + 0,383,33,1,0,0,0,384,399,3,36,18,0,385,399,3,38,19,0,386,399,3,40,20, + 0,387,399,3,42,21,0,388,399,3,6,3,0,389,399,3,46,23,0,390,399,3,48,24, + 0,391,399,3,10,5,0,392,399,3,50,25,0,393,399,3,64,32,0,394,399,3,66,33, + 0,395,399,3,68,34,0,396,399,3,70,35,0,397,399,3,4,2,0,398,384,1,0,0,0, + 398,385,1,0,0,0,398,386,1,0,0,0,398,387,1,0,0,0,398,388,1,0,0,0,398,389, + 1,0,0,0,398,390,1,0,0,0,398,391,1,0,0,0,398,392,1,0,0,0,398,393,1,0,0, + 0,398,394,1,0,0,0,398,395,1,0,0,0,398,396,1,0,0,0,398,397,1,0,0,0,399, + 400,1,0,0,0,400,401,5,120,0,0,401,35,1,0,0,0,402,403,5,6,0,0,403,404, + 3,176,88,0,404,37,1,0,0,0,405,406,5,8,0,0,406,407,3,176,88,0,407,39,1, + 0,0,0,408,409,5,9,0,0,409,411,3,176,88,0,410,412,7,1,0,0,411,410,1,0, + 0,0,411,412,1,0,0,0,412,41,1,0,0,0,413,420,5,13,0,0,414,421,5,133,0,0, + 415,417,3,44,22,0,416,415,1,0,0,0,417,418,1,0,0,0,418,416,1,0,0,0,418, + 419,1,0,0,0,419,421,1,0,0,0,420,414,1,0,0,0,420,416,1,0,0,0,421,43,1, + 0,0,0,422,431,5,15,0,0,423,431,5,16,0,0,424,431,5,17,0,0,425,431,5,18, + 0,0,426,427,5,20,0,0,427,431,3,164,82,0,428,429,5,19,0,0,429,431,3,164, + 82,0,430,422,1,0,0,0,430,423,1,0,0,0,430,424,1,0,0,0,430,425,1,0,0,0, + 430,426,1,0,0,0,430,428,1,0,0,0,431,45,1,0,0,0,432,436,5,31,0,0,433,437, + 3,210,105,0,434,437,3,212,106,0,435,437,3,218,109,0,436,433,1,0,0,0,436, + 434,1,0,0,0,436,435,1,0,0,0,437,438,1,0,0,0,438,443,3,154,77,0,439,440, + 5,123,0,0,440,442,3,154,77,0,441,439,1,0,0,0,442,445,1,0,0,0,443,441, + 1,0,0,0,443,444,1,0,0,0,444,47,1,0,0,0,445,443,1,0,0,0,446,447,5,30,0, + 0,447,452,3,154,77,0,448,449,5,123,0,0,449,451,3,154,77,0,450,448,1,0, + 0,0,451,454,1,0,0,0,452,450,1,0,0,0,452,453,1,0,0,0,453,456,1,0,0,0,454, + 452,1,0,0,0,455,446,1,0,0,0,455,456,1,0,0,0,456,475,1,0,0,0,457,458,3, + 212,106,0,458,464,3,154,77,0,459,462,5,36,0,0,460,463,5,60,0,0,461,463, + 3,154,77,0,462,460,1,0,0,0,462,461,1,0,0,0,463,465,1,0,0,0,464,459,1, + 0,0,0,464,465,1,0,0,0,465,476,1,0,0,0,466,467,3,210,105,0,467,473,3,154, + 77,0,468,471,7,2,0,0,469,472,5,60,0,0,470,472,3,154,77,0,471,469,1,0, + 0,0,471,470,1,0,0,0,472,474,1,0,0,0,473,468,1,0,0,0,473,474,1,0,0,0,474, + 476,1,0,0,0,475,457,1,0,0,0,475,466,1,0,0,0,476,49,1,0,0,0,477,479,3, + 216,108,0,478,477,1,0,0,0,478,479,1,0,0,0,479,480,1,0,0,0,480,482,3,218, + 109,0,481,483,3,158,79,0,482,481,1,0,0,0,482,483,1,0,0,0,483,538,1,0, + 0,0,484,488,3,54,27,0,485,487,3,52,26,0,486,485,1,0,0,0,487,490,1,0,0, + 0,488,486,1,0,0,0,488,489,1,0,0,0,489,539,1,0,0,0,490,488,1,0,0,0,491, + 492,5,12,0,0,492,494,3,174,87,0,493,491,1,0,0,0,494,495,1,0,0,0,495,493, + 1,0,0,0,495,496,1,0,0,0,496,500,1,0,0,0,497,499,3,156,78,0,498,497,1, + 0,0,0,499,502,1,0,0,0,500,498,1,0,0,0,500,501,1,0,0,0,501,539,1,0,0,0, + 502,500,1,0,0,0,503,504,5,55,0,0,504,506,3,58,29,0,505,507,3,158,79,0, + 506,505,1,0,0,0,506,507,1,0,0,0,507,539,1,0,0,0,508,509,5,56,0,0,509, + 511,3,158,79,0,510,512,3,60,30,0,511,510,1,0,0,0,512,513,1,0,0,0,513, + 511,1,0,0,0,513,514,1,0,0,0,514,516,1,0,0,0,515,517,3,158,79,0,516,515, + 1,0,0,0,516,517,1,0,0,0,517,539,1,0,0,0,518,519,3,220,110,0,519,521,3, + 158,79,0,520,522,3,62,31,0,521,520,1,0,0,0,522,523,1,0,0,0,523,521,1, + 0,0,0,523,524,1,0,0,0,524,526,1,0,0,0,525,527,3,158,79,0,526,525,1,0, + 0,0,526,527,1,0,0,0,527,539,1,0,0,0,528,529,5,53,0,0,529,531,3,158,79, + 0,530,532,3,60,30,0,531,530,1,0,0,0,532,533,1,0,0,0,533,531,1,0,0,0,533, + 534,1,0,0,0,534,536,1,0,0,0,535,537,3,158,79,0,536,535,1,0,0,0,536,537, + 1,0,0,0,537,539,1,0,0,0,538,484,1,0,0,0,538,493,1,0,0,0,538,503,1,0,0, + 0,538,508,1,0,0,0,538,518,1,0,0,0,538,528,1,0,0,0,539,51,1,0,0,0,540, + 542,3,160,80,0,541,543,3,54,27,0,542,541,1,0,0,0,542,543,1,0,0,0,543, + 53,1,0,0,0,544,545,5,26,0,0,545,546,3,174,87,0,546,547,5,27,0,0,547,550, + 1,0,0,0,548,550,3,56,28,0,549,544,1,0,0,0,549,548,1,0,0,0,550,55,1,0, + 0,0,551,552,5,26,0,0,552,553,5,133,0,0,553,554,5,133,0,0,554,555,5,133, + 0,0,555,556,5,133,0,0,556,559,5,27,0,0,557,559,5,133,0,0,558,551,1,0, + 0,0,558,557,1,0,0,0,559,57,1,0,0,0,560,561,3,160,80,0,561,562,3,152,76, + 0,562,563,3,152,76,0,563,59,1,0,0,0,564,565,3,152,76,0,565,566,5,53,0, + 0,566,568,5,125,0,0,567,569,5,122,0,0,568,567,1,0,0,0,568,569,1,0,0,0, + 569,61,1,0,0,0,570,573,3,152,76,0,571,572,5,53,0,0,572,574,5,125,0,0, + 573,571,1,0,0,0,573,574,1,0,0,0,574,576,1,0,0,0,575,577,5,59,0,0,576, + 575,1,0,0,0,576,577,1,0,0,0,577,579,1,0,0,0,578,580,5,122,0,0,579,578, + 1,0,0,0,579,580,1,0,0,0,580,63,1,0,0,0,581,583,5,40,0,0,582,584,3,178, + 89,0,583,582,1,0,0,0,584,585,1,0,0,0,585,583,1,0,0,0,585,586,1,0,0,0, + 586,65,1,0,0,0,587,594,5,48,0,0,588,592,3,180,90,0,589,590,3,180,90,0, + 590,591,3,180,90,0,591,593,1,0,0,0,592,589,1,0,0,0,592,593,1,0,0,0,593, + 595,1,0,0,0,594,588,1,0,0,0,594,595,1,0,0,0,595,596,1,0,0,0,596,597,5, + 124,0,0,597,598,5,144,0,0,598,599,5,145,0,0,599,67,1,0,0,0,600,601,5, + 41,0,0,601,603,5,115,0,0,602,604,3,140,70,0,603,602,1,0,0,0,604,605,1, + 0,0,0,605,603,1,0,0,0,605,606,1,0,0,0,606,607,1,0,0,0,607,608,5,116,0, + 0,608,69,1,0,0,0,609,610,5,11,0,0,610,71,1,0,0,0,611,612,5,61,0,0,612, + 614,5,115,0,0,613,615,3,74,37,0,614,613,1,0,0,0,615,616,1,0,0,0,616,614, + 1,0,0,0,616,617,1,0,0,0,617,618,1,0,0,0,618,619,5,116,0,0,619,620,5,61, + 0,0,620,621,5,120,0,0,621,73,1,0,0,0,622,626,3,76,38,0,623,626,3,78,39, + 0,624,626,3,4,2,0,625,622,1,0,0,0,625,623,1,0,0,0,625,624,1,0,0,0,626, + 627,1,0,0,0,627,628,5,120,0,0,628,75,1,0,0,0,629,631,7,3,0,0,630,632, + 3,176,88,0,631,630,1,0,0,0,632,633,1,0,0,0,633,631,1,0,0,0,633,634,1, + 0,0,0,634,77,1,0,0,0,635,636,7,4,0,0,636,641,3,80,40,0,637,638,5,123, + 0,0,638,640,3,80,40,0,639,637,1,0,0,0,640,643,1,0,0,0,641,639,1,0,0,0, + 641,642,1,0,0,0,642,79,1,0,0,0,643,641,1,0,0,0,644,645,3,176,88,0,645, + 647,3,176,88,0,646,648,5,133,0,0,647,646,1,0,0,0,648,649,1,0,0,0,649, + 647,1,0,0,0,649,650,1,0,0,0,650,81,1,0,0,0,651,652,5,66,0,0,652,654,5, + 115,0,0,653,655,3,84,42,0,654,653,1,0,0,0,655,656,1,0,0,0,656,654,1,0, + 0,0,656,657,1,0,0,0,657,658,1,0,0,0,658,659,5,116,0,0,659,660,5,66,0, + 0,660,661,5,120,0,0,661,83,1,0,0,0,662,668,3,86,43,0,663,668,3,88,44, + 0,664,668,3,90,45,0,665,668,3,92,46,0,666,668,3,4,2,0,667,662,1,0,0,0, + 667,663,1,0,0,0,667,664,1,0,0,0,667,665,1,0,0,0,667,666,1,0,0,0,668,669, + 1,0,0,0,669,670,5,120,0,0,670,85,1,0,0,0,671,672,5,67,0,0,672,673,3,162, + 81,0,673,674,5,123,0,0,674,675,3,162,81,0,675,676,5,123,0,0,676,677,3, + 162,81,0,677,678,5,123,0,0,678,679,3,162,81,0,679,87,1,0,0,0,680,681, + 5,68,0,0,681,683,3,154,77,0,682,684,5,133,0,0,683,682,1,0,0,0,684,685, + 1,0,0,0,685,683,1,0,0,0,685,686,1,0,0,0,686,89,1,0,0,0,687,688,5,69,0, + 0,688,690,3,154,77,0,689,691,5,133,0,0,690,689,1,0,0,0,691,692,1,0,0, + 0,692,690,1,0,0,0,692,693,1,0,0,0,693,91,1,0,0,0,694,695,5,70,0,0,695, + 697,3,154,77,0,696,698,5,133,0,0,697,696,1,0,0,0,698,699,1,0,0,0,699, + 697,1,0,0,0,699,700,1,0,0,0,700,93,1,0,0,0,701,702,5,71,0,0,702,704,5, + 115,0,0,703,705,3,96,48,0,704,703,1,0,0,0,705,706,1,0,0,0,706,704,1,0, + 0,0,706,707,1,0,0,0,707,708,1,0,0,0,708,709,5,116,0,0,709,710,5,71,0, + 0,710,711,5,120,0,0,711,95,1,0,0,0,712,715,3,98,49,0,713,715,3,4,2,0, + 714,712,1,0,0,0,714,713,1,0,0,0,715,716,1,0,0,0,716,717,5,120,0,0,717, + 97,1,0,0,0,718,719,5,72,0,0,719,720,5,130,0,0,720,99,1,0,0,0,721,722, + 5,73,0,0,722,726,5,115,0,0,723,725,3,102,51,0,724,723,1,0,0,0,725,728, + 1,0,0,0,726,724,1,0,0,0,726,727,1,0,0,0,727,729,1,0,0,0,728,726,1,0,0, + 0,729,730,5,116,0,0,730,731,5,73,0,0,731,732,5,120,0,0,732,101,1,0,0, + 0,733,736,3,104,52,0,734,736,3,4,2,0,735,733,1,0,0,0,735,734,1,0,0,0, + 736,737,1,0,0,0,737,738,5,120,0,0,738,103,1,0,0,0,739,740,7,5,0,0,740, + 741,5,133,0,0,741,105,1,0,0,0,742,743,5,108,0,0,743,747,5,115,0,0,744, + 746,3,108,54,0,745,744,1,0,0,0,746,749,1,0,0,0,747,745,1,0,0,0,747,748, + 1,0,0,0,748,750,1,0,0,0,749,747,1,0,0,0,750,751,5,116,0,0,751,752,5,108, + 0,0,752,753,5,120,0,0,753,107,1,0,0,0,754,757,3,110,55,0,755,757,3,4, + 2,0,756,754,1,0,0,0,756,755,1,0,0,0,757,758,1,0,0,0,758,759,5,120,0,0, + 759,109,1,0,0,0,760,761,7,6,0,0,761,762,5,133,0,0,762,111,1,0,0,0,763, + 764,5,78,0,0,764,766,5,115,0,0,765,767,3,114,57,0,766,765,1,0,0,0,767, + 768,1,0,0,0,768,766,1,0,0,0,768,769,1,0,0,0,769,770,1,0,0,0,770,771,5, + 116,0,0,771,772,5,78,0,0,772,773,5,120,0,0,773,113,1,0,0,0,774,777,3, + 116,58,0,775,777,3,4,2,0,776,774,1,0,0,0,776,775,1,0,0,0,777,778,1,0, + 0,0,778,779,5,120,0,0,779,115,1,0,0,0,780,781,5,79,0,0,781,788,3,180, + 90,0,782,786,3,180,90,0,783,784,3,180,90,0,784,785,3,180,90,0,785,787, + 1,0,0,0,786,783,1,0,0,0,786,787,1,0,0,0,787,789,1,0,0,0,788,782,1,0,0, + 0,788,789,1,0,0,0,789,790,1,0,0,0,790,791,5,124,0,0,791,792,5,144,0,0, + 792,793,5,145,0,0,793,117,1,0,0,0,794,795,5,80,0,0,795,797,5,115,0,0, + 796,798,3,120,60,0,797,796,1,0,0,0,798,799,1,0,0,0,799,797,1,0,0,0,799, + 800,1,0,0,0,800,801,1,0,0,0,801,802,5,116,0,0,802,803,5,80,0,0,803,804, + 5,120,0,0,804,119,1,0,0,0,805,808,3,122,61,0,806,808,3,4,2,0,807,805, + 1,0,0,0,807,806,1,0,0,0,808,809,1,0,0,0,809,810,5,120,0,0,810,121,1,0, + 0,0,811,812,7,7,0,0,812,839,5,133,0,0,813,814,7,8,0,0,814,839,5,133,0, + 0,815,816,5,98,0,0,816,839,3,180,90,0,817,818,5,95,0,0,818,819,5,124, + 0,0,819,820,5,144,0,0,820,839,5,145,0,0,821,822,5,85,0,0,822,823,5,133, + 0,0,823,824,5,133,0,0,824,825,5,133,0,0,825,826,5,133,0,0,826,827,5,133, + 0,0,827,828,5,133,0,0,828,829,5,133,0,0,829,830,5,133,0,0,830,831,5,133, + 0,0,831,839,5,133,0,0,832,834,7,9,0,0,833,835,5,133,0,0,834,833,1,0,0, + 0,835,836,1,0,0,0,836,834,1,0,0,0,836,837,1,0,0,0,837,839,1,0,0,0,838, + 811,1,0,0,0,838,813,1,0,0,0,838,815,1,0,0,0,838,817,1,0,0,0,838,821,1, + 0,0,0,838,832,1,0,0,0,839,123,1,0,0,0,840,841,5,99,0,0,841,843,5,115, + 0,0,842,844,3,126,63,0,843,842,1,0,0,0,844,845,1,0,0,0,845,843,1,0,0, + 0,845,846,1,0,0,0,846,847,1,0,0,0,847,848,5,116,0,0,848,849,5,99,0,0, + 849,850,5,120,0,0,850,125,1,0,0,0,851,857,3,128,64,0,852,857,3,130,65, + 0,853,857,3,138,69,0,854,857,3,142,71,0,855,857,3,4,2,0,856,851,1,0,0, + 0,856,852,1,0,0,0,856,853,1,0,0,0,856,854,1,0,0,0,856,855,1,0,0,0,857, + 858,1,0,0,0,858,859,5,120,0,0,859,127,1,0,0,0,860,861,5,102,0,0,861,862, + 3,176,88,0,862,863,5,133,0,0,863,865,5,115,0,0,864,866,3,140,70,0,865, + 864,1,0,0,0,866,867,1,0,0,0,867,865,1,0,0,0,867,868,1,0,0,0,868,869,1, + 0,0,0,869,870,5,116,0,0,870,129,1,0,0,0,871,872,5,103,0,0,872,874,5,115, + 0,0,873,875,3,132,66,0,874,873,1,0,0,0,875,876,1,0,0,0,876,874,1,0,0, + 0,876,877,1,0,0,0,877,878,1,0,0,0,878,879,5,116,0,0,879,131,1,0,0,0,880, + 885,3,144,72,0,881,885,3,134,67,0,882,885,3,136,68,0,883,885,3,4,2,0, + 884,880,1,0,0,0,884,881,1,0,0,0,884,882,1,0,0,0,884,883,1,0,0,0,885,886, + 1,0,0,0,886,887,5,120,0,0,887,133,1,0,0,0,888,889,5,105,0,0,889,890,3, + 176,88,0,890,895,3,178,89,0,891,893,3,178,89,0,892,894,3,178,89,0,893, + 892,1,0,0,0,893,894,1,0,0,0,894,896,1,0,0,0,895,891,1,0,0,0,895,896,1, + 0,0,0,896,135,1,0,0,0,897,899,5,104,0,0,898,900,7,10,0,0,899,898,1,0, + 0,0,900,901,1,0,0,0,901,899,1,0,0,0,901,902,1,0,0,0,902,137,1,0,0,0,903, + 904,5,100,0,0,904,906,5,115,0,0,905,907,3,140,70,0,906,905,1,0,0,0,907, + 908,1,0,0,0,908,906,1,0,0,0,908,909,1,0,0,0,909,910,1,0,0,0,910,911,5, + 116,0,0,911,139,1,0,0,0,912,915,3,144,72,0,913,915,3,4,2,0,914,912,1, + 0,0,0,914,913,1,0,0,0,915,916,1,0,0,0,916,917,5,120,0,0,917,141,1,0,0, + 0,918,919,5,101,0,0,919,920,3,180,90,0,920,143,1,0,0,0,921,928,5,78,0, + 0,922,926,3,180,90,0,923,924,3,180,90,0,924,925,3,180,90,0,925,927,1, + 0,0,0,926,923,1,0,0,0,926,927,1,0,0,0,927,929,1,0,0,0,928,922,1,0,0,0, + 928,929,1,0,0,0,929,930,1,0,0,0,930,931,5,124,0,0,931,932,5,144,0,0,932, + 933,5,145,0,0,933,145,1,0,0,0,934,935,5,112,0,0,935,937,5,115,0,0,936, + 938,3,148,74,0,937,936,1,0,0,0,938,939,1,0,0,0,939,937,1,0,0,0,939,940, + 1,0,0,0,940,941,1,0,0,0,941,942,5,116,0,0,942,943,5,112,0,0,943,944,5, + 120,0,0,944,147,1,0,0,0,945,948,3,150,75,0,946,948,3,4,2,0,947,945,1, + 0,0,0,947,946,1,0,0,0,948,949,1,0,0,0,949,950,5,120,0,0,950,149,1,0,0, + 0,951,952,7,11,0,0,952,953,3,170,85,0,953,954,5,133,0,0,954,151,1,0,0, + 0,955,956,5,26,0,0,956,965,5,50,0,0,957,958,5,133,0,0,958,961,5,133,0, + 0,959,960,5,49,0,0,960,962,5,133,0,0,961,959,1,0,0,0,961,962,1,0,0,0, + 962,966,1,0,0,0,963,966,5,60,0,0,964,966,3,174,87,0,965,957,1,0,0,0,965, + 963,1,0,0,0,965,964,1,0,0,0,966,967,1,0,0,0,967,968,5,27,0,0,968,153, + 1,0,0,0,969,971,3,156,78,0,970,969,1,0,0,0,971,972,1,0,0,0,972,970,1, + 0,0,0,972,973,1,0,0,0,973,155,1,0,0,0,974,979,3,160,80,0,975,976,5,12, + 0,0,976,978,3,174,87,0,977,975,1,0,0,0,978,981,1,0,0,0,979,977,1,0,0, + 0,979,980,1,0,0,0,980,157,1,0,0,0,981,979,1,0,0,0,982,984,3,160,80,0, + 983,982,1,0,0,0,984,985,1,0,0,0,985,983,1,0,0,0,985,986,1,0,0,0,986,159, + 1,0,0,0,987,990,3,164,82,0,988,990,3,170,85,0,989,987,1,0,0,0,989,988, + 1,0,0,0,990,992,1,0,0,0,991,993,5,122,0,0,992,991,1,0,0,0,992,993,1,0, + 0,0,993,161,1,0,0,0,994,996,3,164,82,0,995,994,1,0,0,0,995,996,1,0,0, + 0,996,163,1,0,0,0,997,1000,5,125,0,0,998,1000,3,166,83,0,999,997,1,0, + 0,0,999,998,1,0,0,0,1000,165,1,0,0,0,1001,1003,5,117,0,0,1002,1004,3, + 168,84,0,1003,1002,1,0,0,0,1004,1005,1,0,0,0,1005,1003,1,0,0,0,1005,1006, + 1,0,0,0,1006,1007,1,0,0,0,1007,1008,5,118,0,0,1008,167,1,0,0,0,1009,1012, + 3,170,85,0,1010,1011,5,119,0,0,1011,1013,3,170,85,0,1012,1010,1,0,0,0, + 1012,1013,1,0,0,0,1013,1016,1,0,0,0,1014,1016,5,125,0,0,1015,1009,1,0, + 0,0,1015,1014,1,0,0,0,1016,169,1,0,0,0,1017,1020,3,172,86,0,1018,1020, + 5,126,0,0,1019,1017,1,0,0,0,1019,1018,1,0,0,0,1020,171,1,0,0,0,1021,1022, + 7,12,0,0,1022,173,1,0,0,0,1023,1024,7,13,0,0,1024,175,1,0,0,0,1025,1026, + 7,14,0,0,1026,177,1,0,0,0,1027,1028,7,15,0,0,1028,179,1,0,0,0,1029,1030, + 7,16,0,0,1030,181,1,0,0,0,1031,1033,3,24,12,0,1032,1031,1,0,0,0,1033, + 1036,1,0,0,0,1034,1032,1,0,0,0,1034,1035,1,0,0,0,1035,1037,1,0,0,0,1036, + 1034,1,0,0,0,1037,1038,5,0,0,1,1038,183,1,0,0,0,1039,1041,3,34,17,0,1040, + 1039,1,0,0,0,1041,1044,1,0,0,0,1042,1040,1,0,0,0,1042,1043,1,0,0,0,1043, + 1045,1,0,0,0,1044,1042,1,0,0,0,1045,1046,5,0,0,1,1046,185,1,0,0,0,1047, + 1049,3,30,15,0,1048,1047,1,0,0,0,1049,1052,1,0,0,0,1050,1048,1,0,0,0, + 1050,1051,1,0,0,0,1051,1053,1,0,0,0,1052,1050,1,0,0,0,1053,1054,5,0,0, + 1,1054,187,1,0,0,0,1055,1057,3,74,37,0,1056,1055,1,0,0,0,1057,1060,1, + 0,0,0,1058,1056,1,0,0,0,1058,1059,1,0,0,0,1059,1061,1,0,0,0,1060,1058, + 1,0,0,0,1061,1062,5,0,0,1,1062,189,1,0,0,0,1063,1065,3,96,48,0,1064,1063, + 1,0,0,0,1065,1068,1,0,0,0,1066,1064,1,0,0,0,1066,1067,1,0,0,0,1067,1069, + 1,0,0,0,1068,1066,1,0,0,0,1069,1070,5,0,0,1,1070,191,1,0,0,0,1071,1073, + 3,102,51,0,1072,1071,1,0,0,0,1073,1076,1,0,0,0,1074,1072,1,0,0,0,1074, + 1075,1,0,0,0,1075,1077,1,0,0,0,1076,1074,1,0,0,0,1077,1078,5,0,0,1,1078, + 193,1,0,0,0,1079,1081,3,108,54,0,1080,1079,1,0,0,0,1081,1084,1,0,0,0, + 1082,1080,1,0,0,0,1082,1083,1,0,0,0,1083,1085,1,0,0,0,1084,1082,1,0,0, + 0,1085,1086,5,0,0,1,1086,195,1,0,0,0,1087,1089,3,84,42,0,1088,1087,1, + 0,0,0,1089,1092,1,0,0,0,1090,1088,1,0,0,0,1090,1091,1,0,0,0,1091,1093, + 1,0,0,0,1092,1090,1,0,0,0,1093,1094,5,0,0,1,1094,197,1,0,0,0,1095,1097, + 3,114,57,0,1096,1095,1,0,0,0,1097,1100,1,0,0,0,1098,1096,1,0,0,0,1098, + 1099,1,0,0,0,1099,1101,1,0,0,0,1100,1098,1,0,0,0,1101,1102,5,0,0,1,1102, + 199,1,0,0,0,1103,1105,3,148,74,0,1104,1103,1,0,0,0,1105,1108,1,0,0,0, + 1106,1104,1,0,0,0,1106,1107,1,0,0,0,1107,1109,1,0,0,0,1108,1106,1,0,0, + 0,1109,1110,5,0,0,1,1110,201,1,0,0,0,1111,1113,3,120,60,0,1112,1111,1, + 0,0,0,1113,1116,1,0,0,0,1114,1112,1,0,0,0,1114,1115,1,0,0,0,1115,1117, + 1,0,0,0,1116,1114,1,0,0,0,1117,1118,5,0,0,1,1118,203,1,0,0,0,1119,1121, + 3,126,63,0,1120,1119,1,0,0,0,1121,1124,1,0,0,0,1122,1120,1,0,0,0,1122, + 1123,1,0,0,0,1123,1125,1,0,0,0,1124,1122,1,0,0,0,1125,1126,5,0,0,1,1126, + 205,1,0,0,0,1127,1129,3,132,66,0,1128,1127,1,0,0,0,1129,1132,1,0,0,0, + 1130,1128,1,0,0,0,1130,1131,1,0,0,0,1131,1133,1,0,0,0,1132,1130,1,0,0, + 0,1133,1134,5,0,0,1,1134,207,1,0,0,0,1135,1137,3,140,70,0,1136,1135,1, + 0,0,0,1137,1140,1,0,0,0,1138,1136,1,0,0,0,1138,1139,1,0,0,0,1139,1141, + 1,0,0,0,1140,1138,1,0,0,0,1141,1142,5,0,0,1,1142,209,1,0,0,0,1143,1144, + 7,17,0,0,1144,211,1,0,0,0,1145,1146,7,18,0,0,1146,213,1,0,0,0,1147,1148, + 7,19,0,0,1148,215,1,0,0,0,1149,1150,7,20,0,0,1150,217,1,0,0,0,1151,1152, + 7,21,0,0,1152,219,1,0,0,0,1153,1154,7,22,0,0,1154,221,1,0,0,0,122,227, + 229,240,260,270,281,287,303,311,319,325,334,339,345,350,359,367,376,382, + 398,411,418,420,430,436,443,452,455,462,464,471,473,475,478,482,488,495, + 500,506,513,516,523,526,533,536,538,542,549,558,568,573,576,579,585,592, + 594,605,616,625,633,641,649,656,667,685,692,699,706,714,726,735,747,756, + 768,776,786,788,799,807,836,838,845,856,867,876,884,893,895,901,908,914, + 926,928,939,947,961,965,972,979,985,989,992,995,999,1005,1012,1015,1019, + 1034,1042,1050,1058,1066,1074,1082,1090,1098,1106,1114,1122,1130,1138 + }; + staticData->serializedATN = antlr4::atn::SerializedATNView(serializedATNSegment, sizeof(serializedATNSegment) / sizeof(serializedATNSegment[0])); + + antlr4::atn::ATNDeserializer deserializer; + staticData->atn = deserializer.deserialize(staticData->serializedATN); + + const size_t count = staticData->atn->getNumberOfDecisions(); + staticData->decisionToDFA.reserve(count); + for (size_t i = 0; i < count; i++) { + staticData->decisionToDFA.emplace_back(staticData->atn->getDecisionState(i), i); + } + featparserParserStaticData = std::move(staticData); +} + +} + +FeatParser::FeatParser(TokenStream *input) : FeatParser(input, antlr4::atn::ParserATNSimulatorOptions()) {} + +FeatParser::FeatParser(TokenStream *input, const antlr4::atn::ParserATNSimulatorOptions &options) : Parser(input) { + FeatParser::initialize(); + _interpreter = new atn::ParserATNSimulator(this, *featparserParserStaticData->atn, featparserParserStaticData->decisionToDFA, featparserParserStaticData->sharedContextCache, options); } FeatParser::~FeatParser() { delete _interpreter; } +const atn::ATN& FeatParser::getATN() const { + return *featparserParserStaticData->atn; +} + std::string FeatParser::getGrammarFileName() const { return "FeatParser.g4"; } const std::vector& FeatParser::getRuleNames() const { - return _ruleNames; + return featparserParserStaticData->ruleNames; } -dfa::Vocabulary& FeatParser::getVocabulary() const { - return _vocabulary; +const dfa::Vocabulary& FeatParser::getVocabulary() const { + return featparserParserStaticData->vocabulary; +} + +antlr4::atn::SerializedATNView FeatParser::getSerializedATN() const { + return featparserParserStaticData->serializedATN; } @@ -87,7 +645,7 @@ size_t FeatParser::FileContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::FileContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::FileContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitFile(this); else @@ -112,16 +670,7 @@ FeatParser::FileContext* FeatParser::file() { _errHandler->sync(this); _la = _input->LA(1); while ((((_la & ~ 0x3fULL) == 0) && - ((1ULL << _la) & ((1ULL << FeatParser::ANON) - | (1ULL << FeatParser::ANON_v) - | (1ULL << FeatParser::INCLUDE) - | (1ULL << FeatParser::FEATURE) - | (1ULL << FeatParser::TABLE) - | (1ULL << FeatParser::LANGSYS) - | (1ULL << FeatParser::LOOKUP) - | (1ULL << FeatParser::ANCHOR_DEF) - | (1ULL << FeatParser::VALUE_RECORD_DEF) - | (1ULL << FeatParser::MARK_CLASS))) != 0) || _la == FeatParser::GCLASS) { + ((1ULL << _la) & 24769797950543078) != 0) || _la == FeatParser::GCLASS) { setState(227); _errHandler->sync(this); switch (_input->LA(1)) { @@ -221,7 +770,7 @@ size_t FeatParser::TopLevelStatementContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::TopLevelStatementContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::TopLevelStatementContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitTopLevelStatement(this); else @@ -324,7 +873,7 @@ size_t FeatParser::IncludeContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::IncludeContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::IncludeContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitInclude(this); else @@ -387,7 +936,7 @@ size_t FeatParser::GlyphClassAssignContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::GlyphClassAssignContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::GlyphClassAssignContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitGlyphClassAssign(this); else @@ -448,7 +997,7 @@ size_t FeatParser::LangsysAssignContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::LangsysAssignContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::LangsysAssignContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitLangsysAssign(this); else @@ -517,7 +1066,7 @@ size_t FeatParser::Mark_statementContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::Mark_statementContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::Mark_statementContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitMark_statement(this); else @@ -609,7 +1158,7 @@ size_t FeatParser::AnchorDefContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::AnchorDefContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::AnchorDefContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitAnchorDef(this); else @@ -683,7 +1232,7 @@ size_t FeatParser::ValueRecordDefContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::ValueRecordDefContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::ValueRecordDefContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitValueRecordDef(this); else @@ -768,7 +1317,7 @@ size_t FeatParser::FeatureBlockContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::FeatureBlockContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::FeatureBlockContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitFeatureBlock(this); else @@ -813,28 +1362,7 @@ FeatParser::FeatureBlockContext* FeatParser::featureBlock() { _errHandler->sync(this); _la = _input->LA(1); } while ((((_la & ~ 0x3fULL) == 0) && - ((1ULL << _la) & ((1ULL << FeatParser::INCLUDE) - | (1ULL << FeatParser::FEATURE) - | (1ULL << FeatParser::SCRIPT) - | (1ULL << FeatParser::LANGUAGE) - | (1ULL << FeatParser::SUBTABLE) - | (1ULL << FeatParser::LOOKUP) - | (1ULL << FeatParser::LOOKUPFLAG) - | (1ULL << FeatParser::ENUMERATE) - | (1ULL << FeatParser::ENUMERATE_v) - | (1ULL << FeatParser::EXCEPT) - | (1ULL << FeatParser::IGNORE) - | (1ULL << FeatParser::SUBSTITUTE) - | (1ULL << FeatParser::SUBSTITUTE_v) - | (1ULL << FeatParser::REVERSE) - | (1ULL << FeatParser::REVERSE_v) - | (1ULL << FeatParser::POSITION) - | (1ULL << FeatParser::POSITION_v) - | (1ULL << FeatParser::PARAMETERS) - | (1ULL << FeatParser::FEATURE_NAMES) - | (1ULL << FeatParser::CV_PARAMETERS) - | (1ULL << FeatParser::SIZEMENUNAME) - | (1ULL << FeatParser::MARK_CLASS))) != 0) || _la == FeatParser::GCLASS); + ((1ULL << _la) & 18304463152364384) != 0) || _la == FeatParser::GCLASS); setState(289); match(FeatParser::RCBRACE); setState(290); @@ -904,7 +1432,7 @@ size_t FeatParser::TableBlockContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::TableBlockContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::TableBlockContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitTableBlock(this); else @@ -1033,7 +1561,7 @@ size_t FeatParser::AnonBlockContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::AnonBlockContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::AnonBlockContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitAnonBlock(this); else @@ -1131,7 +1659,7 @@ size_t FeatParser::LookupBlockTopLevelContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::LookupBlockTopLevelContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::LookupBlockTopLevelContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitLookupBlockTopLevel(this); else @@ -1176,26 +1704,7 @@ FeatParser::LookupBlockTopLevelContext* FeatParser::lookupBlockTopLevel() { _errHandler->sync(this); _la = _input->LA(1); } while ((((_la & ~ 0x3fULL) == 0) && - ((1ULL << _la) & ((1ULL << FeatParser::INCLUDE) - | (1ULL << FeatParser::FEATURE) - | (1ULL << FeatParser::SCRIPT) - | (1ULL << FeatParser::LANGUAGE) - | (1ULL << FeatParser::SUBTABLE) - | (1ULL << FeatParser::LOOKUPFLAG) - | (1ULL << FeatParser::ENUMERATE) - | (1ULL << FeatParser::ENUMERATE_v) - | (1ULL << FeatParser::EXCEPT) - | (1ULL << FeatParser::IGNORE) - | (1ULL << FeatParser::SUBSTITUTE) - | (1ULL << FeatParser::SUBSTITUTE_v) - | (1ULL << FeatParser::REVERSE) - | (1ULL << FeatParser::REVERSE_v) - | (1ULL << FeatParser::POSITION) - | (1ULL << FeatParser::POSITION_v) - | (1ULL << FeatParser::PARAMETERS) - | (1ULL << FeatParser::FEATURE_NAMES) - | (1ULL << FeatParser::SIZEMENUNAME) - | (1ULL << FeatParser::MARK_CLASS))) != 0) || _la == FeatParser::GCLASS); + ((1ULL << _la) & 18300065105849184) != 0) || _la == FeatParser::GCLASS); setState(327); match(FeatParser::RCBRACE); setState(328); @@ -1237,7 +1746,7 @@ size_t FeatParser::FeatureStatementContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::FeatureStatementContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::FeatureStatementContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitFeatureStatement(this); else @@ -1362,7 +1871,7 @@ size_t FeatParser::LookupBlockOrUseContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::LookupBlockOrUseContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::LookupBlockOrUseContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitLookupBlockOrUse(this); else @@ -1412,26 +1921,7 @@ FeatParser::LookupBlockOrUseContext* FeatParser::lookupBlockOrUse() { _errHandler->sync(this); _la = _input->LA(1); } while ((((_la & ~ 0x3fULL) == 0) && - ((1ULL << _la) & ((1ULL << FeatParser::INCLUDE) - | (1ULL << FeatParser::FEATURE) - | (1ULL << FeatParser::SCRIPT) - | (1ULL << FeatParser::LANGUAGE) - | (1ULL << FeatParser::SUBTABLE) - | (1ULL << FeatParser::LOOKUPFLAG) - | (1ULL << FeatParser::ENUMERATE) - | (1ULL << FeatParser::ENUMERATE_v) - | (1ULL << FeatParser::EXCEPT) - | (1ULL << FeatParser::IGNORE) - | (1ULL << FeatParser::SUBSTITUTE) - | (1ULL << FeatParser::SUBSTITUTE_v) - | (1ULL << FeatParser::REVERSE) - | (1ULL << FeatParser::REVERSE_v) - | (1ULL << FeatParser::POSITION) - | (1ULL << FeatParser::POSITION_v) - | (1ULL << FeatParser::PARAMETERS) - | (1ULL << FeatParser::FEATURE_NAMES) - | (1ULL << FeatParser::SIZEMENUNAME) - | (1ULL << FeatParser::MARK_CLASS))) != 0) || _la == FeatParser::GCLASS); + ((1ULL << _la) & 18300065105849184) != 0) || _la == FeatParser::GCLASS); setState(347); match(FeatParser::RCBRACE); setState(348); @@ -1486,7 +1976,7 @@ size_t FeatParser::CvParameterBlockContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::CvParameterBlockContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::CvParameterBlockContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitCvParameterBlock(this); else @@ -1515,12 +2005,7 @@ FeatParser::CvParameterBlockContext* FeatParser::cvParameterBlock() { _errHandler->sync(this); _la = _input->LA(1); while ((((_la & ~ 0x3fULL) == 0) && - ((1ULL << _la) & ((1ULL << FeatParser::INCLUDE) - | (1ULL << FeatParser::CV_UI_LABEL) - | (1ULL << FeatParser::CV_TOOLTIP) - | (1ULL << FeatParser::CV_SAMPLE_TEXT) - | (1ULL << FeatParser::CV_PARAM_LABEL) - | (1ULL << FeatParser::CV_CHARACTER))) != 0)) { + ((1ULL << _la) & 272678883688480) != 0)) { setState(356); cvParameterStatement(); setState(361); @@ -1566,7 +2051,7 @@ size_t FeatParser::CvParameterStatementContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::CvParameterStatementContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::CvParameterStatementContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitCvParameterStatement(this); else @@ -1673,7 +2158,7 @@ size_t FeatParser::CvParameterContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::CvParameterContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::CvParameterContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitCvParameter(this); else @@ -1704,10 +2189,7 @@ FeatParser::CvParameterContext* FeatParser::cvParameter() { setState(371); _la = _input->LA(1); if (!((((_la & ~ 0x3fULL) == 0) && - ((1ULL << _la) & ((1ULL << FeatParser::CV_UI_LABEL) - | (1ULL << FeatParser::CV_TOOLTIP) - | (1ULL << FeatParser::CV_SAMPLE_TEXT) - | (1ULL << FeatParser::CV_PARAM_LABEL))) != 0))) { + ((1ULL << _la) & 131941395333120) != 0))) { _errHandler->recoverInline(this); } else { @@ -1826,7 +2308,7 @@ size_t FeatParser::StatementContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::StatementContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::StatementContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitStatement(this); else @@ -1976,7 +2458,7 @@ size_t FeatParser::FeatureUseContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::FeatureUseContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::FeatureUseContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitFeatureUse(this); else @@ -2031,7 +2513,7 @@ size_t FeatParser::ScriptAssignContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::ScriptAssignContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::ScriptAssignContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitScriptAssign(this); else @@ -2102,7 +2584,7 @@ size_t FeatParser::LangAssignContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::LangAssignContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::LangAssignContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitLangAssign(this); else @@ -2132,17 +2614,11 @@ FeatParser::LangAssignContext* FeatParser::langAssign() { _la = _input->LA(1); if ((((_la & ~ 0x3fULL) == 0) && - ((1ULL << _la) & ((1ULL << FeatParser::EXCLUDE_DFLT) - | (1ULL << FeatParser::INCLUDE_DFLT) - | (1ULL << FeatParser::EXCLUDE_dflt) - | (1ULL << FeatParser::INCLUDE_dflt))) != 0)) { + ((1ULL << _la) & 31457280) != 0)) { setState(410); _la = _input->LA(1); if (!((((_la & ~ 0x3fULL) == 0) && - ((1ULL << _la) & ((1ULL << FeatParser::EXCLUDE_DFLT) - | (1ULL << FeatParser::INCLUDE_DFLT) - | (1ULL << FeatParser::EXCLUDE_dflt) - | (1ULL << FeatParser::INCLUDE_dflt))) != 0))) { + ((1ULL << _la) & 31457280) != 0))) { _errHandler->recoverInline(this); } else { @@ -2189,7 +2665,7 @@ size_t FeatParser::LookupflagAssignContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::LookupflagAssignContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::LookupflagAssignContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitLookupflagAssign(this); else @@ -2237,12 +2713,7 @@ FeatParser::LookupflagAssignContext* FeatParser::lookupflagAssign() { _errHandler->sync(this); _la = _input->LA(1); } while ((((_la & ~ 0x3fULL) == 0) && - ((1ULL << _la) & ((1ULL << FeatParser::RIGHT_TO_LEFT) - | (1ULL << FeatParser::IGNORE_BASE_GLYPHS) - | (1ULL << FeatParser::IGNORE_LIGATURES) - | (1ULL << FeatParser::IGNORE_MARKS) - | (1ULL << FeatParser::USE_MARK_FILTERING_SET) - | (1ULL << FeatParser::MARK_ATTACHMENT_TYPE))) != 0)); + ((1ULL << _la) & 2064384) != 0)); break; } @@ -2300,7 +2771,7 @@ size_t FeatParser::LookupflagElementContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::LookupflagElementContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::LookupflagElementContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitLookupflagElement(this); else @@ -2426,7 +2897,7 @@ size_t FeatParser::IgnoreSubOrPosContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::IgnoreSubOrPosContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::IgnoreSubOrPosContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitIgnoreSubOrPos(this); else @@ -2553,7 +3024,7 @@ size_t FeatParser::SubstituteContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::SubstituteContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::SubstituteContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitSubstitute(this); else @@ -2806,7 +3277,7 @@ size_t FeatParser::PositionContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::PositionContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::PositionContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitPosition(this); else @@ -2844,12 +3315,7 @@ FeatParser::PositionContext* FeatParser::position() { _la = _input->LA(1); if (_la == FeatParser::NOTDEF || ((((_la - 117) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 117)) & ((1ULL << (FeatParser::LBRACKET - 117)) - | (1ULL << (FeatParser::GCLASS - 117)) - | (1ULL << (FeatParser::CID - 117)) - | (1ULL << (FeatParser::ESCGNAME - 117)) - | (1ULL << (FeatParser::NAMELABEL - 117)) - | (1ULL << (FeatParser::EXTNAME - 117)))) != 0)) { + ((1ULL << (_la - 117)) & 7937) != 0)) { setState(481); antlrcpp::downCast(_localctx)->startpat = pattern(); } @@ -2864,12 +3330,7 @@ FeatParser::PositionContext* FeatParser::position() { _errHandler->sync(this); _la = _input->LA(1); while (_la == FeatParser::NOTDEF || ((((_la - 117) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 117)) & ((1ULL << (FeatParser::LBRACKET - 117)) - | (1ULL << (FeatParser::GCLASS - 117)) - | (1ULL << (FeatParser::CID - 117)) - | (1ULL << (FeatParser::ESCGNAME - 117)) - | (1ULL << (FeatParser::NAMELABEL - 117)) - | (1ULL << (FeatParser::EXTNAME - 117)))) != 0)) { + ((1ULL << (_la - 117)) & 7937) != 0)) { setState(485); valuePattern(); setState(490); @@ -2896,12 +3357,7 @@ FeatParser::PositionContext* FeatParser::position() { _errHandler->sync(this); _la = _input->LA(1); while (_la == FeatParser::NOTDEF || ((((_la - 117) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 117)) & ((1ULL << (FeatParser::LBRACKET - 117)) - | (1ULL << (FeatParser::GCLASS - 117)) - | (1ULL << (FeatParser::CID - 117)) - | (1ULL << (FeatParser::ESCGNAME - 117)) - | (1ULL << (FeatParser::NAMELABEL - 117)) - | (1ULL << (FeatParser::EXTNAME - 117)))) != 0)) { + ((1ULL << (_la - 117)) & 7937) != 0)) { setState(497); lookupPatternElement(); setState(502); @@ -2921,12 +3377,7 @@ FeatParser::PositionContext* FeatParser::position() { _la = _input->LA(1); if (_la == FeatParser::NOTDEF || ((((_la - 117) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 117)) & ((1ULL << (FeatParser::LBRACKET - 117)) - | (1ULL << (FeatParser::GCLASS - 117)) - | (1ULL << (FeatParser::CID - 117)) - | (1ULL << (FeatParser::ESCGNAME - 117)) - | (1ULL << (FeatParser::NAMELABEL - 117)) - | (1ULL << (FeatParser::EXTNAME - 117)))) != 0)) { + ((1ULL << (_la - 117)) & 7937) != 0)) { setState(505); antlrcpp::downCast(_localctx)->endpat = pattern(); } @@ -2953,12 +3404,7 @@ FeatParser::PositionContext* FeatParser::position() { _la = _input->LA(1); if (_la == FeatParser::NOTDEF || ((((_la - 117) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 117)) & ((1ULL << (FeatParser::LBRACKET - 117)) - | (1ULL << (FeatParser::GCLASS - 117)) - | (1ULL << (FeatParser::CID - 117)) - | (1ULL << (FeatParser::ESCGNAME - 117)) - | (1ULL << (FeatParser::NAMELABEL - 117)) - | (1ULL << (FeatParser::EXTNAME - 117)))) != 0)) { + ((1ULL << (_la - 117)) & 7937) != 0)) { setState(515); antlrcpp::downCast(_localctx)->endpat = pattern(); } @@ -2986,12 +3432,7 @@ FeatParser::PositionContext* FeatParser::position() { _la = _input->LA(1); if (_la == FeatParser::NOTDEF || ((((_la - 117) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 117)) & ((1ULL << (FeatParser::LBRACKET - 117)) - | (1ULL << (FeatParser::GCLASS - 117)) - | (1ULL << (FeatParser::CID - 117)) - | (1ULL << (FeatParser::ESCGNAME - 117)) - | (1ULL << (FeatParser::NAMELABEL - 117)) - | (1ULL << (FeatParser::EXTNAME - 117)))) != 0)) { + ((1ULL << (_la - 117)) & 7937) != 0)) { setState(525); antlrcpp::downCast(_localctx)->endpat = pattern(); } @@ -3018,12 +3459,7 @@ FeatParser::PositionContext* FeatParser::position() { _la = _input->LA(1); if (_la == FeatParser::NOTDEF || ((((_la - 117) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 117)) & ((1ULL << (FeatParser::LBRACKET - 117)) - | (1ULL << (FeatParser::GCLASS - 117)) - | (1ULL << (FeatParser::CID - 117)) - | (1ULL << (FeatParser::ESCGNAME - 117)) - | (1ULL << (FeatParser::NAMELABEL - 117)) - | (1ULL << (FeatParser::EXTNAME - 117)))) != 0)) { + ((1ULL << (_la - 117)) & 7937) != 0)) { setState(535); antlrcpp::downCast(_localctx)->endpat = pattern(); } @@ -3064,7 +3500,7 @@ size_t FeatParser::ValuePatternContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::ValuePatternContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::ValuePatternContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitValuePattern(this); else @@ -3134,7 +3570,7 @@ size_t FeatParser::ValueRecordContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::ValueRecordContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::ValueRecordContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitValueRecord(this); else @@ -3216,7 +3652,7 @@ size_t FeatParser::ValueLiteralContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::ValueLiteralContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::ValueLiteralContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitValueLiteral(this); else @@ -3300,7 +3736,7 @@ size_t FeatParser::CursiveElementContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::CursiveElementContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::CursiveElementContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitCursiveElement(this); else @@ -3365,7 +3801,7 @@ size_t FeatParser::BaseToMarkElementContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::BaseToMarkElementContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::BaseToMarkElementContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitBaseToMarkElement(this); else @@ -3443,7 +3879,7 @@ size_t FeatParser::LigatureMarkElementContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::LigatureMarkElementContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::LigatureMarkElementContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitLigatureMarkElement(this); else @@ -3527,7 +3963,7 @@ size_t FeatParser::ParametersContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::ParametersContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::ParametersContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitParameters(this); else @@ -3609,7 +4045,7 @@ size_t FeatParser::SizemenunameContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::SizemenunameContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::SizemenunameContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitSizemenuname(this); else @@ -3637,9 +4073,7 @@ FeatParser::SizemenunameContext* FeatParser::sizemenuname() { _la = _input->LA(1); if (((((_la - 131) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 131)) & ((1ULL << (FeatParser::NUMEXT - 131)) - | (1ULL << (FeatParser::NUMOCT - 131)) - | (1ULL << (FeatParser::NUM - 131)))) != 0)) { + ((1ULL << (_la - 131)) & 7) != 0)) { setState(588); genNum(); setState(592); @@ -3647,9 +4081,7 @@ FeatParser::SizemenunameContext* FeatParser::sizemenuname() { _la = _input->LA(1); if (((((_la - 131) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 131)) & ((1ULL << (FeatParser::NUMEXT - 131)) - | (1ULL << (FeatParser::NUMOCT - 131)) - | (1ULL << (FeatParser::NUM - 131)))) != 0)) { + ((1ULL << (_la - 131)) & 7) != 0)) { setState(589); genNum(); setState(590); @@ -3705,7 +4137,7 @@ size_t FeatParser::FeatureNamesContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::FeatureNamesContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::FeatureNamesContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitFeatureNames(this); else @@ -3769,7 +4201,7 @@ size_t FeatParser::SubtableContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::SubtableContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::SubtableContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitSubtable(this); else @@ -3842,7 +4274,7 @@ size_t FeatParser::Table_BASEContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::Table_BASEContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::Table_BASEContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitTable_BASE(this); else @@ -3877,11 +4309,7 @@ FeatParser::Table_BASEContext* FeatParser::table_BASE() { _errHandler->sync(this); _la = _input->LA(1); } while (((((_la - 5) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 5)) & ((1ULL << (FeatParser::INCLUDE - 5)) - | (1ULL << (FeatParser::HA_BTL - 5)) - | (1ULL << (FeatParser::VA_BTL - 5)) - | (1ULL << (FeatParser::HA_BSL - 5)) - | (1ULL << (FeatParser::VA_BSL - 5)))) != 0)); + ((1ULL << (_la - 5)) & 2161727821137838081) != 0)); setState(618); match(FeatParser::RCBRACE); setState(619); @@ -3927,7 +4355,7 @@ size_t FeatParser::BaseStatementContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::BaseStatementContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::BaseStatementContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitBaseStatement(this); else @@ -4014,7 +4442,7 @@ size_t FeatParser::AxisTagsContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::AxisTagsContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::AxisTagsContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitAxisTags(this); else @@ -4056,9 +4484,7 @@ FeatParser::AxisTagsContext* FeatParser::axisTags() { _errHandler->sync(this); _la = _input->LA(1); } while (_la == FeatParser::MARK || ((((_la - 128) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 128)) & ((1ULL << (FeatParser::NAMELABEL - 128)) - | (1ULL << (FeatParser::EXTNAME - 128)) - | (1ULL << (FeatParser::CATCHTAG - 128)))) != 0)); + ((1ULL << (_la - 128)) & 67) != 0)); } catch (RecognitionException &e) { @@ -4106,7 +4532,7 @@ size_t FeatParser::AxisScriptsContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::AxisScriptsContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::AxisScriptsContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitAxisScripts(this); else @@ -4191,7 +4617,7 @@ size_t FeatParser::BaseScriptContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::BaseScriptContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::BaseScriptContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitBaseScript(this); else @@ -4277,7 +4703,7 @@ size_t FeatParser::Table_GDEFContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::Table_GDEFContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::Table_GDEFContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitTable_GDEF(this); else @@ -4312,10 +4738,7 @@ FeatParser::Table_GDEFContext* FeatParser::table_GDEF() { _errHandler->sync(this); _la = _input->LA(1); } while (_la == FeatParser::INCLUDE || ((((_la - 67) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 67)) & ((1ULL << (FeatParser::GLYPH_CLASS_DEF - 67)) - | (1ULL << (FeatParser::ATTACH - 67)) - | (1ULL << (FeatParser::LIG_CARET_BY_POS - 67)) - | (1ULL << (FeatParser::LIG_CARET_BY_IDX - 67)))) != 0)); + ((1ULL << (_la - 67)) & 15) != 0)); setState(658); match(FeatParser::RCBRACE); setState(659); @@ -4369,7 +4792,7 @@ size_t FeatParser::GdefStatementContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::GdefStatementContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::GdefStatementContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitGdefStatement(this); else @@ -4470,7 +4893,7 @@ size_t FeatParser::GdefGlyphClassContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::GdefGlyphClassContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::GdefGlyphClassContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitGdefGlyphClass(this); else @@ -4545,7 +4968,7 @@ size_t FeatParser::GdefAttachContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::GdefAttachContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::GdefAttachContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitGdefAttach(this); else @@ -4619,7 +5042,7 @@ size_t FeatParser::GdefLigCaretPosContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::GdefLigCaretPosContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::GdefLigCaretPosContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitGdefLigCaretPos(this); else @@ -4693,7 +5116,7 @@ size_t FeatParser::GdefLigCaretIndexContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::GdefLigCaretIndexContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::GdefLigCaretIndexContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitGdefLigCaretIndex(this); else @@ -4779,7 +5202,7 @@ size_t FeatParser::Table_headContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::Table_headContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::Table_headContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitTable_head(this); else @@ -4855,7 +5278,7 @@ size_t FeatParser::HeadStatementContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::HeadStatementContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::HeadStatementContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitHeadStatement(this); else @@ -4926,7 +5349,7 @@ size_t FeatParser::HeadContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::HeadContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::HeadContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitHead(this); else @@ -5001,7 +5424,7 @@ size_t FeatParser::Table_hheaContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::Table_hheaContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::Table_hheaContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitTable_hhea(this); else @@ -5030,10 +5453,7 @@ FeatParser::Table_hheaContext* FeatParser::table_hhea() { _errHandler->sync(this); _la = _input->LA(1); while (_la == FeatParser::INCLUDE || ((((_la - 74) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 74)) & ((1ULL << (FeatParser::ASCENDER - 74)) - | (1ULL << (FeatParser::DESCENDER - 74)) - | (1ULL << (FeatParser::LINE_GAP - 74)) - | (1ULL << (FeatParser::CARET_OFFSET - 74)))) != 0)) { + ((1ULL << (_la - 74)) & 15) != 0)) { setState(723); hheaStatement(); setState(728); @@ -5081,7 +5501,7 @@ size_t FeatParser::HheaStatementContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::HheaStatementContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::HheaStatementContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitHheaStatement(this); else @@ -5167,7 +5587,7 @@ size_t FeatParser::HheaContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::HheaContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::HheaContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitHhea(this); else @@ -5191,10 +5611,7 @@ FeatParser::HheaContext* FeatParser::hhea() { setState(739); _la = _input->LA(1); if (!(((((_la - 74) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 74)) & ((1ULL << (FeatParser::ASCENDER - 74)) - | (1ULL << (FeatParser::DESCENDER - 74)) - | (1ULL << (FeatParser::LINE_GAP - 74)) - | (1ULL << (FeatParser::CARET_OFFSET - 74)))) != 0))) { + ((1ULL << (_la - 74)) & 15) != 0))) { _errHandler->recoverInline(this); } else { @@ -5254,7 +5671,7 @@ size_t FeatParser::Table_vheaContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::Table_vheaContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::Table_vheaContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitTable_vhea(this); else @@ -5283,9 +5700,7 @@ FeatParser::Table_vheaContext* FeatParser::table_vhea() { _errHandler->sync(this); _la = _input->LA(1); while (_la == FeatParser::INCLUDE || ((((_la - 109) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 109)) & ((1ULL << (FeatParser::VERT_TYPO_ASCENDER - 109)) - | (1ULL << (FeatParser::VERT_TYPO_DESCENDER - 109)) - | (1ULL << (FeatParser::VERT_TYPO_LINE_GAP - 109)))) != 0)) { + ((1ULL << (_la - 109)) & 7) != 0)) { setState(744); vheaStatement(); setState(749); @@ -5333,7 +5748,7 @@ size_t FeatParser::VheaStatementContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::VheaStatementContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::VheaStatementContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitVheaStatement(this); else @@ -5414,7 +5829,7 @@ size_t FeatParser::VheaContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::VheaContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::VheaContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitVhea(this); else @@ -5438,9 +5853,7 @@ FeatParser::VheaContext* FeatParser::vhea() { setState(760); _la = _input->LA(1); if (!(((((_la - 109) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 109)) & ((1ULL << (FeatParser::VERT_TYPO_ASCENDER - 109)) - | (1ULL << (FeatParser::VERT_TYPO_DESCENDER - 109)) - | (1ULL << (FeatParser::VERT_TYPO_LINE_GAP - 109)))) != 0))) { + ((1ULL << (_la - 109)) & 7) != 0))) { _errHandler->recoverInline(this); } else { @@ -5500,7 +5913,7 @@ size_t FeatParser::Table_nameContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::Table_nameContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::Table_nameContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitTable_name(this); else @@ -5576,7 +5989,7 @@ size_t FeatParser::NameStatementContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::NameStatementContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::NameStatementContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitNameStatement(this); else @@ -5663,7 +6076,7 @@ size_t FeatParser::NameIDContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::NameIDContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::NameIDContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitNameID(this); else @@ -5693,9 +6106,7 @@ FeatParser::NameIDContext* FeatParser::nameID() { _la = _input->LA(1); if (((((_la - 131) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 131)) & ((1ULL << (FeatParser::NUMEXT - 131)) - | (1ULL << (FeatParser::NUMOCT - 131)) - | (1ULL << (FeatParser::NUM - 131)))) != 0)) { + ((1ULL << (_la - 131)) & 7) != 0)) { setState(782); antlrcpp::downCast(_localctx)->plat = genNum(); setState(786); @@ -5703,9 +6114,7 @@ FeatParser::NameIDContext* FeatParser::nameID() { _la = _input->LA(1); if (((((_la - 131) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 131)) & ((1ULL << (FeatParser::NUMEXT - 131)) - | (1ULL << (FeatParser::NUMOCT - 131)) - | (1ULL << (FeatParser::NUM - 131)))) != 0)) { + ((1ULL << (_la - 131)) & 7) != 0)) { setState(783); antlrcpp::downCast(_localctx)->spec = genNum(); setState(784); @@ -5769,7 +6178,7 @@ size_t FeatParser::Table_OS_2Context::getRuleIndex() const { } -antlrcpp::Any FeatParser::Table_OS_2Context::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::Table_OS_2Context::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitTable_OS_2(this); else @@ -5804,24 +6213,7 @@ FeatParser::Table_OS_2Context* FeatParser::table_OS_2() { _errHandler->sync(this); _la = _input->LA(1); } while (_la == FeatParser::INCLUDE || ((((_la - 81) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 81)) & ((1ULL << (FeatParser::FS_TYPE - 81)) - | (1ULL << (FeatParser::FS_TYPE_v - 81)) - | (1ULL << (FeatParser::OS2_LOWER_OP_SIZE - 81)) - | (1ULL << (FeatParser::OS2_UPPER_OP_SIZE - 81)) - | (1ULL << (FeatParser::PANOSE - 81)) - | (1ULL << (FeatParser::TYPO_ASCENDER - 81)) - | (1ULL << (FeatParser::TYPO_DESCENDER - 81)) - | (1ULL << (FeatParser::TYPO_LINE_GAP - 81)) - | (1ULL << (FeatParser::WIN_ASCENT - 81)) - | (1ULL << (FeatParser::WIN_DESCENT - 81)) - | (1ULL << (FeatParser::X_HEIGHT - 81)) - | (1ULL << (FeatParser::CAP_HEIGHT - 81)) - | (1ULL << (FeatParser::WEIGHT_CLASS - 81)) - | (1ULL << (FeatParser::WIDTH_CLASS - 81)) - | (1ULL << (FeatParser::VENDOR - 81)) - | (1ULL << (FeatParser::UNICODE_RANGE - 81)) - | (1ULL << (FeatParser::CODE_PAGE_RANGE - 81)) - | (1ULL << (FeatParser::FAMILY_CLASS - 81)))) != 0)); + ((1ULL << (_la - 81)) & 262143) != 0)); setState(801); match(FeatParser::RCBRACE); setState(802); @@ -5863,7 +6255,7 @@ size_t FeatParser::Os_2StatementContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::Os_2StatementContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::Os_2StatementContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitOs_2Statement(this); else @@ -6039,7 +6431,7 @@ size_t FeatParser::Os_2Context::getRuleIndex() const { } -antlrcpp::Any FeatParser::Os_2Context::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::Os_2Context::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitOs_2(this); else @@ -6073,13 +6465,7 @@ FeatParser::Os_2Context* FeatParser::os_2() { setState(811); _la = _input->LA(1); if (!(((((_la - 86) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 86)) & ((1ULL << (FeatParser::TYPO_ASCENDER - 86)) - | (1ULL << (FeatParser::TYPO_DESCENDER - 86)) - | (1ULL << (FeatParser::TYPO_LINE_GAP - 86)) - | (1ULL << (FeatParser::WIN_ASCENT - 86)) - | (1ULL << (FeatParser::WIN_DESCENT - 86)) - | (1ULL << (FeatParser::X_HEIGHT - 86)) - | (1ULL << (FeatParser::CAP_HEIGHT - 86)))) != 0))) { + ((1ULL << (_la - 86)) & 127) != 0))) { _errHandler->recoverInline(this); } else { @@ -6101,12 +6487,7 @@ FeatParser::Os_2Context* FeatParser::os_2() { setState(813); _la = _input->LA(1); if (!(((((_la - 81) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 81)) & ((1ULL << (FeatParser::FS_TYPE - 81)) - | (1ULL << (FeatParser::FS_TYPE_v - 81)) - | (1ULL << (FeatParser::OS2_LOWER_OP_SIZE - 81)) - | (1ULL << (FeatParser::OS2_UPPER_OP_SIZE - 81)) - | (1ULL << (FeatParser::WEIGHT_CLASS - 81)) - | (1ULL << (FeatParser::WIDTH_CLASS - 81)))) != 0))) { + ((1ULL << (_la - 81)) & 12303) != 0))) { _errHandler->recoverInline(this); } else { @@ -6248,7 +6629,7 @@ size_t FeatParser::Table_STATContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::Table_STATContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::Table_STATContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitTable_STAT(this); else @@ -6283,10 +6664,7 @@ FeatParser::Table_STATContext* FeatParser::table_STAT() { _errHandler->sync(this); _la = _input->LA(1); } while (_la == FeatParser::INCLUDE || ((((_la - 100) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 100)) & ((1ULL << (FeatParser::ELIDED_FALLBACK_NAME - 100)) - | (1ULL << (FeatParser::ELIDED_FALLBACK_NAME_ID - 100)) - | (1ULL << (FeatParser::DESIGN_AXIS - 100)) - | (1ULL << (FeatParser::AXIS_VALUE - 100)))) != 0)); + ((1ULL << (_la - 100)) & 15) != 0)); setState(847); match(FeatParser::RCBRACE); setState(848); @@ -6340,7 +6718,7 @@ size_t FeatParser::StatStatementContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::StatStatementContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::StatStatementContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitStatStatement(this); else @@ -6449,7 +6827,7 @@ size_t FeatParser::DesignAxisContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::DesignAxisContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::DesignAxisContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitDesignAxis(this); else @@ -6533,7 +6911,7 @@ size_t FeatParser::AxisValueContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::AxisValueContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::AxisValueContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitAxisValue(this); else @@ -6568,9 +6946,7 @@ FeatParser::AxisValueContext* FeatParser::axisValue() { _errHandler->sync(this); _la = _input->LA(1); } while (_la == FeatParser::INCLUDE || ((((_la - 78) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 78)) & ((1ULL << (FeatParser::NAME - 78)) - | (1ULL << (FeatParser::FLAG - 78)) - | (1ULL << (FeatParser::LOCATION - 78)))) != 0)); + ((1ULL << (_la - 78)) & 201326593) != 0)); setState(878); match(FeatParser::RCBRACE); @@ -6616,7 +6992,7 @@ size_t FeatParser::AxisValueStatementContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::AxisValueStatementContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::AxisValueStatementContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitAxisValueStatement(this); else @@ -6707,7 +7083,7 @@ size_t FeatParser::AxisValueLocationContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::AxisValueLocationContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::AxisValueLocationContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitAxisValueLocation(this); else @@ -6797,7 +7173,7 @@ size_t FeatParser::AxisValueFlagsContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::AxisValueFlagsContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::AxisValueFlagsContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitAxisValueFlags(this); else @@ -6884,7 +7260,7 @@ size_t FeatParser::ElidedFallbackNameContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::ElidedFallbackNameContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::ElidedFallbackNameContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitElidedFallbackName(this); else @@ -6956,7 +7332,7 @@ size_t FeatParser::NameEntryStatementContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::NameEntryStatementContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::NameEntryStatementContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitNameEntryStatement(this); else @@ -7027,7 +7403,7 @@ size_t FeatParser::ElidedFallbackNameIDContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::ElidedFallbackNameIDContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::ElidedFallbackNameIDContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitElidedFallbackNameID(this); else @@ -7098,7 +7474,7 @@ size_t FeatParser::NameEntryContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::NameEntryContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::NameEntryContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitNameEntry(this); else @@ -7126,9 +7502,7 @@ FeatParser::NameEntryContext* FeatParser::nameEntry() { _la = _input->LA(1); if (((((_la - 131) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 131)) & ((1ULL << (FeatParser::NUMEXT - 131)) - | (1ULL << (FeatParser::NUMOCT - 131)) - | (1ULL << (FeatParser::NUM - 131)))) != 0)) { + ((1ULL << (_la - 131)) & 7) != 0)) { setState(922); genNum(); setState(926); @@ -7136,9 +7510,7 @@ FeatParser::NameEntryContext* FeatParser::nameEntry() { _la = _input->LA(1); if (((((_la - 131) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 131)) & ((1ULL << (FeatParser::NUMEXT - 131)) - | (1ULL << (FeatParser::NUMOCT - 131)) - | (1ULL << (FeatParser::NUM - 131)))) != 0)) { + ((1ULL << (_la - 131)) & 7) != 0)) { setState(923); genNum(); setState(924); @@ -7202,7 +7574,7 @@ size_t FeatParser::Table_vmtxContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::Table_vmtxContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::Table_vmtxContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitTable_vmtx(this); else @@ -7280,7 +7652,7 @@ size_t FeatParser::VmtxStatementContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::VmtxStatementContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::VmtxStatementContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitVmtxStatement(this); else @@ -7360,7 +7732,7 @@ size_t FeatParser::VmtxContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::VmtxContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::VmtxContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitVmtx(this); else @@ -7451,7 +7823,7 @@ size_t FeatParser::AnchorContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::AnchorContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::AnchorContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitAnchor(this); else @@ -7546,7 +7918,7 @@ size_t FeatParser::LookupPatternContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::LookupPatternContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::LookupPatternContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitLookupPattern(this); else @@ -7577,12 +7949,7 @@ FeatParser::LookupPatternContext* FeatParser::lookupPattern() { _errHandler->sync(this); _la = _input->LA(1); } while (_la == FeatParser::NOTDEF || ((((_la - 117) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 117)) & ((1ULL << (FeatParser::LBRACKET - 117)) - | (1ULL << (FeatParser::GCLASS - 117)) - | (1ULL << (FeatParser::CID - 117)) - | (1ULL << (FeatParser::ESCGNAME - 117)) - | (1ULL << (FeatParser::NAMELABEL - 117)) - | (1ULL << (FeatParser::EXTNAME - 117)))) != 0)); + ((1ULL << (_la - 117)) & 7937) != 0)); } catch (RecognitionException &e) { @@ -7626,7 +7993,7 @@ size_t FeatParser::LookupPatternElementContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::LookupPatternElementContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::LookupPatternElementContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitLookupPatternElement(this); else @@ -7692,7 +8059,7 @@ size_t FeatParser::PatternContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::PatternContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::PatternContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitPattern(this); else @@ -7723,12 +8090,7 @@ FeatParser::PatternContext* FeatParser::pattern() { _errHandler->sync(this); _la = _input->LA(1); } while (_la == FeatParser::NOTDEF || ((((_la - 117) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 117)) & ((1ULL << (FeatParser::LBRACKET - 117)) - | (1ULL << (FeatParser::GCLASS - 117)) - | (1ULL << (FeatParser::CID - 117)) - | (1ULL << (FeatParser::ESCGNAME - 117)) - | (1ULL << (FeatParser::NAMELABEL - 117)) - | (1ULL << (FeatParser::EXTNAME - 117)))) != 0)); + ((1ULL << (_la - 117)) & 7937) != 0)); } catch (RecognitionException &e) { @@ -7764,7 +8126,7 @@ size_t FeatParser::PatternElementContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::PatternElementContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::PatternElementContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitPatternElement(this); else @@ -7843,7 +8205,7 @@ size_t FeatParser::GlyphClassOptionalContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::GlyphClassOptionalContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::GlyphClassOptionalContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitGlyphClassOptional(this); else @@ -7905,7 +8267,7 @@ size_t FeatParser::GlyphClassContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::GlyphClassContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::GlyphClassContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitGlyphClass(this); else @@ -7983,7 +8345,7 @@ size_t FeatParser::GcLiteralContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::GcLiteralContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::GcLiteralContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitGcLiteral(this); else @@ -8016,11 +8378,7 @@ FeatParser::GcLiteralContext* FeatParser::gcLiteral() { _errHandler->sync(this); _la = _input->LA(1); } while (_la == FeatParser::NOTDEF || ((((_la - 125) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 125)) & ((1ULL << (FeatParser::GCLASS - 125)) - | (1ULL << (FeatParser::CID - 125)) - | (1ULL << (FeatParser::ESCGNAME - 125)) - | (1ULL << (FeatParser::NAMELABEL - 125)) - | (1ULL << (FeatParser::EXTNAME - 125)))) != 0)); + ((1ULL << (_la - 125)) & 31) != 0)); setState(1007); match(FeatParser::RBRACKET); @@ -8062,7 +8420,7 @@ size_t FeatParser::GcLiteralElementContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::GcLiteralElementContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::GcLiteralElementContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitGcLiteralElement(this); else @@ -8147,7 +8505,7 @@ size_t FeatParser::GlyphContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::GlyphContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::GlyphContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitGlyph(this); else @@ -8228,7 +8586,7 @@ size_t FeatParser::GlyphNameContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::GlyphNameContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::GlyphNameContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitGlyphName(this); else @@ -8252,9 +8610,7 @@ FeatParser::GlyphNameContext* FeatParser::glyphName() { setState(1021); _la = _input->LA(1); if (!(_la == FeatParser::NOTDEF || ((((_la - 127) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 127)) & ((1ULL << (FeatParser::ESCGNAME - 127)) - | (1ULL << (FeatParser::NAMELABEL - 127)) - | (1ULL << (FeatParser::EXTNAME - 127)))) != 0))) { + ((1ULL << (_la - 127)) & 7) != 0))) { _errHandler->recoverInline(this); } else { @@ -8292,7 +8648,7 @@ size_t FeatParser::LabelContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::LabelContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::LabelContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitLabel(this); else @@ -8361,7 +8717,7 @@ size_t FeatParser::TagContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::TagContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::TagContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitTag(this); else @@ -8385,9 +8741,7 @@ FeatParser::TagContext* FeatParser::tag() { setState(1025); _la = _input->LA(1); if (!(_la == FeatParser::MARK || ((((_la - 128) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 128)) & ((1ULL << (FeatParser::NAMELABEL - 128)) - | (1ULL << (FeatParser::EXTNAME - 128)) - | (1ULL << (FeatParser::CATCHTAG - 128)))) != 0))) { + ((1ULL << (_la - 128)) & 67) != 0))) { _errHandler->recoverInline(this); } else { @@ -8425,7 +8779,7 @@ size_t FeatParser::FixedNumContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::FixedNumContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::FixedNumContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitFixedNum(this); else @@ -8492,7 +8846,7 @@ size_t FeatParser::GenNumContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::GenNumContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::GenNumContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitGenNum(this); else @@ -8516,9 +8870,7 @@ FeatParser::GenNumContext* FeatParser::genNum() { setState(1029); _la = _input->LA(1); if (!(((((_la - 131) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 131)) & ((1ULL << (FeatParser::NUMEXT - 131)) - | (1ULL << (FeatParser::NUMOCT - 131)) - | (1ULL << (FeatParser::NUM - 131)))) != 0))) { + ((1ULL << (_la - 131)) & 7) != 0))) { _errHandler->recoverInline(this); } else { @@ -8560,7 +8912,7 @@ size_t FeatParser::FeatureFileContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::FeatureFileContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::FeatureFileContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitFeatureFile(this); else @@ -8585,28 +8937,7 @@ FeatParser::FeatureFileContext* FeatParser::featureFile() { _errHandler->sync(this); _la = _input->LA(1); while ((((_la & ~ 0x3fULL) == 0) && - ((1ULL << _la) & ((1ULL << FeatParser::INCLUDE) - | (1ULL << FeatParser::FEATURE) - | (1ULL << FeatParser::SCRIPT) - | (1ULL << FeatParser::LANGUAGE) - | (1ULL << FeatParser::SUBTABLE) - | (1ULL << FeatParser::LOOKUP) - | (1ULL << FeatParser::LOOKUPFLAG) - | (1ULL << FeatParser::ENUMERATE) - | (1ULL << FeatParser::ENUMERATE_v) - | (1ULL << FeatParser::EXCEPT) - | (1ULL << FeatParser::IGNORE) - | (1ULL << FeatParser::SUBSTITUTE) - | (1ULL << FeatParser::SUBSTITUTE_v) - | (1ULL << FeatParser::REVERSE) - | (1ULL << FeatParser::REVERSE_v) - | (1ULL << FeatParser::POSITION) - | (1ULL << FeatParser::POSITION_v) - | (1ULL << FeatParser::PARAMETERS) - | (1ULL << FeatParser::FEATURE_NAMES) - | (1ULL << FeatParser::CV_PARAMETERS) - | (1ULL << FeatParser::SIZEMENUNAME) - | (1ULL << FeatParser::MARK_CLASS))) != 0) || _la == FeatParser::GCLASS) { + ((1ULL << _la) & 18304463152364384) != 0) || _la == FeatParser::GCLASS) { setState(1031); featureStatement(); setState(1036); @@ -8650,7 +8981,7 @@ size_t FeatParser::StatementFileContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::StatementFileContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::StatementFileContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitStatementFile(this); else @@ -8675,26 +9006,7 @@ FeatParser::StatementFileContext* FeatParser::statementFile() { _errHandler->sync(this); _la = _input->LA(1); while ((((_la & ~ 0x3fULL) == 0) && - ((1ULL << _la) & ((1ULL << FeatParser::INCLUDE) - | (1ULL << FeatParser::FEATURE) - | (1ULL << FeatParser::SCRIPT) - | (1ULL << FeatParser::LANGUAGE) - | (1ULL << FeatParser::SUBTABLE) - | (1ULL << FeatParser::LOOKUPFLAG) - | (1ULL << FeatParser::ENUMERATE) - | (1ULL << FeatParser::ENUMERATE_v) - | (1ULL << FeatParser::EXCEPT) - | (1ULL << FeatParser::IGNORE) - | (1ULL << FeatParser::SUBSTITUTE) - | (1ULL << FeatParser::SUBSTITUTE_v) - | (1ULL << FeatParser::REVERSE) - | (1ULL << FeatParser::REVERSE_v) - | (1ULL << FeatParser::POSITION) - | (1ULL << FeatParser::POSITION_v) - | (1ULL << FeatParser::PARAMETERS) - | (1ULL << FeatParser::FEATURE_NAMES) - | (1ULL << FeatParser::SIZEMENUNAME) - | (1ULL << FeatParser::MARK_CLASS))) != 0) || _la == FeatParser::GCLASS) { + ((1ULL << _la) & 18300065105849184) != 0) || _la == FeatParser::GCLASS) { setState(1039); statement(); setState(1044); @@ -8738,7 +9050,7 @@ size_t FeatParser::CvStatementFileContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::CvStatementFileContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::CvStatementFileContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitCvStatementFile(this); else @@ -8763,12 +9075,7 @@ FeatParser::CvStatementFileContext* FeatParser::cvStatementFile() { _errHandler->sync(this); _la = _input->LA(1); while ((((_la & ~ 0x3fULL) == 0) && - ((1ULL << _la) & ((1ULL << FeatParser::INCLUDE) - | (1ULL << FeatParser::CV_UI_LABEL) - | (1ULL << FeatParser::CV_TOOLTIP) - | (1ULL << FeatParser::CV_SAMPLE_TEXT) - | (1ULL << FeatParser::CV_PARAM_LABEL) - | (1ULL << FeatParser::CV_CHARACTER))) != 0)) { + ((1ULL << _la) & 272678883688480) != 0)) { setState(1047); cvParameterStatement(); setState(1052); @@ -8812,7 +9119,7 @@ size_t FeatParser::BaseFileContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::BaseFileContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::BaseFileContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitBaseFile(this); else @@ -8837,11 +9144,7 @@ FeatParser::BaseFileContext* FeatParser::baseFile() { _errHandler->sync(this); _la = _input->LA(1); while (((((_la - 5) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 5)) & ((1ULL << (FeatParser::INCLUDE - 5)) - | (1ULL << (FeatParser::HA_BTL - 5)) - | (1ULL << (FeatParser::VA_BTL - 5)) - | (1ULL << (FeatParser::HA_BSL - 5)) - | (1ULL << (FeatParser::VA_BSL - 5)))) != 0)) { + ((1ULL << (_la - 5)) & 2161727821137838081) != 0)) { setState(1055); baseStatement(); setState(1060); @@ -8885,7 +9188,7 @@ size_t FeatParser::HeadFileContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::HeadFileContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::HeadFileContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitHeadFile(this); else @@ -8953,7 +9256,7 @@ size_t FeatParser::HheaFileContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::HheaFileContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::HheaFileContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitHheaFile(this); else @@ -8978,10 +9281,7 @@ FeatParser::HheaFileContext* FeatParser::hheaFile() { _errHandler->sync(this); _la = _input->LA(1); while (_la == FeatParser::INCLUDE || ((((_la - 74) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 74)) & ((1ULL << (FeatParser::ASCENDER - 74)) - | (1ULL << (FeatParser::DESCENDER - 74)) - | (1ULL << (FeatParser::LINE_GAP - 74)) - | (1ULL << (FeatParser::CARET_OFFSET - 74)))) != 0)) { + ((1ULL << (_la - 74)) & 15) != 0)) { setState(1071); hheaStatement(); setState(1076); @@ -9025,7 +9325,7 @@ size_t FeatParser::VheaFileContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::VheaFileContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::VheaFileContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitVheaFile(this); else @@ -9050,9 +9350,7 @@ FeatParser::VheaFileContext* FeatParser::vheaFile() { _errHandler->sync(this); _la = _input->LA(1); while (_la == FeatParser::INCLUDE || ((((_la - 109) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 109)) & ((1ULL << (FeatParser::VERT_TYPO_ASCENDER - 109)) - | (1ULL << (FeatParser::VERT_TYPO_DESCENDER - 109)) - | (1ULL << (FeatParser::VERT_TYPO_LINE_GAP - 109)))) != 0)) { + ((1ULL << (_la - 109)) & 7) != 0)) { setState(1079); vheaStatement(); setState(1084); @@ -9096,7 +9394,7 @@ size_t FeatParser::GdefFileContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::GdefFileContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::GdefFileContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitGdefFile(this); else @@ -9121,10 +9419,7 @@ FeatParser::GdefFileContext* FeatParser::gdefFile() { _errHandler->sync(this); _la = _input->LA(1); while (_la == FeatParser::INCLUDE || ((((_la - 67) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 67)) & ((1ULL << (FeatParser::GLYPH_CLASS_DEF - 67)) - | (1ULL << (FeatParser::ATTACH - 67)) - | (1ULL << (FeatParser::LIG_CARET_BY_POS - 67)) - | (1ULL << (FeatParser::LIG_CARET_BY_IDX - 67)))) != 0)) { + ((1ULL << (_la - 67)) & 15) != 0)) { setState(1087); gdefStatement(); setState(1092); @@ -9168,7 +9463,7 @@ size_t FeatParser::NameFileContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::NameFileContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::NameFileContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitNameFile(this); else @@ -9236,7 +9531,7 @@ size_t FeatParser::VmtxFileContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::VmtxFileContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::VmtxFileContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitVmtxFile(this); else @@ -9306,7 +9601,7 @@ size_t FeatParser::Os_2FileContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::Os_2FileContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::Os_2FileContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitOs_2File(this); else @@ -9331,24 +9626,7 @@ FeatParser::Os_2FileContext* FeatParser::os_2File() { _errHandler->sync(this); _la = _input->LA(1); while (_la == FeatParser::INCLUDE || ((((_la - 81) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 81)) & ((1ULL << (FeatParser::FS_TYPE - 81)) - | (1ULL << (FeatParser::FS_TYPE_v - 81)) - | (1ULL << (FeatParser::OS2_LOWER_OP_SIZE - 81)) - | (1ULL << (FeatParser::OS2_UPPER_OP_SIZE - 81)) - | (1ULL << (FeatParser::PANOSE - 81)) - | (1ULL << (FeatParser::TYPO_ASCENDER - 81)) - | (1ULL << (FeatParser::TYPO_DESCENDER - 81)) - | (1ULL << (FeatParser::TYPO_LINE_GAP - 81)) - | (1ULL << (FeatParser::WIN_ASCENT - 81)) - | (1ULL << (FeatParser::WIN_DESCENT - 81)) - | (1ULL << (FeatParser::X_HEIGHT - 81)) - | (1ULL << (FeatParser::CAP_HEIGHT - 81)) - | (1ULL << (FeatParser::WEIGHT_CLASS - 81)) - | (1ULL << (FeatParser::WIDTH_CLASS - 81)) - | (1ULL << (FeatParser::VENDOR - 81)) - | (1ULL << (FeatParser::UNICODE_RANGE - 81)) - | (1ULL << (FeatParser::CODE_PAGE_RANGE - 81)) - | (1ULL << (FeatParser::FAMILY_CLASS - 81)))) != 0)) { + ((1ULL << (_la - 81)) & 262143) != 0)) { setState(1111); os_2Statement(); setState(1116); @@ -9392,7 +9670,7 @@ size_t FeatParser::StatFileContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::StatFileContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::StatFileContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitStatFile(this); else @@ -9417,10 +9695,7 @@ FeatParser::StatFileContext* FeatParser::statFile() { _errHandler->sync(this); _la = _input->LA(1); while (_la == FeatParser::INCLUDE || ((((_la - 100) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 100)) & ((1ULL << (FeatParser::ELIDED_FALLBACK_NAME - 100)) - | (1ULL << (FeatParser::ELIDED_FALLBACK_NAME_ID - 100)) - | (1ULL << (FeatParser::DESIGN_AXIS - 100)) - | (1ULL << (FeatParser::AXIS_VALUE - 100)))) != 0)) { + ((1ULL << (_la - 100)) & 15) != 0)) { setState(1119); statStatement(); setState(1124); @@ -9464,7 +9739,7 @@ size_t FeatParser::AxisValueFileContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::AxisValueFileContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::AxisValueFileContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitAxisValueFile(this); else @@ -9489,9 +9764,7 @@ FeatParser::AxisValueFileContext* FeatParser::axisValueFile() { _errHandler->sync(this); _la = _input->LA(1); while (_la == FeatParser::INCLUDE || ((((_la - 78) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 78)) & ((1ULL << (FeatParser::NAME - 78)) - | (1ULL << (FeatParser::FLAG - 78)) - | (1ULL << (FeatParser::LOCATION - 78)))) != 0)) { + ((1ULL << (_la - 78)) & 201326593) != 0)) { setState(1127); axisValueStatement(); setState(1132); @@ -9535,7 +9808,7 @@ size_t FeatParser::NameEntryFileContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::NameEntryFileContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::NameEntryFileContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitNameEntryFile(this); else @@ -9599,7 +9872,7 @@ size_t FeatParser::SubtokContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::SubtokContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::SubtokContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitSubtok(this); else @@ -9662,7 +9935,7 @@ size_t FeatParser::RevtokContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::RevtokContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::RevtokContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitRevtok(this); else @@ -9725,7 +9998,7 @@ size_t FeatParser::AnontokContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::AnontokContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::AnontokContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitAnontok(this); else @@ -9788,7 +10061,7 @@ size_t FeatParser::EnumtokContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::EnumtokContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::EnumtokContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitEnumtok(this); else @@ -9851,7 +10124,7 @@ size_t FeatParser::PostokContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::PostokContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::PostokContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitPostok(this); else @@ -9914,7 +10187,7 @@ size_t FeatParser::MarkligtokContext::getRuleIndex() const { } -antlrcpp::Any FeatParser::MarkligtokContext::accept(tree::ParseTreeVisitor *visitor) { +std::any FeatParser::MarkligtokContext::accept(tree::ParseTreeVisitor *visitor) { if (auto parserVisitor = dynamic_cast(visitor)) return parserVisitor->visitMarkligtok(this); else @@ -9957,978 +10230,10 @@ FeatParser::MarkligtokContext* FeatParser::markligtok() { return _localctx; } -// Static vars and initialization. -std::vector FeatParser::_decisionToDFA; -atn::PredictionContextCache FeatParser::_sharedContextCache; - -// We own the ATN which in turn owns the ATN states. -atn::ATN FeatParser::_atn; -std::vector FeatParser::_serializedATN; - -std::vector FeatParser::_ruleNames = { - "file", "topLevelStatement", "include", "glyphClassAssign", "langsysAssign", - "mark_statement", "anchorDef", "valueRecordDef", "featureBlock", "tableBlock", - "anonBlock", "lookupBlockTopLevel", "featureStatement", "lookupBlockOrUse", - "cvParameterBlock", "cvParameterStatement", "cvParameter", "statement", - "featureUse", "scriptAssign", "langAssign", "lookupflagAssign", "lookupflagElement", - "ignoreSubOrPos", "substitute", "position", "valuePattern", "valueRecord", - "valueLiteral", "cursiveElement", "baseToMarkElement", "ligatureMarkElement", - "parameters", "sizemenuname", "featureNames", "subtable", "table_BASE", - "baseStatement", "axisTags", "axisScripts", "baseScript", "table_GDEF", - "gdefStatement", "gdefGlyphClass", "gdefAttach", "gdefLigCaretPos", "gdefLigCaretIndex", - "table_head", "headStatement", "head", "table_hhea", "hheaStatement", - "hhea", "table_vhea", "vheaStatement", "vhea", "table_name", "nameStatement", - "nameID", "table_OS_2", "os_2Statement", "os_2", "table_STAT", "statStatement", - "designAxis", "axisValue", "axisValueStatement", "axisValueLocation", - "axisValueFlags", "elidedFallbackName", "nameEntryStatement", "elidedFallbackNameID", - "nameEntry", "table_vmtx", "vmtxStatement", "vmtx", "anchor", "lookupPattern", - "lookupPatternElement", "pattern", "patternElement", "glyphClassOptional", - "glyphClass", "gcLiteral", "gcLiteralElement", "glyph", "glyphName", "label", - "tag", "fixedNum", "genNum", "featureFile", "statementFile", "cvStatementFile", - "baseFile", "headFile", "hheaFile", "vheaFile", "gdefFile", "nameFile", - "vmtxFile", "os_2File", "statFile", "axisValueFile", "nameEntryFile", - "subtok", "revtok", "anontok", "enumtok", "postok", "markligtok" -}; - -std::vector FeatParser::_literalNames = { - "", "'anon'", "'anonymous'", "", "", "'include'", "'feature'", "'table'", - "'script'", "'language'", "'languagesystem'", "'subtable'", "'lookup'", - "'lookupflag'", "'.notdef'", "'RightToLeft'", "'IgnoreBaseGlyphs'", "'IgnoreLigatures'", - "'IgnoreMarks'", "'UseMarkFilteringSet'", "'MarkAttachmentType'", "'excludeDFLT'", - "'includeDFLT'", "'exclude_dflt'", "'include_dflt'", "'useExtension'", - "'<'", "'>'", "'enumerate'", "'enum'", "'except'", "'ignore'", "'substitute'", - "'sub'", "'reversesub'", "'rsub'", "'by'", "'from'", "'position'", "'pos'", - "'parameters'", "'featureNames'", "'cvParameters'", "'FeatUILabelNameID'", - "'FeatUITooltipTextNameID'", "'SampleTextNameID'", "'ParamUILabelNameID'", - "'Character'", "'sizemenuname'", "'contourpoint'", "'anchor'", "'anchorDef'", - "'valueRecordDef'", "'mark'", "'markClass'", "'cursive'", "'base'", "'ligature'", - "'lig'", "'ligComponent'", "'NULL'", "'BASE'", "'HorizAxis.BaseTagList'", - "'VertAxis.BaseTagList'", "'HorizAxis.BaseScriptList'", "'VertAxis.BaseScriptList'", - "'GDEF'", "'GlyphClassDef'", "'Attach'", "'LigatureCaretByPos'", "'LigatureCaretByIndex'", - "'head'", "'FontRevision'", "'hhea'", "'Ascender'", "'Descender'", "'LineGap'", - "'CaretOffset'", "'name'", "'nameid'", "'OS/2'", "'FSType'", "'fsType'", - "'LowerOpSize'", "'UpperOpSize'", "'Panose'", "'TypoAscender'", "'TypoDescender'", - "'TypoLineGap'", "'winAscent'", "'winDescent'", "'XHeight'", "'CapHeight'", - "'WeightClass'", "'WidthClass'", "'Vendor'", "'UnicodeRange'", "'CodePageRange'", - "'FamilyClass'", "'STAT'", "'ElidedFallbackName'", "'ElidedFallbackNameID'", - "'DesignAxis'", "'AxisValue'", "'flag'", "'location'", "'ElidableAxisValueName'", - "'OlderSiblingFontAttribute'", "'vhea'", "'VertTypoAscender'", "'VertTypoDescender'", - "'VertTypoLineGap'", "'vmtx'", "'VertOriginY'", "'VertAdvanceY'", "", - "'}'", "'['", "']'", "'-'", "';'", "'='", "'''", "','", "", "", "", "", - "", "", "", "", "", "", "", "", "", "", "", "", "", "'('", "", "')'" -}; - -std::vector FeatParser::_symbolicNames = { - "", "ANON", "ANON_v", "COMMENT", "WHITESPACE", "INCLUDE", "FEATURE", "TABLE", - "SCRIPT", "LANGUAGE", "LANGSYS", "SUBTABLE", "LOOKUP", "LOOKUPFLAG", "NOTDEF", - "RIGHT_TO_LEFT", "IGNORE_BASE_GLYPHS", "IGNORE_LIGATURES", "IGNORE_MARKS", - "USE_MARK_FILTERING_SET", "MARK_ATTACHMENT_TYPE", "EXCLUDE_DFLT", "INCLUDE_DFLT", - "EXCLUDE_dflt", "INCLUDE_dflt", "USE_EXTENSION", "BEGINVALUE", "ENDVALUE", - "ENUMERATE", "ENUMERATE_v", "EXCEPT", "IGNORE", "SUBSTITUTE", "SUBSTITUTE_v", - "REVERSE", "REVERSE_v", "BY", "FROM", "POSITION", "POSITION_v", "PARAMETERS", - "FEATURE_NAMES", "CV_PARAMETERS", "CV_UI_LABEL", "CV_TOOLTIP", "CV_SAMPLE_TEXT", - "CV_PARAM_LABEL", "CV_CHARACTER", "SIZEMENUNAME", "CONTOURPOINT", "ANCHOR", - "ANCHOR_DEF", "VALUE_RECORD_DEF", "MARK", "MARK_CLASS", "CURSIVE", "MARKBASE", - "MARKLIG", "MARKLIG_v", "LIG_COMPONENT", "KNULL", "BASE", "HA_BTL", "VA_BTL", - "HA_BSL", "VA_BSL", "GDEF", "GLYPH_CLASS_DEF", "ATTACH", "LIG_CARET_BY_POS", - "LIG_CARET_BY_IDX", "HEAD", "FONT_REVISION", "HHEA", "ASCENDER", "DESCENDER", - "LINE_GAP", "CARET_OFFSET", "NAME", "NAMEID", "OS_2", "FS_TYPE", "FS_TYPE_v", - "OS2_LOWER_OP_SIZE", "OS2_UPPER_OP_SIZE", "PANOSE", "TYPO_ASCENDER", "TYPO_DESCENDER", - "TYPO_LINE_GAP", "WIN_ASCENT", "WIN_DESCENT", "X_HEIGHT", "CAP_HEIGHT", - "WEIGHT_CLASS", "WIDTH_CLASS", "VENDOR", "UNICODE_RANGE", "CODE_PAGE_RANGE", - "FAMILY_CLASS", "STAT", "ELIDED_FALLBACK_NAME", "ELIDED_FALLBACK_NAME_ID", - "DESIGN_AXIS", "AXIS_VALUE", "FLAG", "LOCATION", "AXIS_EAVN", "AXIS_OSFA", - "VHEA", "VERT_TYPO_ASCENDER", "VERT_TYPO_DESCENDER", "VERT_TYPO_LINE_GAP", - "VMTX", "VERT_ORIGIN_Y", "VERT_ADVANCE_Y", "LCBRACE", "RCBRACE", "LBRACKET", - "RBRACKET", "HYPHEN", "SEMI", "EQUALS", "MARKER", "COMMA", "QUOTE", "GCLASS", - "CID", "ESCGNAME", "NAMELABEL", "EXTNAME", "POINTNUM", "NUMEXT", "NUMOCT", - "NUM", "CATCHTAG", "A_WHITESPACE", "A_LABEL", "A_LBRACE", "A_CLOSE", "A_LINE", - "I_WHITESPACE", "I_RPAREN", "IFILE", "I_LPAREN", "STRVAL", "EQUOTE" -}; - -dfa::Vocabulary FeatParser::_vocabulary(_literalNames, _symbolicNames); - -std::vector FeatParser::_tokenNames; - -FeatParser::Initializer::Initializer() { - for (size_t i = 0; i < _symbolicNames.size(); ++i) { - std::string name = _vocabulary.getLiteralName(i); - if (name.empty()) { - name = _vocabulary.getSymbolicName(i); - } - - if (name.empty()) { - _tokenNames.push_back(""); - } else { - _tokenNames.push_back(name); - } - } - - static const uint16_t serializedATNSegment0[] = { - 0x3, 0x608b, 0xa72a, 0x8133, 0xb9ed, 0x417c, 0x3be7, 0x7786, 0x5964, - 0x3, 0x93, 0x486, 0x4, 0x2, 0x9, 0x2, 0x4, 0x3, 0x9, 0x3, 0x4, 0x4, - 0x9, 0x4, 0x4, 0x5, 0x9, 0x5, 0x4, 0x6, 0x9, 0x6, 0x4, 0x7, 0x9, - 0x7, 0x4, 0x8, 0x9, 0x8, 0x4, 0x9, 0x9, 0x9, 0x4, 0xa, 0x9, 0xa, - 0x4, 0xb, 0x9, 0xb, 0x4, 0xc, 0x9, 0xc, 0x4, 0xd, 0x9, 0xd, 0x4, - 0xe, 0x9, 0xe, 0x4, 0xf, 0x9, 0xf, 0x4, 0x10, 0x9, 0x10, 0x4, 0x11, - 0x9, 0x11, 0x4, 0x12, 0x9, 0x12, 0x4, 0x13, 0x9, 0x13, 0x4, 0x14, - 0x9, 0x14, 0x4, 0x15, 0x9, 0x15, 0x4, 0x16, 0x9, 0x16, 0x4, 0x17, - 0x9, 0x17, 0x4, 0x18, 0x9, 0x18, 0x4, 0x19, 0x9, 0x19, 0x4, 0x1a, - 0x9, 0x1a, 0x4, 0x1b, 0x9, 0x1b, 0x4, 0x1c, 0x9, 0x1c, 0x4, 0x1d, - 0x9, 0x1d, 0x4, 0x1e, 0x9, 0x1e, 0x4, 0x1f, 0x9, 0x1f, 0x4, 0x20, - 0x9, 0x20, 0x4, 0x21, 0x9, 0x21, 0x4, 0x22, 0x9, 0x22, 0x4, 0x23, - 0x9, 0x23, 0x4, 0x24, 0x9, 0x24, 0x4, 0x25, 0x9, 0x25, 0x4, 0x26, - 0x9, 0x26, 0x4, 0x27, 0x9, 0x27, 0x4, 0x28, 0x9, 0x28, 0x4, 0x29, - 0x9, 0x29, 0x4, 0x2a, 0x9, 0x2a, 0x4, 0x2b, 0x9, 0x2b, 0x4, 0x2c, - 0x9, 0x2c, 0x4, 0x2d, 0x9, 0x2d, 0x4, 0x2e, 0x9, 0x2e, 0x4, 0x2f, - 0x9, 0x2f, 0x4, 0x30, 0x9, 0x30, 0x4, 0x31, 0x9, 0x31, 0x4, 0x32, - 0x9, 0x32, 0x4, 0x33, 0x9, 0x33, 0x4, 0x34, 0x9, 0x34, 0x4, 0x35, - 0x9, 0x35, 0x4, 0x36, 0x9, 0x36, 0x4, 0x37, 0x9, 0x37, 0x4, 0x38, - 0x9, 0x38, 0x4, 0x39, 0x9, 0x39, 0x4, 0x3a, 0x9, 0x3a, 0x4, 0x3b, - 0x9, 0x3b, 0x4, 0x3c, 0x9, 0x3c, 0x4, 0x3d, 0x9, 0x3d, 0x4, 0x3e, - 0x9, 0x3e, 0x4, 0x3f, 0x9, 0x3f, 0x4, 0x40, 0x9, 0x40, 0x4, 0x41, - 0x9, 0x41, 0x4, 0x42, 0x9, 0x42, 0x4, 0x43, 0x9, 0x43, 0x4, 0x44, - 0x9, 0x44, 0x4, 0x45, 0x9, 0x45, 0x4, 0x46, 0x9, 0x46, 0x4, 0x47, - 0x9, 0x47, 0x4, 0x48, 0x9, 0x48, 0x4, 0x49, 0x9, 0x49, 0x4, 0x4a, - 0x9, 0x4a, 0x4, 0x4b, 0x9, 0x4b, 0x4, 0x4c, 0x9, 0x4c, 0x4, 0x4d, - 0x9, 0x4d, 0x4, 0x4e, 0x9, 0x4e, 0x4, 0x4f, 0x9, 0x4f, 0x4, 0x50, - 0x9, 0x50, 0x4, 0x51, 0x9, 0x51, 0x4, 0x52, 0x9, 0x52, 0x4, 0x53, - 0x9, 0x53, 0x4, 0x54, 0x9, 0x54, 0x4, 0x55, 0x9, 0x55, 0x4, 0x56, - 0x9, 0x56, 0x4, 0x57, 0x9, 0x57, 0x4, 0x58, 0x9, 0x58, 0x4, 0x59, - 0x9, 0x59, 0x4, 0x5a, 0x9, 0x5a, 0x4, 0x5b, 0x9, 0x5b, 0x4, 0x5c, - 0x9, 0x5c, 0x4, 0x5d, 0x9, 0x5d, 0x4, 0x5e, 0x9, 0x5e, 0x4, 0x5f, - 0x9, 0x5f, 0x4, 0x60, 0x9, 0x60, 0x4, 0x61, 0x9, 0x61, 0x4, 0x62, - 0x9, 0x62, 0x4, 0x63, 0x9, 0x63, 0x4, 0x64, 0x9, 0x64, 0x4, 0x65, - 0x9, 0x65, 0x4, 0x66, 0x9, 0x66, 0x4, 0x67, 0x9, 0x67, 0x4, 0x68, - 0x9, 0x68, 0x4, 0x69, 0x9, 0x69, 0x4, 0x6a, 0x9, 0x6a, 0x4, 0x6b, - 0x9, 0x6b, 0x4, 0x6c, 0x9, 0x6c, 0x4, 0x6d, 0x9, 0x6d, 0x4, 0x6e, - 0x9, 0x6e, 0x4, 0x6f, 0x9, 0x6f, 0x4, 0x70, 0x9, 0x70, 0x3, 0x2, - 0x3, 0x2, 0x3, 0x2, 0x3, 0x2, 0x3, 0x2, 0x7, 0x2, 0xe6, 0xa, 0x2, - 0xc, 0x2, 0xe, 0x2, 0xe9, 0xb, 0x2, 0x3, 0x2, 0x3, 0x2, 0x3, 0x3, - 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x5, 0x3, 0xf3, - 0xa, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x4, 0x3, 0x4, 0x3, 0x4, 0x3, - 0x4, 0x3, 0x4, 0x3, 0x5, 0x3, 0x5, 0x3, 0x5, 0x3, 0x5, 0x3, 0x6, - 0x3, 0x6, 0x3, 0x6, 0x3, 0x6, 0x3, 0x7, 0x3, 0x7, 0x3, 0x7, 0x5, - 0x7, 0x107, 0xa, 0x7, 0x3, 0x7, 0x3, 0x7, 0x3, 0x7, 0x3, 0x8, 0x3, - 0x8, 0x3, 0x8, 0x3, 0x8, 0x3, 0x8, 0x5, 0x8, 0x111, 0xa, 0x8, 0x3, - 0x8, 0x3, 0x8, 0x3, 0x9, 0x3, 0x9, 0x3, 0x9, 0x3, 0x9, 0x3, 0xa, - 0x3, 0xa, 0x3, 0xa, 0x5, 0xa, 0x11c, 0xa, 0xa, 0x3, 0xa, 0x3, 0xa, - 0x6, 0xa, 0x120, 0xa, 0xa, 0xd, 0xa, 0xe, 0xa, 0x121, 0x3, 0xa, 0x3, - 0xa, 0x3, 0xa, 0x3, 0xa, 0x3, 0xb, 0x3, 0xb, 0x3, 0xb, 0x3, 0xb, - 0x3, 0xb, 0x3, 0xb, 0x3, 0xb, 0x3, 0xb, 0x3, 0xb, 0x3, 0xb, 0x5, - 0xb, 0x132, 0xa, 0xb, 0x3, 0xc, 0x3, 0xc, 0x3, 0xc, 0x3, 0xc, 0x7, - 0xc, 0x138, 0xa, 0xc, 0xc, 0xc, 0xe, 0xc, 0x13b, 0xb, 0xc, 0x3, 0xc, - 0x3, 0xc, 0x3, 0xd, 0x3, 0xd, 0x3, 0xd, 0x5, 0xd, 0x142, 0xa, 0xd, - 0x3, 0xd, 0x3, 0xd, 0x6, 0xd, 0x146, 0xa, 0xd, 0xd, 0xd, 0xe, 0xd, - 0x147, 0x3, 0xd, 0x3, 0xd, 0x3, 0xd, 0x3, 0xd, 0x3, 0xe, 0x3, 0xe, - 0x3, 0xe, 0x5, 0xe, 0x151, 0xa, 0xe, 0x3, 0xf, 0x3, 0xf, 0x3, 0xf, - 0x5, 0xf, 0x156, 0xa, 0xf, 0x3, 0xf, 0x3, 0xf, 0x6, 0xf, 0x15a, 0xa, - 0xf, 0xd, 0xf, 0xe, 0xf, 0x15b, 0x3, 0xf, 0x3, 0xf, 0x3, 0xf, 0x5, - 0xf, 0x161, 0xa, 0xf, 0x3, 0xf, 0x3, 0xf, 0x3, 0x10, 0x3, 0x10, 0x3, - 0x10, 0x7, 0x10, 0x168, 0xa, 0x10, 0xc, 0x10, 0xe, 0x10, 0x16b, 0xb, - 0x10, 0x3, 0x10, 0x3, 0x10, 0x3, 0x10, 0x3, 0x11, 0x3, 0x11, 0x5, - 0x11, 0x172, 0xa, 0x11, 0x3, 0x11, 0x3, 0x11, 0x3, 0x12, 0x3, 0x12, - 0x3, 0x12, 0x6, 0x12, 0x179, 0xa, 0x12, 0xd, 0x12, 0xe, 0x12, 0x17a, - 0x3, 0x12, 0x3, 0x12, 0x3, 0x12, 0x3, 0x12, 0x5, 0x12, 0x181, 0xa, - 0x12, 0x3, 0x13, 0x3, 0x13, 0x3, 0x13, 0x3, 0x13, 0x3, 0x13, 0x3, - 0x13, 0x3, 0x13, 0x3, 0x13, 0x3, 0x13, 0x3, 0x13, 0x3, 0x13, 0x3, - 0x13, 0x3, 0x13, 0x3, 0x13, 0x5, 0x13, 0x191, 0xa, 0x13, 0x3, 0x13, - 0x3, 0x13, 0x3, 0x14, 0x3, 0x14, 0x3, 0x14, 0x3, 0x15, 0x3, 0x15, - 0x3, 0x15, 0x3, 0x16, 0x3, 0x16, 0x3, 0x16, 0x5, 0x16, 0x19e, 0xa, - 0x16, 0x3, 0x17, 0x3, 0x17, 0x3, 0x17, 0x6, 0x17, 0x1a3, 0xa, 0x17, - 0xd, 0x17, 0xe, 0x17, 0x1a4, 0x5, 0x17, 0x1a7, 0xa, 0x17, 0x3, 0x18, - 0x3, 0x18, 0x3, 0x18, 0x3, 0x18, 0x3, 0x18, 0x3, 0x18, 0x3, 0x18, - 0x3, 0x18, 0x5, 0x18, 0x1b1, 0xa, 0x18, 0x3, 0x19, 0x3, 0x19, 0x3, - 0x19, 0x3, 0x19, 0x5, 0x19, 0x1b7, 0xa, 0x19, 0x3, 0x19, 0x3, 0x19, - 0x3, 0x19, 0x7, 0x19, 0x1bc, 0xa, 0x19, 0xc, 0x19, 0xe, 0x19, 0x1bf, - 0xb, 0x19, 0x3, 0x1a, 0x3, 0x1a, 0x3, 0x1a, 0x3, 0x1a, 0x7, 0x1a, - 0x1c5, 0xa, 0x1a, 0xc, 0x1a, 0xe, 0x1a, 0x1c8, 0xb, 0x1a, 0x5, 0x1a, - 0x1ca, 0xa, 0x1a, 0x3, 0x1a, 0x3, 0x1a, 0x3, 0x1a, 0x3, 0x1a, 0x3, - 0x1a, 0x5, 0x1a, 0x1d1, 0xa, 0x1a, 0x5, 0x1a, 0x1d3, 0xa, 0x1a, 0x3, - 0x1a, 0x3, 0x1a, 0x3, 0x1a, 0x3, 0x1a, 0x3, 0x1a, 0x5, 0x1a, 0x1da, - 0xa, 0x1a, 0x5, 0x1a, 0x1dc, 0xa, 0x1a, 0x5, 0x1a, 0x1de, 0xa, 0x1a, - 0x3, 0x1b, 0x5, 0x1b, 0x1e1, 0xa, 0x1b, 0x3, 0x1b, 0x3, 0x1b, 0x5, - 0x1b, 0x1e5, 0xa, 0x1b, 0x3, 0x1b, 0x3, 0x1b, 0x7, 0x1b, 0x1e9, 0xa, - 0x1b, 0xc, 0x1b, 0xe, 0x1b, 0x1ec, 0xb, 0x1b, 0x3, 0x1b, 0x3, 0x1b, - 0x6, 0x1b, 0x1f0, 0xa, 0x1b, 0xd, 0x1b, 0xe, 0x1b, 0x1f1, 0x3, 0x1b, - 0x7, 0x1b, 0x1f5, 0xa, 0x1b, 0xc, 0x1b, 0xe, 0x1b, 0x1f8, 0xb, 0x1b, - 0x3, 0x1b, 0x3, 0x1b, 0x3, 0x1b, 0x5, 0x1b, 0x1fd, 0xa, 0x1b, 0x3, - 0x1b, 0x3, 0x1b, 0x3, 0x1b, 0x6, 0x1b, 0x202, 0xa, 0x1b, 0xd, 0x1b, - 0xe, 0x1b, 0x203, 0x3, 0x1b, 0x5, 0x1b, 0x207, 0xa, 0x1b, 0x3, 0x1b, - 0x3, 0x1b, 0x3, 0x1b, 0x6, 0x1b, 0x20c, 0xa, 0x1b, 0xd, 0x1b, 0xe, - 0x1b, 0x20d, 0x3, 0x1b, 0x5, 0x1b, 0x211, 0xa, 0x1b, 0x3, 0x1b, 0x3, - 0x1b, 0x3, 0x1b, 0x6, 0x1b, 0x216, 0xa, 0x1b, 0xd, 0x1b, 0xe, 0x1b, - 0x217, 0x3, 0x1b, 0x5, 0x1b, 0x21b, 0xa, 0x1b, 0x5, 0x1b, 0x21d, - 0xa, 0x1b, 0x3, 0x1c, 0x3, 0x1c, 0x5, 0x1c, 0x221, 0xa, 0x1c, 0x3, - 0x1d, 0x3, 0x1d, 0x3, 0x1d, 0x3, 0x1d, 0x3, 0x1d, 0x5, 0x1d, 0x228, - 0xa, 0x1d, 0x3, 0x1e, 0x3, 0x1e, 0x3, 0x1e, 0x3, 0x1e, 0x3, 0x1e, - 0x3, 0x1e, 0x3, 0x1e, 0x5, 0x1e, 0x231, 0xa, 0x1e, 0x3, 0x1f, 0x3, - 0x1f, 0x3, 0x1f, 0x3, 0x1f, 0x3, 0x20, 0x3, 0x20, 0x3, 0x20, 0x3, - 0x20, 0x5, 0x20, 0x23b, 0xa, 0x20, 0x3, 0x21, 0x3, 0x21, 0x3, 0x21, - 0x5, 0x21, 0x240, 0xa, 0x21, 0x3, 0x21, 0x5, 0x21, 0x243, 0xa, 0x21, - 0x3, 0x21, 0x5, 0x21, 0x246, 0xa, 0x21, 0x3, 0x22, 0x3, 0x22, 0x6, - 0x22, 0x24a, 0xa, 0x22, 0xd, 0x22, 0xe, 0x22, 0x24b, 0x3, 0x23, 0x3, - 0x23, 0x3, 0x23, 0x3, 0x23, 0x3, 0x23, 0x5, 0x23, 0x253, 0xa, 0x23, - 0x5, 0x23, 0x255, 0xa, 0x23, 0x3, 0x23, 0x3, 0x23, 0x3, 0x23, 0x3, - 0x23, 0x3, 0x24, 0x3, 0x24, 0x3, 0x24, 0x6, 0x24, 0x25e, 0xa, 0x24, - 0xd, 0x24, 0xe, 0x24, 0x25f, 0x3, 0x24, 0x3, 0x24, 0x3, 0x25, 0x3, - 0x25, 0x3, 0x26, 0x3, 0x26, 0x3, 0x26, 0x6, 0x26, 0x269, 0xa, 0x26, - 0xd, 0x26, 0xe, 0x26, 0x26a, 0x3, 0x26, 0x3, 0x26, 0x3, 0x26, 0x3, - 0x26, 0x3, 0x27, 0x3, 0x27, 0x3, 0x27, 0x5, 0x27, 0x274, 0xa, 0x27, - 0x3, 0x27, 0x3, 0x27, 0x3, 0x28, 0x3, 0x28, 0x6, 0x28, 0x27a, 0xa, - 0x28, 0xd, 0x28, 0xe, 0x28, 0x27b, 0x3, 0x29, 0x3, 0x29, 0x3, 0x29, - 0x3, 0x29, 0x7, 0x29, 0x282, 0xa, 0x29, 0xc, 0x29, 0xe, 0x29, 0x285, - 0xb, 0x29, 0x3, 0x2a, 0x3, 0x2a, 0x3, 0x2a, 0x6, 0x2a, 0x28a, 0xa, - 0x2a, 0xd, 0x2a, 0xe, 0x2a, 0x28b, 0x3, 0x2b, 0x3, 0x2b, 0x3, 0x2b, - 0x6, 0x2b, 0x291, 0xa, 0x2b, 0xd, 0x2b, 0xe, 0x2b, 0x292, 0x3, 0x2b, - 0x3, 0x2b, 0x3, 0x2b, 0x3, 0x2b, 0x3, 0x2c, 0x3, 0x2c, 0x3, 0x2c, - 0x3, 0x2c, 0x3, 0x2c, 0x5, 0x2c, 0x29e, 0xa, 0x2c, 0x3, 0x2c, 0x3, - 0x2c, 0x3, 0x2d, 0x3, 0x2d, 0x3, 0x2d, 0x3, 0x2d, 0x3, 0x2d, 0x3, - 0x2d, 0x3, 0x2d, 0x3, 0x2d, 0x3, 0x2d, 0x3, 0x2e, 0x3, 0x2e, 0x3, - 0x2e, 0x6, 0x2e, 0x2ae, 0xa, 0x2e, 0xd, 0x2e, 0xe, 0x2e, 0x2af, 0x3, - 0x2f, 0x3, 0x2f, 0x3, 0x2f, 0x6, 0x2f, 0x2b5, 0xa, 0x2f, 0xd, 0x2f, - 0xe, 0x2f, 0x2b6, 0x3, 0x30, 0x3, 0x30, 0x3, 0x30, 0x6, 0x30, 0x2bc, - 0xa, 0x30, 0xd, 0x30, 0xe, 0x30, 0x2bd, 0x3, 0x31, 0x3, 0x31, 0x3, - 0x31, 0x6, 0x31, 0x2c3, 0xa, 0x31, 0xd, 0x31, 0xe, 0x31, 0x2c4, 0x3, - 0x31, 0x3, 0x31, 0x3, 0x31, 0x3, 0x31, 0x3, 0x32, 0x3, 0x32, 0x5, - 0x32, 0x2cd, 0xa, 0x32, 0x3, 0x32, 0x3, 0x32, 0x3, 0x33, 0x3, 0x33, - 0x3, 0x33, 0x3, 0x34, 0x3, 0x34, 0x3, 0x34, 0x7, 0x34, 0x2d7, 0xa, - 0x34, 0xc, 0x34, 0xe, 0x34, 0x2da, 0xb, 0x34, 0x3, 0x34, 0x3, 0x34, - 0x3, 0x34, 0x3, 0x34, 0x3, 0x35, 0x3, 0x35, 0x5, 0x35, 0x2e2, 0xa, - 0x35, 0x3, 0x35, 0x3, 0x35, 0x3, 0x36, 0x3, 0x36, 0x3, 0x36, 0x3, - 0x37, 0x3, 0x37, 0x3, 0x37, 0x7, 0x37, 0x2ec, 0xa, 0x37, 0xc, 0x37, - 0xe, 0x37, 0x2ef, 0xb, 0x37, 0x3, 0x37, 0x3, 0x37, 0x3, 0x37, 0x3, - 0x37, 0x3, 0x38, 0x3, 0x38, 0x5, 0x38, 0x2f7, 0xa, 0x38, 0x3, 0x38, - 0x3, 0x38, 0x3, 0x39, 0x3, 0x39, 0x3, 0x39, 0x3, 0x3a, 0x3, 0x3a, - 0x3, 0x3a, 0x6, 0x3a, 0x301, 0xa, 0x3a, 0xd, 0x3a, 0xe, 0x3a, 0x302, - 0x3, 0x3a, 0x3, 0x3a, 0x3, 0x3a, 0x3, 0x3a, 0x3, 0x3b, 0x3, 0x3b, - 0x5, 0x3b, 0x30b, 0xa, 0x3b, 0x3, 0x3b, 0x3, 0x3b, 0x3, 0x3c, 0x3, - 0x3c, 0x3, 0x3c, 0x3, 0x3c, 0x3, 0x3c, 0x3, 0x3c, 0x5, 0x3c, 0x315, - 0xa, 0x3c, 0x5, 0x3c, 0x317, 0xa, 0x3c, 0x3, 0x3c, 0x3, 0x3c, 0x3, - 0x3c, 0x3, 0x3c, 0x3, 0x3d, 0x3, 0x3d, 0x3, 0x3d, 0x6, 0x3d, 0x320, - 0xa, 0x3d, 0xd, 0x3d, 0xe, 0x3d, 0x321, 0x3, 0x3d, 0x3, 0x3d, 0x3, - 0x3d, 0x3, 0x3d, 0x3, 0x3e, 0x3, 0x3e, 0x5, 0x3e, 0x32a, 0xa, 0x3e, - 0x3, 0x3e, 0x3, 0x3e, 0x3, 0x3f, 0x3, 0x3f, 0x3, 0x3f, 0x3, 0x3f, - 0x3, 0x3f, 0x3, 0x3f, 0x3, 0x3f, 0x3, 0x3f, 0x3, 0x3f, 0x3, 0x3f, - 0x3, 0x3f, 0x3, 0x3f, 0x3, 0x3f, 0x3, 0x3f, 0x3, 0x3f, 0x3, 0x3f, - 0x3, 0x3f, 0x3, 0x3f, 0x3, 0x3f, 0x3, 0x3f, 0x3, 0x3f, 0x3, 0x3f, - 0x3, 0x3f, 0x6, 0x3f, 0x345, 0xa, 0x3f, 0xd, 0x3f, 0xe, 0x3f, 0x346, - 0x5, 0x3f, 0x349, 0xa, 0x3f, 0x3, 0x40, 0x3, 0x40, 0x3, 0x40, 0x6, - 0x40, 0x34e, 0xa, 0x40, 0xd, 0x40, 0xe, 0x40, 0x34f, 0x3, 0x40, 0x3, - 0x40, 0x3, 0x40, 0x3, 0x40, 0x3, 0x41, 0x3, 0x41, 0x3, 0x41, 0x3, - 0x41, 0x3, 0x41, 0x5, 0x41, 0x35b, 0xa, 0x41, 0x3, 0x41, 0x3, 0x41, - 0x3, 0x42, 0x3, 0x42, 0x3, 0x42, 0x3, 0x42, 0x3, 0x42, 0x6, 0x42, - 0x364, 0xa, 0x42, 0xd, 0x42, 0xe, 0x42, 0x365, 0x3, 0x42, 0x3, 0x42, - 0x3, 0x43, 0x3, 0x43, 0x3, 0x43, 0x6, 0x43, 0x36d, 0xa, 0x43, 0xd, - 0x43, 0xe, 0x43, 0x36e, 0x3, 0x43, 0x3, 0x43, 0x3, 0x44, 0x3, 0x44, - 0x3, 0x44, 0x3, 0x44, 0x5, 0x44, 0x377, 0xa, 0x44, 0x3, 0x44, 0x3, - 0x44, 0x3, 0x45, 0x3, 0x45, 0x3, 0x45, 0x3, 0x45, 0x3, 0x45, 0x5, - 0x45, 0x380, 0xa, 0x45, 0x5, 0x45, 0x382, 0xa, 0x45, 0x3, 0x46, 0x3, - 0x46, 0x6, 0x46, 0x386, 0xa, 0x46, 0xd, 0x46, 0xe, 0x46, 0x387, 0x3, - 0x47, 0x3, 0x47, 0x3, 0x47, 0x6, 0x47, 0x38d, 0xa, 0x47, 0xd, 0x47, - 0xe, 0x47, 0x38e, 0x3, 0x47, 0x3, 0x47, 0x3, 0x48, 0x3, 0x48, 0x5, - 0x48, 0x395, 0xa, 0x48, 0x3, 0x48, 0x3, 0x48, 0x3, 0x49, 0x3, 0x49, - 0x3, 0x49, 0x3, 0x4a, 0x3, 0x4a, 0x3, 0x4a, 0x3, 0x4a, 0x3, 0x4a, - 0x5, 0x4a, 0x3a1, 0xa, 0x4a, 0x5, 0x4a, 0x3a3, 0xa, 0x4a, 0x3, 0x4a, - 0x3, 0x4a, 0x3, 0x4a, 0x3, 0x4a, 0x3, 0x4b, 0x3, 0x4b, 0x3, 0x4b, - 0x6, 0x4b, 0x3ac, 0xa, 0x4b, 0xd, 0x4b, 0xe, 0x4b, 0x3ad, 0x3, 0x4b, - 0x3, 0x4b, 0x3, 0x4b, 0x3, 0x4b, 0x3, 0x4c, 0x3, 0x4c, 0x5, 0x4c, - 0x3b6, 0xa, 0x4c, 0x3, 0x4c, 0x3, 0x4c, 0x3, 0x4d, 0x3, 0x4d, 0x3, - 0x4d, 0x3, 0x4d, 0x3, 0x4e, 0x3, 0x4e, 0x3, 0x4e, 0x3, 0x4e, 0x3, - 0x4e, 0x3, 0x4e, 0x5, 0x4e, 0x3c4, 0xa, 0x4e, 0x3, 0x4e, 0x3, 0x4e, - 0x5, 0x4e, 0x3c8, 0xa, 0x4e, 0x3, 0x4e, 0x3, 0x4e, 0x3, 0x4f, 0x6, - 0x4f, 0x3cd, 0xa, 0x4f, 0xd, 0x4f, 0xe, 0x4f, 0x3ce, 0x3, 0x50, 0x3, - 0x50, 0x3, 0x50, 0x7, 0x50, 0x3d4, 0xa, 0x50, 0xc, 0x50, 0xe, 0x50, - 0x3d7, 0xb, 0x50, 0x3, 0x51, 0x6, 0x51, 0x3da, 0xa, 0x51, 0xd, 0x51, - 0xe, 0x51, 0x3db, 0x3, 0x52, 0x3, 0x52, 0x5, 0x52, 0x3e0, 0xa, 0x52, - 0x3, 0x52, 0x5, 0x52, 0x3e3, 0xa, 0x52, 0x3, 0x53, 0x5, 0x53, 0x3e6, - 0xa, 0x53, 0x3, 0x54, 0x3, 0x54, 0x5, 0x54, 0x3ea, 0xa, 0x54, 0x3, - 0x55, 0x3, 0x55, 0x6, 0x55, 0x3ee, 0xa, 0x55, 0xd, 0x55, 0xe, 0x55, - 0x3ef, 0x3, 0x55, 0x3, 0x55, 0x3, 0x56, 0x3, 0x56, 0x3, 0x56, 0x5, - 0x56, 0x3f7, 0xa, 0x56, 0x3, 0x56, 0x5, 0x56, 0x3fa, 0xa, 0x56, 0x3, - 0x57, 0x3, 0x57, 0x5, 0x57, 0x3fe, 0xa, 0x57, 0x3, 0x58, 0x3, 0x58, - 0x3, 0x59, 0x3, 0x59, 0x3, 0x5a, 0x3, 0x5a, 0x3, 0x5b, 0x3, 0x5b, - 0x3, 0x5c, 0x3, 0x5c, 0x3, 0x5d, 0x7, 0x5d, 0x40b, 0xa, 0x5d, 0xc, - 0x5d, 0xe, 0x5d, 0x40e, 0xb, 0x5d, 0x3, 0x5d, 0x3, 0x5d, 0x3, 0x5e, - 0x7, 0x5e, 0x413, 0xa, 0x5e, 0xc, 0x5e, 0xe, 0x5e, 0x416, 0xb, 0x5e, - 0x3, 0x5e, 0x3, 0x5e, 0x3, 0x5f, 0x7, 0x5f, 0x41b, 0xa, 0x5f, 0xc, - 0x5f, 0xe, 0x5f, 0x41e, 0xb, 0x5f, 0x3, 0x5f, 0x3, 0x5f, 0x3, 0x60, - 0x7, 0x60, 0x423, 0xa, 0x60, 0xc, 0x60, 0xe, 0x60, 0x426, 0xb, 0x60, - 0x3, 0x60, 0x3, 0x60, 0x3, 0x61, 0x7, 0x61, 0x42b, 0xa, 0x61, 0xc, - 0x61, 0xe, 0x61, 0x42e, 0xb, 0x61, 0x3, 0x61, 0x3, 0x61, 0x3, 0x62, - 0x7, 0x62, 0x433, 0xa, 0x62, 0xc, 0x62, 0xe, 0x62, 0x436, 0xb, 0x62, - 0x3, 0x62, 0x3, 0x62, 0x3, 0x63, 0x7, 0x63, 0x43b, 0xa, 0x63, 0xc, - 0x63, 0xe, 0x63, 0x43e, 0xb, 0x63, 0x3, 0x63, 0x3, 0x63, 0x3, 0x64, - 0x7, 0x64, 0x443, 0xa, 0x64, 0xc, 0x64, 0xe, 0x64, 0x446, 0xb, 0x64, - 0x3, 0x64, 0x3, 0x64, 0x3, 0x65, 0x7, 0x65, 0x44b, 0xa, 0x65, 0xc, - 0x65, 0xe, 0x65, 0x44e, 0xb, 0x65, 0x3, 0x65, 0x3, 0x65, 0x3, 0x66, - 0x7, 0x66, 0x453, 0xa, 0x66, 0xc, 0x66, 0xe, 0x66, 0x456, 0xb, 0x66, - 0x3, 0x66, 0x3, 0x66, 0x3, 0x67, 0x7, 0x67, 0x45b, 0xa, 0x67, 0xc, - 0x67, 0xe, 0x67, 0x45e, 0xb, 0x67, 0x3, 0x67, 0x3, 0x67, 0x3, 0x68, - 0x7, 0x68, 0x463, 0xa, 0x68, 0xc, 0x68, 0xe, 0x68, 0x466, 0xb, 0x68, - 0x3, 0x68, 0x3, 0x68, 0x3, 0x69, 0x7, 0x69, 0x46b, 0xa, 0x69, 0xc, - 0x69, 0xe, 0x69, 0x46e, 0xb, 0x69, 0x3, 0x69, 0x3, 0x69, 0x3, 0x6a, - 0x7, 0x6a, 0x473, 0xa, 0x6a, 0xc, 0x6a, 0xe, 0x6a, 0x476, 0xb, 0x6a, - 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6c, 0x3, 0x6c, - 0x3, 0x6d, 0x3, 0x6d, 0x3, 0x6e, 0x3, 0x6e, 0x3, 0x6f, 0x3, 0x6f, - 0x3, 0x70, 0x3, 0x70, 0x3, 0x70, 0x2, 0x2, 0x71, 0x2, 0x4, 0x6, 0x8, - 0xa, 0xc, 0xe, 0x10, 0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e, 0x20, - 0x22, 0x24, 0x26, 0x28, 0x2a, 0x2c, 0x2e, 0x30, 0x32, 0x34, 0x36, - 0x38, 0x3a, 0x3c, 0x3e, 0x40, 0x42, 0x44, 0x46, 0x48, 0x4a, 0x4c, - 0x4e, 0x50, 0x52, 0x54, 0x56, 0x58, 0x5a, 0x5c, 0x5e, 0x60, 0x62, - 0x64, 0x66, 0x68, 0x6a, 0x6c, 0x6e, 0x70, 0x72, 0x74, 0x76, 0x78, - 0x7a, 0x7c, 0x7e, 0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c, 0x8e, - 0x90, 0x92, 0x94, 0x96, 0x98, 0x9a, 0x9c, 0x9e, 0xa0, 0xa2, 0xa4, - 0xa6, 0xa8, 0xaa, 0xac, 0xae, 0xb0, 0xb2, 0xb4, 0xb6, 0xb8, 0xba, - 0xbc, 0xbe, 0xc0, 0xc2, 0xc4, 0xc6, 0xc8, 0xca, 0xcc, 0xce, 0xd0, - 0xd2, 0xd4, 0xd6, 0xd8, 0xda, 0xdc, 0xde, 0x2, 0x19, 0x3, 0x2, 0x2d, - 0x30, 0x3, 0x2, 0x17, 0x1a, 0x3, 0x2, 0x26, 0x27, 0x3, 0x2, 0x40, - 0x41, 0x3, 0x2, 0x42, 0x43, 0x3, 0x2, 0x4c, 0x4f, 0x3, 0x2, 0x6f, - 0x71, 0x3, 0x2, 0x58, 0x5e, 0x4, 0x2, 0x53, 0x56, 0x5f, 0x60, 0x3, - 0x2, 0x62, 0x63, 0x3, 0x2, 0x6c, 0x6d, 0x3, 0x2, 0x73, 0x74, 0x4, - 0x2, 0x10, 0x10, 0x81, 0x83, 0x4, 0x2, 0x37, 0x37, 0x82, 0x82, 0x5, - 0x2, 0x37, 0x37, 0x82, 0x83, 0x88, 0x88, 0x4, 0x2, 0x84, 0x84, 0x87, - 0x87, 0x3, 0x2, 0x85, 0x87, 0x3, 0x2, 0x22, 0x23, 0x3, 0x2, 0x24, - 0x25, 0x3, 0x2, 0x3, 0x4, 0x3, 0x2, 0x1e, 0x1f, 0x3, 0x2, 0x28, 0x29, - 0x3, 0x2, 0x3b, 0x3c, 0x2, 0x4c2, 0x2, 0xe7, 0x3, 0x2, 0x2, 0x2, - 0x4, 0xf2, 0x3, 0x2, 0x2, 0x2, 0x6, 0xf6, 0x3, 0x2, 0x2, 0x2, 0x8, - 0xfb, 0x3, 0x2, 0x2, 0x2, 0xa, 0xff, 0x3, 0x2, 0x2, 0x2, 0xc, 0x103, - 0x3, 0x2, 0x2, 0x2, 0xe, 0x10b, 0x3, 0x2, 0x2, 0x2, 0x10, 0x114, - 0x3, 0x2, 0x2, 0x2, 0x12, 0x118, 0x3, 0x2, 0x2, 0x2, 0x14, 0x127, - 0x3, 0x2, 0x2, 0x2, 0x16, 0x133, 0x3, 0x2, 0x2, 0x2, 0x18, 0x13e, - 0x3, 0x2, 0x2, 0x2, 0x1a, 0x150, 0x3, 0x2, 0x2, 0x2, 0x1c, 0x152, - 0x3, 0x2, 0x2, 0x2, 0x1e, 0x164, 0x3, 0x2, 0x2, 0x2, 0x20, 0x171, - 0x3, 0x2, 0x2, 0x2, 0x22, 0x180, 0x3, 0x2, 0x2, 0x2, 0x24, 0x190, - 0x3, 0x2, 0x2, 0x2, 0x26, 0x194, 0x3, 0x2, 0x2, 0x2, 0x28, 0x197, - 0x3, 0x2, 0x2, 0x2, 0x2a, 0x19a, 0x3, 0x2, 0x2, 0x2, 0x2c, 0x19f, - 0x3, 0x2, 0x2, 0x2, 0x2e, 0x1b0, 0x3, 0x2, 0x2, 0x2, 0x30, 0x1b2, - 0x3, 0x2, 0x2, 0x2, 0x32, 0x1c9, 0x3, 0x2, 0x2, 0x2, 0x34, 0x1e0, - 0x3, 0x2, 0x2, 0x2, 0x36, 0x21e, 0x3, 0x2, 0x2, 0x2, 0x38, 0x227, - 0x3, 0x2, 0x2, 0x2, 0x3a, 0x230, 0x3, 0x2, 0x2, 0x2, 0x3c, 0x232, - 0x3, 0x2, 0x2, 0x2, 0x3e, 0x236, 0x3, 0x2, 0x2, 0x2, 0x40, 0x23c, - 0x3, 0x2, 0x2, 0x2, 0x42, 0x247, 0x3, 0x2, 0x2, 0x2, 0x44, 0x24d, - 0x3, 0x2, 0x2, 0x2, 0x46, 0x25a, 0x3, 0x2, 0x2, 0x2, 0x48, 0x263, - 0x3, 0x2, 0x2, 0x2, 0x4a, 0x265, 0x3, 0x2, 0x2, 0x2, 0x4c, 0x273, - 0x3, 0x2, 0x2, 0x2, 0x4e, 0x277, 0x3, 0x2, 0x2, 0x2, 0x50, 0x27d, - 0x3, 0x2, 0x2, 0x2, 0x52, 0x286, 0x3, 0x2, 0x2, 0x2, 0x54, 0x28d, - 0x3, 0x2, 0x2, 0x2, 0x56, 0x29d, 0x3, 0x2, 0x2, 0x2, 0x58, 0x2a1, - 0x3, 0x2, 0x2, 0x2, 0x5a, 0x2aa, 0x3, 0x2, 0x2, 0x2, 0x5c, 0x2b1, - 0x3, 0x2, 0x2, 0x2, 0x5e, 0x2b8, 0x3, 0x2, 0x2, 0x2, 0x60, 0x2bf, - 0x3, 0x2, 0x2, 0x2, 0x62, 0x2cc, 0x3, 0x2, 0x2, 0x2, 0x64, 0x2d0, - 0x3, 0x2, 0x2, 0x2, 0x66, 0x2d3, 0x3, 0x2, 0x2, 0x2, 0x68, 0x2e1, - 0x3, 0x2, 0x2, 0x2, 0x6a, 0x2e5, 0x3, 0x2, 0x2, 0x2, 0x6c, 0x2e8, - 0x3, 0x2, 0x2, 0x2, 0x6e, 0x2f6, 0x3, 0x2, 0x2, 0x2, 0x70, 0x2fa, - 0x3, 0x2, 0x2, 0x2, 0x72, 0x2fd, 0x3, 0x2, 0x2, 0x2, 0x74, 0x30a, - 0x3, 0x2, 0x2, 0x2, 0x76, 0x30e, 0x3, 0x2, 0x2, 0x2, 0x78, 0x31c, - 0x3, 0x2, 0x2, 0x2, 0x7a, 0x329, 0x3, 0x2, 0x2, 0x2, 0x7c, 0x348, - 0x3, 0x2, 0x2, 0x2, 0x7e, 0x34a, 0x3, 0x2, 0x2, 0x2, 0x80, 0x35a, - 0x3, 0x2, 0x2, 0x2, 0x82, 0x35e, 0x3, 0x2, 0x2, 0x2, 0x84, 0x369, - 0x3, 0x2, 0x2, 0x2, 0x86, 0x376, 0x3, 0x2, 0x2, 0x2, 0x88, 0x37a, - 0x3, 0x2, 0x2, 0x2, 0x8a, 0x383, 0x3, 0x2, 0x2, 0x2, 0x8c, 0x389, - 0x3, 0x2, 0x2, 0x2, 0x8e, 0x394, 0x3, 0x2, 0x2, 0x2, 0x90, 0x398, - 0x3, 0x2, 0x2, 0x2, 0x92, 0x39b, 0x3, 0x2, 0x2, 0x2, 0x94, 0x3a8, - 0x3, 0x2, 0x2, 0x2, 0x96, 0x3b5, 0x3, 0x2, 0x2, 0x2, 0x98, 0x3b9, - 0x3, 0x2, 0x2, 0x2, 0x9a, 0x3bd, 0x3, 0x2, 0x2, 0x2, 0x9c, 0x3cc, - 0x3, 0x2, 0x2, 0x2, 0x9e, 0x3d0, 0x3, 0x2, 0x2, 0x2, 0xa0, 0x3d9, - 0x3, 0x2, 0x2, 0x2, 0xa2, 0x3df, 0x3, 0x2, 0x2, 0x2, 0xa4, 0x3e5, - 0x3, 0x2, 0x2, 0x2, 0xa6, 0x3e9, 0x3, 0x2, 0x2, 0x2, 0xa8, 0x3eb, - 0x3, 0x2, 0x2, 0x2, 0xaa, 0x3f9, 0x3, 0x2, 0x2, 0x2, 0xac, 0x3fd, - 0x3, 0x2, 0x2, 0x2, 0xae, 0x3ff, 0x3, 0x2, 0x2, 0x2, 0xb0, 0x401, - 0x3, 0x2, 0x2, 0x2, 0xb2, 0x403, 0x3, 0x2, 0x2, 0x2, 0xb4, 0x405, - 0x3, 0x2, 0x2, 0x2, 0xb6, 0x407, 0x3, 0x2, 0x2, 0x2, 0xb8, 0x40c, - 0x3, 0x2, 0x2, 0x2, 0xba, 0x414, 0x3, 0x2, 0x2, 0x2, 0xbc, 0x41c, - 0x3, 0x2, 0x2, 0x2, 0xbe, 0x424, 0x3, 0x2, 0x2, 0x2, 0xc0, 0x42c, - 0x3, 0x2, 0x2, 0x2, 0xc2, 0x434, 0x3, 0x2, 0x2, 0x2, 0xc4, 0x43c, - 0x3, 0x2, 0x2, 0x2, 0xc6, 0x444, 0x3, 0x2, 0x2, 0x2, 0xc8, 0x44c, - 0x3, 0x2, 0x2, 0x2, 0xca, 0x454, 0x3, 0x2, 0x2, 0x2, 0xcc, 0x45c, - 0x3, 0x2, 0x2, 0x2, 0xce, 0x464, 0x3, 0x2, 0x2, 0x2, 0xd0, 0x46c, - 0x3, 0x2, 0x2, 0x2, 0xd2, 0x474, 0x3, 0x2, 0x2, 0x2, 0xd4, 0x479, - 0x3, 0x2, 0x2, 0x2, 0xd6, 0x47b, 0x3, 0x2, 0x2, 0x2, 0xd8, 0x47d, - 0x3, 0x2, 0x2, 0x2, 0xda, 0x47f, 0x3, 0x2, 0x2, 0x2, 0xdc, 0x481, - 0x3, 0x2, 0x2, 0x2, 0xde, 0x483, 0x3, 0x2, 0x2, 0x2, 0xe0, 0xe6, - 0x5, 0x4, 0x3, 0x2, 0xe1, 0xe6, 0x5, 0x12, 0xa, 0x2, 0xe2, 0xe6, - 0x5, 0x14, 0xb, 0x2, 0xe3, 0xe6, 0x5, 0x16, 0xc, 0x2, 0xe4, 0xe6, - 0x5, 0x18, 0xd, 0x2, 0xe5, 0xe0, 0x3, 0x2, 0x2, 0x2, 0xe5, 0xe1, - 0x3, 0x2, 0x2, 0x2, 0xe5, 0xe2, 0x3, 0x2, 0x2, 0x2, 0xe5, 0xe3, 0x3, - 0x2, 0x2, 0x2, 0xe5, 0xe4, 0x3, 0x2, 0x2, 0x2, 0xe6, 0xe9, 0x3, 0x2, - 0x2, 0x2, 0xe7, 0xe5, 0x3, 0x2, 0x2, 0x2, 0xe7, 0xe8, 0x3, 0x2, 0x2, - 0x2, 0xe8, 0xea, 0x3, 0x2, 0x2, 0x2, 0xe9, 0xe7, 0x3, 0x2, 0x2, 0x2, - 0xea, 0xeb, 0x7, 0x2, 0x2, 0x3, 0xeb, 0x3, 0x3, 0x2, 0x2, 0x2, 0xec, - 0xf3, 0x5, 0x6, 0x4, 0x2, 0xed, 0xf3, 0x5, 0x8, 0x5, 0x2, 0xee, 0xf3, - 0x5, 0xa, 0x6, 0x2, 0xef, 0xf3, 0x5, 0xc, 0x7, 0x2, 0xf0, 0xf3, 0x5, - 0xe, 0x8, 0x2, 0xf1, 0xf3, 0x5, 0x10, 0x9, 0x2, 0xf2, 0xec, 0x3, - 0x2, 0x2, 0x2, 0xf2, 0xed, 0x3, 0x2, 0x2, 0x2, 0xf2, 0xee, 0x3, 0x2, - 0x2, 0x2, 0xf2, 0xef, 0x3, 0x2, 0x2, 0x2, 0xf2, 0xf0, 0x3, 0x2, 0x2, - 0x2, 0xf2, 0xf1, 0x3, 0x2, 0x2, 0x2, 0xf3, 0xf4, 0x3, 0x2, 0x2, 0x2, - 0xf4, 0xf5, 0x7, 0x7a, 0x2, 0x2, 0xf5, 0x5, 0x3, 0x2, 0x2, 0x2, 0xf6, - 0xf7, 0x7, 0x7, 0x2, 0x2, 0xf7, 0xf8, 0x7, 0x8f, 0x2, 0x2, 0xf8, - 0xf9, 0x7, 0x90, 0x2, 0x2, 0xf9, 0xfa, 0x7, 0x91, 0x2, 0x2, 0xfa, - 0x7, 0x3, 0x2, 0x2, 0x2, 0xfb, 0xfc, 0x7, 0x7f, 0x2, 0x2, 0xfc, 0xfd, - 0x7, 0x7b, 0x2, 0x2, 0xfd, 0xfe, 0x5, 0xa6, 0x54, 0x2, 0xfe, 0x9, - 0x3, 0x2, 0x2, 0x2, 0xff, 0x100, 0x7, 0xc, 0x2, 0x2, 0x100, 0x101, - 0x5, 0xb2, 0x5a, 0x2, 0x101, 0x102, 0x5, 0xb2, 0x5a, 0x2, 0x102, - 0xb, 0x3, 0x2, 0x2, 0x2, 0x103, 0x106, 0x7, 0x38, 0x2, 0x2, 0x104, - 0x107, 0x5, 0xac, 0x57, 0x2, 0x105, 0x107, 0x5, 0xa6, 0x54, 0x2, - 0x106, 0x104, 0x3, 0x2, 0x2, 0x2, 0x106, 0x105, 0x3, 0x2, 0x2, 0x2, - 0x107, 0x108, 0x3, 0x2, 0x2, 0x2, 0x108, 0x109, 0x5, 0x9a, 0x4e, - 0x2, 0x109, 0x10a, 0x7, 0x7f, 0x2, 0x2, 0x10a, 0xd, 0x3, 0x2, 0x2, - 0x2, 0x10b, 0x10c, 0x7, 0x35, 0x2, 0x2, 0x10c, 0x10d, 0x7, 0x87, - 0x2, 0x2, 0x10d, 0x110, 0x7, 0x87, 0x2, 0x2, 0x10e, 0x10f, 0x7, 0x33, - 0x2, 0x2, 0x10f, 0x111, 0x7, 0x87, 0x2, 0x2, 0x110, 0x10e, 0x3, 0x2, - 0x2, 0x2, 0x110, 0x111, 0x3, 0x2, 0x2, 0x2, 0x111, 0x112, 0x3, 0x2, - 0x2, 0x2, 0x112, 0x113, 0x5, 0xb0, 0x59, 0x2, 0x113, 0xf, 0x3, 0x2, - 0x2, 0x2, 0x114, 0x115, 0x7, 0x36, 0x2, 0x2, 0x115, 0x116, 0x5, 0x3a, - 0x1e, 0x2, 0x116, 0x117, 0x5, 0xb0, 0x59, 0x2, 0x117, 0x11, 0x3, - 0x2, 0x2, 0x2, 0x118, 0x119, 0x7, 0x8, 0x2, 0x2, 0x119, 0x11b, 0x5, - 0xb2, 0x5a, 0x2, 0x11a, 0x11c, 0x7, 0x1b, 0x2, 0x2, 0x11b, 0x11a, - 0x3, 0x2, 0x2, 0x2, 0x11b, 0x11c, 0x3, 0x2, 0x2, 0x2, 0x11c, 0x11d, - 0x3, 0x2, 0x2, 0x2, 0x11d, 0x11f, 0x7, 0x75, 0x2, 0x2, 0x11e, 0x120, - 0x5, 0x1a, 0xe, 0x2, 0x11f, 0x11e, 0x3, 0x2, 0x2, 0x2, 0x120, 0x121, - 0x3, 0x2, 0x2, 0x2, 0x121, 0x11f, 0x3, 0x2, 0x2, 0x2, 0x121, 0x122, - 0x3, 0x2, 0x2, 0x2, 0x122, 0x123, 0x3, 0x2, 0x2, 0x2, 0x123, 0x124, - 0x7, 0x76, 0x2, 0x2, 0x124, 0x125, 0x5, 0xb2, 0x5a, 0x2, 0x125, 0x126, - 0x7, 0x7a, 0x2, 0x2, 0x126, 0x13, 0x3, 0x2, 0x2, 0x2, 0x127, 0x131, - 0x7, 0x9, 0x2, 0x2, 0x128, 0x132, 0x5, 0x4a, 0x26, 0x2, 0x129, 0x132, - 0x5, 0x54, 0x2b, 0x2, 0x12a, 0x132, 0x5, 0x60, 0x31, 0x2, 0x12b, - 0x132, 0x5, 0x66, 0x34, 0x2, 0x12c, 0x132, 0x5, 0x6c, 0x37, 0x2, - 0x12d, 0x132, 0x5, 0x72, 0x3a, 0x2, 0x12e, 0x132, 0x5, 0x78, 0x3d, - 0x2, 0x12f, 0x132, 0x5, 0x7e, 0x40, 0x2, 0x130, 0x132, 0x5, 0x94, - 0x4b, 0x2, 0x131, 0x128, 0x3, 0x2, 0x2, 0x2, 0x131, 0x129, 0x3, 0x2, - 0x2, 0x2, 0x131, 0x12a, 0x3, 0x2, 0x2, 0x2, 0x131, 0x12b, 0x3, 0x2, - 0x2, 0x2, 0x131, 0x12c, 0x3, 0x2, 0x2, 0x2, 0x131, 0x12d, 0x3, 0x2, - 0x2, 0x2, 0x131, 0x12e, 0x3, 0x2, 0x2, 0x2, 0x131, 0x12f, 0x3, 0x2, - 0x2, 0x2, 0x131, 0x130, 0x3, 0x2, 0x2, 0x2, 0x132, 0x15, 0x3, 0x2, - 0x2, 0x2, 0x133, 0x134, 0x5, 0xd8, 0x6d, 0x2, 0x134, 0x135, 0x7, - 0x8a, 0x2, 0x2, 0x135, 0x139, 0x7, 0x8b, 0x2, 0x2, 0x136, 0x138, - 0x7, 0x8d, 0x2, 0x2, 0x137, 0x136, 0x3, 0x2, 0x2, 0x2, 0x138, 0x13b, - 0x3, 0x2, 0x2, 0x2, 0x139, 0x137, 0x3, 0x2, 0x2, 0x2, 0x139, 0x13a, - 0x3, 0x2, 0x2, 0x2, 0x13a, 0x13c, 0x3, 0x2, 0x2, 0x2, 0x13b, 0x139, - 0x3, 0x2, 0x2, 0x2, 0x13c, 0x13d, 0x7, 0x8c, 0x2, 0x2, 0x13d, 0x17, - 0x3, 0x2, 0x2, 0x2, 0x13e, 0x13f, 0x7, 0xe, 0x2, 0x2, 0x13f, 0x141, - 0x5, 0xb0, 0x59, 0x2, 0x140, 0x142, 0x7, 0x1b, 0x2, 0x2, 0x141, 0x140, - 0x3, 0x2, 0x2, 0x2, 0x141, 0x142, 0x3, 0x2, 0x2, 0x2, 0x142, 0x143, - 0x3, 0x2, 0x2, 0x2, 0x143, 0x145, 0x7, 0x75, 0x2, 0x2, 0x144, 0x146, - 0x5, 0x24, 0x13, 0x2, 0x145, 0x144, 0x3, 0x2, 0x2, 0x2, 0x146, 0x147, - 0x3, 0x2, 0x2, 0x2, 0x147, 0x145, 0x3, 0x2, 0x2, 0x2, 0x147, 0x148, - 0x3, 0x2, 0x2, 0x2, 0x148, 0x149, 0x3, 0x2, 0x2, 0x2, 0x149, 0x14a, - 0x7, 0x76, 0x2, 0x2, 0x14a, 0x14b, 0x5, 0xb0, 0x59, 0x2, 0x14b, 0x14c, - 0x7, 0x7a, 0x2, 0x2, 0x14c, 0x19, 0x3, 0x2, 0x2, 0x2, 0x14d, 0x151, - 0x5, 0x24, 0x13, 0x2, 0x14e, 0x151, 0x5, 0x1c, 0xf, 0x2, 0x14f, 0x151, - 0x5, 0x1e, 0x10, 0x2, 0x150, 0x14d, 0x3, 0x2, 0x2, 0x2, 0x150, 0x14e, - 0x3, 0x2, 0x2, 0x2, 0x150, 0x14f, 0x3, 0x2, 0x2, 0x2, 0x151, 0x1b, - 0x3, 0x2, 0x2, 0x2, 0x152, 0x153, 0x7, 0xe, 0x2, 0x2, 0x153, 0x160, - 0x5, 0xb0, 0x59, 0x2, 0x154, 0x156, 0x7, 0x1b, 0x2, 0x2, 0x155, 0x154, - 0x3, 0x2, 0x2, 0x2, 0x155, 0x156, 0x3, 0x2, 0x2, 0x2, 0x156, 0x157, - 0x3, 0x2, 0x2, 0x2, 0x157, 0x159, 0x7, 0x75, 0x2, 0x2, 0x158, 0x15a, - 0x5, 0x24, 0x13, 0x2, 0x159, 0x158, 0x3, 0x2, 0x2, 0x2, 0x15a, 0x15b, - 0x3, 0x2, 0x2, 0x2, 0x15b, 0x159, 0x3, 0x2, 0x2, 0x2, 0x15b, 0x15c, - 0x3, 0x2, 0x2, 0x2, 0x15c, 0x15d, 0x3, 0x2, 0x2, 0x2, 0x15d, 0x15e, - 0x7, 0x76, 0x2, 0x2, 0x15e, 0x15f, 0x5, 0xb0, 0x59, 0x2, 0x15f, 0x161, - 0x3, 0x2, 0x2, 0x2, 0x160, 0x155, 0x3, 0x2, 0x2, 0x2, 0x160, 0x161, - 0x3, 0x2, 0x2, 0x2, 0x161, 0x162, 0x3, 0x2, 0x2, 0x2, 0x162, 0x163, - 0x7, 0x7a, 0x2, 0x2, 0x163, 0x1d, 0x3, 0x2, 0x2, 0x2, 0x164, 0x165, - 0x7, 0x2c, 0x2, 0x2, 0x165, 0x169, 0x7, 0x75, 0x2, 0x2, 0x166, 0x168, - 0x5, 0x20, 0x11, 0x2, 0x167, 0x166, 0x3, 0x2, 0x2, 0x2, 0x168, 0x16b, - 0x3, 0x2, 0x2, 0x2, 0x169, 0x167, 0x3, 0x2, 0x2, 0x2, 0x169, 0x16a, - 0x3, 0x2, 0x2, 0x2, 0x16a, 0x16c, 0x3, 0x2, 0x2, 0x2, 0x16b, 0x169, - 0x3, 0x2, 0x2, 0x2, 0x16c, 0x16d, 0x7, 0x76, 0x2, 0x2, 0x16d, 0x16e, - 0x7, 0x7a, 0x2, 0x2, 0x16e, 0x1f, 0x3, 0x2, 0x2, 0x2, 0x16f, 0x172, - 0x5, 0x22, 0x12, 0x2, 0x170, 0x172, 0x5, 0x6, 0x4, 0x2, 0x171, 0x16f, - 0x3, 0x2, 0x2, 0x2, 0x171, 0x170, 0x3, 0x2, 0x2, 0x2, 0x172, 0x173, - 0x3, 0x2, 0x2, 0x2, 0x173, 0x174, 0x7, 0x7a, 0x2, 0x2, 0x174, 0x21, - 0x3, 0x2, 0x2, 0x2, 0x175, 0x176, 0x9, 0x2, 0x2, 0x2, 0x176, 0x178, - 0x7, 0x75, 0x2, 0x2, 0x177, 0x179, 0x5, 0x8e, 0x48, 0x2, 0x178, 0x177, - 0x3, 0x2, 0x2, 0x2, 0x179, 0x17a, 0x3, 0x2, 0x2, 0x2, 0x17a, 0x178, - 0x3, 0x2, 0x2, 0x2, 0x17a, 0x17b, 0x3, 0x2, 0x2, 0x2, 0x17b, 0x17c, - 0x3, 0x2, 0x2, 0x2, 0x17c, 0x17d, 0x7, 0x76, 0x2, 0x2, 0x17d, 0x181, - 0x3, 0x2, 0x2, 0x2, 0x17e, 0x17f, 0x7, 0x31, 0x2, 0x2, 0x17f, 0x181, - 0x5, 0xb6, 0x5c, 0x2, 0x180, 0x175, 0x3, 0x2, 0x2, 0x2, 0x180, 0x17e, - 0x3, 0x2, 0x2, 0x2, 0x181, 0x23, 0x3, 0x2, 0x2, 0x2, 0x182, 0x191, - 0x5, 0x26, 0x14, 0x2, 0x183, 0x191, 0x5, 0x28, 0x15, 0x2, 0x184, - 0x191, 0x5, 0x2a, 0x16, 0x2, 0x185, 0x191, 0x5, 0x2c, 0x17, 0x2, - 0x186, 0x191, 0x5, 0x8, 0x5, 0x2, 0x187, 0x191, 0x5, 0x30, 0x19, - 0x2, 0x188, 0x191, 0x5, 0x32, 0x1a, 0x2, 0x189, 0x191, 0x5, 0xc, - 0x7, 0x2, 0x18a, 0x191, 0x5, 0x34, 0x1b, 0x2, 0x18b, 0x191, 0x5, - 0x42, 0x22, 0x2, 0x18c, 0x191, 0x5, 0x44, 0x23, 0x2, 0x18d, 0x191, - 0x5, 0x46, 0x24, 0x2, 0x18e, 0x191, 0x5, 0x48, 0x25, 0x2, 0x18f, - 0x191, 0x5, 0x6, 0x4, 0x2, 0x190, 0x182, 0x3, 0x2, 0x2, 0x2, 0x190, - 0x183, 0x3, 0x2, 0x2, 0x2, 0x190, 0x184, 0x3, 0x2, 0x2, 0x2, 0x190, - 0x185, 0x3, 0x2, 0x2, 0x2, 0x190, 0x186, 0x3, 0x2, 0x2, 0x2, 0x190, - 0x187, 0x3, 0x2, 0x2, 0x2, 0x190, 0x188, 0x3, 0x2, 0x2, 0x2, 0x190, - 0x189, 0x3, 0x2, 0x2, 0x2, 0x190, 0x18a, 0x3, 0x2, 0x2, 0x2, 0x190, - 0x18b, 0x3, 0x2, 0x2, 0x2, 0x190, 0x18c, 0x3, 0x2, 0x2, 0x2, 0x190, - 0x18d, 0x3, 0x2, 0x2, 0x2, 0x190, 0x18e, 0x3, 0x2, 0x2, 0x2, 0x190, - 0x18f, 0x3, 0x2, 0x2, 0x2, 0x191, 0x192, 0x3, 0x2, 0x2, 0x2, 0x192, - 0x193, 0x7, 0x7a, 0x2, 0x2, 0x193, 0x25, 0x3, 0x2, 0x2, 0x2, 0x194, - 0x195, 0x7, 0x8, 0x2, 0x2, 0x195, 0x196, 0x5, 0xb2, 0x5a, 0x2, 0x196, - 0x27, 0x3, 0x2, 0x2, 0x2, 0x197, 0x198, 0x7, 0xa, 0x2, 0x2, 0x198, - 0x199, 0x5, 0xb2, 0x5a, 0x2, 0x199, 0x29, 0x3, 0x2, 0x2, 0x2, 0x19a, - 0x19b, 0x7, 0xb, 0x2, 0x2, 0x19b, 0x19d, 0x5, 0xb2, 0x5a, 0x2, 0x19c, - 0x19e, 0x9, 0x3, 0x2, 0x2, 0x19d, 0x19c, 0x3, 0x2, 0x2, 0x2, 0x19d, - 0x19e, 0x3, 0x2, 0x2, 0x2, 0x19e, 0x2b, 0x3, 0x2, 0x2, 0x2, 0x19f, - 0x1a6, 0x7, 0xf, 0x2, 0x2, 0x1a0, 0x1a7, 0x7, 0x87, 0x2, 0x2, 0x1a1, - 0x1a3, 0x5, 0x2e, 0x18, 0x2, 0x1a2, 0x1a1, 0x3, 0x2, 0x2, 0x2, 0x1a3, - 0x1a4, 0x3, 0x2, 0x2, 0x2, 0x1a4, 0x1a2, 0x3, 0x2, 0x2, 0x2, 0x1a4, - 0x1a5, 0x3, 0x2, 0x2, 0x2, 0x1a5, 0x1a7, 0x3, 0x2, 0x2, 0x2, 0x1a6, - 0x1a0, 0x3, 0x2, 0x2, 0x2, 0x1a6, 0x1a2, 0x3, 0x2, 0x2, 0x2, 0x1a7, - 0x2d, 0x3, 0x2, 0x2, 0x2, 0x1a8, 0x1b1, 0x7, 0x11, 0x2, 0x2, 0x1a9, - 0x1b1, 0x7, 0x12, 0x2, 0x2, 0x1aa, 0x1b1, 0x7, 0x13, 0x2, 0x2, 0x1ab, - 0x1b1, 0x7, 0x14, 0x2, 0x2, 0x1ac, 0x1ad, 0x7, 0x16, 0x2, 0x2, 0x1ad, - 0x1b1, 0x5, 0xa6, 0x54, 0x2, 0x1ae, 0x1af, 0x7, 0x15, 0x2, 0x2, 0x1af, - 0x1b1, 0x5, 0xa6, 0x54, 0x2, 0x1b0, 0x1a8, 0x3, 0x2, 0x2, 0x2, 0x1b0, - 0x1a9, 0x3, 0x2, 0x2, 0x2, 0x1b0, 0x1aa, 0x3, 0x2, 0x2, 0x2, 0x1b0, - 0x1ab, 0x3, 0x2, 0x2, 0x2, 0x1b0, 0x1ac, 0x3, 0x2, 0x2, 0x2, 0x1b0, - 0x1ae, 0x3, 0x2, 0x2, 0x2, 0x1b1, 0x2f, 0x3, 0x2, 0x2, 0x2, 0x1b2, - 0x1b6, 0x7, 0x21, 0x2, 0x2, 0x1b3, 0x1b7, 0x5, 0xd4, 0x6b, 0x2, 0x1b4, - 0x1b7, 0x5, 0xd6, 0x6c, 0x2, 0x1b5, 0x1b7, 0x5, 0xdc, 0x6f, 0x2, - 0x1b6, 0x1b3, 0x3, 0x2, 0x2, 0x2, 0x1b6, 0x1b4, 0x3, 0x2, 0x2, 0x2, - 0x1b6, 0x1b5, 0x3, 0x2, 0x2, 0x2, 0x1b7, 0x1b8, 0x3, 0x2, 0x2, 0x2, - 0x1b8, 0x1bd, 0x5, 0x9c, 0x4f, 0x2, 0x1b9, 0x1ba, 0x7, 0x7d, 0x2, - 0x2, 0x1ba, 0x1bc, 0x5, 0x9c, 0x4f, 0x2, 0x1bb, 0x1b9, 0x3, 0x2, - 0x2, 0x2, 0x1bc, 0x1bf, 0x3, 0x2, 0x2, 0x2, 0x1bd, 0x1bb, 0x3, 0x2, - 0x2, 0x2, 0x1bd, 0x1be, 0x3, 0x2, 0x2, 0x2, 0x1be, 0x31, 0x3, 0x2, - 0x2, 0x2, 0x1bf, 0x1bd, 0x3, 0x2, 0x2, 0x2, 0x1c0, 0x1c1, 0x7, 0x20, - 0x2, 0x2, 0x1c1, 0x1c6, 0x5, 0x9c, 0x4f, 0x2, 0x1c2, 0x1c3, 0x7, - 0x7d, 0x2, 0x2, 0x1c3, 0x1c5, 0x5, 0x9c, 0x4f, 0x2, 0x1c4, 0x1c2, - 0x3, 0x2, 0x2, 0x2, 0x1c5, 0x1c8, 0x3, 0x2, 0x2, 0x2, 0x1c6, 0x1c4, - 0x3, 0x2, 0x2, 0x2, 0x1c6, 0x1c7, 0x3, 0x2, 0x2, 0x2, 0x1c7, 0x1ca, - 0x3, 0x2, 0x2, 0x2, 0x1c8, 0x1c6, 0x3, 0x2, 0x2, 0x2, 0x1c9, 0x1c0, - 0x3, 0x2, 0x2, 0x2, 0x1c9, 0x1ca, 0x3, 0x2, 0x2, 0x2, 0x1ca, 0x1dd, - 0x3, 0x2, 0x2, 0x2, 0x1cb, 0x1cc, 0x5, 0xd6, 0x6c, 0x2, 0x1cc, 0x1d2, - 0x5, 0x9c, 0x4f, 0x2, 0x1cd, 0x1d0, 0x7, 0x26, 0x2, 0x2, 0x1ce, 0x1d1, - 0x7, 0x3e, 0x2, 0x2, 0x1cf, 0x1d1, 0x5, 0x9c, 0x4f, 0x2, 0x1d0, 0x1ce, - 0x3, 0x2, 0x2, 0x2, 0x1d0, 0x1cf, 0x3, 0x2, 0x2, 0x2, 0x1d1, 0x1d3, - 0x3, 0x2, 0x2, 0x2, 0x1d2, 0x1cd, 0x3, 0x2, 0x2, 0x2, 0x1d2, 0x1d3, - 0x3, 0x2, 0x2, 0x2, 0x1d3, 0x1de, 0x3, 0x2, 0x2, 0x2, 0x1d4, 0x1d5, - 0x5, 0xd4, 0x6b, 0x2, 0x1d5, 0x1db, 0x5, 0x9c, 0x4f, 0x2, 0x1d6, - 0x1d9, 0x9, 0x4, 0x2, 0x2, 0x1d7, 0x1da, 0x7, 0x3e, 0x2, 0x2, 0x1d8, - 0x1da, 0x5, 0x9c, 0x4f, 0x2, 0x1d9, 0x1d7, 0x3, 0x2, 0x2, 0x2, 0x1d9, - 0x1d8, 0x3, 0x2, 0x2, 0x2, 0x1da, 0x1dc, 0x3, 0x2, 0x2, 0x2, 0x1db, - 0x1d6, 0x3, 0x2, 0x2, 0x2, 0x1db, 0x1dc, 0x3, 0x2, 0x2, 0x2, 0x1dc, - 0x1de, 0x3, 0x2, 0x2, 0x2, 0x1dd, 0x1cb, 0x3, 0x2, 0x2, 0x2, 0x1dd, - 0x1d4, 0x3, 0x2, 0x2, 0x2, 0x1de, 0x33, 0x3, 0x2, 0x2, 0x2, 0x1df, - 0x1e1, 0x5, 0xda, 0x6e, 0x2, 0x1e0, 0x1df, 0x3, 0x2, 0x2, 0x2, 0x1e0, - 0x1e1, 0x3, 0x2, 0x2, 0x2, 0x1e1, 0x1e2, 0x3, 0x2, 0x2, 0x2, 0x1e2, - 0x1e4, 0x5, 0xdc, 0x6f, 0x2, 0x1e3, 0x1e5, 0x5, 0xa0, 0x51, 0x2, - 0x1e4, 0x1e3, 0x3, 0x2, 0x2, 0x2, 0x1e4, 0x1e5, 0x3, 0x2, 0x2, 0x2, - 0x1e5, 0x21c, 0x3, 0x2, 0x2, 0x2, 0x1e6, 0x1ea, 0x5, 0x38, 0x1d, - 0x2, 0x1e7, 0x1e9, 0x5, 0x36, 0x1c, 0x2, 0x1e8, 0x1e7, 0x3, 0x2, - 0x2, 0x2, 0x1e9, 0x1ec, 0x3, 0x2, 0x2, 0x2, 0x1ea, 0x1e8, 0x3, 0x2, - 0x2, 0x2, 0x1ea, 0x1eb, 0x3, 0x2, 0x2, 0x2, 0x1eb, 0x21d, 0x3, 0x2, - 0x2, 0x2, 0x1ec, 0x1ea, 0x3, 0x2, 0x2, 0x2, 0x1ed, 0x1ee, 0x7, 0xe, - 0x2, 0x2, 0x1ee, 0x1f0, 0x5, 0xb0, 0x59, 0x2, 0x1ef, 0x1ed, 0x3, - 0x2, 0x2, 0x2, 0x1f0, 0x1f1, 0x3, 0x2, 0x2, 0x2, 0x1f1, 0x1ef, 0x3, - 0x2, 0x2, 0x2, 0x1f1, 0x1f2, 0x3, 0x2, 0x2, 0x2, 0x1f2, 0x1f6, 0x3, - 0x2, 0x2, 0x2, 0x1f3, 0x1f5, 0x5, 0x9e, 0x50, 0x2, 0x1f4, 0x1f3, - 0x3, 0x2, 0x2, 0x2, 0x1f5, 0x1f8, 0x3, 0x2, 0x2, 0x2, 0x1f6, 0x1f4, - 0x3, 0x2, 0x2, 0x2, 0x1f6, 0x1f7, 0x3, 0x2, 0x2, 0x2, 0x1f7, 0x21d, - 0x3, 0x2, 0x2, 0x2, 0x1f8, 0x1f6, 0x3, 0x2, 0x2, 0x2, 0x1f9, 0x1fa, - 0x7, 0x39, 0x2, 0x2, 0x1fa, 0x1fc, 0x5, 0x3c, 0x1f, 0x2, 0x1fb, 0x1fd, - 0x5, 0xa0, 0x51, 0x2, 0x1fc, 0x1fb, 0x3, 0x2, 0x2, 0x2, 0x1fc, 0x1fd, - 0x3, 0x2, 0x2, 0x2, 0x1fd, 0x21d, 0x3, 0x2, 0x2, 0x2, 0x1fe, 0x1ff, - 0x7, 0x3a, 0x2, 0x2, 0x1ff, 0x201, 0x5, 0xa0, 0x51, 0x2, 0x200, 0x202, - 0x5, 0x3e, 0x20, 0x2, 0x201, 0x200, 0x3, 0x2, 0x2, 0x2, 0x202, 0x203, - 0x3, 0x2, 0x2, 0x2, 0x203, 0x201, 0x3, 0x2, 0x2, 0x2, 0x203, 0x204, - 0x3, 0x2, 0x2, 0x2, 0x204, 0x206, 0x3, 0x2, 0x2, 0x2, 0x205, 0x207, - 0x5, 0xa0, 0x51, 0x2, 0x206, 0x205, 0x3, 0x2, 0x2, 0x2, 0x206, 0x207, - 0x3, 0x2, 0x2, 0x2, 0x207, 0x21d, 0x3, 0x2, 0x2, 0x2, 0x208, 0x209, - 0x5, 0xde, 0x70, 0x2, 0x209, 0x20b, 0x5, 0xa0, 0x51, 0x2, 0x20a, - 0x20c, 0x5, 0x40, 0x21, 0x2, 0x20b, 0x20a, 0x3, 0x2, 0x2, 0x2, 0x20c, - 0x20d, 0x3, 0x2, 0x2, 0x2, 0x20d, 0x20b, 0x3, 0x2, 0x2, 0x2, 0x20d, - 0x20e, 0x3, 0x2, 0x2, 0x2, 0x20e, 0x210, 0x3, 0x2, 0x2, 0x2, 0x20f, - 0x211, 0x5, 0xa0, 0x51, 0x2, 0x210, 0x20f, 0x3, 0x2, 0x2, 0x2, 0x210, - 0x211, 0x3, 0x2, 0x2, 0x2, 0x211, 0x21d, 0x3, 0x2, 0x2, 0x2, 0x212, - 0x213, 0x7, 0x37, 0x2, 0x2, 0x213, 0x215, 0x5, 0xa0, 0x51, 0x2, 0x214, - 0x216, 0x5, 0x3e, 0x20, 0x2, 0x215, 0x214, 0x3, 0x2, 0x2, 0x2, 0x216, - 0x217, 0x3, 0x2, 0x2, 0x2, 0x217, 0x215, 0x3, 0x2, 0x2, 0x2, 0x217, - 0x218, 0x3, 0x2, 0x2, 0x2, 0x218, 0x21a, 0x3, 0x2, 0x2, 0x2, 0x219, - 0x21b, 0x5, 0xa0, 0x51, 0x2, 0x21a, 0x219, 0x3, 0x2, 0x2, 0x2, 0x21a, - 0x21b, 0x3, 0x2, 0x2, 0x2, 0x21b, 0x21d, 0x3, 0x2, 0x2, 0x2, 0x21c, - 0x1e6, 0x3, 0x2, 0x2, 0x2, 0x21c, 0x1ef, 0x3, 0x2, 0x2, 0x2, 0x21c, - 0x1f9, 0x3, 0x2, 0x2, 0x2, 0x21c, 0x1fe, 0x3, 0x2, 0x2, 0x2, 0x21c, - 0x208, 0x3, 0x2, 0x2, 0x2, 0x21c, 0x212, 0x3, 0x2, 0x2, 0x2, 0x21d, - 0x35, 0x3, 0x2, 0x2, 0x2, 0x21e, 0x220, 0x5, 0xa2, 0x52, 0x2, 0x21f, - 0x221, 0x5, 0x38, 0x1d, 0x2, 0x220, 0x21f, 0x3, 0x2, 0x2, 0x2, 0x220, - 0x221, 0x3, 0x2, 0x2, 0x2, 0x221, 0x37, 0x3, 0x2, 0x2, 0x2, 0x222, - 0x223, 0x7, 0x1c, 0x2, 0x2, 0x223, 0x224, 0x5, 0xb0, 0x59, 0x2, 0x224, - 0x225, 0x7, 0x1d, 0x2, 0x2, 0x225, 0x228, 0x3, 0x2, 0x2, 0x2, 0x226, - 0x228, 0x5, 0x3a, 0x1e, 0x2, 0x227, 0x222, 0x3, 0x2, 0x2, 0x2, 0x227, - 0x226, 0x3, 0x2, 0x2, 0x2, 0x228, 0x39, 0x3, 0x2, 0x2, 0x2, 0x229, - 0x22a, 0x7, 0x1c, 0x2, 0x2, 0x22a, 0x22b, 0x7, 0x87, 0x2, 0x2, 0x22b, - 0x22c, 0x7, 0x87, 0x2, 0x2, 0x22c, 0x22d, 0x7, 0x87, 0x2, 0x2, 0x22d, - 0x22e, 0x7, 0x87, 0x2, 0x2, 0x22e, 0x231, 0x7, 0x1d, 0x2, 0x2, 0x22f, - 0x231, 0x7, 0x87, 0x2, 0x2, 0x230, 0x229, 0x3, 0x2, 0x2, 0x2, 0x230, - 0x22f, 0x3, 0x2, 0x2, 0x2, 0x231, 0x3b, 0x3, 0x2, 0x2, 0x2, 0x232, - 0x233, 0x5, 0xa2, 0x52, 0x2, 0x233, 0x234, 0x5, 0x9a, 0x4e, 0x2, - 0x234, 0x235, 0x5, 0x9a, 0x4e, 0x2, 0x235, 0x3d, 0x3, 0x2, 0x2, 0x2, - 0x236, 0x237, 0x5, 0x9a, 0x4e, 0x2, 0x237, 0x238, 0x7, 0x37, 0x2, - 0x2, 0x238, 0x23a, 0x7, 0x7f, 0x2, 0x2, 0x239, 0x23b, 0x7, 0x7c, - 0x2, 0x2, 0x23a, 0x239, 0x3, 0x2, 0x2, 0x2, 0x23a, 0x23b, 0x3, 0x2, - 0x2, 0x2, 0x23b, 0x3f, 0x3, 0x2, 0x2, 0x2, 0x23c, 0x23f, 0x5, 0x9a, - 0x4e, 0x2, 0x23d, 0x23e, 0x7, 0x37, 0x2, 0x2, 0x23e, 0x240, 0x7, - 0x7f, 0x2, 0x2, 0x23f, 0x23d, 0x3, 0x2, 0x2, 0x2, 0x23f, 0x240, 0x3, - 0x2, 0x2, 0x2, 0x240, 0x242, 0x3, 0x2, 0x2, 0x2, 0x241, 0x243, 0x7, - 0x3d, 0x2, 0x2, 0x242, 0x241, 0x3, 0x2, 0x2, 0x2, 0x242, 0x243, 0x3, - 0x2, 0x2, 0x2, 0x243, 0x245, 0x3, 0x2, 0x2, 0x2, 0x244, 0x246, 0x7, - 0x7c, 0x2, 0x2, 0x245, 0x244, 0x3, 0x2, 0x2, 0x2, 0x245, 0x246, 0x3, - 0x2, 0x2, 0x2, 0x246, 0x41, 0x3, 0x2, 0x2, 0x2, 0x247, 0x249, 0x7, - 0x2a, 0x2, 0x2, 0x248, 0x24a, 0x5, 0xb4, 0x5b, 0x2, 0x249, 0x248, - 0x3, 0x2, 0x2, 0x2, 0x24a, 0x24b, 0x3, 0x2, 0x2, 0x2, 0x24b, 0x249, - 0x3, 0x2, 0x2, 0x2, 0x24b, 0x24c, 0x3, 0x2, 0x2, 0x2, 0x24c, 0x43, - 0x3, 0x2, 0x2, 0x2, 0x24d, 0x254, 0x7, 0x32, 0x2, 0x2, 0x24e, 0x252, - 0x5, 0xb6, 0x5c, 0x2, 0x24f, 0x250, 0x5, 0xb6, 0x5c, 0x2, 0x250, - 0x251, 0x5, 0xb6, 0x5c, 0x2, 0x251, 0x253, 0x3, 0x2, 0x2, 0x2, 0x252, - 0x24f, 0x3, 0x2, 0x2, 0x2, 0x252, 0x253, 0x3, 0x2, 0x2, 0x2, 0x253, - 0x255, 0x3, 0x2, 0x2, 0x2, 0x254, 0x24e, 0x3, 0x2, 0x2, 0x2, 0x254, - 0x255, 0x3, 0x2, 0x2, 0x2, 0x255, 0x256, 0x3, 0x2, 0x2, 0x2, 0x256, - 0x257, 0x7, 0x7e, 0x2, 0x2, 0x257, 0x258, 0x7, 0x92, 0x2, 0x2, 0x258, - 0x259, 0x7, 0x93, 0x2, 0x2, 0x259, 0x45, 0x3, 0x2, 0x2, 0x2, 0x25a, - 0x25b, 0x7, 0x2b, 0x2, 0x2, 0x25b, 0x25d, 0x7, 0x75, 0x2, 0x2, 0x25c, - 0x25e, 0x5, 0x8e, 0x48, 0x2, 0x25d, 0x25c, 0x3, 0x2, 0x2, 0x2, 0x25e, - 0x25f, 0x3, 0x2, 0x2, 0x2, 0x25f, 0x25d, 0x3, 0x2, 0x2, 0x2, 0x25f, - 0x260, 0x3, 0x2, 0x2, 0x2, 0x260, 0x261, 0x3, 0x2, 0x2, 0x2, 0x261, - 0x262, 0x7, 0x76, 0x2, 0x2, 0x262, 0x47, 0x3, 0x2, 0x2, 0x2, 0x263, - 0x264, 0x7, 0xd, 0x2, 0x2, 0x264, 0x49, 0x3, 0x2, 0x2, 0x2, 0x265, - 0x266, 0x7, 0x3f, 0x2, 0x2, 0x266, 0x268, 0x7, 0x75, 0x2, 0x2, 0x267, - 0x269, 0x5, 0x4c, 0x27, 0x2, 0x268, 0x267, 0x3, 0x2, 0x2, 0x2, 0x269, - 0x26a, 0x3, 0x2, 0x2, 0x2, 0x26a, 0x268, 0x3, 0x2, 0x2, 0x2, 0x26a, - 0x26b, 0x3, 0x2, 0x2, 0x2, 0x26b, 0x26c, 0x3, 0x2, 0x2, 0x2, 0x26c, - 0x26d, 0x7, 0x76, 0x2, 0x2, 0x26d, 0x26e, 0x7, 0x3f, 0x2, 0x2, 0x26e, - 0x26f, 0x7, 0x7a, 0x2, 0x2, 0x26f, 0x4b, 0x3, 0x2, 0x2, 0x2, 0x270, - 0x274, 0x5, 0x4e, 0x28, 0x2, 0x271, 0x274, 0x5, 0x50, 0x29, 0x2, - 0x272, 0x274, 0x5, 0x6, 0x4, 0x2, 0x273, 0x270, 0x3, 0x2, 0x2, 0x2, - 0x273, 0x271, 0x3, 0x2, 0x2, 0x2, 0x273, 0x272, 0x3, 0x2, 0x2, 0x2, - 0x274, 0x275, 0x3, 0x2, 0x2, 0x2, 0x275, 0x276, 0x7, 0x7a, 0x2, 0x2, - 0x276, 0x4d, 0x3, 0x2, 0x2, 0x2, 0x277, 0x279, 0x9, 0x5, 0x2, 0x2, - 0x278, 0x27a, 0x5, 0xb2, 0x5a, 0x2, 0x279, 0x278, 0x3, 0x2, 0x2, - 0x2, 0x27a, 0x27b, 0x3, 0x2, 0x2, 0x2, 0x27b, 0x279, 0x3, 0x2, 0x2, - 0x2, 0x27b, 0x27c, 0x3, 0x2, 0x2, 0x2, 0x27c, 0x4f, 0x3, 0x2, 0x2, - 0x2, 0x27d, 0x27e, 0x9, 0x6, 0x2, 0x2, 0x27e, 0x283, 0x5, 0x52, 0x2a, - 0x2, 0x27f, 0x280, 0x7, 0x7d, 0x2, 0x2, 0x280, 0x282, 0x5, 0x52, - 0x2a, 0x2, 0x281, 0x27f, 0x3, 0x2, 0x2, 0x2, 0x282, 0x285, 0x3, 0x2, - 0x2, 0x2, 0x283, 0x281, 0x3, 0x2, 0x2, 0x2, 0x283, 0x284, 0x3, 0x2, - 0x2, 0x2, 0x284, 0x51, 0x3, 0x2, 0x2, 0x2, 0x285, 0x283, 0x3, 0x2, - 0x2, 0x2, 0x286, 0x287, 0x5, 0xb2, 0x5a, 0x2, 0x287, 0x289, 0x5, - 0xb2, 0x5a, 0x2, 0x288, 0x28a, 0x7, 0x87, 0x2, 0x2, 0x289, 0x288, - 0x3, 0x2, 0x2, 0x2, 0x28a, 0x28b, 0x3, 0x2, 0x2, 0x2, 0x28b, 0x289, - 0x3, 0x2, 0x2, 0x2, 0x28b, 0x28c, 0x3, 0x2, 0x2, 0x2, 0x28c, 0x53, - 0x3, 0x2, 0x2, 0x2, 0x28d, 0x28e, 0x7, 0x44, 0x2, 0x2, 0x28e, 0x290, - 0x7, 0x75, 0x2, 0x2, 0x28f, 0x291, 0x5, 0x56, 0x2c, 0x2, 0x290, 0x28f, - 0x3, 0x2, 0x2, 0x2, 0x291, 0x292, 0x3, 0x2, 0x2, 0x2, 0x292, 0x290, - 0x3, 0x2, 0x2, 0x2, 0x292, 0x293, 0x3, 0x2, 0x2, 0x2, 0x293, 0x294, - 0x3, 0x2, 0x2, 0x2, 0x294, 0x295, 0x7, 0x76, 0x2, 0x2, 0x295, 0x296, - 0x7, 0x44, 0x2, 0x2, 0x296, 0x297, 0x7, 0x7a, 0x2, 0x2, 0x297, 0x55, - 0x3, 0x2, 0x2, 0x2, 0x298, 0x29e, 0x5, 0x58, 0x2d, 0x2, 0x299, 0x29e, - 0x5, 0x5a, 0x2e, 0x2, 0x29a, 0x29e, 0x5, 0x5c, 0x2f, 0x2, 0x29b, - 0x29e, 0x5, 0x5e, 0x30, 0x2, 0x29c, 0x29e, 0x5, 0x6, 0x4, 0x2, 0x29d, - 0x298, 0x3, 0x2, 0x2, 0x2, 0x29d, 0x299, 0x3, 0x2, 0x2, 0x2, 0x29d, - 0x29a, 0x3, 0x2, 0x2, 0x2, 0x29d, 0x29b, 0x3, 0x2, 0x2, 0x2, 0x29d, - 0x29c, 0x3, 0x2, 0x2, 0x2, 0x29e, 0x29f, 0x3, 0x2, 0x2, 0x2, 0x29f, - 0x2a0, 0x7, 0x7a, 0x2, 0x2, 0x2a0, 0x57, 0x3, 0x2, 0x2, 0x2, 0x2a1, - 0x2a2, 0x7, 0x45, 0x2, 0x2, 0x2a2, 0x2a3, 0x5, 0xa4, 0x53, 0x2, 0x2a3, - 0x2a4, 0x7, 0x7d, 0x2, 0x2, 0x2a4, 0x2a5, 0x5, 0xa4, 0x53, 0x2, 0x2a5, - 0x2a6, 0x7, 0x7d, 0x2, 0x2, 0x2a6, 0x2a7, 0x5, 0xa4, 0x53, 0x2, 0x2a7, - 0x2a8, 0x7, 0x7d, 0x2, 0x2, 0x2a8, 0x2a9, 0x5, 0xa4, 0x53, 0x2, 0x2a9, - 0x59, 0x3, 0x2, 0x2, 0x2, 0x2aa, 0x2ab, 0x7, 0x46, 0x2, 0x2, 0x2ab, - 0x2ad, 0x5, 0x9c, 0x4f, 0x2, 0x2ac, 0x2ae, 0x7, 0x87, 0x2, 0x2, 0x2ad, - 0x2ac, 0x3, 0x2, 0x2, 0x2, 0x2ae, 0x2af, 0x3, 0x2, 0x2, 0x2, 0x2af, - 0x2ad, 0x3, 0x2, 0x2, 0x2, 0x2af, 0x2b0, 0x3, 0x2, 0x2, 0x2, 0x2b0, - 0x5b, 0x3, 0x2, 0x2, 0x2, 0x2b1, 0x2b2, 0x7, 0x47, 0x2, 0x2, 0x2b2, - 0x2b4, 0x5, 0x9c, 0x4f, 0x2, 0x2b3, 0x2b5, 0x7, 0x87, 0x2, 0x2, 0x2b4, - 0x2b3, 0x3, 0x2, 0x2, 0x2, 0x2b5, 0x2b6, 0x3, 0x2, 0x2, 0x2, 0x2b6, - 0x2b4, 0x3, 0x2, 0x2, 0x2, 0x2b6, 0x2b7, 0x3, 0x2, 0x2, 0x2, 0x2b7, - 0x5d, 0x3, 0x2, 0x2, 0x2, 0x2b8, 0x2b9, 0x7, 0x48, 0x2, 0x2, 0x2b9, - 0x2bb, 0x5, 0x9c, 0x4f, 0x2, 0x2ba, 0x2bc, 0x7, 0x87, 0x2, 0x2, 0x2bb, - 0x2ba, 0x3, 0x2, 0x2, 0x2, 0x2bc, 0x2bd, 0x3, 0x2, 0x2, 0x2, 0x2bd, - 0x2bb, 0x3, 0x2, 0x2, 0x2, 0x2bd, 0x2be, 0x3, 0x2, 0x2, 0x2, 0x2be, - 0x5f, 0x3, 0x2, 0x2, 0x2, 0x2bf, 0x2c0, 0x7, 0x49, 0x2, 0x2, 0x2c0, - 0x2c2, 0x7, 0x75, 0x2, 0x2, 0x2c1, 0x2c3, 0x5, 0x62, 0x32, 0x2, 0x2c2, - 0x2c1, 0x3, 0x2, 0x2, 0x2, 0x2c3, 0x2c4, 0x3, 0x2, 0x2, 0x2, 0x2c4, - 0x2c2, 0x3, 0x2, 0x2, 0x2, 0x2c4, 0x2c5, 0x3, 0x2, 0x2, 0x2, 0x2c5, - 0x2c6, 0x3, 0x2, 0x2, 0x2, 0x2c6, 0x2c7, 0x7, 0x76, 0x2, 0x2, 0x2c7, - 0x2c8, 0x7, 0x49, 0x2, 0x2, 0x2c8, 0x2c9, 0x7, 0x7a, 0x2, 0x2, 0x2c9, - 0x61, 0x3, 0x2, 0x2, 0x2, 0x2ca, 0x2cd, 0x5, 0x64, 0x33, 0x2, 0x2cb, - 0x2cd, 0x5, 0x6, 0x4, 0x2, 0x2cc, 0x2ca, 0x3, 0x2, 0x2, 0x2, 0x2cc, - 0x2cb, 0x3, 0x2, 0x2, 0x2, 0x2cd, 0x2ce, 0x3, 0x2, 0x2, 0x2, 0x2ce, - 0x2cf, 0x7, 0x7a, 0x2, 0x2, 0x2cf, 0x63, 0x3, 0x2, 0x2, 0x2, 0x2d0, - 0x2d1, 0x7, 0x4a, 0x2, 0x2, 0x2d1, 0x2d2, 0x7, 0x84, 0x2, 0x2, 0x2d2, - 0x65, 0x3, 0x2, 0x2, 0x2, 0x2d3, 0x2d4, 0x7, 0x4b, 0x2, 0x2, 0x2d4, - 0x2d8, 0x7, 0x75, 0x2, 0x2, 0x2d5, 0x2d7, 0x5, 0x68, 0x35, 0x2, 0x2d6, - 0x2d5, 0x3, 0x2, 0x2, 0x2, 0x2d7, 0x2da, 0x3, 0x2, 0x2, 0x2, 0x2d8, - 0x2d6, 0x3, 0x2, 0x2, 0x2, 0x2d8, 0x2d9, 0x3, 0x2, 0x2, 0x2, 0x2d9, - 0x2db, 0x3, 0x2, 0x2, 0x2, 0x2da, 0x2d8, 0x3, 0x2, 0x2, 0x2, 0x2db, - 0x2dc, 0x7, 0x76, 0x2, 0x2, 0x2dc, 0x2dd, 0x7, 0x4b, 0x2, 0x2, 0x2dd, - 0x2de, 0x7, 0x7a, 0x2, 0x2, 0x2de, 0x67, 0x3, 0x2, 0x2, 0x2, 0x2df, - 0x2e2, 0x5, 0x6a, 0x36, 0x2, 0x2e0, 0x2e2, 0x5, 0x6, 0x4, 0x2, 0x2e1, - 0x2df, 0x3, 0x2, 0x2, 0x2, 0x2e1, 0x2e0, 0x3, 0x2, 0x2, 0x2, 0x2e2, - 0x2e3, 0x3, 0x2, 0x2, 0x2, 0x2e3, 0x2e4, 0x7, 0x7a, 0x2, 0x2, 0x2e4, - 0x69, 0x3, 0x2, 0x2, 0x2, 0x2e5, 0x2e6, 0x9, 0x7, 0x2, 0x2, 0x2e6, - 0x2e7, 0x7, 0x87, 0x2, 0x2, 0x2e7, 0x6b, 0x3, 0x2, 0x2, 0x2, 0x2e8, - 0x2e9, 0x7, 0x6e, 0x2, 0x2, 0x2e9, 0x2ed, 0x7, 0x75, 0x2, 0x2, 0x2ea, - 0x2ec, 0x5, 0x6e, 0x38, 0x2, 0x2eb, 0x2ea, 0x3, 0x2, 0x2, 0x2, 0x2ec, - 0x2ef, 0x3, 0x2, 0x2, 0x2, 0x2ed, 0x2eb, 0x3, 0x2, 0x2, 0x2, 0x2ed, - 0x2ee, 0x3, 0x2, 0x2, 0x2, 0x2ee, 0x2f0, 0x3, 0x2, 0x2, 0x2, 0x2ef, - 0x2ed, 0x3, 0x2, 0x2, 0x2, 0x2f0, 0x2f1, 0x7, 0x76, 0x2, 0x2, 0x2f1, - 0x2f2, 0x7, 0x6e, 0x2, 0x2, 0x2f2, 0x2f3, 0x7, 0x7a, 0x2, 0x2, 0x2f3, - 0x6d, 0x3, 0x2, 0x2, 0x2, 0x2f4, 0x2f7, 0x5, 0x70, 0x39, 0x2, 0x2f5, - 0x2f7, 0x5, 0x6, 0x4, 0x2, 0x2f6, 0x2f4, 0x3, 0x2, 0x2, 0x2, 0x2f6, - 0x2f5, 0x3, 0x2, 0x2, 0x2, 0x2f7, 0x2f8, 0x3, 0x2, 0x2, 0x2, 0x2f8, - 0x2f9, 0x7, 0x7a, 0x2, 0x2, 0x2f9, 0x6f, 0x3, 0x2, 0x2, 0x2, 0x2fa, - 0x2fb, 0x9, 0x8, 0x2, 0x2, 0x2fb, 0x2fc, 0x7, 0x87, 0x2, 0x2, 0x2fc, - 0x71, 0x3, 0x2, 0x2, 0x2, 0x2fd, 0x2fe, 0x7, 0x50, 0x2, 0x2, 0x2fe, - 0x300, 0x7, 0x75, 0x2, 0x2, 0x2ff, 0x301, 0x5, 0x74, 0x3b, 0x2, 0x300, - 0x2ff, 0x3, 0x2, 0x2, 0x2, 0x301, 0x302, 0x3, 0x2, 0x2, 0x2, 0x302, - 0x300, 0x3, 0x2, 0x2, 0x2, 0x302, 0x303, 0x3, 0x2, 0x2, 0x2, 0x303, - 0x304, 0x3, 0x2, 0x2, 0x2, 0x304, 0x305, 0x7, 0x76, 0x2, 0x2, 0x305, - 0x306, 0x7, 0x50, 0x2, 0x2, 0x306, 0x307, 0x7, 0x7a, 0x2, 0x2, 0x307, - 0x73, 0x3, 0x2, 0x2, 0x2, 0x308, 0x30b, 0x5, 0x76, 0x3c, 0x2, 0x309, - 0x30b, 0x5, 0x6, 0x4, 0x2, 0x30a, 0x308, 0x3, 0x2, 0x2, 0x2, 0x30a, - 0x309, 0x3, 0x2, 0x2, 0x2, 0x30b, 0x30c, 0x3, 0x2, 0x2, 0x2, 0x30c, - 0x30d, 0x7, 0x7a, 0x2, 0x2, 0x30d, 0x75, 0x3, 0x2, 0x2, 0x2, 0x30e, - 0x30f, 0x7, 0x51, 0x2, 0x2, 0x30f, 0x316, 0x5, 0xb6, 0x5c, 0x2, 0x310, - 0x314, 0x5, 0xb6, 0x5c, 0x2, 0x311, 0x312, 0x5, 0xb6, 0x5c, 0x2, - 0x312, 0x313, 0x5, 0xb6, 0x5c, 0x2, 0x313, 0x315, 0x3, 0x2, 0x2, - 0x2, 0x314, 0x311, 0x3, 0x2, 0x2, 0x2, 0x314, 0x315, 0x3, 0x2, 0x2, - 0x2, 0x315, 0x317, 0x3, 0x2, 0x2, 0x2, 0x316, 0x310, 0x3, 0x2, 0x2, - 0x2, 0x316, 0x317, 0x3, 0x2, 0x2, 0x2, 0x317, 0x318, 0x3, 0x2, 0x2, - 0x2, 0x318, 0x319, 0x7, 0x7e, 0x2, 0x2, 0x319, 0x31a, 0x7, 0x92, - 0x2, 0x2, 0x31a, 0x31b, 0x7, 0x93, 0x2, 0x2, 0x31b, 0x77, 0x3, 0x2, - 0x2, 0x2, 0x31c, 0x31d, 0x7, 0x52, 0x2, 0x2, 0x31d, 0x31f, 0x7, 0x75, - 0x2, 0x2, 0x31e, 0x320, 0x5, 0x7a, 0x3e, 0x2, 0x31f, 0x31e, 0x3, - 0x2, 0x2, 0x2, 0x320, 0x321, 0x3, 0x2, 0x2, 0x2, 0x321, 0x31f, 0x3, - 0x2, 0x2, 0x2, 0x321, 0x322, 0x3, 0x2, 0x2, 0x2, 0x322, 0x323, 0x3, - 0x2, 0x2, 0x2, 0x323, 0x324, 0x7, 0x76, 0x2, 0x2, 0x324, 0x325, 0x7, - 0x52, 0x2, 0x2, 0x325, 0x326, 0x7, 0x7a, 0x2, 0x2, 0x326, 0x79, 0x3, - 0x2, 0x2, 0x2, 0x327, 0x32a, 0x5, 0x7c, 0x3f, 0x2, 0x328, 0x32a, - 0x5, 0x6, 0x4, 0x2, 0x329, 0x327, 0x3, 0x2, 0x2, 0x2, 0x329, 0x328, - 0x3, 0x2, 0x2, 0x2, 0x32a, 0x32b, 0x3, 0x2, 0x2, 0x2, 0x32b, 0x32c, - 0x7, 0x7a, 0x2, 0x2, 0x32c, 0x7b, 0x3, 0x2, 0x2, 0x2, 0x32d, 0x32e, - 0x9, 0x9, 0x2, 0x2, 0x32e, 0x349, 0x7, 0x87, 0x2, 0x2, 0x32f, 0x330, - 0x9, 0xa, 0x2, 0x2, 0x330, 0x349, 0x7, 0x87, 0x2, 0x2, 0x331, 0x332, - 0x7, 0x64, 0x2, 0x2, 0x332, 0x349, 0x5, 0xb6, 0x5c, 0x2, 0x333, 0x334, - 0x7, 0x61, 0x2, 0x2, 0x334, 0x335, 0x7, 0x7e, 0x2, 0x2, 0x335, 0x336, - 0x7, 0x92, 0x2, 0x2, 0x336, 0x349, 0x7, 0x93, 0x2, 0x2, 0x337, 0x338, - 0x7, 0x57, 0x2, 0x2, 0x338, 0x339, 0x7, 0x87, 0x2, 0x2, 0x339, 0x33a, - 0x7, 0x87, 0x2, 0x2, 0x33a, 0x33b, 0x7, 0x87, 0x2, 0x2, 0x33b, 0x33c, - 0x7, 0x87, 0x2, 0x2, 0x33c, 0x33d, 0x7, 0x87, 0x2, 0x2, 0x33d, 0x33e, - 0x7, 0x87, 0x2, 0x2, 0x33e, 0x33f, 0x7, 0x87, 0x2, 0x2, 0x33f, 0x340, - 0x7, 0x87, 0x2, 0x2, 0x340, 0x341, 0x7, 0x87, 0x2, 0x2, 0x341, 0x349, - 0x7, 0x87, 0x2, 0x2, 0x342, 0x344, 0x9, 0xb, 0x2, 0x2, 0x343, 0x345, - 0x7, 0x87, 0x2, 0x2, 0x344, 0x343, 0x3, 0x2, 0x2, 0x2, 0x345, 0x346, - 0x3, 0x2, 0x2, 0x2, 0x346, 0x344, 0x3, 0x2, 0x2, 0x2, 0x346, 0x347, - 0x3, 0x2, 0x2, 0x2, 0x347, 0x349, 0x3, 0x2, 0x2, 0x2, 0x348, 0x32d, - 0x3, 0x2, 0x2, 0x2, 0x348, 0x32f, 0x3, 0x2, 0x2, 0x2, 0x348, 0x331, - 0x3, 0x2, 0x2, 0x2, 0x348, 0x333, 0x3, 0x2, 0x2, 0x2, 0x348, 0x337, - 0x3, 0x2, 0x2, 0x2, 0x348, 0x342, 0x3, 0x2, 0x2, 0x2, 0x349, 0x7d, - 0x3, 0x2, 0x2, 0x2, 0x34a, 0x34b, 0x7, 0x65, 0x2, 0x2, 0x34b, 0x34d, - 0x7, 0x75, 0x2, 0x2, 0x34c, 0x34e, 0x5, 0x80, 0x41, 0x2, 0x34d, 0x34c, - 0x3, 0x2, 0x2, 0x2, 0x34e, 0x34f, 0x3, 0x2, 0x2, 0x2, 0x34f, 0x34d, - 0x3, 0x2, 0x2, 0x2, 0x34f, 0x350, 0x3, 0x2, 0x2, 0x2, 0x350, 0x351, - 0x3, 0x2, 0x2, 0x2, 0x351, 0x352, 0x7, 0x76, 0x2, 0x2, 0x352, 0x353, - 0x7, 0x65, 0x2, 0x2, 0x353, 0x354, 0x7, 0x7a, 0x2, 0x2, 0x354, 0x7f, - 0x3, 0x2, 0x2, 0x2, 0x355, 0x35b, 0x5, 0x82, 0x42, 0x2, 0x356, 0x35b, - 0x5, 0x84, 0x43, 0x2, 0x357, 0x35b, 0x5, 0x8c, 0x47, 0x2, 0x358, - 0x35b, 0x5, 0x90, 0x49, 0x2, 0x359, 0x35b, 0x5, 0x6, 0x4, 0x2, 0x35a, - 0x355, 0x3, 0x2, 0x2, 0x2, 0x35a, 0x356, 0x3, 0x2, 0x2, 0x2, 0x35a, - 0x357, 0x3, 0x2, 0x2, 0x2, 0x35a, 0x358, 0x3, 0x2, 0x2, 0x2, 0x35a, - 0x359, 0x3, 0x2, 0x2, 0x2, 0x35b, 0x35c, 0x3, 0x2, 0x2, 0x2, 0x35c, - 0x35d, 0x7, 0x7a, 0x2, 0x2, 0x35d, 0x81, 0x3, 0x2, 0x2, 0x2, 0x35e, - 0x35f, 0x7, 0x68, 0x2, 0x2, 0x35f, 0x360, 0x5, 0xb2, 0x5a, 0x2, 0x360, - 0x361, 0x7, 0x87, 0x2, 0x2, 0x361, 0x363, 0x7, 0x75, 0x2, 0x2, 0x362, - 0x364, 0x5, 0x8e, 0x48, 0x2, 0x363, 0x362, 0x3, 0x2, 0x2, 0x2, 0x364, - 0x365, 0x3, 0x2, 0x2, 0x2, 0x365, 0x363, 0x3, 0x2, 0x2, 0x2, 0x365, - 0x366, 0x3, 0x2, 0x2, 0x2, 0x366, 0x367, 0x3, 0x2, 0x2, 0x2, 0x367, - 0x368, 0x7, 0x76, 0x2, 0x2, 0x368, 0x83, 0x3, 0x2, 0x2, 0x2, 0x369, - 0x36a, 0x7, 0x69, 0x2, 0x2, 0x36a, 0x36c, 0x7, 0x75, 0x2, 0x2, 0x36b, - 0x36d, 0x5, 0x86, 0x44, 0x2, 0x36c, 0x36b, 0x3, 0x2, 0x2, 0x2, 0x36d, - 0x36e, 0x3, 0x2, 0x2, 0x2, 0x36e, 0x36c, 0x3, 0x2, 0x2, 0x2, 0x36e, - 0x36f, 0x3, 0x2, 0x2, 0x2, 0x36f, 0x370, 0x3, 0x2, 0x2, 0x2, 0x370, - 0x371, 0x7, 0x76, 0x2, 0x2, 0x371, 0x85, 0x3, 0x2, 0x2, 0x2, 0x372, - 0x377, 0x5, 0x92, 0x4a, 0x2, 0x373, 0x377, 0x5, 0x88, 0x45, 0x2, - 0x374, 0x377, 0x5, 0x8a, 0x46, 0x2, 0x375, 0x377, 0x5, 0x6, 0x4, - 0x2, 0x376, 0x372, 0x3, 0x2, 0x2, 0x2, 0x376, 0x373, 0x3, 0x2, 0x2, - 0x2, 0x376, 0x374, 0x3, 0x2, 0x2, 0x2, 0x376, 0x375, 0x3, 0x2, 0x2, - 0x2, 0x377, 0x378, 0x3, 0x2, 0x2, 0x2, 0x378, 0x379, 0x7, 0x7a, 0x2, - 0x2, 0x379, 0x87, 0x3, 0x2, 0x2, 0x2, 0x37a, 0x37b, 0x7, 0x6b, 0x2, - 0x2, 0x37b, 0x37c, 0x5, 0xb2, 0x5a, 0x2, 0x37c, 0x381, 0x5, 0xb4, - 0x5b, 0x2, 0x37d, 0x37f, 0x5, 0xb4, 0x5b, 0x2, 0x37e, 0x380, 0x5, - 0xb4, 0x5b, 0x2, 0x37f, 0x37e, 0x3, 0x2, 0x2, 0x2, 0x37f, 0x380, - 0x3, 0x2, 0x2, 0x2, 0x380, 0x382, 0x3, 0x2, 0x2, 0x2, 0x381, 0x37d, - 0x3, 0x2, 0x2, 0x2, 0x381, 0x382, 0x3, 0x2, 0x2, 0x2, 0x382, 0x89, - 0x3, 0x2, 0x2, 0x2, 0x383, 0x385, 0x7, 0x6a, 0x2, 0x2, 0x384, 0x386, - 0x9, 0xc, 0x2, 0x2, 0x385, 0x384, 0x3, 0x2, 0x2, 0x2, 0x386, 0x387, - 0x3, 0x2, 0x2, 0x2, 0x387, 0x385, 0x3, 0x2, 0x2, 0x2, 0x387, 0x388, - 0x3, 0x2, 0x2, 0x2, 0x388, 0x8b, 0x3, 0x2, 0x2, 0x2, 0x389, 0x38a, - 0x7, 0x66, 0x2, 0x2, 0x38a, 0x38c, 0x7, 0x75, 0x2, 0x2, 0x38b, 0x38d, - 0x5, 0x8e, 0x48, 0x2, 0x38c, 0x38b, 0x3, 0x2, 0x2, 0x2, 0x38d, 0x38e, - 0x3, 0x2, 0x2, 0x2, 0x38e, 0x38c, 0x3, 0x2, 0x2, 0x2, 0x38e, 0x38f, - 0x3, 0x2, 0x2, 0x2, 0x38f, 0x390, 0x3, 0x2, 0x2, 0x2, 0x390, 0x391, - 0x7, 0x76, 0x2, 0x2, 0x391, 0x8d, 0x3, 0x2, 0x2, 0x2, 0x392, 0x395, - 0x5, 0x92, 0x4a, 0x2, 0x393, 0x395, 0x5, 0x6, 0x4, 0x2, 0x394, 0x392, - 0x3, 0x2, 0x2, 0x2, 0x394, 0x393, 0x3, 0x2, 0x2, 0x2, 0x395, 0x396, - 0x3, 0x2, 0x2, 0x2, 0x396, 0x397, 0x7, 0x7a, 0x2, 0x2, 0x397, 0x8f, - 0x3, 0x2, 0x2, 0x2, 0x398, 0x399, 0x7, 0x67, 0x2, 0x2, 0x399, 0x39a, - 0x5, 0xb6, 0x5c, 0x2, 0x39a, 0x91, 0x3, 0x2, 0x2, 0x2, 0x39b, 0x3a2, - 0x7, 0x50, 0x2, 0x2, 0x39c, 0x3a0, 0x5, 0xb6, 0x5c, 0x2, 0x39d, 0x39e, - 0x5, 0xb6, 0x5c, 0x2, 0x39e, 0x39f, 0x5, 0xb6, 0x5c, 0x2, 0x39f, - 0x3a1, 0x3, 0x2, 0x2, 0x2, 0x3a0, 0x39d, 0x3, 0x2, 0x2, 0x2, 0x3a0, - 0x3a1, 0x3, 0x2, 0x2, 0x2, 0x3a1, 0x3a3, 0x3, 0x2, 0x2, 0x2, 0x3a2, - 0x39c, 0x3, 0x2, 0x2, 0x2, 0x3a2, 0x3a3, 0x3, 0x2, 0x2, 0x2, 0x3a3, - 0x3a4, 0x3, 0x2, 0x2, 0x2, 0x3a4, 0x3a5, 0x7, 0x7e, 0x2, 0x2, 0x3a5, - 0x3a6, 0x7, 0x92, 0x2, 0x2, 0x3a6, 0x3a7, 0x7, 0x93, 0x2, 0x2, 0x3a7, - 0x93, 0x3, 0x2, 0x2, 0x2, 0x3a8, 0x3a9, 0x7, 0x72, 0x2, 0x2, 0x3a9, - 0x3ab, 0x7, 0x75, 0x2, 0x2, 0x3aa, 0x3ac, 0x5, 0x96, 0x4c, 0x2, 0x3ab, - 0x3aa, 0x3, 0x2, 0x2, 0x2, 0x3ac, 0x3ad, 0x3, 0x2, 0x2, 0x2, 0x3ad, - 0x3ab, 0x3, 0x2, 0x2, 0x2, 0x3ad, 0x3ae, 0x3, 0x2, 0x2, 0x2, 0x3ae, - 0x3af, 0x3, 0x2, 0x2, 0x2, 0x3af, 0x3b0, 0x7, 0x76, 0x2, 0x2, 0x3b0, - 0x3b1, 0x7, 0x72, 0x2, 0x2, 0x3b1, 0x3b2, 0x7, 0x7a, 0x2, 0x2, 0x3b2, - 0x95, 0x3, 0x2, 0x2, 0x2, 0x3b3, 0x3b6, 0x5, 0x98, 0x4d, 0x2, 0x3b4, - 0x3b6, 0x5, 0x6, 0x4, 0x2, 0x3b5, 0x3b3, 0x3, 0x2, 0x2, 0x2, 0x3b5, - 0x3b4, 0x3, 0x2, 0x2, 0x2, 0x3b6, 0x3b7, 0x3, 0x2, 0x2, 0x2, 0x3b7, - 0x3b8, 0x7, 0x7a, 0x2, 0x2, 0x3b8, 0x97, 0x3, 0x2, 0x2, 0x2, 0x3b9, - 0x3ba, 0x9, 0xd, 0x2, 0x2, 0x3ba, 0x3bb, 0x5, 0xac, 0x57, 0x2, 0x3bb, - 0x3bc, 0x7, 0x87, 0x2, 0x2, 0x3bc, 0x99, 0x3, 0x2, 0x2, 0x2, 0x3bd, - 0x3be, 0x7, 0x1c, 0x2, 0x2, 0x3be, 0x3c7, 0x7, 0x34, 0x2, 0x2, 0x3bf, - 0x3c0, 0x7, 0x87, 0x2, 0x2, 0x3c0, 0x3c3, 0x7, 0x87, 0x2, 0x2, 0x3c1, - 0x3c2, 0x7, 0x33, 0x2, 0x2, 0x3c2, 0x3c4, 0x7, 0x87, 0x2, 0x2, 0x3c3, - 0x3c1, 0x3, 0x2, 0x2, 0x2, 0x3c3, 0x3c4, 0x3, 0x2, 0x2, 0x2, 0x3c4, - 0x3c8, 0x3, 0x2, 0x2, 0x2, 0x3c5, 0x3c8, 0x7, 0x3e, 0x2, 0x2, 0x3c6, - 0x3c8, 0x5, 0xb0, 0x59, 0x2, 0x3c7, 0x3bf, 0x3, 0x2, 0x2, 0x2, 0x3c7, - 0x3c5, 0x3, 0x2, 0x2, 0x2, 0x3c7, 0x3c6, 0x3, 0x2, 0x2, 0x2, 0x3c8, - 0x3c9, 0x3, 0x2, 0x2, 0x2, 0x3c9, 0x3ca, 0x7, 0x1d, 0x2, 0x2, 0x3ca, - 0x9b, 0x3, 0x2, 0x2, 0x2, 0x3cb, 0x3cd, 0x5, 0x9e, 0x50, 0x2, 0x3cc, - 0x3cb, 0x3, 0x2, 0x2, 0x2, 0x3cd, 0x3ce, 0x3, 0x2, 0x2, 0x2, 0x3ce, - 0x3cc, 0x3, 0x2, 0x2, 0x2, 0x3ce, 0x3cf, 0x3, 0x2, 0x2, 0x2, 0x3cf, - 0x9d, 0x3, 0x2, 0x2, 0x2, 0x3d0, 0x3d5, 0x5, 0xa2, 0x52, 0x2, 0x3d1, - 0x3d2, 0x7, 0xe, 0x2, 0x2, 0x3d2, 0x3d4, 0x5, 0xb0, 0x59, 0x2, 0x3d3, - 0x3d1, 0x3, 0x2, 0x2, 0x2, 0x3d4, 0x3d7, 0x3, 0x2, 0x2, 0x2, 0x3d5, - 0x3d3, 0x3, 0x2, 0x2, 0x2, 0x3d5, 0x3d6, 0x3, 0x2, 0x2, 0x2, 0x3d6, - 0x9f, 0x3, 0x2, 0x2, 0x2, 0x3d7, 0x3d5, 0x3, 0x2, 0x2, 0x2, 0x3d8, - 0x3da, 0x5, 0xa2, 0x52, 0x2, 0x3d9, 0x3d8, 0x3, 0x2, 0x2, 0x2, 0x3da, - 0x3db, 0x3, 0x2, 0x2, 0x2, 0x3db, 0x3d9, 0x3, 0x2, 0x2, 0x2, 0x3db, - 0x3dc, 0x3, 0x2, 0x2, 0x2, 0x3dc, 0xa1, 0x3, 0x2, 0x2, 0x2, 0x3dd, - 0x3e0, 0x5, 0xa6, 0x54, 0x2, 0x3de, 0x3e0, 0x5, 0xac, 0x57, 0x2, - 0x3df, 0x3dd, 0x3, 0x2, 0x2, 0x2, 0x3df, 0x3de, 0x3, 0x2, 0x2, 0x2, - 0x3e0, 0x3e2, 0x3, 0x2, 0x2, 0x2, 0x3e1, 0x3e3, 0x7, 0x7c, 0x2, 0x2, - 0x3e2, 0x3e1, 0x3, 0x2, 0x2, 0x2, 0x3e2, 0x3e3, 0x3, 0x2, 0x2, 0x2, - 0x3e3, 0xa3, 0x3, 0x2, 0x2, 0x2, 0x3e4, 0x3e6, 0x5, 0xa6, 0x54, 0x2, - 0x3e5, 0x3e4, 0x3, 0x2, 0x2, 0x2, 0x3e5, 0x3e6, 0x3, 0x2, 0x2, 0x2, - 0x3e6, 0xa5, 0x3, 0x2, 0x2, 0x2, 0x3e7, 0x3ea, 0x7, 0x7f, 0x2, 0x2, - 0x3e8, 0x3ea, 0x5, 0xa8, 0x55, 0x2, 0x3e9, 0x3e7, 0x3, 0x2, 0x2, - 0x2, 0x3e9, 0x3e8, 0x3, 0x2, 0x2, 0x2, 0x3ea, 0xa7, 0x3, 0x2, 0x2, - 0x2, 0x3eb, 0x3ed, 0x7, 0x77, 0x2, 0x2, 0x3ec, 0x3ee, 0x5, 0xaa, - 0x56, 0x2, 0x3ed, 0x3ec, 0x3, 0x2, 0x2, 0x2, 0x3ee, 0x3ef, 0x3, 0x2, - 0x2, 0x2, 0x3ef, 0x3ed, 0x3, 0x2, 0x2, 0x2, 0x3ef, 0x3f0, 0x3, 0x2, - 0x2, 0x2, 0x3f0, 0x3f1, 0x3, 0x2, 0x2, 0x2, 0x3f1, 0x3f2, 0x7, 0x78, - 0x2, 0x2, 0x3f2, 0xa9, 0x3, 0x2, 0x2, 0x2, 0x3f3, 0x3f6, 0x5, 0xac, - 0x57, 0x2, 0x3f4, 0x3f5, 0x7, 0x79, 0x2, 0x2, 0x3f5, 0x3f7, 0x5, - 0xac, 0x57, 0x2, 0x3f6, 0x3f4, 0x3, 0x2, 0x2, 0x2, 0x3f6, 0x3f7, - 0x3, 0x2, 0x2, 0x2, 0x3f7, 0x3fa, 0x3, 0x2, 0x2, 0x2, 0x3f8, 0x3fa, - 0x7, 0x7f, 0x2, 0x2, 0x3f9, 0x3f3, 0x3, 0x2, 0x2, 0x2, 0x3f9, 0x3f8, - 0x3, 0x2, 0x2, 0x2, 0x3fa, 0xab, 0x3, 0x2, 0x2, 0x2, 0x3fb, 0x3fe, - 0x5, 0xae, 0x58, 0x2, 0x3fc, 0x3fe, 0x7, 0x80, 0x2, 0x2, 0x3fd, 0x3fb, - 0x3, 0x2, 0x2, 0x2, 0x3fd, 0x3fc, 0x3, 0x2, 0x2, 0x2, 0x3fe, 0xad, - 0x3, 0x2, 0x2, 0x2, 0x3ff, 0x400, 0x9, 0xe, 0x2, 0x2, 0x400, 0xaf, - 0x3, 0x2, 0x2, 0x2, 0x401, 0x402, 0x9, 0xf, 0x2, 0x2, 0x402, 0xb1, - 0x3, 0x2, 0x2, 0x2, 0x403, 0x404, 0x9, 0x10, 0x2, 0x2, 0x404, 0xb3, - 0x3, 0x2, 0x2, 0x2, 0x405, 0x406, 0x9, 0x11, 0x2, 0x2, 0x406, 0xb5, - 0x3, 0x2, 0x2, 0x2, 0x407, 0x408, 0x9, 0x12, 0x2, 0x2, 0x408, 0xb7, - 0x3, 0x2, 0x2, 0x2, 0x409, 0x40b, 0x5, 0x1a, 0xe, 0x2, 0x40a, 0x409, - 0x3, 0x2, 0x2, 0x2, 0x40b, 0x40e, 0x3, 0x2, 0x2, 0x2, 0x40c, 0x40a, - 0x3, 0x2, 0x2, 0x2, 0x40c, 0x40d, 0x3, 0x2, 0x2, 0x2, 0x40d, 0x40f, - 0x3, 0x2, 0x2, 0x2, 0x40e, 0x40c, 0x3, 0x2, 0x2, 0x2, 0x40f, 0x410, - 0x7, 0x2, 0x2, 0x3, 0x410, 0xb9, 0x3, 0x2, 0x2, 0x2, 0x411, 0x413, - 0x5, 0x24, 0x13, 0x2, 0x412, 0x411, 0x3, 0x2, 0x2, 0x2, 0x413, 0x416, - 0x3, 0x2, 0x2, 0x2, 0x414, 0x412, 0x3, 0x2, 0x2, 0x2, 0x414, 0x415, - 0x3, 0x2, 0x2, 0x2, 0x415, 0x417, 0x3, 0x2, 0x2, 0x2, 0x416, 0x414, - 0x3, 0x2, 0x2, 0x2, 0x417, 0x418, 0x7, 0x2, 0x2, 0x3, 0x418, 0xbb, - 0x3, 0x2, 0x2, 0x2, 0x419, 0x41b, 0x5, 0x20, 0x11, 0x2, 0x41a, 0x419, - 0x3, 0x2, 0x2, 0x2, 0x41b, 0x41e, 0x3, 0x2, 0x2, 0x2, 0x41c, 0x41a, - 0x3, 0x2, 0x2, 0x2, 0x41c, 0x41d, 0x3, 0x2, 0x2, 0x2, 0x41d, 0x41f, - 0x3, 0x2, 0x2, 0x2, 0x41e, 0x41c, 0x3, 0x2, 0x2, 0x2, 0x41f, 0x420, - 0x7, 0x2, 0x2, 0x3, 0x420, 0xbd, 0x3, 0x2, 0x2, 0x2, 0x421, 0x423, - 0x5, 0x4c, 0x27, 0x2, 0x422, 0x421, 0x3, 0x2, 0x2, 0x2, 0x423, 0x426, - 0x3, 0x2, 0x2, 0x2, 0x424, 0x422, 0x3, 0x2, 0x2, 0x2, 0x424, 0x425, - 0x3, 0x2, 0x2, 0x2, 0x425, 0x427, 0x3, 0x2, 0x2, 0x2, 0x426, 0x424, - 0x3, 0x2, 0x2, 0x2, 0x427, 0x428, 0x7, 0x2, 0x2, 0x3, 0x428, 0xbf, - 0x3, 0x2, 0x2, 0x2, 0x429, 0x42b, 0x5, 0x62, 0x32, 0x2, 0x42a, 0x429, - 0x3, 0x2, 0x2, 0x2, 0x42b, 0x42e, 0x3, 0x2, 0x2, 0x2, 0x42c, 0x42a, - 0x3, 0x2, 0x2, 0x2, 0x42c, 0x42d, 0x3, 0x2, 0x2, 0x2, 0x42d, 0x42f, - 0x3, 0x2, 0x2, 0x2, 0x42e, 0x42c, 0x3, 0x2, 0x2, 0x2, 0x42f, 0x430, - 0x7, 0x2, 0x2, 0x3, 0x430, 0xc1, 0x3, 0x2, 0x2, 0x2, 0x431, 0x433, - 0x5, 0x68, 0x35, 0x2, 0x432, 0x431, 0x3, 0x2, 0x2, 0x2, 0x433, 0x436, - 0x3, 0x2, 0x2, 0x2, 0x434, 0x432, 0x3, 0x2, 0x2, 0x2, 0x434, 0x435, - 0x3, 0x2, 0x2, 0x2, 0x435, 0x437, 0x3, 0x2, 0x2, 0x2, 0x436, 0x434, - 0x3, 0x2, 0x2, 0x2, 0x437, 0x438, 0x7, 0x2, 0x2, 0x3, 0x438, 0xc3, - 0x3, 0x2, 0x2, 0x2, 0x439, 0x43b, 0x5, 0x6e, 0x38, 0x2, 0x43a, 0x439, - 0x3, 0x2, 0x2, 0x2, 0x43b, 0x43e, 0x3, 0x2, 0x2, 0x2, 0x43c, 0x43a, - 0x3, 0x2, 0x2, 0x2, 0x43c, 0x43d, 0x3, 0x2, 0x2, 0x2, 0x43d, 0x43f, - 0x3, 0x2, 0x2, 0x2, 0x43e, 0x43c, 0x3, 0x2, 0x2, 0x2, 0x43f, 0x440, - 0x7, 0x2, 0x2, 0x3, 0x440, 0xc5, 0x3, 0x2, 0x2, 0x2, 0x441, 0x443, - 0x5, 0x56, 0x2c, 0x2, 0x442, 0x441, 0x3, 0x2, 0x2, 0x2, 0x443, 0x446, - 0x3, 0x2, 0x2, 0x2, 0x444, 0x442, 0x3, 0x2, 0x2, 0x2, 0x444, 0x445, - 0x3, 0x2, 0x2, 0x2, 0x445, 0x447, 0x3, 0x2, 0x2, 0x2, 0x446, 0x444, - 0x3, 0x2, 0x2, 0x2, 0x447, 0x448, 0x7, 0x2, 0x2, 0x3, 0x448, 0xc7, - 0x3, 0x2, 0x2, 0x2, 0x449, 0x44b, 0x5, 0x74, 0x3b, 0x2, 0x44a, 0x449, - 0x3, 0x2, 0x2, 0x2, 0x44b, 0x44e, 0x3, 0x2, 0x2, 0x2, 0x44c, 0x44a, - 0x3, 0x2, 0x2, 0x2, 0x44c, 0x44d, 0x3, 0x2, 0x2, 0x2, 0x44d, 0x44f, - 0x3, 0x2, 0x2, 0x2, 0x44e, 0x44c, 0x3, 0x2, 0x2, 0x2, 0x44f, 0x450, - 0x7, 0x2, 0x2, 0x3, 0x450, 0xc9, 0x3, 0x2, 0x2, 0x2, 0x451, 0x453, - 0x5, 0x96, 0x4c, 0x2, 0x452, 0x451, 0x3, 0x2, 0x2, 0x2, 0x453, 0x456, - 0x3, 0x2, 0x2, 0x2, 0x454, 0x452, 0x3, 0x2, 0x2, 0x2, 0x454, 0x455, - 0x3, 0x2, 0x2, 0x2, 0x455, 0x457, 0x3, 0x2, 0x2, 0x2, 0x456, 0x454, - 0x3, 0x2, 0x2, 0x2, 0x457, 0x458, 0x7, 0x2, 0x2, 0x3, 0x458, 0xcb, - 0x3, 0x2, 0x2, 0x2, 0x459, 0x45b, 0x5, 0x7a, 0x3e, 0x2, 0x45a, 0x459, - 0x3, 0x2, 0x2, 0x2, 0x45b, 0x45e, 0x3, 0x2, 0x2, 0x2, 0x45c, 0x45a, - 0x3, 0x2, 0x2, 0x2, 0x45c, 0x45d, 0x3, 0x2, 0x2, 0x2, 0x45d, 0x45f, - 0x3, 0x2, 0x2, 0x2, 0x45e, 0x45c, 0x3, 0x2, 0x2, 0x2, 0x45f, 0x460, - 0x7, 0x2, 0x2, 0x3, 0x460, 0xcd, 0x3, 0x2, 0x2, 0x2, 0x461, 0x463, - 0x5, 0x80, 0x41, 0x2, 0x462, 0x461, 0x3, 0x2, 0x2, 0x2, 0x463, 0x466, - 0x3, 0x2, 0x2, 0x2, 0x464, 0x462, 0x3, 0x2, 0x2, 0x2, 0x464, 0x465, - 0x3, 0x2, 0x2, 0x2, 0x465, 0x467, 0x3, 0x2, 0x2, 0x2, 0x466, 0x464, - 0x3, 0x2, 0x2, 0x2, 0x467, 0x468, 0x7, 0x2, 0x2, 0x3, 0x468, 0xcf, - 0x3, 0x2, 0x2, 0x2, 0x469, 0x46b, 0x5, 0x86, 0x44, 0x2, 0x46a, 0x469, - 0x3, 0x2, 0x2, 0x2, 0x46b, 0x46e, 0x3, 0x2, 0x2, 0x2, 0x46c, 0x46a, - 0x3, 0x2, 0x2, 0x2, 0x46c, 0x46d, 0x3, 0x2, 0x2, 0x2, 0x46d, 0x46f, - 0x3, 0x2, 0x2, 0x2, 0x46e, 0x46c, 0x3, 0x2, 0x2, 0x2, 0x46f, 0x470, - 0x7, 0x2, 0x2, 0x3, 0x470, 0xd1, 0x3, 0x2, 0x2, 0x2, 0x471, 0x473, - 0x5, 0x8e, 0x48, 0x2, 0x472, 0x471, 0x3, 0x2, 0x2, 0x2, 0x473, 0x476, - 0x3, 0x2, 0x2, 0x2, 0x474, 0x472, 0x3, 0x2, 0x2, 0x2, 0x474, 0x475, - 0x3, 0x2, 0x2, 0x2, 0x475, 0x477, 0x3, 0x2, 0x2, 0x2, 0x476, 0x474, - 0x3, 0x2, 0x2, 0x2, 0x477, 0x478, 0x7, 0x2, 0x2, 0x3, 0x478, 0xd3, - 0x3, 0x2, 0x2, 0x2, 0x479, 0x47a, 0x9, 0x13, 0x2, 0x2, 0x47a, 0xd5, - 0x3, 0x2, 0x2, 0x2, 0x47b, 0x47c, 0x9, 0x14, 0x2, 0x2, 0x47c, 0xd7, - 0x3, 0x2, 0x2, 0x2, 0x47d, 0x47e, 0x9, 0x15, 0x2, 0x2, 0x47e, 0xd9, - 0x3, 0x2, 0x2, 0x2, 0x47f, 0x480, 0x9, 0x16, 0x2, 0x2, 0x480, 0xdb, - 0x3, 0x2, 0x2, 0x2, 0x481, 0x482, 0x9, 0x17, 0x2, 0x2, 0x482, 0xdd, - 0x3, 0x2, 0x2, 0x2, 0x483, 0x484, 0x9, 0x18, 0x2, 0x2, 0x484, 0xdf, - 0x3, 0x2, 0x2, 0x2, 0x7c, 0xe5, 0xe7, 0xf2, 0x106, 0x110, 0x11b, - 0x121, 0x131, 0x139, 0x141, 0x147, 0x150, 0x155, 0x15b, 0x160, 0x169, - 0x171, 0x17a, 0x180, 0x190, 0x19d, 0x1a4, 0x1a6, 0x1b0, 0x1b6, 0x1bd, - 0x1c6, 0x1c9, 0x1d0, 0x1d2, 0x1d9, 0x1db, 0x1dd, 0x1e0, 0x1e4, 0x1ea, - 0x1f1, 0x1f6, 0x1fc, 0x203, 0x206, 0x20d, 0x210, 0x217, 0x21a, 0x21c, - 0x220, 0x227, 0x230, 0x23a, 0x23f, 0x242, 0x245, 0x24b, 0x252, 0x254, - 0x25f, 0x26a, 0x273, 0x27b, 0x283, 0x28b, 0x292, 0x29d, 0x2af, 0x2b6, - 0x2bd, 0x2c4, 0x2cc, 0x2d8, 0x2e1, 0x2ed, 0x2f6, 0x302, 0x30a, 0x314, - 0x316, 0x321, 0x329, 0x346, 0x348, 0x34f, 0x35a, 0x365, 0x36e, 0x376, - 0x37f, 0x381, 0x387, 0x38e, 0x394, 0x3a0, 0x3a2, 0x3ad, 0x3b5, 0x3c3, - 0x3c7, 0x3ce, 0x3d5, 0x3db, 0x3df, 0x3e2, 0x3e5, 0x3e9, 0x3ef, 0x3f6, - 0x3f9, 0x3fd, 0x40c, 0x414, 0x41c, 0x424, 0x42c, 0x434, 0x43c, 0x444, - 0x44c, 0x454, 0x45c, 0x464, 0x46c, 0x474, - }; - - _serializedATN.insert(_serializedATN.end(), serializedATNSegment0, - serializedATNSegment0 + sizeof(serializedATNSegment0) / sizeof(serializedATNSegment0[0])); - - - atn::ATNDeserializer deserializer; - _atn = deserializer.deserialize(_serializedATN); - - size_t count = _atn.getNumberOfDecisions(); - _decisionToDFA.reserve(count); - for (size_t i = 0; i < count; i++) { - _decisionToDFA.emplace_back(_atn.getDecisionState(i), i); - } +void FeatParser::initialize() { +#if ANTLR4_USE_THREAD_LOCAL_CACHE + featparserParserInitialize(); +#else + ::antlr4::internal::call_once(featparserParserOnceFlag, featparserParserInitialize); +#endif } - -FeatParser::Initializer FeatParser::_init; diff --git a/c/makeotf/lib/hotconv/FeatParser.h b/c/makeotf/lib/hotconv/FeatParser.h index 540d3c680..faffc9439 100644 --- a/c/makeotf/lib/hotconv/FeatParser.h +++ b/c/makeotf/lib/hotconv/FeatParser.h @@ -1,5 +1,5 @@ -// Generated from FeatParser.g4 by ANTLR 4.9.3 +// Generated from FeatParser.g4 by ANTLR 4.13.2 #pragma once @@ -80,13 +80,20 @@ class FeatParser : public antlr4::Parser { }; explicit FeatParser(antlr4::TokenStream *input); - ~FeatParser(); - virtual std::string getGrammarFileName() const override; - virtual const antlr4::atn::ATN& getATN() const override { return _atn; }; - virtual const std::vector& getTokenNames() const override { return _tokenNames; }; // deprecated: use vocabulary instead. - virtual const std::vector& getRuleNames() const override; - virtual antlr4::dfa::Vocabulary& getVocabulary() const override; + FeatParser(antlr4::TokenStream *input, const antlr4::atn::ParserATNSimulatorOptions &options); + + ~FeatParser() override; + + std::string getGrammarFileName() const override; + + const antlr4::atn::ATN& getATN() const override; + + const std::vector& getRuleNames() const override; + + const antlr4::dfa::Vocabulary& getVocabulary() const override; + + antlr4::atn::SerializedATNView getSerializedATN() const override; class FileContext; @@ -218,7 +225,7 @@ class FeatParser : public antlr4::Parser { LookupBlockTopLevelContext* lookupBlockTopLevel(size_t i); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -237,7 +244,7 @@ class FeatParser : public antlr4::Parser { ValueRecordDefContext *valueRecordDef(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -253,7 +260,7 @@ class FeatParser : public antlr4::Parser { antlr4::tree::TerminalNode *I_LPAREN(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -268,7 +275,7 @@ class FeatParser : public antlr4::Parser { GlyphClassContext *glyphClass(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -285,7 +292,7 @@ class FeatParser : public antlr4::Parser { TagContext* tag(size_t i); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -302,7 +309,7 @@ class FeatParser : public antlr4::Parser { GlyphClassContext *glyphClass(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -323,7 +330,7 @@ class FeatParser : public antlr4::Parser { antlr4::tree::TerminalNode *CONTOURPOINT(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -338,7 +345,7 @@ class FeatParser : public antlr4::Parser { LabelContext *label(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -361,7 +368,7 @@ class FeatParser : public antlr4::Parser { FeatureStatementContext* featureStatement(size_t i); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -383,7 +390,7 @@ class FeatParser : public antlr4::Parser { Table_vmtxContext *table_vmtx(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -401,7 +408,7 @@ class FeatParser : public antlr4::Parser { antlr4::tree::TerminalNode* A_LINE(size_t i); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -424,7 +431,7 @@ class FeatParser : public antlr4::Parser { StatementContext* statement(size_t i); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -439,7 +446,7 @@ class FeatParser : public antlr4::Parser { CvParameterBlockContext *cvParameterBlock(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -462,7 +469,7 @@ class FeatParser : public antlr4::Parser { StatementContext* statement(size_t i); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -480,7 +487,7 @@ class FeatParser : public antlr4::Parser { CvParameterStatementContext* cvParameterStatement(size_t i); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -495,7 +502,7 @@ class FeatParser : public antlr4::Parser { IncludeContext *include(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -517,7 +524,7 @@ class FeatParser : public antlr4::Parser { GenNumContext *genNum(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -544,7 +551,7 @@ class FeatParser : public antlr4::Parser { IncludeContext *include(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -558,7 +565,7 @@ class FeatParser : public antlr4::Parser { TagContext *tag(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -572,7 +579,7 @@ class FeatParser : public antlr4::Parser { TagContext *tag(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -590,7 +597,7 @@ class FeatParser : public antlr4::Parser { antlr4::tree::TerminalNode *INCLUDE_dflt(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -606,7 +613,7 @@ class FeatParser : public antlr4::Parser { LookupflagElementContext* lookupflagElement(size_t i); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -625,7 +632,7 @@ class FeatParser : public antlr4::Parser { antlr4::tree::TerminalNode *USE_MARK_FILTERING_SET(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -645,7 +652,7 @@ class FeatParser : public antlr4::Parser { antlr4::tree::TerminalNode* COMMA(size_t i); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -669,7 +676,7 @@ class FeatParser : public antlr4::Parser { antlr4::tree::TerminalNode *KNULL(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -706,7 +713,7 @@ class FeatParser : public antlr4::Parser { LigatureMarkElementContext* ligatureMarkElement(size_t i); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -720,7 +727,7 @@ class FeatParser : public antlr4::Parser { ValueRecordContext *valueRecord(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -737,7 +744,7 @@ class FeatParser : public antlr4::Parser { ValueLiteralContext *valueLiteral(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -753,7 +760,7 @@ class FeatParser : public antlr4::Parser { antlr4::tree::TerminalNode *ENDVALUE(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -768,7 +775,7 @@ class FeatParser : public antlr4::Parser { AnchorContext* anchor(size_t i); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -784,7 +791,7 @@ class FeatParser : public antlr4::Parser { antlr4::tree::TerminalNode *MARKER(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -801,7 +808,7 @@ class FeatParser : public antlr4::Parser { antlr4::tree::TerminalNode *MARKER(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -816,7 +823,7 @@ class FeatParser : public antlr4::Parser { FixedNumContext* fixedNum(size_t i); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -834,7 +841,7 @@ class FeatParser : public antlr4::Parser { GenNumContext* genNum(size_t i); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -851,7 +858,7 @@ class FeatParser : public antlr4::Parser { NameEntryStatementContext* nameEntryStatement(size_t i); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -864,7 +871,7 @@ class FeatParser : public antlr4::Parser { antlr4::tree::TerminalNode *SUBTABLE(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -883,7 +890,7 @@ class FeatParser : public antlr4::Parser { BaseStatementContext* baseStatement(size_t i); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -899,7 +906,7 @@ class FeatParser : public antlr4::Parser { IncludeContext *include(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -915,7 +922,7 @@ class FeatParser : public antlr4::Parser { TagContext* tag(size_t i); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -933,7 +940,7 @@ class FeatParser : public antlr4::Parser { antlr4::tree::TerminalNode* COMMA(size_t i); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -951,7 +958,7 @@ class FeatParser : public antlr4::Parser { antlr4::tree::TerminalNode* NUM(size_t i); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -970,7 +977,7 @@ class FeatParser : public antlr4::Parser { GdefStatementContext* gdefStatement(size_t i); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -988,7 +995,7 @@ class FeatParser : public antlr4::Parser { IncludeContext *include(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -1005,7 +1012,7 @@ class FeatParser : public antlr4::Parser { antlr4::tree::TerminalNode* COMMA(size_t i); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -1021,7 +1028,7 @@ class FeatParser : public antlr4::Parser { antlr4::tree::TerminalNode* NUM(size_t i); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -1037,7 +1044,7 @@ class FeatParser : public antlr4::Parser { antlr4::tree::TerminalNode* NUM(size_t i); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -1053,7 +1060,7 @@ class FeatParser : public antlr4::Parser { antlr4::tree::TerminalNode* NUM(size_t i); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -1072,7 +1079,7 @@ class FeatParser : public antlr4::Parser { HeadStatementContext* headStatement(size_t i); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -1087,7 +1094,7 @@ class FeatParser : public antlr4::Parser { IncludeContext *include(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -1101,7 +1108,7 @@ class FeatParser : public antlr4::Parser { antlr4::tree::TerminalNode *POINTNUM(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -1120,7 +1127,7 @@ class FeatParser : public antlr4::Parser { HheaStatementContext* hheaStatement(size_t i); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -1135,7 +1142,7 @@ class FeatParser : public antlr4::Parser { IncludeContext *include(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -1152,7 +1159,7 @@ class FeatParser : public antlr4::Parser { antlr4::tree::TerminalNode *LINE_GAP(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -1171,7 +1178,7 @@ class FeatParser : public antlr4::Parser { VheaStatementContext* vheaStatement(size_t i); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -1186,7 +1193,7 @@ class FeatParser : public antlr4::Parser { IncludeContext *include(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -1202,7 +1209,7 @@ class FeatParser : public antlr4::Parser { antlr4::tree::TerminalNode *VERT_TYPO_LINE_GAP(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -1221,7 +1228,7 @@ class FeatParser : public antlr4::Parser { NameStatementContext* nameStatement(size_t i); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -1236,7 +1243,7 @@ class FeatParser : public antlr4::Parser { IncludeContext *include(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -1258,7 +1265,7 @@ class FeatParser : public antlr4::Parser { GenNumContext* genNum(size_t i); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -1277,7 +1284,7 @@ class FeatParser : public antlr4::Parser { Os_2StatementContext* os_2Statement(size_t i); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -1292,7 +1299,7 @@ class FeatParser : public antlr4::Parser { IncludeContext *include(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -1331,7 +1338,7 @@ class FeatParser : public antlr4::Parser { antlr4::tree::TerminalNode *CODE_PAGE_RANGE(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -1350,7 +1357,7 @@ class FeatParser : public antlr4::Parser { StatStatementContext* statStatement(size_t i); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -1368,7 +1375,7 @@ class FeatParser : public antlr4::Parser { IncludeContext *include(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -1387,7 +1394,7 @@ class FeatParser : public antlr4::Parser { NameEntryStatementContext* nameEntryStatement(size_t i); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -1404,7 +1411,7 @@ class FeatParser : public antlr4::Parser { AxisValueStatementContext* axisValueStatement(size_t i); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -1421,7 +1428,7 @@ class FeatParser : public antlr4::Parser { IncludeContext *include(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -1437,7 +1444,7 @@ class FeatParser : public antlr4::Parser { FixedNumContext* fixedNum(size_t i); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -1454,7 +1461,7 @@ class FeatParser : public antlr4::Parser { antlr4::tree::TerminalNode* AXIS_EAVN(size_t i); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -1471,7 +1478,7 @@ class FeatParser : public antlr4::Parser { NameEntryStatementContext* nameEntryStatement(size_t i); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -1486,7 +1493,7 @@ class FeatParser : public antlr4::Parser { IncludeContext *include(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -1500,7 +1507,7 @@ class FeatParser : public antlr4::Parser { GenNumContext *genNum(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -1518,7 +1525,7 @@ class FeatParser : public antlr4::Parser { GenNumContext* genNum(size_t i); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -1537,7 +1544,7 @@ class FeatParser : public antlr4::Parser { VmtxStatementContext* vmtxStatement(size_t i); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -1552,7 +1559,7 @@ class FeatParser : public antlr4::Parser { IncludeContext *include(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -1568,7 +1575,7 @@ class FeatParser : public antlr4::Parser { antlr4::tree::TerminalNode *VERT_ADVANCE_Y(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -1592,7 +1599,7 @@ class FeatParser : public antlr4::Parser { antlr4::tree::TerminalNode *CONTOURPOINT(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -1606,7 +1613,7 @@ class FeatParser : public antlr4::Parser { LookupPatternElementContext* lookupPatternElement(size_t i); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -1623,7 +1630,7 @@ class FeatParser : public antlr4::Parser { LabelContext* label(size_t i); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -1637,7 +1644,7 @@ class FeatParser : public antlr4::Parser { PatternElementContext* patternElement(size_t i); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -1652,7 +1659,7 @@ class FeatParser : public antlr4::Parser { antlr4::tree::TerminalNode *MARKER(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -1665,7 +1672,7 @@ class FeatParser : public antlr4::Parser { GlyphClassContext *glyphClass(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -1679,7 +1686,7 @@ class FeatParser : public antlr4::Parser { GcLiteralContext *gcLiteral(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -1695,7 +1702,7 @@ class FeatParser : public antlr4::Parser { GcLiteralElementContext* gcLiteralElement(size_t i); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -1713,7 +1720,7 @@ class FeatParser : public antlr4::Parser { antlr4::tree::TerminalNode *GCLASS(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -1727,7 +1734,7 @@ class FeatParser : public antlr4::Parser { antlr4::tree::TerminalNode *CID(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -1743,7 +1750,7 @@ class FeatParser : public antlr4::Parser { antlr4::tree::TerminalNode *NOTDEF(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -1757,7 +1764,7 @@ class FeatParser : public antlr4::Parser { antlr4::tree::TerminalNode *MARK(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -1773,7 +1780,7 @@ class FeatParser : public antlr4::Parser { antlr4::tree::TerminalNode *MARK(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -1787,7 +1794,7 @@ class FeatParser : public antlr4::Parser { antlr4::tree::TerminalNode *NUM(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -1802,7 +1809,7 @@ class FeatParser : public antlr4::Parser { antlr4::tree::TerminalNode *NUMEXT(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -1817,7 +1824,7 @@ class FeatParser : public antlr4::Parser { FeatureStatementContext* featureStatement(size_t i); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -1832,7 +1839,7 @@ class FeatParser : public antlr4::Parser { StatementContext* statement(size_t i); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -1847,7 +1854,7 @@ class FeatParser : public antlr4::Parser { CvParameterStatementContext* cvParameterStatement(size_t i); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -1862,7 +1869,7 @@ class FeatParser : public antlr4::Parser { BaseStatementContext* baseStatement(size_t i); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -1877,7 +1884,7 @@ class FeatParser : public antlr4::Parser { HeadStatementContext* headStatement(size_t i); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -1892,7 +1899,7 @@ class FeatParser : public antlr4::Parser { HheaStatementContext* hheaStatement(size_t i); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -1907,7 +1914,7 @@ class FeatParser : public antlr4::Parser { VheaStatementContext* vheaStatement(size_t i); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -1922,7 +1929,7 @@ class FeatParser : public antlr4::Parser { GdefStatementContext* gdefStatement(size_t i); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -1937,7 +1944,7 @@ class FeatParser : public antlr4::Parser { NameStatementContext* nameStatement(size_t i); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -1952,7 +1959,7 @@ class FeatParser : public antlr4::Parser { VmtxStatementContext* vmtxStatement(size_t i); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -1967,7 +1974,7 @@ class FeatParser : public antlr4::Parser { Os_2StatementContext* os_2Statement(size_t i); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -1982,7 +1989,7 @@ class FeatParser : public antlr4::Parser { StatStatementContext* statStatement(size_t i); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -1997,7 +2004,7 @@ class FeatParser : public antlr4::Parser { AxisValueStatementContext* axisValueStatement(size_t i); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -2012,7 +2019,7 @@ class FeatParser : public antlr4::Parser { NameEntryStatementContext* nameEntryStatement(size_t i); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -2026,7 +2033,7 @@ class FeatParser : public antlr4::Parser { antlr4::tree::TerminalNode *SUBSTITUTE_v(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -2040,7 +2047,7 @@ class FeatParser : public antlr4::Parser { antlr4::tree::TerminalNode *REVERSE_v(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -2054,7 +2061,7 @@ class FeatParser : public antlr4::Parser { antlr4::tree::TerminalNode *ANON_v(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -2068,7 +2075,7 @@ class FeatParser : public antlr4::Parser { antlr4::tree::TerminalNode *ENUMERATE_v(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -2082,7 +2089,7 @@ class FeatParser : public antlr4::Parser { antlr4::tree::TerminalNode *POSITION_v(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -2096,29 +2103,18 @@ class FeatParser : public antlr4::Parser { antlr4::tree::TerminalNode *MARKLIG_v(); - virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; MarkligtokContext* markligtok(); -private: - static std::vector _decisionToDFA; - static antlr4::atn::PredictionContextCache _sharedContextCache; - static std::vector _ruleNames; - static std::vector _tokenNames; - - static std::vector _literalNames; - static std::vector _symbolicNames; - static antlr4::dfa::Vocabulary _vocabulary; - static antlr4::atn::ATN _atn; - static std::vector _serializedATN; - + // By default the static state used to implement the parser is lazily initialized during the first + // call to the constructor. You can call this function if you wish to initialize the static state + // ahead of time. + static void initialize(); - struct Initializer { - Initializer(); - }; - static Initializer _init; +private: }; diff --git a/c/makeotf/lib/hotconv/FeatParser.interp b/c/makeotf/lib/hotconv/FeatParser.interp index 963ed375a..7d4732ac8 100644 --- a/c/makeotf/lib/hotconv/FeatParser.interp +++ b/c/makeotf/lib/hotconv/FeatParser.interp @@ -409,4 +409,4 @@ markligtok atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 147, 1158, 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, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 7, 2, 230, 10, 2, 12, 2, 14, 2, 233, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 243, 10, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 5, 7, 263, 10, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 273, 10, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 5, 10, 284, 10, 10, 3, 10, 3, 10, 6, 10, 288, 10, 10, 13, 10, 14, 10, 289, 3, 10, 3, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 5, 11, 306, 10, 11, 3, 12, 3, 12, 3, 12, 3, 12, 7, 12, 312, 10, 12, 12, 12, 14, 12, 315, 11, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 5, 13, 322, 10, 13, 3, 13, 3, 13, 6, 13, 326, 10, 13, 13, 13, 14, 13, 327, 3, 13, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 5, 14, 337, 10, 14, 3, 15, 3, 15, 3, 15, 5, 15, 342, 10, 15, 3, 15, 3, 15, 6, 15, 346, 10, 15, 13, 15, 14, 15, 347, 3, 15, 3, 15, 3, 15, 5, 15, 353, 10, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 7, 16, 360, 10, 16, 12, 16, 14, 16, 363, 11, 16, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 5, 17, 370, 10, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 6, 18, 377, 10, 18, 13, 18, 14, 18, 378, 3, 18, 3, 18, 3, 18, 3, 18, 5, 18, 385, 10, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 5, 19, 401, 10, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 5, 22, 414, 10, 22, 3, 23, 3, 23, 3, 23, 6, 23, 419, 10, 23, 13, 23, 14, 23, 420, 5, 23, 423, 10, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 5, 24, 433, 10, 24, 3, 25, 3, 25, 3, 25, 3, 25, 5, 25, 439, 10, 25, 3, 25, 3, 25, 3, 25, 7, 25, 444, 10, 25, 12, 25, 14, 25, 447, 11, 25, 3, 26, 3, 26, 3, 26, 3, 26, 7, 26, 453, 10, 26, 12, 26, 14, 26, 456, 11, 26, 5, 26, 458, 10, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 5, 26, 465, 10, 26, 5, 26, 467, 10, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 5, 26, 474, 10, 26, 5, 26, 476, 10, 26, 5, 26, 478, 10, 26, 3, 27, 5, 27, 481, 10, 27, 3, 27, 3, 27, 5, 27, 485, 10, 27, 3, 27, 3, 27, 7, 27, 489, 10, 27, 12, 27, 14, 27, 492, 11, 27, 3, 27, 3, 27, 6, 27, 496, 10, 27, 13, 27, 14, 27, 497, 3, 27, 7, 27, 501, 10, 27, 12, 27, 14, 27, 504, 11, 27, 3, 27, 3, 27, 3, 27, 5, 27, 509, 10, 27, 3, 27, 3, 27, 3, 27, 6, 27, 514, 10, 27, 13, 27, 14, 27, 515, 3, 27, 5, 27, 519, 10, 27, 3, 27, 3, 27, 3, 27, 6, 27, 524, 10, 27, 13, 27, 14, 27, 525, 3, 27, 5, 27, 529, 10, 27, 3, 27, 3, 27, 3, 27, 6, 27, 534, 10, 27, 13, 27, 14, 27, 535, 3, 27, 5, 27, 539, 10, 27, 5, 27, 541, 10, 27, 3, 28, 3, 28, 5, 28, 545, 10, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 5, 29, 552, 10, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 5, 30, 561, 10, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 5, 32, 571, 10, 32, 3, 33, 3, 33, 3, 33, 5, 33, 576, 10, 33, 3, 33, 5, 33, 579, 10, 33, 3, 33, 5, 33, 582, 10, 33, 3, 34, 3, 34, 6, 34, 586, 10, 34, 13, 34, 14, 34, 587, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 5, 35, 595, 10, 35, 5, 35, 597, 10, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 6, 36, 606, 10, 36, 13, 36, 14, 36, 607, 3, 36, 3, 36, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 6, 38, 617, 10, 38, 13, 38, 14, 38, 618, 3, 38, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 5, 39, 628, 10, 39, 3, 39, 3, 39, 3, 40, 3, 40, 6, 40, 634, 10, 40, 13, 40, 14, 40, 635, 3, 41, 3, 41, 3, 41, 3, 41, 7, 41, 642, 10, 41, 12, 41, 14, 41, 645, 11, 41, 3, 42, 3, 42, 3, 42, 6, 42, 650, 10, 42, 13, 42, 14, 42, 651, 3, 43, 3, 43, 3, 43, 6, 43, 657, 10, 43, 13, 43, 14, 43, 658, 3, 43, 3, 43, 3, 43, 3, 43, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 5, 44, 670, 10, 44, 3, 44, 3, 44, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 6, 46, 686, 10, 46, 13, 46, 14, 46, 687, 3, 47, 3, 47, 3, 47, 6, 47, 693, 10, 47, 13, 47, 14, 47, 694, 3, 48, 3, 48, 3, 48, 6, 48, 700, 10, 48, 13, 48, 14, 48, 701, 3, 49, 3, 49, 3, 49, 6, 49, 707, 10, 49, 13, 49, 14, 49, 708, 3, 49, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 5, 50, 717, 10, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 7, 52, 727, 10, 52, 12, 52, 14, 52, 730, 11, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 5, 53, 738, 10, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 7, 55, 748, 10, 55, 12, 55, 14, 55, 751, 11, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 5, 56, 759, 10, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 6, 58, 769, 10, 58, 13, 58, 14, 58, 770, 3, 58, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 5, 59, 779, 10, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 5, 60, 789, 10, 60, 5, 60, 791, 10, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 6, 61, 800, 10, 61, 13, 61, 14, 61, 801, 3, 61, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 5, 62, 810, 10, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 6, 63, 837, 10, 63, 13, 63, 14, 63, 838, 5, 63, 841, 10, 63, 3, 64, 3, 64, 3, 64, 6, 64, 846, 10, 64, 13, 64, 14, 64, 847, 3, 64, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 5, 65, 859, 10, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 6, 66, 868, 10, 66, 13, 66, 14, 66, 869, 3, 66, 3, 66, 3, 67, 3, 67, 3, 67, 6, 67, 877, 10, 67, 13, 67, 14, 67, 878, 3, 67, 3, 67, 3, 68, 3, 68, 3, 68, 3, 68, 5, 68, 887, 10, 68, 3, 68, 3, 68, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 5, 69, 896, 10, 69, 5, 69, 898, 10, 69, 3, 70, 3, 70, 6, 70, 902, 10, 70, 13, 70, 14, 70, 903, 3, 71, 3, 71, 3, 71, 6, 71, 909, 10, 71, 13, 71, 14, 71, 910, 3, 71, 3, 71, 3, 72, 3, 72, 5, 72, 917, 10, 72, 3, 72, 3, 72, 3, 73, 3, 73, 3, 73, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 5, 74, 929, 10, 74, 5, 74, 931, 10, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 75, 3, 75, 3, 75, 6, 75, 940, 10, 75, 13, 75, 14, 75, 941, 3, 75, 3, 75, 3, 75, 3, 75, 3, 76, 3, 76, 5, 76, 950, 10, 76, 3, 76, 3, 76, 3, 77, 3, 77, 3, 77, 3, 77, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 5, 78, 964, 10, 78, 3, 78, 3, 78, 5, 78, 968, 10, 78, 3, 78, 3, 78, 3, 79, 6, 79, 973, 10, 79, 13, 79, 14, 79, 974, 3, 80, 3, 80, 3, 80, 7, 80, 980, 10, 80, 12, 80, 14, 80, 983, 11, 80, 3, 81, 6, 81, 986, 10, 81, 13, 81, 14, 81, 987, 3, 82, 3, 82, 5, 82, 992, 10, 82, 3, 82, 5, 82, 995, 10, 82, 3, 83, 5, 83, 998, 10, 83, 3, 84, 3, 84, 5, 84, 1002, 10, 84, 3, 85, 3, 85, 6, 85, 1006, 10, 85, 13, 85, 14, 85, 1007, 3, 85, 3, 85, 3, 86, 3, 86, 3, 86, 5, 86, 1015, 10, 86, 3, 86, 5, 86, 1018, 10, 86, 3, 87, 3, 87, 5, 87, 1022, 10, 87, 3, 88, 3, 88, 3, 89, 3, 89, 3, 90, 3, 90, 3, 91, 3, 91, 3, 92, 3, 92, 3, 93, 7, 93, 1035, 10, 93, 12, 93, 14, 93, 1038, 11, 93, 3, 93, 3, 93, 3, 94, 7, 94, 1043, 10, 94, 12, 94, 14, 94, 1046, 11, 94, 3, 94, 3, 94, 3, 95, 7, 95, 1051, 10, 95, 12, 95, 14, 95, 1054, 11, 95, 3, 95, 3, 95, 3, 96, 7, 96, 1059, 10, 96, 12, 96, 14, 96, 1062, 11, 96, 3, 96, 3, 96, 3, 97, 7, 97, 1067, 10, 97, 12, 97, 14, 97, 1070, 11, 97, 3, 97, 3, 97, 3, 98, 7, 98, 1075, 10, 98, 12, 98, 14, 98, 1078, 11, 98, 3, 98, 3, 98, 3, 99, 7, 99, 1083, 10, 99, 12, 99, 14, 99, 1086, 11, 99, 3, 99, 3, 99, 3, 100, 7, 100, 1091, 10, 100, 12, 100, 14, 100, 1094, 11, 100, 3, 100, 3, 100, 3, 101, 7, 101, 1099, 10, 101, 12, 101, 14, 101, 1102, 11, 101, 3, 101, 3, 101, 3, 102, 7, 102, 1107, 10, 102, 12, 102, 14, 102, 1110, 11, 102, 3, 102, 3, 102, 3, 103, 7, 103, 1115, 10, 103, 12, 103, 14, 103, 1118, 11, 103, 3, 103, 3, 103, 3, 104, 7, 104, 1123, 10, 104, 12, 104, 14, 104, 1126, 11, 104, 3, 104, 3, 104, 3, 105, 7, 105, 1131, 10, 105, 12, 105, 14, 105, 1134, 11, 105, 3, 105, 3, 105, 3, 106, 7, 106, 1139, 10, 106, 12, 106, 14, 106, 1142, 11, 106, 3, 106, 3, 106, 3, 107, 3, 107, 3, 108, 3, 108, 3, 109, 3, 109, 3, 110, 3, 110, 3, 111, 3, 111, 3, 112, 3, 112, 3, 112, 2, 2, 113, 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, 204, 206, 208, 210, 212, 214, 216, 218, 220, 222, 2, 25, 3, 2, 45, 48, 3, 2, 23, 26, 3, 2, 38, 39, 3, 2, 64, 65, 3, 2, 66, 67, 3, 2, 76, 79, 3, 2, 111, 113, 3, 2, 88, 94, 4, 2, 83, 86, 95, 96, 3, 2, 98, 99, 3, 2, 108, 109, 3, 2, 115, 116, 4, 2, 16, 16, 129, 131, 4, 2, 55, 55, 130, 130, 5, 2, 55, 55, 130, 131, 136, 136, 4, 2, 132, 132, 135, 135, 3, 2, 133, 135, 3, 2, 34, 35, 3, 2, 36, 37, 3, 2, 3, 4, 3, 2, 30, 31, 3, 2, 40, 41, 3, 2, 59, 60, 2, 1218, 2, 231, 3, 2, 2, 2, 4, 242, 3, 2, 2, 2, 6, 246, 3, 2, 2, 2, 8, 251, 3, 2, 2, 2, 10, 255, 3, 2, 2, 2, 12, 259, 3, 2, 2, 2, 14, 267, 3, 2, 2, 2, 16, 276, 3, 2, 2, 2, 18, 280, 3, 2, 2, 2, 20, 295, 3, 2, 2, 2, 22, 307, 3, 2, 2, 2, 24, 318, 3, 2, 2, 2, 26, 336, 3, 2, 2, 2, 28, 338, 3, 2, 2, 2, 30, 356, 3, 2, 2, 2, 32, 369, 3, 2, 2, 2, 34, 384, 3, 2, 2, 2, 36, 400, 3, 2, 2, 2, 38, 404, 3, 2, 2, 2, 40, 407, 3, 2, 2, 2, 42, 410, 3, 2, 2, 2, 44, 415, 3, 2, 2, 2, 46, 432, 3, 2, 2, 2, 48, 434, 3, 2, 2, 2, 50, 457, 3, 2, 2, 2, 52, 480, 3, 2, 2, 2, 54, 542, 3, 2, 2, 2, 56, 551, 3, 2, 2, 2, 58, 560, 3, 2, 2, 2, 60, 562, 3, 2, 2, 2, 62, 566, 3, 2, 2, 2, 64, 572, 3, 2, 2, 2, 66, 583, 3, 2, 2, 2, 68, 589, 3, 2, 2, 2, 70, 602, 3, 2, 2, 2, 72, 611, 3, 2, 2, 2, 74, 613, 3, 2, 2, 2, 76, 627, 3, 2, 2, 2, 78, 631, 3, 2, 2, 2, 80, 637, 3, 2, 2, 2, 82, 646, 3, 2, 2, 2, 84, 653, 3, 2, 2, 2, 86, 669, 3, 2, 2, 2, 88, 673, 3, 2, 2, 2, 90, 682, 3, 2, 2, 2, 92, 689, 3, 2, 2, 2, 94, 696, 3, 2, 2, 2, 96, 703, 3, 2, 2, 2, 98, 716, 3, 2, 2, 2, 100, 720, 3, 2, 2, 2, 102, 723, 3, 2, 2, 2, 104, 737, 3, 2, 2, 2, 106, 741, 3, 2, 2, 2, 108, 744, 3, 2, 2, 2, 110, 758, 3, 2, 2, 2, 112, 762, 3, 2, 2, 2, 114, 765, 3, 2, 2, 2, 116, 778, 3, 2, 2, 2, 118, 782, 3, 2, 2, 2, 120, 796, 3, 2, 2, 2, 122, 809, 3, 2, 2, 2, 124, 840, 3, 2, 2, 2, 126, 842, 3, 2, 2, 2, 128, 858, 3, 2, 2, 2, 130, 862, 3, 2, 2, 2, 132, 873, 3, 2, 2, 2, 134, 886, 3, 2, 2, 2, 136, 890, 3, 2, 2, 2, 138, 899, 3, 2, 2, 2, 140, 905, 3, 2, 2, 2, 142, 916, 3, 2, 2, 2, 144, 920, 3, 2, 2, 2, 146, 923, 3, 2, 2, 2, 148, 936, 3, 2, 2, 2, 150, 949, 3, 2, 2, 2, 152, 953, 3, 2, 2, 2, 154, 957, 3, 2, 2, 2, 156, 972, 3, 2, 2, 2, 158, 976, 3, 2, 2, 2, 160, 985, 3, 2, 2, 2, 162, 991, 3, 2, 2, 2, 164, 997, 3, 2, 2, 2, 166, 1001, 3, 2, 2, 2, 168, 1003, 3, 2, 2, 2, 170, 1017, 3, 2, 2, 2, 172, 1021, 3, 2, 2, 2, 174, 1023, 3, 2, 2, 2, 176, 1025, 3, 2, 2, 2, 178, 1027, 3, 2, 2, 2, 180, 1029, 3, 2, 2, 2, 182, 1031, 3, 2, 2, 2, 184, 1036, 3, 2, 2, 2, 186, 1044, 3, 2, 2, 2, 188, 1052, 3, 2, 2, 2, 190, 1060, 3, 2, 2, 2, 192, 1068, 3, 2, 2, 2, 194, 1076, 3, 2, 2, 2, 196, 1084, 3, 2, 2, 2, 198, 1092, 3, 2, 2, 2, 200, 1100, 3, 2, 2, 2, 202, 1108, 3, 2, 2, 2, 204, 1116, 3, 2, 2, 2, 206, 1124, 3, 2, 2, 2, 208, 1132, 3, 2, 2, 2, 210, 1140, 3, 2, 2, 2, 212, 1145, 3, 2, 2, 2, 214, 1147, 3, 2, 2, 2, 216, 1149, 3, 2, 2, 2, 218, 1151, 3, 2, 2, 2, 220, 1153, 3, 2, 2, 2, 222, 1155, 3, 2, 2, 2, 224, 230, 5, 4, 3, 2, 225, 230, 5, 18, 10, 2, 226, 230, 5, 20, 11, 2, 227, 230, 5, 22, 12, 2, 228, 230, 5, 24, 13, 2, 229, 224, 3, 2, 2, 2, 229, 225, 3, 2, 2, 2, 229, 226, 3, 2, 2, 2, 229, 227, 3, 2, 2, 2, 229, 228, 3, 2, 2, 2, 230, 233, 3, 2, 2, 2, 231, 229, 3, 2, 2, 2, 231, 232, 3, 2, 2, 2, 232, 234, 3, 2, 2, 2, 233, 231, 3, 2, 2, 2, 234, 235, 7, 2, 2, 3, 235, 3, 3, 2, 2, 2, 236, 243, 5, 6, 4, 2, 237, 243, 5, 8, 5, 2, 238, 243, 5, 10, 6, 2, 239, 243, 5, 12, 7, 2, 240, 243, 5, 14, 8, 2, 241, 243, 5, 16, 9, 2, 242, 236, 3, 2, 2, 2, 242, 237, 3, 2, 2, 2, 242, 238, 3, 2, 2, 2, 242, 239, 3, 2, 2, 2, 242, 240, 3, 2, 2, 2, 242, 241, 3, 2, 2, 2, 243, 244, 3, 2, 2, 2, 244, 245, 7, 122, 2, 2, 245, 5, 3, 2, 2, 2, 246, 247, 7, 7, 2, 2, 247, 248, 7, 143, 2, 2, 248, 249, 7, 144, 2, 2, 249, 250, 7, 145, 2, 2, 250, 7, 3, 2, 2, 2, 251, 252, 7, 127, 2, 2, 252, 253, 7, 123, 2, 2, 253, 254, 5, 166, 84, 2, 254, 9, 3, 2, 2, 2, 255, 256, 7, 12, 2, 2, 256, 257, 5, 178, 90, 2, 257, 258, 5, 178, 90, 2, 258, 11, 3, 2, 2, 2, 259, 262, 7, 56, 2, 2, 260, 263, 5, 172, 87, 2, 261, 263, 5, 166, 84, 2, 262, 260, 3, 2, 2, 2, 262, 261, 3, 2, 2, 2, 263, 264, 3, 2, 2, 2, 264, 265, 5, 154, 78, 2, 265, 266, 7, 127, 2, 2, 266, 13, 3, 2, 2, 2, 267, 268, 7, 53, 2, 2, 268, 269, 7, 135, 2, 2, 269, 272, 7, 135, 2, 2, 270, 271, 7, 51, 2, 2, 271, 273, 7, 135, 2, 2, 272, 270, 3, 2, 2, 2, 272, 273, 3, 2, 2, 2, 273, 274, 3, 2, 2, 2, 274, 275, 5, 176, 89, 2, 275, 15, 3, 2, 2, 2, 276, 277, 7, 54, 2, 2, 277, 278, 5, 58, 30, 2, 278, 279, 5, 176, 89, 2, 279, 17, 3, 2, 2, 2, 280, 281, 7, 8, 2, 2, 281, 283, 5, 178, 90, 2, 282, 284, 7, 27, 2, 2, 283, 282, 3, 2, 2, 2, 283, 284, 3, 2, 2, 2, 284, 285, 3, 2, 2, 2, 285, 287, 7, 117, 2, 2, 286, 288, 5, 26, 14, 2, 287, 286, 3, 2, 2, 2, 288, 289, 3, 2, 2, 2, 289, 287, 3, 2, 2, 2, 289, 290, 3, 2, 2, 2, 290, 291, 3, 2, 2, 2, 291, 292, 7, 118, 2, 2, 292, 293, 5, 178, 90, 2, 293, 294, 7, 122, 2, 2, 294, 19, 3, 2, 2, 2, 295, 305, 7, 9, 2, 2, 296, 306, 5, 74, 38, 2, 297, 306, 5, 84, 43, 2, 298, 306, 5, 96, 49, 2, 299, 306, 5, 102, 52, 2, 300, 306, 5, 108, 55, 2, 301, 306, 5, 114, 58, 2, 302, 306, 5, 120, 61, 2, 303, 306, 5, 126, 64, 2, 304, 306, 5, 148, 75, 2, 305, 296, 3, 2, 2, 2, 305, 297, 3, 2, 2, 2, 305, 298, 3, 2, 2, 2, 305, 299, 3, 2, 2, 2, 305, 300, 3, 2, 2, 2, 305, 301, 3, 2, 2, 2, 305, 302, 3, 2, 2, 2, 305, 303, 3, 2, 2, 2, 305, 304, 3, 2, 2, 2, 306, 21, 3, 2, 2, 2, 307, 308, 5, 216, 109, 2, 308, 309, 7, 138, 2, 2, 309, 313, 7, 139, 2, 2, 310, 312, 7, 141, 2, 2, 311, 310, 3, 2, 2, 2, 312, 315, 3, 2, 2, 2, 313, 311, 3, 2, 2, 2, 313, 314, 3, 2, 2, 2, 314, 316, 3, 2, 2, 2, 315, 313, 3, 2, 2, 2, 316, 317, 7, 140, 2, 2, 317, 23, 3, 2, 2, 2, 318, 319, 7, 14, 2, 2, 319, 321, 5, 176, 89, 2, 320, 322, 7, 27, 2, 2, 321, 320, 3, 2, 2, 2, 321, 322, 3, 2, 2, 2, 322, 323, 3, 2, 2, 2, 323, 325, 7, 117, 2, 2, 324, 326, 5, 36, 19, 2, 325, 324, 3, 2, 2, 2, 326, 327, 3, 2, 2, 2, 327, 325, 3, 2, 2, 2, 327, 328, 3, 2, 2, 2, 328, 329, 3, 2, 2, 2, 329, 330, 7, 118, 2, 2, 330, 331, 5, 176, 89, 2, 331, 332, 7, 122, 2, 2, 332, 25, 3, 2, 2, 2, 333, 337, 5, 36, 19, 2, 334, 337, 5, 28, 15, 2, 335, 337, 5, 30, 16, 2, 336, 333, 3, 2, 2, 2, 336, 334, 3, 2, 2, 2, 336, 335, 3, 2, 2, 2, 337, 27, 3, 2, 2, 2, 338, 339, 7, 14, 2, 2, 339, 352, 5, 176, 89, 2, 340, 342, 7, 27, 2, 2, 341, 340, 3, 2, 2, 2, 341, 342, 3, 2, 2, 2, 342, 343, 3, 2, 2, 2, 343, 345, 7, 117, 2, 2, 344, 346, 5, 36, 19, 2, 345, 344, 3, 2, 2, 2, 346, 347, 3, 2, 2, 2, 347, 345, 3, 2, 2, 2, 347, 348, 3, 2, 2, 2, 348, 349, 3, 2, 2, 2, 349, 350, 7, 118, 2, 2, 350, 351, 5, 176, 89, 2, 351, 353, 3, 2, 2, 2, 352, 341, 3, 2, 2, 2, 352, 353, 3, 2, 2, 2, 353, 354, 3, 2, 2, 2, 354, 355, 7, 122, 2, 2, 355, 29, 3, 2, 2, 2, 356, 357, 7, 44, 2, 2, 357, 361, 7, 117, 2, 2, 358, 360, 5, 32, 17, 2, 359, 358, 3, 2, 2, 2, 360, 363, 3, 2, 2, 2, 361, 359, 3, 2, 2, 2, 361, 362, 3, 2, 2, 2, 362, 364, 3, 2, 2, 2, 363, 361, 3, 2, 2, 2, 364, 365, 7, 118, 2, 2, 365, 366, 7, 122, 2, 2, 366, 31, 3, 2, 2, 2, 367, 370, 5, 34, 18, 2, 368, 370, 5, 6, 4, 2, 369, 367, 3, 2, 2, 2, 369, 368, 3, 2, 2, 2, 370, 371, 3, 2, 2, 2, 371, 372, 7, 122, 2, 2, 372, 33, 3, 2, 2, 2, 373, 374, 9, 2, 2, 2, 374, 376, 7, 117, 2, 2, 375, 377, 5, 142, 72, 2, 376, 375, 3, 2, 2, 2, 377, 378, 3, 2, 2, 2, 378, 376, 3, 2, 2, 2, 378, 379, 3, 2, 2, 2, 379, 380, 3, 2, 2, 2, 380, 381, 7, 118, 2, 2, 381, 385, 3, 2, 2, 2, 382, 383, 7, 49, 2, 2, 383, 385, 5, 182, 92, 2, 384, 373, 3, 2, 2, 2, 384, 382, 3, 2, 2, 2, 385, 35, 3, 2, 2, 2, 386, 401, 5, 38, 20, 2, 387, 401, 5, 40, 21, 2, 388, 401, 5, 42, 22, 2, 389, 401, 5, 44, 23, 2, 390, 401, 5, 8, 5, 2, 391, 401, 5, 48, 25, 2, 392, 401, 5, 50, 26, 2, 393, 401, 5, 12, 7, 2, 394, 401, 5, 52, 27, 2, 395, 401, 5, 66, 34, 2, 396, 401, 5, 68, 35, 2, 397, 401, 5, 70, 36, 2, 398, 401, 5, 72, 37, 2, 399, 401, 5, 6, 4, 2, 400, 386, 3, 2, 2, 2, 400, 387, 3, 2, 2, 2, 400, 388, 3, 2, 2, 2, 400, 389, 3, 2, 2, 2, 400, 390, 3, 2, 2, 2, 400, 391, 3, 2, 2, 2, 400, 392, 3, 2, 2, 2, 400, 393, 3, 2, 2, 2, 400, 394, 3, 2, 2, 2, 400, 395, 3, 2, 2, 2, 400, 396, 3, 2, 2, 2, 400, 397, 3, 2, 2, 2, 400, 398, 3, 2, 2, 2, 400, 399, 3, 2, 2, 2, 401, 402, 3, 2, 2, 2, 402, 403, 7, 122, 2, 2, 403, 37, 3, 2, 2, 2, 404, 405, 7, 8, 2, 2, 405, 406, 5, 178, 90, 2, 406, 39, 3, 2, 2, 2, 407, 408, 7, 10, 2, 2, 408, 409, 5, 178, 90, 2, 409, 41, 3, 2, 2, 2, 410, 411, 7, 11, 2, 2, 411, 413, 5, 178, 90, 2, 412, 414, 9, 3, 2, 2, 413, 412, 3, 2, 2, 2, 413, 414, 3, 2, 2, 2, 414, 43, 3, 2, 2, 2, 415, 422, 7, 15, 2, 2, 416, 423, 7, 135, 2, 2, 417, 419, 5, 46, 24, 2, 418, 417, 3, 2, 2, 2, 419, 420, 3, 2, 2, 2, 420, 418, 3, 2, 2, 2, 420, 421, 3, 2, 2, 2, 421, 423, 3, 2, 2, 2, 422, 416, 3, 2, 2, 2, 422, 418, 3, 2, 2, 2, 423, 45, 3, 2, 2, 2, 424, 433, 7, 17, 2, 2, 425, 433, 7, 18, 2, 2, 426, 433, 7, 19, 2, 2, 427, 433, 7, 20, 2, 2, 428, 429, 7, 22, 2, 2, 429, 433, 5, 166, 84, 2, 430, 431, 7, 21, 2, 2, 431, 433, 5, 166, 84, 2, 432, 424, 3, 2, 2, 2, 432, 425, 3, 2, 2, 2, 432, 426, 3, 2, 2, 2, 432, 427, 3, 2, 2, 2, 432, 428, 3, 2, 2, 2, 432, 430, 3, 2, 2, 2, 433, 47, 3, 2, 2, 2, 434, 438, 7, 33, 2, 2, 435, 439, 5, 212, 107, 2, 436, 439, 5, 214, 108, 2, 437, 439, 5, 220, 111, 2, 438, 435, 3, 2, 2, 2, 438, 436, 3, 2, 2, 2, 438, 437, 3, 2, 2, 2, 439, 440, 3, 2, 2, 2, 440, 445, 5, 156, 79, 2, 441, 442, 7, 125, 2, 2, 442, 444, 5, 156, 79, 2, 443, 441, 3, 2, 2, 2, 444, 447, 3, 2, 2, 2, 445, 443, 3, 2, 2, 2, 445, 446, 3, 2, 2, 2, 446, 49, 3, 2, 2, 2, 447, 445, 3, 2, 2, 2, 448, 449, 7, 32, 2, 2, 449, 454, 5, 156, 79, 2, 450, 451, 7, 125, 2, 2, 451, 453, 5, 156, 79, 2, 452, 450, 3, 2, 2, 2, 453, 456, 3, 2, 2, 2, 454, 452, 3, 2, 2, 2, 454, 455, 3, 2, 2, 2, 455, 458, 3, 2, 2, 2, 456, 454, 3, 2, 2, 2, 457, 448, 3, 2, 2, 2, 457, 458, 3, 2, 2, 2, 458, 477, 3, 2, 2, 2, 459, 460, 5, 214, 108, 2, 460, 466, 5, 156, 79, 2, 461, 464, 7, 38, 2, 2, 462, 465, 7, 62, 2, 2, 463, 465, 5, 156, 79, 2, 464, 462, 3, 2, 2, 2, 464, 463, 3, 2, 2, 2, 465, 467, 3, 2, 2, 2, 466, 461, 3, 2, 2, 2, 466, 467, 3, 2, 2, 2, 467, 478, 3, 2, 2, 2, 468, 469, 5, 212, 107, 2, 469, 475, 5, 156, 79, 2, 470, 473, 9, 4, 2, 2, 471, 474, 7, 62, 2, 2, 472, 474, 5, 156, 79, 2, 473, 471, 3, 2, 2, 2, 473, 472, 3, 2, 2, 2, 474, 476, 3, 2, 2, 2, 475, 470, 3, 2, 2, 2, 475, 476, 3, 2, 2, 2, 476, 478, 3, 2, 2, 2, 477, 459, 3, 2, 2, 2, 477, 468, 3, 2, 2, 2, 478, 51, 3, 2, 2, 2, 479, 481, 5, 218, 110, 2, 480, 479, 3, 2, 2, 2, 480, 481, 3, 2, 2, 2, 481, 482, 3, 2, 2, 2, 482, 484, 5, 220, 111, 2, 483, 485, 5, 160, 81, 2, 484, 483, 3, 2, 2, 2, 484, 485, 3, 2, 2, 2, 485, 540, 3, 2, 2, 2, 486, 490, 5, 56, 29, 2, 487, 489, 5, 54, 28, 2, 488, 487, 3, 2, 2, 2, 489, 492, 3, 2, 2, 2, 490, 488, 3, 2, 2, 2, 490, 491, 3, 2, 2, 2, 491, 541, 3, 2, 2, 2, 492, 490, 3, 2, 2, 2, 493, 494, 7, 14, 2, 2, 494, 496, 5, 176, 89, 2, 495, 493, 3, 2, 2, 2, 496, 497, 3, 2, 2, 2, 497, 495, 3, 2, 2, 2, 497, 498, 3, 2, 2, 2, 498, 502, 3, 2, 2, 2, 499, 501, 5, 158, 80, 2, 500, 499, 3, 2, 2, 2, 501, 504, 3, 2, 2, 2, 502, 500, 3, 2, 2, 2, 502, 503, 3, 2, 2, 2, 503, 541, 3, 2, 2, 2, 504, 502, 3, 2, 2, 2, 505, 506, 7, 57, 2, 2, 506, 508, 5, 60, 31, 2, 507, 509, 5, 160, 81, 2, 508, 507, 3, 2, 2, 2, 508, 509, 3, 2, 2, 2, 509, 541, 3, 2, 2, 2, 510, 511, 7, 58, 2, 2, 511, 513, 5, 160, 81, 2, 512, 514, 5, 62, 32, 2, 513, 512, 3, 2, 2, 2, 514, 515, 3, 2, 2, 2, 515, 513, 3, 2, 2, 2, 515, 516, 3, 2, 2, 2, 516, 518, 3, 2, 2, 2, 517, 519, 5, 160, 81, 2, 518, 517, 3, 2, 2, 2, 518, 519, 3, 2, 2, 2, 519, 541, 3, 2, 2, 2, 520, 521, 5, 222, 112, 2, 521, 523, 5, 160, 81, 2, 522, 524, 5, 64, 33, 2, 523, 522, 3, 2, 2, 2, 524, 525, 3, 2, 2, 2, 525, 523, 3, 2, 2, 2, 525, 526, 3, 2, 2, 2, 526, 528, 3, 2, 2, 2, 527, 529, 5, 160, 81, 2, 528, 527, 3, 2, 2, 2, 528, 529, 3, 2, 2, 2, 529, 541, 3, 2, 2, 2, 530, 531, 7, 55, 2, 2, 531, 533, 5, 160, 81, 2, 532, 534, 5, 62, 32, 2, 533, 532, 3, 2, 2, 2, 534, 535, 3, 2, 2, 2, 535, 533, 3, 2, 2, 2, 535, 536, 3, 2, 2, 2, 536, 538, 3, 2, 2, 2, 537, 539, 5, 160, 81, 2, 538, 537, 3, 2, 2, 2, 538, 539, 3, 2, 2, 2, 539, 541, 3, 2, 2, 2, 540, 486, 3, 2, 2, 2, 540, 495, 3, 2, 2, 2, 540, 505, 3, 2, 2, 2, 540, 510, 3, 2, 2, 2, 540, 520, 3, 2, 2, 2, 540, 530, 3, 2, 2, 2, 541, 53, 3, 2, 2, 2, 542, 544, 5, 162, 82, 2, 543, 545, 5, 56, 29, 2, 544, 543, 3, 2, 2, 2, 544, 545, 3, 2, 2, 2, 545, 55, 3, 2, 2, 2, 546, 547, 7, 28, 2, 2, 547, 548, 5, 176, 89, 2, 548, 549, 7, 29, 2, 2, 549, 552, 3, 2, 2, 2, 550, 552, 5, 58, 30, 2, 551, 546, 3, 2, 2, 2, 551, 550, 3, 2, 2, 2, 552, 57, 3, 2, 2, 2, 553, 554, 7, 28, 2, 2, 554, 555, 7, 135, 2, 2, 555, 556, 7, 135, 2, 2, 556, 557, 7, 135, 2, 2, 557, 558, 7, 135, 2, 2, 558, 561, 7, 29, 2, 2, 559, 561, 7, 135, 2, 2, 560, 553, 3, 2, 2, 2, 560, 559, 3, 2, 2, 2, 561, 59, 3, 2, 2, 2, 562, 563, 5, 162, 82, 2, 563, 564, 5, 154, 78, 2, 564, 565, 5, 154, 78, 2, 565, 61, 3, 2, 2, 2, 566, 567, 5, 154, 78, 2, 567, 568, 7, 55, 2, 2, 568, 570, 7, 127, 2, 2, 569, 571, 7, 124, 2, 2, 570, 569, 3, 2, 2, 2, 570, 571, 3, 2, 2, 2, 571, 63, 3, 2, 2, 2, 572, 575, 5, 154, 78, 2, 573, 574, 7, 55, 2, 2, 574, 576, 7, 127, 2, 2, 575, 573, 3, 2, 2, 2, 575, 576, 3, 2, 2, 2, 576, 578, 3, 2, 2, 2, 577, 579, 7, 61, 2, 2, 578, 577, 3, 2, 2, 2, 578, 579, 3, 2, 2, 2, 579, 581, 3, 2, 2, 2, 580, 582, 7, 124, 2, 2, 581, 580, 3, 2, 2, 2, 581, 582, 3, 2, 2, 2, 582, 65, 3, 2, 2, 2, 583, 585, 7, 42, 2, 2, 584, 586, 5, 180, 91, 2, 585, 584, 3, 2, 2, 2, 586, 587, 3, 2, 2, 2, 587, 585, 3, 2, 2, 2, 587, 588, 3, 2, 2, 2, 588, 67, 3, 2, 2, 2, 589, 596, 7, 50, 2, 2, 590, 594, 5, 182, 92, 2, 591, 592, 5, 182, 92, 2, 592, 593, 5, 182, 92, 2, 593, 595, 3, 2, 2, 2, 594, 591, 3, 2, 2, 2, 594, 595, 3, 2, 2, 2, 595, 597, 3, 2, 2, 2, 596, 590, 3, 2, 2, 2, 596, 597, 3, 2, 2, 2, 597, 598, 3, 2, 2, 2, 598, 599, 7, 126, 2, 2, 599, 600, 7, 146, 2, 2, 600, 601, 7, 147, 2, 2, 601, 69, 3, 2, 2, 2, 602, 603, 7, 43, 2, 2, 603, 605, 7, 117, 2, 2, 604, 606, 5, 142, 72, 2, 605, 604, 3, 2, 2, 2, 606, 607, 3, 2, 2, 2, 607, 605, 3, 2, 2, 2, 607, 608, 3, 2, 2, 2, 608, 609, 3, 2, 2, 2, 609, 610, 7, 118, 2, 2, 610, 71, 3, 2, 2, 2, 611, 612, 7, 13, 2, 2, 612, 73, 3, 2, 2, 2, 613, 614, 7, 63, 2, 2, 614, 616, 7, 117, 2, 2, 615, 617, 5, 76, 39, 2, 616, 615, 3, 2, 2, 2, 617, 618, 3, 2, 2, 2, 618, 616, 3, 2, 2, 2, 618, 619, 3, 2, 2, 2, 619, 620, 3, 2, 2, 2, 620, 621, 7, 118, 2, 2, 621, 622, 7, 63, 2, 2, 622, 623, 7, 122, 2, 2, 623, 75, 3, 2, 2, 2, 624, 628, 5, 78, 40, 2, 625, 628, 5, 80, 41, 2, 626, 628, 5, 6, 4, 2, 627, 624, 3, 2, 2, 2, 627, 625, 3, 2, 2, 2, 627, 626, 3, 2, 2, 2, 628, 629, 3, 2, 2, 2, 629, 630, 7, 122, 2, 2, 630, 77, 3, 2, 2, 2, 631, 633, 9, 5, 2, 2, 632, 634, 5, 178, 90, 2, 633, 632, 3, 2, 2, 2, 634, 635, 3, 2, 2, 2, 635, 633, 3, 2, 2, 2, 635, 636, 3, 2, 2, 2, 636, 79, 3, 2, 2, 2, 637, 638, 9, 6, 2, 2, 638, 643, 5, 82, 42, 2, 639, 640, 7, 125, 2, 2, 640, 642, 5, 82, 42, 2, 641, 639, 3, 2, 2, 2, 642, 645, 3, 2, 2, 2, 643, 641, 3, 2, 2, 2, 643, 644, 3, 2, 2, 2, 644, 81, 3, 2, 2, 2, 645, 643, 3, 2, 2, 2, 646, 647, 5, 178, 90, 2, 647, 649, 5, 178, 90, 2, 648, 650, 7, 135, 2, 2, 649, 648, 3, 2, 2, 2, 650, 651, 3, 2, 2, 2, 651, 649, 3, 2, 2, 2, 651, 652, 3, 2, 2, 2, 652, 83, 3, 2, 2, 2, 653, 654, 7, 68, 2, 2, 654, 656, 7, 117, 2, 2, 655, 657, 5, 86, 44, 2, 656, 655, 3, 2, 2, 2, 657, 658, 3, 2, 2, 2, 658, 656, 3, 2, 2, 2, 658, 659, 3, 2, 2, 2, 659, 660, 3, 2, 2, 2, 660, 661, 7, 118, 2, 2, 661, 662, 7, 68, 2, 2, 662, 663, 7, 122, 2, 2, 663, 85, 3, 2, 2, 2, 664, 670, 5, 88, 45, 2, 665, 670, 5, 90, 46, 2, 666, 670, 5, 92, 47, 2, 667, 670, 5, 94, 48, 2, 668, 670, 5, 6, 4, 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, 671, 3, 2, 2, 2, 671, 672, 7, 122, 2, 2, 672, 87, 3, 2, 2, 2, 673, 674, 7, 69, 2, 2, 674, 675, 5, 164, 83, 2, 675, 676, 7, 125, 2, 2, 676, 677, 5, 164, 83, 2, 677, 678, 7, 125, 2, 2, 678, 679, 5, 164, 83, 2, 679, 680, 7, 125, 2, 2, 680, 681, 5, 164, 83, 2, 681, 89, 3, 2, 2, 2, 682, 683, 7, 70, 2, 2, 683, 685, 5, 156, 79, 2, 684, 686, 7, 135, 2, 2, 685, 684, 3, 2, 2, 2, 686, 687, 3, 2, 2, 2, 687, 685, 3, 2, 2, 2, 687, 688, 3, 2, 2, 2, 688, 91, 3, 2, 2, 2, 689, 690, 7, 71, 2, 2, 690, 692, 5, 156, 79, 2, 691, 693, 7, 135, 2, 2, 692, 691, 3, 2, 2, 2, 693, 694, 3, 2, 2, 2, 694, 692, 3, 2, 2, 2, 694, 695, 3, 2, 2, 2, 695, 93, 3, 2, 2, 2, 696, 697, 7, 72, 2, 2, 697, 699, 5, 156, 79, 2, 698, 700, 7, 135, 2, 2, 699, 698, 3, 2, 2, 2, 700, 701, 3, 2, 2, 2, 701, 699, 3, 2, 2, 2, 701, 702, 3, 2, 2, 2, 702, 95, 3, 2, 2, 2, 703, 704, 7, 73, 2, 2, 704, 706, 7, 117, 2, 2, 705, 707, 5, 98, 50, 2, 706, 705, 3, 2, 2, 2, 707, 708, 3, 2, 2, 2, 708, 706, 3, 2, 2, 2, 708, 709, 3, 2, 2, 2, 709, 710, 3, 2, 2, 2, 710, 711, 7, 118, 2, 2, 711, 712, 7, 73, 2, 2, 712, 713, 7, 122, 2, 2, 713, 97, 3, 2, 2, 2, 714, 717, 5, 100, 51, 2, 715, 717, 5, 6, 4, 2, 716, 714, 3, 2, 2, 2, 716, 715, 3, 2, 2, 2, 717, 718, 3, 2, 2, 2, 718, 719, 7, 122, 2, 2, 719, 99, 3, 2, 2, 2, 720, 721, 7, 74, 2, 2, 721, 722, 7, 132, 2, 2, 722, 101, 3, 2, 2, 2, 723, 724, 7, 75, 2, 2, 724, 728, 7, 117, 2, 2, 725, 727, 5, 104, 53, 2, 726, 725, 3, 2, 2, 2, 727, 730, 3, 2, 2, 2, 728, 726, 3, 2, 2, 2, 728, 729, 3, 2, 2, 2, 729, 731, 3, 2, 2, 2, 730, 728, 3, 2, 2, 2, 731, 732, 7, 118, 2, 2, 732, 733, 7, 75, 2, 2, 733, 734, 7, 122, 2, 2, 734, 103, 3, 2, 2, 2, 735, 738, 5, 106, 54, 2, 736, 738, 5, 6, 4, 2, 737, 735, 3, 2, 2, 2, 737, 736, 3, 2, 2, 2, 738, 739, 3, 2, 2, 2, 739, 740, 7, 122, 2, 2, 740, 105, 3, 2, 2, 2, 741, 742, 9, 7, 2, 2, 742, 743, 7, 135, 2, 2, 743, 107, 3, 2, 2, 2, 744, 745, 7, 110, 2, 2, 745, 749, 7, 117, 2, 2, 746, 748, 5, 110, 56, 2, 747, 746, 3, 2, 2, 2, 748, 751, 3, 2, 2, 2, 749, 747, 3, 2, 2, 2, 749, 750, 3, 2, 2, 2, 750, 752, 3, 2, 2, 2, 751, 749, 3, 2, 2, 2, 752, 753, 7, 118, 2, 2, 753, 754, 7, 110, 2, 2, 754, 755, 7, 122, 2, 2, 755, 109, 3, 2, 2, 2, 756, 759, 5, 112, 57, 2, 757, 759, 5, 6, 4, 2, 758, 756, 3, 2, 2, 2, 758, 757, 3, 2, 2, 2, 759, 760, 3, 2, 2, 2, 760, 761, 7, 122, 2, 2, 761, 111, 3, 2, 2, 2, 762, 763, 9, 8, 2, 2, 763, 764, 7, 135, 2, 2, 764, 113, 3, 2, 2, 2, 765, 766, 7, 80, 2, 2, 766, 768, 7, 117, 2, 2, 767, 769, 5, 116, 59, 2, 768, 767, 3, 2, 2, 2, 769, 770, 3, 2, 2, 2, 770, 768, 3, 2, 2, 2, 770, 771, 3, 2, 2, 2, 771, 772, 3, 2, 2, 2, 772, 773, 7, 118, 2, 2, 773, 774, 7, 80, 2, 2, 774, 775, 7, 122, 2, 2, 775, 115, 3, 2, 2, 2, 776, 779, 5, 118, 60, 2, 777, 779, 5, 6, 4, 2, 778, 776, 3, 2, 2, 2, 778, 777, 3, 2, 2, 2, 779, 780, 3, 2, 2, 2, 780, 781, 7, 122, 2, 2, 781, 117, 3, 2, 2, 2, 782, 783, 7, 81, 2, 2, 783, 790, 5, 182, 92, 2, 784, 788, 5, 182, 92, 2, 785, 786, 5, 182, 92, 2, 786, 787, 5, 182, 92, 2, 787, 789, 3, 2, 2, 2, 788, 785, 3, 2, 2, 2, 788, 789, 3, 2, 2, 2, 789, 791, 3, 2, 2, 2, 790, 784, 3, 2, 2, 2, 790, 791, 3, 2, 2, 2, 791, 792, 3, 2, 2, 2, 792, 793, 7, 126, 2, 2, 793, 794, 7, 146, 2, 2, 794, 795, 7, 147, 2, 2, 795, 119, 3, 2, 2, 2, 796, 797, 7, 82, 2, 2, 797, 799, 7, 117, 2, 2, 798, 800, 5, 122, 62, 2, 799, 798, 3, 2, 2, 2, 800, 801, 3, 2, 2, 2, 801, 799, 3, 2, 2, 2, 801, 802, 3, 2, 2, 2, 802, 803, 3, 2, 2, 2, 803, 804, 7, 118, 2, 2, 804, 805, 7, 82, 2, 2, 805, 806, 7, 122, 2, 2, 806, 121, 3, 2, 2, 2, 807, 810, 5, 124, 63, 2, 808, 810, 5, 6, 4, 2, 809, 807, 3, 2, 2, 2, 809, 808, 3, 2, 2, 2, 810, 811, 3, 2, 2, 2, 811, 812, 7, 122, 2, 2, 812, 123, 3, 2, 2, 2, 813, 814, 9, 9, 2, 2, 814, 841, 7, 135, 2, 2, 815, 816, 9, 10, 2, 2, 816, 841, 7, 135, 2, 2, 817, 818, 7, 100, 2, 2, 818, 841, 5, 182, 92, 2, 819, 820, 7, 97, 2, 2, 820, 821, 7, 126, 2, 2, 821, 822, 7, 146, 2, 2, 822, 841, 7, 147, 2, 2, 823, 824, 7, 87, 2, 2, 824, 825, 7, 135, 2, 2, 825, 826, 7, 135, 2, 2, 826, 827, 7, 135, 2, 2, 827, 828, 7, 135, 2, 2, 828, 829, 7, 135, 2, 2, 829, 830, 7, 135, 2, 2, 830, 831, 7, 135, 2, 2, 831, 832, 7, 135, 2, 2, 832, 833, 7, 135, 2, 2, 833, 841, 7, 135, 2, 2, 834, 836, 9, 11, 2, 2, 835, 837, 7, 135, 2, 2, 836, 835, 3, 2, 2, 2, 837, 838, 3, 2, 2, 2, 838, 836, 3, 2, 2, 2, 838, 839, 3, 2, 2, 2, 839, 841, 3, 2, 2, 2, 840, 813, 3, 2, 2, 2, 840, 815, 3, 2, 2, 2, 840, 817, 3, 2, 2, 2, 840, 819, 3, 2, 2, 2, 840, 823, 3, 2, 2, 2, 840, 834, 3, 2, 2, 2, 841, 125, 3, 2, 2, 2, 842, 843, 7, 101, 2, 2, 843, 845, 7, 117, 2, 2, 844, 846, 5, 128, 65, 2, 845, 844, 3, 2, 2, 2, 846, 847, 3, 2, 2, 2, 847, 845, 3, 2, 2, 2, 847, 848, 3, 2, 2, 2, 848, 849, 3, 2, 2, 2, 849, 850, 7, 118, 2, 2, 850, 851, 7, 101, 2, 2, 851, 852, 7, 122, 2, 2, 852, 127, 3, 2, 2, 2, 853, 859, 5, 130, 66, 2, 854, 859, 5, 132, 67, 2, 855, 859, 5, 140, 71, 2, 856, 859, 5, 144, 73, 2, 857, 859, 5, 6, 4, 2, 858, 853, 3, 2, 2, 2, 858, 854, 3, 2, 2, 2, 858, 855, 3, 2, 2, 2, 858, 856, 3, 2, 2, 2, 858, 857, 3, 2, 2, 2, 859, 860, 3, 2, 2, 2, 860, 861, 7, 122, 2, 2, 861, 129, 3, 2, 2, 2, 862, 863, 7, 104, 2, 2, 863, 864, 5, 178, 90, 2, 864, 865, 7, 135, 2, 2, 865, 867, 7, 117, 2, 2, 866, 868, 5, 142, 72, 2, 867, 866, 3, 2, 2, 2, 868, 869, 3, 2, 2, 2, 869, 867, 3, 2, 2, 2, 869, 870, 3, 2, 2, 2, 870, 871, 3, 2, 2, 2, 871, 872, 7, 118, 2, 2, 872, 131, 3, 2, 2, 2, 873, 874, 7, 105, 2, 2, 874, 876, 7, 117, 2, 2, 875, 877, 5, 134, 68, 2, 876, 875, 3, 2, 2, 2, 877, 878, 3, 2, 2, 2, 878, 876, 3, 2, 2, 2, 878, 879, 3, 2, 2, 2, 879, 880, 3, 2, 2, 2, 880, 881, 7, 118, 2, 2, 881, 133, 3, 2, 2, 2, 882, 887, 5, 146, 74, 2, 883, 887, 5, 136, 69, 2, 884, 887, 5, 138, 70, 2, 885, 887, 5, 6, 4, 2, 886, 882, 3, 2, 2, 2, 886, 883, 3, 2, 2, 2, 886, 884, 3, 2, 2, 2, 886, 885, 3, 2, 2, 2, 887, 888, 3, 2, 2, 2, 888, 889, 7, 122, 2, 2, 889, 135, 3, 2, 2, 2, 890, 891, 7, 107, 2, 2, 891, 892, 5, 178, 90, 2, 892, 897, 5, 180, 91, 2, 893, 895, 5, 180, 91, 2, 894, 896, 5, 180, 91, 2, 895, 894, 3, 2, 2, 2, 895, 896, 3, 2, 2, 2, 896, 898, 3, 2, 2, 2, 897, 893, 3, 2, 2, 2, 897, 898, 3, 2, 2, 2, 898, 137, 3, 2, 2, 2, 899, 901, 7, 106, 2, 2, 900, 902, 9, 12, 2, 2, 901, 900, 3, 2, 2, 2, 902, 903, 3, 2, 2, 2, 903, 901, 3, 2, 2, 2, 903, 904, 3, 2, 2, 2, 904, 139, 3, 2, 2, 2, 905, 906, 7, 102, 2, 2, 906, 908, 7, 117, 2, 2, 907, 909, 5, 142, 72, 2, 908, 907, 3, 2, 2, 2, 909, 910, 3, 2, 2, 2, 910, 908, 3, 2, 2, 2, 910, 911, 3, 2, 2, 2, 911, 912, 3, 2, 2, 2, 912, 913, 7, 118, 2, 2, 913, 141, 3, 2, 2, 2, 914, 917, 5, 146, 74, 2, 915, 917, 5, 6, 4, 2, 916, 914, 3, 2, 2, 2, 916, 915, 3, 2, 2, 2, 917, 918, 3, 2, 2, 2, 918, 919, 7, 122, 2, 2, 919, 143, 3, 2, 2, 2, 920, 921, 7, 103, 2, 2, 921, 922, 5, 182, 92, 2, 922, 145, 3, 2, 2, 2, 923, 930, 7, 80, 2, 2, 924, 928, 5, 182, 92, 2, 925, 926, 5, 182, 92, 2, 926, 927, 5, 182, 92, 2, 927, 929, 3, 2, 2, 2, 928, 925, 3, 2, 2, 2, 928, 929, 3, 2, 2, 2, 929, 931, 3, 2, 2, 2, 930, 924, 3, 2, 2, 2, 930, 931, 3, 2, 2, 2, 931, 932, 3, 2, 2, 2, 932, 933, 7, 126, 2, 2, 933, 934, 7, 146, 2, 2, 934, 935, 7, 147, 2, 2, 935, 147, 3, 2, 2, 2, 936, 937, 7, 114, 2, 2, 937, 939, 7, 117, 2, 2, 938, 940, 5, 150, 76, 2, 939, 938, 3, 2, 2, 2, 940, 941, 3, 2, 2, 2, 941, 939, 3, 2, 2, 2, 941, 942, 3, 2, 2, 2, 942, 943, 3, 2, 2, 2, 943, 944, 7, 118, 2, 2, 944, 945, 7, 114, 2, 2, 945, 946, 7, 122, 2, 2, 946, 149, 3, 2, 2, 2, 947, 950, 5, 152, 77, 2, 948, 950, 5, 6, 4, 2, 949, 947, 3, 2, 2, 2, 949, 948, 3, 2, 2, 2, 950, 951, 3, 2, 2, 2, 951, 952, 7, 122, 2, 2, 952, 151, 3, 2, 2, 2, 953, 954, 9, 13, 2, 2, 954, 955, 5, 172, 87, 2, 955, 956, 7, 135, 2, 2, 956, 153, 3, 2, 2, 2, 957, 958, 7, 28, 2, 2, 958, 967, 7, 52, 2, 2, 959, 960, 7, 135, 2, 2, 960, 963, 7, 135, 2, 2, 961, 962, 7, 51, 2, 2, 962, 964, 7, 135, 2, 2, 963, 961, 3, 2, 2, 2, 963, 964, 3, 2, 2, 2, 964, 968, 3, 2, 2, 2, 965, 968, 7, 62, 2, 2, 966, 968, 5, 176, 89, 2, 967, 959, 3, 2, 2, 2, 967, 965, 3, 2, 2, 2, 967, 966, 3, 2, 2, 2, 968, 969, 3, 2, 2, 2, 969, 970, 7, 29, 2, 2, 970, 155, 3, 2, 2, 2, 971, 973, 5, 158, 80, 2, 972, 971, 3, 2, 2, 2, 973, 974, 3, 2, 2, 2, 974, 972, 3, 2, 2, 2, 974, 975, 3, 2, 2, 2, 975, 157, 3, 2, 2, 2, 976, 981, 5, 162, 82, 2, 977, 978, 7, 14, 2, 2, 978, 980, 5, 176, 89, 2, 979, 977, 3, 2, 2, 2, 980, 983, 3, 2, 2, 2, 981, 979, 3, 2, 2, 2, 981, 982, 3, 2, 2, 2, 982, 159, 3, 2, 2, 2, 983, 981, 3, 2, 2, 2, 984, 986, 5, 162, 82, 2, 985, 984, 3, 2, 2, 2, 986, 987, 3, 2, 2, 2, 987, 985, 3, 2, 2, 2, 987, 988, 3, 2, 2, 2, 988, 161, 3, 2, 2, 2, 989, 992, 5, 166, 84, 2, 990, 992, 5, 172, 87, 2, 991, 989, 3, 2, 2, 2, 991, 990, 3, 2, 2, 2, 992, 994, 3, 2, 2, 2, 993, 995, 7, 124, 2, 2, 994, 993, 3, 2, 2, 2, 994, 995, 3, 2, 2, 2, 995, 163, 3, 2, 2, 2, 996, 998, 5, 166, 84, 2, 997, 996, 3, 2, 2, 2, 997, 998, 3, 2, 2, 2, 998, 165, 3, 2, 2, 2, 999, 1002, 7, 127, 2, 2, 1000, 1002, 5, 168, 85, 2, 1001, 999, 3, 2, 2, 2, 1001, 1000, 3, 2, 2, 2, 1002, 167, 3, 2, 2, 2, 1003, 1005, 7, 119, 2, 2, 1004, 1006, 5, 170, 86, 2, 1005, 1004, 3, 2, 2, 2, 1006, 1007, 3, 2, 2, 2, 1007, 1005, 3, 2, 2, 2, 1007, 1008, 3, 2, 2, 2, 1008, 1009, 3, 2, 2, 2, 1009, 1010, 7, 120, 2, 2, 1010, 169, 3, 2, 2, 2, 1011, 1014, 5, 172, 87, 2, 1012, 1013, 7, 121, 2, 2, 1013, 1015, 5, 172, 87, 2, 1014, 1012, 3, 2, 2, 2, 1014, 1015, 3, 2, 2, 2, 1015, 1018, 3, 2, 2, 2, 1016, 1018, 7, 127, 2, 2, 1017, 1011, 3, 2, 2, 2, 1017, 1016, 3, 2, 2, 2, 1018, 171, 3, 2, 2, 2, 1019, 1022, 5, 174, 88, 2, 1020, 1022, 7, 128, 2, 2, 1021, 1019, 3, 2, 2, 2, 1021, 1020, 3, 2, 2, 2, 1022, 173, 3, 2, 2, 2, 1023, 1024, 9, 14, 2, 2, 1024, 175, 3, 2, 2, 2, 1025, 1026, 9, 15, 2, 2, 1026, 177, 3, 2, 2, 2, 1027, 1028, 9, 16, 2, 2, 1028, 179, 3, 2, 2, 2, 1029, 1030, 9, 17, 2, 2, 1030, 181, 3, 2, 2, 2, 1031, 1032, 9, 18, 2, 2, 1032, 183, 3, 2, 2, 2, 1033, 1035, 5, 26, 14, 2, 1034, 1033, 3, 2, 2, 2, 1035, 1038, 3, 2, 2, 2, 1036, 1034, 3, 2, 2, 2, 1036, 1037, 3, 2, 2, 2, 1037, 1039, 3, 2, 2, 2, 1038, 1036, 3, 2, 2, 2, 1039, 1040, 7, 2, 2, 3, 1040, 185, 3, 2, 2, 2, 1041, 1043, 5, 36, 19, 2, 1042, 1041, 3, 2, 2, 2, 1043, 1046, 3, 2, 2, 2, 1044, 1042, 3, 2, 2, 2, 1044, 1045, 3, 2, 2, 2, 1045, 1047, 3, 2, 2, 2, 1046, 1044, 3, 2, 2, 2, 1047, 1048, 7, 2, 2, 3, 1048, 187, 3, 2, 2, 2, 1049, 1051, 5, 32, 17, 2, 1050, 1049, 3, 2, 2, 2, 1051, 1054, 3, 2, 2, 2, 1052, 1050, 3, 2, 2, 2, 1052, 1053, 3, 2, 2, 2, 1053, 1055, 3, 2, 2, 2, 1054, 1052, 3, 2, 2, 2, 1055, 1056, 7, 2, 2, 3, 1056, 189, 3, 2, 2, 2, 1057, 1059, 5, 76, 39, 2, 1058, 1057, 3, 2, 2, 2, 1059, 1062, 3, 2, 2, 2, 1060, 1058, 3, 2, 2, 2, 1060, 1061, 3, 2, 2, 2, 1061, 1063, 3, 2, 2, 2, 1062, 1060, 3, 2, 2, 2, 1063, 1064, 7, 2, 2, 3, 1064, 191, 3, 2, 2, 2, 1065, 1067, 5, 98, 50, 2, 1066, 1065, 3, 2, 2, 2, 1067, 1070, 3, 2, 2, 2, 1068, 1066, 3, 2, 2, 2, 1068, 1069, 3, 2, 2, 2, 1069, 1071, 3, 2, 2, 2, 1070, 1068, 3, 2, 2, 2, 1071, 1072, 7, 2, 2, 3, 1072, 193, 3, 2, 2, 2, 1073, 1075, 5, 104, 53, 2, 1074, 1073, 3, 2, 2, 2, 1075, 1078, 3, 2, 2, 2, 1076, 1074, 3, 2, 2, 2, 1076, 1077, 3, 2, 2, 2, 1077, 1079, 3, 2, 2, 2, 1078, 1076, 3, 2, 2, 2, 1079, 1080, 7, 2, 2, 3, 1080, 195, 3, 2, 2, 2, 1081, 1083, 5, 110, 56, 2, 1082, 1081, 3, 2, 2, 2, 1083, 1086, 3, 2, 2, 2, 1084, 1082, 3, 2, 2, 2, 1084, 1085, 3, 2, 2, 2, 1085, 1087, 3, 2, 2, 2, 1086, 1084, 3, 2, 2, 2, 1087, 1088, 7, 2, 2, 3, 1088, 197, 3, 2, 2, 2, 1089, 1091, 5, 86, 44, 2, 1090, 1089, 3, 2, 2, 2, 1091, 1094, 3, 2, 2, 2, 1092, 1090, 3, 2, 2, 2, 1092, 1093, 3, 2, 2, 2, 1093, 1095, 3, 2, 2, 2, 1094, 1092, 3, 2, 2, 2, 1095, 1096, 7, 2, 2, 3, 1096, 199, 3, 2, 2, 2, 1097, 1099, 5, 116, 59, 2, 1098, 1097, 3, 2, 2, 2, 1099, 1102, 3, 2, 2, 2, 1100, 1098, 3, 2, 2, 2, 1100, 1101, 3, 2, 2, 2, 1101, 1103, 3, 2, 2, 2, 1102, 1100, 3, 2, 2, 2, 1103, 1104, 7, 2, 2, 3, 1104, 201, 3, 2, 2, 2, 1105, 1107, 5, 150, 76, 2, 1106, 1105, 3, 2, 2, 2, 1107, 1110, 3, 2, 2, 2, 1108, 1106, 3, 2, 2, 2, 1108, 1109, 3, 2, 2, 2, 1109, 1111, 3, 2, 2, 2, 1110, 1108, 3, 2, 2, 2, 1111, 1112, 7, 2, 2, 3, 1112, 203, 3, 2, 2, 2, 1113, 1115, 5, 122, 62, 2, 1114, 1113, 3, 2, 2, 2, 1115, 1118, 3, 2, 2, 2, 1116, 1114, 3, 2, 2, 2, 1116, 1117, 3, 2, 2, 2, 1117, 1119, 3, 2, 2, 2, 1118, 1116, 3, 2, 2, 2, 1119, 1120, 7, 2, 2, 3, 1120, 205, 3, 2, 2, 2, 1121, 1123, 5, 128, 65, 2, 1122, 1121, 3, 2, 2, 2, 1123, 1126, 3, 2, 2, 2, 1124, 1122, 3, 2, 2, 2, 1124, 1125, 3, 2, 2, 2, 1125, 1127, 3, 2, 2, 2, 1126, 1124, 3, 2, 2, 2, 1127, 1128, 7, 2, 2, 3, 1128, 207, 3, 2, 2, 2, 1129, 1131, 5, 134, 68, 2, 1130, 1129, 3, 2, 2, 2, 1131, 1134, 3, 2, 2, 2, 1132, 1130, 3, 2, 2, 2, 1132, 1133, 3, 2, 2, 2, 1133, 1135, 3, 2, 2, 2, 1134, 1132, 3, 2, 2, 2, 1135, 1136, 7, 2, 2, 3, 1136, 209, 3, 2, 2, 2, 1137, 1139, 5, 142, 72, 2, 1138, 1137, 3, 2, 2, 2, 1139, 1142, 3, 2, 2, 2, 1140, 1138, 3, 2, 2, 2, 1140, 1141, 3, 2, 2, 2, 1141, 1143, 3, 2, 2, 2, 1142, 1140, 3, 2, 2, 2, 1143, 1144, 7, 2, 2, 3, 1144, 211, 3, 2, 2, 2, 1145, 1146, 9, 19, 2, 2, 1146, 213, 3, 2, 2, 2, 1147, 1148, 9, 20, 2, 2, 1148, 215, 3, 2, 2, 2, 1149, 1150, 9, 21, 2, 2, 1150, 217, 3, 2, 2, 2, 1151, 1152, 9, 22, 2, 2, 1152, 219, 3, 2, 2, 2, 1153, 1154, 9, 23, 2, 2, 1154, 221, 3, 2, 2, 2, 1155, 1156, 9, 24, 2, 2, 1156, 223, 3, 2, 2, 2, 124, 229, 231, 242, 262, 272, 283, 289, 305, 313, 321, 327, 336, 341, 347, 352, 361, 369, 378, 384, 400, 413, 420, 422, 432, 438, 445, 454, 457, 464, 466, 473, 475, 477, 480, 484, 490, 497, 502, 508, 515, 518, 525, 528, 535, 538, 540, 544, 551, 560, 570, 575, 578, 581, 587, 594, 596, 607, 618, 627, 635, 643, 651, 658, 669, 687, 694, 701, 708, 716, 728, 737, 749, 758, 770, 778, 788, 790, 801, 809, 838, 840, 847, 858, 869, 878, 886, 895, 897, 903, 910, 916, 928, 930, 941, 949, 963, 967, 974, 981, 987, 991, 994, 997, 1001, 1007, 1014, 1017, 1021, 1036, 1044, 1052, 1060, 1068, 1076, 1084, 1092, 1100, 1108, 1116, 1124, 1132, 1140] \ No newline at end of file +[4, 1, 145, 1156, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 5, 0, 228, 8, 0, 10, 0, 12, 0, 231, 9, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 241, 8, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 3, 5, 261, 8, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 271, 8, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 3, 8, 282, 8, 8, 1, 8, 1, 8, 4, 8, 286, 8, 8, 11, 8, 12, 8, 287, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 304, 8, 9, 1, 10, 1, 10, 1, 10, 1, 10, 5, 10, 310, 8, 10, 10, 10, 12, 10, 313, 9, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 3, 11, 320, 8, 11, 1, 11, 1, 11, 4, 11, 324, 8, 11, 11, 11, 12, 11, 325, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 3, 12, 335, 8, 12, 1, 13, 1, 13, 1, 13, 3, 13, 340, 8, 13, 1, 13, 1, 13, 4, 13, 344, 8, 13, 11, 13, 12, 13, 345, 1, 13, 1, 13, 1, 13, 3, 13, 351, 8, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 5, 14, 358, 8, 14, 10, 14, 12, 14, 361, 9, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 3, 15, 368, 8, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 4, 16, 375, 8, 16, 11, 16, 12, 16, 376, 1, 16, 1, 16, 1, 16, 1, 16, 3, 16, 383, 8, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 3, 17, 399, 8, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 3, 20, 412, 8, 20, 1, 21, 1, 21, 1, 21, 4, 21, 417, 8, 21, 11, 21, 12, 21, 418, 3, 21, 421, 8, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 431, 8, 22, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 437, 8, 23, 1, 23, 1, 23, 1, 23, 5, 23, 442, 8, 23, 10, 23, 12, 23, 445, 9, 23, 1, 24, 1, 24, 1, 24, 1, 24, 5, 24, 451, 8, 24, 10, 24, 12, 24, 454, 9, 24, 3, 24, 456, 8, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 3, 24, 463, 8, 24, 3, 24, 465, 8, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 3, 24, 472, 8, 24, 3, 24, 474, 8, 24, 3, 24, 476, 8, 24, 1, 25, 3, 25, 479, 8, 25, 1, 25, 1, 25, 3, 25, 483, 8, 25, 1, 25, 1, 25, 5, 25, 487, 8, 25, 10, 25, 12, 25, 490, 9, 25, 1, 25, 1, 25, 4, 25, 494, 8, 25, 11, 25, 12, 25, 495, 1, 25, 5, 25, 499, 8, 25, 10, 25, 12, 25, 502, 9, 25, 1, 25, 1, 25, 1, 25, 3, 25, 507, 8, 25, 1, 25, 1, 25, 1, 25, 4, 25, 512, 8, 25, 11, 25, 12, 25, 513, 1, 25, 3, 25, 517, 8, 25, 1, 25, 1, 25, 1, 25, 4, 25, 522, 8, 25, 11, 25, 12, 25, 523, 1, 25, 3, 25, 527, 8, 25, 1, 25, 1, 25, 1, 25, 4, 25, 532, 8, 25, 11, 25, 12, 25, 533, 1, 25, 3, 25, 537, 8, 25, 3, 25, 539, 8, 25, 1, 26, 1, 26, 3, 26, 543, 8, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 3, 27, 550, 8, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 559, 8, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 3, 30, 569, 8, 30, 1, 31, 1, 31, 1, 31, 3, 31, 574, 8, 31, 1, 31, 3, 31, 577, 8, 31, 1, 31, 3, 31, 580, 8, 31, 1, 32, 1, 32, 4, 32, 584, 8, 32, 11, 32, 12, 32, 585, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 3, 33, 593, 8, 33, 3, 33, 595, 8, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 4, 34, 604, 8, 34, 11, 34, 12, 34, 605, 1, 34, 1, 34, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 4, 36, 615, 8, 36, 11, 36, 12, 36, 616, 1, 36, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 3, 37, 626, 8, 37, 1, 37, 1, 37, 1, 38, 1, 38, 4, 38, 632, 8, 38, 11, 38, 12, 38, 633, 1, 39, 1, 39, 1, 39, 1, 39, 5, 39, 640, 8, 39, 10, 39, 12, 39, 643, 9, 39, 1, 40, 1, 40, 1, 40, 4, 40, 648, 8, 40, 11, 40, 12, 40, 649, 1, 41, 1, 41, 1, 41, 4, 41, 655, 8, 41, 11, 41, 12, 41, 656, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 3, 42, 668, 8, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 4, 44, 684, 8, 44, 11, 44, 12, 44, 685, 1, 45, 1, 45, 1, 45, 4, 45, 691, 8, 45, 11, 45, 12, 45, 692, 1, 46, 1, 46, 1, 46, 4, 46, 698, 8, 46, 11, 46, 12, 46, 699, 1, 47, 1, 47, 1, 47, 4, 47, 705, 8, 47, 11, 47, 12, 47, 706, 1, 47, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 3, 48, 715, 8, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 5, 50, 725, 8, 50, 10, 50, 12, 50, 728, 9, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 3, 51, 736, 8, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 5, 53, 746, 8, 53, 10, 53, 12, 53, 749, 9, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 3, 54, 757, 8, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 4, 56, 767, 8, 56, 11, 56, 12, 56, 768, 1, 56, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 3, 57, 777, 8, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 787, 8, 58, 3, 58, 789, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 4, 59, 798, 8, 59, 11, 59, 12, 59, 799, 1, 59, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 3, 60, 808, 8, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 4, 61, 835, 8, 61, 11, 61, 12, 61, 836, 3, 61, 839, 8, 61, 1, 62, 1, 62, 1, 62, 4, 62, 844, 8, 62, 11, 62, 12, 62, 845, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 3, 63, 857, 8, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 4, 64, 866, 8, 64, 11, 64, 12, 64, 867, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 4, 65, 875, 8, 65, 11, 65, 12, 65, 876, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 3, 66, 885, 8, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 3, 67, 894, 8, 67, 3, 67, 896, 8, 67, 1, 68, 1, 68, 4, 68, 900, 8, 68, 11, 68, 12, 68, 901, 1, 69, 1, 69, 1, 69, 4, 69, 907, 8, 69, 11, 69, 12, 69, 908, 1, 69, 1, 69, 1, 70, 1, 70, 3, 70, 915, 8, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 3, 72, 927, 8, 72, 3, 72, 929, 8, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 4, 73, 938, 8, 73, 11, 73, 12, 73, 939, 1, 73, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, 3, 74, 948, 8, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 3, 76, 962, 8, 76, 1, 76, 1, 76, 3, 76, 966, 8, 76, 1, 76, 1, 76, 1, 77, 4, 77, 971, 8, 77, 11, 77, 12, 77, 972, 1, 78, 1, 78, 1, 78, 5, 78, 978, 8, 78, 10, 78, 12, 78, 981, 9, 78, 1, 79, 4, 79, 984, 8, 79, 11, 79, 12, 79, 985, 1, 80, 1, 80, 3, 80, 990, 8, 80, 1, 80, 3, 80, 993, 8, 80, 1, 81, 3, 81, 996, 8, 81, 1, 82, 1, 82, 3, 82, 1000, 8, 82, 1, 83, 1, 83, 4, 83, 1004, 8, 83, 11, 83, 12, 83, 1005, 1, 83, 1, 83, 1, 84, 1, 84, 1, 84, 3, 84, 1013, 8, 84, 1, 84, 3, 84, 1016, 8, 84, 1, 85, 1, 85, 3, 85, 1020, 8, 85, 1, 86, 1, 86, 1, 87, 1, 87, 1, 88, 1, 88, 1, 89, 1, 89, 1, 90, 1, 90, 1, 91, 5, 91, 1033, 8, 91, 10, 91, 12, 91, 1036, 9, 91, 1, 91, 1, 91, 1, 92, 5, 92, 1041, 8, 92, 10, 92, 12, 92, 1044, 9, 92, 1, 92, 1, 92, 1, 93, 5, 93, 1049, 8, 93, 10, 93, 12, 93, 1052, 9, 93, 1, 93, 1, 93, 1, 94, 5, 94, 1057, 8, 94, 10, 94, 12, 94, 1060, 9, 94, 1, 94, 1, 94, 1, 95, 5, 95, 1065, 8, 95, 10, 95, 12, 95, 1068, 9, 95, 1, 95, 1, 95, 1, 96, 5, 96, 1073, 8, 96, 10, 96, 12, 96, 1076, 9, 96, 1, 96, 1, 96, 1, 97, 5, 97, 1081, 8, 97, 10, 97, 12, 97, 1084, 9, 97, 1, 97, 1, 97, 1, 98, 5, 98, 1089, 8, 98, 10, 98, 12, 98, 1092, 9, 98, 1, 98, 1, 98, 1, 99, 5, 99, 1097, 8, 99, 10, 99, 12, 99, 1100, 9, 99, 1, 99, 1, 99, 1, 100, 5, 100, 1105, 8, 100, 10, 100, 12, 100, 1108, 9, 100, 1, 100, 1, 100, 1, 101, 5, 101, 1113, 8, 101, 10, 101, 12, 101, 1116, 9, 101, 1, 101, 1, 101, 1, 102, 5, 102, 1121, 8, 102, 10, 102, 12, 102, 1124, 9, 102, 1, 102, 1, 102, 1, 103, 5, 103, 1129, 8, 103, 10, 103, 12, 103, 1132, 9, 103, 1, 103, 1, 103, 1, 104, 5, 104, 1137, 8, 104, 10, 104, 12, 104, 1140, 9, 104, 1, 104, 1, 104, 1, 105, 1, 105, 1, 106, 1, 106, 1, 107, 1, 107, 1, 108, 1, 108, 1, 109, 1, 109, 1, 110, 1, 110, 1, 110, 0, 0, 111, 0, 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, 204, 206, 208, 210, 212, 214, 216, 218, 220, 0, 23, 1, 0, 43, 46, 1, 0, 21, 24, 1, 0, 36, 37, 1, 0, 62, 63, 1, 0, 64, 65, 1, 0, 74, 77, 1, 0, 109, 111, 1, 0, 86, 92, 2, 0, 81, 84, 93, 94, 1, 0, 96, 97, 1, 0, 106, 107, 1, 0, 113, 114, 2, 0, 14, 14, 127, 129, 2, 0, 53, 53, 128, 128, 3, 0, 53, 53, 128, 129, 134, 134, 2, 0, 130, 130, 133, 133, 1, 0, 131, 133, 1, 0, 32, 33, 1, 0, 34, 35, 1, 0, 1, 2, 1, 0, 28, 29, 1, 0, 38, 39, 1, 0, 57, 58, 1216, 0, 229, 1, 0, 0, 0, 2, 240, 1, 0, 0, 0, 4, 244, 1, 0, 0, 0, 6, 249, 1, 0, 0, 0, 8, 253, 1, 0, 0, 0, 10, 257, 1, 0, 0, 0, 12, 265, 1, 0, 0, 0, 14, 274, 1, 0, 0, 0, 16, 278, 1, 0, 0, 0, 18, 293, 1, 0, 0, 0, 20, 305, 1, 0, 0, 0, 22, 316, 1, 0, 0, 0, 24, 334, 1, 0, 0, 0, 26, 336, 1, 0, 0, 0, 28, 354, 1, 0, 0, 0, 30, 367, 1, 0, 0, 0, 32, 382, 1, 0, 0, 0, 34, 398, 1, 0, 0, 0, 36, 402, 1, 0, 0, 0, 38, 405, 1, 0, 0, 0, 40, 408, 1, 0, 0, 0, 42, 413, 1, 0, 0, 0, 44, 430, 1, 0, 0, 0, 46, 432, 1, 0, 0, 0, 48, 455, 1, 0, 0, 0, 50, 478, 1, 0, 0, 0, 52, 540, 1, 0, 0, 0, 54, 549, 1, 0, 0, 0, 56, 558, 1, 0, 0, 0, 58, 560, 1, 0, 0, 0, 60, 564, 1, 0, 0, 0, 62, 570, 1, 0, 0, 0, 64, 581, 1, 0, 0, 0, 66, 587, 1, 0, 0, 0, 68, 600, 1, 0, 0, 0, 70, 609, 1, 0, 0, 0, 72, 611, 1, 0, 0, 0, 74, 625, 1, 0, 0, 0, 76, 629, 1, 0, 0, 0, 78, 635, 1, 0, 0, 0, 80, 644, 1, 0, 0, 0, 82, 651, 1, 0, 0, 0, 84, 667, 1, 0, 0, 0, 86, 671, 1, 0, 0, 0, 88, 680, 1, 0, 0, 0, 90, 687, 1, 0, 0, 0, 92, 694, 1, 0, 0, 0, 94, 701, 1, 0, 0, 0, 96, 714, 1, 0, 0, 0, 98, 718, 1, 0, 0, 0, 100, 721, 1, 0, 0, 0, 102, 735, 1, 0, 0, 0, 104, 739, 1, 0, 0, 0, 106, 742, 1, 0, 0, 0, 108, 756, 1, 0, 0, 0, 110, 760, 1, 0, 0, 0, 112, 763, 1, 0, 0, 0, 114, 776, 1, 0, 0, 0, 116, 780, 1, 0, 0, 0, 118, 794, 1, 0, 0, 0, 120, 807, 1, 0, 0, 0, 122, 838, 1, 0, 0, 0, 124, 840, 1, 0, 0, 0, 126, 856, 1, 0, 0, 0, 128, 860, 1, 0, 0, 0, 130, 871, 1, 0, 0, 0, 132, 884, 1, 0, 0, 0, 134, 888, 1, 0, 0, 0, 136, 897, 1, 0, 0, 0, 138, 903, 1, 0, 0, 0, 140, 914, 1, 0, 0, 0, 142, 918, 1, 0, 0, 0, 144, 921, 1, 0, 0, 0, 146, 934, 1, 0, 0, 0, 148, 947, 1, 0, 0, 0, 150, 951, 1, 0, 0, 0, 152, 955, 1, 0, 0, 0, 154, 970, 1, 0, 0, 0, 156, 974, 1, 0, 0, 0, 158, 983, 1, 0, 0, 0, 160, 989, 1, 0, 0, 0, 162, 995, 1, 0, 0, 0, 164, 999, 1, 0, 0, 0, 166, 1001, 1, 0, 0, 0, 168, 1015, 1, 0, 0, 0, 170, 1019, 1, 0, 0, 0, 172, 1021, 1, 0, 0, 0, 174, 1023, 1, 0, 0, 0, 176, 1025, 1, 0, 0, 0, 178, 1027, 1, 0, 0, 0, 180, 1029, 1, 0, 0, 0, 182, 1034, 1, 0, 0, 0, 184, 1042, 1, 0, 0, 0, 186, 1050, 1, 0, 0, 0, 188, 1058, 1, 0, 0, 0, 190, 1066, 1, 0, 0, 0, 192, 1074, 1, 0, 0, 0, 194, 1082, 1, 0, 0, 0, 196, 1090, 1, 0, 0, 0, 198, 1098, 1, 0, 0, 0, 200, 1106, 1, 0, 0, 0, 202, 1114, 1, 0, 0, 0, 204, 1122, 1, 0, 0, 0, 206, 1130, 1, 0, 0, 0, 208, 1138, 1, 0, 0, 0, 210, 1143, 1, 0, 0, 0, 212, 1145, 1, 0, 0, 0, 214, 1147, 1, 0, 0, 0, 216, 1149, 1, 0, 0, 0, 218, 1151, 1, 0, 0, 0, 220, 1153, 1, 0, 0, 0, 222, 228, 3, 2, 1, 0, 223, 228, 3, 16, 8, 0, 224, 228, 3, 18, 9, 0, 225, 228, 3, 20, 10, 0, 226, 228, 3, 22, 11, 0, 227, 222, 1, 0, 0, 0, 227, 223, 1, 0, 0, 0, 227, 224, 1, 0, 0, 0, 227, 225, 1, 0, 0, 0, 227, 226, 1, 0, 0, 0, 228, 231, 1, 0, 0, 0, 229, 227, 1, 0, 0, 0, 229, 230, 1, 0, 0, 0, 230, 232, 1, 0, 0, 0, 231, 229, 1, 0, 0, 0, 232, 233, 5, 0, 0, 1, 233, 1, 1, 0, 0, 0, 234, 241, 3, 4, 2, 0, 235, 241, 3, 6, 3, 0, 236, 241, 3, 8, 4, 0, 237, 241, 3, 10, 5, 0, 238, 241, 3, 12, 6, 0, 239, 241, 3, 14, 7, 0, 240, 234, 1, 0, 0, 0, 240, 235, 1, 0, 0, 0, 240, 236, 1, 0, 0, 0, 240, 237, 1, 0, 0, 0, 240, 238, 1, 0, 0, 0, 240, 239, 1, 0, 0, 0, 241, 242, 1, 0, 0, 0, 242, 243, 5, 120, 0, 0, 243, 3, 1, 0, 0, 0, 244, 245, 5, 5, 0, 0, 245, 246, 5, 141, 0, 0, 246, 247, 5, 142, 0, 0, 247, 248, 5, 143, 0, 0, 248, 5, 1, 0, 0, 0, 249, 250, 5, 125, 0, 0, 250, 251, 5, 121, 0, 0, 251, 252, 3, 164, 82, 0, 252, 7, 1, 0, 0, 0, 253, 254, 5, 10, 0, 0, 254, 255, 3, 176, 88, 0, 255, 256, 3, 176, 88, 0, 256, 9, 1, 0, 0, 0, 257, 260, 5, 54, 0, 0, 258, 261, 3, 170, 85, 0, 259, 261, 3, 164, 82, 0, 260, 258, 1, 0, 0, 0, 260, 259, 1, 0, 0, 0, 261, 262, 1, 0, 0, 0, 262, 263, 3, 152, 76, 0, 263, 264, 5, 125, 0, 0, 264, 11, 1, 0, 0, 0, 265, 266, 5, 51, 0, 0, 266, 267, 5, 133, 0, 0, 267, 270, 5, 133, 0, 0, 268, 269, 5, 49, 0, 0, 269, 271, 5, 133, 0, 0, 270, 268, 1, 0, 0, 0, 270, 271, 1, 0, 0, 0, 271, 272, 1, 0, 0, 0, 272, 273, 3, 174, 87, 0, 273, 13, 1, 0, 0, 0, 274, 275, 5, 52, 0, 0, 275, 276, 3, 56, 28, 0, 276, 277, 3, 174, 87, 0, 277, 15, 1, 0, 0, 0, 278, 279, 5, 6, 0, 0, 279, 281, 3, 176, 88, 0, 280, 282, 5, 25, 0, 0, 281, 280, 1, 0, 0, 0, 281, 282, 1, 0, 0, 0, 282, 283, 1, 0, 0, 0, 283, 285, 5, 115, 0, 0, 284, 286, 3, 24, 12, 0, 285, 284, 1, 0, 0, 0, 286, 287, 1, 0, 0, 0, 287, 285, 1, 0, 0, 0, 287, 288, 1, 0, 0, 0, 288, 289, 1, 0, 0, 0, 289, 290, 5, 116, 0, 0, 290, 291, 3, 176, 88, 0, 291, 292, 5, 120, 0, 0, 292, 17, 1, 0, 0, 0, 293, 303, 5, 7, 0, 0, 294, 304, 3, 72, 36, 0, 295, 304, 3, 82, 41, 0, 296, 304, 3, 94, 47, 0, 297, 304, 3, 100, 50, 0, 298, 304, 3, 106, 53, 0, 299, 304, 3, 112, 56, 0, 300, 304, 3, 118, 59, 0, 301, 304, 3, 124, 62, 0, 302, 304, 3, 146, 73, 0, 303, 294, 1, 0, 0, 0, 303, 295, 1, 0, 0, 0, 303, 296, 1, 0, 0, 0, 303, 297, 1, 0, 0, 0, 303, 298, 1, 0, 0, 0, 303, 299, 1, 0, 0, 0, 303, 300, 1, 0, 0, 0, 303, 301, 1, 0, 0, 0, 303, 302, 1, 0, 0, 0, 304, 19, 1, 0, 0, 0, 305, 306, 3, 214, 107, 0, 306, 307, 5, 136, 0, 0, 307, 311, 5, 137, 0, 0, 308, 310, 5, 139, 0, 0, 309, 308, 1, 0, 0, 0, 310, 313, 1, 0, 0, 0, 311, 309, 1, 0, 0, 0, 311, 312, 1, 0, 0, 0, 312, 314, 1, 0, 0, 0, 313, 311, 1, 0, 0, 0, 314, 315, 5, 138, 0, 0, 315, 21, 1, 0, 0, 0, 316, 317, 5, 12, 0, 0, 317, 319, 3, 174, 87, 0, 318, 320, 5, 25, 0, 0, 319, 318, 1, 0, 0, 0, 319, 320, 1, 0, 0, 0, 320, 321, 1, 0, 0, 0, 321, 323, 5, 115, 0, 0, 322, 324, 3, 34, 17, 0, 323, 322, 1, 0, 0, 0, 324, 325, 1, 0, 0, 0, 325, 323, 1, 0, 0, 0, 325, 326, 1, 0, 0, 0, 326, 327, 1, 0, 0, 0, 327, 328, 5, 116, 0, 0, 328, 329, 3, 174, 87, 0, 329, 330, 5, 120, 0, 0, 330, 23, 1, 0, 0, 0, 331, 335, 3, 34, 17, 0, 332, 335, 3, 26, 13, 0, 333, 335, 3, 28, 14, 0, 334, 331, 1, 0, 0, 0, 334, 332, 1, 0, 0, 0, 334, 333, 1, 0, 0, 0, 335, 25, 1, 0, 0, 0, 336, 337, 5, 12, 0, 0, 337, 350, 3, 174, 87, 0, 338, 340, 5, 25, 0, 0, 339, 338, 1, 0, 0, 0, 339, 340, 1, 0, 0, 0, 340, 341, 1, 0, 0, 0, 341, 343, 5, 115, 0, 0, 342, 344, 3, 34, 17, 0, 343, 342, 1, 0, 0, 0, 344, 345, 1, 0, 0, 0, 345, 343, 1, 0, 0, 0, 345, 346, 1, 0, 0, 0, 346, 347, 1, 0, 0, 0, 347, 348, 5, 116, 0, 0, 348, 349, 3, 174, 87, 0, 349, 351, 1, 0, 0, 0, 350, 339, 1, 0, 0, 0, 350, 351, 1, 0, 0, 0, 351, 352, 1, 0, 0, 0, 352, 353, 5, 120, 0, 0, 353, 27, 1, 0, 0, 0, 354, 355, 5, 42, 0, 0, 355, 359, 5, 115, 0, 0, 356, 358, 3, 30, 15, 0, 357, 356, 1, 0, 0, 0, 358, 361, 1, 0, 0, 0, 359, 357, 1, 0, 0, 0, 359, 360, 1, 0, 0, 0, 360, 362, 1, 0, 0, 0, 361, 359, 1, 0, 0, 0, 362, 363, 5, 116, 0, 0, 363, 364, 5, 120, 0, 0, 364, 29, 1, 0, 0, 0, 365, 368, 3, 32, 16, 0, 366, 368, 3, 4, 2, 0, 367, 365, 1, 0, 0, 0, 367, 366, 1, 0, 0, 0, 368, 369, 1, 0, 0, 0, 369, 370, 5, 120, 0, 0, 370, 31, 1, 0, 0, 0, 371, 372, 7, 0, 0, 0, 372, 374, 5, 115, 0, 0, 373, 375, 3, 140, 70, 0, 374, 373, 1, 0, 0, 0, 375, 376, 1, 0, 0, 0, 376, 374, 1, 0, 0, 0, 376, 377, 1, 0, 0, 0, 377, 378, 1, 0, 0, 0, 378, 379, 5, 116, 0, 0, 379, 383, 1, 0, 0, 0, 380, 381, 5, 47, 0, 0, 381, 383, 3, 180, 90, 0, 382, 371, 1, 0, 0, 0, 382, 380, 1, 0, 0, 0, 383, 33, 1, 0, 0, 0, 384, 399, 3, 36, 18, 0, 385, 399, 3, 38, 19, 0, 386, 399, 3, 40, 20, 0, 387, 399, 3, 42, 21, 0, 388, 399, 3, 6, 3, 0, 389, 399, 3, 46, 23, 0, 390, 399, 3, 48, 24, 0, 391, 399, 3, 10, 5, 0, 392, 399, 3, 50, 25, 0, 393, 399, 3, 64, 32, 0, 394, 399, 3, 66, 33, 0, 395, 399, 3, 68, 34, 0, 396, 399, 3, 70, 35, 0, 397, 399, 3, 4, 2, 0, 398, 384, 1, 0, 0, 0, 398, 385, 1, 0, 0, 0, 398, 386, 1, 0, 0, 0, 398, 387, 1, 0, 0, 0, 398, 388, 1, 0, 0, 0, 398, 389, 1, 0, 0, 0, 398, 390, 1, 0, 0, 0, 398, 391, 1, 0, 0, 0, 398, 392, 1, 0, 0, 0, 398, 393, 1, 0, 0, 0, 398, 394, 1, 0, 0, 0, 398, 395, 1, 0, 0, 0, 398, 396, 1, 0, 0, 0, 398, 397, 1, 0, 0, 0, 399, 400, 1, 0, 0, 0, 400, 401, 5, 120, 0, 0, 401, 35, 1, 0, 0, 0, 402, 403, 5, 6, 0, 0, 403, 404, 3, 176, 88, 0, 404, 37, 1, 0, 0, 0, 405, 406, 5, 8, 0, 0, 406, 407, 3, 176, 88, 0, 407, 39, 1, 0, 0, 0, 408, 409, 5, 9, 0, 0, 409, 411, 3, 176, 88, 0, 410, 412, 7, 1, 0, 0, 411, 410, 1, 0, 0, 0, 411, 412, 1, 0, 0, 0, 412, 41, 1, 0, 0, 0, 413, 420, 5, 13, 0, 0, 414, 421, 5, 133, 0, 0, 415, 417, 3, 44, 22, 0, 416, 415, 1, 0, 0, 0, 417, 418, 1, 0, 0, 0, 418, 416, 1, 0, 0, 0, 418, 419, 1, 0, 0, 0, 419, 421, 1, 0, 0, 0, 420, 414, 1, 0, 0, 0, 420, 416, 1, 0, 0, 0, 421, 43, 1, 0, 0, 0, 422, 431, 5, 15, 0, 0, 423, 431, 5, 16, 0, 0, 424, 431, 5, 17, 0, 0, 425, 431, 5, 18, 0, 0, 426, 427, 5, 20, 0, 0, 427, 431, 3, 164, 82, 0, 428, 429, 5, 19, 0, 0, 429, 431, 3, 164, 82, 0, 430, 422, 1, 0, 0, 0, 430, 423, 1, 0, 0, 0, 430, 424, 1, 0, 0, 0, 430, 425, 1, 0, 0, 0, 430, 426, 1, 0, 0, 0, 430, 428, 1, 0, 0, 0, 431, 45, 1, 0, 0, 0, 432, 436, 5, 31, 0, 0, 433, 437, 3, 210, 105, 0, 434, 437, 3, 212, 106, 0, 435, 437, 3, 218, 109, 0, 436, 433, 1, 0, 0, 0, 436, 434, 1, 0, 0, 0, 436, 435, 1, 0, 0, 0, 437, 438, 1, 0, 0, 0, 438, 443, 3, 154, 77, 0, 439, 440, 5, 123, 0, 0, 440, 442, 3, 154, 77, 0, 441, 439, 1, 0, 0, 0, 442, 445, 1, 0, 0, 0, 443, 441, 1, 0, 0, 0, 443, 444, 1, 0, 0, 0, 444, 47, 1, 0, 0, 0, 445, 443, 1, 0, 0, 0, 446, 447, 5, 30, 0, 0, 447, 452, 3, 154, 77, 0, 448, 449, 5, 123, 0, 0, 449, 451, 3, 154, 77, 0, 450, 448, 1, 0, 0, 0, 451, 454, 1, 0, 0, 0, 452, 450, 1, 0, 0, 0, 452, 453, 1, 0, 0, 0, 453, 456, 1, 0, 0, 0, 454, 452, 1, 0, 0, 0, 455, 446, 1, 0, 0, 0, 455, 456, 1, 0, 0, 0, 456, 475, 1, 0, 0, 0, 457, 458, 3, 212, 106, 0, 458, 464, 3, 154, 77, 0, 459, 462, 5, 36, 0, 0, 460, 463, 5, 60, 0, 0, 461, 463, 3, 154, 77, 0, 462, 460, 1, 0, 0, 0, 462, 461, 1, 0, 0, 0, 463, 465, 1, 0, 0, 0, 464, 459, 1, 0, 0, 0, 464, 465, 1, 0, 0, 0, 465, 476, 1, 0, 0, 0, 466, 467, 3, 210, 105, 0, 467, 473, 3, 154, 77, 0, 468, 471, 7, 2, 0, 0, 469, 472, 5, 60, 0, 0, 470, 472, 3, 154, 77, 0, 471, 469, 1, 0, 0, 0, 471, 470, 1, 0, 0, 0, 472, 474, 1, 0, 0, 0, 473, 468, 1, 0, 0, 0, 473, 474, 1, 0, 0, 0, 474, 476, 1, 0, 0, 0, 475, 457, 1, 0, 0, 0, 475, 466, 1, 0, 0, 0, 476, 49, 1, 0, 0, 0, 477, 479, 3, 216, 108, 0, 478, 477, 1, 0, 0, 0, 478, 479, 1, 0, 0, 0, 479, 480, 1, 0, 0, 0, 480, 482, 3, 218, 109, 0, 481, 483, 3, 158, 79, 0, 482, 481, 1, 0, 0, 0, 482, 483, 1, 0, 0, 0, 483, 538, 1, 0, 0, 0, 484, 488, 3, 54, 27, 0, 485, 487, 3, 52, 26, 0, 486, 485, 1, 0, 0, 0, 487, 490, 1, 0, 0, 0, 488, 486, 1, 0, 0, 0, 488, 489, 1, 0, 0, 0, 489, 539, 1, 0, 0, 0, 490, 488, 1, 0, 0, 0, 491, 492, 5, 12, 0, 0, 492, 494, 3, 174, 87, 0, 493, 491, 1, 0, 0, 0, 494, 495, 1, 0, 0, 0, 495, 493, 1, 0, 0, 0, 495, 496, 1, 0, 0, 0, 496, 500, 1, 0, 0, 0, 497, 499, 3, 156, 78, 0, 498, 497, 1, 0, 0, 0, 499, 502, 1, 0, 0, 0, 500, 498, 1, 0, 0, 0, 500, 501, 1, 0, 0, 0, 501, 539, 1, 0, 0, 0, 502, 500, 1, 0, 0, 0, 503, 504, 5, 55, 0, 0, 504, 506, 3, 58, 29, 0, 505, 507, 3, 158, 79, 0, 506, 505, 1, 0, 0, 0, 506, 507, 1, 0, 0, 0, 507, 539, 1, 0, 0, 0, 508, 509, 5, 56, 0, 0, 509, 511, 3, 158, 79, 0, 510, 512, 3, 60, 30, 0, 511, 510, 1, 0, 0, 0, 512, 513, 1, 0, 0, 0, 513, 511, 1, 0, 0, 0, 513, 514, 1, 0, 0, 0, 514, 516, 1, 0, 0, 0, 515, 517, 3, 158, 79, 0, 516, 515, 1, 0, 0, 0, 516, 517, 1, 0, 0, 0, 517, 539, 1, 0, 0, 0, 518, 519, 3, 220, 110, 0, 519, 521, 3, 158, 79, 0, 520, 522, 3, 62, 31, 0, 521, 520, 1, 0, 0, 0, 522, 523, 1, 0, 0, 0, 523, 521, 1, 0, 0, 0, 523, 524, 1, 0, 0, 0, 524, 526, 1, 0, 0, 0, 525, 527, 3, 158, 79, 0, 526, 525, 1, 0, 0, 0, 526, 527, 1, 0, 0, 0, 527, 539, 1, 0, 0, 0, 528, 529, 5, 53, 0, 0, 529, 531, 3, 158, 79, 0, 530, 532, 3, 60, 30, 0, 531, 530, 1, 0, 0, 0, 532, 533, 1, 0, 0, 0, 533, 531, 1, 0, 0, 0, 533, 534, 1, 0, 0, 0, 534, 536, 1, 0, 0, 0, 535, 537, 3, 158, 79, 0, 536, 535, 1, 0, 0, 0, 536, 537, 1, 0, 0, 0, 537, 539, 1, 0, 0, 0, 538, 484, 1, 0, 0, 0, 538, 493, 1, 0, 0, 0, 538, 503, 1, 0, 0, 0, 538, 508, 1, 0, 0, 0, 538, 518, 1, 0, 0, 0, 538, 528, 1, 0, 0, 0, 539, 51, 1, 0, 0, 0, 540, 542, 3, 160, 80, 0, 541, 543, 3, 54, 27, 0, 542, 541, 1, 0, 0, 0, 542, 543, 1, 0, 0, 0, 543, 53, 1, 0, 0, 0, 544, 545, 5, 26, 0, 0, 545, 546, 3, 174, 87, 0, 546, 547, 5, 27, 0, 0, 547, 550, 1, 0, 0, 0, 548, 550, 3, 56, 28, 0, 549, 544, 1, 0, 0, 0, 549, 548, 1, 0, 0, 0, 550, 55, 1, 0, 0, 0, 551, 552, 5, 26, 0, 0, 552, 553, 5, 133, 0, 0, 553, 554, 5, 133, 0, 0, 554, 555, 5, 133, 0, 0, 555, 556, 5, 133, 0, 0, 556, 559, 5, 27, 0, 0, 557, 559, 5, 133, 0, 0, 558, 551, 1, 0, 0, 0, 558, 557, 1, 0, 0, 0, 559, 57, 1, 0, 0, 0, 560, 561, 3, 160, 80, 0, 561, 562, 3, 152, 76, 0, 562, 563, 3, 152, 76, 0, 563, 59, 1, 0, 0, 0, 564, 565, 3, 152, 76, 0, 565, 566, 5, 53, 0, 0, 566, 568, 5, 125, 0, 0, 567, 569, 5, 122, 0, 0, 568, 567, 1, 0, 0, 0, 568, 569, 1, 0, 0, 0, 569, 61, 1, 0, 0, 0, 570, 573, 3, 152, 76, 0, 571, 572, 5, 53, 0, 0, 572, 574, 5, 125, 0, 0, 573, 571, 1, 0, 0, 0, 573, 574, 1, 0, 0, 0, 574, 576, 1, 0, 0, 0, 575, 577, 5, 59, 0, 0, 576, 575, 1, 0, 0, 0, 576, 577, 1, 0, 0, 0, 577, 579, 1, 0, 0, 0, 578, 580, 5, 122, 0, 0, 579, 578, 1, 0, 0, 0, 579, 580, 1, 0, 0, 0, 580, 63, 1, 0, 0, 0, 581, 583, 5, 40, 0, 0, 582, 584, 3, 178, 89, 0, 583, 582, 1, 0, 0, 0, 584, 585, 1, 0, 0, 0, 585, 583, 1, 0, 0, 0, 585, 586, 1, 0, 0, 0, 586, 65, 1, 0, 0, 0, 587, 594, 5, 48, 0, 0, 588, 592, 3, 180, 90, 0, 589, 590, 3, 180, 90, 0, 590, 591, 3, 180, 90, 0, 591, 593, 1, 0, 0, 0, 592, 589, 1, 0, 0, 0, 592, 593, 1, 0, 0, 0, 593, 595, 1, 0, 0, 0, 594, 588, 1, 0, 0, 0, 594, 595, 1, 0, 0, 0, 595, 596, 1, 0, 0, 0, 596, 597, 5, 124, 0, 0, 597, 598, 5, 144, 0, 0, 598, 599, 5, 145, 0, 0, 599, 67, 1, 0, 0, 0, 600, 601, 5, 41, 0, 0, 601, 603, 5, 115, 0, 0, 602, 604, 3, 140, 70, 0, 603, 602, 1, 0, 0, 0, 604, 605, 1, 0, 0, 0, 605, 603, 1, 0, 0, 0, 605, 606, 1, 0, 0, 0, 606, 607, 1, 0, 0, 0, 607, 608, 5, 116, 0, 0, 608, 69, 1, 0, 0, 0, 609, 610, 5, 11, 0, 0, 610, 71, 1, 0, 0, 0, 611, 612, 5, 61, 0, 0, 612, 614, 5, 115, 0, 0, 613, 615, 3, 74, 37, 0, 614, 613, 1, 0, 0, 0, 615, 616, 1, 0, 0, 0, 616, 614, 1, 0, 0, 0, 616, 617, 1, 0, 0, 0, 617, 618, 1, 0, 0, 0, 618, 619, 5, 116, 0, 0, 619, 620, 5, 61, 0, 0, 620, 621, 5, 120, 0, 0, 621, 73, 1, 0, 0, 0, 622, 626, 3, 76, 38, 0, 623, 626, 3, 78, 39, 0, 624, 626, 3, 4, 2, 0, 625, 622, 1, 0, 0, 0, 625, 623, 1, 0, 0, 0, 625, 624, 1, 0, 0, 0, 626, 627, 1, 0, 0, 0, 627, 628, 5, 120, 0, 0, 628, 75, 1, 0, 0, 0, 629, 631, 7, 3, 0, 0, 630, 632, 3, 176, 88, 0, 631, 630, 1, 0, 0, 0, 632, 633, 1, 0, 0, 0, 633, 631, 1, 0, 0, 0, 633, 634, 1, 0, 0, 0, 634, 77, 1, 0, 0, 0, 635, 636, 7, 4, 0, 0, 636, 641, 3, 80, 40, 0, 637, 638, 5, 123, 0, 0, 638, 640, 3, 80, 40, 0, 639, 637, 1, 0, 0, 0, 640, 643, 1, 0, 0, 0, 641, 639, 1, 0, 0, 0, 641, 642, 1, 0, 0, 0, 642, 79, 1, 0, 0, 0, 643, 641, 1, 0, 0, 0, 644, 645, 3, 176, 88, 0, 645, 647, 3, 176, 88, 0, 646, 648, 5, 133, 0, 0, 647, 646, 1, 0, 0, 0, 648, 649, 1, 0, 0, 0, 649, 647, 1, 0, 0, 0, 649, 650, 1, 0, 0, 0, 650, 81, 1, 0, 0, 0, 651, 652, 5, 66, 0, 0, 652, 654, 5, 115, 0, 0, 653, 655, 3, 84, 42, 0, 654, 653, 1, 0, 0, 0, 655, 656, 1, 0, 0, 0, 656, 654, 1, 0, 0, 0, 656, 657, 1, 0, 0, 0, 657, 658, 1, 0, 0, 0, 658, 659, 5, 116, 0, 0, 659, 660, 5, 66, 0, 0, 660, 661, 5, 120, 0, 0, 661, 83, 1, 0, 0, 0, 662, 668, 3, 86, 43, 0, 663, 668, 3, 88, 44, 0, 664, 668, 3, 90, 45, 0, 665, 668, 3, 92, 46, 0, 666, 668, 3, 4, 2, 0, 667, 662, 1, 0, 0, 0, 667, 663, 1, 0, 0, 0, 667, 664, 1, 0, 0, 0, 667, 665, 1, 0, 0, 0, 667, 666, 1, 0, 0, 0, 668, 669, 1, 0, 0, 0, 669, 670, 5, 120, 0, 0, 670, 85, 1, 0, 0, 0, 671, 672, 5, 67, 0, 0, 672, 673, 3, 162, 81, 0, 673, 674, 5, 123, 0, 0, 674, 675, 3, 162, 81, 0, 675, 676, 5, 123, 0, 0, 676, 677, 3, 162, 81, 0, 677, 678, 5, 123, 0, 0, 678, 679, 3, 162, 81, 0, 679, 87, 1, 0, 0, 0, 680, 681, 5, 68, 0, 0, 681, 683, 3, 154, 77, 0, 682, 684, 5, 133, 0, 0, 683, 682, 1, 0, 0, 0, 684, 685, 1, 0, 0, 0, 685, 683, 1, 0, 0, 0, 685, 686, 1, 0, 0, 0, 686, 89, 1, 0, 0, 0, 687, 688, 5, 69, 0, 0, 688, 690, 3, 154, 77, 0, 689, 691, 5, 133, 0, 0, 690, 689, 1, 0, 0, 0, 691, 692, 1, 0, 0, 0, 692, 690, 1, 0, 0, 0, 692, 693, 1, 0, 0, 0, 693, 91, 1, 0, 0, 0, 694, 695, 5, 70, 0, 0, 695, 697, 3, 154, 77, 0, 696, 698, 5, 133, 0, 0, 697, 696, 1, 0, 0, 0, 698, 699, 1, 0, 0, 0, 699, 697, 1, 0, 0, 0, 699, 700, 1, 0, 0, 0, 700, 93, 1, 0, 0, 0, 701, 702, 5, 71, 0, 0, 702, 704, 5, 115, 0, 0, 703, 705, 3, 96, 48, 0, 704, 703, 1, 0, 0, 0, 705, 706, 1, 0, 0, 0, 706, 704, 1, 0, 0, 0, 706, 707, 1, 0, 0, 0, 707, 708, 1, 0, 0, 0, 708, 709, 5, 116, 0, 0, 709, 710, 5, 71, 0, 0, 710, 711, 5, 120, 0, 0, 711, 95, 1, 0, 0, 0, 712, 715, 3, 98, 49, 0, 713, 715, 3, 4, 2, 0, 714, 712, 1, 0, 0, 0, 714, 713, 1, 0, 0, 0, 715, 716, 1, 0, 0, 0, 716, 717, 5, 120, 0, 0, 717, 97, 1, 0, 0, 0, 718, 719, 5, 72, 0, 0, 719, 720, 5, 130, 0, 0, 720, 99, 1, 0, 0, 0, 721, 722, 5, 73, 0, 0, 722, 726, 5, 115, 0, 0, 723, 725, 3, 102, 51, 0, 724, 723, 1, 0, 0, 0, 725, 728, 1, 0, 0, 0, 726, 724, 1, 0, 0, 0, 726, 727, 1, 0, 0, 0, 727, 729, 1, 0, 0, 0, 728, 726, 1, 0, 0, 0, 729, 730, 5, 116, 0, 0, 730, 731, 5, 73, 0, 0, 731, 732, 5, 120, 0, 0, 732, 101, 1, 0, 0, 0, 733, 736, 3, 104, 52, 0, 734, 736, 3, 4, 2, 0, 735, 733, 1, 0, 0, 0, 735, 734, 1, 0, 0, 0, 736, 737, 1, 0, 0, 0, 737, 738, 5, 120, 0, 0, 738, 103, 1, 0, 0, 0, 739, 740, 7, 5, 0, 0, 740, 741, 5, 133, 0, 0, 741, 105, 1, 0, 0, 0, 742, 743, 5, 108, 0, 0, 743, 747, 5, 115, 0, 0, 744, 746, 3, 108, 54, 0, 745, 744, 1, 0, 0, 0, 746, 749, 1, 0, 0, 0, 747, 745, 1, 0, 0, 0, 747, 748, 1, 0, 0, 0, 748, 750, 1, 0, 0, 0, 749, 747, 1, 0, 0, 0, 750, 751, 5, 116, 0, 0, 751, 752, 5, 108, 0, 0, 752, 753, 5, 120, 0, 0, 753, 107, 1, 0, 0, 0, 754, 757, 3, 110, 55, 0, 755, 757, 3, 4, 2, 0, 756, 754, 1, 0, 0, 0, 756, 755, 1, 0, 0, 0, 757, 758, 1, 0, 0, 0, 758, 759, 5, 120, 0, 0, 759, 109, 1, 0, 0, 0, 760, 761, 7, 6, 0, 0, 761, 762, 5, 133, 0, 0, 762, 111, 1, 0, 0, 0, 763, 764, 5, 78, 0, 0, 764, 766, 5, 115, 0, 0, 765, 767, 3, 114, 57, 0, 766, 765, 1, 0, 0, 0, 767, 768, 1, 0, 0, 0, 768, 766, 1, 0, 0, 0, 768, 769, 1, 0, 0, 0, 769, 770, 1, 0, 0, 0, 770, 771, 5, 116, 0, 0, 771, 772, 5, 78, 0, 0, 772, 773, 5, 120, 0, 0, 773, 113, 1, 0, 0, 0, 774, 777, 3, 116, 58, 0, 775, 777, 3, 4, 2, 0, 776, 774, 1, 0, 0, 0, 776, 775, 1, 0, 0, 0, 777, 778, 1, 0, 0, 0, 778, 779, 5, 120, 0, 0, 779, 115, 1, 0, 0, 0, 780, 781, 5, 79, 0, 0, 781, 788, 3, 180, 90, 0, 782, 786, 3, 180, 90, 0, 783, 784, 3, 180, 90, 0, 784, 785, 3, 180, 90, 0, 785, 787, 1, 0, 0, 0, 786, 783, 1, 0, 0, 0, 786, 787, 1, 0, 0, 0, 787, 789, 1, 0, 0, 0, 788, 782, 1, 0, 0, 0, 788, 789, 1, 0, 0, 0, 789, 790, 1, 0, 0, 0, 790, 791, 5, 124, 0, 0, 791, 792, 5, 144, 0, 0, 792, 793, 5, 145, 0, 0, 793, 117, 1, 0, 0, 0, 794, 795, 5, 80, 0, 0, 795, 797, 5, 115, 0, 0, 796, 798, 3, 120, 60, 0, 797, 796, 1, 0, 0, 0, 798, 799, 1, 0, 0, 0, 799, 797, 1, 0, 0, 0, 799, 800, 1, 0, 0, 0, 800, 801, 1, 0, 0, 0, 801, 802, 5, 116, 0, 0, 802, 803, 5, 80, 0, 0, 803, 804, 5, 120, 0, 0, 804, 119, 1, 0, 0, 0, 805, 808, 3, 122, 61, 0, 806, 808, 3, 4, 2, 0, 807, 805, 1, 0, 0, 0, 807, 806, 1, 0, 0, 0, 808, 809, 1, 0, 0, 0, 809, 810, 5, 120, 0, 0, 810, 121, 1, 0, 0, 0, 811, 812, 7, 7, 0, 0, 812, 839, 5, 133, 0, 0, 813, 814, 7, 8, 0, 0, 814, 839, 5, 133, 0, 0, 815, 816, 5, 98, 0, 0, 816, 839, 3, 180, 90, 0, 817, 818, 5, 95, 0, 0, 818, 819, 5, 124, 0, 0, 819, 820, 5, 144, 0, 0, 820, 839, 5, 145, 0, 0, 821, 822, 5, 85, 0, 0, 822, 823, 5, 133, 0, 0, 823, 824, 5, 133, 0, 0, 824, 825, 5, 133, 0, 0, 825, 826, 5, 133, 0, 0, 826, 827, 5, 133, 0, 0, 827, 828, 5, 133, 0, 0, 828, 829, 5, 133, 0, 0, 829, 830, 5, 133, 0, 0, 830, 831, 5, 133, 0, 0, 831, 839, 5, 133, 0, 0, 832, 834, 7, 9, 0, 0, 833, 835, 5, 133, 0, 0, 834, 833, 1, 0, 0, 0, 835, 836, 1, 0, 0, 0, 836, 834, 1, 0, 0, 0, 836, 837, 1, 0, 0, 0, 837, 839, 1, 0, 0, 0, 838, 811, 1, 0, 0, 0, 838, 813, 1, 0, 0, 0, 838, 815, 1, 0, 0, 0, 838, 817, 1, 0, 0, 0, 838, 821, 1, 0, 0, 0, 838, 832, 1, 0, 0, 0, 839, 123, 1, 0, 0, 0, 840, 841, 5, 99, 0, 0, 841, 843, 5, 115, 0, 0, 842, 844, 3, 126, 63, 0, 843, 842, 1, 0, 0, 0, 844, 845, 1, 0, 0, 0, 845, 843, 1, 0, 0, 0, 845, 846, 1, 0, 0, 0, 846, 847, 1, 0, 0, 0, 847, 848, 5, 116, 0, 0, 848, 849, 5, 99, 0, 0, 849, 850, 5, 120, 0, 0, 850, 125, 1, 0, 0, 0, 851, 857, 3, 128, 64, 0, 852, 857, 3, 130, 65, 0, 853, 857, 3, 138, 69, 0, 854, 857, 3, 142, 71, 0, 855, 857, 3, 4, 2, 0, 856, 851, 1, 0, 0, 0, 856, 852, 1, 0, 0, 0, 856, 853, 1, 0, 0, 0, 856, 854, 1, 0, 0, 0, 856, 855, 1, 0, 0, 0, 857, 858, 1, 0, 0, 0, 858, 859, 5, 120, 0, 0, 859, 127, 1, 0, 0, 0, 860, 861, 5, 102, 0, 0, 861, 862, 3, 176, 88, 0, 862, 863, 5, 133, 0, 0, 863, 865, 5, 115, 0, 0, 864, 866, 3, 140, 70, 0, 865, 864, 1, 0, 0, 0, 866, 867, 1, 0, 0, 0, 867, 865, 1, 0, 0, 0, 867, 868, 1, 0, 0, 0, 868, 869, 1, 0, 0, 0, 869, 870, 5, 116, 0, 0, 870, 129, 1, 0, 0, 0, 871, 872, 5, 103, 0, 0, 872, 874, 5, 115, 0, 0, 873, 875, 3, 132, 66, 0, 874, 873, 1, 0, 0, 0, 875, 876, 1, 0, 0, 0, 876, 874, 1, 0, 0, 0, 876, 877, 1, 0, 0, 0, 877, 878, 1, 0, 0, 0, 878, 879, 5, 116, 0, 0, 879, 131, 1, 0, 0, 0, 880, 885, 3, 144, 72, 0, 881, 885, 3, 134, 67, 0, 882, 885, 3, 136, 68, 0, 883, 885, 3, 4, 2, 0, 884, 880, 1, 0, 0, 0, 884, 881, 1, 0, 0, 0, 884, 882, 1, 0, 0, 0, 884, 883, 1, 0, 0, 0, 885, 886, 1, 0, 0, 0, 886, 887, 5, 120, 0, 0, 887, 133, 1, 0, 0, 0, 888, 889, 5, 105, 0, 0, 889, 890, 3, 176, 88, 0, 890, 895, 3, 178, 89, 0, 891, 893, 3, 178, 89, 0, 892, 894, 3, 178, 89, 0, 893, 892, 1, 0, 0, 0, 893, 894, 1, 0, 0, 0, 894, 896, 1, 0, 0, 0, 895, 891, 1, 0, 0, 0, 895, 896, 1, 0, 0, 0, 896, 135, 1, 0, 0, 0, 897, 899, 5, 104, 0, 0, 898, 900, 7, 10, 0, 0, 899, 898, 1, 0, 0, 0, 900, 901, 1, 0, 0, 0, 901, 899, 1, 0, 0, 0, 901, 902, 1, 0, 0, 0, 902, 137, 1, 0, 0, 0, 903, 904, 5, 100, 0, 0, 904, 906, 5, 115, 0, 0, 905, 907, 3, 140, 70, 0, 906, 905, 1, 0, 0, 0, 907, 908, 1, 0, 0, 0, 908, 906, 1, 0, 0, 0, 908, 909, 1, 0, 0, 0, 909, 910, 1, 0, 0, 0, 910, 911, 5, 116, 0, 0, 911, 139, 1, 0, 0, 0, 912, 915, 3, 144, 72, 0, 913, 915, 3, 4, 2, 0, 914, 912, 1, 0, 0, 0, 914, 913, 1, 0, 0, 0, 915, 916, 1, 0, 0, 0, 916, 917, 5, 120, 0, 0, 917, 141, 1, 0, 0, 0, 918, 919, 5, 101, 0, 0, 919, 920, 3, 180, 90, 0, 920, 143, 1, 0, 0, 0, 921, 928, 5, 78, 0, 0, 922, 926, 3, 180, 90, 0, 923, 924, 3, 180, 90, 0, 924, 925, 3, 180, 90, 0, 925, 927, 1, 0, 0, 0, 926, 923, 1, 0, 0, 0, 926, 927, 1, 0, 0, 0, 927, 929, 1, 0, 0, 0, 928, 922, 1, 0, 0, 0, 928, 929, 1, 0, 0, 0, 929, 930, 1, 0, 0, 0, 930, 931, 5, 124, 0, 0, 931, 932, 5, 144, 0, 0, 932, 933, 5, 145, 0, 0, 933, 145, 1, 0, 0, 0, 934, 935, 5, 112, 0, 0, 935, 937, 5, 115, 0, 0, 936, 938, 3, 148, 74, 0, 937, 936, 1, 0, 0, 0, 938, 939, 1, 0, 0, 0, 939, 937, 1, 0, 0, 0, 939, 940, 1, 0, 0, 0, 940, 941, 1, 0, 0, 0, 941, 942, 5, 116, 0, 0, 942, 943, 5, 112, 0, 0, 943, 944, 5, 120, 0, 0, 944, 147, 1, 0, 0, 0, 945, 948, 3, 150, 75, 0, 946, 948, 3, 4, 2, 0, 947, 945, 1, 0, 0, 0, 947, 946, 1, 0, 0, 0, 948, 949, 1, 0, 0, 0, 949, 950, 5, 120, 0, 0, 950, 149, 1, 0, 0, 0, 951, 952, 7, 11, 0, 0, 952, 953, 3, 170, 85, 0, 953, 954, 5, 133, 0, 0, 954, 151, 1, 0, 0, 0, 955, 956, 5, 26, 0, 0, 956, 965, 5, 50, 0, 0, 957, 958, 5, 133, 0, 0, 958, 961, 5, 133, 0, 0, 959, 960, 5, 49, 0, 0, 960, 962, 5, 133, 0, 0, 961, 959, 1, 0, 0, 0, 961, 962, 1, 0, 0, 0, 962, 966, 1, 0, 0, 0, 963, 966, 5, 60, 0, 0, 964, 966, 3, 174, 87, 0, 965, 957, 1, 0, 0, 0, 965, 963, 1, 0, 0, 0, 965, 964, 1, 0, 0, 0, 966, 967, 1, 0, 0, 0, 967, 968, 5, 27, 0, 0, 968, 153, 1, 0, 0, 0, 969, 971, 3, 156, 78, 0, 970, 969, 1, 0, 0, 0, 971, 972, 1, 0, 0, 0, 972, 970, 1, 0, 0, 0, 972, 973, 1, 0, 0, 0, 973, 155, 1, 0, 0, 0, 974, 979, 3, 160, 80, 0, 975, 976, 5, 12, 0, 0, 976, 978, 3, 174, 87, 0, 977, 975, 1, 0, 0, 0, 978, 981, 1, 0, 0, 0, 979, 977, 1, 0, 0, 0, 979, 980, 1, 0, 0, 0, 980, 157, 1, 0, 0, 0, 981, 979, 1, 0, 0, 0, 982, 984, 3, 160, 80, 0, 983, 982, 1, 0, 0, 0, 984, 985, 1, 0, 0, 0, 985, 983, 1, 0, 0, 0, 985, 986, 1, 0, 0, 0, 986, 159, 1, 0, 0, 0, 987, 990, 3, 164, 82, 0, 988, 990, 3, 170, 85, 0, 989, 987, 1, 0, 0, 0, 989, 988, 1, 0, 0, 0, 990, 992, 1, 0, 0, 0, 991, 993, 5, 122, 0, 0, 992, 991, 1, 0, 0, 0, 992, 993, 1, 0, 0, 0, 993, 161, 1, 0, 0, 0, 994, 996, 3, 164, 82, 0, 995, 994, 1, 0, 0, 0, 995, 996, 1, 0, 0, 0, 996, 163, 1, 0, 0, 0, 997, 1000, 5, 125, 0, 0, 998, 1000, 3, 166, 83, 0, 999, 997, 1, 0, 0, 0, 999, 998, 1, 0, 0, 0, 1000, 165, 1, 0, 0, 0, 1001, 1003, 5, 117, 0, 0, 1002, 1004, 3, 168, 84, 0, 1003, 1002, 1, 0, 0, 0, 1004, 1005, 1, 0, 0, 0, 1005, 1003, 1, 0, 0, 0, 1005, 1006, 1, 0, 0, 0, 1006, 1007, 1, 0, 0, 0, 1007, 1008, 5, 118, 0, 0, 1008, 167, 1, 0, 0, 0, 1009, 1012, 3, 170, 85, 0, 1010, 1011, 5, 119, 0, 0, 1011, 1013, 3, 170, 85, 0, 1012, 1010, 1, 0, 0, 0, 1012, 1013, 1, 0, 0, 0, 1013, 1016, 1, 0, 0, 0, 1014, 1016, 5, 125, 0, 0, 1015, 1009, 1, 0, 0, 0, 1015, 1014, 1, 0, 0, 0, 1016, 169, 1, 0, 0, 0, 1017, 1020, 3, 172, 86, 0, 1018, 1020, 5, 126, 0, 0, 1019, 1017, 1, 0, 0, 0, 1019, 1018, 1, 0, 0, 0, 1020, 171, 1, 0, 0, 0, 1021, 1022, 7, 12, 0, 0, 1022, 173, 1, 0, 0, 0, 1023, 1024, 7, 13, 0, 0, 1024, 175, 1, 0, 0, 0, 1025, 1026, 7, 14, 0, 0, 1026, 177, 1, 0, 0, 0, 1027, 1028, 7, 15, 0, 0, 1028, 179, 1, 0, 0, 0, 1029, 1030, 7, 16, 0, 0, 1030, 181, 1, 0, 0, 0, 1031, 1033, 3, 24, 12, 0, 1032, 1031, 1, 0, 0, 0, 1033, 1036, 1, 0, 0, 0, 1034, 1032, 1, 0, 0, 0, 1034, 1035, 1, 0, 0, 0, 1035, 1037, 1, 0, 0, 0, 1036, 1034, 1, 0, 0, 0, 1037, 1038, 5, 0, 0, 1, 1038, 183, 1, 0, 0, 0, 1039, 1041, 3, 34, 17, 0, 1040, 1039, 1, 0, 0, 0, 1041, 1044, 1, 0, 0, 0, 1042, 1040, 1, 0, 0, 0, 1042, 1043, 1, 0, 0, 0, 1043, 1045, 1, 0, 0, 0, 1044, 1042, 1, 0, 0, 0, 1045, 1046, 5, 0, 0, 1, 1046, 185, 1, 0, 0, 0, 1047, 1049, 3, 30, 15, 0, 1048, 1047, 1, 0, 0, 0, 1049, 1052, 1, 0, 0, 0, 1050, 1048, 1, 0, 0, 0, 1050, 1051, 1, 0, 0, 0, 1051, 1053, 1, 0, 0, 0, 1052, 1050, 1, 0, 0, 0, 1053, 1054, 5, 0, 0, 1, 1054, 187, 1, 0, 0, 0, 1055, 1057, 3, 74, 37, 0, 1056, 1055, 1, 0, 0, 0, 1057, 1060, 1, 0, 0, 0, 1058, 1056, 1, 0, 0, 0, 1058, 1059, 1, 0, 0, 0, 1059, 1061, 1, 0, 0, 0, 1060, 1058, 1, 0, 0, 0, 1061, 1062, 5, 0, 0, 1, 1062, 189, 1, 0, 0, 0, 1063, 1065, 3, 96, 48, 0, 1064, 1063, 1, 0, 0, 0, 1065, 1068, 1, 0, 0, 0, 1066, 1064, 1, 0, 0, 0, 1066, 1067, 1, 0, 0, 0, 1067, 1069, 1, 0, 0, 0, 1068, 1066, 1, 0, 0, 0, 1069, 1070, 5, 0, 0, 1, 1070, 191, 1, 0, 0, 0, 1071, 1073, 3, 102, 51, 0, 1072, 1071, 1, 0, 0, 0, 1073, 1076, 1, 0, 0, 0, 1074, 1072, 1, 0, 0, 0, 1074, 1075, 1, 0, 0, 0, 1075, 1077, 1, 0, 0, 0, 1076, 1074, 1, 0, 0, 0, 1077, 1078, 5, 0, 0, 1, 1078, 193, 1, 0, 0, 0, 1079, 1081, 3, 108, 54, 0, 1080, 1079, 1, 0, 0, 0, 1081, 1084, 1, 0, 0, 0, 1082, 1080, 1, 0, 0, 0, 1082, 1083, 1, 0, 0, 0, 1083, 1085, 1, 0, 0, 0, 1084, 1082, 1, 0, 0, 0, 1085, 1086, 5, 0, 0, 1, 1086, 195, 1, 0, 0, 0, 1087, 1089, 3, 84, 42, 0, 1088, 1087, 1, 0, 0, 0, 1089, 1092, 1, 0, 0, 0, 1090, 1088, 1, 0, 0, 0, 1090, 1091, 1, 0, 0, 0, 1091, 1093, 1, 0, 0, 0, 1092, 1090, 1, 0, 0, 0, 1093, 1094, 5, 0, 0, 1, 1094, 197, 1, 0, 0, 0, 1095, 1097, 3, 114, 57, 0, 1096, 1095, 1, 0, 0, 0, 1097, 1100, 1, 0, 0, 0, 1098, 1096, 1, 0, 0, 0, 1098, 1099, 1, 0, 0, 0, 1099, 1101, 1, 0, 0, 0, 1100, 1098, 1, 0, 0, 0, 1101, 1102, 5, 0, 0, 1, 1102, 199, 1, 0, 0, 0, 1103, 1105, 3, 148, 74, 0, 1104, 1103, 1, 0, 0, 0, 1105, 1108, 1, 0, 0, 0, 1106, 1104, 1, 0, 0, 0, 1106, 1107, 1, 0, 0, 0, 1107, 1109, 1, 0, 0, 0, 1108, 1106, 1, 0, 0, 0, 1109, 1110, 5, 0, 0, 1, 1110, 201, 1, 0, 0, 0, 1111, 1113, 3, 120, 60, 0, 1112, 1111, 1, 0, 0, 0, 1113, 1116, 1, 0, 0, 0, 1114, 1112, 1, 0, 0, 0, 1114, 1115, 1, 0, 0, 0, 1115, 1117, 1, 0, 0, 0, 1116, 1114, 1, 0, 0, 0, 1117, 1118, 5, 0, 0, 1, 1118, 203, 1, 0, 0, 0, 1119, 1121, 3, 126, 63, 0, 1120, 1119, 1, 0, 0, 0, 1121, 1124, 1, 0, 0, 0, 1122, 1120, 1, 0, 0, 0, 1122, 1123, 1, 0, 0, 0, 1123, 1125, 1, 0, 0, 0, 1124, 1122, 1, 0, 0, 0, 1125, 1126, 5, 0, 0, 1, 1126, 205, 1, 0, 0, 0, 1127, 1129, 3, 132, 66, 0, 1128, 1127, 1, 0, 0, 0, 1129, 1132, 1, 0, 0, 0, 1130, 1128, 1, 0, 0, 0, 1130, 1131, 1, 0, 0, 0, 1131, 1133, 1, 0, 0, 0, 1132, 1130, 1, 0, 0, 0, 1133, 1134, 5, 0, 0, 1, 1134, 207, 1, 0, 0, 0, 1135, 1137, 3, 140, 70, 0, 1136, 1135, 1, 0, 0, 0, 1137, 1140, 1, 0, 0, 0, 1138, 1136, 1, 0, 0, 0, 1138, 1139, 1, 0, 0, 0, 1139, 1141, 1, 0, 0, 0, 1140, 1138, 1, 0, 0, 0, 1141, 1142, 5, 0, 0, 1, 1142, 209, 1, 0, 0, 0, 1143, 1144, 7, 17, 0, 0, 1144, 211, 1, 0, 0, 0, 1145, 1146, 7, 18, 0, 0, 1146, 213, 1, 0, 0, 0, 1147, 1148, 7, 19, 0, 0, 1148, 215, 1, 0, 0, 0, 1149, 1150, 7, 20, 0, 0, 1150, 217, 1, 0, 0, 0, 1151, 1152, 7, 21, 0, 0, 1152, 219, 1, 0, 0, 0, 1153, 1154, 7, 22, 0, 0, 1154, 221, 1, 0, 0, 0, 122, 227, 229, 240, 260, 270, 281, 287, 303, 311, 319, 325, 334, 339, 345, 350, 359, 367, 376, 382, 398, 411, 418, 420, 430, 436, 443, 452, 455, 462, 464, 471, 473, 475, 478, 482, 488, 495, 500, 506, 513, 516, 523, 526, 533, 536, 538, 542, 549, 558, 568, 573, 576, 579, 585, 592, 594, 605, 616, 625, 633, 641, 649, 656, 667, 685, 692, 699, 706, 714, 726, 735, 747, 756, 768, 776, 786, 788, 799, 807, 836, 838, 845, 856, 867, 876, 884, 893, 895, 901, 908, 914, 926, 928, 939, 947, 961, 965, 972, 979, 985, 989, 992, 995, 999, 1005, 1012, 1015, 1019, 1034, 1042, 1050, 1058, 1066, 1074, 1082, 1090, 1098, 1106, 1114, 1122, 1130, 1138] \ No newline at end of file diff --git a/c/makeotf/lib/hotconv/FeatParserBaseVisitor.cpp b/c/makeotf/lib/hotconv/FeatParserBaseVisitor.cpp index 885df4a87..e8a30d55a 100644 --- a/c/makeotf/lib/hotconv/FeatParserBaseVisitor.cpp +++ b/c/makeotf/lib/hotconv/FeatParserBaseVisitor.cpp @@ -1,5 +1,5 @@ -// Generated from FeatParser.g4 by ANTLR 4.9.3 +// Generated from FeatParser.g4 by ANTLR 4.13.2 #include "FeatParserBaseVisitor.h" diff --git a/c/makeotf/lib/hotconv/FeatParserBaseVisitor.h b/c/makeotf/lib/hotconv/FeatParserBaseVisitor.h index 34fe5f442..3c89c6d85 100644 --- a/c/makeotf/lib/hotconv/FeatParserBaseVisitor.h +++ b/c/makeotf/lib/hotconv/FeatParserBaseVisitor.h @@ -1,5 +1,5 @@ -// Generated from FeatParser.g4 by ANTLR 4.9.3 +// Generated from FeatParser.g4 by ANTLR 4.13.2 #pragma once @@ -15,447 +15,447 @@ class FeatParserBaseVisitor : public FeatParserVisitor { public: - virtual antlrcpp::Any visitFile(FeatParser::FileContext *ctx) override { + virtual std::any visitFile(FeatParser::FileContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitTopLevelStatement(FeatParser::TopLevelStatementContext *ctx) override { + virtual std::any visitTopLevelStatement(FeatParser::TopLevelStatementContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitInclude(FeatParser::IncludeContext *ctx) override { + virtual std::any visitInclude(FeatParser::IncludeContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitGlyphClassAssign(FeatParser::GlyphClassAssignContext *ctx) override { + virtual std::any visitGlyphClassAssign(FeatParser::GlyphClassAssignContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitLangsysAssign(FeatParser::LangsysAssignContext *ctx) override { + virtual std::any visitLangsysAssign(FeatParser::LangsysAssignContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitMark_statement(FeatParser::Mark_statementContext *ctx) override { + virtual std::any visitMark_statement(FeatParser::Mark_statementContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitAnchorDef(FeatParser::AnchorDefContext *ctx) override { + virtual std::any visitAnchorDef(FeatParser::AnchorDefContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitValueRecordDef(FeatParser::ValueRecordDefContext *ctx) override { + virtual std::any visitValueRecordDef(FeatParser::ValueRecordDefContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitFeatureBlock(FeatParser::FeatureBlockContext *ctx) override { + virtual std::any visitFeatureBlock(FeatParser::FeatureBlockContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitTableBlock(FeatParser::TableBlockContext *ctx) override { + virtual std::any visitTableBlock(FeatParser::TableBlockContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitAnonBlock(FeatParser::AnonBlockContext *ctx) override { + virtual std::any visitAnonBlock(FeatParser::AnonBlockContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitLookupBlockTopLevel(FeatParser::LookupBlockTopLevelContext *ctx) override { + virtual std::any visitLookupBlockTopLevel(FeatParser::LookupBlockTopLevelContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitFeatureStatement(FeatParser::FeatureStatementContext *ctx) override { + virtual std::any visitFeatureStatement(FeatParser::FeatureStatementContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitLookupBlockOrUse(FeatParser::LookupBlockOrUseContext *ctx) override { + virtual std::any visitLookupBlockOrUse(FeatParser::LookupBlockOrUseContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitCvParameterBlock(FeatParser::CvParameterBlockContext *ctx) override { + virtual std::any visitCvParameterBlock(FeatParser::CvParameterBlockContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitCvParameterStatement(FeatParser::CvParameterStatementContext *ctx) override { + virtual std::any visitCvParameterStatement(FeatParser::CvParameterStatementContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitCvParameter(FeatParser::CvParameterContext *ctx) override { + virtual std::any visitCvParameter(FeatParser::CvParameterContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitStatement(FeatParser::StatementContext *ctx) override { + virtual std::any visitStatement(FeatParser::StatementContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitFeatureUse(FeatParser::FeatureUseContext *ctx) override { + virtual std::any visitFeatureUse(FeatParser::FeatureUseContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitScriptAssign(FeatParser::ScriptAssignContext *ctx) override { + virtual std::any visitScriptAssign(FeatParser::ScriptAssignContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitLangAssign(FeatParser::LangAssignContext *ctx) override { + virtual std::any visitLangAssign(FeatParser::LangAssignContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitLookupflagAssign(FeatParser::LookupflagAssignContext *ctx) override { + virtual std::any visitLookupflagAssign(FeatParser::LookupflagAssignContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitLookupflagElement(FeatParser::LookupflagElementContext *ctx) override { + virtual std::any visitLookupflagElement(FeatParser::LookupflagElementContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitIgnoreSubOrPos(FeatParser::IgnoreSubOrPosContext *ctx) override { + virtual std::any visitIgnoreSubOrPos(FeatParser::IgnoreSubOrPosContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitSubstitute(FeatParser::SubstituteContext *ctx) override { + virtual std::any visitSubstitute(FeatParser::SubstituteContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitPosition(FeatParser::PositionContext *ctx) override { + virtual std::any visitPosition(FeatParser::PositionContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitValuePattern(FeatParser::ValuePatternContext *ctx) override { + virtual std::any visitValuePattern(FeatParser::ValuePatternContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitValueRecord(FeatParser::ValueRecordContext *ctx) override { + virtual std::any visitValueRecord(FeatParser::ValueRecordContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitValueLiteral(FeatParser::ValueLiteralContext *ctx) override { + virtual std::any visitValueLiteral(FeatParser::ValueLiteralContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitCursiveElement(FeatParser::CursiveElementContext *ctx) override { + virtual std::any visitCursiveElement(FeatParser::CursiveElementContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitBaseToMarkElement(FeatParser::BaseToMarkElementContext *ctx) override { + virtual std::any visitBaseToMarkElement(FeatParser::BaseToMarkElementContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitLigatureMarkElement(FeatParser::LigatureMarkElementContext *ctx) override { + virtual std::any visitLigatureMarkElement(FeatParser::LigatureMarkElementContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitParameters(FeatParser::ParametersContext *ctx) override { + virtual std::any visitParameters(FeatParser::ParametersContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitSizemenuname(FeatParser::SizemenunameContext *ctx) override { + virtual std::any visitSizemenuname(FeatParser::SizemenunameContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitFeatureNames(FeatParser::FeatureNamesContext *ctx) override { + virtual std::any visitFeatureNames(FeatParser::FeatureNamesContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitSubtable(FeatParser::SubtableContext *ctx) override { + virtual std::any visitSubtable(FeatParser::SubtableContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitTable_BASE(FeatParser::Table_BASEContext *ctx) override { + virtual std::any visitTable_BASE(FeatParser::Table_BASEContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitBaseStatement(FeatParser::BaseStatementContext *ctx) override { + virtual std::any visitBaseStatement(FeatParser::BaseStatementContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitAxisTags(FeatParser::AxisTagsContext *ctx) override { + virtual std::any visitAxisTags(FeatParser::AxisTagsContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitAxisScripts(FeatParser::AxisScriptsContext *ctx) override { + virtual std::any visitAxisScripts(FeatParser::AxisScriptsContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitBaseScript(FeatParser::BaseScriptContext *ctx) override { + virtual std::any visitBaseScript(FeatParser::BaseScriptContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitTable_GDEF(FeatParser::Table_GDEFContext *ctx) override { + virtual std::any visitTable_GDEF(FeatParser::Table_GDEFContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitGdefStatement(FeatParser::GdefStatementContext *ctx) override { + virtual std::any visitGdefStatement(FeatParser::GdefStatementContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitGdefGlyphClass(FeatParser::GdefGlyphClassContext *ctx) override { + virtual std::any visitGdefGlyphClass(FeatParser::GdefGlyphClassContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitGdefAttach(FeatParser::GdefAttachContext *ctx) override { + virtual std::any visitGdefAttach(FeatParser::GdefAttachContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitGdefLigCaretPos(FeatParser::GdefLigCaretPosContext *ctx) override { + virtual std::any visitGdefLigCaretPos(FeatParser::GdefLigCaretPosContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitGdefLigCaretIndex(FeatParser::GdefLigCaretIndexContext *ctx) override { + virtual std::any visitGdefLigCaretIndex(FeatParser::GdefLigCaretIndexContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitTable_head(FeatParser::Table_headContext *ctx) override { + virtual std::any visitTable_head(FeatParser::Table_headContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitHeadStatement(FeatParser::HeadStatementContext *ctx) override { + virtual std::any visitHeadStatement(FeatParser::HeadStatementContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitHead(FeatParser::HeadContext *ctx) override { + virtual std::any visitHead(FeatParser::HeadContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitTable_hhea(FeatParser::Table_hheaContext *ctx) override { + virtual std::any visitTable_hhea(FeatParser::Table_hheaContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitHheaStatement(FeatParser::HheaStatementContext *ctx) override { + virtual std::any visitHheaStatement(FeatParser::HheaStatementContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitHhea(FeatParser::HheaContext *ctx) override { + virtual std::any visitHhea(FeatParser::HheaContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitTable_vhea(FeatParser::Table_vheaContext *ctx) override { + virtual std::any visitTable_vhea(FeatParser::Table_vheaContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitVheaStatement(FeatParser::VheaStatementContext *ctx) override { + virtual std::any visitVheaStatement(FeatParser::VheaStatementContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitVhea(FeatParser::VheaContext *ctx) override { + virtual std::any visitVhea(FeatParser::VheaContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitTable_name(FeatParser::Table_nameContext *ctx) override { + virtual std::any visitTable_name(FeatParser::Table_nameContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitNameStatement(FeatParser::NameStatementContext *ctx) override { + virtual std::any visitNameStatement(FeatParser::NameStatementContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitNameID(FeatParser::NameIDContext *ctx) override { + virtual std::any visitNameID(FeatParser::NameIDContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitTable_OS_2(FeatParser::Table_OS_2Context *ctx) override { + virtual std::any visitTable_OS_2(FeatParser::Table_OS_2Context *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitOs_2Statement(FeatParser::Os_2StatementContext *ctx) override { + virtual std::any visitOs_2Statement(FeatParser::Os_2StatementContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitOs_2(FeatParser::Os_2Context *ctx) override { + virtual std::any visitOs_2(FeatParser::Os_2Context *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitTable_STAT(FeatParser::Table_STATContext *ctx) override { + virtual std::any visitTable_STAT(FeatParser::Table_STATContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitStatStatement(FeatParser::StatStatementContext *ctx) override { + virtual std::any visitStatStatement(FeatParser::StatStatementContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitDesignAxis(FeatParser::DesignAxisContext *ctx) override { + virtual std::any visitDesignAxis(FeatParser::DesignAxisContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitAxisValue(FeatParser::AxisValueContext *ctx) override { + virtual std::any visitAxisValue(FeatParser::AxisValueContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitAxisValueStatement(FeatParser::AxisValueStatementContext *ctx) override { + virtual std::any visitAxisValueStatement(FeatParser::AxisValueStatementContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitAxisValueLocation(FeatParser::AxisValueLocationContext *ctx) override { + virtual std::any visitAxisValueLocation(FeatParser::AxisValueLocationContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitAxisValueFlags(FeatParser::AxisValueFlagsContext *ctx) override { + virtual std::any visitAxisValueFlags(FeatParser::AxisValueFlagsContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitElidedFallbackName(FeatParser::ElidedFallbackNameContext *ctx) override { + virtual std::any visitElidedFallbackName(FeatParser::ElidedFallbackNameContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitNameEntryStatement(FeatParser::NameEntryStatementContext *ctx) override { + virtual std::any visitNameEntryStatement(FeatParser::NameEntryStatementContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitElidedFallbackNameID(FeatParser::ElidedFallbackNameIDContext *ctx) override { + virtual std::any visitElidedFallbackNameID(FeatParser::ElidedFallbackNameIDContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitNameEntry(FeatParser::NameEntryContext *ctx) override { + virtual std::any visitNameEntry(FeatParser::NameEntryContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitTable_vmtx(FeatParser::Table_vmtxContext *ctx) override { + virtual std::any visitTable_vmtx(FeatParser::Table_vmtxContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitVmtxStatement(FeatParser::VmtxStatementContext *ctx) override { + virtual std::any visitVmtxStatement(FeatParser::VmtxStatementContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitVmtx(FeatParser::VmtxContext *ctx) override { + virtual std::any visitVmtx(FeatParser::VmtxContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitAnchor(FeatParser::AnchorContext *ctx) override { + virtual std::any visitAnchor(FeatParser::AnchorContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitLookupPattern(FeatParser::LookupPatternContext *ctx) override { + virtual std::any visitLookupPattern(FeatParser::LookupPatternContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitLookupPatternElement(FeatParser::LookupPatternElementContext *ctx) override { + virtual std::any visitLookupPatternElement(FeatParser::LookupPatternElementContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitPattern(FeatParser::PatternContext *ctx) override { + virtual std::any visitPattern(FeatParser::PatternContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitPatternElement(FeatParser::PatternElementContext *ctx) override { + virtual std::any visitPatternElement(FeatParser::PatternElementContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitGlyphClassOptional(FeatParser::GlyphClassOptionalContext *ctx) override { + virtual std::any visitGlyphClassOptional(FeatParser::GlyphClassOptionalContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitGlyphClass(FeatParser::GlyphClassContext *ctx) override { + virtual std::any visitGlyphClass(FeatParser::GlyphClassContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitGcLiteral(FeatParser::GcLiteralContext *ctx) override { + virtual std::any visitGcLiteral(FeatParser::GcLiteralContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitGcLiteralElement(FeatParser::GcLiteralElementContext *ctx) override { + virtual std::any visitGcLiteralElement(FeatParser::GcLiteralElementContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitGlyph(FeatParser::GlyphContext *ctx) override { + virtual std::any visitGlyph(FeatParser::GlyphContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitGlyphName(FeatParser::GlyphNameContext *ctx) override { + virtual std::any visitGlyphName(FeatParser::GlyphNameContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitLabel(FeatParser::LabelContext *ctx) override { + virtual std::any visitLabel(FeatParser::LabelContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitTag(FeatParser::TagContext *ctx) override { + virtual std::any visitTag(FeatParser::TagContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitFixedNum(FeatParser::FixedNumContext *ctx) override { + virtual std::any visitFixedNum(FeatParser::FixedNumContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitGenNum(FeatParser::GenNumContext *ctx) override { + virtual std::any visitGenNum(FeatParser::GenNumContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitFeatureFile(FeatParser::FeatureFileContext *ctx) override { + virtual std::any visitFeatureFile(FeatParser::FeatureFileContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitStatementFile(FeatParser::StatementFileContext *ctx) override { + virtual std::any visitStatementFile(FeatParser::StatementFileContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitCvStatementFile(FeatParser::CvStatementFileContext *ctx) override { + virtual std::any visitCvStatementFile(FeatParser::CvStatementFileContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitBaseFile(FeatParser::BaseFileContext *ctx) override { + virtual std::any visitBaseFile(FeatParser::BaseFileContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitHeadFile(FeatParser::HeadFileContext *ctx) override { + virtual std::any visitHeadFile(FeatParser::HeadFileContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitHheaFile(FeatParser::HheaFileContext *ctx) override { + virtual std::any visitHheaFile(FeatParser::HheaFileContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitVheaFile(FeatParser::VheaFileContext *ctx) override { + virtual std::any visitVheaFile(FeatParser::VheaFileContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitGdefFile(FeatParser::GdefFileContext *ctx) override { + virtual std::any visitGdefFile(FeatParser::GdefFileContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitNameFile(FeatParser::NameFileContext *ctx) override { + virtual std::any visitNameFile(FeatParser::NameFileContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitVmtxFile(FeatParser::VmtxFileContext *ctx) override { + virtual std::any visitVmtxFile(FeatParser::VmtxFileContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitOs_2File(FeatParser::Os_2FileContext *ctx) override { + virtual std::any visitOs_2File(FeatParser::Os_2FileContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitStatFile(FeatParser::StatFileContext *ctx) override { + virtual std::any visitStatFile(FeatParser::StatFileContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitAxisValueFile(FeatParser::AxisValueFileContext *ctx) override { + virtual std::any visitAxisValueFile(FeatParser::AxisValueFileContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitNameEntryFile(FeatParser::NameEntryFileContext *ctx) override { + virtual std::any visitNameEntryFile(FeatParser::NameEntryFileContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitSubtok(FeatParser::SubtokContext *ctx) override { + virtual std::any visitSubtok(FeatParser::SubtokContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitRevtok(FeatParser::RevtokContext *ctx) override { + virtual std::any visitRevtok(FeatParser::RevtokContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitAnontok(FeatParser::AnontokContext *ctx) override { + virtual std::any visitAnontok(FeatParser::AnontokContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitEnumtok(FeatParser::EnumtokContext *ctx) override { + virtual std::any visitEnumtok(FeatParser::EnumtokContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitPostok(FeatParser::PostokContext *ctx) override { + virtual std::any visitPostok(FeatParser::PostokContext *ctx) override { return visitChildren(ctx); } - virtual antlrcpp::Any visitMarkligtok(FeatParser::MarkligtokContext *ctx) override { + virtual std::any visitMarkligtok(FeatParser::MarkligtokContext *ctx) override { return visitChildren(ctx); } diff --git a/c/makeotf/lib/hotconv/FeatParserVisitor.cpp b/c/makeotf/lib/hotconv/FeatParserVisitor.cpp index 9e4039c32..f26a7328b 100644 --- a/c/makeotf/lib/hotconv/FeatParserVisitor.cpp +++ b/c/makeotf/lib/hotconv/FeatParserVisitor.cpp @@ -1,5 +1,5 @@ -// Generated from FeatParser.g4 by ANTLR 4.9.3 +// Generated from FeatParser.g4 by ANTLR 4.13.2 #include "FeatParserVisitor.h" diff --git a/c/makeotf/lib/hotconv/FeatParserVisitor.h b/c/makeotf/lib/hotconv/FeatParserVisitor.h index cf3ca6487..c25d8909e 100644 --- a/c/makeotf/lib/hotconv/FeatParserVisitor.h +++ b/c/makeotf/lib/hotconv/FeatParserVisitor.h @@ -1,5 +1,5 @@ -// Generated from FeatParser.g4 by ANTLR 4.9.3 +// Generated from FeatParser.g4 by ANTLR 4.13.2 #pragma once @@ -19,227 +19,227 @@ class FeatParserVisitor : public antlr4::tree::AbstractParseTreeVisitor { /** * Visit parse trees produced by FeatParser. */ - virtual antlrcpp::Any visitFile(FeatParser::FileContext *context) = 0; + virtual std::any visitFile(FeatParser::FileContext *context) = 0; - virtual antlrcpp::Any visitTopLevelStatement(FeatParser::TopLevelStatementContext *context) = 0; + virtual std::any visitTopLevelStatement(FeatParser::TopLevelStatementContext *context) = 0; - virtual antlrcpp::Any visitInclude(FeatParser::IncludeContext *context) = 0; + virtual std::any visitInclude(FeatParser::IncludeContext *context) = 0; - virtual antlrcpp::Any visitGlyphClassAssign(FeatParser::GlyphClassAssignContext *context) = 0; + virtual std::any visitGlyphClassAssign(FeatParser::GlyphClassAssignContext *context) = 0; - virtual antlrcpp::Any visitLangsysAssign(FeatParser::LangsysAssignContext *context) = 0; + virtual std::any visitLangsysAssign(FeatParser::LangsysAssignContext *context) = 0; - virtual antlrcpp::Any visitMark_statement(FeatParser::Mark_statementContext *context) = 0; + virtual std::any visitMark_statement(FeatParser::Mark_statementContext *context) = 0; - virtual antlrcpp::Any visitAnchorDef(FeatParser::AnchorDefContext *context) = 0; + virtual std::any visitAnchorDef(FeatParser::AnchorDefContext *context) = 0; - virtual antlrcpp::Any visitValueRecordDef(FeatParser::ValueRecordDefContext *context) = 0; + virtual std::any visitValueRecordDef(FeatParser::ValueRecordDefContext *context) = 0; - virtual antlrcpp::Any visitFeatureBlock(FeatParser::FeatureBlockContext *context) = 0; + virtual std::any visitFeatureBlock(FeatParser::FeatureBlockContext *context) = 0; - virtual antlrcpp::Any visitTableBlock(FeatParser::TableBlockContext *context) = 0; + virtual std::any visitTableBlock(FeatParser::TableBlockContext *context) = 0; - virtual antlrcpp::Any visitAnonBlock(FeatParser::AnonBlockContext *context) = 0; + virtual std::any visitAnonBlock(FeatParser::AnonBlockContext *context) = 0; - virtual antlrcpp::Any visitLookupBlockTopLevel(FeatParser::LookupBlockTopLevelContext *context) = 0; + virtual std::any visitLookupBlockTopLevel(FeatParser::LookupBlockTopLevelContext *context) = 0; - virtual antlrcpp::Any visitFeatureStatement(FeatParser::FeatureStatementContext *context) = 0; + virtual std::any visitFeatureStatement(FeatParser::FeatureStatementContext *context) = 0; - virtual antlrcpp::Any visitLookupBlockOrUse(FeatParser::LookupBlockOrUseContext *context) = 0; + virtual std::any visitLookupBlockOrUse(FeatParser::LookupBlockOrUseContext *context) = 0; - virtual antlrcpp::Any visitCvParameterBlock(FeatParser::CvParameterBlockContext *context) = 0; + virtual std::any visitCvParameterBlock(FeatParser::CvParameterBlockContext *context) = 0; - virtual antlrcpp::Any visitCvParameterStatement(FeatParser::CvParameterStatementContext *context) = 0; + virtual std::any visitCvParameterStatement(FeatParser::CvParameterStatementContext *context) = 0; - virtual antlrcpp::Any visitCvParameter(FeatParser::CvParameterContext *context) = 0; + virtual std::any visitCvParameter(FeatParser::CvParameterContext *context) = 0; - virtual antlrcpp::Any visitStatement(FeatParser::StatementContext *context) = 0; + virtual std::any visitStatement(FeatParser::StatementContext *context) = 0; - virtual antlrcpp::Any visitFeatureUse(FeatParser::FeatureUseContext *context) = 0; + virtual std::any visitFeatureUse(FeatParser::FeatureUseContext *context) = 0; - virtual antlrcpp::Any visitScriptAssign(FeatParser::ScriptAssignContext *context) = 0; + virtual std::any visitScriptAssign(FeatParser::ScriptAssignContext *context) = 0; - virtual antlrcpp::Any visitLangAssign(FeatParser::LangAssignContext *context) = 0; + virtual std::any visitLangAssign(FeatParser::LangAssignContext *context) = 0; - virtual antlrcpp::Any visitLookupflagAssign(FeatParser::LookupflagAssignContext *context) = 0; + virtual std::any visitLookupflagAssign(FeatParser::LookupflagAssignContext *context) = 0; - virtual antlrcpp::Any visitLookupflagElement(FeatParser::LookupflagElementContext *context) = 0; + virtual std::any visitLookupflagElement(FeatParser::LookupflagElementContext *context) = 0; - virtual antlrcpp::Any visitIgnoreSubOrPos(FeatParser::IgnoreSubOrPosContext *context) = 0; + virtual std::any visitIgnoreSubOrPos(FeatParser::IgnoreSubOrPosContext *context) = 0; - virtual antlrcpp::Any visitSubstitute(FeatParser::SubstituteContext *context) = 0; + virtual std::any visitSubstitute(FeatParser::SubstituteContext *context) = 0; - virtual antlrcpp::Any visitPosition(FeatParser::PositionContext *context) = 0; + virtual std::any visitPosition(FeatParser::PositionContext *context) = 0; - virtual antlrcpp::Any visitValuePattern(FeatParser::ValuePatternContext *context) = 0; + virtual std::any visitValuePattern(FeatParser::ValuePatternContext *context) = 0; - virtual antlrcpp::Any visitValueRecord(FeatParser::ValueRecordContext *context) = 0; + virtual std::any visitValueRecord(FeatParser::ValueRecordContext *context) = 0; - virtual antlrcpp::Any visitValueLiteral(FeatParser::ValueLiteralContext *context) = 0; + virtual std::any visitValueLiteral(FeatParser::ValueLiteralContext *context) = 0; - virtual antlrcpp::Any visitCursiveElement(FeatParser::CursiveElementContext *context) = 0; + virtual std::any visitCursiveElement(FeatParser::CursiveElementContext *context) = 0; - virtual antlrcpp::Any visitBaseToMarkElement(FeatParser::BaseToMarkElementContext *context) = 0; + virtual std::any visitBaseToMarkElement(FeatParser::BaseToMarkElementContext *context) = 0; - virtual antlrcpp::Any visitLigatureMarkElement(FeatParser::LigatureMarkElementContext *context) = 0; + virtual std::any visitLigatureMarkElement(FeatParser::LigatureMarkElementContext *context) = 0; - virtual antlrcpp::Any visitParameters(FeatParser::ParametersContext *context) = 0; + virtual std::any visitParameters(FeatParser::ParametersContext *context) = 0; - virtual antlrcpp::Any visitSizemenuname(FeatParser::SizemenunameContext *context) = 0; + virtual std::any visitSizemenuname(FeatParser::SizemenunameContext *context) = 0; - virtual antlrcpp::Any visitFeatureNames(FeatParser::FeatureNamesContext *context) = 0; + virtual std::any visitFeatureNames(FeatParser::FeatureNamesContext *context) = 0; - virtual antlrcpp::Any visitSubtable(FeatParser::SubtableContext *context) = 0; + virtual std::any visitSubtable(FeatParser::SubtableContext *context) = 0; - virtual antlrcpp::Any visitTable_BASE(FeatParser::Table_BASEContext *context) = 0; + virtual std::any visitTable_BASE(FeatParser::Table_BASEContext *context) = 0; - virtual antlrcpp::Any visitBaseStatement(FeatParser::BaseStatementContext *context) = 0; + virtual std::any visitBaseStatement(FeatParser::BaseStatementContext *context) = 0; - virtual antlrcpp::Any visitAxisTags(FeatParser::AxisTagsContext *context) = 0; + virtual std::any visitAxisTags(FeatParser::AxisTagsContext *context) = 0; - virtual antlrcpp::Any visitAxisScripts(FeatParser::AxisScriptsContext *context) = 0; + virtual std::any visitAxisScripts(FeatParser::AxisScriptsContext *context) = 0; - virtual antlrcpp::Any visitBaseScript(FeatParser::BaseScriptContext *context) = 0; + virtual std::any visitBaseScript(FeatParser::BaseScriptContext *context) = 0; - virtual antlrcpp::Any visitTable_GDEF(FeatParser::Table_GDEFContext *context) = 0; + virtual std::any visitTable_GDEF(FeatParser::Table_GDEFContext *context) = 0; - virtual antlrcpp::Any visitGdefStatement(FeatParser::GdefStatementContext *context) = 0; + virtual std::any visitGdefStatement(FeatParser::GdefStatementContext *context) = 0; - virtual antlrcpp::Any visitGdefGlyphClass(FeatParser::GdefGlyphClassContext *context) = 0; + virtual std::any visitGdefGlyphClass(FeatParser::GdefGlyphClassContext *context) = 0; - virtual antlrcpp::Any visitGdefAttach(FeatParser::GdefAttachContext *context) = 0; + virtual std::any visitGdefAttach(FeatParser::GdefAttachContext *context) = 0; - virtual antlrcpp::Any visitGdefLigCaretPos(FeatParser::GdefLigCaretPosContext *context) = 0; + virtual std::any visitGdefLigCaretPos(FeatParser::GdefLigCaretPosContext *context) = 0; - virtual antlrcpp::Any visitGdefLigCaretIndex(FeatParser::GdefLigCaretIndexContext *context) = 0; + virtual std::any visitGdefLigCaretIndex(FeatParser::GdefLigCaretIndexContext *context) = 0; - virtual antlrcpp::Any visitTable_head(FeatParser::Table_headContext *context) = 0; + virtual std::any visitTable_head(FeatParser::Table_headContext *context) = 0; - virtual antlrcpp::Any visitHeadStatement(FeatParser::HeadStatementContext *context) = 0; + virtual std::any visitHeadStatement(FeatParser::HeadStatementContext *context) = 0; - virtual antlrcpp::Any visitHead(FeatParser::HeadContext *context) = 0; + virtual std::any visitHead(FeatParser::HeadContext *context) = 0; - virtual antlrcpp::Any visitTable_hhea(FeatParser::Table_hheaContext *context) = 0; + virtual std::any visitTable_hhea(FeatParser::Table_hheaContext *context) = 0; - virtual antlrcpp::Any visitHheaStatement(FeatParser::HheaStatementContext *context) = 0; + virtual std::any visitHheaStatement(FeatParser::HheaStatementContext *context) = 0; - virtual antlrcpp::Any visitHhea(FeatParser::HheaContext *context) = 0; + virtual std::any visitHhea(FeatParser::HheaContext *context) = 0; - virtual antlrcpp::Any visitTable_vhea(FeatParser::Table_vheaContext *context) = 0; + virtual std::any visitTable_vhea(FeatParser::Table_vheaContext *context) = 0; - virtual antlrcpp::Any visitVheaStatement(FeatParser::VheaStatementContext *context) = 0; + virtual std::any visitVheaStatement(FeatParser::VheaStatementContext *context) = 0; - virtual antlrcpp::Any visitVhea(FeatParser::VheaContext *context) = 0; + virtual std::any visitVhea(FeatParser::VheaContext *context) = 0; - virtual antlrcpp::Any visitTable_name(FeatParser::Table_nameContext *context) = 0; + virtual std::any visitTable_name(FeatParser::Table_nameContext *context) = 0; - virtual antlrcpp::Any visitNameStatement(FeatParser::NameStatementContext *context) = 0; + virtual std::any visitNameStatement(FeatParser::NameStatementContext *context) = 0; - virtual antlrcpp::Any visitNameID(FeatParser::NameIDContext *context) = 0; + virtual std::any visitNameID(FeatParser::NameIDContext *context) = 0; - virtual antlrcpp::Any visitTable_OS_2(FeatParser::Table_OS_2Context *context) = 0; + virtual std::any visitTable_OS_2(FeatParser::Table_OS_2Context *context) = 0; - virtual antlrcpp::Any visitOs_2Statement(FeatParser::Os_2StatementContext *context) = 0; + virtual std::any visitOs_2Statement(FeatParser::Os_2StatementContext *context) = 0; - virtual antlrcpp::Any visitOs_2(FeatParser::Os_2Context *context) = 0; + virtual std::any visitOs_2(FeatParser::Os_2Context *context) = 0; - virtual antlrcpp::Any visitTable_STAT(FeatParser::Table_STATContext *context) = 0; + virtual std::any visitTable_STAT(FeatParser::Table_STATContext *context) = 0; - virtual antlrcpp::Any visitStatStatement(FeatParser::StatStatementContext *context) = 0; + virtual std::any visitStatStatement(FeatParser::StatStatementContext *context) = 0; - virtual antlrcpp::Any visitDesignAxis(FeatParser::DesignAxisContext *context) = 0; + virtual std::any visitDesignAxis(FeatParser::DesignAxisContext *context) = 0; - virtual antlrcpp::Any visitAxisValue(FeatParser::AxisValueContext *context) = 0; + virtual std::any visitAxisValue(FeatParser::AxisValueContext *context) = 0; - virtual antlrcpp::Any visitAxisValueStatement(FeatParser::AxisValueStatementContext *context) = 0; + virtual std::any visitAxisValueStatement(FeatParser::AxisValueStatementContext *context) = 0; - virtual antlrcpp::Any visitAxisValueLocation(FeatParser::AxisValueLocationContext *context) = 0; + virtual std::any visitAxisValueLocation(FeatParser::AxisValueLocationContext *context) = 0; - virtual antlrcpp::Any visitAxisValueFlags(FeatParser::AxisValueFlagsContext *context) = 0; + virtual std::any visitAxisValueFlags(FeatParser::AxisValueFlagsContext *context) = 0; - virtual antlrcpp::Any visitElidedFallbackName(FeatParser::ElidedFallbackNameContext *context) = 0; + virtual std::any visitElidedFallbackName(FeatParser::ElidedFallbackNameContext *context) = 0; - virtual antlrcpp::Any visitNameEntryStatement(FeatParser::NameEntryStatementContext *context) = 0; + virtual std::any visitNameEntryStatement(FeatParser::NameEntryStatementContext *context) = 0; - virtual antlrcpp::Any visitElidedFallbackNameID(FeatParser::ElidedFallbackNameIDContext *context) = 0; + virtual std::any visitElidedFallbackNameID(FeatParser::ElidedFallbackNameIDContext *context) = 0; - virtual antlrcpp::Any visitNameEntry(FeatParser::NameEntryContext *context) = 0; + virtual std::any visitNameEntry(FeatParser::NameEntryContext *context) = 0; - virtual antlrcpp::Any visitTable_vmtx(FeatParser::Table_vmtxContext *context) = 0; + virtual std::any visitTable_vmtx(FeatParser::Table_vmtxContext *context) = 0; - virtual antlrcpp::Any visitVmtxStatement(FeatParser::VmtxStatementContext *context) = 0; + virtual std::any visitVmtxStatement(FeatParser::VmtxStatementContext *context) = 0; - virtual antlrcpp::Any visitVmtx(FeatParser::VmtxContext *context) = 0; + virtual std::any visitVmtx(FeatParser::VmtxContext *context) = 0; - virtual antlrcpp::Any visitAnchor(FeatParser::AnchorContext *context) = 0; + virtual std::any visitAnchor(FeatParser::AnchorContext *context) = 0; - virtual antlrcpp::Any visitLookupPattern(FeatParser::LookupPatternContext *context) = 0; + virtual std::any visitLookupPattern(FeatParser::LookupPatternContext *context) = 0; - virtual antlrcpp::Any visitLookupPatternElement(FeatParser::LookupPatternElementContext *context) = 0; + virtual std::any visitLookupPatternElement(FeatParser::LookupPatternElementContext *context) = 0; - virtual antlrcpp::Any visitPattern(FeatParser::PatternContext *context) = 0; + virtual std::any visitPattern(FeatParser::PatternContext *context) = 0; - virtual antlrcpp::Any visitPatternElement(FeatParser::PatternElementContext *context) = 0; + virtual std::any visitPatternElement(FeatParser::PatternElementContext *context) = 0; - virtual antlrcpp::Any visitGlyphClassOptional(FeatParser::GlyphClassOptionalContext *context) = 0; + virtual std::any visitGlyphClassOptional(FeatParser::GlyphClassOptionalContext *context) = 0; - virtual antlrcpp::Any visitGlyphClass(FeatParser::GlyphClassContext *context) = 0; + virtual std::any visitGlyphClass(FeatParser::GlyphClassContext *context) = 0; - virtual antlrcpp::Any visitGcLiteral(FeatParser::GcLiteralContext *context) = 0; + virtual std::any visitGcLiteral(FeatParser::GcLiteralContext *context) = 0; - virtual antlrcpp::Any visitGcLiteralElement(FeatParser::GcLiteralElementContext *context) = 0; + virtual std::any visitGcLiteralElement(FeatParser::GcLiteralElementContext *context) = 0; - virtual antlrcpp::Any visitGlyph(FeatParser::GlyphContext *context) = 0; + virtual std::any visitGlyph(FeatParser::GlyphContext *context) = 0; - virtual antlrcpp::Any visitGlyphName(FeatParser::GlyphNameContext *context) = 0; + virtual std::any visitGlyphName(FeatParser::GlyphNameContext *context) = 0; - virtual antlrcpp::Any visitLabel(FeatParser::LabelContext *context) = 0; + virtual std::any visitLabel(FeatParser::LabelContext *context) = 0; - virtual antlrcpp::Any visitTag(FeatParser::TagContext *context) = 0; + virtual std::any visitTag(FeatParser::TagContext *context) = 0; - virtual antlrcpp::Any visitFixedNum(FeatParser::FixedNumContext *context) = 0; + virtual std::any visitFixedNum(FeatParser::FixedNumContext *context) = 0; - virtual antlrcpp::Any visitGenNum(FeatParser::GenNumContext *context) = 0; + virtual std::any visitGenNum(FeatParser::GenNumContext *context) = 0; - virtual antlrcpp::Any visitFeatureFile(FeatParser::FeatureFileContext *context) = 0; + virtual std::any visitFeatureFile(FeatParser::FeatureFileContext *context) = 0; - virtual antlrcpp::Any visitStatementFile(FeatParser::StatementFileContext *context) = 0; + virtual std::any visitStatementFile(FeatParser::StatementFileContext *context) = 0; - virtual antlrcpp::Any visitCvStatementFile(FeatParser::CvStatementFileContext *context) = 0; + virtual std::any visitCvStatementFile(FeatParser::CvStatementFileContext *context) = 0; - virtual antlrcpp::Any visitBaseFile(FeatParser::BaseFileContext *context) = 0; + virtual std::any visitBaseFile(FeatParser::BaseFileContext *context) = 0; - virtual antlrcpp::Any visitHeadFile(FeatParser::HeadFileContext *context) = 0; + virtual std::any visitHeadFile(FeatParser::HeadFileContext *context) = 0; - virtual antlrcpp::Any visitHheaFile(FeatParser::HheaFileContext *context) = 0; + virtual std::any visitHheaFile(FeatParser::HheaFileContext *context) = 0; - virtual antlrcpp::Any visitVheaFile(FeatParser::VheaFileContext *context) = 0; + virtual std::any visitVheaFile(FeatParser::VheaFileContext *context) = 0; - virtual antlrcpp::Any visitGdefFile(FeatParser::GdefFileContext *context) = 0; + virtual std::any visitGdefFile(FeatParser::GdefFileContext *context) = 0; - virtual antlrcpp::Any visitNameFile(FeatParser::NameFileContext *context) = 0; + virtual std::any visitNameFile(FeatParser::NameFileContext *context) = 0; - virtual antlrcpp::Any visitVmtxFile(FeatParser::VmtxFileContext *context) = 0; + virtual std::any visitVmtxFile(FeatParser::VmtxFileContext *context) = 0; - virtual antlrcpp::Any visitOs_2File(FeatParser::Os_2FileContext *context) = 0; + virtual std::any visitOs_2File(FeatParser::Os_2FileContext *context) = 0; - virtual antlrcpp::Any visitStatFile(FeatParser::StatFileContext *context) = 0; + virtual std::any visitStatFile(FeatParser::StatFileContext *context) = 0; - virtual antlrcpp::Any visitAxisValueFile(FeatParser::AxisValueFileContext *context) = 0; + virtual std::any visitAxisValueFile(FeatParser::AxisValueFileContext *context) = 0; - virtual antlrcpp::Any visitNameEntryFile(FeatParser::NameEntryFileContext *context) = 0; + virtual std::any visitNameEntryFile(FeatParser::NameEntryFileContext *context) = 0; - virtual antlrcpp::Any visitSubtok(FeatParser::SubtokContext *context) = 0; + virtual std::any visitSubtok(FeatParser::SubtokContext *context) = 0; - virtual antlrcpp::Any visitRevtok(FeatParser::RevtokContext *context) = 0; + virtual std::any visitRevtok(FeatParser::RevtokContext *context) = 0; - virtual antlrcpp::Any visitAnontok(FeatParser::AnontokContext *context) = 0; + virtual std::any visitAnontok(FeatParser::AnontokContext *context) = 0; - virtual antlrcpp::Any visitEnumtok(FeatParser::EnumtokContext *context) = 0; + virtual std::any visitEnumtok(FeatParser::EnumtokContext *context) = 0; - virtual antlrcpp::Any visitPostok(FeatParser::PostokContext *context) = 0; + virtual std::any visitPostok(FeatParser::PostokContext *context) = 0; - virtual antlrcpp::Any visitMarkligtok(FeatParser::MarkligtokContext *context) = 0; + virtual std::any visitMarkligtok(FeatParser::MarkligtokContext *context) = 0; }; From 9b489ebd78eafab14358479310d1b3757e4874b9 Mon Sep 17 00:00:00 2001 From: Skef Iterum Date: Tue, 5 Nov 2024 13:38:25 -0800 Subject: [PATCH 40/56] Try more recent version of Visual Studio for test build --- .github/workflows/testpythonpackage.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/testpythonpackage.yml b/.github/workflows/testpythonpackage.yml index a039f7ac8..9e1dfaee3 100644 --- a/.github/workflows/testpythonpackage.yml +++ b/.github/workflows/testpythonpackage.yml @@ -64,7 +64,7 @@ jobs: if: matrix.os == 'windows-latest' uses: microsoft/setup-msbuild@v1.3 with: - vs-version: '[17.0,]' + vs-version: '[17.10,]' msbuild-architecture: x64 - name: Set Windows generator to Visual Studio From fcf21a18b83ec4a1cb69426ef03127b3ffd0cab5 Mon Sep 17 00:00:00 2001 From: Skef Iterum Date: Tue, 5 Nov 2024 14:13:01 -0800 Subject: [PATCH 41/56] Try limiting visual studio version --- .github/workflows/testpythonpackage.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/testpythonpackage.yml b/.github/workflows/testpythonpackage.yml index 9e1dfaee3..71ed08c6e 100644 --- a/.github/workflows/testpythonpackage.yml +++ b/.github/workflows/testpythonpackage.yml @@ -64,7 +64,7 @@ jobs: if: matrix.os == 'windows-latest' uses: microsoft/setup-msbuild@v1.3 with: - vs-version: '[17.10,]' + vs-version: '[17.0,17.8]' msbuild-architecture: x64 - name: Set Windows generator to Visual Studio From 4a125dfb8fc009591a8ba0b3223870e0120a31d4 Mon Sep 17 00:00:00 2001 From: Skef Iterum Date: Tue, 5 Nov 2024 14:16:46 -0800 Subject: [PATCH 42/56] Expand versions of vs --- .github/workflows/testpythonpackage.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/testpythonpackage.yml b/.github/workflows/testpythonpackage.yml index 71ed08c6e..c5a6fd033 100644 --- a/.github/workflows/testpythonpackage.yml +++ b/.github/workflows/testpythonpackage.yml @@ -64,7 +64,7 @@ jobs: if: matrix.os == 'windows-latest' uses: microsoft/setup-msbuild@v1.3 with: - vs-version: '[17.0,17.8]' + vs-version: '[17.0,17.10]' msbuild-architecture: x64 - name: Set Windows generator to Visual Studio From 7cd7519ef1eba7efe9cc30f3ca8606dd9807260b Mon Sep 17 00:00:00 2001 From: Skef Iterum Date: Tue, 5 Nov 2024 14:21:02 -0800 Subject: [PATCH 43/56] Try going back to C++11 to see if errors change --- .github/workflows/testpythonpackage.yml | 5 +++-- CMakeLists.txt | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/testpythonpackage.yml b/.github/workflows/testpythonpackage.yml index c5a6fd033..db5a3a1a5 100644 --- a/.github/workflows/testpythonpackage.yml +++ b/.github/workflows/testpythonpackage.yml @@ -27,7 +27,8 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: [ubuntu-latest, macos-latest, windows-latest] + # os: [ubuntu-latest, macos-latest, windows-latest] + os: [windows-latest] python-version: ["3.9", "3.10", "3.11", "3.12"] exclude: - os: macos-latest @@ -64,7 +65,7 @@ jobs: if: matrix.os == 'windows-latest' uses: microsoft/setup-msbuild@v1.3 with: - vs-version: '[17.0,17.10]' + vs-version: '[17.0,]' msbuild-architecture: x64 - name: Set Windows generator to Visual Studio diff --git a/CMakeLists.txt b/CMakeLists.txt index 49b959355..88e9cfd0c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,7 +18,7 @@ if (NOT CMAKE_BUILD_TYPE) endif() message(STATUS "Build type is ${CMAKE_BUILD_TYPE}") -set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD 11) # scikit-build if(SKBUILD) From bbbacb952fd795fbbf6e43174b64a265a1d017ad Mon Sep 17 00:00:00 2001 From: Skef Iterum Date: Tue, 5 Nov 2024 14:32:03 -0800 Subject: [PATCH 44/56] Try making c++17 requirement more specific --- .github/workflows/testpythonpackage.yml | 3 +-- c/makeotf/lib/hotconv/CMakeLists.txt | 1 + 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/testpythonpackage.yml b/.github/workflows/testpythonpackage.yml index db5a3a1a5..a039f7ac8 100644 --- a/.github/workflows/testpythonpackage.yml +++ b/.github/workflows/testpythonpackage.yml @@ -27,8 +27,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - # os: [ubuntu-latest, macos-latest, windows-latest] - os: [windows-latest] + os: [ubuntu-latest, macos-latest, windows-latest] python-version: ["3.9", "3.10", "3.11", "3.12"] exclude: - os: macos-latest diff --git a/c/makeotf/lib/hotconv/CMakeLists.txt b/c/makeotf/lib/hotconv/CMakeLists.txt index 12d416211..60e49458a 100644 --- a/c/makeotf/lib/hotconv/CMakeLists.txt +++ b/c/makeotf/lib/hotconv/CMakeLists.txt @@ -68,6 +68,7 @@ add_library(hotconv STATIC ) set_property(TARGET hotconv PROPERTY C_STANDARD 99) +set_property(TARGET hotconv PROPERTY CXX_STANDARD 17) target_include_directories(hotconv PRIVATE AFTER $<$:${ANTLR4_INCLUDE_DIRS}>) target_link_libraries(hotconv PUBLIC antlr4_static) From 80c7440f060ef9d810490fe51cc158fea7c43920 Mon Sep 17 00:00:00 2001 From: Skef Iterum Date: Tue, 5 Nov 2024 15:11:06 -0800 Subject: [PATCH 45/56] Try backing up one antlr version --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 88e9cfd0c..69f6ec800 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -39,7 +39,7 @@ list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake) add_definitions(-DANTLR4CPP_STATIC) set(ANTLR4_WITH_STATIC_CRT OFF) # 4.9.3 is the latest ANTLR4 version -set(ANTLR4_TAG tags/4.13.2) +set(ANTLR4_TAG tags/4.13.1) include(ExternalAntlr4Cpp) From 059e8a11c480b0b39dd63ee2649eb0f686e64daa Mon Sep 17 00:00:00 2001 From: Skef Iterum Date: Tue, 5 Nov 2024 15:22:06 -0800 Subject: [PATCH 46/56] Change location of windows library --- CMakeLists.txt | 2 +- cmake/ExternalAntlr4Cpp.cmake | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 69f6ec800..88e9cfd0c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -39,7 +39,7 @@ list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake) add_definitions(-DANTLR4CPP_STATIC) set(ANTLR4_WITH_STATIC_CRT OFF) # 4.9.3 is the latest ANTLR4 version -set(ANTLR4_TAG tags/4.13.1) +set(ANTLR4_TAG tags/4.13.2) include(ExternalAntlr4Cpp) diff --git a/cmake/ExternalAntlr4Cpp.cmake b/cmake/ExternalAntlr4Cpp.cmake index 086089732..e0ad63e75 100644 --- a/cmake/ExternalAntlr4Cpp.cmake +++ b/cmake/ExternalAntlr4Cpp.cmake @@ -13,7 +13,7 @@ if(NOT DEFINED ANTLR4_TAG) endif() if(${CMAKE_GENERATOR} MATCHES "Visual Studio.*") - set(ANTLR4_OUTPUT_DIR ${ANTLR4_ROOT}/runtime/Cpp/dist/$(Configuration)) + set(ANTLR4_OUTPUT_DIR ${ANTLR4_ROOT}/runtime/Cpp/runtime/$(Configuration)) elseif(${CMAKE_GENERATOR} MATCHES "Xcode.*") set(ANTLR4_OUTPUT_DIR ${ANTLR4_ROOT}/runtime/Cpp/dist/$(CONFIGURATION)) else() From 5dfe7d07bf65811440268222ee305584c5cf0cf6 Mon Sep 17 00:00:00 2001 From: Skef Iterum Date: Tue, 5 Nov 2024 15:34:49 -0800 Subject: [PATCH 47/56] Put minimum macos at 10.13 --- .github/workflows/build_wheels.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build_wheels.yml b/.github/workflows/build_wheels.yml index 31f334890..8cf5ab21f 100644 --- a/.github/workflows/build_wheels.yml +++ b/.github/workflows/build_wheels.yml @@ -44,7 +44,7 @@ jobs: env: CIBW_BUILD: "cp39-*" CIBW_ARCHS_MACOS: universal2 - CIBW_ENVIRONMENT_MACOS: "CFLAGS='-arch arm64 -arch x86_64 -I/usr/include/libxml2' CXXFLAGS='-arch arm64 -arch x86_64' LDFLAGS='-arch arm64 -arch x86_64'" + CIBW_ENVIRONMENT_MACOS: "CFLAGS='-arch arm64 -arch x86_64 -I/usr/include/libxml2' CXXFLAGS='-arch arm64 -arch x86_64' LDFLAGS='-arch arm64 -arch x86_64' MACOSX_DEPLOYMENT_TARGET='10.13'" - name: Build wheel (except macosx_universal2) uses: pypa/cibuildwheel@v2.21.1 @@ -61,7 +61,7 @@ jobs: # CIBW_ENVIRONMENT_LINUX: "CFLAGS='-I/usr/include/libxml2'" # CIBW_BEFORE_ALL_LINUX: "yum install -y libuuid-devel" # CIBW_BEFORE_ALL_LINUX: "dnf -y install uuid-devel" - CIBW_ENVIRONMENT_MACOS: "CFLAGS='-I/usr/include/libxml2'" + CIBW_ENVIRONMENT_MACOS: "CFLAGS='-I/usr/include/libxml2' MACOSX_DEPLOYMENT_TARGET='10.13'" CIBW_ENVIRONMENT_LINUX: "FORCE_BUILD_LIBXML2=ON" CIBW_ENVIRONMENT_WINDOWS: "FORCE_BUILD_LIBXML2=ON" From 0b588588a46e2e107cd5f93d9a6e80caab52c58e Mon Sep 17 00:00:00 2001 From: Kamile Demir Date: Tue, 5 Nov 2024 16:19:55 -0800 Subject: [PATCH 48/56] Update NEWS with version 4.0.2 changes --- NEWS.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/NEWS.md b/NEWS.md index 864e85205..9c9f70b16 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,6 +1,13 @@ Changelog ========= +4.0.2 (released 2024-11-05) +--------------------------- +- [otfautohint] Fix otfautohint bugs ([#1759](https://github.com/adobe-type-tools/afdko/pull/1759), [#1751](https://github.com/adobe-type-tools/afdko/pull/1751), [#1749](https://github.com/adobe-type-tools/afdko/pull/1749), [#1758](https://github.com/adobe-type-tools/afdko/pull/1758)) +- [ANTLR] Upgrade ANTLR to v4.13.2 +- [makeinstancesufo] keep all public lib keys in instances (thank you, @arialcrime!) ([#1747](https://github.com/adobe-type-tools/afdko/pull/1747)) +- [ci] Enable Python v3.12, drop v3.8 ([#1756](https://github.com/adobe-type-tools/afdko/pull/1756)) + 4.0.1 (released 2024-01-16) --------------------------- - [tx] Fix build failures discovered by an upcoming gcc-14 release (thanks @trofi!)([#1730](https://github.com/adobe-type-tools/afdko/pull/1730)) From 2b15013a250c93711b9de66a12c09eb4a33b5407 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Frank=20Grie=C3=9Fhammer?= Date: Tue, 26 Sep 2023 22:03:38 +0200 Subject: [PATCH 49/56] Do not expect a contents.plist file to exist --- python/afdko/ufotools.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/python/afdko/ufotools.py b/python/afdko/ufotools.py index f9f813976..ad14bcc4a 100644 --- a/python/afdko/ufotools.py +++ b/python/afdko/ufotools.py @@ -902,8 +902,10 @@ def cleanUpGLIFFiles(defaultContentsFilePath, glyphDirPath, doWarning=True): contentsFilePath = os.path.join(glyphDirPath, kContentsName) # maps glyph names to files. - with open(contentsFilePath, 'r', encoding='utf-8') as fp: - contentsDict = plistlib.load(fp) + contentsDict = {} + if os.path.exists(contentsFilePath): + with open(contentsFilePath, 'r', encoding='utf-8') as fp: + contentsDict = plistlib.load(fp) # First, delete glyph files that are not in the contents.plist file in # the glyphDirPath. In some UFOfont files, we end up with case errors, @@ -976,8 +978,10 @@ def cleanupContentsList(glyphDirPath, doWarning=True): contentsFilePath = os.path.join(glyphDirPath, kContentsName) # maps glyph names to files. - with open(contentsFilePath, 'r', encoding='utf-8') as fp: - contentsDict = plistlib.load(fp) + contentsDict = {} + if os.path.exists(contentsFilePath): + with open(contentsFilePath, 'r', encoding='utf-8') as fp: + contentsDict = plistlib.load(fp) fileDict = {} fileList = os.listdir(glyphDirPath) From 5e88e87ac82cc3e2a7f53aada4324cb80502e491 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Frank=20Grie=C3=9Fhammer?= Date: Fri, 29 Sep 2023 16:08:56 +0200 Subject: [PATCH 50/56] make output more concise Only the .glif file name is really needed here, reporting the glyphDirPath probably was a mistake anyway. --- python/afdko/ufotools.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/afdko/ufotools.py b/python/afdko/ufotools.py index ad14bcc4a..18644e0f4 100644 --- a/python/afdko/ufotools.py +++ b/python/afdko/ufotools.py @@ -937,7 +937,7 @@ def cleanUpGLIFFiles(defaultContentsFilePath, glyphDirPath, doWarning=True): os.remove(glyphFilePath) if doWarning: print("Removing glif file %s that was not in the contents.plist " - "file: %s" % (glyphDirPath, contentsFilePath)) + "file: %s" % (fileName, contentsFilePath)) changed = 1 if defaultContentsFilePath == contentsFilePath: From 80c698a19b08a389317ae5ce503c99fd7e4cc477 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Frank=20Grie=C3=9Fhammer?= Date: Fri, 29 Sep 2023 17:52:37 +0200 Subject: [PATCH 51/56] minor typos --- python/afdko/ufotools.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/python/afdko/ufotools.py b/python/afdko/ufotools.py index 18644e0f4..3e41ad1bb 100644 --- a/python/afdko/ufotools.py +++ b/python/afdko/ufotools.py @@ -606,11 +606,11 @@ def getOrSkipGlyph(self, glyphName, doAll=0): def loadGlyphMap(self): # Need to both get the list of glyphs from contents.plist, and also - # the glyph order. The latter is take from the public.glyphOrder key + # the glyph order. The latter is taken from the public.glyphOrder key # in lib.plist, if it exists, else it is taken from the contents.plist # file. Any glyphs in contents.plist which are not named in the # public.glyphOrder are sorted after all glyphs which are named in the - # public.glyphOrder,, in the order that they occured in contents.plist. + # public.glyphOrder, in the order that they occured in contents.plist. contentsPath = os.path.join(self.parentPath, "glyphs", kContentsName) self.glyphMap, self.glyphList = parsePList(contentsPath) orderPath = os.path.join(self.parentPath, kLibName) From 5c0a81c297b8ecb65c589c519d536ac9e166050f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Frank=20Grie=C3=9Fhammer?= Date: Fri, 29 Sep 2023 17:55:21 +0200 Subject: [PATCH 52/56] some weird testers might use pathlib MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit … which made that comparison fail --- python/afdko/ufotools.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/afdko/ufotools.py b/python/afdko/ufotools.py index 3e41ad1bb..80285f19c 100644 --- a/python/afdko/ufotools.py +++ b/python/afdko/ufotools.py @@ -940,7 +940,7 @@ def cleanUpGLIFFiles(defaultContentsFilePath, glyphDirPath, doWarning=True): "file: %s" % (fileName, contentsFilePath)) changed = 1 - if defaultContentsFilePath == contentsFilePath: + if str(defaultContentsFilePath) == str(contentsFilePath): return changed # Now remove glyphs that are not referenced in the defaultContentsFilePath. From 7babfdd64f206146cdb5f2a7169c464b3a5790cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Frank=20Grie=C3=9Fhammer?= Date: Fri, 29 Sep 2023 19:21:04 +0200 Subject: [PATCH 53/56] fallback for contents.plist if the layer we are working on does not contain a contents.plist, load the contents.plist from the default layer. --- python/afdko/ufotools.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/python/afdko/ufotools.py b/python/afdko/ufotools.py index 80285f19c..95a2ef816 100644 --- a/python/afdko/ufotools.py +++ b/python/afdko/ufotools.py @@ -902,10 +902,14 @@ def cleanUpGLIFFiles(defaultContentsFilePath, glyphDirPath, doWarning=True): contentsFilePath = os.path.join(glyphDirPath, kContentsName) # maps glyph names to files. - contentsDict = {} if os.path.exists(contentsFilePath): + # contents.plist exists in glyphDirPath with open(contentsFilePath, 'r', encoding='utf-8') as fp: contentsDict = plistlib.load(fp) + else: + # contents.plist does not exist in glyphDirPath, load the default + with open(defaultContentsFilePath, 'r', encoding='utf-8') as fp: + contentsDict = plistlib.load(fp) # First, delete glyph files that are not in the contents.plist file in # the glyphDirPath. In some UFOfont files, we end up with case errors, From f4d437bd62ac191e7c74d0f4ed347ff58467c25c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Frank=20Grie=C3=9Fhammer?= Date: Fri, 29 Sep 2023 19:21:27 +0200 Subject: [PATCH 54/56] tests for ufotools --- .../data/com.adobe.type.processedHashMap | 1494 +++++++++++++++++ .../input/ufotools_basic.ufo/features.fea | 1 + .../input/ufotools_basic.ufo/fontinfo.plist | 161 ++ .../ufotools_basic.ufo/glyphs/_notdef.glif | 30 + .../input/ufotools_basic.ufo/glyphs/a.glif | 77 + .../input/ufotools_basic.ufo/glyphs/b.glif | 58 + .../input/ufotools_basic.ufo/glyphs/c.glif | 45 + .../ufotools_basic.ufo/glyphs/contents.plist | 16 + .../ufotools_basic.ufo/glyphs/space.glif | 6 + .../input/ufotools_basic.ufo/groups.plist | 42 + .../input/ufotools_basic.ufo/kerning.plist | 16 + .../ufotools_basic.ufo/layercontents.plist | 10 + .../input/ufotools_basic.ufo/lib.plist | 14 + .../input/ufotools_basic.ufo/metainfo.plist | 10 + tests/ufotools_test.py | 245 +++ 15 files changed, 2225 insertions(+) create mode 100644 tests/ufotools_data/input/ufotools_basic.ufo/data/com.adobe.type.processedHashMap create mode 100644 tests/ufotools_data/input/ufotools_basic.ufo/features.fea create mode 100644 tests/ufotools_data/input/ufotools_basic.ufo/fontinfo.plist create mode 100644 tests/ufotools_data/input/ufotools_basic.ufo/glyphs/_notdef.glif create mode 100644 tests/ufotools_data/input/ufotools_basic.ufo/glyphs/a.glif create mode 100644 tests/ufotools_data/input/ufotools_basic.ufo/glyphs/b.glif create mode 100644 tests/ufotools_data/input/ufotools_basic.ufo/glyphs/c.glif create mode 100644 tests/ufotools_data/input/ufotools_basic.ufo/glyphs/contents.plist create mode 100644 tests/ufotools_data/input/ufotools_basic.ufo/glyphs/space.glif create mode 100644 tests/ufotools_data/input/ufotools_basic.ufo/groups.plist create mode 100644 tests/ufotools_data/input/ufotools_basic.ufo/kerning.plist create mode 100644 tests/ufotools_data/input/ufotools_basic.ufo/layercontents.plist create mode 100644 tests/ufotools_data/input/ufotools_basic.ufo/lib.plist create mode 100644 tests/ufotools_data/input/ufotools_basic.ufo/metainfo.plist create mode 100644 tests/ufotools_test.py diff --git a/tests/ufotools_data/input/ufotools_basic.ufo/data/com.adobe.type.processedHashMap b/tests/ufotools_data/input/ufotools_basic.ufo/data/com.adobe.type.processedHashMap new file mode 100644 index 000000000..0e7ed7638 --- /dev/null +++ b/tests/ufotools_data/input/ufotools_basic.ufo/data/com.adobe.type.processedHashMap @@ -0,0 +1,1494 @@ +{ +'.notdef': ['w640l800l1420l560670l498670l5600l142670l80670l4980l14151l141619l499619l49951l800l5600l560670l80670', ['checkOutlines', 'autohint']], +'A': ['eff001d417ca7d8431146da2328bf569b4c1d87a99ebe49093e7205449fbc98b47c9a4494102aa237ef641d9f34ba80f95d3b7bb0675ae42f6b445002a66b059', ['checkOutlines', 'autohint']], +'A.sc': ['bc06ebbbe34d41fd738cbecd91672e0fe18a3fc6b819642923ce28ac32cc623a8c39bc38005cc59d5e6478f992e3157f209b1e86b5a94f4e9ef20f7e3896e19c', ['checkOutlines', 'autohint']], +'A.sups': ['1274a4e20190e258c9ed789a460aa571c8e9f36c2292c0cbb4ff16da778a1b285610267636cc0471a90bee9d33b2cf32d22e908419f17de64d341cd6c95fc670', ['checkOutlines', 'autohint']], +'AE': ['954d4fde67b7bb2c3e4c87170a0e2ee85e7fbb201d7d7bb4abc167c9a47e741716cb8d53130e95723fb885b2294170c60f909504dc873b1972cbeebfa44e1564', ['checkOutlines', 'autohint']], +'AE.sc': ['d97b73da479f215167fdef9f997d93ae602687efe859445c9b9120eb368e0a211eb6cc68fe7ae84561e8aec5ae773408be8fe9610a1c07c97a51477cf5428e05', ['checkOutlines', 'autohint']], +'Aacute': ['e3dfece1fa84fff526db9af61757c3957b3c33e050cfb5d75dbb43c8e28381d75d7eb1245abb693adc711a5f37e569976c2cabf3901cae89dd42653b36e61bf6', ['checkOutlines', 'autohint']], +'Aacute.sc': ['44bc4b279e7a4e660397baade0f76a7a37e4c9fd270538ce39779444aad55ee8f76b9bfd6ec021597ddc078f94dd63ff08bf36fb16570ca3caaf982e63a5d499', ['checkOutlines', 'autohint']], +'Abreve': ['766081ec5b44ca6e0c423294fa2a23cc404082f6ba9d003df260ed0ac78926eac5f444ba156bd0172af940c43400e283677df68406e88e404ff7043cc70d6945', ['checkOutlines', 'autohint']], +'Abreve.sc': ['acd3837af981b08a74a78ad4d3f4bc4794a46da2952cee113704fb56f5960c1fea4dca0f6b8d97485b2a1b0108f75f48c6f7b98721e8800055d1916d6e8e4ff3', ['checkOutlines', 'autohint']], +'Abreveacute': ['fc9bd23218174c3385d32ebbe511d9466cccc6a6095668d3deb9fb76436303971d1c61d51108c73f819102cd89e5fa97b53a59ab035da6094a6d3c44f98087b6', ['checkOutlines', 'autohint']], +'Abreveacute.sc': ['d42f56157a4c04b3b7b1cb98abad56d1b8908918582d282ae66caa4e36556120e1f8130d1052095d37f564701ee0bcf20fd0dae5e1b73e96719a2bbc05b9475e', ['checkOutlines', 'autohint']], +'Abrevecyr': ['185284c4e98949734bf352e84dc96d0af4a76676c769bb723baddbdd4569da6c71331db66c3ff803add8bd326f23854c4959aa5a6a51118109d1a0d958fa1394', ['checkOutlines', 'autohint']], +'Abrevecyr.sc': ['fe8462493f8331dc7bffdb7c6b3e49dfdcaa68c0960d07eb945c1f88b489e00b666dc63bb2fc52eebd3286c5c587201033de0f7277d86e2cdfcebd43e9c62973', ['checkOutlines', 'autohint']], +'Abrevedotbelow': ['e750a61c7ed17921bc52d94d9551a1d32a01fcead2ddb7a3dc345c1d71182cf53bc9dedbd9b9e1be44a60dfc70712002035a16e518d419aaf38a6cbdf1d26de0', ['checkOutlines', 'autohint']], +'Abrevedotbelow.sc': ['2f7ca87cb823276ed3f89903fbc9587735165d083cb099df370df109422fca2bd1946299b1b7a35f8140206cf3ae29c1a410b0d76fb7b751b0fb76082dd44c48', ['checkOutlines', 'autohint']], +'Abrevegrave': ['ce3bafbbd364e9fea6eceee17d0e91ee1fd172e791ad27937494a224f9c8284065ad23fbd7a605d1fde02859f97e093240cfac5fe198ba26ce35549e51895bdb', ['checkOutlines', 'autohint']], +'Abrevegrave.sc': ['2a321ecad2be44f2c203eeed6e62b4d9546fe5f7299dd1701b78b18982ac8c701ef892901f30b2df67fb3505ab4e68ac2019fe673ef5a699e1eaa78a30fb38b6', ['checkOutlines', 'autohint']], +'Abrevehoi': ['12e6a740e4e9afc0d9c54598d2c90888d44f9236284d32f8e0107221736d61e48a135d7c4e5679fbbf91c72bc2c92df9a839bbe101789fd14e8577172a0ea504', ['checkOutlines', 'autohint']], +'Abrevehoi.sc': ['4a54c833f57d31bdd3c7b88c8ab9211f3c16c3a85bf6e6026c9bfda46cf332274b1837bf0d88a9d809df50d4b3c098dd6c649c0a2b642aba2aa75d2d1f1b55be', ['checkOutlines', 'autohint']], +'Abrevetilde': ['1560e4bb0c290ebb4fe1926229fefc1a3180d8cf9b1dbd107517db0536dc460e0a271fd942752ece3e1ffa4bb5243f5c577b4bfd10f8f822c6df48e5e57c2d9b', ['checkOutlines', 'autohint']], +'Abrevetilde.sc': ['733c85d11de321535b95b8a29bf7703da39239f004654ceafe44b876efb7314053b5e4be0c416769d2c31c1ee38a3809b6d58372c4c4eca3e24a85ec38080a12', ['checkOutlines', 'autohint']], +'Acaron': ['c036af38a835235a5207e4150fb4c4143ed0ce5fb6579c67869d61c0042e6d57e5690ce516bbb82ce78e8b3e40364240d94b543bf26572058f7bcd7c4fc2fa39', ['checkOutlines', 'autohint']], +'Acaron.sc': ['69b66b64259a352e0d546d0fd23c2d3bb0443e2a7ccfa07d3556a30edd97b06c81a29f7b42f3cad234cb2841b99db9eeb3fb16a3bfa869b34839d46dfbd976b0', ['checkOutlines', 'autohint']], +'Acircumflex': ['0c6ecec4444f450cae565db31669cd5e35b5071599ec092e0cdd53fdfc45130da4ead1e83bb283498f967f49a829b9e7ec010ae32d90840a7c857f5bc7f4d69b', ['checkOutlines', 'autohint']], +'Acircumflex.sc': ['f91fbb76abbfc3f03eb185d94e6e53d12b3f648cd6d67130070123cec6ab39ae728627ec8d84638ba3892dcb83f31417bd4a9aba63a4f7d691ff7dcc0dd8d6f9', ['checkOutlines', 'autohint']], +'Acircumflexacute': ['bf9df19fcca4a30953cd3455f7753dbed91f6cfaa0fac4cb8895d3ff46d8a3f5f1f6d608ff98b6d97655b236fb480c8a1af6c6541c923faff0b0bff936bb61a4', ['checkOutlines', 'autohint']], +'Acircumflexacute.sc': ['67fdfa179868d17ac6bf7fd665e17291297c31aa31c6a46c9f9d3813b8e43c488ef275a4b49526e03846a60095f95e658f682fdf18476db013568d7c75827681', ['checkOutlines', 'autohint']], +'Acircumflexdotbelow': ['194265555ab87b069836d9d4371c16b0b20e5aed4de10a05f2e8e41f8ad12450f06deb05d9815470595bdc971acf7bc350b4d5224ef72aa50a5820f10543aca6', ['checkOutlines', 'autohint']], +'Acircumflexdotbelow.sc': ['f88d278b8056ac949e874ad31c84916157d7b62b8328a333ac787851d368f4008b2d81aee1d1ec44516577be07543dd9dc79c39e27ec0a430f53b20e09a2a79a', ['checkOutlines', 'autohint']], +'Acircumflexgrave': ['91db867c3863d594284e87a35e6605be8ff5be7be787afd734024a42aba5d4098a73ca36f84efa11b25cb7cdb9f512db20ffc2be8e02c4bc2a3b6882f1c2b06e', ['checkOutlines', 'autohint']], +'Acircumflexgrave.sc': ['8708dc89ef4780a2ebf483a9345619be41571ebd58995703850daf1cad5377a779259352c2d4732fe4f0efb5139210b4acaaeb38c930bb0068cab71ebd840784', ['checkOutlines', 'autohint']], +'Acircumflexhoi': ['a67af00ca315083c4fcf178fc21da991bbb1dd575e7cf38efa011e6a3bd2c4d251cc99c1c8dbe815f7b1875d249407c57b248b14555566907ba59300e444ff98', ['checkOutlines', 'autohint']], +'Acircumflexhoi.sc': ['9948ffcec2637ba108123454cd02c36e40ab5b7e53f9170031ecdfc9038b08141e6121eb01259232b4bee8efa6c55a8c17cd9e0bb25af2c515ff102986fa76c4', ['checkOutlines', 'autohint']], +'Acircumflextilde': ['1dd9941a6b1f319edc9201aaf89aeae627d7e5a2900d4499809a7fef92e0cfe124ee418ef2682530d1722d84bfe5a5f067895144b6505cb7ad46a91cb703d1c5', ['checkOutlines', 'autohint']], +'Acircumflextilde.sc': ['ac7bebf47cc22a824739de7d1717c3a0f355f238a026a44f75e454b8626ffc861a14c2b3da49d89e0569fa489bb9e404c90d17b7ba2b820b57f18ea9f0df4ea4', ['checkOutlines', 'autohint']], +'Acyr': ['e691ac1e51e16b9ffa8201f85c3d1548c61bc96b95d6aa2d7afe29eadb43d57b3dcc4bbc2c21a2cbf6ee1fce3aa4c6a6b484ac4dfe94f02cdade905a7ae89cfb', ['checkOutlines', 'autohint']], +'Acyr.sc': ['aaa46d3899569fab1548f9137f3b070820d19ee9c195bc482b023d920c066722efb7e2217160bc6d5f165eb6042519489d42ff4d5f9b0006874ab41a7297d026', ['checkOutlines', 'autohint']], +'Adieresis': ['16011fba6e0eb030974f22cefe866215ef1ede2499ab531e74e23814f4643771b56c1c3900e22cf6c06d692e3232c60467b99a348e6b503dee02e73f2a2918e7', ['checkOutlines', 'autohint']], +'Adieresis.sc': ['4364a31d80d7aad0e4bcbaf3c4b4b6c75a93deb6802805f3d31b6af297e47c3637fbbb287be94b360289be06313a96817c906b0c5f90d676e4e81792be5e8eae', ['checkOutlines', 'autohint']], +'Adotbelow': ['5e592936e3eed6ba3f8f7cbc75ec5d4e73de1d422f139afe3e6f3049682565dee1811f86d69548fbe544968c13cc533b3d2012128d670f9bf0d400a92fef2a49', ['checkOutlines', 'autohint']], +'Adotbelow.sc': ['30e8a17fd722354d290d5604acb7523f7f25ce8909acc796e0e40494bda85cec45b9bd50db606959feab2faa000e8e620f12e1e5b8620a27083d75820db556e0', ['checkOutlines', 'autohint']], +'Agrave': ['47eeef24f5be2fcf2b43e2056a081ffb833f2776626bcf5f827da82fa5c4113e8a2da3968e0dfaac25882405aec0f4adbf7702ea2b3a87355062ece32e8418d0', ['checkOutlines', 'autohint']], +'Agrave.sc': ['30a57a631c872b8d396c8708e4995039d9ccbe3575b7cca46166306b8df27904c6541a531b2bb5de213b85bed950d89f1d58c4409d8c998f498d997746d4f11d', ['checkOutlines', 'autohint']], +'Ahoi': ['b03aa8d77e423f79c38c15357b32cad1287cfc4bac6a1743cc3c1b04c6b881d00ca443fd8b31fc94cf3e51a1e67cc42e68d510ef5cd189d4febc5477cff07f26', ['checkOutlines', 'autohint']], +'Ahoi.sc': ['da82b574b113abc49d9193798349cdb5059dcc4822c936e5a685da6ad255c20c52509373bdfdbbe67a3f6633244554d76c96534dc12517cb556961d49107b9ac', ['checkOutlines', 'autohint']], +'Aie': ['9e781f760e78d989fe85751d1cb63d28c44a5a035d96b58724332d3b3527c7677a20bfff06f37cf6048661aafdd869617d6bef7435e77dda7550074a95f4af10', ['checkOutlines', 'autohint']], +'Aie.sc': ['02975f44aff169cf739d748e3bcf7bce94679b94caad2682149130cdbc8c64da7e8ce3e9c9675dfa5c73e8f71aa321b162a83d5c919ea2c6856bbdafb43b47ad', ['checkOutlines', 'autohint']], +'Alpha': ['e691ac1e51e16b9ffa8201f85c3d1548c61bc96b95d6aa2d7afe29eadb43d57b3dcc4bbc2c21a2cbf6ee1fce3aa4c6a6b484ac4dfe94f02cdade905a7ae89cfb', ['checkOutlines', 'autohint']], +'Alpha.sc': ['aaa46d3899569fab1548f9137f3b070820d19ee9c195bc482b023d920c066722efb7e2217160bc6d5f165eb6042519489d42ff4d5f9b0006874ab41a7297d026', ['checkOutlines', 'autohint']], +'Alphatonos': ['e481b1d3eec5e63dbcc018834e5549bebb4ae25b93b96942e72730db233b3dda20292f98d78605d94a567242f91995e2abeed1d71fcfc55f47b392a36e7f521a', ['checkOutlines', 'autohint']], +'Amacron': ['43ed03f1897e9a62cb69941968bf909bf97b6c086e92471e103a0104b463e2cec2ca19690eb4439f5ef723b5167fcc513087a09b18acf968220188df07f7a407', ['checkOutlines', 'autohint']], +'Amacron.sc': ['e868505ed4cd9b4748d52304320ad10d9c3cbca0dbf1692eec0e1a33152cad56182a9384d1ca7e229fb8eac08fc37f5b34ca55d98b14e08e60ad2b702397eda5', ['checkOutlines', 'autohint']], +'Aogonek': ['dc7937ac5f7b1c44834f094cde180f0b6b575d4739d7bb80b10d018cd6f805f5436c500c78b1aedd394010c5d224caaec6303dee19c4ddb9cd65b8cea76a72be', ['checkOutlines', 'autohint']], +'Aogonek.sc': ['e6bffb1c4af47af9a84cff8f6427623b2f8c0e27c2b6e8bd43c88331eeb29329f5fa779c033fd041d8823aa0cee41f845c0472b7b82cfea9befa6a7876032b16', ['checkOutlines', 'autohint']], +'Aring': ['8f569b541521d25cd5e7258c1244711746fc36f9d593c5abdc0086b4f8eca264a282a305ad2223bbf81179fae430868f2db3f0238905c5c1e1d2b1a070f433a8', ['checkOutlines', 'autohint']], +'Aring.sc': ['f8cf5527e61412290bdef19bbd40d5eea168879e6222c7bc5bf8a455b62174cca4ff5e21082e7b635dc26f3113c86ae6840bb9d54d3395e7d540728e88d26e5a', ['checkOutlines', 'autohint']], +'Atilde': ['1b0ad5a5e874f0c86d5f6ae8212b06d38b389d0b9d442414b61089a2f10c16e2f5d05a51969839359efe1c64d8b8af97aa1694276089560d6708992776d036d4', ['checkOutlines', 'autohint']], +'Atilde.sc': ['2b24f54d84ad1d4e800dcbc1e032e0698cf78ff01efca9dcc5906e09afeb01d1c8a0f10b475a4f28bdf1642aefc0093610e2f090602d88505804b385fd888789', ['checkOutlines', 'autohint']], +'B': ['4535e375d6e65396120fedb1c75556ed5a211738f4ae89ab906a6c41ba111830841e7d3745e31c88613f3b5b107a7dfd5781362770025bc72f14486d2ea966e0', ['checkOutlines', 'autohint']], +'B.sc': ['a69d4fc02c1764609f2bb0d0eec62037661de16de39edcd157173ef742b1a5d1f2142d909660811d4d2087cac76b05d0a8aea2784ff236dda5f173f2bca16aff', ['checkOutlines', 'autohint']], +'B.sups': ['35c1bdd94e247363c305fa3c70b80527b92e1f1495e7d3ed73a5690dfa0b1448e5e884dc33cea948c114049bdd61d4d849d12fce635613e8cd18d4147757c694', ['checkOutlines', 'autohint']], +'Be': ['97e825a3a8bec01eb575a940fc3e84cd6cf9585a9f157a70f0f79d81c4f79b941a835bc2bd8dbc8a97902e7b16f5a120602ef947f24739a48b865082d89fa415', ['checkOutlines', 'autohint']], +'Be.sc': ['769e73f5654d4e1fae36546e14a069a5d168d2da6e3a733e877afaf527addd0eeeeac3fd34d00866c4faa9bf13c4be60387f3b6a206728b0d01005be1d16dd89', ['checkOutlines', 'autohint']], +'Beta': ['82faab1360c9a2cbf93c4bbcb195c9650b330bf77e2f8842cee35197c9c3a0a47f575ed26a58740e30f1863a8e587369384e1687eecc17742acac0116b1ae4dd', ['checkOutlines', 'autohint']], +'Beta.sc': ['e38080c70b4dceab7071d5c383c58a93340db18266de290ebe007aefe11976ce6cb7e0c437135a87974da36f8de9d5f854358ea197719dda47c39bc9ac5d820e', ['checkOutlines', 'autohint']], +'C': ['e149354a9499a47e142d471a002710c3cc4db8d04918372a4e8d9f02bf08bffcbbe46da2915413ac0fb6df53262a1555592ae3b5dec257b1e25be081a9184a50', ['checkOutlines', 'autohint']], +'C.sc': ['d6fa84c93425db862090da907858c75d3b3256b7376e31083f87d304952256857d857fda8fa2b3d07fe2fcaed86e6ee2306acd638e6bbba70629055a748e433c', ['checkOutlines', 'autohint']], +'C.sups': ['6faece8f921bcaf26985d837c8403add59ff26a0c4d5514850b59a0e7b54a0b47d025e8297296486953971444e860a57407f43dc9ad0d52c9a8a6e7816421bb7', ['checkOutlines', 'autohint']], +'Cacute': ['113e75d92f7de442473c6d9dcc43428e822f6495f9fe2ae72e52431b07bdefa9fb25658ae7b73262d6e4067560096426dd3d482b623d9271267ec657bff1062f', ['checkOutlines', 'autohint']], +'Cacute.sc': ['6c754004c0d178b3bdad3df62ad3fe1ba8603b630ce5c5b0739769a99c8af2d5292d7b2fbf7c48067eba3faccdb97053282b256f56581df03616d3826d4be1b9', ['checkOutlines', 'autohint']], +'Ccaron': ['799d2b683fb1c5544035728568fa91427c8d4934002a2208235009be357b618f9e1960b029bf1ca591d1a0494af0dbe13447d85ad63464250b66615109a49e71', ['checkOutlines', 'autohint']], +'Ccaron.sc': ['13fa76b49390954671a9f0eeb28a5f3f282dc0a70c17edbcfdff654d1cda4a03e1d59b95101105987e45ab8c136455cd1e9d39caeff82abf2bfff65ea617e2ce', ['checkOutlines', 'autohint']], +'Ccedilla': ['bec22bb573827dbbea8375026badb30f13a2e6b296fb170d787634ca5da5f926bf44fede61d06625f3f1666000bdb59cc0ab7c2ceb2d859c0f3eb86bf0ae5889', ['checkOutlines', 'autohint']], +'Ccedilla.sc': ['d866731f8600031b0c5ec6b50b17cb3fd163f4a01bdb21e159a3de3e35d36f01da6f2d1e510db4ab865c4761eea34949ae5bbee99ae43c5b2aec594930da6448', ['checkOutlines', 'autohint']], +'Ccircumflex': ['d76009e3c214d3ff474caa55d24e7cd8a80dd5717af7a28c5b400349621a3ddfc10accc8543066168e1ce123e029566cb932c02946f08d49ab55f164fe589611', ['checkOutlines', 'autohint']], +'Ccircumflex.sc': ['2b28f7daf8befc6719073eda0edbd8d4777ac927b300ee35f4b97116dc4d421450f1441fc9677bc642b7873a58cfd53a0d1709d3b70a3fb29166f68736ff1071', ['checkOutlines', 'autohint']], +'Cdotaccent': ['ce19d9111d5a6282a696ca9896e2865c69bfac1feb6f3a05f70bd42aacb2dba8723e9e23c62dc4d024bb965fe08bf271841fa00f13d70c5d0820582998f1b90c', ['checkOutlines', 'autohint']], +'Cdotaccent.sc': ['e4fc034c77691b68837ad76353a0905166e8e918d074852adbb548bb3a374621e9516289a7a2778c2973e688a7fa1978d3bd772d65bd3fc033b2559dfd02e3c3', ['checkOutlines', 'autohint']], +'Che': ['73937d1822495eed5858f9e8282adb251fce9ab5ef935ea9454896f972fe3fd2eb7f2952dae5c866bc2cdaf577369e8424f9e033397ce73638ca08a09d968dcb', ['checkOutlines', 'autohint']], +'Che.sc': ['229cff36a140838dfa30a3ac1dff4b1aa9f6ac710c1093e67bb5ad3238349961416eaf5912d57f85a58a259bec1ed35cebf38a24a78b41ddf19686665d009349', ['checkOutlines', 'autohint']], +'Chedescender': ['43ad417139ebeaebcf4e2a776228028d585b9b78220943223ad2186a28c3be0a7bfe241645f7eee39395d9b336133634335820e51a95c3063024618a95c6fbf4', ['checkOutlines', 'autohint']], +'Chedescender.sc': ['54cec731314ca0ca439b4feb1b0180a7d4c6d8938d1b4279046526617da37e5d0c1a2b76d2de6a9cbcd31119a9d3e53c4b99e37236581eef035975018d4a69ad', ['checkOutlines', 'autohint']], +'Chi': ['136a33b3860b753766f26d70653042121f44f077c24007e919ef4bcd87fa0fd143aeecfe844e2c34b5933d5376f3f5257cab70a51d2de073ae8a36799ef32138', ['checkOutlines', 'autohint']], +'Chi.sc': ['5fdfc8e407ab406f216f7f860f2f2caa2f613259321f22fb45590ca5078de33127a7f28305b42cf894408287deb6d8847f6491981543962e93f5a5f0d74b8eaa', ['checkOutlines', 'autohint']], +'D': ['465e2adbdfd74bac709994b46371c27a7936b86cad8bbb25e62dc9065d311cd0b81f4b5eaacd8810a56fcf3eb0408330d3a4f78fcbff794d5b124a1cc19a6e7e', ['checkOutlines', 'autohint']], +'D.sc': ['86e1d4fe088ade8e26e7a6eb6f63f2322931d6728851cfd14e6960802fa59cfdebaa3b4e2c1800cb2b1a565bd61cdc5b901540b2ef1151e139eddfa731459735', ['checkOutlines', 'autohint']], +'D.sups': ['701cb6636629407525f628ff6eaacc56ca632295ebc47681917d9dc6ed4911a75f1923c54f4d23534d16c5982ebbbc40c04b9db33385e5e6127a50f3d2924762', ['checkOutlines', 'autohint']], +'Dcaron': ['b33ea558943af87627631a496dadd521e07926a5031cff9b3c29a5d5de4a0e511279edec4c9e522b5fe48d10f45e958865dddbb0d87dcc0bc23585045214c97b', ['checkOutlines', 'autohint']], +'Dcaron.sc': ['a0107ea35c193bb9a5e7c78b10ccf59e81235698309cd4cf64fec9433b6b5e5512439b3461e03c5b946fde8ee7c7702aa74e883d7074f44250e68f0ffa1b6d1f', ['checkOutlines', 'autohint']], +'Dcroat': ['d6546f18195b492286701f5ebc3df68a7a97867a033c050fbe0c299082592c5fc3d619a9d6a7277c9bb1617f2fd112c39287ae50f721f11e2cbb32acf073221f', ['checkOutlines', 'autohint']], +'Dcroat.sc': ['d048681b25e7ffb68ccacf9a363cffb5010ad52961c3370ae391c6b067678d9f06bee05b808626a12d06992e89efc796944f0b18a11901c1e7213eb71de09525', ['checkOutlines', 'autohint']], +'Ddotbelow': ['0fded731c0136d13e21a3819f3d42a770f8f5537f02b25e09f0a6d33bd09e69176548c91d68a3fd5ff9cd36fcde73924f91dcadf03b47a0b9b0d3c6f99ad6358', ['checkOutlines', 'autohint']], +'Ddotbelow.sc': ['fc7228fe5d9207acece703086630d99b44bc9630fd656bfef9b6890ff30f31d766a08984bc48d6f98c658f40edeb5fc822114dd5076c4540e9f0a5ad7178550a', ['checkOutlines', 'autohint']], +'De': ['952e3405a7bf753a5585774ab1d9af46d438acc9bcf84e2b66e8cf2278005a6c55cc28c8a5f2c17e226e66502bf5cbb3bc46a17ee752dd9d53fcb31e95897901', ['checkOutlines', 'autohint']], +'De.sc': ['e2837612abeb3bb7eea280066200dc8e49c8e4dda84eeddfa9d417fe97ebf21c0c820e7ea821f54992f290b6c55cde1175d62db046f2c173a8f949013af47dec', ['checkOutlines', 'autohint']], +'Delta': ['w591l260l590l277585l281596l259596l4790l5620l56242l326675l263675l2642l490l5230l52381l4981', ['checkOutlines', 'autohint']], +'Delta.sc': ['w581l280l590l276463l281475l259475l4650l5450l54541l324553l263553l2841l500l5070l50782l5082', ['checkOutlines', 'autohint']], +'Dje': ['3c8af6bfe556a4688d072133b9e69c6f81883355f30dc067940a9fd36f5ab3a913f6c5cae8bfed18b3a5418825fcc8e3119d6a172e7effb1a74fe3cdd2bb1f22', ['checkOutlines', 'autohint']], +'Dje.sc': ['3cbcaf979456302ad41943f7fe8e8cfc310069462801b3fc72b11ba947878140235f82039d17ec068b8d16172d77aacbef7ba0f5fcaf51fe2860e8bb61ab9800', ['checkOutlines', 'autohint']], +'Dlinebelow': ['fc7210261221e95a3383a1e6e619ee627ebdcdeba9251ebfebc0c49ad969403f3e307b77a7520bc1ad203786817bd38ff46a1605b071129c9b301bc0f0cf38c3', ['checkOutlines', 'autohint']], +'Dlinebelow.sc': ['fd7ef747a3b15bbda38151b9bc92a90ad5f192dae044bf1a6bea35deb7784ed4bbbb6307dbeb9c12180b86637a7c35490e77ba853e3c9d0eb5d8d864c26cc7c5', ['checkOutlines', 'autohint']], +'Dze': ['e03fcc352fb6238558527aacfadd82a84f78a3556e3a9903eb4a599b65b6fd2788a6c11cfc81a64aa1ffbd16e27ae8c17e52cd28caa38d6f896c658d1e06ed36', ['checkOutlines', 'autohint']], +'Dze.sc': ['c37e3d9f54dfc5ce5b7fa10c615d3ea92457fc0e2dbaab4c416207497f91a72a503022a0f7bb6f5f59fabd82cf100144a13bc33f68e78906484368aad0a1d32d', ['checkOutlines', 'autohint']], +'Dzhe': ['ccf98e4a57c2cd5a64f2f07000397cde29733e8f89b3c89fe699ace4bd6d1ec3ea8ab21c52d065a349a13d82eda184cac68e507203e340d5361cc09494916be1', ['checkOutlines', 'autohint']], +'Dzhe.sc': ['328fdc6fa409694082825b40ff4a56d9133ac56897f95159416462a16f5f0e314bc1c34d66a9078a65d15676cdc4a7a5a8aa8d5294ca4fa09598e15b45b476c9', ['checkOutlines', 'autohint']], +'E': ['18b18a5c532984a41b0705a565dcc7d6b0372cb8f916ae4a81f843f4ac1d68e6f9e68ad243b0b60dc532a366d4bb0909d73a02a9e6ab2a7c829a6c9ce6f3ec09', ['checkOutlines', 'autohint']], +'E.sc': ['05e5e17245545f1a77772cef1cd5569a2063551d367017ebdb2d98b22325183b3bdba241609e7d3a969ccbeb99a72feeca42877089492a801e61949d5196101e', ['checkOutlines', 'autohint']], +'E.sups': ['f58a3f23e8d84f71baf0c839af86185aef4695f4f5cad3fa708ece384a91f7442edc5270e679001f42ec893dcb110407da5834d2de66cfb378fb14f2b5712b5a', ['checkOutlines', 'autohint']], +'Eacute': ['d2766c1e2c104f39f60151d7f4b319fbb6e3831a04eb52741d1f288eb545d15a33f25f5122f98e2d4d8091a69f7d7b4510961b118f996d5be311350fbfc563a6', ['checkOutlines', 'autohint']], +'Eacute.sc': ['11773b4c3bdea59c15921442c2204c92e0d1ec326629932a6187d07f51dbe6ddcd26610c1443bdcbc48274eeb61855e0423828c818438db35e19e4061250fd84', ['checkOutlines', 'autohint']], +'Ebreve': ['83b81cce5625cfeb56b5172512d935477383afdf0eef28b7f0549ad4657d4dfc43ffe695ba1ab5c9e47cfa6021244bd78736681f2ab1b11b03cbbb3d0b440d89', ['checkOutlines', 'autohint']], +'Ebreve.sc': ['02ea470dae38e85ad81b8cb0e74f19e2ec0bc177fa55ab3ef1f2ea1d2315122386b4edb2fbc50b6b4385cf991c6c4a861ee059211339b35cd9b9d8a3a304d9e7', ['checkOutlines', 'autohint']], +'Ecaron': ['b7bfc7214cdd775b7e5f508a12bd538cea30aeef05ba86a508a9013dbe44e832a5eb7a19c9f1acefe572a4c760a8dde7d2e7d2addc548e2f568675aead18fde6', ['checkOutlines', 'autohint']], +'Ecaron.sc': ['405caa88f281ccd952892db13cf4f2611d2189c17d2f6b48d8685273bee4389b7d7dc77f1024af510ece4884e667df4eb42e7941079ecf11090e568dae9ac89f', ['checkOutlines', 'autohint']], +'Ecircumflex': ['2795bf585b2b576627fa8356c413b2d204f3f2eb02636455962f2d836da2ab80ea2a3e80632a9493773b699a076692aa3daabb514999c4a2faca4f4a146ec51a', ['checkOutlines', 'autohint']], +'Ecircumflex.sc': ['1b06480cefccef954fd8f4bce13dc9fc39e9048b5b34251b6198980b85bade226e3292b0ddb166216555c7065d03d0f156a508d692e2730426963c53ba6a75b1', ['checkOutlines', 'autohint']], +'Ecircumflexacute': ['4c7b4ae6ce77012da85e5e2b9a0320d9358df52589b598b8fcb858e09da57fd18d546e406b936707a4811573865dc49c8b7fcb5cae0a85d23e83ba98ca98c205', ['checkOutlines', 'autohint']], +'Ecircumflexacute.sc': ['c45db9540945d1a296a09b2fb050a013efabea72b13fe350995235fec239d74d79f2e3e0041718261495e327003f000038f1266732d5aab9e531640bf1c97a76', ['checkOutlines', 'autohint']], +'Ecircumflexdotbelow': ['348ea7776557fb55d0dceac861f8f22f08e497c4f33eb8ec12712520fd937cf3d75494921a3278dca1853fed85a98fbe6152d0017c6d6b0cf7719b43557742f2', ['checkOutlines', 'autohint']], +'Ecircumflexdotbelow.sc': ['0714e0df5725b7a9bba143c31c7084d3d65a57e208eba51bcf71c043caf0938c6a67c1f8dc74807ff8fdd3d2b11f9b6112bc8ba59b2ed876dab294b9de119fc5', ['checkOutlines', 'autohint']], +'Ecircumflexgrave': ['63f6f857653389aa71cbc7f4cd50bd55ae34372cfa6553929574dc52b788ed3bc5e51c2c2a5061937cf03e31e16ebab4d786a183dd3f1c761de7d233c2f875a3', ['checkOutlines', 'autohint']], +'Ecircumflexgrave.sc': ['23f15bb4a424b91c0f6c338bf722d8d69c0a465d37ed29c660ea3451bf1af2c6c4df1c6d39b7ee6a7d41eda2740e926f1d7a9743062f840e45e20de98149e989', ['checkOutlines', 'autohint']], +'Ecircumflexhoi': ['b0ca410a116b051bf381dcf5d928f6449b2feccf9469c860dabb6308596ade64ccdf1ba6b3ff13ab7e197a558f9ad71bc134189c0f6e3e9e4a0c3ff4014764e4', ['checkOutlines', 'autohint']], +'Ecircumflexhoi.sc': ['7111443d3ead3c9850a5b8a9ab3b7f66ecfe3d0a9dfd42f5f9130693670fa6f5b1fbdc3ddefeeda5c9f61b7735717c82c5dcfe24ac8353cdc37c3dffacd73a31', ['checkOutlines', 'autohint']], +'Ecircumflextilde': ['a00656bceffff0418bc24ada3907d4c1fa7e703a8cae6f34e27d2126230d67ab97246ea25d1631b56c424760ef8967c99d74f01ca105380157daeb88e5a23be6', ['checkOutlines', 'autohint']], +'Ecircumflextilde.sc': ['1031f305d92dad31fe897d5a905cf08c1efcf7cd01c10016fc0701e82dce7237121c4c5b884227f8ede7488fcee29c5b73e4ed1f6b476c5753f4e508f34bf6ec', ['checkOutlines', 'autohint']], +'Ecyr': ['09d274faceefed530d1b231276896149bd15d821f67b6918f17b092af1a020ed93d4c3d3ec1f689f5460d6bf9db8d2ac04b3f40204fc3bf033b43320d2e7e47b', ['checkOutlines', 'autohint']], +'Ecyr.sc': ['55626d4fa03f06ed5f875d81546c6648af8bb948c2872f9b9f1b5675ff5f6c97e4bedd2813781692641eedf859b9e1ddc5a3060c01178a19944097d1e14886bf', ['checkOutlines', 'autohint']], +'Edieresis': ['6ef728965f7d9f8e4f9187c7d9f81ae9ff927c265f09f496583df2ff51f98538fd6ecfc829bc5a22a764a0d8da69fb9eb6204c81c349dad1e7355752866747e7', ['checkOutlines', 'autohint']], +'Edieresis.sc': ['0a9d057c96a9b44d6575718ffba1d2d2886fbbee3ffd71460f40de0b5eb41c6b5e6aab67cd564e87ef9f53d08f0a4546d3a9079ba64b1386c588d9e995340c3e', ['checkOutlines', 'autohint']], +'Edotaccent': ['eb8010397697eb2c9af533a0add8afb1fcf1157abbc16098c61e09b1e516fdde9ddd716bdb1954523f4f618d9490c836f8e25245a81e4dd73ce1c82b8ff1a2dc', ['checkOutlines', 'autohint']], +'Edotaccent.sc': ['8fe9c76a2908dc6458341539cc1479903709547b5fd55000a0ae408163ff29529240f0e4642ef8d784765bd3b5d571be6e2a43b51c40e4fc0c4aba1f2012af1c', ['checkOutlines', 'autohint']], +'Edotbelow': ['2dbf2bf903d36712b93fe1fc39bea1d0db1b4d4796c660a765b4d75f16ff7c3371715bdc63cb60fd66afbe8f6d80bce6b0944d8ff1d03603f8b600681e325e71', ['checkOutlines', 'autohint']], +'Edotbelow.sc': ['08adf4ee255a6f7d39a12b1fed0da3157bb61098c4d4df880c243ac8de20abf2eb26d65f9e87b6b9da23c0268a5b10c9bb04c1e518d3713f753c02d79a33c1de', ['checkOutlines', 'autohint']], +'Ef': ['461ca079a4cff1c70a00bd9b797d2a6f0f8ef366807db8f1b59d041260c8bd670f1f038ebfdd813a2c8c8c3e3a46335f310937b17806a30921c81b3cf78481dc', ['checkOutlines', 'autohint']], +'Ef.bgr': ['0ea4e6d5fb052eee5b7c3bdea4b0241d922bf6a764c401255cd5e8b2d6ae4c7e044a6c57986ff6ed23e97a94a2073cbc5c3ce6302f601b035c74b683ff055d6f', ['checkOutlines', 'autohint']], +'Ef.sc': ['164fee782f659174ae2a2b39c73c14eefe14cb4dbb7379ac806321059e8bd5dd36ff10714a5f24e8f4797c9e7c2c5eef8c98ac800bf54bac5b91b9926798f5f5', ['checkOutlines', 'autohint']], +'Ef.scbgr': ['90aa9bb59f868c75051ac1ac51faaa539363518f154ec220f6387e4c9aef778dfa01752a12faf005500f5b2f7dbcae160c69f390b305dfb90a6e17e72214c449', ['checkOutlines', 'autohint']], +'Egrave': ['8dbfb9d933a901e48f6f9612e8dfbd91479e4e636c6b79db6767c512989c000ffc4eb92cd028396f5cc7641f1456545a6bab5db864ede2d662ec447a79ef482f', ['checkOutlines', 'autohint']], +'Egrave.sc': ['6b1fc76f93e5f2e3b1149df12f929a19fdef82606299ba0aaae570b009a1926ac0ba595e52eaf4554c299db5167aed288ed58c342c9c47f8887aa558bea824b5', ['checkOutlines', 'autohint']], +'Ehoi': ['38953b8b7cd051c523b5e5c209f70fcabca14d0f655f2644ac715bb0d12db2a297a4033ca675bcc2bc5d003abf7fb5e5c4fac995b9ab4988713edba91272ad9d', ['checkOutlines', 'autohint']], +'Ehoi.sc': ['cb53a4a2cfddaf337fb24aa2bf7974fa22f9d4e1ccfd93b6e64d81d754dc971423f3c7631a1fa7fcf1243b59713d248a3da639c12486a54b5571c77a8df618ce', ['checkOutlines', 'autohint']], +'El': ['9623312ebdc025f2d8aad855244cbebda10692f307bb14d3015e5772a03261ce7f82c9df92177817d1e2718449da2de8aeaa2c8f3a016e9ca66702d62995492c', ['checkOutlines', 'autohint']], +'El.bgr': ['8fa684001989151ba62fcccb8267de20ca9c95c5a40427cb2c61438f316a0c208fc616e8f246c731fb1fb5e2e0306c0e191178af256c32d67a9fbd520b74076f', ['checkOutlines', 'autohint']], +'El.sc': ['b9d1727cf8533b8bbb83631d469cfde43d1ea159153ea8234ca5d39220f472191e3cb985e5935e72d07e2bd9abfc4a71af3aa209336d1f4de8823e2f3a00a355', ['checkOutlines', 'autohint']], +'El.scbgr': ['3ac96c8d373568b22af924359e52cf5cbb0a2a4ea873663b38e2ce7689678ecbacdee28695bf76a67522bea74d28c6ad1f41a95b903dc80fa69c68d6d205a8a4', ['checkOutlines', 'autohint']], +'Em': ['802a2a37aa74479c50325562c315260b7445e6302abb9a2582ce4acbe2570c45acc17f2e1cd6fa46fbdac7280528e601886abd0732cc9b0951773960fbd8b318', ['checkOutlines', 'autohint']], +'Em.sc': ['784ae658ca7a4b25b13d6764f58d7ce0d531f0b0ab8a32d74f0db4335566c3835c56e41ed5d31bca5668f3b40b6cde13ed075be6dcf5457de501b0603ad45e12', ['checkOutlines', 'autohint']], +'Emacron': ['71cf5746b9140d5497493dedf26d2b1eb4d5fc3179aad120d7ff2301da61e80b7b860b215c42d30c12d271e9988ebe8258f65ea30d9577daabdd36789115143e', ['checkOutlines', 'autohint']], +'Emacron.sc': ['9c87b05bb06dd921842c40cd2a1c7e706a3a551bacba68d3d1e09d9c9619a07be56644cf9b14eab0a2479264e114bc6aff8120f56de81afe6c824f7dea2d0e74', ['checkOutlines', 'autohint']], +'En': ['48d344dabc76f55fa1ab67da2b794067992ae5e2757ca11d07c1405ee3b14bd875c0deefc66e8881ecd0faa2897d9b9a76431e427d90334583a4d4f067b55fa9', ['checkOutlines', 'autohint']], +'En.sc': ['c233da497cda932cfccb40bcd1d4b22fb247c059344b264c383e2b02f3f1f5e61938aa880990229b79ee65cf16f2732c9367407d484e8683844eb2f6244ffc66', ['checkOutlines', 'autohint']], +'Endescender': ['e8cc9b9a30e1d8eafec943a3dd68fff8ed8c9a757bacadec11b195e22dfa9e8e748b2820cacc755716123285a0b48d11954bd2e39bbe42d6d91ebd61b8028056', ['checkOutlines', 'autohint']], +'Endescender.sc': ['9bc754aed59fa618a6e6fbcf8c3316e993cdbed0744cff24dd5a83d67964c503bbd851d27a8937ce2c78db6fa8fa1d64cfc2b1218cf2bc470cfce1acba40fb43', ['checkOutlines', 'autohint']], +'Eng': ['bc12e14583625428ab3a5d337d3e0237db0e653063524d2509abdf5998536f80d8b76911ab1607fe24d32eed333748f90a8cd768498889410a763c71967faa1f', ['checkOutlines', 'autohint']], +'Eng.sc': ['0c64a47e3575e7f9e4e40c20014b1e7172d5711d6b2d7aaa49b144b7c1fc0602db439bf4a37fdce000c7b618ea1b07e7ee0e790154069750991b365027a1e7d2', ['checkOutlines', 'autohint']], +'Eogonek': ['de5cb73b953cb1e8f078877cae736c113caebca81e472a3786e6a0877f7ea0e9c9aeac2d550c0b5cb728bc09ac619fc4e1aa9eeefda407822a293fd8f7a7fd2c', ['checkOutlines', 'autohint']], +'Eogonek.sc': ['2eb4d126a25ac405db78ac6ebc0cc7dad816e554a92f82af796d337a39506a1e1be6865202206098ab422881ee0755aa2862515679c328e3f379ceb1894b0cbd', ['checkOutlines', 'autohint']], +'Epsilon': ['c9b109e0d8be8c85bf9ff4b3f13cde629f8543786fd74deefc590caaa5ee4ed4980d4927b76988866521a86219bb8d96ac894a47cdcfe1ef778b1cea83d42119', ['checkOutlines', 'autohint']], +'Epsilon.sc': ['5ff38e593f6a475803e156f19f46c5ce7966d095ebed392a864143ae35edb966276797d1a3aa367c0580a1554bbdb97ed5c950ab299e45d18cafe0af8354ea51', ['checkOutlines', 'autohint']], +'Epsilontonos': ['61cbc63ebe454bfee66c2ec3e49302010b89b5d9b0179da706e999dda208982763336498258cde8b0fcdd74da71dc3c037543e5e889ab5af0ed108fcb76e6068', ['checkOutlines', 'autohint']], +'Er': ['c41d059777c8716abf33533904c70fe2a1dcb71a7c72acbd43984440b67f64e5a277c2cc67b107420fdb7d93c57d58c31ca86af0ae78a917bc94567f01b758e0', ['checkOutlines', 'autohint']], +'Er.sc': ['74b5d96eb20e532d68f55157c863bfc5129ed609a833ce1eca5d24597f6f1cb4a86a02b5aa364d2b4778c5466c696c17799429a91aabbe3dde0bc90875ed6bc0', ['checkOutlines', 'autohint']], +'Es': ['841fa45a7a089753ae7367575ed4e5df0805ba5664731c284439228e5fdec41722c809107526149e821a732c8c3ada51d3556f9c41db871dddf50b486604ecda', ['checkOutlines', 'autohint']], +'Es.sc': ['d757b5052d2144d03ee08f4a7a087d7486248f919b83090304bc2a6ec02078fa101fd5b0e5007d8cc7c5394c57a2058706e77cb32af14a1f0fb670ac00c5196b', ['checkOutlines', 'autohint']], +'Esdescender': ['05d3dbc15636efd8ee9c2306e4d68a96395ab90d9fef083e089aff2c9772ff60e0aee6363dcc6bc18cbebde2881f8f01a441f02f1079e931e5b8475b07fbd5f0', ['checkOutlines', 'autohint']], +'Esdescender.sc': ['61a954d2aab50232b59819b5c63acec70a6777889f8d5241b9abd09ca2312e4b33e7449a3de6621445a90a489e02e0e450689d7ef130428ad020acbffd230b9a', ['checkOutlines', 'autohint']], +'Eta': ['48d344dabc76f55fa1ab67da2b794067992ae5e2757ca11d07c1405ee3b14bd875c0deefc66e8881ecd0faa2897d9b9a76431e427d90334583a4d4f067b55fa9', ['checkOutlines', 'autohint']], +'Eta.sc': ['c233da497cda932cfccb40bcd1d4b22fb247c059344b264c383e2b02f3f1f5e61938aa880990229b79ee65cf16f2732c9367407d484e8683844eb2f6244ffc66', ['checkOutlines', 'autohint']], +'Etatonos': ['28c2eafe7ba935bb89458c0cfa0fb654bfb38247398cb121256ed780b2ccac6aca7dcbe4dedd94a9102f652d8406e33abe782cd698d1bf883dc8c5ae39a16c81', ['checkOutlines', 'autohint']], +'Eth': ['7f187d57987913b946e89f84a0df60bd47fe17fbdb56684a016acec9fb86bebb157c5f2a419e96ef1dae61806f1ac8e6d9b71e30470898352d3c858e42d18c06', ['checkOutlines', 'autohint']], +'Eth.sc': ['e7d765bf140382bf6ad543409d862d24e44fedf92a5f0ee9cedcf1cfd0c9e06fe975da670f57f4b39a34cd30fcb65bf37f9380c4a9b4828242b968c772b2b587', ['checkOutlines', 'autohint']], +'Etilde': ['3aeafb9fbe28d420f46f0d566e4d73569a320eb04a5c7be68ea7e0bb20bfe503c7271557fb9e8b04768b5ab5c82a5811128314a0eceb82c4093115b47fa86663', ['checkOutlines', 'autohint']], +'Etilde.sc': ['f9fc2042d055163803db2d5a0049f3dd21f30815fd5f19866921eb689f0854708164745cc6c3067b305e7820d32242a8f9d7d33d67b1db6f0160e24659c1d0d2', ['checkOutlines', 'autohint']], +'Euro': ['755cedb6d0d1301e42835d400d6871c9c534dfcc010faca54ee890ad36ef57325def83a65d4279ccb6715d7fa0881f93d556173c69aaff24e17f27da7219b5a6', ['checkOutlines', 'autohint']], +'F': ['435d02ac154d043ebff5e9cc9507742370322b69a704b0bc245fd5675ded19d21722150d6d5353bde27090f8bb743774fe664844f265cc5465a5166a51f317e1', ['checkOutlines', 'autohint']], +'F.sc': ['1ee20b554d6cf063dedc3a8a4b686554d41403f84b5899d91e5eb05734b6b43e6063971313eebf0142b3735c73f6d4612cbe7056f4863f032e33368827a10f71', ['checkOutlines', 'autohint']], +'F.sups': ['05924f0c70085b02a24c3f0fdae870b7794da54a8d4006da9a45af085b7ba60807f38ea03525d216f0b0e27d6076ba0f23919f023a5135ab47cd4219832bb71b', ['checkOutlines', 'autohint']], +'Fita': ['61b25da50f9aab3ae43a616a1891ffef3f0a83a5f92b0f4334480df4d21bc5366eb14f0f50926b0343873fe71dc5e68083f8ef2a225b6bba149b1b8df1cbc5ba', ['checkOutlines', 'autohint']], +'Fita.sc': ['8f87d27a9644ebccf5e884770edd3c7419c5c7e9bb10ce445eed47047ca794a0a237413cbe7da072d71aa9edd2cfce680bdceb84cdc947a63c288a2974b907ce', ['checkOutlines', 'autohint']], +'G': ['5e516979a697bd4064817c6a57cb4c5c35a61c56dd9f5eff45bde348b2e18fe9b576ee5893f5c56f5f155bedb2ced5491e641aeb4638ca48bee22595d0822871', ['checkOutlines', 'autohint']], +'G.sc': ['898ba1094165eab4b7a772206cbc44bbc0d3fab933b1adc9630fd39edd6868acef6adbce493099d18edf444b18c2e17d3a51ca4a8a113d82337970aa6ec8b913', ['checkOutlines', 'autohint']], +'G.sups': ['3d8f9d251150db1921c04ad7a8627315b46229854369f38bd685bb18c874b728d17f5e813a61ab196b3adb70a769412b32ea92b8582608e01201ab9e773160c1', ['checkOutlines', 'autohint']], +'Gamma': ['f6af677cd6a991fbf5f67195d479e9e282ed8122e5b902b3ac277fe487316a326d420864b436299384a59dc49a1d665584eafa984a482742ebec83d287fc5942', ['checkOutlines', 'autohint']], +'Gamma.sc': ['71b491e4fc2082013da242e3b9136591ab1105702368754bfbfca3e579f02b97e478606d5def1dbca97680ae76e93d4031a3729102e05bd5e803ce13a44f04b9', ['checkOutlines', 'autohint']], +'Gbreve': ['1b9f98d33a12fcc0fc6ffdeb7c97fd6f28428f6ef9e8b121f95a510a8dd17f12a7fbd6f877bd3522a0348156b66ce5fec7f48eed12e9e861f7ee1656f26bb7f4', ['checkOutlines', 'autohint']], +'Gbreve.sc': ['2fea5ca9c5b719b3330ec1ae068cac4289ed0f7631029478e4ccc3bd1424f8513a804dc7ef5c823fc56f0ef73b1832c9215f37c7d17796c43a30bbd4986c7b7d', ['checkOutlines', 'autohint']], +'Gcaron': ['d1e593dbae0b4cb47fba25fcf2736c319c1aef4b2cc14787797560402a6e47fa92284a7644983f7ea3eac9d6bf61c00a444d4bbbcd0d05725e6d318a857c0e40', ['checkOutlines', 'autohint']], +'Gcaron.sc': ['8392d43fb5562b9d69a156937fb286ac5333f725a10d1c1b9f078248a68cf18232b9473f5ace4a18f3644e1e44882e05cf30aee4276c927230b8a0e03204b668', ['checkOutlines', 'autohint']], +'Gcircumflex': ['bc699042a37ab02c521cd93bfffe97a18b57f9e935802d7ecd8c24df5e780e9a31b48bc870b6ae56f59647f4bbf5118d7e078d62d261c4f3b9f06c60e08a2972', ['checkOutlines', 'autohint']], +'Gcircumflex.sc': ['c3597d6fad60eba24f61c86e2843d85037fd92c522822a0669b68e401ece61409b42863db38ceb2c2c5fd0a0bc590de5c6a7beeeab09ad11c29060ffbd9dd9a1', ['checkOutlines', 'autohint']], +'Gcommaaccent': ['9d31d8fa5ee562f2381ecffd138bccf9617b63d5d0c30eb18df213feb3fb98be710c33ce6eb630dcc276014894cbf387c4b775972f0d8159b8b7cbfc31c65bee', ['checkOutlines', 'autohint']], +'Gcommaaccent.sc': ['b64304e2639905fa633477cc56b8a70d7424a4ac4f4878f5fc25e98aae75ea705a50d953cb48d338879dfb90667057717f081021e8885ba69b836ffc23513cb5', ['checkOutlines', 'autohint']], +'Gdotaccent': ['0e523ec3238360805282e18db5d0f4b33f77dcef6130f7d719d135c04981b18de9f3816d237092b9fef8e3ea9b10678b6d7aff01a966e603a565b3114df3bfd5', ['checkOutlines', 'autohint']], +'Gdotaccent.sc': ['b10b744296b78b3490baa4e407af2813867af93c228fa7e1b5ba340485a8abe5b14cd6646de9a77d5f594623fc41fe78782d6af1a8e1784678079f4dcd8f9f83', ['checkOutlines', 'autohint']], +'Germandbls': ['cae3e3f0f2bfe73f37694c6d36a3b8c3a7d8f4f4026bcf7f623486c495ca59a81e3a400cea7e47c233975a910c4209b91cc94779ac0b4311f44021aa6a30ff20', ['checkOutlines', 'autohint']], +'Germandbls.sc': ['b820e9e00aa221bd2ff64cd524c9e84517fac2db6a48dc1021f15d2820cab09722591e1c9fd922c52704b771acd1b634bf57cefc22c2cf2356cc7ff06ec9312d', ['checkOutlines', 'autohint']], +'Ghe': ['0fa7f58944d06aaf1fc33e2f797b4d8a36b59549378523d9d24d933f8b7b9928eb8d01c85751f6d34efc6c01d48bd9742df90760b5b10bd33eefbf5a0418df65', ['checkOutlines', 'autohint']], +'Ghe.sc': ['9fb1d68b009abd5eaea590575cda8357cbff8e1b7f40958a9a645206f705f48dbe16a3a7e59999937a930ec32e6c54a0e8e0307646756603d51ff092275ac7d2', ['checkOutlines', 'autohint']], +'Ghestroke': ['0e7574e3c68cd3461ed9ee77eeffd8f15d89a13f4930768eb30be5c07a952fe2617a2d75c0ff2779edf26f4bc51238db000e031c988c5d78bde75c6aa70c2197', ['checkOutlines', 'autohint']], +'Ghestroke.sc': ['014ce6678b3fcd7b7a06963e1ce31c771b800988abdccb382f4fe4619ccde530d0b8e8545026d0443e4a65bd0332500a88e3e1b5694ef346bff5a99d0adfcad9', ['checkOutlines', 'autohint']], +'Gheup': ['6fd5e2d412c8b639a8ea7d18a059bbc1c65e595a219d415c854dd99b70bde7727f72ffd277fdd03cca98c50c5947dc02ab1d0365e7cd1d3216e47440405733a1', ['checkOutlines', 'autohint']], +'Gheup.sc': ['68d902b0615d14eed482c648c0924fc0e1568619f9f44a6436f006e41c64afca1cf9ac0b69d3499fe5a4139797553b4e6048c3aab8cc2906a2ef2048158ec5c5', ['checkOutlines', 'autohint']], +'Gje': ['fca3503cd4d20d1189993763d0198c8d8de7d6c2a54c2c137669dfb31a96de2e4e8394f9d1d13ebc97d27161e4d91c2796107205c59b9173577558fac33cd2bb', ['checkOutlines', 'autohint']], +'Gje.sc': ['2e32b14b470b19fd040458bb581cc5797c7d5adbcce52fb6622ee09be064a2a613478c911bef6553f82093acd45382538be1b0a86efea827e68d5c6357206182', ['checkOutlines', 'autohint']], +'Gmacron': ['bab7cfef09c2511798c120a74b1cf222b346e7672400106dc11f4468cffb3ea61ecf20fd6965e6c9776e6604e812625c499a937638e75ac53d0b55d33131cb73', ['checkOutlines', 'autohint']], +'Gmacron.sc': ['a5aa73a057748d79963948f55bb7ae48b340bee7e54a11175f7cb88088f64acb9bf7c7445e991b63bd80cfef1f80a2cb67b26dd45dde65611c902e294e224fd3', ['checkOutlines', 'autohint']], +'Gtilde': ['646c6e92df1cb960af18e996f316cfcd02b8a7cf37f2a0009e409b4367e2f6893262e44760a162f0eb22b48a851afdce545c8f1a3122d35df75cc147cf1cfdd1', ['checkOutlines', 'autohint']], +'Gtilde.sc': ['8ffeb4d723d9b750b126e53c83cc9b33db75516c7f5207dce1bfa2999b91617ee7140c5a42f987b6eb2f6d6e6bf6238dd5797815713def4818c0d6be2153d010', ['checkOutlines', 'autohint']], +'H': ['18db724fde888a9e2561d5c638c868ec4bbb67f2cbf2fd63a3b02e8455b905103bde4859d32d22542f24c0bae59c7a0a3f5af382b80dba89d5c389bde58af20c', ['checkOutlines', 'autohint']], +'H.sc': ['df79b27a707f5685688a8f5ff086900d70bec013842aefdf394988a0e34a1bc42fbf6dcce2576e474177c09880cc0dde2eebfc3f88f5183588112051af1e998d', ['checkOutlines', 'autohint']], +'H.sups': ['c47e1186f96d8d1c876b93f65e36479e2b32d63b5d8514e564c83a0fb93818cab1264f2a8d4b8176cc2cdaa0f07b5fddb60ca7d061121c703b6456ae10c928af', ['checkOutlines', 'autohint']], +'Ha': ['136a33b3860b753766f26d70653042121f44f077c24007e919ef4bcd87fa0fd143aeecfe844e2c34b5933d5376f3f5257cab70a51d2de073ae8a36799ef32138', ['checkOutlines', 'autohint']], +'Ha.sc': ['5fdfc8e407ab406f216f7f860f2f2caa2f613259321f22fb45590ca5078de33127a7f28305b42cf894408287deb6d8847f6491981543962e93f5a5f0d74b8eaa', ['checkOutlines', 'autohint']], +'Hadescender': ['6edc7e9b633581dae38d52f1d449d8f1271e6e9462a4a84a687d3a30013fcf8360bc536e58caa1edc6a4a66a2210e61d5e5d5418ee1d58a41e5114853251fe53', ['checkOutlines', 'autohint']], +'Hadescender.sc': ['df976ef19f8abd87bc8045bc775522003f52e2daf1ac21cc66152b74064b9c97f74cf94e14bdc3411793df6f8e3d9e4666eca9d2db1c4c547dff04eb5e2f1cd0', ['checkOutlines', 'autohint']], +'Hard': ['f3accc96af71af9e19cedcfbb8e94ee7646df2de7f97ff408cba392a4cbeb6b591c97c48645189f02b79f94c10be7a26bcdb4d650fffe66f2e6582df8ec19f6e', ['checkOutlines', 'autohint']], +'Hard.sc': ['d6384910a9b106b063f4b019e9edf703af6e1b1fea4708c8b47c296fc147b0f028213023125d97bc91dc6e0789b18ef338a2e5ebf7aee7086e5f515c1d824a73', ['checkOutlines', 'autohint']], +'Hbar': ['bdc3d20583b4089ddf034e8b6149638efe0e56813d2fb5f03f1edd4dc4fed73f57ed8fecbdb56b2a13ed7eef5f624ef8cbfafeac76ebbac20fb48eaf6fdbcc83', ['checkOutlines', 'autohint']], +'Hbar.sc': ['84e6454cfd895a0d0a34b1ed829d17f942f6700491b5728ca3ccf33ad448a7ad2e4c31ca169862faf86599677e0372cc86f00362a241e6246107cee3b01bab45', ['checkOutlines', 'autohint']], +'Hbrevebelow': ['14eaa9039aff20fd18abc9c2370afdc74ca1b473cc45c439bf61274aad84db4e4c73744ac5ac910da756cc57d35ec69aa1688d6b4631d232514d3a3c6e95ba90', ['checkOutlines', 'autohint']], +'Hbrevebelow.sc': ['caf99817fefe853064f43daa8bb422a5921553187fe1b40f10c3385bcac3e857d2553c6456e4711456c9ee2ea5c75e01e426f3c781b894964c952ca67757ce69', ['checkOutlines', 'autohint']], +'Hcircumflex': ['8b751fb69446698744817a371869f97a7b69101ad5a56955caad0dd38a53841afb4d2dba6fdfb671b0ee3b8a05b49288b337673739281abd7c530e4da4f933de', ['checkOutlines', 'autohint']], +'Hcircumflex.sc': ['d8ce02e14035a73ed126707af76ac99dc34d87b9ba0536699669d125209875cec19cb780cb5bdd89201685f01bfcc1b465331967df05d4ad07c2d3ba77d97505', ['checkOutlines', 'autohint']], +'Hdotbelow': ['9d956a94ba1d893ae7b4e0b81bdc7941126ec2ba7203fb0ea24cf8e1250d0453860666b81429ad8049a0614d2c367aacbe51a8bb183fea87336a737fb57f96a1', ['checkOutlines', 'autohint']], +'Hdotbelow.sc': ['ce4248726f884ffbcdd6964e91944dff5fe4974603b51a186e45fdf35594ec9f2b19f74e67ce536f4fbb71a89ddb3c61d05db219dbb9ad969b9a6f63e490b284', ['checkOutlines', 'autohint']], +'I': ['7b71220b1d7933ed52d2765a8cd40cde60f588a56cfff3b702051d7846b0f65bd564398d98cb9efcb0357f6fb5e491a8a0a34f3aceafda47687af688ee8ad32a', ['checkOutlines', 'autohint']], +'I.sc': ['948bac6bd93eebf77a6d5f609ee50c4dc757747360df19a740811250e7343ac28ab004aa2081008e4e684a4681e903ddc6013fc63ce3d069dde7e7fa27527d73', ['checkOutlines', 'autohint']], +'I.sups': ['w251l32427l219427l219459l132469l117469l32459l32813l117803l132803l219813l219845l32845l89427l162427l162845l89845', ['checkOutlines', 'autohint']], +'IJ': ['0e653b4d65f8238f0152d7737e5389a726371e8f3f201721198bdb2c3d95e397ddc5399dfee5c15f694fca3aca3e4fc40119d3f956c2e2b2914448912bf7f214', ['checkOutlines', 'autohint']], +'Iacute': ['8e7b92e320484e9a66379cc6f2465fe5683912daeb08c0f51f2cc43aa830ae6f9a9da2b688206042b31911df8e0d3ef337fc474e750882e17ec6539b9666591e', ['checkOutlines', 'autohint']], +'Iacute.sc': ['22e0cc677aa7636db0b6f6a178b6f0e6145e1c045bd94731a10da8d40f903dd7b66aa60cbf9e92c0c2a72883d840bd6fffb86435215c28e6b29231f7d0b43100', ['checkOutlines', 'autohint']], +'Icaron': ['17b5dab2b0a0f939aa3123d2d584da4a808093ce8cf54e46ac08c069e942b4885bb085796e86914d4bd89f4374a2cb2133f94aa03ac24cfa5ac1e5b9ac99df46', ['checkOutlines', 'autohint']], +'Icaron.sc': ['0e36450d07abce3504cb5c5975744dd250d1248e76f8a37a317014c59826780958fb3f20adbad089c3ef31225cab67c487046308b02b9f124eb8f28c5ea252ed', ['checkOutlines', 'autohint']], +'Icircumflex': ['97b3782a4f93eb38d77689614beb937d13b51890e81e42e6bbbd6d73cb3cdfe4fec2f05bf2dc075fcad1e5ca6f6b5409f691972d742cc958113591b3d66250d9', ['checkOutlines', 'autohint']], +'Icircumflex.sc': ['7e918367c5c1aa2233f62fb6564cf55bf3379947177fd33b32c3d9253867db890d8877ba80804a9c3616f23a15ae3c54ea52cb231742e247636173afe865c4bd', ['checkOutlines', 'autohint']], +'Icyr': ['453c7fb8e2a3289a43ced088abbe81362f4b46baf1e6d60e99f98b826511a9e4256e8ec4e2e4c59b94b02dea2549d89a7dcbec9db4acfc579cc4830e1112dfa3', ['checkOutlines', 'autohint']], +'Icyr.bgr': ['3201c111b5cee3aa6d1f7e0766c3d9314ccb0a62df19f032223daf55414db7068744851de0bbad12221f0c23b59067467b53f0676ad7defc56e4881e64106897', ['checkOutlines', 'autohint']], +'Icyr.sc': ['8e59d9279e20938e6e9fdf8d4cdbf807cd90f65c23aa264a12fb71f9918d9fa0f5940433c82ea0a2974c0fc3ca1812ef84971c54346f8e7a7d70788eed2fa34a', ['checkOutlines', 'autohint']], +'Icyr.scbgr': ['bb9343c5cd74b9798a6909e931472fc5ad12c682662f0a00e46f9834dcecc41b387d096e099dace123ad30ef511234c9cbd35896ec2b8be27acc982522040bcd', ['checkOutlines', 'autohint']], +'Idieresis': ['8bde03995c76c1779dc42bffbf480dbc8e2ac3f9b069bd1ab127f51dc16a133457172cd4834518391c28297c3db066a99c82ae29d7b5557077bce4c75bef009a', ['checkOutlines', 'autohint']], +'Idieresis.sc': ['770394e5d244998575d4fd8c714b0655b30da9e848ba0f71bf2fd060b48ac0aca333149c1f9b3556c6169736fb008589857778f2bda78212f084334326064c34', ['checkOutlines', 'autohint']], +'Idotaccent': ['3fab7c743a143cbc8ce3d932a12921eca4e962f1f6156ac740b6c0376b778dc2676027dfc590e4315587a86fa2727ce276878da773bc87f12253bbf93ec00055', ['checkOutlines', 'autohint']], +'Idotaccent.sc': ['ef93c012ec1c5dc68cd8bedd62e7cb6aa6dea0a8db341ee0592f6a5bb87de59ccac41b0a64fb9c79556704e730c1f9683359a4f92820511075f79a0488af44c2', ['checkOutlines', 'autohint']], +'Idotbelow': ['addbe5597e6e7c2ce8370b71af19cfcb1afabfafff72a583ae3559b968e4fa96e59d2ed74674bd5f9af59b88979a8723b450ab27dee5929f3f8911d098f63499', ['checkOutlines', 'autohint']], +'Idotbelow.sc': ['c7a40892331df4a29f799d5591574049b4a0ac3e1d5bf6805e14e119b3cf875b777e97d6a5d97ae96f6225c9896e5329c6dd9fd70180e9dd584d18f7520badc4', ['checkOutlines', 'autohint']], +'Ie': ['c9b109e0d8be8c85bf9ff4b3f13cde629f8543786fd74deefc590caaa5ee4ed4980d4927b76988866521a86219bb8d96ac894a47cdcfe1ef778b1cea83d42119', ['checkOutlines', 'autohint']], +'Ie.sc': ['5ff38e593f6a475803e156f19f46c5ce7966d095ebed392a864143ae35edb966276797d1a3aa367c0580a1554bbdb97ed5c950ab299e45d18cafe0af8354ea51', ['checkOutlines', 'autohint']], +'Iebreve': ['5b840c451f38a1c7dc0283aef342d92f3f535ee311bb0923dc97e8fa57f9c6fbba4dcb488f88f20831c6d67c90e43b6acea00139e335cf618b802ac7eb10c331', ['checkOutlines', 'autohint']], +'Iebreve.sc': ['adc6ffdcb264a7a641d2d2625673eda1ed0a52e04c1967a83dcd903c636e80953daaba0d104e75c9e3770846f5a046799361cff67ee7b27c5f270b19bae48326', ['checkOutlines', 'autohint']], +'Iegrave': ['de4ab4a4d6518b80cedd7e24493bc7db74ad558655dbf172cb9ca555b9d74c17edf196df3a27d6e9be9b0790fb3c08df8bea480054ffadf6a937055d7ef068db', ['checkOutlines', 'autohint']], +'Iegrave.sc': ['fc822f303157f9d0aea7215ce92ec1a3f413f5d5cca966b79f7f5b0a99ae1d43464ad35d850fcfe4b5df0cdb04c13efbbfa605c30d998ecbb25ebb486af946f1', ['checkOutlines', 'autohint']], +'Ieukran': ['3da8ac373ef5216443d405626d33f20b2b00796706159e5bc4f7c933c87a82e75106079e5028c74315a1c1583826c9be0a31091a0f01bbbfc79b58c2404111b4', ['checkOutlines', 'autohint']], +'Ieukran.sc': ['f6760db9b0557426c39a650d91e7ae224b02ff3db2ce66df42ea84883b6d6b83433379d0f965abeb9766299b9822c8545ad3c950a5d8ed952c6e95f67abeade0', ['checkOutlines', 'autohint']], +'Igrave': ['223988c610a5824eb0e1064941fc3b64cde43e8875e4181ff44ece69db376cf4ba746a90bc86e766fd9268ee5ce83e53f7f86086514b1487e855a59cc3f5d022', ['checkOutlines', 'autohint']], +'Igrave.sc': ['0b5ee4648bff653fb6557db07397a4ada291eaa32fd1a1942064328f00df1366e7a7c5887b2feb89e68a8a0b149cab741e39c1dde885c2628c44a5525c1ff50e', ['checkOutlines', 'autohint']], +'Igravecyr': ['217c9c7d3120ea27abc0b5d96c168f7bf63c0f789ff165b1ae653e80a6b3910cc640de819f3e37d597c5a1ce0bcd6d58f39f6c92d35e8324787e42dd2bf36d21', ['checkOutlines', 'autohint']], +'Igravecyr.bgr': ['06184d8dbd14f257e71f1ab386f5abdd77e7bef9f5efd0872a763f89cb001ff7862aa5e631d067138ea82323dd74738ad02f445d84c677704646a0c72f7fcadc', ['checkOutlines', 'autohint']], +'Igravecyr.sc': ['d3a2a1fa4d5d4ae22a294c0846141c17e5bce312690ed4a4cf87f233a6cd3e6f19feeee2d959737473fb7a1da1252ad6dff6f389c8dac02e2a1b576bd9852f9f', ['checkOutlines', 'autohint']], +'Igravecyr.scbgr': ['363f2f15a99cc7a11610ca0b123f0ebe07feb27724a984443d16f8150e39e12961c1feeea10737d6f07d69cd305c3a975e1cbfb69afe4f0bf5065cec66ac0d1d', ['checkOutlines', 'autohint']], +'Ihoi': ['1bbaf7de84f790520244e4aecab6022b40273a6cbb3cf8e0968f31b2bbfcecdcfe82e31474377a0215cabe53f17dd03998ba6ef74035028f8da1d47040f00ae5', ['checkOutlines', 'autohint']], +'Ihoi.sc': ['8852911ea6cf3094f1afc3fe56277ea72f3344ce08ccd0072daa6b0d24d2ba67884bcf9e645754a6d4a1faf74f241ed4f09959dda11a2e4de0afc7cd89d64c8e', ['checkOutlines', 'autohint']], +'Imacron': ['1f9253a6429c2db50a4cb73a1d5320f8c16ff603c7722aee0a0bab0c20e38748747b4cf2f8f5431504dd51ec648e3093115b23da62f5e9b61270edb3d2e2af9f', ['checkOutlines', 'autohint']], +'Imacron.sc': ['a97aed0f79a8596d764a50375bc4f011d33bae9b6f567cb47af313aee41e5c8db29d53fe7170880fce4ef727f65b0181b98a3c252729db4d1ab9f8b2729344c4', ['checkOutlines', 'autohint']], +'Imacroncyr': ['20a5aae5e3ee462ff876a6f3a6947bbacdaa272b1530a6f247f8ac4e038ecd117f400820e5d5f69f4739331fc69cd30b255d8fe9c53c0c4d879be6e8fa6cd0a5', ['checkOutlines', 'autohint']], +'Imacroncyr.sc': ['ced608782e70b9349612d51900fb04297c152e37e4d54f7190f9ae88a911505789d42d9bf24c14d0829d5d194f9bc851bcaa967d1617ebf2f37702208c4e9234', ['checkOutlines', 'autohint']], +'Io': ['2eeba5a05067d7ef7d7a8b8d6e1191d77929a0fdac189db8208a8d3c81680df8ebb1c0c20cc83b239d00fa808e2a76bad8b7645f749fd02bc62b40ca58723ac5', ['checkOutlines', 'autohint']], +'Io.sc': ['bee808b0d3e126c2779534830c948d5fda44346c9c4522f75296324f4c1633746d84623019a33d3f71fe778f5bc4af23082b0edbe5d8beaca3684a33624e07a4', ['checkOutlines', 'autohint']], +'Iogonek': ['0a2cbfdd9238f88f116e750e813ad7d241a9f28e679946269734083243d3047cae8a99c270376eb63529a9a9f0dcd2bc4026c99ba147af18e1710e4a2bd23f90', ['checkOutlines', 'autohint']], +'Iogonek.sc': ['f7b2b7e220d1ef7f8110a23e0c66fb7b806531600d4f930f4340e53ab1bf5b21c80aa0c0c151774c57821fc01a3c1f00f18e3d256ee427f0c2925da373302879', ['checkOutlines', 'autohint']], +'Iota': ['4dead273f74c0f7105577be76242edb2505d7aa64d9525e3600029f3c861fff783d1bb30921a322351fa55105f03cc403016be91afa9151c59826840ac6beceb', ['checkOutlines', 'autohint']], +'Iota.sc': ['bf58d3487745e698e0e5713b39cc5927e5a97bc9a469252e4c5eedc0e6e828ca8f155463225faf4290bdeb4a54ecc994a7bd02e02f2192d719544c4e4403df7e', ['checkOutlines', 'autohint']], +'Iotadieresis': ['f5805c2ee31e6455a2162557cacabfd2734a61b8ccb459c8ec84f8150fe890be72fc0ed5a39314da3b1817be1358af8cb50d9a52cd94d15c4cadbee0f894fc4a', ['checkOutlines', 'autohint']], +'Iotadieresis.sc': ['df5892af28170a4d34366cd2e18b9e952c31e829aef8e103e443396c7b19f3b0a1a0f086889196e1f9f93e92e67642b996df92c39d25b850053390d49b416350', ['checkOutlines', 'autohint']], +'Iotatonos': ['a1e2dee6a06bc6c5df65abdcbd38b507689e4401454898847ff329fd3c875e33192a6eaf87a8e6cc0a581c4f2b148ad0fd6018613be04fc0f80ae0fc434aa09e', ['checkOutlines', 'autohint']], +'Ishort': ['573fe4c640d6d94fadc071d72ac4d55980d583dfb33e84e673d29cb26fe696ec64963bc15caaa984a6c3106f99a7a6b1660307137c3cf54c758dbae1c6462a91', ['checkOutlines', 'autohint']], +'Ishort.bgr': ['ceeeecd1f5cebf049a64588ef0b0d3712be430d1d0f276330b10f67d63815c492af2a1514eed340c61295b1f9394e669b8d5d84b5337186db18b14f909678307', ['checkOutlines', 'autohint']], +'Ishort.sc': ['74574b3e75850054a01ad331fc4074a4884ff1668d75fbf8cf51b628aa1e5f379d9c9c852a05fa22fc50ed47f6c3c8ee976489c65f9af5cee83734e412df75c1', ['checkOutlines', 'autohint']], +'Ishort.scbgr': ['0396f1f24e0fc6ee48944311a277f2c704c061e431059b8bad78b5f2d2cf3c612a3f01ef86b7fd29c13daf2a8fd5808915259120975f60ba2dd3a254e475cdbd', ['checkOutlines', 'autohint']], +'Itilde': ['fbf3df2c572498f7fa1589cdcd9ae1de74fccac091057c68bf98b945cfb050187409056328e2565c9df787605fc4d8f556aca756cdb1c9c3af750a09d3a50c12', ['checkOutlines', 'autohint']], +'Itilde.sc': ['d6679eea0233faa4b6d73a0af00c8bfb34a49060fc712e1c0dc46d9164560fabd7717aea5e26ecaf12da3f815fc306ff3ca0a08ccc97372e54823429f0373578', ['checkOutlines', 'autohint']], +'Iukran': ['4dead273f74c0f7105577be76242edb2505d7aa64d9525e3600029f3c861fff783d1bb30921a322351fa55105f03cc403016be91afa9151c59826840ac6beceb', ['checkOutlines', 'autohint']], +'Iukran.sc': ['bf58d3487745e698e0e5713b39cc5927e5a97bc9a469252e4c5eedc0e6e828ca8f155463225faf4290bdeb4a54ecc994a7bd02e02f2192d719544c4e4403df7e', ['checkOutlines', 'autohint']], +'Izhitsa': ['e8e8ba3736b9634843ca163099d3e2820e1810ad48135bddefeccff07e4f63912f16e8671c443d172a4b5830ea447913413d81b3d2d6bd79ecce67b4654172b0', ['checkOutlines', 'autohint']], +'Izhitsa.sc': ['bebb44cc7ae22eedeb3a2195d1c16de6c6348826b428d9b70017691afc2ce95a57c106ee2809c932c0fc8d7e132d2112413b5a0cd623ce00f646a9f7b75cd8dd', ['checkOutlines', 'autohint']], +'J': ['21fd147d91c61a12a41609aaf273b6924f2c274612fff6a6a4bcb31ea1fc3cc48c9b59dc18aa2227f7cc53ebdc23febd3d46dfdbc8d28b620ace1707d773805b', ['checkOutlines', 'autohint']], +'J.sc': ['b229e527df821f1434bb13a4138b62f67976ce3a8ec797c8a3e49cbd55aa2774de3b81229662a5360649a84d4965463b2e3de1ab1f80b27a4507103173446272', ['checkOutlines', 'autohint']], +'J.sups': ['cc939ab7940a598852681dc62955bbe5a51352493c6c07e007ed512c5f47e327293d26bd50e75e4ca4f0bb5080e20dc095f30223c44cc2319317b0e08b4c7af0', ['checkOutlines', 'autohint']], +'Jcircumflex': ['c9cf20a97d6b484f2f9e62b0588024ea1e6bb02281b218f33eb12c7ece9cfad3db94b22b992c8a352fcd1b5bcf1dea729a740d8bf55dfb53cd36fdeb2f87f8ec', ['checkOutlines', 'autohint']], +'Jcircumflex.sc': ['2d571495a16e2823b443125b08f8de7126a21a70a22dc21371257cfd8c30f79d4e1b5216064238d41592050016d6d4029a68c0d46351d0486b01bc8f7de25c10', ['checkOutlines', 'autohint']], +'Je': ['0c21573fe52eb56b27b666d9ac8b33fd0b039f53ba010be186cb1e482b19396ca59cef8025f49902862a9e2b50a1dc3d2e01d63c35638a4ebe1e0b3ba4ca079d', ['checkOutlines', 'autohint']], +'Je.sc': ['408d04a1b91df1e67f08a39b5b04582d5b4af5b32250657f725d5795dfe5ce011ca0c6bf73bcb95969a449e4cbc1e9c9a7be9da049f57ac380f41cef73ea0a6c', ['checkOutlines', 'autohint']], +'K': ['02a830941a718620efbea336e6b8653291b2f86cbea9065192a602befbcb339a6a465b4b0139ea49d304dd444b98cc4c1e369c85a50674b9202d94e86086cec5', ['checkOutlines', 'autohint']], +'K.sc': ['ef62d8162945d8c9b1bb0943146e0eed6780ccc92424fb2c317d8b85df4f7f2e372b7af8c1ef4fb5f11f039b735800cd71f5e23c1bfebf40fd3fcadfb9961709', ['checkOutlines', 'autohint']], +'K.sups': ['b57e5cfce17d116116e98dc6ed4b948d68505fca2b3cbc16039e59ae83c07b5968771e5937c7cd994e6ff0c403425a1b86e73b12f5eb3810ae6c0aed59d037f7', ['checkOutlines', 'autohint']], +'Ka': ['9c9d2738c874eda17e83e99e4a7836f07536133e79422def9e190e8b0f974147dbcbac7276db320b54ea5fc4f3cd166157b67d9e1f8ff801bd1db146437090ee', ['checkOutlines', 'autohint']], +'Ka.sc': ['74b38cd056f4c0ea4161a93420ce2878c5a4b9a9dffa51a08cc3bbaa7746f83c5a61b2f7cbfc7bb762cc37555112a0964d093c6506b230484a605688f167f2f6', ['checkOutlines', 'autohint']], +'Kabashkir': ['e4d7144bc598ebd4d8d5c4fe12da54ca93099fe65dff57cab9dc5f608ead0b6530f1e7fbc31b4ba76ca5260c8524dcf47b68f3f1af8030f35e106ff68c3739b6', ['checkOutlines', 'autohint']], +'Kabashkir.sc': ['4eb91681eebf8224fcea801876403afa16a3af333357f21388a60e9a23f5181fc4824f368a6627047c005716cdf9c1f961100b3c6cf9ab27b92aa4c4426dd477', ['checkOutlines', 'autohint']], +'Kadescender': ['92cc58a47903c878e90ec20b4d31c08c21a0014bfc75185a5dd8db6714a75c603a99a7513e10cc4b0e333cd3f5a9c9b59d23d0a77c70b37a307ea4dbcf5163d5', ['checkOutlines', 'autohint']], +'Kadescender.sc': ['5edb20cb86c1a3d101155d27824c85f7adeb13b4b302958775c75ee73eed3d025ab4bf5fa286956507e010ad711bdd10d63b2de3ffa130493fc0fb7d6d79dbf8', ['checkOutlines', 'autohint']], +'Kappa': ['05a84ce2b624228bc17cdf2e9c97bd7b02d41e5c3f605c63a486c5939499572f02fd1c4e4306ff585c9980a91d139439d7f877154da5b8964b52c004037dc22a', ['checkOutlines', 'autohint']], +'Kappa.sc': ['ad1e16a5caf8c93f10d96155e76207cba7d34caaabfc79232296c65e88e49c9c5739048a9f811f17e1293d629d274d7c7b2c3405ec9cbc1043775523bc069651', ['checkOutlines', 'autohint']], +'Kcommaaccent': ['25fb1eaddb2aed188a7019a4ec57b1c362a45aa7db6ac36398dc20fe600a347279dd947d9d81b642c3b269f9fc980dcca8df2c1cca74bafa34ad0fe141113edf', ['checkOutlines', 'autohint']], +'Kcommaaccent.sc': ['cc58e029cb7dcc08105bf2ce1f5d22959e7b52f0856eb15a7d993d5987e35904ee0c9b29885cb912f7775986a1598fe6af7c7c40f70447a1363459b6b90f1e97', ['checkOutlines', 'autohint']], +'Kje': ['5bc6fd2b352b886f6f90612667fc5c1148620d3135cd7d9b29cc6fda81c3bab7337fd330e505bf133182513af47629e606cf0db9282b0a4553942e2fb003ce0f', ['checkOutlines', 'autohint']], +'Kje.sc': ['5e5b76ec26be3c51071d2669d70cee6c27b0fc6f5af1b45999d2405ea6cba6f3584649828a2258d7fe1acfb285191eb917ebd4ec02e5eb138b8ea0e1e95c3650', ['checkOutlines', 'autohint']], +'L': ['c90137e494ddee29fd9b358442f8df237f9d82968991fcab751fd28aefb21517ac94001d0544535849a4ac50c9a6094c7619afd6d143604905c3eb3baa4e2d5b', ['checkOutlines', 'autohint']], +'L.sc': ['ee27e27649bed36ac53095aadab9f787efff8c87af4af21756abf45714c439235258e2ea2c623fc78123ba951922b6bd2bfd158b6acc9aa17a071ba224fddb78', ['checkOutlines', 'autohint']], +'L.sups': ['85fcbc33d5df3ec0d3923f1891b1359a14693b47ed970f8c3211e566493757a4ac7229d7e798c6c8d394d8b94354723c34fa9660c28451149d9dc3fa91c60527', ['checkOutlines', 'autohint']], +'Lacute': ['ea703480c92375678013fca9fcf7836a815c3270e6640c44b2bc816957e461e3c168866b68e80991157c09fc8617d97f6e9d21d461589d9a694924986a71a20e', ['checkOutlines', 'autohint']], +'Lacute.sc': ['652dfea30331a7cb0f987aed666dee3536109200abcd3b6658cfcfd318c28084b74d0509638e16be41a24a02c336031d1d154c2ebda106e33a079219b5b69882', ['checkOutlines', 'autohint']], +'Lambda': ['w664l50l2340l23441l12556l10556l541l710l1180l314576l319591l299591l4970l5950l365675l302675l3810l6530l65341l52956l50756l38141', ['checkOutlines', 'autohint']], +'Lambda.sc': ['w588l80l2090l20939l11454l9654l840l620l1080l280457l285472l262472l4340l5290l328553l267553l3320l5760l57640l46454l44454l33239', ['checkOutlines', 'autohint']], +'Lcaron': ['2e68a99d160127c6d097cb6e8e98179a594aad1f2aca6d97bd9018a75bea5f7020cffc9bb2a7b5fcb7cf892f18becfd699cd9acc444a398ca2a1b355d403ccd9', ['checkOutlines', 'autohint']], +'Lcaron.sc': ['1ab77856ff674f9740243d363da7ac13126fb2cc09dd04eab3f9f52355604a318f78a8570e8d8a02113ee5c356486255f977338aa97631d68d3d3c6bafaf2c8d', ['checkOutlines', 'autohint']], +'Lcommaaccent': ['99fa2003766589136ff47dde410b74a9bce983c7405e7dd80c9ac423a39b8670bcf844278e64a75463f6b4661dab5ec8b6480d032a69699adc8f64201dd88dfb', ['checkOutlines', 'autohint']], +'Lcommaaccent.sc': ['eaef30eda02f9c8cecc9f1d1566c816d4e96bd44629c4734c3da29ecce7ee0e3445fd2c48a52aa932ef6c6cf24e8c46935a148d90b31a1967dec197831985533', ['checkOutlines', 'autohint']], +'Ldot': ['b3ff4596465834dc1ed1947bc8a888ca5f9c86d2f9bd67a64b9d4091bdfdec6a70c3dfc8f34a2bcee4dff5f46e5f28ae36c0e226500c19b94612032337c93253', ['checkOutlines', 'autohint']], +'Ldot.sc': ['b0c51cb088b056a4f892467ba981346209af47d655ff6edc2051e40443875418eccdb415465027eb2c7760ec71c9abec34aa3028324120fd8cbc600b01f8733a', ['checkOutlines', 'autohint']], +'Ldotbelow': ['024c87cfa718e5582f0c3c1ff482c258314e4693f6111f7319cabecd6371115f658574cf20951d7345bbb69e16bbef13b2fc1f9c415dfd763b994619532b085f', ['checkOutlines', 'autohint']], +'Ldotbelow.sc': ['75dc5134bc4bd486bdbeae5212c1f488463bad6c95ddd3de9553ba3e7e10e93a807e3eb7566a995ff79e30cd3f9f03c864ed38aa44de7221aff1eb70d078bac5', ['checkOutlines', 'autohint']], +'Ldotbelowmacron': ['9ca44b07b1da2c281c875189133e4690936941d06fce85555885eb296bffcfd89cbdcfbfa96186d2d8fde680d324f963995ab4f157a1287fdd402d278a153adf', ['checkOutlines', 'autohint']], +'Ldotbelowmacron.sc': ['3e37115dc2825de6fa59b433751b71a8c21ed095e00b651b91a190786097d7436d67bbaba38f646f81624063614344116121e40be38d478d146967d5d8bebfb5', ['checkOutlines', 'autohint']], +'Lje': ['88f407d2a7d450ded2389b15c509ddbc7d255c40f24479368c95710c75fbf742d1010afbf85e9b6f957541c61a8ae2ce8b3933937ab1145750fb995143221266', ['checkOutlines', 'autohint']], +'Lje.sc': ['63417d30b5b81b193cb49133d769d4fc33a7ee98ec15775c9fa493a412f9ab12aa2777255f5a84c9de6cabd63320a800fe3eae03db605397ba85e7d8df078955', ['checkOutlines', 'autohint']], +'Llinebelow': ['4ebb39e3d34c9e44b726791e1170082be1ff5916442793695384a5af2aa69a12322ce87c8e14f15a438884cf1621d102f791d837e396c3c36490151b468470f5', ['checkOutlines', 'autohint']], +'Llinebelow.sc': ['97f3d7280f4c80c906ed9f4b5485f77741df1ec4f364508fec016aae37d7a1c1cfe1c04affc666e85fe7ab45fb821e657d224cf6622b826f9b70f0171bdef032', ['checkOutlines', 'autohint']], +'Lslash': ['5240e1bd46ee0bbe0b5e5d8e5f950696a114dcc377d251abe360e50dcf982e8998434a061efebe65f4e26ff120921c58d39637355c786bf265c014430e063146', ['checkOutlines', 'autohint']], +'Lslash.sc': ['7406d60fa63be891add54ef70d4df66d36608a81942a84c732a11e9bdb5acfbb57c24327cf4011b8a60a6f0b777397d70f2caac0c1d1290b53802253c8b3fa10', ['checkOutlines', 'autohint']], +'M': ['10161884d3cdbe4d0008c5206d98fe5804ae8c3e28403a9b6bef4ff72f802aaedb4cd213770134e599bd3cd262a5e24fc76429faeb6bfdfc391bcbee97d3ca59', ['checkOutlines', 'autohint']], +'M.sc': ['42d8f058295129fb6ad5f7deb47d544d1093c01239b2d0ca9043444e9f85e467483f6fd928ac7391a238f14ea4dcc7771d8835c1e1f2b6ddc0075585b5bbdc79', ['checkOutlines', 'autohint']], +'M.sups': ['a32fba0cc555e974a5b54dafa3b9fb2dd21d88f7e05ee9d5085f2ac6e6c468e584db1243ff5ead56d4fa157147dc9806103e7bb1258bfadc4321aecacead61f6', ['checkOutlines', 'autohint']], +'Macute': ['e510faa0e7aa48f5acf4a323ec9e7070971ead2bc92c8762e2d1cd38bc1e00a62d9edd2cf60183764c7a4d6765345fb5aa9d0a6ee09a2c1787e380cda65d6eac', ['checkOutlines', 'autohint']], +'Macute.sc': ['07664b1cb479e0d7049e095c4fb6a030275c797282fea6bc873f2547cdf9fcabfb1b035314733b7881af6da52cd08959cb5890b98a654c015835979ed95667fd', ['checkOutlines', 'autohint']], +'Mdotbelow': ['1becac1f4c9a04dab51426c65310c8ce16968b2e9fb3d1865f3e9a587cd04363e989e17b9424296c048f1be3dee3b31a0f0a1b77f13f657e61cbf560f4fa12bc', ['checkOutlines', 'autohint']], +'Mdotbelow.sc': ['1042e6a85e233232a17ad27cf4b01b6b3e3cfab869c2c81c7a2bbdcb495d90ab0c927f4f9be46e5544cf5fe88ff9934dacc8537e2ea99751a7381057f866297d', ['checkOutlines', 'autohint']], +'Mu': ['802a2a37aa74479c50325562c315260b7445e6302abb9a2582ce4acbe2570c45acc17f2e1cd6fa46fbdac7280528e601886abd0732cc9b0951773960fbd8b318', ['checkOutlines', 'autohint']], +'Mu.sc': ['784ae658ca7a4b25b13d6764f58d7ce0d531f0b0ab8a32d74f0db4335566c3835c56e41ed5d31bca5668f3b40b6cde13ed075be6dcf5457de501b0603ad45e12', ['checkOutlines', 'autohint']], +'N': ['a262d8d046edd74531b44e2757e7042f9f6dfd45e7045a1465f1c7601b6bc9edadf68582152811673bc52a41ea8961d62c747120766e7eb591a7899364ab2699', ['checkOutlines', 'autohint']], +'N.sc': ['87d5a4238a63cd7bc869505baad6bf1f77063624fc30d809ea1b0e12b76df118498b1336f6c8c697bf7dbcd07ef7f3be361b7d23dd8b5a264ebb3b0dcea8d6f7', ['checkOutlines', 'autohint']], +'N.sups': ['fe35de97caf74d02b8c2ff11fd8f5eb22c8deca18087bec403ce627e394e913bb910f15d72b1fefbf44bc4a7b36512b55d2994f4e2cfe5332c44478d1dc3d285', ['checkOutlines', 'autohint']], +'Nacute': ['1a944d55ba77b51145ca70a2c95911cb7f950cf81288e8ba8ce827bcc3301814be61d599ade6aebae6d6bf6042235e24a987ff7e15d34bfb82a0e0602e666c95', ['checkOutlines', 'autohint']], +'Nacute.sc': ['ee3d2b8d0d3e359b368f1568abcbb24443a5e0aa7d8b66cec668d5fe35b0dd1a551a602392490913929345462e58abd39cff3ff3abef4d1728b027ba0594933d', ['checkOutlines', 'autohint']], +'Ncaron': ['b677f2c45a67b4128246725b03c9d110fe4bc2777d1697b9229654825b0cdb2a3ce3b4c35795438e739f27472daa5b80b8dfce65c9847f91096d502dd47e0b3f', ['checkOutlines', 'autohint']], +'Ncaron.sc': ['62eaf9187a1dfbf5079f8b03a4f04ca463962fcac2f300e3a2bb922ea51d3f19c5de57948a2f2f9b7b7111874a1f147c05921304e4fb09206e8a3335b20d5699', ['checkOutlines', 'autohint']], +'Ncommaaccent': ['a2f35775bfae98fb154e14e24abc8a95171766a5775c35bfbdf15118f53a7ae4bdba3286629417df3ec189478d67e33b7ace6dfeb64391f17d88d0a1614299c6', ['checkOutlines', 'autohint']], +'Ncommaaccent.sc': ['cf36c86fb221108ade4c2f23d4ac5c08a5b7b94473c8589531556c6c18ec0c11719c85e0dff1636619984c29f302462f43af04f553fd32439fe594f16c8f84bb', ['checkOutlines', 'autohint']], +'Ndotaccent': ['a93e27001695f9840e14ee24ae38a721fe98ddaca79bf4fb48af24facd72217f4550baf69cb99842ab300e87a722470c0895caa0d7d8b7ad37653643b9439889', ['checkOutlines', 'autohint']], +'Ndotaccent.sc': ['86eb599eb4833ab913d85e3dd7cf2be603b01b2655e5cfbc1b4b4ae07faeb423d967cdbc7570467644da59e0be2cf87f4671c586b4fa8b09bd483d0c19dfa68f', ['checkOutlines', 'autohint']], +'Ndotbelow': ['d7594fd91bc1ffdfdea2fc1bd776bb9774c6fb7cca82a0c60b180aafcd8b4be40d6b4ae491815eae62a364bfaef118af252fb3816b6289ac2e6e99e9fe0eb9df', ['checkOutlines', 'autohint']], +'Ndotbelow.sc': ['dba8765b9e58ba8b1eb3dd9d7a6ceb695a96157222e7da77deb1a1784f38bb64a9445545b8046f0e0ae6ea3573399a1999a07f48c68ad6a4765dc8f6659113ff', ['checkOutlines', 'autohint']], +'Ngrave': ['2a9ece20b4974b76e45861d279144d504f988f71c7dc2518bc8f2f8974065d221c30811a1e208f7f53462a344557c5dd45bcacad44df175f3c373d58a8d6ed3e', ['checkOutlines', 'autohint']], +'Ngrave.sc': ['4bd87cffb315db85d7c689d8b543ad2f39dd0bfc7c68ca273c9f60c88d5d34761546c5f69e9d72785d4a8e329332bddaa0fcb26af8320e22076f3bd6a0c8f7ae', ['checkOutlines', 'autohint']], +'Nje': ['6d2bf2d06ecc994bd443467422436a72e1e9ed68f617738dd08006c314e32c7b89efb14d244306ca25369922c6a35b646648f313f0a5c9eeba5f6801c1b937ed', ['checkOutlines', 'autohint']], +'Nje.sc': ['a1db2bdf9c9831218bf6c23f7dd7e8d8fb5a4cdc3edc79943f293bd1cbb2272e7f8a4058af6daeb6c4b406af2f73f64aa33ba054531991bb57e7032ec413e010', ['checkOutlines', 'autohint']], +'Nlinebelow': ['50aad74323ec4baf2e31aaff1cd8a103cc5b47be6c5bfdc6acd26fd3d84c390bc23c0ace1f487075087d84cefebbc63f5966ed2a94208251d9b2320e3c996cfd', ['checkOutlines', 'autohint']], +'Nlinebelow.sc': ['856105596292c2bdde43f71f82735791a53f57873ba308f382080f7ebde66c7a49276af3c7f570da1db8b9731446b27f3cdf19061b218f0efb617a1bf38c8841', ['checkOutlines', 'autohint']], +'Ntilde': ['4410d550982727d3f4f4b452b7d92330e68e66b53959be86fe68421cedd249f60020ef4aaa8c9e0edd21b59624817bc83fcd9f94cc79296d3a87e1ba65a2036f', ['checkOutlines', 'autohint']], +'Ntilde.sc': ['e087b17d333255568e5e83f353298eeb728aa8e2c05785ee96d81f16ad37233cef9ca5cef0a5f1dd37b78b59bd24149187834c33420a874721024ecd62fbee5e', ['checkOutlines', 'autohint']], +'Nu': ['95cd371d90a0b0f5dda5a9c1cb4e3e15f79db33032e7e20713df639a2d51b27224e9d478948ece6a87eeece60d2d7e279dfeaf1b5cefb54035d1529857444e1c', ['checkOutlines', 'autohint']], +'Nu.sc': ['7ce2ab24fd50ae165232cf6bd3fe9f006a7549e66e3e9e73767ad8d768a3cd8359670d2c625d2d30e7110507261979546c76d973962214f1524c627e8ebbf6ce', ['checkOutlines', 'autohint']], +'O': ['aa214808dd191934768620fecf11b35a86b15b843917f68c66ea0e00ad5cb5c373190efd24f956765761b9b194795cf73b80e128365a2a9cbdf86a7af3f7a1e7', ['checkOutlines', 'autohint']], +'O.sc': ['82ea5f8c1db833cac1aaddaaff145369886233819600f67e4c36df65e61694f74fc338877a1e0ca9a7ea8166fb152741d22b2ebdc0e2eaa1c254f9c0bc080d1d', ['checkOutlines', 'autohint']], +'O.sups': ['4b6ce9ab2564384ae08de1aba9f63bf5792108e18e3deeb0637a30a4646e1119f1dc62fc87b510730e35d9e36e6537bda5dc1b41cae0d7f31684210ad5ca7b5b', ['checkOutlines', 'autohint']], +'OE': ['a906dfd01d01a6c8ad7d385c5aa9cfb277ccb6f8fe963b275951e7d3e33af1776fee818b93c176583b113820bc75f51d502b4ca4dd73940fd8f31b726a88699e', ['checkOutlines', 'autohint']], +'OE.sc': ['602a3f0107c22e4fe68a618741156ca9de5f771c76fb70c4d8525a3840a715efa837686b41f7c37a21af03ff4c13be991900bd86152db94860abc7e74b1066ed', ['checkOutlines', 'autohint']], +'Oacute': ['4596538183a2a7e62914ad60ab2a6f42ffff46063abc003baee9651f9e317656931f4ad3cb46e33daca085e2a220c55a63306b86fcda7a9bd4b6cb18a66e4bd1', ['checkOutlines', 'autohint']], +'Oacute.sc': ['c1d8c1cf3be17bb3ff9c48dc7c3581688af74e64aea21fe3864395e7d31236436fb53dcfc4f67317e28baa402442b5bae5047940d47f1ae16c8461706527ea3b', ['checkOutlines', 'autohint']], +'Obarcyr': ['5b1830288d36f8d4f4a31ebd6665c2e1c3bc59d87e9132efdf4145fc3e1511c1eeb5276d0e5814a39500ea390cd29067d30c0f662b0a1f8bd3acfc1b8018a10d', ['checkOutlines', 'autohint']], +'Obarcyr.sc': ['5c5d251845aaf3376f3b6d8eacdae69a81c43e49bfc5b810cc9e4661a779220f8af93d990c50a50b08876340449b68f9b7d52f9e4590593084b3175f714e84f7', ['checkOutlines', 'autohint']], +'Obreve': ['0930035d8d362a5c949c6d5cfc4bd63ac4fb5a6b199c1905ff86f362d6cce041f9a40ff769cf93684accb359d70049f167df6b2f0fd00dd170b8cb36415c1a6e', ['checkOutlines', 'autohint']], +'Obreve.sc': ['db0b9ba51b894b8f05bb9214c021bb3038bfa4e6dc331863525bd5c05ac711b4ff62ca3e2260028a4cb285041604e92e565df6011bcd64f47d506d501e30b18b', ['checkOutlines', 'autohint']], +'Ocaron': ['c3758e2753b9bb44028aea25e2303cd7d128a5610e42862ab678a00c314ed8a43124537f00895cc7ea923bccb99adde3517781ca5495cd5d0b5e02edc6e88133', ['checkOutlines', 'autohint']], +'Ocaron.sc': ['4b0b2764365fb2a4839d5cacea0014ef964d3cae197f34fcaf8074ba9f2787e64e62880abe42730ca3f8dc99a5b61e26495ff5dca36e514c57f358e3d99de3bc', ['checkOutlines', 'autohint']], +'Ocircumflex': ['1a3e6e5fbf0e09dd362cdd36b09002db9734164b8b24b24ceb17a63f612f4eb45adad9ea03bd13cdbe3c589d7c702eb67955e6d0ab813b02c7abe6fd7ae7d46e', ['checkOutlines', 'autohint']], +'Ocircumflex.sc': ['4346cafaa9053b864c6db5f89f561b5f1cad41cd4582cb1b13cb8586cbf9b049213adacb7310735711dbac69bc06317922493c7ce02b7c7c648b1065b4a156db', ['checkOutlines', 'autohint']], +'Ocircumflexacute': ['814561a769c6f81349b0be65ab79455273852feff9091aad3d7a31affa91df1f3594ac3c0b39db619f360e4f1a7dceb55348f30b2d94af902342bb6875c9d43e', ['checkOutlines', 'autohint']], +'Ocircumflexacute.sc': ['f3f632d884c18f1d740e0dd9ef8784e6afe291fc22e799b0935ea4e15c02154f48395a460738aaf078f28d2d6db236d0c99dd8536314bffe1def2eb6368674cf', ['checkOutlines', 'autohint']], +'Ocircumflexdotbelow': ['7f8b625ee7b8d88e5b9211ef2cece98ef04aec21ec9bd148a3362197f4279847ecb76577a5b3a7173ce4c0eee58ea1994c8c614f3f6d2260b58460effd5ab639', ['checkOutlines', 'autohint']], +'Ocircumflexdotbelow.sc': ['847d7a40a5fbd5333637ba07c8e80c2cc26312fb2c5f1a5b961ea971dea84b6fab8de7a53b1257477c9305ceb2dd51c83a9ae5bc042f9d05055563af1ea85934', ['checkOutlines', 'autohint']], +'Ocircumflexgrave': ['26ff715da8b31c0efa9a025777a74960351d70fa00288c4cea25f410de5982bac9cf30826b9bc430e06df34ea34de56c375d7a75bf8dd88b4f8399c99c7bdca5', ['checkOutlines', 'autohint']], +'Ocircumflexgrave.sc': ['f99ffdd2570ff31ad10bd7fc65e13ca42c9aaff9e5853fa6fd8cbde873a5ba6c94773c2e05d902cf1f16b3aa39dff9e526daab6947d0a2af1ec7db56379f8fb5', ['checkOutlines', 'autohint']], +'Ocircumflexhoi': ['5e666505ca458ea5bd659c755ee099a9695f54f9426b4c3ed7cf5ef24160e6766ec71e2d9e20431d335d4dfdf92ccf1a553af17592552e325167ad6905b03b09', ['checkOutlines', 'autohint']], +'Ocircumflexhoi.sc': ['7e44dd95b42c97253cd3c3a2190647f48956e14945c1b2064b7d5c9cd3b226a0f4cf9cd5bd09d76f40799d4281d032675fdc221bf5289e9621b97588b96a5971', ['checkOutlines', 'autohint']], +'Ocircumflextilde': ['216c334f8593ad422c46eb98e359c58ee4ee5a918e47707f602fcce7ec7734f255546e7433439d198ec24526b7f70e6ac89592d8ae261d41838154f6afcaca67', ['checkOutlines', 'autohint']], +'Ocircumflextilde.sc': ['0612555060e1140b89c9c4b5347a8f4e8127304182ce983fe9114785e6341b17e78314967fa19eee0606c7d498ab5522e4761fe9b811bed5a6e0fd9b01b00154', ['checkOutlines', 'autohint']], +'Ocyr': ['e5b54ba5d7c7f7ccb3e89d5f3d32ad62e67cc64786c90d1d5a73333b055d8d08f7a753c2122704ee63bba27aed3a5f80fb0af946e488ec5528bd4de300ce866f', ['checkOutlines', 'autohint']], +'Ocyr.sc': ['e46500e5685e40135e8ec4a884441e241694b6e6da41a2c61e8c33bf196c3b89e5258be6b4b362834a59b3e3afe5bd689f6daa5fc39814bc45fdd9acb1f56a81', ['checkOutlines', 'autohint']], +'Odieresis': ['e0c7e495bcc0f29a9644aaa18f4906ae9e853294c687f1979257c24d8dbe2feefc2c98bf718f9fb5670e93a02ade5fe4f8028edd91639e4157ca7281b0301be2', ['checkOutlines', 'autohint']], +'Odieresis.sc': ['c897b3cfca95f4616ecee3db2d58fc49d58f1e64f9c4192dda46246238bb6812aa35cbfdb5453de024839dc280972c8fb4cd86cea72d25a39ee0e2d9545d31e5', ['checkOutlines', 'autohint']], +'Odieresiscyr': ['1c80b1fc3e1591d647d269d0f5fbcab95fd10de0598c978ca53c1dffd27461d657a51cb2c96a81afd19687617b96173597875d78568c383fb1fc1de0d2faa2b6', ['checkOutlines', 'autohint']], +'Odieresiscyr.sc': ['c7814f2d98130305d199ae219146b1112aef6e9a8b8f9962c6fa8859127659c7c114d6b8853b4413910ab6f8f569dc120d1b0ca53beceee1708a5dc65cbbea76', ['checkOutlines', 'autohint']], +'Odotbelow': ['b6fd85df6fdabfb6fd494aa14602ae8b7ef8eede601a39c16261d4ba882eecd487abff3cfb795e61b8cc1c63522f6f5739c5d0ea0d9a00b012352b5775e910b4', ['checkOutlines', 'autohint']], +'Odotbelow.sc': ['19c266da909a943f1a0c0dfe845c92660ca0028d9cfbd0f4306e1fbb791645217b8ee3913a1dc68c4c2e9e679da1c6da6c360fbf0d09f2c3e9ceb3cbfd9fd99a', ['checkOutlines', 'autohint']], +'Ograve': ['4fd351880b9c365422b1291e1fe8cad74a62a8c78f240ad9a8adb0895e4770d3909b02fe39a1866620ebbcb4031e4d9338cb8d70865831e5de14cc01fa9c97d0', ['checkOutlines', 'autohint']], +'Ograve.sc': ['888ca7864b631089fdf1e34088efe05bfb684fa26b5c1b82d4dd17c04ab239b2896b2b0f059de670672bb3475d9e4ecb617b29681f59d4414a9f6c32798395d0', ['checkOutlines', 'autohint']], +'Ohoi': ['c0059d98b8dc14acc763c6b2da30f48fced6c0efd82b778b9a0d84cab7875cf17eaee2aa92123023f7cab9807963a6d7684a974a3bcee820671c1f3421e1a1ed', ['checkOutlines', 'autohint']], +'Ohoi.sc': ['b85bcfbb90f235d5ddf02abfb0bcd640c9dd342163d17bcf60c870dd1d89ce6bc8bece6491c6ba126f5c2cbe37e02bd028d8a907446faeaa0e554307db1ad93c', ['checkOutlines', 'autohint']], +'Ohorn': ['8a97b009dfe88421a5145c4d377d02213a1cef4133165dd63ccd29b0c810ab125c083e85fe45e558e3235d3a7c05f04f14107a72667bdd56d1b86e7fd39fa631', ['checkOutlines', 'autohint']], +'Ohorn.sc': ['ab8c5548b6a97f0dc9273ee9dff3f8a865e8e2c4932af4bbd2ef5eedd67d5d28f1d0e0cbc9abb91aac539b2999f01dc1064cb70e5d2be2429a0bf8607a0a7785', ['checkOutlines', 'autohint']], +'Ohornacute': ['b1d91754b50694b0606843e44cdce59225b81298a5b0e2c89753b0bf43c7d8d6a27dade264a73610ae70e5c9b4d4dbd2f784b9e0f6d5116b5d8ca19266347a4d', ['checkOutlines', 'autohint']], +'Ohornacute.sc': ['f664d5cb40db2463662e21e6b7f98db40960dc07edecc6ce4b25e54409f1508f554f5dd2c9d28c135791d2838eeefb36efefaeaa581b5f01cb785979478e50f3', ['checkOutlines', 'autohint']], +'Ohorndotbelow': ['f469b95cef5686ab3304969604c60b278431ddc5c9016a3ad9e6a7799b98b41f0eb39ffff928fee23787bb97bdc086a8f2abc7ea873681f9d8cf015060080e24', ['checkOutlines', 'autohint']], +'Ohorndotbelow.sc': ['5bd39e7d059332563cfdfc9d382ac650c515c1900cdebf0907aac5cc3ee441f024915061747ca6ad92e67a3e0c060b2a9019b3c4ce3ccdf94643f50c52ad8d85', ['checkOutlines', 'autohint']], +'Ohorngrave': ['ce486923256f47f1aa8a8522ce0c78c149c0833743c7143a9a1492a8e303905d2d2377500c6acbf30ac187a3b033c16128fd539e377a091fb41d44cc483692c7', ['checkOutlines', 'autohint']], +'Ohorngrave.sc': ['af0b8c7e1e23da776de060bb3de647d50e1ee4e95c67a54d0a18cf26298b872c752d9510aaa848bfdbe27cbd2d0d88ef27b1d1bb99cc7a5fe236d004a086c0ab', ['checkOutlines', 'autohint']], +'Ohornhoi': ['976635e60723a08ba0adaec03df1f021fe4f2ebc1b8be922226ec92078cf9834adb457d9937c809fe0cddf9c37499582320c0e47fd20d2ea63d56bf509c32bb6', ['checkOutlines', 'autohint']], +'Ohornhoi.sc': ['d5efc57e8776ab3e21e822a61673b97659a41aa3d45134d067cd7b8a90f4c44bac098ac8f32eec1a5a3826ee19a26fac4cbede0bfad34e447ebb7617b7e892f8', ['checkOutlines', 'autohint']], +'Ohorntilde': ['87161ceb80dc27c3ab69d0f63ac8e79af4d4f94df800e65ed1a63ff57e209e814584774bfd159048dd11d4b42efc2ab7b601ab6090d875802eb729cefe6371ad', ['checkOutlines', 'autohint']], +'Ohorntilde.sc': ['69e9409e5ce1872b22471b843514829516d4adfbeb0d299cb2f450612bd4fe4e8fbda4f34dadab87410e50a0f28ae54e0c631e8251776b1c842da32b5de01ba1', ['checkOutlines', 'autohint']], +'Ohungarumlaut': ['bb38f58cecfca385a55f86d05ee18363a810ed79e52d936c51a295d6085301504c076b21b49f79ff64cd7e687b9da6fe8c0a80d9212b0f0e780e4bc5ed5315e1', ['checkOutlines', 'autohint']], +'Ohungarumlaut.sc': ['304fe90043ac0818a6089d08e49ac85aeaf134c5bf74606ca4e979f3ff564b7219648fc89f119b9d74c1b2cae0a8b3d1dc0e8148b07b6eea109601f7560a3a36', ['checkOutlines', 'autohint']], +'Omacron': ['a4d0a37a1a5f643a5794dd0094d39d4ac268ccf32df840eef90ee92942a369f8c49d72b65eb1c7b8ba912a3863ce0d326cf6357991be469ac359ac3ac347558e', ['checkOutlines', 'autohint']], +'Omacron.sc': ['8fa93535ec09593432f281dfe755368eb68ae5533d5fbe9d05d2720ceddb8d8d61f216c895bfb1d58e915a9ea3608359f93dd1851c89daa1a316f87299cd770e', ['checkOutlines', 'autohint']], +'Omega': ['e8407ab261770c52ee6a77e6d5bb9e9056dd8c7d1177b2c6b16c91ee7b4c9edd0376f144f12ec54bd7af11d6ed7f76046c089b814fc72369c7c41e1be71481f9', ['checkOutlines', 'autohint']], +'Omega.sc': ['d6844811ecb375f427957e9bf4905c4794c342b3da3c003ceabd699cf3ed08a9154dad66d33a76d1749b193f502aa1ed256dece7f8e433ac81458f4c74982f19', ['checkOutlines', 'autohint']], +'Omegatonos': ['6948ab1a60a3d235130a90441e04c4991a37ed2ece0b3b640033807f3a5dc8bfd4dd1195b193b1111af0cb7d7fead63f8f1546882855b32d0876f4260431aa3c', ['checkOutlines', 'autohint']], +'Omicron': ['e5b54ba5d7c7f7ccb3e89d5f3d32ad62e67cc64786c90d1d5a73333b055d8d08f7a753c2122704ee63bba27aed3a5f80fb0af946e488ec5528bd4de300ce866f', ['checkOutlines', 'autohint']], +'Omicron.sc': ['e46500e5685e40135e8ec4a884441e241694b6e6da41a2c61e8c33bf196c3b89e5258be6b4b362834a59b3e3afe5bd689f6daa5fc39814bc45fdd9acb1f56a81', ['checkOutlines', 'autohint']], +'Omicrontonos': ['10148f38a26fb109f7590e0444d9a57454de7298754e3dad8c904d7d7b2a9c9a4b4572b1ef1184bd50cdb86575a93d5cce328976f8be8653e97c78494c9ca4c6', ['checkOutlines', 'autohint']], +'Oslash': ['29fa30abbf3801921a93ffa10e2916817c2d64b8dec8a6e27902f4470351649092bbcaf29d984bb420b4f0d8ba4a9310bda9e163af3d0eff751cd97a88077a49', ['checkOutlines', 'autohint']], +'Oslash.sc': ['70d7d6bbe99333ea1524d386bd71f8f259cc03162ec3bc5c9479b1809a4a9fb53f9fa3b3c8307d155187b4e83ab003bdccb4318a1e1a5f8e107943d1e3a5fc48', ['checkOutlines', 'autohint']], +'Otilde': ['cc08ad0907b95f392ae18c05e9fc31244e4ac95fb42cd15f3874fc0bf5ace999aaaf836d2dcc77fca1b9bf5de081ebe6f64711c2625e1409e411786bf38c64c2', ['checkOutlines', 'autohint']], +'Otilde.sc': ['a8c6d01d8f968dcc2226939503969c25145b82a0e0fc2e758f5c8228c481a3e802524eaa55c357db272087b551c084e629fb037fabaa7fa36d5b3f6c7a1beabf', ['checkOutlines', 'autohint']], +'P': ['20cb48aa71f3345c4719406b174c2d69207fd7cc0d7a1b4d895c8848907ea4ae786b62d71f3a2e19cad1c0fe0096bbff047a56f8416090b96e55410235e3e75a', ['checkOutlines', 'autohint']], +'P.sc': ['414687ff7860eec72bb589d725098ee6fb432dc5121053726a2f54d7476559e4d63c1134b961c1a419473e0686820d8c5f685924d3020aae255142d6761eb017', ['checkOutlines', 'autohint']], +'P.sups': ['81bb254411f662916303e79f242d26eecf1a863b3bc293cb44597c53fb86f496382c018b9c700fbeeeb385172a5c8e8747ae6a3197ecec985b9001a3fb66be0d', ['checkOutlines', 'autohint']], +'Palochka': ['4dead273f74c0f7105577be76242edb2505d7aa64d9525e3600029f3c861fff783d1bb30921a322351fa55105f03cc403016be91afa9151c59826840ac6beceb', ['checkOutlines', 'autohint']], +'Palochka.sc': ['bf58d3487745e698e0e5713b39cc5927e5a97bc9a469252e4c5eedc0e6e828ca8f155463225faf4290bdeb4a54ecc994a7bd02e02f2192d719544c4e4403df7e', ['checkOutlines', 'autohint']], +'Pe': ['2d05f54b02731dfc2da721971f7d7f864be8549f09ce3ef6459ee468864ddd7dd8f76f0e409b92663d6a4b20e227a76c345ce4af5c611bae5f69e15965c114bc', ['checkOutlines', 'autohint']], +'Pe.sc': ['94282c8c048451642012bc1528b7847f1055b30f2b1081471e918b75044503c8163575f5a797f7e64060293de1726b701216a9f09a37976aff1d406ea1da5a90', ['checkOutlines', 'autohint']], +'Phi': ['d9e87ef5fcecfd947baa0cd42e415aa7b010d5f74ddc312a59965c743bc81884d90e3e79d902206d5c95835d90e17784fa103bdad9ed8d113ae9431c3f2db3a1', ['checkOutlines', 'autohint']], +'Phi.sc': ['96af770dde22228817c4263f63dcb33b6d3f8188643081dd23096812e4c804df3b03519ac1a1b5aa8a9e7421ed1d52ca177abe86ebc038e74e085237578085f2', ['checkOutlines', 'autohint']], +'Pi': ['50c2df6bcd2b77e42143479b2280362548aa420c5dcddc50abaa58665cff1d48aad7bfe255bb4f32681ad385b90fb2dfe81abff578242579216b8b587e94e6bb', ['checkOutlines', 'autohint']], +'Pi.sc': ['8afb7f56cb60bdf32a93969fb67f241582d7d954be09feed04d539889e90d4f4cb38c86b8a787c60ec44998cd4d61f5d15cb705d184adce7f1146639364fd373', ['checkOutlines', 'autohint']], +'Psi': ['75e74b9189fb99aee46b373ad9fad1f2ee800deb31da0515aa5a23a2a7f82c45b4773151f8ddf4ef9fc435424da08b435f409169eb40744f6bbee244051008b8', ['checkOutlines', 'autohint']], +'Psi.sc': ['8c805884ffdfb2ab2702654ba4e366c9bbbea31fb792ffb9a09f1d66033fddb17e9cdea073fe6b041a3d0633915bd829faf07c5e8890614768c1015dd645475e', ['checkOutlines', 'autohint']], +'Q': ['f86721888711c8c2ae24ff3bb9fb8eed22da818b6f25e7f798213d4774c949fbe904525e20488997e73dbd64a0ec5b840c7109a9b0ce9b525a395077cd0e5eda', ['checkOutlines', 'autohint']], +'Q.sc': ['83f6f8769c8997779527023e70007852b3916ff2dcc4956af2eb6b6446bf794dc59abec5b24a7604e4f7ccf0ed53537a2310faf8ac7a6a8538385cc1988bdc4d', ['checkOutlines', 'autohint']], +'Q.sups': ['fa2013b2a3b081ccd30760becd0e841a7240cccd020970105ca3de7a5d4d5abc163fc86517e600b512e69b6933682ddd74605275c8f0c19534157c4f35727862', ['checkOutlines', 'autohint']], +'R': ['b2fe2026451d19ae23b7de678426e6a22a03690b381bfdf0a6df66659ba7424a6f00c5d60e24138ee970048fa5fd8315d3edac491e92285fb33b7459a53d3257', ['checkOutlines', 'autohint']], +'R.sc': ['6f0ce44d5c4195a08b45bc0a0dac65901e8cc134b8794d3c069f06fd68b1d71fbcec8cdfeef23d586df6db01f5257ad1e7b9db27ca434b8bb36768ae57e291e0', ['checkOutlines', 'autohint']], +'R.sups': ['db35779f2fba61d375e75caf23372e4036377aefdd82ff9a27d58bf7c5383004481e3963b15298b5e5addc61d3a096a8b18da42a7c18563b29a2f2ba00ebca6d', ['checkOutlines', 'autohint']], +'Racute': ['edaba8e34c82caed9694495f179281a8ef5b95f2ddbe810af4d59e65c35a9f2a3643f52a6a0970c6d64271004ac4b1e378e9ce6e042bdab8f8557df538682edc', ['checkOutlines', 'autohint']], +'Racute.sc': ['85e55642194c4854e37eb225ff3b2c5909c3a8b7c43d30b6da594c752c8c407ab685cf3ed60a70d78f2594b6f897da40c53a41e3b300c9344b5f8300bfbb677b', ['checkOutlines', 'autohint']], +'Rcaron': ['b1955a9e585fa75a86e0bdf685854f6fab6fe541dc09665ec116e78cbb35b72716a2f107612ca923f7be9d5748a3bd90d741fa1e4aaa69c58fc152dfea1e0a07', ['checkOutlines', 'autohint']], +'Rcaron.sc': ['32029ab030bf7138df3acf737917d03c35f940df14e05a7afe636cf9e5a320815816eb7ada04ab2f923d515c599129e1445a65e961bff62feceacc52b537d049', ['checkOutlines', 'autohint']], +'Rcommaaccent': ['2b98f58229273324162b52669fa06026678d65c1540d3c2fb103475391bba83a64b457ca1c200cda184246023370c151d5dbe59216d3f97170f64467aac98ef3', ['checkOutlines', 'autohint']], +'Rcommaaccent.sc': ['bce79265533e89163e2e1c3810eabef15189e4bb057ee0072aec3548a6323ade53d041acaf23c78b4abc0ccece428c5d77c8c000e5693edd647175a17c8fe357', ['checkOutlines', 'autohint']], +'Rdotbelow': ['584a89a030bd5b802c29aba053678527ad6c9ffa5c58c0f5aede025e0a1fa42676952ff1355ec840d73ddfd543ad8c1217727f02b146e675bee8ff57cf0319eb', ['checkOutlines', 'autohint']], +'Rdotbelow.sc': ['133353044e4d070f248c13c5efee0518fafd46dd55c963b5a32bcf11e05a7dda16550f218da12c183a928ff36ed282853d25026b9fcba22703d294db8eb3d344', ['checkOutlines', 'autohint']], +'Rdotbelowmacron': ['9b4ce1dc2fdb500017f0e2360830ce5a79efd514ea0a8231c7ea5a99297f888473b4ae45097ddec000b857de16e0d2339e79123f24a2884fd400168e426c0404', ['checkOutlines', 'autohint']], +'Rdotbelowmacron.sc': ['c447b11c709f4c259512d5190c74c1846b9176351a0db0c13a9f5e621e5cdcdb704d3fe4a8ada3c92c8c95c065fefe2a985c4866e639ef110554008181b5edc4', ['checkOutlines', 'autohint']], +'Rho': ['c41d059777c8716abf33533904c70fe2a1dcb71a7c72acbd43984440b67f64e5a277c2cc67b107420fdb7d93c57d58c31ca86af0ae78a917bc94567f01b758e0', ['checkOutlines', 'autohint']], +'Rho.sc': ['74b5d96eb20e532d68f55157c863bfc5129ed609a833ce1eca5d24597f6f1cb4a86a02b5aa364d2b4778c5466c696c17799429a91aabbe3dde0bc90875ed6bc0', ['checkOutlines', 'autohint']], +'Rlinebelow': ['d2f075570a4b1ea762fae2edbaeb7742a8b97b11da5368cced0e9eb0a8bbf3fca0e14439bfda2f762135443e535cd48367bec43eee7ec93b8b92917308ef313e', ['checkOutlines', 'autohint']], +'Rlinebelow.sc': ['34e2da3d0621b3e9b48780607219209aa9ae9567e0d76828aac001197caad46c91366a099dbf41b8ecc2121045a3ca2faaa1d7c01acfc735ad099d32b35df24a', ['checkOutlines', 'autohint']], +'S': ['e28b9bf62906dff95377f8670a94472e6b8665ef66613ad9411888f69bfb93cbdb67b832eb415e76afa86707e2e1ac4846506d708de1ac879c5be951ce8a18ab', ['checkOutlines', 'autohint']], +'S.sc': ['dd230a874af1c9298e68b79d235c9164c42be9ac0da69fb12166d67de1880cde297b11e46cca98c5f5e19f4d24a0d721606e6c5b6848ee6c4657f4239f8a3b00', ['checkOutlines', 'autohint']], +'S.sups': ['021200955646878fa02fca859863cc6c119bc802a72c2f23d93c96d8e34ec2dc68926f3363d2207646dd27b445319adff89986855c8530e7c335d0466933f0fe', ['checkOutlines', 'autohint']], +'Sacute': ['5796f3b03056b93300e8d0add24ad2ac6d3d970fd77e34f7212340b3ed1e22b626e2b8466703f4d1d3d971ac1a82287a475f5d22d12fe70ec0b91d3341ba2108', ['checkOutlines', 'autohint']], +'Sacute.sc': ['7485e5d6aae12207b658a2abedc1e4d98b7a9bdc761f4e6d06945143eca787ba7bb10bb3d26d5c89713005ead2f7f3cf2d9f83b8549117f2b7739e56fd3c4c30', ['checkOutlines', 'autohint']], +'Scaron': ['cc6343f011401efb11956452595bebbbf510e28e27ff99e40cc174c037398124f302724bfc3c007b80ef005cf7cc39a927718831f9eb6257428b689379d96cc5', ['checkOutlines', 'autohint']], +'Scaron.sc': ['2d0b12b82e83dc58c04c4c505f32bd768eeb6f8e2c5e9c8d27840b70cd839c27732ad654d31680a038b5990d437ae9675860e0a541148e0e67b94bc187154b21', ['checkOutlines', 'autohint']], +'Scedilla': ['98546a264aad16aa181afa9b9f7070b2fde03b653e150d21014edd98d0cf7084db4d5b1557d94ebe4f47714420eed94d03af9e9da0354d083a3dfb2dccd3a2ff', ['checkOutlines', 'autohint']], +'Scedilla.sc': ['dd7e71e50a4265b4f8f77fd45333888789fea4e24cd9c0ed3fd3875f3f7edbd701e76bf4e2c397dd30137c27788cba4c20ffe64ae61a503db7349863c6ce9a29', ['checkOutlines', 'autohint']], +'Schwa': ['38dc8a354f52aeb9bd817f1c7b9534fb55422201d006054c7001a8ff883c9ec6a28aca61dc1d96ab0b27b276edfbeb6f2e2c8544b8157f480bccc65dfdbcfecd', ['checkOutlines', 'autohint']], +'Schwa.sc': ['004c6a3c9cab91b6574c33d2501237457d6e4cc8076a8f8be8df1dde3ca71b631c3c9eee82af2dbaa83cc3c6688cdecbeff534219d68cc322ffb55a7ab0580fd', ['checkOutlines', 'autohint']], +'Schwacyr': ['da76e86bfe1bfc1bb61d10d8cfbbe227054edf08a83ec26af595f1e4f031e1a52660f4cd538e86fb4181dfecc25603e55762685a5029930c61ba0ee3ed37b9a3', ['checkOutlines', 'autohint']], +'Schwacyr.sc': ['280fd317d39d61270db21b663e7beacc13c908fdc3ccfb366c9033380c7a8c8182dc7f3c2f5801d8786b18e3cb6393e1d9505cae5e90ab07b6d33d3677a9d739', ['checkOutlines', 'autohint']], +'Scircumflex': ['82c6b27507d1dd4e1575bb75830999eecbff5052a2790071df25be6e8a57158c159da784b61d0fa1a6345d50368e2628d7c079e0400805381c66fe5c936c444c', ['checkOutlines', 'autohint']], +'Scircumflex.sc': ['de149fbf348553049f4906cff4adea12d39614e10f88fa100be5b97e55a31efb422df5aece4874b4feebf1e37226f2ea2048989a902c67d1c2217f20862ee90f', ['checkOutlines', 'autohint']], +'Scommaaccent': ['d57d453245f83e3b117b04a08c6643e62a051a65292ce54ebbf9d76f4db29f2ca20de5aecd2d018ea60468ba78c91dea7048be3b6fcfafe1e8ff5b0eab40203b', ['checkOutlines', 'autohint']], +'Scommaaccent.sc': ['ea7202057dc6fff4d3a2b921a6e2a46dfae054cf6039d9ee8df6e2e67bb065ef9dab9652ae59f4ed0308695f56fc61e58c83d063f3cebf5de3e02adba70673c9', ['checkOutlines', 'autohint']], +'Sdotaccent': ['7e4104b249ee22dc13b37b877f6dba58b580d61f87e068a85d2bc8514e01e07114965871246f14e0112146dac8b1e55fded8b63f12e6b2d9a5e5d962f20ad449', ['checkOutlines', 'autohint']], +'Sdotaccent.sc': ['baa50f74cd720ba75a5f4d7238dfdb4934a078d718fc4a58800f36634b887f341e9a88c5900c22d906eb0943cdd75165bd56f8e1c3ec4119894704e70478a246', ['checkOutlines', 'autohint']], +'Sdotbelow': ['30685076bf9bc39e3a842958869af9335cb7b76f2672c89ab82c5a5bec4b2cfb14cdf92d54434c982ef4e772406866bcfa08f0990e0a778fd45d72afcfd4b8ea', ['checkOutlines', 'autohint']], +'Sdotbelow.sc': ['0d014db7b1e5be743308cd9aaa4396e00171443effcb68d8d2f3f2f2bffe8f9c3fe99dc2b8cc24b206cb9fe0f4e7037f757956cac1f988ad150ee5eb0b0584b0', ['checkOutlines', 'autohint']], +'Sha': ['19519a2995e6b14bcb1d739105af2fb1a6f75aad851b5c45a75253e6652d6f615b1971a3fd4d2ded0ecb11a4f68166a0b79c8eaac1147d19a1ed522ba1acf5ca', ['checkOutlines', 'autohint']], +'Sha.sc': ['f5265c8a3d44aa68173259c7bb2c7d83d5eda8b2917a4dcc1edeb6cbef70b086fb9a16591f3f2705b4e80d4638eb7d3583e4962b4aef49c49093ff09d5676378', ['checkOutlines', 'autohint']], +'Shcha': ['4ad3846280567e249c0f92e483e18243eeaa7526d294eb6d8d61b681f2bc68db87abbf4441cc21fa1cc88f44c633ea7eb81e74e07bafc9b9e37611a61f48c49d', ['checkOutlines', 'autohint']], +'Shcha.sc': ['6830eb40dcb9026189fd4644cb290df861c6dbe30aa5dbb73fc06dea14a267bbfdf1cd6566859cf1cd69e5a42f6ffa9d9e36b1b1de1bc1db07a613f72739dba9', ['checkOutlines', 'autohint']], +'Shha': ['c56f7e03a20fef189e56240edd54de393b07a28099d471f7d2f75bd9b3c182e312ea85aba58818a3eb52d8f017bca6fc4cde2fe54501032a71bda839db800ae5', ['checkOutlines', 'autohint']], +'Shha.sc': ['7c3e15bd5b7f1ebed1f3c09ed50e2ae1eaea4ac4f422713c32a6cd4dd5bdfb623ed7039545fc1037c0ebe69fcdbf4cea163758af3fafade5b49901eb5acfe32c', ['checkOutlines', 'autohint']], +'Sigma': ['9df8dc88dc4033339ce1882471f4c5a10156a8442f2d1e4a7907615b827e77b1d630eacfc08ac613869c10d7400bb3bf21fc2fedbe618c240a3a1e3b25d31204', ['checkOutlines', 'autohint']], +'Sigma.sc': ['2a611af136722b5cc1aa3d6d599635611c1405edffee93f9dd07c2c5756d318b38f33f38da92942d43afc4c81bf20ed7c97a3e102f8de7d4ebdc27bec49422f6', ['checkOutlines', 'autohint']], +'Soft': ['285607dd7ddff44ab48cb94fb5a8e227101f1bdf412557ae271b0ae55fb4a4e55e782c905710a8cda41acc9b8f89a9b199f767fed34736bd6fe4a74d5c5aadf0', ['checkOutlines', 'autohint']], +'Soft.sc': ['88d08212c805d46afc7bea2be2140b363124d16d7852ff5b927ec0b7fbcac457b909f62343c74538c744584ae85a9e54bbcfd5ab6b13afa9afcd9a07f4607db0', ['checkOutlines', 'autohint']], +'T': ['2a9a58987048616225e70c4612319f842566ad4a11ffe0575dc668dda2a14e059418cac25647441ec48c12e1f609e6065e4e74620404e025260dd96bedc91638', ['checkOutlines', 'autohint']], +'T.sc': ['ad5af1a8745f64643d8e21317aa149891aca4fe1045e99115c30ff7b7cd2e7b8bd57c9d57840a729d055bbd7510e047fd43dce0fd474ba3a7067a67531887d03', ['checkOutlines', 'autohint']], +'T.sups': ['a0b1e1366e69bd99f6a05ec2681f9130a29675da5c059106811b1c099cd9f9675faa6cbe78c99b1781f5726c0074ce57ce54693227ac6aa60851a02e169155a5', ['checkOutlines', 'autohint']], +'Tau': ['ebca5bfebe9fc245f651ed47a98792a4485d4446f0895b7e7ac2af8f1330269bee02aca81133feb65af44f9fcf28b58aaf2fa225354e8ee5cac6c0c715b66c48', ['checkOutlines', 'autohint']], +'Tau.sc': ['3fb55e7932fa287d0b4a0e3d8d018036007fee2532b213fbbfb71a93cf4c800a1ff2ff95b7e04af8a3c8f09f3eb2d3b9810f8bd29c48cd335856141db2bb329f', ['checkOutlines', 'autohint']], +'Tbar': ['04ca6eac04c20fdc99596783070c1ece83c8a4b9594365e3ea416d4560b28460067cc13ce526ff6d39904048f80b47dab67f9d36c95fc6586b6240c1d0456887', ['checkOutlines', 'autohint']], +'Tcaron': ['2cf4471bc6985dce486dc07211615e2a62941804e661a3ca869325bff9dcd8b7e14a80c673440de772d913e077af7b61b3c25d46d04b388565cc6517e7bbd5ff', ['checkOutlines', 'autohint']], +'Tcaron.sc': ['a046dea48fe958429f2002f24691f26ba2d15b13bba1ac790da270ec1280edb3d43e5f7189a2f90456dc2946c3bde9bde56c651b108c199b8ac708bf3bd80870', ['checkOutlines', 'autohint']], +'Tcedilla': ['9d73a10aed11a23acfc74bfc69fbebb15aac09af27b9dbd4e57bb585038dfd6fb04576d3fb5bf54d7220f2a05c361cd5ab71fc7dd64e5d76d99d3f190c6210ee', ['checkOutlines', 'autohint']], +'Tcedilla.sc': ['ad3099cafb649c43b4f4e3c2ec17b41bbaaba65b237eacb8aa1019c27aa1f823b4089caef3a8644c82a9506c9d9a8405c129b8e513fae911ebd5f187b3943ea9', ['checkOutlines', 'autohint']], +'Tcommaaccent': ['9cc4f85fd503f39aff0ced0ac58a5ef29d3251e939c20bb5e8fc41fa24544c420525daf46521fea41f380ab8d88ea98db8d33787aab0a29c2b660cad70685a82', ['checkOutlines', 'autohint']], +'Tcommaaccent.sc': ['ed124de2138796076ecbddedfa1fbcdee0382fd9ea8488a551f9836b433ce6c52a251b1823ac818e082d81306d6bec164320964a7c92f6abe74e8b9d6408bd8c', ['checkOutlines', 'autohint']], +'Tdotbelow': ['01be7af1cea32c180b4dda41f682fde4c1233aa342a2aa1211fd7ee31cccba8c5fcd1479b538ce4d3feaf1a9f1332048ea99d42dc0a9a56d5f5c8ff285815ea2', ['checkOutlines', 'autohint']], +'Tdotbelow.sc': ['39a4893db27a3a68732b920f80f18f0479cc7758a597399325ac50c7410f43b0f4cd6ff7a9433eb39aa5cee1d29ebd8293175f16b845962b61a18cab3d0b5804', ['checkOutlines', 'autohint']], +'Te': ['ebca5bfebe9fc245f651ed47a98792a4485d4446f0895b7e7ac2af8f1330269bee02aca81133feb65af44f9fcf28b58aaf2fa225354e8ee5cac6c0c715b66c48', ['checkOutlines', 'autohint']], +'Te.sc': ['3fb55e7932fa287d0b4a0e3d8d018036007fee2532b213fbbfb71a93cf4c800a1ff2ff95b7e04af8a3c8f09f3eb2d3b9810f8bd29c48cd335856141db2bb329f', ['checkOutlines', 'autohint']], +'Theta': ['ca459311a05f2298f0207e284ff5cd33bd2252825c7cf1df82680071c304d202347e4057b14ee03d184596a1e2090d394c698dc85748cbaaa85f20850158c099', ['checkOutlines', 'autohint']], +'Theta.sc': ['77dc3df2fb912c8a96975828876ad517bf62b9ca53db3cf01b2cf2aaa4de68efaddcaddb983933c3e6a49717c28819f28b0568233ab6ef3dc211e6c000598ef6', ['checkOutlines', 'autohint']], +'Thorn': ['97d14a585790a358698db8dd47e3217e306f307acbaa2f0818f12ab1bd71e5b210972f3411e10d6143c6b0805cf3619b41207559f266508020e8c66d98554c37', ['checkOutlines', 'autohint']], +'Thorn.sc': ['5a418b80d2b60c405f93b5a1b194baa796f368b79cf0982d790c6531f602606fd85023550fdd2a6db1edfda64c45c33f67da8e4e36cf2d0bad168de4e5739d94', ['checkOutlines', 'autohint']], +'Tlinebelow': ['20dfd1dfe2d4c2c39fbd58c253e06bb4f8c263f1b0f811001cf0d3c40a11ff002d23cd4859fee2bf14d171200dd96f597017ab4087b6c9e511ca2a5bf9c73dfb', ['checkOutlines', 'autohint']], +'Tlinebelow.sc': ['abb4083aa7e44fa32222deceef8d1771fdd63314fdfc7120d40f64b16eecb4dc06f7c61b91a44c687d066cc89ae8243d82dee8eb642927167a16390223f87638', ['checkOutlines', 'autohint']], +'Tse': ['71e037cd8f942f4dd4038a791ce6962c37eb4bd3a2d9f740064f7af258c6c785d3c019c676eb268c2a25da4cb13d38fed36254189f6c6c25d78d065c54d47d0f', ['checkOutlines', 'autohint']], +'Tse.sc': ['3a8c6f1e3a9e851bb0965709250f5ec0dfa8860cf620de1bb420d1922ffb3bd019fd5223c377a6e606487424d2a9a242b287d1298f7dc54a424b66e45d236760', ['checkOutlines', 'autohint']], +'Tshe': ['6ebceafabdf4e4c2d083b53ff01078c3e614d741bca7c672edad3e3534c7f52f0cf6ec4f205db477e4e5c17785daae43f046d1bd6d6aa4672f5d44cd6aac0ab4', ['checkOutlines', 'autohint']], +'Tshe.sc': ['166c99ffb46538299c225d35c57310102782a7c98485aca50d5ac12ceabe776d783a324ef910b14e2d90744d2f32afced908c4cc18cfaf724f61f6ac157f4659', ['checkOutlines', 'autohint']], +'U': ['a13b8224bb0e3121ab1685a3f387bdd3b243190ea0c793db42391039b41f68aa99adce70da1048a024f61ba1ef4b4236e85695bf7b47abcfdd86ac244f3a4939', ['checkOutlines', 'autohint']], +'U.sc': ['ebf4155f19b392f447328e4c2a0831760602e32760ff7c38d6f84cd6f706b13e8edca6e172e02bfbba47c3c3ff351df364c36f0382620e12afaef58417481d09', ['checkOutlines', 'autohint']], +'U.sups': ['b6cd47f6ff9242d74d9019b9144ba4c0b9633549a132883026376bbcb799493bbe5ab3225671d6f147712cca5eec2c567d9669f752e6aa9ae14f242cd7d35cb6', ['checkOutlines', 'autohint']], +'Uacute': ['57e80ed0ba516cbd66dd5d862c9e120259edbaae0a3a1644b591cb9f253f7cc9e449df29e1799f8ffc5e3c94c87b8e5a328a183012844d74174fb204463a018a', ['checkOutlines', 'autohint']], +'Uacute.sc': ['303b8929249736ec3a097221ce3d49f672d4756a1c9a73fd7491ca6bcd5c15f26d9019ec6a54777cc424b192fa7b5468e48703f5e10b2b1439acd6d0baf3268c', ['checkOutlines', 'autohint']], +'Uacutedblcyr': ['76a63f36565f88855734b7eeff39a982ef85affa20082b272f71b5c8bd79c608157321ea3554c3aff0307c0ca4118b5f8c86502130a16f4f4c2af6afb5202c52', ['checkOutlines', 'autohint']], +'Uacutedblcyr.sc': ['bb4635dfa1a46c36cd7b4aae2079ae8685d356d439cf7149018e7375ddf949a6a0eeeebd3e99322dd9a8c7f9290b38c342262c26996d3af31c312d83101fe44c', ['checkOutlines', 'autohint']], +'Ubreve': ['556a9d9ed6fd230dcf7e70c4fe4e28c515d376af118cdb16e487ac1627e663812964564ed8bd7a93078620126f9154029e141defa88dc838e2a2f160a54b56dc', ['checkOutlines', 'autohint']], +'Ubreve.sc': ['fed334314947e5e882a217979dd739848c23deba8e6f46a1ff2f6712e42562f51f8ce47b9d5868381f9928f27f9d2514eef200baa14ed47b7096fa70f21ba060', ['checkOutlines', 'autohint']], +'Ucaron': ['bfaf1fd39d5707dc598f58c69d55a47bea62466c1aee0401efdb2fe1c5d9ceaf56a8956bb8e78d6c167dbc9f7dac9be150155410a497fae8914bd6683d3c2a3b', ['checkOutlines', 'autohint']], +'Ucaron.sc': ['c8e5f16168f79511ac8270719969b9847d791c96838e069039784627e8f1b4452288446b18bda8e550ee22065876c88f1adc493bc7d986d78dfc0f30a6ba8741', ['checkOutlines', 'autohint']], +'Ucircumflex': ['60e2b7a18ce6353099f09508fbfcf93e2863f8902ab3866738a6151282204b4f9e2e31cef6ca28250d2eac6f1f3c612cbf5b20856bc973234b73dd1388ac8b69', ['checkOutlines', 'autohint']], +'Ucircumflex.sc': ['0ebd38cc210ea0bebd4adfd7caf8be50d2297124b0a74cd78dd095d4d910f9bb9c9b100e897c1a83714b29c289241ce332b23ab84836c1cf5554432e00c93540', ['checkOutlines', 'autohint']], +'Ucyr': ['db2fcaff7886f34db7ce995e1028c22112f21c012e26ddc54315fdc0b6fcccbe1b2aa6c3678f811701598d21b8adc0bc071c9365b65c23feb5492f3e6423928a', ['checkOutlines', 'autohint']], +'Ucyr.sc': ['adcfa30ee3e1954504e157cb881171d3594157cae478e6c9fc69fbb87a52ed0bee60c938b87521c52cdd4941435f14790d89b9accb15670b82efe40f13d0c84e', ['checkOutlines', 'autohint']], +'Udieresis': ['1c848f83bb6e1bb5c911d50b455200de7b7b7be1056daf20cf463e7c008d93193187f5fedbfad8cff40c8876664117fc042fa848e27c45ddcf79dd1294f27e43', ['checkOutlines', 'autohint']], +'Udieresis.sc': ['765a69f0b0bb07486d9c134e34f2ba1d347e22549717d118109087c5717e4e244f09d0e4e76a8f931ac717f3ffa35879ed75fa5f0b4c882dba462c8881f01817', ['checkOutlines', 'autohint']], +'Udieresisacute': ['dc7086ca89dd9204853544e97911e8ac735196989431a26c61e992505777c848b41d47610a7640c3bf10584c5a02c663835836dcf03f9b0ef059ecdd5b8f0450', ['checkOutlines', 'autohint']], +'Udieresisacute.sc': ['3963e4792f00653ed7bcdc79bb6bc814ff4d3c2678c07a1bb1d322a43a0aa9c72bc7d98ea101b3c698b168ff4fa4c220475eb122d2423335c8d8462e9de35b70', ['checkOutlines', 'autohint']], +'Udieresiscaron': ['d818873a70c8a6a223273d6268e46a1f88a322e8cbf2d8c605fae7b59e9ff1e16069b149fcedb7cb51653f1f2014e4e86d7db05e0b2ee6a0a3bdd78e6e9737f3', ['checkOutlines', 'autohint']], +'Udieresiscaron.sc': ['9e3c2ba48e6fed4c17eb76f707060bb00252323ec3ebd708b0f76580b2804d85cd936034c489715e9305e41f775a797fa49952264776b557e04d917f48a3dc0c', ['checkOutlines', 'autohint']], +'Udieresisgrave': ['fe450152b1df0048299a024ea097a3dca4c4964f51f832ed76b2414d18b52e8ba97d25570909f739b5b8a523d5eaf6b73664ccef18355872c34430736f989fd9', ['checkOutlines', 'autohint']], +'Udieresisgrave.sc': ['a95cd704421723d3b713eea5e32ff9787715453914a7dbaebf0a1c5dbabb2a2d597fd38619b018d94149401f809b2bba731a8215c6bfef6066617c6854984f13', ['checkOutlines', 'autohint']], +'Udieresismacron': ['435b7eb0a3db3eb184dbbe69ba9d1beb4095325b5078566a3f60fe9049f285caa2c02301ab31e0f0dc8bef8d4537818482c8381c3dcd68158e4749d7696d0ef1', ['checkOutlines', 'autohint']], +'Udieresismacron.sc': ['8e70afa461a60a6d7a8b648914b85f3a020ba0f904e4c03430c9361fd0b08a87f3fe6ea0d60ddf898066aed0900d08dd9516d8f02323a7e2bfba26ca18f22da4', ['checkOutlines', 'autohint']], +'Udotbelow': ['00b4cf45dba212be1eed65539e000ba00bad4fcc5b2fcce812b6989ca193741127737ea78f911f5184e1db6659f07376e2609e30a288e4ed1c3e17bc4dc2ff74', ['checkOutlines', 'autohint']], +'Udotbelow.sc': ['6ce06ec46c8915a1f7464af646c8f953744e043ebb31829baec585e9eff281d9b82d655b34c5261c7e4c0b0ce098348c439dae31ab55461c51adafd9ef82bbf7', ['checkOutlines', 'autohint']], +'Ugrave': ['c5f44604d0d52ddb44ee6cf873cc4fe91bdd5a9c5b192fc3916a31cd67915a2ffa076fc1aa87b14079e40d3eb87b079f04d2b4b05b2fb69203c591c3da9e952e', ['checkOutlines', 'autohint']], +'Ugrave.sc': ['279f53266c0072ad0715a7e6c043585d4d924e9cd976c3d433e931c04ae723a3b521bc91ba3a4669677ebcd369adcc02367a1655690897030ad0e7bfc5670b8d', ['checkOutlines', 'autohint']], +'Uhoi': ['a05d68366a7f79439af765b78bb480dafbb8e2e320f1979c6a8d58c54a2e760ee605ade344d62593b09ca55be8d24f3b38933a0b62d5ac82eed4da550e799ffd', ['checkOutlines', 'autohint']], +'Uhoi.sc': ['eaec434e26f75c3db207b6e346d135389b1d5536c923ebb73eda14905adfb4560bc83f6102642e7916cca4cd5f6e0ba64ece54e0caf6fc423d37304aaf341364', ['checkOutlines', 'autohint']], +'Uhorn': ['7b4767e6af29a8e1e53a7ad0c3d05b1eca05a42d496d9b3eaec823b44a3206702613b481e4119017305d1b8f3484ec32de02c3892e6dac66255f9d4a6d4f9a74', ['checkOutlines', 'autohint']], +'Uhorn.sc': ['8f2348dc6428f0dd6b4522337e610313cd58b8d6a9b0dabffa31a2f8f60b7329a2c460ad23a4180c8afb62976d94ba7f4ca2428a982bbce633d838639bb2dba6', ['checkOutlines', 'autohint']], +'Uhornacute': ['d053bebe55e9dc301d5444d65bf5521db2e9fe47c324a069f22ffc7b8d5e160f950831b4a358d27ff9a3995ef7ce87286dedb8349ce6503a4f4e5e53a43f98c4', ['checkOutlines', 'autohint']], +'Uhornacute.sc': ['1b03069d43513493e9ef7e221dcf094e3d999530bf4501da2d86753517d6d7110d6d3e62f02399b5933ddb750c0c442988566e6f2e9ee7815dc74e22b0a51ed2', ['checkOutlines', 'autohint']], +'Uhorndotbelow': ['15ca090b61e3886c5cfacaf517578cdf461422e61f412032b0494a9f781de6e276909a672b978bc18b1a0206a1314325fd17d0a03e79a42d95fcb0f24401c4e1', ['checkOutlines', 'autohint']], +'Uhorndotbelow.sc': ['1212c3514c4129e527fcbd148278923995968e53428ae3455adc6f99caf0156593a3fdb965c3ea9aa668d2eba47b9eb915e2860c6d36bced99fa5dc159e77248', ['checkOutlines', 'autohint']], +'Uhorngrave': ['2bce9d5d4e83bf35807b2fee8d85ffdf42ddb58d843e74e198aeb1c11e0b4f78f091b30344306d209d7406accb00b43967562fe343a329613ef99c77985ae975', ['checkOutlines', 'autohint']], +'Uhorngrave.sc': ['f79cda955511c7a53fd53f248d28efebd785b70b15c93a77892c8f123d26ae8f81d88bb0ab52a7c5360b4ebc7e21a95086b7986f0356122f6e79dd13b3621c00', ['checkOutlines', 'autohint']], +'Uhornhoi': ['d0d8fa87aa33b53dbfefd574ab38da8dacb6cd027a63e2cba7f086d54200e4d08632907b5bc5bb972003b6ad7fa7643b96aafc4778f9edd99a07525eb9277737', ['checkOutlines', 'autohint']], +'Uhornhoi.sc': ['6b5de6066111fbfeec42b3f33bba583b395ff051ae7c9bb8e423811ca82d708bc349333e0b927c0e4f14963e2570f343d4527bff1c6c42f194630642f1346f7c', ['checkOutlines', 'autohint']], +'Uhorntilde': ['eca64aa5cd54f4d08b733eaa1d51a5d658e5c149d47fca1cfa985e9fbda16e8b9927f8e8f0f368d023730f48d9ac700de7eebcb0a8511a22ba8bd30537744ac2', ['checkOutlines', 'autohint']], +'Uhorntilde.sc': ['46dc074937e5407908e0c5aa818473eeab44ce5fb924adeca44dde99cefdfcb1329a192dbcc5e52dfcc3566a755681387a9bd7db77dba5af651d821d1c4c9d77', ['checkOutlines', 'autohint']], +'Uhungarumlaut': ['96bfbb4caf52cb89bd4796ba679bd4a8b77b2c7117fb675d3e02c79309e58da8ac38a146d174cbfc497e803994134508ed4011ff45c55c85bd8b6f58c3a01bad', ['checkOutlines', 'autohint']], +'Uhungarumlaut.sc': ['d872c738fcbebbcf7ba6db8a28a570526073026864e6ab2b2704c721def3fc7ad0a585d1b591e30ee4dd90d4189a4bd431b48761c421355b2ee7faece4b99b12', ['checkOutlines', 'autohint']], +'Umacron': ['a703a258c857314b33e64354480e964d9088cb22005c973cc8810de02b59e24d68ffdde533c4b95e230a0ee41a33a83914169e370f639f68e0a6b94d057570c3', ['checkOutlines', 'autohint']], +'Umacron.sc': ['c44eb15abaefcf12476c588ac8a6cb037263f111b17e8dc84e87e97b10a223dc81fa3d78ffbc06d0d542bae6f41ea054ff8a573b585982b4b70cbb2865a326aa', ['checkOutlines', 'autohint']], +'Umacroncyr': ['5c45bf6b2dd15f935a23576c2a68db68c65fb55b8b0c5826b63eaa02322679d65096cc757a2e6444ff37f12fffbfa668718b09fa0a82c9eedcc5d02ce8170b34', ['checkOutlines', 'autohint']], +'Umacroncyr.sc': ['835af55a06861b1a24c5b97617e24a61f50d44d22705bbb876de3e022bc2de3168b26f3df561111dc4d2187248d20b680f2c2755c9fa39c3ac845a97e782ddc6', ['checkOutlines', 'autohint']], +'Uogonek': ['d92c790dcc1e2f12457fa03111500013dd8d5ba36b79db0200104663b8b6fa426c382582af1aad2efcfec3544c0425a8e25ce80bf19956983be8a5231fdb70f9', ['checkOutlines', 'autohint']], +'Uogonek.sc': ['972ea0101d1c5b5628ee5225f5afd60954676c2c51ce58d768d47ddf250d6502fa5a6a52670399844dbd858c5a97483dc1d56bffe0e76e77cba90d31e55ab7c1', ['checkOutlines', 'autohint']], +'Upsilon': ['ec6901dacc35e18d2d8faa979b9e0ab7a021d910de8857e34595f37142b5f73b65a859f5aac89249b526d691f9c553e8548c88784a23cc552a0da3ffd2d66a50', ['checkOutlines', 'autohint']], +'Upsilon.sc': ['79d0dd0c77dd8d0fd1121a501964bef9f21c3daf74377c7f8929b77b13ffc401104b910fa34bab5a29e41915f43c5b6096f8ba55284c99f7b3783a931cc53d6e', ['checkOutlines', 'autohint']], +'Upsilondieresis': ['ab0790638b1e9c0e65462a1bc7eb975c5cb55ad995766b8a925767cdbfbb9b581b8928140b4dcf9b04447692857dd7f9853b6205a8049a330bf5ec3377c09f4f', ['checkOutlines', 'autohint']], +'Upsilondieresis.sc': ['ae3dcdb84562adeeeb97270d7f480bd243fed405246885bc9a1735bff52823ac70a2f1203a82139a4e8db016e77ea698c9d9b1b6115a775adce74e473d4b8788', ['checkOutlines', 'autohint']], +'Upsilontonos': ['3d81abfac81f465b9628ae47d312dde6876f3e07de4c85c8b1ff48143bfd1d21e39a9b42526d9142afe341492052f362b4a075f4ef179e4d0884bc06c7914ad2', ['checkOutlines', 'autohint']], +'Uring': ['783403e914bd34ab793d8cf13175798b19ec5e9b81e04d29c64a3401ca2ab2dcc18b5b1896b54d683436ec59c8c47397412fa82149a1f317a01764c4cbd3a0d2', ['checkOutlines', 'autohint']], +'Uring.sc': ['fa45c31f750efd122047125da12525cf024dbda6ccd2f063e043e0d1ec4e46aa4a46ac6b1a5f91799656a4b58111581237ed6f25a7546731c32a7e97178181c6', ['checkOutlines', 'autohint']], +'Ushort': ['d703f8a63b196d830a0f5f68138b8ae3976951cb076fa914843563a3b358c7e303555518f3532e79c862c7858ecd02c2da5f7b8c9efff9a12ebb216037e5eacc', ['checkOutlines', 'autohint']], +'Ushort.sc': ['954d3e2569260bf79e4b62bc3cbf45755daf4cf28fd5214137bb5baa18b91cae37e7a0f7537217563cf6ef6b9f0a65df52940fd98feafae8e7d6d4a68e778e25', ['checkOutlines', 'autohint']], +'Ustraight': ['ec6901dacc35e18d2d8faa979b9e0ab7a021d910de8857e34595f37142b5f73b65a859f5aac89249b526d691f9c553e8548c88784a23cc552a0da3ffd2d66a50', ['checkOutlines', 'autohint']], +'Ustraight.sc': ['79d0dd0c77dd8d0fd1121a501964bef9f21c3daf74377c7f8929b77b13ffc401104b910fa34bab5a29e41915f43c5b6096f8ba55284c99f7b3783a931cc53d6e', ['checkOutlines', 'autohint']], +'Ustraightstroke': ['18df3b3a2d6cf9519a19541358b6d51b01892149e79062e6fd407fda434de6cd5265b2df5fc6d626500ed86f8bfb2240fcff9c61c89a899eb3750ef11002ecd6', ['checkOutlines', 'autohint']], +'Ustraightstroke.sc': ['eef61ad50f19f5b442386279bcc86f13c9fd26ff41734979ffdf67e4cad04f033f77144d975c09a721f926339dab210f95b1435346b18e586cc24b43820144f4', ['checkOutlines', 'autohint']], +'Utilde': ['6d018e12f5380ef2f0e7806947c1110071a436df28df25098306c36df84a759440c40a4986531db83d1bd3ff67a7a477fcb5ed65e8b316b675f0d51060affb2e', ['checkOutlines', 'autohint']], +'Utilde.sc': ['18367fc85b91e1d2bad612febd6c30f6200dbc2683bb628f98feb44b060352a54d64a3d2269ef7bb64200e92c13eed731a5075e041a0d80e983d52a2022d4c37', ['checkOutlines', 'autohint']], +'V': ['1d91ae5dd43ee2e221d6da4b506b6ca399a5954050a7383a2c00e74bdf13b0efa0fc74d454e808907345c98abf328a3db50354107f3cd314d22acc6990f61d1c', ['checkOutlines', 'autohint']], +'V.sc': ['bda134269f3af9891ef18986b168d2264d3f10faf41c4f757e0199bdee7c498233772ed9732bc6a140aa09b9caa9dfdf0e26779b4e7e6e3ded6d1f1483601920', ['checkOutlines', 'autohint']], +'V.sups': ['153e3ddd84a98291f5e32e03334e15cb91acc0c6ccb4389dc05bc33a7417c94ab54eb1b590bde23faca7b65c4e8a7af09d8e5db99ae48a7aa5a0a0a6c6969bf4', ['checkOutlines', 'autohint']], +'Ve': ['82faab1360c9a2cbf93c4bbcb195c9650b330bf77e2f8842cee35197c9c3a0a47f575ed26a58740e30f1863a8e587369384e1687eecc17742acac0116b1ae4dd', ['checkOutlines', 'autohint']], +'Ve.sc': ['e38080c70b4dceab7071d5c383c58a93340db18266de290ebe007aefe11976ce6cb7e0c437135a87974da36f8de9d5f854358ea197719dda47c39bc9ac5d820e', ['checkOutlines', 'autohint']], +'W': ['2490e852dd803141150456108a7ae0fda7e17b38aef72e072a895ce9364adeaeda69949f1dff2f418168233a698a9be86252eef4a97827e6330a66fcacc01da6', ['checkOutlines', 'autohint']], +'W.sc': ['cc0f10d8f76d2b935deaa0ee9a8cb2aa3a24f674eb6bde5529ec367c940b56912b0f14bc7d234f526324ba7ea47df8e2b08c0f33ec58c13aa8856a173a9e411d', ['checkOutlines', 'autohint']], +'W.sups': ['e092f5b2fda4e3dfd819d3ff910a490efa088963490b56ff09d3ef5c297f4fff88373869da99b6bf018863f25981925c610e2f675d3c7f10901e660a5b8e1c91', ['checkOutlines', 'autohint']], +'Wacute': ['1b89a02d0f5b2ee27bc211a0913c1867b179b85fbf377a19b9b2ed018e073130f29e63cdda44b11d1748dc2db4a46cf0083f80ece97ac56ce7532fb5ecfafbfe', ['checkOutlines', 'autohint']], +'Wacute.sc': ['6bcad5d93ec116becb3c89f55191b005dadee98958dde2c9120569b7ac0d954aee8fc6a6edc93a18b15d79cf54ad982882d50f79e13cc8b15b1e864aae21847b', ['checkOutlines', 'autohint']], +'Wcircumflex': ['70530b091bd843639548dc746a4981b147cd116c3a4b0bcab4b1762d638854647cec686285c464ee1923d1590d2f625e9fbcc3fdc05db848d4a15c8fe1988c2a', ['checkOutlines', 'autohint']], +'Wcircumflex.sc': ['f44be909fd6a50bc9ce9b810ed635d601f212a941f498a8ac1f64ad1dc93bb956d23f4f6bf40c142fa3e73cdc6ce6eefef9ae3548250df05d55c4d767ca13172', ['checkOutlines', 'autohint']], +'Wdieresis': ['c5bfddaf2e28240a69bdbc18c72f6b12eb0de4a2230b7a0e2a183ca1e42292384ce59a69f45f77f65556e721582214ed8b26549ee8c1202a6ecba7d490679c2a', ['checkOutlines', 'autohint']], +'Wdieresis.sc': ['cfd3d0b7cd6cedcf6510e80af1687b6a754d46ead1ab1ae8f30371ee2affd46c7c0392b9736d891ee81c01509736fc5a355b90e63ddcbc821da21a3eb2bebadd', ['checkOutlines', 'autohint']], +'Wgrave': ['f311ccc3e2c39344d5f8c724116e4bf48c1c3eb71a1a4a7e9f14e1f21c5a8c71b57630ec3b931fd36669405bb4ba1bbf832a1017a4484587e5a8e23aa370e0a2', ['checkOutlines', 'autohint']], +'Wgrave.sc': ['771b293511ba181f677a7610a8af10159897c0b7201257774dd2e5d1981d852eee7ecbebb2bb9d9b4735b38da8671e96d4f2f7afcc572337bfcb73e7ec1910fa', ['checkOutlines', 'autohint']], +'X': ['f3928a0ccdfa755052a0030925b5bf8a779196bb1806f860bf5c8f6dfb720db141298ae008ca5de0c90c9f72f6912af630cd42eff055dd668f1654e50afd4064', ['checkOutlines', 'autohint']], +'X.sc': ['9c6fbb205a50f3d446de6f6f35d958af06d732c7ec8a04b7c0580ba71bc0157696c10974006ed62b8f7aa32234f26cabb713e0dc7a95f2a97331c4edbf2789b0', ['checkOutlines', 'autohint']], +'X.sups': ['e8e6142e19364c927560abd139a6d234c0685f085992444e3a55a0241d6811e02864ec9bea101e8cdf1f899e635ff9db9242505363a90f6a579fdb389b81cbcd', ['checkOutlines', 'autohint']], +'Xi': ['aa6c83add3d7c63029277c93d1684faf573bfff72767336ea953f1911a5e99f616f5144a32ea3afc0ae6232172626c139a954359c43a93181b6f9ee479148efb', ['checkOutlines', 'autohint']], +'Xi.sc': ['2cbe74097e456dd5f2c88a71ca54184ab906fceb7fdc28b09afef964cff43dd7f8979d9af17f1eae878d3f3f9303668cfd228f174b47c917fbbde70a2fe79548', ['checkOutlines', 'autohint']], +'Y': ['8aa86ff90099e1252227d2961b78bfc16e7853e74f120acd3e454be7d2877d35258f85894f7094875c1b2f33851f7a6d2efa68944cb789a214e0ca3ee783c4e2', ['checkOutlines', 'autohint']], +'Y.sc': ['82b7c3c46cd858b29a85ac7101fa823e1f23433124eda8e40bbfec47c98e0c1002f43dbd65717d34d45d0a4f3c1823f4c5accad98bd7b74df7774bfb02c76840', ['checkOutlines', 'autohint']], +'Y.sups': ['27e9da6ae5732ee4de83eb574b5e12fad7bb20e06fd5166d9b18175682036d4fba409e23332f71c4573322019d6201a9cb7c48c6229109751130c905261ae8ae', ['checkOutlines', 'autohint']], +'Ya': ['f6e6dbfaa41c90c3a0a5e4f0c3c61f5343166c5f139d9108817e309c5bba7d9800f6eb880be2444a5c4b2beb3bec0f1e9506f201018cd5811886d1dc7027a43e', ['checkOutlines', 'autohint']], +'Ya.sc': ['39a1d2104e8b6db204b2cd416ed6db641fc65b237de681ef62adc43a3e35f5c61d17baa37fa1fe8c2f386abf448bd9283aad645420a1b023370f741cd38bb2a2', ['checkOutlines', 'autohint']], +'Yacute': ['09dd3787e046849371a953b363aac02d18b5ccce3b134de3bbd3d445da0f7ceaf08795f7c910f398e3519a4c8d2f26dcbf5c3dc81aaf84d6545bc4f9e21142b5', ['checkOutlines', 'autohint']], +'Yacute.sc': ['862eb1fd6d803052899e89f2a3243be01a11819c3f4dbaba810e43afa2d038fed881343a8596284b9e93aa92915f29396e79401c85032f97ba7753ad19c17b19', ['checkOutlines', 'autohint']], +'Yat': ['7d4672e51e6624aac5cacebca49687143c8a43aceb174326393bfa2af27038514a8a16b96bf289b04b99e4d787edb0865d53cfe773214e3102abc2df1f9cd33f', ['checkOutlines', 'autohint']], +'Yat.sc': ['cc5e65344fd0f61cc501c94d20800683cecfb6ae622d0770131c3f7d85e73661e65218bbafcce4dc87ed83ca0bb22fcc858116a6327ac207f84389b4d4f9fa7c', ['checkOutlines', 'autohint']], +'Ycircumflex': ['7dfcc6720a8a3526742cc39167a9149521a1bbe4515e6c074e2b1809e47ec4269b427b09cee0607a03150139efa468f47de0206e4e52a061721593c3f515e57c', ['checkOutlines', 'autohint']], +'Ycircumflex.sc': ['7c677666b333cd77f56a4aaf488dd37f519ec65166b9d8370e71ba915901d3e7841c281c220cc24828e4244e935421f78b13c2d9c826b2319135230782c0bcad', ['checkOutlines', 'autohint']], +'Ydieresis': ['81a03ad2d83d11f5bc3ff5e42c438047d55328c3f973b6418a171e6080acd65fb7ee19524c777e0c0d8ce94ecb28aefbe9ba579dbeb527a1cbf18e36e970ac05', ['checkOutlines', 'autohint']], +'Ydieresis.sc': ['646cf096993c236a30ef838d15b75a32565d01b6b70498ab7aa4ec11d11a9fcab68a715413ceebe6a463bfd717e56268d1f70c44b77fc4befca56a1105209bf8', ['checkOutlines', 'autohint']], +'Ydotaccent': ['463092c1d69321e2c614b2912ff7f2065094a8ab8ae27cd9fc2cff416d2c4eee78311ace5aef63b501c5bd01b90cc1a325713f55789edb049fbe8cb53bb0c49f', ['checkOutlines', 'autohint']], +'Ydotaccent.sc': ['a0fed1da61199fdb8602dabe13611d0550a4af6b9742b4c1656fbc5ac97efc2b2bc2471762effdb10685ad3a75bd6fbe40a0e5eb7c97e7f1200bc9688b8c37fe', ['checkOutlines', 'autohint']], +'Ydotbelow': ['324986e623cbea2d84ea7608fe64f8aabeaa9924039e7111333a7911608145db3c825eb14ce4a59856ded96d6709649e6c3aeb01e404374e0fb5d1c97b4a15e9', ['checkOutlines', 'autohint']], +'Ydotbelow.sc': ['cf1ad6d17835a4f0ace96d7d1768ee8b8461724a1fa060a7caf407739e331c3629939482965030ed05f5d8cad6dd27e7f069fc202c25e316e8a922829a67d570', ['checkOutlines', 'autohint']], +'Yeru': ['53534b5e7f0872bd51a6b3641c1bb8d21c3ecd89762af0fa38fb608c7afc26c0f8ea259f0416c1afb72a269df0ed91c2c4b873394dd77087ce7413bf485198d9', ['checkOutlines', 'autohint']], +'Yeru.sc': ['d908e9ed1713b639d2bdb56e6b842e7c93913a3977a4f70cddbf36cd9ba2db131135a3ffc2e98b9eb90a37602e7aec05c8276fff581812c0beb1731b7d77a54d', ['checkOutlines', 'autohint']], +'Ygrave': ['e99a9f890a5f91b13df39fd160ec222268e3d88c234c3f725cb1d975a53c98ccd4714bd2b89dc168336297a8b4805f5959ac16b513a6309dd343423335706ff1', ['checkOutlines', 'autohint']], +'Ygrave.sc': ['c848e0457d124f0b164871f49b11371c4bc024c7306861af2f02524c18a20a3ac7f4ac8715fe0b335fdf2bc54a75036a9df68f62749cff789d3833177f71bf65', ['checkOutlines', 'autohint']], +'Yhoi': ['565a5b6e64de218980d40c6f9fa725dfe3d7690613a484228d54f40cade27f9ee043f98eb6e2f989a49f09ad4f327b9becf06e3f43ec5c7752665be1e46e5a9e', ['checkOutlines', 'autohint']], +'Yhoi.sc': ['d57859f2e801bd0474c27f1c87e318793cfc67473c7705f012b715e7ac1b037dcff0a839b63a2517fbf29f748388bb13b2de4ca25a8923cf95f9cb6c29314608', ['checkOutlines', 'autohint']], +'Yi': ['f5805c2ee31e6455a2162557cacabfd2734a61b8ccb459c8ec84f8150fe890be72fc0ed5a39314da3b1817be1358af8cb50d9a52cd94d15c4cadbee0f894fc4a', ['checkOutlines', 'autohint']], +'Yi.sc': ['df5892af28170a4d34366cd2e18b9e952c31e829aef8e103e443396c7b19f3b0a1a0f086889196e1f9f93e92e67642b996df92c39d25b850053390d49b416350', ['checkOutlines', 'autohint']], +'Ytilde': ['2b98a30f27cccf2dd78bcaca4ef1e6b5996420a123e5acb62429a34aa88937d5a334452a427f4bfba9f9748576742178766a4b9cf6777df154c53bd29218ab70', ['checkOutlines', 'autohint']], +'Ytilde.sc': ['c4d48ee036af0505064856ac1a3acf5954d875c3207c5ffe05616342095484c2ee3c2dd57684e58edf4a9356f31b0f1e09f051615c3160d5c3bbfc0d2e7619ff', ['checkOutlines', 'autohint']], +'Yu': ['63fcdba8a02b55065f08cd462bbf11e68806faf8a5c452804d2e7ec5c9f13a4790a088436e165589f10601689a25dea1d649cfd89ce826de8f264e5f77bbc8c9', ['checkOutlines', 'autohint']], +'Yu.sc': ['ad67160635368e9c2601326f6ef3323b16bfaacc2cca27c5b415ab7c539c9d461e2ba4ade7fbf68cf529fa77f3451612d5af6b932166d81e9e354562dd762960', ['checkOutlines', 'autohint']], +'Z': ['36d38e67d48eb2fae3bcdce0484c5c64f59bbfae67b26e11e3c4b3da5e35ccea1944a5954c78b539a070aa6aecb07b2a10885169ba166054d339d836e191c04e', ['checkOutlines', 'autohint']], +'Z.sc': ['66888fa3109b37acd21438bc02c9a7821c2b9905ce3fe3f3bc62d70b593d6d9b38f66885b6d07c5ac067338376834d81f01593cb5579b6a792758260071a879b', ['checkOutlines', 'autohint']], +'Z.sups': ['w369l17427l346427l352544l309544l285427l324462l46462l78427l339817l339845l29845l24728l66728l91845l51810l310810l278845l17455', ['checkOutlines', 'autohint']], +'Zacute': ['48192c17d4e240e89dab28540a269f5eecaa9777c16317706cb47ac5bf2bb793fe4ea92a9d2808baeead71d8caa368b884981bd7bd5c84909f265af3df575e3d', ['checkOutlines', 'autohint']], +'Zacute.sc': ['dd18d7e21fd026d8e12c8df4257280b262c3f4f3d6b3d82afd46bcbf4ddbdc50ef0286c093b01e69fd2adeba0af855fe6c023ced19802afbabc5478b51a9a05b', ['checkOutlines', 'autohint']], +'Zcaron': ['0fd8ceb11c5ed69b0abf15573f6ef0aed190657b02bd73d344c7f1237a80e40ccad8d2bdc0e0bc0220213edfa2f105f292a1c2e11781b5724f1268a06e1eed7d', ['checkOutlines', 'autohint']], +'Zcaron.sc': ['a0716205cbde48f726e9df33a4d39b1047c7106dead089cdfdf354883f20a2adb4c09270384b2f65eee2df56430d3432e08f3745a6e5b4fb392abaf2a70c78d9', ['checkOutlines', 'autohint']], +'Zdotaccent': ['ec6ceb21a6684326591d28e840ab3fa4b37cc609d52b5bb66e1da63aa535903faa7318e7560a7c57630eaca8c9dae17bf4577e2f07c795cc589b0424de9846b1', ['checkOutlines', 'autohint']], +'Zdotaccent.sc': ['bf460127bf231d9d87577180f852e2a2eebfa6d6d906f795c927b459e440e7e844e00ce5644b66df5f22aa2df2916b83809845c610e00af2464f984608af4832', ['checkOutlines', 'autohint']], +'Zdotbelow': ['0a279c541804704e1759c6f4ccfbf6ed3923f88d6156696f458d9c611b62367ebce8e1234368fd74310a07b15e7da439d734f54353dc7c5c4d0194c0a3af4af0', ['checkOutlines', 'autohint']], +'Zdotbelow.sc': ['f98d2348777ebfda7ae890b0daae052eab32616cf68c380ff6a1ce790afcfc3cb10c878b93197500b71383e6d121b9c553c6f4e4a3cb8c73ec8f6a778d5acd5c', ['checkOutlines', 'autohint']], +'Ze': ['42b85ced5bd89058730291ab9fba82bde42e34f096ee747a82f8cad06ed15a0ac8d5e736ee6dcad175a1c166192fa1a2801013eea09fea5c3b4b96ec7d3859fb', ['checkOutlines', 'autohint']], +'Ze.sc': ['3b5fb12fcd33e78074e09d00a1b0956c69d3bb7a17853c48c833160da906d504e19b21b6293822a47fbb88b62b23a55582c4b4994a346745de401df81a75d11e', ['checkOutlines', 'autohint']], +'Zedescender': ['130f0937750f96ece22b960bcc0d698703d2d3a1e4d650ec9bab75c7a0980f9888da156cb4e281290cf8a347aedd1f5ada42977468b3905b06261527e9b242dc', ['checkOutlines', 'autohint']], +'Zedescender.sc': ['97f8ff1202f9f85829fd2309c609c29e2e412e9068bab37462c19124609cdb7c02fcd185c53f5e4f04336989e76f7a82862fbdd667c88402e0ce49b439390dfe', ['checkOutlines', 'autohint']], +'Zeta': ['9ee29c95b05809b4a27cbb6747b02c7667201f719a0e45f5e81cbdc27ef443fa8abb61c81a3b864a5c9395a37563c80dcd82cbcd4b8936cf6a03f7e92b7afda0', ['checkOutlines', 'autohint']], +'Zeta.sc': ['84f0a6ab777d552c7b1c52c23bbcb4e05015799a3d7be751e23b189d65159eccb65da595137e0fe0432ed37607443dc635a67d195620efe7281154e6f74ba147', ['checkOutlines', 'autohint']], +'Zhe': ['7ac93581b49cab0f6a517e07fa74d016c85dfaf8e42cd9e1ea98f9937c5e33d8c77af00a0dd37f3ba3996917bb7d59e4330893142bda4773f56fa1aab355e12e', ['checkOutlines', 'autohint']], +'Zhe.sc': ['65ebd42376eb0c9e2ce1e7e1539deaae3a700c5dabc3b161141b2903d096285b0a8dc5ffd9536afbf39d480752f2624f4b0df785deb44814e06b18b2207fbbb2', ['checkOutlines', 'autohint']], +'Zhebreve': ['5bb78c6c03adf79e340239e58e58b5d84e38305af7872c90c4151d554d530f7e1d518bd74af1b342c30049158b1741531cfee3598ecb522ad6e9c42a624af0fe', ['checkOutlines', 'autohint']], +'Zhebreve.sc': ['4166734166f6df519ddb2f543d9f8c90d7c95c2eeda4da8139137860a5d6750c38c0842619f3e0b07142099cc4daaed7cb0244568542c651aa61cfe65933d890', ['checkOutlines', 'autohint']], +'Zhedescender': ['51d39fae92c85b351250d71e1db3e90b2c2adf36f7963cf155c9382f584f0b257d4f9cac494b06715141256b1bf76f8695593bf895523dc5470826601708c801', ['checkOutlines', 'autohint']], +'Zhedescender.sc': ['b452c8ab15792d7ad75bbf3d7db978e13a0722e50469d729a513e3a79d8f5bbaff719989aeb7b2caf36af384b23cce9819f26c7f96948a71925544c652ae12a5', ['checkOutlines', 'autohint']], +'a': ['fa6f1111b69b6b1455bfad6139a290e1b23b116d3bfed2a8e4cc37d2f4a7602dbf9d27a31c9049345b3a79ac2822130f60490377f4610717abb477b51289e771', ['checkOutlines', 'autohint']], +'a.sups': ['84354e584feb3231143d0dd930ed4936264770e2e5e8ce55e29127e38f266bbc65dc585293a0c8a4ec934c7472268481f8f3f5c4a2f0fd0a91dbab30b30e180d', ['checkOutlines', 'autohint']], +'aacute': ['2b5a575bf7ed4b4d52022be1109ab23a68662c49c3061bdc615095c064bfc1edc5ab9a56681081abcfb84c76f4efb0a6f1ae259292d5c0883e719edf0d67b5fb', ['checkOutlines', 'autohint']], +'abreve': ['00d935f6a8eecd22fb655db0346ac6855c9ad14d72326608a94b7d121583f9fa188fdc3019a8ca5c503fe19b4d79fb4736dc3af64a19fe67230e42be949bed73', ['checkOutlines', 'autohint']], +'abreveacute': ['3d838955ddbe5df8fb60603c7bf4080e3eb832c882022c9da78a7ab832d635a15bfef9ba9a2f07db9268680ff123db3b6491525d503ca9bf14cd8a12c442d2f4', ['checkOutlines', 'autohint']], +'abrevecyr': ['ad0b2c2a11f764bba547e806ba159b002b13e0d736cce5f9031265ed9da9a3662d2d489bb0b29fb0a428395636ae0a3baeb2880094ed9e7077cb873e714e1ba1', ['checkOutlines', 'autohint']], +'abrevedotbelow': ['8b51a63d21fe7c07a0f3bcc2cf6b021eadfeeaf891fa9869a88fcd394f3605a8598ed43ebf349c5130be50bd3a8d8b0b7f4078e96ffa40965421259a6eea617e', ['checkOutlines', 'autohint']], +'abrevegrave': ['ed3ed5a9cfa79eee58e47f90b7bf6cbc68eab282be38ed77f85f021efdb6acf609d445d41371c260d003f6f2b6accde226424d45c48511f7495c819aa9264875', ['checkOutlines', 'autohint']], +'abrevehoi': ['1ec908d0e3ee8b5618039f0099e83eaafdca21bc06d67a8d915dd45b8403180e787c62fdc456c5816e2a0ef8db46c05f03ddc8da8e6295a255c6ce5c5fe7604b', ['checkOutlines', 'autohint']], +'abrevetilde': ['4234637108dc37211fef74e21f4fb0027fe4e2cdbf82564435a5a3c98cee3566ab6ab915e3b0a144cda3a254161eabf97acf9f40ee2fa7dc17817d1548baa739', ['checkOutlines', 'autohint']], +'acaron': ['2843fa47d2e17de466570831b1b1e275ebd9235f5e5a320b573d6b6eecb222b3147934faae7ec8b2cc3a5e75e4d7159e92fe0c4ff9bb450f198797e38958f32c', ['checkOutlines', 'autohint']], +'acircumflex': ['e812ab295c640be41cca2b629da7c78d302c9d2c403d1ef256b96727b9456fdaa783395b5b300ea3f049f666c31290f03050f44ab783779abb8a8519551d1985', ['checkOutlines', 'autohint']], +'acircumflexacute': ['e79cce580dc9de1347eaf11450d7a8f0951ebb35aab8c832c4dcf5eb0dd02f13e3fc9aa13dc2da978a08a4d0c0c6ee297abe8473f793b73e9b77265e508305be', ['checkOutlines', 'autohint']], +'acircumflexdotbelow': ['407ff8709d5666915a61ce06dc63b761f1508deb7d3ec6d5cf604095a93a7a695d1d7275667af03c998daf52b85aa6389f818cd4961bca62e0f9a4b6ffda44f0', ['checkOutlines', 'autohint']], +'acircumflexgrave': ['0cf0abfeb4d813bce183afea46af88ff5765439c6c803a94b6e4ec3e47bf4b321c829dfd6282f9461e8dbf536c61d7b54bdd7c0b855eb38e01e972c128b3e43d', ['checkOutlines', 'autohint']], +'acircumflexhoi': ['263de8f546c9ffef6b04d6e7b99ccd1281cca138f748314e7e6636e413ccca1d88825e0dea9ace80436c79a2b2ccc1b7b4ce4b4bac86d231e7d47e9c46d2268e', ['checkOutlines', 'autohint']], +'acircumflextilde': ['aada318313587f1110f9333185d5d5990973ae279d83534f4fc4f74c9315551f6254da998762147d3d878c51b021e6be25d7dad7e6ecfa03e7393e8a24aab28a', ['checkOutlines', 'autohint']], +'acute': ['w400base:acutecmb10011990w400c-59576l-33557859347628c88665116691122706c122720122746103758c847586675849748c30717-2669-31623', ['checkOutlines', 'autohint']], +'acutecmb': ['w0c-59576l-33557859347628c88665116691122706c122720122746103758c847586675849748c30717-2669-31623', ['checkOutlines', 'autohint']], +'acutecmb.cap': ['w0c-67746l-49721-774335766c77789115810127826c127844127864110878c898787287855868c27840-5810-36779', ['checkOutlines', 'autohint']], +'acutemod': ['w181base:acutecmb1001590w181c-59576l-33557859347628c88665116691122706c122720122746103758c847586675849748c30717-2669-31623', ['checkOutlines', 'autohint']], +'acyr': ['ba5722e15f4c03dbc20c419390d0a4482cc557fd9c40ae1dfbf61f17cf7a5bb9094039f7a3dd8e06e740099532ae4ce0a90508e1ec57b6e964af7cb72b076860', ['checkOutlines', 'autohint']], +'adieresis': ['03f51bc3c08e48d594f9943eb7281ad110d88f1998e7764bf009005efced53471eda0ea8df1de439e589c312e452f13b2ecc10916298863b3bef4815e1f6643f', ['checkOutlines', 'autohint']], +'adotbelow': ['a80f9d5d8f0a776995863f6f01468ac2d6ad920382226a7da754b49b53eaeac8b40f80438f816c23ab548f309be83da13f2a343d6051f521139141543a8589b2', ['checkOutlines', 'autohint']], +'ae': ['37d1bf13c0680ca11135676a626abaf873643922143a4d025e4bca144179460f8fc783da2df9a5dc858ccfdde99ef8d7d8fe7e72b672a0590cdb5f8105efebe4', ['checkOutlines', 'autohint']], +'agrave': ['1c3907b41a3fd5e5ba994608453615190749b95fcb6848094745613d3e6eb7155a33fbfb0807a10597ff6b1b156f77c35b3d71e1b667e14b020b3851898ed403', ['checkOutlines', 'autohint']], +'ahoi': ['26227086b8fa8f1ac6fcbc7b00831b6d926639fad0861bf2d58e4c4a19768ac313268714e34b93c9d0b664b522b8cbd1bb72c130910d8b09661da79782f78c15', ['checkOutlines', 'autohint']], +'aie': ['5cfbe96d94df030691bda69e162a636ab30dbf71a8ae81ad44d80210042e515d95d6e16c775ce16c53bdbc94ce067a4526919e569f74e931bf4c8ac8bf993bbf', ['checkOutlines', 'autohint']], +'alpha': ['a8381599dce0fcc70207be7fea19cce30923f862f4655b5108166b4a7aef2ec547eac0c2b2716daccb9f3e457625b7123898e36d6019b6170b66d4e877b13c03', ['checkOutlines', 'autohint']], +'alphalatin': ['26ed94c02dee2fdf613f76c298e563099e71622d60c74590304c64364a42a13e79c14420e8d0025643c2e2f2f59e6c6ef3eee469eed26ef79604c80716f0c2d2', ['checkOutlines', 'autohint']], +'alphatonos': ['26008cb71d7f6a551885111b58807b1ef6a1224c4027eb9a603da2d949f074831d22385aa6b43ff6730df9835818974496348a31fa33fb849d7f87ef411c0d97', ['checkOutlines', 'autohint']], +'amacron': ['7dcc039d35b934aa99d6f3931c48f684b21d524fd915eb0ca0c4865e07cc837e7af0aa55f2fb6ebab08d3696ab11c4750a0edb484b84691665d56478ec206040', ['checkOutlines', 'autohint']], +'ampersand': ['1961f8327891dbfdee3c3d7914eaa9c33e5053cfeea1a56d2c152836cf294303064e16517f982ab42cba0e588bbe24830890b90b07ced1cdcfd76d835ed26d15', ['checkOutlines', 'autohint']], +'ampersand.sc': ['493b988c82a671e7d15d2392dcf019000fe3a503de12871482ffcf5b31c6d2c5047d74725173fc93c881c84c4b1e5e02b5d145fd5554e398067ba0cf2234d267', ['checkOutlines', 'autohint']], +'anoteleia': ['w300base:period10010335w300c150-13190-1322119c2215822198190130c1501301101307998c79587919110-13', ['checkOutlines', 'autohint']], +'anoteleia.cap': ['w300base:period10010540w300c150-13190-1322119c2215822198190130c1501301101307998c79587919110-13', ['checkOutlines', 'autohint']], +'aogonek': ['5e777cfba5d960c7808e4e2799ac063ca400bbabc3499a3bad2459c1f4b12f405c7cc9e7e918e78d587cd34326ac2b7fb78cd3565062ae95d06d2202db40d05f', ['checkOutlines', 'autohint']], +'approxequal': ['dbe03fad23a133cb1c6de590a323b879078b9575d57cd6db1a5d700757666d82ce25cca3bd95b65ae6e1c3c6e99ae806d3b3e29bcb67ebdac6743a6913be9a6d', ['checkOutlines', 'autohint']], +'aring': ['49006d6a182090f7515e97707bdd0ef83c9850609e4e81984cb2634871bf7073bfec06fb2b0291c85ec70de4eb32427b675d2188e25711eeadfea2f9acca0c7c', ['checkOutlines', 'autohint']], +'arrowdown': ['w660l294600l294431l31242l33351l62312l37286l319-21l341-21l623286l598312l32751l34842l366431l366600', ['checkOutlines', 'autohint']], +'arrowdownleft': ['w660l524535l404415l143127l164118l156495l120495l10378l11963l53580l535116l159123l167102l455364l575483', ['checkOutlines', 'autohint']], +'arrowdownright': ['w660l85483l205364l493102l501123l125116l12580l54163l55778l540495l504495l496118l517127l256415l136535', ['checkOutlines', 'autohint']], +'arrowleft': ['w660l640326l471326l82307l91286l352557l326583l20301l20279l326-4l35222l91293l82272l471254l640254', ['checkOutlines', 'autohint']], +'arrowright': ['w660l20254l189254l578272l569293l30822l334-4l640279l640301l334583l308557l569286l578307l189326l20326', ['checkOutlines', 'autohint']], +'arrowup': ['w660l366-21l366149l348537l327528l598268l623293l341600l319600l37293l62268l333528l312537l294149l294-21', ['checkOutlines', 'autohint']], +'arrowupleft': ['w660l57596l455216l167477l159456l535464l535499l119517l103501l12085l15685l164461l143452l404164l52445', ['checkOutlines', 'autohint']], +'arrowupright': ['w660l13645l256164l517452l496461l50485l54085l557501l541517l125499l125464l501456l493477l205216l8596', ['checkOutlines', 'autohint']], +'asciicircum': ['w531l88242l133208l284448l250448l401208l446242l299481l235481', ['checkOutlines', 'autohint']], +'asciitilde': ['afd68573f1422b5670e6ea969c9e5d60a868e178209d990f3f07fe7b688bc0719a193e74fd34a011291e94421b0cff71f335800e03edcf3097ae814cb51f59b9', ['checkOutlines', 'autohint']], +'asterisk': ['2a4d5a42270482c20e49ba5369e6ad82d3840768307431125bb6140555115e5e01e3c4908083563c0e5ca21675df9b6716907dc517c5ea4f1dc1014f15dad92c', ['checkOutlines', 'autohint']], +'at': ['25245fe8b7a2ce2d5c762431cf9683ad7ab42a3496fd8b86ab703e0eade927bafd7de9356ca1ea77045bd1446bc2590fcd0c8acebceeeaddf04d971932d09c0a', ['checkOutlines', 'autohint']], +'at.cap': ['a201e81e22295a1379087155bdfb2ecfcca8cc6bf8ef004d35593e95c233cc71b1e34bf91198da80eced51e80f8912ee80b07253d3d664d101fba27547c9e917', ['checkOutlines', 'autohint']], +'atilde': ['eb61e8ae06aa4f15c9fe83fa89eab01e19526991dd835c2002f82353f71c99bb3b02510d8802f2b3b8400d3ba05caf8ab9499927680eba757382f127b5a1e18e', ['checkOutlines', 'autohint']], +'b': ['ef806aef8451f2ca55d403cf1994f2250e45257c28b12f12dab837bd16a30cfaf6b7b6e9a7b08299cee0ee425e3135139a7b8b6e5855f04ed6982d309f04f18e', ['checkOutlines', 'autohint']], +'b.sups': ['16bacdf9f74b74d98e37e77e57119e9bdd975df400a654e86947a5c136f8d52e3844885f0f89876b3a62c1bd7eef923ce363bb90b417ae67c255ad5a9850e916', ['checkOutlines', 'autohint']], +'backslash': ['w330l328-160l61710l2710l269-160', ['checkOutlines', 'autohint']], +'bar': ['w291l116-250l175-250l175750l116750', ['checkOutlines', 'autohint']], +'be': ['34a40e8fbfccbccb605560618d902a70e220baacd3495df7e04e40ecca9a3fc98d1744769dded469d3bcb20ca78aaa6efc9713a29f4bf25c472230593810a270', ['checkOutlines', 'autohint']], +'be.srb': ['726a6eb433c7e0000052db4f1f3afff631cc6c82977f214b6ff99f1e77606b3d3614a8f37190d997c144f41ec1fffedbc73d81a3a8e0fda2b3a0508b08a18508', ['checkOutlines', 'autohint']], +'beta': ['b90158222971c132dbc1d5bbaee46ede74ed16ac45971a6ee131c110b14f90cb456cd42aa7b6ced0952728169f39c7a48c27d8a6e1da58e76dfe1dfb79d28cf3', ['checkOutlines', 'autohint']], +'bitcoin': ['39340c468d8947360cc3f40c31c1e02480dcf9e565355ad8a508de0ce96f6fabc7116e912ac934cfe24c45f4bbc28abc7cf38a5fa7f3bc8073f2af42f2dc7753', ['checkOutlines', 'autohint']], +'braceleft': ['390d0e121aeb8dea55cbedf8ba0beb36eb5b88651e2b9d8fb0d1c7317a0758d937d15ab2a1a542647e1442961e0a833211983d02f51ce319968df1fefea5f52e', ['checkOutlines', 'autohint']], +'braceleft.cap': ['8a205a611ced2b31fb176dd81a0de2b57c440e85545232df438cfe207393be1877964acbeef271384a0ff8a64cdc006562589a69f7ecbe64fc6f54dadb6656cc', ['checkOutlines', 'autohint']], +'braceleft.sc': ['0689d1beeca6abbae769f87dde75ac3e8924147d6c5bae6335ae0a5ee111538522643b7290ce058d37882e44cccf84222057fd7d3e4c74633a3dd802e817b2c4', ['checkOutlines', 'autohint']], +'braceright': ['6c737eee2c6d03e2378f9d36d7132b38bd1cdaecf2eacb1157b19772c0158702f937dba772da113bcc5b41b0737cf3cd2c22c6a9c9bfeec480a0ba6ac84b88d2', ['checkOutlines', 'autohint']], +'braceright.cap': ['60fae96d64d558505ba7b8d2dfe790dbe707ddd081043cea4078c6c8dc5a71dc658f804b3e64702bacf7657763245e6170b729b8e6517daf6fa18de2985998fa', ['checkOutlines', 'autohint']], +'braceright.sc': ['0553e71831d473b03e4287e0e12793f40f70fef46df23e14780b147a11c0e697f552d7052e80f31db5c86d18fed1cf80cc873f10257fe2b8ecf5188eec6372ff', ['checkOutlines', 'autohint']], +'bracketleft': ['e963a52d378cdd244656068dcb155ab43abb9abd5183851bded800bc5598e410e0dcc74bba5f1a01a03112c3d9d34b7450132bddf6a05484c480d564bb8dd276', ['checkOutlines', 'autohint']], +'bracketleft.cap': ['69163c6c44dd2cf348746c65bc63e65b125e40ae6af9b9e1252e55a2afe2d1c63fb3bc432481fd857cb78d209e4db3178d461610a186aa644448cf6d7c74448d', ['checkOutlines', 'autohint']], +'bracketleft.dnom': ['14a11eb521655cceb50bae605c9c1b649d109fd1a64bfff911a1ccd743425d188bb0680267ca09353c8e20cd2e05c9ab6c2fdda13c239e7c0f852a8ff78ec5d0', ['checkOutlines', 'autohint']], +'bracketleft.numr': ['c8939acc325c31913dfc81caccc39ec3555ced66edd89bcc7e3486737e94b768fcc12a470180be1afffcfa72e74d128e40e4a1d91e9a6f5a1d9043afb53ee53e', ['checkOutlines', 'autohint']], +'bracketleft.sc': ['b6455e48c64e437264f83d131d66ed79621c6c0b587d386cb37d62eeab44e55bde78d2078334c572be69d2a308f4ecca3e0b5b834b19757a595bfd1febbcb774', ['checkOutlines', 'autohint']], +'bracketleft.subs': ['8661a46244cf31be0b360cfca4c57a3256b09337cbed72b6155b6ffa6ba627c0c7c88c244c1de3a9374498b02b1ad7dfba49158f6ec65d6621c5a3a04e39a906', ['checkOutlines', 'autohint']], +'bracketleft.sups': ['w256l86328l145328l145875l86875l116328l216328l216361l130371l116371l116832l130832l216842l216875l116875', ['checkOutlines', 'autohint']], +'bracketright': ['0d58831e06e52dda5e8e38feb823fa56cabd43c600adaff3f0ee93061655b44b2cf8c98fe0d6d56e41c89d0d1e6b2f00a1d279bf481c4bf974487acc4ebb2e1c', ['checkOutlines', 'autohint']], +'bracketright.cap': ['81c32cdbc65274c715171319aa6775c7399970939696af629a2b25aa4be5889f5eb6e001363fd9d8419ef0407393f048a15a6f9c5a0260a7c25aa681223be1a7', ['checkOutlines', 'autohint']], +'bracketright.dnom': ['a9d5829c6876d4328ae867467f1bcb650825e0ea2e9fbe8d5dacdefb2864db4545010dc5a9c9ee956b4e2432b35a70cab3248efc7df80c209921ecd61b618c10', ['checkOutlines', 'autohint']], +'bracketright.numr': ['526af999976bfffa9c3064570d6ea537e01a5f5a1f25783d207a6ab0232621a7699a6ffaba474e3ed3105718e69ed30650a0425511ef46aa026e7ba5360ce4a0', ['checkOutlines', 'autohint']], +'bracketright.sc': ['41f72e563c7c58dde3f1b07e478fa3e4e9cab46685982221dccd96effd8edba87e56e4e7f5dbcd630dd6b69bff352234973bcce6f5d539a4621114178ef48124', ['checkOutlines', 'autohint']], +'bracketright.subs': ['c08a1cef4849b9c53bb6601a2af3e71731078e9d0ac4d48d781b1edf1b6bf63723bca33c2d213602dd68c4122d1bc6fb98a02eceda8e4575658c8ce79627fc79', ['checkOutlines', 'autohint']], +'bracketright.sups': ['w256l40328l140328l140371l126371l40361l110328l169328l169875l110875l126832l140832l140875l40875l40842', ['checkOutlines', 'autohint']], +'breve': ['w400base:brevecmb10012000w400c057592575142646c151723l12173410168266641c0641-66641-101682c-121734l-151723-142646-92575', ['checkOutlines', 'autohint']], +'breveacute': ['c85a973b37380cf388039154781dc9edcaad957b33191feb234d5504ceae0ff7365c81963ac27f92248d2c13bec18978fc6206e581f52cca005ad9de59780cf8', ['checkOutlines', 'autohint']], +'breveacute.cap': ['17012692bdd74607efd24fb6239518fa58492db26bc5aeb1cfff02479c28444b09df294874a0ccaf433d7020583187ca377567b4b65669d989d2485f07a44bdc', ['checkOutlines', 'autohint']], +'brevebelowcmb': ['w0base:brevecmb10010-802w0c057592575142646c151723l12173410168266641c0641-66641-101682c-121734l-151723-142646-92575', ['checkOutlines', 'autohint']], +'brevecmb': ['w0c057592575142646c151723l12173410168266641c0641-66641-101682c-121734l-151723-142646-92575', ['checkOutlines', 'autohint']], +'brevecmb.cap': ['w0l-144859-135799-90732c073290732135799c144859l1138709682560793c0793-59793-98825c-113870', ['checkOutlines', 'autohint']], +'brevecmb.cyr': ['894534d79b73f7519e89ddfe9038673b3b665d8c150ec6f4748fff5779326ebf751cc7bcb2f5277ea67cff28493ed14bb13be61c4d3c8e91abd55e7eaf12d102', ['checkOutlines', 'autohint']], +'brevecmb.cyrcap': ['3b6039405c833281b05a728d81dec78e0856f7c8bf9a18287a11ac0dbce413c349113d2cfeb2d93f88097f384d6d4a7028656f6a3b2ac58449bbfbe270ff0f24', ['checkOutlines', 'autohint']], +'brevegrave': ['67f4ac03e5ddcff7b3fc09c7159fde98f3a6897e06f1a49a08949772479f6134aa73e727756c68d0ca9f8d284b606a1bba22d68c8f50303ff61c98fd69d2431e', ['checkOutlines', 'autohint']], +'brevegrave.cap': ['f81825e64b54274c435e955cf2edd46ac452bdb784c4da364976a0cb55d106f8d8acc96a941ae309925d28638d704449f16b28c252e26e4004baf988aa29300b', ['checkOutlines', 'autohint']], +'brevehoi': ['77ab67c29976ddb0df3f883560dee8589359e7ab0a5ba7a98502f4b9819b2ec510a2a8061e6274ec7509c3935a1949226bcacb6b9900759a313ad1f799dd5412', ['checkOutlines', 'autohint']], +'brevehoi.cap': ['b6d54ba5c1c66be548673ef9f8759a24e3f188e277e5b4a2279eccf81fd93bee811dcb60a80b58be72bf82ec1698b4526bea76db2c70825fdbd23fc78ad24af9', ['checkOutlines', 'autohint']], +'brevetilde': ['81a02259392a4814069b32c56d46d783cde72c83e137f4a9ded0162465392dfa1ffbd678c5de190851ec9f13485f8e578ae8a1d60c66ccbc5ddc1277eded0b3d', ['checkOutlines', 'autohint']], +'brevetilde.cap': ['e4a99c2415b3a2fdb2c712b8ce9f079a96186b0557db53aa130b8a4bf95d00db68228da98617399cb914b1662a9203f0d266e3c7d6d946987868b6c8a6e1ba10', ['checkOutlines', 'autohint']], +'brokenbar': ['w291l116-250l175-250l175200l116200l175320l175750l116750l116320', ['checkOutlines', 'autohint']], +'bullet': ['w305c153217212217264263c264330264396212442c1534429444242396c423304226394217', ['checkOutlines', 'autohint']], +'bulletoperator': ['w300base:period10010274w300c150-13190-1322119c2215822198190130c1501301101307998c79587919110-13', ['checkOutlines', 'autohint']], +'c': ['81acfd7b46859aedc969a47d787ace898491bfac1227f45859a9f4a4f5b162fbbc28ff269a80073a9fbf136a45a12f44c80d3151d69b16170ee4f43a8614e90e', ['checkOutlines', 'autohint']], +'c.sups': ['fbcf06954abc8490299579b62c939c76480a70d41b14626ce9088c3aab6cca4056175eef640a6e3da928ae1508045915b5521e50b3f27d2cbf8ca9d161f9ad86', ['checkOutlines', 'autohint']], +'cacute': ['924b0955d11a1fc9061d11d4ab7f15645c1c08827e99e36acfa9a8f9207d120995cc9a7868bd6cc8fe19517acf9d3a6e03ad67db0ffc35f0eec690ff3bd41869', ['checkOutlines', 'autohint']], +'caron': ['w400base:caroncmb10012000w400l-115739l-139719l-37571l37571l139719l115739l-42596l42596', ['checkOutlines', 'autohint']], +'caron.alt': ['w20c497403474019736c3727l0518l32518l515726761985674c857038572575740', ['checkOutlines', 'autohint']], +'caroncmb': ['w0l-115739l-139719l-37571l37571l139719l115739l-42596l42596', ['checkOutlines', 'autohint']], +'caroncmb.cap': ['w0l-115869l-139848l-37730l37730l139848l115869l-42753l42753', ['checkOutlines', 'autohint']], +'ccaron': ['ba2f25a28a27ba2ebca2b66e50545315c54c441e763cf0e8209375788c65b400acbd7dac9120cc36ce3656fe5f6401f13f5542c0e6b8c1a6741fa2afb9320e59', ['checkOutlines', 'autohint']], +'ccedilla': ['aa0d508d8cd96c84d2918536cd877a48c947f1f89b7876a13b9f6192e4e12c6e6ab2201304e3d582fd2c531d9c9412ceebcdabe8c0f3ed96ed050e69870f9f00', ['checkOutlines', 'autohint']], +'ccircumflex': ['3bafbb5a6a16df7ceb67d1658f0c6069aa220d67cb7b03b9c70d8f3f5b3e0378af92558d45eeed227b8e930f91fccbd08dd362c7e453a36787c9b3d50d2e2986', ['checkOutlines', 'autohint']], +'cdotaccent': ['c56d6b23f6098a978f3ec2f9cfeb96c42a21f53c6d654db832e06a193558020ba95a3d67eca8e6eea6bd09443c65fff1b01c996f9f3b9fda5939d6feffb6fad6', ['checkOutlines', 'autohint']], +'cedi': ['aa5bdec36b402821c0e834f76e2838cf4d209db6480afcbc78651277ffc896c009e624c6803d3819721cd313f113b12595e20fcf28f03497a7d9a1c9d7361e5f', ['checkOutlines', 'autohint']], +'cedilla': ['855111afc2214d623c261cf1f6bfadd4c53a9b1e7f007e1682fc965ff04b1d5e9ce302add3941111ac644db035f24020728da28eeb89ec5f98823da8a36c8fba', ['checkOutlines', 'autohint']], +'cedillacmb': ['86dafaed548ce721a27dcd24dc44ca53219eed67c50cebf8c6db649b079089f82778a02788c2c4adb70e8c7223efc375a19ef53f410dba34da6ae3c515bb2e4a', ['checkOutlines', 'autohint']], +'cent': ['7c47df3de33b851cec7b53205176c66314dea2cb5072b9fa318974da4cf2ae3226f178c8de63d7f6a76dd8d5f992b35da75a6298ec81e79d33bbae7af657e3a1', ['checkOutlines', 'autohint']], +'che': ['4adb770ab4b053570f3d3f521f0ebc6817e7aa674446ed86c7b90916157401924d3837b92a94e6531509ed864317a0217169bdc3ee6ec5b579a240ab87d58960', ['checkOutlines', 'autohint']], +'che.bgr': ['6419ba6180e7463a4059d8c413d4e8205bbad570fabe84d5d850fb92b4bbe1b57d57d488f4331889dc5437a0febbe17cba01c9adb80acc87db468396a23dd14f', ['checkOutlines', 'autohint']], +'check': ['w604l59348123236178115c227-4l2720359267461530c584783l545801422557309311c23358l27058231177182283c125389', ['checkOutlines', 'autohint']], +'checkbox': ['w800l1027l102593l698593l6987l55-37l745-37l745637l55637', ['checkOutlines', 'autohint']], +'checkedbox': ['a257862d98c2b6038c8693cc498605be45a1768358a097355c1543c73c8d4d19b519c4980541776aeb4be9e1ffd5e5d29892d5554088ec0ee1fae5e1d16d4686', ['checkOutlines', 'autohint']], +'chedescender': ['788b0bed0e6d63d19cf0f0325657be1bcad6930523b617f99f632dd6340bc5e175d64dbb7bdd357e27623c5976ec28f220e6c776c838313a2945aa4b3ff91eed', ['checkOutlines', 'autohint']], +'chi': ['d1516405db8b75c5338e06b9390c5dd61d366e70b6e81b3c1b9171feed569a853bfbf93dc80eed3f05a4de79ec535e25d8d1925c680ac41955a3f3d329a437f7', ['checkOutlines', 'autohint']], +'circumflex': ['w318base:circumflexcmb10011590w318l126546l149568l17744l-17744l-149568l-126546l42698l-42698', ['checkOutlines', 'autohint']], +'circumflexacute': ['33fedaf35806b687ab3556bd2c7e54a1c5e945fa54201775974e3feef06407b800bafd87aeeec58c6f9649d60181c0e95641347a2f8e713e59d2f56ebe6da9d3', ['checkOutlines', 'autohint']], +'circumflexacute.cap': ['07be99d6f5471c9aa79e8ea9b7aead6147f886a633513591a0321e4141360b6f9d44050c8e164a6447e8bf10e65def2ab1c00628ec5b84271be058c64a2ae800', ['checkOutlines', 'autohint']], +'circumflexcaron': ['w0l-132522l28612l-31612l129522l147548l23653l-26653l-150548l-26679l23679l147784l129810l-31720l28720l-132810l-150784', ['checkOutlines', 'autohint']], +'circumflexcaron.cap': ['w0l-133706l28777l-31777l130706l146734l23818l-26818l-149734l-26844l23844l146928l130956l-31885l28885l-133956l-149928', ['checkOutlines', 'autohint']], +'circumflexcmb': ['w0l126546l149568l17744l-17744l-149568l-126546l42698l-42698', ['checkOutlines', 'autohint']], +'circumflexcmb.cap': ['w0l17857l-17857l-148742l-129717l42815l-42815l129717l148742', ['checkOutlines', 'autohint']], +'circumflexgrave': ['1912f265d6775409a02397159601d524161f97bc03fbf1b5aa2a72762a2c1adf787242ab90d3d296987fe887c071c36af914c4fb1a3c140f8ff67934a7735c58', ['checkOutlines', 'autohint']], +'circumflexgrave.cap': ['91d747fe9d766138e9106023c082b5e3358c284b1193ac0be868a17d9964ff4f2754d0567d934ea2204d34a685938c219189f71136fbe67b8fa792117a1f5b47', ['checkOutlines', 'autohint']], +'circumflexhoi': ['1616f83113b06ceff2dbf3c05102627ebcd1d48fc48814c78ade8aee3a35ab3bbabd33beb50b2946bcab74a2416e0f2e9191897be384a339a22f761d561caba4', ['checkOutlines', 'autohint']], +'circumflexhoi.cap': ['f0914caea498242040db99bd2656c4dda198c02bf34bb6e1ea8b49e64f1632e0dab79382ce7be248614c65b7402daf9116c307ba68a3cb445932957d8f962dfc', ['checkOutlines', 'autohint']], +'circumflexmacron': ['w0l-131526l42633l-42633l131526l148549l17674l-17674l-148549l-120706l120706l120759l-120759', ['checkOutlines', 'autohint']], +'circumflexmacron.cap': ['w0l-132706l42794l-42794l132706l147730l17835l-17835l-147730l-120867l120867l120915l-120915', ['checkOutlines', 'autohint']], +'circumflextilde': ['7a2bcc7c3dddab39207037bed08b4ee69e7f90e7522bb1ec5b2aa84c7941a387c876c1820899dec3b097f513929a3a847b2ae243f4ecdc1a852f4b18c97238ea', ['checkOutlines', 'autohint']], +'circumflextilde.cap': ['a31b59e5b2254a95d0e20c7cdb284ddaae2dfa89fdd20927fd3248258666c6c9ebbe42047fd1a4cca2f0b67e0a68b04dfbb2a9aef3ffa9a9f30b397681afb568', ['checkOutlines', 'autohint']], +'colon': ['c4f9a8fadbc200dd8f710826070cda02b9fcf608cbb55905730628162444d1bf03504ad8e462288af1c39678966934b72345c925e24a74e2aad04e190bd76c20', ['checkOutlines', 'autohint']], +'colon.sups': ['88d8ada9d3b4323670c183d1a82461f191a2c94c67ed60b6ef23c8f8ef33f456c4ef67f7da5134d050467cf3860320f8383b3b0131ea92cbdea4262876317f60', ['checkOutlines', 'autohint']], +'colonmonetary': ['d6992b263b9c659546ef81f342f55c9edd1afa2cd7d6ffa21f3ad57fef2654247f6d67242844c8d3163b4344e6fe2344fd19bda23f335a8b4b76eed4b48ba313', ['checkOutlines', 'autohint']], +'colontriangularmod': ['w300l71480l146350l154350l229480l225488l75488l717l750l2250l2297l154137l146137', ['checkOutlines', 'autohint']], +'comma': ['w300l60-177145-146217-72c217282175121675c20997189118169125c1481251031258195c815881329414c125-5l178-37l1650151-70119-106c45-140', ['checkOutlines', 'autohint']], +'comma.dnom': ['93eb1d90d982d89d4bf664a7dd5d4ca9692dba9d667824b5342c97228037eae9c70a0c10a0109a1482c34ef6c5264d50e8b76935a72b93e6a920f80548cc4b62', ['checkOutlines', 'autohint']], +'comma.numr': ['93a9701d7090a875ace380319adef366dd24ad960d914dac59774d09fabc7c6adeee348d3a533cd62b50d40cbd9e44b849b7339d12627d9d5915783e5bcf8874', ['checkOutlines', 'autohint']], +'comma.subs': ['3b9a58b4b088663cc0c54560d1b4c16d8b2058f59b652b39e8e242e8fc94afe9e6c6767f6b222d87a3196c448907193ef34cb844c309434a854919ce87cdc0e6', ['checkOutlines', 'autohint']], +'comma.sups': ['620d47d40eaed2660ad1b1312af06816a23a06ae4cd634a00b206339b239485ebd760850087f204aa11592a2634300ebe6a09115f9a8e1285672c635b492ea0d', ['checkOutlines', 'autohint']], +'commabelowcmb': ['3a49154999aca4e7f78447b7cee3346c5008e45ad51f5ac2555eff0662cedf9390b152e5da8bdbd3cfc74625069bc871ef8137e9a74ea4e7f9043ad6b62a34de', ['checkOutlines', 'autohint']], +'commabelowcmb.alt': ['bef612129b2a67159eaa953cfba3f5ae2ea63940c8afa0107f846b5b1456903335101f442061b2de3c6f92c509eeff99a92b640d6d46eb952e308aece3bdd813', ['checkOutlines', 'autohint']], +'commercemark': ['d0142fa35f96a1b1881cb3890641183650882624ee1e7270813b678fdc84510ba93d41775bee17ab2eb2f80ebe16f897db97790f375a1fd754c08b2f871de06d', ['checkOutlines', 'autohint']], +'copyleft': ['29e9af8a37cc2b8b2270d865a5030440e3367bb9d35c1c2f35f13f90ae5b449aa481d1dd4f2b9dcdd5253681ce185809f39f49127977bc6f0fbfc097433793d6', ['checkOutlines', 'autohint']], +'copyright': ['6d682199126f1d02b56b0a372010aea952ffc2f4890849fc04d710e039916936ec4766150ed6545ab81fc3b0a0573e336c81816640e12fef465214ca74f8ca3a', ['checkOutlines', 'autohint']], +'crossmark': ['w669l6080l66962l62669l0608l669608l608669l062l620', ['checkOutlines', 'autohint']], +'currency': ['4821ba8f74ecf3ebde0ff5cdf229cf01af236098061cfc7a94c4c4135fcae269792dc6bf917aa052fe7b5e7999b7f2b004d9a9818a46d9e44fec84cee9f61da8', ['checkOutlines', 'autohint']], +'d': ['d5f68df13fa49164540b691a43ee78ef17366c5f149a8f04b10850f48d6d844984ed34be1ec13dfebc51c05fcfc249ece3e8db973a2491917ed3cf41a42712c8', ['checkOutlines', 'autohint']], +'d.sups': ['4d0e40851da8f3bd42db1f189c92bdf891bad53cadf18bf169b41299a7d46b9b23963f71a15e76b4d7ba626aca9f23a001b360f9149fec50133e46f7e0472f80', ['checkOutlines', 'autohint']], +'dagger': ['d994c02d94195dd69beb240f76e78380e087b7929061e26427cfc53fd182f91614d1765994faafdccbaef3e651ebe90869b28051e51bf76e92958121abfba60e', ['checkOutlines', 'autohint']], +'daggerdbl': ['11f99ed81c5c8f950c72421e99fb364d376dee75196ab22c3b5b7fe2368fecf6e34debfbc86f00b0bb6d5730d6ba4a4326ee056f72df85afe7a6306dfd56bc12', ['checkOutlines', 'autohint']], +'dblprime': ['039a8c939dbfc104a8fd09e7bf019e455c8715edbda4e49dc4c02fac348dccb7f12745de336e3cedc0f71a1db5f1df3227b112f88a275eaa1f871c9a03cc37b1', ['checkOutlines', 'autohint']], +'dcaron': ['fda4f50e937dbefb3f011c3a9231bb58d21c29337e983724aaf5978e6901b42a864ab1b0d430d19d719f1ed74e9e8367377d6506940b4488bf338c59c609d903', ['checkOutlines', 'autohint']], +'dcroat': ['6503f17660834e9a8f78cb968fb831d214ff12261da2193c46d03b8b81e9b9f5912f22d1afd295cdf100b52ed575db24392c888ca4bad8c1f456aa18ebddca91', ['checkOutlines', 'autohint']], +'ddotbelow': ['523bb20197a0b990ebdc0aa5f59b8fa3dbda4658d02a455e9ddaac34fec2fa2e286227984463771786e18a343504a7aadf0e802e18f1cf44b6125f52525153c9', ['checkOutlines', 'autohint']], +'de': ['c356b6273f7ff68d681fcf9c63587fdcd058aeac9a8ef48c919713a72a25aa024a2c47230362cc165d261a06844ea588c8693bbf9b263db540699d9a55c2941a', ['checkOutlines', 'autohint']], +'de.bgr': ['3644681638577c06a8ed198d6abcecafdb9ed23c8be2b5599344f5bfc50a9aea5ee1c0a771e3d2e7ac6e2b7ccc36d5e80983ded926acce2a609c6253e9aa00d5', ['checkOutlines', 'autohint']], +'degree': ['2f30a7587ab8c0cced60803bde0ff041af2d224e61893ecc3388394efca0fde05af1305abb6c906e0ee28f6734aeb8f5c08ee479277b64dfef50eb1ab473be5b', ['checkOutlines', 'autohint']], +'delta': ['749171e5cbcbc7366a01309bce4490565e061364a3bf11d3ac931b6c2d158ac7dda4d7fd4930f1d261d77d7f9adbaef70299bab87336fded5a99aa94160d2ccd', ['checkOutlines', 'autohint']], +'deposeemark': ['2a90e0a9deaf0226a38f631372ae410942288e4b1074d8b2a2bae13023faa04ecf50a0f54a0e30c6b1cd763214e4da1ba40ea5572ffd0b8f4fd908440be6ef4a', ['checkOutlines', 'autohint']], +'diamondblack': ['w748l728300l374654l20300l374-54', ['checkOutlines', 'autohint']], +'dieresis': ['4a61df613155d497bda1cbaa722125078fa401a3b402ec0727013b6ed5bcd7d6f3412be522e093b49bf6e75dc1c520509b82c1ea4cbcba735410c59fb5ef1585', ['checkOutlines', 'autohint']], +'dieresisacute': ['ddca80c18c7fcb81949b638ca67ee392c39a97fafcea26ba0d76df090bed15a697918af21b9ac32aecd8a4598f532a32dc2e75c2c3802af834bccd7dc5e46e0d', ['checkOutlines', 'autohint']], +'dieresisacute.cap': ['b44dd01744cdbee775aa8c6cd1f223a08bb3da2b68e3bf5d41eb1a905bb9210a3134c249a1ccf6b4138f5a21d1eb5c5cd0236aede6a3a93e1988e03d6d0157a6', ['checkOutlines', 'autohint']], +'dieresisbelowcmb': ['170dcd6e116b0399ce59c49097cca2a06ac84d410ba9fe896ca9fb418f501f26048f2a772d2433d4cdb05f202ff313a94cd4ab2dc822ff7bd71c77763c115e11', ['checkOutlines', 'autohint']], +'dieresiscaron': ['73e21c554bf7e81f8e137316914df99ea6ddc8f30521ee6af45e24243cf5711bbd3f9544ffc8ee0e3e286bc4a2aa4357c30d2e515020aae1344b5213fea1c434', ['checkOutlines', 'autohint']], +'dieresiscaron.cap': ['9ddf2946f3dc468a5347da38defddfd2655b8c9f26188d5a6e3778d01f5946e3e569707ef996a5b763653a97c74d0a23ca8e51d4d480cbca38b271c814cd3d96', ['checkOutlines', 'autohint']], +'dieresiscmb': ['2ac20e0f407f98ed6d996572f6995778518528a9dfe3710d3c627962b707a1147ad2174dc74759548154640ab5501857e6e7fe43e6ce896ea24047023c37ee30', ['checkOutlines', 'autohint']], +'dieresiscmb.cap': ['df3a5030196a076ebee763be48a236f5745eace72ff55eb558dc9dc25760dba3937e37e8581e0daf1514974bd01ceca5a3d687f126a7854d009d40f7ec6f994b', ['checkOutlines', 'autohint']], +'dieresiscmb.tight': ['b32d5d86a3d2f9ada4f9f60e76a23c6904d748bdad240e39c423d9b0ff1e1bc22cd48533be6ca957c107b1d7e75b32b1c27f56ea36cd500f44f2004f6d9bc6ec', ['checkOutlines', 'autohint']], +'dieresisgrave': ['a98b736ac796cccd075f494022f546b15474a45c60d6c1813b87c7a86e2cad65232278c0ed077676708a1c1a2bebd3748a68c61df7c742355f2067f26d036bb1', ['checkOutlines', 'autohint']], +'dieresisgrave.cap': ['68ec2684b76b293cf2ecfd7ad18e0051b8a116ed39b5f9e9e22f640a222ea4f03aa51d755ca0007302d433a2820c81acb7f6e9066aabf8b9fdb53fd5522355dc', ['checkOutlines', 'autohint']], +'dieresismacron': ['eedfa94f792ef8e728111cb7082007fd571cd95c81a8dad382fb07b7db43785c5ddf49de3aa488b5a9bb6c20e5ae353c429ac304228711519b0f256907bacdb9', ['checkOutlines', 'autohint']], +'dieresismacron.cap': ['6ed5a52b2989d2a9e0d3bbf47f2c9903af842c24014d326cc92d21f6f8da21d5829c71bdadc919db6915c97bb76e07df177a08b12f20c60e29f78c1cf4a51526', ['checkOutlines', 'autohint']], +'dieresistonos': ['370e6f1c56142e73760d60cb85c03686449221eb2d95162e1709f154d3d3908da1516d391f2882097cb73eb218339efa32adf0c39d0b2110500826d5de30c5c4', ['checkOutlines', 'autohint']], +'dieresistonoscmb': ['650e86fab410a212f75155e8deba1001062a38807a92609ba5cc47ec7124338d150bf4d5c45351df3b084973e68bf0e004c8c0fbbfff749425baa96b7eecba09', ['checkOutlines', 'autohint']], +'digamma': ['w413l79-180l91-190l174-172l161104161187168272c178459l136428l409417l409480l83468l100112l132163l389148l389211l132205', ['checkOutlines', 'autohint']], +'divide': ['92b600d40d0cea0b9c0f1732cf775c2e76085fb50669381472b8318655a98b581e61f15b11f0ebe8cd4cca9c6954155352644c2bbb1dcea655dd27721977e37c', ['checkOutlines', 'autohint']], +'dje': ['67f17ced1bc16256756ffcea2e2babcd54fbfe1f11273c3258a407aa7a67367bd69e095ec0c5ba85b1440ac3f7b2e26d2552603ebb1dc83f04b82140ea710ceb', ['checkOutlines', 'autohint']], +'dlinebelow': ['4e16b0bd8f1e8f21d9b6be3e4d6590dbc938075d1032e1effcfe4655c09c09001ecab20ca607b1ec56195393757583da6638a71fcf549fe2ff03223fc67e87ba', ['checkOutlines', 'autohint']], +'dollar': ['45c52b48c3d1c6b55da7fc88236ee13aeee389432585ab3da510790871913f1188c009f5f9283e539feffc9d82c861cdf6b5f108a98a1e921b0c3c941f70858e', ['checkOutlines', 'autohint']], +'dong': ['239d392bb7187505e09637f89dbbc028444559330201195c849573b370787de754d5075900a499daf3793c9971e117a6267905e921d77feef2fd06f22a0fbf08', ['checkOutlines', 'autohint']], +'dotaccent': ['w400base:dotaccentcmb10012000w400c05893858967615c676536769038717c0717-38717-67690c-67653-67615-38589', ['checkOutlines', 'autohint']], +'dotaccentcmb': ['w0c05893858967615c676536769038717c0717-38717-67690c-67653-67615-38589', ['checkOutlines', 'autohint']], +'dotaccentcmb.cap': ['w0c07373873767764c678016783938865c0865-38865-67839c-67801-67764-38737', ['checkOutlines', 'autohint']], +'dotbelowcmb': ['w0base:dotaccentcmb10010-792w0c05893858967615c676536769038717c0717-38717-67690c-67653-67615-38589', ['checkOutlines', 'autohint']], +'dotlessi': ['2f43408332e87a2ab8109ac8059b9f5a4391c8bb4daefff5a086a837dec674b05ec65ccbc0b23b0070d4560496f661a88b31ca0e2bc937c82c4b7dfe6f4ca4b8', ['checkOutlines', 'autohint']], +'dotlessj': ['1e8e98a824168f290a9770a2b8f4fb612e883234d0bfa36bb62fc28dff672addbf37febe5d940df1c7fe44f6d72f0eb9cd9536316e2a8c175023e5d758cb82e4', ['checkOutlines', 'autohint']], +'dze': ['ac0c4e5fc9b0665cc580bdda171126267b50fc9e9a9de14cf2ad0b5fc9b067f89ea9753af0390c991b65aa10de1dd29ce75cc8c128e17ecede7b4a10559ac012', ['checkOutlines', 'autohint']], +'dzhe': ['2cc4ea00197e41b810a7c9ec4877d69fc72dba95361de96c3c2a631713a6bcbbfaf9851072871bb1aee68b45c5b084ea2543aa60d4b747bd66f65dfc3b57efb8', ['checkOutlines', 'autohint']], +'e': ['3b06e792b6ba2afd292a4920830df4b9686ae4c0e55bb7f3411eae95b54e59a681a2397a569b639fbc178c35d5d02072fdaf416b95d0ddd87399c1aa6f972ca8', ['checkOutlines', 'autohint']], +'e.sups': ['5d36be4405e25e573bd2290824d6bfa1244e0ee3d6fd5e8464966b9086da244a427235cc52509f3a2d2c97c377c9d8dbfcb0bd7478fd4ff0d13496f855433e34', ['checkOutlines', 'autohint']], +'eacute': ['6e54fe68d38c02dcfc5bae9b7c8071ca83922feadbaa622475283878d8b935db052e2f48355a87c6cdfc4ea53ed79ba1efe1b3c5d27174d081d8d89411c286d6', ['checkOutlines', 'autohint']], +'eacute.sups': ['1f447039bf076b1f6b9349b5fe5bd11d4952ee1a2f2f652b6d2e2f9c1f70dc84511b3bad9b655f9fdbc327dfb7cac2bcab16e9f9ec5ad4508e9c8a5a505b538c', ['checkOutlines', 'autohint']], +'ebreve': ['9b2ee2f84af4eba72e67eef424d8745a5b68c0b3efa34bc40933e6f834badaf228c788ad6f0ac31d568431e3a8588b46ba00c4e5e31f6e9fb5bf9325c97b31fa', ['checkOutlines', 'autohint']], +'ecaron': ['1d6b3e129ee6e3df0c72b9e3f93ce2aa54515e9fded76028ba8fe536ebd12e1bbc4d9ab5838724fe5e05560202779e9fea7d22d9d7043acf874935af374eb203', ['checkOutlines', 'autohint']], +'ecircumflex': ['dfe3bf8e02a70f2f6df32042e46f777a17fe8c572189df06fcf6dc5f63b0f7ff8e9e93fe4911379bd0a6b0e834598bc5bc4c29b6ba56fd641312842707be117a', ['checkOutlines', 'autohint']], +'ecircumflexacute': ['152790a1654123c2641ef71e8f816cc43b67178a07ecb1707388bef5870a9e4f87b390c1deb585f091488c11584214b88333825240ab7ae5709eb197b9d703c2', ['checkOutlines', 'autohint']], +'ecircumflexdotbelow': ['63968230ef3fdccf9761d8144232f07c8723e004734ecfd9a5cf49cb22b369d7451a7c27cbbb1ed3b0bb25f87d7082d0e79d07eef099cdf93764767e9cb52f75', ['checkOutlines', 'autohint']], +'ecircumflexgrave': ['cd133eb3d2c6d87bd21f5d3a0c293f36fb994fff54a7ece9df0f0361822fcef234e730782b514aa1259bf08d7ae56e99f3a19cb8308dc3013ae3f6a3a839aa18', ['checkOutlines', 'autohint']], +'ecircumflexhoi': ['6d0497a01bc6fa2d4c0a3cb783c881f456d0d5c8dcea21d0e1dd57faa8ec94b172e2b400b14da7b7b3eb61740f2e7876f5dd954d392569dd0017d824568ae4e5', ['checkOutlines', 'autohint']], +'ecircumflextilde': ['fe30d36e3203f495d389e2f5d1139223c7635cacdb73ebaadd16d7b95e00b3d867ae3ce762ed565c2d4abb5d01d2dbddd0f89476d3d19c69187dee0c4aa772a5', ['checkOutlines', 'autohint']], +'ecyr': ['638d0cf905702952ad8d7d39a13635ee8bdba66deffb146d12d0d4e4c86545ac14626f5f88f51816ee47bed53c3d388a0508e0c14c08f8c6a1880f194fa4a70a', ['checkOutlines', 'autohint']], +'edieresis': ['e75092d2190a572e3a8dce01b78902e3b6292604812fa149835f87280bf84d31b8bd64af353bcbf7ef3e3a6c1f8f379a7af46b678c2332de3061ea417e7c5c92', ['checkOutlines', 'autohint']], +'edotaccent': ['418601125ab01721b29da866772b2e9d1bf2d8246e73722f15f78e3e2ab22bd9b9e0a9c05c4e118dc5dc966eea0abed9cee225e0d26f776f23987d1aeb3a40d0', ['checkOutlines', 'autohint']], +'edotbelow': ['a19d0b7cc06e378fcf95981d8c7b76af83146783d0bfbf41b3335bdb82d7b2a2f23ebeeac0948449eac18f352c52af11c0815086380556bc8d094409e6bb7f6a', ['checkOutlines', 'autohint']], +'ef': ['78a36662c986fd08d121a86350c1744a479346df48be35f12d961d27b8566c48ea38e13331a7a66bd96e84e84668dff7bf158c40b6909969c71bac42f079e60a', ['checkOutlines', 'autohint']], +'ef.bgr': ['1911471e7473fcf783e554aaa0b729e2cff6de50cf14b111f59040055eed2e15c0f929949c50a866e9b80b7c87ec9fe488cfc67b57e04fd9f7b29f614bcafb9e', ['checkOutlines', 'autohint']], +'egrave': ['67759d444314a2b778fd5c441d4668a3b22a6fe7e3aacd4f3d60113b0b92efbf46b7f57c4be7e99e107811df4e1ed6042ce0dde810814eeac1085e384a43c652', ['checkOutlines', 'autohint']], +'egrave.sups': ['09b8c5bc53578144bc657d71e7487ec8c24e817ca32098a6495e99741a73eefce18796aacc5b6008db1acc1376e89c197873eddcc1f75570f0e9c212901e6588', ['checkOutlines', 'autohint']], +'ehoi': ['f059b538419cc261f72aec4f077097ba132468ce5ea3d7c9d6a0f71a4305f0e611990cc61b8f814c9d0abc1295b56587b78c1395428f1e5ef013dd550d68c584', ['checkOutlines', 'autohint']], +'eight': ['d24f57746e910f6bd77eb1b26441b12e9bb7ab35716e12a97e7a34a52ed85cb749f0634f53a71aabd0c438f58f24dc6bef95813cbedb410ee40d1c826e217803', ['checkOutlines', 'autohint']], +'eight.cap': ['640d4598004b217d505c3e56bfcb1484e8e31b889c04d881dfa812fd5dccc9a4b705044ae8e6cd28d1c1e00e85412f2f0fa9deaa43bb94a809a4645ed600dd8e', ['checkOutlines', 'autohint']], +'eight.dnom': ['4d2948a16b9d25ac1b95d8a5a6855b22ae675607c2268e4e5181d3b6bf2fe46307f132f099f3b3b32fca7d6390308314a9c23460572b93e338d2e701d5f673ca', ['checkOutlines', 'autohint']], +'eight.lf': ['c08f084f0db2779fec5a09577d162d76f3c86795fa1fc3b92dd6611d8963fad517d07f5b78afb56096ddf2428a342db55c25d706dbec941aad4adde6fcf8f6a2', ['checkOutlines', 'autohint']], +'eight.numr': ['2e646729ee643001f245dbe93f2e53f0be43b36fce4669e8665b87989736c3c5522414cee5fe3b58e816bd43c99c47ab7405dbbd8a33d31863023423d4353b35', ['checkOutlines', 'autohint']], +'eight.osf': ['e00051be9c06278ad0fb73dce1fd3ad7a67b0337a9c8c02b098acfa1d7fd69c43dfa036f30d3bd5af8f4b3eb0175b77b0d576289760c43ea7ab5e65bbef9fe61', ['checkOutlines', 'autohint']], +'eight.sc': ['3e27f9ba0f24aa759cd800304c309d4b03a8ad86c16c5e2e58f65dfa0abafb4ce55f5fa67053076939ee732a3e28701d8e64b10c1791f9244779a9d7ef855791', ['checkOutlines', 'autohint']], +'eight.subs': ['7122346f7739a7552db5ea318e2043483de5293611deef42185d7af5aad5030c261ad0f0f9e6ad1119ad8144ccaca24564306d212dfe300bcd14aac94064f2b8', ['checkOutlines', 'autohint']], +'eight.sups': ['7592fe0ea1714c97a2eceff2e2a5494062b8b3f826675438a11336453c2901d92d5c0803d9fbcaed61abee3fb60ffa74b5e749010a991c0aff2408763b1c18ce', ['checkOutlines', 'autohint']], +'eight.tosf': ['4a8f9fcad1ea38f276e9cf31deb4c50004ebc5a25bdde54431f9bd86a5861457231c4f4ef0e5567caca28047a0ef04da937848d6b3829bc73d5b584758ce394d', ['checkOutlines', 'autohint']], +'eighthnote': ['b64698db330eb2be76ba6981f80e5fd3da4e1e87ef4688eeef3d03a006f2b006620ccae19a1a7d7e94016268bf848702e6fbb862a6967bf6845a6594aaf93f00', ['checkOutlines', 'autohint']], +'el': ['57460214a777ee788331b4bf1b51406131b85ae962fda06cc59175194e713639970364fd8e2d8d540cdeab3a7030594522b849c218a76c2701a81c5301f72036', ['checkOutlines', 'autohint']], +'el.bgr': ['w536l440l990l245389l250401l229401l3920l4910l279481l236481l100l2000l20036l10154l8154l1036l2830l5260l52636l42855l40455l28336', ['checkOutlines', 'autohint']], +'ellipsis': ['b6f2d00b8daa15b8b22b70340e494efba4fa4ab7ab33b27dfc648a824ba9391c5d1444b6c54cdf6f2f197356c63dc079b7b5c7b278b57082893f88aac3f73397', ['checkOutlines', 'autohint']], +'em': ['dc3941ba9ef1da44f9cca4cf1eedbe5aa40b392dce04d2cf28ab427f603d0e0f9d0277f6a382fd53206b4e5466fedbe7ac94c534943e6b90abf3636690646bec', ['checkOutlines', 'autohint']], +'emacron': ['9e2c511b336c91e965e32b16fa081380095bb6efaf1b8ff890b22b45da851d45a3f6825b9e168e9cec479f1e7b0f5b0621f38679e66abd5552b839aa5bf2f0e9', ['checkOutlines', 'autohint']], +'emdash': ['w812l40215l772215l772280l40280', ['checkOutlines', 'autohint']], +'emdash.cap': ['w812base:emdash1001055w812l40215l772215l772280l40280', ['checkOutlines', 'autohint']], +'emdash.sc': ['w745l53250l692250l692310l53310', ['checkOutlines', 'autohint']], +'emdash.sups': ['w565l46578l519578l519628l46628', ['checkOutlines', 'autohint']], +'emspace': ['w1000', ['checkOutlines', 'autohint']], +'en': ['b61d1bdc77336b03a72de232629622e2ddbd4acb270efc228cddab2509cdf28debb540a6d4df0b3a7e422f8f972ae63cb13a2117c71e4af624cdc735987b7e72', ['checkOutlines', 'autohint']], +'en.bgr': ['b11279bda902d8c4745f33cfd411a58014032b452d36e407c5abb608ec2fe1ac89888155f97ebc448fd4377010793dffde75e96b55848f46e6503a81886b1f17', ['checkOutlines', 'autohint']], +'endash': ['w512l40215l472215l472280l40280', ['checkOutlines', 'autohint']], +'endash.cap': ['w512base:endash1001055w512l40215l472215l472280l40280', ['checkOutlines', 'autohint']], +'endash.sc': ['w483l53250l430250l430310l53310', ['checkOutlines', 'autohint']], +'endash.sups': ['w373l46578l327578l327628l46628', ['checkOutlines', 'autohint']], +'endescender': ['b4bab84675f688734e7720c7169a4d05210008cc10275a856cbfbe9339b21034ffc45f83d1302e9de1ee7e49be1121b70b3837f271096ff3c851a272202a0dd3', ['checkOutlines', 'autohint']], +'eng': ['82561fe4114425e0f08e782fe664a6272a1a52bbdd846ec7dbc1219568eec8e14e78db6d6a14aa29706ff8d8c970f153e3217120447e8c0dbe11b8dc42677030', ['checkOutlines', 'autohint']], +'enspace': ['w500', ['checkOutlines', 'autohint']], +'eogonek': ['5e995ab7f25b830a3015a17537f56705dd6bfeb95a5017cbb086337a499c31e30e122a3c38ba8bb74607ac61ab13ddeb4b9057c6e35694a977b74cf91a8a6a1a', ['checkOutlines', 'autohint']], +'epsilon': ['f467d90ff01593135898dca41af3f1d335aeca8112908ec9199b8609d3aa01cba4eb18737daa0f229690e0bb336a66ec28bc2d02c995d578afef7f98d1891676', ['checkOutlines', 'autohint']], +'epsilontonos': ['f6a59e3739f8aa5aac73e1127d0d9b3d5680bf6876e0e1472441f177d9c45d02153c8ff8d241d7640e561034f7e60f021b46bd6fac20476a66834176a02aa76c', ['checkOutlines', 'autohint']], +'equal': ['w530base:minus10010-100w530l502301l502358l29358l29301base:minus10010100w530l502301l502358l29358l29301', ['checkOutlines', 'autohint']], +'er': ['4772fea0cf1d75be7a437d64b52eec4f52443135e614124f52f08695755883b54feb9bca4a81e39afb91727a7be94e7b6b095a4236fe2ba01cfcc200915f0e5a', ['checkOutlines', 'autohint']], +'es': ['4c24a759f223542eb95f8202d99d3b756a43fa8c5ebfa86595ecabc47e5b89b1ecfb9618c2ce278f4244781515eae4bdd192b4bdaf450faf4586ea4d9df572d9', ['checkOutlines', 'autohint']], +'esdescender': ['3fa0d6bf9de5f70c4f8240b8baa7e436c28988cf133b3a60dbe40e4f0602d096763a49a2338ae26cd2a74ba69149c78f9ab098b77657fb826e0cc5cbe22c703b', ['checkOutlines', 'autohint']], +'estimated': ['db6d8feef2a64c331bfec7e821a63d9a2b4a90f10451f2f1e9610002cd593b4e6cd5c5bc2378f5e4a1cfb6c5c59017b8f6dbd942458bec1478273cef9b601bc3', ['checkOutlines', 'autohint']], +'eta': ['72d1a6479a3d2b0bae9d64dd4044a461f976849ba3eb1d1ba6f4375173ff60cb46c666099cf885a0b4c97b04ae7cea3f047fe3e27fd1617254ac5e611b7d5f6a', ['checkOutlines', 'autohint']], +'etatonos': ['7bd35bfbcf57dfcba4075615d7c6eea7138fdd1399d63149cfb6cc48971a7f1824441a4a2031158415e5b612854cd1ad8fbacbde2d6627fd80923516a70a130d', ['checkOutlines', 'autohint']], +'eth': ['d5947d5f570b3f11681e58ceed809c7f03d309c1dc0d39813e4821ce8400ba18e6630fa5151fd60d72d2e60de0f2bd0c47d6e8132274fba6856bac63e91ca9a8', ['checkOutlines', 'autohint']], +'etilde': ['94ef255a8007494099c979282e7a86f70ac5972777ac33fffbbbb5be63e3387336293d1e268178b1f8f7d86308693697f5a019337a259363d6563b42893cbacc', ['checkOutlines', 'autohint']], +'exclam': ['3b98cb62bc9c26c100bec09779223c1fd61f9b431ce95d711dd1dede8cc51de9aefc78383b88dc547d97d504923836027b4eb92a8a04cfb343850056433201fe', ['checkOutlines', 'autohint']], +'exclam.sc': ['2806a883917c3effa9cbf02306cf74a97e7c8c23b3554d4365d89db60ba40ffc9df0f77def3bce8efca13c5903639eaee646471a53ea00572ec8163a2b5b26b6', ['checkOutlines', 'autohint']], +'exclamdbl': ['4229f4edd0a136d8a70ab23eff704cae28a3ccce2624be66b690e711c9a56dfd69a138d7b754783673631ac1ba258268e83a1906f3d3f577074940926c827e3b', ['checkOutlines', 'autohint']], +'exclamdown': ['0f6d08b1fa97ab8838966bab12977848fe1a77b7fe3bdb16692bcae2b2316371392036b4eb4af1c7c69bfad730c8ee7701ba17d0aaf0e21e05619156377f90b4', ['checkOutlines', 'autohint']], +'exclamdown.cap': ['7b4968be0e42a048d52c1b3b2f9222b51ad3e10791872e8b43e510631f21a562cf52ad292082655482b2fd60734ea2f0e2a5f570268dff30695581e98c552d25', ['checkOutlines', 'autohint']], +'exclamdown.sc': ['f2ea34c7b04f1a002fc1dd78f87743856b24f0cc4d6918c2e5d4f2a37047723f969a0dc2a49e180fa276fc919160b8a6e5ba850e0c860e6ce1ce02d16006bb95', ['checkOutlines', 'autohint']], +'exclamquestion': ['895d1374ab6613b5bdec597380d11c2937bd2669548011f5bdc68863b634adbf7f1dd72b554313793c2a4a710ed4ec0b4d369b51d24798a55a359ab9d759a934', ['checkOutlines', 'autohint']], +'f': ['830579870d563311030114c1fe18ebf9ea13bfae2bb05ee77578c2f57b8b0ae3adbb6836bd24501b1a349e5e394fe48e23125edfc95f3035152cb8acf2e4962c', ['checkOutlines', 'autohint']], +'f.ligalong': ['5330d8ad84cadaf37e2ed24d5dbbc06dfbc9e1f82ef9ae6b761ffb0d976b88c0a76312880c932983bbe0611d9997bfca08fc466b1d2fc0a6e8e903939f348d6f', ['checkOutlines', 'autohint']], +'f.sups': ['9b5edb986e9925ac75853f8c9789b2bc9f7b66a8b09aff37c397aba1c03e0dc62dca8db8bf3c41179898642b93311a8826690c21274208c4ea1fb6f91bed9d3e', ['checkOutlines', 'autohint']], +'f_f': ['2c470acc248f9d5f080c14396ca2a370e2bffe81b169e209680a2db3b24b4df059ba98910dedd64349492b2c959a13c7f26a0470c97c66c33585d5ad676162ca', ['checkOutlines', 'autohint']], +'f_f_i': ['4bccdcec121902e5369bcba87aa73790333db4cd7c69c1767308da8c954b06b57f2c56d225987a1938721bd5f4eb087341e381a13bd21547180a1b1279fd374e', ['checkOutlines', 'autohint']], +'f_f_j': ['3039b54f18ce212f88a381fd02befc9cc94f5bb229dbcb218ab3054768443707da4fe164adc4824a573d9955769b5d6bb8a57cb3e9a3ebeed072d02f770c073e', ['checkOutlines', 'autohint']], +'f_f_l': ['19617f98780d522b637a17339353057cc8dd309ecb749420fc873bbf15d0f10ace2c3c3dcce4c19bf0febba5ceee6ef04fa7bd7b4ed54113f0140fe35ab782eb', ['checkOutlines', 'autohint']], +'f_f_t': ['da241c9c24930f664247c171ecbd6f8509db008972761b3364de2d5207d75a83ead6044e8fc9eafc700a9276544583d648c549c9decec82fd205ce19b82e4c71', ['checkOutlines', 'autohint']], +'f_i': ['9233a529a31dcd1d9d7c283de0680256a368af52865537460e39c8967be8a51bce9b185a4a581bbc04d6961373738c14ee440741bdf5a448c3eabb7aeaff24fc', ['checkOutlines', 'autohint']], +'f_i.sc': ['238442f77428d3099a0dd4fe413eaecff56942058679f66ced3a4dc257e5d7d45e735cddd33769c47a8e63e3e16a6764aaf5d54c9136b4d9a3805797d1f85295', ['checkOutlines', 'autohint']], +'f_j': ['d56b9f749e2a216089dcfc0d9b38cd5d7ba32961c6c4e9ad7f5f2b2596fa3f353834e53e619be71df5a078bd2019a4136fe3513a11b32eddcee4b35ce89fa465', ['checkOutlines', 'autohint']], +'f_l': ['499c2d2922a53631dcab9a38f5bc7437487f8f800a87b5c2c1c85c72a352a1ccbc5cd0496f3ae1de1fbe19690dd80d39175d7477d0a942b2b51ec349e88bc4ea', ['checkOutlines', 'autohint']], +'f_l.sc': ['383699613ff8b5f19fc00c8335de7da06bfd024b4b9df19bae993b79e667f89acebc459c6c24706a87a0be2f67d06a70cb040eddacdd0fd092ae1d6da7a9c9ac', ['checkOutlines', 'autohint']], +'f_t': ['db70bdcffea755fe0ed3a9ca71cb97b329798ef9341b8e782cfd22ab9775c8ec8e58e34105017cb088be8c244b9486922d651248d9840cf3309af12bb1a32a1d', ['checkOutlines', 'autohint']], +'figuredash': ['w500l40279l460279l460344l40344', ['checkOutlines', 'autohint']], +'figurespace': ['w500', ['checkOutlines', 'autohint']], +'fisheye': ['a2447dd0b242a54741ab74a5b8921306e8a34ae726f3ac00063c05a33b1dbad3b06f55ceae1d6a86e5c9ef4db1853bd011e4bd33010d730f84fbd2d3fc79d3a2', ['checkOutlines', 'autohint']], +'fita': ['4feab702e1e7a5504de269e8640466c76a6f785e1e3fb6312362a5b1e1dae8d9990a582aefb9c388581a5aee677307f5dd5790da6d53a440a9ff0183e3c1fd09', ['checkOutlines', 'autohint']], +'five': ['8af7833498039c3d1db876fe697ef1324fe0ff649c3fd89be583c10750a0f4d8779c2d61dae9b63f70335d976f2ea11539bfb3ca95844522db7c4a9b8c5cd939', ['checkOutlines', 'autohint']], +'five.cap': ['3c1c9395abcdb1b835cd5486ae5f97848a6b7c5842f4505a55b83d80c3f86f3af230325136ec69f7f5db8c36de6d56cea0fe152bf0f265c94f5d80f609c5726a', ['checkOutlines', 'autohint']], +'five.dnom': ['884c3bc67b88a58666587406b1f61e810baa8c35860859deb4b0920db4a938698af01a43cea929e3e25e3915d6552cb7375f6528a5dd1acffbb77d3ad3f4601f', ['checkOutlines', 'autohint']], +'five.lf': ['aee5c1689823567559cd2d9a8df65004a22ec4bf7cb537a4eeede54ffd52c90f8bbb8df61180d706a5b5581795b871d35e557dd230a0a264391a3c2fa3ea91c0', ['checkOutlines', 'autohint']], +'five.numr': ['30a9f4d55b38d4f6f7cfdd29781ae4e1cc0813b2a78c2ccb4f692b840a9f6fef6b80c9351889bd9faf30c5bcc012f49d16596eb145a80d75f27bc48432dac174', ['checkOutlines', 'autohint']], +'five.osf': ['0df84c67df77bd6f908059bc3b100127a5716bb70b20755e96a658e1eafea138acdd2171db31107255e1bd0d7f7c0bdef544a7ad1aaf8b94e0a4af2d859f3a0e', ['checkOutlines', 'autohint']], +'five.sc': ['508c6cc9bf37eb2ca99bc1193bb810677e531bbea8361acf45bb64287e6d986b57c17a9795dd7f35d677befcafeb33b71fb752dfdde94233ac4da0687d663d5a', ['checkOutlines', 'autohint']], +'five.subs': ['3ddcd8b898cb2732b4ec54eb57e7e8b3950bca974f47f8c2aa56388ae4fe199f07be559645f2ba3b9c3f2879496095bcb421e318fece7f5a97dc63e1545e8175', ['checkOutlines', 'autohint']], +'five.sups': ['d90a1e8fae9fcc2306193622361aa2c13dd4b1942c0394c55250c2ad7e64c7c83a248e0675ca966cdd6ad79e8b7e6ca29e81564e28ffd2bd117bdaa919800d28', ['checkOutlines', 'autohint']], +'five.tosf': ['fc4b0e6fe56bac8e05d02bb9a7a07c4a093b7f5952aee4a538a08e25dc6cef27b4f9aa8a74b4901b74ad139b8adea55bce8ac0bf0977a5d7ca056fdfa944d39f', ['checkOutlines', 'autohint']], +'fiveeighths': ['dc7335fa0f33d5b2cb771f35907805ad2008c83db780e466f579d59cfe79741602a6feca1828a03cb04e5de9facf2e3136a93d84c3d8eba3b117a28c933ac748', ['checkOutlines', 'autohint']], +'florin': ['45af31c24cacc05ff0a0b884d5015b788b3dbe152de81f569ea5d81d1ad515989d94f972d64b86c1d8aa671c1d783b2b44dad44c774d93806df5942376e21cdf', ['checkOutlines', 'autohint']], +'four': ['4a88ad0b8bcb96448fef9dfb0c6f640aad6c0389d46ee89df9264c03bdfefc45db9411a296d6e76b2d70a261dd3491b43d86a471d0a1113a6911f058a58b85b0', ['checkOutlines', 'autohint']], +'four.cap': ['w497l301-15l384-15l384680l326680l29229l29176l489176l489239l83239l83252l78224l215436l352648l289615l301615l301213l301201', ['checkOutlines', 'autohint']], +'four.dnom': ['cd49ddffb15e05d7d28efb21a1ba71a359844cf3041a2b9f830738c66089d4e1bb0f5374280895a406ec62c1ce47a7d2fd8f90d179feb8b2785defe504dc4e12', ['checkOutlines', 'autohint']], +'four.lf': ['w497l301-15l384-15l384656l326656l29216l29163l489163l489226l82226l82245l71201l200396l329591l285570l301570l301203l301184', ['checkOutlines', 'autohint']], +'four.numr': ['9aaff76dc5e3e444000bb6b189eb3165c046fdd02823ef536e55aa8178e9eb4f962da8dca83092015d9658720589abe6a7b472132ad819dfe237041b52308353', ['checkOutlines', 'autohint']], +'four.osf': ['6b2c1f3c3c6b296fb14f5bffe4ea6539bf47d1d8ac07daa3a67a44cbcda7f53ebd786b0eca671298cdb6c61565c315e06decd0a5525953f65eba4fa6d9500f92', ['checkOutlines', 'autohint']], +'four.sc': ['w454l2640l3450l345558l288558l29216l29164l434164l434225l81225l81238l63192l178344l292497l246471l264471l264207l264188', ['checkOutlines', 'autohint']], +'four.subs': ['edb5674994bf3fd5664a98ade756f126bc2b86fd10db731638ae3f0cf55874e867ae162186682299c0afe1a1e404ac11c8fa8aa6b1e5ba27a842c5650f3b154c', ['checkOutlines', 'autohint']], +'four.sups': ['w370l202427l267427l267830l220830l32574l32528l331528l331585l76585l76599l71571l152687l233803l195772l202772l202567l202549', ['checkOutlines', 'autohint']], +'four.tosf': ['a0d003cd5613ab052c71c81adda2387618afd978f8233c0616eb736372c20803e79e11fe79c13108a36e29b1ddb50bb51f5f0214e046be25eec8e53882b40ee6', ['checkOutlines', 'autohint']], +'fourperemspace': ['w250', ['checkOutlines', 'autohint']], +'fraction': ['w140l-147-25l318644l287669l-1780', ['checkOutlines', 'autohint']], +'g': ['84d156472fec7ec2da7ee61fbf5d4eb56291d580c6f1fb7f9ea28639528ca4a390fa315ad1b0fd8c9e7fb7e7ae64af7daa0ac8f2d0ea561ad9dd8b1db626f126', ['checkOutlines', 'autohint']], +'g.sups': ['773827b309af30e2088b74de19bdc8decb2212ea00e8177772e3457177e1a7ea8e024d212cafeb6ef16c99919b3ee598df95261f034ad5c819e0a7db0f89b807', ['checkOutlines', 'autohint']], +'gamma': ['36f4e30adb34782def1ce824450dc1da8c7d42562592be8a4affc4f4edb7a67c62e17affd3764f427b883bc44c26078ad7ad5c757c15d0ad19e1dbf2e02046dc', ['checkOutlines', 'autohint']], +'gbreve': ['595e717f62115e53992589d58152294e0712910c6a0364d41fcf4e79f8322173bb4dea258bbeea88fa0bd8b3962c19335d72d32c62c41abbf347dc7e14f2b94a', ['checkOutlines', 'autohint']], +'gcaron': ['54c1921cf07494aa3efd4da95f750bb29e8932c70048d8e9bef7850e2bd3f04facbe156ae8ec6e24bf0df311ae74ee6c9bb99338288754e545e73f46461bcdb9', ['checkOutlines', 'autohint']], +'gcircumflex': ['fe157ff22e177e92cf7215f2113ba49ce12037a0a31a4abcb9ba8311852daf6b8132ab8fd4a24d23cd557e1a222db07f474659fa3f2e1f09f4549b022d961508', ['checkOutlines', 'autohint']], +'gcommaaccent': ['8a55d6d639ccb0ee54486b589292260100cb48a86724cc2305364673ebe5124026a134f4636f1d797a9d29aff928507628f4f79ca7d59384495828aa9a67cbad', ['checkOutlines', 'autohint']], +'gdotaccent': ['bb948662cce0514ce9967a6f3d0749938b9eff04abdee609be09e66154b58502e31a99240058aef044d648a0df9ecad0e1cb19e068f1798f549ef043a2392b0a', ['checkOutlines', 'autohint']], +'germandbls': ['d62eb7eaf30b2f5c381fa6534e2121f8296d9b870ab54da2f4154a1ae621e8b2bf278509d848b2d1e3ecc44dbddf519a1d87dac225d0956f5ab0e3f313be76e4', ['checkOutlines', 'autohint']], +'germandbls.sc': ['4984bc5953f21c3e8375c97336e6b88f43aebcc900f333bf00222bd6cc3488db2284611fca238032fd56d2161ee5d0e6ed0c0c6519d9594776b1e0c9d0813697', ['checkOutlines', 'autohint']], +'ghe': ['5841283e3bd6c6245cf5d9d0cb302cada67b2b2b37adf5101eba9f0c55d85b284be010b4a1c14a18b2d128b2956688af3a53bfffcd5bc936398f0db35d0b22bf', ['checkOutlines', 'autohint']], +'ghe.bgr': ['4751ad3893019b687728f43f49e662b473952a779d8ffe88bddb3f33e253ba07dbab4076a144c47e15075d00d19e079ff32e409d6a2cd8e910becf6a8b757cd2', ['checkOutlines', 'autohint']], +'ghestroke': ['34afa29f579b5370f3f3574f6898352a1275245e2def8c06c554479250e2492110582f11114aed4f671a6748669d2b7fa2afaeeb94c226b4566b945b6a332cce', ['checkOutlines', 'autohint']], +'gheup': ['be378b3ccc31657c285c866f7c164541bb8bf68117a58c2abb146dbff9d84c98cd081ffce92e479f6d20ba4ae27333be6ade9a87ff2457bd716a1448cc954cf7', ['checkOutlines', 'autohint']], +'gje': ['c54cf90693a5984d3162ee145b4a98a1143b80e89656640f1c8c14be4550e718ad827321ebba4129115df6057a2390e02b24e755bfe5b28fe2b03983bc426bbe', ['checkOutlines', 'autohint']], +'gmacron': ['0a3bf2a8de352f8e323889d7642ba3dbdf0c8b3dee2e93586e6078a304396953b2596987812b5ab62b2e3bf77b19d9a0db313b478a193ee90a515d44cf02f49d', ['checkOutlines', 'autohint']], +'grave': ['a160d431ab25d29edaf0e0eaefa511bfd23dbc2348a9f6a0e3770a668effc7e2fc3f4031b02112d01eddec613e990f90e00b9c730bbcbf8cfe389cfd5c0d31f9', ['checkOutlines', 'autohint']], +'gravecmb': ['w0l5557626623-2669c-34717-53748-70758c-88758-108758-126746c-126720-126706-120691c-92665-51628-12593c29557', ['checkOutlines', 'autohint']], +'gravecmb.cap': ['w0l67746377786809c-27840-55868-72878c-89878-110878-127864c-127844-127826-115809c-77788-367666743c49721', ['checkOutlines', 'autohint']], +'gravemod': ['e6fb50b40ed0fae33020cbc50b77f329ed5b4bfb51972aba3b04b2ae9509d4a1fa21c4953c166cb2a87e929f03798a73c3e51ee7a6413f4b25dea5f898a32cac', ['checkOutlines', 'autohint']], +'greater': ['w530base:less-100-1531659w530l57306l44481l474135l115336l115323l474524l444578l57353', ['checkOutlines', 'autohint']], +'greaterequal': ['w530l290l5020l50258l2958l486307l486354l88560l58506l427323l427339l58156l88102', ['checkOutlines', 'autohint']], +'gscript': ['151e54c07477d85f0c4dbdcabc76765968e8c73787619b6bfd8ebe7741e18fbb3a4a98256fc75e99a2dcd5a7c7df906836a7545613ed140b851cf9e105151b8f', ['checkOutlines', 'autohint']], +'gtilde': ['0611b117890f6f207bb18a28e370668d7fa278764dce3d3c5946980652a729e793030b62e24e9215ccd8343e35046aa7764939a1a80bdbb052c055ccac16c1fb', ['checkOutlines', 'autohint']], +'guarani': ['5d5289e5b7ca8d2a184283c5f0ac2ac4c6975bb26afced23b90986d686862535d667bc6ec261ac13151b76aee0c5a8bab2e87dc97b69b803326b8b335663c7b3', ['checkOutlines', 'autohint']], +'guillemotleft': ['e1b29c1cc38eae4ed1b796e4762009ccf207aca411bdface16d2d1eaa20138f036ff3db005788fb888f68a9fbf2ade0410068de767f46e1810db58c489a9d599', ['checkOutlines', 'autohint']], +'guillemotleft.cap': ['a207850c0eb275c4660b1098cc23a3a44333fcaa552e076fe6e7ae142d7571ea5e3a97580e382bccf9c4bee7ce9b530f35ff208bcc7dbf91cfd60c9ed6adf006', ['checkOutlines', 'autohint']], +'guillemotright': ['1d9f4f998c1506c2585424f7c982446652dfb680fbcbf975b053cdf064883ca7ca1adead58d1823a761ac051071aaa813254928f8ceea8104df75fbd48d119e0', ['checkOutlines', 'autohint']], +'guillemotright.cap': ['dc39a6a8de4e8a457c198187fc86971eb26b4a5b8fda95b8256662912ec0c88d723c529aa398f4d005868e24a51b919c5792e91a5d47d2e22322e325b29147c4', ['checkOutlines', 'autohint']], +'guilsinglleft': ['w285l23550l25977l92273l92232l259428l235455l30279l30226', ['checkOutlines', 'autohint']], +'guilsinglleft.cap': ['w285base:guilsinglleft1001045w285l23550l25977l92273l92232l259428l235455l30279l30226', ['checkOutlines', 'autohint']], +'guilsinglright': ['w285base:guilsinglleft-100-1285505w285l23550l25977l92273l92232l259428l235455l30279l30226', ['checkOutlines', 'autohint']], +'guilsinglright.cap': ['w285base:guilsinglright1001045w285base:guilsinglleft-100-1285505w285l23550l25977l92273l92232l259428l235455l30279l30226', ['checkOutlines', 'autohint']], +'h': ['84b6a82a90b2c6d659b36632f6d058a4efec8624376d34dc83bc898a286f62295bde837311deac41100286c33aee99fbfe8532aab3dc55290aae3715040c1d13', ['checkOutlines', 'autohint']], +'h.sups': ['d20bc1734a1bc754050eae1510f476520dd8cdbb945692e0a520b2164bf45359f7f11d08a2271725ae025cdc139a9ac7d99a7d4be9f8cc773de467377bb7f3d4', ['checkOutlines', 'autohint']], +'ha': ['2cbd8ef0e09fc7b69a8c4b91c460e03586cd0cb202c28f1538455385f05dfe1bf68ccff46a5048cf19309bbcc19ad9d7b8ff09c109daed638632bfe8002608cd', ['checkOutlines', 'autohint']], +'hadescender': ['75e1d6ccf2a180a076bd81cd199d30e226c3b398f3431096e0367986373d5875d2673a29e5478924f7952abdbee968e6d47b3d6f580edbef943b9e5db56e3562', ['checkOutlines', 'autohint']], +'hairspace': ['w42', ['checkOutlines', 'autohint']], +'hard': ['e67c583d9108304953b6af6de3f870bf58bd0006282f6d19e74429b18b1d6f901328e83ee0ab71daf2eeb9b2e34aaf3032a3e49ae007bbaccdfba756823ca9e4', ['checkOutlines', 'autohint']], +'hard.bgr': ['b83613aa3f3bfc6ce6019e4864b7860f671bff232c63f4afb227ff69065bab14ff570b4489cb5bace9f8c44c693b64cd8fd2bfa1fe30acd83f474915934cdb05', ['checkOutlines', 'autohint']], +'hashMapVersion': (1, 0), +'hbar': ['03500b43446094b36061eeb23dc662f54008f1a21d36cf37b7c2f3c8304ca2d818c82eb35a52da37fea7fed69cef4e0c2e2a20e8e39855e13b136cfef4479ec6', ['checkOutlines', 'autohint']], +'hbrevebelow': ['f097453a378d4eaca00dc1e5f33cc8feb9c4e832f5da390c15d06a192129a54352d601a00085374f7cc22077cb6ce4ead57306ebb56a381e78e66051fc42d3a7', ['checkOutlines', 'autohint']], +'hcircumflex': ['a293b2370d5537da50c70688ca38a9d93a9dfdaf304b220db4e00c9972c2e385a1d5d21fa23a27f49052a873f367026de5f5c69aa5d8acb8bf3ba06da70fa319', ['checkOutlines', 'autohint']], +'hdotbelow': ['e92b3c87edbbc55eb27451b23824df52593e8a197899a3a26d61d0496fb5e3e9ce87b37d3d3ff3ae8c195b8b8062a360a8d9354996e0e2f197d98eec89e6c6ad', ['checkOutlines', 'autohint']], +'hoicmb': ['w0l-195533956074596c746477470533740c-48747l-58680267025660c256322560910592c-28584', ['checkOutlines', 'autohint']], +'hoicmb.cap': ['w0l-197183972674755c747967484633876c-48883l-58816-181125801c257822576610757c-28749', ['checkOutlines', 'autohint']], +'horizontalbar': ['w812base:emdash100100w812l40215l772215l772280l40280', ['checkOutlines', 'autohint']], +'horizontalbar.cap': ['w812base:horizontalbar1001055w812base:emdash100100w812l40215l772215l772280l40280', ['checkOutlines', 'autohint']], +'horncmb': ['w0l047574481129540c129627129648125666c11568510269689697c806975569741677c416604162865618c655756553245509c0502', ['checkOutlines', 'autohint']], +'hryvnia': ['625b9ae37c67a506ed59ee6bd35b13ff494efc400a8700a8ba581f77fe144c0b506f946cdcb9cdd78104a3d42824f82de7778ee132069c9f9793743e44856aa9', ['checkOutlines', 'autohint']], +'hungarumlaut': ['b26f5a0140462c29ff8738682dba9251e5e4698a33ab438471148c9db573a8e703cc4294d10ffdc17e70b95d398a8f6d9754086a37a7df5031abba5ffeda4a82', ['checkOutlines', 'autohint']], +'hungarumlautcmb': ['b07e04a59fc5d9c3c59fe4cfc76912c48325b5a48173dbfb640a80b474905fa6f9685d3ebbda070a75adab8e5f2a047f5b2720a455f78c4668d7a011b3037a51', ['checkOutlines', 'autohint']], +'hungarumlautcmb.cap': ['2176748efc27598cea5fc727ed08ce70061b81889afcd43cf50e137713e5bd45f6bc5a4ffb1e4a9f9557213424ba3a080aa7b32a3477d739da1d76ffba3368a3', ['checkOutlines', 'autohint']], +'hyphen': ['w312l40215l272215l272280l40280', ['checkOutlines', 'autohint']], +'hyphen.cap': ['w312base:hyphen1001055w312l40215l272215l272280l40280', ['checkOutlines', 'autohint']], +'hyphen.sc': ['w308l53250l255250l255310l53310', ['checkOutlines', 'autohint']], +'hyphen.sups': ['w245l46578l199578l199628l46628', ['checkOutlines', 'autohint']], +'i': ['30585365afdf4ef94215580b181b029b3d867486c2a87b1fed411807d379c020d78e4f397de7896a7dbbaa713928b90a78b59ce2cabace1dc824ff01b6b831ca', ['checkOutlines', 'autohint']], +'i.sups': ['85b4eee4b27f94861c435cd73a72fd770dbfe846b80a90553f45e66e957138a322ff01b148de8542a07dccc31540c57b52ac1fcb4c483e103f28b21250fbb3da', ['checkOutlines', 'autohint']], +'i.trk': ['183fcef000cb11193f92f9752fbedf63dd300269d81cf33b7b5eb737d926d404d999fd58b35dfd85382c58f98b6f897778e6ea2579e8758cc4be3aeb0a490381', ['checkOutlines', 'autohint']], +'iacute': ['c6f0ef89999fd2b7625af130a55bf8ecc11ddccfd58be15613af410c65fae5864bdd895bfeb62037f090bce662a81e726b2458527e159afea6e0b534bc5c9103', ['checkOutlines', 'autohint']], +'icaron': ['4042f97aaf62f767c9b20597bafa5b2f1482df1ee492e7198c0d871ddb24928439085ec8cb5f6e2890c25f40594294e9b4dde1388435ed6562b148a1da6a6e89', ['checkOutlines', 'autohint']], +'icircumflex': ['30d9c423b33c9fcc58a9ed0889feef3ca5241e71b84a29439c5424d7143cca383a6e4fbe4b689899a5cb861a9ffab86fc9880e71d0eed4364dfca462f69012e5', ['checkOutlines', 'autohint']], +'icyr': ['2c7a9dd3b99b0f015dc8690400608415aa53d4b588931425e35fa0e19eca8f458961e0b82063324d2627ffd9668db962abe2a4d35559e06c926de9e01be737ba', ['checkOutlines', 'autohint']], +'icyr.bgr': ['f9070b14913d9ccfad69dd2ff1df7a9dc64d65a1b35e253589dcedc3d442d8e81bf0e9374ad30a5c851cd8f53bcacd83aee9a3818e2cda31062bb1f7abb8f561', ['checkOutlines', 'autohint']], +'idieresis': ['79e8a0ff252190b5f1d8c60e5c8615a1100f4b8d37e846f92a0f347725a2d51a6eedf9a44967cfb2b865177c99fd0a74d84d6034a67b0ff94cbc1bb1c1155313', ['checkOutlines', 'autohint']], +'idieresis.narrow': ['341e8b8c5842a02f33946603578eb17010f682289a467c1c5280ce3931360ee810a0e52721644fdb37ec2b4292073ef5e6c9bc11f1450c4591456d359a9a2321', ['checkOutlines', 'autohint']], +'idotbelow': ['a6a56083da8cb46f8e7bee6030e495254aa7d9f7d9f3935adc0a8d13adb9cdd5ca08c86df8ef7f306c3d502c9572de17d42552552284f8397a1df9a52ebbaedb', ['checkOutlines', 'autohint']], +'ie': ['e761a4e2baee58c3df2e74b41788c0aa4c960ee546a0220d71fb01a6f5a9d0393de0ed7cd2e1168450c9f5362642a1521f8920fd3fc2078ca66f64ee3636f9a8', ['checkOutlines', 'autohint']], +'iebreve': ['c423bd4399d206de8ecb2ada841a71ba94e56036ee4d2aeaa8e498b3f986829cd83244d3b8ea2c30bf8c849c9b25e8352d6fe09c05bf704cdd40fe6f749db524', ['checkOutlines', 'autohint']], +'iegrave': ['fc340fa79a18374034ba70a4fccfc41194d07120c10aab07541a10c161b278172905e97a4955ec6c507697281395764665cfee17dc3572dee547c5a3f254f883', ['checkOutlines', 'autohint']], +'ieukran': ['6291358816130203a785e026539c058649f051dcf7d60a9a867e8355912949bffe74edcd64892de5a22c8d25241d9eeb88f4f564b0cbe892886b9bfc67007a4a', ['checkOutlines', 'autohint']], +'igrave': ['ad68d3e8c5eb1b64cbfcdf53b0c21a9ac112f0c0f9ad061fd97073bab4d22ff8d26435d7d3d228146b2b2bbf011204d09a1ee014857ee5f6ebc55a8a75d30b77', ['checkOutlines', 'autohint']], +'igravecyr': ['06a317fa0998e218960a6489a388b8dab2ecb3bf4f91736a2992aab2071a2e301570534c3686196ba189879a51180cccbf52c28e4ed5f2ea7e557d9b7281c7dc', ['checkOutlines', 'autohint']], +'igravecyr.bgr': ['731e6add0c021c5815fb1dae9c770adc9803ff6e9046eef14d7ad796811111ee8673261e37d8e31e226e1d12c4b63f822471dfbf1e6179b50451f84a8b2c2a93', ['checkOutlines', 'autohint']], +'ihoi': ['9e7547939b107cdf1c7bb329c9f3cd81f0951c5249c9ad52eb5daf770148a7dcef91e9ce30baf21d2976037374bd87e542a51132f8eddc31b54ff3f12767a236', ['checkOutlines', 'autohint']], +'ij': ['704fda62ffcddef6ff466ef7168f7518ce71c894290c87758a32ef72c9329d28012b32d89d819ae42b51611cd741100ceb710609cb9b5b6f3e62ba1d69f8224f', ['checkOutlines', 'autohint']], +'imacron': ['6c800ccf8bf49b8c6251e4a97d43a672e8452b5cb63eb2e72a0796187eceb8fdd91dae81e664b873bd348bb387bfbeb488c34602480deea90022d847230820b5', ['checkOutlines', 'autohint']], +'imacroncyr': ['8b53ec2d75ecf94a70e72d9e687fb74be5b7f2ca1c3c02f0681f7137cb7976d0e84f85117f4155b0128664db1be5c11bd55f3d4e847250c7801832138a3c62be', ['checkOutlines', 'autohint']], +'infinity': ['fd3f19f8aa4acc929ba56df942938ebc82c74877311eafb87f62aceccc52ddca6b20d9e5c4165ed8adf6413f07afef140ba3fb60b673710c62a76395c1c5e287', ['checkOutlines', 'autohint']], +'integral': ['2406a10c9e72fbd987765186771901c001a7d2f1bd60c77c774d345dfeb41eb779251cf2d4e7c1b02f3d2e34a6cb80c9955b736f3ad87a6a397807561a330b89', ['checkOutlines', 'autohint']], +'io': ['38c83bb640fb48080ed98a8acb279f4d8afd2602b057a8913ef4b5fd1d0c66e9087031067d1e9e21ba68ebf0ffa8fc8a8462c1c54620adc4f90bc55fe5f257e6', ['checkOutlines', 'autohint']], +'iogonek': ['b85cdee8c5729558d49a29c61e148e57b82203e35c4fbc219303a7e4d674360c9b1f3089febbde2b96d1c7222b136a1edb16004293b73b7c8bc1b8e2d0745fa8', ['checkOutlines', 'autohint']], +'iota': ['w287c191-13227-1325610c27240l264652506023556c221561905617372c173136173203180278c195477l185487l98469l10112510229129-13', ['checkOutlines', 'autohint']], +'iotadieresis': ['a4201c3bb2f96f1c53df23faa3ed6d66ab70f6893f6f307c46f05137dbf742fa84dc0a48da7ffa9a2cf0cfb1a3b5c612b65e5c851e180dcf5210da9cc4978e92', ['checkOutlines', 'autohint']], +'iotadieresistonos': ['147703551d83537611a04106d0bd6ffedc3c6b79606a9332d714ca256fe75f21e89c033d103c296e1ead7e7da41c25abe7fcf3f4bd5f5c606392b5d45ee0aaa2', ['checkOutlines', 'autohint']], +'iotatonos': ['ea9e57c671031bef6a0c652ef7c24d0c4e9096ef0d684940efdb3050b8189d2859c65849cdd507a477d3cdefe6c3a77dcc22631a1c9d1a81c25677771afa6f1c', ['checkOutlines', 'autohint']], +'ishort': ['12653ecdfca89fc4b27a192069ed0a66f359a0b32567b08b793dea9f70aed13a0699aba67986d930157d2e4ca4d884976bfe63f5aff7c84b1c62fcb6debb24d5', ['checkOutlines', 'autohint']], +'ishort.bgr': ['50e030f17716b1b15b849e8458e92e8d3813384ef019c169a2593fb05f8605444fda03592af1c51c32d7ad6487d1ac5ed24551958dbaec5f8210102e2e802c77', ['checkOutlines', 'autohint']], +'itilde': ['4c57b15c7e78b4aa8553dc9357ce0078c2bda958b5e9e347ccfc0ed6ef1ad3f90163fb29abf08755ce863af234591af79d06cb62b50e9391189f953af9c91abe', ['checkOutlines', 'autohint']], +'iukran': ['183fcef000cb11193f92f9752fbedf63dd300269d81cf33b7b5eb737d926d404d999fd58b35dfd85382c58f98b6f897778e6ea2579e8758cc4be3aeb0a490381', ['checkOutlines', 'autohint']], +'izhitsa': ['9f93fbf886062923eee4527a6c9bad04c2406717bb97f8f5c07797eeaebe8c5a68fd7f2777cddd102eec77bf7c5890764402e75ca76f1c9a91cbacad7278848a', ['checkOutlines', 'autohint']], +'j': ['6c2c9258ccaa27cd48c4804a1dc3dae3428b0778b64ff9b7bcb746420cd7933248d2ed02495ddf3a819df7032123d15a8a22f8ad9549b6cdca6e9f696ec48a04', ['checkOutlines', 'autohint']], +'j.sups': ['6d80c70b5a70463d1b049c7d65ac732e2b0d0a19afe90d20db10960a34e3a075e13accd84a759545f3c455dfddb1a48d0d6315f0a7498bf1571e4c28a2b69304', ['checkOutlines', 'autohint']], +'jcircumflex': ['738a8b977273f6f80408c7c5b9072adc154abbdf90579e0ad322980b71c0b8c18afa4d5be6a4a5a20e18af3f4438826e67e2d40d058e9b3b8fe98f85a1323102', ['checkOutlines', 'autohint']], +'je': ['e09a5f76b1a2bed453fc5c6f708dc4b619e80143d4e1204e1230f437b8fce7cd29df926fdae698dbcf6cd8cad980778629489ae83a235d00f0fcd911aed73eff', ['checkOutlines', 'autohint']], +'k': ['591b4abbbb576bf01cb5d7cec4f36a1313429eb4a6405e419efe2e5f3e5308187d3e3466f9538e04e515bbe328db3920178feb01b14617dd7d3b53a28e090f08', ['checkOutlines', 'autohint']], +'k.sups': ['bf391cba04d76a13eb85b7361699ca51067422911a525aa2e7a5b9c69cf6d114670c88fdeb4ad63c593b0e8e62b629b546d5ce8419050bb64e81125c4fc7ca67', ['checkOutlines', 'autohint']], +'ka': ['aae9618d40810100d7b652b85f621116785e8763f941cd053461b02335c3455ae9eb0d528eec189f33262c8f5c2bddd0988b9537b3edb663c4d52453f7571214', ['checkOutlines', 'autohint']], +'ka.bgr': ['0530859ee15f72661f10197dad675f9f1ae5d76e5e07b6fa2a0af95fdeec8fa4d4ccd89417a02f33dcd7805900a4e4bd75bc5ba7ceeabf9add324532694cc4bf', ['checkOutlines', 'autohint']], +'kabashkir': ['b3271fb6a5dd1fbaaf917e26acbba6e8c687cb2f8f1542c2cf52ff7ea3460897b9ec09c8fc17fdc64df3186f3ebed5522f7b043dc36e967d4d8088810ccf01f6', ['checkOutlines', 'autohint']], +'kadescender': ['9b52f5cdf3f1417f59b1581a4f9dd7fb63cf113cc23513a5fe5abdddbba841e99f29eb89d341b21f2bce135727747c922883cf37297d3b93511cad2b1d55ca2a', ['checkOutlines', 'autohint']], +'kai': ['cc656859278672c62b29ac930fb3d6329171701f7976ce913ad93189cca3a81f5f998da8ca3af6a1fd373c73326a406a89e214857a493fd0b2b5d31ab3bd57ee', ['checkOutlines', 'autohint']], +'kappa': ['5a8ad922467674b3ead5a4cf14515e213aabc13bd870f8eb3c21c3608b84f81feee2b653613b0237536d119601155e8bd513f6fe448ae5745abf3d28fa6bf13d', ['checkOutlines', 'autohint']], +'kcommaaccent': ['31ae0238438ea0b96f47d82ce97230bbc4d218c1198486e74fb03a81736cc9cc37a43a09ac5dd2db408cf47aa6a757b4ae1c0674191e5f71aeb86b90bd177c17', ['checkOutlines', 'autohint']], +'kgreenlandic': ['2d8ad1ed3928cff2b106f5dfe03c4843c57681739e196664079a5c95a5e48b6ea337888e6937a1a77f335b6f6ef4287a58486bd61b7b0710eedd701bf70a5dfd', ['checkOutlines', 'autohint']], +'kje': ['76b6e91dcc16b68a5108d3bc08a42d5811b623ed7655649b9a91108e5735a82d2c4d875a0e8db764de66d07ba0b3136e7e82c0baf719a59de08732e247f1b91a', ['checkOutlines', 'autohint']], +'koppa': ['541e3e21bd412dbb307220f8f365826b13b28321e5cd514e447597f49beb622d7663bad7aac433c0eaf9d3a1c074e582414dc2b31b8ea7fec6d8d9bdcc275acb', ['checkOutlines', 'autohint']], +'l': ['w298l250l2730l27336l16056l13756l2536c1040l194019270191140c191210l191589l195732l181740l25695l25659l107649l10721010714010670', ['checkOutlines', 'autohint']], +'l.sups': ['w204l18427l188427l188457l113470l92470l18457l69427l137427l137895l127900l16870l16842l69836', ['checkOutlines', 'autohint']], +'lacute': ['ffd95a310017feaac0484a5c0c3308c79cccec8dd1a89f1a816f5895ff9e3ae1761fe278f0ad8269bbde9cac97d212b429063cf11191cbcf9bbc39091a7509ac', ['checkOutlines', 'autohint']], +'lambda': ['b80807517af1b722dde4ccd57467e77f84b34ae77091f7b0162a40d343463d0dae8f9c1567691ce6a3ac76c2664e4e19a44c86fa48d973e74af9053ddd7ac05e', ['checkOutlines', 'autohint']], +'lcaron': ['3b2dd47c69c4fa9c9afc2826d170b778cd92a17bb88eb889aebfec400f98e65418a5bd2a4d6c9ac29776d4d3169f3822259c23f37a24ce7fde4232bfe2ff0084', ['checkOutlines', 'autohint']], +'lcommaaccent': ['e9c5e8f62eabdfc978a9f2789276e29da77abc446f22b2e529304404e61d2477e5477aa052a2eac74fdd543f7109b2a6b3f7ec8440ea70d8939d7759705edba9', ['checkOutlines', 'autohint']], +'ldot': ['7ad59d089ff143737fc2bc296ba9b7121ccb1281c5d5888fa96e389e4c20563f29cf92002abb24d96e74049eb9ec83235934bf644a1c3f98a9e6507e432ae377', ['checkOutlines', 'autohint']], +'ldotbelow': ['af2dc58a3bf556a53b5a7aa8e814e72013c7140b55709e9b7e7545afb0e0b59be5248323361fc415b22a222dc045801c8edac7245c3f8f7c5f90b4e46667deac', ['checkOutlines', 'autohint']], +'ldotbelowmacron': ['e8efcd373aa51fb28d82b1d8ec38b25a55eec964904ea0d1b6dd573e834cb6475bedabdf07bd80e13ec19da9b44266a1ab647c02eb0681b49487a2360d1f752e', ['checkOutlines', 'autohint']], +'less': ['w530l57306l44481l474135l115336l115323l474524l444578l57353', ['checkOutlines', 'autohint']], +'lessequal': ['w530l5020l50258l2958l290l45307l443102l473156l104339l104323l473506l443560l45354', ['checkOutlines', 'autohint']], +'lira': ['ff6dfde4d75b46e3a331c0ea2831976bd1850a55e05297e9cb7e54a5cec749a9f9ce0fe892b4d0d5bd1e6b0d91e306de0cc0ab8f69b7d5c6553e393f84189878', ['checkOutlines', 'autohint']], +'liraturkish': ['adc82295f01a9ee06a00893d95dc21bd73ee09dc3e27c7e733397a61c676f7d1172125d266f4cdd25bbc7a6faa766f8f6577030182b4d961f4d79e33e9569938', ['checkOutlines', 'autohint']], +'litre': ['6544722d0abd2509257114cfcc56df9ec01b8d0f47371507a4bb9bcc832ef94b7ad71a0b26d30354312a95d7ba38b525f5bb985690630dd089e161007ae1dba4', ['checkOutlines', 'autohint']], +'lje': ['2f24eea005b981023e5d034962a12012bc3ee0920fd5ca39eed40f24771890a4cd67d1dddb3d696f0fb030e3c3e6e62c5daf44a17cb48ae29850ef020abc87e6', ['checkOutlines', 'autohint']], +'llinebelow': ['af6593ecb83153b57ba9e44c6d0c34866ca13a896391210b8db488a7432aa8fc8d1e77eafe4a2b6a41599115eea504f304a8ca381314beaa08ac8e527632a4fd', ['checkOutlines', 'autohint']], +'logicalnot': ['w530l29343l458343l440364l440159l502159l502400l29400', ['checkOutlines', 'autohint']], +'longs': ['5c1b9cc4ec506635d75da684926ab257bc87fb5f4bfe815da2e1ffaf08757e4c7717ec84d2cd2e4457025431b72054e9cd2462170a5274838ae186670b2e0886', ['checkOutlines', 'autohint']], +'lownumeralsign': ['88a42cb3908fcc44e4f59be305c8cfd41257a74c28f6d7a06cd475a9c4300726a2591737e213ec062f9716a31f26edc14b13b9af719c505a7c86774934ed4050', ['checkOutlines', 'autohint']], +'lozenge': ['w582l435325l29141l147325l291604l500325l298701l284701l82325l284-56l298-56', ['checkOutlines', 'autohint']], +'lslash': ['e6df9716f78a083f61a671a07d4bb58e706d213233fdb8f6ca8706297dbfdb2841bb567d1301d95bbcb532e4032caadf4958fb2f5244b85e33aab2667e36e38c', ['checkOutlines', 'autohint']], +'m': ['cdb8ac09f3e0a89625dea5045c28133db2bc0904291fe11b5a88455574b509b38116c69f949536b21514e968eb8865fe216b2e2db106988f53edafb16889dd51', ['checkOutlines', 'autohint']], +'m.sups': ['d43a44acf102ef30e58ac546078fd9b32f5e1f8044d4d0ad3c1046d4084d6c08732dabd4b9f02b82f5e6f23e65198dfb84f446f4f231d245806b133bbcb3d891', ['checkOutlines', 'autohint']], +'macron': ['w400base:macroncmb10012000w400l-120596l120596l120659l-120659', ['checkOutlines', 'autohint']], +'macronbelowcmb': ['w0base:macroncmb10010-772w0l-120596l120596l120659l-120659', ['checkOutlines', 'autohint']], +'macroncmb': ['w0l-120596l120596l120659l-120659', ['checkOutlines', 'autohint']], +'macroncmb.cap': ['w0l-140759l140759l140822l-140822', ['checkOutlines', 'autohint']], +'macronmod': ['w261base:macroncmb10011310w261l-120596l120596l120659l-120659', ['checkOutlines', 'autohint']], +'macute': ['590aa734bb91f6a2679a09a1ecf7b8a1e54c17a98e8e86732db567f3d9a3e2c26dc45d22eacd8b56e1dd46c1c2329c1c2c47b5e50fa91fd7bfc0c8869480d87e', ['checkOutlines', 'autohint']], +'marcaregistrada': ['d2a2529bb08179a8ca9aa0c2a925a66b0bbe7be75b5d718e72ea334a71b3178070f33b70ffdcc01dd19fb14c67ca93012396a3003fc229b194e492c3ee398369', ['checkOutlines', 'autohint']], +'mdotbelow': ['40a6ff0aa5a640ef22a6f76dacb28e4dabda479ab532c77cdb16040d686cca4e23a66242c8ae14524130760a995cae554d3c70c550f6cf54473d075a0871b3c3', ['checkOutlines', 'autohint']], +'minus': ['w530l502301l502358l29358l29301', ['checkOutlines', 'autohint']], +'mu': ['35fbee017b3053fce92528ac9b302aa67408d94a57e4a95886a0fda3721318add826d3a3d783ae2f097c3b16e01404397a6d00fe80ad5ecd2a6a177fbda7cc93', ['checkOutlines', 'autohint']], +'multiply': ['w530l447107l488148l84552l43511l488511l447552l43148l84107', ['checkOutlines', 'autohint']], +'n': ['bff6b74241e9a4e8da646749ab7b7333d72722290a21d32ac0c9a693f662fc55e34ee9c51d149e9c87149f75c91628cb37bdc8a7b813be2e9173f89fd0f8198f', ['checkOutlines', 'autohint']], +'n.sups': ['e8596a363bc153bca3537212321b4ee47ec388e4ac5f8ec98914512a96b3d0f68dc3a0ea74b3d720e8993cc42ef9d2a7aac2d09dd3aba311818692a4aeaf14fb', ['checkOutlines', 'autohint']], +'nacute': ['d35e9e19b7e7335fc419e6257d0fd977018c7ce58e360ca493d0dd0b517f9e93eecbf413ef02eb54e47d2cb84d05307fb4a6e3059be348bca6bb8bd1dee85376', ['checkOutlines', 'autohint']], +'naira': ['1d7b553e643f5df47150c68c5dc9da133b67e20a3db11ee42b4d12449b07bb9abf2daec4aa9974e41edb430dae476b1037c1d0ed1a28f1827dd03d477ec07559', ['checkOutlines', 'autohint']], +'napostrophe': ['5780fd6686ebaaaba874705cab8b95e136e7d5c856bda15eeb477d1392d2914f2e86b96804a2e58b70c5ef0e8d1c78ec2fb46ec1beade596ff4a570823f52289', ['checkOutlines', 'autohint']], +'ncaron': ['810c825bca86b7c4e6453dff12e0d9c32ac435d853dba10c91e8d322f99150c319ee8b8f5c730f20fe81d27e7c9f50382b5a61cb9cbdabc5b583449afa4a3b5b', ['checkOutlines', 'autohint']], +'ncommaaccent': ['116301ed906a39c9d7eb71dd7f2e1a4d5189b083236326716a718b6c805b98640a1abc65461ae6f65fa4a617104dc1294d73490692dbd58043aa2225c0ddbfe9', ['checkOutlines', 'autohint']], +'ndotaccent': ['dbd116113b9a4128b5407f1457a779b7c7428269854f64bcd402270c95d688a868098350f5ee0ac15cf055bddacfe2c3eb1a583d3deddf1ea63939ae28124813', ['checkOutlines', 'autohint']], +'ndotbelow': ['5ed6c56871d7dfcd92fd07bd0d6a730d1176992291c9dd69ab9781d9a82964769ddbe890b7b270e34d294b67f7649681125e93dfb9403113fdb18eaab8bc2311', ['checkOutlines', 'autohint']], +'ngrave': ['f82ee74db49820a48591a82feaa7bee2ba81d3be2d887d3569594b1ac07da08690bd73f81bbe0b65a9461e71e58f11f423912c8cab21c6cdb52b6f42c941efab', ['checkOutlines', 'autohint']], +'nine': ['233fbffbcb659b126f6dacc72bfa837433145316ca956a4d35d1ebc5f6359689bfbf0758ac5b4cd48c53cf63b51fdc35c542df6114c5e705b83117a15f6c39b7', ['checkOutlines', 'autohint']], +'nine.cap': ['a12bcca1a3acfd7c82a64e40a14625a7f375ccec9de4e8b31286515d3e2af8ba7fec5cdf72183d337fcf202376fd199e360ed34de27e0fcf406a23d172106a0b', ['checkOutlines', 'autohint']], +'nine.dnom': ['41dd2109a686596586b3661fbba65660238a8f990fe65f79f6fad26a228e05cd898e67cba41963c3f7911d222ef305d1f07bcffb8d210d44e3f66e23ebb59e44', ['checkOutlines', 'autohint']], +'nine.lf': ['3422a2440ec7f5dee4eed45cb0cc78a328362c0300d856b032bd95d0cb8660819575856f008130f5492cab4a0cc396592a98641bfa6fb32fe4c7416f1136562e', ['checkOutlines', 'autohint']], +'nine.numr': ['c0a5b0abbc7bedb9eb3683a98bb033cea758f2df53ec0496c5b595e0dee33b245a07f994664eb667c6539bd1f105745e2f4ab3b0f994826df02c54588aae9ec3', ['checkOutlines', 'autohint']], +'nine.osf': ['07016f3f2683c968c3f887264b53eba28cdff0f3166c5dc1482b3cac55e6d8e9695550cde681b1449595812cb118b23f2adcd24f73744ca125d4436c073ed2f4', ['checkOutlines', 'autohint']], +'nine.sc': ['9d99ff4e5b2a03a0b808b02a1ff9866f3192b93a76ed03080c1d7542b70ab5fa70f90ba228e314765f99f40f8ae2f695c4ce6d3424eff12b795bfcc92ebc26fe', ['checkOutlines', 'autohint']], +'nine.subs': ['ca59f5c9ae7b73bcbdb50fdee38ef22437c86b7c1941fdba34c5041626ae3a70fbf54ac52ac23717b18aa96a4f7af99f1b91fd87e4864df847b4a5143acb92d5', ['checkOutlines', 'autohint']], +'nine.sups': ['8a1f78c7f59a20a68d5c94e0b6d1ef150da46a80aae7609eaaa2f64f890a2b074c36bd4da66362d6f0103f12ef9e251e135d0c09888a5d0ea7e9ad3b7d7bdba3', ['checkOutlines', 'autohint']], +'nine.tosf': ['03be42118059259fe44af698116f74f0f35be02f0a2656c86991e8364d8fb3f6b8ed02969f4baf2a18d3d4835c8ba7ae47be8d6e4595eebcfa4a694f5896a608', ['checkOutlines', 'autohint']], +'nje': ['4f3968851f78dbe22e0e0bfd6c4b29719d7bf95bd1efcef703e5efe55ae10079898e1364f99147745fd10da555f55ad7407621f23b89a03f5b7c2104d570d18b', ['checkOutlines', 'autohint']], +'nlinebelow': ['872a8d23dd005a82c1c3df02edde7bd17363c1440b718a2563190f02007ef489bcdd1f07b8687223df5ee6a34b502f834e30ca798208ff0177c2e825a8629ddd', ['checkOutlines', 'autohint']], +'notequal': ['f5d474d7d5f6f258dd203136741382163cb7fd5f21494f3a7232d57984fd8ea49830695d40d1c5c807dabe1075dfe9bdbc663762959293f02f3ab445696ee32b', ['checkOutlines', 'autohint']], +'ntilde': ['c74e0ea88e54ce003a965276ddafe1326533276e9b002fbfd03955c9ed47c9778da09a98f11c04c798aa9effea4de71c1916effc5787ec48cba51a47999c632e', ['checkOutlines', 'autohint']], +'nu': ['4b7bd77f3a56bc6dd88975de347e6cd6c8f12d6aa242e015361b3d448fe86f889117dd72497b2a0fe8668f6dc5686d6f1b5cab43b8a7f59739fd51605281013d', ['checkOutlines', 'autohint']], +'numbersign': ['w526l880l1350l235650l188650l25261l25180l470180l470261l502391l502473l57473l57391l2930l3400l440650l393650', ['checkOutlines', 'autohint']], +'numeralsign': ['w249base:prime100100w249l65435l103429112453120477c129500156579180648c180685180714160737c13073711373797733c81722', ['checkOutlines', 'autohint']], +'numero': ['4b5cbb7d3535f3ae9aa7324dd02fc4ce97817ff77ae5ce4b77184b4e03898421a81d1d001a0efac3e5792bb866fbbe632132c6a5ceb7b035070c404599378115', ['checkOutlines', 'autohint']], +'o': ['ebfea42c73a06e3a3166c77e718f6ce9eb4f5ca379b17f5cebf6b6cb0d97ec9ea3523894b78404ff2288234f0c8c77d0f9a376a89d8418813b760ae5e34af9c7', ['checkOutlines', 'autohint']], +'o.sups': ['e698ac380dfb12163a84c2bc3e44d14a4194646e90e30f28a069751905963844fd4e27db9505b1dda777c931a34f1193fa3a3b756b5d08a0543ad54595a97a5d', ['checkOutlines', 'autohint']], +'oacute': ['e87f9a20d8561825a96357976f05eb9af5e2c7b61d4e6c24420d2722c6f86e8df74ad71dddab41367f67477aa3debf0ac2e84d9f1c18304848054818b0c1b2e3', ['checkOutlines', 'autohint']], +'obarcyr': ['bbc54929e1daf96366e6a827e1e075c231e7e696e141242766bbe2f35096818bcf49d71a7e0f9623d75857943bef42797d52c5ab7219b37f862463e96c0fa877', ['checkOutlines', 'autohint']], +'obreve': ['e483dece295751ddaf084e3e481046f777d78d27577bc806809a9e24415630cd531ee3db2a234d70740e911f45922012ddc038ec1547cad825b9b1d9b48afa61', ['checkOutlines', 'autohint']], +'ocaron': ['b1b14606693fa6debe375013d0915375f1e3a464fb74fcd819b3ee3133fb8f0de786ee44a5389803bf64de63f3c911afc24e22e92bad9cb3a1878206b5a41686', ['checkOutlines', 'autohint']], +'ocircumflex': ['c0c18cf646013d510cd50b0cdb460fcd4ef0f7f5511040d7ac76656d323e47da0c263ce26efa73e17d9c8984dee7e5832fcb0e159e0204915605b93b060c161e', ['checkOutlines', 'autohint']], +'ocircumflexacute': ['56d73d6b2a69034651ff1819ee3cc18e850c57b90fb6d88f78c055cf0c891959145d249f971125d74624249196141554312c805c5b6145ef183d1f4c773f25f6', ['checkOutlines', 'autohint']], +'ocircumflexdotbelow': ['be53764530198af48e221b864f8a9860767f4c4923711ced797f4af45a101e9845a532ab884ab332820d494bd1af3ba59bbe70c609210402ffa9a6f3775ae1d7', ['checkOutlines', 'autohint']], +'ocircumflexgrave': ['f21e00e111b7c2207a5ffe4e2bc12bae70f76a775316868d27858108fa38bffa029f43e213171d4aa30004de3dbcb807c22143fc35ffb4a76d81e24ef59a64fd', ['checkOutlines', 'autohint']], +'ocircumflexhoi': ['6a3d4bec2816d424d53dac04e47bbb6e0bff49c96353e44005f3692d3b3d6520ba622b3c389370bc9395633592d48e4cabc128b570af0cb4082925c3805edea7', ['checkOutlines', 'autohint']], +'ocircumflextilde': ['a4549c556d45febf4e89da30d4e39ec4a97d4fe46ce34b82b8a6d8582e009a59715f2ddeeb57dbcfe13ccb0cc78c8b9423221fed63d5fbc44b7f37b0f1f5c8a4', ['checkOutlines', 'autohint']], +'ocyr': ['1d3702c2e94b4d23f3a51f6f00e551dad59ac78c578c4b6cfdbf660305efe2038e2b01a52e738c52efda7ec73de0ad5df3c710c5558c4c9a6c3a477fec91e7f5', ['checkOutlines', 'autohint']], +'odieresis': ['2f1f13e50728104d25a4d92d3852c33503d4cca662bce2d3dc0e7c3a80d90f0acb4103f804d787fff56c44a131ef000cbde6c7df06f21360c7fd4fdf068d32ae', ['checkOutlines', 'autohint']], +'odieresiscyr': ['e1b6e887199584c7dd070078e4975b73f5d42ecb0f1ffca507c980bd7d8fdf723cfeb2c37db050268dd922849cdf03e5971a4fc56bed472e1498a6d894cd57ad', ['checkOutlines', 'autohint']], +'odotbelow': ['7b52795766714fe90a1b0610e2a0b65476abb4af2154c4d3f9e62d049caeefad60222272b4896cb5d284c20bb531b375084fbf4cc8ced73a4902f696e27d011c', ['checkOutlines', 'autohint']], +'oe': ['0f2336732b88ffe3c5a0a6dc6f37ad5df4dee5332a203960641ae06aed5caf34bc7a8c67351fa9e3961aa327157d95283c896d9f0ffee55fde9e7e8fa309e8f9', ['checkOutlines', 'autohint']], +'ogonek': ['bfdc26e23681c85ce46fbab89e110214f3e44bf7f4fb3d4f196ab5edfa1a557f6723e6f0b28f9d1e28f019b30e63ce40e60c48a8148db8a74368735cb71a3238', ['checkOutlines', 'autohint']], +'ogonekcmb': ['dc5d07448118b62556da561fe7da9e913b71d5a6b03633b4731d2f0d6d1cb11153776a1b0a00c57582ad530e17cd7cc9a65c4b95a17ae82b27b4d761f78eb3d1', ['checkOutlines', 'autohint']], +'ograve': ['775acdad35cc085acba1477773e8a6e0b6fa08e43d2012a2bc016c8aa8d5c1c9d4cf4843e38d561fa0e475d722982add99a7070d711f39ac0a801bb6a1333569', ['checkOutlines', 'autohint']], +'ohoi': ['e3dede137895ea6e373d9825834e91a89105f8521787b59a2338477cf8347621b3f86cb073aa092cb5c7e9fd1ddebbffe23528d83958102ae89ab1560ba4bdfc', ['checkOutlines', 'autohint']], +'ohorn': ['248e95cf5892b897ea2c48292bb168bd54286e2b38bce084422ed5612703263e0dd49c765ecd55101ab50e95d6dcecd5710331f1a038a80e4f7fd41d5f86e770', ['checkOutlines', 'autohint']], +'ohornacute': ['6a38791071a96c84df7a9a9fdb841cff811b11e3d18c044a2ec843fbb2e60f1259eb0cfa147f9c3ee5cbe113ad1439b9284f9034d58be2bff8a1ec9ddbae0162', ['checkOutlines', 'autohint']], +'ohorndotbelow': ['8c37fe5d594bb363c04cf4c01a01bd86128f41a27d7594453209688674b06479aa8199b28cb6a4761b9139bb4ea94c7354606bffdf68ad5772e094b563aa28bb', ['checkOutlines', 'autohint']], +'ohorngrave': ['3177dfdb5df6cb65f7b0d642b967ca2618827d5499a0b9561722cfb5cbeb5bf3043cccf7b8f15f569fa5645cca9b3ad687eff50b24ead94abfb470682c71222a', ['checkOutlines', 'autohint']], +'ohornhoi': ['b7fff26fbbeeef3ece4d7ef0c248af93669fc7b0876aac6feb45560412bd6888f4a493b1a77df099b26325d144d0440107a32b389cc9a23307d52b01bd3c14a7', ['checkOutlines', 'autohint']], +'ohorntilde': ['67653bf9f747ccf5f585839cd7197d6e5719285a1a2e9dd482e1fce1dd6f42f8ffaa621deb646777e447c73b2046352beb20be9a1213f1387c7df2a9a288426f', ['checkOutlines', 'autohint']], +'ohungarumlaut': ['2486a2c5c6926bf42cb3249a00be6653b4b6bc8b22e547eb80ed828c4641e4355f4c06dfcf72d9dad9c29a27e309b4e7c9424d41bff159de43500a2764ef2535', ['checkOutlines', 'autohint']], +'omacron': ['bee896cff3dc3bf0eb16664108eff9c0fb90e2468d20b64319710dda10151a10832038c3e375c77ebf7d1b77c405a28df4f701335bc0cb708847f39dec493da0', ['checkOutlines', 'autohint']], +'omega': ['5e9b876f259635bf0a702e9cdd0da0ae7c016af6c3998fff49d99c363882c67a8015479356864e1db23646532659c2117ae3166c5edbe55d582a1d0123df5da4', ['checkOutlines', 'autohint']], +'omegatonos': ['cd7bc017eb9cb6412bc31a75b9b7b9cb8fb30d2a9b7b1bae72d0182b159b5f3d2c583eb30815604c6f5f596209fc052412852b45d2d25c841b266f59ca495640', ['checkOutlines', 'autohint']], +'omicron': ['37fc84503d48eff9dbe9fc26d5bc000759037466d1538ae623b6321303f05bca330ff41ce7b2c1cf82976473cf6cf9c574cec9c08b7a49790f53dc6b2ec0c528', ['checkOutlines', 'autohint']], +'omicrontonos': ['3818d311d9d1bc3ca64e441728ef69b430dbddc506005b2ad28770a834ab174db9742543e2035d7e48baa6fd1cfeed6adbf57653dca4c1b67512f44cc86ed082', ['checkOutlines', 'autohint']], +'one': ['w500l740l4450l44536l30160l21760l7436c2140l304030270301141c301211l301502l305645l291655l85602l85561l217572l21721121714121670', ['checkOutlines', 'autohint']], +'one.cap': ['w426l630l3930l39336l27060l18660l6336c1820l273027170270141c270211l270526l274669l260679l63626l63585l185596l18521118514118470', ['checkOutlines', 'autohint']], +'one.dnom': ['w370base:one.sups10010-427w370l66427l315427l315456l222473l160473l66456l156427l227427l227824l218830l79798l79761l156767', ['checkOutlines', 'autohint']], +'one.lf': ['w426l630l3920l39236l25860l19760l6336c1820l273027170270141c270211l270503l274646l260656l63604l63563l185573l18521118514118470', ['checkOutlines', 'autohint']], +'one.numr': ['w370base:one.sups10010-153w370l66427l315427l315456l222473l160473l66456l156427l227427l227824l218830l79798l79761l156767', ['checkOutlines', 'autohint']], +'one.osf': ['w436l730l4020l40236l26860l20760l7336c1920l283028170280141c280211l280383l283526l269536l63483l63442l195452l19521119514119470', ['checkOutlines', 'autohint']], +'one.sc': ['w493l950l4230l42334l29759l21959l9534c2150l302030057299116c299173l299433l303549l290557l105512l105473l218475l21817321811621757', ['checkOutlines', 'autohint']], +'one.subs': ['w370base:one.sups10010-626w370l66427l315427l315456l222473l160473l66456l156427l227427l227824l218830l79798l79761l156767', ['checkOutlines', 'autohint']], +'one.sups': ['w370l66427l315427l315456l222473l160473l66456l156427l227427l227824l218830l79798l79761l156767', ['checkOutlines', 'autohint']], +'one.tosf': ['w500l730l4440l44436l30060l21760l7336c2130l304030270301141c301211l301383l304526l290536l74481l74440l216452l21621121614121570', ['checkOutlines', 'autohint']], +'oneeighth': ['740c38cbfef423fd6448dd495bc4677141383dd9b9fcb123ceedb55b28a31c79e451a4f35c4a8f2c144e9d84b6eaa5a231fabbfb45f1dff900416e7009aefdb7', ['checkOutlines', 'autohint']], +'onehalf': ['7e70467bd6a015f02f89eeae2d906e66b29df46bd215bc110f88dc26558eb64ff53c637d9f524caf642a2a224fa56d2336d2e24d3a88a00d7930a00c4b665c6e', ['checkOutlines', 'autohint']], +'onequarter': ['9d521148e72c9d321450521c74b427f5aebcff3ffa9b076ddabe8e811bee5f21310cfbe2af3d41a86a3d6c975ef59d8541e008175fb21a489c195e0dc0bc043d', ['checkOutlines', 'autohint']], +'onethird': ['ecebd2e2aec621521e8f84040774491281ae1b33e417e9d587f389a6a8df515f2da5e2b44f1e34e9da130e8893faa09f88ff6ae450ad62853dc253ee19a4f78f', ['checkOutlines', 'autohint']], +'ordfeminine': ['69b38c38a677899d9ec1f7420475243b957f2942b16d364ac85b3320e46a11775a258a3114de009369932103f9dfa25184d7a82d138755e53cc6325b812fa0fe', ['checkOutlines', 'autohint']], +'ordmasculine': ['a9c913289339493e27b21010e7900b6d2a0979abf898cf530748cc030310396a9033192f0a3f46e5be01d0732d331c14ff7313909239dbf4859acb8d48d50576', ['checkOutlines', 'autohint']], +'oslash': ['3c79ed26584cb4b8d3a99aa2c0970476587186d5e64a7f739a018881d90950f8c5254dcf61b8d185ca1c011bf36b2a3977196caf178c9122752dc1a9de0d850e', ['checkOutlines', 'autohint']], +'otilde': ['35da71e5b01a4d96d6f7e73d12baf48e820e7ef66d2da8ef6a47a8576c57634ca2c314ff4cf0da40c2d42ae80455e99a7ee659760eee61bb5eeed6bb61ff28ba', ['checkOutlines', 'autohint']], +'overline': ['w512base:underscore10010735w512l-5-69l517-69l517-4l-5-4', ['checkOutlines', 'autohint']], +'p': ['e43f2e8330841ca40484810c0bd85d0e89e603cd3de56ae74472ae82a356da3be783713b8c685399b9368dd6ab963c0586b58543e420b04951772edbc3cd332b', ['checkOutlines', 'autohint']], +'p.sups': ['04877704963ecdc256c0da7dbade45f0ddfde62033d46328182986099115ea11e8b1785d88b5fb0ac7b9aac6da45ff71cfd091c56f3857391b404e806b5f79b0', ['checkOutlines', 'autohint']], +'palochka': ['b9cc14d5adbd458182f38df4f2f0e99c7f66b14af8d9d6af9b7589d00e37b01fd4194e3a58305f0d37cba2e8880d858eb9790f361b96d0254dbee3fc64879715', ['checkOutlines', 'autohint']], +'paragraph': ['c6aa42401470cfc80d161b9ef6a0fa4a5ac904dc83571dbfd973327bd6aff62b77e3f80ad07802f868b3d10919258c127c1b07a29602cb741ad47c5e823ebd59', ['checkOutlines', 'autohint']], +'parenleft': ['w339c160278160438196555c314725l28874814761680461c802788095147-60c288-192l314-1691961160118', ['checkOutlines', 'autohint']], +'parenleft.cap': ['w339base:parenleft1001035w339c160278160438196555c314725l28874814761680461c802788095147-60c288-192l314-1691961160118', ['checkOutlines', 'autohint']], +'parenleft.dnom': ['w252base:parenleft.sups10010-427w252c118599118686141762c215862l19488210280353709c5359953489102395c194318l215337141437118513', ['checkOutlines', 'autohint']], +'parenleft.numr': ['w252base:parenleft.sups10010-153w252c118599118686141762c215862l19488210280353709c5359953489102395c194318l215337141437118513', ['checkOutlines', 'autohint']], +'parenleft.sc': ['w346c179261179387211482c312619l287641162541102411c102261102110162-19c287-119l312-9721039179135', ['checkOutlines', 'autohint']], +'parenleft.subs': ['w252base:parenleft.sups10010-626w252c118599118686141762c215862l19488210280353709c5359953489102395c194318l215337141437118513', ['checkOutlines', 'autohint']], +'parenleft.sups': ['w252c118599118686141762c215862l19488210280353709c5359953489102395c194318l215337141437118513', ['checkOutlines', 'autohint']], +'parenright': ['w339base:parenleft-100-1339556w339c160278160438196555c314725l28874814761680461c802788095147-60c288-192l314-1691961160118', ['checkOutlines', 'autohint']], +'parenright.cap': ['2b95acde635ba47648c9e0371f0054a8f6364cc373e827b87dcf23151ce8b3f17bb1e490aee53e028cf83702828ae1aa2696642f44639877d1ad06c1b721e0ca', ['checkOutlines', 'autohint']], +'parenright.dnom': ['w252base:parenright.sups10010-427w252c134599134513110437c37337l58318151395199489c199599199709151803c58882l37862110762134686', ['checkOutlines', 'autohint']], +'parenright.numr': ['w252base:parenright.sups10010-153w252c134599134513110437c37337l58318151395199489c199599199709151803c58882l37862110762134686', ['checkOutlines', 'autohint']], +'parenright.sc': ['w346base:parenleft.sc-100-1346522w346c179261179387211482c312619l287641162541102411c102261102110162-19c287-119l312-9721039179135', ['checkOutlines', 'autohint']], +'parenright.subs': ['w252base:parenright.sups10010-626w252c134599134513110437c37337l58318151395199489c199599199709151803c58882l37862110762134686', ['checkOutlines', 'autohint']], +'parenright.sups': ['w252c134599134513110437c37337l58318151395199489c199599199709151803c58882l37862110762134686', ['checkOutlines', 'autohint']], +'partialdiff': ['4e7f448f79b4c184ee9a904f14f30158188552a0b9fca104f03797aed9d36901fefc1271a51c9b7940389ad1164628d34845933f8d104726afea10dca151e85e', ['checkOutlines', 'autohint']], +'pe': ['9516b083ab35829dd4c80814823d5fb2c232170503926722dfcb78f33826b5fbba768b9232dc3f8efc4fc32e1617455db7a921d32487f16eca67c091313048bd', ['checkOutlines', 'autohint']], +'pe.bgr': ['1ec1bc44879b33f53599c78e972e0d8365d76ce02058cf659b708e5ef101a0d07d1e2139673390941377a574b54765653de750cee9ae9154d07320d41e9968c1', ['checkOutlines', 'autohint']], +'percent': ['cbce01aa0908e935649f600d2841d8ad9e31d00cbd89fa87f14e36247d4f2ea0dba05fd79edc7e79e3fc2b6af8a3dac0bce598fe791e09c50fe83aab8d6befcf', ['checkOutlines', 'autohint']], +'period': ['w300c150-13190-1322119c2215822198190130c1501301101307998c79587919110-13', ['checkOutlines', 'autohint']], +'period.dnom': ['w232base:period.sups10010-427w232c116418143418165441c165469165496143520c1165208952067496c674696744189418', ['checkOutlines', 'autohint']], +'period.numr': ['w232base:period.sups10010-153w232c116418143418165441c165469165496143520c1165208952067496c674696744189418', ['checkOutlines', 'autohint']], +'period.subs': ['w232base:period.sups10010-626w232c116418143418165441c165469165496143520c1165208952067496c674696744189418', ['checkOutlines', 'autohint']], +'period.sups': ['w232c116418143418165441c165469165496143520c1165208952067496c674696744189418', ['checkOutlines', 'autohint']], +'periodcentered': ['w300base:period10010274w300c150-13190-1322119c2215822198190130c1501301101307998c79587919110-13', ['checkOutlines', 'autohint']], +'perthousand': ['9833924cd90efb7e06eb0f46ed608515fba1aaa2423c938d2472ae1120404b21f46c31b21b3f16f56fd0129994e6b261f1ae37af4f47c058fcf0a7b9f0bd33b5', ['checkOutlines', 'autohint']], +'peseta': ['9b84a3bbec615c440d9ab89fe75b7d8620270f6ac24efa7e96c5904bcf90f2de1ef3012868f703fe563ae0ed1cbf7661c8012201665f509da39652ad36ad3082', ['checkOutlines', 'autohint']], +'peso': ['447658b13a26177cd6a8dae8550107d4b79d6515d4d6a189747a86df34e6fc52d708f4b87fa77c9e9a3c097a9601e96e3e56fe8f9158162ce3b77b31ee41f468', ['checkOutlines', 'autohint']], +'phi': ['56158d677a8594891074366a0a4a534ee23f8e318b99e155d5a65a860cccae87eb4fbb01020067df8aa3b22867a353c1a3f5bee051bfcdb1c756ed5f67cf66c6', ['checkOutlines', 'autohint']], +'pi': ['7466054e6abf2cc28f926083473c8ddb647fb9634a259a63d11cac9d573d4a16c9b834d59308f3787bc1cfab7f8dec2a0a041166abb18f33e99586063c4474fc', ['checkOutlines', 'autohint']], +'plus': ['w530l23577l29677l296577l235577l502301l502358l29358l29301', ['checkOutlines', 'autohint']], +'plusminus': ['w530l23598l29698l296558l235558l502302l502360l29360l29302l5020l50258l2958l290', ['checkOutlines', 'autohint']], +'prime': ['w249l65435l103429112453120477c129500156579180648c180685180714160737c13073711373797733c81722', ['checkOutlines', 'autohint']], +'product': ['f7b828bc2a630d311c23f425765d8d8ac183f3b2c6a7d6b3db8a79033b612e4b28412b6a6430362c3c7443f0fca490896ef3eeef5f2643fea3fb9f30f30529e5', ['checkOutlines', 'autohint']], +'psi': ['96063ecaefac608c01bc329aaf344d86a4694aae334144a095a9e594ae182b5b458c5ce3f75be429a809d739c7bbf72edbdac8c42bbb4a6a93452ae888eee7c2', ['checkOutlines', 'autohint']], +'q': ['5ba602b8b2413de19ca75d5788881edfce8659b5cba16b3a114f52890348731813e64cad3dd5dedb034ba81295fe63c3231eb0d4505f5dea76b1a0dc35c6b2eb', ['checkOutlines', 'autohint']], +'q.sups': ['864f273545d4c4d15294bac5e49e32ba1fd9a66cc5443a2e0d4f0bb040598bf5390a80423bb2d899aaec5cc308de81f6029177a77705a6aa2d45b610b5e889ec', ['checkOutlines', 'autohint']], +'question': ['a43d1364210edf01ae00721345cea0032fd455833c7e16c9e55dfd97b3879f4f2fe8cbbbb7a87abb60104715e38b76083d5a2a910b70013726e20009d05f1402', ['checkOutlines', 'autohint']], +'question.sc': ['1a010aca9b8e351d0a8dd71008575c4119ed78417a32474089a5e3086c16e34c7d5459b185b3991527887d47435056490e40ca12cae16b60aa20c88324ab1ff4', ['checkOutlines', 'autohint']], +'questiondbl': ['801d7d91ac27536292a9cd48e16b49af20b50d8fdee221c8a4f7710ee16a500ba8905231c429fb6c435ca1d0826365580ce7eb170cc4d479fdb871266a97f04c', ['checkOutlines', 'autohint']], +'questiondown': ['d4b09d87470c4ee858f2dd5d678210ab6e0607f71557e813d14f557b7b8c4d04a81486db972e546184fab0fc0c6c0b67edb3b5968245331f6616a0338bbe0c32', ['checkOutlines', 'autohint']], +'questiondown.cap': ['ad3cddc1680c460f694f30dbee327bbba904d743b96d51ac0005c82417b9d4e6c38b7c23f4ac0edd142568abaebe5efd9896b3462ed61b20c54033fff42f6139', ['checkOutlines', 'autohint']], +'questiondown.sc': ['5aedc80efc82abc7b6ffc835f5bc3d821be23cf8937964dd7a1c9506677d29df42469d8f6d4a80f7ef2e4e68ab3069f2146ad04f82c317f22ab271cd01dc444a', ['checkOutlines', 'autohint']], +'questionexclam': ['6b863043b1989cfec9e701dbdfd0ad7b7d2da99e315d2e289790c165eb838fe81aff6d7a8ef7dbfe638d2f4b39323832c81d5bc7665f4fa8cd2e830a3dc9fdca', ['checkOutlines', 'autohint']], +'questiongreek': ['49caefb1a7926fc9cce5c2c5d129199a26507ab14c9671aa9b4dd0ca831796be53c22cb9dde3736bac44d15bfeec17a25399926fcc5bc9a6fed53cd316084a84', ['checkOutlines', 'autohint']], +'quotedbl': ['1d43529c50f72ea81344c501a44a6a6e10a0928b8a9c6f508951305b948d032c8b67497ffb896bc0bdf8c891952ff353588dafb26531b93ff19ccfd6db0ce4d6', ['checkOutlines', 'autohint']], +'quotedbl.sc': ['3229dc7f319600808239013a7b434be78af2f42ee52ed249f82642d558ab1ab3a2c368bbd4fcbc7d1301e0cccb1c904de9823847f7ded7344e44e8783fca87fa', ['checkOutlines', 'autohint']], +'quotedblbase': ['0c206aa2e27ada0ee0ffd9c3c66437c0bffcb3f21429ee828db42cc978bbd185465bd7b9b86e28209f68d77ed653bc608f43111bedc0b87aa396a86d01835c2a', ['checkOutlines', 'autohint']], +'quotedblleft': ['07f88a83db8c2b7527a7240cf8bdcce41f59e85e97108c661671cb7955ae878dfd9b44fac70853e95c5bec6d6739614543b71e0a182958d0e54fe54498d1aebd', ['checkOutlines', 'autohint']], +'quotedblleft.sc': ['445d840ebc20fb39117cd5d6ee9d15255ee61e40eb5745da73ca7592a71a3d14cc1f8f39bafbbc50287cc9f814f2f1c975db68e3ff993161b8d89b23588ef418', ['checkOutlines', 'autohint']], +'quotedblright': ['99d5a403e46dc84d70c6213c5140b64a45cffc1c44dc896521241c334124777e5a14db2ba587acd791708b2d3e07c362db2d65b0fa48e1f672218bcc32e0c604', ['checkOutlines', 'autohint']], +'quotedblright.sc': ['3bed92d6b7d06c31e9757eae11344a932f51c98f8ebe3807190be488e19b2338562e454ec414a29ea888e48f9eff532d0976b95d1232b97f751b75f6a6881715', ['checkOutlines', 'autohint']], +'quoteleft': ['379a342abcd0f5c636227c2c9a9246e1e15146f1f26329425ae264fdabfbc8397c5638b5eb816919c779bb7e89134de8c1dfbf97aaa107c823a08ace9cb41520', ['checkOutlines', 'autohint']], +'quoteleft.sc': ['61b4730f14469fe92f210bea321e9f26fabc115e101c58009aa701f0e9843969481b49a52f60e103565562ff356d1aefa0a5b92d4a32d1a22c7a1a024e7c5c49', ['checkOutlines', 'autohint']], +'quoteright': ['dbc6966a10f717cf5dbe181ba68012c65b60c640e65e13eab1c6beec7652180c3906dab4ce026a41de1eedd48665845583262c8669a3c75dfcbc3f5759dbe933', ['checkOutlines', 'autohint']], +'quoteright.sc': ['a0f1ecb874d3893e463b5c84de3b051d01be18e7e0000589cdc27b0efc1890b6fa49a783841faf3fcae7e1bc4ce555b746f3ff850ee0627ff14831ae299e6d5a', ['checkOutlines', 'autohint']], +'quotesinglbase': ['120beda6266c55307eaf6022aeb03a354ede41c31e31bed18152c3378aebd5f400f3272bbe14878f04ad8b8f11aeab86e2249920ea9a773ba6b195757dd82951', ['checkOutlines', 'autohint']], +'quotesingle': ['w183c927376073740718c406744063557533c62500l73429l110429l121500126533143635c143674143718124737', ['checkOutlines', 'autohint']], +'quotesingle.sc': ['w183base:quotesingle10010-100w183c927376073740718c406744063557533c62500l73429l110429l121500126533143635c143674143718124737', ['checkOutlines', 'autohint']], +'r': ['8581b93834454b6e65ddf3e4072b07988c51feb1c77bdd5fc2476e301d73e660fbb1215d496c9c25d7e5bf67d1b209996f3591ae70f15f74f0dbbfca0a98a5d8', ['checkOutlines', 'autohint']], +'r.sups': ['47ca65ebd7d8ab4ffb31d707d86d5bcfd8c00188b1d7a018914461dc6bd6794ffe4aa0007f0aeaafba9a534eb6e5f452cb155ef56644d042f856f36e6f4caa48', ['checkOutlines', 'autohint']], +'racute': ['a823d88c9609b778c14446f0adb18bcea98ff4e551790a7ae2f19c65ccb9e56fdfb0fea959a94eea091f6138761499aaf0f7a6cd796c3f33ed3bc68a9e9b6531', ['checkOutlines', 'autohint']], +'radical': ['w558l120333l286-100l337-100l550782l471782l306-48l345-45l198356l43356l43304l149304', ['checkOutlines', 'autohint']], +'rcaron': ['b4c1c4f0600917b390ee67026ab8a99a06fcbf22301fa7f591592a97794803fbbc4b150f1ab78b059afc1d13e1d75c11ec369c342381674a682d5313153a3ada', ['checkOutlines', 'autohint']], +'rcommaaccent': ['f65b9fede1ddaa26a2b7d7328532d0fbecca8fe62392070eedc42d9152d77c762a2d2d53bd1cf33cd5808baba73642aa4e77894f70d27016b99a581a0ee30b80', ['checkOutlines', 'autohint']], +'rdotbelow': ['10fd2d59a1a1b234e5bdae1dca5a35a485f12dd9907fd15bff571a946fd092f0217f8f5aa5b5252899d4c1f610ed09850e5a7711de92eecf21ea0d7b75e14722', ['checkOutlines', 'autohint']], +'rdotbelowmacron': ['7f44c18b5c8e8d36833f508b3b5e75f11e330b146acae345ae3c4693b6b7e90f4b41943514b3db82a3ae7e1e48f15368730add512081b3d5e859b4a7c8ba3533', ['checkOutlines', 'autohint']], +'registered': ['1e5671242e8e423e747bf0b321065b0dd70ea6c8ef72268f7f42f36bdbe6c4c26d5066f0044afc1f0aac6abf648654c5f00f50b2317ce525267acbddef27bf2f', ['checkOutlines', 'autohint']], +'rho': ['f557d07ef68ac7e155e60637dac7cb61dd46c149d49f5d92032c82c81f08889f6b696f478921947c823cb34e6f5c8082765047ba300261e46b83d941d26e6a43', ['checkOutlines', 'autohint']], +'ring': ['ec89f17b834675167baaa45f21669c1a38fbf795923a9ffc6d23e90ffffc8fe9df34a3fbe28726f35af8b662bd896bbc7ed9fd5016d80f84e992dac5f9fd1af5', ['checkOutlines', 'autohint']], +'ringcmb': ['d8519ad69c88e13ff9fa227d9a39fbec6a441c3a3649b6351a06f14a951137e7bf6f9271c6d794e3ba4edec3aead58fdf1b78e0d647e91814c4673ad414e449f', ['checkOutlines', 'autohint']], +'ringcmb.cap': ['4a61a2dcb369d376e6a7cb6ba940d22d61e9718d008408dfb82f8fcfee706a1ada1f07feb3c7224928b789818888cd6e289d46ec719c074e6004603e153d661a', ['checkOutlines', 'autohint']], +'ringhalfleftmod': ['w196c396403957481538c154538l15457711357791609c9164091671114701c154701l1547408174039702', ['checkOutlines', 'autohint']], +'ringhalfrightmod': ['w196base:ringhalfleftmod-100-11961278w196c396403957481538c154538l15457711357791609c9164091671114701c154701l1547408174039702', ['checkOutlines', 'autohint']], +'rlinebelow': ['47d2f46f7fc752930e01c3627ef4bd6fb8a6b1819b6c0ce3a79ffb35dbaf1a9bc965ed7a4f48ab74b08fc4a6141582f0907367f471df4b3ba2592223ff6fe370', ['checkOutlines', 'autohint']], +'ruble': ['e3eca9c387e403069507dd1d0c34dd2372eb6324cdca85b5388d98a8384f57d16bf059abf709f10dcd5c93f399ca5d4b3eaa85497a9b6b0cbfca1c7a6ecf868a', ['checkOutlines', 'autohint']], +'rupeeindian': ['09aba7f675e771e46c160f9cd23b8b6b75de6a61dc6bfefe68efedb0f376fcc28796319b15ea5f8184180491f98a0916e2c91d861f72334e843e07e3aab2b5ac', ['checkOutlines', 'autohint']], +'s': ['e05895272ed78e33704375f528953d8173459ec126d2cef3ec4b0570e3c077566b6ea8a4bdfa10aa96ecd2145472869502e4f8b32e509d214a02965ec058c1b8', ['checkOutlines', 'autohint']], +'s.sups': ['590fd080ba403795b74200df54a464bdb8124be52ae16cf1f45a0cc1f7601db6a1ec480f936f6822519225a3e60154f031beb883737908d4ba01ce0633c692fd', ['checkOutlines', 'autohint']], +'sacute': ['c25c66f7b7056dde53b38e7d449ec955b5f2bafe714625c7468bf881fe0a36e1eb87069e78ca9f4bd2adb4eb844043b096ca066c2531fdfee6592ea5c15c3193', ['checkOutlines', 'autohint']], +'sampi': ['73ddaba89240bb000e9b31a3ff06ed644e408b73ee2ca9d7e0c75d9a5f25beb5f7c3afe9e8e01635ee60acd48366a7f7e5910dcfa5d162fcd2701b313b672238', ['checkOutlines', 'autohint']], +'scaron': ['baab6a4b888707dcb24f43c951c8e045eafdec5d372368d9c1870c54ff56c097147aff827e7327a812c4e929142f6f3b8a42fa838989d70e306328c033944e2d', ['checkOutlines', 'autohint']], +'scedilla': ['298408878e06988aaa04e2230e7032e13f896835cdaa3424f4436681815f8ac749e190fc61177190903855dd749ccf7b79c9775df7bbfde54cf79e0f53b60fee', ['checkOutlines', 'autohint']], +'schwa': ['977e389006496db4982b4ad5b52a4ef36c41fe92c8b7b4a1e39f2294460fb229c021dda902e27963593b674d6ec4245713d0a76aa1cab52e09445bed3b59c5ec', ['checkOutlines', 'autohint']], +'schwacyr': ['c2beefd6b92b90e980f8f660291d8ac89d186144d938d3c0ce2f2cfbf1a2dd108acd3faaaa6d431715af63c00ac7f79ded8f0fc9d33098c6e2847e5f3c9a3720', ['checkOutlines', 'autohint']], +'scircumflex': ['d9ff0810273b9e2afe2aa1a986c81d2b9a7b1a81f2057f5187b89867df78a9e28ee3660f31f84e8b2852e4f6ccc63a295f7d3d2c7aefdb2203df1d4ea4b68298', ['checkOutlines', 'autohint']], +'scommaaccent': ['f5797eeaf5600c8d3e8bbe81efb0d38a89e29d092a087aa50f7ba451942a728fd87d20b36fa8f37bf52d6324b105505c9303a23847bb20b41f349dbc6f65244c', ['checkOutlines', 'autohint']], +'sdotaccent': ['4c94371889475b7512ff4891e61bb4415bd916923f1a19ecaff96fd301550e7a6ba3201037e3cb4b45452daf512921f3030b9032c23767d07b27940dff038d75', ['checkOutlines', 'autohint']], +'sdotbelow': ['2162ccb738dbb3b8f84f362bb680bf7b5d5bc084a8354dae0a1df06e6d546807a72f4643ad4e7ea18504705351370d681a3a0d7e7409683f96fcbcb31c8531ed', ['checkOutlines', 'autohint']], +'section': ['fc6c861a559bf7274aac0eb4693069f324d7aafa5631e49f809335ca235db48b1f2ad6aedde04f5cb48a63b87f3e89c70532b7d7bbcaa2a2239f144ca9dd3096', ['checkOutlines', 'autohint']], +'semicolon': ['c7ae76303f095ba134acaa0e3921bd95defb1bdef4de21fd2a56835c8205c7149e1e6090abbf4beadf23fe05bb3fc7fcf5507fcfefbd32e2d2b858ac7f76e621', ['checkOutlines', 'autohint']], +'servicemark': ['b988015cc9b89fd78c335aab5475f5754e9e79f375cd865c7b69fd3a80320d9d24e1290548fe0de36d57899d95bc985ba7c2ee0a8791e7fedce5fedd468914ca', ['checkOutlines', 'autohint']], +'seven': ['w500base:seven.lf1001230w500l1200l2030l441596l441647l28647l28565l382565l388551l388595l11010', ['checkOutlines', 'autohint']], +'seven.cap': ['w479l1200l2030l441619l441670l28670l28588l379588l379573l388619l11010', ['checkOutlines', 'autohint']], +'seven.dnom': ['w370base:seven.sups10010-427w370l108427l172427l323782l323823l56823l56753l275753l282745l282781l102433', ['checkOutlines', 'autohint']], +'seven.lf': ['w479l1200l2030l441596l441647l28647l28565l382565l388551l388595l11010', ['checkOutlines', 'autohint']], +'seven.numr': ['w370base:seven.sups10010-153w370l108427l172427l323782l323823l56823l56753l275753l282745l282781l102433', ['checkOutlines', 'autohint']], +'seven.osf': ['w479base:seven.lf10010-120w479l1200l2030l441596l441647l28647l28565l382565l388551l388595l11010', ['checkOutlines', 'autohint']], +'seven.sc': ['w473l1460l2270l433499l433549l66549l66467l374467l381459l381497l13710', ['checkOutlines', 'autohint']], +'seven.subs': ['w370base:seven.sups10010-626w370l108427l172427l323782l323823l56823l56753l275753l282745l282781l102433', ['checkOutlines', 'autohint']], +'seven.sups': ['w370l108427l172427l323782l323823l56823l56753l275753l282745l282781l102433', ['checkOutlines', 'autohint']], +'seven.tosf': ['w500base:seven.osf1001180w500base:seven.lf10010-120w500l1200l2030l441596l441647l28647l28565l382565l388551l388595l11010', ['checkOutlines', 'autohint']], +'seveneighths': ['62811b71923d7d02d14d1c15b57af559a7555b089852a94a8ffbd8cd372e15c95fc096561260ae6ab48942758698d917c55c4a1e015cb0b6d193f98fc30cfdbb', ['checkOutlines', 'autohint']], +'sha': ['a46b66c03c8b0bacb3f16acab38834da4785667ede65fdf0dd4d1fbc8bdbe61a2ce4601c782de1b4add6e47918bb38977d62f8b86521f41c0d7e4612911f5c03', ['checkOutlines', 'autohint']], +'sha.bgr': ['b01e1c1ff6153c94c7b808ad06c3c57873abd71b9ac9fd973e6a7b2c50c2260a3f2702c08fe03c27b623fbc769e2e6626f49497901c87ceb9f7a08244ec27cef', ['checkOutlines', 'autohint']], +'shcha': ['dacfe4117889db4425f86cee49858ea0e43a0ce7b45c0b622db273354b422ff6b36f6abfa7969c148c8e4bc1b17df2ac7b4aa546de6f8f86ecad425b416b45d5', ['checkOutlines', 'autohint']], +'shcha.bgr': ['4cba807f1c44fca0fb9355ee4895a00273d5550d726460d42c9c97b3024787232e036f0fc814b1bb84f2634b8d2689ff47a15f9375abad63d8d0b763ac415811', ['checkOutlines', 'autohint']], +'shha': ['9d661e04d06cd4745ac0e0127a097710d7b728b8164bc13842346b04cd9af3185802a27660a4f9c4bfd2530c8cb6ece4eb9c893f10300ad8b83debc4ecc3a46a', ['checkOutlines', 'autohint']], +'sigma': ['0fb05fd569c67f6e9a1e5030d0c7385780611793c9152dfc803702571780a0f414ba6981c5e66db2f56ed5e12ca6428e4542f82c99babb25fafc053860af1632', ['checkOutlines', 'autohint']], +'sigma.end': ['4ea4cad7444e4a5b80197c4451c7d4155c1e83e8e1152fec4487bf41a7fc48d8b917b2e43075a1846f3157d12babbffaf5d0b6439ba785e80d5e3a8dd5778fe1', ['checkOutlines', 'autohint']], +'similar': ['9405149e04d1fd0041ed9fdee5e71300f8a0870ec51d6fed88d922f70f60e72f265e2930e04b385a60a1300d70d980266a963b7ce8f571a50eb3e4d9f4b5056e', ['checkOutlines', 'autohint']], +'six': ['dda103e6a44e254fdb3648fe3addc2476f444ec97683c3807f6427292fb95ad00e3c51d71268b6522055bdbc51a2d4af1075c68291f4e85a96c2b39a81132f1e', ['checkOutlines', 'autohint']], +'six.cap': ['bfeca93cd270d41ded5687e69d88bcbef6095fa425496722a8067b787ce3f880d3d54c8c087328d1514631e86c1307b4207e9fb6e9f70504a755f6bd229bc4c9', ['checkOutlines', 'autohint']], +'six.dnom': ['288740a1cfff78f2172c82ac7282b97f5b9e5bfad7ea97a9befae3ee5822b751f5a9adbb7b056b75c4a54a1ee3529f51ced7f60dee44a9aa19a048a3d31f7940', ['checkOutlines', 'autohint']], +'six.lf': ['a87dd11be059341dcbb4254d2b04980a339893196019ea6ecd80db675d1fe0f0cd5241772c6b5bb97273d19d9482268284b2c4b16e0b21a35240207a097c5663', ['checkOutlines', 'autohint']], +'six.numr': ['7acdc9131e0968f28c90f28d861b42e498146a7ad1f496e10fce31bfebb184c3055dddff1dd0440997203e32df75725971e5c5e114eb252af87f69ad68200264', ['checkOutlines', 'autohint']], +'six.osf': ['0e8e42b7ac39d5a74d6f425bf3a11bcf0b1f948e4eff0674150e1dae1506d0588669d3a6e2e7320bbe450e5c14980544d65dd721724afdb13b4af86900833ea4', ['checkOutlines', 'autohint']], +'six.sc': ['9fe10308dbb3283efe4d7cd2a450eb59ff375d08878cfe85393bbfdac75bf90c1d555b0485be7964b4cb325c35d54d7878c80a1dfa959149c7a22384d9233591', ['checkOutlines', 'autohint']], +'six.subs': ['ce2c412c8a8c08efb0d26187b53f38d230682b5628ea83305cc0c5fe5b0c05ca73f5ef6700fd230ca2ed52b3f82f55f33abbb8829eed2f2276b07fabd1b892c7', ['checkOutlines', 'autohint']], +'six.sups': ['6951162985386d7ccbcc873ca0a0f4a909b43fd53195159a136a62b041cf8295931e587160cc8763f9ad1a5fdb9accc41e1b1e06e367ac805ed829f35d9882f6', ['checkOutlines', 'autohint']], +'six.tosf': ['1251e136b83e060b810acaf8c7e584853b08d127d672a665e1bf63961d27cc71e190a0257024577bd4f7adb0e4ae0c391637e93752cffb3e0fe93b7570f3e565', ['checkOutlines', 'autohint']], +'sixperemspace': ['w167', ['checkOutlines', 'autohint']], +'slash': ['w330l2-160l61-160l328710l269710', ['checkOutlines', 'autohint']], +'slash.frac': ['w140base:fraction100100w140l-147-25l318644l287669l-1780', ['checkOutlines', 'autohint']], +'soft': ['abe1eaad5024eca27207b7436eccbe59368c8e280b8c9dd02b16a827731dc330d8c5041a7413fd494f5465a88ea1b75b006ab7a93a651a7b0df4860359466553', ['checkOutlines', 'autohint']], +'soft.bgr': ['806973efe79427ade42ceba7c1ee9c13f629f19a83d0c4a2373bdbacae73ed339e954133bb95b2b7fd46205c0d9ffd58fdda50ae25dffd9196934ab3f9f4612d', ['checkOutlines', 'autohint']], +'soundcopyright': ['43b7b3b3353562c4292a524dce6ff4b752acb989fd789fc28db235ee6b822df52555d2dcb57f374ed4c26eafae12f0e87ea0aaf93b7c53049cf0069ab067f89d', ['checkOutlines', 'autohint']], +'space': ['w233', ['checkOutlines', 'autohint']], +'space.frac': ['w133', ['checkOutlines', 'autohint']], +'squareblack': ['w720l550l6650l665600l55600', ['checkOutlines', 'autohint']], +'squareshadow': ['w885l970l97600l707600l7070l55-42l729-42l830118l830722l215722l55621', ['checkOutlines', 'autohint']], +'sterling': ['5b98b2d88fa1534eb565e9ed50fedd300db12d67c6b545d284ff5026ed6d5026cc388eb6139859243baaba5b03c5457e586141d4c9c48f9dad1ab15d114870a0', ['checkOutlines', 'autohint']], +'stigma': ['e7acc4344fc8f768c8855a833b13f6d023bce630b08357ad4cb50d7de228912277aca30eabfda33fbacbc1ec64e2da5c528d8420ffc8522a4996f22268ff69e4', ['checkOutlines', 'autohint']], +'summation': ['9aa9dc05496a71f4acfa94153a80ad717da1a2b81f38009921eb9f6a86c87d515f9e53f6e7ef0e48bfda2fad744296c9cdff128206def0dd6735aa0fb56f85b2', ['checkOutlines', 'autohint']], +'t': ['a9d8af458196fb8013c3c522f143b696e21998458221998ef9f24cbd916799c2c3a96a253d7aa1217cb091d7bfa548f944f4414d47e5c0ef95935660e2b9f2b6', ['checkOutlines', 'autohint']], +'t.sups': ['1781ee88e5bd7cfde287fa4066988fb2d6ae8cd981ffc920d19cf7a844797d19f40a1e6b73dfddc4973bc1659b175489c0c0872ff618ca3e73c5635b4ddcfbab', ['checkOutlines', 'autohint']], +'tau': ['6031b6970cc4c1f2425939fa455603723208a9d64e18f918db604664208a48b31cf96081a4d85701c1f7fd41ce82eb8f7a73137af3ab8132e0ff6b0c14f68d6e', ['checkOutlines', 'autohint']], +'tbar': ['4a2ed28d45696ad4d2b737cd481d3f5b18d32e49270999ac58e36ce92451dcd11d233fb0041a505b0b38fb0452776974954c94e0fc67fde76f9a9ae8cef55409', ['checkOutlines', 'autohint']], +'tcaron': ['cf287dc2ced349cf750f13a9a69ad05b078bbca89d4482a26e8c820e196f5a3f12dde68cf28ad834f4a116bf10d189092dd9154d35563d1745432833dcf959d8', ['checkOutlines', 'autohint']], +'tcedilla': ['ffb742df8abca6b8a9fc04142bf572dbf39e70e71cdbd2dbb19fc29f87a419d20599576ea24129cedf54feb1bf08df1527a4a1ec0dd58d78cdb8b50460e0cd6c', ['checkOutlines', 'autohint']], +'tcommaaccent': ['53054f43bf9e0e2e67ab8a14a6dd1992de2117b303b7c8cac62fbc2de22cbdc29f65eb00f641fe9a1effc1b22d42805472ca51fdcef30de1ffe1166f753bd8e2', ['checkOutlines', 'autohint']], +'tdieresis': ['0450c766abefc039743dacabbc6766a9186f0a265603e44fa5ba34d85068e66ee1df89e3d3795dd02b9424dd6ad256abf060491d0cb67b55325cc2b69962a706', ['checkOutlines', 'autohint']], +'tdieresis.sc': ['dd107ef4e82aeb7e43450eb503064962b32c9e0c71c81b4a1d90c506ca807e1ded1dd50e4966cac165eb1da2c97f1fb111891021e5dee8be8224543f8f6eb43b', ['checkOutlines', 'autohint']], +'tdotbelow': ['b7191e140b30da13e7dabf7299f5ebe6fa8ea919f5b2e419d485ba12a5d2858b92cc3389a1455c56506ab622683c97a266bb3de2d46eef8f294fb0b4ba673d2d', ['checkOutlines', 'autohint']], +'te': ['13989773577682a73c7236c6502900cac14b7598657bab698341e1da3a765a7d86eff7de59ce53a4cc0914bf159a91de63d621891ef6c59864ddcb3319e9a6ba', ['checkOutlines', 'autohint']], +'te.bgr': ['fabbb35c7d0b5fee15f116f59fbafd6b7cf72ef39f09f86e3f44806c17fdb2a096a6686de6af608a1bdbc3588a0a19c131ea3aee59de9a231b8e2ad88789915f', ['checkOutlines', 'autohint']], +'tenge': ['9a8af69ddfc5b5cf5cab153d6e429ff9b4099d456df72cac064aeb9a346b67a9ee287f50efe043e395f8e52c219cd5ae3741519a367ae3b5a79cc7f9d3c1a2e2', ['checkOutlines', 'autohint']], +'theta': ['b3e5957eba593b749e825f193426a71992d79098bcff3355c9b34317514a478098a606a441ba499a14f444326e91402efa501051729fc7e997930da8f9cc818e', ['checkOutlines', 'autohint']], +'thinspace': ['w125', ['checkOutlines', 'autohint']], +'thorn': ['47bb868e8f4780ba0663fbdd8d606f9421241054538f301c2252cc73e18edd724b0e76c756870158419c210779fd9591528d4bd2c8fd1de99e3d10447851f65c', ['checkOutlines', 'autohint']], +'three': ['1ef6ddd22fe3e917714ed5f5c126986fdaad0772940dd365e508548eb078a0e19e131f9502fd528c78edda704a94e2c15fa18667a13a6b97f0d5ae9f6a7efda5', ['checkOutlines', 'autohint']], +'three.cap': ['a38d05d7df6182def71d694ad7f016a03def7302e02d7f30563e072abd39e0947a0f7c7868d65d19475c52fa899b87accb5fdb87c549370b9c1f23fab516231a', ['checkOutlines', 'autohint']], +'three.dnom': ['e58f3d1879569f3d60bebb1fd13c2f2893aeb96e7c1bca038f03749872d52ca88c7bf3b5be2659919eff68bc3e3980b4bffcd35952da7b466f549e2efcb88db4', ['checkOutlines', 'autohint']], +'three.lf': ['42cb310320b88e9061f52429df4e03261a3317853bb0211c8da4253e1a011dd0d50a489e34498759bddac7cfb550c0c2b0cfea48b052fdf71bb4c47ecccd66c3', ['checkOutlines', 'autohint']], +'three.numr': ['60e69f2a73175a37633c3b8c41c4b9de35e1e3462ec43dec8f0cba077bdbfbd36473066ad1ecf7fe4ecd7464719f84a6881c036fb241930aa252270e0e02fc6e', ['checkOutlines', 'autohint']], +'three.osf': ['e85e19282014f3bfa14c572292c0f414e346f8b662c40245c7699c3dcfde660dc3c778e65b6f79d7bab82e7820970abee84cfbb538f7fe7548acf8ef0f703bec', ['checkOutlines', 'autohint']], +'three.sc': ['e541786573639a45e204562d97049ccf2b1060a0653f09e6f07776c5cde258222fd813d7b76b9491b0eacc9f9650093a6140b3cca22002f0f89737cd4a883346', ['checkOutlines', 'autohint']], +'three.subs': ['31298e71b837858656e57d3525d27d52019e97621fb35f5e49dee29baefc55663997a0759c97d86eb9a14bfa6ab0c336eac4cd8db79a83d523f439bfc953c682', ['checkOutlines', 'autohint']], +'three.sups': ['37d40d4da2644559f2e1dbde95754377278a7af9ab3f504b13affe5dc165cedd83d46255faee8fd74e4ba684696ef6cc7acab193ed64c0d85d550f4174a16c98', ['checkOutlines', 'autohint']], +'three.tosf': ['881186c9e6528e6bb4fdef56364d68b09a1c652aa81755eca372c836dfbc8f360df8edfe065f6041451264702c280d6d4d2d50fc6e01e5a98854c5ea8b04aee3', ['checkOutlines', 'autohint']], +'threeeighths': ['8d1c74e6a7ee63f91db4cd9df418ffbfa543e16f6733362e20536f649dc288abf7819bb62ef70018838bb07f3ee4256ccea9a9e9030b207f39130a125fb70dd1', ['checkOutlines', 'autohint']], +'threeemdash': ['w2276l40215l2236215l2236280l40280', ['checkOutlines', 'autohint']], +'threeperemspace': ['w333', ['checkOutlines', 'autohint']], +'threequarters': ['b84b08a9316d3095ed965a7656ba450db36633713fd4f433e35a75dac38ee1d74db3c8230d9cf9e5baa4032619c89e587ff4f7cbe073dae0f85d6c6726fa099a', ['checkOutlines', 'autohint']], +'tilde': ['6e87f9cc6f4b43b452d09a3b48d79a8089fe9de4024f789caa5f38976b1d0a7de7303e97e45215a2fd02276a7961219d4e58fdb71ad77d24ac704e7e3f586193', ['checkOutlines', 'autohint']], +'tildecmb': ['74af9a5a7359e1877467996d2b5046fe0c19ed364dcf40af4efa16d35ed76a8539b3a8fd7d49b8ba3f54e53173a2ec1d335d539d31f6294322e92cf64de8d2cf', ['checkOutlines', 'autohint']], +'tildecmb.cap': ['bc7af5d8a1359b45994f59a33b7bd7b97a67d7beae607ebb81c27820268aff0ee886620cb835029e4902e74508cf0b4b08581e3c5796dc00518f9f7606abe5d3', ['checkOutlines', 'autohint']], +'tlinebelow': ['e078b81f6488fe4afa24a8176e7eb0cf1e9c2096f068d995966247ed51accf332e10751b5e59401882894b6267be3cd0d7280ec398b97a7b858b3b68692b02cd', ['checkOutlines', 'autohint']], +'tonos': ['w363base:tonoscmb10011780w363l-15556l16542l105677121702127712c127729127752110767c867676876752756c41726', ['checkOutlines', 'autohint']], +'tonos.cap': ['w125base:tonoscmb10013-82w125l-15556l16542l105677121702127712c127729127752110767c867676876752756c41726', ['checkOutlines', 'autohint']], +'tonoscmb': ['w0l-15556l16542l105677121702127712c127729127752110767c867676876752756c41726', ['checkOutlines', 'autohint']], +'trademark': ['7e56f8b5c5ebc2c8b97eb7443518bfc6809a2834b2dd92b2d3880e2b8ef1d9429d274214387b83471b73ff14a94861a5809f1d213c41d7e6901e734f5e226b47', ['checkOutlines', 'autohint']], +'triangleblackdown': ['w582l556490l549501l33501l26490l28443l29843', ['checkOutlines', 'autohint']], +'triangleblackleft': ['w582l489-1l5005l500521l489528l42270l42256', ['checkOutlines', 'autohint']], +'triangleblackright': ['w582l94528l82521l825l94-1l540256l540270', ['checkOutlines', 'autohint']], +'triangleblackup': ['w582l2655l3343l54943l55655l298501l284501', ['checkOutlines', 'autohint']], +'trianglewhitedown': ['w582l556490l549501l33501l26490l28443l29843l291127l101454l480454', ['checkOutlines', 'autohint']], +'trianglewhiteleft': ['w582l489-1l5005l500521l489528l42270l42256l126263l453453l45374', ['checkOutlines', 'autohint']], +'trianglewhiteright': ['w582l94528l82521l825l94-1l540256l540270l457263l13074l130453', ['checkOutlines', 'autohint']], +'trianglewhiteup': ['w582l2655l3343l54943l55655l298501l284501l291418l48091l10191', ['checkOutlines', 'autohint']], +'triangularbullet': ['w305l72455l54445l54214l72204l271319l271340', ['checkOutlines', 'autohint']], +'tse': ['486de39b1475b607d59e8295fdf9b8c8723992062094e66691adcaca07adca4c222bda0f943a3b7103a0966efb28a8ada8d60a809abdd1992981dab9ca1eed23', ['checkOutlines', 'autohint']], +'tse.bgr': ['39c4b54076b32836fb80250ed8c37bb579cb1a787877f6d967a679ba8a81a79062e046ba30a9249c909af8db4a9c48005871ce5dd5af0efa3a44f3cf397fa957', ['checkOutlines', 'autohint']], +'tshe': ['46035190e8b8b32298d334ba9a582cb54c8805e11e429d35b79fd8c4344821d2e1aaadf1ff66b070113388ddc9da641662ab93af4d845d0454d71b95826ae8bf', ['checkOutlines', 'autohint']], +'tugrik': ['43bdd305edb03a05cbed12558ff253b65f9e0e4522ee68dfa39421f94094a034f62383bb352ce776d53e8248874949449f2d1c1d4e86b0f4174a7a304e206e92', ['checkOutlines', 'autohint']], +'turkicdsccmb': ['86ba020e3bda30e7a8682a5bb8ee0816a4204114f21a4427521bd83b52b66b5cb967d859963a051f61140c046bc925369277e083cd0ec16bea2b9cd97c49d532', ['checkOutlines', 'autohint']], +'two': ['244753858dfaa3877ade0fbb91abcd07b72ed5358a62dfa66ad7ee953102a88bc9e104ade53a73c8a76979d81df072977a60f22f6b0e16b8b7e02fb0548649bc', ['checkOutlines', 'autohint']], +'two.cap': ['0925addecf56265ba595673f405d9919fb35a7a1cbb7f7b4b040843b9970cc061af176fe41fdefb2a4ed6b3fa52f3bcc7eb5f25bc7a769e64034e1f049f5e256', ['checkOutlines', 'autohint']], +'two.dnom': ['6feef0d71833c3dcd7a6f8aebc6716a6d9caba4251db7079fb4c0556f347b8b3f3f0ed41d619205a6e32a414ee9eb3c86342c9bea2c53370b5dd92f72d22cd43', ['checkOutlines', 'autohint']], +'two.lf': ['6ef56535cbc9137ec0e73eeda96fba06aea3406d0c511f7ca15b4791260f524d3a3f335a2e180a76c65c21d9091ab06ff1cf2bbdaab9f7dcc74d62b8e2507198', ['checkOutlines', 'autohint']], +'two.numr': ['ed4e629b6e297f0ef120a7a3937f8163053ceb57c1a7c645d482ae7a4f4214851084c5297fc1096f727aaded07c983fe5f644f77ec2da9991bf693e2cbdc6bb7', ['checkOutlines', 'autohint']], +'two.osf': ['8a2467d9dd33a122143fcddcb1153ad6ac780fc2bab000417523539777891eaeab11d74419d0d452254050a80dcb63cb2296924e169792d99d0191e7f0e44241', ['checkOutlines', 'autohint']], +'two.sc': ['040ff8850bfdc15103def1f6647dbbcb25fd9f3f948c8ce9a9f44e3f94e4b9ec9ea58b1108e52cf8f67b33dba94c2b9593c761d64e81f2d8c5b207a6bb7a1fcd', ['checkOutlines', 'autohint']], +'two.subs': ['d058b8cd5ac9e2b839474390c70902c26a5836607935f8ad5ab3b83703cb5db7cb041236ab1e40697b8b75ea5401e38eb78a1f4284f0ea2c6c850992b1e379ca', ['checkOutlines', 'autohint']], +'two.sups': ['401fa8b44f389f2d67b1ec31d8c360d583d6a4f69b0681d18f59025d4ec39ac555bfc5abeb66f098b0136a628b5442290cf99af3832aefcc213ada327196311d', ['checkOutlines', 'autohint']], +'two.tosf': ['6ac03e9556bee873d5b6d5eaa6448072ddaa01fbe485da872eac56c72fd957d333730c041b9f544468425f3bad7e514d09a68efb865973927e59a981616382ec', ['checkOutlines', 'autohint']], +'twodotenleader': ['30919d35664511feb7eb7721e064a82154263882cee85c07d423107dec89b4b031dc48e991187f5b9d4f9d0a890587bf1cc68c358af2e7f1759d6de8119507da', ['checkOutlines', 'autohint']], +'twoemdash': ['w1544l40215l1504215l1504280l40280', ['checkOutlines', 'autohint']], +'twothirds': ['56a9c58382e5cf18441dfda9ed46ecf64aa328e9ad6ffdc17deb66ce790f6d8894fd274d22be2499f0a6cff044de717d785687eaa1dfbaa423ebdde1ad11cfd4', ['checkOutlines', 'autohint']], +'u': ['7e40a9c9d389048fa2530a7816a200d035a64b450c5ebc702adff9e8f8ee4aa951ab983ad342f3cb4c3bcf315e7955baddbbe8cb4b16db49bc622a0f01bdd804', ['checkOutlines', 'autohint']], +'u.sups': ['72ca73570c0b75ab3a0bc0874b935cdd2003e0416a7a4edf570e2a563d05dfaa0e67b85ec93c84ab66a863f320925b681e0b5b15de0da7c13e78649beb41af21', ['checkOutlines', 'autohint']], +'uacute': ['e94f65b461745eefab4f3f1d6041ebf684ef3b898425f070dd7e3c063e8a7b0a7a74a3efdc718f01ab7bf3aff21b2342297cff59012992aaccb9b5d8b965182f', ['checkOutlines', 'autohint']], +'uacutedblcyr': ['d9626ae8c9ea058985fd070b7a3f292e245b5dc30ae80edf969ce3a42d82fe22bef4a5cb5554b2b2c767364d71485a8d659e7ad6408989061c44257bc4181170', ['checkOutlines', 'autohint']], +'ubreve': ['b86ad84a515f804d9fcc87c33c96003c4ffcd22dd447e85cbe26032731d6401fd02907d79d2c948e7673a9c9c77586ca7c50cc7b4f7d4c4a34853118af9947c2', ['checkOutlines', 'autohint']], +'ucaron': ['838eace198aafd94b24500e4d1e7383c9eb78fe0fa97450f2bd919e25c1ca3abc53727eef8ce1794bff908a4d1960be90dd55cbb8707e661d52d0f4a442a2243', ['checkOutlines', 'autohint']], +'ucircumflex': ['dc106141fa1e82621198e9cdcbbddc36c6cf8298aa3b36b9649b6a2baed4abc9005485da7eb8e043accb80e262dc061ae73e03a13c92b330c507981719394b8a', ['checkOutlines', 'autohint']], +'ucyr': ['edf0dcdf30338f6480bfcf5feeeebe91e216550745014da5a866e4e5efe36b07dd07a2c7a8f3afe8332d12fcb386d621639ad8cc159ce71c4175792d25a68daf', ['checkOutlines', 'autohint']], +'udieresis': ['1e0c5f60e8b7487a345da8399035a94ad453afe86b1340d9f5d6079a63ca9e52fe8f05ce09ab353d4db4a5b654490b6cedf93e645baa8fa54ce926503c637199', ['checkOutlines', 'autohint']], +'udieresisacute': ['5faf65fe39f6869f55ed4edfb6bfe8bae2c09cd1eb883eeb1b8f43f577b4be4434b8a6a1a33f2d58347eea898662e1b0d1a8aa0861cf54a80b430898440079f9', ['checkOutlines', 'autohint']], +'udieresiscaron': ['c8677332a0a5533ef344dd43cf33487d0024c7f8526dd653f4d5c75cd8ea3d2db9d718daf8bdc4b7fbddafd5f9d441cdd6fd5b9974d19ae8c97c1ad864dace13', ['checkOutlines', 'autohint']], +'udieresisgrave': ['2d2cb9f57047ae7e13ed4e9bae7a5cffb5ecc0cc977f9b48e5c4c6e57ba47ff994befb4b458f3272e847e4734807453c15feec6d4c7df1308273a8428563f088', ['checkOutlines', 'autohint']], +'udieresismacron': ['38956271d0c9492409b3d3ef2769ab1b62d8606f547cdc38552872a3f0498daf7f396b6f93f19ce07ac6d1217d60d0dfcef2191804eeaaa31102b6e0092570f9', ['checkOutlines', 'autohint']], +'udotbelow': ['435931e0b57dc149b01014760f18b60dcd7c8108a29371d86b5be3925dea70dd2fdae75b445ab9ba45a3e9f898a6a2d30c35e2cef405c73aff1aaf11d561ae4b', ['checkOutlines', 'autohint']], +'ugrave': ['6f920d093f958aa66e2fdcba5665dba7a7e0787a088d42fbcabe6687e06b4602c43e0c07fcf0e72dfeb7f1efad6bfe5d62a970189f983d8705df916a7ad0d672', ['checkOutlines', 'autohint']], +'uhoi': ['3c749d92ec3035d007079d7a11734e89bbd2dfec17603e622fe4bb6ae91a0783422954bbffe97d1b1dd0c08c4c212b069a599d74673644eaf1d26d68790204ab', ['checkOutlines', 'autohint']], +'uhorn': ['a04e1a0f607dee551221b5f4e99c2bb4da3ce2e85e2ec2f4a2c6538fd3fa1a0782370623bce149be76edd8a5209de7dc15844e4e6b2a92e5fbef5292b2098f69', ['checkOutlines', 'autohint']], +'uhornacute': ['440885d77d68392c8c1d67061096a666ff151da711b9a8c2d1a902dc8f5983e00434f40f111d8ddeb7d07f2efba9842549e3b168876df9f2c016268caeb5b9fb', ['checkOutlines', 'autohint']], +'uhorndotbelow': ['35875b074e38d640136fc3fa501e16f80dbc05c3c125a0b7e65dd5ded461ac3a3f0037d1fd7a72b9710cb291732c6fedab2807742265edc8e81c8e1aea06a45a', ['checkOutlines', 'autohint']], +'uhorngrave': ['9a1cb4af3a76be2c8aae9572c537ac42c9daae8d2da8773673b4afcdcd99f85f65fcb7eccaa01678faf09bcd9321863eb4a26bd0deb675ed0fe442e2b4ae0cf1', ['checkOutlines', 'autohint']], +'uhornhoi': ['7f09104cb78b59665d960fd31ccf2515ec617eb6ca5f71175c9f3b40f2115d4f2fc5d0218989ae62ce96b6eb0878039085a42f88d0fcabf00f5d9b54ccc222b0', ['checkOutlines', 'autohint']], +'uhorntilde': ['1199499a7b7e6ef0ba8464d6a10e5f0e2c36c8c557a0edec9415786956876f15d8419ae302f01b5a2ad28a0e20af54b51f841c28f3d9dd7a5bbf9f6638fd93cd', ['checkOutlines', 'autohint']], +'uhungarumlaut': ['6cd7c10036e60edd1a5aaec05bf77ca4af751901a2005be5c6321751247f00339d078e7a8cd59c6ab6b3f1e5d124d0089a282938121eae547eac56445c7cf3cf', ['checkOutlines', 'autohint']], +'umacron': ['ef4c47a876138e994515b2cab1acb610898f3456dd9ea9b1c8f083a24885afbdd3fedfc57068c5ee6979ca83eceb655b005d3f7c228af760ae806b7b745559f9', ['checkOutlines', 'autohint']], +'umacroncyr': ['c0ab2a2b93662e9300ed64da3f9b327831572d2b9364defee51ae5765db3ca43cbb241330006ec93c4eacdfd62da8ce07c419f4ab0292b6db2f126e573e3f0e4', ['checkOutlines', 'autohint']], +'underscore': ['w512l-5-69l517-69l517-4l-5-4', ['checkOutlines', 'autohint']], +'uni004Duni0300': ['c18c88a1b8ba1a64a585f5d0a2860745582e401f6fe65134b0fdd0afb0a6745bec7f3c864dd847b34d0e2dde37c25fc6f5779c03364f2cd0586acdb100fadf12', ['checkOutlines', 'autohint']], +'uni004Duni0304': ['4d01c78c09320ea4ee5d0d9e2b05c2d8875151d5c5c38e4bfc8ba533263c9fa9c59abf1857e8b7beb22a51169807646aae0c014d390764449b78d3f8af77ef6a', ['checkOutlines', 'autohint']], +'uni006Duni0300': ['209d9bfabe32caa3de9230e3f97b554bbfcc18c6a4c3323e9306429a52f2b0200d2490e1c06ab62e17806a76c818c3816dfb23875aa685e5a11436087247353a', ['checkOutlines', 'autohint']], +'uni006Duni0304': ['ab77f3718cef0d6ac090607dc277d6f5af27b08839e14fa23efb44ce37d6e4e60f9359112da812e12a502d23ade3bc1e888f2765ccc17c884f828aff07f42ec7', ['checkOutlines', 'autohint']], +'uni00CAuni0304': ['840e395f2b287ab49807201695ab1b6846f50f0d2bd417b23ae7f128e066a6284ede35813b791e4733083f8f22f6e5fb2c311f1721eea101a0ee551cbd4cffc9', ['checkOutlines', 'autohint']], +'uni00CAuni030C': ['adcf95d2cc02d7d92e8d55fbf982d87e3654a7345b57cb58ac15f423e7e6067fadff4b073e33fe9905206d6c00095105c5002e458df327d5e4149967c448af8d', ['checkOutlines', 'autohint']], +'uni00EAuni0304': ['c962878952706c04dbd58681f42d3801107ceef5042b0e4289bdda4de54341cbbe5ef231cfff7b99a8befb5efa529b923e5d06a320558f9d55024d6cc8ecfc35', ['checkOutlines', 'autohint']], +'uni00EAuni030C': ['27aa861c1725d92bbeefb10d6e5091a20673966cacd8d1e9a66cabaf9bc560c0925116c469b2544885cdcdb53b392631405b51a749d31f717ab5b64422dc1f77', ['checkOutlines', 'autohint']], +'uogonek': ['cfb960bd15ac6c817db4862b07495d3c2f60bd5b41f7496297d8486b38848eff2938ff216fa35f0e5ae154a05f8297c8696bc632f8d934468ecc4e7762ee837a', ['checkOutlines', 'autohint']], +'upsilon': ['7e4f019371fe0e132a203a0d54841be4e1202605c5bac25b2eca5a1211dfd8a1262c116ff8f3a9fc2553e30eacc03ce4d70310fa1a8f1d4dc0916c3c9d0d1433', ['checkOutlines', 'autohint']], +'upsilondieresis': ['c1eef37ed199bfd1225a300be850a8234628c03c96ca2fd9795aa9be802bf35b389ee65b9a0e5f30fd2db9acb5c8ed2167ab58ca8f0efb1b480af7c335fff5da', ['checkOutlines', 'autohint']], +'upsilondieresistonos': ['b32b7d09bce671bd671a44bac4546765f80ab74d92a3863527d1a3887299b39d8d79e2fe370df3d396cc732bb180a348df5870f05dd5873dc0695bd4c02dad8b', ['checkOutlines', 'autohint']], +'upsilontonos': ['6e090ceb7b6ac4fc8f7f1cdee1bc8ff426b8d69afa6be7c196c260edc22628892a2884d93e1d0dd327a973a7fa39942490cd99b960c46ade7852e64f1bbd439d', ['checkOutlines', 'autohint']], +'uring': ['ab460e355095065615911c8535f68b22c23b4bea06baa7fbedb217bbe34192c72dc5f2d45224d8acd4849aefed556e89b561e6c8fe2e99b04cdd800da839a343', ['checkOutlines', 'autohint']], +'ushort': ['7db992484f72476e6f0365273d4680a0cd8d5b073d7d0cba473168b2e4c68fea2b73da4c190f73a506140038b12fee45f6c972cec865fdd2e7039bb6d49a65b2', ['checkOutlines', 'autohint']], +'ustraight': ['e5b278c14eb81a5ac1b989d61865b65c340dcc5dc7823b1d0dcd5c152005a4b27b994052e39a3eafcbcb569e38e7b840a967610b09a1447ec3250ff61780a337', ['checkOutlines', 'autohint']], +'ustraightstroke': ['502c08d804d29b76867c3b3c61b16a26e30d215b9a5b4fa382a17a6c86fb07c6f796ccce157920fafd480f5850dd9d7bfa1b0f2a4faaf293c05a4ae4b56db25d', ['checkOutlines', 'autohint']], +'utilde': ['17e3a40244ce7cd46a66b782b55dfec279f7e6b9bd32824a60194fde95dbf52367c0da80c1bd3c6df64649aa348cefd650c5dfd5fe31ee1f59b9c70e1f1424f7', ['checkOutlines', 'autohint']], +'v': ['43007d99be6aad7037db4b80b0b36f914f4d9d4105ca24604c1298af6bf5f4f827a778c35f857857b666b0015d0f5cf9844d54b289ff541c068a2357e3c5074c', ['checkOutlines', 'autohint']], +'v.sups': ['28279c967e8d8bb770a6498eceed91c25db2cae947290fa813c0dae80c6bc673665c86f43dfe064e782ab7e7c6260a97f5117f7dfe2166e0b411b7f9c4f4ab0c', ['checkOutlines', 'autohint']], +'ve': ['9d7b83824e294be5c7594f32146dfa8bbfe7e7d4bc241567d7d8c783d3ffb779ac27116908950d559a0d94c668fc3bcd3ed42ffbb2ce25c26ae596b1e0d7f1ce', ['checkOutlines', 'autohint']], +'ve.bgr': ['ca234219cc089fc43922d30142366a6eb6a800d54eb7fc0258d3b306db26d3458e4fcee693b9cc574d9d991272ad1245860f9af4da43c4fcaa6be7502b11b930', ['checkOutlines', 'autohint']], +'verticallinebelowcmb': ['w0l-36-267l36-267l30-71l-30-71', ['checkOutlines', 'autohint']], +'verticallinelowmod': ['w183base:verticallinebelowcmb1001920w183l-36-267l36-267l30-71l-30-71', ['checkOutlines', 'autohint']], +'verticallinemod': ['w183l62541l122541l128737l56737', ['checkOutlines', 'autohint']], +'w': ['d0647af9925592dd94621b4e26d41572da89498dc884395456134a2fee5153269ac7edd6f4ffc317425b568b08ec5b6d10e1e5da3b7ea36ac226c3cd4a1273ea', ['checkOutlines', 'autohint']], +'w.sups': ['10487112f15543a3dd9a86df3037ee7497417bcb3a6fd4eb41ef8ff86bd8f6e60fd21489388360d27f4d2890e57c0244d9e64a8e98db715c3025628f1e55ba38', ['checkOutlines', 'autohint']], +'wacute': ['42938ef24e83c43b7edff6cced675804f140c5152ffb614a324b91e26c49858ca504b0ee1727fefdbe59594577837f0c1f09071636f87da622a88ab17c4c4c07', ['checkOutlines', 'autohint']], +'wcircumflex': ['432b31c6e68d4f82630304cbb2ab9c28bd759a806e52b0988299cb296d4b40fd72324b60ab7fde268c9f222d4b953d647789e412068f9eb58c6f241c20b9fa56', ['checkOutlines', 'autohint']], +'wdieresis': ['9497b9f61c029763f295db8034b09ef9b491ee0620ea576bb42c30de3c6f87df27ba179f61e0d4a12f0974a386541dd0496523341ef521846d82c78dbe1ac863', ['checkOutlines', 'autohint']], +'wgrave': ['9183d38ca43cc59d4f52d5135e31b5859647ed044347d2adb0ac35561e469406f06125580ed68d02bd8687f6a19d0d194b02944424441a8fc474acbd2ab509f1', ['checkOutlines', 'autohint']], +'won': ['97df42643341138cc02edf3c9ba24c3e459740044a658971e2d26c82635ae818b696528c967f676f8c82f4119b8054d932ff885d1d2122a2478fe74e91605bd4', ['checkOutlines', 'autohint']], +'x': ['4390f0e4d4f47892da1a763e404b1ec7a71ce57a2db5a67cfea146de08c45c7b61f59d27ddeba706ed0dfee67237db1b4701eec08a220f2a63c9ddf3e407fc7e', ['checkOutlines', 'autohint']], +'x.sups': ['a1bc01e2d5cfb60b588593feac0b360d862413165ffe27710a4158e4189f4c985b710223fbd8389f4c5af09cad2c480990fe20b863428dd2acbeafa5e94dcdfe', ['checkOutlines', 'autohint']], +'xi': ['bdc6fa9f5bb2f98d46b3615706e804ad7bdf6a6ab76e9483d37a9388a178b2a5a1ecd0156c0c428af9a2dc463303c153ae74fba5018668761e5bc85383dd3ee6', ['checkOutlines', 'autohint']], +'y': ['c2fec6a65ab1dd873bf0de6870d11c1ccc9a2efa5916d21e2703dd3b75d9fddbad763b574886f08910ba1f66d3d4841c2f27c648ef0cf4658f210bb612847bfb', ['checkOutlines', 'autohint']], +'y.sups': ['81a7d1ede765cffb0a9f8dcf60ebcaedaadf8b8cb3594680f0cc2894c88c1d86fa1346ebc0f438c872bbc56a4a29ab5bd02229c2a54533cbc231277093bbd507', ['checkOutlines', 'autohint']], +'ya': ['91f302042c8a7597e5069977fd7e7d9bca63b137acc3b57214667413f0736e9c58ea31ba3701b696759bec131e096e21ed64e696f34cff2ab5f86295ec55a61d', ['checkOutlines', 'autohint']], +'yacute': ['a1a66fd93dd1532e1d1e577f5944b2782c3118db427ec8aed70b028f6549cb000e2999032a7c211c9e56112b8fe5c35982e75531f65ab3aedea9fc32ffa2fd7f', ['checkOutlines', 'autohint']], +'yat': ['d2016e3b34e307fad2f7bdc730fe156808725759c9f5010ed32d48de8be0a5cc7d52562e09cfdd5058109d80a795bfad7e81df7e4dea5b3b53197f81aac1afba', ['checkOutlines', 'autohint']], +'ycircumflex': ['b122b540092f18a33ab4f667121dd29098c63c5ce90a72f394cee7e5592e5a9be8384634a6a1d3179788bba5a6b9b84d84596e1259300323f6b772946d302960', ['checkOutlines', 'autohint']], +'ydieresis': ['aaec9d75ffe4ef065bf4f113e88c15fde68d024e04e46e8e418fb7a557ce66821b6e3c32641f4cc391e2f2f3d2c2189ad7cc208229c5c555ecaae305c9fc0cbf', ['checkOutlines', 'autohint']], +'ydotaccent': ['3410491cf0bd327a3e6859c7918d0f745160adf7ef100a7190ffa3b0184f6ce2f1f791ea89990018db721e8532181ae0b10a63c6de3144895741e4239b388a46', ['checkOutlines', 'autohint']], +'ydotbelow': ['99d28efe4074677d9106fbdd067e576843aa4dfff17199ea889f174bc8273d43fba6814f1b2c6a1f575301e18e03d68ce9db49c3acf7d8b219f40efb5ba78b10', ['checkOutlines', 'autohint']], +'yen': ['cd725dee7a4edbef0edf622c8a6193260e36992ed536cb517f26899dea3eedeb7ad3df469fd2c6deb045f0ace7ec29333ebaae08ced8c12d29a69e5113dfa95e', ['checkOutlines', 'autohint']], +'yeru': ['41e173ff9ae731157d9980d356c2aa4ad41aed5b9f365da900d1882d4eb69f10123145cf54727d783c7236437abf4d1a283ca60f5b0e45680dfdc8a8ea6018e7', ['checkOutlines', 'autohint']], +'ygrave': ['20b6c39e40bebc3a4e856ab0c4bf9af0fb9c25e13972bbc9dc34df434f44dd519c970c047d408c055ce9ed5679608882445341a8fc17059c66af512b087ff073', ['checkOutlines', 'autohint']], +'yhoi': ['52d14e986f6fde0ef9de84702c95db4539330008649095b679d6f38a0b35bbbe19507bdd7d599965f9fc80c24534b60547cff595899ac9b17f3aee79899483d4', ['checkOutlines', 'autohint']], +'yi': ['6e714fde5e7f650261b780363b8c81c8d0a4b8ee51ec8ee9c99c303a0f5ed0621e9b18d7412dd0835873c258b9f5ed336643d1c6d7b0b9eee6dd3e9042760e24', ['checkOutlines', 'autohint']], +'yi.narrow': ['e354d8fef25513fe98e5bb8ab92c32216dbd1a8125b3f54160d5a788554f3f4ad8477484620f4adb888767a54287523eb45eb5ba445b1c0418a346713a88bb23', ['checkOutlines', 'autohint']], +'ytilde': ['e3a5b23aff5fb855701d6a46e4fae51bdc52b479afb63a1762ea62be7cd6c1e386af6e575639a651baf72cd7120e3bbc148b83b64bed365536b10246b7363212', ['checkOutlines', 'autohint']], +'yu': ['5639132e5b50ee12902d8420673a9e70d0c615b728981cabb1bfe70ef5fd4b69ffdc59df8a4d619117d1e3c12a04acb77377bbbf7b2d0cc8949800838fd01a2a', ['checkOutlines', 'autohint']], +'yu.bgr': ['6a0cd0268d877c84ce1de15e05f880912a8bc9cd7548f5e294d15346d87cd7068cc1f0f2cdaa7698f663d1e73d1a20fd9253d4129e805ad7f34186b90882ebf8', ['checkOutlines', 'autohint']], +'z': ['3da0638dfe1fc18c98062b9018e9bfed89603bd68520fe9d51ed9a1472008a621d7c09fbdaddb9a256e59a0a1960baf69a3427ae1ab91e57de453c85cc0f6e6d', ['checkOutlines', 'autohint']], +'z.sups': ['w309l17427l287427l294535l257535l230427l263459l76459l76427l286714l286739l26739l21641l59638l85739l56708l229708l229739l17452', ['checkOutlines', 'autohint']], +'zacute': ['c09d547d8a769ad10a94f7419dd0f0a66f89d4ccb26e2ba78cc019a832a55656aec8ce88fe1993c2d6d19dd1c1fd31bcbacd3924b86d68a82fc2c86ac1a24eb4', ['checkOutlines', 'autohint']], +'zcaron': ['8748412bf5b6dbcb9505c6e613aafa0ac42be04489799032827130e4d0f10d45672c3147282dd663cf71a4ff4d84079baa48b10a2fcf564bf4608432b9f8d678', ['checkOutlines', 'autohint']], +'zdotaccent': ['a36004d2ec998d7d2d9f31bf76df9fd0a1645de404a65a60ada89d83094c78f3396d496432910ace016d7c73058e6baa4adf9ac68da0013aba98e41fabd5ca82', ['checkOutlines', 'autohint']], +'zdotbelow': ['2c9c9b7bb42916176da30c824823e89be0579c26da3a1184dbc51f4fdd19284c4d30863c11cedd2226b0c160ea79d46c836b56699f3119d3ee1b5e640ca5c682', ['checkOutlines', 'autohint']], +'ze': ['b7457984cbe955ffbc632a19334f8a1dfc343d09470dba3d0f4062edfb006188d5ad8df0c609131bdd64b1709f4af607c09df7c153bef8d04486417eca91412b', ['checkOutlines', 'autohint']], +'ze.bgr': ['21a45ea388470adf8d3dfd5502c2269c6b758f3460349b71b7aae244f376747a70048ed4ccc84b484cdcf3e1520656b68e719e1c45760f0831e326dbae9d28fd', ['checkOutlines', 'autohint']], +'zedescender': ['27f86a8a235b3f2e440e5e06ea5dca6370c698366e5ad9e54163ff422d74fdb2fe3f6d575a9d2f2a93e1f419fe315f0ddf6b514c71ce5fa6af2f71a1d91a4c4f', ['checkOutlines', 'autohint']], +'zero': ['7baf2013b3ab4b3ac651cb4957a14b996f34ea21e239f7f04b3e2dbbc0f20e089d1433203311dce4437826a83e42ad0b510174ef67c25237a8a915a2020d1347', ['checkOutlines', 'autohint']], +'zero.cap': ['32bb689977294032ae303d74156be92fd9e08d2d87067c4a950c269be66552428fcefaa5e5d379bbf56e26c7e20ab5d22ba992558d5abf6a6a2ec397cf0ae086', ['checkOutlines', 'autohint']], +'zero.dnom': ['677cdb16f101ee080509d09176ce65addf7f884ed1c1fc6e403a57484f200668c7a6b670c5911548e17a7493f84e43c1dc2243508e62997c09e94519d73ac02f', ['checkOutlines', 'autohint']], +'zero.lf': ['cd74437052719f2f8bfd8be6e984d49c0f75dda9005843d8e694246d12205b813b875c8f4dd4b9b8f8bd845d438d9afe2b8cc93a1604c8279289c7c921aa9126', ['checkOutlines', 'autohint']], +'zero.lfslash': ['f304caa81fc2e5acf5b25b986d9ec1bd7e2c1f1e2dccd712808f4d610897f11f106255afc84bf418a3ea3cdbcc7c9c9566ef36ab066248b64fd99c26fd7fa477', ['checkOutlines', 'autohint']], +'zero.numr': ['b5072021dc17648b7b0d58f920994fc10a90db9a3aef1dcbdd7b3b6720d1777a945dbf36025f690d496515f20d930fc1272a86dfe354c574b2cc25ef108db2fc', ['checkOutlines', 'autohint']], +'zero.osf': ['f72c60003139a3e2287cc8b413affe0ae9a25ab011c102caf8e1d5807173d87d48c2535a751205ba2ea87b90a62711ef0afd1c61c80a075372f605c894eb5c36', ['checkOutlines', 'autohint']], +'zero.sc': ['88d7ebbe1b48c8e5140939832709438f74f30cd758909e52a7e2c0d2f4f61ef813af953efbf9e91018765f2e747dd804c3278142bd84d729bbad8ba09d7afeed', ['checkOutlines', 'autohint']], +'zero.slash': ['c27e5b0cc561b8d5df61abed2355b5b5f98bcc3b674b3c96d5f8e88a22a032d96227ddb526d09166e2f7e3bef92646249d82fbfbba4e92497670e977146d76ed', ['checkOutlines', 'autohint']], +'zero.subs': ['fde5c79bd4956a64b83a8df9eda8ad6aa845d883b9bd04d26d3ea667fbdf5af0ed31e2bccc5198d03d5fed0e17266038448ddb36741ef8c423639eca832c8360', ['checkOutlines', 'autohint']], +'zero.sups': ['0ba443c39913b041727ed5efe4799dff579319a0bd3e4ef925f32a8e049fdfcc0ce18d3ae1975fad307e349e3c0df145f9faeacdfec5b5c48dc87e85000cd238', ['checkOutlines', 'autohint']], +'zero.tosf': ['2de3610a41726a4b0e10503e4b9fffd9eec7734b4f9e8081e89f844b59a68abedcb632e0e7cdcc216159b9cceccc5b1110d732b09c2c23c655b4516fa2b12e3c', ['checkOutlines', 'autohint']], +'zerowidthspace': ['w0', ['checkOutlines', 'autohint']], +'zeta': ['0189f4a1160c60fe5ff2ad78e23645d1573c2a863d6bd8562f20322db100b8e05599b5a4f594e84e924fa8332231d557c467874e0999ccb5dd856b0aea222b2c', ['checkOutlines', 'autohint']], +'zhe': ['9d08b83c987b9ea9ec693d51698b3b43b287b003a0dfac707624f1463486a555700d3d5490fe51d815b7fd4cfd1401d9c464124e4171c3337e4488675280ed6f', ['checkOutlines', 'autohint']], +'zhe.bgr': ['5f972de70f6c32fb4d4ef3102e279b398eb8443ff0c9078711be040188279d49e7c76b966dff2ab58a50bd5ba20688ac7d9172cf65ae275a9cbf81670913ca61', ['checkOutlines', 'autohint']], +'zhebreve': ['30b86b8b138e8c79c0b5eceb958a49753707b7fddd3bf86a7b4a956d4279cb5388f8718e301500f2989d5b5baf9b741260e495c1a0ad27104003e84ed0b90420', ['checkOutlines', 'autohint']], +'zhedescender': ['4484e8b421e1e22833091966f9d9c8f7c02b3b1fa9aa4fefcec60b290167894e54646ffac440b1699e17fd394badab73c826eff63c8928bade79d1b5759c3fb3', ['checkOutlines', 'autohint']], +} diff --git a/tests/ufotools_data/input/ufotools_basic.ufo/features.fea b/tests/ufotools_data/input/ufotools_basic.ufo/features.fea new file mode 100644 index 000000000..8fda11e7a --- /dev/null +++ b/tests/ufotools_data/input/ufotools_basic.ufo/features.fea @@ -0,0 +1 @@ +include(../../../../../features.fea); diff --git a/tests/ufotools_data/input/ufotools_basic.ufo/fontinfo.plist b/tests/ufotools_data/input/ufotools_basic.ufo/fontinfo.plist new file mode 100644 index 000000000..bba88856e --- /dev/null +++ b/tests/ufotools_data/input/ufotools_basic.ufo/fontinfo.plist @@ -0,0 +1,161 @@ + + + + + ascender + 730 + capHeight + 670 + copyright + Copyright 2014 - 2023 Adobe (http://www.adobe.com/), with Reserved Font Name 'Source'. + descender + -240 + familyName + Source Serif 4 + guidelines + + + italicAngle + 0 + openTypeHheaAscender + 1003 + openTypeHheaDescender + -336 + openTypeHheaLineGap + 0 + openTypeNameDesigner + Frank Grießhammer + openTypeNameLicense + This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is available with a FAQ at: http://scripts.sil.org/OFL. This Font Software is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the SIL Open Font License for the specific language, permissions and limitations governing your use of this Font Software. + openTypeNameLicenseURL + http://scripts.sil.org/OFL + openTypeNameManufacturer + Adobe + openTypeNameManufacturerURL + http://www.adobe.com/type + openTypeOS2CodePageRanges + + 0 + 1 + 2 + 3 + 4 + 7 + 8 + 29 + + openTypeOS2Panose + + 2 + 4 + 6 + 3 + 5 + 4 + 5 + 2 + 2 + 4 + + openTypeOS2TypoAscender + 730 + openTypeOS2TypoDescender + -270 + openTypeOS2TypoLineGap + 0 + openTypeOS2UnicodeRanges + + 0 + 1 + 2 + 7 + 9 + 29 + 32 + 33 + 57 + + openTypeOS2VendorID + ADBO + openTypeOS2WinAscent + 1036 + openTypeOS2WinDescent + 335 + postscriptBlueFuzz + 0 + postscriptBlueScale + 0.0375 + postscriptBlueShift + 7 + postscriptBlueValues + + -15 + 0 + 475 + 488 + 527 + 540 + 549 + 563 + 647 + 660 + 670 + 685 + 730 + 750 + + postscriptFamilyBlues + + -15 + 0 + 475 + 488 + 527 + 540 + 549 + 563 + 647 + 660 + 670 + 685 + 730 + 750 + + postscriptFamilyOtherBlues + + -250 + -240 + + postscriptFontName + SourceSerif4-Regular + postscriptForceBold + + postscriptOtherBlues + + -250 + -240 + + postscriptStemSnapH + + 46 + 36 + + postscriptStemSnapV + + 85 + 95 + + postscriptUnderlinePosition + -75 + postscriptUnderlineThickness + 50 + styleName + Regular + trademark + Source is a trademark of Adobe in the United States and/or other countries. + unitsPerEm + 1000 + xHeight + 475 + + diff --git a/tests/ufotools_data/input/ufotools_basic.ufo/glyphs/_notdef.glif b/tests/ufotools_data/input/ufotools_basic.ufo/glyphs/_notdef.glif new file mode 100644 index 000000000..ab876faa5 --- /dev/null +++ b/tests/ufotools_data/input/ufotools_basic.ufo/glyphs/_notdef.glif @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/ufotools_data/input/ufotools_basic.ufo/glyphs/a.glif b/tests/ufotools_data/input/ufotools_basic.ufo/glyphs/a.glif new file mode 100644 index 000000000..14ca3acfd --- /dev/null +++ b/tests/ufotools_data/input/ufotools_basic.ufo/glyphs/a.glif @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/ufotools_data/input/ufotools_basic.ufo/glyphs/b.glif b/tests/ufotools_data/input/ufotools_basic.ufo/glyphs/b.glif new file mode 100644 index 000000000..6e3efeee8 --- /dev/null +++ b/tests/ufotools_data/input/ufotools_basic.ufo/glyphs/b.glif @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/ufotools_data/input/ufotools_basic.ufo/glyphs/c.glif b/tests/ufotools_data/input/ufotools_basic.ufo/glyphs/c.glif new file mode 100644 index 000000000..a43ab2f8a --- /dev/null +++ b/tests/ufotools_data/input/ufotools_basic.ufo/glyphs/c.glif @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/ufotools_data/input/ufotools_basic.ufo/glyphs/contents.plist b/tests/ufotools_data/input/ufotools_basic.ufo/glyphs/contents.plist new file mode 100644 index 000000000..6d5ea14ef --- /dev/null +++ b/tests/ufotools_data/input/ufotools_basic.ufo/glyphs/contents.plist @@ -0,0 +1,16 @@ + + + + + .notdef + _notdef.glif + a + a.glif + b + b.glif + c + c.glif + space + space.glif + + diff --git a/tests/ufotools_data/input/ufotools_basic.ufo/glyphs/space.glif b/tests/ufotools_data/input/ufotools_basic.ufo/glyphs/space.glif new file mode 100644 index 000000000..943f3ee88 --- /dev/null +++ b/tests/ufotools_data/input/ufotools_basic.ufo/glyphs/space.glif @@ -0,0 +1,6 @@ + + + + + + diff --git a/tests/ufotools_data/input/ufotools_basic.ufo/groups.plist b/tests/ufotools_data/input/ufotools_basic.ufo/groups.plist new file mode 100644 index 000000000..419bdfbc9 --- /dev/null +++ b/tests/ufotools_data/input/ufotools_basic.ufo/groups.plist @@ -0,0 +1,42 @@ + + + + + LATIN + + a + b + c + + lc + + a + b + c + + public.kern1.LAT_a + + a + + public.kern1.LAT_b + + b + + public.kern1.LAT_c + + c + + public.kern2.LAT_a + + a + + public.kern2.LAT_h + + b + + public.kern2.LAT_o + + c + + + diff --git a/tests/ufotools_data/input/ufotools_basic.ufo/kerning.plist b/tests/ufotools_data/input/ufotools_basic.ufo/kerning.plist new file mode 100644 index 000000000..626cd4dd4 --- /dev/null +++ b/tests/ufotools_data/input/ufotools_basic.ufo/kerning.plist @@ -0,0 +1,16 @@ + + + + + public.kern1.LAT_b + + public.kern2.LAT_h + -10 + + public.kern1.LAT_c + + public.kern2.LAT_h + -11 + + + diff --git a/tests/ufotools_data/input/ufotools_basic.ufo/layercontents.plist b/tests/ufotools_data/input/ufotools_basic.ufo/layercontents.plist new file mode 100644 index 000000000..03e5dde58 --- /dev/null +++ b/tests/ufotools_data/input/ufotools_basic.ufo/layercontents.plist @@ -0,0 +1,10 @@ + + + + + + public.default + glyphs + + + diff --git a/tests/ufotools_data/input/ufotools_basic.ufo/lib.plist b/tests/ufotools_data/input/ufotools_basic.ufo/lib.plist new file mode 100644 index 000000000..2e820128e --- /dev/null +++ b/tests/ufotools_data/input/ufotools_basic.ufo/lib.plist @@ -0,0 +1,14 @@ + + + + + public.glyphOrder + + .notdef + space + a + b + c + + + diff --git a/tests/ufotools_data/input/ufotools_basic.ufo/metainfo.plist b/tests/ufotools_data/input/ufotools_basic.ufo/metainfo.plist new file mode 100644 index 000000000..555d9ce4c --- /dev/null +++ b/tests/ufotools_data/input/ufotools_basic.ufo/metainfo.plist @@ -0,0 +1,10 @@ + + + + + creator + com.github.fonttools.ufoLib + formatVersion + 3 + + diff --git a/tests/ufotools_test.py b/tests/ufotools_test.py new file mode 100644 index 000000000..e9ee14fe9 --- /dev/null +++ b/tests/ufotools_test.py @@ -0,0 +1,245 @@ +import pytest +import plistlib +from shutil import copytree +from pathlib import Path + +from afdko import ufotools as ut + +from afdko.fdkutils import ( + # get_temp_file_path, + get_temp_dir_path, +) +from test_utils import ( + get_input_path, + get_expected_path, + generate_ttx_dump, +) + +# from runner import main as runner +# from differ import main as differ + + +TEST_UFO_FILENAME = 'ufotools_basic.ufo' + + +def _get_test_ufo_path(): + return get_input_path(TEST_UFO_FILENAME) + + +def _dict2plist(my_dict, plist_file): + with open(plist_file, 'wb') as pl_blob: + plistlib.dump(my_dict, pl_blob) + + +def _plist2dict(plist_file): + with open(plist_file, 'rb') as pl_blob: + pl_dict = plistlib.load(pl_blob) + return pl_dict + + +def _add_entry_to_plist(kv_entry, plist_file): + ''' + add a simple key: value pair to an existing plist file + ''' + key, value = kv_entry + plist_dict = _plist2dict(plist_file) + plist_dict[key] = value + _dict2plist(plist_dict, plist_file) + + +def test_parseGlyphOrder(): + ufo_path = Path(_get_test_ufo_path()) + glyph_order = ut.parseGlyphOrder(ufo_path / 'lib.plist') + assert glyph_order == {'.notdef': 0, 'space': 1, 'a': 2, 'b': 3, 'c': 4} + + +def test_UFOFontData(): + ufo_path = Path(_get_test_ufo_path()) + ufd = ut.UFOFontData(ufo_path, False, '') + assert ufd.getGlyphSrcPath('a') == str(ufo_path / 'glyphs' / 'a.glif') + + +def test_cleanupContentsList_missing_glyph(capsys): + ufo_path = Path(_get_test_ufo_path()) + temp_dir = Path(get_temp_dir_path()) + tmp_ufo_path = temp_dir / ufo_path.name + copytree(ufo_path, tmp_ufo_path) + + # delete a glyph from glyphs directory + glif_path = tmp_ufo_path / 'glyphs' / 'a.glif' + glif_path.unlink() + ut.cleanupContentsList(tmp_ufo_path / 'glyphs') + out, err = capsys.readouterr() + assert 'glif was missing: a, a.glif' in out + + +def test_cleanupContentsList_no_plist(): + temp_dir = Path(get_temp_dir_path()) + # make dummy glyph dir + glyph_dir = temp_dir / 'glyphs.com.adobe.type.processedglyphs' + glyph_dir.mkdir() + # make some glif files but no contents.plist + for glyph_name in 'xyz': + glyph_path = glyph_dir / '{glyph_name}.glif' + glyph_path.touch() + + # although there is no contents.plist, this should not fail (#1606) + ut.cleanupContentsList(glyph_dir) + + +def test_cleanUpGLIFFiles_extraneous_glyph(capsys): + ufo_path = Path(_get_test_ufo_path()) + temp_dir = Path(get_temp_dir_path()) + tmp_ufo_path = temp_dir / ufo_path.name + copytree(ufo_path, tmp_ufo_path) + glyphs_dir = tmp_ufo_path / 'glyphs' + contents_plist = glyphs_dir / 'contents.plist' + # add an unexpected .glif file + unexpected_glif = glyphs_dir / 'x.glif' + unexpected_glif.touch() + + changed = ut.cleanUpGLIFFiles(contents_plist, glyphs_dir) + assert changed == 1 + + out, err = capsys.readouterr() + assert f'Removing glif file x.glif' in out + + +def test_cleanUpGLIFFiles_other_layer(capsys): + ufo_path = Path(_get_test_ufo_path()) + temp_dir = Path(get_temp_dir_path()) + tmp_ufo_path = temp_dir / ufo_path.name + copytree(ufo_path, tmp_ufo_path) + glyphs_dir = tmp_ufo_path / 'glyphs' + contents_plist = glyphs_dir / 'contents.plist' + + other_glyphs_dir = tmp_ufo_path / 'otherglyphs' + other_contents_plist = other_glyphs_dir / 'contents.plist' + copytree(glyphs_dir, other_glyphs_dir) + + # add a glyph to the other directory which shouldn’t be there + unexpected_glif = other_glyphs_dir / 'x.glif' + unexpected_glif.touch() + _add_entry_to_plist(('x', 'x.glif'), other_contents_plist) + + changed = ut.cleanUpGLIFFiles(contents_plist, other_glyphs_dir) + assert changed == 1 + + out, err = capsys.readouterr() + assert 'Removing glif x' in out + + +def test_cleanUpGLIFFiles_no_plist(): + ufo_path = Path(_get_test_ufo_path()) + temp_dir = Path(get_temp_dir_path()) + tmp_ufo_path = temp_dir / ufo_path.name + copytree(ufo_path, tmp_ufo_path) + glyphs_dir = tmp_ufo_path / 'glyphs' + contents_plist = glyphs_dir / 'contents.plist' + + other_glyphs_dir = tmp_ufo_path / 'otherglyphs' + other_contents_plist = other_glyphs_dir / 'contents.plist' + copytree(glyphs_dir, other_glyphs_dir) + + # remove contents plist + other_contents_plist.unlink() + # nothing should happen + changed = ut.cleanUpGLIFFiles(contents_plist, other_glyphs_dir) + assert changed == 0 + + +def test_cleanUpGLIFFiles_empty_folder(): + ufo_path = Path(_get_test_ufo_path()) + temp_dir = Path(get_temp_dir_path()) + tmp_ufo_path = temp_dir / ufo_path.name + copytree(ufo_path, tmp_ufo_path) + glyphs_dir = tmp_ufo_path / 'glyphs' + contents_plist = glyphs_dir / 'contents.plist' + + other_glyphs_dir = tmp_ufo_path / 'otherglyphs' + other_glyphs_dir.mkdir() + + # nothing should happen + changed = ut.cleanUpGLIFFiles(contents_plist, other_glyphs_dir) + assert changed == 0 + + +def test_validateLayers_empty_folder(capsys): + ufo_path = Path(_get_test_ufo_path()) + temp_dir = Path(get_temp_dir_path()) + tmp_ufo_path = temp_dir / ufo_path.name + copytree(ufo_path, tmp_ufo_path) + processed_glyphs_dir = tmp_ufo_path / 'glyphs.com.adobe.type.processedglyphs' + processed_glyphs_dir.mkdir() + + ut.validateLayers(tmp_ufo_path) + out, err = capsys.readouterr() + print(out) + + +def test_makeUFOFMNDB_empty_UFO(capsys): + temp_dir = Path(get_temp_dir_path()) + dummy_ufo = temp_dir / 'dummy.ufo' + fontinto_plist = dummy_ufo / 'fontinfo.plist' + dummy_ufo.mkdir() + _dict2plist({}, fontinto_plist) + + fmndb_path = ut.makeUFOFMNDB(dummy_ufo) + out, err = capsys.readouterr() + + assert "UFO font is missing 'postscriptFontName'" in out + assert "UFO font is missing 'familyName'" in out + assert "UFO font is missing 'styleName'" in out + + with open(fmndb_path, 'r') as fmndb_blob: + fmndb_data = fmndb_blob.read().splitlines() + assert fmndb_data == [ + '[NoFamilyName-Regular]', + '\tf=NoFamilyName', + '\ts=Regular'] + + +def test_makeUFOFMNDB_psname(capsys): + temp_dir = Path(get_temp_dir_path()) + dummy_ufo = temp_dir / 'dummy.ufo' + fontinto_plist = dummy_ufo / 'fontinfo.plist' + dummy_ufo.mkdir() + fontinfo_dict = { + 'postscriptFontName': 'Dummy-Italic' + } + _dict2plist(fontinfo_dict, fontinto_plist) + + fmndb_path = ut.makeUFOFMNDB(dummy_ufo) + out, err = capsys.readouterr() + + assert "UFO font is missing 'familyName'" in out + assert "UFO font is missing 'styleName'" in out + + with open(fmndb_path, 'r') as fmndb_blob: + fmndb_data = fmndb_blob.read().splitlines() + assert fmndb_data == [ + '[Dummy-Italic]', + '\tf=Dummy', + '\ts=Italic'] + + +def test_makeUFOFMNDB_wholesome(): + temp_dir = Path(get_temp_dir_path()) + dummy_ufo = temp_dir / 'dummy.ufo' + fontinto_plist = dummy_ufo / 'fontinfo.plist' + dummy_ufo.mkdir() + fontinfo_dict = { + 'postscriptFontName': 'Whats-Up', + 'familyName': 'Addams Family', + 'styleName': 'Narrow Extended' + } + _dict2plist(fontinfo_dict, fontinto_plist) + + fmndb_path = ut.makeUFOFMNDB(dummy_ufo) + + with open(fmndb_path, 'r') as fmndb_blob: + fmndb_data = fmndb_blob.read().splitlines() + assert fmndb_data == [ + '[Whats-Up]', + '\tf=Addams Family', + '\ts=Narrow Extended'] From 39d23c3f8bb97e2e0eeebb0cd577c324ae7ae9a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Frank=20Grie=C3=9Fhammer?= Date: Fri, 29 Sep 2023 19:48:10 +0200 Subject: [PATCH 55/56] fix flake8 findings --- tests/ufotools_test.py | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/tests/ufotools_test.py b/tests/ufotools_test.py index e9ee14fe9..8f83a1bcd 100644 --- a/tests/ufotools_test.py +++ b/tests/ufotools_test.py @@ -1,4 +1,3 @@ -import pytest import plistlib from shutil import copytree from pathlib import Path @@ -11,13 +10,8 @@ ) from test_utils import ( get_input_path, - get_expected_path, - generate_ttx_dump, ) -# from runner import main as runner -# from differ import main as differ - TEST_UFO_FILENAME = 'ufotools_basic.ufo' @@ -80,7 +74,7 @@ def test_cleanupContentsList_no_plist(): glyph_dir.mkdir() # make some glif files but no contents.plist for glyph_name in 'xyz': - glyph_path = glyph_dir / '{glyph_name}.glif' + glyph_path = glyph_dir / f'{glyph_name}.glif' glyph_path.touch() # although there is no contents.plist, this should not fail (#1606) From 341c4fd160605e2832aa25819fd5b201d06c70b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Frank=20Grie=C3=9Fhammer?= Date: Tue, 3 Dec 2024 19:50:07 +0100 Subject: [PATCH 56/56] fix flake8 complaints --- tests/ufotools_test.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/ufotools_test.py b/tests/ufotools_test.py index 8f83a1bcd..02192004e 100644 --- a/tests/ufotools_test.py +++ b/tests/ufotools_test.py @@ -96,7 +96,7 @@ def test_cleanUpGLIFFiles_extraneous_glyph(capsys): assert changed == 1 out, err = capsys.readouterr() - assert f'Removing glif file x.glif' in out + assert 'Removing glif file x.glif' in out def test_cleanUpGLIFFiles_other_layer(capsys): @@ -163,8 +163,8 @@ def test_validateLayers_empty_folder(capsys): temp_dir = Path(get_temp_dir_path()) tmp_ufo_path = temp_dir / ufo_path.name copytree(ufo_path, tmp_ufo_path) - processed_glyphs_dir = tmp_ufo_path / 'glyphs.com.adobe.type.processedglyphs' - processed_glyphs_dir.mkdir() + processed_dir = tmp_ufo_path / 'glyphs.com.adobe.type.processedglyphs' + processed_dir.mkdir() ut.validateLayers(tmp_ufo_path) out, err = capsys.readouterr()