aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoreunhhu <[email protected]>2026-09-28 11:43:16 +0100
committereunhhu <[email protected]>2026-09-28 11:43:16 +0100
commit482d3c93255277f5251008638bc59bfab0eb4b9e (patch)
tree5e230bdcf6c04f50c7a98dfe50f403b502add1e3
parent8ba0615b0fe832a15eb695ccd661674b6946995c (diff)
downloadvega-482d3c93255277f5251008638bc59bfab0eb4b9e.tar.gz
vega-482d3c93255277f5251008638bc59bfab0eb4b9e.zip
Normalize text to NFD and NFC, passing all of Unicode's normalization tests
-rw-r--r--Makefile2
-rw-r--r--docs/design/004-text.md9
-rw-r--r--text/normalize.c72
-rw-r--r--text/test-text.c79
-rw-r--r--text/text.h11
-rw-r--r--text/unicode-data.c4125
-rw-r--r--text/unicode.py88
7 files changed, 4383 insertions, 3 deletions
diff --git a/Makefile b/Makefile
index f96fb29..29bbc27 100644
--- a/Makefile
+++ b/Makefile
@@ -49,7 +49,7 @@ $(BUILD)/vega-symbols: symbols/symbols-tool.c $(SYMBOLS) symbols/symbols.h symbo
$(CC) $(CPPFLAGS) $(CFLAGS) $(FREETYPE_CFLAGS) symbols/symbols-tool.c $(SYMBOLS) $(LDFLAGS) \
$(FREETYPE_LIBS) $(GL_LIBS) -lm $(LDLIBS) -o $@
-TEXT = text/bidi.c text/unicode-data.c
+TEXT = text/bidi.c text/normalize.c text/unicode-data.c
$(BUILD)/test-text: text/test-text.c $(TEXT) text/text.h | $(BUILD)
$(CC) $(CPPFLAGS) $(CFLAGS) -Itext text/test-text.c $(TEXT) $(LDFLAGS) $(LDLIBS) -o $@
diff --git a/docs/design/004-text.md b/docs/design/004-text.md
index 703967b..f423221 100644
--- a/docs/design/004-text.md
+++ b/docs/design/004-text.md
@@ -40,3 +40,12 @@ U+3008·3009의 정준 동치, 바뀐 괄호 뒤의 결합 부호), 중립(N1–
`BidiCharacterTest.txt`의 91,707 경우(코드 포인트, 괄호 포함)에서 수준과 보이는 순서가 하나도 틀리지 않는다. Pi 5에서 전체가
0.74초다. 처음 짠 것은 148 경우가 틀렸다. 앞선 격리 실행 열의 암시적 수준(I1–I2)이 바꾼 수준으로 다음 열의 sos를 정했기
때문이다(sos와 eos는 명시적 수준으로 정해야 한다).
+
+## 정규화
+
+[text/normalize.c](../../text/normalize.c)는 NFD와 NFC다. 코드 포인트를 끝까지 분해하고(표에 다 풀어 둔 정준 분해 2,061개,
+한글 음절은 산술로), 결합 등급으로 부호를 안정 정렬한 뒤, 마지막 기저 문자와 막히지 않은 문자를 합친다(원시 합성 941쌍,
+합성 제외 목록 반영, 한글 L+V와 LV+T는 산술로). 코드 포인트 하나는 많아야 넷으로 풀린다(UCD 전체를 확인했다).
+
+`NormalizationTest.txt`의 19,074줄(줄마다 NFC와 NFD 16가지 대조)과, 그 1부에 없는 코드 포인트 1,095,035개가 제 자신의
+NFC이자 NFD라는 것을 모두 지킨다. 적합성 시험 셋을 합쳐 Pi 5에서 0.9초다.
diff --git a/text/normalize.c b/text/normalize.c
new file mode 100644
index 0000000..302a4de
--- /dev/null
+++ b/text/normalize.c
@@ -0,0 +1,72 @@
+/* Normalization forms D and C (UAX #15, Unicode 15.1): text/text.h. */
+#include "text.h"
+#include <string.h>
+
+/* Hangul syllables are made of jamo arithmetically (Unicode section 3.12). */
+enum { SBASE = 0xAC00, LBASE = 0x1100, VBASE = 0x1161, TBASE = 0x11A7, LCOUNT = 19, VCOUNT = 21, TCOUNT = 28,
+ NCOUNT = VCOUNT * TCOUNT, SCOUNT = LCOUNT * NCOUNT };
+
+size_t vega_nfd(const uint32_t *in, size_t count, uint32_t *out) {
+ size_t n = 0;
+ for (size_t i = 0; i < count; ++i) {
+ uint32_t code = in[i];
+ if (code >= SBASE && code < SBASE + SCOUNT) {
+ uint32_t s = code - SBASE;
+ out[n++] = LBASE + s / NCOUNT;
+ out[n++] = VBASE + s % NCOUNT / TCOUNT;
+ if (s % TCOUNT) out[n++] = TBASE + s % TCOUNT;
+ continue;
+ }
+ const uint32_t *parts;
+ size_t length = vega_decomposition(code, &parts);
+ if (length) {
+ memcpy(out + n, parts, length * sizeof(*out));
+ n += length;
+ } else
+ out[n++] = code;
+ }
+ /* Canonical order: each mark moves before the marks of a higher class
+ * ahead of it, up to a starter (a stable sort of every run of marks). */
+ for (size_t i = 1; i < n; ++i) {
+ uint8_t class = vega_combining_class(out[i]);
+ if (!class) continue;
+ for (size_t j = i; j && vega_combining_class(out[j - 1]) > class; --j) {
+ uint32_t swap = out[j - 1];
+ out[j - 1] = out[j];
+ out[j] = swap;
+ }
+ }
+ return n;
+}
+
+static uint32_t compose(uint32_t first, uint32_t second) {
+ if (first >= LBASE && first < LBASE + LCOUNT && second >= VBASE && second < VBASE + VCOUNT)
+ return SBASE + ((first - LBASE) * VCOUNT + (second - VBASE)) * TCOUNT;
+ if (first >= SBASE && first < SBASE + SCOUNT && (first - SBASE) % TCOUNT == 0 && second > TBASE &&
+ second < TBASE + TCOUNT)
+ return first + (second - TBASE);
+ return vega_composition(first, second);
+}
+
+size_t vega_nfc(const uint32_t *in, size_t count, uint32_t *out) {
+ size_t n = vega_nfd(in, count, out);
+ if (!n) return 0;
+ /* Each character after the last starter composes with it unless a
+ * character between them blocks it (one of the same or a higher class,
+ * or a starter). */
+ size_t starter = 0, written = 1;
+ int last = vega_combining_class(out[0]) ? 256 : 0;
+ for (size_t i = 1; i < n; ++i) {
+ uint32_t code = out[i];
+ int class = vega_combining_class(code);
+ uint32_t composite = compose(out[starter], code);
+ if (composite && (last < class || last == 0)) {
+ out[starter] = composite;
+ continue;
+ }
+ if (!class) starter = written;
+ last = class;
+ out[written++] = code;
+ }
+ return written;
+}
diff --git a/text/test-text.c b/text/test-text.c
index e8077b5..a367330 100644
--- a/text/test-text.c
+++ b/text/test-text.c
@@ -127,13 +127,88 @@ static size_t bidi_character_test(const char *path) {
return cases;
}
+/* NormalizationTest.txt (through bzcat): for each line c1;c2;c3;c4;c5,
+ * NFC(c1) = NFC(c2) = NFC(c3) = c2, NFC(c4) = NFC(c5) = c4, NFD(c1) =
+ * NFD(c2) = NFD(c3) = c3 and NFD(c4) = NFD(c5) = c5; and every code point
+ * part 1 does not list is its own NFC and NFD. */
+static size_t parse_codes(const char *text, uint32_t *codes) {
+ size_t n = 0;
+ for (char *end; *text && n < MAX; text = end) {
+ unsigned long code = strtoul(text, &end, 16);
+ if (end == text) break;
+ codes[n++] = (uint32_t)code;
+ }
+ return n;
+}
+
+static bool normalizes(size_t (*form)(const uint32_t *, size_t, uint32_t *), const uint32_t *in, size_t count,
+ const uint32_t *want, size_t want_count) {
+ uint32_t out[4 * MAX];
+ size_t n = form(in, count, out);
+ return n == want_count && !memcmp(out, want, n * sizeof(*out));
+}
+
+static size_t normalization_test(const char *path, size_t *invariant) {
+ char command[1200];
+ snprintf(command, sizeof(command), "bzcat '%s'", path);
+ FILE *in = popen(command, "r");
+ if (!in) { perror(path); exit(2); }
+ static bool listed[0x110000];
+ char line[4096];
+ size_t cases = 0, number = 0;
+ int part = -1;
+ while (fgets(line, sizeof(line), in)) {
+ ++number;
+ if (line[0] == '#' || line[0] == '\n') continue;
+ if (!strncmp(line, "@Part", 5)) { part = atoi(line + 5); continue; }
+ uint32_t c[5][MAX];
+ size_t n[5];
+ char *field = line;
+ for (unsigned f = 0; f < 5; ++f) {
+ char *end = strchr(field, ';');
+ if (!end) break;
+ *end = 0;
+ n[f] = parse_codes(field, c[f]);
+ field = end + 1;
+ }
+ if (part == 1 && n[0] == 1) listed[c[0][0]] = true;
+ ++cases;
+ bool ok = true;
+ for (unsigned f = 0; f < 3; ++f) {
+ ok = ok && normalizes(vega_nfc, c[f], n[f], c[1], n[1]);
+ ok = ok && normalizes(vega_nfd, c[f], n[f], c[2], n[2]);
+ }
+ for (unsigned f = 3; f < 5; ++f) {
+ ok = ok && normalizes(vega_nfc, c[f], n[f], c[3], n[3]);
+ ok = ok && normalizes(vega_nfd, c[f], n[f], c[4], n[4]);
+ }
+ if (!ok) fail(path, number, "a form differs");
+ }
+ pclose(in);
+ *invariant = 0;
+ for (uint32_t code = 0; code < 0x110000; ++code) {
+ if (listed[code] || (code >= 0xD800 && code <= 0xDFFF)) continue;
+ ++*invariant;
+ if (!normalizes(vega_nfc, &code, 1, &code, 1) || !normalizes(vega_nfd, &code, 1, &code, 1)) {
+ char what[64];
+ snprintf(what, sizeof(what), "U+%04X is not its own normal form", code);
+ fail(path, 0, what);
+ }
+ }
+ return cases;
+}
+
int main(int argc, char **argv) {
const char *ucd = argc > 1 ? argv[1] : "/usr/share/unicode";
char path[1024];
snprintf(path, sizeof(path), "%s/BidiTest.txt", ucd);
size_t bidi = bidi_test(path);
snprintf(path, sizeof(path), "%s/BidiCharacterTest.txt", ucd);
- size_t characters = bidi_character_test(path);
- printf("{\"bidi_test_cases\":%zu,\"bidi_character_test_cases\":%zu,\"failures\":%u}\n", bidi, characters, failures);
+ size_t characters = bidi_character_test(path), invariant;
+ snprintf(path, sizeof(path), "%s/NormalizationTest.txt.bz2", ucd);
+ size_t normalized = normalization_test(path, &invariant);
+ printf("{\"bidi_test_cases\":%zu,\"bidi_character_test_cases\":%zu,\"normalization_test_cases\":%zu,"
+ "\"normalization_invariant_code_points\":%zu,\"failures\":%u}\n", bidi, characters, normalized, invariant,
+ failures);
return failures ? 1 : 0;
}
diff --git a/text/text.h b/text/text.h
index e4e50ac..40503c0 100644
--- a/text/text.h
+++ b/text/text.h
@@ -21,6 +21,17 @@ int vega_bracket(uint32_t code, uint32_t *pair);
/* The character that mirrors code (Bidi_Mirroring_Glyph), or 0. */
uint32_t vega_mirror(uint32_t code);
+/* Canonical_Combining_Class; a code point's full canonical decomposition
+ * (0 when it has none; Hangul syllables are left to vega_nfd); the primary
+ * composite of two code points, or 0. */
+uint8_t vega_combining_class(uint32_t code);
+size_t vega_decomposition(uint32_t code, const uint32_t **out);
+uint32_t vega_composition(uint32_t first, uint32_t second);
+/* Normalization forms D and C (UAX #15): out has room for 4 * count code
+ * points (the most one decomposes into); returns how many it holds. */
+size_t vega_nfd(const uint32_t *in, size_t count, uint32_t *out);
+size_t vega_nfc(const uint32_t *in, size_t count, uint32_t *out);
+
/* The embedding levels of one paragraph by the Unicode Bidirectional
* Algorithm (UAX #9, rules P2 to I2), then L1 as for one line: classes are
* its characters' Bidi_Class; codes, when given, are the characters, so
diff --git a/text/unicode-data.c b/text/unicode-data.c
index 00a2319..78795eb 100644
--- a/text/unicode-data.c
+++ b/text/unicode-data.c
@@ -1773,3 +1773,4128 @@ uint32_t vega_mirror(uint32_t code) {
long row = find(&mirrors[0][0], sizeof(mirrors) / sizeof(*mirrors), 2, code);
return row < 0 ? 0 : mirrors[row][1];
}
+
+/* Canonical_Combining_Class (25600 bytes). */
+static const uint16_t ccc_blocks[4352] = {
+ 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
+ 14, 0, 0, 15, 0, 0, 0, 16, 17, 18, 19, 20, 21, 22, 0, 0,
+ 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 25, 0, 0,
+ 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 27, 0, 28, 29, 30, 31, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 33, 0,
+ 0, 34, 35, 36, 0, 0, 0, 0, 0, 0, 37, 0, 0, 38, 39, 40,
+ 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 0, 52, 53, 0, 54,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 56, 0, 0, 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, 58, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 59, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 61, 56, 62, 0, 63, 0, 0, 0, 64, 65, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+};
+static const uint8_t ccc_values[16896] = {
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,232,220,220,220,220,232,216,220,220,220,220,
+ 220,202,202,220,220,220,220,202,202,220,220,220,220,220,220,220,220,220,220,220,1,1,1,1,1,220,220,220,220,230,230,230,
+ 230,230,230,230,230,240,230,220,220,220,230,230,230,220,220,0,230,230,230,220,220,220,220,230,232,220,220,230,233,234,234,233,
+ 234,234,233,230,230,230,230,230,230,230,230,230,230,230,230,230,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,230,230,230,230,230,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,220,230,230,230,230,220,230,230,230,222,220,230,230,230,230,
+ 230,230,220,220,220,220,220,220,230,230,220,230,230,222,228,230,10,11,12,13,14,15,16,17,18,19,19,20,21,22,0,23,
+ 0,24,25,0,230,220,0,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,230,230,230,230,230,230,230,230,30,31,32,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,27,28,29,30,31,32,33,34,230,230,220,220,230,230,230,230,230,220,230,230,220,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,230,230,230,230,230,230,230,0,0,230,
+ 230,230,230,220,230,0,0,230,230,0,220,230,230,220,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,230,220,230,230,220,230,230,220,220,220,230,220,220,230,220,230,
+ 230,230,220,230,220,230,220,230,220,230,230,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,230,230,230,230,230,230,230,220,230,0,0,0,0,0,0,0,0,0,220,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,230,230,230,230,0,230,230,230,230,230,
+ 230,230,230,230,0,230,230,230,0,230,230,230,230,230,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,220,220,220,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,230,220,220,220,230,230,230,230,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,230,230,230,230,230,220,220,220,220,220,230,230,230,230,230,230,230,230,230,230,230,230,
+ 230,230,0,220,230,230,220,230,230,220,230,230,230,220,220,220,27,28,29,230,230,230,220,230,230,220,220,230,230,230,230,230,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,230,220,230,230,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,230,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,84,91,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,9,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,9,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,107,107,107,107,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,118,118,9,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,122,122,122,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,220,220,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,220,0,220,0,216,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,129,130,0,132,0,0,0,0,0,130,130,130,130,0,0,
+ 130,0,230,230,9,0,230,230,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,220,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,9,9,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,220,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,230,230,230,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,9,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,230,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,228,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,222,230,220,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,230,220,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,230,230,230,230,230,230,230,230,0,0,220,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,230,230,230,230,230,220,220,220,220,220,220,230,230,220,0,220,
+ 220,230,230,220,220,230,230,230,230,230,220,230,230,230,230,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,230,220,230,230,230,230,230,230,230,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,9,9,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,230,230,230,0,1,220,220,220,220,220,230,230,220,220,220,220,
+ 230,0,1,1,1,1,1,1,1,0,0,0,0,220,0,0,0,0,0,0,230,0,0,0,230,230,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 230,230,220,230,230,230,230,230,230,230,220,230,230,234,214,220,202,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,
+ 230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,232,228,228,220,218,230,233,220,230,220,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,230,230,1,1,230,230,230,230,1,1,1,230,230,0,0,0,
+ 0,230,0,0,0,1,1,230,220,230,1,1,220,220,220,220,230,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,230,230,230,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,218,228,232,222,224,224,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,8,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,230,0,0,0,0,230,230,230,230,230,230,230,230,230,230,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,230,230,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,230,230,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,220,220,220,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,
+ 9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,230,0,230,230,220,0,0,230,230,0,0,0,0,0,230,230,
+ 0,230,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 230,230,230,230,230,230,230,220,220,220,220,220,220,220,230,230,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,220,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 220,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,230,230,230,230,230,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,220,0,230,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,230,1,220,0,0,0,0,9,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,230,220,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,230,230,230,230,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,230,230,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,220,220,220,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,220,220,230,230,230,220,230,220,220,220,220,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,230,220,230,220,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,7,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 230,230,230,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,9,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 9,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,7,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,7,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,230,230,230,230,230,230,230,0,0,0,230,230,230,230,230,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,9,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,230,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,9,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,
+ 7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,7,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,7,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,9,0,
+ 0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,7,0,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,230,230,230,230,230,230,230,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,216,216,1,1,1,0,0,0,226,216,216,216,216,216,0,0,0,0,0,0,0,0,220,220,220,220,220,
+ 220,220,220,0,0,230,230,230,230,230,220,220,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,230,230,230,230,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,230,230,230,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 230,230,230,230,230,230,230,0,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,0,0,230,230,230,230,230,
+ 230,230,0,230,230,0,230,230,230,230,230,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,230,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,230,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,230,230,230,230,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,232,232,220,230,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,220,220,220,220,220,220,220,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,230,230,230,230,230,230,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+};
+
+uint8_t vega_combining_class(uint32_t code) {
+ return code > 0x10FFFF ? 0 : ccc_values[ccc_blocks[code >> 8] * 256u + (code & 255)];
+}
+
+/* Full canonical decompositions (Hangul syllables aside): code, start in the pool, length. */
+static const uint32_t decompositions[2061][3] = {
+ {0x00C0, 0, 2},
+ {0x00C1, 2, 2},
+ {0x00C2, 4, 2},
+ {0x00C3, 6, 2},
+ {0x00C4, 8, 2},
+ {0x00C5, 10, 2},
+ {0x00C7, 12, 2},
+ {0x00C8, 14, 2},
+ {0x00C9, 16, 2},
+ {0x00CA, 18, 2},
+ {0x00CB, 20, 2},
+ {0x00CC, 22, 2},
+ {0x00CD, 24, 2},
+ {0x00CE, 26, 2},
+ {0x00CF, 28, 2},
+ {0x00D1, 30, 2},
+ {0x00D2, 32, 2},
+ {0x00D3, 34, 2},
+ {0x00D4, 36, 2},
+ {0x00D5, 38, 2},
+ {0x00D6, 40, 2},
+ {0x00D9, 42, 2},
+ {0x00DA, 44, 2},
+ {0x00DB, 46, 2},
+ {0x00DC, 48, 2},
+ {0x00DD, 50, 2},
+ {0x00E0, 52, 2},
+ {0x00E1, 54, 2},
+ {0x00E2, 56, 2},
+ {0x00E3, 58, 2},
+ {0x00E4, 60, 2},
+ {0x00E5, 62, 2},
+ {0x00E7, 64, 2},
+ {0x00E8, 66, 2},
+ {0x00E9, 68, 2},
+ {0x00EA, 70, 2},
+ {0x00EB, 72, 2},
+ {0x00EC, 74, 2},
+ {0x00ED, 76, 2},
+ {0x00EE, 78, 2},
+ {0x00EF, 80, 2},
+ {0x00F1, 82, 2},
+ {0x00F2, 84, 2},
+ {0x00F3, 86, 2},
+ {0x00F4, 88, 2},
+ {0x00F5, 90, 2},
+ {0x00F6, 92, 2},
+ {0x00F9, 94, 2},
+ {0x00FA, 96, 2},
+ {0x00FB, 98, 2},
+ {0x00FC, 100, 2},
+ {0x00FD, 102, 2},
+ {0x00FF, 104, 2},
+ {0x0100, 106, 2},
+ {0x0101, 108, 2},
+ {0x0102, 110, 2},
+ {0x0103, 112, 2},
+ {0x0104, 114, 2},
+ {0x0105, 116, 2},
+ {0x0106, 118, 2},
+ {0x0107, 120, 2},
+ {0x0108, 122, 2},
+ {0x0109, 124, 2},
+ {0x010A, 126, 2},
+ {0x010B, 128, 2},
+ {0x010C, 130, 2},
+ {0x010D, 132, 2},
+ {0x010E, 134, 2},
+ {0x010F, 136, 2},
+ {0x0112, 138, 2},
+ {0x0113, 140, 2},
+ {0x0114, 142, 2},
+ {0x0115, 144, 2},
+ {0x0116, 146, 2},
+ {0x0117, 148, 2},
+ {0x0118, 150, 2},
+ {0x0119, 152, 2},
+ {0x011A, 154, 2},
+ {0x011B, 156, 2},
+ {0x011C, 158, 2},
+ {0x011D, 160, 2},
+ {0x011E, 162, 2},
+ {0x011F, 164, 2},
+ {0x0120, 166, 2},
+ {0x0121, 168, 2},
+ {0x0122, 170, 2},
+ {0x0123, 172, 2},
+ {0x0124, 174, 2},
+ {0x0125, 176, 2},
+ {0x0128, 178, 2},
+ {0x0129, 180, 2},
+ {0x012A, 182, 2},
+ {0x012B, 184, 2},
+ {0x012C, 186, 2},
+ {0x012D, 188, 2},
+ {0x012E, 190, 2},
+ {0x012F, 192, 2},
+ {0x0130, 194, 2},
+ {0x0134, 196, 2},
+ {0x0135, 198, 2},
+ {0x0136, 200, 2},
+ {0x0137, 202, 2},
+ {0x0139, 204, 2},
+ {0x013A, 206, 2},
+ {0x013B, 208, 2},
+ {0x013C, 210, 2},
+ {0x013D, 212, 2},
+ {0x013E, 214, 2},
+ {0x0143, 216, 2},
+ {0x0144, 218, 2},
+ {0x0145, 220, 2},
+ {0x0146, 222, 2},
+ {0x0147, 224, 2},
+ {0x0148, 226, 2},
+ {0x014C, 228, 2},
+ {0x014D, 230, 2},
+ {0x014E, 232, 2},
+ {0x014F, 234, 2},
+ {0x0150, 236, 2},
+ {0x0151, 238, 2},
+ {0x0154, 240, 2},
+ {0x0155, 242, 2},
+ {0x0156, 244, 2},
+ {0x0157, 246, 2},
+ {0x0158, 248, 2},
+ {0x0159, 250, 2},
+ {0x015A, 252, 2},
+ {0x015B, 254, 2},
+ {0x015C, 256, 2},
+ {0x015D, 258, 2},
+ {0x015E, 260, 2},
+ {0x015F, 262, 2},
+ {0x0160, 264, 2},
+ {0x0161, 266, 2},
+ {0x0162, 268, 2},
+ {0x0163, 270, 2},
+ {0x0164, 272, 2},
+ {0x0165, 274, 2},
+ {0x0168, 276, 2},
+ {0x0169, 278, 2},
+ {0x016A, 280, 2},
+ {0x016B, 282, 2},
+ {0x016C, 284, 2},
+ {0x016D, 286, 2},
+ {0x016E, 288, 2},
+ {0x016F, 290, 2},
+ {0x0170, 292, 2},
+ {0x0171, 294, 2},
+ {0x0172, 296, 2},
+ {0x0173, 298, 2},
+ {0x0174, 300, 2},
+ {0x0175, 302, 2},
+ {0x0176, 304, 2},
+ {0x0177, 306, 2},
+ {0x0178, 308, 2},
+ {0x0179, 310, 2},
+ {0x017A, 312, 2},
+ {0x017B, 314, 2},
+ {0x017C, 316, 2},
+ {0x017D, 318, 2},
+ {0x017E, 320, 2},
+ {0x01A0, 322, 2},
+ {0x01A1, 324, 2},
+ {0x01AF, 326, 2},
+ {0x01B0, 328, 2},
+ {0x01CD, 330, 2},
+ {0x01CE, 332, 2},
+ {0x01CF, 334, 2},
+ {0x01D0, 336, 2},
+ {0x01D1, 338, 2},
+ {0x01D2, 340, 2},
+ {0x01D3, 342, 2},
+ {0x01D4, 344, 2},
+ {0x01D5, 346, 3},
+ {0x01D6, 349, 3},
+ {0x01D7, 352, 3},
+ {0x01D8, 355, 3},
+ {0x01D9, 358, 3},
+ {0x01DA, 361, 3},
+ {0x01DB, 364, 3},
+ {0x01DC, 367, 3},
+ {0x01DE, 370, 3},
+ {0x01DF, 373, 3},
+ {0x01E0, 376, 3},
+ {0x01E1, 379, 3},
+ {0x01E2, 382, 2},
+ {0x01E3, 384, 2},
+ {0x01E6, 386, 2},
+ {0x01E7, 388, 2},
+ {0x01E8, 390, 2},
+ {0x01E9, 392, 2},
+ {0x01EA, 394, 2},
+ {0x01EB, 396, 2},
+ {0x01EC, 398, 3},
+ {0x01ED, 401, 3},
+ {0x01EE, 404, 2},
+ {0x01EF, 406, 2},
+ {0x01F0, 408, 2},
+ {0x01F4, 410, 2},
+ {0x01F5, 412, 2},
+ {0x01F8, 414, 2},
+ {0x01F9, 416, 2},
+ {0x01FA, 418, 3},
+ {0x01FB, 421, 3},
+ {0x01FC, 424, 2},
+ {0x01FD, 426, 2},
+ {0x01FE, 428, 2},
+ {0x01FF, 430, 2},
+ {0x0200, 432, 2},
+ {0x0201, 434, 2},
+ {0x0202, 436, 2},
+ {0x0203, 438, 2},
+ {0x0204, 440, 2},
+ {0x0205, 442, 2},
+ {0x0206, 444, 2},
+ {0x0207, 446, 2},
+ {0x0208, 448, 2},
+ {0x0209, 450, 2},
+ {0x020A, 452, 2},
+ {0x020B, 454, 2},
+ {0x020C, 456, 2},
+ {0x020D, 458, 2},
+ {0x020E, 460, 2},
+ {0x020F, 462, 2},
+ {0x0210, 464, 2},
+ {0x0211, 466, 2},
+ {0x0212, 468, 2},
+ {0x0213, 470, 2},
+ {0x0214, 472, 2},
+ {0x0215, 474, 2},
+ {0x0216, 476, 2},
+ {0x0217, 478, 2},
+ {0x0218, 480, 2},
+ {0x0219, 482, 2},
+ {0x021A, 484, 2},
+ {0x021B, 486, 2},
+ {0x021E, 488, 2},
+ {0x021F, 490, 2},
+ {0x0226, 492, 2},
+ {0x0227, 494, 2},
+ {0x0228, 496, 2},
+ {0x0229, 498, 2},
+ {0x022A, 500, 3},
+ {0x022B, 503, 3},
+ {0x022C, 506, 3},
+ {0x022D, 509, 3},
+ {0x022E, 512, 2},
+ {0x022F, 514, 2},
+ {0x0230, 516, 3},
+ {0x0231, 519, 3},
+ {0x0232, 522, 2},
+ {0x0233, 524, 2},
+ {0x0340, 526, 1},
+ {0x0341, 527, 1},
+ {0x0343, 528, 1},
+ {0x0344, 529, 2},
+ {0x0374, 531, 1},
+ {0x037E, 532, 1},
+ {0x0385, 533, 2},
+ {0x0386, 535, 2},
+ {0x0387, 537, 1},
+ {0x0388, 538, 2},
+ {0x0389, 540, 2},
+ {0x038A, 542, 2},
+ {0x038C, 544, 2},
+ {0x038E, 546, 2},
+ {0x038F, 548, 2},
+ {0x0390, 550, 3},
+ {0x03AA, 553, 2},
+ {0x03AB, 555, 2},
+ {0x03AC, 557, 2},
+ {0x03AD, 559, 2},
+ {0x03AE, 561, 2},
+ {0x03AF, 563, 2},
+ {0x03B0, 565, 3},
+ {0x03CA, 568, 2},
+ {0x03CB, 570, 2},
+ {0x03CC, 572, 2},
+ {0x03CD, 574, 2},
+ {0x03CE, 576, 2},
+ {0x03D3, 578, 2},
+ {0x03D4, 580, 2},
+ {0x0400, 582, 2},
+ {0x0401, 584, 2},
+ {0x0403, 586, 2},
+ {0x0407, 588, 2},
+ {0x040C, 590, 2},
+ {0x040D, 592, 2},
+ {0x040E, 594, 2},
+ {0x0419, 596, 2},
+ {0x0439, 598, 2},
+ {0x0450, 600, 2},
+ {0x0451, 602, 2},
+ {0x0453, 604, 2},
+ {0x0457, 606, 2},
+ {0x045C, 608, 2},
+ {0x045D, 610, 2},
+ {0x045E, 612, 2},
+ {0x0476, 614, 2},
+ {0x0477, 616, 2},
+ {0x04C1, 618, 2},
+ {0x04C2, 620, 2},
+ {0x04D0, 622, 2},
+ {0x04D1, 624, 2},
+ {0x04D2, 626, 2},
+ {0x04D3, 628, 2},
+ {0x04D6, 630, 2},
+ {0x04D7, 632, 2},
+ {0x04DA, 634, 2},
+ {0x04DB, 636, 2},
+ {0x04DC, 638, 2},
+ {0x04DD, 640, 2},
+ {0x04DE, 642, 2},
+ {0x04DF, 644, 2},
+ {0x04E2, 646, 2},
+ {0x04E3, 648, 2},
+ {0x04E4, 650, 2},
+ {0x04E5, 652, 2},
+ {0x04E6, 654, 2},
+ {0x04E7, 656, 2},
+ {0x04EA, 658, 2},
+ {0x04EB, 660, 2},
+ {0x04EC, 662, 2},
+ {0x04ED, 664, 2},
+ {0x04EE, 666, 2},
+ {0x04EF, 668, 2},
+ {0x04F0, 670, 2},
+ {0x04F1, 672, 2},
+ {0x04F2, 674, 2},
+ {0x04F3, 676, 2},
+ {0x04F4, 678, 2},
+ {0x04F5, 680, 2},
+ {0x04F8, 682, 2},
+ {0x04F9, 684, 2},
+ {0x0622, 686, 2},
+ {0x0623, 688, 2},
+ {0x0624, 690, 2},
+ {0x0625, 692, 2},
+ {0x0626, 694, 2},
+ {0x06C0, 696, 2},
+ {0x06C2, 698, 2},
+ {0x06D3, 700, 2},
+ {0x0929, 702, 2},
+ {0x0931, 704, 2},
+ {0x0934, 706, 2},
+ {0x0958, 708, 2},
+ {0x0959, 710, 2},
+ {0x095A, 712, 2},
+ {0x095B, 714, 2},
+ {0x095C, 716, 2},
+ {0x095D, 718, 2},
+ {0x095E, 720, 2},
+ {0x095F, 722, 2},
+ {0x09CB, 724, 2},
+ {0x09CC, 726, 2},
+ {0x09DC, 728, 2},
+ {0x09DD, 730, 2},
+ {0x09DF, 732, 2},
+ {0x0A33, 734, 2},
+ {0x0A36, 736, 2},
+ {0x0A59, 738, 2},
+ {0x0A5A, 740, 2},
+ {0x0A5B, 742, 2},
+ {0x0A5E, 744, 2},
+ {0x0B48, 746, 2},
+ {0x0B4B, 748, 2},
+ {0x0B4C, 750, 2},
+ {0x0B5C, 752, 2},
+ {0x0B5D, 754, 2},
+ {0x0B94, 756, 2},
+ {0x0BCA, 758, 2},
+ {0x0BCB, 760, 2},
+ {0x0BCC, 762, 2},
+ {0x0C48, 764, 2},
+ {0x0CC0, 766, 2},
+ {0x0CC7, 768, 2},
+ {0x0CC8, 770, 2},
+ {0x0CCA, 772, 2},
+ {0x0CCB, 774, 3},
+ {0x0D4A, 777, 2},
+ {0x0D4B, 779, 2},
+ {0x0D4C, 781, 2},
+ {0x0DDA, 783, 2},
+ {0x0DDC, 785, 2},
+ {0x0DDD, 787, 3},
+ {0x0DDE, 790, 2},
+ {0x0F43, 792, 2},
+ {0x0F4D, 794, 2},
+ {0x0F52, 796, 2},
+ {0x0F57, 798, 2},
+ {0x0F5C, 800, 2},
+ {0x0F69, 802, 2},
+ {0x0F73, 804, 2},
+ {0x0F75, 806, 2},
+ {0x0F76, 808, 2},
+ {0x0F78, 810, 2},
+ {0x0F81, 812, 2},
+ {0x0F93, 814, 2},
+ {0x0F9D, 816, 2},
+ {0x0FA2, 818, 2},
+ {0x0FA7, 820, 2},
+ {0x0FAC, 822, 2},
+ {0x0FB9, 824, 2},
+ {0x1026, 826, 2},
+ {0x1B06, 828, 2},
+ {0x1B08, 830, 2},
+ {0x1B0A, 832, 2},
+ {0x1B0C, 834, 2},
+ {0x1B0E, 836, 2},
+ {0x1B12, 838, 2},
+ {0x1B3B, 840, 2},
+ {0x1B3D, 842, 2},
+ {0x1B40, 844, 2},
+ {0x1B41, 846, 2},
+ {0x1B43, 848, 2},
+ {0x1E00, 850, 2},
+ {0x1E01, 852, 2},
+ {0x1E02, 854, 2},
+ {0x1E03, 856, 2},
+ {0x1E04, 858, 2},
+ {0x1E05, 860, 2},
+ {0x1E06, 862, 2},
+ {0x1E07, 864, 2},
+ {0x1E08, 866, 3},
+ {0x1E09, 869, 3},
+ {0x1E0A, 872, 2},
+ {0x1E0B, 874, 2},
+ {0x1E0C, 876, 2},
+ {0x1E0D, 878, 2},
+ {0x1E0E, 880, 2},
+ {0x1E0F, 882, 2},
+ {0x1E10, 884, 2},
+ {0x1E11, 886, 2},
+ {0x1E12, 888, 2},
+ {0x1E13, 890, 2},
+ {0x1E14, 892, 3},
+ {0x1E15, 895, 3},
+ {0x1E16, 898, 3},
+ {0x1E17, 901, 3},
+ {0x1E18, 904, 2},
+ {0x1E19, 906, 2},
+ {0x1E1A, 908, 2},
+ {0x1E1B, 910, 2},
+ {0x1E1C, 912, 3},
+ {0x1E1D, 915, 3},
+ {0x1E1E, 918, 2},
+ {0x1E1F, 920, 2},
+ {0x1E20, 922, 2},
+ {0x1E21, 924, 2},
+ {0x1E22, 926, 2},
+ {0x1E23, 928, 2},
+ {0x1E24, 930, 2},
+ {0x1E25, 932, 2},
+ {0x1E26, 934, 2},
+ {0x1E27, 936, 2},
+ {0x1E28, 938, 2},
+ {0x1E29, 940, 2},
+ {0x1E2A, 942, 2},
+ {0x1E2B, 944, 2},
+ {0x1E2C, 946, 2},
+ {0x1E2D, 948, 2},
+ {0x1E2E, 950, 3},
+ {0x1E2F, 953, 3},
+ {0x1E30, 956, 2},
+ {0x1E31, 958, 2},
+ {0x1E32, 960, 2},
+ {0x1E33, 962, 2},
+ {0x1E34, 964, 2},
+ {0x1E35, 966, 2},
+ {0x1E36, 968, 2},
+ {0x1E37, 970, 2},
+ {0x1E38, 972, 3},
+ {0x1E39, 975, 3},
+ {0x1E3A, 978, 2},
+ {0x1E3B, 980, 2},
+ {0x1E3C, 982, 2},
+ {0x1E3D, 984, 2},
+ {0x1E3E, 986, 2},
+ {0x1E3F, 988, 2},
+ {0x1E40, 990, 2},
+ {0x1E41, 992, 2},
+ {0x1E42, 994, 2},
+ {0x1E43, 996, 2},
+ {0x1E44, 998, 2},
+ {0x1E45, 1000, 2},
+ {0x1E46, 1002, 2},
+ {0x1E47, 1004, 2},
+ {0x1E48, 1006, 2},
+ {0x1E49, 1008, 2},
+ {0x1E4A, 1010, 2},
+ {0x1E4B, 1012, 2},
+ {0x1E4C, 1014, 3},
+ {0x1E4D, 1017, 3},
+ {0x1E4E, 1020, 3},
+ {0x1E4F, 1023, 3},
+ {0x1E50, 1026, 3},
+ {0x1E51, 1029, 3},
+ {0x1E52, 1032, 3},
+ {0x1E53, 1035, 3},
+ {0x1E54, 1038, 2},
+ {0x1E55, 1040, 2},
+ {0x1E56, 1042, 2},
+ {0x1E57, 1044, 2},
+ {0x1E58, 1046, 2},
+ {0x1E59, 1048, 2},
+ {0x1E5A, 1050, 2},
+ {0x1E5B, 1052, 2},
+ {0x1E5C, 1054, 3},
+ {0x1E5D, 1057, 3},
+ {0x1E5E, 1060, 2},
+ {0x1E5F, 1062, 2},
+ {0x1E60, 1064, 2},
+ {0x1E61, 1066, 2},
+ {0x1E62, 1068, 2},
+ {0x1E63, 1070, 2},
+ {0x1E64, 1072, 3},
+ {0x1E65, 1075, 3},
+ {0x1E66, 1078, 3},
+ {0x1E67, 1081, 3},
+ {0x1E68, 1084, 3},
+ {0x1E69, 1087, 3},
+ {0x1E6A, 1090, 2},
+ {0x1E6B, 1092, 2},
+ {0x1E6C, 1094, 2},
+ {0x1E6D, 1096, 2},
+ {0x1E6E, 1098, 2},
+ {0x1E6F, 1100, 2},
+ {0x1E70, 1102, 2},
+ {0x1E71, 1104, 2},
+ {0x1E72, 1106, 2},
+ {0x1E73, 1108, 2},
+ {0x1E74, 1110, 2},
+ {0x1E75, 1112, 2},
+ {0x1E76, 1114, 2},
+ {0x1E77, 1116, 2},
+ {0x1E78, 1118, 3},
+ {0x1E79, 1121, 3},
+ {0x1E7A, 1124, 3},
+ {0x1E7B, 1127, 3},
+ {0x1E7C, 1130, 2},
+ {0x1E7D, 1132, 2},
+ {0x1E7E, 1134, 2},
+ {0x1E7F, 1136, 2},
+ {0x1E80, 1138, 2},
+ {0x1E81, 1140, 2},
+ {0x1E82, 1142, 2},
+ {0x1E83, 1144, 2},
+ {0x1E84, 1146, 2},
+ {0x1E85, 1148, 2},
+ {0x1E86, 1150, 2},
+ {0x1E87, 1152, 2},
+ {0x1E88, 1154, 2},
+ {0x1E89, 1156, 2},
+ {0x1E8A, 1158, 2},
+ {0x1E8B, 1160, 2},
+ {0x1E8C, 1162, 2},
+ {0x1E8D, 1164, 2},
+ {0x1E8E, 1166, 2},
+ {0x1E8F, 1168, 2},
+ {0x1E90, 1170, 2},
+ {0x1E91, 1172, 2},
+ {0x1E92, 1174, 2},
+ {0x1E93, 1176, 2},
+ {0x1E94, 1178, 2},
+ {0x1E95, 1180, 2},
+ {0x1E96, 1182, 2},
+ {0x1E97, 1184, 2},
+ {0x1E98, 1186, 2},
+ {0x1E99, 1188, 2},
+ {0x1E9B, 1190, 2},
+ {0x1EA0, 1192, 2},
+ {0x1EA1, 1194, 2},
+ {0x1EA2, 1196, 2},
+ {0x1EA3, 1198, 2},
+ {0x1EA4, 1200, 3},
+ {0x1EA5, 1203, 3},
+ {0x1EA6, 1206, 3},
+ {0x1EA7, 1209, 3},
+ {0x1EA8, 1212, 3},
+ {0x1EA9, 1215, 3},
+ {0x1EAA, 1218, 3},
+ {0x1EAB, 1221, 3},
+ {0x1EAC, 1224, 3},
+ {0x1EAD, 1227, 3},
+ {0x1EAE, 1230, 3},
+ {0x1EAF, 1233, 3},
+ {0x1EB0, 1236, 3},
+ {0x1EB1, 1239, 3},
+ {0x1EB2, 1242, 3},
+ {0x1EB3, 1245, 3},
+ {0x1EB4, 1248, 3},
+ {0x1EB5, 1251, 3},
+ {0x1EB6, 1254, 3},
+ {0x1EB7, 1257, 3},
+ {0x1EB8, 1260, 2},
+ {0x1EB9, 1262, 2},
+ {0x1EBA, 1264, 2},
+ {0x1EBB, 1266, 2},
+ {0x1EBC, 1268, 2},
+ {0x1EBD, 1270, 2},
+ {0x1EBE, 1272, 3},
+ {0x1EBF, 1275, 3},
+ {0x1EC0, 1278, 3},
+ {0x1EC1, 1281, 3},
+ {0x1EC2, 1284, 3},
+ {0x1EC3, 1287, 3},
+ {0x1EC4, 1290, 3},
+ {0x1EC5, 1293, 3},
+ {0x1EC6, 1296, 3},
+ {0x1EC7, 1299, 3},
+ {0x1EC8, 1302, 2},
+ {0x1EC9, 1304, 2},
+ {0x1ECA, 1306, 2},
+ {0x1ECB, 1308, 2},
+ {0x1ECC, 1310, 2},
+ {0x1ECD, 1312, 2},
+ {0x1ECE, 1314, 2},
+ {0x1ECF, 1316, 2},
+ {0x1ED0, 1318, 3},
+ {0x1ED1, 1321, 3},
+ {0x1ED2, 1324, 3},
+ {0x1ED3, 1327, 3},
+ {0x1ED4, 1330, 3},
+ {0x1ED5, 1333, 3},
+ {0x1ED6, 1336, 3},
+ {0x1ED7, 1339, 3},
+ {0x1ED8, 1342, 3},
+ {0x1ED9, 1345, 3},
+ {0x1EDA, 1348, 3},
+ {0x1EDB, 1351, 3},
+ {0x1EDC, 1354, 3},
+ {0x1EDD, 1357, 3},
+ {0x1EDE, 1360, 3},
+ {0x1EDF, 1363, 3},
+ {0x1EE0, 1366, 3},
+ {0x1EE1, 1369, 3},
+ {0x1EE2, 1372, 3},
+ {0x1EE3, 1375, 3},
+ {0x1EE4, 1378, 2},
+ {0x1EE5, 1380, 2},
+ {0x1EE6, 1382, 2},
+ {0x1EE7, 1384, 2},
+ {0x1EE8, 1386, 3},
+ {0x1EE9, 1389, 3},
+ {0x1EEA, 1392, 3},
+ {0x1EEB, 1395, 3},
+ {0x1EEC, 1398, 3},
+ {0x1EED, 1401, 3},
+ {0x1EEE, 1404, 3},
+ {0x1EEF, 1407, 3},
+ {0x1EF0, 1410, 3},
+ {0x1EF1, 1413, 3},
+ {0x1EF2, 1416, 2},
+ {0x1EF3, 1418, 2},
+ {0x1EF4, 1420, 2},
+ {0x1EF5, 1422, 2},
+ {0x1EF6, 1424, 2},
+ {0x1EF7, 1426, 2},
+ {0x1EF8, 1428, 2},
+ {0x1EF9, 1430, 2},
+ {0x1F00, 1432, 2},
+ {0x1F01, 1434, 2},
+ {0x1F02, 1436, 3},
+ {0x1F03, 1439, 3},
+ {0x1F04, 1442, 3},
+ {0x1F05, 1445, 3},
+ {0x1F06, 1448, 3},
+ {0x1F07, 1451, 3},
+ {0x1F08, 1454, 2},
+ {0x1F09, 1456, 2},
+ {0x1F0A, 1458, 3},
+ {0x1F0B, 1461, 3},
+ {0x1F0C, 1464, 3},
+ {0x1F0D, 1467, 3},
+ {0x1F0E, 1470, 3},
+ {0x1F0F, 1473, 3},
+ {0x1F10, 1476, 2},
+ {0x1F11, 1478, 2},
+ {0x1F12, 1480, 3},
+ {0x1F13, 1483, 3},
+ {0x1F14, 1486, 3},
+ {0x1F15, 1489, 3},
+ {0x1F18, 1492, 2},
+ {0x1F19, 1494, 2},
+ {0x1F1A, 1496, 3},
+ {0x1F1B, 1499, 3},
+ {0x1F1C, 1502, 3},
+ {0x1F1D, 1505, 3},
+ {0x1F20, 1508, 2},
+ {0x1F21, 1510, 2},
+ {0x1F22, 1512, 3},
+ {0x1F23, 1515, 3},
+ {0x1F24, 1518, 3},
+ {0x1F25, 1521, 3},
+ {0x1F26, 1524, 3},
+ {0x1F27, 1527, 3},
+ {0x1F28, 1530, 2},
+ {0x1F29, 1532, 2},
+ {0x1F2A, 1534, 3},
+ {0x1F2B, 1537, 3},
+ {0x1F2C, 1540, 3},
+ {0x1F2D, 1543, 3},
+ {0x1F2E, 1546, 3},
+ {0x1F2F, 1549, 3},
+ {0x1F30, 1552, 2},
+ {0x1F31, 1554, 2},
+ {0x1F32, 1556, 3},
+ {0x1F33, 1559, 3},
+ {0x1F34, 1562, 3},
+ {0x1F35, 1565, 3},
+ {0x1F36, 1568, 3},
+ {0x1F37, 1571, 3},
+ {0x1F38, 1574, 2},
+ {0x1F39, 1576, 2},
+ {0x1F3A, 1578, 3},
+ {0x1F3B, 1581, 3},
+ {0x1F3C, 1584, 3},
+ {0x1F3D, 1587, 3},
+ {0x1F3E, 1590, 3},
+ {0x1F3F, 1593, 3},
+ {0x1F40, 1596, 2},
+ {0x1F41, 1598, 2},
+ {0x1F42, 1600, 3},
+ {0x1F43, 1603, 3},
+ {0x1F44, 1606, 3},
+ {0x1F45, 1609, 3},
+ {0x1F48, 1612, 2},
+ {0x1F49, 1614, 2},
+ {0x1F4A, 1616, 3},
+ {0x1F4B, 1619, 3},
+ {0x1F4C, 1622, 3},
+ {0x1F4D, 1625, 3},
+ {0x1F50, 1628, 2},
+ {0x1F51, 1630, 2},
+ {0x1F52, 1632, 3},
+ {0x1F53, 1635, 3},
+ {0x1F54, 1638, 3},
+ {0x1F55, 1641, 3},
+ {0x1F56, 1644, 3},
+ {0x1F57, 1647, 3},
+ {0x1F59, 1650, 2},
+ {0x1F5B, 1652, 3},
+ {0x1F5D, 1655, 3},
+ {0x1F5F, 1658, 3},
+ {0x1F60, 1661, 2},
+ {0x1F61, 1663, 2},
+ {0x1F62, 1665, 3},
+ {0x1F63, 1668, 3},
+ {0x1F64, 1671, 3},
+ {0x1F65, 1674, 3},
+ {0x1F66, 1677, 3},
+ {0x1F67, 1680, 3},
+ {0x1F68, 1683, 2},
+ {0x1F69, 1685, 2},
+ {0x1F6A, 1687, 3},
+ {0x1F6B, 1690, 3},
+ {0x1F6C, 1693, 3},
+ {0x1F6D, 1696, 3},
+ {0x1F6E, 1699, 3},
+ {0x1F6F, 1702, 3},
+ {0x1F70, 1705, 2},
+ {0x1F71, 1707, 2},
+ {0x1F72, 1709, 2},
+ {0x1F73, 1711, 2},
+ {0x1F74, 1713, 2},
+ {0x1F75, 1715, 2},
+ {0x1F76, 1717, 2},
+ {0x1F77, 1719, 2},
+ {0x1F78, 1721, 2},
+ {0x1F79, 1723, 2},
+ {0x1F7A, 1725, 2},
+ {0x1F7B, 1727, 2},
+ {0x1F7C, 1729, 2},
+ {0x1F7D, 1731, 2},
+ {0x1F80, 1733, 3},
+ {0x1F81, 1736, 3},
+ {0x1F82, 1739, 4},
+ {0x1F83, 1743, 4},
+ {0x1F84, 1747, 4},
+ {0x1F85, 1751, 4},
+ {0x1F86, 1755, 4},
+ {0x1F87, 1759, 4},
+ {0x1F88, 1763, 3},
+ {0x1F89, 1766, 3},
+ {0x1F8A, 1769, 4},
+ {0x1F8B, 1773, 4},
+ {0x1F8C, 1777, 4},
+ {0x1F8D, 1781, 4},
+ {0x1F8E, 1785, 4},
+ {0x1F8F, 1789, 4},
+ {0x1F90, 1793, 3},
+ {0x1F91, 1796, 3},
+ {0x1F92, 1799, 4},
+ {0x1F93, 1803, 4},
+ {0x1F94, 1807, 4},
+ {0x1F95, 1811, 4},
+ {0x1F96, 1815, 4},
+ {0x1F97, 1819, 4},
+ {0x1F98, 1823, 3},
+ {0x1F99, 1826, 3},
+ {0x1F9A, 1829, 4},
+ {0x1F9B, 1833, 4},
+ {0x1F9C, 1837, 4},
+ {0x1F9D, 1841, 4},
+ {0x1F9E, 1845, 4},
+ {0x1F9F, 1849, 4},
+ {0x1FA0, 1853, 3},
+ {0x1FA1, 1856, 3},
+ {0x1FA2, 1859, 4},
+ {0x1FA3, 1863, 4},
+ {0x1FA4, 1867, 4},
+ {0x1FA5, 1871, 4},
+ {0x1FA6, 1875, 4},
+ {0x1FA7, 1879, 4},
+ {0x1FA8, 1883, 3},
+ {0x1FA9, 1886, 3},
+ {0x1FAA, 1889, 4},
+ {0x1FAB, 1893, 4},
+ {0x1FAC, 1897, 4},
+ {0x1FAD, 1901, 4},
+ {0x1FAE, 1905, 4},
+ {0x1FAF, 1909, 4},
+ {0x1FB0, 1913, 2},
+ {0x1FB1, 1915, 2},
+ {0x1FB2, 1917, 3},
+ {0x1FB3, 1920, 2},
+ {0x1FB4, 1922, 3},
+ {0x1FB6, 1925, 2},
+ {0x1FB7, 1927, 3},
+ {0x1FB8, 1930, 2},
+ {0x1FB9, 1932, 2},
+ {0x1FBA, 1934, 2},
+ {0x1FBB, 1936, 2},
+ {0x1FBC, 1938, 2},
+ {0x1FBE, 1940, 1},
+ {0x1FC1, 1941, 2},
+ {0x1FC2, 1943, 3},
+ {0x1FC3, 1946, 2},
+ {0x1FC4, 1948, 3},
+ {0x1FC6, 1951, 2},
+ {0x1FC7, 1953, 3},
+ {0x1FC8, 1956, 2},
+ {0x1FC9, 1958, 2},
+ {0x1FCA, 1960, 2},
+ {0x1FCB, 1962, 2},
+ {0x1FCC, 1964, 2},
+ {0x1FCD, 1966, 2},
+ {0x1FCE, 1968, 2},
+ {0x1FCF, 1970, 2},
+ {0x1FD0, 1972, 2},
+ {0x1FD1, 1974, 2},
+ {0x1FD2, 1976, 3},
+ {0x1FD3, 1979, 3},
+ {0x1FD6, 1982, 2},
+ {0x1FD7, 1984, 3},
+ {0x1FD8, 1987, 2},
+ {0x1FD9, 1989, 2},
+ {0x1FDA, 1991, 2},
+ {0x1FDB, 1993, 2},
+ {0x1FDD, 1995, 2},
+ {0x1FDE, 1997, 2},
+ {0x1FDF, 1999, 2},
+ {0x1FE0, 2001, 2},
+ {0x1FE1, 2003, 2},
+ {0x1FE2, 2005, 3},
+ {0x1FE3, 2008, 3},
+ {0x1FE4, 2011, 2},
+ {0x1FE5, 2013, 2},
+ {0x1FE6, 2015, 2},
+ {0x1FE7, 2017, 3},
+ {0x1FE8, 2020, 2},
+ {0x1FE9, 2022, 2},
+ {0x1FEA, 2024, 2},
+ {0x1FEB, 2026, 2},
+ {0x1FEC, 2028, 2},
+ {0x1FED, 2030, 2},
+ {0x1FEE, 2032, 2},
+ {0x1FEF, 2034, 1},
+ {0x1FF2, 2035, 3},
+ {0x1FF3, 2038, 2},
+ {0x1FF4, 2040, 3},
+ {0x1FF6, 2043, 2},
+ {0x1FF7, 2045, 3},
+ {0x1FF8, 2048, 2},
+ {0x1FF9, 2050, 2},
+ {0x1FFA, 2052, 2},
+ {0x1FFB, 2054, 2},
+ {0x1FFC, 2056, 2},
+ {0x1FFD, 2058, 1},
+ {0x2000, 2059, 1},
+ {0x2001, 2060, 1},
+ {0x2126, 2061, 1},
+ {0x212A, 2062, 1},
+ {0x212B, 2063, 2},
+ {0x219A, 2065, 2},
+ {0x219B, 2067, 2},
+ {0x21AE, 2069, 2},
+ {0x21CD, 2071, 2},
+ {0x21CE, 2073, 2},
+ {0x21CF, 2075, 2},
+ {0x2204, 2077, 2},
+ {0x2209, 2079, 2},
+ {0x220C, 2081, 2},
+ {0x2224, 2083, 2},
+ {0x2226, 2085, 2},
+ {0x2241, 2087, 2},
+ {0x2244, 2089, 2},
+ {0x2247, 2091, 2},
+ {0x2249, 2093, 2},
+ {0x2260, 2095, 2},
+ {0x2262, 2097, 2},
+ {0x226D, 2099, 2},
+ {0x226E, 2101, 2},
+ {0x226F, 2103, 2},
+ {0x2270, 2105, 2},
+ {0x2271, 2107, 2},
+ {0x2274, 2109, 2},
+ {0x2275, 2111, 2},
+ {0x2278, 2113, 2},
+ {0x2279, 2115, 2},
+ {0x2280, 2117, 2},
+ {0x2281, 2119, 2},
+ {0x2284, 2121, 2},
+ {0x2285, 2123, 2},
+ {0x2288, 2125, 2},
+ {0x2289, 2127, 2},
+ {0x22AC, 2129, 2},
+ {0x22AD, 2131, 2},
+ {0x22AE, 2133, 2},
+ {0x22AF, 2135, 2},
+ {0x22E0, 2137, 2},
+ {0x22E1, 2139, 2},
+ {0x22E2, 2141, 2},
+ {0x22E3, 2143, 2},
+ {0x22EA, 2145, 2},
+ {0x22EB, 2147, 2},
+ {0x22EC, 2149, 2},
+ {0x22ED, 2151, 2},
+ {0x2329, 2153, 1},
+ {0x232A, 2154, 1},
+ {0x2ADC, 2155, 2},
+ {0x304C, 2157, 2},
+ {0x304E, 2159, 2},
+ {0x3050, 2161, 2},
+ {0x3052, 2163, 2},
+ {0x3054, 2165, 2},
+ {0x3056, 2167, 2},
+ {0x3058, 2169, 2},
+ {0x305A, 2171, 2},
+ {0x305C, 2173, 2},
+ {0x305E, 2175, 2},
+ {0x3060, 2177, 2},
+ {0x3062, 2179, 2},
+ {0x3065, 2181, 2},
+ {0x3067, 2183, 2},
+ {0x3069, 2185, 2},
+ {0x3070, 2187, 2},
+ {0x3071, 2189, 2},
+ {0x3073, 2191, 2},
+ {0x3074, 2193, 2},
+ {0x3076, 2195, 2},
+ {0x3077, 2197, 2},
+ {0x3079, 2199, 2},
+ {0x307A, 2201, 2},
+ {0x307C, 2203, 2},
+ {0x307D, 2205, 2},
+ {0x3094, 2207, 2},
+ {0x309E, 2209, 2},
+ {0x30AC, 2211, 2},
+ {0x30AE, 2213, 2},
+ {0x30B0, 2215, 2},
+ {0x30B2, 2217, 2},
+ {0x30B4, 2219, 2},
+ {0x30B6, 2221, 2},
+ {0x30B8, 2223, 2},
+ {0x30BA, 2225, 2},
+ {0x30BC, 2227, 2},
+ {0x30BE, 2229, 2},
+ {0x30C0, 2231, 2},
+ {0x30C2, 2233, 2},
+ {0x30C5, 2235, 2},
+ {0x30C7, 2237, 2},
+ {0x30C9, 2239, 2},
+ {0x30D0, 2241, 2},
+ {0x30D1, 2243, 2},
+ {0x30D3, 2245, 2},
+ {0x30D4, 2247, 2},
+ {0x30D6, 2249, 2},
+ {0x30D7, 2251, 2},
+ {0x30D9, 2253, 2},
+ {0x30DA, 2255, 2},
+ {0x30DC, 2257, 2},
+ {0x30DD, 2259, 2},
+ {0x30F4, 2261, 2},
+ {0x30F7, 2263, 2},
+ {0x30F8, 2265, 2},
+ {0x30F9, 2267, 2},
+ {0x30FA, 2269, 2},
+ {0x30FE, 2271, 2},
+ {0xF900, 2273, 1},
+ {0xF901, 2274, 1},
+ {0xF902, 2275, 1},
+ {0xF903, 2276, 1},
+ {0xF904, 2277, 1},
+ {0xF905, 2278, 1},
+ {0xF906, 2279, 1},
+ {0xF907, 2280, 1},
+ {0xF908, 2281, 1},
+ {0xF909, 2282, 1},
+ {0xF90A, 2283, 1},
+ {0xF90B, 2284, 1},
+ {0xF90C, 2285, 1},
+ {0xF90D, 2286, 1},
+ {0xF90E, 2287, 1},
+ {0xF90F, 2288, 1},
+ {0xF910, 2289, 1},
+ {0xF911, 2290, 1},
+ {0xF912, 2291, 1},
+ {0xF913, 2292, 1},
+ {0xF914, 2293, 1},
+ {0xF915, 2294, 1},
+ {0xF916, 2295, 1},
+ {0xF917, 2296, 1},
+ {0xF918, 2297, 1},
+ {0xF919, 2298, 1},
+ {0xF91A, 2299, 1},
+ {0xF91B, 2300, 1},
+ {0xF91C, 2301, 1},
+ {0xF91D, 2302, 1},
+ {0xF91E, 2303, 1},
+ {0xF91F, 2304, 1},
+ {0xF920, 2305, 1},
+ {0xF921, 2306, 1},
+ {0xF922, 2307, 1},
+ {0xF923, 2308, 1},
+ {0xF924, 2309, 1},
+ {0xF925, 2310, 1},
+ {0xF926, 2311, 1},
+ {0xF927, 2312, 1},
+ {0xF928, 2313, 1},
+ {0xF929, 2314, 1},
+ {0xF92A, 2315, 1},
+ {0xF92B, 2316, 1},
+ {0xF92C, 2317, 1},
+ {0xF92D, 2318, 1},
+ {0xF92E, 2319, 1},
+ {0xF92F, 2320, 1},
+ {0xF930, 2321, 1},
+ {0xF931, 2322, 1},
+ {0xF932, 2323, 1},
+ {0xF933, 2324, 1},
+ {0xF934, 2325, 1},
+ {0xF935, 2326, 1},
+ {0xF936, 2327, 1},
+ {0xF937, 2328, 1},
+ {0xF938, 2329, 1},
+ {0xF939, 2330, 1},
+ {0xF93A, 2331, 1},
+ {0xF93B, 2332, 1},
+ {0xF93C, 2333, 1},
+ {0xF93D, 2334, 1},
+ {0xF93E, 2335, 1},
+ {0xF93F, 2336, 1},
+ {0xF940, 2337, 1},
+ {0xF941, 2338, 1},
+ {0xF942, 2339, 1},
+ {0xF943, 2340, 1},
+ {0xF944, 2341, 1},
+ {0xF945, 2342, 1},
+ {0xF946, 2343, 1},
+ {0xF947, 2344, 1},
+ {0xF948, 2345, 1},
+ {0xF949, 2346, 1},
+ {0xF94A, 2347, 1},
+ {0xF94B, 2348, 1},
+ {0xF94C, 2349, 1},
+ {0xF94D, 2350, 1},
+ {0xF94E, 2351, 1},
+ {0xF94F, 2352, 1},
+ {0xF950, 2353, 1},
+ {0xF951, 2354, 1},
+ {0xF952, 2355, 1},
+ {0xF953, 2356, 1},
+ {0xF954, 2357, 1},
+ {0xF955, 2358, 1},
+ {0xF956, 2359, 1},
+ {0xF957, 2360, 1},
+ {0xF958, 2361, 1},
+ {0xF959, 2362, 1},
+ {0xF95A, 2363, 1},
+ {0xF95B, 2364, 1},
+ {0xF95C, 2365, 1},
+ {0xF95D, 2366, 1},
+ {0xF95E, 2367, 1},
+ {0xF95F, 2368, 1},
+ {0xF960, 2369, 1},
+ {0xF961, 2370, 1},
+ {0xF962, 2371, 1},
+ {0xF963, 2372, 1},
+ {0xF964, 2373, 1},
+ {0xF965, 2374, 1},
+ {0xF966, 2375, 1},
+ {0xF967, 2376, 1},
+ {0xF968, 2377, 1},
+ {0xF969, 2378, 1},
+ {0xF96A, 2379, 1},
+ {0xF96B, 2380, 1},
+ {0xF96C, 2381, 1},
+ {0xF96D, 2382, 1},
+ {0xF96E, 2383, 1},
+ {0xF96F, 2384, 1},
+ {0xF970, 2385, 1},
+ {0xF971, 2386, 1},
+ {0xF972, 2387, 1},
+ {0xF973, 2388, 1},
+ {0xF974, 2389, 1},
+ {0xF975, 2390, 1},
+ {0xF976, 2391, 1},
+ {0xF977, 2392, 1},
+ {0xF978, 2393, 1},
+ {0xF979, 2394, 1},
+ {0xF97A, 2395, 1},
+ {0xF97B, 2396, 1},
+ {0xF97C, 2397, 1},
+ {0xF97D, 2398, 1},
+ {0xF97E, 2399, 1},
+ {0xF97F, 2400, 1},
+ {0xF980, 2401, 1},
+ {0xF981, 2402, 1},
+ {0xF982, 2403, 1},
+ {0xF983, 2404, 1},
+ {0xF984, 2405, 1},
+ {0xF985, 2406, 1},
+ {0xF986, 2407, 1},
+ {0xF987, 2408, 1},
+ {0xF988, 2409, 1},
+ {0xF989, 2410, 1},
+ {0xF98A, 2411, 1},
+ {0xF98B, 2412, 1},
+ {0xF98C, 2413, 1},
+ {0xF98D, 2414, 1},
+ {0xF98E, 2415, 1},
+ {0xF98F, 2416, 1},
+ {0xF990, 2417, 1},
+ {0xF991, 2418, 1},
+ {0xF992, 2419, 1},
+ {0xF993, 2420, 1},
+ {0xF994, 2421, 1},
+ {0xF995, 2422, 1},
+ {0xF996, 2423, 1},
+ {0xF997, 2424, 1},
+ {0xF998, 2425, 1},
+ {0xF999, 2426, 1},
+ {0xF99A, 2427, 1},
+ {0xF99B, 2428, 1},
+ {0xF99C, 2429, 1},
+ {0xF99D, 2430, 1},
+ {0xF99E, 2431, 1},
+ {0xF99F, 2432, 1},
+ {0xF9A0, 2433, 1},
+ {0xF9A1, 2434, 1},
+ {0xF9A2, 2435, 1},
+ {0xF9A3, 2436, 1},
+ {0xF9A4, 2437, 1},
+ {0xF9A5, 2438, 1},
+ {0xF9A6, 2439, 1},
+ {0xF9A7, 2440, 1},
+ {0xF9A8, 2441, 1},
+ {0xF9A9, 2442, 1},
+ {0xF9AA, 2443, 1},
+ {0xF9AB, 2444, 1},
+ {0xF9AC, 2445, 1},
+ {0xF9AD, 2446, 1},
+ {0xF9AE, 2447, 1},
+ {0xF9AF, 2448, 1},
+ {0xF9B0, 2449, 1},
+ {0xF9B1, 2450, 1},
+ {0xF9B2, 2451, 1},
+ {0xF9B3, 2452, 1},
+ {0xF9B4, 2453, 1},
+ {0xF9B5, 2454, 1},
+ {0xF9B6, 2455, 1},
+ {0xF9B7, 2456, 1},
+ {0xF9B8, 2457, 1},
+ {0xF9B9, 2458, 1},
+ {0xF9BA, 2459, 1},
+ {0xF9BB, 2460, 1},
+ {0xF9BC, 2461, 1},
+ {0xF9BD, 2462, 1},
+ {0xF9BE, 2463, 1},
+ {0xF9BF, 2464, 1},
+ {0xF9C0, 2465, 1},
+ {0xF9C1, 2466, 1},
+ {0xF9C2, 2467, 1},
+ {0xF9C3, 2468, 1},
+ {0xF9C4, 2469, 1},
+ {0xF9C5, 2470, 1},
+ {0xF9C6, 2471, 1},
+ {0xF9C7, 2472, 1},
+ {0xF9C8, 2473, 1},
+ {0xF9C9, 2474, 1},
+ {0xF9CA, 2475, 1},
+ {0xF9CB, 2476, 1},
+ {0xF9CC, 2477, 1},
+ {0xF9CD, 2478, 1},
+ {0xF9CE, 2479, 1},
+ {0xF9CF, 2480, 1},
+ {0xF9D0, 2481, 1},
+ {0xF9D1, 2482, 1},
+ {0xF9D2, 2483, 1},
+ {0xF9D3, 2484, 1},
+ {0xF9D4, 2485, 1},
+ {0xF9D5, 2486, 1},
+ {0xF9D6, 2487, 1},
+ {0xF9D7, 2488, 1},
+ {0xF9D8, 2489, 1},
+ {0xF9D9, 2490, 1},
+ {0xF9DA, 2491, 1},
+ {0xF9DB, 2492, 1},
+ {0xF9DC, 2493, 1},
+ {0xF9DD, 2494, 1},
+ {0xF9DE, 2495, 1},
+ {0xF9DF, 2496, 1},
+ {0xF9E0, 2497, 1},
+ {0xF9E1, 2498, 1},
+ {0xF9E2, 2499, 1},
+ {0xF9E3, 2500, 1},
+ {0xF9E4, 2501, 1},
+ {0xF9E5, 2502, 1},
+ {0xF9E6, 2503, 1},
+ {0xF9E7, 2504, 1},
+ {0xF9E8, 2505, 1},
+ {0xF9E9, 2506, 1},
+ {0xF9EA, 2507, 1},
+ {0xF9EB, 2508, 1},
+ {0xF9EC, 2509, 1},
+ {0xF9ED, 2510, 1},
+ {0xF9EE, 2511, 1},
+ {0xF9EF, 2512, 1},
+ {0xF9F0, 2513, 1},
+ {0xF9F1, 2514, 1},
+ {0xF9F2, 2515, 1},
+ {0xF9F3, 2516, 1},
+ {0xF9F4, 2517, 1},
+ {0xF9F5, 2518, 1},
+ {0xF9F6, 2519, 1},
+ {0xF9F7, 2520, 1},
+ {0xF9F8, 2521, 1},
+ {0xF9F9, 2522, 1},
+ {0xF9FA, 2523, 1},
+ {0xF9FB, 2524, 1},
+ {0xF9FC, 2525, 1},
+ {0xF9FD, 2526, 1},
+ {0xF9FE, 2527, 1},
+ {0xF9FF, 2528, 1},
+ {0xFA00, 2529, 1},
+ {0xFA01, 2530, 1},
+ {0xFA02, 2531, 1},
+ {0xFA03, 2532, 1},
+ {0xFA04, 2533, 1},
+ {0xFA05, 2534, 1},
+ {0xFA06, 2535, 1},
+ {0xFA07, 2536, 1},
+ {0xFA08, 2537, 1},
+ {0xFA09, 2538, 1},
+ {0xFA0A, 2539, 1},
+ {0xFA0B, 2540, 1},
+ {0xFA0C, 2541, 1},
+ {0xFA0D, 2542, 1},
+ {0xFA10, 2543, 1},
+ {0xFA12, 2544, 1},
+ {0xFA15, 2545, 1},
+ {0xFA16, 2546, 1},
+ {0xFA17, 2547, 1},
+ {0xFA18, 2548, 1},
+ {0xFA19, 2549, 1},
+ {0xFA1A, 2550, 1},
+ {0xFA1B, 2551, 1},
+ {0xFA1C, 2552, 1},
+ {0xFA1D, 2553, 1},
+ {0xFA1E, 2554, 1},
+ {0xFA20, 2555, 1},
+ {0xFA22, 2556, 1},
+ {0xFA25, 2557, 1},
+ {0xFA26, 2558, 1},
+ {0xFA2A, 2559, 1},
+ {0xFA2B, 2560, 1},
+ {0xFA2C, 2561, 1},
+ {0xFA2D, 2562, 1},
+ {0xFA2E, 2563, 1},
+ {0xFA2F, 2564, 1},
+ {0xFA30, 2565, 1},
+ {0xFA31, 2566, 1},
+ {0xFA32, 2567, 1},
+ {0xFA33, 2568, 1},
+ {0xFA34, 2569, 1},
+ {0xFA35, 2570, 1},
+ {0xFA36, 2571, 1},
+ {0xFA37, 2572, 1},
+ {0xFA38, 2573, 1},
+ {0xFA39, 2574, 1},
+ {0xFA3A, 2575, 1},
+ {0xFA3B, 2576, 1},
+ {0xFA3C, 2577, 1},
+ {0xFA3D, 2578, 1},
+ {0xFA3E, 2579, 1},
+ {0xFA3F, 2580, 1},
+ {0xFA40, 2581, 1},
+ {0xFA41, 2582, 1},
+ {0xFA42, 2583, 1},
+ {0xFA43, 2584, 1},
+ {0xFA44, 2585, 1},
+ {0xFA45, 2586, 1},
+ {0xFA46, 2587, 1},
+ {0xFA47, 2588, 1},
+ {0xFA48, 2589, 1},
+ {0xFA49, 2590, 1},
+ {0xFA4A, 2591, 1},
+ {0xFA4B, 2592, 1},
+ {0xFA4C, 2593, 1},
+ {0xFA4D, 2594, 1},
+ {0xFA4E, 2595, 1},
+ {0xFA4F, 2596, 1},
+ {0xFA50, 2597, 1},
+ {0xFA51, 2598, 1},
+ {0xFA52, 2599, 1},
+ {0xFA53, 2600, 1},
+ {0xFA54, 2601, 1},
+ {0xFA55, 2602, 1},
+ {0xFA56, 2603, 1},
+ {0xFA57, 2604, 1},
+ {0xFA58, 2605, 1},
+ {0xFA59, 2606, 1},
+ {0xFA5A, 2607, 1},
+ {0xFA5B, 2608, 1},
+ {0xFA5C, 2609, 1},
+ {0xFA5D, 2610, 1},
+ {0xFA5E, 2611, 1},
+ {0xFA5F, 2612, 1},
+ {0xFA60, 2613, 1},
+ {0xFA61, 2614, 1},
+ {0xFA62, 2615, 1},
+ {0xFA63, 2616, 1},
+ {0xFA64, 2617, 1},
+ {0xFA65, 2618, 1},
+ {0xFA66, 2619, 1},
+ {0xFA67, 2620, 1},
+ {0xFA68, 2621, 1},
+ {0xFA69, 2622, 1},
+ {0xFA6A, 2623, 1},
+ {0xFA6B, 2624, 1},
+ {0xFA6C, 2625, 1},
+ {0xFA6D, 2626, 1},
+ {0xFA70, 2627, 1},
+ {0xFA71, 2628, 1},
+ {0xFA72, 2629, 1},
+ {0xFA73, 2630, 1},
+ {0xFA74, 2631, 1},
+ {0xFA75, 2632, 1},
+ {0xFA76, 2633, 1},
+ {0xFA77, 2634, 1},
+ {0xFA78, 2635, 1},
+ {0xFA79, 2636, 1},
+ {0xFA7A, 2637, 1},
+ {0xFA7B, 2638, 1},
+ {0xFA7C, 2639, 1},
+ {0xFA7D, 2640, 1},
+ {0xFA7E, 2641, 1},
+ {0xFA7F, 2642, 1},
+ {0xFA80, 2643, 1},
+ {0xFA81, 2644, 1},
+ {0xFA82, 2645, 1},
+ {0xFA83, 2646, 1},
+ {0xFA84, 2647, 1},
+ {0xFA85, 2648, 1},
+ {0xFA86, 2649, 1},
+ {0xFA87, 2650, 1},
+ {0xFA88, 2651, 1},
+ {0xFA89, 2652, 1},
+ {0xFA8A, 2653, 1},
+ {0xFA8B, 2654, 1},
+ {0xFA8C, 2655, 1},
+ {0xFA8D, 2656, 1},
+ {0xFA8E, 2657, 1},
+ {0xFA8F, 2658, 1},
+ {0xFA90, 2659, 1},
+ {0xFA91, 2660, 1},
+ {0xFA92, 2661, 1},
+ {0xFA93, 2662, 1},
+ {0xFA94, 2663, 1},
+ {0xFA95, 2664, 1},
+ {0xFA96, 2665, 1},
+ {0xFA97, 2666, 1},
+ {0xFA98, 2667, 1},
+ {0xFA99, 2668, 1},
+ {0xFA9A, 2669, 1},
+ {0xFA9B, 2670, 1},
+ {0xFA9C, 2671, 1},
+ {0xFA9D, 2672, 1},
+ {0xFA9E, 2673, 1},
+ {0xFA9F, 2674, 1},
+ {0xFAA0, 2675, 1},
+ {0xFAA1, 2676, 1},
+ {0xFAA2, 2677, 1},
+ {0xFAA3, 2678, 1},
+ {0xFAA4, 2679, 1},
+ {0xFAA5, 2680, 1},
+ {0xFAA6, 2681, 1},
+ {0xFAA7, 2682, 1},
+ {0xFAA8, 2683, 1},
+ {0xFAA9, 2684, 1},
+ {0xFAAA, 2685, 1},
+ {0xFAAB, 2686, 1},
+ {0xFAAC, 2687, 1},
+ {0xFAAD, 2688, 1},
+ {0xFAAE, 2689, 1},
+ {0xFAAF, 2690, 1},
+ {0xFAB0, 2691, 1},
+ {0xFAB1, 2692, 1},
+ {0xFAB2, 2693, 1},
+ {0xFAB3, 2694, 1},
+ {0xFAB4, 2695, 1},
+ {0xFAB5, 2696, 1},
+ {0xFAB6, 2697, 1},
+ {0xFAB7, 2698, 1},
+ {0xFAB8, 2699, 1},
+ {0xFAB9, 2700, 1},
+ {0xFABA, 2701, 1},
+ {0xFABB, 2702, 1},
+ {0xFABC, 2703, 1},
+ {0xFABD, 2704, 1},
+ {0xFABE, 2705, 1},
+ {0xFABF, 2706, 1},
+ {0xFAC0, 2707, 1},
+ {0xFAC1, 2708, 1},
+ {0xFAC2, 2709, 1},
+ {0xFAC3, 2710, 1},
+ {0xFAC4, 2711, 1},
+ {0xFAC5, 2712, 1},
+ {0xFAC6, 2713, 1},
+ {0xFAC7, 2714, 1},
+ {0xFAC8, 2715, 1},
+ {0xFAC9, 2716, 1},
+ {0xFACA, 2717, 1},
+ {0xFACB, 2718, 1},
+ {0xFACC, 2719, 1},
+ {0xFACD, 2720, 1},
+ {0xFACE, 2721, 1},
+ {0xFACF, 2722, 1},
+ {0xFAD0, 2723, 1},
+ {0xFAD1, 2724, 1},
+ {0xFAD2, 2725, 1},
+ {0xFAD3, 2726, 1},
+ {0xFAD4, 2727, 1},
+ {0xFAD5, 2728, 1},
+ {0xFAD6, 2729, 1},
+ {0xFAD7, 2730, 1},
+ {0xFAD8, 2731, 1},
+ {0xFAD9, 2732, 1},
+ {0xFB1D, 2733, 2},
+ {0xFB1F, 2735, 2},
+ {0xFB2A, 2737, 2},
+ {0xFB2B, 2739, 2},
+ {0xFB2C, 2741, 3},
+ {0xFB2D, 2744, 3},
+ {0xFB2E, 2747, 2},
+ {0xFB2F, 2749, 2},
+ {0xFB30, 2751, 2},
+ {0xFB31, 2753, 2},
+ {0xFB32, 2755, 2},
+ {0xFB33, 2757, 2},
+ {0xFB34, 2759, 2},
+ {0xFB35, 2761, 2},
+ {0xFB36, 2763, 2},
+ {0xFB38, 2765, 2},
+ {0xFB39, 2767, 2},
+ {0xFB3A, 2769, 2},
+ {0xFB3B, 2771, 2},
+ {0xFB3C, 2773, 2},
+ {0xFB3E, 2775, 2},
+ {0xFB40, 2777, 2},
+ {0xFB41, 2779, 2},
+ {0xFB43, 2781, 2},
+ {0xFB44, 2783, 2},
+ {0xFB46, 2785, 2},
+ {0xFB47, 2787, 2},
+ {0xFB48, 2789, 2},
+ {0xFB49, 2791, 2},
+ {0xFB4A, 2793, 2},
+ {0xFB4B, 2795, 2},
+ {0xFB4C, 2797, 2},
+ {0xFB4D, 2799, 2},
+ {0xFB4E, 2801, 2},
+ {0x1109A, 2803, 2},
+ {0x1109C, 2805, 2},
+ {0x110AB, 2807, 2},
+ {0x1112E, 2809, 2},
+ {0x1112F, 2811, 2},
+ {0x1134B, 2813, 2},
+ {0x1134C, 2815, 2},
+ {0x114BB, 2817, 2},
+ {0x114BC, 2819, 2},
+ {0x114BE, 2821, 2},
+ {0x115BA, 2823, 2},
+ {0x115BB, 2825, 2},
+ {0x11938, 2827, 2},
+ {0x1D15E, 2829, 2},
+ {0x1D15F, 2831, 2},
+ {0x1D160, 2833, 3},
+ {0x1D161, 2836, 3},
+ {0x1D162, 2839, 3},
+ {0x1D163, 2842, 3},
+ {0x1D164, 2845, 3},
+ {0x1D1BB, 2848, 2},
+ {0x1D1BC, 2850, 2},
+ {0x1D1BD, 2852, 3},
+ {0x1D1BE, 2855, 3},
+ {0x1D1BF, 2858, 3},
+ {0x1D1C0, 2861, 3},
+ {0x2F800, 2864, 1},
+ {0x2F801, 2865, 1},
+ {0x2F802, 2866, 1},
+ {0x2F803, 2867, 1},
+ {0x2F804, 2868, 1},
+ {0x2F805, 2869, 1},
+ {0x2F806, 2870, 1},
+ {0x2F807, 2871, 1},
+ {0x2F808, 2872, 1},
+ {0x2F809, 2873, 1},
+ {0x2F80A, 2874, 1},
+ {0x2F80B, 2875, 1},
+ {0x2F80C, 2876, 1},
+ {0x2F80D, 2877, 1},
+ {0x2F80E, 2878, 1},
+ {0x2F80F, 2879, 1},
+ {0x2F810, 2880, 1},
+ {0x2F811, 2881, 1},
+ {0x2F812, 2882, 1},
+ {0x2F813, 2883, 1},
+ {0x2F814, 2884, 1},
+ {0x2F815, 2885, 1},
+ {0x2F816, 2886, 1},
+ {0x2F817, 2887, 1},
+ {0x2F818, 2888, 1},
+ {0x2F819, 2889, 1},
+ {0x2F81A, 2890, 1},
+ {0x2F81B, 2891, 1},
+ {0x2F81C, 2892, 1},
+ {0x2F81D, 2893, 1},
+ {0x2F81E, 2894, 1},
+ {0x2F81F, 2895, 1},
+ {0x2F820, 2896, 1},
+ {0x2F821, 2897, 1},
+ {0x2F822, 2898, 1},
+ {0x2F823, 2899, 1},
+ {0x2F824, 2900, 1},
+ {0x2F825, 2901, 1},
+ {0x2F826, 2902, 1},
+ {0x2F827, 2903, 1},
+ {0x2F828, 2904, 1},
+ {0x2F829, 2905, 1},
+ {0x2F82A, 2906, 1},
+ {0x2F82B, 2907, 1},
+ {0x2F82C, 2908, 1},
+ {0x2F82D, 2909, 1},
+ {0x2F82E, 2910, 1},
+ {0x2F82F, 2911, 1},
+ {0x2F830, 2912, 1},
+ {0x2F831, 2913, 1},
+ {0x2F832, 2914, 1},
+ {0x2F833, 2915, 1},
+ {0x2F834, 2916, 1},
+ {0x2F835, 2917, 1},
+ {0x2F836, 2918, 1},
+ {0x2F837, 2919, 1},
+ {0x2F838, 2920, 1},
+ {0x2F839, 2921, 1},
+ {0x2F83A, 2922, 1},
+ {0x2F83B, 2923, 1},
+ {0x2F83C, 2924, 1},
+ {0x2F83D, 2925, 1},
+ {0x2F83E, 2926, 1},
+ {0x2F83F, 2927, 1},
+ {0x2F840, 2928, 1},
+ {0x2F841, 2929, 1},
+ {0x2F842, 2930, 1},
+ {0x2F843, 2931, 1},
+ {0x2F844, 2932, 1},
+ {0x2F845, 2933, 1},
+ {0x2F846, 2934, 1},
+ {0x2F847, 2935, 1},
+ {0x2F848, 2936, 1},
+ {0x2F849, 2937, 1},
+ {0x2F84A, 2938, 1},
+ {0x2F84B, 2939, 1},
+ {0x2F84C, 2940, 1},
+ {0x2F84D, 2941, 1},
+ {0x2F84E, 2942, 1},
+ {0x2F84F, 2943, 1},
+ {0x2F850, 2944, 1},
+ {0x2F851, 2945, 1},
+ {0x2F852, 2946, 1},
+ {0x2F853, 2947, 1},
+ {0x2F854, 2948, 1},
+ {0x2F855, 2949, 1},
+ {0x2F856, 2950, 1},
+ {0x2F857, 2951, 1},
+ {0x2F858, 2952, 1},
+ {0x2F859, 2953, 1},
+ {0x2F85A, 2954, 1},
+ {0x2F85B, 2955, 1},
+ {0x2F85C, 2956, 1},
+ {0x2F85D, 2957, 1},
+ {0x2F85E, 2958, 1},
+ {0x2F85F, 2959, 1},
+ {0x2F860, 2960, 1},
+ {0x2F861, 2961, 1},
+ {0x2F862, 2962, 1},
+ {0x2F863, 2963, 1},
+ {0x2F864, 2964, 1},
+ {0x2F865, 2965, 1},
+ {0x2F866, 2966, 1},
+ {0x2F867, 2967, 1},
+ {0x2F868, 2968, 1},
+ {0x2F869, 2969, 1},
+ {0x2F86A, 2970, 1},
+ {0x2F86B, 2971, 1},
+ {0x2F86C, 2972, 1},
+ {0x2F86D, 2973, 1},
+ {0x2F86E, 2974, 1},
+ {0x2F86F, 2975, 1},
+ {0x2F870, 2976, 1},
+ {0x2F871, 2977, 1},
+ {0x2F872, 2978, 1},
+ {0x2F873, 2979, 1},
+ {0x2F874, 2980, 1},
+ {0x2F875, 2981, 1},
+ {0x2F876, 2982, 1},
+ {0x2F877, 2983, 1},
+ {0x2F878, 2984, 1},
+ {0x2F879, 2985, 1},
+ {0x2F87A, 2986, 1},
+ {0x2F87B, 2987, 1},
+ {0x2F87C, 2988, 1},
+ {0x2F87D, 2989, 1},
+ {0x2F87E, 2990, 1},
+ {0x2F87F, 2991, 1},
+ {0x2F880, 2992, 1},
+ {0x2F881, 2993, 1},
+ {0x2F882, 2994, 1},
+ {0x2F883, 2995, 1},
+ {0x2F884, 2996, 1},
+ {0x2F885, 2997, 1},
+ {0x2F886, 2998, 1},
+ {0x2F887, 2999, 1},
+ {0x2F888, 3000, 1},
+ {0x2F889, 3001, 1},
+ {0x2F88A, 3002, 1},
+ {0x2F88B, 3003, 1},
+ {0x2F88C, 3004, 1},
+ {0x2F88D, 3005, 1},
+ {0x2F88E, 3006, 1},
+ {0x2F88F, 3007, 1},
+ {0x2F890, 3008, 1},
+ {0x2F891, 3009, 1},
+ {0x2F892, 3010, 1},
+ {0x2F893, 3011, 1},
+ {0x2F894, 3012, 1},
+ {0x2F895, 3013, 1},
+ {0x2F896, 3014, 1},
+ {0x2F897, 3015, 1},
+ {0x2F898, 3016, 1},
+ {0x2F899, 3017, 1},
+ {0x2F89A, 3018, 1},
+ {0x2F89B, 3019, 1},
+ {0x2F89C, 3020, 1},
+ {0x2F89D, 3021, 1},
+ {0x2F89E, 3022, 1},
+ {0x2F89F, 3023, 1},
+ {0x2F8A0, 3024, 1},
+ {0x2F8A1, 3025, 1},
+ {0x2F8A2, 3026, 1},
+ {0x2F8A3, 3027, 1},
+ {0x2F8A4, 3028, 1},
+ {0x2F8A5, 3029, 1},
+ {0x2F8A6, 3030, 1},
+ {0x2F8A7, 3031, 1},
+ {0x2F8A8, 3032, 1},
+ {0x2F8A9, 3033, 1},
+ {0x2F8AA, 3034, 1},
+ {0x2F8AB, 3035, 1},
+ {0x2F8AC, 3036, 1},
+ {0x2F8AD, 3037, 1},
+ {0x2F8AE, 3038, 1},
+ {0x2F8AF, 3039, 1},
+ {0x2F8B0, 3040, 1},
+ {0x2F8B1, 3041, 1},
+ {0x2F8B2, 3042, 1},
+ {0x2F8B3, 3043, 1},
+ {0x2F8B4, 3044, 1},
+ {0x2F8B5, 3045, 1},
+ {0x2F8B6, 3046, 1},
+ {0x2F8B7, 3047, 1},
+ {0x2F8B8, 3048, 1},
+ {0x2F8B9, 3049, 1},
+ {0x2F8BA, 3050, 1},
+ {0x2F8BB, 3051, 1},
+ {0x2F8BC, 3052, 1},
+ {0x2F8BD, 3053, 1},
+ {0x2F8BE, 3054, 1},
+ {0x2F8BF, 3055, 1},
+ {0x2F8C0, 3056, 1},
+ {0x2F8C1, 3057, 1},
+ {0x2F8C2, 3058, 1},
+ {0x2F8C3, 3059, 1},
+ {0x2F8C4, 3060, 1},
+ {0x2F8C5, 3061, 1},
+ {0x2F8C6, 3062, 1},
+ {0x2F8C7, 3063, 1},
+ {0x2F8C8, 3064, 1},
+ {0x2F8C9, 3065, 1},
+ {0x2F8CA, 3066, 1},
+ {0x2F8CB, 3067, 1},
+ {0x2F8CC, 3068, 1},
+ {0x2F8CD, 3069, 1},
+ {0x2F8CE, 3070, 1},
+ {0x2F8CF, 3071, 1},
+ {0x2F8D0, 3072, 1},
+ {0x2F8D1, 3073, 1},
+ {0x2F8D2, 3074, 1},
+ {0x2F8D3, 3075, 1},
+ {0x2F8D4, 3076, 1},
+ {0x2F8D5, 3077, 1},
+ {0x2F8D6, 3078, 1},
+ {0x2F8D7, 3079, 1},
+ {0x2F8D8, 3080, 1},
+ {0x2F8D9, 3081, 1},
+ {0x2F8DA, 3082, 1},
+ {0x2F8DB, 3083, 1},
+ {0x2F8DC, 3084, 1},
+ {0x2F8DD, 3085, 1},
+ {0x2F8DE, 3086, 1},
+ {0x2F8DF, 3087, 1},
+ {0x2F8E0, 3088, 1},
+ {0x2F8E1, 3089, 1},
+ {0x2F8E2, 3090, 1},
+ {0x2F8E3, 3091, 1},
+ {0x2F8E4, 3092, 1},
+ {0x2F8E5, 3093, 1},
+ {0x2F8E6, 3094, 1},
+ {0x2F8E7, 3095, 1},
+ {0x2F8E8, 3096, 1},
+ {0x2F8E9, 3097, 1},
+ {0x2F8EA, 3098, 1},
+ {0x2F8EB, 3099, 1},
+ {0x2F8EC, 3100, 1},
+ {0x2F8ED, 3101, 1},
+ {0x2F8EE, 3102, 1},
+ {0x2F8EF, 3103, 1},
+ {0x2F8F0, 3104, 1},
+ {0x2F8F1, 3105, 1},
+ {0x2F8F2, 3106, 1},
+ {0x2F8F3, 3107, 1},
+ {0x2F8F4, 3108, 1},
+ {0x2F8F5, 3109, 1},
+ {0x2F8F6, 3110, 1},
+ {0x2F8F7, 3111, 1},
+ {0x2F8F8, 3112, 1},
+ {0x2F8F9, 3113, 1},
+ {0x2F8FA, 3114, 1},
+ {0x2F8FB, 3115, 1},
+ {0x2F8FC, 3116, 1},
+ {0x2F8FD, 3117, 1},
+ {0x2F8FE, 3118, 1},
+ {0x2F8FF, 3119, 1},
+ {0x2F900, 3120, 1},
+ {0x2F901, 3121, 1},
+ {0x2F902, 3122, 1},
+ {0x2F903, 3123, 1},
+ {0x2F904, 3124, 1},
+ {0x2F905, 3125, 1},
+ {0x2F906, 3126, 1},
+ {0x2F907, 3127, 1},
+ {0x2F908, 3128, 1},
+ {0x2F909, 3129, 1},
+ {0x2F90A, 3130, 1},
+ {0x2F90B, 3131, 1},
+ {0x2F90C, 3132, 1},
+ {0x2F90D, 3133, 1},
+ {0x2F90E, 3134, 1},
+ {0x2F90F, 3135, 1},
+ {0x2F910, 3136, 1},
+ {0x2F911, 3137, 1},
+ {0x2F912, 3138, 1},
+ {0x2F913, 3139, 1},
+ {0x2F914, 3140, 1},
+ {0x2F915, 3141, 1},
+ {0x2F916, 3142, 1},
+ {0x2F917, 3143, 1},
+ {0x2F918, 3144, 1},
+ {0x2F919, 3145, 1},
+ {0x2F91A, 3146, 1},
+ {0x2F91B, 3147, 1},
+ {0x2F91C, 3148, 1},
+ {0x2F91D, 3149, 1},
+ {0x2F91E, 3150, 1},
+ {0x2F91F, 3151, 1},
+ {0x2F920, 3152, 1},
+ {0x2F921, 3153, 1},
+ {0x2F922, 3154, 1},
+ {0x2F923, 3155, 1},
+ {0x2F924, 3156, 1},
+ {0x2F925, 3157, 1},
+ {0x2F926, 3158, 1},
+ {0x2F927, 3159, 1},
+ {0x2F928, 3160, 1},
+ {0x2F929, 3161, 1},
+ {0x2F92A, 3162, 1},
+ {0x2F92B, 3163, 1},
+ {0x2F92C, 3164, 1},
+ {0x2F92D, 3165, 1},
+ {0x2F92E, 3166, 1},
+ {0x2F92F, 3167, 1},
+ {0x2F930, 3168, 1},
+ {0x2F931, 3169, 1},
+ {0x2F932, 3170, 1},
+ {0x2F933, 3171, 1},
+ {0x2F934, 3172, 1},
+ {0x2F935, 3173, 1},
+ {0x2F936, 3174, 1},
+ {0x2F937, 3175, 1},
+ {0x2F938, 3176, 1},
+ {0x2F939, 3177, 1},
+ {0x2F93A, 3178, 1},
+ {0x2F93B, 3179, 1},
+ {0x2F93C, 3180, 1},
+ {0x2F93D, 3181, 1},
+ {0x2F93E, 3182, 1},
+ {0x2F93F, 3183, 1},
+ {0x2F940, 3184, 1},
+ {0x2F941, 3185, 1},
+ {0x2F942, 3186, 1},
+ {0x2F943, 3187, 1},
+ {0x2F944, 3188, 1},
+ {0x2F945, 3189, 1},
+ {0x2F946, 3190, 1},
+ {0x2F947, 3191, 1},
+ {0x2F948, 3192, 1},
+ {0x2F949, 3193, 1},
+ {0x2F94A, 3194, 1},
+ {0x2F94B, 3195, 1},
+ {0x2F94C, 3196, 1},
+ {0x2F94D, 3197, 1},
+ {0x2F94E, 3198, 1},
+ {0x2F94F, 3199, 1},
+ {0x2F950, 3200, 1},
+ {0x2F951, 3201, 1},
+ {0x2F952, 3202, 1},
+ {0x2F953, 3203, 1},
+ {0x2F954, 3204, 1},
+ {0x2F955, 3205, 1},
+ {0x2F956, 3206, 1},
+ {0x2F957, 3207, 1},
+ {0x2F958, 3208, 1},
+ {0x2F959, 3209, 1},
+ {0x2F95A, 3210, 1},
+ {0x2F95B, 3211, 1},
+ {0x2F95C, 3212, 1},
+ {0x2F95D, 3213, 1},
+ {0x2F95E, 3214, 1},
+ {0x2F95F, 3215, 1},
+ {0x2F960, 3216, 1},
+ {0x2F961, 3217, 1},
+ {0x2F962, 3218, 1},
+ {0x2F963, 3219, 1},
+ {0x2F964, 3220, 1},
+ {0x2F965, 3221, 1},
+ {0x2F966, 3222, 1},
+ {0x2F967, 3223, 1},
+ {0x2F968, 3224, 1},
+ {0x2F969, 3225, 1},
+ {0x2F96A, 3226, 1},
+ {0x2F96B, 3227, 1},
+ {0x2F96C, 3228, 1},
+ {0x2F96D, 3229, 1},
+ {0x2F96E, 3230, 1},
+ {0x2F96F, 3231, 1},
+ {0x2F970, 3232, 1},
+ {0x2F971, 3233, 1},
+ {0x2F972, 3234, 1},
+ {0x2F973, 3235, 1},
+ {0x2F974, 3236, 1},
+ {0x2F975, 3237, 1},
+ {0x2F976, 3238, 1},
+ {0x2F977, 3239, 1},
+ {0x2F978, 3240, 1},
+ {0x2F979, 3241, 1},
+ {0x2F97A, 3242, 1},
+ {0x2F97B, 3243, 1},
+ {0x2F97C, 3244, 1},
+ {0x2F97D, 3245, 1},
+ {0x2F97E, 3246, 1},
+ {0x2F97F, 3247, 1},
+ {0x2F980, 3248, 1},
+ {0x2F981, 3249, 1},
+ {0x2F982, 3250, 1},
+ {0x2F983, 3251, 1},
+ {0x2F984, 3252, 1},
+ {0x2F985, 3253, 1},
+ {0x2F986, 3254, 1},
+ {0x2F987, 3255, 1},
+ {0x2F988, 3256, 1},
+ {0x2F989, 3257, 1},
+ {0x2F98A, 3258, 1},
+ {0x2F98B, 3259, 1},
+ {0x2F98C, 3260, 1},
+ {0x2F98D, 3261, 1},
+ {0x2F98E, 3262, 1},
+ {0x2F98F, 3263, 1},
+ {0x2F990, 3264, 1},
+ {0x2F991, 3265, 1},
+ {0x2F992, 3266, 1},
+ {0x2F993, 3267, 1},
+ {0x2F994, 3268, 1},
+ {0x2F995, 3269, 1},
+ {0x2F996, 3270, 1},
+ {0x2F997, 3271, 1},
+ {0x2F998, 3272, 1},
+ {0x2F999, 3273, 1},
+ {0x2F99A, 3274, 1},
+ {0x2F99B, 3275, 1},
+ {0x2F99C, 3276, 1},
+ {0x2F99D, 3277, 1},
+ {0x2F99E, 3278, 1},
+ {0x2F99F, 3279, 1},
+ {0x2F9A0, 3280, 1},
+ {0x2F9A1, 3281, 1},
+ {0x2F9A2, 3282, 1},
+ {0x2F9A3, 3283, 1},
+ {0x2F9A4, 3284, 1},
+ {0x2F9A5, 3285, 1},
+ {0x2F9A6, 3286, 1},
+ {0x2F9A7, 3287, 1},
+ {0x2F9A8, 3288, 1},
+ {0x2F9A9, 3289, 1},
+ {0x2F9AA, 3290, 1},
+ {0x2F9AB, 3291, 1},
+ {0x2F9AC, 3292, 1},
+ {0x2F9AD, 3293, 1},
+ {0x2F9AE, 3294, 1},
+ {0x2F9AF, 3295, 1},
+ {0x2F9B0, 3296, 1},
+ {0x2F9B1, 3297, 1},
+ {0x2F9B2, 3298, 1},
+ {0x2F9B3, 3299, 1},
+ {0x2F9B4, 3300, 1},
+ {0x2F9B5, 3301, 1},
+ {0x2F9B6, 3302, 1},
+ {0x2F9B7, 3303, 1},
+ {0x2F9B8, 3304, 1},
+ {0x2F9B9, 3305, 1},
+ {0x2F9BA, 3306, 1},
+ {0x2F9BB, 3307, 1},
+ {0x2F9BC, 3308, 1},
+ {0x2F9BD, 3309, 1},
+ {0x2F9BE, 3310, 1},
+ {0x2F9BF, 3311, 1},
+ {0x2F9C0, 3312, 1},
+ {0x2F9C1, 3313, 1},
+ {0x2F9C2, 3314, 1},
+ {0x2F9C3, 3315, 1},
+ {0x2F9C4, 3316, 1},
+ {0x2F9C5, 3317, 1},
+ {0x2F9C6, 3318, 1},
+ {0x2F9C7, 3319, 1},
+ {0x2F9C8, 3320, 1},
+ {0x2F9C9, 3321, 1},
+ {0x2F9CA, 3322, 1},
+ {0x2F9CB, 3323, 1},
+ {0x2F9CC, 3324, 1},
+ {0x2F9CD, 3325, 1},
+ {0x2F9CE, 3326, 1},
+ {0x2F9CF, 3327, 1},
+ {0x2F9D0, 3328, 1},
+ {0x2F9D1, 3329, 1},
+ {0x2F9D2, 3330, 1},
+ {0x2F9D3, 3331, 1},
+ {0x2F9D4, 3332, 1},
+ {0x2F9D5, 3333, 1},
+ {0x2F9D6, 3334, 1},
+ {0x2F9D7, 3335, 1},
+ {0x2F9D8, 3336, 1},
+ {0x2F9D9, 3337, 1},
+ {0x2F9DA, 3338, 1},
+ {0x2F9DB, 3339, 1},
+ {0x2F9DC, 3340, 1},
+ {0x2F9DD, 3341, 1},
+ {0x2F9DE, 3342, 1},
+ {0x2F9DF, 3343, 1},
+ {0x2F9E0, 3344, 1},
+ {0x2F9E1, 3345, 1},
+ {0x2F9E2, 3346, 1},
+ {0x2F9E3, 3347, 1},
+ {0x2F9E4, 3348, 1},
+ {0x2F9E5, 3349, 1},
+ {0x2F9E6, 3350, 1},
+ {0x2F9E7, 3351, 1},
+ {0x2F9E8, 3352, 1},
+ {0x2F9E9, 3353, 1},
+ {0x2F9EA, 3354, 1},
+ {0x2F9EB, 3355, 1},
+ {0x2F9EC, 3356, 1},
+ {0x2F9ED, 3357, 1},
+ {0x2F9EE, 3358, 1},
+ {0x2F9EF, 3359, 1},
+ {0x2F9F0, 3360, 1},
+ {0x2F9F1, 3361, 1},
+ {0x2F9F2, 3362, 1},
+ {0x2F9F3, 3363, 1},
+ {0x2F9F4, 3364, 1},
+ {0x2F9F5, 3365, 1},
+ {0x2F9F6, 3366, 1},
+ {0x2F9F7, 3367, 1},
+ {0x2F9F8, 3368, 1},
+ {0x2F9F9, 3369, 1},
+ {0x2F9FA, 3370, 1},
+ {0x2F9FB, 3371, 1},
+ {0x2F9FC, 3372, 1},
+ {0x2F9FD, 3373, 1},
+ {0x2F9FE, 3374, 1},
+ {0x2F9FF, 3375, 1},
+ {0x2FA00, 3376, 1},
+ {0x2FA01, 3377, 1},
+ {0x2FA02, 3378, 1},
+ {0x2FA03, 3379, 1},
+ {0x2FA04, 3380, 1},
+ {0x2FA05, 3381, 1},
+ {0x2FA06, 3382, 1},
+ {0x2FA07, 3383, 1},
+ {0x2FA08, 3384, 1},
+ {0x2FA09, 3385, 1},
+ {0x2FA0A, 3386, 1},
+ {0x2FA0B, 3387, 1},
+ {0x2FA0C, 3388, 1},
+ {0x2FA0D, 3389, 1},
+ {0x2FA0E, 3390, 1},
+ {0x2FA0F, 3391, 1},
+ {0x2FA10, 3392, 1},
+ {0x2FA11, 3393, 1},
+ {0x2FA12, 3394, 1},
+ {0x2FA13, 3395, 1},
+ {0x2FA14, 3396, 1},
+ {0x2FA15, 3397, 1},
+ {0x2FA16, 3398, 1},
+ {0x2FA17, 3399, 1},
+ {0x2FA18, 3400, 1},
+ {0x2FA19, 3401, 1},
+ {0x2FA1A, 3402, 1},
+ {0x2FA1B, 3403, 1},
+ {0x2FA1C, 3404, 1},
+ {0x2FA1D, 3405, 1},
+};
+static const uint32_t decomposed[3406] = {
+ 0x0041, 0x0300, 0x0041, 0x0301, 0x0041, 0x0302, 0x0041, 0x0303, 0x0041, 0x0308, 0x0041, 0x030A,
+ 0x0043, 0x0327, 0x0045, 0x0300, 0x0045, 0x0301, 0x0045, 0x0302, 0x0045, 0x0308, 0x0049, 0x0300,
+ 0x0049, 0x0301, 0x0049, 0x0302, 0x0049, 0x0308, 0x004E, 0x0303, 0x004F, 0x0300, 0x004F, 0x0301,
+ 0x004F, 0x0302, 0x004F, 0x0303, 0x004F, 0x0308, 0x0055, 0x0300, 0x0055, 0x0301, 0x0055, 0x0302,
+ 0x0055, 0x0308, 0x0059, 0x0301, 0x0061, 0x0300, 0x0061, 0x0301, 0x0061, 0x0302, 0x0061, 0x0303,
+ 0x0061, 0x0308, 0x0061, 0x030A, 0x0063, 0x0327, 0x0065, 0x0300, 0x0065, 0x0301, 0x0065, 0x0302,
+ 0x0065, 0x0308, 0x0069, 0x0300, 0x0069, 0x0301, 0x0069, 0x0302, 0x0069, 0x0308, 0x006E, 0x0303,
+ 0x006F, 0x0300, 0x006F, 0x0301, 0x006F, 0x0302, 0x006F, 0x0303, 0x006F, 0x0308, 0x0075, 0x0300,
+ 0x0075, 0x0301, 0x0075, 0x0302, 0x0075, 0x0308, 0x0079, 0x0301, 0x0079, 0x0308, 0x0041, 0x0304,
+ 0x0061, 0x0304, 0x0041, 0x0306, 0x0061, 0x0306, 0x0041, 0x0328, 0x0061, 0x0328, 0x0043, 0x0301,
+ 0x0063, 0x0301, 0x0043, 0x0302, 0x0063, 0x0302, 0x0043, 0x0307, 0x0063, 0x0307, 0x0043, 0x030C,
+ 0x0063, 0x030C, 0x0044, 0x030C, 0x0064, 0x030C, 0x0045, 0x0304, 0x0065, 0x0304, 0x0045, 0x0306,
+ 0x0065, 0x0306, 0x0045, 0x0307, 0x0065, 0x0307, 0x0045, 0x0328, 0x0065, 0x0328, 0x0045, 0x030C,
+ 0x0065, 0x030C, 0x0047, 0x0302, 0x0067, 0x0302, 0x0047, 0x0306, 0x0067, 0x0306, 0x0047, 0x0307,
+ 0x0067, 0x0307, 0x0047, 0x0327, 0x0067, 0x0327, 0x0048, 0x0302, 0x0068, 0x0302, 0x0049, 0x0303,
+ 0x0069, 0x0303, 0x0049, 0x0304, 0x0069, 0x0304, 0x0049, 0x0306, 0x0069, 0x0306, 0x0049, 0x0328,
+ 0x0069, 0x0328, 0x0049, 0x0307, 0x004A, 0x0302, 0x006A, 0x0302, 0x004B, 0x0327, 0x006B, 0x0327,
+ 0x004C, 0x0301, 0x006C, 0x0301, 0x004C, 0x0327, 0x006C, 0x0327, 0x004C, 0x030C, 0x006C, 0x030C,
+ 0x004E, 0x0301, 0x006E, 0x0301, 0x004E, 0x0327, 0x006E, 0x0327, 0x004E, 0x030C, 0x006E, 0x030C,
+ 0x004F, 0x0304, 0x006F, 0x0304, 0x004F, 0x0306, 0x006F, 0x0306, 0x004F, 0x030B, 0x006F, 0x030B,
+ 0x0052, 0x0301, 0x0072, 0x0301, 0x0052, 0x0327, 0x0072, 0x0327, 0x0052, 0x030C, 0x0072, 0x030C,
+ 0x0053, 0x0301, 0x0073, 0x0301, 0x0053, 0x0302, 0x0073, 0x0302, 0x0053, 0x0327, 0x0073, 0x0327,
+ 0x0053, 0x030C, 0x0073, 0x030C, 0x0054, 0x0327, 0x0074, 0x0327, 0x0054, 0x030C, 0x0074, 0x030C,
+ 0x0055, 0x0303, 0x0075, 0x0303, 0x0055, 0x0304, 0x0075, 0x0304, 0x0055, 0x0306, 0x0075, 0x0306,
+ 0x0055, 0x030A, 0x0075, 0x030A, 0x0055, 0x030B, 0x0075, 0x030B, 0x0055, 0x0328, 0x0075, 0x0328,
+ 0x0057, 0x0302, 0x0077, 0x0302, 0x0059, 0x0302, 0x0079, 0x0302, 0x0059, 0x0308, 0x005A, 0x0301,
+ 0x007A, 0x0301, 0x005A, 0x0307, 0x007A, 0x0307, 0x005A, 0x030C, 0x007A, 0x030C, 0x004F, 0x031B,
+ 0x006F, 0x031B, 0x0055, 0x031B, 0x0075, 0x031B, 0x0041, 0x030C, 0x0061, 0x030C, 0x0049, 0x030C,
+ 0x0069, 0x030C, 0x004F, 0x030C, 0x006F, 0x030C, 0x0055, 0x030C, 0x0075, 0x030C, 0x0055, 0x0308,
+ 0x0304, 0x0075, 0x0308, 0x0304, 0x0055, 0x0308, 0x0301, 0x0075, 0x0308, 0x0301, 0x0055, 0x0308,
+ 0x030C, 0x0075, 0x0308, 0x030C, 0x0055, 0x0308, 0x0300, 0x0075, 0x0308, 0x0300, 0x0041, 0x0308,
+ 0x0304, 0x0061, 0x0308, 0x0304, 0x0041, 0x0307, 0x0304, 0x0061, 0x0307, 0x0304, 0x00C6, 0x0304,
+ 0x00E6, 0x0304, 0x0047, 0x030C, 0x0067, 0x030C, 0x004B, 0x030C, 0x006B, 0x030C, 0x004F, 0x0328,
+ 0x006F, 0x0328, 0x004F, 0x0328, 0x0304, 0x006F, 0x0328, 0x0304, 0x01B7, 0x030C, 0x0292, 0x030C,
+ 0x006A, 0x030C, 0x0047, 0x0301, 0x0067, 0x0301, 0x004E, 0x0300, 0x006E, 0x0300, 0x0041, 0x030A,
+ 0x0301, 0x0061, 0x030A, 0x0301, 0x00C6, 0x0301, 0x00E6, 0x0301, 0x00D8, 0x0301, 0x00F8, 0x0301,
+ 0x0041, 0x030F, 0x0061, 0x030F, 0x0041, 0x0311, 0x0061, 0x0311, 0x0045, 0x030F, 0x0065, 0x030F,
+ 0x0045, 0x0311, 0x0065, 0x0311, 0x0049, 0x030F, 0x0069, 0x030F, 0x0049, 0x0311, 0x0069, 0x0311,
+ 0x004F, 0x030F, 0x006F, 0x030F, 0x004F, 0x0311, 0x006F, 0x0311, 0x0052, 0x030F, 0x0072, 0x030F,
+ 0x0052, 0x0311, 0x0072, 0x0311, 0x0055, 0x030F, 0x0075, 0x030F, 0x0055, 0x0311, 0x0075, 0x0311,
+ 0x0053, 0x0326, 0x0073, 0x0326, 0x0054, 0x0326, 0x0074, 0x0326, 0x0048, 0x030C, 0x0068, 0x030C,
+ 0x0041, 0x0307, 0x0061, 0x0307, 0x0045, 0x0327, 0x0065, 0x0327, 0x004F, 0x0308, 0x0304, 0x006F,
+ 0x0308, 0x0304, 0x004F, 0x0303, 0x0304, 0x006F, 0x0303, 0x0304, 0x004F, 0x0307, 0x006F, 0x0307,
+ 0x004F, 0x0307, 0x0304, 0x006F, 0x0307, 0x0304, 0x0059, 0x0304, 0x0079, 0x0304, 0x0300, 0x0301,
+ 0x0313, 0x0308, 0x0301, 0x02B9, 0x003B, 0x00A8, 0x0301, 0x0391, 0x0301, 0x00B7, 0x0395, 0x0301,
+ 0x0397, 0x0301, 0x0399, 0x0301, 0x039F, 0x0301, 0x03A5, 0x0301, 0x03A9, 0x0301, 0x03B9, 0x0308,
+ 0x0301, 0x0399, 0x0308, 0x03A5, 0x0308, 0x03B1, 0x0301, 0x03B5, 0x0301, 0x03B7, 0x0301, 0x03B9,
+ 0x0301, 0x03C5, 0x0308, 0x0301, 0x03B9, 0x0308, 0x03C5, 0x0308, 0x03BF, 0x0301, 0x03C5, 0x0301,
+ 0x03C9, 0x0301, 0x03D2, 0x0301, 0x03D2, 0x0308, 0x0415, 0x0300, 0x0415, 0x0308, 0x0413, 0x0301,
+ 0x0406, 0x0308, 0x041A, 0x0301, 0x0418, 0x0300, 0x0423, 0x0306, 0x0418, 0x0306, 0x0438, 0x0306,
+ 0x0435, 0x0300, 0x0435, 0x0308, 0x0433, 0x0301, 0x0456, 0x0308, 0x043A, 0x0301, 0x0438, 0x0300,
+ 0x0443, 0x0306, 0x0474, 0x030F, 0x0475, 0x030F, 0x0416, 0x0306, 0x0436, 0x0306, 0x0410, 0x0306,
+ 0x0430, 0x0306, 0x0410, 0x0308, 0x0430, 0x0308, 0x0415, 0x0306, 0x0435, 0x0306, 0x04D8, 0x0308,
+ 0x04D9, 0x0308, 0x0416, 0x0308, 0x0436, 0x0308, 0x0417, 0x0308, 0x0437, 0x0308, 0x0418, 0x0304,
+ 0x0438, 0x0304, 0x0418, 0x0308, 0x0438, 0x0308, 0x041E, 0x0308, 0x043E, 0x0308, 0x04E8, 0x0308,
+ 0x04E9, 0x0308, 0x042D, 0x0308, 0x044D, 0x0308, 0x0423, 0x0304, 0x0443, 0x0304, 0x0423, 0x0308,
+ 0x0443, 0x0308, 0x0423, 0x030B, 0x0443, 0x030B, 0x0427, 0x0308, 0x0447, 0x0308, 0x042B, 0x0308,
+ 0x044B, 0x0308, 0x0627, 0x0653, 0x0627, 0x0654, 0x0648, 0x0654, 0x0627, 0x0655, 0x064A, 0x0654,
+ 0x06D5, 0x0654, 0x06C1, 0x0654, 0x06D2, 0x0654, 0x0928, 0x093C, 0x0930, 0x093C, 0x0933, 0x093C,
+ 0x0915, 0x093C, 0x0916, 0x093C, 0x0917, 0x093C, 0x091C, 0x093C, 0x0921, 0x093C, 0x0922, 0x093C,
+ 0x092B, 0x093C, 0x092F, 0x093C, 0x09C7, 0x09BE, 0x09C7, 0x09D7, 0x09A1, 0x09BC, 0x09A2, 0x09BC,
+ 0x09AF, 0x09BC, 0x0A32, 0x0A3C, 0x0A38, 0x0A3C, 0x0A16, 0x0A3C, 0x0A17, 0x0A3C, 0x0A1C, 0x0A3C,
+ 0x0A2B, 0x0A3C, 0x0B47, 0x0B56, 0x0B47, 0x0B3E, 0x0B47, 0x0B57, 0x0B21, 0x0B3C, 0x0B22, 0x0B3C,
+ 0x0B92, 0x0BD7, 0x0BC6, 0x0BBE, 0x0BC7, 0x0BBE, 0x0BC6, 0x0BD7, 0x0C46, 0x0C56, 0x0CBF, 0x0CD5,
+ 0x0CC6, 0x0CD5, 0x0CC6, 0x0CD6, 0x0CC6, 0x0CC2, 0x0CC6, 0x0CC2, 0x0CD5, 0x0D46, 0x0D3E, 0x0D47,
+ 0x0D3E, 0x0D46, 0x0D57, 0x0DD9, 0x0DCA, 0x0DD9, 0x0DCF, 0x0DD9, 0x0DCF, 0x0DCA, 0x0DD9, 0x0DDF,
+ 0x0F42, 0x0FB7, 0x0F4C, 0x0FB7, 0x0F51, 0x0FB7, 0x0F56, 0x0FB7, 0x0F5B, 0x0FB7, 0x0F40, 0x0FB5,
+ 0x0F71, 0x0F72, 0x0F71, 0x0F74, 0x0FB2, 0x0F80, 0x0FB3, 0x0F80, 0x0F71, 0x0F80, 0x0F92, 0x0FB7,
+ 0x0F9C, 0x0FB7, 0x0FA1, 0x0FB7, 0x0FA6, 0x0FB7, 0x0FAB, 0x0FB7, 0x0F90, 0x0FB5, 0x1025, 0x102E,
+ 0x1B05, 0x1B35, 0x1B07, 0x1B35, 0x1B09, 0x1B35, 0x1B0B, 0x1B35, 0x1B0D, 0x1B35, 0x1B11, 0x1B35,
+ 0x1B3A, 0x1B35, 0x1B3C, 0x1B35, 0x1B3E, 0x1B35, 0x1B3F, 0x1B35, 0x1B42, 0x1B35, 0x0041, 0x0325,
+ 0x0061, 0x0325, 0x0042, 0x0307, 0x0062, 0x0307, 0x0042, 0x0323, 0x0062, 0x0323, 0x0042, 0x0331,
+ 0x0062, 0x0331, 0x0043, 0x0327, 0x0301, 0x0063, 0x0327, 0x0301, 0x0044, 0x0307, 0x0064, 0x0307,
+ 0x0044, 0x0323, 0x0064, 0x0323, 0x0044, 0x0331, 0x0064, 0x0331, 0x0044, 0x0327, 0x0064, 0x0327,
+ 0x0044, 0x032D, 0x0064, 0x032D, 0x0045, 0x0304, 0x0300, 0x0065, 0x0304, 0x0300, 0x0045, 0x0304,
+ 0x0301, 0x0065, 0x0304, 0x0301, 0x0045, 0x032D, 0x0065, 0x032D, 0x0045, 0x0330, 0x0065, 0x0330,
+ 0x0045, 0x0327, 0x0306, 0x0065, 0x0327, 0x0306, 0x0046, 0x0307, 0x0066, 0x0307, 0x0047, 0x0304,
+ 0x0067, 0x0304, 0x0048, 0x0307, 0x0068, 0x0307, 0x0048, 0x0323, 0x0068, 0x0323, 0x0048, 0x0308,
+ 0x0068, 0x0308, 0x0048, 0x0327, 0x0068, 0x0327, 0x0048, 0x032E, 0x0068, 0x032E, 0x0049, 0x0330,
+ 0x0069, 0x0330, 0x0049, 0x0308, 0x0301, 0x0069, 0x0308, 0x0301, 0x004B, 0x0301, 0x006B, 0x0301,
+ 0x004B, 0x0323, 0x006B, 0x0323, 0x004B, 0x0331, 0x006B, 0x0331, 0x004C, 0x0323, 0x006C, 0x0323,
+ 0x004C, 0x0323, 0x0304, 0x006C, 0x0323, 0x0304, 0x004C, 0x0331, 0x006C, 0x0331, 0x004C, 0x032D,
+ 0x006C, 0x032D, 0x004D, 0x0301, 0x006D, 0x0301, 0x004D, 0x0307, 0x006D, 0x0307, 0x004D, 0x0323,
+ 0x006D, 0x0323, 0x004E, 0x0307, 0x006E, 0x0307, 0x004E, 0x0323, 0x006E, 0x0323, 0x004E, 0x0331,
+ 0x006E, 0x0331, 0x004E, 0x032D, 0x006E, 0x032D, 0x004F, 0x0303, 0x0301, 0x006F, 0x0303, 0x0301,
+ 0x004F, 0x0303, 0x0308, 0x006F, 0x0303, 0x0308, 0x004F, 0x0304, 0x0300, 0x006F, 0x0304, 0x0300,
+ 0x004F, 0x0304, 0x0301, 0x006F, 0x0304, 0x0301, 0x0050, 0x0301, 0x0070, 0x0301, 0x0050, 0x0307,
+ 0x0070, 0x0307, 0x0052, 0x0307, 0x0072, 0x0307, 0x0052, 0x0323, 0x0072, 0x0323, 0x0052, 0x0323,
+ 0x0304, 0x0072, 0x0323, 0x0304, 0x0052, 0x0331, 0x0072, 0x0331, 0x0053, 0x0307, 0x0073, 0x0307,
+ 0x0053, 0x0323, 0x0073, 0x0323, 0x0053, 0x0301, 0x0307, 0x0073, 0x0301, 0x0307, 0x0053, 0x030C,
+ 0x0307, 0x0073, 0x030C, 0x0307, 0x0053, 0x0323, 0x0307, 0x0073, 0x0323, 0x0307, 0x0054, 0x0307,
+ 0x0074, 0x0307, 0x0054, 0x0323, 0x0074, 0x0323, 0x0054, 0x0331, 0x0074, 0x0331, 0x0054, 0x032D,
+ 0x0074, 0x032D, 0x0055, 0x0324, 0x0075, 0x0324, 0x0055, 0x0330, 0x0075, 0x0330, 0x0055, 0x032D,
+ 0x0075, 0x032D, 0x0055, 0x0303, 0x0301, 0x0075, 0x0303, 0x0301, 0x0055, 0x0304, 0x0308, 0x0075,
+ 0x0304, 0x0308, 0x0056, 0x0303, 0x0076, 0x0303, 0x0056, 0x0323, 0x0076, 0x0323, 0x0057, 0x0300,
+ 0x0077, 0x0300, 0x0057, 0x0301, 0x0077, 0x0301, 0x0057, 0x0308, 0x0077, 0x0308, 0x0057, 0x0307,
+ 0x0077, 0x0307, 0x0057, 0x0323, 0x0077, 0x0323, 0x0058, 0x0307, 0x0078, 0x0307, 0x0058, 0x0308,
+ 0x0078, 0x0308, 0x0059, 0x0307, 0x0079, 0x0307, 0x005A, 0x0302, 0x007A, 0x0302, 0x005A, 0x0323,
+ 0x007A, 0x0323, 0x005A, 0x0331, 0x007A, 0x0331, 0x0068, 0x0331, 0x0074, 0x0308, 0x0077, 0x030A,
+ 0x0079, 0x030A, 0x017F, 0x0307, 0x0041, 0x0323, 0x0061, 0x0323, 0x0041, 0x0309, 0x0061, 0x0309,
+ 0x0041, 0x0302, 0x0301, 0x0061, 0x0302, 0x0301, 0x0041, 0x0302, 0x0300, 0x0061, 0x0302, 0x0300,
+ 0x0041, 0x0302, 0x0309, 0x0061, 0x0302, 0x0309, 0x0041, 0x0302, 0x0303, 0x0061, 0x0302, 0x0303,
+ 0x0041, 0x0323, 0x0302, 0x0061, 0x0323, 0x0302, 0x0041, 0x0306, 0x0301, 0x0061, 0x0306, 0x0301,
+ 0x0041, 0x0306, 0x0300, 0x0061, 0x0306, 0x0300, 0x0041, 0x0306, 0x0309, 0x0061, 0x0306, 0x0309,
+ 0x0041, 0x0306, 0x0303, 0x0061, 0x0306, 0x0303, 0x0041, 0x0323, 0x0306, 0x0061, 0x0323, 0x0306,
+ 0x0045, 0x0323, 0x0065, 0x0323, 0x0045, 0x0309, 0x0065, 0x0309, 0x0045, 0x0303, 0x0065, 0x0303,
+ 0x0045, 0x0302, 0x0301, 0x0065, 0x0302, 0x0301, 0x0045, 0x0302, 0x0300, 0x0065, 0x0302, 0x0300,
+ 0x0045, 0x0302, 0x0309, 0x0065, 0x0302, 0x0309, 0x0045, 0x0302, 0x0303, 0x0065, 0x0302, 0x0303,
+ 0x0045, 0x0323, 0x0302, 0x0065, 0x0323, 0x0302, 0x0049, 0x0309, 0x0069, 0x0309, 0x0049, 0x0323,
+ 0x0069, 0x0323, 0x004F, 0x0323, 0x006F, 0x0323, 0x004F, 0x0309, 0x006F, 0x0309, 0x004F, 0x0302,
+ 0x0301, 0x006F, 0x0302, 0x0301, 0x004F, 0x0302, 0x0300, 0x006F, 0x0302, 0x0300, 0x004F, 0x0302,
+ 0x0309, 0x006F, 0x0302, 0x0309, 0x004F, 0x0302, 0x0303, 0x006F, 0x0302, 0x0303, 0x004F, 0x0323,
+ 0x0302, 0x006F, 0x0323, 0x0302, 0x004F, 0x031B, 0x0301, 0x006F, 0x031B, 0x0301, 0x004F, 0x031B,
+ 0x0300, 0x006F, 0x031B, 0x0300, 0x004F, 0x031B, 0x0309, 0x006F, 0x031B, 0x0309, 0x004F, 0x031B,
+ 0x0303, 0x006F, 0x031B, 0x0303, 0x004F, 0x031B, 0x0323, 0x006F, 0x031B, 0x0323, 0x0055, 0x0323,
+ 0x0075, 0x0323, 0x0055, 0x0309, 0x0075, 0x0309, 0x0055, 0x031B, 0x0301, 0x0075, 0x031B, 0x0301,
+ 0x0055, 0x031B, 0x0300, 0x0075, 0x031B, 0x0300, 0x0055, 0x031B, 0x0309, 0x0075, 0x031B, 0x0309,
+ 0x0055, 0x031B, 0x0303, 0x0075, 0x031B, 0x0303, 0x0055, 0x031B, 0x0323, 0x0075, 0x031B, 0x0323,
+ 0x0059, 0x0300, 0x0079, 0x0300, 0x0059, 0x0323, 0x0079, 0x0323, 0x0059, 0x0309, 0x0079, 0x0309,
+ 0x0059, 0x0303, 0x0079, 0x0303, 0x03B1, 0x0313, 0x03B1, 0x0314, 0x03B1, 0x0313, 0x0300, 0x03B1,
+ 0x0314, 0x0300, 0x03B1, 0x0313, 0x0301, 0x03B1, 0x0314, 0x0301, 0x03B1, 0x0313, 0x0342, 0x03B1,
+ 0x0314, 0x0342, 0x0391, 0x0313, 0x0391, 0x0314, 0x0391, 0x0313, 0x0300, 0x0391, 0x0314, 0x0300,
+ 0x0391, 0x0313, 0x0301, 0x0391, 0x0314, 0x0301, 0x0391, 0x0313, 0x0342, 0x0391, 0x0314, 0x0342,
+ 0x03B5, 0x0313, 0x03B5, 0x0314, 0x03B5, 0x0313, 0x0300, 0x03B5, 0x0314, 0x0300, 0x03B5, 0x0313,
+ 0x0301, 0x03B5, 0x0314, 0x0301, 0x0395, 0x0313, 0x0395, 0x0314, 0x0395, 0x0313, 0x0300, 0x0395,
+ 0x0314, 0x0300, 0x0395, 0x0313, 0x0301, 0x0395, 0x0314, 0x0301, 0x03B7, 0x0313, 0x03B7, 0x0314,
+ 0x03B7, 0x0313, 0x0300, 0x03B7, 0x0314, 0x0300, 0x03B7, 0x0313, 0x0301, 0x03B7, 0x0314, 0x0301,
+ 0x03B7, 0x0313, 0x0342, 0x03B7, 0x0314, 0x0342, 0x0397, 0x0313, 0x0397, 0x0314, 0x0397, 0x0313,
+ 0x0300, 0x0397, 0x0314, 0x0300, 0x0397, 0x0313, 0x0301, 0x0397, 0x0314, 0x0301, 0x0397, 0x0313,
+ 0x0342, 0x0397, 0x0314, 0x0342, 0x03B9, 0x0313, 0x03B9, 0x0314, 0x03B9, 0x0313, 0x0300, 0x03B9,
+ 0x0314, 0x0300, 0x03B9, 0x0313, 0x0301, 0x03B9, 0x0314, 0x0301, 0x03B9, 0x0313, 0x0342, 0x03B9,
+ 0x0314, 0x0342, 0x0399, 0x0313, 0x0399, 0x0314, 0x0399, 0x0313, 0x0300, 0x0399, 0x0314, 0x0300,
+ 0x0399, 0x0313, 0x0301, 0x0399, 0x0314, 0x0301, 0x0399, 0x0313, 0x0342, 0x0399, 0x0314, 0x0342,
+ 0x03BF, 0x0313, 0x03BF, 0x0314, 0x03BF, 0x0313, 0x0300, 0x03BF, 0x0314, 0x0300, 0x03BF, 0x0313,
+ 0x0301, 0x03BF, 0x0314, 0x0301, 0x039F, 0x0313, 0x039F, 0x0314, 0x039F, 0x0313, 0x0300, 0x039F,
+ 0x0314, 0x0300, 0x039F, 0x0313, 0x0301, 0x039F, 0x0314, 0x0301, 0x03C5, 0x0313, 0x03C5, 0x0314,
+ 0x03C5, 0x0313, 0x0300, 0x03C5, 0x0314, 0x0300, 0x03C5, 0x0313, 0x0301, 0x03C5, 0x0314, 0x0301,
+ 0x03C5, 0x0313, 0x0342, 0x03C5, 0x0314, 0x0342, 0x03A5, 0x0314, 0x03A5, 0x0314, 0x0300, 0x03A5,
+ 0x0314, 0x0301, 0x03A5, 0x0314, 0x0342, 0x03C9, 0x0313, 0x03C9, 0x0314, 0x03C9, 0x0313, 0x0300,
+ 0x03C9, 0x0314, 0x0300, 0x03C9, 0x0313, 0x0301, 0x03C9, 0x0314, 0x0301, 0x03C9, 0x0313, 0x0342,
+ 0x03C9, 0x0314, 0x0342, 0x03A9, 0x0313, 0x03A9, 0x0314, 0x03A9, 0x0313, 0x0300, 0x03A9, 0x0314,
+ 0x0300, 0x03A9, 0x0313, 0x0301, 0x03A9, 0x0314, 0x0301, 0x03A9, 0x0313, 0x0342, 0x03A9, 0x0314,
+ 0x0342, 0x03B1, 0x0300, 0x03B1, 0x0301, 0x03B5, 0x0300, 0x03B5, 0x0301, 0x03B7, 0x0300, 0x03B7,
+ 0x0301, 0x03B9, 0x0300, 0x03B9, 0x0301, 0x03BF, 0x0300, 0x03BF, 0x0301, 0x03C5, 0x0300, 0x03C5,
+ 0x0301, 0x03C9, 0x0300, 0x03C9, 0x0301, 0x03B1, 0x0313, 0x0345, 0x03B1, 0x0314, 0x0345, 0x03B1,
+ 0x0313, 0x0300, 0x0345, 0x03B1, 0x0314, 0x0300, 0x0345, 0x03B1, 0x0313, 0x0301, 0x0345, 0x03B1,
+ 0x0314, 0x0301, 0x0345, 0x03B1, 0x0313, 0x0342, 0x0345, 0x03B1, 0x0314, 0x0342, 0x0345, 0x0391,
+ 0x0313, 0x0345, 0x0391, 0x0314, 0x0345, 0x0391, 0x0313, 0x0300, 0x0345, 0x0391, 0x0314, 0x0300,
+ 0x0345, 0x0391, 0x0313, 0x0301, 0x0345, 0x0391, 0x0314, 0x0301, 0x0345, 0x0391, 0x0313, 0x0342,
+ 0x0345, 0x0391, 0x0314, 0x0342, 0x0345, 0x03B7, 0x0313, 0x0345, 0x03B7, 0x0314, 0x0345, 0x03B7,
+ 0x0313, 0x0300, 0x0345, 0x03B7, 0x0314, 0x0300, 0x0345, 0x03B7, 0x0313, 0x0301, 0x0345, 0x03B7,
+ 0x0314, 0x0301, 0x0345, 0x03B7, 0x0313, 0x0342, 0x0345, 0x03B7, 0x0314, 0x0342, 0x0345, 0x0397,
+ 0x0313, 0x0345, 0x0397, 0x0314, 0x0345, 0x0397, 0x0313, 0x0300, 0x0345, 0x0397, 0x0314, 0x0300,
+ 0x0345, 0x0397, 0x0313, 0x0301, 0x0345, 0x0397, 0x0314, 0x0301, 0x0345, 0x0397, 0x0313, 0x0342,
+ 0x0345, 0x0397, 0x0314, 0x0342, 0x0345, 0x03C9, 0x0313, 0x0345, 0x03C9, 0x0314, 0x0345, 0x03C9,
+ 0x0313, 0x0300, 0x0345, 0x03C9, 0x0314, 0x0300, 0x0345, 0x03C9, 0x0313, 0x0301, 0x0345, 0x03C9,
+ 0x0314, 0x0301, 0x0345, 0x03C9, 0x0313, 0x0342, 0x0345, 0x03C9, 0x0314, 0x0342, 0x0345, 0x03A9,
+ 0x0313, 0x0345, 0x03A9, 0x0314, 0x0345, 0x03A9, 0x0313, 0x0300, 0x0345, 0x03A9, 0x0314, 0x0300,
+ 0x0345, 0x03A9, 0x0313, 0x0301, 0x0345, 0x03A9, 0x0314, 0x0301, 0x0345, 0x03A9, 0x0313, 0x0342,
+ 0x0345, 0x03A9, 0x0314, 0x0342, 0x0345, 0x03B1, 0x0306, 0x03B1, 0x0304, 0x03B1, 0x0300, 0x0345,
+ 0x03B1, 0x0345, 0x03B1, 0x0301, 0x0345, 0x03B1, 0x0342, 0x03B1, 0x0342, 0x0345, 0x0391, 0x0306,
+ 0x0391, 0x0304, 0x0391, 0x0300, 0x0391, 0x0301, 0x0391, 0x0345, 0x03B9, 0x00A8, 0x0342, 0x03B7,
+ 0x0300, 0x0345, 0x03B7, 0x0345, 0x03B7, 0x0301, 0x0345, 0x03B7, 0x0342, 0x03B7, 0x0342, 0x0345,
+ 0x0395, 0x0300, 0x0395, 0x0301, 0x0397, 0x0300, 0x0397, 0x0301, 0x0397, 0x0345, 0x1FBF, 0x0300,
+ 0x1FBF, 0x0301, 0x1FBF, 0x0342, 0x03B9, 0x0306, 0x03B9, 0x0304, 0x03B9, 0x0308, 0x0300, 0x03B9,
+ 0x0308, 0x0301, 0x03B9, 0x0342, 0x03B9, 0x0308, 0x0342, 0x0399, 0x0306, 0x0399, 0x0304, 0x0399,
+ 0x0300, 0x0399, 0x0301, 0x1FFE, 0x0300, 0x1FFE, 0x0301, 0x1FFE, 0x0342, 0x03C5, 0x0306, 0x03C5,
+ 0x0304, 0x03C5, 0x0308, 0x0300, 0x03C5, 0x0308, 0x0301, 0x03C1, 0x0313, 0x03C1, 0x0314, 0x03C5,
+ 0x0342, 0x03C5, 0x0308, 0x0342, 0x03A5, 0x0306, 0x03A5, 0x0304, 0x03A5, 0x0300, 0x03A5, 0x0301,
+ 0x03A1, 0x0314, 0x00A8, 0x0300, 0x00A8, 0x0301, 0x0060, 0x03C9, 0x0300, 0x0345, 0x03C9, 0x0345,
+ 0x03C9, 0x0301, 0x0345, 0x03C9, 0x0342, 0x03C9, 0x0342, 0x0345, 0x039F, 0x0300, 0x039F, 0x0301,
+ 0x03A9, 0x0300, 0x03A9, 0x0301, 0x03A9, 0x0345, 0x00B4, 0x2002, 0x2003, 0x03A9, 0x004B, 0x0041,
+ 0x030A, 0x2190, 0x0338, 0x2192, 0x0338, 0x2194, 0x0338, 0x21D0, 0x0338, 0x21D4, 0x0338, 0x21D2,
+ 0x0338, 0x2203, 0x0338, 0x2208, 0x0338, 0x220B, 0x0338, 0x2223, 0x0338, 0x2225, 0x0338, 0x223C,
+ 0x0338, 0x2243, 0x0338, 0x2245, 0x0338, 0x2248, 0x0338, 0x003D, 0x0338, 0x2261, 0x0338, 0x224D,
+ 0x0338, 0x003C, 0x0338, 0x003E, 0x0338, 0x2264, 0x0338, 0x2265, 0x0338, 0x2272, 0x0338, 0x2273,
+ 0x0338, 0x2276, 0x0338, 0x2277, 0x0338, 0x227A, 0x0338, 0x227B, 0x0338, 0x2282, 0x0338, 0x2283,
+ 0x0338, 0x2286, 0x0338, 0x2287, 0x0338, 0x22A2, 0x0338, 0x22A8, 0x0338, 0x22A9, 0x0338, 0x22AB,
+ 0x0338, 0x227C, 0x0338, 0x227D, 0x0338, 0x2291, 0x0338, 0x2292, 0x0338, 0x22B2, 0x0338, 0x22B3,
+ 0x0338, 0x22B4, 0x0338, 0x22B5, 0x0338, 0x3008, 0x3009, 0x2ADD, 0x0338, 0x304B, 0x3099, 0x304D,
+ 0x3099, 0x304F, 0x3099, 0x3051, 0x3099, 0x3053, 0x3099, 0x3055, 0x3099, 0x3057, 0x3099, 0x3059,
+ 0x3099, 0x305B, 0x3099, 0x305D, 0x3099, 0x305F, 0x3099, 0x3061, 0x3099, 0x3064, 0x3099, 0x3066,
+ 0x3099, 0x3068, 0x3099, 0x306F, 0x3099, 0x306F, 0x309A, 0x3072, 0x3099, 0x3072, 0x309A, 0x3075,
+ 0x3099, 0x3075, 0x309A, 0x3078, 0x3099, 0x3078, 0x309A, 0x307B, 0x3099, 0x307B, 0x309A, 0x3046,
+ 0x3099, 0x309D, 0x3099, 0x30AB, 0x3099, 0x30AD, 0x3099, 0x30AF, 0x3099, 0x30B1, 0x3099, 0x30B3,
+ 0x3099, 0x30B5, 0x3099, 0x30B7, 0x3099, 0x30B9, 0x3099, 0x30BB, 0x3099, 0x30BD, 0x3099, 0x30BF,
+ 0x3099, 0x30C1, 0x3099, 0x30C4, 0x3099, 0x30C6, 0x3099, 0x30C8, 0x3099, 0x30CF, 0x3099, 0x30CF,
+ 0x309A, 0x30D2, 0x3099, 0x30D2, 0x309A, 0x30D5, 0x3099, 0x30D5, 0x309A, 0x30D8, 0x3099, 0x30D8,
+ 0x309A, 0x30DB, 0x3099, 0x30DB, 0x309A, 0x30A6, 0x3099, 0x30EF, 0x3099, 0x30F0, 0x3099, 0x30F1,
+ 0x3099, 0x30F2, 0x3099, 0x30FD, 0x3099, 0x8C48, 0x66F4, 0x8ECA, 0x8CC8, 0x6ED1, 0x4E32, 0x53E5,
+ 0x9F9C, 0x9F9C, 0x5951, 0x91D1, 0x5587, 0x5948, 0x61F6, 0x7669, 0x7F85, 0x863F, 0x87BA, 0x88F8,
+ 0x908F, 0x6A02, 0x6D1B, 0x70D9, 0x73DE, 0x843D, 0x916A, 0x99F1, 0x4E82, 0x5375, 0x6B04, 0x721B,
+ 0x862D, 0x9E1E, 0x5D50, 0x6FEB, 0x85CD, 0x8964, 0x62C9, 0x81D8, 0x881F, 0x5ECA, 0x6717, 0x6D6A,
+ 0x72FC, 0x90CE, 0x4F86, 0x51B7, 0x52DE, 0x64C4, 0x6AD3, 0x7210, 0x76E7, 0x8001, 0x8606, 0x865C,
+ 0x8DEF, 0x9732, 0x9B6F, 0x9DFA, 0x788C, 0x797F, 0x7DA0, 0x83C9, 0x9304, 0x9E7F, 0x8AD6, 0x58DF,
+ 0x5F04, 0x7C60, 0x807E, 0x7262, 0x78CA, 0x8CC2, 0x96F7, 0x58D8, 0x5C62, 0x6A13, 0x6DDA, 0x6F0F,
+ 0x7D2F, 0x7E37, 0x964B, 0x52D2, 0x808B, 0x51DC, 0x51CC, 0x7A1C, 0x7DBE, 0x83F1, 0x9675, 0x8B80,
+ 0x62CF, 0x6A02, 0x8AFE, 0x4E39, 0x5BE7, 0x6012, 0x7387, 0x7570, 0x5317, 0x78FB, 0x4FBF, 0x5FA9,
+ 0x4E0D, 0x6CCC, 0x6578, 0x7D22, 0x53C3, 0x585E, 0x7701, 0x8449, 0x8AAA, 0x6BBA, 0x8FB0, 0x6C88,
+ 0x62FE, 0x82E5, 0x63A0, 0x7565, 0x4EAE, 0x5169, 0x51C9, 0x6881, 0x7CE7, 0x826F, 0x8AD2, 0x91CF,
+ 0x52F5, 0x5442, 0x5973, 0x5EEC, 0x65C5, 0x6FFE, 0x792A, 0x95AD, 0x9A6A, 0x9E97, 0x9ECE, 0x529B,
+ 0x66C6, 0x6B77, 0x8F62, 0x5E74, 0x6190, 0x6200, 0x649A, 0x6F23, 0x7149, 0x7489, 0x79CA, 0x7DF4,
+ 0x806F, 0x8F26, 0x84EE, 0x9023, 0x934A, 0x5217, 0x52A3, 0x54BD, 0x70C8, 0x88C2, 0x8AAA, 0x5EC9,
+ 0x5FF5, 0x637B, 0x6BAE, 0x7C3E, 0x7375, 0x4EE4, 0x56F9, 0x5BE7, 0x5DBA, 0x601C, 0x73B2, 0x7469,
+ 0x7F9A, 0x8046, 0x9234, 0x96F6, 0x9748, 0x9818, 0x4F8B, 0x79AE, 0x91B4, 0x96B8, 0x60E1, 0x4E86,
+ 0x50DA, 0x5BEE, 0x5C3F, 0x6599, 0x6A02, 0x71CE, 0x7642, 0x84FC, 0x907C, 0x9F8D, 0x6688, 0x962E,
+ 0x5289, 0x677B, 0x67F3, 0x6D41, 0x6E9C, 0x7409, 0x7559, 0x786B, 0x7D10, 0x985E, 0x516D, 0x622E,
+ 0x9678, 0x502B, 0x5D19, 0x6DEA, 0x8F2A, 0x5F8B, 0x6144, 0x6817, 0x7387, 0x9686, 0x5229, 0x540F,
+ 0x5C65, 0x6613, 0x674E, 0x68A8, 0x6CE5, 0x7406, 0x75E2, 0x7F79, 0x88CF, 0x88E1, 0x91CC, 0x96E2,
+ 0x533F, 0x6EBA, 0x541D, 0x71D0, 0x7498, 0x85FA, 0x96A3, 0x9C57, 0x9E9F, 0x6797, 0x6DCB, 0x81E8,
+ 0x7ACB, 0x7B20, 0x7C92, 0x72C0, 0x7099, 0x8B58, 0x4EC0, 0x8336, 0x523A, 0x5207, 0x5EA6, 0x62D3,
+ 0x7CD6, 0x5B85, 0x6D1E, 0x66B4, 0x8F3B, 0x884C, 0x964D, 0x898B, 0x5ED3, 0x5140, 0x55C0, 0x585A,
+ 0x6674, 0x51DE, 0x732A, 0x76CA, 0x793C, 0x795E, 0x7965, 0x798F, 0x9756, 0x7CBE, 0x7FBD, 0x8612,
+ 0x8AF8, 0x9038, 0x90FD, 0x98EF, 0x98FC, 0x9928, 0x9DB4, 0x90DE, 0x96B7, 0x4FAE, 0x50E7, 0x514D,
+ 0x52C9, 0x52E4, 0x5351, 0x559D, 0x5606, 0x5668, 0x5840, 0x58A8, 0x5C64, 0x5C6E, 0x6094, 0x6168,
+ 0x618E, 0x61F2, 0x654F, 0x65E2, 0x6691, 0x6885, 0x6D77, 0x6E1A, 0x6F22, 0x716E, 0x722B, 0x7422,
+ 0x7891, 0x793E, 0x7949, 0x7948, 0x7950, 0x7956, 0x795D, 0x798D, 0x798E, 0x7A40, 0x7A81, 0x7BC0,
+ 0x7DF4, 0x7E09, 0x7E41, 0x7F72, 0x8005, 0x81ED, 0x8279, 0x8279, 0x8457, 0x8910, 0x8996, 0x8B01,
+ 0x8B39, 0x8CD3, 0x8D08, 0x8FB6, 0x9038, 0x96E3, 0x97FF, 0x983B, 0x6075, 0x242EE, 0x8218, 0x4E26,
+ 0x51B5, 0x5168, 0x4F80, 0x5145, 0x5180, 0x52C7, 0x52FA, 0x559D, 0x5555, 0x5599, 0x55E2, 0x585A,
+ 0x58B3, 0x5944, 0x5954, 0x5A62, 0x5B28, 0x5ED2, 0x5ED9, 0x5F69, 0x5FAD, 0x60D8, 0x614E, 0x6108,
+ 0x618E, 0x6160, 0x61F2, 0x6234, 0x63C4, 0x641C, 0x6452, 0x6556, 0x6674, 0x6717, 0x671B, 0x6756,
+ 0x6B79, 0x6BBA, 0x6D41, 0x6EDB, 0x6ECB, 0x6F22, 0x701E, 0x716E, 0x77A7, 0x7235, 0x72AF, 0x732A,
+ 0x7471, 0x7506, 0x753B, 0x761D, 0x761F, 0x76CA, 0x76DB, 0x76F4, 0x774A, 0x7740, 0x78CC, 0x7AB1,
+ 0x7BC0, 0x7C7B, 0x7D5B, 0x7DF4, 0x7F3E, 0x8005, 0x8352, 0x83EF, 0x8779, 0x8941, 0x8986, 0x8996,
+ 0x8ABF, 0x8AF8, 0x8ACB, 0x8B01, 0x8AFE, 0x8AED, 0x8B39, 0x8B8A, 0x8D08, 0x8F38, 0x9072, 0x9199,
+ 0x9276, 0x967C, 0x96E3, 0x9756, 0x97DB, 0x97FF, 0x980B, 0x983B, 0x9B12, 0x9F9C, 0x2284A, 0x22844,
+ 0x233D5, 0x3B9D, 0x4018, 0x4039, 0x25249, 0x25CD0, 0x27ED3, 0x9F43, 0x9F8E, 0x05D9, 0x05B4, 0x05F2,
+ 0x05B7, 0x05E9, 0x05C1, 0x05E9, 0x05C2, 0x05E9, 0x05BC, 0x05C1, 0x05E9, 0x05BC, 0x05C2, 0x05D0,
+ 0x05B7, 0x05D0, 0x05B8, 0x05D0, 0x05BC, 0x05D1, 0x05BC, 0x05D2, 0x05BC, 0x05D3, 0x05BC, 0x05D4,
+ 0x05BC, 0x05D5, 0x05BC, 0x05D6, 0x05BC, 0x05D8, 0x05BC, 0x05D9, 0x05BC, 0x05DA, 0x05BC, 0x05DB,
+ 0x05BC, 0x05DC, 0x05BC, 0x05DE, 0x05BC, 0x05E0, 0x05BC, 0x05E1, 0x05BC, 0x05E3, 0x05BC, 0x05E4,
+ 0x05BC, 0x05E6, 0x05BC, 0x05E7, 0x05BC, 0x05E8, 0x05BC, 0x05E9, 0x05BC, 0x05EA, 0x05BC, 0x05D5,
+ 0x05B9, 0x05D1, 0x05BF, 0x05DB, 0x05BF, 0x05E4, 0x05BF, 0x11099, 0x110BA, 0x1109B, 0x110BA, 0x110A5,
+ 0x110BA, 0x11131, 0x11127, 0x11132, 0x11127, 0x11347, 0x1133E, 0x11347, 0x11357, 0x114B9, 0x114BA, 0x114B9,
+ 0x114B0, 0x114B9, 0x114BD, 0x115B8, 0x115AF, 0x115B9, 0x115AF, 0x11935, 0x11930, 0x1D157, 0x1D165, 0x1D158,
+ 0x1D165, 0x1D158, 0x1D165, 0x1D16E, 0x1D158, 0x1D165, 0x1D16F, 0x1D158, 0x1D165, 0x1D170, 0x1D158, 0x1D165,
+ 0x1D171, 0x1D158, 0x1D165, 0x1D172, 0x1D1B9, 0x1D165, 0x1D1BA, 0x1D165, 0x1D1B9, 0x1D165, 0x1D16E, 0x1D1BA,
+ 0x1D165, 0x1D16E, 0x1D1B9, 0x1D165, 0x1D16F, 0x1D1BA, 0x1D165, 0x1D16F, 0x4E3D, 0x4E38, 0x4E41, 0x20122,
+ 0x4F60, 0x4FAE, 0x4FBB, 0x5002, 0x507A, 0x5099, 0x50E7, 0x50CF, 0x349E, 0x2063A, 0x514D, 0x5154,
+ 0x5164, 0x5177, 0x2051C, 0x34B9, 0x5167, 0x518D, 0x2054B, 0x5197, 0x51A4, 0x4ECC, 0x51AC, 0x51B5,
+ 0x291DF, 0x51F5, 0x5203, 0x34DF, 0x523B, 0x5246, 0x5272, 0x5277, 0x3515, 0x52C7, 0x52C9, 0x52E4,
+ 0x52FA, 0x5305, 0x5306, 0x5317, 0x5349, 0x5351, 0x535A, 0x5373, 0x537D, 0x537F, 0x537F, 0x537F,
+ 0x20A2C, 0x7070, 0x53CA, 0x53DF, 0x20B63, 0x53EB, 0x53F1, 0x5406, 0x549E, 0x5438, 0x5448, 0x5468,
+ 0x54A2, 0x54F6, 0x5510, 0x5553, 0x5563, 0x5584, 0x5584, 0x5599, 0x55AB, 0x55B3, 0x55C2, 0x5716,
+ 0x5606, 0x5717, 0x5651, 0x5674, 0x5207, 0x58EE, 0x57CE, 0x57F4, 0x580D, 0x578B, 0x5832, 0x5831,
+ 0x58AC, 0x214E4, 0x58F2, 0x58F7, 0x5906, 0x591A, 0x5922, 0x5962, 0x216A8, 0x216EA, 0x59EC, 0x5A1B,
+ 0x5A27, 0x59D8, 0x5A66, 0x36EE, 0x36FC, 0x5B08, 0x5B3E, 0x5B3E, 0x219C8, 0x5BC3, 0x5BD8, 0x5BE7,
+ 0x5BF3, 0x21B18, 0x5BFF, 0x5C06, 0x5F53, 0x5C22, 0x3781, 0x5C60, 0x5C6E, 0x5CC0, 0x5C8D, 0x21DE4,
+ 0x5D43, 0x21DE6, 0x5D6E, 0x5D6B, 0x5D7C, 0x5DE1, 0x5DE2, 0x382F, 0x5DFD, 0x5E28, 0x5E3D, 0x5E69,
+ 0x3862, 0x22183, 0x387C, 0x5EB0, 0x5EB3, 0x5EB6, 0x5ECA, 0x2A392, 0x5EFE, 0x22331, 0x22331, 0x8201,
+ 0x5F22, 0x5F22, 0x38C7, 0x232B8, 0x261DA, 0x5F62, 0x5F6B, 0x38E3, 0x5F9A, 0x5FCD, 0x5FD7, 0x5FF9,
+ 0x6081, 0x393A, 0x391C, 0x6094, 0x226D4, 0x60C7, 0x6148, 0x614C, 0x614E, 0x614C, 0x617A, 0x618E,
+ 0x61B2, 0x61A4, 0x61AF, 0x61DE, 0x61F2, 0x61F6, 0x6210, 0x621B, 0x625D, 0x62B1, 0x62D4, 0x6350,
+ 0x22B0C, 0x633D, 0x62FC, 0x6368, 0x6383, 0x63E4, 0x22BF1, 0x6422, 0x63C5, 0x63A9, 0x3A2E, 0x6469,
+ 0x647E, 0x649D, 0x6477, 0x3A6C, 0x654F, 0x656C, 0x2300A, 0x65E3, 0x66F8, 0x6649, 0x3B19, 0x6691,
+ 0x3B08, 0x3AE4, 0x5192, 0x5195, 0x6700, 0x669C, 0x80AD, 0x43D9, 0x6717, 0x671B, 0x6721, 0x675E,
+ 0x6753, 0x233C3, 0x3B49, 0x67FA, 0x6785, 0x6852, 0x6885, 0x2346D, 0x688E, 0x681F, 0x6914, 0x3B9D,
+ 0x6942, 0x69A3, 0x69EA, 0x6AA8, 0x236A3, 0x6ADB, 0x3C18, 0x6B21, 0x238A7, 0x6B54, 0x3C4E, 0x6B72,
+ 0x6B9F, 0x6BBA, 0x6BBB, 0x23A8D, 0x21D0B, 0x23AFA, 0x6C4E, 0x23CBC, 0x6CBF, 0x6CCD, 0x6C67, 0x6D16,
+ 0x6D3E, 0x6D77, 0x6D41, 0x6D69, 0x6D78, 0x6D85, 0x23D1E, 0x6D34, 0x6E2F, 0x6E6E, 0x3D33, 0x6ECB,
+ 0x6EC7, 0x23ED1, 0x6DF9, 0x6F6E, 0x23F5E, 0x23F8E, 0x6FC6, 0x7039, 0x701E, 0x701B, 0x3D96, 0x704A,
+ 0x707D, 0x7077, 0x70AD, 0x20525, 0x7145, 0x24263, 0x719C, 0x243AB, 0x7228, 0x7235, 0x7250, 0x24608,
+ 0x7280, 0x7295, 0x24735, 0x24814, 0x737A, 0x738B, 0x3EAC, 0x73A5, 0x3EB8, 0x3EB8, 0x7447, 0x745C,
+ 0x7471, 0x7485, 0x74CA, 0x3F1B, 0x7524, 0x24C36, 0x753E, 0x24C92, 0x7570, 0x2219F, 0x7610, 0x24FA1,
+ 0x24FB8, 0x25044, 0x3FFC, 0x4008, 0x76F4, 0x250F3, 0x250F2, 0x25119, 0x25133, 0x771E, 0x771F, 0x771F,
+ 0x774A, 0x4039, 0x778B, 0x4046, 0x4096, 0x2541D, 0x784E, 0x788C, 0x78CC, 0x40E3, 0x25626, 0x7956,
+ 0x2569A, 0x256C5, 0x798F, 0x79EB, 0x412F, 0x7A40, 0x7A4A, 0x7A4F, 0x2597C, 0x25AA7, 0x25AA7, 0x7AEE,
+ 0x4202, 0x25BAB, 0x7BC6, 0x7BC9, 0x4227, 0x25C80, 0x7CD2, 0x42A0, 0x7CE8, 0x7CE3, 0x7D00, 0x25F86,
+ 0x7D63, 0x4301, 0x7DC7, 0x7E02, 0x7E45, 0x4334, 0x26228, 0x26247, 0x4359, 0x262D9, 0x7F7A, 0x2633E,
+ 0x7F95, 0x7FFA, 0x8005, 0x264DA, 0x26523, 0x8060, 0x265A8, 0x8070, 0x2335F, 0x43D5, 0x80B2, 0x8103,
+ 0x440B, 0x813E, 0x5AB5, 0x267A7, 0x267B5, 0x23393, 0x2339C, 0x8201, 0x8204, 0x8F9E, 0x446B, 0x8291,
+ 0x828B, 0x829D, 0x52B3, 0x82B1, 0x82B3, 0x82BD, 0x82E6, 0x26B3C, 0x82E5, 0x831D, 0x8363, 0x83AD,
+ 0x8323, 0x83BD, 0x83E7, 0x8457, 0x8353, 0x83CA, 0x83CC, 0x83DC, 0x26C36, 0x26D6B, 0x26CD5, 0x452B,
+ 0x84F1, 0x84F3, 0x8516, 0x273CA, 0x8564, 0x26F2C, 0x455D, 0x4561, 0x26FB1, 0x270D2, 0x456B, 0x8650,
+ 0x865C, 0x8667, 0x8669, 0x86A9, 0x8688, 0x870E, 0x86E2, 0x8779, 0x8728, 0x876B, 0x8786, 0x45D7,
+ 0x87E1, 0x8801, 0x45F9, 0x8860, 0x8863, 0x27667, 0x88D7, 0x88DE, 0x4635, 0x88FA, 0x34BB, 0x278AE,
+ 0x27966, 0x46BE, 0x46C7, 0x8AA0, 0x8AED, 0x8B8A, 0x8C55, 0x27CA8, 0x8CAB, 0x8CC1, 0x8D1B, 0x8D77,
+ 0x27F2F, 0x20804, 0x8DCB, 0x8DBC, 0x8DF0, 0x208DE, 0x8ED4, 0x8F38, 0x285D2, 0x285ED, 0x9094, 0x90F1,
+ 0x9111, 0x2872E, 0x911B, 0x9238, 0x92D7, 0x92D8, 0x927C, 0x93F9, 0x9415, 0x28BFA, 0x958B, 0x4995,
+ 0x95B7, 0x28D77, 0x49E6, 0x96C3, 0x5DB2, 0x9723, 0x29145, 0x2921A, 0x4A6E, 0x4A76, 0x97E0, 0x2940A,
+ 0x4AB2, 0x29496, 0x980B, 0x980B, 0x9829, 0x295B6, 0x98E2, 0x4B33, 0x9929, 0x99A7, 0x99C2, 0x99FE,
+ 0x4BCE, 0x29B30, 0x9B12, 0x9C40, 0x9CFD, 0x4CCE, 0x4CED, 0x9D67, 0x2A0CE, 0x4CF8, 0x2A105, 0x2A20E,
+ 0x2A291, 0x9EBB, 0x4D56, 0x9EF9, 0x9EFE, 0x9F05, 0x9F0F, 0x9F16, 0x9F3B, 0x2A600,
+};
+
+size_t vega_decomposition(uint32_t code, const uint32_t **out) {
+ long row = find(&decompositions[0][0], sizeof(decompositions) / sizeof(*decompositions), 3, code);
+ if (row < 0) return 0;
+ *out = decomposed + decompositions[row][1];
+ return decompositions[row][2];
+}
+
+/* The primary composites: first, second, composite, by first then second. */
+static const uint32_t compositions[941][3] = {
+ {0x003C, 0x0338, 0x226E},
+ {0x003D, 0x0338, 0x2260},
+ {0x003E, 0x0338, 0x226F},
+ {0x0041, 0x0300, 0x00C0},
+ {0x0041, 0x0301, 0x00C1},
+ {0x0041, 0x0302, 0x00C2},
+ {0x0041, 0x0303, 0x00C3},
+ {0x0041, 0x0304, 0x0100},
+ {0x0041, 0x0306, 0x0102},
+ {0x0041, 0x0307, 0x0226},
+ {0x0041, 0x0308, 0x00C4},
+ {0x0041, 0x0309, 0x1EA2},
+ {0x0041, 0x030A, 0x00C5},
+ {0x0041, 0x030C, 0x01CD},
+ {0x0041, 0x030F, 0x0200},
+ {0x0041, 0x0311, 0x0202},
+ {0x0041, 0x0323, 0x1EA0},
+ {0x0041, 0x0325, 0x1E00},
+ {0x0041, 0x0328, 0x0104},
+ {0x0042, 0x0307, 0x1E02},
+ {0x0042, 0x0323, 0x1E04},
+ {0x0042, 0x0331, 0x1E06},
+ {0x0043, 0x0301, 0x0106},
+ {0x0043, 0x0302, 0x0108},
+ {0x0043, 0x0307, 0x010A},
+ {0x0043, 0x030C, 0x010C},
+ {0x0043, 0x0327, 0x00C7},
+ {0x0044, 0x0307, 0x1E0A},
+ {0x0044, 0x030C, 0x010E},
+ {0x0044, 0x0323, 0x1E0C},
+ {0x0044, 0x0327, 0x1E10},
+ {0x0044, 0x032D, 0x1E12},
+ {0x0044, 0x0331, 0x1E0E},
+ {0x0045, 0x0300, 0x00C8},
+ {0x0045, 0x0301, 0x00C9},
+ {0x0045, 0x0302, 0x00CA},
+ {0x0045, 0x0303, 0x1EBC},
+ {0x0045, 0x0304, 0x0112},
+ {0x0045, 0x0306, 0x0114},
+ {0x0045, 0x0307, 0x0116},
+ {0x0045, 0x0308, 0x00CB},
+ {0x0045, 0x0309, 0x1EBA},
+ {0x0045, 0x030C, 0x011A},
+ {0x0045, 0x030F, 0x0204},
+ {0x0045, 0x0311, 0x0206},
+ {0x0045, 0x0323, 0x1EB8},
+ {0x0045, 0x0327, 0x0228},
+ {0x0045, 0x0328, 0x0118},
+ {0x0045, 0x032D, 0x1E18},
+ {0x0045, 0x0330, 0x1E1A},
+ {0x0046, 0x0307, 0x1E1E},
+ {0x0047, 0x0301, 0x01F4},
+ {0x0047, 0x0302, 0x011C},
+ {0x0047, 0x0304, 0x1E20},
+ {0x0047, 0x0306, 0x011E},
+ {0x0047, 0x0307, 0x0120},
+ {0x0047, 0x030C, 0x01E6},
+ {0x0047, 0x0327, 0x0122},
+ {0x0048, 0x0302, 0x0124},
+ {0x0048, 0x0307, 0x1E22},
+ {0x0048, 0x0308, 0x1E26},
+ {0x0048, 0x030C, 0x021E},
+ {0x0048, 0x0323, 0x1E24},
+ {0x0048, 0x0327, 0x1E28},
+ {0x0048, 0x032E, 0x1E2A},
+ {0x0049, 0x0300, 0x00CC},
+ {0x0049, 0x0301, 0x00CD},
+ {0x0049, 0x0302, 0x00CE},
+ {0x0049, 0x0303, 0x0128},
+ {0x0049, 0x0304, 0x012A},
+ {0x0049, 0x0306, 0x012C},
+ {0x0049, 0x0307, 0x0130},
+ {0x0049, 0x0308, 0x00CF},
+ {0x0049, 0x0309, 0x1EC8},
+ {0x0049, 0x030C, 0x01CF},
+ {0x0049, 0x030F, 0x0208},
+ {0x0049, 0x0311, 0x020A},
+ {0x0049, 0x0323, 0x1ECA},
+ {0x0049, 0x0328, 0x012E},
+ {0x0049, 0x0330, 0x1E2C},
+ {0x004A, 0x0302, 0x0134},
+ {0x004B, 0x0301, 0x1E30},
+ {0x004B, 0x030C, 0x01E8},
+ {0x004B, 0x0323, 0x1E32},
+ {0x004B, 0x0327, 0x0136},
+ {0x004B, 0x0331, 0x1E34},
+ {0x004C, 0x0301, 0x0139},
+ {0x004C, 0x030C, 0x013D},
+ {0x004C, 0x0323, 0x1E36},
+ {0x004C, 0x0327, 0x013B},
+ {0x004C, 0x032D, 0x1E3C},
+ {0x004C, 0x0331, 0x1E3A},
+ {0x004D, 0x0301, 0x1E3E},
+ {0x004D, 0x0307, 0x1E40},
+ {0x004D, 0x0323, 0x1E42},
+ {0x004E, 0x0300, 0x01F8},
+ {0x004E, 0x0301, 0x0143},
+ {0x004E, 0x0303, 0x00D1},
+ {0x004E, 0x0307, 0x1E44},
+ {0x004E, 0x030C, 0x0147},
+ {0x004E, 0x0323, 0x1E46},
+ {0x004E, 0x0327, 0x0145},
+ {0x004E, 0x032D, 0x1E4A},
+ {0x004E, 0x0331, 0x1E48},
+ {0x004F, 0x0300, 0x00D2},
+ {0x004F, 0x0301, 0x00D3},
+ {0x004F, 0x0302, 0x00D4},
+ {0x004F, 0x0303, 0x00D5},
+ {0x004F, 0x0304, 0x014C},
+ {0x004F, 0x0306, 0x014E},
+ {0x004F, 0x0307, 0x022E},
+ {0x004F, 0x0308, 0x00D6},
+ {0x004F, 0x0309, 0x1ECE},
+ {0x004F, 0x030B, 0x0150},
+ {0x004F, 0x030C, 0x01D1},
+ {0x004F, 0x030F, 0x020C},
+ {0x004F, 0x0311, 0x020E},
+ {0x004F, 0x031B, 0x01A0},
+ {0x004F, 0x0323, 0x1ECC},
+ {0x004F, 0x0328, 0x01EA},
+ {0x0050, 0x0301, 0x1E54},
+ {0x0050, 0x0307, 0x1E56},
+ {0x0052, 0x0301, 0x0154},
+ {0x0052, 0x0307, 0x1E58},
+ {0x0052, 0x030C, 0x0158},
+ {0x0052, 0x030F, 0x0210},
+ {0x0052, 0x0311, 0x0212},
+ {0x0052, 0x0323, 0x1E5A},
+ {0x0052, 0x0327, 0x0156},
+ {0x0052, 0x0331, 0x1E5E},
+ {0x0053, 0x0301, 0x015A},
+ {0x0053, 0x0302, 0x015C},
+ {0x0053, 0x0307, 0x1E60},
+ {0x0053, 0x030C, 0x0160},
+ {0x0053, 0x0323, 0x1E62},
+ {0x0053, 0x0326, 0x0218},
+ {0x0053, 0x0327, 0x015E},
+ {0x0054, 0x0307, 0x1E6A},
+ {0x0054, 0x030C, 0x0164},
+ {0x0054, 0x0323, 0x1E6C},
+ {0x0054, 0x0326, 0x021A},
+ {0x0054, 0x0327, 0x0162},
+ {0x0054, 0x032D, 0x1E70},
+ {0x0054, 0x0331, 0x1E6E},
+ {0x0055, 0x0300, 0x00D9},
+ {0x0055, 0x0301, 0x00DA},
+ {0x0055, 0x0302, 0x00DB},
+ {0x0055, 0x0303, 0x0168},
+ {0x0055, 0x0304, 0x016A},
+ {0x0055, 0x0306, 0x016C},
+ {0x0055, 0x0308, 0x00DC},
+ {0x0055, 0x0309, 0x1EE6},
+ {0x0055, 0x030A, 0x016E},
+ {0x0055, 0x030B, 0x0170},
+ {0x0055, 0x030C, 0x01D3},
+ {0x0055, 0x030F, 0x0214},
+ {0x0055, 0x0311, 0x0216},
+ {0x0055, 0x031B, 0x01AF},
+ {0x0055, 0x0323, 0x1EE4},
+ {0x0055, 0x0324, 0x1E72},
+ {0x0055, 0x0328, 0x0172},
+ {0x0055, 0x032D, 0x1E76},
+ {0x0055, 0x0330, 0x1E74},
+ {0x0056, 0x0303, 0x1E7C},
+ {0x0056, 0x0323, 0x1E7E},
+ {0x0057, 0x0300, 0x1E80},
+ {0x0057, 0x0301, 0x1E82},
+ {0x0057, 0x0302, 0x0174},
+ {0x0057, 0x0307, 0x1E86},
+ {0x0057, 0x0308, 0x1E84},
+ {0x0057, 0x0323, 0x1E88},
+ {0x0058, 0x0307, 0x1E8A},
+ {0x0058, 0x0308, 0x1E8C},
+ {0x0059, 0x0300, 0x1EF2},
+ {0x0059, 0x0301, 0x00DD},
+ {0x0059, 0x0302, 0x0176},
+ {0x0059, 0x0303, 0x1EF8},
+ {0x0059, 0x0304, 0x0232},
+ {0x0059, 0x0307, 0x1E8E},
+ {0x0059, 0x0308, 0x0178},
+ {0x0059, 0x0309, 0x1EF6},
+ {0x0059, 0x0323, 0x1EF4},
+ {0x005A, 0x0301, 0x0179},
+ {0x005A, 0x0302, 0x1E90},
+ {0x005A, 0x0307, 0x017B},
+ {0x005A, 0x030C, 0x017D},
+ {0x005A, 0x0323, 0x1E92},
+ {0x005A, 0x0331, 0x1E94},
+ {0x0061, 0x0300, 0x00E0},
+ {0x0061, 0x0301, 0x00E1},
+ {0x0061, 0x0302, 0x00E2},
+ {0x0061, 0x0303, 0x00E3},
+ {0x0061, 0x0304, 0x0101},
+ {0x0061, 0x0306, 0x0103},
+ {0x0061, 0x0307, 0x0227},
+ {0x0061, 0x0308, 0x00E4},
+ {0x0061, 0x0309, 0x1EA3},
+ {0x0061, 0x030A, 0x00E5},
+ {0x0061, 0x030C, 0x01CE},
+ {0x0061, 0x030F, 0x0201},
+ {0x0061, 0x0311, 0x0203},
+ {0x0061, 0x0323, 0x1EA1},
+ {0x0061, 0x0325, 0x1E01},
+ {0x0061, 0x0328, 0x0105},
+ {0x0062, 0x0307, 0x1E03},
+ {0x0062, 0x0323, 0x1E05},
+ {0x0062, 0x0331, 0x1E07},
+ {0x0063, 0x0301, 0x0107},
+ {0x0063, 0x0302, 0x0109},
+ {0x0063, 0x0307, 0x010B},
+ {0x0063, 0x030C, 0x010D},
+ {0x0063, 0x0327, 0x00E7},
+ {0x0064, 0x0307, 0x1E0B},
+ {0x0064, 0x030C, 0x010F},
+ {0x0064, 0x0323, 0x1E0D},
+ {0x0064, 0x0327, 0x1E11},
+ {0x0064, 0x032D, 0x1E13},
+ {0x0064, 0x0331, 0x1E0F},
+ {0x0065, 0x0300, 0x00E8},
+ {0x0065, 0x0301, 0x00E9},
+ {0x0065, 0x0302, 0x00EA},
+ {0x0065, 0x0303, 0x1EBD},
+ {0x0065, 0x0304, 0x0113},
+ {0x0065, 0x0306, 0x0115},
+ {0x0065, 0x0307, 0x0117},
+ {0x0065, 0x0308, 0x00EB},
+ {0x0065, 0x0309, 0x1EBB},
+ {0x0065, 0x030C, 0x011B},
+ {0x0065, 0x030F, 0x0205},
+ {0x0065, 0x0311, 0x0207},
+ {0x0065, 0x0323, 0x1EB9},
+ {0x0065, 0x0327, 0x0229},
+ {0x0065, 0x0328, 0x0119},
+ {0x0065, 0x032D, 0x1E19},
+ {0x0065, 0x0330, 0x1E1B},
+ {0x0066, 0x0307, 0x1E1F},
+ {0x0067, 0x0301, 0x01F5},
+ {0x0067, 0x0302, 0x011D},
+ {0x0067, 0x0304, 0x1E21},
+ {0x0067, 0x0306, 0x011F},
+ {0x0067, 0x0307, 0x0121},
+ {0x0067, 0x030C, 0x01E7},
+ {0x0067, 0x0327, 0x0123},
+ {0x0068, 0x0302, 0x0125},
+ {0x0068, 0x0307, 0x1E23},
+ {0x0068, 0x0308, 0x1E27},
+ {0x0068, 0x030C, 0x021F},
+ {0x0068, 0x0323, 0x1E25},
+ {0x0068, 0x0327, 0x1E29},
+ {0x0068, 0x032E, 0x1E2B},
+ {0x0068, 0x0331, 0x1E96},
+ {0x0069, 0x0300, 0x00EC},
+ {0x0069, 0x0301, 0x00ED},
+ {0x0069, 0x0302, 0x00EE},
+ {0x0069, 0x0303, 0x0129},
+ {0x0069, 0x0304, 0x012B},
+ {0x0069, 0x0306, 0x012D},
+ {0x0069, 0x0308, 0x00EF},
+ {0x0069, 0x0309, 0x1EC9},
+ {0x0069, 0x030C, 0x01D0},
+ {0x0069, 0x030F, 0x0209},
+ {0x0069, 0x0311, 0x020B},
+ {0x0069, 0x0323, 0x1ECB},
+ {0x0069, 0x0328, 0x012F},
+ {0x0069, 0x0330, 0x1E2D},
+ {0x006A, 0x0302, 0x0135},
+ {0x006A, 0x030C, 0x01F0},
+ {0x006B, 0x0301, 0x1E31},
+ {0x006B, 0x030C, 0x01E9},
+ {0x006B, 0x0323, 0x1E33},
+ {0x006B, 0x0327, 0x0137},
+ {0x006B, 0x0331, 0x1E35},
+ {0x006C, 0x0301, 0x013A},
+ {0x006C, 0x030C, 0x013E},
+ {0x006C, 0x0323, 0x1E37},
+ {0x006C, 0x0327, 0x013C},
+ {0x006C, 0x032D, 0x1E3D},
+ {0x006C, 0x0331, 0x1E3B},
+ {0x006D, 0x0301, 0x1E3F},
+ {0x006D, 0x0307, 0x1E41},
+ {0x006D, 0x0323, 0x1E43},
+ {0x006E, 0x0300, 0x01F9},
+ {0x006E, 0x0301, 0x0144},
+ {0x006E, 0x0303, 0x00F1},
+ {0x006E, 0x0307, 0x1E45},
+ {0x006E, 0x030C, 0x0148},
+ {0x006E, 0x0323, 0x1E47},
+ {0x006E, 0x0327, 0x0146},
+ {0x006E, 0x032D, 0x1E4B},
+ {0x006E, 0x0331, 0x1E49},
+ {0x006F, 0x0300, 0x00F2},
+ {0x006F, 0x0301, 0x00F3},
+ {0x006F, 0x0302, 0x00F4},
+ {0x006F, 0x0303, 0x00F5},
+ {0x006F, 0x0304, 0x014D},
+ {0x006F, 0x0306, 0x014F},
+ {0x006F, 0x0307, 0x022F},
+ {0x006F, 0x0308, 0x00F6},
+ {0x006F, 0x0309, 0x1ECF},
+ {0x006F, 0x030B, 0x0151},
+ {0x006F, 0x030C, 0x01D2},
+ {0x006F, 0x030F, 0x020D},
+ {0x006F, 0x0311, 0x020F},
+ {0x006F, 0x031B, 0x01A1},
+ {0x006F, 0x0323, 0x1ECD},
+ {0x006F, 0x0328, 0x01EB},
+ {0x0070, 0x0301, 0x1E55},
+ {0x0070, 0x0307, 0x1E57},
+ {0x0072, 0x0301, 0x0155},
+ {0x0072, 0x0307, 0x1E59},
+ {0x0072, 0x030C, 0x0159},
+ {0x0072, 0x030F, 0x0211},
+ {0x0072, 0x0311, 0x0213},
+ {0x0072, 0x0323, 0x1E5B},
+ {0x0072, 0x0327, 0x0157},
+ {0x0072, 0x0331, 0x1E5F},
+ {0x0073, 0x0301, 0x015B},
+ {0x0073, 0x0302, 0x015D},
+ {0x0073, 0x0307, 0x1E61},
+ {0x0073, 0x030C, 0x0161},
+ {0x0073, 0x0323, 0x1E63},
+ {0x0073, 0x0326, 0x0219},
+ {0x0073, 0x0327, 0x015F},
+ {0x0074, 0x0307, 0x1E6B},
+ {0x0074, 0x0308, 0x1E97},
+ {0x0074, 0x030C, 0x0165},
+ {0x0074, 0x0323, 0x1E6D},
+ {0x0074, 0x0326, 0x021B},
+ {0x0074, 0x0327, 0x0163},
+ {0x0074, 0x032D, 0x1E71},
+ {0x0074, 0x0331, 0x1E6F},
+ {0x0075, 0x0300, 0x00F9},
+ {0x0075, 0x0301, 0x00FA},
+ {0x0075, 0x0302, 0x00FB},
+ {0x0075, 0x0303, 0x0169},
+ {0x0075, 0x0304, 0x016B},
+ {0x0075, 0x0306, 0x016D},
+ {0x0075, 0x0308, 0x00FC},
+ {0x0075, 0x0309, 0x1EE7},
+ {0x0075, 0x030A, 0x016F},
+ {0x0075, 0x030B, 0x0171},
+ {0x0075, 0x030C, 0x01D4},
+ {0x0075, 0x030F, 0x0215},
+ {0x0075, 0x0311, 0x0217},
+ {0x0075, 0x031B, 0x01B0},
+ {0x0075, 0x0323, 0x1EE5},
+ {0x0075, 0x0324, 0x1E73},
+ {0x0075, 0x0328, 0x0173},
+ {0x0075, 0x032D, 0x1E77},
+ {0x0075, 0x0330, 0x1E75},
+ {0x0076, 0x0303, 0x1E7D},
+ {0x0076, 0x0323, 0x1E7F},
+ {0x0077, 0x0300, 0x1E81},
+ {0x0077, 0x0301, 0x1E83},
+ {0x0077, 0x0302, 0x0175},
+ {0x0077, 0x0307, 0x1E87},
+ {0x0077, 0x0308, 0x1E85},
+ {0x0077, 0x030A, 0x1E98},
+ {0x0077, 0x0323, 0x1E89},
+ {0x0078, 0x0307, 0x1E8B},
+ {0x0078, 0x0308, 0x1E8D},
+ {0x0079, 0x0300, 0x1EF3},
+ {0x0079, 0x0301, 0x00FD},
+ {0x0079, 0x0302, 0x0177},
+ {0x0079, 0x0303, 0x1EF9},
+ {0x0079, 0x0304, 0x0233},
+ {0x0079, 0x0307, 0x1E8F},
+ {0x0079, 0x0308, 0x00FF},
+ {0x0079, 0x0309, 0x1EF7},
+ {0x0079, 0x030A, 0x1E99},
+ {0x0079, 0x0323, 0x1EF5},
+ {0x007A, 0x0301, 0x017A},
+ {0x007A, 0x0302, 0x1E91},
+ {0x007A, 0x0307, 0x017C},
+ {0x007A, 0x030C, 0x017E},
+ {0x007A, 0x0323, 0x1E93},
+ {0x007A, 0x0331, 0x1E95},
+ {0x00A8, 0x0300, 0x1FED},
+ {0x00A8, 0x0301, 0x0385},
+ {0x00A8, 0x0342, 0x1FC1},
+ {0x00C2, 0x0300, 0x1EA6},
+ {0x00C2, 0x0301, 0x1EA4},
+ {0x00C2, 0x0303, 0x1EAA},
+ {0x00C2, 0x0309, 0x1EA8},
+ {0x00C4, 0x0304, 0x01DE},
+ {0x00C5, 0x0301, 0x01FA},
+ {0x00C6, 0x0301, 0x01FC},
+ {0x00C6, 0x0304, 0x01E2},
+ {0x00C7, 0x0301, 0x1E08},
+ {0x00CA, 0x0300, 0x1EC0},
+ {0x00CA, 0x0301, 0x1EBE},
+ {0x00CA, 0x0303, 0x1EC4},
+ {0x00CA, 0x0309, 0x1EC2},
+ {0x00CF, 0x0301, 0x1E2E},
+ {0x00D4, 0x0300, 0x1ED2},
+ {0x00D4, 0x0301, 0x1ED0},
+ {0x00D4, 0x0303, 0x1ED6},
+ {0x00D4, 0x0309, 0x1ED4},
+ {0x00D5, 0x0301, 0x1E4C},
+ {0x00D5, 0x0304, 0x022C},
+ {0x00D5, 0x0308, 0x1E4E},
+ {0x00D6, 0x0304, 0x022A},
+ {0x00D8, 0x0301, 0x01FE},
+ {0x00DC, 0x0300, 0x01DB},
+ {0x00DC, 0x0301, 0x01D7},
+ {0x00DC, 0x0304, 0x01D5},
+ {0x00DC, 0x030C, 0x01D9},
+ {0x00E2, 0x0300, 0x1EA7},
+ {0x00E2, 0x0301, 0x1EA5},
+ {0x00E2, 0x0303, 0x1EAB},
+ {0x00E2, 0x0309, 0x1EA9},
+ {0x00E4, 0x0304, 0x01DF},
+ {0x00E5, 0x0301, 0x01FB},
+ {0x00E6, 0x0301, 0x01FD},
+ {0x00E6, 0x0304, 0x01E3},
+ {0x00E7, 0x0301, 0x1E09},
+ {0x00EA, 0x0300, 0x1EC1},
+ {0x00EA, 0x0301, 0x1EBF},
+ {0x00EA, 0x0303, 0x1EC5},
+ {0x00EA, 0x0309, 0x1EC3},
+ {0x00EF, 0x0301, 0x1E2F},
+ {0x00F4, 0x0300, 0x1ED3},
+ {0x00F4, 0x0301, 0x1ED1},
+ {0x00F4, 0x0303, 0x1ED7},
+ {0x00F4, 0x0309, 0x1ED5},
+ {0x00F5, 0x0301, 0x1E4D},
+ {0x00F5, 0x0304, 0x022D},
+ {0x00F5, 0x0308, 0x1E4F},
+ {0x00F6, 0x0304, 0x022B},
+ {0x00F8, 0x0301, 0x01FF},
+ {0x00FC, 0x0300, 0x01DC},
+ {0x00FC, 0x0301, 0x01D8},
+ {0x00FC, 0x0304, 0x01D6},
+ {0x00FC, 0x030C, 0x01DA},
+ {0x0102, 0x0300, 0x1EB0},
+ {0x0102, 0x0301, 0x1EAE},
+ {0x0102, 0x0303, 0x1EB4},
+ {0x0102, 0x0309, 0x1EB2},
+ {0x0103, 0x0300, 0x1EB1},
+ {0x0103, 0x0301, 0x1EAF},
+ {0x0103, 0x0303, 0x1EB5},
+ {0x0103, 0x0309, 0x1EB3},
+ {0x0112, 0x0300, 0x1E14},
+ {0x0112, 0x0301, 0x1E16},
+ {0x0113, 0x0300, 0x1E15},
+ {0x0113, 0x0301, 0x1E17},
+ {0x014C, 0x0300, 0x1E50},
+ {0x014C, 0x0301, 0x1E52},
+ {0x014D, 0x0300, 0x1E51},
+ {0x014D, 0x0301, 0x1E53},
+ {0x015A, 0x0307, 0x1E64},
+ {0x015B, 0x0307, 0x1E65},
+ {0x0160, 0x0307, 0x1E66},
+ {0x0161, 0x0307, 0x1E67},
+ {0x0168, 0x0301, 0x1E78},
+ {0x0169, 0x0301, 0x1E79},
+ {0x016A, 0x0308, 0x1E7A},
+ {0x016B, 0x0308, 0x1E7B},
+ {0x017F, 0x0307, 0x1E9B},
+ {0x01A0, 0x0300, 0x1EDC},
+ {0x01A0, 0x0301, 0x1EDA},
+ {0x01A0, 0x0303, 0x1EE0},
+ {0x01A0, 0x0309, 0x1EDE},
+ {0x01A0, 0x0323, 0x1EE2},
+ {0x01A1, 0x0300, 0x1EDD},
+ {0x01A1, 0x0301, 0x1EDB},
+ {0x01A1, 0x0303, 0x1EE1},
+ {0x01A1, 0x0309, 0x1EDF},
+ {0x01A1, 0x0323, 0x1EE3},
+ {0x01AF, 0x0300, 0x1EEA},
+ {0x01AF, 0x0301, 0x1EE8},
+ {0x01AF, 0x0303, 0x1EEE},
+ {0x01AF, 0x0309, 0x1EEC},
+ {0x01AF, 0x0323, 0x1EF0},
+ {0x01B0, 0x0300, 0x1EEB},
+ {0x01B0, 0x0301, 0x1EE9},
+ {0x01B0, 0x0303, 0x1EEF},
+ {0x01B0, 0x0309, 0x1EED},
+ {0x01B0, 0x0323, 0x1EF1},
+ {0x01B7, 0x030C, 0x01EE},
+ {0x01EA, 0x0304, 0x01EC},
+ {0x01EB, 0x0304, 0x01ED},
+ {0x0226, 0x0304, 0x01E0},
+ {0x0227, 0x0304, 0x01E1},
+ {0x0228, 0x0306, 0x1E1C},
+ {0x0229, 0x0306, 0x1E1D},
+ {0x022E, 0x0304, 0x0230},
+ {0x022F, 0x0304, 0x0231},
+ {0x0292, 0x030C, 0x01EF},
+ {0x0391, 0x0300, 0x1FBA},
+ {0x0391, 0x0301, 0x0386},
+ {0x0391, 0x0304, 0x1FB9},
+ {0x0391, 0x0306, 0x1FB8},
+ {0x0391, 0x0313, 0x1F08},
+ {0x0391, 0x0314, 0x1F09},
+ {0x0391, 0x0345, 0x1FBC},
+ {0x0395, 0x0300, 0x1FC8},
+ {0x0395, 0x0301, 0x0388},
+ {0x0395, 0x0313, 0x1F18},
+ {0x0395, 0x0314, 0x1F19},
+ {0x0397, 0x0300, 0x1FCA},
+ {0x0397, 0x0301, 0x0389},
+ {0x0397, 0x0313, 0x1F28},
+ {0x0397, 0x0314, 0x1F29},
+ {0x0397, 0x0345, 0x1FCC},
+ {0x0399, 0x0300, 0x1FDA},
+ {0x0399, 0x0301, 0x038A},
+ {0x0399, 0x0304, 0x1FD9},
+ {0x0399, 0x0306, 0x1FD8},
+ {0x0399, 0x0308, 0x03AA},
+ {0x0399, 0x0313, 0x1F38},
+ {0x0399, 0x0314, 0x1F39},
+ {0x039F, 0x0300, 0x1FF8},
+ {0x039F, 0x0301, 0x038C},
+ {0x039F, 0x0313, 0x1F48},
+ {0x039F, 0x0314, 0x1F49},
+ {0x03A1, 0x0314, 0x1FEC},
+ {0x03A5, 0x0300, 0x1FEA},
+ {0x03A5, 0x0301, 0x038E},
+ {0x03A5, 0x0304, 0x1FE9},
+ {0x03A5, 0x0306, 0x1FE8},
+ {0x03A5, 0x0308, 0x03AB},
+ {0x03A5, 0x0314, 0x1F59},
+ {0x03A9, 0x0300, 0x1FFA},
+ {0x03A9, 0x0301, 0x038F},
+ {0x03A9, 0x0313, 0x1F68},
+ {0x03A9, 0x0314, 0x1F69},
+ {0x03A9, 0x0345, 0x1FFC},
+ {0x03AC, 0x0345, 0x1FB4},
+ {0x03AE, 0x0345, 0x1FC4},
+ {0x03B1, 0x0300, 0x1F70},
+ {0x03B1, 0x0301, 0x03AC},
+ {0x03B1, 0x0304, 0x1FB1},
+ {0x03B1, 0x0306, 0x1FB0},
+ {0x03B1, 0x0313, 0x1F00},
+ {0x03B1, 0x0314, 0x1F01},
+ {0x03B1, 0x0342, 0x1FB6},
+ {0x03B1, 0x0345, 0x1FB3},
+ {0x03B5, 0x0300, 0x1F72},
+ {0x03B5, 0x0301, 0x03AD},
+ {0x03B5, 0x0313, 0x1F10},
+ {0x03B5, 0x0314, 0x1F11},
+ {0x03B7, 0x0300, 0x1F74},
+ {0x03B7, 0x0301, 0x03AE},
+ {0x03B7, 0x0313, 0x1F20},
+ {0x03B7, 0x0314, 0x1F21},
+ {0x03B7, 0x0342, 0x1FC6},
+ {0x03B7, 0x0345, 0x1FC3},
+ {0x03B9, 0x0300, 0x1F76},
+ {0x03B9, 0x0301, 0x03AF},
+ {0x03B9, 0x0304, 0x1FD1},
+ {0x03B9, 0x0306, 0x1FD0},
+ {0x03B9, 0x0308, 0x03CA},
+ {0x03B9, 0x0313, 0x1F30},
+ {0x03B9, 0x0314, 0x1F31},
+ {0x03B9, 0x0342, 0x1FD6},
+ {0x03BF, 0x0300, 0x1F78},
+ {0x03BF, 0x0301, 0x03CC},
+ {0x03BF, 0x0313, 0x1F40},
+ {0x03BF, 0x0314, 0x1F41},
+ {0x03C1, 0x0313, 0x1FE4},
+ {0x03C1, 0x0314, 0x1FE5},
+ {0x03C5, 0x0300, 0x1F7A},
+ {0x03C5, 0x0301, 0x03CD},
+ {0x03C5, 0x0304, 0x1FE1},
+ {0x03C5, 0x0306, 0x1FE0},
+ {0x03C5, 0x0308, 0x03CB},
+ {0x03C5, 0x0313, 0x1F50},
+ {0x03C5, 0x0314, 0x1F51},
+ {0x03C5, 0x0342, 0x1FE6},
+ {0x03C9, 0x0300, 0x1F7C},
+ {0x03C9, 0x0301, 0x03CE},
+ {0x03C9, 0x0313, 0x1F60},
+ {0x03C9, 0x0314, 0x1F61},
+ {0x03C9, 0x0342, 0x1FF6},
+ {0x03C9, 0x0345, 0x1FF3},
+ {0x03CA, 0x0300, 0x1FD2},
+ {0x03CA, 0x0301, 0x0390},
+ {0x03CA, 0x0342, 0x1FD7},
+ {0x03CB, 0x0300, 0x1FE2},
+ {0x03CB, 0x0301, 0x03B0},
+ {0x03CB, 0x0342, 0x1FE7},
+ {0x03CE, 0x0345, 0x1FF4},
+ {0x03D2, 0x0301, 0x03D3},
+ {0x03D2, 0x0308, 0x03D4},
+ {0x0406, 0x0308, 0x0407},
+ {0x0410, 0x0306, 0x04D0},
+ {0x0410, 0x0308, 0x04D2},
+ {0x0413, 0x0301, 0x0403},
+ {0x0415, 0x0300, 0x0400},
+ {0x0415, 0x0306, 0x04D6},
+ {0x0415, 0x0308, 0x0401},
+ {0x0416, 0x0306, 0x04C1},
+ {0x0416, 0x0308, 0x04DC},
+ {0x0417, 0x0308, 0x04DE},
+ {0x0418, 0x0300, 0x040D},
+ {0x0418, 0x0304, 0x04E2},
+ {0x0418, 0x0306, 0x0419},
+ {0x0418, 0x0308, 0x04E4},
+ {0x041A, 0x0301, 0x040C},
+ {0x041E, 0x0308, 0x04E6},
+ {0x0423, 0x0304, 0x04EE},
+ {0x0423, 0x0306, 0x040E},
+ {0x0423, 0x0308, 0x04F0},
+ {0x0423, 0x030B, 0x04F2},
+ {0x0427, 0x0308, 0x04F4},
+ {0x042B, 0x0308, 0x04F8},
+ {0x042D, 0x0308, 0x04EC},
+ {0x0430, 0x0306, 0x04D1},
+ {0x0430, 0x0308, 0x04D3},
+ {0x0433, 0x0301, 0x0453},
+ {0x0435, 0x0300, 0x0450},
+ {0x0435, 0x0306, 0x04D7},
+ {0x0435, 0x0308, 0x0451},
+ {0x0436, 0x0306, 0x04C2},
+ {0x0436, 0x0308, 0x04DD},
+ {0x0437, 0x0308, 0x04DF},
+ {0x0438, 0x0300, 0x045D},
+ {0x0438, 0x0304, 0x04E3},
+ {0x0438, 0x0306, 0x0439},
+ {0x0438, 0x0308, 0x04E5},
+ {0x043A, 0x0301, 0x045C},
+ {0x043E, 0x0308, 0x04E7},
+ {0x0443, 0x0304, 0x04EF},
+ {0x0443, 0x0306, 0x045E},
+ {0x0443, 0x0308, 0x04F1},
+ {0x0443, 0x030B, 0x04F3},
+ {0x0447, 0x0308, 0x04F5},
+ {0x044B, 0x0308, 0x04F9},
+ {0x044D, 0x0308, 0x04ED},
+ {0x0456, 0x0308, 0x0457},
+ {0x0474, 0x030F, 0x0476},
+ {0x0475, 0x030F, 0x0477},
+ {0x04D8, 0x0308, 0x04DA},
+ {0x04D9, 0x0308, 0x04DB},
+ {0x04E8, 0x0308, 0x04EA},
+ {0x04E9, 0x0308, 0x04EB},
+ {0x0627, 0x0653, 0x0622},
+ {0x0627, 0x0654, 0x0623},
+ {0x0627, 0x0655, 0x0625},
+ {0x0648, 0x0654, 0x0624},
+ {0x064A, 0x0654, 0x0626},
+ {0x06C1, 0x0654, 0x06C2},
+ {0x06D2, 0x0654, 0x06D3},
+ {0x06D5, 0x0654, 0x06C0},
+ {0x0928, 0x093C, 0x0929},
+ {0x0930, 0x093C, 0x0931},
+ {0x0933, 0x093C, 0x0934},
+ {0x09C7, 0x09BE, 0x09CB},
+ {0x09C7, 0x09D7, 0x09CC},
+ {0x0B47, 0x0B3E, 0x0B4B},
+ {0x0B47, 0x0B56, 0x0B48},
+ {0x0B47, 0x0B57, 0x0B4C},
+ {0x0B92, 0x0BD7, 0x0B94},
+ {0x0BC6, 0x0BBE, 0x0BCA},
+ {0x0BC6, 0x0BD7, 0x0BCC},
+ {0x0BC7, 0x0BBE, 0x0BCB},
+ {0x0C46, 0x0C56, 0x0C48},
+ {0x0CBF, 0x0CD5, 0x0CC0},
+ {0x0CC6, 0x0CC2, 0x0CCA},
+ {0x0CC6, 0x0CD5, 0x0CC7},
+ {0x0CC6, 0x0CD6, 0x0CC8},
+ {0x0CCA, 0x0CD5, 0x0CCB},
+ {0x0D46, 0x0D3E, 0x0D4A},
+ {0x0D46, 0x0D57, 0x0D4C},
+ {0x0D47, 0x0D3E, 0x0D4B},
+ {0x0DD9, 0x0DCA, 0x0DDA},
+ {0x0DD9, 0x0DCF, 0x0DDC},
+ {0x0DD9, 0x0DDF, 0x0DDE},
+ {0x0DDC, 0x0DCA, 0x0DDD},
+ {0x1025, 0x102E, 0x1026},
+ {0x1B05, 0x1B35, 0x1B06},
+ {0x1B07, 0x1B35, 0x1B08},
+ {0x1B09, 0x1B35, 0x1B0A},
+ {0x1B0B, 0x1B35, 0x1B0C},
+ {0x1B0D, 0x1B35, 0x1B0E},
+ {0x1B11, 0x1B35, 0x1B12},
+ {0x1B3A, 0x1B35, 0x1B3B},
+ {0x1B3C, 0x1B35, 0x1B3D},
+ {0x1B3E, 0x1B35, 0x1B40},
+ {0x1B3F, 0x1B35, 0x1B41},
+ {0x1B42, 0x1B35, 0x1B43},
+ {0x1E36, 0x0304, 0x1E38},
+ {0x1E37, 0x0304, 0x1E39},
+ {0x1E5A, 0x0304, 0x1E5C},
+ {0x1E5B, 0x0304, 0x1E5D},
+ {0x1E62, 0x0307, 0x1E68},
+ {0x1E63, 0x0307, 0x1E69},
+ {0x1EA0, 0x0302, 0x1EAC},
+ {0x1EA0, 0x0306, 0x1EB6},
+ {0x1EA1, 0x0302, 0x1EAD},
+ {0x1EA1, 0x0306, 0x1EB7},
+ {0x1EB8, 0x0302, 0x1EC6},
+ {0x1EB9, 0x0302, 0x1EC7},
+ {0x1ECC, 0x0302, 0x1ED8},
+ {0x1ECD, 0x0302, 0x1ED9},
+ {0x1F00, 0x0300, 0x1F02},
+ {0x1F00, 0x0301, 0x1F04},
+ {0x1F00, 0x0342, 0x1F06},
+ {0x1F00, 0x0345, 0x1F80},
+ {0x1F01, 0x0300, 0x1F03},
+ {0x1F01, 0x0301, 0x1F05},
+ {0x1F01, 0x0342, 0x1F07},
+ {0x1F01, 0x0345, 0x1F81},
+ {0x1F02, 0x0345, 0x1F82},
+ {0x1F03, 0x0345, 0x1F83},
+ {0x1F04, 0x0345, 0x1F84},
+ {0x1F05, 0x0345, 0x1F85},
+ {0x1F06, 0x0345, 0x1F86},
+ {0x1F07, 0x0345, 0x1F87},
+ {0x1F08, 0x0300, 0x1F0A},
+ {0x1F08, 0x0301, 0x1F0C},
+ {0x1F08, 0x0342, 0x1F0E},
+ {0x1F08, 0x0345, 0x1F88},
+ {0x1F09, 0x0300, 0x1F0B},
+ {0x1F09, 0x0301, 0x1F0D},
+ {0x1F09, 0x0342, 0x1F0F},
+ {0x1F09, 0x0345, 0x1F89},
+ {0x1F0A, 0x0345, 0x1F8A},
+ {0x1F0B, 0x0345, 0x1F8B},
+ {0x1F0C, 0x0345, 0x1F8C},
+ {0x1F0D, 0x0345, 0x1F8D},
+ {0x1F0E, 0x0345, 0x1F8E},
+ {0x1F0F, 0x0345, 0x1F8F},
+ {0x1F10, 0x0300, 0x1F12},
+ {0x1F10, 0x0301, 0x1F14},
+ {0x1F11, 0x0300, 0x1F13},
+ {0x1F11, 0x0301, 0x1F15},
+ {0x1F18, 0x0300, 0x1F1A},
+ {0x1F18, 0x0301, 0x1F1C},
+ {0x1F19, 0x0300, 0x1F1B},
+ {0x1F19, 0x0301, 0x1F1D},
+ {0x1F20, 0x0300, 0x1F22},
+ {0x1F20, 0x0301, 0x1F24},
+ {0x1F20, 0x0342, 0x1F26},
+ {0x1F20, 0x0345, 0x1F90},
+ {0x1F21, 0x0300, 0x1F23},
+ {0x1F21, 0x0301, 0x1F25},
+ {0x1F21, 0x0342, 0x1F27},
+ {0x1F21, 0x0345, 0x1F91},
+ {0x1F22, 0x0345, 0x1F92},
+ {0x1F23, 0x0345, 0x1F93},
+ {0x1F24, 0x0345, 0x1F94},
+ {0x1F25, 0x0345, 0x1F95},
+ {0x1F26, 0x0345, 0x1F96},
+ {0x1F27, 0x0345, 0x1F97},
+ {0x1F28, 0x0300, 0x1F2A},
+ {0x1F28, 0x0301, 0x1F2C},
+ {0x1F28, 0x0342, 0x1F2E},
+ {0x1F28, 0x0345, 0x1F98},
+ {0x1F29, 0x0300, 0x1F2B},
+ {0x1F29, 0x0301, 0x1F2D},
+ {0x1F29, 0x0342, 0x1F2F},
+ {0x1F29, 0x0345, 0x1F99},
+ {0x1F2A, 0x0345, 0x1F9A},
+ {0x1F2B, 0x0345, 0x1F9B},
+ {0x1F2C, 0x0345, 0x1F9C},
+ {0x1F2D, 0x0345, 0x1F9D},
+ {0x1F2E, 0x0345, 0x1F9E},
+ {0x1F2F, 0x0345, 0x1F9F},
+ {0x1F30, 0x0300, 0x1F32},
+ {0x1F30, 0x0301, 0x1F34},
+ {0x1F30, 0x0342, 0x1F36},
+ {0x1F31, 0x0300, 0x1F33},
+ {0x1F31, 0x0301, 0x1F35},
+ {0x1F31, 0x0342, 0x1F37},
+ {0x1F38, 0x0300, 0x1F3A},
+ {0x1F38, 0x0301, 0x1F3C},
+ {0x1F38, 0x0342, 0x1F3E},
+ {0x1F39, 0x0300, 0x1F3B},
+ {0x1F39, 0x0301, 0x1F3D},
+ {0x1F39, 0x0342, 0x1F3F},
+ {0x1F40, 0x0300, 0x1F42},
+ {0x1F40, 0x0301, 0x1F44},
+ {0x1F41, 0x0300, 0x1F43},
+ {0x1F41, 0x0301, 0x1F45},
+ {0x1F48, 0x0300, 0x1F4A},
+ {0x1F48, 0x0301, 0x1F4C},
+ {0x1F49, 0x0300, 0x1F4B},
+ {0x1F49, 0x0301, 0x1F4D},
+ {0x1F50, 0x0300, 0x1F52},
+ {0x1F50, 0x0301, 0x1F54},
+ {0x1F50, 0x0342, 0x1F56},
+ {0x1F51, 0x0300, 0x1F53},
+ {0x1F51, 0x0301, 0x1F55},
+ {0x1F51, 0x0342, 0x1F57},
+ {0x1F59, 0x0300, 0x1F5B},
+ {0x1F59, 0x0301, 0x1F5D},
+ {0x1F59, 0x0342, 0x1F5F},
+ {0x1F60, 0x0300, 0x1F62},
+ {0x1F60, 0x0301, 0x1F64},
+ {0x1F60, 0x0342, 0x1F66},
+ {0x1F60, 0x0345, 0x1FA0},
+ {0x1F61, 0x0300, 0x1F63},
+ {0x1F61, 0x0301, 0x1F65},
+ {0x1F61, 0x0342, 0x1F67},
+ {0x1F61, 0x0345, 0x1FA1},
+ {0x1F62, 0x0345, 0x1FA2},
+ {0x1F63, 0x0345, 0x1FA3},
+ {0x1F64, 0x0345, 0x1FA4},
+ {0x1F65, 0x0345, 0x1FA5},
+ {0x1F66, 0x0345, 0x1FA6},
+ {0x1F67, 0x0345, 0x1FA7},
+ {0x1F68, 0x0300, 0x1F6A},
+ {0x1F68, 0x0301, 0x1F6C},
+ {0x1F68, 0x0342, 0x1F6E},
+ {0x1F68, 0x0345, 0x1FA8},
+ {0x1F69, 0x0300, 0x1F6B},
+ {0x1F69, 0x0301, 0x1F6D},
+ {0x1F69, 0x0342, 0x1F6F},
+ {0x1F69, 0x0345, 0x1FA9},
+ {0x1F6A, 0x0345, 0x1FAA},
+ {0x1F6B, 0x0345, 0x1FAB},
+ {0x1F6C, 0x0345, 0x1FAC},
+ {0x1F6D, 0x0345, 0x1FAD},
+ {0x1F6E, 0x0345, 0x1FAE},
+ {0x1F6F, 0x0345, 0x1FAF},
+ {0x1F70, 0x0345, 0x1FB2},
+ {0x1F74, 0x0345, 0x1FC2},
+ {0x1F7C, 0x0345, 0x1FF2},
+ {0x1FB6, 0x0345, 0x1FB7},
+ {0x1FBF, 0x0300, 0x1FCD},
+ {0x1FBF, 0x0301, 0x1FCE},
+ {0x1FBF, 0x0342, 0x1FCF},
+ {0x1FC6, 0x0345, 0x1FC7},
+ {0x1FF6, 0x0345, 0x1FF7},
+ {0x1FFE, 0x0300, 0x1FDD},
+ {0x1FFE, 0x0301, 0x1FDE},
+ {0x1FFE, 0x0342, 0x1FDF},
+ {0x2190, 0x0338, 0x219A},
+ {0x2192, 0x0338, 0x219B},
+ {0x2194, 0x0338, 0x21AE},
+ {0x21D0, 0x0338, 0x21CD},
+ {0x21D2, 0x0338, 0x21CF},
+ {0x21D4, 0x0338, 0x21CE},
+ {0x2203, 0x0338, 0x2204},
+ {0x2208, 0x0338, 0x2209},
+ {0x220B, 0x0338, 0x220C},
+ {0x2223, 0x0338, 0x2224},
+ {0x2225, 0x0338, 0x2226},
+ {0x223C, 0x0338, 0x2241},
+ {0x2243, 0x0338, 0x2244},
+ {0x2245, 0x0338, 0x2247},
+ {0x2248, 0x0338, 0x2249},
+ {0x224D, 0x0338, 0x226D},
+ {0x2261, 0x0338, 0x2262},
+ {0x2264, 0x0338, 0x2270},
+ {0x2265, 0x0338, 0x2271},
+ {0x2272, 0x0338, 0x2274},
+ {0x2273, 0x0338, 0x2275},
+ {0x2276, 0x0338, 0x2278},
+ {0x2277, 0x0338, 0x2279},
+ {0x227A, 0x0338, 0x2280},
+ {0x227B, 0x0338, 0x2281},
+ {0x227C, 0x0338, 0x22E0},
+ {0x227D, 0x0338, 0x22E1},
+ {0x2282, 0x0338, 0x2284},
+ {0x2283, 0x0338, 0x2285},
+ {0x2286, 0x0338, 0x2288},
+ {0x2287, 0x0338, 0x2289},
+ {0x2291, 0x0338, 0x22E2},
+ {0x2292, 0x0338, 0x22E3},
+ {0x22A2, 0x0338, 0x22AC},
+ {0x22A8, 0x0338, 0x22AD},
+ {0x22A9, 0x0338, 0x22AE},
+ {0x22AB, 0x0338, 0x22AF},
+ {0x22B2, 0x0338, 0x22EA},
+ {0x22B3, 0x0338, 0x22EB},
+ {0x22B4, 0x0338, 0x22EC},
+ {0x22B5, 0x0338, 0x22ED},
+ {0x3046, 0x3099, 0x3094},
+ {0x304B, 0x3099, 0x304C},
+ {0x304D, 0x3099, 0x304E},
+ {0x304F, 0x3099, 0x3050},
+ {0x3051, 0x3099, 0x3052},
+ {0x3053, 0x3099, 0x3054},
+ {0x3055, 0x3099, 0x3056},
+ {0x3057, 0x3099, 0x3058},
+ {0x3059, 0x3099, 0x305A},
+ {0x305B, 0x3099, 0x305C},
+ {0x305D, 0x3099, 0x305E},
+ {0x305F, 0x3099, 0x3060},
+ {0x3061, 0x3099, 0x3062},
+ {0x3064, 0x3099, 0x3065},
+ {0x3066, 0x3099, 0x3067},
+ {0x3068, 0x3099, 0x3069},
+ {0x306F, 0x3099, 0x3070},
+ {0x306F, 0x309A, 0x3071},
+ {0x3072, 0x3099, 0x3073},
+ {0x3072, 0x309A, 0x3074},
+ {0x3075, 0x3099, 0x3076},
+ {0x3075, 0x309A, 0x3077},
+ {0x3078, 0x3099, 0x3079},
+ {0x3078, 0x309A, 0x307A},
+ {0x307B, 0x3099, 0x307C},
+ {0x307B, 0x309A, 0x307D},
+ {0x309D, 0x3099, 0x309E},
+ {0x30A6, 0x3099, 0x30F4},
+ {0x30AB, 0x3099, 0x30AC},
+ {0x30AD, 0x3099, 0x30AE},
+ {0x30AF, 0x3099, 0x30B0},
+ {0x30B1, 0x3099, 0x30B2},
+ {0x30B3, 0x3099, 0x30B4},
+ {0x30B5, 0x3099, 0x30B6},
+ {0x30B7, 0x3099, 0x30B8},
+ {0x30B9, 0x3099, 0x30BA},
+ {0x30BB, 0x3099, 0x30BC},
+ {0x30BD, 0x3099, 0x30BE},
+ {0x30BF, 0x3099, 0x30C0},
+ {0x30C1, 0x3099, 0x30C2},
+ {0x30C4, 0x3099, 0x30C5},
+ {0x30C6, 0x3099, 0x30C7},
+ {0x30C8, 0x3099, 0x30C9},
+ {0x30CF, 0x3099, 0x30D0},
+ {0x30CF, 0x309A, 0x30D1},
+ {0x30D2, 0x3099, 0x30D3},
+ {0x30D2, 0x309A, 0x30D4},
+ {0x30D5, 0x3099, 0x30D6},
+ {0x30D5, 0x309A, 0x30D7},
+ {0x30D8, 0x3099, 0x30D9},
+ {0x30D8, 0x309A, 0x30DA},
+ {0x30DB, 0x3099, 0x30DC},
+ {0x30DB, 0x309A, 0x30DD},
+ {0x30EF, 0x3099, 0x30F7},
+ {0x30F0, 0x3099, 0x30F8},
+ {0x30F1, 0x3099, 0x30F9},
+ {0x30F2, 0x3099, 0x30FA},
+ {0x30FD, 0x3099, 0x30FE},
+ {0x11099, 0x110BA, 0x1109A},
+ {0x1109B, 0x110BA, 0x1109C},
+ {0x110A5, 0x110BA, 0x110AB},
+ {0x11131, 0x11127, 0x1112E},
+ {0x11132, 0x11127, 0x1112F},
+ {0x11347, 0x1133E, 0x1134B},
+ {0x11347, 0x11357, 0x1134C},
+ {0x114B9, 0x114B0, 0x114BC},
+ {0x114B9, 0x114BA, 0x114BB},
+ {0x114B9, 0x114BD, 0x114BE},
+ {0x115B8, 0x115AF, 0x115BA},
+ {0x115B9, 0x115AF, 0x115BB},
+ {0x11935, 0x11930, 0x11938},
+};
+
+uint32_t vega_composition(uint32_t first, uint32_t second) {
+ size_t low = 0, high = sizeof(compositions) / sizeof(*compositions);
+ while (low < high) {
+ size_t middle = (low + high) / 2;
+ const uint32_t *row = compositions[middle];
+ if (row[0] < first || (row[0] == first && row[1] < second)) low = middle + 1;
+ else high = middle;
+ }
+ return low < sizeof(compositions) / sizeof(*compositions) && compositions[low][0] == first &&
+ compositions[low][1] == second ? compositions[low][2] : 0;
+}
diff --git a/text/unicode.py b/text/unicode.py
index ac0abaf..e4710db 100644
--- a/text/unicode.py
+++ b/text/unicode.py
@@ -74,9 +74,51 @@ def two_stage(name, values):
return '\n'.join(out), len(stage1) * 2 + len(blocks) * 256
+def unicode_data():
+ """Each code point's UnicodeData.txt fields (ranges expanded)."""
+ rows, start = {}, None
+ for line in (UCD / 'UnicodeData.txt').read_text(encoding='utf-8').splitlines():
+ fields = line.split(';')
+ code = int(fields[0], 16)
+ if fields[1].endswith(', First>'):
+ start = code
+ continue
+ if fields[1].endswith(', Last>'):
+ for c in range(start, code + 1):
+ rows[c] = fields
+ continue
+ rows[code] = fields
+ return rows
+
+
+def normalization():
+ """Canonical combining classes, full canonical decompositions (Hangul
+ syllables aside: they are algorithmic) and the primary composites."""
+ rows = unicode_data()
+ ccc = [0] * (LAST + 1)
+ single = {}
+ for code, fields in rows.items():
+ ccc[code] = int(fields[3])
+ if fields[5] and not fields[5].startswith('<'):
+ single[code] = [int(x, 16) for x in fields[5].split()]
+
+ def full(code):
+ return [c for d in single[code] for c in (full(d) if d in single else [d])]
+
+ excluded = set()
+ for first, last, fields, missing in ranges('DerivedNormalizationProps.txt'):
+ if not missing and fields[0] == 'Full_Composition_Exclusion':
+ excluded.update(range(first, last + 1))
+ decompositions = {code: full(code) for code in single}
+ compositions = sorted((d[0], d[1], code) for code, d in single.items() if len(d) == 2 and code not in excluded)
+ return ccc, decompositions, compositions
+
+
def main():
bidi = derived('extracted/DerivedBidiClass.txt', BIDI, LONG)
table, size = two_stage('bidi', bidi)
+ ccc, decompositions, compositions = normalization()
+ ccc_table, ccc_size = two_stage('ccc', ccc)
brackets = []
for first, _, fields, missing in ranges('BidiBrackets.txt'):
if not missing:
@@ -128,6 +170,52 @@ uint32_t vega_mirror(uint32_t code) {
long row = find(&mirrors[0][0], sizeof(mirrors) / sizeof(*mirrors), 2, code);
return row < 0 ? 0 : mirrors[row][1];
}''')
+ print()
+ print(f'/* Canonical_Combining_Class ({ccc_size} bytes). */')
+ print(ccc_table)
+ print()
+ print('uint8_t vega_combining_class(uint32_t code) {')
+ print(' return code > 0x10FFFF ? 0 : ccc_values[ccc_blocks[code >> 8] * 256u + (code & 255)];')
+ print('}')
+ pool, rows = [], []
+ for code in sorted(decompositions):
+ rows.append((code, len(pool), len(decompositions[code])))
+ pool.extend(decompositions[code])
+ print()
+ print('/* Full canonical decompositions (Hangul syllables aside): code, start in the pool, length. */')
+ print(f'static const uint32_t decompositions[{len(rows)}][3] = {{')
+ for code, start, length in rows:
+ print(f' {{0x{code:04X}, {start}, {length}}},')
+ print('};')
+ print(f'static const uint32_t decomposed[{len(pool)}] = {{')
+ for i in range(0, len(pool), 12):
+ print(' ' + ', '.join(f'0x{c:04X}' for c in pool[i:i + 12]) + ',')
+ print('};')
+ print()
+ print('size_t vega_decomposition(uint32_t code, const uint32_t **out) {')
+ print(' long row = find(&decompositions[0][0], sizeof(decompositions) / sizeof(*decompositions), 3, code);')
+ print(' if (row < 0) return 0;')
+ print(' *out = decomposed + decompositions[row][1];')
+ print(' return decompositions[row][2];')
+ print('}')
+ print()
+ print('/* The primary composites: first, second, composite, by first then second. */')
+ print(f'static const uint32_t compositions[{len(compositions)}][3] = {{')
+ for first, second, code in compositions:
+ print(f' {{0x{first:04X}, 0x{second:04X}, 0x{code:04X}}},')
+ print('};')
+ print('''
+uint32_t vega_composition(uint32_t first, uint32_t second) {
+ size_t low = 0, high = sizeof(compositions) / sizeof(*compositions);
+ while (low < high) {
+ size_t middle = (low + high) / 2;
+ const uint32_t *row = compositions[middle];
+ if (row[0] < first || (row[0] == first && row[1] < second)) low = middle + 1;
+ else high = middle;
+ }
+ return low < sizeof(compositions) / sizeof(*compositions) && compositions[low][0] == first &&
+ compositions[low][1] == second ? compositions[low][2] : 0;
+}''')
if __name__ == '__main__':