From 44fec8addb787d850a3d7bbe55bad10ebc1f4c1c Mon Sep 17 00:00:00 2001 From: Chimi6 <43803253+Chimi6@users.noreply.github.com> Date: Fri, 30 Oct 2026 14:35:13 -0600 Subject: [PATCH 1/2] fix: Japanese text in PDFs reads in full Composite fonts are read through their encoding CMap: Identity and embedded CMaps give CIDs, read through Adobe-Japan1 when the font is in that collection (the Mac's Hiragino without ToUnicode); the Unicode CMaps give Unicode; the Shift_JIS, EUC-JP, and JIS CMaps are decoded. Radicals read as ideographs, /ActualText replaces its glyphs' text, vertical writing reads by column, and Japanese lines join without spaces in documents. --- DOCS/CHANGELOG.md | 7 + DOCS/STATE.md | 2 + DOCS/formats/pdf.md | 14 +- NOTICE | 11 + scripts/gen-cjk-tables.py | 178 + src/io/cjk/mod.rs | 226 + src/io/cjk/tables.rs | 4548 ++++++++++++++++++++ src/io/mod.rs | 1 + src/io/pdf/content.rs | 100 +- src/io/pdf/font.rs | 409 +- src/io/pdf/markdown.rs | 8 +- src/io/pdf/text.rs | 99 +- tests/fixtures/pdf-japanese/actualtext.pdf | Bin 0 -> 5393 bytes tests/fixtures/pdf-japanese/actualtext.txt | 2 + tests/fixtures/pdf-japanese/columns.pdf | Bin 0 -> 1996 bytes tests/fixtures/pdf-japanese/columns.txt | 2 + tests/fixtures/pdf-japanese/euc.pdf | Bin 0 -> 2532 bytes tests/fixtures/pdf-japanese/euc.txt | 3 + tests/fixtures/pdf-japanese/identity.pdf | Bin 0 -> 1447 bytes tests/fixtures/pdf-japanese/identity.txt | 3 + tests/fixtures/pdf-japanese/make.py | 171 + tests/fixtures/pdf-japanese/radicals.pdf | Bin 0 -> 1410 bytes tests/fixtures/pdf-japanese/radicals.txt | 1 + tests/fixtures/pdf-japanese/sjis.pdf | Bin 0 -> 2538 bytes tests/fixtures/pdf-japanese/sjis.txt | 3 + tests/fixtures/pdf-japanese/unijis.pdf | Bin 0 -> 3145 bytes tests/fixtures/pdf-japanese/unijis.txt | 3 + tests/fixtures/pdf-japanese/vertical.pdf | Bin 0 -> 2986 bytes tests/fixtures/pdf-japanese/vertical.txt | 2 + tests/pdf_japanese.rs | 44 + 30 files changed, 5807 insertions(+), 30 deletions(-) create mode 100644 scripts/gen-cjk-tables.py create mode 100644 src/io/cjk/mod.rs create mode 100644 src/io/cjk/tables.rs create mode 100644 tests/fixtures/pdf-japanese/actualtext.pdf create mode 100644 tests/fixtures/pdf-japanese/actualtext.txt create mode 100644 tests/fixtures/pdf-japanese/columns.pdf create mode 100644 tests/fixtures/pdf-japanese/columns.txt create mode 100644 tests/fixtures/pdf-japanese/euc.pdf create mode 100644 tests/fixtures/pdf-japanese/euc.txt create mode 100644 tests/fixtures/pdf-japanese/identity.pdf create mode 100644 tests/fixtures/pdf-japanese/identity.txt create mode 100644 tests/fixtures/pdf-japanese/make.py create mode 100644 tests/fixtures/pdf-japanese/radicals.pdf create mode 100644 tests/fixtures/pdf-japanese/radicals.txt create mode 100644 tests/fixtures/pdf-japanese/sjis.pdf create mode 100644 tests/fixtures/pdf-japanese/sjis.txt create mode 100644 tests/fixtures/pdf-japanese/unijis.pdf create mode 100644 tests/fixtures/pdf-japanese/unijis.txt create mode 100644 tests/fixtures/pdf-japanese/vertical.pdf create mode 100644 tests/fixtures/pdf-japanese/vertical.txt create mode 100644 tests/pdf_japanese.rs diff --git a/DOCS/CHANGELOG.md b/DOCS/CHANGELOG.md index 50866d75..f1c54dcb 100644 --- a/DOCS/CHANGELOG.md +++ b/DOCS/CHANGELOG.md @@ -6,6 +6,13 @@ section under a version heading. ## [Unreleased] +### Fixed + +- Japanese text in PDFs reads in full. A PDF made on a Mac (Hiragino and the other Japanese fonts the Mac embeds without a ToUnicode map) read as almost nothing, and one using the standard Japanese CMaps (`UniJIS-UCS2-H`, Shift_JIS `90ms-RKSJ-H`, `EUC-H`) read as nothing; both now read as poppler and PyMuPDF read them. A composite font is read through its own encoding: its CIDs through Adobe-Japan1 when the font is in that collection, the Unicode CMaps (for Chinese and Korean too) as Unicode, and the Shift_JIS, EUC-JP, and JIS CMaps decoded as browsers decode them. Kangxi radicals that a ToUnicode map gives for ideographs (Chrome's PDFs) read as the ideographs. +- Vertical Japanese reads by column, right to left: text in a vertical (`-V`) font, and characters the Mac sets one under another down a column, which read one character per line before (as they do in PyMuPDF). +- Marked content with `/ActualText` reads as that text, as viewers copy it: LibreOffice's PDFs of Japanese without a Japanese font read as one repeated character before. +- Japanese lines that wrap within a paragraph join without a space when a PDF becomes Markdown, Word, HTML, or another document. + ## [1.0.0] - 2026-10-21 ### Changed diff --git a/DOCS/STATE.md b/DOCS/STATE.md index 36cbc6e9..5fef70c7 100644 --- a/DOCS/STATE.md +++ b/DOCS/STATE.md @@ -6,6 +6,7 @@ describes. ## Now +- 2026-10-30: Japanese PDF text (branch `japanese`, 1.0.1). A user's project found Mac-made PDFs reading 1 Japanese character in 360 and PDFs in the standard Japanese CMaps reading as nothing. Composite fonts now read through their encoding CMap (`src/io/pdf/font.rs`): Identity and embedded CMaps give CIDs, read through Adobe-Japan1 (`src/io/cjk`, Adobe's table) when the font is Japan1; the Unicode CMaps give Unicode; Shift_JIS, EUC-JP, and JIS CMaps are decoded (WHATWG's JIS X 0208 index). Also: radicals normalised to ideographs (Chrome), `/ActualText` (LibreOffice without a Japanese font), vertical writing read by column (a `-V` font, and the Mac's glyph-by-glyph columns), and Japanese lines joined without spaces in documents. On twelve test PDFs from seven producers every character reads as PyMuPDF reads it; on 70 to 100-page documents a whole run is 0.01 to 0.05 s at 8 to 13 MB, against PyMuPDF's extraction alone at 0.06 to 0.14 s and 186 MB. Tables add about 75 KB to the binary. - 2026-10-21: v1 wrap-up and 1.0.0 (branch `v1-wrapup`). The converter registry is data: each converter has a `const fn entry()` and the registry is a static table of entries, so planning runs no converter's code, and the 195 image pairs are built only when an image format is an end (`registry::converters_for`). Starting memory 2.24 -> 1.95 MB, a ROM conversion 2.66 -> 2.42 MB, startup 0.15 ms faster; sizes move by a few KB. Every benchmark pair was rerun and recorded (first run on the M1 Max for many pairs, under load); the failing lines are under Tech Debt. The bench harness was fixed for this Mac (`gtime` in `csv-json`, awk helpers in `ico-png`, a bash 5 guard in `jpeg-pdf`). ROADMAP item 9 done; the next cycle is audio and video. - 2026-10-20: N64 ROMs between `z64`, `v64`, and `n64` (`src/io/n64.rs`, branch `n64`): six lossless converters permute each 32-bit word in a 256 KB buffer, vectorized as an array shuffle, reading the input's order from where the header's `0x80` lies whatever the name. Detection on the command line now lets content overrule an extension whose signature it fails when another format's matches (`format::detect`, for every format), with a warning; errors without a position drop `line 0, column 0`. Checked on Paper Mario (USA), a 40 MB No-Intro dump in `~/Downloads` (not committed): round trips return its SHA-1, outputs byte-identical to ucon64, `n64romconvert`, and `dd conv=swab`. Pair `z64-v64`: every speed line passes (1.2 to 1.35 times `dd`); the four memory lines against ucon64 and `dd` fail by 0.1 to 0.6 MB, the binary's startup floor (Tech Debt). The bench harness takes `bench_runs` for millisecond pairs. The wrap-up is next. - 2026-10-17: OpenDocument spreadsheet both ways (`src/io/ods`, branch `ods`): every sheet reads into rows with cells shown as LibreOffice shows them to an English reader, and rows write as sheets typed by the read-back rule; number formats pass through one model between ODS data styles and Excel codes (`numfmt.rs`), so ODS reaches Excel and Numbers with its formats and back. LibreOffice's built-in dates per document language come from its locale data (`builtin.rs`, MPL-2.0, `scripts/gen-ods-dates.py`). `content.xml` streams in four-megabyte pieces through a new `ZipArchive::stream`, read once, each wanted sheet held as its cells' text. Against LibreOffice's CSV export (`scripts/ods-check`): 303 of 463 development sheets byte-identical, 99.65% of non-formula cells; held out (35 government files, 12.2 million cells), 190 of 240 sheets, 99.999%, with five faults the held-out set found fixed before those numbers; every development CSV written as ODS reads back the same in LibreOffice. Pair `ods-csv` passes every line (calamine 0.36, LibreOffice). Budgets: binary 5.62 MB (Linux 5.59), wasm 3.14 MB (3.11). N64 ROMs are next. @@ -77,6 +78,7 @@ describes. ## Tech Debt +- 2026-10-30: Japanese beyond PDF reading. Plain text and HTML in Shift_JIS, EUC-JP, or ISO-2022-JP are refused as invalid UTF-8 (`src/converters/input.rs` reads UTF-8 only; the decoders are in `src/io/cjk`); RTF from Word with `\fcharset128` and `\'xx` byte pairs is untested (the code pages in `src/io/rtf/codepage.rs` are single-byte); the PDF writer embeds TrueType only, so the CFF fonts most CJK systems ship (Noto Sans CJK) are skipped, and Japanese wraps by character without the line-breaking rules (kinsoku). Every other document pair carries Japanese whole (pandoc, textutil, and LibreOffice sources to every document format, 100%). Chinese and Korean CID collections (GB1, CNS1, Korea1) have no CID table yet, so their fonts without ToUnicode read only through Unicode CMaps. - 2026-09-24 (updated 2026-10-21, moved from Blockers): The Pages document paths' throughput against the shared Pages goal of 50 MB/s of input (`DOCS/benchmarks/pages-markdown.md`, `pages-html.md`, `pages-text.md`). The 1.0.0 run, on an M1 Max under load: memory passes on every document row (26 to 47 MB against 64), Word passes both ways (Pages -> Word 129 and 140 MB/s of input plus uncompressed output, Word -> Pages 67 and 89), and the text paths fail throughput at 26 to 33 MB/s (styled 29 to 33, prose 26 to 28). A real resume converts in 3 ms at 4.8 MB, inside both goals. Where the time goes on the dense shape, in-process (2026-09-24): package decode 10 ms (7.5 of it Snappy), document build 25 ms, the text writers 11 ms; wall clock adds about 10 ms of process start, file I/O, and first-touch page faults. Levers under Spikes. Pages -> Word's peak memory rose on every row since 2026-10-06 (prose 33.8 -> 46.8 MB), still inside the goal. - 2026-09-24 (updated 2026-10-21, moved from Blockers): `pages -> pages-json` misses the 50 MB/s goal at 24 and 26 MB/s of package bytes (`DOCS/benchmarks/pages-json.md`); the reverse direction passes at 146 and 239. Levers: the typed decode of the attribute tables written as JSON directly (the Spikes entry below), then `Tree::decode` itself and the JSON writer's per-field work. - 2026-10-21: Benchmark lines failing in the 1.0.0 run that passed in their previous blocks. The run was on the M1 Max with the machine in use (load average 7 to 26 on 10 cores); for several pairs every earlier block was on the Linux i7, so these are not like for like. An alternated A/B of ec68950 against the commit before it showed the registry change caused none of those it covered. Rerun on an idle machine before acting on any of them. diff --git a/DOCS/formats/pdf.md b/DOCS/formats/pdf.md index c3fc4eab..30989ed3 100644 --- a/DOCS/formats/pdf.md +++ b/DOCS/formats/pdf.md @@ -122,8 +122,8 @@ first. | Part | Handling | |---|---| | Content | `src/io/pdf/content.rs` runs the page's content: `q`/`Q`/`cm`, `BT`/`ET`, `Tc Tw Tz TL Tf Ts`, `Td TD Tm T*`, `Tj TJ ' "` (TJ offsets move the text position), form XObjects with their matrix and resources (8 deep), inline images skipped. Each shown code becomes a glyph placed in page space with its size there | -| Fonts | `src/io/pdf/font.rs`: code lengths from the ToUnicode code-space ranges (two bytes for Type0 without one); Unicode from ToUnicode (bfchar, bfrange with strings or arrays), else a simple font's encoding: Standard, WinAnsi, MacRoman, or the Symbol and Zapf Dingbats built-ins, with `/Differences` names through the glyph list, `uniXXXX`, `uXXXX`, a `.suffix` dropped, and ligatures (fi, fl, ff, ffi, ffl) spelled out. Widths from `/Widths` with `/FirstChar` and `/MissingWidth`, CID `/W` and `/DW`, Type3 `/FontMatrix`, and the Core 14 AFM widths for base fonts without `/Widths` (`src/io/pdf/tables.rs`, generated by `scripts/gen-pdf-tables.py`) | -| Layout | `src/io/pdf/text.rs`: glyphs on one baseline (within half their size) are a line; a gap over 0.15 of the size is a word break unless a space is already there; runs of spaces collapse. A line of another size or weight starts a block, and so does one further below the last than 1.6 sizes and than the page's most common line spacing (so a font whose glyph units are not the usual em, which Ghostscript's rewrites of CID fonts make, still groups right). Reading order is drawing order | +| Fonts | `src/io/pdf/font.rs`: a composite (Type0) font's code lengths from its encoding CMap: `Identity-H`/`-V` (two bytes, the CID), the Unicode CMaps (`Uni*-UCS2`, `-UTF16`, `-UTF8`, `-UTF32`, for every CJK collection), Shift_JIS (`*RKSJ*`), EUC-JP (`EUC-H`/`-V`), JIS (`H`/`V`), and an embedded CMap's code-space ranges and CID mappings (with `usecmap`); a simple font's from the ToUnicode code-space ranges. Unicode from ToUnicode (bfchar, bfrange with strings or arrays); else, for a composite font, the code itself for a Unicode CMap, the Shift_JIS, EUC-JP, or JIS bytes decoded (`src/io/cjk`, WHATWG's JIS X 0208 index), or the CID through Adobe-Japan1 (Adobe's CID to Unicode table) when the CID font's `/CIDSystemInfo` is Japan1, as the Mac writes Hiragino without a ToUnicode map; else a simple font's encoding: Standard, WinAnsi, MacRoman, or the Symbol and Zapf Dingbats built-ins, with `/Differences` names through the glyph list, `uniXXXX`, `uXXXX`, a `.suffix` dropped, and ligatures (fi, fl, ff, ffi, ffl) spelled out. Widths from `/Widths` with `/FirstChar` and `/MissingWidth`, CID `/W` and `/DW`, Type3 `/FontMatrix`, and the Core 14 AFM widths for base fonts without `/Widths` (`src/io/pdf/tables.rs`, generated by `scripts/gen-pdf-tables.py`); a CID font's `/W` by CID, a code whose CID the encoding does not say (Shift_JIS, Unicode CMaps) half or full width by its character. CJK radicals and strokes a ToUnicode map gives read as the ideographs they stand for (Unicode's equivalents). Marked content with `/ActualText` reads as that text in place of its glyphs | +| Layout | `src/io/pdf/text.rs`: glyphs on one baseline (within half their size) are a line; a gap over 0.15 of the size is a word break unless a space is already there; runs of spaces collapse. A line of another size or weight starts a block, and so does one further below the last than 1.6 sizes and than the page's most common line spacing (so a font whose glyph units are not the usual em, which Ghostscript's rewrites of CID fonts make, still groups right). Reading order is drawing order. Vertical writing is read by column: a vertical font's glyphs advance down the page, and Japanese characters set one under another in one column (as the Mac places them) continue a line; columns side by side make a block, in drawing order (right to left) | Oracle: `tests/pdf_text.rs` against pdftotext on every fixture in `tests/fixtures/pdf-text` (PyMuPDF's base-14 and embedded TrueType @@ -158,9 +158,13 @@ Markdown. - WebP, QOI, TGA, Netpbm, and ICO record no resolution a page could use (WebP's lives in EXIF, which is not read), so their pages are a point per pixel. - Text is read in drawing order: a page that draws its columns or boxes out of reading order reads out of order (pdftotext reorders by - blocks). Rotated and vertical text is read glyph by glyph in drawing - order and reported. A Type0 font with neither ToUnicode nor a known - character collection has only glyph ids and reads as nothing. + blocks). Rotated text is read glyph by glyph in drawing order and + reported. A Type0 font with neither ToUnicode nor a collection with a + table here (Adobe-Japan1 only: not GB1, CNS1, or Korea1) has only glyph + ids and reads as nothing, unless its CMap is a Unicode one. A ToUnicode + map is taken as written: the Mac's Osaka maps its full-width digits to + ASCII ones, which read as ASCII (poppler reads them full width from the + font program). - Structure is guessed from type: bold or italic inside a line, tables, links, and footnotes are not read; a paragraph that runs across a page break is two paragraphs; running headers other than page numbers diff --git a/NOTICE b/NOTICE index a85a34d4..ffb2f277 100644 --- a/NOTICE +++ b/NOTICE @@ -7,6 +7,17 @@ option) any later version. See LICENSE and LICENSING.md. Releases 0.1.0 through 0.3.0 were published under the Apache License, Version 2.0, and remain available under it. +src/io/cjk/tables.rs holds data generated by scripts/gen-cjk-tables.py from: +- Adobe's PDF mapping resources (Adobe-Japan1-UCS2), Copyright 1990-2023 + Adobe, under the BSD 3-Clause License: redistribution in source and + binary forms is permitted provided the copyright notice, the conditions, + and the disclaimer are retained (they are, in the source's header); + Adobe's name may not be used to endorse products derived from it. +- The WHATWG Encoding Standard's index-jis0208, Copyright WHATWG (Apple, + Google, Mozilla, Microsoft), under the BSD 3-Clause License. +- Unicode's EquivalentUnifiedIdeograph.txt, Copyright Unicode, Inc., under + the Unicode License v3. + src/io/ods/builtin.rs holds date format codes taken from LibreOffice's locale data (Copyright The Document Foundation and contributors), under the Mozilla Public License 2.0; that file is also available under it. diff --git a/scripts/gen-cjk-tables.py b/scripts/gen-cjk-tables.py new file mode 100644 index 00000000..111bacb2 --- /dev/null +++ b/scripts/gen-cjk-tables.py @@ -0,0 +1,178 @@ +#!/usr/bin/env python3 +"""Writes src/io/cjk/tables.rs: the Japanese text tables. + +- Adobe-Japan1 CID -> Unicode, from Adobe's PDF mapping resources + (pdf2unicode/Adobe-Japan1-UCS2, BSD 3-Clause): how a PDF font's glyph + ids in the Japan1 collection read as text when the PDF has no ToUnicode. +- JIS X 0208 with the NEC and IBM extensions, by WHATWG pointer, from the + Encoding Standard's index-jis0208 (BSD 3-Clause in source code): what + Shift_JIS, EUC-JP, and ISO-2022-JP bytes mean, as browsers decode them. +- CJK radicals and strokes -> their equivalent unified ideographs, from + Unicode's EquivalentUnifiedIdeograph.txt: fonts often give a radical's + code point to the ideograph's glyph, and text should read the ideograph. + +The sources are downloaded at pinned versions. Run from the repository +root: python3 scripts/gen-cjk-tables.py +""" + +import subprocess +import urllib.request + +ADOBE = ( + "https://raw.githubusercontent.com/adobe-type-tools/mapping-resources-pdf/" + "2dd5e53fb74a01718b9dfd448a0d1cce6fff2aa5/pdf2unicode/Adobe-Japan1-UCS2" +) +WHATWG = "https://encoding.spec.whatwg.org/index-jis0208.txt" +WHATWG_IDENTIFIER = "cbaa91f3deb7d0841faf5c33041fc15a285da0e87e64ab802c4bf04b7c4da861" +UNICODE = "https://www.unicode.org/Public/16.0.0/ucd/EquivalentUnifiedIdeograph.txt" + + +def fetch(url): + with urllib.request.urlopen(url) as response: + return response.read().decode("utf-8") + + +def hex_units(token): + """`<00a5>` or `` as text (UTF-16 code units).""" + digits = token.strip("<>") + units = [int(digits[i:i + 4], 16) for i in range(0, len(digits), 4)] + return bytes(b for unit in units for b in unit.to_bytes(2, "big")).decode("utf-16-be") + + +def japan1(): + text = fetch(ADOBE) + mapping = {} + mode = None + for line in text.splitlines(): + line = line.strip() + if line.endswith("beginbfchar"): + mode = "char" + continue + if line.endswith("beginbfrange"): + mode = "range" + continue + if line.startswith("end"): + mode = None + continue + if mode == "char": + cid, value = line.split() + mapping[int(cid.strip("<>"), 16)] = hex_units(value) + elif mode == "range": + low, high, value = line.split() + low, high = int(low.strip("<>"), 16), int(high.strip("<>"), 16) + first = hex_units(value) + for offset in range(high - low + 1): + mapping[low + offset] = first[:-1] + chr(ord(first[-1]) + offset) + return mapping + + +def jis0208(): + text = fetch(WHATWG) + assert WHATWG_IDENTIFIER in text, "the WHATWG index changed: check it and update the identifier" + table = {} + for line in text.splitlines(): + if not line or line.startswith("#"): + continue + pointer, code = line.split("\t")[:2] + table[int(pointer)] = int(code, 16) + return table + + +def radicals(): + text = fetch(UNICODE) + pairs = [] + for line in text.splitlines(): + line = line.split("#")[0].strip() + if not line: + continue + source, target = (part.strip() for part in line.split(";")) + target = int(target, 16) + if ".." in source: + low, high = (int(part, 16) for part in source.split("..")) + pairs.extend((code, target) for code in range(low, high + 1)) + else: + pairs.append((int(source, 16), target)) + return sorted(pairs) + + +def rows(values, per_line=16): + return "\n".join(" " + " ".join(f"{value}," for value in values[at:at + per_line]) for at in range(0, len(values), per_line)) + + +def rust_string(text): + return "".join(f"\\u{{{ord(ch):x}}}" for ch in text) + + +def main(): + japan = japan1() + count = max(japan) + 1 + bmp = [0] * count + other = [] + for cid, text in sorted(japan.items()): + # Variation selectors pick a glyph's form; as text they are noise. + text = "".join(ch for ch in text if not (0xFE00 <= ord(ch) <= 0xFE0F or 0xE0100 <= ord(ch) <= 0xE01EF)) + if not text: + continue + if len(text) == 1 and ord(text) < 0x10000 and ord(text) != 0xFFFD: + bmp[cid] = ord(text) + elif text != "�": + other.append((cid, text)) + other_text = "" + other_ends = [] + for cid, text in other: + other_text += text + other_ends.append((cid, len(other_text.encode("utf-8")))) + assert len(other_text.encode("utf-8")) < 65536 + jis = jis0208() + pointers = max(jis) + 1 + jis_table = [jis.get(pointer, 0) for pointer in range(pointers)] + assert all(code < 0x10000 for code in jis_table) + radical_pairs = radicals() + out = [ + "//! Japanese text tables. Generated by `scripts/gen-cjk-tables.py`; do not edit.", + "//!", + "//! Adobe-Japan1 CID to Unicode: from Adobe's mapping resources for PDF", + "//! (Adobe-Japan1-UCS2), Copyright 1990-2023 Adobe, under the BSD", + "//! 3-Clause License (NOTICE). JIS X 0208 with the NEC and IBM", + "//! extensions: the WHATWG Encoding Standard's index-jis0208, Copyright", + "//! WHATWG (Apple, Google, Mozilla, Microsoft), under the BSD 3-Clause", + "//! License. Radical equivalents: Unicode's EquivalentUnifiedIdeograph.txt", + "//! (Unicode 16.0), under the Unicode License v3.", + "", + "/// Adobe-Japan1 CID -> its character in the Basic Multilingual Plane;", + "/// 0 for none, or for a CID in `JAPAN1_OTHER`.", + f"pub static JAPAN1: [u16; {count}] = [", + rows(bmp), + "];", + "", + "/// Adobe-Japan1 CIDs whose text is outside the BMP or several", + "/// characters: (CID, end of its text in `JAPAN1_OTHER_TEXT`), by CID,", + "/// each text starting where the one before ends.", + f"pub static JAPAN1_OTHER: [(u16, u16); {len(other)}] = [", + rows([f"({cid}, {end})" for cid, end in other_ends], 8), + "];", + "", + "/// The texts `JAPAN1_OTHER` points into, run together.", + f'pub static JAPAN1_OTHER_TEXT: &str = "{rust_string(other_text)}";', + "", + "/// JIS X 0208 (with the NEC row 13 and the IBM extensions) by WHATWG", + "/// pointer -> code point; 0 for none.", + f"pub static JIS0208: [u16; {pointers}] = [", + rows(jis_table), + "];", + "", + "/// CJK radicals and strokes -> the unified ideograph each stands for,", + "/// sorted by the first.", + f"pub static RADICALS: [(u32, u32); {len(radical_pairs)}] = [", + "\n".join(f" (0x{source:04x}, 0x{target:04x})," for source, target in radical_pairs), + "];", + "", + ] + with open("src/io/cjk/tables.rs", "w", encoding="utf-8") as handle: + handle.write("\n".join(out)) + # Formatted as `cargo fmt` would, so the check in CI passes. + subprocess.run(["rustfmt", "--edition", "2024", "src/io/cjk/tables.rs"], check=True) + print(f"Japan1 {count} CIDs ({len(other)} other), JIS0208 {pointers} pointers, {len(radical_pairs)} radicals") + + +main() diff --git a/src/io/cjk/mod.rs b/src/io/cjk/mod.rs new file mode 100644 index 00000000..a5ed23fa --- /dev/null +++ b/src/io/cjk/mod.rs @@ -0,0 +1,226 @@ +//! Japanese text: Adobe-Japan1 glyph ids as text, the Shift_JIS, EUC-JP, +//! and JIS byte encodings decoded as the WHATWG Encoding Standard does +//! (what browsers do), and CJK radicals read as the ideographs they stand +//! for. The tables are generated (`scripts/gen-cjk-tables.py`). + +mod tables; + +/// Appends the text of an Adobe-Japan1 CID; false when it has none. +pub fn japan1(cid: u32, out: &mut String) -> bool { + let Ok(index) = usize::try_from(cid) else { + return false; + }; + match tables::JAPAN1.get(index) { + Some(&code) if code != 0 => { + if let Some(ch) = char::from_u32(u32::from(code)) { + out.push(ch); + return true; + } + false + } + Some(_) => { + let Ok(position) = + tables::JAPAN1_OTHER.binary_search_by_key(&(index as u16), |entry| entry.0) + else { + return false; + }; + let start = if position == 0 { + 0 + } else { + usize::from(tables::JAPAN1_OTHER[position - 1].1) + }; + let end = usize::from(tables::JAPAN1_OTHER[position].1); + out.push_str(&tables::JAPAN1_OTHER_TEXT[start..end]); + true + } + None => false, + } +} + +/// The character at a JIS X 0208 pointer (row times 94 plus cell, from +/// zero), the NEC and IBM extensions included. +pub fn jis0208(pointer: usize) -> Option { + let code = *tables::JIS0208.get(pointer)?; + if code == 0 { + return None; + } + char::from_u32(u32::from(code)) +} + +/// One character of Shift_JIS (Windows-31J) from the front of `bytes`: +/// the character, or `None` for bytes that mean nothing, and how many +/// bytes it took. +pub fn shift_jis_char(bytes: &[u8]) -> (Option, usize) { + let Some(&lead) = bytes.first() else { + return (None, 0); + }; + match lead { + 0x00..=0x80 => (Some(char::from(lead)), 1), + // Half-width katakana. + 0xA1..=0xDF => (char::from_u32(0xFF61 + u32::from(lead - 0xA1)), 1), + 0x81..=0x9F | 0xE0..=0xFC => { + let Some(&trail) = bytes.get(1) else { + return (None, 1); + }; + if !matches!(trail, 0x40..=0x7E | 0x80..=0xFC) { + // An ASCII byte after a bad lead is itself. + return (None, if trail < 0x80 { 1 } else { 2 }); + } + let lead_offset = if lead < 0xA0 { 0x81 } else { 0xC1 }; + let trail_offset = if trail < 0x7F { 0x40 } else { 0x41 }; + let pointer = usize::from(lead - lead_offset) * 188 + usize::from(trail - trail_offset); + // The user-defined area maps to the Private Use Area. + if (8836..=10715).contains(&pointer) { + return (char::from_u32(0xE000 + pointer as u32 - 8836), 2); + } + (jis0208(pointer), 2) + } + _ => (None, 1), + } +} + +/// How many bytes the Shift_JIS character starting with `lead` takes. +pub fn shift_jis_length(lead: u8) -> usize { + if matches!(lead, 0x81..=0x9F | 0xE0..=0xFC) { + 2 + } else { + 1 + } +} + +/// One character of EUC-JP from the front of `bytes`, and its length. +/// JIS X 0212 (three bytes from 0x8F) is not in the tables: `None`. +pub fn euc_jp_char(bytes: &[u8]) -> (Option, usize) { + let Some(&lead) = bytes.first() else { + return (None, 0); + }; + match lead { + 0x00..=0x7F => (Some(char::from(lead)), 1), + 0x8E => match bytes.get(1) { + Some(&kana @ 0xA1..=0xDF) => (char::from_u32(0xFF61 + u32::from(kana - 0xA1)), 2), + _ => (None, 1), + }, + 0x8F => (None, 3.min(bytes.len())), + 0xA1..=0xFE => match bytes.get(1) { + Some(&trail @ 0xA1..=0xFE) => ( + jis0208(usize::from(lead - 0xA1) * 94 + usize::from(trail - 0xA1)), + 2, + ), + _ => (None, 1), + }, + _ => (None, 1), + } +} + +/// How many bytes the EUC-JP character starting with `lead` takes. +pub fn euc_jp_length(lead: u8) -> usize { + match lead { + 0x8E | 0xA1..=0xFE => 2, + 0x8F => 3, + _ => 1, + } +} + +/// A two-byte JIS X 0208 code as ISO-2022-JP writes it (0x2121 to 0x7E7E). +pub fn jis_code(code: u32) -> Option { + let (row, cell) = ((code >> 8) & 0xFF, code & 0xFF); + if !(0x21..=0x7E).contains(&row) || !(0x21..=0x7E).contains(&cell) { + return None; + } + jis0208(((row - 0x21) * 94 + (cell - 0x21)) as usize) +} + +/// Shift_JIS bytes as text, a bad sequence as U+FFFD. +pub fn decode_shift_jis(bytes: &[u8]) -> String { + decode_with(bytes, shift_jis_char) +} + +/// EUC-JP bytes as text, a bad sequence as U+FFFD. +pub fn decode_euc_jp(bytes: &[u8]) -> String { + decode_with(bytes, euc_jp_char) +} + +fn decode_with(bytes: &[u8], next: fn(&[u8]) -> (Option, usize)) -> String { + let mut out = String::with_capacity(bytes.len() * 3 / 2); + let mut at = 0; + while at < bytes.len() { + let (ch, length) = next(&bytes[at..]); + out.push(ch.unwrap_or('\u{FFFD}')); + at += length.max(1); + } + out +} + +/// The unified ideograph a CJK radical or stroke stands for, or the +/// character itself. +pub fn unify_radical(ch: char) -> char { + let code = u32::from(ch); + if !(0x2E80..=0x2FDF).contains(&code) && !(0x31C0..=0x31EF).contains(&code) { + return ch; + } + match tables::RADICALS.binary_search_by_key(&code, |pair| pair.0) { + Ok(index) => char::from_u32(tables::RADICALS[index].1).unwrap_or(ch), + Err(_) => ch, + } +} + +#[cfg(test)] +mod tests { + use super::*; + + /// Test-only: Shift_JIS by searching the table (slow, exact). + fn encode_shift_jis(text: &str) -> Vec { + let mut out = Vec::new(); + for ch in text.chars() { + if (ch as u32) < 0x80 { + out.push(ch as u8); + continue; + } + if ('\u{FF61}'..='\u{FF9F}').contains(&ch) { + out.push((ch as u32 - 0xFF61 + 0xA1) as u8); + continue; + } + let pointer = tables::JIS0208 + .iter() + .position(|code| u32::from(*code) == ch as u32) + .expect("in JIS X 0208"); + let lead = pointer / 188; + let trail = pointer % 188; + out.push((lead + if lead < 0x1F { 0x81 } else { 0xC1 }) as u8); + out.push((trail + if trail < 0x3F { 0x40 } else { 0x41 }) as u8); + } + out + } + + #[test] + fn decodes_shift_jis_like_a_browser() { + let bytes = encode_shift_jis("日本語カナ、English"); + assert_eq!(decode_shift_jis(&bytes), "日本語カナ、English"); + } + + #[test] + fn decodes_euc_jp_and_jis_codes() { + // 日 is row 38 cell 92: EUC-JP C6 FC, JIS 0x467C. + assert_eq!(decode_euc_jp(&[0xC6, 0xFC, 0x41, 0x8E, 0xB6]), "日Aカ"); + assert_eq!(jis_code(0x467C), Some('日')); + assert_eq!(jis_code(0x2020), None); + } + + #[test] + fn reads_japan1_cids() { + let mut text = String::new(); + // CID 1 is the space; 7641 is beyond the BMP. + assert!(japan1(1, &mut text)); + assert_eq!(text, " "); + text.clear(); + assert!(japan1(7641, &mut text)); + assert_eq!(text, "\u{28cdd}"); + assert!(!japan1(999_999, &mut text)); + } + + #[test] + fn radicals_read_as_ideographs() { + assert_eq!(unify_radical('\u{2F47}'), '日'); + assert_eq!(unify_radical('日'), '日'); + } +} diff --git a/src/io/cjk/tables.rs b/src/io/cjk/tables.rs new file mode 100644 index 00000000..09d1a63f --- /dev/null +++ b/src/io/cjk/tables.rs @@ -0,0 +1,4548 @@ +//! Japanese text tables. Generated by `scripts/gen-cjk-tables.py`; do not edit. +//! +//! Adobe-Japan1 CID to Unicode: from Adobe's mapping resources for PDF +//! (Adobe-Japan1-UCS2), Copyright 1990-2023 Adobe, under the BSD +//! 3-Clause License (NOTICE). JIS X 0208 with the NEC and IBM +//! extensions: the WHATWG Encoding Standard's index-jis0208, Copyright +//! WHATWG (Apple, Google, Mozilla, Microsoft), under the BSD 3-Clause +//! License. Radical equivalents: Unicode's EquivalentUnifiedIdeograph.txt +//! (Unicode 16.0), under the Unicode License v3. + +/// Adobe-Japan1 CID -> its character in the Basic Multilingual Plane; +/// 0 for none, or for a CID in `JAPAN1_OTHER`. +pub static JAPAN1: [u16; 23060] = [ + 0, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, + 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 165, 93, 94, 95, 96, 97, 98, 99, 100, 101, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, + 121, 122, 123, 166, 125, 771, 8217, 92, 8216, 124, 126, 161, 162, 163, 8260, 402, 167, 164, + 8220, 171, 8249, 8250, 64257, 64258, 8211, 8224, 8225, 183, 182, 8226, 8218, 8222, 8221, 187, + 8230, 8240, 191, 769, 770, 175, 774, 775, 776, 778, 184, 779, 808, 780, 8212, 198, 170, 321, + 216, 338, 186, 230, 305, 322, 248, 339, 223, 8722, 169, 172, 174, 176, 177, 178, 179, 181, 185, + 188, 189, 190, 192, 193, 194, 195, 196, 197, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 217, 218, 219, 220, 221, 222, 224, 225, 226, 227, 228, 229, + 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 249, 250, + 251, 252, 253, 254, 255, 352, 376, 381, 773, 353, 8482, 382, 48, 8194, 33, 34, 35, 36, 37, 38, + 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, 90, 91, 165, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, + 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 65512, 125, + 8254, 65376, 65377, 65378, 65379, 65380, 65381, 65382, 65383, 65384, 65385, 65386, 65387, + 65388, 65389, 65390, 65391, 65392, 65393, 65394, 65395, 65396, 65397, 65398, 65399, 65400, + 65401, 65402, 65403, 65404, 65405, 65406, 65407, 65408, 65409, 65410, 65411, 65412, 65413, + 65414, 65415, 65416, 65417, 65418, 65419, 65420, 65421, 65422, 65423, 65424, 65425, 65426, + 65427, 65428, 65429, 65430, 65431, 65432, 65433, 65434, 65435, 65436, 65437, 65438, 65439, + 65344, 12528, 12529, 12526, 12533, 12534, 12532, 12460, 12462, 12464, 12466, 12468, 12470, + 12472, 12474, 12476, 12478, 12480, 12482, 12485, 12487, 12489, 12496, 12497, 12499, 12500, + 12502, 12503, 12505, 12506, 12508, 12509, 65376, 12317, 12318, 9472, 9473, 9474, 9475, 9476, + 9477, 9478, 9479, 9480, 9481, 9482, 9483, 9484, 9485, 9486, 9487, 9488, 9489, 9490, 9491, 9492, + 9493, 9494, 9495, 9496, 9497, 9498, 9499, 9500, 9501, 9502, 9503, 9504, 9505, 9506, 9507, 9508, + 9509, 9510, 9511, 9512, 9513, 9514, 9515, 9516, 9517, 9518, 9519, 9520, 9521, 9522, 9523, 9524, + 9525, 9526, 9527, 9528, 9529, 9530, 9531, 9532, 9533, 9534, 9535, 9536, 9537, 9538, 9539, 9540, + 9541, 9542, 9543, 9544, 9545, 9546, 9547, 8242, 168, 8246, 91, 93, 12296, 12297, 12298, 12299, + 12302, 12303, 12304, 12305, 8210, 65376, 12434, 12353, 12355, 12357, 12359, 12361, 12419, + 12421, 12423, 12387, 12354, 12356, 12358, 12360, 12362, 12363, 12365, 12367, 12369, 12371, + 12373, 12375, 12377, 12379, 12381, 12383, 12385, 12388, 12390, 12392, 12394, 12395, 12396, + 12397, 12398, 12399, 12402, 12405, 12408, 12411, 12414, 12415, 12416, 12417, 12418, 12420, + 12422, 12424, 12425, 12426, 12427, 12428, 12429, 12431, 12435, 12432, 12433, 12430, 12364, + 12366, 12368, 12370, 12372, 12374, 12376, 12378, 12380, 12382, 12384, 12386, 12389, 12391, + 12393, 12400, 12401, 12403, 12404, 12406, 12407, 12409, 12410, 12412, 12413, 196, 249, 233, + 237, 223, 231, 199, 209, 241, 162, 163, 243, 250, 161, 191, 189, 214, 220, 228, 235, 239, 246, + 220, 226, 234, 238, 244, 252, 224, 233, 9650, 225, 126, 48, 12288, 12289, 12290, 65292, 65294, + 12539, 65306, 65307, 65311, 65281, 12443, 12444, 180, 65344, 168, 65342, 65507, 65343, 12541, + 12542, 12445, 12446, 12291, 20189, 12293, 12294, 12295, 12540, 8213, 8208, 65295, 65340, 12316, + 8214, 65372, 8230, 8229, 8216, 8217, 8220, 8221, 65288, 65289, 12308, 12309, 65339, 65341, + 65371, 65373, 12296, 12297, 12298, 12299, 12300, 12301, 12302, 12303, 12304, 12305, 65291, + 8722, 177, 215, 247, 65309, 8800, 65308, 65310, 8806, 8807, 8734, 8756, 9794, 9792, 176, 8242, + 8243, 8451, 65509, 65284, 65504, 65505, 65285, 65283, 65286, 65290, 65312, 167, 9734, 9733, + 9675, 9679, 9678, 9671, 9670, 9633, 9632, 9651, 9650, 9661, 9660, 8251, 12306, 8594, 8592, + 8593, 8595, 12307, 8712, 8715, 8838, 8839, 8834, 8835, 8746, 8745, 8743, 8744, 65506, 8658, + 8660, 8704, 8707, 8736, 8869, 8978, 8706, 8711, 8801, 8786, 8810, 8811, 8730, 8765, 8733, 8757, + 8747, 8748, 8491, 8240, 9839, 9837, 9834, 8224, 8225, 182, 9711, 65296, 65297, 65298, 65299, + 65300, 65301, 65302, 65303, 65304, 65305, 65313, 65314, 65315, 65316, 65317, 65318, 65319, + 65320, 65321, 65322, 65323, 65324, 65325, 65326, 65327, 65328, 65329, 65330, 65331, 65332, + 65333, 65334, 65335, 65336, 65337, 65338, 65345, 65346, 65347, 65348, 65349, 65350, 65351, + 65352, 65353, 65354, 65355, 65356, 65357, 65358, 65359, 65360, 65361, 65362, 65363, 65364, + 65365, 65366, 65367, 65368, 65369, 65370, 12353, 12354, 12355, 12356, 12357, 12358, 12359, + 12360, 12361, 12362, 12363, 12364, 12365, 12366, 12367, 12368, 12369, 12370, 12371, 12372, + 12373, 12374, 12375, 12376, 12377, 12378, 12379, 12380, 12381, 12382, 12383, 12384, 12385, + 12386, 12387, 12388, 12389, 12390, 12391, 12392, 12393, 12394, 12395, 12396, 12397, 12398, + 12399, 12400, 12401, 12402, 12403, 12404, 12405, 12406, 12407, 12408, 12409, 12410, 12411, + 12412, 12413, 12414, 12415, 12416, 12417, 12418, 12419, 12420, 12421, 12422, 12423, 12424, + 12425, 12426, 12427, 12428, 12429, 12430, 12431, 12432, 12433, 12434, 12435, 12449, 12450, + 12451, 12452, 12453, 12454, 12455, 12456, 12457, 12458, 12459, 12460, 12461, 12462, 12463, + 12464, 12465, 12466, 12467, 12468, 12469, 12470, 12471, 12472, 12473, 12474, 12475, 12476, + 12477, 12478, 12479, 12480, 12481, 12482, 12483, 12484, 12485, 12486, 12487, 12488, 12489, + 12490, 12491, 12492, 12493, 12494, 12495, 12496, 12497, 12498, 12499, 12500, 12501, 12502, + 12503, 12504, 12505, 12506, 12507, 12508, 12509, 12510, 12511, 12512, 12513, 12514, 12515, + 12516, 12517, 12518, 12519, 12520, 12521, 12522, 12523, 12524, 12525, 12526, 12527, 12528, + 12529, 12530, 12531, 12532, 12533, 12534, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, + 923, 924, 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937, 945, 946, 947, 948, 949, + 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 963, 964, 965, 966, 967, 968, 969, + 1040, 1041, 1042, 1043, 1044, 1045, 1025, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, + 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, + 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1105, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, + 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, + 1102, 1103, 20124, 21782, 23043, 38463, 21696, 24859, 25384, 23030, 36898, 33909, 33564, 31312, + 24746, 25569, 28197, 26093, 33894, 33446, 39925, 26771, 22311, 26017, 25201, 23451, 22992, + 34427, 39156, 32098, 32190, 39822, 25110, 31903, 34999, 23433, 24245, 25353, 26263, 26696, + 38343, 38797, 26447, 20197, 20234, 20301, 20381, 20553, 22258, 22839, 22996, 23041, 23561, + 24799, 24847, 24944, 26131, 26885, 28858, 30031, 30064, 31227, 32173, 32239, 32963, 33806, + 34915, 35586, 36949, 36986, 21307, 20117, 20133, 22495, 32946, 37057, 30959, 19968, 22769, + 28322, 36920, 31282, 33576, 33419, 39983, 20801, 21360, 21693, 21729, 22240, 23035, 24341, + 39154, 28139, 32996, 34093, 38498, 38512, 38560, 38907, 21515, 21491, 23431, 28879, 32701, + 36802, 38632, 21359, 40284, 31418, 19985, 30867, 33276, 28198, 22040, 21764, 27421, 34074, + 39995, 23013, 21417, 28006, 29916, 38287, 22082, 20113, 36939, 38642, 33615, 39180, 21473, + 21942, 23344, 24433, 26144, 26355, 26628, 27704, 27891, 27945, 29787, 30408, 31310, 38964, + 33521, 34907, 35424, 37613, 28082, 30123, 30410, 39365, 24742, 35585, 36234, 38322, 27022, + 21421, 20870, 22290, 22576, 22852, 23476, 24310, 24616, 25513, 25588, 27839, 28436, 28814, + 28948, 29017, 29141, 29503, 32257, 33398, 33489, 34199, 36960, 37467, 40219, 22633, 26044, + 27738, 29989, 20985, 22830, 22885, 24448, 24540, 25276, 26106, 27178, 27431, 27572, 29579, + 32705, 35158, 40236, 40206, 40644, 23713, 27798, 33659, 20740, 23627, 25014, 33222, 26742, + 29281, 20057, 20474, 21368, 24681, 28201, 31311, 38899, 19979, 21270, 20206, 20309, 20285, + 20385, 20339, 21152, 21487, 22025, 22799, 23233, 23478, 23521, 31185, 26247, 26524, 26550, + 27468, 27827, 28779, 29634, 31117, 31166, 31292, 31623, 33457, 33499, 33540, 33655, 33775, + 33747, 34662, 35506, 22057, 36008, 36838, 36942, 38686, 34442, 20420, 23784, 25105, 29273, + 30011, 33253, 33469, 34558, 36032, 38597, 39187, 39381, 20171, 20250, 35299, 22238, 22602, + 22730, 24315, 24555, 24618, 24724, 24674, 25040, 25106, 25296, 25913, 39745, 26214, 26800, + 28023, 28784, 30028, 30342, 32117, 33445, 34809, 38283, 38542, 35997, 20977, 21182, 22806, + 21683, 23475, 23830, 24936, 27010, 28079, 30861, 33995, 34903, 35442, 37799, 39608, 28012, + 39336, 34521, 22435, 26623, 34510, 37390, 21123, 22151, 21508, 24275, 25313, 25785, 26684, + 26680, 27579, 29554, 30906, 31339, 35226, 35282, 36203, 36611, 37101, 38307, 38548, 38761, + 23398, 23731, 27005, 38989, 38990, 25499, 31520, 27179, 27263, 26806, 39949, 28511, 21106, + 21917, 24688, 25324, 27963, 28167, 28369, 33883, 35088, 36676, 19988, 39993, 21494, 26907, + 27194, 38788, 26666, 20828, 31427, 33970, 37340, 37772, 22107, 40232, 26658, 33541, 33841, + 31909, 21000, 33477, 29926, 20094, 20355, 20896, 23506, 21002, 21208, 21223, 24059, 21914, + 22570, 23014, 23436, 23448, 23515, 24178, 24185, 24739, 24863, 24931, 25022, 25563, 25954, + 26577, 26707, 26874, 27454, 27475, 27735, 28450, 28567, 28485, 29872, 29976, 30435, 30475, + 31487, 31649, 31777, 32233, 32566, 32752, 32925, 33382, 33694, 35251, 35532, 36011, 36996, + 37969, 38291, 38289, 38306, 38501, 38867, 39208, 33304, 20024, 21547, 23736, 24012, 29609, + 30284, 30524, 23721, 32747, 36107, 38593, 38929, 38996, 39000, 20225, 20238, 21361, 21916, + 22120, 22522, 22855, 23305, 23492, 23696, 24076, 24190, 24524, 25582, 26426, 26071, 26082, + 26399, 26827, 26820, 27231, 24112, 27589, 27671, 27773, 30079, 31048, 23395, 31232, 32000, + 24509, 35215, 35352, 36020, 36215, 36556, 36637, 39138, 39438, 39740, 20096, 20605, 20736, + 22931, 23452, 25135, 25216, 25836, 27450, 29344, 30097, 31047, 32681, 34811, 35516, 35696, + 25516, 33738, 38816, 21513, 21507, 21931, 26708, 27224, 35440, 30759, 26485, 40653, 21364, + 23458, 33050, 34384, 36870, 19992, 20037, 20167, 20241, 21450, 21560, 23470, 24339, 24613, + 25937, 26429, 27714, 27762, 27875, 28792, 29699, 31350, 31406, 31496, 32026, 31998, 32102, + 26087, 29275, 21435, 23621, 24040, 25298, 25312, 25369, 28192, 34394, 35377, 36317, 37624, + 28417, 31142, 39770, 20136, 20139, 20140, 20379, 20384, 20689, 20807, 31478, 20849, 20982, + 21332, 21281, 21375, 21483, 21932, 22659, 23777, 24375, 24394, 24623, 24656, 24685, 25375, + 25945, 27211, 27841, 29378, 29421, 30703, 33016, 33029, 33288, 34126, 37111, 37857, 38911, + 39255, 39514, 20208, 20957, 23597, 26241, 26989, 23616, 26354, 26997, 29577, 26704, 31873, + 20677, 21220, 22343, 24062, 37670, 26020, 27427, 27453, 29748, 31105, 31165, 31563, 32202, + 33465, 33740, 34943, 35167, 35641, 36817, 37329, 21535, 37504, 20061, 20534, 21477, 21306, + 29399, 29590, 30697, 33510, 36527, 39366, 39368, 39378, 20855, 24858, 34398, 21936, 31354, + 20598, 23507, 36935, 38533, 20018, 27355, 37351, 23633, 23624, 25496, 31391, 27795, 38772, + 36705, 31402, 29066, 38536, 31874, 26647, 32368, 26705, 37740, 21234, 21531, 34219, 35347, + 32676, 36557, 37089, 21350, 34952, 31041, 20418, 20670, 21009, 20804, 21843, 22317, 29674, + 22411, 22865, 24418, 24452, 24693, 24950, 24935, 25001, 25522, 25658, 25964, 26223, 26690, + 28179, 30054, 31293, 31995, 32076, 32153, 32331, 32619, 33550, 33610, 34509, 35336, 35427, + 35686, 36605, 38938, 40335, 33464, 36814, 39912, 21127, 25119, 25731, 28608, 38553, 26689, + 20625, 27424, 27770, 28500, 31348, 32080, 34880, 35363, 26376, 20214, 20537, 20518, 20581, + 20860, 21048, 21091, 21927, 22287, 22533, 23244, 24314, 25010, 25080, 25331, 25458, 26908, + 27177, 29309, 29356, 29486, 30740, 30831, 32121, 30476, 32937, 35211, 35609, 36066, 36562, + 36963, 37749, 38522, 38997, 39443, 40568, 20803, 21407, 21427, 24187, 24358, 28187, 28304, + 29572, 29694, 32067, 33335, 35328, 35578, 38480, 20046, 20491, 21476, 21628, 22266, 22993, + 23396, 24049, 24235, 24359, 25144, 25925, 26543, 28246, 29392, 31946, 34996, 32929, 32993, + 33776, 34382, 35463, 36328, 37431, 38599, 39015, 40723, 20116, 20114, 20237, 21320, 21577, + 21566, 23087, 24460, 24481, 24735, 26791, 27278, 29786, 30849, 35486, 35492, 35703, 37264, + 20062, 39881, 20132, 20348, 20399, 20505, 20502, 20809, 20844, 21151, 21177, 21246, 21402, + 21475, 21521, 21518, 21897, 22353, 22434, 22909, 23380, 23389, 23439, 24037, 24039, 24055, + 24184, 24195, 24218, 24247, 24344, 24658, 24908, 25239, 25304, 25511, 25915, 26114, 26179, + 26356, 26477, 26657, 26775, 27083, 27743, 27946, 28009, 28207, 28317, 30002, 30343, 30828, + 31295, 31968, 32005, 32024, 32094, 32177, 32789, 32771, 32943, 32945, 33108, 33167, 33322, + 33618, 34892, 34913, 35611, 36002, 36092, 37066, 37237, 37489, 30783, 37628, 38308, 38477, + 38917, 39321, 39640, 40251, 21083, 21163, 21495, 21512, 22741, 25335, 28640, 35946, 36703, + 40633, 20811, 21051, 21578, 22269, 31296, 37239, 40288, 40658, 29508, 28425, 33136, 29969, + 24573, 24794, 39592, 29403, 36796, 27492, 38915, 20170, 22256, 22372, 22718, 23130, 24680, + 25031, 26127, 26118, 26681, 26801, 28151, 30165, 32058, 33390, 39746, 20123, 20304, 21449, + 21766, 23919, 24038, 24046, 26619, 27801, 29811, 30722, 35408, 37782, 35039, 22352, 24231, + 25387, 20661, 20652, 20877, 26368, 21705, 22622, 22971, 23472, 24425, 25165, 25505, 26685, + 27507, 28168, 28797, 37319, 29312, 30741, 30758, 31085, 25998, 32048, 33756, 35009, 36617, + 38555, 21092, 22312, 26448, 32618, 36001, 20916, 22338, 38442, 22586, 27018, 32948, 21682, + 23822, 22524, 30869, 40442, 20316, 21066, 21643, 25662, 26152, 26388, 26613, 31364, 31574, + 32034, 37679, 26716, 39853, 31545, 21273, 20874, 21047, 23519, 25334, 25774, 25830, 26413, + 27578, 34217, 38609, 30352, 39894, 25420, 37638, 39851, 30399, 26194, 19977, 20632, 21442, + 23665, 24808, 25746, 25955, 26719, 29158, 29642, 29987, 31639, 32386, 34453, 35715, 36059, + 37240, 39184, 26028, 26283, 27531, 20181, 20180, 20282, 20351, 21050, 21496, 21490, 21987, + 22235, 22763, 22987, 22985, 23039, 23376, 23629, 24066, 24107, 24535, 24605, 25351, 25903, + 23388, 26031, 26045, 26088, 26525, 27490, 27515, 27663, 29509, 31049, 31169, 31992, 32025, + 32043, 32930, 33026, 33267, 35222, 35422, 35433, 35430, 35468, 35566, 36039, 36060, 38604, + 39164, 27503, 20107, 20284, 20365, 20816, 23383, 23546, 24904, 25345, 26178, 27425, 28363, + 27835, 29246, 29885, 30164, 30913, 31034, 32780, 32819, 33258, 33940, 36766, 27728, 40575, + 24335, 35672, 40235, 31482, 36600, 23437, 38635, 19971, 21489, 22519, 22833, 23241, 23460, + 24713, 28287, 28422, 30142, 36074, 23455, 34048, 31712, 20594, 26612, 33437, 23649, 34122, + 32286, 33294, 20889, 23556, 25448, 36198, 26012, 29038, 31038, 32023, 32773, 35613, 36554, + 36974, 34503, 37034, 20511, 21242, 23610, 26451, 28796, 29237, 37196, 37320, 37675, 33509, + 23490, 24369, 24825, 20027, 21462, 23432, 25163, 26417, 27530, 29417, 29664, 31278, 33131, + 36259, 37202, 39318, 20754, 21463, 21610, 23551, 25480, 27193, 32172, 38656, 22234, 21454, + 21608, 23447, 23601, 24030, 20462, 24833, 25342, 27954, 31168, 31179, 32066, 32333, 32722, + 33261, 33311, 33936, 34886, 35186, 35728, 36468, 36655, 36913, 37195, 37228, 38598, 37276, + 20160, 20303, 20805, 21313, 24467, 25102, 26580, 27713, 28171, 29539, 32294, 37325, 37507, + 21460, 22809, 23487, 28113, 31069, 32302, 31899, 22654, 29087, 20986, 34899, 36848, 20426, + 23803, 26149, 30636, 31459, 33308, 39423, 20934, 24490, 26092, 26991, 27529, 28147, 28310, + 28516, 30462, 32020, 24033, 36981, 37255, 38918, 20966, 21021, 25152, 26257, 26329, 28186, + 24246, 32210, 32626, 26360, 34223, 34295, 35576, 21161, 21465, 22899, 24207, 24464, 24661, + 37604, 38500, 20663, 20767, 21213, 21280, 21319, 21484, 21736, 21830, 21809, 22039, 22888, + 22974, 23100, 23477, 23558, 23567, 23569, 23578, 24196, 24202, 24288, 24432, 25215, 25220, + 25307, 25484, 25463, 26119, 26124, 26157, 26230, 26494, 26786, 27167, 27189, 27836, 28040, + 28169, 28248, 28988, 28966, 29031, 30151, 30465, 30813, 30977, 31077, 31216, 31456, 31505, + 31911, 32057, 32918, 33750, 33931, 34121, 34909, 35059, 35359, 35388, 35412, 35443, 35937, + 36062, 37284, 37478, 37758, 37912, 38556, 38808, 19978, 19976, 19998, 20055, 20887, 21104, + 22478, 22580, 22732, 23330, 24120, 24773, 25854, 26465, 26454, 27972, 29366, 30067, 31331, + 33976, 35698, 37304, 37664, 22065, 22516, 39166, 25325, 26893, 27542, 29165, 32340, 32887, + 33394, 35302, 39135, 34645, 36785, 23611, 20280, 20449, 20405, 21767, 23072, 23517, 23529, + 24515, 24910, 25391, 26032, 26187, 26862, 27035, 28024, 28145, 30003, 30137, 30495, 31070, + 31206, 32051, 33251, 33455, 34218, 35242, 35386, 36523, 36763, 36914, 37341, 38663, 20154, + 20161, 20995, 22645, 22764, 23563, 29978, 23613, 33102, 35338, 36805, 38499, 38765, 31525, + 35535, 38920, 37218, 22259, 21416, 36887, 21561, 22402, 24101, 25512, 27700, 28810, 30561, + 31883, 32736, 34928, 36930, 37204, 37648, 37656, 38543, 29790, 39620, 23815, 23913, 25968, + 26530, 36264, 38619, 25454, 26441, 26905, 33733, 38935, 38592, 35070, 28548, 25722, 23544, + 19990, 28716, 30045, 26159, 20932, 21046, 21218, 22995, 24449, 24615, 25104, 25919, 25972, + 26143, 26228, 26866, 26646, 27491, 28165, 29298, 29983, 30427, 31934, 32854, 22768, 35069, + 35199, 35488, 35475, 35531, 36893, 37266, 38738, 38745, 25993, 31246, 33030, 38587, 24109, + 24796, 25114, 26021, 26132, 26512, 30707, 31309, 31821, 32318, 33034, 36012, 36196, 36321, + 36447, 30889, 20999, 25305, 25509, 25666, 25240, 35373, 31363, 31680, 35500, 38634, 32118, + 33292, 34633, 20185, 20808, 21315, 21344, 23459, 23554, 23574, 24029, 25126, 25159, 25776, + 26643, 26676, 27849, 27973, 27927, 26579, 28508, 29006, 29053, 26059, 31359, 31661, 32218, + 32330, 32680, 33146, 33307, 33337, 34214, 35438, 36046, 36341, 36984, 36983, 37549, 37521, + 38275, 39854, 21069, 21892, 28472, 28982, 20840, 31109, 32341, 33203, 31950, 22092, 22609, + 23720, 25514, 26366, 26365, 26970, 29401, 30095, 30094, 30990, 31062, 31199, 31895, 32032, + 32068, 34311, 35380, 38459, 36961, 40736, 20711, 21109, 21452, 21474, 20489, 21930, 22766, + 22863, 29245, 23435, 23652, 21277, 24803, 24819, 25436, 25475, 25407, 25531, 25805, 26089, + 26361, 24035, 27085, 27133, 28437, 29157, 20105, 30185, 30456, 31379, 31967, 32207, 32156, + 32865, 33609, 33624, 33900, 33980, 34299, 35013, 36208, 36865, 36973, 37783, 38684, 39442, + 20687, 22679, 24974, 33235, 34101, 36104, 36896, 20419, 20596, 21063, 21363, 24687, 25417, + 26463, 28204, 36275, 36895, 20439, 23646, 36042, 26063, 32154, 21330, 34966, 20854, 25539, + 23384, 23403, 23562, 25613, 26449, 36956, 20182, 22810, 22826, 27760, 35409, 21822, 22549, + 22949, 24816, 25171, 26561, 33333, 26965, 38464, 39364, 39464, 20307, 22534, 23550, 32784, + 23729, 24111, 24453, 24608, 24907, 25140, 26367, 27888, 28382, 32974, 33151, 33492, 34955, + 36024, 36864, 36910, 38538, 40667, 39899, 20195, 21488, 22823, 31532, 37261, 38988, 40441, + 28381, 28711, 21331, 21828, 23429, 25176, 25246, 25299, 27810, 28655, 29730, 35351, 37944, + 28609, 35582, 33592, 20967, 34552, 21482, 21481, 20294, 36948, 36784, 22890, 33073, 24061, + 31466, 36799, 26842, 35895, 29432, 40008, 27197, 35504, 20025, 21336, 22022, 22374, 25285, + 25506, 26086, 27470, 28129, 28251, 28845, 30701, 31471, 31658, 32187, 32829, 32966, 34507, + 35477, 37723, 22243, 22727, 24382, 26029, 26262, 27264, 27573, 30007, 35527, 20516, 30693, + 22320, 24347, 24677, 26234, 27744, 30196, 31258, 32622, 33268, 34584, 36933, 39347, 31689, + 30044, 31481, 31569, 33988, 36880, 31209, 31378, 33590, 23265, 30528, 20013, 20210, 23449, + 24544, 25277, 26172, 26609, 27880, 34411, 34935, 35387, 37198, 37619, 39376, 27159, 28710, + 29482, 33511, 33879, 36015, 19969, 20806, 20939, 21899, 23541, 24086, 24115, 24193, 24340, + 24373, 24427, 24500, 25074, 25361, 26274, 26397, 28526, 29266, 30010, 30522, 32884, 33081, + 33144, 34678, 35519, 35548, 36229, 36339, 37530, 38263, 38914, 40165, 21189, 25431, 30452, + 26389, 27784, 29645, 36035, 37806, 38515, 27941, 22684, 26894, 27084, 36861, 37786, 30171, + 36890, 22618, 26626, 25524, 27131, 20291, 28460, 26584, 36795, 34086, 32180, 37716, 26943, + 28528, 22378, 22775, 23340, 32044, 29226, 21514, 37347, 40372, 20141, 20302, 20572, 20597, + 21059, 35998, 21576, 22564, 23450, 24093, 24213, 24237, 24311, 24351, 24716, 25269, 25402, + 25552, 26799, 27712, 30855, 31118, 31243, 32224, 33351, 35330, 35558, 36420, 36883, 37048, + 37165, 37336, 40718, 27877, 25688, 25826, 25973, 28404, 30340, 31515, 36969, 37841, 28346, + 21746, 24505, 25764, 36685, 36845, 37444, 20856, 22635, 22825, 23637, 24215, 28155, 32399, + 29980, 36028, 36578, 39003, 28857, 20253, 27583, 28593, 30000, 38651, 20814, 21520, 22581, + 22615, 22956, 23648, 24466, 26007, 26460, 28193, 30331, 33759, 36077, 36884, 37117, 37709, + 30757, 30778, 21162, 24230, 22303, 22900, 24594, 20498, 20826, 20908, 20941, 20992, 21776, + 22612, 22616, 22871, 23445, 23798, 23947, 24764, 25237, 25645, 26481, 26691, 26812, 26847, + 30423, 28120, 28271, 28059, 28783, 29128, 24403, 30168, 31095, 31561, 31572, 31570, 31958, + 32113, 21040, 33891, 34153, 34276, 35342, 35588, 35910, 36367, 36867, 36879, 37913, 38518, + 38957, 39472, 38360, 20685, 21205, 21516, 22530, 23566, 24999, 25758, 27934, 30643, 31461, + 33012, 33796, 36947, 37509, 23776, 40199, 21311, 24471, 24499, 28060, 29305, 30563, 31167, + 31716, 27602, 29420, 35501, 26627, 27233, 20984, 31361, 26932, 23626, 40182, 33515, 23493, + 37193, 28702, 22136, 23663, 24775, 25958, 27788, 35930, 36929, 38931, 21585, 26311, 37389, + 22856, 37027, 20869, 20045, 20970, 34201, 35598, 28760, 25466, 37707, 26978, 39348, 32260, + 30071, 21335, 26976, 36575, 38627, 27741, 20108, 23612, 24336, 36841, 21250, 36049, 32905, + 34425, 24319, 26085, 20083, 20837, 22914, 23615, 38894, 20219, 22922, 24525, 35469, 28641, + 31152, 31074, 23527, 33905, 29483, 29105, 24180, 24565, 25467, 25754, 29123, 31896, 20035, + 24316, 20043, 22492, 22178, 24745, 28611, 32013, 33021, 33075, 33215, 36786, 35223, 34468, + 24052, 25226, 25773, 35207, 26487, 27874, 27966, 29750, 30772, 23110, 32629, 33453, 39340, + 20467, 24259, 25309, 25490, 25943, 26479, 30403, 29260, 32972, 32954, 36649, 37197, 20493, + 22521, 23186, 26757, 26995, 29028, 29437, 36023, 22770, 36064, 38506, 36889, 34687, 31204, + 30695, 33833, 20271, 21093, 21338, 25293, 26575, 27850, 30333, 31636, 31893, 33334, 34180, + 36843, 26333, 28448, 29190, 32283, 33707, 39361, 40614, 20989, 31665, 30834, 31672, 32903, + 31560, 27368, 24161, 32908, 30033, 30048, 20843, 37474, 28300, 30330, 37271, 39658, 20240, + 32624, 25244, 31567, 38309, 40169, 22138, 22617, 34532, 38588, 20276, 21028, 21322, 21453, + 21467, 24070, 25644, 26001, 26495, 27710, 27726, 29256, 29359, 29677, 30036, 32321, 33324, + 34281, 36009, 31684, 37318, 29033, 38930, 39151, 25405, 26217, 30058, 30436, 30928, 34115, + 34542, 21290, 21329, 21542, 22915, 24199, 24444, 24754, 25161, 25209, 25259, 26000, 27604, + 27852, 30130, 30382, 30865, 31192, 32203, 32631, 32933, 34987, 35513, 36027, 36991, 38750, + 39131, 27147, 31800, 20633, 23614, 24494, 26503, 27608, 29749, 30473, 32654, 40763, 26570, + 31255, 21305, 30091, 39661, 24422, 33181, 33777, 32920, 24380, 24517, 30050, 31558, 36924, + 26727, 23019, 23195, 32016, 30334, 35628, 20469, 24426, 27161, 27703, 28418, 29922, 31080, + 34920, 35413, 35961, 24287, 25551, 30149, 31186, 33495, 37672, 37618, 33948, 34541, 39981, + 21697, 24428, 25996, 27996, 28693, 36007, 36051, 38971, 25935, 29942, 19981, 20184, 22496, + 22827, 23142, 23500, 20904, 24067, 24220, 24598, 25206, 25975, 26023, 26222, 28014, 29238, + 31526, 33104, 33178, 33433, 35676, 36000, 36070, 36212, 38428, 38468, 20398, 25771, 27494, + 33310, 33889, 34154, 37096, 23553, 26963, 39080, 33914, 34135, 20239, 21103, 24489, 24133, + 26381, 31119, 33145, 35079, 35206, 28149, 24343, 25173, 27832, 20175, 29289, 39826, 20998, + 21563, 22132, 22707, 24996, 25198, 28954, 22894, 31881, 31966, 32027, 38640, 25991, 32862, + 19993, 20341, 20853, 22592, 24163, 24179, 24330, 26564, 20006, 34109, 38281, 38491, 31859, + 38913, 20731, 22721, 30294, 30887, 21029, 30629, 34065, 31622, 20559, 22793, 29255, 31687, + 32232, 36794, 36820, 36941, 20415, 21193, 23081, 24321, 38829, 20445, 33303, 37610, 22275, + 25429, 27497, 29995, 35036, 36628, 31298, 21215, 22675, 24917, 25098, 26286, 27597, 31807, + 33769, 20515, 20472, 21253, 21574, 22577, 22857, 23453, 23792, 23791, 23849, 24214, 25265, + 25447, 25918, 26041, 26379, 27861, 27873, 28921, 30770, 32299, 32990, 33459, 33804, 34028, + 34562, 35090, 35370, 35914, 37030, 37586, 39165, 40179, 40300, 20047, 20129, 20621, 21078, + 22346, 22952, 24125, 24536, 24537, 25151, 26292, 26395, 26576, 26834, 20882, 32033, 32938, + 33192, 35584, 35980, 36031, 37502, 38450, 21536, 38956, 21271, 20693, 21340, 22696, 25778, + 26420, 29287, 30566, 31302, 37350, 21187, 27809, 27526, 22528, 24140, 22868, 26412, 32763, + 20961, 30406, 25705, 30952, 39764, 40635, 22475, 22969, 26151, 26522, 27598, 21737, 27097, + 24149, 33180, 26517, 39850, 26622, 40018, 26717, 20134, 20451, 21448, 25273, 26411, 27819, + 36804, 20397, 32365, 40639, 19975, 24930, 28288, 28459, 34067, 21619, 26410, 39749, 24051, + 31637, 23724, 23494, 34588, 28234, 34001, 31252, 33032, 22937, 31885, 27665, 30496, 21209, + 22818, 28961, 29279, 30683, 38695, 40289, 26891, 23167, 23064, 20901, 21517, 21629, 26126, + 30431, 36855, 37528, 40180, 23018, 29277, 28357, 20813, 26825, 32191, 32236, 38754, 40634, + 25720, 27169, 33538, 22916, 23391, 27611, 29467, 30450, 32178, 32791, 33945, 20786, 26408, + 40665, 30446, 26466, 21247, 39173, 23588, 25147, 31870, 36016, 21839, 24758, 32011, 38272, + 21249, 20063, 20918, 22812, 29242, 32822, 37326, 24357, 30690, 21380, 24441, 32004, 34220, + 35379, 36493, 38742, 26611, 34222, 37971, 24841, 24840, 27833, 30290, 35565, 36664, 21807, + 20305, 20778, 21191, 21451, 23461, 24189, 24736, 24962, 25558, 26377, 26586, 28263, 28044, + 29494, 29495, 30001, 31056, 35029, 35480, 36938, 37009, 37109, 38596, 34701, 22805, 20104, + 20313, 19982, 35465, 36671, 38928, 20653, 24188, 22934, 23481, 24248, 25562, 25594, 25793, + 26332, 26954, 27096, 27915, 28342, 29076, 29992, 31407, 32650, 32768, 33865, 33993, 35201, + 35617, 36362, 36965, 38525, 39178, 24958, 25233, 27442, 27779, 28020, 32716, 32764, 28096, + 32645, 34746, 35064, 26469, 33713, 38972, 38647, 27931, 32097, 33853, 37226, 20081, 21365, + 23888, 27396, 28651, 34253, 34349, 35239, 21033, 21519, 23653, 26446, 26792, 29702, 29827, + 30178, 35023, 35041, 37324, 38626, 38520, 24459, 29575, 31435, 33870, 25504, 30053, 21129, + 27969, 28316, 29705, 30041, 30827, 31890, 38534, 31452, 40845, 20406, 24942, 26053, 34396, + 20102, 20142, 20698, 20001, 20940, 23534, 26009, 26753, 28092, 29471, 30274, 30637, 31260, + 31975, 33391, 35538, 36988, 37327, 38517, 38936, 21147, 32209, 20523, 21400, 26519, 28107, + 29136, 29747, 33256, 36650, 38563, 40023, 40607, 29792, 22593, 28057, 32047, 39006, 20196, + 20278, 20363, 20919, 21169, 23994, 24604, 29618, 31036, 33491, 37428, 38583, 38646, 38666, + 40599, 40802, 26278, 27508, 21015, 21155, 28872, 35010, 24265, 24651, 24976, 28451, 29001, + 31806, 32244, 32879, 34030, 36899, 37676, 21570, 39791, 27347, 28809, 36034, 36335, 38706, + 21172, 23105, 24266, 24324, 26391, 27004, 27028, 28010, 28431, 29282, 29436, 31725, 32769, + 32894, 34635, 37070, 20845, 40595, 31108, 32907, 37682, 35542, 20525, 21644, 35441, 27498, + 36036, 33031, 24785, 26528, 40434, 20121, 20120, 39952, 35435, 34241, 34152, 26880, 28286, + 30871, 33109, 24332, 19984, 19989, 20010, 20017, 20022, 20028, 20031, 20034, 20054, 20056, + 20098, 20101, 35947, 20106, 33298, 24333, 20110, 20126, 20127, 20128, 20130, 20144, 20147, + 20150, 20174, 20173, 20164, 20166, 20162, 20183, 20190, 20205, 20191, 20215, 20233, 20314, + 20272, 20315, 20317, 20311, 20295, 20342, 20360, 20367, 20376, 20347, 20329, 20336, 20369, + 20335, 20358, 20374, 20760, 20436, 20447, 20430, 20440, 20443, 20433, 20442, 20432, 20452, + 20453, 20506, 20520, 20500, 20522, 20517, 20485, 20252, 20470, 20513, 20521, 20524, 20478, + 20463, 20497, 20486, 20547, 20551, 26371, 20565, 20560, 20552, 20570, 20566, 20588, 20600, + 20608, 20634, 20613, 20660, 20658, 20681, 20682, 20659, 20674, 20694, 20702, 20709, 20717, + 20707, 20718, 20729, 20725, 20745, 20737, 20738, 20758, 20757, 20756, 20762, 20769, 20794, + 20791, 20796, 20795, 20799, 20800, 20818, 20812, 20820, 20834, 31480, 20841, 20842, 20846, + 20864, 20866, 22232, 20876, 20873, 20879, 20881, 20883, 20885, 20886, 20900, 20902, 20898, + 20905, 20906, 20907, 20915, 20913, 20914, 20912, 20917, 20925, 20933, 20937, 20955, 20960, + 34389, 20969, 20973, 20976, 20981, 20990, 20996, 21003, 21012, 21006, 21031, 21034, 21038, + 21043, 21049, 21071, 21060, 21067, 21068, 21086, 21076, 21098, 21108, 21097, 21107, 21119, + 21117, 21133, 21140, 21138, 21105, 21128, 21137, 36776, 36775, 21164, 21165, 21180, 21173, + 21185, 21197, 21207, 21214, 21219, 21222, 39149, 21216, 21235, 21237, 21240, 21241, 21254, + 21256, 30008, 21261, 21264, 21263, 21269, 21274, 21283, 21295, 21297, 21299, 21304, 21312, + 21318, 21317, 19991, 21321, 21325, 20950, 21342, 21353, 21358, 22808, 21371, 21367, 21378, + 21398, 21408, 21414, 21413, 21422, 21424, 21430, 21443, 31762, 38617, 21471, 26364, 29166, + 21486, 21480, 21485, 21498, 21505, 21565, 21568, 21548, 21549, 21564, 21550, 21558, 21545, + 21533, 21582, 21647, 21621, 21646, 21599, 21617, 21623, 21616, 21650, 21627, 21632, 21622, + 21636, 21648, 21638, 21703, 21666, 21688, 21669, 21676, 21700, 21704, 21672, 21675, 21698, + 21668, 21694, 21692, 21720, 21733, 21734, 21775, 21780, 21757, 21742, 21741, 21754, 21730, + 21817, 21824, 21859, 21836, 21806, 21852, 21829, 21846, 21847, 21816, 21811, 21853, 21913, + 21888, 21679, 21898, 21919, 21883, 21886, 21912, 21918, 21934, 21884, 21891, 21929, 21895, + 21928, 21978, 21957, 21983, 21956, 21980, 21988, 21972, 22036, 22007, 22038, 22014, 22013, + 22043, 22009, 22094, 22096, 29151, 22068, 22070, 22066, 22072, 22123, 22116, 22063, 22124, + 22122, 22150, 22144, 22154, 22176, 22164, 22159, 22181, 22190, 22198, 22196, 22210, 22204, + 22209, 22211, 22208, 22216, 22222, 22225, 22227, 22231, 22254, 22265, 22272, 22271, 22276, + 22281, 22280, 22283, 22285, 22291, 22296, 22294, 21959, 22300, 22310, 22327, 22328, 22350, + 22331, 22336, 22351, 22377, 22464, 22408, 22369, 22399, 22409, 22419, 22432, 22451, 22436, + 22442, 22448, 22467, 22470, 22484, 22482, 22483, 22538, 22486, 22499, 22539, 22553, 22557, + 22642, 22561, 22626, 22603, 22640, 27584, 22610, 22589, 22649, 22661, 22713, 22687, 22699, + 22714, 22750, 22715, 22712, 22702, 22725, 22739, 22737, 22743, 22745, 22744, 22757, 22748, + 22756, 22751, 22767, 22778, 22777, 22779, 22780, 22781, 22786, 22794, 22800, 22811, 26790, + 22821, 22828, 22829, 22834, 22840, 22846, 31442, 22869, 22864, 22862, 22874, 22872, 22882, + 22880, 22887, 22892, 22889, 22904, 22913, 22941, 20318, 20395, 22947, 22962, 22982, 23016, + 23004, 22925, 23001, 23002, 23077, 23071, 23057, 23068, 23049, 23066, 23104, 23148, 23113, + 23093, 23094, 23138, 23146, 23194, 23228, 23230, 23243, 23234, 23229, 23267, 23255, 23270, + 23273, 23254, 23290, 23291, 23308, 23307, 23318, 23346, 23248, 23338, 23350, 23358, 23363, + 23365, 23360, 23377, 23381, 23386, 23387, 23397, 23401, 23408, 23411, 23413, 23416, 25992, + 23418, 23424, 23427, 23462, 23480, 23491, 23495, 23497, 23508, 23504, 23524, 23526, 23522, + 23518, 23525, 23531, 23536, 23542, 23539, 23557, 23559, 23560, 23565, 23571, 23584, 23586, + 23592, 23608, 23609, 23617, 23622, 23630, 23635, 23632, 23631, 23409, 23660, 23662, 20066, + 23670, 23673, 23692, 23697, 23700, 22939, 23723, 23739, 23734, 23740, 23735, 23749, 23742, + 23751, 23769, 23785, 23805, 23802, 23789, 23948, 23786, 23819, 23829, 23831, 23900, 23839, + 23835, 23825, 23828, 23842, 23834, 23833, 23832, 23884, 23890, 23886, 23883, 23916, 23923, + 23926, 23943, 23940, 23938, 23970, 23965, 23980, 23982, 23997, 23952, 23991, 23996, 24009, + 24013, 24019, 24018, 24022, 24027, 24043, 24050, 24053, 24075, 24090, 24089, 24081, 24091, + 24118, 24119, 24132, 24131, 24128, 24142, 24151, 24148, 24159, 24162, 24164, 24135, 24181, + 24182, 24186, 40636, 24191, 24224, 24257, 24258, 24264, 24272, 24271, 24278, 24291, 24285, + 24282, 24283, 24290, 24289, 24296, 24297, 24300, 24305, 24307, 24304, 24308, 24312, 24318, + 24323, 24329, 24413, 24412, 24331, 24337, 24342, 24361, 24365, 24376, 24385, 24392, 24396, + 24398, 24367, 24401, 24406, 24407, 24409, 24417, 24429, 24435, 24439, 24451, 24450, 24447, + 24458, 24456, 24465, 24455, 24478, 24473, 24472, 24480, 24488, 24493, 24508, 24534, 24571, + 24548, 24568, 24561, 24541, 24755, 24575, 24609, 24672, 24601, 24592, 24617, 24590, 24625, + 24603, 24597, 24619, 24614, 24591, 24634, 24666, 24641, 24682, 24695, 24671, 24650, 24646, + 24653, 24675, 24643, 24676, 24642, 24684, 24683, 24665, 24705, 24717, 24807, 24707, 24730, + 24708, 24731, 24726, 24727, 24722, 24743, 24715, 24801, 24760, 24800, 24787, 24756, 24560, + 24765, 24774, 24757, 24792, 24909, 24853, 24838, 24822, 24823, 24832, 24820, 24826, 24835, + 24865, 24827, 24817, 24845, 24846, 24903, 24894, 24872, 24871, 24906, 24895, 24892, 24876, + 24884, 24893, 24898, 24900, 24947, 24951, 24920, 24921, 24922, 24939, 24948, 24943, 24933, + 24945, 24927, 24925, 24915, 24949, 24985, 24982, 24967, 25004, 24980, 24986, 24970, 24977, + 25003, 25006, 25036, 25034, 25033, 25079, 25032, 25027, 25030, 25018, 25035, 32633, 25037, + 25062, 25059, 25078, 25082, 25076, 25087, 25085, 25084, 25086, 25088, 25096, 25097, 25101, + 25100, 25108, 25115, 25118, 25121, 25130, 25134, 25136, 25138, 25139, 25153, 25166, 25182, + 25187, 25179, 25184, 25192, 25212, 25218, 25225, 25214, 25234, 25235, 25238, 25300, 25219, + 25236, 25303, 25297, 25275, 25295, 25343, 25286, 25812, 25288, 25308, 25292, 25290, 25282, + 25287, 25243, 25289, 25356, 25326, 25329, 25383, 25346, 25352, 25327, 25333, 25424, 25406, + 25421, 25628, 25423, 25494, 25486, 25472, 25515, 25462, 25507, 25487, 25481, 25503, 25525, + 25451, 25449, 25534, 25577, 25536, 25542, 25571, 25545, 25554, 25590, 25540, 25622, 25652, + 25606, 25619, 25638, 25654, 25885, 25623, 25640, 25615, 25703, 25711, 25718, 25678, 25898, + 25749, 25747, 25765, 25769, 25736, 25788, 25818, 25810, 25797, 25799, 25787, 25816, 25794, + 25841, 25831, 33289, 25824, 25825, 25260, 25827, 25839, 25900, 25846, 25844, 25842, 25850, + 25856, 25853, 25880, 25884, 25861, 25892, 25891, 25899, 25908, 25909, 25911, 25910, 25912, + 30027, 25928, 25942, 25941, 25933, 25944, 25950, 25949, 25970, 25976, 25986, 25987, 35722, + 26011, 26015, 26027, 26039, 26051, 26054, 26049, 26052, 26060, 26066, 26075, 26073, 26080, + 26081, 26097, 26482, 26122, 26115, 26107, 26483, 26165, 26166, 26164, 26140, 26191, 26180, + 26185, 26177, 26206, 26205, 26212, 26215, 26216, 26207, 26210, 26224, 26243, 26248, 26254, + 26249, 26244, 26264, 26269, 26305, 26297, 26313, 26302, 26300, 26308, 26296, 26326, 26330, + 26336, 26175, 26342, 26345, 26352, 26357, 26359, 26383, 26390, 26398, 26406, 26407, 38712, + 26414, 26431, 26422, 26433, 26424, 26423, 26438, 26462, 26464, 26457, 26467, 26468, 26505, + 26480, 26537, 26492, 26474, 26508, 26507, 26534, 26529, 26501, 26551, 26607, 26548, 26604, + 26547, 26601, 26552, 26596, 26590, 26589, 26594, 26606, 26553, 26574, 26566, 26599, 27292, + 26654, 26694, 26665, 26688, 26701, 26674, 26702, 26803, 26667, 26713, 26723, 26743, 26751, + 26783, 26767, 26797, 26772, 26781, 26779, 26755, 27310, 26809, 26740, 26805, 26784, 26810, + 26895, 26765, 26750, 26881, 26826, 26888, 26840, 26914, 26918, 26849, 26892, 26829, 26836, + 26855, 26837, 26934, 26898, 26884, 26839, 26851, 26917, 26873, 26848, 26863, 26920, 26922, + 26906, 26915, 26913, 26822, 27001, 26999, 26972, 27000, 26987, 26964, 27006, 26990, 26937, + 26996, 26941, 26969, 26928, 26977, 26974, 26973, 27009, 26986, 27058, 27054, 27088, 27071, + 27073, 27091, 27070, 27086, 23528, 27082, 27101, 27067, 27075, 27047, 27182, 27025, 27040, + 27036, 27029, 27060, 27102, 27112, 27138, 27163, 27135, 27402, 27129, 27122, 27111, 27141, + 27057, 27166, 27117, 27156, 27115, 27146, 27154, 27329, 27171, 27155, 27204, 27148, 27250, + 27190, 27256, 27207, 27234, 27225, 27238, 27208, 27192, 27170, 27280, 27277, 27296, 27268, + 27298, 27299, 27287, 34327, 27323, 27331, 27330, 27320, 27315, 27308, 27358, 27345, 27359, + 27306, 27354, 27370, 27387, 27397, 34326, 27386, 27410, 27414, 39729, 27423, 27448, 27447, + 30428, 27449, 39150, 27463, 27459, 27465, 27472, 27481, 27476, 27483, 27487, 27489, 27512, + 27513, 27519, 27520, 27524, 27523, 27533, 27544, 27541, 27550, 27556, 27562, 27563, 27567, + 27570, 27569, 27571, 27575, 27580, 27590, 27595, 27603, 27615, 27628, 27627, 27635, 27631, + 40638, 27656, 27667, 27668, 27675, 27684, 27683, 27742, 27733, 27746, 27754, 27778, 27789, + 27802, 27777, 27803, 27774, 27752, 27763, 27794, 27792, 27844, 27889, 27859, 27837, 27863, + 27845, 27869, 27822, 27825, 27838, 27834, 27867, 27887, 27865, 27882, 27935, 34893, 27958, + 27947, 27965, 27960, 27929, 27957, 27955, 27922, 27916, 28003, 28051, 28004, 27994, 28025, + 27993, 28046, 28053, 28644, 28037, 28153, 28181, 28170, 28085, 28103, 28134, 28088, 28102, + 28140, 28126, 28108, 28136, 28114, 28101, 28154, 28121, 28132, 28117, 28138, 28142, 28205, + 28270, 28206, 28185, 28274, 28255, 28222, 28195, 28267, 28203, 28278, 28237, 28191, 28227, + 28218, 28238, 28196, 28415, 28189, 28216, 28290, 28330, 28312, 28361, 28343, 28371, 28349, + 28335, 28356, 28338, 28372, 28373, 28303, 28325, 28354, 28319, 28481, 28433, 28748, 28396, + 28408, 28414, 28479, 28402, 28465, 28399, 28466, 28364, 28478, 28435, 28407, 28550, 28538, + 28536, 28545, 28544, 28527, 28507, 28659, 28525, 28546, 28540, 28504, 28558, 28561, 28610, + 28518, 28595, 28579, 28577, 28580, 28601, 28614, 28586, 28639, 28629, 28652, 28628, 28632, + 28657, 28654, 28635, 28681, 28683, 28666, 28689, 28673, 28687, 28670, 28699, 28698, 28532, + 28701, 28696, 28703, 28720, 28734, 28722, 28753, 28771, 28825, 28818, 28847, 28913, 28844, + 28856, 28851, 28846, 28895, 28875, 28893, 28889, 28937, 28925, 28956, 28953, 29029, 29013, + 29064, 29030, 29026, 29004, 29014, 29036, 29071, 29179, 29060, 29077, 29096, 29100, 29143, + 29113, 29118, 29138, 29129, 29140, 29134, 29152, 29164, 29159, 29173, 29180, 29177, 29183, + 29197, 29200, 29211, 29224, 29229, 29228, 29232, 29234, 29243, 29244, 29247, 29248, 29254, + 29259, 29272, 29300, 29310, 29314, 29313, 29319, 29330, 29334, 29346, 29351, 29369, 29362, + 29379, 29382, 29380, 29390, 29394, 29410, 29408, 29409, 29433, 29431, 20495, 29463, 29450, + 29468, 29462, 29469, 29492, 29487, 29481, 29477, 29502, 29518, 29519, 40664, 29527, 29546, + 29544, 29552, 29560, 29557, 29563, 29562, 29640, 29619, 29646, 29627, 29632, 29669, 29678, + 29662, 29858, 29701, 29807, 29733, 29688, 29746, 29754, 29781, 29759, 29791, 29785, 29761, + 29788, 29801, 29808, 29795, 29802, 29814, 29822, 29835, 29854, 29863, 29898, 29903, 29908, + 29681, 29920, 29923, 29927, 29929, 29934, 29938, 29936, 29937, 29944, 29943, 29956, 29955, + 29957, 29964, 29966, 29965, 29973, 29971, 29982, 29990, 29996, 30012, 30020, 30029, 30026, + 30025, 30043, 30022, 30042, 30057, 30052, 30055, 30059, 30061, 30072, 30070, 30086, 30087, + 30068, 30090, 30089, 30082, 30100, 30106, 30109, 30117, 30115, 30146, 30131, 30147, 30133, + 30141, 30136, 30140, 30129, 30157, 30154, 30162, 30169, 30179, 30174, 30206, 30207, 30204, + 30209, 30192, 30202, 30194, 30195, 30219, 30221, 30217, 30239, 30247, 30240, 30241, 30242, + 30244, 30260, 30256, 30267, 30279, 30280, 30278, 30300, 30296, 30305, 30306, 30312, 30313, + 30314, 30311, 30316, 30320, 30322, 30326, 30328, 30332, 30336, 30339, 30344, 30347, 30350, + 30358, 30355, 30361, 30362, 30384, 30388, 30392, 30393, 30394, 30402, 30413, 30422, 30418, + 30430, 30433, 30437, 30439, 30442, 34351, 30459, 30472, 30471, 30468, 30505, 30500, 30494, + 30501, 30502, 30491, 30519, 30520, 30535, 30554, 30568, 30571, 30555, 30565, 30591, 30590, + 30585, 30606, 30603, 30609, 30624, 30622, 30640, 30646, 30649, 30655, 30652, 30653, 30651, + 30663, 30669, 30679, 30682, 30684, 30691, 30702, 30716, 30732, 30738, 31014, 30752, 31018, + 30789, 30862, 30836, 30854, 30844, 30874, 30860, 30883, 30901, 30890, 30895, 30929, 30918, + 30923, 30932, 30910, 30908, 30917, 30922, 30956, 30951, 30938, 30973, 30964, 30983, 30994, + 30993, 31001, 31020, 31019, 31040, 31072, 31063, 31071, 31066, 31061, 31059, 31098, 31103, + 31114, 31133, 31143, 40779, 31146, 31150, 31155, 31161, 31162, 31177, 31189, 31207, 31212, + 31201, 31203, 31240, 31245, 31256, 31257, 31264, 31263, 31104, 31281, 31291, 31294, 31287, + 31299, 31319, 31305, 31329, 31330, 31337, 40861, 31344, 31353, 31357, 31368, 31383, 31381, + 31384, 31382, 31401, 31432, 31408, 31414, 31429, 31428, 31423, 36995, 31431, 31434, 31437, + 31439, 31445, 31443, 31449, 31450, 31453, 31457, 31458, 31462, 31469, 31472, 31490, 31503, + 31498, 31494, 31539, 31512, 31513, 31518, 31541, 31528, 31542, 31568, 31610, 31492, 31565, + 31499, 31564, 31557, 31605, 31589, 31604, 31591, 31600, 31601, 31596, 31598, 31645, 31640, + 31647, 31629, 31644, 31642, 31627, 31634, 31631, 31581, 31641, 31691, 31681, 31692, 31695, + 31668, 31686, 31709, 31721, 31761, 31764, 31718, 31717, 31840, 31744, 31751, 31763, 31731, + 31735, 31767, 31757, 31734, 31779, 31783, 31786, 31775, 31799, 31787, 31805, 31820, 31811, + 31828, 31823, 31808, 31824, 31832, 31839, 31844, 31830, 31845, 31852, 31861, 31875, 31888, + 31908, 31917, 31906, 31915, 31905, 31912, 31923, 31922, 31921, 31918, 31929, 31933, 31936, + 31941, 31938, 31960, 31954, 31964, 31970, 39739, 31983, 31986, 31988, 31990, 31994, 32006, + 32002, 32028, 32021, 32010, 32069, 32075, 32046, 32050, 32063, 32053, 32070, 32115, 32086, + 32078, 32114, 32104, 32110, 32079, 32099, 32147, 32137, 32091, 32143, 32125, 32155, 32186, + 32174, 32163, 32181, 32199, 32189, 32171, 32317, 32162, 32175, 32220, 32184, 32159, 32176, + 32216, 32221, 32228, 32222, 32251, 32242, 32225, 32261, 32266, 32291, 32289, 32274, 32305, + 32287, 32265, 32267, 32290, 32326, 32358, 32315, 32309, 32313, 32323, 32311, 32306, 32314, + 32359, 32349, 32342, 32350, 32345, 32346, 32377, 32362, 32361, 32380, 32379, 32387, 32213, + 32381, 36782, 32383, 32392, 32393, 32396, 32402, 32400, 32403, 32404, 32406, 32398, 32411, + 32412, 32568, 32570, 32581, 32588, 32589, 32590, 32592, 32593, 32597, 32596, 32600, 32607, + 32608, 32616, 32617, 32615, 32632, 32642, 32646, 32643, 32648, 32647, 32652, 32660, 32670, + 32669, 32666, 32675, 32687, 32690, 32697, 32686, 32694, 32696, 35697, 32709, 32710, 32714, + 32725, 32724, 32737, 32742, 32745, 32755, 32761, 39132, 32774, 32772, 32779, 32786, 32792, + 32793, 32796, 32801, 32808, 32831, 32827, 32842, 32838, 32850, 32856, 32858, 32863, 32866, + 32872, 32883, 32882, 32880, 32886, 32889, 32893, 32895, 32900, 32902, 32901, 32923, 32915, + 32922, 32941, 20880, 32940, 32987, 32997, 32985, 32989, 32964, 32986, 32982, 33033, 33007, + 33009, 33051, 33065, 33059, 33071, 33099, 38539, 33094, 33086, 33107, 33105, 33020, 33137, + 33134, 33125, 33126, 33140, 33155, 33160, 33162, 33152, 33154, 33184, 33173, 33188, 33187, + 33119, 33171, 33193, 33200, 33205, 33214, 33208, 33213, 33216, 33218, 33210, 33225, 33229, + 33233, 33241, 33240, 33224, 33242, 33247, 33248, 33255, 33274, 33275, 33278, 33281, 33282, + 33285, 33287, 33290, 33293, 33296, 33302, 33321, 33323, 33336, 33331, 33344, 33369, 33368, + 33373, 33370, 33375, 33380, 33378, 33384, 33386, 33387, 33326, 33393, 33399, 33400, 33406, + 33421, 33426, 33451, 33439, 33467, 33452, 33505, 33507, 33503, 33490, 33524, 33523, 33530, + 33683, 33539, 33531, 33529, 33502, 33542, 33500, 33545, 33497, 33589, 33588, 33558, 33586, + 33585, 33600, 33593, 33616, 33605, 33583, 33579, 33559, 33560, 33669, 33690, 33706, 33695, + 33698, 33686, 33571, 33678, 33671, 33674, 33660, 33717, 33651, 33653, 33696, 33673, 33704, + 33780, 33811, 33771, 33742, 33789, 33795, 33752, 33803, 33729, 33783, 33799, 33760, 33778, + 33805, 33826, 33824, 33725, 33848, 34054, 33787, 33901, 33834, 33852, 34138, 33924, 33911, + 33899, 33965, 33902, 33922, 33897, 33862, 33836, 33903, 33913, 33845, 33994, 33890, 33977, + 33983, 33951, 34009, 33997, 33979, 34010, 34000, 33985, 33990, 34006, 33953, 34081, 34047, + 34036, 34071, 34072, 34092, 34079, 34069, 34068, 34044, 34112, 34147, 34136, 34120, 34113, + 34306, 34123, 34133, 34176, 34212, 34184, 34193, 34186, 34216, 34157, 34196, 34203, 34282, + 34183, 34204, 34167, 34174, 34192, 34249, 34234, 34255, 34233, 34256, 34261, 34269, 34277, + 34268, 34297, 34314, 34323, 34315, 34302, 34298, 34310, 34338, 34330, 34352, 34367, 34381, + 20053, 34388, 34399, 34407, 34417, 34451, 34467, 34473, 34474, 34443, 34444, 34486, 34479, + 34500, 34502, 34480, 34505, 34851, 34475, 34516, 34526, 34537, 34540, 34527, 34523, 34543, + 34578, 34566, 34568, 34560, 34563, 34555, 34577, 34569, 34573, 34553, 34570, 34612, 34623, + 34615, 34619, 34597, 34601, 34586, 34656, 34655, 34680, 34636, 34638, 34676, 34647, 34664, + 34670, 34649, 34643, 34659, 34666, 34821, 34722, 34719, 34690, 34735, 34763, 34749, 34752, + 34768, 38614, 34731, 34756, 34739, 34759, 34758, 34747, 34799, 34802, 34784, 34831, 34829, + 34814, 34806, 34807, 34830, 34770, 34833, 34838, 34837, 34850, 34849, 34865, 34870, 34873, + 34855, 34875, 34884, 34882, 34898, 34905, 34910, 34914, 34923, 34945, 34942, 34974, 34933, + 34941, 34997, 34930, 34946, 34967, 34962, 34990, 34969, 34978, 34957, 34980, 34992, 35007, + 34993, 35011, 35012, 35028, 35032, 35033, 35037, 35065, 35074, 35068, 35060, 35048, 35058, + 35076, 35084, 35082, 35091, 35139, 35102, 35109, 35114, 35115, 35137, 35140, 35131, 35126, + 35128, 35148, 35101, 35168, 35166, 35174, 35172, 35181, 35178, 35183, 35188, 35191, 35198, + 35203, 35208, 35210, 35219, 35224, 35233, 35241, 35238, 35244, 35247, 35250, 35258, 35261, + 35263, 35264, 35290, 35292, 35293, 35303, 35316, 35320, 35331, 35350, 35344, 35340, 35355, + 35357, 35365, 35382, 35393, 35419, 35410, 35398, 35400, 35452, 35437, 35436, 35426, 35461, + 35458, 35460, 35496, 35489, 35473, 35493, 35494, 35482, 35491, 35524, 35533, 35522, 35546, + 35563, 35571, 35559, 35556, 35569, 35604, 35552, 35554, 35575, 35550, 35547, 35596, 35591, + 35610, 35553, 35606, 35600, 35607, 35616, 35635, 38827, 35622, 35627, 35646, 35624, 35649, + 35660, 35663, 35662, 35657, 35670, 35675, 35674, 35691, 35679, 35692, 35695, 35700, 35709, + 35712, 35724, 35726, 35730, 35731, 35734, 35737, 35738, 35898, 35905, 35903, 35912, 35916, + 35918, 35920, 35925, 35938, 35948, 35960, 35962, 35970, 35977, 35973, 35978, 35981, 35982, + 35988, 35964, 35992, 25117, 36013, 36010, 36029, 36018, 36019, 36014, 36022, 36040, 36033, + 36068, 36067, 36058, 36093, 36090, 36091, 36100, 36101, 36106, 36103, 36111, 36109, 36112, + 40782, 36115, 36045, 36116, 36118, 36199, 36205, 36209, 36211, 36225, 36249, 36290, 36286, + 36282, 36303, 36314, 36310, 36300, 36315, 36299, 36330, 36331, 36319, 36323, 36348, 36360, + 36361, 36351, 36381, 36382, 36368, 36383, 36418, 36405, 36400, 36404, 36426, 36423, 36425, + 36428, 36432, 36424, 36441, 36452, 36448, 36394, 36451, 36437, 36470, 36466, 36476, 36481, + 36487, 36485, 36484, 36491, 36490, 36499, 36497, 36500, 36505, 36522, 36513, 36524, 36528, + 36550, 36529, 36542, 36549, 36552, 36555, 36571, 36579, 36604, 36603, 36587, 36606, 36618, + 36613, 36629, 36626, 36633, 36627, 36636, 36639, 36635, 36620, 36646, 36659, 36667, 36665, + 36677, 36674, 36670, 36684, 36681, 36678, 36686, 36695, 36700, 36706, 36707, 36708, 36764, + 36767, 36771, 36781, 36783, 36791, 36826, 36837, 36834, 36842, 36847, 36999, 36852, 36869, + 36857, 36858, 36881, 36885, 36897, 36877, 36894, 36886, 36875, 36903, 36918, 36917, 36921, + 36856, 36943, 36944, 36945, 36946, 36878, 36937, 36926, 36950, 36952, 36958, 36968, 36975, + 36982, 38568, 36978, 36994, 36989, 36993, 36992, 37002, 37001, 37007, 37032, 37039, 37041, + 37045, 37090, 37092, 25160, 37083, 37122, 37138, 37145, 37170, 37168, 37194, 37206, 37208, + 37219, 37221, 37225, 37235, 37234, 37259, 37257, 37250, 37282, 37291, 37295, 37290, 37301, + 37300, 37306, 37312, 37313, 37321, 37323, 37328, 37334, 37343, 37345, 37339, 37372, 37365, + 37366, 37406, 37375, 37396, 37420, 37397, 37393, 37470, 37463, 37445, 37449, 37476, 37448, + 37525, 37439, 37451, 37456, 37532, 37526, 37523, 37531, 37466, 37583, 37561, 37559, 37609, + 37647, 37626, 37700, 37678, 37657, 37666, 37658, 37667, 37690, 37685, 37691, 37724, 37728, + 37756, 37742, 37718, 37808, 37804, 37805, 37780, 37817, 37846, 37847, 37864, 37861, 37848, + 37827, 37853, 37840, 37832, 37860, 37914, 37908, 37907, 37891, 37895, 37904, 37942, 37931, + 37941, 37921, 37946, 37953, 37970, 37956, 37979, 37984, 37986, 37982, 37994, 37417, 38000, + 38005, 38007, 38013, 37978, 38012, 38014, 38017, 38015, 38274, 38279, 38282, 38292, 38294, + 38296, 38297, 38304, 38312, 38311, 38317, 38332, 38331, 38329, 38334, 38346, 28662, 38339, + 38349, 38348, 38357, 38356, 38358, 38364, 38369, 38373, 38370, 38433, 38440, 38446, 38447, + 38466, 38476, 38479, 38475, 38519, 38492, 38494, 38493, 38495, 38502, 38514, 38508, 38541, + 38552, 38549, 38551, 38570, 38567, 38577, 38578, 38576, 38580, 38582, 38584, 38585, 38606, + 38603, 38601, 38605, 35149, 38620, 38669, 38613, 38649, 38660, 38662, 38664, 38675, 38670, + 38673, 38671, 38678, 38681, 38692, 38698, 38704, 38713, 38717, 38718, 38724, 38726, 38728, + 38722, 38729, 38748, 38752, 38756, 38758, 38760, 21202, 38763, 38769, 38777, 38789, 38780, + 38785, 38778, 38790, 38795, 38799, 38800, 38812, 38824, 38822, 38819, 38835, 38836, 38851, + 38854, 38856, 38859, 38876, 38893, 40783, 38898, 31455, 38902, 38901, 38927, 38924, 38968, + 38948, 38945, 38967, 38973, 38982, 38991, 38987, 39019, 39023, 39024, 39025, 39028, 39027, + 39082, 39087, 39089, 39094, 39108, 39107, 39110, 39145, 39147, 39171, 39177, 39186, 39188, + 39192, 39201, 39197, 39198, 39204, 39200, 39212, 39214, 39229, 39230, 39234, 39241, 39237, + 39248, 39243, 39249, 39250, 39244, 39253, 39319, 39320, 39333, 39341, 39342, 39356, 39391, + 39387, 39389, 39384, 39377, 39405, 39406, 39409, 39410, 39419, 39416, 39425, 39439, 39429, + 39394, 39449, 39467, 39479, 39493, 39490, 39488, 39491, 39486, 39509, 39501, 39515, 39511, + 39519, 39522, 39525, 39524, 39529, 39531, 39530, 39597, 39600, 39612, 39616, 39631, 39633, + 39635, 39636, 39646, 39647, 39650, 39651, 39654, 39663, 39659, 39662, 39668, 39665, 39671, + 39675, 39686, 39704, 39706, 39711, 39714, 39715, 39717, 39719, 39720, 39721, 39722, 39726, + 39727, 39730, 39748, 39747, 39759, 39757, 39758, 39761, 39768, 39796, 39827, 39811, 39825, + 39830, 39831, 39839, 39840, 39848, 39860, 39872, 39882, 39865, 39878, 39887, 39889, 39890, + 39907, 39906, 39908, 39892, 39905, 39994, 39922, 39921, 39920, 39957, 39956, 39945, 39955, + 39948, 39942, 39944, 39954, 39946, 39940, 39982, 39963, 39973, 39972, 39969, 39984, 40007, + 39986, 40006, 39998, 40026, 40032, 40039, 40054, 40056, 40167, 40172, 40176, 40201, 40200, + 40171, 40195, 40198, 40234, 40230, 40367, 40227, 40223, 40260, 40213, 40210, 40257, 40255, + 40254, 40262, 40264, 40285, 40286, 40292, 40273, 40272, 40281, 40306, 40329, 40327, 40363, + 40303, 40314, 40346, 40356, 40361, 40370, 40388, 40385, 40379, 40376, 40378, 40390, 40399, + 40386, 40409, 40403, 40440, 40422, 40429, 40431, 40445, 40474, 40475, 40478, 40565, 40569, + 40573, 40577, 40584, 40587, 40588, 40594, 40597, 40593, 40605, 40613, 40617, 40632, 40618, + 40621, 38753, 40652, 40654, 40655, 40656, 40660, 40668, 40670, 40669, 40672, 40677, 40680, + 40687, 40692, 40694, 40695, 40697, 40699, 40700, 40701, 40711, 40712, 30391, 40725, 40737, + 40748, 40766, 40778, 40786, 40788, 40803, 40799, 40800, 40801, 40806, 40807, 40812, 40810, + 40823, 40818, 40822, 40853, 40860, 40864, 22575, 27079, 36953, 29796, 9794, 9472, 9473, 9474, + 9475, 9476, 9477, 9478, 9479, 9480, 9481, 9482, 9483, 9484, 9485, 9486, 9487, 9488, 9489, 9490, + 9491, 9492, 9493, 9494, 9495, 9496, 9497, 9498, 9499, 9500, 9501, 9502, 9503, 9504, 9505, 9506, + 9507, 9508, 9509, 9510, 9511, 9512, 9513, 9514, 9515, 9516, 9517, 9518, 9519, 9520, 9521, 9522, + 9523, 9524, 9525, 9526, 9527, 9528, 9529, 9530, 9531, 9532, 9533, 9534, 9535, 9536, 9537, 9538, + 9539, 9540, 9541, 9542, 9543, 9544, 9545, 9546, 9547, 9312, 9313, 9314, 9315, 9316, 9317, 9318, + 9319, 9320, 9321, 9322, 9323, 9324, 9325, 9326, 9327, 9328, 9329, 9330, 9331, 8544, 8545, 8546, + 8547, 8548, 8549, 8550, 8551, 8552, 8553, 13129, 13076, 13090, 13133, 13080, 13095, 13059, + 13110, 13137, 13143, 13069, 13094, 13091, 13099, 13130, 13115, 13212, 13213, 13214, 13198, + 13199, 13252, 13217, 12317, 12319, 8470, 13261, 8481, 12964, 12965, 12966, 12967, 12968, 12849, + 12850, 12857, 13182, 13181, 13180, 8750, 8721, 8730, 8869, 8736, 8735, 8895, 8745, 8746, 21854, + 39156, 28322, 39983, 28139, 36802, 27421, 21417, 0, 22082, 39180, 28976, 35158, 40407, 36838, + 24674, 25296, 26214, 21917, 33883, 38788, 22169, 15694, 32752, 32747, 24509, 31047, 20448, + 21375, 20677, 36544, 21936, 27355, 23633, 38772, 31041, 24935, 0, 32363, 33606, 0, 20518, + 23244, 25458, 40572, 35578, 24055, 26171, 28317, 40628, 40288, 29969, 37319, 27018, 26629, + 34217, 39894, 37638, 29642, 21489, 23650, 36974, 26451, 28796, 32353, 37195, 26329, 28186, + 34223, 34295, 21736, 24288, 26786, 34083, 37292, 38808, 34645, 38769, 36887, 32736, 25722, + 36893, 34796, 25776, 26643, 29006, 29053, 35438, 22092, 36961, 21109, 25620, 30246, 36956, + 39506, 33151, 40667, 21828, 28655, 29730, 34552, 0, 36799, 26842, 40008, 27197, 31774, 35387, + 28710, 20939, 25431, 27084, 37786, 22618, 25681, 37165, 25826, 28346, 22625, 39002, 22581, + 23648, 33759, 36077, 22616, 31153, 40199, 28678, 28702, 22136, 36929, 38931, 37027, 35598, + 28760, 26978, 31152, 22218, 29260, 36889, 31204, 21085, 31672, 28497, 37297, 25405, 25161, + 27147, 26570, 31255, 36924, 23195, 35628, 24287, 28693, 38971, 34109, 30629, 23081, 24214, + 27873, 34028, 38960, 40018, 40629, 20786, 39173, 31870, 37971, 24840, 30290, 29495, 29076, + 32768, 33802, 63939, 28451, 29001, 63897, 27028, 34847, 0, 20873, 0, 20900, 21817, 21811, + 21988, 22066, 22181, 22539, 23230, 0, 23643, 24164, 24727, 25449, 25606, 25890, 25987, 26534, + 26618, 26779, 26766, 28270, 0, 0, 29646, 29956, 29965, 29973, 30355, 30844, 31281, 40861, + 31641, 31888, 31918, 32155, 32174, 32159, 32724, 33326, 33421, 33490, 33571, 33653, 34071, + 34110, 34690, 34770, 35082, 35247, 35550, 35649, 36314, 36361, 36627, 36842, 36841, 36952, + 25160, 37313, 38331, 30562, 38692, 38752, 38765, 38948, 39726, 39831, 39922, 40618, 40860, + 12289, 12290, 8254, 65343, 12540, 8213, 8208, 12316, 8214, 65372, 8230, 8229, 65288, 65289, + 12308, 12309, 65339, 65341, 65371, 65373, 12296, 12297, 12298, 12299, 12300, 12301, 12302, + 12303, 12304, 12305, 65309, 12353, 12355, 12357, 12359, 12361, 12387, 12419, 12421, 12423, + 12430, 12449, 12451, 12453, 12455, 12457, 12483, 12515, 12517, 12519, 12526, 12533, 12534, + 13129, 13076, 13090, 13133, 13080, 13095, 13059, 13110, 13137, 13143, 13069, 13094, 13091, + 13099, 13130, 13115, 12317, 12318, 12436, 12437, 12438, 33446, 33576, 22099, 21417, 29273, + 27762, 31496, 39255, 25331, 39184, 38765, 29053, 31359, 31661, 25539, 33759, 31074, 21467, + 31687, 36804, 31806, 20682, 21269, 21929, 22190, 22553, 22811, 23592, 24272, 24271, 25153, + 26305, 27656, 28195, 28396, 31383, 31709, 32745, 33826, 34649, 34830, 34770, 39449, 40621, + 65508, 65287, 65282, 4520, 9665, 9655, 8681, 8679, 8678, 8680, 9634, 9831, 9825, 9828, 9826, + 13216, 13218, 13220, 13221, 13207, 8467, 13208, 13235, 13234, 13233, 13232, 13189, 13190, + 13191, 13259, 13200, 13268, 13206, 13090, 13078, 13080, 13077, 13059, 13091, 13143, 13122, + 13113, 13115, 13056, 13105, 13127, 13086, 13098, 13261, 13183, 8481, 9742, 12342, 12320, 169, + 174, 0, 9352, 9353, 9354, 9355, 9356, 9357, 9358, 9359, 9360, 9332, 9333, 9334, 9335, 9336, + 9337, 9338, 9339, 9340, 9341, 9342, 9343, 9344, 9345, 9346, 9347, 9348, 9349, 9350, 9351, + 12881, 8560, 8561, 8562, 8563, 8564, 8565, 8566, 8567, 8568, 8569, 12882, 12883, 12884, 12885, + 12886, 12887, 12888, 12889, 12890, 12891, 9372, 9373, 9374, 9375, 9376, 9377, 9378, 9379, 9380, + 9381, 9382, 9383, 9384, 9385, 9386, 9387, 9388, 9389, 9390, 9391, 9392, 9393, 9394, 9395, 9396, + 9397, 12867, 12861, 12863, 12852, 12856, 12851, 12860, 12866, 12862, 12854, 12853, 12859, + 12864, 12858, 12976, 12973, 12969, 12975, 12948, 12970, 12952, 12971, 12946, 12945, 12947, + 12972, 12974, 12950, 9129, 9128, 9127, 65080, 9133, 9132, 9131, 65080, 9131, 9132, 9133, 65080, + 9127, 9128, 9129, 65080, 13260, 13061, 189, 188, 13215, 13219, 13222, 0, 0, 12958, 13192, + 13193, 13256, 8749, 21360, 12848, 12842, 12843, 12844, 12845, 12846, 12847, 12855, 12865, + 10145, 11013, 11014, 11015, 9673, 9824, 9829, 9827, 9830, 9728, 9729, 9730, 9731, 9758, 9756, + 9757, 9759, 12953, 9450, 8554, 8555, 65296, 65296, 12288, 9601, 9602, 9603, 9604, 9605, 9606, + 9607, 9608, 9615, 9614, 9613, 9612, 9611, 9610, 9609, 9620, 9621, 9581, 9582, 9584, 9583, 9552, + 9566, 9578, 9569, 9698, 9699, 9701, 9700, 9679, 3792, 9585, 9586, 9587, 12437, 12438, 36898, + 36795, 65292, 176, 12307, 12444, 12443, 8242, 65294, 8216, 8217, 8220, 8221, 8220, 8222, 8216, + 8218, 8243, 20956, 29081, 10102, 10103, 10104, 10105, 10106, 10107, 10108, 10109, 10110, 0, 0, + 0, 8570, 8571, 0, 0, 0, 8575, 8458, 8457, 0, 8507, 12292, 8646, 8644, 8645, 8693, 12535, 12536, + 12537, 12538, 22823, 23567, 12957, 25511, 0, 0, 13179, 13183, 0, 0, 13107, 13134, 13090, 13078, + 13061, 13061, 13061, 13107, 13134, 13134, 13134, 13059, 13080, 13077, 13113, 13113, 13113, + 13143, 13122, 13122, 13122, 13091, 13115, 13056, 13086, 13086, 13086, 13098, 13098, 13098, + 13127, 13105, 32394, 35100, 37704, 37512, 34012, 20425, 28859, 26161, 26824, 37625, 26363, + 24389, 20008, 20193, 20220, 20224, 20227, 20281, 20310, 20370, 20362, 20378, 20372, 20429, + 20544, 20514, 20479, 20510, 20550, 20592, 20546, 20628, 20724, 20696, 20810, 20836, 20893, + 20926, 20972, 21013, 21148, 21158, 21184, 21211, 21248, 21255, 21284, 21362, 21395, 21426, + 21469, 64014, 21660, 21642, 21673, 21759, 21894, 22361, 22373, 22444, 22472, 22471, 64015, + 22618, 22686, 22706, 22795, 22867, 22875, 22877, 22883, 22948, 22970, 23382, 23488, 29999, + 23512, 23515, 23582, 23718, 23738, 23797, 23847, 23891, 64017, 23874, 23917, 23992, 23993, + 24016, 24353, 24372, 24423, 24503, 24542, 24669, 24709, 24714, 24798, 24789, 24864, 24818, + 24849, 24887, 24880, 24984, 25107, 25254, 25589, 25696, 25757, 25806, 25934, 26112, 26133, + 26121, 26158, 26142, 26148, 26213, 26199, 26201, 26228, 26227, 26265, 26272, 26290, 26303, + 26362, 26382, 26391, 26470, 26555, 26706, 26560, 26625, 26692, 26831, 64019, 26984, 64020, + 27032, 27106, 27184, 27243, 27206, 27251, 27262, 27362, 27364, 27606, 27711, 27740, 27782, + 27759, 27866, 27908, 28039, 28015, 28054, 28076, 28111, 28152, 28146, 28156, 28217, 28252, + 28199, 28220, 28351, 28552, 28597, 28661, 28677, 28679, 28712, 28805, 28843, 28943, 28932, + 29020, 28998, 28999, 20958, 29121, 29182, 29361, 29374, 29476, 29482, 29559, 29629, 29641, + 29654, 29667, 29650, 29703, 29685, 29734, 29738, 29737, 29742, 29794, 29833, 29855, 29953, + 30063, 30338, 30364, 30366, 30363, 30374, 30410, 30534, 21167, 30753, 30798, 30820, 30842, + 31024, 31036, 31070, 31077, 31124, 31119, 31131, 31441, 31463, 38742, 31467, 31646, 31934, + 32072, 32092, 32183, 32160, 32214, 32338, 32583, 32673, 32701, 33537, 33634, 33663, 33735, + 33782, 33864, 33972, 34131, 34137, 34155, 64031, 34224, 34322, 64033, 34823, 35061, 35346, + 35383, 35449, 35495, 35518, 35551, 35576, 35574, 35667, 35711, 36080, 36084, 36114, 36214, + 64035, 36559, 64036, 36920, 36967, 37086, 37117, 37141, 37159, 37338, 37335, 37342, 37357, + 37358, 37348, 37349, 37382, 37392, 37386, 37434, 37440, 37436, 37454, 37465, 37457, 37433, + 37479, 37543, 37495, 37496, 37607, 37591, 37593, 37584, 64039, 37589, 37600, 37587, 37669, + 37665, 37627, 64040, 37662, 37631, 37661, 37634, 37744, 37719, 37796, 37830, 37854, 37880, + 37937, 37957, 37960, 38290, 38534, 64041, 38557, 38575, 38707, 38715, 38723, 38733, 38735, + 38737, 38741, 38999, 39013, 39151, 39164, 39207, 39208, 39326, 39502, 39641, 39644, 39797, + 39794, 39823, 39857, 39867, 39936, 40304, 40299, 40372, 40473, 40657, 172, 92, 32, 33, 34, 35, + 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, + 84, 85, 86, 87, 88, 89, 90, 91, 165, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 166, + 125, 771, 8217, 92, 8216, 124, 126, 161, 162, 163, 8260, 402, 167, 164, 8220, 171, 8249, 8250, + 64257, 64258, 8211, 8224, 8225, 183, 182, 8226, 8218, 8222, 8221, 187, 8230, 8240, 191, 769, + 770, 175, 774, 775, 776, 778, 184, 779, 808, 780, 8212, 198, 170, 321, 216, 338, 186, 230, 305, + 322, 248, 339, 223, 8722, 169, 172, 174, 176, 177, 178, 179, 181, 185, 188, 189, 190, 192, 193, + 194, 195, 196, 197, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, + 214, 215, 217, 218, 219, 220, 221, 222, 224, 225, 226, 227, 228, 229, 231, 232, 233, 234, 235, + 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 249, 250, 251, 252, 253, 254, 255, + 352, 376, 381, 773, 353, 8482, 382, 48, 8194, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, + 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, + 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 165, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 65512, 125, 8254, 65344, 8242, 168, + 8246, 196, 249, 233, 237, 223, 231, 199, 209, 241, 162, 163, 243, 250, 161, 191, 189, 214, 220, + 228, 235, 239, 246, 220, 226, 234, 238, 244, 252, 224, 233, 225, 126, 48, 172, 92, 65376, + 65377, 65378, 65379, 65380, 65381, 65382, 65383, 65384, 65385, 65386, 65387, 65388, 65389, + 65390, 65391, 65392, 65393, 65394, 65395, 65396, 65397, 65398, 65399, 65400, 65401, 65402, + 65403, 65404, 65405, 65406, 65407, 65408, 65409, 65410, 65411, 65412, 65413, 65414, 65415, + 65416, 65417, 65418, 65419, 65420, 65421, 65422, 65423, 65424, 65425, 65426, 65427, 65428, + 65429, 65430, 65431, 65432, 65433, 65434, 65435, 65436, 65437, 65438, 65439, 12528, 12529, + 12526, 12533, 12534, 12532, 12460, 12462, 12464, 12466, 12468, 12470, 12472, 12474, 12476, + 12478, 12480, 12482, 12485, 12487, 12489, 12496, 12497, 12499, 12500, 12502, 12503, 12505, + 12506, 12508, 12509, 65376, 12434, 12353, 12355, 12357, 12359, 12361, 12419, 12421, 12423, + 12387, 12354, 12356, 12358, 12360, 12362, 12363, 12365, 12367, 12369, 12371, 12373, 12375, + 12377, 12379, 12381, 12383, 12385, 12388, 12390, 12392, 12394, 12395, 12396, 12397, 12398, + 12399, 12402, 12405, 12408, 12411, 12414, 12415, 12416, 12417, 12418, 12420, 12422, 12424, + 12425, 12426, 12427, 12428, 12429, 12431, 12435, 12432, 12433, 12430, 12364, 12366, 12368, + 12370, 12372, 12374, 12376, 12378, 12380, 12382, 12384, 12386, 12389, 12391, 12393, 12400, + 12401, 12403, 12404, 12406, 12407, 12409, 12410, 12412, 12413, 12317, 12318, 91, 93, 12296, + 12297, 12298, 12299, 12302, 12303, 12304, 12305, 8210, 65376, 9472, 9473, 9474, 9475, 9476, + 9477, 9478, 9479, 9480, 9481, 9482, 9483, 9484, 9485, 9486, 9487, 9488, 9489, 9490, 9491, 9492, + 9493, 9494, 9495, 9496, 9497, 9498, 9499, 9500, 9501, 9502, 9503, 9504, 9505, 9506, 9507, 9508, + 9509, 9510, 9511, 9512, 9513, 9514, 9515, 9516, 9517, 9518, 9519, 9520, 9521, 9522, 9523, 9524, + 9525, 9526, 9527, 9528, 9529, 9530, 9531, 9532, 9533, 9534, 9535, 9536, 9537, 9538, 9539, 9540, + 9541, 9542, 9543, 9544, 9545, 9546, 9547, 9650, 8364, 8486, 8242, 8243, 64256, 64259, 64260, + 257, 299, 363, 275, 333, 256, 298, 362, 274, 332, 8539, 8540, 8541, 8542, 8531, 8532, 8304, + 8308, 8309, 8310, 8311, 8312, 8313, 8320, 8321, 8322, 8323, 8324, 8325, 8326, 8327, 8328, 8329, + 461, 282, 0, 7868, 463, 0, 296, 465, 0, 467, 366, 360, 462, 283, 0, 7869, 464, 0, 297, 466, 0, + 468, 367, 361, 593, 8049, 8048, 509, 230, 596, 596, 596, 601, 601, 601, 602, 602, 602, 603, + 8051, 8050, 567, 331, 629, 652, 652, 652, 658, 643, 720, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, + 89, 90, 91, 165, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, + 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 166, 125, 771, 8217, 92, + 8216, 124, 126, 161, 162, 163, 8260, 402, 167, 164, 8220, 171, 8249, 8250, 64257, 64258, 8211, + 8224, 8225, 183, 182, 8226, 8218, 8222, 8221, 187, 8230, 8240, 191, 769, 770, 175, 774, 775, + 776, 778, 184, 779, 808, 780, 8212, 198, 170, 321, 216, 338, 186, 230, 305, 322, 248, 339, 223, + 8722, 169, 172, 174, 176, 177, 178, 179, 181, 185, 188, 189, 190, 192, 193, 194, 195, 196, 197, + 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 217, 218, + 219, 220, 221, 222, 224, 225, 226, 227, 228, 229, 231, 232, 233, 234, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 246, 247, 249, 250, 251, 252, 253, 254, 255, 352, 376, 381, 773, + 353, 8482, 382, 48, 8364, 8486, 8242, 8243, 64256, 64259, 64260, 257, 299, 363, 275, 333, 256, + 298, 362, 274, 332, 8539, 8540, 8541, 8542, 8531, 8532, 8304, 8308, 8309, 8310, 8311, 8312, + 8313, 8320, 8321, 8322, 8323, 8324, 8325, 8326, 8327, 8328, 8329, 461, 282, 0, 7868, 463, 0, + 296, 465, 0, 467, 366, 360, 462, 283, 0, 7869, 464, 0, 297, 466, 0, 468, 367, 361, 48, 49, 50, + 51, 52, 53, 54, 55, 56, 57, 8212, 45, 61, 44, 40, 41, 46, 47, 58, 59, 48, 49, 50, 51, 52, 53, + 54, 55, 56, 57, 8212, 45, 61, 44, 40, 41, 46, 47, 58, 59, 183, 8364, 8585, 8531, 8532, 190, + 8533, 8534, 8535, 8536, 8537, 8538, 8528, 0, 0, 0, 0, 0, 8539, 8540, 8541, 8542, 8529, 0, 0, 0, + 0, 0, 8530, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 48, 8547, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8560, 8561, 8562, 8563, 8564, 8565, 8566, 8567, + 8568, 8569, 8570, 8571, 0, 0, 0, 8544, 8545, 8546, 8547, 8548, 8549, 8550, 8551, 8552, 8553, + 8554, 8555, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 12354, 12356, 12358, 12360, 12362, 12363, 12365, 12367, 12369, 12371, 12373, 12375, 12377, + 12379, 12381, 12383, 12385, 12388, 12390, 12392, 12394, 12395, 12396, 12397, 12398, 12399, + 12402, 12405, 12408, 12411, 12414, 12415, 12416, 12417, 12418, 12420, 12422, 12424, 12425, + 12426, 12427, 12428, 12429, 12431, 12432, 12433, 12434, 12435, 12450, 12452, 12454, 12456, + 12458, 12459, 12461, 12463, 12465, 12467, 12469, 12471, 12473, 12475, 12477, 12479, 12481, + 12484, 12486, 12488, 12490, 12491, 12492, 12493, 12494, 12495, 12498, 12501, 12504, 12507, + 12510, 12511, 12512, 12513, 12514, 12516, 12518, 12520, 12521, 12522, 12523, 12524, 12525, + 12527, 12528, 12529, 12530, 12531, 12832, 12833, 12834, 12835, 12836, 12837, 12838, 12839, + 12840, 12841, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21942, 21512, 27883, 21839, 31572, 20363, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 12388, 25165, 12295, + 19968, 20108, 19977, 22235, 20116, 20845, 19971, 20843, 20061, 21313, 12295, 19968, 20108, + 19977, 22235, 20116, 20845, 19971, 20843, 20061, 21313, 12295, 19968, 20108, 19977, 22235, + 20116, 20845, 19971, 20843, 20061, 12388, 25165, 19968, 20108, 19977, 22235, 20116, 20845, + 19971, 20843, 20061, 21313, 12295, 19968, 20108, 19977, 22235, 20116, 20845, 19971, 20843, + 20061, 21313, 12467, 12388, 12484, 25165, 0, 0, 9312, 9313, 9314, 9315, 9316, 9317, 9318, 9319, + 9320, 12892, 12893, 12894, 12895, 12977, 12978, 12979, 12980, 12981, 12982, 12983, 12984, + 12985, 12986, 12987, 12988, 12989, 12990, 12991, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 9424, 9425, 9426, 9427, 9428, 9429, 9430, 9431, 9432, 9433, 9434, 9435, 9436, 9437, + 9438, 9439, 9440, 9441, 9442, 9443, 9444, 9445, 9446, 9447, 9448, 9449, 9398, 9399, 9400, 9401, + 9402, 9403, 9404, 9405, 9406, 9407, 9408, 9409, 9410, 9411, 9412, 9413, 9414, 9415, 9416, 9417, + 9418, 9419, 9420, 9421, 9422, 9423, 12354, 12356, 12358, 12360, 12362, 12363, 12365, 12367, + 12369, 12371, 12373, 12375, 12377, 12379, 12381, 12383, 12385, 12388, 12390, 12392, 12394, + 12395, 12396, 12397, 12398, 12399, 12402, 12405, 12408, 12411, 12414, 12415, 12416, 12417, + 12418, 12420, 12422, 12424, 12425, 12426, 12427, 12428, 12429, 12431, 12432, 12433, 12434, + 12435, 13008, 13009, 13010, 13011, 13012, 13013, 13014, 13015, 13016, 13017, 13018, 13019, + 13020, 13021, 13022, 13023, 13024, 13025, 13026, 13027, 13028, 13029, 13030, 13031, 13032, + 13033, 13034, 13035, 13036, 13037, 13038, 13039, 13040, 13041, 13042, 13043, 13044, 13045, + 13046, 13047, 13048, 13049, 13050, 13051, 13052, 13053, 13054, 12531, 12928, 12929, 12930, + 12931, 12932, 12933, 12934, 12935, 12936, 12937, 12944, 12938, 12939, 12940, 12941, 12942, + 12943, 35519, 12959, 21103, 28187, 27161, 27424, 22522, 31105, 12960, 12961, 12955, 12954, + 12963, 12962, 12951, 20986, 12956, 12949, 28168, 22679, 12868, 31572, 20363, 38651, 9676, 9471, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10111, 9451, 9452, 9453, 9454, 9455, 9456, 9457, 9458, 9459, + 9460, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 98, 99, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12354, 12356, 12358, + 12360, 12362, 12363, 12365, 12367, 12369, 12371, 12373, 12375, 12377, 12379, 12381, 12383, + 12385, 12388, 12390, 12392, 12394, 12395, 12396, 12397, 12398, 12399, 12402, 12405, 12408, + 12411, 12414, 12415, 12416, 12417, 12418, 12420, 12422, 12424, 12425, 12426, 12427, 12428, + 12429, 12431, 12432, 12433, 12434, 12435, 12450, 12452, 12454, 12456, 12458, 12459, 12461, + 12463, 12465, 12467, 12469, 12471, 12473, 12475, 12477, 12479, 12481, 12484, 12486, 12488, + 12490, 12491, 12492, 12493, 12494, 12495, 12498, 12501, 12504, 12507, 12510, 12511, 12512, + 12513, 12514, 12516, 12518, 12520, 12521, 12522, 12523, 12524, 12525, 12527, 12528, 12529, + 12530, 12531, 26085, 26376, 28779, 27700, 26408, 37329, 22303, 21839, 31572, 20363, 9679, 48, + 0, 49, 0, 50, 0, 51, 0, 52, 0, 53, 0, 54, 0, 55, 0, 56, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 98, 99, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12354, 12356, 12358, + 12360, 12362, 12363, 12365, 12367, 12369, 12371, 12373, 12375, 12377, 12379, 12381, 12383, + 12385, 12388, 12390, 12392, 12394, 12395, 12396, 12397, 12398, 12399, 12402, 12405, 12408, + 12411, 12414, 12415, 12416, 12417, 12418, 12420, 12422, 12424, 12425, 12426, 12427, 12428, + 12429, 12431, 12432, 12433, 12434, 12435, 12450, 12452, 12454, 12456, 12458, 12459, 12461, + 12463, 12465, 12467, 0, 12471, 12473, 12475, 12477, 12479, 12481, 12484, 12486, 12488, 12490, + 12491, 12492, 12493, 12494, 12495, 12498, 12501, 12504, 12507, 12510, 12511, 12512, 12513, + 12514, 12516, 12518, 12520, 12521, 12522, 12523, 12524, 12525, 12527, 12528, 12529, 12530, + 12531, 26085, 0, 28779, 27700, 26408, 37329, 22303, 36000, 21213, 21839, 31572, 20363, 8414, + 11034, 48, 0, 49, 0, 50, 0, 51, 0, 52, 0, 53, 0, 54, 0, 55, 0, 56, 0, 57, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 98, 99, 100, 101, 102, 103, + 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, + 89, 90, 12354, 12356, 12358, 12360, 12362, 12363, 12365, 12367, 12369, 12371, 12373, 12375, + 12377, 12379, 12381, 12383, 12385, 12388, 12390, 12392, 12394, 12395, 12396, 12397, 12398, + 12399, 12402, 12405, 12408, 12411, 12414, 12415, 12416, 12417, 12418, 12420, 12422, 12424, + 12425, 12426, 12427, 12428, 12429, 12431, 12432, 12433, 12434, 12435, 12450, 12452, 12454, + 12456, 12458, 12459, 12461, 12463, 12465, 12467, 12469, 12471, 12473, 12475, 12477, 12479, + 12481, 12484, 12486, 12488, 12490, 12491, 12492, 12493, 12494, 12495, 12498, 12501, 12504, + 12507, 12510, 12511, 12512, 12513, 12514, 12516, 12518, 12520, 12521, 12522, 12523, 12524, + 12525, 12527, 12528, 12529, 12530, 12531, 26085, 26376, 28779, 27700, 26408, 37329, 22303, + 21839, 31572, 20363, 9632, 48, 0, 49, 0, 50, 0, 51, 0, 52, 0, 53, 0, 54, 0, 55, 0, 56, 0, 57, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 98, 99, + 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, + 119, 120, 121, 122, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, + 84, 85, 86, 87, 88, 89, 90, 12354, 12356, 12358, 12360, 12362, 12363, 12365, 12367, 12369, + 12371, 12373, 12375, 12377, 12379, 12381, 12383, 12385, 12388, 12390, 12392, 12394, 12395, + 12396, 12397, 12398, 12399, 12402, 12405, 12408, 12411, 12414, 12415, 12416, 12417, 12418, + 12420, 12422, 12424, 12425, 12426, 12427, 12428, 12429, 12431, 12432, 12433, 12434, 12435, + 12450, 12452, 12454, 12456, 12458, 12459, 12461, 12463, 12465, 12467, 12469, 12471, 12473, + 12475, 12477, 12479, 12481, 12484, 12486, 12488, 12490, 12491, 12492, 12493, 12494, 12495, + 12498, 12501, 12504, 12507, 12510, 12511, 12512, 12513, 12514, 12516, 12518, 12520, 12521, + 12522, 12523, 12524, 12525, 12527, 12528, 12529, 12530, 12531, 26085, 26376, 28779, 27700, + 26408, 37329, 22303, 21839, 31572, 20363, 48, 0, 49, 0, 50, 0, 51, 0, 52, 0, 53, 0, 54, 0, 55, + 0, 56, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 12354, 12356, 12358, 12360, 12362, 12363, 12365, 12367, 12369, 12371, 12373, + 12375, 12377, 12379, 12381, 12383, 12385, 12388, 12390, 12392, 12394, 12395, 12396, 12397, + 12398, 12399, 12402, 12405, 12408, 12411, 12414, 12415, 12416, 12417, 12418, 12420, 12422, + 12424, 12425, 12426, 12427, 12428, 12429, 12431, 12432, 12433, 12434, 12435, 12450, 12452, + 12454, 12456, 12458, 12459, 12461, 12463, 12465, 12467, 12469, 12471, 12473, 12475, 12477, + 12479, 12481, 12484, 12486, 12488, 12490, 12491, 12492, 12493, 12494, 12495, 12498, 12501, + 12504, 12507, 12510, 12511, 12512, 12513, 12514, 12516, 12518, 12520, 12521, 12522, 12523, + 12524, 12525, 12527, 12528, 12529, 12530, 12531, 26085, 26376, 28779, 27700, 26408, 37329, + 22303, 21839, 31572, 20363, 9632, 13250, 13261, 8470, 0, 13272, 13274, 8481, 8482, 0, 8448, + 13250, 0, 13252, 8453, 13207, 13169, 13208, 8467, 13197, 13211, 13206, 0, 0, 13271, 13272, 0, + 0, 0, 13057, 13058, 13060, 13062, 0, 13064, 0, 13063, 13066, 0, 13065, 0, 13067, 0, 13068, + 13070, 13071, 13072, 13073, 13074, 13075, 0, 13079, 0, 13081, 0, 13082, 13083, 13084, 13085, + 13087, 13088, 13089, 13092, 0, 13093, 0, 0, 13096, 13097, 0, 13101, 0, 0, 13102, 13103, 13104, + 13106, 0, 0, 13108, 13109, 13116, 0, 0, 0, 13111, 0, 13112, 13114, 13117, 13121, 13118, 13119, + 13120, 13123, 13124, 13125, 13126, 13128, 13131, 13132, 13135, 13136, 0, 0, 13138, 13140, 0, 0, + 13139, 13141, 13142, 0, 13057, 13058, 13060, 13062, 0, 13064, 0, 13063, 13066, 0, 13065, 0, + 13067, 0, 13068, 13070, 13071, 13072, 13073, 13074, 13075, 0, 13079, 0, 13081, 0, 13082, 13083, + 13084, 13085, 13087, 13088, 13089, 13092, 0, 13093, 0, 0, 13096, 13097, 0, 13101, 0, 0, 13102, + 13103, 13104, 13106, 0, 0, 13108, 13109, 13116, 0, 0, 0, 13111, 0, 13112, 13114, 13117, 13121, + 13118, 13119, 13120, 13123, 13124, 13125, 13126, 13128, 13131, 13132, 13135, 13136, 0, 0, + 13138, 13140, 0, 0, 13139, 13141, 13142, 13182, 13181, 13180, 13179, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 61, 8451, 9792, 9794, 12307, 12306, 12300, 12301, 12302, 12303, + 12314, 12315, 12312, 12313, 65288, 65289, 12317, 12318, 8216, 8217, 8220, 8221, 39, 34, 0, + 8501, 976, 8714, 8463, 181, 981, 987, 977, 9918, 9832, 9833, 9836, 65306, 169, 169, 174, 174, + 12347, 12347, 12339, 12340, 12341, 8252, 8265, 33, 8252, 8265, 9290, 0, 8723, 8800, 8771, 8818, + 8819, 12300, 12301, 12302, 12303, 12314, 12315, 12312, 12313, 65375, 65376, 12300, 12301, + 12302, 12303, 12314, 12315, 12312, 12313, 65375, 65376, 9115, 9117, 9118, 9120, 9117, 9115, + 9120, 9118, 9121, 9123, 9124, 9126, 9123, 9121, 9126, 9124, 9121, 9123, 9124, 9126, 9123, 9121, + 9126, 9124, 65372, 8213, 12317, 12318, 8216, 8217, 8216, 8217, 9986, 9986, 9986, 9986, 12349, + 12306, 12447, 4054, 8711, 8709, 8864, 8854, 8856, 8853, 8855, 8862, 8853, 9888, 9651, 9664, + 9654, 8678, 8680, 8679, 8681, 8656, 8596, 8600, 8601, 8598, 8599, 8652, 8651, 11138, 11139, + 11104, 11106, 11105, 11107, 11108, 11109, 9476, 9478, 12336, 8967, 12336, 8967, 12336, 8967, + 12336, 8967, 12336, 8967, 10048, 10047, 9633, 9632, 9633, 9931, 9633, 9633, 9723, 9643, 9724, + 9642, 10010, 10010, 9671, 9670, 9671, 9671, 9671, 11046, 8900, 11045, 11049, 9678, 9673, 9898, + 9702, 9899, 8226, 10070, 10070, 10070, 10070, 12296, 12297, 12296, 12297, 12298, 12299, 12298, + 12299, 0, 0, 0, 0, 12445, 12446, 12353, 12354, 12355, 12356, 12357, 12358, 12359, 12360, 12361, + 12362, 12437, 12363, 12364, 12365, 12366, 12367, 12368, 12438, 12369, 12370, 0, 12371, 12372, + 12373, 12374, 12375, 12376, 12377, 12378, 12379, 12380, 12381, 12382, 12383, 12384, 12385, + 12386, 12387, 12388, 12389, 12390, 12391, 12392, 12393, 12394, 12395, 12396, 12397, 12398, + 12399, 12400, 12401, 12402, 12403, 12404, 12405, 12406, 12407, 12408, 12409, 12410, 12411, + 12412, 12413, 12414, 12415, 12416, 12417, 12418, 12419, 12420, 12421, 12422, 12423, 12424, + 12425, 12426, 12427, 12428, 12429, 12430, 12431, 12432, 12433, 12434, 12435, 12436, 12541, + 12542, 12540, 12449, 12450, 12451, 12452, 12453, 12454, 12455, 12456, 12457, 12458, 12533, + 12459, 12460, 12461, 12462, 12463, 12464, 12534, 12465, 12466, 0, 12467, 12468, 12469, 12470, + 12471, 12472, 12473, 12474, 12475, 12476, 12477, 12478, 12479, 12480, 12481, 12482, 12483, + 12484, 12485, 12486, 12487, 12488, 12489, 12490, 12491, 12492, 12493, 12494, 12495, 12496, + 12497, 12498, 12499, 12500, 12501, 12502, 12503, 12504, 12505, 12506, 12507, 12508, 12509, + 12510, 12511, 12512, 12513, 12514, 12515, 12516, 12517, 12518, 12519, 12520, 12521, 12522, + 12523, 12524, 12525, 12526, 12527, 12528, 12529, 12530, 12531, 12532, 12535, 12536, 12537, + 12538, 12445, 12446, 12353, 12354, 12355, 12356, 12357, 12358, 12359, 12360, 12361, 12362, + 12437, 12363, 12364, 12365, 12366, 12367, 12368, 12438, 12369, 12370, 0, 12371, 12372, 12373, + 12374, 12375, 12376, 12377, 12378, 12379, 12380, 12381, 12382, 12383, 12384, 12385, 12386, + 12387, 12388, 12389, 12390, 12391, 12392, 12393, 12394, 12395, 12396, 12397, 12398, 12399, + 12400, 12401, 12402, 12403, 12404, 12405, 12406, 12407, 12408, 12409, 12410, 12411, 12412, + 12413, 12414, 12415, 12416, 12417, 12418, 12419, 12420, 12421, 12422, 12423, 12424, 12425, + 12426, 12427, 12428, 12429, 12430, 12431, 12432, 12433, 12434, 12435, 12436, 12541, 12542, + 12540, 12449, 12450, 12451, 12452, 12453, 12454, 12455, 12456, 12457, 12458, 12533, 12459, + 12460, 12461, 12462, 12463, 12464, 12534, 12465, 12466, 0, 12467, 12468, 12469, 12470, 12471, + 12472, 12473, 12474, 12475, 12476, 12477, 12478, 12479, 12480, 12481, 12482, 12483, 12484, + 12485, 12486, 12487, 12488, 12489, 12490, 12491, 12492, 12493, 12494, 12495, 12496, 12497, + 12498, 12499, 12500, 12501, 12502, 12503, 12504, 12505, 12506, 12507, 12508, 12509, 12510, + 12511, 12512, 12513, 12514, 12515, 12516, 12517, 12518, 12519, 12520, 12521, 12522, 12523, + 12524, 12525, 12526, 12527, 12528, 12529, 12530, 12531, 12532, 12535, 12536, 12537, 12538, + 65093, 65094, 12539, 65290, 8251, 9675, 9678, 9673, 9651, 9650, 12541, 12542, 12445, 12446, + 65288, 65289, 12308, 12309, 65288, 65289, 12308, 12309, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, + 12353, 12354, 12355, 12356, 12357, 12358, 12359, 12360, 12361, 12362, 12363, 12437, 12364, + 12365, 12366, 12367, 12368, 12369, 12438, 12370, 12371, 12372, 12373, 12374, 12375, 12376, + 12377, 12378, 12379, 12380, 12381, 12382, 12383, 12384, 12385, 12386, 12387, 12388, 12389, + 12390, 12391, 12392, 12393, 12394, 12395, 12396, 12397, 12398, 12399, 12400, 12401, 12402, + 12403, 12404, 12405, 12406, 12407, 12408, 12409, 12410, 12411, 12412, 12413, 12414, 12415, + 12416, 12417, 12418, 12419, 12420, 12421, 12422, 12423, 12424, 12425, 12426, 12427, 12428, + 12429, 12430, 12431, 12432, 12433, 12434, 12435, 12436, 12353, 12355, 12357, 12359, 12361, + 12363, 12369, 12387, 12419, 12421, 12423, 12430, 12449, 12450, 12451, 12452, 12453, 12454, + 12455, 12456, 12457, 12458, 12459, 12533, 12460, 12461, 12462, 12463, 12464, 12465, 12534, + 12466, 12467, 12468, 12469, 12470, 12471, 12472, 12473, 12474, 12475, 12476, 12477, 12478, + 12479, 12480, 12481, 12482, 12483, 12484, 12485, 12486, 12487, 12488, 12489, 12490, 12491, + 12492, 12493, 12494, 12495, 12496, 12497, 12498, 12499, 12500, 12501, 12502, 12503, 12504, + 12505, 12506, 12507, 12508, 12509, 12510, 12511, 12512, 12513, 12514, 12515, 12516, 12517, + 12518, 12519, 12520, 12521, 12522, 12523, 12524, 12525, 12526, 12527, 12528, 12529, 12530, + 12531, 12532, 12449, 12451, 12453, 12455, 12457, 12533, 12534, 12483, 12515, 12517, 12519, + 12526, 12540, 12540, 27880, 8364, 8486, 8242, 8243, 64256, 64259, 64260, 257, 299, 363, 275, + 333, 256, 298, 362, 274, 332, 8539, 8540, 8541, 8542, 8531, 8532, 8304, 8308, 8309, 8310, 8311, + 8312, 8313, 8320, 8321, 8322, 8323, 8324, 8325, 8326, 8327, 8328, 8329, 461, 282, 0, 7868, 463, + 0, 296, 465, 0, 467, 366, 360, 462, 283, 0, 7869, 464, 0, 297, 466, 0, 468, 367, 361, 593, 593, + 593, 509, 230, 596, 596, 596, 601, 601, 601, 602, 602, 602, 603, 603, 603, 106, 331, 629, 652, + 652, 652, 658, 643, 720, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 165, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 166, 125, 771, 8217, 92, 8216, 124, 126, 161, 162, 163, + 8260, 402, 167, 164, 8220, 171, 8249, 8250, 64257, 64258, 8211, 8224, 8225, 183, 182, 8226, + 8218, 8222, 8221, 187, 8230, 8240, 191, 769, 770, 175, 774, 775, 776, 778, 184, 779, 808, 780, + 8212, 198, 170, 321, 216, 338, 186, 230, 305, 322, 248, 339, 223, 8722, 169, 172, 174, 176, + 177, 178, 179, 181, 185, 188, 189, 190, 192, 193, 194, 195, 196, 197, 199, 200, 201, 202, 203, + 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 217, 218, 219, 220, 221, 222, 224, + 225, 226, 227, 228, 229, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 249, 250, 251, 252, 253, 254, 255, 352, 376, 381, 773, 353, 8482, 382, 48, 8364, + 8486, 8242, 8243, 64256, 64259, 64260, 257, 299, 363, 275, 333, 256, 298, 362, 274, 332, 8539, + 8540, 8541, 8542, 8531, 8532, 8304, 8308, 8309, 8310, 8311, 8312, 8313, 8320, 8321, 8322, 8323, + 8324, 8325, 8326, 8327, 8328, 8329, 461, 282, 0, 7868, 463, 0, 296, 465, 0, 467, 366, 360, 462, + 283, 0, 7869, 464, 0, 297, 466, 0, 468, 367, 361, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 8212, + 45, 61, 44, 40, 41, 46, 47, 58, 59, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 8212, 45, 61, 44, + 40, 41, 46, 47, 58, 59, 183, 45, 61, 8451, 9792, 9794, 12307, 12306, 12300, 12301, 12302, + 12303, 12314, 12315, 12312, 12313, 65288, 65289, 12317, 12318, 8216, 8217, 8220, 8221, 39, 34, + 36920, 35585, 32227, 40643, 28331, 31117, 24724, 28023, 24936, 27114, 28212, 35088, 28450, + 22120, 26082, 31048, 34395, 38911, 21220, 35641, 25581, 25802, 30799, 31296, 27578, 31049, + 35222, 29038, 31038, 32773, 33261, 31069, 26257, 32626, 28041, 29376, 24910, 0, 31680, 31062, + 20711, 23652, 24034, 24974, 36104, 21373, 22022, 33879, 24501, 25074, 37806, 31118, 39725, + 31361, 38627, 26757, 32321, 26202, 21329, 30865, 36051, 25935, 20398, 20341, 22592, 21193, + 27493, 22696, 27599, 20813, 25150, 31056, 27396, 38534, 34396, 28122, 39006, 26310, 27511, + 32244, 37706, 24266, 37636, 27010, 20916, 25420, 34523, 37001, 36898, 20553, 32239, 36949, + 21417, 39180, 34907, 24310, 27839, 37467, 32705, 33469, 38597, 23475, 24936, 27010, 27579, + 25954, 36011, 24012, 38929, 24112, 36556, 31406, 22343, 20625, 31348, 20581, 24314, 37431, + 27278, 20132, 20844, 26356, 26657, 30828, 32094, 32771, 36092, 38477, 25335, 32618, 20351, + 21490, 22985, 35613, 37034, 21454, 36655, 26580, 30636, 33308, 26991, 26494, 35359, 19976, + 22516, 26893, 32887, 35242, 36930, 25454, 25666, 33337, 32207, 32865, 20687, 35477, 24677, + 20806, 30522, 32884, 36339, 24237, 24311, 33351, 26691, 36867, 27966, 25490, 36649, 29677, + 38930, 24754, 25161, 26000, 32203, 35513, 36007, 29238, 33914, 20998, 22132, 24996, 31881, + 32027, 38640, 34109, 20415, 25447, 30406, 26717, 33032, 32822, 32764, 21519, 38563, 40607, + 40599, 32879, 32894, 28286, 20613, 20883, 20955, 0, 21312, 38617, 21929, 22209, 22285, 22699, + 23002, 23094, 23230, 23886, 23943, 24009, 24019, 24365, 24472, 24792, 24893, 25086, 25192, + 25295, 25885, 25615, 25842, 25949, 26207, 26537, 26599, 26987, 26928, 27047, 27204, 27280, + 27656, 27667, 28195, 28433, 28414, 28478, 29183, 29669, 29746, 29791, 29920, 29964, 30322, + 31018, 30932, 31162, 31257, 31381, 31986, 32115, 32221, 32309, 32686, 32737, 32858, 32863, + 32883, 32880, 32886, 33107, 33162, 33205, 33229, 33778, 34133, 34261, 34586, 34870, 34974, + 35032, 35060, 35115, 35131, 35178, 35183, 35357, 36101, 36111, 40782, 36497, 36513, 36946, + 36878, 37168, 37206, 37208, 37221, 37235, 37234, 37282, 37295, 37290, 37300, 37306, 38007, + 38552, 38717, 38752, 38769, 38924, 39027, 39107, 39493, 39757, 39768, 39878, 39905, 39921, + 40264, 40399, 40712, 25201, 26263, 24847, 34915, 36949, 36986, 30959, 35999, 11991, 0, 21417, + 29916, 36939, 39180, 0, 37555, 38321, 24310, 25588, 0, 29017, 36960, 37467, 26044, 24448, + 32705, 21368, 38899, 21270, 33457, 33747, 36008, 36942, 0, 38597, 39187, 24315, 28784, 23475, + 24936, 24936, 24936, 0, 27010, 26478, 11974, 38548, 0, 36676, 37772, 33477, 23506, 29872, + 32233, 0, 36996, 38290, 38867, 33304, 21361, 13314, 13314, 13314, 24190, 26083, 26399, 27231, + 36215, 39138, 0, 21931, 34384, 36870, 21450, 21560, 24613, 32026, 24040, 25298, 36317, 0, 0, 0, + 24378, 24656, 27073, 0, 0, 37111, 38911, 39255, 26241, 11945, 36817, 20465, 30697, 20855, + 34398, 31354, 36935, 27355, 21843, 63753, 24693, 24935, 36814, 20625, 28500, 31348, 26376, + 11964, 20860, 21048, 0, 26435, 32937, 35609, 36963, 0, 35329, 25142, 38599, 39015, 21555, + 23067, 35492, 24037, 24908, 25221, 25511, 27083, 0, 28207, 32789, 33108, 33618, 35611, 36092, + 21567, 37239, 33136, 29969, 36796, 0, 37782, 0, 24425, 25505, 27506, 33756, 20916, 21682, + 21066, 29986, 19256, 23039, 23039, 24063, 35566, 35566, 36039, 36039, 27425, 27425, 0, 29626, + 0, 25448, 26012, 37034, 0, 29237, 0, 37196, 24369, 20027, 21463, 25480, 0, 32066, 32722, 34886, + 36913, 20303, 34899, 36848, 24033, 36981, 36981, 25152, 26360, 22899, 21213, 21830, 23477, 0, + 11916, 0, 23577, 28040, 30813, 32918, 0, 23426, 0, 24773, 22516, 39166, 26893, 27542, 11997, + 39136, 0, 14221, 20405, 14586, 28024, 0, 36914, 20155, 0, 20995, 23563, 35338, 35338, 36805, 0, + 36930, 13599, 0, 0, 30427, 32854, 35200, 35488, 35531, 38748, 38748, 31237, 33030, 38587, + 31821, 31680, 35498, 38634, 32085, 25159, 28568, 32673, 33337, 36984, 36983, 21069, 20840, + 25475, 25591, 30246, 36208, 36865, 36973, 36896, 0, 36895, 36042, 23562, 23562, 22949, 0, + 36864, 36910, 38538, 39899, 22823, 13351, 28711, 36921, 33067, 20025, 27470, 0, 35477, 26262, + 20516, 32622, 31689, 0, 31569, 36880, 26609, 27880, 39376, 0, 24501, 25074, 26397, 0, 35519, + 30452, 26389, 26389, 22684, 36861, 36890, 22378, 37347, 21576, 24093, 31243, 30340, 36969, + 36845, 28155, 20814, 36884, 30778, 22305, 0, 0, 21776, 64003, 34276, 35588, 36867, 36879, + 39472, 23566, 36947, 21534, 15240, 20839, 32905, 20083, 24525, 35469, 63839, 32013, 35207, + 27966, 32954, 21338, 34180, 36843, 32283, 32903, 20023, 28497, 37297, 20276, 21028, 21322, + 24070, 30036, 26217, 34115, 36991, 24494, 40763, 21305, 0, 24421, 23020, 0, 35413, 24217, + 30149, 23142, 25975, 28014, 36000, 36000, 26381, 35206, 19993, 24163, 24179, 24330, 34065, + 20559, 32232, 36820, 36941, 31807, 21253, 23849, 25265, 26379, 30770, 32299, 32990, 33804, + 37030, 37030, 39165, 40300, 20129, 24125, 24536, 24537, 25151, 26395, 26395, 20882, 25705, + 32763, 20961, 30952, 39764, 40635, 27097, 26717, 13416, 40884, 32365, 40639, 33032, 26126, + 30431, 36855, 22916, 21200, 30450, 32791, 25147, 32011, 38376, 32004, 36493, 0, 26746, 26625, + 24841, 0, 0, 21191, 26377, 29494, 29494, 29495, 0, 36938, 26332, 11959, 35201, 39178, 32716, + 32764, 36534, 63775, 29575, 40845, 40845, 63875, 40900, 29136, 38563, 40023, 40607, 31867, + 63906, 24976, 63898, 26391, 32770, 0, 20682, 20762, 20820, 20885, 0, 21133, 21207, 0, 0, 13630, + 21471, 26364, 21811, 21988, 21589, 22208, 22841, 23068, 23234, 23414, 0, 23572, 14306, 23782, + 24148, 20040, 24291, 24727, 0, 25292, 25628, 25542, 25640, 0, 25371, 26207, 26207, 26211, + 26357, 0, 26781, 26765, 27126, 27014, 0, 23528, 27067, 27596, 28433, 28183, 28568, 27818, + 27818, 28699, 29026, 29243, 20012, 29468, 29898, 29935, 30069, 30188, 30286, 16305, 30570, + 30633, 31040, 40902, 31059, 40779, 31150, 36995, 31571, 0, 31764, 16996, 31824, 31832, 32070, + 0, 32290, 32290, 32328, 32309, 32323, 32396, 0, 0, 0, 0, 32709, 32710, 32745, 33089, 17491, + 33368, 33401, 33401, 33401, 33507, 20857, 33626, 33824, 33725, 34036, 17701, 34183, 34292, 0, + 34615, 34619, 34821, 34749, 34429, 34870, 13358, 35014, 35261, 35547, 35646, 35674, 36211, + 36249, 18406, 36404, 0, 36847, 36999, 36858, 36894, 36917, 36944, 36808, 36993, 37002, 37002, + 37002, 37002, 37002, 37002, 37001, 37001, 37001, 37001, 37001, 37001, 37001, 37001, 37001, + 37001, 37001, 37001, 0, 37853, 38332, 0, 38578, 38745, 38969, 39147, 39171, 39177, 39237, + 39237, 39243, 39432, 39519, 39525, 39663, 39704, 39903, 40201, 40200, 40613, 40652, 40712, + 40778, 0, 40807, 0, 0, 0, 35100, 26824, 26363, 24389, 21248, 21385, 22867, 64017, 0, 27251, 0, + 0, 35346, 19972, 19973, 19999, 20011, 20015, 20016, 20032, 20033, 20036, 20058, 20095, 20109, + 20118, 20153, 20176, 20192, 20221, 20223, 20235, 20245, 20320, 20283, 20297, 20308, 20346, + 20349, 20350, 20375, 20414, 20431, 20477, 20480, 20481, 20496, 20507, 20519, 20526, 20567, + 20582, 20586, 20539, 20623, 20630, 20636, 20684, 20710, 20713, 20719, 20744, 20747, 20752, + 20763, 20766, 20831, 20897, 20924, 20958, 20974, 20980, 20993, 20994, 21011, 21065, 21089, + 21094, 21139, 21192, 21232, 21258, 21259, 21310, 21324, 21323, 21345, 21356, 21419, 21466, + 21478, 21493, 21543, 21581, 21606, 21611, 21620, 21645, 21654, 21665, 21677, 21689, 21695, + 21702, 21709, 21774, 21803, 21813, 21834, 21856, 21857, 21896, 21902, 22024, 22030, 22031, + 22071, 22079, 22089, 22091, 22095, 22118, 22121, 22127, 22129, 22130, 22165, 22170, 22188, + 22189, 22193, 22217, 22237, 22244, 22282, 22293, 22307, 22319, 22323, 22324, 22348, 22384, + 22412, 22428, 22456, 22502, 22509, 22517, 22518, 22527, 22537, 22560, 22578, 22652, 22656, + 22697, 22734, 22736, 22740, 22746, 22761, 22796, 22820, 22831, 22881, 22893, 22986, 22994, + 23005, 23011, 23012, 23044, 23052, 23075, 23111, 23125, 23139, 23149, 23166, 23198, 23207, + 23212, 23219, 23264, 23296, 23321, 23333, 23341, 23361, 23420, 23422, 23423, 23434, 23587, + 23595, 23600, 23651, 23657, 23676, 23755, 23762, 23796, 23844, 23846, 23875, 23878, 23882, + 23954, 23956, 23961, 23968, 24024, 24032, 24056, 24064, 24082, 24084, 24085, 24088, 24110, + 24152, 24171, 24172, 24232, 24234, 24254, 24255, 24267, 24274, 24327, 24334, 24348, 24349, + 24354, 24360, 24374, 24379, 24384, 24400, 24408, 24420, 24457, 24476, 24487, 24484, 24495, + 24504, 24516, 24521, 24545, 24553, 24557, 24572, 24599, 24602, 24627, 24673, 24703, 24734, + 24740, 24752, 24779, 24795, 24824, 24850, 24851, 24852, 24860, 24956, 24973, 24991, 25000, + 25026, 25055, 25109, 25129, 25155, 25158, 25164, 25169, 25174, 25284, 25340, 25354, 25357, + 25368, 25401, 25410, 25411, 25445, 25460, 25469, 25476, 25479, 25488, 25502, 25553, 25564, + 25609, 25616, 25634, 25684, 25691, 25709, 25723, 25790, 25791, 25829, 25847, 25851, 25860, + 25878, 25881, 25927, 25959, 25985, 25989, 26050, 26096, 26098, 26156, 26188, 26203, 26204, + 26209, 26219, 26231, 26276, 26312, 26348, 26373, 26387, 26419, 26440, 26444, 26486, 26491, + 26544, 26546, 26617, 26583, 26585, 26608, 26668, 26672, 26673, 26715, 26738, 26741, 26746, + 26756, 26789, 26802, 26832, 26838, 26856, 26861, 26864, 26865, 26876, 26897, 26899, 26933, + 26939, 26967, 26979, 26994, 27007, 27008, 27046, 27053, 27063, 27094, 27095, 27137, 27151, + 27157, 27176, 27188, 27198, 27205, 27216, 27217, 27222, 27227, 27267, 27273, 27281, 27293, + 27294, 27295, 27356, 27367, 27372, 27422, 27428, 27445, 27462, 27478, 27488, 27522, 27582, + 27617, 27633, 27664, 27699, 27701, 11938, 27737, 27766, 27771, 27781, 27797, 27804, 27856, + 27860, 27862, 27872, 27883, 27884, 27886, 27914, 27918, 27921, 27950, 27991, 27998, 28005, + 28034, 28095, 28100, 28106, 28118, 28137, 28194, 28241, 28359, 28362, 28366, 28413, 28442, + 28458, 28463, 28467, 28506, 28510, 28514, 28541, 28555, 28557, 28562, 28564, 28570, 28583, + 28584, 28598, 28634, 28638, 28665, 28729, 28732, 28746, 28756, 28765, 28766, 28772, 28780, + 28798, 28801, 28821, 28855, 28883, 28884, 28888, 28892, 28935, 28960, 28977, 29002, 29010, + 29024, 29049, 29074, 29107, 29131, 29139, 29142, 29184, 29213, 29227, 29240, 29249, 29267, + 29269, 29270, 29276, 29325, 29357, 29364, 29383, 29435, 29444, 29445, 29480, 29489, 29507, + 29548, 29564, 29571, 29573, 29574, 29589, 29598, 29599, 29600, 29606, 29611, 29621, 29623, + 29628, 29647, 29657, 29673, 29684, 29693, 29700, 29706, 29722, 29723, 29732, 29736, 29740, + 29743, 29744, 29745, 29753, 29764, 29767, 29771, 29773, 29777, 29783, 29798, 29803, 29809, + 29824, 29829, 29830, 29831, 29840, 29848, 29852, 29856, 29859, 29864, 29867, 29877, 29887, + 29896, 29914, 29918, 30030, 30073, 30081, 30096, 30098, 30099, 30132, 30180, 30201, 30208, + 30218, 30229, 30230, 30233, 30238, 30253, 30261, 30275, 30283, 30309, 30317, 30319, 30321, + 30324, 30372, 30373, 30405, 30412, 30444, 30460, 30516, 30518, 30556, 30559, 30560, 30578, + 30589, 30613, 30634, 30694, 30704, 30708, 30726, 30754, 30765, 30766, 30768, 30773, 30824, + 30878, 30920, 30924, 30926, 30948, 30944, 30945, 30962, 30967, 30971, 31025, 31028, 31035, + 31037, 31045, 31067, 31068, 31115, 31126, 31128, 31160, 31163, 31178, 31194, 31235, 31241, + 31249, 31262, 31277, 31289, 31301, 31308, 31325, 31328, 31341, 31352, 31392, 31395, 31411, + 31419, 31420, 31430, 31495, 31508, 31527, 31537, 31559, 31566, 31584, 31593, 31597, 31602, + 31633, 31663, 31703, 31705, 31755, 31759, 31776, 31782, 31793, 31798, 31825, 31833, 31847, + 31854, 31856, 31932, 31935, 31944, 31945, 31959, 31961, 31965, 31979, 32007, 32008, 32009, + 32019, 32029, 32035, 32065, 32083, 32089, 32093, 32122, 32134, 32139, 32140, 32204, 32235, + 32241, 32249, 32264, 32273, 32277, 32288, 32327, 32354, 32366, 32371, 32397, 32401, 32408, + 32580, 32591, 32594, 32595, 32609, 32657, 32703, 32718, 32735, 32741, 32748, 32750, 32751, + 32762, 32782, 32785, 32788, 32804, 32806, 32826, 32828, 32864, 32881, 32885, 32926, 32934, + 32939, 32983, 32984, 33046, 33048, 33082, 33098, 33100, 33153, 33156, 33204, 33231, 33273, + 33283, 33313, 33330, 33332, 33350, 33355, 33359, 33422, 33454, 33463, 33470, 33478, 33534, + 33603, 33617, 33621, 33670, 33677, 33682, 33688, 33705, 33727, 33728, 33770, 33807, 33809, + 33866, 33910, 33960, 33967, 33984, 33986, 34032, 34045, 34060, 34100, 34142, 34191, 34231, + 34254, 34221, 34322, 34345, 34386, 34403, 34412, 34415, 34426, 34445, 34449, 34456, 34471, + 34472, 34554, 34557, 34571, 34579, 34585, 34590, 34600, 34622, 34673, 34696, 34713, 34732, + 34733, 34741, 34774, 34795, 34797, 34817, 34819, 34822, 34827, 34836, 34844, 34902, 34911, + 34916, 34968, 34986, 35005, 35006, 35018, 35026, 35035, 35056, 35057, 35078, 35096, 35097, + 35098, 35111, 35120, 35134, 35195, 35284, 35286, 35301, 35313, 35335, 35343, 35349, 35362, + 35406, 35455, 35572, 35615, 35639, 35651, 35652, 35668, 35740, 35742, 35911, 35924, 35955, + 36004, 36057, 36065, 36088, 36094, 36123, 36201, 36204, 36228, 36237, 36245, 36262, 36294, + 36302, 36324, 36332, 36384, 36427, 36460, 36464, 36474, 36498, 36526, 36531, 36561, 36564, + 36601, 36631, 36662, 36774, 36789, 36790, 36806, 36832, 36836, 36854, 36866, 36908, 36932, + 37000, 37013, 37017, 37019, 37026, 37044, 37079, 37085, 37108, 37143, 37148, 37169, 37178, + 37181, 37192, 37211, 37217, 37220, 37262, 37278, 37288, 37293, 37294, 37298, 37308, 37360, + 37367, 37371, 37383, 37416, 37427, 37432, 37443, 37447, 37455, 37472, 37570, 37579, 37580, + 37599, 37645, 37653, 37663, 37671, 37703, 37714, 37733, 37738, 37741, 37787, 37818, 37801, + 37825, 37834, 37858, 37882, 37885, 37903, 37940, 37951, 37973, 37995, 38002, 38264, 38310, + 38313, 38315, 38324, 38333, 38362, 38429, 38465, 38488, 38532, 38564, 38569, 38610, 0, 38622, + 38633, 38641, 38658, 38665, 38746, 38755, 38766, 38771, 38810, 38818, 38837, 38838, 38873, + 38878, 38900, 38922, 38926, 38942, 38947, 38955, 38974, 38994, 38995, 39001, 39020, 39096, + 39098, 39103, 39112, 39141, 39218, 39219, 39232, 39245, 39260, 39263, 39345, 39353, 39354, + 39369, 39426, 39446, 39460, 39463, 39469, 39470, 39478, 39480, 39498, 39510, 39605, 39606, + 39673, 39683, 39712, 39731, 39732, 39795, 39801, 39847, 39873, 39879, 39895, 39911, 39915, + 39927, 39930, 39933, 39947, 39975, 39978, 39990, 40001, 40019, 40035, 40048, 40055, 40194, + 40258, 40263, 40291, 40297, 40316, 40318, 40333, 40369, 40387, 40391, 40406, 40415, 40427, + 40436, 40469, 40477, 40612, 40616, 40620, 40679, 40686, 40720, 40722, 40727, 40729, 40751, + 40759, 40761, 40769, 40773, 40791, 40808, 40817, 40821, 40848, 40852, 40866, 20016, 13317, 0, + 22048, 24267, 11925, 24740, 0, 27428, 28665, 28390, 29107, 29227, 31430, 32609, 32881, 32926, + 36790, 37372, 23986, 38878, 20435, 20697, 20720, 20931, 22134, 27220, 27905, 28112, 28226, + 28377, 29668, 29729, 30060, 30801, 34805, 0, 29608, 15091, 13531, 17420, 16010, 0, 40893, + 19432, 40892, 16090, 15138, 40894, 17786, 16531, 0, 18021, 16643, 17043, 18094, 13448, 0, + 63584, 63585, 63586, 63610, 63615, 12541, 12542, 12445, 12446, 12291, 12294, 12540, 8800, 8806, + 8807, 8734, 8756, 8451, 12543, 12447, 8712, 8715, 8838, 8839, 8834, 8835, 8746, 8745, 8836, + 8837, 8842, 8843, 8713, 8709, 8965, 8966, 8743, 8744, 8658, 8660, 8704, 8707, 8853, 8854, 8855, + 8741, 8742, 8736, 8869, 8706, 8711, 8801, 8786, 8810, 8811, 8730, 8765, 8733, 8757, 8747, 8748, + 8802, 8771, 8773, 8776, 8822, 8823, 8596, 8723, 8501, 8463, 8487, 11840, 12353, 12354, 12355, + 12356, 12357, 12358, 12359, 12360, 12361, 12362, 12363, 12364, 12365, 12366, 12367, 12368, + 12369, 12370, 12371, 12372, 12373, 12374, 12375, 12376, 12377, 12378, 12379, 12380, 12381, + 12382, 12383, 12384, 12385, 12386, 12387, 12388, 12389, 12390, 12391, 12392, 12393, 12394, + 12395, 12396, 12397, 12398, 12399, 12400, 12401, 12402, 12403, 12404, 12405, 12406, 12407, + 12408, 12409, 12410, 12411, 12412, 12413, 12414, 12415, 12416, 12417, 12418, 12419, 12420, + 12421, 12422, 12423, 12424, 12425, 12426, 12427, 12428, 12429, 12430, 12431, 12432, 12433, + 12434, 12435, 12436, 12437, 12438, 0, 0, 0, 0, 0, 12449, 12450, 12451, 12452, 12453, 12454, + 12455, 12456, 12457, 12458, 12459, 12460, 12461, 12462, 12463, 12464, 12465, 12466, 12467, + 12468, 12469, 12470, 12471, 12472, 12473, 12474, 12475, 12476, 12477, 12478, 12479, 12480, + 12481, 12482, 12483, 12484, 12485, 12486, 12487, 12488, 12489, 12490, 12491, 12492, 12493, + 12494, 12495, 12496, 12497, 12498, 12499, 12500, 12501, 12502, 12503, 12504, 12505, 12506, + 12507, 12508, 12509, 12510, 12511, 12512, 12513, 12514, 12515, 12516, 12517, 12518, 12519, + 12520, 12521, 12522, 12523, 12524, 12525, 12526, 12527, 12528, 12529, 12530, 12531, 12532, + 12533, 12534, 0, 0, 0, 0, 0, 0, 0, 0, 12784, 12785, 12786, 12787, 12788, 12789, 12790, 12791, + 12792, 12793, 0, 12794, 12795, 12796, 12797, 12798, 12799, 12535, 12536, 12537, 12538, 0, 0, + 8922, 8923, 8533, 8984, 7742, 7743, 504, 505, 470, 472, 474, 476, 260, 728, 317, 346, 350, 356, + 377, 379, 261, 731, 318, 347, 711, 351, 357, 378, 733, 380, 340, 258, 313, 262, 268, 280, 270, + 323, 327, 336, 344, 368, 354, 341, 259, 314, 263, 269, 281, 271, 273, 324, 328, 337, 345, 369, + 355, 729, 264, 284, 292, 308, 348, 364, 265, 285, 293, 309, 349, 365, 625, 651, 638, 620, 622, + 633, 648, 598, 627, 637, 642, 656, 635, 621, 607, 626, 669, 654, 609, 624, 641, 295, 661, 660, + 614, 664, 450, 595, 599, 644, 608, 403, 616, 649, 600, 604, 606, 592, 623, 650, 612, 594, 653, + 613, 674, 673, 597, 657, 634, 615, 865, 712, 716, 721, 8255, 783, 741, 742, 743, 744, 745, 0, + 0, 805, 812, 825, 796, 799, 800, 829, 809, 815, 734, 804, 816, 828, 820, 797, 798, 792, 793, + 810, 826, 827, 794, 8750, 8735, 8895, 610, 611, 618, 628, 630, 632, 640, 655, 665, 668, 671, + 688, 690, 695, 705, 736, 737, 8714, 8721, 8749, 8818, 8819, 8856, 8862, 8864, 8319, 42933, 952, + 43859, 8487, 11840, 8533, 7742, 7743, 504, 505, 470, 472, 474, 476, 260, 317, 346, 350, 356, + 377, 379, 261, 318, 347, 351, 357, 378, 380, 340, 258, 313, 262, 268, 280, 270, 323, 327, 336, + 344, 368, 354, 341, 259, 314, 263, 269, 281, 271, 273, 324, 328, 337, 345, 369, 355, 264, 284, + 292, 308, 348, 364, 265, 285, 293, 309, 349, 365, 12541, 12542, 12445, 12446, 12291, 12294, + 12540, 12543, 12447, 12353, 12354, 12355, 12356, 12357, 12358, 12359, 12360, 12361, 12362, + 12363, 12364, 12365, 12366, 12367, 12368, 12369, 12370, 12371, 12372, 12373, 12374, 12375, + 12376, 12377, 12378, 12379, 12380, 12381, 12382, 12383, 12384, 12385, 12386, 12387, 12388, + 12389, 12390, 12391, 12392, 12393, 12394, 12395, 12396, 12397, 12398, 12399, 12400, 12401, + 12402, 12403, 12404, 12405, 12406, 12407, 12408, 12409, 12410, 12411, 12412, 12413, 12414, + 12415, 12416, 12417, 12418, 12419, 12420, 12421, 12422, 12423, 12424, 12425, 12426, 12427, + 12428, 12429, 12430, 12431, 12432, 12433, 12434, 12435, 12436, 12437, 12438, 0, 0, 0, 0, 0, + 12449, 12450, 12451, 12452, 12453, 12454, 12455, 12456, 12457, 12458, 12459, 12460, 12461, + 12462, 12463, 12464, 12465, 12466, 12467, 12468, 12469, 12470, 12471, 12472, 12473, 12474, + 12475, 12476, 12477, 12478, 12479, 12480, 12481, 12482, 12483, 12484, 12485, 12486, 12487, + 12488, 12489, 12490, 12491, 12492, 12493, 12494, 12495, 12496, 12497, 12498, 12499, 12500, + 12501, 12502, 12503, 12504, 12505, 12506, 12507, 12508, 12509, 12510, 12511, 12512, 12513, + 12514, 12515, 12516, 12517, 12518, 12519, 12520, 12521, 12522, 12523, 12524, 12525, 12526, + 12527, 12528, 12529, 12530, 12531, 12532, 12533, 12534, 0, 0, 0, 0, 0, 0, 0, 0, 12784, 12785, + 12786, 12787, 12788, 12789, 12790, 12791, 12792, 12793, 0, 12794, 12795, 12796, 12797, 12798, + 12799, 12535, 12536, 12537, 12538, 0, 0, 12541, 12348, 12543, 8741, 12310, 12311, 9838, 9835, + 10548, 10549, 10687, 8487, 12448, 8211, 10746, 10747, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 962, 9461, 9462, 9463, 9464, 9465, 9466, 9467, 9468, 9469, 9470, 9750, 9751, 9649, 12784, + 12785, 12786, 12787, 12788, 12789, 12790, 12791, 12792, 12793, 0, 12794, 12795, 12796, 12797, + 12798, 12799, 9150, 9151, 9152, 9153, 9154, 9155, 9156, 9157, 9158, 9159, 9160, 9161, 9162, + 9163, 9164, 8254, 65343, 10003, 8984, 9251, 9166, 9680, 9681, 9682, 9683, 8263, 8264, 164, + 8273, 8258, 12688, 12689, 12690, 12691, 12692, 12693, 12694, 12695, 12696, 12697, 12698, 12699, + 12700, 12701, 12702, 12703, 8713, 8742, 8773, 8776, 8802, 8822, 8823, 8836, 8837, 8842, 8843, + 8922, 8923, 9136, 9137, 9842, 9843, 9844, 9845, 9846, 9847, 9848, 9849, 9850, 9851, 9852, 9853, + 12441, 12442, 8413, 12310, 12311, 12448, 8211, 12784, 12785, 12786, 12787, 12788, 12789, 12790, + 12791, 12792, 12793, 0, 12794, 12795, 12796, 12797, 12798, 12799, 9136, 9137, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 12784, 12785, 12786, 12787, 12788, 12789, 12790, 12791, 12792, 12793, 0, + 12794, 12795, 12796, 12797, 12798, 12799, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12784, 12785, + 12786, 12787, 12788, 12789, 12790, 12791, 12792, 12793, 0, 12794, 12795, 12796, 12797, 12798, + 12799, 10687, 9702, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12784, 12785, 12786, 12787, 12788, + 12789, 12790, 12791, 12792, 12793, 0, 12794, 12795, 12796, 12797, 12798, 12799, 12535, 12536, + 12537, 12538, 0, 0, 12784, 12785, 12786, 12787, 12788, 12789, 12790, 12791, 12792, 12793, 0, + 12794, 12795, 12796, 12797, 12798, 12799, 0, 0, 8800, 8806, 8807, 8734, 8756, 8451, 8712, 8715, + 8838, 8839, 8834, 8835, 8746, 8745, 8836, 8837, 8842, 8843, 8713, 8709, 8965, 8966, 8743, 8744, + 8658, 8660, 8704, 8707, 8853, 8854, 8855, 8741, 8742, 8736, 8869, 8706, 8711, 8801, 8786, 8810, + 8811, 8730, 8765, 8733, 8757, 8747, 8748, 8802, 8771, 8773, 8776, 8822, 8823, 8596, 8723, 8501, + 8463, 8487, 11840, 8922, 8923, 8533, 8984, 7742, 7743, 504, 505, 470, 472, 474, 476, 260, 728, + 317, 346, 350, 356, 377, 379, 261, 731, 318, 347, 711, 351, 357, 378, 733, 380, 340, 258, 313, + 262, 268, 280, 270, 323, 327, 336, 344, 368, 354, 341, 259, 314, 263, 269, 281, 271, 273, 324, + 328, 337, 345, 369, 355, 729, 264, 284, 292, 308, 348, 364, 265, 285, 293, 309, 349, 365, 625, + 651, 638, 620, 622, 633, 648, 598, 627, 637, 642, 656, 635, 621, 607, 626, 669, 654, 609, 624, + 641, 295, 661, 660, 614, 664, 450, 595, 599, 644, 608, 403, 616, 649, 600, 604, 606, 592, 623, + 650, 612, 594, 653, 613, 674, 673, 597, 657, 634, 615, 865, 712, 716, 721, 8255, 783, 741, 742, + 743, 744, 745, 0, 0, 805, 812, 825, 796, 799, 800, 829, 809, 815, 734, 804, 816, 828, 820, 797, + 798, 792, 793, 810, 826, 827, 794, 8750, 8735, 8895, 610, 611, 618, 628, 630, 632, 640, 655, + 665, 668, 671, 688, 690, 695, 704, 736, 737, 8714, 8721, 8749, 8818, 8819, 8856, 8862, 8864, + 8319, 42933, 952, 43859, 8487, 11840, 8533, 7742, 7743, 504, 505, 470, 472, 474, 476, 260, 317, + 346, 350, 356, 377, 379, 261, 318, 347, 351, 357, 378, 380, 340, 258, 313, 262, 268, 280, 270, + 323, 327, 336, 344, 368, 354, 341, 259, 314, 263, 269, 281, 271, 273, 324, 328, 337, 345, 369, + 355, 264, 284, 292, 308, 348, 364, 265, 285, 293, 309, 349, 365, 20296, 20319, 20330, 20332, + 20494, 20504, 20545, 20722, 20688, 20742, 20739, 20789, 20821, 20823, 13493, 20938, 20962, + 21079, 21196, 21206, 21243, 21276, 21347, 21405, 21522, 21631, 21640, 21840, 21889, 21933, + 21966, 22075, 22174, 22185, 22195, 22391, 22396, 0, 22479, 22500, 22628, 22665, 0, 22738, + 22752, 34369, 22923, 22930, 22979, 23059, 23143, 23159, 23172, 23236, 0, 23421, 23443, 23570, + 23662, 0, 23674, 23695, 23711, 23715, 23722, 23760, 0, 23821, 23879, 23937, 23972, 23975, + 24011, 24158, 24313, 24320, 24322, 24355, 24381, 24404, 24445, 24589, 24596, 24600, 24629, + 24647, 24733, 24788, 24797, 24875, 25020, 25017, 25122, 25178, 25199, 25302, 25468, 25573, + 25721, 25796, 25808, 25897, 26013, 26170, 26146, 26155, 26160, 26163, 26184, 0, 26231, 26232, + 26253, 26299, 26331, 26344, 26439, 26497, 26515, 26520, 26523, 26620, 26653, 26787, 26890, + 26953, 0, 26946, 26980, 27045, 27087, 15286, 15299, 27113, 27125, 0, 27195, 0, 27284, 27301, + 15375, 27419, 27436, 27495, 27561, 27565, 27607, 27647, 27653, 27764, 27800, 27899, 27846, + 27953, 27961, 27967, 27992, 28052, 28074, 28123, 28125, 28228, 28254, 28337, 28353, 28432, + 28505, 28513, 28542, 28556, 28576, 28604, 28615, 28618, 28656, 28750, 28789, 28836, 28900, + 28971, 28958, 28974, 29009, 29032, 29061, 29063, 29114, 29124, 29205, 15935, 29339, 0, 29479, + 29520, 29542, 29602, 29739, 29766, 29794, 29805, 29862, 29865, 29897, 29951, 29975, 16242, + 30158, 30210, 30216, 30308, 30337, 30365, 30378, 30390, 30414, 30420, 30438, 30449, 30474, + 30489, 30541, 30542, 30586, 30592, 30612, 30688, 0, 30787, 30830, 30896, 0, 30893, 30976, + 31004, 31022, 31028, 31046, 31097, 31176, 0, 31188, 31198, 31211, 31213, 31365, 0, 31438, + 31485, 31506, 31533, 31547, 31599, 31745, 31795, 0, 31853, 31865, 31887, 31892, 31904, 31957, + 32049, 32092, 32131, 32166, 32194, 32296, 32663, 32731, 32821, 32823, 32970, 32992, 33011, + 33120, 33127, 33128, 33133, 33211, 33226, 33239, 17499, 33376, 33396, 0, 33441, 33443, 33444, + 33449, 33471, 33493, 33533, 33536, 33570, 33581, 33594, 33607, 33661, 33703, 33743, 33745, + 33761, 33793, 33798, 33887, 33904, 33907, 33925, 33950, 33978, 0, 34098, 34078, 34095, 34148, + 34170, 34188, 34210, 34251, 34285, 34303, 34308, 34309, 34320, 0, 34328, 34360, 34391, 34402, + 17821, 34421, 34488, 34556, 34695, 17898, 34826, 34832, 35022, 0, 35122, 35129, 35136, 35220, + 35318, 35399, 35421, 35425, 35445, 35536, 35654, 35673, 35689, 35741, 35913, 35944, 36271, + 36305, 36311, 36387, 36413, 36475, 0, 18500, 36602, 36638, 36653, 36692, 0, 36840, 36846, + 36872, 36909, 37015, 37043, 37054, 37060, 37061, 37063, 37103, 37140, 37142, 37154, 37155, + 37167, 37172, 37251, 37361, 37705, 37732, 37733, 37795, 37855, 37892, 37939, 37962, 37987, + 38001, 38286, 38303, 38316, 38326, 38347, 38352, 38355, 18864, 38366, 38565, 38639, 38734, + 38805, 38830, 38842, 38849, 38857, 38875, 38998, 39143, 39256, 39427, 39617, 39619, 39630, + 39638, 39682, 39688, 19479, 39725, 39774, 39782, 39812, 39818, 39838, 39886, 39909, 39928, + 39971, 40015, 40016, 40037, 40221, 40222, 40259, 40274, 40330, 40342, 40384, 40364, 40380, 0, + 40423, 40455, 40606, 40623, 40855, 0, 19970, 19983, 19986, 20009, 20014, 20039, 0, 20049, + 13318, 0, 20073, 20125, 13356, 20156, 20163, 20168, 20203, 20186, 20209, 20213, 20246, 20324, + 20279, 20286, 20312, 0, 20343, 20344, 20354, 20357, 20454, 20402, 20421, 20427, 20434, 13418, + 20466, 20499, 20508, 20558, 20563, 20579, 20643, 20616, 20626, 20627, 20629, 20650, 0, 20657, + 20666, 20667, 20676, 20679, 20723, 0, 20686, 0, 20692, 20705, 13458, 0, 20759, 0, 20832, 0, + 20851, 20867, 20875, 13500, 20888, 20899, 20909, 13511, 0, 20979, 21010, 21014, 0, 21077, + 21084, 21100, 21111, 21124, 21122, 0, 21144, 0, 21156, 21178, 21179, 21194, 21201, 0, 21239, + 21301, 21314, 0, 0, 21351, 21370, 21412, 21428, 0, 21431, 21440, 0, 13661, 13662, 21461, 13667, + 21492, 21540, 21544, 13678, 21571, 21602, 21612, 21653, 21664, 21670, 21678, 21687, 21690, + 21699, 0, 21740, 21743, 21745, 21747, 21760, 21761, 21769, 21820, 21825, 13734, 21831, 13736, + 21860, 0, 21885, 21890, 21905, 13765, 21970, 0, 0, 21951, 21961, 21964, 21969, 21981, 13786, + 21986, 0, 21993, 22056, 0, 22023, 22032, 22064, 13812, 22077, 22080, 22087, 22110, 22112, + 22125, 13829, 22152, 22156, 22173, 22184, 22194, 22213, 22221, 22239, 22248, 22262, 22263, 0, + 0, 22313, 0, 22341, 22342, 22349, 0, 22376, 22383, 22387, 22388, 22389, 22395, 0, 0, 22426, + 22429, 22430, 22440, 22487, 0, 22476, 0, 0, 22494, 22512, 13898, 22520, 22523, 22525, 22532, + 22558, 22567, 22585, 0, 22601, 22604, 22631, 22666, 22667, 22669, 22671, 22672, 22676, 22685, + 22698, 22705, 0, 22723, 22733, 22754, 22771, 22772, 22789, 22790, 22797, 22804, 0, 13969, + 22845, 13977, 22854, 13974, 0, 22879, 0, 22901, 22902, 22908, 22943, 22958, 22972, 22984, + 22989, 23006, 23015, 23022, 0, 0, 14031, 23053, 23063, 23079, 23085, 23141, 23162, 23179, + 23196, 23199, 23200, 23202, 23217, 23221, 23226, 23231, 23258, 23260, 23269, 23280, 23278, + 23285, 23304, 23319, 23348, 23372, 23378, 23400, 23407, 23425, 23428, 0, 23446, 23468, 14177, + 14178, 23502, 23510, 14188, 14187, 23537, 23549, 14197, 23555, 23593, 0, 23647, 23655, 23656, + 23664, 0, 0, 0, 0, 23688, 23690, 14273, 0, 0, 23712, 23714, 23719, 0, 23725, 23733, 0, 23753, + 0, 0, 23814, 23824, 23851, 23837, 23840, 23857, 23865, 14312, 23905, 23914, 14324, 23920, 0, + 14333, 23944, 14336, 23959, 23984, 23988, 0, 24017, 24023, 0, 24036, 24041, 14383, 14390, + 14400, 24095, 24126, 24137, 14428, 24150, 14433, 24173, 24174, 0, 24229, 24236, 24249, 24262, + 24281, 0, 24317, 24328, 0, 24350, 24391, 24419, 24434, 24446, 24463, 24482, 24519, 24523, + 24530, 24531, 24532, 24546, 24558, 24559, 24563, 14615, 24610, 24612, 14618, 24652, 24725, + 24744, 0, 24753, 24766, 24776, 24793, 24814, 24821, 24848, 24857, 24862, 24890, 14703, 24897, + 24902, 24928, 0, 24978, 24979, 24983, 24997, 25005, 0, 25045, 25053, 25077, 0, 25123, 25170, + 25185, 25188, 25211, 25197, 25203, 25241, 25301, 0, 25341, 25347, 25360, 0, 0, 25394, 25397, + 25403, 25404, 25409, 25412, 25422, 0, 25433, 0, 0, 25452, 25497, 0, 25492, 25533, 25556, 25557, + 25568, 25579, 25580, 25586, 25630, 25637, 25641, 25647, 25690, 25693, 25715, 25725, 25735, + 25745, 25759, 25803, 25804, 25813, 25815, 0, 25828, 25855, 14958, 25871, 25876, 14963, 25886, + 25906, 25924, 25940, 25963, 25978, 25988, 25994, 26034, 26037, 26040, 26047, 26057, 26068, + 15062, 26105, 26108, 26116, 26120, 26145, 26154, 26181, 26193, 26190, 15082, 0, 0, 0, 26218, + 26220, 26221, 26235, 26240, 26256, 26258, 15118, 26285, 26289, 26293, 15130, 15132, 15063, + 26369, 26386, 0, 26393, 0, 0, 26445, 26452, 26461, 0, 0, 0, 26484, 0, 26514, 0, 33635, 26640, + 26563, 26568, 26578, 26587, 26615, 0, 0, 0, 26648, 26655, 26669, 0, 26675, 26683, 26686, 26693, + 26697, 26700, 26709, 26711, 15223, 26731, 26734, 26748, 26754, 26768, 26774, 15213, 26776, + 26777, 26778, 26780, 26794, 26795, 26804, 26811, 26875, 0, 0, 26819, 26821, 26828, 26841, + 26852, 26853, 26860, 26871, 26883, 26887, 15239, 0, 15245, 26950, 26985, 26988, 27002, 27026, + 15268, 27030, 27056, 27066, 27068, 27072, 27089, 0, 0, 0, 27107, 27118, 27119, 27123, 15309, + 27124, 27134, 27153, 27162, 27165, 0, 27186, 27187, 27199, 27209, 27258, 27214, 27218, 27236, + 0, 27275, 15344, 27297, 0, 27307, 27325, 27334, 27348, 27344, 27357, 0, 0, 27377, 27378, 27379, + 27389, 0, 27403, 27407, 27408, 27409, 0, 27415, 15398, 27439, 27466, 27480, 27500, 27509, + 27514, 27521, 27547, 27566, 0, 27581, 27591, 27592, 27593, 27610, 27622, 27623, 27630, 27650, + 27658, 27662, 27702, 0, 27725, 27739, 27757, 27780, 27785, 15555, 27796, 27799, 27821, 27842, + 15570, 27868, 27881, 27885, 0, 27904, 27940, 27942, 27943, 27751, 27951, 27964, 27995, 28000, + 28016, 28032, 28033, 28042, 28045, 28049, 28056, 0, 0, 0, 0, 28075, 28078, 28084, 28098, 27956, + 28104, 28110, 28127, 28150, 28214, 28190, 15633, 28210, 28232, 28233, 28235, 28236, 28239, + 28243, 28244, 28247, 28259, 15646, 28307, 28327, 28340, 28355, 28469, 28395, 28409, 28411, + 28426, 28428, 28440, 28453, 28470, 28476, 0, 28498, 28503, 28512, 28520, 28560, 28566, 28606, + 28575, 28581, 28591, 15716, 28616, 28617, 28649, 0, 28668, 28672, 28682, 28707, 0, 28730, + 28739, 28743, 28747, 15770, 28773, 28777, 28782, 28790, 28806, 28823, 0, 28831, 28849, 0, + 28908, 28874, 28881, 28931, 28934, 28936, 28940, 15808, 28975, 29008, 29011, 29022, 15828, + 29078, 29056, 29083, 29088, 29090, 29102, 29103, 0, 29145, 29148, 29191, 15877, 29236, 29241, + 29250, 29271, 29283, 0, 29294, 29295, 29304, 29311, 29326, 0, 29358, 29360, 29377, 15968, + 29388, 15974, 15976, 29427, 29434, 29447, 29458, 29464, 29465, 16003, 29497, 29484, 29491, + 29501, 29522, 16020, 29547, 0, 29550, 29551, 29553, 29569, 29578, 29588, 29592, 29596, 29605, + 29625, 29631, 29637, 29643, 29665, 29671, 29689, 29715, 29690, 29697, 29779, 29760, 29763, + 29778, 29789, 29825, 29832, 0, 29842, 29847, 29849, 29857, 29861, 29866, 29881, 29883, 29882, + 29910, 29912, 29931, 0, 29946, 0, 29984, 29988, 29994, 16215, 0, 30013, 30014, 30016, 30024, + 30032, 30034, 30066, 30065, 30074, 30077, 30078, 30092, 16245, 30114, 16247, 30128, 30135, + 30143, 30144, 30150, 30159, 30163, 30173, 30175, 30176, 30183, 30190, 30193, 30211, 30232, + 30215, 30223, 16302, 0, 30227, 30235, 30236, 0, 30245, 30248, 30268, 30259, 0, 16329, 30273, 0, + 30281, 30293, 16343, 30318, 30357, 30369, 30368, 30375, 30376, 30383, 0, 30409, 0, 30440, 0, + 30487, 30490, 30509, 30517, 0, 16441, 0, 0, 30552, 0, 30588, 0, 16472, 30618, 30623, 30626, + 30628, 30686, 30687, 30692, 30698, 30700, 30715, 0, 30725, 30729, 30733, 30745, 30764, 30791, + 30826, 0, 30858, 30868, 30884, 30877, 30879, 30907, 30933, 30950, 30969, 30970, 30974, 0, + 30992, 31003, 31013, 31050, 31064, 16645, 31079, 31090, 31125, 31137, 31145, 31156, 31170, + 31175, 31180, 31181, 31190, 16712, 0, 0, 16719, 31242, 31253, 31259, 16739, 31288, 31303, + 31318, 31321, 31324, 31327, 31335, 31338, 31349, 31362, 31370, 31376, 31404, 0, 16820, 31417, + 31422, 16831, 31436, 31464, 31476, 0, 0, 0, 31549, 31530, 31534, 31535, 16870, 16883, 31615, + 31553, 16878, 31573, 31609, 31588, 31590, 31603, 0, 16903, 31632, 31643, 16910, 31669, 31676, + 31685, 31690, 0, 0, 31700, 31702, 31706, 31722, 31728, 31747, 31758, 31813, 31818, 31831, + 31838, 31841, 31849, 31855, 0, 0, 0, 31910, 0, 31926, 31927, 0, 31940, 0, 31949, 0, 0, 31974, + 0, 31989, 32003, 17094, 32018, 32030, 0, 0, 32061, 32062, 32064, 32071, 0, 0, 17110, 32090, + 32106, 32112, 17117, 32127, 0, 32136, 32151, 0, 32157, 32167, 32170, 32182, 32192, 32215, + 32217, 32230, 17154, 0, 32265, 32272, 32279, 32285, 32295, 32300, 32325, 32373, 32382, 32390, + 32391, 17195, 32410, 17219, 32572, 32571, 32574, 32579, 13505, 0, 0, 32611, 32612, 32621, + 32637, 32638, 32656, 20859, 0, 32662, 32668, 32685, 0, 32707, 32719, 32739, 32754, 32778, + 32776, 32790, 32812, 32816, 32835, 32870, 32891, 32921, 32924, 32932, 32935, 32952, 0, 32965, + 32981, 32998, 33037, 33013, 33019, 17390, 33077, 33054, 17392, 33060, 33063, 33068, 0, 33085, + 17416, 33129, 17431, 17436, 33157, 17442, 33176, 33202, 33217, 33219, 33238, 33243, 0, 33252, + 0, 33260, 33277, 33279, 0, 33284, 0, 33305, 33314, 0, 33340, 33353, 33349, 0, 17526, 17530, + 33367, 0, 33372, 33379, 0, 17553, 33405, 33407, 33411, 33418, 33427, 33447, 33448, 33458, + 33460, 33466, 33468, 33506, 33512, 33527, 33543, 33544, 33548, 33620, 33563, 33565, 33584, + 33596, 33604, 33623, 17598, 17620, 17587, 33684, 33685, 33691, 33693, 33737, 33744, 33748, + 33757, 33765, 33785, 33813, 0, 33815, 33849, 33871, 33873, 33874, 33881, 33882, 33884, 0, + 33893, 33912, 33916, 33921, 17677, 33943, 33958, 33982, 17672, 33998, 33999, 34003, 0, 34023, + 34026, 34031, 34033, 34042, 34075, 34084, 34085, 34091, 34127, 34159, 17731, 34129, 34145, + 34146, 0, 34171, 34173, 34175, 34177, 34182, 34195, 34205, 34207, 0, 0, 0, 34236, 34247, 34250, + 34264, 34265, 34271, 34273, 34278, 34294, 34304, 34321, 34334, 34337, 34340, 34343, 0, 34361, + 34364, 0, 34368, 34387, 34390, 34423, 34439, 34441, 34460, 34461, 34481, 34483, 34497, 34499, + 34513, 34517, 34519, 34531, 34534, 17848, 34565, 34567, 34574, 34576, 34591, 34593, 34595, + 34609, 34618, 34624, 34627, 34641, 34648, 34660, 34661, 34674, 34684, 0, 0, 34727, 34697, + 34699, 34707, 34720, 0, 17893, 34750, 0, 34753, 34766, 34783, 0, 34787, 34789, 34790, 34794, + 34835, 34856, 34862, 34866, 34876, 17935, 34890, 34904, 0, 0, 34921, 0, 34927, 34976, 35004, + 35008, 0, 35025, 35027, 17985, 35073, 0, 35127, 0, 35138, 35141, 35145, 0, 35170, 35209, 35216, + 35231, 35248, 35255, 35288, 35307, 18081, 35315, 35325, 35327, 18095, 35345, 35348, 0, 35361, + 35381, 35390, 35397, 35405, 35416, 35502, 35472, 35511, 35543, 35580, 0, 35594, 35589, 35597, + 35612, 35629, 18188, 35665, 35678, 35702, 35713, 35723, 35732, 35733, 35897, 0, 35901, 0, 0, + 35909, 35919, 35927, 35945, 35949, 0, 35987, 35986, 35993, 18276, 35995, 36054, 36053, 0, + 36081, 0, 36105, 36110, 36296, 36313, 36364, 18429, 36349, 36358, 0, 36372, 36374, 36385, + 36386, 36391, 0, 18454, 36406, 36409, 36436, 36450, 36461, 36463, 36504, 36510, 36533, 36539, + 0, 18510, 0, 36608, 36616, 36651, 36672, 36682, 36696, 0, 36772, 36788, 0, 36801, 36806, 64036, + 36810, 36813, 36819, 36821, 36849, 36853, 36859, 36876, 36919, 0, 36931, 36957, 0, 0, 36997, + 37004, 37008, 37025, 18613, 37040, 37046, 37059, 37064, 0, 37084, 37087, 0, 37110, 37106, + 37120, 37099, 37118, 37119, 37124, 37126, 37144, 37150, 37175, 37177, 37190, 37191, 37207, + 37209, 37236, 37241, 37253, 37299, 37302, 37315, 37316, 0, 0, 37356, 37377, 37398, 37399, 0, + 37442, 37450, 37462, 37473, 37477, 37480, 0, 37500, 37501, 37503, 37513, 37517, 37527, 37529, + 37535, 37547, 0, 0, 37554, 37567, 37568, 37574, 37582, 37605, 37649, 0, 0, 37623, 37673, 0, 0, + 37713, 37722, 37739, 37745, 37747, 37793, 0, 0, 37768, 37771, 37775, 37790, 37877, 0, 0, 37873, + 37831, 37852, 37863, 37897, 37910, 37911, 37883, 37938, 37947, 0, 0, 37997, 37999, 38265, + 38278, 38284, 38285, 0, 0, 38344, 0, 0, 38444, 38451, 38452, 0, 38460, 38497, 0, 38530, 0, + 38554, 0, 18919, 38579, 38586, 38589, 18938, 0, 38616, 38618, 38621, 18948, 38676, 38691, + 18985, 38710, 38721, 38727, 38743, 38747, 38762, 0, 0, 38806, 38814, 38833, 38834, 38846, + 38860, 38865, 38868, 38872, 38881, 38897, 38916, 38925, 38932, 38934, 19132, 0, 38962, 38963, + 38949, 38983, 39014, 39083, 39085, 39088, 0, 39095, 39099, 39100, 39106, 39111, 39115, 39137, + 39139, 39146, 39152, 39153, 39155, 39176, 19259, 0, 39190, 39191, 0, 39194, 39195, 39196, 0, + 39217, 39226, 39227, 39228, 39233, 39238, 39246, 39264, 39331, 39334, 39357, 39359, 39363, + 39380, 39385, 39390, 0, 39408, 39417, 39420, 39434, 39441, 39450, 39456, 39473, 39492, 39500, + 39512, 19394, 39599, 19402, 39607, 19410, 39609, 0, 39622, 39632, 39634, 39637, 39648, 39653, + 39657, 39692, 39696, 39698, 39702, 39708, 39723, 39741, 19488, 39755, 39779, 39781, 39787, + 39788, 39798, 39799, 39846, 39852, 0, 39858, 39864, 39870, 39923, 39896, 39901, 39914, 39919, + 39918, 0, 0, 0, 39958, 39960, 39961, 39962, 39965, 39970, 39977, 0, 39985, 39991, 40005, 40028, + 0, 40009, 40010, 0, 40020, 40024, 40027, 40029, 40031, 40041, 40042, 40043, 40045, 40046, + 40050, 40053, 40058, 40166, 40178, 40203, 0, 40209, 40215, 40216, 0, 19652, 0, 40242, 19665, + 40266, 40287, 40290, 0, 0, 40307, 40310, 40311, 40324, 40345, 40353, 40383, 40373, 40377, + 40381, 40393, 40410, 40416, 40419, 19719, 40458, 40450, 40461, 40476, 40571, 0, 40576, 40581, + 40603, 0, 40637, 0, 40671, 40703, 40706, 19831, 40707, 40762, 40765, 40774, 40787, 40789, + 40792, 0, 40797, 0, 40809, 40813, 40816, 0, 0, 13844, 14509, 15820, 16348, 17854, 17936, 19326, + 19512, 19681, 19980, 20003, 20004, 20089, 20211, 20236, 20249, 20267, 20270, 20273, 20356, + 20382, 20407, 20484, 20492, 20556, 20575, 20578, 20599, 20622, 20638, 20642, 20675, 20712, + 20721, 20734, 20743, 20748, 20749, 20750, 20787, 20792, 20852, 20868, 20920, 20922, 20936, + 20943, 20945, 20947, 20948, 20952, 20959, 20997, 21030, 21032, 21035, 21041, 21042, 21045, + 21052, 21082, 21088, 21102, 21112, 21113, 21130, 21132, 21217, 21225, 21233, 21251, 21265, + 21279, 21293, 21298, 21309, 21349, 21357, 21369, 21374, 21396, 21401, 21418, 21423, 21434, + 21441, 21444, 21445, 21472, 21523, 21546, 21553, 21556, 21557, 21580, 21671, 21674, 21681, + 21691, 21710, 21738, 21756, 21765, 21768, 21781, 21799, 21802, 21814, 21841, 21862, 21903, + 21906, 21908, 21924, 21938, 21955, 21958, 21971, 21979, 21996, 21998, 22001, 22006, 22008, + 22021, 22029, 22033, 22034, 22060, 22069, 22073, 22093, 22100, 22149, 22175, 22182, 22199, + 22220, 22223, 22233, 22241, 22251, 22253, 22257, 22279, 22284, 22298, 22299, 22301, 22316, + 22318, 22333, 22334, 22367, 22379, 22381, 22394, 22403, 22423, 22446, 22485, 22503, 22541, + 22566, 22605, 22607, 22623, 22637, 22655, 22657, 22680, 22716, 22815, 22819, 22873, 22905, + 22935, 22959, 22963, 23007, 23025, 23032, 23218, 23224, 23274, 23286, 23323, 23325, 23329, + 23352, 23479, 23511, 23520, 23583, 23594, 23596, 23606, 23641, 23644, 23661, 23773, 23809, + 23860, 23869, 23897, 23934, 23939, 24007, 24057, 24104, 24114, 24117, 24155, 24168, 24170, + 24183, 24192, 24203, 24243, 24253, 24273, 24276, 24277, 24397, 24492, 24554, 24583, 24649, + 24660, 24679, 24763, 24772, 24829, 24842, 24854, 24874, 24886, 24926, 24932, 24955, 24957, + 24959, 24989, 25016, 25052, 25058, 25061, 25064, 25092, 25095, 25137, 25145, 25149, 25210, + 25232, 25256, 25306, 25332, 25366, 25386, 25398, 25414, 25419, 25427, 25457, 25461, 25471, + 25474, 25482, 25518, 25519, 25578, 25592, 25593, 25618, 25624, 25632, 25636, 25642, 25653, + 25661, 25663, 25682, 25695, 25716, 25744, 25752, 25753, 25772, 25779, 25837, 25840, 25883, + 25887, 25902, 25929, 25952, 26002, 26005, 26036, 26046, 26056, 26062, 26064, 26079, 26238, + 26251, 26252, 26291, 26304, 26319, 26405, 26421, 26453, 26496, 26511, 26513, 26532, 26545, + 26549, 26558, 26664, 26758, 26859, 26869, 26903, 26931, 26936, 26971, 26981, 27048, 27051, + 27055, 27109, 27121, 27210, 27221, 27239, 27249, 27311, 27336, 27337, 27395, 27451, 27455, + 27517, 27518, 27568, 27639, 27641, 27652, 27657, 27661, 27692, 27722, 27730, 27732, 27769, + 27820, 27828, 27858, 28001, 28028, 28089, 28144, 28229, 28275, 28283, 28285, 28297, 28348, + 28378, 28379, 28454, 28457, 28464, 28551, 28573, 28590, 28599, 28685, 28704, 28745, 28824, + 28848, 28885, 28886, 28997, 29106, 29172, 29207, 29215, 29251, 29263, 29264, 29274, 29280, + 29288, 29303, 29316, 29385, 29413, 29428, 29442, 29451, 29470, 29474, 29498, 29499, 29517, + 29528, 29543, 29810, 29871, 29919, 29924, 29940, 29947, 29974, 29985, 30015, 30046, 30105, + 30116, 30145, 30148, 30156, 30167, 30172, 30177, 30191, 30212, 30220, 30237, 30258, 30264, + 30277, 30282, 30303, 30381, 30397, 30425, 30443, 30448, 30457, 30464, 30478, 30498, 30504, + 30511, 30521, 30526, 30533, 30538, 30543, 30558, 30564, 30567, 30572, 30596, 30604, 30605, + 30614, 30631, 30639, 30647, 30654, 30665, 30673, 30681, 30705, 30775, 30812, 30846, 30872, + 30881, 30897, 30899, 30921, 30931, 30988, 31007, 31015, 31016, 31039, 31042, 31060, 31083, + 31100, 31147, 31172, 31210, 31234, 31244, 31280, 31290, 31300, 31360, 31366, 31380, 31413, + 31421, 31486, 31531, 31607, 31648, 31660, 31664, 31720, 31730, 31736, 31740, 31742, 31753, + 31784, 31791, 31810, 31826, 31827, 31835, 31836, 31837, 31858, 31869, 31879, 31902, 31930, + 31943, 31955, 31962, 32060, 32077, 32130, 32133, 32141, 32145, 32158, 32179, 32185, 32208, + 32229, 32245, 32246, 32303, 32310, 32324, 32367, 32376, 32385, 32573, 32603, 32605, 32613, + 32625, 32639, 32640, 32651, 32674, 32765, 32766, 32767, 32775, 32781, 32798, 32825, 32904, + 32910, 32975, 32980, 33005, 33008, 33015, 33018, 33022, 33027, 33047, 33072, 33111, 33135, + 33139, 33163, 33168, 33179, 33182, 33227, 33237, 33245, 33246, 33249, 33263, 33270, 33280, + 33291, 33299, 33300, 33306, 33338, 33348, 33389, 33412, 33417, 33425, 33450, 33456, 33488, + 33514, 33519, 33526, 33622, 33656, 33784, 33788, 33880, 33939, 33969, 33981, 34043, 34118, + 34134, 34141, 34181, 34200, 34370, 34374, 34496, 34580, 34594, 34606, 34617, 34653, 34683, + 34700, 34702, 34711, 34712, 34718, 34723, 34734, 34751, 34761, 34778, 34840, 34843, 34861, + 34874, 34885, 34891, 34894, 34901, 34906, 34926, 34970, 34971, 34972, 35021, 35040, 35055, + 35086, 35087, 35110, 35125, 35162, 35164, 35179, 35184, 35196, 35237, 35253, 35260, 35285, + 35401, 35415, 35431, 35454, 35462, 35478, 35510, 35529, 35537, 35549, 35564, 35573, 35590, + 35599, 35601, 35653, 35666, 35693, 35704, 35708, 35710, 35717, 35743, 35915, 35923, 35963, + 36026, 36037, 36041, 36050, 36076, 36085, 36087, 36097, 36099, 36119, 36124, 36206, 36241, + 36255, 36267, 36274, 36309, 36327, 36337, 36338, 36340, 36353, 36363, 36390, 36401, 36416, + 36417, 36429, 36431, 36444, 36449, 36457, 36465, 36469, 36471, 36489, 36496, 36501, 36506, + 36519, 36521, 36525, 36584, 36592, 36615, 36632, 36645, 36647, 36652, 36661, 36666, 36675, + 36679, 36689, 36693, 36768, 36769, 36770, 36773, 36868, 36891, 36911, 36940, 36955, 36976, + 36980, 36985, 37003, 37016, 37024, 37042, 37053, 37065, 37104, 37125, 37157, 37210, 37223, + 37242, 37258, 37265, 37269, 37296, 37307, 37309, 37314, 37317, 37376, 37385, 37411, 37494, + 37518, 37551, 37563, 37564, 37569, 37571, 37573, 37576, 37652, 37683, 37686, 37720, 37759, + 37762, 37770, 37819, 37836, 37862, 37881, 37890, 37901, 37902, 37934, 37964, 38280, 38305, + 38335, 38342, 38345, 38353, 38354, 38368, 38372, 38374, 38436, 38449, 38456, 38461, 38484, + 38516, 38523, 38527, 38529, 38531, 38537, 38550, 38574, 38659, 38683, 38689, 38690, 38696, + 38705, 38759, 38774, 38781, 38783, 38809, 38815, 38828, 38841, 38861, 38880, 38895, 38919, + 38950, 38958, 39010, 39011, 39092, 39109, 39170, 39185, 39189, 39221, 39240, 39252, 39262, + 39393, 39436, 39440, 39459, 39489, 39505, 39613, 39614, 39681, 39689, 39691, 39693, 39694, + 39705, 39733, 39752, 39765, 39784, 39808, 39814, 39824, 39837, 39856, 39871, 39880, 39935, + 39938, 39964, 39989, 40004, 40022, 40033, 40040, 40240, 40253, 40298, 40315, 40421, 40425, + 40435, 40570, 40578, 40579, 40580, 40624, 40676, 40688, 40690, 40713, 40719, 40724, 40731, + 40738, 40742, 40746, 40747, 40756, 40794, 40815, 40862, 40869, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 13790, 40895, 40896, 40897, 40898, 0, 19982, 20006, 0, 20339, 20566, 20717, 20843, 0, 20958, + 20989, 0, 21092, 21105, 21106, 21311, 0, 21568, 0, 21916, 21931, 22025, 22190, 22190, 0, 0, + 22222, 22254, 22486, 22589, 22617, 22863, 22865, 22880, 22882, 23258, 23386, 23411, 23420, + 23475, 0, 24131, 0, 24291, 24376, 24481, 24541, 24930, 25010, 25080, 14756, 14776, 0, 0, 25846, + 14940, 0, 25950, 0, 25991, 25993, 0, 25998, 15044, 15051, 26081, 26215, 26222, 26305, 0, 14981, + 26368, 26465, 26564, 26626, 26941, 26974, 0, 27292, 15347, 27384, 0, 27704, 27818, 40908, + 28132, 15665, 28168, 28274, 28363, 28373, 28379, 28507, 28507, 28516, 28532, 0, 29246, 15936, + 14497, 29642, 29885, 30045, 30140, 0, 30216, 30308, 30313, 0, 30519, 30590, 31143, 31153, + 31422, 31712, 31824, 32009, 32178, 32178, 32574, 32737, 32786, 0, 32982, 33033, 33065, 33292, + 33307, 33344, 0, 33748, 33807, 0, 34026, 0, 34129, 34147, 34255, 34382, 34402, 34442, 34882, + 34935, 35137, 35670, 35670, 35676, 18207, 0, 35946, 35961, 36042, 36199, 18462, 36611, 36676, + 36805, 36820, 36854, 36983, 36983, 37001, 37002, 37032, 37197, 37609, 37685, 37771, 0, 38349, + 38442, 38552, 38567, 38911, 38911, 0, 39201, 39255, 39848, 39854, 39865, 39944, 39972, 39995, + 0, 40166, 40384, 40386, 0, 39151, 0, 31496, 25711, 31806, 31605, 29973, 35357, 24674, 28792, + 21417, 31874, 38553, 34388, 33137, 37749, 21676, 29409, 26775, 39851, 21449, 26454, 29990, + 29969, 31432, 25402, 36929, 39361, 26023, 37340, 38829, 33426, 31870, 29242, 34821, 34563, + 39709, 39724, 20482, 20958, 21255, 23532, 24266, 26142, 26391, 28746, 20958, 21857, 27706, + 31328, 0, 34819, 38315, 38741, 0, 0, 900, 901, 186, 170, 8470, 272, 294, 306, 319, 330, 358, + 307, 312, 320, 329, 359, 266, 278, 286, 290, 288, 304, 302, 310, 317, 315, 325, 342, 370, 471, + 475, 473, 469, 372, 374, 267, 279, 501, 287, 289, 303, 311, 318, 316, 326, 343, 371, 373, 375, + 8494, 8710, 8719, 8804, 8805, 9674, 900, 901, 186, 170, 8470, 272, 294, 306, 319, 330, 358, + 307, 312, 320, 329, 359, 266, 278, 286, 290, 288, 304, 302, 310, 317, 315, 325, 342, 370, 471, + 475, 473, 469, 372, 374, 267, 279, 501, 287, 289, 303, 311, 318, 316, 326, 343, 371, 373, 375, + 8494, 8710, 8719, 8804, 8805, 9674, 902, 904, 905, 906, 938, 908, 910, 939, 911, 940, 941, 942, + 943, 970, 912, 972, 973, 971, 944, 974, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, + 1035, 1036, 1038, 1039, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1118, + 1119, 12494, 12495, 12498, 12501, 12504, 12507, 12510, 12511, 12512, 12513, 12514, 12516, + 12518, 12520, 12521, 12522, 12523, 12524, 12525, 12527, 12528, 12529, 12530, 12531, 65, 66, 67, + 68, 69, 70, 32066, 72, 0, 0, 0, 0, 0, 27573, 12468, 12511, 49, 50, 51, 52, 53, 54, 55, 56, 57, + 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 48, 49, 50, 51, 52, + 53, 54, 55, 56, 57, 24180, 78, 22825, 20877, 26032, 26144, 22768, 21069, 24460, 32066, 31435, + 20132, 0, 21127, 21496, 35299, 26666, 27671, 20108, 22810, 25991, 25163, 0, 0, 21452, 0, 0, 0, + 0, 12487, 0, 8212, 8212, 8212, 9361, 9362, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9917, 10175, 0, 0, 900, 901, 186, 170, 8470, 272, 294, 306, 319, 330, 358, 307, 312, 320, 329, + 359, 266, 278, 286, 290, 288, 304, 302, 310, 317, 315, 325, 342, 370, 471, 475, 473, 469, 372, + 374, 267, 279, 501, 287, 289, 303, 311, 318, 316, 326, 343, 371, 373, 375, 8494, 8710, 8719, + 8804, 8805, 9674, 900, 901, 186, 170, 8470, 272, 294, 306, 319, 330, 358, 307, 312, 320, 329, + 359, 266, 278, 286, 290, 288, 304, 302, 310, 317, 315, 325, 342, 370, 471, 475, 473, 469, 372, + 374, 267, 279, 501, 287, 289, 303, 311, 318, 316, 326, 343, 371, 373, 375, 8494, 8710, 8719, + 8804, 8805, 9674, 28322, 25074, 34322, 35711, 20021, 20060, 20067, 20072, 20084, 20085, 20119, + 20143, 20187, 20194, 20200, 20207, 20222, 20226, 20232, 20242, 20247, 20275, 20277, 20288, + 20290, 20299, 20300, 20306, 20323, 20334, 20337, 20345, 20353, 20361, 20364, 20366, 20368, + 20371, 20377, 20383, 20409, 20411, 20412, 20413, 20416, 20417, 20422, 20424, 20428, 20444, + 20450, 20464, 20476, 20487, 20490, 20503, 20509, 20528, 20530, 20531, 20533, 20549, 20554, + 20561, 20562, 20569, 20576, 20583, 20589, 20593, 20609, 20611, 20612, 20614, 20618, 20624, + 20635, 20639, 20640, 20641, 20655, 20656, 20665, 20669, 20672, 20691, 20700, 20701, 20703, + 20706, 20708, 20726, 20730, 20722, 20761, 20764, 20765, 20771, 20775, 20776, 20780, 20781, + 20783, 20785, 20788, 20793, 20802, 20815, 20819, 20824, 20838, 20862, 20878, 20927, 20930, + 20946, 20949, 20965, 20978, 20983, 21016, 21026, 21061, 21080, 21087, 21120, 21125, 21141, + 21142, 21143, 21146, 21157, 21159, 21168, 21174, 21175, 21176, 21181, 21188, 21190, 21199, + 21204, 21212, 21221, 21224, 21226, 21228, 21236, 21238, 21260, 21267, 21272, 21275, 21278, + 21285, 21287, 21288, 21289, 21291, 21292, 21296, 21308, 21337, 21339, 21349, 21379, 21383, + 21384, 21390, 21409, 21429, 21432, 21437, 21455, 21458, 21459, 21470, 21472, 21479, 21506, + 21530, 21537, 21551, 21572, 21575, 21583, 21598, 21604, 21607, 21609, 21613, 21614, 21633, + 21635, 21637, 21641, 21649, 21663, 21706, 21728, 21750, 21758, 21772, 21773, 21810, 21819, + 21821, 21833, 21837, 21848, 21850, 21851, 21887, 21907, 21911, 21923, 21953, 21963, 21975, + 21976, 21982, 22015, 22021, 22026, 22041, 22067, 22076, 22081, 22083, 22084, 22086, 22113, + 22114, 22115, 22133, 22148, 22155, 22183, 22187, 22206, 22219, 22224, 22236, 22245, 22246, + 22247, 22273, 22274, 22289, 22304, 22306, 22308, 22309, 22314, 22335, 22354, 22370, 22375, + 22382, 22385, 22393, 22398, 22401, 22420, 22425, 22431, 22433, 22421, 22439, 22441, 22461, + 22493, 22505, 22526, 22531, 22536, 22497, 22540, 22555, 22559, 22573, 22591, 22608, 22613, + 22632, 22648, 22663, 22664, 22668, 22678, 22688, 22689, 22690, 22694, 22724, 22722, 22728, + 22742, 22749, 22753, 22790, 22802, 22803, 22813, 22817, 22824, 22832, 22835, 22837, 22838, + 22847, 22851, 22866, 22878, 22891, 22895, 22898, 22907, 22924, 22926, 22933, 22951, 22957, + 22960, 22967, 22977, 22980, 23023, 23026, 23028, 23031, 23040, 23054, 23058, 23070, 23076, + 23080, 23082, 23088, 23108, 23109, 23112, 23116, 23120, 23134, 23163, 23184, 23187, 23190, + 23193, 23227, 23238, 23240, 23247, 23293, 23297, 23371, 23390, 23406, 23430, 23438, 23440, + 23441, 23444, 23464, 23465, 23469, 23471, 23473, 23474, 23482, 23484, 23489, 23501, 23503, + 23513, 23514, 23535, 23540, 23564, 23575, 23590, 23598, 23602, 23605, 23642, 23668, 23669, + 23675, 23677, 23687, 23698, 23709, 23730, 23732, 23767, 23790, 23793, 23794, 23826, 23843, + 23871, 23880, 23893, 23889, 23903, 23904, 23906, 23908, 23929, 23930, 23935, 23946, 23955, + 23957, 23963, 23967, 23979, 24003, 24014, 24025, 24071, 24077, 24096, 24139, 24144, 24145, + 24156, 24176, 24206, 24226, 24228, 24241, 24268, 24270, 24284, 24286, 24293, 24299, 24326, + 24345, 24356, 24363, 24364, 24366, 24368, 24383, 24388, 24411, 24416, 24431, 24436, 24437, + 24440, 24442, 24461, 24470, 24477, 24491, 24496, 24497, 24520, 24528, 24529, 24552, 24556, + 24562, 24566, 24570, 24586, 24595, 24607, 24621, 24640, 24648, 24657, 24662, 24663, 24689, + 24702, 24706, 24710, 24712, 24718, 24721, 24723, 24728, 24734, 24738, 24741, 24759, 24770, + 24777, 24778, 24782, 24783, 24802, 24805, 24828, 24834, 24839, 24844, 24855, 24866, 24881, + 24885, 24889, 24901, 24905, 24940, 24946, 24952, 24960, 24961, 24963, 24964, 24971, 24988, + 24992, 25002, 25024, 25025, 25038, 25039, 25054, 25057, 25063, 25065, 25068, 25069, 25071, + 25089, 25091, 25116, 25120, 25127, 25131, 25154, 25156, 25168, 25172, 25180, 25213, 25229, + 25230, 25231, 25267, 25270, 25271, 25274, 25278, 25279, 25294, 25322, 25330, 25348, 25355, + 25363, 25385, 25389, 25418, 25426, 25428, 25432, 25435, 25446, 25453, 25464, 25493, 25498, + 25508, 25510, 25517, 25537, 25541, 25544, 25550, 25555, 25587, 25610, 25648, 25675, 25679, + 25683, 25692, 25697, 25699, 25733, 25743, 25755, 25761, 25763, 25766, 25768, 25789, 25801, + 25809, 25833, 25834, 25845, 25857, 25864, 25865, 25866, 25875, 25894, 25905, 25914, 25916, + 25917, 25923, 25936, 25938, 25951, 25981, 26008, 26016, 26019, 26022, 26030, 26035, 26070, + 26072, 26079, 26100, 26101, 26110, 26111, 26125, 26129, 26130, 26134, 26141, 26147, 26150, + 26153, 26169, 26167, 26176, 26182, 26186, 26200, 26208, 26229, 26239, 26233, 26236, 26266, + 26267, 26268, 26271, 26293, 26306, 26307, 26316, 26318, 26324, 26335, 26347, 26350, 26375, + 26396, 26400, 26402, 26430, 26437, 26476, 26500, 26510, 26518, 26521, 26556, 26557, 26562, + 26565, 26569, 26588, 26593, 26598, 26610, 26614, 26644, 26649, 26663, 26671, 26687, 26698, + 26712, 26735, 26736, 26737, 26745, 26747, 26760, 26785, 26793, 26798, 26833, 26835, 26844, + 26845, 26858, 26870, 26877, 26886, 26889, 26896, 26902, 26929, 26949, 26958, 26982, 26992, + 26993, 27003, 27021, 27041, 27064, 27077, 27080, 27134, 27136, 27139, 27168, 27172, 27191, + 27221, 27242, 27265, 27270, 27271, 27291, 27312, 27313, 27316, 27326, 27327, 27340, 27349, + 27350, 27376, 27388, 27394, 27398, 27399, 27401, 27432, 27435, 27446, 27469, 27474, 27485, + 27499, 27502, 27504, 27525, 27543, 27551, 27552, 27554, 27555, 27560, 27564, 27576, 27577, + 27587, 27588, 27619, 27666, 27673, 27679, 27686, 27687, 27688, 27694, 27707, 27723, 27727, + 27755, 27768, 27783, 27807, 27824, 27826, 27853, 27855, 27857, 27879, 27890, 27892, 27911, + 27919, 27923, 27930, 27944, 27999, 28007, 28050, 28055, 28087, 28093, 28128, 28130, 28133, + 28143, 28148, 28160, 28164, 28219, 28242, 28253, 28258, 28264, 28301, 28313, 28320, 28333, + 28334, 28339, 28347, 28352, 28360, 28365, 28367, 28397, 28398, 28420, 28424, 28429, 28438, + 28443, 28475, 28461, 28495, 28499, 28509, 28524, 28547, 28563, 28582, 28592, 28613, 28648, + 28669, 28695, 28719, 28724, 28727, 28740, 28744, 28757, 28820, 28822, 28827, 28852, 28922, + 28933, 28939, 28973, 28984, 28993, 29003, 29010, 29015, 29018, 29068, 29082, 29104, 29119, + 29120, 29132, 29146, 29176, 29192, 29193, 29203, 29210, 29220, 29231, 29253, 29262, 29278, + 29291, 29297, 29307, 29308, 29321, 29331, 29352, 29397, 29398, 29400, 29407, 29438, 29453, + 29459, 29490, 29493, 29526, 29533, 29534, 29535, 29536, 29545, 29561, 29568, 29582, 29584, + 29587, 29591, 29610, 29613, 29638, 29644, 29651, 29661, 29670, 29687, 29691, 29695, 29696, + 29713, 29741, 29799, 29800, 29806, 29839, 29841, 29850, 29870, 29873, 29874, 29900, 29904, + 29907, 29912, 29915, 29928, 29930, 29935, 29948, 29958, 29970, 29991, 29993, 30006, 30009, + 30019, 30023, 30039, 30047, 30049, 30075, 30076, 30085, 30101, 30108, 30138, 30226, 30243, + 30249, 30265, 30266, 30272, 30276, 30297, 30341, 30348, 30349, 30367, 30370, 30371, 30401, + 30411, 30420, 30432, 30454, 30470, 30482, 30484, 30485, 30492, 30510, 30525, 30530, 30546, + 30550, 30551, 30576, 30579, 30580, 30605, 30626, 30638, 30641, 30645, 30659, 30674, 30677, + 30712, 30734, 30737, 30749, 30755, 30788, 30792, 30796, 30802, 30814, 30816, 30817, 30819, + 30863, 30888, 30892, 30898, 30909, 30911, 30919, 30930, 30934, 30939, 30943, 30954, 30963, + 30966, 30975, 30982, 31002, 31006, 31008, 31017, 31021, 31029, 31044, 31051, 31055, 31057, + 31081, 31099, 31102, 31116, 31121, 31123, 31132, 31144, 31151, 31183, 31197, 31200, 31202, + 31205, 31217, 31224, 31228, 31239, 31265, 31271, 31275, 31279, 31284, 31285, 31304, 31317, + 31333, 31358, 31371, 31377, 31390, 31433, 31451, 31465, 31468, 31473, 31483, 31519, 31523, + 31529, 31536, 31540, 31551, 31552, 31594, 31620, 31625, 31630, 31638, 31653, 31666, 31670, + 31674, 31675, 31677, 31682, 31688, 31707, 31732, 31733, 31737, 31738, 31746, 31748, 31750, + 31756, 31769, 31771, 31781, 31788, 31796, 31801, 31802, 31814, 31829, 31834, 31843, 31849, + 31868, 31878, 31920, 31931, 31951, 31956, 31977, 32015, 32017, 32022, 32038, 32042, 32045, + 32081, 32087, 32101, 32103, 32120, 32123, 32129, 32150, 32195, 32196, 32197, 32198, 32205, + 32206, 32256, 32226, 32234, 32237, 32250, 32284, 32301, 32307, 32319, 32334, 32336, 32344, + 32351, 32357, 32405, 32413, 32414, 32575, 32604, 32614, 32640, 32653, 32655, 32678, 32682, + 32692, 32700, 32704, 32712, 32744, 32783, 32787, 32797, 32799, 32800, 32814, 32820, 32830, + 32832, 32836, 32868, 32877, 32897, 32953, 32968, 32973, 32978, 33006, 33010, 33014, 33017, + 33035, 33052, 33056, 33084, 33093, 33095, 33106, 33121, 33143, 33158, 33166, 33174, 33186, + 33198, 33221, 33230, 33259, 33264, 33265, 33266, 33269, 33272, 33280, 33295, 33309, 33320, + 33347, 33358, 33361, 33366, 33383, 33403, 33408, 33409, 33415, 33428, 33430, 33432, 33434, + 33435, 33440, 33498, 33504, 33508, 33517, 33546, 33547, 33566, 33567, 33569, 33580, 33582, + 33587, 33591, 33597, 33602, 33613, 33614, 33648, 33664, 33666, 33668, 33689, 33692, 33702, + 33708, 33726, 33619, 33768, 33817, 33709, 33839, 33861, 33863, 33869, 33878, 33884, 33888, + 33892, 33895, 33898, 33908, 33917, 33938, 33941, 33961, 33962, 33991, 33992, 33996, 34034, + 34039, 34050, 34051, 34055, 34062, 34064, 34076, 34082, 34087, 34090, 34099, 34102, 34111, + 34128, 34130, 34140, 34141, 34143, 34144, 34169, 34185, 34187, 34208, 34213, 34215, 34228, + 34230, 34232, 34237, 34238, 34239, 34242, 34266, 34272, 34280, 34291, 34300, 34317, 34318, + 34329, 34331, 34358, 34362, 34365, 34392, 34393, 34397, 34400, 34401, 34404, 34409, 34422, + 34454, 34458, 34465, 34470, 34477, 34484, 34485, 34487, 34489, 34495, 34501, 34514, 34522, + 34524, 34528, 34533, 34535, 34440, 34564, 34575, 34607, 34610, 34620, 34621, 34629, 34637, + 34657, 34671, 34691, 34692, 34693, 34694, 34704, 34709, 34723, 34737, 34760, 34762, 34773, + 34777, 34780, 34786, 34788, 34801, 34803, 34808, 34810, 34815, 34825, 34841, 34834, 34842, + 34846, 34864, 34869, 34881, 34883, 34888, 34889, 34891, 34897, 34908, 34912, 34929, 34937, + 34939, 34944, 34975, 34984, 35002, 35019, 35020, 35038, 35047, 35063, 35085, 35093, 35094, + 35104, 35112, 35121, 35130, 35142, 35151, 35154, 35159, 35163, 35169, 35171, 35182, 35187, + 35189, 35194, 35197, 35213, 35221, 35227, 35228, 35232, 35252, 35254, 35287, 35305, 35309, + 35321, 35332, 35333, 35358, 35360, 35364, 35366, 35371, 35372, 35375, 35389, 35392, 35395, + 35411, 35414, 35420, 35429, 35446, 35447, 35450, 35451, 35456, 35459, 35467, 35471, 35474, + 35479, 35481, 35487, 35497, 35503, 35507, 35515, 35523, 35526, 35528, 35530, 35539, 35540, + 35541, 35568, 35583, 35595, 35614, 35632, 35644, 35650, 35656, 35661, 35683, 35705, 35716, + 35725, 35727, 35896, 35902, 35921, 35928, 35931, 35933, 35929, 35939, 35940, 35942, 35957, + 35958, 35966, 35974, 35975, 35979, 35984, 35995, 35996, 36025, 36038, 36043, 36047, 36061, + 36072, 36079, 36082, 36095, 36197, 36223, 36226, 36232, 36240, 36254, 36256, 36268, 36277, + 36279, 36281, 36283, 36288, 36293, 36295, 36298, 36308, 36325, 36336, 36284, 36356, 36357, + 36369, 36403, 36407, 36408, 36430, 36443, 36445, 36446, 36473, 36482, 36483, 36507, 36509, + 36514, 36538, 36545, 36547, 36548, 36551, 36572, 36590, 36593, 36599, 36589, 36610, 36623, + 36624, 36630, 36640, 36641, 36643, 36648, 36654, 36660, 36663, 36673, 36687, 36690, 36691, + 36701, 36702, 36709, 36765, 36792, 36798, 36800, 36811, 36816, 36818, 36835, 36862, 36888, + 36904, 36905, 36906, 36915, 36916, 36927, 36962, 36966, 36972, 37006, 37029, 37068, 37077, + 37080, 37081, 37093, 37074, 37128, 37133, 37136, 37146, 37152, 37161, 37166, 37174, 37180, + 37187, 37199, 37203, 37229, 37243, 37249, 37254, 37267, 37268, 37272, 37281, 37286, 37311, + 37331, 37332, 37337, 37353, 37354, 37359, 37369, 37373, 37380, 37381, 37388, 37394, 37395, + 37400, 37404, 37405, 37412, 37413, 37414, 37422, 37423, 37424, 37429, 37430, 37438, 37446, + 37453, 37464, 37468, 37469, 37481, 37486, 37487, 37488, 37493, 37497, 37499, 37514, 37522, + 37536, 37540, 37541, 37544, 37558, 37560, 37562, 37565, 37575, 37581, 37592, 37596, 37597, + 37601, 37603, 37608, 37612, 37614, 37616, 37632, 37640, 37660, 37668, 37674, 37684, 37687, + 37712, 37717, 37726, 37735, 37737, 37743, 37748, 37750, 37754, 37757, 37760, 37761, 37773, + 37778, 37781, 37784, 37793, 37798, 37800, 37803, 37812, 37813, 37814, 37828, 37829, 37833, + 37835, 37837, 37843, 37849, 37879, 37889, 37896, 37909, 37919, 37935, 37949, 37955, 37977, + 37980, 37983, 37985, 37992, 37998, 38020, 38019, 38270, 38276, 38301, 38302, 38330, 38361, + 38365, 38367, 38430, 38434, 38437, 38438, 38455, 38457, 38458, 38482, 38486, 38487, 38510, + 38524, 38526, 38545, 38559, 38566, 38602, 38618, 38623, 38650, 38661, 38682, 38685, 38689, + 38730, 38744, 38775, 38776, 38779, 38784, 38793, 38807, 38840, 38844, 38847, 38852, 38853, + 38855, 38858, 38862, 38864, 38871, 38877, 38884, 38903, 38904, 38906, 38937, 38940, 38944, + 38959, 38965, 38980, 38986, 38993, 39018, 39086, 39116, 39142, 39158, 39175, 39199, 39202, + 39206, 39211, 39220, 39225, 39239, 39257, 39259, 39323, 39325, 39327, 39344, 39346, 39349, + 39379, 39386, 39388, 39399, 39402, 39403, 39404, 39412, 39413, 39421, 39422, 39428, 39435, + 39454, 39458, 39475, 39477, 39495, 39498, 39499, 39508, 39517, 39594, 39596, 39598, 39602, + 39604, 39611, 39615, 39624, 39639, 39643, 39652, 39655, 39660, 39666, 39667, 39669, 39674, + 39677, 39679, 39680, 39684, 39685, 39707, 39718, 39733, 39735, 39737, 39738, 39756, 39766, + 39767, 39771, 39777, 39786, 39789, 39790, 39800, 39807, 39813, 39815, 39817, 39819, 39821, + 39828, 39834, 39849, 39863, 39868, 39888, 39929, 39951, 39953, 39966, 39974, 39976, 39997, + 40003, 40014, 40030, 40059, 40183, 40185, 40220, 40239, 40243, 40244, 40250, 40252, 40261, + 40275, 40276, 40293, 40323, 40326, 40334, 40338, 40339, 40341, 40343, 40344, 40362, 40366, + 40383, 40394, 40404, 40405, 40414, 40430, 40432, 40446, 40462, 40464, 40465, 40466, 40470, + 40583, 40590, 40591, 40598, 40600, 40622, 40627, 40646, 40648, 40651, 40661, 40684, 40685, + 40689, 40693, 40696, 40721, 40726, 40730, 40735, 40753, 40754, 40764, 40767, 40771, 40772, + 40775, 40790, 40798, 40814, 40819, 40826, 40829, 40847, 40849, 40850, 40854, 40865, 40867, + 13055, 13055, +]; + +/// Adobe-Japan1 CIDs whose text is outside the BMP or several +/// characters: (CID, end of its text in `JAPAN1_OTHER_TEXT`), by CID, +/// each text starting where the one before ends. +pub static JAPAN1_OTHER: [(u16, u16); 1870] = [ + (7641, 4), + (7670, 8), + (7673, 12), + (7734, 16), + (7814, 20), + (7816, 24), + (7825, 28), + (7838, 32), + (7839, 36), + (8061, 40), + (8189, 43), + (8190, 46), + (8295, 50), + (8296, 53), + (8297, 55), + (8300, 59), + (8301, 62), + (8302, 64), + (8306, 66), + (8321, 78), + (8322, 90), + (8325, 102), + (8326, 114), + (9396, 117), + (9399, 120), + (9402, 123), + (9408, 126), + (9411, 130), + (9414, 133), + (9716, 136), + (9719, 139), + (9722, 142), + (9728, 145), + (9731, 149), + (9734, 152), + (9791, 155), + (9792, 158), + (9793, 161), + (9794, 164), + (9795, 167), + (9801, 170), + (9802, 173), + (9803, 176), + (9804, 179), + (9805, 182), + (9807, 186), + (9808, 190), + (9809, 194), + (9810, 198), + (9811, 202), + (9812, 206), + (9813, 210), + (9814, 214), + (9815, 218), + (9816, 222), + (9817, 226), + (9818, 230), + (9819, 235), + (9820, 239), + (9821, 243), + (9822, 247), + (9823, 252), + (9824, 257), + (9825, 260), + (9826, 263), + (9827, 266), + (9828, 269), + (9829, 272), + (9830, 275), + (9831, 278), + (9832, 281), + (9833, 284), + (9834, 287), + (9835, 290), + (9836, 293), + (9837, 296), + (9838, 299), + (9839, 302), + (9840, 305), + (9841, 308), + (9842, 311), + (9843, 314), + (9844, 317), + (9845, 320), + (9846, 323), + (9847, 326), + (9848, 329), + (9849, 332), + (9850, 335), + (9851, 338), + (9852, 341), + (9853, 345), + (9854, 349), + (9855, 353), + (9856, 357), + (9857, 361), + (9858, 365), + (9859, 369), + (9860, 373), + (9861, 377), + (9862, 381), + (9863, 385), + (9864, 389), + (9865, 393), + (9866, 398), + (9867, 402), + (9868, 406), + (9869, 410), + (9870, 415), + (9871, 420), + (9884, 422), + (9885, 424), + (9886, 426), + (9887, 428), + (9888, 430), + (9889, 432), + (9890, 434), + (9891, 436), + (9892, 438), + (9893, 440), + (9894, 442), + (9895, 444), + (9896, 446), + (9897, 448), + (9898, 450), + (9899, 452), + (9900, 454), + (9901, 456), + (9902, 458), + (9903, 460), + (9904, 462), + (9905, 464), + (9906, 466), + (9907, 468), + (9908, 470), + (9909, 472), + (9910, 474), + (9911, 476), + (9912, 478), + (9913, 480), + (9914, 482), + (9915, 484), + (9916, 486), + (9917, 488), + (9918, 490), + (9919, 492), + (9920, 494), + (9921, 496), + (9922, 498), + (9923, 500), + (9924, 502), + (9925, 504), + (9926, 506), + (9927, 508), + (9928, 510), + (9929, 512), + (9930, 514), + (9931, 516), + (9932, 518), + (9933, 520), + (9934, 522), + (9935, 524), + (9936, 526), + (9937, 528), + (9938, 530), + (9939, 532), + (9940, 534), + (9941, 536), + (9942, 538), + (9943, 540), + (9944, 542), + (9945, 544), + (9946, 546), + (9947, 548), + (9948, 550), + (9949, 552), + (9950, 554), + (9951, 556), + (9952, 558), + (9953, 560), + (9954, 562), + (9955, 564), + (9956, 566), + (9957, 568), + (9958, 570), + (9959, 572), + (9960, 574), + (9961, 576), + (9962, 578), + (9963, 580), + (9964, 582), + (9965, 584), + (9966, 586), + (9967, 588), + (9968, 590), + (9969, 592), + (9970, 594), + (9971, 596), + (9972, 598), + (9973, 601), + (9986, 605), + (9987, 608), + (9988, 610), + (10001, 614), + (10002, 617), + (10003, 619), + (10004, 623), + (10005, 627), + (10006, 631), + (10007, 635), + (10008, 639), + (10009, 643), + (10010, 647), + (10011, 651), + (10012, 655), + (10013, 659), + (10014, 663), + (10015, 667), + (10016, 671), + (10017, 675), + (10018, 679), + (10019, 683), + (10020, 687), + (10021, 691), + (10022, 695), + (10023, 699), + (10024, 703), + (10025, 707), + (10026, 711), + (10027, 715), + (10028, 719), + (10029, 723), + (10136, 729), + (10137, 735), + (10138, 741), + (10139, 747), + (10140, 753), + (10141, 759), + (10142, 765), + (10143, 771), + (10144, 777), + (10145, 783), + (10233, 785), + (10234, 787), + (10263, 789), + (10264, 791), + (10265, 793), + (10266, 795), + (10267, 797), + (10268, 799), + (10269, 801), + (10270, 803), + (10271, 805), + (10272, 807), + (10273, 809), + (10274, 811), + (10275, 813), + (10276, 815), + (10277, 817), + (10278, 819), + (10279, 821), + (10280, 823), + (10281, 825), + (10282, 827), + (10283, 829), + (10284, 831), + (10285, 833), + (10286, 835), + (10287, 837), + (10288, 839), + (10289, 841), + (10290, 843), + (10291, 845), + (10292, 847), + (10293, 849), + (10294, 851), + (10295, 853), + (10296, 855), + (10297, 857), + (10298, 859), + (10299, 861), + (10300, 863), + (10301, 865), + (10302, 867), + (10303, 869), + (10304, 871), + (10305, 873), + (10306, 875), + (10307, 877), + (10308, 879), + (10309, 881), + (10310, 883), + (10311, 885), + (10312, 888), + (10504, 890), + (10505, 892), + (10506, 894), + (10507, 896), + (10508, 898), + (10509, 900), + (10510, 902), + (10511, 904), + (10512, 906), + (10513, 908), + (10525, 910), + (10526, 912), + (10527, 914), + (10528, 916), + (10529, 918), + (10530, 920), + (10531, 922), + (10532, 924), + (10533, 926), + (10534, 928), + (10535, 930), + (10536, 932), + (10537, 934), + (10538, 936), + (10539, 938), + (10540, 940), + (10541, 942), + (10542, 944), + (10543, 946), + (10544, 948), + (10545, 950), + (10546, 952), + (10547, 954), + (10548, 956), + (10549, 958), + (10550, 960), + (10551, 962), + (10552, 964), + (10553, 966), + (10554, 968), + (10555, 970), + (10556, 972), + (10557, 974), + (10558, 976), + (10559, 978), + (10560, 980), + (10561, 982), + (10562, 984), + (10563, 986), + (10564, 988), + (10565, 990), + (10566, 992), + (10567, 994), + (10568, 996), + (10569, 998), + (10570, 1000), + (10571, 1002), + (10572, 1004), + (10573, 1006), + (10574, 1008), + (10575, 1010), + (10576, 1012), + (10577, 1014), + (10578, 1016), + (10579, 1018), + (10580, 1020), + (10581, 1022), + (10582, 1024), + (10583, 1026), + (10584, 1028), + (10585, 1030), + (10586, 1032), + (10587, 1034), + (10588, 1036), + (10589, 1038), + (10590, 1040), + (10591, 1042), + (10592, 1044), + (10593, 1046), + (10594, 1048), + (10595, 1050), + (10596, 1052), + (10597, 1054), + (10598, 1056), + (10599, 1058), + (10600, 1060), + (10601, 1062), + (10602, 1064), + (10603, 1066), + (10604, 1069), + (10631, 1073), + (10632, 1077), + (10633, 1081), + (10634, 1085), + (10635, 1089), + (10636, 1093), + (10637, 1097), + (10638, 1101), + (10639, 1105), + (10640, 1109), + (10641, 1113), + (10642, 1117), + (10643, 1121), + (10644, 1125), + (10645, 1129), + (10646, 1133), + (10647, 1137), + (10648, 1141), + (10649, 1145), + (10650, 1149), + (10651, 1153), + (10652, 1157), + (10653, 1161), + (10654, 1165), + (10655, 1169), + (10656, 1173), + (10765, 1175), + (10767, 1177), + (10769, 1179), + (10771, 1181), + (10773, 1183), + (10775, 1185), + (10777, 1187), + (10779, 1189), + (10781, 1191), + (10783, 1193), + (10784, 1195), + (10785, 1197), + (10786, 1199), + (10787, 1201), + (10788, 1203), + (10789, 1205), + (10790, 1207), + (10791, 1209), + (10792, 1211), + (10793, 1213), + (10794, 1215), + (10795, 1217), + (10796, 1219), + (10797, 1221), + (10798, 1223), + (10799, 1225), + (10800, 1227), + (10801, 1229), + (10802, 1231), + (10803, 1233), + (10804, 1235), + (10805, 1237), + (10806, 1239), + (10807, 1241), + (10808, 1243), + (10809, 1245), + (10810, 1247), + (10811, 1249), + (10812, 1251), + (10813, 1253), + (10814, 1255), + (10815, 1257), + (10816, 1259), + (10817, 1261), + (10818, 1263), + (10819, 1265), + (10820, 1267), + (10821, 1269), + (10822, 1271), + (10823, 1273), + (10824, 1275), + (10825, 1277), + (10826, 1279), + (10827, 1281), + (10828, 1283), + (10829, 1285), + (10830, 1287), + (10831, 1289), + (10832, 1291), + (10833, 1293), + (10834, 1295), + (10835, 1297), + (10836, 1299), + (10837, 1301), + (10838, 1303), + (10839, 1305), + (10840, 1307), + (10841, 1309), + (10842, 1311), + (10843, 1313), + (10844, 1315), + (10845, 1317), + (10846, 1319), + (10847, 1321), + (10848, 1323), + (10849, 1325), + (10850, 1327), + (10851, 1329), + (10852, 1331), + (10853, 1333), + (10854, 1335), + (10855, 1337), + (10856, 1339), + (10857, 1341), + (10858, 1343), + (10859, 1345), + (10860, 1347), + (10861, 1349), + (10862, 1351), + (10863, 1353), + (10864, 1355), + (10865, 1357), + (10866, 1359), + (10867, 1361), + (10868, 1363), + (10869, 1365), + (10870, 1367), + (10871, 1369), + (10872, 1371), + (10873, 1373), + (10874, 1376), + (10901, 1380), + (10902, 1384), + (10903, 1388), + (10904, 1392), + (10905, 1396), + (10906, 1400), + (10907, 1404), + (10908, 1408), + (10909, 1412), + (10910, 1416), + (10911, 1420), + (10912, 1424), + (10913, 1428), + (10914, 1432), + (10915, 1436), + (10916, 1440), + (10917, 1444), + (10918, 1448), + (10919, 1452), + (10920, 1456), + (10921, 1460), + (10922, 1464), + (10923, 1468), + (10924, 1472), + (10925, 1476), + (10926, 1480), + (10985, 1484), + (11024, 1488), + (11038, 1490), + (11040, 1492), + (11042, 1494), + (11044, 1496), + (11046, 1498), + (11048, 1500), + (11050, 1502), + (11052, 1504), + (11054, 1506), + (11056, 1508), + (11057, 1510), + (11058, 1512), + (11059, 1514), + (11060, 1516), + (11061, 1518), + (11062, 1520), + (11063, 1522), + (11064, 1524), + (11065, 1526), + (11066, 1528), + (11067, 1530), + (11068, 1532), + (11069, 1534), + (11070, 1536), + (11071, 1538), + (11072, 1540), + (11073, 1542), + (11074, 1544), + (11075, 1546), + (11076, 1548), + (11077, 1550), + (11078, 1552), + (11079, 1554), + (11080, 1556), + (11081, 1558), + (11082, 1560), + (11083, 1562), + (11084, 1564), + (11085, 1566), + (11086, 1568), + (11087, 1570), + (11088, 1572), + (11089, 1574), + (11090, 1576), + (11091, 1578), + (11092, 1580), + (11093, 1582), + (11094, 1584), + (11095, 1586), + (11096, 1588), + (11097, 1590), + (11098, 1592), + (11099, 1594), + (11100, 1596), + (11101, 1598), + (11102, 1600), + (11103, 1602), + (11104, 1604), + (11105, 1606), + (11106, 1608), + (11107, 1610), + (11108, 1612), + (11109, 1614), + (11110, 1616), + (11111, 1618), + (11112, 1620), + (11113, 1622), + (11114, 1624), + (11115, 1626), + (11116, 1628), + (11117, 1630), + (11118, 1632), + (11119, 1634), + (11120, 1636), + (11121, 1638), + (11122, 1640), + (11123, 1642), + (11124, 1644), + (11125, 1646), + (11126, 1648), + (11127, 1650), + (11128, 1652), + (11129, 1654), + (11130, 1656), + (11131, 1658), + (11132, 1660), + (11133, 1662), + (11134, 1664), + (11135, 1666), + (11136, 1668), + (11137, 1670), + (11138, 1672), + (11139, 1674), + (11140, 1676), + (11141, 1678), + (11142, 1680), + (11143, 1682), + (11144, 1684), + (11145, 1686), + (11146, 1688), + (11147, 1691), + (11308, 1693), + (11310, 1695), + (11312, 1697), + (11314, 1699), + (11316, 1701), + (11318, 1703), + (11320, 1705), + (11322, 1707), + (11324, 1709), + (11326, 1711), + (11327, 1713), + (11328, 1715), + (11329, 1717), + (11330, 1719), + (11331, 1721), + (11332, 1723), + (11333, 1725), + (11334, 1727), + (11335, 1729), + (11336, 1731), + (11337, 1733), + (11338, 1735), + (11339, 1737), + (11340, 1739), + (11341, 1741), + (11342, 1743), + (11343, 1745), + (11344, 1747), + (11345, 1749), + (11346, 1751), + (11347, 1753), + (11348, 1755), + (11349, 1757), + (11350, 1759), + (11351, 1761), + (11352, 1763), + (11353, 1765), + (11354, 1767), + (11355, 1769), + (11356, 1771), + (11357, 1773), + (11358, 1775), + (11359, 1777), + (11360, 1779), + (11361, 1781), + (11362, 1783), + (11363, 1785), + (11364, 1787), + (11365, 1789), + (11366, 1791), + (11367, 1793), + (11368, 1795), + (11369, 1797), + (11370, 1799), + (11371, 1801), + (11372, 1803), + (11373, 1805), + (11374, 1807), + (11375, 1809), + (11376, 1811), + (11377, 1813), + (11378, 1815), + (11379, 1817), + (11380, 1819), + (11381, 1821), + (11382, 1823), + (11383, 1825), + (11384, 1827), + (11385, 1829), + (11386, 1831), + (11387, 1833), + (11388, 1835), + (11389, 1837), + (11390, 1839), + (11391, 1841), + (11392, 1843), + (11393, 1845), + (11394, 1847), + (11395, 1849), + (11396, 1851), + (11397, 1853), + (11398, 1855), + (11399, 1857), + (11400, 1859), + (11401, 1861), + (11402, 1863), + (11403, 1865), + (11404, 1867), + (11405, 1869), + (11406, 1871), + (11407, 1873), + (11408, 1875), + (11409, 1877), + (11410, 1879), + (11411, 1881), + (11412, 1883), + (11413, 1885), + (11414, 1887), + (11415, 1889), + (11416, 1891), + (11417, 1894), + (11577, 1896), + (11579, 1898), + (11581, 1900), + (11583, 1902), + (11585, 1904), + (11587, 1906), + (11589, 1908), + (11591, 1910), + (11593, 1912), + (11595, 1914), + (11596, 1916), + (11597, 1918), + (11598, 1920), + (11599, 1922), + (11600, 1924), + (11601, 1926), + (11602, 1928), + (11603, 1930), + (11604, 1932), + (11605, 1934), + (11606, 1936), + (11607, 1938), + (11608, 1940), + (11609, 1942), + (11610, 1944), + (11611, 1946), + (11612, 1948), + (11613, 1950), + (11614, 1952), + (11615, 1954), + (11616, 1956), + (11617, 1958), + (11618, 1960), + (11619, 1962), + (11620, 1964), + (11621, 1966), + (11622, 1968), + (11623, 1970), + (11624, 1972), + (11625, 1974), + (11626, 1976), + (11627, 1978), + (11628, 1980), + (11629, 1982), + (11630, 1984), + (11631, 1986), + (11632, 1988), + (11633, 1990), + (11634, 1992), + (11635, 1994), + (11636, 1996), + (11637, 1998), + (11638, 2000), + (11639, 2002), + (11640, 2004), + (11641, 2006), + (11642, 2008), + (11643, 2010), + (11644, 2012), + (11645, 2014), + (11646, 2016), + (11647, 2018), + (11648, 2020), + (11649, 2022), + (11650, 2024), + (11651, 2026), + (11652, 2028), + (11653, 2030), + (11654, 2032), + (11655, 2034), + (11656, 2036), + (11657, 2038), + (11658, 2040), + (11659, 2042), + (11660, 2044), + (11661, 2046), + (11662, 2048), + (11663, 2050), + (11664, 2052), + (11665, 2054), + (11666, 2056), + (11667, 2058), + (11668, 2060), + (11669, 2062), + (11670, 2064), + (11671, 2066), + (11672, 2068), + (11673, 2070), + (11674, 2072), + (11675, 2074), + (11676, 2076), + (11677, 2078), + (11678, 2080), + (11679, 2082), + (11680, 2084), + (11681, 2086), + (11682, 2088), + (11683, 2090), + (11684, 2092), + (11685, 2094), + (11686, 2097), + (11713, 2101), + (11714, 2105), + (11715, 2109), + (11716, 2113), + (11717, 2117), + (11718, 2121), + (11719, 2125), + (11720, 2129), + (11721, 2133), + (11722, 2137), + (11723, 2141), + (11724, 2145), + (11725, 2149), + (11726, 2153), + (11727, 2157), + (11728, 2161), + (11729, 2165), + (11730, 2169), + (11731, 2173), + (11732, 2177), + (11733, 2181), + (11734, 2185), + (11735, 2189), + (11736, 2193), + (11737, 2197), + (11738, 2201), + (11849, 2203), + (11854, 2205), + (11857, 2208), + (11867, 2211), + (11868, 2214), + (11871, 2220), + (11872, 2226), + (11873, 2232), + (11878, 2241), + (11880, 2250), + (11883, 2274), + (11885, 2286), + (11887, 2295), + (11895, 2313), + (11897, 2325), + (11899, 2340), + (11908, 2346), + (11910, 2352), + (11911, 2364), + (11914, 2373), + (11916, 2385), + (11917, 2394), + (11922, 2406), + (11923, 2418), + (11927, 2427), + (11928, 2448), + (11929, 2457), + (11931, 2463), + (11948, 2472), + (11949, 2478), + (11952, 2487), + (11953, 2496), + (11957, 2502), + (11962, 2511), + (11964, 2520), + (11967, 2544), + (11969, 2556), + (11971, 2565), + (11979, 2583), + (11981, 2595), + (11983, 2610), + (11992, 2616), + (11994, 2622), + (11995, 2634), + (11998, 2643), + (12000, 2655), + (12001, 2664), + (12006, 2676), + (12007, 2688), + (12011, 2697), + (12012, 2718), + (12013, 2727), + (12015, 2733), + (12032, 2742), + (12033, 2748), + (12036, 2757), + (12037, 2766), + (12045, 2778), + (12046, 2790), + (12047, 2802), + (12048, 2814), + (12049, 2826), + (12050, 2838), + (12051, 2850), + (12052, 2862), + (12053, 2874), + (12054, 2886), + (12055, 2898), + (12056, 2910), + (12057, 2922), + (12058, 2934), + (12059, 2946), + (12060, 2958), + (12061, 2970), + (12062, 2982), + (12088, 2985), + (12117, 2987), + (12269, 2991), + (12270, 2995), + (12271, 2999), + (12272, 3003), + (12295, 3007), + (12385, 3011), + (12478, 3015), + (12568, 3019), + (12912, 3022), + (12915, 3025), + (12918, 3028), + (12924, 3031), + (12927, 3035), + (12930, 3038), + (13232, 3041), + (13235, 3044), + (13238, 3047), + (13244, 3050), + (13247, 3054), + (13250, 3057), + (13357, 3061), + (13523, 3065), + (13646, 3069), + (13651, 3073), + (13656, 3077), + (13670, 3081), + (13679, 3085), + (13684, 3089), + (13691, 3093), + (13706, 3097), + (13717, 3101), + (13718, 3105), + (13719, 3109), + (13723, 3113), + (13724, 3117), + (13750, 3121), + (13755, 3125), + (13768, 3129), + (13780, 3133), + (13782, 3137), + (13801, 3141), + (13803, 3145), + (13807, 3149), + (13809, 3153), + (13815, 3157), + (13832, 3161), + (13834, 3165), + (13839, 3169), + (13841, 3173), + (13849, 3177), + (13854, 3181), + (13857, 3185), + (13863, 3189), + (13866, 3193), + (13867, 3197), + (13898, 3201), + (13904, 3205), + (13916, 3209), + (13922, 3213), + (13928, 3217), + (13932, 3221), + (13953, 3225), + (13954, 3229), + (13995, 3233), + (13998, 3237), + (14064, 3241), + (14068, 3245), + (14069, 3249), + (14075, 3253), + (14100, 3257), + (14105, 3261), + (14108, 3265), + (14109, 3269), + (14121, 3273), + (14129, 3277), + (14134, 3281), + (14140, 3285), + (14145, 3289), + (14174, 3293), + (14180, 3297), + (14187, 3301), + (14188, 3305), + (14189, 3309), + (14190, 3313), + (14209, 3317), + (14226, 3321), + (14253, 3325), + (14256, 3329), + (14278, 3333), + (14280, 3337), + (14281, 3341), + (14282, 3345), + (14291, 3349), + (14293, 3353), + (14294, 3357), + (15269, 3361), + (15388, 3365), + (15393, 3369), + (15422, 3373), + (15428, 3377), + (15437, 3381), + (15443, 3385), + (15603, 3391), + (15604, 3397), + (15605, 3403), + (15606, 3409), + (15607, 3415), + (15694, 3421), + (15695, 3427), + (15696, 3433), + (15697, 3439), + (15698, 3445), + (15699, 3451), + (15700, 3457), + (15701, 3463), + (15712, 3469), + (15723, 3473), + (15724, 3477), + (15856, 3481), + (15857, 3485), + (16071, 3491), + (16072, 3497), + (16073, 3503), + (16074, 3509), + (16075, 3515), + (16162, 3521), + (16163, 3527), + (16164, 3533), + (16165, 3539), + (16166, 3545), + (16167, 3551), + (16168, 3557), + (16169, 3563), + (16180, 3569), + (16191, 3573), + (16192, 3577), + (16209, 3583), + (16210, 3589), + (16211, 3595), + (16212, 3601), + (16213, 3607), + (16214, 3613), + (16215, 3619), + (16216, 3625), + (16217, 3631), + (16218, 3637), + (16219, 3643), + (16220, 3649), + (16221, 3655), + (16246, 3661), + (16343, 3667), + (16352, 3673), + (16353, 3679), + (16354, 3685), + (16355, 3691), + (16356, 3697), + (16357, 3703), + (16358, 3709), + (16359, 3715), + (16360, 3721), + (16361, 3727), + (16362, 3733), + (16363, 3739), + (16364, 3745), + (16375, 3751), + (16382, 3757), + (16383, 3763), + (16384, 3769), + (16385, 3775), + (16386, 3781), + (16387, 3787), + (16388, 3793), + (16389, 3799), + (16390, 3805), + (16391, 3811), + (16392, 3817), + (16393, 3823), + (16394, 3829), + (16405, 3835), + (16414, 3841), + (16415, 3847), + (16416, 3853), + (16417, 3859), + (16418, 3865), + (16419, 3871), + (16420, 3877), + (16421, 3883), + (16422, 3889), + (16423, 3895), + (16424, 3901), + (16425, 3907), + (16426, 3913), + (16437, 3919), + (16448, 3923), + (16449, 3927), + (16460, 3933), + (16467, 3937), + (16468, 3941), + (16659, 3945), + (16660, 3949), + (16816, 3953), + (16821, 3957), + (16833, 3961), + (16838, 3965), + (16845, 3969), + (16888, 3973), + (16905, 3977), + (16914, 3981), + (16916, 3985), + (16970, 3989), + (17005, 3993), + (17009, 3997), + (17018, 4001), + (17024, 4005), + (17033, 4009), + (17063, 4013), + (17089, 4017), + (17103, 4021), + (17117, 4025), + (17140, 4029), + (17146, 4033), + (17227, 4037), + (17233, 4041), + (17240, 4045), + (17243, 4049), + (17259, 4053), + (17282, 4057), + (17289, 4061), + (17291, 4065), + (17295, 4069), + (17297, 4073), + (17299, 4077), + (17308, 4081), + (17312, 4085), + (17319, 4089), + (17321, 4093), + (17327, 4097), + (17331, 4101), + (17332, 4105), + (17337, 4109), + (17340, 4113), + (17359, 4117), + (17373, 4121), + (17379, 4125), + (17380, 4129), + (17388, 4133), + (17391, 4137), + (17414, 4141), + (17415, 4145), + (17417, 4149), + (17421, 4153), + (17428, 4157), + (17429, 4161), + (17435, 4165), + (17437, 4169), + (17438, 4173), + (17449, 4177), + (17462, 4181), + (17472, 4185), + (17478, 4189), + (17480, 4193), + (17492, 4197), + (17493, 4201), + (17525, 4205), + (17539, 4209), + (17544, 4213), + (17545, 4217), + (17546, 4221), + (17547, 4225), + (17551, 4229), + (17552, 4233), + (17556, 4237), + (17559, 4241), + (17561, 4245), + (17562, 4249), + (17575, 4253), + (17582, 4257), + (17585, 4261), + (17599, 4265), + (17605, 4269), + (17608, 4273), + (17632, 4277), + (17647, 4281), + (17653, 4285), + (17657, 4289), + (17667, 4293), + (17671, 4297), + (17672, 4301), + (17680, 4305), + (17682, 4309), + (17683, 4313), + (17686, 4317), + (17710, 4321), + (17742, 4325), + (17743, 4329), + (17744, 4333), + (17761, 4337), + (17763, 4341), + (17764, 4345), + (17768, 4349), + (17769, 4353), + (17770, 4357), + (17772, 4361), + (17774, 4365), + (17782, 4369), + (17783, 4373), + (17784, 4377), + (17788, 4381), + (17814, 4385), + (17815, 4389), + (17827, 4393), + (17841, 4397), + (17842, 4401), + (17843, 4405), + (17854, 4409), + (17863, 4413), + (17867, 4417), + (17874, 4421), + (17875, 4425), + (17880, 4429), + (17885, 4433), + (17897, 4437), + (17910, 4441), + (17925, 4445), + (17942, 4449), + (17943, 4453), + (17944, 4457), + (17945, 4461), + (17983, 4465), + (17998, 4469), + (18003, 4473), + (18015, 4477), + (18018, 4481), + (18039, 4485), + (18049, 4489), + (18055, 4493), + (18077, 4497), + (18104, 4501), + (18117, 4505), + (18119, 4509), + (18124, 4513), + (18158, 4517), + (18162, 4521), + (18167, 4525), + (18170, 4529), + (18181, 4533), + (18183, 4537), + (18185, 4541), + (18190, 4545), + (18192, 4549), + (18193, 4553), + (18195, 4557), + (18197, 4561), + (18209, 4565), + (18217, 4569), + (18229, 4573), + (18248, 4577), + (18249, 4581), + (18268, 4585), + (18276, 4589), + (18277, 4593), + (18278, 4597), + (18293, 4601), + (18302, 4605), + (18303, 4609), + (18318, 4613), + (18319, 4617), + (18320, 4621), + (18322, 4625), + (18325, 4629), + (18327, 4633), + (18329, 4637), + (18330, 4641), + (18332, 4645), + (18338, 4649), + (18339, 4653), + (18344, 4657), + (18345, 4661), + (18352, 4665), + (18355, 4669), + (18365, 4673), + (18385, 4677), + (18386, 4681), + (18394, 4685), + (18398, 4689), + (18416, 4693), + (18430, 4697), + (18444, 4701), + (18446, 4705), + (18450, 4709), + (18452, 4713), + (18455, 4717), + (18459, 4721), + (18463, 4725), + (18466, 4729), + (18506, 4733), + (18515, 4737), + (18528, 4741), + (18544, 4745), + (18553, 4749), + (18554, 4753), + (18555, 4757), + (18571, 4761), + (18574, 4765), + (18610, 4769), + (18611, 4773), + (18617, 4777), + (18620, 4781), + (18624, 4785), + (18637, 4789), + (18638, 4793), + (18640, 4797), + (18645, 4801), + (18650, 4805), + (18652, 4809), + (18656, 4813), + (18672, 4817), + (18684, 4821), + (18699, 4825), + (18701, 4829), + (18702, 4833), + (18708, 4837), + (18716, 4841), + (18718, 4845), + (18727, 4849), + (18733, 4853), + (18745, 4857), + (18747, 4861), + (18754, 4865), + (18757, 4869), + (18770, 4873), + (18773, 4877), + (18774, 4881), + (18784, 4885), + (18787, 4889), + (18811, 4893), + (18812, 4897), + (18817, 4901), + (18824, 4905), + (18834, 4909), + (18835, 4913), + (18843, 4917), + (18844, 4921), + (18847, 4925), + (18848, 4929), + (18855, 4933), + (18856, 4937), + (18862, 4941), + (18863, 4945), + (18874, 4949), + (18875, 4953), + (18882, 4957), + (18883, 4961), + (18885, 4965), + (18886, 4969), + (18890, 4973), + (18893, 4977), + (18895, 4981), + (18897, 4985), + (18903, 4989), + (18917, 4993), + (18918, 4997), + (18935, 5001), + (18944, 5005), + (18959, 5009), + (18962, 5013), + (18966, 5017), + (18983, 5021), + (19001, 5025), + (19026, 5029), + (19036, 5033), + (19037, 5037), + (19038, 5041), + (19046, 5045), + (19051, 5049), + (19054, 5053), + (19071, 5057), + (19075, 5061), + (19077, 5065), + (19083, 5069), + (19084, 5073), + (19105, 5077), + (19109, 5081), + (19111, 5085), + (19123, 5089), + (19125, 5093), + (19129, 5097), + (19130, 5101), + (20057, 5105), + (20058, 5109), + (20059, 5113), + (20060, 5117), + (20061, 5121), + (20062, 5125), + (20063, 5129), + (20064, 5133), + (20065, 5137), + (20066, 5141), + (20072, 5145), + (20075, 5149), + (20080, 5153), + (20083, 5157), + (20088, 5161), + (20090, 5165), + (20096, 5169), + (20097, 5173), + (20112, 5177), + (20114, 5181), + (20124, 5185), + (20125, 5189), + (20128, 5193), + (20130, 5197), + (20133, 5201), + (20141, 5205), + (20149, 5209), + (20153, 5213), + (20168, 5217), + (20176, 5221), + (20180, 5225), + (20194, 5229), + (20201, 5233), + (20204, 5237), + (20206, 5241), + (20220, 5245), + (20240, 5249), + (20247, 5253), + (20256, 5257), + (20260, 5261), + (20262, 5265), + (20311, 5269), + (20315, 5273), + (20316, 5277), + (20505, 5279), + (20506, 5282), + (20507, 5285), + (20508, 5287), + (20509, 5289), + (20523, 5292), + (20524, 5295), + (20525, 5298), + (20526, 5301), + (20527, 5304), + (20528, 5307), + (20529, 5310), + (20530, 5313), + (20531, 5316), + (20532, 5319), + (20565, 5325), + (20575, 5327), + (20576, 5329), + (20578, 5331), + (20579, 5333), + (20580, 5335), + (20581, 5337), + (20583, 5339), + (20589, 5341), + (20590, 5343), + (20591, 5345), + (20592, 5347), + (20593, 5349), + (20594, 5351), + (20595, 5353), + (20596, 5355), + (20597, 5357), + (20598, 5359), + (20599, 5361), + (20600, 5363), + (20601, 5365), + (20602, 5367), + (20603, 5369), + (20604, 5371), + (20605, 5373), + (20606, 5375), + (20607, 5377), + (20608, 5379), + (20609, 5381), + (20610, 5383), + (20611, 5385), + (20612, 5387), + (20613, 5389), + (20614, 5391), + (20615, 5393), + (20616, 5395), + (20617, 5397), + (20618, 5399), + (20619, 5401), + (20620, 5403), + (20621, 5405), + (20622, 5407), + (20623, 5409), + (20624, 5411), + (20625, 5413), + (20626, 5415), + (20627, 5417), + (20628, 5419), + (20629, 5421), + (20630, 5423), + (20631, 5425), + (20632, 5427), + (20633, 5429), + (20634, 5431), + (20635, 5433), + (20636, 5435), + (20637, 5437), + (20638, 5439), + (20639, 5441), + (20640, 5443), + (20641, 5445), + (20642, 5447), + (20643, 5449), + (20644, 5451), + (20645, 5453), + (20646, 5455), + (20647, 5457), + (20648, 5459), + (20649, 5462), + (20650, 5465), + (20651, 5468), + (20652, 5471), + (20653, 5474), + (20654, 5477), + (20655, 5480), + (20656, 5483), + (20657, 5486), + (20658, 5489), + (20659, 5492), + (20660, 5495), + (20661, 5498), + (20662, 5501), + (20663, 5504), + (20664, 5507), + (20665, 5510), + (20666, 5513), + (20667, 5516), + (20668, 5519), + (20669, 5522), + (20670, 5525), + (20671, 5528), + (20672, 5531), + (20673, 5534), + (20674, 5537), + (20675, 5540), + (20676, 5543), + (20677, 5546), + (20678, 5549), + (20679, 5552), + (20680, 5555), + (20681, 5558), + (20682, 5561), + (20683, 5564), + (20684, 5567), + (20685, 5570), + (20686, 5573), + (20687, 5576), + (20688, 5579), + (20689, 5582), + (20690, 5585), + (20691, 5588), + (20692, 5591), + (20693, 5594), + (20694, 5597), + (20695, 5600), + (20696, 5603), + (20697, 5606), + (20698, 5609), + (20699, 5612), + (20700, 5615), + (20701, 5618), + (20702, 5621), + (20703, 5624), + (20704, 5627), + (20705, 5630), + (20706, 5633), + (20707, 5636), + (20708, 5639), + (20709, 5642), + (20710, 5645), + (20711, 5648), + (20712, 5651), + (20713, 5654), + (20714, 5657), + (20715, 5660), + (20716, 5663), + (20717, 5666), + (20718, 5669), + (20719, 5672), + (20720, 5675), + (20721, 5678), + (20722, 5681), + (20723, 5684), + (20724, 5687), + (20725, 5690), + (20726, 5693), + (20727, 5696), + (20728, 5699), + (20729, 5702), + (20730, 5705), + (20731, 5708), + (20732, 5711), + (20733, 5714), + (20734, 5717), + (20735, 5720), + (20736, 5723), + (20737, 5726), + (20738, 5729), + (20739, 5732), + (20740, 5735), + (20741, 5738), + (20742, 5741), + (20743, 5744), + (20744, 5747), + (20745, 5750), + (20746, 5753), + (20747, 5756), + (20748, 5759), + (20749, 5761), + (20750, 5763), + (20751, 5765), + (20752, 5767), + (20753, 5769), + (20754, 5771), + (20755, 5773), + (20756, 5775), + (20757, 5777), + (20758, 5779), + (20759, 5781), + (20760, 5783), + (20761, 5785), + (20762, 5787), + (20763, 5789), + (20764, 5791), + (20765, 5793), + (20766, 5795), + (20767, 5797), + (20768, 5799), + (20769, 5801), + (20770, 5803), + (20771, 5805), + (20772, 5807), + (20773, 5809), + (20774, 5811), + (20775, 5813), + (20776, 5815), + (20777, 5817), + (20778, 5819), + (20779, 5821), + (20780, 5823), + (20781, 5825), + (20782, 5827), + (20783, 5829), + (20784, 5831), + (20785, 5833), + (20786, 5835), + (20787, 5837), + (20788, 5839), + (20789, 5841), + (20790, 5843), + (20791, 5845), + (20792, 5847), + (20793, 5849), + (20794, 5851), + (20795, 5853), + (20796, 5855), + (20797, 5857), + (20798, 5859), + (20799, 5861), + (20800, 5863), + (20801, 5865), + (20802, 5867), + (20803, 5869), + (20804, 5871), + (20805, 5873), + (20806, 5875), + (20807, 5877), + (20808, 5879), + (20809, 5881), + (20810, 5883), + (20811, 5885), + (20812, 5887), + (20813, 5889), + (20814, 5891), + (20815, 5893), + (20816, 5895), + (20817, 5897), + (20818, 5899), + (20819, 5901), + (20820, 5903), + (20821, 5905), + (20822, 5907), + (20823, 5909), + (20824, 5911), + (20825, 5913), + (20826, 5915), + (20827, 5917), + (20828, 5919), + (20829, 5921), + (20830, 5923), + (20831, 5925), + (20832, 5927), + (20833, 5929), + (20834, 5931), + (20835, 5933), + (20836, 5935), + (20837, 5937), + (20838, 5939), + (20839, 5941), + (20840, 5943), + (20841, 5945), + (20842, 5947), + (20843, 5949), + (20844, 5951), + (20845, 5953), + (20846, 5955), + (20847, 5957), + (20848, 5959), + (20849, 5962), + (20850, 5965), + (20851, 5968), + (20852, 5971), + (20853, 5974), + (20854, 5977), + (20855, 5980), + (20856, 5983), + (20857, 5986), + (20858, 5989), + (20859, 5992), + (20860, 5995), + (20861, 5998), + (20862, 6001), + (20863, 6004), + (20864, 6007), + (20865, 6010), + (20866, 6013), + (20867, 6016), + (20868, 6019), + (20869, 6022), + (20870, 6025), + (20871, 6028), + (20872, 6031), + (20873, 6034), + (20874, 6037), + (20875, 6040), + (20876, 6043), + (20877, 6046), + (20878, 6049), + (20879, 6052), + (20880, 6055), + (20881, 6058), + (20882, 6061), + (20883, 6064), + (20884, 6067), + (20885, 6070), + (20886, 6073), + (20887, 6076), + (20888, 6079), + (20889, 6082), + (20890, 6085), + (20891, 6088), + (20892, 6091), + (20893, 6094), + (20894, 6097), + (20895, 6100), + (20896, 6103), + (20897, 6106), + (20898, 6109), + (20899, 6111), + (20900, 6113), + (20901, 6115), + (20902, 6117), + (20903, 6119), + (20904, 6121), + (20905, 6123), + (20906, 6125), + (20907, 6127), + (20908, 6129), + (20909, 6131), + (20910, 6133), + (20911, 6135), + (20912, 6137), + (20913, 6139), + (20914, 6141), + (20915, 6143), + (20916, 6145), + (20917, 6147), + (20918, 6149), + (20919, 6152), + (20920, 6155), + (20921, 6157), + (20922, 6159), + (20923, 6161), + (20924, 6163), + (20925, 6165), + (20926, 6167), + (20927, 6170), + (20928, 6173), + (20929, 6179), + (20930, 6188), + (20931, 6200), + (20932, 6215), + (20933, 6227), + (20934, 6239), + (20935, 6251), + (20936, 6260), + (20937, 6269), + (20938, 6278), + (20939, 6290), + (20940, 6296), + (20941, 6305), + (20942, 6320), + (20943, 6326), + (20944, 6335), + (20945, 6347), + (20946, 6362), + (20947, 6374), + (20948, 6386), + (20949, 6398), + (20950, 6407), + (20951, 6416), + (20952, 6425), + (20953, 6437), + (20954, 6443), + (20955, 6452), + (20956, 6467), + (20959, 6473), + (20960, 6479), +]; + +/// The texts `JAPAN1_OTHER` points into, run together. +pub static JAPAN1_OTHER_TEXT: &str = "\u{28cdd}\u{25874}\u{28ef6}\u{2f884}\u{2f80f}\u{2f8d3}\u{21a1a}\u{243d0}\u{2f920}\u{1f100}\u{73}\u{65}\u{63}\u{6d}\u{69}\u{6e}\u{58}\u{49}\u{49}\u{49}\u{58}\u{49}\u{56}\u{58}\u{56}\u{78}\u{69}\u{69}\u{69}\u{78}\u{69}\u{76}\u{78}\u{76}\u{54}\u{42}\u{6709}\u{9650}\u{4f1a}\u{793e}\u{8ca1}\u{56e3}\u{6cd5}\u{4eba}\u{6709}\u{9650}\u{4f1a}\u{793e}\u{8ca1}\u{56e3}\u{6cd5}\u{4eba}\u{45}\u{30a}\u{49}\u{30a}\u{4f}\u{30a}\u{65}\u{30a}\u{131}\u{30a}\u{6f}\u{30a}\u{45}\u{30a}\u{49}\u{30a}\u{4f}\u{30a}\u{65}\u{30a}\u{131}\u{30a}\u{6f}\u{30a}\u{32}\u{2f}\u{37}\u{33}\u{2f}\u{37}\u{34}\u{2f}\u{37}\u{35}\u{2f}\u{37}\u{36}\u{2f}\u{37}\u{32}\u{2f}\u{39}\u{34}\u{2f}\u{39}\u{35}\u{2f}\u{39}\u{37}\u{2f}\u{39}\u{38}\u{2f}\u{39}\u{33}\u{2f}\u{31}\u{30}\u{37}\u{2f}\u{31}\u{30}\u{39}\u{2f}\u{31}\u{30}\u{31}\u{2f}\u{31}\u{31}\u{32}\u{2f}\u{31}\u{31}\u{33}\u{2f}\u{31}\u{31}\u{34}\u{2f}\u{31}\u{31}\u{35}\u{2f}\u{31}\u{31}\u{36}\u{2f}\u{31}\u{31}\u{37}\u{2f}\u{31}\u{31}\u{38}\u{2f}\u{31}\u{31}\u{39}\u{2f}\u{31}\u{31}\u{31}\u{30}\u{2f}\u{31}\u{31}\u{31}\u{2f}\u{31}\u{32}\u{35}\u{2f}\u{31}\u{32}\u{37}\u{2f}\u{31}\u{32}\u{31}\u{31}\u{2f}\u{31}\u{32}\u{31}\u{2f}\u{31}\u{30}\u{30}\u{30}\u{2f}\u{33}\u{31}\u{2f}\u{32}\u{31}\u{2f}\u{33}\u{32}\u{2f}\u{33}\u{31}\u{2f}\u{34}\u{33}\u{2f}\u{34}\u{31}\u{2f}\u{35}\u{32}\u{2f}\u{35}\u{33}\u{2f}\u{35}\u{34}\u{2f}\u{35}\u{31}\u{2f}\u{36}\u{35}\u{2f}\u{36}\u{31}\u{2f}\u{37}\u{32}\u{2f}\u{37}\u{33}\u{2f}\u{37}\u{34}\u{2f}\u{37}\u{35}\u{2f}\u{37}\u{36}\u{2f}\u{37}\u{31}\u{2f}\u{38}\u{33}\u{2f}\u{38}\u{35}\u{2f}\u{38}\u{37}\u{2f}\u{38}\u{31}\u{2f}\u{39}\u{32}\u{2f}\u{39}\u{34}\u{2f}\u{39}\u{35}\u{2f}\u{39}\u{37}\u{2f}\u{39}\u{38}\u{2f}\u{39}\u{31}\u{2f}\u{31}\u{30}\u{33}\u{2f}\u{31}\u{30}\u{37}\u{2f}\u{31}\u{30}\u{39}\u{2f}\u{31}\u{30}\u{31}\u{2f}\u{31}\u{31}\u{32}\u{2f}\u{31}\u{31}\u{33}\u{2f}\u{31}\u{31}\u{34}\u{2f}\u{31}\u{31}\u{35}\u{2f}\u{31}\u{31}\u{36}\u{2f}\u{31}\u{31}\u{37}\u{2f}\u{31}\u{31}\u{38}\u{2f}\u{31}\u{31}\u{39}\u{2f}\u{31}\u{31}\u{31}\u{30}\u{2f}\u{31}\u{31}\u{31}\u{2f}\u{31}\u{32}\u{35}\u{2f}\u{31}\u{32}\u{37}\u{2f}\u{31}\u{32}\u{31}\u{31}\u{2f}\u{31}\u{32}\u{31}\u{2f}\u{31}\u{30}\u{30}\u{30}\u{30}\u{30}\u{31}\u{30}\u{32}\u{30}\u{33}\u{30}\u{34}\u{30}\u{35}\u{30}\u{36}\u{30}\u{37}\u{30}\u{38}\u{30}\u{39}\u{32}\u{31}\u{32}\u{32}\u{32}\u{33}\u{32}\u{34}\u{32}\u{35}\u{32}\u{36}\u{32}\u{37}\u{32}\u{38}\u{32}\u{39}\u{33}\u{30}\u{33}\u{31}\u{33}\u{32}\u{33}\u{33}\u{33}\u{34}\u{33}\u{35}\u{33}\u{36}\u{33}\u{37}\u{33}\u{38}\u{33}\u{39}\u{34}\u{30}\u{34}\u{31}\u{34}\u{32}\u{34}\u{33}\u{34}\u{34}\u{34}\u{35}\u{34}\u{36}\u{34}\u{37}\u{34}\u{38}\u{34}\u{39}\u{35}\u{30}\u{35}\u{31}\u{35}\u{32}\u{35}\u{33}\u{35}\u{34}\u{35}\u{35}\u{35}\u{36}\u{35}\u{37}\u{35}\u{38}\u{35}\u{39}\u{36}\u{30}\u{36}\u{31}\u{36}\u{32}\u{36}\u{33}\u{36}\u{34}\u{36}\u{35}\u{36}\u{36}\u{36}\u{37}\u{36}\u{38}\u{36}\u{39}\u{37}\u{30}\u{37}\u{31}\u{37}\u{32}\u{37}\u{33}\u{37}\u{34}\u{37}\u{35}\u{37}\u{36}\u{37}\u{37}\u{37}\u{38}\u{37}\u{39}\u{38}\u{30}\u{38}\u{31}\u{38}\u{32}\u{38}\u{33}\u{38}\u{34}\u{38}\u{35}\u{38}\u{36}\u{38}\u{37}\u{38}\u{38}\u{38}\u{39}\u{39}\u{30}\u{39}\u{31}\u{39}\u{32}\u{39}\u{33}\u{39}\u{34}\u{39}\u{35}\u{39}\u{36}\u{39}\u{37}\u{39}\u{38}\u{39}\u{39}\u{31}\u{30}\u{30}\u{78}\u{69}\u{69}\u{69}\u{78}\u{69}\u{76}\u{78}\u{76}\u{58}\u{49}\u{49}\u{49}\u{58}\u{49}\u{56}\u{58}\u{56}\u{1f110}\u{1f111}\u{1f112}\u{1f113}\u{1f114}\u{1f115}\u{1f116}\u{1f117}\u{1f118}\u{1f119}\u{1f11a}\u{1f11b}\u{1f11c}\u{1f11d}\u{1f11e}\u{1f11f}\u{1f120}\u{1f121}\u{1f122}\u{1f123}\u{1f124}\u{1f125}\u{1f126}\u{1f127}\u{1f128}\u{1f129}\u{5341}\u{4e00}\u{5341}\u{4e8c}\u{5341}\u{4e09}\u{5341}\u{56db}\u{5341}\u{4e94}\u{5341}\u{516d}\u{5341}\u{4e03}\u{5341}\u{516b}\u{5341}\u{4e5d}\u{4e8c}\u{5341}\u{28}\u{29}\u{30}\u{30}\u{35}\u{31}\u{35}\u{32}\u{35}\u{33}\u{35}\u{34}\u{35}\u{35}\u{35}\u{36}\u{35}\u{37}\u{35}\u{38}\u{35}\u{39}\u{36}\u{30}\u{36}\u{31}\u{36}\u{32}\u{36}\u{33}\u{36}\u{34}\u{36}\u{35}\u{36}\u{36}\u{36}\u{37}\u{36}\u{38}\u{36}\u{39}\u{37}\u{30}\u{37}\u{31}\u{37}\u{32}\u{37}\u{33}\u{37}\u{34}\u{37}\u{35}\u{37}\u{36}\u{37}\u{37}\u{37}\u{38}\u{37}\u{39}\u{38}\u{30}\u{38}\u{31}\u{38}\u{32}\u{38}\u{33}\u{38}\u{34}\u{38}\u{35}\u{38}\u{36}\u{38}\u{37}\u{38}\u{38}\u{38}\u{39}\u{39}\u{30}\u{39}\u{31}\u{39}\u{32}\u{39}\u{33}\u{39}\u{34}\u{39}\u{35}\u{39}\u{36}\u{39}\u{37}\u{39}\u{38}\u{39}\u{39}\u{31}\u{30}\u{30}\u{30}\u{30}\u{30}\u{31}\u{30}\u{32}\u{30}\u{33}\u{30}\u{34}\u{30}\u{35}\u{30}\u{36}\u{30}\u{37}\u{30}\u{38}\u{30}\u{39}\u{32}\u{31}\u{32}\u{32}\u{32}\u{33}\u{32}\u{34}\u{32}\u{35}\u{32}\u{36}\u{32}\u{37}\u{32}\u{38}\u{32}\u{39}\u{33}\u{30}\u{33}\u{31}\u{33}\u{32}\u{33}\u{33}\u{33}\u{34}\u{33}\u{35}\u{33}\u{36}\u{33}\u{37}\u{33}\u{38}\u{33}\u{39}\u{34}\u{30}\u{34}\u{31}\u{34}\u{32}\u{34}\u{33}\u{34}\u{34}\u{34}\u{35}\u{34}\u{36}\u{34}\u{37}\u{34}\u{38}\u{34}\u{39}\u{35}\u{30}\u{35}\u{31}\u{35}\u{32}\u{35}\u{33}\u{35}\u{34}\u{35}\u{35}\u{35}\u{36}\u{35}\u{37}\u{35}\u{38}\u{35}\u{39}\u{36}\u{30}\u{36}\u{31}\u{36}\u{32}\u{36}\u{33}\u{36}\u{34}\u{36}\u{35}\u{36}\u{36}\u{36}\u{37}\u{36}\u{38}\u{36}\u{39}\u{37}\u{30}\u{37}\u{31}\u{37}\u{32}\u{37}\u{33}\u{37}\u{34}\u{37}\u{35}\u{37}\u{36}\u{37}\u{37}\u{37}\u{38}\u{37}\u{39}\u{38}\u{30}\u{38}\u{31}\u{38}\u{32}\u{38}\u{33}\u{38}\u{34}\u{38}\u{35}\u{38}\u{36}\u{38}\u{37}\u{38}\u{38}\u{38}\u{39}\u{39}\u{30}\u{39}\u{31}\u{39}\u{32}\u{39}\u{33}\u{39}\u{34}\u{39}\u{35}\u{39}\u{36}\u{39}\u{37}\u{39}\u{38}\u{39}\u{39}\u{31}\u{30}\u{30}\u{1f150}\u{1f151}\u{1f152}\u{1f153}\u{1f154}\u{1f155}\u{1f156}\u{1f157}\u{1f158}\u{1f159}\u{1f15a}\u{1f15b}\u{1f15c}\u{1f15d}\u{1f15e}\u{1f15f}\u{1f160}\u{1f161}\u{1f162}\u{1f163}\u{1f164}\u{1f165}\u{1f166}\u{1f167}\u{1f168}\u{1f169}\u{30}\u{30}\u{30}\u{31}\u{30}\u{32}\u{30}\u{33}\u{30}\u{34}\u{30}\u{35}\u{30}\u{36}\u{30}\u{37}\u{30}\u{38}\u{30}\u{39}\u{31}\u{30}\u{31}\u{31}\u{31}\u{32}\u{31}\u{33}\u{31}\u{34}\u{31}\u{35}\u{31}\u{36}\u{31}\u{37}\u{31}\u{38}\u{31}\u{39}\u{32}\u{30}\u{32}\u{31}\u{32}\u{32}\u{32}\u{33}\u{32}\u{34}\u{32}\u{35}\u{32}\u{36}\u{32}\u{37}\u{32}\u{38}\u{32}\u{39}\u{33}\u{30}\u{33}\u{31}\u{33}\u{32}\u{33}\u{33}\u{33}\u{34}\u{33}\u{35}\u{33}\u{36}\u{33}\u{37}\u{33}\u{38}\u{33}\u{39}\u{34}\u{30}\u{34}\u{31}\u{34}\u{32}\u{34}\u{33}\u{34}\u{34}\u{34}\u{35}\u{34}\u{36}\u{34}\u{37}\u{34}\u{38}\u{34}\u{39}\u{35}\u{30}\u{35}\u{31}\u{35}\u{32}\u{35}\u{33}\u{35}\u{34}\u{35}\u{35}\u{35}\u{36}\u{35}\u{37}\u{35}\u{38}\u{35}\u{39}\u{36}\u{30}\u{36}\u{31}\u{36}\u{32}\u{36}\u{33}\u{36}\u{34}\u{36}\u{35}\u{36}\u{36}\u{36}\u{37}\u{36}\u{38}\u{36}\u{39}\u{37}\u{30}\u{37}\u{31}\u{37}\u{32}\u{37}\u{33}\u{37}\u{34}\u{37}\u{35}\u{37}\u{36}\u{37}\u{37}\u{37}\u{38}\u{37}\u{39}\u{38}\u{30}\u{38}\u{31}\u{38}\u{32}\u{38}\u{33}\u{38}\u{34}\u{38}\u{35}\u{38}\u{36}\u{38}\u{37}\u{38}\u{38}\u{38}\u{39}\u{39}\u{30}\u{39}\u{31}\u{39}\u{32}\u{39}\u{33}\u{39}\u{34}\u{39}\u{35}\u{39}\u{36}\u{39}\u{37}\u{39}\u{38}\u{39}\u{39}\u{31}\u{30}\u{30}\u{1f130}\u{1f131}\u{1f132}\u{1f133}\u{1f134}\u{1f135}\u{1f136}\u{1f137}\u{1f138}\u{1f139}\u{1f13a}\u{1f13b}\u{1f13c}\u{1f13d}\u{1f13e}\u{1f13f}\u{1f140}\u{1f141}\u{1f142}\u{1f143}\u{1f144}\u{1f145}\u{1f146}\u{1f147}\u{1f148}\u{1f149}\u{1f202}\u{1f237}\u{30}\u{30}\u{30}\u{31}\u{30}\u{32}\u{30}\u{33}\u{30}\u{34}\u{30}\u{35}\u{30}\u{36}\u{30}\u{37}\u{30}\u{38}\u{30}\u{39}\u{31}\u{30}\u{31}\u{31}\u{31}\u{32}\u{31}\u{33}\u{31}\u{34}\u{31}\u{35}\u{31}\u{36}\u{31}\u{37}\u{31}\u{38}\u{31}\u{39}\u{32}\u{30}\u{32}\u{31}\u{32}\u{32}\u{32}\u{33}\u{32}\u{34}\u{32}\u{35}\u{32}\u{36}\u{32}\u{37}\u{32}\u{38}\u{32}\u{39}\u{33}\u{30}\u{33}\u{31}\u{33}\u{32}\u{33}\u{33}\u{33}\u{34}\u{33}\u{35}\u{33}\u{36}\u{33}\u{37}\u{33}\u{38}\u{33}\u{39}\u{34}\u{30}\u{34}\u{31}\u{34}\u{32}\u{34}\u{33}\u{34}\u{34}\u{34}\u{35}\u{34}\u{36}\u{34}\u{37}\u{34}\u{38}\u{34}\u{39}\u{35}\u{30}\u{35}\u{31}\u{35}\u{32}\u{35}\u{33}\u{35}\u{34}\u{35}\u{35}\u{35}\u{36}\u{35}\u{37}\u{35}\u{38}\u{35}\u{39}\u{36}\u{30}\u{36}\u{31}\u{36}\u{32}\u{36}\u{33}\u{36}\u{34}\u{36}\u{35}\u{36}\u{36}\u{36}\u{37}\u{36}\u{38}\u{36}\u{39}\u{37}\u{30}\u{37}\u{31}\u{37}\u{32}\u{37}\u{33}\u{37}\u{34}\u{37}\u{35}\u{37}\u{36}\u{37}\u{37}\u{37}\u{38}\u{37}\u{39}\u{38}\u{30}\u{38}\u{31}\u{38}\u{32}\u{38}\u{33}\u{38}\u{34}\u{38}\u{35}\u{38}\u{36}\u{38}\u{37}\u{38}\u{38}\u{38}\u{39}\u{39}\u{30}\u{39}\u{31}\u{39}\u{32}\u{39}\u{33}\u{39}\u{34}\u{39}\u{35}\u{39}\u{36}\u{39}\u{37}\u{39}\u{38}\u{39}\u{39}\u{31}\u{30}\u{30}\u{30}\u{30}\u{30}\u{31}\u{30}\u{32}\u{30}\u{33}\u{30}\u{34}\u{30}\u{35}\u{30}\u{36}\u{30}\u{37}\u{30}\u{38}\u{30}\u{39}\u{31}\u{30}\u{31}\u{31}\u{31}\u{32}\u{31}\u{33}\u{31}\u{34}\u{31}\u{35}\u{31}\u{36}\u{31}\u{37}\u{31}\u{38}\u{31}\u{39}\u{32}\u{30}\u{32}\u{31}\u{32}\u{32}\u{32}\u{33}\u{32}\u{34}\u{32}\u{35}\u{32}\u{36}\u{32}\u{37}\u{32}\u{38}\u{32}\u{39}\u{33}\u{30}\u{33}\u{31}\u{33}\u{32}\u{33}\u{33}\u{33}\u{34}\u{33}\u{35}\u{33}\u{36}\u{33}\u{37}\u{33}\u{38}\u{33}\u{39}\u{34}\u{30}\u{34}\u{31}\u{34}\u{32}\u{34}\u{33}\u{34}\u{34}\u{34}\u{35}\u{34}\u{36}\u{34}\u{37}\u{34}\u{38}\u{34}\u{39}\u{35}\u{30}\u{35}\u{31}\u{35}\u{32}\u{35}\u{33}\u{35}\u{34}\u{35}\u{35}\u{35}\u{36}\u{35}\u{37}\u{35}\u{38}\u{35}\u{39}\u{36}\u{30}\u{36}\u{31}\u{36}\u{32}\u{36}\u{33}\u{36}\u{34}\u{36}\u{35}\u{36}\u{36}\u{36}\u{37}\u{36}\u{38}\u{36}\u{39}\u{37}\u{30}\u{37}\u{31}\u{37}\u{32}\u{37}\u{33}\u{37}\u{34}\u{37}\u{35}\u{37}\u{36}\u{37}\u{37}\u{37}\u{38}\u{37}\u{39}\u{38}\u{30}\u{38}\u{31}\u{38}\u{32}\u{38}\u{33}\u{38}\u{34}\u{38}\u{35}\u{38}\u{36}\u{38}\u{37}\u{38}\u{38}\u{38}\u{39}\u{39}\u{30}\u{39}\u{31}\u{39}\u{32}\u{39}\u{33}\u{39}\u{34}\u{39}\u{35}\u{39}\u{36}\u{39}\u{37}\u{39}\u{38}\u{39}\u{39}\u{31}\u{30}\u{30}\u{30}\u{30}\u{30}\u{31}\u{30}\u{32}\u{30}\u{33}\u{30}\u{34}\u{30}\u{35}\u{30}\u{36}\u{30}\u{37}\u{30}\u{38}\u{30}\u{39}\u{31}\u{30}\u{31}\u{31}\u{31}\u{32}\u{31}\u{33}\u{31}\u{34}\u{31}\u{35}\u{31}\u{36}\u{31}\u{37}\u{31}\u{38}\u{31}\u{39}\u{32}\u{30}\u{32}\u{31}\u{32}\u{32}\u{32}\u{33}\u{32}\u{34}\u{32}\u{35}\u{32}\u{36}\u{32}\u{37}\u{32}\u{38}\u{32}\u{39}\u{33}\u{30}\u{33}\u{31}\u{33}\u{32}\u{33}\u{33}\u{33}\u{34}\u{33}\u{35}\u{33}\u{36}\u{33}\u{37}\u{33}\u{38}\u{33}\u{39}\u{34}\u{30}\u{34}\u{31}\u{34}\u{32}\u{34}\u{33}\u{34}\u{34}\u{34}\u{35}\u{34}\u{36}\u{34}\u{37}\u{34}\u{38}\u{34}\u{39}\u{35}\u{30}\u{35}\u{31}\u{35}\u{32}\u{35}\u{33}\u{35}\u{34}\u{35}\u{35}\u{35}\u{36}\u{35}\u{37}\u{35}\u{38}\u{35}\u{39}\u{36}\u{30}\u{36}\u{31}\u{36}\u{32}\u{36}\u{33}\u{36}\u{34}\u{36}\u{35}\u{36}\u{36}\u{36}\u{37}\u{36}\u{38}\u{36}\u{39}\u{37}\u{30}\u{37}\u{31}\u{37}\u{32}\u{37}\u{33}\u{37}\u{34}\u{37}\u{35}\u{37}\u{36}\u{37}\u{37}\u{37}\u{38}\u{37}\u{39}\u{38}\u{30}\u{38}\u{31}\u{38}\u{32}\u{38}\u{33}\u{38}\u{34}\u{38}\u{35}\u{38}\u{36}\u{38}\u{37}\u{38}\u{38}\u{38}\u{39}\u{39}\u{30}\u{39}\u{31}\u{39}\u{32}\u{39}\u{33}\u{39}\u{34}\u{39}\u{35}\u{39}\u{36}\u{39}\u{37}\u{39}\u{38}\u{39}\u{39}\u{31}\u{30}\u{30}\u{1f170}\u{1f171}\u{1f172}\u{1f173}\u{1f174}\u{1f175}\u{1f176}\u{1f177}\u{1f178}\u{1f179}\u{1f17a}\u{1f17b}\u{1f17c}\u{1f17d}\u{1f17e}\u{1f17f}\u{1f180}\u{1f181}\u{1f182}\u{1f183}\u{1f184}\u{1f185}\u{1f186}\u{1f187}\u{1f188}\u{1f189}\u{50}\u{48}\u{56}\u{53}\u{63}\u{2f}\u{63}\u{6d}\u{2f}\u{6d}\u{6e}\u{2f}\u{6d}\u{3055}\u{3058}\u{3055}\u{3058}\u{30a2}\u{30c8}\u{30a6}\u{30eb}\u{30b7}\u{30a8}\u{30af}\u{30b5}\u{30aa}\u{30f3}\u{30b0}\u{30b9}\u{30c8}\u{30ed}\u{30fc}\u{30e0}\u{30aa}\u{30f3}\u{30c8}\u{30ed}\u{30ab}\u{30c3}\u{30d7}\u{30ad}\u{30ed}\u{30ea}\u{30c3}\u{30c8}\u{30eb}\u{30b0}\u{30b9}\u{30fc}\u{30e0}\u{30af}\u{30eb}\u{30b6}\u{30fc}\u{30c9}\u{30c7}\u{30ab}\u{30c6}\u{30e9}\u{30c9}\u{30e9}\u{30af}\u{30de}\u{30d0}\u{30fc}\u{30c4}\u{30d1}\u{30b9}\u{30ab}\u{30eb}\u{30d0}\u{30ec}\u{30eb}\u{30d5}\u{30a1}\u{30e9}\u{30c9}\u{30d5}\u{30a7}\u{30e0}\u{30c8}\u{30d8}\u{30af}\u{30c8}\u{30d8}\u{30af}\u{30c8}\u{30d1}\u{30b9}\u{30ab}\u{30eb}\u{30da}\u{30bb}\u{30bf}\u{30da}\u{30bf}\u{30e6}\u{30fc}\u{30ed}\u{30e9}\u{30c9}\u{30eb}\u{30af}\u{30b9}\u{30eb}\u{30d4}\u{30a2}\u{30a2}\u{30c8}\u{30a6}\u{30eb}\u{30b7}\u{30a8}\u{30af}\u{30b5}\u{30aa}\u{30f3}\u{30b0}\u{30b9}\u{30c8}\u{30ed}\u{30fc}\u{30e0}\u{30aa}\u{30f3}\u{30c8}\u{30ed}\u{30ab}\u{30c3}\u{30d7}\u{30ad}\u{30ed}\u{30ea}\u{30c4}\u{30c8}\u{30eb}\u{30b0}\u{30b9}\u{30fc}\u{30e0}\u{30af}\u{30eb}\u{30b6}\u{30cf}\u{30c9}\u{30c7}\u{30ab}\u{30c6}\u{30e9}\u{30c9}\u{30e9}\u{30af}\u{30de}\u{30d0}\u{30fc}\u{30c4}\u{30d1}\u{30b9}\u{30ab}\u{30eb}\u{30d0}\u{30ec}\u{30eb}\u{30d5}\u{30a1}\u{30e9}\u{30c9}\u{30d5}\u{30a7}\u{30e0}\u{30c8}\u{30d8}\u{30af}\u{30c8}\u{30d8}\u{30af}\u{30c8}\u{30d1}\u{30b9}\u{30ab}\u{30eb}\u{30da}\u{30bb}\u{30bf}\u{30da}\u{30bf}\u{30e6}\u{30fc}\u{30ed}\u{30e9}\u{30c9}\u{30eb}\u{30af}\u{30b9}\u{30eb}\u{30d4}\u{30a2}\u{533b}\u{7642}\u{6cd5}\u{4eba}\u{5b66}\u{6821}\u{6cd5}\u{4eba}\u{5171}\u{540c}\u{7d44}\u{5408}\u{5354}\u{540c}\u{7d44}\u{5408}\u{5408}\u{8cc7}\u{4f1a}\u{793e}\u{5408}\u{540d}\u{4f1a}\u{793e}\u{793e}\u{56e3}\u{6cd5}\u{4eba}\u{5b97}\u{6559}\u{6cd5}\u{4eba}\u{90f5}\u{4fbf}\u{756a}\u{53f7}\u{533b}\u{7642}\u{6cd5}\u{4eba}\u{5b66}\u{6821}\u{6cd5}\u{4eba}\u{5171}\u{540c}\u{7d44}\u{5408}\u{5354}\u{540c}\u{7d44}\u{5408}\u{5408}\u{8cc7}\u{4f1a}\u{793e}\u{5408}\u{540d}\u{4f1a}\u{793e}\u{793e}\u{56e3}\u{6cd5}\u{4eba}\u{5b97}\u{6559}\u{6cd5}\u{4eba}\u{90f5}\u{4fbf}\u{756a}\u{53f7}\u{4a}\u{41}\u{53}\u{5c}\u{5c}\u{1b132}\u{1b132}\u{1b155}\u{1b155}\u{1b132}\u{1b155}\u{1b132}\u{1b155}\u{45}\u{30a}\u{49}\u{30a}\u{4f}\u{30a}\u{65}\u{30a}\u{131}\u{30a}\u{6f}\u{30a}\u{45}\u{30a}\u{49}\u{30a}\u{4f}\u{30a}\u{65}\u{30a}\u{131}\u{30a}\u{6f}\u{30a}\u{2f945}\u{2090e}\u{26951}\u{2b7d8}\u{2f8fc}\u{2f995}\u{2f8ea}\u{2f822}\u{26222}\u{20bb7}\u{29d4b}\u{29d4b}\u{2f833}\u{2363a}\u{2b78e}\u{2f8ac}\u{20a64}\u{2f903}\u{2b746}\u{2b777}\u{2f90b}\u{20b9f}\u{2f828}\u{2f921}\u{2f83f}\u{2f873}\u{2d544}\u{2000b}\u{2f852}\u{2967f}\u{2f947}\u{201a2}\u{2e569}\u{2b751}\u{2f8b2}\u{27fb7}\u{23cfe}\u{2f91a}\u{25ad7}\u{2f89a}\u{2f90f}\u{2123d}\u{2f81a}\u{24d14}\u{2f862}\u{2b789}\u{2f9d0}\u{2f9df}\u{2567f}\u{266b0}\u{20628}\u{2008a}\u{20984}\u{2f86d}\u{2f8b6}\u{26999}\u{233cc}\u{2a9e6}\u{2b7bd}\u{2f96c}\u{2e278}\u{2053f}\u{2626a}\u{26270}\u{200b0}\u{2e6ea}\u{28987}\u{28e17}\u{2b81a}\u{2a61a}\u{242ee}\u{242ee}\u{2f8e1}\u{23cbe}\u{20611}\u{2f9f4}\u{2f804}\u{2363a}\u{233fe}\u{235c4}\u{29e3d}\u{22609}\u{304b}\u{309a}\u{304d}\u{309a}\u{304f}\u{309a}\u{3051}\u{309a}\u{3053}\u{309a}\u{30ab}\u{309a}\u{30ad}\u{309a}\u{30af}\u{309a}\u{30b1}\u{309a}\u{30b3}\u{309a}\u{30bb}\u{309a}\u{30c4}\u{309a}\u{30c8}\u{309a}\u{31f7}\u{309a}\u{1b132}\u{1b155}\u{2e9}\u{2e5}\u{2e5}\u{2e9}\u{304b}\u{309a}\u{304d}\u{309a}\u{304f}\u{309a}\u{3051}\u{309a}\u{3053}\u{309a}\u{30ab}\u{309a}\u{30ad}\u{309a}\u{30af}\u{309a}\u{30b1}\u{309a}\u{30b3}\u{309a}\u{30bb}\u{309a}\u{30c4}\u{309a}\u{30c8}\u{309a}\u{31f7}\u{309a}\u{1b132}\u{1b155}\u{304b}\u{309a}\u{304d}\u{309a}\u{304f}\u{309a}\u{3051}\u{309a}\u{3053}\u{309a}\u{30ab}\u{309a}\u{30ad}\u{309a}\u{30af}\u{309a}\u{30b1}\u{309a}\u{30b3}\u{309a}\u{30bb}\u{309a}\u{30c4}\u{309a}\u{30c8}\u{309a}\u{31f7}\u{309a}\u{31f7}\u{309a}\u{304b}\u{309a}\u{304d}\u{309a}\u{304f}\u{309a}\u{3051}\u{309a}\u{3053}\u{309a}\u{30ab}\u{309a}\u{30ad}\u{309a}\u{30af}\u{309a}\u{30b1}\u{309a}\u{30b3}\u{309a}\u{30bb}\u{309a}\u{30c4}\u{309a}\u{30c8}\u{309a}\u{31f7}\u{309a}\u{304b}\u{309a}\u{304d}\u{309a}\u{304f}\u{309a}\u{3051}\u{309a}\u{3053}\u{309a}\u{30ab}\u{309a}\u{30ad}\u{309a}\u{30af}\u{309a}\u{30b1}\u{309a}\u{30b3}\u{309a}\u{30bb}\u{309a}\u{30c4}\u{309a}\u{30c8}\u{309a}\u{31f7}\u{309a}\u{304b}\u{309a}\u{304d}\u{309a}\u{304f}\u{309a}\u{3051}\u{309a}\u{3053}\u{309a}\u{30ab}\u{309a}\u{30ad}\u{309a}\u{30af}\u{309a}\u{30b1}\u{309a}\u{30b3}\u{309a}\u{30bb}\u{309a}\u{30c4}\u{309a}\u{30c8}\u{309a}\u{31f7}\u{309a}\u{1b132}\u{1b155}\u{31f7}\u{309a}\u{1b132}\u{1b155}\u{2e9}\u{2e5}\u{2e5}\u{2e9}\u{2131b}\u{2146e}\u{218bd}\u{216b4}\u{21e34}\u{231c4}\u{235c4}\u{2373f}\u{23763}\u{247f1}\u{2548e}\u{2550e}\u{25771}\u{259c4}\u{25da1}\u{26aff}\u{26e40}\u{270f4}\u{27684}\u{28277}\u{283cd}\u{2a190}\u{20089}\u{200a2}\u{200a4}\u{20213}\u{2032b}\u{20381}\u{20371}\u{203f9}\u{2044a}\u{20509}\u{205d6}\u{2074f}\u{20807}\u{2083a}\u{208b9}\u{2097c}\u{2099d}\u{20ad3}\u{20b1d}\u{20d45}\u{20de1}\u{20e95}\u{20e6d}\u{20e64}\u{20f5f}\u{21201}\u{21255}\u{2127b}\u{21274}\u{212e4}\u{212d7}\u{212fd}\u{21336}\u{21344}\u{213c4}\u{2146d}\u{215d7}\u{26c29}\u{21647}\u{21706}\u{21742}\u{219c3}\u{21c56}\u{21d2d}\u{21d45}\u{21d78}\u{21d62}\u{21da1}\u{21d9c}\u{21d92}\u{21db7}\u{21de0}\u{21e33}\u{21f1e}\u{21f76}\u{21ffa}\u{2217b}\u{2231e}\u{223ad}\u{226f3}\u{2285b}\u{228ab}\u{2298f}\u{22ab8}\u{22b4f}\u{22b50}\u{22b46}\u{22c1d}\u{22ba6}\u{22c24}\u{22de1}\u{231c3}\u{231f5}\u{231b6}\u{23372}\u{233d3}\u{233d2}\u{233d0}\u{233e4}\u{233d5}\u{233da}\u{233df}\u{2344a}\u{23451}\u{2344b}\u{23465}\u{234e4}\u{2355a}\u{23594}\u{23639}\u{23647}\u{23638}\u{2371c}\u{2370c}\u{23764}\u{237ff}\u{237e7}\u{23824}\u{2383d}\u{23a98}\u{23c7f}\u{23d00}\u{23d40}\u{23dfa}\u{23df9}\u{23dd3}\u{23f7e}\u{24096}\u{24103}\u{241c6}\u{241fe}\u{243bc}\u{24629}\u{246a5}\u{24896}\u{24a4d}\u{24b56}\u{24b6f}\u{24c16}\u{24e0e}\u{24e37}\u{24e6a}\u{24e8b}\u{2504a}\u{25055}\u{25122}\u{251a9}\u{251e5}\u{251cd}\u{2521e}\u{2524c}\u{2542e}\u{254d9}\u{255a7}\u{257a9}\u{257b4}\u{259d4}\u{25ae4}\u{25ae3}\u{25af1}\u{25bb2}\u{25c4b}\u{25c64}\u{25e2e}\u{25e56}\u{25e65}\u{25e62}\u{25ed8}\u{25ec2}\u{25ee8}\u{25f23}\u{25f5c}\u{25fe0}\u{25fd4}\u{2600c}\u{25ffb}\u{26017}\u{26060}\u{260ed}\u{26270}\u{26286}\u{23d0e}\u{26402}\u{2667e}\u{2671d}\u{268dd}\u{268ea}\u{2696f}\u{269dd}\u{26a1e}\u{26a58}\u{26a8c}\u{26ab7}\u{26c73}\u{26cdd}\u{26e65}\u{26f94}\u{26ff8}\u{26ff6}\u{26ff7}\u{2710d}\u{27139}\u{273db}\u{273da}\u{273fe}\u{27410}\u{27449}\u{27615}\u{27614}\u{27631}\u{27693}\u{2770e}\u{27723}\u{27752}\u{27985}\u{27a84}\u{27bb3}\u{27bbe}\u{27bc7}\u{27cb8}\u{27da0}\u{27e10}\u{2808a}\u{280bb}\u{28282}\u{282f3}\u{2840c}\u{28455}\u{2856b}\u{285c8}\u{285c9}\u{286d7}\u{286fa}\u{28949}\u{28946}\u{2896b}\u{28988}\u{289ba}\u{289bb}\u{28a1e}\u{28a29}\u{28a71}\u{28a43}\u{28a99}\u{28acd}\u{28ae4}\u{28add}\u{28bc1}\u{28bef}\u{28d10}\u{28d71}\u{28dfb}\u{28e1f}\u{28e36}\u{28e89}\u{28eeb}\u{28f32}\u{28ff8}\u{292a0}\u{292b1}\u{29490}\u{295cf}\u{296f0}\u{29719}\u{29750}\u{298c6}\u{29a72}\u{29ddb}\u{29e15}\u{29e8a}\u{29e49}\u{29ec4}\u{29ee9}\u{29edb}\u{29fce}\u{2a02f}\u{2a01a}\u{2a0f9}\u{2a082}\u{22218}\u{2a38c}\u{2a437}\u{2a5f1}\u{2a602}\u{2a6b2}\u{31350}\u{200f5}\u{24e04}\u{24ff2}\u{27d73}\u{2f815}\u{2f846}\u{2f899}\u{2f8a6}\u{2f8e5}\u{2f9de}\u{2a2b2}\u{20158}\u{205b1}\u{206ec}\u{2b753}\u{20d58}\u{2b75a}\u{2b75c}\u{259cc}\u{2b776}\u{22e42}\u{2b77c}\u{207c8}\u{22feb}\u{279b4}\u{2b782}\u{2b78b}\u{2b794}\u{2404b}\u{2b7ac}\u{2b7af}\u{2b7c9}\u{2b7cf}\u{2b7d2}\u{26c9e}\u{27c3c}\u{2b7f0}\u{2b765}\u{2b80d}\u{2b817}\u{2383d}\u{2634c}\u{29e3d}\u{2a61a}\u{43}\u{4c}\u{4b}\u{43}\u{4c}\u{42}\u{45}\u{4c}\u{41}\u{53}\u{41}\u{4d}\u{30}\u{d7}\u{31}\u{d7}\u{32}\u{d7}\u{33}\u{d7}\u{34}\u{d7}\u{35}\u{d7}\u{36}\u{d7}\u{37}\u{d7}\u{38}\u{d7}\u{39}\u{d7}\u{307b}\u{304b}\u{50}\u{56}\u{4d}\u{56}\u{53}\u{53}\u{53}\u{31}\u{53}\u{32}\u{53}\u{33}\u{48}\u{56}\u{30}\u{30}\u{30}\u{31}\u{30}\u{32}\u{30}\u{33}\u{30}\u{34}\u{30}\u{35}\u{30}\u{36}\u{30}\u{37}\u{30}\u{38}\u{30}\u{39}\u{31}\u{30}\u{31}\u{31}\u{31}\u{32}\u{31}\u{33}\u{31}\u{34}\u{31}\u{35}\u{31}\u{36}\u{31}\u{37}\u{31}\u{38}\u{31}\u{39}\u{32}\u{30}\u{32}\u{31}\u{32}\u{32}\u{32}\u{33}\u{32}\u{34}\u{32}\u{35}\u{32}\u{36}\u{32}\u{37}\u{32}\u{38}\u{32}\u{39}\u{33}\u{30}\u{33}\u{31}\u{33}\u{32}\u{33}\u{33}\u{33}\u{34}\u{33}\u{35}\u{33}\u{36}\u{33}\u{37}\u{33}\u{38}\u{33}\u{39}\u{34}\u{30}\u{34}\u{31}\u{34}\u{32}\u{34}\u{33}\u{34}\u{34}\u{34}\u{35}\u{34}\u{36}\u{34}\u{37}\u{34}\u{38}\u{34}\u{39}\u{35}\u{30}\u{35}\u{31}\u{35}\u{32}\u{35}\u{33}\u{35}\u{34}\u{35}\u{35}\u{35}\u{36}\u{35}\u{37}\u{35}\u{38}\u{35}\u{39}\u{27}\u{30}\u{30}\u{27}\u{30}\u{31}\u{27}\u{30}\u{32}\u{27}\u{30}\u{33}\u{27}\u{30}\u{34}\u{27}\u{30}\u{35}\u{27}\u{30}\u{36}\u{27}\u{30}\u{37}\u{27}\u{30}\u{38}\u{27}\u{30}\u{39}\u{27}\u{31}\u{30}\u{27}\u{31}\u{31}\u{27}\u{31}\u{32}\u{27}\u{31}\u{33}\u{27}\u{31}\u{34}\u{27}\u{31}\u{35}\u{27}\u{31}\u{36}\u{27}\u{31}\u{37}\u{27}\u{31}\u{38}\u{27}\u{31}\u{39}\u{27}\u{32}\u{30}\u{27}\u{32}\u{31}\u{27}\u{32}\u{32}\u{27}\u{32}\u{33}\u{27}\u{32}\u{34}\u{27}\u{32}\u{35}\u{27}\u{32}\u{36}\u{27}\u{32}\u{37}\u{27}\u{32}\u{38}\u{27}\u{32}\u{39}\u{27}\u{33}\u{30}\u{27}\u{33}\u{31}\u{27}\u{33}\u{32}\u{27}\u{33}\u{33}\u{27}\u{33}\u{34}\u{27}\u{33}\u{35}\u{27}\u{33}\u{36}\u{27}\u{33}\u{37}\u{27}\u{33}\u{38}\u{27}\u{33}\u{39}\u{27}\u{34}\u{30}\u{27}\u{34}\u{31}\u{27}\u{34}\u{32}\u{27}\u{34}\u{33}\u{27}\u{34}\u{34}\u{27}\u{34}\u{35}\u{27}\u{34}\u{36}\u{27}\u{34}\u{37}\u{27}\u{34}\u{38}\u{27}\u{34}\u{39}\u{27}\u{35}\u{30}\u{27}\u{35}\u{31}\u{27}\u{35}\u{32}\u{27}\u{35}\u{33}\u{27}\u{35}\u{34}\u{27}\u{35}\u{35}\u{27}\u{35}\u{36}\u{27}\u{35}\u{37}\u{27}\u{35}\u{38}\u{27}\u{35}\u{39}\u{27}\u{36}\u{30}\u{27}\u{36}\u{31}\u{27}\u{36}\u{32}\u{27}\u{36}\u{33}\u{27}\u{36}\u{34}\u{27}\u{36}\u{35}\u{27}\u{36}\u{36}\u{27}\u{36}\u{37}\u{27}\u{36}\u{38}\u{27}\u{36}\u{39}\u{27}\u{37}\u{30}\u{27}\u{37}\u{31}\u{27}\u{37}\u{32}\u{27}\u{37}\u{33}\u{27}\u{37}\u{34}\u{27}\u{37}\u{35}\u{27}\u{37}\u{36}\u{27}\u{37}\u{37}\u{27}\u{37}\u{38}\u{27}\u{37}\u{39}\u{27}\u{38}\u{30}\u{27}\u{38}\u{31}\u{27}\u{38}\u{32}\u{27}\u{38}\u{33}\u{27}\u{38}\u{34}\u{27}\u{38}\u{35}\u{27}\u{38}\u{36}\u{27}\u{38}\u{37}\u{27}\u{38}\u{38}\u{27}\u{38}\u{39}\u{27}\u{39}\u{30}\u{27}\u{39}\u{31}\u{27}\u{39}\u{32}\u{27}\u{39}\u{33}\u{27}\u{39}\u{34}\u{27}\u{39}\u{35}\u{27}\u{39}\u{36}\u{27}\u{39}\u{37}\u{27}\u{39}\u{38}\u{27}\u{39}\u{39}\u{30}\u{30}\u{30}\u{31}\u{30}\u{32}\u{30}\u{33}\u{30}\u{34}\u{30}\u{35}\u{30}\u{36}\u{30}\u{37}\u{30}\u{38}\u{30}\u{39}\u{31}\u{30}\u{31}\u{31}\u{31}\u{32}\u{31}\u{33}\u{31}\u{34}\u{31}\u{35}\u{31}\u{36}\u{31}\u{37}\u{31}\u{38}\u{31}\u{39}\u{32}\u{30}\u{32}\u{31}\u{32}\u{32}\u{32}\u{33}\u{32}\u{34}\u{32}\u{35}\u{32}\u{36}\u{32}\u{37}\u{32}\u{38}\u{32}\u{39}\u{33}\u{30}\u{33}\u{31}\u{33}\u{32}\u{33}\u{33}\u{33}\u{34}\u{33}\u{35}\u{33}\u{36}\u{33}\u{37}\u{33}\u{38}\u{33}\u{39}\u{34}\u{30}\u{34}\u{31}\u{34}\u{32}\u{34}\u{33}\u{34}\u{34}\u{34}\u{35}\u{34}\u{36}\u{34}\u{37}\u{34}\u{38}\u{34}\u{39}\u{35}\u{30}\u{35}\u{31}\u{35}\u{32}\u{35}\u{33}\u{35}\u{34}\u{35}\u{35}\u{35}\u{36}\u{35}\u{37}\u{35}\u{38}\u{35}\u{39}\u{36}\u{30}\u{36}\u{31}\u{36}\u{32}\u{36}\u{33}\u{36}\u{34}\u{36}\u{35}\u{36}\u{36}\u{36}\u{37}\u{36}\u{38}\u{36}\u{39}\u{37}\u{30}\u{37}\u{31}\u{37}\u{32}\u{37}\u{33}\u{37}\u{34}\u{37}\u{35}\u{37}\u{36}\u{37}\u{37}\u{37}\u{38}\u{37}\u{39}\u{38}\u{30}\u{38}\u{31}\u{38}\u{32}\u{38}\u{33}\u{38}\u{34}\u{38}\u{35}\u{38}\u{36}\u{38}\u{37}\u{38}\u{38}\u{38}\u{39}\u{39}\u{30}\u{39}\u{31}\u{39}\u{32}\u{39}\u{33}\u{39}\u{34}\u{39}\u{35}\u{39}\u{36}\u{39}\u{37}\u{39}\u{38}\u{39}\u{39}\u{31}\u{30}\u{30}\u{31}\u{30}\u{31}\u{31}\u{30}\u{32}\u{31}\u{30}\u{33}\u{31}\u{30}\u{34}\u{31}\u{30}\u{35}\u{31}\u{30}\u{36}\u{31}\u{30}\u{37}\u{31}\u{30}\u{38}\u{31}\u{30}\u{39}\u{31}\u{31}\u{30}\u{31}\u{31}\u{31}\u{31}\u{31}\u{32}\u{31}\u{31}\u{33}\u{31}\u{31}\u{34}\u{31}\u{31}\u{35}\u{31}\u{31}\u{36}\u{31}\u{31}\u{37}\u{31}\u{31}\u{38}\u{31}\u{31}\u{39}\u{31}\u{32}\u{30}\u{31}\u{32}\u{31}\u{31}\u{32}\u{32}\u{31}\u{32}\u{33}\u{31}\u{32}\u{34}\u{31}\u{32}\u{35}\u{31}\u{32}\u{36}\u{31}\u{32}\u{37}\u{31}\u{32}\u{38}\u{31}\u{32}\u{39}\u{31}\u{33}\u{30}\u{31}\u{33}\u{31}\u{31}\u{33}\u{32}\u{31}\u{33}\u{33}\u{31}\u{33}\u{34}\u{31}\u{33}\u{35}\u{31}\u{33}\u{36}\u{31}\u{33}\u{37}\u{31}\u{33}\u{38}\u{31}\u{33}\u{39}\u{31}\u{34}\u{30}\u{31}\u{34}\u{31}\u{31}\u{34}\u{32}\u{31}\u{34}\u{33}\u{31}\u{34}\u{34}\u{31}\u{34}\u{35}\u{31}\u{34}\u{36}\u{31}\u{34}\u{37}\u{31}\u{34}\u{38}\u{31}\u{34}\u{39}\u{2e}\u{30}\u{2e}\u{31}\u{2e}\u{32}\u{2e}\u{33}\u{2e}\u{34}\u{2e}\u{35}\u{2e}\u{36}\u{2e}\u{37}\u{2e}\u{38}\u{2e}\u{39}\u{2c}\u{30}\u{2c}\u{31}\u{2c}\u{32}\u{2c}\u{33}\u{2c}\u{34}\u{2c}\u{35}\u{2c}\u{36}\u{2c}\u{37}\u{2c}\u{38}\u{2c}\u{39}\u{70}\u{70}\u{62}\u{70}\u{70}\u{6d}\u{27}\u{53}\u{48}\u{32}\u{4f}\u{32}\u{4f}\u{78}\u{4e}\u{78}\u{51}\u{32}\u{4a}\u{72}\u{2e}\u{44}\u{72}\u{2e}\u{30ac}\u{30eb}\u{30b0}\u{30ec}\u{30a4}\u{30af}\u{30ed}\u{30fc}\u{30ca}\u{30b7}\u{30fc}\u{30d9}\u{30eb}\u{30c8}\u{30b7}\u{30a7}\u{30b1}\u{30eb}\u{30b8}\u{30e5}\u{30fc}\u{30eb}\u{30c7}\u{30b7}\u{30d9}\u{30eb}\u{30c9}\u{30c3}\u{30c8}\u{30d0}\u{30a4}\u{30c8}\u{30d3}\u{30c3}\u{30c8}\u{30d9}\u{30af}\u{30ec}\u{30eb}\u{30dc}\u{30fc}\u{30e9}\u{30f3}\u{30c9}\u{30ea}\u{30f3}\u{30ae}\u{30c3}\u{30c8}\u{30ac}\u{30eb}\u{30b0}\u{30ec}\u{30a4}\u{30af}\u{30ed}\u{30fc}\u{30ca}\u{30b7}\u{30fc}\u{30d9}\u{30eb}\u{30c8}\u{30b7}\u{30a7}\u{30b1}\u{30eb}\u{30b8}\u{30e5}\u{30fc}\u{30eb}\u{30c7}\u{30b7}\u{30d9}\u{30eb}\u{30c9}\u{30c3}\u{30c8}\u{30d0}\u{30a4}\u{30c8}\u{30d3}\u{30c3}\u{30c8}\u{30d9}\u{30af}\u{30ec}\u{30eb}\u{30dc}\u{30fc}\u{30e9}\u{30f3}\u{30c9}\u{30ea}\u{30f3}\u{30ae}\u{30c3}\u{30c8}\u{3002}\u{300d}\u{3002}\u{300f}"; + +/// JIS X 0208 (with the NEC row 13 and the IBM extensions) by WHATWG +/// pointer -> code point; 0 for none. +pub static JIS0208: [u16; 11104] = [ + 12288, 12289, 12290, 65292, 65294, 12539, 65306, 65307, 65311, 65281, 12443, 12444, 180, 65344, + 168, 65342, 65507, 65343, 12541, 12542, 12445, 12446, 12291, 20189, 12293, 12294, 12295, 12540, + 8213, 8208, 65295, 65340, 65374, 8741, 65372, 8230, 8229, 8216, 8217, 8220, 8221, 65288, 65289, + 12308, 12309, 65339, 65341, 65371, 65373, 12296, 12297, 12298, 12299, 12300, 12301, 12302, + 12303, 12304, 12305, 65291, 65293, 177, 215, 247, 65309, 8800, 65308, 65310, 8806, 8807, 8734, + 8756, 9794, 9792, 176, 8242, 8243, 8451, 65509, 65284, 65504, 65505, 65285, 65283, 65286, + 65290, 65312, 167, 9734, 9733, 9675, 9679, 9678, 9671, 9670, 9633, 9632, 9651, 9650, 9661, + 9660, 8251, 12306, 8594, 8592, 8593, 8595, 12307, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8712, 8715, + 8838, 8839, 8834, 8835, 8746, 8745, 0, 0, 0, 0, 0, 0, 0, 0, 8743, 8744, 65506, 8658, 8660, + 8704, 8707, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8736, 8869, 8978, 8706, 8711, 8801, 8786, 8810, + 8811, 8730, 8765, 8733, 8757, 8747, 8748, 0, 0, 0, 0, 0, 0, 0, 8491, 8240, 9839, 9837, 9834, + 8224, 8225, 182, 0, 0, 0, 0, 9711, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65296, 65297, + 65298, 65299, 65300, 65301, 65302, 65303, 65304, 65305, 0, 0, 0, 0, 0, 0, 0, 65313, 65314, + 65315, 65316, 65317, 65318, 65319, 65320, 65321, 65322, 65323, 65324, 65325, 65326, 65327, + 65328, 65329, 65330, 65331, 65332, 65333, 65334, 65335, 65336, 65337, 65338, 0, 0, 0, 0, 0, 0, + 65345, 65346, 65347, 65348, 65349, 65350, 65351, 65352, 65353, 65354, 65355, 65356, 65357, + 65358, 65359, 65360, 65361, 65362, 65363, 65364, 65365, 65366, 65367, 65368, 65369, 65370, 0, + 0, 0, 0, 12353, 12354, 12355, 12356, 12357, 12358, 12359, 12360, 12361, 12362, 12363, 12364, + 12365, 12366, 12367, 12368, 12369, 12370, 12371, 12372, 12373, 12374, 12375, 12376, 12377, + 12378, 12379, 12380, 12381, 12382, 12383, 12384, 12385, 12386, 12387, 12388, 12389, 12390, + 12391, 12392, 12393, 12394, 12395, 12396, 12397, 12398, 12399, 12400, 12401, 12402, 12403, + 12404, 12405, 12406, 12407, 12408, 12409, 12410, 12411, 12412, 12413, 12414, 12415, 12416, + 12417, 12418, 12419, 12420, 12421, 12422, 12423, 12424, 12425, 12426, 12427, 12428, 12429, + 12430, 12431, 12432, 12433, 12434, 12435, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12449, 12450, 12451, + 12452, 12453, 12454, 12455, 12456, 12457, 12458, 12459, 12460, 12461, 12462, 12463, 12464, + 12465, 12466, 12467, 12468, 12469, 12470, 12471, 12472, 12473, 12474, 12475, 12476, 12477, + 12478, 12479, 12480, 12481, 12482, 12483, 12484, 12485, 12486, 12487, 12488, 12489, 12490, + 12491, 12492, 12493, 12494, 12495, 12496, 12497, 12498, 12499, 12500, 12501, 12502, 12503, + 12504, 12505, 12506, 12507, 12508, 12509, 12510, 12511, 12512, 12513, 12514, 12515, 12516, + 12517, 12518, 12519, 12520, 12521, 12522, 12523, 12524, 12525, 12526, 12527, 12528, 12529, + 12530, 12531, 12532, 12533, 12534, 0, 0, 0, 0, 0, 0, 0, 0, 913, 914, 915, 916, 917, 918, 919, + 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937, 0, 0, 0, + 0, 0, 0, 0, 0, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, + 961, 963, 964, 965, 966, 967, 968, 969, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1040, 1041, 1042, 1043, 1044, 1045, + 1025, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, + 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1072, 1073, 1074, 1075, 1076, 1077, 1105, 1078, 1079, 1080, 1081, 1082, 1083, + 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, + 1100, 1101, 1102, 1103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9472, 9474, 9484, 9488, 9496, + 9492, 9500, 9516, 9508, 9524, 9532, 9473, 9475, 9487, 9491, 9499, 9495, 9507, 9523, 9515, 9531, + 9547, 9504, 9519, 9512, 9527, 9535, 9501, 9520, 9509, 9528, 9538, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9312, 9313, 9314, 9315, 9316, 9317, 9318, 9319, 9320, 9321, + 9322, 9323, 9324, 9325, 9326, 9327, 9328, 9329, 9330, 9331, 8544, 8545, 8546, 8547, 8548, 8549, + 8550, 8551, 8552, 8553, 0, 13129, 13076, 13090, 13133, 13080, 13095, 13059, 13110, 13137, + 13143, 13069, 13094, 13091, 13099, 13130, 13115, 13212, 13213, 13214, 13198, 13199, 13252, + 13217, 0, 0, 0, 0, 0, 0, 0, 0, 13179, 12317, 12319, 8470, 13261, 8481, 12964, 12965, 12966, + 12967, 12968, 12849, 12850, 12857, 13182, 13181, 13180, 8786, 8801, 8747, 8750, 8721, 8730, + 8869, 8736, 8735, 8895, 8757, 8745, 8746, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20124, 21782, 23043, 38463, 21696, 24859, 25384, 23030, + 36898, 33909, 33564, 31312, 24746, 25569, 28197, 26093, 33894, 33446, 39925, 26771, 22311, + 26017, 25201, 23451, 22992, 34427, 39156, 32098, 32190, 39822, 25110, 31903, 34999, 23433, + 24245, 25353, 26263, 26696, 38343, 38797, 26447, 20197, 20234, 20301, 20381, 20553, 22258, + 22839, 22996, 23041, 23561, 24799, 24847, 24944, 26131, 26885, 28858, 30031, 30064, 31227, + 32173, 32239, 32963, 33806, 34915, 35586, 36949, 36986, 21307, 20117, 20133, 22495, 32946, + 37057, 30959, 19968, 22769, 28322, 36920, 31282, 33576, 33419, 39983, 20801, 21360, 21693, + 21729, 22240, 23035, 24341, 39154, 28139, 32996, 34093, 38498, 38512, 38560, 38907, 21515, + 21491, 23431, 28879, 32701, 36802, 38632, 21359, 40284, 31418, 19985, 30867, 33276, 28198, + 22040, 21764, 27421, 34074, 39995, 23013, 21417, 28006, 29916, 38287, 22082, 20113, 36939, + 38642, 33615, 39180, 21473, 21942, 23344, 24433, 26144, 26355, 26628, 27704, 27891, 27945, + 29787, 30408, 31310, 38964, 33521, 34907, 35424, 37613, 28082, 30123, 30410, 39365, 24742, + 35585, 36234, 38322, 27022, 21421, 20870, 22290, 22576, 22852, 23476, 24310, 24616, 25513, + 25588, 27839, 28436, 28814, 28948, 29017, 29141, 29503, 32257, 33398, 33489, 34199, 36960, + 37467, 40219, 22633, 26044, 27738, 29989, 20985, 22830, 22885, 24448, 24540, 25276, 26106, + 27178, 27431, 27572, 29579, 32705, 35158, 40236, 40206, 40644, 23713, 27798, 33659, 20740, + 23627, 25014, 33222, 26742, 29281, 20057, 20474, 21368, 24681, 28201, 31311, 38899, 19979, + 21270, 20206, 20309, 20285, 20385, 20339, 21152, 21487, 22025, 22799, 23233, 23478, 23521, + 31185, 26247, 26524, 26550, 27468, 27827, 28779, 29634, 31117, 31166, 31292, 31623, 33457, + 33499, 33540, 33655, 33775, 33747, 34662, 35506, 22057, 36008, 36838, 36942, 38686, 34442, + 20420, 23784, 25105, 29273, 30011, 33253, 33469, 34558, 36032, 38597, 39187, 39381, 20171, + 20250, 35299, 22238, 22602, 22730, 24315, 24555, 24618, 24724, 24674, 25040, 25106, 25296, + 25913, 39745, 26214, 26800, 28023, 28784, 30028, 30342, 32117, 33445, 34809, 38283, 38542, + 35997, 20977, 21182, 22806, 21683, 23475, 23830, 24936, 27010, 28079, 30861, 33995, 34903, + 35442, 37799, 39608, 28012, 39336, 34521, 22435, 26623, 34510, 37390, 21123, 22151, 21508, + 24275, 25313, 25785, 26684, 26680, 27579, 29554, 30906, 31339, 35226, 35282, 36203, 36611, + 37101, 38307, 38548, 38761, 23398, 23731, 27005, 38989, 38990, 25499, 31520, 27179, 27263, + 26806, 39949, 28511, 21106, 21917, 24688, 25324, 27963, 28167, 28369, 33883, 35088, 36676, + 19988, 39993, 21494, 26907, 27194, 38788, 26666, 20828, 31427, 33970, 37340, 37772, 22107, + 40232, 26658, 33541, 33841, 31909, 21000, 33477, 29926, 20094, 20355, 20896, 23506, 21002, + 21208, 21223, 24059, 21914, 22570, 23014, 23436, 23448, 23515, 24178, 24185, 24739, 24863, + 24931, 25022, 25563, 25954, 26577, 26707, 26874, 27454, 27475, 27735, 28450, 28567, 28485, + 29872, 29976, 30435, 30475, 31487, 31649, 31777, 32233, 32566, 32752, 32925, 33382, 33694, + 35251, 35532, 36011, 36996, 37969, 38291, 38289, 38306, 38501, 38867, 39208, 33304, 20024, + 21547, 23736, 24012, 29609, 30284, 30524, 23721, 32747, 36107, 38593, 38929, 38996, 39000, + 20225, 20238, 21361, 21916, 22120, 22522, 22855, 23305, 23492, 23696, 24076, 24190, 24524, + 25582, 26426, 26071, 26082, 26399, 26827, 26820, 27231, 24112, 27589, 27671, 27773, 30079, + 31048, 23395, 31232, 32000, 24509, 35215, 35352, 36020, 36215, 36556, 36637, 39138, 39438, + 39740, 20096, 20605, 20736, 22931, 23452, 25135, 25216, 25836, 27450, 29344, 30097, 31047, + 32681, 34811, 35516, 35696, 25516, 33738, 38816, 21513, 21507, 21931, 26708, 27224, 35440, + 30759, 26485, 40653, 21364, 23458, 33050, 34384, 36870, 19992, 20037, 20167, 20241, 21450, + 21560, 23470, 24339, 24613, 25937, 26429, 27714, 27762, 27875, 28792, 29699, 31350, 31406, + 31496, 32026, 31998, 32102, 26087, 29275, 21435, 23621, 24040, 25298, 25312, 25369, 28192, + 34394, 35377, 36317, 37624, 28417, 31142, 39770, 20136, 20139, 20140, 20379, 20384, 20689, + 20807, 31478, 20849, 20982, 21332, 21281, 21375, 21483, 21932, 22659, 23777, 24375, 24394, + 24623, 24656, 24685, 25375, 25945, 27211, 27841, 29378, 29421, 30703, 33016, 33029, 33288, + 34126, 37111, 37857, 38911, 39255, 39514, 20208, 20957, 23597, 26241, 26989, 23616, 26354, + 26997, 29577, 26704, 31873, 20677, 21220, 22343, 24062, 37670, 26020, 27427, 27453, 29748, + 31105, 31165, 31563, 32202, 33465, 33740, 34943, 35167, 35641, 36817, 37329, 21535, 37504, + 20061, 20534, 21477, 21306, 29399, 29590, 30697, 33510, 36527, 39366, 39368, 39378, 20855, + 24858, 34398, 21936, 31354, 20598, 23507, 36935, 38533, 20018, 27355, 37351, 23633, 23624, + 25496, 31391, 27795, 38772, 36705, 31402, 29066, 38536, 31874, 26647, 32368, 26705, 37740, + 21234, 21531, 34219, 35347, 32676, 36557, 37089, 21350, 34952, 31041, 20418, 20670, 21009, + 20804, 21843, 22317, 29674, 22411, 22865, 24418, 24452, 24693, 24950, 24935, 25001, 25522, + 25658, 25964, 26223, 26690, 28179, 30054, 31293, 31995, 32076, 32153, 32331, 32619, 33550, + 33610, 34509, 35336, 35427, 35686, 36605, 38938, 40335, 33464, 36814, 39912, 21127, 25119, + 25731, 28608, 38553, 26689, 20625, 27424, 27770, 28500, 31348, 32080, 34880, 35363, 26376, + 20214, 20537, 20518, 20581, 20860, 21048, 21091, 21927, 22287, 22533, 23244, 24314, 25010, + 25080, 25331, 25458, 26908, 27177, 29309, 29356, 29486, 30740, 30831, 32121, 30476, 32937, + 35211, 35609, 36066, 36562, 36963, 37749, 38522, 38997, 39443, 40568, 20803, 21407, 21427, + 24187, 24358, 28187, 28304, 29572, 29694, 32067, 33335, 35328, 35578, 38480, 20046, 20491, + 21476, 21628, 22266, 22993, 23396, 24049, 24235, 24359, 25144, 25925, 26543, 28246, 29392, + 31946, 34996, 32929, 32993, 33776, 34382, 35463, 36328, 37431, 38599, 39015, 40723, 20116, + 20114, 20237, 21320, 21577, 21566, 23087, 24460, 24481, 24735, 26791, 27278, 29786, 30849, + 35486, 35492, 35703, 37264, 20062, 39881, 20132, 20348, 20399, 20505, 20502, 20809, 20844, + 21151, 21177, 21246, 21402, 21475, 21521, 21518, 21897, 22353, 22434, 22909, 23380, 23389, + 23439, 24037, 24039, 24055, 24184, 24195, 24218, 24247, 24344, 24658, 24908, 25239, 25304, + 25511, 25915, 26114, 26179, 26356, 26477, 26657, 26775, 27083, 27743, 27946, 28009, 28207, + 28317, 30002, 30343, 30828, 31295, 31968, 32005, 32024, 32094, 32177, 32789, 32771, 32943, + 32945, 33108, 33167, 33322, 33618, 34892, 34913, 35611, 36002, 36092, 37066, 37237, 37489, + 30783, 37628, 38308, 38477, 38917, 39321, 39640, 40251, 21083, 21163, 21495, 21512, 22741, + 25335, 28640, 35946, 36703, 40633, 20811, 21051, 21578, 22269, 31296, 37239, 40288, 40658, + 29508, 28425, 33136, 29969, 24573, 24794, 39592, 29403, 36796, 27492, 38915, 20170, 22256, + 22372, 22718, 23130, 24680, 25031, 26127, 26118, 26681, 26801, 28151, 30165, 32058, 33390, + 39746, 20123, 20304, 21449, 21766, 23919, 24038, 24046, 26619, 27801, 29811, 30722, 35408, + 37782, 35039, 22352, 24231, 25387, 20661, 20652, 20877, 26368, 21705, 22622, 22971, 23472, + 24425, 25165, 25505, 26685, 27507, 28168, 28797, 37319, 29312, 30741, 30758, 31085, 25998, + 32048, 33756, 35009, 36617, 38555, 21092, 22312, 26448, 32618, 36001, 20916, 22338, 38442, + 22586, 27018, 32948, 21682, 23822, 22524, 30869, 40442, 20316, 21066, 21643, 25662, 26152, + 26388, 26613, 31364, 31574, 32034, 37679, 26716, 39853, 31545, 21273, 20874, 21047, 23519, + 25334, 25774, 25830, 26413, 27578, 34217, 38609, 30352, 39894, 25420, 37638, 39851, 30399, + 26194, 19977, 20632, 21442, 23665, 24808, 25746, 25955, 26719, 29158, 29642, 29987, 31639, + 32386, 34453, 35715, 36059, 37240, 39184, 26028, 26283, 27531, 20181, 20180, 20282, 20351, + 21050, 21496, 21490, 21987, 22235, 22763, 22987, 22985, 23039, 23376, 23629, 24066, 24107, + 24535, 24605, 25351, 25903, 23388, 26031, 26045, 26088, 26525, 27490, 27515, 27663, 29509, + 31049, 31169, 31992, 32025, 32043, 32930, 33026, 33267, 35222, 35422, 35433, 35430, 35468, + 35566, 36039, 36060, 38604, 39164, 27503, 20107, 20284, 20365, 20816, 23383, 23546, 24904, + 25345, 26178, 27425, 28363, 27835, 29246, 29885, 30164, 30913, 31034, 32780, 32819, 33258, + 33940, 36766, 27728, 40575, 24335, 35672, 40235, 31482, 36600, 23437, 38635, 19971, 21489, + 22519, 22833, 23241, 23460, 24713, 28287, 28422, 30142, 36074, 23455, 34048, 31712, 20594, + 26612, 33437, 23649, 34122, 32286, 33294, 20889, 23556, 25448, 36198, 26012, 29038, 31038, + 32023, 32773, 35613, 36554, 36974, 34503, 37034, 20511, 21242, 23610, 26451, 28796, 29237, + 37196, 37320, 37675, 33509, 23490, 24369, 24825, 20027, 21462, 23432, 25163, 26417, 27530, + 29417, 29664, 31278, 33131, 36259, 37202, 39318, 20754, 21463, 21610, 23551, 25480, 27193, + 32172, 38656, 22234, 21454, 21608, 23447, 23601, 24030, 20462, 24833, 25342, 27954, 31168, + 31179, 32066, 32333, 32722, 33261, 33311, 33936, 34886, 35186, 35728, 36468, 36655, 36913, + 37195, 37228, 38598, 37276, 20160, 20303, 20805, 21313, 24467, 25102, 26580, 27713, 28171, + 29539, 32294, 37325, 37507, 21460, 22809, 23487, 28113, 31069, 32302, 31899, 22654, 29087, + 20986, 34899, 36848, 20426, 23803, 26149, 30636, 31459, 33308, 39423, 20934, 24490, 26092, + 26991, 27529, 28147, 28310, 28516, 30462, 32020, 24033, 36981, 37255, 38918, 20966, 21021, + 25152, 26257, 26329, 28186, 24246, 32210, 32626, 26360, 34223, 34295, 35576, 21161, 21465, + 22899, 24207, 24464, 24661, 37604, 38500, 20663, 20767, 21213, 21280, 21319, 21484, 21736, + 21830, 21809, 22039, 22888, 22974, 23100, 23477, 23558, 23567, 23569, 23578, 24196, 24202, + 24288, 24432, 25215, 25220, 25307, 25484, 25463, 26119, 26124, 26157, 26230, 26494, 26786, + 27167, 27189, 27836, 28040, 28169, 28248, 28988, 28966, 29031, 30151, 30465, 30813, 30977, + 31077, 31216, 31456, 31505, 31911, 32057, 32918, 33750, 33931, 34121, 34909, 35059, 35359, + 35388, 35412, 35443, 35937, 36062, 37284, 37478, 37758, 37912, 38556, 38808, 19978, 19976, + 19998, 20055, 20887, 21104, 22478, 22580, 22732, 23330, 24120, 24773, 25854, 26465, 26454, + 27972, 29366, 30067, 31331, 33976, 35698, 37304, 37664, 22065, 22516, 39166, 25325, 26893, + 27542, 29165, 32340, 32887, 33394, 35302, 39135, 34645, 36785, 23611, 20280, 20449, 20405, + 21767, 23072, 23517, 23529, 24515, 24910, 25391, 26032, 26187, 26862, 27035, 28024, 28145, + 30003, 30137, 30495, 31070, 31206, 32051, 33251, 33455, 34218, 35242, 35386, 36523, 36763, + 36914, 37341, 38663, 20154, 20161, 20995, 22645, 22764, 23563, 29978, 23613, 33102, 35338, + 36805, 38499, 38765, 31525, 35535, 38920, 37218, 22259, 21416, 36887, 21561, 22402, 24101, + 25512, 27700, 28810, 30561, 31883, 32736, 34928, 36930, 37204, 37648, 37656, 38543, 29790, + 39620, 23815, 23913, 25968, 26530, 36264, 38619, 25454, 26441, 26905, 33733, 38935, 38592, + 35070, 28548, 25722, 23544, 19990, 28716, 30045, 26159, 20932, 21046, 21218, 22995, 24449, + 24615, 25104, 25919, 25972, 26143, 26228, 26866, 26646, 27491, 28165, 29298, 29983, 30427, + 31934, 32854, 22768, 35069, 35199, 35488, 35475, 35531, 36893, 37266, 38738, 38745, 25993, + 31246, 33030, 38587, 24109, 24796, 25114, 26021, 26132, 26512, 30707, 31309, 31821, 32318, + 33034, 36012, 36196, 36321, 36447, 30889, 20999, 25305, 25509, 25666, 25240, 35373, 31363, + 31680, 35500, 38634, 32118, 33292, 34633, 20185, 20808, 21315, 21344, 23459, 23554, 23574, + 24029, 25126, 25159, 25776, 26643, 26676, 27849, 27973, 27927, 26579, 28508, 29006, 29053, + 26059, 31359, 31661, 32218, 32330, 32680, 33146, 33307, 33337, 34214, 35438, 36046, 36341, + 36984, 36983, 37549, 37521, 38275, 39854, 21069, 21892, 28472, 28982, 20840, 31109, 32341, + 33203, 31950, 22092, 22609, 23720, 25514, 26366, 26365, 26970, 29401, 30095, 30094, 30990, + 31062, 31199, 31895, 32032, 32068, 34311, 35380, 38459, 36961, 40736, 20711, 21109, 21452, + 21474, 20489, 21930, 22766, 22863, 29245, 23435, 23652, 21277, 24803, 24819, 25436, 25475, + 25407, 25531, 25805, 26089, 26361, 24035, 27085, 27133, 28437, 29157, 20105, 30185, 30456, + 31379, 31967, 32207, 32156, 32865, 33609, 33624, 33900, 33980, 34299, 35013, 36208, 36865, + 36973, 37783, 38684, 39442, 20687, 22679, 24974, 33235, 34101, 36104, 36896, 20419, 20596, + 21063, 21363, 24687, 25417, 26463, 28204, 36275, 36895, 20439, 23646, 36042, 26063, 32154, + 21330, 34966, 20854, 25539, 23384, 23403, 23562, 25613, 26449, 36956, 20182, 22810, 22826, + 27760, 35409, 21822, 22549, 22949, 24816, 25171, 26561, 33333, 26965, 38464, 39364, 39464, + 20307, 22534, 23550, 32784, 23729, 24111, 24453, 24608, 24907, 25140, 26367, 27888, 28382, + 32974, 33151, 33492, 34955, 36024, 36864, 36910, 38538, 40667, 39899, 20195, 21488, 22823, + 31532, 37261, 38988, 40441, 28381, 28711, 21331, 21828, 23429, 25176, 25246, 25299, 27810, + 28655, 29730, 35351, 37944, 28609, 35582, 33592, 20967, 34552, 21482, 21481, 20294, 36948, + 36784, 22890, 33073, 24061, 31466, 36799, 26842, 35895, 29432, 40008, 27197, 35504, 20025, + 21336, 22022, 22374, 25285, 25506, 26086, 27470, 28129, 28251, 28845, 30701, 31471, 31658, + 32187, 32829, 32966, 34507, 35477, 37723, 22243, 22727, 24382, 26029, 26262, 27264, 27573, + 30007, 35527, 20516, 30693, 22320, 24347, 24677, 26234, 27744, 30196, 31258, 32622, 33268, + 34584, 36933, 39347, 31689, 30044, 31481, 31569, 33988, 36880, 31209, 31378, 33590, 23265, + 30528, 20013, 20210, 23449, 24544, 25277, 26172, 26609, 27880, 34411, 34935, 35387, 37198, + 37619, 39376, 27159, 28710, 29482, 33511, 33879, 36015, 19969, 20806, 20939, 21899, 23541, + 24086, 24115, 24193, 24340, 24373, 24427, 24500, 25074, 25361, 26274, 26397, 28526, 29266, + 30010, 30522, 32884, 33081, 33144, 34678, 35519, 35548, 36229, 36339, 37530, 38263, 38914, + 40165, 21189, 25431, 30452, 26389, 27784, 29645, 36035, 37806, 38515, 27941, 22684, 26894, + 27084, 36861, 37786, 30171, 36890, 22618, 26626, 25524, 27131, 20291, 28460, 26584, 36795, + 34086, 32180, 37716, 26943, 28528, 22378, 22775, 23340, 32044, 29226, 21514, 37347, 40372, + 20141, 20302, 20572, 20597, 21059, 35998, 21576, 22564, 23450, 24093, 24213, 24237, 24311, + 24351, 24716, 25269, 25402, 25552, 26799, 27712, 30855, 31118, 31243, 32224, 33351, 35330, + 35558, 36420, 36883, 37048, 37165, 37336, 40718, 27877, 25688, 25826, 25973, 28404, 30340, + 31515, 36969, 37841, 28346, 21746, 24505, 25764, 36685, 36845, 37444, 20856, 22635, 22825, + 23637, 24215, 28155, 32399, 29980, 36028, 36578, 39003, 28857, 20253, 27583, 28593, 30000, + 38651, 20814, 21520, 22581, 22615, 22956, 23648, 24466, 26007, 26460, 28193, 30331, 33759, + 36077, 36884, 37117, 37709, 30757, 30778, 21162, 24230, 22303, 22900, 24594, 20498, 20826, + 20908, 20941, 20992, 21776, 22612, 22616, 22871, 23445, 23798, 23947, 24764, 25237, 25645, + 26481, 26691, 26812, 26847, 30423, 28120, 28271, 28059, 28783, 29128, 24403, 30168, 31095, + 31561, 31572, 31570, 31958, 32113, 21040, 33891, 34153, 34276, 35342, 35588, 35910, 36367, + 36867, 36879, 37913, 38518, 38957, 39472, 38360, 20685, 21205, 21516, 22530, 23566, 24999, + 25758, 27934, 30643, 31461, 33012, 33796, 36947, 37509, 23776, 40199, 21311, 24471, 24499, + 28060, 29305, 30563, 31167, 31716, 27602, 29420, 35501, 26627, 27233, 20984, 31361, 26932, + 23626, 40182, 33515, 23493, 37193, 28702, 22136, 23663, 24775, 25958, 27788, 35930, 36929, + 38931, 21585, 26311, 37389, 22856, 37027, 20869, 20045, 20970, 34201, 35598, 28760, 25466, + 37707, 26978, 39348, 32260, 30071, 21335, 26976, 36575, 38627, 27741, 20108, 23612, 24336, + 36841, 21250, 36049, 32905, 34425, 24319, 26085, 20083, 20837, 22914, 23615, 38894, 20219, + 22922, 24525, 35469, 28641, 31152, 31074, 23527, 33905, 29483, 29105, 24180, 24565, 25467, + 25754, 29123, 31896, 20035, 24316, 20043, 22492, 22178, 24745, 28611, 32013, 33021, 33075, + 33215, 36786, 35223, 34468, 24052, 25226, 25773, 35207, 26487, 27874, 27966, 29750, 30772, + 23110, 32629, 33453, 39340, 20467, 24259, 25309, 25490, 25943, 26479, 30403, 29260, 32972, + 32954, 36649, 37197, 20493, 22521, 23186, 26757, 26995, 29028, 29437, 36023, 22770, 36064, + 38506, 36889, 34687, 31204, 30695, 33833, 20271, 21093, 21338, 25293, 26575, 27850, 30333, + 31636, 31893, 33334, 34180, 36843, 26333, 28448, 29190, 32283, 33707, 39361, 40614, 20989, + 31665, 30834, 31672, 32903, 31560, 27368, 24161, 32908, 30033, 30048, 20843, 37474, 28300, + 30330, 37271, 39658, 20240, 32624, 25244, 31567, 38309, 40169, 22138, 22617, 34532, 38588, + 20276, 21028, 21322, 21453, 21467, 24070, 25644, 26001, 26495, 27710, 27726, 29256, 29359, + 29677, 30036, 32321, 33324, 34281, 36009, 31684, 37318, 29033, 38930, 39151, 25405, 26217, + 30058, 30436, 30928, 34115, 34542, 21290, 21329, 21542, 22915, 24199, 24444, 24754, 25161, + 25209, 25259, 26000, 27604, 27852, 30130, 30382, 30865, 31192, 32203, 32631, 32933, 34987, + 35513, 36027, 36991, 38750, 39131, 27147, 31800, 20633, 23614, 24494, 26503, 27608, 29749, + 30473, 32654, 40763, 26570, 31255, 21305, 30091, 39661, 24422, 33181, 33777, 32920, 24380, + 24517, 30050, 31558, 36924, 26727, 23019, 23195, 32016, 30334, 35628, 20469, 24426, 27161, + 27703, 28418, 29922, 31080, 34920, 35413, 35961, 24287, 25551, 30149, 31186, 33495, 37672, + 37618, 33948, 34541, 39981, 21697, 24428, 25996, 27996, 28693, 36007, 36051, 38971, 25935, + 29942, 19981, 20184, 22496, 22827, 23142, 23500, 20904, 24067, 24220, 24598, 25206, 25975, + 26023, 26222, 28014, 29238, 31526, 33104, 33178, 33433, 35676, 36000, 36070, 36212, 38428, + 38468, 20398, 25771, 27494, 33310, 33889, 34154, 37096, 23553, 26963, 39080, 33914, 34135, + 20239, 21103, 24489, 24133, 26381, 31119, 33145, 35079, 35206, 28149, 24343, 25173, 27832, + 20175, 29289, 39826, 20998, 21563, 22132, 22707, 24996, 25198, 28954, 22894, 31881, 31966, + 32027, 38640, 25991, 32862, 19993, 20341, 20853, 22592, 24163, 24179, 24330, 26564, 20006, + 34109, 38281, 38491, 31859, 38913, 20731, 22721, 30294, 30887, 21029, 30629, 34065, 31622, + 20559, 22793, 29255, 31687, 32232, 36794, 36820, 36941, 20415, 21193, 23081, 24321, 38829, + 20445, 33303, 37610, 22275, 25429, 27497, 29995, 35036, 36628, 31298, 21215, 22675, 24917, + 25098, 26286, 27597, 31807, 33769, 20515, 20472, 21253, 21574, 22577, 22857, 23453, 23792, + 23791, 23849, 24214, 25265, 25447, 25918, 26041, 26379, 27861, 27873, 28921, 30770, 32299, + 32990, 33459, 33804, 34028, 34562, 35090, 35370, 35914, 37030, 37586, 39165, 40179, 40300, + 20047, 20129, 20621, 21078, 22346, 22952, 24125, 24536, 24537, 25151, 26292, 26395, 26576, + 26834, 20882, 32033, 32938, 33192, 35584, 35980, 36031, 37502, 38450, 21536, 38956, 21271, + 20693, 21340, 22696, 25778, 26420, 29287, 30566, 31302, 37350, 21187, 27809, 27526, 22528, + 24140, 22868, 26412, 32763, 20961, 30406, 25705, 30952, 39764, 40635, 22475, 22969, 26151, + 26522, 27598, 21737, 27097, 24149, 33180, 26517, 39850, 26622, 40018, 26717, 20134, 20451, + 21448, 25273, 26411, 27819, 36804, 20397, 32365, 40639, 19975, 24930, 28288, 28459, 34067, + 21619, 26410, 39749, 24051, 31637, 23724, 23494, 34588, 28234, 34001, 31252, 33032, 22937, + 31885, 27665, 30496, 21209, 22818, 28961, 29279, 30683, 38695, 40289, 26891, 23167, 23064, + 20901, 21517, 21629, 26126, 30431, 36855, 37528, 40180, 23018, 29277, 28357, 20813, 26825, + 32191, 32236, 38754, 40634, 25720, 27169, 33538, 22916, 23391, 27611, 29467, 30450, 32178, + 32791, 33945, 20786, 26408, 40665, 30446, 26466, 21247, 39173, 23588, 25147, 31870, 36016, + 21839, 24758, 32011, 38272, 21249, 20063, 20918, 22812, 29242, 32822, 37326, 24357, 30690, + 21380, 24441, 32004, 34220, 35379, 36493, 38742, 26611, 34222, 37971, 24841, 24840, 27833, + 30290, 35565, 36664, 21807, 20305, 20778, 21191, 21451, 23461, 24189, 24736, 24962, 25558, + 26377, 26586, 28263, 28044, 29494, 29495, 30001, 31056, 35029, 35480, 36938, 37009, 37109, + 38596, 34701, 22805, 20104, 20313, 19982, 35465, 36671, 38928, 20653, 24188, 22934, 23481, + 24248, 25562, 25594, 25793, 26332, 26954, 27096, 27915, 28342, 29076, 29992, 31407, 32650, + 32768, 33865, 33993, 35201, 35617, 36362, 36965, 38525, 39178, 24958, 25233, 27442, 27779, + 28020, 32716, 32764, 28096, 32645, 34746, 35064, 26469, 33713, 38972, 38647, 27931, 32097, + 33853, 37226, 20081, 21365, 23888, 27396, 28651, 34253, 34349, 35239, 21033, 21519, 23653, + 26446, 26792, 29702, 29827, 30178, 35023, 35041, 37324, 38626, 38520, 24459, 29575, 31435, + 33870, 25504, 30053, 21129, 27969, 28316, 29705, 30041, 30827, 31890, 38534, 31452, 40845, + 20406, 24942, 26053, 34396, 20102, 20142, 20698, 20001, 20940, 23534, 26009, 26753, 28092, + 29471, 30274, 30637, 31260, 31975, 33391, 35538, 36988, 37327, 38517, 38936, 21147, 32209, + 20523, 21400, 26519, 28107, 29136, 29747, 33256, 36650, 38563, 40023, 40607, 29792, 22593, + 28057, 32047, 39006, 20196, 20278, 20363, 20919, 21169, 23994, 24604, 29618, 31036, 33491, + 37428, 38583, 38646, 38666, 40599, 40802, 26278, 27508, 21015, 21155, 28872, 35010, 24265, + 24651, 24976, 28451, 29001, 31806, 32244, 32879, 34030, 36899, 37676, 21570, 39791, 27347, + 28809, 36034, 36335, 38706, 21172, 23105, 24266, 24324, 26391, 27004, 27028, 28010, 28431, + 29282, 29436, 31725, 32769, 32894, 34635, 37070, 20845, 40595, 31108, 32907, 37682, 35542, + 20525, 21644, 35441, 27498, 36036, 33031, 24785, 26528, 40434, 20121, 20120, 39952, 35435, + 34241, 34152, 26880, 28286, 30871, 33109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24332, 19984, 19989, + 20010, 20017, 20022, 20028, 20031, 20034, 20054, 20056, 20098, 20101, 35947, 20106, 33298, + 24333, 20110, 20126, 20127, 20128, 20130, 20144, 20147, 20150, 20174, 20173, 20164, 20166, + 20162, 20183, 20190, 20205, 20191, 20215, 20233, 20314, 20272, 20315, 20317, 20311, 20295, + 20342, 20360, 20367, 20376, 20347, 20329, 20336, 20369, 20335, 20358, 20374, 20760, 20436, + 20447, 20430, 20440, 20443, 20433, 20442, 20432, 20452, 20453, 20506, 20520, 20500, 20522, + 20517, 20485, 20252, 20470, 20513, 20521, 20524, 20478, 20463, 20497, 20486, 20547, 20551, + 26371, 20565, 20560, 20552, 20570, 20566, 20588, 20600, 20608, 20634, 20613, 20660, 20658, + 20681, 20682, 20659, 20674, 20694, 20702, 20709, 20717, 20707, 20718, 20729, 20725, 20745, + 20737, 20738, 20758, 20757, 20756, 20762, 20769, 20794, 20791, 20796, 20795, 20799, 20800, + 20818, 20812, 20820, 20834, 31480, 20841, 20842, 20846, 20864, 20866, 22232, 20876, 20873, + 20879, 20881, 20883, 20885, 20886, 20900, 20902, 20898, 20905, 20906, 20907, 20915, 20913, + 20914, 20912, 20917, 20925, 20933, 20937, 20955, 20960, 34389, 20969, 20973, 20976, 20981, + 20990, 20996, 21003, 21012, 21006, 21031, 21034, 21038, 21043, 21049, 21071, 21060, 21067, + 21068, 21086, 21076, 21098, 21108, 21097, 21107, 21119, 21117, 21133, 21140, 21138, 21105, + 21128, 21137, 36776, 36775, 21164, 21165, 21180, 21173, 21185, 21197, 21207, 21214, 21219, + 21222, 39149, 21216, 21235, 21237, 21240, 21241, 21254, 21256, 30008, 21261, 21264, 21263, + 21269, 21274, 21283, 21295, 21297, 21299, 21304, 21312, 21318, 21317, 19991, 21321, 21325, + 20950, 21342, 21353, 21358, 22808, 21371, 21367, 21378, 21398, 21408, 21414, 21413, 21422, + 21424, 21430, 21443, 31762, 38617, 21471, 26364, 29166, 21486, 21480, 21485, 21498, 21505, + 21565, 21568, 21548, 21549, 21564, 21550, 21558, 21545, 21533, 21582, 21647, 21621, 21646, + 21599, 21617, 21623, 21616, 21650, 21627, 21632, 21622, 21636, 21648, 21638, 21703, 21666, + 21688, 21669, 21676, 21700, 21704, 21672, 21675, 21698, 21668, 21694, 21692, 21720, 21733, + 21734, 21775, 21780, 21757, 21742, 21741, 21754, 21730, 21817, 21824, 21859, 21836, 21806, + 21852, 21829, 21846, 21847, 21816, 21811, 21853, 21913, 21888, 21679, 21898, 21919, 21883, + 21886, 21912, 21918, 21934, 21884, 21891, 21929, 21895, 21928, 21978, 21957, 21983, 21956, + 21980, 21988, 21972, 22036, 22007, 22038, 22014, 22013, 22043, 22009, 22094, 22096, 29151, + 22068, 22070, 22066, 22072, 22123, 22116, 22063, 22124, 22122, 22150, 22144, 22154, 22176, + 22164, 22159, 22181, 22190, 22198, 22196, 22210, 22204, 22209, 22211, 22208, 22216, 22222, + 22225, 22227, 22231, 22254, 22265, 22272, 22271, 22276, 22281, 22280, 22283, 22285, 22291, + 22296, 22294, 21959, 22300, 22310, 22327, 22328, 22350, 22331, 22336, 22351, 22377, 22464, + 22408, 22369, 22399, 22409, 22419, 22432, 22451, 22436, 22442, 22448, 22467, 22470, 22484, + 22482, 22483, 22538, 22486, 22499, 22539, 22553, 22557, 22642, 22561, 22626, 22603, 22640, + 27584, 22610, 22589, 22649, 22661, 22713, 22687, 22699, 22714, 22750, 22715, 22712, 22702, + 22725, 22739, 22737, 22743, 22745, 22744, 22757, 22748, 22756, 22751, 22767, 22778, 22777, + 22779, 22780, 22781, 22786, 22794, 22800, 22811, 26790, 22821, 22828, 22829, 22834, 22840, + 22846, 31442, 22869, 22864, 22862, 22874, 22872, 22882, 22880, 22887, 22892, 22889, 22904, + 22913, 22941, 20318, 20395, 22947, 22962, 22982, 23016, 23004, 22925, 23001, 23002, 23077, + 23071, 23057, 23068, 23049, 23066, 23104, 23148, 23113, 23093, 23094, 23138, 23146, 23194, + 23228, 23230, 23243, 23234, 23229, 23267, 23255, 23270, 23273, 23254, 23290, 23291, 23308, + 23307, 23318, 23346, 23248, 23338, 23350, 23358, 23363, 23365, 23360, 23377, 23381, 23386, + 23387, 23397, 23401, 23408, 23411, 23413, 23416, 25992, 23418, 23424, 23427, 23462, 23480, + 23491, 23495, 23497, 23508, 23504, 23524, 23526, 23522, 23518, 23525, 23531, 23536, 23542, + 23539, 23557, 23559, 23560, 23565, 23571, 23584, 23586, 23592, 23608, 23609, 23617, 23622, + 23630, 23635, 23632, 23631, 23409, 23660, 23662, 20066, 23670, 23673, 23692, 23697, 23700, + 22939, 23723, 23739, 23734, 23740, 23735, 23749, 23742, 23751, 23769, 23785, 23805, 23802, + 23789, 23948, 23786, 23819, 23829, 23831, 23900, 23839, 23835, 23825, 23828, 23842, 23834, + 23833, 23832, 23884, 23890, 23886, 23883, 23916, 23923, 23926, 23943, 23940, 23938, 23970, + 23965, 23980, 23982, 23997, 23952, 23991, 23996, 24009, 24013, 24019, 24018, 24022, 24027, + 24043, 24050, 24053, 24075, 24090, 24089, 24081, 24091, 24118, 24119, 24132, 24131, 24128, + 24142, 24151, 24148, 24159, 24162, 24164, 24135, 24181, 24182, 24186, 40636, 24191, 24224, + 24257, 24258, 24264, 24272, 24271, 24278, 24291, 24285, 24282, 24283, 24290, 24289, 24296, + 24297, 24300, 24305, 24307, 24304, 24308, 24312, 24318, 24323, 24329, 24413, 24412, 24331, + 24337, 24342, 24361, 24365, 24376, 24385, 24392, 24396, 24398, 24367, 24401, 24406, 24407, + 24409, 24417, 24429, 24435, 24439, 24451, 24450, 24447, 24458, 24456, 24465, 24455, 24478, + 24473, 24472, 24480, 24488, 24493, 24508, 24534, 24571, 24548, 24568, 24561, 24541, 24755, + 24575, 24609, 24672, 24601, 24592, 24617, 24590, 24625, 24603, 24597, 24619, 24614, 24591, + 24634, 24666, 24641, 24682, 24695, 24671, 24650, 24646, 24653, 24675, 24643, 24676, 24642, + 24684, 24683, 24665, 24705, 24717, 24807, 24707, 24730, 24708, 24731, 24726, 24727, 24722, + 24743, 24715, 24801, 24760, 24800, 24787, 24756, 24560, 24765, 24774, 24757, 24792, 24909, + 24853, 24838, 24822, 24823, 24832, 24820, 24826, 24835, 24865, 24827, 24817, 24845, 24846, + 24903, 24894, 24872, 24871, 24906, 24895, 24892, 24876, 24884, 24893, 24898, 24900, 24947, + 24951, 24920, 24921, 24922, 24939, 24948, 24943, 24933, 24945, 24927, 24925, 24915, 24949, + 24985, 24982, 24967, 25004, 24980, 24986, 24970, 24977, 25003, 25006, 25036, 25034, 25033, + 25079, 25032, 25027, 25030, 25018, 25035, 32633, 25037, 25062, 25059, 25078, 25082, 25076, + 25087, 25085, 25084, 25086, 25088, 25096, 25097, 25101, 25100, 25108, 25115, 25118, 25121, + 25130, 25134, 25136, 25138, 25139, 25153, 25166, 25182, 25187, 25179, 25184, 25192, 25212, + 25218, 25225, 25214, 25234, 25235, 25238, 25300, 25219, 25236, 25303, 25297, 25275, 25295, + 25343, 25286, 25812, 25288, 25308, 25292, 25290, 25282, 25287, 25243, 25289, 25356, 25326, + 25329, 25383, 25346, 25352, 25327, 25333, 25424, 25406, 25421, 25628, 25423, 25494, 25486, + 25472, 25515, 25462, 25507, 25487, 25481, 25503, 25525, 25451, 25449, 25534, 25577, 25536, + 25542, 25571, 25545, 25554, 25590, 25540, 25622, 25652, 25606, 25619, 25638, 25654, 25885, + 25623, 25640, 25615, 25703, 25711, 25718, 25678, 25898, 25749, 25747, 25765, 25769, 25736, + 25788, 25818, 25810, 25797, 25799, 25787, 25816, 25794, 25841, 25831, 33289, 25824, 25825, + 25260, 25827, 25839, 25900, 25846, 25844, 25842, 25850, 25856, 25853, 25880, 25884, 25861, + 25892, 25891, 25899, 25908, 25909, 25911, 25910, 25912, 30027, 25928, 25942, 25941, 25933, + 25944, 25950, 25949, 25970, 25976, 25986, 25987, 35722, 26011, 26015, 26027, 26039, 26051, + 26054, 26049, 26052, 26060, 26066, 26075, 26073, 26080, 26081, 26097, 26482, 26122, 26115, + 26107, 26483, 26165, 26166, 26164, 26140, 26191, 26180, 26185, 26177, 26206, 26205, 26212, + 26215, 26216, 26207, 26210, 26224, 26243, 26248, 26254, 26249, 26244, 26264, 26269, 26305, + 26297, 26313, 26302, 26300, 26308, 26296, 26326, 26330, 26336, 26175, 26342, 26345, 26352, + 26357, 26359, 26383, 26390, 26398, 26406, 26407, 38712, 26414, 26431, 26422, 26433, 26424, + 26423, 26438, 26462, 26464, 26457, 26467, 26468, 26505, 26480, 26537, 26492, 26474, 26508, + 26507, 26534, 26529, 26501, 26551, 26607, 26548, 26604, 26547, 26601, 26552, 26596, 26590, + 26589, 26594, 26606, 26553, 26574, 26566, 26599, 27292, 26654, 26694, 26665, 26688, 26701, + 26674, 26702, 26803, 26667, 26713, 26723, 26743, 26751, 26783, 26767, 26797, 26772, 26781, + 26779, 26755, 27310, 26809, 26740, 26805, 26784, 26810, 26895, 26765, 26750, 26881, 26826, + 26888, 26840, 26914, 26918, 26849, 26892, 26829, 26836, 26855, 26837, 26934, 26898, 26884, + 26839, 26851, 26917, 26873, 26848, 26863, 26920, 26922, 26906, 26915, 26913, 26822, 27001, + 26999, 26972, 27000, 26987, 26964, 27006, 26990, 26937, 26996, 26941, 26969, 26928, 26977, + 26974, 26973, 27009, 26986, 27058, 27054, 27088, 27071, 27073, 27091, 27070, 27086, 23528, + 27082, 27101, 27067, 27075, 27047, 27182, 27025, 27040, 27036, 27029, 27060, 27102, 27112, + 27138, 27163, 27135, 27402, 27129, 27122, 27111, 27141, 27057, 27166, 27117, 27156, 27115, + 27146, 27154, 27329, 27171, 27155, 27204, 27148, 27250, 27190, 27256, 27207, 27234, 27225, + 27238, 27208, 27192, 27170, 27280, 27277, 27296, 27268, 27298, 27299, 27287, 34327, 27323, + 27331, 27330, 27320, 27315, 27308, 27358, 27345, 27359, 27306, 27354, 27370, 27387, 27397, + 34326, 27386, 27410, 27414, 39729, 27423, 27448, 27447, 30428, 27449, 39150, 27463, 27459, + 27465, 27472, 27481, 27476, 27483, 27487, 27489, 27512, 27513, 27519, 27520, 27524, 27523, + 27533, 27544, 27541, 27550, 27556, 27562, 27563, 27567, 27570, 27569, 27571, 27575, 27580, + 27590, 27595, 27603, 27615, 27628, 27627, 27635, 27631, 40638, 27656, 27667, 27668, 27675, + 27684, 27683, 27742, 27733, 27746, 27754, 27778, 27789, 27802, 27777, 27803, 27774, 27752, + 27763, 27794, 27792, 27844, 27889, 27859, 27837, 27863, 27845, 27869, 27822, 27825, 27838, + 27834, 27867, 27887, 27865, 27882, 27935, 34893, 27958, 27947, 27965, 27960, 27929, 27957, + 27955, 27922, 27916, 28003, 28051, 28004, 27994, 28025, 27993, 28046, 28053, 28644, 28037, + 28153, 28181, 28170, 28085, 28103, 28134, 28088, 28102, 28140, 28126, 28108, 28136, 28114, + 28101, 28154, 28121, 28132, 28117, 28138, 28142, 28205, 28270, 28206, 28185, 28274, 28255, + 28222, 28195, 28267, 28203, 28278, 28237, 28191, 28227, 28218, 28238, 28196, 28415, 28189, + 28216, 28290, 28330, 28312, 28361, 28343, 28371, 28349, 28335, 28356, 28338, 28372, 28373, + 28303, 28325, 28354, 28319, 28481, 28433, 28748, 28396, 28408, 28414, 28479, 28402, 28465, + 28399, 28466, 28364, 28478, 28435, 28407, 28550, 28538, 28536, 28545, 28544, 28527, 28507, + 28659, 28525, 28546, 28540, 28504, 28558, 28561, 28610, 28518, 28595, 28579, 28577, 28580, + 28601, 28614, 28586, 28639, 28629, 28652, 28628, 28632, 28657, 28654, 28635, 28681, 28683, + 28666, 28689, 28673, 28687, 28670, 28699, 28698, 28532, 28701, 28696, 28703, 28720, 28734, + 28722, 28753, 28771, 28825, 28818, 28847, 28913, 28844, 28856, 28851, 28846, 28895, 28875, + 28893, 28889, 28937, 28925, 28956, 28953, 29029, 29013, 29064, 29030, 29026, 29004, 29014, + 29036, 29071, 29179, 29060, 29077, 29096, 29100, 29143, 29113, 29118, 29138, 29129, 29140, + 29134, 29152, 29164, 29159, 29173, 29180, 29177, 29183, 29197, 29200, 29211, 29224, 29229, + 29228, 29232, 29234, 29243, 29244, 29247, 29248, 29254, 29259, 29272, 29300, 29310, 29314, + 29313, 29319, 29330, 29334, 29346, 29351, 29369, 29362, 29379, 29382, 29380, 29390, 29394, + 29410, 29408, 29409, 29433, 29431, 20495, 29463, 29450, 29468, 29462, 29469, 29492, 29487, + 29481, 29477, 29502, 29518, 29519, 40664, 29527, 29546, 29544, 29552, 29560, 29557, 29563, + 29562, 29640, 29619, 29646, 29627, 29632, 29669, 29678, 29662, 29858, 29701, 29807, 29733, + 29688, 29746, 29754, 29781, 29759, 29791, 29785, 29761, 29788, 29801, 29808, 29795, 29802, + 29814, 29822, 29835, 29854, 29863, 29898, 29903, 29908, 29681, 29920, 29923, 29927, 29929, + 29934, 29938, 29936, 29937, 29944, 29943, 29956, 29955, 29957, 29964, 29966, 29965, 29973, + 29971, 29982, 29990, 29996, 30012, 30020, 30029, 30026, 30025, 30043, 30022, 30042, 30057, + 30052, 30055, 30059, 30061, 30072, 30070, 30086, 30087, 30068, 30090, 30089, 30082, 30100, + 30106, 30109, 30117, 30115, 30146, 30131, 30147, 30133, 30141, 30136, 30140, 30129, 30157, + 30154, 30162, 30169, 30179, 30174, 30206, 30207, 30204, 30209, 30192, 30202, 30194, 30195, + 30219, 30221, 30217, 30239, 30247, 30240, 30241, 30242, 30244, 30260, 30256, 30267, 30279, + 30280, 30278, 30300, 30296, 30305, 30306, 30312, 30313, 30314, 30311, 30316, 30320, 30322, + 30326, 30328, 30332, 30336, 30339, 30344, 30347, 30350, 30358, 30355, 30361, 30362, 30384, + 30388, 30392, 30393, 30394, 30402, 30413, 30422, 30418, 30430, 30433, 30437, 30439, 30442, + 34351, 30459, 30472, 30471, 30468, 30505, 30500, 30494, 30501, 30502, 30491, 30519, 30520, + 30535, 30554, 30568, 30571, 30555, 30565, 30591, 30590, 30585, 30606, 30603, 30609, 30624, + 30622, 30640, 30646, 30649, 30655, 30652, 30653, 30651, 30663, 30669, 30679, 30682, 30684, + 30691, 30702, 30716, 30732, 30738, 31014, 30752, 31018, 30789, 30862, 30836, 30854, 30844, + 30874, 30860, 30883, 30901, 30890, 30895, 30929, 30918, 30923, 30932, 30910, 30908, 30917, + 30922, 30956, 30951, 30938, 30973, 30964, 30983, 30994, 30993, 31001, 31020, 31019, 31040, + 31072, 31063, 31071, 31066, 31061, 31059, 31098, 31103, 31114, 31133, 31143, 40779, 31146, + 31150, 31155, 31161, 31162, 31177, 31189, 31207, 31212, 31201, 31203, 31240, 31245, 31256, + 31257, 31264, 31263, 31104, 31281, 31291, 31294, 31287, 31299, 31319, 31305, 31329, 31330, + 31337, 40861, 31344, 31353, 31357, 31368, 31383, 31381, 31384, 31382, 31401, 31432, 31408, + 31414, 31429, 31428, 31423, 36995, 31431, 31434, 31437, 31439, 31445, 31443, 31449, 31450, + 31453, 31457, 31458, 31462, 31469, 31472, 31490, 31503, 31498, 31494, 31539, 31512, 31513, + 31518, 31541, 31528, 31542, 31568, 31610, 31492, 31565, 31499, 31564, 31557, 31605, 31589, + 31604, 31591, 31600, 31601, 31596, 31598, 31645, 31640, 31647, 31629, 31644, 31642, 31627, + 31634, 31631, 31581, 31641, 31691, 31681, 31692, 31695, 31668, 31686, 31709, 31721, 31761, + 31764, 31718, 31717, 31840, 31744, 31751, 31763, 31731, 31735, 31767, 31757, 31734, 31779, + 31783, 31786, 31775, 31799, 31787, 31805, 31820, 31811, 31828, 31823, 31808, 31824, 31832, + 31839, 31844, 31830, 31845, 31852, 31861, 31875, 31888, 31908, 31917, 31906, 31915, 31905, + 31912, 31923, 31922, 31921, 31918, 31929, 31933, 31936, 31941, 31938, 31960, 31954, 31964, + 31970, 39739, 31983, 31986, 31988, 31990, 31994, 32006, 32002, 32028, 32021, 32010, 32069, + 32075, 32046, 32050, 32063, 32053, 32070, 32115, 32086, 32078, 32114, 32104, 32110, 32079, + 32099, 32147, 32137, 32091, 32143, 32125, 32155, 32186, 32174, 32163, 32181, 32199, 32189, + 32171, 32317, 32162, 32175, 32220, 32184, 32159, 32176, 32216, 32221, 32228, 32222, 32251, + 32242, 32225, 32261, 32266, 32291, 32289, 32274, 32305, 32287, 32265, 32267, 32290, 32326, + 32358, 32315, 32309, 32313, 32323, 32311, 32306, 32314, 32359, 32349, 32342, 32350, 32345, + 32346, 32377, 32362, 32361, 32380, 32379, 32387, 32213, 32381, 36782, 32383, 32392, 32393, + 32396, 32402, 32400, 32403, 32404, 32406, 32398, 32411, 32412, 32568, 32570, 32581, 32588, + 32589, 32590, 32592, 32593, 32597, 32596, 32600, 32607, 32608, 32616, 32617, 32615, 32632, + 32642, 32646, 32643, 32648, 32647, 32652, 32660, 32670, 32669, 32666, 32675, 32687, 32690, + 32697, 32686, 32694, 32696, 35697, 32709, 32710, 32714, 32725, 32724, 32737, 32742, 32745, + 32755, 32761, 39132, 32774, 32772, 32779, 32786, 32792, 32793, 32796, 32801, 32808, 32831, + 32827, 32842, 32838, 32850, 32856, 32858, 32863, 32866, 32872, 32883, 32882, 32880, 32886, + 32889, 32893, 32895, 32900, 32902, 32901, 32923, 32915, 32922, 32941, 20880, 32940, 32987, + 32997, 32985, 32989, 32964, 32986, 32982, 33033, 33007, 33009, 33051, 33065, 33059, 33071, + 33099, 38539, 33094, 33086, 33107, 33105, 33020, 33137, 33134, 33125, 33126, 33140, 33155, + 33160, 33162, 33152, 33154, 33184, 33173, 33188, 33187, 33119, 33171, 33193, 33200, 33205, + 33214, 33208, 33213, 33216, 33218, 33210, 33225, 33229, 33233, 33241, 33240, 33224, 33242, + 33247, 33248, 33255, 33274, 33275, 33278, 33281, 33282, 33285, 33287, 33290, 33293, 33296, + 33302, 33321, 33323, 33336, 33331, 33344, 33369, 33368, 33373, 33370, 33375, 33380, 33378, + 33384, 33386, 33387, 33326, 33393, 33399, 33400, 33406, 33421, 33426, 33451, 33439, 33467, + 33452, 33505, 33507, 33503, 33490, 33524, 33523, 33530, 33683, 33539, 33531, 33529, 33502, + 33542, 33500, 33545, 33497, 33589, 33588, 33558, 33586, 33585, 33600, 33593, 33616, 33605, + 33583, 33579, 33559, 33560, 33669, 33690, 33706, 33695, 33698, 33686, 33571, 33678, 33671, + 33674, 33660, 33717, 33651, 33653, 33696, 33673, 33704, 33780, 33811, 33771, 33742, 33789, + 33795, 33752, 33803, 33729, 33783, 33799, 33760, 33778, 33805, 33826, 33824, 33725, 33848, + 34054, 33787, 33901, 33834, 33852, 34138, 33924, 33911, 33899, 33965, 33902, 33922, 33897, + 33862, 33836, 33903, 33913, 33845, 33994, 33890, 33977, 33983, 33951, 34009, 33997, 33979, + 34010, 34000, 33985, 33990, 34006, 33953, 34081, 34047, 34036, 34071, 34072, 34092, 34079, + 34069, 34068, 34044, 34112, 34147, 34136, 34120, 34113, 34306, 34123, 34133, 34176, 34212, + 34184, 34193, 34186, 34216, 34157, 34196, 34203, 34282, 34183, 34204, 34167, 34174, 34192, + 34249, 34234, 34255, 34233, 34256, 34261, 34269, 34277, 34268, 34297, 34314, 34323, 34315, + 34302, 34298, 34310, 34338, 34330, 34352, 34367, 34381, 20053, 34388, 34399, 34407, 34417, + 34451, 34467, 34473, 34474, 34443, 34444, 34486, 34479, 34500, 34502, 34480, 34505, 34851, + 34475, 34516, 34526, 34537, 34540, 34527, 34523, 34543, 34578, 34566, 34568, 34560, 34563, + 34555, 34577, 34569, 34573, 34553, 34570, 34612, 34623, 34615, 34619, 34597, 34601, 34586, + 34656, 34655, 34680, 34636, 34638, 34676, 34647, 34664, 34670, 34649, 34643, 34659, 34666, + 34821, 34722, 34719, 34690, 34735, 34763, 34749, 34752, 34768, 38614, 34731, 34756, 34739, + 34759, 34758, 34747, 34799, 34802, 34784, 34831, 34829, 34814, 34806, 34807, 34830, 34770, + 34833, 34838, 34837, 34850, 34849, 34865, 34870, 34873, 34855, 34875, 34884, 34882, 34898, + 34905, 34910, 34914, 34923, 34945, 34942, 34974, 34933, 34941, 34997, 34930, 34946, 34967, + 34962, 34990, 34969, 34978, 34957, 34980, 34992, 35007, 34993, 35011, 35012, 35028, 35032, + 35033, 35037, 35065, 35074, 35068, 35060, 35048, 35058, 35076, 35084, 35082, 35091, 35139, + 35102, 35109, 35114, 35115, 35137, 35140, 35131, 35126, 35128, 35148, 35101, 35168, 35166, + 35174, 35172, 35181, 35178, 35183, 35188, 35191, 35198, 35203, 35208, 35210, 35219, 35224, + 35233, 35241, 35238, 35244, 35247, 35250, 35258, 35261, 35263, 35264, 35290, 35292, 35293, + 35303, 35316, 35320, 35331, 35350, 35344, 35340, 35355, 35357, 35365, 35382, 35393, 35419, + 35410, 35398, 35400, 35452, 35437, 35436, 35426, 35461, 35458, 35460, 35496, 35489, 35473, + 35493, 35494, 35482, 35491, 35524, 35533, 35522, 35546, 35563, 35571, 35559, 35556, 35569, + 35604, 35552, 35554, 35575, 35550, 35547, 35596, 35591, 35610, 35553, 35606, 35600, 35607, + 35616, 35635, 38827, 35622, 35627, 35646, 35624, 35649, 35660, 35663, 35662, 35657, 35670, + 35675, 35674, 35691, 35679, 35692, 35695, 35700, 35709, 35712, 35724, 35726, 35730, 35731, + 35734, 35737, 35738, 35898, 35905, 35903, 35912, 35916, 35918, 35920, 35925, 35938, 35948, + 35960, 35962, 35970, 35977, 35973, 35978, 35981, 35982, 35988, 35964, 35992, 25117, 36013, + 36010, 36029, 36018, 36019, 36014, 36022, 36040, 36033, 36068, 36067, 36058, 36093, 36090, + 36091, 36100, 36101, 36106, 36103, 36111, 36109, 36112, 40782, 36115, 36045, 36116, 36118, + 36199, 36205, 36209, 36211, 36225, 36249, 36290, 36286, 36282, 36303, 36314, 36310, 36300, + 36315, 36299, 36330, 36331, 36319, 36323, 36348, 36360, 36361, 36351, 36381, 36382, 36368, + 36383, 36418, 36405, 36400, 36404, 36426, 36423, 36425, 36428, 36432, 36424, 36441, 36452, + 36448, 36394, 36451, 36437, 36470, 36466, 36476, 36481, 36487, 36485, 36484, 36491, 36490, + 36499, 36497, 36500, 36505, 36522, 36513, 36524, 36528, 36550, 36529, 36542, 36549, 36552, + 36555, 36571, 36579, 36604, 36603, 36587, 36606, 36618, 36613, 36629, 36626, 36633, 36627, + 36636, 36639, 36635, 36620, 36646, 36659, 36667, 36665, 36677, 36674, 36670, 36684, 36681, + 36678, 36686, 36695, 36700, 36706, 36707, 36708, 36764, 36767, 36771, 36781, 36783, 36791, + 36826, 36837, 36834, 36842, 36847, 36999, 36852, 36869, 36857, 36858, 36881, 36885, 36897, + 36877, 36894, 36886, 36875, 36903, 36918, 36917, 36921, 36856, 36943, 36944, 36945, 36946, + 36878, 36937, 36926, 36950, 36952, 36958, 36968, 36975, 36982, 38568, 36978, 36994, 36989, + 36993, 36992, 37002, 37001, 37007, 37032, 37039, 37041, 37045, 37090, 37092, 25160, 37083, + 37122, 37138, 37145, 37170, 37168, 37194, 37206, 37208, 37219, 37221, 37225, 37235, 37234, + 37259, 37257, 37250, 37282, 37291, 37295, 37290, 37301, 37300, 37306, 37312, 37313, 37321, + 37323, 37328, 37334, 37343, 37345, 37339, 37372, 37365, 37366, 37406, 37375, 37396, 37420, + 37397, 37393, 37470, 37463, 37445, 37449, 37476, 37448, 37525, 37439, 37451, 37456, 37532, + 37526, 37523, 37531, 37466, 37583, 37561, 37559, 37609, 37647, 37626, 37700, 37678, 37657, + 37666, 37658, 37667, 37690, 37685, 37691, 37724, 37728, 37756, 37742, 37718, 37808, 37804, + 37805, 37780, 37817, 37846, 37847, 37864, 37861, 37848, 37827, 37853, 37840, 37832, 37860, + 37914, 37908, 37907, 37891, 37895, 37904, 37942, 37931, 37941, 37921, 37946, 37953, 37970, + 37956, 37979, 37984, 37986, 37982, 37994, 37417, 38000, 38005, 38007, 38013, 37978, 38012, + 38014, 38017, 38015, 38274, 38279, 38282, 38292, 38294, 38296, 38297, 38304, 38312, 38311, + 38317, 38332, 38331, 38329, 38334, 38346, 28662, 38339, 38349, 38348, 38357, 38356, 38358, + 38364, 38369, 38373, 38370, 38433, 38440, 38446, 38447, 38466, 38476, 38479, 38475, 38519, + 38492, 38494, 38493, 38495, 38502, 38514, 38508, 38541, 38552, 38549, 38551, 38570, 38567, + 38577, 38578, 38576, 38580, 38582, 38584, 38585, 38606, 38603, 38601, 38605, 35149, 38620, + 38669, 38613, 38649, 38660, 38662, 38664, 38675, 38670, 38673, 38671, 38678, 38681, 38692, + 38698, 38704, 38713, 38717, 38718, 38724, 38726, 38728, 38722, 38729, 38748, 38752, 38756, + 38758, 38760, 21202, 38763, 38769, 38777, 38789, 38780, 38785, 38778, 38790, 38795, 38799, + 38800, 38812, 38824, 38822, 38819, 38835, 38836, 38851, 38854, 38856, 38859, 38876, 38893, + 40783, 38898, 31455, 38902, 38901, 38927, 38924, 38968, 38948, 38945, 38967, 38973, 38982, + 38991, 38987, 39019, 39023, 39024, 39025, 39028, 39027, 39082, 39087, 39089, 39094, 39108, + 39107, 39110, 39145, 39147, 39171, 39177, 39186, 39188, 39192, 39201, 39197, 39198, 39204, + 39200, 39212, 39214, 39229, 39230, 39234, 39241, 39237, 39248, 39243, 39249, 39250, 39244, + 39253, 39319, 39320, 39333, 39341, 39342, 39356, 39391, 39387, 39389, 39384, 39377, 39405, + 39406, 39409, 39410, 39419, 39416, 39425, 39439, 39429, 39394, 39449, 39467, 39479, 39493, + 39490, 39488, 39491, 39486, 39509, 39501, 39515, 39511, 39519, 39522, 39525, 39524, 39529, + 39531, 39530, 39597, 39600, 39612, 39616, 39631, 39633, 39635, 39636, 39646, 39647, 39650, + 39651, 39654, 39663, 39659, 39662, 39668, 39665, 39671, 39675, 39686, 39704, 39706, 39711, + 39714, 39715, 39717, 39719, 39720, 39721, 39722, 39726, 39727, 39730, 39748, 39747, 39759, + 39757, 39758, 39761, 39768, 39796, 39827, 39811, 39825, 39830, 39831, 39839, 39840, 39848, + 39860, 39872, 39882, 39865, 39878, 39887, 39889, 39890, 39907, 39906, 39908, 39892, 39905, + 39994, 39922, 39921, 39920, 39957, 39956, 39945, 39955, 39948, 39942, 39944, 39954, 39946, + 39940, 39982, 39963, 39973, 39972, 39969, 39984, 40007, 39986, 40006, 39998, 40026, 40032, + 40039, 40054, 40056, 40167, 40172, 40176, 40201, 40200, 40171, 40195, 40198, 40234, 40230, + 40367, 40227, 40223, 40260, 40213, 40210, 40257, 40255, 40254, 40262, 40264, 40285, 40286, + 40292, 40273, 40272, 40281, 40306, 40329, 40327, 40363, 40303, 40314, 40346, 40356, 40361, + 40370, 40388, 40385, 40379, 40376, 40378, 40390, 40399, 40386, 40409, 40403, 40440, 40422, + 40429, 40431, 40445, 40474, 40475, 40478, 40565, 40569, 40573, 40577, 40584, 40587, 40588, + 40594, 40597, 40593, 40605, 40613, 40617, 40632, 40618, 40621, 38753, 40652, 40654, 40655, + 40656, 40660, 40668, 40670, 40669, 40672, 40677, 40680, 40687, 40692, 40694, 40695, 40697, + 40699, 40700, 40701, 40711, 40712, 30391, 40725, 40737, 40748, 40766, 40778, 40786, 40788, + 40803, 40799, 40800, 40801, 40806, 40807, 40812, 40810, 40823, 40818, 40822, 40853, 40860, + 40864, 22575, 27079, 36953, 29796, 20956, 29081, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 32394, 35100, 37704, 37512, 34012, 20425, 28859, 26161, 26824, 37625, 26363, 24389, 20008, + 20193, 20220, 20224, 20227, 20281, 20310, 20370, 20362, 20378, 20372, 20429, 20544, 20514, + 20479, 20510, 20550, 20592, 20546, 20628, 20724, 20696, 20810, 20836, 20893, 20926, 20972, + 21013, 21148, 21158, 21184, 21211, 21248, 21255, 21284, 21362, 21395, 21426, 21469, 64014, + 21660, 21642, 21673, 21759, 21894, 22361, 22373, 22444, 22472, 22471, 64015, 64016, 22686, + 22706, 22795, 22867, 22875, 22877, 22883, 22948, 22970, 23382, 23488, 29999, 23512, 23532, + 23582, 23718, 23738, 23797, 23847, 23891, 64017, 23874, 23917, 23992, 23993, 24016, 24353, + 24372, 24423, 24503, 24542, 24669, 24709, 24714, 24798, 24789, 24864, 24818, 24849, 24887, + 24880, 24984, 25107, 25254, 25589, 25696, 25757, 25806, 25934, 26112, 26133, 26171, 26121, + 26158, 26142, 26148, 26213, 26199, 26201, 64018, 26227, 26265, 26272, 26290, 26303, 26362, + 26382, 63785, 26470, 26555, 26706, 26560, 26625, 26692, 26831, 64019, 26984, 64020, 27032, + 27106, 27184, 27243, 27206, 27251, 27262, 27362, 27364, 27606, 27711, 27740, 27782, 27759, + 27866, 27908, 28039, 28015, 28054, 28076, 28111, 28152, 28146, 28156, 28217, 28252, 28199, + 28220, 28351, 28552, 28597, 28661, 28677, 28679, 28712, 28805, 28843, 28943, 28932, 29020, + 28998, 28999, 64021, 29121, 29182, 29361, 29374, 29476, 64022, 29559, 29629, 29641, 29654, + 29667, 29650, 29703, 29685, 29734, 29738, 29737, 29742, 29794, 29833, 29855, 29953, 30063, + 30338, 30364, 30366, 30363, 30374, 64023, 30534, 21167, 30753, 30798, 30820, 30842, 31024, + 64024, 64025, 64026, 31124, 64027, 31131, 31441, 31463, 64028, 31467, 31646, 64029, 32072, + 32092, 32183, 32160, 32214, 32338, 32583, 32673, 64030, 33537, 33634, 33663, 33735, 33782, + 33864, 33972, 34131, 34137, 34155, 64031, 34224, 64032, 64033, 34823, 35061, 35346, 35383, + 35449, 35495, 35518, 35551, 64034, 35574, 35667, 35711, 36080, 36084, 36114, 36214, 64035, + 36559, 64036, 64037, 36967, 37086, 64038, 37141, 37159, 37338, 37335, 37342, 37357, 37358, + 37348, 37349, 37382, 37392, 37386, 37434, 37440, 37436, 37454, 37465, 37457, 37433, 37479, + 37543, 37495, 37496, 37607, 37591, 37593, 37584, 64039, 37589, 37600, 37587, 37669, 37665, + 37627, 64040, 37662, 37631, 37661, 37634, 37744, 37719, 37796, 37830, 37854, 37880, 37937, + 37957, 37960, 38290, 63964, 64041, 38557, 38575, 38707, 38715, 38723, 38733, 38735, 38737, + 38741, 38999, 39013, 64042, 64043, 39207, 64044, 39326, 39502, 39641, 39644, 39797, 39794, + 39823, 39857, 39867, 39936, 40304, 40299, 64045, 40473, 40657, 0, 0, 8560, 8561, 8562, 8563, + 8564, 8565, 8566, 8567, 8568, 8569, 65506, 65508, 65287, 65282, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8560, 8561, 8562, 8563, 8564, 8565, 8566, 8567, 8568, 8569, 8544, + 8545, 8546, 8547, 8548, 8549, 8550, 8551, 8552, 8553, 65506, 65508, 65287, 65282, 12849, 8470, + 8481, 8757, 32394, 35100, 37704, 37512, 34012, 20425, 28859, 26161, 26824, 37625, 26363, 24389, + 20008, 20193, 20220, 20224, 20227, 20281, 20310, 20370, 20362, 20378, 20372, 20429, 20544, + 20514, 20479, 20510, 20550, 20592, 20546, 20628, 20724, 20696, 20810, 20836, 20893, 20926, + 20972, 21013, 21148, 21158, 21184, 21211, 21248, 21255, 21284, 21362, 21395, 21426, 21469, + 64014, 21660, 21642, 21673, 21759, 21894, 22361, 22373, 22444, 22472, 22471, 64015, 64016, + 22686, 22706, 22795, 22867, 22875, 22877, 22883, 22948, 22970, 23382, 23488, 29999, 23512, + 23532, 23582, 23718, 23738, 23797, 23847, 23891, 64017, 23874, 23917, 23992, 23993, 24016, + 24353, 24372, 24423, 24503, 24542, 24669, 24709, 24714, 24798, 24789, 24864, 24818, 24849, + 24887, 24880, 24984, 25107, 25254, 25589, 25696, 25757, 25806, 25934, 26112, 26133, 26171, + 26121, 26158, 26142, 26148, 26213, 26199, 26201, 64018, 26227, 26265, 26272, 26290, 26303, + 26362, 26382, 63785, 26470, 26555, 26706, 26560, 26625, 26692, 26831, 64019, 26984, 64020, + 27032, 27106, 27184, 27243, 27206, 27251, 27262, 27362, 27364, 27606, 27711, 27740, 27782, + 27759, 27866, 27908, 28039, 28015, 28054, 28076, 28111, 28152, 28146, 28156, 28217, 28252, + 28199, 28220, 28351, 28552, 28597, 28661, 28677, 28679, 28712, 28805, 28843, 28943, 28932, + 29020, 28998, 28999, 64021, 29121, 29182, 29361, 29374, 29476, 64022, 29559, 29629, 29641, + 29654, 29667, 29650, 29703, 29685, 29734, 29738, 29737, 29742, 29794, 29833, 29855, 29953, + 30063, 30338, 30364, 30366, 30363, 30374, 64023, 30534, 21167, 30753, 30798, 30820, 30842, + 31024, 64024, 64025, 64026, 31124, 64027, 31131, 31441, 31463, 64028, 31467, 31646, 64029, + 32072, 32092, 32183, 32160, 32214, 32338, 32583, 32673, 64030, 33537, 33634, 33663, 33735, + 33782, 33864, 33972, 34131, 34137, 34155, 64031, 34224, 64032, 64033, 34823, 35061, 35346, + 35383, 35449, 35495, 35518, 35551, 64034, 35574, 35667, 35711, 36080, 36084, 36114, 36214, + 64035, 36559, 64036, 64037, 36967, 37086, 64038, 37141, 37159, 37338, 37335, 37342, 37357, + 37358, 37348, 37349, 37382, 37392, 37386, 37434, 37440, 37436, 37454, 37465, 37457, 37433, + 37479, 37543, 37495, 37496, 37607, 37591, 37593, 37584, 64039, 37589, 37600, 37587, 37669, + 37665, 37627, 64040, 37662, 37631, 37661, 37634, 37744, 37719, 37796, 37830, 37854, 37880, + 37937, 37957, 37960, 38290, 63964, 64041, 38557, 38575, 38707, 38715, 38723, 38733, 38735, + 38737, 38741, 38999, 39013, 64042, 64043, 39207, 64044, 39326, 39502, 39641, 39644, 39797, + 39794, 39823, 39857, 39867, 39936, 40304, 40299, 64045, 40473, 40657, +]; + +/// CJK radicals and strokes -> the unified ideograph each stands for, +/// sorted by the first. +pub static RADICALS: [(u32, u32); 348] = [ + (0x2e81, 0x5382), + (0x2e82, 0x4e5b), + (0x2e83, 0x4e5a), + (0x2e84, 0x4e59), + (0x2e85, 0x4ebb), + (0x2e86, 0x5182), + (0x2e87, 0x20628), + (0x2e88, 0x5200), + (0x2e89, 0x5202), + (0x2e8a, 0x535c), + (0x2e8b, 0x353e), + (0x2e8c, 0x5c0f), + (0x2e8d, 0x5c0f), + (0x2e8e, 0x5140), + (0x2e8f, 0x5c23), + (0x2e90, 0x5c22), + (0x2e91, 0x21bc2), + (0x2e92, 0x5df3), + (0x2e93, 0x5e7a), + (0x2e94, 0x5f51), + (0x2e95, 0x2b739), + (0x2e96, 0x5fc4), + (0x2e97, 0x5fc3), + (0x2e98, 0x624c), + (0x2e99, 0x6535), + (0x2e9b, 0x65e1), + (0x2e9c, 0x65e5), + (0x2e9d, 0x6708), + (0x2e9e, 0x6b7a), + (0x2e9f, 0x6bcd), + (0x2ea0, 0x6c11), + (0x2ea1, 0x6c35), + (0x2ea2, 0x6c3a), + (0x2ea3, 0x706c), + (0x2ea4, 0x722b), + (0x2ea5, 0x722b), + (0x2ea6, 0x4e2c), + (0x2ea7, 0x725b), + (0x2ea8, 0x72ad), + (0x2ea9, 0x738b), + (0x2eaa, 0x24d14), + (0x2eab, 0x76ee), + (0x2eac, 0x793a), + (0x2ead, 0x793b), + (0x2eae, 0x25ad7), + (0x2eaf, 0x7cf9), + (0x2eb0, 0x7e9f), + (0x2eb1, 0x7f53), + (0x2eb2, 0x7f52), + (0x2eb3, 0x34c1), + (0x2eb4, 0x5197), + (0x2eb5, 0x2626b), + (0x2eb6, 0x7f8a), + (0x2eb7, 0x2634c), + (0x2eb8, 0x2634b), + (0x2eb9, 0x8002), + (0x2eba, 0x8080), + (0x2ebb, 0x807f), + (0x2ebc, 0x8089), + (0x2ebd, 0x26951), + (0x2ebe, 0x8279), + (0x2ebf, 0x8279), + (0x2ec0, 0x8279), + (0x2ec1, 0x864e), + (0x2ec2, 0x8864), + (0x2ec3, 0x8980), + (0x2ec4, 0x897f), + (0x2ec5, 0x89c1), + (0x2ec6, 0x89d2), + (0x2ec7, 0x278b2), + (0x2ec8, 0x8ba0), + (0x2ec9, 0x8d1d), + (0x2eca, 0x27fb7), + (0x2ecb, 0x8f66), + (0x2ecc, 0x8fb6), + (0x2ecd, 0x8fb6), + (0x2ece, 0x8fb6), + (0x2ecf, 0x9091), + (0x2ed0, 0x9485), + (0x2ed1, 0x9577), + (0x2ed2, 0x9578), + (0x2ed3, 0x957f), + (0x2ed4, 0x95e8), + (0x2ed5, 0x28e0f), + (0x2ed6, 0x961d), + (0x2ed7, 0x96e8), + (0x2ed8, 0x9752), + (0x2ed9, 0x97e6), + (0x2eda, 0x9875), + (0x2edb, 0x98ce), + (0x2edc, 0x98de), + (0x2edd, 0x98df), + (0x2ede, 0x2967f), + (0x2edf, 0x98e0), + (0x2ee0, 0x9963), + (0x2ee1, 0x29810), + (0x2ee2, 0x9a6c), + (0x2ee3, 0x9aa8), + (0x2ee4, 0x9b3c), + (0x2ee5, 0x9c7c), + (0x2ee6, 0x9e1f), + (0x2ee7, 0x5364), + (0x2ee8, 0x9ea6), + (0x2ee9, 0x9ec4), + (0x2eea, 0x9efe), + (0x2eeb, 0x6589), + (0x2eec, 0x9f50), + (0x2eed, 0x6b6f), + (0x2eee, 0x9f7f), + (0x2eef, 0x7adc), + (0x2ef0, 0x9f99), + (0x2ef1, 0x9f9c), + (0x2ef2, 0x4e80), + (0x2ef3, 0x9f9f), + (0x2f00, 0x4e00), + (0x2f01, 0x4e28), + (0x2f02, 0x4e36), + (0x2f03, 0x4e3f), + (0x2f04, 0x4e59), + (0x2f05, 0x4e85), + (0x2f06, 0x4e8c), + (0x2f07, 0x4ea0), + (0x2f08, 0x4eba), + (0x2f09, 0x513f), + (0x2f0a, 0x5165), + (0x2f0b, 0x516b), + (0x2f0c, 0x5182), + (0x2f0d, 0x5196), + (0x2f0e, 0x51ab), + (0x2f0f, 0x51e0), + (0x2f10, 0x51f5), + (0x2f11, 0x5200), + (0x2f12, 0x529b), + (0x2f13, 0x52f9), + (0x2f14, 0x5315), + (0x2f15, 0x531a), + (0x2f16, 0x5338), + (0x2f17, 0x5341), + (0x2f18, 0x535c), + (0x2f19, 0x5369), + (0x2f1a, 0x5382), + (0x2f1b, 0x53b6), + (0x2f1c, 0x53c8), + (0x2f1d, 0x53e3), + (0x2f1e, 0x56d7), + (0x2f1f, 0x571f), + (0x2f20, 0x58eb), + (0x2f21, 0x5902), + (0x2f22, 0x590a), + (0x2f23, 0x5915), + (0x2f24, 0x5927), + (0x2f25, 0x5973), + (0x2f26, 0x5b50), + (0x2f27, 0x5b80), + (0x2f28, 0x5bf8), + (0x2f29, 0x5c0f), + (0x2f2a, 0x5c22), + (0x2f2b, 0x5c38), + (0x2f2c, 0x5c6e), + (0x2f2d, 0x5c71), + (0x2f2e, 0x5ddb), + (0x2f2f, 0x5de5), + (0x2f30, 0x5df1), + (0x2f31, 0x5dfe), + (0x2f32, 0x5e72), + (0x2f33, 0x5e7a), + (0x2f34, 0x5e7f), + (0x2f35, 0x5ef4), + (0x2f36, 0x5efe), + (0x2f37, 0x5f0b), + (0x2f38, 0x5f13), + (0x2f39, 0x5f50), + (0x2f3a, 0x5f61), + (0x2f3b, 0x5f73), + (0x2f3c, 0x5fc3), + (0x2f3d, 0x6208), + (0x2f3e, 0x6236), + (0x2f3f, 0x624b), + (0x2f40, 0x652f), + (0x2f41, 0x6534), + (0x2f42, 0x6587), + (0x2f43, 0x6597), + (0x2f44, 0x65a4), + (0x2f45, 0x65b9), + (0x2f46, 0x65e0), + (0x2f47, 0x65e5), + (0x2f48, 0x66f0), + (0x2f49, 0x6708), + (0x2f4a, 0x6728), + (0x2f4b, 0x6b20), + (0x2f4c, 0x6b62), + (0x2f4d, 0x6b79), + (0x2f4e, 0x6bb3), + (0x2f4f, 0x6bcb), + (0x2f50, 0x6bd4), + (0x2f51, 0x6bdb), + (0x2f52, 0x6c0f), + (0x2f53, 0x6c14), + (0x2f54, 0x6c34), + (0x2f55, 0x706b), + (0x2f56, 0x722a), + (0x2f57, 0x7236), + (0x2f58, 0x723b), + (0x2f59, 0x723f), + (0x2f5a, 0x7247), + (0x2f5b, 0x7259), + (0x2f5c, 0x725b), + (0x2f5d, 0x72ac), + (0x2f5e, 0x7384), + (0x2f5f, 0x7389), + (0x2f60, 0x74dc), + (0x2f61, 0x74e6), + (0x2f62, 0x7518), + (0x2f63, 0x751f), + (0x2f64, 0x7528), + (0x2f65, 0x7530), + (0x2f66, 0x758b), + (0x2f67, 0x7592), + (0x2f68, 0x7676), + (0x2f69, 0x767d), + (0x2f6a, 0x76ae), + (0x2f6b, 0x76bf), + (0x2f6c, 0x76ee), + (0x2f6d, 0x77db), + (0x2f6e, 0x77e2), + (0x2f6f, 0x77f3), + (0x2f70, 0x793a), + (0x2f71, 0x79b8), + (0x2f72, 0x79be), + (0x2f73, 0x7a74), + (0x2f74, 0x7acb), + (0x2f75, 0x7af9), + (0x2f76, 0x7c73), + (0x2f77, 0x7cf8), + (0x2f78, 0x7f36), + (0x2f79, 0x7f51), + (0x2f7a, 0x7f8a), + (0x2f7b, 0x7fbd), + (0x2f7c, 0x8001), + (0x2f7d, 0x800c), + (0x2f7e, 0x8012), + (0x2f7f, 0x8033), + (0x2f80, 0x807f), + (0x2f81, 0x8089), + (0x2f82, 0x81e3), + (0x2f83, 0x81ea), + (0x2f84, 0x81f3), + (0x2f85, 0x81fc), + (0x2f86, 0x820c), + (0x2f87, 0x821b), + (0x2f88, 0x821f), + (0x2f89, 0x826e), + (0x2f8a, 0x8272), + (0x2f8b, 0x8278), + (0x2f8c, 0x864d), + (0x2f8d, 0x866b), + (0x2f8e, 0x8840), + (0x2f8f, 0x884c), + (0x2f90, 0x8863), + (0x2f91, 0x897e), + (0x2f92, 0x898b), + (0x2f93, 0x89d2), + (0x2f94, 0x8a00), + (0x2f95, 0x8c37), + (0x2f96, 0x8c46), + (0x2f97, 0x8c55), + (0x2f98, 0x8c78), + (0x2f99, 0x8c9d), + (0x2f9a, 0x8d64), + (0x2f9b, 0x8d70), + (0x2f9c, 0x8db3), + (0x2f9d, 0x8eab), + (0x2f9e, 0x8eca), + (0x2f9f, 0x8f9b), + (0x2fa0, 0x8fb0), + (0x2fa1, 0x8fb5), + (0x2fa2, 0x9091), + (0x2fa3, 0x9149), + (0x2fa4, 0x91c6), + (0x2fa5, 0x91cc), + (0x2fa6, 0x91d1), + (0x2fa7, 0x9577), + (0x2fa8, 0x9580), + (0x2fa9, 0x961c), + (0x2faa, 0x96b6), + (0x2fab, 0x96b9), + (0x2fac, 0x96e8), + (0x2fad, 0x9751), + (0x2fae, 0x975e), + (0x2faf, 0x9762), + (0x2fb0, 0x9769), + (0x2fb1, 0x97cb), + (0x2fb2, 0x97ed), + (0x2fb3, 0x97f3), + (0x2fb4, 0x9801), + (0x2fb5, 0x98a8), + (0x2fb6, 0x98db), + (0x2fb7, 0x98df), + (0x2fb8, 0x9996), + (0x2fb9, 0x9999), + (0x2fba, 0x99ac), + (0x2fbb, 0x9aa8), + (0x2fbc, 0x9ad8), + (0x2fbd, 0x9adf), + (0x2fbe, 0x9b25), + (0x2fbf, 0x9b2f), + (0x2fc0, 0x9b32), + (0x2fc1, 0x9b3c), + (0x2fc2, 0x9b5a), + (0x2fc3, 0x9ce5), + (0x2fc4, 0x9e75), + (0x2fc5, 0x9e7f), + (0x2fc6, 0x9ea5), + (0x2fc7, 0x9ebb), + (0x2fc8, 0x9ec3), + (0x2fc9, 0x9ecd), + (0x2fca, 0x9ed1), + (0x2fcb, 0x9ef9), + (0x2fcc, 0x9efd), + (0x2fcd, 0x9f0e), + (0x2fce, 0x9f13), + (0x2fcf, 0x9f20), + (0x2fd0, 0x9f3b), + (0x2fd1, 0x9f4a), + (0x2fd2, 0x9f52), + (0x2fd3, 0x9f8d), + (0x2fd4, 0x9f9c), + (0x2fd5, 0x9fa0), + (0x31c6, 0x200cc), + (0x31cf, 0x4e40), + (0x31d0, 0x4e00), + (0x31d1, 0x4e28), + (0x31d2, 0x4e3f), + (0x31d3, 0x4e3f), + (0x31d4, 0x4e36), + (0x31d5, 0x200cd), + (0x31d6, 0x4e5b), + (0x31d7, 0x200ca), + (0x31d8, 0x200ce), + (0x31d9, 0x2010c), + (0x31da, 0x4e85), + (0x31db, 0x21fe8), + (0x31dc, 0x200cb), + (0x31dd, 0x4e40), + (0x31de, 0x200d1), + (0x31df, 0x4e5a), + (0x31e0, 0x4e59), + (0x31e1, 0x2010e), +]; diff --git a/src/io/mod.rs b/src/io/mod.rs index 02c8d262..9ebd469b 100644 --- a/src/io/mod.rs +++ b/src/io/mod.rs @@ -2,6 +2,7 @@ pub mod base64; pub mod bmp; +pub mod cjk; pub mod csv; pub mod deflate; pub mod docx; diff --git a/src/io/pdf/content.rs b/src/io/pdf/content.rs index 0c87bfce..d4ac623c 100644 --- a/src/io/pdf/content.rs +++ b/src/io/pdf/content.rs @@ -3,7 +3,9 @@ //! Tf Ts`, `Td TD Tm T*`), and the text-showing operators (`Tj TJ ' "`), //! into glyphs placed in page space. Form XObjects are run with their //! matrix and resources; inline images are skipped; everything that -//! paints is ignored. +//! paints is ignored. Marked content with `/ActualText` (a ligature, a +//! hyphen, or a glyph drawn for a character the font lacks) reads as that +//! text in place of its glyphs', as viewers copy it. use std::rc::Rc; @@ -14,6 +16,8 @@ use crate::io::pdf::object::{Dictionary, Object}; /// One shown glyph: where it starts and ends on its baseline, in page /// space (points, y up), its size there, and its text in `PageText::text`. +/// A glyph of a vertical font starts at `y` and ends at `end` down the +/// page instead, `x` its column. #[derive(Debug, Clone)] pub struct Glyph { pub x: f64, @@ -23,8 +27,11 @@ pub struct Glyph { pub text: std::ops::Range, pub bold: bool, pub italic: bool, - /// The text runs left to right along the x axis (not rotated). + /// The text runs left to right along the x axis (not rotated), or + /// down the page for a vertical font. pub upright: bool, + /// Set by a vertical font (a `-V` CMap): it advances down the page. + pub vertical: bool, } #[derive(Default)] @@ -74,6 +81,15 @@ pub struct Interpreter<'d, 'a> { fonts: &'d mut FontCache, out: PageText, codes: Vec, + /// Open marked-content sequences, innermost last: the replacement + /// text of those with `/ActualText`. + marked: Vec>, +} + +/// A span's replacement text, and whether it has been shown yet. +struct ActualText { + text: String, + shown: bool, } impl<'d, 'a> Interpreter<'d, 'a> { @@ -83,6 +99,7 @@ impl<'d, 'a> Interpreter<'d, 'a> { fonts, out: PageText::default(), codes: Vec::new(), + marked: Vec::new(), } } @@ -226,6 +243,35 @@ impl<'d, 'a> Interpreter<'d, 'a> { } } b"BI" => skip_inline_image(&mut lexer), + b"BMC" => self.marked.push(None), + b"BDC" => { + let properties = match operands.get(1) { + Some(Object::Dictionary(dictionary)) => Some(dictionary.clone()), + Some(Object::Name(name)) => resources + .and_then(|resources| resources.get(b"Properties")) + .and_then(|object| self.document.resolve(object).ok()) + .and_then(|object| object.as_dictionary().cloned()) + .and_then(|all| all.get(name).cloned()) + .and_then(|object| self.document.resolve(&object).ok()) + .and_then(|object| object.as_dictionary().cloned()), + _ => None, + }; + let actual = properties + .and_then(|properties| properties.get(b"ActualText").cloned()) + .and_then(|object| match object { + Object::String(bytes) => Some(ActualText { + text: text_string(&bytes), + shown: false, + }), + _ => None, + }); + if self.marked.len() < 64 { + self.marked.push(actual); + } + } + b"EMC" => { + self.marked.pop(); + } _ => {} } operands.clear(); @@ -299,11 +345,21 @@ impl<'d, 'a> Interpreter<'d, 'a> { ], &multiply(text_matrix, &state.ctm), ); - let mut advance = code.advance * state.size + state.char_spacing; - if code.word_space { - advance += state.word_spacing; + if font.vertical { + // Down by a full em (the default vertical displacement), + // with the spacings as the specification adds them. + let mut advance = -state.size + state.char_spacing; + if code.word_space { + advance += state.word_spacing; + } + *text_matrix = multiply(&translate(0.0, advance), text_matrix); + } else { + let mut advance = code.advance * state.size + state.char_spacing; + if code.word_space { + advance += state.word_spacing; + } + *text_matrix = multiply(&translate(advance * state.scale, 0.0), text_matrix); } - *text_matrix = multiply(&translate(advance * state.scale, 0.0), text_matrix); let after = multiply( &[ state.size * state.scale, @@ -316,26 +372,54 @@ impl<'d, 'a> Interpreter<'d, 'a> { &multiply(text_matrix, &state.ctm), ); let start = self.out.text.len(); - font.text(code.code, &mut self.out.text); + // Inside `/ActualText` the span's text stands for its glyphs: + // written once, at the first glyph. + if let Some(actual) = self.marked.iter_mut().rev().flatten().next() { + if actual.shown { + continue; + } + actual.shown = true; + self.out.text.push_str(&actual.text); + } else { + font.text(code.code, &mut self.out.text); + } if self.out.text.len() == start { continue; } let size = render[2].hypot(render[3]) * font.size_factor; self.out.glyphs.push(Glyph { x: render[4], - end: after[4], + end: if font.vertical { after[5] } else { after[4] }, y: render[5], size, text: start..self.out.text.len(), bold: font.bold, italic: font.italic, upright: render[1].abs() < 1e-6 * size.max(1.0) && render[0] > 0.0, + vertical: font.vertical, }); } self.codes = codes; } } +/// A PDF text string: UTF-16 after its byte-order mark, UTF-8 after its +/// (PDF 2.0), and otherwise PDFDocEncoding, read here as Latin-1. +fn text_string(bytes: &[u8]) -> String { + if let Some(units) = bytes.strip_prefix(&[0xFE, 0xFF]) { + let units = units + .chunks(2) + .map(|pair| u16::from_be_bytes([pair[0], *pair.get(1).unwrap_or(&0)])); + return char::decode_utf16(units) + .map(|unit| unit.unwrap_or('\u{FFFD}')) + .collect(); + } + if let Some(text) = bytes.strip_prefix(&[0xEF, 0xBB, 0xBF]) { + return String::from_utf8_lossy(text).into_owned(); + } + bytes.iter().map(|byte| char::from(*byte)).collect() +} + /// Moves past an inline image: its dictionary, `ID`, the data, and `EI` /// standing between whitespace. fn skip_inline_image(lexer: &mut Lexer<'_>) { diff --git a/src/io/pdf/font.rs b/src/io/pdf/font.rs index 169ab876..e7d67123 100644 --- a/src/io/pdf/font.rs +++ b/src/io/pdf/font.rs @@ -5,8 +5,13 @@ //! producers write one), else, for a simple font, from its encoding: a //! base encoding (Standard, WinAnsi, MacRoman, or the Symbol and Zapf //! Dingbats built-ins) with `/Differences` glyph names looked up in the -//! glyph list or read as `uniXXXX`/`uXXXX`. A composite (Type0) font -//! without ToUnicode has only glyph ids, which mean nothing as text. +//! glyph list or read as `uniXXXX`/`uXXXX`. A composite (Type0) font is +//! read through its encoding CMap: `Identity` and embedded CMaps give +//! glyph ids (CIDs), which read as text through the font's character +//! collection when it is Adobe-Japan1; the Unicode CMaps (`UniJIS-UCS2-H` +//! and the like, for every CJK collection) give Unicode itself; and the +//! Shift_JIS, EUC-JP, and JIS CMaps give Japanese bytes, decoded. CJK +//! radicals a ToUnicode map gives for ideographs read as the ideographs. use std::collections::HashMap; @@ -17,8 +22,14 @@ use crate::io::pdf::object::{Dictionary, Object}; use crate::io::pdf::tables::{self, Widths}; pub struct Font { - /// Two-byte codes (a Type0 font with an Identity or two-byte CMap). + /// A Type0 font: its codes come from its encoding CMap. composite: bool, + /// How a composite font's codes are split and what they are. + code_map: CodeMap, + /// The composite font's glyphs are in the Adobe-Japan1 collection. + japan1: bool, + /// The composite font writes top to bottom (a `-V` CMap). + pub vertical: bool, to_unicode: Option, /// A simple font's code -> Unicode, 0 where the code means nothing. encoding: [u16; 256], @@ -106,6 +117,12 @@ impl Font { .and_then(|object| document.stream_data(object).ok()) .map(|(_, data)| ToUnicode::parse(&data)); let composite = subtype == "Type0"; + let (code_map, vertical) = if composite { + code_map(document, dictionary) + } else { + (CodeMap::Unknown, false) + }; + let japan1 = composite && is_japan1(document, dictionary, &code_map); // A Type3 font's matrix maps its glyph space to text space: its // first entry scales the widths, its fourth the glyphs' height. let matrix: Vec = if subtype == "Type3" { @@ -145,6 +162,9 @@ impl Font { }; Font { composite, + code_map, + japan1, + vertical, to_unicode, encoding, spelled, @@ -162,10 +182,20 @@ impl Font { out.clear(); let mut at = 0; while at < bytes.len() { - let length = match (&self.to_unicode, self.composite) { - (Some(map), _) if !map.spaces.is_empty() => map.code_length(&bytes[at..]), - (_, true) => 2, - _ => 1, + let rest = &bytes[at..]; + let length = if self.composite { + match &self.code_map { + CodeMap::Unknown => match &self.to_unicode { + Some(map) if !map.spaces.is_empty() => map.code_length(rest), + _ => 2, + }, + known => known.code_length(rest), + } + } else { + match &self.to_unicode { + Some(map) if !map.spaces.is_empty() => map.code_length(rest), + _ => 1, + } }; let length = length.min(bytes.len() - at).max(1); let code = bytes[at..at + length] @@ -182,12 +212,40 @@ impl Font { /// Appends the Unicode text of a code; nothing when it has none. pub fn text(&self, code: u32, out: &mut String) { + let start = out.len(); + self.raw_text(code, out); + // A radical in place of the ideograph it is drawn as. + if out[start..] + .chars() + .any(|ch| crate::io::cjk::unify_radical(ch) != ch) + { + let unified: String = out[start..] + .chars() + .map(crate::io::cjk::unify_radical) + .collect(); + out.truncate(start); + out.push_str(&unified); + } + } + + fn raw_text(&self, code: u32, out: &mut String) { if let Some(map) = &self.to_unicode && map.text(code, out) { return; } - if self.composite || code > 255 { + if self.composite { + if self.code_map.text(code, out) { + return; + } + if self.japan1 + && let Some(cid) = self.code_map.cid(code) + { + crate::io::cjk::japan1(cid, out); + } + return; + } + if code > 255 { return; } let byte = code as u8; @@ -233,14 +291,337 @@ impl Font { ranges, singles, default, - } => singles.get(&code).copied().unwrap_or_else(|| { - ranges - .iter() - .find(|(low, high, _)| (*low..=*high).contains(&code)) - .map_or(*default, |range| range.2) - }), + } => { + // Widths are by CID; an encoding whose CIDs are not known + // here (Shift_JIS, Unicode) is half or full width by text. + let Some(cid) = self.code_map.cid(code).or(match self.code_map { + CodeMap::Unknown => Some(code), + _ => None, + }) else { + let mut text = String::new(); + self.code_map.text(code, &mut text); + let half = text.chars().next().is_some_and(|ch| { + (' '..='~').contains(&ch) || ('\u{FF61}'..='\u{FF9F}').contains(&ch) + }); + return if half { 500.0 } else { *default }; + }; + singles.get(&cid).copied().unwrap_or_else(|| { + ranges + .iter() + .find(|(low, high, _)| (*low..=*high).contains(&cid)) + .map_or(*default, |range| range.2) + }) + } + } + } +} + +/// A composite font's encoding: how its strings split into codes, and +/// what a code is (a CID, or text in some encoding). +enum CodeMap { + /// `Identity-H`/`-V`: two-byte codes that are the CIDs. + Identity, + /// A Unicode CMap (`UniJIS-UCS2-H`, `UniGB-UTF16-H`, ...): codes that + /// are text in one of Unicode's forms. + Unicode(UnicodeForm), + /// The Shift_JIS CMaps (`90ms-RKSJ-H` and the other `RKSJ` ones). + ShiftJis, + /// The EUC-JP CMaps (`EUC-H`, `EUC-V`). + EucJp, + /// The ISO-2022-JP CMaps (`H`, `V`): two-byte JIS X 0208 codes. + Jis, + /// A CMap embedded in the file: its code space and code -> CID, with + /// the predefined CMap it builds on (`usecmap`), if any. + Embedded(Box), + /// Anything else: two-byte codes taken as CIDs only for widths. + Unknown, +} + +#[derive(Clone, Copy, PartialEq, Eq)] +enum UnicodeForm { + Ucs2, + Utf16, + Utf8, + Utf32, +} + +struct EmbeddedCMap { + /// (length in bytes, low, high) + spaces: Vec<(usize, u32, u32)>, + singles: HashMap, + /// (low, high, first CID) + ranges: Vec<(u32, u32, u32)>, + parent: CodeMap, +} + +impl CodeMap { + /// The predefined CMap a name gives, and whether it writes vertically. + fn named(name: &str) -> (CodeMap, bool) { + let vertical = name.ends_with("-V") || name == "V"; + let map = if name.starts_with("Identity-") { + CodeMap::Identity + } else if name.starts_with("Uni") { + if name.contains("UCS2") { + CodeMap::Unicode(UnicodeForm::Ucs2) + } else if name.contains("UTF16") { + CodeMap::Unicode(UnicodeForm::Utf16) + } else if name.contains("UTF8") { + CodeMap::Unicode(UnicodeForm::Utf8) + } else if name.contains("UTF32") { + CodeMap::Unicode(UnicodeForm::Utf32) + } else { + CodeMap::Unknown + } + } else if name.contains("RKSJ") { + CodeMap::ShiftJis + } else if name.starts_with("EUC-") { + CodeMap::EucJp + } else if matches!(name, "H" | "V") { + CodeMap::Jis + } else { + CodeMap::Unknown + }; + (map, vertical) + } + + /// How many bytes the code at the front of `bytes` takes. + fn code_length(&self, bytes: &[u8]) -> usize { + let lead = bytes.first().copied().unwrap_or(0); + match self { + CodeMap::Identity | CodeMap::Jis | CodeMap::Unknown => 2, + CodeMap::Unicode(UnicodeForm::Ucs2) => 2, + CodeMap::Unicode(UnicodeForm::Utf16) => { + if (0xD8..=0xDB).contains(&lead) { + 4 + } else { + 2 + } + } + CodeMap::Unicode(UnicodeForm::Utf8) => match lead { + 0xF0..=0xF7 => 4, + 0xE0..=0xEF => 3, + 0xC0..=0xDF => 2, + _ => 1, + }, + CodeMap::Unicode(UnicodeForm::Utf32) => 4, + CodeMap::ShiftJis => crate::io::cjk::shift_jis_length(lead), + CodeMap::EucJp => crate::io::cjk::euc_jp_length(lead), + CodeMap::Embedded(map) => { + for length in 1..=4 { + if bytes.len() < length { + break; + } + let value = be(&bytes[..length]); + if map + .spaces + .iter() + .any(|(size, low, high)| *size == length && (*low..=*high).contains(&value)) + { + return length; + } + } + if map.spaces.is_empty() { + map.parent.code_length(bytes) + } else { + map.spaces.iter().map(|space| space.0).min().unwrap_or(2) + } + } + } + } + + /// The CID a code selects, when the encoding says. + fn cid(&self, code: u32) -> Option { + match self { + CodeMap::Identity => Some(code), + CodeMap::Embedded(map) => map + .singles + .get(&code) + .copied() + .or_else(|| { + map.ranges + .iter() + .find(|(low, high, _)| (*low..=*high).contains(&code)) + .map(|(low, _, first)| first + (code - low)) + }) + .or_else(|| map.parent.cid(code)), + _ => None, + } + } + + /// Appends the text a code is in an encoding of text; false for an + /// encoding of CIDs or a code that means nothing. + fn text(&self, code: u32, out: &mut String) -> bool { + let pushed = |ch: Option, out: &mut String| match ch { + Some(ch) if ch != '\0' => { + out.push(ch); + true + } + _ => false, + }; + match self { + CodeMap::Unicode(form) => { + let text = match form { + UnicodeForm::Ucs2 => char::from_u32(code).map(String::from), + UnicodeForm::Utf32 => char::from_u32(code).map(String::from), + UnicodeForm::Utf16 => { + if code > 0xFFFF { + let units = [(code >> 16) as u16, code as u16]; + char::decode_utf16(units) + .collect::>() + .ok() + } else { + char::from_u32(code).map(String::from) + } + } + UnicodeForm::Utf8 => { + let bytes = code.to_be_bytes(); + let start = bytes.iter().position(|byte| *byte != 0).unwrap_or(3); + std::str::from_utf8(&bytes[start..]) + .ok() + .map(str::to_string) + } + }; + match text { + Some(text) if !text.is_empty() && text != "\0" => { + out.push_str(&text); + true + } + _ => false, + } + } + CodeMap::ShiftJis => { + let bytes = code_bytes(code); + pushed(crate::io::cjk::shift_jis_char(&bytes).0, out) + } + CodeMap::EucJp => { + let bytes = code_bytes(code); + pushed(crate::io::cjk::euc_jp_char(&bytes).0, out) + } + CodeMap::Jis => pushed(crate::io::cjk::jis_code(code), out), + CodeMap::Embedded(map) => map.parent.text(code, out), + CodeMap::Identity | CodeMap::Unknown => false, + } + } +} + +/// A code's bytes, most significant first, without leading zeros (one +/// byte for a code under 256). +fn code_bytes(code: u32) -> Vec { + let bytes = code.to_be_bytes(); + let start = bytes.iter().position(|byte| *byte != 0).unwrap_or(3); + bytes[start..].to_vec() +} + +/// A composite font's encoding CMap: a name, or an embedded stream. +fn code_map(document: &Document<'_>, dictionary: &Dictionary) -> (CodeMap, bool) { + let Some(encoding) = dictionary + .get(b"Encoding") + .and_then(|object| document.resolve(object).ok()) + else { + return (CodeMap::Identity, false); + }; + if let Some(name) = encoding.as_name() { + return CodeMap::named(&String::from_utf8_lossy(name)); + } + let Some(entry) = dictionary.get(b"Encoding") else { + return (CodeMap::Unknown, false); + }; + let Ok((stream, data)) = document.stream_data(entry) else { + return (CodeMap::Unknown, false); + }; + let mut vertical = stream + .get(b"WMode") + .and_then(Object::as_integer) + .is_some_and(|mode| mode == 1); + let mut parent = CodeMap::Unknown; + if let Some(name) = stream.get(b"UseCMap").and_then(Object::as_name) { + let (named, named_vertical) = CodeMap::named(&String::from_utf8_lossy(name)); + parent = named; + vertical |= named_vertical; + } + let mut map = EmbeddedCMap { + spaces: Vec::new(), + singles: HashMap::new(), + ranges: Vec::new(), + parent: CodeMap::Unknown, + }; + let mut lexer = Lexer::new(&data); + let mut operands: Vec = Vec::new(); + while let Some(token) = lexer.next_token() { + match token { + Token::Operand(object) => operands.push(object), + Token::Operator(b"endcodespacerange") => { + for pair in operands.chunks_exact(2) { + if let (Object::String(low), Object::String(high)) = (&pair[0], &pair[1]) { + map.spaces.push((low.len().max(1), be(low), be(high))); + } + } + operands.clear(); + } + Token::Operator(b"endcidchar") => { + for pair in operands.chunks_exact(2) { + if let (Object::String(code), Some(cid)) = (&pair[0], pair[1].as_integer()) { + map.singles.insert(be(code), cid.max(0) as u32); + } + } + operands.clear(); + } + Token::Operator(b"endcidrange") => { + for triple in operands.chunks_exact(3) { + if let (Object::String(low), Object::String(high), Some(cid)) = + (&triple[0], &triple[1], triple[2].as_integer()) + { + map.ranges.push((be(low), be(high), cid.max(0) as u32)); + } + } + operands.clear(); + } + Token::Operator(b"usecmap") => { + if let Some(Object::Name(name)) = operands.last() { + let (named, named_vertical) = CodeMap::named(&String::from_utf8_lossy(name)); + parent = named; + vertical |= named_vertical; + } + operands.clear(); + } + Token::Operator(b"def") => { + // `/WMode 1 def` in the CMap's own dictionary. + if let [Object::Name(key), Object::Integer(value)] = operands.as_slice() + && key.as_slice() == b"WMode" + { + vertical |= *value == 1; + } + operands.clear(); + } + Token::Operator(_) => operands.clear(), } } + map.parent = parent; + (CodeMap::Embedded(Box::new(map)), vertical) +} + +/// Whether a composite font's glyph ids are Adobe-Japan1's: its CID +/// font says so, or its CMap is one of Japan1's. +fn is_japan1(document: &Document<'_>, dictionary: &Dictionary, code_map: &CodeMap) -> bool { + if matches!(code_map, CodeMap::ShiftJis | CodeMap::EucJp | CodeMap::Jis) { + return true; + } + let ordering = dictionary + .get(b"DescendantFonts") + .and_then(|object| document.resolve(object).ok()) + .and_then(|object| object.as_array().and_then(|items| items.first().cloned())) + .and_then(|object| document.resolve(&object).ok()) + .and_then(|object| object.as_dictionary().cloned()) + .and_then(|descendant| descendant.get(b"CIDSystemInfo").cloned()) + .and_then(|object| document.resolve(&object).ok()) + .and_then(|object| object.as_dictionary().cloned()) + .and_then(|info| info.get(b"Ordering").cloned()) + .and_then(|object| document.resolve(&object).ok()); + match ordering { + Some(Object::String(text)) => text.as_slice() == b"Japan1", + Some(Object::Name(name)) => name.as_slice() == b"Japan1", + _ => false, + } } /// Which core font's metrics a font without `/Widths` takes. diff --git a/src/io/pdf/markdown.rs b/src/io/pdf/markdown.rs index 5cadfdd5..82469765 100644 --- a/src/io/pdf/markdown.rs +++ b/src/io/pdf/markdown.rs @@ -11,7 +11,7 @@ use std::borrow::Cow; use crate::io::markdown::{Event, EventSink, Tag, TagEnd}; use crate::io::pdf::PdfError; -use crate::io::pdf::text::{Block, TextNotes, for_each_page, hyphen_break}; +use crate::io::pdf::text::{Block, TextNotes, for_each_page, hyphen_break, is_cjk_char}; /// Sizes within this many points are one size. const SIZE_TOLERANCE: f64 = 0.5; @@ -247,9 +247,12 @@ fn joined<'a>(lines: impl Iterator) -> String { continue; } let hyphenated = hyphen_break(&out, line); + // Japanese runs on across a line break; other text takes a space. + let wide = out.chars().last().is_some_and(is_cjk_char) + || line.chars().next().is_some_and(is_cjk_char); if hyphenated { out.pop(); - } else { + } else if !wide { out.push(' '); } out.push_str(line); @@ -277,6 +280,7 @@ mod tests { Line { text: text.to_string(), size, + vertical: false, bold, x: 0.0, y: 0.0, diff --git a/src/io/pdf/text.rs b/src/io/pdf/text.rs index 7b5ca023..8ec56a28 100644 --- a/src/io/pdf/text.rs +++ b/src/io/pdf/text.rs @@ -4,6 +4,12 @@ //! order the page draws its text in, which is reading order for the //! producers that matter (word processors, LaTeX, browsers); a page that //! draws its text out of order reads out of order. +//! +//! Japanese written top to bottom reads as columns: a vertical font's +//! glyphs, or Japanese characters set one under another in one column +//! (as the Mac's text system places them), make one line per column, and +//! columns side by side one block, in the order they are drawn (right to +//! left, as they are read). use std::io::Write; @@ -19,6 +25,8 @@ pub struct Line { pub text: String, /// The largest glyph size on the line, in points. pub size: f64, + /// A column of vertical text: `x` is the column, `y` its top. + pub vertical: bool, /// Every glyph on the line is bold. pub bold: bool, pub x: f64, @@ -54,9 +62,28 @@ pub fn blocks(page: &PageText) -> Vec { let mut last: Option<&Glyph> = None; for glyph in &page.glyphs { let text = &page.text[glyph.text.clone()]; + let down = last.is_some_and(|previous| { + let open_vertical = lines.last().is_some_and(|(line, _)| line.vertical); + let open_single = lines + .last() + .is_some_and(|(line, _)| line.text.chars().count() <= 1); + column_follows(previous, glyph, &page.text[previous.text.clone()], text) + && (open_vertical || open_single) + }); + if down { + let (line, all_bold) = lines.last_mut().expect("a line is open"); + line.vertical = true; + line.text.push_str(text); + line.size = line.size.max(glyph.size); + *all_bold &= glyph.bold; + last = Some(glyph); + continue; + } let continues = last.is_some_and(|previous| { let size = previous.size.max(glyph.size); - (previous.y - glyph.y).abs() < SAME_LINE * size + !previous.vertical + && !glyph.vertical + && (previous.y - glyph.y).abs() < SAME_LINE * size && glyph.x > previous.x - SAME_LINE * size }); if continues { @@ -76,6 +103,7 @@ pub fn blocks(page: &PageText) -> Vec { Line { text: text.to_string(), size: glyph.size, + vertical: glyph.vertical, bold: glyph.bold, x: glyph.x, y: glyph.y, @@ -105,6 +133,33 @@ pub fn blocks(page: &PageText) -> Vec { let spacing = common_spacing(&kept); let mut blocks: Vec = Vec::new(); for (index, line) in kept.iter().enumerate() { + if index > 0 && (kept[index - 1].vertical || line.vertical) { + // Columns side by side, the next to the left, at about the + // same top. + let before = &kept[index - 1]; + let size = before.size.max(line.size); + let step = before.x - line.x; + let similar = + (before.size - line.size).abs() <= 0.15 * size && before.bold == line.bold; + let beside = before.vertical + && line.vertical + && similar + && step > 0.0 + && step < 2.5 * size + && (before.y - line.y).abs() < 3.0 * size; + if beside { + blocks + .last_mut() + .expect("a block is open") + .lines + .push(line.clone()); + } else { + blocks.push(Block { + lines: vec![line.clone()], + }); + } + continue; + } let joins = index > 0 && { let above = &kept[index - 1]; let drop = above.y - line.y; @@ -132,6 +187,48 @@ pub fn blocks(page: &PageText) -> Vec { blocks } +/// Whether `glyph` is the next one down the column `previous` stands in: +/// both from a vertical font, or both Japanese (or full width) and set one +/// under the other, about a size apart, in the same column. +fn column_follows(previous: &Glyph, glyph: &Glyph, previous_text: &str, text: &str) -> bool { + let size = previous.size.max(glyph.size); + let same_column = (previous.x - glyph.x).abs() < 0.3 * size; + if previous.vertical && glyph.vertical { + // The next glyph starts about where the last one ended. + return same_column && glyph.y <= previous.y && (glyph.y - previous.end).abs() < 1.5 * size; + } + if previous.vertical != glyph.vertical { + return false; + } + let drop = previous.y - glyph.y; + same_column + && drop > 0.6 * size + && drop < 1.8 * size + && is_cjk_text(previous_text) + && is_cjk_text(text) +} + +/// Text that is Japanese or full width: kana, ideographs, their +/// punctuation, and the full- and half-width forms. +fn is_cjk_text(text: &str) -> bool { + let mut chars = text.chars().filter(|ch| !ch.is_whitespace()).peekable(); + chars.peek().is_some() && chars.all(is_cjk_char) +} + +/// A Japanese or full-width character (one written without spaces +/// between words). +pub fn is_cjk_char(ch: char) -> bool { + matches!(u32::from(ch), + 0x3000..=0x30FF + | 0x3400..=0x4DBF + | 0x4E00..=0x9FFF + | 0xF900..=0xFAFF + | 0xFE10..=0xFE1F + | 0xFE30..=0xFE4F + | 0xFF00..=0xFFEF + | 0x20000..=0x3134F) +} + /// The most common drop from one line to the next among lines of one /// size (to half a point), the smaller on a tie; `None` when no two lines /// follow each other down the page. diff --git a/tests/fixtures/pdf-japanese/actualtext.pdf b/tests/fixtures/pdf-japanese/actualtext.pdf new file mode 100644 index 0000000000000000000000000000000000000000..bf99de02227bbf9b4718a541b90bf98e2fd83c04 GIT binary patch literal 5393 zcmb_gO>f&c5WV|X%q2kg;1wxSUqBGRmL)XXO&i4C?IGBMBGZlvTM{H0X!`4ShIX3| zs>P16LL5lc@NxJ!;*;LR?INGb-}OX-fac-L>Lw$ACMy zx|*1JO@Va%y2CNf`%tZWxK|YZ527@OdI0&NBi(U3(lDLD(BnAXjagU4y!i_E0^@@u zfLQy8cW3(M(3O}FWtunG!=6acG$M{ee>iMCAX*R6sr7r>6!m&^i{UK~4}+aHOij^@70uQ&t$eeCh|Yzpgipr3DkN`k{M*cQafx^BZ`dy0z&j z^LKv~ZBa{XS{~YVXZA#XXvtfA1}OxR@EPtUAoYO|I19>yrr1^O&~zC4x*+JG~X559#_$Z&F#`pF%6jd_)pSVV$-_&9~WSN zsr2zGE!y{{+CB~tX}nw_F@FPwJ=ZW5$M=-~H1&3P1T9oT5y+Y;_LKPv^N}DmtTq#G ziHuoZXXS7xb}RE0t1r*;JPfkH7T$c3VzE=nN@NWp{H^wIDbj_$g4GwuZqi@DM1JbP zgqjNz&yvi6iDE8{5}^x|_*|GUh$AN(DMBtzG|PmGgA2_h8K*Upk7Bc|M3A`o=rd>* zzKavGc~&AC!HL*BD-n;(D>;K_?H02y&fqzmIsEwY9G<0%qt4)YHg|FK89dK(7biS} z=dpaEGk8u%c#i)co|Rzp9Ok}T&q}g+4(5UTyeoAE&&fzWn$2^deYbv8a0btjTR$pd z^Njn3yUnYZ&GYDfs8P1r`}4?ts8NBLIAIjI&pTz(LmB(FX44=2y1t6f%;**GrGR+D)+VKh=dR+D)+ScmR@sC{-l<38`MyVgJ1H?kGE zKc_GHlYK=-%$rYtUt62%6z8Fva$Q#g8dF_UF3kX&s$O>|`w1S$qGD9vNDL)!(`W`n-KF$~?HzQtQzQEv@81bAGbnSjR?V2N%r z&h~oPl#l2?o&1E$qwRpv$99?}4G%v?FAp7=YBook6Qxkq=EpSJrlry7=W_J5Gn)z8 zE)z=bct98gDu4|cf71hpk*3ev5-wY&Z9ySemktg4(ABt|Ua}1g2b5WVMD%%xKIz$SL=BuG^yK2^5c78SHTR6V3%XevlhVx-bvzcVHY1V^hy z2qk{=@#Z~aUrmSO4*Mw_1|DSZpU%w;MJ$_H>{HFQw{7akq|qP+T;pDkA2(+wM^oE_64sV#>=jRNN}w8tcq-( zFOU#19cP$f9vBGfh<)gbZBvca3JA;9iZ(?xyPF#BZ2zv!*fhKcZa*&65xLL4ACh#M z2ala+wcc;y9Nba5$d*Zp;!Kv|)s%@MNNWCeHaji+v-@B&q}=}^ zfw8kgq1ASht}>$n@=FSxAK%eF=d;#Wp zIP(jy5&WZjU6^5JmWW)LTP`aeN!ZyE~PvKQx2_UuP)HAHcBFmZiN= zQU0ycwf=x^$SD9tQ}Nd6&yfxT7QlRE{t?K8)PNA{%(rmkh28KL=ATV4;74%CJR20^ z2y)(%$*~ia9gKWC(~HVX(YL^$TN2{l$OdsJQoVD0CH zD+a9m?8%n0wV%FS_T(oUHb$YcLG34NZW9C6e)6V52CV$#e$!6_R(|rf%*xMDHnpY9 z+Rs7Q-0=pi{q&n#(}0zqoVAp#{cM?2)_!tfDI~hp1}n`T&FR1||JLP=^_8oY<3Z%$ zVOM@2kkXg1g40?T3^| zGhH@W=|&|&oyIP}Ibp)%V=^Fo5}Vkz0%~@>_Yx;`Zii!*I$uT}jX37QxwCLWsYrw_ z^@BKxUPz&ec~e+=%f(_wQ|e@(MBy7EiK3X{<|v|Ik+3MuSml@!qN_3yYR=+}2L1%y zioV91kdiE8=GM&dW1?h9PEXl);4hgnMpY5%C6So2OorKbMj(>K^o@WVA%dMav%sx} z{)~b&p@+$xtzW(nNkaZNiZ`GNUsuRfwUW;1bzwjfr;|q^;af1_0^o-(dEppC@SF(VpK63=I#~U%)%-rW+v%G*3wW!4blPbw9dy{Rnv%}OKDyW z9BQByIW^NHs;&@Kg}aU%22v?9QNW+3!EVSzH%#uTi#pg}nb2yy0)G@Kt;7+V8B$F& zF_dNI;5mSGn}RXLv?2$<-4x&v=vMIPSusU1F*OZt00%%rBt)$W>Vo?rUpwrPx1-j$u9eP+usU(rgs%(x zzZKm$amvPtt6}xAg=1pC2rc+by}-%#rwEH`s%2SMu`Y^KHVl(P5;{(l?)ogEOEYze z(-V;j1(zA*>O{=#(FCh4a7hyS^gBevo;yB0UA47UYiE-ax-5Z&AzbK3PMD_TlLlR@ z&DlZl##B_euEm27eP$jM<~pVqEW`^p#YE5GWV^fO;1Dr?BZsz;qqWh~hr}*M8fn23tSO` z<;>zuA~{EEB5Mp0IQc>=0Pq21i!Ub@K4UN?b%Q^?bJn3&FiQX)D_-r@Y}-)l6!!!d z{TbL>b&#n|LqD02ie~aeP+;oJb4@3<-MilS*N^#wb~|`)97dh|a_HTDu#>AYyD0QK zon}i2pVi&-6N^pQo*G|<`DSoBJ!gGk+N#>2sRUobfm3{UvroVE&C{KSnKwIfz1^FS z13xjI%EtZe&ewTgZ`Pgpj{10BR`2xN$%o)!G&{O<*{A(wvmww(xGvx62Q8~6C=H7h z+F{jgu>+%CDwT^ndunTP@$Rzx_3q);wk=n$PwlW2oZ0aJH=#1Q`t{LY?@CYQ`K?zedWZRjFnnNB|M|;hPrYZmt&`DNW6@UPVYkzi?Bc1^!XvWcU7k;d%KjxxV>0w3VlU9X}3l{JlSqai6ZJUtRm(BRbCEF3M$loBu+E z)rv~SE=A}~ifz8;llOR=-X4D70PP0 z5ytj-X3m-8%h`Q4?2GTJCy1$jdFx$VkT=<`4S8wN70Y@--hHt!ElD^$(B);%R5R;n z=f?p%KkvGnwe;j$_h)3OH&sXCAkeOy23nZLz;%b?-I!TfB=v84V)*NUrbtQTdoXRi zX{I1#nGS12xPc&L5rJcWfUP=YYbo4YKWJO8V|16p8*g4ZSGFyl$xDjX>{hPp_nWf1 zZ-U$YgIR2rMMGX*P3u`%L7dSHFlD#xUy+xYb_#Whs0yI+nLpV)&r~pVM6r71JDXoH<*l zY`kx4I^n`{$0gH}H86xuS%BBBw;Esrp%1GeT7;INK{Tzhn$xFkKyHnyPn(WTY(n6c z+V8+mD!h+hY<__A^u?w_yjEXqp*q0rnxb5q#yzv+^4(B`C#|mS3%S2uZC5m%t4B!b L_s-7pyJ7DSFM)LT literal 0 HcmV?d00001 diff --git a/tests/fixtures/pdf-japanese/identity.txt b/tests/fixtures/pdf-japanese/identity.txt new file mode 100644 index 00000000..3624b1e0 --- /dev/null +++ b/tests/fixtures/pdf-japanese/identity.txt @@ -0,0 +1,3 @@ +日本語の文章です。ひらがな、カタカナ、漢字を含みます。 +東京都渋谷区で「テスト」を行いました(2026年10月)。 +半角カタカナとEnglish textも混ざっています! diff --git a/tests/fixtures/pdf-japanese/make.py b/tests/fixtures/pdf-japanese/make.py new file mode 100644 index 00000000..823c5ac4 --- /dev/null +++ b/tests/fixtures/pdf-japanese/make.py @@ -0,0 +1,171 @@ +#!/usr/bin/env python3 +"""Writes the Japanese PDF fixtures and the text each should read as. + +- unijis.pdf, sjis.pdf, euc.pdf, vertical.pdf: reportlab's Japanese CID + fonts (not embedded, no ToUnicode) through the UniJIS-UCS2-H, + 90ms-RKSJ-H (Shift_JIS), EUC-H, and UniJIS-UCS2-V CMaps. +- identity.pdf: an Identity-H font in Adobe-Japan1 with no ToUnicode, as + the Mac writes Hiragino: its text comes only from the collection. +- columns.pdf: the same font set one glyph at a time down columns, right + to left, as the Mac lays out vertical text. +- radicals.pdf: a ToUnicode map that gives Kangxi radicals for the + ideographs they look like, as Chrome writes some fonts. +- actualtext.pdf: one placeholder glyph drawn for every character, the + real text in /ActualText spans, as LibreOffice writes Japanese when it + has no font with the glyphs. + +No font is embedded. Needs reportlab; run from the repository root after +`python3 scripts/gen-cjk-tables.py` (the Japan1 table is read from it): + + python3 tests/fixtures/pdf-japanese/make.py +""" + +import os +import re + +from reportlab.pdfbase import pdfmetrics +from reportlab.pdfbase.cidfonts import CIDFont, UnicodeCIDFont +from reportlab.pdfgen import canvas + +HERE = os.path.dirname(os.path.abspath(__file__)) +LINES = [ + "日本語の文章です。ひらがな、カタカナ、漢字を含みます。", + "東京都渋谷区で「テスト」を行いました(2026年10月)。", + "半角カタカナとEnglish textも混ざっています!", +] +VERTICAL = [ + "吾輩は猫である。名前はまだ無い。", + "どこで生れたかとんと見当がつかぬ。", +] + + +def out(name): + return os.path.join(HERE, name) + + +def reportlab_fixtures(): + pdfmetrics.registerFont(UnicodeCIDFont("HeiseiMin-W3")) + page = canvas.Canvas(out("unijis.pdf"), invariant=1) + page.setFont("HeiseiMin-W3", 14) + for index, line in enumerate(LINES): + page.drawString(50, 750 - 24 * index, line) + page.save() + for encoding, codec, name in [("90ms-RKSJ-H", "cp932", "sjis.pdf"), ("EUC-H", "euc_jp", "euc.pdf")]: + font = CIDFont("HeiseiKakuGo-W5", encoding) + pdfmetrics.registerFont(font) + page = canvas.Canvas(out(name), invariant=1) + page.setFont(font.fontName, 14) + for index, line in enumerate(LINES): + page.drawString(50, 750 - 24 * index, line.encode(codec).decode("latin-1")) + page.save() + vertical_font = UnicodeCIDFont("HeiseiMin-W3", isVertical=True) + pdfmetrics.registerFont(vertical_font) + vertical_name = vertical_font.fontName + page = canvas.Canvas(out("vertical.pdf"), invariant=1) + page.setFont(vertical_name, 16) + for index, line in enumerate(VERTICAL): + page.drawString(500 - 30 * index, 780, line) + page.save() + + +def japan1_cids(): + """Unicode -> the lowest Adobe-Japan1 CID that reads as it.""" + source = open(os.path.join(HERE, "../../../src/io/cjk/tables.rs"), encoding="utf-8").read() + body = source.split("pub static JAPAN1: [u16;")[1].split("];")[0] + values = [int(value) for value in re.findall(r"\d+", body.split("=", 1)[1])] + cids = {} + for cid, code in enumerate(values): + if code and chr(code) not in cids: + cids[chr(code)] = cid + return cids + + +def write_pdf(name, font_objects, content, to_unicode=None): + """A one-page PDF with the font `F1` from `font_objects` (objects 4 on).""" + objects = [ + "<< /Type /Catalog /Pages 2 0 R >>", + "<< /Type /Pages /Kids [3 0 R] /Count 1 >>", + "<< /Type /Page /Parent 2 0 R /MediaBox [0 0 595 842] /Resources << /Font << /F1 4 0 R >> >> /Contents %d 0 R >>" % (4 + len(font_objects)), + ] + objects.extend(font_objects) + data = content.encode("latin-1") + objects.append("<< /Length %d >>\nstream\n%s\nendstream" % (len(data), content)) + if to_unicode is not None: + objects.append("<< /Length %d >>\nstream\n%s\nendstream" % (len(to_unicode), to_unicode)) + pdf = "%PDF-1.4\n" + offsets = [] + for number, body in enumerate(objects, start=1): + offsets.append(len(pdf.encode("latin-1"))) + pdf += "%d 0 obj\n%s\nendobj\n" % (number, body) + start = len(pdf.encode("latin-1")) + pdf += "xref\n0 %d\n0000000000 65535 f \n" % (len(objects) + 1) + pdf += "".join("%010d 00000 n \n" % offset for offset in offsets) + pdf += "trailer\n<< /Size %d /Root 1 0 R >>\nstartxref\n%d\n%%%%EOF\n" % (len(objects) + 1, start) + open(out(name), "wb").write(pdf.encode("latin-1")) + + +JAPAN1_FONT = [ + "<< /Type /Font /Subtype /Type0 /BaseFont /KozMinPr6N-Regular /Encoding /Identity-H /DescendantFonts [5 0 R] %s>>", + "<< /Type /Font /Subtype /CIDFontType0 /BaseFont /KozMinPr6N-Regular /CIDSystemInfo << /Registry (Adobe) /Ordering (Japan1) /Supplement 6 >> /DW 1000 /W [1 95 500] /FontDescriptor 6 0 R >>", + "<< /Type /FontDescriptor /FontName /KozMinPr6N-Regular /Flags 4 /FontBBox [-100 -200 1100 900] /ItalicAngle 0 /Ascent 880 /Descent -120 /CapHeight 740 /StemV 80 >>", +] + + +def hex_string(cids, text): + return "<" + "".join("%04X" % cids[ch] for ch in text) + ">" + + +def handmade_fixtures(): + cids = japan1_cids() + # Identity-H, no ToUnicode: lines of glyphs, advanced by their widths. + content = ["BT /F1 14 Tf"] + for index, line in enumerate(LINES): + content.append("1 0 0 1 50 %d Tm %s Tj" % (750 - 24 * index, hex_string(cids, line))) + content.append("ET") + write_pdf("identity.pdf", [JAPAN1_FONT[0] % "", JAPAN1_FONT[1], JAPAN1_FONT[2]], "\n".join(content)) + # The same glyphs set one by one down columns, right to left. + content = ["BT /F1 16 Tf"] + for column, line in enumerate(VERTICAL): + for row, ch in enumerate(line): + content.append("1 0 0 1 %d %d Tm %s Tj" % (500 - 30 * column, 780 - 18 * row, hex_string(cids, ch))) + content.append("ET") + write_pdf("columns.pdf", [JAPAN1_FONT[0] % "", JAPAN1_FONT[1], JAPAN1_FONT[2]], "\n".join(content)) + # A ToUnicode map giving the Kangxi radical SUN (U+2F47) for 日. + to_unicode = "\n".join([ + "/CIDInit /ProcSet findresource begin 12 dict begin begincmap", + "/CMapName /Radicals def 1 begincodespacerange <0000> endcodespacerange", + "2 beginbfchar <%04X> <2F47> <%04X> <672C> endbfchar" % (cids["日"], cids["本"]), + "endcmap CMapName currentdict /CMap defineresource pop end end", + ]) + content = "BT /F1 14 Tf 1 0 0 1 50 750 Tm %s Tj ET" % hex_string(cids, "日本") + write_pdf("radicals.pdf", [JAPAN1_FONT[0] % "/ToUnicode 8 0 R ", JAPAN1_FONT[1], JAPAN1_FONT[2]], content, to_unicode) + # The same glyph (mapped to 日) for every character, each in a span + # whose /ActualText is the character itself. + placeholder = "\n".join([ + "/CIDInit /ProcSet findresource begin 12 dict begin begincmap", + "/CMapName /Placeholder def 1 begincodespacerange <0000> endcodespacerange", + "1 beginbfchar <%04X> <65E5> endbfchar" % cids["日"], + "endcmap CMapName currentdict /CMap defineresource pop end end", + ]) + content = ["BT /F1 14 Tf"] + for index, line in enumerate(LINES[:2]): + for column, ch in enumerate(line): + units = "".join("%04X" % unit for unit in [int.from_bytes(pair, "big") for pair in [ch.encode("utf-16-be")[i:i + 2] for i in range(0, len(ch.encode("utf-16-be")), 2)]]) + content.append("/Span << /ActualText >> BDC 1 0 0 1 %d %d Tm <%04X> Tj EMC" % (units, 50 + 14 * column, 750 - 24 * index, cids["日"])) + content.append("ET") + write_pdf("actualtext.pdf", [JAPAN1_FONT[0] % "/ToUnicode 8 0 R ", JAPAN1_FONT[1], JAPAN1_FONT[2]], "\n".join(content), placeholder) + + +def expectations(): + horizontal = "\n".join(LINES) + "\n" + for name in ["unijis", "sjis", "euc", "identity"]: + open(out(name + ".txt"), "w", encoding="utf-8").write(horizontal) + for name in ["vertical", "columns"]: + open(out(name + ".txt"), "w", encoding="utf-8").write("\n".join(VERTICAL) + "\n") + open(out("radicals.txt"), "w", encoding="utf-8").write("日本\n") + open(out("actualtext.txt"), "w", encoding="utf-8").write("\n".join(LINES[:2]) + "\n") + + +reportlab_fixtures() +handmade_fixtures() +expectations() diff --git a/tests/fixtures/pdf-japanese/radicals.pdf b/tests/fixtures/pdf-japanese/radicals.pdf new file mode 100644 index 0000000000000000000000000000000000000000..989cc1a227d7bd3c3a1ab58a4b91b17e2380819d GIT binary patch literal 1410 zcma)6O>g2b5WVMD%%xKIz$Q+U5F~`er^P`X;J zMM6A&<9YLD?2Cudq$R#ao}hrr<%`$tlE2tjiu|Fpa#OC!e~@ccQwYF}dOc6+oPj+5 z=+NN&n5AdMuuHkqmc)r8uY7joFh&8|#PM%cUdTcDo1OyT<4#Oz6k@-bs>_|p zK!}-6N_e;rK@mqp9R4A!w%Dzv_QCo_n^7O5yFL8*ZfRZGoP0q3K-Q{RxhY?73;ke{ zyVgvtcN=NQAM32l3k`9mIl>fn-?}D$r0NXnNNw2@BE%dVq!;B6UBE+8dPav4|D-dV zj(D^GVg>AcUt6`E>Q(7v0pX&yW>1%W6it00|K8-vF!RfAvXWZBG~ZR#Mr~RA#ECb0 zBoPD<;gOyMLHaldkOlML6irdt(g6FhA$a~dl@kZI!JXWqxBjN-WFyx#s_0+?SNaxc zP%Fes@K?vtn4&F9u{PsLkupOv$Y`Sb&Wn5z%6W9_CII5QExy7F+5D!%-BB(|(T@FEn0oj~zS@ zhlI<079fnnlL$U)Hr0hi`*z6|LaX39#>^$~Aa3BSm&}hz zHdrw~3f7^+a)L}G5{&0Up&*DgnJDOXiC9yJ%HM=yQDDBy9r(!Bu}mXY3y?~zv&C;L z_8dyYkG>PQoZ$bjgrZCSq?rj-OWO^zn;6Z!m&fJEeH(AC>YV<~8Y; z^;wV~=tQit$N@O&$2>kFL&7Jqi|tiFrBUrYMKN18{7H~FUxqFVIp*v+T~S}o5wXjr zUKEE=wxH99XlasiIrs+rd0WA#E+M@v5nEBnC>>7;M6!sz5FijDHe$N)oRU9X zFpwtpFuD5n<(kMc^1o2L1691)Ak%dQk3zziV8Y7{08+-Im?lvro#CMT6RVmn1@NH&Jj z%p5!iux%4Cwv<%l0Jxh5Jd%8qsB` z#ze`vNaTWx4RUqD!0E9VYc6tO68r2Mq@=N=Q&!%zl}+17rzm!V7(#|{u^&=DNy(=U z(l%SPgW#R1=y2Ui2p_r#ThSt1A4DeX-Qm@izSbCM= zw&2pg0DGGbGPRgLjb}tPY@P@@%;-`$qfujQ&pO>+CYP(6%q!D}L+fHtp0IXQi&rD% zie?{<*8TmxeCE__+z*!H;iM20GoLEI%qz{|uH zVIJqr+qSyiGg?Al5q-cJyZrNW>*ZZ_Oc{{0fil4MEchU6IsOVMSy=nK3o5kts zT%J$!rw>=_0hbM2AG8>;X^zriA8D{oI($48=i=dmSXf1)1M9l}?$^Wd^)Wp-3EpNScAXpE?|Id`Ka03kH`H$~|8F6i z2)L1ibZ_%tXtA#9WI~>8299?!;y>GD2;FO&0-bzilO-Gb?EkT{iW=Y9pn$J!hVp$r z!`ktSL+UM9n0(?iszewTWJiY1+SX+3PN*)A72URV*Rov=fF(^W{@i0EWOlx^ra%7D y%IAseL1|una|vSd0mAjAD?r+Um~g$qd(ZoWf#qcD(=bkGS7gl;GMSH;HQ_&QX03Su literal 0 HcmV?d00001 diff --git a/tests/fixtures/pdf-japanese/sjis.txt b/tests/fixtures/pdf-japanese/sjis.txt new file mode 100644 index 00000000..3624b1e0 --- /dev/null +++ b/tests/fixtures/pdf-japanese/sjis.txt @@ -0,0 +1,3 @@ +日本語の文章です。ひらがな、カタカナ、漢字を含みます。 +東京都渋谷区で「テスト」を行いました(2026年10月)。 +半角カタカナとEnglish textも混ざっています! diff --git a/tests/fixtures/pdf-japanese/unijis.pdf b/tests/fixtures/pdf-japanese/unijis.pdf new file mode 100644 index 0000000000000000000000000000000000000000..3f13963df88882dc99bde214b8d67c4a8b06300f GIT binary patch literal 3145 zcmai0U0dQx629kGw2q884kq0pUyd>&$P6eWg06~#8cBm0Az_kmcHE2o1AFey{r=W{ zt3#CIp65B^Xu7NG^R4QtE_NHuGT$)@#Xo-k&wp7@&Z9Uz@gCS08Oqp8rO&{@{Aje8 z$uMQ5XfDGfTEru{Rp3l#(Zi3z-d;g#awf3tF|8?>L90TwT9Bbn40Mt+9(svvMo^`F zmDAs38jL)q9fhOF55fu4E`zWZCc!J=n>UkC%9++*JfzQaY|il)d-~u6x>ih)>Ax}+ zBr@m(VfoTvT00n>BD&(AcC~b;V(Kc8mplL&0+6Jj=2e)HkxO{S@heQ78HT|sy2DI_ zKV&ATv~obTZHI9u;~2t!91$}en^xsTn3M>xW(v5&gr(NPCR+k~9152iT!|S1dMcF) za|H*ef?1Xg!-fSiEftA_*R<4n$bc;r-KZToU^wmzm$O`h%UQDIf~1Vr7L<`v1V_=) z(uMgYDVHLyJURslFsF#r8tk-&7vwlC>6^0;nQcHZkttMc&CKB(75WmG#4%(*)Ddd! zkQiy9h;n8y*h_8XVkYAf__^H*GzjwHB{y))C85l`>(Wx$;;6aTtWgqkPq{*!>$$BV zxy(`2nH};9>;Ppc4j^f-#IerY;#^rp0ni!A8hJ$lpG+m{KT`=7R7RHjrFs+xH*5s~ zHz*V85>ifu{hB!18z?_YXci%_sM^W`CRcK#s4i_Qt55pECS5(#VFtLk`4S$*s{B#MKsS2r=NDnnZuQF-^}Z;7W!kd6i#P54PyJ-2y;oM+dmX(8T{B@0 zh!{K_=?7lc5_M2a*W3{{0&*&R2l=I2qjkMlHQG#~C$mwOs3xqY63sN|>c-KiFH?l8 z(frfS`b6^bzBv zo)6!*wiGs)CO_l|FN;N(%;hK;2hxYV^B~1^0x_k9qQu^Oj`xVx^rp!wkc3eVWIcie z=8kq8z;QGJg&z{1A*euI!H+5@7i|X96wV{#wSK+Ta?FOrql8`8e0{vxs9anQho2v!;dQYVJ&h~zx1OAMbAOji;+xwdj2uo=y+DvyJziy^dY|{4TumcBkKGXWsq&prvh| zbk+yoZp`EM`)#Y*>^K+i&&H*#%MVAT_3xj;^PBEfc=2w!*O(=(@g+B|_6MKV@3(fU z<4G_|uGco@U0m|2)~-H#;s@)_;7WwIpYD@`kEi?BZT+VCW419F{S0?EkM=5C)9c#V zAlVG}$KQ%Sr|r+TUpA(r^w58Iu<`kE{nK&F|4=PGbme`2{H1(195g$3u6DFNj|XSl zCm#q%&D;b5p!4+Q;SL(b~VOc(*MfU%oAW#d2KGnOn$en*K7&G!2uD z*$d6WwN@wL3yte|mA;_~%%(RqZu9@+L+8ci{j)50F=^k>gh2m&OEb`#UubFU1ydQT z7j&z^3O9Rvgq9Cw;|G82nfyVRu50>^>sR2gUNNeF&oL|%S03_{zkbM<%ghhZVctCH p3z~Z6QeWv6v|bdYc&@2+Klqmf%BtkOI90Hty;cgv;?Zfd@IRpn9WVd@ literal 0 HcmV?d00001 diff --git a/tests/fixtures/pdf-japanese/unijis.txt b/tests/fixtures/pdf-japanese/unijis.txt new file mode 100644 index 00000000..3624b1e0 --- /dev/null +++ b/tests/fixtures/pdf-japanese/unijis.txt @@ -0,0 +1,3 @@ +日本語の文章です。ひらがな、カタカナ、漢字を含みます。 +東京都渋谷区で「テスト」を行いました(2026年10月)。 +半角カタカナとEnglish textも混ざっています! diff --git a/tests/fixtures/pdf-japanese/vertical.pdf b/tests/fixtures/pdf-japanese/vertical.pdf new file mode 100644 index 0000000000000000000000000000000000000000..1b27c5039323c2491083ebb2543323205deef8bc GIT binary patch literal 2986 zcmai0+gjU35Wd$_EF~l+)JVIsPJz1kfP*3{1`L1nj{qy%<|FVvpC24*d_StJ0%QVd8kb#2@lfir{ zLgE6z6hm&Yfi^mfQ zw9GDId&gYZS|PgTpLxA-r{Y*DkYyf#3;{?|P_q(dWaJ8-ar_F$VzzCwisds0;rEyW zDy@7_JfGWE`PyN2$C{dyHG|-5gbKF%K+vV zq(X|gis%$1z?>pdYp~NAUXbIoq;J9AW1bDgM5a)&b+p3;D)c2ViKEAWs4vvoCo$4O z5f#i}@D|$0MJ*E$_=VjHGzjuxnHxA3kdQVX1hiDPIBIT{HA-UPDOad-tFYB0mpO`B z+aa&O4p0{20Fw4f9Bb_s=gKMyfX+zPE-DK6XqBjctr9G#44wOhdK3q@Jp}=`DHG}v zQci`pN*wKNlpiHjN60IxwsgScN`VyBrRVDUq%UmJ)pLAigNr-M@JL3x?Fz#B2aqao=aeG@~ zgK2Uv2Y6Y`<7_4e(I}Eb*t>{wOeYX?S|~~y&SrRzn5}SKcAjIfZB|n&faE8LxF4?Y8eUB_1X8!k7TP#Ri&AWjxOBaHnXj8yNaB zoEopgOw`^_yFVX3dkB*1?NRL{nQh+Qyl)*o|CAhD+M{UGZ$Dh!HZNY9>CxW#&dy#v zec?L?oBfTnR{FHFy}z*$9M97q2k{^+J&&i)%0FbA*WpjmyXwJ%`Qg<@aQ5+W8V*RR@loAUg_%}?Xb z&4-;A{X_St(JxoG5AJVX)<5swj-u=OLoFFxi<8o?(?6?t7%gI2Jl?*fa%5O6Fm%z- zU*g|bn9I0_x!7fuj3Lq8Z+;ILJ(tKaA78Cz>F PathBuf { + PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("tests/fixtures/pdf-japanese") +} + +fn lines(text: &str) -> Vec { + text.lines() + .map(str::trim) + .filter(|line| !line.is_empty() && *line != "\x0c") + .map(|line| line.trim_matches('\x0c').to_string()) + .filter(|line| !line.is_empty()) + .collect() +} + +#[test] +fn every_japanese_pdf_reads_as_written() { + let mut paths: Vec = fs::read_dir(dir()) + .expect("fixture dir") + .map(|entry| entry.expect("entry").path()) + .filter(|path| path.extension().is_some_and(|extension| extension == "pdf")) + .collect(); + paths.sort(); + assert_eq!(paths.len(), 8, "the eight fixtures make.py writes"); + for path in paths { + let bytes = fs::read(&path).expect("read the PDF"); + let mut out = Vec::new(); + write_pdf_text(&bytes, None, &mut out).expect("reads"); + let text = String::from_utf8(out).expect("UTF-8"); + let expected = fs::read_to_string(path.with_extension("txt")).expect("text beside the PDF"); + assert_eq!(lines(&text), lines(&expected), "{}", path.display()); + } +} From 5a06ff3cddf6d9739683bc3253462536c167c667 Mon Sep 17 00:00:00 2001 From: Chimi6 <43803253+Chimi6@users.noreply.github.com> Date: Fri, 30 Oct 2026 14:40:14 -0600 Subject: [PATCH 2/2] chore: size budget for the Japanese tables --- DOCS/CHANGELOG.md | 4 ++++ size-budget | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/DOCS/CHANGELOG.md b/DOCS/CHANGELOG.md index f1c54dcb..18880745 100644 --- a/DOCS/CHANGELOG.md +++ b/DOCS/CHANGELOG.md @@ -13,6 +13,10 @@ section under a version heading. - Marked content with `/ActualText` reads as that text, as viewers copy it: LibreOffice's PDFs of Japanese without a Japanese font read as one repeated character before. - Japanese lines that wrap within a paragraph join without a space when a PDF becomes Markdown, Word, HTML, or another document. +### Changed + +- The Japanese tables (Adobe-Japan1 CIDs, JIS X 0208, radical equivalents) add 100,768 bytes to the binary on CI's Linux build (5,696,960) and 97,509 to the WebAssembly module (3,048,980); the binary's size budget rises from 5.62 to 5.78 MB. + ## [1.0.0] - 2026-10-21 ### Changed diff --git a/size-budget b/size-budget index 95f63afb..8248fba2 100644 --- a/size-budget +++ b/size-budget @@ -1 +1 @@ -5620000 +5780000